From a37fabdd7362cf4f97b0ec364a4c2908552eb0e6 Mon Sep 17 00:00:00 2001 From: Simon Weis Date: Tue, 10 Oct 2023 14:34:00 +0200 Subject: [PATCH 1/3] Add github action and make zlib buffer way smaller --- .github/workflows/test_verification.yml | 141 ++++++++++++++++++ assets/test/unit/miner.aseprite | Bin 0 -> 4553 bytes impl/aselib/chunk_data.cpp | 24 +-- test/unit_tests/dino_test.cpp | 187 +----------------------- 4 files changed, 155 insertions(+), 197 deletions(-) create mode 100644 .github/workflows/test_verification.yml create mode 100644 assets/test/unit/miner.aseprite diff --git a/.github/workflows/test_verification.yml b/.github/workflows/test_verification.yml new file mode 100644 index 0000000..6c914b4 --- /dev/null +++ b/.github/workflows/test_verification.yml @@ -0,0 +1,141 @@ +name: Tests + +on: + push: + branches: [ master ] + pull_request: + branches: [ master ] + +jobs: + Linux_gcc: + runs-on: ubuntu-latest + strategy: + matrix: + gccver: [ 9, 10, 11 ] + steps: + - name: Set up cmake + uses: jwlawson/actions-setup-cmake@v1.11 + with: + cmake-version: '3.26.x' + + - name: Set up gcc + uses: egor-tensin/setup-gcc@v1 + with: + version: ${{ matrix.gccver }} + platform: x64 + + - uses: actions/checkout@v2 + with: + lfs: 'true' + + - name: gitlfs + run: git lfs pull + + - name: ccache + uses: hendrikmuhs/ccache-action@v1 + with: + key: ${{ github.job }}-${{ matrix.gccver }}-${{ matrix.os }} + max-size: 100M + + - name: CMake + run: | + cmake \ + -DCMAKE_C_COMPILER_LAUNCHER=ccache -DCMAKE_CXX_COMPILER_LAUNCHER=ccache \ + -B ${{github.workspace}}/build . + + - name: Build + working-directory: ${{github.workspace}}/build + run: make aselib aselib_test -j + + - name: CopyAssets + run: cp -r ${{github.workspace}}/assets ${{github.workspace}}/build/test/unit_tests/ + + - name: Test + run: ./aselib_test + working-directory: ${{github.workspace}}/build/test/unit_tests + + # Windows: + # runs-on: windows-2019 + # steps: + # - name: Set up cmake + # uses: jwlawson/actions-setup-cmake@v1.11 + # with: + # cmake-version: '3.26.x' + # + # - uses: actions/checkout@v2 + # + # - name: CMake + # run: cmake -B ${{github.workspace}}/build . -DOALPP_STATIC_LIBRARY=ON + # + # - name: Build + # working-directory: ${{github.workspace}}/build + # run: cmake --build . + # + # - name: Test + # working-directory: ${{github.workspace}}/build + # run: test/unit_tests/Debug/OpenALpp_UnitTests.exe --order rand + + Web: + runs-on: ubuntu-latest + env: + EMCC_CCACHE: 1 + steps: + - name: Set up cmake + uses: jwlawson/actions-setup-cmake@v1.11 + with: + cmake-version: '3.26.x' + + - name: Set up gcc + uses: egor-tensin/setup-gcc@v1 + with: + version: 9 + platform: x64 + + - uses: mymindstorm/setup-emsdk@v11 + + - uses: actions/checkout@v2 + + - name: ccache + uses: hendrikmuhs/ccache-action@v1 + with: + key: ${{ github.job }}-${{ matrix.os }}-${{ matrix.type }} + max-size: 100M + + - name: CMake + run: | + emcmake cmake -B ${{github.workspace}}/build \ + -DCMAKE_C_COMPILER_LAUNCHER=ccache -DCMAKE_CXX_COMPILER_LAUNCHER=ccache \ + . + - name: Build + working-directory: ${{github.workspace}}/build + run: emmake make aselib aselib_test + + Mac_clang: + runs-on: macos-latest + steps: + - name: Set up cmake + uses: jwlawson/actions-setup-cmake@v1.11 + with: + cmake-version: '3.26.x' + + - name: Install dependencies + run: | + brew install cmake ninja + + - uses: actions/checkout@v2 + + - name: ccache + uses: hendrikmuhs/ccache-action@v1 + with: + key: ${{ github.job }}-${{ matrix.os }} + max-size: 100M + + - name: CMake + run: | + cmake \ + -DCMAKE_C_COMPILER_LAUNCHER=ccache -DCMAKE_CXX_COMPILER_LAUNCHER=ccache \ + -B ${{github.workspace}}/build . + + - name: Build + working-directory: ${{github.workspace}}/build + run: make aselib aselib_test -j 4 diff --git a/assets/test/unit/miner.aseprite b/assets/test/unit/miner.aseprite new file mode 100644 index 0000000000000000000000000000000000000000..234a20d3f37d41a8dec3a88dbc0e0f0844a953d8 GIT binary patch literal 4553 zcmeHKZBSEZ7Jfq@0m&Dl5WbR>2U62v`sn`4R;xAPRn=q6tKl2(f6u@+HAg6u~8^ zTT*ew7Sw`>fa8dCa1ba$1&fwqRNSJaG^3UkL_q}Zo?L8mNM*(rT5Gpu(5in!V zKEP;^2rz6-2w=kE1At|Yj)1qa0lYR z8Ylx_APY=^CU69Tzz(PZFCYbsfR36Ajspvz0P!I>M24^s69Pgs2;~6**q9FBR*hn?cO5zaEI9H zwX1q)SBzlSHtuT|sc1*MBnB8Ag=IYqAw#H4{8d`|h>1Qr7Ri@NGtBJAWjwM8I^1xo z$@)QE8q3y(S-G6GQ~%Oad(OKoWUy6C0Ry>rTXQf~qaUDC@G^!e@P)|fSqcn@GX+0318`bAGk z2TpZuj3teuSsNrUJ6TkWS836czM`{bAl z<-&7L+d52j*`rrYkE=-^F6D$XJ%*&Mix)BrlVYBKJ0}IztO-B02MstJgT@z+*AL6(Bi7i9T%gH57 z_f2tMEpQm&#~{Tm*UJ(p&5?dGu|L%g=M&)&nt_b8!WkfjCO3`hjBZw3w`U;TIUY-7 zH=Uw{aWaZZPmlg9EcvmgzI2kKD!yft&FCITRB>w zfJe^FJEm#=ca7$TQ#9AtX#Q3!T}&28JkU3(9Vd1Xr2bPyKF@hk)=KVbcRe3QVY1i5 z8_&8!nN=3|_M|+lyp*qaLPBSw166C^RCm7^7x{L3JEx4nkWlXYF~8Va@>!<4JNA_H zZiiD)!Zf*$ypmhn-ZyD1IpvgaPKIFMRa3#aRNE7LNn&gez1nhrP}v@d=jShHZ*Y+g z^AhFZJlZbLnlV)r_K4ad0_?IVBWga{0kE~1W=nR;j zTK(Y2s?_Eb6g%MNI$ibuxAV8r&SjcfZ-yFIxAXs9)g{C(RQDH#)VRtJ;LSle#mi#~`q z^q=26x);fCY=OM(3dMhAb{_-1@CrV?g@~y>OX*rM>2Qpz&r&a>9tmhRNRh+}D%&K9 z<RaXr8ZSfq6>AaBE|)IAS!Y%tF7!y2m#qA+KoPtc!VP_8m{iGpBU4%Q(-Es7Pq1 zV(BM`r?s2oL{RmKs@-l3rq3}9bolDY>l1T~FI^wX0 zMqZmvx;jCN8J6SQw~I#cIKB>Brc`#+^#~NJoK)jiO&H30gI+EhU1DYm#_M~dB)u8r{;8>UL~hBgF785`TfFteXwEMG4_x)+gobVqI@C2MYh z?ArXs(xtnps7Vyc|4`!t715^nVEkJ?2tsp%nN^mR2}T1{JBJjpwavb3W5bUdPE!la zg=u*rQ`aQ_I17g))fQ9N{w43ZD{s!W#`)P>Sr%yQO5j)pVTmp=L7hwtKoYOD_B2p%-2uvIX3;V^Dh z96c;N_YB5cvbq|Eu`wRakxKC&oI&=tcizo194{g%To5a9!#Ou1iVm7RWvrY*%&;$U zE{P5E>jx`5+eOryt@t)6+o@xfU+G;mum5~d1o0{v3R-(2RsVn_c99-2kt)(@(z4uD z3o1(Hb<#FI+~05Lkid$hSbzD>g{>~C)4uHc3$nW;0XchwZY`CC9TI=hrp0T6%l05Y z$`T9tv@JB*#b{Hu(63MIiJ_DePWNYI8nkF{q2>YJrL(vC(j98dC5f!e7MYi~^a`%- zF&CVi#&H)ODaSiTlBlqx8NZjyp{VvOWs+HxemL4M*6~`$RDC`R$)~tB)Q091#U}Ze z-fRmlicGraw&S&CF%WgaEDo5(b}LQ#I*sMKRu)vY_2){QSIbMqHnRAri5DmIpvBZC zFu%HPlYCaand{h%zCXzx?-j_|2LEiR$erchEb#dYx@6QuK`o@vIlDE|8%~ja=A`sQ z1H)RqNM4=6&%XAjx~gYhoLT+F$T0p51Y;UU#UrQ(YN+ zT14azgcmNq^5UZ<{yh`cPu~Vc)4j0u>J0dst8!2t!LYkfJe)26Yeeg3`R1bGER(42 wY-&WSv@*-dw9sr=Io#^q)KmTOs)aLmk{$ZIf`4kvB$Y&A*(7ve^-A%-0W6C3bpQYW literal 0 HcmV?d00001 diff --git a/impl/aselib/chunk_data.cpp b/impl/aselib/chunk_data.cpp index 7a945e8..a12b145 100644 --- a/impl/aselib/chunk_data.cpp +++ b/impl/aselib/chunk_data.cpp @@ -19,7 +19,7 @@ std::string decompress(const std::string& str) zs.avail_in = static_cast(str.size()); int ret; - char outbuffer[10240]; + char outbuffer[256]; std::string outstring; // get the decompressed bytes blockwise using repeated calls to inflate @@ -58,7 +58,7 @@ aselib::ChunkHeader aselib::parseChunkHeader(std::istream& is) void aselib::parseNextChunk(std::istream& is, ChunksData& data) { - ChunkHeader hdr = parseChunkHeader(is); + ChunkHeader const hdr = parseChunkHeader(is); if (hdr.m_chunk_type == 0x2007) { // color profile chunk @@ -130,10 +130,10 @@ void aselib::parseNextChunk(std::istream& is, ChunksData& data) auto const chunk_header_size = 6; auto const chunk_data_offset = 20 + chunk_header_size; auto const data_size = cc.m_header.m_chunk_size - chunk_data_offset; - std::string compressed_data; + std::string compressed_data {}; compressed_data.resize(data_size); is.read(compressed_data.data(), compressed_data.size()); - std::string uncompressed_data = decompress(compressed_data); + std::string const uncompressed_data = decompress(compressed_data); auto const length = uncompressed_data.length(); if (length != cc.m_cell_height * cc.m_cell_width * 4) { @@ -144,12 +144,14 @@ void aselib::parseNextChunk(std::istream& is, ChunksData& data) for (auto j = 0u; j != cc.m_cell_height; ++j) { for (auto i = 0u; i != cc.m_cell_width; ++i) { auto const idx_ofs = (i + j * cc.m_cell_width) * 4; - PixelDataRGBA col {}; - col.r = static_cast(uncompressed_data[idx_ofs + 0]); - col.g = static_cast(uncompressed_data[idx_ofs + 1]); - col.b = static_cast(uncompressed_data[idx_ofs + 2]); - col.a = static_cast(uncompressed_data[idx_ofs + 3]); - cc.m_pixels_rgba.emplace_back(col); + cc.m_pixels_rgba.emplace_back(PixelDataRGBA { + // clang-format off + static_cast(uncompressed_data[idx_ofs + 0]), + static_cast(uncompressed_data[idx_ofs + 1]), + static_cast(uncompressed_data[idx_ofs + 2]), + static_cast(uncompressed_data[idx_ofs + 3]) + // clang-format on + }); } } @@ -189,7 +191,7 @@ void aselib::parseNextChunk(std::istream& is, ChunksData& data) } if (udc.m_user_data_flags & 4) { // TODO implement properties - + // Dword_t const numberOfPropertyMaps = parseDword(is); throw std::invalid_argument { "cannot read properties until now" }; } diff --git a/test/unit_tests/dino_test.cpp b/test/unit_tests/dino_test.cpp index ec4879b..1575743 100644 --- a/test/unit_tests/dino_test.cpp +++ b/test/unit_tests/dino_test.cpp @@ -3,192 +3,7 @@ using namespace aselib; -static unsigned char dino_salto_aseprite[] = { 0x76, 0x0b, 0x00, 0x00, 0xe0, 0xa5, 0x11, 0x00, 0x18, - 0x00, 0x12, 0x00, 0x20, 0x00, 0x01, 0x00, 0x00, 0x00, 0x64, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x16, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x10, - 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0x01, 0x00, 0x00, 0xfa, 0xf1, 0x07, 0x00, 0x64, - 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x16, 0x00, 0x00, 0x00, 0x07, 0x20, 0x01, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x9e, 0x00, 0x00, - 0x00, 0x19, 0x20, 0x16, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x15, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x20, - 0x3b, 0x20, 0xff, 0x00, 0x00, 0x18, 0x2e, 0x1d, 0xff, 0x00, 0x00, 0x29, 0x1e, 0x14, 0xff, 0x00, - 0x00, 0x12, 0x09, 0x01, 0xff, 0x00, 0x00, 0x4a, 0x1b, 0x1b, 0xff, 0x00, 0x00, 0x28, 0x57, 0x3f, - 0xff, 0x00, 0x00, 0x8a, 0x7a, 0x57, 0xff, 0x00, 0x00, 0x2d, 0x4a, 0x2c, 0xff, 0x00, 0x00, 0x2f, - 0x37, 0x40, 0xff, 0x00, 0x00, 0x5c, 0x53, 0x2b, 0xff, 0x00, 0x00, 0x19, 0x2e, 0x1b, 0xff, 0x00, - 0x00, 0x36, 0x26, 0x16, 0xff, 0x00, 0x00, 0x47, 0x6e, 0x65, 0xff, 0x00, 0x00, 0x24, 0x24, 0x22, - 0xff, 0x00, 0x00, 0x36, 0x36, 0x33, 0xff, 0x00, 0x00, 0x45, 0x45, 0x41, 0xff, 0x00, 0x00, 0x65, - 0x96, 0x92, 0xff, 0x00, 0x00, 0x6b, 0x28, 0x28, 0xff, 0x00, 0x00, 0x96, 0x90, 0x48, 0xff, 0x00, - 0x00, 0x80, 0x52, 0x38, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x4c, 0x00, 0x00, 0x00, 0x04, - 0x00, 0x01, 0x00, 0x00, 0x16, 0x00, 0x00, 0x00, 0x20, 0x3b, 0x20, 0x18, 0x2e, 0x1d, 0x29, 0x1e, - 0x14, 0x12, 0x09, 0x01, 0x4a, 0x1b, 0x1b, 0x28, 0x57, 0x3f, 0x8a, 0x7a, 0x57, 0x2d, 0x4a, 0x2c, - 0x2f, 0x37, 0x40, 0x5c, 0x53, 0x2b, 0x19, 0x2e, 0x1b, 0x36, 0x26, 0x16, 0x47, 0x6e, 0x65, 0x24, - 0x24, 0x22, 0x36, 0x36, 0x33, 0x45, 0x45, 0x41, 0x65, 0x96, 0x92, 0x6b, 0x28, 0x28, 0x96, 0x90, - 0x48, 0x80, 0x52, 0x38, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x18, 0x20, 0x01, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x49, 0x6e, 0x41, 0x69, 0x72, 0x0e, - 0x00, 0x00, 0x00, 0x20, 0x20, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x1f, 0x00, 0x00, - 0x00, 0x04, 0x20, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, - 0x00, 0x00, 0x00, 0x07, 0x00, 0x4c, 0x61, 0x79, 0x65, 0x72, 0x20, 0x31, 0x7b, 0x00, 0x00, 0x00, - 0x05, 0x20, 0x00, 0x00, 0x06, 0x00, 0x06, 0x00, 0xff, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x0b, 0x00, 0x0c, 0x00, 0x78, 0x9c, 0x63, 0x60, 0x40, 0x00, 0x8d, 0x70, 0xfb, 0xff, - 0xc8, 0x34, 0x2e, 0x00, 0x92, 0xc7, 0x86, 0xb1, 0xa9, 0xed, 0xaa, 0x0a, 0xff, 0x8f, 0x8c, 0x71, - 0xa9, 0xd3, 0x37, 0x77, 0x80, 0xab, 0x81, 0xb1, 0xf1, 0x99, 0x1b, 0x13, 0xac, 0xfd, 0x1f, 0x84, - 0x09, 0x99, 0x8b, 0xcb, 0x0d, 0xd8, 0xd4, 0x4b, 0xea, 0x49, 0xff, 0x77, 0xcf, 0x4b, 0x85, 0x63, - 0x10, 0x1f, 0x9b, 0x3a, 0x90, 0x19, 0xc8, 0x6a, 0x61, 0x7c, 0x7c, 0xee, 0x45, 0x36, 0x17, 0x9f, - 0x3a, 0x10, 0x20, 0x36, 0x7c, 0x71, 0xa9, 0x43, 0x56, 0x8f, 0xac, 0x0f, 0xe4, 0x46, 0x74, 0x36, - 0xba, 0x1e, 0x00, 0x13, 0xf5, 0x85, 0x5f, 0x8e, 0x00, 0x00, 0x00, 0xfa, 0xf1, 0x01, 0x00, 0xc8, - 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x7e, 0x00, 0x00, 0x00, 0x05, 0x20, 0x00, 0x00, 0x07, - 0x00, 0x05, 0x00, 0xff, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0b, 0x00, 0x0d, - 0x00, 0x78, 0x9c, 0x63, 0x60, 0x80, 0x00, 0x8d, 0x70, 0xfb, 0xff, 0xc8, 0x34, 0x2e, 0x00, 0x92, - 0xc7, 0x86, 0xb1, 0xa9, 0xed, 0xaa, 0x0a, 0xff, 0x8f, 0x8c, 0x71, 0xa9, 0xd3, 0x37, 0x77, 0x80, - 0xab, 0x81, 0xb1, 0xf1, 0x99, 0x1b, 0x13, 0xac, 0xfd, 0x1f, 0x84, 0x09, 0x99, 0x8b, 0xcb, 0x0d, - 0xd8, 0xd4, 0x4b, 0xea, 0x49, 0xff, 0x77, 0xcf, 0x4b, 0x85, 0x63, 0x10, 0x1f, 0x97, 0xb9, 0xb8, - 0xd4, 0x62, 0x53, 0x0f, 0xb2, 0x13, 0x59, 0x2d, 0x21, 0xf7, 0x22, 0xab, 0x25, 0x14, 0xbe, 0xb8, - 0xe2, 0x02, 0x5b, 0x5c, 0x62, 0x63, 0xe3, 0xd2, 0x07, 0xf2, 0x0f, 0xb2, 0x5f, 0x71, 0xb9, 0x15, - 0x00, 0x93, 0x38, 0x8a, 0x49, 0x8e, 0x00, 0x00, 0x00, 0xfa, 0xf1, 0x01, 0x00, 0x64, 0x00, 0x00, - 0x00, 0x01, 0x00, 0x00, 0x00, 0x7e, 0x00, 0x00, 0x00, 0x05, 0x20, 0x00, 0x00, 0x07, 0x00, 0x04, - 0x00, 0xff, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0b, 0x00, 0x0d, 0x00, 0x78, - 0x9c, 0x63, 0x60, 0x80, 0x00, 0x8d, 0x70, 0xfb, 0xff, 0xc8, 0x34, 0x2e, 0x00, 0x92, 0xc7, 0x86, - 0xb1, 0xa9, 0xed, 0xaa, 0x0a, 0xff, 0x8f, 0x8c, 0x71, 0xa9, 0xd3, 0x37, 0x77, 0x80, 0xab, 0x81, - 0xb1, 0xf1, 0x99, 0x1b, 0x13, 0xac, 0xfd, 0x1f, 0x84, 0x09, 0x99, 0x8b, 0xcb, 0x0d, 0xd8, 0xd4, - 0x4b, 0xea, 0x49, 0xff, 0x77, 0xcf, 0x4b, 0x85, 0x63, 0x10, 0x1f, 0x97, 0xb9, 0xb8, 0xd4, 0x62, - 0x53, 0x0f, 0xb2, 0x13, 0x59, 0x2d, 0x21, 0xf7, 0x22, 0xab, 0x25, 0x14, 0xbe, 0xb8, 0xe2, 0x02, - 0x5b, 0x5c, 0x62, 0x63, 0xe3, 0xd2, 0x07, 0xf2, 0x0f, 0xb2, 0x5f, 0x71, 0xb9, 0x15, 0x00, 0x93, - 0x38, 0x8a, 0x49, 0x8c, 0x00, 0x00, 0x00, 0xfa, 0xf1, 0x01, 0x00, 0x64, 0x00, 0x00, 0x00, 0x01, - 0x00, 0x00, 0x00, 0x7c, 0x00, 0x00, 0x00, 0x05, 0x20, 0x00, 0x00, 0x06, 0x00, 0x04, 0x00, 0xff, - 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x0c, 0x00, 0x78, 0x9c, 0x63, - 0x60, 0x40, 0x00, 0x8d, 0x70, 0xfb, 0xff, 0xc8, 0x34, 0x3e, 0x00, 0x52, 0x83, 0x0d, 0xe3, 0x52, - 0xdf, 0x55, 0x15, 0xfe, 0x1f, 0x19, 0xe3, 0x53, 0xab, 0x6f, 0xee, 0x00, 0x57, 0x07, 0x63, 0x13, - 0x32, 0x3f, 0x26, 0x58, 0xfb, 0x3f, 0x08, 0x13, 0x63, 0x3e, 0x2e, 0xf7, 0xe0, 0xd2, 0x23, 0xa9, - 0x27, 0xfd, 0xdf, 0x3d, 0x2f, 0x15, 0x8e, 0x41, 0x7c, 0x5c, 0x6a, 0x41, 0x66, 0x21, 0xab, 0x87, - 0xf1, 0x09, 0xb9, 0x1f, 0xd9, 0x7c, 0x42, 0x6a, 0x71, 0xa9, 0xc7, 0xa5, 0x07, 0x57, 0x5c, 0x21, - 0xeb, 0x41, 0xd7, 0x0b, 0x72, 0x33, 0x3a, 0x1b, 0x9b, 0x5e, 0x00, 0x62, 0x71, 0x88, 0x30, 0x91, - 0x00, 0x00, 0x00, 0xfa, 0xf1, 0x01, 0x00, 0x64, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x81, - 0x00, 0x00, 0x00, 0x05, 0x20, 0x00, 0x00, 0x06, 0x00, 0x03, 0x00, 0xff, 0x02, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x0b, 0x00, 0x78, 0x9c, 0x63, 0x60, 0x40, 0x05, 0x5d, - 0x55, 0xe1, 0xff, 0x19, 0x08, 0x00, 0x8d, 0x70, 0x7b, 0xb8, 0x1a, 0x49, 0x3d, 0xe9, 0xff, 0x20, - 0x0c, 0xe3, 0xeb, 0x9b, 0x3b, 0xa0, 0xe8, 0x07, 0xc9, 0x81, 0xd4, 0xbb, 0xe7, 0xa5, 0xa2, 0x60, - 0x90, 0x3d, 0x31, 0xc1, 0xda, 0x60, 0x1a, 0x84, 0x91, 0xcd, 0x24, 0x56, 0x3d, 0x4c, 0x0f, 0xb2, - 0x7a, 0x90, 0x1c, 0x8c, 0x06, 0x61, 0x90, 0x7b, 0x90, 0xcd, 0x87, 0xb9, 0x07, 0x86, 0x61, 0xee, - 0x87, 0xa9, 0xc7, 0x65, 0x3e, 0x31, 0x18, 0xd9, 0xfd, 0xe8, 0xe2, 0xb8, 0x68, 0x74, 0x3d, 0x84, - 0xc2, 0x1e, 0x9b, 0x1d, 0xc4, 0xea, 0xc1, 0x66, 0x2f, 0x3a, 0x00, 0x00, 0x3d, 0xfb, 0x88, 0x30, - 0x93, 0x00, 0x00, 0x00, 0xfa, 0xf1, 0x01, 0x00, 0x64, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, - 0x83, 0x00, 0x00, 0x00, 0x05, 0x20, 0x00, 0x00, 0x06, 0x00, 0x02, 0x00, 0xff, 0x02, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x0c, 0x00, 0x78, 0x9c, 0xd3, 0x08, 0xb7, 0xff, - 0xaf, 0x81, 0x86, 0x19, 0x80, 0x40, 0x52, 0x4f, 0x1a, 0x4c, 0xa3, 0xb3, 0x41, 0x00, 0xa6, 0x06, - 0x5d, 0x1f, 0x36, 0x73, 0xd0, 0x01, 0xb2, 0xbc, 0x7b, 0x5e, 0x2a, 0x1c, 0x63, 0x53, 0x8b, 0xae, - 0x87, 0x18, 0xf5, 0x30, 0xb5, 0x20, 0x37, 0x77, 0x55, 0x85, 0xc3, 0xd5, 0xc3, 0xf8, 0xb8, 0xf4, - 0x80, 0xe4, 0x91, 0xcd, 0x47, 0xf7, 0x33, 0xba, 0xf9, 0x20, 0xb3, 0x90, 0x31, 0x21, 0xf7, 0xc3, - 0xd4, 0xc5, 0x04, 0x6b, 0x83, 0x31, 0x21, 0xf7, 0x83, 0xd4, 0xea, 0x9b, 0x3b, 0xc0, 0xf5, 0x81, - 0xd8, 0xc4, 0x98, 0x4f, 0xc8, 0x3d, 0xa4, 0xc4, 0x15, 0xba, 0x3e, 0x64, 0x1a, 0x06, 0x00, 0x0c, - 0x91, 0x88, 0x30, 0x87, 0x00, 0x00, 0x00, 0xfa, 0xf1, 0x01, 0x00, 0x64, 0x00, 0x00, 0x00, 0x01, - 0x00, 0x00, 0x00, 0x77, 0x00, 0x00, 0x00, 0x05, 0x20, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0xff, - 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x0b, 0x00, 0x78, 0x9c, 0x63, - 0x60, 0x20, 0x0e, 0x68, 0x84, 0xdb, 0xff, 0x07, 0x61, 0x22, 0x95, 0xc3, 0xf5, 0x90, 0xa2, 0x16, - 0xa6, 0x9e, 0x18, 0x1a, 0x5d, 0x3d, 0x31, 0x18, 0x59, 0x6d, 0x57, 0x55, 0x38, 0x0a, 0x96, 0xd4, - 0x93, 0x06, 0x63, 0x64, 0xf5, 0x20, 0x3e, 0x4c, 0x0f, 0x48, 0x8d, 0xbe, 0xb9, 0x03, 0x5c, 0xbd, - 0x7b, 0x5e, 0x2a, 0x9c, 0x06, 0x61, 0x5c, 0xe6, 0xc7, 0x04, 0x6b, 0xa3, 0xa8, 0x43, 0x57, 0x8f, - 0x6c, 0x3e, 0x21, 0xf5, 0x30, 0xf7, 0xc0, 0x00, 0xc8, 0x3d, 0x30, 0x36, 0xcc, 0xfd, 0xa4, 0x84, - 0x3d, 0xc8, 0x1e, 0x74, 0x31, 0x00, 0x83, 0x66, 0x86, 0x73, 0x8b, 0x00, 0x00, 0x00, 0xfa, 0xf1, - 0x01, 0x00, 0x64, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x7b, 0x00, 0x00, 0x00, 0x05, 0x20, - 0x00, 0x00, 0x06, 0x00, 0x03, 0x00, 0xff, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x0b, 0x00, 0x0c, 0x00, 0x78, 0x9c, 0x63, 0x60, 0x40, 0x00, 0x8d, 0x70, 0xfb, 0xff, 0xc8, 0x34, - 0x2e, 0x00, 0x92, 0xc7, 0x86, 0xb1, 0xa9, 0xed, 0xaa, 0x0a, 0xff, 0x8f, 0x8c, 0x71, 0xa9, 0xd3, - 0x37, 0x77, 0x80, 0xab, 0x81, 0xb1, 0xf1, 0x99, 0x1b, 0x13, 0xac, 0xfd, 0x1f, 0x84, 0x09, 0x99, - 0x8b, 0xcb, 0x0d, 0xd8, 0xd4, 0x4b, 0xea, 0x49, 0xff, 0x77, 0xcf, 0x4b, 0x85, 0x63, 0x10, 0x1f, - 0x9b, 0x3a, 0x90, 0x19, 0xc8, 0x6a, 0x61, 0x7c, 0x7c, 0xee, 0x45, 0x36, 0x17, 0x9f, 0x3a, 0x10, - 0x20, 0x36, 0x7c, 0x71, 0xa9, 0x43, 0x56, 0x8f, 0xac, 0x0f, 0xe4, 0x46, 0x74, 0x36, 0xba, 0x1e, - 0x00, 0x13, 0xf5, 0x85, 0x5f, 0x8b, 0x00, 0x00, 0x00, 0xfa, 0xf1, 0x01, 0x00, 0xc8, 0x00, 0x00, - 0x00, 0x01, 0x00, 0x00, 0x00, 0x7b, 0x00, 0x00, 0x00, 0x05, 0x20, 0x00, 0x00, 0x06, 0x00, 0x06, - 0x00, 0xff, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0b, 0x00, 0x0c, 0x00, 0x78, - 0x9c, 0x63, 0x60, 0x40, 0x00, 0x8d, 0x70, 0xfb, 0xff, 0xc8, 0x34, 0x2e, 0x00, 0x92, 0xc7, 0x86, - 0xb1, 0xa9, 0xed, 0xaa, 0x0a, 0xff, 0x8f, 0x8c, 0x71, 0xa9, 0xd3, 0x37, 0x77, 0x80, 0xab, 0x81, - 0xb1, 0xf1, 0x99, 0x1b, 0x13, 0xac, 0xfd, 0x1f, 0x84, 0x09, 0x99, 0x8b, 0xcb, 0x0d, 0xd8, 0xd4, - 0x4b, 0xea, 0x49, 0xff, 0x77, 0xcf, 0x4b, 0x85, 0x63, 0x10, 0x1f, 0x9b, 0x3a, 0x90, 0x19, 0xc8, - 0x6a, 0x61, 0x7c, 0x7c, 0xee, 0x45, 0x36, 0x17, 0x9f, 0x3a, 0x10, 0x20, 0x36, 0x7c, 0x71, 0xa9, - 0x43, 0x56, 0x8f, 0xac, 0x0f, 0xe4, 0x46, 0x74, 0x36, 0xba, 0x1e, 0x00, 0x13, 0xf5, 0x85, 0x5f, - 0x94, 0x00, 0x00, 0x00, 0xfa, 0xf1, 0x01, 0x00, 0xc8, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, - 0x84, 0x00, 0x00, 0x00, 0x05, 0x20, 0x00, 0x00, 0x06, 0x00, 0x05, 0x00, 0xff, 0x02, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x0d, 0x00, 0x78, 0x9c, 0x63, 0x60, 0x40, 0x00, - 0x8d, 0x70, 0xfb, 0xff, 0xc8, 0x34, 0x3e, 0x00, 0x52, 0x83, 0x0d, 0xe3, 0x52, 0xdf, 0x55, 0x15, - 0xfe, 0x1f, 0x19, 0xe3, 0x53, 0xab, 0x6f, 0xee, 0x00, 0x57, 0x07, 0x63, 0x13, 0x32, 0x3f, 0x26, - 0x58, 0xfb, 0x3f, 0x08, 0x13, 0x63, 0x3e, 0x2e, 0xf7, 0xe0, 0xd2, 0x23, 0xa9, 0x27, 0xfd, 0xdf, - 0x3d, 0x2f, 0x15, 0x8e, 0x25, 0xf4, 0x64, 0x71, 0xaa, 0x05, 0x99, 0x85, 0xac, 0x1e, 0xc4, 0x87, - 0xa9, 0xc7, 0xe7, 0x26, 0x64, 0xf3, 0x09, 0xa9, 0xc5, 0xa5, 0x1e, 0x3d, 0xfe, 0x90, 0xcd, 0xc0, - 0x15, 0x5f, 0xb8, 0xe2, 0x0f, 0x17, 0x1b, 0x17, 0x00, 0xf9, 0x19, 0x1b, 0x1b, 0x1d, 0x00, 0x00, - 0x05, 0x22, 0x88, 0x32, 0x94, 0x00, 0x00, 0x00, 0xfa, 0xf1, 0x01, 0x00, 0xc8, 0x00, 0x00, 0x00, - 0x01, 0x00, 0x00, 0x00, 0x84, 0x00, 0x00, 0x00, 0x05, 0x20, 0x00, 0x00, 0x05, 0x00, 0x05, 0x00, - 0xff, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0d, 0x00, 0x0d, 0x00, 0x78, 0x9c, - 0x63, 0x60, 0x40, 0x05, 0x1a, 0xe1, 0xf6, 0xff, 0x91, 0x69, 0x42, 0x00, 0xa4, 0x0e, 0x1b, 0xc6, - 0xa7, 0xa7, 0xab, 0x2a, 0xfc, 0x3f, 0x32, 0x26, 0xa4, 0x5e, 0xdf, 0xdc, 0x01, 0xae, 0x16, 0xc6, - 0x26, 0xc6, 0x9e, 0x98, 0x60, 0xed, 0xff, 0x20, 0x4c, 0xac, 0x3d, 0xb8, 0xdc, 0x86, 0x4d, 0x1f, - 0x48, 0x4e, 0x42, 0x4f, 0xf6, 0xbf, 0xa4, 0x9e, 0xf4, 0x7f, 0xf7, 0xbc, 0x54, 0x38, 0x06, 0x89, - 0x11, 0x63, 0x0f, 0x4c, 0x3d, 0xcc, 0x1c, 0x62, 0xfc, 0x83, 0x6c, 0x0f, 0x31, 0xea, 0x71, 0xe9, - 0x21, 0x14, 0xc7, 0xb8, 0xe2, 0x14, 0x5f, 0x1c, 0x23, 0xf3, 0x89, 0x4d, 0x3b, 0xa0, 0xb0, 0xc3, - 0xc6, 0x46, 0x07, 0x00, 0xaf, 0x14, 0x86, 0x76, 0x91, 0x00, 0x00, 0x00, 0xfa, 0xf1, 0x01, 0x00, - 0xc8, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x81, 0x00, 0x00, 0x00, 0x05, 0x20, 0x00, 0x00, - 0x06, 0x00, 0x05, 0x00, 0xff, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x00, - 0x0d, 0x00, 0x78, 0x9c, 0x63, 0x60, 0x40, 0x00, 0x8d, 0x70, 0xfb, 0xff, 0xc8, 0x34, 0x3e, 0x00, - 0x52, 0x83, 0x0d, 0xe3, 0x52, 0xdf, 0x55, 0x15, 0xfe, 0x1f, 0x19, 0xe3, 0x53, 0xab, 0x6f, 0xee, - 0x00, 0x57, 0x07, 0x63, 0x13, 0x32, 0x3f, 0x26, 0x58, 0xfb, 0x3f, 0x08, 0x13, 0x63, 0x3e, 0x2e, - 0xf7, 0xe0, 0xd2, 0x23, 0xa9, 0x27, 0xfd, 0xdf, 0x3d, 0x2f, 0x15, 0xac, 0x4e, 0x42, 0x4f, 0x16, - 0x8c, 0x71, 0xa9, 0x85, 0xa9, 0x01, 0xa9, 0x87, 0x61, 0x62, 0xc2, 0x07, 0x9b, 0x7a, 0x7c, 0xee, - 0xc7, 0x67, 0x3e, 0x36, 0xbd, 0xb8, 0xe2, 0x0b, 0x57, 0xfc, 0xe1, 0x62, 0xe3, 0x02, 0xa0, 0x30, - 0xc2, 0xc6, 0x46, 0x07, 0x00, 0x90, 0xc5, 0x86, 0x1a, 0x94, 0x00, 0x00, 0x00, 0xfa, 0xf1, 0x01, - 0x00, 0xc8, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x84, 0x00, 0x00, 0x00, 0x05, 0x20, 0x00, - 0x00, 0x05, 0x00, 0x05, 0x00, 0xff, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0d, - 0x00, 0x0d, 0x00, 0x78, 0x9c, 0x63, 0x60, 0x40, 0x05, 0x1a, 0xe1, 0xf6, 0xff, 0x91, 0x69, 0x42, - 0x00, 0xa4, 0x0e, 0x1b, 0xc6, 0xa7, 0xa7, 0xab, 0x2a, 0xfc, 0x3f, 0x32, 0x26, 0xa4, 0x5e, 0xdf, - 0xdc, 0x01, 0xae, 0x16, 0xc6, 0x26, 0xc6, 0x9e, 0x98, 0x60, 0xed, 0xff, 0x20, 0x4c, 0xac, 0x3d, - 0xb8, 0xdc, 0x86, 0x4d, 0x1f, 0x48, 0x4e, 0x42, 0x4f, 0xf6, 0xbf, 0xa4, 0x9e, 0xf4, 0x7f, 0xf7, - 0xbc, 0x54, 0x38, 0x06, 0x89, 0x11, 0x63, 0x0f, 0x4c, 0x3d, 0xcc, 0x1c, 0x62, 0xfc, 0x83, 0x6c, - 0x0f, 0x31, 0xea, 0x71, 0xe9, 0x21, 0x14, 0xc7, 0xb8, 0xe2, 0x14, 0x5f, 0x1c, 0x23, 0xf3, 0x89, - 0x4d, 0x3b, 0xa0, 0xb0, 0xc3, 0xc6, 0x46, 0x07, 0x00, 0xaf, 0x14, 0x86, 0x76, 0x91, 0x00, 0x00, - 0x00, 0xfa, 0xf1, 0x01, 0x00, 0xc8, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x81, 0x00, 0x00, - 0x00, 0x05, 0x20, 0x00, 0x00, 0x06, 0x00, 0x05, 0x00, 0xff, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x0c, 0x00, 0x0d, 0x00, 0x78, 0x9c, 0x63, 0x60, 0x40, 0x00, 0x8d, 0x70, 0xfb, - 0xff, 0xc8, 0x34, 0x3e, 0x00, 0x52, 0x83, 0x0d, 0xe3, 0x52, 0xdf, 0x55, 0x15, 0xfe, 0x1f, 0x19, - 0xe3, 0x53, 0xab, 0x6f, 0xee, 0x00, 0x57, 0x07, 0x63, 0x13, 0x32, 0x3f, 0x26, 0x58, 0xfb, 0x3f, - 0x08, 0x13, 0x63, 0x3e, 0x2e, 0xf7, 0xe0, 0xd2, 0x23, 0xa9, 0x27, 0xfd, 0xdf, 0x3d, 0x2f, 0x15, - 0xac, 0x4e, 0x42, 0x4f, 0x16, 0x8c, 0x71, 0xa9, 0x85, 0xa9, 0x01, 0xa9, 0x87, 0x61, 0x62, 0xc2, - 0x07, 0x9b, 0x7a, 0x7c, 0xee, 0xc7, 0x67, 0x3e, 0x36, 0xbd, 0xb8, 0xe2, 0x0b, 0x57, 0xfc, 0xe1, - 0x62, 0xe3, 0x02, 0xa0, 0x30, 0xc2, 0xc6, 0x46, 0x07, 0x00, 0x90, 0xc5, 0x86, 0x1a, 0x94, 0x00, - 0x00, 0x00, 0xfa, 0xf1, 0x01, 0x00, 0xf4, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x84, 0x00, - 0x00, 0x00, 0x05, 0x20, 0x00, 0x00, 0x06, 0x00, 0x05, 0x00, 0xff, 0x02, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x0d, 0x00, 0x78, 0x9c, 0x63, 0x60, 0x40, 0x00, 0x8d, 0x70, - 0xfb, 0xff, 0xc8, 0x34, 0x3e, 0x00, 0x52, 0x83, 0x0d, 0xe3, 0x52, 0xdf, 0x55, 0x15, 0xfe, 0x1f, - 0x19, 0xe3, 0x53, 0xab, 0x6f, 0xee, 0x00, 0x57, 0x07, 0x63, 0x13, 0x32, 0x3f, 0x26, 0x58, 0xfb, - 0x3f, 0x08, 0x13, 0x63, 0x3e, 0x2e, 0xf7, 0xe0, 0xd2, 0x23, 0xa9, 0x27, 0xfd, 0xdf, 0x3d, 0x2f, - 0x15, 0x8e, 0x25, 0xf4, 0x64, 0x71, 0xaa, 0x05, 0x99, 0x85, 0xac, 0x1e, 0xc4, 0x87, 0xa9, 0xc7, - 0xe7, 0x26, 0x64, 0xf3, 0x09, 0xa9, 0xc5, 0xa5, 0x1e, 0x5f, 0xfc, 0xe1, 0x8a, 0x2f, 0x5c, 0xf1, - 0x07, 0x62, 0x83, 0xdc, 0x8d, 0xcb, 0x3c, 0x7c, 0x00, 0xe4, 0x7f, 0x5c, 0x72, 0x00, 0x44, 0x9d, - 0x86, 0x76, 0x94, 0x00, 0x00, 0x00, 0xfa, 0xf1, 0x01, 0x00, 0xc8, 0x00, 0x00, 0x00, 0x01, 0x00, - 0x00, 0x00, 0x84, 0x00, 0x00, 0x00, 0x05, 0x20, 0x00, 0x00, 0x06, 0x00, 0x05, 0x00, 0xff, 0x02, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x0d, 0x00, 0x78, 0x9c, 0x63, 0x60, - 0x40, 0x00, 0x8d, 0x70, 0xfb, 0xff, 0xc8, 0x34, 0x3e, 0x00, 0x52, 0x83, 0x0d, 0xe3, 0x52, 0xdf, - 0x55, 0x15, 0xfe, 0x1f, 0x19, 0xe3, 0x53, 0xab, 0x6f, 0xee, 0x00, 0x57, 0x07, 0x63, 0x13, 0x32, - 0x3f, 0x26, 0x58, 0xfb, 0x3f, 0x08, 0x13, 0x63, 0x3e, 0x2e, 0xf7, 0xe0, 0xd2, 0x23, 0xa9, 0x27, - 0xfd, 0xdf, 0x3d, 0x2f, 0x15, 0x8e, 0x25, 0xf4, 0x64, 0x71, 0xaa, 0x05, 0x99, 0x85, 0xac, 0x1e, - 0xc4, 0x87, 0xa9, 0xc7, 0xe7, 0x26, 0x64, 0xf3, 0x09, 0xa9, 0xc5, 0xa5, 0x1e, 0x3d, 0xfe, 0x90, - 0xcd, 0xc0, 0x15, 0x5f, 0xb8, 0xe2, 0x0f, 0x17, 0x1b, 0x17, 0x00, 0xf9, 0x19, 0x1b, 0x1b, 0x1d, - 0x00, 0x00, 0x05, 0x22, 0x88, 0x32, 0xa7, 0x00, 0x00, 0x00, 0xfa, 0xf1, 0x01, 0x00, 0xc8, 0x00, - 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x97, 0x00, 0x00, 0x00, 0x05, 0x20, 0x00, 0x00, 0x04, 0x00, - 0x02, 0x00, 0xff, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x0f, 0x00, - 0x78, 0x9c, 0x63, 0x60, 0x60, 0x60, 0x98, 0x36, 0xc1, 0xe3, 0x3f, 0x03, 0x19, 0x80, 0x1c, 0x7d, - 0x30, 0x3d, 0xc8, 0x7a, 0x35, 0xc2, 0xed, 0xff, 0x23, 0xd3, 0xc4, 0xd8, 0x07, 0x52, 0x8b, 0x0d, - 0x13, 0xd2, 0xd7, 0x55, 0x15, 0xfe, 0x1f, 0x19, 0x13, 0xb2, 0x13, 0x04, 0xf4, 0xcd, 0x1d, 0xe0, - 0xea, 0x61, 0x6c, 0x7c, 0xf6, 0x21, 0x83, 0x98, 0x60, 0xed, 0xff, 0x20, 0x4c, 0x8a, 0x7d, 0xb8, - 0xdc, 0x49, 0x48, 0xaf, 0xa4, 0x9e, 0xf4, 0x7f, 0xf7, 0xbc, 0x54, 0x38, 0x96, 0xd0, 0x93, 0x25, - 0xa8, 0x07, 0x64, 0x36, 0xb2, 0x3e, 0x10, 0x1f, 0xa6, 0x8f, 0x18, 0xb7, 0x22, 0xdb, 0x47, 0xac, - 0x1e, 0x5c, 0xfa, 0xd0, 0xd3, 0x01, 0xb2, 0x59, 0xc8, 0x6e, 0x22, 0x06, 0xe3, 0xb3, 0x9b, 0x58, - 0x37, 0xa2, 0x03, 0x50, 0x38, 0xe1, 0x92, 0x03, 0x00, 0xfb, 0x49, 0x96, 0xc1 }; -unsigned int dino_salto_aseprite_len = 2934; - +/// test multiple frames but only one layer and only one animation/tag. TEST_CASE("parse dino aseprite file", "[dino]") { AsepriteData const ase { "assets/test/unit/dino_salto.aseprite" }; From dfa5c48a5658ba7c993ce33085c9fdd33367444e Mon Sep 17 00:00:00 2001 From: Simon Weis Date: Tue, 10 Oct 2023 14:52:36 +0200 Subject: [PATCH 2/3] remove git lfs from test verification --- .github/workflows/test_verification.yml | 5 ----- 1 file changed, 5 deletions(-) diff --git a/.github/workflows/test_verification.yml b/.github/workflows/test_verification.yml index 6c914b4..cb3d252 100644 --- a/.github/workflows/test_verification.yml +++ b/.github/workflows/test_verification.yml @@ -25,11 +25,6 @@ jobs: platform: x64 - uses: actions/checkout@v2 - with: - lfs: 'true' - - - name: gitlfs - run: git lfs pull - name: ccache uses: hendrikmuhs/ccache-action@v1 From 8e95cdfdd2837b2f6abd1dd5a8411756afd9e23f Mon Sep 17 00:00:00 2001 From: Simon Weis Date: Tue, 10 Oct 2023 14:52:43 +0200 Subject: [PATCH 3/3] Add readme --- readme.md | 58 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 58 insertions(+) create mode 100644 readme.md diff --git a/readme.md b/readme.md new file mode 100644 index 0000000..234cdc7 --- /dev/null +++ b/readme.md @@ -0,0 +1,58 @@ +This is a c++17 library to parse `*.aseprite` files. Please check out and +support [this awesome pixelart program](https://www.aseprite.org/)! + +# Limitations + +* No support for grayscale or indexed image types. Only RGBA files are supported. + * Grayscale and indexed files will not parse. +* Only "Normal" Blend Mode is supported. + * Blend mode is effectively ignored. +* No support of user data properties. + * Files with user data properties will not prase. + +# Dependencies + +* zlib (for cel chunk decompression) +* catch2 (for testing only) + +All dependencies are obtained via cmake. + +# How to use this library + +## CMake + +CMake integration into your own project is done via `FetchContent`. + +include in your `CMakeLists.txt` + +```cmake +include(FetchContent) +message(STATUS "Fetching aselib") +FetchContent_Declare( + aselib + GIT_REPOSITORY https://github.com/Laguna1989/aseprite_lib.git + GIT_TAG master +) + +set(ASE_LIB_ENABLE_UNIT_TESTS OFF) +FetchContent_MakeAvailable(aselib) + +## .... Adding your own library and executable projects + +FetchContent_GetProperties(aselib) +target_link_libraries(MyTarget aselib) +``` + +## Build and run tests locally (on linux) + +```shell +git clone https://github.com/Laguna1989/aselib.git +cd aselib +mkdir build +cd build +cmake .. +cmake --build . + +cd test/unit_test +./aselib_test +```