diff --git a/tmp/opi_rtsp/aiengine.cpp b/tmp/opi_rtsp/aiengine.cpp new file mode 100644 index 0000000..ae4c62a --- /dev/null +++ b/tmp/opi_rtsp/aiengine.cpp @@ -0,0 +1,52 @@ +#include +#include +#include "aiengine.h" +#include "aiengineinference.h" +#include "aiengineinferenceonnx.h" + + +AiEngine::AiEngine(QString modelPath, QObject *parent) + : QObject{parent} +{ + mRtspListener = new AiEngineRtspListener(this); + connect(mRtspListener, &AiEngineRtspListener::frameReceived, this, &AiEngine::frameReceivedSlot); + + QThread *inferenceThread = new QThread(this); + mInference = new AiEngineInferenceOnnx(modelPath); + mInference->moveToThread(inferenceThread); + connect(mInference, &AiEngineInference::resultsReady, this, &AiEngine::inferenceResultsReceivedSlot, Qt::QueuedConnection); + connect(this, &AiEngine::inferenceFrame, mInference, &AiEngineInference::performInferenceSlot, Qt::QueuedConnection); + inferenceThread->start(); +} + + +void AiEngine::start(void) +{ + mRtspListener->startListening(); +} + + +void AiEngine::stop(void) +{ + mRtspListener->stopListening(); +} + + +void AiEngine::inferenceResultsReceivedSlot(AiEngineInferenceResult results) +{ + (void)results; + qDebug() << "AiEngine got inference results in thread: " << QThread::currentThreadId(); + cv::imshow("Received Frame", results.frame); +} + + +void AiEngine::frameReceivedSlot(cv::Mat frame) +{ + //qDebug() << "AiEngine got frame from RTSP listener in thread: " << QThread::currentThreadId(); + //cv::imshow("Received Frame", frame); + + if (mInference->isActive() == false) { + qDebug() << "AiEngine. Inference thread is free. Sending frame to it."; + emit inferenceFrame(frame.clone()); + } +} diff --git a/tmp/opi_rtsp/aiengine.h b/tmp/opi_rtsp/aiengine.h new file mode 100644 index 0000000..d7f0ad1 --- /dev/null +++ b/tmp/opi_rtsp/aiengine.h @@ -0,0 +1,29 @@ +#pragma once + +#include +#include +#include +#include "aienginertsplistener.h" +#include "aiengineinference.h" + +class AiEngine : public QObject +{ + Q_OBJECT +public: + explicit AiEngine(QString modelPath, QObject *parent = nullptr); + void start(void); + void stop(void); + +public slots: + void frameReceivedSlot(cv::Mat frame); + void inferenceResultsReceivedSlot(AiEngineInferenceResult results); + +signals: + void inferenceFrame(cv::Mat frame); + +private: + AiEngineRtspListener *mRtspListener; + AiEngineInference *mInference; + +signals: +}; diff --git a/tmp/opi_rtsp/aiengineinference.cpp b/tmp/opi_rtsp/aiengineinference.cpp new file mode 100644 index 0000000..356d1f4 --- /dev/null +++ b/tmp/opi_rtsp/aiengineinference.cpp @@ -0,0 +1,13 @@ +#include "aiengineinference.h" + +AiEngineInference::AiEngineInference(QString modelPath, QObject *parent) + : QObject{parent}, + mModelPath(modelPath), + mActive(false) +{} + + +bool AiEngineInference::isActive(void) +{ + return mActive; +} diff --git a/tmp/opi_rtsp/aiengineinference.h b/tmp/opi_rtsp/aiengineinference.h new file mode 100644 index 0000000..7fe0f2c --- /dev/null +++ b/tmp/opi_rtsp/aiengineinference.h @@ -0,0 +1,31 @@ +#pragma once + +#include +#include +#include + + +class AiEngineInferenceResult { +public: + cv::Mat frame; + int objects; +}; + + +class AiEngineInference : public QObject +{ + Q_OBJECT +public: + explicit AiEngineInference(QString modelPath, QObject *parent = nullptr); + bool isActive(void); + +protected: + QString mModelPath; + bool mActive; + +public slots: + virtual void performInferenceSlot(cv::Mat frame) = 0; + +signals: + void resultsReady(AiEngineInferenceResult results); +}; diff --git a/tmp/opi_rtsp/aiengineinferenceonnx.cpp b/tmp/opi_rtsp/aiengineinferenceonnx.cpp new file mode 100644 index 0000000..17c68a5 --- /dev/null +++ b/tmp/opi_rtsp/aiengineinferenceonnx.cpp @@ -0,0 +1,34 @@ +#include +#include +#include +#include +#include "aiengineinferenceonnx.h" + +AiEngineInferenceOnnx::AiEngineInferenceOnnx(QString modelPath, QObject *parent) + : AiEngineInference{modelPath, parent} +{ + qDebug() << "TUOMAS test mModelPath=" << mModelPath; + mEngine = new InferenceEngine(modelPath.toStdString()); +} + + +void AiEngineInferenceOnnx::performInferenceSlot(cv::Mat frame) +{ + qDebug() << "performInferenceSlot() in thread: " << QThread::currentThreadId(); + + mActive = true; + + int orig_width = frame.cols; + int orig_height = frame.rows; + std::vector input_tensor_values = mEngine->preprocessImage(frame); + std::vector results = mEngine->runInference(input_tensor_values); + float confidence_threshold = 0.5; + std::vector detections = mEngine->filterDetections(results, confidence_threshold, mEngine->input_shape[2], mEngine->input_shape[3], orig_width, orig_height); + + AiEngineInferenceResult result; + result.frame = mEngine->draw_labels(frame.clone(), detections); + result.objects = 1; + emit resultsReady(result); + + mActive = false; +} diff --git a/tmp/opi_rtsp/aiengineinferenceonnx.h b/tmp/opi_rtsp/aiengineinferenceonnx.h new file mode 100644 index 0000000..c591979 --- /dev/null +++ b/tmp/opi_rtsp/aiengineinferenceonnx.h @@ -0,0 +1,18 @@ +#pragma once + +#include +#include "aiengineinference.h" +#include "pc/inference.h" + +class AiEngineInferenceOnnx : public AiEngineInference +{ + Q_OBJECT +public: + explicit AiEngineInferenceOnnx(QString modelPath, QObject *parent = nullptr); + +public slots: + void performInferenceSlot(cv::Mat frame) override; + +private: + InferenceEngine *mEngine; +}; diff --git a/tmp/opi_rtsp/aienginertsplistener.cpp b/tmp/opi_rtsp/aienginertsplistener.cpp new file mode 100644 index 0000000..15a2f72 --- /dev/null +++ b/tmp/opi_rtsp/aienginertsplistener.cpp @@ -0,0 +1,54 @@ +#include +#include +#include "aienginertsplistener.h" +#include "config.h" + + +AiEngineRtspListener::AiEngineRtspListener(QObject *parent) + : QObject{parent}, + mIsListening(false) +{ +} + + +AiEngineRtspListener::~AiEngineRtspListener() +{ + stopListening(); +} + + +void AiEngineRtspListener::startListening(void) +{ + mIsListening = true; + + (void)QtConcurrent::run([this](){ + listenLoop(); + }); +} + + +void AiEngineRtspListener::stopListening() +{ + mIsListening = false; + + if (mCap.isOpened()) { + mCap.release(); + } +} + + +void AiEngineRtspListener::listenLoop(void) +{ + qDebug() << "AiEngineRtspListener loop running in thread: " << QThread::currentThreadId(); + + mCap.open(rtspVideoUrl.toStdString()); + cv::Mat frame; + + while (mIsListening) { + mCap >> frame; + + if (frame.empty() == false) { + emit frameReceived(frame.clone()); + } + } +} diff --git a/tmp/opi_rtsp/aienginertsplistener.h b/tmp/opi_rtsp/aienginertsplistener.h new file mode 100644 index 0000000..fd29dab --- /dev/null +++ b/tmp/opi_rtsp/aienginertsplistener.h @@ -0,0 +1,23 @@ +#pragma once + +#include +#include +#include + +class AiEngineRtspListener : public QObject +{ + Q_OBJECT +public: + explicit AiEngineRtspListener(QObject *parent = nullptr); + ~AiEngineRtspListener(); + void startListening(void); + void stopListening(void); + +private: + void listenLoop(void); + bool mIsListening; + cv::VideoCapture mCap; + +signals: + void frameReceived(cv::Mat frame); +}; diff --git a/tmp/opi_rtsp/coco_80_labels_list.txt b/tmp/opi_rtsp/coco_80_labels_list.txt new file mode 100644 index 0000000..941cb4e --- /dev/null +++ b/tmp/opi_rtsp/coco_80_labels_list.txt @@ -0,0 +1,80 @@ +person +bicycle +car +motorcycle +airplane +bus +train +truck +boat +traffic light +fire hydrant +stop sign +parking meter +bench +bird +cat +dog +horse +sheep +cow +elephant +bear +zebra +giraffe +backpack +umbrella +handbag +tie +suitcase +frisbee +skis +snowboard +sports ball +kite +baseball bat +baseball glove +skateboard +surfboard +tennis racket +bottle +wine glass +cup +fork +knife +spoon +bowl +banana +apple +sandwich +orange +broccoli +carrot +hot dog +pizza +donut +cake +chair +couch +potted plant +bed +dining table +toilet +tv +laptop +mouse +remote +keyboard +cell phone +microwave +oven +toaster +sink +refrigerator +book +clock +vase +scissors +teddy bear +hair drier +toothbrush diff --git a/tmp/opi_rtsp/config.h b/tmp/opi_rtsp/config.h new file mode 100644 index 0000000..d6f91bf --- /dev/null +++ b/tmp/opi_rtsp/config.h @@ -0,0 +1,5 @@ +#pragma once + +#include + +QString rtspVideoUrl = "rtsp://localhost:8554/live.stream"; diff --git a/tmp/opi_rtsp/main.cpp b/tmp/opi_rtsp/main.cpp new file mode 100644 index 0000000..55c6f6c --- /dev/null +++ b/tmp/opi_rtsp/main.cpp @@ -0,0 +1,29 @@ +#include +#include +#include +#include +#include "aiengine.h" + + +int main(int argc, char *argv[]) +{ + QCoreApplication app(argc, argv); + + if (argc != 2) { + qDebug() << "\nUsage: " << argv[0] << " "; + return 1; + } + + QString modelFile = argv[1]; + if (QFile::exists(modelFile) == false) { + qDebug() << "\nUsage: " << modelFile << " "; + return 1; + } + + cv::namedWindow("AiEngine", cv::WINDOW_AUTOSIZE); + + AiEngine aiEngine(modelFile); + aiEngine.start(); + + return app.exec(); +} diff --git a/tmp/opi_rtsp/opi5/bus.png b/tmp/opi_rtsp/opi5/bus.png new file mode 100644 index 0000000..9290fb4 Binary files /dev/null and b/tmp/opi_rtsp/opi5/bus.png differ diff --git a/tmp/opi_rtsp/opi5/common.h b/tmp/opi_rtsp/opi5/common.h new file mode 100644 index 0000000..4003e09 --- /dev/null +++ b/tmp/opi_rtsp/opi5/common.h @@ -0,0 +1,42 @@ +#ifndef _RKNN_MODEL_ZOO_COMMON_H_ +#define _RKNN_MODEL_ZOO_COMMON_H_ + +/** + * @brief Image pixel format + * + */ +typedef enum { + IMAGE_FORMAT_GRAY8, + IMAGE_FORMAT_RGB888, + IMAGE_FORMAT_RGBA8888, + IMAGE_FORMAT_YUV420SP_NV21, + IMAGE_FORMAT_YUV420SP_NV12, +} image_format_t; + +/** + * @brief Image buffer + * + */ +typedef struct { + int width; + int height; + int width_stride; + int height_stride; + image_format_t format; + unsigned char* virt_addr; + int size; + int fd; +} image_buffer_t; + +/** + * @brief Image rectangle + * + */ +typedef struct { + int left; + int top; + int right; + int bottom; +} image_rect_t; + +#endif //_RKNN_MODEL_ZOO_COMMON_H_ diff --git a/tmp/opi_rtsp/opi5/file_utils.c b/tmp/opi_rtsp/opi5/file_utils.c new file mode 100644 index 0000000..b76c513 --- /dev/null +++ b/tmp/opi_rtsp/opi5/file_utils.c @@ -0,0 +1,129 @@ +#include +#include +#include + +#define MAX_TEXT_LINE_LENGTH 1024 + +unsigned char* load_model(const char* filename, int* model_size) +{ + FILE* fp = fopen(filename, "rb"); + if (fp == NULL) { + printf("fopen %s fail!\n", filename); + return NULL; + } + fseek(fp, 0, SEEK_END); + int model_len = ftell(fp); + unsigned char* model = (unsigned char*)malloc(model_len); + fseek(fp, 0, SEEK_SET); + if (model_len != fread(model, 1, model_len, fp)) { + printf("fread %s fail!\n", filename); + free(model); + fclose(fp); + return NULL; + } + *model_size = model_len; + fclose(fp); + return model; +} + +int read_data_from_file(const char *path, char **out_data) +{ + FILE *fp = fopen(path, "rb"); + if(fp == NULL) { + printf("fopen %s fail!\n", path); + return -1; + } + fseek(fp, 0, SEEK_END); + int file_size = ftell(fp); + char *data = (char *)malloc(file_size+1); + data[file_size] = 0; + fseek(fp, 0, SEEK_SET); + if(file_size != fread(data, 1, file_size, fp)) { + printf("fread %s fail!\n", path); + free(data); + fclose(fp); + return -1; + } + if(fp) { + fclose(fp); + } + *out_data = data; + return file_size; +} + +int write_data_to_file(const char *path, const char *data, unsigned int size) +{ + FILE *fp; + + fp = fopen(path, "w"); + if(fp == NULL) { + printf("open error: %s\n", path); + return -1; + } + + fwrite(data, 1, size, fp); + fflush(fp); + + fclose(fp); + return 0; +} + +int count_lines(FILE* file) +{ + int count = 0; + char ch; + + while(!feof(file)) + { + ch = fgetc(file); + if(ch == '\n') + { + count++; + } + } + count += 1; + + rewind(file); + return count; +} + +char** read_lines_from_file(const char* filename, int* line_count) +{ + FILE* file = fopen(filename, "r"); + if (file == NULL) { + printf("Failed to open the file.\n"); + return NULL; + } + + int num_lines = count_lines(file); + printf("num_lines=%d\n", num_lines); + char** lines = (char**)malloc(num_lines * sizeof(char*)); + memset(lines, 0, num_lines * sizeof(char*)); + + char buffer[MAX_TEXT_LINE_LENGTH]; + int line_index = 0; + + while (fgets(buffer, sizeof(buffer), file) != NULL) { + buffer[strcspn(buffer, "\n")] = '\0'; // 移除换行符 + + lines[line_index] = (char*)malloc(strlen(buffer) + 1); + strcpy(lines[line_index], buffer); + + line_index++; + } + + fclose(file); + + *line_count = num_lines; + return lines; +} + +void free_lines(char** lines, int line_count) +{ + for (int i = 0; i < line_count; i++) { + if (lines[i] != NULL) { + free(lines[i]); + } + } + free(lines); +} \ No newline at end of file diff --git a/tmp/opi_rtsp/opi5/file_utils.h b/tmp/opi_rtsp/opi5/file_utils.h new file mode 100644 index 0000000..96b2a5a --- /dev/null +++ b/tmp/opi_rtsp/opi5/file_utils.h @@ -0,0 +1,48 @@ +#ifndef _RKNN_MODEL_ZOO_FILE_UTILS_H_ +#define _RKNN_MODEL_ZOO_FILE_UTILS_H_ + +#ifdef __cplusplus +extern "C" { +#endif + +/** + * @brief Read data from file + * + * @param path [in] File path + * @param out_data [out] Read data + * @return int -1: error; > 0: Read data size + */ +int read_data_from_file(const char *path, char **out_data); + +/** + * @brief Write data to file + * + * @param path [in] File path + * @param data [in] Write data + * @param size [in] Write data size + * @return int 0: success; -1: error + */ +int write_data_to_file(const char *path, const char *data, unsigned int size); + +/** + * @brief Read all lines from text file + * + * @param path [in] File path + * @param line_count [out] File line count + * @return char** String array of all lines, remeber call free_lines() to release after used + */ +char** read_lines_from_file(const char* path, int* line_count); + +/** + * @brief Free lines string array + * + * @param lines [in] String array + * @param line_count [in] Line count + */ +void free_lines(char** lines, int line_count); + +#ifdef __cplusplus +} // extern "C" +#endif + +#endif //_RKNN_MODEL_ZOO_FILE_UTILS_H_ \ No newline at end of file diff --git a/tmp/opi_rtsp/opi5/font.h b/tmp/opi_rtsp/opi5/font.h new file mode 100644 index 0000000..0140866 --- /dev/null +++ b/tmp/opi_rtsp/opi5/font.h @@ -0,0 +1,3897 @@ +static const unsigned char mono_font_data[95][40 * 20] = { + { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 + }, + { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 154, 255, 255, 255, 9, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 142, 255, 255, 252, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 130, 255, 255, 241, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 118, 255, 255, 229, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 106, 255, 255, 217, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 94, 255, 255, 205, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 82, 255, 255, 193, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 69, 255, 255, 180, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 57, 255, 255, 168, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 45, 255, 255, 156, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 33, 255, 255, 144, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 21, 255, 255, 132, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 9, 255, 255, 120, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 252, 255, 108, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 241, 255, 96, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 228, 255, 83, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 216, 255, 71, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 166, 208, 49, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 31, 159, 177, 83, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 183, 255, 255, 250, 26, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 227, 255, 255, 255, 67, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 201, 255, 255, 255, 41, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 65, 223, 241, 140, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 + }, + { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 59, 255, 255, 255, 161, 0, 0, 59, 255, 255, 255, 161, 0, 0, 0, 0, + 0, 0, 0, 0, 39, 255, 255, 255, 142, 0, 0, 39, 255, 255, 255, 142, 0, 0, 0, 0, + 0, 0, 0, 0, 20, 255, 255, 255, 122, 0, 0, 19, 255, 255, 255, 122, 0, 0, 0, 0, + 0, 0, 0, 0, 3, 254, 255, 255, 103, 0, 0, 2, 253, 255, 255, 103, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 238, 255, 255, 83, 0, 0, 0, 236, 255, 255, 83, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 219, 255, 255, 63, 0, 0, 0, 216, 255, 255, 63, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 199, 255, 255, 44, 0, 0, 0, 197, 255, 255, 44, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 180, 255, 255, 24, 0, 0, 0, 177, 255, 255, 24, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 156, 248, 247, 5, 0, 0, 0, 153, 248, 247, 5, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 + }, + { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 111, 255, 250, 6, 0, 0, 0, 28, 255, 255, 72, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 156, 255, 211, 0, 0, 0, 0, 74, 255, 255, 26, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 202, 255, 166, 0, 0, 0, 0, 120, 255, 235, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 2, 245, 255, 120, 0, 0, 0, 0, 167, 255, 189, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 36, 255, 255, 75, 0, 0, 0, 0, 213, 255, 142, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 82, 255, 255, 30, 0, 0, 0, 7, 251, 255, 96, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 127, 255, 240, 0, 0, 0, 0, 50, 255, 255, 50, 0, 0, 0, + 0, 0, 82, 84, 84, 84, 194, 255, 220, 84, 84, 84, 84, 143, 255, 255, 91, 84, 84, 55, + 0, 0, 252, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 168, + 0, 0, 252, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 168, + 0, 0, 0, 0, 0, 57, 255, 255, 51, 0, 0, 0, 2, 245, 255, 115, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 105, 255, 251, 8, 0, 0, 0, 40, 255, 255, 68, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 154, 255, 212, 0, 0, 0, 0, 88, 255, 255, 20, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 202, 255, 164, 0, 0, 0, 0, 136, 255, 228, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 3, 247, 255, 116, 0, 0, 0, 0, 184, 255, 180, 0, 0, 0, 0, 0, + 21, 84, 84, 84, 108, 255, 255, 135, 84, 84, 84, 84, 234, 255, 178, 84, 84, 84, 39, 0, + 64, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 120, 0, + 64, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 120, 0, + 0, 0, 0, 0, 192, 255, 182, 0, 0, 0, 0, 122, 255, 241, 1, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 237, 255, 133, 0, 0, 0, 0, 172, 255, 193, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 29, 255, 255, 83, 0, 0, 0, 0, 223, 255, 143, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 76, 255, 255, 33, 0, 0, 0, 18, 255, 255, 93, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 123, 255, 239, 0, 0, 0, 0, 69, 255, 255, 44, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 170, 255, 190, 0, 0, 0, 0, 120, 255, 246, 3, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 217, 255, 140, 0, 0, 0, 0, 171, 255, 200, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 + }, + { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 236, 255, 92, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 236, 255, 92, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 236, 255, 92, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 62, 157, 216, 254, 255, 242, 224, 193, 144, 70, 2, 0, 0, 0, + 0, 0, 0, 0, 12, 171, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 184, 0, 0, 0, + 0, 0, 0, 0, 183, 255, 255, 252, 195, 248, 255, 188, 187, 234, 255, 255, 102, 0, 0, 0, + 0, 0, 0, 75, 255, 255, 233, 51, 0, 236, 255, 92, 0, 2, 66, 151, 9, 0, 0, 0, + 0, 0, 0, 152, 255, 255, 108, 0, 0, 236, 255, 92, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 175, 255, 255, 65, 0, 0, 236, 255, 92, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 158, 255, 255, 95, 0, 0, 236, 255, 92, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 99, 255, 255, 212, 17, 0, 236, 255, 92, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 10, 225, 255, 255, 226, 108, 239, 255, 92, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 46, 228, 255, 255, 255, 255, 255, 127, 3, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 17, 146, 247, 255, 255, 255, 255, 228, 118, 11, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 22, 116, 249, 255, 255, 255, 255, 226, 65, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 236, 255, 202, 246, 255, 255, 250, 66, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 236, 255, 92, 23, 189, 255, 255, 219, 1, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 236, 255, 92, 0, 13, 229, 255, 255, 46, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 236, 255, 92, 0, 0, 166, 255, 255, 77, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 236, 255, 92, 0, 0, 184, 255, 255, 66, 0, 0, + 0, 0, 0, 85, 4, 0, 0, 0, 0, 236, 255, 92, 0, 48, 251, 255, 251, 16, 0, 0, + 0, 0, 0, 252, 231, 151, 82, 33, 9, 236, 255, 134, 129, 243, 255, 255, 153, 0, 0, 0, + 0, 0, 0, 252, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 190, 10, 0, 0, 0, + 0, 0, 0, 143, 237, 255, 255, 255, 255, 255, 255, 255, 255, 216, 105, 3, 0, 0, 0, 0, + 0, 0, 0, 0, 2, 51, 94, 122, 134, 246, 255, 145, 38, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 236, 255, 92, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 236, 255, 92, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 236, 255, 92, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 118, 128, 46, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 + }, + { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 4, 113, 208, 246, 241, 186, 63, 0, 0, 0, 0, 0, 0, 82, 255, 255, 77, 0, 0, + 1, 175, 255, 255, 255, 255, 255, 253, 93, 0, 0, 0, 0, 0, 205, 255, 209, 1, 0, 0, + 95, 255, 255, 147, 32, 48, 201, 255, 246, 25, 0, 0, 0, 74, 255, 255, 86, 0, 0, 0, + 190, 255, 221, 1, 0, 0, 43, 255, 255, 117, 0, 0, 0, 197, 255, 215, 2, 0, 0, 0, + 238, 255, 159, 0, 0, 0, 0, 236, 255, 168, 0, 0, 66, 255, 255, 94, 0, 0, 0, 0, + 252, 255, 141, 0, 0, 0, 0, 218, 255, 183, 0, 0, 190, 255, 222, 4, 0, 0, 0, 0, + 236, 255, 160, 0, 0, 0, 0, 237, 255, 168, 0, 56, 255, 255, 102, 0, 0, 0, 0, 0, + 185, 255, 220, 1, 0, 0, 41, 255, 255, 118, 0, 181, 255, 228, 6, 0, 0, 0, 0, 0, + 86, 255, 255, 138, 20, 36, 195, 255, 248, 28, 49, 255, 255, 111, 0, 0, 0, 0, 0, 0, + 0, 166, 255, 255, 255, 255, 255, 255, 103, 0, 173, 255, 233, 9, 0, 0, 0, 0, 0, 0, + 0, 2, 111, 213, 251, 245, 192, 73, 0, 42, 254, 255, 119, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 165, 255, 238, 13, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 35, 252, 255, 127, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 156, 255, 242, 17, 16, 141, 223, 249, 227, 145, 18, 0, + 0, 0, 0, 0, 0, 0, 0, 29, 250, 255, 136, 16, 213, 255, 255, 255, 255, 255, 216, 19, + 0, 0, 0, 0, 0, 0, 0, 148, 255, 246, 22, 150, 255, 251, 102, 27, 92, 248, 255, 160, + 0, 0, 0, 0, 0, 0, 24, 247, 255, 144, 7, 245, 255, 158, 0, 0, 0, 144, 255, 250, + 0, 0, 0, 0, 0, 0, 140, 255, 249, 27, 53, 255, 255, 85, 0, 0, 0, 73, 255, 255, + 0, 0, 0, 0, 0, 19, 243, 255, 152, 0, 76, 255, 255, 61, 0, 0, 0, 50, 255, 255, + 0, 0, 0, 0, 0, 131, 255, 251, 33, 0, 76, 255, 255, 62, 0, 0, 0, 51, 255, 255, + 0, 0, 0, 0, 14, 239, 255, 161, 0, 0, 49, 255, 255, 86, 0, 0, 0, 74, 255, 255, + 0, 0, 0, 0, 123, 255, 253, 39, 0, 0, 5, 239, 255, 158, 0, 0, 0, 144, 255, 250, + 0, 0, 0, 11, 235, 255, 169, 0, 0, 0, 0, 137, 255, 251, 96, 19, 85, 247, 255, 161, + 0, 0, 0, 115, 255, 254, 46, 0, 0, 0, 0, 11, 203, 255, 255, 255, 255, 255, 219, 21, + 0, 0, 7, 230, 255, 177, 0, 0, 0, 0, 0, 0, 12, 136, 224, 250, 227, 148, 20, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 + }, + { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 23, 131, 204, 240, 251, 234, 186, 94, 2, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 60, 236, 255, 255, 255, 255, 255, 255, 255, 185, 8, 0, 0, 0, 0, 0, + 0, 0, 0, 16, 236, 255, 255, 242, 171, 151, 202, 255, 255, 255, 144, 0, 0, 0, 0, 0, + 0, 0, 0, 113, 255, 255, 222, 25, 0, 0, 0, 118, 255, 255, 247, 9, 0, 0, 0, 0, + 0, 0, 0, 169, 255, 255, 99, 0, 0, 0, 0, 0, 223, 255, 255, 53, 0, 0, 0, 0, + 0, 0, 0, 180, 255, 255, 65, 0, 0, 0, 0, 0, 192, 255, 255, 64, 0, 0, 0, 0, + 0, 0, 0, 150, 255, 255, 100, 0, 0, 0, 0, 5, 234, 255, 254, 24, 0, 0, 0, 0, + 0, 0, 0, 77, 255, 255, 195, 0, 0, 0, 0, 121, 255, 255, 174, 0, 0, 0, 0, 0, + 0, 0, 0, 5, 221, 255, 255, 83, 0, 0, 111, 253, 255, 234, 28, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 82, 255, 255, 237, 60, 178, 255, 255, 233, 49, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 158, 255, 255, 255, 255, 255, 201, 33, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 1, 110, 255, 255, 255, 255, 124, 4, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 21, 185, 255, 255, 255, 255, 255, 148, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 31, 221, 255, 255, 239, 136, 253, 255, 255, 98, 0, 0, 0, 0, 149, 204, 204, 66, + 0, 6, 209, 255, 255, 221, 30, 0, 120, 255, 255, 248, 55, 0, 0, 11, 247, 255, 254, 21, + 0, 103, 255, 255, 245, 36, 0, 0, 0, 167, 255, 255, 229, 24, 0, 89, 255, 255, 192, 0, + 0, 191, 255, 255, 142, 0, 0, 0, 0, 9, 204, 255, 255, 197, 7, 208, 255, 255, 93, 0, + 0, 237, 255, 255, 75, 0, 0, 0, 0, 0, 28, 232, 255, 255, 203, 255, 255, 222, 5, 0, + 0, 247, 255, 255, 55, 0, 0, 0, 0, 0, 0, 58, 249, 255, 255, 255, 255, 87, 0, 0, + 0, 230, 255, 255, 98, 0, 0, 0, 0, 0, 0, 0, 102, 255, 255, 255, 183, 0, 0, 0, + 0, 179, 255, 255, 210, 7, 0, 0, 0, 0, 0, 13, 186, 255, 255, 255, 231, 23, 0, 0, + 0, 90, 255, 255, 255, 180, 22, 0, 0, 7, 90, 226, 255, 255, 251, 255, 255, 188, 2, 0, + 0, 3, 195, 255, 255, 255, 248, 200, 203, 242, 255, 255, 255, 205, 40, 229, 255, 255, 127, 0, + 0, 0, 20, 194, 255, 255, 255, 255, 255, 255, 255, 252, 149, 13, 0, 71, 255, 255, 253, 66, + 0, 0, 0, 3, 88, 179, 231, 250, 237, 207, 135, 42, 0, 0, 0, 0, 149, 255, 255, 231, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 + }, + { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 187, 255, 255, 255, 33, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 167, 255, 255, 255, 14, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 147, 255, 255, 250, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 128, 255, 255, 231, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 108, 255, 255, 211, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 88, 255, 255, 191, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 69, 255, 255, 172, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 49, 255, 255, 152, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 29, 248, 248, 129, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 + }, + { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 79, 247, 255, 213, 26, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 91, 252, 255, 206, 19, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 72, 251, 255, 223, 23, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 40, 244, 255, 245, 41, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 6, 206, 255, 255, 100, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 121, 255, 255, 187, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 21, 241, 255, 253, 46, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 130, 255, 255, 173, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 4, 230, 255, 255, 66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 64, 255, 255, 231, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 135, 255, 255, 158, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 190, 255, 255, 100, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 232, 255, 255, 57, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 5, 255, 255, 255, 27, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 18, 255, 255, 255, 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 24, 255, 255, 255, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 12, 255, 255, 255, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 1, 251, 255, 255, 38, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 215, 255, 255, 77, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 172, 255, 255, 123, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 108, 255, 255, 191, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 34, 255, 255, 250, 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 194, 255, 255, 113, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 85, 255, 255, 220, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 1, 205, 255, 255, 107, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 61, 254, 255, 235, 21, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 136, 255, 255, 180, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 5, 190, 255, 255, 123, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 14, 207, 255, 255, 94, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 18, 198, 255, 252, 96, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 119, 128, 126, 22, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 + }, + { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 136, 255, 255, 165, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 123, 255, 255, 182, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 144, 255, 255, 167, 1, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 2, 181, 255, 255, 130, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 22, 232, 255, 253, 61, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 86, 255, 255, 217, 5, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 197, 255, 255, 109, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 72, 255, 255, 226, 3, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 219, 255, 255, 79, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 133, 255, 255, 163, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 58, 255, 255, 234, 1, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 251, 255, 255, 33, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 215, 255, 255, 74, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 184, 255, 255, 103, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 171, 255, 255, 117, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 164, 255, 255, 123, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 177, 255, 255, 111, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 195, 255, 255, 95, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 235, 255, 255, 58, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 23, 255, 255, 255, 17, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 92, 255, 255, 208, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 168, 255, 255, 134, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 20, 248, 255, 255, 39, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 124, 255, 255, 187, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 21, 241, 255, 254, 54, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 156, 255, 255, 161, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 79, 255, 255, 223, 15, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 39, 237, 255, 244, 53, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 24, 222, 255, 250, 72, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 29, 216, 255, 244, 73, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 97, 128, 128, 51, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 + }, + { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 123, 255, 255, 209, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 95, 255, 255, 182, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 67, 255, 255, 154, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 40, 255, 255, 127, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 14, 7, 0, 0, 0, 0, 12, 255, 255, 99, 0, 0, 0, 0, 0, 21, 0, 0, + 0, 0, 108, 244, 176, 102, 28, 0, 0, 241, 255, 72, 0, 9, 73, 146, 220, 217, 0, 0, + 0, 0, 145, 255, 255, 255, 255, 209, 134, 231, 255, 142, 182, 246, 255, 255, 255, 249, 2, 0, + 0, 0, 183, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 31, 0, + 0, 0, 19, 42, 62, 82, 102, 122, 222, 255, 255, 254, 138, 109, 89, 70, 50, 30, 3, 0, + 0, 0, 0, 0, 0, 0, 0, 67, 253, 254, 241, 255, 155, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 20, 230, 255, 183, 125, 255, 255, 88, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 179, 255, 255, 74, 16, 241, 255, 241, 35, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 111, 255, 255, 219, 1, 0, 135, 255, 255, 203, 6, 0, 0, 0, 0, + 0, 0, 0, 0, 47, 248, 255, 255, 111, 0, 0, 22, 246, 255, 255, 142, 0, 0, 0, 0, + 0, 0, 0, 0, 34, 168, 254, 242, 14, 0, 0, 0, 146, 255, 223, 88, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 50, 101, 0, 0, 0, 0, 29, 115, 7, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 + }, + { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 8, 180, 180, 75, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 12, 255, 255, 108, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 12, 255, 255, 108, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 12, 255, 255, 108, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 12, 255, 255, 108, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 12, 255, 255, 108, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 12, 255, 255, 108, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 120, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 216, 0, 0, + 0, 0, 120, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 216, 0, 0, + 0, 0, 65, 140, 140, 140, 140, 140, 145, 255, 255, 188, 140, 140, 140, 140, 140, 118, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 12, 255, 255, 108, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 12, 255, 255, 108, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 12, 255, 255, 108, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 12, 255, 255, 108, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 12, 255, 255, 108, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 12, 255, 255, 108, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 + }, + { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 81, 92, 92, 82, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 5, 250, 255, 255, 234, 1, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 42, 255, 255, 255, 164, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 88, 255, 255, 255, 86, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 135, 255, 255, 245, 11, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 186, 255, 255, 167, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 237, 255, 255, 69, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 35, 255, 255, 224, 2, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 92, 255, 255, 118, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 148, 255, 247, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 + }, + { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 57, 216, 216, 216, 216, 216, 216, 216, 216, 216, 216, 145, 0, 0, 0, 0, + 0, 0, 0, 0, 68, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 172, 0, 0, 0, 0, + 0, 0, 0, 0, 68, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 172, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 + }, + { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 30, 134, 149, 77, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 8, 226, 255, 255, 255, 81, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 58, 255, 255, 255, 255, 161, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 68, 255, 255, 255, 255, 171, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 25, 250, 255, 255, 255, 121, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 98, 227, 241, 169, 12, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 + }, + { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 78, 255, 255, 170, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 184, 255, 255, 63, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 36, 254, 255, 212, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 141, 255, 255, 106, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 238, 255, 242, 13, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 98, 255, 255, 148, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 204, 255, 255, 42, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 55, 255, 255, 191, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 162, 255, 255, 84, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 20, 248, 255, 229, 4, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 119, 255, 255, 127, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 2, 223, 255, 250, 25, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 76, 255, 255, 169, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 183, 255, 255, 62, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 35, 254, 255, 212, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 140, 255, 255, 105, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 8, 237, 255, 242, 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 97, 255, 255, 148, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 203, 255, 255, 42, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 54, 255, 255, 190, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 161, 255, 255, 83, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 19, 247, 255, 229, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 118, 255, 255, 126, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 2, 221, 255, 250, 25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 75, 255, 255, 169, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 + }, + { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 23, 125, 206, 237, 245, 216, 151, 47, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 68, 234, 255, 255, 255, 255, 255, 255, 252, 119, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 46, 245, 255, 255, 246, 190, 180, 228, 255, 255, 255, 106, 0, 0, 0, 0, + 0, 0, 0, 0, 206, 255, 255, 184, 19, 0, 0, 3, 116, 254, 255, 250, 34, 0, 0, 0, + 0, 0, 0, 75, 255, 255, 223, 10, 0, 0, 0, 0, 0, 145, 255, 255, 154, 0, 0, 0, + 0, 0, 0, 168, 255, 255, 108, 0, 0, 0, 0, 0, 0, 21, 250, 255, 244, 7, 0, 0, + 0, 0, 2, 236, 255, 255, 25, 0, 0, 0, 0, 0, 0, 0, 186, 255, 255, 70, 0, 0, + 0, 0, 38, 255, 255, 228, 0, 0, 0, 0, 0, 0, 0, 0, 130, 255, 255, 130, 0, 0, + 0, 0, 75, 255, 255, 189, 0, 0, 0, 0, 0, 0, 0, 0, 89, 255, 255, 168, 0, 0, + 0, 0, 109, 255, 255, 163, 0, 0, 0, 0, 0, 0, 0, 0, 62, 255, 255, 204, 0, 0, + 0, 0, 124, 255, 255, 145, 0, 0, 0, 0, 0, 0, 0, 0, 43, 255, 255, 221, 0, 0, + 0, 0, 134, 255, 255, 138, 0, 0, 0, 0, 0, 0, 0, 0, 36, 255, 255, 232, 0, 0, + 0, 0, 141, 255, 255, 133, 0, 0, 0, 0, 0, 0, 0, 0, 30, 255, 255, 241, 0, 0, + 0, 0, 133, 255, 255, 138, 0, 0, 0, 0, 0, 0, 0, 0, 36, 255, 255, 232, 0, 0, + 0, 0, 122, 255, 255, 145, 0, 0, 0, 0, 0, 0, 0, 0, 43, 255, 255, 221, 0, 0, + 0, 0, 106, 255, 255, 163, 0, 0, 0, 0, 0, 0, 0, 0, 62, 255, 255, 206, 0, 0, + 0, 0, 71, 255, 255, 189, 0, 0, 0, 0, 0, 0, 0, 0, 89, 255, 255, 172, 0, 0, + 0, 0, 32, 255, 255, 227, 0, 0, 0, 0, 0, 0, 0, 0, 129, 255, 255, 135, 0, 0, + 0, 0, 0, 228, 255, 255, 25, 0, 0, 0, 0, 0, 0, 0, 185, 255, 255, 80, 0, 0, + 0, 0, 0, 156, 255, 255, 107, 0, 0, 0, 0, 0, 0, 21, 250, 255, 250, 13, 0, 0, + 0, 0, 0, 59, 255, 255, 221, 9, 0, 0, 0, 0, 0, 143, 255, 255, 170, 0, 0, 0, + 0, 0, 0, 0, 190, 255, 255, 180, 17, 0, 0, 2, 112, 253, 255, 254, 48, 0, 0, 0, + 0, 0, 0, 0, 33, 238, 255, 255, 243, 184, 175, 225, 255, 255, 255, 128, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 55, 226, 255, 255, 255, 255, 255, 255, 254, 137, 1, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 17, 119, 203, 237, 245, 219, 157, 55, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 + }, + { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 2, 133, 255, 255, 148, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 16, 181, 255, 255, 255, 148, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 41, 218, 255, 255, 255, 255, 148, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 80, 242, 255, 255, 181, 255, 255, 148, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 1, 129, 254, 255, 255, 125, 63, 255, 255, 148, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 17, 227, 255, 250, 97, 0, 70, 255, 255, 148, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 58, 233, 65, 0, 0, 77, 255, 255, 148, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 11, 0, 0, 0, 82, 255, 255, 148, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 86, 255, 255, 148, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 88, 255, 255, 148, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 88, 255, 255, 148, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 88, 255, 255, 148, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 88, 255, 255, 148, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 88, 255, 255, 148, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 88, 255, 255, 148, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 88, 255, 255, 148, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 88, 255, 255, 148, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 88, 255, 255, 148, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 88, 255, 255, 148, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 88, 255, 255, 148, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 88, 255, 255, 148, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 88, 255, 255, 148, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 88, 255, 255, 148, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 88, 255, 255, 148, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 88, 255, 255, 148, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 + }, + { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 6, 90, 170, 221, 246, 243, 215, 153, 48, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 84, 222, 255, 255, 255, 255, 255, 255, 255, 255, 138, 1, 0, 0, 0, 0, + 0, 0, 4, 148, 255, 255, 255, 254, 204, 170, 176, 236, 255, 255, 255, 131, 0, 0, 0, 0, + 0, 0, 0, 166, 255, 250, 146, 27, 0, 0, 0, 9, 154, 255, 255, 251, 36, 0, 0, 0, + 0, 0, 0, 8, 170, 55, 0, 0, 0, 0, 0, 0, 2, 202, 255, 255, 127, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 106, 255, 255, 180, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 73, 255, 255, 197, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 81, 255, 255, 175, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 122, 255, 255, 141, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 201, 255, 255, 63, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 65, 255, 255, 225, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 218, 255, 255, 97, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 163, 255, 255, 187, 1, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 115, 255, 255, 232, 26, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 78, 253, 255, 249, 58, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 55, 245, 255, 255, 94, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 39, 235, 255, 255, 123, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 26, 224, 255, 255, 148, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 16, 211, 255, 255, 166, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 8, 194, 255, 255, 182, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 3, 176, 255, 255, 197, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 155, 255, 255, 210, 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 82, 255, 255, 255, 238, 228, 228, 228, 228, 228, 228, 228, 228, 228, 228, 171, 0, 0, + 0, 0, 96, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 192, 0, 0, + 0, 0, 96, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 192, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 + }, + { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 1, 72, 148, 208, 235, 250, 239, 207, 147, 47, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 73, 212, 255, 255, 255, 255, 255, 255, 255, 255, 254, 147, 3, 0, 0, 0, 0, + 0, 0, 107, 255, 255, 255, 255, 225, 181, 167, 195, 242, 255, 255, 255, 153, 0, 0, 0, 0, + 0, 0, 24, 230, 247, 145, 40, 0, 0, 0, 0, 18, 153, 255, 255, 255, 55, 0, 0, 0, + 0, 0, 0, 50, 34, 0, 0, 0, 0, 0, 0, 0, 0, 188, 255, 255, 143, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 105, 255, 255, 182, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 99, 255, 255, 186, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 152, 255, 255, 150, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 42, 247, 255, 255, 65, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 83, 233, 255, 255, 173, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 18, 144, 144, 150, 173, 228, 255, 255, 255, 168, 8, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 32, 255, 255, 255, 255, 255, 233, 158, 62, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 32, 255, 255, 255, 255, 255, 254, 220, 152, 52, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 5, 20, 57, 125, 229, 255, 255, 154, 5, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 184, 255, 255, 146, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 244, 255, 252, 30, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 180, 255, 255, 98, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 157, 255, 255, 125, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 177, 255, 255, 114, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 236, 255, 255, 79, 0, 0, + 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 255, 255, 246, 12, 0, 0, + 0, 0, 206, 162, 70, 5, 0, 0, 0, 0, 0, 23, 144, 255, 255, 255, 131, 0, 0, 0, + 0, 0, 212, 255, 255, 246, 201, 172, 159, 169, 204, 251, 255, 255, 255, 185, 6, 0, 0, 0, + 0, 0, 178, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 251, 139, 8, 0, 0, 0, 0, + 0, 0, 0, 60, 136, 190, 226, 244, 253, 242, 224, 180, 119, 26, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 + }, + { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 74, 255, 255, 255, 40, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 226, 255, 255, 255, 40, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 148, 255, 255, 255, 255, 40, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 58, 253, 255, 203, 255, 255, 40, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 6, 214, 255, 207, 155, 255, 255, 40, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 130, 255, 255, 83, 165, 255, 255, 40, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 44, 250, 255, 192, 0, 174, 255, 255, 40, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 2, 200, 255, 247, 38, 0, 182, 255, 255, 40, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 112, 255, 255, 120, 0, 0, 189, 255, 255, 40, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 31, 244, 255, 206, 4, 0, 0, 193, 255, 255, 40, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 184, 255, 251, 50, 0, 0, 0, 195, 255, 255, 40, 0, 0, 0, 0, + 0, 0, 0, 0, 94, 255, 255, 136, 0, 0, 0, 0, 196, 255, 255, 40, 0, 0, 0, 0, + 0, 0, 0, 21, 236, 255, 218, 8, 0, 0, 0, 0, 196, 255, 255, 40, 0, 0, 0, 0, + 0, 0, 0, 167, 255, 254, 63, 0, 0, 0, 0, 0, 196, 255, 255, 40, 0, 0, 0, 0, + 0, 0, 76, 255, 255, 152, 0, 0, 0, 0, 0, 0, 196, 255, 255, 40, 0, 0, 0, 0, + 0, 13, 227, 255, 228, 15, 0, 0, 0, 0, 0, 0, 196, 255, 255, 40, 0, 0, 0, 0, + 0, 149, 255, 255, 78, 0, 0, 0, 0, 0, 0, 0, 196, 255, 255, 40, 0, 0, 0, 0, + 0, 250, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 176, 0, + 0, 252, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 176, 0, + 0, 204, 208, 208, 208, 208, 208, 208, 208, 208, 208, 208, 244, 255, 255, 215, 208, 208, 143, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 196, 255, 255, 40, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 196, 255, 255, 40, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 196, 255, 255, 40, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 196, 255, 255, 40, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 196, 255, 255, 40, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 + }, + { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 195, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 188, 0, 0, 0, 0, + 0, 0, 0, 0, 215, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 188, 0, 0, 0, 0, + 0, 0, 0, 0, 235, 255, 251, 212, 212, 212, 212, 212, 212, 212, 212, 155, 0, 0, 0, 0, + 0, 0, 0, 1, 252, 255, 215, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 19, 255, 255, 192, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 40, 255, 255, 168, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 60, 255, 255, 144, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 80, 255, 255, 120, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 100, 255, 255, 96, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 121, 255, 255, 136, 118, 143, 155, 144, 117, 57, 1, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 141, 255, 255, 255, 255, 255, 255, 255, 255, 255, 214, 74, 0, 0, 0, 0, 0, + 0, 0, 0, 105, 253, 255, 255, 255, 255, 255, 255, 255, 255, 255, 254, 121, 0, 0, 0, 0, + 0, 0, 0, 0, 53, 87, 48, 20, 4, 13, 45, 113, 225, 255, 255, 255, 82, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 197, 255, 255, 222, 2, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 35, 252, 255, 255, 55, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 199, 255, 255, 106, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 162, 255, 255, 125, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 161, 255, 255, 115, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 191, 255, 255, 90, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 246, 255, 255, 31, 0, 0, + 0, 0, 8, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 148, 255, 255, 200, 0, 0, 0, + 0, 0, 36, 225, 109, 22, 0, 0, 0, 0, 0, 25, 154, 255, 255, 254, 68, 0, 0, 0, + 0, 0, 36, 255, 255, 255, 220, 184, 169, 174, 205, 251, 255, 255, 255, 123, 0, 0, 0, 0, + 0, 0, 24, 236, 255, 255, 255, 255, 255, 255, 255, 255, 255, 239, 94, 0, 0, 0, 0, 0, + 0, 0, 0, 13, 98, 169, 215, 241, 252, 243, 224, 176, 107, 12, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 + }, + { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 23, 103, 180, 216, 239, 250, 236, 197, 2, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 6, 122, 246, 255, 255, 255, 255, 255, 255, 255, 4, 0, 0, 0, + 0, 0, 0, 0, 0, 7, 188, 255, 255, 255, 243, 183, 156, 145, 161, 207, 3, 0, 0, 0, + 0, 0, 0, 0, 0, 175, 255, 255, 232, 100, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 84, 255, 255, 222, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 3, 223, 255, 253, 58, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 67, 255, 255, 175, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 154, 255, 255, 80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 219, 255, 255, 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 10, 253, 255, 221, 0, 19, 129, 211, 243, 243, 214, 146, 35, 0, 0, 0, 0, 0, + 0, 0, 51, 255, 255, 193, 42, 225, 255, 255, 255, 255, 255, 255, 250, 102, 0, 0, 0, 0, + 0, 0, 77, 255, 255, 186, 214, 255, 214, 139, 114, 134, 211, 255, 255, 255, 83, 0, 0, 0, + 0, 0, 90, 255, 255, 255, 252, 110, 1, 0, 0, 0, 1, 132, 255, 255, 234, 9, 0, 0, + 0, 0, 103, 255, 255, 255, 114, 0, 0, 0, 0, 0, 0, 0, 194, 255, 255, 95, 0, 0, + 0, 0, 107, 255, 255, 223, 2, 0, 0, 0, 0, 0, 0, 0, 91, 255, 255, 160, 0, 0, + 0, 0, 95, 255, 255, 161, 0, 0, 0, 0, 0, 0, 0, 0, 41, 255, 255, 196, 0, 0, + 0, 0, 79, 255, 255, 155, 0, 0, 0, 0, 0, 0, 0, 0, 24, 255, 255, 211, 0, 0, + 0, 0, 39, 255, 255, 183, 0, 0, 0, 0, 0, 0, 0, 0, 33, 255, 255, 199, 0, 0, + 0, 0, 2, 243, 255, 238, 5, 0, 0, 0, 0, 0, 0, 0, 69, 255, 255, 176, 0, 0, + 0, 0, 0, 167, 255, 255, 90, 0, 0, 0, 0, 0, 0, 0, 138, 255, 255, 122, 0, 0, + 0, 0, 0, 70, 255, 255, 225, 18, 0, 0, 0, 0, 0, 23, 238, 255, 255, 42, 0, 0, + 0, 0, 0, 0, 185, 255, 255, 202, 32, 0, 0, 0, 33, 205, 255, 255, 178, 0, 0, 0, + 0, 0, 0, 0, 30, 227, 255, 255, 251, 188, 162, 190, 250, 255, 255, 232, 25, 0, 0, 0, + 0, 0, 0, 0, 0, 38, 209, 255, 255, 255, 255, 255, 255, 255, 216, 37, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 5, 99, 187, 231, 250, 233, 187, 103, 5, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 + }, + { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 160, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 252, 0, 0, + 0, 0, 160, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 252, 0, 0, + 0, 0, 132, 212, 212, 212, 212, 212, 212, 212, 212, 212, 212, 212, 218, 255, 255, 237, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 101, 255, 255, 143, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 208, 255, 255, 39, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 61, 255, 255, 190, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 169, 255, 255, 85, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 25, 250, 255, 231, 5, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 255, 255, 131, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 230, 255, 253, 30, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 88, 255, 255, 178, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 196, 255, 255, 73, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 47, 255, 255, 222, 2, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 156, 255, 255, 120, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 246, 255, 249, 22, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 116, 255, 255, 166, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 2, 221, 255, 255, 61, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 75, 255, 255, 213, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 183, 255, 255, 108, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 36, 254, 255, 244, 15, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 143, 255, 255, 154, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 10, 239, 255, 255, 50, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 103, 255, 255, 201, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 210, 255, 255, 96, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 62, 255, 255, 238, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 + }, + { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 45, 149, 212, 243, 249, 229, 180, 95, 6, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 1, 138, 253, 255, 255, 255, 255, 255, 255, 255, 211, 38, 0, 0, 0, 0, + 0, 0, 0, 0, 140, 255, 255, 255, 223, 172, 161, 198, 254, 255, 255, 228, 19, 0, 0, 0, + 0, 0, 0, 38, 253, 255, 254, 113, 3, 0, 0, 0, 51, 220, 255, 255, 140, 0, 0, 0, + 0, 0, 0, 119, 255, 255, 167, 0, 0, 0, 0, 0, 0, 65, 255, 255, 222, 0, 0, 0, + 0, 0, 0, 151, 255, 255, 97, 0, 0, 0, 0, 0, 0, 2, 248, 255, 252, 2, 0, 0, + 0, 0, 0, 136, 255, 255, 99, 0, 0, 0, 0, 0, 0, 4, 249, 255, 249, 0, 0, 0, + 0, 0, 0, 94, 255, 255, 147, 0, 0, 0, 0, 0, 0, 53, 255, 255, 199, 0, 0, 0, + 0, 0, 0, 11, 237, 255, 244, 27, 0, 0, 0, 0, 2, 188, 255, 255, 97, 0, 0, 0, + 0, 0, 0, 0, 101, 255, 255, 217, 43, 0, 0, 6, 167, 255, 255, 183, 2, 0, 0, 0, + 0, 0, 0, 0, 0, 138, 255, 255, 249, 140, 89, 220, 255, 255, 173, 10, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 95, 246, 255, 255, 255, 255, 242, 92, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 20, 160, 253, 255, 242, 255, 255, 255, 185, 33, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 49, 230, 255, 253, 142, 14, 50, 191, 255, 255, 242, 76, 0, 0, 0, 0, + 0, 0, 0, 32, 236, 255, 251, 82, 0, 0, 0, 0, 101, 247, 255, 251, 74, 0, 0, 0, + 0, 0, 0, 178, 255, 255, 112, 0, 0, 0, 0, 0, 0, 66, 250, 255, 236, 19, 0, 0, + 0, 0, 28, 254, 255, 228, 4, 0, 0, 0, 0, 0, 0, 0, 140, 255, 255, 120, 0, 0, + 0, 0, 83, 255, 255, 161, 0, 0, 0, 0, 0, 0, 0, 0, 58, 255, 255, 185, 0, 0, + 0, 0, 99, 255, 255, 144, 0, 0, 0, 0, 0, 0, 0, 0, 43, 255, 255, 201, 0, 0, + 0, 0, 81, 255, 255, 172, 0, 0, 0, 0, 0, 0, 0, 0, 80, 255, 255, 178, 0, 0, + 0, 0, 30, 255, 255, 241, 18, 0, 0, 0, 0, 0, 0, 1, 187, 255, 255, 116, 0, 0, + 0, 0, 0, 190, 255, 255, 194, 26, 0, 0, 0, 0, 13, 155, 255, 255, 240, 21, 0, 0, + 0, 0, 0, 43, 240, 255, 255, 250, 189, 152, 149, 179, 242, 255, 255, 253, 87, 0, 0, 0, + 0, 0, 0, 0, 53, 219, 255, 255, 255, 255, 255, 255, 255, 255, 237, 82, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 7, 94, 174, 224, 246, 250, 232, 187, 113, 15, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 + }, + { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 61, 160, 221, 246, 240, 210, 135, 32, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 6, 160, 255, 255, 255, 255, 255, 255, 255, 244, 99, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 171, 255, 255, 255, 218, 171, 175, 230, 255, 255, 254, 97, 0, 0, 0, 0, + 0, 0, 0, 91, 255, 255, 245, 85, 0, 0, 0, 3, 117, 254, 255, 246, 32, 0, 0, 0, + 0, 0, 0, 210, 255, 255, 92, 0, 0, 0, 0, 0, 0, 122, 255, 255, 166, 0, 0, 0, + 0, 0, 30, 255, 255, 224, 1, 0, 0, 0, 0, 0, 0, 4, 221, 255, 248, 16, 0, 0, + 0, 0, 81, 255, 255, 160, 0, 0, 0, 0, 0, 0, 0, 0, 126, 255, 255, 89, 0, 0, + 0, 0, 102, 255, 255, 132, 0, 0, 0, 0, 0, 0, 0, 0, 70, 255, 255, 139, 0, 0, + 0, 0, 105, 255, 255, 130, 0, 0, 0, 0, 0, 0, 0, 0, 50, 255, 255, 180, 0, 0, + 0, 0, 85, 255, 255, 158, 0, 0, 0, 0, 0, 0, 0, 0, 75, 255, 255, 197, 0, 0, + 0, 0, 36, 255, 255, 226, 3, 0, 0, 0, 0, 0, 0, 0, 176, 255, 255, 211, 0, 0, + 0, 0, 0, 211, 255, 255, 117, 0, 0, 0, 0, 0, 0, 120, 255, 255, 255, 205, 0, 0, + 0, 0, 0, 82, 255, 255, 255, 149, 45, 7, 13, 65, 178, 255, 217, 255, 255, 192, 0, 0, + 0, 0, 0, 0, 138, 255, 255, 255, 255, 255, 255, 255, 255, 211, 90, 255, 255, 180, 0, 0, + 0, 0, 0, 0, 0, 93, 223, 255, 255, 255, 255, 252, 167, 16, 100, 255, 255, 154, 0, 0, + 0, 0, 0, 0, 0, 0, 1, 48, 89, 101, 79, 25, 0, 0, 137, 255, 255, 110, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 187, 255, 255, 66, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 244, 255, 245, 10, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 96, 255, 255, 169, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 224, 255, 255, 72, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 172, 255, 255, 187, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 53, 197, 255, 255, 239, 40, 0, 0, 0, 0, + 0, 0, 0, 0, 136, 174, 147, 143, 165, 220, 255, 255, 255, 243, 56, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 156, 255, 255, 255, 255, 255, 255, 255, 185, 37, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 116, 226, 247, 249, 227, 202, 137, 57, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 + }, + { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 65, 223, 241, 141, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 202, 255, 255, 255, 41, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 228, 255, 255, 255, 67, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 181, 255, 255, 250, 26, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 29, 156, 174, 80, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 31, 159, 177, 83, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 183, 255, 255, 250, 26, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 227, 255, 255, 255, 67, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 201, 255, 255, 255, 41, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 65, 223, 241, 140, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 + }, + { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 45, 212, 243, 166, 2, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 170, 255, 255, 255, 73, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 196, 255, 255, 255, 99, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 149, 255, 255, 255, 52, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 17, 145, 176, 99, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 158, 255, 255, 230, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 202, 255, 255, 175, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1, 244, 255, 255, 98, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 34, 255, 255, 250, 17, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 81, 255, 255, 177, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 136, 255, 255, 80, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 192, 255, 231, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 3, 243, 255, 129, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 17, 136, 136, 25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 + }, + { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 38, 129, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 38, 163, 252, 216, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 38, 163, 252, 255, 255, 213, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 38, 163, 252, 255, 255, 246, 145, 26, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 38, 163, 252, 255, 255, 244, 140, 23, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 38, 163, 252, 255, 255, 242, 135, 20, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 38, 163, 252, 255, 255, 239, 130, 17, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 32, 163, 252, 255, 255, 237, 125, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 120, 255, 255, 255, 139, 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 83, 247, 255, 255, 243, 137, 22, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 25, 145, 247, 255, 255, 245, 142, 25, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 25, 145, 247, 255, 255, 247, 147, 28, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 26, 146, 247, 255, 255, 249, 152, 32, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 26, 146, 248, 255, 255, 250, 157, 35, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 26, 147, 248, 255, 255, 252, 145, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 26, 147, 248, 255, 216, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 27, 148, 208, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 + }, + { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 63, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 136, 114, 0, 0, + 0, 0, 120, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 216, 0, 0, + 0, 0, 120, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 216, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 65, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 140, 118, 0, 0, + 0, 0, 120, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 216, 0, 0, + 0, 0, 120, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 216, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 + }, + { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 83, 83, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 120, 255, 209, 83, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 117, 255, 255, 255, 209, 83, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 4, 98, 220, 255, 255, 255, 209, 83, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 3, 93, 216, 255, 255, 255, 209, 83, 1, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 2, 89, 212, 255, 255, 255, 209, 83, 1, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 1, 84, 208, 255, 255, 255, 209, 83, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 79, 204, 255, 255, 255, 209, 78, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 76, 238, 255, 255, 216, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 92, 215, 255, 255, 255, 170, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 96, 219, 255, 255, 255, 192, 65, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 6, 101, 222, 255, 255, 255, 193, 65, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 7, 106, 226, 255, 255, 255, 193, 66, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 9, 111, 229, 255, 255, 255, 194, 66, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 69, 232, 255, 255, 255, 194, 67, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 120, 255, 255, 195, 67, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 120, 195, 68, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 + }, + { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 18, 90, 158, 203, 235, 250, 245, 226, 180, 108, 17, 0, 0, 0, 0, 0, + 0, 0, 13, 165, 249, 255, 255, 255, 255, 255, 255, 255, 255, 255, 237, 90, 0, 0, 0, 0, + 0, 0, 0, 214, 255, 255, 255, 250, 213, 193, 198, 229, 255, 255, 255, 254, 97, 0, 0, 0, + 0, 0, 0, 107, 234, 142, 64, 6, 0, 0, 0, 0, 52, 187, 255, 255, 243, 19, 0, 0, + 0, 0, 0, 7, 6, 0, 0, 0, 0, 0, 0, 0, 0, 3, 199, 255, 255, 98, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 101, 255, 255, 136, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 92, 255, 255, 130, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 130, 255, 255, 101, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 228, 255, 251, 28, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 184, 255, 255, 160, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 30, 204, 255, 255, 202, 13, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 73, 236, 255, 255, 188, 14, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 105, 253, 255, 255, 139, 3, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 75, 254, 255, 246, 84, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 205, 255, 253, 70, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 29, 255, 255, 176, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 58, 255, 255, 116, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 41, 148, 148, 56, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 31, 159, 177, 83, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 183, 255, 255, 250, 26, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 227, 255, 255, 255, 67, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 201, 255, 255, 255, 41, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 65, 223, 241, 140, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 + }, + { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 10, 90, 178, 217, 245, 237, 209, 138, 42, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 69, 229, 255, 255, 255, 255, 255, 255, 255, 252, 135, 5, 0, 0, 0, + 0, 0, 0, 0, 111, 254, 255, 253, 183, 115, 86, 96, 142, 232, 255, 255, 168, 2, 0, 0, + 0, 0, 0, 83, 253, 255, 207, 39, 0, 0, 0, 0, 0, 11, 159, 255, 255, 132, 0, 0, + 0, 0, 21, 241, 255, 200, 8, 0, 0, 0, 0, 0, 0, 0, 0, 162, 255, 249, 38, 0, + 0, 0, 152, 255, 237, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 230, 255, 162, 0, + 0, 21, 251, 255, 120, 0, 0, 0, 0, 7, 36, 33, 10, 0, 0, 0, 108, 255, 244, 12, + 0, 106, 255, 244, 11, 0, 0, 17, 153, 244, 255, 255, 255, 223, 148, 15, 21, 252, 255, 81, + 0, 191, 255, 173, 0, 0, 20, 215, 255, 255, 255, 255, 255, 255, 255, 27, 0, 202, 255, 131, + 1, 243, 255, 99, 0, 0, 173, 255, 252, 109, 11, 22, 169, 255, 255, 14, 0, 157, 255, 178, + 36, 255, 255, 53, 0, 49, 255, 255, 145, 0, 0, 0, 150, 255, 255, 2, 0, 124, 255, 200, + 77, 255, 255, 12, 0, 139, 255, 255, 49, 0, 0, 0, 165, 255, 244, 0, 0, 111, 255, 214, + 95, 255, 244, 0, 0, 194, 255, 233, 0, 0, 0, 0, 180, 255, 231, 0, 0, 102, 255, 225, + 109, 255, 232, 0, 0, 224, 255, 207, 0, 0, 0, 0, 195, 255, 217, 0, 0, 105, 255, 217, + 120, 255, 223, 0, 0, 236, 255, 188, 0, 0, 0, 0, 213, 255, 205, 0, 0, 117, 255, 201, + 111, 255, 232, 0, 0, 227, 255, 193, 0, 0, 0, 0, 243, 255, 197, 0, 0, 137, 255, 171, + 97, 255, 246, 0, 0, 196, 255, 223, 0, 0, 0, 40, 255, 255, 205, 0, 0, 172, 255, 124, + 79, 255, 255, 18, 0, 138, 255, 255, 41, 0, 0, 131, 255, 254, 236, 1, 2, 231, 255, 59, + 36, 255, 255, 65, 0, 44, 253, 255, 204, 68, 102, 248, 225, 158, 255, 120, 133, 255, 220, 1, + 1, 239, 255, 123, 0, 0, 142, 255, 255, 255, 255, 252, 75, 64, 255, 255, 255, 255, 82, 0, + 0, 177, 255, 212, 0, 0, 2, 117, 223, 246, 202, 72, 0, 0, 122, 236, 227, 101, 0, 0, + 0, 82, 255, 255, 67, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 5, 228, 255, 211, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 83, 255, 255, 172, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 165, 255, 255, 193, 39, 0, 0, 0, 0, 0, 0, 0, 32, 115, 0, 0, 0, + 0, 0, 0, 4, 173, 255, 255, 253, 193, 125, 99, 89, 106, 146, 205, 255, 224, 0, 0, 0, + 0, 0, 0, 0, 3, 113, 242, 255, 255, 255, 255, 255, 255, 255, 255, 255, 180, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 20, 103, 182, 220, 244, 249, 233, 194, 135, 53, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 + }, + { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 154, 255, 255, 239, 5, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 2, 232, 255, 255, 255, 71, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 62, 255, 255, 255, 255, 154, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 144, 255, 255, 228, 255, 233, 2, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 224, 255, 221, 142, 255, 255, 63, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 52, 255, 255, 157, 73, 255, 255, 145, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 134, 255, 255, 91, 8, 246, 255, 227, 1, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 215, 255, 251, 18, 0, 178, 255, 255, 54, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 42, 255, 255, 191, 0, 0, 99, 255, 255, 137, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 124, 255, 255, 112, 0, 0, 21, 253, 255, 220, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 206, 255, 255, 34, 0, 0, 0, 195, 255, 255, 46, 0, 0, 0, 0, + 0, 0, 0, 0, 32, 255, 255, 211, 0, 0, 0, 0, 116, 255, 255, 129, 0, 0, 0, 0, + 0, 0, 0, 0, 114, 255, 255, 133, 0, 0, 0, 0, 36, 255, 255, 211, 0, 0, 0, 0, + 0, 0, 0, 0, 197, 255, 255, 54, 0, 0, 0, 0, 0, 212, 255, 255, 38, 0, 0, 0, + 0, 0, 0, 24, 253, 255, 255, 205, 204, 204, 204, 204, 204, 237, 255, 255, 120, 0, 0, 0, + 0, 0, 0, 105, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 203, 0, 0, 0, + 0, 0, 0, 187, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 30, 0, 0, + 0, 0, 17, 251, 255, 242, 6, 0, 0, 0, 0, 0, 0, 0, 146, 255, 255, 112, 0, 0, + 0, 0, 95, 255, 255, 171, 0, 0, 0, 0, 0, 0, 0, 0, 70, 255, 255, 195, 0, 0, + 0, 0, 177, 255, 255, 93, 0, 0, 0, 0, 0, 0, 0, 0, 6, 242, 255, 253, 23, 0, + 0, 11, 247, 255, 252, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 173, 255, 255, 104, 0, + 0, 85, 255, 255, 194, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 96, 255, 255, 186, 0, + 0, 167, 255, 255, 117, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 21, 253, 255, 251, 17, + 6, 241, 255, 255, 39, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 199, 255, 255, 95, + 75, 255, 255, 218, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 122, 255, 255, 178, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 + }, + { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 196, 255, 255, 255, 255, 255, 255, 254, 244, 230, 196, 149, 70, 2, 0, 0, 0, 0, + 0, 0, 196, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 207, 44, 0, 0, 0, + 0, 0, 196, 255, 255, 206, 180, 180, 180, 180, 189, 215, 252, 255, 255, 255, 235, 28, 0, 0, + 0, 0, 196, 255, 255, 88, 0, 0, 0, 0, 0, 0, 20, 131, 254, 255, 255, 158, 0, 0, + 0, 0, 196, 255, 255, 88, 0, 0, 0, 0, 0, 0, 0, 0, 133, 255, 255, 239, 3, 0, + 0, 0, 196, 255, 255, 88, 0, 0, 0, 0, 0, 0, 0, 0, 32, 255, 255, 255, 30, 0, + 0, 0, 196, 255, 255, 88, 0, 0, 0, 0, 0, 0, 0, 0, 1, 253, 255, 255, 46, 0, + 0, 0, 196, 255, 255, 88, 0, 0, 0, 0, 0, 0, 0, 0, 6, 255, 255, 255, 29, 0, + 0, 0, 196, 255, 255, 88, 0, 0, 0, 0, 0, 0, 0, 0, 57, 255, 255, 227, 0, 0, + 0, 0, 196, 255, 255, 88, 0, 0, 0, 0, 0, 0, 0, 2, 183, 255, 255, 112, 0, 0, + 0, 0, 196, 255, 255, 88, 0, 0, 0, 0, 5, 26, 82, 195, 255, 255, 170, 2, 0, 0, + 0, 0, 196, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 215, 103, 2, 0, 0, 0, + 0, 0, 196, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 204, 112, 29, 0, 0, 0, 0, + 0, 0, 196, 255, 255, 198, 168, 168, 168, 168, 172, 189, 233, 255, 255, 252, 152, 9, 0, 0, + 0, 0, 196, 255, 255, 88, 0, 0, 0, 0, 0, 0, 1, 69, 218, 255, 255, 189, 3, 0, + 0, 0, 196, 255, 255, 88, 0, 0, 0, 0, 0, 0, 0, 0, 25, 239, 255, 255, 93, 0, + 0, 0, 196, 255, 255, 88, 0, 0, 0, 0, 0, 0, 0, 0, 0, 148, 255, 255, 178, 0, + 0, 0, 196, 255, 255, 88, 0, 0, 0, 0, 0, 0, 0, 0, 0, 108, 255, 255, 214, 0, + 0, 0, 196, 255, 255, 88, 0, 0, 0, 0, 0, 0, 0, 0, 0, 114, 255, 255, 212, 0, + 0, 0, 196, 255, 255, 88, 0, 0, 0, 0, 0, 0, 0, 0, 0, 165, 255, 255, 184, 0, + 0, 0, 196, 255, 255, 88, 0, 0, 0, 0, 0, 0, 0, 0, 40, 249, 255, 255, 116, 0, + 0, 0, 196, 255, 255, 88, 0, 0, 0, 0, 0, 0, 2, 79, 228, 255, 255, 239, 19, 0, + 0, 0, 196, 255, 255, 203, 176, 176, 176, 176, 178, 193, 237, 255, 255, 255, 253, 83, 0, 0, + 0, 0, 196, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 234, 77, 0, 0, 0, + 0, 0, 196, 255, 255, 255, 255, 255, 255, 255, 255, 247, 228, 180, 106, 12, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 + }, + { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 25, 105, 178, 217, 239, 251, 238, 210, 166, 96, 17, 0, + 0, 0, 0, 0, 0, 0, 13, 135, 247, 255, 255, 255, 255, 255, 255, 255, 255, 255, 244, 82, + 0, 0, 0, 0, 0, 26, 211, 255, 255, 255, 255, 248, 222, 209, 229, 255, 255, 255, 248, 27, + 0, 0, 0, 0, 20, 223, 255, 255, 255, 196, 76, 7, 0, 0, 0, 19, 91, 186, 148, 0, + 0, 0, 0, 0, 176, 255, 255, 255, 122, 1, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, + 0, 0, 0, 80, 255, 255, 255, 130, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 193, 255, 255, 207, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 37, 255, 255, 255, 86, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 99, 255, 255, 240, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 156, 255, 255, 186, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 186, 255, 255, 139, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 203, 255, 255, 120, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 216, 255, 255, 107, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 205, 255, 255, 117, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 189, 255, 255, 132, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 165, 255, 255, 172, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 114, 255, 255, 223, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 60, 255, 255, 255, 51, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 3, 227, 255, 255, 160, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 128, 255, 255, 254, 66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 16, 229, 255, 255, 241, 61, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 74, 253, 255, 255, 253, 155, 53, 1, 0, 0, 0, 4, 49, 108, 108, 0, + 0, 0, 0, 0, 0, 89, 251, 255, 255, 255, 255, 240, 215, 204, 220, 250, 255, 255, 168, 0, + 0, 0, 0, 0, 0, 0, 58, 202, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 168, 0, + 0, 0, 0, 0, 0, 0, 0, 1, 69, 145, 205, 230, 250, 249, 235, 206, 162, 99, 18, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 + }, + { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 196, 255, 255, 255, 255, 255, 243, 222, 193, 126, 50, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 196, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 182, 44, 0, 0, 0, 0, 0, + 0, 0, 196, 255, 255, 206, 180, 181, 199, 225, 255, 255, 255, 255, 246, 79, 0, 0, 0, 0, + 0, 0, 196, 255, 255, 88, 0, 0, 0, 0, 32, 125, 241, 255, 255, 253, 76, 0, 0, 0, + 0, 0, 196, 255, 255, 88, 0, 0, 0, 0, 0, 0, 29, 214, 255, 255, 235, 26, 0, 0, + 0, 0, 196, 255, 255, 88, 0, 0, 0, 0, 0, 0, 0, 25, 238, 255, 255, 155, 0, 0, + 0, 0, 196, 255, 255, 88, 0, 0, 0, 0, 0, 0, 0, 0, 104, 255, 255, 247, 20, 0, + 0, 0, 196, 255, 255, 88, 0, 0, 0, 0, 0, 0, 0, 0, 11, 242, 255, 255, 102, 0, + 0, 0, 196, 255, 255, 88, 0, 0, 0, 0, 0, 0, 0, 0, 0, 173, 255, 255, 160, 0, + 0, 0, 196, 255, 255, 88, 0, 0, 0, 0, 0, 0, 0, 0, 0, 123, 255, 255, 214, 0, + 0, 0, 196, 255, 255, 88, 0, 0, 0, 0, 0, 0, 0, 0, 0, 87, 255, 255, 237, 0, + 0, 0, 196, 255, 255, 88, 0, 0, 0, 0, 0, 0, 0, 0, 0, 73, 255, 255, 253, 1, + 0, 0, 196, 255, 255, 88, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 255, 255, 255, 6, + 0, 0, 196, 255, 255, 88, 0, 0, 0, 0, 0, 0, 0, 0, 0, 78, 255, 255, 246, 0, + 0, 0, 196, 255, 255, 88, 0, 0, 0, 0, 0, 0, 0, 0, 0, 95, 255, 255, 229, 0, + 0, 0, 196, 255, 255, 88, 0, 0, 0, 0, 0, 0, 0, 0, 0, 139, 255, 255, 199, 0, + 0, 0, 196, 255, 255, 88, 0, 0, 0, 0, 0, 0, 0, 0, 0, 193, 255, 255, 142, 0, + 0, 0, 196, 255, 255, 88, 0, 0, 0, 0, 0, 0, 0, 0, 31, 253, 255, 255, 82, 0, + 0, 0, 196, 255, 255, 88, 0, 0, 0, 0, 0, 0, 0, 0, 145, 255, 255, 233, 7, 0, + 0, 0, 196, 255, 255, 88, 0, 0, 0, 0, 0, 0, 0, 64, 253, 255, 255, 128, 0, 0, + 0, 0, 196, 255, 255, 88, 0, 0, 0, 0, 0, 0, 74, 243, 255, 255, 216, 11, 0, 0, + 0, 0, 196, 255, 255, 88, 0, 0, 0, 8, 67, 177, 255, 255, 255, 244, 48, 0, 0, 0, + 0, 0, 196, 255, 255, 208, 184, 194, 213, 247, 255, 255, 255, 255, 228, 49, 0, 0, 0, 0, + 0, 0, 196, 255, 255, 255, 255, 255, 255, 255, 255, 255, 248, 146, 22, 0, 0, 0, 0, 0, + 0, 0, 196, 255, 255, 255, 255, 250, 232, 212, 166, 99, 24, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 + }, + { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 100, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 148, 0, 0, + 0, 0, 0, 100, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 148, 0, 0, + 0, 0, 0, 100, 255, 255, 238, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 115, 0, 0, + 0, 0, 0, 100, 255, 255, 176, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 100, 255, 255, 176, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 100, 255, 255, 176, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 100, 255, 255, 176, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 100, 255, 255, 176, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 100, 255, 255, 176, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 100, 255, 255, 176, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 100, 255, 255, 176, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 100, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 240, 0, 0, 0, + 0, 0, 0, 100, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 240, 0, 0, 0, + 0, 0, 0, 100, 255, 255, 236, 192, 192, 192, 192, 192, 192, 192, 192, 192, 180, 0, 0, 0, + 0, 0, 0, 100, 255, 255, 176, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 100, 255, 255, 176, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 100, 255, 255, 176, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 100, 255, 255, 176, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 100, 255, 255, 176, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 100, 255, 255, 176, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 100, 255, 255, 176, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 100, 255, 255, 176, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 100, 255, 255, 238, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 115, 0, 0, + 0, 0, 0, 100, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 148, 0, 0, + 0, 0, 0, 100, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 148, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 + }, + { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 244, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 4, 0, + 0, 0, 0, 0, 244, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 4, 0, + 0, 0, 0, 0, 244, 255, 255, 207, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 3, 0, + 0, 0, 0, 0, 244, 255, 255, 36, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 244, 255, 255, 36, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 244, 255, 255, 36, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 244, 255, 255, 36, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 244, 255, 255, 36, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 244, 255, 255, 36, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 244, 255, 255, 36, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 244, 255, 255, 36, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 244, 255, 255, 36, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 244, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 96, 0, 0, + 0, 0, 0, 0, 244, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 96, 0, 0, + 0, 0, 0, 0, 244, 255, 255, 207, 200, 200, 200, 200, 200, 200, 200, 200, 200, 75, 0, 0, + 0, 0, 0, 0, 244, 255, 255, 36, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 244, 255, 255, 36, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 244, 255, 255, 36, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 244, 255, 255, 36, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 244, 255, 255, 36, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 244, 255, 255, 36, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 244, 255, 255, 36, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 244, 255, 255, 36, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 244, 255, 255, 36, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 244, 255, 255, 36, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 + }, + { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 14, 96, 176, 218, 242, 248, 230, 188, 124, 36, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 92, 232, 255, 255, 255, 255, 255, 255, 255, 255, 253, 127, 0, 0, + 0, 0, 0, 0, 0, 136, 255, 255, 255, 255, 245, 216, 215, 245, 255, 255, 255, 78, 0, 0, + 0, 0, 0, 0, 119, 255, 255, 255, 212, 76, 4, 0, 0, 3, 58, 152, 207, 1, 0, 0, + 0, 0, 0, 41, 248, 255, 255, 182, 8, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, + 0, 0, 0, 176, 255, 255, 223, 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 26, 252, 255, 255, 91, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 110, 255, 255, 239, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 165, 255, 255, 166, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 215, 255, 255, 117, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 241, 255, 255, 79, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 2, 254, 255, 255, 64, 0, 0, 0, 0, 0, 172, 204, 204, 204, 204, 204, 204, 31, 0, + 0, 12, 255, 255, 255, 54, 0, 0, 0, 0, 0, 216, 255, 255, 255, 255, 255, 255, 40, 0, + 0, 2, 255, 255, 255, 62, 0, 0, 0, 0, 0, 216, 255, 255, 255, 255, 255, 255, 40, 0, + 0, 0, 244, 255, 255, 74, 0, 0, 0, 0, 0, 0, 0, 0, 0, 232, 255, 255, 40, 0, + 0, 0, 220, 255, 255, 105, 0, 0, 0, 0, 0, 0, 0, 0, 0, 232, 255, 255, 40, 0, + 0, 0, 174, 255, 255, 146, 0, 0, 0, 0, 0, 0, 0, 0, 0, 232, 255, 255, 40, 0, + 0, 0, 124, 255, 255, 213, 0, 0, 0, 0, 0, 0, 0, 0, 0, 232, 255, 255, 40, 0, + 0, 0, 44, 255, 255, 255, 45, 0, 0, 0, 0, 0, 0, 0, 0, 232, 255, 255, 40, 0, + 0, 0, 0, 208, 255, 255, 176, 0, 0, 0, 0, 0, 0, 0, 0, 232, 255, 255, 40, 0, + 0, 0, 0, 79, 255, 255, 255, 115, 0, 0, 0, 0, 0, 0, 0, 232, 255, 255, 40, 0, + 0, 0, 0, 0, 180, 255, 255, 255, 164, 43, 0, 0, 0, 1, 41, 238, 255, 255, 40, 0, + 0, 0, 0, 0, 14, 205, 255, 255, 255, 255, 231, 207, 215, 241, 255, 255, 255, 255, 40, 0, + 0, 0, 0, 0, 0, 17, 164, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 236, 29, 0, + 0, 0, 0, 0, 0, 0, 0, 56, 148, 212, 239, 252, 242, 219, 183, 132, 69, 4, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 + }, + { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 196, 255, 255, 88, 0, 0, 0, 0, 0, 0, 0, 0, 0, 240, 255, 255, 40, 0, + 0, 0, 196, 255, 255, 88, 0, 0, 0, 0, 0, 0, 0, 0, 0, 240, 255, 255, 40, 0, + 0, 0, 196, 255, 255, 88, 0, 0, 0, 0, 0, 0, 0, 0, 0, 240, 255, 255, 40, 0, + 0, 0, 196, 255, 255, 88, 0, 0, 0, 0, 0, 0, 0, 0, 0, 240, 255, 255, 40, 0, + 0, 0, 196, 255, 255, 88, 0, 0, 0, 0, 0, 0, 0, 0, 0, 240, 255, 255, 40, 0, + 0, 0, 196, 255, 255, 88, 0, 0, 0, 0, 0, 0, 0, 0, 0, 240, 255, 255, 40, 0, + 0, 0, 196, 255, 255, 88, 0, 0, 0, 0, 0, 0, 0, 0, 0, 240, 255, 255, 40, 0, + 0, 0, 196, 255, 255, 88, 0, 0, 0, 0, 0, 0, 0, 0, 0, 240, 255, 255, 40, 0, + 0, 0, 196, 255, 255, 88, 0, 0, 0, 0, 0, 0, 0, 0, 0, 240, 255, 255, 40, 0, + 0, 0, 196, 255, 255, 88, 0, 0, 0, 0, 0, 0, 0, 0, 0, 240, 255, 255, 40, 0, + 0, 0, 196, 255, 255, 88, 0, 0, 0, 0, 0, 0, 0, 0, 0, 240, 255, 255, 40, 0, + 0, 0, 196, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 40, 0, + 0, 0, 196, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 40, 0, + 0, 0, 196, 255, 255, 219, 200, 200, 200, 200, 200, 200, 200, 200, 200, 252, 255, 255, 40, 0, + 0, 0, 196, 255, 255, 88, 0, 0, 0, 0, 0, 0, 0, 0, 0, 240, 255, 255, 40, 0, + 0, 0, 196, 255, 255, 88, 0, 0, 0, 0, 0, 0, 0, 0, 0, 240, 255, 255, 40, 0, + 0, 0, 196, 255, 255, 88, 0, 0, 0, 0, 0, 0, 0, 0, 0, 240, 255, 255, 40, 0, + 0, 0, 196, 255, 255, 88, 0, 0, 0, 0, 0, 0, 0, 0, 0, 240, 255, 255, 40, 0, + 0, 0, 196, 255, 255, 88, 0, 0, 0, 0, 0, 0, 0, 0, 0, 240, 255, 255, 40, 0, + 0, 0, 196, 255, 255, 88, 0, 0, 0, 0, 0, 0, 0, 0, 0, 240, 255, 255, 40, 0, + 0, 0, 196, 255, 255, 88, 0, 0, 0, 0, 0, 0, 0, 0, 0, 240, 255, 255, 40, 0, + 0, 0, 196, 255, 255, 88, 0, 0, 0, 0, 0, 0, 0, 0, 0, 240, 255, 255, 40, 0, + 0, 0, 196, 255, 255, 88, 0, 0, 0, 0, 0, 0, 0, 0, 0, 240, 255, 255, 40, 0, + 0, 0, 196, 255, 255, 88, 0, 0, 0, 0, 0, 0, 0, 0, 0, 240, 255, 255, 40, 0, + 0, 0, 196, 255, 255, 88, 0, 0, 0, 0, 0, 0, 0, 0, 0, 240, 255, 255, 40, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 + }, + { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 68, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 160, 0, 0, 0, + 0, 0, 0, 68, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 160, 0, 0, 0, + 0, 0, 0, 18, 68, 68, 68, 68, 135, 255, 255, 206, 68, 68, 68, 68, 42, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 92, 255, 255, 188, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 92, 255, 255, 188, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 92, 255, 255, 188, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 92, 255, 255, 188, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 92, 255, 255, 188, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 92, 255, 255, 188, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 92, 255, 255, 188, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 92, 255, 255, 188, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 92, 255, 255, 188, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 92, 255, 255, 188, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 92, 255, 255, 188, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 92, 255, 255, 188, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 92, 255, 255, 188, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 92, 255, 255, 188, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 92, 255, 255, 188, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 92, 255, 255, 188, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 92, 255, 255, 188, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 92, 255, 255, 188, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 92, 255, 255, 188, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 18, 68, 68, 68, 68, 135, 255, 255, 206, 68, 68, 68, 68, 42, 0, 0, 0, + 0, 0, 0, 68, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 160, 0, 0, 0, + 0, 0, 0, 68, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 160, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 + }, + { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 212, 255, 255, 64, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 212, 255, 255, 64, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 212, 255, 255, 64, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 212, 255, 255, 64, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 212, 255, 255, 64, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 212, 255, 255, 64, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 212, 255, 255, 64, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 212, 255, 255, 64, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 212, 255, 255, 64, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 212, 255, 255, 64, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 212, 255, 255, 64, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 212, 255, 255, 64, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 212, 255, 255, 64, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 212, 255, 255, 64, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 212, 255, 255, 64, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 212, 255, 255, 64, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 212, 255, 255, 64, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 221, 255, 255, 54, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 248, 255, 255, 30, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 90, 255, 255, 229, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 230, 255, 255, 142, 0, 0, 0, 0, + 0, 0, 129, 105, 36, 0, 0, 0, 0, 15, 105, 236, 255, 255, 238, 21, 0, 0, 0, 0, + 0, 0, 184, 255, 255, 241, 211, 203, 219, 253, 255, 255, 255, 247, 63, 0, 0, 0, 0, 0, + 0, 0, 184, 255, 255, 255, 255, 255, 255, 255, 255, 255, 213, 48, 0, 0, 0, 0, 0, 0, + 0, 0, 29, 124, 187, 225, 245, 253, 241, 217, 161, 81, 2, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 + }, + { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 128, 255, 255, 152, 0, 0, 0, 0, 0, 0, 0, 0, 70, 253, 255, 249, 56, + 0, 0, 0, 128, 255, 255, 152, 0, 0, 0, 0, 0, 0, 0, 31, 236, 255, 255, 102, 0, + 0, 0, 0, 128, 255, 255, 152, 0, 0, 0, 0, 0, 0, 8, 204, 255, 255, 155, 0, 0, + 0, 0, 0, 128, 255, 255, 152, 0, 0, 0, 0, 0, 0, 156, 255, 255, 200, 7, 0, 0, + 0, 0, 0, 128, 255, 255, 152, 0, 0, 0, 0, 0, 102, 255, 255, 232, 27, 0, 0, 0, + 0, 0, 0, 128, 255, 255, 152, 0, 0, 0, 0, 53, 248, 255, 251, 61, 0, 0, 0, 0, + 0, 0, 0, 128, 255, 255, 152, 0, 0, 0, 20, 225, 255, 255, 109, 0, 0, 0, 0, 0, + 0, 0, 0, 128, 255, 255, 152, 0, 0, 3, 187, 255, 255, 161, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 128, 255, 255, 152, 0, 0, 135, 255, 255, 205, 8, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 128, 255, 255, 152, 0, 78, 254, 255, 235, 31, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 128, 255, 255, 152, 24, 235, 255, 254, 67, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 128, 255, 255, 152, 181, 255, 255, 255, 82, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 128, 255, 255, 233, 255, 255, 255, 255, 229, 15, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 128, 255, 255, 255, 251, 108, 203, 255, 255, 151, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 128, 255, 255, 239, 69, 0, 49, 252, 255, 254, 59, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 128, 255, 255, 152, 0, 0, 0, 142, 255, 255, 213, 6, 0, 0, 0, 0, 0, + 0, 0, 0, 128, 255, 255, 152, 0, 0, 0, 11, 225, 255, 255, 126, 0, 0, 0, 0, 0, + 0, 0, 0, 128, 255, 255, 152, 0, 0, 0, 0, 77, 255, 255, 248, 40, 0, 0, 0, 0, + 0, 0, 0, 128, 255, 255, 152, 0, 0, 0, 0, 0, 174, 255, 255, 194, 1, 0, 0, 0, + 0, 0, 0, 128, 255, 255, 152, 0, 0, 0, 0, 0, 27, 241, 255, 255, 102, 0, 0, 0, + 0, 0, 0, 128, 255, 255, 152, 0, 0, 0, 0, 0, 0, 109, 255, 255, 239, 24, 0, 0, + 0, 0, 0, 128, 255, 255, 152, 0, 0, 0, 0, 0, 0, 2, 202, 255, 255, 171, 0, 0, + 0, 0, 0, 128, 255, 255, 152, 0, 0, 0, 0, 0, 0, 0, 48, 252, 255, 255, 77, 0, + 0, 0, 0, 128, 255, 255, 152, 0, 0, 0, 0, 0, 0, 0, 0, 141, 255, 255, 227, 13, + 0, 0, 0, 128, 255, 255, 152, 0, 0, 0, 0, 0, 0, 0, 0, 11, 224, 255, 255, 146, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 + }, + { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 32, 255, 255, 248, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 32, 255, 255, 248, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 32, 255, 255, 248, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 32, 255, 255, 248, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 32, 255, 255, 248, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 32, 255, 255, 248, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 32, 255, 255, 248, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 32, 255, 255, 248, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 32, 255, 255, 248, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 32, 255, 255, 248, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 32, 255, 255, 248, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 32, 255, 255, 248, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 32, 255, 255, 248, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 32, 255, 255, 248, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 32, 255, 255, 248, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 32, 255, 255, 248, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 32, 255, 255, 248, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 32, 255, 255, 248, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 32, 255, 255, 248, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 32, 255, 255, 248, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 32, 255, 255, 248, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 32, 255, 255, 248, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 32, 255, 255, 254, 212, 212, 212, 212, 212, 212, 212, 212, 212, 212, 109, 0, 0, + 0, 0, 0, 32, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 132, 0, 0, + 0, 0, 0, 32, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 132, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 + }, + { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 32, 255, 255, 255, 255, 21, 0, 0, 0, 0, 0, 0, 0, 195, 255, 255, 255, 136, 0, + 0, 32, 255, 255, 255, 255, 73, 0, 0, 0, 0, 0, 0, 2, 243, 255, 255, 255, 136, 0, + 0, 32, 255, 255, 255, 255, 124, 0, 0, 0, 0, 0, 0, 43, 255, 255, 255, 255, 136, 0, + 0, 32, 255, 255, 208, 255, 176, 0, 0, 0, 0, 0, 0, 95, 255, 250, 217, 255, 136, 0, + 0, 32, 255, 255, 167, 255, 227, 0, 0, 0, 0, 0, 0, 147, 255, 204, 217, 255, 136, 0, + 0, 32, 255, 255, 130, 255, 255, 23, 0, 0, 0, 0, 0, 199, 255, 149, 227, 255, 136, 0, + 0, 32, 255, 255, 89, 255, 255, 75, 0, 0, 0, 0, 4, 247, 255, 94, 238, 255, 136, 0, + 0, 32, 255, 255, 83, 220, 255, 126, 0, 0, 0, 0, 48, 255, 255, 39, 246, 255, 136, 0, + 0, 32, 255, 255, 92, 166, 255, 178, 0, 0, 0, 0, 100, 255, 239, 1, 254, 255, 136, 0, + 0, 32, 255, 255, 97, 112, 255, 229, 0, 0, 0, 0, 152, 255, 185, 3, 255, 255, 136, 0, + 0, 32, 255, 255, 99, 58, 255, 255, 25, 0, 0, 0, 204, 255, 130, 4, 255, 255, 136, 0, + 0, 32, 255, 255, 100, 8, 251, 255, 77, 0, 0, 6, 249, 255, 75, 4, 255, 255, 136, 0, + 0, 32, 255, 255, 100, 0, 206, 255, 128, 0, 0, 53, 255, 255, 21, 4, 255, 255, 136, 0, + 0, 32, 255, 255, 100, 0, 152, 255, 180, 0, 0, 105, 255, 220, 0, 4, 255, 255, 136, 0, + 0, 32, 255, 255, 100, 0, 98, 255, 231, 0, 0, 157, 255, 165, 0, 4, 255, 255, 136, 0, + 0, 32, 255, 255, 100, 0, 45, 255, 255, 27, 0, 209, 255, 110, 0, 4, 255, 255, 136, 0, + 0, 32, 255, 255, 100, 0, 2, 243, 255, 79, 9, 251, 255, 55, 0, 4, 255, 255, 136, 0, + 0, 32, 255, 255, 100, 0, 0, 193, 255, 130, 58, 255, 249, 7, 0, 4, 255, 255, 136, 0, + 0, 32, 255, 255, 100, 0, 0, 139, 255, 182, 110, 255, 201, 0, 0, 4, 255, 255, 136, 0, + 0, 32, 255, 255, 100, 0, 0, 85, 255, 233, 162, 255, 146, 0, 0, 4, 255, 255, 136, 0, + 0, 32, 255, 255, 100, 0, 0, 31, 255, 255, 238, 255, 91, 0, 0, 4, 255, 255, 136, 0, + 0, 32, 255, 255, 100, 0, 0, 0, 232, 255, 255, 255, 36, 0, 0, 4, 255, 255, 136, 0, + 0, 32, 255, 255, 100, 0, 0, 0, 179, 255, 255, 236, 0, 0, 0, 4, 255, 255, 136, 0, + 0, 32, 255, 255, 100, 0, 0, 0, 125, 255, 255, 182, 0, 0, 0, 4, 255, 255, 136, 0, + 0, 32, 255, 255, 100, 0, 0, 0, 71, 255, 255, 127, 0, 0, 0, 4, 255, 255, 136, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 + }, + { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 196, 255, 255, 242, 16, 0, 0, 0, 0, 0, 0, 0, 0, 196, 255, 255, 32, 0, + 0, 0, 196, 255, 255, 255, 122, 0, 0, 0, 0, 0, 0, 0, 0, 196, 255, 255, 32, 0, + 0, 0, 196, 255, 255, 255, 233, 8, 0, 0, 0, 0, 0, 0, 0, 196, 255, 255, 32, 0, + 0, 0, 196, 255, 255, 255, 255, 105, 0, 0, 0, 0, 0, 0, 0, 196, 255, 255, 32, 0, + 0, 0, 196, 255, 224, 238, 255, 221, 3, 0, 0, 0, 0, 0, 0, 196, 255, 255, 32, 0, + 0, 0, 196, 255, 221, 131, 255, 255, 87, 0, 0, 0, 0, 0, 0, 196, 255, 255, 32, 0, + 0, 0, 196, 255, 236, 21, 246, 255, 206, 0, 0, 0, 0, 0, 0, 196, 255, 255, 32, 0, + 0, 0, 196, 255, 248, 0, 148, 255, 255, 70, 0, 0, 0, 0, 0, 196, 255, 255, 32, 0, + 0, 0, 196, 255, 255, 4, 33, 252, 255, 189, 0, 0, 0, 0, 0, 196, 255, 255, 32, 0, + 0, 0, 196, 255, 255, 13, 0, 166, 255, 255, 52, 0, 0, 0, 0, 196, 255, 255, 32, 0, + 0, 0, 196, 255, 255, 20, 0, 48, 255, 255, 171, 0, 0, 0, 0, 196, 255, 255, 32, 0, + 0, 0, 196, 255, 255, 23, 0, 0, 184, 255, 253, 37, 0, 0, 0, 196, 255, 255, 32, 0, + 0, 0, 196, 255, 255, 24, 0, 0, 65, 255, 255, 154, 0, 0, 0, 196, 255, 255, 32, 0, + 0, 0, 196, 255, 255, 24, 0, 0, 0, 202, 255, 248, 24, 0, 0, 196, 255, 255, 32, 0, + 0, 0, 196, 255, 255, 24, 0, 0, 0, 83, 255, 255, 136, 0, 0, 194, 255, 255, 32, 0, + 0, 0, 196, 255, 255, 24, 0, 0, 0, 2, 217, 255, 241, 15, 0, 188, 255, 255, 32, 0, + 0, 0, 196, 255, 255, 24, 0, 0, 0, 0, 100, 255, 255, 119, 0, 179, 255, 255, 32, 0, + 0, 0, 196, 255, 255, 24, 0, 0, 0, 0, 7, 230, 255, 231, 7, 170, 255, 255, 32, 0, + 0, 0, 196, 255, 255, 24, 0, 0, 0, 0, 0, 118, 255, 255, 101, 160, 255, 255, 32, 0, + 0, 0, 196, 255, 255, 24, 0, 0, 0, 0, 0, 14, 240, 255, 218, 151, 255, 255, 32, 0, + 0, 0, 196, 255, 255, 24, 0, 0, 0, 0, 0, 0, 136, 255, 255, 222, 255, 255, 32, 0, + 0, 0, 196, 255, 255, 24, 0, 0, 0, 0, 0, 0, 24, 248, 255, 255, 255, 255, 32, 0, + 0, 0, 196, 255, 255, 24, 0, 0, 0, 0, 0, 0, 0, 154, 255, 255, 255, 255, 32, 0, + 0, 0, 196, 255, 255, 24, 0, 0, 0, 0, 0, 0, 0, 37, 253, 255, 255, 255, 32, 0, + 0, 0, 196, 255, 255, 24, 0, 0, 0, 0, 0, 0, 0, 0, 172, 255, 255, 255, 32, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 + }, + { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 59, 148, 212, 237, 247, 223, 180, 93, 7, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 17, 167, 255, 255, 255, 255, 255, 255, 255, 255, 213, 49, 0, 0, 0, 0, + 0, 0, 0, 11, 200, 255, 255, 255, 253, 223, 209, 239, 255, 255, 255, 240, 45, 0, 0, 0, + 0, 0, 0, 154, 255, 255, 255, 165, 32, 0, 0, 3, 80, 231, 255, 255, 223, 8, 0, 0, + 0, 0, 43, 252, 255, 255, 153, 0, 0, 0, 0, 0, 0, 34, 240, 255, 255, 119, 0, 0, + 0, 0, 145, 255, 255, 233, 9, 0, 0, 0, 0, 0, 0, 0, 112, 255, 255, 232, 2, 0, + 0, 0, 226, 255, 255, 129, 0, 0, 0, 0, 0, 0, 0, 0, 13, 247, 255, 255, 64, 0, + 0, 34, 255, 255, 255, 54, 0, 0, 0, 0, 0, 0, 0, 0, 0, 190, 255, 255, 135, 0, + 0, 77, 255, 255, 249, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 136, 255, 255, 180, 0, + 0, 116, 255, 255, 218, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 104, 255, 255, 221, 0, + 0, 133, 255, 255, 191, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 79, 255, 255, 241, 0, + 0, 145, 255, 255, 181, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 70, 255, 255, 253, 1, + 0, 153, 255, 255, 174, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 62, 255, 255, 255, 8, + 0, 144, 255, 255, 181, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 70, 255, 255, 253, 1, + 0, 132, 255, 255, 191, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 79, 255, 255, 241, 0, + 0, 114, 255, 255, 218, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 105, 255, 255, 221, 0, + 0, 76, 255, 255, 249, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 137, 255, 255, 178, 0, + 0, 33, 255, 255, 255, 54, 0, 0, 0, 0, 0, 0, 0, 0, 0, 191, 255, 255, 133, 0, + 0, 0, 225, 255, 255, 128, 0, 0, 0, 0, 0, 0, 0, 0, 14, 247, 255, 255, 61, 0, + 0, 0, 144, 255, 255, 231, 8, 0, 0, 0, 0, 0, 0, 0, 113, 255, 255, 229, 1, 0, + 0, 0, 41, 252, 255, 255, 150, 0, 0, 0, 0, 0, 0, 33, 240, 255, 255, 114, 0, 0, + 0, 0, 0, 153, 255, 255, 255, 161, 29, 0, 0, 3, 79, 230, 255, 255, 218, 6, 0, 0, + 0, 0, 0, 11, 200, 255, 255, 255, 253, 220, 208, 239, 255, 255, 255, 236, 39, 0, 0, 0, + 0, 0, 0, 0, 18, 169, 255, 255, 255, 255, 255, 255, 255, 255, 207, 44, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 62, 151, 213, 239, 247, 223, 177, 90, 5, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 + }, + { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 20, 255, 255, 255, 255, 255, 255, 254, 243, 226, 183, 123, 30, 0, 0, 0, 0, 0, + 0, 0, 20, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 252, 138, 6, 0, 0, 0, + 0, 0, 20, 255, 255, 255, 181, 180, 180, 183, 198, 239, 255, 255, 255, 255, 168, 0, 0, 0, + 0, 0, 20, 255, 255, 255, 4, 0, 0, 0, 0, 1, 69, 210, 255, 255, 255, 83, 0, 0, + 0, 0, 20, 255, 255, 255, 4, 0, 0, 0, 0, 0, 0, 14, 216, 255, 255, 190, 0, 0, + 0, 0, 20, 255, 255, 255, 4, 0, 0, 0, 0, 0, 0, 0, 93, 255, 255, 249, 5, 0, + 0, 0, 20, 255, 255, 255, 4, 0, 0, 0, 0, 0, 0, 0, 32, 255, 255, 255, 25, 0, + 0, 0, 20, 255, 255, 255, 4, 0, 0, 0, 0, 0, 0, 0, 17, 255, 255, 255, 32, 0, + 0, 0, 20, 255, 255, 255, 4, 0, 0, 0, 0, 0, 0, 0, 38, 255, 255, 255, 11, 0, + 0, 0, 20, 255, 255, 255, 4, 0, 0, 0, 0, 0, 0, 0, 103, 255, 255, 217, 0, 0, + 0, 0, 20, 255, 255, 255, 4, 0, 0, 0, 0, 0, 0, 17, 222, 255, 255, 137, 0, 0, + 0, 0, 20, 255, 255, 255, 4, 0, 0, 0, 0, 4, 75, 214, 255, 255, 240, 20, 0, 0, + 0, 0, 20, 255, 255, 255, 177, 176, 176, 184, 203, 243, 255, 255, 255, 250, 68, 0, 0, 0, + 0, 0, 20, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 214, 53, 0, 0, 0, 0, + 0, 0, 20, 255, 255, 255, 255, 255, 255, 250, 235, 207, 154, 75, 2, 0, 0, 0, 0, 0, + 0, 0, 20, 255, 255, 255, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 20, 255, 255, 255, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 20, 255, 255, 255, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 20, 255, 255, 255, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 20, 255, 255, 255, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 20, 255, 255, 255, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 20, 255, 255, 255, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 20, 255, 255, 255, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 20, 255, 255, 255, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 20, 255, 255, 255, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 + }, + { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 59, 148, 212, 237, 247, 223, 179, 92, 7, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 17, 167, 255, 255, 255, 255, 255, 255, 255, 255, 211, 48, 0, 0, 0, 0, + 0, 0, 0, 11, 200, 255, 255, 255, 253, 223, 209, 239, 255, 255, 255, 239, 43, 0, 0, 0, + 0, 0, 0, 154, 255, 255, 255, 165, 32, 0, 0, 3, 80, 231, 255, 255, 221, 7, 0, 0, + 0, 0, 43, 252, 255, 255, 153, 0, 0, 0, 0, 0, 0, 34, 240, 255, 255, 117, 0, 0, + 0, 0, 145, 255, 255, 233, 9, 0, 0, 0, 0, 0, 0, 0, 112, 255, 255, 231, 2, 0, + 0, 0, 226, 255, 255, 129, 0, 0, 0, 0, 0, 0, 0, 0, 13, 247, 255, 255, 62, 0, + 0, 34, 255, 255, 255, 54, 0, 0, 0, 0, 0, 0, 0, 0, 0, 190, 255, 255, 134, 0, + 0, 77, 255, 255, 249, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 136, 255, 255, 178, 0, + 0, 116, 255, 255, 218, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 104, 255, 255, 220, 0, + 0, 133, 255, 255, 191, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 79, 255, 255, 240, 0, + 0, 145, 255, 255, 181, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 70, 255, 255, 253, 0, + 0, 153, 255, 255, 174, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 62, 255, 255, 255, 8, + 0, 144, 255, 255, 181, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 70, 255, 255, 255, 3, + 0, 132, 255, 255, 191, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 79, 255, 255, 248, 0, + 0, 114, 255, 255, 218, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 105, 255, 255, 223, 0, + 0, 76, 255, 255, 249, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 137, 255, 255, 190, 0, + 0, 33, 255, 255, 255, 54, 0, 0, 0, 0, 0, 0, 0, 0, 0, 191, 255, 255, 138, 0, + 0, 0, 225, 255, 255, 128, 0, 0, 0, 0, 0, 0, 0, 0, 14, 247, 255, 255, 75, 0, + 0, 0, 144, 255, 255, 231, 8, 0, 0, 0, 0, 0, 0, 0, 113, 255, 255, 239, 6, 0, + 0, 0, 41, 252, 255, 255, 150, 0, 0, 0, 0, 0, 0, 33, 240, 255, 255, 133, 0, 0, + 0, 0, 0, 153, 255, 255, 255, 161, 29, 0, 0, 3, 79, 230, 255, 255, 228, 16, 0, 0, + 0, 0, 0, 11, 200, 255, 255, 255, 253, 220, 208, 239, 255, 255, 255, 246, 61, 0, 0, 0, + 0, 0, 0, 0, 18, 169, 255, 255, 255, 255, 255, 255, 255, 255, 230, 63, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 62, 151, 213, 239, 248, 244, 255, 255, 139, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 56, 255, 255, 248, 38, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 187, 255, 255, 210, 10, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 37, 245, 255, 255, 190, 10, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 99, 255, 255, 255, 202, 31, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 255, 255, 255, 171, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 124, 254, 218, 17, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 83, 39, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 + }, + { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 232, 255, 255, 255, 255, 255, 248, 234, 204, 154, 73, 3, 0, 0, 0, 0, 0, + 0, 0, 0, 232, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 211, 53, 0, 0, 0, 0, + 0, 0, 0, 232, 255, 255, 194, 180, 180, 189, 211, 250, 255, 255, 255, 243, 52, 0, 0, 0, + 0, 0, 0, 232, 255, 255, 48, 0, 0, 0, 0, 13, 108, 243, 255, 255, 209, 2, 0, 0, + 0, 0, 0, 232, 255, 255, 48, 0, 0, 0, 0, 0, 0, 74, 255, 255, 255, 62, 0, 0, + 0, 0, 0, 232, 255, 255, 48, 0, 0, 0, 0, 0, 0, 0, 209, 255, 255, 125, 0, 0, + 0, 0, 0, 232, 255, 255, 48, 0, 0, 0, 0, 0, 0, 0, 159, 255, 255, 151, 0, 0, + 0, 0, 0, 232, 255, 255, 48, 0, 0, 0, 0, 0, 0, 0, 150, 255, 255, 156, 0, 0, + 0, 0, 0, 232, 255, 255, 48, 0, 0, 0, 0, 0, 0, 0, 176, 255, 255, 130, 0, 0, + 0, 0, 0, 232, 255, 255, 48, 0, 0, 0, 0, 0, 0, 10, 238, 255, 255, 69, 0, 0, + 0, 0, 0, 232, 255, 255, 48, 0, 0, 0, 0, 0, 0, 148, 255, 255, 216, 3, 0, 0, + 0, 0, 0, 232, 255, 255, 48, 0, 0, 7, 30, 86, 193, 255, 255, 248, 58, 0, 0, 0, + 0, 0, 0, 232, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 234, 67, 0, 0, 0, 0, + 0, 0, 0, 232, 255, 255, 255, 255, 255, 255, 255, 255, 249, 133, 17, 0, 0, 0, 0, 0, + 0, 0, 0, 232, 255, 255, 191, 176, 176, 176, 248, 255, 255, 64, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 232, 255, 255, 48, 0, 0, 0, 139, 255, 255, 210, 3, 0, 0, 0, 0, 0, + 0, 0, 0, 232, 255, 255, 48, 0, 0, 0, 15, 235, 255, 255, 109, 0, 0, 0, 0, 0, + 0, 0, 0, 232, 255, 255, 48, 0, 0, 0, 0, 107, 255, 255, 238, 20, 0, 0, 0, 0, + 0, 0, 0, 232, 255, 255, 48, 0, 0, 0, 0, 4, 214, 255, 255, 154, 0, 0, 0, 0, + 0, 0, 0, 232, 255, 255, 48, 0, 0, 0, 0, 0, 74, 255, 255, 253, 52, 0, 0, 0, + 0, 0, 0, 232, 255, 255, 48, 0, 0, 0, 0, 0, 0, 185, 255, 255, 199, 1, 0, 0, + 0, 0, 0, 232, 255, 255, 48, 0, 0, 0, 0, 0, 0, 44, 252, 255, 255, 95, 0, 0, + 0, 0, 0, 232, 255, 255, 48, 0, 0, 0, 0, 0, 0, 0, 153, 255, 255, 232, 14, 0, + 0, 0, 0, 232, 255, 255, 48, 0, 0, 0, 0, 0, 0, 0, 22, 242, 255, 255, 141, 0, + 0, 0, 0, 232, 255, 255, 48, 0, 0, 0, 0, 0, 0, 0, 0, 120, 255, 255, 250, 41, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 + }, + { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 2, 71, 157, 209, 238, 251, 245, 230, 198, 154, 92, 18, 0, 0, 0, + 0, 0, 0, 0, 41, 202, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 249, 85, 0, 0, + 0, 0, 0, 38, 235, 255, 255, 255, 250, 218, 207, 219, 247, 255, 255, 255, 252, 27, 0, 0, + 0, 0, 0, 188, 255, 255, 226, 85, 7, 0, 0, 0, 2, 40, 107, 190, 179, 0, 0, 0, + 0, 0, 29, 255, 255, 249, 37, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, + 0, 0, 72, 255, 255, 188, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 81, 255, 255, 170, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 56, 255, 255, 213, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 6, 242, 255, 255, 86, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 137, 255, 255, 249, 116, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 9, 202, 255, 255, 255, 226, 117, 23, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 14, 170, 255, 255, 255, 255, 251, 179, 79, 3, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 71, 199, 255, 255, 255, 255, 255, 221, 98, 1, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 47, 146, 236, 255, 255, 255, 255, 195, 23, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 94, 211, 255, 255, 255, 213, 10, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 104, 250, 255, 255, 124, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 110, 255, 255, 212, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 255, 255, 253, 1, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 253, 255, 254, 4, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 41, 255, 255, 232, 0, 0, + 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 169, 255, 255, 164, 0, 0, + 0, 0, 165, 189, 108, 43, 2, 0, 0, 0, 0, 1, 55, 182, 255, 255, 252, 50, 0, 0, + 0, 0, 168, 255, 255, 255, 248, 213, 196, 191, 204, 240, 255, 255, 255, 255, 112, 0, 0, 0, + 0, 0, 158, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 231, 85, 0, 0, 0, 0, + 0, 0, 2, 66, 135, 186, 218, 241, 250, 251, 238, 212, 163, 90, 8, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 + }, + { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 80, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 168, 0, + 0, 80, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 168, 0, + 0, 62, 200, 200, 200, 200, 200, 200, 220, 255, 255, 241, 200, 200, 200, 200, 200, 200, 131, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 92, 255, 255, 188, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 92, 255, 255, 188, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 92, 255, 255, 188, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 92, 255, 255, 188, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 92, 255, 255, 188, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 92, 255, 255, 188, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 92, 255, 255, 188, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 92, 255, 255, 188, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 92, 255, 255, 188, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 92, 255, 255, 188, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 92, 255, 255, 188, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 92, 255, 255, 188, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 92, 255, 255, 188, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 92, 255, 255, 188, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 92, 255, 255, 188, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 92, 255, 255, 188, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 92, 255, 255, 188, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 92, 255, 255, 188, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 92, 255, 255, 188, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 92, 255, 255, 188, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 92, 255, 255, 188, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 92, 255, 255, 188, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 + }, + { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 236, 255, 255, 40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 196, 255, 255, 84, 0, + 0, 0, 236, 255, 255, 40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 196, 255, 255, 84, 0, + 0, 0, 236, 255, 255, 40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 196, 255, 255, 84, 0, + 0, 0, 236, 255, 255, 40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 196, 255, 255, 84, 0, + 0, 0, 236, 255, 255, 40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 196, 255, 255, 84, 0, + 0, 0, 236, 255, 255, 40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 196, 255, 255, 84, 0, + 0, 0, 236, 255, 255, 40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 196, 255, 255, 84, 0, + 0, 0, 236, 255, 255, 40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 196, 255, 255, 84, 0, + 0, 0, 236, 255, 255, 40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 196, 255, 255, 84, 0, + 0, 0, 236, 255, 255, 40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 196, 255, 255, 84, 0, + 0, 0, 236, 255, 255, 40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 196, 255, 255, 84, 0, + 0, 0, 236, 255, 255, 40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 196, 255, 255, 84, 0, + 0, 0, 236, 255, 255, 40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 196, 255, 255, 84, 0, + 0, 0, 236, 255, 255, 40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 196, 255, 255, 84, 0, + 0, 0, 236, 255, 255, 40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 196, 255, 255, 84, 0, + 0, 0, 235, 255, 255, 40, 0, 0, 0, 0, 0, 0, 0, 0, 0, 196, 255, 255, 83, 0, + 0, 0, 227, 255, 255, 49, 0, 0, 0, 0, 0, 0, 0, 0, 0, 210, 255, 255, 75, 0, + 0, 0, 212, 255, 255, 72, 0, 0, 0, 0, 0, 0, 0, 0, 0, 235, 255, 255, 58, 0, + 0, 0, 178, 255, 255, 122, 0, 0, 0, 0, 0, 0, 0, 0, 29, 255, 255, 255, 24, 0, + 0, 0, 126, 255, 255, 208, 0, 0, 0, 0, 0, 0, 0, 0, 117, 255, 255, 224, 0, 0, + 0, 0, 44, 255, 255, 255, 104, 0, 0, 0, 0, 0, 0, 27, 236, 255, 255, 134, 0, 0, + 0, 0, 0, 186, 255, 255, 252, 127, 16, 0, 0, 1, 68, 220, 255, 255, 241, 27, 0, 0, + 0, 0, 0, 31, 237, 255, 255, 255, 251, 216, 206, 235, 255, 255, 255, 254, 89, 0, 0, 0, + 0, 0, 0, 0, 41, 216, 255, 255, 255, 255, 255, 255, 255, 255, 238, 83, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 4, 93, 172, 224, 245, 248, 228, 185, 114, 14, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 + }, + { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 75, 255, 255, 238, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 156, 255, 255, 177, + 6, 241, 255, 255, 66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 232, 255, 255, 94, + 0, 165, 255, 255, 145, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 57, 255, 255, 250, 17, + 0, 82, 255, 255, 224, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 135, 255, 255, 184, 0, + 0, 10, 245, 255, 255, 47, 0, 0, 0, 0, 0, 0, 0, 0, 0, 214, 255, 255, 101, 0, + 0, 0, 172, 255, 255, 127, 0, 0, 0, 0, 0, 0, 0, 0, 36, 255, 255, 252, 21, 0, + 0, 0, 89, 255, 255, 206, 0, 0, 0, 0, 0, 0, 0, 0, 115, 255, 255, 190, 0, 0, + 0, 0, 13, 248, 255, 255, 30, 0, 0, 0, 0, 0, 0, 0, 194, 255, 255, 107, 0, 0, + 0, 0, 0, 180, 255, 255, 108, 0, 0, 0, 0, 0, 0, 19, 252, 255, 254, 26, 0, 0, + 0, 0, 0, 97, 255, 255, 187, 0, 0, 0, 0, 0, 0, 95, 255, 255, 197, 0, 0, 0, + 0, 0, 0, 18, 251, 255, 250, 16, 0, 0, 0, 0, 0, 174, 255, 255, 113, 0, 0, 0, + 0, 0, 0, 0, 187, 255, 255, 90, 0, 0, 0, 0, 8, 244, 255, 255, 31, 0, 0, 0, + 0, 0, 0, 0, 104, 255, 255, 169, 0, 0, 0, 0, 75, 255, 255, 203, 0, 0, 0, 0, + 0, 0, 0, 0, 23, 253, 255, 242, 6, 0, 0, 0, 154, 255, 255, 120, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 194, 255, 255, 71, 0, 0, 1, 231, 255, 255, 37, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 111, 255, 255, 151, 0, 0, 55, 255, 255, 209, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 29, 255, 255, 226, 0, 0, 131, 255, 255, 126, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 202, 255, 255, 42, 0, 205, 255, 255, 43, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 119, 255, 255, 110, 24, 254, 255, 216, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 36, 255, 255, 173, 89, 255, 255, 133, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 209, 255, 232, 151, 255, 255, 49, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 126, 255, 255, 236, 255, 222, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 43, 255, 255, 255, 255, 139, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 216, 255, 255, 255, 56, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 133, 255, 255, 228, 1, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 + }, + { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 231, 255, 235, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 130, 255, 255, + 196, 255, 255, 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 156, 255, 255, + 162, 255, 255, 45, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 182, 255, 255, + 127, 255, 255, 78, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 208, 255, 240, + 93, 255, 255, 111, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 234, 255, 208, + 58, 255, 255, 143, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 254, 255, 176, + 24, 255, 255, 176, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 30, 255, 255, 144, + 0, 244, 255, 209, 0, 0, 0, 0, 15, 60, 60, 44, 0, 0, 0, 0, 56, 255, 255, 113, + 0, 210, 255, 242, 0, 0, 0, 0, 110, 255, 255, 229, 0, 0, 0, 0, 82, 255, 255, 81, + 0, 176, 255, 255, 19, 0, 0, 0, 178, 255, 255, 255, 43, 0, 0, 0, 108, 255, 255, 49, + 0, 141, 255, 255, 51, 0, 0, 4, 241, 255, 227, 255, 112, 0, 0, 0, 134, 255, 255, 17, + 0, 107, 255, 255, 84, 0, 0, 58, 255, 249, 130, 255, 181, 0, 0, 0, 160, 255, 241, 0, + 0, 72, 255, 255, 114, 0, 0, 126, 255, 202, 66, 255, 244, 6, 0, 0, 188, 255, 209, 0, + 0, 38, 255, 255, 144, 0, 0, 194, 255, 144, 11, 252, 255, 64, 0, 0, 215, 255, 178, 0, + 0, 6, 253, 255, 173, 0, 11, 250, 255, 78, 0, 206, 255, 133, 0, 0, 243, 255, 146, 0, + 0, 0, 225, 255, 197, 0, 74, 255, 251, 14, 0, 141, 255, 202, 0, 14, 255, 255, 114, 0, + 0, 0, 190, 255, 220, 0, 141, 255, 198, 0, 0, 70, 255, 253, 18, 41, 255, 255, 82, 0, + 0, 0, 155, 255, 244, 0, 206, 255, 132, 0, 0, 8, 246, 255, 82, 68, 255, 255, 50, 0, + 0, 0, 121, 255, 255, 25, 253, 255, 65, 0, 0, 0, 183, 255, 149, 94, 255, 255, 18, 0, + 0, 0, 86, 255, 255, 102, 255, 247, 7, 0, 0, 0, 111, 255, 212, 121, 255, 242, 0, 0, + 0, 0, 52, 255, 255, 169, 255, 187, 0, 0, 0, 0, 39, 255, 254, 160, 255, 211, 0, 0, + 0, 0, 17, 255, 255, 231, 255, 121, 0, 0, 0, 0, 0, 223, 255, 230, 255, 179, 0, 0, + 0, 0, 0, 239, 255, 255, 255, 54, 0, 0, 0, 0, 0, 152, 255, 255, 255, 147, 0, 0, + 0, 0, 0, 204, 255, 255, 240, 3, 0, 0, 0, 0, 0, 80, 255, 255, 255, 115, 0, 0, + 0, 0, 0, 169, 255, 255, 177, 0, 0, 0, 0, 0, 0, 13, 250, 255, 255, 83, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 + }, + { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 81, 255, 255, 235, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 143, 255, 255, 155, 0, + 0, 0, 186, 255, 255, 143, 0, 0, 0, 0, 0, 0, 0, 0, 39, 250, 255, 239, 21, 0, + 0, 0, 41, 250, 255, 250, 39, 0, 0, 0, 0, 0, 0, 0, 183, 255, 255, 108, 0, 0, + 0, 0, 0, 142, 255, 255, 181, 0, 0, 0, 0, 0, 0, 76, 255, 255, 209, 3, 0, 0, + 0, 0, 0, 14, 232, 255, 255, 72, 0, 0, 0, 0, 6, 218, 255, 255, 62, 0, 0, 0, + 0, 0, 0, 0, 97, 255, 255, 214, 4, 0, 0, 0, 117, 255, 255, 166, 0, 0, 0, 0, + 0, 0, 0, 0, 1, 200, 255, 255, 109, 0, 0, 23, 241, 255, 243, 27, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 53, 254, 255, 238, 18, 0, 158, 255, 255, 119, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 157, 255, 255, 147, 52, 254, 255, 217, 6, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 22, 240, 255, 251, 213, 255, 255, 72, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 113, 255, 255, 255, 255, 176, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 4, 214, 255, 255, 252, 33, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 9, 225, 255, 255, 255, 74, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 127, 255, 255, 255, 255, 216, 5, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 28, 245, 255, 221, 186, 255, 255, 113, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 166, 255, 255, 84, 45, 253, 255, 239, 20, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 58, 255, 255, 197, 0, 0, 160, 255, 255, 151, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 1, 203, 255, 255, 55, 0, 0, 29, 247, 255, 252, 46, 0, 0, 0, 0, + 0, 0, 0, 0, 97, 255, 255, 167, 0, 0, 0, 0, 139, 255, 255, 190, 0, 0, 0, 0, + 0, 0, 0, 13, 231, 255, 248, 31, 0, 0, 0, 0, 17, 238, 255, 255, 81, 0, 0, 0, + 0, 0, 0, 136, 255, 255, 136, 0, 0, 0, 0, 0, 0, 117, 255, 255, 221, 7, 0, 0, + 0, 0, 34, 248, 255, 234, 14, 0, 0, 0, 0, 0, 0, 8, 226, 255, 255, 120, 0, 0, + 0, 0, 175, 255, 255, 105, 0, 0, 0, 0, 0, 0, 0, 0, 95, 255, 255, 242, 24, 0, + 0, 66, 255, 255, 214, 4, 0, 0, 0, 0, 0, 0, 0, 0, 2, 210, 255, 255, 158, 0, + 3, 210, 255, 255, 75, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 73, 255, 255, 254, 52, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 + }, + { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 50, 254, 255, 254, 44, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 196, 255, 255, 143, + 0, 171, 255, 255, 170, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 69, 255, 255, 242, 21, + 0, 40, 252, 255, 254, 43, 0, 0, 0, 0, 0, 0, 0, 0, 0, 198, 255, 255, 128, 0, + 0, 0, 159, 255, 255, 168, 0, 0, 0, 0, 0, 0, 0, 0, 71, 255, 255, 235, 13, 0, + 0, 0, 31, 249, 255, 253, 41, 0, 0, 0, 0, 0, 0, 0, 199, 255, 255, 113, 0, 0, + 0, 0, 0, 146, 255, 255, 166, 0, 0, 0, 0, 0, 0, 73, 255, 255, 225, 7, 0, 0, + 0, 0, 0, 23, 244, 255, 253, 40, 0, 0, 0, 0, 0, 201, 255, 255, 97, 0, 0, 0, + 0, 0, 0, 0, 134, 255, 255, 164, 0, 0, 0, 0, 75, 255, 255, 214, 3, 0, 0, 0, + 0, 0, 0, 0, 16, 239, 255, 252, 38, 0, 0, 0, 203, 255, 255, 82, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 121, 255, 255, 162, 0, 0, 77, 255, 255, 201, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 10, 232, 255, 252, 37, 0, 205, 255, 255, 66, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 109, 255, 255, 160, 79, 255, 255, 186, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 6, 224, 255, 252, 219, 255, 254, 52, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 96, 255, 255, 255, 255, 171, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 3, 214, 255, 255, 252, 39, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 104, 255, 255, 192, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 92, 255, 255, 188, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 92, 255, 255, 188, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 92, 255, 255, 188, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 92, 255, 255, 188, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 92, 255, 255, 188, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 92, 255, 255, 188, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 92, 255, 255, 188, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 92, 255, 255, 188, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 92, 255, 255, 188, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 + }, + { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 244, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 84, 0, + 0, 0, 244, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 84, 0, + 0, 0, 202, 212, 212, 212, 212, 212, 212, 212, 212, 212, 212, 212, 220, 255, 255, 255, 60, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 151, 255, 255, 163, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 67, 254, 255, 230, 17, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 224, 255, 255, 77, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 152, 255, 255, 161, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 255, 255, 229, 17, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 225, 255, 255, 76, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 154, 255, 255, 160, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 69, 255, 255, 228, 16, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 14, 226, 255, 255, 74, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 155, 255, 255, 158, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 70, 255, 255, 228, 15, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 14, 226, 255, 255, 73, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 157, 255, 255, 157, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 72, 255, 255, 227, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 15, 227, 255, 255, 72, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 158, 255, 255, 155, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 73, 255, 255, 226, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 15, 228, 255, 255, 70, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 160, 255, 255, 154, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 56, 255, 255, 255, 221, 212, 212, 212, 212, 212, 212, 212, 212, 212, 212, 212, 212, 139, 0, + 0, 80, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 168, 0, + 0, 80, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 168, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 + }, + { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 40, 255, 255, 255, 255, 255, 255, 255, 255, 156, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 40, 255, 255, 255, 255, 255, 255, 255, 255, 156, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 40, 255, 255, 239, 136, 136, 136, 136, 136, 82, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 40, 255, 255, 220, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 40, 255, 255, 220, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 40, 255, 255, 220, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 40, 255, 255, 220, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 40, 255, 255, 220, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 40, 255, 255, 220, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 40, 255, 255, 220, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 40, 255, 255, 220, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 40, 255, 255, 220, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 40, 255, 255, 220, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 40, 255, 255, 220, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 40, 255, 255, 220, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 40, 255, 255, 220, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 40, 255, 255, 220, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 40, 255, 255, 220, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 40, 255, 255, 220, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 40, 255, 255, 220, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 40, 255, 255, 220, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 40, 255, 255, 220, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 40, 255, 255, 220, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 40, 255, 255, 220, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 40, 255, 255, 220, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 40, 255, 255, 220, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 40, 255, 255, 220, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 40, 255, 255, 220, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 40, 255, 255, 255, 255, 255, 255, 255, 255, 156, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 40, 255, 255, 255, 255, 255, 255, 255, 255, 156, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 21, 140, 140, 140, 140, 140, 140, 140, 140, 85, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 + }, + { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 75, 255, 255, 168, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 2, 222, 255, 250, 25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 118, 255, 255, 126, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 19, 247, 255, 228, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 161, 255, 255, 83, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 54, 255, 255, 190, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 203, 255, 255, 42, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 97, 255, 255, 148, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 9, 237, 255, 241, 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 140, 255, 255, 105, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 35, 254, 255, 211, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 183, 255, 255, 62, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 76, 255, 255, 169, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 2, 223, 255, 250, 25, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 119, 255, 255, 127, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 20, 248, 255, 229, 4, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 162, 255, 255, 84, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 55, 255, 255, 191, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 205, 255, 255, 42, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 98, 255, 255, 148, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 238, 255, 242, 13, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 141, 255, 255, 106, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 36, 254, 255, 212, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 184, 255, 255, 63, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 77, 255, 255, 170, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 + }, + { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 52, 255, 255, 255, 255, 255, 255, 255, 255, 144, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 52, 255, 255, 255, 255, 255, 255, 255, 255, 144, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 27, 136, 136, 136, 136, 136, 190, 255, 255, 144, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 116, 255, 255, 144, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 116, 255, 255, 144, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 116, 255, 255, 144, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 116, 255, 255, 144, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 116, 255, 255, 144, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 116, 255, 255, 144, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 116, 255, 255, 144, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 116, 255, 255, 144, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 116, 255, 255, 144, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 116, 255, 255, 144, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 116, 255, 255, 144, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 116, 255, 255, 144, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 116, 255, 255, 144, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 116, 255, 255, 144, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 116, 255, 255, 144, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 116, 255, 255, 144, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 116, 255, 255, 144, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 116, 255, 255, 144, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 116, 255, 255, 144, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 116, 255, 255, 144, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 116, 255, 255, 144, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 116, 255, 255, 144, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 116, 255, 255, 144, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 116, 255, 255, 144, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 116, 255, 255, 144, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 52, 255, 255, 255, 255, 255, 255, 255, 255, 144, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 52, 255, 255, 255, 255, 255, 255, 255, 255, 144, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 28, 140, 140, 140, 140, 140, 140, 140, 140, 78, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 + }, + { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 30, 128, 90, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 149, 255, 249, 30, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 19, 245, 255, 255, 155, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 125, 255, 243, 255, 251, 35, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 7, 232, 255, 106, 210, 255, 163, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 101, 255, 239, 11, 84, 255, 253, 41, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 1, 215, 255, 141, 0, 1, 211, 255, 171, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 77, 255, 253, 34, 0, 0, 86, 255, 254, 48, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 193, 255, 178, 0, 0, 0, 2, 213, 255, 178, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 53, 255, 255, 68, 0, 0, 0, 0, 89, 255, 255, 54, 0, 0, 0, 0, + 0, 0, 0, 0, 170, 255, 214, 0, 0, 0, 0, 0, 2, 215, 255, 186, 0, 0, 0, 0, + 0, 0, 0, 33, 252, 255, 105, 0, 0, 0, 0, 0, 0, 91, 255, 255, 62, 0, 0, 0, + 0, 0, 0, 146, 255, 240, 11, 0, 0, 0, 0, 0, 0, 3, 217, 255, 194, 0, 0, 0, + 0, 0, 17, 244, 255, 142, 0, 0, 0, 0, 0, 0, 0, 0, 93, 255, 255, 70, 0, 0, + 0, 0, 122, 255, 253, 34, 0, 0, 0, 0, 0, 0, 0, 0, 3, 218, 255, 201, 0, 0, + 0, 6, 231, 255, 178, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 95, 255, 255, 78, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 + }, + { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, 96, + 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 + }, + { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 6, 127, 128, 128, 90, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 148, 255, 255, 249, 31, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 7, 204, 255, 255, 158, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 34, 233, 255, 252, 47, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 41, 231, 255, 202, 2, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 39, 230, 255, 95, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 + }, + { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 49, 130, 188, 230, 249, 247, 231, 190, 125, 27, 0, 0, 0, 0, 0, + 0, 0, 0, 49, 204, 255, 255, 255, 255, 255, 255, 255, 255, 255, 243, 84, 0, 0, 0, 0, + 0, 0, 0, 25, 249, 255, 255, 232, 181, 154, 152, 194, 254, 255, 255, 249, 43, 0, 0, 0, + 0, 0, 0, 0, 146, 147, 52, 1, 0, 0, 0, 0, 51, 233, 255, 255, 156, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 92, 255, 255, 222, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 254, 255, 250, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 240, 255, 255, 7, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 12, 16, 16, 16, 237, 255, 255, 8, 0, 0, + 0, 0, 0, 0, 0, 59, 144, 202, 239, 255, 255, 255, 255, 255, 255, 255, 255, 8, 0, 0, + 0, 0, 0, 21, 186, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 8, 0, 0, + 0, 0, 6, 208, 255, 255, 242, 139, 66, 27, 9, 0, 0, 0, 244, 255, 255, 8, 0, 0, + 0, 0, 100, 255, 255, 240, 40, 0, 0, 0, 0, 0, 0, 0, 246, 255, 255, 8, 0, 0, + 0, 0, 169, 255, 255, 139, 0, 0, 0, 0, 0, 0, 0, 10, 255, 255, 255, 8, 0, 0, + 0, 0, 190, 255, 255, 103, 0, 0, 0, 0, 0, 0, 0, 73, 255, 255, 255, 8, 0, 0, + 0, 0, 175, 255, 255, 136, 0, 0, 0, 0, 0, 0, 6, 201, 255, 255, 255, 8, 0, 0, + 0, 0, 118, 255, 255, 237, 33, 0, 0, 0, 0, 28, 185, 255, 255, 255, 255, 8, 0, 0, + 0, 0, 21, 242, 255, 255, 247, 169, 136, 142, 186, 250, 255, 180, 177, 255, 255, 8, 0, 0, + 0, 0, 0, 73, 244, 255, 255, 255, 255, 255, 255, 255, 172, 8, 117, 255, 255, 8, 0, 0, + 0, 0, 0, 0, 34, 148, 217, 247, 246, 224, 171, 78, 0, 0, 63, 255, 255, 8, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 + }, + { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 96, 255, 255, 164, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 96, 255, 255, 164, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 96, 255, 255, 164, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 96, 255, 255, 164, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 96, 255, 255, 164, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 96, 255, 255, 164, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 96, 255, 255, 162, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 96, 255, 255, 156, 0, 27, 136, 212, 242, 242, 211, 135, 24, 0, 0, 0, 0, 0, + 0, 0, 96, 255, 255, 147, 71, 238, 255, 255, 255, 255, 255, 255, 239, 72, 0, 0, 0, 0, + 0, 0, 96, 255, 255, 182, 243, 255, 224, 165, 150, 180, 247, 255, 255, 246, 53, 0, 0, 0, + 0, 0, 96, 255, 255, 255, 253, 108, 1, 0, 0, 0, 28, 203, 255, 255, 207, 3, 0, 0, + 0, 0, 96, 255, 255, 255, 141, 0, 0, 0, 0, 0, 0, 25, 244, 255, 255, 72, 0, 0, + 0, 0, 96, 255, 255, 255, 33, 0, 0, 0, 0, 0, 0, 0, 150, 255, 255, 161, 0, 0, + 0, 0, 96, 255, 255, 226, 0, 0, 0, 0, 0, 0, 0, 0, 78, 255, 255, 215, 0, 0, + 0, 0, 96, 255, 255, 189, 0, 0, 0, 0, 0, 0, 0, 0, 36, 255, 255, 253, 3, 0, + 0, 0, 96, 255, 255, 173, 0, 0, 0, 0, 0, 0, 0, 0, 15, 255, 255, 255, 17, 0, + 0, 0, 96, 255, 255, 166, 0, 0, 0, 0, 0, 0, 0, 0, 7, 255, 255, 255, 28, 0, + 0, 0, 96, 255, 255, 174, 0, 0, 0, 0, 0, 0, 0, 0, 17, 255, 255, 255, 16, 0, + 0, 0, 96, 255, 255, 193, 0, 0, 0, 0, 0, 0, 0, 0, 39, 255, 255, 252, 3, 0, + 0, 0, 96, 255, 255, 231, 0, 0, 0, 0, 0, 0, 0, 0, 82, 255, 255, 212, 0, 0, + 0, 0, 96, 255, 255, 255, 43, 0, 0, 0, 0, 0, 0, 0, 154, 255, 255, 158, 0, 0, + 0, 0, 96, 255, 255, 255, 157, 0, 0, 0, 0, 0, 0, 27, 245, 255, 255, 69, 0, 0, + 0, 0, 96, 255, 255, 255, 255, 122, 3, 0, 0, 0, 27, 204, 255, 255, 205, 2, 0, 0, + 0, 0, 96, 255, 255, 217, 255, 255, 229, 166, 149, 178, 247, 255, 255, 246, 51, 0, 0, 0, + 0, 0, 96, 255, 255, 57, 120, 251, 255, 255, 255, 255, 255, 255, 237, 70, 0, 0, 0, 0, + 0, 0, 96, 255, 241, 4, 0, 44, 151, 218, 245, 243, 211, 134, 23, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 + }, + { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 24, 119, 185, 225, 245, 245, 223, 201, 151, 81, 15, 0, 0, + 0, 0, 0, 0, 0, 3, 132, 247, 255, 255, 255, 255, 255, 255, 255, 255, 255, 104, 0, 0, + 0, 0, 0, 0, 4, 180, 255, 255, 255, 255, 227, 197, 194, 223, 251, 255, 246, 15, 0, 0, + 0, 0, 0, 0, 137, 255, 255, 255, 167, 40, 0, 0, 0, 0, 14, 86, 105, 0, 0, 0, + 0, 0, 0, 30, 251, 255, 255, 132, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 134, 255, 255, 208, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 201, 255, 255, 105, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 2, 250, 255, 255, 44, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 17, 255, 255, 255, 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 31, 255, 255, 254, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 20, 255, 255, 255, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 4, 253, 255, 255, 38, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 209, 255, 255, 96, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 144, 255, 255, 196, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 40, 254, 255, 255, 111, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 154, 255, 255, 255, 146, 25, 0, 0, 0, 0, 1, 44, 119, 51, 0, 0, + 0, 0, 0, 0, 8, 196, 255, 255, 255, 254, 214, 188, 186, 205, 242, 255, 255, 76, 0, 0, + 0, 0, 0, 0, 0, 7, 150, 252, 255, 255, 255, 255, 255, 255, 255, 255, 255, 75, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 35, 130, 195, 231, 249, 250, 234, 200, 147, 70, 2, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 + }, + { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 60, 255, 255, 200, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 60, 255, 255, 200, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 60, 255, 255, 200, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 60, 255, 255, 200, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 60, 255, 255, 200, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 60, 255, 255, 200, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 60, 255, 255, 200, 0, 0, + 0, 0, 0, 0, 0, 1, 91, 184, 232, 248, 225, 168, 65, 0, 55, 255, 255, 200, 0, 0, + 0, 0, 0, 0, 14, 190, 255, 255, 255, 255, 255, 255, 255, 150, 40, 255, 255, 200, 0, 0, + 0, 0, 0, 2, 191, 255, 255, 255, 205, 155, 157, 200, 254, 255, 167, 255, 255, 200, 0, 0, + 0, 0, 0, 104, 255, 255, 249, 82, 0, 0, 0, 0, 53, 229, 255, 255, 255, 200, 0, 0, + 0, 0, 0, 221, 255, 255, 116, 0, 0, 0, 0, 0, 0, 57, 255, 255, 255, 200, 0, 0, + 0, 0, 55, 255, 255, 243, 9, 0, 0, 0, 0, 0, 0, 0, 196, 255, 255, 200, 0, 0, + 0, 0, 110, 255, 255, 180, 0, 0, 0, 0, 0, 0, 0, 0, 129, 255, 255, 200, 0, 0, + 0, 0, 152, 255, 255, 138, 0, 0, 0, 0, 0, 0, 0, 0, 90, 255, 255, 200, 0, 0, + 0, 0, 170, 255, 255, 115, 0, 0, 0, 0, 0, 0, 0, 0, 71, 255, 255, 200, 0, 0, + 0, 0, 180, 255, 255, 106, 0, 0, 0, 0, 0, 0, 0, 0, 61, 255, 255, 200, 0, 0, + 0, 0, 171, 255, 255, 114, 0, 0, 0, 0, 0, 0, 0, 0, 65, 255, 255, 200, 0, 0, + 0, 0, 154, 255, 255, 135, 0, 0, 0, 0, 0, 0, 0, 0, 83, 255, 255, 200, 0, 0, + 0, 0, 113, 255, 255, 177, 0, 0, 0, 0, 0, 0, 0, 0, 121, 255, 255, 200, 0, 0, + 0, 0, 59, 255, 255, 242, 7, 0, 0, 0, 0, 0, 0, 0, 185, 255, 255, 200, 0, 0, + 0, 0, 1, 226, 255, 255, 114, 0, 0, 0, 0, 0, 0, 42, 252, 255, 255, 200, 0, 0, + 0, 0, 0, 112, 255, 255, 249, 82, 0, 0, 0, 0, 40, 217, 255, 255, 255, 200, 0, 0, + 0, 0, 0, 4, 199, 255, 255, 255, 206, 155, 154, 193, 251, 255, 203, 255, 255, 200, 0, 0, + 0, 0, 0, 0, 18, 197, 255, 255, 255, 255, 255, 255, 255, 184, 11, 237, 255, 200, 0, 0, + 0, 0, 0, 0, 0, 2, 95, 188, 234, 249, 230, 178, 85, 0, 0, 191, 255, 200, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 + }, + { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 20, 122, 197, 232, 250, 233, 194, 119, 15, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 93, 239, 255, 255, 255, 255, 255, 255, 255, 237, 76, 0, 0, 0, 0, + 0, 0, 0, 0, 107, 255, 255, 255, 219, 163, 149, 171, 234, 255, 255, 253, 79, 0, 0, 0, + 0, 0, 0, 50, 250, 255, 243, 86, 0, 0, 0, 0, 8, 143, 255, 255, 240, 22, 0, 0, + 0, 0, 0, 190, 255, 255, 87, 0, 0, 0, 0, 0, 0, 0, 190, 255, 255, 134, 0, 0, + 0, 0, 40, 255, 255, 214, 0, 0, 0, 0, 0, 0, 0, 0, 86, 255, 255, 217, 0, 0, + 0, 0, 109, 255, 255, 143, 0, 0, 0, 0, 0, 0, 0, 0, 38, 255, 255, 255, 17, 0, + 0, 0, 162, 255, 255, 186, 132, 132, 132, 132, 132, 132, 132, 132, 143, 255, 255, 255, 39, 0, + 0, 0, 185, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 51, 0, + 0, 0, 199, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 52, 0, + 0, 0, 188, 255, 255, 97, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 167, 255, 255, 123, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 115, 255, 255, 179, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 45, 255, 255, 249, 24, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 188, 255, 255, 176, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 47, 246, 255, 255, 183, 43, 0, 0, 0, 0, 0, 25, 93, 183, 49, 0, 0, + 0, 0, 0, 0, 87, 250, 255, 255, 255, 222, 190, 185, 199, 233, 255, 255, 255, 52, 0, 0, + 0, 0, 0, 0, 0, 62, 220, 255, 255, 255, 255, 255, 255, 255, 255, 255, 243, 39, 0, 0, + 0, 0, 0, 0, 0, 0, 4, 90, 167, 221, 243, 251, 238, 207, 159, 91, 12, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 + }, + { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 93, 177, 224, 244, 250, 234, 210, 158, 52, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 10, 195, 255, 255, 255, 255, 255, 255, 255, 255, 59, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 135, 255, 255, 255, 202, 154, 144, 157, 183, 210, 3, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 228, 255, 255, 121, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 18, 255, 255, 253, 7, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 34, 255, 255, 228, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 43, 255, 255, 224, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 58, 163, 189, 214, 240, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 84, 0, 0, + 0, 0, 104, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 84, 0, 0, + 0, 0, 34, 84, 84, 84, 84, 108, 255, 255, 234, 84, 84, 84, 84, 84, 84, 27, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 36, 255, 255, 224, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 36, 255, 255, 224, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 36, 255, 255, 224, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 36, 255, 255, 224, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 36, 255, 255, 224, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 36, 255, 255, 224, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 36, 255, 255, 224, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 36, 255, 255, 224, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 36, 255, 255, 224, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 36, 255, 255, 224, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 36, 255, 255, 224, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 36, 255, 255, 224, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 36, 255, 255, 224, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 36, 255, 255, 224, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 36, 255, 255, 224, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 36, 255, 255, 224, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 + }, + { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 5, 92, 178, 228, 248, 255, 255, 255, 255, 255, 255, 255, 255, 176, 0, + 0, 0, 0, 0, 27, 203, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 176, 0, + 0, 0, 0, 3, 206, 255, 255, 224, 113, 73, 86, 142, 249, 255, 255, 214, 144, 109, 55, 0, + 0, 0, 0, 93, 255, 255, 216, 11, 0, 0, 0, 0, 59, 254, 255, 226, 5, 0, 0, 0, + 0, 0, 0, 172, 255, 255, 92, 0, 0, 0, 0, 0, 0, 179, 255, 255, 72, 0, 0, 0, + 0, 0, 0, 209, 255, 255, 46, 0, 0, 0, 0, 0, 0, 134, 255, 255, 118, 0, 0, 0, + 0, 0, 0, 214, 255, 255, 36, 0, 0, 0, 0, 0, 0, 126, 255, 255, 124, 0, 0, 0, + 0, 0, 0, 182, 255, 255, 75, 0, 0, 0, 0, 0, 0, 165, 255, 255, 94, 0, 0, 0, + 0, 0, 0, 102, 255, 255, 193, 1, 0, 0, 0, 0, 35, 248, 255, 250, 25, 0, 0, 0, + 0, 0, 0, 10, 217, 255, 255, 196, 82, 45, 55, 108, 233, 255, 255, 136, 0, 0, 0, 0, + 0, 0, 0, 0, 38, 219, 255, 255, 255, 255, 255, 255, 255, 255, 153, 2, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 31, 239, 255, 243, 252, 245, 218, 160, 60, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 19, 221, 255, 171, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 147, 255, 239, 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 219, 255, 198, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 222, 255, 244, 55, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 151, 255, 255, 255, 222, 201, 200, 200, 198, 184, 148, 78, 3, 0, 0, 0, + 0, 0, 0, 0, 15, 198, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 206, 28, 0, 0, + 0, 0, 0, 55, 182, 251, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 206, 2, 0, + 0, 0, 86, 251, 255, 204, 77, 26, 2, 0, 0, 1, 8, 32, 97, 246, 255, 255, 63, 0, + 0, 10, 235, 255, 229, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 138, 255, 255, 108, 0, + 0, 54, 255, 255, 163, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 110, 255, 255, 105, 0, + 0, 69, 255, 255, 158, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 180, 255, 255, 66, 0, + 0, 25, 253, 255, 241, 46, 0, 0, 0, 0, 0, 0, 0, 13, 144, 255, 255, 224, 3, 0, + 0, 0, 158, 255, 255, 249, 171, 115, 92, 91, 102, 128, 176, 243, 255, 255, 247, 63, 0, 0, + 0, 0, 8, 164, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 204, 53, 0, 0, 0, + 0, 0, 0, 0, 53, 143, 200, 235, 250, 251, 241, 222, 186, 135, 60, 0, 0, 0, 0, 0 + }, + { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 88, 255, 255, 172, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 88, 255, 255, 172, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 88, 255, 255, 172, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 88, 255, 255, 172, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 88, 255, 255, 172, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 88, 255, 255, 172, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 88, 255, 255, 172, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 88, 255, 255, 170, 0, 17, 121, 202, 235, 249, 232, 185, 98, 5, 0, 0, 0, 0, + 0, 0, 88, 255, 255, 158, 54, 227, 255, 255, 255, 255, 255, 255, 255, 200, 20, 0, 0, 0, + 0, 0, 88, 255, 255, 175, 231, 255, 246, 183, 151, 160, 220, 255, 255, 255, 179, 0, 0, 0, + 0, 0, 88, 255, 255, 255, 255, 176, 21, 0, 0, 0, 2, 125, 255, 255, 255, 50, 0, 0, + 0, 0, 88, 255, 255, 255, 203, 4, 0, 0, 0, 0, 0, 0, 195, 255, 255, 125, 0, 0, + 0, 0, 88, 255, 255, 255, 74, 0, 0, 0, 0, 0, 0, 0, 111, 255, 255, 169, 0, 0, + 0, 0, 88, 255, 255, 245, 4, 0, 0, 0, 0, 0, 0, 0, 79, 255, 255, 186, 0, 0, + 0, 0, 88, 255, 255, 203, 0, 0, 0, 0, 0, 0, 0, 0, 72, 255, 255, 192, 0, 0, + 0, 0, 88, 255, 255, 182, 0, 0, 0, 0, 0, 0, 0, 0, 72, 255, 255, 192, 0, 0, + 0, 0, 88, 255, 255, 172, 0, 0, 0, 0, 0, 0, 0, 0, 72, 255, 255, 192, 0, 0, + 0, 0, 88, 255, 255, 172, 0, 0, 0, 0, 0, 0, 0, 0, 72, 255, 255, 192, 0, 0, + 0, 0, 88, 255, 255, 172, 0, 0, 0, 0, 0, 0, 0, 0, 72, 255, 255, 192, 0, 0, + 0, 0, 88, 255, 255, 172, 0, 0, 0, 0, 0, 0, 0, 0, 72, 255, 255, 192, 0, 0, + 0, 0, 88, 255, 255, 172, 0, 0, 0, 0, 0, 0, 0, 0, 72, 255, 255, 192, 0, 0, + 0, 0, 88, 255, 255, 172, 0, 0, 0, 0, 0, 0, 0, 0, 72, 255, 255, 192, 0, 0, + 0, 0, 88, 255, 255, 172, 0, 0, 0, 0, 0, 0, 0, 0, 72, 255, 255, 192, 0, 0, + 0, 0, 88, 255, 255, 172, 0, 0, 0, 0, 0, 0, 0, 0, 72, 255, 255, 192, 0, 0, + 0, 0, 88, 255, 255, 172, 0, 0, 0, 0, 0, 0, 0, 0, 72, 255, 255, 192, 0, 0, + 0, 0, 88, 255, 255, 172, 0, 0, 0, 0, 0, 0, 0, 0, 72, 255, 255, 192, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 + }, + { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 2, 176, 245, 178, 2, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 53, 255, 255, 255, 52, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 47, 255, 255, 255, 42, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 148, 217, 132, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 124, 255, 255, 255, 255, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 124, 255, 255, 255, 255, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 19, 56, 77, 98, 120, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 4, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 4, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 4, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 4, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 4, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 4, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 4, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 4, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 4, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 4, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 4, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 4, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 4, 255, 255, 255, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 49, 68, 68, 68, 68, 70, 255, 255, 255, 68, 68, 68, 68, 68, 57, 0, 0, + 0, 0, 0, 188, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 216, 0, 0, + 0, 0, 0, 188, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 216, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 + }, + { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 201, 244, 142, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 93, 255, 255, 255, 13, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 87, 255, 255, 252, 9, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 173, 217, 116, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 208, 255, 255, 255, 255, 255, 255, 255, 255, 255, 44, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 208, 255, 255, 255, 255, 255, 255, 255, 255, 255, 44, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 58, 72, 72, 72, 72, 72, 72, 227, 255, 255, 44, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 216, 255, 255, 44, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 216, 255, 255, 44, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 216, 255, 255, 44, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 216, 255, 255, 44, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 216, 255, 255, 44, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 216, 255, 255, 44, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 216, 255, 255, 44, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 216, 255, 255, 44, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 216, 255, 255, 44, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 216, 255, 255, 44, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 216, 255, 255, 44, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 216, 255, 255, 44, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 216, 255, 255, 44, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 216, 255, 255, 44, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 216, 255, 255, 44, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 216, 255, 255, 44, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 216, 255, 255, 44, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 216, 255, 255, 42, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 235, 255, 255, 25, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 59, 255, 255, 236, 2, 0, 0, 0, 0, 0, + 0, 0, 23, 0, 0, 0, 0, 0, 0, 52, 221, 255, 255, 153, 0, 0, 0, 0, 0, 0, + 0, 0, 196, 238, 188, 165, 148, 156, 195, 254, 255, 255, 233, 27, 0, 0, 0, 0, 0, 0, + 0, 0, 196, 255, 255, 255, 255, 255, 255, 255, 255, 219, 47, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 94, 169, 215, 234, 249, 248, 229, 180, 100, 9, 0, 0, 0, 0, 0, 0, 0, 0 + }, + { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 112, 255, 255, 144, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 112, 255, 255, 144, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 112, 255, 255, 144, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 112, 255, 255, 144, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 112, 255, 255, 144, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 112, 255, 255, 144, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 112, 255, 255, 144, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 112, 255, 255, 144, 0, 0, 0, 0, 0, 0, 0, 86, 252, 255, 252, 91, 0, + 0, 0, 0, 112, 255, 255, 144, 0, 0, 0, 0, 0, 0, 79, 251, 255, 252, 91, 0, 0, + 0, 0, 0, 112, 255, 255, 144, 0, 0, 0, 0, 0, 72, 249, 255, 253, 91, 0, 0, 0, + 0, 0, 0, 112, 255, 255, 144, 0, 0, 0, 0, 66, 247, 255, 253, 92, 0, 0, 0, 0, + 0, 0, 0, 112, 255, 255, 143, 0, 0, 0, 59, 244, 255, 253, 92, 0, 0, 0, 0, 0, + 0, 0, 0, 112, 255, 255, 132, 0, 0, 53, 241, 255, 253, 93, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 112, 255, 255, 117, 0, 47, 238, 255, 253, 93, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 112, 255, 255, 103, 27, 229, 255, 253, 94, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 112, 255, 255, 100, 205, 255, 255, 221, 11, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 112, 255, 255, 229, 255, 255, 255, 255, 170, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 112, 255, 255, 255, 243, 128, 243, 255, 255, 121, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 112, 255, 255, 206, 32, 0, 80, 254, 255, 253, 73, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 112, 255, 255, 144, 0, 0, 0, 128, 255, 255, 239, 37, 0, 0, 0, 0, 0, + 0, 0, 0, 112, 255, 255, 144, 0, 0, 0, 1, 175, 255, 255, 213, 13, 0, 0, 0, 0, + 0, 0, 0, 112, 255, 255, 144, 0, 0, 0, 0, 12, 212, 255, 255, 175, 1, 0, 0, 0, + 0, 0, 0, 112, 255, 255, 144, 0, 0, 0, 0, 0, 35, 238, 255, 255, 127, 0, 0, 0, + 0, 0, 0, 112, 255, 255, 144, 0, 0, 0, 0, 0, 0, 70, 252, 255, 254, 78, 0, 0, + 0, 0, 0, 112, 255, 255, 144, 0, 0, 0, 0, 0, 0, 0, 115, 255, 255, 241, 40, 0, + 0, 0, 0, 112, 255, 255, 144, 0, 0, 0, 0, 0, 0, 0, 0, 163, 255, 255, 217, 15, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 + }, + { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 156, 255, 255, 255, 255, 255, 255, 224, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 156, 255, 255, 255, 255, 255, 255, 224, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 8, 31, 52, 73, 119, 255, 255, 224, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 44, 255, 255, 224, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 44, 255, 255, 224, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 44, 255, 255, 224, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 44, 255, 255, 224, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 44, 255, 255, 224, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 44, 255, 255, 224, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 44, 255, 255, 224, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 44, 255, 255, 224, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 44, 255, 255, 224, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 44, 255, 255, 224, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 44, 255, 255, 224, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 44, 255, 255, 224, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 44, 255, 255, 224, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 44, 255, 255, 224, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 44, 255, 255, 224, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 44, 255, 255, 224, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 44, 255, 255, 224, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 44, 255, 255, 224, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 44, 255, 255, 224, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 44, 255, 255, 224, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 59, 68, 68, 68, 68, 100, 255, 255, 232, 68, 68, 68, 68, 68, 48, 0, 0, + 0, 0, 0, 224, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 184, 0, 0, + 0, 0, 0, 224, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 184, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 + }, + { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 120, 255, 183, 0, 45, 191, 244, 217, 103, 0, 0, 23, 166, 239, 238, 167, 25, 0, 0, + 0, 120, 255, 222, 25, 233, 255, 255, 255, 255, 99, 10, 209, 255, 255, 255, 255, 211, 4, 0, + 0, 120, 255, 253, 161, 235, 156, 195, 255, 255, 225, 124, 255, 188, 162, 241, 255, 255, 85, 0, + 0, 120, 255, 255, 244, 33, 0, 2, 193, 255, 255, 252, 134, 0, 0, 76, 255, 255, 156, 0, + 0, 120, 255, 255, 162, 0, 0, 0, 97, 255, 255, 248, 14, 0, 0, 1, 243, 255, 196, 0, + 0, 120, 255, 255, 111, 0, 0, 0, 53, 255, 255, 202, 0, 0, 0, 0, 214, 255, 219, 0, + 0, 120, 255, 255, 82, 0, 0, 0, 36, 255, 255, 169, 0, 0, 0, 0, 203, 255, 228, 0, + 0, 120, 255, 255, 66, 0, 0, 0, 32, 255, 255, 151, 0, 0, 0, 0, 200, 255, 232, 0, + 0, 120, 255, 255, 59, 0, 0, 0, 32, 255, 255, 145, 0, 0, 0, 0, 200, 255, 232, 0, + 0, 120, 255, 255, 56, 0, 0, 0, 32, 255, 255, 144, 0, 0, 0, 0, 200, 255, 232, 0, + 0, 120, 255, 255, 56, 0, 0, 0, 32, 255, 255, 144, 0, 0, 0, 0, 200, 255, 232, 0, + 0, 120, 255, 255, 56, 0, 0, 0, 32, 255, 255, 144, 0, 0, 0, 0, 200, 255, 232, 0, + 0, 120, 255, 255, 56, 0, 0, 0, 32, 255, 255, 144, 0, 0, 0, 0, 200, 255, 232, 0, + 0, 120, 255, 255, 56, 0, 0, 0, 32, 255, 255, 144, 0, 0, 0, 0, 200, 255, 232, 0, + 0, 120, 255, 255, 56, 0, 0, 0, 32, 255, 255, 144, 0, 0, 0, 0, 200, 255, 232, 0, + 0, 120, 255, 255, 56, 0, 0, 0, 32, 255, 255, 144, 0, 0, 0, 0, 200, 255, 232, 0, + 0, 120, 255, 255, 56, 0, 0, 0, 32, 255, 255, 144, 0, 0, 0, 0, 200, 255, 232, 0, + 0, 120, 255, 255, 56, 0, 0, 0, 32, 255, 255, 144, 0, 0, 0, 0, 200, 255, 232, 0, + 0, 120, 255, 255, 56, 0, 0, 0, 32, 255, 255, 144, 0, 0, 0, 0, 200, 255, 232, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 + }, + { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 88, 255, 255, 43, 0, 17, 121, 202, 235, 249, 232, 185, 98, 5, 0, 0, 0, 0, + 0, 0, 88, 255, 255, 84, 54, 227, 255, 255, 255, 255, 255, 255, 255, 200, 20, 0, 0, 0, + 0, 0, 88, 255, 255, 156, 231, 255, 246, 183, 151, 160, 220, 255, 255, 255, 179, 0, 0, 0, + 0, 0, 88, 255, 255, 255, 255, 176, 21, 0, 0, 0, 2, 125, 255, 255, 255, 50, 0, 0, + 0, 0, 88, 255, 255, 255, 203, 4, 0, 0, 0, 0, 0, 0, 195, 255, 255, 125, 0, 0, + 0, 0, 88, 255, 255, 255, 74, 0, 0, 0, 0, 0, 0, 0, 111, 255, 255, 169, 0, 0, + 0, 0, 88, 255, 255, 245, 4, 0, 0, 0, 0, 0, 0, 0, 79, 255, 255, 186, 0, 0, + 0, 0, 88, 255, 255, 203, 0, 0, 0, 0, 0, 0, 0, 0, 72, 255, 255, 192, 0, 0, + 0, 0, 88, 255, 255, 182, 0, 0, 0, 0, 0, 0, 0, 0, 72, 255, 255, 192, 0, 0, + 0, 0, 88, 255, 255, 172, 0, 0, 0, 0, 0, 0, 0, 0, 72, 255, 255, 192, 0, 0, + 0, 0, 88, 255, 255, 172, 0, 0, 0, 0, 0, 0, 0, 0, 72, 255, 255, 192, 0, 0, + 0, 0, 88, 255, 255, 172, 0, 0, 0, 0, 0, 0, 0, 0, 72, 255, 255, 192, 0, 0, + 0, 0, 88, 255, 255, 172, 0, 0, 0, 0, 0, 0, 0, 0, 72, 255, 255, 192, 0, 0, + 0, 0, 88, 255, 255, 172, 0, 0, 0, 0, 0, 0, 0, 0, 72, 255, 255, 192, 0, 0, + 0, 0, 88, 255, 255, 172, 0, 0, 0, 0, 0, 0, 0, 0, 72, 255, 255, 192, 0, 0, + 0, 0, 88, 255, 255, 172, 0, 0, 0, 0, 0, 0, 0, 0, 72, 255, 255, 192, 0, 0, + 0, 0, 88, 255, 255, 172, 0, 0, 0, 0, 0, 0, 0, 0, 72, 255, 255, 192, 0, 0, + 0, 0, 88, 255, 255, 172, 0, 0, 0, 0, 0, 0, 0, 0, 72, 255, 255, 192, 0, 0, + 0, 0, 88, 255, 255, 172, 0, 0, 0, 0, 0, 0, 0, 0, 72, 255, 255, 192, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 + }, + { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 50, 145, 212, 239, 247, 224, 170, 83, 1, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 6, 155, 254, 255, 255, 255, 255, 255, 255, 255, 198, 29, 0, 0, 0, 0, + 0, 0, 0, 4, 187, 255, 255, 255, 208, 159, 152, 186, 248, 255, 255, 227, 34, 0, 0, 0, + 0, 0, 0, 133, 255, 255, 233, 64, 0, 0, 0, 0, 25, 183, 255, 255, 202, 5, 0, 0, + 0, 0, 25, 250, 255, 253, 54, 0, 0, 0, 0, 0, 0, 7, 209, 255, 255, 100, 0, 0, + 0, 0, 125, 255, 255, 173, 0, 0, 0, 0, 0, 0, 0, 0, 80, 255, 255, 211, 0, 0, + 0, 0, 192, 255, 255, 91, 0, 0, 0, 0, 0, 0, 0, 0, 6, 246, 255, 255, 26, 0, + 0, 0, 243, 255, 255, 43, 0, 0, 0, 0, 0, 0, 0, 0, 0, 205, 255, 255, 80, 0, + 0, 7, 255, 255, 255, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 181, 255, 255, 102, 0, + 0, 19, 255, 255, 255, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 171, 255, 255, 115, 0, + 0, 6, 255, 255, 255, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 181, 255, 255, 101, 0, + 0, 0, 239, 255, 255, 45, 0, 0, 0, 0, 0, 0, 0, 0, 0, 206, 255, 255, 79, 0, + 0, 0, 185, 255, 255, 93, 0, 0, 0, 0, 0, 0, 0, 0, 7, 247, 255, 255, 28, 0, + 0, 0, 114, 255, 255, 176, 0, 0, 0, 0, 0, 0, 0, 0, 81, 255, 255, 216, 0, 0, + 0, 0, 16, 243, 255, 254, 58, 0, 0, 0, 0, 0, 0, 7, 210, 255, 255, 109, 0, 0, + 0, 0, 0, 111, 255, 255, 234, 66, 0, 0, 0, 0, 23, 183, 255, 255, 212, 8, 0, 0, + 0, 0, 0, 1, 165, 255, 255, 255, 209, 159, 151, 183, 247, 255, 255, 235, 44, 0, 0, 0, + 0, 0, 0, 0, 2, 135, 251, 255, 255, 255, 255, 255, 255, 255, 208, 39, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 40, 142, 212, 242, 247, 225, 172, 88, 2, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 + }, + { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 96, 255, 255, 35, 0, 23, 131, 210, 242, 242, 211, 135, 24, 0, 0, 0, 0, 0, + 0, 0, 96, 255, 255, 76, 61, 233, 255, 255, 255, 255, 255, 255, 239, 72, 0, 0, 0, 0, + 0, 0, 96, 255, 255, 156, 238, 255, 223, 165, 150, 180, 247, 255, 255, 246, 53, 0, 0, 0, + 0, 0, 96, 255, 255, 255, 252, 105, 1, 0, 0, 0, 28, 203, 255, 255, 207, 3, 0, 0, + 0, 0, 96, 255, 255, 255, 139, 0, 0, 0, 0, 0, 0, 25, 244, 255, 255, 72, 0, 0, + 0, 0, 96, 255, 255, 255, 31, 0, 0, 0, 0, 0, 0, 0, 150, 255, 255, 161, 0, 0, + 0, 0, 96, 255, 255, 223, 0, 0, 0, 0, 0, 0, 0, 0, 78, 255, 255, 215, 0, 0, + 0, 0, 96, 255, 255, 186, 0, 0, 0, 0, 0, 0, 0, 0, 36, 255, 255, 253, 3, 0, + 0, 0, 96, 255, 255, 169, 0, 0, 0, 0, 0, 0, 0, 0, 15, 255, 255, 255, 17, 0, + 0, 0, 96, 255, 255, 165, 0, 0, 0, 0, 0, 0, 0, 0, 7, 255, 255, 255, 28, 0, + 0, 0, 96, 255, 255, 174, 0, 0, 0, 0, 0, 0, 0, 0, 17, 255, 255, 255, 16, 0, + 0, 0, 96, 255, 255, 193, 0, 0, 0, 0, 0, 0, 0, 0, 39, 255, 255, 252, 3, 0, + 0, 0, 96, 255, 255, 231, 0, 0, 0, 0, 0, 0, 0, 0, 82, 255, 255, 212, 0, 0, + 0, 0, 96, 255, 255, 255, 43, 0, 0, 0, 0, 0, 0, 0, 154, 255, 255, 158, 0, 0, + 0, 0, 96, 255, 255, 255, 157, 0, 0, 0, 0, 0, 0, 27, 245, 255, 255, 69, 0, 0, + 0, 0, 96, 255, 255, 255, 255, 122, 3, 0, 0, 0, 27, 204, 255, 255, 205, 2, 0, 0, + 0, 0, 96, 255, 255, 183, 247, 255, 229, 166, 149, 178, 247, 255, 255, 246, 51, 0, 0, 0, + 0, 0, 96, 255, 255, 140, 75, 239, 255, 255, 255, 255, 255, 255, 237, 70, 0, 0, 0, 0, + 0, 0, 96, 255, 255, 157, 0, 26, 136, 212, 243, 243, 211, 134, 23, 0, 0, 0, 0, 0, + 0, 0, 96, 255, 255, 163, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 96, 255, 255, 164, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 96, 255, 255, 164, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 96, 255, 255, 164, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 96, 255, 255, 164, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 96, 255, 255, 164, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 96, 255, 255, 164, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 96, 255, 255, 164, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 + }, + { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 1, 91, 184, 232, 249, 227, 175, 80, 0, 0, 192, 255, 200, 0, 0, + 0, 0, 0, 0, 14, 190, 255, 255, 255, 255, 255, 255, 255, 177, 9, 237, 255, 200, 0, 0, + 0, 0, 0, 2, 191, 255, 255, 255, 205, 155, 157, 200, 254, 255, 200, 255, 255, 200, 0, 0, + 0, 0, 0, 104, 255, 255, 249, 82, 0, 0, 0, 0, 53, 229, 255, 255, 255, 200, 0, 0, + 0, 0, 0, 221, 255, 255, 116, 0, 0, 0, 0, 0, 0, 57, 255, 255, 255, 200, 0, 0, + 0, 0, 55, 255, 255, 243, 9, 0, 0, 0, 0, 0, 0, 0, 196, 255, 255, 200, 0, 0, + 0, 0, 110, 255, 255, 180, 0, 0, 0, 0, 0, 0, 0, 0, 129, 255, 255, 200, 0, 0, + 0, 0, 152, 255, 255, 138, 0, 0, 0, 0, 0, 0, 0, 0, 90, 255, 255, 200, 0, 0, + 0, 0, 170, 255, 255, 115, 0, 0, 0, 0, 0, 0, 0, 0, 71, 255, 255, 200, 0, 0, + 0, 0, 180, 255, 255, 106, 0, 0, 0, 0, 0, 0, 0, 0, 61, 255, 255, 200, 0, 0, + 0, 0, 171, 255, 255, 114, 0, 0, 0, 0, 0, 0, 0, 0, 65, 255, 255, 200, 0, 0, + 0, 0, 154, 255, 255, 135, 0, 0, 0, 0, 0, 0, 0, 0, 83, 255, 255, 200, 0, 0, + 0, 0, 113, 255, 255, 177, 0, 0, 0, 0, 0, 0, 0, 0, 121, 255, 255, 200, 0, 0, + 0, 0, 59, 255, 255, 242, 7, 0, 0, 0, 0, 0, 0, 0, 185, 255, 255, 200, 0, 0, + 0, 0, 1, 226, 255, 255, 114, 0, 0, 0, 0, 0, 0, 42, 252, 255, 255, 200, 0, 0, + 0, 0, 0, 112, 255, 255, 249, 82, 0, 0, 0, 0, 40, 217, 255, 255, 255, 200, 0, 0, + 0, 0, 0, 4, 199, 255, 255, 255, 206, 155, 154, 193, 251, 255, 150, 255, 255, 200, 0, 0, + 0, 0, 0, 0, 18, 197, 255, 255, 255, 255, 255, 255, 255, 141, 39, 255, 255, 200, 0, 0, + 0, 0, 0, 0, 0, 2, 95, 188, 234, 249, 226, 168, 63, 0, 55, 255, 255, 200, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 60, 255, 255, 200, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 60, 255, 255, 200, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 60, 255, 255, 200, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 60, 255, 255, 200, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 60, 255, 255, 200, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 60, 255, 255, 200, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 60, 255, 255, 200, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 60, 255, 255, 200, 0, 0 + }, + { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 156, 255, 227, 0, 0, 1, 80, 179, 224, 248, 233, 204, 138, 44, 0, 0, + 0, 0, 0, 0, 156, 255, 250, 1, 13, 185, 255, 255, 255, 255, 255, 255, 255, 93, 0, 0, + 0, 0, 0, 0, 156, 255, 255, 24, 187, 255, 255, 248, 223, 224, 250, 255, 254, 22, 0, 0, + 0, 0, 0, 0, 156, 255, 255, 170, 255, 214, 81, 8, 0, 0, 2, 57, 107, 0, 0, 0, + 0, 0, 0, 0, 156, 255, 255, 255, 201, 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 156, 255, 255, 253, 39, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 156, 255, 255, 190, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 156, 255, 255, 133, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 156, 255, 255, 111, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 156, 255, 255, 104, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 156, 255, 255, 104, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 156, 255, 255, 104, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 156, 255, 255, 104, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 156, 255, 255, 104, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 156, 255, 255, 104, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 156, 255, 255, 104, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 156, 255, 255, 104, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 156, 255, 255, 104, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 156, 255, 255, 104, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 + }, + { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 61, 153, 209, 240, 252, 244, 224, 186, 127, 53, 0, 0, 0, 0, + 0, 0, 0, 0, 11, 172, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 137, 0, 0, 0, + 0, 0, 0, 0, 169, 255, 255, 255, 202, 164, 149, 163, 202, 249, 255, 255, 59, 0, 0, 0, + 0, 0, 0, 35, 255, 255, 237, 51, 0, 0, 0, 0, 0, 11, 81, 145, 0, 0, 0, 0, + 0, 0, 0, 81, 255, 255, 156, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 66, 255, 255, 185, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 16, 243, 255, 255, 139, 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 115, 255, 255, 255, 239, 142, 43, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 107, 242, 255, 255, 255, 255, 202, 99, 8, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 20, 133, 236, 255, 255, 255, 255, 231, 102, 1, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 7, 89, 188, 254, 255, 255, 255, 174, 4, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 39, 164, 255, 255, 255, 122, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 113, 255, 255, 223, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 248, 255, 254, 2, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 253, 255, 240, 0, 0, 0, + 0, 0, 0, 132, 129, 44, 0, 0, 0, 0, 0, 0, 15, 173, 255, 255, 173, 0, 0, 0, + 0, 0, 0, 160, 255, 255, 230, 181, 150, 138, 147, 182, 243, 255, 255, 246, 42, 0, 0, 0, + 0, 0, 0, 151, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 226, 61, 0, 0, 0, 0, + 0, 0, 0, 3, 77, 149, 199, 231, 246, 253, 244, 222, 175, 99, 10, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 + }, + { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 30, 255, 196, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 97, 255, 196, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 164, 255, 196, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 230, 255, 196, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 49, 255, 255, 196, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 58, 125, 174, 223, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 8, 0, 0, + 0, 0, 176, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 8, 0, 0, + 0, 0, 57, 84, 84, 84, 129, 255, 255, 215, 84, 84, 84, 84, 84, 84, 84, 2, 0, 0, + 0, 0, 0, 0, 0, 0, 68, 255, 255, 196, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 68, 255, 255, 196, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 68, 255, 255, 196, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 68, 255, 255, 196, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 68, 255, 255, 196, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 68, 255, 255, 196, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 68, 255, 255, 196, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 68, 255, 255, 196, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 68, 255, 255, 196, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 68, 255, 255, 196, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 62, 255, 255, 208, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 40, 255, 255, 243, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 2, 236, 255, 255, 138, 1, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 130, 255, 255, 255, 208, 153, 142, 156, 182, 199, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 6, 183, 255, 255, 255, 255, 255, 255, 255, 240, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 2, 93, 184, 233, 251, 243, 225, 187, 130, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 + }, + { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 88, 255, 255, 172, 0, 0, 0, 0, 0, 0, 0, 0, 72, 255, 255, 192, 0, 0, + 0, 0, 88, 255, 255, 172, 0, 0, 0, 0, 0, 0, 0, 0, 72, 255, 255, 192, 0, 0, + 0, 0, 88, 255, 255, 172, 0, 0, 0, 0, 0, 0, 0, 0, 72, 255, 255, 192, 0, 0, + 0, 0, 88, 255, 255, 172, 0, 0, 0, 0, 0, 0, 0, 0, 72, 255, 255, 192, 0, 0, + 0, 0, 88, 255, 255, 172, 0, 0, 0, 0, 0, 0, 0, 0, 72, 255, 255, 192, 0, 0, + 0, 0, 88, 255, 255, 172, 0, 0, 0, 0, 0, 0, 0, 0, 72, 255, 255, 192, 0, 0, + 0, 0, 88, 255, 255, 172, 0, 0, 0, 0, 0, 0, 0, 0, 72, 255, 255, 192, 0, 0, + 0, 0, 88, 255, 255, 172, 0, 0, 0, 0, 0, 0, 0, 0, 72, 255, 255, 192, 0, 0, + 0, 0, 88, 255, 255, 172, 0, 0, 0, 0, 0, 0, 0, 0, 72, 255, 255, 192, 0, 0, + 0, 0, 88, 255, 255, 172, 0, 0, 0, 0, 0, 0, 0, 0, 72, 255, 255, 192, 0, 0, + 0, 0, 88, 255, 255, 172, 0, 0, 0, 0, 0, 0, 0, 0, 82, 255, 255, 192, 0, 0, + 0, 0, 88, 255, 255, 172, 0, 0, 0, 0, 0, 0, 0, 0, 99, 255, 255, 192, 0, 0, + 0, 0, 83, 255, 255, 178, 0, 0, 0, 0, 0, 0, 0, 0, 140, 255, 255, 192, 0, 0, + 0, 0, 66, 255, 255, 210, 0, 0, 0, 0, 0, 0, 0, 0, 212, 255, 255, 192, 0, 0, + 0, 0, 23, 255, 255, 254, 38, 0, 0, 0, 0, 0, 0, 79, 255, 255, 255, 192, 0, 0, + 0, 0, 0, 203, 255, 255, 202, 21, 0, 0, 0, 0, 76, 241, 255, 255, 255, 192, 0, 0, + 0, 0, 0, 76, 255, 255, 255, 243, 174, 148, 162, 216, 255, 255, 134, 255, 255, 192, 0, 0, + 0, 0, 0, 0, 118, 254, 255, 255, 255, 255, 255, 255, 253, 132, 0, 237, 255, 192, 0, 0, + 0, 0, 0, 0, 0, 49, 156, 218, 245, 246, 221, 159, 56, 0, 0, 197, 255, 192, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 + }, + { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 118, 255, 255, 168, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 78, 255, 255, 213, 0, + 0, 27, 253, 255, 246, 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 168, 255, 255, 119, 0, + 0, 0, 187, 255, 255, 93, 0, 0, 0, 0, 0, 0, 0, 0, 12, 245, 255, 253, 29, 0, + 0, 0, 94, 255, 255, 184, 0, 0, 0, 0, 0, 0, 0, 0, 92, 255, 255, 189, 0, 0, + 0, 0, 12, 245, 255, 252, 22, 0, 0, 0, 0, 0, 0, 0, 182, 255, 255, 96, 0, 0, + 0, 0, 0, 164, 255, 255, 109, 0, 0, 0, 0, 0, 0, 20, 251, 255, 246, 13, 0, 0, + 0, 0, 0, 71, 255, 255, 199, 0, 0, 0, 0, 0, 0, 106, 255, 255, 166, 0, 0, 0, + 0, 0, 0, 3, 231, 255, 255, 34, 0, 0, 0, 0, 0, 196, 255, 255, 73, 0, 0, 0, + 0, 0, 0, 0, 141, 255, 255, 124, 0, 0, 0, 0, 30, 254, 255, 232, 4, 0, 0, 0, + 0, 0, 0, 0, 48, 255, 255, 214, 0, 0, 0, 0, 120, 255, 255, 143, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 211, 255, 255, 49, 0, 0, 0, 210, 255, 255, 50, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 118, 255, 255, 138, 0, 0, 42, 255, 255, 213, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 27, 253, 255, 224, 0, 0, 124, 255, 255, 120, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 188, 255, 255, 54, 0, 204, 255, 254, 29, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 95, 255, 255, 134, 27, 255, 255, 190, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 12, 245, 255, 205, 103, 255, 255, 97, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 165, 255, 253, 187, 255, 246, 14, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 72, 255, 255, 255, 255, 167, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 3, 231, 255, 255, 255, 74, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 + }, + { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 244, 255, 181, 0, 0, 0, 0, 0, 121, 255, 255, 240, 1, 0, 0, 0, 0, 64, 255, 255, + 198, 255, 226, 0, 0, 0, 0, 0, 177, 255, 255, 255, 40, 0, 0, 0, 0, 110, 255, 255, + 148, 255, 255, 14, 0, 0, 0, 0, 233, 255, 255, 255, 94, 0, 0, 0, 0, 156, 255, 246, + 98, 255, 255, 58, 0, 0, 0, 35, 255, 249, 186, 255, 148, 0, 0, 0, 0, 202, 255, 199, + 48, 255, 255, 103, 0, 0, 0, 92, 255, 206, 130, 255, 202, 0, 0, 0, 2, 245, 255, 149, + 5, 248, 255, 147, 0, 0, 0, 149, 255, 159, 79, 255, 249, 6, 0, 0, 38, 255, 255, 99, + 0, 204, 255, 191, 0, 0, 0, 205, 255, 111, 28, 255, 255, 54, 0, 0, 84, 255, 255, 48, + 0, 154, 255, 236, 0, 0, 10, 251, 255, 63, 0, 233, 255, 108, 0, 0, 130, 255, 248, 5, + 0, 104, 255, 255, 24, 0, 63, 255, 255, 16, 0, 181, 255, 162, 0, 0, 176, 255, 204, 0, + 0, 54, 255, 255, 67, 0, 120, 255, 218, 0, 0, 129, 255, 216, 0, 0, 221, 255, 153, 0, + 0, 8, 251, 255, 108, 0, 172, 255, 162, 0, 0, 75, 255, 254, 14, 11, 254, 255, 103, 0, + 0, 0, 211, 255, 148, 0, 218, 255, 106, 0, 0, 21, 255, 255, 62, 51, 255, 255, 53, 0, + 0, 0, 161, 255, 187, 10, 253, 255, 50, 0, 0, 0, 223, 255, 111, 89, 255, 250, 7, 0, + 0, 0, 111, 255, 221, 55, 255, 246, 4, 0, 0, 0, 169, 255, 159, 126, 255, 208, 0, 0, + 0, 0, 61, 255, 250, 104, 255, 195, 0, 0, 0, 0, 115, 255, 200, 160, 255, 158, 0, 0, + 0, 0, 12, 254, 255, 177, 255, 139, 0, 0, 0, 0, 61, 255, 241, 194, 255, 107, 0, 0, + 0, 0, 0, 217, 255, 249, 255, 83, 0, 0, 0, 0, 10, 252, 255, 249, 255, 57, 0, 0, + 0, 0, 0, 167, 255, 255, 255, 27, 0, 0, 0, 0, 0, 209, 255, 255, 252, 10, 0, 0, + 0, 0, 0, 117, 255, 255, 227, 0, 0, 0, 0, 0, 0, 155, 255, 255, 213, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 + }, + { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 181, 255, 255, 181, 0, 0, 0, 0, 0, 0, 0, 0, 79, 255, 255, 245, 39, 0, + 0, 0, 23, 234, 255, 255, 100, 0, 0, 0, 0, 0, 0, 20, 233, 255, 255, 103, 0, 0, + 0, 0, 0, 78, 255, 255, 242, 31, 0, 0, 0, 0, 0, 172, 255, 255, 177, 0, 0, 0, + 0, 0, 0, 0, 153, 255, 255, 190, 1, 0, 0, 0, 92, 255, 255, 231, 20, 0, 0, 0, + 0, 0, 0, 0, 10, 217, 255, 255, 109, 0, 0, 27, 239, 255, 254, 71, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 52, 251, 255, 245, 37, 0, 184, 255, 255, 144, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 123, 255, 255, 197, 107, 255, 255, 211, 8, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 3, 195, 255, 255, 254, 255, 248, 45, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 32, 241, 255, 255, 255, 112, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 190, 255, 255, 252, 35, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 103, 255, 255, 255, 255, 197, 3, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 38, 245, 255, 249, 210, 255, 255, 125, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 5, 203, 255, 255, 120, 36, 244, 255, 251, 53, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 134, 255, 255, 198, 3, 0, 106, 255, 255, 218, 11, 0, 0, 0, 0, + 0, 0, 0, 0, 61, 253, 255, 245, 37, 0, 0, 1, 186, 255, 255, 153, 0, 0, 0, 0, + 0, 0, 0, 15, 224, 255, 255, 107, 0, 0, 0, 0, 28, 239, 255, 255, 77, 0, 0, 0, + 0, 0, 0, 164, 255, 255, 187, 1, 0, 0, 0, 0, 0, 93, 255, 255, 234, 23, 0, 0, + 0, 0, 88, 255, 255, 240, 29, 0, 0, 0, 0, 0, 0, 0, 174, 255, 255, 180, 0, 0, + 0, 29, 239, 255, 255, 95, 0, 0, 0, 0, 0, 0, 0, 0, 21, 234, 255, 255, 105, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 + }, + { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 113, 255, 255, 173, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 78, 255, 255, 211, 0, + 0, 17, 247, 255, 250, 23, 0, 0, 0, 0, 0, 0, 0, 0, 0, 170, 255, 255, 116, 0, + 0, 0, 162, 255, 255, 118, 0, 0, 0, 0, 0, 0, 0, 0, 14, 247, 255, 252, 24, 0, + 0, 0, 58, 255, 255, 217, 0, 0, 0, 0, 0, 0, 0, 0, 98, 255, 255, 180, 0, 0, + 0, 0, 0, 211, 255, 255, 62, 0, 0, 0, 0, 0, 0, 0, 190, 255, 255, 84, 0, 0, + 0, 0, 0, 108, 255, 255, 163, 0, 0, 0, 0, 0, 0, 27, 253, 255, 237, 6, 0, 0, + 0, 0, 0, 15, 245, 255, 246, 16, 0, 0, 0, 0, 0, 117, 255, 255, 148, 0, 0, 0, + 0, 0, 0, 0, 157, 255, 255, 107, 0, 0, 0, 0, 0, 209, 255, 255, 53, 0, 0, 0, + 0, 0, 0, 0, 54, 255, 255, 207, 0, 0, 0, 0, 44, 255, 255, 213, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 206, 255, 255, 52, 0, 0, 0, 137, 255, 255, 117, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 103, 255, 255, 152, 0, 0, 1, 226, 255, 252, 25, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 13, 243, 255, 241, 9, 0, 63, 255, 255, 181, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 152, 255, 255, 89, 0, 152, 255, 255, 85, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 49, 255, 255, 176, 2, 232, 255, 238, 7, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 202, 255, 246, 61, 255, 255, 150, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 98, 255, 255, 177, 255, 255, 54, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 10, 240, 255, 255, 255, 214, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 148, 255, 255, 255, 118, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 47, 255, 255, 252, 25, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 79, 255, 255, 183, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 177, 255, 255, 87, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 29, 251, 255, 235, 7, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 156, 255, 255, 132, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 104, 255, 255, 238, 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 64, 172, 149, 157, 209, 255, 255, 255, 92, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 88, 255, 255, 255, 255, 255, 255, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 65, 217, 244, 252, 234, 178, 68, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 + }, + { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 112, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 8, 0, 0, + 0, 0, 0, 112, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 8, 0, 0, + 0, 0, 0, 36, 84, 84, 84, 84, 84, 84, 84, 84, 84, 130, 255, 255, 234, 4, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 217, 255, 253, 69, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 167, 255, 255, 129, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 104, 255, 255, 189, 2, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 49, 248, 255, 230, 23, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 14, 219, 255, 252, 63, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 170, 255, 255, 122, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 108, 255, 255, 183, 1, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 52, 249, 255, 227, 20, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 16, 222, 255, 251, 58, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 174, 255, 255, 115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 113, 255, 255, 177, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 55, 250, 255, 223, 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 18, 224, 255, 249, 53, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 178, 255, 255, 178, 84, 84, 84, 84, 84, 84, 84, 84, 84, 84, 27, 0, 0, + 0, 0, 0, 252, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 84, 0, 0, + 0, 0, 0, 252, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 84, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 + }, + { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 100, 174, 218, 242, 157, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 54, 228, 255, 255, 255, 255, 160, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 20, 235, 255, 255, 246, 180, 142, 82, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 111, 255, 255, 230, 31, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 156, 255, 255, 129, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 168, 255, 255, 96, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 168, 255, 255, 96, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 168, 255, 255, 96, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 168, 255, 255, 96, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 168, 255, 255, 96, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 169, 255, 255, 95, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 200, 255, 255, 74, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 77, 254, 255, 252, 28, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 7, 28, 73, 158, 252, 255, 255, 144, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 68, 255, 255, 255, 255, 255, 232, 119, 1, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 68, 255, 255, 255, 255, 210, 70, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 43, 172, 191, 234, 255, 255, 255, 210, 41, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 1, 59, 206, 255, 255, 211, 5, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 17, 237, 255, 255, 55, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 176, 255, 255, 91, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 168, 255, 255, 96, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 168, 255, 255, 96, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 168, 255, 255, 96, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 168, 255, 255, 96, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 168, 255, 255, 96, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 161, 255, 255, 125, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 123, 255, 255, 225, 26, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 30, 243, 255, 255, 244, 179, 144, 84, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 69, 237, 255, 255, 255, 255, 160, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 14, 108, 179, 221, 244, 158, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 + }, + { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 12, 255, 255, 108, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 12, 255, 255, 108, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 12, 255, 255, 108, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 12, 255, 255, 108, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 12, 255, 255, 108, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 12, 255, 255, 108, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 12, 255, 255, 108, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 12, 255, 255, 108, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 12, 255, 255, 108, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 12, 255, 255, 108, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 12, 255, 255, 108, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 12, 255, 255, 108, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 12, 255, 255, 108, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 12, 255, 255, 108, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 12, 255, 255, 108, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 12, 255, 255, 108, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 12, 255, 255, 108, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 12, 255, 255, 108, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 12, 255, 255, 108, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 12, 255, 255, 108, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 12, 255, 255, 108, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 12, 255, 255, 108, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 12, 255, 255, 108, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 12, 255, 255, 108, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 12, 255, 255, 108, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 12, 255, 255, 108, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 12, 255, 255, 108, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 12, 255, 255, 108, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 12, 255, 255, 108, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 12, 255, 255, 108, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 12, 255, 255, 108, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 12, 255, 255, 108, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 12, 255, 255, 108, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 12, 255, 255, 108, 0, 0, 0, 0, 0, 0, 0, 0 + }, + { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 59, 247, 231, 194, 132, 39, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 60, 255, 255, 255, 255, 252, 132, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 30, 135, 161, 225, 255, 255, 255, 102, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 3, 162, 255, 255, 214, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 32, 255, 255, 254, 5, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 252, 255, 255, 16, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 252, 255, 255, 16, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 252, 255, 255, 16, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 252, 255, 255, 16, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 252, 255, 255, 16, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 251, 255, 255, 16, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 231, 255, 255, 46, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 181, 255, 255, 174, 4, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 50, 249, 255, 255, 208, 101, 42, 12, 2, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 52, 201, 255, 255, 255, 255, 255, 172, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 144, 255, 255, 255, 255, 172, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 2, 136, 253, 255, 255, 251, 207, 177, 112, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 104, 255, 255, 248, 118, 13, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 206, 255, 255, 110, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 243, 255, 255, 27, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 252, 255, 255, 16, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 252, 255, 255, 16, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 252, 255, 255, 16, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 252, 255, 255, 16, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 252, 255, 255, 16, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 9, 254, 255, 255, 13, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 74, 255, 255, 245, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 6, 32, 97, 234, 255, 255, 172, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 60, 255, 255, 255, 255, 255, 234, 35, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 60, 255, 255, 255, 249, 168, 31, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 29, 120, 105, 68, 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 + }, + { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 30, 102, 129, 114, 62, 4, 0, 0, 0, 0, 0, 0, 0, 45, 0, 0, + 0, 0, 3, 140, 251, 255, 255, 255, 255, 236, 143, 49, 0, 0, 0, 2, 111, 210, 0, 0, + 0, 0, 110, 255, 255, 255, 255, 255, 255, 255, 255, 255, 216, 163, 155, 223, 255, 216, 0, 0, + 0, 0, 120, 249, 132, 34, 7, 49, 128, 224, 255, 255, 255, 255, 255, 255, 255, 123, 0, 0, + 0, 0, 97, 52, 0, 0, 0, 0, 0, 2, 73, 158, 220, 250, 237, 180, 65, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 + } +}; diff --git a/tmp/opi_rtsp/opi5/image_drawing.c b/tmp/opi_rtsp/opi5/image_drawing.c new file mode 100644 index 0000000..d3da80c --- /dev/null +++ b/tmp/opi_rtsp/opi5/image_drawing.c @@ -0,0 +1,1605 @@ +#include +#include +#include +#include + +#include "image_drawing.h" +#include "font.h" + +#define max(a, b) (((a) > (b)) ? (a) : (b)) +#define min(a, b) (((a) < (b)) ? (a) : (b)) + +// src color format(ARGB888) To dest format color +static unsigned int convert_color(unsigned int src_color, image_format_t dst_fmt) +{ + // printf("sizeof(int)=%d\n", sizeof(int)); + unsigned int dst_color = 0x0; + unsigned char* p_src_color = (unsigned char*)&src_color; + unsigned char* p_dst_color = (unsigned char*)&dst_color; + char r = p_src_color[2]; + char g = p_src_color[1]; + char b = p_src_color[0]; + char a = p_src_color[3]; + + switch (dst_fmt) + { + case IMAGE_FORMAT_GRAY8: + p_dst_color[0] = a; + break; + case IMAGE_FORMAT_RGB888: + p_dst_color[0] = r; + p_dst_color[1] = g; + p_dst_color[2] = b; + break; + case IMAGE_FORMAT_RGBA8888: + p_dst_color[0] = r; + p_dst_color[1] = g; + p_dst_color[2] = b; + p_dst_color[3] = a; + break; + case IMAGE_FORMAT_YUV420SP_NV12: + p_dst_color[0] = 0.299 * r + 0.587 * g + 0.114 * b; + p_dst_color[1] = 0.492 * (b - p_dst_color[0]); + p_dst_color[2] = 0.877 * (r - p_dst_color[0]); + break; + case IMAGE_FORMAT_YUV420SP_NV21: + p_dst_color[0] = 0.299 * r + 0.587 * g + 0.114 * b; + p_dst_color[1] = 0.877 * (r - p_dst_color[0]); + p_dst_color[2] = 0.492 * (b - p_dst_color[0]); + break; + default: + break; + } + return dst_color; +} + +static void draw_rectangle_c1(unsigned char* pixels, int w, int h, int rx, int ry, int rw, int rh, unsigned int color, + int thickness) +{ + const unsigned char* pen_color = (const unsigned char*)&color; + int stride = w; + + if (thickness == -1) { + // filled + for (int y = ry; y < ry + rh; y++) { + if (y < 0) + continue; + + if (y >= h) + break; + + unsigned char* p = pixels + stride * y; + + for (int x = rx; x < rx + rw; x++) { + if (x < 0) + continue; + + if (x >= w) + break; + + p[x] = pen_color[0]; + } + } + + return; + } + + const int t0 = thickness / 2; + const int t1 = thickness - t0; + + // draw top + { + for (int y = ry - t0; y < ry + t1; y++) { + if (y < 0) + continue; + + if (y >= h) + break; + + unsigned char* p = pixels + stride * y; + + for (int x = rx - t0; x < rx + rw + t1; x++) { + if (x < 0) + continue; + + if (x >= w) + break; + + p[x] = pen_color[0]; + } + } + } + + // draw bottom + { + for (int y = ry + rh - t0; y < ry + rh + t1; y++) { + if (y < 0) + continue; + + if (y >= h) + break; + + unsigned char* p = pixels + stride * y; + + for (int x = rx - t0; x < rx + rw + t1; x++) { + if (x < 0) + continue; + + if (x >= w) + break; + + p[x] = pen_color[0]; + } + } + } + + // draw left + for (int x = rx - t0; x < rx + t1; x++) { + if (x < 0) + continue; + + if (x >= w) + break; + + for (int y = ry + t1; y < ry + rh - t0; y++) { + if (y < 0) + continue; + + if (y >= h) + break; + + unsigned char* p = pixels + stride * y; + + p[x] = pen_color[0]; + } + } + + // draw right + for (int x = rx + rw - t0; x < rx + rw + t1; x++) { + if (x < 0) + continue; + + if (x >= w) + break; + + for (int y = ry + t1; y < ry + rh - t0; y++) { + if (y < 0) + continue; + + if (y >= h) + break; + + unsigned char* p = pixels + stride * y; + + p[x] = pen_color[0]; + } + } +} + +static void draw_rectangle_c2(unsigned char* pixels, int w, int h, int rx, int ry, int rw, int rh, unsigned int color, + int thickness) +{ + const unsigned char* pen_color = (const unsigned char*)&color; + int stride = w * 2; + + if (thickness == -1) { + // filled + for (int y = ry; y < ry + rh; y++) { + if (y < 0) + continue; + + if (y >= h) + break; + + unsigned char* p = pixels + stride * y; + + for (int x = rx; x < rx + rw; x++) { + if (x < 0) + continue; + + if (x >= w) + break; + + p[x * 2 + 0] = pen_color[0]; + p[x * 2 + 1] = pen_color[1]; + } + } + + return; + } + + const int t0 = thickness / 2; + const int t1 = thickness - t0; + + // draw top + { + for (int y = ry - t0; y < ry + t1; y++) { + if (y < 0) + continue; + + if (y >= h) + break; + + unsigned char* p = pixels + stride * y; + + for (int x = rx - t0; x < rx + rw + t1; x++) { + if (x < 0) + continue; + + if (x >= w) + break; + + p[x * 2 + 0] = pen_color[0]; + p[x * 2 + 1] = pen_color[1]; + } + } + } + + // draw bottom + { + for (int y = ry + rh - t0; y < ry + rh + t1; y++) { + if (y < 0) + continue; + + if (y >= h) + break; + + unsigned char* p = pixels + stride * y; + + for (int x = rx - t0; x < rx + rw + t1; x++) { + if (x < 0) + continue; + + if (x >= w) + break; + + p[x * 2 + 0] = pen_color[0]; + p[x * 2 + 1] = pen_color[1]; + } + } + } + + // draw left + for (int x = rx - t0; x < rx + t1; x++) { + if (x < 0) + continue; + + if (x >= w) + break; + + for (int y = ry + t1; y < ry + rh - t0; y++) { + if (y < 0) + continue; + + if (y >= h) + break; + + unsigned char* p = pixels + stride * y; + + p[x * 2 + 0] = pen_color[0]; + p[x * 2 + 1] = pen_color[1]; + } + } + + // draw right + for (int x = rx + rw - t0; x < rx + rw + t1; x++) { + if (x < 0) + continue; + + if (x >= w) + break; + + for (int y = ry + t1; y < ry + rh - t0; y++) { + if (y < 0) + continue; + + if (y >= h) + break; + + unsigned char* p = pixels + stride * y; + + p[x * 2 + 0] = pen_color[0]; + p[x * 2 + 1] = pen_color[1]; + } + } +} + +static void draw_rectangle_c3(unsigned char* pixels, int w, int h, int rx, int ry, int rw, int rh, unsigned int color, + int thickness) +{ + const unsigned char* pen_color = (const unsigned char*)&color; + int stride = w * 3; + + if (thickness == -1) { + // filled + for (int y = ry; y < ry + rh; y++) { + if (y < 0) + continue; + + if (y >= h) + break; + + unsigned char* p = pixels + stride * y; + + for (int x = rx; x < rx + rw; x++) { + if (x < 0) + continue; + + if (x >= w) + break; + + p[x * 3 + 0] = pen_color[0]; + p[x * 3 + 1] = pen_color[1]; + p[x * 3 + 2] = pen_color[2]; + } + } + + return; + } + + const int t0 = thickness / 2; + const int t1 = thickness - t0; + + // draw top + { + for (int y = ry - t0; y < ry + t1; y++) { + if (y < 0) + continue; + + if (y >= h) + break; + + unsigned char* p = pixels + stride * y; + + for (int x = rx - t0; x < rx + rw + t1; x++) { + if (x < 0) + continue; + + if (x >= w) + break; + + p[x * 3 + 0] = pen_color[0]; + p[x * 3 + 1] = pen_color[1]; + p[x * 3 + 2] = pen_color[2]; + } + } + } + + // draw bottom + { + for (int y = ry + rh - t0; y < ry + rh + t1; y++) { + if (y < 0) + continue; + + if (y >= h) + break; + + unsigned char* p = pixels + stride * y; + + for (int x = rx - t0; x < rx + rw + t1; x++) { + if (x < 0) + continue; + + if (x >= w) + break; + + p[x * 3 + 0] = pen_color[0]; + p[x * 3 + 1] = pen_color[1]; + p[x * 3 + 2] = pen_color[2]; + } + } + } + + // draw left + for (int x = rx - t0; x < rx + t1; x++) { + if (x < 0) + continue; + + if (x >= w) + break; + + for (int y = ry + t1; y < ry + rh - t0; y++) { + if (y < 0) + continue; + + if (y >= h) + break; + + unsigned char* p = pixels + stride * y; + + p[x * 3 + 0] = pen_color[0]; + p[x * 3 + 1] = pen_color[1]; + p[x * 3 + 2] = pen_color[2]; + } + } + + // draw right + for (int x = rx + rw - t0; x < rx + rw + t1; x++) { + if (x < 0) + continue; + + if (x >= w) + break; + + for (int y = ry + t1; y < ry + rh - t0; y++) { + if (y < 0) + continue; + + if (y >= h) + break; + + unsigned char* p = pixels + stride * y; + + p[x * 3 + 0] = pen_color[0]; + p[x * 3 + 1] = pen_color[1]; + p[x * 3 + 2] = pen_color[2]; + } + } +} + +static void draw_rectangle_c4(unsigned char* pixels, int w, int h, int rx, int ry, int rw, int rh, unsigned int color, + int thickness) +{ + const unsigned char* pen_color = (const unsigned char*)&color; + int stride = w * 4; + + if (thickness == -1) { + // filled + for (int y = ry; y < ry + rh; y++) { + if (y < 0) + continue; + + if (y >= h) + break; + + unsigned char* p = pixels + stride * y; + + for (int x = rx; x < rx + rw; x++) { + if (x < 0) + continue; + + if (x >= w) + break; + + p[x * 4 + 0] = pen_color[0]; + p[x * 4 + 1] = pen_color[1]; + p[x * 4 + 2] = pen_color[2]; + p[x * 4 + 3] = pen_color[3]; + } + } + + return; + } + + const int t0 = thickness / 2; + const int t1 = thickness - t0; + + // draw top + { + for (int y = ry - t0; y < ry + t1; y++) { + if (y < 0) + continue; + + if (y >= h) + break; + + unsigned char* p = pixels + stride * y; + + for (int x = rx - t0; x < rx + rw + t1; x++) { + if (x < 0) + continue; + + if (x >= w) + break; + + p[x * 4 + 0] = pen_color[0]; + p[x * 4 + 1] = pen_color[1]; + p[x * 4 + 2] = pen_color[2]; + p[x * 4 + 3] = pen_color[3]; + } + } + } + + // draw bottom + { + for (int y = ry + rh - t0; y < ry + rh + t1; y++) { + if (y < 0) + continue; + + if (y >= h) + break; + + unsigned char* p = pixels + stride * y; + + for (int x = rx - t0; x < rx + rw + t1; x++) { + if (x < 0) + continue; + + if (x >= w) + break; + + p[x * 4 + 0] = pen_color[0]; + p[x * 4 + 1] = pen_color[1]; + p[x * 4 + 2] = pen_color[2]; + p[x * 4 + 3] = pen_color[3]; + } + } + } + + // draw left + for (int x = rx - t0; x < rx + t1; x++) { + if (x < 0) + continue; + + if (x >= w) + break; + + for (int y = ry + t1; y < ry + rh - t0; y++) { + if (y < 0) + continue; + + if (y >= h) + break; + + unsigned char* p = pixels + stride * y; + + p[x * 4 + 0] = pen_color[0]; + p[x * 4 + 1] = pen_color[1]; + p[x * 4 + 2] = pen_color[2]; + p[x * 4 + 3] = pen_color[3]; + } + } + + // draw right + for (int x = rx + rw - t0; x < rx + rw + t1; x++) { + if (x < 0) + continue; + + if (x >= w) + break; + + for (int y = ry + t1; y < ry + rh - t0; y++) { + if (y < 0) + continue; + + if (y >= h) + break; + + unsigned char* p = pixels + stride * y; + + p[x * 4 + 0] = pen_color[0]; + p[x * 4 + 1] = pen_color[1]; + p[x * 4 + 2] = pen_color[2]; + p[x * 4 + 3] = pen_color[3]; + } + } +} + +static void draw_rectangle_yuv420sp(unsigned char* yuv420sp, int w, int h, int rx, int ry, int rw, int rh, + unsigned int color, int thickness) +{ + // assert w % 2 == 0 + // assert h % 2 == 0 + // assert rx % 2 == 0 + // assert ry % 2 == 0 + // assert rw % 2 == 0 + // assert rh % 2 == 0 + // assert thickness % 2 == 0 + + const unsigned char* pen_color = (const unsigned char*)&color; + + unsigned int v_y; + unsigned int v_uv; + unsigned char* pen_color_y = (unsigned char*)&v_y; + unsigned char* pen_color_uv = (unsigned char*)&v_uv; + pen_color_y[0] = pen_color[0]; + pen_color_uv[0] = pen_color[1]; + pen_color_uv[1] = pen_color[2]; + + unsigned char* Y = yuv420sp; + draw_rectangle_c1(Y, w, h, rx, ry, rw, rh, v_y, thickness); + + unsigned char* UV = yuv420sp + w * h; + int thickness_uv = thickness == -1 ? thickness : max(thickness / 2, 1); + draw_rectangle_c2(UV, w / 2, h / 2, rx / 2, ry / 2, rw / 2, rh / 2, v_uv, thickness_uv); +} + +static inline int distance_lessequal(int x0, int y0, int x1, int y1, float r) +{ + int dx = x0 - x1; + int dy = y0 - y1; + int q = dx * dx + dy * dy; + return q <= r * r; +} + +static inline int distance_inrange(int x0, int y0, int x1, int y1, float r0, float r1) +{ + int dx = x0 - x1; + int dy = y0 - y1; + int q = dx * dx + dy * dy; + return q >= r0 * r0 && q < r1 * r1; +} + +static void draw_circle_c1(unsigned char* pixels, int w, int h, int cx, int cy, int radius, unsigned int color, + int thickness) +{ + const unsigned char* pen_color = (const unsigned char*)&color; + int stride = w; + + if (thickness == -1) { + // filled + for (int y = cy - (radius - 1); y < cy + radius; y++) { + if (y < 0) + continue; + + if (y >= h) + break; + + unsigned char* p = pixels + stride * y; + + for (int x = cx - (radius - 1); x < cx + radius; x++) { + if (x < 0) + continue; + + if (x >= w) + break; + + // distance from cx cy + if (distance_lessequal(x, y, cx, cy, radius)) { + p[x] = pen_color[0]; + } + } + } + + return; + } + + const float t0 = thickness / 2.f; + const float t1 = thickness - t0; + + for (int y = cy - (radius - 1) - t0; y < cy + radius + t1; y++) { + if (y < 0) + continue; + + if (y >= h) + break; + + unsigned char* p = pixels + stride * y; + + for (int x = cx - (radius - 1) - t0; x < cx + radius + t1; x++) { + if (x < 0) + continue; + + if (x >= w) + break; + + // distance from cx cy + if (distance_inrange(x, y, cx, cy, radius - t0, radius + t1)) { + p[x] = pen_color[0]; + } + } + } +} + +static void draw_circle_c2(unsigned char* pixels, int w, int h, int cx, int cy, int radius, unsigned int color, + int thickness) +{ + const unsigned char* pen_color = (const unsigned char*)&color; + int stride = w * 2; + + if (thickness == -1) { + // filled + for (int y = cy - (radius - 1); y < cy + radius; y++) { + if (y < 0) + continue; + + if (y >= h) + break; + + unsigned char* p = pixels + stride * y; + + for (int x = cx - (radius - 1); x < cx + radius; x++) { + if (x < 0) + continue; + + if (x >= w) + break; + + // distance from cx cy + if (distance_lessequal(x, y, cx, cy, radius)) { + p[x * 2 + 0] = pen_color[0]; + p[x * 2 + 1] = pen_color[1]; + } + } + } + + return; + } + + const float t0 = thickness / 2.f; + const float t1 = thickness - t0; + + for (int y = cy - radius - t0; y < cy + radius + t1; y++) { + if (y < 0) + continue; + + if (y >= h) + break; + + unsigned char* p = pixels + stride * y; + + for (int x = cx - radius - t0; x < cx + radius + t1; x++) { + if (x < 0) + continue; + + if (x >= w) + break; + + // distance from cx cy + if (distance_inrange(x, y, cx, cy, radius - t0, radius + t1)) { + p[x * 2 + 0] = pen_color[0]; + p[x * 2 + 1] = pen_color[1]; + } + } + } +} + +static void draw_circle_c3(unsigned char* pixels, int w, int h, int cx, int cy, int radius, unsigned int color, + int thickness) +{ + const unsigned char* pen_color = (const unsigned char*)&color; + int stride = w * 3; + + if (thickness == -1) { + // filled + for (int y = cy - (radius - 1); y < cy + radius; y++) { + if (y < 0) + continue; + + if (y >= h) + break; + + unsigned char* p = pixels + stride * y; + + for (int x = cx - (radius - 1); x < cx + radius; x++) { + if (x < 0) + continue; + + if (x >= w) + break; + + // distance from cx cy + if (distance_lessequal(x, y, cx, cy, radius)) { + p[x * 3 + 0] = pen_color[0]; + p[x * 3 + 1] = pen_color[1]; + p[x * 3 + 2] = pen_color[2]; + } + } + } + + return; + } + + const float t0 = thickness / 2.f; + const float t1 = thickness - t0; + + for (int y = cy - radius - t0; y < cy + radius + t1; y++) { + if (y < 0) + continue; + + if (y >= h) + break; + + unsigned char* p = pixels + stride * y; + + for (int x = cx - radius - t0; x < cx + radius + t1; x++) { + if (x < 0) + continue; + + if (x >= w) + break; + + // distance from cx cy + if (distance_inrange(x, y, cx, cy, radius - t0, radius + t1)) { + p[x * 3 + 0] = pen_color[0]; + p[x * 3 + 1] = pen_color[1]; + p[x * 3 + 2] = pen_color[2]; + } + } + } +} + +static void draw_circle_c4(unsigned char* pixels, int w, int h, int cx, int cy, int radius, unsigned int color, + int thickness) +{ + const unsigned char* pen_color = (const unsigned char*)&color; + int stride = w * 4; + + if (thickness == -1) { + // filled + for (int y = cy - (radius - 1); y < cy + radius; y++) { + if (y < 0) + continue; + + if (y >= h) + break; + + unsigned char* p = pixels + stride * y; + + for (int x = cx - (radius - 1); x < cx + radius; x++) { + if (x < 0) + continue; + + if (x >= w) + break; + + // distance from cx cy + if (distance_lessequal(x, y, cx, cy, radius)) { + p[x * 4 + 0] = pen_color[0]; + p[x * 4 + 1] = pen_color[1]; + p[x * 4 + 2] = pen_color[2]; + p[x * 4 + 3] = pen_color[3]; + } + } + } + + return; + } + + const float t0 = thickness / 2.f; + const float t1 = thickness - t0; + + for (int y = cy - (radius - 1) - t0; y < cy + radius + t1; y++) { + if (y < 0) + continue; + + if (y >= h) + break; + + unsigned char* p = pixels + stride * y; + + for (int x = cx - (radius - 1) - t0; x < cx + radius + t1; x++) { + if (x < 0) + continue; + + if (x >= w) + break; + + // distance from cx cy + if (distance_inrange(x, y, cx, cy, radius - t0, radius + t1)) { + p[x * 4 + 0] = pen_color[0]; + p[x * 4 + 1] = pen_color[1]; + p[x * 4 + 2] = pen_color[2]; + p[x * 4 + 3] = pen_color[3]; + } + } + } +} + +static void draw_circle_yuv420sp(unsigned char* yuv420sp, int w, int h, int cx, int cy, int radius, unsigned int color, + int thickness) +{ + // assert w % 2 == 0 + // assert h % 2 == 0 + // assert cx % 2 == 0 + // assert cy % 2 == 0 + // assert radius % 2 == 0 + // assert thickness % 2 == 0 + + const unsigned char* pen_color = (const unsigned char*)&color; + + unsigned int v_y; + unsigned int v_uv; + unsigned char* pen_color_y = (unsigned char*)&v_y; + unsigned char* pen_color_uv = (unsigned char*)&v_uv; + pen_color_y[0] = pen_color[0]; + pen_color_uv[0] = pen_color[1]; + pen_color_uv[1] = pen_color[2]; + + unsigned char* Y = yuv420sp; + draw_circle_c1(Y, w, h, cx, cy, radius, v_y, thickness); + + unsigned char* UV = yuv420sp + w * h; + int thickness_uv = thickness == -1 ? thickness : max(thickness / 2, 1); + draw_circle_c2(UV, w / 2, h / 2, cx / 2, cy / 2, radius / 2, v_uv, thickness_uv); +} + +static inline int distance_lessthan(int x, int y, int x0, int y0, int x1, int y1, float t) +{ + int dx01 = x1 - x0; + int dy01 = y1 - y0; + int dx0 = x - x0; + int dy0 = y - y0; + + float r = (float)(dx0 * dx01 + dy0 * dy01) / (dx01 * dx01 + dy01 * dy01); + + if (r < 0 || r > 1) + return 0; + + float px = x0 + dx01 * r; + float py = y0 + dy01 * r; + float dx = x - px; + float dy = y - py; + float p = dx * dx + dy * dy; + return p < t; +} + +static void draw_line_c1(unsigned char* pixels, int w, int h, int x0, int y0, int x1, int y1, unsigned int color, + int thickness) +{ + const unsigned char* pen_color = (const unsigned char*)&color; + int stride = w; + + const float t0 = thickness / 2.f; + const float t1 = thickness - t0; + + int x_min = min(x0, x1); + int x_max = max(x0, x1); + int y_min = min(y0, y1); + int y_max = max(y0, y1); + + for (int y = y_min - t0; y < y_max + t1; y++) { + if (y < 0) + continue; + + if (y >= h) + break; + + unsigned char* p = pixels + stride * y; + + for (int x = x_min - t0; x < x_max + t1; x++) { + if (x < 0) + continue; + + if (x >= w) + break; + + // distance from line + if (distance_lessthan(x, y, x0, y0, x1, y1, t1)) { + p[x] = pen_color[0]; + } + } + } +} + +static void draw_line_c2(unsigned char* pixels, int w, int h, int x0, int y0, int x1, int y1, unsigned int color, + int thickness) +{ + const unsigned char* pen_color = (const unsigned char*)&color; + int stride = w * 2; + + const float t0 = thickness / 2.f; + const float t1 = thickness - t0; + + int x_min = min(x0, x1); + int x_max = max(x0, x1); + int y_min = min(y0, y1); + int y_max = max(y0, y1); + + for (int y = y_min - t0; y < y_max + t1; y++) { + if (y < 0) + continue; + + if (y >= h) + break; + + unsigned char* p = pixels + stride * y; + + for (int x = x_min - t0; x < x_max + t1; x++) { + if (x < 0) + continue; + + if (x >= w) + break; + + // distance from line + if (distance_lessthan(x, y, x0, y0, x1, y1, t1)) { + p[x * 2 + 0] = pen_color[0]; + p[x * 2 + 1] = pen_color[1]; + } + } + } +} + +static void draw_line_c3(unsigned char* pixels, int w, int h, int x0, int y0, int x1, int y1, unsigned int color, + int thickness) +{ + const unsigned char* pen_color = (const unsigned char*)&color; + int stride = w * 3; + + const float t0 = thickness / 2.f; + const float t1 = thickness - t0; + + int x_min = min(x0, x1); + int x_max = max(x0, x1); + int y_min = min(y0, y1); + int y_max = max(y0, y1); + + for (int y = y_min - t0; y < y_max + t1; y++) { + if (y < 0) + continue; + + if (y >= h) + break; + + unsigned char* p = pixels + stride * y; + + for (int x = x_min - t0; x < x_max + t1; x++) { + if (x < 0) + continue; + + if (x >= w) + break; + + // distance from line + if (distance_lessthan(x, y, x0, y0, x1, y1, t1)) { + p[x * 3 + 0] = pen_color[0]; + p[x * 3 + 1] = pen_color[1]; + p[x * 3 + 2] = pen_color[2]; + } + } + } +} + +static void draw_line_c4(unsigned char* pixels, int w, int h, int x0, int y0, int x1, int y1, unsigned int color, + int thickness) +{ + const unsigned char* pen_color = (const unsigned char*)&color; + int stride = w * 4; + + const float t0 = thickness / 2.f; + const float t1 = thickness - t0; + + int x_min = min(x0, x1); + int x_max = max(x0, x1); + int y_min = min(y0, y1); + int y_max = max(y0, y1); + + for (int y = y_min - t0; y < y_max + t1; y++) { + if (y < 0) + continue; + + if (y >= h) + break; + + unsigned char* p = pixels + stride * y; + + for (int x = x_min - t0; x < x_max + t1; x++) { + if (x < 0) + continue; + + if (x >= w) + break; + + // distance from line + if (distance_lessthan(x, y, x0, y0, x1, y1, t1)) { + p[x * 4 + 0] = pen_color[0]; + p[x * 4 + 1] = pen_color[1]; + p[x * 4 + 2] = pen_color[2]; + p[x * 4 + 3] = pen_color[3]; + } + } + } +} + +static void draw_line_yuv420sp(unsigned char* yuv420sp, int w, int h, int x0, int y0, int x1, int y1, + unsigned int color, int thickness) +{ + // assert w % 2 == 0 + // assert h % 2 == 0 + // assert x0 % 2 == 0 + // assert y0 % 2 == 0 + // assert x1 % 2 == 0 + // assert y1 % 2 == 0 + // assert thickness % 2 == 0 + + const unsigned char* pen_color = (const unsigned char*)&color; + + unsigned int v_y; + unsigned int v_uv; + unsigned char* pen_color_y = (unsigned char*)&v_y; + unsigned char* pen_color_uv = (unsigned char*)&v_uv; + pen_color_y[0] = pen_color[0]; + pen_color_uv[0] = pen_color[1]; + pen_color_uv[1] = pen_color[2]; + + unsigned char* Y = yuv420sp; + draw_line_c1(Y, w, h, x0, y0, x1, y1, v_y, thickness); + + unsigned char* UV = yuv420sp + w * h; + int thickness_uv = thickness == -1 ? thickness : max(thickness / 2, 1); + draw_line_c2(UV, w / 2, h / 2, x0 / 2, y0 / 2, x1 / 2, y1 / 2, v_uv, thickness_uv); +} + +static void get_text_drawing_size(const char* text, int fontpixelsize, int* w, int* h) +{ + *w = 0; + *h = 0; + + const int n = strlen(text); + + int line_w = 0; + for (int i = 0; i < n; i++) { + char ch = text[i]; + + if (ch == '\n') { + // newline + *w = max(*w, line_w); + *h += fontpixelsize * 2; + line_w = 0; + } + + if (isprint(ch) != 0) { + line_w += fontpixelsize; + } + } + + *w = max(*w, line_w); + *h += fontpixelsize * 2; +} + +static int resize_bilinear_c1(const unsigned char* src_pixels, int w, int h, unsigned char* dst_pixels, int w2, int h2) +{ + int A, B, C, D, x, y, index, gray; + float x_ratio = ((float)(w - 1)) / w2; + float y_ratio = ((float)(h - 1)) / h2; + float x_diff, y_diff, ya, yb; + int offset = 0; + for (int i = 0; i < h2; i++) { + for (int j = 0; j < w2; j++) { + x = (int)(x_ratio * j); + y = (int)(y_ratio * i); + x_diff = (x_ratio * j) - x; + y_diff = (y_ratio * i) - y; + index = y * w + x; + + // range is 0 to 255 thus bitwise AND with 0xff + A = src_pixels[index] & 0xff; + B = src_pixels[index + 1] & 0xff; + C = src_pixels[index + w] & 0xff; + D = src_pixels[index + w + 1] & 0xff; + + // Y = A(1-w)(1-h) + B(w)(1-h) + C(h)(1-w) + Dwh + gray = (int)(A * (1 - x_diff) * (1 - y_diff) + B * (x_diff) * (1 - y_diff) + C * (y_diff) * (1 - x_diff) + + D * (x_diff * y_diff)); + + dst_pixels[offset++] = gray; + } + } + return 0; +} + +static void draw_text_c1(unsigned char* pixels, int w, int h, const char* text, int x, int y, int fontpixelsize, + unsigned int color) +{ + const unsigned char* pen_color = (const unsigned char*)&color; + int stride = w; + + unsigned char* resized_font_bitmap = malloc(fontpixelsize * fontpixelsize * 2); + + const int n = strlen(text); + + int cursor_x = x; + int cursor_y = y; + for (int i = 0; i < n; i++) { + char ch = text[i]; + + if (ch == '\n') { + // newline + cursor_x = x; + cursor_y += fontpixelsize * 2; + } + + if (isprint(ch) != 0) { + const unsigned char* font_bitmap = mono_font_data[ch - ' ']; + + // draw resized character + resize_bilinear_c1(font_bitmap, 20, 40, resized_font_bitmap, fontpixelsize, fontpixelsize * 2); + + for (int j = cursor_y; j < cursor_y + fontpixelsize * 2; j++) { + if (j < 0) + continue; + + if (j >= h) + break; + + const unsigned char* palpha = resized_font_bitmap + (j - cursor_y) * fontpixelsize; + unsigned char* p = pixels + stride * j; + + for (int k = cursor_x; k < cursor_x + fontpixelsize; k++) { + if (k < 0) + continue; + + if (k >= w) + break; + + unsigned char alpha = palpha[k - cursor_x]; + + p[k] = (p[k] * (255 - alpha) + pen_color[0] * alpha) / 255; + } + } + + cursor_x += fontpixelsize; + } + } + + free(resized_font_bitmap); +} + +static void draw_text_c2(unsigned char* pixels, int w, int h, const char* text, int x, int y, int fontpixelsize, + unsigned int color) +{ + const unsigned char* pen_color = (const unsigned char*)&color; + int stride = w * 2; + + unsigned char* resized_font_bitmap = malloc(fontpixelsize * fontpixelsize * 2); + + const int n = strlen(text); + + int cursor_x = x; + int cursor_y = y; + for (int i = 0; i < n; i++) { + char ch = text[i]; + + if (ch == '\n') { + // newline + cursor_x = x; + cursor_y += fontpixelsize * 2; + } + + if (isprint(ch) != 0) { + int font_bitmap_index = ch - ' '; + const unsigned char* font_bitmap = mono_font_data[font_bitmap_index]; + + // draw resized character + resize_bilinear_c1(font_bitmap, 20, 40, resized_font_bitmap, fontpixelsize, fontpixelsize * 2); + + for (int j = cursor_y; j < cursor_y + fontpixelsize * 2; j++) { + if (j < 0) + continue; + + if (j >= h) + break; + + const unsigned char* palpha = resized_font_bitmap + (j - cursor_y) * fontpixelsize; + unsigned char* p = pixels + stride * j; + + for (int k = cursor_x; k < cursor_x + fontpixelsize; k++) { + if (k < 0) + continue; + + if (k >= w) + break; + + unsigned char alpha = palpha[k - cursor_x]; + + p[k * 2 + 0] = (p[k * 2 + 0] * (255 - alpha) + pen_color[0] * alpha) / 255; + p[k * 2 + 1] = (p[k * 2 + 1] * (255 - alpha) + pen_color[1] * alpha) / 255; + } + } + + cursor_x += fontpixelsize; + } + } + + free(resized_font_bitmap); +} + +static void draw_text_c3(unsigned char* pixels, int w, int h, const char* text, int x, int y, int fontpixelsize, + unsigned int color) +{ + const unsigned char* pen_color = (const unsigned char*)&color; + int stride = w * 3; + + unsigned char* resized_font_bitmap = malloc(fontpixelsize * fontpixelsize * 2); + + const int n = strlen(text); + + int cursor_x = x; + int cursor_y = y; + for (int i = 0; i < n; i++) { + char ch = text[i]; + + if (ch == '\n') { + // newline + cursor_x = x; + cursor_y += fontpixelsize * 2; + } + + if (isprint(ch) != 0) { + int font_bitmap_index = ch - ' '; + const unsigned char* font_bitmap = mono_font_data[font_bitmap_index]; + + // draw resized character + resize_bilinear_c1(font_bitmap, 20, 40, resized_font_bitmap, fontpixelsize, fontpixelsize * 2); + + for (int j = cursor_y; j < cursor_y + fontpixelsize * 2; j++) { + if (j < 0) + continue; + + if (j >= h) + break; + + const unsigned char* palpha = resized_font_bitmap + (j - cursor_y) * fontpixelsize; + unsigned char* p = pixels + stride * j; + + for (int k = cursor_x; k < cursor_x + fontpixelsize; k++) { + if (k < 0) + continue; + + if (k >= w) + break; + + unsigned char alpha = palpha[k - cursor_x]; + + p[k * 3 + 0] = (p[k * 3 + 0] * (255 - alpha) + pen_color[0] * alpha) / 255; + p[k * 3 + 1] = (p[k * 3 + 1] * (255 - alpha) + pen_color[1] * alpha) / 255; + p[k * 3 + 2] = (p[k * 3 + 2] * (255 - alpha) + pen_color[2] * alpha) / 255; + } + } + + cursor_x += fontpixelsize; + } + } + + free(resized_font_bitmap); +} + +static void draw_text_c4(unsigned char* pixels, int w, int h, const char* text, int x, int y, int fontpixelsize, + unsigned int color) +{ + const unsigned char* pen_color = (const unsigned char*)&color; + int stride = w * 4; + + unsigned char* resized_font_bitmap = malloc(fontpixelsize * fontpixelsize * 2); + + const int n = strlen(text); + + int cursor_x = x; + int cursor_y = y; + for (int i = 0; i < n; i++) { + char ch = text[i]; + + if (ch == '\n') { + // newline + cursor_x = x; + cursor_y += fontpixelsize * 2; + } + + if (isprint(ch) != 0) { + const unsigned char* font_bitmap = mono_font_data[ch - ' ']; + + // draw resized character + resize_bilinear_c1(font_bitmap, 20, 40, resized_font_bitmap, fontpixelsize, fontpixelsize * 2); + + for (int j = cursor_y; j < cursor_y + fontpixelsize * 2; j++) { + if (j < 0) + continue; + + if (j >= h) + break; + + const unsigned char* palpha = resized_font_bitmap + (j - cursor_y) * fontpixelsize; + unsigned char* p = pixels + stride * j; + + for (int k = cursor_x; k < cursor_x + fontpixelsize; k++) { + if (k < 0) + continue; + + if (k >= w) + break; + + unsigned char alpha = palpha[k - cursor_x]; + + p[k * 4 + 0] = (p[k * 4 + 0] * (255 - alpha) + pen_color[0] * alpha) / 255; + p[k * 4 + 1] = (p[k * 4 + 1] * (255 - alpha) + pen_color[1] * alpha) / 255; + p[k * 4 + 2] = (p[k * 4 + 2] * (255 - alpha) + pen_color[2] * alpha) / 255; + p[k * 4 + 3] = (p[k * 4 + 3] * (255 - alpha) + pen_color[3] * alpha) / 255; + } + } + + cursor_x += fontpixelsize; + } + } + + free(resized_font_bitmap); +} + +static void draw_text_yuv420sp(unsigned char* yuv420sp, int w, int h, const char* text, int x, int y, int fontpixelsize, + unsigned int color) +{ + // assert w % 2 == 0 + // assert h % 2 == 0 + // assert x % 2 == 0 + // assert y % 2 == 0 + // assert fontpixelsize % 2 == 0 + + const unsigned char* pen_color = (const unsigned char*)&color; + + unsigned int v_y; + unsigned int v_uv; + unsigned char* pen_color_y = (unsigned char*)&v_y; + unsigned char* pen_color_uv = (unsigned char*)&v_uv; + pen_color_y[0] = pen_color[0]; + pen_color_uv[0] = pen_color[1]; + pen_color_uv[1] = pen_color[2]; + + unsigned char* Y = yuv420sp; + draw_text_c1(Y, w, h, text, x, y, fontpixelsize, v_y); + + unsigned char* UV = yuv420sp + w * h; + draw_text_c2(UV, w / 2, h / 2, text, x / 2, y / 2, max(fontpixelsize / 2, 1), v_uv); +} + +static void draw_image_c1(unsigned char* pixels, int w, int h, unsigned char* draw_img, int x, int y, int rw, int rh) +{ + for (int i = 0; i < rh; i++) { + memcpy(pixels + (y + i) * w + x, draw_img + i * rw, rw); + } +} + +static void draw_image_c2(unsigned char* pixels, int w, int h, unsigned char* draw_img, int x, int y, int rw, int rh) +{ + for (int i = 0; i < rh; i++) { + memcpy(pixels + ((y + i) * w + x) * 2, draw_img + i * rw * 2, rw * 2); + } +} + +static void draw_image_c3(unsigned char* pixels, int w, int h, unsigned char* draw_img, int x, int y, int rw, int rh) +{ + printf("draw_image_c3 pixels=%p wxh=%dx%d draw_img=%p pos=(%d %d) rwxrh=%dx%d\n", pixels, w, h, draw_img, x, y, rw, rh); + for (int i = 0; i < rh; i++) { + memcpy(pixels + ((y + i) * w + x) * 3, draw_img + i * rw * 3, rw * 3); + } +} + +static void draw_image_c4(unsigned char* pixels, int w, int h, unsigned char* draw_img, int x, int y, int rw, int rh) +{ + for (int i = 0; i < rh; i++) { + memcpy(pixels + ((y + i) * w + x) * 4, draw_img + i * rw * 4, rw * 4); + } +} + +static void draw_image_yuv420sp(unsigned char* pixels, int w, int h, unsigned char* draw_img, int x, int y, int rw, int rh) +{ + draw_image_c1(pixels, w, h, draw_img, x, y, rw, rh); + draw_image_c2(pixels, w, h / 2, draw_img + rw * rh, x, y/2, rw, rh/2); +} + +void draw_rectangle(image_buffer_t* image, int rx, int ry, int rw, int rh, unsigned int color, + int thickness) +{ + image_format_t format = image->format; + unsigned char* pixels = image->virt_addr; + int w = image->width; + int h = image->height; + + unsigned int draw_color = convert_color(color, format); + // printf("draw_color=%x\n", draw_color); + + // printf("draw_rectangle format=%d rx=%d ry=%d rw=%d rh=%d color=0x%x thickness=%d\n", + // format, rx, ry, rw, rh, color, thickness); + switch (format) + { + case IMAGE_FORMAT_RGB888: + draw_rectangle_c3(pixels, w, h, rx, ry, rw, rh, draw_color, thickness); + break; + case IMAGE_FORMAT_RGBA8888: + draw_rectangle_c4(pixels, w, h, rx, ry, rw, rh, draw_color, thickness); + break; + case IMAGE_FORMAT_YUV420SP_NV12: + case IMAGE_FORMAT_YUV420SP_NV21: + draw_rectangle_yuv420sp(pixels, w, h, rx, ry, rw, rh, draw_color, thickness); + break; + default: + printf("no support format %d", format); + break; + } +} + +void draw_line(image_buffer_t* image, int x0, int y0, int x1, int y1, unsigned int color, + int thickness) +{ + image_format_t format = image->format; + unsigned char* pixels = image->virt_addr; + int w = image->width; + int h = image->height; + + unsigned draw_color = convert_color(color, format); + + switch (format) + { + case IMAGE_FORMAT_RGB888: + draw_line_c3(pixels, w, h, x0, y0, x1, y1, draw_color, thickness); + break; + case IMAGE_FORMAT_RGBA8888: + draw_line_c4(pixels, w, h, x0, y0, x1, y1, draw_color, thickness); + break; + case IMAGE_FORMAT_YUV420SP_NV12: + case IMAGE_FORMAT_YUV420SP_NV21: + draw_line_yuv420sp(pixels, w, h, x0, y0, x1, y1, draw_color, thickness); + break; + default: + printf("no support format %d", format); + break; + } +} + +void draw_text(image_buffer_t* image, const char* text, int x, int y, unsigned int color, + int fontsize) +{ + image_format_t format = image->format; + unsigned char* pixels = image->virt_addr; + int w = image->width; + int h = image->height; + unsigned draw_color = convert_color(color, format); + + switch (format) + { + case IMAGE_FORMAT_RGB888: + draw_text_c3(pixels, w, h, text, x, y, fontsize, draw_color); + break; + case IMAGE_FORMAT_RGBA8888: + draw_text_c4(pixels, w, h, text, x, y, fontsize, draw_color); + break; + case IMAGE_FORMAT_YUV420SP_NV12: + case IMAGE_FORMAT_YUV420SP_NV21: + draw_text_yuv420sp(pixels, w, h, text, x, y, fontsize, draw_color); + break; + default: + printf("no support format %d", format); + break; + } +} + +void draw_circle(image_buffer_t* image, int cx, int cy, int radius, unsigned int color, + int thickness) +{ + image_format_t format = image->format; + unsigned char* pixels = image->virt_addr; + int w = image->width; + int h = image->height; + unsigned draw_color = convert_color(color, format); + + switch (format) + { + case IMAGE_FORMAT_RGB888: + draw_circle_c3(pixels, w, h, cx, cy, radius, draw_color, thickness); + break; + case IMAGE_FORMAT_RGBA8888: + draw_circle_c4(pixels, w, h, cx, cy, radius, draw_color, thickness); + break; + case IMAGE_FORMAT_YUV420SP_NV12: + case IMAGE_FORMAT_YUV420SP_NV21: + draw_circle_yuv420sp(pixels, w, h, cx, cy, radius, draw_color, thickness); + break; + default: + printf("no support format %d", format); + break; + } +} + +void draw_image(image_buffer_t* image, unsigned char* draw_img, int x, int y, int rw, int rh) +{ + image_format_t format = image->format; + unsigned char* pixels = image->virt_addr; + int w = image->width; + int h = image->height; + + switch (format) + { + case IMAGE_FORMAT_RGB888: + draw_image_c3(pixels, w, h, draw_img, x, y, rw, rh); + break; + case IMAGE_FORMAT_RGBA8888: + draw_image_c4(pixels, w, h, draw_img, x, y, rw, rh); + break; + case IMAGE_FORMAT_YUV420SP_NV12: + case IMAGE_FORMAT_YUV420SP_NV21: + draw_image_yuv420sp(pixels, w, h, draw_img, x, y, rw, rh); + break; + default: + printf("no support format %d", format); + break; + } +} diff --git a/tmp/opi_rtsp/opi5/image_drawing.h b/tmp/opi_rtsp/opi5/image_drawing.h new file mode 100644 index 0000000..551e53e --- /dev/null +++ b/tmp/opi_rtsp/opi5/image_drawing.h @@ -0,0 +1,89 @@ +#ifndef _RKNN_MODEL_ZOO_IMAGE_DRAWING_H_ +#define _RKNN_MODEL_ZOO_IMAGE_DRAWING_H_ + +#ifdef __cplusplus +extern "C" { +#endif + +#include "common.h" + +// Color Format ARGB8888 +#define COLOR_GREEN 0xFF00FF00 +#define COLOR_BLUE 0xFF0000FF +#define COLOR_RED 0xFFFF0000 +#define COLOR_YELLOW 0xFFFFFF00 +#define COLOR_ORANGE 0xFFFF4500 +#define COLOR_BLACK 0xFF000000 +#define COLOR_WHITE 0xFFFFFFFF + +/** + * @brief Draw rectangle + * + * @param image [in] Image buffer + * @param rx [in] Rectangle top left x + * @param ry [in] Rectangle top left y + * @param rw [in] Rectangle width + * @param rh [in] Rectangle height + * @param color [in] Rectangle line color + * @param thickness [in] Rectangle line thickness + */ +void draw_rectangle(image_buffer_t* image, int rx, int ry, int rw, int rh, unsigned int color, + int thickness); + +/** + * @brief Draw line + * + * @param image [in] Image buffer + * @param x0 [in] Line begin point x + * @param y0 [in] Line begin point y + * @param x1 [in] Line end point x + * @param y1 [in] Line end point y + * @param color [in] Line color + * @param thickness [in] Line thickness + */ +void draw_line(image_buffer_t* image, int x0, int y0, int x1, int y1, unsigned int color, + int thickness); + +/** + * @brief Draw text (only support ASCII char) + * + * @param image [in] Image buffer + * @param text [in] Text + * @param x [in] Text position x + * @param y [in] Text position y + * @param color [in] Text color + * @param fontsize [in] Text fontsize + */ +void draw_text(image_buffer_t* image, const char* text, int x, int y, unsigned int color, + int fontsize); + +/** + * @brief Draw circle + * + * @param image [in] Image buffer + * @param cx [in] Circle center x + * @param cy [in] Circle center y + * @param radius [in] Circle radius + * @param color [in] Circle color + * @param thickness [in] Circle thickness + */ +void draw_circle(image_buffer_t* image, int cx, int cy, int radius, unsigned int color, + int thickness); + +/** + * @brief Draw image + * + * @param image [in] Target Image buffer + * @param draw_img [in] Image for drawing + * @param x [in] Target Image draw position x + * @param y [in] Target Image draw position y + * @param rw [in] Width of image for drawing + * @param rh [in] Height of image for drawing + */ +void draw_image(image_buffer_t* image, unsigned char* draw_img, int x, int y, int rw, int rh); + +#ifdef __cplusplus +} // extern "C" +#endif + +#endif // _RKNN_MODEL_ZOO_IMAGE_DRAWING_H_ \ No newline at end of file diff --git a/tmp/opi_rtsp/opi5/image_utils.c b/tmp/opi_rtsp/opi5/image_utils.c new file mode 100644 index 0000000..b5180a4 --- /dev/null +++ b/tmp/opi_rtsp/opi5/image_utils.c @@ -0,0 +1,782 @@ +#include +#include +#include +#include +#include + +#include "im2d.h" +#include "drmrga.h" + +#define STB_IMAGE_IMPLEMENTATION +#define STBI_NO_THREAD_LOCALS +#define STBI_ONLY_JPEG +#define STBI_ONLY_PNG +#include "stb_image.h" + +#define STB_IMAGE_WRITE_IMPLEMENTATION +#include "stb_image_write.h" + +#include "turbojpeg.h" + +#include "image_utils.h" +#include "file_utils.h" + +static const char* filter_image_names[] = { + "jpg", + "jpeg", + "JPG", + "JPEG", + "png", + "PNG", + "data", + NULL +}; + +static const char* subsampName[TJ_NUMSAMP] = {"4:4:4", "4:2:2", "4:2:0", "Grayscale", "4:4:0", "4:1:1"}; + +static const char* colorspaceName[TJ_NUMCS] = {"RGB", "YCbCr", "GRAY", "CMYK", "YCCK"}; + +static int image_file_filter(const struct dirent *entry) +{ + const char ** filter; + + for (filter = filter_image_names; *filter; ++filter) { + if(strstr(entry->d_name, *filter) != NULL) { + return 1; + } + } + return 0; +} + +static int read_image_jpeg(const char* path, image_buffer_t* image) +{ + FILE* jpegFile = NULL; + unsigned long jpegSize; + int flags = 0; + int width, height; + int origin_width, origin_height; + unsigned char* imgBuf = NULL; + unsigned char* jpegBuf = NULL; + unsigned long size; + unsigned short orientation = 1; + struct timeval tv1, tv2; + + if ((jpegFile = fopen(path, "rb")) == NULL) { + printf("open input file failure\n"); + } + if (fseek(jpegFile, 0, SEEK_END) < 0 || (size = ftell(jpegFile)) < 0 || fseek(jpegFile, 0, SEEK_SET) < 0) { + printf("determining input file size failure\n"); + } + if (size == 0) { + printf("determining input file size, Input file contains no data\n"); + } + jpegSize = (unsigned long)size; + if ((jpegBuf = (unsigned char*)malloc(jpegSize * sizeof(unsigned char))) == NULL) { + printf("allocating JPEG buffer\n"); + } + if (fread(jpegBuf, jpegSize, 1, jpegFile) < 1) { + printf("reading input file"); + } + fclose(jpegFile); + jpegFile = NULL; + + tjhandle handle = NULL; + int subsample, colorspace; + int padding = 1; + int ret = 0; + + handle = tjInitDecompress(); + ret = tjDecompressHeader3(handle, jpegBuf, size, &origin_width, &origin_height, &subsample, &colorspace); + if (ret < 0) { + printf("header file error, errorStr:%s, errorCode:%d\n", tjGetErrorStr(), tjGetErrorCode(handle)); + return -1; + } + + // 对图像做裁剪16对齐,利于后续rga操作 + int crop_width = origin_width / 16 * 16; + int crop_height = origin_height / 16 * 16; + + printf("origin size=%dx%d crop size=%dx%d\n", origin_width, origin_height, crop_width, crop_height); + + // gettimeofday(&tv1, NULL); + ret = tjDecompressHeader3(handle, jpegBuf, size, &width, &height, &subsample, &colorspace); + if (ret < 0) { + printf("header file error, errorStr:%s, errorCode:%d\n", tjGetErrorStr(), tjGetErrorCode(handle)); + return -1; + } + printf("input image: %d x %d, subsampling: %s, colorspace: %s, orientation: %d\n", + width, height, subsampName[subsample], colorspaceName[colorspace], orientation); + int sw_out_size = width * height * 3; + unsigned char* sw_out_buf = image->virt_addr; + if (sw_out_buf == NULL) { + sw_out_buf = (unsigned char*)malloc(sw_out_size * sizeof(unsigned char)); + } + if (sw_out_buf == NULL) { + printf("sw_out_buf is NULL\n"); + goto out; + } + + flags |= 0; + + // 错误码为0时,表示警告,错误码为-1时表示错误 + int pixelFormat = TJPF_RGB; + ret = tjDecompress2(handle, jpegBuf, size, sw_out_buf, width, 0, height, pixelFormat, flags); + // ret = tjDecompressToYUV2(handle, jpeg_buf, size, dst_buf, *width, padding, *height, flags); + if ((0 != tjGetErrorCode(handle)) && (ret < 0)) { + printf("error : decompress to yuv failed, errorStr:%s, errorCode:%d\n", tjGetErrorStr(), + tjGetErrorCode(handle)); + goto out; + } + if ((0 == tjGetErrorCode(handle)) && (ret < 0)) { + printf("warning : errorStr:%s, errorCode:%d\n", tjGetErrorStr(), tjGetErrorCode(handle)); + } + tjDestroy(handle); + // gettimeofday(&tv2, NULL); + // printf("decode time %ld ms\n", (tv2.tv_sec-tv1.tv_sec)*1000 + (tv2.tv_usec-tv1.tv_usec)/1000); + + image->width = width; + image->height = height; + image->format = IMAGE_FORMAT_RGB888; + image->virt_addr = sw_out_buf; + image->size = sw_out_size; +out: + if (jpegBuf) { + free(jpegBuf); + } + return 0; +} + +static int read_image_raw(const char* path, image_buffer_t* image) +{ + FILE *fp = fopen(path, "rb"); + if(fp == NULL) { + printf("fopen %s fail!\n", path); + return -1; + } + fseek(fp, 0, SEEK_END); + int file_size = ftell(fp); + unsigned char *data = image->virt_addr; + if (image->virt_addr == NULL) { + data = (unsigned char *)malloc(file_size+1); + } + data[file_size] = 0; + fseek(fp, 0, SEEK_SET); + if(file_size != fread(data, 1, file_size, fp)) { + printf("fread %s fail!\n", path); + free(data); + return -1; + } + if(fp) { + fclose(fp); + } + if (image->virt_addr == NULL) { + image->virt_addr = data; + image->size = file_size; + } + + return 0; +} + +static int write_image_jpeg(const char* path, int quality, const image_buffer_t* image) +{ + int ret; + int jpegSubsamp = TJSAMP_422; + unsigned char* jpegBuf = NULL; + unsigned long jpegSize = 0; + int flags = 0; + + const unsigned char* data = image->virt_addr; + int width = image->width; + int height = image->height; + int pixelFormat = TJPF_RGB; + + tjhandle handle = tjInitCompress(); + + if (image->format == IMAGE_FORMAT_RGB888) { + ret = tjCompress2(handle, data, width, 0, height, pixelFormat, &jpegBuf, &jpegSize, jpegSubsamp, quality, flags); + } else { + printf("write_image_jpeg: pixel format %d not support\n", image->format); + return -1; + } + + // printf("ret=%d jpegBuf=%p jpegSize=%d\n", ret, jpegBuf, jpegSize); + if (jpegBuf != NULL && jpegSize > 0) { + write_data_to_file(path, (const char*)jpegBuf, jpegSize); + tjFree(jpegBuf); + } + tjDestroy(handle); + + return 0; +} + +static int read_image_stb(const char* path, image_buffer_t* image) +{ + // 默认图像为3通道 + int w, h, c; + unsigned char* pixeldata = stbi_load(path, &w, &h, &c, 0); + if (!pixeldata) { + printf("error: read image %s fail\n", path); + return -1; + } + // printf("load image wxhxc=%dx%dx%d path=%s\n", w, h, c, path); + int size = w * h * c; + + // 设置图像数据 + if (image->virt_addr != NULL) { + memcpy(image->virt_addr, pixeldata, size); + stbi_image_free(pixeldata); + } else { + image->virt_addr = pixeldata; + } + image->width = w; + image->height = h; + if (c == 4) { + image->format = IMAGE_FORMAT_RGBA8888; + } else if (c == 1) { + image->format = IMAGE_FORMAT_GRAY8; + } else { + image->format = IMAGE_FORMAT_RGB888; + } + return 0; +} + +int read_image(const char* path, image_buffer_t* image) +{ + const char* _ext = strrchr(path, '.'); + if (!_ext) { + // missing extension + return -666; + } + if (strcmp(_ext, ".data") == 0) { + return read_image_raw(path, image); + } else if (strcmp(_ext, ".jpg") == 0 || strcmp(_ext, ".jpeg") == 0 || strcmp(_ext, ".JPG") == 0 || + strcmp(_ext, ".JPEG") == 0) { + return read_image_jpeg(path, image); + } else { + return read_image_stb(path, image); + } +} + +int write_image(const char* path, const image_buffer_t* img) +{ + int ret; + int width = img->width; + int height = img->height; + int channel = 3; + void* data = img->virt_addr; + printf("write_image path: %s width=%d height=%d channel=%d data=%p\n", + path, width, height, channel, data); + + const char* _ext = strrchr(path, '.'); + if (!_ext) { + // missing extension + return -1; + } + if (strcmp(_ext, ".jpg") == 0 || strcmp(_ext, ".jpeg") == 0 || strcmp(_ext, ".JPG") == 0 || + strcmp(_ext, ".JPEG") == 0) { + int quality = 95; + ret = write_image_jpeg(path, quality, img); + } else if (strcmp(_ext, ".png") == 0 | strcmp(_ext, ".PNG") == 0) { + ret = stbi_write_png(path, width, height, channel, data, 0); + } else if (strcmp(_ext, ".data") == 0 | strcmp(_ext, ".DATA") == 0) { + int size = get_image_size(img); + ret = write_data_to_file(path, data, size); + } else { + // unknown extension type + return -1; + } + return ret; +} + +static int crop_and_scale_image_c(int channel, unsigned char *src, int src_width, int src_height, + int crop_x, int crop_y, int crop_width, int crop_height, + unsigned char *dst, int dst_width, int dst_height, + int dst_box_x, int dst_box_y, int dst_box_width, int dst_box_height) { + if (dst == NULL) { + printf("dst buffer is null\n"); + return -1; + } + + float x_ratio = (float)crop_width / (float)dst_box_width; + float y_ratio = (float)crop_height / (float)dst_box_height; + + // printf("src_width=%d src_height=%d crop_x=%d crop_y=%d crop_width=%d crop_height=%d\n", + // src_width, src_height, crop_x, crop_y, crop_width, crop_height); + // printf("dst_width=%d dst_height=%d dst_box_x=%d dst_box_y=%d dst_box_width=%d dst_box_height=%d\n", + // dst_width, dst_height, dst_box_x, dst_box_y, dst_box_width, dst_box_height); + // printf("channel=%d x_ratio=%f y_ratio=%f\n", channel, x_ratio, y_ratio); + + // 从原图指定区域取数据,双线性缩放到目标指定区域 + for (int dst_y = dst_box_y; dst_y < dst_box_y + dst_box_height; dst_y++) { + for (int dst_x = dst_box_x; dst_x < dst_box_x + dst_box_width; dst_x++) { + int dst_x_offset = dst_x - dst_box_x; + int dst_y_offset = dst_y - dst_box_y; + + int src_x = (int)(dst_x_offset * x_ratio) + crop_x; + int src_y = (int)(dst_y_offset * y_ratio) + crop_y; + + float x_diff = (dst_x_offset * x_ratio) - (src_x - crop_x); + float y_diff = (dst_y_offset * y_ratio) - (src_y - crop_y); + + int index1 = src_y * src_width * channel + src_x * channel; + int index2 = index1 + src_width * channel; // down + if (src_y == src_height - 1) { + // 如果到图像最下边缘,变成选择上面的像素 + index2 = index1 - src_width * channel; + } + int index3 = index1 + 1 * channel; // right + int index4 = index2 + 1 * channel; // down right + if (src_x == src_width - 1) { + // 如果到图像最右边缘,变成选择左边的像素 + index3 = index1 - 1 * channel; + index4 = index2 - 1 * channel; + } + + // printf("dst_x=%d dst_y=%d dst_x_offset=%d dst_y_offset=%d src_x=%d src_y=%d x_diff=%f y_diff=%f src index=%d %d %d %d\n", + // dst_x, dst_y, dst_x_offset, dst_y_offset, + // src_x, src_y, x_diff, y_diff, + // index1, index2, index3, index4); + + for (int c = 0; c < channel; c++) { + unsigned char A = src[index1+c]; + unsigned char B = src[index3+c]; + unsigned char C = src[index2+c]; + unsigned char D = src[index4+c]; + + unsigned char pixel = (unsigned char)( + A * (1 - x_diff) * (1 - y_diff) + + B * x_diff * (1 - y_diff) + + C * y_diff * (1 - x_diff) + + D * x_diff * y_diff + ); + + dst[(dst_y * dst_width + dst_x) * channel + c] = pixel; + } + } + } + + return 0; +} + +static int crop_and_scale_image_yuv420sp(unsigned char *src, int src_width, int src_height, + int crop_x, int crop_y, int crop_width, int crop_height, + unsigned char *dst, int dst_width, int dst_height, + int dst_box_x, int dst_box_y, int dst_box_width, int dst_box_height) { + + unsigned char* src_y = src; + unsigned char* src_uv = src + src_width * src_height; + + unsigned char* dst_y = dst; + unsigned char* dst_uv = dst + dst_width * dst_height; + + crop_and_scale_image_c(1, src_y, src_width, src_height, crop_x, crop_y, crop_width, crop_height, + dst_y, dst_width, dst_height, dst_box_x, dst_box_y, dst_box_width, dst_box_height); + + crop_and_scale_image_c(2, src_uv, src_width / 2, src_height / 2, crop_x / 2, crop_y / 2, crop_width / 2, crop_height / 2, + dst_uv, dst_width / 2, dst_height / 2, dst_box_x, dst_box_y, dst_box_width, dst_box_height); + + return 0; +} + +static int convert_image_cpu(image_buffer_t *src, image_buffer_t *dst, image_rect_t *src_box, image_rect_t *dst_box, char color) { + int ret; + if (dst->virt_addr == NULL) { + return -1; + } + if (src->virt_addr == NULL) { + return -1; + } + if (src->format != dst->format) { + return -1; + } + + int src_box_x = 0; + int src_box_y = 0; + int src_box_w = src->width; + int src_box_h = src->height; + if (src_box != NULL) { + src_box_x = src_box->left; + src_box_y = src_box->top; + src_box_w = src_box->right - src_box->left + 1; + src_box_h = src_box->bottom - src_box->top + 1; + } + int dst_box_x = 0; + int dst_box_y = 0; + int dst_box_w = dst->width; + int dst_box_h = dst->height; + if (dst_box != NULL) { + dst_box_x = dst_box->left; + dst_box_y = dst_box->top; + dst_box_w = dst_box->right - dst_box->left + 1; + dst_box_h = dst_box->bottom - dst_box->top + 1; + } + + // fill pad color + if (dst_box_w != dst->width || dst_box_h != dst->height) { + int dst_size = get_image_size(dst); + memset(dst->virt_addr, color, dst_size); + } + + int need_release_dst_buffer = 0; + int reti = 0; + if (src->format == IMAGE_FORMAT_RGB888) { + reti = crop_and_scale_image_c(3, src->virt_addr, src->width, src->height, + src_box_x, src_box_y, src_box_w, src_box_h, + dst->virt_addr, dst->width, dst->height, + dst_box_x, dst_box_y, dst_box_w, dst_box_h); + } else if (src->format == IMAGE_FORMAT_RGBA8888) { + reti = crop_and_scale_image_c(4, src->virt_addr, src->width, src->height, + src_box_x, src_box_y, src_box_w, src_box_h, + dst->virt_addr, dst->width, dst->height, + dst_box_x, dst_box_y, dst_box_w, dst_box_h); + } else if (src->format == IMAGE_FORMAT_GRAY8) { + reti = crop_and_scale_image_c(1, src->virt_addr, src->width, src->height, + src_box_x, src_box_y, src_box_w, src_box_h, + dst->virt_addr, dst->width, dst->height, + dst_box_x, dst_box_y, dst_box_w, dst_box_h); + } else if (src->format == IMAGE_FORMAT_YUV420SP_NV12 || src->format == IMAGE_FORMAT_YUV420SP_NV12) { + reti = crop_and_scale_image_yuv420sp(src->virt_addr, src->width, src->height, + src_box_x, src_box_y, src_box_w, src_box_h, + dst->virt_addr, dst->width, dst->height, + dst_box_x, dst_box_y, dst_box_w, dst_box_h); + } else { + printf("no support format %d\n", src->format); + } + if (reti != 0) { + printf("convert_image_cpu fail %d\n", reti); + return -1; + } + printf("finish\n"); + return 0; +} + +static int get_rga_fmt(image_format_t fmt) { + switch (fmt) + { + case IMAGE_FORMAT_RGB888: + return RK_FORMAT_RGB_888; + case IMAGE_FORMAT_RGBA8888: + return RK_FORMAT_RGBA_8888; + case IMAGE_FORMAT_YUV420SP_NV12: + return RK_FORMAT_YCbCr_420_SP; + case IMAGE_FORMAT_YUV420SP_NV21: + return RK_FORMAT_YCrCb_420_SP; + default: + return -1; + } +} + +int get_image_size(image_buffer_t* image) +{ + if (image == NULL) { + return 0; + } + switch (image->format) + { + case IMAGE_FORMAT_GRAY8: + return image->width * image->height; + case IMAGE_FORMAT_RGB888: + return image->width * image->height * 3; + case IMAGE_FORMAT_RGBA8888: + return image->width * image->height * 4; + case IMAGE_FORMAT_YUV420SP_NV12: + case IMAGE_FORMAT_YUV420SP_NV21: + return image->width * image->height * 3 / 2; + default: + break; + } +} + +static int convert_image_rga(image_buffer_t* src_img, image_buffer_t* dst_img, image_rect_t* src_box, image_rect_t* dst_box, char color) +{ + int ret = 0; + + int srcWidth = src_img->width; + int srcHeight = src_img->height; + void *src = src_img->virt_addr; + int src_fd = src_img->fd; + void *src_phy = NULL; + int srcFmt = get_rga_fmt(src_img->format); + + int dstWidth = dst_img->width; + int dstHeight = dst_img->height; + void *dst = dst_img->virt_addr; + int dst_fd = dst_img->fd; + void *dst_phy = NULL; + int dstFmt = get_rga_fmt(dst_img->format); + + int rotate = 0; + + int use_handle = 0; +#if defined(LIBRGA_IM2D_HANDLE) + use_handle = 1; +#endif + + // printf("src width=%d height=%d fmt=0x%x virAddr=0x%p fd=%d\n", + // srcWidth, srcHeight, srcFmt, src, src_fd); + // printf("dst width=%d height=%d fmt=0x%x virAddr=0x%p fd=%d\n", + // dstWidth, dstHeight, dstFmt, dst, dst_fd); + // printf("rotate=%d\n", rotate); + + int usage = 0; + IM_STATUS ret_rga = IM_STATUS_NOERROR; + + // set rga usage + usage |= rotate; + + // set rga rect + im_rect srect; + im_rect drect; + im_rect prect; + memset(&prect, 0, sizeof(im_rect)); + + if (src_box != NULL) { + srect.x = src_box->left; + srect.y = src_box->top; + srect.width = src_box->right - src_box->left + 1; + srect.height = src_box->bottom - src_box->top + 1; + } else { + srect.x = 0; + srect.y = 0; + srect.width = srcWidth; + srect.height = srcHeight; + } + + if (dst_box != NULL) { + drect.x = dst_box->left; + drect.y = dst_box->top; + drect.width = dst_box->right - dst_box->left + 1; + drect.height = dst_box->bottom - dst_box->top + 1; + } else { + drect.x = 0; + drect.y = 0; + drect.width = dstWidth; + drect.height = dstHeight; + } + + // set rga buffer + rga_buffer_t rga_buf_src; + rga_buffer_t rga_buf_dst; + rga_buffer_t pat; + rga_buffer_handle_t rga_handle_src = 0; + rga_buffer_handle_t rga_handle_dst = 0; + memset(&pat, 0, sizeof(rga_buffer_t)); + + im_handle_param_t in_param; + in_param.width = srcWidth; + in_param.height = srcHeight; + in_param.format = srcFmt; + + im_handle_param_t dst_param; + dst_param.width = dstWidth; + dst_param.height = dstHeight; + dst_param.format = dstFmt; + + if (use_handle) { + if (src_phy != NULL) { + rga_handle_src = importbuffer_physicaladdr((uint64_t)src_phy, &in_param); + } else if (src_fd > 0) { + rga_handle_src = importbuffer_fd(src_fd, &in_param); + } else { + rga_handle_src = importbuffer_virtualaddr(src, &in_param); + } + if (rga_handle_src <= 0) { + printf("src handle error %d\n", rga_handle_src); + ret = -1; + goto err; + } + rga_buf_src = wrapbuffer_handle(rga_handle_src, srcWidth, srcHeight, srcFmt, srcWidth, srcHeight); + } else { + if (src_phy != NULL) { + rga_buf_src = wrapbuffer_physicaladdr(src_phy, srcWidth, srcHeight, srcFmt, srcWidth, srcHeight); + } else if (src_fd > 0) { + rga_buf_src = wrapbuffer_fd(src_fd, srcWidth, srcHeight, srcFmt, srcWidth, srcHeight); + } else { + rga_buf_src = wrapbuffer_virtualaddr(src, srcWidth, srcHeight, srcFmt, srcWidth, srcHeight); + } + } + + if (use_handle) { + if (dst_phy != NULL) { + rga_handle_dst = importbuffer_physicaladdr((uint64_t)dst_phy, &dst_param); + } else if (dst_fd > 0) { + rga_handle_dst = importbuffer_fd(dst_fd, &dst_param); + } else { + rga_handle_dst = importbuffer_virtualaddr(dst, &dst_param); + } + if (rga_handle_dst <= 0) { + printf("dst handle error %d\n", rga_handle_dst); + ret = -1; + goto err; + } + rga_buf_dst = wrapbuffer_handle(rga_handle_dst, dstWidth, dstHeight, dstFmt, dstWidth, dstHeight); + } else { + if (dst_phy != NULL) { + rga_buf_dst = wrapbuffer_physicaladdr(dst_phy, dstWidth, dstHeight, dstFmt, dstWidth, dstHeight); + } else if (dst_fd > 0) { + rga_buf_dst = wrapbuffer_fd(dst_fd, dstWidth, dstHeight, dstFmt, dstWidth, dstHeight); + } else { + rga_buf_dst = wrapbuffer_virtualaddr(dst, dstWidth, dstHeight, dstFmt, dstWidth, dstHeight); + } + } + + if (drect.width != dstWidth || drect.height != dstHeight) { + im_rect dst_whole_rect = {0, 0, dstWidth, dstHeight}; + int imcolor; + char* p_imcolor = &imcolor; + p_imcolor[0] = color; + p_imcolor[1] = color; + p_imcolor[2] = color; + p_imcolor[3] = color; + printf("fill dst image (x y w h)=(%d %d %d %d) with color=0x%x\n", + dst_whole_rect.x, dst_whole_rect.y, dst_whole_rect.width, dst_whole_rect.height, imcolor); + ret_rga = imfill(rga_buf_dst, dst_whole_rect, imcolor); + if (ret_rga <= 0) { + if (dst != NULL) { + size_t dst_size = get_image_size(dst_img); + memset(dst, color, dst_size); + } else { + printf("Warning: Can not fill color on target image\n"); + } + } + } + + // rga process + ret_rga = improcess(rga_buf_src, rga_buf_dst, pat, srect, drect, prect, usage); + if (ret_rga <= 0) { + printf("Error on improcess STATUS=%d\n", ret_rga); + printf("RGA error message: %s\n", imStrError((IM_STATUS)ret_rga)); + ret = -1; + } + +err: + if (rga_handle_src > 0) { + releasebuffer_handle(rga_handle_src); + } + + if (rga_handle_dst > 0) { + releasebuffer_handle(rga_handle_dst); + } + + // printf("finish\n"); + return ret; +} + +int convert_image(image_buffer_t* src_img, image_buffer_t* dst_img, image_rect_t* src_box, image_rect_t* dst_box, char color) +{ + int ret; + + printf("src width=%d height=%d fmt=0x%x virAddr=0x%p fd=%d\n", + src_img->width, src_img->height, src_img->format, src_img->virt_addr, src_img->fd); + printf("dst width=%d height=%d fmt=0x%x virAddr=0x%p fd=%d\n", + dst_img->width, dst_img->height, dst_img->format, dst_img->virt_addr, dst_img->fd); + if (src_box != NULL) { + printf("src_box=(%d %d %d %d)\n", src_box->left, src_box->top, src_box->right, src_box->bottom); + } + if (dst_box != NULL) { + printf("dst_box=(%d %d %d %d)\n", dst_box->left, dst_box->top, dst_box->right, dst_box->bottom); + } + printf("color=0x%x\n", color); + + ret = convert_image_rga(src_img, dst_img, src_box, dst_box, color); + if (ret != 0) { + printf("try convert image use cpu\n"); + ret = convert_image_cpu(src_img, dst_img, src_box, dst_box, color); + } + return ret; +} + +int convert_image_with_letterbox(image_buffer_t* src_image, image_buffer_t* dst_image, letterbox_t* letterbox, char color) +{ + int ret = 0; + int allow_slight_change = 1; + int src_w = src_image->width; + int src_h = src_image->height; + int dst_w = dst_image->width; + int dst_h = dst_image->height; + int resize_w = dst_w; + int resize_h = dst_h; + + int padding_w = 0; + int padding_h = 0; + + int _left_offset = 0; + int _top_offset = 0; + float scale = 1.0; + + image_rect_t src_box; + src_box.left = 0; + src_box.top = 0; + src_box.right = src_image->width - 1; + src_box.bottom = src_image->height - 1; + + image_rect_t dst_box; + dst_box.left = 0; + dst_box.top = 0; + dst_box.right = dst_image->width - 1; + dst_box.bottom = dst_image->height - 1; + + float _scale_w = (float)dst_w / src_w; + float _scale_h = (float)dst_h / src_h; + if(_scale_w < _scale_h) { + scale = _scale_w; + resize_h = (int) src_h*scale; + } else { + scale = _scale_h; + resize_w = (int) src_w*scale; + } + // slight change image size for align + if (allow_slight_change == 1 && (resize_w % 4 != 0)) { + resize_w -= resize_w % 4; + } + if (allow_slight_change == 1 && (resize_h % 2 != 0)) { + resize_h -= resize_h % 2; + } + // padding + padding_h = dst_h - resize_h; + padding_w = dst_w - resize_w; + // center + if (_scale_w < _scale_h) { + dst_box.top = padding_h / 2; + if (dst_box.top % 2 != 0) { + dst_box.top -= dst_box.top % 2; + if (dst_box.top < 0) { + dst_box.top = 0; + } + } + dst_box.bottom = dst_box.top + resize_h - 1; + _top_offset = dst_box.top; + } else { + dst_box.left = padding_w / 2; + if (dst_box.left % 2 != 0) { + dst_box.left -= dst_box.left % 2; + if (dst_box.left < 0) { + dst_box.left = 0; + } + } + dst_box.right = dst_box.left + resize_w - 1; + _left_offset = dst_box.left; + } + printf("scale=%f dst_box=(%d %d %d %d) allow_slight_change=%d _left_offset=%d _top_offset=%d padding_w=%d padding_h=%d\n", + scale, dst_box.left, dst_box.top, dst_box.right, dst_box.bottom, allow_slight_change, + _left_offset, _top_offset, padding_w, padding_h); + + //set offset and scale + if(letterbox != NULL){ + letterbox->scale = scale; + letterbox->x_pad = _left_offset; + letterbox->y_pad = _top_offset; + } + // alloc memory buffer for dst image, + // remember to free + if (dst_image->virt_addr == NULL && dst_image->fd <= 0) { + int dst_size = get_image_size(dst_image); + dst_image->virt_addr = (uint8_t *)malloc(dst_size); + if (dst_image->virt_addr == NULL) { + printf("malloc size %d error\n", dst_size); + return -1; + } + } + ret = convert_image(src_image, dst_image, &src_box, &dst_box, color); + return ret; +} diff --git a/tmp/opi_rtsp/opi5/image_utils.h b/tmp/opi_rtsp/opi5/image_utils.h new file mode 100644 index 0000000..16465bd --- /dev/null +++ b/tmp/opi_rtsp/opi5/image_utils.h @@ -0,0 +1,73 @@ +#ifndef _RKNN_MODEL_ZOO_IMAGE_UTILS_H_ +#define _RKNN_MODEL_ZOO_IMAGE_UTILS_H_ + +#ifdef __cplusplus +extern "C" { +#endif + +#include "common.h" + +/** + * @brief LetterBox + * + */ +typedef struct { + int x_pad; + int y_pad; + float scale; +} letterbox_t; + +/** + * @brief Read image file (support png/jpeg/bmp) + * + * @param path [in] Image path + * @param image [out] Read image + * @return int 0: success; -1: error + */ +int read_image(const char* path, image_buffer_t* image); + +/** + * @brief Write image file (support jpg/png) + * + * @param path [in] Image path + * @param image [in] Image for write (only support IMAGE_FORMAT_RGB888) + * @return int 0: success; -1: error + */ +int write_image(const char* path, const image_buffer_t* image); + +/** + * @brief Convert image for resize and pixel format change + * + * @param src_image [in] Source Image + * @param dst_image [out] Target Image + * @param src_box [in] Crop rectangle on source image + * @param dst_box [in] Crop rectangle on target image + * @param color [in] Pading color if dst_box can not fill target image + * @return int + */ +int convert_image(image_buffer_t* src_image, image_buffer_t* dst_image, image_rect_t* src_box, image_rect_t* dst_box, char color); + +/** + * @brief Convert image with letterbox + * + * @param src_image [in] Source Image + * @param dst_image [out] Target Image + * @param letterbox [out] Letterbox + * @param color [in] Fill color on target image + * @return int + */ +int convert_image_with_letterbox(image_buffer_t* src_image, image_buffer_t* dst_image, letterbox_t* letterbox, char color); + +/** + * @brief Get the image size + * + * @param image [in] Image + * @return int image size + */ +int get_image_size(image_buffer_t* image); + +#ifdef __cplusplus +} // extern "C" +#endif + +#endif // _RKNN_MODEL_ZOO_IMAGE_UTILS_H_ \ No newline at end of file diff --git a/tmp/opi_rtsp/opi5/postprocess.cc b/tmp/opi_rtsp/opi5/postprocess.cc new file mode 100644 index 0000000..729b398 --- /dev/null +++ b/tmp/opi_rtsp/opi5/postprocess.cc @@ -0,0 +1,494 @@ +// Copyright (c) 2021 by Rockchip Electronics Co., Ltd. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#include "yolov8.h" + +#include +#include +#include +#include +#include +#include + +#include +#include +#define LABEL_NALE_TXT_PATH "./model/coco_80_labels_list.txt" + +static char *labels[OBJ_CLASS_NUM]; + +inline static int clamp(float val, int min, int max) { return val > min ? (val < max ? val : max) : min; } + +static char *readLine(FILE *fp, char *buffer, int *len) +{ + int ch; + int i = 0; + size_t buff_len = 0; + + buffer = (char *)malloc(buff_len + 1); + if (!buffer) + return NULL; // Out of memory + + while ((ch = fgetc(fp)) != '\n' && ch != EOF) + { + buff_len++; + void *tmp = realloc(buffer, buff_len + 1); + if (tmp == NULL) + { + free(buffer); + return NULL; // Out of memory + } + buffer = (char *)tmp; + + buffer[i] = (char)ch; + i++; + } + buffer[i] = '\0'; + + *len = buff_len; + + // Detect end + if (ch == EOF && (i == 0 || ferror(fp))) + { + free(buffer); + return NULL; + } + return buffer; +} + +static int readLines(const char *fileName, char *lines[], int max_line) +{ + FILE *file = fopen(fileName, "r"); + char *s; + int i = 0; + int n = 0; + + if (file == NULL) + { + printf("Open %s fail!\n", fileName); + return -1; + } + + while ((s = readLine(file, s, &n)) != NULL) + { + lines[i++] = s; + if (i >= max_line) + break; + } + fclose(file); + return i; +} + +static int loadLabelName(const char *locationFilename, char *label[]) +{ + printf("load lable %s\n", locationFilename); + readLines(locationFilename, label, OBJ_CLASS_NUM); + return 0; +} + +static float CalculateOverlap(float xmin0, float ymin0, float xmax0, float ymax0, float xmin1, float ymin1, float xmax1, + float ymax1) +{ + float w = fmax(0.f, fmin(xmax0, xmax1) - fmax(xmin0, xmin1) + 1.0); + float h = fmax(0.f, fmin(ymax0, ymax1) - fmax(ymin0, ymin1) + 1.0); + float i = w * h; + float u = (xmax0 - xmin0 + 1.0) * (ymax0 - ymin0 + 1.0) + (xmax1 - xmin1 + 1.0) * (ymax1 - ymin1 + 1.0) - i; + return u <= 0.f ? 0.f : (i / u); +} + +static int nms(int validCount, std::vector &outputLocations, std::vector classIds, std::vector &order, + int filterId, float threshold) +{ + for (int i = 0; i < validCount; ++i) + { + if (order[i] == -1 || classIds[i] != filterId) + { + continue; + } + int n = order[i]; + for (int j = i + 1; j < validCount; ++j) + { + int m = order[j]; + if (m == -1 || classIds[i] != filterId) + { + continue; + } + float xmin0 = outputLocations[n * 4 + 0]; + float ymin0 = outputLocations[n * 4 + 1]; + float xmax0 = outputLocations[n * 4 + 0] + outputLocations[n * 4 + 2]; + float ymax0 = outputLocations[n * 4 + 1] + outputLocations[n * 4 + 3]; + + float xmin1 = outputLocations[m * 4 + 0]; + float ymin1 = outputLocations[m * 4 + 1]; + float xmax1 = outputLocations[m * 4 + 0] + outputLocations[m * 4 + 2]; + float ymax1 = outputLocations[m * 4 + 1] + outputLocations[m * 4 + 3]; + + float iou = CalculateOverlap(xmin0, ymin0, xmax0, ymax0, xmin1, ymin1, xmax1, ymax1); + + if (iou > threshold) + { + order[j] = -1; + } + } + } + return 0; +} + +static int quick_sort_indice_inverse(std::vector &input, int left, int right, std::vector &indices) +{ + float key; + int key_index; + int low = left; + int high = right; + if (left < right) + { + key_index = indices[left]; + key = input[left]; + while (low < high) + { + while (low < high && input[high] <= key) + { + high--; + } + input[low] = input[high]; + indices[low] = indices[high]; + while (low < high && input[low] >= key) + { + low++; + } + input[high] = input[low]; + indices[high] = indices[low]; + } + input[low] = key; + indices[low] = key_index; + quick_sort_indice_inverse(input, left, low - 1, indices); + quick_sort_indice_inverse(input, low + 1, right, indices); + } + return low; +} + +static float sigmoid(float x) { return 1.0 / (1.0 + expf(-x)); } + +static float unsigmoid(float y) { return -1.0 * logf((1.0 / y) - 1.0); } + +inline static int32_t __clip(float val, float min, float max) +{ + float f = val <= min ? min : (val >= max ? max : val); + return f; +} + +static int8_t qnt_f32_to_affine(float f32, int32_t zp, float scale) +{ + float dst_val = (f32 / scale) + zp; + int8_t res = (int8_t)__clip(dst_val, -128, 127); + return res; +} + +static float deqnt_affine_to_f32(int8_t qnt, int32_t zp, float scale) { return ((float)qnt - (float)zp) * scale; } + + +void compute_dfl(float* tensor, int dfl_len, float* box){ + for (int b=0; b<4; b++){ + float exp_t[dfl_len]; + float exp_sum=0; + float acc_sum=0; + for (int i=0; i< dfl_len; i++){ + exp_t[i] = exp(tensor[i+b*dfl_len]); + exp_sum += exp_t[i]; + } + + for (int i=0; i< dfl_len; i++){ + acc_sum += exp_t[i]/exp_sum *i; + } + box[b] = acc_sum; + } +} + + +static int process_i8(int8_t *box_tensor, int32_t box_zp, float box_scale, + int8_t *score_tensor, int32_t score_zp, float score_scale, + int8_t *score_sum_tensor, int32_t score_sum_zp, float score_sum_scale, + int grid_h, int grid_w, int stride, int dfl_len, + std::vector &boxes, + std::vector &objProbs, + std::vector &classId, + float threshold) +{ + int validCount = 0; + int grid_len = grid_h * grid_w; + int8_t score_thres_i8 = qnt_f32_to_affine(threshold, score_zp, score_scale); + int8_t score_sum_thres_i8 = qnt_f32_to_affine(threshold, score_sum_zp, score_sum_scale); + + for (int i = 0; i < grid_h; i++) + { + for (int j = 0; j < grid_w; j++) + { + int offset = i* grid_w + j; + int max_class_id = -1; + + // 通过 score sum 起到快速过滤的作用 + if (score_sum_tensor != nullptr){ + if (score_sum_tensor[offset] < score_sum_thres_i8){ + continue; + } + } + + int8_t max_score = -score_zp; + for (int c= 0; c< OBJ_CLASS_NUM; c++){ + if ((score_tensor[offset] > score_thres_i8) && (score_tensor[offset] > max_score)) + { + max_score = score_tensor[offset]; + max_class_id = c; + } + offset += grid_len; + } + + // compute box + if (max_score> score_thres_i8){ + offset = i* grid_w + j; + float box[4]; + float before_dfl[dfl_len*4]; + for (int k=0; k< dfl_len*4; k++){ + before_dfl[k] = deqnt_affine_to_f32(box_tensor[offset], box_zp, box_scale); + offset += grid_len; + } + compute_dfl(before_dfl, dfl_len, box); + + float x1,y1,x2,y2,w,h; + x1 = (-box[0] + j + 0.5)*stride; + y1 = (-box[1] + i + 0.5)*stride; + x2 = (box[2] + j + 0.5)*stride; + y2 = (box[3] + i + 0.5)*stride; + w = x2 - x1; + h = y2 - y1; + boxes.push_back(x1); + boxes.push_back(y1); + boxes.push_back(w); + boxes.push_back(h); + + objProbs.push_back(deqnt_affine_to_f32(max_score, score_zp, score_scale)); + classId.push_back(max_class_id); + validCount ++; + } + } + } + return validCount; +} + +static int process_fp32(float *box_tensor, float *score_tensor, float *score_sum_tensor, + int grid_h, int grid_w, int stride, int dfl_len, + std::vector &boxes, + std::vector &objProbs, + std::vector &classId, + float threshold) +{ + int validCount = 0; + int grid_len = grid_h * grid_w; + for (int i = 0; i < grid_h; i++) + { + for (int j = 0; j < grid_w; j++) + { + int offset = i* grid_w + j; + int max_class_id = -1; + + // 通过 score sum 起到快速过滤的作用 + if (score_sum_tensor != nullptr){ + if (score_sum_tensor[offset] < threshold){ + continue; + } + } + + float max_score = 0; + for (int c= 0; c< OBJ_CLASS_NUM; c++){ + if ((score_tensor[offset] > threshold) && (score_tensor[offset] > max_score)) + { + max_score = score_tensor[offset]; + max_class_id = c; + } + offset += grid_len; + } + + // compute box + if (max_score> threshold){ + offset = i* grid_w + j; + float box[4]; + float before_dfl[dfl_len*4]; + for (int k=0; k< dfl_len*4; k++){ + before_dfl[k] = box_tensor[offset]; + offset += grid_len; + } + compute_dfl(before_dfl, dfl_len, box); + + float x1,y1,x2,y2,w,h; + x1 = (-box[0] + j + 0.5)*stride; + y1 = (-box[1] + i + 0.5)*stride; + x2 = (box[2] + j + 0.5)*stride; + y2 = (box[3] + i + 0.5)*stride; + w = x2 - x1; + h = y2 - y1; + boxes.push_back(x1); + boxes.push_back(y1); + boxes.push_back(w); + boxes.push_back(h); + + objProbs.push_back(max_score); + classId.push_back(max_class_id); + validCount ++; + } + } + } + return validCount; +} + + +int post_process(rknn_app_context_t *app_ctx, rknn_output *outputs, letterbox_t *letter_box, float conf_threshold, float nms_threshold, object_detect_result_list *od_results) +{ + std::vector filterBoxes; + std::vector objProbs; + std::vector classId; + int validCount = 0; + int stride = 0; + int grid_h = 0; + int grid_w = 0; + int model_in_w = app_ctx->model_width; + int model_in_h = app_ctx->model_height; + + memset(od_results, 0, sizeof(object_detect_result_list)); + + // default 3 branch + int dfl_len = app_ctx->output_attrs[0].dims[1] /4; + int output_per_branch = app_ctx->io_num.n_output / 3; + for (int i = 0; i < 3; i++) + { + + void *score_sum = nullptr; + int32_t score_sum_zp = 0; + float score_sum_scale = 1.0; + if (output_per_branch == 3){ + score_sum = outputs[i*output_per_branch + 2].buf; + score_sum_zp = app_ctx->output_attrs[i*output_per_branch + 2].zp; + score_sum_scale = app_ctx->output_attrs[i*output_per_branch + 2].scale; + } + int box_idx = i*output_per_branch; + int score_idx = i*output_per_branch + 1; + + grid_h = app_ctx->output_attrs[box_idx].dims[2]; + grid_w = app_ctx->output_attrs[box_idx].dims[3]; + stride = model_in_h / grid_h; + + if (app_ctx->is_quant) + { + validCount += process_i8((int8_t *)outputs[box_idx].buf, app_ctx->output_attrs[box_idx].zp, app_ctx->output_attrs[box_idx].scale, + (int8_t *)outputs[score_idx].buf, app_ctx->output_attrs[score_idx].zp, app_ctx->output_attrs[score_idx].scale, + (int8_t *)score_sum, score_sum_zp, score_sum_scale, + grid_h, grid_w, stride, dfl_len, + filterBoxes, objProbs, classId, conf_threshold); + } + else + { + validCount += process_fp32((float *)outputs[box_idx].buf, (float *)outputs[score_idx].buf, (float *)score_sum, + grid_h, grid_w, stride, dfl_len, + filterBoxes, objProbs, classId, conf_threshold); + } + + } + + // no object detect + if (validCount <= 0) + { + return 0; + } + std::vector indexArray; + for (int i = 0; i < validCount; ++i) + { + indexArray.push_back(i); + } + quick_sort_indice_inverse(objProbs, 0, validCount - 1, indexArray); + + std::set class_set(std::begin(classId), std::end(classId)); + + for (auto c : class_set) + { + nms(validCount, filterBoxes, classId, indexArray, c, nms_threshold); + } + + int last_count = 0; + od_results->count = 0; + + /* box valid detect target */ + for (int i = 0; i < validCount; ++i) + { + if (indexArray[i] == -1 || last_count >= OBJ_NUMB_MAX_SIZE) + { + continue; + } + int n = indexArray[i]; + + float x1 = filterBoxes[n * 4 + 0] - letter_box->x_pad; + float y1 = filterBoxes[n * 4 + 1] - letter_box->y_pad; + float x2 = x1 + filterBoxes[n * 4 + 2]; + float y2 = y1 + filterBoxes[n * 4 + 3]; + int id = classId[n]; + float obj_conf = objProbs[i]; + + od_results->results[last_count].box.left = (int)(clamp(x1, 0, model_in_w) / letter_box->scale); + od_results->results[last_count].box.top = (int)(clamp(y1, 0, model_in_h) / letter_box->scale); + od_results->results[last_count].box.right = (int)(clamp(x2, 0, model_in_w) / letter_box->scale); + od_results->results[last_count].box.bottom = (int)(clamp(y2, 0, model_in_h) / letter_box->scale); + od_results->results[last_count].prop = obj_conf; + od_results->results[last_count].cls_id = id; + last_count++; + } + od_results->count = last_count; + return 0; +} + +int init_post_process() +{ + int ret = 0; + ret = loadLabelName(LABEL_NALE_TXT_PATH, labels); + if (ret < 0) + { + printf("Load %s failed!\n", LABEL_NALE_TXT_PATH); + return -1; + } + return 0; +} + +char *coco_cls_to_name(int cls_id) +{ + + if (cls_id >= OBJ_CLASS_NUM) + { + return "null"; + } + + if (labels[cls_id]) + { + return labels[cls_id]; + } + + return "null"; +} + +void deinit_post_process() +{ + for (int i = 0; i < OBJ_CLASS_NUM; i++) + { + if (labels[i] != nullptr) + { + free(labels[i]); + labels[i] = nullptr; + } + } +} diff --git a/tmp/opi_rtsp/opi5/postprocess.h b/tmp/opi_rtsp/opi5/postprocess.h new file mode 100644 index 0000000..6d78638 --- /dev/null +++ b/tmp/opi_rtsp/opi5/postprocess.h @@ -0,0 +1,36 @@ +#ifndef _RKNN_YOLOV8_DEMO_POSTPROCESS_H_ +#define _RKNN_YOLOV8_DEMO_POSTPROCESS_H_ + +#include +#include +#include "rknn_api.h" +#include "common.h" +#include "image_utils.h" + +#define OBJ_NAME_MAX_SIZE 64 +#define OBJ_NUMB_MAX_SIZE 128 +#define OBJ_CLASS_NUM 80 +#define NMS_THRESH 0.45 +#define BOX_THRESH 0.25 + +// class rknn_app_context_t; + +typedef struct { + image_rect_t box; + float prop; + int cls_id; +} object_detect_result; + +typedef struct { + int id; + int count; + object_detect_result results[OBJ_NUMB_MAX_SIZE]; +} object_detect_result_list; + +int init_post_process(); +void deinit_post_process(); +char *coco_cls_to_name(int cls_id); +int post_process(rknn_app_context_t *app_ctx, rknn_output *outputs, letterbox_t *letter_box, float conf_threshold, float nms_threshold, object_detect_result_list *od_results); + +void deinitPostProcess(); +#endif //_RKNN_YOLOV8_DEMO_POSTPROCESS_H_ diff --git a/tmp/opi_rtsp/opi5/yolov8.cc b/tmp/opi_rtsp/opi5/yolov8.cc new file mode 100644 index 0000000..f56a9d1 --- /dev/null +++ b/tmp/opi_rtsp/opi5/yolov8.cc @@ -0,0 +1,250 @@ +// Copyright (c) 2023 by Rockchip Electronics Co., Ltd. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#include +#include +#include +#include + +#include "yolov8.h" +#include "common.h" +#include "file_utils.h" +#include "image_utils.h" + +static void dump_tensor_attr(rknn_tensor_attr *attr) +{ + printf(" index=%d, name=%s, n_dims=%d, dims=[%d, %d, %d, %d], n_elems=%d, size=%d, fmt=%s, type=%s, qnt_type=%s, " + "zp=%d, scale=%f\n", + attr->index, attr->name, attr->n_dims, attr->dims[0], attr->dims[1], attr->dims[2], attr->dims[3], + attr->n_elems, attr->size, get_format_string(attr->fmt), get_type_string(attr->type), + get_qnt_type_string(attr->qnt_type), attr->zp, attr->scale); +} + +int init_yolov8_model(const char *model_path, rknn_app_context_t *app_ctx) +{ + int ret; + int model_len = 0; + char *model; + rknn_context ctx = 0; + + // Load RKNN Model + model_len = read_data_from_file(model_path, &model); + if (model == NULL) + { + printf("load_model fail!\n"); + return -1; + } + + ret = rknn_init(&ctx, model, model_len, 0, NULL); + free(model); + if (ret < 0) + { + printf("rknn_init fail! ret=%d\n", ret); + return -1; + } + + // Get Model Input Output Number + rknn_input_output_num io_num; + ret = rknn_query(ctx, RKNN_QUERY_IN_OUT_NUM, &io_num, sizeof(io_num)); + if (ret != RKNN_SUCC) + { + printf("rknn_query fail! ret=%d\n", ret); + return -1; + } + printf("model input num: %d, output num: %d\n", io_num.n_input, io_num.n_output); + + // Get Model Input Info + printf("input tensors:\n"); + rknn_tensor_attr input_attrs[io_num.n_input]; + memset(input_attrs, 0, sizeof(input_attrs)); + for (int i = 0; i < io_num.n_input; i++) + { + input_attrs[i].index = i; + ret = rknn_query(ctx, RKNN_QUERY_INPUT_ATTR, &(input_attrs[i]), sizeof(rknn_tensor_attr)); + if (ret != RKNN_SUCC) + { + printf("rknn_query fail! ret=%d\n", ret); + return -1; + } + dump_tensor_attr(&(input_attrs[i])); + } + + // Get Model Output Info + printf("output tensors:\n"); + rknn_tensor_attr output_attrs[io_num.n_output]; + memset(output_attrs, 0, sizeof(output_attrs)); + for (int i = 0; i < io_num.n_output; i++) + { + output_attrs[i].index = i; + ret = rknn_query(ctx, RKNN_QUERY_OUTPUT_ATTR, &(output_attrs[i]), sizeof(rknn_tensor_attr)); + if (ret != RKNN_SUCC) + { + printf("rknn_query fail! ret=%d\n", ret); + return -1; + } + dump_tensor_attr(&(output_attrs[i])); + } + + // Set to context + app_ctx->rknn_ctx = ctx; + + // TODO + if (output_attrs[0].qnt_type == RKNN_TENSOR_QNT_AFFINE_ASYMMETRIC && output_attrs[0].type == RKNN_TENSOR_INT8) + { + app_ctx->is_quant = true; + } + else + { + app_ctx->is_quant = false; + } + + app_ctx->io_num = io_num; + app_ctx->input_attrs = (rknn_tensor_attr *)malloc(io_num.n_input * sizeof(rknn_tensor_attr)); + memcpy(app_ctx->input_attrs, input_attrs, io_num.n_input * sizeof(rknn_tensor_attr)); + app_ctx->output_attrs = (rknn_tensor_attr *)malloc(io_num.n_output * sizeof(rknn_tensor_attr)); + memcpy(app_ctx->output_attrs, output_attrs, io_num.n_output * sizeof(rknn_tensor_attr)); + + if (input_attrs[0].fmt == RKNN_TENSOR_NCHW) + { + printf("model is NCHW input fmt\n"); + app_ctx->model_channel = input_attrs[0].dims[1]; + app_ctx->model_height = input_attrs[0].dims[2]; + app_ctx->model_width = input_attrs[0].dims[3]; + } + else + { + printf("model is NHWC input fmt\n"); + app_ctx->model_height = input_attrs[0].dims[1]; + app_ctx->model_width = input_attrs[0].dims[2]; + app_ctx->model_channel = input_attrs[0].dims[3]; + } + printf("model input height=%d, width=%d, channel=%d\n", + app_ctx->model_height, app_ctx->model_width, app_ctx->model_channel); + + return 0; +} + +int release_yolov8_model(rknn_app_context_t *app_ctx) +{ + if (app_ctx->rknn_ctx != 0) + { + rknn_destroy(app_ctx->rknn_ctx); + app_ctx->rknn_ctx = 0; + } + if (app_ctx->input_attrs != NULL) + { + free(app_ctx->input_attrs); + app_ctx->input_attrs = NULL; + } + if (app_ctx->output_attrs != NULL) + { + free(app_ctx->output_attrs); + app_ctx->output_attrs = NULL; + } + return 0; +} + +int inference_yolov8_model(rknn_app_context_t *app_ctx, image_buffer_t *img, object_detect_result_list *od_results) +{ + int ret; + image_buffer_t dst_img; + letterbox_t letter_box; + rknn_input inputs[app_ctx->io_num.n_input]; + rknn_output outputs[app_ctx->io_num.n_output]; + const float nms_threshold = NMS_THRESH; // 默认的NMS阈值 + const float box_conf_threshold = BOX_THRESH; // 默认的置信度阈值 + int bg_color = 114; + + if ((!app_ctx) || !(img) || (!od_results)) + { + return -1; + } + + memset(od_results, 0x00, sizeof(*od_results)); + memset(&letter_box, 0, sizeof(letterbox_t)); + memset(&dst_img, 0, sizeof(image_buffer_t)); + memset(inputs, 0, sizeof(inputs)); + memset(outputs, 0, sizeof(outputs)); + + // Pre Process + dst_img.width = app_ctx->model_width; + dst_img.height = app_ctx->model_height; + dst_img.format = IMAGE_FORMAT_RGB888; + dst_img.size = get_image_size(&dst_img); + dst_img.virt_addr = (unsigned char *)malloc(dst_img.size); + if (dst_img.virt_addr == NULL) + { + printf("malloc buffer size:%d fail!\n", dst_img.size); + return -1; + } + + // letterbox + ret = convert_image_with_letterbox(img, &dst_img, &letter_box, bg_color); + if (ret < 0) + { + printf("convert_image_with_letterbox fail! ret=%d\n", ret); + return -1; + } + + // Set Input Data + inputs[0].index = 0; + inputs[0].type = RKNN_TENSOR_UINT8; + inputs[0].fmt = RKNN_TENSOR_NHWC; + inputs[0].size = app_ctx->model_width * app_ctx->model_height * app_ctx->model_channel; + inputs[0].buf = dst_img.virt_addr; + + ret = rknn_inputs_set(app_ctx->rknn_ctx, app_ctx->io_num.n_input, inputs); + if (ret < 0) + { + printf("rknn_input_set fail! ret=%d\n", ret); + return -1; + } + + // Run + printf("rknn_run\n"); + ret = rknn_run(app_ctx->rknn_ctx, nullptr); + if (ret < 0) + { + printf("rknn_run fail! ret=%d\n", ret); + return -1; + } + + // Get Output + memset(outputs, 0, sizeof(outputs)); + for (int i = 0; i < app_ctx->io_num.n_output; i++) + { + outputs[i].index = i; + outputs[i].want_float = (!app_ctx->is_quant); + } + ret = rknn_outputs_get(app_ctx->rknn_ctx, app_ctx->io_num.n_output, outputs, NULL); + if (ret < 0) + { + printf("rknn_outputs_get fail! ret=%d\n", ret); + goto out; + } + + // Post Process + post_process(app_ctx, outputs, &letter_box, box_conf_threshold, nms_threshold, od_results); + + // Remeber to release rknn output + rknn_outputs_release(app_ctx->rknn_ctx, app_ctx->io_num.n_output, outputs); + +out: + if (dst_img.virt_addr != NULL) + { + free(dst_img.virt_addr); + } + + return ret; +} \ No newline at end of file diff --git a/tmp/opi_rtsp/opi5/yolov8.h b/tmp/opi_rtsp/opi5/yolov8.h new file mode 100644 index 0000000..d264d1b --- /dev/null +++ b/tmp/opi_rtsp/opi5/yolov8.h @@ -0,0 +1,42 @@ +// Copyright (c) 2023 by Rockchip Electronics Co., Ltd. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + + +#ifndef _RKNN_DEMO_YOLOV8_H_ +#define _RKNN_DEMO_YOLOV8_H_ + +#include "rknn_api.h" +#include "common.h" + +typedef struct { + rknn_context rknn_ctx; + rknn_input_output_num io_num; + rknn_tensor_attr* input_attrs; + rknn_tensor_attr* output_attrs; + int model_channel; + int model_width; + int model_height; + bool is_quant; +} rknn_app_context_t; + +#include "postprocess.h" + + +int init_yolov8_model(const char* model_path, rknn_app_context_t* app_ctx); + +int release_yolov8_model(rknn_app_context_t* app_ctx); + +int inference_yolov8_model(rknn_app_context_t* app_ctx, image_buffer_t* img, object_detect_result_list* od_results); + +#endif //_RKNN_DEMO_YOLOV8_H_ \ No newline at end of file diff --git a/tmp/opi_rtsp/opi_rtsp.pro b/tmp/opi_rtsp/opi_rtsp.pro new file mode 100644 index 0000000..4bb2a88 --- /dev/null +++ b/tmp/opi_rtsp/opi_rtsp.pro @@ -0,0 +1,41 @@ +QT += core +CONFIG += c++11 link_pkgconfig concurrent +PKGCONFIG += opencv4 + +SOURCES += main.cpp \ + aiengine.cpp \ + aiengineinference.cpp \ + aiengineinferenceonnx.cpp \ + aienginertsplistener.cpp + +opi5 { + message("OPI5 build") + PKGCONFIG += opencv4 librga stb libturbojpeg + INCLUDEPATH += /usr/include/rga # not correct in pkg-config file + QMAKE_CXXFLAGS += -DOPI5_BUILD + LIBS += /usr/local/lib/librknnrt.so + OBJECTS_DIR = objs-opi5 + SOURCES += \ + ./opi5/image_drawing.c \ + ./opi5/file_utils.c \ + ./opi5/postprocess.cc \ + ./opi5/image_utils.c \ + ./opi5/yolov8.cc +} +else { + message("PC build") + message("You must use YOLOv10 ONNX files") + SOURCES += pc/inference.cpp + QMAKE_CXXFLAGS += -DPC_BUILD + INCLUDEPATH += /opt/onnxruntime-linux-x64-1.18.0/include + LIBS += /opt/onnxruntime-linux-x64-1.18.0/lib/libonnxruntime.so.1.18.0 + OBJECTS_DIR = objs-pc + QMAKE_LFLAGS += -Wl,-rpath,/opt/onnxruntime-linux-x64-1.18.0/lib +} + +HEADERS += \ + aiengine.h \ + aiengineinference.h \ + aiengineinferenceonnx.h \ + aienginertsplistener.h \ + config.h diff --git a/tmp/opi_rtsp/pc/inference.cpp b/tmp/opi_rtsp/pc/inference.cpp new file mode 100644 index 0000000..38cd77c --- /dev/null +++ b/tmp/opi_rtsp/pc/inference.cpp @@ -0,0 +1,200 @@ +#include "inference.h" +#include +#include + +const std::vector InferenceEngine::CLASS_NAMES = { + "person", "bicycle", "car", "motorcycle", "airplane", "bus", "train", "truck", "boat", "traffic light", + "fire hydrant", "stop sign", "parking meter", "bench", "bird", "cat", "dog", "horse", "sheep", "cow", + "elephant", "bear", "zebra", "giraffe", "backpack", "umbrella", "handbag", "tie", "suitcase", "frisbee", + "skis", "snowboard", "sports ball", "kite", "baseball bat", "baseball glove", "skateboard", "surfboard", + "tennis racket", "bottle", "wine glass", "cup", "fork", "knife", "spoon", "bowl", "banana", "apple", + "sandwich", "orange", "broccoli", "carrot", "hot dog", "pizza", "donut", "cake", "chair", "couch", + "potted plant", "bed", "dining table", "toilet", "tv", "laptop", "mouse", "remote", "keyboard", + "cell phone", "microwave", "oven", "toaster", "sink", "refrigerator", "book", "clock", "vase", + "scissors", "teddy bear", "hair drier", "toothbrush"}; + +InferenceEngine::InferenceEngine(const std::string &model_path) + : env(ORT_LOGGING_LEVEL_WARNING, "ONNXRuntime"), + session_options(), + session(env, model_path.c_str(), session_options), + input_shape{1, 3, 640, 640} +{ + session_options.SetIntraOpNumThreads(1); + session_options.SetGraphOptimizationLevel(GraphOptimizationLevel::ORT_ENABLE_BASIC); +} + +InferenceEngine::~InferenceEngine() {} + +/* + * Function to preprocess the image + * + * @param image_path: path to the image + * @param orig_width: original width of the image + * @param orig_height: original height of the image + * + * @return: vector of floats representing the preprocessed image + */ +std::vector InferenceEngine::preprocessImage(const cv::Mat &image) +{ + if (image.empty()) + { + throw std::runtime_error("Could not read the image"); + } + + cv::Mat resized_image; + cv::resize(image, resized_image, cv::Size(input_shape[2], input_shape[3])); + + resized_image.convertTo(resized_image, CV_32F, 1.0 / 255); + + std::vector channels(3); + cv::split(resized_image, channels); + + std::vector input_tensor_values; + for (int c = 0; c < 3; ++c) + { + input_tensor_values.insert(input_tensor_values.end(), (float *)channels[c].data, (float *)channels[c].data + input_shape[2] * input_shape[3]); + } + + return input_tensor_values; +} + +/* + * Function to filter the detections based on the confidence threshold + * + * @param results: vector of floats representing the output tensor + * @param confidence_threshold: minimum confidence threshold + * @param img_width: width of the input image + * @param img_height: height of the input image + * @param orig_width: original width of the image + * @param orig_height: original height of the image + * + * @return: vector of Detection objects + +*/ +std::vector InferenceEngine::filterDetections(const std::vector &results, float confidence_threshold, int img_width, int img_height, int orig_width, int orig_height) +{ + std::vector detections; + const int num_detections = results.size() / 6; + + for (int i = 0; i < num_detections; ++i) + { + float left = results[i * 6 + 0]; + float top = results[i * 6 + 1]; + float right = results[i * 6 + 2]; + float bottom = results[i * 6 + 3]; + float confidence = results[i * 6 + 4]; + int class_id = results[i * 6 + 5]; + + if (confidence >= confidence_threshold) + { + int x = static_cast(left * orig_width / img_width); + int y = static_cast(top * orig_height / img_height); + int width = static_cast((right - left) * orig_width / img_width); + int height = static_cast((bottom - top) * orig_height / img_height); + + detections.push_back( + {confidence, + cv::Rect(x, y, width, height), + class_id, + CLASS_NAMES[class_id]}); + } + } + + return detections; +} + + +/* + * Function to run inference + * + * @param input_tensor_values: vector of floats representing the input tensor + * + * @return: vector of floats representing the output tensor +*/ +std::vector InferenceEngine::runInference(const std::vector &input_tensor_values) +{ + Ort::AllocatorWithDefaultOptions allocator; + + std::string input_name = getInputName(); + std::string output_name = getOutputName(); + + const char *input_name_ptr = input_name.c_str(); + const char *output_name_ptr = output_name.c_str(); + + Ort::MemoryInfo memory_info = Ort::MemoryInfo::CreateCpu(OrtArenaAllocator, OrtMemTypeDefault); + Ort::Value input_tensor = Ort::Value::CreateTensor(memory_info, const_cast(input_tensor_values.data()), input_tensor_values.size(), input_shape.data(), input_shape.size()); + + auto output_tensors = session.Run(Ort::RunOptions{nullptr}, &input_name_ptr, &input_tensor, 1, &output_name_ptr, 1); + + float *floatarr = output_tensors[0].GetTensorMutableData(); + size_t output_tensor_size = output_tensors[0].GetTensorTypeAndShapeInfo().GetElementCount(); + + return std::vector(floatarr, floatarr + output_tensor_size); +} + +/* + * Function to draw the labels on the image + * + * @param image: input image + * @param detections: vector of Detection objects + * + * @return: image with labels drawn + +*/ +cv::Mat InferenceEngine::draw_labels(const cv::Mat &image, const std::vector &detections) +{ + cv::Mat result = image.clone(); + + for (const auto &detection : detections) + { + cv::rectangle(result, detection.bbox, cv::Scalar(0, 255, 0), 2); + std::string label = detection.class_name + ": " + std::to_string(detection.confidence); + + int baseLine; + cv::Size labelSize = cv::getTextSize(label, cv::FONT_HERSHEY_SIMPLEX, 0.5, 1, &baseLine); + + cv::rectangle( + result, + cv::Point(detection.bbox.x, detection.bbox.y - labelSize.height), + cv::Point(detection.bbox.x + labelSize.width, detection.bbox.y + baseLine), + cv::Scalar(255, 255, 255), + cv::FILLED); + + cv::putText( + result, + label, + cv::Point( + detection.bbox.x, + detection.bbox.y), + cv::FONT_HERSHEY_SIMPLEX, + 0.5, + cv::Scalar(0, 0, 0), + 1); + } + + return result; +} + +/* + * Function to get the input name + * + * @return: name of the input tensor +*/ +std::string InferenceEngine::getInputName() +{ + Ort::AllocatorWithDefaultOptions allocator; + Ort::AllocatedStringPtr name_allocator = session.GetInputNameAllocated(0, allocator); + return std::string(name_allocator.get()); +} + +/* + * Function to get the output name + * + * @return: name of the output tensor +*/ +std::string InferenceEngine::getOutputName() +{ + Ort::AllocatorWithDefaultOptions allocator; + Ort::AllocatedStringPtr name_allocator = session.GetOutputNameAllocated(0, allocator); + return std::string(name_allocator.get()); +} diff --git a/tmp/opi_rtsp/pc/inference.h b/tmp/opi_rtsp/pc/inference.h new file mode 100644 index 0000000..9828629 --- /dev/null +++ b/tmp/opi_rtsp/pc/inference.h @@ -0,0 +1,44 @@ +#ifndef INFERENCE_H +#define INFERENCE_H + +#include +#include +#include +#include + +struct Detection +{ + float confidence; + cv::Rect bbox; + int class_id; + std::string class_name; +}; + + +class InferenceEngine +{ +public: + InferenceEngine(const std::string &model_path); + ~InferenceEngine(); + + std::vector preprocessImage(const cv::Mat &image); + std::vector filterDetections(const std::vector &results, float confidence_threshold, int img_width, int img_height, int orig_width, int orig_height); + std::vector runInference(const std::vector &input_tensor_values); + + cv::Mat draw_labels(const cv::Mat &image, const std::vector &detections); + + std::vector input_shape; + +private: + Ort::Env env; + Ort::SessionOptions session_options; + Ort::Session session; + + std::string getInputName(); + std::string getOutputName(); + + static const std::vector CLASS_NAMES; +}; + + +#endif // INFERENCE_H