T168_111\system\FileSys:7个文件

DevFile.c              。。。。。。。。。。。。。。。。。。。。。。。。。。。。

/******************************************************************************
 *                                                                            *
 *                         M O D U L E   D E F I N E                          *
 *                                                                            *
 ******************************************************************************/

#define DEVFFILE_C

/******************************************************************************
 *                                                                            *
 *        C O M P I L E R   D E F I N E D   I N C L U D E   F I L E S         *
 *                                                                            *
 ******************************************************************************/

/* None */

/******************************************************************************
 *                                                                            *
 *            U S E R   D E F I N E D   I N C L U D E   F I L E S             *
 *                                                                            *
 ******************************************************************************/

#include "Common.h"
#include "XCore.h"
#include "XNutOS.h"
#include "XLib.h"
#include "File.h"
#include "DevFile.h"

#if defined(NUTOS)

/******************************************************************************
 *                                                                            *
 *                         L O C A L   D E F I N E S                          *
 *                                                                            *
 ******************************************************************************/

/* None */

/******************************************************************************
 *                                                                            *
 *                        L O C A L   T Y P E D E F S                         *
 *                                                                            *
 ******************************************************************************/

/* None */

/******************************************************************************
 *                                                                            *
 *             L O C A L   F U N C T I O N   P R O T O T Y P E S              *
 *                                                                            *
 ******************************************************************************/

static int FileRead(NUTFILE * fp, void *buffer, int size);
static int FileWrite(NUTFILE * fp, CONST void *buffer, int len);
static NUTFILE *FileOpen(NUTDEVICE * dev, CONST char *name, int mode, int acc);
static int FileClose(NUTFILE * fp);
static long FileSize(NUTFILE * fp);
static int FileIOCtl(NUTDEVICE * dev, int req, void *conf);

/******************************************************************************
 *                                                                            *
 *    L O C A L   I N I T I A L I Z E D   D A T A   D E F I N I T I O N S     *
 *                                                                            *
 ******************************************************************************/

/*!
 * \brief CARD device information structure.
 *
 * All this CARD stuff is so simple, that it even mimics
 * its own device driver.
 */
NUTDEVICE devCARD = {
    0,                          /*!< Pointer to next device. */
    {'C', 'A', 'R', 'D', 0, 0, 0, 0, 0},        /*!< Unique device name. */
    IFTYP_FS,                   /*!< Type of device. Obsolete. */
    CARD_DEVICE,                /*!< Base address. */
    0,                          /*!< First interrupt number. Unused. */
    0,                          /*!< Interface control block. Unused. */
    0,                          /*!< Driver control block. Unused. */
    0,                          /*!< Driver initialization routine. Not supported. */
    FileIOCtl,                  /*!< Driver specific control function. */
    FileRead,                   /*!< Read data from a file. */
    FileWrite,                  /*!< Write data to a file. */
    FileOpen,                   /*!< Open a file. */
    FileClose,                  /*!< Close a file. */
    FileSize                    /*!< Return file size. */
};

/******************************************************************************
 *                                                                            *
 *    L O C A L   U N I T I A L I Z E D   D A T A   D E F I N I T I O N S     *
 *                                                                            *
 ******************************************************************************/


static int FileSeek(NUTFILE * fp, long * pos, int whence)
{
    return Fseek((_FileHandle *) fp->nf_fcb, *pos, whence);
}

/*! 
 * \brief Read from a file. 
 */
static int FileRead(NUTFILE * fp, void * buffer, int size)
{
    return Fread(buffer, sizeof(CHAR), size, (_FileHandle *) fp->nf_fcb);
}

/*! 
 * \brief Write data to a file.
 */
static int FileWrite(NUTFILE * fp, CONST void * buffer, int len)
{
    return Fwrite(buffer, sizeof(CHAR), len, (_FileHandle *) fp->nf_fcb);
}

/*! 
 * \brief Open a file.
 */
static NUTFILE *FileOpen(NUTDEVICE * dev, CONST char * name, int mode, int acc)
{
    NUTFILE * fp = NutHeapAlloc(sizeof(NUTFILE));
    char fmode[2] = "r";

    if (fp == 0) {
        return NUTFILE_EOF;
    }

    if ((mode & 0x0003) != _O_RDONLY) {
        *fmode = 'w';
    }
    if (mode & _O_APPEND) {
        *fmode = 'a';
    }

    if (fp->nf_fcb = (void *) Fopen((_eFileDevice) dev->dev_base, name, fmode)) {
        fp->nf_next = 0;
        fp->nf_dev = dev;
    } else {
        NutHeapFree(fp);
        fp = NUTFILE_EOF;
    }

    return fp;
}

/*! 
 * \brief Close a file. 
 */
static int FileClose(NUTFILE * fp)
{
    if (fp && fp != NUTFILE_EOF) {
        if (fp->nf_fcb)
            Fclose((_FileHandle *) fp->nf_fcb);
        NutHeapFree(fp);
    }
    return 0;
}

/*! 
 * \brief Query file size.
 */
static long FileSize(NUTFILE * fp)
{
    return FileLength(FileNo((_FileHandle *) fp->nf_fcb));
}

/*!
 * \brief Device specific functions.
 */
static int FileIOCtl(NUTDEVICE * dev, int req, void * conf)
{
    int rc = -1;

    switch (req) {
    case FS_FILE_SEEK:
        FileSeek((NUTFILE *) ((IOCTL_ARG3 *) conf)->arg1,      /* */
                     (long *) ((IOCTL_ARG3 *) conf)->arg2,      /* */
                     (int) ((IOCTL_ARG3 *) conf)->arg3);
        break;
    }
    return rc;
}

#endif

DevFile.h                。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。

#ifndef DEVFILE_H

/******************************************************************************
 *                                                                            *
 *                         M O D U L E   D E F I N E                          *
 *                                                                            *
 ******************************************************************************/

#define DEVFILE_H

/******************************************************************************
 *                                                                            *
 *        C O M P I L E R   D E F I N E D   I N C L U D E   F I L E S         *
 *                                                                            *
 ******************************************************************************/

/* None */

/******************************************************************************
 *                                                                            *
 *            U S E R   D E F I N E D   I N C L U D E   F I L E S             *
 *                                                                            *
 ******************************************************************************/

#include "XNutOS.h"

#ifdef __cplusplus
extern "C" {            /* Assume C declarations for C++ */
#endif    /* __cplusplus */

/******************************************************************************
 *                                                                            *
 *                        G L O B A L   D E F I N E S                         *
 *                                                                            *
 ******************************************************************************/

#ifndef DEV_CARD
#define DEV_CARD        devCARD
#endif

#ifndef DEV_CARD_NAME
#define DEV_CARD_NAME    "CARD"
#endif

/******************************************************************************
 *                                                                            *
 *                 S T R U C T U R E   D E F I N I T I O N S                  *
 *                                                                            *
 ******************************************************************************/

/* None */

/******************************************************************************
 *                                                                            *
 *    G L O B A L   V A R I A B L E S   -   N O   I N I T I A L I Z E R S     *
 *                                                                            *
 ******************************************************************************/

/* None */

/******************************************************************************
 *                                                                            *
 *       G L O B A L   V A R I A B L E S   -   I N I T I A L I Z E R S        *
 *                                                                            *
 ******************************************************************************/

/*
 * Available drivers.
 */
extern NUTDEVICE devCARD;

/******************************************************************************
 *                                                                            *
 *                   F U N C T I O N   P R O T O T Y P E S                    *
 *                                                                            *
 ******************************************************************************/


#ifdef __cplusplus
}                       /* End of extern "C" { */
#endif    /* __cplusplus */

#endif

DevUrom.c             。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。

/******************************************************************************
 *                                                                            *
 *                         M O D U L E   D E F I N E                          *
 *                                                                            *
 ******************************************************************************/

#define DEVUROM_C

/******************************************************************************
 *                                                                            *
 *        C O M P I L E R   D E F I N E D   I N C L U D E   F I L E S         *
 *                                                                            *
 ******************************************************************************/

#include <string.h>

/******************************************************************************
 *                                                                            *
 *            U S E R   D E F I N E D   I N C L U D E   F I L E S             *
 *                                                                            *
 ******************************************************************************/

#include "Common.h"
#include "XCore.h"
#include "XNutOS.h"
#include "UromFile.h"
#include "DevUrom.h"

#if defined(NUTOS)

/******************************************************************************
 *                                                                            *
 *                         L O C A L   D E F I N E S                          *
 *                                                                            *
 ******************************************************************************/

/* None */

/******************************************************************************
 *                                                                            *
 *                        L O C A L   T Y P E D E F S                         *
 *                                                                            *
 ******************************************************************************/

/* None */

/******************************************************************************
 *                                                                            *
 *             L O C A L   F U N C T I O N   P R O T O T Y P E S              *
 *                                                                            *
 ******************************************************************************/

static int UromRead(NUTFILE * fp, void *buffer, int size);
static int UromWrite(NUTFILE * fp, CONST void *buffer, int len);
static NUTFILE *UromOpen(NUTDEVICE * dev, CONST char *name, int mode, int acc);
static int UromClose(NUTFILE * fp);
static long UromSize(NUTFILE * fp);
static int UromIOCtl(NUTDEVICE * dev, int req, void *conf);

/******************************************************************************
 *                                                                            *
 *    L O C A L   I N I T I A L I Z E D   D A T A   D E F I N I T I O N S     *
 *                                                                            *
 ******************************************************************************/

/*!
 * \brief List of all microROM files.
 */
static ROMENTRY romEntryList[] = {
    {"index.asp",   urom_index_asp,   sizeof(urom_index_asp)},
    {"title.asp",   urom_title_asp,   sizeof(urom_title_asp)},
    {"setup.htm",   urom_setup_htm,   sizeof(urom_setup_htm)},
    {"menu.htm",    urom_menu_htm,    sizeof(urom_menu_htm)},
    {"tscicon.ico", urom_favicon_ico, sizeof(urom_favicon_ico)},    
    {"tsclogo.gif", urom_tsclogo_gif, sizeof(urom_tsclogo_gif)},
    {"oemlogo.gif", urom_oemlogo_gif, sizeof(urom_oemlogo_gif)},
    {"del.png",     urom_del_png,     sizeof(urom_del_png)},
    {"run.png",     urom_run_png,     sizeof(urom_run_png)},
    {(char *)0, 0, 0},
};

/*!
 * \brief UROM device information structure.
 *
 * All this UROM stuff is so simple, that it even mimics
 * its own device driver.
 */
NUTDEVICE devUROM = {
    0,                          /*!< Pointer to next device. */
    {'U', 'R', 'O', 'M', 0, 0, 0, 0, 0},        /*!< Unique device name. */
    IFTYP_ROM,                  /*!< Type of device. Obsolete. */
    0,                          /*!< Base address. Unused. */
    0,                          /*!< First interrupt number. Unused. */
    0,                          /*!< Interface control block. Unused. */
    0,                          /*!< Driver control block. Unused. */
    0,                          /*!< Driver initialization routine. Not supported. */
    UromIOCtl,                  /*!< Driver specific control function. Not supported. */
    UromRead,                   /*!< Read data from a file. */
    UromWrite,                  /*!< Write data to a file. */
    UromOpen,                   /*!< Open a file. */
    UromClose,                  /*!< Close a file. */
    UromSize                    /*!< Return file size. */
};

/******************************************************************************
 *                                                                            *
 *    L O C A L   U N I T I A L I Z E D   D A T A   D E F I N I T I O N S     *
 *                                                                            *
 ******************************************************************************/


static int UromSeek(NUTFILE * fp, long *pos, int whence)
{
    ROMFILE *romf = fp->nf_fcb;
    ROMENTRY *rome = romf->romf_entry;

    int rc = 0;
    long npos = *pos;

    switch (whence) {
    case SEEK_CUR:
        npos += romf->romf_pos;
        break;
    case SEEK_END:
        npos += rome->rome_size;
        break;
    }

    if (npos < 0 || npos > rome->rome_size) {
        rc = -1;
    } else {
        romf->romf_pos = npos;
        *pos = npos;
    }
    return rc;
}

/*! 
 * \brief Read from device. 
 */
static int UromRead(NUTFILE * fp, void *buffer, int size)
{
    ROMFILE *romf = fp->nf_fcb;
    ROMENTRY *rome = romf->romf_entry;

    if ((u_int) size > rome->rome_size - romf->romf_pos)
        size = rome->rome_size - romf->romf_pos;
    if (size) {
        memcpy(buffer, (void *)(rome->rome_data + romf->romf_pos), size);
        romf->romf_pos += size;
    }
    return size;
}

/*! 
 * \brief Write data to a file.
 *
 * \return Always returns -1.
 */
static int UromWrite(NUTFILE * fp, CONST void *buffer, int len)
{
    return -1;
}

/*! 
 * \brief Open a file.
 */
static NUTFILE *UromOpen(NUTDEVICE * dev, CONST char *name, int mode,
                         int acc)
{
    NUTFILE *fp = NutHeapAlloc(sizeof(NUTFILE));
    ROMENTRY *rome;
    ROMFILE *romf = 0;

    if (fp == 0) {
        return NUTFILE_EOF;
    }

    for (rome = romEntryList; rome->rome_name; rome++) {
        if (strcmp(name, rome->rome_name) == 0)
            break;
    }
    if (rome->rome_name) {
        if ((romf = NutHeapAllocClear(sizeof(ROMFILE))) != 0)
            romf->romf_entry = rome;
    }

    if (romf) {
        fp->nf_next = 0;
        fp->nf_dev = dev;
        fp->nf_fcb = romf;
    } else {
        NutHeapFree(fp);
        fp = NUTFILE_EOF;
    }

    return fp;
}

/*! 
 * \brief Close a file. 
 */
static int UromClose(NUTFILE * fp)
{
    if (fp && fp != NUTFILE_EOF) {
        if (fp->nf_fcb)
            NutHeapFree(fp->nf_fcb);
        NutHeapFree(fp);
    }
    return 0;
}

/*! 
 * \brief Query file size.
 */
static long UromSize(NUTFILE * fp)
{
    ROMFILE *romf = fp->nf_fcb;
    ROMENTRY *rome = romf->romf_entry;

    return (long) rome->rome_size;
}

/*!
 * \brief Device specific functions.
 */
static int UromIOCtl(NUTDEVICE * dev, int req, void *conf)
{
    int rc = -1;

    switch (req) {
    case FS_FILE_SEEK:
        UromSeek((NUTFILE *) ((IOCTL_ARG3 *) conf)->arg1,      /* */
                     (long *) ((IOCTL_ARG3 *) conf)->arg2,      /* */
                     (int) ((IOCTL_ARG3 *) conf)->arg3);
        break;
    }
    return rc;
}

#endif

DevUrom.h             。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。

#ifndef DEVUROM_H

/******************************************************************************
 *                                                                            *
 *                         M O D U L E   D E F I N E                          *
 *                                                                            *
 ******************************************************************************/

#define DEVUROM_H

/******************************************************************************
 *                                                                            *
 *        C O M P I L E R   D E F I N E D   I N C L U D E   F I L E S         *
 *                                                                            *
 ******************************************************************************/

/* None */

/******************************************************************************
 *                                                                            *
 *            U S E R   D E F I N E D   I N C L U D E   F I L E S             *
 *                                                                            *
 ******************************************************************************/

#include "XNutOS.h"

#ifdef __cplusplus
extern "C" {            /* Assume C declarations for C++ */
#endif    /* __cplusplus */

/******************************************************************************
 *                                                                            *
 *                        G L O B A L   D E F I N E S                         *
 *                                                                            *
 ******************************************************************************/

#ifndef DEV_UROM
#define DEV_UROM        devUROM
#endif

#ifndef DEV_UROM_NAME
#define DEV_UROM_NAME    "UROM"
#endif

/******************************************************************************
 *                                                                            *
 *                 S T R U C T U R E   D E F I N I T I O N S                  *
 *                                                                            *
 ******************************************************************************/

/*!
 * \brief Mikro-ROM directory entry type.
 */
typedef struct {
    const char *rome_name;/*!< Filename. */
    const char *rome_data;  /*!< File data. */
    u_int rome_size;        /*!< File size. */
} ROMENTRY;

/*!
 * \brief Mikro-ROM file information type.
 */
typedef struct _ROMFILE ROMFILE;

/*!
 * \brief Mikro-ROM file information structure.
 */
struct _ROMFILE {
    ROMENTRY *romf_entry;   /*!< Points to ROMENTRY */
    u_int romf_pos;      /*!< Current read position. */
};

/******************************************************************************
 *                                                                            *
 *    G L O B A L   V A R I A B L E S   -   N O   I N I T I A L I Z E R S     *
 *                                                                            *
 ******************************************************************************/

/* None */

/******************************************************************************
 *                                                                            *
 *       G L O B A L   V A R I A B L E S   -   I N I T I A L I Z E R S        *
 *                                                                            *
 ******************************************************************************/

/*
 * Available drivers.
 */
extern NUTDEVICE devUROM;

/******************************************************************************
 *                                                                            *
 *                   F U N C T I O N   P R O T O T Y P E S                    *
 *                                                                            *
 ******************************************************************************/


#ifdef __cplusplus
}                       /* End of extern "C" { */
#endif    /* __cplusplus */

#endif

File.c           。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。

/******************************************************************************
 *                                                                            *
 *                         M O D U L E   D E F I N E                          *
 *                                                                            *
 ******************************************************************************/

#define FILE_C

/******************************************************************************
 *                                                                            *
 *        C O M P I L E R   D E F I N E D   I N C L U D E   F I L E S         *
 *                                                                            *
 ******************************************************************************/

#include <ctype.h>
#include <string.h>

/******************************************************************************
 *                                                                            *
 *            U S E R   D E F I N E D   I N C L U D E   F I L E S             *
 *                                                                            *
 ******************************************************************************/

#include "Common.h"
#include "XCore.h"
#include "XADC.h"
#include "XProFile.h"
#include "File.h"

/******************************************************************************
 *                                                                            *
 *                         L O C A L   D E F I N E S                          *
 *                                                                            *
 ******************************************************************************/

#define HANDLE_MAX                6

/******************************************************************************
 *                                                                            *
 *                        L O C A L   T Y P E D E F S                         *
 *                                                                            *
 ******************************************************************************/

#if defined(AT91SAM9260)
#define RAM_PHYSICAL            (8 * 1024 * 1024)    // 8MB
#elif defined(N3290)
#define RAM_PHYSICAL            (2 * 1024 * 1024)    // 2MB
#elif defined(SH7040)
#define RAM_PHYSICAL            (2 * 1024 * 1024)    // 2MB
#endif

#if defined(XPH500B) ||defined(DELUXE_2045) ||defined(XPH400B)
#define RAM_CAPACITY            (128 * 1024)        // 128KB
#else
#define RAM_CAPACITY            (256 * 1024)        // 256KB
#endif

#define RAM_FILE_QUANTITY          256
#define FLASH_FILE_QUANTITY        256
#define CARD_FILE_QUANTITY        256

/******************************************************************************
 *                                                                            *
 *             L O C A L   F U N C T I O N   P R O T O T Y P E S              *
 *                                                                            *
 ******************************************************************************/

/* None */

/******************************************************************************
 *                                                                            *
 *    L O C A L   I N I T I A L I Z E D   D A T A   D E F I N I T I O N S     *
 *                                                                            *
 ******************************************************************************/

/* None */

/******************************************************************************
 *                                                                            *
 *    L O C A L   U N I T I A L I Z E D   D A T A   D E F I N I T I O N S     *
 *                                                                            *
 ******************************************************************************/

STATIC _FileHandle FileHandle[HANDLE_MAX];

#if defined(TSCFS)
STATIC _TscFileSystem TscFsRAM;
STATIC _TscFileSystem TscFsFlash;
#endif

#if defined(DEFAULT_MCARD_MODEL) && defined(TSCFS)
STATIC _TscFileSystem TscFsDefault;
#elif defined(FLASH_MCARD_MODEL) && defined(TSCFS)
STATIC _TscFileSystem TscFsCard;
#elif defined(SDCARD_MODEL) && defined(EFSL)
STATIC EmbeddedFileSystem efsSD;
#endif

/******************************************************************************
 *
 * Function:
 *    CompareFileName
 *
 * Description: 
 *    
 *
 * Return:
 *    None.
 *
 ******************************************************************************/
STATIC BOOL CompareFileName(CHAR *dst, CHAR *src)
{
    if (!isprint(*dst))
        return FALSE;

    if (*src == '*')
    {
        if ((src = strchr(src, '.')) == 0)
            return TRUE;

        if (*(src + 1) == '*')
            return TRUE;

        if ((dst = strchr(dst, '.')) == 0)
            return FALSE;
     }

    while (1)
    {
        if (*dst == '.' && *src == '.')
            break;

        if (*dst++ != *src++)
            return FALSE;

        if (*dst == 0 && *src == 0)
            return TRUE;
    }

    if (*(src + 1) == '*')
        return TRUE;

    if (strcmp(dst, src) == 0)
        return TRUE;

    return FALSE;
}

#if defined(TSCFS)
STATIC INT TscFs_FindHandle(_TscFileSystem *TscFs, CHAR *filename)
{
    INT i;

    for (i = 0; i < HANDLE_MAX; i++)
    {
        if (FileHandle[i].TscFile.TscFs == TscFs)
        {
            if (filename == _NULL)
                return i;

            if (strcmp((CHAR *)FileHandle[i].TscFile.FileTable->FileName, filename) == 0)
                return i;
        }
    }
    return (-1);
}
#endif

#if defined(EFSL)
STATIC INT efs_FindHandle(FileSystem *fs, CHAR *filename)
{
    CHAR ffname[11];
    INT i;

    for (i = 0; i < HANDLE_MAX; i++)
    {
        if (FileHandle[i].efsFile.fs == fs)
        {
            if (filename == _NULL)
                return i;

            file_normalToFatName((CHAR *)filename, ffname);
            if (memcmp((CHAR *)FileHandle[i].efsFile.DirEntry.FileName, ffname, 11) == 0)
                return i;
        }
    }
    return (-1);
}
#endif

#if defined(FLASH_MCARD_MODEL) || defined(SDCARD_MODEL)
BOOL IsCardDevice(VOID)
{
#if defined(FLASH_MCARD_MODEL) && defined(TSCFS)
    return TscFs_IsCardDevice(&TscFsCard);
#elif defined(SDCARD_MODEL) && defined(EFSL)
    return efs_IsCardDevice(&efsSD.myFs);
#else
    return FALSE;
#endif
    
}
#endif

/******************************************************************************
 *
 * Function:
 *    InitialFile
 *
 * Description: 
 *    This function initial all device of a file system
 *
 * Return:
 *    None.
 *
 ******************************************************************************/
VOID InitialFile(XCALLBACK MakeMsg)
{
#if defined(TSCFS)
    INT PhysicalRAM, CapacityRAM, FilesRAM, FilesFlash, FilesCard;
    FLOAT data;

    PhysicalRAM = RAM_PHYSICAL;
    CapacityRAM = RAM_CAPACITY;

    if (GetProfileInt("ALLOCATION SIZE DRAM", &data))
        CapacityRAM = (INT)data * 1024;

    FilesRAM = RAM_FILE_QUANTITY;
    if (GetProfileInt("FILE QUANTITY DRAM", &data))
        FilesRAM = (INT)data;

    FilesFlash = FLASH_FILE_QUANTITY;
    if (GetProfileInt("FLASH QUANTITY", &data))
        FilesFlash = (INT)data;

    FilesCard = CARD_FILE_QUANTITY;
    if (GetProfileInt("CARD QUANTITY", &data))
        FilesFlash = (INT)data;
#endif

    memset(FileHandle, 0, sizeof(FileHandle));

#if defined(TSCFS)
    if (InitFileRAM(&TscFsRAM, PhysicalRAM, CapacityRAM, FilesRAM) == (-2))
        MakeTscFileSystam(&TscFsRAM);
#endif

#if defined(TSCFS)
    if (InitFileFlash(&TscFsFlash, FilesFlash) == (-2))
    {
        if (MakeMsg) MakeMsg();
        MakeTscFileSystam(&TscFsFlash);
    }
#endif

#if defined(DEFAULT_MCARD_MODEL) && defined(TSCFS)
    if (InitFileDefault(&TscFsDefault) == (-2))
    {
        if (MakeMsg) MakeMsg();
        MakeTscFileSystam(&TscFsDefault);
    }

#elif defined(FLASH_MCARD_MODEL) && defined(TSCFS)
    if (InitFileCard(&TscFsCard, FilesCard) == (-2))
    {
        if (MakeMsg) MakeMsg();
        MakeTscFileSystam(&TscFsCard);
    }
#elif defined(SDCARD_MODEL) && defined(EFSL)
    if (efs_init(&efsSD, 0) == (-2))
    {
        if (!efs_IsWriteProtect(&efsSD.myFs))
        {
            if (MakeMsg) MakeMsg();
            if (mkfs_makevfat(&efsSD.myPart) == 0)
                efs_init(&efsSD, 0);
        }
    }

#endif
}

/******************************************************************************
 *
 * Function:
 *    EmptySpace
 *
 * Description: 
 *    计算真正可立即使用的內存空间
 *
 * Return:
 *    returns a value the empty space in kbytes.
 *
 ******************************************************************************/
INT EmptySpace(_eFileDevice device)
{
    switch (device)
    {
        case DRAM_DEVICE:
#if defined(TSCFS)
            return TscFs_EmptySpace(&TscFsRAM);
#else
            break;
#endif

        case FLASH_DEVICE:
#if defined(TSCFS)
            return TscFs_EmptySpace(&TscFsFlash);
#else
            break;
#endif
        case CARD_DEVICE:
#if defined(FLASH_MCARD_MODEL) && defined(TSCFS)
            if (IsCardDevice())
                return TscFs_EmptySpace(&TscFsCard);

#elif defined(SDCARD_MODEL) && defined(EFSL)
            if (IsCardDevice())
                return efs_AvailableSpace(&efsSD.myFs);
#endif
            break;
    }

    return (0);
}

/******************************************************************************
 *
 * Function:
 *    FreeSpace
 *
 * Description: 
 *    计算可用的內存空间(包含那些尚未清空的Sectors)
 *
 * Return:
 *    returns a value the free space in kbytes.
 *
 ******************************************************************************/
INT FreeSpace(_eFileDevice device)
{
    switch (device)
    {
        case DRAM_DEVICE:
#if defined(TSCFS)
            return TscFs_FreeSpace(&TscFsRAM);
#else
            break;
#endif

        case FLASH_DEVICE:
#if defined(TSCFS)
            return TscFs_FreeSpace(&TscFsFlash);
#else
            break;
#endif
            

        case CARD_DEVICE:
#if defined(FLASH_MCARD_MODEL) && defined(TSCFS)
            if (IsCardDevice())
                return TscFs_FreeSpace(&TscFsCard);

#elif defined(SDCARD_MODEL) && defined(EFSL)
            if (IsCardDevice())
                return efs_AvailableSpace(&efsSD.myFs);
#endif
            break;
    }

    return (0);
}

/******************************************************************************
 *
 * Function:
 *    TotalSpace
 *
 * Description: 
 *    
 *
 * Return:
 *    returns a value the filesystem's capacity in kbytes.
 *
 ******************************************************************************/
INT TotalSpace(_eFileDevice device)
{
    switch (device)
    {
        case DRAM_DEVICE:
#if defined(TSCFS)
            return TscFs_TotalSpace(&TscFsRAM);
#else
            break;
#endif
            

        case FLASH_DEVICE:
#if defined(TSCFS)
            return TscFs_TotalSpace(&TscFsFlash);
#else
            break;
#endif
            

        case CARD_DEVICE:
#if defined(FLASH_MCARD_MODEL) && defined(TSCFS)
            if (IsCardDevice())
                return TscFs_TotalSpace(&TscFsCard);

#elif defined(SDCARD_MODEL) && defined(EFSL)
            if (IsCardDevice())
                return efs_Capacity(&efsSD.myFs);
#endif
            break;
    }

    return (0);
}

/******************************************************************************
 *
 * Function:
 *    PhysicalSpace
 *
 * Description: 
 *    
 *
 * Return:
 *    returns a value the device's capacity in kbytes.
 *
 ******************************************************************************/
INT PhysicalSpace(_eFileDevice device)
{
    switch (device)
    {
        case DRAM_DEVICE:
#if defined(TSCFS)
            return TscFs_PhysicalSpace(&TscFsRAM);
#else
            break;
#endif
            

        case FLASH_DEVICE:
#if defined(TSCFS)
            return TscFs_PhysicalSpace(&TscFsFlash);
#else
            break;
#endif
            

        case CARD_DEVICE:
#if defined(FLASH_MCARD_MODEL) && defined(TSCFS)
            if (IsCardDevice())
                return TscFs_PhysicalSpace(&TscFsCard);

#elif defined(SDCARD_MODEL) && defined(EFSL)
            if (IsCardDevice())
                return efs_Capacity(&efsSD.myFs);
#endif
            break;
    }

    return (0);
}

/******************************************************************************
 *
 * Function:
 *    Fopen
 *
 * Description: 
 *    Opens a stream.
 *
 * Return:
 *    On successful completion fopen returns a pointer to the newly opened stream.
 *    In the event of error it returns NULL.
 *
 ******************************************************************************/
_FileHandle *Fopen(_eFileDevice device, CONST CHAR *filename, CONST CHAR *mode)
{
    _FileHandle *File;
    INT Handle;

    for (Handle = 0; Handle < HANDLE_MAX; Handle++)
    {
#if defined(TSCFS)
        if (FileHandle[Handle].TscFile.TscFs != 0)
            continue;
#endif

#if defined(EFSL)
        if (FileHandle[Handle].efsFile.fs != 0)
            continue;
#endif
            break;
    }

    if (Handle == HANDLE_MAX)
        return _NULL;

    File = &FileHandle[Handle];

    switch (device)
    {
        case DRAM_DEVICE:
#if defined(TSCFS)
            if (TscFs_Fopen(&File->TscFile, &TscFsRAM, (CHAR *)filename, *mode) == 0)
                return File;
#endif
            break;

        case FLASH_DEVICE:
#if defined(TSCFS)
            if (TscFs_Fopen(&File->TscFile, &TscFsFlash, (CHAR *)filename, *mode) == 0)
                return File;
#endif
            break;

        case CARD_DEVICE:
#if defined(DEFAULT_MCARD_MODEL) && defined(TSCFS)
            if (TscFs_Fopen(&File->TscFile, &TscFsDefault, (CHAR *)filename, *mode) == 0)
                return File;

#elif defined(FLASH_MCARD_MODEL) && defined(TSCFS)
            if (IsCardDevice())
            {
                if (TscFs_Fopen(&File->TscFile, &TscFsCard, (CHAR *)filename, *mode) == 0)
                    return File;
            }

#elif defined(SDCARD_MODEL) && defined(EFSL)
            if (IsCardDevice())
            {
                if (*mode == 'r' || !efs_IsWriteProtect(&efsSD.myFs))
                {
                    if (file_fopen(&File->efsFile, &efsSD.myFs, (CHAR *)filename, *mode) == 0)
                        return File;
                }
            }
#endif
            break;
    }

    return    _NULL;
}

/******************************************************************************
 *
 * Function:
 *    Fclose
 *
 * Description: 
 *    Closes a stream.
 *
 * Return:
 *    fclose returns 0 on success. It returns EOF if any errors were detected.
 *
 ******************************************************************************/
INT Fclose(_FileHandle *stream)
{
    if (stream == _NULL)
        return END_OF_FILE;    // fclose returns EOF if any errors were detected.

#if defined(TSCFS)
    else if (stream->TscFile.TscFs != 0)
    {
        if (TscFs_Fclose(&stream->TscFile) == 0)
            return (0);        // fclose returns 0 on success.
    }
#endif

#if defined(EFSL)
    else if (stream->efsFile.fs != 0)
    {
        FileSystem *fs = 0;

        if (file_getAttr(&stream->efsFile, FILE_STATUS_WRITE))
            fs = stream->efsFile.fs;

        if (file_fclose(&stream->efsFile) == 0)
        {
            if (fs && !efs_IsWriteProtect(fs))
                fs_flushFs(fs);
            return (0);        // fclose returns 0 on success.
        }
    }
#endif

    return    END_OF_FILE;    // fclose returns EOF if any errors were detected.
}

/******************************************************************************
 *
 * Function:
 *    Fgetc
 *
 * Description: 
 *    Gets character from stream.
 *
 * Return:
 *    On success fgetc returns the character read after converting it to an int
 *    without sign extension. On end-of-file or error it returns EOF.
 *
 ******************************************************************************/
INT Fgetc(_FileHandle *stream)
{
    if (stream == _NULL)
        return END_OF_FILE;    // On end-of-file or error it returns EOF.

#if defined(TSCFS)
    else if (stream->TscFile.TscFs != 0)
    {
        return TscFs_Fgetc(&stream->TscFile);
    }
#endif

#if defined(EFSL)
    else if (stream->efsFile.fs != 0)
    {
        BYTE data;

        if (file_read(&stream->efsFile, 1, (BYTE *)&data) != 0)
            return (INT)data;    // On success fgetc returns the character read
                                // after converting it to an int without sign extension.
    }
#endif

    return    END_OF_FILE;    // On end-of-file or error it returns EOF.
}

/******************************************************************************
 *
 * Function:
 *    Fgets
 *
 * Description: 
 *    Gets a string from a stream.
 *
 * Return:
 *    On success fgets returns the string pointed to by s.
 *    it returns NULL on end-of-file or error.
 *
 ******************************************************************************/
CHAR *Fgets(CHAR *s, INT n, _FileHandle *stream)
{
    INT i, data, follow;

    // The function stops reading when it reads either n - 1 characters.
    for (i = 0; i < (n - 1); i++)
    {
        if ((data = Fgetc(stream)) == END_OF_FILE)
        {
            *(s + i) = '\0';    // A null byte is appended to s to mark the end of the string.
            return (CHAR *)_NULL;    // fgets returns NULL on end-of-file or error.
        }

        // fgets reads characters from stream into the string s.
        *(s + i) = (CHAR)data;

        // The function stops reading a newline character whichever comes first.
        if ((CHAR)data == '\r' || (CHAR)data == '\n')
        {
            i += 1;        // fgets retains the newline character at the end of s.

            // The function stops reading when it reads either n - 1 characters.
            if (i >= (n - 1))
                break;

            if ((follow = Fgetc(stream)) == END_OF_FILE)
                break;

            if (follow == data || ((CHAR)follow != '\r' && (CHAR)follow != '\n'))
            {
                Fseek(stream, (-1), SEEK_CUR);
                break;
            }

            // fgets retains the newline character at the end of s.
            *(s + i) = (CHAR)follow;
            i += 1;
            break;
        }
    }
    *(s + i) = '\0';    // A null byte is appended to s to mark the end of the string.
    return s;            // On success fgets returns the string pointed to by s.
}

/******************************************************************************
 *
 * Function:
 *    Fputc
 *
 * Description: 
 *    Puts a character on a stream.
 *
 * Return:
 *    On success, fputc returns the character c. On error, it returns EOF.
 *
 ******************************************************************************/
INT Fputc(INT c, _FileHandle *stream)
{
    if (stream == _NULL)
        return END_OF_FILE;    // On error, fputc returns EOF.

#if defined(TSCFS)
    else if (stream->TscFile.TscFs != 0)
    {
        return TscFs_Fputc(c, &stream->TscFile);
    }
#endif

#if defined(EFSL)
    else if (stream->efsFile.fs != 0 && !efs_IsWriteProtect(stream->efsFile.fs))
    {
        BYTE data;

        data = (BYTE)c;
        if (file_write(&stream->efsFile, 1, (BYTE *)&data) != 0)
            return (BYTE)c;
    }
#endif

    return    END_OF_FILE;    // On error, fputc returns EOF.
}

/******************************************************************************
 *
 * Function:
 *    Fputs
 *
 * Description: 
 *    Outputs a string on a stream.
 *
 * Return:
 *    On success fputs returns a non-negative value. 
 *    On error it returns a value of EOF.
 *
 ******************************************************************************/
INT Fputs(CONST CHAR *s, _FileHandle *stream)
{
    INT n = strlen(s);
    // fputs copies the null-terminated string s to the given output stream;
    // it does not append a newline character and the terminating null character is not copied.
    if (Fwrite(s, sizeof(CHAR), n, stream) != n)
        return END_OF_FILE;
    return _NULL;
}

/******************************************************************************
 *
 * Function:
 *    Fread
 *
 * Description: 
 *    Reads data from a stream.
 *
 * Return:
 *    On success fread returns the number of items (not bytes) actually read. 
 *    On end-of-file or error it returns a short count (possibly 0).
 *
 ******************************************************************************/
INT Fread(VOID *ptr, INT size, INT n, _FileHandle *stream)
{
    if (size == 0)
        return (0);

    if (stream == _NULL)
        return (0);

#if defined(TSCFS)
    else if (stream->TscFile.TscFs != 0)
    {
        if (TscFs_Fread(ptr, size, n, &stream->TscFile) != 0)
            return n;
    }
#endif

#if defined(EFSL)
    else if (stream->efsFile.fs != 0)
    {
        if (stream->efsFile.FilePtr + (n * size) > stream->efsFile.FileSize)
            n = (stream->efsFile.FileSize - stream->efsFile.FilePtr) / size;

        // The total number of bytes read is (n * size).
        if (file_read(&stream->efsFile, (n * size), (BYTE *)ptr) != 0)
            return n;
    }
#endif

    return    (0);
}

/******************************************************************************
 *
 * Function:
 *    Fwrite
 *
 * Description: 
 *    Writes to a stream.
 *
 * Return:
 *    On successful completion fwrite returns the number of items (not bytes) actually written. 
 *    On error it returns a short count.
 *
 ******************************************************************************/
INT Fwrite(CONST VOID *ptr, INT size, INT n, _FileHandle *stream)
{
    if (stream == _NULL)
        return (0);

#if defined(TSCFS)
    else if (stream->TscFile.TscFs != 0)
    {
        return TscFs_Fwrite(ptr, size, n, &stream->TscFile);
    }
#endif

#if defined(EFSL)
    else if (stream->efsFile.fs != 0 && !efs_IsWriteProtect(stream->efsFile.fs))
    {
        // The total number of bytes written is (n x size).
        return (file_write(&stream->efsFile, (n * size), (BYTE *)ptr) / size);
    }
#endif

    return    (0);
}

/******************************************************************************
 *
 * Function:
 *    Feof
 *
 * Description: 
 *    Detects end-of-file on a stream.
 *
 * Return:
 *    feof returns nonzero if an end-of-file indicator was detected on the last
 *    input operation on the named stream and 0 if end-of-file has not been reached.
 *
 ******************************************************************************/
INT Feof(_FileHandle *stream)
{
    if (stream == _NULL)
        return END_OF_FILE;

#if defined(TSCFS)
    else if (stream->TscFile.TscFs != 0)
    {
        if (stream->TscFile.FilePtr < stream->TscFile.FileSize)
            return (0);
    }
#endif

#if defined(EFSL)
    else if (stream->efsFile.fs != 0)
    {
        if (stream->efsFile.FilePtr < stream->efsFile.FileSize)
            return (0);
    }
#endif

    return    END_OF_FILE;
}

/******************************************************************************
 *
 * Function:
 *    Fseek
 *
 * Description: 
 *    Repositions a file pointer on a stream.
 *
 * Return:
 *    fseek returns 0 if the pointer is successfully moved and nonzero on failure.
 *
 ******************************************************************************/
INT Fseek(_FileHandle *stream, LONG offset, INT whence)
{
    if (stream == _NULL)
        return END_OF_FILE;

#if defined(TSCFS)
    else if (stream->TscFile.TscFs != 0)
    {
        if (whence == SEEK_CUR)
            offset = stream->TscFile.FilePtr + offset;
        else if (whence == SEEK_END)
            offset = stream->TscFile.FileSize + offset;

        if (TscFs_Fsetpos(&stream->TscFile, offset) == 0)
            return (0);
    }
#endif

#if defined(EFSL)
    else if (stream->efsFile.fs != 0)
    {
        if (whence == SEEK_CUR)
            offset = stream->efsFile.FilePtr + offset;
        else if (whence == SEEK_END)
            offset = stream->efsFile.FileSize + offset;

        if (file_setpos(&stream->efsFile, offset) == 0)
            return (0);
    }
#endif

    return    END_OF_FILE;
}

/******************************************************************************
 *
 * Function:
 *    Ftell
 *
 * Description: 
 *    Returns the current file pointer.
 *
 * Return:
 *    ftell returns the current file pointer position on success.
 *
 ******************************************************************************/
LONG Ftell(_FileHandle *stream)
{
    if (stream == _NULL)
        return (0);

#if defined(TSCFS)
    else if (stream->TscFile.TscFs != 0)
        return (stream->TscFile.FilePtr);
#endif

#if defined(EFSL)
    else if (stream->efsFile.fs != 0)
        return (stream->efsFile.FilePtr);
#endif

    return (0);
}

/******************************************************************************
 *
 * Function:
 *    FileNo
 *
 * Description: 
 *    Gets the file handle.
 *
 * Return:
 *    returns the integer file handle associated with stream.
 *
 ******************************************************************************/
INT FileNo(_FileHandle *stream)
{
    INT i;

    for (i = 0; i < HANDLE_MAX; i++)
    {
        if (&FileHandle[i] == stream)
            return i;
    }
    return (-1);
}

/******************************************************************************
 *
 * Function:
 *    Open
 *
 * Description: 
 *    Opens a file for reading or writing.
 *
 * Return:
 *    On success, Open returns a nonnegative integer (the file handle).
 *    On error, Open returns -1.
 *
 ******************************************************************************/
INT Open(_eFileDevice device, CONST CHAR *path, INT access)
{
    if ((access & O_APPEND) || (access & O_CREAT))
        return FileNo(Fopen(device, path, "a"));
    else if (access & O_WRONLY)
        return FileNo(Fopen(device, path, "w"));
    else if (access & O_RDONLY)
        return FileNo(Fopen(device, path, "r"));

    return (-1);
}

/******************************************************************************
 *
 * Function:
 *    Close
 *
 * Description: 
 *    Closes a file
 *
 * Return:
 *    Upon successful completion, Close returns 0. 
 *    On error, Close returns a value of -1.
 *
 ******************************************************************************/
INT Close(INT handle)
{
    if (handle < 0 || handle >= HANDLE_MAX)
        return (-1);

    if (Fclose(&FileHandle[handle]) == 0)
        return (0);

    return (-1);
}

/******************************************************************************
 *
 * Function:
 *    Read
 *
 * Description: 
 *    Reads from file.
 *
 * Return:
 *    On successful completion, Read returns an integer indicating the number of
 *    bytes placed in the buffer.
 *    On end-of-file, read returns 0. On error, Read returns -1.
 *
 ******************************************************************************/
INT Read(INT handle, VOID *buf, UINT len)
{
    if (handle < 0 || handle >= HANDLE_MAX)
        return (-1);

    if (Fread(buf, sizeof(CHAR), len, &FileHandle[handle]) == len)
        return len;

    return (0);
}

/******************************************************************************
 *
 * Function:
 *    Write
 *
 * Description: 
 *    Writes to a file.
 *
 * Return:
 *    Write returns the number of bytes written.
 *    In case of error, Write returns -1.
 *
 ******************************************************************************/
INT Write(INT handle, VOID *buf, UINT len)
{
    if (handle < 0 || handle >= HANDLE_MAX)
        return (-1);

    return Fwrite(buf, sizeof(CHAR), len, &FileHandle[handle]);
}

/******************************************************************************
 *
 * Function:
 *    Eof
 *
 * Description: 
 *    Checks for end-of-file.
 *
 * Return:
 *    If the current position is end-of-file, Eof returns the value 1; otherwise,
 *    it returns 0.
 *    A return value of -1 indicates an error
 *
 ******************************************************************************/
INT Eof(INT handle)
{
    if (handle < 0 || handle >= HANDLE_MAX)
        return (-1);

    if (Feof(&FileHandle[handle]) == END_OF_FILE)
        return (1);

    return (0);
}

/******************************************************************************
 *
 * Function:
 *    Lseek
 *
 * Description: 
 *    Moves file pointer.
 *
 * Return:
 *    Lseek returns the offset of the pointer's new position measured in bytes
 *    from the file beginning.
 *    Lseek returns -1L on error.
 *
 ******************************************************************************/
LONG Lseek(INT handle, LONG offset, INT fromwhere)
{
    if (handle < 0 || handle >= HANDLE_MAX)
        return (-1);

    if (Fseek(&FileHandle[handle], offset, fromwhere) == (0))
        return offset;

    return (-1);
}

/******************************************************************************
 *
 * Function:
 *    Tell
 *
 * Description: 
 *    Gets the current position of a file pointer.
 *
 * Return:
 *    Tell returns the current file pointer position.
 *    A return of -1 (long) indicates an error.
 *
 ******************************************************************************/
LONG Tell(INT handle)
{
    if (handle < 0 || handle >= HANDLE_MAX)
        return (-1);

    return Ftell(&FileHandle[handle]);
}

/******************************************************************************
 *
 * Function:
 *    FileLength
 *
 * Description: 
 *    Gets file size in bytes.
 *
 * Return:
 *    On success filelength returns a long value the file length in bytes.
 *
 ******************************************************************************/
LONG FileLength(INT handle)
{
    if (handle == (-1))
        return (0);

#if defined(TSCFS)
    else if (FileHandle[handle].TscFile.TscFs != 0)
        return (FileHandle[handle].TscFile.FileSize);
#endif

#if defined(EFSL)
    else if ( FileHandle[handle].efsFile.fs != 0 )
        return (FileHandle[handle].efsFile.FileSize);
#endif

    return    (0);
}

/******************************************************************************
 *
 * Function:
 *    Remove
 *
 * Description: 
 *    Removes a file.
 *
 * Return:
 *    On successful completion, remove returns 0.
 *    On error, it returns -1.
 *
 ******************************************************************************/
INT Remove(_eFileDevice device, CONST CHAR *filename)
{
    switch (device)
    {
        case DRAM_DEVICE:
#if defined(TSCFS)
            if (TscFs_FindHandle(&TscFsRAM, (CHAR *)filename) == (-1))
                return TscFs_Remove(&TscFsRAM, filename);
#endif
            break;

        case FLASH_DEVICE:
#if defined(TSCFS)
            if (TscFs_FindHandle(&TscFsFlash, (CHAR *)filename) == (-1))
                return TscFs_Remove(&TscFsFlash, filename);
#endif
            break;

        case CARD_DEVICE:
#if defined(FLASH_MCARD_MODEL) && defined(TSCFS)
            if (IsCardDevice())
            {
                if (TscFs_FindHandle(&TscFsCard, (CHAR *)filename) == (-1))
                    return TscFs_Remove(&TscFsCard, filename);
            }

#elif defined(SDCARD_MODEL) && defined(EFSL)
            if (IsCardDevice() && !efs_IsWriteProtect(&efsSD.myFs))
            {
                if (efs_FindHandle(&efsSD.myFs, (CHAR *)filename) == (-1))
                {
                    if (rmfile(&efsSD.myFs, (BYTE *)filename) == (0))
                    {
                        fs_flushFs(&efsSD.myFs);
                        return (0);
                    }
                }
            }
#endif
            break;
    }

    return    (-1);
}

/******************************************************************************
 *
 * Function:
 *    OpenList
 *
 * Description: 
 *    
 *
 * Return:
 *    If the function succeeds, the return value is nonzero.
 *    If the function fails, the return value is zero.
 *
 ******************************************************************************/
BOOL OpenList(_FileList *list, _eFileDevice device)
{
    if (list == _NULL)
        return FALSE;

    memset(list, 0, sizeof(_FileList));

    switch (device)
    {
        case DRAM_DEVICE:
#if defined(TSCFS)
            if (TscFs_OpenList(&list->TscList, &TscFsRAM) == 0)
                return TRUE;
#endif
            break;

        case FLASH_DEVICE:
#if defined(TSCFS)
            if (TscFs_OpenList(&list->TscList, &TscFsFlash) == 0)
                return TRUE;
#endif
            break;

        case CARD_DEVICE:
#if defined(DEFAULT_MCARD_MODEL) && defined(TSCFS)
            if (TscFs_OpenList(&list->TscList, &TscFsDefault) == 0)
                return TRUE;

#elif defined(FLASH_MCARD_MODEL) && defined(TSCFS)
            if (IsCardDevice())
            {
                if (TscFs_OpenList(&list->TscList, &TscFsCard) == 0)
                    return TRUE;
            }

#elif defined(SDCARD_MODEL) && defined(EFSL)
            if (IsCardDevice())
            {
                if (ls_openDir(&list->efsList, &efsSD.myFs, "/") == 0)
                    return TRUE;
            }
#endif
            break;
    }

    return FALSE;
}

/******************************************************************************
 *
 * Function:
 *    NextFile
 *
 * Description: 
 *    
 *
 * Return:
 *    If the function succeeds, the return value is nonzero.
 *    If the function fails, the return value is zero.
 *
 ******************************************************************************/
BOOL NextFile(_FileList *list, CHAR *filename)
{
    if (list == _NULL)
        return FALSE;

#if defined(TSCFS)
    else if (list->TscList.TscFs != 0)
    {
        while (TscFs_NextFile(&list->TscList) == 0)
        {
            if (CompareFileName((CHAR *)list->TscList.FileName, filename))
            {
                strcpy(list->FileName, (CHAR *)list->TscList.FileName);
                list->FileSize = list->TscList.FileSize;
                return TRUE;
            }
        }
    }
#endif

#if defined(EFSL)
    else if (list->efsList.fs != 0)
    {
        while (ls_getNext(&list->efsList) == 0)
        {
            ListDirEntry *entry = &list->efsList.currentEntry;
            CHAR name[FILENAME_LENGTH];
            INT n, i;

            if (entry->Attribute & (ATTR_HIDDEN | ATTR_SYSTEM | ATTR_VOLUME_ID | ATTR_DIRECTORY))
                continue;

            for (n = i = 0; i < LIST_MAXLENFILENAME - 1; i++)
            {
                if (isgraph(entry->FileName[i]))
                {
                    if (i == 8)
                        name[n++] = '.';
                    name[n++] = entry->FileName[i];
                }
            }
            name[n] = '\0';

            if (CompareFileName(name, filename))
            {
                strcpy(list->FileName, name);
                list->FileSize = entry->FileSize;
                return TRUE;
            }
        }
    }
#endif

    return FALSE;
}

/******************************************************************************
 *
 * Function:
 *    PrevFile
 *
 * Description: 
 *    
 *
 * Return:
 *    If the function succeeds, the return value is nonzero.
 *    If the function fails, the return value is zero.
 *
 ******************************************************************************/
BOOL PrevFile(_FileList *list, CHAR *filename)
{
    if (list == _NULL)
        return FALSE;

#if defined(TSCFS)
    else if (list->TscList.TscFs != 0)
    {
        while (TscFs_PrevFile(&list->TscList) == 0)
        {
            if (CompareFileName((CHAR *)list->TscList.FileName, filename))
            {
                strcpy(list->FileName, (CHAR *)list->TscList.FileName);
                list->FileSize = list->TscList.FileSize;
                return TRUE;
            }
        }
    }
#endif

#if defined(EFSL)
    else if (list->efsList.fs != 0)
    {
        while (ls_getPrev(&list->efsList) == 0)
        {
            ListDirEntry *entry = &list->efsList.currentEntry;
            CHAR name[FILENAME_LENGTH];
            INT n, i;

            if (entry->Attribute & (ATTR_HIDDEN | ATTR_SYSTEM | ATTR_VOLUME_ID | ATTR_DIRECTORY))
                continue;

            for (n = i = 0; i < LIST_MAXLENFILENAME - 1; i++)
            {
                if (isgraph(entry->FileName[i]))
                {
                    if (i == 8)
                        name[n++]= '.';
                    name[n++] = entry->FileName[i];
                }
            }
            name[n] = '\0';

            if (CompareFileName(name, filename))
            {
                strcpy(list->FileName, name);
                list->FileSize = entry->FileSize;
                return TRUE;
            }
        }
    }
#endif

    return FALSE;
}

/******************************************************************************
 *
 * Function:
 *    DeleteFile
 *
 * Description: 
 *    The DeleteFile function deletes an existing file.
 *
 * Return:
 *    If the function succeeds, the return value is nonzero.
 *    If the function fails, the return value is zero.
 *
 ******************************************************************************/
BOOL DeleteFile(_eFileDevice device, CHAR *filename)
{
    _FileList List;

    if (strcmp(filename, "*") != 0 && strcmp(filename, "*.*") != 0)
    {
        OpenList(&List, device);
        while (NextFile(&List, filename))
            Remove(device, List.FileName);

        return TRUE;
    }

    switch (device)
    {
        case DRAM_DEVICE:
#if defined(TSCFS)
            if (TscFs_FindHandle(&TscFsRAM, _NULL) != (-1))
                return FALSE;
            MakeTscFileSystam(&TscFsRAM);
#endif
            break;

        case FLASH_DEVICE:
#if defined(TSCFS)
            if (TscFs_FindHandle(&TscFsFlash, _NULL) != (-1))
                return FALSE;
            MakeTscFileSystam(&TscFsFlash);
#endif
            break;

        case CARD_DEVICE:
#if defined(FLASH_MCARD_MODEL) && defined(TSCFS)
            if (IsCardDevice())
            {
                if (TscFs_FindHandle(&TscFsCard, _NULL) != (-1))
                    return FALSE;
                MakeTscFileSystam(&TscFsCard);
            }

#elif defined(SDCARD_MODEL) && defined(EFSL)
            if (IsCardDevice() && !efs_IsWriteProtect(&efsSD.myFs))
            {
                if (efs_FindHandle(&efsSD.myFs, _NULL) != (-1))
                    return FALSE;
                if (mkfs_makevfat(&efsSD.myPart) != 0)
                    return FALSE;
                efs_init(&efsSD, 0);
            }
#endif
            break;
    }

    return TRUE;
}

/******************************************************************************
 *
 * Function:
 *    CopyFile
 *
 * Description: 
 *    The CopyFile function copies an existing file to a new file. 
 *
 * Return:
 *    If the function succeeds, the return value is nonzero.
 *    If the function fails, the return value is zero.
 *
 ******************************************************************************/
BOOL CopyFile(_eFileDevice existdev, CHAR *existname, _eFileDevice newdev, CHAR *newname)
{
    _FileHandle *ExistFile, *NewFile;
    _FileList ExistList;
    CHAR NewFileName[FILENAME_LENGTH];
    BOOL ret = TRUE;
    INT state = END_OF_FILE;
    INT i;

    OpenList(&ExistList, existdev);
    while (NextFile(&ExistList, existname))
    {
        if (*newname == '*')    // if *.???
            strcpy(NewFileName, ExistList.FileName);
        else
            strcpy(NewFileName, newname);

        *strchr(NewFileName, '.') = '\0';

        if (*(strchr(newname, '.') + 1) == '*')    // if ???.*
            strcat(NewFileName, strchr(ExistList.FileName, '.'));
        else
            strcat(NewFileName, strchr(newname, '.'));

        if ((ExistFile = Fopen(existdev, ExistList.FileName, "r")) == _NULL)
            break;

        Remove(newdev, NewFileName);
        NewFile = Fopen(newdev, NewFileName, "w");
        for (i = 0; i < ExistList.FileSize; i++)
        {
            if ((state = Fputc(Fgetc(ExistFile), NewFile)) == END_OF_FILE)
                break;
        }
        Fclose(NewFile);
        Fclose(ExistFile);

        if (state == END_OF_FILE)
        {
            Remove(newdev, NewFileName);
            ret = FALSE;
        }
    }
    return ret;
}

File.h               。。。。。。。。。。。。。。。。。。。。。。。。。。。。。

#ifndef FILE_H

/******************************************************************************
 *                                                                            *
 *                         M O D U L E   D E F I N E                          *
 *                                                                            *
 ******************************************************************************/

#define FILE_H

/******************************************************************************
 *                                                                            *
 *        C O M P I L E R   D E F I N E D   I N C L U D E   F I L E S         *
 *                                                                            *
 ******************************************************************************/

/* None */

/******************************************************************************
 *                                                                            *
 *            U S E R   D E F I N E D   I N C L U D E   F I L E S             *
 *                                                                            *
 ******************************************************************************/

#if defined(TSCFS)
#include "TscFs\TscFs_File.h"
#endif

#if defined(EFSL)
#include "EFSL\efsl_efs.h"
#endif

#ifdef __cplusplus
extern "C" {            /* Assume C declarations for C++ */
#endif    /* __cplusplus */

/******************************************************************************
 *                                                                            *
 *                        G L O B A L   D E F I N E S                         *
 *                                                                            *
 ******************************************************************************/

#define O_RDONLY    (1 << 0)
#define O_WRONLY    (1 << 1)
#define O_RDWR        (O_RDONLY | O_WRONLY)
#define O_APPEND    (1 << 2)
#define O_CREAT        (1 << 3)

#define SEEK_SET                0
#define SEEK_CUR                1
#define SEEK_END                2

#define END_OF_FILE                -1

#define FILENAME_LENGTH            16

/******************************************************************************
 *                                                                            *
 *                 S T R U C T U R E   D E F I N I T I O N S                  *
 *                                                                            *
 ******************************************************************************/

typedef enum
{
    NO_SELECT_DEVICE,
    DRAM_DEVICE,
    FLASH_DEVICE,
    CARD_DEVICE,
} _eFileDevice;

typedef struct
{
    INT            Dummy;

#if defined(TSCFS)
    _TscFile    TscFile;
#endif

#if defined(EFSL)
    File        efsFile;
#endif

} _FileHandle;

typedef struct
{
    CHAR        FileName[FILENAME_LENGTH];
    DWORD        FileSize;

#if defined(TSCFS)
    _TscList    TscList;
#endif

#if defined(EFSL)
    DirList        efsList;
#endif

} _FileList;

/******************************************************************************
 *                                                                            *
 *    G L O B A L   V A R I A B L E S   -   N O   I N I T I A L I Z E R S     *
 *                                                                            *
 ******************************************************************************/

#ifdef FILE_C
#define EXTERN 
#else
#define EXTERN extern
#endif

/******************************************************************************
 *                                                                            *
 *       G L O B A L   V A R I A B L E S   -   I N I T I A L I Z E R S        *
 *                                                                            *
 ******************************************************************************/

/* None */

/******************************************************************************
 *                                                                            *
 *                   F U N C T I O N   P R O T O T Y P E S                    *
 *                                                                            *
 ******************************************************************************/

#if defined(FLASH_MCARD_MODEL) || defined(SDCARD_MODEL)
BOOL IsCardDevice(VOID);
#endif

VOID InitialFile(XCALLBACK);

INT EmptySpace(_eFileDevice);
INT FreeSpace(_eFileDevice);
INT TotalSpace(_eFileDevice);
INT PhysicalSpace(_eFileDevice);

_FileHandle *Fopen(_eFileDevice, CONST CHAR *, CONST CHAR *);
INT Fclose(_FileHandle *);
INT Fgetc(_FileHandle *);
CHAR *Fgets(CHAR *, INT, _FileHandle *);
INT Fputc(INT, _FileHandle *);
INT Fputs(CONST CHAR *, _FileHandle *);
INT Fread(VOID *, INT, INT, _FileHandle *);
INT Fwrite(CONST VOID *, INT, INT, _FileHandle *);
INT Feof(_FileHandle *);
INT Fseek(_FileHandle *, LONG, INT);
LONG Ftell(_FileHandle *);
INT FileNo(_FileHandle *);
INT Open(_eFileDevice, CONST CHAR *, INT);
INT Close(INT);
INT Read(INT, VOID *, UINT);
INT Write(INT, VOID *, UINT);
INT Eof(INT);
LONG Lseek(INT, LONG, INT);
LONG Tell(INT);
LONG FileLength(INT);
INT Remove(_eFileDevice, CONST CHAR *);
BOOL OpenList(_FileList *, _eFileDevice);
BOOL NextFile(_FileList *, CHAR *);
BOOL PrevFile(_FileList *, CHAR *);
BOOL DeleteFile(_eFileDevice, CHAR *);
BOOL CopyFile(_eFileDevice, CHAR *, _eFileDevice, CHAR *);

#undef EXTERN

#ifdef __cplusplus
}                       /* End of extern "C" { */
#endif    /* __cplusplus */

#endif

UromFile.h              。。。。。。。。。。。。。。。。。。。。。。。。。。。。。


#if defined(NUTOS)

const char urom_index_asp[] = 
{
    "<HTML>"
    "<HEAD>"
    "<LINK rel='shortcut icon' href=<%icon%> >"
    "<LINK rel='icon' href=<%icon%> type='image/ico'>"
    "<TITLE><%model_name%> Print Server</TITLE>"
    "</HEAD>"
    "<FRAMESET border=false frameSpacing=0 frameBorder=0 rows=105,*>"
    "<FRAME name=title src=/title.asp scrolling=no target=title>"
    "<FRAME name=setup src=/setup.htm scrolling=no target=setup>"
    "</FRAMESET>"
    "</HTML>"
};

const char urom_title_asp[] = 
{
    "<HTML>"
    "<HEAD>"
    "<STYLE type=text/css>"
    ".maintext {FONT-FAMILY:Arial,Helvetica,sans-serif;FONT-SIZE:12px}"
    ".whitetext{FONT-FAMILY:Arial,Helvetica,sans-serif;FONT-SIZE:12px;FONT-WEIGHT:bold;COLOR:white}"
    "</STYLE>"
    "</HEAD>"
    "<BODY bgColor=white>"
    "<TABLE cellSpacing=0 cellPadding=0 width=730 border=0><TBODY>"
    "<TR><TD width=230><A href=/index.asp target=_top><IMG SRC=<%logo%> border=0></A></TD>"
        "<TD>"
        "<TABLE cellSpacing=0 cellPadding=2 width=100% bgColor=#183C94 border=0><TBODY>"
        "<TR><TD>"
            "<TABLE class=maintext cellSpacing=0 cellPadding=3 width=100% bgColor=#DDDDFF border=0><TBODY>"
                "<TR bgColor=#183C94><TD class=whitetext width=30%>Printer Information</TD><TD></TD></TR>"
                "<TR><TD>Version :</TD><TD><%model_name%> Version <%var_name%> <%ext_name%></TD></TR>"
                "<TR><TD>Checksum :</TD><TD><%checksum%></TD></TR>"
                "<TR><TD>Milage :</TD><TD><%milage%> Km</TD></TR>"
            "</TBODY></TABLE>"
        "</TD></TR>"
        "</TBODY></TABLE>"
        "</TD>"
    "</TR>"
    "</TBODY></TABLE>"
    "</BODY>"
    "</HTML>"
};

const char urom_setup_htm[] = 
{
    "<HTML>"
    "<HEAD></HEAD>"
    "<FRAMESET border=false frameSpacing=0 frameBorder=0 cols=230,*>"
    "<FRAME name=menu src=/menu.htm scrolling=no target=menu>"
    "<FRAME name=content src=/cgi-bin/general.cgi target=content>"
    "</FRAMESET>"
    "</HTML>"
};

const char urom_menu_htm[] = 
{
    "<HTML>"
    "<HEAD>"
    "<STYLE type=text/css>"
    "A:link    {FONT-FAMILY:Arial,Helvetica,sans-serif;FONT-SIZE:12px;FONT-WEIGHT:bold;COLOR:#0061A3}"
    ".whitetext{FONT-FAMILY:Arial,Helvetica,sans-serif;FONT-SIZE:12px;FONT-WEIGHT:bold;COLOR:white}"
    "</STYLE>"
    "</HEAD>"
    "<BODY bgColor=white>"
    "<TABLE cellSpacing=1 width=100% bgColor=#0061A3 border=0><TBODY><TR><TD>"
        "<TABLE cellSpacing=2 cellPadding=2 width=100% bgColor=white border=0><TBODY>"
        "<TR><TD class=whitetext align=middle bgColor=#0061A3>Configuration</TD></TR>"
        "<TR><TD><A href=/cgi-bin/general.cgi target=content style=\"color:#FF0000\">General</A></TD></TR>"
        "<TR><TD><A href=/cgi-bin/adjust.cgi target=content>Adjust</A></TD></TR>"
        "<TR><TD><A href=/cgi-bin/media.cgi target=content>Media</A></TD></TR>"
        "<TR><TD><A href=/cgi-bin/calibrate.cgi target=content>Calibration</A></TD></TR>"
        "<TR><TD><A href=/cgi-bin/serial.cgi target=content>Serial</A></TD></TR>"
        "<TR><TD><A href=/cgi-bin/network.cgi target=content>Network</A></TD></TR>"
        "<TR><TD><A href=/cgi-bin/mail.cgi target=content>Mail</A></TD></TR>"
        "<TR><TD><A href=/cgi-bin/clock.cgi target=content>Clock</A></TD></TR>"
        "<TR><TD><A href=/admin/cgi-bin/password.cgi target=content>Password</A></TD></TR>"
        "</TBODY></TABLE>"
    "</TD></TR></TBODY></TABLE><P>"
    "<TABLE cellSpacing=1 width=100% bgColor=#0061A3 border=0><TBODY><TR><TD>"
        "<TABLE cellSpacing=2 cellPadding=2 width=100% bgColor=white border=0><TBODY>"
        "<TR><TD class=whitetext align=middle bgColor=#0061A3>Tools</TD></TR>"
        "<TR><TD><A href=/cgi-bin/function.cgi target=content>Function</A></TD></TR>"
        "<TR><TD><A href=/cgi-bin/upgrade.cgi target=content>Upgrade</A></TD></TR>"
        "<TR><TD><A href=/cgi-bin/status.cgi target=content>Status</A></TD></TR>"
        "<TR><TD><A href=/cgi-bin/file.cgi target=content>File</A></TD></TR>"
        "</TBODY></TABLE>"
    "</TD></TR></TBODY></TABLE>"
    "</BODY>"
    "</HTML>"
};
#if 0
const char urom_favicon_ico[] = 
{
    0x00, 0x00, 0x01, 0x00, 0x01, 0x00, 0x10, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x68, 0x05, 
    0x00, 0x00, 0x16, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x20, 0x00, 
    0x00, 0x00, 0x01, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
    0x00, 0x00, 0x31, 0x2c, 0xde, 0x00, 0x94, 0x3c, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 
    0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 
    0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
    0x02, 0x02, 0x00, 0x00, 0x02, 0x02, 0x02, 0x02, 0x00, 0x00, 0x00, 0x02, 0x02, 0x02, 0x00, 0x00, 
    0x02, 0x02, 0x00, 0x00, 0x02, 0x02, 0x02, 0x02, 0x02, 0x00, 0x02, 0x02, 0x02, 0x02, 0x00, 0x00, 
    0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x02, 0x02, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 
    0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x02, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 
    0x02, 0x02, 0x00, 0x00, 0x00, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 
    0x02, 0x02, 0x00, 0x00, 0x02, 0x02, 0x02, 0x02, 0x00, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 
    0x02, 0x02, 0x00, 0x00, 0x02, 0x02, 0x00, 0x00, 0x00, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 
    0x02, 0x02, 0x00, 0x00, 0x02, 0x02, 0x00, 0x00, 0x00, 0x02, 0x02, 0x02, 0x00, 0x00, 0x02, 0x02, 
    0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x00, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 
    0x02, 0x02, 0x02, 0x02, 0x00, 0x02, 0x02, 0x02, 0x02, 0x00, 0x00, 0x02, 0x02, 0x02, 0x00, 0x00, 
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0xcc, 0x38, 
    0x00, 0x00, 0xcc, 0x10, 0x00, 0x00, 0xcf, 0x83, 0x00, 0x00, 0xcf, 0x87, 0x00, 0x00, 0xce, 0x07, 
    0x00, 0x00, 0xcc, 0x27, 0x00, 0x00, 0xcc, 0xe7, 0x00, 0x00, 0xcc, 0xe3, 0x00, 0x00, 0x00, 0x10, 
    0x00, 0x00, 0x02, 0x18, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 
};
#else
const char urom_favicon_ico[] = 
{
        0x00, 0x00, 0x01, 0x00, 0x01, 0x00, 0x10, 0x10, 0x10, 0x00, 0x01, 0x00, 0x04, 0x00, 0x28, 0x01,
        0x00, 0x00, 0x16, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x20, 0x00,
        0x00, 0x00, 0x01, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x13, 0x0B,
        0x00, 0x00, 0x13, 0x0B, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF,
        0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0xB9, 0x6D, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00,
        0x00, 0x02, 0x00, 0x20, 0x00, 0x00, 0x22, 0x00, 0x00, 0x22, 0x02, 0x20, 0x00, 0x00, 0x02, 0x20,
        0x02, 0x20, 0x02, 0x20, 0x00, 0x00, 0x02, 0x20, 0x02, 0x20, 0x02, 0x20, 0x00, 0x00, 0x00, 0x22,
        0x22, 0x00, 0x02, 0x22, 0x22, 0x20, 0x00, 0x02, 0x20, 0x00, 0x02, 0x22, 0x22, 0x22, 0x00, 0x02,
        0x20, 0x00, 0x02, 0x20, 0x00, 0x02, 0x00, 0x22, 0x22, 0x00, 0x02, 0x20, 0x00, 0x02, 0x02, 0x22,
        0x02, 0x20, 0x02, 0x20, 0x00, 0x02, 0x02, 0x20, 0x02, 0x22, 0x02, 0x22, 0x22, 0x22, 0x22, 0x00,
        0x00, 0x22, 0x02, 0x22, 0x22, 0x22, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
        0x30, 0x2E, 0x00, 0x00, 0x43, 0x6F, 0x00, 0x00, 0x6F, 0x6E, 0x00, 0x00, 0x6F, 0x67, 0x00, 0x00,
        0x6D, 0x46, 0x00, 0x00, 0x65, 0x73, 0x00, 0x00, 0x3A, 0x5C, 0x00, 0x00, 0x6F, 0x67, 0x00, 0x00,
        0x6D, 0x20, 0x00, 0x00, 0x6C, 0x65, 0x00, 0x00, 0x43, 0x6F, 0x00, 0x00, 0x6F, 0x6E, 0x00, 0x00,
        0x69, 0x6C, 0x00, 0x00, 0x00, 0x43, 0x00, 0x00, 0x50, 0x55, 0x00, 0x00, 0x52, 0x4E,
};
#endif

#if 0
const char urom_tsclogo_gif[] = 
{
    0x47, 0x49, 0x46, 0x38, 0x39, 0x61, 0xd2, 0x00, 0x4f, 0x00, 0xf7, 0x00, 0x00, 0xff, 0xff, 0xff, 
    0xff, 0xff, 0xcc, 0xff, 0xff, 0x99, 0xff, 0xff, 0x66, 0xff, 0xff, 0x33, 0xff, 0xff, 0x00, 0xff, 
    0xcc, 0xff, 0xff, 0xcc, 0xcc, 0xff, 0xcc, 0x99, 0xff, 0xcc, 0x66, 0xff, 0xcc, 0x33, 0xff, 0xcc, 
    0x00, 0xff, 0x99, 0xff, 0xff, 0x99, 0xcc, 0xff, 0x99, 0x99, 0xff, 0x99, 0x66, 0xff, 0x99, 0x33, 
    0xff, 0x99, 0x00, 0xff, 0x66, 0xff, 0xff, 0x66, 0xcc, 0xff, 0x66, 0x99, 0xff, 0x66, 0x66, 0xff, 
    0x66, 0x33, 0xff, 0x66, 0x00, 0xff, 0x33, 0xff, 0xff, 0x33, 0xcc, 0xff, 0x33, 0x99, 0xff, 0x33, 
    0x66, 0xff, 0x33, 0x33, 0xff, 0x33, 0x00, 0xff, 0x00, 0xff, 0xff, 0x00, 0xcc, 0xff, 0x00, 0x99, 
    0xff, 0x00, 0x66, 0xff, 0x00, 0x33, 0xff, 0x00, 0x00, 0xcc, 0xff, 0xff, 0xcc, 0xff, 0xcc, 0xcc, 
    0xff, 0x99, 0xcc, 0xff, 0x66, 0xcc, 0xff, 0x33, 0xcc, 0xff, 0x00, 0xcc, 0xcc, 0xff, 0xcc, 0xcc, 
    0xcc, 0xcc, 0xcc, 0x99, 0xcc, 0xcc, 0x66, 0xcc, 0xcc, 0x33, 0xcc, 0xcc, 0x00, 0xcc, 0x99, 0xff, 
    0xcc, 0x99, 0xcc, 0xcc, 0x99, 0x99, 0xcc, 0x99, 0x66, 0xcc, 0x99, 0x33, 0xcc, 0x99, 0x00, 0xcc, 
    0x66, 0xff, 0xcc, 0x66, 0xcc, 0xcc, 0x66, 0x99, 0xcc, 0x66, 0x66, 0xcc, 0x66, 0x33, 0xcc, 0x66, 
    0x00, 0xcc, 0x33, 0xff, 0xcc, 0x33, 0xcc, 0xcc, 0x33, 0x99, 0xcc, 0x33, 0x66, 0xcc, 0x33, 0x33, 
    0xcc, 0x33, 0x00, 0xcc, 0x00, 0xff, 0xcc, 0x00, 0xcc, 0xcc, 0x00, 0x99, 0xcc, 0x00, 0x66, 0xcc, 
    0x00, 0x33, 0xcc, 0x00, 0x00, 0x99, 0xff, 0xff, 0x99, 0xff, 0xcc, 0x99, 0xff, 0x99, 0x99, 0xff, 
    0x66, 0x99, 0xff, 0x33, 0x99, 0xff, 0x00, 0x99, 0xcc, 0xff, 0x99, 0xcc, 0xcc, 0x99, 0xcc, 0x99, 
    0x99, 0xcc, 0x66, 0x99, 0xcc, 0x33, 0x99, 0xcc, 0x00, 0x99, 0x99, 0xff, 0x99, 0x99, 0xcc, 0x99, 
    0x99, 0x99, 0x99, 0x99, 0x66, 0x99, 0x99, 0x33, 0x99, 0x99, 0x00, 0x99, 0x66, 0xff, 0x99, 0x66, 
    0xcc, 0x99, 0x66, 0x99, 0x99, 0x66, 0x66, 0x99, 0x66, 0x33, 0x99, 0x66, 0x00, 0x99, 0x33, 0xff, 
    0x99, 0x33, 0xcc, 0x99, 0x33, 0x99, 0x99, 0x33, 0x66, 0x99, 0x33, 0x33, 0x99, 0x33, 0x00, 0x99, 
    0x00, 0xff, 0x99, 0x00, 0xcc, 0x99, 0x00, 0x99, 0x99, 0x00, 0x66, 0x99, 0x00, 0x33, 0x99, 0x00, 
    0x00, 0x66, 0xff, 0xff, 0x66, 0xff, 0xcc, 0x66, 0xff, 0x99, 0x66, 0xff, 0x66, 0x66, 0xff, 0x33, 
    0x66, 0xff, 0x00, 0x66, 0xcc, 0xff, 0x66, 0xcc, 0xcc, 0x66, 0xcc, 0x99, 0x66, 0xcc, 0x66, 0x66, 
    0xcc, 0x33, 0x66, 0xcc, 0x00, 0x66, 0x99, 0xff, 0x66, 0x99, 0xcc, 0x66, 0x99, 0x99, 0x66, 0x99, 
    0x66, 0x66, 0x99, 0x33, 0x66, 0x99, 0x00, 0x66, 0x66, 0xff, 0x66, 0x66, 0xcc, 0x66, 0x66, 0x99, 
    0x66, 0x66, 0x66, 0x66, 0x66, 0x33, 0x66, 0x66, 0x00, 0x66, 0x33, 0xff, 0x66, 0x33, 0xcc, 0x66, 
    0x33, 0x99, 0x66, 0x33, 0x66, 0x66, 0x33, 0x33, 0x66, 0x33, 0x00, 0x66, 0x00, 0xff, 0x66, 0x00, 
    0xcc, 0x66, 0x00, 0x99, 0x66, 0x00, 0x66, 0x66, 0x00, 0x33, 0x66, 0x00, 0x00, 0x33, 0xff, 0xff, 
    0x33, 0xff, 0xcc, 0x33, 0xff, 0x99, 0x33, 0xff, 0x66, 0x33, 0xff, 0x33, 0x33, 0xff, 0x00, 0x33, 
    0xcc, 0xff, 0x33, 0xcc, 0xcc, 0x33, 0xcc, 0x99, 0x33, 0xcc, 0x66, 0x33, 0xcc, 0x33, 0x33, 0xcc, 
    0x00, 0x33, 0x99, 0xff, 0x33, 0x99, 0xcc, 0x33, 0x99, 0x99, 0x33, 0x99, 0x66, 0x33, 0x99, 0x33, 
    0x33, 0x99, 0x00, 0x33, 0x66, 0xff, 0x33, 0x66, 0xcc, 0x33, 0x66, 0x99, 0x33, 0x66, 0x66, 0x33, 
    0x66, 0x33, 0x33, 0x66, 0x00, 0x33, 0x33, 0xff, 0x33, 0x33, 0xcc, 0x33, 0x33, 0x99, 0x33, 0x33, 
    0x66, 0x33, 0x33, 0x33, 0x33, 0x33, 0x00, 0x33, 0x00, 0xff, 0x33, 0x00, 0xcc, 0x33, 0x00, 0x99, 
    0x33, 0x00, 0x66, 0x33, 0x00, 0x33, 0x33, 0x00, 0x00, 0x00, 0xff, 0xff, 0x00, 0xff, 0xcc, 0x00, 
    0xff, 0x99, 0x00, 0xff, 0x66, 0x00, 0xff, 0x33, 0x00, 0xff, 0x00, 0x00, 0xcc, 0xff, 0x00, 0xcc, 
    0xcc, 0x00, 0xcc, 0x99, 0x00, 0xcc, 0x66, 0x00, 0xcc, 0x33, 0x00, 0xcc, 0x00, 0x00, 0x99, 0xff, 
    0x00, 0x99, 0xcc, 0x00, 0x99, 0x99, 0x00, 0x99, 0x66, 0x00, 0x99, 0x33, 0x00, 0x99, 0x00, 0x00, 
    0x66, 0xff, 0x00, 0x66, 0xcc, 0x00, 0x66, 0x99, 0x00, 0x66, 0x66, 0x00, 0x66, 0x33, 0x00, 0x66, 
    0x00, 0x00, 0x33, 0xff, 0x00, 0x33, 0xcc, 0x00, 0x33, 0x99, 0x00, 0x33, 0x66, 0x00, 0x33, 0x33, 
    0x00, 0x33, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0xcc, 0x00, 0x00, 0x99, 0x00, 0x00, 0x66, 0x00, 
    0x00, 0x33, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2c, 0x00, 0x00, 
    0x00, 0x00, 0xd2, 0x00, 0x4f, 0x00, 0x40, 0x08, 0xff, 0x00, 0x49, 0x21, 0x1b, 0x48, 0xb0, 0xa0, 
    0xc1, 0x83, 0x08, 0x13, 0x2a, 0x5c, 0x98, 0x07, 0x80, 0xc3, 0x87, 0x10, 0x23, 0x3e, 0x54, 0xf1, 
    0x24, 0xcf, 0x28, 0x52, 0x02, 0x17, 0x6a, 0xdc, 0xc8, 0x71, 0x60, 0x43, 0x89, 0x20, 0x43, 0x82, 
    0x24, 0xf1, 0xa4, 0x8a, 0x45, 0x8c, 0x1d, 0x53, 0x72, 0xc4, 0xe8, 0xac, 0xa5, 0xcb, 0x97, 0x30, 
    0x63, 0xca, 0x9c, 0x49, 0xb3, 0xe6, 0x47, 0x88, 0xa4, 0x6a, 0xea, 0xdc, 0xc9, 0xb3, 0x67, 0xcc, 
    0x51, 0x22, 0x25, 0xe6, 0xf1, 0x49, 0xb4, 0x68, 0x4f, 0x64, 0x41, 0x45, 0xe6, 0x24, 0x7a, 0x33, 
    0x69, 0xc8, 0xa5, 0x44, 0xab, 0x38, 0x9d, 0x4a, 0xb5, 0xaa, 0xc4, 0x27, 0x46, 0x5b, 0x3e, 0xb1, 
    0xca, 0xb5, 0xab, 0x55, 0xa8, 0x3d, 0x9b, 0x7a, 0x1d, 0x9a, 0xb5, 0xac, 0x51, 0x64, 0xa4, 0xaa, 
    0xa8, 0xa0, 0x8a, 0xac, 0x28, 0x32, 0x12, 0x5e, 0xe3, 0xca, 0x4d, 0x0a, 0x96, 0xa7, 0xd8, 0xb9, 
    0x13, 0xc9, 0x9a, 0xdd, 0x5b, 0xb4, 0x29, 0xd6, 0xa2, 0xa4, 0xf0, 0x0a, 0x1e, 0x5c, 0x77, 0xe7, 
    0xdd, 0xc1, 0x88, 0xe3, 0xea, 0xf5, 0x19, 0xf8, 0xe1, 0xe2, 0xa8, 0x89, 0x23, 0x4f, 0x2d, 0xac, 
    0xf3, 0xb0, 0x57, 0xca, 0x7c, 0x33, 0xf3, 0x6c, 0x2c, 0x72, 0x94, 0xe6, 0xcf, 0x3c, 0x91, 0x76, 
    0xc5, 0x4c, 0xd3, 0xf2, 0x68, 0xd0, 0xa8, 0x5b, 0x22, 0xcb, 0xb3, 0x36, 0x32, 0x89, 0x2a, 0xa4, 
    0x53, 0x1f, 0x95, 0x4c, 0xbb, 0xb6, 0xed, 0xdb, 0xb8, 0xe5, 0x02, 0xd9, 0xcd, 0xbb, 0xb7, 0x6f, 
    0xde, 0x07, 0x1c, 0xf0, 0xae, 0x00, 0x00, 0x08, 0x71, 0x20, 0x07, 0x1a, 0x00, 0x01, 0xf0, 0xe3, 
    0x78, 0xf0, 0x1c, 0xcc, 0x1d, 0x1c, 0x80, 0xfe, 0x63, 0x77, 0xf0, 0x23, 0xd2, 0x91, 0x3b, 0x80, 
    0x8e, 0xfc, 0x80, 0xf6, 0xde, 0x0e, 0x81, 0x64, 0xff, 0xcf, 0x0e, 0x20, 0x47, 0x0e, 0xef, 0xd9, 
    0xc1, 0xe7, 0x00, 0x02, 0xbd, 0x42, 0x05, 0xef, 0x07, 0x28, 0x38, 0xf7, 0xee, 0x7c, 0x7b, 0xf1, 
    0xe0, 0xc8, 0xc5, 0x7b, 0xdf, 0x4d, 0x5c, 0x3a, 0x7c, 0xe1, 0xe4, 0xd9, 0x27, 0x9e, 0x03, 0x47, 
    0xbc, 0xd7, 0xdd, 0x72, 0x39, 0x8c, 0xb7, 0xdf, 0x80, 0xc1, 0x1d, 0xf0, 0x43, 0x76, 0xc1, 0x41, 
    0xe8, 0x00, 0x05, 0xe8, 0x79, 0x07, 0x80, 0x70, 0xbf, 0x65, 0xa8, 0x21, 0x6f, 0xb1, 0xc9, 0xe6, 
    0x93, 0x69, 0x24, 0x78, 0xe6, 0xa1, 0x6c, 0x40, 0x8d, 0xd5, 0xd6, 0x88, 0x7c, 0x21, 0x53, 0x52, 
    0x15, 0x2c, 0xb6, 0xe8, 0xe2, 0x8b, 0x2c, 0x9e, 0xc8, 0x18, 0x8c, 0x34, 0xbe, 0xd8, 0x1a, 0x00, 
    0x24, 0xc8, 0x68, 0xd4, 0x28, 0x79, 0xd4, 0xe8, 0xe3, 0x8f, 0x40, 0xd2, 0xb8, 0x15, 0x5d, 0x7c, 
    0x91, 0xc2, 0x63, 0x90, 0x48, 0x26, 0x39, 0x24, 0x57, 0x1d, 0xc6, 0x64, 0xda, 0x64, 0x46, 0x71, 
    0x96, 0x5b, 0x5c, 0x39, 0x1a, 0x25, 0xd5, 0x94, 0xb7, 0x35, 0x09, 0xd3, 0x93, 0x5f, 0xa1, 0x28, 
    0x9b, 0x8a, 0x20, 0x55, 0x61, 0x14, 0x97, 0x58, 0x0a, 0xa6, 0xe5, 0x4b, 0x64, 0x96, 0x29, 0x18, 
    0x09, 0x8f, 0xf9, 0xb4, 0xe4, 0x99, 0x2f, 0x21, 0x73, 0xa3, 0x9a, 0x91, 0xc1, 0xd9, 0x52, 0x9a, 
    0x74, 0xce, 0xb5, 0x82, 0x8e, 0x3e, 0x5d, 0x09, 0x51, 0x9b, 0x44, 0x91, 0xb2, 0x64, 0x9e, 0x97, 
    0xf5, 0x85, 0x98, 0x9d, 0x5e, 0xf6, 0x54, 0xa2, 0x55, 0x80, 0x26, 0x7a, 0x16, 0xa1, 0x90, 0x46, 
    0x2a, 0xe9, 0x94, 0x1b, 0x56, 0x6a, 0xe9, 0xa5, 0x96, 0xae, 0x87, 0xe9, 0xa6, 0x98, 0x6a, 0xca, 
    0xa9, 0x86, 0x9e, 0x56, 0x1a, 0xea, 0x6f, 0xd5, 0x7d, 0x6a, 0xea, 0xa8, 0xc3, 0xb9, 0x67, 0x9c, 
    0xa9, 0xac, 0x86, 0x8a, 0xea, 0x86, 0x15, 0xf0, 0xff, 0xf6, 0x83, 0xa6, 0xb3, 0x5a, 0x8a, 0x1f, 
    0xa8, 0x9e, 0xbe, 0xba, 0x69, 0xac, 0x9b, 0x96, 0xca, 0xea, 0x6f, 0xba, 0xf2, 0x96, 0xde, 0x86, 
    0xe6, 0xf1, 0x56, 0xec, 0x6e, 0xa1, 0x56, 0x10, 0xec, 0xa7, 0x88, 0x3a, 0x7a, 0xe7, 0x54, 0xb0, 
    0x39, 0x6b, 0xd6, 0xa2, 0x71, 0xa9, 0x90, 0x47, 0xb3, 0x5e, 0xa2, 0x25, 0xad, 0xa1, 0x12, 0xa9, 
    0xc0, 0xe7, 0xb6, 0x65, 0x51, 0x3b, 0xd5, 0x13, 0xdf, 0x82, 0x1b, 0x1a, 0xb6, 0x8e, 0x36, 0xa5, 
    0x82, 0xb9, 0xa0, 0x89, 0x1b, 0xd2, 0x5f, 0xec, 0x96, 0x25, 0x1a, 0x93, 0xdc, 0x2a, 0x96, 0x15, 
    0x9e, 0x93, 0xc2, 0x3b, 0xe6, 0x9c, 0x93, 0x52, 0x85, 0x28, 0xbe, 0x20, 0x95, 0xab, 0xd3, 0xa0, 
    0xfd, 0xbe, 0x7b, 0x6f, 0xc1, 0x72, 0xfd, 0x3b, 0x97, 0xbe, 0x44, 0xad, 0xf6, 0x84, 0x0a, 0x24, 
    0x44, 0x2c, 0xf1, 0xc4, 0x14, 0x57, 0x6c, 0x31, 0x5c, 0x78, 0x35, 0x6a, 0x13, 0xc2, 0x73, 0x29, 
    0x8c, 0x97, 0x98, 0xf1, 0x9e, 0xf5, 0xe4, 0x0a, 0x3b, 0x72, 0xdc, 0x71, 0xbd, 0x83, 0x69, 0x1c, 
    0x72, 0x4d, 0x72, 0x46, 0x04, 0x32, 0x51, 0xee, 0x9a, 0x5c, 0x95, 0xc7, 0xb7, 0x55, 0x24, 0xd0, 
    0xca, 0x95, 0x4d, 0x94, 0x15, 0xc1, 0x32, 0xfb, 0x8b, 0x72, 0xcf, 0x71, 0x35, 0xbb, 0x28, 0xc9, 
    0x67, 0xf1, 0x0b, 0x74, 0x50, 0x34, 0x1f, 0x5d, 0x28, 0x60, 0x11, 0x89, 0xb8, 0xb3, 0xd2, 0x48, 
    0xff, 0x2c, 0xd7, 0xb5, 0x18, 0x55, 0x6d, 0xf5, 0xd5, 0x58, 0x67, 0xad, 0xf5, 0xd6, 0xe8, 0xb6, 
    0x24, 0x25, 0x44, 0x0c, 0xef, 0xa5, 0xd2, 0xd8, 0x07, 0x7d, 0xed, 0x33, 0x53, 0x87, 0xe2, 0x5c, 
    0x16, 0x9e, 0x5d, 0x9b, 0x3b, 0x6f, 0x97, 0x68, 0x13, 0xa6, 0xf6, 0x51, 0x7e, 0x2a, 0x26, 0xf0, 
    0xdc, 0x6f, 0x57, 0x95, 0xc7, 0xde, 0x7c, 0xf7, 0xff, 0xed, 0x37, 0xdf, 0x3c, 0x2b, 0xf6, 0xf7, 
    0xe0, 0x84, 0x17, 0x6e, 0xf8, 0xe1, 0x55, 0x3c, 0x4c, 0x28, 0x09, 0x14, 0x99, 0x74, 0xf8, 0xe3, 
    0x90, 0x13, 0x0e, 0xf5, 0xe4, 0x94, 0x4f, 0xb9, 0xec, 0xaf, 0x98, 0x67, 0xae, 0xf9, 0xe6, 0x9c, 
    0x77, 0xee, 0x79, 0xab, 0xbf, 0x1e, 0xe0, 0x1d, 0xad, 0xcb, 0x7a, 0x5a, 0xeb, 0x6e, 0xb5, 0x52, 
    0x50, 0xdc, 0xaa, 0x19, 0x1e, 0x6b, 0xdd, 0x7f, 0xec, 0xf9, 0x6a, 0xeb, 0x7e, 0xb7, 0x1a, 0xab, 
    0xa1, 0xec, 0xc8, 0xa2, 0xbe, 0xfa, 0x6e, 0x00, 0x28, 0x7b, 0x21, 0xea, 0xac, 0x03, 0x51, 0x2a, 
    0x71, 0xb1, 0x56, 0x80, 0x3b, 0xb2, 0xa1, 0xfe, 0x00, 0x40, 0x85, 0xb9, 0xdb, 0xde, 0xdb, 0x71, 
    0xec, 0xf1, 0xca, 0x5f, 0x05, 0xd2, 0x61, 0xf8, 0x79, 0x6f, 0xa2, 0x03, 0xe7, 0x80, 0x11, 0xcf, 
    0x15, 0x07, 0x61, 0xac, 0xf7, 0x2d, 0x78, 0x2b, 0x77, 0xcb, 0xb9, 0x87, 0x9e, 0x03, 0xca, 0x1b, 
    0xb7, 0x3b, 0xef, 0xeb, 0xe1, 0xd7, 0x3b, 0x85, 0xdf, 0x31, 0xd7, 0x5b, 0x7a, 0x0d, 0x6c, 0x1f, 
    0x1c, 0xf4, 0xec, 0xad, 0x7e, 0x80, 0xf1, 0x06, 0x0c, 0x38, 0x5f, 0xf9, 0xda, 0x33, 0x02, 0x7f, 
    0xf6, 0x53, 0x1e, 0x03, 0x39, 0x40, 0x38, 0xf2, 0x73, 0x1f, 0x10, 0xe0, 0xd7, 0x3b, 0xe5, 0x79, 
    0xaa, 0x3c, 0xd0, 0xb1, 0x90, 0xf5, 0x7e, 0xc7, 0x3b, 0xf0, 0xf1, 0x4a, 0x79, 0xee, 0x39, 0x1e, 
    0xa7, 0x34, 0x78, 0x3d, 0xce, 0xa9, 0xaa, 0x83, 0x20, 0x0c, 0xe1, 0x07, 0x43, 0x98, 0xb9, 0x1f, 
    0xb4, 0x0d, 0x45, 0xf8, 0xb2, 0xd9, 0xdc, 0x64, 0x62, 0xb6, 0xb8, 0xac, 0xe0, 0x5a, 0x77, 0xdb, 
    0x96, 0xb6, 0x56, 0xb8, 0xa5, 0xa4, 0x3c, 0xe1, 0x84, 0xce, 0x8a, 0x19, 0x55, 0xac, 0x15, 0xc3, 
    0x90, 0xcd, 0x90, 0x86, 0x2e, 0xb1, 0x8c, 0x0a, 0xff, 0x70, 0xb8, 0x2d, 0x1d, 0x06, 0x65, 0x88, 
    0x40, 0x94, 0xc9, 0x0f, 0x93, 0x78, 0x17, 0x6f, 0x25, 0x91, 0x27, 0x46, 0x04, 0x89, 0xca, 0x80, 
    0xb8, 0x44, 0x20, 0x8a, 0x65, 0x8a, 0x4f, 0x74, 0x49, 0x14, 0xff, 0x94, 0x45, 0x9a, 0x0c, 0xa4, 
    0x8b, 0x4d, 0x71, 0x5a, 0x17, 0x6b, 0xd2, 0xc2, 0x88, 0xac, 0x6b, 0x8c, 0x33, 0xc9, 0xdb, 0xd9, 
    0x3e, 0xb4, 0xb0, 0x70, 0x19, 0xad, 0x67, 0x58, 0xf4, 0x62, 0x1e, 0x56, 0x50, 0x39, 0x87, 0x24, 
    0xed, 0x34, 0x4c, 0xab, 0x1c, 0xba, 0xea, 0x56, 0x47, 0x00, 0xdc, 0x91, 0x2b, 0x3d, 0x94, 0x09, 
    0x1d, 0x29, 0x87, 0xad, 0xc0, 0xd5, 0xf1, 0x8f, 0x70, 0x8b, 0x1b, 0xd4, 0xc4, 0x38, 0x9b, 0x3e, 
    0x82, 0x04, 0x91, 0x7a, 0xcb, 0xca, 0x28, 0x30, 0x06, 0xb4, 0xb0, 0xed, 0x44, 0x8d, 0x8e, 0xb4, 
    0xa3, 0xd4, 0x00, 0x99, 0x22, 0xb2, 0x69, 0x04, 0x23, 0x7b, 0x7b, 0x02, 0x25, 0xd7, 0xe8, 0xa6, 
    0x4c, 0x3e, 0x72, 0x93, 0x56, 0xa9, 0x12, 0x1a, 0x55, 0xc3, 0x9a, 0xa4, 0x9c, 0x31, 0x50, 0xa6, 
    0x3c, 0xa5, 0x22, 0xe7, 0x12, 0x47, 0x1a, 0x92, 0xe2, 0x8d, 0x00, 0xb0, 0x64, 0xce, 0x62, 0x19, 
    0x11, 0x48, 0x2e, 0x6d, 0x95, 0x2f, 0xe1, 0xd9, 0xcb, 0xd8, 0xc8, 0x4b, 0x9c, 0xa0, 0x52, 0x2e, 
    0x55, 0x08, 0xa4, 0x2d, 0x5d, 0x16, 0xa5, 0x62, 0x1a, 0x73, 0x96, 0x91, 0xe1, 0x21, 0x30, 0x9d, 
    0x71, 0x23, 0xa2, 0x15, 0x05, 0x97, 0x8e, 0xf4, 0xa5, 0x64, 0x18, 0x57, 0x92, 0xc8, 0x79, 0x73, 
    0x6f, 0x37, 0xcb, 0xca, 0xdb, 0x94, 0x09, 0x93, 0x2d, 0xea, 0xf1, 0x98, 0xbc, 0x1c, 0x26, 0x31, 
    0x01, 0x50, 0xcb, 0x1a, 0x3a, 0x53, 0x9b, 0xbc, 0x6c, 0xa7, 0x4b, 0xa4, 0x44, 0xce, 0x72, 0xbe, 
    0x13, 0x9d, 0xf1, 0x6c, 0xa6, 0xce, 0xca, 0x62, 0xff, 0x48, 0x42, 0xe2, 0xd3, 0x94, 0xba, 0xdc, 
    0xe5, 0x43, 0xac, 0x79, 0xb0, 0x4c, 0xc2, 0xb3, 0x8f, 0xd2, 0xcc, 0x8a, 0xd1, 0x54, 0x69, 0x16, 
    0x52, 0xe4, 0xe1, 0x61, 0xa3, 0x04, 0xda, 0x41, 0x49, 0x39, 0xcd, 0x97, 0xf0, 0x91, 0x8b, 0x15, 
    0x75, 0x09, 0x26, 0x9d, 0x32, 0x51, 0x28, 0x65, 0x34, 0x98, 0x1c, 0xfd, 0xe8, 0x46, 0x89, 0x04, 
    0xcd, 0x84, 0x7d, 0xb4, 0x25, 0xe6, 0x84, 0x08, 0x23, 0xc7, 0x38, 0xd2, 0xa8, 0x95, 0x34, 0x68, 
    0x1f, 0x05, 0x18, 0xd8, 0x88, 0x88, 0xa2, 0x96, 0x2a, 0xe5, 0x9f, 0x14, 0x05, 0x23, 0x36, 0xad, 
    0x92, 0xd0, 0x24, 0xda, 0x34, 0x24, 0xf5, 0x7c, 0x96, 0xdc, 0x9e, 0xe8, 0x50, 0x51, 0xe2, 0x86, 
    0x22, 0x30, 0x54, 0xdb, 0x4f, 0x9d, 0xc9, 0xd4, 0xa6, 0x3a, 0xf5, 0xa9, 0x50, 0x8d, 0xaa, 0x54, 
    0xa7, 0x4a, 0xd5, 0xaa, 0x52, 0x85, 0x84, 0x58, 0xcd, 0xaa, 0x56, 0xb7, 0xca, 0xd5, 0xcd, 0x35, 
    0x40, 0x74, 0xd2, 0xdb, 0x1c, 0xaf, 0x28, 0x68, 0xab, 0x0a, 0x18, 0xe1, 0x3d, 0x97, 0x93, 0x95, 
    0xe8, 0x44, 0x47, 0x81, 0x03, 0x0a, 0x70, 0x73, 0xbd, 0x13, 0xd6, 0x5a, 0x7d, 0x03, 0x00, 0x0a, 
    0xfc, 0x86, 0x57, 0xb5, 0xb3, 0xd5, 0xf6, 0x0c, 0x84, 0xa9, 0xfd, 0x65, 0xe8, 0x80, 0x07, 0x5c, 
    0x10, 0x08, 0x1d, 0xb0, 0x3e, 0xff, 0x00, 0x48, 0x74, 0xc5, 0x79, 0xcf, 0x01, 0x2e, 0x64, 0x04, 
    0xc3, 0xea, 0x67, 0x7f, 0x8b, 0x75, 0x80, 0x81, 0xd6, 0x4a, 0xbb, 0xc8, 0x0e, 0xa7, 0x41, 0x8f, 
    0x15, 0x0e, 0x7e, 0x2a, 0xe4, 0x57, 0xeb, 0x50, 0x40, 0x80, 0xcb, 0xcb, 0x9e, 0x62, 0x39, 0xab, 
    0xd8, 0xd0, 0x56, 0xb6, 0x80, 0x0b, 0x22, 0x5f, 0xef, 0xbe, 0x0a, 0xd9, 0xee, 0x64, 0x2f, 0xb2, 
    0x3f, 0xe0, 0x6c, 0x79, 0x5c, 0xbb, 0xa0, 0xf7, 0xba, 0x30, 0x07, 0x3f, 0xfe, 0x89, 0x55, 0x6e, 
    0x1f, 0xcb, 0x59, 0xeb, 0x19, 0x8b, 0x83, 0x9d, 0x33, 0x80, 0xf5, 0x44, 0x57, 0xa0, 0xfb, 0x98, 
    0xe7, 0x7c, 0xdc, 0xa3, 0x5e, 0x68, 0xf5, 0xc3, 0x9b, 0xb8, 0x2a, 0xd0, 0x40, 0xb3, 0xed, 0xac, 
    0x75, 0xec, 0x47, 0x20, 0xe9, 0x70, 0x07, 0x7e, 0xd2, 0x55, 0xdf, 0x6e, 0xa4, 0x83, 0x9d, 0xfd, 
    0x85, 0xd6, 0x82, 0x8d, 0xd5, 0x6c, 0x73, 0xa6, 0x93, 0x58, 0xd8, 0x6d, 0xf7, 0x7e, 0xbc, 0x9b, 
    0xee, 0x72, 0x8c, 0x03, 0x1f, 0xb3, 0x42, 0x28, 0x07, 0xb1, 0x2d, 0x1f, 0xf7, 0xec, 0x6a, 0x1d, 
    0xe5, 0xc2, 0x47, 0x74, 0x9a, 0xc5, 0xaf, 0x76, 0x8e, 0x80, 0xdb, 0xe5, 0x75, 0xf5, 0x79, 0x6b, 
    0x35, 0x9f, 0x68, 0xcf, 0x97, 0x1f, 0x03, 0x8d, 0xd6, 0x38, 0x06, 0xe8, 0x1e, 0xfa, 0x08, 0xec, 
    0x57, 0xca, 0x02, 0xf8, 0xbc, 0xf8, 0x21, 0x0e, 0x5b, 0xcf, 0xe3, 0x9b, 0x5b, 0x35, 0x38, 0x56, 
    0x6b, 0xcd, 0x01, 0x5f, 0xe9, 0xd3, 0x5e, 0xd7, 0x22, 0x90, 0xbe, 0xc8, 0x91, 0xde, 0x01, 0xd9, 
    0xc3, 0x60, 0xf0, 0x29, 0x67, 0x3a, 0x06, 0xcc, 0xef, 0x62, 0x8d, 0x45, 0xbb, 0xed, 0x39, 0xf6, 
    0xc5, 0x73, 0xf5, 0x8f, 0x04, 0xff, 0x4b, 0x63, 0xde, 0xd6, 0xf8, 0xc6, 0x77, 0x0d, 0x30, 0x8e, 
    0x2b, 0x15, 0x10, 0x00, 0x3b, 
};
#else
const char urom_tsclogo_gif[] = 
{
        0x47, 0x49, 0x46, 0x38, 0x39, 0x61, 0xD2, 0x00, 0x4F, 0x00, 0xF7, 0x00, 0x00, 0xFF, 0xFF, 0xFF,    
        0xFF, 0xFF, 0x00, 0xFF, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0x00, 0x00,    
        0x00, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x61, 0xA3, 0xFC, 0xEC, 0xED, 0xDB, 0x30, 0x40, 0xE3, 0x5F,    
        0x6B, 0xE4, 0x63, 0x6F, 0xE6, 0x6D, 0x78, 0xE6, 0x6E, 0x79, 0xE8, 0x7D, 0x87, 0xF6, 0xCB, 0xCF,    
        0xFB, 0xE5, 0xE7, 0xFC, 0xF0, 0xF1, 0xFD, 0xF2, 0xF3, 0xDA, 0x2A, 0x3B, 0xDC, 0x38, 0x48, 0xDF,    
        0x45, 0x54, 0xE1, 0x4E, 0x5C, 0xE1, 0x53, 0x61, 0xE2, 0x55, 0x63, 0xE2, 0x57, 0x65, 0xE2, 0x5A,    
        0x67, 0xE4, 0x65, 0x71, 0xE5, 0x69, 0x75, 0xE5, 0x6C, 0x78, 0xE6, 0x6E, 0x7A, 0xE6, 0x70, 0x7C,    
        0xE7, 0x76, 0x81, 0xE8, 0x79, 0x84, 0xE8, 0x7B, 0x86, 0xE9, 0x82, 0x8C, 0xEB, 0x89, 0x93, 0xEB,    
        0x8D, 0x96, 0xEC, 0x8F, 0x98, 0xEC, 0x93, 0x9C, 0xEE, 0x9B, 0xA3, 0xEE, 0x9D, 0xA5, 0xEF, 0xA5,    
        0xAC, 0xF0, 0xA7, 0xAE, 0xF0, 0xAB, 0xB2, 0xF2, 0xB3, 0xB9, 0xF5, 0xC6, 0xCB, 0xF6, 0xCE, 0xD2,    
        0xF7, 0xD1, 0xD5, 0xF8, 0xD9, 0xDC, 0xF9, 0xDD, 0xE0, 0xFB, 0xE7, 0xE9, 0xFD, 0xF4, 0xF5, 0xFC,    
        0xEE, 0xF0, 0xFE, 0xF8, 0xF9, 0xFE, 0xF9, 0xFA, 0xFE, 0xFE, 0xFF, 0xF6, 0xF9, 0xFC, 0xF9, 0xFB,    
        0xFD, 0xFC, 0xFD, 0xFE, 0xEE, 0xF4, 0xF9, 0xCC, 0xDF, 0xED, 0xDF, 0xEC, 0xF6, 0xEC, 0xF4, 0xFA,    
        0xE9, 0xF1, 0xF7, 0xF1, 0xF6, 0xFA, 0x00, 0x60, 0xA2, 0x01, 0x62, 0xA3, 0x02, 0x62, 0xA4, 0x04,    
        0x63, 0xA4, 0x05, 0x64, 0xA5, 0x06, 0x65, 0xA5, 0x07, 0x65, 0xA6, 0x08, 0x66, 0xA6, 0x09, 0x68,    
        0xA8, 0x0A, 0x67, 0xA7, 0x0B, 0x68, 0xA7, 0x0C, 0x68, 0xA7, 0x0D, 0x69, 0xA8, 0x0E, 0x6A, 0xA8,    
        0x0E, 0x6A, 0xA7, 0x10, 0x6B, 0xA9, 0x11, 0x6C, 0xA9, 0x12, 0x6C, 0xA9, 0x13, 0x6D, 0xAA, 0x14,    
        0x6F, 0xAD, 0x14, 0x6D, 0xAA, 0x15, 0x6E, 0xAB, 0x17, 0x6F, 0xAB, 0x18, 0x70, 0xAC, 0x1A, 0x71,    
        0xAC, 0x1B, 0x72, 0xAD, 0x1C, 0x72, 0xAD, 0x1F, 0x76, 0xB1, 0x1E, 0x74, 0xAE, 0x21, 0x75, 0xAF,    
        0x22, 0x76, 0xAF, 0x23, 0x77, 0xB0, 0x24, 0x77, 0xB0, 0x25, 0x78, 0xB0, 0x27, 0x79, 0xB1, 0x28,    
        0x7A, 0xB1, 0x29, 0x7A, 0xB2, 0x2A, 0x7B, 0xB2, 0x2B, 0x7C, 0xB3, 0x2C, 0x7C, 0xB3, 0x2C, 0x7B,    
        0xB2, 0x2E, 0x7E, 0xB4, 0x30, 0x7F, 0xB4, 0x32, 0x80, 0xB5, 0x34, 0x81, 0xB6, 0x35, 0x82, 0xB6,    
        0x37, 0x83, 0xB7, 0x38, 0x84, 0xB7, 0x39, 0x84, 0xB8, 0x3A, 0x85, 0xB8, 0x3B, 0x86, 0xB8, 0x3D,    
        0x87, 0xB9, 0x3E, 0x87, 0xB9, 0x3F, 0x88, 0xBA, 0x40, 0x89, 0xBA, 0x43, 0x8B, 0xBB, 0x44, 0x8B,    
        0xBC, 0x45, 0x8C, 0xBC, 0x46, 0x8C, 0xBC, 0x48, 0x8E, 0xBD, 0x4A, 0x8F, 0xBE, 0x4E, 0x94, 0xC5,    
        0x4D, 0x91, 0xBF, 0x4E, 0x91, 0xBF, 0x4F, 0x92, 0xC0, 0x52, 0x94, 0xC1, 0x51, 0x93, 0xC0, 0x54,    
        0x95, 0xC1, 0x55, 0x96, 0xC2, 0x57, 0x97, 0xC2, 0x59, 0x98, 0xC3, 0x5B, 0x99, 0xC4, 0x5A, 0x99,    
        0xC3, 0x5C, 0x9A, 0xC4, 0x5E, 0x9B, 0xC5, 0x62, 0xA0, 0xCB, 0x5F, 0x9C, 0xC5, 0x61, 0x9D, 0xC6,    
        0x63, 0x9E, 0xC7, 0x64, 0x9F, 0xC7, 0x67, 0xA1, 0xC8, 0x68, 0xA1, 0xC9, 0x69, 0xA2, 0xC9, 0x6B,    
        0xA3, 0xCA, 0x6A, 0xA3, 0xC9, 0x6E, 0xA5, 0xCB, 0x6F, 0xA6, 0xCB, 0x71, 0xA7, 0xCC, 0x70, 0xA6,    
        0xCB, 0x73, 0xA8, 0xCC, 0x76, 0xAA, 0xCE, 0x75, 0xA9, 0xCD, 0x7C, 0xB1, 0xD6, 0x78, 0xAB, 0xCE,    
        0x7A, 0xAD, 0xCF, 0x7C, 0xAE, 0xD0, 0x7F, 0xB0, 0xD1, 0x7E, 0xAF, 0xD0, 0x81, 0xB1, 0xD2, 0x82,    
        0xB2, 0xD2, 0x85, 0xB3, 0xD3, 0x86, 0xB4, 0xD3, 0x87, 0xB5, 0xD4, 0x88, 0xB5, 0xD4, 0x89, 0xB6,    
        0xD4, 0x8B, 0xB7, 0xD5, 0x8D, 0xB8, 0xD6, 0x8E, 0xB9, 0xD6, 0x8F, 0xBA, 0xD7, 0x90, 0xBA, 0xD7,    
        0x92, 0xBB, 0xD8, 0x93, 0xBC, 0xD8, 0x98, 0xBF, 0xDA, 0x99, 0xC0, 0xDA, 0x9A, 0xC0, 0xDB, 0x9D,    
        0xC2, 0xDC, 0x9E, 0xC3, 0xDC, 0xA0, 0xC4, 0xDD, 0xA3, 0xC6, 0xDE, 0xA2, 0xC5, 0xDD, 0xAA, 0xCD,    
        0xE5, 0xA7, 0xC8, 0xDF, 0xA8, 0xC9, 0xE0, 0xA9, 0xCA, 0xE0, 0xAA, 0xCA, 0xE0, 0xAE, 0xCD, 0xE2,    
        0xB1, 0xCF, 0xE3, 0xB3, 0xD0, 0xE4, 0xB2, 0xCF, 0xE3, 0xB6, 0xD2, 0xE5, 0xB5, 0xD1, 0xE4, 0xB9,    
        0xD4, 0xE6, 0xB8, 0xD3, 0xE5, 0xBC, 0xD5, 0xE7, 0xBD, 0xD6, 0xE7, 0xBF, 0xD7, 0xE8, 0xC1, 0xD9,    
        0xE9, 0xC2, 0xD9, 0xE9, 0xC4, 0xDA, 0xEA, 0xC7, 0xDC, 0xEB, 0xC8, 0xDD, 0xEB, 0xC9, 0xDE, 0xEC,    
        0xCD, 0xE0, 0xED, 0xCF, 0xE1, 0xEE, 0xD2, 0xE3, 0xEF, 0xD1, 0xE2, 0xEE, 0xD6, 0xE7, 0xF3, 0xD5,    
        0xE5, 0xF0, 0xD4, 0xE4, 0xEF, 0xDA, 0xE8, 0xF2, 0xD9, 0xE7, 0xF1, 0xDD, 0xEA, 0xF3, 0xDC, 0xE9,    
        0xF2, 0xDF, 0xEB, 0xF3, 0xE0, 0xEC, 0xF4, 0xE2, 0xED, 0xF5, 0xE5, 0xEF, 0xF6, 0xE4, 0xEE, 0xF5,    
        0xED, 0xF4, 0xF9, 0xEC, 0xF3, 0xF8, 0xF7, 0xFA, 0xFC, 0x65, 0xA0, 0xC7, 0x6D, 0xA5, 0xCA, 0x94,    
        0xBD, 0xD8, 0x97, 0xBF, 0xD9, 0x9C, 0xC2, 0xDB, 0x9F, 0xC4, 0xDC, 0xA4, 0xC7, 0xDE, 0xAC, 0xCC,    
        0xE1, 0xBB, 0xD5, 0xE6, 0xC3, 0xDA, 0xE9, 0xD0, 0xE4, 0xF1, 0xCB, 0xDF, 0xEC, 0xCE, 0xE1, 0xED,    
        0xD3, 0xE4, 0xEF, 0xD6, 0xE6, 0xF0, 0xE3, 0xEE, 0xF5, 0xEB, 0xF3, 0xF8, 0xEA, 0xF2, 0xF7, 0xE8,    
        0xF2, 0xF8, 0xE6, 0xF0, 0xF6, 0xF3, 0xF8, 0xFB, 0xF2, 0xF7, 0xFA, 0xF5, 0xF9, 0xFB, 0xFB, 0xFD,    
        0xFE, 0xFA, 0xFC, 0xFD, 0xFD, 0xFE, 0xFE, 0xFE, 0xFB, 0xFB, 0xFF, 0xFD, 0xFD, 0x2C, 0x00, 0x00,    
        0x00, 0x00, 0xD2, 0x00, 0x4F, 0x00, 0x00, 0x08, 0xFF, 0x00, 0x01, 0x08, 0x1C, 0x48, 0xB0, 0xA0,    
        0xC1, 0x83, 0x08, 0x13, 0x2A, 0x5C, 0xC8, 0xB0, 0xA1, 0xC3, 0x87, 0x10, 0x23, 0x4A, 0x9C, 0x48,    
        0xB1, 0xA2, 0xC5, 0x8B, 0x18, 0x33, 0x6A, 0xDC, 0xC8, 0xB1, 0xA3, 0xC7, 0x8F, 0x20, 0x43, 0x8A,    
        0x1C, 0x49, 0xB2, 0xA4, 0xC9, 0x93, 0x28, 0x53, 0xAA, 0x5C, 0xC9, 0xB2, 0xA5, 0xCB, 0x97, 0x30,    
        0x63, 0xCA, 0x9C, 0x49, 0xB3, 0xA6, 0xCD, 0x9B, 0x38, 0x73, 0xEA, 0xDC, 0xC9, 0xB3, 0xA7, 0xCF,    
        0x9F, 0x40, 0x83, 0x0A, 0x1D, 0x4A, 0xB4, 0xA8, 0xD1, 0xA3, 0x48, 0x93, 0x2A, 0x5D, 0xCA, 0xB4,    
        0xA9, 0xD3, 0xA7, 0x50, 0xA3, 0x4A, 0x9D, 0x4A, 0x10, 0xD8, 0xA2, 0x47, 0x8F, 0x12, 0xD9, 0xA2,    
        0xCA, 0x55, 0x24, 0x2B, 0x44, 0xD8, 0x04, 0x06, 0x99, 0xE4, 0xA9, 0xAB, 0x59, 0x8E, 0xCD, 0x08,    
        0xED, 0xB3, 0x24, 0x68, 0x50, 0x2B, 0x00, 0x90, 0x7E, 0x9D, 0x9D, 0x7B, 0xB1, 0x9C, 0xB2, 0x1C,    
        0x5C, 0x82, 0x39, 0x53, 0x02, 0x8F, 0x1B, 0xA3, 0xA0, 0xCD, 0xCC, 0xD1, 0x0A, 0x96, 0x83, 0x2E,    
        0x4A, 0x46, 0x41, 0x76, 0x8C, 0x69, 0x54, 0x49, 0xCF, 0x3D, 0x1E, 0x89, 0xF0, 0x01, 0x0D, 0x86,    
        0x00, 0x41, 0x9D, 0xC2, 0x86, 0x4D, 0x36, 0xF2, 0xB6, 0xA3, 0xCC, 0xAA, 0x2E, 0xAF, 0x00, 0xE4,    
        0x43, 0x34, 0x0E, 0x28, 0x2F, 0x04, 0x55, 0xCC, 0x65, 0x3E, 0x69, 0x6A, 0x6B, 0x97, 0x7B, 0xD0,    
        0x94, 0x64, 0x53, 0x66, 0x69, 0x22, 0x0F, 0x6A, 0xF3, 0x56, 0x62, 0x42, 0x90, 0xA7, 0xC7, 0xC0,    
        0x1D, 0xF7, 0xC2, 0x09, 0x17, 0xB7, 0x23, 0xA1, 0x10, 0x71, 0xC3, 0xE9, 0x91, 0xEC, 0xD7, 0x03,    
        0xB9, 0x38, 0xC9, 0x3F, 0xBF, 0xF1, 0xA1, 0x96, 0xAC, 0xB4, 0x32, 0x61, 0x7F, 0xA6, 0x4D, 0x1C,    
        0x17, 0x46, 0x0A, 0x2B, 0x90, 0xCF, 0x82, 0x89, 0xFF, 0x33, 0x98, 0xA3, 0x0F, 0x82, 0x22, 0xD7,    
        0x06, 0xE6, 0xBB, 0x93, 0x45, 0x8B, 0x96, 0x2C, 0x7D, 0xF6, 0x1D, 0x9C, 0x06, 0xC6, 0xBD, 0x16,    
        0x2A, 0xDF, 0x47, 0x86, 0x43, 0xE3, 0x3E, 0x0B, 0xA5, 0x8E, 0x3E, 0xF8, 0x16, 0x92, 0x33, 0x7C,    
        0xCC, 0x12, 0x8D, 0x34, 0xB9, 0xFC, 0x11, 0x4C, 0x45, 0x7C, 0x54, 0x46, 0xC8, 0x3D, 0x1C, 0xE5,    
        0x43, 0x48, 0x65, 0xCA, 0x1C, 0x54, 0x87, 0x65, 0xF2, 0x0D, 0x24, 0x4C, 0x65, 0x1C, 0x86, 0x66,    
        0x50, 0x83, 0x1C, 0x8A, 0x21, 0xA0, 0x48, 0xF4, 0x40, 0xC1, 0xE1, 0x21, 0x1B, 0xCD, 0x33, 0xC9,    
        0x13, 0xDC, 0x8C, 0x54, 0x8F, 0x2B, 0x95, 0x50, 0x92, 0x4A, 0x37, 0x15, 0x8D, 0x33, 0x06, 0x87,    
        0x63, 0xE4, 0xA6, 0x51, 0x33, 0x1C, 0x96, 0x62, 0xD0, 0x0E, 0x6E, 0x20, 0x70, 0x8E, 0x41, 0x91,    
        0x70, 0x88, 0x80, 0x14, 0x2D, 0x12, 0x94, 0x8B, 0x91, 0x44, 0x18, 0x53, 0x12, 0x3D, 0x57, 0x70,    
        0x98, 0x48, 0x46, 0xF8, 0xBC, 0xA2, 0x05, 0x02, 0x4C, 0xE8, 0x08, 0xD3, 0x3D, 0xB8, 0x64, 0x93,    
        0x50, 0x10, 0x53, 0x18, 0xD9, 0xCE, 0x46, 0x3B, 0x28, 0x52, 0x59, 0x12, 0xC9, 0x14, 0x24, 0x4D,    
        0x65, 0x6A, 0xAC, 0xB2, 0x4D, 0x69, 0x02, 0xD1, 0xD3, 0x85, 0x91, 0x84, 0x10, 0x24, 0xCE, 0x9C,    
        0x1C, 0x4A, 0x62, 0x52, 0x3D, 0x4A, 0x70, 0x58, 0x48, 0x46, 0x9A, 0x70, 0xF8, 0x84, 0x96, 0x2F,    
        0x45, 0x83, 0x65, 0x28, 0x08, 0xC1, 0x62, 0xA4, 0x16, 0xF8, 0xE8, 0xB3, 0xCC, 0x2D, 0xD1, 0x60,    
        0xF4, 0x0A, 0x87, 0xE9, 0x0C, 0x14, 0x04, 0x00, 0xEB, 0x14, 0xC1, 0x61, 0x15, 0xBD, 0x10, 0xF4,    
        0x8B, 0x91, 0x08, 0x00, 0x33, 0x90, 0x25, 0x46, 0x72, 0xA1, 0x5C, 0x49, 0x3B, 0x00, 0xD3, 0x8B,    
        0x2F, 0xBC, 0x38, 0x93, 0x51, 0x23, 0x82, 0x12, 0xFF, 0xEA, 0x92, 0x3E, 0x62, 0x54, 0xE6, 0x61,    
        0x41, 0xE6, 0x71, 0x98, 0xC5, 0x22, 0x37, 0x56, 0x76, 0x8B, 0x42, 0xE1, 0xBC, 0x73, 0xD0, 0x38,    
        0xC6, 0x24, 0xF3, 0x0A, 0x12, 0x1C, 0x22, 0x0A, 0x00, 0x3C, 0x8A, 0x50, 0xA3, 0x8F, 0x32, 0xC4,    
        0x0C, 0x23, 0x08, 0x15, 0x10, 0x12, 0x64, 0x88, 0x91, 0x61, 0x08, 0x01, 0x00, 0x34, 0x46, 0x18,    
        0xD9, 0x69, 0x51, 0x93, 0x70, 0x08, 0xC5, 0x88, 0x30, 0x95, 0x53, 0xD9, 0x14, 0xF5, 0x18, 0x54,    
        0x06, 0xA8, 0x46, 0x2A, 0x51, 0x5B, 0x42, 0x94, 0x18, 0xC1, 0x0A, 0x66, 0x02, 0x61, 0x43, 0x06,    
        0xBB, 0x08, 0xC8, 0x21, 0x10, 0x25, 0x08, 0x50, 0x01, 0xCE, 0x40, 0xFD, 0x78, 0x59, 0x90, 0x37,    
        0x51, 0x72, 0xD8, 0x09, 0x00, 0x17, 0xFA, 0x69, 0x90, 0x0E, 0xC6, 0x10, 0xE3, 0xF0, 0xA5, 0xFD,    
        0x10, 0xC3, 0x09, 0x22, 0x90, 0xB8, 0x22, 0x70, 0x41, 0xDD, 0x14, 0xE3, 0x70, 0x85, 0xFB, 0xD8,    
        0xF2, 0x48, 0x23, 0xB0, 0x68, 0x03, 0xC0, 0x0E, 0xC8, 0x38, 0x4C, 0x8C, 0x34, 0x04, 0xC5, 0xA3,    
        0x31, 0x31, 0xC2, 0x02, 0x70, 0x8F, 0x2D, 0x94, 0x1C, 0x32, 0x49, 0x2D, 0xFF, 0x12, 0x04, 0x8D,    
        0x31, 0xB9, 0x22, 0xA0, 0x44, 0x2E, 0x0E, 0x87, 0x53, 0x50, 0x3F, 0xC8, 0x90, 0xD2, 0x08, 0x22,    
        0x96, 0xD0, 0xB2, 0xCD, 0x41, 0x39, 0x30, 0xE3, 0x70, 0x31, 0x2D, 0xC6, 0xD3, 0x09, 0x22, 0x98,    
        0x14, 0x03, 0x5D, 0x43, 0xC0, 0x70, 0x38, 0x0A, 0x41, 0xD9, 0x70, 0x72, 0x44, 0x65, 0x72, 0x50,    
        0x12, 0xC8, 0x1F, 0x91, 0xC8, 0xB2, 0x0C, 0x37, 0xC5, 0x25, 0x44, 0x0E, 0x02, 0x70, 0xF4, 0x23,    
        0x10, 0x0F, 0xCA, 0xC8, 0xC3, 0x47, 0x19, 0x59, 0x28, 0xF2, 0x44, 0x1E, 0x67, 0x20, 0xD0, 0x86,    
        0x40, 0x90, 0x20, 0x80, 0x04, 0x8D, 0x0B, 0xA1, 0xFF, 0x63, 0x24, 0x14, 0x67, 0x73, 0x38, 0x45,    
        0x92, 0x04, 0x71, 0xA3, 0x29, 0x85, 0xDB, 0xE0, 0x01, 0x6A, 0x13, 0x9D, 0xF0, 0x53, 0x90, 0x2C,    
        0x1C, 0x76, 0x21, 0x44, 0x21, 0x46, 0xBA, 0xD1, 0x8F, 0x38, 0x4E, 0x70, 0x58, 0xE7, 0x40, 0x8F,    
        0x70, 0xD8, 0x07, 0x00, 0xE7, 0x5C, 0x69, 0x24, 0x16, 0xB1, 0x10, 0x44, 0x07, 0xBE, 0x14, 0x12,    
        0xD4, 0xCE, 0xE9, 0xA0, 0x3A, 0x41, 0xC9, 0x78, 0x04, 0xF1, 0x00, 0x06, 0x87, 0xE6, 0xB4, 0xF3,    
        0x84, 0x91, 0xBA, 0x3C, 0x64, 0x0C, 0x87, 0x4C, 0x50, 0x33, 0x10, 0x30, 0x26, 0x22, 0xA0, 0x88,    
        0x0E, 0x12, 0x71, 0x82, 0x80, 0x8F, 0x02, 0x95, 0x82, 0x00, 0x18, 0xAC, 0xB0, 0x43, 0x0A, 0x37,    
        0x5E, 0x76, 0x73, 0xC5, 0x23, 0x02, 0x2D, 0x82, 0xC0, 0x11, 0x61, 0x2D, 0x54, 0x1E, 0xEA, 0x08,    
        0xA8, 0x66, 0x50, 0x37, 0x4C, 0x54, 0x56, 0x04, 0x2B, 0xB3, 0xE3, 0x5B, 0x48, 0xD9, 0x02, 0x9D,    
        0xC3, 0xA1, 0x19, 0x92, 0x80, 0xBA, 0x09, 0x00, 0xF4, 0x54, 0x21, 0x25, 0x41, 0x81, 0x23, 0x20,    
        0x08, 0x29, 0xDC, 0xA3, 0x33, 0x50, 0x1E, 0xDC, 0x2F, 0x33, 0x90, 0x2F, 0x7D, 0x42, 0x5D, 0x1B,    
        0xBC, 0x11, 0x3B, 0x33, 0x70, 0xE8, 0x12, 0xE5, 0xAB, 0x8C, 0x12, 0x8E, 0xA6, 0x90, 0x7E, 0x94,    
        0xAD, 0x1D, 0x87, 0x43, 0x00, 0x8A, 0x06, 0x32, 0x08, 0x04, 0x4C, 0x82, 0x22, 0x94, 0xE3, 0x85,    
        0x40, 0xBA, 0x71, 0xA5, 0x34, 0x5C, 0xAA, 0x20, 0xD9, 0x10, 0x50, 0x1B, 0x2A, 0x33, 0x08, 0x65,    
        0xE4, 0x63, 0x21, 0xD9, 0xB8, 0x1D, 0xBB, 0xEE, 0xC0, 0x83, 0x83, 0x74, 0xA3, 0x09, 0xE2, 0x0B,    
        0x60, 0x11, 0xA8, 0x40, 0x04, 0x50, 0x1D, 0x6C, 0x20, 0xEA, 0xAB, 0xCC, 0xD6, 0x40, 0x25, 0x2C,    
        0x28, 0xCD, 0x6F, 0x20, 0xF5, 0xCB, 0xDC, 0x79, 0xFF, 0xC2, 0xB0, 0x05, 0x50, 0x7D, 0xE1, 0x84,    
        0x00, 0x80, 0x03, 0xF7, 0xD2, 0xB4, 0xAD, 0x00, 0x56, 0x46, 0x0A, 0x63, 0x80, 0x21, 0x87, 0xEC,    
        0x80, 0x3E, 0x1E, 0xD4, 0xAD, 0x32, 0xDD, 0x32, 0xD2, 0x1F, 0x18, 0xA2, 0x0F, 0x3D, 0xE8, 0xC1,    
        0x0F, 0xA2, 0x7B, 0xE2, 0x07, 0xB5, 0x51, 0x04, 0x50, 0x54, 0xE4, 0x42, 0xC2, 0x00, 0x40, 0x37,    
        0xD8, 0x60, 0x37, 0xD8, 0x11, 0xC4, 0x19, 0xCD, 0x18, 0xC5, 0x21, 0x14, 0xC7, 0x21, 0x3C, 0xDC,    
        0xA1, 0x11, 0xE4, 0x32, 0x48, 0x2B, 0xD8, 0xD5, 0x04, 0xDF, 0xB9, 0x50, 0x8A, 0x1C, 0x22, 0x07,    
        0x3C, 0xEE, 0xF1, 0x8E, 0x44, 0x18, 0x09, 0x09, 0xF2, 0xC0, 0x21, 0xA8, 0x8E, 0x90, 0x88, 0x50,    
        0xE0, 0x01, 0x0E, 0x2D, 0xF4, 0x61, 0x65, 0xA6, 0x04, 0x44, 0x50, 0xF9, 0x01, 0x1A, 0xE3, 0xE8,    
        0xC1, 0x39, 0x90, 0xC5, 0x21, 0x66, 0x08, 0xE4, 0x17, 0xAE, 0x88, 0x03, 0x87, 0x92, 0x30, 0x0A,    
        0x58, 0xB4, 0x22, 0x37, 0x3C, 0x48, 0x58, 0x65, 0x42, 0x01, 0x8E, 0x1D, 0x6C, 0x23, 0x6F, 0x1C,    
        0xD2, 0xDF, 0xDA, 0xAE, 0xB8, 0x3E, 0x4E, 0x58, 0xE2, 0x0B, 0x95, 0x62, 0xC8, 0xA7, 0xF0, 0x55,    
        0x0C, 0x00, 0xF0, 0xA0, 0x10, 0x7A, 0x92, 0x08, 0x3D, 0x8A, 0xA3, 0x44, 0x66, 0x74, 0xA3, 0x6E,    
        0x74, 0xE0, 0x9B, 0x40, 0xAC, 0x01, 0x0A, 0xFE, 0x21, 0xC0, 0x0D, 0xE7, 0xF8, 0x45, 0xF9, 0xF4,    
        0x57, 0x8B, 0xE5, 0x05, 0x42, 0x1D, 0xCA, 0x2C, 0x88, 0x01, 0x8D, 0x44, 0x8A, 0x84, 0xBC, 0xD0,    
        0x48, 0xEF, 0x23, 0x88, 0xF5, 0x92, 0xA5, 0x48, 0x0E, 0x11, 0x21, 0x17, 0x03, 0xA9, 0x96, 0x24,    
        0x11, 0x40, 0x49, 0x81, 0xD4, 0x0F, 0x01, 0x71, 0x40, 0x1F, 0x00, 0xDA, 0xC7, 0xA1, 0xDC, 0x0D,    
        0x24, 0x5C, 0x95, 0x81, 0x82, 0xB6, 0x06, 0xA2, 0xFF, 0x0C, 0x23, 0x55, 0x02, 0x57, 0x1C, 0x82,    
        0xE4, 0x2C, 0x8D, 0xD4, 0x06, 0x01, 0x3D, 0xC7, 0x21, 0xB9, 0xA8, 0x21, 0xA8, 0x60, 0x01, 0x00,    
        0x6C, 0xD4, 0x42, 0x22, 0x40, 0x70, 0xC4, 0x16, 0x3E, 0x01, 0x80, 0x35, 0x20, 0xA0, 0x1C, 0x5F,    
        0x40, 0xC0, 0x29, 0xA6, 0xB6, 0xC1, 0x3D, 0x54, 0xA6, 0x11, 0x03, 0x09, 0x45, 0x65, 0xA0, 0x01,    
        0x00, 0xC8, 0x71, 0x48, 0x0D, 0x07, 0x49, 0x46, 0xF8, 0x8C, 0x64, 0x08, 0x6F, 0x02, 0x32, 0x0B,    
        0x79, 0xDC, 0x86, 0x13, 0xE7, 0x80, 0x99, 0x1C, 0x56, 0x06, 0x0E, 0x07, 0x59, 0x67, 0x3B, 0x01,    
        0xF0, 0x4E, 0x7B, 0x0E, 0xE4, 0x34, 0xB4, 0x23, 0x08, 0x2C, 0x11, 0x30, 0x28, 0x82, 0x74, 0x82,    
        0x43, 0x48, 0xB8, 0x98, 0x40, 0x8A, 0xC1, 0xA1, 0x23, 0x08, 0xCC, 0x8A, 0x46, 0xD2, 0xE0, 0x44,    
        0x66, 0x11, 0x3C, 0x0E, 0xE1, 0x02, 0x00, 0x6A, 0x6B, 0x60, 0x0F, 0xE4, 0x09, 0x80, 0x1F, 0x20,    
        0x60, 0x08, 0x80, 0xE8, 0xC7, 0xBD, 0x10, 0x60, 0x04, 0x59, 0x20, 0x64, 0x77, 0x08, 0x00, 0x45,    
        0x3B, 0x9E, 0x41, 0x0C, 0x67, 0xFA, 0x00, 0x1F, 0x6A, 0xA8, 0x4C, 0x1E, 0xCC, 0x11, 0x0F, 0x83,    
        0xE4, 0x63, 0x5D, 0xEC, 0x7A, 0xE8, 0x1F, 0x39, 0x34, 0x88, 0x83, 0x28, 0xB1, 0x32, 0x5A, 0xD8,    
        0xA7, 0x4D, 0x11, 0x70, 0xC3, 0x82, 0xE8, 0x94, 0x7E, 0xE6, 0x6C, 0xD9, 0x40, 0x8E, 0x61, 0x24,    
        0x86, 0x0E, 0x64, 0xA8, 0x45, 0x1D, 0x48, 0xCE, 0xB2, 0xD0, 0x8D, 0x1E, 0x58, 0xD6, 0xB2, 0xDC,    
        0xE2, 0x90, 0xA8, 0x7C, 0x49, 0x4B, 0x26, 0x64, 0x33, 0x22, 0xDE, 0x00, 0x86, 0x2E, 0xD0, 0x71,    
        0x0E, 0x58, 0xD4, 0x2C, 0x21, 0x3D, 0x38, 0xC6, 0x20, 0xB4, 0x40, 0x06, 0x27, 0x0D, 0xC4, 0x1E,    
        0x5E, 0x18, 0xC2, 0x12, 0xA6, 0x61, 0x40, 0x41, 0xFF, 0x24, 0xD2, 0x20, 0x42, 0xF0, 0x86, 0x48,    
        0x51, 0xF7, 0x8C, 0x75, 0x20, 0xA0, 0x0B, 0x8E, 0x3D, 0x48, 0xA0, 0xF0, 0x45, 0x05, 0xC2, 0x11,    
        0xE4, 0x9B, 0x95, 0x09, 0x67, 0x41, 0x0E, 0xC1, 0xBB, 0x24, 0x0D, 0x76, 0x16, 0x39, 0x2D, 0x18,    
        0x3B, 0x11, 0x7B, 0x26, 0xA5, 0x02, 0xA0, 0x9F, 0x1C, 0x0A, 0x2E, 0x5C, 0x62, 0x05, 0x30, 0x36,    
        0x62, 0x71, 0x0B, 0xE0, 0x05, 0x2F, 0x17, 0xB2, 0xA0, 0x50, 0x04, 0xB8, 0x62, 0xA0, 0x95, 0xE9,    
        0x02, 0x47, 0x45, 0xB2, 0x8D, 0x8C, 0x2A, 0x8C, 0x20, 0xBB, 0x30, 0x82, 0x15, 0xAC, 0x31, 0xA7,    
        0x54, 0xC4, 0x4E, 0x1F, 0xDD, 0x78, 0x05, 0x16, 0x40, 0x75, 0x06, 0x4C, 0xC8, 0x81, 0x43, 0xCE,    
        0xA0, 0x86, 0x12, 0x7E, 0x85, 0x10, 0x66, 0x64, 0x11, 0x5F, 0x81, 0xD8, 0x6B, 0x65, 0xCA, 0x62,    
        0x90, 0xCE, 0x29, 0x30, 0x7B, 0x83, 0xF5, 0x45, 0x74, 0x7F, 0xE8, 0x4E, 0x0E, 0x35, 0xC1, 0xB8,    
        0x00, 0x60, 0x46, 0x63, 0x85, 0xCA, 0x5D, 0x81, 0x74, 0x86, 0x7B, 0xEC, 0x32, 0x23, 0x67, 0x39,    
        0x94, 0x86, 0xAC, 0x92, 0x04, 0x1C, 0xA0, 0x38, 0x70, 0x5F, 0x0B, 0xE2, 0x8E, 0x6A, 0x04, 0x21,    
        0x0A, 0x08, 0x50, 0xC5, 0x40, 0x64, 0x41, 0xC4, 0x2B, 0x38, 0x61, 0x10, 0x87, 0x40, 0x03, 0x59,    
        0x71, 0x91, 0x21, 0x3A, 0x5A, 0x63, 0x1A, 0x52, 0xF0, 0xE3, 0xC2, 0xBC, 0x5B, 0x19, 0x36, 0x28,    
        0xCA, 0x48, 0x5B, 0xC1, 0x18, 0x20, 0x2F, 0x68, 0x10, 0xE6, 0x56, 0xA6, 0x09, 0x7C, 0x1B, 0x6C,    
        0x1A, 0x0D, 0x72, 0xD8, 0x4A, 0x56, 0xC6, 0x09, 0x04, 0x24, 0x88, 0x86, 0xB3, 0xCB, 0xE1, 0xCA,    
        0x44, 0x16, 0x00, 0xFB, 0xA0, 0xA5, 0x12, 0xCC, 0x40, 0xE6, 0x32, 0x9B, 0xB9, 0x0C, 0xF9, 0x81,    
        0x6A, 0x65, 0xDE, 0xF0, 0x91, 0x68, 0xF8, 0x61, 0xFF, 0x0F, 0x75, 0x80, 0xC3, 0x21, 0xA6, 0xC6,    
        0x8E, 0x39, 0x7C, 0xE1, 0x0B, 0xE7, 0x3D, 0x88, 0x3C, 0xB6, 0xF6, 0x16, 0x81, 0x00, 0x43, 0x0E,    
        0x7D, 0xE0, 0x05, 0xDF, 0xCC, 0xA1, 0xB3, 0x76, 0x60, 0x23, 0x19, 0xAC, 0x18, 0x21, 0x02, 0x62,    
        0x21, 0x0A, 0x04, 0x40, 0x01, 0x0E, 0x73, 0xE8, 0x04, 0x12, 0x05, 0xB2, 0x5B, 0x0E, 0xF5, 0xF2,    
        0x0F, 0x46, 0xAA, 0xC2, 0x67, 0x91, 0xCB, 0x9B, 0x83, 0xCC, 0x81, 0x43, 0x81, 0x4D, 0x9F, 0x91,    
        0x8E, 0x31, 0xE1, 0x49, 0x52, 0x17, 0x01, 0x58, 0x2E, 0xC8, 0x96, 0x2B, 0xA3, 0x5D, 0xC8, 0x12,    
        0xCA, 0x0E, 0x1C, 0x0A, 0x43, 0x3E, 0x76, 0x40, 0x6B, 0x5A, 0x17, 0xA6, 0x1F, 0xFC, 0xD8, 0x41,    
        0x86, 0xD4, 0x8C, 0x80, 0x39, 0x7C, 0xA4, 0x1B, 0x46, 0x32, 0x42, 0xB5, 0x04, 0x92, 0x83, 0x7C,    
        0xEC, 0xF3, 0x20, 0x68, 0x95, 0xE5, 0x41, 0xFA, 0xB1, 0x09, 0x0E, 0x19, 0xE1, 0x09, 0x61, 0x00,    
        0xB1, 0x1F, 0x06, 0xF2, 0x0E, 0x4E, 0x56, 0xE6, 0x2F, 0x00, 0xD8, 0x46, 0x55, 0x11, 0xB0, 0xE2,    
        0x81, 0x70, 0xFA, 0x09, 0x59, 0x1E, 0xC8, 0x37, 0xAA, 0x5A, 0x87, 0x72, 0x56, 0xC6, 0xB5, 0x86,    
        0x95, 0xEE, 0x4E, 0x83, 0x18, 0x6E, 0x81, 0xAC, 0x1A, 0x01, 0xAD, 0xE6, 0x90, 0x13, 0xB2, 0xC9,    
        0x2F, 0x05, 0x8A, 0x8C, 0x20, 0xF4, 0x90, 0x87, 0x3E, 0x0A, 0xC2, 0xEB, 0x72, 0x4F, 0x64, 0x1E,    
        0xE5, 0x10, 0xB2, 0x41, 0xCC, 0x61, 0x22, 0x23, 0x88, 0xF8, 0x21, 0xAB, 0xA8, 0xCC, 0x82, 0x0A,    
        0xA2, 0x03, 0x60, 0xDC, 0x22, 0xAE, 0x08, 0x20, 0x82, 0x1E, 0xD8, 0x21, 0x8F, 0x1C, 0xA4, 0xA2,    
        0x32, 0x48, 0x70, 0x03, 0x18, 0x92, 0x60, 0x84, 0x29, 0xE8, 0x41, 0x14, 0x1E, 0xFE, 0x2B, 0x60,    
        0x87, 0x3D, 0x29, 0xDC, 0x1D, 0x17, 0x90, 0x08, 0xFF, 0x00, 0x29, 0x41, 0x9A, 0xCD, 0x21, 0x90,    
        0x8B, 0x9A, 0x43, 0xEC, 0x28, 0xF5, 0x74, 0xAD, 0x8C, 0xEA, 0x76, 0x67, 0x78, 0xC3, 0x03, 0xA1,    
        0xA7, 0xCE, 0x86, 0x0D, 0x80, 0xAA, 0x71, 0x48, 0xB9, 0xD5, 0x2B, 0xC2, 0x17, 0xEE, 0x00, 0x89,    
        0x2C, 0xF3, 0xDA, 0x0E, 0x14, 0xE1, 0x57, 0x17, 0x4E, 0x85, 0x0E, 0x42, 0x90, 0xA2, 0x85, 0x02,    
        0x59, 0x47, 0x24, 0x2A, 0x14, 0x11, 0x3F, 0x9C, 0x5B, 0xDC, 0xCD, 0x28, 0x45, 0x90, 0x10, 0x90,    
        0x86, 0x50, 0xF8, 0xE2, 0x19, 0x36, 0xAB, 0x4C, 0x4B, 0x75, 0x20, 0x8F, 0x78, 0xF0, 0xFC, 0x14,    
        0xA0, 0xF2, 0x29, 0x98, 0x59, 0x57, 0x19, 0x2C, 0x84, 0x9B, 0xD3, 0x95, 0x79, 0x44, 0x3C, 0xF2,    
        0xB1, 0x0D, 0xE3, 0x8D, 0xF2, 0xB6, 0xA0, 0x33, 0x52, 0xCC, 0xA9, 0xAC, 0xEE, 0x53, 0xA7, 0x5A,    
        0xCB, 0x38, 0x17, 0x88, 0xB9, 0x38, 0x64, 0x0A, 0x6A, 0xA8, 0xE3, 0x68, 0xFA, 0x18, 0xEB, 0x79,    
        0x54, 0x71, 0xC2, 0x7E, 0xDC, 0xE2, 0xC0, 0x5B, 0xD8, 0xE7, 0xD1, 0x27, 0x92, 0x03, 0x1D, 0x23,    
        0xE0, 0x12, 0x2F, 0xAF, 0x03, 0x2D, 0xD2, 0x45, 0x11, 0x6E, 0xC0, 0x70, 0x0A, 0x02, 0xA2, 0x07,    
        0x27, 0xCA, 0x10, 0x87, 0x73, 0x50, 0xC3, 0xBA, 0x03, 0xA1, 0x46, 0x65, 0xE2, 0x00, 0xF5, 0x82,    
        0x4C, 0x63, 0xA5, 0x95, 0xD9, 0x62, 0x41, 0xA2, 0x91, 0x04, 0x3A, 0x79, 0x1B, 0xE5, 0x18, 0xEF,    
        0x02, 0xEE, 0x19, 0xFC, 0xF2, 0xCA, 0xEC, 0x3D, 0xDD, 0x14, 0xE6, 0xA9, 0xBC, 0x6D, 0xFE, 0x6E,    
        0xED, 0x26, 0x3C, 0xD8, 0x08, 0xF8, 0x96, 0x6F, 0xB1, 0xE5, 0x07, 0x45, 0x6B, 0x76, 0x20, 0x93,    
        0x97, 0x48, 0x0E, 0x20, 0x0E, 0x86, 0xE2, 0xE8, 0xC3, 0xF2, 0xBD, 0xCE, 0xA3, 0x40, 0x84, 0x10,    
        0x0D, 0xAE, 0x16, 0x84, 0x11, 0xF9, 0xE4, 0xC5, 0xFF, 0x34, 0xF0, 0xC1, 0x03, 0x21, 0xEC, 0xBB,    
        0x81, 0xBB, 0x7C, 0x26, 0x29, 0x7E, 0xD1, 0x89, 0x63, 0xCC, 0x43, 0xD7, 0xB0, 0x16, 0x17, 0x03,    
        0x0B, 0x52, 0xE9, 0xCA, 0xA0, 0x53, 0x8D, 0x80, 0xCC, 0x83, 0xE2, 0x41, 0x25, 0x08, 0x79, 0x0E,    
        0xF6, 0xF7, 0xF8, 0xD6, 0x77, 0x34, 0xF7, 0x77, 0x03, 0x51, 0x7C, 0x61, 0xC7, 0x2E, 0x79, 0x06,    
        0x00, 0xF8, 0x03, 0x62, 0x57, 0x03, 0x7D, 0xB4, 0x84, 0x74, 0xD2, 0x97, 0x06, 0xE7, 0xE2, 0x33,    
        0x00, 0x60, 0x0C, 0x07, 0x56, 0x06, 0xE7, 0x90, 0x47, 0x56, 0x37, 0x24, 0x08, 0x01, 0x54, 0x1C,    
        0x52, 0x04, 0x6E, 0x60, 0x73, 0x03, 0x21, 0x04, 0xD2, 0x50, 0x5A, 0x83, 0xA0, 0x06, 0x4E, 0x04,    
        0x2A, 0x4A, 0x10, 0x0C, 0xA6, 0xB0, 0x50, 0x08, 0x71, 0x7D, 0x46, 0xC2, 0x04, 0xD1, 0x03, 0x48,    
        0x9E, 0xD0, 0x0D, 0x6C, 0x87, 0x45, 0xE5, 0x00, 0x27, 0x03, 0x11, 0x0B, 0xA3, 0x76, 0x10, 0x7C,    
        0xF2, 0x5E, 0x02, 0x01, 0x2B, 0x1C, 0xF2, 0x59, 0xD8, 0x55, 0x19, 0xF9, 0x31, 0x10, 0x9E, 0xC0,    
        0x2E, 0x9C, 0x40, 0x10, 0xBA, 0x50, 0x2B, 0xEC, 0xF2, 0x05, 0x04, 0x06, 0x7D, 0xEE, 0x85, 0x00,    
        0x6C, 0x36, 0x11, 0x49, 0x88, 0x00, 0x7A, 0xA0, 0x83, 0xCB, 0xC7, 0x21, 0x5C, 0xC0, 0x07, 0x89,    
        0x90, 0x09, 0x93, 0x30, 0x21, 0x69, 0x85, 0x10, 0xEA, 0x70, 0x38, 0x5C, 0x20, 0x86, 0x76, 0xC3,    
        0x51, 0xD4, 0xD0, 0x0D, 0xAE, 0x10, 0x46, 0xA0, 0x52, 0x04, 0x6D, 0xF0, 0x06, 0x76, 0x60, 0x09,    
        0xE4, 0x00, 0x0A, 0x3B, 0xB0, 0x0E, 0xBA, 0x90, 0x0B, 0xB9, 0xA0, 0x0B, 0xBD, 0xD0, 0x7A, 0x06,    
        0x21, 0x0F, 0xB8, 0xA0, 0x87, 0xB9, 0x80, 0x0E, 0xDA, 0xC1, 0x69, 0xFF, 0xB1, 0x03, 0xBC, 0xF0,    
        0x08, 0x7A, 0x10, 0x08, 0xA1, 0xE0, 0x03, 0x07, 0xFF, 0x91, 0x0D, 0x81, 0xA8, 0x0B, 0xBA, 0xC0,    
        0x73, 0x03, 0x31, 0x0E, 0xBE, 0x90, 0x87, 0xB8, 0xE0, 0x49, 0x03, 0xE1, 0x0C, 0x91, 0xC8, 0x0B,    
        0xEB, 0x15, 0x04, 0x92, 0x98, 0x0B, 0xB8, 0x80, 0x77, 0x03, 0x81, 0x0C, 0x97, 0xB0, 0x07, 0x7A,    
        0x00, 0x32, 0x18, 0x26, 0x04, 0xEB, 0xB0, 0x09, 0x81, 0x90, 0x07, 0x7E, 0x70, 0x09, 0xEA, 0xA0,    
        0x7D, 0x39, 0x10, 0x0C, 0x79, 0xA8, 0x0B, 0xA4, 0x36, 0x11, 0xFC, 0xD0, 0x0C, 0xCB, 0xB0, 0x5E,    
        0xAF, 0xB0, 0x4D, 0xDC, 0xE3, 0x3D, 0x06, 0x71, 0x07, 0x80, 0x05, 0x0F, 0x00, 0x40, 0x2A, 0x95,    
        0x21, 0x2C, 0x3B, 0x10, 0x04, 0xAB, 0x90, 0x05, 0x6F, 0x80, 0x05, 0x63, 0x80, 0x06, 0x90, 0x90,    
        0x0A, 0xC6, 0xF0, 0x0C, 0x74, 0xF4, 0x08, 0xFD, 0x40, 0x2F, 0x1A, 0xC1, 0x69, 0xFF, 0xB4, 0x1A,    
        0x1E, 0x91, 0x0F, 0xA0, 0x40, 0x64, 0xEC, 0xB2, 0x70, 0x06, 0xA1, 0x07, 0xCB, 0x23, 0x64, 0xEA,    
        0x60, 0x06, 0x74, 0x70, 0x0F, 0xDB, 0x70, 0x0C, 0xD7, 0x00, 0x0D, 0xF3, 0x80, 0x0D, 0xDF, 0xB0,    
        0x0F, 0x7E, 0xE8, 0x03, 0xDD, 0x82, 0x0A, 0xBF, 0x06, 0x48, 0xDD, 0xE8, 0x8D, 0xDF, 0xD8, 0x0A,    
        0x75, 0x50, 0x06, 0x50, 0xB0, 0x52, 0x59, 0xF0, 0x07, 0x9C, 0x67, 0x10, 0xC3, 0x90, 0x08, 0x24,    
        0x45, 0x10, 0xE3, 0x50, 0x1A, 0xFB, 0x10, 0x0E, 0x7E, 0x68, 0x10, 0x41, 0x60, 0x22, 0x4B, 0xE8,    
        0x11, 0xDC, 0xC8, 0x8F, 0x22, 0xB1, 0x03, 0xD2, 0x20, 0x0D, 0xAD, 0x60, 0x0E, 0x1F, 0x04, 0x12,    
        0x60, 0x62, 0x41, 0xF9, 0xC8, 0x21, 0xFB, 0x68, 0x91, 0x46, 0xE1, 0x43, 0x8B, 0xF0, 0x6B, 0x4E,    
        0xC4, 0x64, 0x24, 0x69, 0x14, 0xE1, 0x90, 0x05, 0xDC, 0xF6, 0x6B, 0x57, 0xC0, 0x04, 0x4C, 0xA0,    
        0x04, 0x99, 0xB0, 0x92, 0x47, 0xD1, 0x03, 0x2E, 0xFF, 0xF9, 0x39, 0x1E, 0xB1, 0x0F, 0xDD, 0xC0,    
        0x0D, 0x3E, 0xE9, 0x46, 0x36, 0x39, 0x14, 0xF7, 0x20, 0x05, 0x08, 0x00, 0x81, 0x41, 0x79, 0x94,    
        0xE2, 0x66, 0x22, 0x55, 0x88, 0x94, 0x32, 0x71, 0x03, 0x04, 0xE1, 0x94, 0x0A, 0x01, 0x95, 0x02,    
        0x01, 0x95, 0xFF, 0xE0, 0x0F, 0x56, 0x79, 0x11, 0xF7, 0x60, 0x22, 0x6A, 0x60, 0x62, 0x4C, 0xF9,    
        0x12, 0x2F, 0x90, 0x01, 0x32, 0x00, 0x00, 0x1D, 0xD0, 0x02, 0x00, 0x30, 0x02, 0x2C, 0x00, 0x00,    
        0x2C, 0xA0, 0x01, 0x30, 0x00, 0x00, 0x12, 0xD0, 0x00, 0x13, 0xB0, 0x02, 0x1C, 0x80, 0x03, 0x00,    
        0x00, 0x02, 0x29, 0x00, 0x00, 0x1F, 0xC0, 0x00, 0x21, 0xF0, 0x01, 0x23, 0x50, 0x03, 0x16, 0x81,    
        0x0F, 0x19, 0x15, 0x06, 0xDE, 0xD7, 0x95, 0x2C, 0x91, 0x02, 0x17, 0xE0, 0x01, 0x23, 0xE0, 0x94,    
        0x18, 0x70, 0x02, 0x00, 0x60, 0x02, 0x14, 0xA0, 0x00, 0x2F, 0x80, 0x03, 0x16, 0x40, 0x03, 0x37,    
        0xC0, 0x00, 0x0D, 0xF0, 0x00, 0x1B, 0x30, 0x01, 0xFF, 0x50, 0x01, 0x22, 0x00, 0x01, 0x11, 0x60,    
        0x03, 0xFF, 0x70, 0x11, 0x8A, 0x63, 0x06, 0x8E, 0x23, 0x98, 0x31, 0x81, 0x01, 0x14, 0x10, 0x03,    
        0x02, 0xB1, 0x01, 0x28, 0x00, 0x00, 0x25, 0xB0, 0x00, 0x29, 0xA0, 0x00, 0x2C, 0x70, 0x01, 0x11,    
        0x00, 0x00, 0x38, 0x90, 0x01, 0x16, 0xC0, 0x97, 0xFE, 0x60, 0x01, 0x19, 0x40, 0x02, 0x34, 0x90,    
        0x11, 0x13, 0x42, 0x06, 0x81, 0x49, 0x9A, 0x28, 0x71, 0x03, 0x22, 0xD0, 0x01, 0x2A, 0x50, 0x01,    
        0x2F, 0x00, 0x00, 0x18, 0x60, 0x02, 0x00, 0x40, 0x02, 0x18, 0x00, 0x00, 0x2B, 0xD0, 0x98, 0xBD,    
        0xB9, 0x98, 0x23, 0x20, 0x10, 0xFE, 0x50, 0x01, 0x24, 0x30, 0x03, 0xDA, 0x29, 0x97, 0x16, 0xF1,    
        0x5F, 0x85, 0x90, 0x21, 0xC2, 0xC9, 0x12, 0x2F, 0x5C, 0x00, 0x02, 0x13, 0x00, 0x00, 0x2A, 0x10,    
        0x02, 0x35, 0x70, 0x02, 0x2E, 0x00, 0x00, 0x2D, 0xC0, 0x9C, 0x00, 0xE0, 0x02, 0x0E, 0x20, 0x01,    
        0x02, 0xE1, 0x02, 0x2B, 0x20, 0x10, 0xFF, 0x40, 0x02, 0x1F, 0x10, 0x02, 0x21, 0x20, 0x02, 0x09,    
        0x70, 0x11, 0xAC, 0xA0, 0x51, 0xE1, 0x69, 0x93, 0x3B, 0xF0, 0x06, 0x00, 0x18, 0xA0, 0x06, 0x7A,    
        0xA0, 0x08, 0x9A, 0xA0, 0x0A, 0xBA, 0xA0, 0x0C, 0xDA, 0xA0, 0x0E, 0xFA, 0xA0, 0x10, 0x1A, 0xA1,    
        0x12, 0x3A, 0xA1, 0x14, 0x5A, 0xA1, 0x16, 0x7A, 0xA1, 0x18, 0x9A, 0xA1, 0x1A, 0xBA, 0xA1, 0x1C,    
        0xDA, 0xA1, 0x18, 0x1A, 0x10, 0x00, 0x3B, 
};
#endif

const char urom_oemlogo_gif[] = 
{
    0x47, 0x49, 0x46, 0x38, 0x39, 0x61, 0xd2, 0x00, 0x4c, 0x00, 0x80, 0x00, 0x00, 0xff, 0xff, 0xff, 
    0x00, 0x00, 0x00, 0x21, 0xf9, 0x04, 0x01, 0x00, 0x00, 0x00, 0x00, 0x2c, 0x00, 0x00, 0x00, 0x00, 
    0xd2, 0x00, 0x4c, 0x00, 0x00, 0x02, 0x99, 0x84, 0x8f, 0xa9, 0xcb, 0xed, 0x0f, 0xa3, 0x9c, 0xb4, 
    0xda, 0x8b, 0xb3, 0xde, 0xbc, 0xfb, 0x0f, 0x86, 0xe2, 0x48, 0x96, 0xe6, 0x89, 0xa6, 0xea, 0xca, 
    0xb6, 0xee, 0x0b, 0xc7, 0xf2, 0x4c, 0xd7, 0xf6, 0x8d, 0xe7, 0xfa, 0xce, 0xf7, 0xfe, 0x0f, 0x0c, 
    0x0a, 0x87, 0xc4, 0xa2, 0xf1, 0x88, 0x4c, 0x2a, 0x97, 0xcc, 0xa6, 0xf3, 0x09, 0x8d, 0x4a, 0xa7, 
    0xd4, 0xaa, 0xf5, 0x8a, 0xcd, 0x6a, 0xb7, 0xdc, 0xae, 0xf7, 0x0b, 0x0e, 0x8b, 0xc7, 0xe4, 0xb2, 
    0xf9, 0x8c, 0x4e, 0xab, 0xd7, 0xec, 0xb6, 0xfb, 0x0d, 0x8f, 0xcb, 0xe7, 0xf4, 0xba, 0xfd, 0x8e, 
    0xcf, 0xeb, 0xf7, 0xfc, 0xbe, 0xff, 0x0f, 0x18, 0x28, 0x38, 0x48, 0x58, 0x68, 0x78, 0x88, 0x98, 
    0xa8, 0xb8, 0xc8, 0xd8, 0xe8, 0xf8, 0x08, 0x19, 0x29, 0x39, 0x49, 0x59, 0x69, 0x79, 0x89, 0x99, 
    0xa9, 0xb9, 0xc9, 0xd9, 0xe9, 0xf9, 0x09, 0x1a, 0x2a, 0x3a, 0x4a, 0x5a, 0x6a, 0x7a, 0x8a, 0x9a, 
    0xaa, 0xba, 0xca, 0xda, 0xea, 0xfa, 0x0a, 0x1b, 0x2b, 0x3b, 0x4b, 0x5b, 0x6b, 0x1b, 0x52, 0x00, 
    0x00, 0x3b, 
};

const char urom_del_png[] = 
{
    0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x00, 0x00, 0x0d, 0x49, 0x48, 0x44, 0x52, 
    0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x10, 0x08, 0x06, 0x00, 0x00, 0x00, 0x1f, 0xf3, 0xff, 
    0x61, 0x00, 0x00, 0x02, 0x31, 0x49, 0x44, 0x41, 0x54, 0x78, 0xda, 0x85, 0x93, 0x4f, 0x68, 0x13, 
    0x41, 0x14, 0xc6, 0xbf, 0xd9, 0x4d, 0x9b, 0x50, 0x8b, 0x2e, 0xb4, 0x12, 0xa8, 0x16, 0x1b, 0x3d, 
    0x79, 0x16, 0xbd, 0xd4, 0x1a, 0x28, 0xa2, 0x36, 0x22, 0x7a, 0xb0, 0x48, 0x04, 0x43, 0x15, 0x0f, 
    0x41, 0x7a, 0x90, 0x06, 0xd2, 0x04, 0x5c, 0xaa, 0x35, 0x90, 0xa6, 0xa1, 0x56, 0x04, 0x53, 0x7b, 
    0x53, 0x82, 0xa9, 0xe2, 0x41, 0xbc, 0x54, 0x50, 0x7a, 0xb0, 0xb4, 0x60, 0x0f, 0x39, 0x4b, 0xe9, 
    0x51, 0xf1, 0x14, 0x65, 0xd3, 0xfc, 0xd9, 0xa4, 0xe9, 0xee, 0x3a, 0x33, 0x3b, 0x59, 0x1a, 0x35, 
    0x3a, 0xf0, 0xf1, 0xcd, 0x0e, 0xfb, 0x7e, 0xf3, 0xe6, 0xcd, 0x3c, 0x02, 0xc0, 0x95, 0x59, 0xaf, 
    0x34, 0xf0, 0x9f, 0x71, 0x67, 0x70, 0x5f, 0x2f, 0xb5, 0xba, 0xd0, 0x2e, 0x95, 0xc5, 0xd6, 0x09, 
    0x55, 0x47, 0x6a, 0xa5, 0xbc, 0x73, 0xf7, 0x74, 0x07, 0x08, 0x21, 0x7f, 0x0d, 0x9e, 0x5f, 0xdb, 
    0xe1, 0x3e, 0x39, 0xdc, 0xed, 0xa5, 0x56, 0xa5, 0xaa, 0x51, 0x19, 0x0c, 0xc2, 0x22, 0xdc, 0xea, 
    0xfb, 0xed, 0x5a, 0xdc, 0xef, 0x6a, 0xbb, 0xfb, 0xcc, 0x27, 0x03, 0x57, 0x8e, 0xbb, 0xf0, 0xf6, 
    0x4b, 0x03, 0x0f, 0x47, 0xf6, 0x33, 0x48, 0x45, 0x64, 0x62, 0x30, 0x80, 0x67, 0xe2, 0x5d, 0x51, 
    0x7f, 0x30, 0x2c, 0xb5, 0xcd, 0x60, 0x6a, 0xc5, 0xe4, 0x6e, 0xd9, 0x59, 0xe3, 0xd1, 0xe5, 0x03, 
    0x07, 0x45, 0x26, 0x75, 0x0e, 0x08, 0xbf, 0xd1, 0xf4, 0xd4, 0x39, 0xd2, 0x16, 0x60, 0x9a, 0xa6, 
    0x33, 0x8f, 0x7d, 0x04, 0x9e, 0x8d, 0x2a, 0x97, 0xe8, 0x74, 0x8d, 0x65, 0xc2, 0x01, 0x63, 0x4b, 
    0x9a, 0xfe, 0x78, 0xc4, 0xfe, 0xe1, 0x77, 0x88, 0x65, 0x59, 0x8e, 0x33, 0x50, 0xe4, 0x83, 0x8c, 
    0xe7, 0x41, 0x65, 0x54, 0x00, 0x4a, 0x6d, 0x01, 0x85, 0x70, 0x18, 0x7d, 0x89, 0x04, 0xea, 0x3d, 
    0x3d, 0x7f, 0x00, 0x16, 0x4e, 0xfd, 0xc0, 0x77, 0x55, 0xc5, 0xb1, 0x5c, 0xce, 0xcb, 0x01, 0xc1, 
    0xac, 0xa6, 0x3f, 0xbd, 0x68, 0xf2, 0xe0, 0x26, 0xe0, 0xe7, 0xf8, 0x38, 0x5c, 0x5e, 0x2f, 0xba, 
    0x87, 0x86, 0x40, 0xfc, 0x7e, 0x07, 0x20, 0x6f, 0x6c, 0xa0, 0x9a, 0xcf, 0xa3, 0xbe, 0xb5, 0x85, 
    0xa3, 0xd9, 0x6c, 0x90, 0x03, 0xae, 0xbe, 0xd0, 0xf4, 0x85, 0x40, 0xa3, 0x05, 0xc0, 0xbc, 0x18, 
    0x89, 0xa0, 0xd3, 0xe7, 0x83, 0x7b, 0x60, 0x00, 0x08, 0x04, 0x80, 0xe5, 0x65, 0xec, 0x16, 0x0a, 
    0xd0, 0x37, 0x37, 0xe1, 0x5b, 0x5c, 0x0c, 0xb1, 0xf2, 0xfc, 0x13, 0xc0, 0x46, 0x2d, 0x93, 0x81, 
    0x59, 0x2a, 0xc1, 0x2c, 0x97, 0x41, 0x3c, 0x1e, 0xc8, 0x8a, 0x82, 0x3e, 0x55, 0x1d, 0x13, 0xd7, 
    0xb8, 0xea, 0x1c, 0xe1, 0xc9, 0x85, 0x06, 0x24, 0x49, 0x72, 0x8a, 0xb7, 0xb7, 0x98, 0x95, 0xe9, 
    0x69, 0x67, 0x1e, 0x3d, 0x71, 0x1f, 0x4b, 0x37, 0x94, 0xeb, 0x74, 0xba, 0xee, 0x14, 0x31, 0x94, 
    0xd3, 0xf4, 0xf9, 0xf3, 0x46, 0x4b, 0x60, 0xd3, 0xcb, 0xb4, 0x90, 0x64, 0x0f, 0xd8, 0xa2, 0x75, 
    0xe8, 0x9f, 0x9b, 0xbb, 0x26, 0x6e, 0x61, 0x9b, 0x03, 0x6e, 0xbe, 0x2a, 0xea, 0xe9, 0xb3, 0xad, 
    0x19, 0xf0, 0x9d, 0x93, 0x49, 0x3b, 0x98, 0xc2, 0xba, 0xa2, 0x51, 0x54, 0x67, 0x67, 0xd9, 0x75, 
    0xd8, 0x90, 0x74, 0xfa, 0x48, 0x33, 0x03, 0xf7, 0xed, 0xd7, 0xc5, 0x9a, 0x4c, 0xff, 0x93, 0xe8, 
    0x97, 0x2c, 0xd9, 0x3b, 0x4f, 0x7e, 0x4e, 0xd0, 0x05, 0xfb, 0x75, 0xce, 0x9c, 0x8c, 0xc3, 0x30, 
    0xe9, 0x2d, 0xd0, 0x27, 0x71, 0x2f, 0x9f, 0xe4, 0x10, 0xd8, 0x90, 0x43, 0xbc, 0x99, 0xa8, 0xba, 
    0xa8, 0x06, 0x85, 0xb3, 0xa6, 0x90, 0xbe, 0xc5, 0xe3, 0x2f, 0x19, 0xe8, 0x70, 0x32, 0x79, 0x4b, 
    0x34, 0x0e, 0xeb, 0x40, 0xf6, 0x24, 0xc9, 0xd7, 0x58, 0x2c, 0xc7, 0x20, 0xfd, 0xa9, 0x54, 0x88, 
    0x88, 0x80, 0x4e, 0x96, 0x89, 0x90, 0x24, 0xc4, 0xc0, 0x67, 0xc4, 0x69, 0x56, 0xa9, 0x1a, 0x02, 
    0x20, 0x89, 0x18, 0x3f, 0xf3, 0x5f, 0x46, 0x85, 0xdf, 0x10, 0x9f, 0x1d, 0x68, 0x9c, 0x00, 0x00, 
    0x00, 0x00, 0x49, 0x45, 0x4e, 0x44, 0xae, 0x42, 0x60, 0x82, 
};

const char urom_run_png[] = 
{
    0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a, 0x00, 0x00, 0x00, 0x0d, 0x49, 0x48, 0x44, 0x52, 
    0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x10, 0x08, 0x06, 0x00, 0x00, 0x00, 0x1f, 0xf3, 0xff, 
    0x61, 0x00, 0x00, 0x02, 0x7a, 0x49, 0x44, 0x41, 0x54, 0x78, 0xda, 0x8d, 0x92, 0x5f, 0x48, 0x53, 
    0x51, 0x18, 0xc0, 0xbf, 0xfb, 0x7f, 0xf3, 0x5e, 0xdd, 0xfa, 0x37, 0x4a, 0x9c, 0x4b, 0x4b, 0x8d, 
    0xbb, 0xb9, 0x6a, 0x2e, 0x35, 0xb0, 0x07, 0xbd, 0xad, 0x99, 0x51, 0xbd, 0x46, 0xf8, 0x70, 0xcd, 
    0x5e, 0xd2, 0xbd, 0x18, 0xdc, 0x52, 0x04, 0xc3, 0x82, 0xc0, 0xa7, 0xc2, 0x30, 0xc2, 0x87, 0xd2, 
    0x87, 0xe8, 0x69, 0x11, 0x19, 0x13, 0xb7, 0x22, 0x25, 0x82, 0xcd, 0x92, 0xf6, 0x90, 0xb8, 0x2c, 
    0xf5, 0x41, 0x28, 0x66, 0xd6, 0x74, 0xde, 0xe9, 0xee, 0xdc, 0x9f, 0xce, 0xa4, 0x17, 0x5d, 0xda, 
    0x3e, 0x38, 0xe7, 0x7c, 0xe7, 0x1c, 0xbe, 0xdf, 0x0f, 0xbe, 0x73, 0x30, 0x40, 0x81, 0x6b, 0x71, 
    0xfc, 0xc0, 0x31, 0x5d, 0xd9, 0x11, 0x7b, 0x49, 0xcd, 0xfb, 0x7b, 0x1f, 0x9e, 0x45, 0x17, 0xa2, 
    0x32, 0x64, 0x19, 0x58, 0x7a, 0xda, 0x55, 0xa9, 0xd5, 0x55, 0x9d, 0x3f, 0xda, 0x24, 0x5c, 0x39, 
    0xd9, 0xe1, 0xbc, 0xe3, 0xe9, 0xf0, 0x3e, 0x9e, 0x78, 0x04, 0x31, 0x48, 0x65, 0x0d, 0x38, 0xdc, 
    0x5a, 0x54, 0x5e, 0x53, 0x6f, 0xbd, 0x61, 0xad, 0x37, 0x36, 0x2a, 0xb1, 0x14, 0xf8, 0x87, 0xbe, 
    0x0c, 0xbf, 0xec, 0x1c, 0x76, 0x2c, 0xcf, 0x2c, 0xcf, 0x66, 0x05, 0x28, 0xba, 0x6a, 0xe0, 0xab, 
    0xcf, 0x58, 0x24, 0xb3, 0x8d, 0x17, 0x65, 0x79, 0x0d, 0x68, 0x56, 0x05, 0x72, 0x50, 0x09, 0x79, 
    0x7a, 0xde, 0xb4, 0xfb, 0x07, 0xfc, 0xfd, 0xff, 0x05, 0x18, 0x9a, 0x0b, 0xf9, 0x4a, 0x9b, 0x45, 
    0x2a, 0x17, 0x78, 0x31, 0x22, 0x2b, 0x90, 0x48, 0xa6, 0x00, 0xa7, 0x08, 0x50, 0xa9, 0xd4, 0x30, 
    0x3d, 0x32, 0x3d, 0xec, 0xea, 0x76, 0x39, 0xc2, 0xdf, 0xc2, 0xb3, 0xdb, 0x02, 0x0a, 0x9b, 0xf5, 
    0xbc, 0x55, 0xb0, 0x48, 0xa6, 0x3a, 0xa3, 0xb8, 0x1a, 0x51, 0x00, 0x52, 0xd8, 0xc6, 0x15, 0x81, 
    0xe3, 0x90, 0xa7, 0xe1, 0x20, 0xf6, 0x3b, 0x1a, 0x7a, 0x75, 0xd7, 0xd5, 0x3e, 0xf1, 0xe4, 0x53, 
    0xff, 0x3f, 0x01, 0x7a, 0x04, 0xa8, 0xa8, 0xb3, 0x48, 0xc6, 0x5a, 0x93, 0xa8, 0xac, 0x2a, 0x80, 
    0x63, 0x38, 0x90, 0x38, 0x01, 0x34, 0x41, 0x02, 0x8d, 0x56, 0x56, 0xcd, 0x40, 0x1e, 0xc7, 0xc2, 
    0xc7, 0x21, 0xbf, 0xeb, 0xa9, 0xe4, 0x74, 0x2c, 0xcd, 0x2d, 0xcf, 0x6d, 0x02, 0x14, 0x34, 0xe9, 
    0x79, 0x0b, 0x02, 0x98, 0x05, 0xb3, 0x98, 0x88, 0xae, 0x03, 0x43, 0x50, 0x1b, 0x83, 0x26, 0x08, 
    0x20, 0x09, 0x1c, 0xe5, 0x04, 0xa8, 0x49, 0x0a, 0xf6, 0xe6, 0x69, 0x21, 0xb2, 0x14, 0x09, 0xb7, 
    0x9f, 0xed, 0xb9, 0x38, 0xeb, 0x9d, 0x1f, 0xdd, 0x04, 0xb0, 0x0a, 0x56, 0xe9, 0x84, 0xad, 0x42, 
    0x4c, 0x2a, 0x71, 0x88, 0x63, 0x51, 0x58, 0x83, 0x30, 0x24, 0xf0, 0x28, 0x10, 0x44, 0x1c, 0x18, 
    0x1a, 0x07, 0x8e, 0xa1, 0x20, 0x3f, 0x67, 0x37, 0x70, 0x8a, 0x0e, 0x3a, 0x6c, 0x0f, 0x2f, 0x05, 
    0xde, 0xcd, 0xbc, 0x40, 0xa5, 0xca, 0xdf, 0x1e, 0x14, 0xf2, 0xd5, 0x42, 0xa5, 0x64, 0x3c, 0x5d, 
    0x26, 0xce, 0xcb, 0x73, 0xe8, 0x74, 0x05, 0x68, 0x0a, 0x80, 0xa5, 0x28, 0x60, 0x51, 0xa2, 0x65, 
    0x19, 0xd0, 0x51, 0x5a, 0x98, 0x7a, 0xfb, 0xf3, 0xf3, 0x60, 0x8b, 0xbb, 0x2d, 0x18, 0xf8, 0xf5, 
    0x7a, 0xcb, 0x2b, 0x18, 0x78, 0x63, 0x5d, 0xa9, 0xb4, 0xaf, 0x96, 0x13, 0x53, 0xeb, 0x31, 0xc8, 
    0xa5, 0x19, 0xe0, 0x68, 0x1a, 0x58, 0x86, 0x04, 0x1d, 0xcb, 0x01, 0x26, 0x33, 0xeb, 0xce, 0x2e, 
    0x5f, 0x9f, 0xa7, 0x77, 0xfc, 0x76, 0x2a, 0x91, 0x0c, 0x65, 0x34, 0xf1, 0x20, 0xfa, 0x07, 0xbc, 
    0x70, 0x48, 0x2a, 0xb6, 0xef, 0x11, 0xa9, 0x38, 0x86, 0xac, 0x24, 0x68, 0x72, 0xe8, 0x0d, 0x6b, 
    0x60, 0x74, 0x71, 0x72, 0x00, 0x59, 0x7f, 0x4c, 0x2d, 0x78, 0x76, 0xfc, 0x48, 0xc7, 0xed, 0xa5, 
    0x92, 0xf1, 0xdc, 0x7e, 0x91, 0x4a, 0x26, 0x91, 0x35, 0x37, 0x6d, 0x8d, 0x3f, 0xef, 0x1a, 0xef, 
    0x73, 0xf7, 0xfa, 0xba, 0xb7, 0x5a, 0x33, 0x00, 0x25, 0xad, 0xc5, 0xa6, 0xea, 0x06, 0xfe, 0x66, 
    0x55, 0x43, 0x7e, 0x63, 0x2e, 0xe4, 0x40, 0x60, 0x6c, 0x71, 0x72, 0xf0, 0x9a, 0xbb, 0xed, 0xfb, 
    0x36, 0xd6, 0x0c, 0x80, 0xd6, 0xa4, 0xc9, 0x3f, 0x75, 0xd9, 0xdc, 0x72, 0xe1, 0xba, 0xb5, 0xd3, 
    0xd9, 0xe9, 0x7d, 0x30, 0x72, 0xdf, 0x77, 0x6b, 0x27, 0x6b, 0x06, 0x20, 0x1d, 0x94, 0x8a, 0x64, 
    0xd5, 0x1a, 0x75, 0x41, 0x38, 0xb8, 0xf2, 0x15, 0x6d, 0x93, 0xd9, 0x14, 0xa7, 0xe3, 0x0f, 0x45, 
    0x42, 0xe0, 0x11, 0xfd, 0x6e, 0x4f, 0x95, 0x00, 0x00, 0x00, 0x00, 0x49, 0x45, 0x4e, 0x44, 0xae, 
    0x42, 0x60, 0x82, 
};

#endif

  • 6
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值