Start of cache system.
This commit is contained in:
parent
114dd36513
commit
26938e5aaf
46 changed files with 1517 additions and 869 deletions
2
.gitignore
vendored
2
.gitignore
vendored
|
@ -8,6 +8,8 @@ obj/
|
||||||
retired/
|
retired/
|
||||||
test/
|
test/
|
||||||
|
|
||||||
|
*/out/
|
||||||
|
|
||||||
kanga.world/kirby/
|
kanga.world/kirby/
|
||||||
kanga.world/.htaccess
|
kanga.world/.htaccess
|
||||||
kanga.world/README.md
|
kanga.world/README.md
|
||||||
|
|
5
LICENSE
5
LICENSE
|
@ -52,6 +52,11 @@ SDL2
|
||||||
https://www.libsdl.org/
|
https://www.libsdl.org/
|
||||||
BSD 3-Clause
|
BSD 3-Clause
|
||||||
|
|
||||||
|
SHA256
|
||||||
|
------
|
||||||
|
https://github.com/ilvn/SHA256
|
||||||
|
MIT
|
||||||
|
|
||||||
stb_ds.h
|
stb_ds.h
|
||||||
--------
|
--------
|
||||||
https://github.com/nothings/stb
|
https://github.com/nothings/stb
|
||||||
|
|
|
@ -71,28 +71,29 @@ HEADERS = \
|
||||||
$$SHARED/packets.h \
|
$$SHARED/packets.h \
|
||||||
src/config.h \
|
src/config.h \
|
||||||
$$SHARED/util.h \
|
$$SHARED/util.h \
|
||||||
src/embedded/embedded.h \
|
|
||||||
src/gui/msgbox.h \
|
src/gui/msgbox.h \
|
||||||
src/gui/timer.h \
|
src/gui/timer.h \
|
||||||
src/hangup.h \
|
src/hangup.h \
|
||||||
src/login.h \
|
src/login.h \
|
||||||
src/menu.h \
|
src/menu.h \
|
||||||
src/network.h \
|
|
||||||
src/runtime.h \
|
src/runtime.h \
|
||||||
src/signup.h \
|
src/signup.h \
|
||||||
|
src/system/cache.h \
|
||||||
|
src/thirdparty/SHA256/sha256.h \
|
||||||
src/thirdparty/minicoro/minicoro.h \
|
src/thirdparty/minicoro/minicoro.h \
|
||||||
src/system/comport.h \
|
src/system/comport.h \
|
||||||
src/settings.h \
|
src/settings.h \
|
||||||
src/system/color.h \
|
src/system/color.h \
|
||||||
$$SHARED/memory.h \
|
$$SHARED/memory.h \
|
||||||
src/system/surface.h \
|
src/system/surface.h \
|
||||||
src/system/taglist.h \
|
src/gui/taglist.h \
|
||||||
src/system/keyboard.h \
|
src/system/keyboard.h \
|
||||||
$$SHARED/array.h \
|
$$SHARED/array.h \
|
||||||
$$SHARED/log.h \
|
$$SHARED/log.h \
|
||||||
src/system/mouse.h \
|
src/system/mouse.h \
|
||||||
src/system/vesa.h \
|
src/system/vesa.h \
|
||||||
src/system/os.h \
|
src/system/os.h \
|
||||||
|
src/system/network.h \
|
||||||
src/embedded/vga8x14.h \
|
src/embedded/vga8x14.h \
|
||||||
src/embedded/mouse.h \
|
src/embedded/mouse.h \
|
||||||
src/gui/listbox.h \
|
src/gui/listbox.h \
|
||||||
|
@ -122,14 +123,15 @@ SOURCES = \
|
||||||
$$SHARED/thirdparty/tiny-AES-c/aes.c \
|
$$SHARED/thirdparty/tiny-AES-c/aes.c \
|
||||||
$$SHARED/thirdparty/tiny-AES128-C/pkcs7_padding.c \
|
$$SHARED/thirdparty/tiny-AES128-C/pkcs7_padding.c \
|
||||||
$$SHARED/memory.c \
|
$$SHARED/memory.c \
|
||||||
src/embedded/embedded.c \
|
|
||||||
src/gui/msgbox.c \
|
src/gui/msgbox.c \
|
||||||
src/gui/timer.c \
|
src/gui/timer.c \
|
||||||
src/hangup.c \
|
src/hangup.c \
|
||||||
|
src/system/cache.c \
|
||||||
src/system/comport.c \
|
src/system/comport.c \
|
||||||
src/system/os.c \
|
src/system/os.c \
|
||||||
src/system/surface.c \
|
src/system/surface.c \
|
||||||
src/system/taglist.c \
|
src/system/network.c \
|
||||||
|
src/gui/taglist.c \
|
||||||
$$SHARED/util.c \
|
$$SHARED/util.c \
|
||||||
$$SHARED/array.c \
|
$$SHARED/array.c \
|
||||||
$$SHARED/log.c \
|
$$SHARED/log.c \
|
||||||
|
@ -151,11 +153,11 @@ SOURCES = \
|
||||||
src/gui/label.c \
|
src/gui/label.c \
|
||||||
src/config.c \
|
src/config.c \
|
||||||
src/main.c \
|
src/main.c \
|
||||||
|
src/thirdparty/SHA256/sha256.c \
|
||||||
src/welcome.c \
|
src/welcome.c \
|
||||||
src/login.c \
|
src/login.c \
|
||||||
src/menu.c \
|
src/menu.c \
|
||||||
src/signup.c \
|
src/signup.c \
|
||||||
src/network.c \
|
|
||||||
src/settings.c
|
src/settings.c
|
||||||
|
|
||||||
LIBS = \
|
LIBS = \
|
||||||
|
|
|
@ -22,5 +22,5 @@
|
||||||
SOURCE=$1
|
SOURCE=$1
|
||||||
TARGET=$2
|
TARGET=$2
|
||||||
|
|
||||||
mkdir -p ${TARGET}/data
|
#mkdir -p ${TARGET}/data
|
||||||
cp ${SOURCE}/data/* ${TARGET}/data/.
|
#cp ${SOURCE}/data/* ${TARGET}/data/.
|
||||||
|
|
|
@ -1,22 +0,0 @@
|
||||||
/*
|
|
||||||
* Kangaroo Punch MultiPlayer Game Server Mark II
|
|
||||||
* Copyright (C) 2020-2021 Scott Duensing
|
|
||||||
*
|
|
||||||
* This program is free software: you can redistribute it and/or modify
|
|
||||||
* it under the terms of the GNU General Public License as published by
|
|
||||||
* the Free Software Foundation, either version 3 of the License, or
|
|
||||||
* (at your option) any later version.
|
|
||||||
*
|
|
||||||
* This program is distributed in the hope that it will be useful,
|
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
* GNU General Public License for more details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU General Public License
|
|
||||||
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
|
|
||||||
|
|
||||||
#define EMBED_HERE
|
|
||||||
#include "embedded/embedded.h"
|
|
|
@ -1,457 +0,0 @@
|
||||||
/*
|
|
||||||
* Kangaroo Punch MultiPlayer Game Server Mark II
|
|
||||||
* Copyright (C) 2020-2021 Scott Duensing
|
|
||||||
*
|
|
||||||
* This program is free software: you can redistribute it and/or modify
|
|
||||||
* it under the terms of the GNU General Public License as published by
|
|
||||||
* the Free Software Foundation, either version 3 of the License, or
|
|
||||||
* (at your option) any later version.
|
|
||||||
*
|
|
||||||
* This program is distributed in the hope that it will be useful,
|
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
* GNU General Public License for more details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU General Public License
|
|
||||||
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
|
|
||||||
|
|
||||||
#ifndef MOUSE_PNG_H
|
|
||||||
#define MOUSE_PNG_H
|
|
||||||
|
|
||||||
|
|
||||||
// ===== THIS FILE IS AUTOMATICALLY GENERATED - DO NOT EDIT =====
|
|
||||||
|
|
||||||
|
|
||||||
#pragma GCC diagnostic push
|
|
||||||
#pragma GCC diagnostic ignored "-Wunused-variable"
|
|
||||||
|
|
||||||
#ifdef EMBED_HERE
|
|
||||||
|
|
||||||
unsigned char mouse_png[] = {
|
|
||||||
0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x00, 0x00, 0x0d,
|
|
||||||
0x49, 0x48, 0x44, 0x52, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x18,
|
|
||||||
0x08, 0x06, 0x00, 0x00, 0x00, 0xf3, 0xa0, 0x7d, 0x0c, 0x00, 0x00, 0x10,
|
|
||||||
0x66, 0x7a, 0x54, 0x58, 0x74, 0x52, 0x61, 0x77, 0x20, 0x70, 0x72, 0x6f,
|
|
||||||
0x66, 0x69, 0x6c, 0x65, 0x20, 0x74, 0x79, 0x70, 0x65, 0x20, 0x65, 0x78,
|
|
||||||
0x69, 0x66, 0x00, 0x00, 0x78, 0xda, 0xc5, 0x9a, 0x5b, 0x76, 0x1b, 0x39,
|
|
||||||
0x12, 0x44, 0xff, 0xb1, 0x8a, 0x59, 0x02, 0xde, 0x8f, 0xe5, 0xe0, 0x91,
|
|
||||||
0x38, 0xa7, 0x77, 0x30, 0xcb, 0x9f, 0x9b, 0xa8, 0x22, 0x2d, 0xca, 0x94,
|
|
||||||
0x65, 0xbb, 0x3f, 0xc6, 0x6c, 0x89, 0xa5, 0x62, 0x15, 0x0a, 0xc8, 0x8c,
|
|
||||||
0x8c, 0xc8, 0x00, 0xdb, 0xc8, 0x7f, 0xff, 0xd9, 0xe6, 0x3f, 0xfc, 0x4b,
|
|
||||||
0xd6, 0x66, 0x13, 0x53, 0xa9, 0xb9, 0xe5, 0x6c, 0xf9, 0x17, 0x5b, 0x6c,
|
|
||||||
0xbe, 0x73, 0x50, 0xed, 0xf5, 0xaf, 0x9f, 0xdf, 0xce, 0xc6, 0xf3, 0xfb,
|
|
||||||
0xfe, 0xc3, 0x3e, 0x0e, 0x5e, 0xce, 0x1b, 0xf7, 0xb8, 0xc9, 0x73, 0x2a,
|
|
||||||
0xf0, 0x1e, 0xae, 0x3f, 0x6b, 0xbe, 0xcf, 0x0b, 0xe7, 0x3d, 0xd7, 0xfb,
|
|
||||||
0xfb, 0xfc, 0xbc, 0xc7, 0xe9, 0x9c, 0x4f, 0x1f, 0x06, 0x6a, 0x72, 0x7f,
|
|
||||||
0x30, 0x5e, 0x3f, 0xe8, 0xf7, 0x40, 0xbe, 0xde, 0x0f, 0x78, 0x4c, 0xe5,
|
|
||||||
0x7e, 0x50, 0x70, 0xd7, 0x03, 0xec, 0xba, 0x07, 0xea, 0xf7, 0x40, 0xc1,
|
|
||||||
0xdf, 0x4f, 0x8e, 0xd7, 0xdf, 0xe3, 0x7e, 0x72, 0x6e, 0xb5, 0x7c, 0x5c,
|
|
||||||
0xc2, 0x7a, 0x2c, 0xad, 0xde, 0x67, 0xea, 0xf5, 0x63, 0xf4, 0x57, 0x0c,
|
|
||||||
0xc5, 0xe7, 0x94, 0x5d, 0x89, 0xfc, 0x8e, 0xde, 0x96, 0x92, 0x1b, 0xc7,
|
|
||||||
0xd5, 0xdb, 0x58, 0x88, 0xdb, 0xd2, 0x89, 0xee, 0xe9, 0x9b, 0xde, 0x97,
|
|
||||||
0xc6, 0x35, 0xce, 0xe7, 0xbf, 0xcd, 0xe3, 0x52, 0xcf, 0x9c, 0xbc, 0x04,
|
|
||||||
0x17, 0xec, 0xf9, 0x5d, 0xaf, 0x59, 0x06, 0xfd, 0x71, 0xa1, 0xeb, 0xf9,
|
|
||||||
0xf3, 0x9b, 0x50, 0xe9, 0xa7, 0x1c, 0x87, 0x73, 0x26, 0x84, 0x72, 0xe2,
|
|
||||||
0x6b, 0x0d, 0x29, 0x63, 0x0a, 0xcc, 0xbc, 0xdd, 0xb1, 0x15, 0xfb, 0x8c,
|
|
||||||
0xe6, 0x4b, 0x6c, 0x9e, 0xe9, 0x7a, 0xff, 0xcf, 0xfc, 0xce, 0xb2, 0x6e,
|
|
||||||
0x38, 0xbc, 0xa4, 0xbb, 0xf7, 0x57, 0x18, 0x98, 0x0f, 0x4f, 0x72, 0xef,
|
|
||||||
0x60, 0x90, 0xe5, 0x3e, 0x1f, 0x3e, 0x65, 0x2f, 0x3f, 0xdf, 0xcf, 0x79,
|
|
||||||
0xf3, 0xf9, 0x03, 0x97, 0xde, 0xa7, 0xfb, 0xe4, 0xf4, 0xc3, 0x8c, 0x4a,
|
|
||||||
0x7c, 0x3e, 0xd8, 0xbf, 0xcc, 0xc8, 0xc5, 0x07, 0xe4, 0x9e, 0xe9, 0x7d,
|
|
||||||
0xfe, 0xec, 0xbd, 0xea, 0xde, 0x72, 0xad, 0xae, 0xc7, 0xcc, 0x92, 0xf3,
|
|
||||||
0xbd, 0xa8, 0xc7, 0x4a, 0x9c, 0x39, 0xa9, 0xdc, 0x6b, 0x28, 0x08, 0xce,
|
|
||||||
0x6d, 0x99, 0x57, 0xe1, 0x27, 0x71, 0x5c, 0xce, 0xab, 0xf1, 0xaa, 0x94,
|
|
||||||
0xcb, 0x04, 0x63, 0xcb, 0x4e, 0x3b, 0x78, 0x4d, 0xd7, 0x9c, 0x27, 0x95,
|
|
||||||
0x9b, 0x09, 0x2c, 0xd7, 0xdd, 0x36, 0x4e, 0xce, 0xc1, 0x74, 0x93, 0x39,
|
|
||||||
0x46, 0x2f, 0xbe, 0xf0, 0xee, 0xfd, 0x24, 0xeb, 0x7a, 0xae, 0x92, 0x8b,
|
|
||||||
0xe6, 0x67, 0xd0, 0xa4, 0x47, 0x7d, 0xb9, 0xed, 0x4b, 0x68, 0x61, 0x01,
|
|
||||||
0x01, 0x1f, 0x26, 0x50, 0x09, 0x9c, 0xf5, 0x7b, 0x9b, 0x7b, 0x2e, 0xee,
|
|
||||||
0x3c, 0xb7, 0x9d, 0xe7, 0x4d, 0xea, 0x6f, 0xd9, 0xe5, 0xb8, 0xd4, 0x3b,
|
|
||||||
0x06, 0x73, 0xdc, 0xf2, 0xed, 0xcb, 0xfc, 0xce, 0x45, 0xbf, 0x7a, 0xed,
|
|
||||||
0xad, 0xb5, 0xe4, 0x9c, 0x79, 0xd4, 0x0c, 0xb8, 0x60, 0x5e, 0x5e, 0x03,
|
|
||||||
0xce, 0x34, 0x34, 0x73, 0xfa, 0x9b, 0xcb, 0xc8, 0x88, 0xdb, 0x77, 0x50,
|
|
||||||
0xd3, 0x09, 0xf0, 0xe3, 0xf5, 0x0a, 0xc8, 0x3b, 0xb1, 0x81, 0x14, 0xa6,
|
|
||||||
0x13, 0xe6, 0xca, 0x02, 0xbb, 0x1d, 0xd7, 0x10, 0x23, 0xb9, 0x1f, 0xd8,
|
|
||||||
0x0a, 0x27, 0xd1, 0x81, 0xeb, 0x12, 0xef, 0x57, 0x71, 0xbb, 0xb2, 0xae,
|
|
||||||
0xfb, 0x75, 0xa0, 0xc8, 0xb3, 0x13, 0x93, 0xa1, 0x92, 0xa2, 0xb3, 0xd9,
|
|
||||||
0x85, 0xe4, 0xb2, 0xb3, 0xc5, 0xfb, 0xe2, 0x1c, 0x81, 0xac, 0x24, 0xa8,
|
|
||||||
0x3b, 0x5b, 0x7d, 0x88, 0x7e, 0x90, 0x01, 0x97, 0x92, 0x5f, 0x4c, 0xd2,
|
|
||||||
0xc7, 0x10, 0x32, 0xb9, 0xa1, 0x08, 0x78, 0xb4, 0xe1, 0x9e, 0xe2, 0xce,
|
|
||||||
0xb5, 0x3e, 0xf9, 0xeb, 0x3c, 0x2c, 0x49, 0x26, 0x52, 0xc8, 0xa1, 0x90,
|
|
||||||
0x9b, 0x16, 0x3a, 0xc9, 0x8a, 0x31, 0x81, 0x9f, 0x12, 0x2b, 0x18, 0xea,
|
|
||||||
0x29, 0xa4, 0x98, 0x52, 0xca, 0xa9, 0xa4, 0x9a, 0x5a, 0xea, 0x39, 0xe4,
|
|
||||||
0x68, 0xa8, 0xb0, 0x9c, 0x4b, 0x56, 0xba, 0xed, 0x25, 0x94, 0x58, 0x52,
|
|
||||||
0xc9, 0xa5, 0x94, 0x5a, 0x5a, 0xe9, 0x35, 0xd4, 0x58, 0x53, 0xcd, 0xb5,
|
|
||||||
0xd4, 0x5a, 0x5b, 0xed, 0xcd, 0xb7, 0x00, 0x1b, 0xa7, 0x46, 0x39, 0xb6,
|
|
||||||
0xda, 0x5a, 0xeb, 0x9d, 0x67, 0x76, 0x46, 0xee, 0xd9, 0x74, 0xae, 0xef,
|
|
||||||
0x9c, 0x19, 0x7e, 0x84, 0x11, 0x47, 0x1a, 0x79, 0x94, 0x51, 0x47, 0x1b,
|
|
||||||
0x7d, 0x02, 0x9f, 0x19, 0x67, 0x9a, 0x79, 0x96, 0x59, 0x67, 0x9b, 0x7d,
|
|
||||||
0xf9, 0x15, 0x16, 0x75, 0xbc, 0xf2, 0x2a, 0xab, 0xae, 0xb6, 0xba, 0x38,
|
|
||||||
0x01, 0x4a, 0x12, 0x25, 0x19, 0xc9, 0x52, 0xa4, 0x4a, 0x93, 0xbe, 0xc1,
|
|
||||||
0xda, 0x0e, 0x3b, 0xee, 0xb4, 0xf3, 0x2e, 0xbb, 0xee, 0xb6, 0xfb, 0x33,
|
|
||||||
0x6b, 0xee, 0x2e, 0xdb, 0xcf, 0xaf, 0x3f, 0xc8, 0x9a, 0xbb, 0xb3, 0xe6,
|
|
||||||
0x4f, 0xa6, 0xf4, 0xba, 0xf2, 0xcc, 0x1a, 0x67, 0x4b, 0xb9, 0xde, 0xcd,
|
|
||||||
0xc1, 0x0b, 0x83, 0x68, 0xce, 0xc8, 0x98, 0x8f, 0x8e, 0x8c, 0x17, 0xcd,
|
|
||||||
0x00, 0x80, 0xf6, 0x9a, 0x33, 0x5b, 0x5d, 0x8c, 0x5e, 0x33, 0xa7, 0x39,
|
|
||||||
0xb3, 0xcd, 0x53, 0x15, 0xc9, 0x33, 0xc9, 0xa4, 0xb9, 0x59, 0xce, 0x76,
|
|
||||||
0x97, 0x7d, 0x34, 0x21, 0x8a, 0xf3, 0x69, 0xbb, 0x67, 0xee, 0x7e, 0x64,
|
|
||||||
0xee, 0x8f, 0xf2, 0x66, 0x72, 0xfc, 0x65, 0xde, 0xfc, 0xef, 0x66, 0xce,
|
|
||||||
0x68, 0xea, 0xfe, 0x65, 0xe6, 0x4e, 0xde, 0x8c, 0xa4, 0x0f, 0x79, 0x7b,
|
|
||||||
0x93, 0xb5, 0xa5, 0xdc, 0x3c, 0x4f, 0xc6, 0xae, 0x2a, 0xd4, 0x98, 0xda,
|
|
||||||
0x40, 0xf5, 0xf1, 0xb9, 0xf0, 0xd8, 0xb8, 0xf5, 0xb8, 0x9a, 0x5d, 0xf2,
|
|
||||||
0xde, 0x65, 0xec, 0x6e, 0xfb, 0x5c, 0xbd, 0x89, 0x1b, 0xbd, 0x10, 0xe0,
|
|
||||||
0xde, 0x6b, 0x02, 0xfa, 0x73, 0x87, 0x24, 0x33, 0xc7, 0x54, 0x57, 0x4f,
|
|
||||||
0xd5, 0xcf, 0xd4, 0xfb, 0xd2, 0x09, 0x13, 0xef, 0x3e, 0x1c, 0xc1, 0x5c,
|
|
||||||
0x84, 0x75, 0x11, 0xae, 0x68, 0x58, 0x48, 0x2f, 0x4d, 0x92, 0xef, 0x4a,
|
|
||||||
0x80, 0x76, 0x34, 0xf1, 0x7d, 0xad, 0x22, 0x6d, 0x71, 0x5f, 0x5e, 0xe7,
|
|
||||||
0x67, 0xe7, 0x15, 0x4b, 0x0e, 0xb5, 0x27, 0x52, 0x52, 0x72, 0x76, 0x31,
|
|
||||||
0xf1, 0x5f, 0x49, 0xcd, 0x5f, 0x47, 0x4a, 0xd4, 0xe6, 0x71, 0xf0, 0x67,
|
|
||||||
0xef, 0xd9, 0xe9, 0xbb, 0x4b, 0xbb, 0x16, 0x27, 0x0d, 0xc2, 0xec, 0x66,
|
|
||||||
0xce, 0x01, 0xa1, 0xa7, 0x56, 0xe1, 0xfe, 0x2e, 0x3c, 0x75, 0x14, 0xe2,
|
|
||||||
0x02, 0x1a, 0x76, 0x49, 0xba, 0x7a, 0xef, 0xb6, 0x84, 0xd4, 0x06, 0x33,
|
|
||||||
0x18, 0x8e, 0x49, 0x6e, 0xe6, 0x54, 0x7d, 0xd7, 0x05, 0xd7, 0x91, 0xf2,
|
|
||||||
0x86, 0x02, 0x5a, 0xf2, 0x75, 0x9a, 0xb6, 0x56, 0x1b, 0xe3, 0x9a, 0xab,
|
|
||||||
0x0c, 0x0f, 0x4e, 0xcf, 0xb3, 0xe2, 0x9f, 0xbe, 0x9b, 0xe7, 0x09, 0x57,
|
|
||||||
0x53, 0x22, 0x65, 0x5b, 0xa6, 0x84, 0xbd, 0x7d, 0x24, 0xcc, 0xc8, 0xcb,
|
|
||||||
0x20, 0x07, 0x4d, 0x67, 0x06, 0x5a, 0x7c, 0xdf, 0xad, 0xfa, 0x21, 0xe7,
|
|
||||||
0xef, 0xd5, 0x66, 0xd9, 0x12, 0x9b, 0x64, 0x24, 0x84, 0xbf, 0x0d, 0xab,
|
|
||||||
0x6d, 0xdc, 0x18, 0x15, 0xa9, 0xd7, 0x8a, 0x6b, 0x91, 0xe5, 0xd6, 0x59,
|
|
||||||
0x16, 0xa3, 0x31, 0x34, 0x47, 0x3a, 0x5e, 0xd9, 0x9b, 0xb1, 0xd2, 0x3d,
|
|
||||||
0x9a, 0x94, 0xed, 0x7c, 0xa9, 0x69, 0xc4, 0xbc, 0x49, 0x40, 0x33, 0xdc,
|
|
||||||
0x53, 0xf3, 0x68, 0xb9, 0xec, 0x3c, 0x46, 0xaa, 0x92, 0x28, 0x31, 0xd2,
|
|
||||||
0x08, 0x17, 0x88, 0x9b, 0x5a, 0xad, 0x13, 0x76, 0x2c, 0x34, 0x22, 0x7b,
|
|
||||||
0xca, 0x68, 0x0c, 0x06, 0x2c, 0xd2, 0xb6, 0x00, 0x4e, 0x6a, 0x12, 0x7d,
|
|
||||||
0xc8, 0x6c, 0x6b, 0xd4, 0x6d, 0x08, 0x65, 0x63, 0x5d, 0xdb, 0xdb, 0x94,
|
|
||||||
0x47, 0x62, 0xd6, 0xb3, 0x74, 0x5f, 0x58, 0x1d, 0xf7, 0xf9, 0xdc, 0x53,
|
|
||||||
0x1c, 0x54, 0x41, 0x88, 0x00, 0x8b, 0x21, 0xdc, 0x52, 0xe5, 0x2c, 0x5c,
|
|
||||||
0x67, 0x25, 0xf3, 0x91, 0x87, 0x22, 0xa6, 0x42, 0x2b, 0x2e, 0x88, 0xcd,
|
|
||||||
0x65, 0xf0, 0x59, 0x4a, 0xdc, 0x7d, 0xa4, 0x55, 0xa7, 0x00, 0xa8, 0xb9,
|
|
||||||
0x52, 0xa3, 0xd6, 0x59, 0xad, 0xa3, 0x68, 0x6a, 0xcb, 0x64, 0xb5, 0x8f,
|
|
||||||
0x41, 0x5d, 0xae, 0xb9, 0xe1, 0x87, 0xd2, 0xc7, 0x8e, 0x7d, 0x0e, 0x28,
|
|
||||||
0x2c, 0x6e, 0x07, 0xc8, 0xd6, 0x30, 0xc9, 0x47, 0xca, 0x87, 0x21, 0x98,
|
|
||||||
0x65, 0x9e, 0xe2, 0x1b, 0x85, 0x95, 0x56, 0xab, 0x17, 0x4e, 0x56, 0x8f,
|
|
||||||
0xf5, 0xff, 0x9f, 0xb5, 0x26, 0xf3, 0x01, 0xe0, 0x32, 0xa7, 0x5e, 0xc5,
|
|
||||||
0xd0, 0x42, 0xbf, 0xa0, 0xc3, 0xd9, 0x06, 0xa1, 0xe8, 0x11, 0xa3, 0x64,
|
|
||||||
0x7d, 0x07, 0xad, 0x94, 0xfd, 0x16, 0xe3, 0xdb, 0xb6, 0x6b, 0x49, 0xa9,
|
|
||||||
0xb1, 0xcc, 0x08, 0x0d, 0x75, 0x32, 0x3f, 0x1b, 0xbd, 0x7b, 0x21, 0xf8,
|
|
||||||
0x23, 0x14, 0xba, 0xdb, 0x19, 0x39, 0x39, 0x2b, 0xb8, 0xb7, 0xb1, 0x6a,
|
|
||||||
0x06, 0xad, 0xac, 0xb4, 0x4b, 0x58, 0x30, 0x8b, 0xdb, 0x6e, 0xe8, 0xcc,
|
|
||||||
0xba, 0xd1, 0xac, 0xeb, 0xc8, 0xf9, 0xa4, 0x72, 0x77, 0x0d, 0x1e, 0xcf,
|
|
||||||
0xb3, 0x8b, 0x12, 0xf7, 0xd3, 0x79, 0x35, 0x05, 0x91, 0x05, 0x55, 0x2d,
|
|
||||||
0xe6, 0xbd, 0x73, 0x8d, 0x69, 0x53, 0xd4, 0x7b, 0x32, 0xb1, 0xba, 0x72,
|
|
||||||
0x5e, 0x4e, 0xab, 0xc5, 0x0e, 0x13, 0xd6, 0x4c, 0x62, 0x7b, 0xa3, 0x92,
|
|
||||||
0xba, 0x87, 0x22, 0x68, 0x80, 0x24, 0xc5, 0x1e, 0x60, 0xf5, 0x9c, 0x41,
|
|
||||||
0xe6, 0x29, 0x4d, 0xe2, 0x34, 0xbf, 0x29, 0x64, 0xf3, 0xb6, 0xb2, 0xcb,
|
|
||||||
0x0a, 0x07, 0xcf, 0x81, 0x46, 0x6d, 0xb6, 0x30, 0x57, 0x04, 0x7f, 0xd3,
|
|
||||||
0x53, 0x8a, 0xc0, 0x10, 0x36, 0x1d, 0x92, 0x6d, 0xdf, 0x9d, 0x60, 0xe5,
|
|
||||||
0x72, 0x42, 0xdd, 0xbc, 0x01, 0xc4, 0x4c, 0x72, 0x55, 0x5a, 0x5a, 0xe8,
|
|
||||||
0x10, 0x76, 0xa0, 0x76, 0x1d, 0xa0, 0xcc, 0x65, 0x7c, 0x4e, 0xb4, 0x93,
|
|
||||||
0x6b, 0x78, 0x42, 0x79, 0x0d, 0x1f, 0xf6, 0x19, 0xfe, 0xca, 0x1a, 0x4f,
|
|
||||||
0x68, 0xf9, 0x7a, 0xc2, 0x68, 0x00, 0x15, 0x8e, 0x64, 0xdd, 0x03, 0x2c,
|
|
||||||
0x75, 0x74, 0x20, 0xbb, 0x2e, 0xc0, 0x1d, 0x62, 0x5e, 0x99, 0x0a, 0x00,
|
|
||||||
0xc6, 0xe4, 0x7b, 0x4c, 0x94, 0x41, 0xbb, 0x44, 0x18, 0x32, 0x3a, 0xa9,
|
|
||||||
0xe0, 0x20, 0x74, 0x38, 0xfb, 0x24, 0xd1, 0x91, 0x26, 0x78, 0xfe, 0xa4,
|
|
||||||
0xd8, 0x95, 0x13, 0x7e, 0x5f, 0xb2, 0x4e, 0x81, 0xf2, 0x53, 0x1c, 0x54,
|
|
||||||
0x97, 0xfa, 0xa2, 0x22, 0xa9, 0xc1, 0xda, 0x20, 0x74, 0xee, 0x9d, 0xad,
|
|
||||||
0x43, 0x45, 0x92, 0x73, 0x5d, 0x08, 0x24, 0xeb, 0x75, 0xa8, 0x15, 0xa2,
|
|
||||||
0x96, 0x78, 0x6a, 0x0c, 0x8d, 0xcf, 0x14, 0xfb, 0x94, 0xee, 0x48, 0x28,
|
|
||||||
0x1b, 0x48, 0x57, 0xe5, 0x58, 0x2b, 0x48, 0x5f, 0xf0, 0x2d, 0x5c, 0x6d,
|
|
||||||
0x4b, 0x20, 0x10, 0x79, 0x12, 0x06, 0x7e, 0x8b, 0x78, 0xb4, 0x29, 0x1b,
|
|
||||||
0xcf, 0xac, 0xa9, 0x2b, 0x50, 0x61, 0x41, 0x56, 0xdf, 0xcb, 0x6b, 0x29,
|
|
||||||
0x12, 0xed, 0x59, 0x92, 0x53, 0xb2, 0x6e, 0x21, 0x0e, 0xa4, 0x87, 0xb0,
|
|
||||||
0x50, 0x77, 0x95, 0xd2, 0xfc, 0x48, 0xdb, 0xf9, 0x49, 0xdb, 0xe6, 0x57,
|
|
||||||
0xb4, 0x7c, 0x92, 0x77, 0x52, 0xa7, 0x64, 0xf1, 0xab, 0xe4, 0x69, 0x89,
|
|
||||||
0x68, 0xfe, 0x9a, 0x7f, 0x49, 0x1e, 0x95, 0xf4, 0xcb, 0xf4, 0x3d, 0xd3,
|
|
||||||
0xb8, 0x03, 0xa5, 0x32, 0x03, 0x8f, 0xaa, 0x66, 0x2a, 0x43, 0xf9, 0xa4,
|
|
||||||
0x95, 0x77, 0x58, 0xb1, 0x9d, 0x40, 0xd7, 0x95, 0x0a, 0x47, 0xac, 0x64,
|
|
||||||
0x86, 0x82, 0x5a, 0x39, 0x4a, 0xc1, 0x51, 0x49, 0x95, 0x25, 0xd2, 0x67,
|
|
||||||
0xf8, 0xb4, 0x52, 0x97, 0xb9, 0x64, 0xa3, 0x97, 0x9e, 0x93, 0xde, 0x9b,
|
|
||||||
0x51, 0xa9, 0x03, 0xab, 0x49, 0x0c, 0x83, 0xb5, 0x4c, 0x74, 0x16, 0x8b,
|
|
||||||
0x84, 0x9a, 0xe9, 0x3c, 0x07, 0x79, 0x57, 0x5b, 0x70, 0x06, 0x17, 0x16,
|
|
||||||
0xa7, 0x0e, 0x64, 0x86, 0xd4, 0x7f, 0xd6, 0x1e, 0xf3, 0x77, 0xe2, 0xf3,
|
|
||||||
0xb3, 0xf6, 0x98, 0x6f, 0x68, 0xeb, 0xb7, 0x59, 0xca, 0xbc, 0xa7, 0xa9,
|
|
||||||
0x5f, 0xb2, 0xd4, 0xdb, 0x77, 0xa3, 0xb0, 0x55, 0x0f, 0x75, 0x14, 0xe8,
|
|
||||||
0xd6, 0x1f, 0xe8, 0xe4, 0xd6, 0x9f, 0xf3, 0xcc, 0xaf, 0x14, 0xe8, 0x45,
|
|
||||||
0x80, 0xcc, 0xef, 0x28, 0x10, 0x59, 0x7c, 0xd5, 0xa0, 0x4b, 0x81, 0x0e,
|
|
||||||
0x3f, 0x3e, 0x24, 0xc8, 0x5c, 0x1a, 0x04, 0xe0, 0xfe, 0x4e, 0x85, 0x9e,
|
|
||||||
0x22, 0x64, 0xfe, 0xa5, 0x0a, 0x3d, 0x45, 0xc8, 0xe8, 0x6c, 0x7e, 0x4f,
|
|
||||||
0x87, 0x1e, 0x09, 0x64, 0x41, 0xf3, 0x62, 0xa6, 0x47, 0x12, 0x55, 0xd2,
|
|
||||||
0xcd, 0xc9, 0xe3, 0xab, 0xd6, 0xbc, 0xa6, 0xf0, 0x4e, 0x20, 0xde, 0xe7,
|
|
||||||
0x97, 0x29, 0x34, 0x5f, 0xe5, 0xf4, 0x56, 0x22, 0xfb, 0xd4, 0xa2, 0x87,
|
|
||||||
0x12, 0x5d, 0x3a, 0xf4, 0x50, 0xa1, 0xa7, 0x08, 0x99, 0xbf, 0x52, 0x21,
|
|
||||||
0xd8, 0x95, 0x62, 0x98, 0x64, 0x87, 0x10, 0x45, 0x1d, 0x2e, 0x1b, 0x6e,
|
|
||||||
0x6a, 0x99, 0xbc, 0xef, 0x95, 0xb2, 0x28, 0xb5, 0x6d, 0x8f, 0x69, 0x82,
|
|
||||||
0x9c, 0x74, 0x53, 0x8a, 0x43, 0x6f, 0x29, 0x46, 0xcc, 0x31, 0x0e, 0x17,
|
|
||||||
0x63, 0x56, 0xb9, 0xbb, 0xda, 0x30, 0x07, 0x6c, 0x99, 0xe9, 0x4e, 0x21,
|
|
||||||
0xc1, 0x89, 0xe5, 0x48, 0xc5, 0x99, 0x99, 0xd2, 0x8c, 0x03, 0xfa, 0x5c,
|
|
||||||
0x64, 0x93, 0x18, 0x45, 0x02, 0x14, 0x5d, 0x1c, 0x08, 0x14, 0x68, 0x83,
|
|
||||||
0x35, 0xe9, 0x5a, 0x17, 0x9c, 0x4b, 0xaa, 0x71, 0x84, 0x30, 0x3d, 0xfe,
|
|
||||||
0x60, 0xe2, 0xc2, 0x75, 0xea, 0x20, 0x8f, 0xb9, 0x4c, 0xdd, 0x92, 0x49,
|
|
||||||
0x06, 0x4b, 0x8b, 0x66, 0x61, 0x16, 0xa9, 0xcb, 0x11, 0x3a, 0xd5, 0x4c,
|
|
||||||
0x66, 0x9b, 0x96, 0x21, 0x4b, 0x01, 0xca, 0x7d, 0x43, 0x12, 0x73, 0xca,
|
|
||||||
0x76, 0x98, 0x85, 0xc4, 0xdc, 0x56, 0x50, 0x34, 0x2b, 0x25, 0x8c, 0x05,
|
|
||||||
0x9a, 0x4a, 0x94, 0x80, 0x1e, 0x36, 0xda, 0x63, 0xb2, 0x51, 0xa4, 0xcc,
|
|
||||||
0x53, 0xfd, 0x61, 0x25, 0xd0, 0xbb, 0xbb, 0xa3, 0x6d, 0xcf, 0x76, 0x82,
|
|
||||||
0x78, 0x7c, 0xaa, 0x74, 0x0f, 0x7e, 0x00, 0xe6, 0xb1, 0x18, 0x68, 0x2d,
|
|
||||||
0x59, 0x8c, 0x10, 0x62, 0x6a, 0xd8, 0x99, 0xda, 0x7d, 0xa5, 0xd3, 0x8e,
|
|
||||||
0xe6, 0xdf, 0xc9, 0xe2, 0x0f, 0x62, 0x35, 0xdf, 0xca, 0xe2, 0x77, 0xef,
|
|
||||||
0xb7, 0x6c, 0x9a, 0xf7, 0xba, 0xf9, 0xe7, 0xb2, 0x69, 0xde, 0xeb, 0xe6,
|
|
||||||
0x3e, 0x4f, 0x71, 0xb9, 0x4c, 0x6f, 0x31, 0xe6, 0x19, 0x2c, 0x83, 0xbb,
|
|
||||||
0xe2, 0x79, 0xd4, 0x8e, 0x7e, 0x7b, 0x51, 0x91, 0x8b, 0x9b, 0x7a, 0x44,
|
|
||||||
0x4e, 0xf7, 0x48, 0x53, 0x4c, 0xc9, 0x98, 0x29, 0xc4, 0x2e, 0x8a, 0x1d,
|
|
||||||
0x62, 0x05, 0xbb, 0xb8, 0x32, 0x48, 0x91, 0x44, 0x08, 0x49, 0x23, 0x4a,
|
|
||||||
0xbb, 0x63, 0x44, 0xe8, 0x76, 0x03, 0x63, 0x2b, 0x82, 0x8a, 0x10, 0x62,
|
|
||||||
0x46, 0x4e, 0xa1, 0x15, 0x7c, 0x1a, 0xc6, 0xa9, 0x43, 0x47, 0x1e, 0x1c,
|
|
||||||
0x31, 0xaf, 0x4c, 0x09, 0xa1, 0xb0, 0x58, 0x1f, 0xd8, 0x5a, 0xfc, 0xc2,
|
|
||||||
0x02, 0x0a, 0x45, 0xa7, 0x18, 0x77, 0x6d, 0x25, 0x3c, 0x24, 0x56, 0x0e,
|
|
||||||
0x6c, 0xd6, 0xde, 0x03, 0x9e, 0xd0, 0x21, 0xc5, 0x81, 0xa8, 0xe6, 0x59,
|
|
||||||
0x17, 0x26, 0x08, 0x4e, 0xdf, 0xa9, 0x40, 0xb5, 0xa9, 0xc1, 0x43, 0xd8,
|
|
||||||
0xb5, 0xd0, 0xeb, 0x1e, 0xb9, 0xc7, 0xd6, 0xd5, 0x48, 0x8d, 0x2d, 0x4a,
|
|
||||||
0xc0, 0x29, 0x54, 0x2c, 0xe0, 0x08, 0x56, 0xb3, 0xec, 0xe1, 0xfb, 0xc6,
|
|
||||||
0xe1, 0xbb, 0xd2, 0x36, 0xaf, 0xb5, 0x1d, 0xec, 0xf7, 0x20, 0xd8, 0xf0,
|
|
||||||
0xe2, 0x0a, 0x01, 0x1b, 0x76, 0x30, 0xa4, 0x9b, 0xa7, 0xbc, 0x9b, 0xc7,
|
|
||||||
0xc1, 0xfd, 0x3e, 0x9c, 0x6c, 0x92, 0xa3, 0x06, 0x70, 0x05, 0xa2, 0x1a,
|
|
||||||
0x61, 0x38, 0x3a, 0x10, 0x9b, 0x5b, 0xc2, 0xc4, 0x26, 0x72, 0x8d, 0x64,
|
|
||||||
0x86, 0x25, 0xb3, 0xe0, 0x10, 0x25, 0x5a, 0xaf, 0x98, 0x15, 0x5c, 0xb3,
|
|
||||||
0x81, 0x9d, 0xb7, 0x6e, 0x39, 0x2e, 0x1d, 0xa5, 0x5d, 0xb6, 0x32, 0xca,
|
|
||||||
0x56, 0x0e, 0xd1, 0x79, 0x62, 0x20, 0xaf, 0x2e, 0xb6, 0x06, 0xa7, 0x07,
|
|
||||||
0x1a, 0xa6, 0x2d, 0x8e, 0xd1, 0xb9, 0x6f, 0x2f, 0xbb, 0x8a, 0x2e, 0x4c,
|
|
||||||
0xec, 0xa4, 0x3d, 0x3e, 0xb8, 0xf1, 0x9d, 0x54, 0x61, 0x47, 0xff, 0x7a,
|
|
||||||
0x30, 0xa3, 0xa3, 0x7d, 0x1a, 0x4c, 0x49, 0xd9, 0x4b, 0x1b, 0x54, 0x67,
|
|
||||||
0x10, 0x58, 0x17, 0x82, 0x1d, 0x83, 0x1a, 0xa3, 0xcf, 0x1a, 0x6b, 0xf8,
|
|
||||||
0xd6, 0x97, 0xd0, 0x37, 0xe9, 0x86, 0x05, 0x39, 0xb5, 0x58, 0x7a, 0x60,
|
|
||||||
0xd8, 0x0c, 0xce, 0x97, 0x1a, 0xed, 0xa7, 0x37, 0x69, 0x6b, 0x57, 0xc5,
|
|
||||||
0x37, 0xfc, 0xb1, 0xec, 0xbe, 0xd8, 0xfc, 0x6a, 0xd4, 0xa9, 0xfd, 0x78,
|
|
||||||
0x98, 0xac, 0xc8, 0xf5, 0x37, 0xb7, 0xa0, 0xdf, 0xa4, 0xc3, 0xd1, 0x34,
|
|
||||||
0x9c, 0x12, 0x81, 0x8f, 0x54, 0x22, 0x9f, 0xed, 0xc9, 0xdf, 0x76, 0x27,
|
|
||||||
0xe6, 0x73, 0x7b, 0xf2, 0xa9, 0x3b, 0x39, 0x32, 0xf8, 0xcd, 0x5c, 0xe9,
|
|
||||||
0x5f, 0x66, 0x61, 0x46, 0x7b, 0xd0, 0x95, 0xdd, 0xcc, 0x7b, 0x11, 0x6f,
|
|
||||||
0x29, 0x36, 0xad, 0x85, 0xbe, 0x90, 0x57, 0x3a, 0x4e, 0xa2, 0x11, 0x6b,
|
|
||||||
0x5d, 0xb5, 0x7a, 0xfa, 0x2a, 0x48, 0xea, 0x23, 0xe9, 0x56, 0x41, 0x36,
|
|
||||||
0x5b, 0x26, 0x46, 0x00, 0xc5, 0xea, 0x16, 0x0d, 0xc0, 0x80, 0x79, 0x3d,
|
|
||||||
0xca, 0x54, 0x0a, 0xab, 0xed, 0xda, 0xc5, 0xa1, 0xb0, 0x09, 0x6a, 0x26,
|
|
||||||
0xe2, 0xdf, 0xf3, 0xa6, 0x79, 0x4f, 0x9c, 0x5f, 0xf1, 0x66, 0x69, 0x47,
|
|
||||||
0x3e, 0x76, 0x3a, 0x42, 0x09, 0xd5, 0xc3, 0x63, 0xc4, 0x8e, 0x2a, 0x35,
|
|
||||||
0xa7, 0x53, 0x90, 0x1d, 0xe9, 0xa8, 0xa0, 0xfe, 0x99, 0xc3, 0x1f, 0xb5,
|
|
||||||
0xa0, 0x3f, 0x3a, 0x50, 0xf3, 0xa6, 0x05, 0xa5, 0x35, 0xe9, 0xf1, 0x2d,
|
|
||||||
0x55, 0xa6, 0xcb, 0xa3, 0xb1, 0x32, 0xaa, 0xb9, 0xcf, 0xad, 0xde, 0xcc,
|
|
||||||
0x0d, 0x08, 0x61, 0x33, 0x23, 0x64, 0x72, 0x35, 0x2f, 0x1d, 0xb2, 0x71,
|
|
||||||
0x1e, 0x2a, 0xdb, 0xbe, 0x79, 0x16, 0xe9, 0xaa, 0x44, 0x1f, 0xb3, 0xee,
|
|
||||||
0x3b, 0x2e, 0x5d, 0x25, 0xc2, 0xea, 0x14, 0xb7, 0x40, 0x53, 0xfc, 0x01,
|
|
||||||
0x30, 0x3e, 0x2a, 0x5c, 0xcc, 0x4d, 0x4f, 0xb8, 0x8d, 0x7e, 0x9f, 0x90,
|
|
||||||
0x45, 0xa9, 0x6c, 0x6c, 0x22, 0xcc, 0x7b, 0xc8, 0xd7, 0xa2, 0xd0, 0x34,
|
|
||||||
0x1e, 0x25, 0x6b, 0x5d, 0x85, 0xa2, 0x3c, 0xc3, 0x15, 0x42, 0x63, 0xb4,
|
|
||||||
0xd0, 0x6a, 0x97, 0x01, 0x84, 0xaa, 0x74, 0x9f, 0xda, 0xd0, 0x64, 0xd3,
|
|
||||||
0x57, 0x0f, 0x65, 0x75, 0xd2, 0x45, 0x93, 0x22, 0x39, 0x8e, 0x9d, 0x7b,
|
|
||||||
0x6b, 0xa8, 0xce, 0x22, 0x75, 0x81, 0x60, 0xaa, 0x0b, 0xd4, 0xef, 0x6b,
|
|
||||||
0x4e, 0x3f, 0xa0, 0x1d, 0x3f, 0x72, 0xce, 0x01, 0xe8, 0x04, 0xe6, 0x78,
|
|
||||||
0x39, 0x80, 0x50, 0x43, 0x9e, 0x86, 0xfe, 0x2b, 0x86, 0xa5, 0x71, 0x86,
|
|
||||||
0x25, 0x68, 0xb1, 0x00, 0x0d, 0x04, 0xcb, 0xc8, 0xf0, 0x94, 0xaf, 0x70,
|
|
||||||
0xbb, 0x6d, 0x54, 0x6a, 0xf6, 0xa1, 0xc3, 0x7b, 0xb3, 0x8f, 0x09, 0x56,
|
|
||||||
0xb5, 0x21, 0x1c, 0x89, 0x5b, 0x74, 0xef, 0x49, 0xb3, 0x3a, 0xcf, 0xd2,
|
|
||||||
0x52, 0xa0, 0x63, 0xaa, 0x72, 0x0a, 0x42, 0xc8, 0xaf, 0x74, 0xf4, 0x03,
|
|
||||||
0xfe, 0x62, 0x4a, 0x93, 0xb5, 0x85, 0x19, 0x84, 0x16, 0x04, 0xef, 0xd9,
|
|
||||||
0x6a, 0x59, 0xd9, 0x7b, 0xa8, 0x5b, 0x9d, 0xd2, 0xce, 0x61, 0x9c, 0xcc,
|
|
||||||
0x35, 0x80, 0xd5, 0x9b, 0xe9, 0xe1, 0x1a, 0x98, 0x58, 0xe9, 0xc0, 0x3a,
|
|
||||||
0xea, 0xee, 0x1a, 0xea, 0x4d, 0xaf, 0x52, 0xd6, 0xe5, 0x74, 0x9b, 0xa3,
|
|
||||||
0x4c, 0x27, 0xba, 0xd3, 0x3e, 0x4c, 0xe5, 0xc3, 0x1d, 0xcc, 0xc3, 0x30,
|
|
||||||
0x91, 0x7b, 0x1a, 0x00, 0x27, 0xc5, 0xa0, 0xed, 0x0d, 0x6d, 0xe7, 0xb8,
|
|
||||||
0x42, 0xec, 0x49, 0x50, 0xaa, 0x28, 0x43, 0x88, 0x48, 0xc1, 0x3d, 0xf1,
|
|
||||||
0xe7, 0xf5, 0xc3, 0xad, 0x53, 0xd2, 0x13, 0xf5, 0x32, 0x8b, 0x89, 0x72,
|
|
||||||
0x9a, 0x68, 0x8c, 0x4d, 0x55, 0xef, 0xcb, 0xf4, 0x49, 0x8c, 0xa4, 0x51,
|
|
||||||
0xf7, 0x34, 0xb3, 0xca, 0xd2, 0xcb, 0x2d, 0xe7, 0x8e, 0x6b, 0x5d, 0xd7,
|
|
||||||
0xaa, 0xa0, 0xb9, 0x85, 0x39, 0x7e, 0x8d, 0xc3, 0x33, 0x0c, 0x7f, 0x8a,
|
|
||||||
0x6f, 0xf3, 0x95, 0xc5, 0x42, 0xee, 0xc6, 0xc7, 0x56, 0xf1, 0xd1, 0xe8,
|
|
||||||
0xd5, 0x45, 0xd2, 0xc7, 0x49, 0x7a, 0x15, 0x4a, 0x8b, 0x85, 0x0c, 0xaa,
|
|
||||||
0x93, 0x26, 0x62, 0x68, 0x7b, 0xdc, 0xc6, 0x42, 0x64, 0x71, 0xfb, 0x4f,
|
|
||||||
0x4e, 0x0a, 0x9e, 0x5a, 0xd5, 0xc4, 0x77, 0xf9, 0x82, 0xee, 0x9f, 0x04,
|
|
||||||
0x3d, 0x04, 0x6f, 0x60, 0xea, 0x58, 0xf4, 0x5e, 0x24, 0x8a, 0xf2, 0x41,
|
|
||||||
0xad, 0xf3, 0x86, 0x00, 0x9a, 0xf8, 0x31, 0x55, 0x0b, 0x91, 0xd2, 0x16,
|
|
||||||
0x60, 0x86, 0xda, 0x94, 0x12, 0xb9, 0x17, 0x17, 0xdd, 0x8a, 0x57, 0x65,
|
|
||||||
0xf7, 0x78, 0x5c, 0x6c, 0xac, 0x8b, 0x72, 0x7a, 0x26, 0xfc, 0x1a, 0xed,
|
|
||||||
0x2a, 0x2e, 0x0a, 0x0e, 0xda, 0x14, 0x9a, 0xf8, 0x29, 0x95, 0x2a, 0x21,
|
|
||||||
0x71, 0x40, 0x5e, 0x5a, 0xe9, 0xf4, 0x1f, 0x18, 0x01, 0xa2, 0xcc, 0xe2,
|
|
||||||
0x7a, 0x82, 0x8e, 0xd3, 0x42, 0xfa, 0x3b, 0xde, 0x00, 0x8c, 0x8a, 0xcd,
|
|
||||||
0x6a, 0x98, 0xdb, 0x1c, 0xd5, 0xc8, 0x82, 0xe3, 0x90, 0xbd, 0x28, 0xc8,
|
|
||||||
0x04, 0x56, 0x81, 0xde, 0xbf, 0x51, 0x40, 0xc0, 0xb9, 0xe7, 0x45, 0x17,
|
|
||||||
0xef, 0x93, 0x55, 0x0b, 0x0c, 0xfd, 0x21, 0x54, 0x44, 0xf2, 0xb4, 0xf3,
|
|
||||||
0xfe, 0x67, 0x23, 0x64, 0xbe, 0x70, 0x42, 0x20, 0x1b, 0x9c, 0x20, 0xa2,
|
|
||||||
0x9c, 0x81, 0x2e, 0x5c, 0x56, 0x4f, 0x19, 0x51, 0x5f, 0x21, 0xc2, 0xbd,
|
|
||||||
0x30, 0x2d, 0xd1, 0x15, 0xd1, 0x20, 0x39, 0x44, 0xb8, 0xfa, 0x6d, 0x2e,
|
|
||||||
0x43, 0xa8, 0x1b, 0x43, 0x08, 0x13, 0x1d, 0x2b, 0x9e, 0x91, 0x16, 0xa0,
|
|
||||||
0xab, 0xf6, 0x00, 0xfe, 0x7b, 0xd7, 0xc8, 0xa5, 0x90, 0xce, 0xe6, 0xc2,
|
|
||||||
0x74, 0x25, 0x2e, 0xdd, 0x7c, 0x5f, 0xfa, 0xc5, 0x62, 0xd5, 0xf2, 0xdb,
|
|
||||||
0x95, 0x7e, 0xa3, 0x74, 0xc3, 0x2d, 0x3c, 0xca, 0x37, 0x35, 0x35, 0x15,
|
|
||||||
0xeb, 0x43, 0x14, 0x97, 0xfa, 0xcb, 0xc5, 0xe0, 0x3c, 0x36, 0xcb, 0xd2,
|
|
||||||
0x56, 0x11, 0x51, 0xd9, 0x94, 0xf8, 0xb2, 0x97, 0xfd, 0xcc, 0xdd, 0x5f,
|
|
||||||
0xed, 0xc9, 0xa9, 0xdf, 0xf3, 0x6e, 0x1e, 0x07, 0x8f, 0x6e, 0xe5, 0x1b,
|
|
||||||
0x37, 0xf9, 0x68, 0x57, 0x7e, 0x82, 0xaa, 0xf9, 0xa2, 0x5f, 0xd9, 0xa1,
|
|
||||||
0x1c, 0xec, 0x79, 0x1a, 0x35, 0xfa, 0xbf, 0x40, 0xb3, 0xa4, 0x7d, 0xc9,
|
|
||||||
0xb2, 0xb2, 0xc3, 0x2b, 0xe3, 0xa8, 0x43, 0xc8, 0x09, 0xa5, 0x2d, 0xde,
|
|
||||||
0xa1, 0x57, 0x20, 0x43, 0xb4, 0x37, 0xa0, 0xfb, 0xb2, 0xf5, 0xf2, 0x8c,
|
|
||||||
0x54, 0x17, 0x45, 0xaf, 0xa2, 0xa8, 0xdf, 0x45, 0x91, 0xb8, 0x72, 0x79,
|
|
||||||
0x46, 0xb5, 0xec, 0xd4, 0xd8, 0xbd, 0xe7, 0x62, 0xed, 0xb5, 0xeb, 0x72,
|
|
||||||
0xfc, 0x5a, 0x78, 0x70, 0xc9, 0x4d, 0x52, 0xca, 0x51, 0x09, 0xe7, 0xe5,
|
|
||||||
0xa7, 0x36, 0x8b, 0x10, 0xb7, 0xee, 0xc2, 0x24, 0x24, 0x4f, 0x22, 0x44,
|
|
||||||
0xa7, 0xdf, 0xe5, 0x3d, 0x2c, 0x64, 0x8b, 0xe9, 0xf2, 0x90, 0xd9, 0x90,
|
|
||||||
0xe3, 0xb2, 0x92, 0x67, 0x20, 0xaf, 0x4d, 0x24, 0xe8, 0xc3, 0x10, 0x2d,
|
|
||||||
0x2d, 0xbe, 0x59, 0x46, 0x3f, 0xea, 0xb5, 0xb4, 0x30, 0x72, 0x5e, 0xba,
|
|
||||||
0xe3, 0xe2, 0x7c, 0xc4, 0x53, 0x26, 0x32, 0x9c, 0xf1, 0x49, 0x99, 0x35,
|
|
||||||
0x5c, 0xc4, 0x30, 0xcd, 0xc5, 0x0b, 0xe0, 0x70, 0x15, 0xbb, 0x33, 0x1d,
|
|
||||||
0x1b, 0x1d, 0x57, 0x49, 0xbd, 0xc5, 0xee, 0xe9, 0x2e, 0x75, 0xd7, 0x4d,
|
|
||||||
0xbb, 0x49, 0x8c, 0xa5, 0xee, 0xcd, 0x57, 0xfa, 0xdf, 0xc9, 0xa3, 0x81,
|
|
||||||
0xb6, 0xea, 0x04, 0x25, 0xc8, 0x3a, 0xa6, 0x76, 0x25, 0xc8, 0x91, 0xb6,
|
|
||||||
0x4e, 0x3c, 0xe6, 0x22, 0x32, 0xc0, 0x5d, 0xd6, 0x65, 0xf8, 0x46, 0x49,
|
|
||||||
0x88, 0xaf, 0xea, 0x84, 0x26, 0x21, 0xd2, 0xdd, 0x0e, 0xb8, 0x0d, 0x94,
|
|
||||||
0x46, 0x35, 0xa4, 0x42, 0x4f, 0x82, 0x88, 0xd1, 0x56, 0xaf, 0x35, 0x72,
|
|
||||||
0x2e, 0xc9, 0xe8, 0x17, 0x96, 0x4f, 0xa1, 0x40, 0xa4, 0xa5, 0x30, 0xb9,
|
|
||||||
0xfa, 0xdc, 0x8e, 0xb1, 0x8f, 0xbd, 0xe0, 0x4f, 0x3e, 0x7c, 0x28, 0xe0,
|
|
||||||
0xf1, 0x91, 0x78, 0x2f, 0xac, 0x32, 0x37, 0x99, 0x8d, 0x5f, 0xd3, 0x1d,
|
|
||||||
0x91, 0x7d, 0x9a, 0x59, 0xbd, 0xcc, 0x67, 0x57, 0x61, 0x1b, 0x80, 0x74,
|
|
||||||
0x9a, 0x54, 0xca, 0x0b, 0x37, 0xfa, 0x19, 0x7f, 0x1f, 0xe1, 0x07, 0x90,
|
|
||||||
0x84, 0x86, 0x1d, 0x8d, 0xb2, 0xba, 0x4b, 0x0d, 0x9a, 0x1c, 0xea, 0xb7,
|
|
||||||
0x80, 0xd5, 0xa0, 0x3d, 0x58, 0xfa, 0x18, 0x7c, 0xf8, 0xdc, 0x34, 0x09,
|
|
||||||
0xa8, 0x18, 0xd1, 0xc3, 0x75, 0x70, 0x86, 0xfe, 0x86, 0xe8, 0xd3, 0x89,
|
|
||||||
0x10, 0x6c, 0x81, 0x6d, 0x84, 0xda, 0x77, 0x63, 0x98, 0x4a, 0x1a, 0x03,
|
|
||||||
0x25, 0x95, 0x2c, 0x0c, 0x01, 0xeb, 0x45, 0x60, 0x75, 0x36, 0x62, 0x60,
|
|
||||||
0x3b, 0x69, 0xba, 0x0d, 0xa4, 0x73, 0x87, 0xac, 0xfa, 0x85, 0xae, 0xe6,
|
|
||||||
0xf4, 0x9b, 0xdf, 0x7e, 0xc4, 0x3a, 0xf3, 0x50, 0x84, 0x1f, 0x39, 0xf5,
|
|
||||||
0xc3, 0x14, 0xe5, 0xd0, 0x05, 0xad, 0x61, 0xe6, 0xa9, 0x05, 0xdd, 0xe9,
|
|
||||||
0xcb, 0x5e, 0xbd, 0x34, 0x2c, 0x83, 0xe8, 0x6e, 0x4a, 0x81, 0x96, 0xee,
|
|
||||||
0x94, 0x2e, 0xf3, 0xda, 0xc8, 0xd4, 0xc1, 0x99, 0x34, 0x40, 0x06, 0x36,
|
|
||||||
0x89, 0xe7, 0xd0, 0xef, 0xbc, 0x96, 0x61, 0x85, 0x18, 0x22, 0x4a, 0x9e,
|
|
||||||
0x12, 0xdf, 0x04, 0xda, 0xe5, 0x58, 0x6a, 0x9c, 0xa0, 0x10, 0x28, 0x52,
|
|
||||||
0xe5, 0x61, 0x97, 0x2e, 0xba, 0xc7, 0x5a, 0x90, 0x1a, 0x38, 0x95, 0xd4,
|
|
||||||
0xc5, 0xce, 0xcf, 0xbc, 0xda, 0x7c, 0x9c, 0x51, 0x68, 0x5a, 0x53, 0xe6,
|
|
||||||
0xf4, 0xfc, 0xd3, 0x6b, 0x7f, 0xa0, 0x05, 0x60, 0x9b, 0xba, 0x37, 0x4f,
|
|
||||||
0xaf, 0x06, 0x7c, 0x96, 0x7a, 0x3a, 0x00, 0x15, 0x15, 0x35, 0x4a, 0x52,
|
|
||||||
0xd4, 0x1f, 0x4e, 0xcc, 0xc3, 0x9f, 0x4b, 0x1a, 0x8e, 0x7f, 0x94, 0x98,
|
|
||||||
0x8f, 0x35, 0xd0, 0x0d, 0x84, 0xa7, 0x3b, 0xd8, 0x6d, 0x0f, 0x28, 0x59,
|
|
||||||
0xd0, 0x2c, 0x85, 0x53, 0x80, 0xb1, 0x23, 0xbc, 0xd2, 0x66, 0x9d, 0xf4,
|
|
||||||
0x8c, 0xba, 0x65, 0xf0, 0xd8, 0x86, 0xd0, 0xed, 0x93, 0xcc, 0xea, 0x86,
|
|
||||||
0xd0, 0xce, 0x5a, 0x96, 0x31, 0x2a, 0xbe, 0xbf, 0x2c, 0xbf, 0x81, 0x1e,
|
|
||||||
0xcd, 0x0c, 0x88, 0x8e, 0x5e, 0xf9, 0x13, 0x83, 0xce, 0x2c, 0x20, 0x31,
|
|
||||||
0x6f, 0x21, 0xbb, 0xe4, 0xb5, 0x1f, 0x8c, 0xd0, 0xf6, 0x50, 0x1b, 0xdc,
|
|
||||||
0xcf, 0xf7, 0x58, 0x2a, 0xd8, 0x3c, 0x95, 0xf9, 0xa3, 0xb9, 0xba, 0x11,
|
|
||||||
0x64, 0xfa, 0xa5, 0xe2, 0x99, 0x78, 0xe3, 0xa5, 0xe1, 0xb6, 0xaa, 0x91,
|
|
||||||
0xa5, 0x15, 0x83, 0xe0, 0x37, 0x5d, 0x35, 0xb9, 0x57, 0xf7, 0xa5, 0xdf,
|
|
||||||
0xf8, 0x53, 0xec, 0x9d, 0x36, 0x77, 0xfb, 0x5d, 0x10, 0x34, 0xf0, 0x32,
|
|
||||||
0x46, 0x0b, 0x54, 0x8d, 0x4a, 0x07, 0xda, 0x9f, 0xc8, 0x4d, 0xfa, 0xb8,
|
|
||||||
0x57, 0xfe, 0x6e, 0xab, 0x9c, 0x2b, 0xe9, 0xa8, 0xb9, 0xd6, 0x22, 0x3e,
|
|
||||||
0x09, 0xb4, 0xa0, 0x06, 0xb9, 0xe3, 0x27, 0x0a, 0x2d, 0x3c, 0x60, 0xae,
|
|
||||||
0xcd, 0x40, 0x04, 0xfa, 0x45, 0x60, 0xd3, 0x4d, 0x2a, 0x9a, 0xb3, 0xb6,
|
|
||||||
0xbd, 0x53, 0xbd, 0x2c, 0xc0, 0xaa, 0x4d, 0x48, 0x72, 0x52, 0xf7, 0x17,
|
|
||||||
0x73, 0x02, 0x27, 0x0b, 0x4c, 0xcf, 0xf0, 0x28, 0x49, 0x87, 0x2f, 0x7b,
|
|
||||||
0x92, 0xe8, 0xea, 0xe8, 0x60, 0xc0, 0xd0, 0xe7, 0xab, 0xd4, 0x2e, 0x49,
|
|
||||||
0x85, 0x5e, 0xb2, 0x08, 0xed, 0x2d, 0xe6, 0xb3, 0x83, 0xd3, 0x79, 0x3b,
|
|
||||||
0xbb, 0x4d, 0xc5, 0xbf, 0x9a, 0xbc, 0x2b, 0xcf, 0xfa, 0x25, 0xe2, 0x45,
|
|
||||||
0x75, 0xd4, 0x2d, 0xdd, 0x88, 0xa8, 0xf7, 0x60, 0xfe, 0x37, 0xaf, 0x5c,
|
|
||||||
0xb4, 0x02, 0xf1, 0x4c, 0x25, 0x1f, 0x59, 0xf1, 0x6c, 0x86, 0xc0, 0x87,
|
|
||||||
0x60, 0x11, 0x30, 0xc1, 0x15, 0xf4, 0xe8, 0x6e, 0xc2, 0x7b, 0x08, 0x7e,
|
|
||||||
0x72, 0x67, 0xca, 0x24, 0x99, 0x26, 0xc2, 0xc5, 0xaa, 0x2e, 0x3f, 0x65,
|
|
||||||
0xc5, 0x67, 0x23, 0x26, 0xc7, 0x48, 0xca, 0x44, 0x8b, 0xdf, 0x54, 0xe8,
|
|
||||||
0xbb, 0x26, 0x07, 0x12, 0x99, 0x00, 0x12, 0x58, 0x5b, 0xad, 0x37, 0x5a,
|
|
||||||
0x4f, 0x1e, 0xae, 0xd5, 0x2b, 0x89, 0xbc, 0xe6, 0x18, 0x6a, 0xd3, 0x92,
|
|
||||||
0xd4, 0x95, 0xeb, 0xa3, 0x29, 0x40, 0xcd, 0x68, 0xd6, 0x3e, 0x21, 0xd1,
|
|
||||||
0x71, 0x71, 0x65, 0x4a, 0x88, 0x24, 0xb2, 0xbc, 0x54, 0x45, 0xee, 0xdd,
|
|
||||||
0xb2, 0xa4, 0x65, 0x7b, 0xed, 0x96, 0x11, 0x7c, 0x18, 0x8f, 0x8a, 0xd3,
|
|
||||||
0xf6, 0x07, 0x57, 0xe0, 0xaa, 0x06, 0x59, 0x79, 0x13, 0x2c, 0x23, 0x11,
|
|
||||||
0xc1, 0xa7, 0xad, 0xfe, 0xaa, 0xed, 0xac, 0xbb, 0x43, 0x1e, 0xe9, 0x40,
|
|
||||||
0x4c, 0xcc, 0xad, 0x26, 0x6a, 0x80, 0xf0, 0x3d, 0xcf, 0xe6, 0x95, 0xdf,
|
|
||||||
0xfb, 0x29, 0x24, 0xba, 0xc5, 0x71, 0x35, 0x31, 0xb7, 0x98, 0x20, 0x25,
|
|
||||||
0x09, 0xa5, 0x42, 0xf7, 0xd2, 0xbe, 0xbf, 0x66, 0x31, 0x5f, 0x63, 0xe7,
|
|
||||||
0x57, 0x7d, 0xfe, 0xd5, 0xe6, 0x5f, 0xbd, 0xfb, 0xc5, 0xc8, 0xe6, 0xd9,
|
|
||||||
0xba, 0xf7, 0x45, 0x03, 0x97, 0xab, 0xca, 0x6d, 0xde, 0x3f, 0xf8, 0x98,
|
|
||||||
0xaa, 0xa9, 0xa2, 0x4e, 0x24, 0x1c, 0x46, 0x26, 0xe4, 0xfe, 0x99, 0x76,
|
|
||||||
0x6d, 0xdd, 0x48, 0x98, 0xee, 0x2f, 0x45, 0xd3, 0xf1, 0x7a, 0xd7, 0xd7,
|
|
||||||
0x83, 0xd0, 0xeb, 0x79, 0x96, 0x5a, 0x14, 0x92, 0x43, 0x88, 0x56, 0x18,
|
|
||||||
0x87, 0x39, 0x63, 0x9a, 0x03, 0x0d, 0xc3, 0xb5, 0xee, 0x07, 0xe9, 0xe2,
|
|
||||||
0xb0, 0xe6, 0x8c, 0x1f, 0xd0, 0x65, 0x5e, 0x60, 0xf6, 0xe5, 0x7b, 0xef,
|
|
||||||
0x2a, 0x59, 0x52, 0x28, 0xe5, 0x2d, 0x39, 0xa3, 0xeb, 0x03, 0x8f, 0x31,
|
|
||||||
0xd4, 0xdd, 0x07, 0xd7, 0xaa, 0xeb, 0xce, 0x28, 0x47, 0x74, 0xfd, 0xe6,
|
|
||||||
0x9c, 0x8a, 0x07, 0xdb, 0x54, 0x3e, 0xe9, 0xcf, 0x22, 0xfa, 0x9d, 0xbc,
|
|
||||||
0x78, 0x01, 0x62, 0x6e, 0x2f, 0x75, 0xc8, 0x34, 0xba, 0x47, 0xa0, 0x2f,
|
|
||||||
0x87, 0x30, 0xd6, 0x7d, 0x1a, 0xbb, 0xa3, 0x1f, 0xb8, 0xd3, 0xb0, 0x33,
|
|
||||||
0x6f, 0x70, 0x38, 0xa8, 0xbe, 0x4d, 0x24, 0xfd, 0xf9, 0xb8, 0x91, 0x90,
|
|
||||||
0xad, 0x5f, 0x65, 0xec, 0x39, 0x61, 0x00, 0xed, 0xb0, 0xc0, 0xc7, 0x61,
|
|
||||||
0xdd, 0xc3, 0xb9, 0x84, 0xe2, 0x4a, 0x4c, 0x92, 0x43, 0xc6, 0xe6, 0x67,
|
|
||||||
0x36, 0x56, 0x01, 0x52, 0x1f, 0x31, 0x4a, 0x4b, 0x17, 0x7e, 0xf5, 0x7f,
|
|
||||||
0x8d, 0x68, 0x9d, 0x00, 0x65, 0x27, 0x0b, 0x85, 0x9f, 0x0a, 0xef, 0x8c,
|
|
||||||
0x75, 0x86, 0xac, 0x48, 0xab, 0x40, 0x7d, 0xd9, 0x00, 0x67, 0xe2, 0xad,
|
|
||||||
0x8d, 0x21, 0xcd, 0xac, 0x2b, 0x96, 0x06, 0x92, 0x1f, 0xa6, 0x9d, 0x90,
|
|
||||||
0x46, 0x20, 0x45, 0x52, 0x72, 0x8c, 0xba, 0x91, 0xc2, 0x0d, 0x57, 0xcc,
|
|
||||||
0x40, 0x7b, 0xfc, 0x1c, 0x45, 0x6a, 0x8d, 0x7b, 0xcc, 0xff, 0x00, 0x59,
|
|
||||||
0x81, 0x84, 0x20, 0x42, 0x67, 0xd2, 0x1b, 0x00, 0x00, 0x01, 0x86, 0x69,
|
|
||||||
0x43, 0x43, 0x50, 0x49, 0x43, 0x43, 0x20, 0x70, 0x72, 0x6f, 0x66, 0x69,
|
|
||||||
0x6c, 0x65, 0x00, 0x00, 0x78, 0x9c, 0x7d, 0x91, 0x3d, 0x48, 0xc3, 0x40,
|
|
||||||
0x1c, 0xc5, 0x5f, 0x53, 0xa5, 0x52, 0x2b, 0x0e, 0x16, 0x11, 0x11, 0xc9,
|
|
||||||
0x50, 0x9d, 0x2c, 0x88, 0x8a, 0x08, 0x2e, 0x5a, 0x85, 0x22, 0x54, 0x08,
|
|
||||||
0xb5, 0x42, 0xab, 0x0e, 0x26, 0x97, 0x7e, 0x08, 0x4d, 0x1a, 0x92, 0x14,
|
|
||||||
0x17, 0x47, 0xc1, 0xb5, 0xe0, 0xe0, 0xc7, 0x62, 0xd5, 0xc1, 0xc5, 0x59,
|
|
||||||
0x57, 0x07, 0x57, 0x41, 0x10, 0xfc, 0x00, 0x71, 0x73, 0x73, 0x52, 0x74,
|
|
||||||
0x91, 0x12, 0xff, 0x97, 0x14, 0x5a, 0xc4, 0x7a, 0x70, 0xdc, 0x8f, 0x77,
|
|
||||||
0xf7, 0x1e, 0x77, 0xef, 0x00, 0xa1, 0x5a, 0x64, 0x9a, 0xd5, 0x36, 0x0a,
|
|
||||||
0x68, 0xba, 0x6d, 0x26, 0xe3, 0x31, 0x31, 0x9d, 0x59, 0x11, 0x03, 0xaf,
|
|
||||||
0x08, 0xa2, 0x13, 0xbd, 0x98, 0xc6, 0xa0, 0xcc, 0x2c, 0x63, 0x56, 0x92,
|
|
||||||
0x12, 0x68, 0x39, 0xbe, 0xee, 0xe1, 0xe3, 0xeb, 0x5d, 0x94, 0x67, 0xb5,
|
|
||||||
0x3e, 0xf7, 0xe7, 0xe8, 0x52, 0xb3, 0x16, 0x03, 0x7c, 0x22, 0xf1, 0x0c,
|
|
||||||
0x33, 0x4c, 0x9b, 0x78, 0x9d, 0x78, 0x72, 0xd3, 0x36, 0x38, 0xef, 0x13,
|
|
||||||
0x87, 0x59, 0x41, 0x56, 0x89, 0xcf, 0x89, 0x47, 0x4c, 0xba, 0x20, 0xf1,
|
|
||||||
0x23, 0xd7, 0x15, 0x8f, 0xdf, 0x38, 0xe7, 0x5d, 0x16, 0x78, 0x66, 0xd8,
|
|
||||||
0x4c, 0x25, 0xe7, 0x88, 0xc3, 0xc4, 0x62, 0xbe, 0x89, 0x95, 0x26, 0x66,
|
|
||||||
0x05, 0x53, 0x23, 0x9e, 0x20, 0x8e, 0xa8, 0x9a, 0x4e, 0xf9, 0x42, 0xda,
|
|
||||||
0x63, 0x95, 0xf3, 0x16, 0x67, 0xad, 0x58, 0x66, 0xf5, 0x7b, 0xf2, 0x17,
|
|
||||||
0x86, 0xb2, 0xfa, 0xf2, 0x12, 0xd7, 0x69, 0x0e, 0x20, 0x8e, 0x05, 0x2c,
|
|
||||||
0x42, 0x82, 0x08, 0x05, 0x65, 0x6c, 0xa0, 0x08, 0x1b, 0x51, 0x5a, 0x75,
|
|
||||||
0x52, 0x2c, 0x24, 0x69, 0x3f, 0xd6, 0xc2, 0xdf, 0xef, 0xfa, 0x25, 0x72,
|
|
||||||
0x29, 0xe4, 0xda, 0x00, 0x23, 0xc7, 0x3c, 0x4a, 0xd0, 0x20, 0xbb, 0x7e,
|
|
||||||
0xf0, 0x3f, 0xf8, 0xdd, 0xad, 0x95, 0x1b, 0x1f, 0xf3, 0x92, 0x42, 0x31,
|
|
||||||
0xa0, 0xfd, 0xc5, 0x71, 0x3e, 0x86, 0x80, 0xc0, 0x2e, 0x50, 0xab, 0x38,
|
|
||||||
0xce, 0xf7, 0xb1, 0xe3, 0xd4, 0x4e, 0x00, 0xff, 0x33, 0x70, 0xa5, 0x37,
|
|
||||||
0xfc, 0xa5, 0x2a, 0x30, 0xf5, 0x49, 0x7a, 0xa5, 0xa1, 0x45, 0x8e, 0x80,
|
|
||||||
0xee, 0x6d, 0xe0, 0xe2, 0xba, 0xa1, 0x29, 0x7b, 0xc0, 0xe5, 0x0e, 0xd0,
|
|
||||||
0xf7, 0x64, 0xc8, 0xa6, 0xec, 0x4a, 0x7e, 0x9a, 0x42, 0x2e, 0x07, 0xbc,
|
|
||||||
0x9f, 0xd1, 0x37, 0x65, 0x80, 0x9e, 0x5b, 0x20, 0xb8, 0xea, 0xf5, 0x56,
|
|
||||||
0xdf, 0xc7, 0xe9, 0x03, 0x90, 0xa2, 0xae, 0x12, 0x37, 0xc0, 0xc1, 0x21,
|
|
||||||
0x30, 0x9c, 0xa7, 0xec, 0xb5, 0x16, 0xef, 0xee, 0x68, 0xee, 0xed, 0xdf,
|
|
||||||
0x33, 0xf5, 0xfe, 0x7e, 0x00, 0xb6, 0x7a, 0x72, 0xc2, 0xb7, 0x19, 0xd7,
|
|
||||||
0x5a, 0x00, 0x00, 0x00, 0x06, 0x62, 0x4b, 0x47, 0x44, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0xf9, 0x43, 0xbb, 0x7f, 0x00, 0x00, 0x00, 0x09, 0x70,
|
|
||||||
0x48, 0x59, 0x73, 0x00, 0x00, 0x2e, 0x23, 0x00, 0x00, 0x2e, 0x23, 0x01,
|
|
||||||
0x78, 0xa5, 0x3f, 0x76, 0x00, 0x00, 0x00, 0x07, 0x74, 0x49, 0x4d, 0x45,
|
|
||||||
0x07, 0xe5, 0x0a, 0x0b, 0x17, 0x1e, 0x25, 0x91, 0xc0, 0xe1, 0x5c, 0x00,
|
|
||||||
0x00, 0x00, 0x19, 0x74, 0x45, 0x58, 0x74, 0x43, 0x6f, 0x6d, 0x6d, 0x65,
|
|
||||||
0x6e, 0x74, 0x00, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x20, 0x77,
|
|
||||||
0x69, 0x74, 0x68, 0x20, 0x47, 0x49, 0x4d, 0x50, 0x57, 0x81, 0x0e, 0x17,
|
|
||||||
0x00, 0x00, 0x00, 0x8f, 0x49, 0x44, 0x41, 0x54, 0x38, 0xcb, 0xa5, 0x92,
|
|
||||||
0x49, 0x0e, 0xc0, 0x20, 0x0c, 0x03, 0x1d, 0x8b, 0xff, 0x7f, 0xd9, 0x3d,
|
|
||||||
0x54, 0xdd, 0x21, 0x5b, 0x91, 0x10, 0x82, 0x90, 0x89, 0x21, 0x36, 0x00,
|
|
||||||
0x02, 0x84, 0xee, 0xe0, 0xbe, 0xd8, 0x5f, 0x40, 0x1f, 0x42, 0x00, 0x90,
|
|
||||||
0xd4, 0x86, 0x9c, 0x0a, 0xba, 0x10, 0xde, 0x37, 0x1d, 0x08, 0xdf, 0x07,
|
|
||||||
0x55, 0x08, 0x67, 0x87, 0x15, 0x08, 0x57, 0x81, 0x2c, 0x84, 0x5e, 0x30,
|
|
||||||
0x03, 0x61, 0x24, 0x31, 0x82, 0x30, 0xf3, 0x51, 0x1e, 0x84, 0xd9, 0x76,
|
|
||||||
0xad, 0x20, 0xac, 0x98, 0x66, 0x06, 0x61, 0xd5, 0xba, 0x6f, 0xc8, 0xf0,
|
|
||||||
0x2e, 0x9b, 0x45, 0x3e, 0xb0, 0xb9, 0x82, 0x23, 0xf1, 0xaa, 0xa6, 0xe5,
|
|
||||||
0x64, 0xbd, 0xaa, 0xd3, 0x85, 0x3d, 0x59, 0x93, 0x37, 0x27, 0x8c, 0xf4,
|
|
||||||
0x4c, 0x56, 0x5a, 0x09, 0x57, 0x95, 0xb3, 0x2a, 0x78, 0x7d, 0x52, 0xa7,
|
|
||||||
0x0b, 0x80, 0x01, 0x92, 0x1b, 0x7e, 0x6a, 0xf9, 0xdc, 0x18, 0x81, 0x6d,
|
|
||||||
0x42, 0x05, 0x1b, 0x88, 0xd3, 0x3f, 0x1e, 0x42, 0x28, 0x07, 0xad, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82
|
|
||||||
};
|
|
||||||
unsigned int mouse_png_len = 4907;
|
|
||||||
|
|
||||||
#else // EMBED_HERE
|
|
||||||
|
|
||||||
extern unsigned char mouse_png[];
|
|
||||||
extern unsigned int mouse_png_len;
|
|
||||||
|
|
||||||
#endif // EMBED_HERE
|
|
||||||
|
|
||||||
|
|
||||||
#pragma GCC diagnostic pop
|
|
||||||
|
|
||||||
|
|
||||||
#endif // MOUSE_PNG_H
|
|
|
@ -1,347 +0,0 @@
|
||||||
/*
|
|
||||||
* Kangaroo Punch MultiPlayer Game Server Mark II
|
|
||||||
* Copyright (C) 2020-2021 Scott Duensing
|
|
||||||
*
|
|
||||||
* This program is free software: you can redistribute it and/or modify
|
|
||||||
* it under the terms of the GNU General Public License as published by
|
|
||||||
* the Free Software Foundation, either version 3 of the License, or
|
|
||||||
* (at your option) any later version.
|
|
||||||
*
|
|
||||||
* This program is distributed in the hope that it will be useful,
|
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
* GNU General Public License for more details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU General Public License
|
|
||||||
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
|
|
||||||
|
|
||||||
#ifndef VGA8X14_DAT_H
|
|
||||||
#define VGA8X14_DAT_H
|
|
||||||
|
|
||||||
|
|
||||||
// ===== THIS FILE IS AUTOMATICALLY GENERATED - DO NOT EDIT =====
|
|
||||||
|
|
||||||
|
|
||||||
#pragma GCC diagnostic push
|
|
||||||
#pragma GCC diagnostic ignored "-Wunused-variable"
|
|
||||||
|
|
||||||
#ifdef EMBED_HERE
|
|
||||||
|
|
||||||
unsigned char vga8x14_dat[] = {
|
|
||||||
0x08, 0x0e, 0x10, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0xff, 0x00, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0xff, 0x00, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x7e, 0x7e, 0x00, 0x00, 0x18, 0x18, 0x00, 0xff, 0x00, 0xff, 0x1e,
|
|
||||||
0x3c, 0x3f, 0x7f, 0x18, 0x00, 0x81, 0xff, 0x6c, 0x10, 0x3c, 0x3c, 0x00,
|
|
||||||
0xff, 0x00, 0xff, 0x0e, 0x66, 0x33, 0x63, 0x18, 0x00, 0xa5, 0xdb, 0xfe,
|
|
||||||
0x38, 0x3c, 0x7e, 0x00, 0xff, 0x3c, 0xc3, 0x1a, 0x66, 0x3f, 0x7f, 0xdb,
|
|
||||||
0x00, 0x81, 0xff, 0xfe, 0x7c, 0xe7, 0xff, 0x18, 0xe7, 0x66, 0x99, 0x32,
|
|
||||||
0x66, 0x30, 0x63, 0x3c, 0x00, 0x81, 0xff, 0xfe, 0xfe, 0xe7, 0xff, 0x3c,
|
|
||||||
0xc3, 0x42, 0xbd, 0x78, 0x3c, 0x30, 0x63, 0xe7, 0x00, 0xbd, 0xc3, 0xfe,
|
|
||||||
0x7c, 0xe7, 0x7e, 0x3c, 0xc3, 0x42, 0xbd, 0xcc, 0x18, 0x30, 0x63, 0x3c,
|
|
||||||
0x00, 0x99, 0xe7, 0x7c, 0x38, 0x18, 0x18, 0x18, 0xe7, 0x66, 0x99, 0xcc,
|
|
||||||
0x7e, 0x70, 0x67, 0xdb, 0x00, 0x81, 0xff, 0x38, 0x10, 0x18, 0x18, 0x00,
|
|
||||||
0xff, 0x3c, 0xc3, 0xcc, 0x18, 0xf0, 0xe7, 0x18, 0x00, 0x7e, 0x7e, 0x10,
|
|
||||||
0x00, 0x3c, 0x3c, 0x00, 0xff, 0x00, 0xff, 0x78, 0x18, 0xe0, 0xe6, 0x18,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x00, 0xff, 0x00,
|
|
||||||
0x00, 0x00, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0xff, 0x00, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0xff, 0x00, 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, 0x7c, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x02, 0x18, 0x66,
|
|
||||||
0x7f, 0xc6, 0x00, 0x18, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0xc0, 0x06, 0x3c, 0x66, 0xdb, 0x60, 0x00, 0x3c, 0x3c, 0x18, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x10, 0xfe, 0xe0, 0x0e, 0x7e, 0x66, 0xdb, 0x38, 0x00, 0x7e,
|
|
||||||
0x7e, 0x18, 0x18, 0x30, 0x00, 0x28, 0x38, 0xfe, 0xf8, 0x3e, 0x18, 0x66,
|
|
||||||
0xdb, 0x6c, 0x00, 0x18, 0x18, 0x18, 0x0c, 0x60, 0xc0, 0x6c, 0x38, 0x7c,
|
|
||||||
0xfe, 0xfe, 0x18, 0x66, 0x7b, 0xc6, 0x00, 0x18, 0x18, 0x18, 0xfe, 0xfe,
|
|
||||||
0xc0, 0xfe, 0x7c, 0x7c, 0xf8, 0x3e, 0x18, 0x66, 0x1b, 0xc6, 0x00, 0x18,
|
|
||||||
0x18, 0x18, 0x0c, 0x60, 0xc0, 0x6c, 0x7c, 0x38, 0xe0, 0x0e, 0x7e, 0x00,
|
|
||||||
0x1b, 0x6c, 0xfe, 0x7e, 0x18, 0x7e, 0x18, 0x30, 0xfe, 0x28, 0xfe, 0x38,
|
|
||||||
0xc0, 0x06, 0x3c, 0x66, 0x1b, 0x38, 0xfe, 0x3c, 0x18, 0x3c, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0xfe, 0x10, 0x80, 0x02, 0x18, 0x66, 0x1b, 0x0c, 0xfe, 0x18,
|
|
||||||
0x18, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0xc6, 0x00, 0x7e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x7c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x66, 0x00, 0x18, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x66, 0x6c, 0x7c, 0x00, 0x38, 0x30,
|
|
||||||
0x0c, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x3c, 0x66, 0x6c,
|
|
||||||
0xc6, 0x00, 0x6c, 0x30, 0x18, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06,
|
|
||||||
0x00, 0x3c, 0x24, 0xfe, 0xc2, 0xc2, 0x6c, 0x60, 0x30, 0x0c, 0x66, 0x18,
|
|
||||||
0x00, 0x00, 0x00, 0x0c, 0x00, 0x3c, 0x00, 0x6c, 0xc0, 0xc6, 0x38, 0x00,
|
|
||||||
0x30, 0x0c, 0x3c, 0x18, 0x00, 0x00, 0x00, 0x18, 0x00, 0x18, 0x00, 0x6c,
|
|
||||||
0x7c, 0x0c, 0x76, 0x00, 0x30, 0x0c, 0xff, 0x7e, 0x00, 0xfe, 0x00, 0x30,
|
|
||||||
0x00, 0x18, 0x00, 0x6c, 0x06, 0x18, 0xdc, 0x00, 0x30, 0x0c, 0x3c, 0x18,
|
|
||||||
0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0xfe, 0x86, 0x30, 0xcc, 0x00,
|
|
||||||
0x30, 0x0c, 0x66, 0x18, 0x18, 0x00, 0x00, 0xc0, 0x00, 0x18, 0x00, 0x6c,
|
|
||||||
0xc6, 0x66, 0xcc, 0x00, 0x18, 0x18, 0x00, 0x00, 0x18, 0x00, 0x18, 0x80,
|
|
||||||
0x00, 0x18, 0x00, 0x6c, 0x7c, 0xc6, 0x76, 0x00, 0x0c, 0x30, 0x00, 0x00,
|
|
||||||
0x18, 0x00, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x7c, 0x18, 0x7c, 0x7c, 0x0c, 0xfe, 0x38, 0xfe, 0x7c, 0x7c, 0x00, 0x00,
|
|
||||||
0x06, 0x00, 0x60, 0x7c, 0xc6, 0x38, 0xc6, 0xc6, 0x1c, 0xc0, 0x60, 0xc6,
|
|
||||||
0xc6, 0xc6, 0x18, 0x18, 0x0c, 0x00, 0x30, 0xc6, 0xce, 0x78, 0x06, 0x06,
|
|
||||||
0x3c, 0xc0, 0xc0, 0x06, 0xc6, 0xc6, 0x18, 0x18, 0x18, 0x00, 0x18, 0xc6,
|
|
||||||
0xde, 0x18, 0x0c, 0x06, 0x6c, 0xc0, 0xc0, 0x0c, 0xc6, 0xc6, 0x00, 0x00,
|
|
||||||
0x30, 0x7e, 0x0c, 0x0c, 0xf6, 0x18, 0x18, 0x3c, 0xcc, 0xfc, 0xfc, 0x18,
|
|
||||||
0x7c, 0x7e, 0x00, 0x00, 0x60, 0x00, 0x06, 0x18, 0xe6, 0x18, 0x30, 0x06,
|
|
||||||
0xfe, 0x06, 0xc6, 0x30, 0xc6, 0x06, 0x00, 0x00, 0x30, 0x00, 0x0c, 0x18,
|
|
||||||
0xc6, 0x18, 0x60, 0x06, 0x0c, 0x06, 0xc6, 0x30, 0xc6, 0x06, 0x18, 0x18,
|
|
||||||
0x18, 0x7e, 0x18, 0x00, 0xc6, 0x18, 0xc6, 0xc6, 0x0c, 0xc6, 0xc6, 0x30,
|
|
||||||
0xc6, 0x0c, 0x18, 0x18, 0x0c, 0x00, 0x30, 0x18, 0x7c, 0x7e, 0xfe, 0x7c,
|
|
||||||
0x1e, 0x7c, 0x7c, 0x30, 0x7c, 0x78, 0x00, 0x30, 0x06, 0x00, 0x60, 0x18,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7c, 0x10, 0xfc, 0x3c,
|
|
||||||
0xf8, 0xfe, 0xfe, 0x3c, 0xc6, 0x3c, 0x1e, 0xe6, 0xf0, 0xc6, 0xc6, 0x38,
|
|
||||||
0xc6, 0x38, 0x66, 0x66, 0x6c, 0x66, 0x66, 0x66, 0xc6, 0x18, 0x0c, 0x66,
|
|
||||||
0x60, 0xee, 0xe6, 0x6c, 0xc6, 0x6c, 0x66, 0xc2, 0x66, 0x62, 0x62, 0xc2,
|
|
||||||
0xc6, 0x18, 0x0c, 0x6c, 0x60, 0xfe, 0xf6, 0xc6, 0xde, 0xc6, 0x66, 0xc0,
|
|
||||||
0x66, 0x68, 0x68, 0xc0, 0xc6, 0x18, 0x0c, 0x6c, 0x60, 0xfe, 0xfe, 0xc6,
|
|
||||||
0xde, 0xc6, 0x7c, 0xc0, 0x66, 0x78, 0x78, 0xc0, 0xfe, 0x18, 0x0c, 0x78,
|
|
||||||
0x60, 0xd6, 0xde, 0xc6, 0xde, 0xfe, 0x66, 0xc0, 0x66, 0x68, 0x68, 0xde,
|
|
||||||
0xc6, 0x18, 0x0c, 0x6c, 0x60, 0xc6, 0xce, 0xc6, 0xdc, 0xc6, 0x66, 0xc2,
|
|
||||||
0x66, 0x62, 0x60, 0xc6, 0xc6, 0x18, 0xcc, 0x6c, 0x62, 0xc6, 0xc6, 0xc6,
|
|
||||||
0xc0, 0xc6, 0x66, 0x66, 0x6c, 0x66, 0x60, 0x66, 0xc6, 0x18, 0xcc, 0x66,
|
|
||||||
0x66, 0xc6, 0xc6, 0x6c, 0x7c, 0xc6, 0xfc, 0x3c, 0xf8, 0xfe, 0xf0, 0x3a,
|
|
||||||
0xc6, 0x3c, 0x78, 0xe6, 0xfe, 0xc6, 0xc6, 0x38, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 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, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x38, 0x00, 0xfc, 0x7c, 0xfc, 0x7c, 0x7e, 0xc6, 0xc6, 0xc6,
|
|
||||||
0xc6, 0x66, 0xfe, 0x3c, 0x80, 0x3c, 0x6c, 0x00, 0x66, 0xc6, 0x66, 0xc6,
|
|
||||||
0x7e, 0xc6, 0xc6, 0xc6, 0xc6, 0x66, 0xc6, 0x30, 0xc0, 0x0c, 0xc6, 0x00,
|
|
||||||
0x66, 0xc6, 0x66, 0xc6, 0x5a, 0xc6, 0xc6, 0xc6, 0x6c, 0x66, 0x8c, 0x30,
|
|
||||||
0xe0, 0x0c, 0x00, 0x00, 0x66, 0xc6, 0x66, 0x60, 0x18, 0xc6, 0xc6, 0xc6,
|
|
||||||
0x38, 0x66, 0x18, 0x30, 0x70, 0x0c, 0x00, 0x00, 0x7c, 0xc6, 0x7c, 0x38,
|
|
||||||
0x18, 0xc6, 0xc6, 0xd6, 0x38, 0x3c, 0x30, 0x30, 0x38, 0x0c, 0x00, 0x00,
|
|
||||||
0x60, 0xd6, 0x6c, 0x0c, 0x18, 0xc6, 0xc6, 0xd6, 0x38, 0x18, 0x60, 0x30,
|
|
||||||
0x1c, 0x0c, 0x00, 0x00, 0x60, 0xde, 0x66, 0xc6, 0x18, 0xc6, 0x6c, 0xfe,
|
|
||||||
0x6c, 0x18, 0xc2, 0x30, 0x0e, 0x0c, 0x00, 0x00, 0x60, 0x7c, 0x66, 0xc6,
|
|
||||||
0x18, 0xc6, 0x38, 0x7c, 0xc6, 0x18, 0xc6, 0x30, 0x06, 0x0c, 0x00, 0x00,
|
|
||||||
0xf0, 0x0c, 0xe6, 0x7c, 0x3c, 0x7c, 0x10, 0x6c, 0xc6, 0x3c, 0xfe, 0x3c,
|
|
||||||
0x02, 0x3c, 0x00, 0x00, 0x00, 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, 0xff,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x18, 0x00, 0xe0, 0x00, 0x1c, 0x00, 0x38, 0x00, 0xe0, 0x18, 0x06, 0xe0,
|
|
||||||
0x38, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x00, 0x0c, 0x00, 0x6c, 0x00,
|
|
||||||
0x60, 0x18, 0x06, 0x60, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x00,
|
|
||||||
0x0c, 0x00, 0x64, 0x00, 0x60, 0x00, 0x00, 0x60, 0x18, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x78, 0x78, 0x7c, 0x3c, 0x7c, 0x60, 0x76, 0x6c, 0x38, 0x0e, 0x66,
|
|
||||||
0x18, 0xec, 0xdc, 0x7c, 0x00, 0x0c, 0x6c, 0xc6, 0x6c, 0xc6, 0xf0, 0xcc,
|
|
||||||
0x76, 0x18, 0x06, 0x6c, 0x18, 0xfe, 0x66, 0xc6, 0x00, 0x7c, 0x66, 0xc0,
|
|
||||||
0xcc, 0xfe, 0x60, 0xcc, 0x66, 0x18, 0x06, 0x78, 0x18, 0xd6, 0x66, 0xc6,
|
|
||||||
0x00, 0xcc, 0x66, 0xc0, 0xcc, 0xc0, 0x60, 0xcc, 0x66, 0x18, 0x06, 0x6c,
|
|
||||||
0x18, 0xd6, 0x66, 0xc6, 0x00, 0xcc, 0x66, 0xc6, 0xcc, 0xc6, 0x60, 0x7c,
|
|
||||||
0x66, 0x18, 0x06, 0x66, 0x18, 0xd6, 0x66, 0xc6, 0x00, 0x76, 0x7c, 0x7c,
|
|
||||||
0x76, 0x7c, 0xf0, 0x0c, 0xe6, 0x3c, 0x66, 0xe6, 0x3c, 0xc6, 0x66, 0x7c,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xcc, 0x00, 0x00, 0x66, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x78,
|
|
||||||
0x00, 0x00, 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,
|
|
||||||
0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0e, 0x18, 0x70, 0x76, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18,
|
|
||||||
0x18, 0x18, 0xdc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x18, 0x18, 0x18, 0x00, 0x10, 0xdc, 0x76, 0xdc, 0x7c,
|
|
||||||
0xfc, 0xcc, 0x66, 0xc6, 0xc6, 0xc6, 0xfe, 0x18, 0x18, 0x18, 0x00, 0x38,
|
|
||||||
0x66, 0xcc, 0x76, 0xc6, 0x30, 0xcc, 0x66, 0xc6, 0x6c, 0xc6, 0xcc, 0x70,
|
|
||||||
0x00, 0x0e, 0x00, 0x6c, 0x66, 0xcc, 0x66, 0x70, 0x30, 0xcc, 0x66, 0xd6,
|
|
||||||
0x38, 0xc6, 0x18, 0x18, 0x18, 0x18, 0x00, 0xc6, 0x66, 0xcc, 0x60, 0x1c,
|
|
||||||
0x30, 0xcc, 0x66, 0xd6, 0x38, 0xc6, 0x30, 0x18, 0x18, 0x18, 0x00, 0xc6,
|
|
||||||
0x7c, 0x7c, 0x60, 0xc6, 0x36, 0xcc, 0x3c, 0xfe, 0x6c, 0x7e, 0x66, 0x18,
|
|
||||||
0x18, 0x18, 0x00, 0xfe, 0x60, 0x0c, 0xf0, 0x7c, 0x1c, 0x76, 0x18, 0x6c,
|
|
||||||
0xc6, 0x06, 0xfe, 0x0e, 0x18, 0x70, 0x00, 0x00, 0x60, 0x0c, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0xf0, 0x1e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38,
|
|
||||||
0x00, 0x00, 0x0c, 0x10, 0x00, 0x60, 0x38, 0x00, 0x10, 0x00, 0x60, 0x00,
|
|
||||||
0x18, 0x60, 0xc6, 0x6c, 0x3c, 0xcc, 0x18, 0x38, 0xcc, 0x30, 0x6c, 0x00,
|
|
||||||
0x38, 0xcc, 0x30, 0x66, 0x3c, 0x30, 0xc6, 0x38, 0x66, 0xcc, 0x30, 0x6c,
|
|
||||||
0xcc, 0x18, 0x38, 0x00, 0x6c, 0xcc, 0x18, 0x66, 0x66, 0x18, 0x10, 0x00,
|
|
||||||
0xc2, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x38, 0x38, 0xc0, 0xcc, 0x7c, 0x78, 0x78, 0x78, 0x78, 0x66,
|
|
||||||
0x7c, 0x7c, 0x7c, 0x38, 0x38, 0x38, 0x6c, 0x6c, 0xc0, 0xcc, 0xc6, 0x0c,
|
|
||||||
0x0c, 0x0c, 0x0c, 0x60, 0xc6, 0xc6, 0xc6, 0x18, 0x18, 0x18, 0xc6, 0xc6,
|
|
||||||
0xc2, 0xcc, 0xfe, 0x7c, 0x7c, 0x7c, 0x7c, 0x66, 0xfe, 0xfe, 0xfe, 0x18,
|
|
||||||
0x18, 0x18, 0xc6, 0xc6, 0x66, 0xcc, 0xc0, 0xcc, 0xcc, 0xcc, 0xcc, 0x3c,
|
|
||||||
0xc0, 0xc0, 0xc0, 0x18, 0x18, 0x18, 0xfe, 0xfe, 0x3c, 0xcc, 0xc6, 0xcc,
|
|
||||||
0xcc, 0xcc, 0xcc, 0x0c, 0xc6, 0xc6, 0xc6, 0x18, 0x18, 0x18, 0xc6, 0xc6,
|
|
||||||
0x0c, 0x76, 0x7c, 0x76, 0x76, 0x76, 0x76, 0x06, 0x7c, 0x7c, 0x7c, 0x3c,
|
|
||||||
0x3c, 0x3c, 0xc6, 0xc6, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7c, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x10,
|
|
||||||
0x00, 0x60, 0x30, 0x60, 0x00, 0xc6, 0xc6, 0x18, 0x38, 0x00, 0xf8, 0x0e,
|
|
||||||
0x60, 0x00, 0x3e, 0x38, 0xc6, 0x30, 0x78, 0x30, 0xc6, 0xc6, 0xc6, 0x18,
|
|
||||||
0x6c, 0x66, 0xcc, 0x1b, 0x00, 0x00, 0x6c, 0x6c, 0xc6, 0x18, 0xcc, 0x18,
|
|
||||||
0xc6, 0x38, 0x00, 0x3c, 0x64, 0x66, 0xcc, 0x18, 0xfe, 0xcc, 0xcc, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x6c, 0xc6, 0x66, 0x60, 0x3c, 0xf8, 0x18,
|
|
||||||
0x66, 0x76, 0xcc, 0x7c, 0x7c, 0x7c, 0xcc, 0xcc, 0xc6, 0xc6, 0xc6, 0x60,
|
|
||||||
0xf0, 0x18, 0xc4, 0x18, 0x60, 0x36, 0xfe, 0xc6, 0xc6, 0xc6, 0xcc, 0xcc,
|
|
||||||
0xc6, 0xc6, 0xc6, 0x60, 0x60, 0x7e, 0xcc, 0x7e, 0x7c, 0x7e, 0xcc, 0xc6,
|
|
||||||
0xc6, 0xc6, 0xcc, 0xcc, 0xc6, 0xc6, 0xc6, 0x66, 0x60, 0x18, 0xde, 0x18,
|
|
||||||
0x60, 0xd8, 0xcc, 0xc6, 0xc6, 0xc6, 0xcc, 0xcc, 0xc6, 0xc6, 0xc6, 0x3c,
|
|
||||||
0x60, 0x7e, 0xcc, 0x18, 0x66, 0xd8, 0xcc, 0xc6, 0xc6, 0xc6, 0xcc, 0xcc,
|
|
||||||
0x7e, 0x6c, 0xc6, 0x18, 0xe6, 0x18, 0xcc, 0x18, 0xfe, 0x6e, 0xce, 0x7c,
|
|
||||||
0x7c, 0x7c, 0x76, 0x76, 0x06, 0x38, 0x7c, 0x18, 0xfc, 0x18, 0xc6, 0x18,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0xd8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x78, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x76, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x18, 0x0c, 0x18, 0x18, 0x00, 0xdc, 0x3c, 0x38,
|
|
||||||
0x00, 0x00, 0x00, 0xc0, 0xc0, 0x00, 0x00, 0x00, 0x30, 0x18, 0x30, 0x30,
|
|
||||||
0x76, 0x00, 0x6c, 0x6c, 0x30, 0x00, 0x00, 0xc0, 0xc0, 0x18, 0x00, 0x00,
|
|
||||||
0x60, 0x30, 0x60, 0x60, 0xdc, 0xc6, 0x6c, 0x6c, 0x30, 0x00, 0x00, 0xc6,
|
|
||||||
0xc6, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe6, 0x3e, 0x38,
|
|
||||||
0x00, 0x00, 0x00, 0xcc, 0xcc, 0x00, 0x36, 0xd8, 0x78, 0x38, 0x7c, 0xcc,
|
|
||||||
0xdc, 0xf6, 0x00, 0x00, 0x30, 0x00, 0x00, 0xd8, 0xd8, 0x18, 0x6c, 0x6c,
|
|
||||||
0x0c, 0x18, 0xc6, 0xcc, 0x66, 0xfe, 0x7e, 0x7c, 0x30, 0xfe, 0xfe, 0x30,
|
|
||||||
0x30, 0x18, 0xd8, 0x36, 0x7c, 0x18, 0xc6, 0xcc, 0x66, 0xde, 0x00, 0x00,
|
|
||||||
0x60, 0xc0, 0x06, 0x60, 0x66, 0x3c, 0x6c, 0x6c, 0xcc, 0x18, 0xc6, 0xcc,
|
|
||||||
0x66, 0xce, 0x00, 0x00, 0xc6, 0xc0, 0x06, 0xdc, 0xce, 0x3c, 0x36, 0xd8,
|
|
||||||
0xcc, 0x18, 0xc6, 0xcc, 0x66, 0xc6, 0x00, 0x00, 0xc6, 0xc0, 0x06, 0x86,
|
|
||||||
0x9e, 0x3c, 0x00, 0x00, 0x76, 0x3c, 0x7c, 0x76, 0x66, 0xc6, 0x00, 0x00,
|
|
||||||
0x7c, 0x00, 0x00, 0x0c, 0x3e, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x06, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3e,
|
|
||||||
0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x55, 0xdd, 0x18,
|
|
||||||
0x18, 0x18, 0x36, 0x00, 0x00, 0x36, 0x36, 0x00, 0x36, 0x36, 0x18, 0x00,
|
|
||||||
0x44, 0xaa, 0x77, 0x18, 0x18, 0x18, 0x36, 0x00, 0x00, 0x36, 0x36, 0x00,
|
|
||||||
0x36, 0x36, 0x18, 0x00, 0x11, 0x55, 0xdd, 0x18, 0x18, 0x18, 0x36, 0x00,
|
|
||||||
0x00, 0x36, 0x36, 0x00, 0x36, 0x36, 0x18, 0x00, 0x44, 0xaa, 0x77, 0x18,
|
|
||||||
0x18, 0x18, 0x36, 0x00, 0x00, 0x36, 0x36, 0x00, 0x36, 0x36, 0x18, 0x00,
|
|
||||||
0x11, 0x55, 0xdd, 0x18, 0x18, 0x18, 0x36, 0x00, 0x00, 0x36, 0x36, 0x00,
|
|
||||||
0x36, 0x36, 0x18, 0x00, 0x44, 0xaa, 0x77, 0x18, 0x18, 0xf8, 0x36, 0x00,
|
|
||||||
0xf8, 0xf6, 0x36, 0xfe, 0xf6, 0x36, 0xf8, 0x00, 0x11, 0x55, 0xdd, 0x18,
|
|
||||||
0x18, 0x18, 0x36, 0x00, 0x18, 0x06, 0x36, 0x06, 0x06, 0x36, 0x18, 0x00,
|
|
||||||
0x44, 0xaa, 0x77, 0x18, 0xf8, 0xf8, 0xf6, 0xfe, 0xf8, 0xf6, 0x36, 0xf6,
|
|
||||||
0xfe, 0xfe, 0xf8, 0xf8, 0x11, 0x55, 0xdd, 0x18, 0x18, 0x18, 0x36, 0x36,
|
|
||||||
0x18, 0x36, 0x36, 0x36, 0x00, 0x00, 0x00, 0x18, 0x44, 0xaa, 0x77, 0x18,
|
|
||||||
0x18, 0x18, 0x36, 0x36, 0x18, 0x36, 0x36, 0x36, 0x00, 0x00, 0x00, 0x18,
|
|
||||||
0x11, 0x55, 0xdd, 0x18, 0x18, 0x18, 0x36, 0x36, 0x18, 0x36, 0x36, 0x36,
|
|
||||||
0x00, 0x00, 0x00, 0x18, 0x44, 0xaa, 0x77, 0x18, 0x18, 0x18, 0x36, 0x36,
|
|
||||||
0x18, 0x36, 0x36, 0x36, 0x00, 0x00, 0x00, 0x18, 0x11, 0x55, 0xdd, 0x18,
|
|
||||||
0x18, 0x18, 0x36, 0x36, 0x18, 0x36, 0x36, 0x36, 0x00, 0x00, 0x00, 0x18,
|
|
||||||
0x44, 0xaa, 0x77, 0x18, 0x18, 0x18, 0x36, 0x36, 0x18, 0x36, 0x36, 0x36,
|
|
||||||
0x00, 0x00, 0x00, 0x18, 0x18, 0x18, 0x00, 0x18, 0x00, 0x18, 0x18, 0x36,
|
|
||||||
0x36, 0x00, 0x36, 0x00, 0x36, 0x00, 0x36, 0x18, 0x18, 0x18, 0x00, 0x18,
|
|
||||||
0x00, 0x18, 0x18, 0x36, 0x36, 0x00, 0x36, 0x00, 0x36, 0x00, 0x36, 0x18,
|
|
||||||
0x18, 0x18, 0x00, 0x18, 0x00, 0x18, 0x18, 0x36, 0x36, 0x00, 0x36, 0x00,
|
|
||||||
0x36, 0x00, 0x36, 0x18, 0x18, 0x18, 0x00, 0x18, 0x00, 0x18, 0x18, 0x36,
|
|
||||||
0x36, 0x00, 0x36, 0x00, 0x36, 0x00, 0x36, 0x18, 0x18, 0x18, 0x00, 0x18,
|
|
||||||
0x00, 0x18, 0x18, 0x36, 0x36, 0x00, 0x36, 0x00, 0x36, 0x00, 0x36, 0x18,
|
|
||||||
0x18, 0x18, 0x00, 0x18, 0x00, 0x18, 0x1f, 0x36, 0x37, 0x3f, 0xf7, 0xff,
|
|
||||||
0x37, 0xff, 0xf7, 0xff, 0x18, 0x18, 0x00, 0x18, 0x00, 0x18, 0x18, 0x36,
|
|
||||||
0x30, 0x30, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x1f, 0xff, 0xff, 0x1f,
|
|
||||||
0xff, 0xff, 0x1f, 0x37, 0x3f, 0x37, 0xff, 0xf7, 0x37, 0xff, 0xf7, 0xff,
|
|
||||||
0x00, 0x00, 0x18, 0x18, 0x00, 0x18, 0x18, 0x36, 0x00, 0x36, 0x00, 0x36,
|
|
||||||
0x36, 0x00, 0x36, 0x00, 0x00, 0x00, 0x18, 0x18, 0x00, 0x18, 0x18, 0x36,
|
|
||||||
0x00, 0x36, 0x00, 0x36, 0x36, 0x00, 0x36, 0x00, 0x00, 0x00, 0x18, 0x18,
|
|
||||||
0x00, 0x18, 0x18, 0x36, 0x00, 0x36, 0x00, 0x36, 0x36, 0x00, 0x36, 0x00,
|
|
||||||
0x00, 0x00, 0x18, 0x18, 0x00, 0x18, 0x18, 0x36, 0x00, 0x36, 0x00, 0x36,
|
|
||||||
0x36, 0x00, 0x36, 0x00, 0x00, 0x00, 0x18, 0x18, 0x00, 0x18, 0x18, 0x36,
|
|
||||||
0x00, 0x36, 0x00, 0x36, 0x36, 0x00, 0x36, 0x00, 0x00, 0x00, 0x18, 0x18,
|
|
||||||
0x00, 0x18, 0x18, 0x36, 0x00, 0x36, 0x00, 0x36, 0x36, 0x00, 0x36, 0x00,
|
|
||||||
0x36, 0x00, 0x00, 0x36, 0x18, 0x00, 0x00, 0x36, 0x18, 0x18, 0x00, 0xff,
|
|
||||||
0x00, 0xf0, 0x0f, 0xff, 0x36, 0x00, 0x00, 0x36, 0x18, 0x00, 0x00, 0x36,
|
|
||||||
0x18, 0x18, 0x00, 0xff, 0x00, 0xf0, 0x0f, 0xff, 0x36, 0x00, 0x00, 0x36,
|
|
||||||
0x18, 0x00, 0x00, 0x36, 0x18, 0x18, 0x00, 0xff, 0x00, 0xf0, 0x0f, 0xff,
|
|
||||||
0x36, 0x00, 0x00, 0x36, 0x18, 0x00, 0x00, 0x36, 0x18, 0x18, 0x00, 0xff,
|
|
||||||
0x00, 0xf0, 0x0f, 0xff, 0x36, 0x00, 0x00, 0x36, 0x18, 0x00, 0x00, 0x36,
|
|
||||||
0x18, 0x18, 0x00, 0xff, 0x00, 0xf0, 0x0f, 0xff, 0x36, 0xff, 0x00, 0x36,
|
|
||||||
0x1f, 0x1f, 0x00, 0x36, 0xff, 0x18, 0x00, 0xff, 0x00, 0xf0, 0x0f, 0xff,
|
|
||||||
0x36, 0x00, 0x00, 0x36, 0x18, 0x18, 0x00, 0x36, 0x18, 0x18, 0x00, 0xff,
|
|
||||||
0x00, 0xf0, 0x0f, 0xff, 0xff, 0xff, 0xff, 0x3f, 0x1f, 0x1f, 0x3f, 0xff,
|
|
||||||
0xff, 0xf8, 0x1f, 0xff, 0xff, 0xf0, 0x0f, 0x00, 0x00, 0x18, 0x36, 0x00,
|
|
||||||
0x00, 0x18, 0x36, 0x36, 0x18, 0x00, 0x18, 0xff, 0xff, 0xf0, 0x0f, 0x00,
|
|
||||||
0x00, 0x18, 0x36, 0x00, 0x00, 0x18, 0x36, 0x36, 0x18, 0x00, 0x18, 0xff,
|
|
||||||
0xff, 0xf0, 0x0f, 0x00, 0x00, 0x18, 0x36, 0x00, 0x00, 0x18, 0x36, 0x36,
|
|
||||||
0x18, 0x00, 0x18, 0xff, 0xff, 0xf0, 0x0f, 0x00, 0x00, 0x18, 0x36, 0x00,
|
|
||||||
0x00, 0x18, 0x36, 0x36, 0x18, 0x00, 0x18, 0xff, 0xff, 0xf0, 0x0f, 0x00,
|
|
||||||
0x00, 0x18, 0x36, 0x00, 0x00, 0x18, 0x36, 0x36, 0x18, 0x00, 0x18, 0xff,
|
|
||||||
0xff, 0xf0, 0x0f, 0x00, 0x00, 0x18, 0x36, 0x00, 0x00, 0x18, 0x36, 0x36,
|
|
||||||
0x18, 0x00, 0x18, 0xff, 0xff, 0xf0, 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, 0x00, 0x00, 0x00, 0x00, 0xfe, 0x00, 0xfe, 0x00, 0x00, 0x00,
|
|
||||||
0x7e, 0x38, 0x38, 0x1e, 0x00, 0x03, 0x1c, 0x00, 0x00, 0x00, 0xc6, 0x00,
|
|
||||||
0xc6, 0x00, 0x00, 0x00, 0x18, 0x6c, 0x6c, 0x30, 0x00, 0x06, 0x30, 0x7c,
|
|
||||||
0x00, 0x7c, 0xc6, 0xfe, 0x60, 0x00, 0x66, 0x76, 0x3c, 0xc6, 0xc6, 0x18,
|
|
||||||
0x00, 0x7e, 0x60, 0xc6, 0x76, 0xc6, 0xc0, 0x6c, 0x30, 0x7e, 0x66, 0xdc,
|
|
||||||
0x66, 0xc6, 0xc6, 0x0c, 0x7e, 0xdb, 0x60, 0xc6, 0xdc, 0xfc, 0xc0, 0x6c,
|
|
||||||
0x18, 0xd8, 0x66, 0x18, 0x66, 0xfe, 0xc6, 0x3e, 0xdb, 0xdb, 0x7c, 0xc6,
|
|
||||||
0xd8, 0xc6, 0xc0, 0x6c, 0x30, 0xd8, 0x66, 0x18, 0x66, 0xc6, 0x6c, 0x66,
|
|
||||||
0xdb, 0xf3, 0x60, 0xc6, 0xd8, 0xc6, 0xc0, 0x6c, 0x60, 0xd8, 0x7c, 0x18,
|
|
||||||
0x3c, 0xc6, 0x6c, 0x66, 0x7e, 0x7e, 0x60, 0xc6, 0xdc, 0xfc, 0xc0, 0x6c,
|
|
||||||
0xc6, 0xd8, 0x60, 0x18, 0x18, 0x6c, 0x6c, 0x66, 0x00, 0x60, 0x30, 0xc6,
|
|
||||||
0x76, 0xc0, 0xc0, 0x6c, 0xfe, 0x70, 0x60, 0x18, 0x7e, 0x38, 0xee, 0x3c,
|
|
||||||
0x00, 0xc0, 0x1c, 0xc6, 0x00, 0xc0, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 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, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x18, 0x00, 0x00, 0x38, 0x00, 0x00, 0x0f, 0xd8, 0x70, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x30, 0x0c, 0x0e, 0x18, 0x00, 0x00, 0x6c, 0x00, 0x00, 0x0c,
|
|
||||||
0x6c, 0xd8, 0x00, 0x00, 0xfe, 0x18, 0x18, 0x18, 0x1b, 0x18, 0x18, 0x00,
|
|
||||||
0x6c, 0x00, 0x00, 0x0c, 0x6c, 0x30, 0x00, 0x00, 0x00, 0x18, 0x0c, 0x30,
|
|
||||||
0x1b, 0x18, 0x18, 0x76, 0x38, 0x00, 0x00, 0x0c, 0x6c, 0x60, 0x7c, 0x00,
|
|
||||||
0x00, 0x7e, 0x06, 0x60, 0x18, 0x18, 0x00, 0xdc, 0x00, 0x00, 0x00, 0x0c,
|
|
||||||
0x6c, 0xc8, 0x7c, 0x00, 0xfe, 0x18, 0x0c, 0x30, 0x18, 0x18, 0x7e, 0x00,
|
|
||||||
0x00, 0x18, 0x00, 0x0c, 0x6c, 0xf8, 0x7c, 0x00, 0x00, 0x18, 0x18, 0x18,
|
|
||||||
0x18, 0x18, 0x00, 0x76, 0x00, 0x18, 0x18, 0xec, 0x00, 0x00, 0x7c, 0x00,
|
|
||||||
0x00, 0x00, 0x30, 0x0c, 0x18, 0xd8, 0x18, 0xdc, 0x00, 0x00, 0x00, 0x6c,
|
|
||||||
0x00, 0x00, 0x7c, 0x00, 0xfe, 0x00, 0x00, 0x00, 0x18, 0xd8, 0x18, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x3c, 0x00, 0x00, 0x7c, 0x00, 0x00, 0xff, 0x7e, 0x7e,
|
|
||||||
0x18, 0x70, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00,
|
|
||||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
|
||||||
0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
|
|
||||||
};
|
|
||||||
unsigned int vga8x14_dat_len = 3588;
|
|
||||||
|
|
||||||
#else // EMBED_HERE
|
|
||||||
|
|
||||||
extern unsigned char vga8x14_dat[];
|
|
||||||
extern unsigned int vga8x14_dat_len;
|
|
||||||
|
|
||||||
#endif // EMBED_HERE
|
|
||||||
|
|
||||||
|
|
||||||
#pragma GCC diagnostic pop
|
|
||||||
|
|
||||||
|
|
||||||
#endif // VGA8X14_DAT_H
|
|
|
@ -25,7 +25,6 @@
|
||||||
#include "widget.h"
|
#include "widget.h"
|
||||||
#include "desktop.h"
|
#include "desktop.h"
|
||||||
#include "window.h"
|
#include "window.h"
|
||||||
#include "embedded/embedded.h"
|
|
||||||
|
|
||||||
|
|
||||||
typedef struct PendingEventsS {
|
typedef struct PendingEventsS {
|
||||||
|
@ -662,8 +661,8 @@ DesktopT *guiStartup(void) {
|
||||||
_guiColor[COLOR_LISTBOX_ARROWS_ACTIVE] = vbeColorMake(168, 168, 168);
|
_guiColor[COLOR_LISTBOX_ARROWS_ACTIVE] = vbeColorMake(168, 168, 168);
|
||||||
_guiColor[COLOR_LISTBOX_ARROWS_INACTIVE] = vbeColorMake( 80, 84, 80);
|
_guiColor[COLOR_LISTBOX_ARROWS_INACTIVE] = vbeColorMake( 80, 84, 80);
|
||||||
|
|
||||||
// Load font.
|
// Load font. ***TODO*** This should probably be provided by an API call to remove it from in here.
|
||||||
_guiFont = fontFromRAMLoad(vga8x14_dat);
|
_guiFont = fontLoad(cacheFilenameGet("system:vga8x14"));
|
||||||
|
|
||||||
// Create desktop and return it. Remember it for later.
|
// Create desktop and return it. Remember it for later.
|
||||||
_guiDesktop = desktopNew();
|
_guiDesktop = desktopNew();
|
||||||
|
|
|
@ -55,12 +55,13 @@ static ButtonT *_btnTwo = NULL;
|
||||||
static ButtonT *_btnThree = NULL;
|
static ButtonT *_btnThree = NULL;
|
||||||
|
|
||||||
|
|
||||||
|
//***TODO*** This depends on the cache system which isn't really part of the GUI.
|
||||||
static char *_iconFiles[MSGBOX_ICON_COUNT] = {
|
static char *_iconFiles[MSGBOX_ICON_COUNT] = {
|
||||||
"data/mbie32.png",
|
"system:exclamation",
|
||||||
"data/mbiw32.png",
|
"system:warning",
|
||||||
"data/mbii32.png",
|
"system:information",
|
||||||
"data/mbim32.png",
|
"system:message",
|
||||||
"data/mbiq32.png"
|
"system:question"
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
@ -173,7 +174,7 @@ void msgBoxThree(char *title, MsgBoxIconT icon, char *message, char *buttonOne,
|
||||||
|
|
||||||
// Load proper icon, if desired.
|
// Load proper icon, if desired.
|
||||||
if (icon > MSGBOX_ICON_NONE && icon < MSGBOX_ICON_COUNT) {
|
if (icon > MSGBOX_ICON_NONE && icon < MSGBOX_ICON_COUNT) {
|
||||||
_picIcon = pictureNew(x, y, _iconFiles[icon - 1]);
|
_picIcon = pictureNew(x, y, cacheFilenameGet(_iconFiles[icon - 1]));
|
||||||
guiAttach(W(_winDialog), W(_picIcon));
|
guiAttach(W(_winDialog), W(_picIcon));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -75,7 +75,7 @@ static uint8_t _takeScreenshot = 0;
|
||||||
|
|
||||||
|
|
||||||
static void comAddToBuffer(char *data, uint16_t len);
|
static void comAddToBuffer(char *data, uint16_t len);
|
||||||
static void comBufferShow(void);
|
//static void comBufferShow(void);
|
||||||
static void comModem(uint8_t c);
|
static void comModem(uint8_t c);
|
||||||
static void processEvent(void);
|
static void processEvent(void);
|
||||||
static void processNetworkEvent(void);
|
static void processNetworkEvent(void);
|
||||||
|
@ -98,6 +98,7 @@ static void comAddToBuffer(char *data, uint16_t len) {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
static void comBufferShow(void) {
|
static void comBufferShow(void) {
|
||||||
uint16_t x = _bufferTail;
|
uint16_t x = _bufferTail;
|
||||||
|
|
||||||
|
@ -109,6 +110,7 @@ static void comBufferShow(void) {
|
||||||
}
|
}
|
||||||
logWrite("}\n");
|
logWrite("}\n");
|
||||||
}
|
}
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
int comClose(int com) {
|
int comClose(int com) {
|
||||||
|
|
|
@ -48,7 +48,6 @@
|
||||||
#include "comport.h"
|
#include "comport.h"
|
||||||
#include "network.h"
|
#include "network.h"
|
||||||
#include "timer.h"
|
#include "timer.h"
|
||||||
#include "embedded/embedded.h"
|
|
||||||
|
|
||||||
#include "welcome.h"
|
#include "welcome.h"
|
||||||
#include "settings.h"
|
#include "settings.h"
|
||||||
|
@ -109,6 +108,7 @@ static void eventLoop(void) {
|
||||||
|
|
||||||
|
|
||||||
static uint8_t hasValidSettings(void) {
|
static uint8_t hasValidSettings(void) {
|
||||||
|
// Returning false sends us immediately to the settings dialog.
|
||||||
return (__configData.serialCom > 0 && __configData.serialCom < 5);
|
return (__configData.serialCom > 0 && __configData.serialCom < 5);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -121,6 +121,7 @@ static void shutdown(void) {
|
||||||
|
|
||||||
imageUnload(&_pointer);
|
imageUnload(&_pointer);
|
||||||
|
|
||||||
|
cacheShutdown();
|
||||||
netShutdown();
|
netShutdown();
|
||||||
guiShutdown();
|
guiShutdown();
|
||||||
mouseShutdown();
|
mouseShutdown();
|
||||||
|
@ -186,8 +187,9 @@ static uint8_t startup(int argc, char *argv[]) {
|
||||||
mouseStartup();
|
mouseStartup();
|
||||||
guiStartup();
|
guiStartup();
|
||||||
netStartup();
|
netStartup();
|
||||||
|
cacheStartup(argv[0]);
|
||||||
|
|
||||||
_pointer = imageFromRAMLoad(mouse_png, mouse_png_len);
|
_pointer = imageLoad(cacheFilenameGet("system:mouse"));
|
||||||
_alpha = imagePixelGet(_pointer, 5, 0);
|
_alpha = imagePixelGet(_pointer, 5, 0);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
|
447
client/src/system/cache.c
Normal file
447
client/src/system/cache.c
Normal file
|
@ -0,0 +1,447 @@
|
||||||
|
/*
|
||||||
|
* Kangaroo Punch MultiPlayer Game Server Mark II
|
||||||
|
* Copyright (C) 2020-2021 Scott Duensing
|
||||||
|
*
|
||||||
|
* This program is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation, either version 3 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
// ***TODO*** Maybe add a cacheFOpen() and cacheFClose() for reading and writing directly to virtual pathnames?
|
||||||
|
|
||||||
|
|
||||||
|
#include "thirdparty/SHA256/sha256.h"
|
||||||
|
|
||||||
|
#include "cache.h"
|
||||||
|
|
||||||
|
|
||||||
|
#define CACHE_FIELD_SHA256 0
|
||||||
|
#define CACHE_FIELD_ENTRYNAME 1
|
||||||
|
#define CACHE_FIELD_FILENAME 2
|
||||||
|
|
||||||
|
|
||||||
|
static char *cacheEntryNameDirGet(char *entryName, uint8_t includeCache);
|
||||||
|
static char *cacheEntryNameGenerate(void);
|
||||||
|
static char *cacheFieldGet(char *virtualPath, uint8_t field);
|
||||||
|
|
||||||
|
|
||||||
|
uint8_t cacheDelete(char *virtualPath) {
|
||||||
|
FILE *in = NULL;
|
||||||
|
FILE *out = NULL;
|
||||||
|
char index[16] = { 0 };
|
||||||
|
char indexNew[16] = { 0 };
|
||||||
|
char buffer[1024] = { 0 };
|
||||||
|
char *name = NULL;
|
||||||
|
char *path = NULL;
|
||||||
|
char *dir2 = NULL;
|
||||||
|
char *dir1 = NULL;
|
||||||
|
char *entryDir = NULL;
|
||||||
|
|
||||||
|
// Deletes entry from cache index AND the data from the cache.
|
||||||
|
|
||||||
|
sprintf(index, "CACHE%cINDEX.DAT", OS_PATH_SLASH);
|
||||||
|
sprintf(indexNew, "CACHE%cINDEX.NEW", OS_PATH_SLASH);
|
||||||
|
|
||||||
|
// Do we have an index yet?
|
||||||
|
if (osFileExists(index)) {
|
||||||
|
in = fopen(index, "rt");
|
||||||
|
if (in) {
|
||||||
|
out = fopen(indexNew, "wt");
|
||||||
|
if (out) {
|
||||||
|
while (fgets(buffer, 1024, in) != 0) {
|
||||||
|
name = strstr(buffer, " ");
|
||||||
|
*name = 0;
|
||||||
|
name++;
|
||||||
|
path = strstr(name, " ");
|
||||||
|
*path = 0;
|
||||||
|
path++;
|
||||||
|
path[strlen(path) - 1] = 0;
|
||||||
|
if (strcmp(virtualPath, path) == 0) {
|
||||||
|
// Found! Delete data from disk.
|
||||||
|
entryDir = cacheEntryNameDirGet(name, 1);
|
||||||
|
unlink(entryDir);
|
||||||
|
// Attempt to remove the second-level directory.
|
||||||
|
dir2 = osLastPathComponentGetUpTo(entryDir);
|
||||||
|
if (rmdir(dir2) == 0) {
|
||||||
|
// Attempt to move the top level directory.
|
||||||
|
dir1 = osLastPathComponentGetUpTo(dir2);
|
||||||
|
rmdir(dir1);
|
||||||
|
DEL(dir1);
|
||||||
|
}
|
||||||
|
DEL(dir2);
|
||||||
|
} else {
|
||||||
|
// Not what we're after, copy to new index.
|
||||||
|
fprintf(out, "%s %s %s\n", buffer, name, path);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
fclose(in);
|
||||||
|
return FAIL;
|
||||||
|
}
|
||||||
|
fclose(in);
|
||||||
|
unlink(index);
|
||||||
|
rename(indexNew, index);
|
||||||
|
return SUCCESS;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return FAIL;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
uint8_t cacheEntryAdd(char *sha256, char *entryName, char *virtualPath) {
|
||||||
|
FILE *in = NULL;
|
||||||
|
FILE *out = NULL;
|
||||||
|
char index[16] = { 0 };
|
||||||
|
char indexNew[16] = { 0 };
|
||||||
|
char *name = NULL;
|
||||||
|
char *path = NULL;
|
||||||
|
char buffer[1024] = { 0 };
|
||||||
|
uint8_t found = 0;
|
||||||
|
|
||||||
|
// This adds or updates an entry to the index.
|
||||||
|
// It does not add data to the actual cache.
|
||||||
|
|
||||||
|
// Index format is: SHA256 ENTRYNAME VIRTUALPATH
|
||||||
|
|
||||||
|
sprintf(index, "CACHE%cINDEX.DAT", OS_PATH_SLASH);
|
||||||
|
sprintf(indexNew, "CACHE%cINDEX.NEW", OS_PATH_SLASH);
|
||||||
|
|
||||||
|
// Do we have an index yet?
|
||||||
|
if (!osFileExists(index)) {
|
||||||
|
// Nope. Just add this entry and be done.
|
||||||
|
out = fopen(index, "wt");
|
||||||
|
if (out) {
|
||||||
|
fprintf(out, "%s %s %s\n", sha256, entryName, virtualPath);
|
||||||
|
fclose(out);
|
||||||
|
return SUCCESS;
|
||||||
|
}
|
||||||
|
return FAIL;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Read existing index, update the entry if it exists.
|
||||||
|
// If not, we'll add it at the end.
|
||||||
|
in = fopen(index, "rt");
|
||||||
|
if (in) {
|
||||||
|
out = fopen(indexNew, "wt");
|
||||||
|
if (out) {
|
||||||
|
while (fgets(buffer, 1024, in) != 0) {
|
||||||
|
name = strstr(buffer, " ");
|
||||||
|
*name = 0;
|
||||||
|
name++;
|
||||||
|
path = strstr(name, " ");
|
||||||
|
*path = 0;
|
||||||
|
path++;
|
||||||
|
path[strlen(path) - 1] = 0;
|
||||||
|
if (strcmp(virtualPath, path) == 0) {
|
||||||
|
// Update this entry.
|
||||||
|
fprintf(out, "%s %s %s\n", sha256, entryName, virtualPath);
|
||||||
|
found = 1;
|
||||||
|
} else {
|
||||||
|
// Not what we're after, copy to new index.
|
||||||
|
fprintf(out, "%s %s %s\n", buffer, name, path);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// Did we replace an entry?
|
||||||
|
if (!found) {
|
||||||
|
// Add new entry to end.
|
||||||
|
fprintf(out, "%s %s %s\n", sha256, entryName, virtualPath);
|
||||||
|
}
|
||||||
|
fclose(out);
|
||||||
|
} else {
|
||||||
|
fclose(in);
|
||||||
|
return FAIL;
|
||||||
|
}
|
||||||
|
fclose(in);
|
||||||
|
unlink(index);
|
||||||
|
rename(indexNew, index);
|
||||||
|
return SUCCESS;
|
||||||
|
}
|
||||||
|
|
||||||
|
return FAIL;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
static char *cacheEntryNameDirGet(char *entryName, uint8_t includeCache) {
|
||||||
|
uint8_t i = 0;
|
||||||
|
uint8_t j = 0;
|
||||||
|
static char dir[21] = "CACHE";
|
||||||
|
|
||||||
|
dir[5] = OS_PATH_SLASH;
|
||||||
|
|
||||||
|
j = 6;
|
||||||
|
for (i=0; i<13; i++) {
|
||||||
|
dir[j++] = entryName[i];
|
||||||
|
if ((i == 1) || (i == 3)) {
|
||||||
|
dir[j++] = OS_PATH_SLASH;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
dir[20] = 0;
|
||||||
|
|
||||||
|
return includeCache ? dir : &dir[6];
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
static char *cacheEntryNameGenerate(void) {
|
||||||
|
uint8_t i = 0;
|
||||||
|
static char name[13] = { 0 };
|
||||||
|
|
||||||
|
// Cached files are stored in a two-layer directory tree to
|
||||||
|
// reduce the number of files in any single folder.
|
||||||
|
// The folder names are two digits.
|
||||||
|
// The filename is eight random letters.
|
||||||
|
|
||||||
|
// First directory level.
|
||||||
|
i = random() % 100;
|
||||||
|
sprintf(&name[0], "%02d", i);
|
||||||
|
|
||||||
|
// Second directory level.
|
||||||
|
i = random() % 100;
|
||||||
|
sprintf(&name[2], "%02d", i);
|
||||||
|
|
||||||
|
// Random name.
|
||||||
|
for (i=4; i<12; i++) name[i] = 'A' + (random() % 26);
|
||||||
|
|
||||||
|
name[12] = 0;
|
||||||
|
|
||||||
|
return name;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
char *cacheEntryNameGet(char *virtualPath) {
|
||||||
|
return cacheFieldGet(virtualPath, CACHE_FIELD_ENTRYNAME);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
uint8_t cacheExists(void) {
|
||||||
|
char index[16] = { 0 };
|
||||||
|
|
||||||
|
sprintf(index, "CACHE%cINDEX.DAT", OS_PATH_SLASH);
|
||||||
|
|
||||||
|
return osFileExists(index);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
static char *cacheFieldGet(char *virtualPath, uint8_t field) {
|
||||||
|
FILE *in = NULL;
|
||||||
|
char index[16] = { 0 };
|
||||||
|
static char buffer[1024] = { 0 };
|
||||||
|
static char *name = NULL;
|
||||||
|
static char *path = NULL;
|
||||||
|
static char *result = NULL;
|
||||||
|
|
||||||
|
// Return SHA256 given virtual path or NULL if not found.
|
||||||
|
|
||||||
|
sprintf(index, "CACHE%cINDEX.DAT", OS_PATH_SLASH);
|
||||||
|
|
||||||
|
result = NULL;
|
||||||
|
|
||||||
|
// Do we have an index yet?
|
||||||
|
if (osFileExists(index)) {
|
||||||
|
in = fopen(index, "rt");
|
||||||
|
if (in) {
|
||||||
|
while ((fgets(buffer, 1024, in) != 0) && result == NULL) {
|
||||||
|
name = strstr(buffer, " ");
|
||||||
|
*name = 0;
|
||||||
|
name++;
|
||||||
|
path = strstr(name, " ");
|
||||||
|
*path = 0;
|
||||||
|
path++;
|
||||||
|
path[strlen(path) - 1] = 0;
|
||||||
|
if (strcmp(virtualPath, path) == 0) {
|
||||||
|
// Found! Return requested data.
|
||||||
|
switch (field) {
|
||||||
|
case CACHE_FIELD_SHA256:
|
||||||
|
result = buffer;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case CACHE_FIELD_ENTRYNAME:
|
||||||
|
result = name;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case CACHE_FIELD_FILENAME:
|
||||||
|
result = cacheEntryNameDirGet(name, 1);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
fclose(in);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
char *cacheFilenameGet(char *virtualPath) {
|
||||||
|
return cacheFieldGet(virtualPath, CACHE_FIELD_FILENAME);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
uint8_t cachePrePack(char *name, CachePreMakeListT *list) {
|
||||||
|
|
||||||
|
FILE *in = NULL;
|
||||||
|
FILE *out = NULL;
|
||||||
|
uint16_t i = 0;
|
||||||
|
uint8_t result = SUCCESS;
|
||||||
|
uint32_t length = 0;
|
||||||
|
uint32_t total = 0;
|
||||||
|
uint32_t temp = 0;
|
||||||
|
int8_t buffer[8192] = { 0 };
|
||||||
|
sha256_context ctx = { 0 };
|
||||||
|
uint8_t hv[32] = { 0 };
|
||||||
|
|
||||||
|
// Prebuilt cache format:
|
||||||
|
// - Virtual Path (zero terminated)
|
||||||
|
// - x bytes hash
|
||||||
|
// - 4 bytes unsigned length of data
|
||||||
|
// - length bytes of data
|
||||||
|
// ... repeat for each file ...
|
||||||
|
// - 4 bytes length of entire cache (used for embedding cache data)
|
||||||
|
|
||||||
|
out = fopen(name, "wb");
|
||||||
|
if (out) {
|
||||||
|
while (list[i].filename != NULL) {
|
||||||
|
in = fopen(list[i].filename, "rb");
|
||||||
|
if (in) {
|
||||||
|
// Get length of file.
|
||||||
|
fseek(in, 0, SEEK_END);
|
||||||
|
length = ftell(in);
|
||||||
|
fseek(in, 0, SEEK_SET);
|
||||||
|
// Generate SHA256.
|
||||||
|
sha256_init(&ctx);
|
||||||
|
do {
|
||||||
|
temp = fread(buffer, 1, sizeof(buffer), in);
|
||||||
|
if (temp) sha256_hash(&ctx, (uint8_t *)buffer, temp);
|
||||||
|
} while (temp > 0);
|
||||||
|
sha256_done(&ctx, hv);
|
||||||
|
fseek(in, 0, SEEK_SET);
|
||||||
|
// Write header.
|
||||||
|
temp = strlen(list[i].virtualPath) + 1;
|
||||||
|
fwrite(list[i].virtualPath, temp, 1, out);
|
||||||
|
fwrite(hv, sizeof(hv), 1, out);
|
||||||
|
fwrite(&length, sizeof(uint32_t), 1, out);
|
||||||
|
total += temp + sizeof(hv) + sizeof(uint32_t) + length;
|
||||||
|
// Copy data.
|
||||||
|
do {
|
||||||
|
temp = fread(buffer, 1, sizeof(buffer), in);
|
||||||
|
if (temp) fwrite(buffer, 1, temp, out);
|
||||||
|
} while (temp > 0);
|
||||||
|
fclose(in);
|
||||||
|
} else {
|
||||||
|
result = FAIL;
|
||||||
|
}
|
||||||
|
i++;
|
||||||
|
}
|
||||||
|
// Write length of entire block.
|
||||||
|
total += sizeof(uint32_t);
|
||||||
|
fwrite(&total, sizeof(uint32_t), 1, out);
|
||||||
|
fclose(out);
|
||||||
|
} else {
|
||||||
|
result = FAIL;
|
||||||
|
}
|
||||||
|
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
uint8_t cachePreUnpack(char *name) {
|
||||||
|
FILE *in = NULL;
|
||||||
|
FILE *out = NULL;
|
||||||
|
char *entryName = NULL;
|
||||||
|
char *entryDir = NULL;
|
||||||
|
char *temp = NULL;
|
||||||
|
uint8_t result = SUCCESS;
|
||||||
|
uint32_t i = 0;
|
||||||
|
uint32_t length = 0;
|
||||||
|
uint32_t total = 0;
|
||||||
|
int8_t buffer[8192] = { 0 };
|
||||||
|
uint8_t hv[32] = { 0 };
|
||||||
|
char virtualPath[CACHE_VIRTUAL_PATH_MAX] = { 0 };
|
||||||
|
|
||||||
|
in = fopen(name, "rb");
|
||||||
|
if (in) {
|
||||||
|
// Get entire pack size.
|
||||||
|
fseek(in, -sizeof(uint32_t), SEEK_END);
|
||||||
|
fread(&total, 1, sizeof(uint32_t), in);
|
||||||
|
fseek(in, 0, SEEK_SET);
|
||||||
|
do {
|
||||||
|
// Read virtual path.
|
||||||
|
i = 0;
|
||||||
|
do {
|
||||||
|
virtualPath[i++] = fgetc(in);
|
||||||
|
} while (virtualPath[i - 1] != 0);
|
||||||
|
// Read SHA256.
|
||||||
|
fread(hv, 1, sizeof(hv), in);
|
||||||
|
for (i=0; i<32; i++) sprintf((char *)&buffer[i * 2], "%02x", hv[i]);
|
||||||
|
buffer[64] = 0;
|
||||||
|
// Read length.
|
||||||
|
fread(&length, 1, sizeof(uint32_t), in);
|
||||||
|
// Get filename from cache manager & create missing directories.
|
||||||
|
do {
|
||||||
|
entryName = cacheEntryNameGenerate();
|
||||||
|
entryDir = cacheEntryNameDirGet(entryName, 1);
|
||||||
|
temp = osLastPathComponentGetUpTo(entryDir);
|
||||||
|
osMkDirP(temp);
|
||||||
|
DEL(temp);
|
||||||
|
} while (osFileExists(entryDir));
|
||||||
|
cacheEntryAdd((char *)buffer, entryName, virtualPath);
|
||||||
|
out = fopen(entryDir, "wb");
|
||||||
|
if (out) {
|
||||||
|
// Copy out data.
|
||||||
|
do {
|
||||||
|
if (length > sizeof(buffer)) {
|
||||||
|
i = sizeof(buffer);
|
||||||
|
} else {
|
||||||
|
i = length;
|
||||||
|
}
|
||||||
|
length -= i;
|
||||||
|
fread(buffer, 1, i, in);
|
||||||
|
fwrite(buffer, 1, i, out);
|
||||||
|
} while (length > 0);
|
||||||
|
fclose(out);
|
||||||
|
} else {
|
||||||
|
result = FAIL;
|
||||||
|
}
|
||||||
|
} while ((unsigned)ftell(in) < (total - sizeof(uint32_t)));
|
||||||
|
fclose(in);
|
||||||
|
} else {
|
||||||
|
result = FAIL;
|
||||||
|
}
|
||||||
|
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
char *cacheSha256Get(char *virtualPath) {
|
||||||
|
return cacheFieldGet(virtualPath, CACHE_FIELD_SHA256);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void cacheShutdown(void) {
|
||||||
|
// Nada.
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void cacheStartup(char *appName) {
|
||||||
|
char *temp = NULL;
|
||||||
|
|
||||||
|
// Do we need to unpack the initial cache?
|
||||||
|
if (!cacheExists()) {
|
||||||
|
temp = utilAppNameWithNewExtensionGet(appName, "pre");
|
||||||
|
cachePreUnpack(temp);
|
||||||
|
DEL(temp);
|
||||||
|
}
|
||||||
|
}
|
|
@ -18,12 +18,32 @@
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
||||||
#ifndef EMBEDDED_H
|
#ifndef CACHE_H
|
||||||
#define EMBEDDED_H
|
#define CACHE_H
|
||||||
|
|
||||||
|
|
||||||
#include "mouse.h"
|
#include "os.h"
|
||||||
#include "vga8x14.h"
|
|
||||||
|
|
||||||
|
|
||||||
#endif // EMBEDDED_H
|
#define CACHE_VIRTUAL_PATH_MAX 512
|
||||||
|
|
||||||
|
|
||||||
|
typedef struct CachePreMakeListS {
|
||||||
|
char *filename;
|
||||||
|
char *virtualPath;
|
||||||
|
} CachePreMakeListT;
|
||||||
|
|
||||||
|
|
||||||
|
uint8_t cacheDelete(char *virtualPath);
|
||||||
|
uint8_t cacheEntryAdd(char *sha256, char *entryName, char *virtualPath);
|
||||||
|
char *cacheEntryNameGet(char *virtualPath);
|
||||||
|
uint8_t cacheExists(void);
|
||||||
|
char *cacheFilenameGet(char *virtualPath);
|
||||||
|
uint8_t cachePrePack(char *name, CachePreMakeListT *list);
|
||||||
|
uint8_t cachePreUnpack(char *name);
|
||||||
|
char *cacheSha256Get(char *virtualPath);
|
||||||
|
void cacheShutdown(void);
|
||||||
|
void cacheStartup(char *appName);
|
||||||
|
|
||||||
|
|
||||||
|
#endif // CACHE_H
|
|
@ -31,6 +31,155 @@ uint8_t osFileExists(char *filename) {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
char *osLastPathComponentGet(char *pathname) {
|
||||||
|
static char *start;
|
||||||
|
int32_t x;
|
||||||
|
|
||||||
|
start = pathname;
|
||||||
|
|
||||||
|
// Scan through name and find the last path separator
|
||||||
|
for (x=0; x<(int32_t)strlen(pathname); x++) {
|
||||||
|
if (pathname[x] == '\\' || pathname[x] == '/') {
|
||||||
|
start = &pathname[x + 1];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return start;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
char *osLastPathComponentGetUpTo(char *pathname) {
|
||||||
|
static char *copy = NULL;
|
||||||
|
uint8_t dumb = 0; // Using (copy == NULL) below didn't work after optimizations, so ente
|
||||||
|
int32_t x;
|
||||||
|
|
||||||
|
x = (int32_t)(strlen(pathname) - strlen(osLastPathComponentGet(pathname))) - 1;
|
||||||
|
if (x < 0) x = 0;
|
||||||
|
if (dumb) {
|
||||||
|
free(copy);
|
||||||
|
copy = NULL;
|
||||||
|
} else {
|
||||||
|
dumb = 1;
|
||||||
|
}
|
||||||
|
copy = strdup(pathname);
|
||||||
|
copy[x] = 0;
|
||||||
|
osPathSeparatorsFix(©, 1);
|
||||||
|
|
||||||
|
return copy;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
int8_t osMkDir(char *dir) {
|
||||||
|
return mkdir(dir, 0777);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
uint8_t osMkDirP(char *dir) {
|
||||||
|
char tmp[OS_PATH_MAX];
|
||||||
|
char *p = NULL;
|
||||||
|
struct stat sb;
|
||||||
|
size_t len;
|
||||||
|
|
||||||
|
// Make copy of dir.
|
||||||
|
len = strnlen(dir, OS_PATH_MAX);
|
||||||
|
if (len == 0 || len == OS_PATH_MAX) {
|
||||||
|
return FAIL;
|
||||||
|
}
|
||||||
|
memcpy(tmp, dir, len);
|
||||||
|
tmp[len] = '\0';
|
||||||
|
|
||||||
|
// Remove trailing slash.
|
||||||
|
if (tmp[len - 1] == OS_PATH_SLASH) {
|
||||||
|
tmp[len - 1] = '\0';
|
||||||
|
}
|
||||||
|
|
||||||
|
// Does it already exist?
|
||||||
|
if (stat(tmp, &sb) == 0) {
|
||||||
|
if (S_ISDIR (sb.st_mode)) {
|
||||||
|
return SUCCESS;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Recursive mkdir.
|
||||||
|
for (p = tmp + 1; *p; p++) {
|
||||||
|
if (*p == OS_PATH_SLASH) {
|
||||||
|
*p = 0;
|
||||||
|
if (stat(tmp, &sb) != 0) {
|
||||||
|
// Does not exist - create it.
|
||||||
|
if (osMkDir(tmp) < 0) {
|
||||||
|
return FAIL;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
if (!S_ISDIR(sb.st_mode)) {
|
||||||
|
// Not a directory
|
||||||
|
return FAIL;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
*p = OS_PATH_SLASH;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// Check path
|
||||||
|
if (stat(tmp, &sb) != 0) {
|
||||||
|
// Does not exist - create it.
|
||||||
|
if (osMkDir(tmp) < 0) {
|
||||||
|
return FAIL;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
if (!S_ISDIR(sb.st_mode)) {
|
||||||
|
// Not a directory
|
||||||
|
return FAIL;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return SUCCESS;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void osPathSeparatorsFix(char **path, uint8_t slash) {
|
||||||
|
|
||||||
|
int32_t i = 0;
|
||||||
|
int32_t j = 0;
|
||||||
|
char *work = *path;
|
||||||
|
char *temp = NULL;
|
||||||
|
|
||||||
|
// Flip path separators to whatever our OS wants & remove repeated separators.
|
||||||
|
while (work[i] != 0) {
|
||||||
|
// Correct separator
|
||||||
|
if (work[i] == '\\' || work[i] == '/') {
|
||||||
|
// Was the prior character a seprator?
|
||||||
|
if (j == 0) {
|
||||||
|
work[j++] = OS_PATH_SLASH;
|
||||||
|
} else {
|
||||||
|
if (work[j - 1] != OS_PATH_SLASH) {
|
||||||
|
// No, accept it.
|
||||||
|
work[j++] = OS_PATH_SLASH;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
work[j++] = work[i];
|
||||||
|
}
|
||||||
|
i++;
|
||||||
|
}
|
||||||
|
work[j] = 0;
|
||||||
|
|
||||||
|
if (slash) {
|
||||||
|
// Does this string end with a path separator?
|
||||||
|
if (work[strlen(work) - 1] != OS_PATH_SLASH) {
|
||||||
|
// No - append one.
|
||||||
|
temp = strdup(work);
|
||||||
|
free(work);
|
||||||
|
work = malloc(sizeof(char) * (strlen(temp) + 2));
|
||||||
|
strcpy(work, temp);
|
||||||
|
work[strlen(temp)] = OS_PATH_SLASH;
|
||||||
|
work[strlen(temp) + 1] = 0;
|
||||||
|
free(temp);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
*path = work;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
void osShutdown(void) {
|
void osShutdown(void) {
|
||||||
#ifdef __linux__
|
#ifdef __linux__
|
||||||
linuxOsShutdown();
|
linuxOsShutdown();
|
||||||
|
@ -42,4 +191,6 @@ void osStartup(void) {
|
||||||
#ifdef __linux__
|
#ifdef __linux__
|
||||||
linuxOsStartup();
|
linuxOsStartup();
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
srand(rawclock());
|
||||||
}
|
}
|
||||||
|
|
|
@ -42,10 +42,13 @@
|
||||||
#define TICKS_PER_SECOND 18.2
|
#define TICKS_PER_SECOND 18.2
|
||||||
#define TICKS_PER_DAY (SECONDS_IN_DAY * TICKS_PER_SECOND)
|
#define TICKS_PER_DAY (SECONDS_IN_DAY * TICKS_PER_SECOND)
|
||||||
|
|
||||||
|
#define OS_PATH_MAX 256
|
||||||
|
|
||||||
|
|
||||||
#ifdef __linux__
|
#ifdef __linux__
|
||||||
|
|
||||||
#define BITS64
|
#define BITS64
|
||||||
|
#define OS_PATH_SLASH '/'
|
||||||
|
|
||||||
// Linux DOS replacements.
|
// Linux DOS replacements.
|
||||||
uint32_t rawclock(void);
|
uint32_t rawclock(void);
|
||||||
|
@ -57,6 +60,7 @@ void linuxOsStartup(void);
|
||||||
#else
|
#else
|
||||||
|
|
||||||
#define BITS32
|
#define BITS32
|
||||||
|
#define PATH_SLASH '\\'
|
||||||
|
|
||||||
// DOS includes.
|
// DOS includes.
|
||||||
#include <dos.h>
|
#include <dos.h>
|
||||||
|
@ -78,6 +82,7 @@ void linuxOsStartup(void);
|
||||||
#include "log.h"
|
#include "log.h"
|
||||||
#include "util.h"
|
#include "util.h"
|
||||||
#include "packet.h"
|
#include "packet.h"
|
||||||
|
#include "cache.h"
|
||||||
|
|
||||||
|
|
||||||
// Allocation helpers.
|
// Allocation helpers.
|
||||||
|
@ -99,9 +104,14 @@ typedef struct PacketThreadDataS PacketThreadDataT;
|
||||||
extern PacketThreadDataT *__packetThreadData; // Declared in main.c
|
extern PacketThreadDataT *__packetThreadData; // Declared in main.c
|
||||||
|
|
||||||
|
|
||||||
uint8_t osFileExists(char *filename);
|
uint8_t osFileExists(char *filename);
|
||||||
void osShutdown(void);
|
char *osLastPathComponentGet(char *pathname);
|
||||||
void osStartup(void);
|
char *osLastPathComponentGetUpTo(char *pathname);
|
||||||
|
int8_t osMkDir(char *dir);
|
||||||
|
uint8_t osMkDirP(char *dir);
|
||||||
|
void osPathSeparatorsFix(char **path, uint8_t slash);
|
||||||
|
void osShutdown(void);
|
||||||
|
void osStartup(void);
|
||||||
|
|
||||||
|
|
||||||
#endif // OS_H
|
#endif // OS_H
|
||||||
|
|
21
client/src/thirdparty/SHA256/LICENSE
vendored
Normal file
21
client/src/thirdparty/SHA256/LICENSE
vendored
Normal file
|
@ -0,0 +1,21 @@
|
||||||
|
MIT License
|
||||||
|
|
||||||
|
Copyright (c) 2021 Ilya O. Levin
|
||||||
|
|
||||||
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
of this software and associated documentation files (the "Software"), to deal
|
||||||
|
in the Software without restriction, including without limitation the rights
|
||||||
|
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
copies of the Software, and to permit persons to whom the Software is
|
||||||
|
furnished to do so, subject to the following conditions:
|
||||||
|
|
||||||
|
The above copyright notice and this permission notice shall be included in all
|
||||||
|
copies or substantial portions of the Software.
|
||||||
|
|
||||||
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||||
|
SOFTWARE.
|
13
client/src/thirdparty/SHA256/README.md
vendored
Normal file
13
client/src/thirdparty/SHA256/README.md
vendored
Normal file
|
@ -0,0 +1,13 @@
|
||||||
|
# SHA256
|
||||||
|
|
||||||
|
SHA-256 implementation to compliment a portable byte-oriented AES-256
|
||||||
|
implementation in C at http://www.literatecode.com/aes256
|
||||||
|
|
||||||
|
There is also a newer version in the [mark2](mark2) directory. This version is
|
||||||
|
cleaner and closer to a reference implementation. It no longer has
|
||||||
|
built-in support features for endianness, but you may easily adapt
|
||||||
|
the code to different endianness shall you need that.
|
||||||
|
|
||||||
|
Unlike the previous implementation, the Mark 2 one is formally
|
||||||
|
verifiable with [CBMC](http://www.cprover.org/cbmc/)
|
||||||
|
|
32
client/src/thirdparty/SHA256/mark2/Makefile
vendored
Normal file
32
client/src/thirdparty/SHA256/mark2/Makefile
vendored
Normal file
|
@ -0,0 +1,32 @@
|
||||||
|
COMPLR = $(shell which clang >/dev/null; echo $$?)
|
||||||
|
ifeq "$(COMPLR)" "0"
|
||||||
|
CC = clang
|
||||||
|
CFLAGS=-Oz -pedantic -Wall -Wextra -Weverything
|
||||||
|
else
|
||||||
|
CC = gcc
|
||||||
|
CFLAGS=-O3 -pedantic -Wall -Wextra -std=c99
|
||||||
|
endif
|
||||||
|
|
||||||
|
CBMCH = $(shell cbmc --help)
|
||||||
|
CBMCFLAGS = --unwind 8 --partial-loops --bounds-check --pointer-check \
|
||||||
|
--div-by-zero-check --signed-overflow-check
|
||||||
|
|
||||||
|
TARGET = sha256
|
||||||
|
|
||||||
|
$(TARGET).o: sha256.c sha256.h
|
||||||
|
$(CC) $(CFLAGS) -c -o $@ $<
|
||||||
|
|
||||||
|
test: sha256.c sha256.h
|
||||||
|
$(CC) $(CFLAGS) -o $(TARGET) -DSELF_TEST $<
|
||||||
|
|
||||||
|
all: $(TARGET)
|
||||||
|
|
||||||
|
.PHONY: clean verify
|
||||||
|
|
||||||
|
clean:
|
||||||
|
rm -f $(TARGET) *.o
|
||||||
|
|
||||||
|
verify:
|
||||||
|
@# Unsigned overflows are deliberate, so we skip such checks to avoid
|
||||||
|
@# code complication with wrapping additions into a safeguard function
|
||||||
|
cbmc sha256.c -DSELF_TEST $(CBMCFLAGS) $(findstring --memory-leak-check,$(CBMCH))
|
298
client/src/thirdparty/SHA256/mark2/sha256.C
vendored
Normal file
298
client/src/thirdparty/SHA256/mark2/sha256.C
vendored
Normal file
|
@ -0,0 +1,298 @@
|
||||||
|
/*
|
||||||
|
* SHA-256 implementation, Mark 2
|
||||||
|
*
|
||||||
|
* Copyright (c) 2010,2014 Ilya O. Levin, http://www.literatecode.com
|
||||||
|
*
|
||||||
|
* Permission to use, copy, modify, and distribute this software for any
|
||||||
|
* purpose with or without fee is hereby granted, provided that the above
|
||||||
|
* copyright notice and this permission notice appear in all copies.
|
||||||
|
*
|
||||||
|
* THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
|
||||||
|
* WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
|
||||||
|
* MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
|
||||||
|
* ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
|
||||||
|
* WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
|
||||||
|
* ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
|
||||||
|
* OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
||||||
|
*/
|
||||||
|
#include "sha256.h"
|
||||||
|
/* #define MINIMIZE_STACK_IMPACT */
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" {
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#define FN_ inline static
|
||||||
|
|
||||||
|
static const uint32_t K[64] = {
|
||||||
|
0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5,
|
||||||
|
0x3956c25b, 0x59f111f1, 0x923f82a4, 0xab1c5ed5,
|
||||||
|
0xd807aa98, 0x12835b01, 0x243185be, 0x550c7dc3,
|
||||||
|
0x72be5d74, 0x80deb1fe, 0x9bdc06a7, 0xc19bf174,
|
||||||
|
0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc,
|
||||||
|
0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da,
|
||||||
|
0x983e5152, 0xa831c66d, 0xb00327c8, 0xbf597fc7,
|
||||||
|
0xc6e00bf3, 0xd5a79147, 0x06ca6351, 0x14292967,
|
||||||
|
0x27b70a85, 0x2e1b2138, 0x4d2c6dfc, 0x53380d13,
|
||||||
|
0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85,
|
||||||
|
0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3,
|
||||||
|
0xd192e819, 0xd6990624, 0xf40e3585, 0x106aa070,
|
||||||
|
0x19a4c116, 0x1e376c08, 0x2748774c, 0x34b0bcb5,
|
||||||
|
0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f, 0x682e6ff3,
|
||||||
|
0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208,
|
||||||
|
0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2
|
||||||
|
};
|
||||||
|
|
||||||
|
#ifdef MINIMIZE_STACK_IMPACT
|
||||||
|
static uint32_t W[64];
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* -------------------------------------------------------------------------- */
|
||||||
|
FN_ uint8_t _shb(uint32_t x, uint32_t n)
|
||||||
|
{
|
||||||
|
return ( (x >> (n & 31)) & 0xff );
|
||||||
|
} /* _shb */
|
||||||
|
|
||||||
|
/* -------------------------------------------------------------------------- */
|
||||||
|
FN_ uint32_t _shw(uint32_t x, uint32_t n)
|
||||||
|
{
|
||||||
|
return ( (x << (n & 31)) & 0xffffffff );
|
||||||
|
} /* _shw */
|
||||||
|
|
||||||
|
/* -------------------------------------------------------------------------- */
|
||||||
|
FN_ uint32_t _r(uint32_t x, uint8_t n)
|
||||||
|
{
|
||||||
|
return ( (x >> n) | _shw(x, 32 - n) );
|
||||||
|
} /* _r */
|
||||||
|
|
||||||
|
/* -------------------------------------------------------------------------- */
|
||||||
|
FN_ uint32_t _Ch(uint32_t x, uint32_t y, uint32_t z)
|
||||||
|
{
|
||||||
|
return ( (x & y) ^ ((~x) & z) );
|
||||||
|
} /* _Ch */
|
||||||
|
|
||||||
|
/* -------------------------------------------------------------------------- */
|
||||||
|
FN_ uint32_t _Ma(uint32_t x, uint32_t y, uint32_t z)
|
||||||
|
{
|
||||||
|
return ( (x & y) ^ (x & z) ^ (y & z) );
|
||||||
|
} /* _Ma */
|
||||||
|
|
||||||
|
/* -------------------------------------------------------------------------- */
|
||||||
|
FN_ uint32_t _S0(uint32_t x)
|
||||||
|
{
|
||||||
|
return ( _r(x, 2) ^ _r(x, 13) ^ _r(x, 22) );
|
||||||
|
} /* _S0 */
|
||||||
|
|
||||||
|
/* -------------------------------------------------------------------------- */
|
||||||
|
FN_ uint32_t _S1(uint32_t x)
|
||||||
|
{
|
||||||
|
return ( _r(x, 6) ^ _r(x, 11) ^ _r(x, 25) );
|
||||||
|
} /* _S1 */
|
||||||
|
|
||||||
|
/* -------------------------------------------------------------------------- */
|
||||||
|
FN_ uint32_t _G0(uint32_t x)
|
||||||
|
{
|
||||||
|
return ( _r(x, 7) ^ _r(x, 18) ^ (x >> 3) );
|
||||||
|
} /* _G0 */
|
||||||
|
|
||||||
|
/* -------------------------------------------------------------------------- */
|
||||||
|
FN_ uint32_t _G1(uint32_t x)
|
||||||
|
{
|
||||||
|
return ( _r(x, 17) ^ _r(x, 19) ^ (x >> 10) );
|
||||||
|
} /* _G1 */
|
||||||
|
|
||||||
|
/* -------------------------------------------------------------------------- */
|
||||||
|
FN_ uint32_t _word(uint8_t *c)
|
||||||
|
{
|
||||||
|
return ( _shw(c[0], 24) | _shw(c[1], 16) | _shw(c[2], 8) | (c[3]) );
|
||||||
|
} /* _word */
|
||||||
|
|
||||||
|
/* -------------------------------------------------------------------------- */
|
||||||
|
FN_ void _addbits(sha256_context *ctx, uint32_t n)
|
||||||
|
{
|
||||||
|
if ( ctx->bits[0] > (0xffffffff - n) )
|
||||||
|
ctx->bits[1] = (ctx->bits[1] + 1) & 0xFFFFFFFF;
|
||||||
|
ctx->bits[0] = (ctx->bits[0] + n) & 0xFFFFFFFF;
|
||||||
|
} /* _addbits */
|
||||||
|
|
||||||
|
/* -------------------------------------------------------------------------- */
|
||||||
|
static void _hash(sha256_context *ctx)
|
||||||
|
{
|
||||||
|
register uint32_t a, b, c, d, e, f, g, h, i;
|
||||||
|
uint32_t t[2];
|
||||||
|
#ifndef MINIMIZE_STACK_IMPACT
|
||||||
|
uint32_t W[64];
|
||||||
|
#endif
|
||||||
|
|
||||||
|
a = ctx->hash[0];
|
||||||
|
b = ctx->hash[1];
|
||||||
|
c = ctx->hash[2];
|
||||||
|
d = ctx->hash[3];
|
||||||
|
e = ctx->hash[4];
|
||||||
|
f = ctx->hash[5];
|
||||||
|
g = ctx->hash[6];
|
||||||
|
h = ctx->hash[7];
|
||||||
|
|
||||||
|
for (i = 0; i < 64; i++) {
|
||||||
|
if ( i < 16 )
|
||||||
|
W[i] = _word(&ctx->buf[_shw(i, 2)]);
|
||||||
|
else
|
||||||
|
W[i] = _G1(W[i - 2]) + W[i - 7] + _G0(W[i - 15]) + W[i - 16];
|
||||||
|
|
||||||
|
t[0] = h + _S1(e) + _Ch(e, f, g) + K[i] + W[i];
|
||||||
|
t[1] = _S0(a) + _Ma(a, b, c);
|
||||||
|
h = g;
|
||||||
|
g = f;
|
||||||
|
f = e;
|
||||||
|
e = d + t[0];
|
||||||
|
d = c;
|
||||||
|
c = b;
|
||||||
|
b = a;
|
||||||
|
a = t[0] + t[1];
|
||||||
|
}
|
||||||
|
|
||||||
|
ctx->hash[0] += a;
|
||||||
|
ctx->hash[1] += b;
|
||||||
|
ctx->hash[2] += c;
|
||||||
|
ctx->hash[3] += d;
|
||||||
|
ctx->hash[4] += e;
|
||||||
|
ctx->hash[5] += f;
|
||||||
|
ctx->hash[6] += g;
|
||||||
|
ctx->hash[7] += h;
|
||||||
|
} /* _hash */
|
||||||
|
|
||||||
|
/* -------------------------------------------------------------------------- */
|
||||||
|
void sha256_init(sha256_context *ctx)
|
||||||
|
{
|
||||||
|
if ( ctx != NULL ) {
|
||||||
|
ctx->bits[0] = ctx->bits[1] = 0;
|
||||||
|
ctx->len = 0;
|
||||||
|
ctx->hash[0] = 0x6a09e667;
|
||||||
|
ctx->hash[1] = 0xbb67ae85;
|
||||||
|
ctx->hash[2] = 0x3c6ef372;
|
||||||
|
ctx->hash[3] = 0xa54ff53a;
|
||||||
|
ctx->hash[4] = 0x510e527f;
|
||||||
|
ctx->hash[5] = 0x9b05688c;
|
||||||
|
ctx->hash[6] = 0x1f83d9ab;
|
||||||
|
ctx->hash[7] = 0x5be0cd19;
|
||||||
|
}
|
||||||
|
} /* sha256_init */
|
||||||
|
|
||||||
|
/* -------------------------------------------------------------------------- */
|
||||||
|
void sha256_hash(sha256_context *ctx, const void *data, size_t len)
|
||||||
|
{
|
||||||
|
register size_t i;
|
||||||
|
const uint8_t *bytes = (const uint8_t *)data;
|
||||||
|
|
||||||
|
if ( (ctx != NULL) && (bytes != NULL) )
|
||||||
|
for (i = 0; i < len; i++) {
|
||||||
|
ctx->buf[ctx->len] = bytes[i];
|
||||||
|
ctx->len++;
|
||||||
|
if (ctx->len == sizeof(ctx->buf) ) {
|
||||||
|
_hash(ctx);
|
||||||
|
_addbits(ctx, sizeof(ctx->buf) * 8);
|
||||||
|
ctx->len = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} /* sha256_hash */
|
||||||
|
|
||||||
|
/* -------------------------------------------------------------------------- */
|
||||||
|
void sha256_done(sha256_context *ctx, uint8_t *hash)
|
||||||
|
{
|
||||||
|
register uint32_t i, j;
|
||||||
|
|
||||||
|
if ( ctx != NULL ) {
|
||||||
|
j = ctx->len % sizeof(ctx->buf);
|
||||||
|
ctx->buf[j] = 0x80;
|
||||||
|
for (i = j + 1; i < sizeof(ctx->buf); i++)
|
||||||
|
ctx->buf[i] = 0x00;
|
||||||
|
|
||||||
|
if ( ctx->len > 55 ) {
|
||||||
|
_hash(ctx);
|
||||||
|
for (j = 0; j < sizeof(ctx->buf); j++)
|
||||||
|
ctx->buf[j] = 0x00;
|
||||||
|
}
|
||||||
|
|
||||||
|
_addbits(ctx, ctx->len * 8);
|
||||||
|
ctx->buf[63] = _shb(ctx->bits[0], 0);
|
||||||
|
ctx->buf[62] = _shb(ctx->bits[0], 8);
|
||||||
|
ctx->buf[61] = _shb(ctx->bits[0], 16);
|
||||||
|
ctx->buf[60] = _shb(ctx->bits[0], 24);
|
||||||
|
ctx->buf[59] = _shb(ctx->bits[1], 0);
|
||||||
|
ctx->buf[58] = _shb(ctx->bits[1], 8);
|
||||||
|
ctx->buf[57] = _shb(ctx->bits[1], 16);
|
||||||
|
ctx->buf[56] = _shb(ctx->bits[1], 24);
|
||||||
|
_hash(ctx);
|
||||||
|
|
||||||
|
if ( hash != NULL )
|
||||||
|
for (i = 0, j = 24; i < 4; i++, j -= 8) {
|
||||||
|
hash[i ] = _shb(ctx->hash[0], j);
|
||||||
|
hash[i + 4] = _shb(ctx->hash[1], j);
|
||||||
|
hash[i + 8] = _shb(ctx->hash[2], j);
|
||||||
|
hash[i + 12] = _shb(ctx->hash[3], j);
|
||||||
|
hash[i + 16] = _shb(ctx->hash[4], j);
|
||||||
|
hash[i + 20] = _shb(ctx->hash[5], j);
|
||||||
|
hash[i + 24] = _shb(ctx->hash[6], j);
|
||||||
|
hash[i + 28] = _shb(ctx->hash[7], j);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} /* sha256_done */
|
||||||
|
|
||||||
|
/* -------------------------------------------------------------------------- */
|
||||||
|
void sha256(const void *data, size_t len, uint8_t *hash)
|
||||||
|
{
|
||||||
|
sha256_context ctx;
|
||||||
|
|
||||||
|
sha256_init(&ctx);
|
||||||
|
sha256_hash(&ctx, data, len);
|
||||||
|
sha256_done(&ctx, hash);
|
||||||
|
} /* sha256 */
|
||||||
|
|
||||||
|
|
||||||
|
/* ========================================================================== */
|
||||||
|
#ifdef SELF_TEST
|
||||||
|
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <string.h>
|
||||||
|
|
||||||
|
int main(void)
|
||||||
|
{
|
||||||
|
char *buf[] = {
|
||||||
|
"",
|
||||||
|
"e3b0c442 98fc1c14 9afbf4c8 996fb924 27ae41e4 649b934c a495991b 7852b855",
|
||||||
|
|
||||||
|
"abc",
|
||||||
|
"ba7816bf 8f01cfea 414140de 5dae2223 b00361a3 96177a9c b410ff61 f20015ad",
|
||||||
|
|
||||||
|
"abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq",
|
||||||
|
"248d6a61 d20638b8 e5c02693 0c3e6039 a33ce459 64ff2167 f6ecedd4 19db06c1",
|
||||||
|
|
||||||
|
"The quick brown fox jumps over the lazy dog",
|
||||||
|
"d7a8fbb3 07d78094 69ca9abc b0082e4f 8d5651e4 6d3cdb76 2d02d0bf 37c9e592",
|
||||||
|
|
||||||
|
"The quick brown fox jumps over the lazy cog", /* avalanche effect test */
|
||||||
|
"e4c4d8f3 bf76b692 de791a17 3e053211 50f7a345 b46484fe 427f6acc 7ecc81be",
|
||||||
|
|
||||||
|
"bhn5bjmoniertqea40wro2upyflkydsibsk8ylkmgbvwi420t44cq034eou1szc1k0mk46oeb7ktzmlxqkbte2sy",
|
||||||
|
"9085df2f 02e0cc45 5928d0f5 1b27b4bf 1d9cd260 a66ed1fd a11b0a3f f5756d99"
|
||||||
|
};
|
||||||
|
uint8_t hash[SHA256_BYTES];
|
||||||
|
size_t i, j;
|
||||||
|
|
||||||
|
for (i = 0; i < (sizeof(buf) / sizeof(buf[0])); i += 2) {
|
||||||
|
sha256(buf[i], strlen(buf[i]), hash);
|
||||||
|
printf("input = '%s'\ndigest: %s\nresult: ", buf[i], buf[i + 1]);
|
||||||
|
for (j = 0; j < SHA256_BYTES; j++)
|
||||||
|
printf("%02x%s", hash[j], ((j % 4) == 3) ? " " : "");
|
||||||
|
printf("\n\n");
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
} /* main */
|
||||||
|
|
||||||
|
#endif /* def SELF_TEST */
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
57
client/src/thirdparty/SHA256/mark2/sha256.h
vendored
Normal file
57
client/src/thirdparty/SHA256/mark2/sha256.h
vendored
Normal file
|
@ -0,0 +1,57 @@
|
||||||
|
/*
|
||||||
|
* SHA-256 implementation, Mark 2
|
||||||
|
*
|
||||||
|
* Copyright (c) 2010,2014 Ilya O. Levin, http://www.literatecode.com
|
||||||
|
*
|
||||||
|
* Permission to use, copy, modify, and distribute this software for any
|
||||||
|
* purpose with or without fee is hereby granted, provided that the above
|
||||||
|
* copyright notice and this permission notice appear in all copies.
|
||||||
|
*
|
||||||
|
* THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
|
||||||
|
* WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
|
||||||
|
* MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
|
||||||
|
* ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
|
||||||
|
* WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
|
||||||
|
* ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
|
||||||
|
* OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
||||||
|
*/
|
||||||
|
#ifndef SHA256_H_
|
||||||
|
#define SHA256_H_
|
||||||
|
|
||||||
|
#include <stddef.h>
|
||||||
|
#ifdef _MSC_VER
|
||||||
|
#ifndef uint8_t
|
||||||
|
typedef unsigned __int8 uint8_t;
|
||||||
|
#endif
|
||||||
|
#ifndef uint32_t
|
||||||
|
typedef unsigned __int32 uint32_t;
|
||||||
|
#endif
|
||||||
|
#else
|
||||||
|
#include <stdint.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#define SHA256_BYTES 32
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C"
|
||||||
|
{
|
||||||
|
#endif
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
uint8_t buf[64];
|
||||||
|
uint32_t hash[8];
|
||||||
|
uint32_t bits[2];
|
||||||
|
uint32_t len;
|
||||||
|
} sha256_context;
|
||||||
|
|
||||||
|
void sha256_init(sha256_context *ctx);
|
||||||
|
void sha256_hash(sha256_context *ctx, const void *data, size_t len);
|
||||||
|
void sha256_done(sha256_context *ctx, uint8_t *hash);
|
||||||
|
|
||||||
|
void sha256(const void *data, size_t len, uint8_t *hash);
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#endif
|
245
client/src/thirdparty/SHA256/sha256.c
vendored
Normal file
245
client/src/thirdparty/SHA256/sha256.c
vendored
Normal file
|
@ -0,0 +1,245 @@
|
||||||
|
/*
|
||||||
|
* SHA-256 implementation.
|
||||||
|
*
|
||||||
|
* Copyright (c) 2010 Ilya O. Levin, http://www.literatecode.com
|
||||||
|
*
|
||||||
|
* Permission to use, copy, modify, and distribute this software for any
|
||||||
|
* purpose with or without fee is hereby granted, provided that the above
|
||||||
|
* copyright notice and this permission notice appear in all copies.
|
||||||
|
*
|
||||||
|
* THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
|
||||||
|
* WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
|
||||||
|
* MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
|
||||||
|
* ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
|
||||||
|
* WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
|
||||||
|
* ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
|
||||||
|
* OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
||||||
|
*/
|
||||||
|
#define SWAP_BYTES
|
||||||
|
// #define USE_STD_MEMCPY
|
||||||
|
// #define SELF_TEST
|
||||||
|
|
||||||
|
#ifdef USE_STD_MEMCPY
|
||||||
|
#include <string.h>
|
||||||
|
#endif
|
||||||
|
#include "sha256.h"
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" {
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#define RL(x,n) (((x) << n) | ((x) >> (32 - n)))
|
||||||
|
#define RR(x,n) (((x) >> n) | ((x) << (32 - n)))
|
||||||
|
|
||||||
|
#define S0(x) (RR((x), 2) ^ RR((x),13) ^ RR((x),22))
|
||||||
|
#define S1(x) (RR((x), 6) ^ RR((x),11) ^ RR((x),25))
|
||||||
|
#define G0(x) (RR((x), 7) ^ RR((x),18) ^ ((x) >> 3))
|
||||||
|
#define G1(x) (RR((x),17) ^ RR((x),19) ^ ((x) >> 10))
|
||||||
|
|
||||||
|
#ifdef SWAP_BYTES
|
||||||
|
#define BSWP(x,y) _bswapw((uint32_t *)(x), (uint32_t)(y))
|
||||||
|
#else
|
||||||
|
#define BSWP(p,n)
|
||||||
|
#endif
|
||||||
|
#ifdef USE_STD_MEMCPY
|
||||||
|
#define MEMCP(x,y,z) memcpy((x),(y),(z))
|
||||||
|
#else
|
||||||
|
#define MEMCP(x,y,z) _memcp((x),(y),(z))
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef __cdecl
|
||||||
|
#define __cdecl
|
||||||
|
#endif
|
||||||
|
|
||||||
|
static const uint32_t K[64] = {
|
||||||
|
0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5,
|
||||||
|
0x3956c25b, 0x59f111f1, 0x923f82a4, 0xab1c5ed5,
|
||||||
|
0xd807aa98, 0x12835b01, 0x243185be, 0x550c7dc3,
|
||||||
|
0x72be5d74, 0x80deb1fe, 0x9bdc06a7, 0xc19bf174,
|
||||||
|
0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc,
|
||||||
|
0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da,
|
||||||
|
0x983e5152, 0xa831c66d, 0xb00327c8, 0xbf597fc7,
|
||||||
|
0xc6e00bf3, 0xd5a79147, 0x06ca6351, 0x14292967,
|
||||||
|
0x27b70a85, 0x2e1b2138, 0x4d2c6dfc, 0x53380d13,
|
||||||
|
0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85,
|
||||||
|
0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3,
|
||||||
|
0xd192e819, 0xd6990624, 0xf40e3585, 0x106aa070,
|
||||||
|
0x19a4c116, 0x1e376c08, 0x2748774c, 0x34b0bcb5,
|
||||||
|
0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f, 0x682e6ff3,
|
||||||
|
0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208,
|
||||||
|
0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2
|
||||||
|
};
|
||||||
|
|
||||||
|
/* -------------------------------------------------------------------------- */
|
||||||
|
static void _bswapw(uint32_t *p, uint32_t i)
|
||||||
|
{
|
||||||
|
while (i--) p[i] = (RR(p[i],24) & 0x00ff00ff) | (RR(p[i],8) & 0xff00ff00);
|
||||||
|
|
||||||
|
} /* _bswapw */
|
||||||
|
|
||||||
|
/* -------------------------------------------------------------------------- */
|
||||||
|
#ifndef USE_STD_MEMCPY
|
||||||
|
void * __cdecl _memcp (void *d, const void *s, uint32_t sz)
|
||||||
|
{
|
||||||
|
void *rv = d;
|
||||||
|
|
||||||
|
while (sz--) *(char *)d = *(char *)s, d = (char *)d + 1, s = (char *)s + 1;
|
||||||
|
|
||||||
|
return(rv);
|
||||||
|
} /* _memcp */
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* -------------------------------------------------------------------------- */
|
||||||
|
static void _rtrf(uint32_t *b, uint32_t *p, uint32_t i, uint32_t j)
|
||||||
|
{
|
||||||
|
#define B(x, y) b[(x-y) & 7]
|
||||||
|
#define P(x, y) p[(x+y) & 15]
|
||||||
|
|
||||||
|
B(7,i) += (j ? (p[i & 15] += G1(P(i,14)) + P(i,9) + G0(P(i,1))) : p[i & 15])
|
||||||
|
+ K[i+j] + S1(B(4,i))
|
||||||
|
+ (B(6,i) ^ (B(4,i) & (B(5,i) ^ B(6,i))));
|
||||||
|
B(3,i) += B(7,i);
|
||||||
|
B(7,i) += S0(B(0,i)) + ( (B(0,i) & B(1,i)) | (B(2,i) & (B(0,i) ^ B(1,i))) );
|
||||||
|
|
||||||
|
#undef P
|
||||||
|
#undef B
|
||||||
|
} /* _rtrf */
|
||||||
|
|
||||||
|
/* -------------------------------------------------------------------------- */
|
||||||
|
static void _hash(sha256_context *ctx)
|
||||||
|
{
|
||||||
|
uint32_t b[8], *p, j;
|
||||||
|
|
||||||
|
b[0] = ctx->hash[0]; b[1] = ctx->hash[1]; b[2] = ctx->hash[2];
|
||||||
|
b[3] = ctx->hash[3]; b[4] = ctx->hash[4]; b[5] = ctx->hash[5];
|
||||||
|
b[6] = ctx->hash[6]; b[7] = ctx->hash[7];
|
||||||
|
|
||||||
|
for (p = ctx->buf, j = 0; j < 64; j += 16)
|
||||||
|
_rtrf(b, p, 0, j), _rtrf(b, p, 1, j), _rtrf(b, p, 2, j),
|
||||||
|
_rtrf(b, p, 3, j), _rtrf(b, p, 4, j), _rtrf(b, p, 5, j),
|
||||||
|
_rtrf(b, p, 6, j), _rtrf(b, p, 7, j), _rtrf(b, p, 8, j),
|
||||||
|
_rtrf(b, p, 9, j), _rtrf(b, p, 10, j), _rtrf(b, p, 11, j),
|
||||||
|
_rtrf(b, p, 12, j), _rtrf(b, p, 13, j), _rtrf(b, p, 14, j),
|
||||||
|
_rtrf(b, p, 15, j);
|
||||||
|
|
||||||
|
ctx->hash[0] += b[0]; ctx->hash[1] += b[1]; ctx->hash[2] += b[2];
|
||||||
|
ctx->hash[3] += b[3]; ctx->hash[4] += b[4]; ctx->hash[5] += b[5];
|
||||||
|
ctx->hash[6] += b[6]; ctx->hash[7] += b[7];
|
||||||
|
|
||||||
|
} /* _hash */
|
||||||
|
|
||||||
|
/* -------------------------------------------------------------------------- */
|
||||||
|
void sha256_init(sha256_context *ctx)
|
||||||
|
{
|
||||||
|
ctx->len[0] = ctx->len[1] = 0;
|
||||||
|
ctx->hash[0] = 0x6a09e667; ctx->hash[1] = 0xbb67ae85;
|
||||||
|
ctx->hash[2] = 0x3c6ef372; ctx->hash[3] = 0xa54ff53a;
|
||||||
|
ctx->hash[4] = 0x510e527f; ctx->hash[5] = 0x9b05688c;
|
||||||
|
ctx->hash[6] = 0x1f83d9ab; ctx->hash[7] = 0x5be0cd19;
|
||||||
|
|
||||||
|
} /* sha256_init */
|
||||||
|
|
||||||
|
/* -------------------------------------------------------------------------- */
|
||||||
|
void sha256_hash(sha256_context *ctx, uint8_t *dat, uint32_t sz)
|
||||||
|
{
|
||||||
|
register uint32_t i = ctx->len[0] & 63, l, j;
|
||||||
|
|
||||||
|
if ((ctx->len[0] += sz) < sz) ++(ctx->len[1]);
|
||||||
|
|
||||||
|
for (j = 0, l = 64-i; sz >= l; j += l, sz -= l, l = 64, i = 0)
|
||||||
|
{
|
||||||
|
MEMCP((char *)ctx->buf + i, &dat[j], l);
|
||||||
|
BSWP(ctx->buf, 16 );
|
||||||
|
_hash(ctx);
|
||||||
|
}
|
||||||
|
MEMCP((char *)ctx->buf + i, &dat[j], sz);
|
||||||
|
|
||||||
|
} /* _hash */
|
||||||
|
|
||||||
|
/* -------------------------------------------------------------------------- */
|
||||||
|
void sha256_done(sha256_context *ctx, uint8_t *buf)
|
||||||
|
{
|
||||||
|
uint32_t i = (uint32_t)(ctx->len[0] & 63), j = ((~i) & 3) << 3;
|
||||||
|
|
||||||
|
BSWP(ctx->buf, (i + 3) >> 2);
|
||||||
|
|
||||||
|
ctx->buf[i >> 2] &= 0xffffff80 << j; /* add padding */
|
||||||
|
ctx->buf[i >> 2] |= 0x00000080 << j;
|
||||||
|
|
||||||
|
if (i < 56) i = (i >> 2) + 1;
|
||||||
|
else ctx->buf[15] ^= (i < 60) ? ctx->buf[15] : 0, _hash(ctx), i = 0;
|
||||||
|
|
||||||
|
while (i < 14) ctx->buf[i++] = 0;
|
||||||
|
|
||||||
|
ctx->buf[14] = (ctx->len[1] << 3)|(ctx->len[0] >> 29); /* add length */
|
||||||
|
ctx->buf[15] = ctx->len[0] << 3;
|
||||||
|
|
||||||
|
_hash(ctx);
|
||||||
|
|
||||||
|
for (i = 0; i < 32; i++)
|
||||||
|
ctx->buf[i % 16] = 0, /* may remove this line in case of a DIY cleanup */
|
||||||
|
buf[i] = (uint8_t)(ctx->hash[i >> 2] >> ((~i & 3) << 3));
|
||||||
|
|
||||||
|
} /* sha256_done */
|
||||||
|
|
||||||
|
|
||||||
|
#ifdef SELF_TEST
|
||||||
|
#pragma warning (push, 0)
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include <string.h>
|
||||||
|
#pragma warning(pop)
|
||||||
|
|
||||||
|
char *buf[] = {
|
||||||
|
"",
|
||||||
|
"e3b0c442 98fc1c14 9afbf4c8 996fb924 27ae41e4 649b934c a495991b 7852b855",
|
||||||
|
|
||||||
|
"abc",
|
||||||
|
"ba7816bf 8f01cfea 414140de 5dae2223 b00361a3 96177a9c b410ff61 f20015ad",
|
||||||
|
|
||||||
|
"abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq",
|
||||||
|
"248d6a61 d20638b8 e5c02693 0c3e6039 a33ce459 64ff2167 f6ecedd4 19db06c1",
|
||||||
|
|
||||||
|
"The quick brown fox jumps over the lazy dog",
|
||||||
|
"d7a8fbb3 07d78094 69ca9abc b0082e4f 8d5651e4 6d3cdb76 2d02d0bf 37c9e592",
|
||||||
|
|
||||||
|
"The quick brown fox jumps over the lazy cog", /* avalanche effect test */
|
||||||
|
"e4c4d8f3 bf76b692 de791a17 3e053211 50f7a345 b46484fe 427f6acc 7ecc81be",
|
||||||
|
|
||||||
|
"bhn5bjmoniertqea40wro2upyflkydsibsk8ylkmgbvwi420t44cq034eou1szc1k0mk46oeb7ktzmlxqkbte2sy",
|
||||||
|
"9085df2f 02e0cc45 5928d0f5 1b27b4bf 1d9cd260 a66ed1fd a11b0a3f f5756d99"
|
||||||
|
};
|
||||||
|
|
||||||
|
int main(int argc, char *argv[])
|
||||||
|
{
|
||||||
|
sha256_context ctx;
|
||||||
|
uint8_t hv[32];
|
||||||
|
uint32_t i, j;
|
||||||
|
|
||||||
|
for (j = 0; j < (sizeof(buf)/sizeof(buf[0])); j += 2)
|
||||||
|
{
|
||||||
|
sha256_init(&ctx);
|
||||||
|
sha256_hash(&ctx, (uint8_t *)buf[j], (uint32_t)strlen(buf[j]));
|
||||||
|
sha256_done(&ctx, hv);
|
||||||
|
printf("input = %s\ndigest: %s\nresult: ", buf[j], buf[j+1]);
|
||||||
|
for (i = 0; i < 32; i++) printf("%02x%s", hv[i], ((i%4)==3)?" ":"");
|
||||||
|
printf("\n\n");
|
||||||
|
}
|
||||||
|
|
||||||
|
for (j = 1; j < (uint32_t)argc; j++)
|
||||||
|
{
|
||||||
|
printf("argv[%d]: %s\nresult: ", (int)j, argv[j]);
|
||||||
|
sha256_init(&ctx);
|
||||||
|
sha256_hash(&ctx, (uint8_t *)argv[j], (uint32_t)strlen(argv[j]));
|
||||||
|
sha256_done(&ctx, hv);
|
||||||
|
for (i = 0; i < 32; i++) printf("%02x%s", hv[i], ((i%4)==3)?" ":"");
|
||||||
|
printf("\n\n");
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
} /* main */
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
}
|
||||||
|
#endif
|
50
client/src/thirdparty/SHA256/sha256.h
vendored
Normal file
50
client/src/thirdparty/SHA256/sha256.h
vendored
Normal file
|
@ -0,0 +1,50 @@
|
||||||
|
/*
|
||||||
|
* SHA-256 implementation.
|
||||||
|
*
|
||||||
|
* Copyright (c) 2010 Ilya O. Levin, http://www.literatecode.com
|
||||||
|
*
|
||||||
|
* Permission to use, copy, modify, and distribute this software for any
|
||||||
|
* purpose with or without fee is hereby granted, provided that the above
|
||||||
|
* copyright notice and this permission notice appear in all copies.
|
||||||
|
*
|
||||||
|
* THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
|
||||||
|
* WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
|
||||||
|
* MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
|
||||||
|
* ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
|
||||||
|
* WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
|
||||||
|
* ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
|
||||||
|
* OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
||||||
|
*/
|
||||||
|
#ifdef _MSC_VER
|
||||||
|
#ifndef uint8_t
|
||||||
|
typedef unsigned __int8 uint8_t;
|
||||||
|
#endif
|
||||||
|
#ifndef uint32_t
|
||||||
|
typedef unsigned __int32 uint32_t;
|
||||||
|
#endif
|
||||||
|
#ifndef uint64_t
|
||||||
|
typedef __int64 int64_t;
|
||||||
|
typedef unsigned __int64 uint64_t;
|
||||||
|
#endif
|
||||||
|
#else
|
||||||
|
#include <stdint.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C"
|
||||||
|
{
|
||||||
|
#endif
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
uint32_t buf[16];
|
||||||
|
uint32_t hash[8];
|
||||||
|
uint32_t len[2];
|
||||||
|
} sha256_context;
|
||||||
|
|
||||||
|
void sha256_init(sha256_context *);
|
||||||
|
void sha256_hash(sha256_context *, uint8_t * /* data */, uint32_t /* len */);
|
||||||
|
void sha256_done(sha256_context *, uint8_t * /* hash */);
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
}
|
||||||
|
#endif
|
|
@ -195,6 +195,11 @@ static void settingsFinished(WidgetT *widget) {
|
||||||
|
|
||||||
void welcomeShow(void) {
|
void welcomeShow(void) {
|
||||||
|
|
||||||
|
char *logo = strdup(cacheFilenameGet("system:logo"));
|
||||||
|
char *init = strdup(cacheFilenameGet("system:init"));
|
||||||
|
char *dial = strdup(cacheFilenameGet("system:dialing"));
|
||||||
|
char *conn = strdup(cacheFilenameGet("system:connect"));
|
||||||
|
|
||||||
// 450x128 logo
|
// 450x128 logo
|
||||||
|
|
||||||
TagItemT uiWelcome[] = {
|
TagItemT uiWelcome[] = {
|
||||||
|
@ -204,22 +209,22 @@ void welcomeShow(void) {
|
||||||
T_WIDTH, 500, T_HEIGHT, 225,
|
T_WIDTH, 500, T_HEIGHT, 225,
|
||||||
|
|
||||||
T_PICTURE, O(_picLogo),
|
T_PICTURE, O(_picLogo),
|
||||||
T_FILENAME, P("data/logo.png"),
|
T_FILENAME, P(logo),
|
||||||
T_X, 18, T_Y, 18,
|
T_X, 18, T_Y, 18,
|
||||||
T_PICTURE, T_DONE,
|
T_PICTURE, T_DONE,
|
||||||
|
|
||||||
T_PICTURE, O(_picInit),
|
T_PICTURE, O(_picInit),
|
||||||
T_FILENAME, P("data/dinit.png"),
|
T_FILENAME, P(init),
|
||||||
T_X, 18, T_Y, 18,
|
T_X, 18, T_Y, 18,
|
||||||
T_VISIBLE, T_FALSE,
|
T_VISIBLE, T_FALSE,
|
||||||
T_PICTURE, T_DONE,
|
T_PICTURE, T_DONE,
|
||||||
T_PICTURE, O(_picDialing),
|
T_PICTURE, O(_picDialing),
|
||||||
T_FILENAME, P("data/ddialing.png"),
|
T_FILENAME, P(dial),
|
||||||
T_X, 179, T_Y, 18,
|
T_X, 179, T_Y, 18,
|
||||||
T_VISIBLE, T_FALSE,
|
T_VISIBLE, T_FALSE,
|
||||||
T_PICTURE, T_DONE,
|
T_PICTURE, T_DONE,
|
||||||
T_PICTURE, O(_picConnect),
|
T_PICTURE, O(_picConnect),
|
||||||
T_FILENAME, P("data/dconnect.png"),
|
T_FILENAME, P(conn),
|
||||||
T_X, 339, T_Y, 18,
|
T_X, 339, T_Y, 18,
|
||||||
T_VISIBLE, T_FALSE,
|
T_VISIBLE, T_FALSE,
|
||||||
T_PICTURE, T_DONE,
|
T_PICTURE, T_DONE,
|
||||||
|
@ -251,6 +256,11 @@ void welcomeShow(void) {
|
||||||
};
|
};
|
||||||
|
|
||||||
tagListRun(uiWelcome);
|
tagListRun(uiWelcome);
|
||||||
|
|
||||||
|
DEL(conn);
|
||||||
|
DEL(dial);
|
||||||
|
DEL(init);
|
||||||
|
DEL(logo);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
BIN
font/data/vga8x14.dat
(Stored with Git LFS)
BIN
font/data/vga8x14.dat
(Stored with Git LFS)
Binary file not shown.
BIN
font/data/vga8x16.dat
(Stored with Git LFS)
BIN
font/data/vga8x16.dat
(Stored with Git LFS)
Binary file not shown.
BIN
font/data/vga8x8.dat
(Stored with Git LFS)
BIN
font/data/vga8x8.dat
(Stored with Git LFS)
Binary file not shown.
|
@ -21,8 +21,9 @@ TEMPLATE = subdirs
|
||||||
CONFIG *= ORDERED
|
CONFIG *= ORDERED
|
||||||
|
|
||||||
SUBDIRS = \
|
SUBDIRS = \
|
||||||
client \
|
client
|
||||||
server
|
# server
|
||||||
|
# precache
|
||||||
# font
|
# font
|
||||||
# primes
|
# primes
|
||||||
|
|
||||||
|
|
58
precache/precache.pro
Normal file
58
precache/precache.pro
Normal file
|
@ -0,0 +1,58 @@
|
||||||
|
#
|
||||||
|
# Kangaroo Punch MultiPlayer Game Server Mark II
|
||||||
|
# Copyright (C) 2020-2021 Scott Duensing
|
||||||
|
#
|
||||||
|
# This program is free software: you can redistribute it and/or modify
|
||||||
|
# it under the terms of the GNU General Public License as published by
|
||||||
|
# the Free Software Foundation, either version 3 of the License, or
|
||||||
|
# (at your option) any later version.
|
||||||
|
#
|
||||||
|
# This program is distributed in the hope that it will be useful,
|
||||||
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
# GNU General Public License for more details.
|
||||||
|
#
|
||||||
|
# You should have received a copy of the GNU General Public License
|
||||||
|
# along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||||
|
#
|
||||||
|
|
||||||
|
TEMPLATE = app
|
||||||
|
CONFIG -= qt
|
||||||
|
CONFIG += console
|
||||||
|
|
||||||
|
DESTDIR = $$OUT_PWD/bin
|
||||||
|
SHARED = $$PWD/../shared
|
||||||
|
CLIENT = $$PWD/../client/src
|
||||||
|
SYSTEM = $$CLIENT/system
|
||||||
|
THIRDP = $$CLIENT/thirdparty
|
||||||
|
|
||||||
|
INCLUDEPATH += \
|
||||||
|
$$SHARED \
|
||||||
|
$$SHARED/thirdparty \
|
||||||
|
$$SYSTEM \
|
||||||
|
$$THIRDP
|
||||||
|
|
||||||
|
HEADERS = \
|
||||||
|
$$SHARED/stddclmr.h \
|
||||||
|
$$SHARED/log.h \
|
||||||
|
$$SHARED/util.h \
|
||||||
|
$$SHARED/thirdparty/memwatch/memwatch.h \
|
||||||
|
$$THIRDP/SHA256/sha256.h \
|
||||||
|
$$SYSTEM/surface.h \
|
||||||
|
$$SYSTEM/os.h \
|
||||||
|
$$SYSTEM/cache.h
|
||||||
|
|
||||||
|
SOURCES = \
|
||||||
|
$$SHARED/thirdparty/memwatch/memwatch.c \
|
||||||
|
$$SHARED/log.c \
|
||||||
|
$$SHARED/util.c \
|
||||||
|
$$THIRDP/SHA256/sha256.c \
|
||||||
|
$$CLIENT/linux/linux.c \
|
||||||
|
$$SYSTEM/surface.c \
|
||||||
|
$$SYSTEM/os.c \
|
||||||
|
$$SYSTEM/cache.c \
|
||||||
|
src/main.c
|
||||||
|
|
||||||
|
LIBS = \
|
||||||
|
-lSDL2 \
|
||||||
|
-lSDL2_image
|
57
precache/src/main.c
Normal file
57
precache/src/main.c
Normal file
|
@ -0,0 +1,57 @@
|
||||||
|
/*
|
||||||
|
* Kangaroo Punch MultiPlayer Game Server Mark II
|
||||||
|
* Copyright (C) 2020-2021 Scott Duensing
|
||||||
|
*
|
||||||
|
* This program is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation, either version 3 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
#include <stdio.h>
|
||||||
|
|
||||||
|
#define MEMWATCH
|
||||||
|
#include "memwatch/memwatch.h"
|
||||||
|
|
||||||
|
#include "cache.h"
|
||||||
|
|
||||||
|
#include "stddclmr.h"
|
||||||
|
|
||||||
|
|
||||||
|
int main(int argc, char *argv[]) {
|
||||||
|
|
||||||
|
CachePreMakeListT list[] = {
|
||||||
|
{ "dconnect.png", "system:connect" },
|
||||||
|
{ "ddialing.png", "system:dialing" },
|
||||||
|
{ "dinit.png", "system:init" },
|
||||||
|
{ "logo.png", "system:logo" },
|
||||||
|
{ "mbie32.png", "system:exclamation" },
|
||||||
|
{ "mbii32.png", "system:information" },
|
||||||
|
{ "mbim32.png", "system:message" },
|
||||||
|
{ "mbiq32.png", "system:question" },
|
||||||
|
{ "mbiw32.png", "system:warning" },
|
||||||
|
{ "mouse.png", "system:mouse" },
|
||||||
|
{ "vga8x14.dat", "system:vga8x14" },
|
||||||
|
{ NULL, NULL }
|
||||||
|
};
|
||||||
|
|
||||||
|
(void)argc;
|
||||||
|
(void)argv;
|
||||||
|
|
||||||
|
// Also run optipng -o7 on images.
|
||||||
|
|
||||||
|
cachePrePack("client.pre", list);
|
||||||
|
cachePreUnpack("client.pre");
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
Loading…
Add table
Reference in a new issue