Compare commits

..

2 Commits

Author SHA1 Message Date
Gabor Kiss-Vamosi
fc98bf7f3c chore: kick CI to rebuild the docs 2024-04-23 15:57:22 +02:00
Jason Peterson
e19410f8f8 fix(demo): added gaurd to prevent crash if default theme is not used (#3257) 2022-04-11 12:44:53 +02:00
815 changed files with 13950 additions and 49808 deletions

View File

@@ -1,10 +1,8 @@
### Description of the feature or fix
A clear and concise description of what the bug or new feature is.
- Update the [Documentation](https://github.com/lvgl/lvgl/tree/master/docs) if needed.
- Add [Examples](https://github.com/lvgl/lvgl/tree/master/examples) if relevant.
- Add [Tests](https://github.com/lvgl/lvgl/blob/master/tests/README.md) if applicable.
- If you added new options to `lv_conf_template.h` run [lv_conf_internal_gen.py](https://github.com/lvgl/lvgl/blob/master/scripts/lv_conf_internal_gen.py) and update [Kconfig](https://github.com/lvgl/lvgl/blob/master/Kconfig).
- Run `scripts/code-format.py` (`astyle v3.4.12` needs to installed by running `cd scripts; ./install_astyle.sh`) and follow the [Code Conventions](https://docs.lvgl.io/master/CODING_STYLE.html).
- Mark the Pull request as [Draft](https://docs.github.com/en/pull-requests/collaborating-with-pull-requests/proposing-changes-to-your-work-with-pull-requests/changing-the-stage-of-a-pull-request) while you are working on the first version, and mark is as _Ready_ when it's ready for review.
- When changes were requested, [re-request review](https://docs.github.com/en/pull-requests/collaborating-with-pull-requests/proposing-changes-to-your-work-with-pull-requests/requesting-a-pull-request-review) to notify the maintainers.
- Help us to review this Pull Request! Anyone can [approve or request changes](https://docs.github.com/en/pull-requests/collaborating-with-pull-requests/reviewing-changes-in-pull-requests/approving-a-pull-request-with-required-reviews).
### Checkpoints
- [ ] Follow the [styling guide](https://github.com/lvgl/lvgl/blob/master/docs/CODING_STYLE.md)
- [ ] Run `code-format.py` from the `scripts` folder. [astyle](http://astyle.sourceforge.net/install.html) needs to be installed.
- [ ] Update the documentation

View File

@@ -6,7 +6,6 @@ on:
branches: [ master, release/v8.* ]
jobs:
lint:
if: ${{ github.event_name != 'pull_request' || github.repository != github.event.pull_request.head.repo.full_name }}
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2

View File

@@ -6,9 +6,8 @@ on:
jobs:
build:
if: ${{ github.event_name != 'pull_request' || github.repository != github.event.pull_request.head.repo.full_name }}
name: Build ${{ matrix.port }} port
runs-on: ubuntu-20.04
runs-on: ubuntu-latest
continue-on-error: true
strategy:
matrix:
@@ -23,7 +22,7 @@ jobs:
- name: Clone lv_micropython
run: |
git clone https://github.com/lvgl/lv_micropython.git .
git checkout release/v8
git checkout master
- name: Initialize lv_bindings submodule
run: git submodule update --init --recursive lib/lv_bindings
- name: Update ${{ matrix.port }} port submodules

View File

@@ -8,7 +8,6 @@ on:
jobs:
build:
if: ${{ github.event_name != 'pull_request' || github.repository != github.event.pull_request.head.repo.full_name }}
runs-on: ubuntu-latest
strategy:
matrix:
@@ -36,11 +35,6 @@ jobs:
- uses: ammaraskar/gcc-problem-matcher@master
- name: Install prerequisites
run: scripts/install-prerequisites.sh
- name: Fix kernel mmap rnd bits
# Asan in llvm 14 provided in ubuntu 22.04 is incompatible with
# high-entropy ASLR in much newer kernels that GitHub runners are
# using leading to random crashes: https://reviews.llvm.org/D148280
run: sudo sysctl vm.mmap_rnd_bits=28
- name: Run tests
run: python tests/main.py --report test
- name: Upload coverage to Codecov
@@ -61,7 +55,6 @@ jobs:
steps:
- uses: actions/checkout@v2.1.0
- uses: ammaraskar/gcc-problem-matcher@master
- name: Setup cache
uses: actions/cache@v2
with:
@@ -98,12 +91,4 @@ jobs:
echo 'export PATH="/usr/lib/ccache:$PATH"' | tee -a ~/.bashrc
run: |
if [[ "${{ matrix.distro }}" == "ubuntu22.04" ]]; then
# ASan in llvm 14 provided in ubuntu-22.04 is incompatible with
# high-entropy ASLR configured in much newer kernels that GitHub
# runners are using leading to random crashes:
# https://github.com/actions/runner-images/issues/9491
# can remove this once the issue is fixed.
sysctl -w vm.mmap_rnd_bits=28
fi
env PATH="/usr/lib/ccache:$PATH" ASAN_OPTIONS=detect_leaks=0 python3 tests/main.py test

View File

@@ -5,7 +5,6 @@ on:
jobs:
verify-conf-internal:
if: ${{ github.event_name != 'pull_request' || github.repository != github.event.pull_request.head.repo.full_name }}
runs-on: ubuntu-latest
steps:
- name: Checkout

View File

@@ -5,25 +5,18 @@ on:
jobs:
verify-formatting:
if: ${{ github.event_name != 'pull_request' || github.repository != github.event.pull_request.head.repo.full_name }}
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v4
uses: actions/checkout@v2
with:
persist-credentials: false
fetch-depth: 0
- name: Checkout astyle
uses: actions/checkout@v4
with:
repository: lvgl/astyle
path: astyle
- name: Install astyle
run: |
cd astyle/build/gcc/
make
sudo make install
astyle --version
sudo add-apt-repository -y "deb http://archive.ubuntu.com/ubuntu `lsb_release -sc` main universe restricted multiverse"
sudo apt-get update -y -qq
sudo apt-get install astyle
- name: Format code
run: python code-format.py
working-directory: scripts
@@ -35,3 +28,12 @@ jobs:
echo "Please apply the preceding diff to your code or run scripts/code-format.py"
exit 1
fi
- name: Comment PR
uses: thollander/actions-comment-pull-request@v1
if: github.event_name == 'pull_request' && failure()
with:
message: |
Your PR needs its formatting corrected before it can be merged upstream.
Please run `scripts/code-format.py` and commit the resulting change.
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}

View File

@@ -9,20 +9,12 @@ jobs:
if: github.repository == 'lvgl/lvgl'
runs-on: ubuntu-latest
steps:
- uses: actions/stale@v5
- uses: actions/stale@v3
with:
repo-token: ${{ secrets.LVGL_BOT_TOKEN }}
stale-issue-message: 'This issue is stale because it has been open 14 days with no activity. Remove stale label or comment or this will be closed in 7 days.'
stale-pr-message: |
We need some feedback on this issue.
Now we mark this as "stale" because there was no activity here for 14 days.
Remove the "stale" label or comment else this will be closed in 7 days.
close-issue-message: |
As there was no activity here for a while we close this issue. But don't worry, the conversation is still here and you can get back to it at any time.
So feel free to comment if you have remarks or ideas on this topic.
stale-pr-message: 'This PR is stale because it has been open 14 days with no activity. Remove stale label or comment or this will be closed in 7 days.'
close-issue-message: 'This issue was closed because it has been stalled for 7 days with no activity.'
days-before-stale: 14
days-before-close: 7
exempt-issue-labels: 'pinned'

View File

@@ -1,23 +1,23 @@
name: Push LVGL release to Espressif Component Service
# If the commit is tagged, it will be uploaded. Other scenario silently fail.
on:
push:
tags:
- v*
jobs:
upload_components:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
with:
submodules: "recursive"
- name: Upload component to component registry
uses: espressif/upload-components-ci-action@v1
with:
name: "lvgl"
version: ${{ github.ref_name }}
namespace: "lvgl"
api_token: ${{ secrets.ESP_IDF_COMPONENT_API_TOKEN }}
name: Push LVGL release to Espressif Component Service
# If the commit is tagged, it will be uploaded. Other scenario silently fail.
on:
push:
branches:
- master
jobs:
upload_components:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@master
with:
submodules: "recursive"
- name: Upload component to component registry
uses: espressif/github-actions/upload_components@master
with:
name: "lvgl"
version: "git"
namespace: "lvgl"
api_token: ${{ secrets.ESP_IDF_COMPONENT_API_TOKEN }}

View File

@@ -1,21 +0,0 @@
name: Check Makefile
on:
push:
branches: [ master, release/v8.* ]
pull_request:
branches: [ master, release/v8.* ]
jobs:
build:
if: ${{ github.event_name != 'pull_request' || github.repository != github.event.pull_request.head.repo.full_name }}
runs-on: ubuntu-latest
name: Build using Makefile
steps:
- uses: actions/checkout@v2
- uses: ammaraskar/gcc-problem-matcher@master
- name: Install prerequisites
run: scripts/install-prerequisites.sh
- name: Build
working-directory: tests/makefile
run: make test_file

3
.gitignore vendored
View File

@@ -22,6 +22,3 @@ test_screenshot_error.h
build/
tests/build_*/
tests/report/
.DS_Store
.vscode
*.bak

View File

@@ -1,30 +0,0 @@
# See https://pre-commit.com for more information
# See https://pre-commit.com/hooks.html for more hooks
repos:
- repo: https://github.com/pre-commit/pre-commit-hooks
rev: v3.2.0
hooks:
- id: trailing-whitespace
- repo: local
hooks:
# Run astyle over the staged files with c and h extension found in the directories
# listed in the files regex pattern. Ignoring the files in the exclude pattern.
- id: format-source
name: Formatting source files
entry: astyle --options=scripts/code-format.cfg --ignore-exclude-errors
stages: [ commit ]
language: system
pass_filenames: true
verbose: true
files: |
(?x)^(
src/ |
tests/src/test_cases/
)
exclude: |
(?x)^(
src/extra/libs/ |
src/lv_conf_internal.h
)
types_or: ["c", "header"]

176
Kconfig
View File

@@ -1,4 +1,4 @@
# Kconfig file for LVGL v8.4
# Kconfig file for LVGL v8.0
menu "LVGL configuration"
@@ -6,7 +6,7 @@ menu "LVGL configuration"
# without lv_conf.h file, the lv_conf_internal.h and
# lv_conf_kconfig.h files are used instead.
config LV_CONF_SKIP
bool "Uncheck this to use custom lv_conf.h"
bool
default y
config LV_CONF_MINIMAL
@@ -42,9 +42,11 @@ menu "LVGL configuration"
config LV_COLOR_SCREEN_TRANSP
bool "Enable more complex drawing routines to manage screens transparency."
depends on LV_COLOR_DEPTH_32
help
Can be used if the UI is above another layer, e.g. an OSD menu or video player.
The screen's `bg_opa` should be set to non LV_OPA_COVER value
Requires `LV_COLOR_DEPTH = 32` colors and the screen's `bg_opa` should be set to
non LV_OPA_COVER value
config LV_COLOR_MIX_ROUND_OFS
int "Adjust color mix functions rounding"
@@ -154,15 +156,6 @@ menu "LVGL configuration"
radiuses are saved).
Set to 0 to disable caching.
config LV_LAYER_SIMPLE_BUF_SIZE
int "Optimal size to buffer the widget with opacity"
default 24576
help
"Simple layers" are used when a widget has `style_opa < 255`
to buffer the widget into a layer and blend it as an image
with the given opacity. Note that `bg_opa`, `text_opa` etc
don't require buffering into layer.
config LV_IMG_CACHE_DEF_SIZE
int "Default image cache size. 0 to disable caching."
default 0
@@ -212,11 +205,8 @@ menu "LVGL configuration"
endmenu
menu "GPU"
config LV_USE_GPU_ARM2D
bool "Enable Arm's 2D image processing library (Arm-2D) for all Cortex-M processors."
default n
help
Must deploy arm-2d library to your project and add include PATH for "arm_2d.h".
config LV_USE_EXTERNAL_RENDERER
bool
config LV_USE_GPU_STM32_DMA2D
bool "Enable STM32 DMA2D (aka Chrom Art) GPU."
@@ -228,26 +218,6 @@ menu "LVGL configuration"
Must be defined to include path of CMSIS header of target processor
e.g. "stm32f769xx.h" or "stm32f429xx.h"
config LV_USE_GPU_RA6M3_G2D
bool "Enable RA6M3 G2D GPU."
config LV_GPU_RA6M3_G2D_INCLUDE
string "include path of target processor"
depends on LV_USE_GPU_RA6M3_G2D
default "hal_data.h"
help
Must be defined to include path of target processor
e.g. "hal_data.h"
config LV_USE_GPU_SWM341_DMA2D
bool "Enable SWM341 DMA2D GPU."
config LV_GPU_SWM341_DMA2D_INCLUDE
string "include path of CMSIS header of target processor"
depends on LV_USE_GPU_SWM341_DMA2D
default "SWM341.h"
help
Must be defined to include path of CMSIS header of target processor
e.g. "SWM341.h"
config LV_USE_GPU_NXP_PXP
bool "Use NXP's PXP GPU iMX RTxxx platforms."
config LV_USE_GPU_NXP_PXP_AUTO_INIT
@@ -268,17 +238,12 @@ menu "LVGL configuration"
config LV_USE_GPU_SDL
bool "Use SDL renderer API"
select LV_USE_EXTERNAL_RENDERER
default n
config LV_GPU_SDL_INCLUDE_PATH
string "include path of SDL header"
depends on LV_USE_GPU_SDL
default "SDL2/SDL.h"
config LV_GPU_SDL_LRU_SIZE
int "Maximum buffer size to allocate for rotation"
depends on LV_USE_GPU_SDL
default 8388608
help
Texture cache size, 8MB by default.
endmenu
menu "Logging"
@@ -409,7 +374,7 @@ menu "LVGL configuration"
bool "Left middle"
config LV_PERF_MONITOR_ALIGN_RIGHT_MID
bool "Right middle"
config LV_PERF_MONITOR_ALIGN_CENTER
config LV_PERF_MONITOR_ALIGN_BOTTOM_CENTER
bool "Center"
endchoice
@@ -438,7 +403,7 @@ menu "LVGL configuration"
bool "Left middle"
config LV_MEM_MONITOR_ALIGN_RIGHT_MID
bool "Right middle"
config LV_MEM_MONITOR_ALIGN_CENTER
config LV_MEM_MONITOR_ALIGN_BOTTOM_CENTER
bool "Center"
endchoice
@@ -663,10 +628,6 @@ menu "LVGL configuration"
Set the pixel order of the display.
Important only if "subpx fonts" are used.
With "normal" font it doesn't matter.
config LV_USE_FONT_PLACEHOLDER
bool "Enable drawing placeholders when glyph dsc is not found."
default y
endmenu
menu "Text Settings"
@@ -754,7 +715,6 @@ menu "LVGL configuration"
default y if !LV_CONF_MINIMAL
config LV_USE_CANVAS
bool "Canvas. Dependencies: lv_img."
select LV_USE_IMG
default y if !LV_CONF_MINIMAL
config LV_USE_CHECKBOX
bool "Check Box"
@@ -854,13 +814,6 @@ menu "LVGL configuration"
config LV_USE_MSGBOX
bool "Msgbox."
default y if !LV_CONF_MINIMAL
config LV_USE_SPAN
bool "span"
default y if !LV_CONF_MINIMAL
config LV_SPAN_SNIPPET_STACK_SIZE
int "Maximum number of span descriptor"
default 64
depends on LV_USE_SPAN
config LV_USE_SPINBOX
bool "Spinbox."
default y if !LV_CONF_MINIMAL
@@ -876,12 +829,19 @@ menu "LVGL configuration"
config LV_USE_WIN
bool "Win"
default y if !LV_CONF_MINIMAL
config LV_USE_SPAN
bool "span"
default y if !LV_CONF_MINIMAL
config LV_SPAN_SNIPPET_STACK_SIZE
int "Maximum number of span descriptor"
default 64
depends on LV_USE_SPAN
endmenu
menu "Themes"
config LV_USE_THEME_DEFAULT
bool "A simple, impressive and very complete theme"
default y if !LV_COLOR_DEPTH_1 && !LV_CONF_MINIMAL
default y if !LV_CONF_MINIMAL
config LV_THEME_DEFAULT_DARK
bool "Yes to set dark mode, No to set light mode"
depends on LV_USE_THEME_DEFAULT
@@ -895,10 +855,7 @@ menu "LVGL configuration"
depends on LV_USE_THEME_DEFAULT
config LV_USE_THEME_BASIC
bool "A very simple theme that is a good starting point for a custom theme"
default y if !LV_COLOR_DEPTH_1 && !LV_CONF_MINIMAL
config LV_USE_THEME_MONO
bool "Monochrome theme, suitable for some E-paper & dot matrix displays"
default y if LV_COLOR_DEPTH_1 && !LV_CONF_MINIMAL
default y if !LV_CONF_MINIMAL
endmenu
menu "Layouts"
@@ -914,66 +871,53 @@ menu "LVGL configuration"
config LV_USE_FS_STDIO
bool "File system on top of stdio API"
config LV_FS_STDIO_LETTER
int "Set an upper cased letter on which the drive will accessible (e.g. 'A' i.e. 65 )"
default 0
depends on LV_USE_FS_STDIO
string "Set an upper cased letter on which the drive will accessible (e.g. 'A' i.e. 65 )"
depends on LV_USE_FS_STDIO != 0
config LV_FS_STDIO_PATH
string "Set the working directory"
depends on LV_USE_FS_STDIO
depends on LV_USE_FS_STDIO != 0
config LV_FS_STDIO_CACHE_SIZE
int ">0 to cache this number of bytes in lv_fs_read()"
default 0
depends on LV_USE_FS_STDIO
string ">0 to cache this number of bytes in lv_fs_read()"
depends on LV_USE_FS_STDIO != 0
config LV_USE_FS_POSIX
bool "File system on top of posix API"
config LV_FS_POSIX_LETTER
int "Set an upper cased letter on which the drive will accessible (e.g. 'A' i.e. 65)"
default 0
depends on LV_USE_FS_POSIX
depends on LV_USE_FS_POSIX != 0
config LV_FS_POSIX_PATH
string "Set the working directory"
depends on LV_USE_FS_POSIX
depends on LV_USE_FS_POSIX != 0
config LV_FS_POSIX_CACHE_SIZE
int ">0 to cache this number of bytes in lv_fs_read()"
default 0
depends on LV_USE_FS_POSIX
depends on LV_USE_FS_POSIX != 0
config LV_USE_FS_WIN32
bool "File system on top of Win32 API"
config LV_FS_WIN32_LETTER
int "Set an upper cased letter on which the drive will accessible (e.g. 'A' i.e. 65)"
default 0
depends on LV_USE_FS_WIN32
depends on LV_USE_FS_WIN32 != 0
config LV_FS_WIN32_PATH
string "Set the working directory"
depends on LV_USE_FS_WIN32
depends on LV_USE_FS_WIN32 != 0
config LV_FS_WIN32_CACHE_SIZE
int ">0 to cache this number of bytes in lv_fs_read()"
default 0
depends on LV_USE_FS_WIN32
depends on LV_USE_FS_WIN32 != 0
config LV_USE_FS_FATFS
bool "File system on top of FatFS"
config LV_FS_FATFS_LETTER
int "Set an upper cased letter on which the drive will accessible (e.g. 'A' i.e. 65)"
default 0
depends on LV_USE_FS_FATFS
depends on LV_USE_FS_FATFS != 0
config LV_FS_FATFS_CACHE_SIZE
int ">0 to cache this number of bytes in lv_fs_read()"
default 0
depends on LV_USE_FS_FATFS
config LV_USE_FS_LITTLEFS
bool "File system on top of LittleFS"
config LV_FS_LITTLEFS_LETTER
int "Set an upper cased letter on which the drive will accessible (e.g. 'A' i.e. 65)"
default 0
depends on LV_USE_FS_LITTLEFS
config LV_FS_LITTLEFS_CACHE_SIZE
int ">0 to cache this number of bytes in lv_fs_read()"
default 0
depends on LV_USE_FS_LITTLEFS
depends on LV_USE_FS_FATFS != 0
config LV_USE_PNG
bool "PNG decoder library"
@@ -1011,20 +955,13 @@ menu "LVGL configuration"
endmenu
endif
config LV_USE_TINY_TTF
bool "Tiny TTF library"
config LV_TINY_TTF_FILE_SUPPORT
bool "Load TTF data from files"
depends on LV_USE_TINY_TTF
default n
config LV_USE_RLOTTIE
bool "Lottie library"
config LV_USE_FFMPEG
bool "FFmpeg library"
config LV_FFMPEG_DUMP_FORMAT
bool "Dump format"
config LV_FFMPEG_AV_DUMP_FORMAT
bool "Dump av format"
depends on LV_USE_FFMPEG
default n
endmenu
@@ -1037,47 +974,6 @@ menu "LVGL configuration"
config LV_USE_MONKEY
bool "Enable Monkey test"
default n
config LV_USE_GRIDNAV
bool "Enable grid navigation"
default n
config LV_USE_FRAGMENT
bool "Enable lv_obj fragment"
default n
config LV_USE_IMGFONT
bool "draw img in label or span obj"
default n
config LV_USE_MSG
bool "Enable a published subscriber based messaging system"
default n
config LV_USE_IME_PINYIN
bool "Enable Pinyin input method"
default n
config LV_IME_PINYIN_USE_K9_MODE
bool "Enable Pinyin input method 9 key input mode"
depends on LV_USE_IME_PINYIN
default n
config LV_IME_PINYIN_K9_CAND_TEXT_NUM
int "Maximum number of candidate panels for 9-key input mode"
depends on LV_IME_PINYIN_USE_K9_MODE
default 3
config LV_IME_PINYIN_USE_DEFAULT_DICT
bool "Use built-in Thesaurus"
depends on LV_USE_IME_PINYIN
default y
help
If you do not use the default thesaurus, be sure to use lv_ime_pinyin after setting the thesauruss
config LV_IME_PINYIN_CAND_TEXT_NUM
int "Maximum number of candidate panels"
depends on LV_USE_IME_PINYIN
default 6
help
Set the maximum number of candidate panels that can be displayed.
This needs to be adjusted according to the size of the screen.
endmenu
menu "Examples"
@@ -1102,10 +998,6 @@ menu "LVGL configuration"
config LV_USE_DEMO_BENCHMARK
bool "Benchmark your system"
default n
config LV_DEMO_BENCHMARK_RGB565A8
bool "Use RGB565A8 images with 16 bit color depth instead of ARGB8565"
depends on LV_USE_DEMO_BENCHMARK
default n
config LV_USE_DEMO_STRESS
bool "Stress test for LVGL"

View File

@@ -16,7 +16,7 @@ LVGL provides everything you need to create an embedded GUI with easy-to-use gra
<a href="https://docs.lvgl.io/master/examples.html">Interactive examples</a>
</h4>
**English** | [中文](./README_zh.md) | [Português do Brasil](./README_pt_BR.md)
**English** | [中文](./README_zh.md) |
---
@@ -38,11 +38,11 @@ LVGL provides everything you need to create an embedded GUI with easy-to-use gra
* Multi-language support with UTF-8 handling, CJK, Bidirectional and Arabic script support
* Fully customizable graphical elements via [CSS-like styles](https://docs.lvgl.io/master/overview/style.html)
* Powerful layouts inspired by CSS: [Flexbox](https://docs.lvgl.io/master/layouts/flex.html) and [Grid](https://docs.lvgl.io/master/layouts/grid.html)
* OS, External memory and GPU are supported but not required. (built in support for STM32 DMA2D, SWM341 DMA2D, and NXP PXP and VGLite)
* OS, External memory and GPU are supported but not required. (built in support for STM32 DMA2D, and NXP PXP and VGLite)
* Smooth rendering even with a [single frame buffer](https://docs.lvgl.io/master/porting/display.html)
* Written in C and compatible with C++
* Micropython Binding exposes [LVGL API in Micropython](https://blog.lvgl.io/2019-02-20/micropython-bindings)
* [Simulator](https://docs.lvgl.io/master/get-started/platforms/pc-simulator.html) to develop on PC without embedded hardware
* [Simulator](https://docs.lvgl.io/master/get-started/pc-simulator.html) to develop on PC without embedded hardware
* 100+ simple [Examples](https://github.com/lvgl/lvgl/tree/master/examples)
* [Documentation](http://docs.lvgl.io/) and API references online and in PDF
@@ -91,27 +91,26 @@ Basically, every modern controller (which is able to drive a display) is suitabl
*Note that the memory usage might vary depending on the architecture, compiler and build options.*
### Supported platforms
LVGL is completely platform independent and can be used with any MCU that fulfills the requirements.
LVGL is completely platform independent and can be used with any MCU that fulfills the requirements.
Just to mention some platforms:
- NXP: Kinetis, LPC, iMX, iMX RT
- STM32F1, STM32F3, STM32F4, STM32F7, STM32L4, STM32L5, STM32H7
- Microchip dsPIC33, PIC24, PIC32MX, PIC32MZ
- [Linux frame buffer](https://blog.lvgl.io/2018-01-03/linux_fb) (/dev/fb)
- [Raspberry Pi](https://github.com/lvgl/lv_port_linux_frame_buffer)
- [Raspberry Pi](http://www.vk3erw.com/index.php/16-software/63-raspberry-pi-official-7-touchscreen-and-littlevgl)
- [Espressif ESP32](https://github.com/lvgl/lv_port_esp32)
- [Infineon Aurix](https://github.com/lvgl/lv_port_aurix)
- Nordic NRF52 Bluetooth modules
- Quectel modems
- [SYNWIT SWM341](http://www.synwit.cn/)
LVGL is also available as:
- [Arduino library](https://docs.lvgl.io/master/get-started/platforms/arduino.html)
- [PlatformIO package](https://registry.platformio.org/libraries/lvgl/lvgl)
- [Arduino library](https://docs.lvgl.io/master/get-started/arduino.html)
- [PlatformIO package](https://platformio.org/lib/show/12440/lvgl)
- [Zephyr library](https://docs.zephyrproject.org/latest/reference/kconfig/CONFIG_LVGL.html)
- [ESP32 component](https://docs.lvgl.io/master/get-started/platforms/espressif.html)
- [ESP32 component](https://docs.lvgl.io/master/get-started/espressif.html)
- [NXP MCUXpresso component](https://www.nxp.com/design/software/embedded-software/lvgl-open-source-graphics-library:LITTLEVGL-OPEN-SOURCE-GRAPHICS-LIBRARY)
- [NuttX library](https://docs.lvgl.io/master/get-started/os/nuttx.html)
- [RT-Thread RTOS](https://docs.lvgl.io/master/get-started/os/rt-thread.html)
- [NuttX library](https://docs.lvgl.io/master/get-started/nuttx.html)
- [RT-Thread RTOS](https://docs.lvgl.io/master/get-started/rt-thread.html)
## Get started
@@ -119,7 +118,7 @@ This list shows the recommended way of learning the library:
1. Check the [Online demos](https://lvgl.io/demos) to see LVGL in action (3 minutes)
2. Read the [Introduction](https://docs.lvgl.io/master/intro/index.html) page of the documentation (5 minutes)
3. Get familiar with the basics on the [Quick overview](https://docs.lvgl.io/master/get-started/quick-overview.html) page (15 minutes)
4. Set up a [Simulator](https://docs.lvgl.io/master/get-started/platforms/pc-simulator.html) (10 minutes)
4. Set up a [Simulator](https://docs.lvgl.io/master/get-started/pc-simulator.html) (10 minutes)
5. Try out some [Examples](https://github.com/lvgl/lvgl/tree/master/examples)
6. Port LVGL to a board. See the [Porting](https://docs.lvgl.io/master/porting/index.html) guide or check the ready to use [Projects](https://github.com/lvgl?q=lv_port_)
7. Read the [Overview](https://docs.lvgl.io/master/overview/index.html) page to get a better understanding of the library (2-3 hours)
@@ -151,7 +150,7 @@ void btn_event_cb(lv_event_t * e)
}
```
### Micropython
Learn more about [Micropython](https://docs.lvgl.io/master/get-started/bindings/micropython.html).
Learn more about [Micropython](https://docs.lvgl.io/master/get-started/micropython.html).
```python
def btn_event_cb(e):
print("Clicked")

View File

@@ -1,206 +0,0 @@
<h1 align="center"> LVGL - Biblioteca gráfica leve e versátil</h1>
<p align="center">
<img src="https://lvgl.io/assets/images/lvgl_widgets_demo.gif">
</p>
<p align="center">
O LVGL fornece tudo o que você precisa para criar uma GUI incorporada com elementos gráficos fáceis de usar, belos efeitos visuais e um baixo consumo de memória.
</p>
<h4 align="center">
<a href="https://lvgl.io">Site</a> &middot;
<a href="https://docs.lvgl.io/">Documentação</a> &middot;
<a href="https://forum.lvgl.io">Fórum</a> &middot;
<a href="https://lvgl.io/services">Serviços</a> &middot;
<a href="https://docs.lvgl.io/master/examples.html">Exemplos interativos</a>
</h4>
[English](./README.md) | [中文](./README_zh.md) | **Português do Brasil**
---
### Tabela de conteúdo
- [Visão Geral](#visão-geral)
- [Iniciando](#iniciando)
- [Exemplos](#exemplos)
- [Serviços](#serviços)
- [Contribuindo](#contribuindo)
## Visão Geral
### Recursos
* Poderosos [widgets](https://docs.lvgl.io/master/widgets/index.html): botões, gráficos, listas, controles deslizantes (sliders), imagens, etc.
* Mecanismo gráfico avançado: animações, anti-aliasing, opacidade, rolagem suave, modos de mesclagem (blending modes), etc.
* Suporte à [vários dispositivos de entrada](https://docs.lvgl.io/master/overview/indev.html): tela sensível ao toque, mouse, teclado, codificador, botões, etc.
* Suporte à [vários monitores](https://docs.lvgl.io/master/overview/display.html)
* Pode ser usado com qualquer microcontrolador e display, independente do hardware
* Escalável para operar com pouca memória (64 kB Flash, 16 kB RAM)
* Suporte multilíngue com manipulação UTF-8, suporte ao alfabeto bidirecional, árabe e CJK (Chinês, Japonês e Coreano)
* Elementos gráficos totalmente personalizáveis por meio de [CSS](https://docs.lvgl.io/master/overview/style.html)
* Layouts poderosos inspirados em CSS: [Flexbox](https://docs.lvgl.io/master/layouts/flex.html) e [Grid](https://docs.lvgl.io/master/layouts/grid.html)
* SO, memória externa e GPU são suportados, mas não obrigatórios. (suporte integrado para STM32 DMA2D, SWM341 DMA2D e NXP PXP e VGLite)
* Renderização suave mesmo com um [buffer de quadro único](https://docs.lvgl.io/master/porting/display.html) (single frame buffer)
* Escrito em C e compatível com C++
* Uso do LittlevGL com Micropython simplificado com [LVGL API in Micropython](https://blog.lvgl.io/2019-02-20/micropython-bindings)
* [Simulador](https://docs.lvgl.io/master/get-started/platforms/pc-simulator.html) para desenvolver no PC sem hardware embutido
* Mais de 100 [exemplos simples](https://github.com/lvgl/lvgl/tree/master/examples)
* [Documentação](http://docs.lvgl.io/) e referências de API online e em PDF
### Requerimentos
Basicamente, todo controlador moderno (que é capaz de acionar um display) é adequado para executar LVGL. Os requisitos mínimos são:
<table>
<tr>
<td>
<strong>Nome</strong>
</td>
<td>
<strong>Minímo</strong>
</td>
<td>
<strong>Recomendado</strong>
</td>
</tr>
<tr>
<td>
<strong>Arquitetura</strong>
</td>
<td colspan="2">Microcontrolador ou processador de 16, 32 ou 64 bits</td>
</tr>
<tr>
<td>
<strong>Clock</strong>
</td>
<td>&gt; 16 MHz</td>
<td>&gt; 48 MHz</td>
</tr>
<tr>
<td>
<strong>Flash/ROM</strong>
</td>
<td>&gt; 64 kB</td>
<td>&gt; 180 kB</td>
</tr>
<tr>
<td>
<strong>RAM estática</strong>
</td>
<td>&gt; 16 kB</td>
<td>&gt; 48 kB</td>
</tr>
<tr>
<td>
<strong>Draw buffer</strong>
</td>
<td>&gt; 1 &times; <em>hor. res.</em> pixels</td>
<td>&gt; tamanho da tela de 1/10</td>
</tr>
<tr>
<td>
<strong>Compilador</strong>
</td>
<td colspan="2">Padrão C99 ou mais recente</td>
</tr>
</table>
*Observe que o uso de memória pode variar dependendo da arquitetura, do compilador e das opções de compilação.*
### Plataformas suportadas
O LVGL é completamente independente de plataforma e pode ser usado com qualquer MCU que atenda aos requisitos.
Apenas para citar algumas plataformas:
- NXP: Kinetis, LPC, iMX, iMX RT
- STM32F1, STM32F3, STM32F4, STM32F7, STM32L4, STM32L5, STM32H7
- Microchip dsPIC33, PIC24, PIC32MX, PIC32MZ
- [Linux frame buffer](https://blog.lvgl.io/2018-01-03/linux_fb) (/dev/fb)
- [Raspberry Pi](http://www.vk3erw.com/index.php/16-software/63-raspberry-pi-official-7-touchscreen-and-littlevgl)
- [Espressif ESP32](https://github.com/lvgl/lv_port_esp32)
- [Infineon Aurix](https://github.com/lvgl/lv_port_aurix)
- Nordic NRF52 Bluetooth modules
- Quectel modems
- [SYNWIT SWM341](https://www.synwit.cn/)
LVGL também está disponível para:
- [Arduino library](https://docs.lvgl.io/master/get-started/platforms/arduino.html)
- [PlatformIO package](https://registry.platformio.org/libraries/lvgl/lvgl)
- [Zephyr library](https://docs.zephyrproject.org/latest/reference/kconfig/CONFIG_LVGL.html)
- [ESP32 component](https://docs.lvgl.io/master/get-started/platforms/espressif.html)
- [NXP MCUXpresso component](https://www.nxp.com/design/software/embedded-software/lvgl-open-source-graphics-library:LITTLEVGL-OPEN-SOURCE-GRAPHICS-LIBRARY)
- [NuttX library](https://docs.lvgl.io/master/get-started/os/nuttx.html)
- [RT-Thread RTOS](https://docs.lvgl.io/master/get-started/os/rt-thread.html)
## Iniciando
Esta lista mostra a maneira recomendada de aprender sobre a biblioteca:
1. Confira as [demos on-line](https://lvgl.io/demos) para ver o LVGL em ação (3 minutos)
2. Leia a [introdução](https://docs.lvgl.io/master/intro/index.html) da documentação (5 minutos)
3. Familiarize-se com o básico da [Visão geral rápida](https://docs.lvgl.io/master/get-started/quick-overview.html) (15 minutos)
4. Configure um [simulador](https://docs.lvgl.io/master/get-started/platforms/pc-simulator.html) (10 minutos)
5. Experimente alguns [Exemplos](https://github.com/lvgl/lvgl/tree/master/examples)
6. Placa para porta LVGL. Veja o guia [porting](https://docs.lvgl.io/master/porting/index.html) ou verifique o pronto para usar [Projects](https://github.com/lvgl?q=lv_port_)
7. Leia a [visão geral](https://docs.lvgl.io/master/overview/index.html) para entender melhor a biblioteca (2-3 horas)
8. Verifique a documentação dos [widgets](https://docs.lvgl.io/master/widgets/index.html) para ver seus recursos e como utilizá-los
9. Se você tiver dúvidas, acesse o [fórum](http://forum.lvgl.io/)
10. Leia o guia de [contribuição](https://docs.lvgl.io/master/CONTRIBUTING.html) para ver como você pode ajudar a melhorar o LVGL (15 minutos)
## Exemplos
Para mais exemplos, veja a pasta [examples](https://github.com/lvgl/lvgl/tree/master/examples).
![Exemplo de botão LVGL com rótulo (label)](https://github.com/lvgl/lvgl/raw/master/docs/misc/btn_example.png)
### C
```c
lv_obj_t * button = lv_btn_create(lv_scr_act()); /* Adiciona um botão à tela atual */
lv_obj_set_pos(button, 10, 10); /* Define uma posição ao botão na tela */
lv_obj_set_size(button, 100, 50); /* Define o tamanho */
lv_obj_add_event_cb(button, button_event_callback, LV_EVENT_CLICKED, NULL); /* Atribui um retorno de chamada (callback) */
lv_obj_t * label = lv_label_create(button); /* Adiciona um rótulo (label) */
lv_label_set_text(label, "Clique aqui"); /* Define o texto do rótulo (label) */
lv_obj_center(label); /* Alinha o texto ao centro */
...
void button_event_callback(lv_event_t * e)
{
printf("Clicado\n");
}
```
### Micropython
Saiba mais em [Micropython](https://docs.lvgl.io/master/get-started/bindings/micropython.html)
```python
def button_event_callback(event):
print("Clicado")
# Cria um botão e um rótulo (label)
button = lv.btn(lv.scr_act())
button.set_pos(10, 10)
button.set_size(100, 50)
button.add_event_cb(button_event_callback, lv.EVENT.CLICKED, None)
label = lv.label(button)
label.set_text("Cliquq aqui")
label.center()
```
## Serviços
O LVGL Kft foi estabelecido para fornecer uma base sólida para a biblioteca LVGL. Oferecemos vários tipos de serviços
para ajudá-lo no desenvolvimento da interface do usuário:
- Design gráfico
- Implementação de IU
- Consultoria/Suporte
Para mais informações, consulte [LVGL Serviços](https://lvgl.io/services). Sinta-se à vontade para entrar em contato
conosco se tiver alguma dúvida.
## Contribuindo
O LVGL é um projeto aberto e sua contribuição é muito bem-vinda. Há muitas maneiras de contribuir, desde simplesmente
falando sobre seu projeto, escrevendo exemplos, melhorando a documentação, corrigindo bugs até hospedar seu próprio
projeto sob a organização LVGL.
Para obter uma descrição detalhada das oportunidades de contribuição, visite a seção de [contribuição](https://docs.lvgl.io/master/CONTRIBUTING.html) da documentação.

View File

@@ -20,7 +20,7 @@ LVGL是一个高度可裁剪、低资源占用、界面美观且易用的嵌入
</h4>
[English](./README.md) | **中文** | [Português do Brasil](./README_pt_BR.md)
[English](./README.md) | **中文** |
---
@@ -42,11 +42,11 @@ LVGL是一个高度可裁剪、低资源占用、界面美观且易用的嵌入
* 配置可裁剪最低资源占用64 kB Flash16 kB RAM
* 基于UTF-8的多语种支持例如中文、日文、韩文、阿拉伯文等
* 可以通过[类CSS](https://docs.lvgl.io/master/overview/style.html)的方式来设计、布局图形界面(例如:[Flexbox](https://docs.lvgl.io/master/layouts/flex.html)、[Grid](https://docs.lvgl.io/master/layouts/grid.html)
* 支持操作系统、外置内存、以及硬件加速LVGL已内建支持STM32 DMA2D、SWM341 DMA2D、NXP PXP和VGLite
* 支持操作系统、外置内存、以及硬件加速LVGL已内建支持STM32 DMA2D、NXP PXP和VGLite
* 即便仅有[单缓冲区(frame buffer)](https://docs.lvgl.io/master/porting/display.html)的情况下,也可保证渲染如丝般顺滑
* 全部由C编写完成并支持C++调用
* 支持Micropython编程参见[LVGL API in Micropython](https://blog.lvgl.io/2019-02-20/micropython-bindings)
* 支持[模拟器](https://docs.lvgl.io/master/get-started/platforms/pc-simulator.html)仿真,可以无硬件依托进行开发
* 支持[模拟器](https://docs.lvgl.io/master/get-started/pc-simulator.html)仿真,可以无硬件依托进行开发
* 丰富详实的[例程](https://github.com/lvgl/lvgl/tree/master/examples)
* 详尽的[文档](http://docs.lvgl.io/)以及API参考手册可线上查阅或可下载为PDF格式
@@ -95,7 +95,7 @@ LVGL是一个高度可裁剪、低资源占用、界面美观且易用的嵌入
*注意:资源占用情况与具体硬件平台、编译器等因素有关,上表中仅给出参考值*
### 已经支持的平台
LVGL本身并不依赖特定的硬件平台任何满足LVGL硬件配置要求的微控制器均可运行LVGL。
LVGL本身并不依赖特定的硬件平台任何满足LVGL硬件配置要求的微控制器均可运行LVGL。
如下仅列举其中一部分:
- NXP: Kinetis, LPC, iMX, iMX RT
@@ -107,15 +107,14 @@ LVGL本身并不依赖特定的硬件平台任何满足LVGL硬件配置要求
- [Infineon Aurix](https://github.com/lvgl/lv_port_aurix)
- Nordic NRF52 Bluetooth modules
- Quectel modems
- [SYNWIT SWM341](https://www.synwit.cn/)
LVGL也支持
- [Arduino library](https://docs.lvgl.io/master/get-started/platforms/arduino.html)
- [Arduino library](https://docs.lvgl.io/master/get-started/arduino.html)
- [PlatformIO package](https://platformio.org/lib/show/12440/lvgl)
- [Zephyr library](https://docs.zephyrproject.org/latest/reference/kconfig/CONFIG_LVGL.html)
- [ESP32 component](https://docs.lvgl.io/master/get-started/platforms/espressif.html)
- [ESP32 component](https://docs.lvgl.io/master/get-started/espressif.html)
- [NXP MCUXpresso component](https://www.nxp.com/design/software/embedded-software/lvgl-open-source-graphics-library:LITTLEVGL-OPEN-SOURCE-GRAPHICS-LIBRARY)
- [NuttX library](https://docs.lvgl.io/master/get-started/os/nuttx.html)
- [NuttX library](https://docs.lvgl.io/master/get-started/nuttx.html)
- [RT-Thread RTOS](https://www.rt-thread.org/document/site/#/rt-thread-version/rt-thread-standard/packages-manual/lvgl-docs/introduction)
@@ -124,7 +123,7 @@ LVGL也支持
1. 使用[网页在线例程](https://lvgl.io/demos)来体验LVGL3分钟
2. 阅读文档[简介](https://docs.lvgl.io/master/intro/index.html)章节来初步了解LVGL5分钟
3. 再来阅读一下文档快速[快速概览](https://docs.lvgl.io/master/get-started/quick-overview.html)章节来了解LVGL的基本知识15分钟
4. 学习如何使用[模拟器](https://docs.lvgl.io/master/get-started/platforms/pc-simulator.html)来在电脑上仿真LVGL10分钟
4. 学习如何使用[模拟器](https://docs.lvgl.io/master/get-started/pc-simulator.html)来在电脑上仿真LVGL10分钟
5. 试着动手实践一些[例程](https://github.com/lvgl/lvgl/tree/master/examples)
6. 参考[移植指南](https://docs.lvgl.io/master/porting/index.html)尝试将LVGL移植到一块开发板上LVGL也已经提供了一些移植好的[工程](https://github.com/lvgl?q=lv_port_)
7. 仔细阅读文档[总览](https://docs.lvgl.io/master/overview/index.html)章节来更加深入的了解和熟悉LVGL2-3小时
@@ -156,7 +155,7 @@ void btn_event_cb(lv_event_t * e)
}
```
### Micropython
更多信息请到 [Micropython官网](https://docs.lvgl.io/master/get-started/bindings/micropython.html) 查询.
更多信息请到 [Micropython官网](https://docs.lvgl.io/master/get-started/micropython.html) 查询.
```python
def btn_event_cb(e):
print("Clicked")
@@ -191,3 +190,4 @@ LVGL是一个开源项目非常欢迎您参与到社区贡献当中。您有
- 修复bug
请参见文档[如何向社区贡献](https://docs.lvgl.io/master/CONTRIBUTING.html)章节来获取更多信息。

View File

@@ -1,7 +1,7 @@
# Demos for LVGL
## Add the examples to your projects
1. demos can be found in the 'demos' folder once you clone the lvgl.
1. demos can be found in the 'demos' folder once you clone the lvgl.
2. In the ***lv_conf.h*** or equivalent places, you can find demo related macros, change its value to enable or disable specified demos:
@@ -38,7 +38,7 @@
...
```
3. If your development environment or toolchain does not add source files inside '***lvgl***' folder automatically, ensure the `demos` folder is included for compilation.
3. If your development environment or toolchain does not add source files inside '***lvgl***' folder automatically, ensure the `demos` folder is included for compilation.
4. Include "***demos/lv_demos.h***" in your application source file, for example:
```c
@@ -53,11 +53,11 @@
## Demos
### Widgets
Shows how the widgets look like out of the box using the built-in material theme.
Shows how the widgets look like out of the box using the built-in material theme.
See in [widgets](https://github.com/lvgl/lvgl/tree/master/demos/widgets) folder.
See in [lv_demo_widgets](https://github.com/lvgl/lv_examples/tree/master/src/lv_demo_widgets) folder.
<img src="https://github.com/lvgl/lvgl/tree/master/demos/widgets/screenshot1.png?raw=true" width=600px alt="Basic demo to show the widgets of LVGL">
<img src="https://github.com/lvgl/lv_examples/blob/master/src/lv_demo_widgets/screenshot1.png?raw=true" width=600px alt="Basic demo to show the widgets of LVGL">
For running this demo properly, please make sure **LV_MEM_SIZE** is at least **38KB** (and **48KB** is recommended):
@@ -68,29 +68,29 @@ For running this demo properly, please make sure **LV_MEM_SIZE** is at least **3
### Music player
The music player demo shows what kind of modern, smartphone-like user interfaces can be created on LVGL. It works the best with display with 480x272 or 272x480 resolution.
The music player demo shows what kind of modern, smartphone-like user interfaces can be created on LVGL. It works the best with display with 480x272 or 272x480 resolution.
See in [music](https://github.com/lvgl/lvgl/tree/master/demos/music) folder.
See in [lv_demo_music](https://github.com/lvgl/lv_examples/tree/master/src/lv_demo_music) folder.
<img src="https://github.com/lvgl/lvgl/tree/master/demos/music/screenshot1.gif?raw=true" width=600px alt="Music player demo with LVGL">
<img src="https://github.com/lvgl/lv_examples/blob/master/src/lv_demo_music/screenshot1.gif?raw=true" width=600px alt="Music player demo with LVGL">
### Keypad and encoder
LVGL allows you to control the widgets with a keypad and/or encoder without a touchpad. This demo shows how to handle buttons, drop-down lists, rollers, sliders, switches, and text inputs without touchpad.
Learn more about the touchpad-less usage of LVGL [here](https://docs.lvgl.io/master/overview/indev.html#keypad-and-encoder).
LVGL allows you to control the widgets with a keypad and/or encoder without a touchpad. This demo shows how to handle buttons, drop-down lists, rollers, sliders, switches, and text inputs without touchpad.
Learn more about the touchpad-less usage of LVGL [here](https://docs.lvgl.io/v7/en/html/overview/indev.html#keypad-and-encoder).
See in [keypad_encoder](https://github.com/lvgl/lvgl/tree/master/demos/keypad_encoder) folder.
See in [lv_demo_keypad_encoder](https://github.com/lvgl/lv_examples/tree/master/src/lv_demo_keypad_encoder) folder.
<img src="https://github.com/lvgl/lvgl/tree/master/demos/keypad_encoder/screenshot1.png?raw=true" width=600px alt="Keypad and encoder navigation in LVGL embedded GUI library">
<img src="https://github.com/lvgl/lv_examples/blob/master/src/lv_demo_keypad_encoder/screenshot1.png?raw=true" width=600px alt="Keypad and encoder navigation in LVGL embedded GUI library">
### Benchmark
A demo to measure the performance of LVGL or to compare different settings.
See in [benchmark](https://github.com/lvgl/lvgl/tree/master/demos/benchmark) folder.
<img src="https://github.com/lvgl/lvgl/tree/master/demos/benchmark/screenshot1.png?raw=true" width=600px alt="Benchmark demo with LVGL embedded GUI library">
A demo to measure the performance of LVGL or to compare different settings.
See in [lv_demo_benchmark](https://github.com/lvgl/lv_examples/tree/master/src/lv_demo_benchmark) folder.
<img src="https://github.com/lvgl/lv_examples/blob/master/src/lv_demo_benchmark/screenshot1.png?raw=true" width=600px alt="Benchmark demo with LVGL embedded GUI library">
### Stress
A stress test for LVGL. It contains a lot of object creation, deletion, animations, style usage, and so on. It can be used if there is any memory corruption during heavy usage or any memory leaks.
See in [stress](https://github.com/lvgl/lvgl/tree/master/demos/stress) folder.
<img src="https://github.com/lvgl/lvgl/tree/master/demos/stress/screenshot1.png?raw=true" width=600px alt="Stress test for LVGL">
A stress test for LVGL. It contains a lot of object creation, deletion, animations, style usage, and so on. It can be used if there is any memory corruption during heavy usage or any memory leaks.
See in [lv_demo_stress](https://github.com/lvgl/lv_examples/tree/master/src/lv_demo_stress) folder.
<img src="https://github.com/lvgl/lv_examples/blob/master/src/lv_demo_stress/screenshot1.png?raw=true" width=600px alt="Stress test for LVGL">
## Contributing
For contribution and coding style guidelines, please refer to the file docs/CONTRIBUTING.md in the main LVGL repo:

View File

@@ -2,133 +2,48 @@
## Overview
The benchmark demo tests the performance in various cases.
For example rectangle, border, shadow, text, image blending, image transformation, blending modes, etc.
The benchmark demo tests the performance in various cases.
For example rectangle, border, shadow, text, image blending, image transformation, blending modes, etc.
All tests are repeated with 50% opacity.
The size and position of the objects during testing are set with a pseudo random number to make the benchmark repeatable.
The size and position of the objects during testing are set with a pseudo random number to make the benchmark repeatable.
On to top of the screen the title of the current test step, and the result of the previous step is displayed.
## Run the benchmark
- In `lv_conf.h` or equivalent places set `LV_USE_DEMO_BENCHMARK 1`
- After `lv_init()` and initializing the drivers call `lv_demo_benchmark()`
- If you only want to run a specific scene for any purpose (e.g. debug, performance optimization etc.), you can call `lv_demo_benchmark_run_scene()` instead of `lv_demo_benchmark()`and pass the scene number.
- If you enabled trace output by setting macro `LV_USE_LOG` to `1` and trace level `LV_LOG_LEVEL` to `LV_LOG_LEVEL_USER` or higher, benchmark results are printed out in `csv` format.
- If you want to know when the testing is finished, you can register a callback function via `lv_demo_benchmark_register_finished_handler()` before calling `lv_demo_benchmark()` or `lv_demo_benchmark_run_scene()`.
- If you want to know the maximum rendering performance of the system, call `lv_demo_benchmark_set_max_speed(true)` before `lv_demo_benchmark()`.
## Interpret the result
The FPS is measured like this:
- load the next step
- in the display driver's `monitor_cb` accumulate the time-to-render and the number of cycles
- in the display driver's `monitor_cb` accumulate the time-to-render and the number of cycles
- measure for 1 second
- calculate `FPS = time_sum / render_cnt`
Note that it can result in very high FPS results for simple cases.
E.g. if some simple rectangles are drawn in 5 ms, the benchmark will tell it's 200 FPS.
So it ignores `LV_DISP_REFR_PERIOD` which tells LVGL how often it should refresh the screen.
Note that it can result in very high FPS results for simple cases.
E.g. if some simple rectangles are drawn in 5 ms, the benchmark will tell it's 200 FPS.
So it ignores `LV_DISP_REFR_PERIOD` which tells LVGL how often it should refresh the screen.
In other words, the benchmark shows the FPS from the pure rendering time.
By default, only the changed areas are refreshed. It means if only a few pixels are changed in 1 ms the benchmark will show 1000 FPS. To measure the performance with full screen refresh uncomment `lv_obj_invalidate(lv_scr_act())` in `monitor_cb()` in `lv_demo_benchmark.c`.
![LVGL benchmark running](screenshot1.png)
If you are doing performance analysis for 2D image processing optimization, LCD latency (flushing data to LCD) introduced by `disp_flush()` might dilute the performance results of the LVGL drawing process, hence make it harder to see your optimization results (gain or loss). To avoid such problem, please:
1. Use a flag to control the LCD flushing inside `disp_flush()`. For example:
```c
volatile bool disp_flush_enabled = true;
/* Enable updating the screen (the flushing process) when disp_flush() is called by LVGL
*/
void disp_enable_update(void)
{
disp_flush_enabled = true;
}
/* Disable updating the screen (the flushing process) when disp_flush() is called by LVGL
*/
void disp_disable_update(void)
{
disp_flush_enabled = false;
}
static void disp_flush(lv_disp_drv_t * disp_drv, const lv_area_t * area, lv_color_t * color_p)
{
if(disp_flush_enabled) {
GLCD_DrawBitmap(area->x1, //!< x
area->y1, //!< y
area->x2 - area->x1 + 1, //!< width
area->y2 - area->y1 + 1, //!< height
(const uint8_t *)color_p);
}
/*IMPORTANT!!!
*Inform the graphics library that you are ready with the flushing*/
lv_disp_flush_ready(disp_drv);
}
```
2. Disable flushing before calling `lv_demo_benchmark()` or `lv_demo_benchmark_run_scene()`, for example:
```c
extern void disp_enable_update(void);
extern void disp_disable_update(void);
static void on_benchmark_finished(void)
{
disp_enable_update();
}
int main(void)
{
lv_init();
lv_port_disp_init();
lv_port_indev_init();
LV_LOG("Running LVGL Benchmark...");
LV_LOG("Please stand by...");
LV_LOG("NOTE: You will NOT see anything until the end.");
disp_disable_update();
lv_demo_benchmark_set_finished_cb(&on_benchmark_finished);
lv_demo_benchmark_set_max_speed(true);
lv_demo_benchmark();
//lv_demo_benchmark_run_scene(43); // run scene no 31
...
while(1){
lv_timer_handler(); //! run lv task at the max speed
}
}
```
![LVGL benchmark running](https://github.com/lvgl/lv_examples/blob/master/src/lv_demo_benchmark/screenshot1.png?raw=true)
3. Alternatively, you can use trace output to get the benchmark results in csv format by:
- Setting macro `LV_USE_LOG` to `1`
- Setting trace level `LV_LOG_LEVEL` to `LV_LOG_LEVEL_USER` or higher.
## Result summary
## Result summary
In the end, a table is created to display measured FPS values.
On top of the summary screen, the "Weighted FPS" value is shown.
In this, the result of the more common cases are taken into account with a higher weight.
On top of the summary screen, the "Weighted FPS" value is shown.
In this, the result of the more common cases are taken into account with a higher weight.
"Opa. speed" shows the speed of the measurements with opacity compared to full opacity.
E.g. "Opa. speed = 90%" means that rendering with opacity is 10% slower.
"Opa. speed" shows the speed of the measurements with opacity compared to full opacity.
E.g. "Opa. speed = 90%" means that rendering with opacity is 10% slower.
In the first section of the table, "Slow but common cases", those cases are displayed which are considered common but were slower than 20 FPS.
Below this in the "All cases section" all the results are shown. The < 10 FPS results are shown with red, the >= 10 but < 20 FPS values are displayed with orange.
![LVGL benchmark result summary](https://github.com/lvgl/lvgl/tree/master/demos/benchmark/screenshot2.png?raw=true)
![LVGL benchmark result summary](https://github.com/lvgl/lv_examples/blob/master/src/lv_demo_benchmark/screenshot2.png?raw=true)

View File

@@ -1,224 +0,0 @@
#include "../../../lvgl.h"
#ifndef LV_ATTRIBUTE_MEM_ALIGN
#define LV_ATTRIBUTE_MEM_ALIGN
#endif
#ifndef LV_ATTRIBUTE_IMG_IMG_BENCHMARK_COGWHEEL_RGB565A8
#define LV_ATTRIBUTE_IMG_IMG_BENCHMARK_COGWHEEL_RGB565A8
#endif
const LV_ATTRIBUTE_MEM_ALIGN LV_ATTRIBUTE_LARGE_CONST LV_ATTRIBUTE_IMG_IMG_BENCHMARK_COGWHEEL_RGB565A8 uint8_t img_benchmark_cogwheel_rgb565a8_map[] = {
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xf6, 0x94, 0x13, 0x74, 0xf2, 0x6b, 0xf2, 0x6b, 0xf2, 0x6b, 0xb2, 0x63, 0x33, 0x74, 0x5a, 0xc6, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x9e, 0xf7, 0x74, 0x7c, 0xd2, 0x6b, 0xd2, 0x6b, 0xf2, 0x6b, 0xd2, 0x6b, 0xb2, 0x63, 0xd2, 0x6b, 0x74, 0x84, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x9e, 0xf7, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x1d, 0xdf, 0x33, 0x7c, 0xd2, 0x6b, 0x13, 0x74, 0x13, 0x74, 0x13, 0x74, 0xf2, 0x6b, 0xd2, 0x63, 0x13, 0x74, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x39, 0xbe, 0x36, 0x9d, 0xdc, 0xde, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x1d, 0xdf, 0xf6, 0x8c, 0x34, 0x74, 0x57, 0x9d, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xfc, 0xd6, 0x54, 0x7c, 0xf2, 0x6b, 0x13, 0x74, 0x13, 0x74, 0x13, 0x74, 0x12, 0x74, 0xd2, 0x6b, 0x13, 0x74, 0xdc, 0xde, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xf9, 0xb5, 0xb1, 0x63, 0xb1, 0x63, 0x90, 0x63, 0x12, 0x74, 0xf5, 0x94, 0x1c, 0xdf, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x1a, 0xbe, 0xd6, 0x8c, 0x95, 0x84, 0x74, 0x7c, 0x34, 0x74, 0x54, 0x7c, 0xb8, 0xad, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xd9, 0xb5, 0x54, 0x7c, 0xf2, 0x6b, 0x13, 0x74, 0x13, 0x74, 0x13, 0x74, 0x12, 0x74, 0xd2, 0x6b, 0x12, 0x74, 0xb4, 0x8c, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5d, 0xef, 0x74, 0x84, 0x90, 0x5b, 0x90, 0x5b, 0x90, 0x63, 0xb1, 0x63, 0xd1, 0x6b, 0x12, 0x74, 0x94, 0x84, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xb9, 0xad, 0x75, 0x7c, 0x34, 0x74, 0x34, 0x74, 0x54, 0x7c, 0x54, 0x7c, 0x33, 0x74, 0x95, 0x84, 0x7d, 0xe7, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xf6, 0x94, 0x33, 0x74, 0xf3, 0x6b, 0x13, 0x74, 0x13, 0x74, 0x13, 0x74, 0x12, 0x74, 0xf2, 0x6b, 0xf2, 0x73, 0x32, 0x7c, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x36, 0x9d, 0xd1, 0x6b, 0xb1, 0x63, 0xb1, 0x63, 0xb1, 0x63, 0xb1, 0x63, 0x90, 0x5b, 0x50, 0x5b, 0x90, 0x63, 0x5d, 0xe7, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x9f, 0xf7, 0xd6, 0x8c, 0x34, 0x74, 0x55, 0x7c, 0x74, 0x7c, 0x74, 0x7c, 0x74, 0x7c, 0x34, 0x74, 0x54, 0x7c, 0xb8, 0xad, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x95, 0x84, 0x33, 0x74, 0x13, 0x74, 0x13, 0x74, 0x13, 0x74, 0x13, 0x74, 0x13, 0x74, 0xf2, 0x6b, 0xf2, 0x6b, 0x12, 0x7c, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x9e, 0xf7, 0x33, 0x74, 0x91, 0x5b, 0xd1, 0x6b, 0xd1, 0x63, 0xb1, 0x63, 0xb1, 0x63, 0xb1, 0x63, 0x70, 0x5b, 0x90, 0x63, 0x39, 0xc6, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x17, 0x95, 0x54, 0x7c, 0x75, 0x7c, 0x75, 0x7c, 0x74, 0x7c, 0x74, 0x7c, 0x54, 0x7c, 0x54, 0x74, 0x54, 0x7c, 0xfc, 0xde, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x74, 0x84, 0x13, 0x74, 0x13, 0x74, 0x13, 0x74, 0x13, 0x74, 0x13, 0x74, 0x13, 0x74, 0xf2, 0x6b, 0xd2, 0x6b, 0xf2, 0x73, 0x5a, 0xce, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xb8, 0xad, 0xf2, 0x6b, 0xb1, 0x63, 0xd1, 0x6b, 0xd1, 0x63, 0xb1, 0x63, 0xb1, 0x63, 0xb1, 0x63, 0x90, 0x63, 0xd1, 0x6b, 0x15, 0x9d, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x57, 0x9d, 0x75, 0x7c, 0x55, 0x7c, 0x75, 0x7c, 0x74, 0x7c, 0x74, 0x7c, 0x54, 0x7c, 0x54, 0x7c, 0x13, 0x74, 0x37, 0x9d, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xdc, 0xde, 0x98, 0xa5, 0x33, 0x74, 0x13, 0x74, 0x13, 0x74, 0x13, 0x74, 0x13, 0x74, 0x13, 0x74, 0x13, 0x74, 0xf2, 0x73, 0xf2, 0x6b, 0xf2, 0x6b, 0x53, 0x84, 0x3a, 0xc6, 0xff, 0xff, 0x00, 0x00, 0xbb, 0xd6, 0x12, 0x74, 0xb1, 0x63, 0xd1, 0x6b, 0xd1, 0x6b, 0xb1, 0x6b, 0xb1, 0x63, 0xb1, 0x63, 0xb1, 0x63, 0x90, 0x63, 0xd1, 0x6b, 0xf5, 0x9c, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x57, 0x9d, 0x74, 0x7c, 0x54, 0x7c, 0x75, 0x7c, 0x75, 0x7c, 0x74, 0x7c, 0x54, 0x7c, 0x54, 0x7c, 0x54, 0x7c, 0x74, 0x7c, 0x57, 0x9d, 0x7b, 0xc6, 0x5a, 0xce, 0x1a, 0xbe, 0x78, 0xa5, 0xb5, 0x84, 0x33, 0x74, 0x13, 0x74, 0x13, 0x74, 0x13, 0x74, 0x13, 0x74, 0x13, 0x74, 0x13, 0x74, 0x13, 0x74, 0xf2, 0x73, 0xf2, 0x6b, 0xf2, 0x6b, 0xf2, 0x6b, 0x54, 0x7c, 0x36, 0x9d, 0xf8, 0xb5, 0x94, 0x84, 0xb1, 0x63, 0xb1, 0x63, 0xd2, 0x6b, 0xd1, 0x6b, 0xd1, 0x6b, 0xb1, 0x63, 0xb1, 0x63, 0xb1, 0x63, 0x90, 0x63, 0xd1, 0x73, 0x36, 0xa5, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x3a, 0xbe, 0x95, 0x84, 0x54, 0x7c, 0x75, 0x7c, 0x75, 0x7c, 0x74, 0x7c, 0x54, 0x7c, 0x54, 0x7c, 0x54, 0x7c, 0x34, 0x7c, 0x34, 0x74, 0x54, 0x7c, 0x54, 0x7c, 0x33, 0x74, 0x13, 0x74, 0x13, 0x74, 0x33, 0x74, 0x13, 0x74, 0x13, 0x74, 0x13, 0x74, 0x13, 0x74, 0x13, 0x74, 0x13, 0x74, 0x13, 0x74, 0x12, 0x74, 0xf2, 0x73, 0xf2, 0x6b, 0xf2, 0x6b, 0xd2, 0x6b, 0xd2, 0x6b, 0xd2, 0x6b, 0xd1, 0x63, 0xf2, 0x6b, 0xd2, 0x6b, 0xd1, 0x6b, 0xd1, 0x6b, 0xd1, 0x6b, 0xd1, 0x6b, 0xb1, 0x63, 0xb1, 0x63, 0x90, 0x63, 0xd1, 0x73, 0xbb, 0xde, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x17, 0x95, 0x75, 0x7c, 0x75, 0x7c, 0x75, 0x7c, 0x74, 0x7c, 0x54, 0x7c, 0x54, 0x7c, 0x54, 0x7c, 0x54, 0x7c, 0x34, 0x7c, 0x33, 0x74, 0x33, 0x74, 0x33, 0x74, 0x33, 0x74, 0x33, 0x74, 0x33, 0x74, 0x33, 0x74, 0x13, 0x74, 0x13, 0x74, 0x13, 0x74, 0x13, 0x74, 0x13, 0x74, 0x13, 0x74, 0x12, 0x74, 0x12, 0x74, 0xf2, 0x6b, 0xf2, 0x6b, 0xd2, 0x6b, 0xd2, 0x6b, 0xd2, 0x6b, 0xd2, 0x6b, 0xd2, 0x6b, 0xd2, 0x6b, 0xd2, 0x6b, 0xd1, 0x6b, 0xd1, 0x6b, 0xb1, 0x6b, 0xb1, 0x63, 0xb1, 0x63, 0xb0, 0x63, 0xd0, 0x73, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5d, 0xef, 0xf5, 0x94, 0x1c, 0xdf, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x3d, 0xe7, 0xdf, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1a, 0xbe, 0x95, 0x84, 0x54, 0x7c, 0x75, 0x7c, 0x74, 0x7c, 0x74, 0x7c, 0x54, 0x7c, 0x54, 0x7c, 0x54, 0x7c, 0x54, 0x7c, 0x54, 0x7c, 0x54, 0x74, 0x54, 0x74, 0x33, 0x74, 0x33, 0x74, 0x33, 0x74, 0x33, 0x74, 0x13, 0x74, 0x13, 0x74, 0x13, 0x74, 0x13, 0x74, 0x13, 0x74, 0x13, 0x74, 0x12, 0x74, 0x12, 0x74, 0xf2, 0x6b, 0xf2, 0x6b, 0xf2, 0x6b, 0xf2, 0x6b, 0xf2, 0x6b, 0xd2, 0x6b, 0xd2, 0x6b, 0xd2, 0x6b, 0xd2, 0x6b, 0xd1, 0x6b, 0xd1, 0x6b, 0xd1, 0x6b, 0xb1, 0x63, 0xb1, 0x63, 0xb1, 0x63, 0xd0, 0x73, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x9e, 0xf7, 0x57, 0xa5, 0x12, 0x74, 0xb1, 0x63, 0xf1, 0x6b, 0x56, 0x9d, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xb9, 0xad, 0x17, 0x95, 0x38, 0x9d, 0x3d, 0xe7, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x37, 0x9d, 0x75, 0x7c, 0x54, 0x7c, 0x75, 0x7c, 0x74, 0x7c, 0x74, 0x7c, 0x54, 0x7c, 0x54, 0x7c, 0x54, 0x7c, 0x54, 0x7c, 0x54, 0x74, 0x34, 0x74, 0x33, 0x74, 0x33, 0x74, 0x33, 0x74, 0x33, 0x74, 0x33, 0x74, 0x13, 0x74, 0x13, 0x74, 0x13, 0x74, 0x13, 0x74, 0x13, 0x74, 0x13, 0x74, 0x12, 0x74, 0x12, 0x74, 0xf2, 0x6b, 0xf2, 0x6b, 0xf2, 0x6b, 0xf2, 0x6b, 0xf2, 0x6b, 0xd2, 0x6b, 0xd2, 0x6b, 0xd2, 0x6b, 0xd1, 0x6b, 0xd1, 0x6b, 0xd1, 0x6b, 0xd1, 0x6b, 0xb1, 0x63, 0xb1, 0x63, 0x90, 0x63, 0xd1, 0x6b, 0x56, 0xa5, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xf5, 0x94, 0xd1, 0x6b, 0x4f, 0x5b, 0x70, 0x5b, 0x0f, 0x53, 0xb0, 0x63, 0xf5, 0x94, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x58, 0x9d, 0xd6, 0x8c, 0x75, 0x7c, 0x96, 0x84, 0xd6, 0x8c, 0xbc, 0xce, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x98, 0xa5, 0x75, 0x7c, 0x75, 0x7c, 0x75, 0x7c, 0x74, 0x7c, 0x74, 0x7c, 0x54, 0x7c, 0x54, 0x7c, 0x54, 0x7c, 0x54, 0x7c, 0x54, 0x7c, 0x54, 0x7c, 0x54, 0x74, 0x54, 0x7c, 0x54, 0x7c, 0x33, 0x74, 0x33, 0x74, 0x13, 0x74, 0x13, 0x74, 0x13, 0x74, 0x13, 0x74, 0x13, 0x74, 0x13, 0x74, 0x13, 0x74, 0xf2, 0x73, 0xf2, 0x73, 0xf2, 0x6b, 0xf2, 0x6b, 0xf2, 0x6b, 0xf2, 0x6b, 0xf2, 0x6b, 0xf2, 0x6b, 0xd2, 0x6b, 0xd2, 0x6b, 0xd1, 0x6b, 0xd1, 0x6b, 0xd1, 0x6b, 0xb1, 0x63, 0xb1, 0x63, 0xb1, 0x63, 0xb1, 0x63, 0x90, 0x63, 0x12, 0x74, 0x36, 0x9d, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x7d, 0xef, 0x73, 0x7c, 0x90, 0x63, 0x4f, 0x5b, 0x70, 0x5b, 0x70, 0x5b, 0x70, 0x5b, 0x2f, 0x53, 0x90, 0x63, 0xb4, 0x8c, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x78, 0xa5, 0xd6, 0x8c, 0x96, 0x84, 0xb6, 0x84, 0x96, 0x84, 0x76, 0x84, 0xb6, 0x84, 0xb9, 0xad, 0xbf, 0xff, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xfa, 0xb5, 0xd6, 0x8c, 0x75, 0x7c, 0x75, 0x7c, 0x75, 0x84, 0x75, 0x7c, 0x75, 0x7c, 0x74, 0x7c, 0x54, 0x7c, 0x54, 0x7c, 0x54, 0x7c, 0x54, 0x7c, 0x54, 0x7c, 0x54, 0x7c, 0x54, 0x74, 0x34, 0x74, 0x33, 0x74, 0x13, 0x74, 0xf2, 0x6b, 0xf2, 0x6b, 0x13, 0x74, 0x13, 0x74, 0x13, 0x74, 0x13, 0x74, 0x13, 0x74, 0x13, 0x74, 0xf2, 0x73, 0xd2, 0x6b, 0xd1, 0x6b, 0xd1, 0x6b, 0xd2, 0x6b, 0xf2, 0x6b, 0xf2, 0x6b, 0xf2, 0x6b, 0xd2, 0x6b, 0xd2, 0x6b, 0xd1, 0x6b, 0xd1, 0x6b, 0xd1, 0x6b, 0xb1, 0x63, 0xb1, 0x63, 0xb1, 0x63, 0xb1, 0x63, 0xb1, 0x63, 0x90, 0x63, 0xb1, 0x63, 0xf2, 0x73, 0x39, 0xbe, 0xfc, 0xde, 0x12, 0x74, 0x90, 0x63, 0x4f, 0x5b, 0x70, 0x5b, 0x90, 0x63, 0x90, 0x5b, 0x70, 0x5b, 0x70, 0x5b, 0x2e, 0x53, 0x90, 0x63, 0x36, 0x9d, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xb9, 0xad, 0xd7, 0x8c, 0x96, 0x84, 0xb6, 0x84, 0xb6, 0x84, 0xb6, 0x84, 0x96, 0x84, 0x96, 0x84, 0xb6, 0x84, 0x78, 0xa5, 0x5e, 0xef, 0xff, 0xff, 0xf9, 0xb5, 0xd6, 0x8c, 0x75, 0x7c, 0x75, 0x7c, 0x95, 0x84, 0x75, 0x7c, 0x75, 0x7c, 0x75, 0x7c, 0x74, 0x7c, 0x54, 0x7c, 0x54, 0x7c, 0x54, 0x7c, 0x74, 0x7c, 0x54, 0x7c, 0x13, 0x74, 0xf2, 0x6b, 0xb1, 0x63, 0x70, 0x5b, 0x6f, 0x5b, 0x4f, 0x53, 0x6f, 0x5b, 0xf2, 0x6b, 0x33, 0x74, 0x13, 0x74, 0x13, 0x74, 0x13, 0x74, 0x13, 0x74, 0xf2, 0x6b, 0xb1, 0x63, 0x4f, 0x5b, 0x2f, 0x53, 0x4f, 0x5b, 0x70, 0x5b, 0x90, 0x63, 0xb1, 0x63, 0xd1, 0x6b, 0xd2, 0x6b, 0xd2, 0x6b, 0xd1, 0x6b, 0xd1, 0x6b, 0xb1, 0x63, 0xb1, 0x63, 0xb1, 0x63, 0xb1, 0x63, 0xb1, 0x63, 0xb0, 0x63, 0x70, 0x5b, 0x90, 0x63, 0x32, 0x74, 0x12, 0x74, 0x70, 0x5b, 0x4f, 0x5b, 0x70, 0x5b, 0x90, 0x5b, 0x90, 0x5b, 0x70, 0x5b, 0x70, 0x5b, 0x70, 0x5b, 0x4f, 0x5b, 0x2f, 0x53, 0x53, 0x7c, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x37, 0x9d, 0x96, 0x84, 0xb6, 0x84, 0xb6, 0x84, 0xb6, 0x84, 0xb6, 0x84, 0x96, 0x84, 0x96, 0x84, 0x75, 0x84, 0x95, 0x84, 0xb6, 0x84, 0x95, 0x84, 0x95, 0x84, 0x75, 0x7c, 0x75, 0x7c, 0x95, 0x84, 0x75, 0x84, 0x75, 0x7c, 0x75, 0x7c, 0x75, 0x7c, 0x75, 0x7c, 0x75, 0x7c, 0x54, 0x7c, 0x33, 0x74, 0xf2, 0x6b, 0xd1, 0x6b, 0x90, 0x63, 0x6f, 0x5b, 0x2e, 0x53, 0x0d, 0x4b, 0xed, 0x4a, 0xed, 0x4a, 0x2e, 0x53, 0xd2, 0x6b, 0x33, 0x74, 0x13, 0x74, 0x13, 0x74, 0x13, 0x74, 0x13, 0x74, 0xf2, 0x6b, 0x90, 0x63, 0x0e, 0x53, 0xed, 0x4a, 0x0d, 0x4b, 0x0e, 0x4b, 0x2e, 0x53, 0x4f, 0x5b, 0x6f, 0x5b, 0x90, 0x63, 0x91, 0x63, 0xb1, 0x63, 0xd1, 0x6b, 0xd1, 0x6b, 0xb1, 0x63, 0xb1, 0x63, 0xb1, 0x63, 0xb1, 0x63, 0xb1, 0x63, 0xb1, 0x63, 0x90, 0x63, 0x70, 0x5b, 0x70, 0x5b, 0x70, 0x5b, 0x90, 0x63, 0x90, 0x63, 0x70, 0x5b, 0x90, 0x5b, 0x90, 0x5b, 0x70, 0x5b, 0x70, 0x5b, 0x4f, 0x53, 0x6f, 0x5b, 0x94, 0x8c, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x37, 0x9d, 0x96, 0x84, 0x96, 0x84, 0xb6, 0x84, 0x96, 0x84, 0x96, 0x84, 0x96, 0x84, 0x96, 0x84, 0x96, 0x84, 0x95, 0x84, 0x95, 0x84, 0x95, 0x84, 0x95, 0x7c, 0x95, 0x84, 0x95, 0x84, 0x75, 0x7c, 0x75, 0x7c, 0x75, 0x7c, 0x75, 0x7c, 0x75, 0x7c, 0x54, 0x7c, 0x34, 0x7c, 0xf2, 0x6b, 0xb1, 0x63, 0x4f, 0x53, 0x0d, 0x53, 0x0d, 0x4b, 0x0e, 0x53, 0x0e, 0x53, 0x0e, 0x53, 0x0e, 0x53, 0x0d, 0x4b, 0x2f, 0x53, 0xd2, 0x6b, 0x33, 0x74, 0x13, 0x74, 0x13, 0x74, 0x13, 0x74, 0x13, 0x74, 0xf2, 0x6b, 0x90, 0x63, 0x2e, 0x53, 0x0d, 0x4b, 0x0d, 0x4b, 0x0d, 0x4b, 0x0e, 0x4b, 0x0e, 0x53, 0x0e, 0x53, 0x0e, 0x53, 0x4f, 0x53, 0x90, 0x5b, 0xb1, 0x63, 0xb1, 0x63, 0xb1, 0x63, 0xb1, 0x63, 0xb1, 0x63, 0xb1, 0x63, 0xb1, 0x63, 0x90, 0x63, 0x90, 0x63, 0x90, 0x5b, 0x90, 0x5b, 0x90, 0x63, 0x90, 0x63, 0x70, 0x63, 0x70, 0x5b, 0x90, 0x5b, 0x70, 0x5b, 0x70, 0x5b, 0x70, 0x5b, 0x2f, 0x53, 0xb0, 0x6b, 0x35, 0xa5, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5b, 0xc6, 0xb6, 0x84, 0x75, 0x84, 0x96, 0x84, 0x96, 0x84, 0x96, 0x84, 0x96, 0x84, 0x96, 0x84, 0x95, 0x84, 0x95, 0x84, 0x95, 0x84, 0x95, 0x84, 0x95, 0x84, 0x95, 0x84, 0x95, 0x84, 0x75, 0x84, 0x75, 0x7c, 0x75, 0x7c, 0x75, 0x7c, 0x54, 0x7c, 0xf2, 0x6b, 0x90, 0x5b, 0x2f, 0x53, 0x2e, 0x53, 0x0e, 0x4b, 0xed, 0x4a, 0x0d, 0x4b, 0x0e, 0x53, 0x0e, 0x53, 0x0e, 0x53, 0x0e, 0x53, 0x0e, 0x4b, 0x2f, 0x53, 0xd2, 0x6b, 0x33, 0x74, 0x13, 0x74, 0x13, 0x74, 0x13, 0x74, 0x13, 0x74, 0xf2, 0x6b, 0x91, 0x63, 0x2e, 0x53, 0xed, 0x4a, 0x0d, 0x4b, 0x0d, 0x4b, 0x0d, 0x4b, 0x0e, 0x4b, 0x0e, 0x53, 0x0e, 0x53, 0x2e, 0x53, 0x4f, 0x53, 0x4f, 0x5b, 0x70, 0x5b, 0x91, 0x63, 0xb1, 0x63, 0xb1, 0x63, 0xb1, 0x63, 0x90, 0x63, 0x90, 0x63, 0x90, 0x63, 0x90, 0x63, 0x90, 0x63, 0x90, 0x63, 0x90, 0x63, 0x90, 0x63, 0x70, 0x5b, 0x70, 0x5b, 0x70, 0x5b, 0x70, 0x5b, 0x4f, 0x5b, 0x4f, 0x5b, 0xd1, 0x7b, 0x1c, 0xe7, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x1a, 0xbe, 0x75, 0x84, 0x96, 0x84, 0xb6, 0x84, 0x96, 0x84, 0x96, 0x84, 0x95, 0x84, 0x95, 0x84, 0x95, 0x84, 0x95, 0x84, 0x95, 0x84, 0x95, 0x84, 0x95, 0x84, 0x95, 0x84, 0x95, 0x84, 0x95, 0x84, 0x75, 0x7c, 0x13, 0x74, 0xb1, 0x63, 0x4f, 0x5b, 0x0e, 0x53, 0x0d, 0x4b, 0x0d, 0x4b, 0x0e, 0x53, 0x2e, 0x53, 0x2e, 0x53, 0x0e, 0x4b, 0xee, 0x4a, 0xed, 0x4a, 0x0e, 0x53, 0x4f, 0x63, 0x90, 0x6b, 0xf2, 0x6b, 0x13, 0x74, 0x13, 0x74, 0x13, 0x74, 0x13, 0x74, 0x13, 0x74, 0xd2, 0x6b, 0x4f, 0x5b, 0xcc, 0x52, 0x0d, 0x53, 0x6f, 0x5b, 0x4e, 0x5b, 0xed, 0x4a, 0xcd, 0x42, 0xed, 0x4a, 0x2e, 0x53, 0x2e, 0x53, 0x2e, 0x53, 0x2e, 0x53, 0x4f, 0x5b, 0x6f, 0x5b, 0x90, 0x63, 0x90, 0x63, 0xb1, 0x63, 0xb1, 0x63, 0x90, 0x63, 0x90, 0x63, 0x90, 0x63, 0x90, 0x63, 0x90, 0x63, 0x90, 0x63, 0x90, 0x63, 0x70, 0x5b, 0x70, 0x5b, 0x70, 0x5b, 0x70, 0x5b, 0x4f, 0x53, 0x8f, 0x6b, 0xd4, 0x9c, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xfa, 0xb5, 0x96, 0x84, 0x75, 0x7c, 0xb6, 0x84, 0x96, 0x84, 0x95, 0x84, 0x95, 0x84, 0x95, 0x84, 0x95, 0x84, 0x95, 0x84, 0x95, 0x84, 0x95, 0x84, 0x95, 0x84, 0x95, 0x84, 0x54, 0x7c, 0xf2, 0x6b, 0x70, 0x5b, 0x0e, 0x53, 0xed, 0x4a, 0x0e, 0x53, 0x0e, 0x53, 0x0e, 0x53, 0x0e, 0x4b, 0xed, 0x4a, 0x0e, 0x53, 0x2e, 0x5b, 0x90, 0x6b, 0x52, 0x84, 0x15, 0x9d, 0xbb, 0xde, 0x39, 0xc6, 0x54, 0x84, 0x13, 0x74, 0x13, 0x74, 0x13, 0x74, 0x13, 0x74, 0x13, 0x74, 0xb1, 0x6b, 0x2e, 0x5b, 0x4e, 0x6b, 0x56, 0xad, 0xdb, 0xde, 0xdb, 0xd6, 0xf8, 0xbd, 0x73, 0x84, 0xd1, 0x6b, 0x2e, 0x53, 0xee, 0x4a, 0x0e, 0x53, 0x2f, 0x53, 0x4f, 0x5b, 0x4f, 0x5b, 0x4f, 0x5b, 0x70, 0x5b, 0x90, 0x63, 0xb1, 0x63, 0xb1, 0x63, 0x90, 0x63, 0x90, 0x63, 0x90, 0x63, 0x90, 0x63, 0x90, 0x63, 0x90, 0x63, 0x70, 0x5b, 0x70, 0x5b, 0x70, 0x5b, 0x4f, 0x5b, 0x2e, 0x5b, 0xd0, 0x7b, 0x3d, 0xef, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xbf, 0xf7, 0xf7, 0x94, 0x95, 0x84, 0x95, 0x84, 0x95, 0x84, 0x95, 0x84, 0x95, 0x84, 0x95, 0x84, 0x95, 0x84, 0x95, 0x84, 0x95, 0x84, 0x95, 0x84, 0x95, 0x84, 0x54, 0x7c, 0xb1, 0x63, 0x2e, 0x53, 0x0e, 0x53, 0x0e, 0x4b, 0x0e, 0x53, 0x0e, 0x53, 0x0e, 0x4b, 0x0e, 0x53, 0x2e, 0x53, 0x4f, 0x63, 0xd0, 0x73, 0x52, 0x8c, 0x7a, 0xd6, 0x9e, 0xf7, 0xff, 0xff, 0x00, 0x00, 0xff, 0xff, 0xf6, 0x94, 0x13, 0x74, 0xf3, 0x6b, 0x13, 0x74, 0x13, 0x74, 0x13, 0x74, 0xb1, 0x63, 0x90, 0x6b, 0x35, 0xa5, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x7a, 0xce, 0x73, 0x84, 0xb0, 0x6b, 0x6f, 0x5b, 0x2f, 0x53, 0x2f, 0x53, 0x4f, 0x5b, 0x6f, 0x5b, 0x70, 0x5b, 0x70, 0x5b, 0x90, 0x63, 0x90, 0x63, 0x90, 0x63, 0x90, 0x63, 0x90, 0x63, 0x90, 0x63, 0x90, 0x63, 0x90, 0x63, 0x70, 0x5b, 0x70, 0x5b, 0x70, 0x5b, 0x0e, 0x53, 0x6f, 0x6b, 0x55, 0xad, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5e, 0xe7, 0xf7, 0x94, 0x95, 0x84, 0x95, 0x84, 0x95, 0x84, 0x95, 0x84, 0x95, 0x84, 0x95, 0x84, 0x95, 0x84, 0x96, 0x84, 0x95, 0x84, 0x34, 0x74, 0x90, 0x63, 0x2e, 0x53, 0x0d, 0x4b, 0x0e, 0x53, 0x0e, 0x53, 0x0e, 0x53, 0x0e, 0x4b, 0x0e, 0x53, 0x2e, 0x63, 0xf1, 0x7b, 0xf8, 0xbd, 0x9e, 0xf7, 0x5d, 0xef, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x16, 0x9d, 0x33, 0x74, 0xf2, 0x6b, 0x13, 0x74, 0x13, 0x74, 0x13, 0x74, 0xb1, 0x6b, 0xd1, 0x73, 0x3e, 0xef, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7d, 0xef, 0x5d, 0xef, 0xb7, 0xad, 0xd1, 0x6b, 0x4f, 0x5b, 0x4f, 0x5b, 0x70, 0x5b, 0x70, 0x5b, 0x70, 0x5b, 0x70, 0x5b, 0x90, 0x63, 0x90, 0x63, 0x90, 0x63, 0x90, 0x63, 0x90, 0x63, 0x90, 0x63, 0x90, 0x63, 0x70, 0x5b, 0x70, 0x5b, 0x70, 0x5b, 0x2f, 0x5b, 0xf1, 0x7b, 0x7e, 0xf7, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x17, 0x95, 0x75, 0x7c, 0x95, 0x84, 0x95, 0x84, 0x95, 0x84, 0x95, 0x84, 0x95, 0x84, 0x96, 0x84, 0x95, 0x84, 0x33, 0x74, 0x90, 0x63, 0x0e, 0x53, 0x0d, 0x4b, 0x0e, 0x53, 0x2e, 0x53, 0x0e, 0x4b, 0xed, 0x52, 0x2e, 0x5b, 0xd0, 0x73, 0xb7, 0xb5, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x16, 0x95, 0x33, 0x74, 0xf2, 0x6b, 0x13, 0x74, 0x13, 0x74, 0x13, 0x74, 0xd1, 0x6b, 0xf1, 0x73, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0xe7, 0x97, 0xad, 0xf1, 0x73, 0x2f, 0x53, 0x4f, 0x5b, 0x90, 0x63, 0x90, 0x63, 0x90, 0x63, 0x90, 0x63, 0x90, 0x63, 0x90, 0x63, 0x90, 0x63, 0x70, 0x5b, 0x70, 0x5b, 0x70, 0x5b, 0x70, 0x5b, 0x70, 0x5b, 0x4f, 0x53, 0x12, 0x74, 0x9e, 0xf7, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xd9, 0xb5, 0xb6, 0x84, 0x75, 0x7c, 0x95, 0x84, 0x95, 0x84, 0x95, 0x84, 0x95, 0x84, 0x95, 0x84, 0x95, 0x84, 0x33, 0x74, 0x90, 0x5b, 0x0e, 0x53, 0x0e, 0x4b, 0x2e, 0x53, 0x2e, 0x53, 0x0e, 0x4b, 0x0e, 0x53, 0x6f, 0x63, 0x31, 0x8c, 0x18, 0xc6, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x16, 0x95, 0x33, 0x74, 0xf2, 0x6b, 0x13, 0x74, 0x13, 0x74, 0x13, 0x74, 0xd1, 0x6b, 0xf1, 0x7b, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xd8, 0xb5, 0x32, 0x74, 0x70, 0x5b, 0x70, 0x5b, 0x90, 0x63, 0x90, 0x63, 0xb1, 0x63, 0x90, 0x63, 0x90, 0x63, 0x70, 0x5b, 0x70, 0x5b, 0x70, 0x5b, 0x70, 0x5b, 0x70, 0x5b, 0x70, 0x5b, 0x4f, 0x53, 0xb0, 0x63, 0x15, 0x9d, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xbf, 0xff, 0xd6, 0x8c, 0x75, 0x7c, 0x95, 0x84, 0x95, 0x84, 0x95, 0x84, 0x95, 0x84, 0x95, 0x84, 0x95, 0x84, 0x33, 0x74, 0x90, 0x5b, 0x0e, 0x53, 0x0e, 0x53, 0x2e, 0x53, 0x2e, 0x53, 0x0e, 0x53, 0x0e, 0x53, 0x8f, 0x73, 0x35, 0xad, 0x9e, 0xf7, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x16, 0x95, 0x33, 0x74, 0xf2, 0x6b, 0x13, 0x74, 0x13, 0x74, 0x13, 0x74, 0xd1, 0x6b, 0xf1, 0x7b, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5e, 0xef, 0x94, 0x84, 0x90, 0x63, 0x90, 0x63, 0xb0, 0x63, 0xb1, 0x63, 0xb1, 0x63, 0xb1, 0x63, 0x90, 0x63, 0x70, 0x5b, 0x70, 0x5b, 0x70, 0x5b, 0x70, 0x5b, 0x70, 0x5b, 0x70, 0x5b, 0x4f, 0x53, 0x90, 0x63, 0x5d, 0xef, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xbb, 0xce, 0xf5, 0x94, 0x73, 0x84, 0x32, 0x7c, 0xdc, 0xde, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x57, 0x9d, 0x75, 0x7c, 0x75, 0x7c, 0x95, 0x84, 0x95, 0x84, 0x95, 0x84, 0x95, 0x84, 0x95, 0x84, 0x54, 0x74, 0x90, 0x63, 0x0e, 0x53, 0x0e, 0x4b, 0x2e, 0x53, 0x2e, 0x53, 0x0e, 0x53, 0x0d, 0x53, 0xf0, 0x7b, 0xf8, 0xc5, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x16, 0x95, 0x13, 0x74, 0xf3, 0x6b, 0x13, 0x74, 0x13, 0x74, 0xf2, 0x6b, 0xd1, 0x6b, 0xf1, 0x7b, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x56, 0x9d, 0xf2, 0x73, 0x90, 0x63, 0xb1, 0x63, 0xd1, 0x6b, 0xd1, 0x6b, 0xb1, 0x63, 0x90, 0x63, 0x70, 0x5b, 0x70, 0x5b, 0x70, 0x5b, 0x70, 0x5b, 0x70, 0x5b, 0x4f, 0x53, 0x4f, 0x5b, 0x94, 0x84, 0x77, 0xad, 0x97, 0xad, 0x56, 0x9d, 0xd4, 0x8c, 0x12, 0x74, 0x90, 0x63, 0x2e, 0x53, 0x0e, 0x53, 0x12, 0x74, 0x9e, 0xf7, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5e, 0xef, 0xf6, 0x94, 0x17, 0x95, 0x9b, 0xce, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0xff, 0xff, 0xd9, 0xad, 0x75, 0x7c, 0x75, 0x7c, 0x95, 0x84, 0x95, 0x84, 0x95, 0x84, 0x95, 0x84, 0x95, 0x84, 0x54, 0x7c, 0xb1, 0x63, 0x0e, 0x53, 0x0d, 0x4b, 0x2e, 0x53, 0x2e, 0x53, 0x0e, 0x4b, 0x0e, 0x5b, 0xf1, 0x83, 0xf8, 0xc5, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x16, 0x95, 0x13, 0x74, 0xf2, 0x6b, 0x13, 0x74, 0x12, 0x74, 0xf2, 0x6b, 0xd1, 0x6b, 0xf2, 0x7b, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x77, 0xa5, 0x12, 0x74, 0xb1, 0x63, 0xd1, 0x6b, 0xd2, 0x6b, 0xd1, 0x6b, 0xb1, 0x63, 0x90, 0x5b, 0x70, 0x5b, 0x70, 0x5b, 0x70, 0x5b, 0x70, 0x5b, 0x6f, 0x5b, 0x6f, 0x5b, 0x6f, 0x5b, 0xb0, 0x63, 0xb0, 0x6b, 0x6f, 0x5b, 0x2e, 0x53, 0x0e, 0x53, 0x4f, 0x5b, 0x4f, 0x5b, 0x2f, 0x53, 0x4f, 0x5b, 0x93, 0x84, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x9f, 0xf7, 0xd6, 0x8c, 0x54, 0x7c, 0x75, 0x7c, 0x95, 0x84, 0x95, 0x84, 0xb5, 0x84, 0x17, 0x95, 0xd9, 0xb5, 0x98, 0xa5, 0xd6, 0x8c, 0x75, 0x7c, 0x75, 0x7c, 0x95, 0x84, 0x75, 0x84, 0x75, 0x7c, 0x95, 0x84, 0x75, 0x7c, 0xd1, 0x63, 0x0e, 0x53, 0x0d, 0x4b, 0x2e, 0x53, 0x2e, 0x53, 0x0e, 0x53, 0x0d, 0x53, 0x11, 0x84, 0x19, 0xce, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x16, 0x95, 0x13, 0x74, 0xf2, 0x6b, 0x12, 0x6c, 0x12, 0x6c, 0xf2, 0x6b, 0xd1, 0x6b, 0x12, 0x7c, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x57, 0xa5, 0x12, 0x74, 0xd1, 0x6b, 0xd2, 0x6b, 0xf2, 0x6b, 0xd2, 0x6b, 0xb1, 0x63, 0x70, 0x5b, 0x70, 0x5b, 0x70, 0x5b, 0x70, 0x5b, 0x70, 0x5b, 0x6f, 0x5b, 0x4f, 0x5b, 0x2f, 0x53, 0x2e, 0x53, 0x0e, 0x53, 0x2e, 0x53, 0x2f, 0x53, 0x2f, 0x53, 0x4f, 0x5b, 0x4f, 0x53, 0xee, 0x4a, 0xd1, 0x6b, 0x7d, 0xe7, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xbc, 0xd6, 0x95, 0x84, 0x34, 0x74, 0x75, 0x7c, 0x54, 0x7c, 0x54, 0x7c, 0x75, 0x7c, 0x95, 0x84, 0xb6, 0x84, 0xb5, 0x84, 0x75, 0x7c, 0x75, 0x84, 0x75, 0x7c, 0x75, 0x7c, 0x75, 0x7c, 0x95, 0x84, 0x75, 0x7c, 0xf2, 0x6b, 0x4f, 0x53, 0x0d, 0x4b, 0x0e, 0x53, 0x2e, 0x53, 0x0e, 0x53, 0x0e, 0x53, 0xf0, 0x7b, 0x39, 0xce, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x16, 0x95, 0x13, 0x74, 0xf2, 0x6b, 0xf2, 0x73, 0xf2, 0x6b, 0xf2, 0x6b, 0xd1, 0x6b, 0xf1, 0x7b, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x77, 0xa5, 0xf2, 0x73, 0xd2, 0x6b, 0xf2, 0x6b, 0xf2, 0x6b, 0xd2, 0x6b, 0x90, 0x63, 0x70, 0x5b, 0x70, 0x5b, 0x6f, 0x5b, 0x6f, 0x5b, 0x6f, 0x5b, 0x4f, 0x5b, 0x4f, 0x5b, 0x4f, 0x5b, 0x4f, 0x5b, 0x4f, 0x5b, 0x4f, 0x5b, 0x4f, 0x53, 0x4f, 0x53, 0x4f, 0x53, 0x0e, 0x4b, 0x4f, 0x5b, 0x97, 0xad, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x9e, 0xf7, 0xb5, 0x8c, 0x54, 0x7c, 0x75, 0x7c, 0x75, 0x7c, 0x75, 0x7c, 0x75, 0x7c, 0x75, 0x7c, 0x55, 0x7c, 0x54, 0x7c, 0x54, 0x7c, 0x75, 0x7c, 0x75, 0x7c, 0x75, 0x7c, 0x75, 0x7c, 0x75, 0x7c, 0x75, 0x7c, 0x34, 0x74, 0x70, 0x5b, 0x0d, 0x4b, 0x0e, 0x53, 0x2e, 0x53, 0x2e, 0x53, 0x0e, 0x53, 0x8f, 0x73, 0xf8, 0xc5, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x16, 0x95, 0x13, 0x74, 0xf2, 0x6b, 0xf2, 0x73, 0xf2, 0x6b, 0xf2, 0x6b, 0xb1, 0x6b, 0xf1, 0x7b, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xd5, 0x8c, 0xd2, 0x6b, 0xf2, 0x6b, 0x13, 0x74, 0x13, 0x74, 0xd1, 0x6b, 0x70, 0x5b, 0x6f, 0x5b, 0x6f, 0x5b, 0x6f, 0x5b, 0x6f, 0x5b, 0x4f, 0x5b, 0x4f, 0x5b, 0x4f, 0x5b, 0x4f, 0x5b, 0x4f, 0x5b, 0x4f, 0x5b, 0x4f, 0x53, 0x2f, 0x53, 0x2f, 0x53, 0x2e, 0x53, 0x2e, 0x53, 0xf1, 0x73, 0x5d, 0xef, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x9e, 0xef, 0x54, 0x7c, 0x54, 0x7c, 0x74, 0x7c, 0x75, 0x7c, 0x75, 0x7c, 0x75, 0x7c, 0x75, 0x7c, 0x75, 0x7c, 0x75, 0x7c, 0x75, 0x7c, 0x75, 0x7c, 0x75, 0x7c, 0x75, 0x7c, 0x75, 0x7c, 0x75, 0x7c, 0x54, 0x7c, 0xb1, 0x63, 0x2e, 0x53, 0x0d, 0x53, 0x2e, 0x53, 0x2e, 0x53, 0xed, 0x52, 0x6f, 0x6b, 0x55, 0xad, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x16, 0x95, 0x13, 0x74, 0xf2, 0x6b, 0xf2, 0x73, 0xf2, 0x6b, 0xf2, 0x6b, 0xb1, 0x6b, 0xf1, 0x7b, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1d, 0xdf, 0x94, 0x84, 0xf2, 0x6b, 0xf3, 0x6b, 0x33, 0x74, 0xf2, 0x73, 0xb1, 0x63, 0x70, 0x5b, 0x6f, 0x5b, 0x6f, 0x5b, 0x6f, 0x5b, 0x4f, 0x5b, 0x4f, 0x5b, 0x4f, 0x5b, 0x4f, 0x5b, 0x4f, 0x5b, 0x4f, 0x5b, 0x4f, 0x53, 0x2f, 0x53, 0x2f, 0x53, 0x2e, 0x53, 0x2e, 0x53, 0x4f, 0x5b, 0x5d, 0xef, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x5a, 0xc6, 0x34, 0x74, 0x34, 0x74, 0x54, 0x7c, 0x54, 0x7c, 0x74, 0x7c, 0x74, 0x7c, 0x75, 0x7c, 0x75, 0x7c, 0x75, 0x7c, 0x75, 0x7c, 0x75, 0x7c, 0x75, 0x7c, 0x75, 0x7c, 0x75, 0x7c, 0x75, 0x7c, 0x13, 0x74, 0x4f, 0x53, 0x0d, 0x53, 0x2e, 0x53, 0x2e, 0x53, 0x0e, 0x53, 0x2e, 0x63, 0x72, 0x94, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x16, 0x95, 0x13, 0x74, 0xf2, 0x6b, 0xf2, 0x6b, 0xf2, 0x6b, 0xf2, 0x6b, 0xb1, 0x6b, 0xf1, 0x7b, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7a, 0xce, 0x33, 0x74, 0xf3, 0x6b, 0x33, 0x74, 0x33, 0x74, 0xf2, 0x6b, 0x90, 0x63, 0x4f, 0x5b, 0x6f, 0x5b, 0x4f, 0x5b, 0x4f, 0x5b, 0x4f, 0x5b, 0x4f, 0x5b, 0x4f, 0x5b, 0x4f, 0x5b, 0x4f, 0x5b, 0x4f, 0x53, 0x2f, 0x53, 0x2e, 0x53, 0x0e, 0x4b, 0x2e, 0x53, 0x52, 0x84, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x5a, 0xc6, 0x54, 0x7c, 0x34, 0x74, 0x54, 0x7c, 0x54, 0x7c, 0x54, 0x7c, 0x74, 0x7c, 0x74, 0x7c, 0x74, 0x7c, 0x74, 0x7c, 0x74, 0x7c, 0x74, 0x7c, 0x74, 0x7c, 0x74, 0x7c, 0x75, 0x7c, 0x54, 0x7c, 0xb1, 0x63, 0x0e, 0x53, 0x0e, 0x4b, 0x2e, 0x53, 0x0e, 0x53, 0x0e, 0x53, 0x11, 0x84, 0xfc, 0xe6, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x16, 0x95, 0x13, 0x74, 0xf2, 0x6b, 0xf2, 0x6b, 0xf2, 0x6b, 0xf2, 0x6b, 0xb1, 0x6b, 0xf1, 0x7b, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x16, 0x95, 0x33, 0x74, 0x13, 0x74, 0x34, 0x74, 0x33, 0x74, 0xb1, 0x63, 0x6f, 0x5b, 0x4f, 0x5b, 0x4f, 0x5b, 0x4f, 0x5b, 0x4f, 0x5b, 0x4f, 0x5b, 0x4f, 0x5b, 0x4f, 0x5b, 0x4f, 0x5b, 0x4f, 0x53, 0x2f, 0x53, 0x0e, 0x53, 0x2e, 0x5b, 0x11, 0x84, 0x7a, 0xce, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x98, 0xad, 0x54, 0x7c, 0x13, 0x74, 0x34, 0x74, 0x54, 0x7c, 0x54, 0x7c, 0x54, 0x7c, 0x54, 0x7c, 0x54, 0x7c, 0x54, 0x7c, 0x54, 0x7c, 0x54, 0x7c, 0x74, 0x7c, 0x75, 0x7c, 0xf2, 0x6b, 0x4f, 0x5b, 0x0e, 0x53, 0x2e, 0x53, 0x2e, 0x53, 0x0e, 0x53, 0x4f, 0x6b, 0x18, 0xc6, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1d, 0xe7, 0x95, 0x84, 0xf2, 0x6b, 0xf2, 0x6b, 0xf2, 0x6b, 0xf2, 0x6b, 0xf2, 0x6b, 0xb1, 0x6b, 0xf2, 0x73, 0x5a, 0xc6, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfc, 0xe6, 0x74, 0x84, 0xf3, 0x6b, 0x54, 0x7c, 0x54, 0x7c, 0xf2, 0x6b, 0x90, 0x63, 0x4f, 0x5b, 0x4f, 0x5b, 0x4f, 0x5b, 0x4f, 0x5b, 0x4f, 0x5b, 0x4f, 0x5b, 0x4f, 0x5b, 0x4f, 0x5b, 0x2f, 0x53, 0x0e, 0x53, 0x4f, 0x63, 0x93, 0x94, 0xfc, 0xde, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xbc, 0xd6, 0x37, 0x9d, 0x75, 0x84, 0x33, 0x74, 0x34, 0x74, 0x54, 0x7c, 0x54, 0x7c, 0x54, 0x7c, 0x54, 0x7c, 0x54, 0x7c, 0x54, 0x7c, 0x54, 0x7c, 0x54, 0x7c, 0xb1, 0x63, 0x0e, 0x53, 0x0e, 0x53, 0x2e, 0x53, 0x0e, 0x53, 0x2e, 0x5b, 0x11, 0x84, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x9e, 0xf7, 0x7a, 0xce, 0xf6, 0x94, 0x13, 0x74, 0xd2, 0x6b, 0xf2, 0x6b, 0xf2, 0x6b, 0xf2, 0x6b, 0xd2, 0x6b, 0xd1, 0x6b, 0xd2, 0x6b, 0x74, 0x84, 0x3a, 0xc6, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x98, 0xa5, 0x33, 0x74, 0x54, 0x7c, 0x54, 0x7c, 0x34, 0x74, 0xb1, 0x63, 0x4f, 0x5b, 0x4f, 0x5b, 0x4f, 0x5b, 0x4f, 0x5b, 0x4f, 0x5b, 0x4f, 0x5b, 0x4f, 0x5b, 0x2e, 0x53, 0xed, 0x52, 0x8f, 0x73, 0xf4, 0xa4, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xd9, 0xb5, 0x95, 0x84, 0x54, 0x7c, 0x54, 0x7c, 0x54, 0x7c, 0x54, 0x7c, 0x54, 0x7c, 0x54, 0x7c, 0x54, 0x7c, 0x54, 0x7c, 0x13, 0x74, 0x90, 0x63, 0x0e, 0x53, 0x2e, 0x53, 0x2f, 0x53, 0x0e, 0x53, 0x8f, 0x6b, 0x59, 0xce, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x9b, 0xce, 0x94, 0x84, 0x53, 0x7c, 0xf2, 0x6b, 0xf2, 0x6b, 0xf2, 0x6b, 0xf2, 0x6b, 0xf2, 0x6b, 0xf2, 0x6b, 0xd2, 0x6b, 0xd2, 0x6b, 0xd2, 0x6b, 0xd2, 0x6b, 0x33, 0x74, 0xb4, 0x8c, 0xfc, 0xd6, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3e, 0xe7, 0xb5, 0x8c, 0x34, 0x74, 0x54, 0x7c, 0x75, 0x7c, 0xf2, 0x6b, 0x4f, 0x5b, 0x4f, 0x5b, 0x4f, 0x5b, 0x4f, 0x5b, 0x4f, 0x5b, 0x4f, 0x5b, 0x4f, 0x53, 0xed, 0x52, 0x2e, 0x6b, 0x15, 0xad, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xbf, 0xff, 0xb9, 0xb5, 0x95, 0x84, 0x34, 0x74, 0x54, 0x7c, 0x54, 0x7c, 0x54, 0x7c, 0x54, 0x7c, 0x54, 0x7c, 0xd1, 0x6b, 0x4f, 0x5b, 0x2e, 0x53, 0x2e, 0x53, 0x2e, 0x53, 0x2e, 0x5b, 0x11, 0x84, 0x7f, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7d, 0xe7, 0x77, 0xa5, 0x33, 0x74, 0xd2, 0x6b, 0xd2, 0x6b, 0xf2, 0x6b, 0xf2, 0x6b, 0xf2, 0x6b, 0xf2, 0x6b, 0xf2, 0x6b, 0xf2, 0x6b, 0xd2, 0x6b, 0xd2, 0x6b, 0xd2, 0x6b, 0xd2, 0x6b, 0x91, 0x63, 0xb1, 0x63, 0x12, 0x74, 0x98, 0xad, 0x5e, 0xef, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xf9, 0xb5, 0x34, 0x74, 0x54, 0x7c, 0x95, 0x84, 0x33, 0x74, 0x90, 0x63, 0x4f, 0x5b, 0x4f, 0x5b, 0x4f, 0x5b, 0x4f, 0x5b, 0x4f, 0x5b, 0x4f, 0x53, 0x0e, 0x5b, 0x52, 0x8c, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xbc, 0xce, 0x95, 0x84, 0x34, 0x74, 0x34, 0x74, 0x54, 0x7c, 0x54, 0x7c, 0x54, 0x7c, 0x34, 0x74, 0x90, 0x63, 0x0e, 0x53, 0x2e, 0x53, 0x2e, 0x53, 0x0e, 0x53, 0x4e, 0x63, 0x35, 0xad, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3e, 0xef, 0xd5, 0x8c, 0xd2, 0x6b, 0x91, 0x63, 0xd2, 0x6b, 0xf2, 0x6b, 0xf2, 0x73, 0xf2, 0x6b, 0xf2, 0x6b, 0xf2, 0x6b, 0xf2, 0x6b, 0xf2, 0x6b, 0xd2, 0x6b, 0xd2, 0x6b, 0xd2, 0x6b, 0xd2, 0x6b, 0xd2, 0x6b, 0xd1, 0x63, 0x70, 0x5b, 0xb1, 0x63, 0xb4, 0x8c, 0x7d, 0xef, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1d, 0xdf, 0x74, 0x7c, 0x75, 0x7c, 0x95, 0x84, 0x54, 0x7c, 0xd2, 0x6b, 0x4f, 0x5b, 0x4f, 0x5b, 0x4f, 0x5b, 0x4f, 0x5b, 0x2f, 0x5b, 0x4f, 0x53, 0x4f, 0x5b, 0xd8, 0xbd, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3a, 0xbe, 0x54, 0x7c, 0x34, 0x74, 0x54, 0x7c, 0x54, 0x7c, 0x54, 0x74, 0x54, 0x7c, 0x13, 0x74, 0x6f, 0x5b, 0x0e, 0x4b, 0x2e, 0x53, 0x2e, 0x53, 0x0e, 0x53, 0xd0, 0x7b, 0x1c, 0xe7, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xf6, 0x8c, 0xb1, 0x63, 0x70, 0x5b, 0xd1, 0x6b, 0x12, 0x74, 0x12, 0x74, 0xd2, 0x6b, 0xd2, 0x6b, 0xb1, 0x63, 0xb1, 0x63, 0xb1, 0x63, 0xb1, 0x63, 0xb1, 0x63, 0xb1, 0x6b, 0xd2, 0x6b, 0xd1, 0x6b, 0xb1, 0x63, 0xb0, 0x63, 0x6f, 0x5b, 0x4f, 0x5b, 0x90, 0x63, 0xf5, 0x94, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3e, 0xef, 0xd6, 0x8c, 0x75, 0x7c, 0x95, 0x84, 0x95, 0x84, 0x13, 0x74, 0x4f, 0x5b, 0x2f, 0x53, 0x4f, 0x5b, 0x4f, 0x5b, 0x2f, 0x53, 0x4f, 0x53, 0x2e, 0x53, 0xf4, 0x94, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x19, 0xbe, 0x13, 0x74, 0x54, 0x7c, 0x34, 0x74, 0x34, 0x74, 0x54, 0x74, 0x33, 0x74, 0xf2, 0x6b, 0x4f, 0x5b, 0x0e, 0x53, 0x2f, 0x53, 0x2e, 0x53, 0x0e, 0x5b, 0xd4, 0x9c, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x98, 0xad, 0xf2, 0x6b, 0x4f, 0x53, 0x6f, 0x5b, 0xb4, 0x8c, 0x36, 0x9d, 0x74, 0x84, 0xd2, 0x6b, 0x91, 0x63, 0x90, 0x63, 0x90, 0x63, 0xb0, 0x63, 0xb1, 0x6b, 0xd1, 0x6b, 0xd1, 0x6b, 0xb1, 0x63, 0xb1, 0x63, 0xf1, 0x73, 0xf1, 0x73, 0xf1, 0x73, 0x6f, 0x5b, 0x4f, 0x5b, 0xd1, 0x6b, 0x3a, 0xc6, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7b, 0xc6, 0xb6, 0x84, 0x95, 0x84, 0xb6, 0x84, 0x54, 0x7c, 0x6f, 0x5b, 0x2e, 0x53, 0x4f, 0x5b, 0x4f, 0x5b, 0x4f, 0x53, 0x4f, 0x53, 0xee, 0x4a, 0x32, 0x7c, 0x5d, 0xef, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x98, 0xad, 0xf3, 0x6b, 0x33, 0x74, 0x33, 0x74, 0x33, 0x74, 0x34, 0x74, 0x33, 0x74, 0xd1, 0x63, 0x4f, 0x5b, 0x2e, 0x53, 0x2f, 0x53, 0x2f, 0x53, 0x4e, 0x63, 0x9b, 0xde, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xbb, 0xce, 0x54, 0x7c, 0xb2, 0x63, 0x70, 0x5b, 0x31, 0x74, 0xff, 0xff, 0x00, 0x00, 0x9e, 0xf7, 0x74, 0x84, 0x32, 0x7c, 0x93, 0x84, 0xf4, 0x94, 0xd4, 0x94, 0x15, 0x9d, 0x56, 0x9d, 0xd5, 0x8c, 0x13, 0x74, 0x33, 0x7c, 0x15, 0x9d, 0xff, 0xff, 0xff, 0xff, 0x74, 0x84, 0x90, 0x63, 0x70, 0x5b, 0x32, 0x74, 0x1c, 0xdf, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7d, 0xe7, 0xd6, 0x8c, 0x75, 0x7c, 0xd6, 0x8c, 0x75, 0x7c, 0x90, 0x63, 0x2f, 0x5b, 0x2f, 0x53, 0x4f, 0x53, 0x4f, 0x53, 0x4f, 0x5b, 0x0e, 0x4b, 0xb0, 0x6b, 0x5a, 0xce, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xf6, 0x94, 0xf2, 0x6b, 0x33, 0x74, 0x33, 0x74, 0x33, 0x74, 0x34, 0x74, 0x13, 0x74, 0x90, 0x63, 0x4f, 0x53, 0x2e, 0x53, 0x2e, 0x53, 0x2e, 0x53, 0xb0, 0x73, 0x1c, 0xe7, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3d, 0xdf, 0x94, 0x84, 0xf2, 0x6b, 0xf2, 0x6b, 0x91, 0x63, 0x93, 0x84, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0xbe, 0xf7, 0x39, 0xc6, 0xff, 0xff, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0xff, 0xff, 0x19, 0xbe, 0xdc, 0xde, 0xff, 0xff, 0x00, 0x00, 0xff, 0xff, 0xd5, 0x94, 0x91, 0x63, 0x70, 0x5b, 0x90, 0x63, 0x15, 0x95, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7d, 0xe7, 0xf7, 0x94, 0x76, 0x7c, 0xd7, 0x8c, 0x95, 0x84, 0xf2, 0x6b, 0x4f, 0x5b, 0x2f, 0x53, 0x2f, 0x53, 0x4f, 0x53, 0x4f, 0x5b, 0x2e, 0x53, 0x4f, 0x5b, 0x73, 0x84, 0xdb, 0xd6, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xdc, 0xd6, 0xb5, 0x8c, 0xf3, 0x6b, 0x33, 0x74, 0x33, 0x74, 0x33, 0x74, 0x34, 0x74, 0x13, 0x74, 0x70, 0x5b, 0x2e, 0x53, 0x2e, 0x53, 0x2e, 0x53, 0x2e, 0x5b, 0x11, 0x7c, 0x7e, 0xf7, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7a, 0xc6, 0x13, 0x74, 0xf2, 0x6b, 0xf2, 0x73, 0xd2, 0x6b, 0x53, 0x7c, 0x5a, 0xc6, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xd8, 0xb5, 0x33, 0x7c, 0x90, 0x63, 0x90, 0x63, 0x90, 0x63, 0xf1, 0x6b, 0x7b, 0xce, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7f, 0xef, 0x17, 0x95, 0x75, 0x7c, 0xd7, 0x8c, 0x96, 0x84, 0x13, 0x74, 0x70, 0x5b, 0x2f, 0x53, 0x2f, 0x53, 0x4f, 0x53, 0x4f, 0x53, 0x2f, 0x53, 0x2e, 0x53, 0x4f, 0x5b, 0x4f, 0x5b, 0x4f, 0x5b, 0x4f, 0x5b, 0x6f, 0x5b, 0x6f, 0x63, 0x32, 0x7c, 0x7d, 0xef, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xf7, 0xff, 0xff, 0xbf, 0xef, 0xfc, 0xde, 0xb8, 0xad, 0xb5, 0x84, 0x33, 0x74, 0x13, 0x74, 0x33, 0x74, 0x33, 0x74, 0x33, 0x74, 0x34, 0x74, 0x13, 0x74, 0x90, 0x63, 0x6f, 0x5b, 0x70, 0x5b, 0x70, 0x5b, 0x6f, 0x63, 0x32, 0x84, 0x9b, 0xd6, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xbe, 0xf7, 0x98, 0xa5, 0xd2, 0x6b, 0xf2, 0x6b, 0xf2, 0x73, 0xf2, 0x6b, 0xd1, 0x6b, 0x32, 0x74, 0x5f, 0xef, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x53, 0x7c, 0x91, 0x63, 0x90, 0x63, 0xb1, 0x63, 0x90, 0x63, 0x70, 0x5b, 0xf5, 0x94, 0x9e, 0xf7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdc, 0xd6, 0x95, 0x84, 0x34, 0x74, 0x75, 0x7c, 0x54, 0x7c, 0xf2, 0x6b, 0x70, 0x5b, 0x2f, 0x53, 0x2f, 0x53, 0x2f, 0x53, 0x2f, 0x53, 0x2f, 0x53, 0x2e, 0x53, 0x0e, 0x4b, 0xed, 0x4a, 0x0e, 0x4b, 0x0d, 0x4b, 0x0e, 0x53, 0x0e, 0x4b, 0x4e, 0x5b, 0xf1, 0x6b, 0xff, 0xff,
0x00, 0x00, 0x5e, 0xef, 0x57, 0x9d, 0x16, 0x95, 0xd5, 0x8c, 0x74, 0x84, 0x54, 0x7c, 0x33, 0x74, 0x13, 0x74, 0x13, 0x74, 0x33, 0x74, 0x33, 0x74, 0x33, 0x74, 0x33, 0x74, 0x33, 0x74, 0x13, 0x74, 0xf2, 0x6b, 0xd2, 0x6b, 0xf2, 0x6b, 0xd2, 0x6b, 0xd2, 0x6b, 0x12, 0x7c, 0xb5, 0x8c, 0xf9, 0xb5, 0x9b, 0xce, 0x3a, 0xc6, 0x3a, 0xbe, 0x3a, 0xbe, 0x19, 0xbe, 0x39, 0xbe, 0x19, 0xbe, 0x19, 0xbe, 0x19, 0xbe, 0x5a, 0xc6, 0xb8, 0xad, 0xd5, 0x8c, 0x33, 0x7c, 0xf2, 0x6b, 0xf2, 0x6b, 0xf2, 0x6b, 0xf3, 0x73, 0x70, 0x5b, 0x90, 0x63, 0x39, 0xbe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xbe, 0xf7, 0x12, 0x74, 0x70, 0x5b, 0x90, 0x63, 0xb1, 0x63, 0x90, 0x63, 0x70, 0x5b, 0xd1, 0x6b, 0x73, 0x84, 0xf5, 0x94, 0xf5, 0x94, 0xd5, 0x94, 0xd5, 0x8c, 0xd5, 0x8c, 0xd4, 0x8c, 0xd4, 0x8c, 0xd4, 0x8c, 0xd4, 0x8c, 0xd4, 0x8c, 0xd4, 0x8c, 0xd4, 0x8c, 0xd5, 0x94, 0x73, 0x84, 0xb1, 0x63, 0xb1, 0x63, 0xb1, 0x63, 0xb1, 0x63, 0x90, 0x63, 0x4f, 0x5b, 0x4f, 0x53, 0x4f, 0x53, 0x2f, 0x53, 0x2f, 0x53, 0x2e, 0x53, 0x2e, 0x53, 0x2e, 0x53, 0x2e, 0x53, 0x2e, 0x53, 0x2e, 0x53, 0x0e, 0x53, 0xed, 0x4a, 0xcd, 0x4a, 0x0e, 0x53, 0xff, 0xff,
0xff, 0xff, 0x13, 0x74, 0xf2, 0x6b, 0x13, 0x74, 0x13, 0x74, 0x13, 0x74, 0xf3, 0x6b, 0x13, 0x74, 0x13, 0x74, 0x13, 0x74, 0x13, 0x74, 0x13, 0x74, 0x13, 0x74, 0x13, 0x74, 0x13, 0x74, 0x13, 0x74, 0x33, 0x74, 0x33, 0x74, 0x33, 0x74, 0x33, 0x74, 0x33, 0x74, 0x13, 0x74, 0x13, 0x74, 0x13, 0x74, 0x13, 0x74, 0x13, 0x74, 0x13, 0x74, 0x13, 0x74, 0x13, 0x74, 0x13, 0x74, 0xf2, 0x6b, 0xf2, 0x6b, 0xf2, 0x6b, 0xf2, 0x6b, 0xf2, 0x6b, 0xf2, 0x6b, 0xf2, 0x6b, 0xf2, 0x6b, 0xf2, 0x6b, 0xf2, 0x6b, 0xf2, 0x6b, 0x70, 0x5b, 0x90, 0x63, 0x3c, 0xe7, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x95, 0x84, 0xd1, 0x63, 0x90, 0x63, 0x90, 0x63, 0x90, 0x63, 0x90, 0x63, 0x70, 0x5b, 0x70, 0x5b, 0x90, 0x5b, 0x70, 0x5b, 0x70, 0x5b, 0x70, 0x5b, 0x70, 0x5b, 0x70, 0x5b, 0x70, 0x5b, 0x6f, 0x5b, 0x4f, 0x5b, 0x4f, 0x5b, 0x4f, 0x5b, 0x4f, 0x5b, 0x4f, 0x5b, 0x2f, 0x53, 0x2f, 0x53, 0x4f, 0x5b, 0x2e, 0x53, 0x2e, 0x53, 0x2f, 0x53, 0x2f, 0x53, 0x2f, 0x53, 0x4f, 0x53, 0x2f, 0x53, 0x2f, 0x53, 0x2e, 0x53, 0x2e, 0x53, 0x2e, 0x53, 0x2e, 0x53, 0x2e, 0x53, 0x2e, 0x53, 0x2e, 0x53, 0x0e, 0x53, 0xcd, 0x42, 0x4e, 0x53, 0xfc, 0xe6,
0x1c, 0xdf, 0x13, 0x74, 0xd2, 0x63, 0xf2, 0x6b, 0x13, 0x74, 0x13, 0x74, 0x13, 0x74, 0x13, 0x74, 0x13, 0x74, 0x13, 0x74, 0x13, 0x74, 0x13, 0x74, 0x13, 0x74, 0x13, 0x74, 0x13, 0x74, 0x13, 0x74, 0x33, 0x74, 0x33, 0x74, 0x33, 0x74, 0x33, 0x74, 0x13, 0x74, 0x13, 0x74, 0x13, 0x6c, 0xf2, 0x6b, 0xf2, 0x6b, 0xf2, 0x6b, 0xf2, 0x6b, 0xf2, 0x6b, 0xf2, 0x6b, 0xf2, 0x6b, 0xf2, 0x6b, 0xf2, 0x6b, 0xf2, 0x6b, 0xd2, 0x6b, 0xd2, 0x6b, 0xd2, 0x6b, 0xf2, 0x6b, 0xf2, 0x6b, 0xf2, 0x6b, 0xf2, 0x6b, 0xf2, 0x6b, 0x70, 0x5b, 0xb0, 0x6b, 0x5d, 0xef, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x17, 0x95, 0xf2, 0x6b, 0x90, 0x5b, 0x90, 0x63, 0x90, 0x63, 0x90, 0x63, 0x90, 0x63, 0x70, 0x5b, 0x70, 0x5b, 0x4f, 0x5b, 0x4f, 0x5b, 0x4f, 0x5b, 0x4f, 0x5b, 0x4f, 0x5b, 0x4f, 0x5b, 0x4f, 0x5b, 0x4f, 0x53, 0x4f, 0x53, 0x2f, 0x53, 0x2f, 0x53, 0x2f, 0x53, 0x2f, 0x53, 0x4f, 0x5b, 0x4f, 0x5b, 0x2f, 0x53, 0x2f, 0x53, 0x2f, 0x53, 0x4f, 0x53, 0x4f, 0x53, 0x4f, 0x53, 0x2f, 0x53, 0x2e, 0x53, 0x2e, 0x53, 0x2e, 0x53, 0x2e, 0x53, 0x2e, 0x53, 0x2e, 0x53, 0x0e, 0x53, 0x0e, 0x53, 0x0e, 0x53, 0xcd, 0x42, 0x2e, 0x53, 0x97, 0xad,
0xfc, 0xde, 0x33, 0x74, 0xd2, 0x6b, 0x13, 0x74, 0x13, 0x74, 0x13, 0x74, 0x13, 0x74, 0x13, 0x74, 0x13, 0x74, 0x13, 0x74, 0x13, 0x74, 0x13, 0x74, 0x13, 0x74, 0x13, 0x74, 0x13, 0x74, 0x13, 0x74, 0x13, 0x74, 0x13, 0x74, 0x13, 0x74, 0x13, 0x74, 0x13, 0x74, 0x13, 0x74, 0x13, 0x74, 0x13, 0x74, 0x13, 0x74, 0x13, 0x74, 0x13, 0x74, 0x13, 0x74, 0x13, 0x74, 0x13, 0x74, 0x13, 0x74, 0x13, 0x74, 0xf2, 0x73, 0xf2, 0x73, 0xf2, 0x6b, 0xf2, 0x6b, 0xf2, 0x6b, 0xf2, 0x6b, 0xf2, 0x6b, 0xf2, 0x6b, 0xd2, 0x6b, 0x70, 0x5b, 0xd1, 0x73, 0x7e, 0xf7, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x78, 0xa5, 0x13, 0x74, 0x70, 0x5b, 0x90, 0x63, 0x90, 0x63, 0x90, 0x63, 0x90, 0x63, 0x90, 0x63, 0x90, 0x63, 0x70, 0x5b, 0x70, 0x5b, 0x70, 0x5b, 0x70, 0x5b, 0x70, 0x5b, 0x70, 0x5b, 0x70, 0x5b, 0x70, 0x5b, 0x6f, 0x5b, 0x6f, 0x5b, 0x4f, 0x5b, 0x4f, 0x5b, 0x4f, 0x5b, 0x4f, 0x5b, 0x4f, 0x5b, 0x4f, 0x5b, 0x4f, 0x5b, 0x4f, 0x5b, 0x4f, 0x53, 0x4f, 0x53, 0x2f, 0x53, 0x2e, 0x53, 0x2e, 0x53, 0x2e, 0x53, 0x2e, 0x53, 0x2e, 0x53, 0x2e, 0x53, 0x0e, 0x53, 0x0e, 0x53, 0x0e, 0x53, 0x0e, 0x53, 0xed, 0x4a, 0x0e, 0x53, 0x52, 0x84,
0x5e, 0xef, 0x33, 0x74, 0xd2, 0x6b, 0x13, 0x74, 0x13, 0x74, 0x13, 0x74, 0x13, 0x74, 0x13, 0x74, 0x13, 0x74, 0x13, 0x74, 0x13, 0x74, 0x13, 0x74, 0x13, 0x74, 0x13, 0x74, 0x13, 0x74, 0x13, 0x74, 0x13, 0x74, 0x13, 0x74, 0x13, 0x74, 0x13, 0x74, 0x13, 0x74, 0x13, 0x74, 0x13, 0x74, 0x13, 0x74, 0x13, 0x74, 0x13, 0x74, 0x13, 0x74, 0x13, 0x74, 0x12, 0x74, 0x12, 0x74, 0xf2, 0x73, 0xf2, 0x73, 0xf2, 0x6b, 0xf2, 0x6b, 0xf2, 0x6b, 0xf2, 0x6b, 0xf2, 0x6b, 0xf2, 0x6b, 0xf2, 0x6b, 0xf2, 0x6b, 0xd2, 0x6b, 0x90, 0x63, 0xd1, 0x73, 0x9e, 0xf7, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x38, 0x9d, 0xf2, 0x73, 0x70, 0x5b, 0x90, 0x63, 0x90, 0x63, 0x90, 0x63, 0x90, 0x63, 0x90, 0x63, 0x90, 0x63, 0x70, 0x5b, 0x70, 0x5b, 0x70, 0x5b, 0x70, 0x5b, 0x70, 0x5b, 0x70, 0x5b, 0x70, 0x5b, 0x70, 0x5b, 0x6f, 0x5b, 0x6f, 0x5b, 0x4f, 0x5b, 0x4f, 0x5b, 0x4f, 0x5b, 0x4f, 0x5b, 0x4f, 0x5b, 0x2f, 0x5b, 0x2f, 0x53, 0x2f, 0x53, 0x4f, 0x53, 0x4f, 0x53, 0x2f, 0x53, 0x2e, 0x53, 0x2e, 0x53, 0x2e, 0x53, 0x2e, 0x53, 0x2e, 0x53, 0x2e, 0x53, 0x0e, 0x53, 0x0e, 0x53, 0x0e, 0x53, 0x0e, 0x53, 0xcd, 0x42, 0x0d, 0x4b, 0x32, 0x84,
0x5d, 0xef, 0x13, 0x74, 0xd2, 0x6b, 0x13, 0x74, 0x13, 0x74, 0x13, 0x74, 0x13, 0x74, 0x13, 0x74, 0x13, 0x74, 0x13, 0x74, 0x13, 0x74, 0x13, 0x74, 0x13, 0x74, 0x13, 0x74, 0x13, 0x74, 0x13, 0x74, 0x13, 0x74, 0x13, 0x74, 0x13, 0x74, 0x13, 0x74, 0x13, 0x74, 0x13, 0x74, 0x13, 0x74, 0xf2, 0x6b, 0xf2, 0x6b, 0xd2, 0x6b, 0xf2, 0x6b, 0xd2, 0x6b, 0xd2, 0x6b, 0xd2, 0x6b, 0xd2, 0x6b, 0xd2, 0x6b, 0xd2, 0x6b, 0xd2, 0x63, 0xd2, 0x63, 0xd2, 0x6b, 0xd2, 0x6b, 0xf2, 0x6b, 0xd2, 0x6b, 0xd2, 0x6b, 0xf2, 0x6b, 0x90, 0x63, 0xf1, 0x73, 0x9e, 0xf7, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xd6, 0x8c, 0xd2, 0x6b, 0x70, 0x5b, 0x90, 0x63, 0x90, 0x63, 0x90, 0x63, 0x90, 0x63, 0x90, 0x63, 0x70, 0x5b, 0x70, 0x5b, 0x4f, 0x5b, 0x4f, 0x5b, 0x4f, 0x53, 0x4f, 0x53, 0x4f, 0x53, 0x4f, 0x53, 0x2f, 0x53, 0x2f, 0x53, 0x2f, 0x53, 0x2e, 0x53, 0x2e, 0x53, 0x2f, 0x53, 0x4f, 0x5b, 0x2f, 0x5b, 0x2f, 0x53, 0x2f, 0x53, 0x4f, 0x53, 0x4f, 0x53, 0x4f, 0x53, 0x2e, 0x53, 0x2e, 0x53, 0x2e, 0x53, 0x2e, 0x53, 0x2e, 0x53, 0x2e, 0x53, 0x2e, 0x53, 0x0e, 0x4b, 0xed, 0x4a, 0xed, 0x4a, 0xed, 0x4a, 0xcd, 0x4a, 0x4e, 0x5b, 0xb7, 0xb5,
0x9e, 0xef, 0xf2, 0x73, 0xb1, 0x63, 0xf2, 0x6b, 0xf2, 0x6b, 0xf2, 0x6b, 0xf2, 0x6b, 0xf3, 0x73, 0x13, 0x74, 0x13, 0x74, 0x13, 0x74, 0x13, 0x74, 0x13, 0x74, 0x13, 0x74, 0x13, 0x74, 0x13, 0x74, 0x13, 0x74, 0x13, 0x74, 0x13, 0x74, 0x13, 0x74, 0x13, 0x74, 0x13, 0x6c, 0xf2, 0x6b, 0xf2, 0x6b, 0x12, 0x74, 0x12, 0x74, 0x12, 0x74, 0x12, 0x74, 0xf2, 0x73, 0xf2, 0x73, 0xf2, 0x6b, 0xf2, 0x6b, 0xf2, 0x6b, 0xf2, 0x6b, 0xf2, 0x6b, 0xf2, 0x6b, 0xd2, 0x6b, 0xd2, 0x6b, 0xd2, 0x6b, 0xd2, 0x6b, 0xd2, 0x6b, 0x91, 0x63, 0x12, 0x74, 0x3d, 0xef, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x74, 0x7c, 0x91, 0x63, 0x90, 0x63, 0x90, 0x63, 0x90, 0x63, 0x90, 0x63, 0x90, 0x63, 0x70, 0x5b, 0x70, 0x5b, 0x90, 0x63, 0x90, 0x63, 0x70, 0x63, 0x70, 0x5b, 0x70, 0x5b, 0x70, 0x5b, 0x70, 0x5b, 0x70, 0x5b, 0x6f, 0x5b, 0x6f, 0x5b, 0x4f, 0x5b, 0x4f, 0x5b, 0x4f, 0x5b, 0x4f, 0x5b, 0x4f, 0x5b, 0x2f, 0x53, 0x4f, 0x53, 0x4f, 0x53, 0x2f, 0x53, 0x2e, 0x53, 0x2e, 0x53, 0x2e, 0x53, 0x2e, 0x53, 0x2e, 0x53, 0x2e, 0x53, 0x2e, 0x53, 0x0e, 0x4b, 0x0e, 0x53, 0x2e, 0x53, 0x2e, 0x53, 0x2e, 0x5b, 0x8f, 0x6b, 0x52, 0x84, 0xff, 0xff,
0xff, 0xff, 0x74, 0x7c, 0xf2, 0x6b, 0xd2, 0x6b, 0xd2, 0x6b, 0xf2, 0x6b, 0xd2, 0x6b, 0xd2, 0x6b, 0xf2, 0x6b, 0xf2, 0x73, 0xf2, 0x73, 0xf2, 0x73, 0x12, 0x74, 0x13, 0x74, 0x13, 0x74, 0xf2, 0x6b, 0xb0, 0x63, 0x90, 0x63, 0x90, 0x63, 0x90, 0x63, 0x70, 0x5b, 0x4f, 0x63, 0xb1, 0x73, 0x73, 0x8c, 0xf8, 0xb5, 0xbb, 0xd6, 0xbb, 0xd6, 0xbb, 0xd6, 0x9b, 0xce, 0x9b, 0xce, 0xbb, 0xd6, 0x9b, 0xce, 0x9b, 0xce, 0xdc, 0xd6, 0xf9, 0xbd, 0xb5, 0x8c, 0x12, 0x74, 0xd1, 0x6b, 0xd2, 0x6b, 0xd2, 0x6b, 0xd2, 0x6b, 0x91, 0x63, 0x12, 0x74, 0x7a, 0xce, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xdc, 0xd6, 0x12, 0x74, 0x50, 0x5b, 0x90, 0x63, 0x90, 0x63, 0x90, 0x63, 0x90, 0x5b, 0x4f, 0x5b, 0x4f, 0x63, 0xb0, 0x73, 0x32, 0x84, 0xb4, 0x94, 0x97, 0xad, 0xf8, 0xb5, 0xd8, 0xb5, 0xd8, 0xb5, 0xd8, 0xb5, 0xd8, 0xb5, 0xd8, 0xb5, 0xd8, 0xb5, 0xb7, 0xb5, 0x15, 0x9d, 0x32, 0x7c, 0x90, 0x63, 0x70, 0x5b, 0x90, 0x63, 0x70, 0x5b, 0x6f, 0x5b, 0x4f, 0x53, 0x2e, 0x53, 0x2e, 0x53, 0x2e, 0x53, 0x2e, 0x53, 0x2e, 0x53, 0x0e, 0x53, 0xcd, 0x4a, 0xed, 0x5a, 0xaf, 0x73, 0x73, 0x8c, 0x18, 0xbe, 0x5d, 0xef, 0x7d, 0xef, 0xff, 0xff, 0x00, 0x00,
0x00, 0x00, 0xbe, 0xf7, 0xd8, 0xb5, 0xd5, 0x8c, 0x94, 0x8c, 0x94, 0x84, 0x74, 0x84, 0x53, 0x7c, 0xf2, 0x73, 0xf2, 0x6b, 0xf2, 0x73, 0xf2, 0x6b, 0xf2, 0x6b, 0xf2, 0x73, 0x13, 0x74, 0xd1, 0x6b, 0x4f, 0x5b, 0x0e, 0x53, 0x2e, 0x53, 0x0e, 0x4b, 0xed, 0x52, 0x6f, 0x6b, 0x76, 0xb5, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x97, 0xad, 0xb1, 0x63, 0xd1, 0x6b, 0xd2, 0x6b, 0xd2, 0x6b, 0xb1, 0x63, 0x32, 0x7c, 0xfc, 0xde, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x33, 0x7c, 0x90, 0x63, 0x70, 0x5b, 0x90, 0x63, 0x90, 0x63, 0x90, 0x5b, 0x6f, 0x63, 0xf0, 0x83, 0x9a, 0xd6, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7a, 0xce, 0x12, 0x74, 0x91, 0x63, 0xd1, 0x6b, 0xb1, 0x63, 0x90, 0x63, 0x4f, 0x5b, 0x2e, 0x53, 0x2e, 0x53, 0x2e, 0x53, 0x2e, 0x53, 0x2e, 0x53, 0x0e, 0x53, 0xac, 0x52, 0xd0, 0x83, 0x7a, 0xd6, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xbf, 0xff, 0xf9, 0xbd, 0x74, 0x84, 0x12, 0x74, 0xf2, 0x6b, 0xf2, 0x6b, 0xf2, 0x6b, 0xf2, 0x6b, 0x12, 0x74, 0xd2, 0x6b, 0x4f, 0x5b, 0x0e, 0x53, 0x0e, 0x4b, 0xed, 0x4a, 0xed, 0x4a, 0x73, 0x8c, 0x9e, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x9b, 0xce, 0x12, 0x74, 0xb1, 0x63, 0xd2, 0x6b, 0xb1, 0x63, 0xd1, 0x73, 0xf4, 0x9c, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfc, 0xde, 0x12, 0x74, 0x4f, 0x5b, 0x70, 0x5b, 0x70, 0x5b, 0x90, 0x63, 0x11, 0x7c, 0x9a, 0xd6, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5d, 0xef, 0x53, 0x7c, 0xb1, 0x63, 0xf2, 0x6b, 0xd1, 0x6b, 0x90, 0x63, 0x4f, 0x5b, 0x2e, 0x53, 0x2e, 0x53, 0x2e, 0x53, 0x2e, 0x53, 0x2e, 0x53, 0xed, 0x52, 0x6e, 0x6b, 0x18, 0xce, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xdb, 0xd6, 0x74, 0x7c, 0xb1, 0x63, 0xf2, 0x6b, 0xf2, 0x6b, 0xf2, 0x6b, 0xf2, 0x6b, 0xd2, 0x6b, 0x70, 0x5b, 0x2e, 0x53, 0x0e, 0x4b, 0xed, 0x4a, 0x0d, 0x4b, 0x72, 0x8c, 0x9e, 0xf7, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3d, 0xe7, 0xb4, 0x8c, 0xb1, 0x63, 0xb1, 0x63, 0x70, 0x5b, 0x12, 0x74, 0x7e, 0xf7, 0x00, 0x00, 0xff, 0xff, 0x3a, 0xc6, 0xf6, 0x94, 0xdc, 0xd6, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x9f, 0xf7, 0xd9, 0xb5, 0x5e, 0xef, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xb4, 0x8c, 0x70, 0x5b, 0x4f, 0x5b, 0x4f, 0x5b, 0xd1, 0x73, 0x5a, 0xce, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1d, 0xe7, 0x33, 0x74, 0xb1, 0x63, 0xf2, 0x6b, 0xd1, 0x6b, 0x70, 0x5b, 0x2f, 0x53, 0x2e, 0x53, 0x2e, 0x53, 0x2e, 0x53, 0x2e, 0x53, 0x0e, 0x4b, 0xed, 0x52, 0x11, 0x84, 0xfc, 0xee, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x57, 0xa5, 0xb1, 0x63, 0xf2, 0x6b, 0xf2, 0x6b, 0xf2, 0x6b, 0xf2, 0x6b, 0xd2, 0x6b, 0x90, 0x63, 0x2e, 0x53, 0x0d, 0x4b, 0xed, 0x4a, 0x0d, 0x4b, 0xf1, 0x73, 0x1c, 0xe7, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xdc, 0xd6, 0x33, 0x74, 0x91, 0x63, 0x70, 0x5b, 0x12, 0x74, 0xbb, 0xd6, 0xff, 0xff, 0x3d, 0xe7, 0x33, 0x7c, 0xf2, 0x6b, 0x74, 0x84, 0x36, 0x9d, 0x37, 0x9d, 0x57, 0x9d, 0x77, 0xa5, 0xb5, 0x8c, 0x13, 0x74, 0x53, 0x7c, 0x1c, 0xe7, 0xff, 0xff, 0xff, 0xff, 0xf6, 0x94, 0xd2, 0x6b, 0x2f, 0x53, 0xd1, 0x6b, 0x39, 0xc6, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5a, 0xc6, 0x13, 0x74, 0xd2, 0x6b, 0xf2, 0x73, 0xd1, 0x6b, 0x4f, 0x5b, 0x2e, 0x53, 0x2e, 0x53, 0x2e, 0x53, 0x2e, 0x53, 0x2e, 0x53, 0x0e, 0x4b, 0x0d, 0x53, 0x93, 0x94, 0xbe, 0xf7, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf9, 0xbd, 0xd2, 0x6b, 0xf2, 0x6b, 0xf2, 0x6b, 0xf2, 0x6b, 0xf2, 0x6b, 0xd2, 0x6b, 0xb1, 0x63, 0x2f, 0x53, 0x0d, 0x4b, 0x0d, 0x4b, 0x0d, 0x4b, 0x8f, 0x63, 0xfc, 0xe6, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x19, 0xbe, 0xb1, 0x63, 0x70, 0x5b, 0xd1, 0x6b, 0x74, 0x84, 0xd5, 0x8c, 0x33, 0x7c, 0x70, 0x5b, 0x90, 0x5b, 0xb1, 0x63, 0xd2, 0x6b, 0xf2, 0x6b, 0xf2, 0x6b, 0xf2, 0x6b, 0xb1, 0x63, 0x50, 0x5b, 0x4f, 0x5b, 0x12, 0x74, 0xf5, 0x94, 0xf6, 0x94, 0x74, 0x84, 0xb1, 0x63, 0x70, 0x5b, 0x97, 0xad, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5e, 0xef, 0xd5, 0x8c, 0xf2, 0x6b, 0xf2, 0x6b, 0xf3, 0x73, 0xb1, 0x63, 0x4f, 0x53, 0x2e, 0x53, 0x2e, 0x53, 0x2e, 0x53, 0x2e, 0x53, 0x2e, 0x53, 0xed, 0x4a, 0x4f, 0x63, 0xf8, 0xc5, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x19, 0xbe, 0x13, 0x74, 0xd2, 0x6b, 0xd2, 0x6b, 0xd2, 0x6b, 0xd2, 0x6b, 0xf2, 0x6b, 0xd1, 0x6b, 0x4f, 0x53, 0x0d, 0x4b, 0x0e, 0x4b, 0x0d, 0x4b, 0x2e, 0x53, 0xdb, 0xd6, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x97, 0xa5, 0xb1, 0x63, 0xb1, 0x63, 0xd2, 0x6b, 0xd2, 0x6b, 0xb1, 0x63, 0x90, 0x63, 0xb1, 0x63, 0x90, 0x63, 0x90, 0x63, 0x90, 0x63, 0x90, 0x63, 0x70, 0x5b, 0x90, 0x5b, 0x90, 0x63, 0x70, 0x5b, 0x70, 0x5b, 0xd1, 0x6b, 0xd2, 0x6b, 0xb1, 0x63, 0xb1, 0x6b, 0xb7, 0xad, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3d, 0xdf, 0x33, 0x74, 0xf2, 0x6b, 0x13, 0x74, 0xf2, 0x6b, 0xb1, 0x63, 0x4f, 0x53, 0x2e, 0x53, 0x2e, 0x53, 0x2e, 0x53, 0x2e, 0x53, 0x2e, 0x53, 0xed, 0x4a, 0xb0, 0x6b, 0xfb, 0xde, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3d, 0xe7, 0xb5, 0x8c, 0xb1, 0x63, 0xd1, 0x6b, 0xf2, 0x6b, 0xd2, 0x6b, 0xf2, 0x6b, 0xf2, 0x6b, 0x6f, 0x5b, 0x0e, 0x53, 0x0e, 0x4b, 0xed, 0x4a, 0xed, 0x4a, 0x35, 0x9d, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x16, 0x9d, 0xd1, 0x6b, 0x70, 0x5b, 0x90, 0x63, 0xb0, 0x63, 0xb1, 0x63, 0xb1, 0x63, 0xb1, 0x63, 0xb0, 0x63, 0x90, 0x63, 0x90, 0x63, 0x90, 0x63, 0x90, 0x63, 0x90, 0x63, 0x90, 0x63, 0x70, 0x5b, 0x70, 0x5b, 0x4f, 0x53, 0xb0, 0x63, 0x16, 0x9d, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x9b, 0xce, 0xf2, 0x6b, 0x13, 0x74, 0x13, 0x74, 0xf2, 0x6b, 0x90, 0x5b, 0x2e, 0x53, 0x2e, 0x53, 0x2e, 0x53, 0x2e, 0x53, 0x2e, 0x53, 0x0e, 0x53, 0xed, 0x4a, 0x6f, 0x5b, 0x97, 0xad, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7e, 0xef, 0xb4, 0x84, 0xb1, 0x63, 0xd1, 0x6b, 0xd2, 0x6b, 0xd2, 0x6b, 0xf2, 0x6b, 0xd2, 0x6b, 0x90, 0x63, 0x2e, 0x53, 0x0e, 0x4b, 0x0d, 0x4b, 0xcd, 0x4a, 0xf1, 0x73, 0x1c, 0xe7, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xdf, 0xf7, 0xd8, 0xb5, 0x32, 0x74, 0x90, 0x63, 0x2f, 0x53, 0x70, 0x5b, 0xb1, 0x63, 0xb1, 0x63, 0x90, 0x63, 0x90, 0x63, 0x90, 0x63, 0x90, 0x63, 0x90, 0x63, 0x90, 0x63, 0x90, 0x63, 0x70, 0x5b, 0x50, 0x5b, 0x90, 0x63, 0x97, 0xad, 0xdf, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x16, 0x95, 0xf3, 0x6b, 0x13, 0x74, 0x33, 0x74, 0xd1, 0x6b, 0x4f, 0x5b, 0x2e, 0x53, 0x2e, 0x53, 0x2e, 0x53, 0x2e, 0x53, 0x2e, 0x53, 0x0e, 0x53, 0x0e, 0x53, 0x0e, 0x4b, 0xd0, 0x6b, 0x76, 0xa5, 0x3f, 0xe7, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x7e, 0xef, 0x36, 0x9d, 0xf2, 0x6b, 0xd1, 0x6b, 0xd1, 0x6b, 0xd2, 0x6b, 0xd1, 0x6b, 0xd2, 0x6b, 0xd2, 0x6b, 0xb1, 0x63, 0x4f, 0x5b, 0x0d, 0x4b, 0x0d, 0x4b, 0xed, 0x4a, 0x2e, 0x53, 0xd4, 0x94, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1d, 0xe7, 0x36, 0x9d, 0x33, 0x7c, 0xf2, 0x73, 0xb1, 0x63, 0x90, 0x63, 0x90, 0x63, 0x90, 0x63, 0x90, 0x63, 0x90, 0x63, 0x90, 0x63, 0x70, 0x5b, 0x70, 0x5b, 0x70, 0x5b, 0xf1, 0x73, 0x59, 0xc6, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x9b, 0xd6, 0x74, 0x7c, 0x13, 0x74, 0x33, 0x74, 0x33, 0x74, 0xb1, 0x63, 0x2e, 0x53, 0x2e, 0x53, 0x2e, 0x53, 0x2e, 0x53, 0x2e, 0x53, 0x0e, 0x53, 0x0e, 0x53, 0x0e, 0x53, 0x0e, 0x53, 0x0d, 0x4b, 0xed, 0x4a, 0x8f, 0x63, 0x76, 0xa5, 0x7d, 0xef, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x77, 0xa5, 0x53, 0x7c, 0xd1, 0x6b, 0xd1, 0x6b, 0xd1, 0x6b, 0xd1, 0x6b, 0xd1, 0x6b, 0xd1, 0x6b, 0xd1, 0x6b, 0xd2, 0x6b, 0xd2, 0x6b, 0x70, 0x5b, 0x0e, 0x53, 0x0e, 0x4b, 0x0e, 0x53, 0xed, 0x4a, 0xf1, 0x73, 0xbe, 0xf7, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x5d, 0xe7, 0xf9, 0xb5, 0xd1, 0x6b, 0x70, 0x5b, 0x90, 0x63, 0x90, 0x63, 0x90, 0x63, 0x90, 0x63, 0x70, 0x5b, 0x4f, 0x5b, 0x4f, 0x63, 0xf1, 0x7b, 0x5a, 0xce, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xf6, 0x94, 0x13, 0x74, 0x33, 0x74, 0x33, 0x74, 0xf2, 0x6b, 0x70, 0x5b, 0x0e, 0x53, 0x2e, 0x53, 0x2e, 0x53, 0x0e, 0x53, 0x0e, 0x53, 0x0e, 0x53, 0x0e, 0x53, 0x0e, 0x53, 0x0e, 0x53, 0x0d, 0x4b, 0xed, 0x4a, 0xed, 0x4a, 0x4f, 0x5b, 0xf1, 0x6b, 0x5f, 0xef, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x7a, 0xc6, 0x94, 0x84, 0xf2, 0x6b, 0x90, 0x5b, 0xb1, 0x63, 0xd1, 0x6b, 0xd1, 0x6b, 0xd1, 0x6b, 0xd1, 0x6b, 0xd1, 0x6b, 0xd1, 0x6b, 0xd1, 0x6b, 0xd2, 0x6b, 0x91, 0x63, 0x4f, 0x53, 0x0e, 0x53, 0x0e, 0x53, 0xed, 0x4a, 0x6f, 0x5b, 0xf8, 0xb5, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x73, 0x84, 0x90, 0x63, 0x70, 0x5b, 0x90, 0x63, 0x90, 0x63, 0x90, 0x63, 0x4f, 0x5b, 0x2e, 0x5b, 0xaf, 0x73, 0x7a, 0xd6, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1a, 0xbe, 0x74, 0x7c, 0x13, 0x74, 0x54, 0x7c, 0x33, 0x74, 0xb1, 0x63, 0x4f, 0x53, 0x2e, 0x53, 0x2e, 0x53, 0x2e, 0x53, 0x2e, 0x53, 0x0e, 0x53, 0x0e, 0x53, 0x0e, 0x53, 0x2e, 0x53, 0x0e, 0x53, 0x0e, 0x53, 0x0e, 0x53, 0x0e, 0x4b, 0xcd, 0x42, 0xcd, 0x42, 0xb7, 0xad, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x77, 0xad, 0xf2, 0x6b, 0x70, 0x5b, 0xb1, 0x63, 0xd1, 0x6b, 0xd1, 0x6b, 0xb1, 0x63, 0xb1, 0x63, 0xb1, 0x63, 0xb1, 0x63, 0xb1, 0x63, 0xb1, 0x63, 0xd1, 0x6b, 0xd1, 0x6b, 0xb1, 0x63, 0x70, 0x5b, 0x2e, 0x53, 0x0e, 0x53, 0x0e, 0x53, 0x2e, 0x53, 0x11, 0x74, 0xbe, 0xf7, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0xff, 0xff, 0xb4, 0x8c, 0x90, 0x63, 0x70, 0x5b, 0x90, 0x63, 0x90, 0x63, 0x90, 0x5b, 0x2f, 0x5b, 0x4f, 0x6b, 0xf5, 0xa4, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xb5, 0x84, 0x34, 0x74, 0x54, 0x7c, 0x54, 0x7c, 0x13, 0x74, 0x70, 0x5b, 0x0e, 0x53, 0x2e, 0x53, 0x2e, 0x53, 0x2e, 0x53, 0x2e, 0x53, 0x0e, 0x53, 0x0e, 0x53, 0x0e, 0x53, 0x0e, 0x53, 0x0e, 0x53, 0x0e, 0x4b, 0x0e, 0x4b, 0x0e, 0x53, 0xed, 0x4a, 0xed, 0x4a, 0xb3, 0x8c, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0x7e, 0xf7, 0xf2, 0x6b, 0x90, 0x63, 0xb1, 0x63, 0xb1, 0x63, 0xb1, 0x63, 0xb1, 0x63, 0xb1, 0x63, 0xb1, 0x63, 0xb1, 0x63, 0xb1, 0x63, 0xb1, 0x63, 0xb1, 0x63, 0xb1, 0x63, 0xb1, 0x63, 0xd1, 0x6b, 0xb0, 0x63, 0x4f, 0x5b, 0x2e, 0x53, 0x2e, 0x53, 0x0e, 0x53, 0x2f, 0x53, 0x77, 0xad, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0xff, 0xff, 0xb4, 0x8c, 0x90, 0x63, 0x70, 0x5b, 0x90, 0x5b, 0x90, 0x5b, 0x70, 0x5b, 0x4f, 0x5b, 0x90, 0x6b, 0x3d, 0xef, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x19, 0xbe, 0x54, 0x7c, 0x34, 0x74, 0x74, 0x7c, 0x34, 0x7c, 0xd1, 0x6b, 0x4f, 0x53, 0x0e, 0x53, 0x2e, 0x53, 0x2e, 0x53, 0x2e, 0x53, 0x0e, 0x53, 0x0e, 0x53, 0x0e, 0x53, 0x0e, 0x53, 0x0e, 0x53, 0x0e, 0x4b, 0x0e, 0x4b, 0x0e, 0x4b, 0x0e, 0x4b, 0xed, 0x4a, 0x0e, 0x53, 0x15, 0x9d, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xbf, 0xff, 0x33, 0x7c, 0xb1, 0x63, 0xb1, 0x63, 0xb1, 0x63, 0xb1, 0x63, 0xb1, 0x63, 0xb1, 0x63, 0xb1, 0x63, 0xb1, 0x63, 0xb1, 0x63, 0xb1, 0x63, 0xb1, 0x63, 0xb1, 0x63, 0xb1, 0x63, 0xb1, 0x63, 0xb1, 0x63, 0x90, 0x5b, 0x4f, 0x53, 0x2e, 0x53, 0x2e, 0x53, 0x2e, 0x53, 0xb0, 0x63, 0x97, 0xad, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0xff, 0xff, 0x94, 0x84, 0x90, 0x63, 0x70, 0x5b, 0x70, 0x5b, 0x70, 0x5b, 0x70, 0x5b, 0x4f, 0x5b, 0xb0, 0x6b, 0xff, 0xff, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x9b, 0xce, 0x95, 0x84, 0x54, 0x7c, 0x74, 0x7c, 0x75, 0x7c, 0x13, 0x74, 0x6f, 0x5b, 0x2e, 0x53, 0x2e, 0x53, 0x2e, 0x53, 0x0e, 0x53, 0x0e, 0x53, 0x0e, 0x53, 0x0e, 0x53, 0x0e, 0x53, 0x0e, 0x4b, 0x0d, 0x4b, 0x0e, 0x4b, 0x0e, 0x4b, 0x0e, 0x53, 0x0e, 0x4b, 0xed, 0x4a, 0x4e, 0x5b, 0x39, 0xc6, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x19, 0xbe, 0xd1, 0x6b, 0x70, 0x5b, 0xb1, 0x63, 0xb1, 0x63, 0xb1, 0x63, 0xb1, 0x63, 0xb1, 0x63, 0xb1, 0x63, 0xb1, 0x63, 0xb1, 0x63, 0xb1, 0x63, 0xb1, 0x63, 0xb1, 0x63, 0xb1, 0x63, 0xb1, 0x63, 0xb1, 0x63, 0x6f, 0x5b, 0x2f, 0x53, 0x4f, 0x5b, 0x4f, 0x5b, 0x0e, 0x53, 0x11, 0x74, 0x19, 0xbe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0xff, 0xff, 0x94, 0x84, 0x90, 0x63, 0x70, 0x5b, 0x70, 0x5b, 0x70, 0x5b, 0x70, 0x5b, 0x4f, 0x5b, 0xb0, 0x73, 0x9e, 0xf7, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfd, 0xe6, 0xf6, 0x94, 0x34, 0x74, 0x75, 0x7c, 0x95, 0x84, 0x54, 0x7c, 0xb1, 0x63, 0x2e, 0x53, 0x0e, 0x53, 0x2e, 0x53, 0x0e, 0x53, 0x0e, 0x53, 0x0e, 0x53, 0x0e, 0x53, 0x0e, 0x4b, 0xed, 0x4a, 0xcd, 0x42, 0xcd, 0x42, 0xed, 0x42, 0xed, 0x4a, 0x0e, 0x4b, 0xed, 0x4a, 0xed, 0x4a, 0xb0, 0x73, 0x5d, 0xef, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7d, 0xef, 0x12, 0x74, 0x70, 0x5b, 0xb1, 0x63, 0xb1, 0x63, 0xb1, 0x63, 0xb1, 0x63, 0xb1, 0x63, 0xb1, 0x63, 0x91, 0x63, 0xb1, 0x63, 0xb1, 0x63, 0xb1, 0x63, 0xb1, 0x63, 0xb1, 0x63, 0xb1, 0x63, 0xb1, 0x63, 0x90, 0x63, 0x4f, 0x5b, 0x4f, 0x5b, 0x4f, 0x5b, 0x4f, 0x5b, 0x4f, 0x5b, 0x12, 0x74, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0xff, 0xff, 0x94, 0x84, 0x90, 0x63, 0x70, 0x5b, 0x70, 0x5b, 0x70, 0x5b, 0x70, 0x5b, 0x4f, 0x5b, 0xb0, 0x73, 0x9e, 0xf7, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xf6, 0x94, 0x75, 0x7c, 0x75, 0x7c, 0x95, 0x84, 0x75, 0x7c, 0xf2, 0x6b, 0x4f, 0x5b, 0x2e, 0x53, 0x2e, 0x53, 0x0e, 0x53, 0x0e, 0x53, 0x0e, 0x53, 0x0e, 0x53, 0x0d, 0x4b, 0xed, 0x52, 0x4e, 0x5b, 0xb0, 0x63, 0xd0, 0x6b, 0x8f, 0x5b, 0x2e, 0x53, 0xed, 0x4a, 0xcd, 0x4a, 0x4f, 0x5b, 0x93, 0x94, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0xbe, 0xf7, 0x94, 0x84, 0x90, 0x63, 0x70, 0x5b, 0x90, 0x5b, 0x90, 0x5b, 0x90, 0x5b, 0x70, 0x5b, 0x90, 0x63, 0x91, 0x63, 0x90, 0x63, 0x90, 0x63, 0xb1, 0x63, 0xb1, 0x63, 0xb1, 0x63, 0xb1, 0x63, 0xb1, 0x63, 0xb1, 0x63, 0x90, 0x63, 0x4f, 0x5b, 0x4f, 0x5b, 0x4f, 0x5b, 0x4f, 0x53, 0x4f, 0x5b, 0xf5, 0x94, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0xff, 0xff, 0x94, 0x84, 0x90, 0x63, 0x70, 0x5b, 0x70, 0x5b, 0x70, 0x5b, 0x70, 0x5b, 0x4f, 0x5b, 0xb0, 0x6b, 0x9e, 0xf7, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x78, 0xa5, 0x75, 0x7c, 0x75, 0x7c, 0x95, 0x84, 0x95, 0x84, 0x33, 0x74, 0x90, 0x5b, 0x0e, 0x53, 0x0e, 0x53, 0x2e, 0x53, 0x0e, 0x53, 0x0e, 0x53, 0x0e, 0x53, 0x0e, 0x4b, 0xcd, 0x4a, 0xed, 0x5a, 0x31, 0x84, 0x5a, 0xce, 0xfc, 0xde, 0xf4, 0x94, 0xd0, 0x6b, 0x4f, 0x5b, 0x4e, 0x5b, 0x31, 0x7c, 0x7d, 0xef, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7d, 0xef, 0x12, 0x74, 0x70, 0x5b, 0x90, 0x63, 0xb1, 0x63, 0xd1, 0x6b, 0xf1, 0x73, 0x32, 0x84, 0x93, 0x8c, 0x12, 0x74, 0x90, 0x63, 0x90, 0x63, 0xb1, 0x63, 0xb1, 0x63, 0xb1, 0x63, 0x90, 0x63, 0xb1, 0x63, 0xb0, 0x63, 0x70, 0x5b, 0x4f, 0x5b, 0x4f, 0x5b, 0x70, 0x5b, 0x4f, 0x5b, 0x90, 0x63, 0xd5, 0x94, 0xdf, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0xff, 0xff, 0x94, 0x84, 0x90, 0x63, 0x6f, 0x5b, 0x70, 0x5b, 0x70, 0x5b, 0x70, 0x5b, 0x4f, 0x5b, 0xb0, 0x6b, 0x9e, 0xf7, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xbf, 0xff, 0x58, 0x9d, 0x95, 0x84, 0x95, 0x84, 0x95, 0x84, 0x95, 0x84, 0x54, 0x7c, 0x90, 0x63, 0x0e, 0x53, 0x0e, 0x53, 0x2e, 0x53, 0x0e, 0x53, 0x0e, 0x53, 0x0e, 0x53, 0x0e, 0x4b, 0xed, 0x4a, 0x2e, 0x5b, 0x72, 0x94, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5d, 0xe7, 0xd5, 0x94, 0x16, 0x9d, 0x56, 0xa5, 0x56, 0xa5, 0xd8, 0xbd, 0x9e, 0xf7, 0xff, 0xff, 0x19, 0xc6, 0x73, 0x84, 0x90, 0x63, 0x70, 0x5b, 0x90, 0x63, 0x90, 0x63, 0x90, 0x63, 0x90, 0x63, 0x90, 0x63, 0x90, 0x63, 0x70, 0x5b, 0x70, 0x5b, 0x70, 0x5b, 0x70, 0x5b, 0x4f, 0x5b, 0xb0, 0x63, 0xd4, 0x8c, 0x7e, 0xf7, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0xff, 0xff, 0x94, 0x84, 0x90, 0x63, 0x6f, 0x5b, 0x70, 0x5b, 0x70, 0x5b, 0x70, 0x5b, 0x4f, 0x5b, 0xb0, 0x6b, 0x9e, 0xf7, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x58, 0xa5, 0x96, 0x84, 0x96, 0x84, 0xb6, 0x84, 0xb6, 0x84, 0x54, 0x7c, 0xb1, 0x63, 0x2e, 0x53, 0x0e, 0x53, 0x2e, 0x53, 0x0e, 0x53, 0x0e, 0x53, 0x0e, 0x53, 0x0e, 0x53, 0x0e, 0x4b, 0xed, 0x52, 0xf0, 0x7b, 0xdb, 0xde, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x9e, 0xef, 0x12, 0x74, 0x70, 0x5b, 0x90, 0x63, 0x90, 0x63, 0x90, 0x63, 0x90, 0x63, 0x90, 0x63, 0x90, 0x63, 0x90, 0x63, 0x70, 0x5b, 0x70, 0x5b, 0x70, 0x5b, 0x70, 0x5b, 0x70, 0x5b, 0x70, 0x5b, 0x32, 0x7c, 0x19, 0xbe, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0xff, 0xff, 0x94, 0x84, 0x90, 0x5b, 0x4f, 0x5b, 0x70, 0x5b, 0x70, 0x5b, 0x6f, 0x5b, 0x4f, 0x5b, 0xb0, 0x6b, 0x9e, 0xf7, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xdc, 0xd6, 0xf7, 0x94, 0x75, 0x7c, 0xb6, 0x84, 0xb6, 0x84, 0xb6, 0x84, 0x75, 0x7c, 0xd1, 0x6b, 0x2e, 0x53, 0x0e, 0x53, 0x2e, 0x53, 0x0e, 0x53, 0x0e, 0x53, 0x0e, 0x53, 0x0e, 0x53, 0x0e, 0x4b, 0xed, 0x4a, 0x4e, 0x6b, 0x96, 0xb5, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x77, 0xa5, 0xd1, 0x6b, 0x70, 0x5b, 0x90, 0x63, 0x90, 0x63, 0x90, 0x63, 0x90, 0x63, 0x90, 0x63, 0x90, 0x63, 0x90, 0x63, 0x70, 0x5b, 0x70, 0x5b, 0x90, 0x63, 0x90, 0x63, 0x90, 0x63, 0x90, 0x63, 0x12, 0x74, 0x97, 0xad, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0xff, 0xf7, 0x93, 0x84, 0x70, 0x5b, 0x4f, 0x5b, 0x6f, 0x5b, 0x6f, 0x5b, 0x6f, 0x5b, 0x4f, 0x5b, 0xb0, 0x6b, 0x9e, 0xf7, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xd9, 0xad, 0xd6, 0x8c, 0x96, 0x84, 0xb6, 0x84, 0xd6, 0x8c, 0xb6, 0x84, 0x75, 0x7c, 0xd1, 0x6b, 0x2e, 0x53, 0x0e, 0x53, 0x2e, 0x53, 0x2e, 0x53, 0x0e, 0x53, 0x0e, 0x53, 0x0e, 0x53, 0x2e, 0x53, 0xed, 0x4a, 0xed, 0x5a, 0xf0, 0x83, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0xff, 0xff, 0x15, 0x95, 0x90, 0x63, 0x70, 0x5b, 0x90, 0x63, 0x90, 0x63, 0x90, 0x63, 0x90, 0x63, 0x90, 0x63, 0x90, 0x63, 0x90, 0x63, 0x70, 0x5b, 0x90, 0x63, 0x90, 0x63, 0xb1, 0x63, 0xb0, 0x63, 0x70, 0x5b, 0xf2, 0x6b, 0x36, 0x9d, 0x1d, 0xdf, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0xbf, 0xf7, 0x93, 0x84, 0x70, 0x5b, 0x4f, 0x5b, 0x6f, 0x5b, 0x6f, 0x5b, 0x4f, 0x5b, 0x4f, 0x5b, 0xb0, 0x6b, 0xbe, 0xf7, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xfc, 0xde, 0x57, 0x9d, 0x96, 0x84, 0x75, 0x7c, 0x96, 0x84, 0xd7, 0x8c, 0xd7, 0x8c, 0x75, 0x7c, 0xb1, 0x63, 0x2e, 0x53, 0x0e, 0x53, 0x0e, 0x53, 0x2e, 0x53, 0x0e, 0x53, 0x0e, 0x53, 0x0e, 0x53, 0x0e, 0x53, 0x0e, 0x53, 0xcd, 0x4a, 0x4e, 0x63, 0xd8, 0xbd, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0xff, 0xff, 0xb7, 0xad, 0x70, 0x5b, 0x70, 0x5b, 0x90, 0x63, 0x90, 0x63, 0x90, 0x63, 0x90, 0x63, 0x90, 0x63, 0x90, 0x63, 0x70, 0x5b, 0x70, 0x5b, 0x90, 0x63, 0x90, 0x63, 0xb1, 0x63, 0xb1, 0x63, 0xb1, 0x63, 0xb1, 0x63, 0xb1, 0x63, 0xf2, 0x6b, 0x57, 0xa5, 0x3d, 0xe7, 0x9e, 0xef, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0xbf, 0xf7, 0x94, 0x84, 0x70, 0x5b, 0x4f, 0x5b, 0x6f, 0x5b, 0x6f, 0x5b, 0x4f, 0x5b, 0x2f, 0x5b, 0xb0, 0x6b, 0xff, 0xf7, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x9e, 0xef, 0x5e, 0xef, 0xd9, 0xad, 0x75, 0x7c, 0x75, 0x7c, 0x95, 0x84, 0xb6, 0x84, 0xb6, 0x8c, 0xb6, 0x84, 0x54, 0x7c, 0xb1, 0x63, 0x2e, 0x53, 0x0d, 0x53, 0x2e, 0x53, 0x0e, 0x53, 0x0e, 0x53, 0x0e, 0x53, 0x0e, 0x53, 0x0e, 0x53, 0x0e, 0x53, 0x0e, 0x4b, 0xcd, 0x4a, 0x4f, 0x5b, 0x59, 0xc6, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xdf, 0xff, 0x73, 0x84, 0x4f, 0x5b, 0x70, 0x5b, 0x70, 0x5b, 0x70, 0x5b, 0x90, 0x63, 0x90, 0x63, 0x70, 0x5b, 0x70, 0x5b, 0x70, 0x5b, 0x70, 0x5b, 0x70, 0x5b, 0x90, 0x63, 0xb1, 0x63, 0xb1, 0x63, 0xd1, 0x6b, 0xd2, 0x6b, 0xd1, 0x6b, 0xd2, 0x6b, 0xf2, 0x6b, 0x13, 0x74, 0x94, 0x84, 0x7a, 0xce, 0xbf, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x93, 0x84, 0x70, 0x5b, 0x4f, 0x5b, 0x4f, 0x5b, 0x4f, 0x5b, 0x4f, 0x5b, 0x2e, 0x53, 0x90, 0x6b, 0x9e, 0xf7, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x7e, 0xf7, 0x5a, 0xc6, 0xd6, 0x8c, 0x95, 0x84, 0x75, 0x84, 0x75, 0x7c, 0x95, 0x84, 0xb6, 0x84, 0xb6, 0x84, 0x96, 0x84, 0x33, 0x74, 0x90, 0x5b, 0x0e, 0x53, 0x0e, 0x53, 0x2e, 0x53, 0x2e, 0x53, 0x0e, 0x53, 0x0e, 0x53, 0x0e, 0x53, 0x0e, 0x53, 0x0e, 0x53, 0x0e, 0x53, 0x0e, 0x4b, 0xed, 0x4a, 0x0e, 0x53, 0xf1, 0x6b, 0x3d, 0xef, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x56, 0xa5, 0xb1, 0x63, 0x50, 0x5b, 0x70, 0x5b, 0x70, 0x5b, 0x90, 0x5b, 0x90, 0x63, 0x70, 0x5b, 0x70, 0x5b, 0x70, 0x5b, 0x70, 0x5b, 0x70, 0x5b, 0x70, 0x5b, 0x70, 0x5b, 0x90, 0x63, 0x91, 0x63, 0xd1, 0x6b, 0xd2, 0x6b, 0xf2, 0x6b, 0xf2, 0x6b, 0xd2, 0x6b, 0xd2, 0x63, 0xf2, 0x6b, 0x74, 0x7c, 0xf6, 0x94, 0xd9, 0xb5, 0x9b, 0xce, 0x1d, 0xe7, 0xff, 0xff, 0xbe, 0xf7, 0x32, 0x7c, 0x4f, 0x5b, 0x4f, 0x5b, 0x4f, 0x5b, 0x4f, 0x5b, 0x4f, 0x5b, 0x2e, 0x53, 0x90, 0x6b, 0xd8, 0xb5, 0x3d, 0xef, 0x3d, 0xe7, 0xbb, 0xd6, 0x98, 0xa5, 0xd6, 0x8c, 0x75, 0x84, 0x34, 0x7c, 0x54, 0x7c, 0x75, 0x7c, 0x95, 0x84, 0xb6, 0x84, 0x96, 0x84, 0x54, 0x7c, 0xd2, 0x6b, 0x6f, 0x5b, 0x2e, 0x53, 0x0e, 0x53, 0x0e, 0x53, 0x2e, 0x53, 0x0e, 0x53, 0x0e, 0x53, 0x0e, 0x53, 0x0e, 0x53, 0x0e, 0x53, 0x0e, 0x53, 0x0e, 0x4b, 0x0e, 0x4b, 0x0e, 0x4b, 0xed, 0x4a, 0x2e, 0x53, 0x52, 0x7c, 0x5d, 0xef, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5a, 0xc6, 0x90, 0x63, 0x4f, 0x53, 0x70, 0x5b, 0x70, 0x5b, 0x70, 0x5b, 0x70, 0x5b, 0x70, 0x5b, 0x70, 0x5b, 0x70, 0x5b, 0x70, 0x5b, 0x70, 0x5b, 0x70, 0x5b, 0x70, 0x5b, 0x70, 0x5b, 0x70, 0x5b, 0x90, 0x5b, 0x90, 0x63, 0xb1, 0x63, 0xd2, 0x6b, 0xf2, 0x6b, 0x13, 0x74, 0x13, 0x74, 0x13, 0x74, 0xf2, 0x6b, 0xd2, 0x6b, 0xd2, 0x6b, 0x13, 0x74, 0xb5, 0x84, 0xb8, 0xad, 0x77, 0xa5, 0xb1, 0x6b, 0x4f, 0x5b, 0x4f, 0x5b, 0x4f, 0x5b, 0x4f, 0x5b, 0x4f, 0x5b, 0x4f, 0x5b, 0x90, 0x63, 0x53, 0x7c, 0xd5, 0x8c, 0x95, 0x84, 0x13, 0x74, 0xf3, 0x6b, 0x13, 0x74, 0x54, 0x74, 0x74, 0x7c, 0x95, 0x84, 0x95, 0x84, 0x95, 0x84, 0x54, 0x7c, 0xf2, 0x6b, 0x90, 0x63, 0x4e, 0x53, 0x0e, 0x53, 0x0e, 0x53, 0x2e, 0x53, 0x2e, 0x53, 0x0e, 0x53, 0x0e, 0x53, 0x0e, 0x53, 0x0e, 0x53, 0x0e, 0x53, 0x0e, 0x53, 0x0e, 0x4b, 0x0e, 0x4b, 0x0e, 0x4b, 0x0e, 0x53, 0x0e, 0x4b, 0xcd, 0x42, 0x4f, 0x5b, 0xb3, 0x8c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xdb, 0xd6, 0x32, 0x74, 0x70, 0x5b, 0x70, 0x5b, 0x70, 0x5b, 0x70, 0x5b, 0x70, 0x5b, 0x70, 0x5b, 0x70, 0x5b, 0x70, 0x5b, 0x70, 0x5b, 0x70, 0x5b, 0x70, 0x5b, 0x70, 0x5b, 0x70, 0x5b, 0x70, 0x5b, 0x70, 0x5b, 0x70, 0x5b, 0x70, 0x5b, 0x70, 0x5b, 0xb1, 0x63, 0xd1, 0x6b, 0xf2, 0x6b, 0x13, 0x74, 0x13, 0x74, 0x33, 0x74, 0x33, 0x74, 0x33, 0x74, 0x33, 0x74, 0x33, 0x74, 0x34, 0x74, 0x13, 0x74, 0x90, 0x5b, 0x4f, 0x5b, 0x4f, 0x5b, 0x4f, 0x5b, 0x4f, 0x5b, 0x2f, 0x53, 0x4f, 0x5b, 0x91, 0x63, 0xf2, 0x6b, 0x13, 0x74, 0x13, 0x74, 0x33, 0x74, 0x54, 0x7c, 0x54, 0x7c, 0x74, 0x7c, 0x54, 0x7c, 0x54, 0x7c, 0x34, 0x74, 0x12, 0x74, 0xb1, 0x63, 0x4f, 0x53, 0x0e, 0x53, 0x2e, 0x53, 0x2e, 0x53, 0x2e, 0x53, 0x2e, 0x53, 0x0e, 0x53, 0x0e, 0x53, 0x0e, 0x53, 0x0e, 0x53, 0x0e, 0x4b, 0x0e, 0x53, 0x0e, 0x4b, 0x0e, 0x4b, 0x0e, 0x4b, 0x0e, 0x4b, 0x0e, 0x4b, 0x0e, 0x53, 0x0e, 0x4b, 0xcc, 0x42, 0xd0, 0x6b, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xb4, 0x8c, 0x90, 0x5b, 0x4f, 0x5b, 0x90, 0x5b, 0x70, 0x5b, 0x70, 0x5b, 0x70, 0x5b, 0x70, 0x5b, 0x70, 0x5b, 0x70, 0x5b, 0x70, 0x5b, 0x70, 0x5b, 0x70, 0x5b, 0x70, 0x5b, 0x70, 0x5b, 0x70, 0x5b, 0x70, 0x5b, 0x70, 0x5b, 0x70, 0x5b, 0x6f, 0x5b, 0x6f, 0x5b, 0x70, 0x5b, 0x90, 0x63, 0xd2, 0x6b, 0xf2, 0x6b, 0x13, 0x74, 0x33, 0x74, 0x33, 0x74, 0x54, 0x7c, 0x54, 0x7c, 0x54, 0x7c, 0x33, 0x74, 0x90, 0x63, 0x4f, 0x5b, 0x4f, 0x5b, 0x4f, 0x5b, 0x4f, 0x5b, 0x2f, 0x53, 0x4f, 0x5b, 0x91, 0x63, 0xf3, 0x6b, 0x33, 0x74, 0x33, 0x74, 0x33, 0x74, 0x34, 0x74, 0x54, 0x7c, 0x54, 0x7c, 0x13, 0x74, 0xd2, 0x6b, 0x90, 0x5b, 0x4f, 0x53, 0x2e, 0x53, 0x2e, 0x53, 0x2e, 0x53, 0x2e, 0x53, 0x0e, 0x53, 0x0e, 0x53, 0x0e, 0x53, 0x0e, 0x53, 0x0e, 0x53, 0x0e, 0x4b, 0x0d, 0x4b, 0xed, 0x4a, 0xed, 0x4a, 0xed, 0x4a, 0x0e, 0x4b, 0x0e, 0x53, 0x0e, 0x4b, 0x0e, 0x4b, 0x0e, 0x53, 0x0e, 0x4b, 0xac, 0x3a, 0xb0, 0x63, 0x1c, 0xdf, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x53, 0x7c, 0x4f, 0x53, 0x4f, 0x5b, 0x70, 0x5b, 0x70, 0x5b, 0x70, 0x5b, 0x70, 0x5b, 0x70, 0x5b, 0x70, 0x5b, 0x70, 0x5b, 0x70, 0x5b, 0x4f, 0x5b, 0x4f, 0x5b, 0x4f, 0x5b, 0x6f, 0x5b, 0x70, 0x5b, 0x6f, 0x5b, 0x6f, 0x5b, 0x6f, 0x5b, 0x6f, 0x5b, 0x4f, 0x5b, 0x4f, 0x5b, 0x6f, 0x5b, 0x70, 0x5b, 0x90, 0x63, 0xb1, 0x63, 0xd1, 0x6b, 0x12, 0x6c, 0x33, 0x74, 0x54, 0x7c, 0x95, 0x84, 0x54, 0x7c, 0x90, 0x63, 0x4f, 0x5b, 0x4f, 0x5b, 0x4f, 0x5b, 0x2f, 0x53, 0x2f, 0x53, 0x4f, 0x5b, 0x91, 0x63, 0x13, 0x74, 0x33, 0x74, 0x13, 0x74, 0xf2, 0x73, 0xf2, 0x6b, 0xd1, 0x63, 0x90, 0x63, 0x6f, 0x5b, 0x4f, 0x5b, 0x2e, 0x53, 0x0e, 0x53, 0x2e, 0x53, 0x2e, 0x53, 0x2e, 0x53, 0x2e, 0x53, 0x0e, 0x53, 0x0e, 0x53, 0x0e, 0x53, 0x0e, 0x53, 0x0e, 0x4b, 0xed, 0x4a, 0xed, 0x52, 0x2e, 0x5b, 0x2e, 0x53, 0xed, 0x4a, 0xed, 0x4a, 0x0e, 0x4b, 0x0e, 0x4b, 0x0e, 0x53, 0x0e, 0x4b, 0xed, 0x4a, 0xed, 0x4a, 0xf1, 0x73, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xd5, 0x94, 0x90, 0x63, 0x2f, 0x53, 0x70, 0x5b, 0x6f, 0x5b, 0x6f, 0x5b, 0x6f, 0x5b, 0x6f, 0x5b, 0x70, 0x5b, 0x4f, 0x53, 0x2e, 0x5b, 0x6f, 0x63, 0x90, 0x63, 0x4f, 0x53, 0x2f, 0x53, 0x4f, 0x5b, 0x6f, 0x5b, 0x6f, 0x5b, 0x6f, 0x5b, 0x4f, 0x5b, 0x6f, 0x5b, 0x6f, 0x5b, 0x4f, 0x5b, 0x4f, 0x5b, 0x4f, 0x5b, 0x4f, 0x5b, 0x70, 0x5b, 0x90, 0x63, 0xb1, 0x63, 0xd1, 0x6b, 0xf2, 0x6b, 0xd2, 0x6b, 0x70, 0x5b, 0x4f, 0x5b, 0x2f, 0x53, 0x2f, 0x53, 0x2f, 0x53, 0x2f, 0x53, 0x4f, 0x5b, 0x70, 0x5b, 0xb1, 0x63, 0xb1, 0x63, 0xb1, 0x63, 0x90, 0x63, 0x70, 0x5b, 0x4f, 0x5b, 0x0e, 0x53, 0x0e, 0x53, 0x2e, 0x53, 0x2e, 0x53, 0x2e, 0x53, 0x2e, 0x53, 0x2e, 0x53, 0x0e, 0x53, 0x0e, 0x53, 0x0e, 0x53, 0x0e, 0x53, 0x0e, 0x53, 0x0e, 0x4b, 0xed, 0x4a, 0x2e, 0x63, 0xd0, 0x7b, 0x97, 0xb5, 0x18, 0xbe, 0x11, 0x74, 0x0e, 0x4b, 0xcd, 0x42, 0x0e, 0x4b, 0x0e, 0x4b, 0xed, 0x4a, 0xcd, 0x42, 0xb0, 0x6b, 0x56, 0xad, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xdf, 0xff, 0x32, 0x7c, 0x70, 0x5b, 0x2f, 0x53, 0x4f, 0x5b, 0x70, 0x5b, 0x4f, 0x5b, 0x4f, 0x53, 0x2f, 0x53, 0x6f, 0x63, 0xb0, 0x7b, 0x73, 0x94, 0xb4, 0x8c, 0x12, 0x74, 0xb0, 0x63, 0x4f, 0x5b, 0x2f, 0x53, 0x4f, 0x5b, 0x6f, 0x5b, 0x4f, 0x5b, 0x4f, 0x5b, 0x4f, 0x5b, 0x4f, 0x5b, 0x4f, 0x5b, 0x4f, 0x5b, 0x4f, 0x5b, 0x4f, 0x5b, 0x4f, 0x5b, 0x4f, 0x53, 0x4f, 0x5b, 0x4f, 0x5b, 0x4f, 0x5b, 0x4f, 0x5b, 0x4f, 0x5b, 0x4f, 0x5b, 0x2f, 0x53, 0x4f, 0x53, 0x4f, 0x53, 0x4f, 0x53, 0x4f, 0x53, 0x2f, 0x53, 0x2e, 0x53, 0x2e, 0x53, 0x2e, 0x53, 0x2e, 0x53, 0x2e, 0x53, 0x2e, 0x53, 0x2e, 0x53, 0x2e, 0x53, 0x2e, 0x53, 0x2e, 0x53, 0x2e, 0x53, 0x0e, 0x53, 0x0e, 0x53, 0x0e, 0x53, 0x0e, 0x53, 0x0e, 0x53, 0x0d, 0x53, 0xed, 0x52, 0x4e, 0x63, 0x52, 0x8c, 0x9a, 0xde, 0xff, 0xff, 0x00, 0x00, 0xfb, 0xde, 0x32, 0x7c, 0x2e, 0x53, 0xed, 0x4a, 0xcd, 0x42, 0x0e, 0x53, 0xb0, 0x6b, 0xf4, 0x9c, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x9f, 0xf7, 0x32, 0x7c, 0x90, 0x63, 0x2f, 0x53, 0x2f, 0x53, 0x2f, 0x53, 0x6f, 0x5b, 0xd0, 0x73, 0x52, 0x8c, 0xdc, 0xe6, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x97, 0xad, 0x11, 0x74, 0x2f, 0x53, 0x4f, 0x53, 0x4f, 0x5b, 0x4f, 0x5b, 0x4f, 0x5b, 0x4f, 0x5b, 0x4f, 0x5b, 0x4f, 0x5b, 0x4f, 0x5b, 0x4f, 0x5b, 0x4f, 0x5b, 0x2f, 0x53, 0x2f, 0x53, 0x2f, 0x53, 0x2f, 0x53, 0x2f, 0x53, 0x2f, 0x53, 0x2f, 0x53, 0x4f, 0x53, 0x4f, 0x53, 0x2f, 0x53, 0x2f, 0x53, 0x2f, 0x53, 0x2f, 0x53, 0x2e, 0x53, 0x2e, 0x53, 0x2e, 0x53, 0x2e, 0x53, 0x2e, 0x53, 0x2e, 0x53, 0x2e, 0x53, 0x2e, 0x53, 0x2e, 0x53, 0x2e, 0x53, 0x0e, 0x53, 0x0e, 0x53, 0x0e, 0x53, 0x0e, 0x53, 0x0e, 0x53, 0x2e, 0x53, 0xed, 0x4a, 0xcc, 0x52, 0x6f, 0x73, 0x76, 0xb5, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xb7, 0xad, 0x2e, 0x53, 0x2e, 0x53, 0xd0, 0x6b, 0xb7, 0xb5, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xf5, 0x94, 0xb1, 0x6b, 0x4f, 0x5b, 0xd1, 0x6b, 0x73, 0x8c, 0xdb, 0xde, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x5e, 0xef, 0x73, 0x84, 0x6f, 0x5b, 0x2e, 0x53, 0x4f, 0x5b, 0x4f, 0x5b, 0x4f, 0x5b, 0x4f, 0x5b, 0x4f, 0x5b, 0x4f, 0x5b, 0x4f, 0x5b, 0x4f, 0x5b, 0x4f, 0x5b, 0x4f, 0x5b, 0x4f, 0x5b, 0x4f, 0x53, 0x4f, 0x53, 0x4f, 0x53, 0x4f, 0x53, 0x4f, 0x53, 0x4f, 0x53, 0x2f, 0x53, 0x2f, 0x53, 0x2f, 0x53, 0x2e, 0x53, 0x2e, 0x53, 0x2e, 0x53, 0x2e, 0x53, 0x2e, 0x53, 0x2e, 0x53, 0x2e, 0x53, 0x2e, 0x53, 0x2e, 0x53, 0x0e, 0x53, 0x0e, 0x53, 0x0e, 0x53, 0x0e, 0x53, 0x0e, 0x53, 0x0e, 0x53, 0x0e, 0x53, 0x0e, 0x4b, 0xcc, 0x4a, 0x4e, 0x6b, 0x96, 0xb5, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x77, 0xa5, 0x15, 0x95, 0xb8, 0xb5, 0xdf, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x77, 0xa5, 0x90, 0x63, 0x0e, 0x53, 0x4f, 0x5b, 0x4f, 0x5b, 0x4f, 0x5b, 0x4f, 0x5b, 0x4f, 0x5b, 0x4f, 0x5b, 0x4f, 0x5b, 0x4f, 0x5b, 0x4f, 0x5b, 0x4f, 0x5b, 0x4f, 0x5b, 0x4f, 0x53, 0x4f, 0x53, 0x4f, 0x53, 0x4f, 0x53, 0x4f, 0x53, 0x2f, 0x53, 0x2f, 0x53, 0x2f, 0x53, 0x2e, 0x53, 0x2e, 0x53, 0x2e, 0x53, 0x2e, 0x53, 0x2e, 0x53, 0x2e, 0x53, 0x2e, 0x53, 0x2e, 0x53, 0x2e, 0x53, 0x2e, 0x53, 0x0e, 0x53, 0x0e, 0x53, 0x0e, 0x53, 0x0e, 0x53, 0x0e, 0x53, 0x0e, 0x53, 0x0e, 0x53, 0x0d, 0x4b, 0xed, 0x52, 0x11, 0x84, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xf5, 0x94, 0x90, 0x63, 0x0e, 0x53, 0x2f, 0x53, 0x4f, 0x5b, 0x4f, 0x5b, 0x4f, 0x5b, 0x4f, 0x5b, 0x4f, 0x5b, 0x4f, 0x53, 0x2f, 0x53, 0x2f, 0x53, 0x2f, 0x53, 0x2f, 0x53, 0x2f, 0x53, 0x2f, 0x53, 0x2f, 0x53, 0x2f, 0x53, 0x2f, 0x53, 0x2f, 0x53, 0x2e, 0x53, 0x2e, 0x53, 0x2e, 0x53, 0x2e, 0x53, 0x2e, 0x53, 0x2e, 0x53, 0x2e, 0x53, 0x2e, 0x53, 0x0e, 0x53, 0x0e, 0x53, 0x0e, 0x4b, 0x0d, 0x4b, 0x0e, 0x53, 0x0e, 0x53, 0x0e, 0x53, 0x0e, 0x53, 0x0e, 0x53, 0x0e, 0x53, 0x0e, 0x53, 0xed, 0x4a, 0x0e, 0x53, 0x72, 0x84, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xf1, 0x73, 0x4f, 0x5b, 0x2e, 0x53, 0x2f, 0x53, 0x4f, 0x5b, 0x2f, 0x53, 0x2f, 0x53, 0x4f, 0x5b, 0x4f, 0x5b, 0x4f, 0x53, 0x2f, 0x53, 0x2e, 0x53, 0x2e, 0x53, 0x2e, 0x53, 0x2e, 0x53, 0x2f, 0x53, 0x2f, 0x53, 0x2e, 0x53, 0x2e, 0x53, 0x2e, 0x53, 0x2e, 0x53, 0x2e, 0x53, 0x2e, 0x53, 0x2e, 0x53, 0x2e, 0x53, 0x2e, 0x53, 0x0e, 0x53, 0x0e, 0x53, 0x0e, 0x4b, 0x0e, 0x4b, 0xed, 0x4a, 0xed, 0x4a, 0x0d, 0x53, 0x0e, 0x53, 0x0e, 0x53, 0x0e, 0x53, 0x0e, 0x53, 0x0e, 0x4b, 0x0e, 0x4b, 0x0d, 0x4b, 0x0e, 0x4b, 0x32, 0x7c, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x6f, 0x5b, 0x2f, 0x53, 0x4f, 0x53, 0x4f, 0x5b, 0x4f, 0x5b, 0x4f, 0x53, 0x4f, 0x53, 0x4f, 0x53, 0x2f, 0x53, 0x0e, 0x53, 0xed, 0x52, 0x6f, 0x63, 0xd0, 0x6b, 0xb0, 0x63, 0x4f, 0x5b, 0x2e, 0x53, 0x2f, 0x53, 0x2e, 0x53, 0x2e, 0x53, 0x2e, 0x53, 0x2e, 0x53, 0x2e, 0x53, 0x2e, 0x53, 0x2e, 0x53, 0x0e, 0x53, 0xed, 0x4a, 0xed, 0x52, 0x4e, 0x5b, 0x8f, 0x6b, 0xd0, 0x73, 0x52, 0x84, 0x73, 0x84, 0x6f, 0x63, 0xcd, 0x42, 0x0e, 0x4b, 0x0e, 0x53, 0x0e, 0x4b, 0x0e, 0x4b, 0x0e, 0x53, 0x0d, 0x4b, 0xed, 0x4a, 0xf1, 0x73, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x9b, 0xce, 0x4f, 0x5b, 0x0e, 0x53, 0x4f, 0x5b, 0x4f, 0x5b, 0x4f, 0x53, 0x4f, 0x53, 0x4f, 0x53, 0x4f, 0x53, 0x0e, 0x53, 0xed, 0x5a, 0xd0, 0x7b, 0xb7, 0xbd, 0xbb, 0xd6, 0x5a, 0xc6, 0xf5, 0x94, 0x6f, 0x5b, 0x2e, 0x53, 0x2e, 0x53, 0x2e, 0x53, 0x2e, 0x53, 0x2e, 0x53, 0x2e, 0x53, 0x2e, 0x53, 0x0e, 0x53, 0xed, 0x4a, 0x2e, 0x5b, 0xd0, 0x7b, 0xd8, 0xbd, 0x9a, 0xd6, 0x7a, 0xd6, 0x3c, 0xe7, 0x9f, 0xf7, 0x35, 0x9d, 0x0e, 0x4b, 0x0d, 0x4b, 0x0e, 0x4b, 0x0e, 0x4b, 0x0e, 0x4b, 0x0e, 0x53, 0x0e, 0x4b, 0xcd, 0x42, 0xb0, 0x63, 0x39, 0xc6, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xd4, 0x8c, 0x2f, 0x53, 0x0e, 0x4b, 0x4f, 0x5b, 0x4f, 0x53, 0x2f, 0x53, 0x2f, 0x53, 0x2f, 0x53, 0x2e, 0x53, 0x0e, 0x53, 0x8f, 0x73, 0x59, 0xce, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x9e, 0xf7, 0xd0, 0x6b, 0x2e, 0x53, 0x0e, 0x53, 0x2e, 0x53, 0x2e, 0x53, 0x2e, 0x53, 0x2e, 0x53, 0x2e, 0x53, 0xed, 0x4a, 0xed, 0x52, 0xd0, 0x7b, 0xdb, 0xde, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7e, 0xef, 0x32, 0x74, 0xed, 0x4a, 0xed, 0x4a, 0x0e, 0x53, 0x0e, 0x4b, 0x0e, 0x4b, 0x0d, 0x4b, 0xcd, 0x42, 0x6f, 0x5b, 0xb3, 0x94, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x76, 0xa5, 0x2e, 0x53, 0xed, 0x4a, 0x2e, 0x53, 0x2f, 0x53, 0x2f, 0x53, 0x2f, 0x53, 0x2e, 0x53, 0x0e, 0x53, 0x6f, 0x63, 0x76, 0xad, 0xff, 0xff, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0xff, 0xff, 0x11, 0x74, 0x4f, 0x5b, 0x0e, 0x4b, 0x2e, 0x53, 0x2e, 0x53, 0x2e, 0x53, 0x0e, 0x53, 0x0e, 0x53, 0xed, 0x4a, 0x2e, 0x63, 0xf4, 0xa4, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x97, 0xad, 0x2e, 0x53, 0xcd, 0x42, 0x0e, 0x4b, 0x0e, 0x4b, 0xed, 0x4a, 0xed, 0x4a, 0xcd, 0x42, 0xb0, 0x6b, 0x9b, 0xd6, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7e, 0xf7, 0x52, 0x7c, 0x6f, 0x5b, 0xee, 0x4a, 0xed, 0x4a, 0x0e, 0x4b, 0x0e, 0x53, 0xee, 0x4a, 0x2e, 0x5b, 0x32, 0x84, 0xbe, 0xf7, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x93, 0x8c, 0x6f, 0x5b, 0xed, 0x4a, 0x0e, 0x53, 0x2e, 0x53, 0x0e, 0x53, 0x0e, 0x53, 0x0e, 0x4b, 0xed, 0x4a, 0x6f, 0x63, 0xdb, 0xde, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0x5d, 0xef, 0x12, 0x74, 0xcd, 0x42, 0xac, 0x42, 0xcd, 0x4a, 0x0e, 0x53, 0x4f, 0x5b, 0xf1, 0x73, 0x5a, 0xce, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x9e, 0xf7, 0xd8, 0xb5, 0x52, 0x7c, 0xd1, 0x6b, 0x6f, 0x5b, 0x2e, 0x53, 0x6f, 0x5b, 0x52, 0x84, 0x9a, 0xd6, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xf5, 0x94, 0x6f, 0x5b, 0xed, 0x4a, 0x0e, 0x53, 0x0e, 0x53, 0x0e, 0x53, 0x2e, 0x53, 0x0e, 0x4b, 0x0e, 0x53, 0x6f, 0x6b, 0xbe, 0xf7, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x9a, 0xce, 0x52, 0x7c, 0xb0, 0x6b, 0x12, 0x74, 0xb3, 0x8c, 0x39, 0xc6, 0x9e, 0xf7, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xbe, 0xf7, 0x3d, 0xe7, 0xf5, 0x94, 0x11, 0x74, 0xf8, 0xb5, 0xbf, 0xff, 0xff, 0xff, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x35, 0x9d, 0x4f, 0x5b, 0xcd, 0x42, 0x0d, 0x4b, 0x0d, 0x4b, 0x0d, 0x4b, 0x0e, 0x4b, 0xed, 0x4a, 0x0e, 0x53, 0xd0, 0x73, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0xff, 0xff, 0xdf, 0xff, 0xdf, 0xf7, 0xdf, 0xff, 0xdf, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xbf, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3d, 0xef, 0x8f, 0x63, 0xed, 0x4a, 0x0d, 0x4b, 0x0d, 0x4b, 0x0d, 0x4b, 0xed, 0x4a, 0xcd, 0x4a, 0x4f, 0x5b, 0x93, 0x94, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0xff, 0xff, 0x76, 0xa5, 0x11, 0x74, 0x11, 0x74, 0x11, 0x74, 0x11, 0x74, 0xf1, 0x73, 0xd0, 0x6b, 0x73, 0x84, 0x7e, 0xf7, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xbf, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
/*alpha channel*/
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x6d, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x08, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x0f, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x39, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x53, 0xff, 0x28, 0x06, 0x0b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x0c, 0x2b, 0xff, 0xff, 0xa5, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x4b, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x2c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x51, 0xff, 0xff, 0xff, 0xff, 0xff, 0x28, 0x08, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0d, 0x8c, 0xff, 0xff, 0xff, 0xff, 0xff, 0x99, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0xaa, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfb, 0xff, 0xff, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x21, 0xff, 0xff, 0xfb, 0xff, 0xff, 0xff, 0xff, 0xff, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0xb2, 0xff, 0xff, 0xff, 0xff, 0xfc, 0xff, 0xff, 0x1a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x04, 0x00, 0x00, 0x00, 0x00, 0x04, 0xd6, 0xff, 0xff, 0xff, 0xff, 0xfb, 0xff, 0xff, 0xff, 0x23, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x25, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x6b, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfb, 0x04, 0x00, 0x00, 0x00, 0x00, 0x10, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x67, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0b, 0xc4, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x2a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x09, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x40, 0x00, 0x00, 0x00, 0x01, 0x7c, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xd4, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xa2, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xbf, 0x0e, 0x00, 0x00, 0x00, 0x07, 0x2d, 0x82, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfb, 0xff, 0xff, 0x46, 0x05, 0x00, 0x31, 0xff, 0xff, 0xfb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfb, 0xff, 0xdc, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xbb, 0xff, 0xfc, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xa9, 0x3b, 0x34, 0x4e, 0xac, 0xff, 0xff, 0xfb, 0xfb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf7, 0xff, 0xff, 0xa8, 0x59, 0xff, 0xff, 0xfb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc7, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x7e, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfb, 0xf7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf7, 0xf7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfb, 0xf3, 0xff, 0xff, 0xff, 0xf7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x3c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x09, 0xda, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf7, 0xf3, 0xf0, 0xf3, 0xf7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf7, 0xf3, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xe5, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x16, 0x95, 0x2e, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x4b, 0x1d, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x89, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xec, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x86, 0xe6, 0xff, 0xff, 0x93, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0xaf, 0xff, 0xff, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0xd2, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x87, 0x01, 0x00, 0x00, 0x00, 0x00, 0x0b, 0xf4, 0xff, 0xff, 0xdc, 0xff, 0xff, 0xb1, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0xcc, 0xff, 0xff, 0xff, 0xff, 0x4a, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x89, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf7, 0xff, 0xff, 0x83, 0x02, 0x00, 0x00, 0x0d, 0xff, 0xff, 0xfb, 0xff, 0xff, 0xf7, 0xff, 0xff, 0xbf, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0xc8, 0xff, 0xff, 0xf9, 0xf9, 0xff, 0xff, 0xbb, 0x19, 0x00, 0x00, 0x02, 0x78, 0xff, 0xff, 0xff, 0xf8, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf7, 0xff, 0xff, 0xff, 0x6b, 0x2c, 0xf7, 0xff, 0xff, 0xfb, 0xff, 0xff, 0xff, 0xf7, 0xff, 0xff, 0xa7, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x9f, 0xff, 0xff, 0xf9, 0xff, 0xff, 0xf9, 0xff, 0xff, 0xe6, 0x20, 0x06, 0x76, 0xff, 0xff, 0xff, 0xf8, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf7, 0xff, 0xe3, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x09, 0xd7, 0xff, 0xf9, 0xff, 0xff, 0xff, 0xff, 0xfc, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf8, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfb, 0xff, 0xff, 0xff, 0xfb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xb9, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0xc4, 0xff, 0xfc, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfc, 0xff, 0xff, 0xff, 0xff, 0xfb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xbb, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x6f, 0xff, 0xff, 0xfc, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x29, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0a, 0x8f, 0xff, 0xff, 0xfc, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfb, 0xfb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xd2, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0a, 0x8e, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x97, 0x12, 0x2a, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfb, 0xff, 0xff, 0x62, 0x19, 0x14, 0x31, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfb, 0xff, 0xff, 0x1d, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x13, 0xff, 0xff, 0xfc, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfb, 0xff, 0xff, 0xff, 0xff, 0xff, 0x29, 0x0f, 0x04, 0x00, 0x01, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xb2, 0x03, 0x00, 0x00, 0x00, 0x07, 0x36, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x9d, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x28, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfb, 0xff, 0xff, 0xff, 0x55, 0x0f, 0x0b, 0x00, 0x00, 0x00, 0x00, 0x04, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x13, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0d, 0x0b, 0x4f, 0xff, 0xff, 0xff, 0xfb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0d, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfb, 0xff, 0xff, 0xff, 0x40, 0x06, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x09, 0x5e, 0xff, 0xff, 0xff, 0xfb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x9e, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf7, 0xff, 0xff, 0xff, 0x44, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x61, 0xff, 0xff, 0xff, 0xf7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xb2, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x19, 0xff, 0xff, 0xfc, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf4, 0xff, 0xff, 0x89, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1e, 0xc1, 0xff, 0xff, 0xf7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfb, 0xff, 0xff, 0x0b, 0x00, 0x00, 0x00, 0x02, 0x44, 0x7c, 0x70, 0x86, 0x21, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0a, 0x0b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0xb0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf4, 0xff, 0xff, 0x4f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x70, 0xff, 0xff, 0xf7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfb, 0xac, 0x80, 0x80, 0x78, 0x9b, 0xff, 0xff, 0xff, 0xff, 0xff, 0x12, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x22, 0xf3, 0xe8, 0x64, 0x0b, 0x01, 0x02, 0x00, 0x04, 0x94, 0xff, 0xff, 0xfc, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf4, 0xff, 0xff, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x77, 0xff, 0xff, 0xf7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf7, 0xe6, 0xe8, 0xe6, 0xff, 0xff, 0x07, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x11, 0xff, 0xff, 0xff, 0xff, 0xe2, 0xcd, 0xcf, 0xad, 0xd5, 0xff, 0xff, 0xf9, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf4, 0xff, 0xff, 0x4e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x77, 0xff, 0xff, 0xf7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x19, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x51, 0xff, 0xff, 0xf9, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf9, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf8, 0xff, 0xff, 0x50, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x75, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x88, 0x04, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x10, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfc, 0xff, 0xff, 0x57, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0xf3, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x0b, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x1f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x87, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2f, 0xff, 0xff, 0xfb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x0b, 0x00, 0x00, 0x00,
0x00, 0x00, 0x04, 0x7b, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x45, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x0a, 0x00, 0x00, 0x00,
0x00, 0x00, 0x02, 0x78, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfc, 0xff, 0xff, 0x37, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0xfb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x4f, 0x01, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x08, 0x92, 0xff, 0xff, 0xff, 0xfc, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x4b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x21, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x37, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2c, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfb, 0xff, 0xff, 0xad, 0x29, 0x01, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x05, 0x41, 0xd8, 0xff, 0xff, 0xff, 0xfc, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfc, 0xff, 0xff, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x45, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfb, 0xff, 0xff, 0x46, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xa6, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfb, 0xff, 0xff, 0x83, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0a, 0x7f, 0xff, 0xff, 0xf9, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x44, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2b, 0xff, 0xff, 0xff, 0xfb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf7, 0xff, 0xff, 0xff, 0x1d, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1b, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf4, 0xff, 0x85, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x17, 0x79, 0xff, 0xf9, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x19, 0x8c, 0xff, 0xff, 0xf3, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfb, 0xf7, 0xff, 0xff, 0x5b, 0x14, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x6d, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf7, 0xff, 0x8a, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x45, 0xff, 0xf3, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xb9, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1d, 0xff, 0xff, 0xf7, 0xf7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xef, 0xfb, 0xff, 0xff, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x19, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf0, 0xff, 0x37, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4d, 0xff, 0xf3, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x29, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x09, 0xe9, 0xff, 0xe2, 0xff, 0xff, 0xff, 0xff, 0xfb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf7, 0xff, 0xff, 0xff, 0xde, 0xff, 0xb6, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x13, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf7, 0xff, 0x91, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4c, 0xff, 0xf3, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc6, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x95, 0xff, 0xf4, 0xff, 0xd9, 0xcc, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xeb, 0xce, 0xfb, 0xf7, 0xff, 0x4b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfb, 0xff, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x78, 0xff, 0xf6, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x32, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3e, 0xff, 0xff, 0xff, 0xd5, 0x04, 0x00, 0x0f, 0xff, 0xff, 0xe8, 0xaf, 0xb5, 0xb4, 0xae, 0xe6, 0xff, 0xff, 0xb3, 0x03, 0x01, 0xcb, 0xff, 0xff, 0xff, 0x22, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf7, 0xff, 0x3d, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x19, 0xed, 0xff, 0xfc, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x23, 0xff, 0xff, 0xf8, 0xff, 0xdd, 0x02, 0x00, 0x00, 0x15, 0x79, 0x0d, 0x00, 0x01, 0x01, 0x00, 0x0a, 0x77, 0x3b, 0x01, 0x00, 0x02, 0xdf, 0xff, 0xf3, 0xff, 0xcb, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x19, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x26, 0x01, 0x02, 0x02, 0x03, 0x02, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x02, 0x4f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x1b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, 0xff, 0xf4, 0xff, 0xff, 0xff, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x88, 0xff, 0xff, 0xff, 0xf7, 0xff, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0d, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf7, 0xff, 0xff, 0xd5, 0xdc, 0xdf, 0xff, 0xe6, 0x0d, 0x00,
0x00, 0x00, 0x09, 0x11, 0x0b, 0x1a, 0x50, 0xb5, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x42, 0x02, 0x03, 0x04, 0x04, 0x05, 0x05, 0x04, 0x04, 0x04, 0x05, 0x03, 0x05, 0x13, 0x81, 0xff, 0xff, 0xff, 0xfb, 0xff, 0xff, 0x17, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0b, 0xff, 0xff, 0xfb, 0xff, 0xfb, 0xff, 0xb1, 0x11, 0x03, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x02, 0x33, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf8, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xe2, 0x01,
0x00, 0x20, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfc, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x99, 0x65, 0x81, 0x80, 0x89, 0x8b, 0x89, 0x88, 0x87, 0x89, 0x78, 0xaf, 0xff, 0xff, 0xfc, 0xff, 0xff, 0xff, 0xff, 0xff, 0x6d, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x15, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfb, 0xff, 0xff, 0x08,
0x0f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfc, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfc, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfc, 0xff, 0xff, 0xff, 0xff, 0xff, 0x36, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xb6, 0xff, 0xff, 0xff, 0xff, 0xfb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xec, 0x3a,
0x51, 0xff, 0xff, 0xfc, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x2c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xb3, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfb, 0xaf,
0x60, 0xf3, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x29, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xb7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfb, 0xff, 0xff,
0x3b, 0xed, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x21, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xb8, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfb, 0xff, 0xff,
0x3d, 0xed, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x24, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xb2, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x8e,
0x2d, 0xff, 0xff, 0xfc, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfc, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfc, 0xff, 0xff, 0xff, 0xff, 0xff, 0x39, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, 0xdd, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x0b,
0x0b, 0xf6, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfc, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x93, 0x56, 0x5b, 0x5b, 0x62, 0x62, 0x5a, 0x5c, 0x64, 0x53, 0x90, 0xff, 0xff, 0xfc, 0xff, 0xff, 0xff, 0xff, 0xff, 0x73, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4d, 0xff, 0xff, 0xfb, 0xff, 0xff, 0xff, 0xfb, 0xff, 0xff, 0xff, 0xff, 0x9f, 0x79, 0x85, 0x83, 0x83, 0x83, 0x83, 0x7e, 0x8b, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf8, 0xff, 0xff, 0xff, 0x60, 0x16, 0x0d, 0x08, 0x00,
0x00, 0x16, 0xa1, 0xff, 0xff, 0xf9, 0xff, 0xff, 0xff, 0xf9, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x94, 0x1d, 0x04, 0x02, 0x02, 0x02, 0x03, 0x03, 0x02, 0x02, 0x03, 0x02, 0x05, 0x11, 0x71, 0xff, 0xfc, 0xff, 0xfc, 0xff, 0xff, 0x4b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0d, 0xf8, 0xff, 0xfb, 0xff, 0xff, 0xf7, 0xff, 0xff, 0x2b, 0x03, 0x06, 0x03, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x37, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x32, 0x03, 0x01, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x05, 0x0c, 0x0b, 0x07, 0x19, 0x90, 0xff, 0xff, 0xf9, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x23, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x43, 0xff, 0xf6, 0xff, 0xff, 0xff, 0xb2, 0x05, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x3b, 0xff, 0xff, 0xff, 0xf8, 0xff, 0xff, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x14, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x3e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x50, 0xff, 0xfc, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2f, 0xff, 0xff, 0xf9, 0xff, 0xff, 0x29, 0x00, 0x02, 0x78, 0xed, 0x40, 0x01, 0x02, 0x02, 0x01, 0x20, 0x9e, 0x23, 0x00, 0x00, 0x02, 0xd9, 0xff, 0xfb, 0xff, 0xff, 0x32, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfb, 0xff, 0x1e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x7c, 0xff, 0xf6, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x2a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46, 0xff, 0xff, 0xff, 0xff, 0x58, 0x06, 0x2e, 0xff, 0xff, 0xff, 0xbc, 0xbe, 0xc1, 0xbc, 0xfc, 0xff, 0xff, 0x37, 0x02, 0x07, 0xd9, 0xff, 0xff, 0xff, 0x46, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x13, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x48, 0xff, 0xf3, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x25, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x68, 0xff, 0xff, 0xff, 0xff, 0xe8, 0xfc, 0xff, 0xf9, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xda, 0xd9, 0xf8, 0xff, 0xff, 0x80, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x15, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfb, 0xff, 0x54, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x55, 0xff, 0xf3, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x2e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x8d, 0xff, 0xe8, 0xff, 0xff, 0xff, 0xfc, 0xfc, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfc, 0xfc, 0xff, 0xff, 0xff, 0xef, 0xff, 0x6d, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x13, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf8, 0xff, 0x23, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3e, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xa1, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x17, 0xee, 0xff, 0xfc, 0xf3, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf5, 0xf8, 0xff, 0xd9, 0x0b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2a, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfb, 0xff, 0x6a, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0xff, 0xff, 0xfc, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x3d, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x6c, 0xff, 0xff, 0xfc, 0xf9, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf8, 0xff, 0xff, 0x76, 0x1b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfb, 0xff, 0x53, 0x09, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x29, 0x90, 0xff, 0xf9, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xed, 0x11, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x31, 0xa4, 0xff, 0xff, 0xfc, 0xfc, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf9, 0xff, 0xff, 0x48, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x37, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfb, 0xff, 0xff, 0xff, 0x84, 0x18, 0x01, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x13, 0x90, 0xff, 0xff, 0xfc, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x13, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x09, 0x35, 0x65, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf9, 0xff, 0xff, 0x4b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfb, 0xff, 0xff, 0xff, 0xff, 0x0a, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x03, 0x57, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x64, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0a, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfc, 0xff, 0xff, 0x41, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4d, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x5b, 0x01, 0x00, 0x00,
0x00, 0x00, 0x00, 0x05, 0x86, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfc, 0xff, 0xff, 0x14, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x11, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc4, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0xff, 0xff, 0xfb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfb, 0xff, 0xff, 0x09, 0x00, 0x00,
0x00, 0x01, 0x00, 0x1b, 0xff, 0xff, 0xfc, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7b, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x12, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x27, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x59, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xd1, 0x05, 0x00, 0x00,
0x00, 0x00, 0x00, 0x17, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfc, 0xff, 0xff, 0x7d, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x12, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x0c, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4a, 0xff, 0xff, 0xfb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x58, 0x01, 0x00, 0x00,
0x00, 0x00, 0x00, 0x07, 0x84, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf9, 0xff, 0xff, 0x79, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x12, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x11, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x35, 0xff, 0xff, 0xfb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfb, 0xff, 0xff, 0x15, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x27, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf9, 0xff, 0xff, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x12, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x11, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0xed, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf8, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x07, 0x00, 0x00, 0x00,
0x00, 0x00, 0x01, 0x00, 0x15, 0xff, 0xff, 0xfc, 0xff, 0xff, 0xfc, 0xff, 0xff, 0xff, 0xff, 0xf9, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x92, 0x0b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x12, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x11, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x8d, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xe9, 0x55, 0x35, 0xca, 0xd6, 0xca, 0xdc, 0xf8, 0x19, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x24, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xe8, 0xc6, 0xff, 0xff, 0xfc, 0xfc, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf9, 0xff, 0xff, 0xc8, 0x21, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x12, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x11, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x17, 0xce, 0xff, 0xff, 0xf7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf8, 0xff, 0xaa, 0x02, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x29, 0xbd, 0x9b, 0x99, 0xa3, 0x93, 0x25, 0x0b, 0x74, 0xf6, 0xf9, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf9, 0xff, 0xff, 0xd5, 0x2b, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x12, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x12, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0e, 0xb1, 0xff, 0xff, 0xf7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfb, 0xff, 0xff, 0x36, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x2c, 0xff, 0xff, 0xfc, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfc, 0xff, 0xff, 0xff, 0x7f, 0x02, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x12, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x12, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x48, 0xff, 0xff, 0xff, 0xfb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x74, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x87, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfc, 0xff, 0xff, 0xff, 0x7a, 0x09, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x12, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x12, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x12, 0x92, 0xff, 0xff, 0xff, 0xfb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfb, 0xff, 0xff, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x09, 0xc8, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf9, 0xff, 0xff, 0xcd, 0x38, 0x0a, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x13, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x13, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x3e, 0xf6, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x72, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x04, 0xa8, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfc, 0xff, 0xff, 0xff, 0xac, 0x31, 0x22, 0x02, 0x00, 0x00, 0x00, 0x01, 0x00, 0x13, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x0f, 0x00, 0x01, 0x00, 0x00, 0x00, 0x05, 0x1f, 0x23, 0x86, 0xff, 0xff, 0xff, 0xfb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x4e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x21, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x57, 0x1a, 0x08, 0x00, 0x00, 0x00, 0x0f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x1f, 0x00, 0x00, 0x00, 0x0f, 0x28, 0x68, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x9f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x75, 0x3b, 0x33, 0x12, 0x26, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x97, 0x3b, 0x2d, 0x39, 0xa3, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf8, 0xff, 0xff, 0x1e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4d, 0xff, 0xff, 0xfc, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc6, 0xac, 0xfc, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfc, 0xfc, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf8, 0xff, 0xb3, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4c, 0xff, 0xff, 0xf9, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfc, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xba, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0xe8, 0xff, 0xf9, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfb, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, 0xee, 0xff, 0xfc, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfb, 0xff, 0xff, 0xff, 0xff, 0xf9, 0xff, 0xff, 0xff, 0xff, 0xf9, 0xff, 0xe2, 0x0d, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0xd2, 0xff, 0xff, 0xf9, 0xff, 0xff, 0xff, 0xff, 0xfc, 0xfc, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf9, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf9, 0xff, 0xff, 0xff, 0x8b, 0x73, 0xff, 0xff, 0xff, 0xfb, 0xff, 0xf9, 0xff, 0xff, 0x8a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1b, 0xeb, 0xff, 0xff, 0xfc, 0xff, 0xff, 0xfc, 0xff, 0xff, 0xff, 0xdd, 0xd2, 0xe3, 0xff, 0xff, 0xfc, 0xfc, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf6, 0xff, 0xff, 0xfc, 0x4e, 0x03, 0x00, 0x39, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xbd, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0xe6, 0xff, 0xff, 0xf9, 0xff, 0xff, 0xff, 0xe8, 0x42, 0x09, 0x03, 0x0c, 0x93, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf9, 0xff, 0xff, 0x72, 0x07, 0x00, 0x00, 0x00, 0x00, 0x10, 0x66, 0xf6, 0xd8, 0xe6, 0x8b, 0x0b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0xd0, 0xff, 0xff, 0xff, 0xf6, 0x4e, 0x0b, 0x00, 0x00, 0x00, 0x00, 0x01, 0x37, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7b, 0x02, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x0c, 0x0f, 0x06, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x12, 0x9b, 0xa0, 0x91, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0xdd, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc7, 0x0b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x09, 0xe6, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfc, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xa7, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, 0xee, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf9, 0xf9, 0xf9, 0xfc, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf9, 0xf9, 0xf7, 0xff, 0xff, 0xfc, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xa7, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0xf1, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf9, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfc, 0xfc, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf9, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfc, 0xfc, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xcf, 0x17, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x53, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfc, 0xff, 0xff, 0x66, 0x3a, 0x50, 0xaf, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf9, 0xff, 0xff, 0x58, 0x40, 0x4e, 0x3f, 0x2e, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7b, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0xff, 0xff, 0xf9, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfc, 0xff, 0xff, 0x59, 0x00, 0x00, 0x00, 0x24, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x46, 0x00, 0x00, 0x00, 0x00, 0x00, 0x29, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfa, 0xff, 0xc2, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0xc1, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xa0, 0x05, 0x00, 0x01, 0x00, 0x0c, 0xf9, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xce, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x09, 0x82, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x28, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfc, 0xff, 0xff, 0xff, 0x29, 0x00, 0x00, 0x00, 0x00, 0x10, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x52, 0x02, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x2f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x68, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x23, 0x95, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x50, 0x00, 0x00, 0x01, 0x00, 0x00, 0x12, 0xff, 0xff, 0xfc, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x16, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x68, 0xff, 0xff, 0xff, 0xff, 0x6a, 0x25, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x0a, 0x16, 0x39, 0xeb, 0xff, 0x63, 0x17, 0x02, 0x00, 0x01, 0x00, 0x00, 0x00, 0x0f, 0xee, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfc, 0xff, 0xff, 0x11, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x04, 0x1e, 0x1e, 0x1f, 0x1c, 0x06, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x12, 0x1a, 0x04, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x0a, 0xb8, 0xff, 0xe7, 0xe2, 0xe4, 0xe7, 0xff, 0xf7, 0x28, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x09, 0x0c, 0x0c, 0x0b, 0x10, 0x18, 0x12, 0x0b, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
};
const lv_img_dsc_t img_benchmark_cogwheel_rgb565a8 = {
.header.cf = LV_IMG_CF_RGB565A8,
.header.always_zero = 0,
.header.reserved = 0,
.header.w = 100,
.header.h = 100,
.data_size = 30000,
.data = img_benchmark_cogwheel_rgb565a8_map,
};

View File

@@ -42,11 +42,6 @@
#define LINE_POINT_DIFF_MAX LV_MAX(LV_HOR_RES / (LINE_POINT_NUM + 2), LINE_POINT_DIFF_MIN * 2)
#define ARC_WIDTH_THIN LV_MAX(LV_DPI_DEF / 50, 2)
#define ARC_WIDTH_THICK LV_MAX(LV_DPI_DEF / 10, 5)
#ifndef dimof
#define dimof(__array) (sizeof(__array) / sizeof(__array[0]))
#endif
/**********************
* TYPEDEFS
**********************/
@@ -61,7 +56,7 @@ typedef struct {
uint32_t fps_normal;
uint32_t fps_opa;
uint8_t weight;
} scene_dsc_t;
}scene_dsc_t;
/**********************
* STATIC PROTOTYPES
@@ -69,16 +64,8 @@ typedef struct {
static lv_style_t style_common;
static bool opa_mode = true;
static bool run_max_speed = false;
static finished_cb_t * benchmark_finished_cb = NULL;
static uint32_t disp_ori_timer_period;
static uint32_t anim_ori_timer_period;
#if LV_DEMO_BENCHMARK_RGB565A8 && LV_COLOR_DEPTH == 16
LV_IMG_DECLARE(img_benchmark_cogwheel_rgb565a8);
#else
LV_IMG_DECLARE(img_benchmark_cogwheel_argb);
#endif
LV_IMG_DECLARE(img_benchmark_cogwheel_argb);
LV_IMG_DECLARE(img_benchmark_cogwheel_rgb);
LV_IMG_DECLARE(img_benchmark_cogwheel_chroma_keyed);
LV_IMG_DECLARE(img_benchmark_cogwheel_indexed16);
@@ -89,7 +76,7 @@ LV_FONT_DECLARE(lv_font_benchmark_montserrat_16_compr_az);
LV_FONT_DECLARE(lv_font_benchmark_montserrat_28_compr_az);
static void monitor_cb(lv_disp_drv_t * drv, uint32_t time, uint32_t px);
static void next_scene_timer_cb(lv_timer_t * timer);
static void scene_next_task_cb(lv_timer_t * timer);
static void rect_create(lv_style_t * style);
static void img_create(lv_style_t * style, const void * src, bool rotate, bool zoom, bool aa);
static void txt_create(lv_style_t * style);
@@ -98,7 +85,6 @@ static void arc_create(lv_style_t * style);
static void fall_anim(lv_obj_t * obj);
static void rnd_reset(void);
static int32_t rnd_next(int32_t min, int32_t max);
static void report_cb(lv_timer_t * timer);
static void rectangle_cb(void)
{
@@ -226,6 +212,7 @@ static void shadow_small_ofs_cb(void)
rect_create(&style_common);
}
static void shadow_large_cb(void)
{
lv_style_reset(&style_common);
@@ -249,6 +236,7 @@ static void shadow_large_ofs_cb(void)
rect_create(&style_common);
}
static void img_rgb_cb(void)
{
lv_style_reset(&style_common);
@@ -260,12 +248,8 @@ static void img_argb_cb(void)
{
lv_style_reset(&style_common);
lv_style_set_img_opa(&style_common, opa_mode ? LV_OPA_50 : LV_OPA_COVER);
#if LV_DEMO_BENCHMARK_RGB565A8 && LV_COLOR_DEPTH == 16
img_create(&style_common, &img_benchmark_cogwheel_rgb565a8, false, false, false);
#else
img_create(&style_common, &img_benchmark_cogwheel_argb, false, false, false);
#endif
}
static void img_ckey_cb(void)
@@ -291,6 +275,7 @@ static void img_alpha_cb(void)
img_create(&style_common, &img_benchmark_cogwheel_alpha16, false, false, false);
}
static void img_rgb_recolor_cb(void)
{
lv_style_reset(&style_common);
@@ -305,11 +290,7 @@ static void img_argb_recolor_cb(void)
lv_style_reset(&style_common);
lv_style_set_img_opa(&style_common, opa_mode ? LV_OPA_50 : LV_OPA_COVER);
lv_style_set_img_recolor_opa(&style_common, LV_OPA_50);
#if LV_DEMO_BENCHMARK_RGB565A8 && LV_COLOR_DEPTH == 16
img_create(&style_common, &img_benchmark_cogwheel_rgb565a8, false, false, false);
#else
img_create(&style_common, &img_benchmark_cogwheel_argb, false, false, false);
#endif
}
static void img_ckey_recolor_cb(void)
@@ -347,22 +328,14 @@ static void img_argb_rot_cb(void)
{
lv_style_reset(&style_common);
lv_style_set_img_opa(&style_common, opa_mode ? LV_OPA_50 : LV_OPA_COVER);
#if LV_DEMO_BENCHMARK_RGB565A8 && LV_COLOR_DEPTH == 16
img_create(&style_common, &img_benchmark_cogwheel_rgb565a8, true, false, false);
#else
img_create(&style_common, &img_benchmark_cogwheel_argb, true, false, false);
#endif
}
static void img_argb_rot_aa_cb(void)
{
lv_style_reset(&style_common);
lv_style_set_img_opa(&style_common, opa_mode ? LV_OPA_50 : LV_OPA_COVER);
#if LV_DEMO_BENCHMARK_RGB565A8 && LV_COLOR_DEPTH == 16
img_create(&style_common, &img_benchmark_cogwheel_rgb565a8, true, false, true);
#else
img_create(&style_common, &img_benchmark_cogwheel_argb, true, false, true);
#endif
}
static void img_rgb_zoom_cb(void)
@@ -379,28 +352,22 @@ static void img_rgb_zoom_aa_cb(void)
lv_style_set_img_opa(&style_common, opa_mode ? LV_OPA_50 : LV_OPA_COVER);
img_create(&style_common, &img_benchmark_cogwheel_rgb, false, true, true);
}
static void img_argb_zoom_cb(void)
{
lv_style_reset(&style_common);
lv_style_set_img_opa(&style_common, opa_mode ? LV_OPA_50 : LV_OPA_COVER);
#if LV_DEMO_BENCHMARK_RGB565A8 && LV_COLOR_DEPTH == 16
img_create(&style_common, &img_benchmark_cogwheel_rgb565a8, false, true, false);
#else
img_create(&style_common, &img_benchmark_cogwheel_argb, false, true, false);
#endif
}
static void img_argb_zoom_aa_cb(void)
{
lv_style_reset(&style_common);
lv_style_set_img_opa(&style_common, opa_mode ? LV_OPA_50 : LV_OPA_COVER);
#if LV_DEMO_BENCHMARK_RGB565A8 && LV_COLOR_DEPTH == 16
img_create(&style_common, &img_benchmark_cogwheel_rgb565a8, false, true, true);
#else
img_create(&style_common, &img_benchmark_cogwheel_argb, false, true, true);
#endif
}
static void txt_small_cb(void)
@@ -457,6 +424,7 @@ static void txt_large_compr_cb(void)
}
static void line_cb(void)
{
lv_style_reset(&style_common);
@@ -484,6 +452,7 @@ static void arc_thick_cb(void)
}
static void sub_rectangle_cb(void)
{
lv_style_reset(&style_common);
@@ -522,11 +491,8 @@ static void sub_img_cb(void)
lv_style_reset(&style_common);
lv_style_set_img_opa(&style_common, opa_mode ? LV_OPA_50 : LV_OPA_COVER);
lv_style_set_blend_mode(&style_common, LV_BLEND_MODE_SUBTRACTIVE);
#if LV_DEMO_BENCHMARK_RGB565A8 && LV_COLOR_DEPTH == 16
img_create(&style_common, &img_benchmark_cogwheel_rgb565a8, false, false, false);
#else
img_create(&style_common, &img_benchmark_cogwheel_argb, false, false, false);
#endif
}
static void sub_line_cb(void)
{
@@ -556,70 +522,71 @@ static void sub_text_cb(void)
txt_create(&style_common);
}
/**********************
* STATIC VARIABLES
**********************/
static scene_dsc_t scenes[] = {
{.name = "Rectangle", .weight = 30, .create_cb = rectangle_cb},
{.name = "Rectangle rounded", .weight = 20, .create_cb = rectangle_rounded_cb},
{.name = "Circle", .weight = 10, .create_cb = rectangle_circle_cb},
{.name = "Border", .weight = 20, .create_cb = border_cb},
{.name = "Border rounded", .weight = 30, .create_cb = border_rounded_cb},
{.name = "Circle border", .weight = 10, .create_cb = border_circle_cb},
{.name = "Border top", .weight = 3, .create_cb = border_top_cb},
{.name = "Border left", .weight = 3, .create_cb = border_left_cb},
{.name = "Border top + left", .weight = 3, .create_cb = border_top_left_cb},
{.name = "Border left + right", .weight = 3, .create_cb = border_left_right_cb},
{.name = "Border top + bottom", .weight = 3, .create_cb = border_top_bottom_cb},
{.name = "Rectangle", .weight = 30, .create_cb = rectangle_cb},
{.name = "Rectangle rounded", .weight = 20, .create_cb = rectangle_rounded_cb},
{.name = "Circle", .weight = 10, .create_cb = rectangle_circle_cb},
{.name = "Border", .weight = 20, .create_cb = border_cb},
{.name = "Border rounded", .weight = 30, .create_cb = border_rounded_cb},
{.name = "Circle border", .weight = 10, .create_cb = border_circle_cb},
{.name = "Border top", .weight = 3, .create_cb = border_top_cb},
{.name = "Border left", .weight = 3, .create_cb = border_left_cb},
{.name = "Border top + left", .weight = 3, .create_cb = border_top_left_cb},
{.name = "Border left + right", .weight = 3, .create_cb = border_left_right_cb},
{.name = "Border top + bottom", .weight = 3, .create_cb = border_top_bottom_cb},
{.name = "Shadow small", .weight = 3, .create_cb = shadow_small_cb},
{.name = "Shadow small offset", .weight = 5, .create_cb = shadow_small_ofs_cb},
{.name = "Shadow large", .weight = 5, .create_cb = shadow_large_cb},
{.name = "Shadow large offset", .weight = 3, .create_cb = shadow_large_ofs_cb},
{.name = "Shadow small", .weight = 3, .create_cb = shadow_small_cb},
{.name = "Shadow small offset", .weight = 5, .create_cb = shadow_small_ofs_cb},
{.name = "Shadow large", .weight = 5, .create_cb = shadow_large_cb},
{.name = "Shadow large offset", .weight = 3, .create_cb = shadow_large_ofs_cb},
{.name = "Image RGB", .weight = 20, .create_cb = img_rgb_cb},
{.name = "Image ARGB", .weight = 20, .create_cb = img_argb_cb},
{.name = "Image chorma keyed", .weight = 5, .create_cb = img_ckey_cb},
{.name = "Image indexed", .weight = 5, .create_cb = img_index_cb},
{.name = "Image alpha only", .weight = 5, .create_cb = img_alpha_cb},
{.name = "Image RGB", .weight = 20, .create_cb = img_rgb_cb},
{.name = "Image ARGB", .weight = 20, .create_cb = img_argb_cb},
{.name = "Image chorma keyed", .weight = 5, .create_cb = img_ckey_cb},
{.name = "Image indexed", .weight = 5, .create_cb = img_index_cb},
{.name = "Image alpha only", .weight = 5, .create_cb = img_alpha_cb},
{.name = "Image RGB recolor", .weight = 5, .create_cb = img_rgb_recolor_cb},
{.name = "Image ARGB recolor", .weight = 20, .create_cb = img_argb_recolor_cb},
{.name = "Image chorma keyed recolor", .weight = 3, .create_cb = img_ckey_recolor_cb},
{.name = "Image indexed recolor", .weight = 3, .create_cb = img_index_recolor_cb},
{.name = "Image RGB recolor", .weight = 5, .create_cb = img_rgb_recolor_cb},
{.name = "Image ARGB recolor", .weight = 20, .create_cb = img_argb_recolor_cb},
{.name = "Image chorma keyed recolor", .weight = 3, .create_cb = img_ckey_recolor_cb},
{.name = "Image indexed recolor", .weight = 3, .create_cb = img_index_recolor_cb},
{.name = "Image RGB rotate", .weight = 3, .create_cb = img_rgb_rot_cb},
{.name = "Image RGB rotate anti aliased", .weight = 3, .create_cb = img_rgb_rot_aa_cb},
{.name = "Image ARGB rotate", .weight = 5, .create_cb = img_argb_rot_cb},
{.name = "Image ARGB rotate anti aliased", .weight = 5, .create_cb = img_argb_rot_aa_cb},
{.name = "Image RGB zoom", .weight = 3, .create_cb = img_rgb_zoom_cb},
{.name = "Image RGB zoom anti aliased", .weight = 3, .create_cb = img_rgb_zoom_aa_cb},
{.name = "Image ARGB zoom", .weight = 5, .create_cb = img_argb_zoom_cb},
{.name = "Image ARGB zoom anti aliased", .weight = 5, .create_cb = img_argb_zoom_aa_cb},
{.name = "Image RGB rotate", .weight = 3, .create_cb = img_rgb_rot_cb},
{.name = "Image RGB rotate anti aliased", .weight = 3, .create_cb = img_rgb_rot_aa_cb},
{.name = "Image ARGB rotate", .weight = 5, .create_cb = img_argb_rot_cb},
{.name = "Image ARGB rotate anti aliased", .weight = 5, .create_cb = img_argb_rot_aa_cb},
{.name = "Image RGB zoom", .weight = 3, .create_cb = img_rgb_zoom_cb},
{.name = "Image RGB zoom anti aliased", .weight = 3, .create_cb = img_rgb_zoom_aa_cb},
{.name = "Image ARGB zoom", .weight = 5, .create_cb = img_argb_zoom_cb},
{.name = "Image ARGB zoom anti aliased", .weight = 5, .create_cb = img_argb_zoom_aa_cb},
{.name = "Text small", .weight = 20, .create_cb = txt_small_cb},
{.name = "Text medium", .weight = 30, .create_cb = txt_medium_cb},
{.name = "Text large", .weight = 20, .create_cb = txt_large_cb},
{.name = "Text small", .weight = 20, .create_cb = txt_small_cb},
{.name = "Text medium", .weight = 30, .create_cb = txt_medium_cb},
{.name = "Text large", .weight = 20, .create_cb = txt_large_cb},
{.name = "Text small compressed", .weight = 3, .create_cb = txt_small_compr_cb},
{.name = "Text medium compressed", .weight = 5, .create_cb = txt_medium_compr_cb},
{.name = "Text large compressed", .weight = 10, .create_cb = txt_large_compr_cb},
{.name = "Text small compressed", .weight = 3, .create_cb = txt_small_compr_cb},
{.name = "Text medium compressed", .weight = 5, .create_cb = txt_medium_compr_cb},
{.name = "Text large compressed", .weight = 10, .create_cb = txt_large_compr_cb},
{.name = "Line", .weight = 10, .create_cb = line_cb},
{.name = "Line", .weight = 10, .create_cb = line_cb},
{.name = "Arc think", .weight = 10, .create_cb = arc_think_cb},
{.name = "Arc thick", .weight = 10, .create_cb = arc_thick_cb},
{.name = "Arc think", .weight = 10, .create_cb = arc_think_cb},
{.name = "Arc thick", .weight = 10, .create_cb = arc_thick_cb},
{.name = "Substr. rectangle", .weight = 10, .create_cb = sub_rectangle_cb},
{.name = "Substr. border", .weight = 10, .create_cb = sub_border_cb},
{.name = "Substr. shadow", .weight = 10, .create_cb = sub_shadow_cb},
{.name = "Substr. image", .weight = 10, .create_cb = sub_img_cb},
{.name = "Substr. line", .weight = 10, .create_cb = sub_line_cb},
{.name = "Substr. arc", .weight = 10, .create_cb = sub_arc_cb},
{.name = "Substr. text", .weight = 10, .create_cb = sub_text_cb},
{.name = "Substr. rectangle", .weight = 10, .create_cb = sub_rectangle_cb},
{.name = "Substr. border", .weight = 10, .create_cb = sub_border_cb},
{.name = "Substr. shadow", .weight = 10, .create_cb = sub_shadow_cb},
{.name = "Substr. image", .weight = 10, .create_cb = sub_img_cb},
{.name = "Substr. line", .weight = 10, .create_cb = sub_line_cb},
{.name = "Substr. arc", .weight = 10, .create_cb = sub_arc_cb},
{.name = "Substr. text", .weight = 10, .create_cb = sub_text_cb},
{.name = "", .create_cb = NULL}
{.name = "", .create_cb = NULL}
};
static int32_t scene_act = -1;
@@ -627,25 +594,25 @@ static lv_obj_t * scene_bg;
static lv_obj_t * title;
static lv_obj_t * subtitle;
static uint32_t rnd_act;
static lv_timer_t * next_scene_timer;
static const uint32_t rnd_map[] = {
0xbd13204f, 0x67d8167f, 0x20211c99, 0xb0a7cc05,
0x06d5c703, 0xeafb01a7, 0xd0473b5c, 0xc999aaa2,
0x86f9d5d9, 0x294bdb29, 0x12a3c207, 0x78914d14,
0x10a30006, 0x6134c7db, 0x194443af, 0x142d1099,
0x376292d5, 0x20f433c5, 0x074d2a59, 0x4e74c293,
0x072a0810, 0xdd0f136d, 0x5cca6dbc, 0x623bfdd8,
0xb645eb2f, 0xbe50894a, 0xc9b56717, 0xe0f912c8,
0x4f6b5e24, 0xfe44b128, 0xe12d57a8, 0x9b15c9cc,
0xab2ae1d3, 0xb4dc5074, 0x67d457c8, 0x8e46b00c,
0xa29a1871, 0xcee40332, 0x80f93aa1, 0x85286096,
0x09bd6b49, 0x95072088, 0x2093924b, 0x6a27328f,
0xa796079b, 0xc3b488bc, 0xe29bcce0, 0x07048a4c,
0x7d81bd99, 0x27aacb30, 0x44fc7a0e, 0xa2382241,
0x8357a17d, 0x97e9c9cc, 0xad10ff52, 0x9923fc5c,
0x8f2c840a, 0x20356ba2, 0x7997a677, 0x9a7f1800,
0x35c7562b, 0xd901fe51, 0x8f4e053d, 0xa5b94923,
static uint32_t rnd_map[] = {
0xbd13204f, 0x67d8167f, 0x20211c99, 0xb0a7cc05,
0x06d5c703, 0xeafb01a7, 0xd0473b5c, 0xc999aaa2,
0x86f9d5d9, 0x294bdb29, 0x12a3c207, 0x78914d14,
0x10a30006, 0x6134c7db, 0x194443af, 0x142d1099,
0x376292d5, 0x20f433c5, 0x074d2a59, 0x4e74c293,
0x072a0810, 0xdd0f136d, 0x5cca6dbc, 0x623bfdd8,
0xb645eb2f, 0xbe50894a, 0xc9b56717, 0xe0f912c8,
0x4f6b5e24, 0xfe44b128, 0xe12d57a8, 0x9b15c9cc,
0xab2ae1d3, 0xb4dc5074, 0x67d457c8, 0x8e46b00c,
0xa29a1871, 0xcee40332, 0x80f93aa1, 0x85286096,
0x09bd6b49, 0x95072088, 0x2093924b, 0x6a27328f,
0xa796079b, 0xc3b488bc, 0xe29bcce0, 0x07048a4c,
0x7d81bd99, 0x27aacb30, 0x44fc7a0e, 0xa2382241,
0x8357a17d, 0x97e9c9cc, 0xad10ff52, 0x9923fc5c,
0x8f2c840a, 0x20356ba2, 0x7997a677, 0x9a7f1800,
0x35c7562b, 0xd901fe51, 0x8f4e053d, 0xa5b94923,
};
/**********************
@@ -656,23 +623,11 @@ static const uint32_t rnd_map[] = {
* GLOBAL FUNCTIONS
**********************/
static void benchmark_init(void)
void lv_demo_benchmark(void)
{
lv_disp_t * disp = lv_disp_get_default();
lv_disp_t * disp = lv_disp_get_next(NULL);
disp->driver->monitor_cb = monitor_cb;
/*Force to run at maximum frame rate*/
if(run_max_speed) {
if(disp->refr_timer) {
disp_ori_timer_period = disp->refr_timer->period;
lv_timer_set_period(disp->refr_timer, 1);
}
lv_timer_t * anim_timer = lv_anim_get_timer();
anim_ori_timer_period = anim_timer->period;
lv_timer_set_period(anim_timer, 1);
}
lv_obj_t * scr = lv_scr_act();
lv_obj_remove_style_all(scr);
lv_obj_set_style_bg_opa(scr, LV_OPA_COVER, 0);
@@ -691,63 +646,9 @@ static void benchmark_init(void)
lv_style_init(&style_common);
lv_obj_update_layout(scr);
}
void lv_demo_benchmark(void)
{
benchmark_init();
/*Manually start scenes*/
next_scene_timer_cb(NULL);
}
void lv_demo_benchmark_close(void)
{
if(next_scene_timer) lv_timer_del(next_scene_timer);
next_scene_timer = NULL;
lv_anim_del(NULL, NULL);
lv_style_reset(&style_common);
lv_obj_clean(lv_scr_act());
}
void lv_demo_benchmark_run_scene(int_fast16_t scene_no)
{
benchmark_init();
if(((scene_no >> 1) >= dimof(scenes))) {
/* invalid scene number */
return ;
}
opa_mode = scene_no & 0x01;
scene_act = scene_no >> 1;
if(scenes[scene_act].create_cb) {
lv_label_set_text_fmt(title, "%"LV_PRId32"/%"LV_PRId32": %s%s", scene_act * 2 + (opa_mode ? 1 : 0),
(int32_t)(dimof(scenes) * 2) - 2,
scenes[scene_act].name, opa_mode ? " + opa" : "");
lv_label_set_text(subtitle, "");
rnd_reset();
scenes[scene_act].create_cb();
lv_timer_t * t = lv_timer_create(report_cb, SCENE_TIME, NULL);
lv_timer_set_repeat_count(t, 1);
}
}
void lv_demo_benchmark_set_finished_cb(finished_cb_t * finished_cb)
{
benchmark_finished_cb = finished_cb;
}
void lv_demo_benchmark_set_max_speed(bool en)
{
run_max_speed = en;
scene_next_task_cb(NULL);
}
/**********************
@@ -761,281 +662,208 @@ static void monitor_cb(lv_disp_drv_t * drv, uint32_t time, uint32_t px)
if(opa_mode) {
scenes[scene_act].refr_cnt_opa ++;
scenes[scene_act].time_sum_opa += time;
}
else {
} else {
scenes[scene_act].refr_cnt_normal ++;
scenes[scene_act].time_sum_normal += time;
}
// lv_obj_invalidate(lv_scr_act());
// lv_obj_invalidate(lv_scr_act());
}
static void generate_report(void)
{
uint32_t weight_sum = 0;
uint32_t weight_normal_sum = 0;
uint32_t weight_opa_sum = 0;
uint32_t fps_sum = 0;
uint32_t fps_normal_sum = 0;
uint32_t fps_opa_sum = 0;
uint32_t i;
for(i = 0; scenes[i].create_cb; i++) {
fps_normal_sum += scenes[i].fps_normal * scenes[i].weight;
weight_normal_sum += scenes[i].weight;
uint32_t w = LV_MAX(scenes[i].weight / 2, 1);
fps_opa_sum += scenes[i].fps_opa * w;
weight_opa_sum += w;
}
fps_sum = fps_normal_sum + fps_opa_sum;
weight_sum = weight_normal_sum + weight_opa_sum;
uint32_t fps_weighted = fps_sum / weight_sum;
uint32_t fps_normal_unweighted = fps_normal_sum / weight_normal_sum;
uint32_t fps_opa_unweighted = fps_opa_sum / weight_opa_sum;
uint32_t opa_speed_pct = (fps_opa_unweighted * 100) / fps_normal_unweighted;
if(NULL != benchmark_finished_cb) {
(*benchmark_finished_cb)();
}
lv_obj_clean(lv_scr_act());
scene_bg = NULL;
lv_obj_set_flex_flow(lv_scr_act(), LV_FLEX_FLOW_COLUMN);
title = lv_label_create(lv_scr_act());
lv_label_set_text_fmt(title, "Weighted FPS: %"LV_PRIu32, fps_weighted);
subtitle = lv_label_create(lv_scr_act());
lv_label_set_text_fmt(subtitle, "Opa. speed: %"LV_PRIu32"%%", opa_speed_pct);
lv_coord_t w = lv_obj_get_content_width(lv_scr_act());
lv_obj_t * table = lv_table_create(lv_scr_act());
// lv_obj_clean_style_list(table, LV_PART_MAIN);
lv_table_set_col_cnt(table, 2);
lv_table_set_col_width(table, 0, (w * 3) / 4 - 3);
lv_table_set_col_width(table, 1, w / 4 - 3);
lv_obj_set_width(table, lv_pct(100));
// static lv_style_t style_cell_slow;
// static lv_style_t style_cell_very_slow;
// static lv_style_t style_cell_title;
//
// lv_style_init(&style_cell_title);
// lv_style_set_bg_color(&style_cell_title, LV_STATE_DEFAULT, lv_palette_main(LV_PALETTE_GREY));
// lv_style_set_bg_opa(&style_cell_title, LV_STATE_DEFAULT, LV_OPA_50);
//
// lv_style_init(&style_cell_slow);
// lv_style_set_text_color(&style_cell_slow, LV_STATE_DEFAULT, LV_COLOR_ORANGE);
//
// lv_style_init(&style_cell_very_slow);
// lv_style_set_text_color(&style_cell_very_slow, LV_STATE_DEFAULT, lv_palette_main(LV_PALETTE_RED));
// lv_obj_add_style(table, LV_TABLE_PART_CELL2, &style_cell_slow);
// lv_obj_add_style(table, LV_TABLE_PART_CELL3, &style_cell_very_slow);
// lv_obj_add_style(table, LV_TABLE_PART_CELL4, &style_cell_title);
uint16_t row = 0;
lv_table_add_cell_ctrl(table, row, 0, LV_TABLE_CELL_CTRL_MERGE_RIGHT);
lv_table_set_cell_value(table, row, 0, "Slow but common cases");
// lv_table_set_cell_type(table, row, 0, 4);
LV_LOG("\r\n"
"LVGL v%d.%d.%d " LVGL_VERSION_INFO
" Benchmark (in csv format)\r\n",
LVGL_VERSION_MAJOR, LVGL_VERSION_MINOR, LVGL_VERSION_PATCH);
LV_LOG("Weighted FPS: %"LV_PRIu32"\r\n", fps_weighted);
LV_LOG("Opa. speed: %"LV_PRIu32"%%\r\n", opa_speed_pct);
row++;
char buf[256];
for(i = 0; scenes[i].create_cb; i++) {
if(scenes[i].fps_normal < 20 && scenes[i].weight >= 10) {
lv_table_set_cell_value(table, row, 0, scenes[i].name);
lv_snprintf(buf, sizeof(buf), "%"LV_PRIu32, scenes[i].fps_normal);
lv_table_set_cell_value(table, row, 1, buf);
// lv_table_set_cell_type(table, row, 0, 2);
// lv_table_set_cell_type(table, row, 1, 2);
//LV_LOG("%s,%s\r\n", scenes[i].name, buf);
row++;
}
if(scenes[i].fps_opa < 20 && LV_MAX(scenes[i].weight / 2, 1) >= 10) {
lv_snprintf(buf, sizeof(buf), "%s + opa", scenes[i].name);
lv_table_set_cell_value(table, row, 0, buf);
//LV_LOG("%s,", buf);
lv_snprintf(buf, sizeof(buf), "%"LV_PRIu32, scenes[i].fps_opa);
lv_table_set_cell_value(table, row, 1, buf);
// lv_table_set_cell_type(table, row, 0, 2);
// lv_table_set_cell_type(table, row, 1, 2);
//LV_LOG("%s\r\n", buf);
row++;
}
}
/*No 'slow but common cases'*/
if(row == 1) {
lv_table_add_cell_ctrl(table, row, 0, LV_TABLE_CELL_CTRL_MERGE_RIGHT);
lv_table_set_cell_value(table, row, 0, "All good");
row++;
}
lv_table_add_cell_ctrl(table, row, 0, LV_TABLE_CELL_CTRL_MERGE_RIGHT);
lv_table_set_cell_value(table, row, 0, "All cases");
// lv_table_set_cell_type(table, row, 0, 4);
row++;
for(i = 0; scenes[i].create_cb; i++) {
lv_table_set_cell_value(table, row, 0, scenes[i].name);
lv_snprintf(buf, sizeof(buf), "%"LV_PRIu32, scenes[i].fps_normal);
lv_table_set_cell_value(table, row, 1, buf);
if(scenes[i].fps_normal < 10) {
// lv_table_set_cell_type(table, row, 0, 3);
// lv_table_set_cell_type(table, row, 1, 3);
}
else if(scenes[i].fps_normal < 20) {
// lv_table_set_cell_type(table, row, 0, 2);
// lv_table_set_cell_type(table, row, 1, 2);
}
LV_LOG("%s,%s\r\n", scenes[i].name, buf);
row++;
lv_snprintf(buf, sizeof(buf), "%s + opa", scenes[i].name);
lv_table_set_cell_value(table, row, 0, buf);
LV_LOG("%s,", buf);
lv_snprintf(buf, sizeof(buf), "%"LV_PRIu32, scenes[i].fps_opa);
lv_table_set_cell_value(table, row, 1, buf);
if(scenes[i].fps_opa < 10) {
// lv_table_set_cell_type(table, row, 0, 3);
// lv_table_set_cell_type(table, row, 1, 3);
}
else if(scenes[i].fps_opa < 20) {
// lv_table_set_cell_type(table, row, 0, 2);
// lv_table_set_cell_type(table, row, 1, 2);
}
LV_LOG("%s\r\n", buf);
row++;
}
// lv_page_set_scrl_layout(page, LV_LAYOUT_COLUMN_LEFT);
}
static void report_cb(lv_timer_t * timer)
{
if(NULL != benchmark_finished_cb) {
(*benchmark_finished_cb)();
}
if(opa_mode) {
if(scene_act >= 0) {
if(scenes[scene_act].time_sum_opa == 0) scenes[scene_act].time_sum_opa = 1;
scenes[scene_act].fps_opa = (1000 * scenes[scene_act].refr_cnt_opa) / scenes[scene_act].time_sum_opa;
}
lv_label_set_text_fmt(subtitle, "Result : %"LV_PRId32" FPS",
scenes[scene_act].fps_opa);
LV_LOG("Result of \"%s + opa\": %"LV_PRId32" FPS", scenes[scene_act].name,
scenes[scene_act].fps_opa);
}
else {
if(scenes[scene_act].time_sum_normal == 0) scenes[scene_act].time_sum_normal = 1;
scenes[scene_act].fps_normal = (1000 * scenes[scene_act].refr_cnt_normal) / scenes[scene_act].time_sum_normal;
lv_label_set_text_fmt(subtitle, "Result : %"LV_PRId32" FPS",
scenes[scene_act].fps_normal);
LV_LOG("Result of \"%s\": %"LV_PRId32" FPS", scenes[scene_act].name,
scenes[scene_act].fps_normal);
}
}
static void next_scene_timer_cb(lv_timer_t * timer)
static void scene_next_task_cb(lv_timer_t * timer)
{
LV_UNUSED(timer);
lv_obj_clean(scene_bg);
next_scene_timer = NULL;
if(opa_mode) {
if(scene_act >= 0) {
if(scenes[scene_act].time_sum_opa == 0) scenes[scene_act].time_sum_opa = 1;
scenes[scene_act].fps_opa = (1000 * scenes[scene_act].refr_cnt_opa) / scenes[scene_act].time_sum_opa;
if(scenes[scene_act].create_cb) scene_act++; /*If still there are scenes go to the next*/
}
else {
scene_act++;
} else {
scene_act ++;
}
opa_mode = false;
}
else {
} else {
if(scenes[scene_act].time_sum_normal == 0) scenes[scene_act].time_sum_normal = 1;
scenes[scene_act].fps_normal = (1000 * scenes[scene_act].refr_cnt_normal) / scenes[scene_act].time_sum_normal;
opa_mode = true;
}
if(scenes[scene_act].create_cb) {
lv_label_set_text_fmt(title, "%"LV_PRId32"/%"LV_PRId32": %s%s", scene_act * 2 + (opa_mode ? 1 : 0),
(int32_t)(dimof(scenes) * 2) - 2, scenes[scene_act].name, opa_mode ? " + opa" : "");
lv_label_set_text_fmt(title, "%"LV_PRId32"/%d: %s%s", scene_act * 2 + (opa_mode ? 1 : 0), (sizeof(scenes) / sizeof(scene_dsc_t) * 2) - 2, scenes[scene_act].name, opa_mode ? " + opa" : "");
if(opa_mode) {
lv_label_set_text_fmt(subtitle, "Result of \"%s\": %"LV_PRId32" FPS", scenes[scene_act].name,
scenes[scene_act].fps_normal);
}
else {
lv_label_set_text_fmt(subtitle, "Result of \"%s\": %"LV_PRId32" FPS", scenes[scene_act].name, scenes[scene_act].fps_normal);
} else {
if(scene_act > 0) {
lv_label_set_text_fmt(subtitle, "Result of \"%s + opa\": %"LV_PRId32" FPS", scenes[scene_act - 1].name,
scenes[scene_act - 1].fps_opa);
}
else {
lv_label_set_text_fmt(subtitle, "Result of \"%s + opa\": %"LV_PRId32" FPS", scenes[scene_act - 1].name, scenes[scene_act - 1].fps_opa);
} else {
lv_label_set_text(subtitle, "");
}
}
rnd_reset();
scenes[scene_act].create_cb();
next_scene_timer = lv_timer_create(next_scene_timer_cb, SCENE_TIME, NULL);
lv_timer_set_repeat_count(next_scene_timer, 1);
lv_timer_t * t = lv_timer_create(scene_next_task_cb, SCENE_TIME, NULL);
lv_timer_set_repeat_count(t, 1);
}
/*Ready*/
else {
uint32_t weight_sum = 0;
uint32_t weight_normal_sum = 0;
uint32_t weight_opa_sum = 0;
uint32_t fps_sum = 0;
uint32_t fps_normal_sum = 0;
uint32_t fps_opa_sum = 0;
uint32_t i;
for(i = 0; scenes[i].create_cb; i++) {
fps_normal_sum += scenes[i].fps_normal * scenes[i].weight;
weight_normal_sum += scenes[i].weight;
/*Restore original frame rate*/
if(run_max_speed) {
lv_timer_t * anim_timer = lv_anim_get_timer();
lv_timer_set_period(anim_timer, anim_ori_timer_period);
uint32_t w = LV_MAX(scenes[i].weight / 2, 1);
fps_opa_sum += scenes[i].fps_opa * w;
weight_opa_sum += w;
}
lv_disp_t * disp = lv_disp_get_default();
lv_timer_t * refr_timer = _lv_disp_get_refr_timer(disp);
if(refr_timer) {
lv_timer_set_period(refr_timer, disp_ori_timer_period);
fps_sum = fps_normal_sum + fps_opa_sum;
weight_sum = weight_normal_sum + weight_opa_sum;
uint32_t fps_weighted = fps_sum / weight_sum;
uint32_t fps_normal_unweighted = fps_normal_sum / weight_normal_sum;
uint32_t fps_opa_unweighted = fps_opa_sum / weight_opa_sum;
uint32_t opa_speed_pct = (fps_opa_unweighted * 100) / fps_normal_unweighted;
lv_obj_clean(lv_scr_act());
scene_bg = NULL;
lv_obj_set_flex_flow(lv_scr_act(), LV_FLEX_FLOW_COLUMN);
title = lv_label_create(lv_scr_act());
lv_label_set_text_fmt(title, "Weighted FPS: %"LV_PRIu32, fps_weighted);
subtitle = lv_label_create(lv_scr_act());
lv_label_set_text_fmt(subtitle, "Opa. speed: %"LV_PRIu32"%%", opa_speed_pct);
lv_coord_t w = lv_obj_get_content_width(lv_scr_act());
lv_obj_t * table = lv_table_create(lv_scr_act());
// lv_obj_clean_style_list(table, LV_PART_MAIN);
lv_table_set_col_cnt(table, 2);
lv_table_set_col_width(table, 0, (w * 3) / 4 - 3);
lv_table_set_col_width(table, 1, w / 4 - 3);
lv_obj_set_width(table, lv_pct(100));
// static lv_style_t style_cell_slow;
// static lv_style_t style_cell_very_slow;
// static lv_style_t style_cell_title;
//
// lv_style_init(&style_cell_title);
// lv_style_set_bg_color(&style_cell_title, LV_STATE_DEFAULT, lv_palette_main(LV_PALETTE_GREY));
// lv_style_set_bg_opa(&style_cell_title, LV_STATE_DEFAULT, LV_OPA_50);
//
// lv_style_init(&style_cell_slow);
// lv_style_set_text_color(&style_cell_slow, LV_STATE_DEFAULT, LV_COLOR_ORANGE);
//
// lv_style_init(&style_cell_very_slow);
// lv_style_set_text_color(&style_cell_very_slow, LV_STATE_DEFAULT, lv_palette_main(LV_PALETTE_RED));
// lv_obj_add_style(table, LV_TABLE_PART_CELL2, &style_cell_slow);
// lv_obj_add_style(table, LV_TABLE_PART_CELL3, &style_cell_very_slow);
// lv_obj_add_style(table, LV_TABLE_PART_CELL4, &style_cell_title);
uint16_t row = 0;
lv_table_add_cell_ctrl(table, row, 0, LV_TABLE_CELL_CTRL_MERGE_RIGHT);
lv_table_set_cell_value(table, row, 0, "Slow but common cases");
// lv_table_set_cell_type(table, row, 0, 4);
row++;
char buf[256];
for(i = 0; i < sizeof(scenes) / sizeof(scene_dsc_t) - 1; i++) {
if(scenes[i].fps_normal < 20 && scenes[i].weight >= 10) {
lv_table_set_cell_value(table, row, 0, scenes[i].name);
lv_snprintf(buf, sizeof(buf), "%"LV_PRIu32, scenes[i].fps_normal);
lv_table_set_cell_value(table, row, 1, buf);
// lv_table_set_cell_type(table, row, 0, 2);
// lv_table_set_cell_type(table, row, 1, 2);
row++;
}
if(scenes[i].fps_opa < 20 && LV_MAX(scenes[i].weight / 2, 1) >= 10) {
lv_snprintf(buf, sizeof(buf), "%s + opa", scenes[i].name);
lv_table_set_cell_value(table, row, 0, buf);
lv_snprintf(buf, sizeof(buf), "%"LV_PRIu32, scenes[i].fps_opa);
lv_table_set_cell_value(table, row, 1, buf);
// lv_table_set_cell_type(table, row, 0, 2);
// lv_table_set_cell_type(table, row, 1, 2);
row++;
}
}
generate_report(); /* generate report */
/*No 'slow but common cases'*/
if(row == 1) {
lv_table_add_cell_ctrl(table, row, 0, LV_TABLE_CELL_CTRL_MERGE_RIGHT);
lv_table_set_cell_value(table, row, 0, "All good");
row++;
}
lv_table_add_cell_ctrl(table, row, 0, LV_TABLE_CELL_CTRL_MERGE_RIGHT);
lv_table_set_cell_value(table, row, 0, "All cases");
// lv_table_set_cell_type(table, row, 0, 4);
row++;
for(i = 0; i < sizeof(scenes) / sizeof(scene_dsc_t) - 1; i++) {
lv_table_set_cell_value(table, row, 0, scenes[i].name);
lv_snprintf(buf, sizeof(buf), "%"LV_PRIu32, scenes[i].fps_normal);
lv_table_set_cell_value(table, row, 1, buf);
if(scenes[i].fps_normal < 10) {
// lv_table_set_cell_type(table, row, 0, 3);
// lv_table_set_cell_type(table, row, 1, 3);
}
else if(scenes[i].fps_normal < 20) {
// lv_table_set_cell_type(table, row, 0, 2);
// lv_table_set_cell_type(table, row, 1, 2);
}
row++;
lv_snprintf(buf, sizeof(buf), "%s + opa", scenes[i].name);
lv_table_set_cell_value(table, row, 0, buf);
lv_snprintf(buf, sizeof(buf), "%"LV_PRIu32, scenes[i].fps_opa);
lv_table_set_cell_value(table, row, 1, buf);
if(scenes[i].fps_opa < 10) {
// lv_table_set_cell_type(table, row, 0, 3);
// lv_table_set_cell_type(table, row, 1, 3);
}
else if(scenes[i].fps_opa < 20) {
// lv_table_set_cell_type(table, row, 0, 2);
// lv_table_set_cell_type(table, row, 1, 2);
}
row++;
}
// lv_page_set_scrl_layout(page, LV_LAYOUT_COLUMN_LEFT);
}
}
static void rect_create(lv_style_t * style)
{
uint32_t i;
@@ -1053,6 +881,7 @@ static void rect_create(lv_style_t * style)
}
}
static void img_create(lv_style_t * style, const void * src, bool rotate, bool zoom, bool aa)
{
uint32_t i;
@@ -1071,6 +900,7 @@ static void img_create(lv_style_t * style, const void * src, bool rotate, bool z
}
}
static void txt_create(lv_style_t * style)
{
uint32_t i;
@@ -1086,6 +916,7 @@ static void txt_create(lv_style_t * style)
}
}
static void line_create(lv_style_t * style)
{
static lv_point_t points[OBJ_NUM][LINE_POINT_NUM];
@@ -1097,9 +928,10 @@ static void line_create(lv_style_t * style)
uint32_t j;
for(j = 1; j < LINE_POINT_NUM; j++) {
points[i][j].x = points[i][j - 1].x + rnd_next(LINE_POINT_DIFF_MIN, LINE_POINT_DIFF_MAX);
points[i][j].y = rnd_next(LINE_POINT_DIFF_MIN, LINE_POINT_DIFF_MAX);
points[i][j].y = rnd_next(LINE_POINT_DIFF_MIN, LINE_POINT_DIFF_MAX) ;
}
lv_obj_t * obj = lv_line_create(scene_bg);
lv_obj_remove_style_all(obj);
lv_obj_add_style(obj, style, 0);
@@ -1112,10 +944,6 @@ static void line_create(lv_style_t * style)
}
}
static void arc_anim_end_angle_cb(void * var, int32_t v)
{
lv_arc_set_end_angle(var, v);
}
static void arc_create(lv_style_t * style)
{
@@ -1134,7 +962,7 @@ static void arc_create(lv_style_t * style)
lv_anim_t a;
lv_anim_init(&a);
lv_anim_set_var(&a, obj);
lv_anim_set_exec_cb(&a, arc_anim_end_angle_cb);
lv_anim_set_exec_cb(&a, (lv_anim_exec_xcb_t) lv_arc_set_end_angle);
lv_anim_set_values(&a, 0, 359);
lv_anim_set_time(&a, t);
lv_anim_set_playback_time(&a, t);
@@ -1145,10 +973,6 @@ static void arc_create(lv_style_t * style)
}
}
static void fall_anim_y_cb(void * var, int32_t v)
{
lv_obj_set_y(var, v);
}
static void fall_anim(lv_obj_t * obj)
{
@@ -1159,7 +983,7 @@ static void fall_anim(lv_obj_t * obj)
lv_anim_t a;
lv_anim_init(&a);
lv_anim_set_var(&a, obj);
lv_anim_set_exec_cb(&a, fall_anim_y_cb);
lv_anim_set_exec_cb(&a, (lv_anim_exec_xcb_t) lv_obj_set_y);
lv_anim_set_values(&a, 0, lv_obj_get_height(scene_bg) - lv_obj_get_height(obj));
lv_anim_set_time(&a, t);
lv_anim_set_playback_time(&a, t);

View File

@@ -22,25 +22,12 @@ extern "C" {
/**********************
* TYPEDEFS
**********************/
typedef void finished_cb_t(void);
/**********************
* GLOBAL PROTOTYPES
**********************/
void lv_demo_benchmark(void);
void lv_demo_benchmark_close(void);
void lv_demo_benchmark_run_scene(int_fast16_t scene_no);
void lv_demo_benchmark_set_finished_cb(finished_cb_t * finished_cb);
/**
* Make the benchmark work at the highest frame rate
* @param en true: highest frame rate; false: default frame rate
*/
void lv_demo_benchmark_set_max_speed(bool en);
/**********************
* MACROS
**********************/

View File

@@ -2,9 +2,9 @@
## Overview
LVGL allows you to control the widgets with keypad and/or encoder without touchpad.
This demo shows how to handle buttons, drop-down lists, rollers, sliders, switches and text inputs without touchpad.
Learn more about the touchpad-less usage of LVGL [here](https://docs.lvgl.io/master/overview/indev.html#keypad-and-encoder).
LVGL allows you to control the widgets with keypad and/or encoder without touchpad.
This demo shows how to handle buttons, drop-down lists, rollers, sliders, switches and text inputs without touchpad.
Learn more about the touchpad-less usage of LVGL [here](https://docs.lvgl.io/master/porting/indev.html#keypad-or-keyboard).
![Keypad and encoder navigation in LVGL embedded GUI library](screenshot1.gif)

View File

@@ -31,7 +31,7 @@ static void ta_event_cb(lv_event_t * e);
/**********************
* STATIC VARIABLES
**********************/
static lv_group_t * g;
static lv_group_t* g;
static lv_obj_t * tv;
static lv_obj_t * t1;
static lv_obj_t * t2;
@@ -46,24 +46,21 @@ static lv_obj_t * t2;
void lv_demo_keypad_encoder(void)
{
g = lv_group_get_default();
if(g == NULL) {
g = lv_group_create();
lv_group_set_default(g);
}
g = lv_group_create();
lv_group_set_default(g);
lv_indev_t * cur_drv = NULL;
for(;;) {
lv_indev_t* cur_drv = NULL;
for (;;) {
cur_drv = lv_indev_get_next(cur_drv);
if(!cur_drv) {
if (!cur_drv) {
break;
}
if(cur_drv->driver->type == LV_INDEV_TYPE_KEYPAD) {
if (cur_drv->driver->type == LV_INDEV_TYPE_KEYPAD) {
lv_indev_set_group(cur_drv, g);
}
if(cur_drv->driver->type == LV_INDEV_TYPE_ENCODER) {
if (cur_drv->driver->type == LV_INDEV_TYPE_ENCODER) {
lv_indev_set_group(cur_drv, g);
}
}
@@ -79,12 +76,6 @@ void lv_demo_keypad_encoder(void)
msgbox_create();
}
void lv_demo_keypad_encoder_close(void)
{
lv_obj_clean(lv_scr_act());
lv_obj_clean(lv_layer_top());
}
/**********************
* STATIC FUNCTIONS
**********************/
@@ -161,7 +152,7 @@ static void text_input_create(lv_obj_t * parent)
lv_textarea_set_one_line(ta2, true);
lv_textarea_set_placeholder_text(ta2, "Type something");
lv_obj_t * kb = lv_keyboard_create(lv_scr_act());
lv_obj_t *kb = lv_keyboard_create(lv_scr_act());
lv_obj_add_flag(kb, LV_OBJ_FLAG_HIDDEN);
lv_obj_add_event_cb(ta1, ta_event_cb, LV_EVENT_ALL, kb);
@@ -175,6 +166,9 @@ static void msgbox_create(void)
lv_obj_add_event_cb(mbox, msgbox_event_cb, LV_EVENT_ALL, NULL);
lv_group_focus_obj(lv_msgbox_get_btns(mbox));
lv_obj_add_state(lv_msgbox_get_btns(mbox), LV_STATE_FOCUS_KEY);
#if LV_EX_MOUSEWHEEL
lv_group_set_editing(g, true);
#endif
lv_group_focus_freeze(g, true);
lv_obj_align(mbox, LV_ALIGN_CENTER, 0, 0);

View File

@@ -27,7 +27,6 @@ extern "C" {
* GLOBAL PROTOTYPES
**********************/
void lv_demo_keypad_encoder(void);
void lv_demo_keypad_encoder_close(void);
/**********************
* MACROS

View File

@@ -16,23 +16,23 @@ extern "C" {
#include "../lvgl.h"
#if LV_USE_DEMO_WIDGETS
#include "widgets/lv_demo_widgets.h"
#include "widgets/lv_demo_widgets.h"
#endif
#if LV_USE_DEMO_BENCHMARK
#include "benchmark/lv_demo_benchmark.h"
#include "benchmark/lv_demo_benchmark.h"
#endif
#if LV_USE_DEMO_STRESS
#include "stress/lv_demo_stress.h"
#include "stress/lv_demo_stress.h"
#endif
#if LV_USE_DEMO_KEYPAD_AND_ENCODER
#include "keypad_encoder/lv_demo_keypad_encoder.h"
#include "keypad_encoder/lv_demo_keypad_encoder.h"
#endif
#if LV_USE_DEMO_MUSIC
#include "music/lv_demo_music.h"
#include "music/lv_demo_music.h"
#endif
/*********************
@@ -47,6 +47,7 @@ extern "C" {
* GLOBAL PROTOTYPES
**********************/
/**********************
* MACROS
**********************/

View File

@@ -1,10 +1,10 @@
# Music player demo
## Overview
The music player demo shows what kind of modern, smartphone-like user interfaces can be created on LVGL. It works the best with display with 480x272 or 272x480 resolution.
The music player demo shows what kind of modern, smartphone-like user interfaces can be created on LVGL. It works the best with display with 480x272 or 272x480 resolution.
![Music player demo with LVGL embedded GUI library](screenshot1.gif)
![Music player demo with LVGL embedded GUI library](https://github.com/lvgl/lv_examples/blob/master/src/lv_demo_music/screenshot1.gif?raw=true)
## Run the demo
- In `lv_conf.h` or equivalent places set `LV_USE_DEMO_MUSIC 1`
@@ -15,7 +15,7 @@ The music player demo shows what kind of modern, smartphone-like user interfaces
- `assets/spectrum.py` creates an array of spectrum values from a music. 4 band are created with 33 samples/sec: bass, bass-mid, mid, mid-treble.
- The spectrum meter UI does the followings:
- Zoom the album cover proportionality to the current bass value
- Display the 4 bands on the left side of a circle by default at 0°, 45°, 90°, 135°
- Display the 4 bands on the left side of a circle by default at 0°, 45°, 90°, 135°
- Add extra bars next to the "main bars" with a cosine shape. Add more bars for the lower bands.
- If there is a large enough bass, add a random offset to the position of the bars. E.g. start from 63° instead of 0°. (bars greater than 180° start again from 0°)
- If there is no bass, add 1 to the offset of the bars (it creates a "walking" effect)

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 44 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 44 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 43 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 8.0 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 8.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 8.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.9 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 151 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 166 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 142 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.0 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.9 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 9.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 9.4 KiB

View File

@@ -18,7 +18,7 @@ fs = int(len(S) / fn)
fout.write("const uint16_t spectrum[][4] = {\n")
for t in range(0,len(S[0]-1)):
fout.write("{ ")
f_prev = 0
f_prev = 0
for f in [8, 45, 300, 600]:
v = 0
for i in range(f_prev, f): v += S[i][t]

View File

@@ -25,7 +25,7 @@
* STATIC PROTOTYPES
**********************/
#if LV_DEMO_MUSIC_AUTO_PLAY
static void auto_step_cb(lv_timer_t * timer);
static void auto_step_cb(lv_timer_t * timer);
#endif
/**********************
@@ -87,28 +87,22 @@ static const char * genre_list[] = {
};
static const uint32_t time_list[] = {
1 * 60 + 14,
2 * 60 + 26,
1 * 60 + 54,
2 * 60 + 24,
2 * 60 + 37,
3 * 60 + 33,
1 * 60 + 56,
3 * 60 + 31,
2 * 60 + 20,
2 * 60 + 19,
2 * 60 + 20,
2 * 60 + 19,
2 * 60 + 20,
2 * 60 + 19,
1*60 + 14,
2*60 + 26,
1*60 + 54,
2*60 + 24,
2*60 + 37,
3*60 + 33,
1*60 + 56,
3*60 + 31,
2*60 + 20,
2*60 + 19,
2*60 + 20,
2*60 + 19,
2*60 + 20,
2*60 + 19,
};
#if LV_DEMO_MUSIC_AUTO_PLAY
static lv_timer_t * auto_step_timer;
#endif
static lv_color_t original_screen_bg_color;
/**********************
* MACROS
**********************/
@@ -119,33 +113,16 @@ static lv_color_t original_screen_bg_color;
void lv_demo_music(void)
{
original_screen_bg_color = lv_obj_get_style_bg_color(lv_scr_act(), 0);
lv_obj_set_style_bg_color(lv_scr_act(), lv_color_hex(0x343247), 0);
list = _lv_demo_music_list_create(lv_scr_act());
ctrl = _lv_demo_music_main_create(lv_scr_act());
#if LV_DEMO_MUSIC_AUTO_PLAY
auto_step_timer = lv_timer_create(auto_step_cb, 1000, NULL);
lv_timer_create(auto_step_cb, 1000, NULL);
#endif
}
void lv_demo_music_close(void)
{
/*Delete all aniamtions*/
lv_anim_del(NULL, NULL);
#if LV_DEMO_MUSIC_AUTO_PLAY
lv_timer_del(auto_step_timer);
#endif
_lv_demo_music_list_close();
_lv_demo_music_main_close();
lv_obj_clean(lv_scr_act());
lv_obj_set_style_bg_color(lv_scr_act(), original_screen_bg_color, 0);
}
const char * _lv_demo_music_get_title(uint32_t track_id)
{
if(track_id >= sizeof(title_list) / sizeof(title_list[0])) return NULL;
@@ -189,84 +166,84 @@ static void auto_step_cb(lv_timer_t * t)
#endif
switch(state) {
case 5:
_lv_demo_music_album_next(true);
break;
case 5:
_lv_demo_music_album_next(true);
break;
case 6:
_lv_demo_music_album_next(true);
break;
case 7:
_lv_demo_music_album_next(true);
break;
case 8:
_lv_demo_music_play(0);
break;
case 6:
_lv_demo_music_album_next(true);
break;
case 7:
_lv_demo_music_album_next(true);
break;
case 8:
_lv_demo_music_play(0);
break;
#if LV_DEMO_MUSIC_SQUARE || LV_DEMO_MUSIC_ROUND
case 11:
lv_obj_scroll_by(ctrl, 0, -LV_VER_RES, LV_ANIM_ON);
break;
case 13:
lv_obj_scroll_by(ctrl, 0, -LV_VER_RES, LV_ANIM_ON);
break;
case 11:
lv_obj_scroll_by(ctrl, 0, -LV_VER_RES, LV_ANIM_ON);
break;
case 13:
lv_obj_scroll_by(ctrl, 0, -LV_VER_RES, LV_ANIM_ON);
break;
#else
case 12:
lv_obj_scroll_by(ctrl, 0, -LV_VER_RES, LV_ANIM_ON);
break;
case 12:
lv_obj_scroll_by(ctrl, 0, -LV_VER_RES, LV_ANIM_ON);
break;
#endif
case 15:
lv_obj_scroll_by(list, 0, -300, LV_ANIM_ON);
break;
case 16:
lv_obj_scroll_by(list, 0, 300, LV_ANIM_ON);
break;
case 18:
_lv_demo_music_play(1);
break;
case 19:
lv_obj_scroll_by(ctrl, 0, LV_VER_RES, LV_ANIM_ON);
break;
case 15:
lv_obj_scroll_by(list, 0, -300, LV_ANIM_ON);
break;
case 16:
lv_obj_scroll_by(list, 0, 300, LV_ANIM_ON);
break;
case 18:
_lv_demo_music_play(1);
break;
case 19:
lv_obj_scroll_by(ctrl, 0, LV_VER_RES, LV_ANIM_ON);
break;
#if LV_DEMO_MUSIC_SQUARE || LV_DEMO_MUSIC_ROUND
case 20:
lv_obj_scroll_by(ctrl, 0, LV_VER_RES, LV_ANIM_ON);
break;
case 20:
lv_obj_scroll_by(ctrl, 0, LV_VER_RES, LV_ANIM_ON);
break;
#endif
case 30:
_lv_demo_music_play(2);
break;
case 40: {
lv_obj_t * bg = lv_layer_top();
lv_obj_set_style_bg_color(bg, lv_color_hex(0x6f8af6), 0);
lv_obj_set_style_text_color(bg, lv_color_white(), 0);
lv_obj_set_style_bg_opa(bg, LV_OPA_COVER, 0);
lv_obj_fade_in(bg, 400, 0);
lv_obj_t * dsc = lv_label_create(bg);
lv_obj_set_style_text_font(dsc, font_small, 0);
lv_label_set_text(dsc, "The average FPS is");
lv_obj_align(dsc, LV_ALIGN_TOP_MID, 0, 90);
case 30:
_lv_demo_music_play(2);
break;
case 40: {
lv_obj_t * bg = lv_layer_top();
lv_obj_set_style_bg_color(bg, lv_color_hex(0x6f8af6), 0);
lv_obj_set_style_text_color(bg, lv_color_white(), 0);
lv_obj_set_style_bg_opa(bg, LV_OPA_COVER, 0);
lv_obj_fade_in(bg, 400, 0);
lv_obj_t * dsc = lv_label_create(bg);
lv_obj_set_style_text_font(dsc, font_small, 0);
lv_label_set_text(dsc, "The average FPS is");
lv_obj_align(dsc, LV_ALIGN_TOP_MID, 0, 90);
lv_obj_t * num = lv_label_create(bg);
lv_obj_set_style_text_font(num, font_large, 0);
lv_obj_t * num = lv_label_create(bg);
lv_obj_set_style_text_font(num, font_large, 0);
#if LV_USE_PERF_MONITOR
lv_label_set_text_fmt(num, "%d", lv_refr_get_fps_avg());
lv_label_set_text_fmt(num, "%d", lv_refr_get_fps_avg());
#endif
lv_obj_align(num, LV_ALIGN_TOP_MID, 0, 120);
lv_obj_align(num, LV_ALIGN_TOP_MID, 0, 120);
lv_obj_t * attr = lv_label_create(bg);
lv_obj_set_style_text_align(attr, LV_TEXT_ALIGN_CENTER, 0);
lv_obj_set_style_text_font(attr, font_small, 0);
lv_obj_t * attr = lv_label_create(bg);
lv_obj_set_style_text_align(attr, LV_TEXT_ALIGN_CENTER, 0);
lv_obj_set_style_text_font(attr, font_small, 0);
#if LV_DEMO_MUSIC_SQUARE || LV_DEMO_MUSIC_ROUND
lv_label_set_text(attr, "Copyright 2020 LVGL Kft.\nwww.lvgl.io | lvgl@lvgl.io");
lv_label_set_text(attr, "Copyright 2020 LVGL Kft.\nwww.lvgl.io | lvgl@lvgl.io");
#else
lv_label_set_text(attr, "Copyright 2020 LVGL Kft. | www.lvgl.io | lvgl@lvgl.io");
lv_label_set_text(attr, "Copyright 2020 LVGL Kft. | www.lvgl.io | lvgl@lvgl.io");
#endif
lv_obj_align(attr, LV_ALIGN_BOTTOM_MID, 0, -10);
break;
}
case 41:
lv_scr_load(lv_obj_create(NULL));
_lv_demo_music_pause();
break;
lv_obj_align(attr, LV_ALIGN_BOTTOM_MID, 0, -10);
break;
}
case 41:
lv_scr_load(lv_obj_create(NULL));
_lv_demo_music_pause();
break;
}
state++;
}

View File

@@ -36,8 +36,6 @@ extern "C" {
**********************/
void lv_demo_music(void);
void lv_demo_music_close(void);
const char * _lv_demo_music_get_title(uint32_t track_id);
const char * _lv_demo_music_get_artist(uint32_t track_id);
const char * _lv_demo_music_get_genre(uint32_t track_id);

View File

@@ -102,7 +102,7 @@ lv_obj_t * _lv_demo_music_list_create(lv_obj_t * parent)
lv_style_init(&style_artist);
lv_style_set_text_font(&style_artist, font_small);
lv_style_set_text_color(&style_artist, lv_color_hex(0xb1b0be));
lv_style_set_text_color(&style_artist,lv_color_hex(0xb1b0be));
lv_style_init(&style_time);
lv_style_set_text_font(&style_time, font_medium);
@@ -130,18 +130,6 @@ lv_obj_t * _lv_demo_music_list_create(lv_obj_t * parent)
return list;
}
void _lv_demo_music_list_close(void)
{
lv_style_reset(&style_scrollbar);
lv_style_reset(&style_btn);
lv_style_reset(&style_btn_pr);
lv_style_reset(&style_btn_chk);
lv_style_reset(&style_btn_dis);
lv_style_reset(&style_title);
lv_style_reset(&style_artist);
lv_style_reset(&style_time);
}
void _lv_demo_music_list_btn_check(uint32_t track_id, bool state)
{
lv_obj_t * btn = lv_obj_get_child(list, track_id);
@@ -217,6 +205,7 @@ static lv_obj_t * add_list_btn(lv_obj_t * parent, uint32_t track_id)
return btn;
}
static void btn_click_event_cb(lv_event_t * e)
{
lv_obj_t * btn = lv_event_get_target(e);
@@ -226,3 +215,4 @@ static void btn_click_event_cb(lv_event_t * e)
_lv_demo_music_play(idx);
}
#endif /*LV_USE_DEMO_MUSIC*/

View File

@@ -28,8 +28,6 @@ extern "C" {
* GLOBAL PROTOTYPES
**********************/
lv_obj_t * _lv_demo_music_list_create(lv_obj_t * parent);
void _lv_demo_music_list_close(void);
void _lv_demo_music_list_btn_check(uint32_t track_id, bool state);
/**********************

View File

@@ -23,11 +23,11 @@
#define BAR_COLOR2 lv_color_hex(0x6f8af6)
#define BAR_COLOR3 lv_color_hex(0xffffff)
#if LV_DEMO_MUSIC_LARGE
#define BAR_COLOR1_STOP 160
#define BAR_COLOR2_STOP 200
# define BAR_COLOR1_STOP 160
# define BAR_COLOR2_STOP 200
#else
#define BAR_COLOR1_STOP 80
#define BAR_COLOR2_STOP 100
# define BAR_COLOR1_STOP 80
# define BAR_COLOR2_STOP 100
#endif
#define BAR_COLOR3_STOP (2 * LV_HOR_RES / 3)
#define BAR_CNT 20
@@ -60,9 +60,8 @@ static void prev_click_event_cb(lv_event_t * e);
static void next_click_event_cb(lv_event_t * e);
static void timer_cb(lv_timer_t * t);
static void track_load(uint32_t id);
static void stop_start_anim_timer_cb(lv_timer_t * t);
static void stop_start_anim(lv_timer_t * t);
static void spectrum_end_cb(lv_anim_t * a);
static void album_fade_anim_cb(void * var, int32_t v);
static int32_t get_cos(int32_t deg, int32_t a);
static int32_t get_sin(int32_t deg, int32_t a);
@@ -83,8 +82,7 @@ static uint32_t bar_ofs = 0;
static uint32_t spectrum_lane_ofs_start = 0;
static uint32_t bar_rot = 0;
static uint32_t time_act;
static lv_timer_t * sec_counter_timer;
static lv_timer_t * stop_start_anim_timer;
static lv_timer_t * sec_counter_timer;
static const lv_font_t * font_small;
static const lv_font_t * font_large;
static uint32_t track_id;
@@ -108,18 +106,16 @@ static const uint16_t rnd_array[30] = {994, 285, 553, 11, 792, 707, 966, 641, 85
* Callback adapter function to convert parameter types to avoid compile-time
* warning.
*/
static void _img_set_zoom_anim_cb(void * obj, int32_t zoom)
{
lv_img_set_zoom((lv_obj_t *)obj, (uint16_t)zoom);
static void _img_set_zoom_anim_cb(void * obj, int32_t zoom) {
lv_img_set_zoom((lv_obj_t*)obj, (uint16_t)zoom);
}
/*
* Callback adapter function to convert parameter types to avoid compile-time
* warning.
*/
static void _obj_set_x_anim_cb(void * obj, int32_t x)
{
lv_obj_set_x((lv_obj_t *)obj, (lv_coord_t)x);
static void _obj_set_x_anim_cb(void * obj, int32_t x) {
lv_obj_set_x((lv_obj_t*)obj, (lv_coord_t)x);
}
lv_obj_t * _lv_demo_music_main_create(lv_obj_t * parent)
@@ -149,17 +145,16 @@ lv_obj_t * _lv_demo_music_main_create(lv_obj_t * parent)
#if LV_DEMO_MUSIC_SQUARE || LV_DEMO_MUSIC_ROUND
static const lv_coord_t grid_cols[] = {LV_GRID_FR(1), LV_GRID_TEMPLATE_LAST};
static lv_coord_t grid_rows[] = {LV_DEMO_MUSIC_HANDLE_SIZE, /*Spacing*/
0, /*Spectrum obj, set later*/
LV_GRID_CONTENT, /*Title box*/
LV_GRID_FR(3), /*Spacer*/
LV_GRID_CONTENT, /*Icon box*/
LV_GRID_FR(3), /*Spacer*/
LV_GRID_CONTENT, /*Control box*/
LV_GRID_FR(3), /*Spacer*/
LV_GRID_CONTENT, /*Handle box*/
LV_DEMO_MUSIC_HANDLE_SIZE, /*Spacing*/
LV_GRID_TEMPLATE_LAST
};
0, /*Spectrum obj, set later*/
LV_GRID_CONTENT, /*Title box*/
LV_GRID_FR(3), /*Spacer*/
LV_GRID_CONTENT, /*Icon box*/
LV_GRID_FR(3), /*Spacer*/
LV_GRID_CONTENT, /*Control box*/
LV_GRID_FR(3), /*Spacer*/
LV_GRID_CONTENT, /*Handle box*/
LV_DEMO_MUSIC_HANDLE_SIZE, /*Spacing*/
LV_GRID_TEMPLATE_LAST};
grid_rows[1] = LV_VER_RES;
@@ -189,8 +184,7 @@ lv_obj_t * _lv_demo_music_main_create(lv_obj_t * parent)
LV_GRID_CONTENT, /*Handle box*/
LV_GRID_FR(1), /*Spacer*/
LV_DEMO_MUSIC_HANDLE_SIZE, /*Spacing*/
LV_GRID_TEMPLATE_LAST
};
LV_GRID_TEMPLATE_LAST};
lv_obj_set_grid_dsc_array(cont, grid_cols, grid_rows);
lv_obj_set_style_grid_row_align(cont, LV_GRID_ALIGN_SPACE_BETWEEN, 0);
@@ -213,8 +207,7 @@ lv_obj_t * _lv_demo_music_main_create(lv_obj_t * parent)
LV_GRID_CONTENT, /*Handle box*/
LV_GRID_FR(1), /*Spacer*/
LV_DEMO_MUSIC_HANDLE_SIZE, /*Spacing*/
LV_GRID_TEMPLATE_LAST
};
LV_GRID_TEMPLATE_LAST};
lv_obj_set_grid_dsc_array(cont, grid_cols, grid_rows);
lv_obj_set_style_grid_row_align(cont, LV_GRID_ALIGN_SPACE_BETWEEN, 0);
@@ -233,8 +226,8 @@ lv_obj_t * _lv_demo_music_main_create(lv_obj_t * parent)
start_anim = true;
stop_start_anim_timer = lv_timer_create(stop_start_anim_timer_cb, INTRO_TIME + 6000, NULL);
lv_timer_set_repeat_count(stop_start_anim_timer, 1);
lv_timer_t * timer = lv_timer_create(stop_start_anim, INTRO_TIME + 6000, NULL);
lv_timer_set_repeat_count(timer, 1);
lv_anim_init(&a);
lv_anim_set_path_cb(&a, lv_anim_path_bounce);
@@ -293,32 +286,23 @@ lv_obj_t * _lv_demo_music_main_create(lv_obj_t * parent)
return main_cont;
}
void _lv_demo_music_main_close(void)
{
if(stop_start_anim_timer) lv_timer_del(stop_start_anim_timer);
lv_timer_del(sec_counter_timer);
}
void _lv_demo_music_album_next(bool next)
{
uint32_t id = track_id;
if(next) {
id++;
if(id >= ACTIVE_TRACK_CNT) id = 0;
}
else {
} else {
if(id == 0) {
id = ACTIVE_TRACK_CNT - 1;
}
else {
} else {
id--;
}
}
if(playing) {
_lv_demo_music_play(id);
}
else {
} else {
track_load(id);
}
}
@@ -397,21 +381,21 @@ static lv_obj_t * create_cont(lv_obj_t * parent)
lv_obj_t * placeholder1 = lv_obj_create(main_cont);
lv_obj_remove_style_all(placeholder1);
lv_obj_clear_flag(placeholder1, LV_OBJ_FLAG_CLICKABLE);
// lv_obj_set_style_bg_color(placeholder1, lv_color_hex(0xff0000), 0);
// lv_obj_set_style_bg_opa(placeholder1, LV_OPA_50, 0);
// lv_obj_set_style_bg_color(placeholder1, lv_color_hex(0xff0000), 0);
// lv_obj_set_style_bg_opa(placeholder1, LV_OPA_50, 0);
lv_obj_t * placeholder2 = lv_obj_create(main_cont);
lv_obj_remove_style_all(placeholder2);
lv_obj_clear_flag(placeholder2, LV_OBJ_FLAG_CLICKABLE);
// lv_obj_set_style_bg_color(placeholder2, lv_color_hex(0x00ff00), 0);
// lv_obj_set_style_bg_opa(placeholder2, LV_OPA_50, 0);
// lv_obj_set_style_bg_color(placeholder2, lv_color_hex(0x00ff00), 0);
// lv_obj_set_style_bg_opa(placeholder2, LV_OPA_50, 0);
#if LV_DEMO_MUSIC_SQUARE || LV_DEMO_MUSIC_ROUND
lv_obj_t * placeholder3 = lv_obj_create(main_cont);
lv_obj_remove_style_all(placeholder3);
lv_obj_clear_flag(placeholder3, LV_OBJ_FLAG_CLICKABLE);
// lv_obj_set_style_bg_color(placeholder3, lv_color_hex(0x0000ff), 0);
// lv_obj_set_style_bg_opa(placeholder3, LV_OPA_20, 0);
// lv_obj_set_style_bg_color(placeholder3, lv_color_hex(0x0000ff), 0);
// lv_obj_set_style_bg_opa(placeholder3, LV_OPA_20, 0);
lv_obj_set_size(placeholder1, lv_pct(100), LV_VER_RES);
lv_obj_set_y(placeholder1, 0);
@@ -439,13 +423,13 @@ static void create_wave_images(lv_obj_t * parent)
LV_IMG_DECLARE(img_lv_demo_music_wave_top);
LV_IMG_DECLARE(img_lv_demo_music_wave_bottom);
lv_obj_t * wave_top = lv_img_create(parent);
lv_img_set_src(wave_top, &img_lv_demo_music_wave_top);
lv_img_set_src(wave_top,&img_lv_demo_music_wave_top);
lv_obj_set_width(wave_top, LV_HOR_RES);
lv_obj_align(wave_top, LV_ALIGN_TOP_MID, 0, 0);
lv_obj_add_flag(wave_top, LV_OBJ_FLAG_IGNORE_LAYOUT);
lv_obj_t * wave_bottom = lv_img_create(parent);
lv_img_set_src(wave_bottom, &img_lv_demo_music_wave_bottom);
lv_img_set_src(wave_bottom,&img_lv_demo_music_wave_bottom);
lv_obj_set_width(wave_bottom, LV_HOR_RES);
lv_obj_align(wave_bottom, LV_ALIGN_BOTTOM_MID, 0, 0);
lv_obj_add_flag(wave_bottom, LV_OBJ_FLAG_IGNORE_LAYOUT);
@@ -554,7 +538,7 @@ static lv_obj_t * create_ctrl_box(lv_obj_t * parent)
#else
lv_obj_set_style_pad_bottom(cont, 8, 0);
#endif
static const lv_coord_t grid_col[] = {LV_GRID_FR(2), LV_GRID_FR(3), LV_GRID_FR(5), LV_GRID_FR(5), LV_GRID_FR(5), LV_GRID_FR(3), LV_GRID_FR(2), LV_GRID_TEMPLATE_LAST};
static const lv_coord_t grid_col[] = {LV_GRID_FR(2), LV_GRID_FR(3),LV_GRID_FR(5), LV_GRID_FR(5), LV_GRID_FR(5), LV_GRID_FR(3), LV_GRID_FR(2), LV_GRID_TEMPLATE_LAST};
static const lv_coord_t grid_row[] = {LV_GRID_CONTENT, LV_GRID_CONTENT, LV_GRID_TEMPLATE_LAST};
lv_obj_set_grid_dsc_array(cont, grid_col, grid_row);
@@ -675,14 +659,9 @@ static void track_load(uint32_t id)
lv_label_set_text(artist_label, _lv_demo_music_get_artist(track_id));
lv_label_set_text(genre_label, _lv_demo_music_get_genre(track_id));
lv_anim_t a;
lv_anim_init(&a);
lv_anim_set_var(&a, album_img_obj);
lv_anim_set_values(&a, lv_obj_get_style_img_opa(album_img_obj, 0), LV_OPA_TRANSP);
lv_anim_set_exec_cb(&a, album_fade_anim_cb);
lv_anim_set_time(&a, 500);
lv_anim_start(&a);
lv_obj_fade_out(album_img_obj, 500, 0);
lv_anim_t a;
lv_anim_init(&a);
lv_anim_set_var(&a, album_img_obj);
lv_anim_set_time(&a, 500);
@@ -690,15 +669,13 @@ static void track_load(uint32_t id)
#if LV_DEMO_MUSIC_LANDSCAPE
if(next) {
lv_anim_set_values(&a, 0, - LV_HOR_RES / 7);
}
else {
} else {
lv_anim_set_values(&a, 0, LV_HOR_RES / 7);
}
#else
if(next) {
lv_anim_set_values(&a, 0, - LV_HOR_RES / 2);
}
else {
} else {
lv_anim_set_values(&a, 0, LV_HOR_RES / 2);
}
#endif
@@ -715,6 +692,7 @@ static void track_load(uint32_t id)
lv_anim_start(&a);
album_img_obj = album_img_create(spectrum_obj);
lv_obj_fade_in(album_img_obj, 500, 100);
lv_anim_set_path_cb(&a, lv_anim_path_overshoot);
lv_anim_set_var(&a, album_img_obj);
@@ -724,14 +702,6 @@ static void track_load(uint32_t id)
lv_anim_set_exec_cb(&a, _img_set_zoom_anim_cb);
lv_anim_set_ready_cb(&a, NULL);
lv_anim_start(&a);
lv_anim_init(&a);
lv_anim_set_var(&a, album_img_obj);
lv_anim_set_values(&a, 0, LV_OPA_COVER);
lv_anim_set_exec_cb(&a, album_fade_anim_cb);
lv_anim_set_time(&a, 500);
lv_anim_set_delay(&a, 100);
lv_anim_start(&a);
}
int32_t get_cos(int32_t deg, int32_t a)
@@ -769,7 +739,7 @@ static void spectrum_draw_event_cb(lv_event_t * e)
lv_obj_t * obj = lv_event_get_target(e);
lv_draw_ctx_t * draw_ctx = lv_event_get_draw_ctx(e);
lv_opa_t opa = lv_obj_get_style_opa_recursive(obj, LV_PART_MAIN);
lv_opa_t opa = lv_obj_get_style_opa(obj, LV_PART_MAIN);
if(opa < LV_OPA_MIN) return;
lv_point_t poly[4];
@@ -798,18 +768,18 @@ static void spectrum_draw_event_cb(lv_event_t * e)
uint32_t f;
uint32_t band_w = 0; /*Real number of bars in this band.*/
switch(s) {
case 0:
band_w = 20;
break;
case 1:
band_w = 8;
break;
case 2:
band_w = 4;
break;
case 3:
band_w = 2;
break;
case 0:
band_w = 20;
break;
case 1:
band_w = 8;
break;
case 2:
band_w = 4;
break;
case 3:
band_w = 2;
break;
}
/* Add "side bars" with cosine characteristic.*/
@@ -829,7 +799,7 @@ static void spectrum_draw_event_cb(lv_event_t * e)
for(i = 0; i < BAR_CNT; i++) {
uint32_t deg_space = 1;
uint32_t deg = i * DEG_STEP + 90;
uint32_t j = (i + bar_rot + rnd_array[bar_ofs % 10]) % BAR_CNT;
uint32_t j = (i + bar_rot + rnd_array[bar_ofs %10]) % BAR_CNT;
uint32_t k = (i + bar_rot + rnd_array[(bar_ofs + 1) % 10]) % BAR_CNT;
uint32_t v = (r[k] * animv + r[j] * (amax - animv)) / amax;
@@ -841,10 +811,8 @@ static void spectrum_draw_event_cb(lv_event_t * e)
if(v < BAR_COLOR1_STOP) draw_dsc.bg_color = BAR_COLOR1;
else if(v > BAR_COLOR3_STOP) draw_dsc.bg_color = BAR_COLOR3;
else if(v > BAR_COLOR2_STOP) draw_dsc.bg_color = lv_color_mix(BAR_COLOR3, BAR_COLOR2,
((v - BAR_COLOR2_STOP) * 255) / (BAR_COLOR3_STOP - BAR_COLOR2_STOP));
else draw_dsc.bg_color = lv_color_mix(BAR_COLOR2, BAR_COLOR1,
((v - BAR_COLOR1_STOP) * 255) / (BAR_COLOR2_STOP - BAR_COLOR1_STOP));
else if(v > BAR_COLOR2_STOP) draw_dsc.bg_color = lv_color_mix(BAR_COLOR3, BAR_COLOR2, ((v - BAR_COLOR2_STOP) * 255) / (BAR_COLOR3_STOP-BAR_COLOR2_STOP));
else draw_dsc.bg_color = lv_color_mix(BAR_COLOR2, BAR_COLOR1, ((v - BAR_COLOR1_STOP) * 255) / (BAR_COLOR2_STOP - BAR_COLOR1_STOP));
uint32_t di = deg + deg_space;
@@ -891,7 +859,7 @@ static void spectrum_anim_cb(void * a, int32_t v)
static int32_t last_bass = -1000;
static int32_t dir = 1;
if(spectrum[spectrum_i][0] > 12) {
if(spectrum_i - last_bass > 5) {
if(spectrum_i-last_bass > 5) {
bass_cnt++;
last_bass = spectrum_i;
if(bass_cnt >= 2) {
@@ -901,7 +869,7 @@ static void spectrum_anim_cb(void * a, int32_t v)
}
}
}
if(spectrum[spectrum_i][0] < 4) bar_rot += dir;
if(spectrum[spectrum_i][0] < 4) bar_rot+= dir;
lv_img_set_zoom(album_img_obj, LV_IMG_ZOOM_NONE + spectrum[spectrum_i][0]);
}
@@ -923,21 +891,21 @@ static lv_obj_t * album_img_create(lv_obj_t * parent)
img = lv_img_create(parent);
switch(track_id) {
case 2:
lv_img_set_src(img, &img_lv_demo_music_cover_3);
spectrum = spectrum_3;
spectrum_len = sizeof(spectrum_3) / sizeof(spectrum_3[0]);
break;
case 1:
lv_img_set_src(img, &img_lv_demo_music_cover_2);
spectrum = spectrum_2;
spectrum_len = sizeof(spectrum_2) / sizeof(spectrum_2[0]);
break;
case 0:
lv_img_set_src(img, &img_lv_demo_music_cover_1);
spectrum = spectrum_1;
spectrum_len = sizeof(spectrum_1) / sizeof(spectrum_1[0]);
break;
case 2:
lv_img_set_src(img, &img_lv_demo_music_cover_3);
spectrum = spectrum_3;
spectrum_len = sizeof(spectrum_3) / sizeof(spectrum_3[0]);
break;
case 1:
lv_img_set_src(img, &img_lv_demo_music_cover_2);
spectrum = spectrum_2;
spectrum_len = sizeof(spectrum_2) / sizeof(spectrum_2[0]);
break;
case 0:
lv_img_set_src(img, &img_lv_demo_music_cover_1);
spectrum = spectrum_1;
spectrum_len = sizeof(spectrum_1) / sizeof(spectrum_1[0]);
break;
}
lv_img_set_antialias(img, false);
lv_obj_align(img, LV_ALIGN_CENTER, 0, 0);
@@ -961,8 +929,7 @@ static void play_event_click_cb(lv_event_t * e)
lv_obj_t * obj = lv_event_get_target(e);
if(lv_obj_has_state(obj, LV_STATE_CHECKED)) {
_lv_demo_music_resume();
}
else {
} else {
_lv_demo_music_pause();
}
}
@@ -981,6 +948,7 @@ static void next_click_event_cb(lv_event_t * e)
}
}
static void timer_cb(lv_timer_t * t)
{
LV_UNUSED(t);
@@ -995,16 +963,12 @@ static void spectrum_end_cb(lv_anim_t * a)
_lv_demo_music_album_next(true);
}
static void stop_start_anim_timer_cb(lv_timer_t * t)
static void stop_start_anim(lv_timer_t * t)
{
LV_UNUSED(t);
start_anim = false;
stop_start_anim_timer = NULL;
lv_obj_refresh_ext_draw_size(spectrum_obj);
}
static void album_fade_anim_cb(void * var, int32_t v)
{
lv_obj_set_style_img_opa(var, v, 0);
}
#endif /*LV_USE_DEMO_MUSIC*/

View File

@@ -28,8 +28,6 @@ extern "C" {
* GLOBAL PROTOTYPES
**********************/
lv_obj_t * _lv_demo_music_main_create(lv_obj_t * parent);
void _lv_demo_music_main_close(void);
void _lv_demo_music_play(uint32_t id);
void _lv_demo_music_resume(void);
void _lv_demo_music_pause(void);
@@ -40,6 +38,7 @@ void _lv_demo_music_album_next(bool next);
**********************/
#endif /*LV_USE_DEMO_MUSIC*/
#ifdef __cplusplus
} /* extern "C" */
#endif

View File

@@ -2,10 +2,10 @@
## Overview
A stress test for LVGL.
It contains a lot of object creation, deletion, animations, styles usage, and so on. It can be used if there is any memory corruption during heavy usage or any memory leaks.
A stress test for LVGL.
It contains a lot of object creation, deletion, animations, styles usage, and so on. It can be used if there is any memory corruption during heavy usage or any memory leaks.
![Stress demo with LVGL embedded GUI library](screenshot1.gif)
![Printer demo with LVGL embedded GUI library](https://github.com/lvgl/lv_examples/blob/master/src/lv_demo_stress/screenshot1.gif?raw=true)
## Run the demo
- In `lv_conf.h` or equivalent places set `LV_USE_DEMO_STRESS 1`

View File

@@ -0,0 +1,318 @@
#include "../../../lvgl.h"
#if LV_USE_DEMO_STRESS
/*******************************************************************************
* Size: 12 px
* Bpp: 4
* Opts:
******************************************************************************/
#ifndef LV_FONT_MONTSERRAT_12_COMPR_AZ
#define LV_FONT_MONTSERRAT_12_COMPR_AZ 1
#endif
#if LV_FONT_MONTSERRAT_12_COMPR_AZ
/*-----------------
* BITMAPS
*----------------*/
/*Store the image of the glyphs*/
static LV_ATTRIBUTE_LARGE_CONST const uint8_t gylph_bitmap[] = {
/* U+20 " " */
/* U+61 "a" */
0x8, 0xdf, 0xc3, 0x0, 0x14, 0xea, 0xf0, 0x2,
0x90, 0xa0, 0x84, 0x23, 0x7b, 0xc0, 0xd1, 0xb3,
0xb8, 0x1, 0x84, 0x1c, 0x0, 0x8f, 0xdb, 0xe0,
0x0,
/* U+62 "b" */
0xe4, 0x0, 0xff, 0xe4, 0x1e, 0x7e, 0x20, 0x2,
0x27, 0x52, 0xc8, 0x25, 0x4a, 0x12, 0x80, 0x80,
0x23, 0x20, 0x20, 0x8, 0xc8, 0x25, 0x4a, 0x12,
0x82, 0x63, 0x52, 0xc8,
/* U+63 "c" */
0x2, 0xbf, 0xe8, 0x0, 0x78, 0xed, 0x21, 0xa8,
0x51, 0x26, 0x19, 0x30, 0x7, 0x13, 0x0, 0x72,
0x85, 0x12, 0x69, 0x87, 0x8e, 0xd2, 0x98,
/* U+64 "d" */
0x0, 0xe1, 0xf1, 0x0, 0xff, 0xe2, 0x95, 0xfe,
0xb8, 0x5, 0x85, 0xbd, 0x60, 0x5, 0x39, 0x23,
0x90, 0x1, 0x30, 0x4, 0xa0, 0x2, 0x60, 0x8,
0x80, 0xa, 0x72, 0x25, 0xc0, 0x16, 0x17, 0x65,
0x80, 0x0,
/* U+65 "e" */
0x2, 0xbf, 0xd5, 0x0, 0x61, 0xf4, 0xda, 0x29,
0x40, 0xa4, 0x79, 0x1f, 0x75, 0xe, 0x44, 0xee,
0xd8, 0xa7, 0x24, 0x74, 0x41, 0x85, 0xba, 0x32,
/* U+66 "f" */
0x1, 0xcf, 0x60, 0x86, 0xe7, 0x2, 0xc1, 0x16,
0xa4, 0xf9, 0xea, 0x4f, 0x98, 0x7, 0xff, 0x34,
/* U+67 "g" */
0x2, 0xbf, 0xe6, 0xe2, 0xc, 0x1d, 0xd5, 0x8,
0x29, 0xd1, 0x1f, 0x0, 0x9, 0x80, 0x22, 0x0,
0x13, 0x0, 0x44, 0x0, 0x53, 0xa2, 0x3f, 0x0,
0xb0, 0x77, 0x50, 0x1, 0x15, 0xff, 0x38, 0x10,
0x63, 0x11, 0xca, 0x80, 0x2a, 0xf7, 0x43, 0x60,
/* U+68 "h" */
0xe4, 0x0, 0xff, 0xe4, 0x1e, 0xfe, 0x10, 0x2,
0x65, 0xad, 0xc0, 0x8, 0x42, 0x83, 0x0, 0x10,
0x0, 0x80, 0x40, 0x3c, 0x60, 0x1f, 0xfc, 0x20,
/* U+69 "i" */
0xd, 0x40, 0x56, 0x8, 0x20, 0xe4, 0x0, 0xff,
0xe3, 0x0,
/* U+6A "j" */
0x0, 0xb5, 0x40, 0x2a, 0x70, 0x9, 0xc8, 0x2,
0xd4, 0x0, 0xff, 0xec, 0x11, 0x4c, 0x1f, 0xae,
0x40,
/* U+6B "k" */
0xe4, 0x0, 0xff, 0xe5, 0xdd, 0x0, 0x6b, 0xa,
0x0, 0xad, 0xec, 0x2, 0xa4, 0x10, 0xc, 0x5c,
0x12, 0x1, 0x40, 0xfb, 0x20, 0x6, 0x29, 0xa1,
/* U+6C "l" */
0xe4, 0x0, 0xff, 0xe3, 0x0,
/* U+6D "m" */
0xe7, 0xdf, 0xb2, 0x9e, 0xe4, 0x0, 0x2b, 0xb5,
0xf4, 0xb3, 0x59, 0x42, 0xcc, 0xa0, 0x28, 0x8d,
0xf0, 0x8, 0x0, 0xe0, 0x20, 0x1, 0x30, 0xf,
0xfe, 0xa8,
/* U+6E "n" */
0xe6, 0xdf, 0xc2, 0x0, 0x44, 0xf3, 0x70, 0x2,
0x10, 0x6c, 0xc0, 0x4, 0x0, 0x10, 0x10, 0xf,
0x18, 0x7, 0xff, 0x8,
/* U+6F "o" */
0x2, 0xbf, 0xe8, 0x0, 0xb0, 0x77, 0x4d, 0x0,
0xa7, 0x44, 0x74, 0xe0, 0x4c, 0x1, 0x28, 0x9,
0x30, 0x4, 0xa0, 0x2a, 0x14, 0x47, 0x4e, 0x0,
0xf1, 0xdd, 0x34, 0x0,
/* U+70 "p" */
0xe7, 0xdf, 0xc4, 0x0, 0x44, 0xf5, 0x59, 0x4,
0xa0, 0xb2, 0xd0, 0x10, 0x4, 0x44, 0x3, 0x0,
0x8c, 0x82, 0x14, 0xa1, 0x28, 0x26, 0x5a, 0x96,
0x40, 0x59, 0xf8, 0x80, 0x1f, 0xfc, 0x30,
/* U+71 "q" */
0x2, 0xbf, 0xd5, 0xf1, 0xc, 0x1d, 0xeb, 0x0,
0x29, 0xd1, 0x1d, 0x0, 0x9, 0x80, 0x25, 0x0,
0x13, 0x0, 0x4a, 0x0, 0x53, 0xa2, 0x3a, 0x0,
0xb0, 0x77, 0xac, 0x2, 0x2b, 0xfd, 0x40, 0xf,
0xfe, 0x30,
/* U+72 "r" */
0xe6, 0xd8, 0x8, 0xb9, 0x9, 0x61, 0x3, 0x0,
0xff, 0xe1, 0x0,
/* U+73 "s" */
0x9, 0xef, 0xc2, 0x64, 0xcd, 0xa3, 0x10, 0x1,
0x30, 0xba, 0x6f, 0x48, 0x84, 0xfe, 0x2c, 0x2b,
0x10, 0x38, 0x8a, 0xb7, 0x6, 0x0,
/* U+74 "t" */
0x5, 0x30, 0xb, 0x94, 0x1, 0xa9, 0x3e, 0x7a,
0x93, 0xe6, 0x1, 0xff, 0xc4, 0x1c, 0x11, 0x4,
0x3f, 0x38,
/* U+75 "u" */
0xf3, 0x0, 0x17, 0x80, 0x7f, 0xf2, 0x85, 0xc0,
0xc, 0x0, 0x4f, 0x22, 0x40, 0x2, 0xc3, 0x72,
0x80, 0x0,
/* U+76 "v" */
0xd, 0x50, 0xa, 0x60, 0x2e, 0x40, 0x26, 0xa0,
0x73, 0x20, 0x64, 0x20, 0x15, 0xa0, 0xae, 0x0,
0xa5, 0x8c, 0x94, 0x2, 0x33, 0x73, 0x0, 0x75,
0x95, 0x0, 0x0,
/* U+77 "w" */
0xc5, 0x0, 0x1f, 0x88, 0x1, 0xe2, 0xbc, 0x1,
0x40, 0xe0, 0xa, 0xb7, 0x50, 0x3, 0xc6, 0x81,
0x1, 0x8a, 0x2a, 0x13, 0xa8, 0xd2, 0x80, 0x37,
0xf6, 0x81, 0x1d, 0x6c, 0x0, 0xea, 0xee, 0xe,
0x80, 0x30, 0x0, 0xa2, 0x88, 0x20, 0x28, 0x0,
/* U+78 "x" */
0x5d, 0x0, 0x27, 0xa, 0xbc, 0x8d, 0x50, 0x42,
0xdf, 0x1d, 0x0, 0x2, 0xc5, 0x0, 0x11, 0x32,
0x58, 0x5, 0xd3, 0x6e, 0xc0, 0xe0, 0xe1, 0xd2,
0x40,
/* U+79 "y" */
0xd, 0x50, 0xa, 0x60, 0x2b, 0x80, 0x27, 0xa0,
0x64, 0x20, 0x52, 0x20, 0xa, 0xa8, 0x3a, 0x40,
0x2e, 0xa1, 0x55, 0x0, 0x48, 0x74, 0xe0, 0x1c,
0xc9, 0x40, 0x1d, 0xa4, 0x60, 0x12, 0x94, 0xd8,
0x4, 0x33, 0xaa, 0xc0, 0x10,
/* U+7A "z" */
0x7f, 0xfd, 0x6f, 0xfe, 0xd0, 0x80, 0xb, 0xa0,
0xc0, 0x12, 0xee, 0x0, 0x23, 0xd0, 0x0, 0x6a,
0xc4, 0x1, 0x23, 0x5f, 0xed
};
/*---------------------
* GLYPH DESCRIPTION
*--------------------*/
static const lv_font_fmt_txt_glyph_dsc_t glyph_dsc[] = {
{.bitmap_index = 0, .adv_w = 0, .box_w = 0, .box_h = 0, .ofs_x = 0, .ofs_y = 0} /* id = 0 reserved */,
{.bitmap_index = 0, .adv_w = 52, .box_w = 0, .box_h = 0, .ofs_x = 0, .ofs_y = 0},
{.bitmap_index = 0, .adv_w = 115, .box_w = 7, .box_h = 7, .ofs_x = 0, .ofs_y = 0},
{.bitmap_index = 25, .adv_w = 131, .box_w = 7, .box_h = 10, .ofs_x = 1, .ofs_y = 0},
{.bitmap_index = 53, .adv_w = 110, .box_w = 7, .box_h = 7, .ofs_x = 0, .ofs_y = 0},
{.bitmap_index = 76, .adv_w = 131, .box_w = 8, .box_h = 10, .ofs_x = 0, .ofs_y = 0},
{.bitmap_index = 110, .adv_w = 118, .box_w = 7, .box_h = 7, .ofs_x = 0, .ofs_y = 0},
{.bitmap_index = 134, .adv_w = 68, .box_w = 5, .box_h = 10, .ofs_x = 0, .ofs_y = 0},
{.bitmap_index = 150, .adv_w = 132, .box_w = 8, .box_h = 10, .ofs_x = 0, .ofs_y = -3},
{.bitmap_index = 190, .adv_w = 131, .box_w = 7, .box_h = 10, .ofs_x = 1, .ofs_y = 0},
{.bitmap_index = 214, .adv_w = 54, .box_w = 3, .box_h = 10, .ofs_x = 0, .ofs_y = 0},
{.bitmap_index = 224, .adv_w = 55, .box_w = 5, .box_h = 13, .ofs_x = -2, .ofs_y = -3},
{.bitmap_index = 241, .adv_w = 118, .box_w = 7, .box_h = 10, .ofs_x = 1, .ofs_y = 0},
{.bitmap_index = 265, .adv_w = 54, .box_w = 2, .box_h = 10, .ofs_x = 1, .ofs_y = 0},
{.bitmap_index = 270, .adv_w = 203, .box_w = 11, .box_h = 7, .ofs_x = 1, .ofs_y = 0},
{.bitmap_index = 296, .adv_w = 131, .box_w = 7, .box_h = 7, .ofs_x = 1, .ofs_y = 0},
{.bitmap_index = 316, .adv_w = 122, .box_w = 8, .box_h = 7, .ofs_x = 0, .ofs_y = 0},
{.bitmap_index = 344, .adv_w = 131, .box_w = 7, .box_h = 10, .ofs_x = 1, .ofs_y = -3},
{.bitmap_index = 375, .adv_w = 131, .box_w = 8, .box_h = 10, .ofs_x = 0, .ofs_y = -3},
{.bitmap_index = 409, .adv_w = 79, .box_w = 4, .box_h = 7, .ofs_x = 1, .ofs_y = 0},
{.bitmap_index = 420, .adv_w = 96, .box_w = 6, .box_h = 7, .ofs_x = 0, .ofs_y = 0},
{.bitmap_index = 442, .adv_w = 79, .box_w = 5, .box_h = 9, .ofs_x = 0, .ofs_y = 0},
{.bitmap_index = 460, .adv_w = 130, .box_w = 7, .box_h = 7, .ofs_x = 1, .ofs_y = 0},
{.bitmap_index = 478, .adv_w = 107, .box_w = 8, .box_h = 7, .ofs_x = -1, .ofs_y = 0},
{.bitmap_index = 505, .adv_w = 173, .box_w = 11, .box_h = 7, .ofs_x = 0, .ofs_y = 0},
{.bitmap_index = 545, .adv_w = 106, .box_w = 7, .box_h = 7, .ofs_x = 0, .ofs_y = 0},
{.bitmap_index = 570, .adv_w = 107, .box_w = 8, .box_h = 10, .ofs_x = -1, .ofs_y = -3},
{.bitmap_index = 607, .adv_w = 100, .box_w = 6, .box_h = 7, .ofs_x = 0, .ofs_y = 0}
};
/*---------------------
* CHARACTER MAPPING
*--------------------*/
/*Collect the unicode lists and glyph_id offsets*/
static const lv_font_fmt_txt_cmap_t cmaps[] =
{
{
.range_start = 32, .range_length = 1, .glyph_id_start = 1,
.unicode_list = NULL, .glyph_id_ofs_list = NULL, .list_length = 0, .type = LV_FONT_FMT_TXT_CMAP_FORMAT0_TINY
},
{
.range_start = 97, .range_length = 26, .glyph_id_start = 2,
.unicode_list = NULL, .glyph_id_ofs_list = NULL, .list_length = 0, .type = LV_FONT_FMT_TXT_CMAP_FORMAT0_TINY
}
};
/*-----------------
* KERNING
*----------------*/
/*Map glyph_ids to kern left classes*/
static const uint8_t kern_left_class_mapping[] =
{
0, 0, 1, 2, 3, 4, 5, 6,
0, 1, 0, 0, 7, 4, 1, 1,
2, 2, 8, 9, 10, 11, 0, 12,
12, 13, 12, 14
};
/*Map glyph_ids to kern right classes*/
static const uint8_t kern_right_class_mapping[] =
{
0, 0, 1, 2, 3, 3, 3, 0,
3, 2, 4, 5, 2, 2, 4, 4,
3, 4, 3, 4, 6, 7, 8, 9,
9, 10, 9, 11
};
/*Kern values between classes*/
static const int8_t kern_class_values[] =
{
0, 0, 1, 0, 0, 0, 0, 0,
-2, 0, 0, -1, 0, 0, 0, 0,
0, 0, 0, -3, -3, -2, 0, -1,
-2, 0, 0, 0, 1, 0, -1, -3,
-1, 0, 0, 0, 0, 0, 0, 2,
0, 0, 0, 0, -3, 0, 0, 0,
0, 0, 0, 0, -2, -3, -1, -2,
0, -2, 15, 8, 0, 0, 0, 2,
0, 0, -2, 0, -4, -1, 0, -3,
0, -2, -5, -4, -2, 0, 0, 0,
0, 10, 0, 0, 0, 0, 0, 0,
-2, -1, -2, -1, 0, -1, 3, 0,
3, -1, 0, 0, 0, 0, 0, 0,
0, 0, 0, -2, -2, 0, 0, 0,
-3, 0, 0, 0, -2, 0, -2, 0,
0, -3, 0, -3, 0, -3, -1, 3,
0, -2, -6, -2, -2, 0, -3, 0,
1, -2, 0, -2, -6, 0, -2, 0,
0, -2, 0, 0, 0, 0, 0, -2,
-2, 0
};
/*Collect the kern class' data in one place*/
static const lv_font_fmt_txt_kern_classes_t kern_classes =
{
.class_pair_values = kern_class_values,
.left_class_mapping = kern_left_class_mapping,
.right_class_mapping = kern_right_class_mapping,
.left_class_cnt = 14,
.right_class_cnt = 11,
};
/*--------------------
* ALL CUSTOM DATA
*--------------------*/
/*Store all the custom data of the font*/
static lv_font_fmt_txt_dsc_t font_dsc = {
.glyph_bitmap = gylph_bitmap,
.glyph_dsc = glyph_dsc,
.cmaps = cmaps,
.kern_dsc = &kern_classes,
.kern_scale = 16,
.cmap_num = 2,
.bpp = 4,
.kern_classes = 1,
.bitmap_format = 1
};
/*-----------------
* PUBLIC FONT
*----------------*/
/*Initialize a public general font descriptor*/
lv_font_t lv_font_montserrat_12_compr_az = {
.get_glyph_dsc = lv_font_get_glyph_dsc_fmt_txt, /*Function pointer to get glyph's data*/
.get_glyph_bitmap = lv_font_get_bitmap_fmt_txt, /*Function pointer to get glyph's bitmap*/
.line_height = 13, /*The maximum line height required by the font*/
.base_line = 3, /*Baseline measured from the bottom of the line*/
#if !(LVGL_VERSION_MAJOR == 6 && LVGL_VERSION_MINOR == 0)
.subpx = LV_FONT_SUBPX_NONE,
#endif
.dsc = &font_dsc /*The custom font data. Will be accessed by `get_glyph_bitmap/dsc` */
};
#endif /*#if LV_FONT_MONTSERRAT_12_COMPR_AZ*/
#endif

View File

@@ -0,0 +1,357 @@
#include "../../../lvgl.h"
#if LV_USE_DEMO_STRESS
/*******************************************************************************
* Size: 16 px
* Bpp: 4
* Opts:
******************************************************************************/
#ifndef LV_FONT_MONTSERRAT_16_COMPR_AZ
#define LV_FONT_MONTSERRAT_16_COMPR_AZ 1
#endif
#if LV_FONT_MONTSERRAT_16_COMPR_AZ
/*-----------------
* BITMAPS
*----------------*/
/*Store the image of the glyphs*/
static LV_ATTRIBUTE_LARGE_CONST const uint8_t gylph_bitmap[] = {
/* U+20 " " */
/* U+61 "a" */
0x1, 0x9e, 0xfd, 0x80, 0xb, 0x5d, 0xa1, 0xdd,
0x20, 0xe, 0xe4, 0x3d, 0x2b, 0x0, 0x8, 0x3,
0x60, 0x10, 0x15, 0xf7, 0xfa, 0x40, 0x2c, 0x7a,
0xdd, 0x40, 0x0, 0x86, 0x50, 0x88, 0x1, 0x10,
0xca, 0x13, 0xc0, 0x5, 0x8f, 0x7b, 0x92, 0x0,
/* U+62 "b" */
0x8f, 0x0, 0xff, 0xe9, 0x15, 0xff, 0x59, 0x80,
0x6c, 0x78, 0x65, 0xc3, 0x0, 0x93, 0x1e, 0x3c,
0x7c, 0x2, 0x80, 0x8, 0x64, 0xc4, 0x0, 0x40,
0x18, 0x80, 0x80, 0x4, 0x1, 0x88, 0x8, 0x1,
0x0, 0x10, 0xc9, 0x8, 0x1, 0x31, 0xe3, 0xc7,
0x80, 0x3, 0x8f, 0xc, 0xb8, 0x60,
/* U+63 "c" */
0x0, 0x1d, 0x77, 0xe2, 0x0, 0x13, 0x1d, 0xa0,
0x2d, 0x2, 0x4b, 0x61, 0xf2, 0x14, 0xca, 0xc0,
0x33, 0x8b, 0x82, 0x80, 0x79, 0xc1, 0x40, 0x3c,
0x65, 0x60, 0x19, 0x84, 0x24, 0xb5, 0xdd, 0x92,
0xa0, 0x98, 0xf3, 0x1, 0x68,
/* U+64 "d" */
0x0, 0xf8, 0x7d, 0xc0, 0x3f, 0xf9, 0x47, 0x7f,
0xea, 0x20, 0x9, 0x31, 0x9e, 0x1b, 0x40, 0x2a,
0x2d, 0x87, 0xc5, 0x0, 0x18, 0xd8, 0x6, 0x80,
0x3, 0x82, 0x80, 0x62, 0x0, 0x38, 0x30, 0x6,
0x20, 0x1, 0x8c, 0x80, 0x69, 0x0, 0xa8, 0xf1,
0x96, 0xd0, 0x2, 0x4c, 0x79, 0xa0, 0xc0, 0x0,
/* U+65 "e" */
0x0, 0x1d, 0xff, 0x51, 0x0, 0x49, 0x8f, 0x32,
0x4c, 0x20, 0x5, 0x1e, 0x33, 0xf8, 0x40, 0x18,
0xc8, 0x4, 0x32, 0xa0, 0xe1, 0x5f, 0xfa, 0x0,
0x5c, 0x23, 0x77, 0xc2, 0x63, 0x64, 0x58, 0x8,
0x1, 0x47, 0xb0, 0xf5, 0xaa, 0x0, 0x4c, 0x76,
0x87, 0x95, 0x0,
/* U+66 "f" */
0x0, 0x2e, 0xfe, 0x0, 0xa, 0x9a, 0xac, 0x0,
0xc1, 0xa, 0xe1, 0x96, 0x19, 0xf4, 0x10, 0xe1,
0x15, 0x20, 0x9a, 0x8, 0xa6, 0x1, 0xff, 0xdf,
/* U+67 "g" */
0x0, 0x1d, 0xff, 0xac, 0xba, 0x41, 0x31, 0x5e,
0x1f, 0x44, 0x1, 0x45, 0xf0, 0xf8, 0xa0, 0x3,
0x1b, 0x10, 0xa, 0xc0, 0xe, 0x4, 0x1, 0x84,
0x0, 0xe0, 0x40, 0x18, 0x40, 0x6, 0x36, 0x1,
0xa0, 0x2, 0xa2, 0xd8, 0x7c, 0x60, 0x10, 0x4c,
0x67, 0x87, 0xc0, 0xf0, 0x1, 0xdf, 0xfa, 0xd8,
0xc, 0x27, 0xa5, 0xdd, 0x54, 0x44, 0x4, 0x4a,
0xc4, 0x1d, 0xd6, 0x0,
/* U+68 "h" */
0x8f, 0x0, 0xff, 0xe7, 0x95, 0xff, 0x50, 0x80,
0x5a, 0xe, 0xe5, 0xc0, 0x9, 0xee, 0x26, 0x44,
0x80, 0x9, 0x0, 0x9c, 0xc, 0x0, 0x20, 0x10,
0x87, 0x80, 0x7f, 0xf6, 0x0,
/* U+69 "i" */
0x9e, 0x13, 0x13, 0xaf, 0x28, 0xf0, 0xf, 0xfe,
0x68,
/* U+6A "j" */
0x0, 0x9f, 0x88, 0x2, 0xe1, 0x10, 0x5, 0x3e,
0x60, 0x13, 0xf8, 0x80, 0x7f, 0xf9, 0xfc, 0x4,
0x50, 0xcc, 0x30, 0x26, 0x92, 0xe0,
/* U+6B "k" */
0x8f, 0x0, 0xff, 0xe9, 0xe, 0xe8, 0x40, 0x30,
0xe1, 0xf8, 0x80, 0x43, 0x87, 0x84, 0x1, 0x16,
0x16, 0x90, 0x6, 0xc2, 0x4, 0x0, 0xf6, 0xa4,
0x18, 0x6, 0xc2, 0xa1, 0xd1, 0x0, 0x88, 0x7,
0x46, 0x80, 0x3c, 0x70, 0x8e,
/* U+6C "l" */
0x8f, 0x0, 0xff, 0xe5, 0x0,
/* U+6D "m" */
0x8e, 0x3c, 0xfe, 0x91, 0x3b, 0xfe, 0xa2, 0x0,
0xe, 0x2c, 0xbb, 0x6e, 0x3c, 0xb2, 0xf8, 0x5,
0x12, 0xd2, 0xc6, 0x6c, 0x68, 0xa2, 0x50, 0x3,
0x0, 0x58, 0x14, 0x1, 0x20, 0x10, 0x0, 0x40,
0x21, 0x2, 0x0, 0x84, 0x3c, 0x3, 0xff, 0xe0,
/* U+6E "n" */
0x8e, 0x3b, 0xfe, 0xa1, 0x0, 0xe, 0xc, 0xb2,
0xe0, 0x4, 0xf4, 0xd1, 0x24, 0x80, 0x9, 0x0,
0x9c, 0xc, 0x0, 0x20, 0x10, 0x87, 0x80, 0x7f,
0xf6, 0x0,
/* U+6F "o" */
0x0, 0x1d, 0xf7, 0xe2, 0x0, 0x49, 0x8c, 0xc8,
0xb, 0x60, 0x5, 0x16, 0xc3, 0xe2, 0x48, 0x98,
0xd8, 0x6, 0x80, 0x47, 0x5, 0x0, 0xc4, 0x4,
0xe0, 0xa0, 0x18, 0x80, 0x8c, 0x6c, 0x3, 0x40,
0x20, 0x51, 0x6b, 0xbb, 0x12, 0x44, 0x13, 0x1a,
0x60, 0x2d, 0x80,
/* U+70 "p" */
0x8e, 0x3b, 0xfe, 0xb3, 0x0, 0x87, 0x2, 0xa5,
0xb0, 0xc0, 0x26, 0xb5, 0x7d, 0x2f, 0x0, 0xa0,
0x3, 0x51, 0x88, 0x0, 0x40, 0x31, 0x1, 0x0,
0x8, 0x3, 0x10, 0x10, 0x2, 0x0, 0x21, 0x92,
0x10, 0x2, 0x63, 0xc7, 0x8f, 0x0, 0x58, 0xf0,
0xcb, 0x86, 0x1, 0x15, 0xff, 0x59, 0x80, 0x7f,
0xf2, 0x80,
/* U+71 "q" */
0x0, 0x1d, 0xff, 0xa8, 0xbd, 0xc1, 0x31, 0x9e,
0x1f, 0x0, 0x2a, 0x2d, 0x87, 0xd5, 0x0, 0x18,
0xd8, 0x6, 0x80, 0x3, 0x82, 0x80, 0x62, 0x0,
0x38, 0x28, 0x6, 0x20, 0x1, 0x8d, 0x80, 0x68,
0x0, 0xa8, 0xb5, 0xdd, 0x8a, 0x1, 0x26, 0x34,
0x41, 0xb4, 0x3, 0x1d, 0xff, 0xa8, 0x80, 0x3f,
0xf9, 0x40,
/* U+72 "r" */
0x8e, 0x2b, 0xf0, 0x0, 0xe3, 0x30, 0x2, 0x4d,
0x90, 0xa, 0x0, 0x38, 0x80, 0x3f, 0xf9, 0xe0,
/* U+73 "s" */
0x2, 0xae, 0xfd, 0x91, 0x16, 0x3c, 0xc9, 0x10,
0x2a, 0x3c, 0xed, 0x3a, 0xc, 0x10, 0x82, 0x1,
0x14, 0xad, 0xf6, 0xb0, 0x1, 0xbb, 0x94, 0xd2,
0xa0, 0x20, 0x2b, 0x60, 0x4b, 0xd4, 0xed, 0x60,
0x88, 0x67, 0x88, 0x3d, 0x98,
/* U+74 "t" */
0x5, 0xf3, 0x0, 0xff, 0x65, 0x6, 0x7d, 0x4,
0x38, 0x45, 0x48, 0x26, 0x82, 0x29, 0x80, 0x7f,
0xf2, 0xc4, 0x1c, 0x3, 0x28, 0x43, 0x40, 0x0,
0x68, 0x65, 0x4,
/* U+75 "u" */
0xae, 0x0, 0xc5, 0xea, 0x1, 0xff, 0xd8, 0x31,
0x0, 0xcc, 0x0, 0xf0, 0x30, 0xb, 0x80, 0xe,
0x3a, 0xed, 0x6a, 0x0, 0x1c, 0x59, 0x90, 0x60,
0x0,
/* U+76 "v" */
0xd, 0xc0, 0xe, 0xcb, 0xb, 0x32, 0x0, 0x88,
0xf8, 0x18, 0x2c, 0x2, 0xb1, 0x50, 0x3, 0x38,
0x4, 0xcc, 0x0, 0xac, 0x58, 0x18, 0x24, 0x2,
0x23, 0xa0, 0xa4, 0x10, 0xd, 0x26, 0xc7, 0xe0,
0x1c, 0xa3, 0x24, 0x80, 0x1e, 0x60, 0xa0, 0x8,
/* U+77 "w" */
0xbb, 0x0, 0x69, 0xf1, 0x0, 0x93, 0xc7, 0x50,
0x40, 0x27, 0x7, 0x0, 0xb4, 0xc5, 0x81, 0xc0,
0xa, 0x27, 0xa0, 0x13, 0x50, 0x1, 0x68, 0x1,
0xe9, 0x28, 0x20, 0xa0, 0xe0, 0xf, 0x31, 0x5,
0xe5, 0x6, 0xf, 0x41, 0x0, 0x28, 0x33, 0x1,
0x41, 0xac, 0x17, 0x80, 0x32, 0xde, 0xa8, 0x3,
0x4e, 0x1, 0x40, 0x37, 0x1a, 0x70, 0x1, 0x5,
0xd4, 0x3, 0x90, 0x44, 0x80, 0x13, 0x7, 0x0,
0x40,
/* U+78 "x" */
0x4f, 0x70, 0xa, 0x7c, 0x91, 0xe0, 0xc1, 0x5a,
0x88, 0x20, 0xf8, 0xad, 0x94, 0x2, 0xe2, 0xd3,
0x90, 0xc, 0x4a, 0x16, 0x1, 0xc8, 0xa5, 0x2,
0x1, 0xd, 0x26, 0x9e, 0x80, 0x54, 0x14, 0x1c,
0x70, 0xc, 0x94, 0x20, 0x70, 0xe8,
/* U+79 "y" */
0xd, 0xc0, 0xe, 0xcb, 0xb, 0x33, 0x0, 0x44,
0x7e, 0xc, 0x32, 0x1, 0x59, 0x20, 0x1, 0x94,
0x40, 0x5a, 0x80, 0x29, 0x6, 0x6, 0x6, 0x0,
0x85, 0x64, 0x29, 0x84, 0x3, 0x48, 0xc9, 0x58,
0x7, 0x19, 0x99, 0x8, 0x3, 0xd4, 0x1e, 0x1,
0xf6, 0x12, 0x0, 0x43, 0x8f, 0x2b, 0x0, 0x1c,
0xd2, 0xf0, 0xa0, 0x18,
/* U+7A "z" */
0x4f, 0xff, 0x4a, 0xd5, 0x64, 0xd, 0x15, 0x58,
0x51, 0xd0, 0x2, 0x1a, 0x38, 0x0, 0xd4, 0x1a,
0x1, 0xa1, 0x28, 0x40, 0x24, 0x78, 0x40, 0x8,
0x68, 0x49, 0x56, 0x34, 0x11, 0x55, 0x6f
};
/*---------------------
* GLYPH DESCRIPTION
*--------------------*/
static const lv_font_fmt_txt_glyph_dsc_t glyph_dsc[] = {
{.bitmap_index = 0, .adv_w = 0, .box_w = 0, .box_h = 0, .ofs_x = 0, .ofs_y = 0} /* id = 0 reserved */,
{.bitmap_index = 0, .adv_w = 69, .box_w = 0, .box_h = 0, .ofs_x = 0, .ofs_y = 0},
{.bitmap_index = 0, .adv_w = 153, .box_w = 9, .box_h = 9, .ofs_x = 0, .ofs_y = 0},
{.bitmap_index = 40, .adv_w = 175, .box_w = 10, .box_h = 12, .ofs_x = 1, .ofs_y = 0},
{.bitmap_index = 86, .adv_w = 146, .box_w = 9, .box_h = 9, .ofs_x = 0, .ofs_y = 0},
{.bitmap_index = 123, .adv_w = 175, .box_w = 10, .box_h = 12, .ofs_x = 0, .ofs_y = 0},
{.bitmap_index = 171, .adv_w = 157, .box_w = 10, .box_h = 9, .ofs_x = 0, .ofs_y = 0},
{.bitmap_index = 214, .adv_w = 90, .box_w = 7, .box_h = 12, .ofs_x = 0, .ofs_y = 0},
{.bitmap_index = 238, .adv_w = 177, .box_w = 10, .box_h = 12, .ofs_x = 0, .ofs_y = -3},
{.bitmap_index = 298, .adv_w = 174, .box_w = 9, .box_h = 12, .ofs_x = 1, .ofs_y = 0},
{.bitmap_index = 327, .adv_w = 71, .box_w = 3, .box_h = 12, .ofs_x = 1, .ofs_y = 0},
{.bitmap_index = 336, .adv_w = 73, .box_w = 6, .box_h = 15, .ofs_x = -2, .ofs_y = -3},
{.bitmap_index = 358, .adv_w = 158, .box_w = 9, .box_h = 12, .ofs_x = 1, .ofs_y = 0},
{.bitmap_index = 395, .adv_w = 71, .box_w = 2, .box_h = 12, .ofs_x = 1, .ofs_y = 0},
{.bitmap_index = 400, .adv_w = 271, .box_w = 15, .box_h = 9, .ofs_x = 1, .ofs_y = 0},
{.bitmap_index = 440, .adv_w = 174, .box_w = 9, .box_h = 9, .ofs_x = 1, .ofs_y = 0},
{.bitmap_index = 466, .adv_w = 163, .box_w = 10, .box_h = 9, .ofs_x = 0, .ofs_y = 0},
{.bitmap_index = 509, .adv_w = 175, .box_w = 10, .box_h = 12, .ofs_x = 1, .ofs_y = -3},
{.bitmap_index = 559, .adv_w = 175, .box_w = 10, .box_h = 12, .ofs_x = 0, .ofs_y = -3},
{.bitmap_index = 609, .adv_w = 105, .box_w = 6, .box_h = 9, .ofs_x = 1, .ofs_y = 0},
{.bitmap_index = 625, .adv_w = 128, .box_w = 8, .box_h = 9, .ofs_x = 0, .ofs_y = 0},
{.bitmap_index = 662, .adv_w = 106, .box_w = 7, .box_h = 11, .ofs_x = 0, .ofs_y = 0},
{.bitmap_index = 689, .adv_w = 173, .box_w = 9, .box_h = 9, .ofs_x = 1, .ofs_y = 0},
{.bitmap_index = 714, .adv_w = 143, .box_w = 10, .box_h = 9, .ofs_x = -1, .ofs_y = 0},
{.bitmap_index = 754, .adv_w = 230, .box_w = 15, .box_h = 9, .ofs_x = 0, .ofs_y = 0},
{.bitmap_index = 819, .adv_w = 141, .box_w = 9, .box_h = 9, .ofs_x = 0, .ofs_y = 0},
{.bitmap_index = 857, .adv_w = 143, .box_w = 10, .box_h = 12, .ofs_x = -1, .ofs_y = -3},
{.bitmap_index = 909, .adv_w = 133, .box_w = 8, .box_h = 9, .ofs_x = 0, .ofs_y = 0}
};
/*---------------------
* CHARACTER MAPPING
*--------------------*/
/*Collect the unicode lists and glyph_id offsets*/
static const lv_font_fmt_txt_cmap_t cmaps[] =
{
{
.range_start = 32, .range_length = 1, .glyph_id_start = 1,
.unicode_list = NULL, .glyph_id_ofs_list = NULL, .list_length = 0, .type = LV_FONT_FMT_TXT_CMAP_FORMAT0_TINY
},
{
.range_start = 97, .range_length = 26, .glyph_id_start = 2,
.unicode_list = NULL, .glyph_id_ofs_list = NULL, .list_length = 0, .type = LV_FONT_FMT_TXT_CMAP_FORMAT0_TINY
}
};
/*-----------------
* KERNING
*----------------*/
/*Map glyph_ids to kern left classes*/
static const uint8_t kern_left_class_mapping[] =
{
0, 0, 1, 2, 3, 4, 5, 6,
0, 1, 0, 0, 7, 4, 1, 1,
2, 2, 8, 9, 10, 11, 0, 12,
12, 13, 12, 14
};
/*Map glyph_ids to kern right classes*/
static const uint8_t kern_right_class_mapping[] =
{
0, 0, 1, 2, 3, 3, 3, 0,
3, 2, 4, 5, 2, 2, 4, 4,
3, 4, 3, 4, 6, 7, 8, 9,
9, 10, 9, 11
};
/*Kern values between classes*/
static const int8_t kern_class_values[] =
{
0, 0, 1, 0, 0, 0, 0, 0,
-3, 0, 0, -1, 0, 0, 0, 0,
0, 0, 0, -4, -5, -2, 0, -2,
-2, 0, 0, 0, 2, 0, -2, -4,
-2, 0, 0, 0, 0, 0, 0, 3,
0, 0, 0, 0, -4, 0, 0, 0,
0, 0, 0, 0, -3, -4, -1, -3,
0, -2, 20, 11, 0, 0, 0, 3,
0, 0, -3, 0, -6, -2, 0, -4,
0, -3, -7, -5, -3, 0, 0, 0,
0, 13, 0, 0, 0, 0, 0, 0,
-2, -2, -3, -2, 0, -1, 4, 0,
4, -2, 0, 0, 0, 0, 0, 0,
0, 0, 0, -3, -3, 0, 0, 0,
-5, 0, 0, 0, -3, 0, -3, 0,
0, -4, 0, -4, 0, -4, -2, 4,
0, -2, -8, -3, -3, 0, -5, 0,
2, -3, 0, -3, -8, 0, -3, 0,
0, -2, 0, 0, 0, 1, 0, -3,
-3, 0
};
/*Collect the kern class' data in one place*/
static const lv_font_fmt_txt_kern_classes_t kern_classes =
{
.class_pair_values = kern_class_values,
.left_class_mapping = kern_left_class_mapping,
.right_class_mapping = kern_right_class_mapping,
.left_class_cnt = 14,
.right_class_cnt = 11,
};
/*--------------------
* ALL CUSTOM DATA
*--------------------*/
/*Store all the custom data of the font*/
static lv_font_fmt_txt_dsc_t font_dsc = {
.glyph_bitmap = gylph_bitmap,
.glyph_dsc = glyph_dsc,
.cmaps = cmaps,
.kern_dsc = &kern_classes,
.kern_scale = 16,
.cmap_num = 2,
.bpp = 4,
.kern_classes = 1,
.bitmap_format = 1
};
/*-----------------
* PUBLIC FONT
*----------------*/
/*Initialize a public general font descriptor*/
lv_font_t lv_font_montserrat_16_compr_az = {
.get_glyph_dsc = lv_font_get_glyph_dsc_fmt_txt, /*Function pointer to get glyph's data*/
.get_glyph_bitmap = lv_font_get_bitmap_fmt_txt, /*Function pointer to get glyph's bitmap*/
.line_height = 15, /*The maximum line height required by the font*/
.base_line = 3, /*Baseline measured from the bottom of the line*/
#if !(LVGL_VERSION_MAJOR == 6 && LVGL_VERSION_MINOR == 0)
.subpx = LV_FONT_SUBPX_NONE,
#endif
.dsc = &font_dsc /*The custom font data. Will be accessed by `get_glyph_bitmap/dsc` */
};
#endif /*#if LV_FONT_MONTSERRAT_16_COMPR_AZ*/
#endif

View File

@@ -0,0 +1,507 @@
#include "../../../lvgl.h"
#if LV_USE_DEMO_STRESS
/*******************************************************************************
* Size: 28 px
* Bpp: 4
* Opts:
******************************************************************************/
#ifndef LV_FONT_MONTSERRAT_28_COMPR_AZ
#define LV_FONT_MONTSERRAT_28_COMPR_AZ 1
#endif
#if LV_FONT_MONTSERRAT_28_COMPR_AZ
/*-----------------
* BITMAPS
*----------------*/
/*Store the image of the glyphs*/
static LV_ATTRIBUTE_LARGE_CONST const uint8_t gylph_bitmap[] = {
/* U+20 " " */
/* U+61 "a" */
0x0, 0xb, 0xdf, 0x7f, 0xb6, 0x90, 0x3, 0x47,
0x42, 0x8, 0x0, 0x96, 0xe4, 0x2, 0x50, 0x15,
0x9a, 0x95, 0x0, 0x33, 0x0, 0x1d, 0x1d, 0x4c,
0xad, 0x5a, 0x0, 0x80, 0x1, 0xb8, 0x7, 0x89,
0xc0, 0x48, 0x3, 0xfd, 0xc0, 0x6, 0x0, 0x14,
0x67, 0x73, 0xfe, 0x90, 0xc, 0xda, 0xe6, 0x22,
0x0, 0xf0, 0x94, 0x80, 0xd7, 0x7f, 0xe9, 0x0,
0x94, 0x1, 0x4a, 0x20, 0x1f, 0xb8, 0x0, 0xa0,
0x1e, 0xe0, 0xb, 0x80, 0x8, 0x1, 0xc4, 0xe0,
0x12, 0x80, 0x2d, 0x40, 0x2, 0xd8, 0x1, 0x8a,
0x80, 0x6b, 0xfd, 0xd2, 0x2c, 0x1, 0x97, 0x58,
0x40, 0x4, 0xdb, 0x40, 0x10,
/* U+62 "b" */
0x7f, 0xf1, 0x80, 0x7f, 0xff, 0xc0, 0x3f, 0xf9,
0x4b, 0x7d, 0xfb, 0x6a, 0x1, 0xf3, 0x65, 0x20,
0x81, 0x25, 0x69, 0x0, 0x75, 0x98, 0x2c, 0x4b,
0x88, 0x16, 0x90, 0x6, 0x12, 0xda, 0x76, 0x8e,
0x60, 0x7, 0x80, 0x77, 0x90, 0x7, 0x4a, 0x81,
0x28, 0x4, 0xc4, 0x1, 0xf4, 0x0, 0x3c, 0x2,
0xc0, 0xf, 0xc4, 0x20, 0xc0, 0x13, 0x0, 0x7f,
0x18, 0x10, 0x4, 0xc0, 0x1f, 0xc6, 0x4, 0x1,
0x60, 0x7, 0xe3, 0x10, 0x60, 0x9, 0x88, 0x3,
0xe8, 0x0, 0x78, 0x6, 0xf2, 0x0, 0xe9, 0x40,
0x25, 0x0, 0x88, 0x9b, 0x4e, 0xd1, 0xcc, 0x0,
0xf0, 0xd, 0xc6, 0xb, 0x12, 0xe2, 0x5, 0xa4,
0x1, 0x87, 0x29, 0x4, 0x5, 0x2b, 0x48, 0x0,
/* U+63 "c" */
0x0, 0xc7, 0x3b, 0xfe, 0xd9, 0x30, 0xe, 0x1b,
0xc6, 0x20, 0x1, 0x36, 0x48, 0x4, 0x38, 0x80,
0x2d, 0x32, 0x60, 0x3, 0x40, 0x2, 0x88, 0x17,
0xa5, 0x99, 0x3c, 0x60, 0x11, 0xa0, 0x1d, 0x0,
0x70, 0xee, 0xa0, 0x2c, 0x1, 0x0, 0x1f, 0x9,
0x0, 0xc, 0x0, 0x80, 0x1f, 0xf3, 0x80, 0x80,
0x7f, 0xf0, 0x1c, 0x4, 0x3, 0xff, 0x80, 0x60,
0x4, 0x0, 0xff, 0xa8, 0x1, 0x0, 0x1f, 0x9,
0x0, 0x9, 0x0, 0xe8, 0x3, 0x87, 0x75, 0x0,
0xa, 0x20, 0x5e, 0x96, 0x64, 0xf1, 0x80, 0x61,
0xc4, 0x1, 0x69, 0x93, 0x0, 0x1e, 0x0, 0x21,
0xbc, 0x62, 0x0, 0x13, 0x64, 0x0, 0x0,
/* U+64 "d" */
0x0, 0xff, 0xe0, 0x17, 0xfa, 0x0, 0x3f, 0xff,
0xe0, 0x1f, 0xcb, 0x5b, 0xfd, 0x8c, 0x1, 0xf1,
0x65, 0x29, 0x0, 0x9c, 0xeb, 0x0, 0x61, 0xc3,
0x1, 0x69, 0x92, 0x81, 0x50, 0x6, 0xd1, 0x5,
0xe9, 0x66, 0x57, 0x18, 0x80, 0x46, 0x60, 0x3a,
0x0, 0xe1, 0xd1, 0x0, 0xa8, 0x1, 0x0, 0x1f,
0xb, 0x0, 0x44, 0x0, 0x40, 0xf, 0xd6, 0x1,
0x38, 0x8, 0x7, 0xf0, 0x80, 0x4e, 0x2, 0x1,
0xfc, 0x20, 0x11, 0x0, 0xc, 0x3, 0xf2, 0x0,
0x54, 0x0, 0x80, 0xf, 0xd4, 0x1, 0x19, 0x81,
0x20, 0x3, 0xd6, 0x40, 0x1b, 0x44, 0x1f, 0x18,
0xd1, 0xf9, 0x4, 0x3, 0xe, 0x18, 0x1c, 0xe5,
0xc0, 0x8b, 0x40, 0x38, 0xb2, 0x90, 0x80, 0x4e,
0x38, 0xc0, 0x20,
/* U+65 "e" */
0x0, 0xc9, 0x7b, 0xfd, 0x8c, 0x20, 0x1c, 0x39,
0x68, 0x40, 0x27, 0x3e, 0x80, 0x10, 0xf9, 0x82,
0x4d, 0xd3, 0x0, 0xda, 0x0, 0x28, 0x42, 0xec,
0xc8, 0xb3, 0xa4, 0x14, 0x26, 0x81, 0x28, 0x1,
0xc5, 0xe0, 0x2f, 0x40, 0x6, 0x0, 0xf8, 0x90,
0x34, 0x80, 0x1f, 0xff, 0xc8, 0xc, 0xe0, 0x1f,
0xfc, 0x13, 0x70, 0x7, 0xff, 0xfd, 0xc6, 0x0,
0x40, 0xf, 0xfa, 0xc0, 0x10, 0x1, 0xf8, 0x40,
0x6, 0x80, 0x76, 0x20, 0x1c, 0xbe, 0x60, 0xa,
0x20, 0x4e, 0x96, 0x64, 0x65, 0xf, 0x80, 0x7,
0x10, 0x0, 0xd3, 0x27, 0x30, 0x2e, 0x0, 0x86,
0xf1, 0x88, 0x40, 0x56, 0xb4, 0x80,
/* U+66 "f" */
0x0, 0xc3, 0x1b, 0xfd, 0x68, 0x1, 0xe, 0x39,
0x0, 0xa6, 0x80, 0x50, 0x40, 0xb7, 0x66, 0xa0,
0x9, 0xc0, 0xa9, 0x11, 0x26, 0x1, 0x8, 0x20,
0x7, 0xc2, 0x1, 0xfa, 0x7f, 0x80, 0xd, 0xff,
0x70, 0x7, 0xff, 0x2, 0xf2, 0xc0, 0x9, 0x99,
0x68, 0x11, 0xa8, 0x0, 0x4c, 0xf0, 0x7, 0xff,
0xfc, 0x3, 0xff, 0xc6,
/* U+67 "g" */
0x0, 0xcb, 0x7b, 0xfd, 0x8e, 0x21, 0x9f, 0x80,
0x3, 0xda, 0x42, 0x1, 0x38, 0xf4, 0x0, 0xc7,
0x84, 0x4, 0xf3, 0x27, 0x11, 0x59, 0x0, 0x5c,
0x0, 0x7d, 0x86, 0x64, 0x73, 0x80, 0x80, 0x14,
0x81, 0xa0, 0x3, 0xd0, 0xc0, 0x17, 0x80, 0x2c,
0x3, 0xf5, 0x80, 0x4c, 0x2, 0x40, 0x1f, 0x88,
0x40, 0x30, 0x80, 0x7f, 0x84, 0x0, 0xc0, 0x2,
0x0, 0xfc, 0x40, 0x17, 0x80, 0x20, 0x3, 0xf4,
0x0, 0x4a, 0x40, 0xb2, 0x1, 0xe9, 0x50, 0xd,
0xe0, 0x6, 0xe9, 0x66, 0x4f, 0x30, 0x7, 0x16,
0x10, 0xb, 0x4c, 0x98, 0x45, 0x60, 0x7, 0x0,
0x1e, 0xd2, 0x10, 0x9, 0xc7, 0xa0, 0x0, 0x40,
0x32, 0xde, 0xff, 0x63, 0x89, 0x0, 0xc, 0x3,
0xff, 0x81, 0x40, 0xc, 0x3, 0xe6, 0x0, 0xf9,
0x5c, 0x5, 0x43, 0xc6, 0x7a, 0x9d, 0x99, 0x19,
0x40, 0xb, 0x0, 0x71, 0x80, 0xac, 0x4c, 0x9c,
0xc0, 0x12, 0xa0, 0x2, 0xcc, 0x3a, 0x8, 0x0,
0x52, 0x39, 0x80, 0x0,
/* U+68 "h" */
0x7f, 0xf1, 0x80, 0x7f, 0xff, 0xc0, 0x3f, 0xf8,
0x8d, 0x7d, 0xfd, 0x6a, 0x1, 0xe6, 0xd9, 0x41,
0x1, 0x4a, 0xb0, 0xe, 0xa2, 0x16, 0x88, 0x28,
0x1, 0x24, 0x3, 0x93, 0xa5, 0xdd, 0x58, 0x0,
0x62, 0x0, 0x86, 0xc0, 0x38, 0xe0, 0x0, 0x80,
0x14, 0x80, 0x7c, 0x80, 0xe, 0x0, 0x8c, 0x3,
0xe2, 0x0, 0x8, 0x4, 0xe0, 0x1f, 0xe3, 0x0,
0xff, 0xff, 0x80, 0x7f, 0xf4, 0x80,
/* U+69 "i" */
0x5e, 0xd3, 0x81, 0x29, 0x60, 0x6, 0xdc, 0xd3,
0x83, 0x28, 0x7, 0x3f, 0xf8, 0xc0, 0x3f, 0xfd,
0x80,
/* U+6A "j" */
0x0, 0xe3, 0xee, 0x20, 0x7, 0x40, 0x8a, 0x0,
0x38, 0x80, 0xa, 0x1, 0xd3, 0x38, 0x3, 0xcc,
0xc0, 0xf, 0xfe, 0x1a, 0xff, 0x98, 0x3, 0xff,
0xfe, 0x1, 0xff, 0xef, 0x30, 0xe, 0xc0, 0x3,
0x5, 0xb2, 0xc3, 0x0, 0x9a, 0xa4, 0xd3, 0x80,
0x28, 0x1d, 0x48, 0x5, 0x31, 0x0,
/* U+6B "k" */
0x7f, 0xf1, 0x80, 0x7f, 0xff, 0xc0, 0x3f, 0xf9,
0xe9, 0xfe, 0xe2, 0x0, 0xff, 0x2d, 0x80, 0xe1,
0x0, 0x7f, 0x35, 0x0, 0xe1, 0x0, 0x7f, 0x3c,
0x80, 0xe1, 0x0, 0x7f, 0x44, 0x0, 0x70, 0x80,
0x3f, 0xa5, 0xc0, 0x70, 0x80, 0x3f, 0x3d, 0x30,
0x1, 0xc8, 0x3, 0xfa, 0x94, 0x2, 0x65, 0x0,
0xfe, 0x10, 0x3a, 0x0, 0x51, 0x0, 0x7f, 0x26,
0x2b, 0x80, 0x3c, 0x3, 0xf2, 0xd8, 0x2, 0x10,
0xa, 0x80, 0x3e, 0x90, 0xd, 0x64, 0xa, 0xe0,
0x1f, 0xfc, 0xf, 0x0, 0x42, 0x0, 0x7f, 0xc5,
0x40, 0xa, 0x10, 0xf, 0xf9, 0x5c, 0x7, 0x40,
/* U+6C "l" */
0x7f, 0xf1, 0x80, 0x7f, 0xff, 0xc0, 0x38,
/* U+6D "m" */
0x7f, 0xf1, 0xc, 0x67, 0x7e, 0xc9, 0x80, 0x45,
0x1b, 0xfe, 0xd9, 0x20, 0xf, 0x3f, 0xb9, 0x88,
0x13, 0x63, 0x83, 0xeb, 0x90, 0x0, 0x9b, 0x58,
0x3, 0xa8, 0x4e, 0x6e, 0x94, 0x1, 0x15, 0x0,
0x73, 0x74, 0xa0, 0x9, 0x30, 0xe, 0x7c, 0x64,
0x5a, 0x90, 0x2, 0x83, 0xe3, 0x22, 0xd4, 0x0,
0x20, 0x3, 0x14, 0x0, 0x73, 0x10, 0x0, 0xe0,
0x3, 0x9c, 0x81, 0x0, 0x35, 0x0, 0x7c, 0x80,
0xb, 0x0, 0xf9, 0x0, 0x2, 0x1, 0x18, 0x7,
0xdc, 0x0, 0x30, 0xf, 0x84, 0x0, 0x60, 0x13,
0x80, 0x7f, 0x9c, 0x3, 0xfc, 0x20, 0x1f, 0xff,
0xf0, 0xf, 0xff, 0xf8, 0x7, 0xff, 0x50,
/* U+6E "n" */
0x7f, 0xf1, 0x3, 0xe7, 0x7f, 0x5a, 0x80, 0x79,
0xfa, 0xc, 0x40, 0x52, 0xac, 0x3, 0xa8, 0x4a,
0x2a, 0x8e, 0x20, 0x92, 0x1, 0xcd, 0xae, 0xaa,
0x8c, 0x10, 0x62, 0x0, 0x8a, 0x40, 0x38, 0xa4,
0x0, 0x80, 0x15, 0x0, 0x7c, 0xa0, 0xe, 0x0,
0x8c, 0x3, 0xe3, 0x0, 0x8, 0x4, 0xe0, 0x1f,
0xe3, 0x0, 0xff, 0xff, 0x80, 0x7f, 0xf4, 0x80,
/* U+6F "o" */
0x0, 0xc9, 0x5b, 0xfd, 0xb0, 0x40, 0x1e, 0x1b,
0xb2, 0x90, 0x9, 0x3e, 0xc0, 0x6, 0x1f, 0x40,
0x16, 0x99, 0x28, 0x1, 0xec, 0x2, 0xa1, 0x5,
0xe9, 0x66, 0x57, 0x18, 0x23, 0x81, 0xa0, 0x1d,
0x0, 0x70, 0xe8, 0x84, 0x85, 0x80, 0x20, 0x3,
0xe1, 0x90, 0x15, 0x30, 0x2, 0x0, 0x7e, 0x40,
0x1, 0x38, 0x8, 0x7, 0xf0, 0x80, 0x39, 0xc0,
0x40, 0x3f, 0x84, 0x1, 0xc6, 0x0, 0x40, 0xf,
0xd6, 0x0, 0x2b, 0x0, 0x40, 0x7, 0xc2, 0xc0,
0x2a, 0x68, 0x7, 0x40, 0x1c, 0x3a, 0x21, 0x20,
0xa, 0x20, 0x5e, 0x96, 0x65, 0x71, 0x82, 0x38,
0x0, 0x71, 0x0, 0x5a, 0x64, 0xa0, 0x7, 0xb0,
0xc, 0x37, 0x65, 0x20, 0x12, 0x6d, 0x80, 0x8,
/* U+70 "p" */
0x7f, 0xf1, 0x3, 0x5f, 0x7e, 0xda, 0x80, 0x7c,
0xdb, 0x28, 0x20, 0x49, 0x5a, 0x40, 0x1d, 0x44,
0x2f, 0x76, 0x93, 0x2, 0xd2, 0x0, 0xc2, 0x7f,
0x8, 0x86, 0xc8, 0x0, 0x78, 0x6, 0x1d, 0x10,
0xe, 0x76, 0x2, 0x50, 0x9, 0x84, 0x3, 0xeb,
0x0, 0x78, 0x5, 0x80, 0x1f, 0x88, 0x41, 0x80,
0x27, 0x0, 0xfe, 0x30, 0x20, 0x9, 0x80, 0x3f,
0x8c, 0x8, 0x2, 0xc0, 0xf, 0xc6, 0x20, 0xc0,
0x13, 0x10, 0x7, 0xd0, 0x0, 0xf0, 0xd, 0xe4,
0x1, 0xd2, 0x80, 0x4a, 0x1, 0x9, 0x6d, 0x3b,
0x47, 0x30, 0x3, 0xc0, 0x35, 0x18, 0x2c, 0x4b,
0x88, 0x16, 0x90, 0x6, 0x7c, 0xa4, 0x10, 0x14,
0xad, 0x20, 0xf, 0x96, 0xfb, 0xfa, 0xd4, 0x3,
0xff, 0xf0,
/* U+71 "q" */
0x0, 0xcb, 0x5b, 0xfd, 0x8c, 0x0, 0xff, 0x40,
0x0, 0xb2, 0x94, 0x80, 0x4e, 0x74, 0x80, 0x30,
0xe1, 0x80, 0xb4, 0xc9, 0x40, 0xb0, 0x3, 0x68,
0x82, 0xf4, 0xb3, 0x2b, 0x4c, 0x40, 0x23, 0x30,
0x1d, 0x0, 0x71, 0x68, 0x80, 0x54, 0x0, 0x80,
0xf, 0x86, 0x40, 0x22, 0x0, 0x20, 0x7, 0xe4,
0x0, 0x9c, 0x4, 0x3, 0xf8, 0x40, 0x27, 0x1,
0x0, 0xfe, 0x10, 0x8, 0x80, 0x8, 0x1, 0xfa,
0xc0, 0x2a, 0x0, 0x40, 0x7, 0xc2, 0xc0, 0x11,
0x98, 0xe, 0x80, 0x38, 0x74, 0x40, 0x36, 0x88,
0x2f, 0x4b, 0x32, 0xb8, 0xc4, 0x3, 0xe, 0x18,
0xb, 0x4c, 0x94, 0xf, 0x40, 0x38, 0xb2, 0x90,
0x80, 0x4e, 0x70, 0x40, 0x3e, 0x5b, 0xdf, 0xec,
0x60, 0xf, 0xff, 0xc8,
/* U+72 "r" */
0x7f, 0xf1, 0x3, 0x67, 0x40, 0x4, 0x3b, 0x26,
0x20, 0x1b, 0x88, 0xd, 0xb4, 0x2, 0x22, 0x6e,
0x4a, 0x80, 0x6c, 0x20, 0xf, 0x38, 0x80, 0x7d,
0xa0, 0x1f, 0x98, 0x3, 0xff, 0xf0,
/* U+73 "s" */
0x0, 0x8a, 0x77, 0xfd, 0xd9, 0x6, 0x1, 0xa3,
0x58, 0x80, 0x2, 0x6f, 0x90, 0x0, 0x57, 0x1,
0x79, 0xa9, 0x61, 0xa, 0x0, 0x70, 0x3, 0x21,
0x95, 0xa7, 0xb0, 0x80, 0xc, 0x4, 0x40, 0xf,
0x18, 0x4, 0xc0, 0x4e, 0x1, 0xfe, 0x80, 0x4,
0x75, 0xc2, 0x88, 0x7, 0x1d, 0x90, 0xa, 0x3d,
0x76, 0xa8, 0x6, 0x4d, 0xc9, 0x63, 0x0, 0x15,
0x38, 0x7, 0x1b, 0x4e, 0x7d, 0x8, 0x40, 0x7,
0xf9, 0x58, 0x0, 0x40, 0xae, 0x1, 0xf1, 0x80,
0xc, 0x2e, 0x3e, 0x9d, 0x54, 0xf8, 0x80, 0x82,
0x22, 0x0, 0x2c, 0x55, 0x20, 0xc0, 0xe8, 0x7,
0x30, 0xe6, 0x20, 0x2, 0x5a, 0xc1, 0x0,
/* U+74 "t" */
0x0, 0xa2, 0xa, 0x1, 0xf0, 0xbb, 0xbc, 0x3,
0xff, 0x9f, 0x3f, 0xc0, 0x5, 0xff, 0xb8, 0x3,
0xff, 0x81, 0x79, 0x60, 0x4, 0xcc, 0xb4, 0x8,
0xd4, 0x0, 0x26, 0x78, 0x3, 0xff, 0xf2, 0x20,
0x1f, 0xfc, 0x14, 0x0, 0xfc, 0xa0, 0x36, 0xaa,
0xa4, 0x0, 0xa0, 0x41, 0x2a, 0x8b, 0xe0, 0x11,
0x7b, 0x8, 0xa, 0xc0,
/* U+75 "u" */
0x9f, 0xf0, 0x80, 0x7c, 0xbf, 0xe6, 0x0, 0xff,
0xff, 0x80, 0x7f, 0xf8, 0x44, 0x0, 0x40, 0x1f,
0x68, 0x5, 0xa0, 0x4, 0x0, 0xf9, 0x80, 0x24,
0x0, 0x49, 0x0, 0x75, 0x8, 0x4, 0x2e, 0x3,
0x90, 0x88, 0x6d, 0x50, 0xe, 0x85, 0x1, 0x7b,
0xb4, 0x90, 0xd0, 0x7, 0x55, 0xa8, 0x80, 0x9c,
0x73, 0x80, 0x40,
/* U+76 "v" */
0xd, 0xfe, 0x0, 0xfe, 0x2f, 0xf3, 0x85, 0x80,
0xb0, 0x7, 0xeb, 0x0, 0x30, 0x30, 0x85, 0x0,
0x7c, 0x2c, 0xc, 0x20, 0x6, 0x3, 0x30, 0x7,
0x98, 0x1, 0x60, 0x15, 0x0, 0x24, 0x3, 0xd2,
0x8, 0x40, 0x11, 0x28, 0x28, 0x80, 0x65, 0x10,
0xf0, 0xe, 0x90, 0x4, 0x80, 0x69, 0x2, 0x40,
0xe, 0x32, 0x6, 0x0, 0x8c, 0xc1, 0x60, 0x1f,
0x58, 0xa, 0x80, 0x24, 0x0, 0xc0, 0x1f, 0x30,
0x84, 0x80, 0xa8, 0x30, 0x7, 0xf3, 0x1, 0x99,
0x80, 0x16, 0x1, 0xfd, 0x20, 0x9, 0x90, 0x21,
0x0, 0x7f, 0xa, 0x82, 0x88, 0x78, 0x7, 0xfd,
0x20, 0x11, 0x20, 0x7, 0xfc, 0x66, 0x0, 0x58,
0x7, 0x80,
/* U+77 "w" */
0xaf, 0xe0, 0xf, 0xd5, 0xfc, 0x1, 0xfa, 0x7f,
0x78, 0x5, 0x0, 0x3c, 0x2a, 0x2, 0xa0, 0x1f,
0x38, 0x52, 0x8, 0x68, 0x7, 0x9c, 0x2, 0xe0,
0xf, 0x28, 0x83, 0x3, 0x3, 0x0, 0x7a, 0x80,
0x24, 0x10, 0xe, 0xe0, 0x41, 0xa, 0x0, 0x28,
0x6, 0x23, 0xa, 0x0, 0x38, 0x6, 0x14, 0xe,
0x0, 0x11, 0x87, 0x0, 0x6a, 0x2, 0x54, 0xa,
0x0, 0xce, 0x2, 0xa0, 0x15, 0x82, 0x8, 0x4,
0xc1, 0x41, 0xc0, 0x64, 0x1, 0x50, 0x38, 0x6,
0x60, 0x3, 0x80, 0x10, 0x41, 0x81, 0x44, 0x28,
0x0, 0x46, 0x14, 0x1, 0x85, 0x2, 0x80, 0x1c,
0x8, 0x20, 0x7, 0x6, 0x0, 0x50, 0x11, 0x80,
0x77, 0x1, 0x90, 0xa8, 0x70, 0x5, 0x40, 0x28,
0xc, 0x14, 0x1, 0xe5, 0x10, 0xa7, 0x0, 0x28,
0x4, 0x66, 0xd, 0x41, 0x6, 0x0, 0xf9, 0xc1,
0x68, 0x18, 0x3, 0xa8, 0x1b, 0x81, 0x4, 0x3,
0xea, 0x2, 0x30, 0xa0, 0xe, 0x70, 0x2, 0x86,
0x80, 0x7e, 0x32, 0x0, 0x11, 0x80, 0x70, 0xa8,
0x4, 0xc0, 0x1f, 0xd4, 0x0, 0xa0, 0xf, 0xb8,
0x0, 0xa0, 0x1c,
/* U+78 "x" */
0x1e, 0xfe, 0x10, 0xf, 0x4f, 0xf9, 0x40, 0x74,
0x7, 0x40, 0x39, 0x58, 0x19, 0x40, 0x7, 0x20,
0x70, 0x1, 0x15, 0x81, 0xc8, 0x6, 0x65, 0x7,
0x50, 0x7, 0x8, 0x70, 0x7, 0xa8, 0x82, 0xca,
0x4c, 0x28, 0x80, 0x3e, 0xf0, 0x1c, 0x60, 0x75,
0x0, 0xfc, 0x52, 0x2, 0x7, 0x0, 0x1f, 0xe6,
0x10, 0x4, 0x80, 0x7f, 0xd4, 0x20, 0xb, 0x20,
0xf, 0xe6, 0x50, 0x50, 0x1e, 0x0, 0xfc, 0x72,
0x7, 0x54, 0x3, 0x90, 0xf, 0xf, 0x0, 0xe8,
0x2b, 0x3, 0x28, 0x7, 0x51, 0x5, 0x8, 0x2,
0x48, 0x28, 0x80, 0x27, 0x40, 0x74, 0x0, 0xde,
0x0, 0xf0, 0x1, 0xc0, 0x1c, 0x0, 0x71, 0x50,
0x15, 0x0,
/* U+79 "y" */
0xd, 0xfe, 0x0, 0xfe, 0x2f, 0xf3, 0x85, 0x80,
0xb0, 0x7, 0xeb, 0x0, 0x38, 0x30, 0x85, 0x80,
0x7c, 0x2c, 0xe, 0x1, 0x48, 0x12, 0x80, 0x7a,
0x40, 0x12, 0x1, 0x30, 0x2, 0x40, 0x3c, 0xc0,
0xa2, 0x1, 0xb, 0x1, 0x98, 0x3, 0x30, 0x84,
0x80, 0x75, 0x80, 0x24, 0x3, 0x58, 0x19, 0x80,
0x38, 0x94, 0x14, 0x40, 0x8, 0x41, 0x0, 0x1f,
0x48, 0x2, 0x40, 0x1e, 0x4, 0x80, 0x1f, 0x19,
0x81, 0xc0, 0x90, 0x2c, 0x3, 0xfa, 0x0, 0xf,
0x60, 0x2c, 0x1, 0xfc, 0x84, 0x12, 0xc1, 0x20,
0x1f, 0xf5, 0x80, 0x80, 0x18, 0x3, 0xfe, 0x61,
0x0, 0x30, 0x80, 0x7f, 0xf0, 0x1c, 0x1, 0x60,
0x1f, 0xfc, 0x1, 0x60, 0x42, 0x0, 0xf8, 0x40,
0x34, 0x0, 0x20, 0x3, 0xf7, 0xdb, 0x2d, 0x30,
0x29, 0x80, 0x7c, 0xc2, 0x93, 0x4a, 0x5, 0x60,
0x1f, 0x9a, 0x4c, 0x0, 0x51, 0xa2, 0x1, 0xf8,
/* U+7A "z" */
0xbf, 0xff, 0xf9, 0x40, 0x3f, 0xf8, 0x3, 0x39,
0x9f, 0x38, 0x1, 0x10, 0x46, 0x7e, 0x17, 0x2,
0xa0, 0xf, 0x87, 0xc0, 0x1c, 0x20, 0x1f, 0x51,
0x5, 0x18, 0x7, 0xd0, 0x80, 0xea, 0x1, 0xf2,
0x38, 0x24, 0x0, 0x7c, 0x56, 0x3, 0x40, 0x1f,
0xbc, 0x1, 0xa2, 0x1, 0xf5, 0x10, 0x49, 0x80,
0x7c, 0xea, 0xc, 0xc0, 0xf, 0x92, 0x0, 0x68,
0xcf, 0xe1, 0x90, 0x0, 0xe6, 0x7e, 0x93, 0x0,
0xff, 0xe0, 0x0
};
/*---------------------
* GLYPH DESCRIPTION
*--------------------*/
static const lv_font_fmt_txt_glyph_dsc_t glyph_dsc[] = {
{.bitmap_index = 0, .adv_w = 0, .box_w = 0, .box_h = 0, .ofs_x = 0, .ofs_y = 0} /* id = 0 reserved */,
{.bitmap_index = 0, .adv_w = 121, .box_w = 0, .box_h = 0, .ofs_x = 0, .ofs_y = 0},
{.bitmap_index = 0, .adv_w = 268, .box_w = 14, .box_h = 15, .ofs_x = 1, .ofs_y = 0},
{.bitmap_index = 93, .adv_w = 306, .box_w = 16, .box_h = 21, .ofs_x = 2, .ofs_y = 0},
{.bitmap_index = 197, .adv_w = 256, .box_w = 15, .box_h = 15, .ofs_x = 1, .ofs_y = 0},
{.bitmap_index = 292, .adv_w = 306, .box_w = 16, .box_h = 21, .ofs_x = 1, .ofs_y = 0},
{.bitmap_index = 399, .adv_w = 274, .box_w = 15, .box_h = 15, .ofs_x = 1, .ofs_y = 0},
{.bitmap_index = 493, .adv_w = 158, .box_w = 11, .box_h = 21, .ofs_x = 0, .ofs_y = 0},
{.bitmap_index = 545, .adv_w = 309, .box_w = 16, .box_h = 20, .ofs_x = 1, .ofs_y = -5},
{.bitmap_index = 685, .adv_w = 305, .box_w = 15, .box_h = 21, .ofs_x = 2, .ofs_y = 0},
{.bitmap_index = 747, .adv_w = 125, .box_w = 4, .box_h = 21, .ofs_x = 2, .ofs_y = 0},
{.bitmap_index = 764, .adv_w = 127, .box_w = 9, .box_h = 26, .ofs_x = -3, .ofs_y = -5},
{.bitmap_index = 810, .adv_w = 276, .box_w = 16, .box_h = 21, .ofs_x = 2, .ofs_y = 0},
{.bitmap_index = 898, .adv_w = 125, .box_w = 4, .box_h = 21, .ofs_x = 2, .ofs_y = 0},
{.bitmap_index = 905, .adv_w = 474, .box_w = 26, .box_h = 15, .ofs_x = 2, .ofs_y = 0},
{.bitmap_index = 1000, .adv_w = 305, .box_w = 15, .box_h = 15, .ofs_x = 2, .ofs_y = 0},
{.bitmap_index = 1056, .adv_w = 284, .box_w = 16, .box_h = 15, .ofs_x = 1, .ofs_y = 0},
{.bitmap_index = 1160, .adv_w = 306, .box_w = 16, .box_h = 20, .ofs_x = 2, .ofs_y = -5},
{.bitmap_index = 1266, .adv_w = 306, .box_w = 16, .box_h = 20, .ofs_x = 1, .ofs_y = -5},
{.bitmap_index = 1374, .adv_w = 184, .box_w = 9, .box_h = 15, .ofs_x = 2, .ofs_y = 0},
{.bitmap_index = 1404, .adv_w = 224, .box_w = 14, .box_h = 15, .ofs_x = 0, .ofs_y = 0},
{.bitmap_index = 1499, .adv_w = 185, .box_w = 11, .box_h = 19, .ofs_x = 0, .ofs_y = 0},
{.bitmap_index = 1551, .adv_w = 303, .box_w = 15, .box_h = 15, .ofs_x = 2, .ofs_y = 0},
{.bitmap_index = 1602, .adv_w = 250, .box_w = 17, .box_h = 15, .ofs_x = -1, .ofs_y = 0},
{.bitmap_index = 1700, .adv_w = 403, .box_w = 25, .box_h = 15, .ofs_x = 0, .ofs_y = 0},
{.bitmap_index = 1855, .adv_w = 247, .box_w = 16, .box_h = 15, .ofs_x = 0, .ofs_y = 0},
{.bitmap_index = 1953, .adv_w = 250, .box_w = 17, .box_h = 20, .ofs_x = -1, .ofs_y = -5},
{.bitmap_index = 2081, .adv_w = 233, .box_w = 13, .box_h = 15, .ofs_x = 1, .ofs_y = 0}
};
/*---------------------
* CHARACTER MAPPING
*--------------------*/
/*Collect the unicode lists and glyph_id offsets*/
static const lv_font_fmt_txt_cmap_t cmaps[] =
{
{
.range_start = 32, .range_length = 1, .glyph_id_start = 1,
.unicode_list = NULL, .glyph_id_ofs_list = NULL, .list_length = 0, .type = LV_FONT_FMT_TXT_CMAP_FORMAT0_TINY
},
{
.range_start = 97, .range_length = 26, .glyph_id_start = 2,
.unicode_list = NULL, .glyph_id_ofs_list = NULL, .list_length = 0, .type = LV_FONT_FMT_TXT_CMAP_FORMAT0_TINY
}
};
/*-----------------
* KERNING
*----------------*/
/*Map glyph_ids to kern left classes*/
static const uint8_t kern_left_class_mapping[] =
{
0, 0, 1, 2, 3, 4, 5, 6,
0, 1, 0, 0, 7, 4, 1, 1,
2, 2, 8, 9, 10, 11, 0, 12,
12, 13, 12, 14
};
/*Map glyph_ids to kern right classes*/
static const uint8_t kern_right_class_mapping[] =
{
0, 0, 1, 2, 3, 3, 3, 0,
3, 2, 4, 5, 2, 2, 4, 4,
3, 4, 3, 4, 6, 7, 8, 9,
9, 10, 9, 11
};
/*Kern values between classes*/
static const int8_t kern_class_values[] =
{
0, 0, 1, 0, 0, 0, 0, 0,
-4, 0, 0, -2, 0, 0, 0, 0,
0, 0, 0, -7, -8, -4, 0, -3,
-4, 0, 0, 0, 3, 0, -3, -8,
-3, 0, 0, 0, 0, 0, 0, 6,
0, 0, 0, 0, -7, 0, 0, 0,
0, 0, 0, 0, -4, -7, -2, -4,
0, -4, 36, 19, 0, 0, 0, 4,
0, 0, -4, 0, -10, -3, 0, -8,
0, -4, -13, -9, -5, 0, 0, 0,
0, 22, 0, 0, 0, 0, 0, 0,
-4, -3, -5, -3, 0, -1, 7, 0,
7, -3, 0, 0, 0, 0, 0, 0,
0, 0, 0, -4, -4, 0, 0, 0,
-8, 0, 0, 0, -6, 0, -4, 0,
0, -8, 0, -7, 0, -7, -3, 7,
0, -4, -13, -4, -4, 0, -8, 0,
3, -4, 0, -4, -13, 0, -4, 0,
0, -4, 0, 0, 0, 1, 0, -4,
-4, 0
};
/*Collect the kern class' data in one place*/
static const lv_font_fmt_txt_kern_classes_t kern_classes =
{
.class_pair_values = kern_class_values,
.left_class_mapping = kern_left_class_mapping,
.right_class_mapping = kern_right_class_mapping,
.left_class_cnt = 14,
.right_class_cnt = 11,
};
/*--------------------
* ALL CUSTOM DATA
*--------------------*/
/*Store all the custom data of the font*/
static lv_font_fmt_txt_dsc_t font_dsc = {
.glyph_bitmap = gylph_bitmap,
.glyph_dsc = glyph_dsc,
.cmaps = cmaps,
.kern_dsc = &kern_classes,
.kern_scale = 16,
.cmap_num = 2,
.bpp = 4,
.kern_classes = 1,
.bitmap_format = 1
};
/*-----------------
* PUBLIC FONT
*----------------*/
/*Initialize a public general font descriptor*/
lv_font_t lv_font_montserrat_28_compr_az = {
.get_glyph_dsc = lv_font_get_glyph_dsc_fmt_txt, /*Function pointer to get glyph's data*/
.get_glyph_bitmap = lv_font_get_bitmap_fmt_txt, /*Function pointer to get glyph's bitmap*/
.line_height = 26, /*The maximum line height required by the font*/
.base_line = 5, /*Baseline measured from the bottom of the line*/
#if !(LVGL_VERSION_MAJOR == 6 && LVGL_VERSION_MINOR == 0)
.subpx = LV_FONT_SUBPX_NONE,
#endif
.dsc = &font_dsc /*The custom font data. Will be accessed by `get_glyph_bitmap/dsc` */
};
#endif /*#if LV_FONT_MONTSERRAT_28_COMPR_AZ*/
#endif

View File

@@ -25,7 +25,7 @@ static void msgbox_del(lv_timer_t * tmr);
static void set_y_anim(void * obj, int32_t v);
static void set_width_anim(void * obj, int32_t v);
static void arc_set_end_angle_anim(void * obj, int32_t v);
static void obj_test_timer_cb(lv_timer_t * tmr);
static void obj_test_task_cb(lv_timer_t * tmr);
/**********************
* STATIC VARIABLES
@@ -34,10 +34,6 @@ static lv_obj_t * main_page;
static lv_obj_t * ta;
static const char * mbox_btns[] = {"Ok", "Cancel", ""};
static uint32_t mem_free_start = 0;
static lv_timer_t * obj_test_timer;
static int16_t state;
static lv_timer_t * msgbox_tmr;
/**********************
* MACROS
**********************/
@@ -48,80 +44,71 @@ static lv_timer_t * msgbox_tmr;
void lv_demo_stress(void)
{
LV_LOG_USER("Starting stress test. (< 100 bytes permanent memory leak is normal due to fragmentation)");
obj_test_timer = lv_timer_create(obj_test_timer_cb, LV_DEMO_STRESS_TIME_STEP, NULL);
state = -1;
}
void lv_demo_stress_close(void)
{
lv_timer_del(obj_test_timer);
obj_test_timer = NULL;
if(msgbox_tmr) {
lv_timer_del(msgbox_tmr);
msgbox_tmr = NULL;
}
lv_obj_clean(lv_scr_act());
lv_obj_clean(lv_layer_top());
lv_timer_create(obj_test_task_cb, LV_DEMO_STRESS_TIME_STEP, NULL);
}
/**********************
* STATIC FUNCTIONS
**********************/
static void obj_test_timer_cb(lv_timer_t * tmr)
static void obj_test_task_cb(lv_timer_t * tmr)
{
(void) tmr; /*Unused*/
static int16_t state = -1;
lv_anim_t a;
lv_obj_t * obj;
// printf("step start: %d\n", state);
switch(state) {
case -1: {
lv_res_t res = lv_mem_test();
if(res != LV_RES_OK) {
LV_LOG_ERROR("Memory integrity error");
}
lv_mem_monitor_t mon;
lv_mem_monitor(&mon);
if(mem_free_start == 0) mem_free_start = mon.free_size;
LV_LOG_USER("mem leak since start: %d, frag: %3d %%", mem_free_start - mon.free_size, mon.frag_pct);
case -1:
{
lv_res_t res = lv_mem_test();
if(res != LV_RES_OK) {
LV_LOG_ERROR("Memory integrity error");
}
lv_mem_monitor_t mon;
lv_mem_monitor(&mon);
if(mem_free_start == 0) mem_free_start = mon.free_size;
LV_LOG_USER("mem leak since start: %d, frag: %3d %%", mem_free_start - mon.free_size, mon.frag_pct);
}
break;
case 0:
/* Holder for all object types */
main_page = lv_obj_create(lv_scr_act());
lv_obj_set_size(main_page, LV_HOR_RES / 2, LV_VER_RES);
lv_obj_set_size(main_page, LV_HOR_RES / 2 , LV_VER_RES);
lv_obj_set_flex_flow(main_page, LV_FLEX_FLOW_COLUMN);
obj = lv_btn_create(main_page);
lv_obj_set_size(obj, 100, 70);
obj = lv_label_create(obj);
lv_label_set_text(obj, "Multi line\n"LV_SYMBOL_OK LV_SYMBOL_CLOSE LV_SYMBOL_WIFI);
break;
case 1: {
obj = lv_tabview_create(lv_scr_act(), LV_DIR_TOP, 50);
lv_obj_set_size(obj, LV_HOR_RES / 2, LV_VER_RES / 2);
lv_obj_align(obj, LV_ALIGN_BOTTOM_RIGHT, 0, 0);
lv_obj_t * t = lv_tabview_add_tab(obj, "First");
case 1:
{
obj = lv_tabview_create(lv_scr_act(), LV_DIR_TOP, 50);
lv_obj_set_size(obj, LV_HOR_RES / 2, LV_VER_RES / 2);
lv_obj_align(obj, LV_ALIGN_BOTTOM_RIGHT, 0, 0);
lv_obj_t * t = lv_tabview_add_tab(obj, "First");
t = lv_tabview_add_tab(obj, "Second");
lv_obj_t * c = lv_colorwheel_create(t, true);
lv_obj_set_size(c, 150, 150);
// c = lv_led_create(t, NULL);
// lv_obj_set_pos(c, 160, 20);
t = lv_tabview_add_tab(obj, LV_SYMBOL_EDIT " Edit");
t = lv_tabview_add_tab(obj, LV_SYMBOL_CLOSE);
t = lv_tabview_add_tab(obj, "Second");
lv_obj_t * c = lv_colorwheel_create(t, true);
lv_obj_set_size(c, 150, 150);
// c = lv_led_create(t, NULL);
// lv_obj_set_pos(c, 160, 20);
t = lv_tabview_add_tab(obj, LV_SYMBOL_EDIT " Edit");
t = lv_tabview_add_tab(obj, LV_SYMBOL_CLOSE);
lv_tabview_set_act(obj, 1, LV_ANIM_ON);
auto_del(obj, LV_DEMO_STRESS_TIME_STEP * 5 + 30);
}
break;
lv_tabview_set_act(obj, 1, LV_ANIM_ON);
auto_del(obj, LV_DEMO_STRESS_TIME_STEP * 5 + 30);
}
break;
case 2:
obj = lv_btn_create(main_page);
@@ -160,12 +147,12 @@ static void obj_test_timer_cb(lv_timer_t * tmr)
lv_obj_set_style_bg_img_src(obj, LV_SYMBOL_DUMMY"Text from\nstyle", 0);
lv_obj_del_async(obj); /*Delete on next call of `lv_task_handler` (so not now)*/
// obj = lv_btn_create(main_page);
// lv_obj_set_size(obj, LV_SIZE_CONTENT, LV_SIZE_CONTENT);
// lv_obj_set_style_bg_img_src(obj, LV_SYMBOL_LEFT);
// lv_obj_set_style_bg_img_opa(obj, LV_OPA_50);
// lv_obj_set_style_bg_img_tiled(obj, true);
// lv_obj_scroll_to_view(obj, LV_ANIM_ON);
// obj = lv_btn_create(main_page);
// lv_obj_set_size(obj, LV_SIZE_CONTENT, LV_SIZE_CONTENT);
// lv_obj_set_style_bg_img_src(obj, LV_SYMBOL_LEFT);
// lv_obj_set_style_bg_img_opa(obj, LV_OPA_50);
// lv_obj_set_style_bg_img_tiled(obj, true);
// lv_obj_scroll_to_view(obj, LV_ANIM_ON);
break;
case 5:
@@ -196,19 +183,19 @@ static void obj_test_timer_cb(lv_timer_t * tmr)
break;
case 8:
obj = lv_win_create(lv_scr_act(), 50);
lv_obj_set_size(obj, LV_HOR_RES / 2, LV_VER_RES / 2);
lv_obj_align(obj, LV_ALIGN_BOTTOM_RIGHT, 0, 0);
lv_win_add_title(obj, "Window title");
lv_win_add_btn(obj, LV_SYMBOL_CLOSE, 40);
lv_win_add_btn(obj, LV_SYMBOL_DOWN, 40);
auto_del(obj, LV_DEMO_STRESS_TIME_STEP * 3 + 5);
obj = lv_win_create(lv_scr_act(), 50);
lv_obj_set_size(obj, LV_HOR_RES / 2, LV_VER_RES / 2);
lv_obj_align(obj, LV_ALIGN_BOTTOM_RIGHT, 0, 0);
lv_win_add_title(obj, "Window title");
lv_win_add_btn(obj, LV_SYMBOL_CLOSE, 40);
lv_win_add_btn(obj, LV_SYMBOL_DOWN, 40);
auto_del(obj, LV_DEMO_STRESS_TIME_STEP * 3 + 5);
obj = lv_calendar_create(lv_win_get_content(obj));
break;
obj = lv_calendar_create(lv_win_get_content(obj));
break;
case 9:
lv_textarea_set_text(ta, "A very very long text which will should make the text area scrollable"
"Here area some dummy sentences to be sure the text area will be really scrollable.");
"Here area some dummy sentences to be sure the text area will be really scrollable.");
break;
case 10:
obj = lv_keyboard_create(lv_scr_act());
@@ -260,7 +247,8 @@ static void obj_test_timer_cb(lv_timer_t * tmr)
case 14:
obj = lv_msgbox_create(NULL, "Title", "Some text on the message box with average length", mbox_btns, true);
msgbox_tmr = lv_timer_create(msgbox_del, LV_DEMO_STRESS_TIME_STEP * 5 + 30, obj);
lv_timer_t * msgbox_tmr = lv_timer_create(msgbox_del, LV_DEMO_STRESS_TIME_STEP * 5 + 30, obj);
lv_timer_set_repeat_count(msgbox_tmr, 1);
lv_obj_align(obj, LV_ALIGN_RIGHT_MID, -10, 0);
break;
@@ -269,26 +257,27 @@ static void obj_test_timer_cb(lv_timer_t * tmr)
lv_textarea_set_one_line(ta, false);
break;
case 16: {
lv_obj_t * tv = lv_tileview_create(lv_scr_act());
lv_obj_set_size(tv, 200, 200);
auto_del(tv, LV_DEMO_STRESS_TIME_STEP * 4 + 5);
case 16:
{
lv_obj_t * tv = lv_tileview_create(lv_scr_act());
lv_obj_set_size(tv, 200, 200);
auto_del(tv, LV_DEMO_STRESS_TIME_STEP * 4 + 5);
obj = lv_tileview_add_tile(tv, 0, 0, LV_DIR_ALL);
obj = lv_label_create(obj);
lv_label_set_text(obj, "Tile: 0;0");
obj = lv_tileview_add_tile(tv, 0, 0, LV_DIR_ALL);
obj = lv_label_create(obj);
lv_label_set_text(obj, "Tile: 0;0");
obj = lv_tileview_add_tile(tv, 0, 1, LV_DIR_ALL);
obj = lv_label_create(obj);
lv_label_set_text(obj, "Tile: 0;1");
obj = lv_tileview_add_tile(tv, 0, 1, LV_DIR_ALL);
obj = lv_label_create(obj);
lv_label_set_text(obj, "Tile: 0;1");
obj = lv_tileview_add_tile(tv, 1, 1, LV_DIR_ALL);
obj = lv_label_create(obj);
lv_label_set_text(obj, "Tile: 1;1");
obj = lv_tileview_add_tile(tv, 1, 1, LV_DIR_ALL);
obj = lv_label_create(obj);
lv_label_set_text(obj, "Tile: 1;1");
lv_obj_set_tile_id(tv, 1, 1, LV_ANIM_ON);
}
break;
lv_obj_set_tile_id(tv, 1, 1, LV_ANIM_ON);
}
break;
case 18:
obj = lv_list_create(main_page);
@@ -434,8 +423,8 @@ static void obj_test_timer_cb(lv_timer_t * tmr)
break;
}
// printf("step end: %d\n", state);
state++;
// printf("step end: %d\n", state);
state ++;
}
static void auto_del(lv_obj_t * obj, uint32_t delay)
@@ -452,7 +441,6 @@ static void auto_del(lv_obj_t * obj, uint32_t delay)
static void msgbox_del(lv_timer_t * tmr)
{
msgbox_tmr = NULL;
lv_msgbox_close(tmr->user_data);
}

View File

@@ -30,8 +30,6 @@ extern "C" {
**********************/
void lv_demo_stress(void);
void lv_demo_stress_close(void);
/**********************
* MACROS
**********************/

View File

@@ -11,7 +11,7 @@
#if LV_USE_DEMO_WIDGETS
#if LV_MEM_CUSTOM == 0 && LV_MEM_SIZE < (38ul * 1024ul)
#error Insufficient memory for lv_demo_widgets. Please set LV_MEM_SIZE to at least 38KB (38ul * 1024ul). 48KB is recommended.
#error Insufficient memory for lv_demo_widgets. Please set LV_MEM_SIZE to at least 38KB (38ul * 1024ul). 48KB is recommended.
#endif
/*********************
@@ -25,7 +25,7 @@ typedef enum {
DISP_SMALL,
DISP_MEDIUM,
DISP_LARGE,
} disp_size_t;
}disp_size_t;
/**********************
* STATIC PROTOTYPES
@@ -35,10 +35,8 @@ static void analytics_create(lv_obj_t * parent);
static void shop_create(lv_obj_t * parent);
static void color_changer_create(lv_obj_t * parent);
static lv_obj_t * create_meter_box(lv_obj_t * parent, const char * title, const char * text1, const char * text2,
const char * text3);
static lv_obj_t * create_shop_item(lv_obj_t * parent, const void * img_src, const char * name, const char * category,
const char * price);
static lv_obj_t * create_meter_box(lv_obj_t * parent, const char * title, const char * text1, const char * text2, const char * text3);
static lv_obj_t * create_shop_item(lv_obj_t * parent, const void * img_src, const char * name, const char * category, const char * price);
static void color_changer_event_cb(lv_event_t * e);
static void color_event_cb(lv_event_t * e);
@@ -86,8 +84,6 @@ static uint32_t session_desktop = 1000;
static uint32_t session_tablet = 1000;
static uint32_t session_mobile = 1000;
static lv_timer_t * meter2_timer;
/**********************
* MACROS
**********************/
@@ -118,8 +114,7 @@ void lv_demo_widgets(void)
#else
LV_LOG_WARN("LV_FONT_MONTSERRAT_16 is not enabled for the widgets demo. Using LV_FONT_DEFAULT instead.");
#endif
}
else if(disp_size == DISP_MEDIUM) {
} else if(disp_size == DISP_MEDIUM) {
tab_h = 45;
#if LV_FONT_MONTSERRAT_20
font_large = &lv_font_montserrat_20;
@@ -131,24 +126,22 @@ void lv_demo_widgets(void)
#else
LV_LOG_WARN("LV_FONT_MONTSERRAT_14 is not enabled for the widgets demo. Using LV_FONT_DEFAULT instead.");
#endif
}
else { /* disp_size == DISP_SMALL */
} else { /* disp_size == DISP_SMALL */
tab_h = 45;
#if LV_FONT_MONTSERRAT_18
font_large = &lv_font_montserrat_18;
#else
LV_LOG_WARN("LV_FONT_MONTSERRAT_18 is not enabled for the widgets demo. Using LV_FONT_DEFAULT instead.");
LV_LOG_WARN("LV_FONT_MONTSERRAT_18 is not enabled for the widgets demo. Using LV_FONT_DEFAULT instead.");
#endif
#if LV_FONT_MONTSERRAT_12
font_normal = &lv_font_montserrat_12;
#else
LV_LOG_WARN("LV_FONT_MONTSERRAT_12 is not enabled for the widgets demo. Using LV_FONT_DEFAULT instead.");
LV_LOG_WARN("LV_FONT_MONTSERRAT_12 is not enabled for the widgets demo. Using LV_FONT_DEFAULT instead.");
#endif
}
#if LV_USE_THEME_DEFAULT
lv_theme_default_init(NULL, lv_palette_main(LV_PALETTE_BLUE), lv_palette_main(LV_PALETTE_RED), LV_THEME_DEFAULT_DARK,
font_normal);
lv_theme_default_init(NULL, lv_palette_main(LV_PALETTE_BLUE), lv_palette_main(LV_PALETTE_RED), LV_THEME_DEFAULT_DARK, font_normal);
#endif
lv_style_init(&style_text_muted);
@@ -198,22 +191,6 @@ void lv_demo_widgets(void)
color_changer_create(tv);
}
void lv_demo_widgets_close(void)
{
/*Delete all animation*/
lv_anim_del(NULL, NULL);
lv_timer_del(meter2_timer);
meter2_timer = NULL;
lv_obj_clean(lv_scr_act());
lv_style_reset(&style_text_muted);
lv_style_reset(&style_title);
lv_style_reset(&style_icon);
lv_style_reset(&style_bullet);
}
/**********************
* STATIC FUNCTIONS
**********************/
@@ -233,7 +210,7 @@ static void profile_create(lv_obj_t * parent)
lv_obj_t * dsc = lv_label_create(panel1);
lv_obj_add_style(dsc, &style_text_muted, 0);
lv_label_set_text(dsc, "This is a short description of me. Take a look at my profile!");
lv_label_set_text(dsc, "This is a short description of me. Take a look at my profile!" );
lv_label_set_long_mode(dsc, LV_LABEL_LONG_WRAP);
lv_obj_t * email_icn = lv_label_create(panel1);
@@ -348,16 +325,17 @@ static void profile_create(lv_obj_t * parent)
static lv_coord_t grid_2_col_dsc[] = {LV_GRID_FR(1), LV_GRID_FR(1), LV_GRID_TEMPLATE_LAST};
static lv_coord_t grid_2_row_dsc[] = {
LV_GRID_CONTENT, /*Title*/
5, /*Separator*/
LV_GRID_CONTENT, /*Box title*/
30, /*Boxes*/
5, /*Separator*/
LV_GRID_CONTENT, /*Box title*/
30, /*Boxes*/
LV_GRID_TEMPLATE_LAST
LV_GRID_CONTENT, /*Title*/
5, /*Separator*/
LV_GRID_CONTENT, /*Box title*/
30, /*Boxes*/
5, /*Separator*/
LV_GRID_CONTENT, /*Box title*/
30, /*Boxes*/
LV_GRID_TEMPLATE_LAST
};
lv_obj_set_grid_dsc_array(parent, grid_main_col_dsc, grid_main_row_dsc);
lv_obj_set_grid_cell(panel1, LV_GRID_ALIGN_STRETCH, 0, 2, LV_GRID_ALIGN_CENTER, 0, 1);
@@ -385,6 +363,7 @@ static void profile_create(lv_obj_t * parent)
lv_obj_set_grid_cell(gender, LV_GRID_ALIGN_STRETCH, 0, 1, LV_GRID_ALIGN_CENTER, 6, 1);
lv_obj_set_grid_cell(gender_label, LV_GRID_ALIGN_START, 0, 1, LV_GRID_ALIGN_START, 5, 1);
lv_obj_set_grid_cell(panel3, LV_GRID_ALIGN_STRETCH, 1, 1, LV_GRID_ALIGN_STRETCH, 1, 1);
lv_obj_set_grid_dsc_array(panel3, grid_2_col_dsc, grid_2_row_dsc);
lv_obj_set_grid_cell(panel3_title, LV_GRID_ALIGN_START, 0, 2, LV_GRID_ALIGN_CENTER, 0, 1);
@@ -399,33 +378,34 @@ static void profile_create(lv_obj_t * parent)
static lv_coord_t grid_main_col_dsc[] = {LV_GRID_FR(1), LV_GRID_FR(1), LV_GRID_TEMPLATE_LAST};
static lv_coord_t grid_main_row_dsc[] = {LV_GRID_CONTENT, LV_GRID_CONTENT, LV_GRID_TEMPLATE_LAST};
/*Create the top panel*/
static lv_coord_t grid_1_col_dsc[] = {LV_GRID_CONTENT, 1, LV_GRID_CONTENT, LV_GRID_FR(1), LV_GRID_TEMPLATE_LAST};
static lv_coord_t grid_1_row_dsc[] = {
LV_GRID_CONTENT, /*Name*/
LV_GRID_CONTENT, /*Description*/
LV_GRID_CONTENT, /*Email*/
-20,
LV_GRID_CONTENT, /*Phone*/
LV_GRID_CONTENT, /*Buttons*/
LV_GRID_TEMPLATE_LAST
};
LV_GRID_CONTENT, /*Name*/
LV_GRID_CONTENT, /*Description*/
LV_GRID_CONTENT, /*Email*/
-20,
LV_GRID_CONTENT, /*Phone*/
LV_GRID_CONTENT, /*Buttons*/
LV_GRID_TEMPLATE_LAST};
static lv_coord_t grid_2_col_dsc[] = {LV_GRID_FR(1), LV_GRID_FR(1), LV_GRID_TEMPLATE_LAST};
static lv_coord_t grid_2_row_dsc[] = {
LV_GRID_CONTENT, /*Title*/
5, /*Separator*/
LV_GRID_CONTENT, /*Box title*/
40, /*Box*/
LV_GRID_CONTENT, /*Box title*/
40, /*Box*/
LV_GRID_CONTENT, /*Box title*/
40, /*Box*/
LV_GRID_CONTENT, /*Box title*/
40, /*Box*/
LV_GRID_TEMPLATE_LAST
LV_GRID_CONTENT, /*Title*/
5, /*Separator*/
LV_GRID_CONTENT, /*Box title*/
40, /*Box*/
LV_GRID_CONTENT, /*Box title*/
40, /*Box*/
LV_GRID_CONTENT, /*Box title*/
40, /*Box*/
LV_GRID_CONTENT, /*Box title*/
40, /*Box*/
LV_GRID_TEMPLATE_LAST
};
lv_obj_set_grid_dsc_array(parent, grid_main_col_dsc, grid_main_row_dsc);
lv_obj_set_grid_cell(panel1, LV_GRID_ALIGN_STRETCH, 0, 2, LV_GRID_ALIGN_CENTER, 0, 1);
@@ -470,32 +450,33 @@ static void profile_create(lv_obj_t * parent)
static lv_coord_t grid_main_row_dsc[] = {LV_GRID_CONTENT, LV_GRID_CONTENT, LV_GRID_CONTENT, LV_GRID_TEMPLATE_LAST};
lv_obj_set_grid_dsc_array(parent, grid_main_col_dsc, grid_main_row_dsc);
/*Create the top panel*/
static lv_coord_t grid_1_col_dsc[] = {LV_GRID_CONTENT, LV_GRID_FR(1), LV_GRID_TEMPLATE_LAST};
static lv_coord_t grid_1_row_dsc[] = {LV_GRID_CONTENT, /*Avatar*/
LV_GRID_CONTENT, /*Name*/
LV_GRID_CONTENT, /*Description*/
LV_GRID_CONTENT, /*Email*/
LV_GRID_CONTENT, /*Phone number*/
LV_GRID_CONTENT, /*Button1*/
LV_GRID_CONTENT, /*Button2*/
LV_GRID_TEMPLATE_LAST
};
LV_GRID_CONTENT, /*Name*/
LV_GRID_CONTENT, /*Description*/
LV_GRID_CONTENT, /*Email*/
LV_GRID_CONTENT, /*Phone number*/
LV_GRID_CONTENT, /*Button1*/
LV_GRID_CONTENT, /*Button2*/
LV_GRID_TEMPLATE_LAST};
lv_obj_set_grid_dsc_array(panel1, grid_1_col_dsc, grid_1_row_dsc);
static lv_coord_t grid_2_col_dsc[] = {LV_GRID_FR(1), LV_GRID_FR(1), LV_GRID_TEMPLATE_LAST};
static lv_coord_t grid_2_row_dsc[] = {
LV_GRID_CONTENT, /*Title*/
5, /*Separator*/
LV_GRID_CONTENT, /*Box title*/
40, /*Box*/
LV_GRID_CONTENT, /*Box title*/
40, /*Box*/
LV_GRID_CONTENT, /*Box title*/
40, /*Box*/
LV_GRID_CONTENT, /*Box title*/
40, LV_GRID_TEMPLATE_LAST /*Box*/
LV_GRID_CONTENT, /*Title*/
5, /*Separator*/
LV_GRID_CONTENT, /*Box title*/
40, /*Box*/
LV_GRID_CONTENT, /*Box title*/
40, /*Box*/
LV_GRID_CONTENT, /*Box title*/
40, /*Box*/
LV_GRID_CONTENT, /*Box title*/
40, LV_GRID_TEMPLATE_LAST /*Box*/
};
lv_obj_set_grid_dsc_array(panel2, grid_2_col_dsc, grid_2_row_dsc);
@@ -538,6 +519,7 @@ static void profile_create(lv_obj_t * parent)
}
}
static void analytics_create(lv_obj_t * parent)
{
lv_obj_set_flex_flow(parent, LV_FLEX_FLOW_ROW_WRAP);
@@ -656,7 +638,7 @@ static void analytics_create(lv_obj_t * parent)
lv_chart_set_next_value(chart2, ser3, lv_rand(10, 80));
lv_meter_scale_t * scale;
lv_meter_indicator_t * indic;
lv_meter_indicator_t *indic;
meter1 = create_meter_box(parent, "Monthly Target", "Revenue: 63%", "Sales: 44%", "Costs: 58%");
lv_obj_add_flag(lv_obj_get_parent(meter1), LV_OBJ_FLAG_FLEX_IN_NEW_TRACK);
scale = lv_meter_add_scale(meter1);
@@ -709,7 +691,7 @@ static void analytics_create(lv_obj_t * parent)
lv_meter_set_indicator_start_value(meter2, meter2_indic[2], 70);
lv_meter_set_indicator_end_value(meter2, meter2_indic[2], 99);
meter2_timer = lv_timer_create(meter2_timer_cb, 100, meter2_indic);
lv_timer_create(meter2_timer_cb, 100, meter2_indic);
meter3 = create_meter_box(parent, "Network Speed", "Low speed", "Normal Speed", "High Speed");
if(disp_size < DISP_LARGE) lv_obj_add_flag(lv_obj_get_parent(meter3), LV_OBJ_FLAG_FLEX_IN_NEW_TRACK);
@@ -733,8 +715,7 @@ static void analytics_create(lv_obj_t * parent)
lv_meter_set_indicator_start_value(meter3, indic, 0);
lv_meter_set_indicator_end_value(meter3, indic, 20);
indic = lv_meter_add_scale_lines(meter3, scale, lv_palette_darken(LV_PALETTE_RED, 3), lv_palette_darken(LV_PALETTE_RED,
3), true, 0);
indic = lv_meter_add_scale_lines(meter3, scale, lv_palette_darken(LV_PALETTE_RED, 3), lv_palette_darken(LV_PALETTE_RED, 3), true, 0);
lv_meter_set_indicator_start_value(meter3, indic, 0);
lv_meter_set_indicator_end_value(meter3, indic, 20);
@@ -742,8 +723,7 @@ static void analytics_create(lv_obj_t * parent)
lv_meter_set_indicator_start_value(meter3, indic, 20);
lv_meter_set_indicator_end_value(meter3, indic, 40);
indic = lv_meter_add_scale_lines(meter3, scale, lv_palette_darken(LV_PALETTE_BLUE, 3),
lv_palette_darken(LV_PALETTE_BLUE, 3), true, 0);
indic = lv_meter_add_scale_lines(meter3, scale, lv_palette_darken(LV_PALETTE_BLUE, 3), lv_palette_darken(LV_PALETTE_BLUE, 3), true, 0);
lv_meter_set_indicator_start_value(meter3, indic, 20);
lv_meter_set_indicator_end_value(meter3, indic, 40);
@@ -751,8 +731,7 @@ static void analytics_create(lv_obj_t * parent)
lv_meter_set_indicator_start_value(meter3, indic, 40);
lv_meter_set_indicator_end_value(meter3, indic, 60);
indic = lv_meter_add_scale_lines(meter3, scale, lv_palette_darken(LV_PALETTE_GREEN, 3),
lv_palette_darken(LV_PALETTE_GREEN, 3), true, 0);
indic = lv_meter_add_scale_lines(meter3, scale, lv_palette_darken(LV_PALETTE_GREEN, 3), lv_palette_darken(LV_PALETTE_GREEN, 3), true, 0);
lv_meter_set_indicator_start_value(meter3, indic, 40);
lv_meter_set_indicator_end_value(meter3, indic, 60);
@@ -779,8 +758,7 @@ static void analytics_create(lv_obj_t * parent)
lv_obj_set_size(meter1, 200, 200);
lv_obj_set_size(meter2, 200, 200);
lv_obj_set_size(meter3, 200, 200);
}
else {
} else {
lv_coord_t meter_w = lv_obj_get_width(meter1);
lv_obj_set_height(meter1, meter_w);
lv_obj_set_height(meter2, meter_w);
@@ -851,20 +829,20 @@ void shop_create(lv_obj_t * parent)
lv_obj_set_size(chart3, lv_pct(100), lv_pct(100));
lv_obj_set_style_pad_column(chart3, LV_DPX(30), 0);
lv_obj_set_grid_dsc_array(panel1, grid1_col_dsc, grid1_row_dsc);
lv_obj_set_grid_cell(title, LV_GRID_ALIGN_START, 0, 1, LV_GRID_ALIGN_START, 0, 1);
lv_obj_set_grid_cell(date, LV_GRID_ALIGN_START, 0, 1, LV_GRID_ALIGN_START, 1, 1);
lv_obj_set_grid_cell(amount, LV_GRID_ALIGN_START, 0, 1, LV_GRID_ALIGN_START, 3, 1);
lv_obj_set_grid_cell(hint, LV_GRID_ALIGN_START, 0, 1, LV_GRID_ALIGN_START, 4, 1);
lv_obj_set_grid_cell(chart3, LV_GRID_ALIGN_STRETCH, 1, 1, LV_GRID_ALIGN_STRETCH, 0, 5);
}
else if(disp_size == DISP_MEDIUM) {
} else if(disp_size == DISP_MEDIUM) {
static lv_coord_t grid1_col_dsc[] = {LV_GRID_FR(1), LV_GRID_FR(1), LV_GRID_TEMPLATE_LAST};
static lv_coord_t grid1_row_dsc[] = {
LV_GRID_CONTENT, /*Title + Date*/
LV_GRID_CONTENT, /*Amount + Hint*/
200, /*Chart*/
LV_GRID_TEMPLATE_LAST
LV_GRID_CONTENT, /*Title + Date*/
LV_GRID_CONTENT, /*Amount + Hint*/
200, /*Chart*/
LV_GRID_TEMPLATE_LAST
};
lv_obj_update_layout(panel1);
@@ -877,16 +855,15 @@ void shop_create(lv_obj_t * parent)
lv_obj_set_grid_cell(amount, LV_GRID_ALIGN_START, 0, 1, LV_GRID_ALIGN_CENTER, 1, 1);
lv_obj_set_grid_cell(hint, LV_GRID_ALIGN_START, 1, 1, LV_GRID_ALIGN_CENTER, 1, 1);
lv_obj_set_grid_cell(chart3, LV_GRID_ALIGN_END, 0, 2, LV_GRID_ALIGN_STRETCH, 2, 1);
}
else if(disp_size == DISP_SMALL) {
} else if(disp_size == DISP_SMALL) {
static lv_coord_t grid1_col_dsc[] = {LV_GRID_FR(1), LV_GRID_TEMPLATE_LAST};
static lv_coord_t grid1_row_dsc[] = {
LV_GRID_CONTENT, /*Title*/
LV_GRID_CONTENT, /*Date*/
LV_GRID_CONTENT, /*Amount*/
LV_GRID_CONTENT, /*Hint*/
LV_GRID_CONTENT, /*Chart*/
LV_GRID_TEMPLATE_LAST
LV_GRID_CONTENT, /*Title*/
LV_GRID_CONTENT, /*Date*/
LV_GRID_CONTENT, /*Amount*/
LV_GRID_CONTENT, /*Hint*/
LV_GRID_CONTENT, /*Chart*/
LV_GRID_TEMPLATE_LAST
};
lv_obj_set_width(chart3, LV_PCT(95));
@@ -906,8 +883,7 @@ void shop_create(lv_obj_t * parent)
if(disp_size == DISP_SMALL) {
lv_obj_add_flag(list, LV_OBJ_FLAG_FLEX_IN_NEW_TRACK);
lv_obj_set_height(list, LV_PCT(100));
}
else {
} else {
lv_obj_set_height(list, LV_PCT(100));
lv_obj_set_style_max_height(list, 300, 0);
}
@@ -931,8 +907,7 @@ void shop_create(lv_obj_t * parent)
if(disp_size == DISP_SMALL) {
lv_obj_add_flag(notifications, LV_OBJ_FLAG_FLEX_IN_NEW_TRACK);
lv_obj_set_height(notifications, LV_PCT(100));
}
else {
} else {
lv_obj_set_height(notifications, LV_PCT(100));
lv_obj_set_style_max_height(notifications, 300, 0);
}
@@ -966,14 +941,14 @@ void shop_create(lv_obj_t * parent)
cb = lv_checkbox_create(notifications);
lv_checkbox_set_text(cb, "Out of stock");
}
static void color_changer_create(lv_obj_t * parent)
{
static lv_palette_t palette[] = {
LV_PALETTE_BLUE, LV_PALETTE_GREEN, LV_PALETTE_BLUE_GREY, LV_PALETTE_ORANGE,
LV_PALETTE_RED, LV_PALETTE_PURPLE, LV_PALETTE_TEAL, _LV_PALETTE_LAST
};
LV_PALETTE_BLUE, LV_PALETTE_GREEN, LV_PALETTE_BLUE_GREY, LV_PALETTE_ORANGE,
LV_PALETTE_RED, LV_PALETTE_PURPLE, LV_PALETTE_TEAL, _LV_PALETTE_LAST };
lv_obj_t * color_cont = lv_obj_create(parent);
lv_obj_remove_style_all(color_cont);
@@ -1012,13 +987,12 @@ static void color_changer_create(lv_obj_t * parent)
lv_obj_set_style_bg_img_src(btn, LV_SYMBOL_TINT, 0);
if(disp_size == DISP_SMALL) {
lv_obj_set_size(btn, LV_DPX(42), LV_DPX(42));
lv_obj_align(btn, LV_ALIGN_BOTTOM_RIGHT, -LV_DPX(15), -LV_DPX(15));
}
else {
lv_obj_set_size(btn, LV_DPX(50), LV_DPX(50));
lv_obj_align(btn, LV_ALIGN_BOTTOM_RIGHT, -LV_DPX(15), -LV_DPX(15));
}
lv_obj_set_size(btn, LV_DPX(42), LV_DPX(42));
lv_obj_align(btn, LV_ALIGN_BOTTOM_RIGHT, -LV_DPX(15), -LV_DPX(15));
} else {
lv_obj_set_size(btn, LV_DPX(50), LV_DPX(50));
lv_obj_align(btn, LV_ALIGN_BOTTOM_RIGHT, -LV_DPX(15), -LV_DPX(15));
}
}
static void color_changer_anim_cb(void * var, int32_t v)
@@ -1031,8 +1005,7 @@ static void color_changer_anim_cb(void * var, int32_t v)
w = lv_map(v, 0, 256, LV_DPX(52), max_w);
lv_obj_set_width(obj, w);
lv_obj_align(obj, LV_ALIGN_BOTTOM_RIGHT, - LV_DPX(10), - LV_DPX(10));
}
else {
} else {
w = lv_map(v, 0, 256, LV_DPX(60), max_w);
lv_obj_set_width(obj, w);
lv_obj_align(obj, LV_ALIGN_BOTTOM_RIGHT, - LV_DPX(10), - LV_DPX(10));
@@ -1047,7 +1020,7 @@ static void color_changer_anim_cb(void * var, int32_t v)
}
static void color_changer_event_cb(lv_event_t * e)
static void color_changer_event_cb(lv_event_t *e)
{
if(lv_event_get_code(e) == LV_EVENT_CLICKED) {
lv_obj_t * color_cont = lv_event_get_user_data(e);
@@ -1059,8 +1032,7 @@ static void color_changer_event_cb(lv_event_t * e)
lv_anim_set_values(&a, 0, 256);
lv_anim_set_time(&a, 200);
lv_anim_start(&a);
}
else {
} else {
lv_anim_t a;
lv_anim_init(&a);
lv_anim_set_var(&a, color_cont);
@@ -1093,8 +1065,7 @@ static void color_event_cb(lv_event_t * e)
lv_palette_t palette_secondary = (*palette_primary) + 3; /*Use another palette as secondary*/
if(palette_secondary >= _LV_PALETTE_LAST) palette_secondary = 0;
#if LV_USE_THEME_DEFAULT
lv_theme_default_init(NULL, lv_palette_main(*palette_primary), lv_palette_main(palette_secondary),
LV_THEME_DEFAULT_DARK, font_normal);
lv_theme_default_init(NULL, lv_palette_main(*palette_primary), lv_palette_main(palette_secondary), LV_THEME_DEFAULT_DARK, font_normal);
#endif
lv_color_t color = lv_palette_main(*palette_primary);
lv_style_set_text_color(&style_icon, color);
@@ -1103,8 +1074,7 @@ static void color_event_cb(lv_event_t * e)
}
}
static lv_obj_t * create_meter_box(lv_obj_t * parent, const char * title, const char * text1, const char * text2,
const char * text3)
static lv_obj_t * create_meter_box(lv_obj_t * parent, const char * title, const char * text1, const char * text2, const char * text3)
{
lv_obj_t * cont = lv_obj_create(parent);
lv_obj_set_height(cont, LV_SIZE_CONTENT);
@@ -1144,7 +1114,7 @@ static lv_obj_t * create_meter_box(lv_obj_t * parent, const char * title, const
lv_label_set_text(label3, text3);
if(disp_size == DISP_MEDIUM) {
static lv_coord_t grid_col_dsc[] = {LV_GRID_CONTENT, LV_GRID_FR(1), LV_GRID_CONTENT, LV_GRID_FR(8), LV_GRID_TEMPLATE_LAST};
static lv_coord_t grid_col_dsc[] = {LV_GRID_CONTENT, LV_GRID_FR(1), LV_GRID_CONTENT,LV_GRID_FR(8), LV_GRID_TEMPLATE_LAST};
static lv_coord_t grid_row_dsc[] = {LV_GRID_CONTENT, LV_GRID_FR(1), LV_GRID_CONTENT, LV_GRID_CONTENT, LV_GRID_CONTENT, LV_GRID_FR(1), LV_GRID_TEMPLATE_LAST};
lv_obj_set_grid_dsc_array(cont, grid_col_dsc, grid_row_dsc);
@@ -1171,12 +1141,12 @@ static lv_obj_t * create_meter_box(lv_obj_t * parent, const char * title, const
lv_obj_set_grid_cell(label3, LV_GRID_ALIGN_STRETCH, 1, 1, LV_GRID_ALIGN_START, 4, 1);
}
return meter;
}
static lv_obj_t * create_shop_item(lv_obj_t * parent, const void * img_src, const char * name, const char * category,
const char * price)
static lv_obj_t * create_shop_item(lv_obj_t * parent, const void * img_src, const char * name, const char * category, const char * price)
{
static lv_coord_t grid_col_dsc[] = {LV_GRID_CONTENT, 5, LV_GRID_FR(1), LV_GRID_FR(1), LV_GRID_TEMPLATE_LAST};
static lv_coord_t grid_row_dsc[] = {LV_GRID_FR(1), LV_GRID_FR(1), LV_GRID_TEMPLATE_LAST};
@@ -1287,10 +1257,9 @@ static void slider_event_cb(lv_event_t * e)
lv_obj_t * obj = lv_event_get_target(e);
if(code == LV_EVENT_REFR_EXT_DRAW_SIZE) {
lv_coord_t * s = lv_event_get_param(e);
lv_coord_t *s = lv_event_get_param(e);
*s = LV_MAX(*s, 60);
}
else if(code == LV_EVENT_DRAW_PART_END) {
} else if(code == LV_EVENT_DRAW_PART_END) {
lv_obj_draw_part_dsc_t * dsc = lv_event_get_param(e);
if(dsc->part == LV_PART_KNOB && lv_obj_has_state(obj, LV_STATE_PRESSED)) {
char buf[8];
@@ -1341,8 +1310,7 @@ static void chart_event_cb(lv_event_t * e)
if(lv_chart_get_type(obj) == LV_CHART_TYPE_BAR) {
const char * month[] = {"I", "II", "III", "IV", "V", "VI", "VII", "VIII", "IX", "X", "XI", "XII"};
lv_snprintf(dsc->text, dsc->text_length, "%s", month[dsc->value]);
}
else {
} else {
const char * month[] = {"Jan", "Febr", "March", "Apr", "May", "Jun", "July", "Aug", "Sept", "Oct", "Nov", "Dec"};
lv_snprintf(dsc->text, dsc->text_length, "%s", month[dsc->value]);
}
@@ -1354,15 +1322,13 @@ static void chart_event_cb(lv_event_t * e)
/*Add a line mask that keeps the area below the line*/
if(dsc->p1 && dsc->p2) {
lv_draw_mask_line_param_t line_mask_param;
lv_draw_mask_line_points_init(&line_mask_param, dsc->p1->x, dsc->p1->y, dsc->p2->x, dsc->p2->y,
LV_DRAW_MASK_LINE_SIDE_BOTTOM);
lv_draw_mask_line_points_init(&line_mask_param, dsc->p1->x, dsc->p1->y, dsc->p2->x, dsc->p2->y, LV_DRAW_MASK_LINE_SIDE_BOTTOM);
int16_t line_mask_id = lv_draw_mask_add(&line_mask_param, NULL);
/*Add a fade effect: transparent bottom covering top*/
lv_coord_t h = lv_obj_get_height(obj);
lv_draw_mask_fade_param_t fade_mask_param;
lv_draw_mask_fade_init(&fade_mask_param, &obj->coords, LV_OPA_COVER, obj->coords.y1 + h / 8, LV_OPA_TRANSP,
obj->coords.y2);
lv_draw_mask_fade_init(&fade_mask_param, &obj->coords, LV_OPA_COVER, obj->coords.y1 + h / 8, LV_OPA_TRANSP, obj->coords.y2);
int16_t fade_mask_id = lv_draw_mask_add(&fade_mask_param, NULL);
/*Draw a rectangle that will be affected by the mask*/
@@ -1388,14 +1354,14 @@ static void chart_event_cb(lv_event_t * e)
}
#endif
const lv_chart_series_t * ser = dsc->sub_part_ptr;
if(lv_chart_get_pressed_point(obj) == dsc->id) {
if(lv_chart_get_type(obj) == LV_CHART_TYPE_LINE) {
dsc->rect_dsc->outline_color = lv_color_white();
dsc->rect_dsc->outline_width = 2;
}
else {
} else {
dsc->rect_dsc->shadow_color = ser->color;
dsc->rect_dsc->shadow_width = 15;
dsc->rect_dsc->shadow_spread = 0;
@@ -1414,13 +1380,11 @@ static void chart_event_cb(lv_event_t * e)
if(ser == lv_chart_get_series_next(obj, NULL)) {
txt_area.x1 = dsc->draw_area->x1 + lv_area_get_width(dsc->draw_area) / 2;
txt_area.x2 = txt_area.x1 + text_size.x;
}
else {
} else {
txt_area.x2 = dsc->draw_area->x1 + lv_area_get_width(dsc->draw_area) / 2;
txt_area.x1 = txt_area.x2 - text_size.x;
}
}
else {
} else {
txt_area.x1 = dsc->draw_area->x1 + lv_area_get_width(dsc->draw_area) / 2 - text_size.x / 2;
txt_area.x2 = txt_area.x1 + text_size.x;
txt_area.y2 = dsc->draw_area->y1 - LV_DPX(15);
@@ -1444,8 +1408,7 @@ static void chart_event_cb(lv_event_t * e)
label_dsc.color = lv_color_white();
label_dsc.font = font_normal;
lv_draw_label(dsc->draw_ctx, &label_dsc, &txt_area, buf, NULL);
}
else {
} else {
dsc->rect_dsc->outline_width = 0;
dsc->rect_dsc->shadow_width = 0;
}
@@ -1453,6 +1416,7 @@ static void chart_event_cb(lv_event_t * e)
}
}
static void shop_chart_event_cb(lv_event_t * e)
{
lv_event_code_t code = lv_event_get_code(e);
@@ -1491,19 +1455,20 @@ static void shop_chart_event_cb(lv_event_t * e)
lv_draw_rect(dsc->draw_ctx, &draw_rect_dsc, &a);
a.y1 = a.y2 - 4; /*-4 to overlap the radius*/
a.y2 = a.y1 + (clothes[dsc->id] * h) / 100;
a.y2 = a.y1 + (clothes[dsc->id] * h) / 100;
draw_rect_dsc.bg_color = lv_palette_main(LV_PALETTE_BLUE);
draw_rect_dsc.radius = 0;
lv_draw_rect(dsc->draw_ctx, &draw_rect_dsc, &a);
lv_draw_rect( dsc->draw_ctx, &draw_rect_dsc, &a);
a.y1 = a.y2;
a.y2 = a.y1 + (services[dsc->id] * h) / 100;
draw_rect_dsc.bg_color = lv_palette_main(LV_PALETTE_GREEN);
lv_draw_rect(dsc->draw_ctx, &draw_rect_dsc, &a);
lv_draw_rect( dsc->draw_ctx, &draw_rect_dsc, &a);
}
}
}
static void meter1_indic1_anim_cb(void * var, int32_t v)
{
lv_meter_set_indicator_end_value(meter1, var, v);
@@ -1540,11 +1505,11 @@ static void meter2_timer_cb(lv_timer_t * timer)
static bool down2 = false;
static bool down3 = false;
if(down1) {
session_desktop -= 137;
if(session_desktop < 1400) down1 = false;
}
else {
} else {
session_desktop += 116;
if(session_desktop > 4500) down1 = true;
}
@@ -1552,8 +1517,7 @@ static void meter2_timer_cb(lv_timer_t * timer)
if(down2) {
session_tablet -= 3;
if(session_tablet < 1400) down2 = false;
}
else {
} else {
session_tablet += 9;
if(session_tablet > 4500) down2 = true;
}
@@ -1561,8 +1525,7 @@ static void meter2_timer_cb(lv_timer_t * timer)
if(down3) {
session_mobile -= 57;
if(session_mobile < 1400) down3 = false;
}
else {
} else {
session_mobile += 76;
if(session_mobile > 4500) down3 = true;
}

View File

@@ -27,7 +27,6 @@ extern "C" {
* GLOBAL PROTOTYPES
**********************/
void lv_demo_widgets(void);
void lv_demo_widgets_close(void);
/**********************
* MACROS

View File

@@ -17,7 +17,7 @@ LV_DPI =130
LV_ANIM_REPEAT_INFINITE = -1
# Register SDL display driver.
disp_buf1 = lv.disp_buf_t()
buf1_1 = bytes(480 * 10)
disp_buf1.init(buf1_1, None, len(buf1_1)//4)
@@ -32,7 +32,7 @@ disp_drv.register()
# Register SDL mouse driver
indev_drv = lv.indev_drv_t()
indev_drv.init()
indev_drv.init()
indev_drv.type = lv.INDEV_TYPE.POINTER
indev_drv.read_cb = SDL.mouse_read
indev_drv.register()
@@ -55,7 +55,7 @@ def LV_DPX(n):
return tmp
else:
return 1
def color_chg_event_cb(sw, e):
if e == lv.EVENT.VALUE_CHANGED:
flag = lv.THEME_MATERIAL_FLAG.LIGHT
@@ -63,7 +63,7 @@ def color_chg_event_cb(sw, e):
flag=lv.THEME_MATERIAL_FLAG.DARK
theme = lv.theme_material_init(LV_THEME_DEFAULT_COLOR_PRIMARY,LV_THEME_DEFAULT_COLOR_SECONDARY,flag,
lv.theme_get_font_small(), lv.theme_get_font_normal(), lv.theme_get_font_subtitle(),
lv.theme_get_font_title())
lv.theme_get_font_title())
def slider_event_cb(slider, e):
if e == lv.EVENT.VALUE_CHANGED:
if slider.get_type() == lv.slider.TYPE.NORMAL:
@@ -75,19 +75,19 @@ def slider_event_cb(slider, e):
slider_string = str(slider_left) + '-' + str(slider_right)
# print("slider left value: %d, slider right value: %d"%(slider_left,slider_right))
slider.set_style_local_value_str(lv.slider.PART.INDIC, lv.STATE.DEFAULT, slider_string)
def linemeter_anim(a,lmeter, value):
lmeter.set_value(value)
label = lmeter.get_child(None)
label.set_text(str(value))
label.align(lmeter, lv.ALIGN.CENTER, 0, 0)
def gauge_anim(a,gauge,val):
gauge.set_value(0,val)
label=gauge.get_child(None)
label.set_text(str(val))
label.align(gauge, lv.ALIGN.CENTER, 0, 0)
def bar_anim(task,bar):
val = bar.get_value()
# print("bar value: ",val)
@@ -95,11 +95,11 @@ def bar_anim(task,bar):
val += 1
if val > max_value:
val=0
bar.set_value(val,lv.ANIM.OFF)
bar.set_value(val,lv.ANIM.OFF)
cpy_string = "Copying %d/%d"% (val, max_value)
# print(cpy_string)
bar.set_style_local_value_str(lv.bar.PART.BG, lv.STATE.DEFAULT, cpy_string)
def arc_phase1_ready_cb(a,arc):
a_arc=lv.anim_t()
a_arc.init()
@@ -117,19 +117,19 @@ def arc_phase2_ready_cb(a,arc):
a_arc.set_values(0, 360)
a_arc.set_ready_cb(lambda a: arc_phase1_ready_cb(a,arc))
lv.anim_t.start(a_arc)
def anim_phase1(a,arc,val):
arc.set_end_angle(val)
label = arc.get_child(None)
label.set_text(str(val))
label.align(arc, lv.ALIGN.CENTER, 0, 0)
def anim_phase2(a,arc,val):
arc.set_end_angle(val)
label = arc.get_child(None)
label.set_text(str(val))
label.align(arc, lv.ALIGN.CENTER, 0, 0)
def controls_create(parent):
lv.page.set_scrl_layout(lv.page.__cast__(parent), lv.LAYOUT.PRETTY_TOP)
if LV_DEMO_WIDGETS_SLIDESHOW == 0:
@@ -139,15 +139,15 @@ def controls_create(parent):
btnm = lv.btnmatrix.__cast__(m.get_btnmatrix())
# print("type(btnm): ",type(btnm))
btnm.set_btn_ctrl(1, lv.btnmatrix.CTRL.CHECK_STATE)
h = lv.cont(parent, None)
h.set_layout(lv.LAYOUT.PRETTY_MID)
h.add_style(lv.cont.PART.MAIN, style_box)
h.set_drag_parent(True)
h.set_style_local_value_str(lv.cont.PART.MAIN, lv.STATE.DEFAULT, "Basics")
disp_size = display.get_size_category()
disp_size = display.get_size_category()
if disp_size <= lv.DISP_SIZE.SMALL:
grid_w= lv.page.get_width_grid(lv.page.__cast__(parent),1,1)
# print("grid_w: ",grid_w)
@@ -157,23 +157,23 @@ def controls_create(parent):
h.set_fit2(lv.FIT.NONE, lv.FIT.TIGHT)
h.set_width(grid_w)
btn = lv.btn(h,None)
btn = lv.btn(h,None)
btn.set_fit2(lv.FIT.NONE, lv.FIT.TIGHT)
if disp_size <= lv.DISP_SIZE.SMALL:
button_width=h.get_width_grid(1,1)
else:
button_width=h.get_width_grid(2,1)
# print("button_width: %d"%button_width)
btn.set_width(button_width)
label = lv.label(btn, None)
label.set_text("Button")
btn = lv.btn(h, btn)
btn.toggle()
label = lv.label(btn, None)
label.set_text("Button")
lv.switch(h, None)
lv.checkbox(h, None)
@@ -184,7 +184,7 @@ def controls_create(parent):
slider.set_value(40, lv.ANIM.OFF)
slider.set_event_cb(slider_event_cb)
slider.set_width_margin(fit_w);
# Use the knobs style value the display the current value in focused state
slider.set_style_local_margin_top(lv.slider.PART.BG, lv.STATE.DEFAULT, LV_DPX(25))
slider.set_style_local_value_font(lv.slider.PART.KNOB, lv.STATE.DEFAULT, lv.theme_get_font_small())
@@ -194,7 +194,7 @@ def controls_create(parent):
slider.set_style_local_transition_time(lv.slider.PART.KNOB, lv.STATE.DEFAULT, 300)
slider.set_style_local_transition_prop_5(lv.slider.PART.KNOB, lv.STATE.DEFAULT, lv.STYLE.VALUE_OFS_Y)
slider.set_style_local_transition_prop_6(lv.slider.PART.KNOB, lv.STATE.DEFAULT, lv.STYLE.VALUE_OPA)
slider = lv.slider(h, None)
slider.set_type(lv.slider.TYPE.RANGE)
slider.set_value(70, lv.ANIM.OFF)
@@ -206,11 +206,11 @@ def controls_create(parent):
lv.event_send(slider,lv.EVENT.VALUE_CHANGED, None) # To refresh the text
if slider.get_width() > fit_w:
slider.set_width(fit_w)
h = lv.cont(parent, h)
h.set_fit(lv.FIT.NONE)
h.set_style_local_value_str(lv.cont.PART.MAIN, lv.STATE.DEFAULT, "Text input")
ta = lv.textarea(h, None)
lv.cont.set_fit2(h,lv.FIT.PARENT, lv.FIT.NONE)
ta.set_text("")
@@ -258,7 +258,7 @@ def visuals_create(parent):
chart.set_div_line_count(3, 0)
chart.set_point_count(8)
chart.set_type(lv.chart.TYPE.LINE)
if disp_size > lv.DISP_SIZE.SMALL:
chart.set_style_local_pad_left(lv.chart.PART.BG, lv.STATE.DEFAULT, 4 * (LV_DPI // 10))
chart.set_style_local_pad_bottom(lv.chart.PART.BG, lv.STATE.DEFAULT, 3 * (LV_DPI // 10))
@@ -268,7 +268,7 @@ def visuals_create(parent):
chart.set_x_tick_length(0, 0)
chart.set_y_tick_texts("600\n500\n400\n300\n200", 0, lv.chart.AXIS.DRAW_LAST_TICK)
chart.set_x_tick_texts("Jan\nFeb\nMar\nApr\nMay\nJun\nJul\nAug", 0, lv.chart.AXIS.DRAW_LAST_TICK)
s1 = chart.add_series(LV_THEME_DEFAULT_COLOR_PRIMARY)
s2 = chart.add_series(LV_THEME_DEFAULT_COLOR_SECONDARY)
@@ -282,7 +282,7 @@ def visuals_create(parent):
chart.set_next(s1, 60)
chart.set_next(s1, 10)
chart.set_next(s1, 90)
chart.set_next(s2, 32)
chart.set_next(s2, 66)
chart.set_next(s2, 5)
@@ -333,7 +333,7 @@ def visuals_create(parent):
grid_w_meter = lv.page.get_width_grid(page, 2, 1)
else:
grid_w_meter = lv.page.get_width_grid(page, 3, 1)
meter_h = lv.page.get_height_fit(page)
if grid_w_meter < meter_h:
meter_size = grid_w_meter
@@ -359,7 +359,7 @@ def visuals_create(parent):
a_lm.set_playback_time(1000)
a_lm.set_repeat_count(LV_ANIM_REPEAT_INFINITE)
lv.anim_t.start(a_lm)
gauge = lv.gauge(parent, None)
gauge.set_drag_parent(True)
gauge.set_size(meter_size, meter_size)
@@ -378,7 +378,7 @@ def visuals_create(parent):
a_ga.set_repeat_count(LV_ANIM_REPEAT_INFINITE)
a_ga.set_custom_exec_cb(lambda a, val: gauge_anim(a,gauge,val))
lv.anim_t.start(a_ga)
arc = lv.arc(parent,None)
arc.set_drag_parent(True)
arc.set_bg_angles(0, 360)
@@ -412,7 +412,7 @@ def visuals_create(parent):
bar_h.set_width(lv.page.get_width_grid(page, 2, 1))
else:
bar_h.set_width(lv.page.get_width_grid(parent, 3, 2))
bar = lv.bar(bar_h,None)
bar.set_width(lv.cont.get_width_fit(bar_h))
bar.set_style_local_value_font(lv.bar.PART.BG, lv.STATE.DEFAULT, lv.theme_get_font_small())
@@ -421,7 +421,7 @@ def visuals_create(parent):
bar.set_style_local_margin_bottom(lv.bar.PART.BG, lv.STATE.DEFAULT, LV_DPI // 7)
bar.align(None, lv.ALIGN.CENTER, 0, 0)
bar.set_value(30,lv.ANIM.OFF)
led_h = lv.cont(parent, None)
led_h.set_layout(lv.LAYOUT.PRETTY_MID)
if disp_size <= lv.DISP_SIZE.SMALL:
@@ -459,9 +459,9 @@ def visuals_create(parent):
def selectors_create(parent):
page = lv.page.__cast__(parent)
lv.page.set_scrl_layout(page, lv.LAYOUT.PRETTY_MID)
grid_h = page.get_height_grid(1, 1)
if disp_size <= lv.DISP_SIZE.SMALL:
grid_w = page.get_width_grid(1, 1)
else:
@@ -497,7 +497,7 @@ def selectors_create(parent):
h.set_style_local_pad_top(lv.cont.PART_MAIN, LV_STATE_DEFAULT, 0);
h.set_size(min(grid_h, grid_w), min(grid_h, grid_w))
h.set_layout(lv.LAYOUT.PRETTY_TOP)
roller = lv.roller(h, None)
roller.add_style(lv.cont.PART.MAIN, style_box)
roller.set_style_local_value_str(lv.cont.PART.MAIN, lv.STATE.DEFAULT, "Roller")
@@ -508,8 +508,8 @@ def selectors_create(parent):
roller.set_width(lv.cont.get_width_grid(h, 1 , 1))
else:
roller.set_width(lv.cont.get_width_grid(h, 2 , 1))
dd = lv.dropdown(h, None)
dd.add_style(lv.cont.PART.MAIN, style_box)
dd.set_style_local_value_str(lv.cont.PART.MAIN, lv.STATE.DEFAULT, "Dropdown")
@@ -517,20 +517,20 @@ def selectors_create(parent):
dd.set_width(lv.cont.get_width_grid(h, 1 , 1))
else:
dd.set_width(lv.cont.get_width_grid(h, 2 , 1))
dd.set_options("Alpha\nBravo\nCharlie\nDelta\nEcho\nFoxtrot\nGolf\nHotel\nIndia\nJuliette\nKilo\nLima\nMike\nNovember\n"
"Oscar\nPapa\nQuebec\nRomeo\nSierra\nTango\nUniform\nVictor\nWhiskey\nXray\nYankee\nZulu")
list = lv.list(parent, None)
list.set_scroll_propagation(True)
list.set_size(grid_w, grid_h)
txts = [lv.SYMBOL.SAVE, "Save", lv.SYMBOL.CUT, "Cut", lv.SYMBOL.COPY, "Copy",
lv.SYMBOL.OK, "This is a quite long text to scroll on the list", lv.SYMBOL.EDIT, "Edit", lv.SYMBOL.WIFI, "Wifi",
lv.SYMBOL.BLUETOOTH, "Bluetooth", lv.SYMBOL.GPS, "GPS", lv.SYMBOL.USB, "USB",
lv.SYMBOL.SD_CARD, "SD card", lv.SYMBOL.CLOSE, "Close"]
for i in range(0,len(txts)//2,2):
btn = list.add_btn(txts[i], txts[i + 1]);
lv.btn.set_checkable(lv.btn.__cast__(btn),True)
@@ -538,9 +538,9 @@ def selectors_create(parent):
# Make a button disabled
if i == 4:
btn.set_state(lv.btn.STATE.DISABLED)
cal.set_highlighted_dates(hl, 2)
tv = lv.tabview(lv.scr_act(), None)
display = scr.get_disp()
disp_size = display.get_size_category()
@@ -549,7 +549,7 @@ tv.set_style_local_pad_left(lv.tabview.PART.TAB_BG, lv.STATE.DEFAULT, disp_drv.h
sw = lv.switch(lv.scr_act(), None)
if lv.theme_get_flags() & lv.THEME_MATERIAL_FLAG.DARK:
sw.on(LV_ANIM_OFF)
sw.set_event_cb(color_chg_event_cb)
sw.set_event_cb(color_chg_event_cb)
sw.set_pos(LV_DPX(10), LV_DPX(10))
sw.set_style_local_value_str(lv.switch.PART.BG, lv.STATE.DEFAULT, "Dark")
sw.set_style_local_value_align(lv.switch.PART.BG, lv.STATE.DEFAULT, lv.ALIGN.OUT_RIGHT_MID)
@@ -567,6 +567,6 @@ style_box.set_value_ofs_y(lv.STATE.DEFAULT, - LV_DPX(10))
style_box.set_margin_top(lv.STATE.DEFAULT, LV_DPX(30))
controls_create(t1)
visuals_create(t2)
visuals_create(t2)
selectors_create(t3)

File diff suppressed because it is too large Load Diff

View File

@@ -87,38 +87,3 @@ void lv_label_set_text(lv_obj_t * label, const char * text)
Use 4 spaces indentation instead of tab.
You can use **astyle** to format the code. Run `code-formatter.sh` from the `scrips` folder.
#### pre-commit
[pre-commit](https://pre-commit.com/) is a multi-language package manager for pre-commit hooks.
See the [instalation guide](https://pre-commit.com/#installation) to get pre-commit python package
installed into your development machine.
Once you have `pre-commit` installed you will need to [set up the git hook scripts](https://pre-commit.com/#3-install-the-git-hook-scripts) with:
```console
pre-commit install
```
now `pre-commit` will run automatically on `git commit`!
##### Hooks
The `format-source` local hook (see `.pre-commit-config.yaml`) runs **astyle** on all the staged source and header
files (that are not excluded, see `exclude` key of the hook configuration) before entering the commit message,
if any file gets formatted by **astyle** you will need to add the change to the staging area and run `git commit` again.
The `trailing-whitespace` hook fixes trailing whitespaces on all of the files.
##### Skipping hooks
If you want to skip any particular hook you can do so with:
```console
SKIP=name-of-the-hook git commit
```
##### Testing hooks
It's no necessary to do a commit to test the hooks, you can test hooks by adding the files into the staging area and run:
```console
pre-commit run name-of-the-hook
```

View File

@@ -1,3 +1,7 @@
```eval_rst
.. include:: /header.rst
:github_url: |github_link_base|/CONTRIBUTING.md
```
# Contributing
@@ -5,22 +9,22 @@
Join LVGL's community and leave your footprint in the library!
There are a lot of ways to contribute to LVGL even if you are new to the library or even new to programming.
There are a lot of ways to contribute to LVGL even if you are new to the library or even new to programming.
It might be scary to make the first step but you have nothing to be afraid of.
It might be scary to make the first step but you have nothing to be afraid of.
A friendly and helpful community is waiting for you. Get to know like-minded people and make something great together.
So let's find which contribution option fits you the best and help you join the development of LVGL!
Before getting started here are some guidelines to make contribution smoother:
- Be kind and friendly.
- Be kind and friendly.
- Be sure to read the relevant part of the documentation before posting a question.
- Ask questions in the [Forum](https://forum.lvgl.io/) and use [GitHub](https://github.com/lvgl/) for development-related discussions.
- Always fill out the post or issue templates in the Forum or GitHub (or at least provide equivalent information). It makes understanding your contribution or issue easier and you will get a useful response faster.
- If possible send an absolute minimal but buildable code example in order to reproduce the issue. Be sure it contains all the required variable declarations, constants, and assets (images, fonts).
- Use [Markdown](https://github.com/adam-p/markdown-here/wiki/Markdown-Cheatsheet) to format your posts. You can learn it in 10 minutes.
- Speak about one thing in one issue or topic. It makes your post easier to find later for someone with the same question.
- Give feedback and close the issue or mark the topic as solved if your question is answered.
- Give feedback and close the issue or mark the topic as solved if your question is answered.
- For non-trivial fixes and features, it's better to open an issue first to discuss the details instead of sending a pull request directly.
- Please read and follow the <a href="https://github.com/lvgl/lvgl/blob/master/docs/CODING_STYLE.md">Coding style</a> guide.
@@ -28,7 +32,7 @@ Before getting started here are some guidelines to make contribution smoother:
Merging new code into the lvgl, documentation, blog, examples, and other repositories happen via *Pull requests* (PR for short).
A PR is a notification like "Hey, I made some updates to your project. Here are the changes, you can add them if you want."
To do this you need a copy (called fork) of the original project under your account, make some changes there, and notify the original repository about your updates.
To do this you need a copy (called fork) of the original project under your account, make some changes there, and notify the original repository about your updates.
You can see what it looks like on GitHub for LVGL here: [https://github.com/lvgl/lvgl/pulls](https://github.com/lvgl/lvgl/pulls).
To add your changes you can edit files online on GitHub and send a new Pull request from there (recommended for small changes) or
@@ -44,13 +48,13 @@ To add your changes you can edit files online on GitHub and send a new Pull requ
### From command line
The instructions describe the main `lvgl` repository but it works the same way for the other repositories.
1. Fork the [lvgl repository](https://github.com/lvgl/lvgl). To do this click the "Fork" button in the top right corner.
1. Fork the [lvgl repository](https://github.com/lvgl/lvgl). To do this click the "Fork" button in the top right corner.
It will "copy" the `lvgl` repository to your GitHub account (`https://github.com/<YOUR_NAME>?tab=repositories`)
2. Clone your forked repository.
3. Add your changes. You can create a *feature branch* from *master* for the updates: `git checkout -b the-new-feature`
3. Add your changes. You can create a *feature branch* from *master* for the updates: `git checkout -b the-new-feature`
4. Commit and push your changes to the forked `lvgl` repository.
5. Create a PR on GitHub from the page of your `lvgl` repository (`https://github.com/<YOUR_NAME>/lvgl`) by clicking the *"New pull request"* button. Don't forget to select the branch where you added your changes.
7. Set the base branch. It means where you want to merge your update. In the `lvgl` repo both the fixes and new features go to `master` branch.
7. Set the base branch. It means where you want to merge your update. In the `lvgl` repo both the fixes and new features go to `master` branch.
8. Describe what is in the update. An example code is welcome if applicable.
9. If you need to make more changes, just update your forked `lvgl` repo with new commits. They will automatically appear in the PR.
@@ -68,7 +72,7 @@ The following structure should be used:
Possible `<type>`s:
- `fix` bugfix in the source code.
- `feat` new feature
- `feat` new feature
- `arch` architectural changes
- `perf` changes that affect the performance
- `example` anything related to examples (even fixes and new examples)
@@ -87,8 +91,8 @@ For example `img`, `layout`, `txt`, `anim`. The scope can be omitted.
`<body>` optional and can be used to describe the details of this change.
`<footer>` shall contain
- the words "BREAKING CHANGE" if the changes break the API
`<footer>` shall contain
- the words "BREAKING CHANGE" if the changes break the API
- reference to the GitHub issue or Pull Request if applicable.
Some examples:
@@ -133,7 +137,7 @@ To make the DCO easier to digest, here are some practical guides about specific
#### Your own work
The simplest case is when the contribution is solely your own work.
The simplest case is when the contribution is solely your own work.
In this case you can just send a Pull Request without worrying about any licensing issues.
#### Use code from online source
@@ -157,14 +161,14 @@ As LVGL is MIT licensed, other MIT licensed code can be integrated without issue
The MIT license requires a copyright notice be added to the derived work. Any derivative work based on MIT licensed code must copy the original work's license file or text.
#### Use GPL licensed code
The GPL license is not compatible with the MIT license. Therefore, LVGL can not accept GPL licensed code.
The GPL license is not compatible with the MIT license. Therefore, LVGL can not accept GPL licensed code.
## Ways to contribute
Even if you're just getting started with LVGL there are plenty of ways to get your feet wet.
Most of these options don't even require knowing a single line of LVGL code.
Even if you're just getting started with LVGL there are plenty of ways to get your feet wet.
Most of these options don't even require knowing a single line of LVGL code.
Below we have collected some opportunities about the ways you can contribute to LVGL.
Below we have collected some opportunities about the ways you can contribute to LVGL.
### Give LVGL a Star
@@ -174,36 +178,36 @@ Show that you like LVGL by giving it star on GitHub!
<!-- Place this tag where you want the button to render. -->
<a class="github-button" href="https://github.com/lvgl/lvgl" data-icon="octicon-star" data-size="large" data-show-count="true" aria-label="Star lvgl/lvgl on GitHub">Star</a>
This simple click makes LVGL more visible on GitHub and makes it more attractive to other people.
So with this, you already helped a lot!
This simple click makes LVGL more visible on GitHub and makes it more attractive to other people.
So with this, you already helped a lot!
### Tell what you have achieved
Have you already started using LVGL in a [Simulator](/get-started/platforms/pc-simulator), a development board, or on your custom hardware?
Was it easy or were there some obstacles? Are you happy with the result?
Have you already started using LVGL in a [Simulator](/get-started/pc-simulator), a development board, or on your custom hardware?
Was it easy or were there some obstacles? Are you happy with the result?
Showing your project to others is a win-win situation because it increases your and LVGL's reputation at the same time.
You can post about your project on Twitter, Facebook, LinkedIn, create a YouTube video, and so on.
Only one thing: On social media don't forget to add a link to `https://lvgl.io` or `https://github.com/lvgl` and use the hashtag `#lvgl`. Thank you! :)
You can post about your project on Twitter, Facebook, LinkedIn, create a YouTube video, and so on.
Only one thing: On social media don't forget to add a link to `https://lvgl.io` or `https://github.com/lvgl` and use the hashtag `#lvgl`. Thank you! :)
You can also open a new topic in the [My projects](https://forum.lvgl.io/c/my-projects/10) category of the Forum.
The [LVGL Blog](https://blog.lvgl.io) welcomes posts from anyone.
The [LVGL Blog](https://blog.lvgl.io) welcomes posts from anyone.
It's a good place to talk about a project you created with LVGL, write a tutorial, or share some nice tricks.
The latest blog posts are shown on the [homepage of LVGL](https://lvgl.io) to make your work more visible.
The blog is hosted on GitHub. If you add a post GitHub automatically turns it into a website.
The blog is hosted on GitHub. If you add a post GitHub automatically turns it into a website.
See the [README](https://github.com/lvgl/blog) of the blog repo to see how to add your post.
Any of these help to spread the word and familiarize new developers with LVGL.
If you don't want to speak about your project publicly, feel free to use [Contact form](https://lvgl.io/#contact) on lvgl.io to private message to us.
If you don't want to speak about your project publicly, feel free to use [Contact form](https://lvgl.io/#contact) on lvgl.io to private message to us.
### Write examples
As you learn LVGL you will probably play with the features of widgets. Why not publish your experiments?
Each widgets' documentation contains examples. For instance, here are the examples of the [Drop-down list](/widgets/core/dropdown#examples) widget.
The examples are directly loaded from the [lvgl/examples](https://github.com/lvgl/lvgl/tree/master/examples) folder.
Each widgets' documentation contains examples. For instance, here are the examples of the [Drop-down list](/widgets/core/dropdown#examples) widget.
The examples are directly loaded from the [lvgl/examples](https://github.com/lvgl/lvgl/tree/master/examples) folder.
So all you need to do is send a [Pull request](#pull-request) to the [lvgl](https://github.com/lvgl/lvgl) repository and follow some conventions:
- Name the examples like `lv_example_<widget_name>_<index>`.
@@ -215,14 +219,14 @@ So all you need to do is send a [Pull request](#pull-request) to the [lvgl](http
### Improve the docs
As you read the documentation you might see some typos or unclear sentences. All the documentation is located in the [lvgl/docs](https://github.com/lvgl/lvgl/tree/master/docs) folder.
For typos and straightforward fixes, you can simply edit the file on GitHub.
For typos and straightforward fixes, you can simply edit the file on GitHub.
Note that the documentation is also formatted in [Markdown](https://github.com/adam-p/markdown-here/wiki/Markdown-Cheatsheet).
Note that the documentation is also formatted in [Markdown](https://github.com/adam-p/markdown-here/wiki/Markdown-Cheatsheet).
### Report bugs
As you use LVGL you might find bugs. Before reporting them be sure to check the relevant parts of the documentation.
If it really seems like a bug feel free to open an [issue on GitHub](https://github.com/lvgl/lvgl/issues).
If it really seems like a bug feel free to open an [issue on GitHub](https://github.com/lvgl/lvgl/issues).
When filing the issue be sure to fill out the template. It helps find the root of the problem while avoiding extensive questions and exchanges with other developers.
@@ -245,17 +249,17 @@ Just read the titles and if you are familiar with the topic don't hesitate to sh
Participating in the discussions is one of the best ways to become part of the project and get to know like-minded people!
### Add features
If you have created a cool widget, or added useful feature to LVGL feel free to open a new PR for it.
We collect the optional features (a.k.a. plugins) in [lvgl/src/extra](https://github.com/lvgl/lvgl/tree/master/src/extra) folder so if you are interested in adding a new features please use this folder.
If you have created a cool widget, or added useful feature to LVGL feel free to open a new PR for it.
We collect the optional features (a.k.a. plugins) in [lvgl/src/extra](https://github.com/lvgl/lvgl/tree/master/src/extra) folder so if you are interested in adding a new features please use this folder.
The [README](https://github.com/lvgl/lvgl/blob/master/src/extra/README.md) file describes the basics rules of contribution and also lists some ideas.
For further ideas take a look at the [Roadmap](/ROADMAP) page. If you are interested in any of them feel free to share your opinion and/or participate in the implementation.
Other features which are (still) not on the road map are listed in the [Feature request](https://forum.lvgl.io/c/feature-request/9) category of the Forum.
Other features which are (still) not on the road map are listed in the [Feature request](https://forum.lvgl.io/c/feature-request/9) category of the Forum.
When adding a new features the followings also needs to be updated:
- Update [lv_conf_template.h](https://github.com/lvgl/lvgl/blob/master/lv_conf_template.h)
- Add description in the [docs](https://github.com/lvgl/lvgl/tree/master/docs)
- Add description in the [docs](https://github.com/lvgl/lvgl/tree/master/docs)
- Add [examples](https://github.com/lvgl/lvgl/tree/master/examples)
- Update the [changelog](https://github.com/lvgl/lvgl/tree/master/docs/CHANGELOG.md)
@@ -275,22 +279,22 @@ You can become a maintainer by invitation, however the following conditions need
2. Send > 5 non-trivial pull requests to the repo where you would like to be a maintainer
If you are interested, just send a message (e.g. from the Forum) to the current maintainers of the repository. They will check if the prerequisites are met.
Note that meeting the prerequisites is not a guarantee of acceptance, i.e. if the conditions are met you won't automatically become a maintainer.
If you are interested, just send a message (e.g. from the Forum) to the current maintainers of the repository. They will check if the prerequisites are met.
Note that meeting the prerequisites is not a guarantee of acceptance, i.e. if the conditions are met you won't automatically become a maintainer.
It's up to the current maintainers to make the decision.
### Move your project repository under LVGL organization
Besides the core `lvgl` repository there are other repos for ports to development boards, IDEs or other environment.
Besides the core `lvgl` repository there are other repos for ports to development boards, IDEs or other environment.
If you ported LVGL to a new platform we can host it under the LVGL organization among the other repos.
This way your project will become part of the whole LVGL project and can get more visibility.
If you are interested in this opportunity just open an [issue in lvgl repo](https://github.com/lvgl/lvgl/issues) and tell what you have!
This way your project will become part of the whole LVGL project and can get more visibility.
If you are interested in this opportunity just open an [issue in lvgl repo](https://github.com/lvgl/lvgl/issues) and tell what you have!
If we agree that your port fit well into the LVGL organization, we will open a repository for your project where you will have admin rights.
If we agree that your port fit well into the LVGL organization, we will open a repository for your project where you will have admin rights.
To make this concept sustainable there a few rules to follow:
- You need to add a README to your repo.
- We expect to maintain the repo to some extent:
- Follow at least the major versions of LVGL
- Follow at least the major versions of LVGL
- Respond to the issues (in a reasonable time)
- If there is no activity in a repo for 1 year it will be archived

View File

@@ -57,7 +57,7 @@ class LvExample(Directive):
env = self.state.document.settings.env
iframe_html = ""
c_path = self.get_example_code_path(example_path, 'c')
py_path = self.get_example_code_path(example_path, 'py')
@@ -69,9 +69,9 @@ class LvExample(Directive):
'<i class="fa fa-play"></i>&nbsp;Simulator': f"https://sim.lvgl.io/v{env.config.version}/micropython/ports/javascript/index.html?script_startup=https://raw.githubusercontent.com/lvgl/lvgl/{env.config.repo_commit_hash}/examples/header.py&script=https://raw.githubusercontent.com/lvgl/lvgl/{env.config.repo_commit_hash}/examples/{example_path}.py"
})
if not 'c' in excluded_languages:
if not 'c' in excluded_languages:
if env.app.tags.has('html'):
iframe_html = f"<div class='lv-example' data-real-src='/{env.config.version}/_static/built_lv_examples/index.html?example={example_name}&w=320&h=240'></div>"
iframe_html = f"<div class='lv-example' data-real-src='/{env.config.version}/_static/built_lv_examples?example={example_name}&w=320&h=240'></div>"
description_html = f"<div class='lv-example-description'>{self.options.get('description', '')}</div>"
layout_node = nodes.raw(text=f"<div class='lv-example-container'>{iframe_html}{description_html}</div>", format='html')

View File

@@ -7,12 +7,12 @@ td {
text-align:center;
}
span.pre
{
{
padding-right:8px;
}
span.pre:first-child
{
{
padding-right:0px;
}
@@ -26,18 +26,18 @@ code.sig-name
display: block;
clear: both;
cursor: pointer;
font-weight: bold;
font-weight: bold;
}
.toggle .header:before {
font-family: FontAwesome, "Lato","proxima-nova","Helvetica Neue",Arial,sans-serif;
content: "\f0da \00a0 Show ";
content: "\f0da \00a0 Show ";
display: inline-block;
font-size: 1.1em;
}
.toggle .header.open:before {
content: "\f0d7 \00a0 Hide ";
content: "\f0d7 \00a0 Hide ";
}
.header p {
@@ -56,7 +56,7 @@ code.sig-name
.home-img {
width:32%;
width:32%;
transition: transform .3s ease-out;
}
@@ -111,23 +111,3 @@ code.sig-name
.lv-example-link-button:visited {
color: white;
}
dl.cpp.unexpanded dd {
display: none;
}
.lv-api-expansion-button {
padding: 4px;
}
.lv-api-expansion-button::before {
font-family: FontAwesome, "Lato","proxima-nova","Helvetica Neue",Arial,sans-serif;
display: inline-block;
font-size: 1.1em;
cursor: pointer;
}
.unexpanded .lv-api-expansion-button::before {
content: "\f0da \00a0";
}
.expanded .lv-api-expansion-button::before {
content: "\f0d7 \00a0";
}

View File

@@ -1,57 +0,0 @@
/* API collapsing */
document.addEventListener('DOMContentLoaded', (event) => {
document.querySelectorAll("dl.cpp").forEach(cppListing => {
const dt = cppListing.querySelector("dt");
let shouldBeExpanded = false;
if(dt.id == document.location.hash.substring(1))
shouldBeExpanded = true;
cppListing.classList.add(shouldBeExpanded ? "expanded" : "unexpanded");
const button = document.createElement("span");
button.classList.add("lv-api-expansion-button");
button.addEventListener("click", () => {
cppListing.classList.toggle("unexpanded");
cppListing.classList.toggle("expanded");
});
dt.insertBefore(button, dt.firstChild);
});
fetch('https://lvgl.io/home-banner.txt') // Replace with your URL
.then(response => {
// Check if the request was successful
if (!response.ok) {
throw new Error(`HTTP error! Status: ${response.status}`);
}
// Read the response as text
return response.text();
})
.then(data => {
const section = document.querySelector('.wy-nav-content-wrap');
//Add a div
const newDiv = document.createElement('div');
newDiv.style="background-image: linear-gradient(45deg, black, #5e5e5e); color: white; border-bottom: 4px solid #e10010; padding-inline:3em"
section.insertBefore(newDiv, section.firstChild);
//Add a p to the div
const newP = document.createElement('p');
newP.style="padding-block:12px; margin-block:0px;align-content: center;align-items: center;"
newP.innerHTML = data
newDiv.insertBefore(newP, newDiv.firstChild);
const children = newDiv.querySelectorAll('*');
// Iterate over each child
children.forEach(child => {
// Check if the child has an id
if (child.id) {
// Prepend 'docs-' to the id
child.id = 'docs-' + child.id;
}
})
}) .catch(error => {
console.error('Fetch error: ' + error.message);
});
})

View File

@@ -29,7 +29,7 @@ function add_version_selector()
p.innerHTML = `
<select name="versions" id="versions" onchange="ver_sel()" style="border-radius:5px; margin-bottom:15px">
${versions.map(version => {
let versionName = "";
let versionName = "";
if(version == "master") versionName = "master (latest)";
else versionName = "v" + ((version.indexOf(".") != -1) ? version : (version + " (latest minor)"));
return `<option value="${version}">${versionName}</option>`;
@@ -49,7 +49,7 @@ document.addEventListener('DOMContentLoaded', (event) => {
var value = window.location.pathname.split('/')[1];
document.getElementById("versions").value = value;
});
})
document.addEventListener('DOMContentLoaded', (event) => {
function onIntersection(entries) {

View File

@@ -18,7 +18,7 @@ def cmd(s):
print(s)
print("-------------------------------------")
r = os.system(s)
if r != 0:
if r != 0:
print("Exit build due to previous error")
exit(-1)
@@ -31,9 +31,15 @@ br = re.sub('\* ', '', br)
ex.exec()
urlpath = re.sub('release/', '', br)
# Be sure the GitHub links point to the right branch
f = open("header.rst", "w")
f.write(".. |github_link_base| replace:: https://github.com/lvgl/lvgl/blob/" + gitcommit + "/docs")
f.close()
os.environ['LVGL_URLPATH'] = urlpath
os.environ['LVGL_GITCOMMIT'] = gitcommit
base_html = "html_baseurl = 'https://docs.lvgl.io/" + urlpath + "/en/html/'"
os.system("sed -i \"s|html_baseurl = .*|" + base_html +"|\" conf.py")
clean = 0
trans = 0
@@ -42,7 +48,7 @@ args = sys.argv[1:]
if len(args) >= 1:
if "clean" in args: clean = 1
if "skip_latex" in args: skip_latex = True
lang = "en"
print("")
print("****************")

View File

@@ -18,16 +18,14 @@
# documentation root, use os.path.abspath to make it absolute, like shown here.
#
import os
import subprocess
import sys
import subprocess
sys.path.insert(0, os.path.abspath('./_ext'))
from subprocess import PIPE, Popen
import recommonmark
from recommonmark.transform import AutoStructify
from sphinx.builders.html import StandaloneHTMLBuilder
from subprocess import Popen, PIPE
# -- General configuration ------------------------------------------------
@@ -51,7 +49,7 @@ extensions = ['sphinx.ext.autodoc',
# Add any paths that contain templates here, relative to this directory.
templates_path = ['_templates']
# The default language to highlight source code in. The default is 'python'.
# The default language to highlight source code in. The default is 'python'.
# The value should be a valid Pygments lexer name, see Showing code examples for more details.
@@ -90,8 +88,8 @@ language = None
# List of patterns, relative to source directory, that match files and
# directories to ignore when looking for source files.
# This patterns also effect to html_static_path and html_extra_path
exclude_patterns = ['_build', 'doxygen_html', 'Thumbs.db', '.DS_Store',
'README.md', 'lv_examples', 'out_html', 'env' ]
exclude_patterns = ['_build', 'doxygen_html', 'Thumbs.db', '.DS_Store',
'README.md', 'lv_examples', 'out_html' ]
# The name of the Pygments (syntax highlighting) style to use.
pygments_style = 'sphinx'
@@ -116,23 +114,9 @@ html_theme_options = {
'logo_only': True,
}
# For site map generation
html_baseurl = f"https://docs.lvgl.io/{os.environ['LVGL_URLPATH']}/en/html/"
html_baseurl = 'https://docs.lvgl.io/' + version + "/"
sitemap_url_scheme = "{link}"
#lvgl_github_url = f"https://github.com/lvgl/lvgl/blob/{os.environ['LVGL_GITCOMMIT']}/docs"
#extlinks = {'github_link_base': (github_url + '%s', github_url)}
html_context = {
'github_version': os.environ['LVGL_GITCOMMIT'],
'github_user': 'lvgl',
'github_repo': 'lvgl',
'display_github': True,
'conf_py_path': '/docs/'
}
# Add any paths that contain custom static files (such as style sheets) here,
# relative to this directory. They are copied after the builtin static files,
# so a file named "default.css" will overwrite the builtin "default.css".
@@ -150,10 +134,6 @@ html_sidebars = {
]
}
html_js_files = [
'js/custom.js'
]
html_favicon = 'favicon.png'
html_logo = 'logo_lvgl.png'
@@ -184,7 +164,7 @@ latex_elements = {
# Latex figure (float) alignment
#
# 'figure_align': 'htbp',
'inputenc': '',
'utf8extra': '',
'classoptions': ',openany,oneside',

View File

@@ -21,13 +21,13 @@ def process_index_rst(path):
line = fp.readline()
return(d)
h1= {
"get_started":"Get started",
"styles":"Styles",
"anim":"Animations",
"event":"Events",
"layouts":"Layouts",
"get_started":"Get started",
"styles":"Styles",
"anim":"Animations",
"event":"Events",
"layouts":"Layouts",
"scroll":"Scrolling",
"widgets":"Widgets"
}
@@ -103,6 +103,7 @@ def exec():
d_all.update(d_act)
fout.write("```eval_rst\n")
fout.write(".. include:: /header.rst\n")
fout.write(":github_url: |github_link_base|/examples.md\n")
fout.write("```\n")
fout.write("\n")
@@ -110,7 +111,7 @@ def exec():
for h in h1:
fout.write("## " + h1[h] + "\n")
if h == "widgets":
for w in widgets:
fout.write("### " + widgets[w] + "\n")
@@ -120,6 +121,7 @@ def exec():
fout.write("### " + layouts[l] + "\n")
print_item(h + "/" + l, 4, d_all, fout)
else:
print_item(h, 3, d_all, fout)
print_item(h, 3, d_all, fout)
fout.write("")

View File

@@ -1,9 +1,13 @@
```eval_rst
.. include:: /header.rst
:github_url: |github_link_base|/get-started/arduino.md
```
# Arduino
The [LVGL library](https://github.com/lvgl/lvgl) is directly available as Arduino libraries.
Note that you need to choose a board powerful enough to run LVGL and your GUI. See the [requirements of LVGL](https://docs.lvgl.io/master/intro/index.html#requirements).
Note that you need to choose a board powerful enough to run LVGL and your GUI. See the [requirements of LVGL](https://docs.lvgl.io/master/intro/index.html#requirements).
For example ESP32 is a good candidate to create UI's with LVGL.
@@ -11,13 +15,13 @@ For example ESP32 is a good candidate to create UI's with LVGL.
LVGL can be installed via the Arduino IDE Library Manager or as a .ZIP library.
You can [Download](https://github.com/lvgl/lvgl/archive/refs/heads/master.zip) the latest version of LVGL from GitHub and simply copy it to Arduino's library folder.
You can [Download](https://github.com/lvgl/lvgl/archive/refs/heads/master.zip) the latest version of LVGL from GitHub and simply copy it to Arduino's library folder.
## Set up drivers
To get started it's recommended to use [TFT_eSPI](https://github.com/Bodmer/TFT_eSPI) library as a TFT driver to simplify testing.
To get started it's recommended to use [TFT_eSPI](https://github.com/Bodmer/TFT_eSPI) library as a TFT driver to simplify testing.
To make it work, setup `TFT_eSPI` according to your TFT display type via editing either
- `User_Setup.h`
- `User_Setup.h`
- or by selecting a configuration in the `User_Setup_Select.h`
Both files are located in `TFT_eSPI` library's folder.
@@ -52,18 +56,13 @@ In the INO file you can see how to register a display and a touchpad for LVGL an
Note that, there is no dedicated INO file for every example. Instead, you can load an example by calling an `lv_example_...` function. For example `lv_example_btn_1()`.
**IMPORTANT NOTE 1**
**IMPORTANT**
Due to some the limitations of Arduino's build system you need to copy `lvgl/examples` to `lvgl/src/examples`. Similarly for the demos `lvgl/demos` to `lvgl/src/demos`.
**IMPORTANT NOTE 2**
Note that the `lv_examples` library is for LVGL v7 and you shouldn't install it for this version (since LVGL v8)
as the examples and demos are now part of the main LVGL library.
## Debugging and logging
LVGL can display debug information in case of trouble.
In the `LVGL_Arduino.ino` example there is a `my_print` method, which sends this debug information to the serial interface.
LVGL can display debug information in case of trouble.
In the `LVGL_Arduino.ino` example there is a `my_print` method, which sends this debug information to the serial interface.
To enable this feature you have to edit the `lv_conf.h` file and enable logging in the section `log settings`:
```c

View File

@@ -1,4 +0,0 @@
# Cpp
In progress: https://github.com/lvgl/lv_binding_cpp

View File

@@ -1,12 +0,0 @@
# Bindings
```eval_rst
.. toctree::
:maxdepth: 2
micropython
cpp
```

View File

@@ -1,3 +1,7 @@
```eval_rst
.. include:: /header.rst
:github_url: |github_link_base|/get-started/cmake.md
```
# CMake
LVGL supports integrating with [CMake](https://cmake.org/). It comes with preconfigured targets for:
@@ -42,14 +46,14 @@ This configuration declares a dependency between the two targets **MyFirmware**
### Additional CMake options
Besides `LV_CONF_PATH` there are two additional CMake options to specify include paths.
`LV_LVGL_H_INCLUDE_SIMPLE` which specifies whether to `#include "lvgl.h"` absolut or relative
`LV_LVGL_H_INCLUDE_SIMPLE` which specifies whether to `#include "lvgl.h"` absolut or relative
| ON (default) | OFF |
| ------------ | -------------- |
| "lvgl.h" | "../../lvgl.h" |
`LV_CONF_INCLUDE_SIMPLE` which specifies whether to `#include "lv_conf.h"` and `"lv_drv_conf.h"` absolut or relative
`LV_CONF_INCLUDE_SIMPLE` which specifies whether to `#include "lv_conf.h"` and `"lv_drv_conf.h"` absolut or relative
| ON (default) | OFF |
| --------------- | --------------------- |
@@ -67,23 +71,23 @@ target_link_libraries(MyFirmware PRIVATE lvgl::lvgl lvgl::examples)
```
## Building LVGL drivers and demos with CMake
Exactly the same goes for the [drivers](https://github.com/lvgl/lv_drivers) and the [demos](https://github.com/lvgl/lvgl/demos).
Exactly the same goes for the [drivers](https://github.com/lvgl/lv_drivers) and the [demos](https://github.com/lvgl/lv_demos).
```cmake
# Specify path to own LVGL demos config header
set(LV_DEMO_CONF_PATH
${CMAKE_CURRENT_SOURCE_DIR}/src/lv_demo_conf.h
CACHE STRING "" FORCE)
FetchContent_Declare(lv_drivers
GIT_REPOSITORY https://github.com/lvgl/lv_drivers)
FetchContent_MakeAvailable(lv_drivers)
FetchContent_Declare(lv_demos
GIT_REPOSITORY https://github.com/lvgl/lv_demos.git)
FetchContent_MakeAvailable(lv_demos)
# The target "MyFirmware" depends on LVGL, drivers and demos
target_link_libraries(MyFirmware PRIVATE lvgl::lvgl lvgl::drivers lvgl::examples)
```
# Build shared libraries with CMake
By default, LVGL will be built as a static library (archive). CMake can instead be instructed to build LVGL as shared library (.so/.dll/etc.):
```cmake
set(BUILD_SHARED_LIBS ON)
```
OR
```
$ cmake "-DBUILD_SHARED_LIBS=ON" .
```
Just like the [lv_conf.h](https://github.com/lvgl/lvgl/blob/master/lv_conf_template.h) header demos comes with its own config header called [lv_demo_conf.h](https://github.com/lvgl/lv_demos/blob/master/lv_demo_conf_template.h). Analogous to `LV_CONF_PATH` its path can be set by using the option `LV_DEMO_CONF_PATH`.

View File

@@ -1,3 +1,7 @@
```eval_rst
.. include:: /header.rst
:github_url: |github_link_base|/get-started/espressif.md
```
# Espressif (ESP32 chip series)
LVGL can be used and configured as a standard [ESP-IDF](https://github.com/espressif/esp-idf) component.
@@ -6,7 +10,7 @@ More information about ESP-IDF build system can be found [here](https://docs.esp
## LVGL demo project for ESP32
We've created [lv_port_esp32](https://github.com/lvgl/lv_port_esp32), a project using ESP-IDF and LVGL to show one of the demos from [demos](https://github.com/lvgl/lvgl/demos).
We've created [lv_port_esp32](https://github.com/lvgl/lv_port_esp32), a project using ESP-IDF and LVGL to show one of the demos from [lv_demos](https://github.com/lvgl/lv_demos).
You can configure the project to use one of the many supported display controllers and targets (chips).
See [lvgl_esp32_drivers](https://github.com/lvgl/lvgl_esp32_drivers) repository for a complete list

View File

@@ -1,17 +1,21 @@
```eval_rst
.. include:: /header.rst
:github_url: |github_link_base|/get-started/index.md
```
# Get started
There are several ways to get your feet wet with LVGL. Here is one recommended order of documents to read and things to play with when you are learning to use LVGL:
1. Check the [Online demos](https://lvgl.io/demos) to see LVGL in action (3 minutes)
2. Read the [Introduction](https://docs.lvgl.io/latest/en/html/intro/index.html) page of the documentation (5 minutes)
3. Read the [Quick overview](https://docs.lvgl.io/master/get-started/quick-overview.html) page of the documentation (15 minutes)
4. Set up a [Simulator](https://docs.lvgl.io/master/get-started/platforms/pc-simulator.html) (10 minutes)
4. Set up a [Simulator](https://docs.lvgl.io/master/get-started/pc-simulator.html) (10 minutes)
5. Try out some [Examples](https://docs.lvgl.io/master/examples.html)
6. Check out the Platform-specific tutorials. (in this section below). (10 minutes)
6. Check out the Platform-specific tutorials. (in this section below). (10 minutes)
7. Port LVGL to a board. See the [Porting](https://docs.lvgl.io/master/porting/index.html) guide or check the ready to use [Projects](https://github.com/lvgl?q=lv_port_&type=&language=)
8. Read the [Overview](https://docs.lvgl.io/master/overview/index.html) page to get a better understanding of the library. (2-3 hours)
9. Check the documentation of the [Widgets](https://docs.lvgl.io/master/widgets/index.html) to see their features and usage
10. If you have questions got to the [Forum](http://forum.lvgl.io/)
11. Read the [Contributing](https://docs.lvgl.io/master/CONTRIBUTING.html) guide to see how you can help to improve LVGL (15 minutes)
11. Read the [Contributing](https://docs.lvgl.io/master/CONTRIBUTING.html) guide to see how you can help to improve LVGL (15 minutes)
```eval_rst
@@ -20,8 +24,15 @@ There are several ways to get your feet wet with LVGL. Here is one recommended o
:maxdepth: 2
quick-overview
platforms/index
os/index
bindings/index
pc-simulator
stm32
nxp
espressif
arduino
micropython
tasmota-berry
nuttx
rt-thread
cmake
```

View File

@@ -1,8 +1,12 @@
```eval_rst
.. include:: /header.rst
:github_url: |github_link_base|/get-started/micropython.md
```
# Micropython
## What is Micropython?
[Micropython](http://micropython.org/) is Python for microcontrollers.
[Micropython](http://micropython.org/) is Python for microcontrollers.
Using Micropython, you can write Python3 code and run it even on a bare metal architecture with limited resources.
### Highlights of Micropython
@@ -23,15 +27,15 @@ Currently, Micropython [does not have a good high-level GUI library](https://for
### Here are some advantages of using LVGL in Micropython:
- Develop GUI in Python, a very popular high level language. Use paradigms such as Object-Oriented Programming.
- Usually, GUI development requires multiple iterations to get things right. With C, each iteration consists of **`Change code` > `Build` > `Flash` > `Run`**.
- Usually, GUI development requires multiple iterations to get things right. With C, each iteration consists of **`Change code` > `Build` > `Flash` > `Run`**.
In Micropython it's just **`Change code` > `Run`** ! You can even run commands interactively using the [REPL](https://en.wikipedia.org/wiki/Read%E2%80%93eval%E2%80%93print_loop) (the interactive prompt)
### Micropython + LVGL could be used for:
- Fast prototyping GUI.
- Fast prototyping GUI.
- Shortening the cycle of changing and fine-tuning the GUI.
- Modelling the GUI in a more abstract way by defining reusable composite objects, taking advantage of Python's language features such as Inheritance, Closures, List Comprehension, Generators, Exception Handling, Arbitrary Precision Integers and others.
- Make LVGL accessible to a larger audience. No need to know C to create a nice GUI on an embedded system.
- Make LVGL accessible to a larger audience. No need to know C to create a nice GUI on an embedded system.
This goes well with [CircuitPython vision](https://learn.adafruit.com/welcome-to-circuitpython/what-is-circuitpython). CircuitPython was designed with education in mind, to make it easier for new or inexperienced users to get started with embedded development.
- Creating tools to work with LVGL at a higher level (e.g. drag-and-drop designer).
@@ -42,7 +46,7 @@ This goes well with [CircuitPython vision](https://learn.adafruit.com/welcome-to
> TL;DR:
> It's very much like the C API, but Object-Oriented for LVGL components.
Let's dive right into an example!
Let's dive right into an example!
### A simple example
@@ -61,7 +65,7 @@ lv.scr_load(scr)
### Online Simulator
If you want to experiment with LVGL + Micropython without downloading anything - you can use our online simulator!
If you want to experiment with LVGL + Micropython without downloading anything - you can use our online simulator!
It's a fully functional LVGL + Micropython that runs entirely in the browser and allows you to edit a python script and run it.
[Click here to experiment on the online simulator](https://sim.lvgl.io/)
@@ -72,14 +76,14 @@ Note: the online simulator is available for lvgl v6 and v7.
### PC Simulator
Micropython is ported to many platforms. One notable port is "unix", which allows you to build and run Micropython (+LVGL) on a Linux machine. (On a Windows machine you might need Virtual Box or WSL or MinGW or Cygwin etc.)
Micropython is ported to many platforms. One notable port is "unix", which allows you to build and run Micropython (+LVGL) on a Linux machine. (On a Windows machine you might need Virtual Box or WSL or MinGW or Cygwin etc.)
[Click here to know more information about building and running the unix port](https://github.com/lvgl/lv_micropython)
### Embedded platform
In the end, the goal is to run it all on an embedded platform.
Both Micropython and LVGL can be used on many embedded architectures, such as stm32, ESP32 etc.
In the end, the goal is to run it all on an embedded platform.
Both Micropython and LVGL can be used on many embedded architectures, such as stm32, ESP32 etc.
You would also need display and input drivers. We have some sample drivers (ESP32+ILI9341, as well as some other examples), but chances are you would want to create your own input/display drivers for your specific hardware.
Drivers can be implemented either in C as a Micropython module, or in pure Micropython!

Some files were not shown because too many files have changed in this diff Show More