Reorganize folder structure to make cmake happy.

This commit is contained in:
2021-03-31 02:33:45 +01:00
parent 944ee1d0af
commit af4c7b33d2
38 changed files with 46 additions and 50 deletions

View File

@@ -33,14 +33,6 @@ CHECK_SYMBOL_EXISTS(statfs "sys/statfs.h" HAVE_SYS_STATFS)
CHECK_SYMBOL_EXISTS(statfs "sys/mount.h" HAVE_SYS_MOUNT)
CHECK_SYMBOL_EXISTS(statvfs "sys/statvfs.h" HAVE_SYS_STATVFS)
# NetBSD >= 3.0
if(HAVE_SYS_STATVFS)
message("-- Found statvfs in sys/statvfs.h")
add_definitions(-DHAVE_SYS_STATVFS_H)
CHECK_STRUCT_HAS_MEMBER("struct statvfs" "f_namemax" "sys/statvfs.h" HAVE_STATFS_NAMEMAX)
CHECK_STRUCT_HAS_MEMBER("struct statvfs" "f_fstypename" "sys/statvfs.h" HAVE_STATFS_FTYPENAME)
endif()
# Linux and FreeBSD
if(HAVE_SYS_STATFS)
message("-- Found statfs in sys/statfs.h")
@@ -48,15 +40,19 @@ if(HAVE_SYS_STATFS)
CHECK_STRUCT_HAS_MEMBER("struct statfs" "f_namelen" "sys/statfs.h" HAVE_STATFS_FNAMELEN)
CHECK_STRUCT_HAS_MEMBER("struct statfs" "f_fstypename" "sys/statfs.h" HAVE_STATFS_FTYPENAME)
CHECK_STRUCT_HAS_MEMBER("struct statfs" "f_namemax" "sys/statfs.h" HAVE_STATFS_NAMEMAX)
endif()
# Darwin and most other BSDs
if(HAVE_SYS_MOUNT)
elseif(HAVE_SYS_MOUNT) # Darwin and most other BSDs
message("-- Found statfs in sys/mount.h")
add_definitions(-DHAVE_SYS_MOUNT_H)
CHECK_STRUCT_HAS_MEMBER("struct statfs" "f_namelen" "sys/mount.h" HAVE_STATFS_FNAMELEN)
CHECK_STRUCT_HAS_MEMBER("struct statfs" "f_fstypename" "sys/mount.h" HAVE_STATFS_FTYPENAME)
CHECK_STRUCT_HAS_MEMBER("struct statfs" "f_namemax" "sys/mount.h" HAVE_STATFS_NAMEMAX)
if(NOT ${CMAKE_SYSTEM_NAME} MATCHES "Darwin") # It's giving false positives sometimes
CHECK_STRUCT_HAS_MEMBER("struct statfs" "f_namemax" "sys/mount.h" HAVE_STATFS_NAMEMAX)
endif()
elseif(HAVE_SYS_STATVFS) # NetBSD >= 3.0
message("-- Found statvfs in sys/statvfs.h")
add_definitions(-DHAVE_SYS_STATVFS_H)
CHECK_STRUCT_HAS_MEMBER("struct statvfs" "f_namemax" "sys/statvfs.h" HAVE_STATFS_NAMEMAX)
CHECK_STRUCT_HAS_MEMBER("struct statvfs" "f_fstypename" "sys/statvfs.h" HAVE_STATFS_FTYPENAME)
endif()
if(HAVE_STATFS_FNAMELEN)
@@ -76,4 +72,8 @@ endif()
set(UNIX_SOURCES attr.c deleted.c dirdepth.c filename.c files.c frag.c links.c os.c perms.c rsrcfork.c sparse.c time.c volume.c xattr.c time.h)
add_library(unix ${UNIX_SOURCES})
add_library(unix ${UNIX_SOURCES})
add_subdirectory(darwin)
add_subdirectory(linux)
add_subdirectory(bsd)

View File

@@ -25,11 +25,11 @@ Copyright (C) 2011-2021 Natalia Portillo
#include "../include/defs.h"
#if defined(__linux__) || defined(__LINUX__) || defined(__gnu_linux)
#include "../linux/linux.h"
#include "linux/linux.h"
#elif defined(__APPLE__) && defined(__MACH__)
#include "../darwin/darwin.h"
#include "darwin/darwin.h"
#elif defined(__FreeBSD__) || defined(__DragonFly__) || defined(__NetBSD__) || defined(__OpenBSD__)
#include "../bsd/bsd.h"
#include "bsd/bsd.h"
#endif
void FileAttributes(const char* path)

View File

@@ -0,0 +1,40 @@
# /****************************************************************************
# Aaru Data Preservation Suite
# -----------------------------------------------------------------------------
#
# Author(s) : Natalia Portillo
#
# --[ License ] ---------------------------------------------------------------
# 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 <http://www.gnu.org/licenses/>.
#
# -----------------------------------------------------------------------------
# Copyright (C) 2011-2021 Natalia Portillo
# *****************************************************************************/
if(NOT ${CMAKE_SYSTEM_NAME} MATCHES "^(([^k].*)?BSD|DragonFly)$" )
return()
endif()
project(
fssetter-bsd
DESCRIPTION "Filesystem test creator for BSD"
LANGUAGES C)
set(PLATFORM_SOURCES bsd.h xattr.c xattr.h attr.c attr.h)
set(EXECUTABLE_NAME "fssetter-${CMAKE_SYSTEM_NAME}-${CMAKE_SYSTEM_PROCESSOR}")
add_executable(${EXECUTABLE_NAME} ${PLATFORM_SOURCES})
target_link_libraries(${EXECUTABLE_NAME} core unix)

107
setter/src/unix/bsd/attr.c Normal file
View File

@@ -0,0 +1,107 @@
/****************************************************************************
Aaru Data Preservation Suite
-----------------------------------------------------------------------------
Author(s) : Natalia Portillo
--[ License ] ---------------------------------------------------------------
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 <http://www.gnu.org/licenses/>.
-----------------------------------------------------------------------------
Copyright (C) 2011-2021 Natalia Portillo
*****************************************************************************/
#include <errno.h>
#include <stdio.h>
#include <unistd.h>
#include "attr.h"
#include "../../log.h"
void BsdFileAttributes(const char* path)
{
int ret;
int fd;
FILE* h;
int rc;
int wRc;
int sRc;
int cRc;
int i;
ret = chdir(path);
if(ret)
{
log_write("Error %d changing to specified path.\n", errno);
return;
}
ret = mkdir("ATTRS", 0755);
if(ret)
{
log_write("Error %d creating working directory.\n", errno);
return;
}
ret = chdir("ATTRS");
if(ret)
{
log_write("Error %d changing to working directory.\n", errno);
return;
}
log_write("Creating files with different flags (attributes).\n");
for(i = 0; i < KNOWN_BSD_ATTRS; i++)
{
h = fopen(darwin_attrs[i].filename, "w+");
rc = 0;
wRc = 0;
sRc = 0;
cRc = 0;
if(h == NULL) rc = errno;
else
{
fd = fileno(h);
ret = fchflags(fd, darwin_attrs[i].attr);
if(ret)
{
sRc = errno;
unlink(darwin_attrs[i].filename);
}
else
{
ret = fprintf(h, "%s", darwin_attrs[i].contents);
if(ret < 1)
{
wRc = errno;
unlink(darwin_attrs[i].filename);
}
}
ret = fclose(h);
if(ret) cRc = errno;
}
log_write("\t%s, rc = %d, wRc = %d, sRc = %d, cRc = %d\n", darwin_attrs[i].description, rc, wRc, sRc, cRc);
}
}

210
setter/src/unix/bsd/attr.h Normal file
View File

@@ -0,0 +1,210 @@
/****************************************************************************
Aaru Data Preservation Suite
-----------------------------------------------------------------------------
Author(s) : Natalia Portillo
--[ License ] ---------------------------------------------------------------
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 <http://www.gnu.org/licenses/>.
-----------------------------------------------------------------------------
Copyright (C) 2011-2021 Natalia Portillo
*****************************************************************************/
#ifndef AARU_FSTESTER_SETTER_SRC_BSD_ATTR_H_
#define AARU_FSTESTER_SETTER_SRC_BSD_ATTR_H_
#include <sys/stat.h>
typedef struct
{
char filename[16];
char contents[256];
char description[256];
unsigned int attr;
} bsd_attr_tests_t;
#if defined(__FreeBSD__)
#define KNOWN_BSD_ATTRS 17
#elif defined(__DragonFly__)
#define KNOWN_BSD_ATTRS 15
#elif defined(__NetBSD__)
#define KNOWN_BSD_ATTRS 10
#else
#define KNOWN_BSD_ATTRS 7
#endif
#ifndef UF_NODUMP
#define UF_NODUMP 0x00000001 /* Do not dump the file. */
#endif
#ifndef UF_IMMUTABLE
#define UF_IMMUTABLE 0x00000002 /* The file may not be changed. */
#endif
#ifndef UF_APPEND
#define UF_APPEND 0x00000004 /* The file may only be appended to. */
#endif
#ifndef UF_OPAQUE
#define UF_OPAQUE 0x00000008 /* directory is opaque wrt. union */
#endif
#ifndef SF_ARCHIVED
#define SF_ARCHIVED 0x00010000 /* file is archived */
#endif
#ifndef SF_IMMUTABLE
#define SF_IMMUTABLE 0x00020000 /* The file may not be changed. */
#endif
#ifndef SF_APPEND
#define SF_APPEND 0x00040000 /* The file may only be appended to. */
#endif
#if defined(__FreeBSD__) || defined(__DragonFly__)
#ifndef UF_NOUNLINK
#define UF_NOUNLINK 0x00000010 /* file may not be removed or renamed */
#endif
#ifndef SF_NOUNLINK
#define SF_NOUNLINK 0x00100000 /* file may not be removed or renamed */
#endif
#endif // FreeBSD or DragonFly BSD
#if defined(__FreeBSD__) || defined(__NetBSD__)
#ifndef SF_SNAPSHOT
#define SF_SNAPSHOT 0x00200000 /* snapshot inode */
#endif
#endif // FreeBSD or NetBSD
#if defined(__NetBSD__)
#ifndef SF_LOG
#define SF_LOG 0x00400000 /* WAPBL log file inode */
#endif
#ifndef SF_SNAPINVAL
#define SF_SNAPINVAL 0x00800000 /* snapshot is invalid */
#endif
#endif // NetBSD
#if defined(__FreeBSD__)
#ifndef UF_SYSTEM
#define UF_SYSTEM 0x00000080 /* Windows system file bit */
#endif
#ifndef UF_SPARSE
#define UF_SPARSE 0x00000100 /* sparse file */
#endif
#ifndef UF_OFFLINE
#define UF_OFFLINE 0x00000200 /* file is offline */
#endif
#ifndef UF_REPARSE
#define UF_REPARSE 0x00000400 /* Windows reparse point file bit */
#endif
#ifndef UF_ARCHIVE
#define UF_ARCHIVE 0x00000800 /* file needs to be archived */
#endif
#ifndef UF_READONLY
#define UF_READONLY 0x00001000 /* Windows readonly file bit */
#endif
#ifndef UF_HIDDEN
#define UF_HIDDEN 0x00008000 /* file is hidden */
#endif
#endif // FreeBSD
#if defined(__DragonFly__)
#ifndef UF_NOHISTORY
#define UF_NOHISTORY 0x00000040 /* do not retain history/snapshots */
#endif
#ifndef UF_CACHE
#define UF_CACHE 0x00000080 /* enable data swapcache */
#endif
#ifndef UF_XLINK
#define UF_XLINK 0x00000100 /* cross-link (hardlink) boundary */
#endif
#ifndef SF_NOHISTORY
#define SF_NOHISTORY 0x00400000 /* do not retain history/snapshots */
#endif
#ifndef SF_NOCACHE
#define SF_NOCACHE 0x00800000 /* disable data swapcache */
#endif
#ifndef SF_XLINK
#define SF_XLINK 0x01000000 /* cross-link (hardlink) boundary */
#endif
#endif // DragonFly BSD
static const bsd_attr_tests_t darwin_attrs[KNOWN_BSD_ATTRS] = {
{"NODUMP", "This file is now not dumpable", "File with no dump flag", UF_NODUMP},
{"IMMUTABLE", "This file is now immutable", "File with immutable flag", UF_IMMUTABLE},
{"APPEND", "This file is now append only", "File with append only flag", UF_APPEND},
{"ARCHIVED", "This file is now archived", "File with archived flag", SF_ARCHIVED},
{"SF_IMMUTABLE",
"This file is now immutable, and only the super-user change change that",
"File with super-usr immutable flag",
SF_IMMUTABLE},
{"SF_APPEND",
"This file is now append only, and only the super-user change change that",
"File with super-user append only flag",
SF_APPEND},
{"OPAQUE", "This directory is opaque when viewed through a union stack", "File with opaque flag", UF_OPAQUE},
#if defined(__FreeBSD__) || defined(__DragonFly__)
{"NOUNLINK", "This file may not be removed or renamed", "File with no unlink flag", UF_NOUNLINK},
{"SF_NOUNLINK", "This file may not be removed or renamed", "File with super-user no unlink flag", SF_NOUNLINK},
#endif
#if defined(__FreeBSD__) || defined(__NetBSD__)
{"SF_SNAPSHOT", "This file is a snapshot", "File with super-user snapshot flag", SF_SNAPSHOT},
#endif
#if defined(__NetBSD__)
{"SF_LOG", "This file is a WAPBL log file", "File with super-user log flag", SF_LOG},
{"SF_SNAPINVAL", "This file is an invalid snapshot", "File with super-user invalid snapshot flag", SF_SNAPINVAL},
#endif
#if defined(__FreeBSD__)
{"SYSTEM", "This file is a system file for Windows", "File with system flag", UF_SYSTEM},
{"SPARSE", "This file is sparse", "File with sparse flag", UF_SPARSE},
{"OFFLINE", "This file is available offline for Windows", "File with offline flag", UF_OFFLINE},
{"REPARSE", "This file is a Windows reparse point", "File with reparse flag", UF_REPARSE},
{"ARCHIVE", "This file is must be archived", "File with archive flag", UF_ARCHIVE},
{"READONLY", "This file is read-only for Windows", "File with read-only flag", UF_READONLY},
{"HIDDEN", "This file is hidden", "File with hidden flag", UF_HIDDEN},
#endif
#if defined(__DragonFly__)
{"NOHISTORY", "This file will not retain history/snapshots", "File with no history flag", UF_NOHISTORY},
{"CACHE", "This file has data swapcache enabled", "File with cache flag", UF_CACHE},
{"XLINK", "This file is a cross link boundary", "File with crosslink flag", UF_XLINK},
{"SF_NOHISTORY",
"This file will not retain history/snapshots",
"File with super-user no history flag",
SF_NOHISTORY},
{"SF_NOCACHE", "This file must not have data swapcache enabled", "File with super-user no cache flag", SF_NOCACHE},
{"SF_XLINK", "This file is a cross link boundary", "File with super-user crosslink flag", SF_XLINK},
#endif
};
#endif // AARU_FSTESTER_SETTER_SRC_BSD_ATTR_H_

31
setter/src/unix/bsd/bsd.h Normal file
View File

@@ -0,0 +1,31 @@
/****************************************************************************
Aaru Data Preservation Suite
-----------------------------------------------------------------------------
Author(s) : Natalia Portillo
--[ License ] ---------------------------------------------------------------
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 <http://www.gnu.org/licenses/>.
-----------------------------------------------------------------------------
Copyright (C) 2011-2021 Natalia Portillo
*****************************************************************************/
#ifndef SETTER_SRC_BSD_H_
#define SETTER_SRC_BSD_H_
void BsdExtendedAttributes(const char* path);
void BsdFileAttributes(const char* path);
#endif // SETTER_SRC_BSD_H_

104
setter/src/unix/bsd/xattr.c Normal file
View File

@@ -0,0 +1,104 @@
/****************************************************************************
Aaru Data Preservation Suite
-----------------------------------------------------------------------------
Author(s) : Natalia Portillo
--[ License ] ---------------------------------------------------------------
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 <http://www.gnu.org/licenses/>.
-----------------------------------------------------------------------------
Copyright (C) 2011-2021 Natalia Portillo
*****************************************************************************/
#include <dlfcn.h>
#include <errno.h>
#include <stdio.h>
#include <sys/stat.h>
#include <unistd.h>
#include "xattr.h"
#include "../../log.h"
void BsdExtendedAttributes(const char* path)
{
ssize_t ret;
FILE* file;
int rc;
int cRc;
_bsd_extattr_set_file bsd_extattr_set_file;
bsd_extattr_set_file = (_bsd_extattr_set_file)dlsym(RTLD_DEFAULT, "extattr_set_file");
if(!bsd_extattr_set_file)
{
log_write("Error loading extattr_set_file(2) from libc: %s\n", dlerror());
return;
}
ret = chdir(path);
if(ret)
{
log_write("Error %d changing to specified path.\n", errno);
return;
}
ret = mkdir("XATTRS", 0755);
if(ret)
{
log_write("Error %d creating working directory.\n", errno);
return;
}
ret = chdir("XATTRS");
if(ret)
{
log_write("Error %d changing to working directory.\n", errno);
return;
}
log_write("Creating files with extended attributes.\n");
rc = 0;
cRc = 0;
file = fopen("com.ibm.os2.comment", "w+");
if(file == NULL) rc = errno;
else
{
fprintf(file, "This file has an extended attribute called \"com.ibm.os2.comment\" that is 72 bytes long.\n");
fclose(file);
ret = bsd_extattr_set_file("com.ibm.os2.comment", EXTATTR_NAMESPACE_USER, "user.com.ibm.os2.comment", CommentsEA, 72);
if(ret) cRc = errno;
}
log_write("\tFile with an extended attribute called \"com.ibm.os2.comment\", rc = %d, cRc = %d\n", rc, cRc);
rc = 0;
cRc = 0;
file = fopen("com.ibm.os2.icon", "w+");
if(file == NULL) rc = errno;
else
{
fprintf(file, "This file has an extended attribute called \"com.ibm.os2.icon\" that is 3516 bytes long.\n");
fclose(file);
ret = bsd_extattr_set_file("com.ibm.os2.icon", EXTATTR_NAMESPACE_USER, "user.com.ibm.os2.icon", IconEA, 3516);
if(ret) cRc = errno;
}
log_write("\tFile with an extended attribute called \"com.ibm.os2.icon\", rc = %d, cRc = %d\n", rc, cRc);
}

231
setter/src/unix/bsd/xattr.h Normal file
View File

@@ -0,0 +1,231 @@
/****************************************************************************
Aaru Data Preservation Suite
-----------------------------------------------------------------------------
Author(s) : Natalia Portillo
--[ License ] ---------------------------------------------------------------
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 <http://www.gnu.org/licenses/>.
-----------------------------------------------------------------------------
Copyright (C) 2011-2021 Natalia Portillo
*****************************************************************************/
#ifndef SETTER_SRC_BSD_XATTR_H_
#define SETTER_SRC_BSD_XATTR_H_
#ifndef EXTATTR_NAMESPACE_USER
#define EXTATTR_NAMESPACE_USER 1
#endif
// FreeBSD, NetBSD, OpenBSD and DragonFly BSD all implement this same API
// They added it at very different times, and OpenBSD rolled it back.
typedef ssize_t (
*_bsd_extattr_set_file)(const char* path, int attrnamespace, const char* attrname, const void* data, size_t nbytes);
static unsigned char CommentsEA[72] = {
0x45, 0x00, 0x00, 0x00, 0x00, 0x09, 0x33, 0x00, 0x2E, 0x43, 0x4F, 0x4D, 0x4D, 0x45, 0x4E, 0x54, 0x53, 0x00,
0xFD, 0xFF, 0x2E, 0x00, 0x54, 0x68, 0x69, 0x73, 0x20, 0x45, 0x41, 0x20, 0x63, 0x6F, 0x6E, 0x74, 0x61, 0x69,
0x6E, 0x73, 0x20, 0x63, 0x6F, 0x6D, 0x6D, 0x65, 0x6E, 0x74, 0x73, 0x20, 0x66, 0x6F, 0x72, 0x20, 0x57, 0x6F,
0x72, 0x6B, 0x50, 0x6C, 0x61, 0x63, 0x65, 0x20, 0x53, 0x68, 0x65, 0x6C, 0x6C, 0x2E, 0x00, 0x00, 0x00, 0x00};
static unsigned char IconEA[3516] = {
0xBC, 0x0D, 0x00, 0x00, 0x00, 0x05, 0xAE, 0x0D, 0x2E, 0x49, 0x43, 0x4F, 0x4E, 0x00, 0xF9, 0xFF, 0xAA, 0x0D, 0x42,
0x41, 0x28, 0x00, 0x00, 0x00, 0x78, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x43, 0x49, 0x1A, 0x00, 0x00, 0x00,
0x10, 0x00, 0x10, 0x00, 0xDA, 0x01, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x20, 0x00, 0x40, 0x00, 0x01, 0x00, 0x01,
0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x43, 0x49, 0x1A, 0x00, 0x00, 0x00, 0x10, 0x00, 0x10, 0x00, 0xDA, 0x02,
0x00, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x20, 0x00, 0x20, 0x00, 0x01, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x3F, 0x3F,
0x3F, 0x80, 0x80, 0x80, 0xC0, 0xC0, 0xC0, 0xFF, 0xFF, 0xFF, 0x00, 0x80, 0x80, 0x00, 0x80, 0x00, 0x80, 0x00, 0x00,
0xFF, 0xFF, 0x00, 0x80, 0x80, 0x00, 0xFF, 0x00, 0xFF, 0x80, 0x00, 0x80, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0x00,
0xFF, 0x00, 0xFF, 0x00, 0x00, 0x42, 0x41, 0x28, 0x00, 0x00, 0x00, 0xC6, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x43, 0x49, 0x1A, 0x00, 0x00, 0x00, 0x10, 0x00, 0x10, 0x00, 0xDA, 0x04, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x20,
0x00, 0x40, 0x00, 0x01, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x43, 0x49, 0x1A, 0x00, 0x00, 0x00,
0x10, 0x00, 0x10, 0x00, 0xDA, 0x05, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x20, 0x00, 0x20, 0x00, 0x01, 0x00, 0x01,
0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x42, 0x41, 0x28, 0x00, 0x00, 0x00, 0x14, 0x01, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x43, 0x49, 0x1A, 0x00, 0x00, 0x00, 0x08, 0x00, 0x08, 0x00, 0x5A, 0x06, 0x00, 0x00, 0x0C, 0x00, 0x00,
0x00, 0x10, 0x00, 0x20, 0x00, 0x01, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x43, 0x49, 0x1A, 0x00,
0x00, 0x00, 0x08, 0x00, 0x08, 0x00, 0xDA, 0x06, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x10, 0x00, 0x10, 0x00, 0x01,
0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x42, 0x41, 0x28, 0x00, 0x00, 0x00, 0x62, 0x01, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x43, 0x49, 0x1A, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x0A, 0x00, 0x1A, 0x07, 0x00, 0x00, 0x0C,
0x00, 0x00, 0x00, 0x14, 0x00, 0x28, 0x00, 0x01, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x43, 0x49,
0x1A, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x0A, 0x00, 0xBA, 0x07, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x14, 0x00, 0x14,
0x00, 0x01, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x42, 0x41, 0x28, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x04, 0x00, 0x03, 0x43, 0x49, 0x1A, 0x00, 0x00, 0x00, 0x14, 0x00, 0x14, 0x00, 0x0A, 0x08, 0x00,
0x00, 0x0C, 0x00, 0x00, 0x00, 0x28, 0x00, 0x50, 0x00, 0x01, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF,
0x43, 0x49, 0x1A, 0x00, 0x00, 0x00, 0x14, 0x00, 0x14, 0x00, 0x8A, 0x0A, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x28,
0x00, 0x28, 0x00, 0x01, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x3F, 0x3F, 0x3F, 0x80, 0x80, 0x80, 0xC0, 0xC0, 0xC0,
0xFF, 0xFF, 0xFF, 0x00, 0x80, 0x80, 0x80, 0xA0, 0x80, 0x28, 0x50, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x80, 0x00, 0xD0,
0xD8, 0xB0, 0xC0, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 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, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0x8F, 0xFE, 0x3F, 0xFE, 0x0F, 0xF8, 0x3F, 0xFE, 0x0F, 0xF8, 0x3F, 0xFE, 0x0F, 0xF8, 0x3F, 0xFE, 0x00,
0x00, 0x3F, 0xFF, 0x00, 0x00, 0x3F, 0xFF, 0x00, 0x00, 0x7F, 0xFF, 0x00, 0x00, 0x7F, 0xFF, 0x00, 0x00, 0x1F, 0xFE,
0x00, 0x00, 0x0F, 0xFC, 0x00, 0x00, 0x0F, 0xF8, 0x00, 0x00, 0x0F, 0xF8, 0x00, 0x00, 0x0F, 0xF8, 0x00, 0x00, 0x0F,
0xF8, 0x00, 0x00, 0x0F, 0xF8, 0x00, 0x00, 0x0F, 0xF8, 0x00, 0x00, 0x0F, 0xF8, 0x00, 0x00, 0x0F, 0xF8, 0x00, 0x00,
0x0F, 0xF8, 0x00, 0x00, 0x0F, 0xF8, 0x00, 0x00, 0x0F, 0xF8, 0x00, 0x00, 0x1F, 0xF8, 0x00, 0x00, 0x3F, 0xFC, 0x00,
0x00, 0x7F, 0xFF, 0xFC, 0x7F, 0xFF, 0xFF, 0xFE, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x22, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x22, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x01, 0x11, 0x22, 0x00, 0x00, 0x00, 0x00, 0x01, 0x11, 0x22, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x31,
0x22, 0x00, 0x00, 0x00, 0x00, 0x01, 0x31, 0x22, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x31, 0x22, 0x00, 0x00,
0x00, 0x00, 0x01, 0x31, 0x22, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x33, 0x12, 0x22, 0x22, 0x22, 0x22, 0x13,
0x31, 0x22, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x13, 0x12, 0x22, 0x22, 0x22, 0x22, 0x13, 0x12, 0x22, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x13, 0x11, 0x11, 0x11, 0x11, 0x11, 0x13, 0x12, 0x20, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x13, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x12, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x21, 0x31, 0x11, 0x11, 0x11, 0x11, 0x31, 0x22, 0x22, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x21, 0x31, 0x22,
0x22, 0x22, 0x21, 0x31, 0x22, 0x22, 0x22, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11,
0x11, 0x11, 0x11, 0x22, 0x00, 0x00, 0x00, 0x00, 0x01, 0x34, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x31,
0x22, 0x00, 0x00, 0x00, 0x00, 0x01, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x41, 0x22, 0x00, 0x00,
0x00, 0x00, 0x01, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x41, 0x22, 0x00, 0x00, 0x00, 0x00, 0x01,
0x44, 0x46, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x44, 0x41, 0x22, 0x00, 0x00, 0x00, 0x00, 0x01, 0x44, 0x44, 0x44,
0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x41, 0x22, 0x00, 0x00, 0x00, 0x00, 0x01, 0x44, 0x46, 0x66, 0x66, 0x66, 0x66,
0x66, 0x66, 0x44, 0x41, 0x22, 0x00, 0x00, 0x00, 0x00, 0x01, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44,
0x41, 0x22, 0x00, 0x00, 0x00, 0x00, 0x01, 0x44, 0x46, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x44, 0x41, 0x22, 0x00,
0x00, 0x00, 0x00, 0x01, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x41, 0x22, 0x00, 0x00, 0x00, 0x00,
0x01, 0x44, 0x46, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x44, 0x41, 0x22, 0x00, 0x00, 0x00, 0x00, 0x01, 0x44, 0x44,
0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x41, 0x20, 0x00, 0x00, 0x00, 0x00, 0x01, 0x34, 0x44, 0x44, 0x44, 0x44,
0x44, 0x44, 0x44, 0x44, 0x31, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11,
0x11, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x14, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x07, 0xFC, 0x1F, 0xFC, 0x07, 0xF0, 0x1F, 0xFC, 0x07, 0xF0, 0x1F, 0xFC, 0x07,
0xF0, 0x1F, 0xFC, 0x00, 0x00, 0x1F, 0xFC, 0x00, 0x00, 0x1F, 0xFE, 0x00, 0x00, 0x1F, 0xFE, 0x00, 0x00, 0x3F, 0xFE,
0x00, 0x00, 0x1F, 0xFE, 0x00, 0x00, 0x0F, 0xFC, 0x00, 0x00, 0x07, 0xF8, 0x00, 0x00, 0x07, 0xF0, 0x00, 0x00, 0x07,
0xF0, 0x00, 0x00, 0x07, 0xF0, 0x00, 0x00, 0x07, 0xF0, 0x00, 0x00, 0x07, 0xF0, 0x00, 0x00, 0x07, 0xF0, 0x00, 0x00,
0x07, 0xF0, 0x00, 0x00, 0x07, 0xF0, 0x00, 0x00, 0x07, 0xF0, 0x00, 0x00, 0x07, 0xF0, 0x00, 0x00, 0x07, 0xF0, 0x00,
0x00, 0x0F, 0xF0, 0x00, 0x00, 0x1F, 0xF8, 0x00, 0x00, 0x3F, 0xFC, 0x00, 0x00, 0x7F, 0xFF, 0xFC, 0x7F, 0xFF, 0xFF,
0xFE, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00,
0x00, 0xF8, 0x03, 0xE0, 0x03, 0x88, 0x0E, 0x20, 0x02, 0x08, 0x08, 0x20, 0x02, 0x88, 0x0A, 0x20, 0x02, 0x8F, 0xFA,
0x20, 0x02, 0xC0, 0x06, 0x20, 0x01, 0x40, 0x04, 0x20, 0x01, 0x40, 0x04, 0x40, 0x01, 0x7F, 0xFC, 0x60, 0x01, 0x20,
0x08, 0x10, 0x02, 0x20, 0x08, 0x08, 0x04, 0x00, 0x00, 0x08, 0x0B, 0xFF, 0xFF, 0x88, 0x0B, 0xFF, 0xFF, 0x88, 0x0B,
0xFF, 0xFF, 0x88, 0x0B, 0x00, 0x03, 0x88, 0x0B, 0xFF, 0xFF, 0x88, 0x0B, 0x00, 0x03, 0x88, 0x0B, 0xFF, 0xFF, 0x88,
0x0B, 0x00, 0x03, 0x88, 0x0B, 0xFF, 0xFF, 0x88, 0x0B, 0x00, 0x03, 0x88, 0x0B, 0xFF, 0xFF, 0x90, 0x0B, 0xFF, 0xFF,
0xA0, 0x04, 0x00, 0x00, 0x40, 0x03, 0xFD, 0x7F, 0x80, 0x00, 0x02, 0x80, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0xED, 0x41, 0x00, 0x00, 0x3B, 0x00, 0x00, 0x00, 0x27, 0x09, 0x00, 0x00, 0xF5, 0x08, 0x00, 0x00, 0x1F, 0x09,
0x00, 0x00, 0x4A, 0x09, 0x00, 0x00, 0x9F, 0x0A, 0x00, 0x00, 0xE3, 0x0A, 0x00, 0x00, 0xE4, 0x09, 0x00, 0x00, 0x02,
0x0A, 0x00, 0x00, 0x29, 0x0A, 0x00, 0x00, 0x55, 0x0A, 0x00, 0x00, 0x72, 0x0A, 0x00, 0x00, 0x88, 0x0A, 0xFF, 0xFF,
0x00, 0x00, 0xE7, 0xCF, 0xE5, 0x1C, 0xE7, 0xCF, 0x65, 0x00, 0xF0, 0x1F, 0xDD, 0x04, 0xF3, 0x9F, 0xF2, 0x03, 0xE0,
0x0F, 0xC7, 0x04, 0xDF, 0xF7, 0x0B, 0x05, 0xDF, 0xF7, 0xF8, 0x04, 0xDF, 0xF7, 0x32, 0x04, 0xDF, 0xF7, 0xA8, 0x04,
0xDF, 0xF7, 0x9E, 0x04, 0xDF, 0xF7, 0xBA, 0x04, 0xE0, 0x0F, 0x7A, 0x04, 0xFD, 0x7F, 0x85, 0x04, 0xFE, 0xFF, 0xFF,
0x04, 0xFF, 0xFF, 0xDF, 0x04, 0xFF, 0xFF, 0x00, 0x00, 0xE7, 0xCF, 0x00, 0x1F, 0xE7, 0xCF, 0x00, 0x1F, 0xF0, 0x1F,
0x00, 0x1F, 0xF3, 0x9F, 0x00, 0x1F, 0xE0, 0x0F, 0x00, 0x1F, 0xDF, 0xF7, 0x00, 0x1F, 0xDF, 0xF7, 0x00, 0x1F, 0xDF,
0xF7, 0x00, 0x1F, 0xDF, 0xF7, 0x00, 0x1F, 0xDF, 0xF7, 0x00, 0x1F, 0xDF, 0xF7, 0x00, 0x7F, 0xE0, 0x0F, 0x00, 0x7F,
0xFD, 0x7F, 0xFF, 0xFF, 0xFE, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x08, 0x70, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x33, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x08, 0x88, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x7F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0F, 0xFF, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x33, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x08, 0x88, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x7F, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xF0,
0x00, 0xE3, 0xF1, 0xF0, 0x00, 0xEB, 0xF5, 0xF1, 0x11, 0xE9, 0xE5, 0xF0, 0x00, 0xF4, 0x0B, 0xF0, 0x00, 0xF7, 0xFB,
0xF0, 0x00, 0xFA, 0x17, 0xF1, 0x11, 0xFA, 0xD7, 0xF0, 0x00, 0xE0, 0x01, 0xF0, 0x0F, 0xDF, 0xFE, 0xF0, 0x00, 0xDF,
0xFE, 0xFF, 0xFF, 0xDF, 0xFE, 0xF0, 0x00, 0xDF, 0xFE, 0xFF, 0xFF, 0xDF, 0xFE, 0xFF, 0xFF, 0xDF, 0xFE, 0xF0, 0x00,
0xDF, 0xFE, 0xFF, 0xFF, 0xE0, 0x01, 0xFF, 0xFF, 0xFF, 0x5F, 0xFF, 0xFF, 0xFF, 0xBF, 0xF6, 0x66, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xF0, 0x00, 0xE3, 0xF1, 0xF0, 0x01, 0xEB, 0xF5, 0xF1, 0x11, 0xE9, 0xE5, 0xF0, 0x00, 0xF4, 0x0B,
0xF0, 0x01, 0xF7, 0xFB, 0xF1, 0x11, 0xFA, 0x17, 0xF0, 0x00, 0xFA, 0xD7, 0xF0, 0x01, 0xE0, 0x01, 0xF1, 0x11, 0xDF,
0xFE, 0xF0, 0x00, 0xDF, 0xFE, 0xF0, 0x01, 0xDF, 0xFE, 0xF1, 0x11, 0xDF, 0xFE, 0xF0, 0x00, 0xDF, 0xFE, 0xF0, 0x00,
0xDF, 0xFE, 0xF0, 0x00, 0xDF, 0xFE, 0xF0, 0x00, 0xE0, 0x01, 0xF0, 0x00, 0xFF, 0x5F, 0xF1, 0x00, 0xFF, 0xBF, 0xF0,
0x00, 0xFF, 0xFF, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x88,
0x88, 0x88, 0x00, 0x00, 0x00, 0x00, 0x00, 0x88, 0x88, 0x7F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x33, 0x7F, 0xFF, 0x00,
0x00, 0x00, 0x00, 0x00, 0x88, 0x80, 0x88, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF7, 0x33, 0x33, 0x00, 0x00, 0x00, 0x00,
0x00, 0x88, 0x00, 0x88, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x7F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x33, 0x7F,
0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0x80, 0x88, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF7, 0x33, 0x33, 0x00, 0x00,
0x00, 0x00, 0x00, 0x80, 0x88, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x88, 0x88, 0x7F, 0x00, 0x00, 0x00, 0x00, 0x00,
0x33, 0x7F, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x87, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF7, 0x33, 0x33,
0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x88, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x88, 0x7F, 0x00, 0x00, 0x00,
0x00, 0x00, 0x33, 0x7F, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x88, 0x88, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF7,
0x33, 0x33, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x77, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x87, 0x08, 0x7F, 0x00,
0x00, 0x00, 0x00, 0x00, 0x33, 0x7F, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x88, 0x70, 0x00, 0x00, 0x00, 0x00,
0x00, 0xF7, 0x33, 0x33, 0x00, 0x00, 0x00, 0x00, 0x00, 0x88, 0x88, 0x88, 0x00, 0x00, 0x00, 0x00, 0x00, 0x88, 0x88,
0x7F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x33, 0x7F, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x88, 0x88, 0x80, 0x00, 0x00,
0x00, 0x00, 0x00, 0xF7, 0x33, 0x33, 0x00, 0x00, 0x00, 0x00, 0x00, 0x88, 0x88, 0x88, 0x00, 0x00, 0x00, 0x00, 0x00,
0x88, 0x88, 0x7F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x33, 0x7F, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x11, 0x11,
0x00, 0x00, 0x00, 0x00, 0x00, 0xF7, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x11, 0x11, 0x00, 0x00, 0x00,
0x00, 0x00, 0x04, 0x00, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7F, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xF0, 0x66, 0x66, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x7F, 0xFF, 0xFF, 0xC3, 0xFF, 0xE1,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x03, 0xFF, 0x81, 0xFF, 0x07, 0x00, 0x00, 0xFF, 0x03, 0xFF, 0x81, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0x03, 0xFF, 0x81, 0xFF, 0xFF, 0x06, 0x60, 0xFF, 0x01, 0xFF, 0x01, 0xFF, 0x00, 0x37, 0x77, 0xFF, 0x00,
0x00, 0x01, 0xFF, 0x77, 0x77, 0x77, 0xFF, 0x80, 0x00, 0x03, 0xFF, 0xEE, 0x00, 0x00, 0xFF, 0x80, 0x00, 0x03, 0xFF,
0x33, 0x33, 0x33, 0xFF, 0x80, 0x00, 0x03, 0xFF, 0x00, 0x00, 0xEE, 0xFF, 0xC0, 0x00, 0x03, 0xFF, 0x00, 0x33, 0x33,
0xFF, 0xC0, 0x00, 0x01, 0xFF, 0x33, 0x33, 0x33, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x0E, 0xEE, 0x00, 0xFE, 0x00, 0x00,
0x00, 0x7F, 0x33, 0x33, 0x33, 0xFC, 0x00, 0x00, 0x00, 0x7F, 0x00, 0x00, 0x00, 0xFC, 0x00, 0x00, 0x00, 0x7F, 0x00,
0x33, 0x33, 0xFC, 0x00, 0x00, 0x00, 0x7F, 0x33, 0x33, 0x33, 0xFC, 0x00, 0x00, 0x00, 0x7F, 0xEE, 0x0E, 0xEE, 0xFC,
0x00, 0x00, 0x00, 0x7F, 0x33, 0x33, 0x33, 0xFC, 0x00, 0x00, 0x00, 0x7F, 0x00, 0x00, 0x00, 0xFC, 0x00, 0x00, 0x00,
0x7F, 0x00, 0x33, 0x33, 0xFC, 0x00, 0x00, 0x00, 0x7F, 0x33, 0x33, 0x33, 0xFC, 0x00, 0x00, 0x00, 0x7F, 0x0E, 0xEE,
0x0E, 0xFC, 0x00, 0x00, 0x00, 0x7F, 0x33, 0x33, 0x33, 0xFC, 0x00, 0x00, 0x00, 0x7F, 0x00, 0x00, 0x00, 0xFC, 0x00,
0x00, 0x00, 0x7F, 0x40, 0x33, 0x33, 0xFC, 0x00, 0x00, 0x00, 0x7F, 0x33, 0x33, 0x33, 0xFC, 0x00, 0x00, 0x00, 0xFF,
0x00, 0x0E, 0x00, 0xFC, 0x00, 0x00, 0x01, 0xFF, 0x33, 0x33, 0x33, 0xFE, 0x00, 0x00, 0x03, 0xFF, 0x00, 0x00, 0x00,
0xFF, 0xFF, 0x87, 0xFF, 0xFF, 0xF0, 0x33, 0x33, 0xFF, 0xFF, 0x87, 0xFF, 0xFF, 0x33, 0x33, 0x33, 0xFF, 0xFF, 0xCF,
0xFF, 0xFF, 0x00, 0x00, 0x04, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x33, 0x33, 0x33, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00,
0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x5D, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x22, 0x22, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x22, 0x20,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x11, 0x22, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x11, 0x12,
0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x13, 0x31, 0x22, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x33,
0x12, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x13, 0x31, 0x22, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01,
0x33, 0x12, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x13, 0x33, 0x12, 0x20, 0x00, 0x00, 0x00, 0x00,
0x13, 0x33, 0x12, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x33, 0x12, 0x22, 0x22, 0x22, 0x22,
0x22, 0x13, 0x33, 0x12, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x33, 0x12, 0x22, 0x22, 0x22,
0x22, 0x22, 0x13, 0x31, 0x22, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x33, 0x31, 0x11, 0x11,
0x11, 0x11, 0x11, 0x33, 0x31, 0x22, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x33, 0x33, 0x33,
0x33, 0x33, 0x33, 0x33, 0x33, 0x31, 0x22, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x13, 0x33,
0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x12, 0x22, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x13,
0x31, 0x11, 0x11, 0x11, 0x11, 0x11, 0x33, 0x12, 0x22, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x22,
0x13, 0x33, 0x12, 0x22, 0x22, 0x22, 0x13, 0x33, 0x12, 0x22, 0x22, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01,
0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x12, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x13, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x43, 0x12, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x14, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x12, 0x20, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x14, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x12, 0x20, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x14, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x12, 0x20, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x14, 0x44, 0x43, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x44, 0x44, 0x12, 0x20, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x14, 0x44, 0x49, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x44, 0x44, 0x12, 0x20,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x14, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x12,
0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x14, 0x44, 0x43, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x44, 0x44,
0x12, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x14, 0x44, 0x49, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x44,
0x44, 0x12, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x14, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44,
0x44, 0x44, 0x12, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x14, 0x44, 0x43, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33,
0x33, 0x44, 0x44, 0x12, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x14, 0x44, 0x49, 0x99, 0x99, 0x99, 0x99, 0x99,
0x99, 0x99, 0x44, 0x44, 0x12, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x14, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44,
0x44, 0x44, 0x44, 0x44, 0x44, 0x12, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x14, 0x44, 0x44, 0x44, 0x44, 0x44,
0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x12, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x13, 0x44, 0x44, 0x44, 0x44,
0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x43, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x11, 0x11, 0x11,
0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x01, 0x33, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x01, 0x33, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00};
#endif // SETTER_SRC_BSD_XATTR_H_

View File

@@ -0,0 +1,50 @@
# /****************************************************************************
# Aaru Data Preservation Suite
# -----------------------------------------------------------------------------
#
# Author(s) : Natalia Portillo
#
# --[ License ] ---------------------------------------------------------------
# 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 <http://www.gnu.org/licenses/>.
#
# -----------------------------------------------------------------------------
# Copyright (C) 2011-2021 Natalia Portillo
# *****************************************************************************/
if(NOT ${CMAKE_SYSTEM_NAME} MATCHES "Darwin")
return()
endif()
project(fssetter-darwin
DESCRIPTION "Filesystem test creator for Darwin"
LANGUAGES C)
find_library(CARBON_LIBRARY NAMES Carbon)
set(PLATFORM_SOURCES os.c darwin.h volume.c volume.h attr.c attr.h rsrcfork.c rsrcfork.h sparse.c xattr.c xattr.h)
if(CARBON_LIBRARY)
add_definitions("-DHAVE_CARBON")
set(PLATFORM_SOURCES ${PLATFORM_SOURCES} carbon.c carbon.h)
endif()
set(EXECUTABLE_NAME "fssetter-${CMAKE_SYSTEM_NAME}-${CMAKE_SYSTEM_PROCESSOR}")
add_executable(${EXECUTABLE_NAME} ${PLATFORM_SOURCES})
if(CARBON_LIBRARY)
target_link_libraries(${EXECUTABLE_NAME} core unix ${CARBON_LIBRARY})
else()
target_link_libraries(${EXECUTABLE_NAME} core unix)
endif()

View File

@@ -0,0 +1,105 @@
/****************************************************************************
Aaru Data Preservation Suite
-----------------------------------------------------------------------------
Author(s) : Natalia Portillo
--[ License ] ---------------------------------------------------------------
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 <http://www.gnu.org/licenses/>.
-----------------------------------------------------------------------------
Copyright (C) 2011-2021 Natalia Portillo
*****************************************************************************/
#include <errno.h>
#include <stdio.h>
#include <unistd.h>
#include "attr.h"
#include "../../log.h"
void DarwinFileAttributes(const char* path)
{
int ret;
int fd;
FILE* h;
int rc;
int wRc;
int sRc;
int cRc;
int attr;
int i;
ret = chdir(path);
if(ret)
{
log_write("Error %d changing to specified path.\n", errno);
return;
}
ret = mkdir("ATTRS", 0755);
if(ret)
{
log_write("Error %d creating working directory.\n", errno);
return;
}
ret = chdir("ATTRS");
if(ret)
{
log_write("Error %d changing to working directory.\n", errno);
return;
}
log_write("Creating files with different flags (attributes).\n");
for(i = 0; i < KNOWN_DARWIN_ATTRS; i++)
{
h = fopen(darwin_attrs[i].filename, "w+");
rc = 0;
wRc = 0;
sRc = 0;
cRc = 0;
attr = 0;
if(h == NULL) { rc = errno; }
else
{
fd = fileno(h);
ret = fchflags(fd, darwin_attrs[i].attr);
if(ret)
{
sRc = errno;
unlink(darwin_attrs[i].filename);
}
else
{
ret = fprintf(h, "%s", darwin_attrs[i].contents);
if(ret < 1)
{
wRc = errno;
unlink(darwin_attrs[i].filename);
}
}
ret = fclose(h);
if(ret) { cRc = errno; }
}
log_write("\t%s, rc = %d, wRc = %d, sRc = %d, cRc = %d\n", darwin_attrs[i].description, rc, wRc, sRc, cRc);
}
}

View File

@@ -0,0 +1,93 @@
/****************************************************************************
Aaru Data Preservation Suite
-----------------------------------------------------------------------------
Author(s) : Natalia Portillo
--[ License ] ---------------------------------------------------------------
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 <http://www.gnu.org/licenses/>.
-----------------------------------------------------------------------------
Copyright (C) 2011-2021 Natalia Portillo
*****************************************************************************/
#ifndef AARU_FSTESTER_SETTER_SRC_DARWIN_ATTR_H_
#define AARU_FSTESTER_SETTER_SRC_DARWIN_ATTR_H_
#include <sys/stat.h>
typedef struct
{
char filename[16];
char contents[256];
char description[256];
unsigned int attr;
} darwin_attr_tests_t;
#define KNOWN_DARWIN_ATTRS 9
#ifndef UF_NODUMP
#define UF_NODUMP 0x00000001 /* Do not dump the file. */
#endif
#ifndef UF_IMMUTABLE
#define UF_IMMUTABLE 0x00000002 /* The file may not be changed. */
#endif
#ifndef UF_APPEND
#define UF_APPEND 0x00000004 /* The file may only be appended to. */
#endif
#ifndef UF_OPAQUE
#define UF_OPAQUE 0x00000008 /* The directory is opaque when viewed through a union stack. */
#endif
#ifndef UF_HIDDEN
#define UF_HIDDEN 0x00000010 /* The file or directory is not intended to be displayed to the user. */
#endif
#ifndef SF_ARCHIVED
#define SF_ARCHIVED 0x00000020 /* The file has been archived. */
#endif
#ifndef SF_IMMUTABLE
#define SF_IMMUTABLE 0x00000040 /* The file may not be changed. */
#endif
#ifndef SF_APPEND
#define SF_APPEND 0x00000080 /* The file may only be appended to. */
#endif
#ifndef SF_DATALESS
#define SF_DATALESS 0x00004000 /* The file is a dataless placeholder. */
#endif
static const darwin_attr_tests_t darwin_attrs[KNOWN_DARWIN_ATTRS] = {
{"NODUMP", "This file is now not dumpable", "File with no dump flag", UF_NODUMP},
{"IMMUTABLE", "This file is now immutable", "File with immutable flag", UF_IMMUTABLE},
{"APPEND", "This file is now append only", "File with append only flag", UF_APPEND},
{"OPAQUE", "This directory is opaque when viewed through a union stack", "File with opaque flag", UF_OPAQUE},
{"HIDDEN", "This file is hidden from user view", "File with hidden flag", UF_HIDDEN},
{"ARCHIVED", "This file is now archived", "File with archived flag", SF_ARCHIVED},
{"SF_IMMUTABLE",
"This file is now immutable, and only the super-user change change that",
"File with super-usr immutable flag",
SF_IMMUTABLE},
{"SF_APPEND",
"This file is now append only, and only the super-user change change that",
"File with super-user append only flag",
SF_APPEND},
{"SF_DATALESS", "This file is a dataless placeholder", "File with dataless flag", SF_DATALESS},
};
#endif // AARU_FSTESTER_SETTER_SRC_DARWIN_ATTR_H_

View File

@@ -0,0 +1,451 @@
//
// Created by claunia on 16/3/21.
//
#include <Carbon/Carbon.h>
#include <MacTypes.h>
#include <string.h>
#include <sys/stat.h>
#include "carbon.h"
#include "../../log.h"
#include "rsrcfork.h"
#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wdeprecated-declarations"
int CarbonResourceFork(const char* path)
{
int ret;
unsigned char* absolute_path;
OSStatus err;
FSRef parentDirRef;
TextToUnicodeInfo oTextToUnicodeInfo;
UniChar iconUnicodeStr[256];
ByteCount iconUnicodeLen = 0;
UniChar pictUnicodeStr[256];
ByteCount pictUnicodeLen = 0;
UniChar versionUnicodeStr[256];
ByteCount versionUnicodeLen = 0;
UniChar allUnicodeStr[256];
ByteCount allUnicodeLen = 0;
ByteCount unicodeRead;
HFSUniStr255 resourceForkName;
int count = -1; // Not even tried to write a resource fork
OSErr rc, rRc;
FSRef fileRef;
ResFileRefNum rsrcRef;
Handle h;
FILE* f;
size_t txtLen, written;
int wRc, cRc;
memset(&oTextToUnicodeInfo, 0, sizeof(TextToUnicodeInfo));
err = CreateTextToUnicodeInfoByEncoding(kTextEncodingMacRoman, &oTextToUnicodeInfo);
if(err)
{
log_write("Error %d getting MacRoman to Unicode converter.\n", err);
return count;
}
err = ConvertFromTextToUnicode(
oTextToUnicodeInfo, 4, "ICNS", 0, 0, NULL, NULL, NULL, 256, &unicodeRead, &iconUnicodeLen, iconUnicodeStr);
if(err)
{
log_write("Error %d converting \"ICNS\" to Unicode.\n", err);
return count;
}
if(unicodeRead < 4)
{
log_write("Needed to read 4 bytes to convert \"ICNS\" to Unicode but read %d bytes.\n", unicodeRead);
return count;
}
err = ConvertFromTextToUnicode(
oTextToUnicodeInfo, 4, "PICT", 0, 0, NULL, NULL, NULL, 256, &unicodeRead, &pictUnicodeLen, pictUnicodeStr);
if(err)
{
log_write("Error %d converting \"PICT\" to Unicode.\n", err);
return count;
}
if(unicodeRead < 4)
{
log_write("Needed to read 4 bytes to convert \"PICT\" to Unicode but read %d bytes.\n", unicodeRead);
return count;
}
err = ConvertFromTextToUnicode(oTextToUnicodeInfo,
7,
"VERSION",
0,
0,
NULL,
NULL,
NULL,
256,
&unicodeRead,
&versionUnicodeLen,
versionUnicodeStr);
if(err)
{
log_write("Error %d converting \"VERSION\" to Unicode.\n", err);
return count;
}
if(unicodeRead < 7)
{
log_write("Needed to read 7 bytes to convert \"VERSION\" to Unicode but read %d bytes.\n", unicodeRead);
return count;
}
err = ConvertFromTextToUnicode(
oTextToUnicodeInfo, 3, "ALL", 0, 0, NULL, NULL, NULL, 256, &unicodeRead, &allUnicodeLen, allUnicodeStr);
if(err)
{
log_write("Error %d converting \"ALL\" to Unicode.\n", err);
return count;
}
if(unicodeRead < 3)
{
log_write("Needed to read 4 bytes to convert \"ALL\" to Unicode but read %d bytes.\n", unicodeRead);
return count;
}
err = FSGetResourceForkName(&resourceForkName);
if(err)
{
log_write("Error %d trying to get resource fork name.\n", err);
return count;
}
ret = chdir(path);
if(ret)
{
log_write("Error %d changing to specified path.\n", errno);
return count;
}
ret = mkdir("RSRC", 0755);
if(ret)
{
log_write("Error %d creating working directory.\n", errno);
return count;
}
absolute_path = (unsigned char*)realpath("RSRC", NULL);
if(absolute_path == NULL)
{
log_write("Error getting working directory absolute path.\n", errno);
ret = rmdir("RSRC");
return ret ? -1 : 0;
}
ret = chdir("RSRC");
if(ret)
{
log_write("Error %d changing to working directory.\n", errno);
ret = rmdir("RSRC");
return ret ? -1 : 0;
}
count++; // Set to 0, we can start
memset(&parentDirRef, 0, sizeof(FSRef));
err = FSPathMakeRef(absolute_path, &parentDirRef, NULL);
if(err)
{
log_write("Error %d getting filesystem reference from path.\n", err);
return count;
}
log_write("Creating resource forks.\n");
rc = FSCreateResourceFile(&parentDirRef,
iconUnicodeLen,
iconUnicodeStr,
kFSCatInfoNone,
NULL,
resourceForkName.length,
resourceForkName.unicode,
&fileRef,
NULL);
rRc = 0;
wRc = 0;
cRc = 0;
if(!rc)
{
rRc = FSOpenResourceFile(&fileRef, resourceForkName.length, resourceForkName.unicode, fsRdWrPerm, &rsrcRef);
if(!rRc)
{
h = NewHandle(ICNS_RESOURCE_SIZE);
if(h)
{
memcpy(h, IcnsResource, ICNS_RESOURCE_SIZE);
AddResource(h, rtIcons, -16455, IcnsResourceNamePascal);
WriteResource(h);
ReleaseResource(h);
UpdateResFile(rsrcRef);
CloseResFile(rsrcRef);
count++;
f = fopen("ICNS", "w+");
if(f != NULL)
{
txtLen = strlen(icnsText);
written = fwrite(icnsText, txtLen, 1, f);
wRc = written != txtLen ? errno : 0;
cRc = fclose(f);
}
else
rc = errno;
}
}
}
log_write("\tFile with an icon in the resource fork: name = \"%s\", rc = %d, wRc = %d, cRc = %d, rRc = %d\n",
"ICNS",
rc,
wRc,
cRc,
rRc);
rc = FSCreateResourceFile(&parentDirRef,
pictUnicodeLen,
pictUnicodeStr,
kFSCatInfoNone,
NULL,
resourceForkName.length,
resourceForkName.unicode,
&fileRef,
NULL);
rRc = 0;
wRc = 0;
cRc = 0;
if(!rc)
{
rRc = FSOpenResourceFile(&fileRef, resourceForkName.length, resourceForkName.unicode, fsRdWrPerm, &rsrcRef);
if(!rRc)
{
h = NewHandle(PICT_RESOURCE_SIZE);
if(h)
{
memcpy(h, PictResource, PICT_RESOURCE_SIZE);
AddResource(h, ftPICTFile, 29876, PictResourceNamePascal);
WriteResource(h);
ReleaseResource(h);
UpdateResFile(rsrcRef);
CloseResFile(rsrcRef);
count++;
f = fopen("PICT", "w+");
if(f != NULL)
{
txtLen = strlen(pictText);
written = fwrite(pictText, txtLen, 1, f);
wRc = written != txtLen ? errno : 0;
cRc = fclose(f);
}
else
rc = errno;
}
}
}
log_write("\tFile with an picture in the resource fork: name = \"%s\", rc = %d, wRc = %d, cRc = %d, rRc = %d\n",
"PICT",
rc,
wRc,
cRc,
rRc);
rc = FSCreateResourceFile(&parentDirRef,
versionUnicodeLen,
versionUnicodeStr,
kFSCatInfoNone,
NULL,
resourceForkName.length,
resourceForkName.unicode,
&fileRef,
NULL);
rRc = 0;
wRc = 0;
cRc = 0;
if(!rc)
{
rRc = FSOpenResourceFile(&fileRef, resourceForkName.length, resourceForkName.unicode, fsRdWrPerm, &rsrcRef);
if(!rRc)
{
h = NewHandle(VERS_RESOURCE_SIZE);
if(h)
{
memcpy(h, VersResource, VERS_RESOURCE_SIZE);
AddResource(h, rtVersion, 1, VersResourceNamePascal);
WriteResource(h);
ReleaseResource(h);
UpdateResFile(rsrcRef);
CloseResFile(rsrcRef);
count++;
f = fopen("VERSION", "w+");
if(f != NULL)
{
txtLen = strlen(versText);
written = fwrite(versText, txtLen, 1, f);
wRc = written != txtLen ? errno : 0;
cRc = fclose(f);
}
else
rc = errno;
}
}
}
log_write("\tFile with a version in the resource fork: name = \"%s\", rc = %d, wRc = %d, cRc = %d, rRc = %d\n",
"VERSION",
rc,
wRc,
cRc,
rRc);
rc = FSCreateResourceFile(&parentDirRef,
allUnicodeLen,
allUnicodeStr,
kFSCatInfoNone,
NULL,
resourceForkName.length,
resourceForkName.unicode,
&fileRef,
NULL);
rRc = 0;
wRc = 0;
cRc = 0;
if(!rc)
{
rRc = FSOpenResourceFile(&fileRef, resourceForkName.length, resourceForkName.unicode, fsRdWrPerm, &rsrcRef);
if(!rRc)
{
h = NewHandle(ICNS_RESOURCE_SIZE);
if(h)
{
memcpy(h, IcnsResource, ICNS_RESOURCE_SIZE);
AddResource(h, rtIcons, -16455, IcnsResourceNamePascal);
WriteResource(h);
ReleaseResource(h);
count++;
}
h = NewHandle(PICT_RESOURCE_SIZE);
if(h)
{
memcpy(h, PictResource, PICT_RESOURCE_SIZE);
AddResource(h, ftPICTFile, -16455, PictResourceNamePascal);
WriteResource(h);
ReleaseResource(h);
count++;
}
h = NewHandle(VERS_RESOURCE_SIZE);
if(h)
{
memcpy(h, VersResource, VERS_RESOURCE_SIZE);
AddResource(h, rtVersion, 1, VersResourceNamePascal);
WriteResource(h);
ReleaseResource(h);
count++;
}
UpdateResFile(rsrcRef);
CloseResFile(rsrcRef);
f = fopen("ALL", "w+");
if(f != NULL)
{
txtLen = strlen(rsrcText);
written = fwrite(rsrcText, txtLen, 1, f);
wRc = written != txtLen ? errno : 0;
cRc = fclose(f);
}
else
rc = errno;
}
}
log_write("\tFile with an icon, a picture and a version in the resource fork: name = \"%s\", rc = %d, wRc = %d, "
"cRc = %d, rRc = %d\n",
"ALL",
rc,
wRc,
cRc,
rRc);
return count;
}
#pragma clang diagnostic pop

View File

@@ -0,0 +1,879 @@
/****************************************************************************
Aaru Data Preservation Suite
-----------------------------------------------------------------------------
Author(s) : Natalia Portillo
--[ License ] ---------------------------------------------------------------
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 <http://www.gnu.org/licenses/>.
-----------------------------------------------------------------------------
Copyright (C) 2011-2021 Natalia Portillo
*****************************************************************************/
#ifndef AARU_FSTESTER_SETTER_SRC_DARWIN_CARBON_H_
#define AARU_FSTESTER_SETTER_SRC_DARWIN_CARBON_H_
enum
{
rtIcons = 'icns',
rtVersion = 'vers',
ftPICTFile = 'PICT'
};
/**
* Creates resources in the resource fork using Carbon APIs
* @param path Path to the volume where to create them
* @return -1 if Carbon failed, 0 if Carbon worked but could not enter the test folder, otherwise number of written
* resources
*/
int CarbonResourceFork(const char* path);
#define ICNS_RESOURCE_SIZE 5618
#define VERS_RESOURCE_SIZE 44
#define PICT_RESOURCE_SIZE 9874
static const unsigned char IcnsResourceNamePascal[] =
{0x0C, 0x49, 0x63, 0x6F, 0x6E, 0x20, 0x72, 0x65, 0x73, 0x6F, 0x75, 0x72, 0x63, 0x65};
static const unsigned char PictResourceNamePascal[] =
{0x10, 0x50, 0x69, 0x63, 0x74, 0x75, 0x72, 0x65, 0x20, 0x72, 0x65, 0x73, 0x6F, 0x75, 0x72, 0x63, 0x65};
static const unsigned char VersResourceNamePascal[] =
{0x10, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6F, 0x6E, 0x20, 0x72, 0x65, 0x73, 0x6F, 0x75, 0x72, 0x63, 0x65};
static const unsigned char IcnsResource[ICNS_RESOURCE_SIZE] = {
0x69, 0x63, 0x6E, 0x73, 0x00, 0x00, 0x15, 0xF2, 0x69, 0x63, 0x73, 0x23, 0x00, 0x00, 0x00, 0x48, 0x00, 0xF0, 0x01,
0xE0, 0xFF, 0xFE, 0x82, 0x03, 0x96, 0x43, 0x94, 0x43, 0x84, 0x03, 0x84, 0x03, 0x87, 0x83, 0x81, 0x03, 0x99, 0x33,
0x87, 0xC3, 0x81, 0x03, 0xFF, 0xFF, 0x7F, 0xFF, 0x00, 0xF0, 0x00, 0xF0, 0x01, 0xE0, 0xFF, 0xFE, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0x7F, 0xFF, 0x00, 0xF0, 0x69, 0x63, 0x73, 0x38, 0x00, 0x00, 0x01, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0xFD, 0xFE, 0xFD, 0xFD, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFD, 0xFF, 0xFD,
0xFD, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0x00, 0xFF, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0xFF, 0x2A, 0x2A, 0x2A, 0x2A, 0x2A, 0x2A, 0x2A, 0xFD, 0xFD,
0xFF, 0x7F, 0x7F, 0xF1, 0x7F, 0x7F, 0xFF, 0x2A, 0x2A, 0xFF, 0x2A, 0x2A, 0x2A, 0x2A, 0xFD, 0xFD, 0xFF, 0x7F, 0x7F,
0xF1, 0x7F, 0xFF, 0x2A, 0x2A, 0x2A, 0xFF, 0x2A, 0x2A, 0x2A, 0x2A, 0xFD, 0xFD, 0xFF, 0x7F, 0x7F, 0x7F, 0x7F, 0xFF,
0x2A, 0x2A, 0x2A, 0x2A, 0x2A, 0x2A, 0x2A, 0x2A, 0xFD, 0xFD, 0xFF, 0x7F, 0x7F, 0x7F, 0x7F, 0xFF, 0x2A, 0x2A, 0x2A,
0x2A, 0x2A, 0x2A, 0x2A, 0x2A, 0xFD, 0xFD, 0xFF, 0x7F, 0x7F, 0x7F, 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0x2A, 0x2A, 0x2A,
0x2A, 0x2A, 0xFD, 0xFD, 0xFF, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0xFF, 0x2A, 0x2A, 0x2A, 0x2A, 0x2A, 0x2A, 0xFD,
0xFD, 0xFF, 0x7F, 0x7F, 0xFF, 0xF1, 0x7F, 0x7F, 0xFF, 0x2A, 0x2A, 0xFF, 0xFF, 0x2A, 0x2A, 0xFD, 0xAD, 0xFF, 0x7F,
0x7F, 0x7F, 0x7F, 0xF1, 0xF1, 0xFF, 0xFF, 0xFF, 0x2A, 0x2A, 0x2A, 0x2A, 0xFD, 0xFE, 0xFF, 0x7F, 0x7F, 0x7F, 0x7F,
0x7F, 0x7F, 0xFF, 0x2A, 0x2A, 0x2A, 0x2A, 0x2A, 0x2A, 0xFD, 0xFD, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFD, 0x00, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFF, 0xFD, 0xFD,
0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFD, 0xFF, 0xFD, 0xFD, 0x00, 0x00,
0x00, 0x00, 0x69, 0x73, 0x33, 0x32, 0x00, 0x00, 0x01, 0xDF, 0x85, 0xFF, 0x03, 0x44, 0x11, 0x44, 0x44, 0x88, 0xFF,
0x03, 0x44, 0x00, 0x44, 0x44, 0x82, 0xFF, 0x8C, 0x00, 0x01, 0xFF, 0x00, 0x82, 0x66, 0x00, 0x00, 0x84, 0xCC, 0x0B,
0x22, 0x44, 0x00, 0x66, 0x66, 0x00, 0x66, 0x66, 0x00, 0xCC, 0xCC, 0x00, 0x81, 0xCC, 0x07, 0x22, 0x44, 0x00, 0x66,
0x66, 0x00, 0x66, 0x00, 0x80, 0xCC, 0x00, 0x00, 0x81, 0xCC, 0x02, 0x22, 0x44, 0x00, 0x81, 0x66, 0x00, 0x00, 0x85,
0xCC, 0x02, 0x22, 0x44, 0x00, 0x81, 0x66, 0x00, 0x00, 0x85, 0xCC, 0x02, 0x22, 0x44, 0x00, 0x81, 0x66, 0x81, 0x00,
0x82, 0xCC, 0x02, 0x22, 0x44, 0x00, 0x83, 0x66, 0x00, 0x00, 0x83, 0xCC, 0x12, 0x22, 0x44, 0x00, 0x66, 0x66, 0x00,
0x00, 0x66, 0x66, 0x00, 0xCC, 0xCC, 0x00, 0x00, 0xCC, 0xCC, 0x22, 0x44, 0x00, 0x81, 0x66, 0x82, 0x00, 0x81, 0xCC,
0x02, 0x22, 0x44, 0x00, 0x83, 0x66, 0x00, 0x00, 0x83, 0xCC, 0x01, 0x22, 0x44, 0x8C, 0x00, 0x01, 0x44, 0xFF, 0x84,
0x44, 0x00, 0x00, 0x84, 0x44, 0x85, 0xFF, 0x03, 0x44, 0x00, 0x44, 0x44, 0x81, 0xFF, 0x85, 0xFF, 0x03, 0x44, 0x11,
0x44, 0x44, 0x88, 0xFF, 0x03, 0x44, 0x00, 0x44, 0x44, 0x82, 0xFF, 0x8C, 0x00, 0x01, 0xFF, 0x00, 0x82, 0x66, 0x00,
0x00, 0x84, 0xCC, 0x0B, 0x22, 0x44, 0x00, 0x66, 0x66, 0x00, 0x66, 0x66, 0x00, 0xCC, 0xCC, 0x00, 0x81, 0xCC, 0x07,
0x22, 0x44, 0x00, 0x66, 0x66, 0x00, 0x66, 0x00, 0x80, 0xCC, 0x00, 0x00, 0x81, 0xCC, 0x02, 0x22, 0x44, 0x00, 0x81,
0x66, 0x00, 0x00, 0x85, 0xCC, 0x02, 0x22, 0x44, 0x00, 0x81, 0x66, 0x00, 0x00, 0x85, 0xCC, 0x02, 0x22, 0x44, 0x00,
0x81, 0x66, 0x81, 0x00, 0x82, 0xCC, 0x02, 0x22, 0x44, 0x00, 0x83, 0x66, 0x00, 0x00, 0x83, 0xCC, 0x12, 0x22, 0x44,
0x00, 0x66, 0x66, 0x00, 0x00, 0x66, 0x66, 0x00, 0xCC, 0xCC, 0x00, 0x00, 0xCC, 0xCC, 0x22, 0x44, 0x00, 0x81, 0x66,
0x82, 0x00, 0x81, 0xCC, 0x02, 0x22, 0x44, 0x00, 0x83, 0x66, 0x00, 0x00, 0x83, 0xCC, 0x01, 0x22, 0x44, 0x8C, 0x00,
0x01, 0x44, 0xFF, 0x84, 0x44, 0x00, 0x00, 0x84, 0x44, 0x85, 0xFF, 0x03, 0x44, 0x00, 0x44, 0x44, 0x81, 0xFF, 0x85,
0xFF, 0x03, 0x44, 0x11, 0x44, 0x44, 0x88, 0xFF, 0x03, 0x44, 0x00, 0x44, 0x44, 0x82, 0xFF, 0x8C, 0x00, 0x01, 0xFF,
0x00, 0x82, 0xCC, 0x00, 0x00, 0x84, 0xFF, 0x0B, 0x22, 0x44, 0x00, 0xCC, 0xCC, 0x55, 0xCC, 0xCC, 0x00, 0xFF, 0xFF,
0x00, 0x81, 0xFF, 0x07, 0x22, 0x44, 0x00, 0xCC, 0xCC, 0x55, 0xCC, 0x00, 0x80, 0xFF, 0x00, 0x00, 0x81, 0xFF, 0x02,
0x22, 0x44, 0x00, 0x81, 0xCC, 0x00, 0x00, 0x85, 0xFF, 0x02, 0x22, 0x44, 0x00, 0x81, 0xCC, 0x00, 0x00, 0x85, 0xFF,
0x02, 0x22, 0x44, 0x00, 0x81, 0xCC, 0x81, 0x00, 0x82, 0xFF, 0x02, 0x22, 0x44, 0x00, 0x83, 0xCC, 0x00, 0x00, 0x83,
0xFF, 0x12, 0x22, 0x44, 0x00, 0xCC, 0xCC, 0x55, 0x55, 0xCC, 0xCC, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x22,
0x00, 0x00, 0x81, 0xCC, 0x01, 0x55, 0x55, 0x80, 0x00, 0x81, 0xFF, 0x02, 0x22, 0x44, 0x00, 0x83, 0xCC, 0x00, 0x00,
0x83, 0xFF, 0x01, 0x22, 0x44, 0x8C, 0x00, 0x01, 0x44, 0xFF, 0x84, 0x44, 0x00, 0x00, 0x84, 0x44, 0x85, 0xFF, 0x03,
0x44, 0x00, 0x44, 0x44, 0x81, 0xFF, 0x73, 0x38, 0x6D, 0x6B, 0x00, 0x00, 0x01, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x3C, 0xFF, 0x4C, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3C,
0xFF, 0x4C, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0x4C, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x4C, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x4C, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x4C, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x4C, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x4C, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0x4C, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x4C,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x4C, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x4C, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x4C, 0x00, 0x4C, 0x4C, 0x4C, 0x4C, 0x4C, 0x4C, 0x4C, 0xFF,
0x86, 0x4C, 0x4C, 0x4C, 0x4C, 0x4C, 0x4C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3C, 0xFF, 0x4C, 0x18,
0x00, 0x00, 0x00, 0x00, 0x49, 0x43, 0x4E, 0x23, 0x00, 0x00, 0x01, 0x08, 0x00, 0x07, 0xC0, 0x00, 0x00, 0x1C, 0x78,
0x00, 0x00, 0x70, 0x0E, 0x00, 0x01, 0xC0, 0x03, 0x80, 0x01, 0x40, 0x00, 0xE0, 0x01, 0x10, 0x00, 0x38, 0x01, 0x04,
0x00, 0x18, 0x01, 0x61, 0x00, 0x38, 0x01, 0x58, 0x40, 0xF8, 0x01, 0x4E, 0x17, 0xF8, 0x01, 0x43, 0x83, 0xF8, 0x01,
0x42, 0xE3, 0xF8, 0x01, 0x40, 0x33, 0xF8, 0x01, 0x45, 0x73, 0xF8, 0x01, 0x60, 0x33, 0xF8, 0x01, 0xD5, 0x73, 0xF8,
0xFF, 0xFF, 0xB3, 0xF8, 0x81, 0x01, 0xF3, 0xF8, 0x8B, 0x21, 0xB3, 0xF8, 0x8A, 0x21, 0xF3, 0xF8, 0x82, 0x01, 0xF3,
0xF8, 0x82, 0x01, 0x83, 0xFC, 0x82, 0x01, 0xC3, 0xFF, 0x83, 0xC1, 0xE3, 0xFF, 0x80, 0x81, 0x83, 0xFF, 0x98, 0x99,
0x83, 0xFF, 0x87, 0xE1, 0x83, 0xFF, 0x80, 0x81, 0x83, 0xFE, 0xFF, 0xFF, 0xE7, 0xFC, 0x7F, 0xFF, 0xFF, 0xF8, 0x00,
0x7B, 0xFF, 0xF0, 0x00, 0x00, 0xFF, 0xE0, 0x00, 0x07, 0xC0, 0x00, 0x00, 0x1F, 0xF8, 0x00, 0x00, 0x7F, 0xFE, 0x00,
0x01, 0xFF, 0xFF, 0x80, 0x01, 0xFF, 0xFF, 0xE0, 0x01, 0xFF, 0xFF, 0xF8, 0x01, 0xFF, 0xFF, 0xF8, 0x01, 0xFF, 0xFF,
0xF8, 0x01, 0xFF, 0xFF, 0xF8, 0x01, 0xFF, 0xFF, 0xF8, 0x01, 0xFF, 0xFF, 0xF8, 0x01, 0xFF, 0xFF, 0xF8, 0x01, 0xFF,
0xFF, 0xF8, 0x01, 0xFF, 0xFF, 0xF8, 0x01, 0xFF, 0xFF, 0xF8, 0x01, 0xFF, 0xFF, 0xF8, 0xFF, 0xFF, 0xFF, 0xF8, 0xFF,
0xFF, 0xFF, 0xF8, 0xFF, 0xFF, 0xFF, 0xF8, 0xFF, 0xFF, 0xFF, 0xF8, 0xFF, 0xFF, 0xFF, 0xF8, 0xFF, 0xFF, 0xFF, 0xFC,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0xFF, 0xFF, 0xFF, 0xFC, 0x7F, 0xFF, 0xFF, 0xF8, 0x00, 0x7B, 0xFF, 0xF0, 0x00, 0x00,
0xFF, 0xE0, 0x69, 0x63, 0x6C, 0x38, 0x00, 0x00, 0x04, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0xFD, 0xFC, 0xFD, 0xFF, 0xFD, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFD, 0xFC, 0xFD, 0xF9,
0xF7, 0xF9, 0xFC, 0xFF, 0xFF, 0xFD, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFD, 0xFC, 0xFD, 0xF9, 0xF7, 0x00, 0x00, 0xF5, 0xF6, 0xF8, 0xF9, 0xFC,
0xFF, 0xFD, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFD,
0xFC, 0xFD, 0xF9, 0xF7, 0xF6, 0x00, 0xF5, 0xF6, 0xF6, 0xF6, 0xF6, 0xF6, 0xF8, 0xF9, 0xFC, 0xFF, 0xFD, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFC, 0xF9, 0xFC, 0xF7, 0xF6, 0x00, 0xF6,
0xF6, 0xF6, 0xF6, 0xF6, 0xF6, 0xF6, 0xF6, 0xF6, 0xF8, 0xF9, 0xFC, 0xFF, 0xFD, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFC, 0xF7, 0xF7, 0xF9, 0xFC, 0xF7, 0xF5, 0xF6, 0xF6, 0xF6, 0xF6, 0xF6, 0xF6,
0xF6, 0xF6, 0xF6, 0xF6, 0xF8, 0xF9, 0xFC, 0xFF, 0xFD, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0xFC, 0xF7, 0xF7, 0xF7, 0xF7, 0xF9, 0xFC, 0xF7, 0xF5, 0xF6, 0xF6, 0xF6, 0xF6, 0xF6, 0xF6, 0xF6, 0xF6, 0x2B, 0xF8,
0xF9, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFC, 0xF7, 0xAC, 0xFC, 0xF7, 0xF7,
0xF7, 0xF9, 0xFC, 0xF7, 0xF5, 0xF6, 0xF6, 0xF6, 0xF6, 0xF6, 0x2B, 0xF7, 0xF9, 0xFF, 0xAC, 0xFF, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFC, 0xF7, 0xAC, 0x54, 0xFD, 0xFC, 0xF7, 0xF7, 0xF7, 0xF9, 0xFC, 0xF7,
0xF5, 0xF6, 0x2B, 0xF7, 0xF9, 0xFF, 0xFD, 0xFC, 0xAC, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0xFC, 0xF7, 0xAC, 0x54, 0x54, 0xAB, 0xFD, 0xFC, 0xF7, 0xF7, 0xF7, 0xF9, 0xFC, 0xF9, 0xFB, 0xFF, 0xFD, 0xFB,
0xFB, 0xFC, 0xAC, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFC, 0xF7, 0xAC, 0x54, 0x54,
0x54, 0x54, 0xAB, 0xFE, 0xFC, 0xF7, 0xF7, 0xF7, 0xF7, 0xF9, 0xFB, 0xFB, 0xFB, 0xFB, 0xFC, 0xAC, 0xFF, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xAC, 0x2B, 0xFD, 0x54, 0x54, 0x54, 0x54, 0x7E, 0x54, 0xAB, 0xFD,
0xFC, 0xF7, 0xF7, 0xF9, 0xFB, 0xFB, 0xFB, 0xFB, 0xFC, 0xAC, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0xFC, 0xF7, 0xAC, 0x54, 0x54, 0x54, 0x54, 0x54, 0x54, 0x54, 0x54, 0xAB, 0xFC, 0xF7, 0xF9, 0xFB, 0xFB,
0xFB, 0xFB, 0xFC, 0xAC, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFC, 0xF7, 0xAC, 0x54,
0x54, 0x54, 0x7E, 0x54, 0x7E, 0x54, 0x7E, 0x7E, 0xAC, 0xF7, 0xF9, 0xFB, 0xFB, 0xFB, 0xFB, 0xFC, 0xAC, 0xFF, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFC, 0xF7, 0xFF, 0xAA, 0x54, 0x54, 0x54, 0x54, 0x54, 0x54,
0x54, 0x7E, 0xAC, 0xF7, 0xF9, 0xFB, 0xFB, 0xFB, 0xFB, 0xFC, 0xAC, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0xFC, 0xFF, 0xAA, 0x54, 0x7E, 0x54, 0x7E, 0x54, 0x7E, 0x54, 0x7E, 0x7E, 0xAC, 0xF7, 0xF9, 0xFB,
0xFB, 0xFB, 0xFB, 0xFC, 0xAC, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x7E, 0x54, 0x7E, 0xAC, 0xF7, 0xF9, 0xFB, 0xFB, 0xFB, 0xFB, 0xFC, 0xAC, 0xFF,
0x00, 0x00, 0x00, 0xFF, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0xFF, 0x2A, 0x2A, 0x2A, 0x2A, 0x2A, 0x2A, 0x2A, 0xFF,
0xAA, 0x7E, 0x7E, 0xAC, 0xF7, 0xF9, 0xFB, 0xFB, 0xFB, 0xFB, 0xFC, 0xAC, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x7F, 0x7F,
0x7F, 0xF1, 0x7F, 0x7F, 0xFF, 0x2A, 0x2A, 0xFF, 0x2A, 0x2A, 0x2A, 0x2A, 0xFF, 0xAA, 0x54, 0x7E, 0xAC, 0xF7, 0xF9,
0xFB, 0xFB, 0xFB, 0xFB, 0xFC, 0xAC, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x7F, 0x7F, 0x7F, 0xF1, 0x7F, 0xFF, 0x2A, 0x2A,
0x2A, 0xFF, 0x2A, 0x2A, 0x2A, 0x2A, 0xFF, 0xAC, 0x7E, 0x7E, 0xAC, 0xF7, 0xF9, 0xFB, 0xFB, 0xFB, 0xFB, 0xFC, 0xAC,
0xFF, 0x00, 0x00, 0x00, 0xFF, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0xFF, 0x2A, 0x2A, 0x2A, 0x2A, 0x2A, 0x2A, 0x2A, 0x2A,
0xFF, 0xAA, 0x82, 0xFD, 0xAC, 0x2B, 0xF9, 0xFB, 0xFB, 0xFB, 0xFB, 0xFC, 0xAC, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x7F,
0x7F, 0x7F, 0x7F, 0x7F, 0xFF, 0x2A, 0x2A, 0x2A, 0x2A, 0x2A, 0x2A, 0x2A, 0x2A, 0xFF, 0xAA, 0xF7, 0xF7, 0xF7, 0xF7,
0xF9, 0xFB, 0xFB, 0xFB, 0xFB, 0xFC, 0xAC, 0xFF, 0xFD, 0x00, 0x00, 0xFF, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0xFF, 0x2A,
0x2A, 0x2A, 0x2A, 0x2A, 0x2A, 0x2A, 0x2A, 0xFF, 0xAC, 0xFD, 0xF7, 0xF7, 0xF7, 0xF9, 0xFB, 0xFB, 0xFB, 0xFB, 0xFC,
0xAC, 0xFF, 0xFD, 0xFD, 0xFD, 0xFF, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0xFF, 0xFF, 0xFF, 0xFF, 0x2A, 0x2A, 0x2A, 0x2A,
0x2A, 0xFF, 0xAA, 0xFB, 0xFD, 0xF9, 0xF7, 0xF9, 0xFB, 0xFB, 0xFB, 0xFB, 0xFC, 0xAC, 0xFF, 0xFD, 0xFD, 0xFD, 0xFF,
0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0xFF, 0x2A, 0x2A, 0x2A, 0x2A, 0x2A, 0x2A, 0xFF, 0xAA, 0xF7, 0xF7, 0xF7,
0xF7, 0xF9, 0xFB, 0xFB, 0xFB, 0xFB, 0xFC, 0xAC, 0xFF, 0xFD, 0xFD, 0xFD, 0xFF, 0x7F, 0x7F, 0xF1, 0xF1, 0x7F, 0x7F,
0x7F, 0xFF, 0x2A, 0x2A, 0xFF, 0xFF, 0x2A, 0x2A, 0xFF, 0xAA, 0xF7, 0xF7, 0xF7, 0xF7, 0xF9, 0xFB, 0xFB, 0xFB, 0xFC,
0xAC, 0xFF, 0xFF, 0xFD, 0xFD, 0xFD, 0xFF, 0x7F, 0x7F, 0x7F, 0x7F, 0xF1, 0xF1, 0xF1, 0xFF, 0xFF, 0xFF, 0x2A, 0x2A,
0x2A, 0x2A, 0xFF, 0xAA, 0xF7, 0xF7, 0xF7, 0xF7, 0xF9, 0xFB, 0xFB, 0xFC, 0xFD, 0xFF, 0xFF, 0xFD, 0xFD, 0xFD, 0xFD,
0xFF, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0x7F, 0xFF, 0x2A, 0x2A, 0x2A, 0x2A, 0x2A, 0x2A, 0xFF, 0xAA, 0xF7, 0xF7,
0xF7, 0xF7, 0xF9, 0xFC, 0xFD, 0xFF, 0xFF, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xF1, 0xFF, 0xFB, 0xF9, 0xF7, 0xFC, 0xFF, 0xFF, 0xFD,
0xFD, 0xFF, 0xFF, 0xFD, 0xFD, 0x00, 0x00, 0x00, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFF, 0xFD, 0xFD,
0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFD, 0xFE, 0xFF, 0xFD, 0xFD, 0xFF, 0xFF, 0xFD, 0xFD, 0xFD, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFD, 0xFF, 0xFD, 0xFD, 0x00, 0xFD, 0xFD, 0xFD, 0xFF,
0xFE, 0xFD, 0xFD, 0xFD, 0xFF, 0xFF, 0xFD, 0xFD, 0xFD, 0xFD, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFD, 0xFD, 0xFD, 0xFE, 0xFE, 0xFE, 0xFD, 0xFD,
0xFD, 0xFD, 0xFD, 0x00, 0x00, 0x00, 0x00, 0x00, 0x69, 0x6C, 0x33, 0x32, 0x00, 0x00, 0x08, 0x9B, 0x8A, 0xFF, 0x04,
0x22, 0x54, 0x33, 0x22, 0x22, 0x96, 0xFF, 0x09, 0x22, 0x54, 0x44, 0x88, 0xBB, 0x88, 0x44, 0x33, 0x22, 0x22, 0x91,
0xFF, 0x0D, 0x22, 0x54, 0x44, 0x88, 0xBB, 0xFF, 0xE5, 0xE1, 0xDC, 0xAA, 0x88, 0x44, 0x22, 0x22, 0x8D, 0xFF, 0x11,
0x22, 0x54, 0x44, 0x88, 0xBB, 0xFF, 0xEE, 0xE9, 0xE4, 0xDF, 0xDA, 0xD6, 0xD1, 0xAA, 0x88, 0x44, 0x22, 0x22, 0x8B,
0xFF, 0x13, 0x44, 0x88, 0x54, 0xBB, 0xFF, 0xEE, 0xEC, 0xE7, 0xE1, 0xDD, 0xD8, 0xD4, 0xD1, 0xCD, 0xC9, 0xAA, 0x88,
0x44, 0x22, 0x22, 0x89, 0xFF, 0x15, 0x44, 0xDD, 0xAA, 0x88, 0x54, 0xBB, 0xFF, 0xE5, 0xE0, 0xDB, 0xD6, 0xD3, 0xCF,
0xCB, 0xC8, 0xC4, 0xC1, 0xAA, 0x88, 0x44, 0x22, 0x22, 0x87, 0xFF, 0x15, 0x44, 0xDB, 0xDB, 0xDA, 0xD9, 0x88, 0x54,
0xBB, 0xEE, 0xD9, 0xD5, 0xD1, 0xCE, 0xCA, 0xC6, 0xC2, 0xBF, 0xBC, 0xBB, 0x88, 0x44, 0x22, 0x87, 0xFF, 0x15, 0x44,
0xDA, 0x54, 0x77, 0xAA, 0xD7, 0xD6, 0x88, 0x54, 0xBB, 0xEE, 0xD0, 0xCC, 0xC8, 0xC5, 0xC2, 0xBF, 0xBB, 0x88, 0x44,
0x6D, 0x20, 0x87, 0xFF, 0x15, 0x44, 0xD8, 0x42, 0x66, 0x54, 0x77, 0xAA, 0xD4, 0xD4, 0x88, 0x54, 0xBB, 0xEC, 0xC7,
0xC3, 0xC0, 0x88, 0x44, 0x54, 0x6D, 0x77, 0x20, 0x87, 0xFF, 0x11, 0x44, 0xD7, 0x42, 0x66, 0x7F, 0x66, 0x54, 0x77,
0xAA, 0xD1, 0xD1, 0x88, 0x54, 0x88, 0xAA, 0x44, 0x54, 0x6D, 0x80, 0x77, 0x00, 0x1E, 0x87, 0xFF, 0x0F, 0x44, 0xD6,
0x42, 0x66, 0x92, 0x90, 0x7F, 0x66, 0x54, 0x77, 0xAA, 0xCF, 0xCE, 0xAA, 0x55, 0x6D, 0x82, 0x77, 0x00, 0x1C, 0x87,
0xFF, 0x0E, 0x44, 0xD5, 0x42, 0x66, 0x8F, 0x8C, 0x8A, 0x87, 0x7F, 0x66, 0x54, 0x77, 0xAA, 0xCD, 0x88, 0x82, 0x77,
0x01, 0x74, 0x1B, 0x87, 0xFF, 0x0E, 0x44, 0xD3, 0x42, 0x66, 0x8C, 0x89, 0x86, 0x83, 0x82, 0x7F, 0x71, 0x66, 0x54,
0xCB, 0x88, 0x81, 0x77, 0x02, 0x73, 0x6C, 0x19, 0x87, 0xFF, 0x0E, 0x44, 0xD2, 0x42, 0x66, 0x89, 0x86, 0x83, 0x80,
0x7F, 0x7C, 0x7B, 0x77, 0x44, 0xCB, 0x88, 0x80, 0x77, 0x03, 0x72, 0x6A, 0x64, 0x18, 0x87, 0xFF, 0x15, 0x44, 0xD1,
0x00, 0x33, 0x85, 0x83, 0x80, 0x7E, 0x7C, 0x7A, 0x77, 0x76, 0x44, 0xC9, 0x88, 0x77, 0x77, 0x70, 0x69, 0x62, 0x5C,
0x16, 0x87, 0xFF, 0x15, 0x44, 0x00, 0x33, 0x66, 0x82, 0x80, 0x7D, 0x7C, 0x79, 0x77, 0x76, 0x73, 0x44, 0xC9, 0x88,
0x76, 0x6E, 0x67, 0x61, 0x5A, 0x54, 0x15, 0x80, 0xFF, 0x8D, 0x00, 0x0C, 0x75, 0x73, 0x71, 0x44, 0xC7, 0x88, 0x6D,
0x66, 0x5F, 0x59, 0x53, 0x4E, 0x14, 0x80, 0xFF, 0x00, 0x00, 0x83, 0x66, 0x00, 0x00, 0x84, 0xCC, 0x0D, 0x00, 0x33,
0x71, 0x6F, 0x44, 0xC7, 0x88, 0x64, 0x5E, 0x58, 0x53, 0x4D, 0x48, 0x12, 0x80, 0xFF, 0x00, 0x00, 0x80, 0x66, 0x06,
0x00, 0x66, 0x66, 0x00, 0xCC, 0xCC, 0x00, 0x81, 0xCC, 0x0D, 0x00, 0x33, 0x6E, 0x6D, 0x44, 0xC5, 0x88, 0x5D, 0x57,
0x52, 0x4C, 0x47, 0x43, 0x10, 0x80, 0xFF, 0x00, 0x00, 0x80, 0x66, 0x02, 0x00, 0x66, 0x00, 0x80, 0xCC, 0x00, 0x00,
0x81, 0xCC, 0x0D, 0x00, 0x33, 0x22, 0x6A, 0x44, 0xC4, 0x88, 0x56, 0x51, 0x4B, 0x47, 0x42, 0x3E, 0x0E, 0x80, 0xFF,
0x00, 0x00, 0x82, 0x66, 0x00, 0x00, 0x85, 0xCC, 0x0D, 0x00, 0x33, 0x6D, 0x22, 0x44, 0xC3, 0x88, 0x4F, 0x4A, 0x46,
0x41, 0x3C, 0x38, 0x0C, 0x80, 0xFF, 0x00, 0x00, 0x82, 0x66, 0x00, 0x00, 0x85, 0xCC, 0x11, 0x00, 0x33, 0xC5, 0xAA,
0x88, 0xC3, 0x88, 0x49, 0x44, 0x40, 0x3B, 0x37, 0x33, 0x0B, 0x22, 0xFF, 0xFF, 0x00, 0x82, 0x66, 0x00, 0x00, 0x85,
0xCC, 0x0D, 0x00, 0x33, 0x00, 0xC3, 0xC2, 0xC2, 0x88, 0x44, 0x3F, 0x3A, 0x36, 0x33, 0x2F, 0x08, 0x80, 0x22, 0x00,
0x00, 0x82, 0x66, 0x81, 0x00, 0x82, 0xCC, 0x0D, 0x00, 0x33, 0x55, 0x00, 0x88, 0xC1, 0x88, 0x3E, 0x3A, 0x35, 0x33,
0x33, 0x2B, 0x07, 0x80, 0x22, 0x00, 0x00, 0x84, 0x66, 0x00, 0x00, 0x83, 0xCC, 0x0D, 0x00, 0x33, 0xC1, 0xC1, 0xC0,
0xC0, 0x88, 0x38, 0x34, 0x33, 0x33, 0x2E, 0x22, 0x14, 0x80, 0x22, 0x04, 0x00, 0x66, 0x66, 0x00, 0x00, 0x80, 0x66,
0x14, 0x00, 0xCC, 0xCC, 0x00, 0x00, 0xCC, 0xCC, 0x00, 0x33, 0xC0, 0xC0, 0xBF, 0xBF, 0x88, 0x33, 0x33, 0x2F, 0x2E,
0x22, 0x14, 0x08, 0x80, 0x22, 0x00, 0x00, 0x81, 0x66, 0x83, 0x00, 0x81, 0xCC, 0x0C, 0x00, 0x33, 0xC0, 0xBF, 0xBF,
0xBE, 0x88, 0x33, 0x2F, 0x28, 0x11, 0x14, 0x08, 0x81, 0x22, 0x00, 0x00, 0x84, 0x66, 0x00, 0x00, 0x83, 0xCC, 0x0B,
0x00, 0x33, 0xBF, 0xBF, 0xBE, 0xBD, 0x88, 0x2E, 0x22, 0x11, 0x14, 0x08, 0x81, 0x22, 0x00, 0xFF, 0x8D, 0x00, 0x09,
0x11, 0x22, 0x55, 0x88, 0xBD, 0x44, 0x18, 0x14, 0x11, 0x08, 0x81, 0x22, 0x80, 0xFF, 0x85, 0x22, 0x00, 0x00, 0x82,
0x22, 0x09, 0x00, 0x00, 0x22, 0x22, 0x19, 0x11, 0x00, 0x22, 0x11, 0x08, 0x81, 0x22, 0x89, 0xFF, 0x04, 0x22, 0x00,
0x22, 0x22, 0xFF, 0x80, 0x22, 0x01, 0x00, 0x11, 0x80, 0x22, 0x01, 0x11, 0x08, 0x81, 0x22, 0x91, 0xFF, 0x80, 0x22,
0x80, 0x11, 0x82, 0x22, 0x82, 0xFF, 0x8A, 0xFF, 0x04, 0x22, 0x55, 0x33, 0x22, 0x22, 0x96, 0xFF, 0x09, 0x22, 0x55,
0x44, 0x88, 0xBB, 0x88, 0x44, 0x33, 0x22, 0x22, 0x91, 0xFF, 0x0D, 0x22, 0x55, 0x44, 0x88, 0xBB, 0xFF, 0xE5, 0xE0,
0xDC, 0xAA, 0x88, 0x44, 0x22, 0x22, 0x8D, 0xFF, 0x11, 0x22, 0x55, 0x44, 0x88, 0xBB, 0xFF, 0xEE, 0xE9, 0xE4, 0xDF,
0xDA, 0xD6, 0xD2, 0xAA, 0x88, 0x44, 0x22, 0x22, 0x8B, 0xFF, 0x13, 0x44, 0x88, 0x55, 0xBB, 0xFF, 0xEE, 0xEC, 0xE7,
0xE2, 0xDD, 0xD8, 0xD4, 0xD0, 0xCD, 0xC9, 0xAA, 0x88, 0x44, 0x22, 0x22, 0x89, 0xFF, 0x15, 0x44, 0xDD, 0xAA, 0x88,
0x55, 0xBB, 0xFF, 0xE5, 0xE0, 0xDB, 0xD6, 0xD3, 0xCF, 0xCB, 0xC7, 0xC4, 0xC1, 0xAA, 0x88, 0x44, 0x22, 0x22, 0x87,
0xFF, 0x15, 0x44, 0xDB, 0xDB, 0xDA, 0xDA, 0x88, 0x55, 0xBB, 0xEE, 0xD9, 0xD5, 0xD1, 0xCE, 0xCA, 0xC7, 0xC3, 0xBF,
0xBC, 0xBB, 0x88, 0x44, 0x22, 0x87, 0xFF, 0x15, 0x44, 0xDB, 0x55, 0x77, 0xAA, 0xD8, 0xD6, 0x88, 0x55, 0xBB, 0xEE,
0xCF, 0xCC, 0xC8, 0xC5, 0xC2, 0xBE, 0xBB, 0x88, 0x44, 0x6D, 0x20, 0x87, 0xFF, 0x15, 0x44, 0xD9, 0x42, 0x66, 0x55,
0x77, 0xAA, 0xD4, 0xD3, 0x88, 0x55, 0xBB, 0xEC, 0xC7, 0xC4, 0xC0, 0x88, 0x44, 0x55, 0x6D, 0x77, 0x1F, 0x87, 0xFF,
0x11, 0x44, 0xD7, 0x42, 0x66, 0x7E, 0x66, 0x55, 0x77, 0xAA, 0xD1, 0xD1, 0x88, 0x55, 0x88, 0xAA, 0x44, 0x55, 0x6D,
0x80, 0x77, 0x00, 0x1E, 0x87, 0xFF, 0x0F, 0x44, 0xD6, 0x42, 0x66, 0x92, 0x90, 0x7E, 0x66, 0x55, 0x77, 0xAA, 0xCF,
0xCE, 0xAA, 0x55, 0x6D, 0x82, 0x77, 0x00, 0x1C, 0x87, 0xFF, 0x0E, 0x44, 0xD5, 0x42, 0x66, 0x90, 0x8C, 0x8A, 0x86,
0x7E, 0x66, 0x55, 0x77, 0xAA, 0xCC, 0x88, 0x82, 0x77, 0x01, 0x74, 0x1B, 0x87, 0xFF, 0x0E, 0x44, 0xD4, 0x42, 0x66,
0x8C, 0x89, 0x86, 0x84, 0x81, 0x7F, 0x71, 0x66, 0x55, 0xCB, 0x88, 0x81, 0x77, 0x02, 0x72, 0x6B, 0x19, 0x87, 0xFF,
0x0E, 0x44, 0xD3, 0x42, 0x66, 0x88, 0x86, 0x83, 0x81, 0x7E, 0x7C, 0x7A, 0x78, 0x44, 0xCB, 0x88, 0x80, 0x77, 0x03,
0x72, 0x6A, 0x63, 0x18, 0x87, 0xFF, 0x15, 0x44, 0xD1, 0x00, 0x33, 0x85, 0x83, 0x80, 0x7E, 0x7B, 0x7A, 0x78, 0x75,
0x44, 0xCA, 0x88, 0x77, 0x77, 0x70, 0x69, 0x63, 0x5B, 0x17, 0x87, 0xFF, 0x15, 0x44, 0x00, 0x33, 0x66, 0x82, 0x7F,
0x7D, 0x7B, 0x79, 0x77, 0x75, 0x73, 0x44, 0xC9, 0x88, 0x76, 0x6E, 0x67, 0x61, 0x5B, 0x55, 0x15, 0x80, 0xFF, 0x8D,
0x00, 0x0C, 0x74, 0x72, 0x71, 0x44, 0xC7, 0x88, 0x6D, 0x66, 0x5F, 0x59, 0x53, 0x4F, 0x14, 0x80, 0xFF, 0x00, 0x00,
0x83, 0x66, 0x00, 0x00, 0x84, 0xCC, 0x0D, 0x00, 0x33, 0x71, 0x6F, 0x44, 0xC6, 0x88, 0x64, 0x5E, 0x58, 0x52, 0x4E,
0x48, 0x12, 0x80, 0xFF, 0x00, 0x00, 0x80, 0x66, 0x06, 0x00, 0x66, 0x66, 0x00, 0xCC, 0xCC, 0x00, 0x81, 0xCC, 0x0D,
0x00, 0x33, 0x6E, 0x6C, 0x44, 0xC6, 0x88, 0x5D, 0x57, 0x52, 0x4D, 0x47, 0x43, 0x10, 0x80, 0xFF, 0x00, 0x00, 0x80,
0x66, 0x02, 0x00, 0x66, 0x00, 0x80, 0xCC, 0x00, 0x00, 0x81, 0xCC, 0x0D, 0x00, 0x33, 0x22, 0x6A, 0x44, 0xC4, 0x88,
0x55, 0x51, 0x4B, 0x46, 0x42, 0x3D, 0x0F, 0x80, 0xFF, 0x00, 0x00, 0x82, 0x66, 0x00, 0x00, 0x85, 0xCC, 0x0D, 0x00,
0x33, 0x6D, 0x22, 0x44, 0xC4, 0x88, 0x50, 0x4B, 0x46, 0x41, 0x3C, 0x37, 0x0C, 0x80, 0xFF, 0x00, 0x00, 0x82, 0x66,
0x00, 0x00, 0x85, 0xCC, 0x11, 0x00, 0x33, 0xC4, 0xAA, 0x88, 0xC3, 0x88, 0x49, 0x44, 0x40, 0x3C, 0x37, 0x33, 0x0B,
0x22, 0xFF, 0xFF, 0x00, 0x82, 0x66, 0x00, 0x00, 0x85, 0xCC, 0x0D, 0x00, 0x33, 0x00, 0xC3, 0xC3, 0xC1, 0x88, 0x44,
0x3F, 0x3A, 0x36, 0x33, 0x30, 0x08, 0x80, 0x22, 0x00, 0x00, 0x82, 0x66, 0x81, 0x00, 0x82, 0xCC, 0x0D, 0x00, 0x33,
0x55, 0x00, 0x88, 0xC1, 0x88, 0x3E, 0x39, 0x34, 0x33, 0x33, 0x2B, 0x06, 0x80, 0x22, 0x00, 0x00, 0x84, 0x66, 0x00,
0x00, 0x83, 0xCC, 0x0D, 0x00, 0x33, 0xC1, 0xC1, 0xC0, 0xC0, 0x88, 0x38, 0x34, 0x33, 0x33, 0x2E, 0x22, 0x13, 0x80,
0x22, 0x04, 0x00, 0x66, 0x66, 0x00, 0x00, 0x80, 0x66, 0x14, 0x00, 0xCC, 0xCC, 0x00, 0x00, 0xCC, 0xCC, 0x00, 0x33,
0xC1, 0xC0, 0xC0, 0xBF, 0x88, 0x33, 0x33, 0x30, 0x2E, 0x22, 0x13, 0x08, 0x80, 0x22, 0x00, 0x00, 0x81, 0x66, 0x83,
0x00, 0x81, 0xCC, 0x0C, 0x00, 0x33, 0xBF, 0xBF, 0xBE, 0xBE, 0x88, 0x33, 0x30, 0x27, 0x11, 0x13, 0x08, 0x81, 0x22,
0x00, 0x00, 0x84, 0x66, 0x00, 0x00, 0x83, 0xCC, 0x0B, 0x00, 0x33, 0xBF, 0xBE, 0xBE, 0xBD, 0x88, 0x2E, 0x22, 0x11,
0x13, 0x08, 0x81, 0x22, 0x00, 0xFF, 0x8D, 0x00, 0x09, 0x11, 0x22, 0x55, 0x88, 0xBC, 0x44, 0x18, 0x13, 0x11, 0x08,
0x81, 0x22, 0x80, 0xFF, 0x85, 0x22, 0x00, 0x00, 0x82, 0x22, 0x09, 0x00, 0x00, 0x22, 0x22, 0x19, 0x11, 0x00, 0x22,
0x11, 0x08, 0x81, 0x22, 0x89, 0xFF, 0x04, 0x22, 0x00, 0x22, 0x22, 0xFF, 0x80, 0x22, 0x01, 0x00, 0x11, 0x80, 0x22,
0x01, 0x11, 0x08, 0x81, 0x22, 0x91, 0xFF, 0x80, 0x22, 0x80, 0x11, 0x82, 0x22, 0x82, 0xFF, 0x8A, 0xFF, 0x04, 0x22,
0x55, 0x33, 0x22, 0x22, 0x96, 0xFF, 0x09, 0x22, 0x55, 0x44, 0x88, 0xBB, 0x88, 0x44, 0x33, 0x22, 0x22, 0x91, 0xFF,
0x0D, 0x22, 0x55, 0x44, 0x88, 0xBB, 0xFF, 0xE6, 0xE0, 0xDC, 0xAA, 0x88, 0x44, 0x22, 0x22, 0x8D, 0xFF, 0x11, 0x22,
0x55, 0x44, 0x88, 0xBB, 0xFF, 0xEE, 0xE9, 0xE4, 0xDF, 0xDA, 0xD6, 0xD1, 0xAA, 0x88, 0x44, 0x22, 0x22, 0x8B, 0xFF,
0x13, 0x44, 0x88, 0x55, 0xBB, 0xFF, 0xEE, 0xEC, 0xE7, 0xE1, 0xDC, 0xD8, 0xD4, 0xD0, 0xCC, 0xC8, 0xAA, 0x88, 0x44,
0x22, 0x22, 0x89, 0xFF, 0x15, 0x44, 0xDD, 0xAA, 0x88, 0x55, 0xBB, 0xFF, 0xE5, 0xE0, 0xDB, 0xD6, 0xD2, 0xCE, 0xCB,
0xC7, 0xC4, 0xC1, 0xAA, 0x88, 0x44, 0x22, 0x22, 0x87, 0xFF, 0x15, 0x44, 0xDB, 0xDB, 0xDA, 0xD9, 0x88, 0x55, 0xBB,
0xEE, 0xD9, 0xD6, 0xD1, 0xCE, 0xCA, 0xC7, 0xC3, 0xC0, 0xBD, 0xBB, 0x88, 0x44, 0x22, 0x87, 0xFF, 0x15, 0x44, 0xDA,
0x55, 0x77, 0xAA, 0xD7, 0xD7, 0x88, 0x55, 0xBB, 0xEE, 0xD0, 0xCC, 0xC9, 0xC6, 0xC2, 0xBE, 0xBB, 0x88, 0x44, 0x6D,
0x21, 0x87, 0xFF, 0x15, 0x44, 0xD8, 0x42, 0xCC, 0x55, 0x77, 0xAA, 0xD4, 0xD3, 0x88, 0x55, 0xBB, 0xEC, 0xC8, 0xC4,
0xC0, 0x88, 0x44, 0x55, 0x6D, 0x77, 0x20, 0x87, 0xFF, 0x11, 0x44, 0xD7, 0x42, 0xCC, 0xE5, 0xCC, 0x55, 0x77, 0xAA,
0xD1, 0xD1, 0x88, 0x55, 0x88, 0xAA, 0x44, 0x55, 0x6D, 0x80, 0x77, 0x00, 0x1D, 0x87, 0xFF, 0x0F, 0x44, 0xD6, 0x42,
0xCC, 0xF9, 0xF6, 0xE5, 0xCC, 0x55, 0x77, 0xAA, 0xCF, 0xCF, 0xAA, 0x55, 0x6D, 0x82, 0x77, 0x00, 0x1C, 0x87, 0xFF,
0x0E, 0x44, 0xD5, 0x42, 0xCC, 0xF5, 0xF2, 0xEF, 0xED, 0xE5, 0xCC, 0x55, 0x77, 0xAA, 0xCD, 0x88, 0x82, 0x77, 0x01,
0x74, 0x1B, 0x87, 0xFF, 0x0E, 0x44, 0xD3, 0x42, 0xCC, 0xF2, 0xEF, 0xEC, 0xE9, 0xE7, 0xE5, 0xD7, 0xCC, 0x55, 0xCB,
0x88, 0x81, 0x77, 0x02, 0x72, 0x6C, 0x1A, 0x87, 0xFF, 0x0E, 0x44, 0xD2, 0x42, 0xCC, 0xEE, 0xEB, 0xE9, 0xE7, 0xE5,
0xE3, 0xE0, 0xDD, 0x44, 0xCA, 0x88, 0x80, 0x77, 0x03, 0x71, 0x6A, 0x63, 0x18, 0x87, 0xFF, 0x15, 0x44, 0xD1, 0x00,
0x66, 0xEB, 0xE9, 0xE6, 0xE4, 0xE1, 0xE0, 0xDD, 0xDC, 0x44, 0xC9, 0x88, 0x77, 0x77, 0x70, 0x69, 0x62, 0x5C, 0x17,
0x87, 0xFF, 0x15, 0x44, 0x00, 0x66, 0xCC, 0xE8, 0xE6, 0xE3, 0xE1, 0xDF, 0xDD, 0xDB, 0xD9, 0x44, 0xC8, 0x88, 0x76,
0x6F, 0x68, 0x60, 0x5A, 0x55, 0x15, 0x80, 0xFF, 0x8D, 0x00, 0x0C, 0xDB, 0xD9, 0xD7, 0x44, 0xC7, 0x88, 0x6D, 0x66,
0x5F, 0x59, 0x54, 0x4F, 0x14, 0x80, 0xFF, 0x00, 0x00, 0x83, 0xCC, 0x00, 0x00, 0x84, 0xFF, 0x0D, 0x00, 0x99, 0xD7,
0xD4, 0x44, 0xC6, 0x88, 0x65, 0x5E, 0x58, 0x53, 0x4D, 0x49, 0x12, 0x80, 0xFF, 0x00, 0x00, 0x80, 0xCC, 0x06, 0x55,
0xCC, 0xCC, 0x00, 0xFF, 0xFF, 0x00, 0x81, 0xFF, 0x0D, 0x00, 0x99, 0xD5, 0xD2, 0x44, 0xC5, 0x88, 0x5D, 0x57, 0x51,
0x4C, 0x47, 0x42, 0x11, 0x80, 0xFF, 0x00, 0x00, 0x80, 0xCC, 0x02, 0x55, 0xCC, 0x00, 0x80, 0xFF, 0x00, 0x00, 0x81,
0xFF, 0x0D, 0x00, 0x66, 0x22, 0xD0, 0x44, 0xC4, 0x88, 0x56, 0x51, 0x4C, 0x47, 0x42, 0x3D, 0x0E, 0x80, 0xFF, 0x00,
0x00, 0x82, 0xCC, 0x00, 0x00, 0x85, 0xFF, 0x0D, 0x00, 0x99, 0x6D, 0x22, 0x44, 0xC3, 0x88, 0x4F, 0x4B, 0x45, 0x41,
0x3C, 0x38, 0x0D, 0x80, 0xFF, 0x00, 0x00, 0x82, 0xCC, 0x00, 0x00, 0x85, 0xFF, 0x11, 0x00, 0x99, 0xC5, 0xAA, 0x88,
0xC3, 0x88, 0x49, 0x45, 0x40, 0x3B, 0x37, 0x33, 0x0A, 0x22, 0xFF, 0xFF, 0x00, 0x82, 0xCC, 0x00, 0x00, 0x85, 0xFF,
0x0D, 0x00, 0x66, 0x00, 0xC3, 0xC2, 0xC2, 0x88, 0x43, 0x3F, 0x3B, 0x36, 0x33, 0x2F, 0x08, 0x80, 0x22, 0x00, 0x00,
0x82, 0xCC, 0x81, 0x00, 0x82, 0xFF, 0x0D, 0x00, 0x99, 0x55, 0x00, 0x88, 0xC1, 0x88, 0x3E, 0x39, 0x35, 0x33, 0x33,
0x2C, 0x07, 0x80, 0x22, 0x00, 0x00, 0x84, 0xCC, 0x00, 0x00, 0x83, 0xFF, 0x01, 0x00, 0x99, 0x80, 0xC1, 0x08, 0xC0,
0x88, 0x38, 0x34, 0x33, 0x33, 0x2E, 0x22, 0x13, 0x80, 0x22, 0x04, 0x00, 0xCC, 0xCC, 0x55, 0x55, 0x80, 0xCC, 0x14,
0x00, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x99, 0xC0, 0xC1, 0xBF, 0xBF, 0x88, 0x33, 0x33, 0x2F, 0x2E, 0x22,
0x13, 0x08, 0x80, 0x22, 0x00, 0x00, 0x81, 0xCC, 0x80, 0x55, 0x80, 0x00, 0x81, 0xFF, 0x01, 0x00, 0x99, 0x80, 0xBF,
0x07, 0xBE, 0x88, 0x33, 0x2F, 0x28, 0x11, 0x13, 0x08, 0x81, 0x22, 0x00, 0x00, 0x84, 0xCC, 0x00, 0x00, 0x83, 0xFF,
0x0B, 0x00, 0x99, 0xBE, 0xBE, 0xBD, 0xBD, 0x88, 0x2E, 0x22, 0x11, 0x13, 0x08, 0x81, 0x22, 0x00, 0xFF, 0x8D, 0x00,
0x09, 0x11, 0x22, 0x55, 0x88, 0xBC, 0x44, 0x18, 0x13, 0x11, 0x08, 0x81, 0x22, 0x80, 0xFF, 0x85, 0x22, 0x00, 0x00,
0x82, 0x22, 0x09, 0x00, 0x00, 0x22, 0x22, 0x1A, 0x11, 0x00, 0x22, 0x11, 0x08, 0x81, 0x22, 0x89, 0xFF, 0x04, 0x22,
0x00, 0x22, 0x22, 0xFF, 0x80, 0x22, 0x01, 0x00, 0x11, 0x80, 0x22, 0x01, 0x11, 0x08, 0x81, 0x22, 0x91, 0xFF, 0x80,
0x22, 0x80, 0x11, 0x82, 0x22, 0x82, 0xFF, 0x6C, 0x38, 0x6D, 0x6B, 0x00, 0x00, 0x04, 0x08, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3C, 0xFF, 0xFF, 0xFF, 0x3C, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x3C, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x3C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3C, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x3C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x3C, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0x3C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x3C, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x3C, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00,
0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x18, 0x00, 0x00, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x4C, 0x2C, 0x11, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0x86, 0x63, 0x2C, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xA0, 0x89, 0x3E, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x97, 0x71, 0x34, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xA0, 0x88, 0x4C, 0x18, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xAA, 0x88, 0x4C, 0x23, 0x00, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xAA, 0x88, 0x4C, 0x23, 0x00, 0x00, 0x00, 0x4C, 0x4C, 0x4C, 0x4C, 0x4C, 0x4C,
0x4C, 0x4C, 0xFF, 0x86, 0x4C, 0x4C, 0x4C, 0x9A, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xAA,
0x88, 0x4C, 0x23, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3C, 0xFF, 0x4C, 0x18,
0x00, 0x18, 0x3C, 0x9A, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xA0, 0x88, 0x4C, 0x23, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x3C, 0x9A,
0xFF, 0xFF, 0xFF, 0xA0, 0x88, 0x4C, 0x23, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00};
static const unsigned char VersResource[VERS_RESOURCE_SIZE] = {
0x00, 0x01, 0x20, 0x00, 0x00, 0x00, 0x03, 0x30, 0x2E, 0x31, 0x21, 0x30, 0x2E, 0x31, 0x2C,
0x20, 0xA9, 0x20, 0x32, 0x30, 0x31, 0x31, 0x2D, 0x32, 0x30, 0x31, 0x38, 0x20, 0x4E, 0x61,
0x74, 0x61, 0x6C, 0x69, 0x61, 0x20, 0x50, 0x6F, 0x72, 0x74, 0x69, 0x6C, 0x6C, 0x6F};
static const unsigned char PictResource[PICT_RESOURCE_SIZE] = {
0x26, 0x92, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0xAB, 0x00, 0x11, 0x02, 0xFF, 0x0C, 0x00, 0xFF, 0xFE, 0x00,
0x00, 0x00, 0x48, 0x00, 0x00, 0x00, 0x48, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0xAB, 0x00, 0x00,
0x00, 0x00, 0x00, 0x1E, 0x00, 0x01, 0x00, 0x0A, 0x80, 0x01, 0x80, 0x01, 0x7F, 0xFF, 0x7F, 0xFF, 0x00, 0x9A, 0x00,
0x00, 0x00, 0xFF, 0x82, 0xAC, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0xAB, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00,
0x00, 0x00, 0x00, 0x48, 0x00, 0x00, 0x00, 0x48, 0x00, 0x00, 0x00, 0x10, 0x00, 0x20, 0x00, 0x03, 0x00, 0x08, 0x00,
0x00, 0x00, 0x00, 0x3C, 0xCE, 0x35, 0x68, 0x3C, 0xCE, 0x3A, 0xF8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0xAB,
0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0xAB, 0x00, 0x40, 0x00, 0x25, 0xA0, 0xD6, 0x02, 0xD9, 0xD1, 0xB6, 0xFD,
0xBD, 0x02, 0xB4, 0xC9, 0xEE, 0xC1, 0xE7, 0x9F, 0xDE, 0x01, 0xE4, 0xC8, 0xFD, 0xCE, 0x02, 0xC5, 0xDB, 0xF3, 0xC1,
0xEF, 0x9E, 0xFF, 0x00, 0xF4, 0xFD, 0xF7, 0x00, 0xF4, 0xBF, 0xFF, 0x00, 0x28, 0xA1, 0xD6, 0x03, 0xD7, 0xDA, 0xD2,
0xB6, 0xFE, 0xBE, 0x03, 0xBD, 0xB2, 0xE9, 0xEC, 0xC1, 0xE7, 0x9F, 0xDE, 0x01, 0xE4, 0xC8, 0xFD, 0xCE, 0x02, 0xC3,
0xFD, 0xF1, 0xC1, 0xEF, 0x9E, 0xFF, 0x00, 0xF4, 0xFE, 0xF8, 0x01, 0xF7, 0xF4, 0xBF, 0xFF, 0x00, 0x29, 0xA1, 0xD6,
0x0A, 0xD8, 0xCC, 0xD5, 0xB8, 0xBF, 0xAE, 0xBF, 0xBA, 0xAD, 0xE3, 0xE9, 0xC1, 0xE7, 0xA0, 0xDE, 0x02, 0xE0, 0xE6,
0xCA, 0xFE, 0xCE, 0x02, 0xCC, 0xBF, 0xF9, 0xC0, 0xEF, 0x9E, 0xFF, 0x05, 0xF5, 0xF9, 0xE8, 0xF9, 0xF6, 0xF3, 0xBF,
0xFF, 0x00, 0x29, 0xA1, 0xD6, 0x0A, 0xD9, 0xCF, 0xB4, 0xBA, 0xC0, 0xAF, 0xC0, 0xB7, 0xCD, 0xF2, 0xE8, 0xC1, 0xE7,
0xA0, 0xDE, 0x02, 0xE2, 0xC6, 0xCC, 0xFE, 0xCE, 0x02, 0xCA, 0xDF, 0xF7, 0xC0, 0xEF, 0x9F, 0xFF, 0x05, 0xF3, 0xF6,
0xFA, 0xE9, 0xFA, 0xF5, 0xBE, 0xFF, 0x00, 0x27, 0xA1, 0xD6, 0x09, 0xD9, 0xD1, 0xB6, 0xBE, 0xC1, 0xB0, 0xC0, 0xB3,
0xD9, 0xED, 0xC0, 0xE7, 0xA0, 0xDE, 0x01, 0xE4, 0xC8, 0xFD, 0xCE, 0x02, 0xC5, 0xDB, 0xF3, 0xC0, 0xEF, 0x9F, 0xFF,
0x05, 0xF4, 0xF8, 0xFB, 0xEA, 0xFA, 0xF4, 0xBE, 0xFF, 0x00, 0x29, 0xA1, 0xD6, 0x09, 0xDB, 0xD3, 0xB8, 0xBF, 0xB0,
0xB0, 0xBC, 0xAE, 0xE4, 0xEA, 0xC0, 0xE7, 0xA1, 0xDE, 0x02, 0xE0, 0xE6, 0xCA, 0xFE, 0xCE, 0x03, 0xCC, 0xC1, 0xFB,
0xF1, 0xC0, 0xEF, 0x9F, 0xFF, 0x05, 0xF5, 0xF9, 0xEA, 0xEA, 0xF8, 0xF3, 0xBE, 0xFF, 0x00, 0x29, 0xA2, 0xD6, 0x0A,
0xD7, 0xDE, 0xB2, 0xBA, 0xBF, 0xAF, 0xC0, 0xB9, 0xCE, 0xF3, 0xE8, 0xC0, 0xE7, 0xA1, 0xDE, 0x02, 0xE2, 0xC6, 0xCC,
0xFE, 0xCE, 0x02, 0xCA, 0xDF, 0xF7, 0xBF, 0xEF, 0xA0, 0xFF, 0x05, 0xF3, 0xF6, 0xF9, 0xE9, 0xFA, 0xF6, 0xBD, 0xFF,
0x00, 0x27, 0xA2, 0xD6, 0x03, 0xD8, 0xD0, 0xB5, 0xBD, 0xFE, 0xBE, 0x02, 0xB4, 0xC9, 0xEE, 0xBF, 0xE7, 0xA1, 0xDE,
0x01, 0xE4, 0xC8, 0xFD, 0xCE, 0x02, 0xC5, 0xDB, 0xF3, 0xBF, 0xEF, 0xA0, 0xFF, 0x01, 0xF4, 0xF7, 0xFE, 0xF8, 0x00,
0xF4, 0xBD, 0xFF, 0x00, 0x25, 0xA2, 0xD6, 0x02, 0xD9, 0xD1, 0xB6, 0xFD, 0xBD, 0x02, 0xB2, 0xE9, 0xEC, 0xBF, 0xE7,
0xA1, 0xDE, 0x01, 0xE4, 0xC8, 0xFD, 0xCE, 0x02, 0xC3, 0xFD, 0xF1, 0xBF, 0xEF, 0xA0, 0xFF, 0x00, 0xF4, 0xFD, 0xF7,
0x00, 0xF4, 0xBD, 0xFF, 0x00, 0x28, 0xA2, 0xD6, 0x09, 0xDB, 0xD4, 0xB9, 0xBF, 0xBE, 0xBE, 0xBA, 0xAD, 0xE3, 0xE9,
0xBF, 0xE7, 0xA2, 0xDE, 0x02, 0xE0, 0xE6, 0xCA, 0xFE, 0xCE, 0x02, 0xCC, 0xBF, 0xF9, 0xBE, 0xEF, 0xA0, 0xFF, 0x05,
0xF6, 0xF9, 0xF8, 0xF8, 0xF6, 0xF3, 0xBD, 0xFF, 0x00, 0x29, 0xA3, 0xD6, 0x0A, 0xD7, 0xDE, 0xB3, 0xAA, 0xBF, 0xAD,
0xBE, 0xB8, 0xCE, 0xF3, 0xE8, 0xBF, 0xE7, 0xA2, 0xDE, 0x02, 0xE2, 0xC6, 0xCC, 0xFE, 0xCE, 0x02, 0xCA, 0xDF, 0xF7,
0xBE, 0xEF, 0xA1, 0xFF, 0x05, 0xF4, 0xE6, 0xF9, 0xE7, 0xF8, 0xF5, 0xBC, 0xFF, 0x00, 0x27, 0xA3, 0xD6, 0x03, 0xD8,
0xD0, 0xB6, 0xBE, 0xFE, 0xBF, 0x02, 0xB5, 0xC9, 0xEE, 0xBE, 0xE7, 0xA2, 0xDE, 0x01, 0xE4, 0xC8, 0xFD, 0xCE, 0x02,
0xC5, 0xDB, 0xF3, 0xBE, 0xEF, 0xA1, 0xFF, 0x01, 0xF5, 0xF8, 0xFE, 0xF9, 0x00, 0xF5, 0xBC, 0xFF, 0x00, 0x27, 0xA3,
0xD6, 0x09, 0xD9, 0xD1, 0xB6, 0xBD, 0xBD, 0xBE, 0xAD, 0xB3, 0xE9, 0xEC, 0xBE, 0xE7, 0xA2, 0xDE, 0x01, 0xE4, 0xC8,
0xFD, 0xCE, 0x02, 0xC3, 0xFD, 0xF1, 0xBE, 0xEF, 0xA1, 0xFF, 0x05, 0xF4, 0xF7, 0xF7, 0xF8, 0xE7, 0xF5, 0xBC, 0xFF,
0x00, 0x27, 0xA3, 0xD6, 0x09, 0xD9, 0xD1, 0xB6, 0xBE, 0xBE, 0xBF, 0xBB, 0xAF, 0xE4, 0xEA, 0xBE, 0xE7, 0xA2, 0xDE,
0x01, 0xE4, 0xC8, 0xFE, 0xCE, 0x02, 0xCC, 0xBF, 0xF9, 0xBD, 0xEF, 0xA1, 0xFF, 0x05, 0xF4, 0xF8, 0xF8, 0xF9, 0xF7,
0xF4, 0xBC, 0xFF, 0x00, 0x27, 0xA3, 0xD6, 0x09, 0xDB, 0xD3, 0xB8, 0xBE, 0xAE, 0xBF, 0xB9, 0xCF, 0xE1, 0xE9, 0xBE,
0xE7, 0xA3, 0xDE, 0x02, 0xE0, 0xE6, 0xCA, 0xFE, 0xCE, 0x02, 0xCA, 0xDF, 0xF7, 0xBD, 0xEF, 0xA1, 0xFF, 0x04, 0xF5,
0xF8, 0xE8, 0xF9, 0xF6, 0xBB, 0xFF, 0x00, 0x29, 0xA4, 0xD6, 0x0A, 0xD7, 0xDE, 0xB2, 0xBA, 0xBE, 0xBF, 0xAE, 0xB7,
0xCC, 0xF1, 0xE8, 0xBE, 0xE7, 0xA3, 0xDE, 0x02, 0xE2, 0xC6, 0xCC, 0xFE, 0xCE, 0x02, 0xC8, 0xDD, 0xF5, 0xBD, 0xEF,
0xA2, 0xFF, 0x05, 0xF3, 0xF6, 0xF8, 0xF9, 0xE8, 0xF5, 0xBB, 0xFF, 0x00, 0x27, 0xA4, 0xD6, 0x09, 0xD8, 0xD0, 0xB5,
0xBD, 0xBE, 0xC0, 0xC0, 0xB6, 0xC9, 0xEE, 0xBD, 0xE7, 0xA3, 0xDE, 0x01, 0xE4, 0xC8, 0xFD, 0xCE, 0x02, 0xC5, 0xDB,
0xF3, 0xBD, 0xEF, 0xA2, 0xFF, 0x05, 0xF4, 0xF7, 0xF8, 0xFA, 0xFA, 0xF6, 0xBB, 0xFF, 0x00, 0x27, 0xA4, 0xD6, 0x09,
0xD9, 0xD1, 0xB7, 0xBE, 0xBF, 0xAE, 0xAE, 0xB3, 0xE9, 0xEC, 0xBD, 0xE7, 0xA3, 0xDE, 0x01, 0xE4, 0xC8, 0xFD, 0xCE,
0x02, 0xC3, 0xFD, 0xF1, 0xBD, 0xEF, 0xA2, 0xFF, 0x05, 0xF5, 0xF8, 0xF9, 0xE8, 0xE8, 0xF5, 0xBB, 0xFF, 0x00, 0x27,
0xA4, 0xD6, 0x03, 0xD9, 0xD1, 0xB7, 0xAD, 0xFE, 0xBF, 0x02, 0xB1, 0xE7, 0xEA, 0xBD, 0xE7, 0xA3, 0xDE, 0x01, 0xE4,
0xC8, 0xFE, 0xCE, 0x02, 0xCD, 0xC0, 0xFA, 0xBC, 0xEF, 0xA2, 0xFF, 0x01, 0xF5, 0xE7, 0xFE, 0xF9, 0x00, 0xF5, 0xBB,
0xFF, 0x00, 0x28, 0xA4, 0xD6, 0x09, 0xDA, 0xD2, 0xB8, 0xBE, 0xBE, 0xBD, 0xBA, 0xAD, 0xE3, 0xE9, 0xBD, 0xE7, 0xA4,
0xDE, 0x02, 0xE0, 0xE6, 0xCA, 0xFE, 0xCE, 0x02, 0xCB, 0xCF, 0xF8, 0xBC, 0xEF, 0xA2, 0xFF, 0x05, 0xF6, 0xF8, 0xF8,
0xF7, 0xF6, 0xF3, 0xBB, 0xFF, 0x00, 0x29, 0xA5, 0xD6, 0x0A, 0xD7, 0xDD, 0xC4, 0xB9, 0xBD, 0xBE, 0xBE, 0xB9, 0xCE,
0xF3, 0xE8, 0xBD, 0xE7, 0xA4, 0xDE, 0x02, 0xE2, 0xC6, 0xCC, 0xFE, 0xCE, 0x02, 0xC9, 0xDE, 0xF6, 0xBC, 0xEF, 0xA3,
0xFF, 0x05, 0xF3, 0xF6, 0xF7, 0xF8, 0xF8, 0xF6, 0xBA, 0xFF, 0x00, 0x27, 0xA5, 0xD6, 0x09, 0xD8, 0xCF, 0xB4, 0xBB,
0xBD, 0xBE, 0xAD, 0xB6, 0xCA, 0xEF, 0xBC, 0xE7, 0xA4, 0xDE, 0x01, 0xE4, 0xC8, 0xFD, 0xCE, 0x02, 0xC8, 0xDD, 0xF5,
0xBC, 0xEF, 0xA3, 0xFF, 0x05, 0xF4, 0xF7, 0xF7, 0xF8, 0xE7, 0xF5, 0xBA, 0xFF, 0x00, 0x27, 0xA5, 0xD6, 0x09, 0xD9,
0xD1, 0xB6, 0xBD, 0xBD, 0xBE, 0xBE, 0xB4, 0xD9, 0xED, 0xBC, 0xE7, 0xA4, 0xDE, 0x01, 0xE4, 0xC8, 0xFD, 0xCE, 0x02,
0xC5, 0xDB, 0xF3, 0xBC, 0xEF, 0xA3, 0xFF, 0x05, 0xF4, 0xF7, 0xF7, 0xF8, 0xF8, 0xF5, 0xBA, 0xFF, 0x00, 0x31, 0xA5,
0xD6, 0x02, 0xD9, 0xD1, 0xB6, 0xFD, 0xBD, 0x02, 0xB1, 0xE8, 0xEB, 0xEE, 0xE7, 0x04, 0xE8, 0xE9, 0xEB, 0xEA, 0xE9,
0xD4, 0xE7, 0xA4, 0xDE, 0x01, 0xE4, 0xC8, 0xFD, 0xCE, 0x02, 0xC3, 0xFD, 0xF1, 0xEC, 0xEF, 0xFE, 0xF1, 0xD4, 0xEF,
0xA3, 0xFF, 0x00, 0xF4, 0xFD, 0xF7, 0x00, 0xF4, 0xBA, 0xFF, 0x00, 0x39, 0xA5, 0xD6, 0x02, 0xD9, 0xD1, 0xB6, 0xFD,
0xBD, 0x02, 0xB0, 0xE7, 0xEA, 0xF0, 0xE7, 0x07, 0xE8, 0xEB, 0xF1, 0xE3, 0xE8, 0xD1, 0xEF, 0xE8, 0xD5, 0xE7, 0xA4,
0xDE, 0x01, 0xE4, 0xC8, 0xFE, 0xCE, 0x02, 0xCD, 0xC0, 0xFA, 0xEE, 0xEF, 0x05, 0xF1, 0xF4, 0xF8, 0xFC, 0xD5, 0xF5,
0xD4, 0xEF, 0xA3, 0xFF, 0x00, 0xF4, 0xFD, 0xF7, 0x00, 0xF4, 0xBA, 0xFF, 0x00, 0x46, 0xA5, 0xD6, 0x02, 0xD9, 0xD1,
0xB7, 0xFE, 0xBE, 0x03, 0xBB, 0xAE, 0xE3, 0xE9, 0xF2, 0xE7, 0x09, 0xE8, 0xEB, 0xF1, 0xE5, 0xCC, 0xAD, 0xB1, 0xA9,
0xE3, 0xEA, 0xD5, 0xE7, 0xA4, 0xDE, 0x01, 0xE4, 0xC8, 0xFE, 0xCE, 0x02, 0xCB, 0xCF, 0xF8, 0xF0, 0xEF, 0x08, 0xF1,
0xF5, 0xFB, 0xDC, 0xCF, 0xC2, 0xBD, 0xFB, 0xF1, 0xD5, 0xEF, 0xA3, 0xFF, 0x00, 0xF5, 0xFE, 0xF8, 0x01, 0xF7, 0xF4,
0xEB, 0xFF, 0x02, 0xF3, 0xF4, 0xF2, 0xD3, 0xFF, 0x00, 0x4A, 0xA6, 0xD6, 0x0A, 0xD7, 0xDC, 0xD4, 0xB9, 0xAD, 0xBE,
0xBF, 0xA9, 0xD0, 0xF3, 0xE8, 0xF2, 0xE7, 0x09, 0xEB, 0xE0, 0xCA, 0xB0, 0xB8, 0xBD, 0xBF, 0xB4, 0xD9, 0xED, 0xD5,
0xE7, 0xA5, 0xDE, 0x02, 0xDF, 0xE5, 0xC9, 0xFE, 0xCE, 0x02, 0xC9, 0xDE, 0xF6, 0xF1, 0xEF, 0x09, 0xF1, 0xF7, 0xDB,
0xC1, 0xC6, 0xCB, 0xCD, 0xC5, 0xDB, 0xF3, 0xD5, 0xEF, 0xA3, 0xFF, 0x04, 0xF6, 0xE7, 0xF8, 0xF9, 0xE6, 0xEC, 0xFF,
0x04, 0xF4, 0xF7, 0xF9, 0xF9, 0xF5, 0xD3, 0xFF, 0x00, 0x4C, 0xA6, 0xD6, 0x09, 0xD8, 0xCE, 0xB3, 0xBB, 0xBE, 0xBE,
0xBF, 0xA7, 0xCD, 0xF0, 0xF1, 0xE7, 0x0A, 0xED, 0xC5, 0xB1, 0xBC, 0xB0, 0xB2, 0xB0, 0xB9, 0xCD, 0xF2, 0xE8, 0xD6,
0xE7, 0xA5, 0xDE, 0x02, 0xE1, 0xD6, 0xCB, 0xFE, 0xCE, 0x02, 0xC8, 0xDD, 0xF5, 0xF1, 0xEF, 0x03, 0xF3, 0xD9, 0xC3,
0xCC, 0xFE, 0xCE, 0x02, 0xCA, 0xDF, 0xF7, 0xD5, 0xEF, 0xA4, 0xFF, 0x05, 0xF3, 0xF7, 0xF8, 0xF8, 0xF9, 0xE5, 0xED,
0xFF, 0x05, 0xF3, 0xF8, 0xEA, 0xEC, 0xEA, 0xF7, 0xD3, 0xFF, 0x00, 0x4D, 0xA6, 0xD6, 0x02, 0xD9, 0xD1, 0xB6, 0xFE,
0xBD, 0x03, 0xBE, 0xB6, 0xCB, 0xEF, 0xF1, 0xE7, 0x0A, 0xED, 0xD9, 0xB3, 0xC0, 0xB2, 0xB5, 0xB2, 0xBD, 0xAF, 0xE5,
0xEB, 0xD6, 0xE7, 0xA5, 0xDE, 0x02, 0xE3, 0xC7, 0xCD, 0xFE, 0xCE, 0x02, 0xC8, 0xDD, 0xF5, 0xF1, 0xEF, 0x02, 0xF3,
0xDB, 0xC5, 0xFD, 0xCE, 0x03, 0xCC, 0xC1, 0xFB, 0xF1, 0xD6, 0xEF, 0xA4, 0xFF, 0x00, 0xF4, 0xFE, 0xF7, 0x01, 0xF8,
0xF5, 0xED, 0xFF, 0x06, 0xF4, 0xFA, 0xEC, 0xEF, 0xEC, 0xF9, 0xF3, 0xD4, 0xFF, 0x00, 0x4B, 0xA6, 0xD6, 0x02, 0xD9,
0xD1, 0xB6, 0xFD, 0xBD, 0x02, 0xB3, 0xD9, 0xED, 0xF1, 0xE7, 0x0B, 0xEA, 0xE4, 0xAE, 0xBC, 0xB1, 0xB4, 0xB2, 0xC0,
0xB6, 0xCC, 0xF1, 0xE8, 0xD7, 0xE7, 0xA5, 0xDE, 0x01, 0xE4, 0xC8, 0xFD, 0xCE, 0x02, 0xC5, 0xDB, 0xF3, 0xF1, 0xEF,
0x03, 0xF1, 0xFB, 0xC1, 0xCC, 0xFD, 0xCE, 0x02, 0xC7, 0xDD, 0xF5, 0xD6, 0xEF, 0xA4, 0xFF, 0x00, 0xF4, 0xFD, 0xF7,
0x00, 0xF4, 0xED, 0xFF, 0x06, 0xF3, 0xF8, 0xEB, 0xEE, 0xEC, 0xFA, 0xF5, 0xD4, 0xFF, 0x00, 0x4B, 0xA6, 0xD6, 0x02,
0xD9, 0xD1, 0xB6, 0xFD, 0xBD, 0x02, 0xB1, 0xE8, 0xEB, 0xF1, 0xE7, 0x0B, 0xE8, 0xF1, 0xCC, 0xB7, 0xC0, 0xB1, 0xB0,
0xBF, 0xBA, 0xAE, 0xE4, 0xEA, 0xD7, 0xE7, 0xA5, 0xDE, 0x01, 0xE4, 0xC8, 0xFD, 0xCE, 0x02, 0xC3, 0xFD, 0xF1, 0xF0,
0xEF, 0x02, 0xF5, 0xDD, 0xC7, 0xFD, 0xCE, 0x03, 0xCC, 0xC1, 0xFB, 0xF1, 0xD7, 0xEF, 0xA4, 0xFF, 0x00, 0xF4, 0xFD,
0xF7, 0x00, 0xF4, 0xEC, 0xFF, 0x06, 0xF6, 0xFA, 0xEB, 0xEA, 0xF9, 0xF6, 0xF3, 0xD5, 0xFF, 0x00, 0x49, 0xA6, 0xD6,
0x02, 0xD9, 0xD1, 0xB6, 0xFD, 0xBD, 0x02, 0xB0, 0xE7, 0xEA, 0xF0, 0xE7, 0x03, 0xEB, 0xE5, 0xAF, 0xBB, 0xFE, 0xBF,
0x03, 0xBE, 0xB4, 0xD9, 0xED, 0xD7, 0xE7, 0xA5, 0xDE, 0x01, 0xE4, 0xC8, 0xFD, 0xCE, 0x01, 0xC1, 0xFB, 0xEF, 0xEF,
0x03, 0xF1, 0xFB, 0xC1, 0xCC, 0xFD, 0xCE, 0x02, 0xC5, 0xDB, 0xF3, 0xD7, 0xEF, 0xA4, 0xFF, 0x00, 0xF4, 0xFD, 0xF7,
0x00, 0xF4, 0xEC, 0xFF, 0x01, 0xF3, 0xF7, 0xFE, 0xF9, 0x01, 0xF8, 0xF5, 0xD5, 0xFF, 0x00, 0x48, 0xA6, 0xD6, 0x02,
0xD9, 0xD1, 0xB6, 0xFD, 0xBD, 0x02, 0xB0, 0xE7, 0xEA, 0xF0, 0xE7, 0x0B, 0xE8, 0xF3, 0xCE, 0xB8, 0xBD, 0xBD, 0xBE,
0xAD, 0xB8, 0xCD, 0xF2, 0xE8, 0xD8, 0xE7, 0xA5, 0xDE, 0x01, 0xE4, 0xC8, 0xFD, 0xCE, 0x01, 0xC1, 0xFB, 0xEE, 0xEF,
0x02, 0xF7, 0xDF, 0xCA, 0xFD, 0xCE, 0x02, 0xCA, 0xDF, 0xF7, 0xD7, 0xEF, 0xA4, 0xFF, 0x00, 0xF4, 0xFD, 0xF7, 0x00,
0xF4, 0xEB, 0xFF, 0x05, 0xF5, 0xF7, 0xF7, 0xF8, 0xE7, 0xF6, 0xD5, 0xFF, 0x00, 0x4B, 0xA6, 0xD6, 0x03, 0xD9, 0xD1,
0xB6, 0xBD, 0xFE, 0xBE, 0x02, 0xB0, 0xE7, 0xEA, 0xEF, 0xE7, 0x0A, 0xEE, 0xC9, 0xB4, 0xBE, 0xBF, 0xC0, 0xBF, 0xBB,
0xAF, 0xE5, 0xEB, 0xD8, 0xE7, 0xA5, 0xDE, 0x01, 0xE4, 0xC8, 0xFD, 0xCE, 0x01, 0xC1, 0xFB, 0xEE, 0xEF, 0x02, 0xF3,
0xDB, 0xC5, 0xFD, 0xCE, 0x03, 0xCC, 0xC1, 0xFB, 0xF1, 0xD8, 0xEF, 0xA4, 0xFF, 0x01, 0xF4, 0xF7, 0xFE, 0xF8, 0x00,
0xF4, 0xEB, 0xFF, 0x06, 0xF4, 0xF8, 0xF9, 0xFA, 0xF9, 0xF7, 0xF3, 0xD6, 0xFF, 0x00, 0x4D, 0xA6, 0xD6, 0x09, 0xD9,
0xD1, 0xB6, 0xBD, 0xBF, 0xAE, 0xBF, 0xB0, 0xE7, 0xEA, 0xEF, 0xE7, 0x0B, 0xEB, 0xE5, 0xAF, 0xBC, 0xB0, 0xB1, 0xC0,
0xBE, 0xB6, 0xCC, 0xF1, 0xE8, 0xD9, 0xE7, 0xA5, 0xDE, 0x01, 0xE4, 0xC8, 0xFE, 0xCE, 0x02, 0xCD, 0xC0, 0xFA, 0xEE,
0xEF, 0x03, 0xF1, 0xFB, 0xC1, 0xCC, 0xFD, 0xCE, 0x02, 0xC6, 0xDC, 0xF4, 0xD8, 0xEF, 0xA4, 0xFF, 0x05, 0xF4, 0xF7,
0xF9, 0xE8, 0xF9, 0xF4, 0xEB, 0xFF, 0x06, 0xF3, 0xF8, 0xEA, 0xEB, 0xFA, 0xF8, 0xF5, 0xD6, 0xFF, 0x00, 0x4C, 0xA6,
0xD6, 0x09, 0xD9, 0xD1, 0xB6, 0xBE, 0xC0, 0xAF, 0xBC, 0xAD, 0xE3, 0xE9, 0xEF, 0xE7, 0x0B, 0xE8, 0xF1, 0xCC, 0xB8,
0xB0, 0xB2, 0xB0, 0xBF, 0xBA, 0xAD, 0xE3, 0xE9, 0xD9, 0xE7, 0xA5, 0xDE, 0x01, 0xE4, 0xC8, 0xFE, 0xCE, 0x02, 0xCB,
0xCF, 0xF8, 0xED, 0xEF, 0x02, 0xF5, 0xDD, 0xC7, 0xFD, 0xCE, 0x02, 0xCB, 0xCF, 0xF8, 0xD8, 0xEF, 0xA4, 0xFF, 0x05,
0xF4, 0xF8, 0xFA, 0xE9, 0xF8, 0xF3, 0xEA, 0xFF, 0x06, 0xF7, 0xEA, 0xEC, 0xEA, 0xF9, 0xF6, 0xF3, 0xD7, 0xFF, 0x00,
0x4C, 0xA6, 0xD6, 0x09, 0xD9, 0xD1, 0xB6, 0xBF, 0xAF, 0xC0, 0xB9, 0xCE, 0xF3, 0xE8, 0xEE, 0xE7, 0x0A, 0xEC, 0xE6,
0xB1, 0xBC, 0xC2, 0xB0, 0xC0, 0xBD, 0xB2, 0xE9, 0xEC, 0xD9, 0xE7, 0xA5, 0xDE, 0x01, 0xE4, 0xC8, 0xFE, 0xCE, 0x02,
0xC9, 0xDE, 0xF6, 0xED, 0xEF, 0x03, 0xF1, 0xFB, 0xC1, 0xCC, 0xFE, 0xCE, 0x03, 0xCD, 0xC2, 0xFC, 0xF1, 0xD9, 0xEF,
0xA4, 0xFF, 0x04, 0xF4, 0xF9, 0xE9, 0xFA, 0xF6, 0xE9, 0xFF, 0x06, 0xF4, 0xF8, 0xFC, 0xEA, 0xFA, 0xF7, 0xF4, 0xD7,
0xFF, 0x00, 0x49, 0xA6, 0xD6, 0x08, 0xD9, 0xD1, 0xB6, 0xC0, 0xAF, 0xC0, 0xB6, 0xCB, 0xF0, 0xED, 0xE7, 0x0B, 0xE9,
0xE1, 0xCF, 0xB8, 0xC0, 0xAF, 0xC0, 0xBD, 0xB6, 0xCC, 0xF1, 0xE8, 0xDA, 0xE7, 0xA5, 0xDE, 0x01, 0xE4, 0xC8, 0xFE,
0xCE, 0x02, 0xC8, 0xDD, 0xF5, 0xEC, 0xEF, 0x02, 0xF7, 0xDF, 0xCA, 0xFD, 0xCE, 0x02, 0xC7, 0xDD, 0xF5, 0xD9, 0xEF,
0xA4, 0xFF, 0x04, 0xF4, 0xFA, 0xE9, 0xFA, 0xF4, 0xE8, 0xFF, 0x05, 0xF5, 0xFA, 0xE9, 0xFA, 0xF7, 0xF5, 0xD7, 0xFF,
0x00, 0x4A, 0xA6, 0xD6, 0x08, 0xD9, 0xD1, 0xB6, 0xBF, 0xAE, 0xBF, 0xB6, 0xCB, 0xF0, 0xED, 0xE7, 0x0B, 0xE8, 0xEF,
0xCA, 0xB4, 0xBF, 0xAE, 0xBF, 0xBD, 0xBA, 0xAD, 0xE3, 0xE9, 0xDA, 0xE7, 0xA5, 0xDE, 0x01, 0xE4, 0xC8, 0xFE, 0xCE,
0x02, 0xC8, 0xDD, 0xF5, 0xEC, 0xEF, 0x02, 0xF3, 0xDB, 0xC5, 0xFD, 0xCE, 0x02, 0xCC, 0xBF, 0xF9, 0xD9, 0xEF, 0xA4,
0xFF, 0x04, 0xF4, 0xF9, 0xE8, 0xF9, 0xF4, 0xE8, 0xFF, 0x06, 0xF4, 0xF9, 0xE8, 0xF9, 0xF7, 0xF6, 0xF3, 0xD8, 0xFF,
0x00, 0x4A, 0xA6, 0xD6, 0x02, 0xD9, 0xD1, 0xB6, 0xFE, 0xBE, 0x02, 0xB6, 0xCB, 0xF0, 0xEC, 0xE7, 0x0A, 0xEB, 0xE5,
0xB0, 0xBC, 0xBF, 0xBB, 0xB6, 0xB2, 0xA7, 0xE1, 0xE9, 0xDA, 0xE7, 0xA5, 0xDE, 0x01, 0xE4, 0xC8, 0xFE, 0xCE, 0x02,
0xC8, 0xDD, 0xF5, 0xEC, 0xEF, 0x09, 0xF1, 0xFB, 0xC1, 0xCC, 0xCE, 0xCC, 0xC7, 0xC3, 0xB9, 0xF7, 0xD9, 0xEF, 0xA4,
0xFF, 0x00, 0xF4, 0xFE, 0xF8, 0x00, 0xF4, 0xE8, 0xFF, 0x06, 0xF4, 0xF8, 0xF9, 0xF7, 0xF5, 0xF4, 0xF2, 0xD8, 0xFF,
0x00, 0x46, 0xA6, 0xD6, 0x02, 0xDB, 0xD3, 0xB8, 0xFE, 0xBD, 0x02, 0xB6, 0xCB, 0xF0, 0xEC, 0xE7, 0x0A, 0xE8, 0xF1,
0xCB, 0xA2, 0xB5, 0xAF, 0xCC, 0xE9, 0xE1, 0xEE, 0xE8, 0xDA, 0xE7, 0xA6, 0xDE, 0x02, 0xDF, 0xE5, 0xC9, 0xFE, 0xCE,
0x02, 0xC8, 0xDD, 0xF5, 0xEB, 0xEF, 0x08, 0xF5, 0xDB, 0xC3, 0xC5, 0xC1, 0xDD, 0xFD, 0xF7, 0xF3, 0xD9, 0xEF, 0xA4,
0xFF, 0x00, 0xF5, 0xFE, 0xF7, 0x00, 0xF4, 0xE7, 0xFF, 0x02, 0xE3, 0xF5, 0xF3, 0xD5, 0xFF, 0x00, 0x3E, 0xA7, 0xD6,
0x09, 0xD7, 0xDE, 0xB2, 0xBA, 0xBE, 0xBF, 0xBF, 0xB7, 0xCB, 0xF0, 0xEB, 0xE7, 0x08, 0xEB, 0xE2, 0xC9, 0xCB, 0xE5,
0xF1, 0xEC, 0xE9, 0xE8, 0xD9, 0xE7, 0xA6, 0xDE, 0x02, 0xE1, 0xD6, 0xCB, 0xFE, 0xCE, 0x02, 0xC8, 0xDD, 0xF5, 0xEB,
0xEF, 0x06, 0xF1, 0xF7, 0xD9, 0xDB, 0xFB, 0xF5, 0xF1, 0xD7, 0xEF, 0xA5, 0xFF, 0x05, 0xF3, 0xF6, 0xF8, 0xF9, 0xF9,
0xF5, 0xB8, 0xFF, 0x00, 0x38, 0xA7, 0xD6, 0x09, 0xD8, 0xD0, 0xB5, 0xBD, 0xBF, 0xB0, 0xB0, 0xB8, 0xCB, 0xF0, 0xEB,
0xE7, 0x05, 0xE8, 0xEC, 0xDC, 0xEF, 0xEB, 0xE8, 0xD6, 0xE7, 0xA6, 0xDE, 0x02, 0xE3, 0xC7, 0xCD, 0xFE, 0xCE, 0x02,
0xC8, 0xDD, 0xF5, 0xEA, 0xEF, 0x03, 0xF1, 0xF3, 0xF3, 0xF1, 0xD5, 0xEF, 0xA5, 0xFF, 0x05, 0xF4, 0xF7, 0xF9, 0xEA,
0xEA, 0xF6, 0xB8, 0xFF, 0x00, 0x2B, 0xA7, 0xD6, 0x09, 0xD9, 0xD1, 0xB6, 0xBD, 0xC0, 0xB2, 0xB2, 0xB9, 0xCB, 0xF0,
0xEA, 0xE7, 0xFE, 0xE8, 0xD4, 0xE7, 0xA6, 0xDE, 0x01, 0xE4, 0xC8, 0xFD, 0xCE, 0x02, 0xC8, 0xDD, 0xF5, 0xBA, 0xEF,
0xA5, 0xFF, 0x05, 0xF4, 0xF7, 0xFA, 0xEC, 0xEC, 0xF7, 0xB8, 0xFF, 0x00, 0x2F, 0xBD, 0xD6, 0x04, 0xD7, 0xD8, 0xD9,
0xD8, 0xD7, 0xF0, 0xD6, 0x09, 0xD9, 0xD1, 0xB6, 0xBD, 0xC0, 0xB2, 0xB2, 0xB9, 0xCB, 0xF0, 0xBA, 0xE7, 0xA6, 0xDE,
0x01, 0xE4, 0xC8, 0xFD, 0xCE, 0x02, 0xC8, 0xDD, 0xF5, 0xBA, 0xEF, 0xA5, 0xFF, 0x05, 0xF4, 0xF7, 0xFA, 0xEC, 0xEC,
0xF7, 0xB8, 0xFF, 0x00, 0x36, 0xBF, 0xD6, 0x07, 0xD7, 0xD8, 0xDA, 0xCC, 0xCD, 0xCC, 0xD9, 0xD7, 0xF1, 0xD6, 0x09,
0xD8, 0xD0, 0xB5, 0xBD, 0xC0, 0xB2, 0xB2, 0xB9, 0xCB, 0xF0, 0xBA, 0xE7, 0xBC, 0xDE, 0xFE, 0xDF, 0xEE, 0xDE, 0x01,
0xE4, 0xC8, 0xFD, 0xCE, 0x02, 0xC8, 0xDD, 0xF5, 0xBA, 0xEF, 0xA5, 0xFF, 0x05, 0xF4, 0xF7, 0xFA, 0xEC, 0xEC, 0xF7,
0xB8, 0xFF, 0x00, 0x41, 0xC2, 0xD6, 0x0A, 0xD7, 0xD8, 0xD9, 0xDA, 0xCA, 0xCE, 0xD3, 0xB0, 0xD1, 0xCA, 0xD8, 0xF1,
0xD6, 0x09, 0xD8, 0xE1, 0xB5, 0xBD, 0xBF, 0xB0, 0xB0, 0xB8, 0xCB, 0xF0, 0xBA, 0xE7, 0xBD, 0xDE, 0x03, 0xDF, 0xE1,
0xD0, 0xE0, 0xEE, 0xDE, 0x02, 0xE3, 0xC7, 0xCD, 0xFE, 0xCE, 0x02, 0xC8, 0xDD, 0xF5, 0xBA, 0xEF, 0xBB, 0xFF, 0x00,
0xF1, 0xEC, 0xFF, 0x05, 0xF4, 0xF7, 0xF9, 0xEA, 0xEA, 0xF6, 0xB8, 0xFF, 0x00, 0x45, 0xC2, 0xD6, 0x0A, 0xD8, 0xC9,
0xCD, 0xD0, 0xD3, 0xD6, 0xB6, 0xB4, 0xD4, 0xCB, 0xD9, 0xF1, 0xD6, 0x09, 0xD8, 0xD0, 0xB5, 0xBD, 0xBE, 0xC0, 0xC0,
0xB8, 0xCB, 0xF0, 0xBA, 0xE7, 0xC0, 0xDE, 0x06, 0xDF, 0xE0, 0xE1, 0xE2, 0xD3, 0xD2, 0xE1, 0xEE, 0xDE, 0x02, 0xE3,
0xD8, 0xCD, 0xFE, 0xCE, 0x02, 0xC8, 0xDD, 0xF5, 0xBA, 0xEF, 0xBC, 0xFF, 0x01, 0xF4, 0xF3, 0xEC, 0xFF, 0x05, 0xF4,
0xF7, 0xF8, 0xFA, 0xFA, 0xF6, 0xB8, 0xFF, 0x00, 0x4A, 0xC2, 0xD6, 0x0B, 0xD8, 0xCA, 0xD1, 0xB2, 0xB4, 0xB6, 0xB8,
0xB8, 0xD6, 0xCE, 0xDA, 0xD7, 0xF2, 0xD6, 0x09, 0xD9, 0xCF, 0xB4, 0xBA, 0xBD, 0xBE, 0xAD, 0xB7, 0xCB, 0xF0, 0xBA,
0xE7, 0xC0, 0xDE, 0x07, 0xE0, 0xD1, 0xD2, 0xD3, 0xD4, 0xD4, 0xE2, 0xDF, 0xEF, 0xDE, 0x02, 0xE1, 0xC5, 0xCB, 0xFE,
0xCE, 0x02, 0xC8, 0xDD, 0xF5, 0xBA, 0xEF, 0xBF, 0xFF, 0x04, 0xF2, 0xF3, 0xF4, 0xF5, 0xF5, 0xEC, 0xFF, 0x05, 0xF3,
0xF6, 0xF7, 0xF8, 0xE7, 0xF5, 0xB8, 0xFF, 0x00, 0x4B, 0xC2, 0xD6, 0x0B, 0xD7, 0xDA, 0xD0, 0xB4, 0xB6, 0xDC, 0xB8,
0xBA, 0xB6, 0xD3, 0xCC, 0xD8, 0xF2, 0xD6, 0x09, 0xD8, 0xCC, 0xD5, 0xB8, 0xBE, 0xBF, 0xBF, 0xB7, 0xCB, 0xF0, 0xBA,
0xE7, 0xC0, 0xDE, 0x08, 0xE0, 0xD2, 0xD3, 0xE5, 0xD4, 0xD5, 0xD3, 0xE1, 0xDF, 0xF0, 0xDE, 0x02, 0xE0, 0xE6, 0xCA,
0xFE, 0xCE, 0x02, 0xC8, 0xDD, 0xF5, 0xBA, 0xEF, 0xBF, 0xFF, 0x05, 0xF3, 0xF4, 0xFF, 0xF5, 0xF6, 0xF4, 0xEC, 0xFF,
0x04, 0xF5, 0xF8, 0xF9, 0xF9, 0xF5, 0xB8, 0xFF, 0x00, 0x49, 0xC1, 0xD6, 0x0A, 0xD9, 0xCD, 0xD6, 0xB4, 0xDC, 0xB8,
0xBD, 0xBA, 0xB4, 0xCF, 0xD9, 0xF2, 0xD6, 0x09, 0xD7, 0xDA, 0xD2, 0xB6, 0xBF, 0xAE, 0xBF, 0xB6, 0xCB, 0xF0, 0xBA,
0xE7, 0xC0, 0xDE, 0x08, 0xDF, 0xE2, 0xD2, 0xE5, 0xD4, 0xD6, 0xD5, 0xD2, 0xE0, 0xEF, 0xDE, 0x01, 0xE4, 0xC8, 0xFE,
0xCE, 0x02, 0xC8, 0xDD, 0xF5, 0xBA, 0xEF, 0xBE, 0xFF, 0x05, 0xF3, 0xFF, 0xF5, 0xF7, 0xF6, 0xF3, 0xED, 0xFF, 0x04,
0xF4, 0xF9, 0xE8, 0xF9, 0xF4, 0xB8, 0xFF, 0x00, 0x48, 0xC1, 0xD6, 0x0B, 0xD8, 0xCA, 0xD3, 0xB4, 0xBA, 0xBA, 0xBD,
0xBD, 0xB6, 0xD2, 0xDA, 0xD7, 0xF2, 0xD6, 0x08, 0xD9, 0xD1, 0xB6, 0xC0, 0xAF, 0xC0, 0xB6, 0xCB, 0xF0, 0xBA, 0xE7,
0xBF, 0xDE, 0x07, 0xE1, 0xD2, 0xD5, 0xD5, 0xD6, 0xD6, 0xD3, 0xE1, 0xEF, 0xDE, 0x01, 0xE4, 0xC8, 0xFE, 0xCE, 0x02,
0xC8, 0xDD, 0xF5, 0xBA, 0xEF, 0xBE, 0xFF, 0x05, 0xF3, 0xF6, 0xF6, 0xF7, 0xF7, 0xF4, 0xED, 0xFF, 0x04, 0xF4, 0xFA,
0xE9, 0xFA, 0xF4, 0xB8, 0xFF, 0x00, 0x4A, 0xC1, 0xD6, 0x04, 0xD7, 0xDA, 0xD0, 0xB4, 0xBA, 0xFE, 0xBD, 0x03, 0xB8,
0xD5, 0xCC, 0xD8, 0xF2, 0xD6, 0x09, 0xD9, 0xD1, 0xB6, 0xC0, 0xAF, 0xC0, 0xB8, 0xCE, 0xF3, 0xE8, 0xBB, 0xE7, 0xBF,
0xDE, 0x02, 0xE0, 0xD2, 0xD5, 0xFE, 0xD6, 0x02, 0xD4, 0xE2, 0xDF, 0xF0, 0xDE, 0x01, 0xE4, 0xC8, 0xFE, 0xCE, 0x02,
0xC9, 0xDE, 0xF6, 0xBA, 0xEF, 0xBE, 0xFF, 0x01, 0xF3, 0xF6, 0xFE, 0xF7, 0x00, 0xF5, 0xED, 0xFF, 0x04, 0xF4, 0xFA,
0xE9, 0xFA, 0xF5, 0xB8, 0xFF, 0x00, 0x4B, 0xC0, 0xD6, 0x03, 0xD8, 0xCC, 0xD5, 0xB8, 0xFE, 0xBD, 0x04, 0xBA, 0xB4,
0xD0, 0xDA, 0xD7, 0xF3, 0xD6, 0x09, 0xD9, 0xD1, 0xB6, 0xBF, 0xAE, 0xBF, 0xBA, 0xAD, 0xE3, 0xE9, 0xBB, 0xE7, 0xBF,
0xDE, 0x02, 0xDF, 0xE2, 0xD4, 0xFE, 0xD6, 0x02, 0xD5, 0xD2, 0xE0, 0xF0, 0xDE, 0x01, 0xE4, 0xC8, 0xFE, 0xCE, 0x02,
0xCB, 0xCF, 0xF8, 0xBA, 0xEF, 0xBD, 0xFF, 0x00, 0xF5, 0xFE, 0xF7, 0x01, 0xF6, 0xF3, 0xEE, 0xFF, 0x05, 0xF4, 0xF9,
0xE8, 0xF9, 0xF6, 0xF3, 0xB9, 0xFF, 0x00, 0x47, 0xC0, 0xD6, 0x03, 0xD7, 0xDA, 0xD2, 0xB6, 0xFD, 0xBD, 0x03, 0xB6,
0xD3, 0xCA, 0xD8, 0xF3, 0xD6, 0x02, 0xD9, 0xD1, 0xB6, 0xFE, 0xBE, 0x03, 0xBD, 0xB0, 0xE7, 0xEA, 0xBB, 0xE7, 0xBE,
0xDE, 0x01, 0xE1, 0xD3, 0xFD, 0xD6, 0x01, 0xD3, 0xE1, 0xF0, 0xDE, 0x01, 0xE4, 0xC8, 0xFE, 0xCE, 0x02, 0xCD, 0xC0,
0xFA, 0xBA, 0xEF, 0xBD, 0xFF, 0x00, 0xF4, 0xFD, 0xF7, 0x00, 0xF4, 0xEE, 0xFF, 0x00, 0xF4, 0xFE, 0xF8, 0x01, 0xF7,
0xF4, 0xB9, 0xFF, 0x00, 0x47, 0xBF, 0xD6, 0x03, 0xD9, 0xCF, 0xB4, 0xBA, 0xFE, 0xBD, 0x03, 0xB8, 0xD6, 0xCD, 0xD9,
0xF3, 0xD6, 0x02, 0xD9, 0xD1, 0xB6, 0xFD, 0xBD, 0x02, 0xB0, 0xE7, 0xEA, 0xBB, 0xE7, 0xBE, 0xDE, 0x02, 0xE0, 0xD2,
0xD5, 0xFE, 0xD6, 0x02, 0xD4, 0xE2, 0xDF, 0xF1, 0xDE, 0x01, 0xE4, 0xC8, 0xFD, 0xCE, 0x01, 0xC1, 0xFB, 0xBA, 0xEF,
0xBD, 0xFF, 0x01, 0xF3, 0xF6, 0xFE, 0xF7, 0x00, 0xF5, 0xEE, 0xFF, 0x00, 0xF4, 0xFD, 0xF7, 0x00, 0xF4, 0xB9, 0xFF,
0x00, 0x4A, 0xBF, 0xD6, 0x0B, 0xD8, 0xCC, 0xD3, 0xB6, 0xBA, 0xBD, 0xBD, 0xBA, 0xB4, 0xD0, 0xDA, 0xD7, 0xF4, 0xD6,
0x02, 0xD9, 0xD1, 0xB6, 0xFE, 0xBE, 0x03, 0xBD, 0xB0, 0xE7, 0xEA, 0xBB, 0xE7, 0xBE, 0xDE, 0x08, 0xDF, 0xE1, 0xD3,
0xD5, 0xD6, 0xD6, 0xD5, 0xD2, 0xE0, 0xF1, 0xDE, 0x01, 0xE4, 0xC8, 0xFD, 0xCE, 0x01, 0xC1, 0xFB, 0xBA, 0xEF, 0xBC,
0xFF, 0x05, 0xF4, 0xF6, 0xF7, 0xF7, 0xF6, 0xF3, 0xEF, 0xFF, 0x00, 0xF4, 0xFE, 0xF8, 0x01, 0xF7, 0xF4, 0xB9, 0xFF,
0x00, 0x49, 0xBF, 0xD6, 0x04, 0xD7, 0xDA, 0xCE, 0xD6, 0xB8, 0xFE, 0xBD, 0x03, 0xB8, 0xD5, 0xCC, 0xD8, 0xF4, 0xD6,
0x09, 0xD9, 0xD1, 0xB6, 0xBF, 0xAE, 0xBF, 0xBD, 0xB0, 0xE7, 0xEA, 0xBB, 0xE7, 0xBD, 0xDE, 0x02, 0xDF, 0xE2, 0xD4,
0xFE, 0xD6, 0x02, 0xD4, 0xE2, 0xDF, 0xF2, 0xDE, 0x01, 0xE4, 0xC8, 0xFD, 0xCE, 0x01, 0xC1, 0xFB, 0xBA, 0xEF, 0xBB,
0xFF, 0x00, 0xF5, 0xFE, 0xF7, 0x00, 0xF5, 0xEF, 0xFF, 0x05, 0xF4, 0xF9, 0xE8, 0xF9, 0xF7, 0xF4, 0xB9, 0xFF, 0x00,
0x4A, 0xBE, 0xD6, 0x0B, 0xD8, 0xCA, 0xD3, 0xB6, 0xBD, 0xBD, 0xBA, 0xB8, 0xB2, 0xD0, 0xDA, 0xD7, 0xF5, 0xD6, 0x09,
0xD9, 0xD1, 0xB6, 0xC0, 0xAF, 0xC0, 0xBD, 0xB1, 0xE8, 0xEB, 0xBB, 0xE7, 0xBC, 0xDE, 0x07, 0xE1, 0xD3, 0xD6, 0xD6,
0xD5, 0xD4, 0xD1, 0xE0, 0xF2, 0xDE, 0x01, 0xE4, 0xC8, 0xFD, 0xCE, 0x02, 0xC3, 0xFD, 0xF1, 0xBB, 0xEF, 0xBB, 0xFF,
0x05, 0xF4, 0xF7, 0xF7, 0xF6, 0xF5, 0xF2, 0xF0, 0xFF, 0x05, 0xF4, 0xFA, 0xE9, 0xFA, 0xF7, 0xF4, 0xB9, 0xFF, 0x00,
0x4A, 0xBE, 0xD6, 0x0B, 0xD7, 0xDA, 0xD0, 0xB4, 0xBA, 0xBD, 0xBA, 0xDF, 0xB4, 0xD3, 0xCA, 0xD8, 0xF5, 0xD6, 0x09,
0xD9, 0xD1, 0xB6, 0xC0, 0xAF, 0xC0, 0xBD, 0xB3, 0xD9, 0xED, 0xBB, 0xE7, 0xBC, 0xDE, 0x07, 0xE0, 0xD2, 0xD5, 0xD6,
0xD5, 0xE6, 0xD2, 0xE1, 0xF2, 0xDE, 0x01, 0xE4, 0xC8, 0xFD, 0xCE, 0x02, 0xC5, 0xDB, 0xF3, 0xBB, 0xEF, 0xBB, 0xFF,
0x05, 0xF3, 0xF6, 0xF7, 0xF6, 0xFF, 0xF3, 0xF0, 0xFF, 0x05, 0xF4, 0xFA, 0xE9, 0xFA, 0xF7, 0xF4, 0xB9, 0xFF, 0x00,
0x49, 0xBD, 0xD6, 0x0A, 0xD9, 0xCD, 0xD6, 0xB6, 0xB8, 0xB4, 0xB4, 0xB0, 0xD1, 0xCA, 0xD8, 0xF5, 0xD6, 0x09, 0xD8,
0xD0, 0xB5, 0xC0, 0xAF, 0xC0, 0xBD, 0xB5, 0xCA, 0xEF, 0xBB, 0xE7, 0xBC, 0xDE, 0x07, 0xDF, 0xE2, 0xD3, 0xD4, 0xD2,
0xD2, 0xD0, 0xE0, 0xF2, 0xDE, 0x02, 0xE3, 0xC7, 0xCD, 0xFE, 0xCE, 0x02, 0xC8, 0xDD, 0xF5, 0xBB, 0xEF, 0xBA, 0xFF,
0x04, 0xF4, 0xF5, 0xF3, 0xF3, 0xF1, 0xF0, 0xFF, 0x05, 0xF4, 0xFA, 0xE9, 0xFA, 0xF7, 0xF4, 0xB9, 0xFF, 0x00, 0x44,
0xBD, 0xD6, 0x0A, 0xD8, 0xCA, 0xD1, 0xB0, 0xD6, 0xD3, 0xD2, 0xCF, 0xCC, 0xD9, 0xD7, 0xF5, 0xD6, 0x09, 0xD7, 0xDE,
0xB2, 0xBD, 0xAF, 0xC0, 0xBD, 0xB6, 0xCB, 0xF0, 0xBB, 0xE7, 0xBB, 0xDE, 0x06, 0xE0, 0xD0, 0xE2, 0xE1, 0xE1, 0xE0,
0xDF, 0xF2, 0xDE, 0x02, 0xE1, 0xD6, 0xCB, 0xFE, 0xCE, 0x02, 0xC8, 0xDD, 0xF5, 0xBB, 0xEF, 0xBA, 0xFF, 0x00, 0xF1,
0xEC, 0xFF, 0x05, 0xF3, 0xF9, 0xE9, 0xFA, 0xF7, 0xF4, 0xB9, 0xFF, 0x00, 0x38, 0xBD, 0xD6, 0x09, 0xD7, 0xDA, 0xCE,
0xCF, 0xCE, 0xCA, 0xDA, 0xD9, 0xD8, 0xD7, 0xF3, 0xD6, 0x09, 0xDB, 0xD3, 0xBA, 0xAE, 0xBF, 0xBD, 0xB8, 0xCE, 0xF3,
0xE8, 0xBC, 0xE7, 0xBB, 0xDE, 0xFE, 0xDF, 0xEE, 0xDE, 0x02, 0xDF, 0xE5, 0xC9, 0xFE, 0xCE, 0x02, 0xCA, 0xDF, 0xF7,
0xBB, 0xEF, 0xA3, 0xFF, 0x04, 0xF7, 0xE8, 0xF9, 0xF7, 0xF5, 0xB9, 0xFF, 0x00, 0x30, 0xBC, 0xD6, 0x05, 0xD8, 0xC9,
0xCA, 0xDA, 0xD8, 0xD7, 0xF0, 0xD6, 0x09, 0xD9, 0xD1, 0xB7, 0xBE, 0xBE, 0xBD, 0xBA, 0xAD, 0xE3, 0xE9, 0xBC, 0xE7,
0xA4, 0xDE, 0x01, 0xE4, 0xC8, 0xFE, 0xCE, 0x02, 0xCC, 0xBF, 0xF9, 0xBB, 0xEF, 0xA3, 0xFF, 0x05, 0xF5, 0xF8, 0xF8,
0xF7, 0xF6, 0xF3, 0xBA, 0xFF, 0x00, 0x2B, 0xBC, 0xD6, 0x03, 0xD7, 0xD8, 0xD8, 0xD7, 0xEE, 0xD6, 0x02, 0xD9, 0xD1,
0xB6, 0xFD, 0xBD, 0x02, 0xB0, 0xE7, 0xEA, 0xBC, 0xE7, 0xA4, 0xDE, 0x01, 0xE4, 0xC8, 0xFD, 0xCE, 0x01, 0xC1, 0xFB,
0xBB, 0xEF, 0xA3, 0xFF, 0x00, 0xF4, 0xFD, 0xF7, 0x00, 0xF4, 0xBA, 0xFF, 0x00, 0x25, 0xA5, 0xD6, 0x02, 0xD9, 0xD1,
0xB6, 0xFD, 0xBD, 0x02, 0xB2, 0xE9, 0xEC, 0xBC, 0xE7, 0xA4, 0xDE, 0x01, 0xE4, 0xC8, 0xFD, 0xCE, 0x02, 0xC3, 0xFD,
0xF1, 0xBC, 0xEF, 0xA3, 0xFF, 0x00, 0xF4, 0xFD, 0xF7, 0x00, 0xF4, 0xBA, 0xFF, 0x00, 0x25, 0xA5, 0xD6, 0x02, 0xD8,
0xD0, 0xB5, 0xFD, 0xBD, 0x02, 0xB4, 0xC9, 0xEE, 0xBC, 0xE7, 0xA4, 0xDE, 0x01, 0xE4, 0xC8, 0xFD, 0xCE, 0x02, 0xC5,
0xDB, 0xF3, 0xBC, 0xEF, 0xA3, 0xFF, 0x00, 0xF4, 0xFD, 0xF7, 0x00, 0xF4, 0xBA, 0xFF, 0x00, 0x29, 0xA5, 0xD6, 0x03,
0xD7, 0xDE, 0xB2, 0xBA, 0xFE, 0xBD, 0x03, 0xB6, 0xCC, 0xF1, 0xE8, 0xBD, 0xE7, 0xA4, 0xDE, 0x02, 0xE2, 0xC6, 0xCC,
0xFE, 0xCE, 0x02, 0xC8, 0xDD, 0xF5, 0xBC, 0xEF, 0xA3, 0xFF, 0x01, 0xF3, 0xF6, 0xFE, 0xF7, 0x00, 0xF4, 0xBA, 0xFF,
0x00, 0x2E, 0xA4, 0xD6, 0x09, 0xDB, 0xD3, 0xB9, 0xBE, 0xBE, 0xBD, 0xB8, 0xCF, 0xE1, 0xE9, 0xEC, 0xE7, 0x03, 0xE8,
0xE9, 0xE9, 0xE8, 0xD6, 0xE7, 0xA4, 0xDE, 0x02, 0xE0, 0xE6, 0xCA, 0xFE, 0xCE, 0x02, 0xCA, 0xDF, 0xF7, 0xBC, 0xEF,
0xA2, 0xFF, 0x04, 0xF6, 0xF8, 0xF8, 0xF7, 0xF5, 0xBA, 0xFF, 0x00, 0x39, 0xA4, 0xD6, 0x09, 0xD9, 0xD1, 0xB7, 0xAD,
0xBF, 0xBF, 0xBC, 0xAF, 0xE4, 0xEA, 0xEE, 0xE7, 0x06, 0xE8, 0xEB, 0xF1, 0xE3, 0xE1, 0xEE, 0xE8, 0xD7, 0xE7, 0xA3,
0xDE, 0x01, 0xE4, 0xC8, 0xFE, 0xCE, 0x02, 0xCC, 0xBF, 0xF9, 0xEC, 0xEF, 0x04, 0xF1, 0xF5, 0xF8, 0xF6, 0xF2, 0xD6,
0xEF, 0xA2, 0xFF, 0x05, 0xF5, 0xE7, 0xF9, 0xF9, 0xF8, 0xF4, 0xBB, 0xFF, 0x00, 0x44, 0xA4, 0xD6, 0x09, 0xD9, 0xD1,
0xB7, 0xBE, 0xBF, 0xAE, 0xAE, 0xB3, 0xE9, 0xEC, 0xF1, 0xE7, 0x09, 0xE8, 0xEA, 0xED, 0xF2, 0xE5, 0xCC, 0xAD, 0xA7,
0xE1, 0xE9, 0xD7, 0xE7, 0xA3, 0xDE, 0x01, 0xE4, 0xC8, 0xFD, 0xCE, 0x02, 0xC3, 0xFD, 0xF1, 0xF0, 0xEF, 0x07, 0xF1,
0xF3, 0xF7, 0xFB, 0xDD, 0xBE, 0xC9, 0xF6, 0xD6, 0xEF, 0xA2, 0xFF, 0x05, 0xF5, 0xF8, 0xF9, 0xE8, 0xE8, 0xF5, 0xE9,
0xFF, 0x01, 0xF3, 0xF2, 0xD5, 0xFF, 0x00, 0x4E, 0xA4, 0xD6, 0x09, 0xD8, 0xD0, 0xB5, 0xBD, 0xBE, 0xBF, 0xBF, 0xB5,
0xC9, 0xEE, 0xF3, 0xE7, 0x0B, 0xE8, 0xEB, 0xF1, 0xE4, 0xD9, 0xCD, 0xAF, 0xB6, 0xBA, 0xB0, 0xE7, 0xEA, 0xE5, 0xE7,
0xFE, 0xE8, 0xF6, 0xE7, 0xA3, 0xDE, 0x01, 0xE4, 0xC8, 0xFD, 0xCE, 0x02, 0xC5, 0xDB, 0xF3, 0xF2, 0xEF, 0x09, 0xF1,
0xF5, 0xFB, 0xDB, 0xDF, 0xC1, 0xC7, 0xCB, 0xC0, 0xFA, 0xD6, 0xEF, 0xA2, 0xFF, 0x05, 0xF4, 0xF7, 0xF8, 0xF9, 0xF9,
0xF5, 0xEB, 0xFF, 0x03, 0xF3, 0xF5, 0xF6, 0xF4, 0xD5, 0xFF, 0x00, 0x65, 0xA4, 0xD6, 0x03, 0xD7, 0xDE, 0xB2, 0xBA,
0xFE, 0xBD, 0x03, 0xB8, 0xCE, 0xF3, 0xE8, 0xF7, 0xE7, 0x0E, 0xE8, 0xEA, 0xED, 0xF2, 0xE5, 0xCC, 0xAE, 0xB4, 0xB8,
0xBB, 0xBD, 0xBD, 0xB0, 0xE7, 0xEA, 0xE6, 0xE7, 0x05, 0xE8, 0xEE, 0xDE, 0xF1, 0xEB, 0xE8, 0xF8, 0xE7, 0xA3, 0xDE,
0x02, 0xE2, 0xC6, 0xCC, 0xFE, 0xCE, 0x02, 0xCA, 0xDF, 0xF7, 0xF5, 0xEF, 0x0C, 0xF1, 0xF3, 0xF7, 0xFB, 0xDD, 0xC1,
0xC5, 0xCA, 0xCC, 0xCE, 0xCE, 0xC1, 0xFB, 0xE4, 0xEF, 0x03, 0xF3, 0xF5, 0xF5, 0xF1, 0xF7, 0xEF, 0xA2, 0xFF, 0x01,
0xF3, 0xF6, 0xFE, 0xF7, 0x00, 0xF5, 0xEE, 0xFF, 0x02, 0xF3, 0xF5, 0xF6, 0xFE, 0xF7, 0x00, 0xF4, 0xD5, 0xFF, 0x00,
0x72, 0xA3, 0xD6, 0x02, 0xDB, 0xD3, 0xB8, 0xFE, 0xBE, 0x03, 0xBA, 0xAD, 0xE3, 0xE9, 0xF9, 0xE7, 0x10, 0xE8, 0xEB,
0xF1, 0xE4, 0xD9, 0xCD, 0xAF, 0xB6, 0xBB, 0xC0, 0xB0, 0xC1, 0xBF, 0xBE, 0xB2, 0xE9, 0xEC, 0xE7, 0xE7, 0x07, 0xE8,
0xEE, 0xE7, 0xA8, 0xCC, 0xE4, 0xEF, 0xE9, 0xF9, 0xE7, 0xA3, 0xDE, 0x02, 0xE0, 0xE6, 0xCA, 0xFE, 0xCE, 0x02, 0xCC,
0xBF, 0xF9, 0xF7, 0xEF, 0x07, 0xF1, 0xF5, 0xFB, 0xDB, 0xDF, 0xC1, 0xC7, 0xCC, 0xFC, 0xCE, 0x02, 0xC3, 0xFD, 0xF1,
0xE6, 0xEF, 0x06, 0xF3, 0xFB, 0xBB, 0xDD, 0xFB, 0xF5, 0xF1, 0xF9, 0xEF, 0xA1, 0xFF, 0x00, 0xF5, 0xFE, 0xF8, 0x01,
0xF6, 0xF3, 0xF1, 0xFF, 0x08, 0xF3, 0xF5, 0xF7, 0xFA, 0xEA, 0xFB, 0xF9, 0xF8, 0xF4, 0xE2, 0xFF, 0x00, 0xF2, 0xF5,
0xFF, 0x00, 0x80, 0xA3, 0xD6, 0x09, 0xD9, 0xD1, 0xB6, 0xBF, 0xAF, 0xC0, 0xBE, 0xB2, 0xE9, 0xEC, 0xFC, 0xE7, 0x13,
0xE8, 0xEB, 0xEE, 0xF3, 0xE5, 0xCC, 0xAE, 0xB4, 0xB8, 0xBB, 0xBD, 0xBF, 0xB1, 0xB3, 0xB3, 0xB0, 0xBF, 0xB4, 0xC9,
0xEE, 0xE8, 0xE7, 0x0A, 0xE8, 0xEE, 0xE7, 0xAF, 0xB6, 0xB6, 0xAE, 0xD9, 0xF2, 0xEB, 0xE8, 0xFB, 0xE7, 0xA2, 0xDE,
0x01, 0xE4, 0xC8, 0xFD, 0xCE, 0x02, 0xC3, 0xFD, 0xF1, 0xFB, 0xEF, 0x08, 0xF1, 0xF3, 0xF7, 0xFB, 0xDD, 0xC1, 0xC5,
0xCA, 0xCC, 0xFA, 0xCE, 0x02, 0xC5, 0xDB, 0xF3, 0xE7, 0xEF, 0x08, 0xF3, 0xFB, 0xC1, 0xC7, 0xC7, 0xC1, 0xDB, 0xF7,
0xF1, 0xFA, 0xEF, 0xA1, 0xFF, 0x05, 0xF4, 0xF9, 0xE9, 0xFA, 0xF8, 0xF4, 0xF4, 0xFF, 0x0B, 0xF3, 0xF5, 0xF6, 0xF7,
0xF7, 0xF9, 0xEB, 0xED, 0xED, 0xEA, 0xF9, 0xF4, 0xE3, 0xFF, 0x03, 0xF4, 0xF5, 0xF5, 0xF3, 0xF7, 0xFF, 0x00, 0x88,
0xA3, 0xD6, 0x22, 0xD9, 0xD1, 0xB6, 0xBF, 0xB0, 0xB0, 0xBF, 0xB4, 0xC9, 0xEE, 0xE7, 0xE7, 0xE8, 0xE9, 0xEC, 0xF1,
0xE5, 0xC9, 0xCE, 0xB0, 0xB8, 0xBC, 0xC0, 0xAE, 0xBF, 0xBD, 0xC0, 0xB2, 0xB5, 0xB5, 0xB2, 0xC0, 0xB6, 0xCB, 0xF0,
0xE9, 0xE7, 0x0B, 0xE8, 0xEE, 0xE7, 0xAF, 0xB8, 0xBE, 0xBE, 0xBA, 0xB2, 0xCA, 0xDF, 0xEA, 0xFB, 0xE7, 0xA2, 0xDE,
0x01, 0xE4, 0xC8, 0xFD, 0xCE, 0x02, 0xC5, 0xDB, 0xF3, 0xFD, 0xEF, 0x07, 0xF1, 0xF5, 0xFB, 0xDB, 0xDF, 0xC1, 0xC7,
0xCC, 0xF7, 0xCE, 0x02, 0xC8, 0xDD, 0xF5, 0xE8, 0xEF, 0x0A, 0xF2, 0xFA, 0xC0, 0xC9, 0xCE, 0xCE, 0xCC, 0xC5, 0xDD,
0xF7, 0xF1, 0xFB, 0xEF, 0xA1, 0xFF, 0x05, 0xF4, 0xF9, 0xEA, 0xEA, 0xF9, 0xF4, 0xF6, 0xFF, 0x0D, 0xF4, 0xF7, 0xF8,
0xFA, 0xE8, 0xF9, 0xF7, 0xFA, 0xEC, 0xEF, 0xEF, 0xEC, 0xFA, 0xF4, 0xE4, 0xFF, 0x05, 0xF4, 0xF6, 0xF8, 0xF8, 0xF7,
0xF4, 0xF8, 0xFF, 0x00, 0x8F, 0xA3, 0xD6, 0x23, 0xD8, 0xCE, 0xB3, 0xBB, 0xC1, 0xB1, 0xC1, 0xB9, 0xCE, 0xF3, 0xE9,
0xEB, 0xEF, 0xE1, 0xE6, 0xCC, 0xAF, 0xB4, 0xB9, 0xBD, 0xB0, 0xB0, 0xC2, 0xB0, 0xC0, 0xBD, 0xBF, 0xB0, 0xB3, 0xB4,
0xB2, 0xC0, 0xB8, 0xCE, 0xF3, 0xE8, 0xEB, 0xE7, 0x0C, 0xE8, 0xEE, 0xE7, 0xAF, 0xB8, 0xBE, 0xBF, 0xAE, 0xBE, 0xB8,
0xAC, 0xD1, 0xEA, 0xFB, 0xE7, 0xA2, 0xDE, 0x02, 0xE2, 0xC6, 0xCC, 0xFE, 0xCE, 0x0C, 0xCA, 0xDF, 0xF7, 0xEF, 0xF1,
0xF3, 0xF7, 0xFB, 0xDD, 0xC1, 0xC5, 0xCA, 0xCC, 0xF5, 0xCE, 0x02, 0xCA, 0xDF, 0xF7, 0xE9, 0xEF, 0x03, 0xF3, 0xFA,
0xD1, 0xC8, 0xFD, 0xCE, 0x03, 0xCA, 0xBF, 0xD5, 0xF1, 0xFB, 0xEF, 0xA1, 0xFF, 0x05, 0xF3, 0xF7, 0xFB, 0xEB, 0xFB,
0xF6, 0xF9, 0xFF, 0x10, 0xF3, 0xF4, 0xF6, 0xF9, 0xEA, 0xEA, 0xFC, 0xEA, 0xFA, 0xF7, 0xF9, 0xEA, 0xED, 0xEE, 0xEC,
0xFA, 0xF5, 0xE5, 0xFF, 0x07, 0xF4, 0xF6, 0xF8, 0xF9, 0xE8, 0xF8, 0xF5, 0xF2, 0xF9, 0xFF, 0x00, 0x96, 0xA3, 0xD6,
0x23, 0xD7, 0xDC, 0xD4, 0xB8, 0xC0, 0xB1, 0xB1, 0xBC, 0xAF, 0xE8, 0xF4, 0xE5, 0xCA, 0xD0, 0xB2, 0xB9, 0xBC, 0xBE,
0xBF, 0xB0, 0xB2, 0xC3, 0xB2, 0xB0, 0xBF, 0xBD, 0xBB, 0xBC, 0xBE, 0xB1, 0xB0, 0xBF, 0xBA, 0xAD, 0xE3, 0xE9, 0xEC,
0xE7, 0x0D, 0xE8, 0xEE, 0xE7, 0xAF, 0xB8, 0xBD, 0xBE, 0xAE, 0xBF, 0xBB, 0xB4, 0xCB, 0xF2, 0xE9, 0xFB, 0xE7, 0xA2,
0xDE, 0x02, 0xE0, 0xE6, 0xCA, 0xFE, 0xCE, 0x09, 0xCC, 0xC1, 0xFD, 0xF7, 0xFB, 0xDB, 0xDF, 0xC1, 0xC7, 0xCC, 0xF8,
0xCE, 0xFE, 0xCC, 0xFE, 0xCE, 0x02, 0xCC, 0xBF, 0xF9, 0xEA, 0xEF, 0x04, 0xF3, 0xFB, 0xC0, 0xC8, 0xCD, 0xFE, 0xCE,
0x04, 0xCC, 0xC5, 0xDD, 0xF7, 0xF1, 0xFB, 0xEF, 0xA0, 0xFF, 0x05, 0xF5, 0xFA, 0xEB, 0xEB, 0xF8, 0xF3, 0xFC, 0xFF,
0x00, 0xF5, 0xFE, 0xF8, 0x0F, 0xF9, 0xEA, 0xEC, 0xFD, 0xEC, 0xEA, 0xF9, 0xF7, 0xF7, 0xF8, 0xFA, 0xEB, 0xEA, 0xF9,
0xF6, 0xF3, 0xE7, 0xFF, 0x07, 0xF4, 0xF6, 0xF7, 0xF8, 0xE8, 0xF9, 0xF7, 0xF4, 0xF8, 0xFF, 0x00, 0x96, 0xA2, 0xD6,
0x22, 0xD9, 0xD1, 0xB7, 0xC1, 0xB2, 0xB1, 0xBF, 0xB6, 0xD3, 0xCF, 0xAF, 0xB4, 0xB9, 0xAB, 0xB0, 0xAF, 0xBF, 0xC0,
0xB0, 0xC2, 0xB0, 0xB0, 0xBD, 0xB9, 0xB6, 0xB4, 0xDA, 0xB9, 0xBF, 0xBF, 0xBE, 0xBD, 0xB0, 0xE7, 0xEA, 0xED, 0xE7,
0x0D, 0xE8, 0xEE, 0xE7, 0xAF, 0xB8, 0xBD, 0xBD, 0xBE, 0xBE, 0xBB, 0xB4, 0xCD, 0xE1, 0xEB, 0xFA, 0xE7, 0xA1, 0xDE,
0x01, 0xE4, 0xC8, 0xFD, 0xCE, 0x06, 0xC7, 0xE3, 0xDF, 0xC1, 0xC5, 0xCA, 0xCC, 0xF9, 0xCE, 0x05, 0xCC, 0xCA, 0xC8,
0xC6, 0xEA, 0xCA, 0xFD, 0xCE, 0x01, 0xC1, 0xFB, 0xEB, 0xEF, 0x03, 0xF3, 0xFB, 0xC1, 0xC9, 0xFD, 0xCE, 0x04, 0xCC,
0xC5, 0xDD, 0xF7, 0xF1, 0xFA, 0xEF, 0xA0, 0xFF, 0x1E, 0xF5, 0xFB, 0xEC, 0xEB, 0xF9, 0xF5, 0xFF, 0xFF, 0xF3, 0xF4,
0xF6, 0xE7, 0xEA, 0xE9, 0xF9, 0xFA, 0xEA, 0xFC, 0xEA, 0xEA, 0xF9, 0xF6, 0xF4, 0xF3, 0xFF, 0xF6, 0xF9, 0xF9, 0xF8,
0xF7, 0xF4, 0xE8, 0xFF, 0x07, 0xF4, 0xF6, 0xF7, 0xF7, 0xF8, 0xF8, 0xF7, 0xF4, 0xF7, 0xFF, 0x00, 0x96, 0xA2, 0xD6,
0x1B, 0xD9, 0xCF, 0xB5, 0xAC, 0xB1, 0xC1, 0xC0, 0xBB, 0xB9, 0xB8, 0xBB, 0xBE, 0xBF, 0xBF, 0xC1, 0xAF, 0xBF, 0xBF,
0xAE, 0xC0, 0xBC, 0xBA, 0xB4, 0xD4, 0xD1, 0xD0, 0xD5, 0xB6, 0xFD, 0xBD, 0x02, 0xB2, 0xE9, 0xEC, 0xEE, 0xE7, 0x0E,
0xE9, 0xEF, 0xE8, 0xAF, 0xB9, 0xBE, 0xBE, 0xBD, 0xBD, 0xBA, 0xB4, 0xCD, 0xE2, 0xEC, 0xE8, 0xFA, 0xE7, 0xA1, 0xDE,
0x02, 0xE2, 0xC6, 0xCC, 0xFE, 0xCE, 0x03, 0xCC, 0xCA, 0xCA, 0xCC, 0xF8, 0xCE, 0x07, 0xCC, 0xCA, 0xC6, 0xE6, 0xE4,
0xE2, 0xE6, 0xC8, 0xFD, 0xCE, 0x02, 0xC3, 0xFD, 0xF1, 0xEE, 0xEF, 0x04, 0xF1, 0xF5, 0xFD, 0xC1, 0xC9, 0xFD, 0xCE,
0x04, 0xCC, 0xC5, 0xDD, 0xF7, 0xF1, 0xF9, 0xEF, 0xA0, 0xFF, 0x14, 0xF4, 0xE8, 0xEB, 0xFB, 0xFA, 0xF7, 0xF6, 0xF5,
0xF7, 0xF8, 0xF9, 0xF9, 0xFB, 0xE9, 0xF9, 0xF9, 0xE8, 0xFA, 0xF8, 0xF7, 0xF4, 0xFD, 0xFF, 0x00, 0xF4, 0xFD, 0xF7,
0x00, 0xF4, 0xE9, 0xFF, 0x07, 0xF4, 0xF7, 0xF8, 0xF8, 0xF7, 0xF7, 0xF6, 0xF4, 0xF6, 0xFF, 0x00, 0x91, 0xA2, 0xD6,
0x1B, 0xD8, 0xCC, 0xD6, 0xBA, 0xC0, 0xAE, 0xBF, 0xAD, 0xBE, 0xBD, 0xBF, 0xAF, 0xC1, 0xBF, 0xBF, 0xBE, 0xBE, 0xBB,
0xB9, 0xB7, 0xB3, 0xD4, 0xCE, 0xDC, 0xD9, 0xDA, 0xD1, 0xB5, 0xFE, 0xBE, 0x03, 0xBD, 0xB4, 0xC9, 0xEE, 0xEF, 0xE7,
0x0E, 0xEA, 0xF1, 0xD9, 0xB0, 0xB8, 0xBF, 0xAE, 0xBF, 0xBD, 0xBA, 0xB4, 0xCD, 0xE2, 0xEC, 0xE8, 0xF9, 0xE7, 0xA1,
0xDE, 0x02, 0xE0, 0xE6, 0xCA, 0xF4, 0xCE, 0x0A, 0xCC, 0xCA, 0xC8, 0xC6, 0xE6, 0xE2, 0xE0, 0xDE, 0xDE, 0xE4, 0xC8,
0xFD, 0xCE, 0x02, 0xC5, 0xDB, 0xF3, 0xEF, 0xEF, 0x04, 0xF1, 0xF7, 0xDB, 0xC3, 0xC9, 0xFD, 0xCE, 0x04, 0xCC, 0xC5,
0xDD, 0xF7, 0xF1, 0xF8, 0xEF, 0x9F, 0xFF, 0x11, 0xF7, 0xFA, 0xE8, 0xF9, 0xE7, 0xF8, 0xF7, 0xF9, 0xE9, 0xFB, 0xF9,
0xF9, 0xF8, 0xF8, 0xF7, 0xF6, 0xF5, 0xF3, 0xFB, 0xFF, 0x00, 0xF4, 0xFE, 0xF8, 0x01, 0xF7, 0xF4, 0xEA, 0xFF, 0x07,
0xF4, 0xF6, 0xF9, 0xE8, 0xF9, 0xF7, 0xF6, 0xF4, 0xF5, 0xFF, 0x00, 0x91, 0xA2, 0xD6, 0x23, 0xD7, 0xDA, 0xD2, 0xB6,
0xBE, 0xBF, 0xC1, 0xC0, 0xBF, 0xBD, 0xBF, 0xAF, 0xB0, 0xAE, 0xBE, 0xBA, 0xB8, 0xB3, 0xD4, 0xD1, 0xCE, 0xDC, 0xD8,
0xD7, 0xD6, 0xD7, 0xDE, 0xB2, 0xBC, 0xAE, 0xBF, 0xBD, 0xB8, 0xCE, 0xF3, 0xE8, 0xF2, 0xE7, 0x0F, 0xE8, 0xEB, 0xF3,
0xCA, 0xB2, 0xB9, 0xBE, 0xC0, 0xAF, 0xBF, 0xBA, 0xB4, 0xCD, 0xE2, 0xEC, 0xE8, 0xF8, 0xE7, 0xA0, 0xDE, 0x01, 0xE4,
0xC8, 0xF6, 0xCE, 0x06, 0xCC, 0xCA, 0xC6, 0xE6, 0xE4, 0xE2, 0xE0, 0xFD, 0xDE, 0x02, 0xE2, 0xC6, 0xCC, 0xFE, 0xCE,
0x02, 0xC9, 0xDE, 0xF6, 0xF0, 0xEF, 0x04, 0xF1, 0xF7, 0xDD, 0xC5, 0xCC, 0xFD, 0xCE, 0x04, 0xCC, 0xC5, 0xDD, 0xF7,
0xF1, 0xF7, 0xEF, 0x9F, 0xFF, 0x0E, 0xF4, 0xF8, 0xF9, 0xFB, 0xFA, 0xF9, 0xF7, 0xF9, 0xE9, 0xEA, 0xE8, 0xF8, 0xF6,
0xF5, 0xF3, 0xF8, 0xFF, 0x05, 0xF3, 0xF8, 0xE8, 0xF9, 0xF7, 0xF5, 0xEB, 0xFF, 0x07, 0xF4, 0xF6, 0xF8, 0xFA, 0xE9,
0xF9, 0xF6, 0xF4, 0xF4, 0xFF, 0x00, 0x8E, 0xA1, 0xD6, 0x14, 0xD8, 0xCE, 0xB3, 0xBA, 0xBE, 0xAE, 0xAE, 0xBE, 0xBD,
0xBE, 0xBF, 0xBD, 0xBA, 0xB7, 0xB3, 0xD4, 0xCE, 0xDC, 0xD9, 0xD8, 0xD7, 0xFD, 0xD6, 0x09, 0xDB, 0xD3, 0xBA, 0xAF,
0xC0, 0xBF, 0xBB, 0xAE, 0xE3, 0xE9, 0xF3, 0xE7, 0x0F, 0xE8, 0xEE, 0xE3, 0xCE, 0xB4, 0xBC, 0xBF, 0xC0, 0xAF, 0xC0,
0xBB, 0xB4, 0xCD, 0xE2, 0xEC, 0xE8, 0xF7, 0xE7, 0xA0, 0xDE, 0x02, 0xE2, 0xC6, 0xCC, 0xFA, 0xCE, 0x06, 0xCC, 0xCA,
0xC8, 0xC6, 0xE6, 0xE2, 0xE0, 0xFA, 0xDE, 0x02, 0xE0, 0xE6, 0xCA, 0xFE, 0xCE, 0x02, 0xCB, 0xCF, 0xF8, 0xF1, 0xEF,
0x04, 0xF3, 0xF9, 0xDF, 0xC5, 0xCC, 0xFD, 0xCE, 0x04, 0xCC, 0xC5, 0xDD, 0xF7, 0xF1, 0xF6, 0xEF, 0x9F, 0xFF, 0x0C,
0xF3, 0xF6, 0xF8, 0xE8, 0xE8, 0xF8, 0xF7, 0xF8, 0xF9, 0xF9, 0xF7, 0xF5, 0xF3, 0xF5, 0xFF, 0x05, 0xF7, 0xE9, 0xFA,
0xF9, 0xF7, 0xF4, 0xED, 0xFF, 0x07, 0xF5, 0xF8, 0xF9, 0xFA, 0xE9, 0xFA, 0xF7, 0xF4, 0xF3, 0xFF, 0x00, 0x8A, 0xA1,
0xD6, 0x11, 0xD7, 0xDC, 0xD4, 0xB8, 0xBE, 0xBF, 0xBF, 0xBE, 0xBD, 0xBA, 0xB8, 0xB3, 0xD4, 0xD1, 0xCE, 0xDC, 0xD8,
0xD7, 0xFA, 0xD6, 0x09, 0xD9, 0xD1, 0xB7, 0xC0, 0xAF, 0xC0, 0xAD, 0xB2, 0xE8, 0xEB, 0xF5, 0xE7, 0x10, 0xE8, 0xEB,
0xF1, 0xE9, 0xAD, 0xB6, 0xBC, 0xB0, 0xB0, 0xC1, 0xAE, 0xBC, 0xB4, 0xCD, 0xE2, 0xEC, 0xE8, 0xF6, 0xE7, 0xA0, 0xDE,
0x02, 0xE0, 0xE6, 0xCA, 0xFC, 0xCE, 0x06, 0xCC, 0xCA, 0xC6, 0xE6, 0xE4, 0xE2, 0xE0, 0xF7, 0xDE, 0x01, 0xE4, 0xC8,
0xFE, 0xCE, 0x03, 0xCD, 0xC2, 0xFC, 0xF1, 0xF4, 0xEF, 0x05, 0xF1, 0xF5, 0xFD, 0xBF, 0xC7, 0xCC, 0xFD, 0xCE, 0x04,
0xCC, 0xC5, 0xDD, 0xF7, 0xF1, 0xF5, 0xEF, 0x9E, 0xFF, 0x08, 0xF5, 0xF8, 0xF9, 0xF9, 0xF8, 0xF7, 0xF6, 0xF5, 0xF3,
0xF2, 0xFF, 0x05, 0xF5, 0xFA, 0xE9, 0xFA, 0xE7, 0xF5, 0xEF, 0xFF, 0x08, 0xF3, 0xF5, 0xF8, 0xEA, 0xEA, 0xFB, 0xE8,
0xF8, 0xF4, 0xF2, 0xFF, 0x00, 0x81, 0xA0, 0xD6, 0x0E, 0xD9, 0xD1, 0xB6, 0xBD, 0xBD, 0xBA, 0xB8, 0xB6, 0xB3, 0xD4,
0xCE, 0xDC, 0xD9, 0xD8, 0xD7, 0xF8, 0xD6, 0x09, 0xD9, 0xD1, 0xB6, 0xC0, 0xAF, 0xC1, 0xBE, 0xB4, 0xD9, 0xED, 0xF6,
0xE7, 0x10, 0xE8, 0xEC, 0xE1, 0xCA, 0xB1, 0xB8, 0xBD, 0xBF, 0xB1, 0xB1, 0xC1, 0xBB, 0xB4, 0xCC, 0xE1, 0xEC, 0xE8,
0xF5, 0xE7, 0x9F, 0xDE, 0x0A, 0xE4, 0xC8, 0xCE, 0xCE, 0xCC, 0xCA, 0xC8, 0xC6, 0xE6, 0xE2, 0xE0, 0xF4, 0xDE, 0x01,
0xE4, 0xC8, 0xFD, 0xCE, 0x02, 0xC5, 0xDB, 0xF3, 0xF5, 0xEF, 0x04, 0xF1, 0xF7, 0xDB, 0xC3, 0xC9, 0xFC, 0xCE, 0x04,
0xCC, 0xC5, 0xDD, 0xF7, 0xF1, 0xF4, 0xEF, 0x9E, 0xFF, 0x06, 0xF4, 0xF7, 0xF7, 0xF6, 0xF5, 0xF4, 0xF3, 0xF0, 0xFF,
0x05, 0xF4, 0xFA, 0xE9, 0xFB, 0xF8, 0xF5, 0xF0, 0xFF, 0x08, 0xF4, 0xF6, 0xF7, 0xF9, 0xEB, 0xEB, 0xFB, 0xF7, 0xF5,
0xF1, 0xFF, 0x00, 0x7D, 0xA0, 0xD6, 0x0B, 0xD8, 0xCE, 0xB3, 0xB8, 0xB8, 0xB3, 0xD4, 0xD1, 0xCE, 0xDC, 0xD8, 0xD7,
0xF5, 0xD6, 0x0A, 0xD8, 0xCE, 0xB3, 0xBD, 0xAF, 0xC0, 0xBD, 0xB7, 0xCD, 0xF2, 0xE8, 0xF9, 0xE7, 0x11, 0xE8, 0xEB,
0xF1, 0xE6, 0xCF, 0xB4, 0xBA, 0xBD, 0xBD, 0xBE, 0xC0, 0xAF, 0xBB, 0xB2, 0xCA, 0xF3, 0xEB, 0xE8, 0xF4, 0xE7, 0x9F,
0xDE, 0x08, 0xE2, 0xC5, 0xC9, 0xC9, 0xC6, 0xE6, 0xE4, 0xE2, 0xE0, 0xF2, 0xDE, 0x02, 0xE2, 0xC6, 0xCC, 0xFE, 0xCE,
0x02, 0xC9, 0xDE, 0xF6, 0xF7, 0xEF, 0x05, 0xF1, 0xF5, 0xFB, 0xDF, 0xC5, 0xCC, 0xFC, 0xCE, 0x04, 0xCC, 0xC5, 0xDD,
0xF7, 0xF1, 0xF3, 0xEF, 0x9E, 0xFF, 0x03, 0xF3, 0xF5, 0xF5, 0xF3, 0xED, 0xFF, 0x05, 0xF3, 0xF9, 0xE9, 0xFA, 0xF7,
0xF5, 0xF1, 0xFF, 0x08, 0xF4, 0xF6, 0xF7, 0xF7, 0xF8, 0xFA, 0xE9, 0xF8, 0xF4, 0xF0, 0xFF, 0x00, 0x76, 0xA0, 0xD6,
0x09, 0xD7, 0xDC, 0xD2, 0xB1, 0xD4, 0xCE, 0xDC, 0xD9, 0xD8, 0xD7, 0xF3, 0xD6, 0x0A, 0xD7, 0xDC, 0xD4, 0xBA, 0xAE,
0xBF, 0xBD, 0xBA, 0xAD, 0xE3, 0xE9, 0xFA, 0xE7, 0x06, 0xE8, 0xEC, 0xE1, 0xCA, 0xAF, 0xB6, 0xBA, 0xFE, 0xBE, 0x06,
0xBD, 0xBB, 0xB7, 0xAF, 0xD9, 0xF1, 0xEA, 0xF2, 0xE7, 0x9F, 0xDE, 0x05, 0xE0, 0xE3, 0xD4, 0xE5, 0xE2, 0xE0, 0xEF,
0xDE, 0x02, 0xE0, 0xE6, 0xCA, 0xFE, 0xCE, 0x02, 0xCB, 0xCF, 0xF8, 0xF8, 0xEF, 0x05, 0xF1, 0xF7, 0xDB, 0xC1, 0xC7,
0xCC, 0xFD, 0xCE, 0x05, 0xCC, 0xC7, 0xC1, 0xDB, 0xF7, 0xF1, 0xF2, 0xEF, 0x9D, 0xFF, 0x00, 0xF2, 0xEA, 0xFF, 0x05,
0xF7, 0xE8, 0xF9, 0xF7, 0xF6, 0xF3, 0xF4, 0xFF, 0x02, 0xF3, 0xF5, 0xF6, 0xFE, 0xF8, 0x03, 0xF7, 0xF7, 0xF6, 0xF4,
0xEF, 0xFF, 0x00, 0x68, 0x9F, 0xD6, 0x05, 0xD8, 0xCB, 0xCC, 0xDC, 0xD8, 0xD7, 0xEF, 0xD6, 0x09, 0xD9, 0xD1, 0xB7,
0xBE, 0xBE, 0xBD, 0xBD, 0xB2, 0xE9, 0xEC, 0xFC, 0xE7, 0x06, 0xE8, 0xEB, 0xF1, 0xE6, 0xCF, 0xB5, 0xBC, 0xFE, 0xBF,
0x07, 0xAE, 0xBE, 0xBA, 0xB4, 0xCF, 0xE5, 0xEF, 0xE9, 0xF1, 0xE7, 0x9E, 0xDE, 0xFE, 0xDF, 0xEC, 0xDE, 0x01, 0xE4,
0xC8, 0xFE, 0xCE, 0x03, 0xCD, 0xC2, 0xFC, 0xF1, 0xFB, 0xEF, 0x05, 0xF1, 0xF5, 0xFB, 0xDF, 0xC5, 0xCC, 0xFC, 0xCE,
0x05, 0xCC, 0xC5, 0xDF, 0xFB, 0xF5, 0xF1, 0xF1, 0xEF, 0x85, 0xFF, 0x05, 0xF5, 0xF8, 0xF8, 0xF7, 0xF7, 0xF4, 0xF5,
0xFF, 0x01, 0xF5, 0xF8, 0xFE, 0xF9, 0x03, 0xE8, 0xF8, 0xF6, 0xF4, 0xED, 0xFF, 0x00, 0x61, 0x9F, 0xD6, 0x03, 0xD7,
0xD8, 0xD8, 0xD7, 0xED, 0xD6, 0x02, 0xD9, 0xD1, 0xB6, 0xFD, 0xBD, 0x18, 0xB4, 0xCA, 0xEF, 0xE8, 0xE7, 0xE7, 0xE8,
0xEB, 0xF1, 0xE5, 0xCD, 0xB0, 0xB7, 0xBB, 0xAF, 0xAF, 0xC0, 0xAF, 0xC0, 0xBB, 0xB2, 0xCB, 0xE1, 0xEC, 0xE8, 0xF0,
0xE7, 0x86, 0xDE, 0x01, 0xE4, 0xC8, 0xFD, 0xCE, 0x02, 0xC5, 0xDB, 0xF3, 0xFD, 0xEF, 0x06, 0xF1, 0xF5, 0xFB, 0xDD,
0xC1, 0xC7, 0xCC, 0xFC, 0xCE, 0x04, 0xCC, 0xC5, 0xDD, 0xF7, 0xF1, 0xEF, 0xEF, 0x85, 0xFF, 0x00, 0xF4, 0xFD, 0xF7,
0x00, 0xF4, 0xF7, 0xFF, 0x09, 0xF4, 0xF6, 0xF7, 0xE9, 0xE9, 0xFA, 0xE9, 0xFA, 0xF8, 0xF4, 0xEC, 0xFF, 0x00, 0x5D,
0x87, 0xD6, 0x1E, 0xD8, 0xCE, 0xB3, 0xBA, 0xBD, 0xBE, 0xBE, 0xB9, 0xCF, 0xE1, 0xE9, 0xE7, 0xE9, 0xED, 0xE2, 0xCA,
0xAF, 0xB8, 0xAB, 0xBF, 0xBF, 0xC1, 0xB0, 0xC0, 0xBC, 0xA7, 0xAF, 0xD9, 0xF2, 0xEB, 0xE8, 0xEF, 0xE7, 0x86, 0xDE,
0x02, 0xE2, 0xC6, 0xCC, 0xFE, 0xCE, 0x0B, 0xCA, 0xDF, 0xF7, 0xEF, 0xEF, 0xF1, 0xF3, 0xF9, 0xDB, 0xC1, 0xC7, 0xCC,
0xFC, 0xCE, 0x05, 0xCC, 0xC7, 0xC1, 0xDB, 0xF7, 0xF1, 0xEE, 0xEF, 0x85, 0xFF, 0x05, 0xF3, 0xF6, 0xF7, 0xF8, 0xF8,
0xF6, 0xF9, 0xFF, 0x0A, 0xF3, 0xF7, 0xE7, 0xF9, 0xF9, 0xFB, 0xEA, 0xFA, 0xF8, 0xE6, 0xF4, 0xEB, 0xFF, 0x00, 0x58,
0x87, 0xD6, 0x1C, 0xD7, 0xDC, 0xD4, 0xB8, 0xBD, 0xBE, 0xAD, 0xBB, 0xB0, 0xE6, 0xED, 0xEB, 0xF2, 0xD6, 0xD0, 0xB5,
0xBC, 0xC2, 0xB0, 0xC0, 0xBE, 0xAE, 0xBF, 0xBB, 0xB5, 0xD0, 0xE6, 0xEF, 0xE9, 0xED, 0xE7, 0x86, 0xDE, 0x02, 0xE0,
0xE6, 0xCA, 0xFE, 0xCE, 0x09, 0xCC, 0xC1, 0xFB, 0xF1, 0xF1, 0xF7, 0xD9, 0xE1, 0xC5, 0xCC, 0xFB, 0xCE, 0x05, 0xCC,
0xC5, 0xDF, 0xFB, 0xF5, 0xF1, 0xED, 0xEF, 0x84, 0xFF, 0x05, 0xF5, 0xF7, 0xF8, 0xE7, 0xF7, 0xF3, 0xFB, 0xFF, 0x09,
0xF5, 0xF8, 0xFC, 0xEA, 0xFA, 0xF8, 0xE8, 0xF9, 0xF7, 0xF5, 0xE9, 0xFF, 0x00, 0x54, 0x86, 0xD6, 0x03, 0xD9, 0xD1,
0xB6, 0xBD, 0xFE, 0xBE, 0x13, 0xB6, 0xCE, 0xFA, 0xE5, 0xCD, 0xB0, 0xB7, 0xBC, 0xB0, 0xB2, 0xB0, 0xBF, 0xBE, 0xBB,
0xB7, 0xAF, 0xCA, 0xE1, 0xEC, 0xE8, 0xEC, 0xE7, 0x85, 0xDE, 0x01, 0xE4, 0xC8, 0xFD, 0xCE, 0x07, 0xC7, 0xDF, 0xFB,
0xFB, 0xDF, 0xC3, 0xCA, 0xCC, 0xFC, 0xCE, 0x05, 0xCC, 0xC7, 0xC1, 0xDB, 0xF7, 0xF1, 0xEB, 0xEF, 0x84, 0xFF, 0x01,
0xF4, 0xF7, 0xFE, 0xF8, 0x00, 0xF5, 0xFD, 0xFF, 0x0A, 0xF3, 0xF5, 0xF8, 0xEA, 0xEC, 0xEA, 0xF9, 0xF8, 0xF7, 0xF6,
0xF3, 0xE8, 0xFF, 0x00, 0x51, 0x86, 0xD6, 0x03, 0xD8, 0xCE, 0xB3, 0xBA, 0xFE, 0xBE, 0x12, 0xBA, 0xB3, 0xD3, 0xAF,
0xB6, 0xBB, 0xBF, 0xC1, 0xB1, 0xB1, 0xC0, 0xBE, 0xB9, 0xB2, 0xCD, 0xE5, 0xF1, 0xEB, 0xE8, 0xEB, 0xE7, 0x85, 0xDE,
0x02, 0xE2, 0xC6, 0xCC, 0xFE, 0xCE, 0x05, 0xCC, 0xC5, 0xE3, 0xC1, 0xC7, 0xCC, 0xFB, 0xCE, 0x05, 0xCC, 0xC5, 0xDF,
0xFB, 0xF5, 0xF1, 0xEA, 0xEF, 0x84, 0xFF, 0x01, 0xF3, 0xF6, 0xFE, 0xF8, 0x0D, 0xF6, 0xF4, 0xFF, 0xF3, 0xF5, 0xF7,
0xF9, 0xFB, 0xEB, 0xEB, 0xFA, 0xF8, 0xF6, 0xF4, 0xE6, 0xFF, 0x00, 0x48, 0x86, 0xD6, 0x07, 0xD7, 0xDC, 0xD4, 0xB8,
0xBE, 0xAE, 0xBF, 0xBE, 0xFE, 0xBA, 0x0C, 0xBD, 0xBF, 0xB0, 0xB1, 0xC1, 0xBF, 0xBB, 0xB6, 0xAE, 0xD9, 0xF2, 0xEB,
0xE8, 0xE9, 0xE7, 0x85, 0xDE, 0x02, 0xE0, 0xE6, 0xCA, 0xFD, 0xCE, 0xFE, 0xCC, 0xFB, 0xCE, 0x05, 0xCC, 0xC7, 0xC1,
0xDB, 0xF7, 0xF1, 0xE8, 0xEF, 0x83, 0xFF, 0x04, 0xF5, 0xF8, 0xE8, 0xF9, 0xF8, 0xFE, 0xF6, 0x08, 0xF7, 0xF9, 0xEA,
0xEB, 0xFB, 0xF9, 0xF7, 0xF5, 0xF3, 0xE5, 0xFF, 0x00, 0x3F, 0x85, 0xD6, 0x14, 0xD9, 0xD1, 0xB6, 0xBE, 0xBF, 0xAF,
0xC0, 0xC0, 0xBF, 0xBE, 0xBD, 0xBF, 0xB0, 0xB0, 0xBC, 0xB6, 0xAF, 0xCC, 0xE4, 0xEF, 0xE9, 0xE7, 0xE7, 0x84, 0xDE,
0x01, 0xE4, 0xC8, 0xF6, 0xCE, 0x06, 0xCC, 0xC7, 0xC1, 0xDD, 0xFB, 0xF5, 0xF1, 0xE7, 0xEF, 0x83, 0xFF, 0x0E, 0xF4,
0xF8, 0xF9, 0xE9, 0xFA, 0xFA, 0xF9, 0xF8, 0xF7, 0xF9, 0xEA, 0xEA, 0xF8, 0xF5, 0xF3, 0xE3, 0xFF, 0x00, 0x3F, 0x88,
0xD6, 0x16, 0xD7, 0xD8, 0xD9, 0xDB, 0xD2, 0xB6, 0xBD, 0xBE, 0xBF, 0xAF, 0xAF, 0xAE, 0xBE, 0xBD, 0xBE, 0xBC, 0xB9,
0xB1, 0xCD, 0xE5, 0xF1, 0xEB, 0xE8, 0xE6, 0xE7, 0x84, 0xDE, 0x01, 0xE4, 0xC8, 0xF8, 0xCE, 0x06, 0xCC, 0xCA, 0xC3,
0xDF, 0xFB, 0xF5, 0xF1, 0xE5, 0xEF, 0x83, 0xFF, 0x0C, 0xF4, 0xF7, 0xF8, 0xF9, 0xE9, 0xE9, 0xE8, 0xF8, 0xF7, 0xF8,
0xF8, 0xF7, 0xF4, 0xE1, 0xFF, 0x00, 0x41, 0x8A, 0xD6, 0x16, 0xD7, 0xD8, 0xDA, 0xCC, 0xCF, 0xD2, 0xD7, 0xB8, 0xBD,
0xBE, 0xBF, 0xC0, 0xC0, 0xBF, 0xBE, 0xBD, 0xB9, 0xB2, 0xCE, 0xD5, 0xF2, 0xEB, 0xE8, 0xE4, 0xE7, 0x87, 0xDE, 0x05,
0xDF, 0xE0, 0xE1, 0xE5, 0xC8, 0xCD, 0xFB, 0xCE, 0x06, 0xCD, 0xCB, 0xC4, 0xE1, 0xD9, 0xF7, 0xF1, 0xE3, 0xEF, 0x83,
0xFF, 0x0A, 0xF5, 0xF7, 0xF8, 0xF9, 0xFA, 0xFA, 0xF9, 0xF8, 0xF7, 0xF6, 0xF4, 0xDF, 0xFF, 0x00, 0x45, 0x8D, 0xD6,
0x17, 0xD7, 0xD8, 0xD9, 0xDA, 0xCA, 0xCE, 0xD3, 0xB4, 0xB6, 0xB8, 0xBA, 0xBD, 0xBE, 0xAE, 0xC0, 0xBF, 0xBE, 0xBA,
0xB6, 0xAE, 0xD9, 0xF3, 0xEC, 0xE9, 0xE2, 0xE7, 0x88, 0xDE, 0x06, 0xDF, 0xE1, 0xD2, 0xD3, 0xD5, 0xD9, 0xCC, 0xFC,
0xCE, 0x06, 0xCC, 0xC6, 0xD1, 0xDA, 0xF9, 0xF3, 0xF1, 0xE2, 0xEF, 0x86, 0xFF, 0x0C, 0xF3, 0xF4, 0xF5, 0xF6, 0xF7,
0xF8, 0xE8, 0xFA, 0xF9, 0xF8, 0xF6, 0xF5, 0xF3, 0xDE, 0xFF, 0x00, 0x47, 0x90, 0xD6, 0x0B, 0xD7, 0xD8, 0xD9, 0xDA,
0xCA, 0xCD, 0xD0, 0xD3, 0xD6, 0xB6, 0xBA, 0xBD, 0xFE, 0xBA, 0x09, 0xBE, 0xC0, 0xB1, 0xB1, 0xC0, 0xB9, 0xD3, 0xE7,
0xEF, 0xE9, 0xE0, 0xE7, 0x8B, 0xDE, 0x0A, 0xDF, 0xE0, 0xE1, 0xE2, 0xD3, 0xD5, 0xD6, 0xD5, 0xD7, 0xC9, 0xCD, 0xFD,
0xCE, 0x04, 0xCA, 0xE2, 0xFC, 0xF4, 0xF1, 0xE0, 0xEF, 0x87, 0xFF, 0x02, 0xF4, 0xF6, 0xF7, 0xFE, 0xF6, 0x05, 0xF8,
0xFA, 0xEB, 0xEB, 0xFA, 0xF6, 0xDC, 0xFF, 0x00, 0x4D, 0x93, 0xD6, 0x1A, 0xD7, 0xD8, 0xD9, 0xDA, 0xCA, 0xCD, 0xD0,
0xD1, 0xD2, 0xB0, 0xB4, 0xB8, 0xBA, 0xBD, 0xBD, 0xBA, 0xDF, 0xBA, 0xBD, 0xBF, 0xB1, 0xB3, 0xB1, 0xBA, 0xCF, 0xF4,
0xE9, 0xDF, 0xE7, 0x8E, 0xDE, 0x00, 0xDF, 0xFE, 0xE0, 0x09, 0xD0, 0xD2, 0xD4, 0xD5, 0xD6, 0xD6, 0xD5, 0xE7, 0xD9,
0xCC, 0xFD, 0xCE, 0x02, 0xCA, 0xDF, 0xF7, 0xDE, 0xEF, 0x8A, 0xFF, 0x0E, 0xF1, 0xF3, 0xF5, 0xF6, 0xF7, 0xF7, 0xF6,
0xFF, 0xF6, 0xF7, 0xF9, 0xEB, 0xED, 0xEB, 0xF7, 0xDC, 0xFF, 0x00, 0x5A, 0x97, 0xD6, 0x0F, 0xD7, 0xD8, 0xD9, 0xD9,
0xDA, 0xCA, 0xCD, 0xD0, 0xD3, 0xD6, 0xB4, 0xB4, 0xD8, 0xD8, 0xB8, 0xBA, 0xFE, 0xBD, 0x0B, 0xB8, 0xB6, 0xB4, 0xB8,
0xBB, 0xC1, 0xB3, 0xB2, 0xBD, 0xAF, 0xE5, 0xEB, 0xDF, 0xE7, 0x91, 0xDE, 0x09, 0xDF, 0xE0, 0xE1, 0xE2, 0xD2, 0xD2,
0xE3, 0xE3, 0xD4, 0xD5, 0xFE, 0xD6, 0x04, 0xD4, 0xD3, 0xD4, 0xC8, 0xCC, 0xFE, 0xCE, 0x03, 0xCC, 0xC1, 0xFB, 0xF1,
0xDF, 0xEF, 0x8D, 0xFF, 0x05, 0xF3, 0xF3, 0xFF, 0xFF, 0xF5, 0xF6, 0xFE, 0xF7, 0x09, 0xF5, 0xF4, 0xF3, 0xF5, 0xF7,
0xFB, 0xED, 0xEC, 0xF9, 0xF3, 0xDD, 0xFF, 0x00, 0x65, 0x9B, 0xD6, 0x23, 0xD7, 0xD8, 0xD9, 0xD9, 0xDA, 0xCA, 0xCD,
0xCF, 0xD2, 0xD3, 0xD6, 0xB4, 0xB6, 0xB8, 0xBA, 0xB8, 0xB4, 0xB2, 0xDA, 0xBA, 0xBD, 0xBA, 0xB8, 0xB4, 0xD6, 0xD4,
0xD8, 0xB8, 0xC0, 0xB2, 0xB2, 0xC0, 0xB6, 0xCC, 0xF1, 0xE8, 0xE0, 0xE7, 0x95, 0xDE, 0x15, 0xDF, 0xE0, 0xE1, 0xE1,
0xE2, 0xD2, 0xD3, 0xD4, 0xD5, 0xD4, 0xD2, 0xD1, 0xE4, 0xD5, 0xD6, 0xD5, 0xD4, 0xD2, 0xE2, 0xE2, 0xE7, 0xCA, 0xFD,
0xCE, 0x02, 0xC7, 0xDD, 0xF5, 0xDF, 0xEF, 0x90, 0xFF, 0x0C, 0xF3, 0xF4, 0xF5, 0xF6, 0xF5, 0xF3, 0xF2, 0xFF, 0xF6,
0xF7, 0xF6, 0xF5, 0xF3, 0xFE, 0xFF, 0x05, 0xF5, 0xFA, 0xEC, 0xEC, 0xFA, 0xF5, 0xDD, 0xFF, 0x00, 0x72, 0xA0, 0xD6,
0x01, 0xD7, 0xD8, 0xFE, 0xD9, 0x0B, 0xDA, 0xCA, 0xCB, 0xCD, 0xD0, 0xD3, 0xD6, 0xB4, 0xB4, 0xB2, 0xB4, 0xB8, 0xFE,
0xBD, 0x02, 0xBA, 0xDC, 0xDA, 0xFE, 0xB8, 0x0E, 0xB4, 0xD6, 0xD1, 0xCE, 0xCB, 0xD0, 0xB3, 0xBC, 0xB0, 0xB0, 0xBF,
0xBA, 0xAF, 0xE5, 0xEB, 0xE0, 0xE7, 0x98, 0xDE, 0x08, 0xDF, 0xE0, 0xE1, 0xE2, 0xD2, 0xD2, 0xD1, 0xD2, 0xD4, 0xFE,
0xD6, 0x02, 0xD5, 0xE5, 0xE4, 0xFE, 0xD4, 0x07, 0xD2, 0xE2, 0xE0, 0xDF, 0xDE, 0xE2, 0xC6, 0xCC, 0xFE, 0xCE, 0x03,
0xCC, 0xC1, 0xFB, 0xF1, 0xE0, 0xEF, 0x94, 0xFF, 0x04, 0xF3, 0xF3, 0xF2, 0xF3, 0xF5, 0xFE, 0xF7, 0x02, 0xF6, 0xFF,
0xFF, 0xFE, 0xF5, 0x00, 0xF3, 0xFC, 0xFF, 0x06, 0xF3, 0xF8, 0xEA, 0xEA, 0xF9, 0xF6, 0xF3, 0xDE, 0xFF, 0x00, 0x7B,
0xB6, 0xD6, 0x01, 0xD7, 0xD8, 0xED, 0xD9, 0x10, 0xDA, 0xCA, 0xCB, 0xCD, 0xCF, 0xD2, 0xD3, 0xD4, 0xD6, 0xB4, 0xB6,
0xB8, 0xBA, 0xB8, 0xD8, 0xD8, 0xB8, 0xFE, 0xBD, 0x01, 0xBA, 0xB6, 0xFE, 0xB4, 0x10, 0xD5, 0xD0, 0xCD, 0xCA, 0xDA,
0xD9, 0xDD, 0xD4, 0xB9, 0xBF, 0xBF, 0xBE, 0xBD, 0xB6, 0xCC, 0xF1, 0xE8, 0xE1, 0xE7, 0x9D, 0xDE, 0x01, 0xDF, 0xE0,
0xFE, 0xE1, 0x08, 0xE2, 0xD2, 0xD3, 0xD4, 0xD5, 0xD4, 0xE3, 0xE3, 0xD4, 0xFE, 0xD6, 0x01, 0xD5, 0xD3, 0xFE, 0xD2,
0x02, 0xE2, 0xE0, 0xDF, 0xFE, 0xDE, 0x02, 0xE0, 0xE6, 0xCA, 0xFD, 0xCE, 0x02, 0xC7, 0xDD, 0xF5, 0xE0, 0xEF, 0x97,
0xFF, 0x07, 0xF3, 0xF4, 0xF5, 0xF6, 0xF5, 0xFF, 0xFF, 0xF5, 0xFE, 0xF7, 0x01, 0xF6, 0xF4, 0xFE, 0xF3, 0xF9, 0xFF,
0x05, 0xF6, 0xF9, 0xF9, 0xF8, 0xF7, 0xF5, 0xDE, 0xFF, 0x00, 0x88, 0xB6, 0xD6, 0x01, 0xD8, 0xC9, 0xF2, 0xCB, 0x01,
0xCD, 0xCF, 0xFE, 0xD1, 0x09, 0xD2, 0xD3, 0xD4, 0xD6, 0xB4, 0xB4, 0xB2, 0xB0, 0xB4, 0xB8, 0xFE, 0xBD, 0x15, 0xB6,
0xD6, 0xD6, 0xB8, 0xBD, 0xBA, 0xB8, 0xB6, 0xB4, 0xD5, 0xD2, 0xCF, 0xCC, 0xDA, 0xD9, 0xD8, 0xD7, 0xD6, 0xD8, 0xCE,
0xB3, 0xBA, 0xFE, 0xBD, 0x03, 0xBA, 0xAF, 0xE5, 0xEB, 0xE1, 0xE7, 0xA5, 0xDE, 0x01, 0xDF, 0xE0, 0xFB, 0xE1, 0x06,
0xE2, 0xD2, 0xD2, 0xD1, 0xD0, 0xD2, 0xD4, 0xFE, 0xD6, 0x0C, 0xD3, 0xE2, 0xE2, 0xD4, 0xD6, 0xD5, 0xD4, 0xD3, 0xD2,
0xE2, 0xE1, 0xE0, 0xDF, 0xFB, 0xDE, 0x02, 0xE2, 0xC6, 0xCC, 0xFE, 0xCE, 0x03, 0xCC, 0xC1, 0xFB, 0xF1, 0xE1, 0xEF,
0x9C, 0xFF, 0x05, 0xF3, 0xF3, 0xF2, 0xF1, 0xF3, 0xF5, 0xFE, 0xF7, 0x08, 0xF4, 0xFF, 0xFF, 0xF5, 0xF7, 0xF6, 0xF5,
0xF4, 0xF3, 0xF6, 0xFF, 0x01, 0xF3, 0xF6, 0xFE, 0xF7, 0x01, 0xF6, 0xF3, 0xDF, 0xFF, 0x00, 0x90, 0xB6, 0xD6, 0x03,
0xD9, 0xCB, 0xD0, 0xD2, 0xF4, 0xD4, 0x03, 0xD6, 0xB4, 0xB6, 0xB6, 0xFE, 0xB4, 0x07, 0xB6, 0xB8, 0xBA, 0xBA, 0xDC,
0xDA, 0xDC, 0xBA, 0xFE, 0xBD, 0x0D, 0xB8, 0xDA, 0xB4, 0xB6, 0xB6, 0xB4, 0xD5, 0xD2, 0xCF, 0xCC, 0xDA, 0xD9, 0xD8,
0xD7, 0xFD, 0xD6, 0x03, 0xD7, 0xDC, 0xD4, 0xB8, 0xFD, 0xBD, 0x03, 0xB6, 0xCC, 0xF1, 0xE8, 0xE2, 0xE7, 0xB4, 0xDE,
0x01, 0xDF, 0xE0, 0xF4, 0xE1, 0x03, 0xE2, 0xD2, 0xD3, 0xD3, 0xFE, 0xD2, 0x07, 0xD3, 0xD4, 0xD5, 0xD5, 0xE5, 0xE4,
0xE5, 0xD5, 0xFE, 0xD6, 0x09, 0xD4, 0xE4, 0xD2, 0xD3, 0xD3, 0xD2, 0xE2, 0xE1, 0xE0, 0xDF, 0xF8, 0xDE, 0x02, 0xE0,
0xE6, 0xCA, 0xFD, 0xCE, 0x02, 0xC7, 0xDD, 0xF5, 0xE1, 0xEF, 0xA4, 0xFF, 0x02, 0xF3, 0xF4, 0xF4, 0xFE, 0xF3, 0x03,
0xF4, 0xF5, 0xF6, 0xF6, 0xFE, 0xFF, 0x00, 0xF6, 0xFE, 0xF7, 0x05, 0xF5, 0xFF, 0xF3, 0xF4, 0xF4, 0xF3, 0xF2, 0xFF,
0x00, 0xF5, 0xFD, 0xF7, 0x00, 0xF5, 0xDF, 0xFF, 0x00, 0x91, 0xB6, 0xD6, 0x03, 0xD9, 0xCD, 0xD4, 0xB4, 0xF4, 0xB6,
0x06, 0xB8, 0xBA, 0xBD, 0xBD, 0xB8, 0xDC, 0xB8, 0xFE, 0xBD, 0x12, 0xB8, 0xB6, 0xB4, 0xB8, 0xBA, 0xBD, 0xBA, 0xB8,
0xB4, 0xB4, 0xB2, 0xD5, 0xD2, 0xCF, 0xCC, 0xDA, 0xD9, 0xD8, 0xD7, 0xF9, 0xD6, 0x03, 0xD8, 0xCE, 0xB3, 0xBA, 0xFE,
0xBD, 0x04, 0xBA, 0xAF, 0xE6, 0xEC, 0xE8, 0xE3, 0xE7, 0xB5, 0xDE, 0x02, 0xDF, 0xE1, 0xD2, 0xF4, 0xD3, 0x06, 0xD4,
0xD5, 0xD6, 0xD6, 0xD4, 0xE5, 0xD4, 0xFE, 0xD6, 0x0E, 0xD4, 0xD3, 0xD2, 0xD4, 0xD5, 0xD6, 0xD5, 0xD4, 0xD2, 0xD2,
0xD1, 0xE2, 0xE1, 0xE0, 0xDF, 0xF4, 0xDE, 0x02, 0xE2, 0xC6, 0xCC, 0xFE, 0xCE, 0x03, 0xCC, 0xC1, 0xFB, 0xF1, 0xE2,
0xEF, 0xB3, 0xFF, 0x00, 0xF3, 0xF4, 0xF4, 0x06, 0xF5, 0xF6, 0xF7, 0xF7, 0xF5, 0xFF, 0xF5, 0xFE, 0xF7, 0x0A, 0xF5,
0xF4, 0xF3, 0xF5, 0xF6, 0xF7, 0xF6, 0xF5, 0xF3, 0xF3, 0xF2, 0xEF, 0xFF, 0x01, 0xF3, 0xF6, 0xFE, 0xF7, 0x01, 0xF6,
0xF3, 0xE0, 0xFF, 0x00, 0x78, 0xB6, 0xD6, 0x03, 0xD9, 0xCF, 0xB4, 0xBA, 0xF0, 0xBD, 0x02, 0xB8, 0xDC, 0xB8, 0xFE,
0xBD, 0x01, 0xBA, 0xDC, 0xFD, 0xB6, 0x09, 0xB4, 0xD6, 0xD3, 0xD2, 0xCF, 0xCC, 0xDA, 0xD9, 0xD8, 0xD7, 0xF6, 0xD6,
0x0B, 0xD7, 0xDC, 0xD4, 0xB8, 0xBD, 0xBD, 0xBE, 0xBE, 0xB7, 0xCE, 0xE0, 0xEA, 0xE3, 0xE7, 0xB5, 0xDE, 0x02, 0xE0,
0xD2, 0xD5, 0xF0, 0xD6, 0x02, 0xD4, 0xE5, 0xD4, 0xFE, 0xD6, 0x01, 0xD5, 0xE5, 0xFD, 0xD3, 0x05, 0xD2, 0xE2, 0xE1,
0xE1, 0xE0, 0xDF, 0xF1, 0xDE, 0x02, 0xE0, 0xE6, 0xCA, 0xFD, 0xCE, 0x03, 0xC7, 0xDF, 0xF7, 0xF1, 0xE3, 0xEF, 0xB4,
0xFF, 0x01, 0xF3, 0xF6, 0xF0, 0xF7, 0x02, 0xF5, 0xFF, 0xF5, 0xFE, 0xF7, 0x01, 0xF6, 0xFF, 0xFD, 0xF4, 0x00, 0xF3,
0xEA, 0xFF, 0x05, 0xF5, 0xF7, 0xF7, 0xF8, 0xF8, 0xF6, 0xE0, 0xFF, 0x00, 0x8E, 0xB7, 0xD6, 0x0C, 0xD7, 0xDA, 0xD2,
0xB6, 0xBD, 0xBD, 0xBA, 0xB8, 0xB6, 0xB8, 0xBA, 0xBD, 0xBD, 0xFE, 0xBA, 0xFB, 0xBD, 0x12, 0xBA, 0xBA, 0xB8, 0xB8,
0xB6, 0xB6, 0xB4, 0xB2, 0xD4, 0xD4, 0xD3, 0xD2, 0xCF, 0xCD, 0xCA, 0xDA, 0xD9, 0xD8, 0xD7, 0xF2, 0xD6, 0x0B, 0xD8,
0xCE, 0xB3, 0xBA, 0xBD, 0xBF, 0xAE, 0xBC, 0xB3, 0xDA, 0xF0, 0xE8, 0xE4, 0xE7, 0xB5, 0xDE, 0x0A, 0xE1, 0xD3, 0xD6,
0xD6, 0xD5, 0xD4, 0xD3, 0xD4, 0xD5, 0xD6, 0xD6, 0xFE, 0xD5, 0xFB, 0xD6, 0x07, 0xD5, 0xD5, 0xD4, 0xD4, 0xD3, 0xD3,
0xD2, 0xD1, 0xFD, 0xE1, 0x01, 0xE0, 0xDF, 0xEC, 0xDE, 0x02, 0xE2, 0xC6, 0xCC, 0xFE, 0xCE, 0x03, 0xCC, 0xC5, 0xDB,
0xF5, 0xE3, 0xEF, 0xB4, 0xFF, 0x09, 0xF4, 0xF7, 0xF7, 0xF6, 0xF5, 0xF4, 0xF5, 0xF6, 0xF7, 0xF7, 0xFE, 0xF6, 0xFB,
0xF7, 0x07, 0xF6, 0xF6, 0xF5, 0xF5, 0xF4, 0xF4, 0xF3, 0xF2, 0xE5, 0xFF, 0x06, 0xF3, 0xF6, 0xF7, 0xF9, 0xE8, 0xF8,
0xF4, 0xE1, 0xFF, 0x00, 0x8E, 0xB7, 0xD6, 0x0F, 0xD8, 0xCA, 0xD1, 0xB2, 0xB8, 0xBA, 0xBA, 0xDC, 0xD8, 0xDA, 0xB8,
0xBD, 0xBD, 0xBA, 0xDF, 0xBA, 0xFE, 0xBD, 0x01, 0xBA, 0xB8, 0xFE, 0xB6, 0x0D, 0xB4, 0xD6, 0xD4, 0xD4, 0xD3, 0xD0,
0xCD, 0xCB, 0xCA, 0xDA, 0xD9, 0xD9, 0xD8, 0xD7, 0xEF, 0xD6, 0x0B, 0xD7, 0xDC, 0xD4, 0xB8, 0xBD, 0xC0, 0xAF, 0xC0,
0xB9, 0xAE, 0xE4, 0xEB, 0xE4, 0xE7, 0xB5, 0xDE, 0x0D, 0xE0, 0xD1, 0xD4, 0xD5, 0xD5, 0xE5, 0xE3, 0xE4, 0xD4, 0xD6,
0xD6, 0xD5, 0xE6, 0xD5, 0xFE, 0xD6, 0x01, 0xD5, 0xD4, 0xFE, 0xD3, 0x01, 0xD2, 0xE2, 0xFE, 0xE1, 0x01, 0xE0, 0xDF,
0xE7, 0xDE, 0x02, 0xE0, 0xE6, 0xCA, 0xFD, 0xCE, 0x03, 0xCC, 0xC1, 0xFB, 0xF1, 0xE4, 0xEF, 0xB4, 0xFF, 0x03, 0xF2,
0xF5, 0xF6, 0xF6, 0xFE, 0xFF, 0x05, 0xF5, 0xF7, 0xF7, 0xF6, 0xFF, 0xF6, 0xFE, 0xF7, 0x01, 0xF6, 0xF5, 0xFE, 0xF4,
0x00, 0xF3, 0xDF, 0xFF, 0x06, 0xF5, 0xF7, 0xFA, 0xE9, 0xFA, 0xF6, 0xF3, 0xE2, 0xFF, 0x00, 0x7A, 0xB7, 0xD6, 0x0C,
0xD8, 0xCA, 0xCF, 0xD2, 0xD6, 0xB4, 0xB4, 0xB2, 0xAE, 0xD4, 0xB2, 0xB6, 0xB6, 0xFE, 0xB4, 0xFE, 0xB6, 0x0E, 0xB4,
0xD6, 0xD4, 0xD4, 0xD3, 0xD0, 0xCD, 0xCB, 0xCB, 0xCA, 0xDA, 0xD9, 0xD9, 0xD8, 0xD7, 0xEA, 0xD6, 0x0B, 0xD8, 0xCE,
0xB3, 0xBA, 0xBF, 0xAF, 0xC1, 0xBF, 0xB7, 0xCC, 0xF1, 0xE8, 0xE5, 0xE7, 0xB5, 0xDE, 0x0A, 0xDF, 0xE0, 0xE2, 0xD2,
0xD2, 0xD1, 0xCF, 0xE1, 0xD1, 0xD3, 0xD3, 0xFE, 0xD2, 0xFE, 0xD3, 0x01, 0xD2, 0xE2, 0xFE, 0xE1, 0x01, 0xE0, 0xDF,
0xE1, 0xDE, 0x02, 0xE2, 0xC6, 0xCC, 0xFD, 0xCE, 0x02, 0xC7, 0xDD, 0xF5, 0xE4, 0xEF, 0xB2, 0xFF, 0x07, 0xF3, 0xF3,
0xF2, 0xF0, 0xFF, 0xF2, 0xF4, 0xF4, 0xFE, 0xF3, 0xFE, 0xF4, 0x00, 0xF3, 0xDA, 0xFF, 0x06, 0xF3, 0xF6, 0xF9, 0xE9,
0xFB, 0xF9, 0xF6, 0xE2, 0xFF, 0x00, 0x59, 0xB7, 0xD6, 0x07, 0xD7, 0xD9, 0xCA, 0xCB, 0xCD, 0xCF, 0xD1, 0xD1, 0xFE,
0xCF, 0xF9, 0xD1, 0x05, 0xCF, 0xCD, 0xCB, 0xCB, 0xCA, 0xDA, 0xFE, 0xD9, 0x01, 0xD8, 0xD7, 0xE6, 0xD6, 0x0C, 0xD7,
0xDB, 0xD1, 0xB5, 0xBB, 0xBF, 0xAF, 0xAE, 0xBB, 0xB1, 0xE9, 0xEE, 0xE8, 0xE6, 0xE7, 0xB3, 0xDE, 0x03, 0xDF, 0xE0,
0xE1, 0xE1, 0xFE, 0xE0, 0xF9, 0xE1, 0x01, 0xE0, 0xDF, 0xDC, 0xDE, 0x03, 0xE0, 0xE4, 0xC8, 0xCC, 0xFE, 0xCE, 0x03,
0xCC, 0xC2, 0xFC, 0xF2, 0xE5, 0xEF, 0x81, 0xFF, 0xFB, 0xFF, 0x06, 0xF4, 0xF7, 0xF9, 0xE9, 0xE8, 0xF7, 0xF4, 0xE3,
0xFF, 0x00, 0x3A, 0xB6, 0xD6, 0x01, 0xD7, 0xD8, 0xED, 0xD9, 0x01, 0xD8, 0xD7, 0xE0, 0xD6, 0x0B, 0xD7, 0xDC, 0xD4,
0xB8, 0xBE, 0xBF, 0xBF, 0xBE, 0xB8, 0xAD, 0xE3, 0xEB, 0xE6, 0xE7, 0x81, 0xDE, 0xFC, 0xDE, 0x02, 0xE0, 0xE6, 0xCA,
0xFD, 0xCE, 0x03, 0xC8, 0xCF, 0xF8, 0xF1, 0xE6, 0xEF, 0x81, 0xFF, 0xFA, 0xFF, 0x06, 0xF5, 0xF8, 0xF9, 0xF9, 0xF8,
0xF6, 0xF3, 0xE4, 0xFF, 0x00, 0x32, 0x81, 0xD6, 0xFC, 0xD6, 0x04, 0xD8, 0xCE, 0xB3, 0xBA, 0xBD, 0xFE, 0xBE, 0x03,
0xB6, 0xCC, 0xF1, 0xE8, 0xE7, 0xE7, 0x81, 0xDE, 0xFB, 0xDE, 0x02, 0xE2, 0xC6, 0xCC, 0xFE, 0xCE, 0x03, 0xCD, 0xC6,
0xDC, 0xF5, 0xE6, 0xEF, 0x81, 0xFF, 0xFA, 0xFF, 0x02, 0xF3, 0xF6, 0xF7, 0xFE, 0xF8, 0x00, 0xF5, 0xE4, 0xFF, 0x00,
0x34, 0x81, 0xD6, 0xFC, 0xD6, 0x0C, 0xD7, 0xDC, 0xD2, 0xB6, 0xBA, 0xBF, 0xAE, 0xBF, 0xBA, 0xB1, 0xE9, 0xEE, 0xE8,
0xE8, 0xE7, 0x81, 0xDE, 0xFB, 0xDE, 0x03, 0xE0, 0xE4, 0xC8, 0xCC, 0xFE, 0xCE, 0x03, 0xCC, 0xC3, 0xFD, 0xF3, 0xE7,
0xEF, 0x81, 0xFF, 0xF9, 0xFF, 0x06, 0xF4, 0xF6, 0xF9, 0xE8, 0xF9, 0xF6, 0xF4, 0xE5, 0xFF, 0x00, 0x33, 0x81, 0xD6,
0xFB, 0xD6, 0x0C, 0xD8, 0xCC, 0xD5, 0xB8, 0xBF, 0xAF, 0xC0, 0xBE, 0xB8, 0xAD, 0xE4, 0xEC, 0xE8, 0xE9, 0xE7, 0x81,
0xDE, 0xFA, 0xDE, 0x02, 0xE0, 0xE6, 0xCA, 0xFD, 0xCE, 0x03, 0xC9, 0xBF, 0xF9, 0xF1, 0xE8, 0xEF, 0x81, 0xFF, 0xF8,
0xFF, 0x06, 0xF5, 0xF9, 0xE9, 0xFA, 0xF8, 0xF6, 0xF3, 0xE6, 0xFF, 0x00, 0x33, 0x81, 0xD6, 0xFB, 0xD6, 0x0C, 0xD7,
0xD9, 0xCF, 0xB3, 0xBB, 0xC0, 0xAF, 0xBF, 0xBD, 0xB6, 0xCF, 0xE1, 0xEB, 0xE9, 0xE7, 0x81, 0xDE, 0xF9, 0xDE, 0x02,
0xE2, 0xC6, 0xCC, 0xFD, 0xCE, 0x03, 0xC7, 0xDF, 0xF7, 0xF1, 0xE9, 0xEF, 0x81, 0xFF, 0xF8, 0xFF, 0x06, 0xF3, 0xF7,
0xFA, 0xE9, 0xF9, 0xF7, 0xF5, 0xE6, 0xFF, 0x00, 0x35, 0x81, 0xD6, 0xFA, 0xD6, 0x0C, 0xD7, 0xDB, 0xD1, 0xB5, 0xBC,
0xAE, 0xBF, 0xBD, 0xBA, 0xB4, 0xCB, 0xF2, 0xE9, 0xEA, 0xE7, 0x81, 0xDE, 0xF9, 0xDE, 0x03, 0xE0, 0xE4, 0xC8, 0xCC,
0xFE, 0xCE, 0x04, 0xCC, 0xC5, 0xDD, 0xF7, 0xF1, 0xEA, 0xEF, 0x81, 0xFF, 0xF7, 0xFF, 0x06, 0xF4, 0xF8, 0xE8, 0xF9,
0xF7, 0xF6, 0xF4, 0xE7, 0xFF, 0x00, 0x33, 0x81, 0xD6, 0xF9, 0xD6, 0x0C, 0xD7, 0xDC, 0xD4, 0xB9, 0xBE, 0xBE, 0xBD,
0xBD, 0xBA, 0xB2, 0xD9, 0xEF, 0xE8, 0xEB, 0xE7, 0x81, 0xDE, 0xF8, 0xDE, 0x02, 0xE0, 0xE6, 0xCA, 0xFD, 0xCE, 0x03,
0xCC, 0xC5, 0xDB, 0xF5, 0xEA, 0xEF, 0x81, 0xFF, 0xF6, 0xFF, 0x06, 0xF6, 0xF8, 0xF8, 0xF7, 0xF7, 0xF6, 0xF4, 0xE8,
0xFF, 0x00, 0x32, 0x81, 0xD6, 0xF8, 0xD6, 0x03, 0xD8, 0xCE, 0xB3, 0xBA, 0xFD, 0xBD, 0x04, 0xB9, 0xB0, 0xE8, 0xEE,
0xE8, 0xEC, 0xE7, 0x81, 0xDE, 0xF7, 0xDE, 0x02, 0xE2, 0xC6, 0xCC, 0xFD, 0xCE, 0x03, 0xCC, 0xC3, 0xFD, 0xF3, 0xEB,
0xEF, 0x81, 0xFF, 0xF6, 0xFF, 0x01, 0xF3, 0xF6, 0xFD, 0xF7, 0x01, 0xF6, 0xF4, 0xE9, 0xFF, 0x00, 0x36, 0x81, 0xD6,
0xF8, 0xD6, 0x05, 0xD7, 0xDB, 0xD1, 0xB5, 0xBA, 0xBD, 0xFE, 0xBE, 0x04, 0xB8, 0xAD, 0xE4, 0xEC, 0xE8, 0xED, 0xE7,
0x81, 0xDE, 0xF7, 0xDE, 0x03, 0xE0, 0xE4, 0xC8, 0xCC, 0xFD, 0xCE, 0x03, 0xC9, 0xBF, 0xF9, 0xF1, 0xEC, 0xEF, 0x81,
0xFF, 0xF5, 0xFF, 0x02, 0xF4, 0xF6, 0xF7, 0xFE, 0xF8, 0x01, 0xF6, 0xF3, 0xEA, 0xFF, 0x00, 0x35, 0x81, 0xD6, 0xF7,
0xD6, 0x0D, 0xD7, 0xDB, 0xD1, 0xB5, 0xBA, 0xBF, 0xAE, 0xC0, 0xBE, 0xB7, 0xCF, 0xE2, 0xEC, 0xE8, 0xEE, 0xE7, 0x81,
0xDE, 0xF6, 0xDE, 0x03, 0xE0, 0xE4, 0xC8, 0xCC, 0xFD, 0xCE, 0x03, 0xC7, 0xDF, 0xF7, 0xF1, 0xED, 0xEF, 0x81, 0xFF,
0xF4, 0xFF, 0x06, 0xF4, 0xF6, 0xF9, 0xE8, 0xFA, 0xF8, 0xF6, 0xEA, 0xFF, 0x00, 0x36, 0x81, 0xD6, 0xF6, 0xD6, 0x0D,
0xD7, 0xDC, 0xD4, 0xB8, 0xBF, 0xAE, 0xC1, 0xAF, 0xBD, 0xB5, 0xCD, 0xE2, 0xEC, 0xE8, 0xEF, 0xE7, 0x81, 0xDE, 0xF5,
0xDE, 0x03, 0xE0, 0xE5, 0xC9, 0xCD, 0xFE, 0xCE, 0x04, 0xCC, 0xC5, 0xDD, 0xF7, 0xF1, 0xEE, 0xEF, 0x81, 0xFF, 0xF3,
0xFF, 0x06, 0xF5, 0xF9, 0xE8, 0xFB, 0xE9, 0xF9, 0xF5, 0xEB, 0xFF, 0x00, 0x36, 0x81, 0xD6, 0xF5, 0xD6, 0x0D, 0xD8,
0xCE, 0xB3, 0xBB, 0xBE, 0xC1, 0xB1, 0xB1, 0xBC, 0xB4, 0xCD, 0xE2, 0xEC, 0xE8, 0xF0, 0xE7, 0x81, 0xDE, 0xF4, 0xDE,
0x02, 0xE1, 0xD6, 0xCB, 0xFD, 0xCE, 0x04, 0xCC, 0xC5, 0xDD, 0xF7, 0xF1, 0xEF, 0xEF, 0x81, 0xFF, 0xF3, 0xFF, 0x07,
0xF3, 0xF7, 0xF8, 0xFB, 0xEB, 0xEB, 0xF8, 0xF4, 0xEC, 0xFF, 0x00, 0x38, 0x81, 0xD6, 0xF5, 0xD6, 0x0E, 0xD7, 0xDB,
0xD1, 0xB5, 0xBA, 0xBF, 0xB1, 0xB1, 0xC0, 0xBA, 0xB4, 0xCD, 0xE2, 0xEC, 0xE8, 0xF1, 0xE7, 0x81, 0xDE, 0xF4, 0xDE,
0x03, 0xDF, 0xE3, 0xC7, 0xCC, 0xFD, 0xCE, 0x04, 0xCC, 0xC5, 0xDD, 0xF7, 0xF1, 0xF0, 0xEF, 0x81, 0xFF, 0xF2, 0xFF,
0x07, 0xF4, 0xF6, 0xF9, 0xEB, 0xEB, 0xFA, 0xF6, 0xF4, 0xED, 0xFF, 0x00, 0x38, 0x81, 0xD6, 0xF4, 0xD6, 0x0E, 0xD7,
0xDB, 0xD1, 0xB5, 0xBB, 0xC0, 0xAF, 0xBF, 0xBE, 0xBB, 0xB5, 0xCD, 0xE2, 0xEC, 0xE8, 0xF2, 0xE7, 0x81, 0xDE, 0xF3,
0xDE, 0x03, 0xE0, 0xE4, 0xC8, 0xCC, 0xFD, 0xCE, 0x04, 0xCC, 0xC5, 0xDD, 0xF7, 0xF1, 0xF1, 0xEF, 0x81, 0xFF, 0xF1,
0xFF, 0x07, 0xF4, 0xF7, 0xFA, 0xE9, 0xF9, 0xF8, 0xF7, 0xF5, 0xEE, 0xFF, 0x00, 0x38, 0x81, 0xD6, 0xF3, 0xD6, 0x04,
0xD7, 0xDB, 0xD1, 0xB5, 0xBB, 0xFE, 0xBE, 0x06, 0xAD, 0xBB, 0xB4, 0xCD, 0xE2, 0xEC, 0xE8, 0xF3, 0xE7, 0x81, 0xDE,
0xF2, 0xDE, 0x03, 0xE0, 0xE4, 0xC8, 0xCC, 0xFD, 0xCE, 0x04, 0xCC, 0xC5, 0xDD, 0xF7, 0xF1, 0xF2, 0xEF, 0x81, 0xFF,
0xF0, 0xFF, 0x01, 0xF4, 0xF7, 0xFE, 0xF8, 0x02, 0xE7, 0xF7, 0xF4, 0xEF, 0xFF, 0x00, 0x35, 0x81, 0xD6, 0xF2, 0xD6,
0x05, 0xD7, 0xDC, 0xD4, 0xB8, 0xBD, 0xBD, 0xFE, 0xBE, 0x04, 0xBA, 0xB2, 0xC9, 0xDD, 0xE9, 0xF3, 0xE7, 0x81, 0xDE,
0xF1, 0xDE, 0x02, 0xE0, 0xE6, 0xCA, 0xFC, 0xCE, 0x03, 0xCC, 0xC3, 0xD9, 0xF3, 0xF2, 0xEF, 0x81, 0xFF, 0xEF, 0xFF,
0x02, 0xF5, 0xF7, 0xF7, 0xFE, 0xF8, 0x01, 0xF6, 0xF3, 0xF0, 0xFF, 0x00, 0xFF};
#endif // AARU_FSTESTER_SETTER_SRC_DARWIN_CARBON_H_

View File

@@ -0,0 +1,18 @@
//
// Created by claunia on 14/3/21.
//
#ifndef SETTER_SRC_DARWIN_DARWIN_H_
#define SETTER_SRC_DARWIN_DARWIN_H_
#include <stdint.h>
void DarwinGetOsInfo();
void DarwinPrintStatfsFlags(uint32_t flags);
void DarwinResourceFork(const char* path);
void DarwinFileAttributes(const char* path);
void DarwinExtendedAttributes(const char* path);
void DarwinVolumeAttributes(const char* path);
int DarwinSparse(const char* path);
#endif // SETTER_SRC_DARWIN_DARWIN_H_

281
setter/src/unix/darwin/os.c Normal file
View File

@@ -0,0 +1,281 @@
/****************************************************************************
Aaru Data Preservation Suite
-----------------------------------------------------------------------------
Author(s) : Natalia Portillo
--[ License ] ---------------------------------------------------------------
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 <http://www.gnu.org/licenses/>.
-----------------------------------------------------------------------------
Copyright (C) 2011-2021 Natalia Portillo
*****************************************************************************/
#include <errno.h>
#include <stdio.h>
#include <string.h>
#include <sys/stat.h>
#include <sys/utsname.h>
#include "../../log.h"
void DarwinGetOsInfo()
{
struct utsname buf;
int ret;
struct stat finder;
struct stat server;
int macosx;
int macosx_server;
int major = 0, minor = 0, release = 0;
char sysname[256];
char sysversion[256];
ret = uname(&buf);
if(ret)
{
log_write("Error %d retrieving OS information.\n", errno);
return;
}
// Darwin does not have Finder, Mac OS X does
// TODO: Mac OS X Server 1.x
memset(&finder, 0, sizeof(struct stat));
ret = stat("/System/Library/CoreServices/Finder.app", &finder);
macosx = ret == 0;
memset(&server, 0, sizeof(struct stat));
ret = stat("/System/Library/CoreServices/ServerVersion.plist", &server);
macosx_server = ret == 0;
memset(sysname, 0, 256);
memset(sysversion, 0, 256);
memcpy(sysname, buf.sysname, strlen(buf.sysname));
memcpy(sysversion, buf.release, strlen(buf.release));
if(macosx)
{
sscanf(buf.release, "%d.%d.%d", &major, &minor, &release);
memset(sysname, 0, 256);
sprintf(sysname, "%s", macosx_server ? "Mac OS X Server" : "Mac OS X");
switch(major)
{
case 0:
if(minor == 2)
{
memset(sysname, 0, 256);
memset(sysversion, 0, 256);
sprintf(sysname, "Mac OS X Server");
sprintf(sysversion, "1.0.1");
break;
}
break;
case 1:
switch(minor)
{
case 0:
memset(sysversion, 0, 256);
sprintf(sysversion, "Developer Preview 3");
break;
case 1:
memset(sysversion, 0, 256);
sprintf(sysversion, "Developer Preview 4");
break;
case 2:
if(release == 1)
{
memset(sysversion, 0, 256);
sprintf(sysversion, "Public Beta");
}
break;
case 3:
if(release == 1)
{
memset(sysversion, 0, 256);
sprintf(sysversion, "\"Cheetah\" 10.0");
}
break;
case 4:
if(release == 1)
{
memset(sysversion, 0, 256);
sprintf(sysversion, "\"Puma\" 10.1");
}
break;
}
break;
case 5:
memset(sysname, 0, 256);
sprintf(sysname, "%s", macosx_server ? "Mac OS X Server \"Puma\"" : "Mac OS X \"Puma\"");
memset(sysversion, 0, 256);
sprintf(sysversion, "10.1.%d", minor);
break;
case 6:
memset(sysname, 0, 256);
sprintf(sysname, "%s", macosx_server ? "Mac OS X Server \"Jaguar\"" : "Mac OS X \"Jaguar\"");
memset(sysversion, 0, 256);
if(minor > 0) sprintf(sysversion, "10.2.%d", minor);
else
sprintf(sysversion, "10.2");
break;
case 7:
memset(sysname, 0, 256);
sprintf(sysname, "%s", macosx_server ? "Mac OS X Server \"Panther\"" : "Mac OS X \"Panther\"");
memset(sysversion, 0, 256);
if(minor > 0) sprintf(sysversion, "10.3.%d", minor);
else
sprintf(sysversion, "10.3");
break;
case 8:
memset(sysname, 0, 256);
sprintf(sysname, "%s", macosx_server ? "Mac OS X Server \"Tiger\"" : "Mac OS X \"Tiger\"");
memset(sysversion, 0, 256);
if(minor > 0) sprintf(sysversion, "10.4.%d", minor);
else
sprintf(sysversion, "10.4");
break;
case 9:
memset(sysname, 0, 256);
sprintf(sysname, "%s", macosx_server ? "Mac OS X Server \"Leopard\"" : "Mac OS X \"Leopard\"");
memset(sysversion, 0, 256);
if(minor > 0) sprintf(sysversion, "10.5.%d", minor);
else
sprintf(sysversion, "10.5");
break;
case 10:
memset(sysname, 0, 256);
sprintf(
sysname, "%s", macosx_server ? "Mac OS X Server \"Snow Leopard\"" : "Mac OS X \"Snow Leopard\"");
memset(sysversion, 0, 256);
if(minor > 0) sprintf(sysversion, "10.6.%d", minor);
else
sprintf(sysversion, "10.6");
break;
case 11:
memset(sysname, 0, 256);
sprintf(sysname, "Mac OS X \"Lion\"");
memset(sysversion, 0, 256);
if(minor > 0) sprintf(sysversion, "10.7.%d", minor);
else
sprintf(sysversion, "10.7");
break;
case 12:
memset(sysname, 0, 256);
sprintf(sysname, "OS X \"Mountain Lion\"");
memset(sysversion, 0, 256);
if(minor > 0) sprintf(sysversion, "10.8.%d", minor);
else
sprintf(sysversion, "10.8");
break;
case 13:
memset(sysname, 0, 256);
sprintf(sysname, "OS X \"Mavericks\"");
memset(sysversion, 0, 256);
if(minor > 0) sprintf(sysversion, "10.9.%d", minor);
else
sprintf(sysversion, "10.9");
break;
case 14:
memset(sysname, 0, 256);
sprintf(sysname, "OS X \"Yosemite\"");
memset(sysversion, 0, 256);
if(minor > 0) sprintf(sysversion, "10.10.%d", minor);
else
sprintf(sysversion, "10.10");
break;
case 15:
memset(sysname, 0, 256);
sprintf(sysname, "OS X \"El Capitan\"");
memset(sysversion, 0, 256);
if(minor > 0) sprintf(sysversion, "10.11.%d", minor);
else
sprintf(sysversion, "10.11");
break;
case 16:
memset(sysname, 0, 256);
sprintf(sysname, "macOS \"Sierra\"");
memset(sysversion, 0, 256);
if(minor > 0) sprintf(sysversion, "10.12.%d", minor);
else
sprintf(sysversion, "10.12");
break;
case 17:
memset(sysname, 0, 256);
sprintf(sysname, "macOS \"High Sierra\"");
memset(sysversion, 0, 256);
if(minor > 0) sprintf(sysversion, "10.13.%d", minor);
else
sprintf(sysversion, "10.13");
break;
case 18:
memset(sysname, 0, 256);
sprintf(sysname, "macOS \"Mojave\"");
memset(sysversion, 0, 256);
if(minor > 0) sprintf(sysversion, "10.14.%d", minor);
else
sprintf(sysversion, "10.14");
break;
case 19:
memset(sysname, 0, 256);
sprintf(sysname, "macOS \"Catalina\"");
memset(sysversion, 0, 256);
if(minor > 0) sprintf(sysversion, "10.15.%d", minor);
else
sprintf(sysversion, "10.15");
break;
case 20:
memset(sysname, 0, 256);
sprintf(sysname, "macOS \"Big Sur\"");
memset(sysversion, 0, 256);
if(minor > 0) sprintf(sysversion, "11.%d", minor);
else
sprintf(sysversion, "11");
break;
}
}
log_write("OS information:\n");
log_write("\t%s %s\n", sysname, sysversion);
log_write("\tKernel version: %s\n", buf.version);
log_write("\tArchitecture: %s\n", buf.machine);
}

View File

@@ -0,0 +1,37 @@
/****************************************************************************
Aaru Data Preservation Suite
-----------------------------------------------------------------------------
Author(s) : Natalia Portillo
--[ License ] ---------------------------------------------------------------
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 <http://www.gnu.org/licenses/>.
-----------------------------------------------------------------------------
Copyright (C) 2011-2021 Natalia Portillo
*****************************************************************************/
#ifdef HAVE_CARBON
#include "carbon.h"
#endif
void DarwinResourceFork(const char* path)
{
#ifdef HAVE_CARBON
int ret;
// TODO: If -1, try BSD way (/..namedfork/rsrc defined in _PATH_RSRCFORKSPEC)
ret = CarbonResourceFork(path);
#endif
}

View File

@@ -0,0 +1,33 @@
/****************************************************************************
Aaru Data Preservation Suite
-----------------------------------------------------------------------------
Author(s) : Natalia Portillo
--[ License ] ---------------------------------------------------------------
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 <http://www.gnu.org/licenses/>.
-----------------------------------------------------------------------------
Copyright (C) 2011-2021 Natalia Portillo
*****************************************************************************/
#ifndef AARU_FSTESTER_SETTER_SRC_DARWIN_RSRCFORK_H_
#define AARU_FSTESTER_SETTER_SRC_DARWIN_RSRCFORK_H_
const char* icnsText = "This file has a custom icon in the resource fork.\n";
const char* versText = "This file has a version in the resource fork.\n";
const char* pictText = "This file has a picture, in the resource fork.\n";
const char* rsrcText = "This file has a custom icon, a version, and a picture, in the resource fork.\n";
#endif // AARU_FSTESTER_SETTER_SRC_DARWIN_RSRCFORK_H_

View File

@@ -0,0 +1,151 @@
/****************************************************************************
Aaru Data Preservation Suite
-----------------------------------------------------------------------------
Author(s) : Natalia Portillo
--[ License ] ---------------------------------------------------------------
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 <http://www.gnu.org/licenses/>.
-----------------------------------------------------------------------------
Copyright (C) 2011-2021 Natalia Portillo
*****************************************************************************/
#include <errno.h>
#include <stdio.h>
#include <string.h>
#include <sys/fcntl.h>
#include <sys/stat.h>
#include <unistd.h>
#include "../../include/consts.h"
#include "../../log.h"
int DarwinSparse(const char* path)
{
int ret;
int rc, wRc, cRc, sRc;
FILE* h;
int i;
int fd;
int done = -1;
fpunchhole_t fphole;
memset(&fphole, 0, sizeof(fpunchhole_t));
ret = chdir(path);
if(ret)
{
log_write("Error %d changing to specified path.\n", errno);
return done;
}
ret = mkdir("SPARSE", 0755);
if(ret)
{
log_write("Error %d creating working directory.\n", errno);
return done;
}
ret = chdir("SPARSE");
if(ret)
{
log_write("Error %d changing to working directory.\n", errno);
return done;
}
done = 0;
log_write("Creating sparse files.\n");
h = fopen("SMALL", "w+");
rc = 0;
wRc = 0;
cRc = 0;
sRc = 0;
if(h == NULL) { rc = errno; }
else
{
for(i = 0; i < 4096 * 3; i += CLAUNIA_SIZE)
{
ret = fwrite(clauniaBytes, CLAUNIA_SIZE, 1, h);
if(ret < 0)
{
wRc = errno;
break;
}
}
fd = fileno(h);
fphole.fp_offset = 4096;
fphole.fp_length = 8192;
ret = fcntl(fd, F_PUNCHHOLE, &fphole);
if(ret) sRc = errno;
else
done++;
ret = fclose(h);
if(ret) cRc = errno;
}
log_write("\tFile name = \"%s\", size = %d, rc = %d, wRc = %d, cRc = %d, sRc = %d\n",
"SMALL",
4096 * 4,
rc,
wRc,
cRc,
sRc);
h = fopen("BIG", "w+");
rc = 0;
wRc = 0;
cRc = 0;
sRc = 0;
if(h == NULL) { rc = errno; }
else
{
for(i = 0; i < 4096 * 30; i += CLAUNIA_SIZE)
{
ret = fwrite(clauniaBytes, CLAUNIA_SIZE, 1, h);
if(ret < 0)
{
wRc = errno;
break;
}
}
fd = fileno(h);
fphole.fp_offset = 32768;
fphole.fp_length = 81920;
ret = fcntl(fd, F_PUNCHHOLE, &fphole);
if(ret) sRc = errno;
else
done++;
ret = fclose(h);
if(ret) cRc = errno;
}
log_write("\tFile name = \"%s\", size = %d, rc = %d, wRc = %d, cRc = %d, sRc = %d\n",
"BIG",
4096 * 30,
rc,
wRc,
cRc,
sRc);
return done;
}

View File

@@ -0,0 +1,369 @@
/****************************************************************************
Aaru Data Preservation Suite
-----------------------------------------------------------------------------
Author(s) : Natalia Portillo
--[ License ] ---------------------------------------------------------------
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 <http://www.gnu.org/licenses/>.
-----------------------------------------------------------------------------
Copyright (C) 2011-2021 Natalia Portillo
*****************************************************************************/
#include <errno.h>
#include <string.h>
#include <unistd.h>
#include "volume.h"
#include "../../log.h"
void DarwinPrintStatfsFlags(uint32_t flags)
{
if(flags & MNT_RDONLY)
{
log_write("\t\tVolume is read-only.\n");
flags -= MNT_RDONLY;
}
if(flags & MNT_SYNCHRONOUS)
{
log_write("\t\tVolume is written to synchronously.\n");
flags -= MNT_SYNCHRONOUS;
}
if(flags & MNT_NOEXEC)
{
log_write("\t\tCannot exec from volume.\n");
flags -= MNT_NOEXEC;
}
if(flags & MNT_NOSUID)
{
log_write("\t\tVolume does not honor setuid bits.\n");
flags -= MNT_NOSUID;
}
if(flags & MNT_NODEV)
{
log_write("\t\tVolume doesn't interpret special files.\n");
flags -= MNT_NODEV;
}
if(flags & MNT_UNION)
{
log_write("\t\tMount point is a union.\n");
flags -= MNT_UNION;
}
if(flags & MNT_ASYNC)
{
log_write("\t\tVolume is written to asynchronously.\n");
flags -= MNT_ASYNC;
}
if(flags & MNT_CPROTECT)
{
log_write("\t\tVolume supports per-file encryption.\n");
flags -= MNT_CPROTECT;
}
if(flags & MNT_EXPORTED)
{
log_write("\t\tVolume is exported by NFS.\n");
flags -= MNT_EXPORTED;
}
if(flags & MNT_REMOVABLE)
{
log_write("\t\tVolume is removable.\n");
flags -= MNT_REMOVABLE;
}
if(flags & MNT_QUARANTINE)
{
log_write("\t\tVolume is quarantined.\n");
flags -= MNT_QUARANTINE;
}
if(flags & MNT_LOCAL)
{
log_write("\t\tVolume is local.\n");
flags -= MNT_LOCAL;
}
if(flags & MNT_QUOTA)
{
log_write("\t\tVolume supports quotas.\n");
flags -= MNT_QUOTA;
}
if(flags & MNT_ROOTFS)
{
log_write("\t\tVolume is the root of the filesystem.\n");
flags -= MNT_ROOTFS;
}
if(flags & MNT_DOVOLFS)
{
log_write("\t\tVolume supports volfs.\n");
flags -= MNT_DOVOLFS;
}
if(flags & MNT_DONTBROWSE)
{
log_write("\t\tVolume is not appropriate for user data.\n");
flags -= MNT_DONTBROWSE;
}
if(flags & MNT_IGNORE_OWNERSHIP)
{
log_write("\t\tVolume does not respect ownership.\n");
flags -= MNT_IGNORE_OWNERSHIP;
}
if(flags & MNT_AUTOMOUNTED)
{
log_write("\t\tVolume was mounted by automounter.\n");
flags -= MNT_AUTOMOUNTED;
}
if(flags & MNT_JOURNALED)
{
log_write("\t\tVolume is journaled.\n");
flags -= MNT_JOURNALED;
}
if(flags & MNT_NOUSERXATTR)
{
log_write("\t\tVolume does not allow user extended attributes.\n");
flags -= MNT_NOUSERXATTR;
}
if(flags & MNT_DEFWRITE)
{
log_write("\t\tVolume defers writes.\n");
flags -= MNT_DEFWRITE;
}
if(flags & MNT_MULTILABEL)
{
log_write("\t\tVolume supports MAC for individual labels.\n");
flags -= MNT_MULTILABEL;
}
if(flags & MNT_NOATIME)
{
log_write("\t\tVolume does not update access time.\n");
flags -= MNT_NOATIME;
}
if(flags & MNT_SNAPSHOT)
{
log_write("\t\tMountpoint is a snapshot.\n");
flags -= MNT_SNAPSHOT;
}
if(flags & MNT_STRICTATIME)
{
log_write("\t\tVolume strictly updates access time.\n");
flags -= MNT_STRICTATIME;
}
if(flags) { log_write("\t\tRemaining flags: 0x%08lX\n", flags); }
}
typedef struct attrlist attrlist_t;
void DarwinVolumeAttributes(const char* path)
{
int ret;
attrlist_t attrList;
vol_capabilities_attr_t attrBuf;
u_int32_t capabilities_valid;
memset(&attrList, 0, sizeof(attrList));
memset(&attrBuf, 0, sizeof(vol_capabilities_attr_t));
attrList.bitmapcount = ATTR_BIT_MAP_COUNT;
attrList.volattr = ATTR_VOL_CAPABILITIES;
ret = getattrlist(path, &attrList, &attrBuf, sizeof(attrBuf), 0);
if(ret)
{
log_write("Error %d retrieving volume capabilities.\n", errno);
return;
}
log_write("Darwin volume capabilities:\n");
capabilities_valid = attrBuf.valid[VOL_CAPABILITIES_FORMAT];
if(capabilities_valid & VOL_CAP_FMT_PERSISTENTOBJECTIDS)
{
log_write("\tVolume has persistent object IDs.\n");
capabilities_valid -= VOL_CAP_FMT_PERSISTENTOBJECTIDS;
}
if(capabilities_valid & VOL_CAP_FMT_SYMBOLICLINKS)
{
log_write("\tVolume supports symbolic links.\n");
capabilities_valid -= VOL_CAP_FMT_SYMBOLICLINKS;
}
if(capabilities_valid & VOL_CAP_FMT_HARDLINKS)
{
log_write("\tVolume supports hard links\n");
capabilities_valid -= VOL_CAP_FMT_HARDLINKS;
}
if(capabilities_valid & VOL_CAP_FMT_JOURNAL)
{
log_write("\tVolume support recovery journal\n");
capabilities_valid -= VOL_CAP_FMT_JOURNAL;
}
if(capabilities_valid & VOL_CAP_FMT_JOURNAL_ACTIVE)
{
log_write("\tVolume is using a recovery journal\n");
capabilities_valid -= VOL_CAP_FMT_JOURNAL_ACTIVE;
}
if(capabilities_valid & VOL_CAP_FMT_NO_ROOT_TIMES)
{
log_write("\tVolume does not store reliable times for the root directory\n");
capabilities_valid -= VOL_CAP_FMT_NO_ROOT_TIMES;
}
if(capabilities_valid & VOL_CAP_FMT_SPARSE_FILES)
{
log_write("\tVolume supports sparse files\n");
capabilities_valid -= VOL_CAP_FMT_SPARSE_FILES;
}
if(capabilities_valid & VOL_CAP_FMT_ZERO_RUNS)
{
log_write("\tVolume returns zeros for parts of a file that have never been written\n");
capabilities_valid -= VOL_CAP_FMT_ZERO_RUNS;
}
if(capabilities_valid & VOL_CAP_FMT_CASE_SENSITIVE)
{
log_write("\tVolume uses case sensitive name comparison\n");
capabilities_valid -= VOL_CAP_FMT_CASE_SENSITIVE;
}
if(capabilities_valid & VOL_CAP_FMT_CASE_PRESERVING)
{
log_write("\tVolume uses case insensitive name comparison but stores names with cases\n");
capabilities_valid -= VOL_CAP_FMT_CASE_PRESERVING;
}
if(capabilities_valid & VOL_CAP_FMT_FAST_STATFS)
{
log_write("\tVolume returns from statfs(2) fast enough to not need to cache it\n");
capabilities_valid -= VOL_CAP_FMT_FAST_STATFS;
}
if(capabilities_valid & VOL_CAP_FMT_2TB_FILESIZE)
{
log_write("\tVolume supports file sizes larger than 4Gb, up to AT LEAST 2Tb (or higher)\n");
capabilities_valid -= VOL_CAP_FMT_2TB_FILESIZE;
}
if(capabilities_valid & VOL_CAP_FMT_OPENDENYMODES)
{
log_write("\tVolume support deny modes when opening files\n");
capabilities_valid -= VOL_CAP_FMT_OPENDENYMODES;
}
if(capabilities_valid & VOL_CAP_FMT_HIDDEN_FILES)
{
log_write("\tVolume supports the hidden/invisible flag\n");
capabilities_valid -= VOL_CAP_FMT_HIDDEN_FILES;
}
if(capabilities_valid & VOL_CAP_FMT_PATH_FROM_ID)
{
log_write("\tVolume can derive a path from an object ID\n");
capabilities_valid -= VOL_CAP_FMT_PATH_FROM_ID;
}
if(capabilities_valid & VOL_CAP_FMT_NO_VOLUME_SIZES)
{
log_write("\tVolume sizes in blocks returned in statfs(2) are not valid\n");
capabilities_valid -= VOL_CAP_FMT_NO_VOLUME_SIZES;
}
if(capabilities_valid & VOL_CAP_FMT_DECMPFS_COMPRESSION)
{
log_write("\tVolume transparently decompresses files\n");
capabilities_valid -= VOL_CAP_FMT_DECMPFS_COMPRESSION;
}
if(capabilities_valid & VOL_CAP_FMT_64BIT_OBJECT_IDS)
{
log_write("\tVolume object IDs are 64-bit long\n");
capabilities_valid -= VOL_CAP_FMT_64BIT_OBJECT_IDS;
}
if(capabilities_valid & VOL_CAP_FMT_DIR_HARDLINKS)
{
log_write("\tVolume supports directory hard links\n");
capabilities_valid -= VOL_CAP_FMT_DIR_HARDLINKS;
}
if(capabilities_valid & VOL_CAP_FMT_DOCUMENT_ID)
{
log_write("\tVolume supports document IDs with revisions\n");
capabilities_valid -= VOL_CAP_FMT_DOCUMENT_ID;
}
if(capabilities_valid & VOL_CAP_FMT_WRITE_GENERATION_COUNT)
{
log_write("\tVolume supports write generation count\n");
capabilities_valid -= VOL_CAP_FMT_WRITE_GENERATION_COUNT;
}
if(capabilities_valid & VOL_CAP_FMT_NO_IMMUTABLE_FILES)
{
log_write("\tVolume does not support the immutable flag\n");
capabilities_valid -= VOL_CAP_FMT_NO_IMMUTABLE_FILES;
}
if(capabilities_valid & VOL_CAP_FMT_NO_PERMISSIONS)
{
log_write("\tVolume does not support setting file permissions\n");
capabilities_valid -= VOL_CAP_FMT_NO_PERMISSIONS;
}
if(capabilities_valid & VOL_CAP_FMT_SHARED_SPACE)
{
log_write("\tVolume support sharing space with multiple volumes\n");
capabilities_valid -= VOL_CAP_FMT_SHARED_SPACE;
}
if(capabilities_valid & VOL_CAP_FMT_VOL_GROUPS)
{
log_write("\tVolume supports mounting several volumes at once\n");
capabilities_valid -= VOL_CAP_FMT_VOL_GROUPS;
}
if(capabilities_valid & VOL_CAP_FMT_SEALED)
{
log_write("\tVolume is cryptographically sealed\n");
capabilities_valid -= VOL_CAP_FMT_SEALED;
}
}

View File

@@ -0,0 +1,238 @@
/****************************************************************************
Aaru Data Preservation Suite
-----------------------------------------------------------------------------
Author(s) : Natalia Portillo
--[ License ] ---------------------------------------------------------------
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 <http://www.gnu.org/licenses/>.
-----------------------------------------------------------------------------
Copyright (C) 2011-2021 Natalia Portillo
*****************************************************************************/
#ifndef AARU_FSTESTER_SETTER_SRC_DARWIN_VOLUME_H_
#define AARU_FSTESTER_SETTER_SRC_DARWIN_VOLUME_H_
#include <sys/mount.h>
#ifndef MNT_RDONLY
#define MNT_RDONLY 0x00000001
#endif
#ifndef MNT_SYNCHRONOUS
#define MNT_SYNCHRONOUS 0x00000002
#endif
#ifndef MNT_NOEXEC
#define MNT_NOEXEC 0x00000004
#endif
#ifndef MNT_NOSUID
#define MNT_NOSUID 0x00000008
#endif
#ifndef MNT_NODEV
#define MNT_NODEV 0x00000010
#endif
#ifndef MNT_UNION
#define MNT_UNION 0x00000020
#endif
#ifndef MNT_ASYNC
#define MNT_ASYNC 0x00000040
#endif
#ifndef MNT_CPROTECT
#define MNT_CPROTECT 0x00000080
#endif
#ifndef MNT_EXPORTED
#define MNT_EXPORTED 0x00000100
#endif
#ifndef MNT_REMOVABLE
#define MNT_REMOVABLE 0x00000200
#endif
#ifndef MNT_QUARANTINE
#define MNT_QUARANTINE 0x00000400
#endif
#ifndef MNT_LOCAL
#define MNT_LOCAL 0x00001000
#endif
#ifndef MNT_QUOTA
#define MNT_QUOTA 0x00002000
#endif
#ifndef MNT_ROOTFS
#define MNT_ROOTFS 0x00004000
#endif
#ifndef MNT_DOVOLFS
#define MNT_DOVOLFS 0x00008000
#endif
#ifndef MNT_DONTBROWSE
#define MNT_DONTBROWSE 0x00100000
#endif
#ifndef MNT_IGNORE_OWNERSHIP
#define MNT_IGNORE_OWNERSHIP 0x00200000
#endif
#ifndef MNT_AUTOMOUNTED
#define MNT_AUTOMOUNTED 0x00400000
#endif
#ifndef MNT_JOURNALED
#define MNT_JOURNALED 0x00800000
#endif
#ifndef MNT_NOUSERXATTR
#define MNT_NOUSERXATTR 0x01000000
#endif
#ifndef MNT_DEFWRITE
#define MNT_DEFWRITE 0x02000000
#endif
#ifndef MNT_MULTILABEL
#define MNT_MULTILABEL 0x04000000
#endif
#ifndef MNT_NOATIME
#define MNT_NOATIME 0x10000000
#endif
#ifndef MNT_SNAPSHOT
#define MNT_SNAPSHOT 0x40000000
#endif
#ifndef MNT_STRICTATIME
#define MNT_STRICTATIME 0x80000000
#endif
#ifndef VOL_CAPABILITIES_FORMAT
#define VOL_CAPABILITIES_FORMAT 0
#endif
#ifndef VOL_CAP_FMT_PERSISTENTOBJECTIDS
#define VOL_CAP_FMT_PERSISTENTOBJECTIDS 0x00000001
#endif
#ifndef VOL_CAP_FMT_SYMBOLICLINKS
#define VOL_CAP_FMT_SYMBOLICLINKS 0x00000002
#endif
#ifndef VOL_CAP_FMT_HARDLINKS
#define VOL_CAP_FMT_HARDLINKS 0x00000004
#endif
#ifndef VOL_CAP_FMT_JOURNAL
#define VOL_CAP_FMT_JOURNAL 0x00000008
#endif
#ifndef VOL_CAP_FMT_JOURNAL_ACTIVE
#define VOL_CAP_FMT_JOURNAL_ACTIVE 0x00000010
#endif
#ifndef VOL_CAP_FMT_NO_ROOT_TIMES
#define VOL_CAP_FMT_NO_ROOT_TIMES 0x00000020
#endif
#ifndef VOL_CAP_FMT_SPARSE_FILES
#define VOL_CAP_FMT_SPARSE_FILES 0x00000040
#endif
#ifndef VOL_CAP_FMT_ZERO_RUNS
#define VOL_CAP_FMT_ZERO_RUNS 0x00000080
#endif
#ifndef VOL_CAP_FMT_CASE_SENSITIVE
#define VOL_CAP_FMT_CASE_SENSITIVE 0x00000100
#endif
#ifndef VOL_CAP_FMT_CASE_PRESERVING
#define VOL_CAP_FMT_CASE_PRESERVING 0x00000200
#endif
#ifndef VOL_CAP_FMT_FAST_STATFS
#define VOL_CAP_FMT_FAST_STATFS 0x00000400
#endif
#ifndef VOL_CAP_FMT_2TB_FILESIZE
#define VOL_CAP_FMT_2TB_FILESIZE 0x00000800
#endif
#ifndef VOL_CAP_FMT_OPENDENYMODES
#define VOL_CAP_FMT_OPENDENYMODES 0x00001000
#endif
#ifndef VOL_CAP_FMT_HIDDEN_FILES
#define VOL_CAP_FMT_HIDDEN_FILES 0x00002000
#endif
#ifndef VOL_CAP_FMT_PATH_FROM_ID
#define VOL_CAP_FMT_PATH_FROM_ID 0x00004000
#endif
#ifndef VOL_CAP_FMT_NO_VOLUME_SIZES
#define VOL_CAP_FMT_NO_VOLUME_SIZES 0x00008000
#endif
#ifndef VOL_CAP_FMT_DECMPFS_COMPRESSION
#define VOL_CAP_FMT_DECMPFS_COMPRESSION 0x00010000
#endif
#ifndef VOL_CAP_FMT_64BIT_OBJECT_IDS
#define VOL_CAP_FMT_64BIT_OBJECT_IDS 0x00020000
#endif
#ifndef VOL_CAP_FMT_DIR_HARDLINKS
#define VOL_CAP_FMT_DIR_HARDLINKS 0x00040000
#endif
#ifndef VOL_CAP_FMT_DOCUMENT_ID
#define VOL_CAP_FMT_DOCUMENT_ID 0x00080000
#endif
#ifndef VOL_CAP_FMT_WRITE_GENERATION_COUNT
#define VOL_CAP_FMT_WRITE_GENERATION_COUNT 0x00100000
#endif
#ifndef VOL_CAP_FMT_NO_IMMUTABLE_FILES
#define VOL_CAP_FMT_NO_IMMUTABLE_FILES 0x00200000
#endif
#ifndef VOL_CAP_FMT_NO_PERMISSIONS
#define VOL_CAP_FMT_NO_PERMISSIONS 0x00400000
#endif
#ifndef VOL_CAP_FMT_SHARED_SPACE
#define VOL_CAP_FMT_SHARED_SPACE 0x00800000
#endif
#ifndef VOL_CAP_FMT_VOL_GROUPS
#define VOL_CAP_FMT_VOL_GROUPS 0x01000000
#endif
#ifndef VOL_CAP_FMT_SEALED
#define VOL_CAP_FMT_SEALED 0x02000000
#endif
#endif // AARU_FSTESTER_SETTER_SRC_DARWIN_VOLUME_H_

View File

@@ -0,0 +1,104 @@
/****************************************************************************
Aaru Data Preservation Suite
-----------------------------------------------------------------------------
Author(s) : Natalia Portillo
--[ License ] ---------------------------------------------------------------
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 <http://www.gnu.org/licenses/>.
-----------------------------------------------------------------------------
Copyright (C) 2011-2021 Natalia Portillo
*****************************************************************************/
#include <dlfcn.h>
#include <errno.h>
#include <stdio.h>
#include <sys/stat.h>
#include <unistd.h>
#include "xattr.h"
#include "../../log.h"
void DarwinExtendedAttributes(const char* path)
{
int ret;
FILE* file;
int rc;
int cRc;
_darwin_setxattr darwin_setxattr;
darwin_setxattr = (_darwin_setxattr)dlsym(RTLD_DEFAULT, "setxattr");
if(!darwin_setxattr)
{
log_write("Error loading setxattr(2) from libSystem: %s\n", dlerror());
return;
}
ret = chdir(path);
if(ret)
{
log_write("Error %d changing to specified path.\n", errno);
return;
}
ret = mkdir("XATTRS", 0755);
if(ret)
{
log_write("Error %d creating working directory.\n", errno);
return;
}
ret = chdir("XATTRS");
if(ret)
{
log_write("Error %d changing to working directory.\n", errno);
return;
}
log_write("Creating files with extended attributes.\n");
rc = 0;
cRc = 0;
file = fopen("com.ibm.os2.comment", "w+");
if(file == NULL) rc = errno;
else
{
fprintf(file, "This file has an extended attribute called \"com.ibm.os2.comment\" that is 72 bytes long.\n");
fclose(file);
ret = darwin_setxattr("com.ibm.os2.comment", "user.com.ibm.os2.comment", CommentsEA, 72, 0, 0);
if(ret) cRc = errno;
}
log_write("\tFile with an extended attribute called \"com.ibm.os2.comment\", rc = %d, cRc = %d\n", rc, cRc);
rc = 0;
cRc = 0;
file = fopen("com.ibm.os2.icon", "w+");
if(file == NULL) rc = errno;
else
{
fprintf(file, "This file has an extended attribute called \"com.ibm.os2.icon\" that is 3516 bytes long.\n");
fclose(file);
ret = darwin_setxattr("com.ibm.os2.icon", "user.com.ibm.os2.icon", IconEA, 3516, 0, 0);
if(ret) cRc = errno;
}
log_write("\tFile with an extended attribute called \"com.ibm.os2.icon\", rc = %d, cRc = %d\n", rc, cRc);
}

View File

@@ -0,0 +1,225 @@
/****************************************************************************
Aaru Data Preservation Suite
-----------------------------------------------------------------------------
Author(s) : Natalia Portillo
--[ License ] ---------------------------------------------------------------
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 <http://www.gnu.org/licenses/>.
-----------------------------------------------------------------------------
Copyright (C) 2011-2021 Natalia Portillo
*****************************************************************************/
#ifndef SETTER_SRC_DARWIN_XATTR_H_
#define SETTER_SRC_DARWIN_XATTR_H_
typedef int (
*_darwin_setxattr)(const char* path, const char* name, void* value, size_t size, u_int32_t position, int options);
static unsigned char CommentsEA[72] = {
0x45, 0x00, 0x00, 0x00, 0x00, 0x09, 0x33, 0x00, 0x2E, 0x43, 0x4F, 0x4D, 0x4D, 0x45, 0x4E, 0x54, 0x53, 0x00,
0xFD, 0xFF, 0x2E, 0x00, 0x54, 0x68, 0x69, 0x73, 0x20, 0x45, 0x41, 0x20, 0x63, 0x6F, 0x6E, 0x74, 0x61, 0x69,
0x6E, 0x73, 0x20, 0x63, 0x6F, 0x6D, 0x6D, 0x65, 0x6E, 0x74, 0x73, 0x20, 0x66, 0x6F, 0x72, 0x20, 0x57, 0x6F,
0x72, 0x6B, 0x50, 0x6C, 0x61, 0x63, 0x65, 0x20, 0x53, 0x68, 0x65, 0x6C, 0x6C, 0x2E, 0x00, 0x00, 0x00, 0x00};
static unsigned char IconEA[3516] = {
0xBC, 0x0D, 0x00, 0x00, 0x00, 0x05, 0xAE, 0x0D, 0x2E, 0x49, 0x43, 0x4F, 0x4E, 0x00, 0xF9, 0xFF, 0xAA, 0x0D, 0x42,
0x41, 0x28, 0x00, 0x00, 0x00, 0x78, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x43, 0x49, 0x1A, 0x00, 0x00, 0x00,
0x10, 0x00, 0x10, 0x00, 0xDA, 0x01, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x20, 0x00, 0x40, 0x00, 0x01, 0x00, 0x01,
0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x43, 0x49, 0x1A, 0x00, 0x00, 0x00, 0x10, 0x00, 0x10, 0x00, 0xDA, 0x02,
0x00, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x20, 0x00, 0x20, 0x00, 0x01, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x3F, 0x3F,
0x3F, 0x80, 0x80, 0x80, 0xC0, 0xC0, 0xC0, 0xFF, 0xFF, 0xFF, 0x00, 0x80, 0x80, 0x00, 0x80, 0x00, 0x80, 0x00, 0x00,
0xFF, 0xFF, 0x00, 0x80, 0x80, 0x00, 0xFF, 0x00, 0xFF, 0x80, 0x00, 0x80, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0x00,
0xFF, 0x00, 0xFF, 0x00, 0x00, 0x42, 0x41, 0x28, 0x00, 0x00, 0x00, 0xC6, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x43, 0x49, 0x1A, 0x00, 0x00, 0x00, 0x10, 0x00, 0x10, 0x00, 0xDA, 0x04, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x20,
0x00, 0x40, 0x00, 0x01, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x43, 0x49, 0x1A, 0x00, 0x00, 0x00,
0x10, 0x00, 0x10, 0x00, 0xDA, 0x05, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x20, 0x00, 0x20, 0x00, 0x01, 0x00, 0x01,
0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x42, 0x41, 0x28, 0x00, 0x00, 0x00, 0x14, 0x01, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x43, 0x49, 0x1A, 0x00, 0x00, 0x00, 0x08, 0x00, 0x08, 0x00, 0x5A, 0x06, 0x00, 0x00, 0x0C, 0x00, 0x00,
0x00, 0x10, 0x00, 0x20, 0x00, 0x01, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x43, 0x49, 0x1A, 0x00,
0x00, 0x00, 0x08, 0x00, 0x08, 0x00, 0xDA, 0x06, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x10, 0x00, 0x10, 0x00, 0x01,
0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x42, 0x41, 0x28, 0x00, 0x00, 0x00, 0x62, 0x01, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x43, 0x49, 0x1A, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x0A, 0x00, 0x1A, 0x07, 0x00, 0x00, 0x0C,
0x00, 0x00, 0x00, 0x14, 0x00, 0x28, 0x00, 0x01, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x43, 0x49,
0x1A, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x0A, 0x00, 0xBA, 0x07, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x14, 0x00, 0x14,
0x00, 0x01, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x42, 0x41, 0x28, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x04, 0x00, 0x03, 0x43, 0x49, 0x1A, 0x00, 0x00, 0x00, 0x14, 0x00, 0x14, 0x00, 0x0A, 0x08, 0x00,
0x00, 0x0C, 0x00, 0x00, 0x00, 0x28, 0x00, 0x50, 0x00, 0x01, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF,
0x43, 0x49, 0x1A, 0x00, 0x00, 0x00, 0x14, 0x00, 0x14, 0x00, 0x8A, 0x0A, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x28,
0x00, 0x28, 0x00, 0x01, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x3F, 0x3F, 0x3F, 0x80, 0x80, 0x80, 0xC0, 0xC0, 0xC0,
0xFF, 0xFF, 0xFF, 0x00, 0x80, 0x80, 0x80, 0xA0, 0x80, 0x28, 0x50, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x80, 0x00, 0xD0,
0xD8, 0xB0, 0xC0, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 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, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0x8F, 0xFE, 0x3F, 0xFE, 0x0F, 0xF8, 0x3F, 0xFE, 0x0F, 0xF8, 0x3F, 0xFE, 0x0F, 0xF8, 0x3F, 0xFE, 0x00,
0x00, 0x3F, 0xFF, 0x00, 0x00, 0x3F, 0xFF, 0x00, 0x00, 0x7F, 0xFF, 0x00, 0x00, 0x7F, 0xFF, 0x00, 0x00, 0x1F, 0xFE,
0x00, 0x00, 0x0F, 0xFC, 0x00, 0x00, 0x0F, 0xF8, 0x00, 0x00, 0x0F, 0xF8, 0x00, 0x00, 0x0F, 0xF8, 0x00, 0x00, 0x0F,
0xF8, 0x00, 0x00, 0x0F, 0xF8, 0x00, 0x00, 0x0F, 0xF8, 0x00, 0x00, 0x0F, 0xF8, 0x00, 0x00, 0x0F, 0xF8, 0x00, 0x00,
0x0F, 0xF8, 0x00, 0x00, 0x0F, 0xF8, 0x00, 0x00, 0x0F, 0xF8, 0x00, 0x00, 0x1F, 0xF8, 0x00, 0x00, 0x3F, 0xFC, 0x00,
0x00, 0x7F, 0xFF, 0xFC, 0x7F, 0xFF, 0xFF, 0xFE, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x22, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x22, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x01, 0x11, 0x22, 0x00, 0x00, 0x00, 0x00, 0x01, 0x11, 0x22, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x31,
0x22, 0x00, 0x00, 0x00, 0x00, 0x01, 0x31, 0x22, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x31, 0x22, 0x00, 0x00,
0x00, 0x00, 0x01, 0x31, 0x22, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x33, 0x12, 0x22, 0x22, 0x22, 0x22, 0x13,
0x31, 0x22, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x13, 0x12, 0x22, 0x22, 0x22, 0x22, 0x13, 0x12, 0x22, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x13, 0x11, 0x11, 0x11, 0x11, 0x11, 0x13, 0x12, 0x20, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x13, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x12, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x21, 0x31, 0x11, 0x11, 0x11, 0x11, 0x31, 0x22, 0x22, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x21, 0x31, 0x22,
0x22, 0x22, 0x21, 0x31, 0x22, 0x22, 0x22, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11,
0x11, 0x11, 0x11, 0x22, 0x00, 0x00, 0x00, 0x00, 0x01, 0x34, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x31,
0x22, 0x00, 0x00, 0x00, 0x00, 0x01, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x41, 0x22, 0x00, 0x00,
0x00, 0x00, 0x01, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x41, 0x22, 0x00, 0x00, 0x00, 0x00, 0x01,
0x44, 0x46, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x44, 0x41, 0x22, 0x00, 0x00, 0x00, 0x00, 0x01, 0x44, 0x44, 0x44,
0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x41, 0x22, 0x00, 0x00, 0x00, 0x00, 0x01, 0x44, 0x46, 0x66, 0x66, 0x66, 0x66,
0x66, 0x66, 0x44, 0x41, 0x22, 0x00, 0x00, 0x00, 0x00, 0x01, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44,
0x41, 0x22, 0x00, 0x00, 0x00, 0x00, 0x01, 0x44, 0x46, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x44, 0x41, 0x22, 0x00,
0x00, 0x00, 0x00, 0x01, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x41, 0x22, 0x00, 0x00, 0x00, 0x00,
0x01, 0x44, 0x46, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x44, 0x41, 0x22, 0x00, 0x00, 0x00, 0x00, 0x01, 0x44, 0x44,
0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x41, 0x20, 0x00, 0x00, 0x00, 0x00, 0x01, 0x34, 0x44, 0x44, 0x44, 0x44,
0x44, 0x44, 0x44, 0x44, 0x31, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11,
0x11, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x14, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x07, 0xFC, 0x1F, 0xFC, 0x07, 0xF0, 0x1F, 0xFC, 0x07, 0xF0, 0x1F, 0xFC, 0x07,
0xF0, 0x1F, 0xFC, 0x00, 0x00, 0x1F, 0xFC, 0x00, 0x00, 0x1F, 0xFE, 0x00, 0x00, 0x1F, 0xFE, 0x00, 0x00, 0x3F, 0xFE,
0x00, 0x00, 0x1F, 0xFE, 0x00, 0x00, 0x0F, 0xFC, 0x00, 0x00, 0x07, 0xF8, 0x00, 0x00, 0x07, 0xF0, 0x00, 0x00, 0x07,
0xF0, 0x00, 0x00, 0x07, 0xF0, 0x00, 0x00, 0x07, 0xF0, 0x00, 0x00, 0x07, 0xF0, 0x00, 0x00, 0x07, 0xF0, 0x00, 0x00,
0x07, 0xF0, 0x00, 0x00, 0x07, 0xF0, 0x00, 0x00, 0x07, 0xF0, 0x00, 0x00, 0x07, 0xF0, 0x00, 0x00, 0x07, 0xF0, 0x00,
0x00, 0x0F, 0xF0, 0x00, 0x00, 0x1F, 0xF8, 0x00, 0x00, 0x3F, 0xFC, 0x00, 0x00, 0x7F, 0xFF, 0xFC, 0x7F, 0xFF, 0xFF,
0xFE, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00,
0x00, 0xF8, 0x03, 0xE0, 0x03, 0x88, 0x0E, 0x20, 0x02, 0x08, 0x08, 0x20, 0x02, 0x88, 0x0A, 0x20, 0x02, 0x8F, 0xFA,
0x20, 0x02, 0xC0, 0x06, 0x20, 0x01, 0x40, 0x04, 0x20, 0x01, 0x40, 0x04, 0x40, 0x01, 0x7F, 0xFC, 0x60, 0x01, 0x20,
0x08, 0x10, 0x02, 0x20, 0x08, 0x08, 0x04, 0x00, 0x00, 0x08, 0x0B, 0xFF, 0xFF, 0x88, 0x0B, 0xFF, 0xFF, 0x88, 0x0B,
0xFF, 0xFF, 0x88, 0x0B, 0x00, 0x03, 0x88, 0x0B, 0xFF, 0xFF, 0x88, 0x0B, 0x00, 0x03, 0x88, 0x0B, 0xFF, 0xFF, 0x88,
0x0B, 0x00, 0x03, 0x88, 0x0B, 0xFF, 0xFF, 0x88, 0x0B, 0x00, 0x03, 0x88, 0x0B, 0xFF, 0xFF, 0x90, 0x0B, 0xFF, 0xFF,
0xA0, 0x04, 0x00, 0x00, 0x40, 0x03, 0xFD, 0x7F, 0x80, 0x00, 0x02, 0x80, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0xED, 0x41, 0x00, 0x00, 0x3B, 0x00, 0x00, 0x00, 0x27, 0x09, 0x00, 0x00, 0xF5, 0x08, 0x00, 0x00, 0x1F, 0x09,
0x00, 0x00, 0x4A, 0x09, 0x00, 0x00, 0x9F, 0x0A, 0x00, 0x00, 0xE3, 0x0A, 0x00, 0x00, 0xE4, 0x09, 0x00, 0x00, 0x02,
0x0A, 0x00, 0x00, 0x29, 0x0A, 0x00, 0x00, 0x55, 0x0A, 0x00, 0x00, 0x72, 0x0A, 0x00, 0x00, 0x88, 0x0A, 0xFF, 0xFF,
0x00, 0x00, 0xE7, 0xCF, 0xE5, 0x1C, 0xE7, 0xCF, 0x65, 0x00, 0xF0, 0x1F, 0xDD, 0x04, 0xF3, 0x9F, 0xF2, 0x03, 0xE0,
0x0F, 0xC7, 0x04, 0xDF, 0xF7, 0x0B, 0x05, 0xDF, 0xF7, 0xF8, 0x04, 0xDF, 0xF7, 0x32, 0x04, 0xDF, 0xF7, 0xA8, 0x04,
0xDF, 0xF7, 0x9E, 0x04, 0xDF, 0xF7, 0xBA, 0x04, 0xE0, 0x0F, 0x7A, 0x04, 0xFD, 0x7F, 0x85, 0x04, 0xFE, 0xFF, 0xFF,
0x04, 0xFF, 0xFF, 0xDF, 0x04, 0xFF, 0xFF, 0x00, 0x00, 0xE7, 0xCF, 0x00, 0x1F, 0xE7, 0xCF, 0x00, 0x1F, 0xF0, 0x1F,
0x00, 0x1F, 0xF3, 0x9F, 0x00, 0x1F, 0xE0, 0x0F, 0x00, 0x1F, 0xDF, 0xF7, 0x00, 0x1F, 0xDF, 0xF7, 0x00, 0x1F, 0xDF,
0xF7, 0x00, 0x1F, 0xDF, 0xF7, 0x00, 0x1F, 0xDF, 0xF7, 0x00, 0x1F, 0xDF, 0xF7, 0x00, 0x7F, 0xE0, 0x0F, 0x00, 0x7F,
0xFD, 0x7F, 0xFF, 0xFF, 0xFE, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x08, 0x70, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x33, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x08, 0x88, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x7F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0F, 0xFF, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x33, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x08, 0x88, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x7F, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xF0,
0x00, 0xE3, 0xF1, 0xF0, 0x00, 0xEB, 0xF5, 0xF1, 0x11, 0xE9, 0xE5, 0xF0, 0x00, 0xF4, 0x0B, 0xF0, 0x00, 0xF7, 0xFB,
0xF0, 0x00, 0xFA, 0x17, 0xF1, 0x11, 0xFA, 0xD7, 0xF0, 0x00, 0xE0, 0x01, 0xF0, 0x0F, 0xDF, 0xFE, 0xF0, 0x00, 0xDF,
0xFE, 0xFF, 0xFF, 0xDF, 0xFE, 0xF0, 0x00, 0xDF, 0xFE, 0xFF, 0xFF, 0xDF, 0xFE, 0xFF, 0xFF, 0xDF, 0xFE, 0xF0, 0x00,
0xDF, 0xFE, 0xFF, 0xFF, 0xE0, 0x01, 0xFF, 0xFF, 0xFF, 0x5F, 0xFF, 0xFF, 0xFF, 0xBF, 0xF6, 0x66, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xF0, 0x00, 0xE3, 0xF1, 0xF0, 0x01, 0xEB, 0xF5, 0xF1, 0x11, 0xE9, 0xE5, 0xF0, 0x00, 0xF4, 0x0B,
0xF0, 0x01, 0xF7, 0xFB, 0xF1, 0x11, 0xFA, 0x17, 0xF0, 0x00, 0xFA, 0xD7, 0xF0, 0x01, 0xE0, 0x01, 0xF1, 0x11, 0xDF,
0xFE, 0xF0, 0x00, 0xDF, 0xFE, 0xF0, 0x01, 0xDF, 0xFE, 0xF1, 0x11, 0xDF, 0xFE, 0xF0, 0x00, 0xDF, 0xFE, 0xF0, 0x00,
0xDF, 0xFE, 0xF0, 0x00, 0xDF, 0xFE, 0xF0, 0x00, 0xE0, 0x01, 0xF0, 0x00, 0xFF, 0x5F, 0xF1, 0x00, 0xFF, 0xBF, 0xF0,
0x00, 0xFF, 0xFF, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x88,
0x88, 0x88, 0x00, 0x00, 0x00, 0x00, 0x00, 0x88, 0x88, 0x7F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x33, 0x7F, 0xFF, 0x00,
0x00, 0x00, 0x00, 0x00, 0x88, 0x80, 0x88, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF7, 0x33, 0x33, 0x00, 0x00, 0x00, 0x00,
0x00, 0x88, 0x00, 0x88, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x7F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x33, 0x7F,
0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0x80, 0x88, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF7, 0x33, 0x33, 0x00, 0x00,
0x00, 0x00, 0x00, 0x80, 0x88, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x88, 0x88, 0x7F, 0x00, 0x00, 0x00, 0x00, 0x00,
0x33, 0x7F, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x87, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF7, 0x33, 0x33,
0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x88, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x88, 0x7F, 0x00, 0x00, 0x00,
0x00, 0x00, 0x33, 0x7F, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x88, 0x88, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF7,
0x33, 0x33, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x77, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x87, 0x08, 0x7F, 0x00,
0x00, 0x00, 0x00, 0x00, 0x33, 0x7F, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x88, 0x70, 0x00, 0x00, 0x00, 0x00,
0x00, 0xF7, 0x33, 0x33, 0x00, 0x00, 0x00, 0x00, 0x00, 0x88, 0x88, 0x88, 0x00, 0x00, 0x00, 0x00, 0x00, 0x88, 0x88,
0x7F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x33, 0x7F, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x88, 0x88, 0x80, 0x00, 0x00,
0x00, 0x00, 0x00, 0xF7, 0x33, 0x33, 0x00, 0x00, 0x00, 0x00, 0x00, 0x88, 0x88, 0x88, 0x00, 0x00, 0x00, 0x00, 0x00,
0x88, 0x88, 0x7F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x33, 0x7F, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x11, 0x11,
0x00, 0x00, 0x00, 0x00, 0x00, 0xF7, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x11, 0x11, 0x00, 0x00, 0x00,
0x00, 0x00, 0x04, 0x00, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7F, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xF0, 0x66, 0x66, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x7F, 0xFF, 0xFF, 0xC3, 0xFF, 0xE1,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x03, 0xFF, 0x81, 0xFF, 0x07, 0x00, 0x00, 0xFF, 0x03, 0xFF, 0x81, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0x03, 0xFF, 0x81, 0xFF, 0xFF, 0x06, 0x60, 0xFF, 0x01, 0xFF, 0x01, 0xFF, 0x00, 0x37, 0x77, 0xFF, 0x00,
0x00, 0x01, 0xFF, 0x77, 0x77, 0x77, 0xFF, 0x80, 0x00, 0x03, 0xFF, 0xEE, 0x00, 0x00, 0xFF, 0x80, 0x00, 0x03, 0xFF,
0x33, 0x33, 0x33, 0xFF, 0x80, 0x00, 0x03, 0xFF, 0x00, 0x00, 0xEE, 0xFF, 0xC0, 0x00, 0x03, 0xFF, 0x00, 0x33, 0x33,
0xFF, 0xC0, 0x00, 0x01, 0xFF, 0x33, 0x33, 0x33, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x0E, 0xEE, 0x00, 0xFE, 0x00, 0x00,
0x00, 0x7F, 0x33, 0x33, 0x33, 0xFC, 0x00, 0x00, 0x00, 0x7F, 0x00, 0x00, 0x00, 0xFC, 0x00, 0x00, 0x00, 0x7F, 0x00,
0x33, 0x33, 0xFC, 0x00, 0x00, 0x00, 0x7F, 0x33, 0x33, 0x33, 0xFC, 0x00, 0x00, 0x00, 0x7F, 0xEE, 0x0E, 0xEE, 0xFC,
0x00, 0x00, 0x00, 0x7F, 0x33, 0x33, 0x33, 0xFC, 0x00, 0x00, 0x00, 0x7F, 0x00, 0x00, 0x00, 0xFC, 0x00, 0x00, 0x00,
0x7F, 0x00, 0x33, 0x33, 0xFC, 0x00, 0x00, 0x00, 0x7F, 0x33, 0x33, 0x33, 0xFC, 0x00, 0x00, 0x00, 0x7F, 0x0E, 0xEE,
0x0E, 0xFC, 0x00, 0x00, 0x00, 0x7F, 0x33, 0x33, 0x33, 0xFC, 0x00, 0x00, 0x00, 0x7F, 0x00, 0x00, 0x00, 0xFC, 0x00,
0x00, 0x00, 0x7F, 0x40, 0x33, 0x33, 0xFC, 0x00, 0x00, 0x00, 0x7F, 0x33, 0x33, 0x33, 0xFC, 0x00, 0x00, 0x00, 0xFF,
0x00, 0x0E, 0x00, 0xFC, 0x00, 0x00, 0x01, 0xFF, 0x33, 0x33, 0x33, 0xFE, 0x00, 0x00, 0x03, 0xFF, 0x00, 0x00, 0x00,
0xFF, 0xFF, 0x87, 0xFF, 0xFF, 0xF0, 0x33, 0x33, 0xFF, 0xFF, 0x87, 0xFF, 0xFF, 0x33, 0x33, 0x33, 0xFF, 0xFF, 0xCF,
0xFF, 0xFF, 0x00, 0x00, 0x04, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x33, 0x33, 0x33, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00,
0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x5D, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x22, 0x22, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x22, 0x20,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x11, 0x22, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x11, 0x12,
0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x13, 0x31, 0x22, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x33,
0x12, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x13, 0x31, 0x22, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01,
0x33, 0x12, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x13, 0x33, 0x12, 0x20, 0x00, 0x00, 0x00, 0x00,
0x13, 0x33, 0x12, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x33, 0x12, 0x22, 0x22, 0x22, 0x22,
0x22, 0x13, 0x33, 0x12, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x33, 0x12, 0x22, 0x22, 0x22,
0x22, 0x22, 0x13, 0x31, 0x22, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x33, 0x31, 0x11, 0x11,
0x11, 0x11, 0x11, 0x33, 0x31, 0x22, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x33, 0x33, 0x33,
0x33, 0x33, 0x33, 0x33, 0x33, 0x31, 0x22, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x13, 0x33,
0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x12, 0x22, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x13,
0x31, 0x11, 0x11, 0x11, 0x11, 0x11, 0x33, 0x12, 0x22, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x22,
0x13, 0x33, 0x12, 0x22, 0x22, 0x22, 0x13, 0x33, 0x12, 0x22, 0x22, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01,
0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x12, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x13, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x43, 0x12, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x14, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x12, 0x20, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x14, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x12, 0x20, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x14, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x12, 0x20, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x14, 0x44, 0x43, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x44, 0x44, 0x12, 0x20, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x14, 0x44, 0x49, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x44, 0x44, 0x12, 0x20,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x14, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x12,
0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x14, 0x44, 0x43, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x44, 0x44,
0x12, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x14, 0x44, 0x49, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x44,
0x44, 0x12, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x14, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44,
0x44, 0x44, 0x12, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x14, 0x44, 0x43, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33,
0x33, 0x44, 0x44, 0x12, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x14, 0x44, 0x49, 0x99, 0x99, 0x99, 0x99, 0x99,
0x99, 0x99, 0x44, 0x44, 0x12, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x14, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44,
0x44, 0x44, 0x44, 0x44, 0x44, 0x12, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x14, 0x44, 0x44, 0x44, 0x44, 0x44,
0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x12, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x13, 0x44, 0x44, 0x44, 0x44,
0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x43, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x11, 0x11, 0x11,
0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x01, 0x33, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x01, 0x33, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00};
#endif // SETTER_SRC_DARWIN_XATTR_H_

View File

@@ -0,0 +1,40 @@
# /****************************************************************************
# Aaru Data Preservation Suite
# -----------------------------------------------------------------------------
#
# Author(s) : Natalia Portillo
#
# --[ License ] ---------------------------------------------------------------
# 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 <http://www.gnu.org/licenses/>.
#
# -----------------------------------------------------------------------------
# Copyright (C) 2011-2021 Natalia Portillo
# *****************************************************************************/
if(NOT ${CMAKE_SYSTEM_NAME} MATCHES "Linux")
return()
endif()
project(
fssetter-linux
DESCRIPTION "Filesystem test creator for Linux"
LANGUAGES C)
set(PLATFORM_SOURCES attr.c sparse.c xattr.c xattr.h volume.c volume.h)
set(EXECUTABLE_NAME "fssetter-${CMAKE_SYSTEM_NAME}-${CMAKE_SYSTEM_PROCESSOR}")
add_executable(${EXECUTABLE_NAME} ${PLATFORM_SOURCES})
target_link_libraries(${EXECUTABLE_NAME} core unix dl)

View File

@@ -0,0 +1,111 @@
/****************************************************************************
Aaru Data Preservation Suite
-----------------------------------------------------------------------------
Author(s) : Natalia Portillo
--[ License ] ---------------------------------------------------------------
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 <http://www.gnu.org/licenses/>.
-----------------------------------------------------------------------------
Copyright (C) 2011-2021 Natalia Portillo
*****************************************************************************/
#include <errno.h>
#include <linux/fs.h>
#include <stdio.h>
#include <string.h>
#include <sys/ioctl.h>
#include <sys/stat.h>
#include <unistd.h>
#include "attr.h"
#include "../../log.h"
#include "linux.h"
void LinuxFileAttributes(const char* path)
{
int ret;
int fd;
FILE* h;
int rc;
int wRc;
int sRc;
int cRc;
int attr;
int i;
ret = chdir(path);
if(ret)
{
log_write("Error %d changing to specified path.\n", errno);
return;
}
ret = mkdir("ATTRS", 0755);
if(ret)
{
log_write("Error %d creating working directory.\n", errno);
return;
}
ret = chdir("ATTRS");
if(ret)
{
log_write("Error %d changing to working directory.\n", errno);
return;
}
log_write("Creating files with different flags (attributes).\n");
for(i = 0; i < KNOWN_LINUX_ATTRS; i++)
{
h = fopen(linux_attrs[i].filename, "w+");
rc = 0;
wRc = 0;
sRc = 0;
cRc = 0;
attr = 0;
if(h == NULL) { rc = errno; }
else
{
attr |= linux_attrs[i].attr;
fd = fileno(h);
ret = ioctl(fd, FS_IOC_SETFLAGS, &attr);
if(ret)
{
sRc = errno;
unlink(linux_attrs[i].filename);
}
else
{
ret = fprintf(h, "%s", linux_attrs[i].contents);
if(ret < 1)
{
wRc = errno;
unlink(linux_attrs[i].filename);
}
}
ret = fclose(h);
if(ret) { cRc = errno; }
}
log_write("\t%s, rc = %d, wRc = %d, sRc = %d, cRc = %d\n", linux_attrs[i].description, rc, wRc, sRc, cRc);
}
}

View File

@@ -0,0 +1,100 @@
/****************************************************************************
Aaru Data Preservation Suite
-----------------------------------------------------------------------------
Author(s) : Natalia Portillo
--[ License ] ---------------------------------------------------------------
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 <http://www.gnu.org/licenses/>.
-----------------------------------------------------------------------------
Copyright (C) 2011-2021 Natalia Portillo
*****************************************************************************/
#ifndef AARU_FSTESTER_SETTER_SRC_LINUX_ATTR_H_
#define AARU_FSTESTER_SETTER_SRC_LINUX_ATTR_H_
typedef struct
{
char filename[16];
char contents[256];
char description[256];
int attr;
} linux_attr_tests_t;
#define KNOWN_LINUX_ATTRS 12
#ifndef FS_SECRM_FL
#define FS_SECRM_FL 0x00000001 /* Secure deletion */
#endif
#ifndef FS_UNRM_FL
#define FS_UNRM_FL 0x00000002 /* Undelete */
#endif
#ifndef FS_COMPR_FL
#define FS_COMPR_FL 0x00000004 /* Compress file */
#endif
#ifndef FS_SYNC_FL
#define FS_SYNC_FL 0x00000008 /* Synchronous updates */
#endif
#ifndef FS_IMMUTABLE_FL
#define FS_IMMUTABLE_FL 0x00000010 /* Immutable file */
#endif
#ifndef FS_APPEND_FL
#define FS_APPEND_FL 0x00000020 /* writes to file may only append */
#endif
#ifndef FS_NODUMP_FL
#define FS_NODUMP_FL 0x00000040 /* do not dump file */
#endif
#ifndef FS_NOATIME_FL
#define FS_NOATIME_FL 0x00000080 /* do not update atime */
#endif
#ifndef FS_JOURNAL_DATA_FL
#define FS_JOURNAL_DATA_FL 0x00004000 /* Reserved for ext3 */
#endif
#ifndef FS_NOTAIL_FL
#define FS_NOTAIL_FL 0x00008000 /* file tail should not be merged */
#endif
#ifndef FS_NOCOW_FL
#define FS_NOCOW_FL 0x00800000 /* Do not cow file */
#endif
#ifndef FS_PROJINHERIT_FL
#define FS_PROJINHERIT_FL 0x20000000 /* Create with parents projid */
#endif
static const linux_attr_tests_t linux_attrs[KNOWN_LINUX_ATTRS] = {
{"APPEND", "This file is now append only", "File with append only flag", FS_APPEND_FL},
{"COMPRESS", "This file is now compressed", "File with compressed flag", FS_COMPR_FL},
{"IMMUTABLE", "This file is now immutable", "File with immutable flag", FS_IMMUTABLE_FL},
{"JOURNALED", "This file is now journaled", "File with journaled flag", FS_JOURNAL_DATA_FL},
{"NOATIME", "This file is now noatime", "File with noatime flag", FS_NOATIME_FL},
{"NOCOW", "This file is now not copy on write", "File with no copy on write flag", FS_NOCOW_FL},
{"NODUMP", "This file is now not dumpable", "File with no dump flag", FS_NODUMP_FL},
{"NOTAIL", "This file is now not tailed", "File with no tail flag", FS_NOTAIL_FL},
{"PROJECTINHERIT", "This file is now inheriting project id", "File with project inherit flag", FS_PROJINHERIT_FL},
{"SECUREDELETION", "This file is now secure deletable", "File with secure delete flag", FS_SECRM_FL},
{"SYNC", "This file is now synchronous", "File with synchronous flag", FS_SYNC_FL},
{"UNREMOVABLE", "This file is now marked for undeletion", "File with undeletion flag", FS_UNRM_FL},
};
#endif // AARU_FSTESTER_SETTER_SRC_LINUX_ATTR_H_

View File

@@ -0,0 +1,35 @@
/****************************************************************************
Aaru Data Preservation Suite
-----------------------------------------------------------------------------
Author(s) : Natalia Portillo
--[ License ] ---------------------------------------------------------------
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 <http://www.gnu.org/licenses/>.
-----------------------------------------------------------------------------
Copyright (C) 2011-2021 Natalia Portillo
*****************************************************************************/
#ifndef AARU_FSTESTER_SETTER_LINUX_H
#define AARU_FSTESTER_SETTER_LINUX_H
#include <sys/types.h>
void LinuxExtendedAttributes(const char* path);
void LinuxSparse(const char* path);
void LinuxFileAttributes(const char* path);
void LinuxPrintStatfsFlags(__fsword_t flags);
#endif

View File

@@ -0,0 +1,139 @@
/****************************************************************************
Aaru Data Preservation Suite
-----------------------------------------------------------------------------
Author(s) : Natalia Portillo
--[ License ] ---------------------------------------------------------------
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 <http://www.gnu.org/licenses/>.
-----------------------------------------------------------------------------
Copyright (C) 2011-2021 Natalia Portillo
*****************************************************************************/
#include "../../include/consts.h"
#define _GNU_SOURCE
#include <errno.h>
#include <fcntl.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/stat.h>
#include <unistd.h>
#include "../../log.h"
#include "linux.h"
void LinuxSparse(const char* path)
{
int ret;
int rc, wRc, cRc, zRc;
FILE* h;
int i;
int fd;
ret = chdir(path);
if(ret)
{
log_write("Error %d changing to specified path.\n", errno);
return;
}
ret = mkdir("SPARSE", 0755);
if(ret)
{
log_write("Error %d creating working directory.\n", errno);
return;
}
ret = chdir("SPARSE");
if(ret)
{
log_write("Error %d changing to working directory.\n", errno);
return;
}
log_write("Creating sparse files.\n");
h = fopen("SMALL", "w+");
rc = 0;
wRc = 0;
cRc = 0;
zRc = 0;
if(h == NULL) { rc = errno; }
else
{
for(i = 0; i < 4096 * 3; i += CLAUNIA_SIZE)
{
ret = fwrite(clauniaBytes, CLAUNIA_SIZE, 1, h);
if(ret < 0)
{
wRc = errno;
break;
}
}
fd = fileno(h);
ret = fallocate(fd, FALLOC_FL_PUNCH_HOLE | FALLOC_FL_KEEP_SIZE, 4096, 8192);
if(ret) { zRc = errno; }
ret = fclose(h);
if(ret) { cRc = errno; }
}
log_write("\tFile name = \"%s\", size = %d, rc = %d, wRc = %d, cRc = %d, sRc = %d\n",
"SMALL",
4096 * 4,
rc,
wRc,
cRc,
zRc);
h = fopen("BIG", "w+");
rc = 0;
wRc = 0;
cRc = 0;
zRc = 0;
if(h == NULL) { rc = errno; }
else
{
for(i = 0; i < 4096 * 30; i += CLAUNIA_SIZE)
{
ret = fwrite(clauniaBytes, CLAUNIA_SIZE, 1, h);
if(ret < 0)
{
wRc = errno;
break;
}
}
fd = fileno(h);
ret = fallocate(fd, FALLOC_FL_PUNCH_HOLE | FALLOC_FL_KEEP_SIZE, 32768, 81920);
if(ret) { zRc = errno; }
ret = fclose(h);
if(ret) { cRc = errno; }
}
log_write("\tFile name = \"%s\", size = %d, rc = %d, wRc = %d, cRc = %d, sRc = %d\n",
"BIG",
4096 * 30,
rc,
wRc,
cRc,
zRc);
}

View File

@@ -0,0 +1,102 @@
/****************************************************************************
Aaru Data Preservation Suite
-----------------------------------------------------------------------------
Author(s) : Natalia Portillo
--[ License ] ---------------------------------------------------------------
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 <http://www.gnu.org/licenses/>.
-----------------------------------------------------------------------------
Copyright (C) 2011-2021 Natalia Portillo
*****************************************************************************/
#include <sys/statfs.h>
#include "volume.h"
#include "../../log.h"
void LinuxPrintStatfsFlags(__fsword_t flags)
{
log_write("\tFlags:\n");
if(flags & ST_RDONLY)
{
log_write("\t\tVolume is read-only.\n");
flags -= ST_RDONLY;
}
if(flags & ST_NOSUID)
{
log_write("\t\tVolume ignores suid and sgid bits.\n");
flags -= ST_NOSUID;
}
if(flags & ST_NODEV)
{
log_write("\t\tVolume disallows access to device special files.\n");
flags -= ST_NODEV;
}
if(flags & ST_NOEXEC)
{
log_write("\t\tVolume disallows program execution.\n");
flags -= ST_NOEXEC;
}
if(flags & ST_SYNCHRONOUS)
{
log_write("\t\tVolume writes are synced at once.\n");
flags -= ST_SYNCHRONOUS;
}
if(flags & ST_MANDLOCK)
{
log_write("\t\tVolume allows mandatory locks.\n");
flags -= ST_MANDLOCK;
}
if(flags & ST_WRITE)
{
log_write("\t\tVolume writes on file/directory/symlink.\n");
flags -= ST_WRITE;
}
if(flags & ST_APPEND)
{
log_write("\t\tVolume appends.\n");
flags -= ST_APPEND;
}
if(flags & ST_IMMUTABLE)
{
log_write("\t\tVolume is immutable.\n");
flags -= ST_IMMUTABLE;
}
if(flags & ST_NOATIME)
{
log_write("\t\tVolume does not update access times.\n");
flags -= ST_NOATIME;
}
if(flags & ST_NODIRATIME)
{
log_write("\t\tVolume does not update directory access times.\n");
flags -= ST_NODIRATIME;
}
if(flags) { log_write("\t\tRemaining flags: 0x%08lX\n", flags); }
}

View File

@@ -0,0 +1,72 @@
/****************************************************************************
Aaru Data Preservation Suite
-----------------------------------------------------------------------------
Author(s) : Natalia Portillo
--[ License ] ---------------------------------------------------------------
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 <http://www.gnu.org/licenses/>.
-----------------------------------------------------------------------------
Copyright (C) 2011-2021 Natalia Portillo
*****************************************************************************/
#ifndef AARU_FSTESTER_SETTER_SRC_LINUX_VOLUME_H_
#define AARU_FSTESTER_SETTER_SRC_LINUX_VOLUME_H_
#ifndef ST_RDONLY
#define ST_RDONLY 1
#endif
#ifndef ST_NOSUID
#define ST_NOSUID 2
#endif
#ifndef ST_NODEV
#define ST_NODEV 4
#endif
#ifndef ST_NOEXEC
#define ST_NOEXEC 8
#endif
#ifndef ST_SYNCHRONOUS
#define ST_SYNCHRONOUS 16
#endif
#ifndef ST_MANDLOCK
#define ST_MANDLOCK 64
#endif
#ifndef ST_WRITE
#define ST_WRITE 128
#endif
#ifndef ST_APPEND
#define ST_APPEND 256
#endif
#ifndef ST_IMMUTABLE
#define ST_IMMUTABLE 512
#endif
#ifndef ST_NOATIME
#define ST_NOATIME 1024
#endif
#ifndef ST_NODIRATIME
#define ST_NODIRATIME 2048
#endif
#endif // AARU_FSTESTER_SETTER_SRC_LINUX_VOLUME_H_

View File

@@ -0,0 +1,109 @@
/****************************************************************************
Aaru Data Preservation Suite
-----------------------------------------------------------------------------
Author(s) : Natalia Portillo
--[ License ] ---------------------------------------------------------------
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 <http://www.gnu.org/licenses/>.
-----------------------------------------------------------------------------
Copyright (C) 2011-2021 Natalia Portillo
*****************************************************************************/
#define _GNU_SOURCE
#include <dlfcn.h>
#include <errno.h>
#include <features.h>
#include <stdio.h>
#include <string.h>
#include <sys/stat.h>
#include <unistd.h>
#include "xattr.h"
#include "../../log.h"
#include "linux.h"
void LinuxExtendedAttributes(const char* path)
{
int ret;
FILE* file;
int rc;
int cRc;
_linux_setxattr linux_setxattr;
linux_setxattr = (_linux_setxattr)dlsym(RTLD_DEFAULT, "setxattr");
if(!linux_setxattr)
{
log_write("Error loading setxattr(2) from libc: %s\n", dlerror());
return;
}
ret = chdir(path);
if(ret)
{
log_write("Error %d changing to specified path.\n", errno);
return;
}
ret = mkdir("XATTRS", 0755);
if(ret)
{
log_write("Error %d creating working directory.\n", errno);
return;
}
ret = chdir("XATTRS");
if(ret)
{
log_write("Error %d changing to working directory.\n", errno);
return;
}
log_write("Creating files with extended attributes.\n");
rc = 0;
cRc = 0;
file = fopen("com.ibm.os2.comment", "w+");
if(file == NULL) rc = errno;
else
{
fprintf(file, "This file has an extended attribute called \"com.ibm.os2.comment\" that is 72 bytes long.\n");
fclose(file);
ret = linux_setxattr("com.ibm.os2.comment", "user.com.ibm.os2.comment", CommentsEA, 72, 0);
if(ret) cRc = errno;
}
log_write("\tFile with an extended attribute called \"com.ibm.os2.comment\", rc = %d, cRc = %d\n", rc, cRc);
rc = 0;
cRc = 0;
file = fopen("com.ibm.os2.icon", "w+");
if(file == NULL) rc = errno;
else
{
fprintf(file, "This file has an extended attribute called \"com.ibm.os2.icon\" that is 3516 bytes long.\n");
fclose(file);
ret = linux_setxattr("com.ibm.os2.icon", "user.com.ibm.os2.icon", IconEA, 3516, 0);
if(ret) cRc = errno;
}
log_write("\tFile with an extended attribute called \"com.ibm.os2.icon\", rc = %d, cRc = %d\n", rc, cRc);
}

View File

@@ -0,0 +1,224 @@
/****************************************************************************
Aaru Data Preservation Suite
-----------------------------------------------------------------------------
Author(s) : Natalia Portillo
--[ License ] ---------------------------------------------------------------
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 <http://www.gnu.org/licenses/>.
-----------------------------------------------------------------------------
Copyright (C) 2011-2021 Natalia Portillo
*****************************************************************************/
#ifndef AARU_FSTESTER_SETTER_SRC_LINUX_XATTR_H_
#define AARU_FSTESTER_SETTER_SRC_LINUX_XATTR_H_
typedef int (*_linux_setxattr)(const char* path, const char* name, const void* value, size_t size, int flags);
static unsigned char CommentsEA[72] = {
0x45, 0x00, 0x00, 0x00, 0x00, 0x09, 0x33, 0x00, 0x2E, 0x43, 0x4F, 0x4D, 0x4D, 0x45, 0x4E, 0x54, 0x53, 0x00,
0xFD, 0xFF, 0x2E, 0x00, 0x54, 0x68, 0x69, 0x73, 0x20, 0x45, 0x41, 0x20, 0x63, 0x6F, 0x6E, 0x74, 0x61, 0x69,
0x6E, 0x73, 0x20, 0x63, 0x6F, 0x6D, 0x6D, 0x65, 0x6E, 0x74, 0x73, 0x20, 0x66, 0x6F, 0x72, 0x20, 0x57, 0x6F,
0x72, 0x6B, 0x50, 0x6C, 0x61, 0x63, 0x65, 0x20, 0x53, 0x68, 0x65, 0x6C, 0x6C, 0x2E, 0x00, 0x00, 0x00, 0x00};
static unsigned char IconEA[3516] = {
0xBC, 0x0D, 0x00, 0x00, 0x00, 0x05, 0xAE, 0x0D, 0x2E, 0x49, 0x43, 0x4F, 0x4E, 0x00, 0xF9, 0xFF, 0xAA, 0x0D, 0x42,
0x41, 0x28, 0x00, 0x00, 0x00, 0x78, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x43, 0x49, 0x1A, 0x00, 0x00, 0x00,
0x10, 0x00, 0x10, 0x00, 0xDA, 0x01, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x20, 0x00, 0x40, 0x00, 0x01, 0x00, 0x01,
0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x43, 0x49, 0x1A, 0x00, 0x00, 0x00, 0x10, 0x00, 0x10, 0x00, 0xDA, 0x02,
0x00, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x20, 0x00, 0x20, 0x00, 0x01, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x3F, 0x3F,
0x3F, 0x80, 0x80, 0x80, 0xC0, 0xC0, 0xC0, 0xFF, 0xFF, 0xFF, 0x00, 0x80, 0x80, 0x00, 0x80, 0x00, 0x80, 0x00, 0x00,
0xFF, 0xFF, 0x00, 0x80, 0x80, 0x00, 0xFF, 0x00, 0xFF, 0x80, 0x00, 0x80, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 0x00,
0xFF, 0x00, 0xFF, 0x00, 0x00, 0x42, 0x41, 0x28, 0x00, 0x00, 0x00, 0xC6, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x43, 0x49, 0x1A, 0x00, 0x00, 0x00, 0x10, 0x00, 0x10, 0x00, 0xDA, 0x04, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x20,
0x00, 0x40, 0x00, 0x01, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x43, 0x49, 0x1A, 0x00, 0x00, 0x00,
0x10, 0x00, 0x10, 0x00, 0xDA, 0x05, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x20, 0x00, 0x20, 0x00, 0x01, 0x00, 0x01,
0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x42, 0x41, 0x28, 0x00, 0x00, 0x00, 0x14, 0x01, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x43, 0x49, 0x1A, 0x00, 0x00, 0x00, 0x08, 0x00, 0x08, 0x00, 0x5A, 0x06, 0x00, 0x00, 0x0C, 0x00, 0x00,
0x00, 0x10, 0x00, 0x20, 0x00, 0x01, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x43, 0x49, 0x1A, 0x00,
0x00, 0x00, 0x08, 0x00, 0x08, 0x00, 0xDA, 0x06, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x10, 0x00, 0x10, 0x00, 0x01,
0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x42, 0x41, 0x28, 0x00, 0x00, 0x00, 0x62, 0x01, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x43, 0x49, 0x1A, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x0A, 0x00, 0x1A, 0x07, 0x00, 0x00, 0x0C,
0x00, 0x00, 0x00, 0x14, 0x00, 0x28, 0x00, 0x01, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0x43, 0x49,
0x1A, 0x00, 0x00, 0x00, 0x0A, 0x00, 0x0A, 0x00, 0xBA, 0x07, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x14, 0x00, 0x14,
0x00, 0x01, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x42, 0x41, 0x28, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x04, 0x00, 0x03, 0x43, 0x49, 0x1A, 0x00, 0x00, 0x00, 0x14, 0x00, 0x14, 0x00, 0x0A, 0x08, 0x00,
0x00, 0x0C, 0x00, 0x00, 0x00, 0x28, 0x00, 0x50, 0x00, 0x01, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF,
0x43, 0x49, 0x1A, 0x00, 0x00, 0x00, 0x14, 0x00, 0x14, 0x00, 0x8A, 0x0A, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x28,
0x00, 0x28, 0x00, 0x01, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x3F, 0x3F, 0x3F, 0x80, 0x80, 0x80, 0xC0, 0xC0, 0xC0,
0xFF, 0xFF, 0xFF, 0x00, 0x80, 0x80, 0x80, 0xA0, 0x80, 0x28, 0x50, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x80, 0x00, 0xD0,
0xD8, 0xB0, 0xC0, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xFF, 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, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0x8F, 0xFE, 0x3F, 0xFE, 0x0F, 0xF8, 0x3F, 0xFE, 0x0F, 0xF8, 0x3F, 0xFE, 0x0F, 0xF8, 0x3F, 0xFE, 0x00,
0x00, 0x3F, 0xFF, 0x00, 0x00, 0x3F, 0xFF, 0x00, 0x00, 0x7F, 0xFF, 0x00, 0x00, 0x7F, 0xFF, 0x00, 0x00, 0x1F, 0xFE,
0x00, 0x00, 0x0F, 0xFC, 0x00, 0x00, 0x0F, 0xF8, 0x00, 0x00, 0x0F, 0xF8, 0x00, 0x00, 0x0F, 0xF8, 0x00, 0x00, 0x0F,
0xF8, 0x00, 0x00, 0x0F, 0xF8, 0x00, 0x00, 0x0F, 0xF8, 0x00, 0x00, 0x0F, 0xF8, 0x00, 0x00, 0x0F, 0xF8, 0x00, 0x00,
0x0F, 0xF8, 0x00, 0x00, 0x0F, 0xF8, 0x00, 0x00, 0x0F, 0xF8, 0x00, 0x00, 0x1F, 0xF8, 0x00, 0x00, 0x3F, 0xFC, 0x00,
0x00, 0x7F, 0xFF, 0xFC, 0x7F, 0xFF, 0xFF, 0xFE, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x22, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x22, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x01, 0x11, 0x22, 0x00, 0x00, 0x00, 0x00, 0x01, 0x11, 0x22, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x31,
0x22, 0x00, 0x00, 0x00, 0x00, 0x01, 0x31, 0x22, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x31, 0x22, 0x00, 0x00,
0x00, 0x00, 0x01, 0x31, 0x22, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x33, 0x12, 0x22, 0x22, 0x22, 0x22, 0x13,
0x31, 0x22, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x13, 0x12, 0x22, 0x22, 0x22, 0x22, 0x13, 0x12, 0x22, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x13, 0x11, 0x11, 0x11, 0x11, 0x11, 0x13, 0x12, 0x20, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x13, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x12, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x21, 0x31, 0x11, 0x11, 0x11, 0x11, 0x31, 0x22, 0x22, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x21, 0x31, 0x22,
0x22, 0x22, 0x21, 0x31, 0x22, 0x22, 0x22, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11,
0x11, 0x11, 0x11, 0x22, 0x00, 0x00, 0x00, 0x00, 0x01, 0x34, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x31,
0x22, 0x00, 0x00, 0x00, 0x00, 0x01, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x41, 0x22, 0x00, 0x00,
0x00, 0x00, 0x01, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x41, 0x22, 0x00, 0x00, 0x00, 0x00, 0x01,
0x44, 0x46, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x44, 0x41, 0x22, 0x00, 0x00, 0x00, 0x00, 0x01, 0x44, 0x44, 0x44,
0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x41, 0x22, 0x00, 0x00, 0x00, 0x00, 0x01, 0x44, 0x46, 0x66, 0x66, 0x66, 0x66,
0x66, 0x66, 0x44, 0x41, 0x22, 0x00, 0x00, 0x00, 0x00, 0x01, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44,
0x41, 0x22, 0x00, 0x00, 0x00, 0x00, 0x01, 0x44, 0x46, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x44, 0x41, 0x22, 0x00,
0x00, 0x00, 0x00, 0x01, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x41, 0x22, 0x00, 0x00, 0x00, 0x00,
0x01, 0x44, 0x46, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x44, 0x41, 0x22, 0x00, 0x00, 0x00, 0x00, 0x01, 0x44, 0x44,
0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x41, 0x20, 0x00, 0x00, 0x00, 0x00, 0x01, 0x34, 0x44, 0x44, 0x44, 0x44,
0x44, 0x44, 0x44, 0x44, 0x31, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11,
0x11, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x14, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x07, 0xFC, 0x1F, 0xFC, 0x07, 0xF0, 0x1F, 0xFC, 0x07, 0xF0, 0x1F, 0xFC, 0x07,
0xF0, 0x1F, 0xFC, 0x00, 0x00, 0x1F, 0xFC, 0x00, 0x00, 0x1F, 0xFE, 0x00, 0x00, 0x1F, 0xFE, 0x00, 0x00, 0x3F, 0xFE,
0x00, 0x00, 0x1F, 0xFE, 0x00, 0x00, 0x0F, 0xFC, 0x00, 0x00, 0x07, 0xF8, 0x00, 0x00, 0x07, 0xF0, 0x00, 0x00, 0x07,
0xF0, 0x00, 0x00, 0x07, 0xF0, 0x00, 0x00, 0x07, 0xF0, 0x00, 0x00, 0x07, 0xF0, 0x00, 0x00, 0x07, 0xF0, 0x00, 0x00,
0x07, 0xF0, 0x00, 0x00, 0x07, 0xF0, 0x00, 0x00, 0x07, 0xF0, 0x00, 0x00, 0x07, 0xF0, 0x00, 0x00, 0x07, 0xF0, 0x00,
0x00, 0x0F, 0xF0, 0x00, 0x00, 0x1F, 0xF8, 0x00, 0x00, 0x3F, 0xFC, 0x00, 0x00, 0x7F, 0xFF, 0xFC, 0x7F, 0xFF, 0xFF,
0xFE, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00,
0x00, 0xF8, 0x03, 0xE0, 0x03, 0x88, 0x0E, 0x20, 0x02, 0x08, 0x08, 0x20, 0x02, 0x88, 0x0A, 0x20, 0x02, 0x8F, 0xFA,
0x20, 0x02, 0xC0, 0x06, 0x20, 0x01, 0x40, 0x04, 0x20, 0x01, 0x40, 0x04, 0x40, 0x01, 0x7F, 0xFC, 0x60, 0x01, 0x20,
0x08, 0x10, 0x02, 0x20, 0x08, 0x08, 0x04, 0x00, 0x00, 0x08, 0x0B, 0xFF, 0xFF, 0x88, 0x0B, 0xFF, 0xFF, 0x88, 0x0B,
0xFF, 0xFF, 0x88, 0x0B, 0x00, 0x03, 0x88, 0x0B, 0xFF, 0xFF, 0x88, 0x0B, 0x00, 0x03, 0x88, 0x0B, 0xFF, 0xFF, 0x88,
0x0B, 0x00, 0x03, 0x88, 0x0B, 0xFF, 0xFF, 0x88, 0x0B, 0x00, 0x03, 0x88, 0x0B, 0xFF, 0xFF, 0x90, 0x0B, 0xFF, 0xFF,
0xA0, 0x04, 0x00, 0x00, 0x40, 0x03, 0xFD, 0x7F, 0x80, 0x00, 0x02, 0x80, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0xED, 0x41, 0x00, 0x00, 0x3B, 0x00, 0x00, 0x00, 0x27, 0x09, 0x00, 0x00, 0xF5, 0x08, 0x00, 0x00, 0x1F, 0x09,
0x00, 0x00, 0x4A, 0x09, 0x00, 0x00, 0x9F, 0x0A, 0x00, 0x00, 0xE3, 0x0A, 0x00, 0x00, 0xE4, 0x09, 0x00, 0x00, 0x02,
0x0A, 0x00, 0x00, 0x29, 0x0A, 0x00, 0x00, 0x55, 0x0A, 0x00, 0x00, 0x72, 0x0A, 0x00, 0x00, 0x88, 0x0A, 0xFF, 0xFF,
0x00, 0x00, 0xE7, 0xCF, 0xE5, 0x1C, 0xE7, 0xCF, 0x65, 0x00, 0xF0, 0x1F, 0xDD, 0x04, 0xF3, 0x9F, 0xF2, 0x03, 0xE0,
0x0F, 0xC7, 0x04, 0xDF, 0xF7, 0x0B, 0x05, 0xDF, 0xF7, 0xF8, 0x04, 0xDF, 0xF7, 0x32, 0x04, 0xDF, 0xF7, 0xA8, 0x04,
0xDF, 0xF7, 0x9E, 0x04, 0xDF, 0xF7, 0xBA, 0x04, 0xE0, 0x0F, 0x7A, 0x04, 0xFD, 0x7F, 0x85, 0x04, 0xFE, 0xFF, 0xFF,
0x04, 0xFF, 0xFF, 0xDF, 0x04, 0xFF, 0xFF, 0x00, 0x00, 0xE7, 0xCF, 0x00, 0x1F, 0xE7, 0xCF, 0x00, 0x1F, 0xF0, 0x1F,
0x00, 0x1F, 0xF3, 0x9F, 0x00, 0x1F, 0xE0, 0x0F, 0x00, 0x1F, 0xDF, 0xF7, 0x00, 0x1F, 0xDF, 0xF7, 0x00, 0x1F, 0xDF,
0xF7, 0x00, 0x1F, 0xDF, 0xF7, 0x00, 0x1F, 0xDF, 0xF7, 0x00, 0x1F, 0xDF, 0xF7, 0x00, 0x7F, 0xE0, 0x0F, 0x00, 0x7F,
0xFD, 0x7F, 0xFF, 0xFF, 0xFE, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x08, 0x70, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x33, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x08, 0x88, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x7F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0F, 0xFF, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x33, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x08, 0x88, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x7F, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xF0,
0x00, 0xE3, 0xF1, 0xF0, 0x00, 0xEB, 0xF5, 0xF1, 0x11, 0xE9, 0xE5, 0xF0, 0x00, 0xF4, 0x0B, 0xF0, 0x00, 0xF7, 0xFB,
0xF0, 0x00, 0xFA, 0x17, 0xF1, 0x11, 0xFA, 0xD7, 0xF0, 0x00, 0xE0, 0x01, 0xF0, 0x0F, 0xDF, 0xFE, 0xF0, 0x00, 0xDF,
0xFE, 0xFF, 0xFF, 0xDF, 0xFE, 0xF0, 0x00, 0xDF, 0xFE, 0xFF, 0xFF, 0xDF, 0xFE, 0xFF, 0xFF, 0xDF, 0xFE, 0xF0, 0x00,
0xDF, 0xFE, 0xFF, 0xFF, 0xE0, 0x01, 0xFF, 0xFF, 0xFF, 0x5F, 0xFF, 0xFF, 0xFF, 0xBF, 0xF6, 0x66, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xF0, 0x00, 0xE3, 0xF1, 0xF0, 0x01, 0xEB, 0xF5, 0xF1, 0x11, 0xE9, 0xE5, 0xF0, 0x00, 0xF4, 0x0B,
0xF0, 0x01, 0xF7, 0xFB, 0xF1, 0x11, 0xFA, 0x17, 0xF0, 0x00, 0xFA, 0xD7, 0xF0, 0x01, 0xE0, 0x01, 0xF1, 0x11, 0xDF,
0xFE, 0xF0, 0x00, 0xDF, 0xFE, 0xF0, 0x01, 0xDF, 0xFE, 0xF1, 0x11, 0xDF, 0xFE, 0xF0, 0x00, 0xDF, 0xFE, 0xF0, 0x00,
0xDF, 0xFE, 0xF0, 0x00, 0xDF, 0xFE, 0xF0, 0x00, 0xE0, 0x01, 0xF0, 0x00, 0xFF, 0x5F, 0xF1, 0x00, 0xFF, 0xBF, 0xF0,
0x00, 0xFF, 0xFF, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x88,
0x88, 0x88, 0x00, 0x00, 0x00, 0x00, 0x00, 0x88, 0x88, 0x7F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x33, 0x7F, 0xFF, 0x00,
0x00, 0x00, 0x00, 0x00, 0x88, 0x80, 0x88, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF7, 0x33, 0x33, 0x00, 0x00, 0x00, 0x00,
0x00, 0x88, 0x00, 0x88, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x7F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x33, 0x7F,
0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0x80, 0x88, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF7, 0x33, 0x33, 0x00, 0x00,
0x00, 0x00, 0x00, 0x80, 0x88, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x88, 0x88, 0x7F, 0x00, 0x00, 0x00, 0x00, 0x00,
0x33, 0x7F, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x87, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF7, 0x33, 0x33,
0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x88, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x88, 0x7F, 0x00, 0x00, 0x00,
0x00, 0x00, 0x33, 0x7F, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x88, 0x88, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF7,
0x33, 0x33, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x77, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x87, 0x08, 0x7F, 0x00,
0x00, 0x00, 0x00, 0x00, 0x33, 0x7F, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x88, 0x70, 0x00, 0x00, 0x00, 0x00,
0x00, 0xF7, 0x33, 0x33, 0x00, 0x00, 0x00, 0x00, 0x00, 0x88, 0x88, 0x88, 0x00, 0x00, 0x00, 0x00, 0x00, 0x88, 0x88,
0x7F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x33, 0x7F, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x88, 0x88, 0x80, 0x00, 0x00,
0x00, 0x00, 0x00, 0xF7, 0x33, 0x33, 0x00, 0x00, 0x00, 0x00, 0x00, 0x88, 0x88, 0x88, 0x00, 0x00, 0x00, 0x00, 0x00,
0x88, 0x88, 0x7F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x33, 0x7F, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x11, 0x11,
0x00, 0x00, 0x00, 0x00, 0x00, 0xF7, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x11, 0x11, 0x00, 0x00, 0x00,
0x00, 0x00, 0x04, 0x00, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7F, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xF0, 0x66, 0x66, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x7F, 0xFF, 0xFF, 0xC3, 0xFF, 0xE1,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x03, 0xFF, 0x81, 0xFF, 0x07, 0x00, 0x00, 0xFF, 0x03, 0xFF, 0x81, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0x03, 0xFF, 0x81, 0xFF, 0xFF, 0x06, 0x60, 0xFF, 0x01, 0xFF, 0x01, 0xFF, 0x00, 0x37, 0x77, 0xFF, 0x00,
0x00, 0x01, 0xFF, 0x77, 0x77, 0x77, 0xFF, 0x80, 0x00, 0x03, 0xFF, 0xEE, 0x00, 0x00, 0xFF, 0x80, 0x00, 0x03, 0xFF,
0x33, 0x33, 0x33, 0xFF, 0x80, 0x00, 0x03, 0xFF, 0x00, 0x00, 0xEE, 0xFF, 0xC0, 0x00, 0x03, 0xFF, 0x00, 0x33, 0x33,
0xFF, 0xC0, 0x00, 0x01, 0xFF, 0x33, 0x33, 0x33, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x0E, 0xEE, 0x00, 0xFE, 0x00, 0x00,
0x00, 0x7F, 0x33, 0x33, 0x33, 0xFC, 0x00, 0x00, 0x00, 0x7F, 0x00, 0x00, 0x00, 0xFC, 0x00, 0x00, 0x00, 0x7F, 0x00,
0x33, 0x33, 0xFC, 0x00, 0x00, 0x00, 0x7F, 0x33, 0x33, 0x33, 0xFC, 0x00, 0x00, 0x00, 0x7F, 0xEE, 0x0E, 0xEE, 0xFC,
0x00, 0x00, 0x00, 0x7F, 0x33, 0x33, 0x33, 0xFC, 0x00, 0x00, 0x00, 0x7F, 0x00, 0x00, 0x00, 0xFC, 0x00, 0x00, 0x00,
0x7F, 0x00, 0x33, 0x33, 0xFC, 0x00, 0x00, 0x00, 0x7F, 0x33, 0x33, 0x33, 0xFC, 0x00, 0x00, 0x00, 0x7F, 0x0E, 0xEE,
0x0E, 0xFC, 0x00, 0x00, 0x00, 0x7F, 0x33, 0x33, 0x33, 0xFC, 0x00, 0x00, 0x00, 0x7F, 0x00, 0x00, 0x00, 0xFC, 0x00,
0x00, 0x00, 0x7F, 0x40, 0x33, 0x33, 0xFC, 0x00, 0x00, 0x00, 0x7F, 0x33, 0x33, 0x33, 0xFC, 0x00, 0x00, 0x00, 0xFF,
0x00, 0x0E, 0x00, 0xFC, 0x00, 0x00, 0x01, 0xFF, 0x33, 0x33, 0x33, 0xFE, 0x00, 0x00, 0x03, 0xFF, 0x00, 0x00, 0x00,
0xFF, 0xFF, 0x87, 0xFF, 0xFF, 0xF0, 0x33, 0x33, 0xFF, 0xFF, 0x87, 0xFF, 0xFF, 0x33, 0x33, 0x33, 0xFF, 0xFF, 0xCF,
0xFF, 0xFF, 0x00, 0x00, 0x04, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x33, 0x33, 0x33, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00,
0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x5D, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x22, 0x22, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x22, 0x20,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x11, 0x22, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x11, 0x12,
0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x13, 0x31, 0x22, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x33,
0x12, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x13, 0x31, 0x22, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01,
0x33, 0x12, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x13, 0x33, 0x12, 0x20, 0x00, 0x00, 0x00, 0x00,
0x13, 0x33, 0x12, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x33, 0x12, 0x22, 0x22, 0x22, 0x22,
0x22, 0x13, 0x33, 0x12, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x33, 0x12, 0x22, 0x22, 0x22,
0x22, 0x22, 0x13, 0x31, 0x22, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x33, 0x31, 0x11, 0x11,
0x11, 0x11, 0x11, 0x33, 0x31, 0x22, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x33, 0x33, 0x33,
0x33, 0x33, 0x33, 0x33, 0x33, 0x31, 0x22, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x13, 0x33,
0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x12, 0x22, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x13,
0x31, 0x11, 0x11, 0x11, 0x11, 0x11, 0x33, 0x12, 0x22, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x22,
0x13, 0x33, 0x12, 0x22, 0x22, 0x22, 0x13, 0x33, 0x12, 0x22, 0x22, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01,
0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x12, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x13, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x43, 0x12, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x14, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x12, 0x20, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x14, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x12, 0x20, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x14, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x12, 0x20, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x14, 0x44, 0x43, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x44, 0x44, 0x12, 0x20, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x14, 0x44, 0x49, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x44, 0x44, 0x12, 0x20,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x14, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x12,
0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x14, 0x44, 0x43, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x44, 0x44,
0x12, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x14, 0x44, 0x49, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x44,
0x44, 0x12, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x14, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44,
0x44, 0x44, 0x12, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x14, 0x44, 0x43, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33,
0x33, 0x44, 0x44, 0x12, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x14, 0x44, 0x49, 0x99, 0x99, 0x99, 0x99, 0x99,
0x99, 0x99, 0x44, 0x44, 0x12, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x14, 0x44, 0x44, 0x44, 0x44, 0x44, 0x44,
0x44, 0x44, 0x44, 0x44, 0x44, 0x12, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x14, 0x44, 0x44, 0x44, 0x44, 0x44,
0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x12, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x13, 0x44, 0x44, 0x44, 0x44,
0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x43, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x11, 0x11, 0x11,
0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x01, 0x33, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x01, 0x33, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00};
#endif // AARU_FSTESTER_SETTER_SRC_LINUX_XATTR_H_

View File

@@ -23,7 +23,7 @@ Copyright (C) 2011-2021 Natalia Portillo
*****************************************************************************/
#if defined(__APPLE__) && defined(__MACH__)
#include "../darwin/darwin.h"
#include "darwin/darwin.h"
#else
#include <errno.h>
#include <sys/utsname.h>

View File

@@ -25,7 +25,7 @@ Copyright (C) 2011-2021 Natalia Portillo
#include "../include/defs.h"
#if defined(__APPLE__) && defined(__MACH__)
#include "../darwin/darwin.h"
#include "darwin/darwin.h"
#endif
void ResourceFork(const char* path)

View File

@@ -27,9 +27,9 @@ Copyright (C) 2011-2021 Natalia Portillo
#include <dlfcn.h>
#include "../linux/linux.h"
#include "linux/linux.h"
#elif defined(__APPLE__) && defined(__MACH__)
#include "../darwin/darwin.h"
#include "darwin/darwin.h"
#endif
#include <errno.h>

View File

@@ -44,11 +44,11 @@ Copyright (C) 2011-2021 Natalia Portillo
#include "volume.h"
#if defined(__linux__) || defined(__LINUX__) || defined(__gnu_linux)
#include "../linux/linux.h"
#include "linux/linux.h"
#elif defined(__APPLE__) && defined(__MACH__)
#include "../darwin/darwin.h"
#include "darwin/darwin.h"
#elif defined(__FreeBSD__) || defined(__DragonFly__) || defined(__NetBSD__) || defined(__OpenBSD__)
#include "../bsd/bsd.h"
#include "bsd/bsd.h"
#endif
void GetVolumeInfo(const char* path, size_t* clusterSize)

View File

@@ -25,11 +25,11 @@ Copyright (C) 2011-2021 Natalia Portillo
#include "../include/defs.h"
#if defined(__linux__) || defined(__LINUX__) || defined(__gnu_linux)
#include "../linux/linux.h"
#include "linux/linux.h"
#elif defined(__APPLE__) && defined(__MACH__)
#include "../darwin/darwin.h"
#include "darwin/darwin.h"
#elif defined(__FreeBSD__) || defined(__DragonFly__) || defined(__NetBSD__) || defined(__OpenBSD__)
#include "../bsd/bsd.h"
#include "bsd/bsd.h"
#endif
void ExtendedAttributes(const char* path)