Graphical demo for the LPC4088 Experiment Base Board with one of the Display Expansion Kits. This program decodes decodes and shows two png images.
Revision 0:b567d56a59d7, committed 2014-10-03
- Comitter:
- embeddedartists
- Date:
- Fri Oct 03 13:30:09 2014 +0000
- Commit message:
- First version
Changed in this revision
diff -r 000000000000 -r b567d56a59d7 AR1021I2C.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/AR1021I2C.cpp Fri Oct 03 13:30:09 2014 +0000 @@ -0,0 +1,560 @@ +/* + * Copyright 2013 Embedded Artists AB + * + * 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. + */ + +/****************************************************************************** + * Includes + *****************************************************************************/ + +#include "mbed.h" +#include "mbed_debug.h" + +#include "AR1021I2C.h" + +/****************************************************************************** + * Defines and typedefs + *****************************************************************************/ + +#define AR1021_REG_TOUCH_THRESHOLD (0x02) +#define AR1021_REG_SENS_FILTER (0x03) +#define AR1021_REG_SAMPLING_FAST (0x04) +#define AR1021_REG_SAMPLING_SLOW (0x05) +#define AR1021_REG_ACC_FILTER_FAST (0x06) +#define AR1021_REG_ACC_FILTER_SLOW (0x07) +#define AR1021_REG_SPEED_THRESHOLD (0x08) +#define AR1021_REG_SLEEP_DELAY (0x0A) +#define AR1021_REG_PEN_UP_DELAY (0x0B) +#define AR1021_REG_TOUCH_MODE (0x0C) +#define AR1021_REG_TOUCH_OPTIONS (0x0D) +#define AR1021_REG_CALIB_INSETS (0x0E) +#define AR1021_REG_PEN_STATE_REPORT_DELAY (0x0F) +#define AR1021_REG_TOUCH_REPORT_DELAY (0x11) + + +#define AR1021_CMD_GET_VERSION (0x10) +#define AR1021_CMD_ENABLE_TOUCH (0x12) +#define AR1021_CMD_DISABLE_TOUCH (0x13) +#define AR1021_CMD_CALIBRATE_MODE (0x14) +#define AR1021_CMD_REGISTER_READ (0x20) +#define AR1021_CMD_REGISTER_WRITE (0x21) +#define AR1021_CMD_REGISTER_START_ADDR_REQUEST (0x22) +#define AR1021_CMD_REGISTER_WRITE_TO_EEPROM (0x23) +#define AR1021_CMD_EEPROM_READ (0x28) +#define AR1021_CMD_EEPROM_WRITE (0x29) +#define AR1021_CMD_EEPROM_WRITE_TO_REGISTERS (0x2B) + +#define AR1021_RESP_STAT_OK (0x00) +#define AR1021_RESP_STAT_CMD_UNREC (0x01) +#define AR1021_RESP_STAT_HDR_UNREC (0x03) +#define AR1021_RESP_STAT_TIMEOUT (0x04) +#define AR1021_RESP_STAT_CANCEL_CALIB (0xFC) + + +#define AR1021_ERR_NO_HDR (-1000) +#define AR1021_ERR_INV_LEN (-1001) +#define AR1021_ERR_INV_RESP (-1002) +#define AR1021_ERR_INV_RESPLEN (-1003) +#define AR1021_ERR_TIMEOUT (-1004) + +// bit 7 is always 1 and bit 0 defines pen up or down +#define AR1021_PEN_MASK (0x81) + +#define AR1021_NUM_CALIB_POINTS (4) + +#define AR1021_ADDR (0x4D << 1) + +#define AR1021_TIMEOUT 1000 //how many ms to wait for responce +#define AR1021_RETRY 5 //how many times to retry sending command + +#define AR1021_MIN(__a, __b) (((__a)<(__b))?(__a):(__b)) + + +AR1021I2C::AR1021I2C(PinName sda, PinName scl, PinName siq) : +_i2c(sda, scl), _siq(siq), _siqIrq(siq) +{ + _i2c.frequency(200000); + + // default calibration inset is 25 -> (25/2 = 12.5%) + _inset = 25; + + // make sure _calibPoint has an invalid value to begin with + // correct value is set in calibrateStart() + _calibPoint = AR1021_NUM_CALIB_POINTS+1; + + _x = 0; + _y = 0; + _pen = 0; + + _initialized = false; +} + + +bool AR1021I2C::read(touchCoordinate_t &coord) { + + if (!_initialized) return false; + + coord.x = _x * _width/4095; + coord.y = _y * _height/4095; + coord.z = _pen; + + return true; +} + + +bool AR1021I2C::init(uint16_t width, uint16_t height) { + int result = 0; + bool ok = false; + int attempts = 0; + + _width = width; + _height = height; + + while (1) { + + do { + // disable touch + result = cmd(AR1021_CMD_DISABLE_TOUCH, NULL, 0, NULL, 0); + if (result != 0) { + debug("disable touch failed (%d)\n", result); + break; + } + + char regOffset = 0; + int regOffLen = 1; + result = cmd(AR1021_CMD_REGISTER_START_ADDR_REQUEST, NULL, 0, + ®Offset, ®OffLen); + if (result != 0) { + debug("register offset request failed (%d)\n", result); + break; + } + + // enable calibrated coordinates + // high, low address, len, value + char toptions[4] = {0x00, AR1021_REG_TOUCH_OPTIONS+regOffset, 0x01, 0x01}; + result = cmd(AR1021_CMD_REGISTER_WRITE, toptions, 4, NULL, 0); + if (result != 0) { + debug("register write request failed (%d)\n", result); + break; + } + + // save registers to eeprom + result = cmd(AR1021_CMD_REGISTER_WRITE_TO_EEPROM, NULL, 0, NULL, 0); + if (result != 0) { + debug("register write to eeprom failed (%d)\n", result); + break; + } + + // enable touch + result = cmd(AR1021_CMD_ENABLE_TOUCH, NULL, 0, NULL, 0); + if (result != 0) { + debug("enable touch failed (%d)\n", result); + break; + } + + _siqIrq.rise(this, &AR1021I2C::readTouchIrq); + + _initialized = true; + ok = true; + + } while(0); + + if (ok) break; + + // try to run the initialize sequence at most 2 times + if(++attempts >= 2) break; + } + + + return ok; +} + +bool AR1021I2C::calibrateStart() { + bool ok = false; + int result = 0; + int attempts = 0; + + if (!_initialized) return false; + + _siqIrq.rise(NULL); + + while(1) { + + do { + // disable touch + result = cmd(AR1021_CMD_DISABLE_TOUCH, NULL, 0, NULL, 0); + if (result != 0) { + debug("disable touch failed (%d)\n", result); + break; + } + + char regOffset = 0; + int regOffLen = 1; + result = cmd(AR1021_CMD_REGISTER_START_ADDR_REQUEST, NULL, 0, + ®Offset, ®OffLen); + if (result != 0) { + debug("register offset request failed (%d)\n", result); + break; + } + + // set insets + // enable calibrated coordinates + // high, low address, len, value + char insets[4] = {0x00, AR1021_REG_CALIB_INSETS+regOffset, 0x01, _inset}; + result = cmd(AR1021_CMD_REGISTER_WRITE, insets, 4, NULL, 0); + if (result != 0) { + debug("register write request failed (%d)\n", result); + break; + } + + // calibration mode + char calibType = 4; + result = cmd(AR1021_CMD_CALIBRATE_MODE, &calibType, 1, NULL, 0, false); + if (result != 0) { + debug("calibration mode failed (%d)\n", result); + break; + } + + _calibPoint = 0; + ok = true; + + } while(0); + + if (ok) break; + + // try to run the calibrate mode sequence at most 2 times + if (++attempts >= 2) break; + } + + return ok; +} + +bool AR1021I2C::getNextCalibratePoint(uint16_t* x, uint16_t* y) { + + if (!_initialized) return false; + if (x == NULL || y == NULL) return false; + + int xInset = (_width * _inset / 100) / 2; + int yInset = (_height * _inset / 100) / 2; + + switch(_calibPoint) { + case 0: + *x = xInset; + *y = yInset; + break; + case 1: + *x = _width - xInset; + *y = yInset; + break; + case 2: + *x = _width - xInset; + *y = _height - yInset; + break; + case 3: + *x = xInset; + *y = _height - yInset; + break; + default: + return false; + } + + return true; +} + +bool AR1021I2C::waitForCalibratePoint(bool* morePoints, uint32_t timeout) { + int result = 0; + bool ret = false; + + if (!_initialized) return false; + + do { + if (morePoints == NULL || _calibPoint >= AR1021_NUM_CALIB_POINTS) { + break; + } + + // wait for response + result = waitForCalibResponse(timeout); + if (result != 0) { + debug("wait for calibration response failed (%d)\n", result); + break; + } + + _calibPoint++; + *morePoints = (_calibPoint < AR1021_NUM_CALIB_POINTS); + + + // no more points -> enable touch + if (!(*morePoints)) { + + // wait for calibration data to be written to eeprom + // before enabling touch + result = waitForCalibResponse(timeout); + if (result != 0) { + debug("wait for calibration response failed (%d)\n", result); + break; + } + + + // clear chip-select since calibration is done; +// _cs = 1; + + result = cmd(AR1021_CMD_ENABLE_TOUCH, NULL, 0, NULL, 0); + if (result != 0) { + debug("enable touch failed (%d)\n", result); + break; + } + + _siqIrq.rise(this, &AR1021I2C::readTouchIrq); + } + + ret = true; + + } while (0); + + + + if (!ret) { + // make sure to set chip-select off in case of an error +// _cs = 1; + // calibration must restart if an error occurred + _calibPoint = AR1021_NUM_CALIB_POINTS+1; + } + + + + return ret; +} + +int AR1021I2C::cmd(char cmd, char* data, int len, char* respBuf, int* respLen, + bool setCsOff) { + + int ret = 0; + int readLen = (respLen == NULL) ? 0 : *respLen; + for (int attempt = 1; attempt <= AR1021_RETRY; attempt++) { + if (attempt > 1) { + wait_ms(50); + } + + // command request + // --------------- + // 0x00 0x55 len cmd data + // 0x00 = protocol command byte + // 0x55 = header + // len = data length + cmd (1) + // data = data to send + + _i2c.start(); + _i2c.write(AR1021_ADDR); //send write address + _i2c.write(0x00); + _i2c.write(0x55); //header + _i2c.write(len+1); //message length + _i2c.write(cmd); + for (int i = 0; i < len; i++) { + _i2c.write(data[i]); + } + wait_us(60); + _i2c.stop(); + + // wait for response (siq goes high when response is available) + Timer t; + t.start(); + while(_siq.read() != 1 && t.read_ms() < AR1021_TIMEOUT); + + if (t.read_ms() < AR1021_TIMEOUT) { + + // command response + // --------------- + // 0x55 len status cmd data + // 0x55 = header + // len = number of bytes following the len byte (i.e. including the status&cmd) + // status = status + // cmd = command ID + // data = data to receive + _i2c.start(); + _i2c.write(AR1021_ADDR + 1); //send read address + char header = _i2c.read(1); //header should always be 0x55 + if (header != 0x55) { + ret = AR1021_ERR_NO_HDR; + continue; + } + char length = _i2c.read(1); //data length + if (length < 2) { + ret = AR1021_ERR_INV_LEN; //must have at least status and command bytes + continue; + } + length -= 2; + if (length > readLen) { + ret = AR1021_ERR_INV_LEN; //supplied buffer is not enough + continue; + } + + char status = _i2c.read(1); //command status + char usedCmd; + if (readLen <= 0) { + usedCmd = _i2c.read(0); //no data => read command byte + NACK + } else { + usedCmd = _i2c.read(1); //which command + + //we need to send a NACK on the last read. + int i; + for (i = 0; i < (length-1); i++) { + respBuf[i] = _i2c.read(1); + } + respBuf[i] = _i2c.read(0); //last returned data byte + NACK + } + _i2c.stop(); + + + if (status != AR1021_RESP_STAT_OK) { + ret = -status; + continue; + } + if (usedCmd != cmd) { + ret = AR1021_ERR_INV_RESP; + continue; + } + + // success + ret = 0; + break; + + } else { + ret = AR1021_ERR_TIMEOUT; + continue; + } + } + + return ret; +} + +int AR1021I2C::waitForCalibResponse(uint32_t timeout) { + Timer t; + int ret = 0; + + t.start(); + + // wait for siq + while (_siq.read() != 1 && + (timeout == 0 || (uint32_t)t.read_ms() < (int)timeout)); + + + do { + + if (timeout > 0 && (uint32_t)t.read_ms() >= timeout) { + ret = AR1021_ERR_TIMEOUT; + break; + } + + // command response + // --------------- + // 0x55 len status cmd data + // 0x55 = header + // len = number of bytes following the len byte (should be 2) + // status = status + // cmd = command ID + _i2c.start(); + _i2c.write(AR1021_ADDR + 1); //send read address + char header = _i2c.read(1); //header should always be 0x55 + char length = _i2c.read(1); //data length + + if (header != 0x55) { + ret = AR1021_ERR_NO_HDR; + break; + } + if (length < 2) { + ret = AR1021_ERR_INV_LEN; + break; + } + char status = _i2c.read(1); //status + char cmd = _i2c.read(0); //command, should be NACK'ed + _i2c.stop(); + if (status != AR1021_RESP_STAT_OK) { + ret = -status; + break; + } + if (cmd != AR1021_CMD_CALIBRATE_MODE) { + ret = AR1021_ERR_INV_RESP; + break; + } + + // success + ret = 0; + + } while (0); + + return ret; +} + + +void AR1021I2C::readTouchIrq() { + while(_siq.read() == 1) { + + // touch coordinates are sent in a 5-byte data packet + _i2c.start(); + _i2c.write(AR1021_ADDR + 1); //send read address + int pen = _i2c.read(1); + int xlo = _i2c.read(1); + int xhi = _i2c.read(1); + int ylo = _i2c.read(1); + int yhi = _i2c.read(0); + _i2c.stop(); + + // pen down + if ((pen&AR1021_PEN_MASK) == (1<<7|1<<0)) { + _pen = 1; + } + // pen up + else if ((pen&AR1021_PEN_MASK) == (1<<7)){ + _pen = 0; + } + // invalid value + else { + continue; + } + + _x = ((xhi<<7)|xlo); + _y = ((yhi<<7)|ylo); + } +} + +bool AR1021I2C::info(int* verHigh, int* verLow, int* resBits, int* type) +{ + char buff[3] = {0,0,0}; + int read = 3; + int res = cmd(AR1021_CMD_GET_VERSION, NULL, 0, buff, &read); + if (res == 0) { + *verHigh = buff[0]; + *verLow = buff[1]; + switch(buff[2] & 3) { + case 0: + *resBits = 8; + break; + case 1: + *resBits = 10; + break; + case 2: + *resBits = 12; + break; + case 3: + *resBits = 12; + break; + default: + res = 25; + printf("Invalid resolution %d\n", buff[2]&3); + break; + } + *type = buff[2]>>2; + } + return (res == 0); +}
diff -r 000000000000 -r b567d56a59d7 AR1021I2C.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/AR1021I2C.h Fri Oct 03 13:30:09 2014 +0000 @@ -0,0 +1,77 @@ +/* + * Copyright 2013 Embedded Artists AB + * + * 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 AR1021I2C_H +#define AR1021I2C_H + +#include "TouchPanel.h" + +/** + * Microchip Touch Screen Controller (AR1021). + * + * Please note that this touch panel has an on-board storage for + * calibration data. Once a successful calibration has been performed + * it is not needed to do additional calibrations since the stored + * calibration data will be used. + */ +class AR1021I2C : public TouchPanel { +public: + + + /** + * Constructor + * + * @param mosi I2C SDA pin + * @param miso I2C SCL pin + * @param siq interrupt pin + */ + AR1021I2C(PinName sda, PinName scl, PinName siq); + + bool info(int* verHigh, int* verLow, int* resBits, int* type); + + virtual bool init(uint16_t width, uint16_t height); + virtual bool read(touchCoordinate_t &coord); + virtual bool calibrateStart(); + virtual bool getNextCalibratePoint(uint16_t* x, uint16_t* y); + virtual bool waitForCalibratePoint(bool* morePoints, uint32_t timeout); + +private: + + + I2C _i2c; + DigitalIn _siq; + InterruptIn _siqIrq; + bool _initialized; + + + int32_t _x; + int32_t _y; + int32_t _pen; + + uint16_t _width; + uint16_t _height; + uint8_t _inset; + + int _calibPoint; + + + int cmd(char cmd, char* data, int len, char* respBuf, int* respLen, bool setCsOff=true); + int waitForCalibResponse(uint32_t timeout); + void readTouchIrq(); +}; + +#endif +
diff -r 000000000000 -r b567d56a59d7 EALib.lib --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/EALib.lib Fri Oct 03 13:30:09 2014 +0000 @@ -0,0 +1,1 @@ +https://mbed.org/users/embeddedartists/code/EALib/#b3a179cc3d88
diff -r 000000000000 -r b567d56a59d7 EaLcdBoardGPIO.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/EaLcdBoardGPIO.cpp Fri Oct 03 13:30:09 2014 +0000 @@ -0,0 +1,96 @@ +/* + * Copyright 2013 Embedded Artists AB + * + * 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. + */ + +/****************************************************************************** + * Includes + *****************************************************************************/ + +#include "mbed.h" +#include "EaLcdBoardGPIO.h" + +/****************************************************************************** + * Defines and typedefs + *****************************************************************************/ + + +EaLcdBoardGPIO::EaLcdBoardGPIO(PinName sda, PinName scl) + : EaLcdBoard(sda, scl), /*pinWP(P4_15),*/ pin3v3(P2_0), pin5v(P2_21), pinDE(P2_11), pinContrast(P2_1) +{ + pinContrast.period_ms(10); + setWriteProtect(true); + set3V3Signal(false); + set5VSignal(false); + setDisplayEnableSignal(false); + setBacklightContrast(0); +} + + +void EaLcdBoardGPIO::setWriteProtect(bool enable) +{ + // Not Applicable +} + +void EaLcdBoardGPIO::set3V3Signal(bool enabled) { //P2.0 L=3.3V on + if (enabled) { + pin3v3 = 0; + } else { + pin3v3 = 1; + } +} + +void EaLcdBoardGPIO::set5VSignal(bool enabled) { //P2.21 H=5V on + if (enabled) { + pin5v = 1; + } else { + pin5v = 0; + } +} + +void EaLcdBoardGPIO::setDisplayEnableSignal(bool enabled) { //P2.11 H=enabled + LPC_IOCON->P2_11 &= ~7; /* GPIO2[11] @ P2.11 */ + if (enabled) { + pinDE = 1; + } else { + pinDE = 0; + } +} + +void EaLcdBoardGPIO::setBacklightContrast(uint32_t value) { //P2.1, set to 4.30 for now +#if 0 + LPC_IOCON->P2_1 &= ~7; /* GPIO2[1] @ P2.1 */ + if (value > 50) { + pinContrast = 1; + } else { + pinContrast = 0; + } +#else + uint32_t tmp = LPC_IOCON->P2_1; + tmp &= ~7; + tmp |= 1; + LPC_IOCON->P2_1 = tmp; /* PWM2[1] @ P2.1 */ + float f = value; + pinContrast = f/100.0f; +#endif + +// if (value > 100) return; + +// pca9532_setBlink0Duty(100-value); +// pca9532_setBlink0Period(0); +// pca9532_setBlink0Leds(LCDB_CTRL_BL_C); +} + + +
diff -r 000000000000 -r b567d56a59d7 EaLcdBoardGPIO.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/EaLcdBoardGPIO.h Fri Oct 03 13:30:09 2014 +0000 @@ -0,0 +1,50 @@ +/* + * Copyright 2013 Embedded Artists AB + * + * 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 EALCDBOARDGPIO_H +#define EALCDBOARDGPIO_H + +#include "EaLcdBoard.h" + +/** An interface to Embedded Artists LCD Boards + * + */ +class EaLcdBoardGPIO : public EaLcdBoard { +public: + + EaLcdBoardGPIO(PinName sda, PinName scl); + + void setBC(uint32_t val) { setBacklightContrast(val); }; + +protected: + virtual void setWriteProtect(bool enable); + virtual void set3V3Signal(bool enabled); + virtual void set5VSignal(bool enabled); + virtual void setDisplayEnableSignal(bool enabled); + virtual void setBacklightContrast(uint32_t value); + +private: + //DigitalOut pinWP; + DigitalOut pin3v3; + DigitalOut pin5v; + DigitalOut pinDE; + //DigitalOut pinContrast; + PwmOut pinContrast; +}; + +#endif + +
diff -r 000000000000 -r b567d56a59d7 Graphics.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Graphics.cpp Fri Oct 03 13:30:09 2014 +0000 @@ -0,0 +1,241 @@ + +#include "mbed.h" +#include "Graphics.h" + + +Graphics::Graphics(uint16_t *pFrmBuf, uint16_t dispWidth, uint16_t dispHeight) +{ + this->windowX = dispWidth; + this->windowY = dispHeight; + this->pFrmBuf = pFrmBuf; +} + +void Graphics::setFrameBuffer( uint16_t *pFrmBuf ) +{ + this->pFrmBuf = pFrmBuf; +} + +int32_t Graphics::abs(int32_t v1) const +{ + if (v1 > 0) + return v1; + + return -v1; +} + +/*********************************************************************** + * + * Function: swim_put_line_raw + * + * Purpose: Draw a line on the physical display + * + * Processing: + * See function. + * + * Parameters: + * win : Window identifier + * x1 : Physical X position of X line start + * y1 : Physical Y position of Y line start + * x2 : Physical X position of X line end + * y2 : Physical Y position of Y line end + * + * Outputs: None + * + * Returns: Nothing + * + * Notes: None + * + **********************************************************************/ +void Graphics::put_line(int32_t x1, int32_t y1, int32_t x2, int32_t y2, int16_t color) +{ + int32_t e2, sx, sy, dx, dy, err; + + /* calculate delta_x and delta_y */ + dx = abs(x2 - x1); + dy = abs(y2 - y1); + + /* set the direction for the step for both x and y, and + initialize the error */ + if (x1 < x2) + sx = 1; + else + sx = -1; + + if (y1 < y2) + sy = 1; + else + sy = -1; + + err = dx - dy; + + while (1) + { + if ((x1 >= 0) && (x1 < this->windowX) && + (y1 >= 0) && (y1 < this->windowY)) + this->pFrmBuf[x1 + (this->windowX*y1)] = color; + + if ((x1 == x2) && (y1 == y2)) + return; + + e2 = 2 * err; + if (e2 > -dy) + { + err -= dy; + x1 += sx; + } + if (e2 < dx) + { + err += dx; + y1 += sy; + } + } +} + +/*********************************************************************** + * + * Function: plot4points + * + * Purpose: + * + * Processing: + * See function. + * + * Parameters: + * win : Window identifier + * cx : + * cy : + * x : + * y : + * Filled : + * + * Outputs: None + * + * Returns: Nothing + * + * Notes: None + * + **********************************************************************/ +void Graphics::plot4points( int32_t cx, int32_t cy, int32_t x, int32_t y, int16_t color, int32_t Filled ) + { + int16_t x0, x1, y0, y1; + + y0 = cy + y; + y1 = cy - y; + if( Filled ) + { + for( x0=cx - x; x0<=cx + x; x0++ ) + { + if ((x0>=0) && (x0<this->windowX) && (y0>=0) && (y0<this->windowY)) + this->pFrmBuf[x0 + (this->windowX*y0)] = color; + if ((x0>=0) && (x0<this->windowX) && (y1>=0) && (y1<this->windowY)) + this->pFrmBuf[x0 + (this->windowX*y1)] = color; + } + } + else + { + x0 = cx + x; + x1 = cx - x; + if ((x0>=0) && (x0<this->windowX) && (y0>=0) && (y0<this->windowY)) + this->pFrmBuf[x0 + (this->windowX*y0)] = color; + if ((x != 0) && + (x1>=0) && (x1<this->windowX) && (y0>=0) && (y0<this->windowY)) + this->pFrmBuf[x1 + (this->windowX*y0)] = color; + if ((y != 0) && + (x0>=0) && (x0<this->windowX) && (y1>=0) && (y1<this->windowY)) + this->pFrmBuf[x0 + (this->windowX*y1)] = color; + if ((x != 0 && y != 0) && + (x1>=0) && (x1<this->windowX) && (y1>=0) && (y1<this->windowY)) + this->pFrmBuf[x1 + (this->windowX*y1)] = color; + } + } + +/*********************************************************************** + * + * Function: plot8points + * + * Purpose: + * + * Processing: + * See function. + * + * Parameters: + * win : Window identifier + * cx : + * cy : + * x : + * y : + * Filled : + * + * Outputs: None + * + * Returns: Nothing + * + * Notes: None + * + **********************************************************************/ +void Graphics::plot8points( int32_t cx, int32_t cy, int32_t x, int32_t y, int16_t color, int32_t Filled ) + { + plot4points( cx, cy, x, y, color, Filled ); + if (x != y) + plot4points( cx, cy, y, x, color, Filled ); + } + +/*********************************************************************** + * + * Function: swim_put_circle + * + * Purpose: + * + * Processing: + * See function. + * + * Parameters: + * win : Window identifier + * cx : + * cy : + * radius : + * Filled : + * + * Outputs: None + * + * Returns: Nothing + * + * Notes: None + * + **********************************************************************/ +void Graphics::put_circle( int32_t cx, int32_t cy, int16_t color, int32_t radius, int32_t Filled ) + { + int32_t Error = -radius; + int16_t x = radius; + int16_t y = 0; + + while( x >= y ) + { + plot8points( cx, cy, x, y, color, Filled ); + + Error += y; + ++y; + Error += y; + + if( Error >= 0 ) + { + --x; + Error -= x; + Error -= x; + } + } + } + +void Graphics::put_dot( int32_t cx, int32_t cy, int16_t color ) +{ + int size = 1; + for (int y1 = cy - size; y1 <= (cy + size); y1++) { + for (int x1 = cx - size; x1 <= (cx + size); x1++) { + if ((x1 >= 0) && (x1 < this->windowX) && (y1 >= 0) && (y1 < this->windowY)) { + this->pFrmBuf[x1 + (this->windowX*y1)] = color; + } + } + } +} + +
diff -r 000000000000 -r b567d56a59d7 Graphics.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Graphics.h Fri Oct 03 13:30:09 2014 +0000 @@ -0,0 +1,29 @@ + +#ifndef GRAPHICS_H +#define GRAPHICS_H + +class Graphics { +public: + + Graphics(uint16_t *pFrmBuf, uint16_t dispWidth, uint16_t dispHeight); + + void setFrameBuffer( uint16_t *pFrmBuf ); + void put_line(int32_t x1, int32_t y1, int32_t x2, int32_t y2, int16_t color); + void put_circle( int32_t cx, int32_t cy, int16_t color, int32_t radius, int32_t Filled ); + void put_dot( int32_t cx, int32_t cy, int16_t color ); + +protected: + uint16_t windowX; + uint16_t windowY; + uint16_t *pFrmBuf; + + int32_t abs(int32_t v1) const; + + virtual void plot4points( int32_t cx, int32_t cy, int32_t x, int32_t y, int16_t color, int32_t Filled ); + void plot8points( int32_t cx, int32_t cy, int32_t x, int32_t y, int16_t color, int32_t Filled ); + +}; + +#endif + +
diff -r 000000000000 -r b567d56a59d7 Image.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Image.cpp Fri Oct 03 13:30:09 2014 +0000 @@ -0,0 +1,96 @@ + +#include "mbed.h" +#include "Image.h" + +#include "bmp.h" +#include "lodepng.h" + +int Image::decode(const unsigned char* pDataIn, unsigned int sizeIn, ImageData_t* pDataOut) +{ + Image::Type type = imageType(pDataIn, sizeIn); + int result = -1; + switch (type) + { + case BMP: + { + struct BMPHeader* hdr = (struct BMPHeader *) pDataIn; + pDataOut->pixels = (uint16_t*)malloc(hdr->width * hdr->height * 2); + if (pDataOut->pixels != NULL) + { + unsigned char error = BMP_Decode((void*)pDataIn, (unsigned char*)pDataOut->pixels, hdr->width, hdr->height, 24); + if (error == 0) + { + pDataOut->width = hdr->width; + pDataOut->height = hdr->height; + return 0; + } + free(pDataOut->pixels); + } + } + break; + + case PNG: + { + unsigned char* pTmp; + unsigned error = lodepng_decode24(&pTmp, &pDataOut->width, &pDataOut->height, pDataIn, sizeIn); + if (error == 0) + { + int x, y; + uint16_t* pConverted; + uint8_t r; + uint8_t g; + uint8_t b; + int off = 0; + + pDataOut->pixels = (uint16_t*)malloc(pDataOut->width * pDataOut->height * 2); + if (pDataOut->pixels != NULL) + { + pConverted = pDataOut->pixels; + + for (y = 0; y < pDataOut->height; y++) { + for (x = 0; x < pDataOut->width; x++) { + r = pTmp[off ]; + g = pTmp[off + 1]; + b = pTmp[off + 2]; + *pConverted = (((unsigned short)r & 0xF8) << 8) | + (((unsigned short)g & 0xFC) << 3) | + (((unsigned short)b & 0xF8) >> 3); + pConverted++; + off += 3; + } + } + } + free(pTmp); + return 0; + } + } + break; + + default: + break; + } + + pDataOut->pixels = NULL; + pDataOut->width = 0; + pDataOut->height = 0; + return result; +} + +Image::Type Image::imageType(const unsigned char* pDataIn, unsigned int sizeIn) +{ + if (sizeIn > 4) + { + if (pDataIn[0] == 0x89 && pDataIn[1] == 'P' && pDataIn[2] == 'N' && pDataIn[3] == 'G') + { + return PNG; + } + } + if (BMP_IsValid((void*)pDataIn)) + { + return BMP; + } + return UNKNOWN; +} + + +
diff -r 000000000000 -r b567d56a59d7 Image.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Image.h Fri Oct 03 13:30:09 2014 +0000 @@ -0,0 +1,48 @@ + +#ifndef IMAGE_H +#define IMAGE_H + +class Image { +public: + + enum Type { + BMP = 0, + PNG, + UNKNOWN + }; + + typedef struct { + uint16_t* pixels; + uint32_t width; + uint32_t height; + } ImageData_t; + + /** Decodes the specified image data + * + * Note that if this function returns a zero, indicating success, + * the pixels member of the pDataOut structure must be + * deallocated using lpc_free() when no longer needed. + * + * @param pDataIn the image data + * @param sizeIn the number of bytes in the pDataIn array + * @param pDataOut the decoded image (only valid if 0 is returned) + * + * @returns + * 0 on success + * 1 on failure + */ + static int decode(const unsigned char* pDataIn, unsigned int sizeIn, ImageData_t* pDataOut); + +private: + + /** No instance needed + * + */ + Image(); + + static Type imageType(const unsigned char* pDataIn, unsigned int sizeIn); +}; + +#endif + +
diff -r 000000000000 -r b567d56a59d7 PictureDemo.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/PictureDemo.cpp Fri Oct 03 13:30:09 2014 +0000 @@ -0,0 +1,94 @@ +/****************************************************************************** + * Includes + *****************************************************************************/ + +#include "mbed.h" + +#include "LcdController.h" +#include "EaLcdBoard.h" +#include "PictureDemo.h" + +#include "Image.h" + +extern const unsigned char eaLogo_image[]; +extern int eaLogo_image_sz; + +extern const unsigned char splash_image[]; +extern int splash_image_sz; + +/****************************************************************************** + * Typedefs and defines + *****************************************************************************/ + +/****************************************************************************** + * Local variables + *****************************************************************************/ + +/****************************************************************************** + * External variables + *****************************************************************************/ + + +/****************************************************************************** + * Local functions + *****************************************************************************/ + +void PictureDemo::drawCentered(const unsigned char* pData, int size, uint32_t delayMs) +{ + Image::ImageData_t data; + int result = Image::decode(pData, size, &data); + if (result == 0) + { + // Draw the image centered on the screen + unsigned int xoff = (windowX - data.width)/2; + unsigned int yoff = (windowY - data.height)/2; + for (int y = 0; y < data.height; y++) + { + memcpy(this->pFrmBuf1 + (y+yoff)*windowX + xoff, + data.pixels + y*data.width, + data.width*2); + } + + free(data.pixels); + } + else + { + printf("Failed to decode image\n"); + } +} + +/****************************************************************************** + * Public functions + *****************************************************************************/ +PictureDemo::PictureDemo(uint8_t *pFrameBuf, uint16_t dispWidth, uint16_t dispHeight) +{ + this->windowX = dispWidth; + this->windowY = dispHeight; + this->pFrmBuf = (uint16_t *)pFrameBuf; + this->pFrmBuf1 = (uint16_t *)pFrameBuf; + this->pFrmBuf2 = (uint16_t *)((uint32_t)pFrameBuf + dispWidth*dispHeight*2); + this->pFrmBuf3 = (uint16_t *)((uint32_t)pFrameBuf + dispWidth*dispHeight*4); +} + +void PictureDemo::run(EaLcdBoardGPIO& lcdBoard, int image, uint32_t delayMs) +{ + printf("PictureDemo, image %d, %dms delay\n", image, delayMs); + + memset(this->pFrmBuf1, 0xff, windowX*windowY*2); + switch (image) + { + case 1: + drawCentered(eaLogo_image, eaLogo_image_sz, delayMs); + break; + + default: + drawCentered(splash_image, splash_image_sz, delayMs); + break; + } + + //update framebuffer + lcdBoard.setFrameBuffer((uint32_t)this->pFrmBuf1); + + wait_ms(delayMs); +} +
diff -r 000000000000 -r b567d56a59d7 PictureDemo.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/PictureDemo.h Fri Oct 03 13:30:09 2014 +0000 @@ -0,0 +1,45 @@ + +#ifndef PICTUREDEMO_H +#define PICTUREDEMO_H + +#include "EaLcdBoardGPIO.h" + +class PictureDemo { +public: + + + /** Set the address of the frame buffer to use. + * + * It is the content of the frame buffer that is shown on the + * display. All the drawing on the frame buffer can be done + * 'offline' and whenever it should be shown this function + * can be called with the address of the offline frame buffer. + * + * @param pFrameBuf Pointer to the frame buffer, which must be + * 3 times as big as the frame size (for tripple + * buffering). + * dispWidth The width of the display (in pixels). + * dispHeight The height of the display (in pixels). + * loops Number of loops in the demo code. + * delayMs Delay in milliseconds between schreen updates. + * + * @returns + * none + */ + PictureDemo(uint8_t *pFrameBuf, uint16_t dispWidth, uint16_t dispHeight); + + void run(EaLcdBoardGPIO& lcdBoard, int image, uint32_t delayMs); + +private: + int32_t windowX; + int32_t windowY; + uint16_t *pFrmBuf; + uint16_t *pFrmBuf1; + uint16_t *pFrmBuf2; + uint16_t *pFrmBuf3; + + void drawCentered(const unsigned char* pData, int size, uint32_t delayMs); +}; + +#endif /* PICTUREDEMO_H */ +
diff -r 000000000000 -r b567d56a59d7 TestDisplay.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/TestDisplay.cpp Fri Oct 03 13:30:09 2014 +0000 @@ -0,0 +1,221 @@ +/* + * Copyright 2013 Embedded Artists AB + * + * 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. + */ + +/****************************************************************************** + * Includes + *****************************************************************************/ + +#include "mbed.h" +#include "TestDisplay.h" +#include "sdram.h" + +#include "PictureDemo.h" + +/****************************************************************************** + * Defines and typedefs + *****************************************************************************/ + +#define LCD_CONFIGURATION_43 \ + 40, /* horizontalBackPorch */ \ + 5, /* horizontalFrontPorch */ \ + 2, /* hsync */ \ + 480, /* width */ \ + 8, /* verticalBackPorch */ \ + 8, /* verticalFrontPorch */ \ + 2, /* vsync */ \ + 272, /* height */ \ + false, /* invertOutputEnable */ \ + false, /* invertPanelClock */ \ + true, /* invertHsync */ \ + true, /* invertVsync */ \ + 1, /* acBias */ \ + LcdController::Bpp_16_565, /* bpp */ \ + 9000000, /* optimalClock */ \ + LcdController::Tft, /* panelType */ \ + false /* dualPanel */ + +#define LCD_INIT_STRING_43 (char*)"v1,cd0,c50,cc0,c30,d100,c31,d100,cd1,d10,o,c51,cc100" + +#define LCD_CONFIGURATION_50 \ + 46, /* horizontalBackPorch */ \ + 20, /* horizontalFrontPorch */ \ + 2, /* hsync */ \ + 800, /* width */ \ + 23, /* verticalBackPorch */ \ + 10, /* verticalFrontPorch */ \ + 3, /* vsync */ \ + 480, /* height */ \ + false, /* invertOutputEnable */ \ + false, /* invertPanelClock */ \ + true, /* invertHsync */ \ + true, /* invertVsync */ \ + 1, /* acBias */ \ + LcdController::Bpp_16_565, /* bpp */ \ + 30000000, /* optimalClock */ \ + LcdController::Tft, /* panelType */ \ + false /* dualPanel */ + +#define LCD_INIT_STRING_50 (char*)"v1,cc0,c31,d50,o,d200,c51,cc100" + +#define MY_ABS(__a) (((__a) < 0) ? -(__a) : (__a)) + +/****************************************************************************** + * Public Functions + *****************************************************************************/ + +/* + Prerequisites: + + - A display must be connected to the LPC4088 Experiment Base Board + with the FPC connector + + - The touch controller uses the I2C bus so for this test to work + jumpers JP8 and JP9 on the LPC4088 Experiment Base Board must + both be in positions 1-2 + +*/ + +TestDisplay::TestDisplay(WhichDisplay which) : + _initStr(NULL), + _lcdCfg(NULL), + _lcdBoard(P0_27, P0_28), + _touch(P0_27, P0_28, P2_25) { + + switch (which) { + case TFT_5: + _lcdCfg = new LcdController::Config(LCD_CONFIGURATION_50); + _initStr = LCD_INIT_STRING_50; + break; + case TFT_4_3: + _lcdCfg = new LcdController::Config(LCD_CONFIGURATION_43); + _initStr = LCD_INIT_STRING_43; + break; + default: + mbed_die(); + } + + if (sdram_init() == 1) { + printf("Failed to initialize SDRAM\n"); + _framebuffer = 0; + } else { + _framebuffer = (uint32_t) malloc(_lcdCfg->width * _lcdCfg->height * 2 * 3); // 2 is for 16 bit color, 3 is the number of buffers + if (_framebuffer != 0) { + memset((uint8_t*)_framebuffer, 0, _lcdCfg->width * _lcdCfg->height * 2 * 3); + } + } +} + +TestDisplay::~TestDisplay() { + if (_framebuffer != 0) { + free((void*)_framebuffer); + _framebuffer = 0; + } +} + +bool TestDisplay::runTest() { + do { + if (_framebuffer == 0) { + printf("Failed to allocate memory for framebuffer\n"); + break; + } + + EaLcdBoard::Result result = _lcdBoard.open(_lcdCfg, _initStr); + if (result != EaLcdBoard::Ok) { + printf("Failed to open display, error %d\n", result); + break; + } + + result = _lcdBoard.setFrameBuffer(_framebuffer); + if (result != EaLcdBoard::Ok) { + printf("Failed to set framebuffer, error %d\n", result); + break; + } + + PictureDemo pictureDemo((uint8_t *)_framebuffer, _lcdCfg->width, _lcdCfg->height); + while (1) { + + //Display Picture 1 for two seconds + pictureDemo.run(_lcdBoard, 1, 2000); + + //Display Picture 2 for three seconds + pictureDemo.run(_lcdBoard, 2, 3000); + } + } while(0); + + return false; +} + +void TestDisplay::calibrate_drawMarker(Graphics &g, uint16_t x, uint16_t y, bool erase) { + uint16_t color = (erase ? 0x0000 : 0xffff); + g.put_line(x-15, y, x+15, y, color); + g.put_line(x, y-15, x, y+15, color); + g.put_circle(x, y, color, 10, false); +} + +bool TestDisplay::calibrate_display() { + bool morePoints = true; + uint16_t x, y; + int point = 0; + Graphics g((uint16_t*)_framebuffer, _lcdCfg->width, _lcdCfg->height); + + do { + if (!_touch.init(_lcdCfg->width, _lcdCfg->height)) { + printf("Failed to initialize touch controller\n"); + break; + } + if (!_touch.calibrateStart()) { + printf("Failed to start calibration\n"); + break; + } + while (morePoints) { + if (point++ > 0) { + // erase old location + calibrate_drawMarker(g, x, y, true); + } + if (!_touch.getNextCalibratePoint(&x, &y)) { + printf("Failed to get calibration point\n"); + break; + } + calibrate_drawMarker(g, x, y, false); + if (!_touch.waitForCalibratePoint(&morePoints, 0)) { + printf("Failed to get user click\n"); + break; + } + } + if (morePoints) { + // aborted calibration due to error(s) + break; + } + + // erase old location + calibrate_drawMarker(g, x, y, true); + + // allow user to draw for 5999 seconds + Timer t; + t.start(); + TouchPanel::touchCoordinate_t tc; + while(t.read() < 6000) { + if (_touch.read(tc)) { + //printf("TC: x,y,z = {%5d, %5d, %5d}\n", tc.x, tc.y, tc.z); + if (tc.z) { + g.put_dot(tc.x, tc.y, 0xffff); + } + } + } + } while(0); + + return !morePoints; +}
diff -r 000000000000 -r b567d56a59d7 TestDisplay.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/TestDisplay.h Fri Oct 03 13:30:09 2014 +0000 @@ -0,0 +1,63 @@ +/* + * Copyright 2013 Embedded Artists AB + * + * 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 TESTDISPLAY_H +#define TESTDISPLAY_H + +#include "AR1021I2C.h" +#include "Graphics.h" +#include "LcdController.h" +#include "EaLcdBoardGPIO.h" + +/** + * Test the display connected with a FPC cable to the LPC4088 Experiment Base Board + * as well as the AR1021 touch sensor on the board. + */ +class TestDisplay { +public: + enum WhichDisplay { + TFT_5, // 5" display + TFT_4_3, // 4.3" display + }; + + /** + * Create an interface to the display + */ + TestDisplay(WhichDisplay which); + ~TestDisplay(); + + /** + * Test the display + * + * @return true if the test was successful; otherwise false + */ + bool runTest(); + +private: + + void calibrate_drawMarker(Graphics &g, uint16_t x, uint16_t y, bool erase); + bool calibrate_display(); + + char* _initStr; + LcdController::Config* _lcdCfg; + EaLcdBoardGPIO _lcdBoard; + AR1021I2C _touch; + + uint32_t _framebuffer; +}; + +#endif +
diff -r 000000000000 -r b567d56a59d7 bmp.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/bmp.cpp Fri Oct 03 13:30:09 2014 +0000 @@ -0,0 +1,215 @@ +/* ---------------------------------------------------------------------------- + * ATMEL Microcontroller Software Support - ROUSSET - + * ---------------------------------------------------------------------------- + * Copyright (c) 2006, Atmel Corporation + + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * - Redistributions of source code must retain the above copyright notice, + * this list of conditions and the disclaiimer below. + * + * - Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the disclaimer below in the documentation and/or + * other materials provided with the distribution. + * + * Atmel's name may not be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * DISCLAIMER: THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE + * DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, + * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, + * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * ---------------------------------------------------------------------------- + */ + +//------------------------------------------------------------------------------ +// Headers +//------------------------------------------------------------------------------ + +#include "mbed.h" +#include "bmp.h" + +//------------------------------------------------------------------------------ +// Internal constants +//------------------------------------------------------------------------------ + +/// BMP magic number ('BM'). +#define BMP_TYPE 0x4D42 + +//------------------------------------------------------------------------------ +// Internal types +//------------------------------------------------------------------------------ + +struct BMPPaletteEntry { + + unsigned char b; + unsigned char g; + unsigned char r; + unsigned char filler; +}; + +//------------------------------------------------------------------------------ +// Exported functions +//------------------------------------------------------------------------------ + +//------------------------------------------------------------------------------ +/// Returns 1 if the header of a BMP file is valid; otherwise returns 0. +/// \param file Buffer holding the file to examinate. +//------------------------------------------------------------------------------ +unsigned char BMP_IsValid(void *file) +{ + return ((struct BMPHeader *) file)->type == BMP_TYPE; +} + +//------------------------------------------------------------------------------ +/// Returns the size of a BMP image given at least its header (the file does +/// not have to be complete). +/// \param file Pointer to the buffer which holds the BMP file. +//------------------------------------------------------------------------------ +unsigned int BMP_GetFileSize(void *file) +{ + return ((struct BMPHeader *) file)->fileSize; +} + +//------------------------------------------------------------------------------ +/// Loads a BMP image located at the given address, decodes it and stores the +/// resulting image inside the provided buffer. Image must have the specified +/// width & height. +/// Returns 0 if the image has been loaded; otherwise returns an error code. +/// \param file Buffer which holds the BMP file. +/// \param buffer Buffer in which to store the decoded image. +/// \param width Buffer width in pixels. +/// \param height Buffer height in pixels. +/// \param bpp Number of bits per pixels that the buffer stores. +//------------------------------------------------------------------------------ +unsigned char BMP_Decode( + void *file, + unsigned char *buffer, + unsigned int width, + unsigned int height, + unsigned char bpp) +{ + struct BMPHeader *header; + unsigned int i, j; + unsigned char r, g, b; + unsigned char *image; + + // Read header information + header = (struct BMPHeader *) file; + + // Verify that the file is valid + if (!BMP_IsValid(file)) { + + printf("BMP_Decode: File type is not 'BM' (0x%x).\n\r", + header->type); + return 1; + } + + // Check that parameters match + if ((header->compression != 0) + || (header->width != width) + || (header->height != height)) { + + printf("BMP_Decode: File format not supported\n\r"); + printf(" -> .compression = %d\n\r", header->compression); + printf(" -> .width = %d\n\r", header->width); + printf(" -> .height = %d\n\r", header->height); + printf(" -> .bits = %d\n\r", header->bits); + return 2; + } + + // Get image data + image = (unsigned char *) ((unsigned int) file + header->offset); + + // Check that the bpp resolution is supported + // Only a 24-bit output & 24- or 8-bit input are supported + if (bpp != 24) { + + printf("BMP_Decode: Output resolution not supported\n\r"); + return 3; + } + else if (header->bits == 24) { + + // Modified by Embedded Artists. This padding was not handled in the original + // implementation. Each row in the Pixel Array is padded to a multiple of 4 bytes in size + int rowWidthBytes = width * 3; + rowWidthBytes += (rowWidthBytes % 4); + + // Copy raw data from BMP to buffer (reversing row order) + for (i=0; i < height; i++) { +#if 1 + // Modified by Embedded Artists to convert to 565-format instead of 24 bit + int x; + for(x=0; x<width; x++) + { + r = *(unsigned char *)(image + (height - i - 1) * rowWidthBytes + 3*x + 2); + g = *(unsigned char *)(image + (height - i - 1) * rowWidthBytes + 3*x + 1); + b = *(unsigned char *)(image + (height - i - 1) * rowWidthBytes + 3*x + 0); + *(unsigned short *)(buffer + (i * width) * 2 + 2*x) = (((unsigned short)r & 0xF8) << 8) | + (((unsigned short)g & 0xFC) << 3) | + (((unsigned short)b & 0xF8) >> 3); + } +#else + memcpy(buffer + (i * width) * 3, + image + ((height - i - 1) * width) * 3, + width * 3); +#endif + } + +#if 0 + // Swap red and blue + for (i=0; i < height; i++) { + for (j=0; j < width; j++) { + + r = buffer[(i * width + j) * 3 + 2]; + g = buffer[(i * width + j) * 3 + 1]; + b = buffer[(i * width + j) * 3]; + + buffer[(i * width + j) * 3] = r; + buffer[(i * width + j) * 3 + 1] = g; + buffer[(i * width + j) * 3 + 2] = b; + } + } +#endif + } + else if (header->bits == 8) { + + // Retrieve palette + struct BMPPaletteEntry palette[256]; + memcpy(palette, + (unsigned char *) ((unsigned int) file + sizeof(struct BMPHeader)), + header->offset - sizeof(struct BMPHeader)); + + // Decode image (reversing row order) + for (i=0; i < height; i++) { + for (j=0; j < width; j++) { + + r = palette[image[(height - i - 1) * width + j]].r; + g = palette[image[(height - i - 1) * width + j]].g; + b = palette[image[(height - i - 1) * width + j]].b; + + buffer[(i * width + j) * 3] = r; + buffer[(i * width + j) * 3 + 1] = g; + buffer[(i * width + j) * 3 + 2] = b; + } + } + } + else { + + printf("BMP_Decode: Input resolution not supported\n\r"); + return 4; + } + + return 0; +} + +
diff -r 000000000000 -r b567d56a59d7 bmp.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/bmp.h Fri Oct 03 13:30:09 2014 +0000 @@ -0,0 +1,80 @@ +/* ---------------------------------------------------------------------------- + * ATMEL Microcontroller Software Support - ROUSSET - + * ---------------------------------------------------------------------------- + * Copyright (c) 2006, Atmel Corporation + + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * - Redistributions of source code must retain the above copyright notice, + * this list of conditions and the disclaiimer below. + * + * - Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the disclaimer below in the documentation and/or + * other materials provided with the distribution. + * + * Atmel's name may not be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * DISCLAIMER: THIS SOFTWARE IS PROVIDED BY ATMEL "AS IS" AND ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE + * DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, + * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, + * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * ---------------------------------------------------------------------------- + */ + +#ifndef BMP_H +#define BMP_H + +//------------------------------------------------------------------------------ +// Exported types +//------------------------------------------------------------------------------ + +struct BMPHeader { + + unsigned short type; + unsigned int fileSize; + unsigned short reserved1; + unsigned short reserved2; + unsigned int offset; + unsigned int headerSize; + unsigned int width; + unsigned int height; + unsigned short planes; + unsigned short bits; + unsigned int compression; + unsigned int imageSize; + unsigned int xresolution; + unsigned int yresolution; + unsigned int ncolours; + unsigned int importantcolours; + +} __attribute__ ((packed)); + +//------------------------------------------------------------------------------ +// Exported functions +//------------------------------------------------------------------------------ + +extern unsigned char BMP_IsValid(void *file); + +extern unsigned int BMP_GetFileSize(void *file); + +extern unsigned char BMP_Decode( + void *file, + unsigned char *buffer, + unsigned int width, + unsigned int height, + unsigned char bpp); + +#endif //#ifndef BMP_H + + +
diff -r 000000000000 -r b567d56a59d7 cubeImage.c --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/cubeImage.c Fri Oct 03 13:30:09 2014 +0000 @@ -0,0 +1,6580 @@ +/***************************************************************************** + * + * Copyright(C) 2012, Embedded Artists AB + * All rights reserved. + * + ****************************************************************************** + * Software that is described herein is for illustrative purposes only + * which provides customers with programming information regarding the + * products. This software is supplied "AS IS" without any warranties. + * Embedded Artists AB assumes no responsibility or liability for the + * use of the software, conveys no license or title under any patent, + * copyright, or mask work right to the product. Embedded Artists AB + * reserves the right to make changes in the software without + * notification. Embedded Artists AB also make no representation or + * warranty that such application will be suitable for the specified + * use without further testing or modification. + *****************************************************************************/ + +/* rotated version of original landscape+sky */ +const unsigned char cube_image1[] = { +137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82, +0,0,0,150,0,0,0,200,8,2,0,0,0,133,231,143, +50,0,0,0,1,115,82,71,66,0,174,206,28,233,0,0, +0,4,103,65,77,65,0,0,177,143,11,252,97,5,0,0, +0,9,112,72,89,115,0,0,14,195,0,0,14,195,1,199, +111,168,100,0,0,107,62,73,68,65,84,120,94,237,189,103, +172,109,233,125,222,183,202,238,253,244,114,123,155,206,105,236, +77,44,161,172,2,153,138,226,200,178,3,196,105,86,96,37, +1,2,39,112,2,164,26,254,232,36,200,167,4,78,4,193, +37,81,34,200,130,74,66,74,20,73,217,162,196,33,57,156, +225,244,59,115,123,61,189,236,115,118,175,107,173,252,158,247, +93,123,159,115,135,180,193,203,64,23,203,192,236,217,179,239, +58,107,175,221,222,231,253,247,230,70,81,228,36,239,246,216, +103,103,151,78,164,252,140,179,126,221,115,60,199,229,127,199, +229,139,94,252,144,115,230,9,111,60,116,58,77,55,149,78, +85,102,51,221,182,91,40,185,157,166,83,174,185,252,142,48, +244,110,190,117,38,147,207,187,174,235,167,220,95,251,235,127, +119,97,229,226,70,215,221,62,8,235,7,227,159,58,231,230, +252,224,181,235,157,111,189,113,56,30,14,248,111,60,28,22, +50,225,255,246,223,124,124,20,68,59,123,157,127,255,191,254, +70,38,21,133,225,56,8,2,39,28,135,28,134,28,132,97, +20,84,74,217,63,254,39,191,154,188,165,210,210,36,241,54, +234,59,173,67,103,208,5,184,144,239,103,119,25,16,221,124, +219,249,198,111,133,183,46,235,217,102,195,229,241,198,27,206, +107,223,114,82,105,183,190,227,236,110,185,158,231,205,46,185, +229,90,148,201,69,237,134,243,135,127,250,91,129,159,226,229, +224,31,4,97,173,224,188,125,103,240,189,43,189,211,11,105, +96,113,162,48,138,194,159,253,212,10,248,5,97,212,236,142, +60,223,17,108,108,107,254,225,99,117,13,175,54,143,137,220, +235,44,75,66,33,12,67,232,204,217,91,251,17,219,203,247, +157,181,27,206,254,150,51,238,123,59,247,157,11,207,66,151, +206,198,173,168,88,117,50,105,167,223,11,130,113,22,212,242, +5,39,157,137,174,223,186,145,73,187,252,72,176,224,62,24, +70,111,220,25,6,97,120,97,53,11,251,225,54,28,5,63, +255,233,85,187,63,190,250,173,91,105,46,21,90,236,27,16, +4,60,61,218,219,100,35,37,110,199,39,20,194,76,78,196, +23,111,48,179,160,172,235,241,197,219,219,140,178,249,16,42, +172,111,107,193,43,179,78,243,192,1,185,48,72,183,26,161, +231,57,157,150,147,43,56,169,92,183,213,12,242,190,16,226, +126,119,111,60,28,71,227,113,184,52,147,30,7,130,231,233, +243,229,84,202,231,157,83,41,239,157,171,123,22,170,24,48, +17,162,88,128,249,232,15,168,240,33,247,238,104,24,136,2, +30,188,29,71,17,60,70,195,104,216,119,16,85,133,146,83, +158,113,10,69,86,222,29,244,10,51,11,81,169,234,46,159, +118,78,92,112,78,157,79,55,234,123,153,148,51,10,163,90, +206,121,227,238,8,48,124,207,41,33,18,33,198,48,250,252, +135,23,129,146,27,127,174,239,116,38,80,77,249,167,161,69, +241,213,135,252,1,143,240,242,132,82,161,89,1,195,205,236, +205,114,182,163,155,142,235,219,81,161,28,250,41,39,11,181, +165,157,96,132,94,227,12,251,169,218,188,135,34,147,201,186, +190,231,14,71,163,229,133,37,72,24,237,228,35,167,189,118, +31,217,23,1,127,16,133,41,207,129,139,62,115,177,38,153, +231,56,175,188,189,5,203,125,64,16,26,202,51,207,78,239, +143,16,153,31,251,163,146,12,161,253,17,83,228,222,199,78, +195,209,40,42,84,162,198,65,52,30,57,46,172,210,115,182, +238,185,165,90,6,46,138,30,212,109,59,221,150,147,77,95, +242,221,113,37,21,138,106,3,215,53,168,156,152,77,253,193, +159,239,193,62,243,89,207,231,106,115,91,219,108,229,50,190, +65,211,0,102,213,25,115,125,204,87,63,80,103,126,236,93, +117,252,194,80,216,24,165,116,34,10,57,142,133,98,187,30, +6,163,176,84,142,218,135,78,54,43,139,162,182,16,245,218, +185,209,208,101,181,33,196,84,198,237,30,102,50,105,191,59, +116,103,242,206,149,45,180,78,103,48,10,255,227,95,90,186, +191,51,8,198,225,108,57,133,114,132,205,192,19,79,94,152, +109,119,251,70,127,49,31,129,10,107,133,224,113,189,244,39, +250,13,127,209,47,74,40,21,214,22,140,250,193,250,177,186, +90,71,139,226,145,129,193,95,163,81,192,66,55,246,67,152, +36,52,151,201,185,217,156,243,222,15,82,187,27,78,163,238, +108,223,3,154,40,87,22,9,237,13,156,217,130,187,126,32, +193,6,33,190,119,167,15,207,4,159,193,48,104,117,198,173, +94,48,28,98,246,229,244,129,92,30,127,200,68,28,78,184, +104,18,205,103,179,59,18,10,33,60,48,149,114,106,115,142, +12,53,44,140,163,219,17,59,133,45,142,135,97,58,31,150, +42,50,237,187,77,80,244,156,113,120,231,74,56,232,57,227, +113,20,140,221,153,234,108,71,70,95,4,139,28,137,186,162, +74,222,251,218,247,247,173,146,210,104,15,139,249,212,245,59, +7,104,167,127,250,242,93,223,7,68,25,18,218,53,49,219, +156,16,162,177,20,255,162,233,233,39,123,255,132,66,24,225, +29,25,135,163,129,147,47,202,54,56,18,138,49,69,198,54, +198,214,221,224,137,231,157,253,205,145,124,52,21,209,98,117, +65,170,236,214,189,104,245,156,139,178,250,137,39,127,193,241, +160,43,183,211,15,1,8,26,107,245,194,195,118,96,37,220, +112,204,246,8,183,246,58,0,244,231,175,222,63,102,191,27, +180,164,250,196,204,212,124,129,15,32,124,152,61,86,158,117, +86,47,136,127,70,129,115,226,156,147,206,90,66,124,191,80, +28,143,194,111,253,65,216,60,136,240,230,52,247,221,116,218, +59,113,62,244,220,96,208,11,178,57,100,161,211,104,116,165, +150,12,70,149,172,241,197,136,196,194,108,70,90,10,8,101, +211,238,27,87,246,171,165,12,150,226,151,191,120,105,190,154, +227,10,171,242,196,78,153,169,32,148,119,47,161,183,132,82, +225,220,138,172,189,92,217,57,251,140,22,19,66,76,167,143, +177,211,88,94,137,51,14,251,195,83,143,133,163,33,126,25, +28,108,78,187,49,246,211,161,235,6,123,27,24,142,254,63, +254,191,255,169,23,185,37,47,108,246,29,195,38,101,20,54, +13,21,66,97,31,121,114,246,55,191,114,125,105,190,144,203, +165,62,242,161,229,141,157,246,196,144,183,52,103,97,59,126, +144,68,20,19,10,33,214,30,62,207,217,37,73,187,115,207, +56,79,126,216,193,127,102,100,226,113,27,67,52,2,90,223, +255,70,127,103,61,90,88,117,211,41,111,237,102,7,120,32, +196,92,209,25,246,82,97,48,40,102,188,84,22,81,24,102, +252,169,215,69,68,150,73,185,131,81,192,125,121,190,52,30, +7,255,235,111,254,32,147,49,178,208,144,160,44,138,169,68, +140,45,141,36,226,151,92,117,166,88,113,30,127,193,153,89, +36,90,224,220,120,19,156,156,153,37,103,249,84,104,16,156, +178,211,137,238,24,6,189,246,225,254,182,151,47,57,190,63, +90,62,227,60,249,49,185,88,219,141,84,117,185,149,207,1, +97,106,190,224,20,51,86,227,140,77,61,14,174,220,106,60, +126,182,154,207,249,111,93,221,121,227,189,109,195,170,39,148, +103,97,179,174,81,111,202,87,147,136,98,66,169,112,110,25, +111,11,174,22,39,95,118,86,206,98,63,196,254,74,47,102, +167,239,71,49,24,7,219,247,91,248,206,150,207,65,111,13, +92,51,253,46,166,161,191,186,120,186,49,12,183,123,110,41, +239,159,153,243,141,68,139,25,227,104,28,182,186,195,231,31, +159,99,9,254,224,27,215,113,229,28,185,67,223,167,188,36, +87,14,234,139,38,20,194,94,135,56,3,36,37,141,20,231, +203,198,29,12,124,39,24,59,179,64,59,126,159,106,19,251, +222,118,238,246,122,221,209,233,139,78,174,152,197,70,68,155, +109,236,133,141,70,207,247,61,172,132,126,224,189,112,54,189, +84,53,191,119,18,63,250,232,211,243,133,124,26,11,244,202, +237,250,49,22,125,204,157,38,204,167,18,49,137,36,152,92, +8,145,133,172,51,242,15,32,11,101,212,25,111,227,150,179, +112,218,57,251,132,243,225,47,30,151,136,241,178,226,93,115, +253,240,123,95,219,218,89,247,14,118,176,70,188,70,157,64, +225,120,216,241,65,0,21,6,167,76,173,156,58,57,111,222, +215,160,8,213,125,230,133,197,11,167,171,87,239,236,167,185, +66,222,55,25,254,241,59,62,32,255,18,141,98,66,169,16, +245,50,147,199,53,227,96,164,95,121,77,28,245,194,115,78, +169,34,56,225,144,79,124,216,114,143,35,27,3,83,1,2, +125,238,51,222,91,223,185,83,40,225,178,113,207,63,29,180, +14,163,253,214,29,76,8,223,117,81,54,27,29,130,241,22, +32,65,242,204,133,202,234,98,177,90,74,227,154,153,171,229, +8,244,78,192,19,229,217,117,81,174,64,66,105,239,232,107, +37,20,66,208,105,29,56,221,14,42,137,83,42,75,169,193, +242,187,123,213,185,119,197,89,80,128,214,185,248,2,217,17, +49,138,172,50,84,187,112,210,217,188,227,156,127,218,219,221, +234,118,91,33,174,150,229,51,221,202,140,12,123,116,209,245, +70,180,215,12,208,66,45,130,232,50,103,86,138,165,66,58, +159,75,47,206,151,23,102,73,212,136,161,213,1,32,198,134, +96,162,233,207,194,152,80,8,211,89,188,101,14,81,4,30, +11,85,167,84,115,252,180,83,170,34,231,156,102,221,233,180, +157,217,69,103,233,76,140,162,156,218,190,179,183,30,22,74, +50,16,145,157,251,91,227,198,190,147,203,123,197,178,23,68, +78,37,229,148,178,238,230,193,248,141,219,56,178,117,195,71, +10,239,196,3,62,10,2,52,210,173,61,44,194,35,2,125, +128,244,132,101,162,73,49,161,16,18,45,34,254,208,110,58, +88,23,115,75,30,74,41,6,198,233,199,180,152,189,182,241, +157,166,4,234,39,126,78,235,142,130,195,201,197,83,206,160, +175,36,154,108,182,223,109,181,14,246,162,116,198,173,175,21, +26,7,99,130,72,221,145,115,125,59,24,141,141,180,115,29, +14,150,231,243,248,81,219,157,49,103,218,157,161,221,206,83, +254,121,156,125,218,151,36,246,150,80,8,247,182,228,157,169, +26,55,183,1,201,233,119,148,99,161,133,78,139,199,194,84, +43,51,206,230,61,231,11,127,197,121,230,83,100,182,133,243, +43,206,210,41,231,112,55,242,252,190,235,132,173,131,254,206, +154,247,209,79,60,150,79,71,112,92,32,168,119,98,105,7, +59,197,162,40,230,211,208,110,33,151,234,15,4,173,222,250, +65,156,100,101,88,80,13,147,77,44,136,9,133,144,68,138, +131,93,137,192,94,203,131,55,18,184,96,185,145,139,32,58, +238,75,77,37,175,98,102,193,91,61,227,108,222,117,72,130, +170,204,121,92,140,44,36,137,102,102,113,228,101,224,168,163, +250,246,40,155,202,17,74,60,196,187,102,84,78,221,29,103, +113,70,78,210,102,103,152,201,248,220,27,173,62,110,29,251, +148,37,195,35,180,38,71,137,197,47,185,178,16,121,70,228, +1,37,17,89,136,141,8,114,164,172,165,211,32,234,84,230, +29,252,47,160,136,47,134,167,200,128,58,251,132,87,174,1, +176,71,148,49,87,18,189,166,82,189,116,58,26,12,26,112, +72,168,82,233,79,66,72,248,176,21,44,77,65,127,232,162, +253,254,168,217,30,102,149,185,22,67,23,19,95,76,130,130, +221,75,176,143,59,185,16,98,78,236,173,203,28,28,25,22, +58,24,8,51,72,19,247,55,58,14,250,75,58,227,65,166, +195,33,113,12,47,147,117,134,3,1,64,104,98,102,30,138, +132,3,55,23,78,132,213,217,232,213,151,95,41,164,197,54, +171,57,203,14,157,121,156,112,158,83,192,107,106,82,158,90, +157,81,46,155,70,69,5,57,158,183,248,197,198,196,49,98, +228,252,36,67,35,113,50,49,161,140,20,7,219,220,138,119, +237,13,60,44,6,176,180,128,129,40,89,71,144,104,29,122, +135,156,15,29,24,160,210,159,242,104,61,222,253,107,206,236, +130,87,157,77,245,186,94,117,46,79,102,212,201,139,78,170, +184,253,238,173,171,126,20,246,201,175,113,157,28,97,228,130, +115,126,37,139,43,160,82,66,22,122,187,245,222,171,111,111, +100,201,113,3,65,50,192,227,108,69,253,97,164,224,4,212, +4,75,195,132,66,216,60,244,241,83,147,227,91,155,151,253, +0,114,189,174,232,18,205,115,56,240,96,134,48,216,141,219, +2,143,56,20,138,43,122,205,233,199,73,101,115,239,92,241, +230,22,81,77,195,197,147,169,116,198,47,85,189,106,21,203, +222,195,43,103,40,204,5,172,82,222,29,12,195,253,195,33, +122,205,215,95,186,243,167,223,191,79,236,183,108,188,224,98, +155,84,0,136,96,193,19,22,170,83,246,209,18,113,2,111, +9,133,16,229,19,242,34,236,142,171,243,206,85,226,242,162, +197,242,28,152,121,228,27,34,26,9,69,93,122,206,195,174, +32,229,55,10,61,200,244,196,121,191,177,151,158,91,118,15, +118,208,96,83,189,14,70,189,183,185,214,61,115,226,98,38, +237,165,83,162,194,106,33,130,112,81,65,63,245,161,217,63, +248,211,251,36,223,172,111,119,200,225,63,185,84,38,234,4, +114,130,206,16,162,37,193,201,95,66,241,3,8,31,110,251, +66,103,224,132,45,1,183,196,84,168,45,74,145,33,40,207, +58,146,83,195,35,238,111,76,11,144,14,199,30,78,184,149, +179,222,63,255,221,244,120,236,222,189,230,238,111,186,197,114, +184,125,15,55,169,247,151,127,238,103,240,213,205,230,162,114, +214,91,46,140,15,123,94,46,139,124,141,200,93,219,169,15, +254,252,213,141,139,103,106,120,106,246,15,123,184,194,13,31, +157,170,61,83,66,180,232,197,26,235,195,253,140,71,114,117, +66,169,16,240,202,85,41,41,195,145,104,17,237,6,142,10, +219,4,215,195,186,28,52,8,63,57,213,78,120,80,39,134, +68,99,47,117,234,162,220,111,133,162,177,70,194,66,177,226, +146,253,118,114,241,147,184,203,210,105,23,86,233,132,195,90, +209,171,20,51,36,59,53,187,99,60,112,95,249,179,123,141, +214,16,137,216,235,99,224,11,37,79,148,104,25,168,60,231, +214,188,48,7,73,101,163,137,117,176,17,175,223,49,146,79, +142,17,10,36,154,90,73,156,221,210,60,49,236,78,138,115, +162,242,176,174,152,22,200,198,171,175,121,119,222,115,50,5, +7,46,90,157,143,214,174,87,239,94,137,252,84,246,205,55, +215,185,102,111,32,17,23,6,209,226,76,186,92,164,166,137, +250,152,144,0,97,58,229,223,221,228,51,120,82,184,241,96, +239,42,108,147,14,42,240,12,15,149,28,77,172,48,76,40, +21,90,179,15,58,67,218,13,187,64,232,65,151,96,9,23, +69,237,68,227,128,52,119,55,60,232,18,115,240,205,151,124, +106,98,96,167,181,89,167,190,11,192,46,149,129,188,67,56, +174,29,14,215,177,218,199,161,231,187,42,70,251,252,51,5, +204,193,108,198,239,244,131,229,185,220,234,66,33,8,48,39, +12,225,1,215,132,4,249,0,128,247,249,60,79,180,104,25, +236,7,16,62,156,88,216,223,145,34,35,7,88,17,127,38, +12,83,47,199,254,99,113,145,130,196,155,88,111,40,117,111, +83,127,182,118,141,73,231,57,24,33,23,159,113,170,179,188, +54,232,119,195,65,191,83,205,46,143,7,163,156,31,230,221, +128,34,10,242,138,151,231,242,165,98,58,77,46,148,235,172, +237,116,97,167,49,1,138,222,44,134,86,171,17,233,241,164, +80,52,167,18,27,186,79,40,21,18,228,131,206,184,53,15, +29,162,13,160,37,175,138,235,144,156,120,247,138,209,252,241, +215,108,202,218,174,111,187,120,77,185,161,248,40,142,232,59, +219,247,201,117,129,225,70,187,27,135,158,106,129,253,97,232, +225,127,161,252,236,160,29,206,215,210,185,76,106,166,154,106, +117,67,138,40,68,112,49,23,53,255,76,24,41,7,166,220, +66,103,120,92,89,152,121,241,89,101,69,38,240,150,80,8, +113,176,17,163,0,185,165,147,30,49,38,66,16,115,203,94, +169,166,154,80,97,233,57,221,134,72,211,77,185,240,210,11, +31,18,126,156,124,247,85,94,130,29,239,146,74,19,69,35, +228,232,235,111,191,13,120,184,99,90,35,31,42,44,100,189, +55,110,244,190,246,106,43,155,242,106,165,212,19,103,43,0, +44,216,12,144,122,136,255,119,243,185,204,92,173,88,173,20, +102,170,197,39,31,59,249,204,83,103,151,22,106,9,196,207, +104,91,137,188,65,109,48,186,124,209,35,234,132,241,94,40, +201,217,77,8,16,77,4,167,90,125,75,165,76,123,27,238, +250,13,167,85,247,112,130,19,226,39,148,184,122,214,189,127, +93,177,124,138,209,66,220,225,68,145,154,87,173,129,87,241, +7,68,7,219,221,241,171,215,219,0,217,238,133,134,46,221, +79,62,183,180,48,91,248,149,159,127,188,92,204,198,64,194, +51,35,231,51,31,187,240,196,99,171,159,250,232,227,143,95, +56,177,10,243,205,103,243,185,108,34,151,42,169,16,66,55, +184,45,85,193,75,72,161,238,237,109,74,213,68,65,197,174, +71,41,165,141,2,209,196,221,77,50,190,197,99,209,78,17, +147,207,127,150,68,55,121,62,177,226,77,50,33,30,208,254, +193,65,61,75,244,56,69,28,56,184,112,178,216,232,4,245, +22,53,192,46,134,68,181,68,149,104,84,46,166,126,246,179, +103,207,157,170,205,214,242,134,28,69,136,185,92,102,175,222, +78,73,69,117,22,23,170,181,42,9,85,148,123,39,212,174, +72,40,21,226,124,65,165,196,139,134,143,155,24,5,166,94, +117,94,127,14,250,232,47,30,92,20,254,65,42,13,207,210, +250,130,50,221,39,62,226,92,123,221,7,60,56,48,174,56, +43,27,195,177,92,216,127,246,221,239,154,4,67,231,241,211, +133,247,54,67,108,68,192,232,244,73,5,150,77,9,138,139, +243,249,147,75,149,79,62,15,95,54,220,212,195,45,30,172, +44,86,23,231,75,164,4,15,71,88,144,156,76,232,66,37, +151,145,226,145,65,22,174,223,146,201,118,225,25,231,241,231, +165,160,226,48,91,191,73,115,18,193,9,114,123,235,234,94, +114,235,93,66,78,158,10,42,240,191,156,83,197,61,61,76, +140,246,8,67,13,70,131,238,97,119,157,252,209,211,11,217, +111,95,31,225,223,193,198,0,164,133,90,138,127,184,140,190, +36,163,97,152,207,167,62,247,137,179,130,207,220,16,144,127, +242,210,181,151,94,185,89,63,104,183,218,189,241,104,156,84, +10,212,239,76,232,230,218,219,240,239,223,112,206,60,174,124, +25,110,4,155,176,255,48,240,79,61,46,153,55,232,73,199, +193,77,3,126,40,174,28,215,119,20,114,186,245,14,73,248, +46,94,239,84,202,38,122,163,228,4,155,247,246,249,103,126, +54,189,215,10,243,25,183,92,32,67,216,35,100,111,29,46, +80,97,119,64,129,83,180,177,221,52,182,125,124,163,135,194, +65,163,247,246,149,245,187,247,141,201,146,96,63,119,66,33, +92,58,45,252,68,16,89,113,209,78,67,201,246,82,112,10, +14,42,12,55,130,77,100,87,8,131,177,156,168,88,138,32, +135,94,10,35,205,229,208,110,108,49,48,113,192,224,255,252, +167,191,81,42,184,77,28,52,18,147,222,201,57,63,155,246, +179,89,159,144,33,152,209,51,161,219,27,183,187,195,111,188, +116,23,226,147,153,104,152,169,125,224,214,108,247,161,69,107, +220,127,160,206,60,196,10,160,121,34,129,144,85,104,161,0, +129,92,68,11,69,41,189,241,38,213,216,30,53,245,157,67, +33,7,9,2,106,167,161,156,12,52,80,120,47,150,6,113, +252,98,249,40,45,116,216,239,83,86,127,191,17,229,50,78, +103,224,156,92,200,45,205,102,230,171,233,98,33,3,57,242, +65,4,132,183,118,187,84,252,2,169,189,11,62,107,49,42, +190,236,20,11,89,202,160,140,199,38,137,183,132,82,33,152, +145,84,97,211,242,243,37,239,112,215,217,93,119,182,239,144, +19,236,189,253,146,211,220,211,83,132,153,176,17,81,94,56, +128,66,56,72,103,41,247,165,245,147,107,170,74,109,239,31, +109,133,126,151,36,54,225,193,223,39,22,50,95,254,244,236, +65,43,88,153,207,43,101,6,86,75,251,139,48,250,242,191, +118,145,103,45,118,210,69,99,20,225,207,138,143,80,141,159, +80,0,19,43,11,73,185,160,130,30,198,216,110,82,111,38, +151,183,81,53,61,144,195,34,180,55,168,237,212,99,152,19, +81,171,65,90,98,164,20,69,71,49,169,86,93,189,18,192, +3,96,210,185,48,157,74,223,190,251,30,228,148,35,63,49, +237,188,124,181,223,236,134,223,191,218,205,102,211,88,138,112, +78,2,23,195,81,120,241,116,109,174,86,0,111,233,159,190, +80,52,122,40,95,3,26,61,196,35,151,204,102,117,201,85, +103,224,159,220,193,140,175,72,17,189,165,72,123,179,212,0, +66,243,203,50,7,105,107,177,124,82,173,103,192,24,240,138, +101,103,225,148,123,235,109,49,88,124,226,163,158,100,216,250, +230,45,82,73,49,21,33,187,251,123,152,9,33,224,189,117, +163,85,45,101,115,217,148,233,179,22,81,145,255,159,254,59, +31,198,62,137,101,32,134,8,40,10,81,127,119,175,213,233, +196,57,196,9,228,164,9,101,164,216,6,165,138,151,203,43, +15,159,10,122,14,200,78,35,253,201,228,62,169,136,30,65, +56,179,64,163,25,101,35,242,212,252,10,189,130,148,244,77, +14,63,186,143,58,231,161,143,194,252,4,120,20,140,112,182, +169,38,20,194,66,151,233,14,168,245,117,215,247,6,23,78, +151,9,92,88,171,17,219,191,84,202,86,203,57,48,19,114, +120,87,99,175,155,215,237,143,26,173,46,205,17,19,136,95, +114,169,16,227,143,14,36,18,120,77,217,12,252,185,114,206, +83,42,205,130,187,114,222,57,247,33,71,5,46,174,183,116, +210,157,89,66,212,185,221,150,246,226,222,186,187,122,94,70, +197,236,178,107,35,139,246,118,229,202,187,163,1,226,76,178, +19,55,203,119,223,107,227,48,69,198,157,92,46,22,11,233, +114,137,110,67,114,113,23,114,254,96,16,24,252,68,124,98, +167,250,71,180,216,104,246,44,210,9,188,37,148,10,241,174, +145,221,132,83,27,130,67,224,85,231,61,146,240,199,3,90, +172,201,35,131,58,83,157,241,168,114,202,22,240,115,202,89, +138,58,115,237,77,23,217,153,205,187,69,138,244,11,71,233, +188,18,138,78,3,227,129,43,81,95,192,131,6,108,32,241, +161,243,121,118,193,242,66,225,244,114,9,118,74,86,35,79, +150,74,25,43,14,45,11,181,248,129,47,47,31,17,244,74, +228,45,161,16,238,108,40,41,20,14,185,122,222,57,220,17, +90,52,145,89,191,109,130,18,1,204,211,35,100,191,118,93, +153,78,195,62,100,231,18,208,199,162,200,22,241,151,186,251, +219,206,214,93,229,237,27,170,81,199,181,74,101,6,245,38, +237,139,10,241,190,210,162,15,89,72,200,169,63,24,95,58, +85,57,181,92,174,150,225,175,46,94,111,186,93,90,216,226, +71,123,144,226,63,159,122,252,68,34,232,184,47,126,233,210, +202,185,104,243,182,114,11,84,202,110,234,178,136,186,81,79, +148,78,69,151,158,147,40,82,94,30,5,183,104,234,68,77, +71,10,166,99,89,195,223,112,58,227,16,65,239,231,89,156, +94,56,51,79,93,148,223,234,237,151,93,74,200,112,64,243, +18,229,98,167,92,222,31,2,66,215,192,84,199,19,102,189, +213,56,57,209,65,108,142,47,154,75,251,16,1,230,114,253, +153,11,165,59,247,238,111,223,245,72,232,126,236,57,239,27, +191,229,188,240,57,231,157,239,186,23,159,83,3,217,139,207, +139,248,174,191,233,206,44,122,249,60,253,20,188,250,30,125, +159,60,60,112,167,30,35,253,194,111,215,229,100,201,21,221, +81,31,106,83,248,253,175,254,242,151,127,230,75,255,101,224, +121,245,198,168,221,14,186,221,65,175,55,60,187,152,250,216, +51,181,131,195,193,201,165,2,193,41,220,49,36,65,253,253, +95,127,133,61,162,158,55,60,112,86,221,18,117,124,233,220, +66,165,156,199,64,228,50,20,93,148,88,64,181,198,190,233, +51,164,96,114,172,109,177,140,161,62,162,221,238,125,251,229, +203,92,113,212,195,77,206,134,184,151,149,45,141,124,48,140, +124,156,81,219,227,7,31,227,242,142,56,29,107,146,96,231, +250,229,85,247,252,135,186,215,222,238,13,71,189,222,160,223, +235,247,251,195,174,151,238,21,42,184,7,49,120,187,181,69, +243,184,220,189,119,107,80,153,51,23,244,251,94,186,211,237, +208,22,185,159,46,80,77,212,223,223,235,183,90,253,165,51, +253,141,251,188,79,127,253,118,47,116,123,94,170,151,175,246, +6,195,94,187,57,224,154,245,187,253,208,235,167,242,253,157, +141,222,96,208,227,71,142,163,254,65,189,155,206,15,120,79, +199,27,220,191,221,247,179,188,115,223,167,197,239,222,96,60, +116,41,139,217,223,18,243,68,147,232,247,92,54,19,59,64, +89,188,179,238,198,117,119,102,193,197,22,196,126,160,251,83, +235,192,29,143,209,122,220,96,132,89,71,226,133,226,180,248, +84,77,126,182,251,215,254,245,191,229,248,11,233,156,223,31, +80,107,17,208,173,6,112,78,204,101,102,74,169,91,235,237, +83,75,5,147,248,228,253,95,95,121,239,160,161,16,149,105, +120,161,71,211,91,65,143,249,108,122,121,169,42,158,76,94, +36,125,165,2,248,106,0,93,226,98,85,139,35,32,165,25, +128,121,5,39,135,195,113,253,176,181,95,111,174,109,238,119, +248,173,195,241,96,48,234,15,70,60,106,117,56,214,35,93, +165,71,220,237,121,123,129,185,143,31,120,228,2,86,89,119, +46,230,125,120,86,247,33,127,14,198,246,140,55,191,18,30, +236,169,189,139,118,69,72,100,53,92,92,69,175,11,80,237, +72,90,33,209,79,109,95,242,206,206,154,115,242,98,64,207, +93,105,137,212,169,180,69,174,252,30,126,60,219,31,242,130, +122,228,82,33,155,225,182,202,30,80,70,144,29,48,46,248, +33,44,142,203,208,33,231,22,105,124,39,60,208,44,8,251, +145,29,202,194,225,234,100,67,129,19,137,104,219,247,133,16, +141,74,112,170,17,203,189,119,13,132,66,202,210,48,237,201, +96,227,77,200,195,128,103,30,238,185,124,4,68,207,39,206, +46,69,131,30,107,26,167,93,167,210,81,155,55,140,196,33, +236,13,205,116,118,97,150,69,86,88,216,38,19,138,52,156, +115,171,57,26,176,93,191,219,50,103,72,235,238,110,236,116, +224,165,202,123,58,186,147,153,104,248,147,66,22,132,145,81, +163,228,186,179,158,26,219,209,148,255,109,218,135,229,219,106, +42,197,186,247,135,119,239,111,27,37,86,155,192,118,4,131, +201,217,126,27,156,33,38,105,111,246,37,147,243,147,78,41, +102,15,217,90,86,123,253,244,50,211,81,76,121,64,147,46, +99,145,71,66,95,117,142,189,25,250,217,144,214,73,103,159, +70,37,11,42,53,101,194,195,75,41,227,195,253,184,189,166, +159,141,125,6,163,69,103,155,89,164,154,4,120,130,97,31, +164,131,98,37,240,252,96,245,116,176,125,47,72,147,39,232, +80,106,171,15,133,79,42,182,135,18,152,15,135,195,208,20, +184,40,243,140,0,222,160,227,4,67,89,117,112,209,126,91, +27,101,8,137,122,178,16,192,94,158,235,138,152,179,124,52, +109,217,124,126,86,190,80,214,45,149,37,40,40,102,110,179, +76,185,67,136,236,30,62,133,124,81,154,204,146,166,198,90, +230,138,17,6,134,173,155,31,7,163,51,39,46,9,134,158, +148,84,139,34,207,205,215,178,215,239,53,87,230,115,156,0, +158,111,126,231,30,235,104,107,39,140,130,170,156,110,115,215, +245,43,139,53,254,101,229,172,166,99,153,156,18,106,38,252, +51,110,105,227,192,12,198,237,78,175,126,208,104,180,58,234, +30,103,104,217,160,56,233,78,107,14,140,204,82,103,112,121, +2,117,198,222,13,90,113,191,155,233,177,241,247,30,59,105, +254,208,73,243,250,200,59,251,244,232,230,59,65,38,19,204, +45,7,179,171,1,235,75,147,2,90,133,32,234,200,44,194, +44,67,53,64,119,96,201,80,214,149,216,217,147,162,72,174, +152,37,2,126,30,241,88,158,37,51,154,13,138,0,57,117, +9,161,227,156,184,40,0,120,22,193,9,153,162,64,242,110, +120,50,69,73,24,9,179,146,130,60,242,158,8,81,217,224, +67,125,121,96,224,178,76,86,177,214,94,79,20,204,71,64, +130,212,106,43,19,144,221,192,215,43,67,169,17,145,122,212, +78,98,250,193,40,130,64,33,77,116,31,118,9,183,218,18, +166,161,41,235,52,148,145,206,162,75,166,77,116,80,253,107, +132,141,1,50,155,241,222,189,221,62,187,90,126,235,90,253, +247,190,121,107,125,155,24,47,202,142,210,15,45,21,154,139, +69,133,101,52,214,108,202,166,103,76,52,26,235,247,22,57, +155,46,127,218,44,150,10,185,6,119,121,62,155,129,55,78, +241,48,221,28,45,169,217,165,23,57,198,148,39,54,97,218, +159,26,130,62,122,52,180,107,91,220,78,9,238,8,96,243, +98,11,173,255,212,167,51,79,125,88,10,5,222,144,51,143, +57,47,125,69,5,40,64,133,18,207,138,179,178,136,31,45, +159,39,114,100,125,217,245,106,100,16,105,239,227,122,86,122, +188,249,181,64,165,72,222,140,46,246,125,178,111,41,178,245, +232,162,5,12,122,243,61,200,194,5,54,74,0,65,78,239, +214,137,50,133,136,216,30,196,13,0,124,157,250,22,226,77, +40,102,179,153,209,24,17,42,107,29,187,48,147,119,231,87, +249,38,46,28,146,143,102,103,140,6,114,132,18,35,52,156, +95,25,80,236,69,18,215,76,187,25,246,10,10,42,105,79, +62,98,146,43,107,139,254,207,127,241,111,33,207,83,190,59, +138,60,4,33,98,108,101,54,245,103,175,239,67,179,55,238, +53,238,172,65,49,253,9,18,106,78,250,252,83,139,152,252, +72,184,124,86,134,255,83,143,173,98,95,88,46,9,78,214, +155,35,204,76,148,223,6,132,39,217,167,250,151,188,27,182, +242,126,189,49,128,249,152,43,133,194,68,125,177,234,143,110, +134,59,26,138,20,20,241,201,184,53,142,254,140,59,166,216, +173,49,185,199,241,146,99,138,142,255,201,95,204,32,135,196, +139,210,206,245,215,76,149,73,93,237,93,160,197,6,18,104, +81,138,165,100,33,96,164,36,2,41,190,157,246,168,39,116, +7,53,0,9,145,32,176,68,80,137,134,114,241,94,113,73, +68,10,248,205,74,187,70,28,246,59,162,12,64,2,24,60, +97,106,113,88,196,118,214,151,67,125,109,18,145,0,145,80, +187,120,208,201,122,25,36,181,114,88,216,22,116,57,84,187, +132,161,11,11,69,193,105,83,98,56,163,93,67,104,144,56, +34,223,173,88,85,188,23,154,235,181,189,113,128,239,198,165, +62,6,83,4,252,208,27,159,122,110,233,227,47,252,202,160, +15,37,82,89,15,245,135,20,166,149,243,46,43,44,34,51, +12,205,182,206,51,29,75,162,90,37,243,220,19,203,167,86, +170,39,87,106,11,179,37,20,81,17,163,89,115,200,211,200, +212,208,230,43,90,123,209,146,93,12,36,62,29,28,2,248, +117,60,247,224,176,185,127,168,92,102,75,130,230,189,173,154, +20,239,2,243,148,5,206,170,166,63,172,159,78,78,3,167, +253,10,246,43,90,167,211,4,69,255,137,143,171,19,50,220, +9,1,3,36,202,53,170,74,252,32,180,232,33,1,229,161, +86,28,108,59,103,159,116,234,155,78,150,226,233,89,147,30, +232,73,88,118,15,101,183,193,199,88,98,73,110,87,215,179, +166,98,161,198,252,128,154,243,5,197,7,216,37,40,26,232, +225,124,150,90,222,161,251,4,16,168,206,144,45,49,28,132, +213,57,250,98,27,222,216,115,199,61,204,148,33,142,24,222, +147,23,114,13,18,145,157,68,142,61,146,146,77,67,231,181, +51,143,187,27,119,180,35,151,206,184,242,134,185,46,68,76, +161,61,40,162,151,14,251,254,168,175,117,174,46,120,127,231, +63,252,123,165,194,73,54,83,169,64,6,176,148,201,103,206, +229,247,14,71,157,238,72,45,220,12,115,51,213,76,70,77, +8,130,191,249,43,47,46,207,151,113,124,227,75,165,119,180, +57,203,183,21,71,149,22,161,46,54,170,50,53,164,72,145, +13,217,30,62,150,6,239,96,196,164,224,132,45,145,107,51, +63,91,125,231,189,219,19,101,197,80,155,161,68,19,229,60, +162,186,41,110,199,0,180,135,49,102,49,112,150,12,227,18, +129,227,40,186,244,39,19,121,113,131,71,241,221,80,255,192, +111,233,132,104,139,175,79,1,187,125,138,76,164,66,77,28, +79,5,71,33,110,14,61,69,193,230,112,16,128,147,82,93, +200,50,202,170,47,12,237,40,36,105,72,219,69,227,144,222, +17,144,30,97,51,148,224,81,128,1,127,134,236,160,167,195, +29,167,219,13,59,45,52,29,133,35,16,153,18,84,126,200, +7,193,18,120,23,190,24,154,78,38,19,2,173,234,149,70, +10,223,67,229,8,93,188,163,196,152,228,56,173,105,66,12, +123,66,131,13,154,46,82,28,86,129,45,167,31,37,43,190, +251,137,103,62,87,200,123,213,178,50,45,140,170,226,172,239, +14,234,173,97,154,22,236,190,135,227,148,228,110,18,74,245, +103,218,63,185,82,38,15,10,36,112,188,101,160,38,217,126, +218,31,102,16,2,130,64,14,154,32,196,44,25,131,20,78, +115,224,39,153,131,202,41,98,143,20,41,34,113,1,23,60, +177,36,176,21,99,2,155,106,34,22,198,152,20,13,85,198, +59,97,170,145,78,85,158,9,227,180,66,116,66,197,177,17, +26,179,95,75,194,145,44,98,212,78,214,206,198,78,229,211, +26,11,15,22,5,238,7,219,132,125,73,37,25,113,65,128, +220,2,45,96,160,205,36,106,8,199,43,103,124,94,8,35, +181,150,187,45,225,228,13,185,65,190,88,14,170,197,53,213, +241,164,7,114,62,91,12,97,161,192,3,216,188,127,177,168, +3,52,38,78,114,1,26,38,186,104,185,226,220,189,22,210, +177,153,93,194,121,152,57,159,206,215,229,229,54,21,31,149, +74,182,74,73,6,98,187,225,146,13,213,57,116,97,167,112, +227,157,59,28,139,37,192,81,248,2,204,4,130,214,248,165, +197,34,162,80,174,25,152,28,43,192,74,27,204,60,194,247, +185,140,48,192,199,198,179,127,227,223,120,158,111,14,114,90, +27,208,136,99,142,210,81,165,86,132,97,171,217,233,118,251, +125,244,114,112,164,53,28,142,183,225,136,119,227,229,218,7, +116,65,25,141,186,189,222,253,245,157,247,174,222,91,152,67, +245,138,245,14,99,53,198,166,130,129,209,90,146,210,100,12, +153,199,127,197,90,166,49,63,44,176,177,178,58,49,47,98, +99,194,60,99,149,90,85,169,119,91,210,33,201,44,106,28, +72,151,33,136,195,174,95,36,161,75,179,32,180,82,168,33, +168,254,40,8,210,39,141,135,133,28,64,168,138,238,132,204, +222,129,236,208,125,208,96,201,118,225,2,28,96,232,32,24, +218,227,161,15,6,92,204,114,243,14,0,0,73,153,117,23, +131,229,107,243,41,244,209,230,203,100,178,33,54,226,185,167, +245,14,157,14,62,79,156,50,226,222,155,247,66,162,240,108, +38,140,87,74,94,244,29,82,166,165,87,197,197,38,33,57, +3,44,197,213,192,213,21,153,138,92,76,161,39,142,111,8, +6,35,15,223,13,95,105,60,138,208,40,139,212,106,155,102, +94,20,84,144,68,131,155,155,66,181,124,198,207,231,82,40, +47,133,124,138,56,254,181,91,123,130,208,16,172,177,230,244, +245,192,150,176,176,0,112,225,228,153,70,179,189,179,123,208, +195,31,209,27,64,168,252,98,118,7,180,8,237,114,37,215, +109,108,238,125,251,123,151,239,220,219,194,55,18,195,102,108, +66,67,78,86,25,50,15,118,130,77,172,110,78,245,21,163, +220,168,175,156,165,189,24,198,169,250,106,160,51,212,55,33, +110,202,77,130,165,83,62,122,38,61,8,94,252,41,9,54, +126,40,108,138,15,221,90,83,88,149,59,107,10,131,218,89, +151,193,112,176,27,204,46,242,131,2,140,69,58,162,173,158, +51,187,158,66,64,70,126,208,93,11,90,172,138,242,212,29, +123,20,0,201,204,156,115,251,138,115,251,61,193,140,46,195, +135,183,15,169,42,146,78,196,190,177,42,40,44,177,52,19, +118,155,33,234,37,200,49,110,9,222,0,241,241,209,237,70, +104,124,114,186,62,109,76,70,130,248,134,80,148,51,129,218, +130,143,91,222,212,57,177,89,249,255,84,201,6,243,139,160, +102,126,72,24,96,82,232,131,134,88,144,88,162,41,41,80, +68,240,13,217,41,52,81,44,164,168,117,42,151,168,120,202, +84,203,153,87,222,90,239,245,70,0,35,53,81,6,187,132, +119,172,190,75,155,241,32,64,228,229,205,59,155,87,175,223, +191,121,103,227,229,87,223,235,246,250,195,225,208,90,147,214, +234,168,31,52,7,253,193,97,163,221,237,13,76,95,83,153, +10,86,241,140,231,7,201,134,136,25,233,228,205,133,238,49, +197,211,2,169,128,153,5,114,202,117,99,190,106,95,110,80, +196,168,72,215,183,162,234,28,126,81,3,187,23,209,216,147, +159,141,98,66,133,52,187,158,165,153,89,10,54,239,68,231, +158,146,24,99,142,18,60,138,173,189,176,66,75,137,136,14, +75,246,50,36,40,176,113,158,229,150,20,212,224,177,56,255, +140,192,58,107,122,176,235,65,223,80,39,41,20,230,39,69, +40,150,214,234,96,127,224,76,96,197,25,151,53,28,176,190, +89,124,152,188,138,11,96,3,181,121,5,8,201,124,80,253, +59,0,100,100,172,237,173,185,72,104,168,143,214,191,234,74, +211,149,254,201,221,218,226,216,51,133,50,7,254,236,204,252, +175,252,194,95,31,14,149,250,130,22,122,216,150,229,69,197, +61,159,69,16,24,66,204,103,177,225,252,92,214,71,16,66, +76,220,111,222,221,91,90,40,65,133,173,206,160,217,30,240, +85,113,98,201,157,198,79,194,191,209,233,114,166,221,238,48, +60,161,86,37,202,143,212,148,25,91,42,229,1,222,44,107, +120,239,254,206,253,13,81,51,92,203,218,42,214,8,177,7, +19,173,116,162,128,30,3,206,10,61,171,182,24,45,38,86, +101,140,246,34,159,132,213,68,99,187,66,106,170,254,146,186, +40,47,12,158,176,180,42,187,80,91,178,217,160,88,14,230, +150,130,102,61,104,28,4,221,118,0,179,125,236,121,237,101, +54,59,68,166,252,34,227,51,227,219,248,169,0,27,159,151, +243,44,224,161,175,178,160,56,193,173,103,14,173,4,121,9, +240,236,131,234,108,192,236,1,192,214,112,158,138,132,238,218, +13,181,178,135,13,214,55,140,39,33,31,119,197,71,0,115, +18,103,155,108,80,82,11,47,11,61,120,169,98,17,5,133, +44,114,57,85,246,194,78,185,128,173,134,174,196,135,106,99, +217,95,45,91,13,47,15,136,214,190,248,153,207,209,118,173, +90,210,234,182,177,64,210,238,242,108,6,10,134,127,194,57, +233,152,48,83,205,206,207,230,200,201,95,152,41,204,213,242, +101,170,129,61,247,157,43,155,226,143,104,161,17,131,16,44, +126,198,239,29,140,123,253,65,7,105,216,29,204,214,212,75, +248,201,199,78,29,28,180,113,117,242,156,146,169,2,242,225, +134,181,106,201,118,245,183,77,84,209,129,173,37,49,113,175, +197,246,160,21,129,198,79,62,21,124,19,12,143,49,88,67, +166,134,15,219,32,68,188,33,204,149,134,43,19,47,213,186, +179,202,55,223,113,238,188,171,20,63,98,58,232,5,204,121, +64,247,195,11,131,24,3,93,22,136,245,177,249,100,39,47, +232,163,89,77,192,192,117,210,235,202,119,202,170,225,202,1, +72,46,134,27,243,20,215,176,184,224,138,18,196,111,193,22, +100,37,58,173,0,180,56,47,39,156,24,93,184,115,47,204, +87,36,201,216,73,18,60,105,146,176,165,106,162,238,194,129, +216,46,136,231,195,61,218,226,89,139,83,250,23,39,185,120, +32,163,11,117,70,241,166,112,36,163,66,5,129,198,131,22, +4,96,236,142,21,169,224,123,27,213,16,99,102,68,147,252, +96,161,42,181,5,46,90,42,164,106,229,236,66,141,132,182, +194,210,2,247,226,220,76,161,86,206,209,88,239,204,201,217, +59,247,247,155,29,124,209,248,178,53,42,3,183,25,239,113, +112,216,66,151,169,31,180,176,31,238,174,109,227,11,61,60, +108,61,241,216,201,83,39,230,96,140,96,207,101,120,175,145, +130,198,88,244,78,174,204,86,138,185,19,43,20,136,76,236, +132,9,255,140,219,15,91,21,53,150,147,177,240,179,138,234, +132,145,198,26,105,44,32,99,34,157,16,181,161,108,73,251, +239,125,93,68,195,146,161,232,243,83,81,44,249,19,193,35, +203,175,173,206,103,184,188,141,97,39,121,73,59,180,235,111, +73,125,133,176,160,27,113,179,72,100,183,113,55,192,195,105, +126,169,120,163,45,147,231,145,165,199,37,77,21,132,44,69, +177,34,7,175,122,190,20,52,15,2,92,57,56,231,248,2, +204,64,163,229,143,132,153,163,173,51,36,49,194,215,254,197, +127,203,110,224,251,200,198,48,189,242,12,51,149,192,177,53, +99,232,186,144,53,24,83,143,104,210,162,98,7,152,50,216, +162,52,254,160,78,175,193,135,242,12,208,210,15,17,246,184, +85,31,33,17,209,66,233,19,76,135,210,74,153,113,149,41, +188,48,149,82,102,182,154,47,151,178,39,151,171,248,101,34, +215,87,99,33,70,84,66,96,216,242,174,84,77,220,46,24, +124,38,222,20,118,58,3,8,117,101,121,22,32,59,221,65, +33,159,193,143,151,201,164,144,127,92,64,131,83,92,51,183, +238,110,63,243,228,25,25,148,198,85,102,29,101,86,133,153, +250,101,44,186,246,239,227,222,210,216,175,22,43,47,86,117, +121,96,158,162,21,162,188,70,249,41,216,12,232,20,152,10, +124,216,51,31,23,72,32,129,122,178,120,82,84,101,189,151, +60,154,110,215,242,106,102,140,235,242,246,187,186,12,41,69, +123,23,212,119,148,79,89,135,233,128,124,50,182,57,231,33, +92,176,132,212,168,154,39,206,206,158,176,129,11,121,233,58, +126,251,64,38,50,6,59,244,202,27,178,87,80,139,248,2, +188,27,204,19,45,20,203,146,47,137,139,74,164,156,246,216, +70,178,71,201,127,49,134,41,102,12,254,26,240,228,98,190, +155,12,149,169,187,2,191,40,213,23,189,82,101,38,247,221, +87,95,1,99,126,235,96,52,238,247,199,232,165,42,104,146, +58,3,55,70,11,165,192,194,8,41,115,195,17,186,186,84, +94,94,40,149,10,217,110,127,124,216,130,162,164,137,200,111, +20,5,104,40,172,24,6,5,94,108,118,17,130,112,125,171, +78,68,169,217,234,180,90,29,121,45,228,89,116,113,168,34, +29,169,229,224,13,145,133,175,188,118,109,103,247,80,42,145, +181,232,173,35,198,8,189,233,64,175,137,70,19,95,48,145, +135,250,74,2,114,162,130,198,175,181,87,197,228,104,168,144, +53,69,113,71,209,103,233,101,53,143,85,150,64,173,37,231, +241,186,97,131,115,18,89,168,124,78,108,184,146,152,24,186, +34,43,78,176,2,113,5,84,0,6,173,24,89,8,219,241, +231,151,244,237,48,231,213,90,100,91,220,21,38,73,220,224, +96,75,27,5,51,0,27,134,79,97,119,139,254,10,82,154, +64,229,96,59,84,120,107,168,47,192,103,113,204,150,98,51, +145,4,197,239,149,139,0,5,68,95,47,130,112,193,12,153, +206,150,2,105,222,19,7,25,76,194,220,4,8,0,83,85, +74,111,103,122,40,160,240,91,229,128,187,188,240,166,11,145, +241,197,72,47,61,66,207,28,169,95,88,58,149,205,165,104, +9,213,238,96,249,201,65,104,181,62,141,140,13,2,216,166, +66,75,180,152,14,194,195,102,7,14,185,185,181,63,55,83, +94,89,154,217,216,220,7,218,189,253,70,62,159,121,246,233, +115,75,139,53,248,47,235,139,152,100,122,155,12,194,152,238, +140,157,48,193,79,127,76,77,139,35,186,155,208,156,101,191, +22,253,56,36,98,45,10,203,114,205,127,48,24,248,12,68, +0,61,157,125,92,43,40,191,182,25,48,96,235,220,145,100, +22,84,5,220,51,226,123,24,18,216,103,148,218,194,54,129, +16,81,202,247,3,48,246,28,23,80,203,169,132,51,218,209, +27,173,7,210,20,125,147,252,233,137,124,17,138,56,131,192, +134,213,95,88,37,149,65,98,85,175,52,202,20,166,5,12, +153,143,86,31,46,186,169,25,151,122,236,171,67,191,229,203, +163,151,6,46,187,205,114,117,112,69,100,18,248,189,245,182, +173,197,141,81,172,209,82,111,148,33,216,153,47,113,178,44, +53,17,222,158,246,7,35,25,112,7,205,145,53,216,241,132, +189,15,66,147,120,49,62,104,64,177,236,69,70,150,76,36, +152,153,237,187,181,93,191,191,177,123,112,216,134,147,2,36, +185,111,8,197,39,46,157,36,58,95,63,108,195,66,91,173, +238,254,126,243,214,237,205,107,55,238,83,210,63,63,91,177, +190,150,35,162,137,61,108,86,146,77,24,163,133,214,98,21, +179,217,41,189,90,169,104,128,126,80,10,198,223,204,188,74, +53,152,226,144,117,209,202,242,41,33,199,238,161,79,36,248, +177,91,129,1,229,98,235,182,196,24,171,182,116,82,203,13, +175,179,142,105,121,221,76,167,101,174,97,151,43,158,151,18, +109,113,135,63,143,7,198,103,230,73,196,98,137,227,205,225, +39,188,247,125,33,196,39,98,255,193,226,108,120,72,220,213, +36,50,29,108,26,61,104,44,227,129,143,163,178,151,13,132, +113,2,183,180,134,26,239,204,230,32,4,1,171,76,49,128, +34,205,206,152,168,218,177,58,42,118,210,110,100,149,40,213, +142,78,172,92,80,183,18,195,182,248,116,126,17,198,9,237, +246,135,163,104,108,214,45,222,220,19,48,155,48,79,154,8, +5,1,134,163,9,185,196,75,43,179,161,152,67,148,82,107, +136,243,140,179,7,141,54,154,42,143,88,133,239,188,123,7, +114,92,223,220,123,237,173,235,95,255,103,175,93,189,177,118, +237,230,250,246,254,225,20,188,152,4,45,41,198,80,197,198, +187,69,120,202,24,99,204,204,143,181,231,39,232,26,237,213, +158,153,82,164,209,116,61,118,58,114,5,157,112,237,150,216, +141,28,205,125,99,213,153,100,106,150,67,100,74,162,45,188, +11,137,98,116,78,185,116,179,206,236,138,243,252,79,201,233, +140,223,82,163,117,48,24,210,50,52,237,39,241,214,188,45, +252,80,109,153,141,111,12,212,73,204,61,255,140,211,163,81, +44,102,76,90,192,179,208,160,168,90,150,82,136,214,147,171, +200,239,99,38,102,233,229,114,6,21,73,24,144,229,35,27, +219,64,168,176,98,91,251,131,27,94,111,133,56,248,106,38, +10,27,71,206,245,61,253,153,101,222,4,157,101,133,238,107, +49,47,130,36,243,126,127,168,196,136,78,127,140,188,222,61, +24,176,237,72,153,129,248,122,3,90,34,34,239,72,165,128, +27,141,85,134,175,56,6,26,144,82,11,232,1,93,46,21, +79,174,204,149,10,57,98,23,80,61,108,15,226,123,227,157, +91,208,229,250,230,254,213,27,235,151,175,220,189,114,125,125, +52,30,111,237,28,118,122,125,185,178,12,60,214,57,110,13, +247,41,193,77,105,115,130,147,197,118,42,229,44,78,49,186, +83,241,57,5,118,114,173,86,90,234,140,182,118,89,0,0, +3,244,193,39,239,111,104,3,222,187,174,15,230,12,18,139, +167,164,227,152,132,6,128,108,236,136,4,177,70,32,23,92, +57,168,57,188,15,88,146,192,142,26,105,115,233,197,6,205, +197,152,125,178,13,8,113,200,142,52,149,158,189,128,71,251, +86,170,37,99,140,114,199,217,190,45,121,117,234,146,88,55, +170,38,136,224,179,197,120,224,11,217,172,11,17,119,81,142, +92,74,212,198,204,12,45,179,214,83,6,106,229,157,116,213, +234,44,217,36,236,170,84,169,90,56,125,114,9,121,198,234, +33,216,248,120,152,36,47,192,103,210,237,161,109,70,247,54, +154,32,86,41,102,175,221,174,215,15,122,205,22,89,60,67, +188,10,155,219,13,236,9,86,113,60,30,13,104,119,169,128, +133,91,44,230,87,150,231,30,127,236,212,217,211,75,255,246, +47,127,254,196,242,76,173,82,216,220,60,248,246,203,239,109, +239,54,72,218,191,125,119,7,157,38,222,192,177,181,16,67, +54,81,88,38,144,24,213,102,122,210,158,157,0,118,116,96, +25,207,241,155,217,13,102,91,88,114,52,207,249,115,103,210, +68,145,176,13,136,81,224,47,70,185,87,56,34,35,20,41, +15,187,246,131,73,236,155,248,15,163,2,140,79,146,21,199, +159,194,91,161,170,176,184,24,124,80,3,146,140,165,47,148, +229,43,225,173,85,209,105,20,9,245,123,157,213,59,211,116, +254,177,103,157,195,125,201,176,102,221,71,148,178,154,48,97, +92,54,198,95,131,150,20,165,210,30,26,147,71,111,230,50, +41,62,34,47,144,30,245,113,238,224,132,84,201,11,152,81, +110,209,107,113,62,110,47,114,176,163,24,187,113,89,232,206, +131,158,138,114,52,243,154,91,88,74,251,179,63,253,233,231, +24,123,135,32,68,188,181,53,9,207,237,246,168,21,141,86, +23,48,1,21,25,122,253,242,246,226,92,126,255,160,215,237, +15,15,14,123,152,7,24,6,223,127,253,54,162,110,103,183, +129,159,19,29,7,230,153,78,167,115,185,44,225,168,197,133, +218,193,65,19,42,220,222,107,136,235,146,1,21,6,84,146, +106,101,99,85,69,203,107,61,50,214,209,106,75,116,98,58, +139,85,211,99,184,137,64,141,224,141,5,250,116,59,78,28, +50,102,119,198,189,84,172,155,70,221,198,172,155,198,245,207, +189,144,134,110,104,18,242,238,15,8,59,24,211,2,21,56, +144,30,129,114,1,150,176,86,182,131,102,239,224,5,197,6, +223,211,186,99,39,136,79,182,149,250,64,83,108,146,163,230, +150,44,35,53,165,179,67,194,14,65,117,78,26,191,28,217, +38,232,223,198,135,142,201,95,181,182,35,195,176,164,37,193, +129,161,96,222,159,215,242,185,68,4,233,82,82,171,101,113, +69,86,103,221,221,77,5,238,49,248,136,224,103,11,164,57, +225,254,160,197,133,188,218,56,149,121,33,144,31,236,233,247, +24,8,77,198,68,232,174,94,200,50,87,155,118,194,133,252, +82,187,155,251,55,127,230,19,189,65,212,27,4,109,84,173, +110,255,220,137,226,137,133,44,137,135,116,66,36,106,129,130, +179,181,211,234,225,66,27,7,48,210,119,174,110,86,43,249, +133,217,226,221,181,253,141,205,3,204,124,82,40,118,246,40, +139,81,24,119,191,126,120,227,246,198,119,95,185,242,238,181, +251,48,207,1,102,163,241,86,199,30,207,56,203,201,152,127, +22,57,163,125,90,125,100,74,100,147,83,230,105,235,93,139, +111,22,69,139,159,189,197,80,77,254,136,51,65,172,227,45, +222,180,202,66,25,203,168,159,89,150,114,15,53,216,151,131, +22,81,11,88,22,82,7,126,133,226,7,149,168,255,217,62, +89,104,250,20,124,155,80,155,162,75,169,152,139,242,37,173, +239,148,119,48,126,25,159,16,18,17,9,76,70,244,20,50, +39,80,64,164,248,16,28,6,48,50,42,140,13,3,67,134, +81,3,164,180,39,20,125,44,153,150,118,0,143,116,223,198, +246,7,39,54,147,105,70,170,236,27,34,245,176,7,59,194, +2,116,77,183,68,219,51,212,254,108,161,216,111,251,4,73, +224,16,185,98,234,212,74,5,14,186,125,128,139,76,49,78, +124,212,164,9,224,243,92,219,106,223,219,108,93,191,83,223, +216,110,191,240,204,242,155,239,110,193,69,231,170,133,149,133, +242,183,95,190,129,247,241,133,103,78,207,207,149,105,154,0, +147,68,255,188,125,119,115,115,107,247,242,149,59,27,155,245, +169,163,204,138,40,27,74,136,29,215,19,74,179,184,89,120, +142,48,154,202,228,35,10,60,130,54,62,247,32,141,62,248, +242,41,216,15,28,248,31,249,185,52,102,31,11,122,226,188, +28,108,176,74,66,72,40,129,167,47,137,55,42,205,80,37, +35,38,124,72,95,59,19,249,179,150,56,2,146,175,4,108, +118,166,53,228,203,111,97,178,46,46,102,206,224,56,93,57, +167,64,32,249,53,243,39,4,42,91,129,196,53,248,164,202, +204,154,10,53,163,247,43,223,169,16,236,222,35,188,110,188, +48,102,142,68,52,206,230,103,6,232,165,212,11,194,144,65, +26,135,39,105,165,232,74,237,67,202,30,176,50,9,208,43, +197,148,88,82,235,208,4,101,77,78,147,189,81,17,56,28, +164,139,149,108,54,95,254,31,255,139,191,67,78,68,163,23, +182,187,163,54,59,163,31,30,54,186,128,71,223,188,147,11, +165,219,235,13,60,53,165,66,134,104,223,230,78,139,152,237, +202,82,229,250,237,29,82,105,206,156,154,155,171,149,80,115, +40,136,225,43,17,193,63,108,116,80,115,12,213,41,240,196, +63,74,74,52,16,226,190,177,154,191,9,224,25,26,48,66, +203,58,67,45,181,197,88,29,129,106,66,23,83,106,51,7, +198,113,61,205,170,152,176,83,67,110,118,143,90,202,179,127, +90,86,42,61,111,237,186,152,33,170,188,214,122,133,160,143, +14,80,11,111,94,150,59,13,216,200,36,83,46,97,90,52, +10,78,108,103,84,27,232,242,237,111,11,60,244,17,204,62, +136,18,227,157,247,233,245,36,11,113,191,65,24,52,59,224, +135,128,61,57,56,124,187,12,108,214,236,6,20,37,69,246, +109,70,26,225,61,215,7,99,85,133,81,243,144,14,249,38, +216,166,245,109,15,87,173,37,80,80,228,35,212,16,104,228, +242,113,33,253,125,113,173,13,229,5,61,220,143,127,198,116, +49,12,15,243,160,120,126,227,176,143,160,114,251,99,252,23, +116,136,74,87,24,19,235,56,12,127,109,182,71,157,158,84, +80,128,172,55,240,182,140,30,59,63,127,114,165,170,188,24, +199,161,87,208,247,126,128,158,73,41,83,136,243,147,207,66, +243,108,227,47,69,156,218,72,131,241,75,91,208,44,162,150, +26,13,74,54,197,101,66,120,22,164,31,210,74,126,36,53, +217,215,252,16,85,254,104,202,59,250,189,106,253,81,147,229, +64,15,23,94,13,163,195,120,183,145,4,150,120,119,77,210, +145,20,94,12,124,44,110,2,5,144,32,178,16,215,54,171, +140,165,65,88,149,51,188,16,128,229,106,201,11,48,150,27, +26,61,251,20,115,60,165,203,156,125,202,41,206,152,52,195, +145,124,102,182,10,208,6,238,217,180,213,37,227,8,133,57, +75,130,18,228,18,65,225,57,35,218,7,159,180,222,34,62, +23,222,0,161,43,97,142,77,51,64,23,141,96,251,10,155, +160,85,29,37,6,198,235,133,29,130,196,237,183,195,84,38, +184,114,231,157,78,87,49,4,98,247,68,122,211,202,157,208, +252,87,74,12,235,77,50,164,69,157,7,205,254,97,163,143, +83,173,152,103,156,104,116,245,230,14,111,244,255,126,227,45, +28,52,55,110,111,111,239,181,112,150,42,233,201,160,101,162, +14,2,208,186,57,225,210,134,139,154,24,109,204,60,77,52, +253,95,176,242,199,206,31,19,120,49,230,239,247,22,253,208, +123,28,93,112,52,91,138,5,32,175,75,177,133,89,37,203, +156,127,86,81,117,74,106,81,100,52,178,108,236,208,33,18, +11,1,234,36,63,17,116,89,74,82,158,72,130,66,61,33, +33,74,62,86,147,148,137,241,7,215,5,105,232,85,185,26, +88,5,3,95,157,98,140,55,21,115,16,140,101,158,227,19, +201,234,131,184,0,29,21,90,151,251,4,5,7,191,26,233, +196,132,241,48,69,32,244,145,62,154,142,79,120,86,101,8, +42,172,175,180,23,90,114,219,30,122,119,175,9,218,76,193, +213,86,136,87,37,254,121,68,214,141,71,9,83,20,55,222, +240,149,183,222,2,60,158,51,129,163,80,147,153,149,130,173, +18,136,86,7,159,25,57,202,65,163,53,0,197,78,79,169, +239,160,163,61,52,142,224,183,191,255,181,215,223,185,74,47, +204,88,95,49,137,23,177,94,98,35,183,214,175,50,65,238, +104,193,39,38,248,113,122,252,145,144,30,215,92,142,95,240, +47,58,127,116,141,157,125,98,35,134,94,109,49,128,122,32, +29,53,111,29,59,139,103,140,136,34,197,150,236,105,242,195, +78,105,53,149,165,216,22,144,40,159,11,167,140,225,184,29, +167,66,161,85,226,202,145,211,146,190,104,166,230,1,94,103, +147,104,48,186,47,62,235,108,220,20,126,60,197,13,122,178, +182,32,218,8,42,9,228,78,72,4,251,132,93,162,198,203, +114,157,168,245,182,82,132,15,228,152,133,25,112,48,30,145, +180,143,80,244,68,136,219,206,202,233,200,244,58,20,69,34, +95,143,109,120,241,73,5,125,104,32,52,180,9,221,195,87, +223,121,61,135,73,48,82,113,97,53,239,97,230,67,121,92, +134,94,67,32,137,99,200,17,115,30,20,17,123,59,123,157, +239,191,113,239,212,202,12,48,203,65,106,96,50,73,135,198, +90,152,196,245,108,198,75,172,102,26,30,58,117,241,188,143, +101,254,16,111,180,251,236,71,80,219,36,51,77,241,178,201, +211,19,89,24,191,228,248,171,116,60,173,73,83,248,13,102, +72,226,40,92,28,178,128,28,139,53,165,31,178,187,228,213, +236,72,134,129,181,25,208,41,82,227,134,155,13,98,69,146, +89,255,19,228,165,156,121,165,90,147,255,99,152,255,88,78, +53,114,91,160,102,50,51,232,93,15,84,150,211,194,246,72, +197,96,194,50,171,15,66,224,164,30,35,132,126,170,198,7, +134,222,8,198,93,61,165,34,141,192,232,86,152,52,243,102, +115,244,164,214,110,222,211,111,227,41,142,185,198,214,222,78, +69,72,92,74,225,133,104,94,204,245,109,246,215,72,153,97, +119,128,68,79,174,9,18,65,21,96,171,183,132,31,77,186, +81,73,144,133,144,32,104,161,127,190,242,230,125,12,9,44, +72,131,156,32,48,196,103,125,209,150,240,226,71,61,101,51, +97,12,25,30,167,60,75,44,63,4,231,251,49,56,214,243, +199,168,42,172,144,113,64,61,64,176,211,214,196,214,220,152, +232,53,199,175,33,82,65,198,174,207,18,163,247,99,183,65, +79,36,176,176,205,17,144,24,95,154,49,128,13,96,82,235, +225,90,136,55,214,23,78,171,8,17,1,88,253,36,223,250, +181,213,239,46,47,83,68,110,26,163,1,153,140,13,173,50, +240,32,255,112,208,40,110,101,242,228,213,153,203,208,165,137, +228,8,0,73,83,133,100,4,152,205,65,229,26,121,80,229, +197,53,230,196,64,46,58,16,226,187,113,177,113,225,98,41, +170,49,62,187,129,174,234,43,76,225,50,5,2,20,244,82, +37,82,172,68,157,86,255,100,245,153,195,118,132,255,154,207, +189,189,103,73,10,71,1,173,131,72,26,142,168,190,230,37, +196,76,8,45,65,142,143,95,88,36,210,244,103,175,220,54, +95,67,80,129,229,49,18,140,81,180,81,63,171,191,196,14, +18,179,137,226,99,229,21,79,169,45,62,152,16,217,113,132, +12,145,217,212,127,209,148,245,17,190,239,133,22,169,7,104, +55,38,190,233,197,224,222,178,149,130,41,255,222,21,191,177, +235,175,93,247,149,22,6,197,228,164,238,179,151,212,139,23, +127,166,81,68,81,53,89,59,91,29,8,31,147,253,151,9, +196,132,41,110,170,208,149,78,44,20,59,65,97,22,66,229, +124,116,100,250,53,21,228,196,81,141,25,62,107,165,213,10, +102,232,94,6,95,213,198,31,12,95,55,222,72,94,73,150, +62,168,136,199,150,68,223,188,92,124,56,146,206,133,141,207, +119,32,205,151,15,197,210,128,172,105,55,35,126,144,14,153, +252,163,149,212,251,12,201,255,39,31,181,60,59,76,229,150, +148,63,232,104,66,5,63,10,137,104,162,228,164,129,71,235, +187,10,202,31,54,7,92,176,190,213,4,66,94,251,133,79, +93,130,235,130,159,241,185,76,121,231,52,70,43,253,197,178, +71,209,165,61,120,144,108,30,48,214,143,0,136,211,9,38, +56,197,4,21,35,20,107,100,239,99,179,166,48,103,130,159, +121,46,134,217,8,194,163,140,110,15,157,16,30,69,112,135, +236,152,229,179,38,161,182,229,163,118,42,97,112,70,190,108, +107,75,40,245,207,116,90,102,5,173,99,154,155,101,164,138, +196,26,102,171,52,22,226,245,166,98,141,124,106,252,44,172, +62,212,134,108,195,124,132,181,34,162,120,33,187,65,53,27, +248,87,77,216,193,114,87,85,172,153,84,51,91,26,128,213, +1,245,227,67,7,96,25,18,176,205,44,9,87,6,36,242, +42,164,236,112,101,132,108,230,205,161,78,220,176,86,189,130, +56,238,188,55,226,59,119,219,33,247,181,237,93,82,11,84, +178,19,57,43,53,249,166,193,233,176,19,46,204,164,57,211, +238,6,183,214,154,45,166,170,225,25,31,6,245,195,46,161, +90,162,193,82,59,205,110,48,38,202,68,117,49,138,168,253, +6,177,181,55,145,117,71,182,67,76,127,150,116,142,147,212, +191,252,248,125,164,54,33,208,227,76,53,246,218,196,251,5, +254,106,117,25,110,106,24,105,107,189,128,13,5,228,244,147, +138,225,181,234,254,202,89,130,183,254,194,138,58,84,43,164, +222,148,59,91,233,241,70,218,73,227,55,250,167,114,253,148, +87,168,0,5,96,108,222,18,78,156,151,182,105,38,240,224, +88,65,191,32,18,41,197,18,35,221,148,212,32,50,1,82, +211,94,169,97,171,153,170,140,162,142,85,1,106,170,224,240, +178,112,30,69,70,21,51,232,20,166,14,141,215,114,153,245, +27,192,225,161,197,237,187,81,121,38,234,180,193,146,102,234, +49,31,102,237,210,153,176,101,156,177,36,231,171,61,34,33, +151,190,58,44,116,21,43,38,27,49,90,223,27,238,212,85, +179,2,66,111,95,221,165,227,204,206,94,27,140,254,241,239, +252,64,62,122,147,252,55,17,123,83,18,132,154,205,22,152, +72,65,107,68,88,180,12,138,63,172,173,88,38,25,219,229, +230,10,227,208,141,1,158,218,236,83,205,101,114,96,83,128, +226,247,140,157,161,166,221,187,118,240,145,29,101,77,123,30, +160,30,246,187,252,203,190,115,253,117,145,194,252,73,173,62, +164,195,66,207,175,250,193,200,7,21,188,222,40,56,16,4, +230,29,82,205,178,77,222,80,161,34,106,48,178,154,230,194, +52,16,236,60,172,67,23,151,13,118,225,154,40,88,9,84, +198,57,14,213,42,146,69,150,240,88,144,3,36,27,130,148, +42,108,15,200,215,79,11,176,213,179,122,43,64,34,224,0, +67,70,113,181,156,150,196,53,147,177,161,55,68,90,243,107, +232,161,71,26,191,174,156,49,18,122,13,177,16,147,9,173, +11,41,155,74,103,138,195,65,203,20,28,58,217,148,179,221, +140,6,102,156,8,177,192,173,125,245,12,182,202,8,173,14, +247,14,200,165,208,68,25,194,127,198,211,34,172,108,56,221, +98,102,192,154,28,28,153,49,6,185,7,172,154,247,81,219, +15,97,99,161,137,61,130,58,158,122,94,142,118,192,49,140, +39,23,8,253,41,172,2,114,226,74,229,45,60,162,240,104, +152,64,165,201,113,51,146,61,208,28,41,241,16,147,201,68, +146,204,195,194,59,220,246,201,253,133,230,64,43,182,106,13, +63,148,200,44,162,16,25,27,49,173,36,96,81,140,250,192, +10,21,121,209,176,20,169,120,162,11,5,221,236,155,113,246, +6,227,9,33,104,126,59,114,151,36,9,46,22,171,204,96, +140,243,77,232,79,224,66,187,74,170,207,193,207,177,92,53, +225,60,12,244,19,40,4,64,73,134,106,217,61,220,149,221, +227,67,136,250,74,131,94,172,3,162,224,168,242,180,195,79, +200,71,62,113,59,114,88,162,143,158,82,190,12,170,204,94, +55,243,236,133,34,172,146,60,23,203,39,89,157,119,111,238, +237,31,146,22,67,211,74,186,60,25,22,106,120,148,193,205, +164,212,139,46,197,187,44,193,197,23,152,215,62,64,127,86, +198,217,245,213,234,30,3,105,34,254,44,102,113,13,163,61, +158,222,109,185,212,132,70,99,252,140,237,103,147,140,39,36, +104,222,43,126,67,148,78,195,211,32,65,52,82,54,53,54, +0,10,125,38,75,138,183,232,102,135,88,160,216,154,234,46, +195,49,229,19,242,3,240,90,145,154,150,213,31,13,124,98, +20,32,164,196,81,89,250,1,14,57,204,127,17,119,71,218, +10,112,106,208,18,35,38,20,60,210,121,214,23,5,10,62, +140,176,132,64,89,68,148,23,176,87,61,6,202,42,30,28, +252,121,20,194,89,95,65,31,194,69,165,212,151,212,207,134, +28,121,31,147,77,131,83,23,19,30,210,164,189,73,101,46, +34,164,197,219,86,102,35,226,148,252,60,208,2,233,214,33, +161,117,39,79,42,73,59,124,230,132,54,193,136,80,198,124, +166,63,138,230,103,114,216,24,86,230,245,250,193,219,87,119, +190,249,210,77,114,162,236,25,246,185,81,124,98,201,247,32, +37,78,0,126,128,115,78,232,111,226,115,127,64,11,53,39, +109,214,221,84,76,234,5,182,25,64,124,143,121,242,244,154, +137,191,116,106,3,138,9,75,10,78,220,164,150,211,122,184, +252,85,163,107,164,215,254,86,64,152,23,143,76,175,235,171, +74,173,172,8,6,239,207,90,227,153,148,223,68,250,36,165, +151,34,166,144,180,122,180,127,184,162,25,232,130,133,142,237, +207,207,214,148,51,108,115,5,223,77,30,141,204,50,241,100, +192,64,128,145,228,111,99,85,160,133,129,200,59,19,82,192, +148,54,40,122,232,74,176,71,218,168,99,8,114,179,186,174, +66,134,67,193,67,174,6,122,236,133,103,181,93,208,78,229, +16,80,231,224,232,212,69,13,245,101,193,169,127,235,182,201, +1,167,126,74,201,243,70,69,146,132,108,118,130,171,107,253, +172,23,170,214,23,201,221,13,206,44,231,23,102,178,134,158, +98,20,249,150,40,165,120,77,13,227,140,105,107,98,110,26, +202,155,208,165,177,25,166,30,174,41,231,156,202,66,123,221, +4,170,41,207,180,20,105,86,223,176,196,41,122,71,162,209, +190,42,38,202,88,27,53,189,166,205,249,184,108,57,254,192, +233,251,83,199,55,144,206,201,247,38,199,238,204,227,254,24, +147,174,47,132,236,116,57,233,150,164,192,104,76,75,96,147, +142,48,239,240,201,165,201,96,55,221,198,129,223,118,71,195, +216,39,153,51,151,211,121,34,68,75,103,132,46,89,110,252, +9,48,188,150,247,156,93,246,209,50,112,212,145,68,202,162, +131,61,217,58,248,78,113,106,203,138,95,68,25,86,22,1, +117,20,182,11,10,203,182,122,86,70,58,199,185,66,216,110, +200,81,2,219,52,5,167,50,221,232,42,196,203,25,126,190, +116,134,34,138,8,142,2,216,235,55,112,208,120,213,249,2, +133,196,133,82,6,54,128,143,173,221,15,246,155,65,87,245, +111,110,183,31,144,223,205,110,35,26,111,151,70,134,224,164, +168,54,150,110,86,237,180,190,107,78,153,114,0,243,175,101, +176,150,163,218,63,172,20,59,78,97,147,227,163,32,131,57, +99,153,164,193,200,112,28,123,153,137,177,24,183,191,125,110, +194,138,13,251,156,236,0,225,103,142,165,136,198,60,52,254, +20,36,141,157,98,236,156,167,133,171,239,60,253,73,5,40, +108,70,19,94,52,60,153,242,151,138,79,250,143,189,16,87, +84,219,228,82,153,113,166,170,141,101,85,200,222,208,132,126, +138,73,45,236,117,8,249,218,60,106,73,65,110,184,226,106, +243,1,9,143,40,150,165,10,181,176,206,253,155,70,98,25, +181,182,185,175,30,234,38,18,66,29,140,140,124,149,9,6, +226,237,144,172,210,56,200,73,164,4,71,185,219,98,245,88, +65,124,49,166,250,220,185,12,241,233,85,51,11,17,27,2, +119,139,52,32,180,176,229,44,204,150,129,231,3,84,95,195, +45,182,26,161,180,86,249,187,195,185,106,230,176,53,254,187, +191,246,124,127,104,37,104,188,28,6,78,91,32,29,63,78, +40,210,98,105,205,246,227,99,71,98,201,23,107,166,22,33, +139,133,5,73,127,30,163,179,169,168,155,0,249,0,246,83, +177,40,192,140,141,60,165,63,139,223,17,11,53,187,199,148, +135,123,88,226,48,64,246,47,50,143,117,1,27,22,194,78, +179,134,98,182,215,69,67,27,119,228,114,139,253,156,100,102, +176,232,36,213,163,178,170,223,121,28,115,103,105,26,187,193, +220,74,128,82,3,149,148,170,62,235,8,246,172,184,98,188, +140,52,175,16,137,133,211,162,220,202,80,225,24,126,11,90, +236,27,174,103,9,248,160,102,61,92,88,245,90,117,234,70, +227,136,174,106,45,48,240,85,57,28,193,93,217,1,182,46, +14,147,131,201,203,188,45,26,83,243,32,90,187,1,243,143, +58,205,104,126,153,64,60,217,212,202,167,226,26,66,17,210, +223,208,121,216,106,227,17,81,223,165,153,52,222,237,90,57, +125,115,173,179,60,159,249,220,71,151,77,132,136,21,137,229, +221,132,200,98,226,178,124,117,42,192,98,68,143,164,90,252, +172,13,221,197,138,204,132,31,198,140,81,155,125,170,164,152, +227,41,119,157,12,55,49,69,81,49,105,78,43,164,44,129, +226,15,140,233,207,226,55,165,236,73,226,165,114,35,172,78, +111,35,236,50,233,8,148,27,99,159,237,204,179,164,28,178, +133,175,191,41,126,107,58,10,42,175,9,69,84,91,13,36, +140,87,147,87,65,79,75,167,253,221,117,74,132,116,13,124, +149,74,65,27,42,2,15,46,163,212,198,100,58,5,4,137, +192,149,207,98,175,152,78,60,210,66,209,45,161,251,153,121, +117,114,38,102,41,127,144,41,28,135,187,170,161,10,190,21, +186,81,154,173,96,191,33,91,231,233,143,155,0,245,66,68, +74,56,217,50,248,219,150,78,193,90,9,62,80,183,70,221, +239,152,62,151,205,118,29,187,80,188,0,207,195,48,162,251, +26,70,97,183,31,126,235,141,6,12,22,109,232,203,159,63, +61,73,238,51,64,170,166,253,135,88,98,44,6,205,187,196, +60,115,194,252,126,20,255,180,73,32,246,173,38,253,53,76, +238,201,177,139,227,126,40,177,34,99,114,147,117,55,7,19, +6,107,8,121,66,202,49,247,156,108,133,9,79,22,21,218, +196,81,150,146,37,35,175,194,134,141,120,43,84,15,150,9, +55,244,237,203,202,139,81,128,198,212,75,224,55,209,186,15, +101,56,34,23,217,187,212,17,178,9,248,153,88,120,182,229, +36,127,88,15,0,118,33,144,128,183,210,74,205,60,59,213, +233,227,25,48,254,29,237,6,18,198,87,40,230,83,1,55, +223,196,12,16,193,143,227,241,233,236,30,18,192,173,81,111, +88,24,245,209,2,79,245,77,121,121,74,33,208,133,213,8, +213,102,227,86,132,176,68,169,62,216,149,75,140,45,194,15, +67,53,229,101,126,38,182,52,72,159,146,220,195,31,148,247, +104,59,101,59,200,52,186,227,74,49,253,75,95,58,103,60, +130,71,75,124,4,153,149,118,49,174,199,61,215,83,41,120, +204,5,118,140,13,198,48,76,136,53,142,182,91,156,140,34, +19,19,232,132,237,62,128,174,197,223,34,58,165,108,163,6, +197,146,242,24,126,134,93,43,175,57,150,97,20,191,179,76, +36,180,89,207,25,5,133,68,27,112,217,224,115,33,246,203, +218,161,184,34,210,128,7,246,203,123,2,158,90,1,229,125, +213,78,16,205,33,205,208,216,39,74,87,52,157,35,149,172, +109,118,53,175,181,155,157,213,199,65,38,197,149,220,240,45, +15,223,24,140,145,214,23,112,75,249,95,76,29,61,248,145, +206,195,245,88,120,32,205,73,208,165,209,5,22,11,239,134, +56,172,111,147,255,18,202,75,183,8,107,21,59,101,7,144, +53,200,177,154,165,228,148,194,73,189,85,169,198,140,3,43, +233,20,3,0,79,202,5,233,151,71,123,216,179,43,20,212, +123,148,114,66,139,63,253,233,83,228,168,25,216,38,36,104, +150,222,138,67,107,127,113,139,169,51,46,245,59,206,93,77, +113,250,84,104,77,20,22,121,152,142,241,61,195,3,167,216, +60,96,221,79,40,250,135,158,53,176,77,81,124,31,126,241, +135,90,89,136,144,67,53,96,215,99,11,30,212,213,245,135, +218,37,84,6,54,56,236,81,99,198,205,224,64,128,161,226, +144,92,55,22,17,62,217,58,12,200,114,183,68,15,109,241, +14,104,40,100,20,242,185,74,255,53,121,254,214,179,97,124, +43,177,183,147,143,107,55,125,2,23,235,119,228,229,33,25, +64,57,162,198,58,66,36,203,207,183,195,171,66,37,115,224, +155,237,25,183,56,193,4,35,113,101,135,44,154,208,15,142, +83,244,32,130,127,228,56,21,36,83,231,87,34,50,4,90, +13,204,196,104,102,169,141,59,233,189,87,225,10,163,15,61, +189,168,254,110,86,208,249,30,181,190,187,205,113,103,232,204, +87,21,160,167,116,212,98,244,111,253,194,165,247,241,207,137, +251,227,125,76,117,130,220,145,44,180,0,199,130,144,85,182, +47,140,53,79,169,36,86,122,197,106,167,81,113,172,74,105, +82,170,45,231,60,126,55,9,149,246,178,24,60,75,194,246, +35,142,209,159,253,8,105,182,106,150,54,210,42,112,67,39, +196,147,194,242,209,51,146,88,43,55,228,31,60,10,65,69, +162,27,149,71,188,74,78,103,106,145,119,88,65,133,38,108, +58,5,223,4,245,68,174,25,139,150,241,118,194,244,96,152, +154,30,105,100,2,47,228,3,49,246,241,1,177,33,102,231, +21,218,149,108,19,79,14,129,159,80,3,156,188,215,144,113, +137,9,200,30,50,78,78,109,14,155,15,128,219,154,175,68, +202,133,17,138,17,236,129,3,246,196,238,253,8,251,114,102, +62,34,64,113,176,39,245,255,179,191,120,159,74,196,131,237, +232,15,255,159,43,184,250,210,30,10,141,79,246,26,63,153, +132,68,76,139,185,170,255,233,231,102,208,107,8,208,179,39, +62,246,236,18,17,123,179,80,199,84,146,24,39,131,208,145, +136,154,128,122,180,176,241,171,98,216,12,68,6,0,219,58, +66,202,140,57,55,65,209,238,216,201,109,2,152,69,238,129, +79,159,188,209,132,235,62,200,63,45,126,122,132,5,225,169, +178,137,98,44,4,68,128,4,130,50,208,244,48,42,20,235, +49,97,194,213,11,178,244,137,44,82,10,67,237,146,18,183, +113,94,155,24,2,32,201,139,102,84,71,249,160,49,69,90, +166,35,69,213,180,118,165,190,144,32,59,198,159,201,219,224, +74,106,178,81,44,41,247,193,156,80,110,32,53,161,99,37, +110,83,200,200,83,158,137,117,112,253,230,157,16,30,139,111, +157,63,141,54,164,111,8,153,242,110,108,23,204,158,78,91, +5,164,176,238,44,169,111,94,164,188,130,229,104,235,118,100, +186,240,69,207,127,118,167,215,113,171,229,42,246,110,1,103, +44,89,191,82,238,12,207,160,131,81,41,253,185,23,230,201, +169,233,245,40,235,140,114,166,74,123,34,144,44,101,198,82, +240,72,26,197,90,134,37,186,35,234,180,230,93,108,228,77, +49,48,173,78,226,215,198,34,208,160,104,176,156,216,247,83, +235,222,188,108,242,148,189,224,72,15,18,74,38,69,118,114, +149,125,219,216,98,17,119,246,181,172,72,38,109,109,63,46, +208,85,221,87,219,161,109,185,146,178,113,103,52,228,77,102, +59,115,199,56,99,221,81,76,84,107,200,116,136,161,224,228, +205,193,18,15,14,103,236,208,93,178,55,176,1,120,86,180, +72,63,26,218,185,153,248,20,239,236,165,2,165,229,171,45, +165,242,213,212,17,165,47,221,4,126,142,107,84,101,114,102, +150,61,226,83,217,52,38,164,213,109,70,54,23,4,71,40, +39,177,56,49,24,96,188,100,117,96,92,202,239,115,160,72, +11,94,92,50,143,217,133,52,37,186,123,189,61,179,212,107, +52,58,104,200,164,152,139,144,192,208,112,132,74,145,17,106, +67,210,242,183,235,253,86,119,72,138,69,111,56,94,152,49, +149,9,70,98,77,101,219,49,252,44,191,156,144,163,174,180, +92,237,129,187,69,194,112,206,233,121,189,155,137,132,90,54, +24,171,36,83,64,38,239,48,213,113,142,180,42,67,194,182, +121,128,190,85,252,230,15,226,167,221,195,130,146,200,140,240, +167,149,5,46,24,142,241,216,180,90,65,121,110,184,126,135, +244,201,97,42,61,116,83,67,42,144,195,49,162,99,232,167, +134,27,119,135,233,172,250,99,22,171,186,160,221,30,54,234, +195,1,13,37,124,74,233,152,236,49,76,231,116,158,198,156, +189,158,222,243,176,174,251,226,233,160,121,136,213,200,4,30, +116,8,106,99,135,135,123,65,187,53,242,252,145,11,147,139, +198,253,158,170,156,11,21,226,180,82,113,97,0,88,20,24, +12,80,255,212,168,64,214,160,12,227,17,21,186,166,238,215, +170,199,48,103,248,42,21,88,176,244,91,239,70,111,124,43, +98,147,13,122,27,42,159,84,226,161,73,106,226,151,25,107, +249,185,179,217,86,151,193,34,206,237,141,94,179,205,23,14, +76,149,146,161,45,131,34,183,56,75,243,56,47,85,253,183, +73,160,98,204,83,16,17,214,32,238,15,5,155,148,42,115, +231,55,16,40,86,85,162,70,65,241,44,70,11,23,112,192, +53,246,50,220,119,54,115,128,187,158,82,1,80,28,94,214, +193,241,63,35,189,27,175,213,197,112,123,53,182,157,92,204, +187,153,167,116,1,190,224,238,224,0,55,41,251,132,15,46, +210,119,41,25,183,95,252,207,103,233,47,130,10,67,163,95, +162,25,228,68,117,91,180,206,51,162,55,151,38,69,152,27, +205,101,246,54,60,24,59,88,74,41,107,41,63,152,114,25, +11,66,121,198,125,242,99,97,205,253,27,255,217,127,244,95, +213,247,251,219,195,212,118,157,60,96,58,220,142,62,180,138, +15,123,252,244,165,234,223,255,39,55,255,234,23,22,248,197, +248,5,255,135,223,120,93,77,157,148,54,67,182,133,233,26, +75,2,141,106,106,76,215,209,40,32,99,248,247,126,253,223, +75,198,242,60,240,45,232,253,80,43,228,107,249,108,45,57, +248,241,5,137,118,65,130,38,131,20,73,169,199,124,41,194, +23,106,18,80,71,196,235,89,85,186,143,174,158,35,77,70, +34,92,18,206,184,17,52,218,201,136,38,250,159,188,245,146, +247,249,159,122,26,101,2,67,133,142,234,166,81,164,83,201, +163,209,140,33,179,63,124,105,151,250,152,90,57,83,204,167, +144,133,36,7,219,238,48,54,189,55,254,39,206,251,5,193, +99,182,98,194,96,156,166,178,37,235,123,33,234,160,38,0, +67,205,129,42,96,167,215,95,15,17,135,107,183,34,236,28, +166,45,239,109,68,165,42,115,98,24,18,19,98,143,2,228, +185,167,153,71,1,132,17,73,92,252,169,166,141,149,240,196, +226,83,16,37,121,135,84,124,154,116,24,37,59,241,83,171, +165,244,229,91,45,72,142,114,195,217,106,150,18,67,138,227, +227,142,6,54,233,215,144,158,146,216,20,27,140,19,238,147, +181,70,147,111,147,80,8,213,235,9,91,133,46,152,212,244, +250,216,54,33,254,119,245,212,82,124,35,26,116,195,202,108, +216,172,43,58,1,69,94,122,86,188,20,183,209,220,170,12, +86,188,51,172,187,105,26,199,168,45,202,201,136,84,120,149, +56,223,78,185,19,5,2,203,33,179,96,25,219,132,77,239, +87,138,153,63,250,115,181,4,182,213,18,71,249,162,38,91, +20,248,76,158,254,52,115,38,113,56,38,20,66,76,14,68, +160,234,253,77,39,96,168,144,2,119,219,12,131,110,109,172, +104,191,27,228,75,194,35,87,32,169,80,253,82,78,93,116, +246,215,229,60,146,153,68,47,69,243,218,203,215,47,195,2, +25,44,66,223,32,249,8,131,136,36,40,50,157,190,123,185, +69,208,225,197,75,149,165,185,28,89,1,215,238,30,78,218, +239,218,220,109,81,160,73,227,158,212,157,197,237,127,18,135, +159,20,227,36,126,41,99,72,20,202,33,25,161,234,129,97, +114,103,176,8,7,125,106,128,67,134,81,32,20,241,156,161, +32,211,200,148,69,198,14,129,40,1,118,249,140,142,145,115, +152,73,248,137,48,67,47,156,122,18,18,34,113,230,16,19, +214,56,122,50,148,227,141,157,91,27,61,44,168,19,203,148, +92,11,87,170,15,99,57,104,43,39,142,82,183,99,36,31, +204,25,77,214,154,37,20,66,232,12,83,65,173,214,199,33, +150,171,44,7,147,167,67,204,149,76,112,107,72,128,40,246, +95,58,29,238,172,209,209,52,154,89,8,169,112,195,85,4, +222,18,162,45,60,224,46,113,19,36,32,137,23,52,152,147, +99,78,48,142,105,96,73,42,247,108,73,149,112,168,156,100, +227,99,96,88,202,179,213,47,182,234,204,48,81,99,73,198, +140,52,161,26,77,66,33,172,111,105,220,7,224,97,242,51, +231,128,187,60,233,152,147,114,35,140,105,180,105,3,29,157, +102,184,187,21,165,179,162,87,224,192,131,131,157,164,250,253, +67,185,9,231,79,228,175,223,190,130,167,141,0,211,44,89, +91,98,164,196,182,130,211,203,148,113,7,80,30,212,70,18, +212,214,30,3,218,166,201,246,38,205,208,192,105,106,244,77, +203,125,131,226,52,37,42,89,52,152,88,70,138,240,131,236, +104,189,134,98,105,138,238,17,126,33,158,29,181,192,84,207, +168,16,183,159,45,22,48,161,37,197,20,49,117,137,0,94, +252,16,57,205,17,46,33,156,25,233,108,245,149,215,127,128, +57,223,29,59,21,168,211,164,129,34,101,231,42,89,248,230, +94,99,184,127,56,160,9,251,218,150,50,71,98,18,180,218, +140,205,23,181,29,183,108,73,204,36,131,52,105,248,37,87, +22,66,49,132,180,240,185,152,54,61,100,205,152,154,152,140, +14,160,48,0,171,204,49,45,91,164,6,253,225,242,54,29, +108,85,101,65,252,11,15,223,233,199,40,19,197,189,49,71, +179,10,8,19,75,191,100,32,84,23,129,208,185,185,209,39, +196,2,48,56,101,168,43,190,126,247,80,195,94,38,26,169, +205,9,159,16,159,73,53,141,49,253,128,145,62,204,6,86, +194,49,97,97,196,33,253,22,171,132,230,105,56,171,0,114, +38,135,159,201,54,104,167,100,34,238,154,169,34,100,53,83, +149,11,202,224,26,174,156,141,178,153,168,92,195,117,237,209, +254,27,134,140,105,200,86,72,123,97,163,239,254,230,55,41, +2,149,225,119,98,169,0,118,127,249,243,231,76,51,223,35, +45,70,244,108,145,155,224,103,69,227,195,252,130,71,119,109, +66,101,33,249,25,208,92,125,55,36,136,111,227,33,243,39, +194,218,66,184,117,95,253,215,239,92,81,212,2,196,8,69, +145,85,124,184,31,18,144,82,186,84,136,94,19,210,139,86, +147,211,82,116,11,14,62,250,226,71,177,255,58,180,164,130, +38,21,48,142,174,111,197,169,246,216,245,37,53,151,117,86, +150,138,159,122,110,69,190,180,184,146,119,98,203,79,202,209, +44,144,113,90,247,163,131,230,199,253,164,132,66,168,166,180, +13,219,190,47,108,30,132,116,166,178,77,25,46,60,29,146, +238,118,254,105,153,16,11,171,162,54,13,190,199,108,80,15, +140,8,87,14,36,216,235,226,205,33,141,49,181,118,147,44, +209,30,206,24,184,225,213,109,51,37,196,212,247,198,110,23, +55,58,108,211,144,153,18,254,224,241,243,51,42,67,51,42, +139,30,227,68,252,152,133,198,140,244,199,93,210,71,125,93, +66,33,36,174,132,146,66,232,209,118,197,167,37,48,201,165, +196,250,177,247,241,63,99,224,67,139,72,53,194,85,200,75, +83,114,21,146,174,72,18,51,58,14,47,44,207,4,108,2, +186,216,188,249,238,171,72,64,64,185,131,31,21,13,150,182, +95,19,163,143,247,185,120,186,172,136,129,237,235,99,117,24, +99,7,90,58,61,206,72,141,157,255,1,35,125,152,221,73, +12,242,222,85,21,233,147,72,160,130,80,230,187,84,137,17, +134,245,29,225,7,114,176,208,155,111,135,247,174,133,165,106, +64,224,16,73,57,183,26,226,218,198,216,184,127,45,36,124, +241,216,115,99,28,229,111,188,253,78,161,144,45,105,28,182, +137,240,16,154,177,32,26,19,158,102,198,42,135,163,124,219, +142,138,177,176,197,53,19,134,157,198,214,161,94,19,103,41, +62,204,175,120,52,215,38,148,10,105,182,129,23,6,90,196, +97,141,94,3,11,37,156,68,101,5,88,34,249,76,117,99, +136,107,180,88,97,114,159,242,176,41,39,38,170,76,186,62, +20,68,74,0,169,223,185,98,31,207,234,220,146,55,30,247, +240,113,171,76,201,8,52,141,26,52,102,2,230,252,187,183, +137,250,211,1,221,249,223,127,251,77,131,172,65,113,74,130, +198,51,106,130,196,6,202,105,69,253,163,65,230,199,254,148, +132,66,168,86,123,38,243,10,117,134,20,86,102,149,218,209, +232,116,168,193,100,164,237,51,161,65,44,122,232,12,89,72, +243,208,108,46,34,255,17,55,219,233,75,17,175,53,45,142, +188,185,149,215,246,54,195,133,249,60,138,105,13,245,199,116, +26,137,75,62,13,90,215,238,52,250,163,241,205,123,7,166, +196,55,198,47,166,69,131,165,29,3,98,56,104,66,185,104, +114,237,194,167,62,162,244,39,2,241,228,215,144,149,67,106, +157,154,119,7,154,135,98,42,120,181,186,102,210,33,88,106, +174,140,41,138,143,148,176,90,32,136,17,113,49,74,13,137, +225,115,43,119,50,158,179,75,69,7,209,96,245,103,156,120, +63,77,19,139,221,131,62,109,132,126,253,183,223,82,152,120, +162,200,76,42,9,13,162,118,214,75,108,81,36,20,197,132, +82,33,243,67,115,121,102,93,58,115,39,148,142,117,227,109, +229,204,113,227,12,105,62,216,139,196,43,90,135,164,222,80, +18,5,183,164,103,27,163,95,133,162,218,52,4,160,75,166, +2,217,142,97,171,117,175,77,174,162,73,11,90,44,187,134, +216,226,27,239,118,245,110,227,31,253,222,187,7,116,246,138, +157,47,6,164,35,115,208,182,115,208,201,247,181,175,248,177, +153,220,163,184,48,161,16,34,207,168,119,36,126,132,132,163, +67,55,117,172,180,239,131,61,106,184,51,65,140,146,162,137, +24,248,27,183,52,123,70,169,77,202,216,15,177,247,145,139, +102,14,13,208,234,96,105,165,244,181,63,249,159,109,59,134, +95,120,49,255,212,201,76,172,144,26,118,9,131,253,193,101, +154,97,90,155,207,248,180,167,182,188,117,172,89,14,250,129, +119,230,39,216,138,154,184,183,67,102,41,61,161,148,75,65, +49,6,45,217,104,28,70,140,9,32,49,231,89,85,74,97, +108,151,153,126,151,214,175,10,19,86,231,173,230,79,4,81, +90,171,70,253,248,225,173,181,127,200,200,115,56,101,33,199, +132,208,88,65,177,170,139,241,194,88,144,12,189,89,91,62, +166,61,91,151,22,59,104,18,202,67,205,202,38,148,10,241, +121,170,33,191,166,60,227,166,81,190,33,102,62,10,139,230, +55,101,52,18,140,181,37,105,159,2,29,18,207,223,125,85, +49,41,2,20,40,62,196,158,24,50,9,204,96,150,201,153, +4,254,193,142,67,194,41,67,75,83,238,189,157,184,21,222, +212,95,54,37,74,177,210,35,18,60,106,203,21,235,161,34, +218,159,96,43,62,138,151,36,21,66,149,177,137,97,170,237, +73,79,212,98,70,80,74,63,36,253,151,188,111,53,240,50, +45,76,53,87,134,89,176,84,167,22,66,178,206,201,66,38, +101,147,180,124,245,56,213,220,5,42,207,114,95,249,147,255, +164,217,15,15,90,227,253,182,9,29,77,255,183,172,115,98, +242,217,220,250,248,102,244,24,91,85,49,9,51,37,20,195, +132,66,168,62,67,42,223,149,230,66,228,193,150,131,163,55, +170,73,141,47,92,57,224,79,138,5,200,137,66,247,209,224, +132,150,134,2,17,199,215,160,121,197,167,72,194,87,28,3, +250,185,127,235,79,80,108,119,155,138,248,106,108,228,4,196, +56,168,100,98,19,177,228,179,61,129,98,71,140,197,140,171, +30,0,247,81,80,214,195,124,70,66,33,84,149,125,95,137, +48,88,244,154,4,102,88,162,60,156,76,68,55,205,57,222, +123,69,6,6,19,107,148,63,113,206,163,99,2,141,85,55, +239,42,142,8,179,197,83,122,176,3,144,202,27,86,93,28, +113,40,199,217,58,144,77,207,204,166,9,21,30,51,246,4, +150,233,185,56,49,1,45,122,214,81,115,68,135,15,179,178, +143,236,218,132,66,136,69,191,121,79,152,105,110,247,182,115, +229,53,181,184,69,212,209,205,1,130,35,111,31,76,40,188, +58,220,214,208,19,240,163,235,41,124,149,238,85,132,133,193, +207,246,50,101,7,128,40,13,51,250,221,34,222,236,239,92, +167,233,189,243,185,231,42,22,169,169,190,105,173,118,209,154, +53,15,237,205,54,72,56,226,157,137,13,218,39,85,157,1, +60,116,22,219,230,141,248,131,58,68,209,102,42,146,228,83, +145,254,85,21,217,152,44,10,160,242,240,116,163,163,18,202, +160,70,149,226,10,152,176,198,107,192,123,77,39,8,226,195, +115,203,180,136,87,78,62,36,123,123,115,80,204,169,185,204, +68,230,77,14,52,14,232,72,65,125,159,59,230,3,187,240, +161,153,138,109,90,66,164,130,138,56,202,84,193,146,138,28, +181,200,25,170,21,14,125,251,159,248,168,115,242,146,10,213, +104,211,135,79,156,246,108,40,59,84,192,80,142,35,223,77, +16,82,18,213,237,132,197,106,68,39,150,207,126,242,31,165, +60,83,163,236,56,221,65,240,151,62,58,139,141,255,47,67, +69,178,207,246,45,249,87,224,150,80,70,138,195,26,94,74, +105,49,74,38,150,3,190,49,76,61,178,155,136,229,162,110, +216,174,206,155,183,65,203,195,186,135,64,1,100,119,195,35, +216,132,107,13,140,239,93,245,112,148,83,37,211,216,119,83, +222,202,217,51,79,119,212,176,75,192,172,204,231,126,238,83, +75,69,102,219,79,148,148,227,138,230,164,79,158,225,172,73, +118,140,30,219,90,9,133,16,74,82,51,217,64,2,207,148, +115,249,144,23,249,218,168,160,118,220,58,114,17,179,65,165, +169,36,39,170,85,134,230,138,34,35,41,137,194,39,199,13, +146,93,189,228,29,236,12,254,219,191,253,245,129,230,190,56, +197,172,136,235,194,42,175,119,127,246,147,75,86,184,29,107, +191,101,87,101,170,124,38,90,11,61,206,28,18,10,161,178, +205,76,5,175,250,243,211,196,144,194,55,236,60,211,64,0, +233,184,126,93,158,26,230,247,226,10,71,58,98,111,60,245, +49,231,137,23,161,87,15,3,31,80,207,60,233,60,254,162, +193,126,60,159,206,45,152,160,131,115,98,70,245,125,179,101, +18,170,156,103,46,86,76,237,191,173,244,180,116,104,143,21, +91,250,33,238,25,63,149,76,174,154,80,8,169,151,3,69, +10,36,104,140,136,144,195,174,87,247,202,145,44,122,34,136, +12,9,43,207,50,112,89,112,66,121,173,134,7,215,37,76, +47,189,102,93,244,135,154,106,230,215,134,197,133,103,40,138, +36,133,141,12,182,165,170,191,82,75,209,149,155,125,192,8, +88,219,17,218,224,101,16,82,5,240,132,10,143,218,250,30, +167,203,100,34,152,84,141,148,70,26,234,159,65,251,52,218, +173,109,248,239,124,47,30,64,132,243,133,202,94,192,99,193, +213,79,8,103,119,95,157,28,33,62,134,46,0,196,185,167, +213,130,136,94,29,196,17,113,118,159,92,121,145,140,94,242, +132,201,174,184,179,23,28,116,194,111,191,205,244,23,70,109, +165,171,101,211,7,215,20,35,26,112,228,140,137,255,140,113, +253,87,0,63,190,98,66,169,48,157,87,179,69,40,15,174, +104,251,254,114,172,126,178,72,56,13,131,86,171,5,134,2, +33,44,123,29,77,148,134,254,100,251,155,30,24,51,139,30, +220,21,231,92,125,107,102,156,122,59,203,216,65,250,171,80, +95,95,112,59,195,168,156,87,155,83,134,106,127,228,73,94, +99,251,45,91,168,236,225,49,90,124,128,163,38,151,151,38, +20,66,166,138,168,132,133,17,193,39,212,48,17,207,25,221, +168,32,59,245,24,166,105,23,229,106,107,166,140,123,81,42, +43,104,241,20,158,82,28,223,208,37,216,95,125,77,29,21, +31,123,254,153,84,42,10,212,203,194,169,170,185,81,148,242, +220,28,74,144,217,185,247,183,153,117,54,233,48,17,19,226, +49,252,108,77,252,81,91,132,132,114,209,228,82,33,10,8, +154,39,222,81,101,227,179,152,132,156,42,226,159,244,252,34, +52,79,249,18,109,85,128,16,5,149,107,112,193,16,141,178, +237,234,172,31,14,118,122,235,29,50,163,82,212,248,151,115, +169,188,23,61,187,234,94,223,166,111,144,124,164,42,138,15, +194,27,107,221,163,166,20,134,129,78,53,154,99,164,57,69, +238,3,42,124,200,77,172,30,17,190,225,165,251,62,157,249, +213,112,214,23,59,197,193,173,110,252,12,0,51,83,77,185, +219,92,125,128,228,98,110,234,2,230,202,20,89,62,53,55, +236,15,160,215,144,145,34,228,56,65,136,204,154,101,254,41, +37,22,131,128,129,203,49,9,90,82,139,155,249,216,166,133, +49,105,154,214,19,211,198,21,199,204,141,135,252,45,127,209, +151,39,148,145,242,179,213,1,103,91,152,221,187,162,12,68, +178,43,240,127,225,50,157,93,80,243,82,206,168,127,48,106, +39,61,134,107,18,147,248,104,212,105,209,12,197,35,64,241, +196,139,39,77,212,151,161,89,244,155,113,110,237,6,167,103, +220,230,128,102,164,178,48,190,127,185,206,160,245,217,114,182, +0,97,78,123,149,24,74,62,98,158,71,116,105,118,75,82, +227,21,9,133,144,161,176,24,15,180,88,219,217,144,69,65, +203,97,116,81,218,34,192,96,241,122,203,228,199,113,58,163, +128,190,237,218,14,150,132,130,109,4,10,79,233,221,247,224, +189,41,140,144,165,149,124,119,52,134,248,24,100,176,92,67, +137,113,27,29,218,26,187,116,210,227,74,72,211,52,1,182, +13,177,143,245,148,17,100,6,182,127,21,236,251,132,66,248, +248,71,76,95,90,74,97,238,169,39,16,228,133,45,143,131, +77,35,212,242,210,75,177,28,136,38,106,232,130,73,46,5, +54,158,133,70,91,45,97,239,50,217,155,57,230,224,148,218, +90,92,200,168,109,44,77,193,24,60,109,6,240,101,83,158, +166,45,123,94,163,67,147,146,184,213,204,164,71,239,68,34, +10,209,35,138,156,180,213,254,139,102,138,63,201,251,39,20, +66,22,154,121,152,187,155,26,249,203,128,102,20,25,250,68, +65,106,240,76,142,65,20,226,51,73,136,18,141,96,105,199, +73,171,244,112,65,62,157,249,229,98,183,69,137,5,140,212, +35,13,3,237,178,29,248,69,154,7,51,85,153,146,95,215, +57,104,25,89,24,139,58,219,205,245,72,10,78,168,111,218, +203,206,96,153,208,165,74,236,247,50,78,78,44,116,242,216, +232,171,136,63,197,206,170,65,249,36,28,88,223,141,135,146, +128,180,237,61,12,105,170,51,184,153,254,133,92,60,251,100, +13,53,103,123,205,13,134,153,203,55,190,139,103,110,33,27, +248,110,72,123,252,203,235,225,181,251,221,229,89,58,139,79, +58,109,57,238,233,229,178,9,250,10,84,89,145,147,89,3, +182,103,218,131,198,226,79,66,40,127,161,175,73,232,214,162, +252,204,206,27,69,169,65,35,133,188,236,168,24,234,67,53, +175,132,46,163,24,15,12,178,96,92,169,25,98,130,68,195, +155,195,77,205,228,232,236,215,240,123,29,127,245,44,3,77, +104,61,243,36,231,137,67,237,180,34,122,229,53,122,206,159, +189,213,204,145,32,108,26,218,241,88,45,101,170,229,236,233, +101,226,29,182,27,222,212,192,176,61,122,99,149,213,186,114, +18,120,75,40,132,135,166,31,48,213,132,80,30,6,3,119, +160,82,115,79,38,85,152,130,94,181,101,52,221,39,209,72, +129,13,223,169,250,7,227,68,37,211,66,129,139,126,190,228, +1,109,167,61,158,93,88,68,157,97,63,52,71,62,105,166, +180,36,189,191,59,164,105,137,233,95,238,49,57,230,167,94, +92,190,181,206,236,243,81,185,72,15,97,211,70,47,230,177, +19,240,98,251,37,129,240,233,43,37,20,194,197,211,12,61, +241,153,123,66,192,129,20,10,105,143,4,46,186,102,250,201, +134,78,218,12,54,104,177,72,125,153,201,207,224,24,74,85, +221,19,238,180,113,167,219,244,241,175,94,60,251,252,112,24, +242,35,81,104,6,248,181,13,239,196,95,122,109,163,111,123, +74,50,236,247,149,203,251,82,109,218,76,76,115,62,246,220, +170,137,91,76,248,231,164,255,228,212,234,79,32,140,9,133, +144,236,10,204,115,136,15,170,138,231,167,117,69,133,68,45, +208,92,120,138,56,131,74,103,232,248,107,72,19,151,41,125, +218,120,149,25,74,73,18,212,24,135,28,29,190,126,246,211, +191,102,186,179,57,37,154,25,15,101,84,112,49,99,15,172, +234,162,124,97,199,101,198,47,147,43,0,139,131,115,39,106, +243,51,133,35,113,40,45,102,226,132,75,170,133,145,80,8, +79,158,87,204,15,177,167,206,210,69,245,183,165,208,144,53, +228,17,153,7,243,68,46,170,29,173,73,174,209,76,61,195, +90,129,19,210,132,145,210,33,24,120,130,113,246,206,230,155, +118,42,83,131,9,220,76,210,64,177,177,173,91,125,88,40, +179,22,226,246,161,86,254,209,36,234,159,191,124,239,201,11, +12,135,182,94,239,99,224,217,22,174,137,188,37,20,66,59, +40,74,193,222,145,80,188,253,142,105,48,108,66,190,88,244, +154,57,153,18,95,85,239,38,128,204,136,82,1,21,167,140, +226,248,170,248,236,210,82,38,155,155,249,238,235,63,208,216, +10,55,162,111,9,80,226,111,99,248,22,183,44,174,153,138, +241,203,184,46,67,237,153,165,109,213,209,253,230,224,59,111, +174,79,38,184,104,118,132,180,83,75,178,177,106,147,56,24, +19,10,33,33,8,245,210,55,173,245,113,106,219,73,194,242, +125,231,101,14,90,53,95,35,246,152,62,161,225,164,154,127, +96,162,240,66,148,139,201,125,26,13,219,133,82,225,51,47, +252,12,22,190,68,105,228,206,23,156,95,251,18,96,137,244, +186,195,168,86,78,149,243,169,90,137,66,25,167,84,202,208, +48,223,204,244,160,170,123,106,90,76,212,153,152,151,38,14, +60,251,133,18,10,33,223,12,58,67,176,17,60,34,28,15, +126,56,107,144,124,100,90,64,124,220,212,13,220,152,243,148, +62,161,145,18,102,178,97,125,176,165,49,252,204,146,55,179, +120,133,92,252,199,206,126,60,227,70,88,16,168,50,159,58, +239,151,10,169,149,25,241,79,186,114,163,151,182,251,81,58, +197,92,223,244,231,94,92,58,110,221,219,233,44,166,189,253, +196,252,143,21,156,36,162,152,80,8,13,121,13,171,11,67, +6,243,102,10,234,2,29,185,106,43,221,60,24,166,178,195, +2,61,211,233,162,22,141,188,212,168,213,28,241,116,174,56, +152,89,30,180,14,199,61,6,133,250,67,215,29,118,90,221, +141,59,191,251,213,239,254,67,244,214,211,69,231,195,43,206, +247,238,5,251,141,209,223,252,75,51,163,80,61,164,52,172, +208,245,119,27,227,23,158,152,91,158,47,124,241,99,171,244, +24,210,212,149,80,42,43,119,90,49,19,223,231,12,142,58, +210,192,25,83,153,68,0,19,75,133,249,66,134,17,235,132, +134,88,229,249,197,204,220,82,134,91,191,67,220,54,51,236, +101,82,126,38,71,245,117,148,30,116,232,39,170,123,24,164, +11,69,238,169,50,217,49,157,20,183,65,71,177,250,81,184, +55,24,137,109,34,11,25,104,0,121,117,250,17,239,107,122, +157,99,201,235,120,101,62,123,114,185,248,202,229,93,90,66, +225,1,103,190,19,145,97,228,167,70,34,208,125,158,123,74, +122,15,39,63,128,240,33,86,0,249,100,39,12,27,33,23, +48,18,19,110,137,92,68,193,193,34,164,142,137,229,52,29, +44,116,18,253,133,139,73,197,47,215,66,20,22,105,61,102, +22,130,75,230,226,96,47,112,240,209,68,173,161,11,41,241, +236,164,231,161,169,54,139,34,166,29,108,238,245,126,247,155, +119,14,91,67,115,198,116,239,178,7,113,253,140,45,182,255, +160,117,208,67,192,167,75,73,127,98,221,128,202,142,30,194, +96,39,246,160,118,51,38,20,140,8,212,112,26,205,224,11, +237,100,68,101,105,208,37,97,160,80,48,149,136,221,22,109, +160,52,103,113,253,246,75,4,250,232,90,73,59,103,250,94, +92,219,176,105,107,113,91,25,160,98,242,207,55,95,222,250, +206,91,187,166,229,76,220,165,68,21,191,182,165,243,164,10, +202,28,39,52,189,59,161,178,144,5,180,77,131,100,57,152, +137,157,192,198,236,53,101,221,27,32,237,200,102,69,10,25, +253,217,49,97,10,78,170,12,63,132,34,121,214,116,213,227, +126,185,221,37,208,235,145,63,67,27,124,66,134,45,172,120, +131,160,33,71,210,47,90,131,17,99,130,99,250,51,197,77, +113,69,204,180,98,212,118,59,121,200,77,248,232,46,79,40, +132,44,163,6,202,170,203,118,60,34,81,145,89,87,67,134, +33,59,18,12,57,230,81,165,247,102,0,159,198,16,25,27, +31,198,139,100,164,32,141,102,10,44,123,191,147,253,234,215, +127,149,220,39,100,33,131,96,11,89,69,237,193,3,19,95, +29,183,163,40,155,114,51,132,48,76,11,5,67,156,147,150, +234,208,92,92,10,124,156,28,31,29,48,63,254,39,37,20, +66,200,11,23,26,162,11,35,79,105,221,102,84,12,80,25, +225,103,10,240,85,117,166,128,20,70,125,235,64,148,199,1, +48,35,2,85,25,202,56,139,188,25,44,21,14,126,238,11, +255,0,178,83,251,152,64,38,68,157,150,10,78,148,207,210, +49,72,7,91,245,62,51,81,226,190,93,19,18,52,100,103, +11,69,227,41,7,239,171,84,251,241,215,247,17,92,153,80, +8,153,204,18,15,186,50,107,0,30,180,14,66,145,81,130, +133,24,41,46,77,81,33,41,79,118,20,34,141,158,108,252, +29,25,105,27,97,146,244,70,14,106,171,206,84,187,158,173, +137,97,60,5,99,254,126,231,59,64,77,39,82,188,53,19, +178,51,189,102,13,33,198,154,139,17,129,19,117,38,174,227, +254,160,7,219,67,238,70,105,49,166,234,22,216,84,98,15, +42,196,11,45,69,146,93,65,18,77,20,40,124,111,38,159, +202,181,54,212,16,89,229,10,83,101,184,71,231,82,181,183, +76,231,156,211,23,78,189,244,218,239,227,158,169,5,61,60, +221,68,154,24,228,123,212,123,102,210,173,203,194,9,119,181, +205,185,99,45,70,180,43,110,43,90,140,129,124,200,159,241, +72,46,79,40,21,146,11,3,78,154,179,204,52,47,51,191, +16,72,96,167,232,56,118,168,40,75,10,241,157,127,70,236, +20,186,132,127,170,153,201,166,16,37,94,15,131,37,13,21, +90,196,232,111,15,238,166,92,38,133,15,102,74,169,193,40, +172,228,164,205,196,48,26,113,24,11,194,169,242,105,58,180, +153,153,149,182,98,212,22,251,218,123,18,111,9,133,16,246, +200,138,193,60,9,217,171,222,101,86,137,191,72,59,107,99, +80,110,136,82,227,186,1,128,65,139,156,135,133,18,93,162, +25,20,0,131,61,58,14,79,209,195,107,229,228,139,23,206, +124,162,207,136,24,68,105,224,236,29,50,87,44,214,92,4, +158,20,24,203,48,37,254,212,77,193,64,53,91,201,127,226, +185,83,18,150,49,69,38,217,44,76,170,143,20,10,99,1, +161,57,252,221,12,53,36,229,16,142,138,240,131,46,225,153, +88,126,28,147,141,200,192,17,148,79,42,73,237,248,102,204, +12,46,3,111,2,29,189,182,55,232,68,221,110,247,51,47, +254,21,77,141,13,66,102,105,127,253,173,30,132,88,200,200, +237,61,37,69,43,3,167,173,43,161,191,84,202,125,233,181, +59,214,126,228,17,123,209,90,147,73,164,193,196,58,216,136, +17,2,6,139,6,245,80,46,74,39,96,249,175,25,151,200, +92,81,198,21,48,119,118,87,232,194,90,123,109,66,188,10, +14,131,168,90,157,140,213,43,97,60,240,8,11,87,231,199, +255,238,47,254,47,157,222,40,202,165,10,121,188,100,113,30, +147,198,138,88,111,203,177,187,213,65,37,128,41,242,222,83, +159,190,152,121,234,26,107,110,124,0,225,195,236,97,219,110, +6,22,202,154,18,166,167,177,58,212,6,47,213,44,39,50, +101,76,68,130,21,85,202,90,74,179,36,48,36,212,185,148, +122,168,134,120,47,91,51,157,103,198,109,118,115,251,186,102, +28,146,163,182,146,255,234,229,112,183,25,46,86,188,193,80, +93,247,167,74,205,196,254,19,102,102,62,83,44,249,12,102, +182,186,52,185,130,80,63,245,97,22,246,209,93,107,6,196, +42,132,4,0,36,113,163,158,160,215,96,236,107,2,56,106, +106,223,228,231,83,50,120,69,95,9,226,35,80,56,191,26, +160,139,246,154,170,91,130,46,201,21,110,28,4,43,11,167, +24,195,13,46,169,140,63,192,149,26,68,191,248,241,242,144, +48,132,213,83,38,206,79,75,150,199,200,110,138,220,132,129, +198,68,249,232,86,224,199,255,164,132,66,136,70,138,195,19, +173,68,93,157,77,128,30,181,83,145,115,227,69,67,218,65, +44,156,167,32,141,182,36,156,236,180,224,168,62,137,194,88, +135,118,46,49,116,25,133,37,215,35,150,203,228,52,146,100, +4,219,98,213,35,229,98,174,108,166,84,60,96,45,96,245, +27,35,230,152,94,26,243,82,203,116,249,35,161,46,210,164, +82,33,222,106,34,15,168,154,244,83,39,65,134,254,22,88, +241,90,97,28,99,198,114,183,225,88,242,104,192,12,122,165, +249,44,121,251,72,205,84,138,6,108,94,54,203,124,103,127, +118,105,72,109,33,54,62,188,118,189,233,20,211,225,137,217, +244,218,46,250,169,237,1,108,161,177,109,240,105,97,35,5, +212,112,206,169,226,98,80,62,226,162,31,200,194,31,159,53, +56,34,47,22,204,112,72,169,160,80,36,56,145,7,12,174, +82,59,66,61,197,121,178,102,168,56,100,148,58,118,57,242, +178,85,151,99,155,26,96,110,116,171,105,213,51,135,173,29, +32,161,229,201,122,219,235,143,157,75,203,4,158,72,144,145, +107,38,118,138,78,88,170,160,58,214,129,212,82,164,1,213, +222,18,138,95,114,101,33,93,186,24,233,205,77,118,61,170, +41,76,46,148,169,0,243,132,46,161,63,78,202,77,218,147, +225,81,223,242,215,111,65,169,94,177,234,225,66,195,82,52, +195,126,161,215,224,143,191,243,63,165,25,253,99,76,201,199, +103,70,143,159,206,126,228,113,102,201,90,118,57,177,220,5, +86,180,60,91,176,67,98,44,203,60,6,157,185,208,152,29, +15,179,9,31,221,181,9,149,133,144,151,230,135,166,149,123, +15,78,56,213,204,84,31,245,205,131,145,66,139,214,222,128, +157,210,82,15,75,131,46,194,244,249,66,119,141,232,127,104, +134,146,160,193,174,158,147,132,27,210,28,65,147,42,156,106, +49,69,219,210,173,58,157,216,98,173,211,234,156,220,9,205, +255,212,71,207,20,152,115,168,41,221,4,135,227,158,234,22, +232,137,142,250,232,80,121,168,79,74,40,132,106,124,48,16, +84,40,38,48,85,160,194,40,84,226,83,228,236,172,75,181, +225,152,220,53,4,33,121,82,136,201,209,192,51,78,112,117, +50,65,28,146,78,81,223,241,154,7,126,175,113,95,145,225, +254,56,231,6,53,170,221,134,209,75,239,42,35,195,18,226, +148,71,162,178,150,138,169,255,224,151,95,40,21,211,231,78, +205,124,232,177,229,28,5,80,92,144,208,92,139,7,32,78, +40,132,74,214,206,200,11,131,11,20,180,176,17,205,120,80, +153,134,112,212,187,215,4,30,204,150,162,25,30,233,25,76, +147,175,165,51,41,122,64,97,26,242,90,40,88,28,184,231, +220,189,255,29,106,10,27,237,224,116,126,112,99,199,33,52, +248,202,213,46,49,172,152,180,98,28,229,94,187,122,123,255, +99,207,159,250,123,127,251,167,191,252,165,167,191,252,211,207, +252,194,23,158,158,3,243,15,212,153,135,98,8,199,47,166, +87,23,234,165,172,8,205,98,54,14,110,77,108,85,200,30, +56,105,44,68,248,2,22,90,44,251,102,120,140,18,15,25, +76,65,49,98,174,136,217,32,65,168,156,154,192,187,248,116, +249,123,175,124,117,161,236,225,12,111,15,67,8,244,135,234, +147,132,18,116,249,242,27,235,123,245,54,201,137,221,238,240, +247,255,248,173,203,215,54,240,197,77,60,50,137,38,198,132, +82,33,86,60,67,123,238,92,118,152,196,4,219,36,4,129, +70,170,96,189,1,18,25,9,253,217,54,52,220,33,193,229, +51,41,28,108,160,1,210,128,106,184,174,187,122,70,230,199, +239,125,253,87,231,102,243,27,244,246,26,209,97,93,201,161, +19,5,243,184,130,18,245,7,193,239,126,237,189,59,107,135, +215,110,239,94,191,187,143,143,173,221,29,34,35,19,174,142, +38,87,35,85,77,131,31,224,157,193,40,164,39,23,18,145, +248,3,60,19,252,144,118,247,175,137,46,209,60,16,150,114, +124,247,82,192,73,183,54,73,71,44,141,20,143,94,38,203, +29,149,199,93,61,157,255,163,239,255,86,217,27,23,178,10, +32,141,199,12,69,255,17,27,23,218,125,249,173,181,223,248, +237,87,254,244,229,91,120,93,15,14,187,16,236,164,195,243, +79,204,77,30,197,11,19,74,133,104,164,16,80,191,175,112, +18,13,132,160,69,155,38,3,60,120,103,160,54,28,161,32, +68,205,146,166,54,211,170,187,168,150,38,82,92,41,195,144, +177,239,82,21,140,55,92,205,79,152,22,179,246,189,110,224, +49,81,68,248,101,73,186,255,209,117,187,20,87,28,52,123, +242,159,154,82,26,248,241,163,64,224,255,247,103,36,20,66, +90,137,210,107,6,85,115,241,164,198,243,82,65,175,60,182, +200,185,127,93,125,74,105,186,198,80,53,170,239,161,66,112, +58,113,65,7,56,69,21,68,84,230,174,15,168,48,88,138, +35,108,114,226,83,167,159,30,69,222,197,5,159,108,110,122, +93,244,6,161,173,229,125,223,234,245,48,254,143,157,148,153, +24,163,152,104,44,19,10,33,24,16,194,173,175,139,254,200, +98,154,91,85,20,130,54,206,84,169,225,72,163,233,19,7, +12,34,65,230,65,133,232,53,12,35,40,84,194,70,157,82, +10,28,108,104,173,84,166,161,164,168,34,9,174,120,246,228, +231,1,103,145,134,25,208,229,148,182,226,26,236,105,101,182, +178,46,140,236,155,20,103,79,16,54,65,145,228,222,18,10, +97,101,94,142,152,133,83,114,161,49,188,201,242,79,176,129, +91,182,246,204,56,174,190,115,64,154,69,65,121,220,153,44, +163,182,156,189,53,239,11,191,228,66,142,88,250,102,118,179, +10,93,32,164,253,237,129,151,62,195,120,231,74,193,123,247, +158,186,95,216,146,93,91,240,98,168,113,138,217,148,218,142, +200,110,218,46,33,177,148,152,80,8,89,47,98,182,72,53, +172,5,92,160,152,249,160,194,49,209,37,186,114,227,44,93, +189,168,198,66,232,53,8,191,198,158,7,210,244,89,191,245, +174,87,174,185,68,15,57,169,220,236,192,29,244,221,90,245, +241,229,89,127,38,67,59,189,240,242,125,106,107,108,185,182, +65,110,74,115,42,159,48,230,190,129,51,46,105,154,134,226, +98,244,18,10,98,66,33,68,189,92,61,47,105,71,91,74, +124,108,144,32,230,32,177,36,58,204,130,40,169,108,164,213, +64,121,116,209,231,74,28,49,120,215,106,11,238,252,178,40, +15,242,181,115,101,140,117,225,221,187,221,217,30,251,75,37, +10,91,82,149,162,247,252,185,156,132,100,204,79,45,141,233, +97,101,65,125,75,12,166,134,62,143,238,6,243,164,214,196, +36,215,168,160,215,12,13,216,184,41,119,102,78,38,132,25, +152,109,7,52,199,101,189,7,59,62,29,15,217,131,148,24, +30,238,41,64,129,225,136,82,170,138,251,46,153,190,174,90, +69,229,128,185,176,148,113,110,52,188,124,218,221,109,132,183, +183,71,57,148,82,3,149,33,57,233,167,60,246,7,140,207, +179,228,249,190,219,17,169,38,83,30,38,148,10,225,132,234, +128,208,81,139,102,116,78,44,4,24,35,54,31,235,29,247, +118,46,11,87,208,245,51,222,204,50,148,231,195,51,145,130, +184,71,145,142,56,196,49,66,186,109,53,189,248,249,47,252, +247,253,64,109,216,182,155,228,115,59,56,190,63,251,161,138, +202,175,109,209,189,161,66,142,155,102,186,182,16,21,131,53, +143,86,86,198,20,155,80,46,154,92,42,132,133,42,113,198, +220,134,3,250,0,9,72,216,35,35,69,112,185,117,59,50, +243,207,62,169,65,148,243,75,30,243,182,105,83,73,147,96, +28,170,18,104,224,100,154,209,144,89,67,85,233,165,83,95, +32,209,2,68,222,94,163,132,198,89,153,205,208,97,221,164, +50,161,198,30,53,128,210,60,174,227,122,141,237,164,160,61, +99,85,30,97,251,1,21,62,196,10,0,0,70,69,38,239, +47,158,244,57,6,66,108,68,134,52,13,41,98,242,157,250, +6,142,108,249,170,175,188,150,218,221,64,65,77,33,47,9, +104,224,38,53,125,19,92,165,72,13,105,151,64,222,197,136, +99,13,165,116,157,77,218,206,186,238,153,229,204,87,94,62, +164,178,222,16,225,164,227,197,68,69,53,61,161,166,198,225, +84,34,78,116,215,135,248,5,143,238,210,132,50,82,24,96, +24,248,56,66,209,98,176,37,200,20,197,254,179,245,46,16, +34,38,7,6,59,245,107,231,159,102,150,12,67,11,252,20, +161,64,211,207,18,242,226,96,56,240,74,21,119,68,193,182, +147,70,223,65,136,66,77,85,211,234,114,169,154,105,245,52, +158,41,198,207,16,162,216,166,237,222,37,82,147,66,106,185, +168,253,207,176,86,67,137,137,188,37,20,66,50,10,177,223, +33,68,90,108,99,11,146,227,75,188,130,198,164,54,77,187, +92,245,23,87,101,57,132,65,10,191,181,230,106,215,4,27, +250,11,204,147,134,235,164,207,224,28,31,14,220,114,213,195, +113,218,84,21,141,123,113,65,142,181,122,123,36,231,117,204, +38,143,8,241,212,114,201,12,174,176,242,47,238,85,50,65, +206,170,173,31,64,248,48,91,152,152,59,108,147,232,46,26, +41,55,184,40,94,52,86,158,222,178,167,46,82,105,239,237, +109,121,163,145,250,141,64,154,88,141,183,223,243,32,65,147, +89,67,235,53,2,247,110,183,233,230,242,222,202,236,231,179, +57,250,34,56,105,55,154,209,20,4,247,222,238,8,143,182, +65,36,86,104,172,230,114,233,220,156,109,50,100,187,31,234, +228,180,239,83,172,221,60,204,15,120,132,215,38,148,10,241, +156,17,166,96,0,12,38,32,236,148,245,60,117,193,169,239, +49,170,48,141,23,172,211,244,42,181,148,98,135,11,94,101, +214,213,200,230,51,238,33,13,19,201,216,246,97,170,130,164, +223,243,9,98,12,219,151,228,233,196,240,240,195,86,79,149, +248,55,54,71,4,5,143,36,161,33,56,58,177,125,250,133, +19,234,59,19,243,210,88,19,141,155,6,197,250,204,7,84, +248,48,27,147,232,4,11,102,167,50,217,86,235,239,189,230, +92,122,54,77,200,169,190,45,62,9,48,221,150,215,62,20, +123,219,89,247,8,208,51,90,38,160,165,133,231,102,178,46, +22,125,185,230,13,7,233,231,158,125,94,163,69,199,209,76, +38,106,182,70,92,141,82,170,6,65,177,69,65,215,11,145, +27,161,224,167,46,205,173,44,22,141,44,52,214,225,212,192, +143,173,11,107,62,38,241,150,208,47,166,196,123,132,153,45, +191,86,252,192,127,252,133,52,196,135,192,67,188,13,250,94, +187,233,205,45,187,216,242,234,167,94,112,25,21,163,42,181, +180,7,201,13,6,46,82,16,26,173,111,95,186,121,115,151, +60,26,242,207,170,217,16,7,27,224,205,150,125,99,62,88, +62,106,160,52,176,101,83,254,243,79,46,91,252,142,243,82, +227,43,183,214,127,66,215,42,161,95,11,240,176,220,173,171, +51,10,252,133,85,143,188,24,165,60,17,136,245,40,150,32, +252,228,98,227,195,102,155,7,222,194,178,116,156,92,222,205, +151,220,198,158,64,41,148,200,125,242,162,208,127,233,213,175, +230,243,154,83,177,58,155,30,70,169,149,114,248,212,233,172, +90,116,197,26,141,46,6,245,207,190,176,50,24,143,63,243, +225,147,42,167,154,242,210,41,45,38,88,29,101,107,37,20, +66,130,133,232,150,212,55,145,133,86,157,75,65,94,160,5, +151,36,112,136,141,136,196,67,46,226,11,69,77,181,197,213, +156,71,6,162,197,200,199,214,197,15,231,246,59,5,70,51, +87,42,133,223,249,131,255,99,190,40,168,210,105,127,161,16, +226,166,41,231,173,85,24,63,80,106,255,229,47,158,5,200, +165,249,146,114,223,38,141,157,101,205,11,206,56,104,245,163, +124,111,137,224,171,9,133,48,87,244,9,248,181,15,253,19, +231,83,164,198,40,161,187,175,64,96,54,207,216,87,143,196, +223,188,153,185,133,240,35,154,136,70,138,240,171,206,73,16, +146,5,122,231,93,145,108,161,92,237,181,35,156,56,63,120, +247,143,50,153,84,115,232,14,34,175,144,142,206,47,248,103, +150,233,134,104,27,59,171,177,186,122,229,251,110,218,180,61, +60,189,130,131,220,122,100,196,81,21,63,180,49,126,177,211, +15,212,153,135,217,178,234,68,218,77,207,46,166,80,71,9, +30,177,204,228,180,225,69,35,168,11,27,100,76,44,38,63, +215,176,174,16,28,217,52,213,217,180,213,80,192,181,80,38, +231,37,40,85,42,151,158,227,154,104,229,68,101,163,235,238, +118,163,67,37,212,248,148,80,124,233,121,124,164,140,141,137, +41,17,4,15,26,3,250,12,209,79,239,210,153,153,60,141, +45,13,233,89,161,104,249,106,236,50,125,152,159,240,200,174, +77,40,21,50,213,21,10,67,145,233,247,52,27,134,0,83, +161,168,140,38,249,204,124,103,229,156,188,51,80,164,226,192, +37,28,223,56,225,84,186,164,24,47,173,240,198,46,12,22, +54,219,109,185,126,38,248,107,63,255,223,141,194,49,218,40, +144,215,123,94,62,231,159,94,206,97,69,28,221,60,23,94, +10,162,249,172,15,189,42,223,194,16,223,209,240,31,235,44, +253,192,180,127,168,93,121,176,237,221,126,79,202,11,110,154, +155,239,104,206,29,10,11,229,131,44,175,194,73,148,168,49, +64,43,131,7,7,251,157,172,153,12,249,78,212,81,180,14, +21,181,151,178,179,152,106,55,161,69,188,172,253,197,217,85, +168,106,36,79,183,122,88,86,75,105,8,81,199,202,41,149, +114,4,98,149,34,148,231,208,6,170,86,201,150,10,106,47, +171,173,61,81,121,148,47,149,224,150,164,9,165,66,72,112, +241,132,71,116,9,255,53,225,251,209,208,67,218,141,71,68, +1,197,63,169,38,92,187,201,156,94,233,50,169,116,22,77, +164,219,70,127,49,157,244,102,212,144,210,243,10,195,190,250, +86,4,131,92,179,73,103,195,144,104,61,62,153,195,161,175, +209,50,157,96,117,62,109,245,82,110,188,231,137,37,213,202, +80,180,54,95,43,212,17,155,34,56,49,81,160,139,13,196, +99,206,239,135,218,139,143,224,226,132,66,72,192,1,207,167, +6,80,208,201,43,227,17,142,120,237,159,57,223,255,186,88, +165,237,21,100,58,153,128,156,119,184,231,147,96,161,114,237, +200,173,204,224,218,182,13,19,151,40,50,197,115,13,153,49, +44,84,153,136,166,188,116,187,165,228,138,123,187,131,51,75, +89,81,160,145,134,144,35,109,48,88,235,108,134,174,38,184, +83,245,140,228,159,181,46,38,12,55,177,129,251,132,66,88, +46,206,28,174,213,246,239,206,12,219,51,126,56,147,118,102, +103,231,103,230,230,107,227,246,204,236,236,12,255,101,253,218, +201,211,51,51,213,133,197,197,90,158,81,33,197,90,54,85, +157,155,169,229,82,181,66,182,28,14,102,150,150,74,105,175, +20,13,115,197,2,173,68,67,138,150,242,25,95,198,73,222, +191,124,111,212,29,68,116,8,46,23,211,220,103,43,217,107, +247,26,138,254,231,83,215,238,28,206,84,114,149,82,182,86, +206,85,202,185,106,41,87,43,229,170,58,200,215,202,166,211, +116,242,110,255,31,64,214,159,104,19,156,107,35,0,0,0, +0,73,69,78,68,174,66,96,130}; + +/* cube with numbered sides to aid debugging of cube orientation */ +#if 0 +const unsigned char cube_image_numbered[] = { +137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82, +0,0,0,150,0,0,0,200,8,2,0,0,0,133,231,143, +50,0,0,0,1,115,82,71,66,0,174,206,28,233,0,0, +0,4,103,65,77,65,0,0,177,143,11,252,97,5,0,0, +0,32,99,72,82,77,0,0,122,38,0,0,128,132,0,0, +250,0,0,0,128,232,0,0,117,48,0,0,234,96,0,0, +58,152,0,0,23,112,156,186,81,60,0,0,8,54,73,68, +65,84,120,94,237,157,109,154,163,32,16,132,179,215,202,129, +60,143,167,241,50,30,38,219,128,81,190,52,104,51,145,34, +229,227,143,201,70,164,187,94,154,128,179,83,249,247,122,189, +30,60,160,21,16,132,60,160,21,120,64,71,207,224,205,36, +74,21,208,21,32,66,116,130,172,66,120,130,68,72,132,248, +10,192,103,192,207,66,34,132,87,0,62,1,86,33,17,194, +43,0,159,0,171,144,8,225,21,128,79,128,85,72,132,48, +10,204,175,215,122,194,4,93,18,232,175,84,225,248,124,172, +167,101,217,207,241,43,8,135,105,251,205,182,176,236,7,224, +79,253,178,233,241,28,215,95,206,207,227,179,27,138,93,141, +199,99,42,50,123,62,30,67,127,20,127,8,161,0,158,50, +20,225,63,23,177,17,78,195,227,236,57,108,117,104,10,210, +124,46,78,131,133,139,122,96,35,172,245,31,207,4,43,42, +64,244,229,76,45,132,114,31,34,188,71,1,34,20,221,129, +71,159,68,47,187,189,90,231,61,99,176,70,175,216,8,107, +40,0,127,15,34,36,66,120,5,224,19,96,21,18,33,188, +2,240,9,176,10,137,16,94,1,248,4,88,133,68,8,175, +0,124,2,172,66,34,132,87,0,62,1,86,33,17,194,43, +0,159,0,171,144,8,225,21,128,79,128,85,72,132,240,10, +192,39,192,42,36,66,120,5,224,19,96,21,18,33,188,2, +240,9,176,10,137,16,94,1,248,4,88,133,68,8,175,0, +124,2,172,66,34,132,87,0,62,1,86,33,17,194,43,0, +159,0,171,144,8,225,21,128,79,128,85,72,132,240,10,192, +39,192,42,36,66,120,5,212,9,204,163,120,73,137,119,74, +230,70,243,104,237,80,254,214,218,230,114,21,78,47,137,111, +26,92,244,233,105,28,178,196,207,197,228,240,151,9,124,69, +163,93,200,243,40,137,63,223,158,13,105,166,242,150,216,161, +136,181,141,92,230,9,82,25,234,121,132,54,110,137,108,13, +253,192,118,66,174,145,4,172,225,217,159,120,243,172,26,157, +234,98,19,84,51,188,164,203,48,243,200,157,79,122,73,143, +12,84,245,44,112,14,161,132,93,66,46,13,221,120,243,24, +147,165,202,135,223,145,116,97,65,126,44,250,121,109,245,182, +126,186,18,85,86,7,255,70,133,134,42,87,250,14,219,156, +64,152,12,187,194,32,183,203,170,83,76,35,48,84,204,236, +186,123,196,181,115,105,108,37,82,12,207,113,22,251,20,255, +240,237,51,237,132,154,31,252,223,68,56,197,122,137,55,228, +48,153,211,152,68,110,241,13,227,40,249,200,249,126,43,104, +87,80,37,39,146,202,14,34,9,229,96,172,100,155,156,232, +210,94,26,220,228,57,238,125,72,24,17,236,33,198,111,227, +108,44,114,22,89,188,246,103,187,78,175,47,173,194,112,98, +31,36,154,117,194,146,31,36,190,213,237,211,40,248,254,228, +147,183,236,96,220,90,215,181,115,61,152,7,246,28,71,23, +29,61,111,82,185,73,126,61,185,175,174,223,239,241,196,189, +94,233,119,225,55,255,30,66,191,215,236,160,179,110,159,203, +17,185,210,89,11,73,111,58,213,71,253,190,67,136,48,94, +63,28,248,198,74,180,107,137,184,155,156,10,170,60,157,236, +149,229,205,75,162,42,13,189,164,215,131,107,74,154,151,132, +27,93,19,13,44,51,117,135,135,29,251,187,117,114,57,170, +160,225,193,50,45,92,149,174,193,95,238,55,43,209,37,132, +217,160,243,225,138,124,83,244,225,127,1,213,94,147,84,139, +168,182,228,2,59,117,231,63,173,46,75,25,141,149,247,150, +198,255,108,153,228,243,56,28,78,155,149,244,229,126,117,8, +195,1,190,109,84,237,6,63,217,3,45,251,7,145,47,217, +29,213,220,90,100,181,8,151,130,230,18,51,177,167,203,212, +157,18,41,28,97,81,185,175,91,120,185,107,46,107,179,156, +185,185,10,237,50,44,94,22,203,235,236,74,121,29,243,81, +158,242,178,238,14,127,111,56,91,138,65,104,242,194,76,170, +238,129,145,125,168,20,125,142,22,146,91,47,75,187,72,147, +93,255,69,230,6,255,254,247,84,161,68,96,150,157,5,207, +100,252,112,195,130,120,70,59,167,179,170,101,214,211,158,24, +209,187,54,218,204,3,146,227,49,119,42,36,127,29,190,207, +239,25,241,139,246,36,167,122,84,77,164,174,241,59,232,157, +71,52,207,49,133,100,169,203,19,185,41,28,136,250,200,205, +29,142,135,179,89,9,39,11,156,84,235,84,226,242,224,150, +93,147,233,197,223,188,219,233,233,105,246,199,217,172,125,15, +213,242,190,118,23,4,103,111,225,118,129,219,206,221,110,240, +221,179,137,236,202,79,46,174,59,121,158,157,145,204,76,16, +62,124,240,40,154,13,110,149,67,110,227,54,239,114,202,15, +114,126,124,208,87,165,95,51,142,53,55,114,223,129,116,227, +97,216,188,207,131,48,178,195,78,180,174,132,239,70,1,236, +84,116,115,255,186,238,47,124,149,214,237,195,78,151,113,166, +53,54,194,234,114,32,222,144,8,17,169,5,49,19,33,17, +194,43,0,159,0,171,144,8,225,21,128,79,128,85,72,132, +240,10,192,39,192,42,36,66,120,5,224,19,96,21,18,33, +188,2,240,9,176,10,137,16,94,1,248,4,88,133,68,8, +175,0,124,2,172,66,34,132,87,0,62,1,86,33,17,194, +43,0,159,0,171,144,8,225,21,128,79,128,85,72,132,240, +10,192,39,192,42,36,66,120,5,224,19,96,21,18,33,188, +2,240,9,176,10,137,16,94,1,248,4,88,133,68,8,175, +0,124,2,172,66,34,132,87,0,62,1,86,33,17,194,43, +0,159,0,171,144,8,155,80,64,92,94,246,109,234,211,8, +141,13,96,31,134,37,38,55,252,42,156,197,133,248,200,166, +62,37,232,140,245,140,37,219,161,5,116,19,131,179,32,8, +112,132,159,108,234,115,21,184,153,63,29,91,64,23,168,215, +196,37,216,8,63,218,212,103,75,48,178,97,187,219,194,74, +59,14,128,17,38,150,173,198,182,238,163,167,218,226,205,237, +97,172,107,23,174,5,114,190,61,48,194,160,152,134,41,235, +6,231,190,85,100,49,192,245,212,137,108,103,207,235,214,80, +139,78,16,238,41,122,224,118,89,215,215,245,70,164,191,132, +48,88,127,110,223,25,35,44,111,4,160,239,26,56,122,191, +140,178,95,245,19,45,87,151,245,167,128,180,251,16,86,161, +126,244,104,239,16,125,158,45,95,192,100,9,229,28,223,23, +100,169,159,184,198,21,88,155,67,141,246,192,85,104,30,76, +36,238,219,57,199,119,177,233,79,190,173,200,115,62,175,33, +227,157,247,192,70,104,191,135,38,247,37,115,254,158,193,46, +85,243,20,209,11,208,142,28,108,132,146,192,219,67,61,187, +203,15,172,183,205,196,235,190,36,204,250,137,239,153,137,223, +89,80,151,250,134,71,232,178,206,58,190,239,125,183,212,189, +126,226,151,48,29,53,234,4,225,154,98,127,214,219,31,145, +247,134,240,99,194,253,93,64,132,240,76,137,144,8,225,21, +128,79,128,85,72,132,240,10,192,39,192,42,36,66,120,5, +224,19,96,21,18,33,188,2,240,9,176,10,137,16,94,1, +248,4,88,133,68,8,175,0,124,2,172,66,34,132,87,0, +62,1,86,33,17,194,43,0,159,0,171,144,8,225,21,128, +79,128,85,72,132,240,10,192,39,192,42,36,66,120,5,224, +19,96,21,18,33,188,2,240,9,176,10,137,16,94,1,248, +4,88,133,68,8,175,0,124,2,29,85,161,251,43,123,119, +118,228,146,247,113,136,245,131,208,253,149,189,59,229,111,183, +197,49,1,221,153,235,35,60,119,65,63,8,35,103,53,121, +185,120,96,188,58,251,171,222,152,108,207,8,29,84,3,178, +11,211,202,189,162,236,20,161,113,41,217,12,20,228,167,110, +220,71,83,144,125,34,148,60,197,64,193,26,149,36,32,187, +91,233,116,139,208,141,86,3,82,44,74,188,67,86,58,214, +237,139,198,206,133,171,165,47,94,182,231,169,38,139,25,227, +56,147,7,217,195,74,7,186,10,165,146,182,51,68,24,188, +37,151,205,198,150,77,124,131,2,135,161,62,150,172,192,8, +101,74,244,207,104,182,140,222,117,47,179,22,81,116,5,254, +226,92,25,118,149,110,4,47,255,203,109,57,212,232,24,184, +10,47,3,75,27,214,80,242,182,123,64,35,188,48,149,102, +231,87,121,20,7,124,0,35,140,86,44,126,109,197,139,25, +127,217,147,251,25,24,96,175,207,72,161,145,156,13,30,184, +10,163,84,197,30,118,61,207,170,0,125,125,63,8,161,49, +104,130,39,66,141,122,77,180,37,194,38,48,104,130,32,66, +141,122,77,180,37,194,38,48,104,130,32,66,141,122,77,180, +37,194,38,48,104,130,32,66,141,122,77,180,37,194,38,48, +104,130,32,66,141,122,77,180,37,194,38,48,104,130,32,66, +141,122,77,180,37,194,38,48,104,130,32,66,141,122,77,180, +37,194,38,48,104,130,32,66,141,122,77,180,37,194,38,48, +104,130,32,66,141,122,77,180,37,194,38,48,104,130,32,66, +141,122,77,180,37,194,38,48,104,130,32,66,141,122,77,180, +37,194,38,48,104,130,32,66,141,122,77,180,37,194,38,48, +104,130,248,15,176,154,45,114,32,36,117,76,0,0,0,0, +73,69,78,68,174,66,96,130}; +#endif + +/* Other landscape, rotated */ +const unsigned char cube_image2[] = { +137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82, +0,0,0,150,0,0,0,200,8,2,0,0,0,133,231,143, +50,0,0,0,1,115,82,71,66,0,174,206,28,233,0,0, +0,4,103,65,77,65,0,0,177,143,11,252,97,5,0,0, +0,9,112,72,89,115,0,0,14,195,0,0,14,195,1,199, +111,168,100,0,0,156,193,73,68,65,84,120,94,236,253,103, +124,27,233,125,54,140,14,48,24,0,51,24,244,94,9,246, +38,138,164,122,93,73,43,109,213,246,238,178,94,151,39,238, +221,113,75,28,151,36,142,19,59,182,99,39,118,226,196,37, +118,92,182,247,213,246,34,105,213,27,69,138,189,147,232,189, +99,6,83,240,94,195,125,159,115,206,199,232,124,216,31,63, +24,187,218,165,40,136,0,230,63,247,125,255,203,85,84,205, +102,147,88,127,143,173,67,67,137,200,130,86,171,247,184,236, +193,214,206,120,42,205,85,203,120,171,106,181,154,214,107,157, +54,187,138,212,84,138,5,139,166,30,240,154,222,158,72,202, +50,225,243,183,84,234,213,133,133,133,30,191,169,38,72,157, +54,145,106,138,148,129,81,107,154,148,74,99,32,73,78,168, +53,41,67,36,45,185,141,84,131,171,73,98,131,214,171,213, +58,99,67,20,180,114,53,91,20,197,102,147,214,147,164,138, +216,116,207,63,153,92,93,79,255,225,135,11,75,43,155,15, +62,96,177,248,241,180,120,34,241,139,239,61,184,254,46,21, +161,94,135,239,9,111,105,124,98,193,98,181,104,100,94,69, +209,177,229,185,82,33,83,170,212,117,36,85,43,87,89,131, +201,235,245,106,104,90,208,48,177,50,65,55,203,117,81,38, +117,116,173,82,241,184,2,122,157,94,75,54,155,42,34,93, +150,212,132,134,84,75,70,198,168,147,73,94,168,151,69,105, +235,118,79,52,93,77,230,56,146,104,86,234,162,88,45,235, +25,179,78,163,114,27,245,26,21,33,203,188,149,81,155,169, +250,194,133,115,95,125,112,151,181,123,207,167,191,253,251,155, +239,251,140,217,219,78,210,230,116,89,187,62,175,213,58,13, +161,86,93,75,230,106,180,201,200,215,42,158,64,143,221,98, +81,147,50,47,9,130,204,137,146,112,234,204,73,179,217,220, +219,221,103,245,133,207,47,171,58,219,251,131,254,0,109,160, +139,197,140,196,85,132,70,93,22,185,166,32,86,229,70,163, +41,229,11,165,186,32,169,100,201,168,105,70,34,121,183,77, +99,113,18,102,90,14,183,250,11,77,157,134,113,54,184,74, +153,227,181,148,172,33,169,197,100,237,205,137,138,228,9,60, +51,221,184,251,150,135,232,38,63,125,244,121,187,205,205,168, +101,170,158,93,159,33,84,173,207,141,52,104,53,8,36,227, +119,57,74,229,2,109,48,52,9,73,221,212,88,157,206,116, +58,174,105,52,204,102,147,213,225,236,221,180,253,205,87,159, +181,104,245,164,217,94,78,165,76,86,99,149,107,44,196,242, +253,166,76,84,114,245,155,203,126,151,69,212,8,90,74,67, +8,164,77,43,17,218,38,201,4,99,137,149,38,199,23,139, +21,89,163,169,9,180,222,100,77,197,86,220,102,90,71,235, +199,22,211,92,173,50,216,63,24,137,22,71,39,151,74,4, +97,33,8,191,207,226,238,222,79,144,228,75,175,61,177,62, +175,213,58,13,161,69,163,241,118,119,75,245,34,165,38,73, +82,38,8,61,69,98,235,35,60,110,139,208,168,225,77,23, +211,209,47,125,227,123,63,251,151,239,119,181,132,73,131,113, +122,244,130,201,225,146,132,102,188,196,133,116,185,172,198,53, +20,210,85,162,139,30,191,69,163,85,219,245,38,149,84,212, +233,168,149,172,177,51,108,49,26,52,148,84,102,141,140,217, +160,149,100,117,60,93,172,55,68,174,94,31,91,137,203,181, +130,109,232,161,197,40,119,221,253,95,172,86,203,51,23,94, +141,44,205,190,246,252,195,67,125,221,39,39,166,255,28,194, +171,216,135,84,42,213,134,174,86,66,226,100,153,226,27,117, +35,173,227,85,100,165,42,118,180,182,54,248,10,37,115,201, +200,242,251,62,244,241,55,222,120,61,236,117,38,139,181,248, +202,220,205,119,222,247,218,75,207,151,5,178,154,143,14,13, +116,154,25,45,91,139,178,70,147,100,16,104,218,172,230,74, +38,157,245,212,124,35,96,211,246,121,185,133,8,127,116,36, +38,55,37,183,67,231,183,226,0,85,203,98,51,224,102,157, +172,180,229,243,227,185,122,53,91,211,188,250,252,19,137,139, +71,8,82,35,52,114,111,189,246,70,133,32,214,103,8,215, +233,89,136,104,51,6,35,173,215,235,180,18,118,64,157,193, +188,125,243,102,150,161,68,158,183,81,229,149,133,41,139,199, +95,168,113,177,213,201,185,249,201,150,246,110,139,197,118,241, +226,121,187,205,233,118,216,11,53,89,144,41,89,165,42,136, +141,85,132,55,47,251,66,46,163,193,252,167,99,249,133,88, +38,178,26,175,169,221,21,13,213,233,97,55,13,4,53,106, +178,173,197,236,182,235,6,6,90,203,13,221,74,170,20,79, +149,84,50,89,88,28,39,75,177,246,237,183,34,110,233,108, +245,166,219,223,219,210,115,195,85,220,131,239,226,83,215,105, +8,245,26,90,173,34,105,214,128,76,145,36,26,133,66,121, +110,118,106,83,151,177,154,137,56,220,97,175,175,117,120,215, +181,38,163,217,215,177,217,217,210,179,188,186,226,8,182,214, +235,13,189,211,35,147,130,78,167,165,181,77,89,168,123,3, +94,130,108,106,85,234,248,66,52,228,208,168,53,229,107,119, +182,126,228,193,107,87,146,137,76,42,27,234,176,217,141,58, +171,81,171,33,155,13,177,121,101,98,65,172,151,108,174,176, +84,231,95,255,213,247,30,253,217,87,43,185,120,122,238,124, +160,99,96,207,109,159,160,108,65,149,57,248,46,198,229,42, +94,106,157,134,144,199,229,44,149,164,98,67,45,171,204,6, +154,171,113,66,147,21,200,150,158,205,155,38,38,231,167,38, +22,151,166,71,47,158,120,241,198,155,110,107,235,236,43,22, +10,75,203,11,172,86,215,229,119,14,246,108,20,26,141,116, +50,143,20,116,110,190,184,188,92,136,164,42,132,90,156,157, +43,221,54,200,24,228,250,194,212,210,202,114,34,146,150,45, +86,79,54,87,114,186,141,18,129,13,85,45,55,169,66,185, +114,230,252,165,199,127,249,141,130,86,31,30,216,211,190,249, +198,166,138,140,175,172,94,122,227,73,45,227,247,180,110,187, +138,235,250,46,62,117,157,134,16,237,6,131,137,46,55,234, +26,29,163,106,114,44,171,150,184,98,181,65,229,10,124,178, +46,132,6,250,24,187,63,95,225,143,252,233,167,43,11,243, +66,57,197,82,58,179,55,56,50,122,185,144,205,58,220,222, +138,72,152,140,172,205,74,81,6,77,181,222,208,82,148,150, +69,90,68,219,140,38,149,150,178,234,84,46,163,90,106,112, +217,98,213,110,81,201,178,138,19,81,20,54,73,82,234,220, +253,158,221,183,127,50,220,123,48,60,116,253,204,149,115,37, +94,46,53,213,246,158,45,46,175,143,101,29,239,98,92,174, +226,165,214,105,8,241,9,12,140,187,88,44,161,78,80,105, +244,180,65,91,40,36,162,145,137,233,137,75,187,182,108,78, +173,46,22,227,81,189,193,92,171,229,180,36,161,165,13,20, +195,84,139,133,165,165,121,131,158,164,81,127,8,133,170,160, +225,85,102,179,145,209,106,41,236,147,26,141,150,177,152,172, +78,109,163,81,211,24,108,42,210,88,40,86,157,30,123,83, +18,41,157,94,110,18,13,73,96,181,188,55,188,113,101,102, +44,190,58,69,91,125,58,139,179,125,248,134,161,125,239,111, +237,217,83,107,234,11,169,233,171,184,174,239,226,83,215,111, +8,45,118,167,150,101,69,89,165,214,26,81,69,168,155,178, +170,90,52,210,204,234,226,178,199,98,246,250,188,58,202,224, +14,12,39,86,46,7,61,30,135,195,195,154,204,122,131,221, +228,246,25,157,254,88,86,224,133,134,90,172,145,168,232,89, +13,214,216,252,114,58,147,73,85,196,134,94,35,87,114,25, +159,207,18,73,167,221,78,15,18,166,145,241,156,78,67,120, +156,90,151,89,101,245,109,85,213,115,36,201,84,115,81,82, +197,122,131,93,2,87,142,44,140,71,166,207,55,53,244,187, +24,151,171,120,169,245,27,194,232,194,37,146,224,81,196,201, +205,166,76,80,42,89,75,178,198,122,67,50,152,77,59,15, +220,178,180,180,148,74,68,13,118,87,41,159,232,222,178,79, +67,52,205,70,171,129,161,143,60,247,108,41,189,226,181,105, +57,142,243,122,29,101,78,240,216,13,132,212,164,136,166,86, +173,154,153,41,47,199,203,221,45,22,135,67,27,203,85,50, +137,168,44,53,205,6,117,171,87,135,155,36,150,105,212,73, +59,219,50,100,241,186,13,214,64,75,255,112,60,185,90,169, +22,107,137,85,163,175,79,214,48,87,113,93,223,197,167,174, +223,16,202,18,111,119,184,178,249,18,193,9,213,26,167,162, +8,139,94,101,100,181,139,115,19,111,190,249,178,209,100,206, +103,83,22,139,67,108,170,30,254,229,15,14,238,221,237,9, +120,60,46,175,193,108,230,26,77,149,90,127,105,46,179,176, +180,170,33,85,180,142,144,57,53,199,55,9,21,77,17,82, +182,198,185,109,134,163,111,47,100,82,178,129,101,140,52,237, +178,234,230,99,21,158,147,202,101,66,77,106,170,249,184,80, +147,138,153,180,196,87,196,82,22,225,247,116,110,172,198,39, +115,145,217,119,49,46,87,241,82,235,55,132,77,169,145,204, +36,29,14,135,30,203,71,165,182,26,52,180,53,72,104,53, +114,179,81,170,149,150,23,231,111,189,231,3,201,84,138,50, +181,105,212,218,71,159,125,108,101,117,149,19,5,70,199,200, +178,160,39,85,181,154,96,210,18,46,159,129,182,218,82,185, +90,83,163,174,73,234,98,185,92,173,241,98,83,210,170,154, +70,157,190,163,213,85,44,214,25,189,74,163,33,157,102,93, +131,212,50,40,61,40,29,195,104,5,161,86,45,87,36,153, +196,45,66,82,140,193,219,75,146,186,171,184,174,239,226,83, +215,111,8,13,182,176,150,212,75,106,178,222,104,104,212,4, +118,182,76,18,171,74,151,79,150,119,109,217,198,88,29,103, +46,158,19,139,49,3,186,165,129,238,252,226,101,164,33,124, +173,33,8,2,203,176,21,145,68,45,63,187,90,209,105,53, +200,42,113,76,22,235,98,169,92,161,245,84,83,104,38,139, +146,137,81,223,117,115,247,200,200,2,86,95,34,199,241,66, +179,196,55,68,93,176,65,80,165,114,185,73,80,102,167,223, +21,234,52,57,60,161,246,62,174,169,229,121,14,171,248,93, +140,203,85,188,212,250,13,97,37,61,79,168,181,133,124,65, +111,241,84,26,205,92,49,37,9,21,78,16,25,155,165,36, +138,14,170,145,142,71,41,131,115,113,97,46,89,169,53,180, +198,74,41,233,111,235,104,8,117,74,77,68,18,17,175,199, +66,52,73,39,107,172,214,139,139,243,75,141,154,80,174,75, +57,190,86,211,18,121,142,71,155,77,166,36,167,147,69,19, +220,196,82,42,181,42,146,41,19,68,150,203,174,218,93,158, +106,165,164,71,49,67,234,41,131,177,90,171,201,178,100,50, +57,4,66,115,21,215,245,93,124,234,250,13,97,19,205,73, +169,81,173,213,107,181,74,185,44,200,50,91,174,8,245,66, +150,101,237,169,88,188,123,243,222,74,189,76,235,141,30,151, +107,168,167,175,41,233,179,201,136,215,97,114,216,93,124,29, +33,101,118,246,187,91,252,44,95,23,245,26,141,211,110,23, +85,205,114,169,110,50,234,140,122,45,79,146,49,142,123,241, +194,204,92,34,147,203,114,168,40,4,81,180,48,216,46,41, +212,45,4,169,165,205,214,68,116,110,254,220,203,151,31,253, +2,201,39,89,179,89,84,169,140,38,204,45,214,227,99,253, +134,80,174,87,165,106,77,163,81,73,77,194,110,53,213,133, +18,101,114,52,73,140,226,75,90,82,87,173,10,195,195,59, +105,147,190,119,96,179,172,34,66,221,195,141,166,86,168,214, +91,194,29,13,180,228,154,194,228,124,114,38,165,137,22,132, +92,142,207,149,43,110,179,254,131,239,31,52,211,6,89,146, +249,106,157,162,213,46,139,206,206,80,22,150,178,152,53,13, +185,153,107,112,180,37,180,105,215,93,90,147,87,86,83,92, +58,170,161,152,174,235,254,202,237,237,112,24,48,229,175,32, +167,90,143,1,36,214,235,212,30,23,75,109,180,87,120,169, +169,210,150,242,69,89,150,141,52,171,149,5,11,77,137,42, +74,111,50,151,10,217,104,50,241,196,35,127,56,250,202,17, +135,219,157,136,175,80,70,207,209,215,143,160,11,64,53,85, +22,19,83,169,86,69,177,92,46,22,93,180,166,43,104,117, +89,45,115,171,37,174,86,215,10,146,69,171,54,50,122,182, +73,134,92,40,67,180,50,79,106,100,109,72,203,244,116,31, +228,203,137,228,236,201,213,211,79,70,39,222,44,166,103,196, +90,54,181,58,87,206,196,185,134,216,88,151,8,21,229,66, +173,207,59,11,239,138,111,240,42,108,105,70,86,77,107,106, +245,114,182,194,149,170,53,74,38,186,93,170,54,95,192,231, +107,25,26,232,35,26,196,214,205,155,71,207,29,79,103,22, +141,20,145,76,36,58,195,110,167,215,143,41,160,205,160,83, +235,173,18,161,113,186,173,177,2,54,226,198,244,149,120,34, +93,206,21,177,39,171,130,20,49,236,103,211,133,106,170,32, +172,196,100,74,111,147,155,66,219,166,3,198,150,65,91,104, +208,213,189,219,51,116,152,245,246,87,72,75,73,214,71,42, +34,122,59,205,210,210,250,188,86,235,55,132,165,130,44,8, +64,89,240,106,130,108,212,249,114,185,146,171,148,99,165,122, +81,237,189,52,51,117,225,252,201,151,158,123,58,212,22,104, +146,58,244,69,77,70,27,161,214,87,56,98,126,121,213,23, +12,214,249,134,65,35,4,29,12,67,75,83,203,89,175,149, +225,9,244,95,76,130,160,178,24,116,216,66,29,54,93,32, +224,66,206,162,213,105,44,140,88,43,165,24,154,230,101,236, +210,13,147,197,225,108,233,247,183,111,112,6,59,204,172,137, +212,49,6,198,210,228,107,185,18,242,157,245,248,88,191,33, +196,229,215,1,13,1,176,147,205,236,246,122,205,38,52,60, +109,125,253,155,119,238,186,86,71,8,54,183,55,20,242,91, +109,206,209,43,163,21,204,153,42,245,228,106,4,91,221,177, +87,158,44,164,34,36,165,46,215,48,117,162,42,156,38,91, +40,87,129,162,34,52,145,124,5,163,171,90,163,209,191,161, +91,64,240,168,218,149,24,17,203,84,86,138,205,116,1,219, +164,172,55,133,84,132,160,211,146,130,216,16,26,0,233,52, +8,66,66,111,72,163,37,37,190,78,26,124,235,49,128,235, +121,35,205,23,139,217,82,61,154,201,75,42,189,195,106,49, +177,6,158,23,167,103,198,24,214,82,170,55,247,238,58,160, +97,93,233,108,161,167,183,175,181,165,53,178,146,118,7,189, +118,151,123,122,38,135,243,175,90,109,172,148,164,70,67,224, +69,146,213,27,180,56,30,85,114,34,89,11,250,205,22,131, +106,126,121,214,236,14,255,242,213,236,163,111,206,160,111,71, +240,92,139,71,87,43,151,212,90,182,169,132,76,213,196,216, +2,191,68,116,102,8,252,159,199,164,139,162,88,139,235,207, +33,188,186,43,160,81,151,66,102,206,169,41,151,83,83,51, +51,115,187,246,92,75,234,200,116,34,122,236,141,87,204,14, +79,165,152,143,199,99,98,189,58,188,121,147,222,104,112,88, +200,108,44,161,167,245,140,213,50,187,20,169,11,188,193,108, +213,234,177,115,214,139,197,178,90,77,170,40,85,139,147,50, +232,84,91,123,67,233,146,172,174,71,167,166,211,120,67,91, +250,92,36,173,179,89,157,200,145,104,101,204,76,18,42,137, +68,91,93,129,89,32,144,146,36,53,209,71,213,234,104,157, +129,189,186,15,240,110,61,123,29,111,164,148,158,231,229,124, +177,164,86,75,22,125,41,30,93,192,149,148,181,186,182,112, +155,196,151,223,120,235,213,214,214,160,197,229,60,250,230,155, +75,19,151,171,101,116,178,213,77,169,238,50,106,100,174,129, +153,130,80,202,72,77,209,110,181,133,60,22,164,147,148,150, +68,131,45,146,170,38,4,81,103,36,203,165,90,123,192,26, +180,24,98,133,26,73,10,171,209,84,54,149,174,148,234,180, +94,195,50,12,133,134,155,26,133,60,150,35,226,32,107,40, +13,186,108,106,245,159,187,51,87,121,87,46,36,75,249,124, +125,21,23,125,49,47,55,168,11,167,222,38,248,114,179,198, +91,157,54,84,223,31,255,139,79,215,138,85,100,154,153,232, +74,120,96,152,54,177,92,17,160,52,75,54,147,199,16,30, +221,76,156,127,77,20,228,0,109,212,235,64,168,101,179,85, +135,149,49,91,72,147,74,172,102,120,28,133,181,90,99,181, +132,138,31,249,173,73,36,148,3,79,171,85,199,35,43,217, +76,138,19,4,0,201,181,58,157,106,45,110,42,85,83,75, +82,164,154,188,202,79,240,46,61,157,252,246,183,191,253,46, +189,212,213,188,204,243,143,62,251,87,95,253,171,246,158,161, +155,111,184,125,199,53,215,28,188,245,125,111,156,63,155,140, +174,110,222,56,104,119,5,166,102,199,48,115,199,252,215,96, +178,108,219,186,57,157,43,71,231,102,28,30,179,172,53,212, +171,21,192,21,113,130,117,180,185,252,14,67,173,65,168,100, +206,168,199,172,158,210,106,49,243,16,41,53,78,63,34,95, +149,46,175,82,173,94,39,77,9,124,69,192,18,67,133,88, +42,137,106,45,115,225,244,27,197,76,42,178,48,41,18,26, +74,207,242,162,40,137,248,129,210,106,170,240,153,247,108,189, +154,15,241,46,61,119,157,110,164,219,183,239,54,26,76,38, +111,32,223,208,216,157,246,207,124,243,235,205,66,230,61,119, +222,243,224,71,62,190,184,48,121,237,182,221,14,111,32,145, +76,106,73,50,87,42,158,63,125,204,21,112,185,3,237,129, +80,216,96,48,72,178,92,23,8,131,86,151,43,215,26,34, +81,225,121,183,149,166,48,234,149,36,70,173,78,102,27,57, +161,105,178,80,179,75,201,68,62,39,144,70,11,74,72,138, +204,22,27,189,123,110,102,24,195,77,247,124,76,71,169,108, +158,80,33,29,171,215,42,152,146,16,10,235,4,203,113,157, +94,171,117,250,182,196,122,197,102,53,173,196,150,143,252,246, +11,207,255,225,31,76,34,176,101,206,203,87,46,38,179,217, +43,19,227,254,214,142,124,54,62,184,113,99,44,177,184,111, +223,245,24,245,21,82,41,132,237,196,43,175,18,106,137,98, +204,2,176,195,140,54,86,86,81,90,125,173,46,212,27,124, +60,89,92,136,84,212,164,150,98,181,225,78,250,242,156,92, +226,197,77,109,122,93,61,118,252,82,116,58,146,75,229,50, +243,151,143,39,38,207,85,171,133,246,158,1,21,22,43,195, +2,56,74,226,20,165,212,106,28,142,235,244,40,92,175,119, +214,209,115,231,166,151,150,254,240,31,63,206,164,65,112,17, +41,146,74,165,18,140,154,206,166,147,192,12,94,190,124,118, +113,113,97,126,106,202,235,13,60,241,232,239,173,38,125,174, +74,0,35,195,26,217,74,13,21,93,29,55,166,92,203,212, +203,85,171,197,232,119,105,35,217,70,166,32,46,199,170,233, +124,93,71,171,180,98,243,248,229,4,50,158,163,227,149,128, +223,100,183,232,156,86,150,166,181,161,158,205,246,214,46,189, +158,206,230,10,164,222,200,178,38,140,183,16,197,122,13,57, +173,90,163,249,243,164,226,106,142,134,233,133,241,47,127,253, +139,188,40,28,216,25,156,77,32,251,208,161,42,239,217,188, +21,12,177,68,34,45,212,57,82,103,46,87,74,99,163,99, +217,82,149,84,169,41,21,193,137,50,39,41,196,25,66,20, +245,4,161,211,232,226,201,216,234,242,172,134,209,36,81,185, +19,146,211,206,210,70,109,163,70,69,147,228,66,172,104,210, +105,5,158,43,87,234,168,29,87,11,26,73,36,184,66,162, +81,43,169,137,230,198,205,59,125,254,86,86,171,42,46,92, +88,56,251,44,87,204,149,75,57,89,16,175,230,19,188,123, +207,93,167,27,233,59,23,224,214,97,223,200,66,174,92,230, +58,218,123,174,63,116,23,39,139,83,147,163,219,118,237,182, +59,28,211,243,243,162,74,221,222,213,109,210,169,65,91,218, +188,103,55,130,148,87,250,52,18,168,135,24,237,113,146,236, +178,131,120,214,88,92,174,171,209,248,118,24,88,147,38,87, +151,18,105,126,38,146,65,213,71,162,114,208,144,5,78,135, +27,5,163,12,153,80,85,51,139,109,253,123,90,90,91,13, +6,96,20,43,99,167,159,48,152,25,66,22,64,189,40,206, +188,150,94,186,252,238,133,229,106,94,105,253,134,240,190,237, +142,74,37,37,209,254,193,222,222,182,206,30,13,173,127,248, +225,223,235,41,253,249,179,103,207,93,58,43,242,53,174,33, +89,76,230,185,213,36,72,45,110,175,175,152,45,162,150,96, +205,134,58,169,109,98,193,144,90,137,171,87,74,13,61,197, +84,202,66,42,89,6,166,45,9,66,34,37,86,107,202,167, +214,2,139,175,110,38,50,69,45,99,114,187,45,162,164,90, +89,88,26,57,119,244,145,95,126,255,249,135,255,53,186,120, +49,224,15,26,89,11,163,17,166,78,252,166,86,78,136,220, +58,37,167,173,223,16,94,154,204,144,214,157,95,250,244,231, +111,189,253,14,92,240,158,158,190,59,110,191,29,227,162,61, +123,182,229,179,25,171,197,128,48,196,34,75,128,223,99,162, +59,189,184,56,53,63,143,129,30,26,42,181,82,201,96,209, +39,211,53,19,67,217,236,182,36,206,63,134,170,84,36,65, +110,218,29,58,66,215,92,137,149,113,172,85,69,162,90,71, +51,84,83,45,85,115,185,98,149,151,252,157,253,159,253,194, +135,63,243,215,95,251,200,231,190,122,235,123,62,49,176,229, +80,46,118,105,102,236,24,109,235,20,57,65,111,180,94,205, +218,120,247,158,187,78,67,216,19,8,13,237,191,231,154,235, +14,21,98,81,146,210,5,189,46,204,238,43,149,42,95,42, +222,118,253,29,67,155,118,72,130,232,115,57,114,133,114,60, +22,225,4,116,161,107,232,200,48,148,218,98,100,12,58,45, +134,245,18,13,66,26,234,192,70,177,92,215,232,101,87,139, +222,98,161,133,166,92,173,242,104,158,99,149,2,70,83,173, +215,211,21,209,64,171,130,110,103,185,33,159,123,249,39,47, +255,241,95,162,211,43,255,250,157,207,125,231,211,119,252,242, +39,95,117,182,110,185,233,161,127,114,183,110,236,216,118,171, +44,42,173,154,117,248,88,167,33,180,217,221,0,68,156,58, +121,116,49,25,173,151,10,172,193,48,53,55,141,206,231,114, +50,245,240,159,254,24,47,228,39,39,167,48,136,50,48,140, +81,79,154,12,108,33,147,199,56,9,201,228,106,60,213,212, +74,188,70,37,212,202,126,183,163,78,112,86,27,13,206,132, +205,172,225,42,205,58,207,27,180,122,181,74,249,212,18,143, +210,131,160,244,88,205,84,52,158,114,219,108,160,81,77,158, +126,234,200,35,191,124,224,99,95,251,232,95,254,228,107,255, +252,52,87,204,172,206,28,47,174,94,18,138,203,86,147,121, +29,198,79,169,88,215,231,219,170,100,211,66,147,187,48,114, +17,133,157,129,49,56,61,158,231,94,122,254,196,177,227,30, +155,197,237,116,51,122,131,6,97,80,163,249,172,55,232,25, +145,175,179,22,19,214,8,58,209,46,19,35,52,100,187,197, +108,101,141,185,124,141,195,31,25,69,139,73,83,207,83,64, +20,102,243,146,164,66,107,70,89,79,20,173,67,204,100,46, +157,201,215,180,58,53,224,166,117,222,66,234,122,187,219,91, +49,220,40,101,163,88,208,183,125,232,111,250,55,12,109,216, +125,143,94,103,40,44,157,92,159,215,106,157,134,80,207,232, +170,217,252,181,91,247,238,189,230,208,169,179,167,158,127,225, +169,66,54,199,170,192,151,86,203,82,245,204,241,215,124,38, +125,255,134,190,108,42,161,107,10,164,201,84,204,230,112,125, +139,169,148,203,229,19,132,102,42,154,49,234,48,238,163,252, +172,205,172,181,24,154,78,89,210,137,130,36,75,68,190,82, +242,88,149,10,47,149,43,137,2,145,20,28,160,1,191,126, +57,53,151,44,55,141,206,237,215,221,70,25,245,172,209,64, +106,244,245,74,174,90,72,25,141,182,244,210,168,61,208,101, +114,133,254,28,194,171,184,2,177,68,106,105,121,254,208,77, +55,44,199,87,78,158,62,121,225,194,89,52,54,15,94,127, +200,98,179,47,174,172,162,249,156,47,215,250,123,7,116,52, +104,48,205,29,131,67,197,106,29,63,221,19,240,213,80,83, +96,100,164,34,246,238,218,178,154,41,172,100,132,42,167,201, +113,160,215,55,112,98,50,164,186,193,75,6,84,124,88,178, +58,64,189,155,139,75,145,144,215,54,224,101,48,143,202,68, +222,60,251,250,95,157,61,249,12,212,47,54,14,116,151,114, +153,197,201,209,165,197,133,102,35,151,90,158,150,180,127,102, +54,93,69,4,9,218,104,190,227,250,91,40,189,254,133,103, +31,35,234,197,45,195,91,117,148,122,100,124,122,124,122,54, +158,203,217,28,30,181,78,23,137,46,3,39,81,166,76,177, +60,80,53,21,139,205,154,203,22,198,38,38,49,89,40,53, +9,82,231,246,135,218,235,117,76,233,155,115,43,133,134,200, +171,116,192,102,168,18,57,129,214,105,177,249,96,128,236,176, +177,106,141,106,118,57,211,226,179,232,53,70,90,235,93,89, +92,186,124,238,169,216,202,132,88,43,22,98,179,154,70,129, +16,113,226,26,154,50,175,87,73,87,243,9,222,189,231,174, +211,141,52,153,75,87,107,213,255,248,239,255,138,207,142,225, +52,196,215,54,143,255,203,159,253,172,217,102,146,36,46,18, +141,185,189,110,12,246,80,197,235,24,227,155,175,191,165,163, +25,147,94,107,119,88,105,45,24,50,202,81,119,97,98,102, +98,118,206,204,48,153,66,206,202,34,63,85,3,174,207,81, +138,36,13,152,104,6,224,133,9,162,86,131,188,137,184,90, +4,216,66,157,46,137,69,180,77,37,225,224,161,235,220,118, +61,195,154,218,187,251,41,181,36,148,11,162,76,121,194,27, +89,167,251,221,11,203,213,188,210,58,13,97,103,168,101,42, +178,114,234,204,25,64,208,64,88,10,183,182,113,245,234,11, +79,61,209,214,214,201,98,116,64,16,55,223,112,203,210,226, +178,205,233,154,153,95,184,102,223,94,20,21,177,88,210,96, +64,90,3,196,169,130,187,110,52,213,164,36,102,138,156,207, +198,106,9,9,229,190,74,173,209,19,50,139,169,4,169,6, +43,17,143,82,21,105,172,42,146,44,52,41,61,205,232,146, +165,170,221,238,248,203,191,127,190,82,172,18,36,165,49,216, +123,119,28,8,118,118,97,70,1,90,135,94,103,188,154,11, +251,238,61,119,157,134,144,96,152,147,167,78,222,122,227,141, +237,3,155,222,243,224,71,227,133,82,58,155,211,216,156,51, +163,163,42,53,23,246,56,120,89,60,117,230,244,206,237,187, +112,169,240,76,132,213,100,160,167,166,166,0,205,198,126,135, +0,241,146,138,50,218,37,181,154,23,4,138,165,177,50,203, +37,73,228,245,69,212,140,128,195,160,149,74,16,38,86,143, +20,215,101,183,151,120,21,223,4,95,195,254,234,43,43,11, +19,227,151,95,251,81,114,238,152,219,105,114,90,173,93,27, +134,68,149,160,167,181,245,220,234,187,23,150,171,121,165,117, +26,194,11,151,206,223,125,211,29,140,217,113,101,108,252,135, +63,255,241,249,99,175,93,187,117,179,36,138,42,73,224,26, +178,211,229,123,238,197,151,177,24,31,127,234,113,124,216,141, +189,125,192,186,132,194,173,31,253,228,39,157,78,27,141,22, +169,138,112,152,217,86,171,42,228,54,240,24,232,66,192,75, +148,117,148,44,170,172,102,86,75,211,148,22,207,192,74,197, +116,30,162,107,132,164,37,101,138,16,106,162,194,216,62,246, +244,207,91,252,221,224,239,203,77,85,50,153,208,233,233,254, +13,195,24,23,122,61,127,134,63,93,205,157,165,212,109,90, +227,196,196,120,60,149,52,51,58,179,86,102,92,126,244,166, +81,13,162,73,210,210,26,166,104,164,254,80,171,208,216,45, +166,209,201,113,60,223,233,176,169,100,53,54,94,32,38,42, +77,34,153,76,97,207,92,138,231,151,19,165,92,169,210,144, +154,26,138,228,248,92,93,145,1,3,251,94,167,35,209,10, +39,10,197,122,60,91,152,90,78,247,116,186,203,197,188,76, +91,222,62,117,98,215,254,27,138,19,191,37,202,211,30,151, +9,114,96,165,66,145,181,58,120,174,116,149,159,224,93,122, +250,58,93,133,248,244,79,62,243,63,221,126,51,22,203,208, +134,238,84,137,159,155,155,158,155,155,115,121,157,169,42,97, +50,89,22,230,167,177,21,214,234,224,140,201,54,171,5,169, +141,94,175,31,25,185,48,57,53,133,89,61,146,203,42,207, +101,203,141,90,157,128,172,30,107,66,227,91,106,32,192,77, +8,0,17,13,142,176,88,73,157,138,192,178,174,113,117,175, +195,88,21,25,74,5,89,41,46,89,82,77,140,94,94,41, +81,119,126,237,73,103,219,96,107,40,228,115,48,29,65,159, +85,195,165,86,22,223,165,152,92,229,203,172,223,16,182,65, +236,206,200,110,223,60,8,6,61,107,117,121,156,142,88,108, +5,197,56,30,77,4,68,32,234,213,58,56,46,80,159,1, +199,218,237,241,142,78,78,59,176,195,122,221,38,19,186,163, +130,10,242,150,225,32,69,53,129,158,169,87,240,124,89,35, +99,59,4,22,77,197,139,156,199,198,54,214,106,4,81,146, +85,162,156,74,166,210,57,1,74,125,43,169,124,52,69,252, +227,55,190,244,179,207,127,238,27,159,120,223,127,252,207,111, +255,244,196,227,47,28,121,228,55,191,252,81,38,27,185,202, +107,251,46,61,125,157,134,16,41,101,62,79,128,117,237,179, +187,119,93,123,189,137,101,151,230,166,181,178,152,45,228,189, +118,107,58,30,199,229,9,186,237,131,67,3,75,171,209,213, +72,52,153,78,109,236,239,158,159,157,45,228,179,52,173,3, +92,9,255,157,159,30,103,40,202,102,164,74,85,153,135,100, +130,164,97,212,58,232,46,228,107,188,205,238,2,204,23,15, +154,97,212,208,239,210,145,137,92,193,227,181,246,183,5,9, +70,183,180,116,106,111,91,225,254,189,237,15,222,113,251,131, +247,188,239,75,223,250,241,39,254,242,39,7,111,184,251,93, +138,201,85,190,204,58,13,33,246,79,79,208,24,89,90,249, +250,23,255,242,200,75,207,207,204,140,137,200,45,155,68,77, +32,202,245,250,74,42,101,181,217,119,236,222,51,53,57,19, +110,105,9,248,253,78,187,181,183,111,227,232,196,4,90,104, +165,42,48,50,32,125,170,33,61,26,10,216,59,130,102,214, +72,232,8,171,90,166,237,16,85,4,32,74,64,215,212,104, +99,149,110,183,73,175,227,57,249,224,182,238,104,18,202,137, +108,163,81,96,245,122,128,192,23,235,174,240,224,205,15,255, +244,107,255,241,157,219,95,253,211,119,117,42,142,145,139,87, +121,109,223,165,167,171,54,13,110,190,120,249,194,193,107,174, +203,174,204,141,44,45,226,218,161,133,76,234,12,197,170,114, +108,188,243,24,232,238,87,118,154,124,94,132,44,36,65,88, +41,8,237,16,85,137,64,85,165,165,204,70,11,157,207,228, +67,45,237,75,75,19,120,242,254,109,123,131,45,157,110,187, +13,228,230,95,61,254,59,0,221,181,14,191,73,168,248,44, +230,209,229,21,60,225,208,254,67,111,189,245,218,117,135,110, +136,172,68,198,102,198,63,122,255,131,137,114,233,217,35,207, +188,243,90,219,90,208,15,19,43,69,34,24,176,122,59,135, +60,70,11,219,214,245,163,127,252,167,144,199,189,146,72,226, +9,45,110,87,160,173,101,108,98,246,131,247,221,251,202,219, +199,99,177,152,213,106,143,172,172,160,1,234,114,186,82,233, +84,103,103,59,50,150,45,155,183,62,247,236,147,50,161,245, +91,9,155,159,106,150,53,20,173,161,40,33,86,169,217,204, +236,144,175,231,165,183,78,173,22,149,173,85,110,138,27,2, +108,182,214,188,237,192,198,19,35,11,43,139,73,55,75,124, +230,27,63,92,89,156,75,174,158,42,148,147,18,95,8,116, +222,224,10,223,160,117,180,47,92,57,51,55,191,234,241,123, +212,134,80,173,82,68,159,93,197,250,209,175,171,9,16,200, +172,165,151,199,171,249,88,83,45,219,90,183,147,90,163,140, +145,63,39,2,21,39,74,77,1,8,113,84,60,132,172,198, +22,209,196,102,14,132,87,137,231,106,2,151,167,85,162,73, +79,214,26,146,26,104,102,161,65,211,22,28,23,213,92,50, +56,176,79,79,27,165,74,214,233,111,91,93,157,157,123,227, +39,133,236,148,178,253,120,251,87,227,227,247,124,240,7,51, +243,115,221,65,150,188,238,186,27,208,236,207,230,50,192,247, +232,155,53,87,192,247,145,143,127,189,61,24,110,66,121,73, +45,117,132,67,30,151,19,18,202,57,78,114,120,253,30,167, +207,105,177,4,67,97,72,7,128,198,14,248,250,224,208,38, +146,3,58,8,242,4,5,142,71,76,137,219,111,190,205,31, +10,158,57,245,246,235,111,190,180,169,191,239,179,31,249,228, +119,190,246,55,52,173,79,38,99,247,221,251,222,144,195,109, +55,176,6,139,13,31,142,36,53,67,155,54,191,254,234,203, +217,68,132,162,233,90,93,129,45,229,138,242,157,183,223,74, +17,37,112,170,245,106,205,96,255,150,191,252,220,151,85,52, +93,45,228,161,106,16,246,219,133,26,199,149,202,177,76,182, +189,181,189,191,183,27,60,221,66,62,223,139,47,50,185,189, +187,119,150,75,165,214,112,104,101,121,121,215,206,237,171,43, +243,185,98,197,231,48,18,13,90,226,121,147,131,42,53,0, +24,86,185,44,170,92,150,95,92,42,129,246,130,108,8,185, +208,74,166,186,115,200,63,57,151,214,82,162,195,98,104,247, +208,63,254,221,83,191,255,249,87,173,70,103,62,51,115,255, +151,95,14,247,223,142,17,63,96,53,106,218,30,244,187,145, +157,26,12,58,59,77,218,221,206,182,214,78,116,197,237,102, +163,211,101,113,7,130,45,237,125,42,169,20,238,232,243,185, +108,78,171,209,109,55,89,76,24,85,82,86,179,206,101,166, +29,22,157,213,194,56,173,58,27,190,118,152,90,2,14,159, +215,211,84,53,2,173,29,46,155,206,239,241,57,93,14,162, +186,188,1,224,102,34,111,34,74,6,150,164,85,149,122,226, +108,228,212,79,228,244,170,217,168,190,239,47,126,108,181,89, +203,185,37,27,77,56,221,193,76,124,146,28,232,238,139,68, +87,189,94,79,161,80,148,196,26,96,206,3,131,187,30,255, +245,63,107,44,86,104,134,168,181,24,147,106,205,70,211,29, +119,220,235,114,218,87,86,231,130,225,112,145,87,37,83,25, +141,221,183,113,211,182,216,242,34,99,48,184,221,86,176,57, +139,197,34,65,81,62,151,203,160,209,92,154,159,217,181,123, +207,241,211,39,94,124,229,72,100,106,244,15,143,63,178,152, +72,152,40,106,97,117,126,97,113,86,82,55,46,94,190,220, +26,110,77,69,87,73,155,125,97,121,9,241,115,185,221,16, +139,209,169,154,163,163,51,6,48,57,73,20,6,9,76,101, +95,121,238,169,161,222,190,55,223,122,253,155,223,250,219,82, +173,113,225,242,37,61,77,1,28,152,207,231,71,46,143,226, +109,42,135,129,74,245,193,15,62,248,234,235,175,197,226,73, +143,219,149,205,228,174,63,120,237,169,83,39,212,42,137,214, +144,172,213,4,101,96,61,203,73,2,153,47,112,173,30,71, +33,95,77,151,56,40,232,17,42,53,104,19,32,195,56,208, +214,225,165,125,251,111,95,152,58,187,117,75,127,200,29,252, +245,175,127,124,237,141,119,136,182,129,182,222,195,140,94,123, +246,173,151,50,209,217,182,13,91,9,218,84,72,172,26,76, +182,87,95,252,131,175,165,143,54,88,56,190,6,46,43,150, +126,19,152,98,76,32,173,62,173,142,1,179,14,204,86,128, +87,149,249,8,222,159,164,48,109,8,28,201,107,119,2,214, +165,70,37,150,147,17,136,29,179,0,153,83,44,99,242,37, +23,207,45,67,62,83,172,71,102,79,23,51,139,201,200,149, +197,43,47,23,226,11,180,217,206,37,38,54,95,115,56,150, +171,58,125,3,21,81,189,124,233,197,142,161,27,51,169,165, +232,194,8,57,212,59,80,174,150,179,233,120,181,86,50,233, +41,44,16,214,236,112,219,188,26,189,62,22,89,13,181,247, +216,205,166,185,233,241,108,36,58,57,51,182,101,235,206,108, +58,45,201,130,39,24,184,251,150,219,188,86,215,66,34,1, +14,67,182,80,220,184,105,243,208,240,246,91,14,221,52,126, +229,242,200,200,8,33,112,137,68,28,31,201,97,215,53,154, +228,166,157,187,48,84,144,48,64,167,212,115,11,139,15,188, +255,131,59,118,238,131,222,29,54,150,107,183,111,185,50,61, +253,129,15,125,18,11,8,232,94,40,144,66,68,221,211,218, +185,52,149,192,190,227,9,6,103,86,151,159,124,245,245,68, +50,119,247,181,7,48,189,27,153,153,116,59,157,161,96,240, +194,200,101,200,59,207,206,205,121,252,222,169,41,64,47,150, +187,187,186,250,251,122,99,177,104,36,150,216,186,117,203,216, +228,28,70,253,201,34,111,49,25,162,241,178,215,167,67,75, +20,61,210,173,125,157,11,243,73,92,112,153,208,53,100,180, +114,32,195,214,236,105,51,143,78,196,26,165,120,54,89,124, +244,165,139,254,222,65,94,215,106,179,183,239,221,127,223,242, +28,64,29,243,49,0,112,210,201,248,212,5,151,191,27,130, +96,184,219,252,29,195,152,28,19,26,166,80,42,107,180,80, +221,148,248,134,36,33,105,150,100,17,108,26,132,12,95,40, +36,41,124,74,229,133,145,12,131,155,129,120,42,90,72,168, +136,248,26,162,12,78,121,37,179,68,21,230,47,156,126,202, +209,185,219,28,24,194,178,209,146,80,104,233,104,31,56,24, +28,184,85,38,85,249,213,17,151,213,99,29,124,207,202,204, +25,95,184,123,244,237,63,220,242,222,175,230,115,169,179,111, +63,225,111,29,34,55,14,12,250,195,161,92,42,93,229,202, +52,11,89,64,172,219,70,160,165,251,212,233,227,102,29,70, +5,250,203,103,207,225,8,108,52,27,125,3,155,6,55,12, +43,146,46,213,218,129,221,215,62,253,200,239,222,62,250,70, +127,239,6,129,203,34,161,144,43,229,248,74,228,216,235,47, +36,115,41,108,235,185,98,238,189,239,251,112,71,103,123,181, +38,92,190,60,178,107,112,23,146,145,201,249,149,27,175,187, +169,103,96,232,205,35,71,188,78,167,172,86,207,175,44,63, +117,228,133,27,111,186,99,168,189,157,43,45,129,189,187,107, +247,53,127,241,161,143,126,254,115,95,121,246,213,87,122,55, +14,54,73,218,231,246,64,100,61,18,143,119,116,117,28,123, +243,245,206,150,208,228,228,196,181,123,119,159,56,123,158,23, +68,40,112,93,179,123,103,54,87,68,90,51,126,101,28,165, +94,189,33,112,149,218,245,215,221,176,184,56,239,179,169,61, +22,82,45,52,8,0,65,25,124,56,34,159,230,135,123,130, +75,43,171,145,140,92,197,199,82,19,118,179,193,198,146,102, +11,212,241,85,52,186,168,245,218,23,255,238,159,254,248,189, +47,134,135,239,212,25,236,15,63,253,138,51,216,93,230,164, +112,39,164,192,123,120,53,89,206,197,114,201,85,79,235,6, +173,94,167,209,26,113,156,98,33,34,70,208,36,70,188,148, +204,23,144,58,25,95,43,205,62,101,33,42,153,3,142,63, +4,16,11,82,33,189,225,54,194,178,212,106,116,122,198,80, +206,167,37,174,164,114,110,240,116,93,35,148,179,56,11,217, +64,47,65,25,48,26,173,229,230,151,199,95,153,62,241,228, +222,155,63,46,25,188,170,166,192,231,151,107,165,156,142,162, +42,101,62,178,50,58,188,245,6,200,2,144,22,51,139,31, +85,72,197,173,158,144,213,4,97,214,115,232,250,23,75,53, +151,213,154,40,150,247,95,119,19,94,44,147,73,162,39,25, +240,182,198,86,35,175,189,242,244,210,226,202,174,221,123,245, +22,27,99,53,92,58,241,38,42,179,182,238,77,175,31,125, +131,162,32,235,83,55,219,173,219,182,239,129,74,196,161,237, +123,100,146,102,104,253,233,243,103,59,186,250,58,219,58,182, +12,15,143,142,93,14,134,66,111,159,61,121,229,210,185,225, +193,205,27,134,135,61,110,223,135,31,124,240,181,23,158,30, +57,119,234,11,95,248,230,198,238,126,35,165,231,170,21,220, +199,183,94,123,147,35,24,138,44,205,15,108,24,56,125,238, +188,207,97,125,252,165,87,208,148,225,161,235,83,169,98,160, +15,233,160,123,239,188,83,228,5,128,175,35,171,209,141,3, +27,208,175,17,129,68,20,27,131,27,122,47,156,58,1,93, +239,232,106,214,100,101,68,162,193,26,73,74,175,46,102,165, +110,191,45,18,73,100,107,20,80,136,184,222,216,218,122,59, +252,0,122,99,201,196,114,28,38,201,102,215,240,232,82,42, +18,93,81,49,110,187,203,127,230,216,139,232,248,52,178,17, +177,193,181,180,13,232,76,222,66,49,39,243,141,106,49,15, +210,97,45,31,149,154,0,115,168,80,98,66,205,29,172,68, +69,60,24,172,54,37,136,88,109,74,18,163,72,62,16,248, +241,248,19,9,85,13,8,59,16,27,199,130,109,212,138,50, +95,151,117,38,148,175,42,81,208,200,245,122,41,222,172,23, +8,174,170,111,102,71,222,250,189,220,168,117,110,191,135,54, +7,179,145,177,177,51,207,132,194,3,185,108,180,123,235,29, +153,98,210,102,54,226,52,201,165,19,164,219,225,196,174,220, +209,217,127,254,244,219,135,14,223,191,121,235,190,235,111,184, +25,186,255,14,143,39,232,15,54,48,85,19,229,77,155,183, +205,206,204,48,58,173,219,23,72,166,86,132,166,192,234,88, +220,68,233,100,146,50,24,178,197,98,71,75,248,192,13,55, +206,205,207,106,13,102,143,215,175,145,8,29,169,126,230,169, +71,231,167,199,70,78,31,29,28,232,111,109,237,74,175,44, +3,24,17,106,13,99,247,108,105,107,95,77,164,60,86,71, +185,84,126,233,233,71,22,46,95,134,72,143,207,234,45,166, +115,106,129,59,121,236,181,233,75,23,111,127,223,123,126,248, +163,127,108,212,42,151,70,71,159,127,245,117,35,134,72,224, +149,25,152,111,125,245,27,143,252,225,215,135,110,190,43,151, +205,172,70,99,99,227,227,42,13,146,5,179,130,109,81,201, +43,177,248,194,220,66,107,123,91,127,127,207,233,163,202,237, +5,218,139,217,169,169,85,113,217,154,96,204,224,216,10,7, +67,139,139,169,120,145,239,237,240,37,51,197,134,40,49,148, +48,183,90,68,255,213,196,52,123,125,150,107,111,251,80,112, +232,90,147,201,109,54,217,85,42,124,26,138,147,53,153,92, +9,2,13,232,7,89,45,54,174,82,200,101,211,10,106,21, +172,139,98,70,108,146,50,198,204,42,173,18,57,37,69,66, +248,212,50,254,187,150,132,34,106,107,108,69,236,185,8,41, +18,83,252,30,19,47,76,82,176,59,224,102,4,50,8,211, +23,77,49,122,49,19,157,4,19,149,34,136,114,242,210,234, +248,91,54,111,15,99,109,179,217,188,231,223,250,109,45,187, +208,181,229,14,80,245,2,193,46,94,38,74,241,25,161,105, +144,234,101,167,167,149,60,184,255,122,144,217,87,19,201,155, +15,223,94,136,70,102,199,46,213,225,9,208,224,33,128,156, +141,175,92,28,191,236,181,216,11,213,106,75,168,189,169,33, +86,166,198,33,6,105,180,219,180,42,72,61,58,25,139,37, +21,75,110,223,185,39,158,74,157,124,235,40,240,98,45,161, +214,66,186,104,183,217,231,22,166,176,112,161,141,174,214,233, +33,124,112,226,237,51,179,179,51,84,83,141,72,57,204,22, +140,224,247,30,56,152,76,101,195,237,237,201,74,33,93,173, +250,188,62,141,153,62,63,191,56,54,126,78,109,55,159,190, +52,114,238,181,87,37,141,6,128,165,219,238,188,175,148,88, +2,231,93,20,4,12,235,181,58,74,32,212,157,126,111,17, +162,22,92,163,92,46,95,127,232,218,45,67,67,185,60,72, +162,113,189,86,139,58,159,231,235,24,98,44,44,47,202,4, +39,87,121,163,135,4,63,134,82,73,20,48,50,90,42,228, +9,76,77,45,52,41,99,30,132,66,138,50,235,201,141,61, +206,66,133,131,66,48,240,109,141,114,242,165,135,127,189,255, +246,79,34,97,134,220,87,50,153,139,164,178,30,79,192,4, +72,150,191,69,70,17,34,53,75,197,98,46,17,113,5,59, +115,133,60,132,189,24,163,29,155,42,14,56,101,225,41,77, +31,101,19,197,211,148,255,43,167,158,194,51,197,30,170,194, +55,149,85,137,243,112,109,123,109,18,96,240,227,153,124,189, +200,53,120,147,111,0,179,50,104,24,47,95,124,206,28,218, +164,54,248,89,223,6,85,35,175,177,133,213,77,78,135,151, +160,40,139,189,77,99,114,47,95,124,146,50,56,60,173,27, +147,169,120,223,166,67,228,13,135,14,123,60,30,236,84,82, +157,251,239,255,252,151,137,213,165,229,200,140,134,54,122,253, +65,13,18,110,183,67,168,231,223,122,237,249,225,61,251,245, +164,158,100,24,40,198,187,236,158,137,133,217,248,194,106,87, +71,23,128,101,241,217,133,222,190,254,190,13,67,122,74,235, +14,184,142,188,124,100,98,126,57,87,230,244,172,69,228,197, +84,44,194,87,74,6,117,195,235,183,77,199,18,23,207,93, +84,212,204,105,198,201,50,190,160,119,113,110,110,219,182,221, +225,182,150,212,234,82,38,153,197,78,171,53,177,33,171,239, +198,235,174,215,88,205,23,206,227,60,54,220,117,211,225,255, +126,228,55,149,42,39,146,90,161,86,156,153,155,237,31,28, +190,116,233,236,177,211,231,131,62,55,148,133,166,167,167,209, +138,195,171,159,191,120,209,237,114,71,227,241,141,109,158,206, +142,174,137,201,105,189,92,169,73,4,109,38,5,65,217,49, +45,200,116,121,30,14,52,111,94,136,121,157,214,100,54,175, +140,162,84,42,191,135,189,56,153,69,118,106,183,234,220,78, +91,205,212,127,199,251,63,93,171,150,234,28,68,49,101,135, +211,129,61,151,2,83,88,77,34,57,160,180,106,218,96,229, +84,164,5,60,185,96,43,109,117,225,47,170,32,182,137,56, +33,181,85,130,134,56,190,179,67,175,125,141,128,41,171,17, +255,81,236,76,8,133,49,208,128,11,10,112,173,248,107,60, +74,41,146,194,49,217,20,138,141,98,42,50,245,86,251,193, +207,144,26,109,173,144,178,133,54,16,26,154,52,5,18,51, +71,45,22,159,200,87,27,149,85,190,90,182,181,238,228,138, +43,86,147,49,29,153,113,135,122,200,189,187,174,1,118,15, +91,210,163,143,254,94,166,213,7,15,221,122,227,77,119,59, +77,14,188,154,193,104,57,250,196,239,150,231,231,41,163,134, +53,186,173,102,43,210,135,96,107,23,107,182,246,117,244,70, +226,203,171,139,243,180,129,153,143,197,174,76,78,199,23,167, +115,149,188,148,207,134,250,134,131,225,150,13,157,221,131,67, +67,93,125,27,41,179,57,10,161,16,65,208,72,188,155,17, +161,17,58,179,48,79,137,137,95,254,241,241,22,187,227,205, +215,95,51,50,76,91,75,16,226,8,193,150,214,158,206,238, +122,42,219,218,219,87,231,185,13,27,55,167,139,165,88,62, +239,102,204,253,253,131,203,233,172,209,104,188,229,214,91,226, +169,220,133,179,231,247,238,220,182,56,55,95,171,213,54,111, +221,158,201,229,113,233,68,161,22,110,9,139,141,70,38,149, +105,200,141,13,61,189,103,206,95,80,137,53,70,203,24,161, +100,209,108,52,248,38,109,32,171,117,41,236,241,157,29,143, +244,117,184,87,19,121,36,22,219,55,117,206,175,228,48,24, +182,25,52,224,105,28,56,112,163,167,247,96,119,75,171,88, +140,20,27,202,152,31,137,138,40,2,128,33,214,149,151,81, +210,77,236,129,176,202,208,98,39,68,233,160,28,113,248,222, +255,187,236,176,83,98,160,34,40,107,81,137,154,82,199,227, +255,248,90,161,125,43,27,41,182,16,82,133,213,161,60,0, +178,2,41,0,245,46,129,55,90,204,85,178,81,83,112,35, +138,236,216,229,35,182,192,144,200,87,220,29,123,75,177,177, +212,228,171,222,206,221,165,98,22,62,69,118,79,183,187,107, +79,58,190,68,114,41,13,99,49,218,188,164,211,98,143,32, +185,25,189,68,98,166,163,131,62,68,165,171,123,3,198,46, +85,30,50,17,186,106,38,202,75,69,135,183,213,108,118,171, +4,113,122,114,132,70,186,235,116,29,127,249,217,149,84,2, +39,132,86,67,121,67,129,38,81,101,33,105,46,145,115,43, +171,30,187,199,239,111,25,159,152,28,29,185,20,244,122,59, +90,90,172,6,203,252,114,188,40,169,19,37,84,255,178,223, +138,3,29,10,77,242,233,243,35,0,248,250,60,110,29,163, +135,142,225,133,75,87,86,146,241,74,177,180,99,112,224,242, +194,148,20,141,162,251,60,180,101,211,92,100,233,115,31,120, +136,180,219,242,217,68,42,147,187,52,50,226,243,33,75,181, +151,74,21,12,152,208,224,182,57,29,167,78,157,238,235,234, +54,91,205,43,209,232,129,67,135,208,194,190,245,166,219,94, +56,118,194,194,168,77,78,187,160,210,162,239,93,172,55,121, +94,239,48,235,108,172,117,100,42,186,117,168,99,114,46,118, +203,206,22,143,203,115,244,194,44,228,245,226,217,170,221,72, +221,186,127,39,193,118,207,71,192,5,64,46,171,7,92,163, +161,164,154,168,164,192,156,81,224,226,56,228,192,26,21,5, +240,100,64,31,85,146,78,81,22,8,121,45,11,93,43,24, +164,119,142,65,44,74,48,189,149,53,168,28,130,74,32,215, +158,12,209,112,73,37,85,203,121,30,82,213,153,229,66,116, +186,94,205,97,102,89,207,175,212,42,5,163,189,69,168,100, +29,45,131,4,235,18,178,115,133,82,106,225,252,211,104,63, +105,29,189,184,251,41,189,185,156,24,225,106,217,114,244,130, +138,208,184,123,175,151,107,105,220,4,205,213,120,84,165,18, +32,10,130,27,8,176,45,188,118,6,136,119,187,11,26,59, +66,189,182,184,186,220,40,151,162,177,152,221,23,210,179,224, +58,91,39,207,159,92,136,71,247,221,112,39,208,211,66,189, +138,202,35,159,47,8,13,9,226,117,56,179,93,158,32,90, +107,193,96,80,173,211,172,44,44,207,76,79,85,235,85,132, +78,195,232,15,93,127,163,213,235,77,22,64,18,171,32,85, +213,52,235,94,147,102,255,109,15,32,177,140,39,178,251,119, +109,93,78,172,228,243,9,117,61,87,150,101,191,217,248,205, +175,126,197,105,52,107,53,244,39,190,244,249,238,182,222,135, +31,127,116,105,37,234,247,249,186,58,187,199,166,102,109,38, +227,229,169,217,233,217,185,235,14,30,196,142,132,183,33,212, +114,92,93,90,158,157,221,212,215,221,59,48,244,228,19,79, +132,60,108,147,231,10,185,114,216,231,78,166,235,0,12,183, +133,153,246,96,104,106,46,182,117,243,166,233,201,57,133,89, +65,155,98,217,234,246,45,125,209,149,152,197,68,255,253,231, +222,247,159,143,157,42,241,60,99,116,80,58,26,103,216,59, +201,165,114,152,41,66,236,202,25,134,32,97,169,173,101,157, +72,82,214,214,215,218,178,195,147,148,165,166,4,14,49,84, +2,255,142,232,194,218,217,136,103,226,47,227,64,196,111,177, +240,112,199,75,245,82,134,50,219,12,38,87,61,151,204,197, +231,172,193,126,53,64,232,92,133,96,237,181,196,52,87,88, +98,189,27,76,38,155,158,34,202,185,184,45,208,223,40,167, +2,155,30,40,198,166,42,217,69,139,171,197,108,177,167,99, +179,164,223,101,7,246,82,163,166,10,249,146,160,6,238,86, +63,54,118,174,92,78,111,222,188,3,239,36,137,213,17,91, +69,221,106,210,170,71,198,46,231,51,41,160,107,33,233,35, +169,117,55,221,112,219,248,220,84,124,97,22,186,229,2,209, +20,69,232,96,17,172,78,215,181,97,19,54,27,220,174,201, +165,200,240,214,97,36,141,59,118,239,196,105,113,199,205,55, +214,34,73,187,219,209,172,74,195,187,174,59,122,238,210,64, +216,122,253,129,253,47,141,76,22,51,249,67,155,6,110,187, +237,230,214,80,32,150,142,159,189,56,246,254,15,124,240,47, +255,238,239,67,232,94,155,13,16,74,71,249,191,119,211,166, +207,125,226,227,71,94,123,62,23,143,223,125,251,109,147,243, +51,233,76,65,81,111,86,171,187,90,219,131,62,79,71,123, +43,164,188,101,74,155,78,167,63,254,177,191,152,156,157,133, +108,126,189,92,182,177,6,163,145,50,177,166,66,185,30,203, +212,93,78,54,228,178,47,68,243,232,115,214,138,81,173,217, +81,171,22,151,162,144,72,129,204,30,255,177,251,175,211,250, +247,73,150,96,127,111,191,211,233,166,212,26,172,66,196,67, +145,47,89,75,86,148,56,188,115,226,41,129,194,193,6,92, +43,8,251,216,95,17,44,172,69,82,249,35,37,45,133,15, +155,146,133,174,69,16,255,193,254,9,25,84,165,53,179,86, +227,75,26,204,188,36,153,54,57,193,239,201,47,92,226,9, +209,221,187,95,67,219,42,241,73,214,230,205,44,143,170,132, +138,193,221,91,74,205,235,205,94,90,163,182,182,238,138,77, +188,21,216,120,56,153,88,110,100,231,106,34,21,220,114,215, +194,133,39,21,104,45,138,173,74,185,132,183,38,75,117,148, +46,12,198,225,106,193,96,245,95,28,57,31,12,180,159,60, +241,18,41,11,53,94,202,113,13,214,108,244,7,90,188,161, +78,143,162,69,127,102,105,98,10,170,203,197,122,173,80,229, +154,56,106,43,101,40,69,4,2,109,160,125,137,21,172,186, +210,204,210,220,212,232,37,183,213,214,229,14,112,213,122,190, +82,152,92,90,118,187,156,231,207,31,143,199,151,139,133,236, +106,166,122,239,13,183,207,23,74,221,225,214,223,31,121,238, +191,255,244,100,139,158,29,218,115,224,200,107,175,220,62,188, +35,94,206,157,189,60,1,6,89,79,91,235,107,111,190,60, +180,117,232,165,147,71,107,98,83,15,21,25,82,131,70,233, +202,210,162,134,210,162,197,51,176,161,239,119,127,250,147,211, +237,70,56,199,70,47,155,12,250,93,219,183,155,13,198,209, +169,41,149,92,52,219,156,249,98,14,119,24,70,254,241,76, +254,186,61,253,48,187,40,242,104,128,104,206,92,156,239,12, +123,39,231,35,90,198,12,98,169,141,18,63,120,239,109,71, +46,204,33,229,71,209,239,245,135,193,158,226,1,32,86,118, +67,124,79,18,101,17,189,104,17,183,171,98,148,167,18,149, +5,167,236,159,74,159,103,109,245,97,237,41,237,186,119,206, +63,4,108,45,23,253,191,221,24,37,81,85,204,167,240,205, +166,210,180,1,227,88,225,209,137,28,78,105,131,175,95,75, +105,203,137,249,122,252,10,114,25,131,37,192,122,187,235,197, +168,217,234,23,132,42,180,88,57,174,34,102,46,211,158,190, +122,122,78,71,91,85,172,114,103,162,225,107,48,219,113,180, +54,89,163,53,13,114,73,181,80,171,131,44,75,74,77,178, +150,79,232,41,141,205,237,186,245,206,15,152,204,232,109,187, +212,58,243,64,239,166,43,19,87,178,249,108,58,18,197,174, +81,87,9,83,11,211,90,74,223,224,171,56,53,105,179,147, +245,181,228,138,252,219,39,95,59,121,233,205,233,249,113,173, +138,55,179,250,185,133,201,127,251,211,47,115,133,20,160,214, +253,157,173,185,4,52,148,73,179,205,139,234,7,165,69,116, +126,236,139,247,191,247,129,195,55,155,180,228,247,254,242,171, +0,210,183,183,133,80,132,144,102,211,221,183,222,25,10,135, +143,188,117,22,71,70,207,230,61,159,252,198,95,183,49,166, +110,79,176,173,107,32,149,47,182,183,180,182,132,91,182,110, +86,244,11,244,140,77,77,168,158,121,250,153,222,158,30,200, +226,105,245,76,173,90,77,196,162,165,122,35,159,41,9,245, +52,141,150,165,197,207,171,32,25,108,234,240,105,104,13,143, +216,215,26,36,206,54,168,55,227,61,163,118,12,154,164,222, +158,182,237,61,45,22,45,25,8,247,7,91,194,26,18,186, +11,48,157,33,20,122,175,74,22,148,106,14,121,199,90,206, +169,162,148,189,82,82,9,136,171,114,228,33,104,107,213,158, +18,48,37,187,68,90,160,116,99,80,212,43,223,83,142,197, +181,208,34,200,56,82,149,221,88,89,200,2,81,43,149,243, +185,24,237,110,179,216,252,106,13,152,142,53,189,201,227,234, +185,209,218,182,67,16,107,114,41,201,149,99,133,229,75,124, +189,80,201,175,90,221,27,88,207,70,66,111,118,245,237,215, +170,155,213,92,196,234,109,21,212,52,121,205,129,27,147,201, +164,221,215,161,211,98,144,173,210,65,0,25,156,76,190,158, +206,103,208,208,27,63,119,182,99,211,86,27,99,170,74,124, +45,30,43,112,181,193,45,59,9,65,170,54,234,3,125,91, +171,24,25,148,242,58,189,185,111,96,48,58,63,111,98,204, +88,90,70,218,224,114,88,149,198,35,122,186,77,194,230,192, +54,70,162,221,74,232,13,22,151,39,158,92,17,248,220,96, +207,240,77,55,223,228,245,251,158,61,63,147,156,157,90,202, +173,48,90,226,229,115,35,225,144,93,160,232,23,94,127,177, +148,46,168,149,116,161,153,41,151,246,239,218,4,32,13,77, +168,189,30,223,245,215,223,60,189,188,208,221,22,248,253,159, +30,71,155,251,238,187,238,108,241,249,179,249,20,32,54,15, +125,224,65,189,154,184,50,49,149,76,196,30,122,232,67,2, +39,156,189,120,162,195,99,196,25,129,196,79,165,183,46,46, +47,89,204,226,238,109,93,201,72,92,80,153,129,22,46,39, +34,159,122,239,246,35,39,230,145,87,102,170,210,71,239,222, +47,106,44,39,39,179,213,106,201,238,110,129,222,30,28,42, +17,5,164,43,56,78,192,159,82,250,214,8,146,138,196,238, +136,93,75,104,170,215,154,49,106,37,161,65,174,138,149,185, +182,236,176,50,155,216,72,145,150,42,185,139,178,155,42,113, +95,219,70,209,13,95,3,178,98,228,132,77,65,169,251,225, +208,160,103,236,88,169,124,57,11,86,63,227,237,84,171,181, +98,37,165,161,205,149,2,84,116,145,224,180,35,137,213,8, +21,189,163,149,50,186,76,238,48,8,30,84,179,78,144,6, +156,103,54,151,95,93,206,101,23,198,47,87,75,217,182,238, +222,189,123,247,163,195,104,178,219,113,151,185,2,93,189,61, +27,182,236,63,100,183,218,81,239,98,88,104,109,105,243,6, +67,176,249,179,59,221,233,84,140,54,49,78,103,96,247,190, +155,160,235,66,160,165,213,228,226,177,121,220,214,192,104,86, +81,79,137,34,196,63,241,175,94,203,248,252,30,155,211,78, +54,133,72,108,105,106,102,214,105,176,167,83,209,63,62,249, +76,106,37,250,145,235,187,28,134,37,135,94,163,99,109,70, +146,30,27,25,117,155,237,13,228,18,181,250,67,247,63,112, +207,173,55,91,24,114,108,100,204,65,105,225,86,200,169,136, +31,254,226,95,155,92,117,106,118,238,250,235,15,226,10,61, +250,200,195,163,83,19,143,254,230,191,208,229,177,27,217,68, +58,99,177,154,123,123,123,199,46,93,18,96,28,66,16,70, +19,149,231,27,4,41,50,70,194,237,52,199,18,141,120,161, +160,215,81,165,60,247,250,177,11,59,183,119,231,203,188,74, +163,115,24,65,237,38,110,61,180,235,252,197,211,172,195,238, +9,117,34,124,185,116,118,98,122,58,150,76,206,44,174,0, +61,5,24,0,244,166,230,103,38,162,233,36,142,246,181,74, +15,25,41,126,33,237,91,203,97,214,42,14,165,168,80,82, +82,4,91,141,245,168,116,182,215,182,91,180,103,145,32,224, +183,104,172,97,109,191,51,183,32,33,4,78,25,17,111,44, +84,29,99,211,176,54,177,94,139,207,190,149,94,190,88,203, +39,139,185,101,224,207,77,129,141,16,79,193,114,109,130,6, +4,31,191,90,9,37,228,202,194,184,22,16,73,127,15,28, +32,72,138,16,85,36,15,93,135,68,60,178,121,199,110,155, +217,238,13,119,34,241,156,94,88,236,232,236,2,158,111,117, +113,41,208,217,109,214,65,97,183,145,137,204,38,34,179,90, +29,187,26,91,90,94,156,197,198,226,117,122,102,231,175,192, +20,80,1,49,104,212,122,189,134,3,70,26,41,0,110,61, +9,200,62,64,87,68,27,16,240,178,8,177,10,135,193,2, +15,23,167,195,34,54,121,166,73,236,236,179,137,181,76,239, +182,79,217,108,230,204,252,149,254,129,126,147,134,212,26,216, +98,54,181,184,146,96,204,166,145,211,39,239,191,229,118,175, +207,141,235,209,213,213,53,54,55,251,226,209,147,135,247,30, +168,213,74,58,137,191,116,101,178,80,198,36,87,187,176,26, +155,152,158,202,102,179,195,67,131,231,46,92,240,184,189,1, +151,3,50,234,43,137,116,45,31,225,101,90,213,36,51,5, +200,143,104,51,185,244,253,55,12,98,102,123,228,116,68,69, +136,97,151,83,36,201,75,227,43,29,30,125,200,235,216,191, +107,243,191,255,225,197,139,231,142,212,5,85,38,93,206,196, +22,107,165,66,165,148,201,198,102,221,78,59,78,118,192,145, +73,141,74,71,43,252,28,8,96,52,176,246,144,198,40,245, +250,59,233,13,180,138,148,128,41,249,142,210,86,123,39,119, +69,252,240,61,101,30,130,179,83,165,108,196,107,93,82,252, +82,146,218,181,28,9,157,1,169,137,94,91,163,81,85,161, +102,243,116,171,0,182,203,69,208,78,128,225,24,232,202,92, +41,134,170,154,98,221,117,220,149,92,5,131,37,189,74,132, +193,145,172,69,95,209,65,118,132,187,136,122,30,29,190,106, +181,150,207,41,56,33,175,203,49,114,254,60,216,179,203,11, +179,133,116,34,21,155,25,61,251,246,204,202,98,169,16,177, +161,170,162,116,201,84,18,31,33,220,222,191,184,56,57,183, +0,15,149,166,94,163,222,16,50,49,58,85,192,73,195,168, +206,160,211,116,182,160,179,206,51,48,203,197,194,20,177,97, +227,115,170,246,135,181,18,99,206,21,56,191,195,13,165,193, +108,77,125,250,242,146,147,53,172,102,87,53,98,109,97,37, +209,209,219,241,221,191,255,199,39,127,246,19,93,192,253,248, +83,207,248,173,22,171,219,21,155,29,235,234,236,210,233,245, +153,98,254,216,201,11,64,236,222,115,223,225,165,197,169,83, +151,167,176,37,221,122,203,45,104,7,30,190,233,230,151,94, +122,101,255,246,77,184,219,3,126,152,29,4,113,89,74,69, +64,216,210,6,29,200,48,2,107,102,103,166,146,29,189,228, +237,59,135,223,58,141,154,162,118,120,135,147,210,168,43,156, +56,187,156,173,115,226,198,13,253,59,54,4,70,102,226,181, +108,108,203,182,189,254,96,87,107,207,198,182,158,97,131,173, +69,167,53,198,51,101,179,221,15,187,209,166,90,83,72,231, +57,89,210,51,12,34,178,214,5,69,145,72,96,87,197,145, +136,125,83,233,209,172,149,24,107,173,109,165,130,135,188,255, +90,70,171,108,168,88,137,202,239,148,115,18,127,166,164,61, +248,35,220,97,168,87,148,252,85,150,181,180,137,175,231,211, +211,167,16,108,13,165,50,89,252,77,218,88,46,228,241,151, +212,152,41,90,157,42,9,253,79,216,163,214,193,21,208,155, +253,180,145,37,93,54,59,68,169,205,214,144,164,102,72,141, +58,151,73,45,206,206,162,187,129,14,68,131,71,22,94,80, +169,208,93,226,76,70,125,48,224,83,92,229,96,202,41,137, +80,254,136,174,206,187,128,116,112,56,240,132,161,22,76,79, +193,84,209,56,64,98,160,169,122,181,193,234,9,70,163,49, +66,18,89,150,138,104,89,194,41,192,4,16,65,89,165,99, +71,162,69,140,109,37,138,184,50,31,165,109,126,178,89,191, +245,142,91,254,248,228,99,251,174,59,248,143,191,124,244,150, +93,3,152,133,255,230,15,127,24,236,238,235,108,111,219,188, +121,211,191,254,246,247,161,176,231,249,87,222,120,207,13,55, +97,184,95,46,166,99,169,194,15,127,254,155,155,15,94,111, +183,67,242,217,248,242,43,175,97,118,104,50,25,134,55,244, +96,238,106,96,105,12,147,167,39,71,41,214,41,214,19,88, +26,145,68,121,5,140,124,190,22,232,208,116,59,44,175,29, +159,72,150,168,187,246,5,202,156,188,125,120,227,235,167,39, +49,175,30,238,240,146,77,245,66,158,184,233,254,47,239,218, +127,91,187,215,65,18,181,94,58,241,198,233,43,162,90,5, +138,141,219,237,130,64,24,18,55,184,242,217,173,86,172,198, +181,163,17,101,254,218,0,66,153,67,172,101,154,107,43,82, +41,11,149,0,41,197,149,18,210,181,188,6,88,29,37,180, +107,11,17,209,95,75,129,214,58,170,160,74,170,100,156,217, +56,241,209,85,174,85,178,138,7,177,36,232,76,158,38,198, +182,160,80,234,245,24,246,177,22,167,193,228,196,162,54,176, +54,53,174,154,178,7,212,244,104,30,154,105,10,150,42,70, +135,31,21,33,26,169,28,182,38,157,174,33,200,104,7,227, +16,105,74,2,60,27,160,147,101,50,89,149,163,155,208,52, +73,64,46,212,240,225,1,158,175,142,99,176,198,119,135,253, +54,154,195,118,145,41,242,202,31,137,18,118,25,60,193,200, +160,73,93,47,87,184,80,200,163,85,53,212,112,142,208,187, +95,188,52,95,205,167,6,91,173,253,65,203,174,33,175,153, +204,79,174,230,79,158,185,248,241,7,63,92,64,67,53,186, +178,57,104,188,235,150,219,247,92,179,127,110,98,34,16,246, +173,204,79,157,156,88,180,81,234,72,50,217,237,177,237,216, +177,109,32,236,223,179,117,195,79,126,253,199,96,48,160,213, +130,220,217,216,189,117,232,212,185,203,14,171,163,187,173,37, +153,205,120,93,174,133,249,69,28,93,64,175,44,79,93,136, +196,203,121,174,145,78,151,7,134,117,187,7,218,42,153,250, +229,241,20,165,7,140,180,121,97,116,21,80,137,243,99,243, +64,3,101,162,49,159,199,158,78,167,12,193,237,118,111,123, +171,223,48,147,209,95,92,204,183,91,136,88,93,159,88,154, +94,89,152,225,26,192,24,171,48,201,138,40,95,87,209,104, +68,155,70,105,191,40,21,162,146,245,40,39,224,218,191,200, +84,16,30,165,234,80,78,148,119,70,78,107,125,182,181,140, +71,73,105,215,58,167,239,4,25,29,181,181,93,21,81,197, +110,136,46,56,133,57,178,195,221,42,212,75,20,109,51,192, +122,88,163,115,5,135,176,25,51,38,11,182,113,56,85,65, +2,82,203,58,73,84,128,12,75,6,91,123,33,91,76,105, +25,140,81,234,2,68,200,40,101,64,169,166,170,13,165,224, +25,236,48,110,108,119,86,202,40,195,148,183,6,88,38,133, +185,187,44,146,68,1,199,29,222,106,165,86,5,140,135,161, +36,189,30,99,107,188,89,53,171,208,188,52,16,127,180,153, +21,181,130,114,13,249,71,163,144,206,254,243,215,126,218,121, +232,206,39,31,249,109,95,208,2,212,60,154,65,16,221,234, +108,13,57,44,68,163,86,56,176,255,166,183,78,189,174,173, +100,220,157,29,255,244,235,63,36,86,150,122,187,58,150,99, +179,24,54,255,159,59,110,176,56,221,173,109,221,240,143,49, +57,156,83,75,51,104,78,222,123,235,205,127,251,163,127,115, +249,252,155,54,109,131,54,91,123,91,59,62,21,196,70,3, +193,16,6,111,103,206,158,11,134,130,253,67,59,31,123,226, +153,88,58,15,85,26,204,117,54,14,234,119,246,182,94,26, +91,185,50,85,100,52,32,218,107,54,181,187,46,92,154,76, +87,69,143,153,185,102,144,222,178,247,174,141,215,125,228,171, +159,186,151,171,242,171,209,4,198,250,70,90,61,16,100,159, +59,189,26,106,235,112,184,2,233,216,234,252,204,37,69,36, +81,13,1,14,6,38,207,74,147,5,43,112,205,147,232,255, +13,137,178,14,149,236,83,217,83,149,232,10,168,253,215,70, +23,107,91,39,34,74,32,131,85,106,72,229,240,92,59,29, +49,118,6,226,14,113,84,72,215,24,83,97,57,66,124,81, +111,198,8,4,25,12,226,106,48,96,142,70,224,8,83,66, +141,51,152,231,20,138,15,205,66,86,14,19,3,50,24,238, +194,228,15,127,13,104,43,160,37,192,207,2,76,93,163,22, +119,247,211,173,46,10,96,47,0,165,1,40,200,150,75,107, +241,3,87,22,175,40,99,153,21,203,2,236,227,225,144,99, +55,99,122,13,176,4,120,153,132,205,68,171,128,85,97,25, +29,118,85,29,110,33,122,120,48,236,180,233,74,153,188,99, +104,63,175,213,93,56,249,130,73,15,225,108,227,134,158,46, +232,98,97,86,142,86,0,107,32,94,57,118,172,194,19,39, +206,79,252,240,43,31,49,251,59,94,124,243,237,82,69,248, +226,131,31,106,237,236,68,85,11,101,53,232,51,101,83,113, +104,100,91,205,142,116,98,113,247,240,134,135,238,191,239,235, +127,255,253,169,153,249,235,247,111,44,212,112,72,81,147,139, +43,88,92,67,253,125,6,155,29,217,225,246,157,55,29,121, +241,105,90,203,132,253,142,165,116,174,203,77,99,250,88,40, +234,114,165,186,207,163,13,194,133,59,216,22,12,185,48,203, +157,74,85,239,252,240,95,15,13,14,159,57,242,43,216,211, +52,171,177,106,169,12,150,175,84,205,15,118,185,22,179,36, +77,211,80,100,7,211,198,230,14,251,88,53,70,140,29,46, +61,178,238,44,7,53,105,17,76,12,65,194,9,37,40,241, +64,80,214,234,124,165,199,141,59,90,198,31,73,42,108,124, +202,66,92,107,119,43,25,234,255,149,106,87,142,70,108,177, +232,73,224,120,68,218,208,196,243,148,175,213,58,144,169,244, +224,146,211,224,174,66,139,101,45,241,89,43,53,241,163,104, +160,43,140,38,80,67,224,72,70,81,20,233,245,181,1,169, +167,110,54,24,88,3,128,181,94,173,233,245,210,129,65,27, +14,60,200,29,225,198,136,103,115,208,114,180,154,105,179,78, +87,195,238,11,92,3,112,150,178,80,42,55,76,6,45,62, +140,94,67,89,12,164,195,106,236,110,11,87,106,21,13,50, +24,25,123,41,170,115,86,84,203,233,108,13,104,234,143,124, +236,219,15,126,230,19,47,62,253,168,155,209,88,109,38,147, +217,226,48,99,0,103,192,240,221,98,180,212,196,218,83,175, +140,148,68,205,141,59,7,236,100,245,248,248,202,157,67,222, +109,27,124,217,133,51,97,175,116,113,116,33,24,238,77,70, +163,125,189,38,149,218,236,117,218,208,210,195,50,232,216,180, +101,87,119,187,168,228,10,154,124,185,252,246,177,163,91,7, +7,82,217,213,27,175,221,63,189,184,130,253,124,207,190,27, +157,129,112,91,119,191,206,96,129,159,147,211,17,68,22,95, +197,158,99,96,128,51,211,152,3,21,137,46,84,148,25,237, +237,247,221,79,51,70,228,154,61,173,109,174,246,238,82,44, +2,199,47,185,94,108,243,219,47,45,212,167,115,4,70,228, +56,165,0,25,54,24,173,153,50,223,225,210,13,247,248,195, +94,251,237,91,173,65,86,222,232,213,238,234,50,206,172,214, +145,76,172,181,184,113,204,96,149,41,135,221,26,212,2,12, +100,172,177,53,192,204,59,157,112,165,198,192,234,194,212,87, +201,108,208,151,64,32,17,76,116,231,112,78,41,153,139,194, +157,35,85,40,73,148,18,83,185,39,222,65,198,42,177,86, +78,83,252,82,244,81,49,43,192,133,32,125,254,144,65,171, +134,30,121,21,121,142,164,226,4,25,66,185,86,82,78,21, +170,24,238,160,40,214,233,88,89,20,146,233,60,99,52,0, +189,129,123,8,154,215,72,40,44,70,61,178,222,26,223,176, +209,106,191,219,4,159,79,140,96,179,249,90,200,103,71,46, +92,65,6,35,54,176,206,137,70,238,224,254,91,94,56,51, +149,23,117,166,6,122,164,118,32,70,124,46,247,166,110,31, +167,56,187,168,89,86,7,231,243,142,112,91,36,211,104,183, +26,119,109,176,110,110,115,186,13,72,103,173,114,165,104,119, +179,185,34,227,113,154,113,95,248,61,84,177,128,251,145,39, +117,22,108,12,206,96,91,123,87,240,142,247,125,236,31,62, +247,97,29,11,91,60,77,103,184,213,104,181,50,6,83,36, +182,64,233,76,3,3,67,216,231,27,149,124,192,239,194,168, +111,211,214,29,88,39,155,183,29,236,233,29,118,91,236,237, +29,225,246,22,191,195,105,195,194,233,234,221,232,245,7,112, +101,180,70,45,81,42,240,28,183,186,56,181,231,192,110,96, +80,55,109,233,27,153,169,91,145,194,107,144,199,55,111,222, +108,217,212,194,90,173,108,95,59,190,167,234,107,179,56,76, +106,175,131,106,241,24,43,57,110,38,93,193,5,86,14,70, +37,239,84,32,24,239,148,16,107,170,166,232,3,188,67,80, +85,14,69,132,13,223,84,68,164,149,252,134,196,190,167,124, +71,105,237,40,213,6,182,52,84,26,74,220,241,23,193,59, +87,116,24,149,173,22,191,222,129,235,173,197,18,207,80,58, +40,164,215,27,198,96,1,121,177,195,102,192,217,156,169,214, +186,66,232,167,224,94,80,173,196,98,208,144,7,74,51,87, +192,96,167,136,154,13,119,213,220,114,129,52,210,110,92,119, +8,239,168,212,160,99,90,88,72,164,225,222,3,170,84,101, +183,24,177,152,179,69,1,149,14,186,12,225,176,127,106,118, +233,186,253,15,238,187,245,253,207,190,254,138,83,93,240,135, +58,75,245,114,83,144,2,110,171,209,196,98,39,22,212,234, +223,254,233,249,235,135,219,110,221,223,207,234,155,203,217,218, +217,137,136,190,25,219,216,19,190,48,153,57,124,237,230,106, +131,216,185,89,76,102,170,85,169,21,203,95,175,207,82,4, +211,187,101,135,128,143,142,198,68,58,25,236,108,125,245,245, +215,91,188,142,225,254,222,214,96,91,30,80,84,185,153,47, +150,15,29,220,239,118,217,109,86,189,217,108,233,223,208,223, +214,18,114,57,221,126,232,115,27,128,32,113,97,92,229,115, +217,29,70,201,109,150,187,135,119,152,173,107,36,94,53,132, +47,74,130,192,169,117,180,221,215,174,18,81,167,233,90,12, +130,18,63,141,180,33,76,111,222,96,11,180,57,77,18,23, +75,215,147,89,120,8,9,176,168,169,85,132,120,166,120,237, +118,255,216,84,182,38,105,148,116,5,167,225,90,141,175,193, +218,193,9,243,127,75,67,92,123,37,135,81,214,221,90,36, +148,93,19,43,14,178,211,202,114,92,11,244,26,3,22,79, +80,218,55,74,146,163,76,147,149,176,41,249,145,146,233,42, +141,86,128,111,112,80,32,91,82,54,100,210,227,13,33,162, +202,196,68,20,77,52,246,93,252,8,224,213,85,107,26,144, +2,169,163,241,70,32,183,106,180,152,208,178,130,80,46,190, +13,153,121,158,23,144,4,163,101,43,54,100,204,179,59,188, +108,34,87,1,72,204,194,64,34,20,32,73,209,104,96,48, +236,6,152,167,35,52,236,243,91,44,22,253,47,31,123,138, +226,179,30,175,135,147,27,180,114,56,55,203,117,14,243,197, +215,222,120,251,189,55,236,94,44,214,252,94,15,99,50,47, +23,37,170,148,22,169,186,147,54,156,56,59,231,14,160,235, +226,206,198,227,249,146,37,228,22,85,90,118,106,46,202,106, +89,95,103,239,209,167,127,111,177,152,39,163,145,115,231,174, +252,235,223,254,245,228,244,242,249,209,81,220,182,80,203,72, +102,242,200,182,183,237,220,91,170,84,24,218,2,8,12,246, +27,224,222,56,133,66,175,104,64,107,245,250,100,34,139,195, +186,196,169,235,50,187,239,186,91,223,193,146,167,199,223,48, +248,218,20,232,169,210,77,135,164,179,182,94,41,0,4,108, +99,225,90,211,192,69,214,169,84,203,243,145,165,88,30,25, +67,166,212,92,72,112,155,7,131,110,191,137,106,52,28,110, +118,105,169,176,82,86,106,188,119,58,221,232,209,227,252,82, +6,76,74,22,130,221,80,163,92,113,229,100,195,204,119,109, +125,33,5,81,126,135,223,40,27,165,210,188,89,171,30,177, +111,174,45,76,165,132,68,208,223,97,77,104,144,101,96,251, +68,253,161,36,30,248,106,109,33,163,11,208,26,240,147,224, +236,97,42,173,52,126,100,24,188,167,51,245,241,133,12,92, +29,76,44,62,11,129,54,60,114,119,84,9,145,88,174,134, +126,126,173,10,157,9,204,206,24,157,4,21,52,84,174,8, +154,131,197,57,66,153,12,186,58,223,68,190,196,50,6,155, +205,152,75,101,134,54,236,130,36,161,193,210,209,218,53,248, +243,223,254,87,171,17,73,150,185,175,197,143,139,98,49,155, +101,53,121,101,122,134,16,234,251,175,61,136,64,54,75,249, +131,155,93,47,63,249,236,223,254,243,167,39,23,72,70,131, +4,151,135,201,79,151,163,240,246,88,22,176,139,233,153,203, +46,131,193,25,232,173,150,211,54,111,160,24,93,14,244,110, +125,251,212,203,111,30,63,253,161,251,238,218,119,199,221,62, +127,56,155,77,189,113,236,148,221,225,28,31,31,219,190,235, +186,127,249,247,159,255,230,119,191,121,244,177,223,255,252,223, +254,237,204,201,55,43,241,211,39,222,122,254,251,255,246,135, +241,243,111,254,254,247,143,30,59,254,218,31,254,248,251,71, +158,126,241,217,255,249,121,187,57,21,14,248,46,189,253,70, +203,240,65,32,53,40,179,9,91,188,74,11,179,61,124,160, +58,248,254,232,129,34,119,195,2,69,15,4,203,161,2,33, +35,224,96,37,94,37,242,129,118,47,75,112,132,211,254,149, +31,159,54,153,89,44,19,52,198,21,152,49,42,62,37,3, +93,59,248,148,85,135,214,168,178,55,194,97,15,33,211,19, +36,102,83,8,240,90,205,184,86,238,43,73,169,18,89,156, +114,107,193,83,228,108,215,206,64,164,22,202,238,9,164,6, +54,83,220,4,136,159,114,100,42,1,85,147,14,95,27,92, +89,64,179,211,99,2,15,16,41,252,30,43,181,100,177,30, +205,73,102,86,109,49,160,137,199,242,213,106,25,162,18,13, +190,187,133,73,231,27,213,10,6,217,130,79,177,38,211,45, +198,65,11,144,55,181,66,125,21,111,146,4,94,8,217,10, +228,92,235,92,65,211,180,181,180,182,155,220,3,65,95,223, +224,254,109,45,237,67,227,199,158,5,6,14,232,21,155,195, +6,92,19,107,49,142,77,79,15,135,186,110,187,227,125,109, +61,59,252,129,182,13,193,70,163,161,221,183,123,48,145,72, +21,10,165,243,115,203,209,24,128,126,61,152,39,104,180,108, +48,232,5,227,193,68,155,195,193,48,122,149,86,139,217,221, +221,187,18,73,189,245,214,249,47,124,241,227,184,238,147,19, +51,23,206,95,122,243,237,83,216,54,151,230,103,14,29,126, +239,103,62,249,80,44,2,22,77,10,217,141,215,131,27,180, +204,50,142,249,213,130,94,22,248,38,217,30,10,222,119,160, +243,129,235,54,29,59,59,242,252,179,39,142,31,127,147,50, +152,207,190,245,50,195,66,46,163,155,0,34,13,253,113,3, +75,53,144,166,215,10,249,20,12,43,149,169,50,199,25,24, +211,26,44,148,47,21,170,39,46,78,79,143,79,77,78,167, +78,28,155,159,204,169,144,140,35,66,202,18,65,16,148,116, +5,13,76,68,1,123,43,174,185,146,230,224,144,67,175,68, +193,181,98,45,225,188,81,66,171,68,102,45,165,193,215,88, +127,74,245,1,69,0,37,216,74,228,148,157,86,9,173,18, +76,229,169,107,197,7,98,75,226,69,80,222,144,22,52,217, +212,24,157,168,242,197,74,58,159,46,213,179,155,218,25,178, +150,88,76,164,231,146,100,111,167,83,168,150,209,158,192,116, +13,147,179,120,178,10,31,165,86,175,13,45,154,146,208,156, +154,47,40,37,45,160,37,107,118,28,144,72,67,210,102,195, +129,38,11,213,84,113,114,121,249,133,183,206,30,191,116,230, +244,233,215,108,6,195,125,247,223,15,46,1,102,155,118,69, +156,66,5,203,250,217,149,213,249,197,220,225,61,59,117,52, +57,54,51,217,172,204,104,100,213,221,31,62,244,202,211,39, +117,72,157,84,204,149,137,209,175,125,96,255,229,5,73,109, +245,68,102,103,88,167,255,137,99,231,166,35,105,33,159,58, +124,247,253,178,76,33,215,93,140,36,55,116,181,108,105,107, +41,100,75,86,86,63,58,59,105,49,154,172,70,99,85,144, +131,29,27,30,125,228,191,253,86,38,104,55,123,220,14,187, +13,88,95,248,28,160,91,86,53,210,42,167,211,232,178,26, +102,34,203,147,171,217,238,142,80,36,141,93,35,15,243,102, +65,165,191,126,207,54,131,171,5,23,114,233,216,195,150,80, +187,218,228,211,57,88,71,32,100,166,154,217,248,42,246,29, +204,13,25,150,150,234,117,196,227,242,200,248,108,138,175,72, +154,47,222,183,249,15,175,142,129,62,108,48,172,245,21,149, +246,219,90,155,91,105,179,97,197,225,32,83,26,114,8,10, +165,224,85,240,127,244,73,192,168,81,224,139,202,58,196,74, +83,202,195,181,234,76,11,16,39,6,181,85,148,13,107,89, +14,220,190,215,142,200,119,186,0,107,203,18,147,22,101,26, +164,100,62,178,228,246,4,59,108,92,135,87,53,212,110,235, +13,185,145,57,123,220,238,84,28,86,69,204,106,162,106,181, +66,229,10,112,36,14,234,46,58,189,150,107,8,22,155,17, +181,233,200,100,142,84,27,181,72,75,85,170,68,158,27,234, +176,42,104,47,144,248,8,242,241,163,139,217,146,184,181,191, +101,219,112,75,155,203,64,202,185,217,137,243,38,163,233,202, +108,218,64,54,84,84,243,50,192,253,51,243,249,120,17,163, +255,153,229,25,154,204,156,189,60,90,2,52,68,31,40,112, +244,92,146,23,56,29,97,234,224,114,171,109,126,219,228,234, +244,91,167,199,66,94,235,193,131,183,255,203,175,159,220,179, +101,83,181,90,1,252,126,203,150,97,189,213,179,26,75,110, +238,8,140,172,196,207,142,142,239,221,189,11,195,230,201,137, +201,213,72,164,189,189,159,177,218,174,156,121,185,45,0,177, +39,201,100,54,100,211,101,79,88,31,93,173,76,71,235,78, +157,202,142,86,170,85,123,97,108,185,35,96,189,126,247,182, +100,58,155,205,151,3,1,95,60,182,178,177,219,237,235,217, +73,16,149,90,124,254,177,95,252,132,170,230,142,252,241,215, +27,7,135,231,70,46,252,236,223,255,45,146,204,153,141,154, +206,246,214,153,145,75,145,100,204,104,242,164,68,19,16,190, +143,188,118,185,196,55,253,62,47,186,196,194,218,200,73,217, +2,215,134,191,200,251,112,197,208,17,83,32,136,112,55,1, +36,25,231,36,74,186,181,84,69,9,157,82,32,32,135,212, +226,251,42,82,43,130,99,84,76,149,139,113,29,131,22,12, +134,5,10,22,124,109,161,42,235,15,63,86,137,37,184,236, +107,93,59,18,253,75,189,193,38,86,210,197,114,37,28,242, +33,84,179,11,139,201,66,13,141,185,50,206,61,52,86,170, +213,118,191,189,169,211,87,27,82,185,86,131,2,178,129,54, +44,199,145,163,194,250,22,197,35,58,227,32,52,137,75,169, +178,133,97,114,217,234,236,82,182,175,195,212,30,178,234,105, +100,55,102,184,242,56,76,70,197,235,65,213,220,184,113,243, +161,125,183,206,174,102,108,14,191,203,215,223,17,14,239,218, +182,59,190,116,54,30,143,247,132,90,154,146,247,255,124,248, +254,251,255,234,223,146,227,199,196,106,122,235,224,182,206,13, +131,203,51,23,61,45,225,63,61,119,114,54,11,211,186,120, +123,223,224,31,126,251,111,7,247,108,91,201,43,112,250,238, +205,219,98,209,120,122,117,165,32,171,42,133,210,150,13,237, +11,171,201,7,31,252,139,229,24,72,1,194,197,145,75,229, +108,68,75,200,67,27,187,150,34,49,35,99,214,48,130,70, +108,206,71,43,0,37,6,219,2,249,2,80,0,210,206,61, +187,190,249,211,167,246,15,182,196,82,217,19,23,150,190,246, +173,175,220,240,192,151,214,18,8,72,42,230,85,77,234,228, +201,179,104,63,115,249,212,145,35,175,29,190,227,142,190,174, +22,155,86,251,196,51,71,162,21,174,43,228,210,168,248,93, +61,158,106,114,161,162,182,1,200,11,152,8,224,56,202,168, +254,157,90,112,45,63,121,7,199,166,156,94,184,226,88,128, +208,12,131,40,10,246,54,252,238,157,165,135,63,65,215,75, +168,11,153,197,6,38,189,241,41,52,199,208,121,49,217,67, +104,150,226,73,107,185,142,242,124,101,45,98,76,191,182,71, +191,147,210,146,248,217,38,155,67,103,176,106,154,252,242,74, +26,215,183,44,91,202,28,234,18,76,240,204,217,66,10,213, +30,178,30,140,245,39,230,211,185,130,146,73,47,70,210,165, +138,98,230,167,52,146,254,239,3,40,188,50,207,245,116,120, +130,62,59,67,43,61,66,220,115,140,1,24,39,101,239,70, +42,6,219,158,74,173,220,68,103,86,211,220,188,253,128,222, +25,250,241,207,127,186,181,163,243,218,189,237,217,212,194,0, +108,208,72,106,53,195,165,150,207,135,189,102,188,67,167,133, +46,100,22,11,185,148,72,104,65,186,234,235,234,185,121,208, +117,255,221,15,141,94,62,207,216,237,127,243,253,159,135,236, +230,67,183,222,41,151,138,31,253,194,151,62,247,201,143,94, +56,115,42,157,206,237,220,178,211,217,213,125,224,224,181,162, +100,254,233,63,126,129,166,212,117,165,241,205,192,68,15,141, +160,169,149,218,192,70,71,155,219,123,110,46,105,179,217,154, +114,67,213,224,246,110,27,60,125,105,118,160,191,61,147,136, +75,132,246,177,199,94,232,237,244,142,157,61,126,244,149,103, +95,124,254,165,249,92,253,233,35,175,73,90,157,221,64,219, +59,54,28,121,225,200,244,124,44,90,168,108,232,239,190,227, +189,15,108,218,185,185,17,143,31,159,174,189,231,125,55,58, +245,134,36,175,81,230,108,216,34,65,236,67,46,163,36,151, +40,2,144,89,174,213,5,8,214,218,17,134,136,225,168,35, +81,106,98,24,161,8,142,225,25,202,6,10,101,233,106,57, +165,18,56,173,175,87,226,202,132,88,1,194,15,226,72,58, +189,81,57,35,49,232,82,254,170,210,50,87,138,124,229,156, +85,22,225,90,84,9,24,60,216,26,162,86,84,233,37,216, +231,138,200,181,132,114,181,14,248,62,38,182,104,210,36,179, +197,7,111,61,176,173,219,187,173,59,96,213,171,233,6,202, +118,201,160,35,208,142,229,214,66,104,51,106,119,109,244,249, +156,44,172,175,209,171,195,145,139,177,42,210,98,80,16,113, +88,2,107,42,168,169,92,195,12,98,36,68,208,164,6,208, +114,250,95,63,250,44,75,150,178,233,185,72,22,198,203,188, +90,44,53,106,209,137,115,71,238,218,29,28,28,222,200,19, +206,213,130,122,121,105,42,39,59,142,156,156,123,241,237,43, +14,109,250,248,137,55,119,95,115,248,201,87,95,155,140,160, +41,84,60,176,105,96,247,13,183,131,241,243,241,207,127,229, +111,63,251,9,204,165,143,142,140,222,117,247,125,241,165,196, +209,19,103,62,252,158,3,106,161,121,221,190,174,100,172,98, +160,213,38,168,112,25,225,110,95,88,72,200,97,147,246,202, +82,154,111,168,130,38,53,144,66,44,69,44,164,170,109,45, +30,82,172,162,222,88,202,86,174,221,222,15,28,64,58,186, +58,62,54,190,121,243,48,54,56,71,75,219,247,127,242,59, +43,45,61,248,254,247,108,29,232,27,222,216,174,85,73,173, +155,118,32,223,200,76,142,31,93,224,53,141,218,25,180,233, +4,149,221,102,211,81,26,192,124,113,121,5,176,156,214,242, +74,133,144,134,227,112,237,184,67,28,148,40,66,173,29,173, +105,96,103,254,223,116,6,203,18,70,151,53,44,196,122,62, +194,178,14,157,162,162,194,155,236,62,29,109,1,56,68,40, +70,16,72,252,28,92,211,181,228,7,81,199,47,173,82,237, +227,71,96,150,161,83,19,72,180,208,203,0,203,25,242,214, +140,70,107,162,155,86,189,74,224,171,24,132,109,237,13,162, +241,211,212,33,9,49,238,216,187,243,222,247,28,126,240,190, +67,247,222,118,224,255,188,103,239,251,247,4,238,218,26,80, +55,26,224,153,0,191,5,151,113,160,206,32,9,2,251,36, +112,140,208,60,132,251,25,60,58,23,86,10,185,216,164,94, +93,237,10,121,224,88,158,45,86,81,91,111,109,195,182,195, +108,237,52,83,148,147,167,156,241,60,123,231,67,95,27,157, +111,244,110,232,75,196,98,95,191,195,208,191,193,255,212,185, +197,209,145,241,143,223,190,65,25,119,208,236,146,236,120,225, +205,139,93,110,41,149,205,62,242,232,211,40,75,209,175,213, +25,89,32,184,49,252,60,115,230,36,22,254,183,191,251,141, +199,126,255,79,187,182,183,111,28,10,195,231,188,46,80,216, +244,181,12,138,35,253,214,86,19,1,156,12,33,181,184,45, +197,90,131,102,245,131,221,118,139,203,159,72,213,254,231,201, +227,137,188,218,227,108,134,173,196,19,207,190,248,249,207,125, +96,211,64,151,209,27,236,26,216,240,229,111,124,249,219,223, +252,210,74,236,236,251,14,223,144,46,148,58,55,246,182,236, +184,14,189,25,66,228,255,235,31,127,150,146,237,65,95,24, +204,81,146,118,58,236,86,92,221,98,169,136,181,168,146,196, +66,58,138,122,12,61,107,228,250,232,93,227,95,82,167,213, +50,180,226,197,14,126,48,214,149,10,203,81,169,246,148,150, +33,250,36,162,136,89,150,6,3,181,165,11,224,247,64,224, +161,145,79,8,141,10,95,88,81,235,216,252,252,241,114,62, +181,214,10,120,167,169,138,45,20,200,128,181,116,150,97,29, +117,142,87,74,80,104,91,107,116,248,153,165,70,53,145,73, +138,58,166,36,40,223,220,177,177,3,27,176,30,53,179,86, +135,103,42,223,67,223,217,31,38,237,126,179,175,165,167,167, +115,67,39,160,17,208,217,69,162,133,217,180,136,113,49,154, +248,112,3,209,66,133,30,200,184,58,239,181,91,154,90,19, +39,112,167,71,227,62,159,247,252,216,196,169,19,175,31,189, +148,200,213,141,175,158,153,33,244,114,139,77,213,223,19,78, +20,72,145,114,204,205,78,189,120,228,141,133,138,54,145,168, +165,227,89,183,157,70,179,119,98,98,250,67,239,253,36,172, +10,241,1,220,76,163,183,197,49,180,121,147,20,93,34,106, +141,31,124,235,27,149,26,255,234,153,115,167,47,78,214,211, +201,215,223,124,25,27,184,203,31,212,105,100,163,141,14,248, +53,249,170,208,25,242,212,132,28,228,100,187,130,212,8,64, +164,221,22,80,168,131,110,10,243,179,111,252,235,83,219,6, +67,126,143,117,33,145,51,211,154,141,157,161,87,78,140,254, +197,135,63,37,214,163,23,207,190,50,117,233,205,217,169,209, +88,178,216,168,201,195,215,29,236,238,240,85,33,122,82,43, +254,246,119,207,191,253,242,235,219,135,186,58,67,182,229,169, +75,199,47,46,8,77,17,188,106,236,143,149,90,221,96,96, +192,58,67,41,1,145,56,40,19,3,201,72,66,7,80,163, +50,128,69,6,250,32,118,80,13,22,16,6,148,107,59,34, +133,209,35,64,250,53,4,150,200,206,105,96,88,170,18,243, +137,136,70,163,3,162,198,224,108,101,77,78,41,51,11,88, +154,213,238,22,177,160,53,90,100,164,107,203,119,13,201,1, +151,97,40,168,42,105,175,210,19,80,11,202,212,75,162,154, +232,40,137,229,140,34,242,249,158,91,174,137,22,249,209,137, +169,201,229,248,212,98,114,124,37,127,97,62,29,205,74,232, +134,92,28,157,153,93,138,47,37,51,29,225,22,148,37,40, +46,145,102,1,160,174,16,31,149,127,37,92,74,36,190,201, +34,41,168,29,56,153,213,58,235,150,13,222,66,165,120,247, +181,187,173,120,176,166,78,171,192,149,19,6,66,160,45,182, +223,191,126,229,145,255,249,117,75,208,250,219,87,87,4,53, +241,250,75,199,120,202,166,72,187,90,105,155,214,242,207,255, +241,248,179,111,143,51,217,209,239,124,243,111,127,242,216,88, +102,57,51,216,238,6,181,40,181,188,132,233,252,155,231,46, +133,67,97,188,219,179,23,47,205,71,50,79,31,121,61,155, +153,206,215,65,31,151,236,238,48,114,195,43,227,171,153,34, +149,149,170,202,206,37,171,74,124,221,98,34,207,141,167,30, +127,107,197,102,180,162,161,255,241,251,175,125,224,240,246,77, +155,247,2,251,19,178,168,74,34,233,109,233,253,250,103,62, +250,210,171,39,206,188,117,202,231,117,150,150,231,254,254,155, +255,220,186,113,71,61,17,243,122,218,22,73,15,32,229,112, +173,252,215,63,190,65,232,36,187,65,179,189,19,121,174,128, +3,4,157,100,172,33,101,218,7,45,211,76,57,178,56,3, +227,32,84,130,202,206,169,197,47,36,50,96,253,99,94,68, +130,196,131,220,7,5,98,163,148,131,2,49,159,143,193,136, +216,212,178,141,245,244,148,178,243,248,38,144,28,92,118,57, +27,95,166,220,253,18,166,67,177,203,165,165,75,181,228,60, +90,119,239,36,52,72,115,200,150,182,94,96,88,49,206,197, +69,87,208,17,184,240,34,86,176,164,165,169,124,181,134,29, +125,83,135,7,3,194,144,199,35,55,68,23,182,143,166,200, +104,101,181,80,115,59,92,152,200,180,135,91,51,177,37,139, +221,81,44,228,173,102,27,143,134,141,36,226,30,195,172,24, +135,34,139,83,72,13,66,25,157,75,47,75,36,45,170,13, +144,150,228,184,12,124,144,235,148,181,158,93,58,180,183,59, +145,77,9,42,215,223,252,244,25,67,46,245,237,207,95,63, +22,229,180,114,101,207,174,3,16,159,240,117,15,60,243,226, +219,215,246,182,252,240,95,254,227,196,98,49,118,230,79,78, +86,62,120,247,167,127,244,211,31,85,5,226,142,131,91,220, +45,93,104,224,30,58,112,205,232,149,177,98,173,254,198,91, +71,241,182,209,187,21,170,73,24,86,14,119,154,176,16,203, +13,53,216,238,69,200,29,130,50,32,87,236,126,154,175,75, +151,167,202,96,75,44,36,170,178,154,206,23,242,43,177,148, +90,40,40,174,107,26,93,177,216,208,107,133,163,39,102,66, +54,254,252,196,149,135,62,244,245,72,26,180,191,194,149,115, +167,210,244,240,127,254,236,251,255,231,43,127,87,70,175,136, +32,159,125,250,233,127,248,247,95,218,220,157,135,247,119,126, +234,179,247,108,216,216,107,173,165,231,50,181,10,218,19,42, +221,194,226,212,215,63,176,163,205,36,205,228,213,52,99,173, +53,154,52,69,34,183,192,134,153,45,22,180,52,3,48,42, +148,20,178,217,88,228,242,43,20,107,173,54,26,48,90,148, +75,233,134,80,98,140,110,137,16,67,91,223,159,156,63,33, +137,21,87,199,94,189,217,89,141,79,137,165,148,214,236,6, +172,82,163,135,183,177,89,105,217,96,45,187,221,62,44,70, +148,30,90,85,211,8,20,48,66,0,223,76,232,149,169,160, +111,205,59,93,214,155,247,109,4,86,85,201,129,21,104,0, +24,238,69,214,98,17,177,67,48,38,96,234,1,61,21,69, +14,98,147,90,189,145,210,2,23,1,19,78,8,185,40,133, +39,122,226,72,204,102,22,35,48,70,238,245,91,243,213,124, +61,87,232,238,237,89,88,74,232,180,76,215,208,158,197,201, +227,33,175,113,106,106,249,161,251,238,243,121,140,7,54,185, +30,63,49,245,249,135,222,247,226,11,71,253,109,3,247,29, +8,160,181,253,216,107,19,56,182,83,80,199,142,93,242,90, +84,67,91,14,188,49,153,122,233,197,231,112,32,60,125,228, +109,76,188,176,4,195,61,253,47,31,127,11,153,218,216,249, +227,169,84,209,104,182,8,249,100,107,40,232,114,160,235,164, +182,152,13,176,162,84,83,12,26,136,152,148,105,141,77,79, +64,183,184,40,249,60,86,148,71,34,199,49,112,253,225,27, +110,151,149,171,228,242,169,84,208,23,224,27,53,128,214,147, +153,76,34,95,92,24,127,27,88,180,207,127,231,7,108,104, +232,149,39,126,49,54,61,227,115,88,220,174,208,96,127,207, +27,199,222,196,85,120,207,125,239,11,64,120,218,225,214,27, +141,77,174,126,124,52,13,178,149,154,203,68,98,105,108,147, +215,180,52,72,189,225,3,251,219,86,147,53,228,62,216,77, +65,13,143,71,150,237,78,79,46,157,68,195,36,151,203,161, +69,151,75,78,59,188,157,180,209,169,119,119,128,131,7,16, +7,86,149,201,226,162,77,182,216,248,43,144,72,194,145,137, +185,57,248,140,102,139,71,89,103,162,154,117,120,21,36,14, +86,161,203,5,84,46,54,109,160,236,27,93,157,62,4,3, +132,113,101,19,151,57,131,94,23,207,151,175,217,220,165,216, +104,162,173,160,209,98,147,196,193,139,237,11,204,60,32,15, +0,121,238,237,232,130,156,43,165,35,51,249,130,216,224,1, +232,134,228,57,48,84,254,96,120,160,183,61,146,206,138,117, +77,192,231,140,22,211,144,119,137,197,167,91,173,108,119,208, +241,204,155,39,112,163,156,187,116,185,53,100,30,155,72,189, +239,134,107,25,191,235,107,127,251,39,131,221,135,97,84,148, +35,254,225,223,255,231,209,151,39,126,253,204,113,224,170,255, +244,55,55,24,153,38,126,242,234,210,226,205,31,251,254,226, +212,132,214,104,185,245,192,206,131,135,111,79,44,78,253,254, +233,167,247,13,13,45,197,83,192,69,63,241,226,155,38,90, +235,107,233,168,103,22,111,222,183,21,42,6,46,71,184,92, +40,67,83,132,227,211,100,83,239,66,209,166,36,226,156,85, +165,35,121,14,125,234,84,190,0,139,82,127,192,155,138,164, +221,78,120,207,2,22,168,244,63,10,224,27,202,184,109,81, +215,241,189,253,131,122,117,3,233,63,232,205,161,246,206,114, +124,213,224,116,191,242,250,171,184,141,239,189,247,35,121,201, +236,106,223,116,121,58,227,177,72,190,142,118,183,92,158,154, +143,65,78,132,209,215,190,253,145,161,99,39,230,210,84,203, +76,148,55,27,80,239,3,232,132,49,174,182,82,202,161,95, +88,45,102,144,188,112,181,18,195,218,133,92,164,144,93,54, +184,218,104,3,171,102,48,17,119,97,2,159,3,40,215,228, +114,122,251,228,114,172,152,154,98,45,222,70,83,217,223,104, +131,9,69,118,83,107,161,128,115,65,198,11,106,27,50,127, +12,183,208,101,25,159,92,226,234,13,144,245,49,108,166,245, +120,186,10,29,222,120,5,74,200,112,16,128,162,131,36,52, +120,157,129,102,117,26,200,152,128,84,108,55,106,167,34,177, +139,147,139,54,155,227,129,27,247,223,127,203,225,131,7,175, +35,245,142,176,191,109,184,183,187,80,23,39,102,18,126,127, +208,100,210,177,172,179,152,201,134,67,189,192,105,60,116,239, +230,243,143,125,105,239,238,1,47,180,105,26,124,34,79,252, +215,163,79,207,76,205,7,124,204,244,197,241,246,222,161,255, +250,211,139,110,131,46,154,87,100,235,126,240,161,221,201,114, +113,105,53,150,72,47,194,210,39,89,148,11,145,201,27,218, +205,223,253,215,255,36,170,213,137,169,233,83,99,147,255,253, +223,191,89,140,197,177,152,176,52,225,194,37,212,50,62,47, +83,40,100,25,134,205,151,197,90,67,235,247,118,90,24,122, +122,101,37,87,132,116,74,73,153,231,81,34,32,166,6,0, +235,128,40,79,164,42,133,114,164,80,65,153,161,165,173,245, +106,213,237,3,221,201,33,84,42,112,111,227,85,182,63,62, +251,20,20,31,210,153,168,153,85,101,22,174,44,230,107,35, +35,151,240,23,67,46,70,205,208,123,118,109,71,175,178,80, +147,127,241,196,244,27,39,198,41,33,158,138,2,123,117,242, +222,155,134,86,22,98,172,213,157,231,168,190,118,27,107,132, +40,177,50,16,196,26,48,128,200,81,201,32,243,67,32,32, +168,9,168,133,198,26,160,105,115,102,225,60,246,54,90,203, +66,53,35,212,181,133,40,173,0,70,65,57,194,208,16,44, +36,151,24,91,40,60,116,56,58,249,60,99,182,211,206,144, +186,41,34,80,72,103,73,64,164,49,173,199,125,7,152,28, +80,216,192,236,0,181,44,138,85,67,147,40,84,49,110,106, +156,30,91,218,187,185,19,125,110,28,193,224,109,163,136,51, +176,86,90,79,89,172,250,199,95,58,119,249,226,88,94,48, +28,191,56,246,153,247,239,77,55,168,231,94,61,183,181,175, +109,67,191,95,32,248,199,94,60,235,181,27,237,30,38,154, +3,254,170,208,215,98,18,73,253,161,161,94,150,85,219,135, +6,191,247,141,127,201,96,107,17,243,12,69,126,235,43,159, +254,207,223,62,126,104,247,53,55,220,188,243,111,127,252,59, +131,76,28,218,61,204,25,157,7,218,77,27,194,186,98,13, +236,213,106,50,91,59,116,215,151,143,189,254,250,169,51,71, +87,51,177,255,254,193,95,23,18,75,191,63,118,17,146,161, +251,183,239,200,203,242,236,248,232,206,157,219,58,122,54,60, +245,216,239,157,70,61,160,117,16,186,128,247,90,75,107,16, +189,16,139,217,134,21,96,6,134,27,147,109,200,248,192,103, +132,39,81,197,102,75,16,226,131,156,155,34,154,143,105,14, +154,113,229,74,13,50,17,112,30,49,177,26,148,46,104,82, +139,82,101,231,142,1,15,220,213,29,142,43,211,81,108,83, +61,97,144,189,67,187,134,183,95,123,219,167,0,252,196,112, +187,219,163,202,167,178,167,167,203,203,85,19,154,222,249,244, +2,235,221,149,205,114,163,171,213,129,158,150,241,104,13,115, +14,81,169,12,65,49,130,179,187,26,188,101,240,21,77,86, +31,186,99,197,228,162,154,203,58,58,182,7,187,183,71,167, +78,46,45,141,173,165,175,140,198,18,88,189,242,2,169,179, +250,252,109,98,118,38,151,153,182,6,54,149,18,83,225,29, +239,7,9,2,184,67,244,90,149,179,16,120,47,5,181,138, +246,14,120,204,200,72,37,46,147,89,129,139,188,210,92,21, +26,88,143,56,102,129,150,7,39,22,245,141,34,51,162,34, +145,34,99,219,60,125,126,162,80,104,96,70,159,72,23,145, +239,216,89,234,149,87,79,125,252,193,91,88,22,131,182,250, +241,211,227,101,209,248,194,155,39,209,248,184,50,181,112,121, +38,38,240,178,197,103,255,205,99,71,157,16,12,229,160,198, +229,92,202,197,22,163,242,15,254,234,83,11,185,196,35,47, +157,121,241,204,52,16,46,108,163,188,107,255,182,147,51,241, +169,177,177,247,239,115,207,199,82,147,179,81,78,100,63,247, +149,127,255,143,199,158,93,89,28,65,34,230,176,57,144,219, +153,172,246,189,7,111,125,248,145,135,239,185,227,78,189,201, +90,40,150,54,111,217,147,202,87,95,127,233,200,181,123,119, +104,180,116,48,20,96,52,57,20,142,88,94,233,220,50,148, +239,33,242,76,161,71,205,215,145,46,175,36,164,98,21,233, +59,34,132,126,138,50,137,197,4,183,197,105,97,53,178,205, +99,193,105,130,123,217,106,246,181,135,2,217,108,122,113,117, +33,149,137,78,204,70,121,72,26,161,173,65,53,63,251,233, +7,254,238,243,247,122,236,170,43,199,95,255,240,71,175,107, +107,111,217,181,205,50,119,37,206,17,134,43,167,159,232,28, +220,7,84,67,134,211,221,115,207,254,187,183,122,206,204,148, +209,92,131,14,28,88,87,64,168,1,45,129,140,11,55,141, +40,105,248,106,6,228,194,150,190,125,153,114,25,227,215,114, +33,110,214,234,86,46,63,47,32,155,192,169,88,206,86,115, +203,166,224,176,36,84,44,142,142,58,151,151,176,199,116,238, +193,24,16,218,3,74,77,129,187,194,102,181,98,70,217,168, +151,49,16,65,95,32,131,66,172,32,51,216,99,155,50,6, +8,240,80,193,128,24,55,102,184,197,11,171,92,154,101,161, +246,161,174,149,94,63,62,233,130,229,142,150,110,146,12,199, +151,60,54,85,216,237,0,21,248,154,109,109,124,29,96,55, +254,236,229,133,249,88,158,150,107,183,239,233,62,48,224,191, +255,240,118,45,107,250,213,35,71,243,213,250,193,205,189,163, +137,50,171,149,129,29,190,120,225,82,247,64,247,87,191,255, +104,190,0,215,120,201,166,101,108,54,70,101,116,29,63,113, +250,150,62,203,206,107,239,232,216,124,75,223,224,129,15,126, +236,203,191,122,244,137,145,179,199,156,232,188,34,133,208,233, +156,102,106,67,239,208,191,63,252,2,204,127,254,249,159,127, +172,87,169,195,158,112,186,80,254,231,31,125,183,213,38,25, +89,35,70,211,118,22,3,106,145,102,173,27,7,122,151,35, +11,175,156,88,233,12,2,231,234,44,151,69,155,77,19,143, +150,82,121,108,179,2,42,111,100,209,239,52,10,167,99,229, +173,93,118,25,13,36,1,242,136,177,82,185,210,224,203,122, +6,76,106,69,86,6,133,239,181,7,14,64,35,235,131,15, +221,247,217,175,127,227,23,223,251,238,191,126,255,135,71,46, +156,250,228,67,247,19,90,11,192,123,93,78,102,118,106,114, +10,184,97,218,108,180,251,156,78,47,65,194,153,70,61,186, +88,65,62,24,79,166,248,106,62,185,52,99,117,184,96,147, +145,91,185,164,53,185,249,74,1,190,53,164,209,179,56,242, +50,40,187,122,218,142,162,159,104,148,25,13,153,79,76,81, +20,221,20,10,22,103,187,197,215,185,60,121,90,75,210,181, +2,166,164,251,81,107,162,182,196,141,167,52,230,138,185,184, +88,79,9,66,101,126,101,117,60,10,39,113,117,208,130,213, +168,178,90,168,92,190,1,185,92,167,137,209,171,136,153,185, +101,94,34,102,230,87,12,50,232,56,13,189,158,197,63,85, +190,138,1,189,65,39,135,220,14,72,31,47,206,174,254,226, +209,163,44,77,78,205,71,158,123,123,38,177,56,125,219,129, +97,168,151,52,105,235,209,115,211,255,254,240,27,30,179,110, +160,207,123,98,114,129,143,207,5,188,174,141,253,155,90,218, +219,242,153,232,182,225,142,119,174,224,45,251,54,110,26,240, +104,10,83,223,250,240,173,207,141,231,31,252,250,143,238,126, +240,163,119,222,114,207,203,71,158,189,124,238,149,158,16,54, +112,69,197,151,49,104,115,153,108,138,147,141,70,38,6,197, +25,135,190,24,143,108,28,222,10,137,39,143,153,207,22,106, +12,107,40,230,179,203,209,60,112,26,61,109,237,139,139,87, +26,56,28,100,129,177,104,1,51,176,59,90,26,146,46,20, +132,216,41,224,178,64,86,128,98,245,127,31,77,113,100,41, +143,244,85,111,117,108,29,236,185,254,224,238,116,174,2,173, +11,55,252,48,87,202,14,135,79,85,205,125,243,75,159,24, +106,11,253,237,131,247,127,241,167,15,63,113,49,114,239,3, +31,33,52,118,84,29,4,145,181,218,117,23,143,252,52,224, +114,189,252,212,191,56,60,110,191,199,110,32,248,82,60,223, +102,85,65,57,21,157,153,80,184,171,181,119,203,202,244,37, +167,203,3,250,4,77,170,218,59,6,1,68,78,199,230,157, +118,47,69,233,139,201,217,200,228,105,171,61,132,44,165,103, +232,176,55,188,209,100,114,141,188,250,51,85,173,172,37,202, +237,155,15,199,151,46,170,133,10,42,64,14,208,36,13,102, +147,36,38,21,2,54,31,17,74,18,164,154,33,144,248,65, +123,92,93,225,155,136,83,77,113,179,213,238,221,220,225,247, +90,139,153,196,196,82,60,26,75,213,37,205,98,170,102,49, +48,24,20,163,19,33,232,204,26,62,181,189,47,12,205,144, +184,2,38,105,186,77,194,207,255,120,214,103,55,220,184,119, +3,244,206,209,235,193,214,15,143,122,24,70,52,9,188,86, +13,42,191,232,225,113,162,20,143,46,9,164,60,126,246,212, +117,123,183,207,167,37,86,211,220,180,177,99,106,244,236,93, +183,28,120,254,177,39,31,188,247,3,16,11,32,244,244,103, +63,243,145,55,142,190,228,7,4,198,238,96,212,18,16,203, +120,207,46,95,160,189,107,211,153,145,25,28,227,100,38,249, +221,255,250,29,122,70,63,250,225,63,128,119,140,198,44,56, +5,110,151,167,59,108,142,231,225,124,39,151,202,233,92,77, +239,179,80,10,235,49,154,68,227,143,134,208,48,104,25,146, +38,151,175,98,20,142,226,90,217,78,215,30,241,92,221,1, +4,130,85,1,62,2,23,9,251,81,151,203,134,134,126,119, +71,203,189,15,60,240,241,247,222,245,252,243,79,53,170,241, +95,62,117,44,150,111,116,117,135,31,255,237,127,193,147,225, +149,71,223,120,241,76,60,118,101,252,225,227,103,185,114,22, +196,158,195,119,127,66,35,53,238,184,38,208,179,165,119,83, +39,243,226,217,148,93,195,97,73,152,45,54,214,225,159,187, +114,138,102,77,217,76,212,211,181,41,54,115,182,165,99,8, +94,165,75,147,39,220,222,86,8,171,160,171,85,171,148,202, +229,168,206,141,138,174,26,240,183,188,246,200,119,12,38,119, +251,166,27,93,190,246,43,23,94,105,235,191,6,219,3,3, +28,34,50,82,96,39,214,218,164,144,179,32,76,180,186,32, +200,209,130,168,107,74,69,145,240,217,217,155,247,65,150,169, +181,11,244,251,254,129,86,191,115,239,166,206,144,215,149,45, +212,99,169,36,10,23,48,43,33,156,3,236,83,79,87,11, +232,67,211,240,77,226,248,185,148,102,87,175,187,173,197,149, +40,243,209,124,57,93,42,67,216,10,103,79,181,33,36,242, +82,200,168,15,185,77,0,44,71,163,177,244,234,226,161,93, +59,166,163,98,49,51,139,131,57,154,201,157,27,185,146,44, +40,196,213,254,46,23,1,182,169,129,249,211,175,127,126,105, +114,4,119,51,107,181,97,127,43,149,107,40,90,144,133,137, +50,127,233,220,17,28,201,160,101,253,213,63,125,79,225,42, +170,84,23,199,47,52,21,57,15,155,212,4,85,47,151,0, +155,46,151,143,37,179,51,139,37,141,32,58,172,184,35,180, +155,55,183,50,158,6,69,215,26,106,148,176,117,220,206,96, +129,162,24,254,255,46,68,130,120,107,60,198,21,160,67,188, +194,215,10,65,159,177,80,224,182,15,182,119,180,250,94,125, +229,121,139,217,113,250,226,200,212,10,57,17,171,12,15,180, +220,123,77,91,62,158,228,18,49,65,199,134,28,198,95,63, +249,4,80,168,245,82,186,115,195,238,160,221,176,161,221,196, +122,129,170,106,76,206,231,218,45,186,79,221,6,190,145,30, +197,183,36,86,245,224,37,153,12,164,88,130,124,8,144,130, +70,179,195,106,115,135,130,16,83,43,74,90,43,28,134,109, +78,159,94,171,231,75,203,180,84,5,126,117,195,192,174,204, +194,169,147,207,252,93,251,230,219,23,46,62,3,149,29,133, +217,166,76,129,100,53,6,204,22,82,147,225,164,134,70,27, +169,192,107,172,137,158,88,185,65,236,222,50,112,207,45,59, +117,26,104,88,20,74,197,60,116,15,219,66,254,150,214,206, +129,238,160,34,94,194,26,157,6,85,151,75,167,109,214,124, +30,159,81,175,155,154,139,167,18,185,222,54,243,252,252,226, +189,55,239,42,164,211,197,100,228,194,133,145,102,165,54,62, +189,128,212,64,221,32,238,216,221,62,48,56,128,97,164,141, +165,183,13,52,227,72,97,211,241,159,254,232,239,206,92,137, +1,91,197,42,205,63,205,230,206,86,40,200,237,61,116,31, +174,41,14,168,31,255,240,135,62,52,60,45,86,212,133,138, +114,8,99,22,213,80,208,100,209,26,132,163,168,94,93,111, +243,25,130,254,46,20,185,72,20,137,58,4,20,156,178,198, +186,28,205,128,144,61,159,204,213,27,37,64,29,113,18,152, +204,14,151,183,55,212,49,56,49,149,13,90,123,44,94,112, +63,32,155,164,95,155,10,73,56,87,240,114,192,183,190,131, +31,171,241,226,228,236,34,190,204,164,11,78,135,167,84,170, +142,77,46,13,12,110,57,184,209,75,180,134,183,5,108,167, +46,43,69,133,154,20,191,250,237,95,89,29,190,114,165,12, +66,207,127,252,221,199,53,86,119,19,157,108,146,104,235,232, +165,0,27,163,32,147,68,230,34,233,177,133,234,129,45,54, +123,111,235,142,14,59,4,14,86,167,38,33,242,110,177,7, +162,203,211,232,176,0,210,50,55,126,6,200,150,224,192,174, +112,107,39,134,113,141,50,232,159,109,245,6,200,98,168,82, +169,182,206,65,127,255,77,253,59,110,21,178,171,47,255,238, +175,134,247,222,249,226,35,255,96,48,57,242,165,44,188,84, +48,109,209,20,36,145,81,171,248,10,28,253,32,49,218,44, +73,82,21,214,128,137,104,165,82,64,94,39,240,5,208,19, +128,165,192,179,83,201,36,58,29,44,114,43,112,72,49,212, +168,34,13,20,173,12,62,78,51,149,136,119,217,160,19,100, +172,149,138,227,75,41,64,164,160,133,109,51,26,123,122,90, +99,241,56,52,234,219,67,150,142,222,214,120,50,17,141,103, +198,151,35,175,189,89,252,251,47,126,232,19,223,250,234,206, +235,15,191,61,150,89,93,94,128,145,231,248,196,140,213,208, +132,139,210,93,95,248,1,126,232,151,62,254,97,31,43,5, +253,22,88,128,32,75,202,101,43,104,48,66,70,211,76,55, +110,255,192,103,224,211,116,247,225,235,62,244,190,91,27,12, +131,129,217,241,83,23,33,238,3,236,163,195,110,87,105,24, +44,74,32,150,75,233,88,60,17,107,8,185,100,98,134,43, +38,26,197,149,3,27,7,213,162,117,83,215,182,38,147,3, +199,5,125,40,61,38,215,107,171,112,173,49,181,6,64,34, +136,149,26,54,87,12,199,26,197,82,210,104,84,93,30,79, +158,63,253,114,138,227,46,31,189,56,19,169,220,123,248,208, +246,205,93,231,47,69,140,190,48,97,182,89,157,238,252,197, +87,103,179,92,53,58,191,28,139,87,26,242,222,253,55,130, +195,224,183,178,248,81,72,56,29,172,246,210,92,25,171,102, +199,161,33,26,55,27,161,235,232,219,232,108,221,180,235,230, +143,61,241,199,127,235,235,219,125,221,206,225,70,49,191,28, +77,148,68,67,93,109,51,217,130,35,175,253,10,77,243,38, +184,216,245,210,108,52,102,240,247,217,91,182,218,60,45,56, +189,140,6,219,229,55,126,151,95,30,89,190,116,100,242,210, +107,228,45,7,247,6,205,84,167,199,184,144,174,160,111,170, +232,146,105,80,90,200,187,135,187,61,118,155,142,166,109,70, +218,100,117,96,70,129,20,151,49,178,80,90,137,39,242,110, +159,45,89,34,10,229,2,108,112,14,239,223,140,155,237,212, +197,5,32,80,84,122,170,82,227,34,233,2,154,11,153,178, +120,231,205,251,46,78,175,0,201,2,60,156,150,214,103,32, +150,84,172,218,128,194,87,172,150,244,31,124,224,61,134,80, +183,213,219,227,54,25,154,165,52,210,125,129,227,247,111,234, +222,178,253,128,119,211,193,127,250,202,151,46,30,127,190,183, +39,140,20,20,178,181,16,122,98,49,220,3,183,30,90,62, +140,54,60,116,224,216,107,79,125,230,83,159,253,217,47,31, +215,44,156,186,230,206,15,253,227,15,255,101,236,226,73,187, +149,70,17,9,252,124,189,92,183,88,154,61,189,157,208,157, +34,200,6,169,5,110,61,52,187,26,3,35,255,79,207,158, +212,203,240,165,212,25,173,6,21,71,197,179,69,94,193,204, +19,168,197,208,223,192,103,87,86,24,101,8,57,72,170,73, +24,141,172,221,101,191,124,101,25,61,200,79,127,248,189,223, +255,193,247,250,250,252,191,126,236,121,13,145,55,26,12,1, +131,60,57,114,222,223,186,225,47,62,240,158,79,124,241,59, +209,232,60,11,232,155,74,108,239,219,46,54,169,12,215,20, +184,58,72,38,30,155,46,83,20,189,70,12,114,154,216,61, +113,202,98,46,75,136,53,72,164,113,179,79,252,227,87,63, +90,23,114,251,251,60,233,120,10,226,92,6,61,78,3,91, +168,181,103,246,194,11,70,147,206,102,15,89,169,230,194,165, +23,24,163,177,123,227,245,139,99,47,12,28,252,8,195,167, +138,181,202,134,45,55,251,153,146,2,200,249,255,61,6,214, +201,215,211,111,60,124,219,253,15,238,220,189,201,12,123,59, +26,112,239,10,20,206,108,70,144,149,0,47,162,65,11,40, +86,155,115,115,87,126,249,187,151,195,187,111,56,224,227,63, +251,224,109,255,116,180,249,202,83,191,250,226,95,220,11,6, +1,69,25,165,252,138,217,88,197,78,24,201,113,1,191,217, +97,116,21,235,229,72,50,117,205,112,251,19,71,227,187,7, +28,197,170,12,183,251,76,77,120,254,245,17,204,208,193,124, +192,32,22,78,236,233,44,114,75,194,110,50,95,183,61,204, +168,136,82,173,230,10,134,94,126,245,68,171,157,123,117,106, +61,94,171,117,170,205,253,198,163,223,191,241,240,77,106,169, +97,130,253,160,32,49,232,149,49,152,248,90,32,185,85,169, +195,244,90,54,153,244,200,211,114,169,252,198,206,214,167,47, +164,178,249,149,160,77,139,11,236,180,218,123,59,130,163,227, +87,26,77,38,158,130,14,73,115,114,174,210,148,40,36,203, +64,246,66,203,235,236,248,98,200,169,174,202,13,214,174,71, +249,135,30,44,2,230,182,43,59,158,221,106,203,42,229,169, +242,48,88,204,16,200,132,60,16,65,242,145,200,156,211,206, +136,138,55,219,122,124,172,211,16,126,242,23,151,134,59,2, +140,74,230,68,116,80,32,80,65,37,48,55,200,164,167,166, +151,160,43,73,233,12,54,19,155,169,212,63,245,233,191,144, +138,43,27,134,182,188,116,49,195,136,138,14,199,236,252,138, +141,101,129,79,72,86,132,76,205,156,46,96,64,166,154,95, +206,164,82,185,124,93,54,210,214,100,65,170,164,235,23,47, +173,172,44,197,114,13,14,86,151,91,7,251,157,70,93,123, +216,155,133,213,136,210,169,81,226,84,47,22,141,90,25,147, +13,76,23,48,42,34,9,237,49,133,139,190,30,31,235,52, +132,223,252,155,175,191,116,122,73,165,162,237,140,206,105,117, +150,242,101,214,96,46,100,210,109,109,225,90,85,76,230,138, +200,165,93,102,182,128,76,68,141,97,100,230,87,207,93,52, +106,56,84,226,35,115,171,0,98,193,182,87,171,37,178,233, +132,137,81,163,150,88,206,168,98,53,173,215,233,151,185,2, +108,44,74,224,175,106,140,72,220,180,116,222,237,47,222,126, +189,203,238,243,173,96,138,253,142,91,111,19,181,12,179,161, +197,176,111,87,167,145,85,163,132,205,65,84,169,217,12,40, +138,10,235,241,177,78,67,248,157,111,125,251,240,3,239,75, +167,179,64,1,137,124,41,154,45,208,26,209,100,49,135,59, +58,43,117,105,53,154,74,101,75,126,127,8,226,92,30,151, +43,12,2,18,65,252,246,137,83,219,218,173,23,46,143,125, +238,59,63,171,23,114,195,3,93,158,80,139,197,211,149,23, +157,221,237,246,107,183,48,124,99,82,178,10,105,190,105,182, +233,187,218,144,57,75,96,146,101,210,98,50,30,93,92,138, +97,214,166,68,111,237,1,67,167,13,157,161,66,149,141,46, +151,209,244,207,103,138,91,251,12,129,117,234,125,183,94,189, +124,33,243,176,113,112,112,124,41,174,152,188,72,148,199,110, +34,36,116,219,13,209,165,5,80,227,218,218,195,211,75,241, +57,8,25,150,107,33,183,217,106,100,14,237,222,176,117,219, +176,194,67,209,144,221,221,189,159,248,192,253,140,90,216,189, +109,24,142,62,117,96,252,229,202,115,111,199,178,37,150,168, +123,58,3,76,91,208,8,205,70,23,13,216,178,42,208,78, +51,54,149,47,128,105,154,194,77,121,39,132,155,59,140,217, +92,110,236,202,4,132,115,21,245,209,66,246,7,191,122,228, +200,137,209,245,184,6,215,173,29,51,202,107,16,114,104,138, +64,171,170,42,112,14,155,13,13,254,66,181,232,176,154,121, +240,190,5,240,61,24,192,36,33,231,115,234,220,248,233,145, +105,132,3,112,119,24,156,67,87,113,122,122,114,113,25,73, +169,6,56,10,147,211,203,113,56,14,61,249,162,250,210,88, +242,213,227,19,44,219,208,185,43,69,24,213,107,180,97,167, +89,39,83,178,158,234,233,102,59,253,22,175,215,134,32,109, +233,66,31,65,95,128,225,130,6,70,106,66,46,151,223,189, +119,187,166,88,123,251,183,223,255,115,8,175,230,10,8,53, +120,53,232,244,205,74,93,129,195,214,75,185,124,165,2,199, +200,87,78,95,56,127,101,254,185,215,47,188,126,98,20,53, +220,112,127,24,93,190,193,54,28,112,100,103,192,241,202,43, +199,247,14,244,182,181,56,78,95,30,87,201,58,164,147,118, +29,84,221,27,201,84,149,171,149,29,46,167,223,231,154,93, +110,48,64,35,110,179,130,96,157,45,64,163,148,71,219,85, +86,85,141,230,192,182,129,192,117,59,64,243,213,149,27,192, +158,163,237,198,53,235,2,120,9,134,70,142,106,25,182,109, +188,246,106,62,192,187,247,220,117,122,22,94,250,205,31,113, +13,220,222,14,76,190,208,118,179,183,118,157,95,170,27,44, +142,177,201,248,124,82,218,18,246,126,255,147,187,64,205,123, +237,248,249,3,125,246,91,15,244,239,216,60,144,207,36,39, +150,86,198,87,226,95,254,192,53,163,211,139,96,218,45,71, +34,208,25,108,117,91,103,23,147,173,65,63,165,46,118,183, +52,91,189,246,76,140,0,49,44,220,235,36,105,153,133,42, +1,32,37,42,245,106,114,153,54,85,138,185,218,82,22,154, +71,10,95,26,58,34,117,177,209,218,102,251,204,167,254,146, +152,26,15,83,166,119,47,44,87,243,74,235,52,132,155,62, +246,185,235,123,28,185,82,30,88,18,179,209,54,55,62,241, +249,247,220,126,215,97,168,149,248,50,181,242,229,104,254,74, +130,119,27,181,215,92,179,23,62,52,241,229,56,171,83,135, +220,244,199,31,56,24,207,84,224,146,14,244,144,160,210,100, +138,203,165,90,137,181,82,6,147,97,113,53,97,54,129,222, +168,5,180,8,96,50,180,193,89,44,80,112,186,8,125,177, +202,141,140,8,219,182,0,6,38,40,90,160,124,29,77,162, +82,169,188,18,203,128,205,178,237,134,7,223,46,26,159,141, +196,190,250,63,143,94,205,133,125,247,158,187,78,67,136,11, +224,11,185,193,189,182,96,120,146,140,2,210,120,97,228,236, +248,248,66,95,155,111,103,59,61,54,187,116,228,141,153,229, +100,166,211,78,61,252,230,232,163,175,95,128,207,100,54,95, +157,92,138,106,25,77,186,34,119,6,29,111,159,58,206,137, +32,147,67,13,44,65,201,53,52,157,231,22,211,26,77,35, +146,138,196,86,51,138,106,181,162,241,175,41,85,171,66,93, +92,137,166,140,134,42,192,55,77,74,182,216,32,16,105,224, +100,164,54,224,127,26,110,60,176,239,186,190,158,80,69,182, +112,74,249,191,14,31,235,52,132,72,224,235,50,85,44,139, +104,171,166,202,13,163,201,92,175,87,35,75,75,122,168,24, +41,88,44,226,242,82,20,74,177,138,124,138,44,119,181,134, +23,163,5,104,250,144,226,226,237,91,60,24,56,111,234,178, +229,18,133,74,142,145,234,116,163,170,249,192,61,135,134,251, +172,3,237,86,177,162,174,151,52,5,30,20,173,92,44,154, +67,215,23,60,237,146,80,221,185,213,79,105,88,66,166,236, +158,64,157,35,234,229,98,83,174,165,82,213,15,127,228,193, +125,55,220,236,217,56,124,44,41,254,231,147,15,175,195,248, +225,45,173,211,16,154,97,194,162,53,128,197,79,27,0,154, +133,44,142,166,80,17,150,163,113,14,240,150,0,196,166,40, +116,189,143,157,152,28,157,75,204,44,39,18,177,52,26,196, +62,111,203,74,12,122,61,252,165,241,216,216,98,177,45,236, +48,130,166,172,82,65,190,232,236,185,11,240,2,129,77,25, +1,100,165,78,165,55,64,163,161,89,41,74,114,129,0,11, +171,81,86,87,139,156,221,1,121,23,117,189,44,0,158,132, +9,123,54,83,75,113,196,205,247,124,106,228,245,55,254,244, +227,159,46,156,121,3,243,189,63,135,240,42,174,0,230,49, +160,132,152,77,122,104,255,101,10,194,194,210,34,58,209,10, +4,153,160,208,247,188,166,223,133,224,104,12,250,185,88,186, +173,37,60,22,77,183,117,120,199,231,231,97,51,3,133,135, +77,61,129,104,60,11,31,175,90,29,126,111,92,42,93,17, +225,223,219,84,129,54,2,166,7,196,121,76,208,44,43,2, +224,67,44,71,203,208,220,109,54,129,99,110,158,57,27,5, +154,43,18,73,131,207,9,60,71,161,44,124,226,11,159,70, +14,27,173,9,231,166,71,143,94,62,171,50,193,76,120,61, +62,214,233,42,4,229,39,147,200,173,172,196,231,150,146,47, +159,28,191,50,147,132,58,17,176,210,106,85,3,196,159,134, +142,174,2,163,91,111,248,157,142,29,157,78,124,6,0,180, +128,216,234,236,237,76,101,50,133,98,202,102,80,65,146,206, +108,9,66,116,206,106,210,100,177,102,1,250,192,68,9,189, +150,58,199,149,57,48,38,193,81,129,243,145,145,165,128,133, +86,235,101,19,248,163,12,15,15,51,167,93,211,224,202,46, +183,241,43,95,250,214,232,200,89,218,213,127,227,251,191,246, +157,31,62,247,201,111,254,98,61,6,112,221,110,164,189,221, +152,178,187,208,97,46,100,50,119,239,235,125,207,237,219,57, +136,5,129,140,212,128,115,132,8,155,167,143,220,123,125,69, +213,188,48,49,179,20,139,94,183,171,239,220,229,25,198,0, +96,13,159,206,100,93,0,101,107,168,120,36,154,74,36,34, +241,180,213,162,77,41,130,42,180,219,203,8,96,53,184,45, +77,157,46,15,103,11,128,2,52,234,104,150,171,113,152,132, +64,171,10,152,76,202,229,130,160,24,1,67,103,144,251,142, +191,246,210,197,147,39,33,232,220,221,222,102,2,38,5,210, +163,235,242,177,78,87,225,203,163,0,0,203,231,199,151,123, +253,118,204,101,23,87,163,124,173,209,217,30,134,125,171,193, +72,217,117,8,102,205,105,212,64,138,226,228,68,204,231,52, +37,74,165,104,190,214,19,116,247,118,180,104,72,218,225,69, +94,226,135,91,69,36,13,208,175,218,132,153,118,155,55,145, +45,146,108,83,212,112,44,197,146,178,182,152,85,80,212,177, +88,29,184,133,70,93,130,119,87,62,85,117,122,105,0,160, +77,86,186,42,73,161,206,193,157,183,188,47,22,93,253,227, +35,207,198,147,185,53,113,138,245,248,88,167,33,196,165,42, +214,154,67,173,22,72,134,232,52,172,129,129,76,141,21,38, +153,169,4,52,195,171,224,87,86,139,130,89,207,184,108,38, +51,163,31,29,159,221,50,56,240,252,107,151,32,45,14,254, +105,60,89,32,161,98,43,54,48,251,109,111,129,249,100,13, +4,152,76,38,5,82,158,88,83,139,105,70,6,39,145,47, +67,78,44,228,167,188,54,83,163,161,80,222,89,197,50,72, +7,97,42,248,91,98,188,4,232,194,115,255,243,175,63,254, +193,183,102,199,207,156,63,254,10,87,171,128,70,182,30,3, +184,110,55,82,100,135,39,207,79,132,67,110,136,96,228,202, +121,208,95,49,187,7,70,9,120,22,192,65,41,154,138,197, +35,64,136,120,88,218,110,166,176,25,46,173,164,4,153,56, +63,190,48,50,29,173,113,149,58,15,215,102,161,55,228,72, +103,248,82,6,242,60,236,216,92,28,185,173,78,86,217,141, +32,168,24,177,133,218,236,26,89,75,150,225,138,9,73,16, +45,161,72,121,98,217,170,116,128,82,38,98,25,155,205,19, +93,190,50,114,230,88,239,150,27,63,252,233,175,30,220,214, +254,201,155,194,127,14,225,85,92,1,104,104,236,220,62,248, +223,47,92,46,84,154,46,167,89,69,2,225,6,174,172,138, +5,18,205,102,137,194,107,73,228,177,64,195,62,19,232,128, +136,9,108,140,91,109,26,139,197,120,121,54,218,217,226,136, +101,11,102,163,17,244,5,128,201,64,230,115,88,33,155,96, +224,121,224,158,101,72,98,128,63,89,47,106,211,49,158,85, +196,175,233,185,73,152,108,240,58,101,143,109,8,234,138,133, +49,37,18,101,131,205,209,211,191,231,67,31,251,171,161,222, +22,186,190,92,171,228,20,77,201,117,249,88,167,155,131,87, +77,24,213,213,225,190,224,83,71,199,94,120,99,138,97,236, +192,101,153,116,20,210,25,104,105,100,74,85,64,73,145,119, +96,187,51,210,218,10,47,7,92,214,237,67,109,96,61,187, +29,182,68,166,102,101,212,52,37,23,139,21,218,68,182,248, +193,127,199,78,9,141,2,109,192,231,48,176,186,11,227,75, +254,144,78,15,51,60,73,165,53,136,180,65,71,193,56,24, +37,7,24,151,77,162,94,19,177,136,251,187,6,6,246,220, +124,248,174,247,0,138,161,182,134,150,210,242,229,43,169,117, +25,193,245,90,218,167,49,63,111,212,237,90,98,255,214,174, +82,67,120,228,249,179,191,127,238,220,232,76,28,170,150,58, +69,223,78,182,99,130,40,99,94,164,237,105,247,0,227,196, +50,170,6,223,168,87,243,38,3,53,50,157,0,13,106,49, +89,132,85,246,149,233,220,216,140,2,156,67,19,71,165,194, +228,176,81,43,85,84,92,51,149,204,105,129,175,172,40,82, +128,140,30,158,48,77,156,116,176,198,227,56,161,92,43,3, +95,122,215,109,119,175,172,46,157,61,55,10,61,206,18,6, +94,156,28,10,90,254,28,194,171,184,2,0,103,67,18,223, +108,162,173,6,205,182,129,54,208,89,60,118,235,244,74,250, +199,191,121,115,53,86,198,152,9,228,94,37,65,84,53,25, +45,96,190,44,164,28,47,205,37,79,195,102,36,147,63,184, +171,29,82,135,209,72,130,49,56,175,223,218,210,226,182,110, +236,11,67,45,24,202,213,180,66,173,148,172,54,77,192,203, +66,228,178,92,21,212,34,132,225,53,185,12,172,44,5,136, +137,195,209,14,6,121,88,220,67,251,238,180,89,253,203,139, +243,128,7,32,186,33,15,93,40,191,35,208,178,238,30,235, +116,35,13,90,225,18,194,66,239,7,186,3,16,160,182,216, +108,237,173,174,225,238,192,45,251,7,177,133,154,12,144,123, +7,53,3,59,32,212,34,168,46,63,125,126,38,13,13,252, +108,174,220,15,81,89,214,50,53,159,130,104,81,32,0,222, +121,29,252,41,112,190,92,86,19,84,125,17,156,88,178,12, +93,92,136,153,164,83,124,161,192,195,33,20,9,14,68,155, +19,241,70,100,169,228,181,211,88,169,129,142,13,102,51,17, +141,204,29,60,116,61,4,107,64,74,90,141,151,34,209,204, +186,139,222,218,27,90,167,33,164,105,20,21,2,40,170,208, +43,129,37,124,192,99,135,200,14,135,218,13,140,59,184,223, +230,1,85,226,224,184,87,72,101,64,108,7,245,10,26,15, +88,148,187,6,92,93,173,161,137,249,136,69,215,156,138,215, +25,70,55,177,8,221,125,17,162,37,148,70,70,165,145,47, +87,218,66,238,34,138,121,244,239,160,247,10,243,21,137,90, +140,102,49,76,244,121,65,32,133,200,184,202,225,98,51,25, +37,90,251,110,186,7,130,101,145,68,26,226,0,240,236,229, +160,62,185,46,31,235,52,132,35,49,34,15,42,34,38,182, +229,156,195,110,73,199,150,237,70,83,87,48,8,66,185,68, +168,141,22,59,204,171,17,212,100,149,88,137,213,202,21,126, +203,96,27,46,111,192,103,207,229,225,229,214,8,186,13,168, +2,75,133,36,168,32,122,26,66,231,58,74,139,130,15,162, +44,4,252,231,219,66,246,98,137,103,88,16,146,164,128,77, +55,51,153,2,129,11,202,28,80,86,92,74,66,36,145,206, +172,44,124,247,239,255,97,246,202,232,249,183,223,92,92,154, +169,214,235,115,81,238,153,51,197,117,25,193,245,186,10,239, +31,166,55,247,133,130,78,35,212,31,114,153,229,133,88,30, +194,74,193,206,64,169,46,23,243,229,174,22,64,8,161,142, +37,184,221,22,172,24,25,60,157,53,224,18,40,175,5,144, +249,209,107,1,95,137,144,94,62,190,100,96,77,51,203,25, +144,17,129,249,181,64,193,82,16,104,157,30,18,253,213,2, +159,93,173,74,34,69,49,242,221,183,181,112,18,181,18,173, +65,44,65,45,67,179,83,0,77,240,212,139,15,255,241,15, +191,106,233,222,222,36,232,134,164,53,91,216,53,177,158,245, +248,88,167,239,11,206,14,30,43,211,211,26,232,235,8,110, +238,219,120,112,251,134,185,217,153,35,79,191,12,179,141,84, +46,231,109,233,132,188,108,60,158,190,102,71,95,91,187,111, +120,176,227,153,87,70,67,118,253,169,139,177,249,69,168,218, +86,243,37,69,106,97,106,181,50,185,148,200,85,229,165,40, +136,143,170,84,185,238,9,186,48,180,98,12,6,135,133,85, +0,29,132,234,201,23,211,90,131,241,244,165,152,205,162,5, +38,213,8,83,237,26,215,53,176,175,167,127,48,24,112,16, +148,238,51,31,56,248,161,91,7,118,15,248,97,76,177,30, +3,168,164,116,235,146,83,1,21,128,45,237,86,19,212,207, +117,240,57,181,244,135,253,44,171,129,210,116,60,199,253,234, +209,23,225,143,5,121,55,164,58,147,241,130,170,152,185,247, +246,107,198,167,163,191,126,252,232,225,67,173,155,7,6,13, +140,22,221,50,228,153,20,60,13,180,196,99,207,28,133,50, +213,210,226,42,228,90,116,96,169,25,116,208,208,42,151,56, +139,5,137,104,113,98,85,188,237,246,224,232,149,132,213,232, +92,89,202,134,90,72,177,161,242,184,7,147,177,139,149,74, +254,198,15,255,238,224,214,141,231,78,158,56,11,131,147,201, +115,167,78,191,185,14,163,184,126,67,8,217,78,200,164,56, +25,88,168,54,33,248,225,115,89,93,118,72,126,217,101,149, +104,130,126,131,90,35,243,245,183,175,196,83,217,242,7,14, +15,250,157,246,55,207,93,48,26,112,168,209,208,116,128,96, +204,154,143,3,106,19,25,106,14,23,198,179,46,135,177,63, +172,93,137,87,91,189,38,0,126,69,158,7,128,70,16,201, +68,65,220,181,221,53,54,158,143,36,248,166,80,237,235,70, +34,172,207,101,96,168,6,13,1,149,49,180,115,37,50,127, +231,161,109,151,167,243,255,240,221,175,119,13,116,255,57,132, +255,219,43,128,85,120,223,141,123,231,151,86,114,169,20,203, +176,54,166,57,26,45,128,79,110,82,19,15,222,181,141,107, +40,16,65,0,106,144,235,159,25,91,233,107,135,113,132,239, +252,232,12,64,25,22,154,105,112,213,82,77,74,172,149,113, +140,94,227,50,170,175,25,12,129,74,183,189,95,255,218,165, +178,223,169,91,142,101,187,2,144,10,208,149,171,170,84,166, +178,105,183,245,210,197,34,138,138,108,161,184,119,175,79,174, +144,14,151,213,223,186,189,42,27,227,233,74,112,224,214,238, +128,203,108,50,156,62,122,252,239,254,225,255,252,111,63,192, +187,248,188,117,122,22,226,10,44,205,78,152,73,204,249,200, +144,147,98,140,250,91,247,244,225,155,125,157,30,136,81,172, +153,204,17,229,106,217,102,161,157,6,98,99,167,3,212,68, +151,141,237,12,65,58,69,96,76,218,166,22,20,81,229,42, +110,104,209,219,237,208,25,44,94,153,95,121,228,229,249,58, +198,247,104,147,11,90,131,134,134,144,188,212,144,33,59,6, +198,68,165,6,181,49,40,91,73,192,29,215,106,226,204,124, +242,233,199,127,49,63,191,172,103,60,48,70,155,94,94,230, +11,75,215,92,51,252,46,198,229,42,94,106,157,134,112,192, +72,220,122,253,142,6,101,89,200,84,108,46,155,197,110,131, +47,34,62,214,64,135,27,162,170,165,42,196,83,171,132,198, +244,202,185,21,56,255,192,216,198,230,132,166,42,84,129,224, +83,168,13,5,2,91,251,221,46,155,82,198,205,38,85,87, +150,137,63,190,145,142,230,49,239,55,150,203,216,63,201,238, +54,147,72,64,215,74,44,214,121,76,31,245,20,3,224,54, +84,201,0,122,170,21,32,6,162,6,12,103,231,254,123,59, +122,119,133,187,6,131,254,176,68,152,78,78,215,158,122,225, +204,85,92,215,119,241,169,235,52,132,54,167,226,157,161,163, +213,32,224,131,30,76,235,181,209,164,82,150,105,180,176,0, +129,161,56,212,131,108,149,66,2,242,153,185,42,111,183,88, +155,50,53,179,202,137,149,106,174,88,93,94,88,134,151,4, +41,146,14,167,29,146,198,58,24,57,154,140,112,138,1,226, +20,61,129,169,177,165,169,233,226,202,106,169,53,12,131,14, +8,247,54,100,120,90,243,245,72,166,222,215,109,24,24,26, +216,113,240,193,251,63,242,87,93,131,135,245,180,5,140,153, +185,233,9,184,192,170,181,236,235,103,255,204,169,184,154,27, +19,22,112,77,73,227,4,63,156,134,243,41,23,73,22,179, +153,98,123,192,241,252,185,149,199,95,30,133,76,118,58,147, +130,140,208,157,251,195,21,17,242,218,13,12,20,251,251,66, +168,252,160,169,80,6,94,177,82,53,162,171,83,43,213,171, +245,106,169,164,230,106,144,153,131,48,130,211,239,245,249,93, +112,79,34,105,54,154,204,59,157,58,232,180,194,235,25,34, +161,80,158,131,67,204,202,202,172,175,197,69,233,236,197,108, +218,23,238,14,182,246,73,144,217,40,37,105,170,89,201,174, +94,205,39,120,247,158,187,78,87,161,81,241,169,128,93,34, +11,89,31,56,126,153,88,168,117,57,224,84,182,165,155,105, +243,144,112,215,133,96,14,39,51,23,231,42,0,236,130,193, +14,173,251,102,173,184,90,132,165,14,252,23,213,149,6,177, +146,21,114,85,1,130,215,45,46,101,90,236,181,41,26,220, +38,93,83,177,23,79,150,175,76,229,160,140,10,236,175,85, +79,213,202,245,66,166,2,9,38,45,36,146,40,163,191,243, +250,208,192,142,107,14,63,0,131,56,200,136,120,59,55,134, +131,62,52,240,10,160,193,175,203,199,58,45,42,222,191,47, +20,238,221,56,191,188,186,52,21,109,111,115,244,116,187,230, +163,220,133,169,85,162,86,14,249,76,188,68,198,10,205,52, +48,194,68,179,88,46,127,234,246,77,151,231,99,229,146,0, +57,101,224,181,23,82,117,120,31,186,12,234,68,142,103,117, +178,193,108,132,204,90,103,0,114,85,134,76,177,108,181,177, +165,18,201,113,82,208,161,178,89,40,53,13,131,42,253,153, +115,153,145,241,132,199,77,118,4,29,92,35,224,118,90,248, +122,173,66,218,135,174,185,21,174,34,176,242,139,230,184,133, +12,117,242,177,79,175,195,32,174,211,16,222,187,197,218,59, +188,107,122,241,10,68,159,166,22,106,86,140,7,173,214,115, +23,198,202,85,158,161,25,184,206,241,138,253,152,4,255,94, +140,130,33,212,194,26,0,14,214,230,114,177,76,77,63,54, +31,135,156,172,139,149,199,103,115,65,171,22,46,153,46,183, +13,10,11,26,61,11,62,133,73,7,199,5,35,160,21,45, +65,147,203,71,230,184,6,20,249,150,102,133,108,185,26,116, +73,219,183,93,191,255,238,111,244,14,15,99,150,245,246,209, +163,240,29,58,250,250,227,243,99,23,26,229,165,184,34,58, +178,30,229,18,200,111,127,251,219,235,240,206,122,244,55,63, +36,180,72,41,33,218,4,127,21,26,158,73,92,46,26,10, +56,9,45,214,80,197,235,243,89,116,4,90,213,40,215,20, +91,114,138,74,39,43,209,116,6,82,215,80,76,205,20,27, +126,11,157,138,229,171,188,156,173,201,29,109,254,116,17,244, +82,85,208,165,3,176,184,92,0,246,34,5,199,58,21,67, +56,156,12,212,187,0,51,156,157,79,67,113,89,224,42,178, +32,34,19,210,177,65,12,250,33,171,100,182,185,76,150,112, +207,166,27,3,45,27,115,5,233,243,159,253,224,58,188,86, +235,244,44,228,27,138,35,10,236,247,88,171,191,92,173,26, +144,115,168,161,90,81,107,241,194,124,80,93,207,175,212,4, +1,43,143,210,52,181,58,80,145,106,17,56,65,67,116,90, +64,22,105,246,56,173,90,35,201,81,180,197,106,4,242,105, +116,38,58,191,18,135,214,81,190,90,4,72,205,102,134,150, +142,150,212,33,187,129,26,18,79,131,121,90,144,128,157,89, +92,45,47,71,137,141,155,111,117,121,194,229,34,244,207,170, +86,147,141,20,106,80,222,205,196,198,203,146,118,195,53,31, +94,135,241,195,91,90,167,33,132,240,20,39,19,233,18,191, +184,176,162,34,165,98,93,206,84,69,167,219,13,34,160,9, +104,110,65,103,100,88,112,113,49,74,84,36,225,27,162,199, +1,31,76,58,157,204,141,207,36,48,197,133,126,157,81,171, +114,216,205,7,119,244,0,168,177,107,184,173,167,59,0,53, +94,40,99,21,120,157,211,193,6,2,118,167,129,134,68,37, +96,221,54,147,97,195,198,238,205,67,253,93,29,193,201,203, +71,97,163,11,165,204,165,197,217,120,114,182,36,17,22,119, +112,120,251,141,186,194,197,153,177,227,127,14,225,85,92,129, +241,25,126,105,181,104,208,194,247,105,205,181,145,43,183,5, +221,12,72,158,197,60,252,15,166,150,147,106,173,54,207,213, +203,53,88,122,107,179,69,81,175,49,224,124,196,68,168,8, +54,6,172,14,38,115,5,65,157,207,231,225,111,91,40,87, +97,13,49,29,129,161,52,15,11,230,88,38,21,75,229,86, +35,137,58,209,128,2,162,160,150,206,141,174,158,62,59,93, +74,173,24,180,181,76,124,114,254,194,107,203,171,11,118,167, +159,79,46,28,251,227,143,95,127,248,187,167,142,63,155,35, +28,51,231,254,235,42,62,192,187,248,212,117,154,206,160,71, +10,165,208,195,219,130,85,81,214,105,89,181,92,7,28,24, +254,41,203,171,57,173,193,117,236,244,104,111,88,23,12,66, +200,139,200,87,96,70,33,231,75,121,157,94,3,149,152,177, +133,60,174,158,211,105,39,137,134,219,102,44,195,251,166,33, +249,172,70,135,3,172,79,217,237,208,197,121,58,185,152,220, +216,237,209,91,57,179,206,144,45,214,242,57,245,244,82,118, +211,64,235,226,220,82,127,151,197,99,246,88,93,3,19,19, +147,121,66,255,208,151,127,51,62,57,14,58,134,205,226,253, +231,191,251,114,124,233,216,187,24,154,255,237,75,173,211,141, +20,111,191,203,99,242,251,97,151,236,131,67,15,198,7,208, +199,141,167,42,112,243,188,124,101,178,175,215,183,125,115,224, +208,206,238,27,14,238,75,101,170,249,92,149,210,104,176,45, +230,138,188,7,46,69,56,222,16,210,76,21,210,123,185,178, +224,247,218,32,198,139,190,42,172,223,171,21,78,199,115,188, +168,229,120,162,86,21,38,39,147,92,137,115,90,154,118,139, +20,139,68,42,165,250,202,114,46,91,99,19,156,238,129,175, +255,170,103,235,13,79,253,242,27,137,185,19,169,133,137,116, +50,225,10,108,252,223,94,212,119,247,121,235,55,132,176,161, +205,230,234,169,88,12,242,217,104,79,195,200,20,254,195,117, +94,136,149,133,212,114,126,176,59,8,112,240,226,98,220,105, +49,150,107,156,226,62,38,234,208,47,13,123,25,72,29,123, +92,182,161,110,63,12,61,157,118,51,12,51,104,10,84,83, +232,234,54,13,140,190,191,205,216,217,74,231,114,69,31,11, +13,80,19,60,13,10,69,216,82,193,36,12,174,160,82,107, +75,107,127,223,214,221,123,111,144,203,217,59,110,127,104,235, +190,251,251,182,220,106,116,6,47,60,255,163,209,19,63,123, +119,67,243,191,125,181,245,27,194,96,208,21,73,198,97,153, +202,2,15,65,144,94,183,21,72,178,44,160,103,80,154,172, +214,209,212,174,213,249,151,143,95,128,216,57,65,91,224,130, +4,21,188,114,173,4,126,32,48,131,153,124,17,198,68,149, +70,19,222,54,14,6,21,5,53,179,148,39,84,26,88,17, +68,98,85,138,23,250,219,217,26,124,1,213,4,12,121,72, +149,6,114,96,37,244,87,1,214,112,12,191,122,225,252,223, +124,253,195,31,191,231,154,247,237,241,61,251,179,79,31,253, +237,87,95,253,239,175,56,55,223,211,178,241,193,255,237,69, +125,119,159,183,126,207,194,235,135,93,208,183,13,121,220,44, +203,100,242,37,72,60,194,78,96,49,154,30,93,204,130,67, +248,228,15,15,255,230,241,49,0,101,96,232,157,74,229,93, +118,189,150,177,191,61,150,176,51,218,100,161,228,118,90,97, +241,34,203,53,159,79,221,98,55,190,113,46,11,122,226,245, +123,250,47,79,140,133,221,94,200,11,193,228,138,54,171,86, +22,235,40,247,97,162,146,74,150,52,50,21,171,147,35,151, +86,206,94,56,29,89,90,16,13,158,249,165,200,234,106,170, +144,91,92,158,184,194,23,150,23,83,80,241,90,143,8,168, +117,90,218,63,249,221,239,248,250,186,225,200,108,129,226,43, +173,183,50,104,172,16,249,50,174,160,148,131,235,120,165,182, +161,207,51,50,150,194,250,204,150,101,198,96,134,91,35,5, +235,70,137,88,77,20,224,241,80,129,191,136,134,8,122,141, +58,19,113,238,124,182,84,149,172,138,211,159,168,162,128,97, +164,164,70,209,230,211,69,226,181,70,89,128,231,8,84,104, +25,61,9,33,169,133,88,213,202,106,198,206,30,133,55,95, +176,189,199,229,105,193,221,51,184,227,214,96,176,15,22,36, +19,177,242,183,191,250,177,119,119,129,253,175,94,109,157,110, +164,139,34,1,119,228,197,229,124,157,144,147,32,210,167,150, +65,6,132,41,17,166,22,112,12,190,235,112,231,232,88,218, +194,80,21,65,147,205,84,76,186,10,99,210,228,202,117,191, +195,12,195,122,200,198,40,82,199,165,82,44,94,204,164,5, +61,41,163,130,148,105,21,248,78,64,17,83,36,20,225,161, +145,107,146,224,107,219,224,97,232,7,78,133,130,29,205,53, +182,109,221,185,105,223,237,192,255,39,87,167,198,78,188,122, +229,237,87,139,217,120,46,25,41,20,86,203,133,92,139,79, +193,57,174,195,199,58,13,33,6,16,179,209,108,111,187,29, +70,1,165,92,213,216,168,112,197,36,52,116,209,43,105,113, +192,216,68,63,57,27,17,212,141,68,174,68,52,171,240,5, +132,193,113,16,190,207,26,26,94,62,44,134,195,80,104,198, +87,208,149,225,129,17,110,178,122,9,70,70,42,201,168,22, +248,128,221,224,182,51,176,197,192,83,0,94,76,37,107,141, +58,95,202,55,90,91,180,59,182,244,188,252,204,239,63,254, +229,159,177,44,91,41,230,79,30,127,248,210,107,143,28,123, +228,155,201,213,249,108,169,70,8,138,114,233,58,124,172,211, +16,226,74,165,179,85,159,211,97,102,117,46,143,173,4,118, +124,189,142,153,31,236,113,26,132,102,122,54,225,180,91,116, +180,57,146,174,52,9,157,197,164,133,9,8,0,162,213,82, +26,82,8,9,248,22,168,36,43,28,93,100,136,8,241,176, +156,67,77,233,180,24,196,38,103,179,82,233,82,3,46,42, +172,89,87,175,115,128,129,115,28,204,128,57,14,27,175,86, +7,111,2,116,98,127,241,55,239,155,24,191,184,178,58,83, +42,11,43,241,104,50,155,201,102,146,30,59,187,60,243,214, +58,140,223,250,109,176,225,157,161,203,82,130,140,29,207,135, +124,30,182,107,216,219,210,1,81,39,143,199,231,101,53,14, +3,58,104,194,229,43,17,183,73,183,90,228,211,201,34,220, +53,96,109,10,95,57,36,62,78,179,209,235,68,119,84,162, +225,170,37,169,45,70,50,158,129,83,180,192,208,188,201,140, +134,129,66,127,201,198,161,21,45,145,24,3,54,120,3,220, +96,8,242,246,123,62,229,15,4,234,232,121,235,117,27,183, +93,63,188,251,46,152,192,154,156,33,130,52,95,57,247,252, +100,180,64,247,189,239,207,33,188,186,43,0,0,33,208,77, +224,149,89,77,70,147,205,58,50,7,210,237,121,189,170,106, +179,210,4,107,49,178,186,65,120,89,168,200,157,27,124,35, +203,240,229,106,148,138,188,19,100,67,181,134,67,121,144,41, +96,155,164,141,70,80,127,89,147,209,102,38,116,170,38,173, +211,37,147,148,25,146,152,58,170,152,22,213,13,222,225,110, +183,91,221,157,93,155,235,66,115,226,210,5,89,80,183,245, +92,115,238,220,201,217,185,169,12,180,78,8,173,111,211,125, +93,215,124,228,166,207,63,118,223,167,254,121,239,129,91,175, +238,3,188,91,207,94,191,27,41,16,104,118,16,85,148,45, +146,44,38,230,28,129,158,116,142,39,68,17,30,90,231,47, +78,97,206,16,112,91,81,249,49,234,230,161,109,94,142,231, +162,73,56,82,240,14,43,169,99,200,74,131,50,26,180,85, +136,115,241,13,14,6,87,178,172,55,25,96,163,81,46,103, +48,217,144,85,194,210,50,58,119,250,206,129,173,152,72,140, +94,124,27,46,128,53,81,53,61,53,50,125,249,141,173,251, +14,167,227,139,37,66,63,176,231,129,112,75,159,217,211,215, +30,108,147,235,57,85,19,154,179,235,241,177,126,67,136,141, +84,84,176,23,230,185,133,197,74,34,69,242,229,125,55,221, +210,100,252,180,179,215,233,241,115,146,6,130,189,54,163,254, +220,66,237,194,120,38,150,226,250,123,109,148,134,48,25,193, +216,165,97,208,20,201,243,241,116,77,4,143,70,38,248,170, +44,241,188,219,237,12,184,12,22,187,102,54,194,153,108,46, +146,146,206,28,59,130,13,187,1,160,35,195,104,155,168,79, +138,206,246,189,232,210,145,240,53,240,246,114,165,122,169,152, +99,13,128,155,230,185,6,199,175,87,224,197,250,13,33,110, +248,54,191,215,2,71,70,141,182,221,227,208,139,203,27,7, +250,128,89,218,182,99,175,200,37,25,216,218,101,161,82,226, +56,48,104,133,255,27,134,249,112,207,0,229,222,101,52,230, +11,37,56,215,53,26,112,69,19,183,109,25,12,7,189,144, +226,198,232,24,76,96,80,204,48,120,135,167,88,160,189,167, +123,96,91,181,2,255,121,57,153,42,108,59,240,222,153,249, +9,171,111,128,48,181,251,6,111,239,223,241,80,18,221,85, +132,150,54,163,251,10,201,117,72,155,54,254,172,59,243,255, +199,30,116,238,252,36,136,213,165,154,124,122,177,56,159,34, +95,126,237,37,141,74,124,230,15,255,161,39,181,51,19,81, +112,254,20,187,27,66,4,174,201,105,215,198,202,18,186,168, +69,24,221,16,112,112,82,128,192,240,252,161,136,42,87,105, +96,159,28,232,245,24,77,154,64,155,35,197,171,71,175,76, +192,131,124,223,158,235,188,78,47,252,163,175,189,229,189,44, +235,245,116,29,176,123,54,116,116,15,25,109,173,164,222,102, +113,134,236,238,110,131,193,8,130,55,214,180,244,142,95,245, +186,124,172,223,6,219,6,5,254,180,232,98,144,79,86,68, +66,220,213,101,218,185,99,43,95,41,23,85,198,233,139,151, +88,96,220,12,58,154,5,131,162,138,5,2,140,239,68,177, +218,29,48,214,50,213,66,182,50,149,131,171,102,115,160,167, +213,111,22,117,44,145,140,20,61,46,11,84,216,90,2,214, +167,222,152,214,107,97,213,104,242,185,104,24,178,195,57,109, +223,205,239,47,228,106,238,77,55,90,236,97,89,34,52,70, +71,185,88,17,155,146,158,6,170,163,9,36,135,32,53,225, +226,120,126,34,113,254,15,239,93,135,65,92,191,27,41,56, +240,61,29,29,203,153,2,220,173,246,12,122,247,237,30,2, +231,37,89,224,210,75,19,156,8,203,187,70,36,145,2,218, +19,32,82,214,100,136,229,203,86,90,37,213,120,200,198,198, +75,56,1,155,0,53,133,61,250,92,49,5,223,85,32,72, +213,98,179,221,111,7,98,184,211,109,110,245,6,218,218,108, +176,247,193,200,233,218,247,125,195,224,232,143,149,57,171,57, +80,204,36,129,86,179,192,226,199,136,74,210,0,56,0,44, +113,161,16,12,94,14,240,255,16,169,93,135,241,91,215,117, +33,184,75,20,99,242,135,90,109,80,162,104,74,211,139,49, +224,145,104,104,113,225,132,210,106,124,48,227,114,6,81,209, +233,116,58,89,132,104,9,27,180,90,98,201,82,158,87,108, +251,148,93,212,172,171,242,5,6,148,237,6,144,139,112,173, +132,165,15,71,52,64,167,80,213,43,25,72,179,111,218,208, +243,141,175,127,237,208,254,67,59,134,219,119,222,248,177,154, +160,98,221,97,214,238,3,216,95,233,237,72,112,53,150,121, +2,186,136,8,160,178,147,194,118,252,207,33,188,186,43,32, +147,58,112,88,2,78,151,154,182,86,106,130,134,208,217,52, +37,156,127,32,189,155,104,50,85,146,204,54,135,81,171,195, +74,129,234,93,169,80,151,132,154,213,225,174,148,85,86,27, +92,189,52,237,97,77,186,144,69,141,63,183,152,83,145,114, +173,194,45,46,213,98,241,50,166,75,53,158,184,229,224,141, +95,248,236,39,239,122,224,125,219,182,244,223,127,207,117,254, +112,135,17,78,243,30,47,76,208,193,136,195,242,195,191,18, +64,135,48,198,67,70,11,171,64,216,85,99,111,94,151,143, +245,187,145,170,53,122,53,109,210,24,61,225,182,193,3,3, +97,177,16,185,60,58,94,76,199,190,247,189,111,108,24,234, +199,78,7,136,61,134,12,82,3,242,148,2,136,22,209,98, +173,80,204,103,42,156,93,167,186,103,143,183,81,105,236,232, +236,91,156,131,109,30,209,223,227,240,120,105,143,147,162,44, +106,191,223,254,149,175,255,124,105,37,150,171,19,42,91,107, +208,105,40,67,127,88,7,145,55,19,164,22,49,94,22,80, +69,74,40,69,84,96,191,193,65,15,216,81,196,18,241,67, +52,215,101,4,215,43,130,13,23,235,226,133,227,249,169,163, +84,226,53,166,50,3,143,216,120,129,158,203,52,71,230,147, +63,252,151,31,88,24,45,204,89,83,201,132,172,146,245,52, +139,130,97,165,110,234,118,59,40,21,209,239,53,223,190,127, +136,35,40,28,105,112,129,141,37,51,30,47,91,174,43,118, +177,249,186,8,73,61,149,80,28,61,253,7,190,88,50,170, +21,50,247,82,170,242,220,133,138,178,198,64,139,130,255,5, +214,158,82,67,40,43,16,142,213,56,8,223,249,2,97,197, +250,252,115,8,175,238,10,176,18,191,189,23,206,18,129,141, +61,173,134,64,123,255,230,182,157,173,84,87,192,29,118,183, +24,173,150,249,104,178,213,77,51,160,228,26,217,106,173,182, +176,186,104,183,51,118,135,217,227,99,225,15,10,147,52,147, +217,124,118,124,201,229,160,93,110,58,151,175,41,224,12,149, +170,219,105,9,155,45,245,98,125,207,45,247,243,182,225,115, +35,43,211,147,243,11,145,18,78,62,68,10,195,95,56,145, +35,122,16,162,133,81,252,218,121,40,224,55,136,43,254,4, +49,188,186,15,240,110,61,123,253,110,164,65,155,193,31,110, +243,250,219,163,169,244,236,98,218,76,27,93,38,51,170,2, +120,208,193,25,62,192,52,251,218,92,233,100,65,241,72,55, +209,173,118,98,108,161,176,119,67,56,153,174,158,157,128,241, +119,246,205,179,203,118,147,198,231,100,28,44,235,176,104,33, +100,227,49,179,169,20,159,200,52,60,173,219,207,159,122,251, +177,35,103,174,92,186,124,116,70,232,117,74,77,180,230,4, +44,50,44,56,89,57,1,17,61,82,249,31,214,46,98,7, +203,92,149,10,250,95,127,206,72,175,242,174,172,228,171,28, +116,240,180,90,88,24,139,112,98,22,5,149,193,31,137,228, +39,22,83,111,159,186,130,166,201,10,36,44,64,90,81,248, +103,205,157,67,237,167,198,227,45,126,231,161,107,54,100,10, +89,82,43,89,77,170,190,118,7,44,195,211,217,20,169,81, +219,53,122,153,195,248,183,153,76,230,235,60,87,204,38,64, +17,133,208,186,170,22,23,10,243,245,106,21,34,193,8,21, +194,133,7,128,228,202,196,81,9,162,26,113,92,251,66,73, +80,175,242,19,188,75,79,95,191,171,176,169,197,169,196,179, +44,237,180,176,122,232,216,243,124,170,134,188,3,248,9,45, +150,67,163,81,151,229,42,188,214,71,39,231,45,78,91,139, +223,133,11,6,65,253,213,72,190,90,209,135,189,240,53,7, +21,141,177,91,180,12,105,240,152,116,152,51,86,170,28,18, +77,167,85,29,234,217,118,211,67,223,216,115,221,173,217,18, +33,147,236,188,216,197,171,49,151,2,5,0,237,54,101,86, +140,128,161,23,131,56,98,15,197,55,177,252,176,139,42,60, +156,117,249,88,167,111,11,215,10,117,55,210,19,56,73,84, +107,124,62,95,6,34,123,98,53,66,209,214,107,134,130,40, +178,225,66,45,72,170,211,51,245,107,119,246,135,252,142,92, +133,247,154,117,40,192,161,148,184,177,51,36,138,160,204,55, +99,249,52,134,245,98,67,170,151,101,200,59,89,13,224,96, +163,64,208,179,22,55,108,124,1,9,248,224,117,173,15,221, +180,193,106,210,161,211,3,65,119,172,50,37,90,42,165,59, +7,255,105,165,146,32,100,81,201,103,214,190,34,254,156,206, +92,229,45,172,215,66,175,130,81,206,165,166,10,38,176,144, +54,168,241,28,106,114,100,24,94,155,69,131,121,124,181,140, +139,62,60,60,192,87,249,88,166,226,49,3,99,88,11,4, +67,213,74,129,214,170,124,46,182,203,239,54,59,80,110,96, +116,65,192,181,132,80,1,165,200,27,45,14,157,217,87,170, +84,22,50,26,123,208,157,200,114,208,140,82,191,19,167,255, +55,63,87,110,107,25,125,213,38,252,13,213,48,111,82,234, +66,240,78,175,242,253,191,107,79,95,183,111,140,80,43,128, +165,186,94,175,215,146,160,194,200,22,183,253,228,133,37,96, +100,198,87,243,102,167,255,248,133,121,204,255,112,153,34,177, +20,168,45,171,241,74,164,208,200,33,50,197,44,206,46,204, +42,110,216,177,173,33,202,12,142,64,146,198,204,10,117,69, +153,195,145,10,63,31,207,229,183,159,252,143,191,126,224,194, +31,254,154,40,46,102,202,28,8,83,28,143,38,26,178,25, +228,50,88,132,88,110,50,180,101,215,12,41,241,255,119,130, +139,112,174,211,199,250,13,225,74,177,57,178,176,50,59,62, +105,51,51,86,86,183,146,206,225,34,50,164,28,77,230,98, +217,250,166,61,119,70,83,165,128,195,178,20,75,107,245,186, +45,33,115,123,208,252,234,137,49,21,161,123,225,226,170,158, +146,117,192,183,213,138,205,134,214,208,168,216,155,2,26,214, +201,34,6,192,170,106,157,79,198,98,195,155,182,247,180,7, +202,217,226,197,185,28,78,87,147,81,223,132,212,16,254,69, +27,77,9,26,46,11,254,131,149,7,224,156,146,167,254,127, +86,232,58,12,227,250,13,33,46,214,177,201,252,169,203,115, +128,195,212,184,198,244,82,202,229,14,71,227,121,28,135,240, +114,181,88,77,162,206,158,175,53,142,157,159,238,243,169,47, +173,38,27,13,93,111,216,73,52,248,78,47,186,219,194,216, +66,92,87,227,139,197,234,82,22,20,38,194,111,211,152,245, +77,151,85,157,47,215,103,198,143,191,254,234,11,255,254,139, +159,92,89,68,191,45,149,138,70,176,94,215,148,162,17,54, +200,70,169,20,225,89,5,226,175,110,170,212,136,30,98,139, +197,136,255,172,195,248,173,223,123,11,114,21,91,123,218,222, +191,187,69,171,107,70,163,49,81,103,181,132,247,238,220,119, +120,195,117,31,8,118,12,53,36,9,67,244,129,129,46,164, +169,249,154,218,198,154,191,241,145,67,29,1,151,195,100,16, +36,97,107,127,91,119,75,16,243,69,168,6,245,183,219,90, +221,154,36,208,168,77,2,118,50,171,153,58,84,192,246,29, +188,243,218,107,15,180,4,91,225,240,234,7,14,220,200,36, +211,89,4,11,54,178,104,168,41,91,167,18,51,172,73,228, +164,248,10,71,37,22,234,58,141,223,58,14,33,205,238,218, +232,79,137,148,138,182,136,122,250,232,177,55,117,170,6,118, +12,200,145,164,82,9,8,132,98,8,20,116,7,190,242,23, +247,91,77,204,35,207,29,27,157,45,228,114,25,78,82,91, +205,166,102,131,87,235,44,197,98,186,84,225,146,233,66,166, +196,239,217,96,130,74,2,184,77,38,157,58,147,92,221,124, +237,93,238,174,29,22,139,169,70,234,87,97,102,17,153,215, +146,42,48,14,85,36,92,45,17,174,181,128,169,145,157,226, +255,106,165,99,163,156,139,202,38,187,62,31,235,116,35,205, +212,52,87,18,218,145,185,236,249,217,152,84,200,116,121,172, +182,202,89,174,73,61,249,200,47,246,6,209,145,225,243,165, +170,198,96,206,231,115,40,58,172,54,227,98,74,148,27,181, +76,161,36,53,27,5,140,233,141,254,106,181,102,179,162,15, +14,184,132,234,181,115,81,212,237,14,59,85,170,202,54,51, +123,234,149,39,47,28,123,246,217,87,222,124,242,201,231,136, +106,148,161,228,74,185,92,42,20,32,158,136,176,145,16,224, +67,26,131,246,171,82,34,174,41,36,172,181,72,215,50,156, +245,248,88,167,33,68,86,200,53,228,160,77,187,173,211,51, +157,22,199,151,83,93,1,67,61,63,133,75,216,211,226,61, +184,193,212,168,151,164,194,108,36,26,237,239,233,148,213,70, +189,148,222,62,220,25,116,187,166,22,211,46,179,42,208,210, +166,18,27,22,45,33,54,72,175,5,34,93,128,5,215,187, +252,250,77,131,62,171,42,190,111,199,182,47,124,254,51,247, +223,118,83,31,164,20,220,46,61,109,197,116,170,150,89,130, +88,52,116,221,68,9,150,35,18,38,198,232,181,2,221,175, +211,129,191,70,25,244,122,70,145,111,88,143,143,117,27,66, +174,92,206,238,222,96,249,206,151,238,57,176,171,167,220,144, +33,142,230,49,235,15,220,248,254,127,120,108,226,149,211,179, +102,179,153,215,216,57,173,199,9,101,32,117,81,80,51,44, +67,98,96,116,98,186,208,0,109,134,171,179,180,236,98,41, +139,147,104,109,11,96,214,95,174,54,245,20,153,41,212,102, +139,101,155,75,235,119,105,66,225,142,206,129,29,181,114,134, +49,80,165,212,106,231,192,118,240,23,245,24,64,138,82,34, +178,92,42,23,208,185,211,96,255,92,75,104,144,157,42,101, +255,186,124,172,219,16,106,212,122,219,211,231,202,223,249,167, +223,20,106,13,151,221,82,224,196,228,226,25,72,1,57,28, +30,184,198,4,236,14,31,16,190,141,82,45,87,45,113,6, +150,214,148,203,205,209,233,37,182,153,107,9,132,207,159,191, +4,224,254,248,114,145,162,8,139,21,160,126,149,145,37,167, +23,203,140,150,52,105,169,74,46,59,118,238,164,186,182,144, +154,121,51,191,58,17,31,121,177,26,159,172,86,114,153,196, +74,100,121,134,43,198,141,122,4,82,32,144,163,42,9,142, +154,84,122,220,200,80,255,28,194,171,185,133,177,164,156,22, +242,250,27,238,147,218,15,63,251,252,217,29,27,3,185,116, +214,111,146,108,154,12,88,103,136,138,197,110,156,93,152,133, +244,65,208,173,171,8,106,176,12,225,79,183,154,45,27,13, +36,10,14,130,207,221,181,171,77,224,0,223,165,82,201,180, +73,11,228,155,150,82,171,205,70,101,208,248,211,239,127,238, +247,191,251,245,165,209,233,116,182,210,189,253,22,187,175,163, +158,143,87,210,41,177,148,86,215,146,209,153,139,106,89,74, +207,95,228,10,121,52,134,212,74,20,209,62,85,175,87,0, +219,58,22,118,222,218,223,174,209,89,86,51,101,51,145,10, +56,88,23,178,127,74,42,201,174,92,133,112,90,76,23,198, +47,132,12,53,65,102,118,15,117,164,9,39,35,164,112,153, +147,21,168,168,73,110,127,248,217,215,222,116,104,138,91,130, +228,64,187,111,37,35,132,92,100,52,81,4,190,119,33,29, +253,127,218,59,211,231,54,202,59,142,239,174,118,181,171,107, +119,117,95,182,44,91,178,101,199,113,98,199,142,19,66,226, +208,4,40,103,57,10,117,135,30,20,166,211,14,109,25,122, +206,20,94,117,74,75,167,109,166,109,32,51,164,180,161,192, +48,133,78,129,38,13,147,73,8,228,40,33,135,73,98,91, +62,37,219,146,44,235,214,234,62,118,165,213,209,159,251,23, +212,111,60,122,17,191,126,70,143,231,249,237,245,60,223,239, +239,251,209,43,241,148,40,209,209,150,71,239,27,235,217,253, +141,211,19,233,88,94,50,123,227,28,206,116,205,93,250,59, +169,113,101,98,94,107,231,150,50,95,195,129,238,203,118,218, +92,125,85,161,12,45,165,55,102,226,55,223,109,197,182,138, +22,125,144,90,89,179,186,125,0,114,16,213,72,116,155,93, +221,239,4,82,5,163,144,144,3,14,138,172,115,192,48,52, +74,33,140,205,180,109,100,119,92,52,63,241,181,31,233,204, +93,190,48,120,221,80,181,74,217,64,215,65,104,106,21,13, +6,170,20,160,70,180,34,7,180,215,70,29,236,25,192,59, +12,199,42,136,80,6,192,229,137,19,31,124,122,226,21,61, +186,200,45,158,129,214,139,70,57,34,161,88,163,65,139,138, +249,181,185,139,217,192,13,177,16,146,225,0,0,174,67,184, +30,144,14,81,128,42,180,228,95,139,150,208,104,235,84,200, +153,58,73,195,193,88,155,73,3,146,19,163,102,27,18,52, +24,43,106,52,134,100,169,36,136,208,43,88,206,134,102,33, +13,246,149,223,255,20,110,20,231,150,17,149,218,228,15,248, +73,25,5,39,162,74,37,33,148,43,89,240,163,85,27,16, +216,38,199,9,208,8,149,8,105,53,202,73,170,190,236,241, +157,253,204,115,248,245,227,137,85,223,190,62,134,104,212,128, +14,100,119,244,41,20,184,193,62,164,181,15,162,50,101,142, +11,196,111,188,179,116,225,72,192,55,83,46,150,32,47,179, +37,43,216,170,222,153,155,238,203,124,38,4,10,237,106,137, +60,55,49,187,224,15,187,151,185,201,121,143,222,188,254,136, +235,48,233,219,44,38,149,90,67,106,251,151,252,240,141,89, +230,171,68,247,246,189,65,255,130,214,212,94,204,1,171,178, +68,82,114,168,28,100,209,130,72,8,103,51,144,215,101,160, +37,28,104,27,66,179,86,148,0,187,126,124,252,41,151,211, +113,237,234,103,127,60,114,100,230,234,169,203,167,95,59,253, +206,75,177,149,169,122,53,19,90,113,151,82,81,216,20,82, +134,1,2,167,234,224,90,140,133,210,92,252,86,9,55,182, +2,26,107,231,172,251,18,94,78,101,202,42,218,118,208,231, +11,237,216,113,183,199,187,212,211,55,204,234,173,222,64,120, +106,62,70,107,180,16,90,50,56,186,15,208,49,231,142,31, +99,149,138,38,134,195,49,103,173,42,48,140,162,46,162,106, +96,220,53,37,0,159,76,243,188,40,86,117,12,13,230,66, +86,38,43,38,189,158,153,75,75,51,110,82,86,115,185,182, +225,208,174,111,233,217,247,208,115,4,107,43,164,56,2,5, +156,161,6,4,227,76,42,82,229,211,72,53,135,86,82,149, +220,173,18,110,164,130,44,65,219,204,237,143,124,229,153,251, +190,244,245,175,62,249,125,173,65,215,97,239,79,38,214,14, +31,253,176,115,251,232,249,19,111,140,237,189,227,155,223,125, +113,45,232,19,11,121,143,103,81,40,196,251,119,236,163,89, +125,44,26,213,27,77,124,181,30,13,197,25,154,40,213,192, +74,8,239,65,145,166,100,176,45,105,211,98,60,34,75,231, +197,74,83,146,78,199,191,253,189,111,237,127,232,153,39,127, +251,190,213,218,157,11,47,38,2,211,205,98,134,144,107,29, +131,15,244,108,219,15,174,0,178,89,18,210,129,232,226,165, +66,58,40,20,111,97,183,54,82,194,172,152,255,248,248,209, +235,23,79,58,29,118,153,66,73,225,20,143,84,166,166,39, +238,26,235,252,197,179,227,4,138,62,250,216,51,11,43,222, +66,42,25,77,103,165,72,41,148,204,248,253,203,51,179,147, +56,218,0,241,65,129,33,56,5,113,148,72,58,35,2,91, +36,199,131,28,136,129,53,52,85,129,199,40,47,83,82,58, +6,131,13,226,219,127,62,60,51,155,61,250,155,23,226,97, +79,54,25,158,187,121,254,250,213,127,1,106,182,34,20,193, +88,106,113,221,141,72,213,152,76,171,55,183,25,218,7,180, +210,22,85,237,91,183,45,198,97,148,212,171,136,86,165,121, +248,169,159,68,35,65,46,17,238,53,211,51,113,97,151,171, +175,123,112,239,90,112,254,175,127,57,4,172,123,82,105,216, +190,181,215,100,113,44,7,150,231,166,175,14,12,140,214,176, +230,185,143,62,126,100,204,202,160,69,74,77,33,77,28,154, +147,20,34,202,101,202,55,252,25,181,146,112,217,104,104,44, +93,229,106,158,229,208,143,15,253,91,223,189,119,226,242,133, +16,252,226,181,83,21,76,18,11,248,32,25,124,231,221,79, +67,227,13,36,67,135,253,139,164,68,0,162,201,196,196,100, +157,247,110,228,58,220,164,177,173,91,66,53,138,140,222,177, +31,23,17,231,208,240,245,43,103,225,41,58,216,225,248,217, +111,223,246,249,60,238,153,155,87,206,188,197,24,219,112,9, +1,1,119,8,38,38,195,139,249,42,224,209,48,86,99,214, +54,83,199,39,150,239,26,52,144,66,220,233,212,139,144,191, +14,128,209,74,69,43,149,4,18,245,25,95,210,97,85,244, +118,169,162,49,192,202,228,43,13,202,54,242,52,130,147,186, +174,221,103,222,57,84,229,83,81,46,43,240,165,238,45,187, +52,221,7,43,82,189,82,34,228,146,107,201,136,127,106,102, +57,27,109,197,60,203,22,221,84,192,5,252,243,95,191,60, +186,239,254,21,207,100,34,186,218,16,248,161,222,161,239,60, +247,34,208,37,62,58,243,225,133,83,199,164,114,13,188,210, +178,177,64,149,207,248,230,62,175,84,235,165,66,74,130,174, +35,16,178,34,197,162,181,117,170,100,90,128,246,165,82,165, +138,131,141,170,137,70,83,85,157,18,239,54,41,107,53,201, +162,63,151,45,11,122,45,52,220,100,111,191,243,193,45,59, +198,202,145,235,217,200,116,157,80,237,217,127,87,111,255,80, +34,230,207,70,22,72,33,138,74,228,40,34,104,29,195,58, +219,192,38,221,86,27,156,166,69,75,248,232,3,227,96,96, +185,112,246,61,148,209,220,184,62,217,102,239,13,37,18,175, +29,249,85,146,227,230,188,158,106,57,35,167,25,5,163,39, +112,241,230,172,123,100,239,23,49,92,209,110,104,147,203,20, +14,155,121,41,20,135,244,95,8,167,49,208,148,40,212,72, +9,193,215,68,25,133,241,101,248,201,38,72,131,92,145,151, +83,148,94,37,173,131,201,73,66,28,123,225,11,238,79,94, +134,12,147,199,159,253,195,129,135,159,147,107,236,26,235,118, +87,255,40,35,21,16,138,174,161,164,204,56,148,88,186,76, +105,237,27,92,219,77,26,222,162,37,100,88,54,24,244,39, +98,171,106,181,238,192,254,123,187,250,135,176,38,15,90,96, +6,162,181,161,111,190,92,222,179,231,128,140,4,170,164,70, +242,63,207,117,104,205,71,209,108,137,23,192,232,22,142,37, +202,144,103,201,215,74,34,82,131,38,151,102,189,8,154,189, +208,112,57,89,157,78,218,102,98,12,235,225,137,64,227,134, +47,85,84,205,178,128,88,171,228,97,207,16,92,188,114,186, +206,199,57,255,146,82,165,99,117,206,100,50,208,228,5,32, +36,180,59,183,117,245,239,87,40,213,155,84,147,13,78,211, +162,37,140,68,99,145,96,96,160,119,43,152,168,221,211,87, +46,156,124,87,137,227,3,35,251,94,123,245,119,172,130,64, +112,217,196,148,59,147,76,81,172,189,86,204,230,98,30,21, +163,215,91,108,133,76,116,37,18,14,69,227,192,215,198,133, +140,85,39,131,84,103,172,94,183,177,134,170,84,2,81,64, +177,4,15,70,28,142,203,196,50,133,70,19,203,148,26,83, +222,92,154,111,172,6,60,98,147,80,235,172,169,100,50,153, +9,241,60,87,228,188,86,131,101,234,211,55,107,162,80,134, +100,119,231,136,119,225,202,6,215,118,147,134,183,104,9,241, +42,143,213,193,99,17,230,184,24,65,73,109,189,195,131,35, +195,177,149,73,70,129,101,185,16,134,41,203,197,162,142,101, +214,18,113,157,181,77,42,87,109,31,185,77,5,10,98,185, +168,97,88,88,185,14,187,141,98,181,222,96,170,132,64,208, +90,221,23,9,203,165,160,6,226,188,88,3,163,70,151,5, +48,20,32,230,19,114,18,179,183,1,143,155,14,175,197,229, +4,192,19,104,82,90,53,183,245,200,228,108,231,214,49,198, +178,221,105,211,23,215,38,35,115,23,87,167,207,74,203,129, +77,170,201,6,167,105,209,18,94,187,121,25,58,50,117,182, +126,248,62,225,226,193,208,252,100,58,18,139,187,47,224,235, +125,211,124,147,162,226,241,48,48,126,173,106,217,176,211,176, +226,157,143,174,184,161,120,208,34,10,157,246,176,2,129,4, +175,38,49,157,94,17,201,23,21,56,78,107,1,222,219,164, +85,40,116,61,129,83,212,162,129,61,97,35,154,46,147,82, +140,196,193,245,212,48,26,232,235,255,121,67,105,233,183,216, +119,235,12,29,57,14,114,80,137,152,127,86,103,236,242,78, +158,40,37,125,229,114,38,151,12,111,112,109,55,105,120,139, +150,16,130,241,110,219,115,0,116,115,41,65,54,49,42,95, +202,47,69,147,53,199,88,52,91,146,41,140,102,171,29,180, +167,34,68,3,21,11,243,43,1,145,160,123,92,219,34,65, +159,173,171,47,20,9,194,202,153,21,77,136,172,0,102,140, +146,146,197,83,37,141,132,48,66,111,5,169,168,52,164,130, +136,147,184,132,150,201,131,209,188,63,82,20,69,136,32,146, +170,128,4,84,45,24,24,17,173,231,72,133,220,96,237,128, +115,2,92,166,196,27,85,128,96,148,202,156,213,214,183,251, +142,241,77,170,201,6,167,105,209,18,194,151,253,90,52,74, +82,136,68,174,223,50,116,59,129,165,85,44,155,202,241,122, +83,91,165,20,199,144,106,33,25,150,177,90,150,54,2,82, +171,86,105,42,85,154,185,249,233,52,164,169,231,11,59,13, +56,244,33,17,213,180,137,165,144,18,124,139,146,177,108,170, +36,212,146,217,180,130,89,63,231,81,49,164,85,77,128,18, +15,28,61,184,215,181,114,194,196,72,225,216,220,253,225,75, +143,255,224,137,109,195,7,246,28,184,183,167,127,104,235,109, +15,213,113,186,195,108,205,100,184,249,235,167,146,193,133,13, +174,237,38,13,111,209,18,150,139,89,176,125,222,56,255,9, +142,226,129,165,207,101,184,148,49,218,171,124,1,114,11,0, +88,87,229,171,38,11,228,189,170,77,102,235,2,132,252,52, +240,51,23,78,129,191,66,163,86,123,163,25,157,65,118,242, +178,239,232,201,217,104,70,156,243,164,186,141,172,69,161,76, +213,202,208,40,85,170,240,124,190,1,32,102,45,77,217,244, +116,132,203,39,178,128,132,133,76,232,6,36,189,101,67,203, +255,248,229,243,103,222,59,252,254,223,14,205,206,92,65,37, +136,66,215,222,185,245,78,16,12,183,238,27,47,112,243,155, +84,147,13,78,211,162,37,188,120,241,204,123,31,188,73,1, +49,11,151,56,237,54,103,239,240,90,120,205,225,232,147,162, +77,57,69,10,21,8,20,42,94,157,184,134,147,224,25,70, +192,89,147,207,23,186,123,6,32,248,53,145,133,8,154,250, +142,65,231,253,123,187,12,106,74,197,202,167,151,98,161,88, +86,10,242,49,33,113,118,25,85,52,177,228,143,130,159,9, +128,205,208,28,5,97,150,137,92,29,52,13,0,207,160,56, +145,93,60,177,247,158,167,199,127,248,167,131,143,63,187,117, +244,160,107,215,61,237,174,253,246,54,167,81,134,172,133,111, +149,112,35,23,23,180,242,98,117,36,27,75,143,140,142,44, +76,156,71,212,150,76,60,142,19,178,213,165,41,149,218,138, +136,252,131,95,30,119,185,122,83,65,55,78,42,74,197,34, +205,152,183,116,217,25,240,45,81,144,24,163,234,2,69,130, +139,82,8,102,52,171,221,225,18,152,236,117,4,85,169,32, +222,233,181,162,128,209,90,170,82,107,178,44,245,192,88,183, +74,65,212,96,63,33,197,113,224,5,21,155,33,223,98,228, +234,235,68,21,176,80,109,4,134,90,172,144,167,160,242,126, +254,207,151,159,127,108,35,255,254,166,142,109,209,51,210,94, +187,109,231,232,174,68,36,74,202,177,26,168,243,252,58,254, +154,97,105,248,224,4,225,9,12,186,235,186,82,36,172,192, +42,16,79,72,82,52,190,78,97,134,20,75,126,106,222,227, +128,23,29,214,176,200,132,14,16,121,73,12,178,124,27,85, +81,167,80,128,29,45,204,241,16,129,32,39,106,32,28,114, +0,41,193,26,16,44,5,120,4,176,84,129,209,183,200,215, +33,52,15,46,130,254,7,95,170,52,154,197,124,49,153,202, +92,249,232,173,68,44,208,189,243,49,181,174,253,216,171,207, +111,106,113,254,191,201,254,11,54,96,96,21,163,226,23,134, +0,0,0,0,73,69,78,68,174,66,96,130}; + + +const unsigned char splash_image[] = { +137,80,78,71,13,10,26,10,0,0,0,13,73,72,68,82, +0,0,1,9,0,0,1,17,8,6,0,0,0,104,237,82, +146,0,0,0,1,115,82,71,66,0,174,206,28,233,0,0, +0,4,103,65,77,65,0,0,177,143,11,252,97,5,0,0, +0,9,112,72,89,115,0,0,14,196,0,0,14,196,1,149, +43,14,27,0,0,134,208,73,68,65,84,120,94,237,221,7, +184,125,85,121,239,123,243,220,251,220,123,110,203,201,73,206, +57,73,78,154,233,150,104,236,5,107,140,198,36,38,209,88, +98,52,246,2,246,174,81,65,69,65,64,64,197,134,5,68, +122,81,64,65,138,34,74,17,17,5,1,27,210,165,168,32, +88,176,131,162,243,206,207,220,235,183,247,88,99,207,181,214, +222,255,255,159,93,254,123,190,207,243,62,179,141,57,231,152, +99,141,247,59,222,241,142,49,231,186,85,51,200,32,131,12, +50,69,6,72,12,50,200,32,83,101,1,18,151,236,213,108, +115,171,91,53,183,234,209,109,79,24,165,89,170,116,215,218, +182,89,238,105,139,229,132,102,219,91,109,211,236,117,201,104, +115,76,166,29,155,38,179,206,187,164,217,107,155,217,207,124, +194,182,121,62,215,155,253,172,11,233,215,170,148,229,178,180, +103,90,235,178,220,50,159,79,191,197,234,239,214,33,21,36, +182,80,193,172,103,72,4,150,211,40,177,220,231,91,23,149, +110,43,131,196,230,252,70,235,226,247,90,57,25,32,81,201, +37,123,109,211,122,17,109,154,109,246,106,125,138,9,178,57, +21,112,205,74,89,46,214,215,185,145,108,206,111,180,46,126, +175,149,147,165,67,98,116,124,175,214,136,210,13,217,70,141, +58,97,219,241,237,222,180,149,81,118,199,231,206,89,116,108, +236,122,123,141,27,244,180,99,155,122,205,49,209,213,112,44, +203,236,110,175,13,26,197,117,230,84,121,149,6,53,215,85, +89,184,151,11,56,94,166,239,75,83,201,232,126,39,244,149, +223,88,94,70,247,29,123,246,226,55,236,246,79,217,158,88, +46,121,166,9,229,48,218,236,100,180,111,211,242,90,164,157, +86,46,147,206,25,187,254,220,241,57,7,112,185,101,94,165, +239,238,215,46,23,93,119,36,19,159,161,144,137,121,27,201, +132,107,156,176,109,153,110,46,95,227,219,163,114,92,65,89, +38,36,218,7,74,142,243,240,217,238,142,143,30,182,55,109, +174,93,61,248,162,99,227,5,182,80,128,179,142,109,202,53, +43,145,239,145,17,140,253,88,121,30,231,181,198,180,215,9, +182,203,235,207,173,243,66,22,186,41,197,125,187,243,103,164, +41,101,90,249,245,230,101,194,179,23,247,237,100,108,123,90, +185,140,63,211,188,81,185,246,252,141,70,178,156,188,94,226, +186,253,121,157,92,46,147,207,89,184,254,232,184,99,163,223, +111,238,216,172,107,23,82,150,205,180,235,78,203,79,41,155, +120,141,69,229,221,166,155,90,254,43,32,75,8,92,150,5, +87,22,110,93,216,197,246,162,180,115,36,159,47,172,177,7, +157,114,172,188,206,114,142,45,245,154,149,248,129,230,147,150, +231,213,231,116,219,169,24,158,123,225,7,158,92,97,102,164, +41,101,81,30,139,231,169,142,141,27,0,169,211,22,247,42, +183,167,150,203,194,51,149,233,198,202,39,178,140,188,78,251, +157,38,150,203,148,115,230,174,63,90,39,229,243,21,235,75, +47,243,242,220,226,186,237,222,190,242,152,147,34,63,165,76, +203,219,172,103,26,193,68,190,183,105,61,185,164,29,107,184, +86,80,150,221,221,88,56,94,67,194,131,142,182,123,174,229, +1,17,113,238,7,91,12,163,249,99,99,165,176,112,143,153, +199,54,225,154,227,34,255,69,158,203,103,40,126,184,78,198, +158,175,168,64,163,31,123,62,15,61,173,218,196,52,165,212, +247,107,37,229,87,31,155,223,95,200,88,218,242,119,40,182, +167,151,75,249,76,237,122,119,191,226,247,45,101,25,121,157, +246,59,181,71,123,203,101,234,57,245,243,149,249,30,59,182, +196,50,239,61,151,44,92,119,250,51,20,178,201,215,144,215, +185,116,202,113,219,214,3,155,187,206,132,242,95,1,89,29, +72,76,192,225,226,99,11,247,88,222,177,5,153,118,222,152, +116,121,174,127,184,226,121,202,138,53,246,124,11,63,254,152, +140,174,215,221,186,167,60,58,41,211,148,82,223,175,149,73, +134,55,191,191,144,177,180,229,125,139,237,233,229,50,254,76, +39,108,107,127,187,111,146,113,45,49,175,211,126,167,49,233, +242,57,87,46,83,207,169,159,175,204,247,162,99,35,41,174, +61,38,101,250,41,215,93,222,51,108,218,53,230,203,187,75, +63,178,43,221,202,190,242,95,1,185,5,33,81,31,27,253, +48,92,173,73,15,91,31,43,175,179,156,99,165,76,59,175, +16,63,220,84,99,91,116,141,148,69,81,49,43,153,104,172, +133,244,25,249,226,244,69,249,85,121,89,92,225,170,180,197, +117,186,180,217,158,90,46,227,207,228,188,174,69,235,171,216, +203,200,235,162,123,78,145,249,114,153,118,206,162,123,23,249, +94,116,108,65,102,150,249,180,235,46,245,25,54,231,26,237, +241,109,182,109,117,148,70,126,183,109,183,151,4,167,91,64, +110,65,72,180,45,113,30,74,161,204,159,235,188,81,37,34, +93,218,178,114,46,28,83,56,227,193,180,165,29,91,250,53, +35,69,222,11,153,55,64,215,43,127,212,177,178,112,253,185, +245,113,131,237,55,214,137,105,74,233,210,23,21,185,44,191, +58,47,221,253,139,107,76,40,235,57,64,120,246,197,199,186, +173,69,229,153,116,173,140,242,179,40,159,100,115,242,218,157, +59,119,207,201,229,50,249,156,185,245,34,159,93,218,226,222, +163,245,165,151,249,226,115,231,164,44,143,41,249,41,101,115, +174,209,109,183,191,199,40,65,126,187,69,121,94,33,89,66, +224,114,84,1,122,31,186,44,156,194,208,70,105,151,54,4, +90,61,124,113,108,218,48,231,244,33,208,101,92,147,56,222, +71,246,84,248,69,199,231,42,218,220,115,149,63,126,246,231, +94,243,153,43,210,79,74,83,72,151,223,109,219,214,35,233, +170,231,172,243,90,60,223,162,178,238,158,33,251,203,188,182, +82,156,215,63,4,26,169,183,11,217,172,188,150,191,211,148, +114,153,116,206,232,222,253,249,92,102,153,151,233,199,70,175, +200,228,114,27,203,79,41,83,243,214,202,212,107,204,229,101, +62,159,83,175,53,105,125,203,201,2,36,6,89,59,178,168, +82,172,182,180,149,175,15,162,100,205,229,117,144,45,45,3, +36,214,162,172,53,195,107,243,179,109,111,235,219,202,0,137, +173,94,6,72,172,69,89,75,134,215,117,87,138,46,68,45, +3,36,182,122,25,32,49,200,32,131,76,149,1,18,131,12, +50,200,84,25,32,49,200,32,131,76,149,1,18,131,12,50, +200,84,25,32,49,200,32,131,76,149,1,18,131,12,50,200, +84,41,32,97,182,214,173,138,233,171,149,116,67,93,11,51, +196,162,139,102,175,213,233,102,93,111,236,248,40,15,157,86, +195,106,213,117,199,78,155,118,108,145,148,247,160,83,134,247, +122,101,52,51,111,210,228,162,49,153,81,166,243,179,252,162, +139,159,121,226,252,132,165,200,196,243,235,50,152,112,255,91, +88,230,166,27,47,183,252,151,35,179,202,127,121,50,49,191, +85,253,43,117,243,111,189,196,58,180,164,250,184,88,198,159, +105,116,175,234,90,155,13,137,177,66,155,159,2,92,105,207, +53,231,222,21,40,143,213,6,83,30,235,171,212,169,208,211, +142,85,178,69,126,204,45,5,137,158,231,237,116,148,247,81, +94,251,167,16,47,65,166,158,223,87,102,35,221,196,202,182, +41,50,64,98,41,50,235,25,214,32,36,202,74,55,119,131, +236,75,165,47,11,49,149,177,42,216,178,80,115,191,236,27, +109,143,189,112,52,130,79,238,157,251,118,73,167,29,27,147, +5,163,28,51,156,121,176,221,18,173,232,148,50,173,158,151, +140,229,189,167,188,151,37,83,207,239,203,87,202,103,229,188, +137,241,10,122,75,200,140,58,189,76,153,152,223,205,253,173, +166,202,172,103,88,227,144,24,219,55,161,160,100,162,222,215, +1,96,155,118,127,121,191,145,177,206,223,190,220,174,174,61, +246,96,211,142,149,50,74,215,247,124,115,231,228,222,139,203, +97,14,88,49,158,190,31,101,116,206,72,23,78,45,175,181, +0,169,110,123,66,121,205,201,248,245,230,239,149,103,24,233, +194,185,185,207,182,227,231,69,23,85,160,197,207,216,255,92, +69,158,251,174,179,228,252,84,149,144,182,215,154,251,46,102, +207,111,53,77,230,203,205,11,105,11,215,186,164,184,246,226, +124,236,85,60,71,125,191,34,79,173,142,21,201,82,243,59, +245,183,36,115,215,113,60,117,109,209,117,102,150,229,164,103, +88,78,125,36,211,158,105,116,173,241,19,182,160,39,81,27, +249,36,233,210,201,212,248,253,22,25,119,117,189,249,238,73, +180,184,209,180,99,243,50,45,127,163,99,115,207,182,184,28, +166,67,98,252,7,153,211,164,93,184,86,242,184,232,199,239, +180,170,48,245,53,187,123,85,6,219,105,117,159,73,58,86, +129,200,228,244,101,249,44,42,87,58,127,173,229,228,199,254, +190,244,180,126,246,25,82,25,83,191,230,154,147,158,179,250, +45,71,15,61,94,7,151,145,223,137,121,26,47,143,238,83, +116,229,241,77,42,203,250,248,232,220,250,90,155,244,76,227, +231,70,182,88,76,34,192,152,116,250,156,148,153,24,191,223, +178,33,81,84,252,105,199,230,101,26,36,198,0,184,184,28, +166,66,98,12,48,245,118,245,3,215,55,31,165,45,117,254, +58,53,148,83,254,189,229,149,251,36,143,173,212,231,143,73, +149,175,82,147,199,220,111,81,57,143,238,185,220,252,228,89, +231,203,32,105,138,223,124,41,82,231,43,215,29,109,143,215, +195,197,247,24,59,62,58,119,62,75,101,153,45,39,191,201, +211,34,173,13,189,170,67,217,94,82,89,78,120,134,92,171, +42,143,77,125,38,191,113,93,103,54,27,18,11,247,171,50, +215,39,93,154,234,225,71,39,140,23,76,43,229,245,70,235, +201,124,223,15,221,123,172,148,105,249,27,187,198,226,114,152, +6,137,69,249,30,147,252,8,35,237,189,121,174,191,160,93, +178,242,199,45,101,236,119,232,47,203,78,38,157,223,73,255, +111,157,124,116,187,251,202,171,42,235,78,150,154,159,158,235, +141,65,167,144,252,134,139,238,69,234,231,170,243,52,118,159, +233,229,82,222,103,76,165,95,70,126,23,229,105,145,44,206, +199,120,157,26,201,82,203,114,236,126,125,245,49,215,40,116, +137,207,100,187,126,142,205,139,73,148,50,225,184,76,103,223, +92,134,122,180,239,1,138,237,69,134,88,220,107,218,177,49, +25,237,159,127,190,110,123,238,71,26,47,168,89,63,104,255, +143,82,36,47,100,116,173,246,220,185,15,240,20,249,236,147, +209,51,119,121,175,159,35,249,31,211,201,121,94,116,254,152, +76,248,173,203,251,247,84,168,190,252,45,228,133,78,201,79, +207,245,234,10,26,41,43,250,162,252,215,207,85,95,119,108, +123,122,185,44,170,59,165,44,35,191,139,242,180,72,22,231, +99,172,78,45,183,44,199,238,183,140,70,107,9,207,228,252, +242,56,217,114,144,72,102,203,12,206,63,252,220,190,185,12, +245,168,123,38,237,232,254,99,153,31,61,92,238,157,74,212, +109,79,59,54,38,201,223,232,88,247,97,215,209,253,105,220, +181,148,67,182,231,159,161,31,18,185,255,124,185,141,229,167, +44,211,170,124,171,124,147,177,188,87,229,93,255,248,227,219, +61,191,221,212,223,171,39,125,43,185,127,183,59,207,61,95, +46,178,220,110,143,238,185,169,249,89,216,55,74,83,92,99, +73,82,63,215,168,28,23,46,91,110,47,190,199,216,51,214, +231,150,215,94,78,126,235,60,45,146,197,229,81,66,98,73, +101,57,233,25,38,212,199,205,126,166,66,22,67,98,145,142, +46,48,179,32,90,25,101,112,145,22,133,179,32,117,193,45, +24,241,226,243,250,242,22,163,157,118,172,146,20,82,143,46, +60,215,226,124,204,5,156,38,64,162,47,223,245,15,60,122, +142,254,31,191,214,241,242,238,246,185,87,111,217,246,223,167, +147,250,252,209,238,57,153,116,111,90,61,103,125,188,170,140, +227,58,37,63,147,174,55,127,206,18,165,174,135,181,81,140, +109,79,122,206,170,238,140,158,105,238,247,153,241,252,125,249, +157,89,175,22,151,71,9,137,37,149,229,34,157,84,31,55, +231,153,234,107,205,201,150,133,4,169,11,108,172,162,148,178, +184,224,198,243,144,7,27,201,216,117,171,31,106,218,177,69, +50,233,57,91,77,94,138,235,121,222,222,130,30,43,200,241, +107,46,60,82,253,140,163,237,250,7,157,215,241,188,47,120, +94,238,61,254,3,207,253,31,195,228,74,72,198,207,47,165, +190,111,180,46,187,170,82,141,61,243,242,243,51,118,223,246, +90,155,55,4,58,58,105,41,144,88,242,16,232,148,99,211, +242,91,215,249,66,39,149,199,24,36,150,84,150,155,58,4, +186,156,103,234,187,214,24,36,54,178,204,21,206,162,58,61, +200,32,131,12,144,24,100,144,65,166,203,0,137,65,6,25, +100,170,12,144,24,100,144,65,166,202,0,137,65,6,25,100, +170,12,144,24,100,144,65,166,202,0,137,65,6,25,100,170, +12,144,24,100,144,65,166,202,0,137,65,6,25,100,170,12, +144,24,100,144,65,166,202,0,137,65,6,25,100,170,12,144, +24,100,144,65,166,202,0,137,65,6,25,100,170,12,144,24, +100,144,65,166,202,0,137,65,6,25,100,170,12,144,24,100, +144,65,166,202,0,137,13,40,191,250,213,175,70,107,115,98, +123,210,190,236,159,182,221,167,191,252,229,47,59,205,250,205, +55,223,220,252,226,23,191,104,110,186,233,166,110,159,245,28, +179,78,146,254,231,63,255,121,183,188,241,198,27,155,159,252, +228,39,205,15,126,240,131,230,250,235,175,111,174,187,238,186, +230,234,171,175,110,206,59,239,188,230,35,31,249,72,179,215, +94,123,53,207,126,246,179,155,221,118,219,173,75,231,60,226, +94,131,108,57,25,32,177,1,133,1,150,98,59,90,26,119, +148,209,49,192,210,176,25,59,35,206,190,104,125,126,182,75, +141,17,231,26,12,28,4,190,253,237,111,55,87,92,113,69, +115,193,5,23,52,95,252,226,23,155,143,126,244,163,205,1, +7,28,208,236,178,203,46,205,211,158,246,180,230,159,254,233, +159,154,127,252,199,127,108,30,244,160,7,53,255,252,207,255, +220,252,203,191,252,75,243,175,255,250,175,205,51,159,249,204, +230,180,211,78,235,174,235,250,131,108,89,25,32,177,129,37, +134,92,174,103,59,198,92,26,94,182,147,46,70,95,158,75, +35,214,165,7,18,48,248,209,143,126,212,193,224,194,11,47, +236,32,112,230,153,103,54,159,252,228,39,155,195,15,63,188, +121,235,91,223,218,188,246,181,175,109,158,245,172,103,117,0, +120,240,131,31,60,15,5,203,135,61,236,97,205,35,31,249, +200,230,81,143,122,84,243,216,199,62,182,249,183,127,251,183, +230,17,143,120,68,243,232,71,63,186,75,255,230,55,191,185, +187,190,123,13,160,216,178,50,64,98,3,75,105,208,145,210, +208,179,94,3,35,235,245,190,44,121,6,215,92,115,77,243, +165,47,125,169,57,253,244,211,155,19,78,56,161,249,208,135, +62,212,236,191,255,254,205,219,222,246,182,230,85,175,122,85, +243,244,167,63,189,249,247,127,255,247,206,248,121,4,12,158, +6,4,143,121,204,99,154,135,63,252,225,29,4,120,10,47, +126,241,139,155,255,248,143,255,232,60,135,55,189,233,77,205, +126,251,237,215,193,226,113,143,123,92,119,222,11,94,240,130, +14,60,63,251,217,207,6,72,108,97,25,32,49,200,188,4, +10,1,3,205,118,32,80,30,3,3,221,3,30,193,241,199, +31,223,124,240,131,31,108,246,217,103,159,102,207,61,247,108, +118,220,113,199,230,165,47,125,105,179,237,182,219,118,48,96, +220,140,63,48,224,29,48,240,199,63,254,241,157,87,240,196, +39,62,177,219,6,133,87,190,242,149,29,80,236,119,252,45, +111,121,75,231,113,0,1,207,130,215,240,133,47,124,97,30, +52,174,11,46,31,248,192,7,230,189,9,249,28,100,203,200, +0,137,13,42,49,254,136,245,184,234,57,70,109,11,28,94, +121,229,149,205,89,103,157,213,28,117,212,81,205,59,223,249, +206,230,13,111,120,67,243,234,87,191,186,3,193,115,158,243, +156,46,102,160,165,103,176,128,192,19,96,192,140,62,96,176, +143,209,191,236,101,47,107,94,247,186,215,117,158,0,56,232, +106,28,123,236,177,205,43,94,241,138,206,179,120,251,219,223, +222,5,40,121,16,96,2,52,239,121,207,123,186,32,37,239, +194,61,172,187,182,245,167,60,229,41,29,36,158,247,188,231, +53,95,254,242,151,187,231,24,100,203,201,0,137,13,42,0, +192,59,176,36,214,127,250,211,159,118,158,193,167,63,253,233, +174,37,127,253,235,95,223,188,252,229,47,111,158,255,252,231, +55,207,120,198,51,154,167,62,245,169,205,19,158,240,132,121, +195,183,212,218,199,88,65,1,40,226,17,128,0,120,24,125, +112,61,70,47,157,174,194,37,151,92,50,111,244,224,192,19, +225,65,216,22,99,224,137,184,14,176,232,142,184,246,147,158, +244,164,238,126,212,181,62,241,137,79,116,113,12,247,116,92, +90,176,17,255,24,100,203,201,0,137,85,150,24,107,185,110, +89,26,111,246,199,205,79,122,203,50,125,153,46,195,136,70, +16,226,33,80,251,44,25,233,199,62,246,177,206,96,181,234, +0,192,128,181,236,1,0,35,231,21,4,6,233,26,216,199, +152,159,252,228,39,119,233,197,11,116,5,28,7,145,15,127, +248,195,93,76,194,245,108,243,12,206,63,255,252,206,160,239, +127,255,251,119,70,253,238,119,191,187,187,39,227,230,45,48, +240,120,22,238,1,46,98,15,96,96,123,143,61,246,232,242, +172,171,1,26,186,26,151,93,118,89,243,254,247,191,191,187, +135,235,184,223,118,219,109,215,129,206,115,18,203,120,22,214, +179,127,144,165,203,0,137,53,32,169,188,81,6,206,184,99, +216,233,99,199,200,29,163,214,65,33,67,137,63,254,241,143, +187,62,249,13,55,220,208,124,247,187,223,109,46,191,252,242, +230,156,115,206,233,140,86,191,158,91,206,32,31,248,192,7, +54,15,125,232,67,187,245,104,90,106,198,207,232,24,109,64, +193,112,157,107,159,99,135,28,114,72,115,208,65,7,117,70, +9,12,130,146,103,159,125,118,7,139,191,249,155,191,105,182, +223,126,251,46,96,233,220,135,60,228,33,205,223,255,253,223, +119,70,13,42,185,142,243,120,39,89,127,205,107,94,211,156, +114,202,41,221,210,62,198,110,36,4,196,116,37,228,239,93, +239,122,87,55,28,10,50,15,120,192,3,230,61,13,208,2, +21,121,147,86,160,84,188,68,153,40,179,148,213,32,155,38, +3,36,214,128,168,200,153,135,16,79,32,80,176,79,55,192, +82,165,207,80,226,181,215,94,219,92,116,209,69,157,234,135, +235,34,196,43,120,238,115,159,219,25,240,125,238,115,159,206, +43,136,161,106,145,41,227,5,0,134,199,208,24,110,186,8, +12,89,140,224,37,47,121,73,7,12,93,2,215,62,238,184, +227,230,251,254,160,240,153,207,124,166,51,74,192,1,17,221, +3,199,93,95,112,145,33,139,17,136,39,128,207,139,94,244, +162,110,100,195,62,121,219,97,135,29,186,121,17,239,120,199, +59,186,237,23,190,240,133,221,53,5,61,93,7,108,164,73, +122,121,3,3,247,164,242,11,46,206,231,113,184,175,231,113, +223,255,252,207,255,108,190,247,189,239,205,123,83,202,145,100, +125,0,198,242,100,128,196,42,75,89,113,85,234,116,33,120, +5,223,250,214,183,154,175,127,253,235,157,171,126,198,25,103, +116,45,237,209,71,31,221,185,216,25,70,228,122,115,225,205, +43,0,131,76,48,98,52,214,181,180,140,204,54,67,99,68, +206,149,134,161,1,202,145,71,30,217,236,190,251,238,29,80, +28,23,160,4,2,219,224,162,245,126,239,123,223,219,25,47, +40,136,25,48,234,196,8,128,67,240,82,76,65,23,130,241, +238,188,243,206,205,103,63,251,217,174,27,194,120,25,242,87, +190,242,149,174,219,32,63,2,148,60,28,215,113,207,191,251, +187,191,235,242,227,153,114,13,233,4,71,121,38,224,5,88, +96,117,232,161,135,118,121,241,12,2,169,39,157,116,82,119, +12,172,0,68,254,60,131,114,85,150,202,182,212,65,150,39, +3,36,86,89,84,218,128,1,36,120,10,198,251,13,231,237, +186,235,174,93,171,200,45,215,37,208,69,184,223,253,238,215, +45,255,225,31,254,161,107,177,25,4,101,168,148,161,48,74, +6,196,19,96,132,60,3,70,197,224,119,218,105,167,206,88, +3,10,70,206,240,196,8,164,7,27,129,196,204,75,96,204, +140,149,177,139,15,48,96,231,128,10,112,216,150,63,163,15, +12,19,40,156,195,104,79,61,245,212,238,254,60,23,215,112, +140,103,193,224,229,93,158,92,87,90,198,109,34,149,0,167, +231,118,93,199,121,49,98,39,186,19,174,177,239,190,251,54, +239,123,223,251,230,71,62,92,11,160,156,15,44,158,31,24, +129,69,55,35,224,45,227,18,131,44,79,6,72,172,1,9, +32,168,138,205,80,180,172,127,251,183,127,219,25,54,143,128, +65,88,106,221,77,75,230,21,48,154,140,62,48,112,45,49, +195,21,225,103,84,254,13,157,23,112,238,185,231,118,45,178, +107,1,138,185,12,140,211,249,174,197,192,24,36,227,74,76, +2,76,24,181,117,6,105,122,52,112,137,21,72,195,80,93, +215,49,219,60,0,93,5,80,0,17,160,144,150,17,83,192, +1,3,195,167,32,228,60,198,45,118,113,240,193,7,119,105, +128,129,103,96,91,126,228,85,90,93,25,231,131,26,0,2, +129,180,60,25,219,233,202,196,187,113,92,158,190,250,213,175, +118,222,4,85,182,0,49,116,55,150,47,3,36,86,89,226, +73,168,196,98,13,2,110,123,239,189,119,23,152,3,2,80, +136,87,160,21,62,236,176,195,58,99,176,159,231,112,226,137, +39,118,129,58,6,126,239,123,223,187,115,231,185,223,140,138, +87,192,235,96,104,160,225,122,60,16,134,175,155,145,126,61, +96,232,114,188,241,141,111,236,182,25,172,201,74,134,37,121, +1,90,125,243,34,116,115,228,129,241,2,150,248,135,107,184, +23,224,128,2,104,1,128,123,104,205,229,5,168,24,179,249, +17,188,24,158,77,224,2,26,158,215,53,228,15,28,120,20, +32,192,216,1,199,243,138,145,216,231,186,210,131,139,103,144, +95,35,30,94,250,74,80,19,40,228,7,56,148,39,47,34, +112,24,0,177,124,25,32,177,138,82,2,66,55,67,12,66, +87,67,139,172,91,1,14,60,8,70,105,201,32,24,47,215, +158,17,220,238,118,183,235,186,13,250,255,182,121,30,160,192, +72,24,156,244,206,101,96,134,31,25,24,176,24,65,240,18, +149,150,29,92,116,23,116,13,14,60,240,192,238,156,123,222, +243,158,29,88,0,199,181,24,51,40,48,108,70,8,56,210, +1,130,192,33,47,194,181,117,89,4,82,193,1,20,24,181, +46,136,252,62,246,177,255,214,122,50,127,215,122,39,175,104, +33,176,93,123,141,167,182,215,122,92,155,239,71,118,247,160, +0,97,201,232,117,43,156,111,31,207,194,40,141,121,27,242, +1,88,202,225,249,207,23,212,252,215,22,152,15,111,94,250, +210,151,180,249,51,3,243,177,237,53,120,70,79,234,238,113, +201,37,23,181,144,48,12,108,180,200,40,209,240,134,232,114, +101,128,196,42,74,32,161,165,243,206,193,85,87,93,213,189, +205,168,79,174,171,192,91,208,146,51,12,0,0,5,70,195, +72,25,59,112,128,137,52,140,157,242,2,24,24,117,30,163, +214,53,240,30,133,235,10,110,74,247,169,79,125,170,107,217, +157,235,26,160,194,19,160,137,105,100,216,210,18,32,4,51, +13,127,50,94,10,42,2,171,0,196,219,144,150,65,235,166, +0,143,60,7,32,219,109,247,204,118,157,39,240,248,214,3, +120,118,107,224,207,237,140,249,101,47,123,105,247,218,183,184, +3,143,193,243,9,206,26,198,229,181,128,145,123,9,124,58, +206,115,209,109,178,124,220,227,30,219,166,127,66,7,27,215, +126,209,139,94,208,45,183,221,214,196,175,39,119,215,223,115, +207,221,59,48,220,124,179,216,132,46,7,72,12,222,196,114, +100,128,196,42,10,72,36,2,111,152,19,36,24,11,183,217, +240,37,8,104,197,1,129,135,96,157,33,50,22,198,67,117, +21,0,224,136,35,142,232,160,32,141,119,40,188,105,201,187, +48,242,1,12,186,6,12,221,62,80,16,51,224,214,107,185, +93,135,183,161,5,23,223,112,15,199,76,86,226,9,72,3, +34,96,195,205,231,41,240,54,128,140,39,35,45,112,233,202, +0,144,24,1,3,7,40,121,61,224,128,253,219,214,127,199, +22,28,79,107,239,243,162,54,111,23,180,221,131,47,116,70, +204,11,208,125,0,10,112,1,27,249,205,208,39,24,88,234, +122,0,15,117,109,215,61,248,224,3,219,178,218,185,131,154, +115,141,2,25,49,145,6,108,164,3,24,207,241,171,95,205, +197,38,6,89,190,12,144,88,69,41,33,193,147,48,75,241, +227,31,255,120,215,221,16,80,20,188,76,76,66,139,207,8, +117,3,76,146,210,122,107,81,65,128,145,9,118,50,168,123, +220,227,30,221,126,30,1,227,118,46,200,48,26,125,120,70, +3,10,140,219,75,83,160,192,0,141,102,152,167,0,4,206, +189,239,125,239,219,193,138,103,224,28,247,6,42,215,1,27, +215,2,1,199,228,197,59,28,96,161,75,96,232,211,228,45, +94,4,99,254,220,231,206,106,33,112,116,215,202,63,236,97, +255,208,166,223,161,245,12,118,109,143,61,191,125,174,199,116, +215,150,150,10,102,186,63,67,55,157,59,163,42,60,9,19, +182,128,140,241,131,210,101,151,93,218,28,117,212,145,93,158, +128,4,40,148,207,211,159,254,140,246,156,109,71,30,204,118, +93,217,252,236,103,55,182,229,61,87,230,131,44,79,6,72, +172,162,4,18,98,18,32,241,157,239,124,167,139,13,232,231, +243,8,24,170,22,156,135,192,208,181,220,246,25,126,100,212, +246,129,73,140,12,36,24,188,214,92,215,130,247,160,149,5, +11,221,15,239,58,136,35,240,80,24,183,126,189,96,165,235, +152,188,164,251,193,200,24,165,123,106,213,25,57,32,48,54, +251,25,174,24,3,111,193,53,228,69,48,210,126,247,146,15, +1,79,224,2,13,249,179,111,251,237,95,213,2,224,89,109, +154,127,107,243,103,186,246,227,91,176,188,184,121,246,179,183, +235,174,239,62,98,36,32,1,98,226,14,223,248,198,55,186, +235,6,76,188,37,240,145,23,192,178,116,12,12,30,247,184, +199,183,64,124,84,11,151,109,219,231,16,247,120,78,123,204, +75,103,79,108,94,243,154,215,181,222,203,197,109,183,110,225, +93,149,65,150,46,3,36,86,81,106,72,120,219,242,243,159, +255,124,55,68,169,242,223,229,46,119,233,60,9,192,160,130, +144,38,51,49,34,173,102,220,113,198,165,197,103,88,142,241, +30,78,62,249,228,182,5,255,92,231,129,48,118,105,12,97, +130,132,107,233,114,48,98,45,54,35,227,21,0,12,176,104, +189,25,32,21,131,48,162,194,144,221,207,53,184,245,230,111, +128,130,251,129,26,111,66,158,121,63,206,211,218,51,120,215, +127,242,147,159,212,110,63,179,11,52,138,69,232,114,0,6, +125,241,139,95,216,165,115,14,240,128,133,107,2,151,209,9, +221,32,128,112,111,35,29,201,87,186,20,158,89,58,207,178, +221,118,207,106,14,58,232,224,230,204,51,63,219,94,231,69, +157,55,241,212,167,62,173,211,163,143,254,72,115,211,77,102, +180,14,93,142,229,202,0,137,85,148,178,187,97,126,132,225, +58,173,178,247,34,24,204,95,255,245,95,119,144,96,32,60, +10,235,188,0,173,191,104,63,195,183,237,184,185,17,186,10, +210,241,56,184,227,186,11,90,123,94,129,116,90,116,94,133, +152,3,32,48,72,247,98,240,246,51,72,144,2,2,80,16, +27,48,194,33,144,200,144,65,10,116,196,36,128,36,1,84, +231,74,207,80,193,65,60,65,122,234,154,186,52,238,245,162, +23,189,176,61,246,156,118,249,130,14,20,130,153,188,9,215, +10,32,226,181,0,23,88,128,26,15,7,40,120,79,160,101, +40,214,61,60,155,96,170,184,137,116,210,203,27,96,202,139, +115,44,61,171,17,160,171,174,186,122,136,75,108,130,12,144, +88,101,41,189,9,193,75,163,5,130,120,220,126,193,75,93, +9,134,9,4,60,4,251,24,166,224,36,72,128,2,239,66, +43,59,215,106,63,185,75,7,12,249,214,3,47,129,241,234, +155,251,110,100,188,2,199,65,201,139,83,186,40,186,6,60, +9,19,169,24,33,15,196,126,235,140,141,50,68,198,233,26, +20,0,28,103,232,214,179,204,126,134,159,253,244,121,207,115, +206,243,186,81,141,23,191,248,69,157,225,39,141,235,59,7, +20,24,189,244,0,112,204,49,199,116,128,3,37,207,13,136, +238,237,153,237,23,7,1,4,249,82,30,158,23,100,236,3, +156,156,251,137,79,156,212,141,36,129,114,202,190,156,137,73, +7,89,44,3,36,214,128,128,132,202,10,18,223,252,230,55, +187,128,34,99,101,164,188,2,134,201,32,40,119,254,174,119, +189,107,103,8,49,8,208,96,100,130,123,160,160,27,192,72, +116,11,196,33,128,67,48,211,204,69,211,156,181,182,188,146, +123,221,235,94,93,75,207,48,165,1,14,173,46,248,48,66, +134,197,75,0,31,219,210,101,73,75,227,167,140,125,206,99, +152,51,254,120,7,165,230,88,212,182,115,203,125,148,97,123, +62,49,8,241,13,247,210,181,2,173,120,8,210,120,78,0, +116,220,18,20,60,31,79,75,55,196,51,108,183,157,110,199, +147,155,189,246,122,75,243,237,111,95,219,65,34,80,8,48, +252,6,131,151,209,47,3,36,214,128,4,18,38,84,121,61, +90,44,193,231,226,25,133,161,70,16,16,71,96,196,148,241, +48,0,163,17,140,218,54,175,192,219,160,130,138,12,251,246, +183,191,125,23,39,48,157,154,145,11,244,241,20,2,16,231, +185,62,35,98,116,192,64,173,51,182,108,131,2,35,102,132, +53,24,74,195,143,50,112,121,137,130,80,12,223,122,173,57, +150,110,133,115,108,51,118,30,20,175,72,126,61,131,252,88, +154,12,150,55,85,165,245,204,87,93,117,101,219,13,217,183, +205,255,211,219,52,79,107,190,250,213,47,55,239,125,239,187, +219,235,60,179,205,247,115,58,72,208,51,207,60,163,5,195, +194,219,182,145,193,147,152,44,3,36,86,89,210,154,81,113, +137,31,254,240,135,221,108,72,113,1,6,33,120,41,22,160, +5,229,73,36,120,201,32,205,171,96,184,166,95,139,95,196, +216,1,64,90,195,161,90,91,202,21,103,252,186,18,0,100, +95,226,6,206,19,4,140,33,218,167,165,102,168,214,107,207, +161,134,67,12,157,209,50,114,198,94,106,223,190,114,191,174, +21,117,190,235,1,6,111,192,48,173,123,234,38,25,49,241, +254,9,104,9,164,26,9,178,45,223,158,119,223,125,247,105, +118,219,109,151,14,18,15,126,240,131,90,47,236,239,91,184, +60,190,131,4,125,246,179,205,9,153,75,103,162,150,242,214, +197,35,241,34,6,72,244,203,0,137,85,22,21,51,149,52, +93,14,113,9,195,125,12,130,39,97,226,19,15,128,199,64, +237,51,251,146,225,235,138,48,18,158,134,117,70,14,6,188, +9,6,238,58,94,250,210,157,224,57,48,48,95,110,242,173, +6,80,8,88,226,45,56,199,125,169,245,64,195,49,96,88, +42,36,24,122,169,1,65,173,142,73,111,180,38,243,28,114, +142,253,238,45,32,171,155,4,112,202,129,119,161,59,246,146, +151,188,172,5,192,179,59,32,122,126,207,152,188,129,7,143, +67,240,22,236,228,95,185,216,239,61,143,148,55,25,32,49, +93,6,72,172,1,9,40,84,90,222,132,15,202,104,57,181, +164,226,18,153,54,173,219,193,163,200,58,67,18,181,7,9, +128,16,147,208,5,17,200,179,79,215,196,183,23,204,226,4, +3,115,44,4,52,25,14,99,97,56,212,177,120,14,12,41, +80,96,248,12,142,23,17,24,244,129,33,90,2,194,136,73, +173,1,129,231,138,6,12,217,47,93,174,97,9,108,25,153, +145,23,251,196,97,236,55,255,97,251,237,95,211,238,127,113, +187,255,229,221,240,39,125,233,75,95,214,61,207,71,62,114, +76,115,254,249,95,236,186,93,134,65,61,215,51,158,241,204, +110,68,199,203,116,202,61,202,179,24,32,209,47,3,36,214, +128,4,18,0,193,5,230,14,107,57,77,36,2,131,187,221, +237,110,93,11,170,197,100,248,150,134,39,13,5,26,157,208, +218,27,5,17,140,52,252,167,149,5,9,221,13,221,19,70, +206,107,208,183,215,10,51,102,70,200,200,25,19,229,57,4, +26,214,157,147,86,57,192,112,94,9,132,64,161,212,210,224, +107,24,100,93,55,33,154,110,69,246,151,105,29,179,46,63, +150,60,34,80,148,23,249,255,220,231,206,110,142,59,238,132, +214,248,5,84,159,223,28,120,224,65,205,177,199,30,215,30, +251,207,22,154,79,104,189,169,167,52,59,238,248,134,246,217, +5,54,61,199,11,155,167,61,237,25,237,179,61,191,155,181, +74,18,155,24,32,49,89,6,72,172,1,9,36,0,34,113, +9,239,99,120,141,154,97,27,133,0,128,116,57,128,194,8, +7,48,24,190,228,9,48,126,129,73,0,209,202,242,20,116, +57,184,224,96,195,184,192,196,126,32,241,95,25,140,61,93, +13,80,176,30,80,212,49,136,128,33,203,180,244,90,126,6, +157,238,67,182,3,128,104,9,5,93,157,82,147,38,219,129, +69,174,107,219,51,152,150,45,16,235,190,224,105,210,217,254, +251,31,208,66,194,20,113,31,195,53,177,76,119,201,60,141, +231,182,105,30,213,150,205,182,237,51,232,38,153,180,165,27, +245,188,14,160,60,44,2,14,1,197,0,137,126,25,32,177, +6,36,144,72,119,195,167,235,180,116,190,89,201,88,77,153, +54,58,161,75,1,18,96,1,16,246,5,4,92,112,199,245, +219,117,47,24,179,152,133,46,132,109,223,117,208,34,11,114, +234,82,248,184,11,99,183,47,158,68,188,7,221,137,120,17, +52,221,10,75,199,24,169,150,157,114,229,25,56,99,142,97, +215,64,16,27,200,82,250,168,237,90,3,138,168,235,201,23, +8,186,158,235,202,139,231,102,236,192,38,95,242,233,57,192, +203,104,7,88,217,7,46,166,159,235,98,72,231,57,149,139, +231,240,174,76,202,126,128,196,100,25,32,177,6,36,21,53, +173,154,41,218,230,75,48,100,134,1,6,226,18,137,71,36, +8,73,77,46,242,230,35,195,209,186,50,132,124,128,133,87, +193,227,96,20,182,25,148,243,121,28,246,49,42,251,156,203, +104,18,188,44,129,225,24,195,11,16,76,131,102,120,94,180, +50,12,107,14,131,88,72,233,9,88,47,1,225,60,93,32, +106,174,134,152,9,181,94,106,210,148,234,92,249,146,87,192, +3,54,121,117,125,96,242,185,126,19,196,220,199,49,65,78, +129,95,30,150,188,123,94,223,185,48,115,212,179,58,215,117, +196,56,76,210,138,4,20,131,44,150,1,18,107,64,202,214, +12,36,204,151,48,196,103,82,21,163,20,108,212,229,200,28, +9,30,3,96,220,253,238,119,239,166,104,251,70,165,150,211, +108,204,59,222,241,142,29,0,18,140,140,215,225,28,30,4, +67,113,204,251,22,140,139,87,192,104,210,18,51,34,64,96, +224,188,18,0,48,39,129,49,234,254,80,177,1,58,231,238, +239,223,13,169,50,230,18,12,147,224,224,121,92,151,90,47, +53,240,8,64,44,117,147,178,116,77,177,26,239,165,228,251, +159,96,224,255,56,44,61,183,50,114,109,207,4,152,9,124, +234,182,5,126,212,113,94,137,247,101,82,246,3,36,250,101, +128,196,26,145,0,34,144,80,121,205,26,100,160,186,18,102, +94,242,20,84,250,196,38,238,112,135,59,52,183,189,237,109, +59,136,48,2,173,163,9,72,150,140,61,80,96,100,98,16, +92,110,134,226,26,174,171,11,194,43,96,216,60,3,134,198, +224,121,8,160,96,91,43,28,40,112,227,121,14,214,29,147, +198,62,75,70,13,46,64,1,14,49,118,234,88,9,7,6, +159,245,82,107,88,228,154,174,199,160,5,95,117,193,188,175, +225,184,103,54,98,3,110,12,159,231,144,46,153,117,10,130, +60,12,51,55,189,9,11,28,137,185,152,72,230,213,252,0, +2,172,135,46,199,98,25,32,177,70,164,134,132,151,189,124, +10,142,81,48,116,144,200,103,231,65,2,56,244,203,1,65, +75,205,208,181,142,90,83,70,206,229,182,143,209,232,187,107, +245,25,60,227,210,245,224,126,83,198,195,200,125,195,2,56, +156,203,203,224,49,0,65,212,54,32,112,231,243,229,43,215, +179,228,77,184,78,9,136,62,8,128,3,207,167,84,251,106, +45,211,123,21,221,210,181,65,1,16,61,55,47,66,26,198, +174,59,2,46,210,1,139,231,230,109,128,9,15,73,92,67, +160,82,224,211,115,130,71,130,181,242,234,143,140,6,47,98, +178,12,144,88,35,18,64,104,201,50,202,225,79,115,125,160, +86,223,219,199,101,196,37,0,66,87,131,241,3,134,209,10, +198,64,85,122,241,10,45,39,99,103,28,60,5,26,35,98, +152,214,1,129,193,0,70,9,134,44,121,12,160,192,107,0, +134,192,33,94,5,48,4,22,70,28,128,36,198,93,26,185, +251,185,71,84,55,33,121,162,182,75,45,211,58,23,116,202, +124,131,133,116,238,153,238,12,47,72,28,6,8,0,130,7, +101,18,153,79,244,137,167,40,43,129,79,192,0,92,75,101, +68,205,157,240,127,38,41,255,65,22,203,134,135,68,92,204, +73,110,102,121,172,78,55,233,156,90,234,243,72,125,157,184, +188,36,235,254,133,74,220,64,107,167,5,21,91,224,34,83, +174,55,40,48,8,134,0,8,92,115,45,105,60,11,134,202, +144,210,98,199,16,25,167,150,95,215,130,2,131,109,224,176, +206,224,75,72,4,20,230,101,4,12,186,46,249,204,190,37, +79,197,117,221,199,125,221,147,230,126,81,49,142,40,47,129, +150,251,104,157,222,53,1,194,245,64,66,158,77,73,7,7, +219,60,37,249,182,95,25,128,167,249,33,186,86,148,231,0, +166,188,47,229,161,108,50,34,194,251,226,73,229,31,191,242, +27,228,247,201,111,83,255,126,27,73,54,36,36,166,25,104, +164,220,159,244,117,58,251,163,101,58,146,253,165,135,80,31, +183,95,197,180,174,139,161,162,234,38,112,139,205,184,100,136, +186,4,250,213,160,0,8,90,63,64,224,110,131,3,47,131, +97,216,167,223,46,184,7,20,192,194,176,104,140,54,6,235, +154,12,172,140,63,212,112,40,187,21,224,160,219,67,65,129, +23,1,12,62,132,91,170,107,186,31,163,46,141,28,8,220, +51,80,136,242,100,168,99,89,207,118,210,88,143,87,194,187, +16,79,224,21,216,6,8,207,172,27,34,22,3,8,202,193, +126,113,10,199,228,89,89,40,47,231,251,39,52,243,68,164, +81,150,60,11,229,232,147,123,126,143,252,198,134,163,243,155, +150,191,225,70,148,193,147,104,127,120,26,227,47,183,83,73, +250,182,147,182,47,93,89,169,114,188,76,159,239,89,130,129, +145,9,134,200,88,25,50,35,7,5,149,92,215,193,72,4, +195,136,123,44,32,169,21,148,102,18,36,120,18,129,67,9, +8,6,27,131,228,57,244,1,66,156,33,144,0,135,40,56, +68,65,2,20,64,44,202,240,156,27,64,228,94,192,145,37, +13,8,172,203,3,205,118,153,198,57,57,47,215,147,214,115, +1,166,110,130,231,102,248,158,17,24,229,195,127,144,4,32, +210,95,124,241,197,93,94,121,93,202,210,243,186,22,104,36, +136,169,172,61,163,96,113,126,71,191,31,80,100,59,191,241, +70,148,13,235,73,68,75,73,101,160,153,216,84,87,20,90, +182,42,89,218,199,43,40,225,32,248,232,79,113,253,147,84, +190,28,165,146,51,108,21,84,203,199,59,208,125,208,26,234, +59,3,3,23,56,174,178,74,204,45,166,130,109,20,44,24, +136,138,158,150,147,114,163,3,8,134,2,14,140,40,128,40, +141,147,23,17,64,148,49,136,116,49,128,171,207,123,136,7, +17,48,68,197,3,28,115,47,30,128,251,185,151,251,88,234, +202,148,106,127,52,176,200,177,108,203,111,60,31,75,207,149, +109,215,87,174,190,151,225,25,149,133,124,248,178,150,103,210, +197,240,13,13,121,1,78,199,117,75,204,92,181,4,13,101, +170,252,148,179,114,243,143,100,126,183,242,247,206,239,153,223, +121,35,202,208,221,24,85,134,84,8,203,122,127,189,94,138, +109,112,0,4,31,110,245,191,25,12,77,229,211,114,101,38, +100,250,196,250,203,150,182,193,193,104,4,5,134,84,220,180, +110,206,183,143,75,172,229,228,69,196,115,176,140,247,0,14, +12,161,28,89,232,3,68,12,145,97,242,34,202,17,140,12, +117,2,153,248,66,224,80,2,34,221,10,198,232,51,114,192, +16,245,118,41,5,132,26,18,238,9,72,81,70,28,181,45, +47,181,150,231,201,159,117,215,181,223,179,41,71,65,221,252, +5,129,81,30,115,36,148,23,0,131,36,0,131,130,242,86, +94,64,170,124,157,207,115,80,198,188,49,101,75,77,74,227, +229,165,113,32,125,191,249,70,147,13,13,137,24,120,233,45, +0,133,109,251,115,76,165,1,1,238,168,143,194,112,97,13, +177,49,172,180,80,2,139,90,46,154,63,217,5,7,21,148, +90,231,45,24,190,163,129,132,202,157,120,3,205,186,202,174, +53,4,134,140,247,103,204,223,54,67,0,11,144,136,23,145, +120,4,72,48,156,64,130,113,129,4,67,139,17,50,208,116, +49,226,69,128,3,77,247,34,158,3,45,187,21,1,68,192, +64,15,63,252,240,110,246,167,235,0,68,32,1,76,185,95, +9,37,106,155,150,208,136,130,3,32,200,59,207,193,115,120, +134,18,18,219,108,179,77,103,220,202,128,151,193,232,149,29, +111,67,26,229,32,31,186,116,98,60,32,170,236,228,247,186, +235,174,235,202,195,185,202,18,136,149,227,215,190,246,181,249, +122,17,47,66,29,176,190,81,101,195,67,66,75,65,84,2, +111,95,170,60,254,110,207,187,19,42,140,64,151,150,148,17, +10,142,121,251,146,154,42,109,38,31,56,88,250,158,129,161, +201,104,94,180,2,7,16,225,45,0,131,238,68,32,81,2, +66,5,143,199,16,229,6,235,94,36,14,1,16,105,17,193, +32,128,0,135,218,147,152,6,9,6,152,46,70,98,16,233, +98,164,155,81,122,15,37,28,74,64,0,67,20,32,168,244, +12,147,97,3,4,80,4,4,37,148,104,9,138,26,30,129, +133,109,121,76,23,196,117,129,194,146,183,224,217,64,205,179, +121,86,105,253,110,242,167,108,192,86,254,64,93,122,222,153, +223,10,220,149,49,207,34,16,86,254,62,250,235,221,25,117, +131,87,17,96,164,33,217,136,178,85,67,34,0,240,227,150, +63,176,31,255,251,223,255,126,55,146,224,59,144,102,35,114, +91,85,112,173,16,119,159,241,155,205,151,127,192,242,93,7, +149,139,6,14,188,5,48,0,15,203,128,33,222,3,207,1, +32,44,109,91,47,225,160,194,82,144,200,186,110,71,0,17, +111,2,32,82,145,65,34,90,118,51,104,233,69,48,24,207, +194,96,107,72,196,248,192,33,90,6,42,65,34,221,138,218, +123,40,1,97,46,2,5,7,243,52,2,10,96,160,238,103, +25,195,183,12,152,104,64,17,104,148,251,114,78,128,6,12, +246,185,38,141,151,177,207,62,251,118,80,56,248,224,67,186, +242,120,193,11,158,223,230,229,131,237,243,188,183,245,46,94, +223,150,243,211,59,239,78,121,39,216,235,55,226,237,41,103, +229,101,63,16,3,181,109,245,66,163,97,196,73,189,81,143, +6,79,98,157,74,109,252,181,104,1,0,65,37,50,196,101, +10,174,126,44,67,96,52,90,17,173,190,55,35,193,128,230, +159,184,211,109,48,222,14,12,250,182,166,69,3,3,53,245, +55,30,67,64,65,77,118,226,61,68,3,10,222,3,47,34, +49,136,204,117,40,65,1,16,90,179,0,2,172,84,94,30, +68,42,56,56,104,5,117,53,74,72,8,188,213,144,136,171, +238,89,99,180,140,14,36,24,163,174,69,188,135,116,49,210, +205,40,1,17,32,88,150,128,8,28,162,202,86,128,54,45, +191,251,196,200,75,64,148,112,162,153,139,65,109,7,34,212, +185,209,92,47,93,166,87,190,242,213,205,19,254,227,73,237, +177,189,219,103,124,115,231,41,60,230,49,143,110,127,7,127, +130,252,212,118,251,245,109,249,24,14,221,182,45,199,23,180, +208,156,251,195,34,30,24,245,130,151,47,147,43,79,32,86, +31,252,14,254,202,16,32,128,1,32,6,72,108,197,2,16, +62,14,235,135,103,176,12,222,27,144,102,46,250,107,127,127, +104,27,24,240,14,28,207,146,242,22,2,8,99,243,75,129, +68,186,24,180,244,38,210,197,168,33,33,111,1,132,150,76, +235,22,64,164,171,17,47,162,28,242,76,69,7,137,116,49, +24,73,233,69,128,68,224,160,229,101,96,105,165,41,131,172, +131,148,233,94,100,201,131,0,134,120,13,129,3,5,5,234, +109,213,40,195,115,46,48,5,14,148,193,39,48,90,107,98, +33,217,46,161,81,123,22,1,5,221,105,167,55,54,255,241, +248,39,182,101,249,140,230,85,175,122,117,7,196,93,118,121, +99,91,46,175,108,159,123,247,54,223,7,119,235,59,239,188, +83,123,173,247,180,30,227,103,186,103,4,83,191,135,103,48, +89,13,36,0,66,25,43,127,229,200,211,4,134,52,68,129, +197,70,148,173,22,18,126,80,158,132,33,49,111,80,6,10, +137,39,128,131,25,140,241,22,74,32,4,10,81,112,136,110, +10,36,84,200,18,18,9,88,150,30,68,0,81,14,123,2, +68,32,193,155,8,36,50,236,25,239,33,10,22,1,133,110, +70,186,24,0,145,110,6,163,139,177,150,241,7,198,19,111, +130,145,71,1,130,151,96,73,227,61,148,112,208,143,167,246, +101,201,96,221,143,113,151,247,44,189,151,210,139,161,217,46, +161,17,88,196,195,8,52,0,227,109,111,123,71,123,31,93, +155,183,54,199,31,127,98,7,176,183,191,253,109,173,103,181, +67,155,175,15,181,221,134,203,218,60,188,173,53,254,151,116, +229,237,124,101,2,172,126,43,117,192,239,1,202,202,22,36, +120,20,126,19,177,40,112,80,135,2,10,186,17,101,171,132, +132,31,51,174,162,152,131,143,182,232,70,168,20,241,22,226, +61,100,93,204,1,52,28,175,65,17,56,204,130,68,186,26, +137,73,36,14,81,66,2,32,74,72,4,16,9,90,170,176, +101,176,178,246,36,180,122,32,161,171,65,211,213,0,8,17, +125,222,3,87,63,93,141,196,7,236,3,11,134,11,28,101, +108,130,241,48,74,176,96,172,150,186,20,96,0,10,140,79, +44,194,190,73,144,48,124,72,185,239,38,52,185,54,141,129, +151,128,8,20,162,64,69,179,61,9,22,53,40,222,251,222, +125,58,64,120,118,175,213,139,45,189,235,93,239,108,203,241, +89,237,239,241,152,246,153,247,108,225,57,247,77,10,240,246, +251,62,249,201,79,233,202,79,153,241,228,148,125,224,155,242, +246,59,128,174,58,4,18,234,145,192,229,70,149,173,6,18, +192,16,151,208,143,27,87,209,223,206,51,202,64,0,40,120, +18,222,168,76,87,3,24,226,69,240,40,74,207,98,75,64, +66,44,34,241,136,0,162,15,18,181,23,145,74,155,81,141, +196,34,50,63,34,35,27,42,180,33,64,170,219,65,1,35, +195,144,37,20,180,192,140,217,7,115,141,224,120,3,146,107, +109,105,120,215,212,112,159,244,7,1,6,41,62,1,2,186, +17,128,16,64,4,18,241,34,192,65,26,215,22,4,230,145, +232,18,212,30,68,9,133,168,180,52,219,129,5,45,65,1, +18,165,39,177,215,94,111,111,159,115,215,249,242,87,94,219, +111,255,234,22,26,175,107,127,27,255,120,246,240,110,159,242, +80,70,175,126,245,246,109,153,236,209,30,127,67,87,46,202, +19,56,141,104,37,54,1,24,212,239,229,251,161,241,32,232, +70,149,173,34,112,73,67,123,228,167,25,178,242,38,165,31, +221,127,85,128,4,141,135,0,6,129,71,96,17,64,244,197, +35,102,65,34,93,141,0,34,93,141,18,18,1,68,130,150, +53,36,74,79,34,10,18,241,32,64,34,170,53,44,21,36, +196,35,184,212,160,192,240,180,234,62,223,38,98,239,67,54, +190,159,9,6,0,1,20,12,60,93,11,158,2,35,191,240, +194,11,187,121,33,190,179,9,6,233,106,240,40,74,56,148, +222,3,64,80,251,245,243,165,227,189,212,113,15,94,74,173, +153,139,65,109,7,26,1,71,188,139,120,20,241,38,44,41, +80,42,79,229,150,174,149,37,56,130,154,235,238,186,235,155, +218,50,226,113,156,210,129,144,167,197,59,243,155,40,51,233, +121,108,129,51,80,131,156,57,50,101,61,219,136,178,174,33, +81,122,14,1,132,31,213,210,255,87,216,175,133,84,9,4, +43,211,181,72,76,194,54,16,80,80,176,93,194,161,175,219, +1,14,209,0,130,242,34,64,162,207,139,8,40,2,9,222, +4,64,208,0,162,134,68,25,147,0,185,4,43,227,73,196, +123,208,34,50,24,6,206,229,214,189,210,50,250,100,188,247, +67,192,192,107,212,90,119,198,194,128,226,85,48,96,6,200, +48,65,194,210,104,6,227,100,232,102,144,94,122,233,165,221, +181,117,55,2,129,26,14,70,52,168,73,75,217,62,241,196, +19,59,35,115,15,134,30,227,151,7,247,114,31,251,50,130, +66,237,207,113,199,172,71,157,27,80,200,51,88,216,207,163, +0,10,32,114,13,224,115,76,185,232,134,0,228,89,103,125, +174,93,223,169,217,118,91,127,30,252,228,214,251,216,165,45, +223,23,117,229,233,55,213,21,245,27,42,107,229,171,236,45, +1,92,224,59,117,108,163,202,186,134,4,48,68,193,193,104, +6,56,88,50,18,106,130,148,202,101,206,3,64,196,107,160, +188,136,18,12,101,183,35,240,0,135,116,53,168,202,196,131, +176,206,107,176,13,24,60,9,219,192,0,24,20,24,196,33, +202,209,13,45,30,88,168,128,214,245,127,129,194,118,2,151, +150,90,181,116,55,84,88,160,208,189,208,237,224,41,156,122, +234,169,157,1,240,148,12,241,82,127,174,11,6,192,104,184, +87,119,3,32,19,188,76,203,11,42,49,222,116,1,98,164, +128,96,157,81,122,47,130,215,225,123,11,188,8,30,68,217, +173,160,96,66,3,10,234,120,160,228,222,49,120,215,52,90, +2,12,174,231,254,60,20,247,179,47,42,141,99,214,3,12, +144,18,15,145,95,251,93,215,176,54,40,0,135,128,45,48, +136,75,216,182,238,183,246,89,125,67,165,175,126,245,14,173, +55,246,170,246,119,123,116,251,59,63,188,45,227,231,117,251, +253,119,199,203,94,246,138,22,186,111,232,160,150,50,6,10, +191,1,8,165,225,25,60,137,117,40,198,178,41,40,112,143, +65,193,212,233,76,159,166,94,176,82,233,64,34,221,141,50, +88,25,72,80,144,0,5,235,142,101,27,16,2,138,120,21, +192,16,24,4,28,214,211,205,0,12,219,0,1,14,25,217, +0,14,209,115,222,132,116,214,29,3,10,149,51,179,21,185, +194,226,19,150,186,27,64,161,203,97,29,0,196,90,24,140, +138,205,163,224,114,243,48,24,28,112,232,183,27,6,229,242, +207,141,4,204,125,180,22,28,120,17,233,2,48,62,222,129, +50,98,200,182,163,140,93,75,106,26,58,32,232,66,148,144, +176,30,72,216,103,201,155,0,19,75,32,200,189,0,34,30, +137,251,218,118,61,219,242,12,84,210,75,3,12,102,72,186, +158,99,60,3,96,16,35,224,161,120,6,229,6,20,166,91, +91,42,31,80,87,254,202,193,125,25,249,19,158,240,196,22, +8,207,109,33,178,75,91,78,190,117,225,219,26,187,180,207, +123,104,123,31,127,228,35,24,252,170,22,86,71,180,221,171, +47,119,101,165,220,65,153,71,167,92,61,191,122,182,81,101, +93,67,194,244,217,128,65,240,77,159,27,20,184,217,62,74, +162,31,238,47,237,84,90,35,28,186,24,1,67,188,9,235, +137,69,148,170,194,129,2,175,2,52,44,129,193,62,64,224, +57,72,99,95,128,144,224,37,227,7,3,128,136,23,1,10, +212,126,94,131,24,130,224,34,99,97,96,42,191,22,219,135, +94,197,2,180,154,42,43,40,80,174,177,138,171,155,1,2, +12,141,49,24,225,176,143,199,32,64,167,117,245,109,76,128, +200,68,42,21,159,161,105,181,197,40,120,33,134,248,24,29, +216,232,82,240,68,192,135,49,50,212,140,98,240,38,226,153, +216,7,14,125,144,176,77,193,193,126,247,177,205,160,181,236, +158,147,193,131,17,24,184,118,98,29,210,203,183,115,221,219, +115,248,170,148,174,19,112,121,22,101,8,160,241,124,64,2, +240,121,91,202,145,167,164,60,120,94,188,8,207,108,159,216, +195,7,62,176,127,251,188,103,182,203,3,154,93,118,217,173, +243,28,78,59,237,244,246,158,159,107,203,244,63,219,174,222, +115,59,143,131,55,225,223,191,192,90,153,243,234,168,50,73, +32,124,35,202,186,134,132,174,132,10,172,15,14,12,140,71, +31,28,249,5,223,244,197,189,78,12,18,42,148,17,141,192, +33,128,232,131,68,226,16,214,1,130,23,1,12,128,0,12, +60,7,32,8,48,128,193,18,44,104,186,30,241,30,2,13, +219,60,3,31,160,165,12,144,225,49,28,70,172,245,83,225, +173,131,28,35,99,4,42,44,24,88,103,144,12,154,33,1, +141,57,17,250,222,148,247,224,203,209,12,205,117,156,239,245, +103,48,0,2,64,112,156,119,96,86,33,32,201,7,0,56, +78,149,85,140,88,75,207,203,240,183,131,140,216,126,215,4, +137,120,20,12,91,158,210,213,208,178,83,144,112,45,48,11, +28,0,65,215,65,151,192,239,194,139,96,244,60,33,255,164, +46,31,242,174,156,65,1,224,0,193,115,41,59,101,104,56, +19,112,120,39,59,236,96,180,98,183,238,154,246,41,55,96, +112,45,32,116,109,101,180,227,142,175,111,161,115,74,123,173, +253,218,237,29,219,223,143,247,247,239,173,167,241,178,182,91, +241,226,214,99,120,81,123,79,221,198,127,235,238,163,171,1, +200,137,11,129,176,122,181,81,101,93,67,130,231,224,101,44, +222,130,202,111,232,238,139,95,252,98,215,146,234,159,115,89, +25,130,74,170,226,5,18,188,9,203,64,33,160,136,199,144, +46,135,253,233,90,56,158,110,71,210,1,134,109,105,172,131, +133,202,77,129,161,92,207,144,39,67,231,225,0,28,67,230, +85,80,45,163,86,75,0,147,155,172,178,95,121,229,149,157, +161,218,86,97,185,190,140,139,215,17,175,66,95,28,48,64, +194,243,250,120,174,110,5,47,66,127,29,64,25,50,163,103, +180,92,121,45,59,195,98,128,214,181,214,140,26,152,128,139, +161,6,8,206,3,25,101,235,252,62,72,4,16,128,66,179, +77,1,132,193,138,81,248,29,60,39,3,151,55,208,224,29, +232,10,130,169,242,0,14,207,4,178,90,244,116,129,156,163, +107,37,15,212,254,247,189,239,61,109,254,62,216,149,19,216, +233,118,40,67,80,145,55,222,149,50,243,187,251,237,24,188, +123,248,155,191,167,62,85,0,249,25,29,40,116,67,116,57, +94,252,226,151,182,229,50,247,189,78,101,46,189,248,144,165, +231,21,192,220,136,178,174,33,161,82,243,26,184,165,90,15, +46,52,55,85,139,164,242,50,48,149,157,209,48,84,163,26, +125,144,136,87,193,248,25,187,125,32,192,99,80,185,236,7, +130,164,113,45,253,85,110,45,79,192,125,185,164,186,22,1, +7,56,104,149,104,186,25,42,190,117,70,167,101,230,237,232, +70,72,35,38,1,4,128,161,162,171,164,226,9,60,36,198, +15,30,92,119,173,125,34,247,140,32,163,28,90,93,221,20, +207,109,155,139,206,152,140,80,0,142,109,229,160,101,119,29, +6,171,245,5,13,235,150,202,210,247,48,24,101,32,225,249, +180,252,202,154,193,131,0,3,164,32,16,72,240,30,172,103, +219,189,45,25,151,115,92,135,97,27,73,48,3,86,57,184, +175,99,98,45,12,17,176,2,33,94,128,223,15,76,236,3, +20,80,211,8,240,132,92,127,207,61,247,232,126,39,240,112, +12,24,197,36,64,71,89,243,34,148,161,178,124,222,243,158, +219,222,231,21,93,185,237,188,243,27,219,99,175,111,187,36, +123,183,245,229,212,198,204,205,87,188,226,149,93,188,226,220, +115,207,235,238,225,92,65,76,80,243,219,184,54,79,117,35, +202,186,134,4,183,91,132,95,197,6,134,84,98,45,33,163, +213,90,106,21,252,192,12,49,147,167,102,65,194,58,56,232, +54,232,166,168,136,12,143,33,48,112,158,11,55,94,43,171, +18,106,193,192,73,62,180,126,186,30,128,1,38,52,1,75, +75,251,121,55,42,53,35,0,10,173,155,202,200,211,224,33, +100,66,21,175,195,181,181,148,64,1,70,226,22,192,194,237, +78,87,67,203,203,104,228,139,91,15,30,192,160,251,162,59, +230,152,251,49,38,163,27,214,25,33,104,112,209,193,66,185, +241,198,226,121,49,234,64,86,215,68,151,67,107,61,9,18, +12,217,125,210,245,176,205,227,113,29,113,1,70,231,119,113, +47,158,143,231,114,174,115,44,193,196,125,120,29,174,45,15, +96,232,190,158,29,64,120,106,224,226,185,197,28,28,247,251, +1,143,242,147,198,243,165,43,230,249,223,242,150,133,119,86, +114,253,189,246,122,91,11,128,215,180,224,220,189,173,67,23, +181,207,244,145,110,244,195,168,199,191,254,235,35,187,238,29, +40,3,87,188,56,240,230,101,109,68,111,98,93,67,130,7, +193,56,85,50,6,11,10,42,191,10,161,18,130,3,119,150, +203,201,56,185,157,1,68,20,16,2,139,64,2,32,28,227, +61,164,91,161,245,229,50,171,140,1,11,143,33,129,80,215, +215,218,201,147,145,4,45,154,214,76,55,3,32,84,110,222, +133,116,90,106,239,148,232,198,56,7,120,228,21,28,204,147, +0,135,244,137,121,44,158,69,159,88,144,150,97,151,83,177, +45,25,33,227,166,60,10,233,169,253,254,46,208,126,208,96, +88,206,103,76,60,10,6,172,220,84,126,241,10,94,75,12, +27,100,29,179,206,72,117,91,204,195,0,14,0,0,130,82, +193,193,239,96,25,80,80,6,15,92,126,151,108,7,14,90, +102,235,202,128,97,3,133,188,74,39,255,119,185,203,93,186, +242,0,104,128,241,172,64,175,44,61,199,161,135,30,222,66, +110,159,78,247,217,231,253,237,125,14,235,150,182,247,219,111, +255,230,187,223,249,126,243,193,35,142,110,97,176,71,107,248, +175,104,143,237,215,130,238,147,237,181,65,98,135,230,78,119, +186,83,247,59,249,77,149,181,242,119,125,13,3,160,251,13, +2,12,191,163,223,21,176,51,81,111,163,200,186,134,132,184, +131,74,166,2,165,165,100,36,90,102,110,56,119,81,196,219, +15,109,162,19,72,168,0,211,32,65,129,33,222,68,214,25, +28,227,80,65,237,163,140,60,35,26,214,165,231,89,232,250, +104,129,181,68,42,97,98,19,241,40,164,209,13,112,158,22, +74,90,31,197,213,242,169,168,42,165,10,42,200,153,169,194, +142,73,7,38,158,77,32,147,209,120,70,253,117,94,132,86, +62,67,168,105,61,149,17,247,89,25,41,43,70,200,3,211, +109,17,207,73,76,199,62,16,96,176,224,160,107,32,189,117, +251,193,6,64,106,72,196,163,40,213,62,202,232,163,186,13, +188,32,235,224,230,185,121,99,238,199,187,0,84,191,135,103, +5,81,106,30,9,168,242,24,210,37,162,142,137,161,24,182, +220,123,111,175,154,239,211,141,94,156,123,238,249,109,61,248, +64,251,252,111,110,207,123,106,91,94,71,53,123,191,235,189, +173,103,181,71,243,236,103,61,191,121,200,67,254,161,45,243, +199,183,222,193,75,187,50,212,173,227,245,249,77,229,73,153, +42,111,170,193,241,155,139,73,216,150,22,40,120,115,27,109, +164,99,93,67,130,235,168,165,99,36,12,79,107,196,107,80, +209,180,198,126,216,76,86,98,204,25,2,157,6,9,75,158, +131,245,64,66,58,176,81,193,93,79,197,162,60,13,149,219, +181,41,16,137,99,128,131,174,137,238,135,86,16,24,116,119, +180,88,186,31,174,97,106,176,86,210,126,173,152,150,149,65, +107,33,25,80,32,97,201,229,53,15,128,7,161,59,227,154, +84,55,67,229,150,47,221,22,158,130,125,90,97,229,97,155, +81,115,217,197,27,4,53,197,45,4,118,227,214,51,56,94, +5,40,48,12,70,171,229,7,36,134,9,46,32,163,43,2, +14,129,68,64,16,237,131,131,116,20,188,168,107,187,174,178, +244,71,198,126,23,30,142,115,229,23,32,211,117,114,95,231, +90,242,116,168,109,64,1,63,96,59,252,240,15,118,80,48, +58,33,232,248,142,119,248,155,194,183,119,144,120,216,195,196, +149,30,217,94,243,133,109,89,237,220,2,245,245,109,125,0, +224,231,118,221,21,144,0,83,101,234,249,121,63,182,149,47, +40,228,111,13,212,35,191,167,223,74,119,80,119,70,23,110, +35,201,186,134,4,55,88,69,214,106,170,92,241,26,192,65, +5,212,66,48,66,45,56,163,174,1,49,9,18,241,38,64, +128,218,231,154,42,13,163,5,145,4,53,3,6,75,192,224, +81,240,30,128,129,139,173,178,49,62,221,6,158,131,252,240, +42,184,173,98,7,214,181,80,174,203,56,180,174,140,0,24, +168,231,81,105,121,12,105,233,84,112,48,180,20,144,204,16, +38,67,231,69,49,184,76,191,86,54,90,93,198,201,192,64, +136,38,22,161,101,118,158,37,131,76,203,206,200,193,66,254, +65,134,39,224,26,242,200,88,3,1,203,18,22,37,40,28, +167,206,73,92,194,245,221,7,0,25,171,237,242,28,207,162, +251,5,254,224,225,121,28,3,80,93,32,207,172,252,45,189, +220,165,123,97,174,195,63,253,211,191,180,191,247,51,218,50, +125,83,107,200,239,237,130,144,130,145,123,238,249,150,206,211, +0,142,221,119,247,250,250,59,187,107,129,29,208,130,0,47, +141,151,196,99,1,4,245,194,239,2,90,234,145,125,233,142, +240,242,128,118,35,197,38,214,53,36,180,46,42,184,22,32, +243,8,16,159,155,10,12,90,237,24,47,131,6,137,89,158, +4,85,9,193,193,210,121,150,140,30,36,84,44,93,22,208, +1,7,134,239,30,150,212,189,108,3,133,251,171,228,220,108, +149,95,171,207,125,118,60,93,18,121,149,103,94,6,195,97, +64,140,132,129,123,30,80,160,60,9,96,96,104,158,53,10, +52,60,6,231,104,237,25,191,242,112,190,86,154,130,14,67, +160,142,107,57,41,15,12,16,24,159,37,101,156,90,125,0, +22,7,17,139,224,98,51,42,198,238,88,140,63,235,125,160, +40,33,97,93,28,196,189,117,95,64,11,0,228,129,71,32, +248,108,63,15,8,56,0,201,113,191,173,178,242,219,120,86, +249,119,29,191,133,114,244,62,134,9,82,188,9,112,0,4, +222,197,190,251,238,215,62,179,175,90,237,221,94,231,184,230, +188,243,190,216,165,51,95,2,236,1,209,179,2,47,175,46, +239,110,128,128,178,86,119,252,198,238,109,95,32,225,119,114, +76,30,204,240,221,40,178,174,33,33,104,169,149,214,15,103, +68,49,54,21,136,145,234,2,104,217,169,138,150,160,84,9, +138,62,72,208,204,135,72,151,195,82,133,215,10,3,136,74, +149,235,131,131,123,171,112,206,11,52,120,8,64,161,98,50, +40,115,13,180,236,64,34,223,90,52,149,78,107,229,92,221, +12,215,201,92,143,140,118,24,205,72,124,37,235,60,39,173, +41,104,1,17,24,56,79,172,67,37,214,42,210,196,38,4, +94,243,222,134,37,47,71,58,80,144,15,121,203,12,85,96, +16,84,212,98,10,214,234,146,196,131,8,24,44,163,129,132, +101,9,135,28,183,14,136,96,163,219,35,173,109,101,39,47, +98,31,210,120,86,221,16,229,35,239,210,129,160,50,242,220, +226,78,96,226,28,96,60,226,136,15,53,39,157,116,114,91, +150,7,182,192,209,85,154,155,90,173,235,0,72,219,109,247, +172,174,236,61,235,155,222,180,123,219,181,120,93,247,59,251, +58,25,143,78,121,130,174,235,219,86,254,188,55,48,6,5, +106,27,40,120,130,126,27,191,149,244,202,121,163,200,186,134, +132,32,156,238,6,87,86,11,192,208,24,166,74,198,136,85, +66,198,205,168,1,193,60,137,218,155,232,235,110,80,231,242, +32,24,189,37,192,104,113,181,126,0,224,56,111,194,18,144, +180,130,230,62,232,227,74,47,15,241,38,116,123,228,75,197, +102,140,42,191,22,147,27,239,24,23,150,23,161,2,242,30, +120,4,90,121,45,152,238,6,3,81,161,129,80,165,182,174, +101,181,238,217,1,131,186,190,57,4,38,153,89,47,99,19, +32,34,255,130,144,210,0,129,169,236,98,35,222,113,49,73, +75,11,110,152,19,16,40,56,232,14,48,124,70,205,64,99, +244,150,241,44,250,224,144,107,196,3,113,28,24,51,244,107, +253,110,119,187,91,115,207,123,222,179,51,68,30,148,238,77, +98,74,0,230,222,210,58,230,154,226,40,174,47,95,64,113, +214,89,159,111,174,186,234,27,173,103,112,112,23,119,48,99, +210,27,158,202,22,28,197,23,64,199,239,173,92,53,38,202, +82,121,51,120,158,157,223,139,42,91,229,26,117,46,141,23, +81,122,19,128,226,55,220,40,178,174,33,161,5,84,177,184, +215,249,241,185,162,140,56,241,4,16,160,128,144,79,215,241, +38,74,143,34,160,136,23,193,200,121,15,150,32,67,165,81, +241,180,188,250,171,210,129,4,111,66,90,21,205,48,162,22, +152,59,235,24,143,66,171,3,20,150,60,28,45,18,152,112, +229,141,44,168,136,42,158,214,138,23,4,122,12,22,244,84, +74,149,219,181,85,82,96,48,196,170,165,12,48,120,17,0, +161,197,181,174,44,64,192,123,45,188,6,134,193,72,243,142, +139,123,138,123,232,170,185,151,86,150,235,205,181,183,148,119, +101,154,216,1,13,32,104,217,237,40,149,241,6,22,37,52, +202,99,188,3,229,144,110,77,92,126,121,144,198,181,229,203, +61,121,69,128,38,29,160,128,6,120,58,110,123,46,88,252, +184,182,76,94,219,66,208,115,206,77,172,226,37,40,103,191, +21,48,242,182,94,245,42,127,164,252,218,102,183,221,118,233, +212,55,47,5,185,121,97,142,43,95,112,162,0,145,46,94, +64,1,90,150,126,15,176,87,23,220,99,163,200,186,134,132, +190,172,74,164,197,100,64,60,9,148,15,36,84,154,62,72, +196,139,232,3,196,36,72,72,163,82,49,80,21,221,245,121, +17,42,43,111,67,107,200,109,230,214,107,145,197,28,64,75, +90,222,2,96,128,133,74,70,25,6,131,101,212,182,165,5, +2,6,204,8,25,143,237,64,68,69,118,14,184,152,210,173, +197,151,70,224,82,229,214,122,170,248,182,121,23,64,195,75, +112,142,86,87,215,65,92,68,89,201,35,119,220,146,199,194, +232,18,192,228,109,104,169,3,136,26,18,180,15,18,125,42, +157,244,126,35,144,112,45,247,116,125,251,50,164,42,254,97, +116,70,254,128,75,23,1,72,121,138,238,237,217,125,201,156, +119,6,134,206,101,220,119,187,219,61,58,80,152,65,233,147, +250,186,85,142,123,126,67,225,137,201,240,166,222,250,86,221, +175,61,219,227,187,180,101,190,123,151,206,53,128,54,75,117, +8,124,149,57,56,235,126,248,125,129,231,206,119,190,115,243, +151,127,249,151,205,127,255,239,255,189,249,189,223,251,189,174, +27,182,81,100,93,67,66,139,201,237,227,78,171,72,42,23, +163,100,144,129,68,96,192,107,0,9,221,134,128,161,212,105, +144,72,124,66,75,194,229,5,35,128,160,186,53,188,6,251, +24,46,23,214,253,229,75,107,200,112,129,139,242,20,44,193, +130,170,212,140,22,68,84,72,235,140,133,161,131,78,90,48, +21,215,186,150,149,50,54,211,164,25,158,231,230,73,240,24, +24,7,131,112,79,94,133,150,215,4,41,65,64,240,97,116, +90,88,202,203,224,250,3,68,20,40,102,65,130,129,6,20, +165,50,246,120,25,217,78,122,94,137,107,218,167,187,6,96, +60,2,199,128,87,153,121,46,199,129,202,87,196,148,63,72, +186,191,188,250,93,149,183,231,229,233,184,14,208,41,67,191, +63,24,2,80,98,46,130,156,158,83,153,2,70,84,25,81, +229,19,40,232,210,41,127,191,27,32,152,196,245,231,127,254, +231,205,239,254,238,239,54,191,253,219,191,221,252,225,31,254, +97,243,23,127,241,23,205,237,111,127,251,238,95,195,252,142, +222,54,222,40,178,174,33,193,160,16,157,43,170,53,208,226, +166,213,46,33,145,56,68,9,137,62,80,4,22,1,68,9, +9,235,186,50,222,99,224,138,2,67,186,27,150,188,151,0, +43,94,131,10,26,111,71,55,67,75,40,127,70,52,50,68, +43,207,2,148,150,32,99,4,197,245,85,90,93,40,45,26, +96,168,240,158,151,33,0,6,15,0,40,164,87,233,25,90, +186,28,210,166,37,149,95,176,160,160,5,12,140,139,81,89, +143,130,4,64,104,201,25,97,13,10,207,0,22,52,160,8, +24,2,132,122,59,231,88,119,13,176,112,111,112,3,3,199, +120,80,102,62,42,19,35,50,206,5,70,101,197,128,229,197, +249,0,38,207,20,32,116,85,168,188,251,253,3,8,208,160, +246,129,133,178,208,205,81,46,186,18,186,117,202,219,111,164, +62,136,139,240,16,254,224,15,254,160,249,31,255,227,127,52, +191,255,251,191,223,252,217,159,253,89,7,132,187,223,253,238, +221,4,60,96,119,174,235,107,36,4,45,117,231,54,138,172, +107,72,136,1,24,94,84,193,181,166,90,122,149,77,5,96, +220,140,29,28,18,131,8,36,2,141,178,203,17,237,131,132, +22,204,62,176,224,26,107,181,211,213,112,47,75,219,140,128, +97,232,175,170,228,142,129,23,227,55,18,147,174,133,86,17, +4,64,130,247,99,31,35,103,196,12,91,11,106,63,24,164, +165,99,60,230,44,232,86,164,239,204,96,140,72,104,133,93, +59,160,208,58,91,242,72,228,199,136,133,25,130,2,148,242, +200,120,24,43,205,48,104,186,26,53,40,168,115,24,116,128, +17,80,212,202,152,75,205,57,150,174,225,154,140,218,243,122, +46,30,135,188,0,164,103,148,23,207,233,254,233,254,56,223, +182,223,216,61,228,15,36,60,187,124,219,159,227,246,131,52, +40,40,35,96,6,118,191,13,99,191,199,61,238,209,220,246, +182,183,157,247,16,0,225,79,254,228,79,58,32,220,251,222, +247,238,234,135,198,69,254,120,44,242,38,223,26,34,241,47, +93,54,49,39,147,169,54,210,132,170,117,13,9,149,95,255, +223,15,169,53,53,66,192,248,140,42,212,144,0,135,124,86, +191,132,68,237,85,148,144,176,238,58,60,5,149,71,122,21, +94,133,84,241,116,53,128,0,16,156,163,130,50,88,149,76, +229,20,224,76,176,82,165,215,207,86,145,181,158,96,38,29, +215,85,158,25,144,23,144,196,25,164,7,10,202,147,208,95, +246,174,7,79,197,51,38,200,198,211,96,40,134,21,117,37, +24,144,152,9,239,65,247,194,247,52,84,106,48,181,14,168, +12,79,171,27,64,200,143,125,52,70,39,175,12,47,42,111, +202,56,26,195,143,214,176,160,246,75,39,125,206,79,217,1, +28,175,193,54,40,56,46,239,150,37,132,108,203,11,80,89, +150,247,6,161,131,15,62,168,189,206,94,29,28,65,85,121, +251,141,124,96,8,16,254,252,207,255,162,133,193,239,52,191, +249,155,191,213,122,9,191,221,220,250,214,127,210,220,241,142, +127,221,220,247,190,247,235,234,1,239,79,249,131,49,160,42, +19,215,87,134,202,10,24,148,155,153,170,188,7,96,200,39, +18,125,206,110,163,200,186,134,132,31,142,241,104,145,184,246, +90,39,149,133,97,6,18,1,68,9,137,210,131,8,24,226, +57,56,167,15,18,150,174,197,141,85,137,236,227,89,164,171, +97,93,235,163,98,49,114,219,60,6,154,128,165,120,129,74, +199,171,72,164,220,113,149,20,64,24,130,86,21,28,116,71, +116,51,60,143,86,83,252,133,97,233,138,0,137,254,180,251, +121,102,231,169,200,250,201,102,114,102,74,177,17,3,199,40, +3,72,95,29,204,172,123,150,218,125,167,128,225,156,210,179, +40,189,138,26,18,81,251,75,149,158,161,7,52,129,1,111, +41,48,114,61,233,164,9,48,0,194,249,130,159,96,160,123, +98,233,25,116,27,210,93,248,155,191,121,64,219,37,184,107, +23,67,248,211,63,253,211,206,51,248,141,223,248,141,78,173, +223,230,54,183,105,238,127,255,7,182,128,247,234,254,83,26, +223,181,124,213,171,182,111,189,172,221,186,114,144,23,117,71, +89,129,187,6,199,239,99,152,26,88,189,175,2,12,70,134, +192,33,223,81,29,222,221,88,71,98,158,1,23,208,168,130, +254,162,214,149,81,105,197,25,47,99,143,39,65,185,156,254, +197,43,195,160,64,17,72,68,107,88,240,32,24,60,149,150, +97,106,169,85,82,199,210,213,160,140,155,49,3,128,115,245, +101,65,32,158,5,207,3,16,156,239,133,42,93,4,231,241, +130,180,252,12,63,222,69,166,5,243,22,140,148,104,217,0, +65,154,0,194,18,48,120,26,98,16,42,62,144,36,56,103, +159,123,0,168,253,224,160,156,18,220,227,81,0,5,143,162, +140,79,212,160,96,184,129,68,173,140,60,106,187,78,107,27, +0,92,43,176,16,51,144,7,251,226,117,0,4,79,9,128, +5,90,65,68,235,46,32,12,208,190,65,33,118,0,6,183, +190,245,173,155,63,250,163,63,106,126,253,215,127,189,245,18, +126,179,3,130,192,162,57,23,126,35,101,174,251,162,92,128, +217,51,122,14,247,56,254,248,19,58,72,243,188,192,212,239, +197,19,227,149,106,116,116,201,204,31,241,215,3,60,6,96, +240,214,39,48,152,138,61,188,42,190,206,196,164,33,193,60, +145,114,149,91,95,92,43,174,146,48,94,134,202,91,72,247, +2,28,68,175,227,77,148,158,68,13,137,128,2,8,84,82, +144,176,173,165,55,5,26,0,28,3,35,221,27,199,65,128, +65,171,220,140,92,26,93,17,75,219,140,95,55,67,222,24, +140,74,201,48,244,121,181,102,2,118,250,211,90,78,16,49, +212,169,210,2,33,131,6,33,112,224,77,100,232,142,171,77, +51,162,145,88,4,5,10,215,3,9,173,55,136,36,176,199, +72,203,110,7,143,34,202,179,96,164,233,134,196,155,96,224, +165,150,48,160,210,212,105,109,231,90,174,155,180,238,9,16, +90,114,191,157,103,1,82,113,1,195,141,98,5,98,7,134, +27,197,15,12,61,254,207,255,249,63,187,145,6,176,184,227, +29,239,216,149,189,242,84,30,153,64,229,90,174,207,11,49, +196,10,174,188,52,1,100,163,42,222,113,225,109,41,123,141, +140,58,164,156,121,11,130,145,249,218,186,15,223,234,82,4, +14,27,245,251,150,100,93,67,2,237,205,27,208,42,168,144, +140,66,11,18,119,148,113,247,65,194,186,253,129,68,64,81, +2,162,134,4,13,20,84,54,177,2,235,12,222,146,71,96, +105,172,159,81,128,3,120,232,138,128,4,15,1,40,228,75, +76,66,23,4,212,140,58,0,1,215,86,229,21,136,84,169, +181,122,188,0,96,0,38,247,211,151,207,136,135,115,129,130, +6,18,12,37,67,161,150,206,7,137,185,121,2,115,222,4, +67,226,81,0,69,237,77,68,235,46,72,186,6,1,64,169, +129,129,117,105,162,210,210,18,52,174,107,221,61,120,65,2, +134,140,254,191,254,215,255,218,121,5,64,0,12,191,245,91, +191,213,252,183,255,246,223,186,245,191,250,171,191,234,230,72, +40,91,94,5,111,209,179,128,129,60,242,96,120,31,2,202, +241,14,64,85,247,75,89,214,48,240,206,69,13,130,120,10, +165,6,12,27,25,14,145,117,13,9,228,23,152,211,122,51, +42,173,165,86,69,139,205,64,25,46,0,148,144,208,221,224, +69,128,130,99,37,44,128,161,244,40,2,137,128,194,182,107, +136,59,48,72,215,1,9,64,112,92,23,134,17,104,193,192, +64,203,152,46,7,40,24,205,80,209,109,139,155,128,153,46, +5,195,101,228,140,31,76,168,110,9,175,8,244,236,7,11, +65,75,93,14,222,132,110,134,101,233,81,24,225,145,47,94, +68,32,161,203,1,20,165,71,81,131,130,55,65,193,162,140, +83,68,203,238,71,140,190,6,66,121,172,60,14,48,206,119, +93,247,176,110,191,37,40,24,118,252,227,63,254,227,230,118, +183,187,93,215,165,224,229,41,43,207,47,255,242,235,60,247, +208,45,225,33,240,186,64,1,16,196,16,116,25,120,148,26, +140,196,17,104,60,132,128,33,80,176,172,1,145,174,196,0, +134,197,178,238,33,97,214,162,138,162,53,225,66,107,105,5, +253,180,218,90,31,6,207,152,107,72,148,128,8,36,2,136, +64,162,246,38,172,187,142,46,2,227,17,227,208,197,0,3, +173,61,163,245,134,163,151,179,128,0,168,228,195,210,182,116, +0,192,69,206,124,9,10,22,209,204,188,4,15,207,33,190, +193,96,116,69,162,160,0,24,233,106,80,158,5,72,232,114, +4,20,137,75,68,3,138,210,163,40,227,19,241,42,64,34, +45,117,148,177,247,105,9,134,82,3,13,48,160,210,90,166, +139,195,243,80,206,202,3,216,1,193,126,233,192,32,241,137, +120,8,2,212,134,136,193,64,80,49,93,6,239,160,128,65, +186,10,241,18,242,135,58,165,151,80,123,12,37,20,74,173, +101,218,177,141,32,235,26,18,42,132,74,146,25,124,42,51, +3,98,176,90,112,173,124,13,9,35,28,9,90,70,75,80, +68,3,138,210,155,8,64,24,149,46,1,131,210,175,214,178, +81,177,4,149,155,113,240,36,116,53,128,1,40,2,137,120, +16,134,61,1,194,82,176,213,18,20,172,203,63,143,3,28, +64,194,40,7,56,48,38,112,0,194,120,18,209,120,19,60, +146,120,20,241,38,162,129,68,60,138,140,116,4,20,241,42, +210,229,136,214,192,160,49,254,0,32,16,168,247,73,171,156, +92,51,235,185,166,124,8,58,235,162,25,254,21,208,229,21, +130,129,238,130,174,24,24,240,14,252,206,188,3,65,69,80, +160,101,183,1,20,74,48,212,158,65,212,190,62,169,211,149, +50,105,255,70,145,117,13,9,21,194,251,9,42,147,74,166, +117,98,28,220,115,70,201,72,25,122,13,9,75,160,176,175, +132,68,9,138,62,72,80,251,180,244,160,160,210,51,62,70, +169,91,160,155,163,101,228,117,128,4,32,112,157,121,18,214, +129,139,7,65,165,3,11,231,240,30,64,130,247,16,72,128, +131,231,0,10,144,0,7,160,0,8,251,244,205,51,20,106, +29,40,2,9,222,4,141,55,65,229,147,55,145,248,68,221, +237,0,138,192,2,40,24,115,52,208,96,216,165,6,24,165, +214,199,2,154,242,90,52,247,3,4,221,4,241,3,48,16, +159,17,63,0,3,93,5,154,174,2,32,100,221,111,31,239, +160,212,128,193,178,244,22,34,165,193,79,219,95,30,35,245, +246,70,146,117,13,9,45,135,224,165,233,201,90,32,145,114, +70,192,136,180,210,12,149,81,51,254,64,66,244,188,156,47, +17,80,148,94,68,13,137,128,34,67,161,186,24,174,15,66, +142,233,214,68,197,39,28,15,32,44,163,129,68,150,0,1, +14,165,23,193,131,0,9,241,136,120,17,0,4,18,1,5, +5,136,120,20,32,145,0,166,110,71,57,210,145,64,102,32, +81,198,38,234,64,102,13,138,104,9,138,82,75,96,148,90, +166,9,20,92,39,215,118,189,196,26,12,253,138,25,232,46, +0,2,227,79,119,129,209,199,208,99,244,211,186,9,147,180, +150,190,125,131,76,150,117,15,9,21,75,223,84,101,211,135, +85,225,19,151,208,130,51,110,70,15,4,192,144,184,132,37, +120,216,191,20,72,80,128,200,156,8,222,2,181,14,22,233, +94,88,102,100,163,132,132,46,71,130,152,52,49,9,160,160, +242,11,16,20,44,120,21,32,81,131,2,0,117,59,50,210, +209,7,9,26,111,34,67,162,1,5,5,210,73,30,69,96, +145,216,65,150,241,4,202,245,82,3,131,168,125,210,70,109, +3,68,64,228,190,150,186,26,140,190,236,38,248,93,193,160, +54,246,90,7,89,25,89,247,144,208,2,121,211,81,132,91, +92,66,235,197,72,24,153,24,0,35,142,55,161,139,1,20, +32,33,232,152,46,6,72,148,203,73,144,0,28,96,224,49, +240,22,74,21,255,152,6,9,42,63,53,36,210,229,168,33, +81,122,19,186,29,125,144,8,40,210,221,72,92,34,221,142, +50,62,145,17,143,50,152,201,171,0,139,128,66,140,34,115, +41,24,52,64,88,102,61,219,89,47,181,4,66,246,229,220, +156,99,9,70,238,231,30,60,25,93,146,120,12,132,241,3, +5,201,114,144,213,149,117,13,9,149,75,31,85,63,86,160, +75,92,194,80,25,131,96,88,12,145,1,51,240,18,18,230, +74,108,10,36,2,10,224,41,187,24,129,70,13,10,144,40, +65,81,67,34,113,137,4,50,129,66,124,34,93,14,160,3, +10,207,82,123,19,134,66,41,80,148,113,9,160,160,241,40, +210,245,232,27,26,173,187,31,64,17,88,148,221,15,26,99, +175,183,75,173,225,144,180,174,85,94,27,152,2,9,235,226, +17,129,67,148,12,144,88,27,178,174,33,161,18,241,38,4, +47,85,52,243,23,12,159,169,252,140,73,75,205,112,25,54, +227,79,119,195,11,64,98,19,1,195,114,33,145,174,6,213, +5,153,4,137,120,19,1,69,186,28,233,118,4,18,233,118, +128,68,64,145,46,71,186,29,37,40,226,77,80,160,224,77, +148,160,232,139,79,128,68,221,245,168,189,9,70,155,101,70, +62,178,172,161,17,45,33,209,7,135,104,174,29,79,194,54, +149,23,111,201,250,45,227,81,232,122,12,93,138,181,35,235, +26,18,42,145,10,229,179,108,226,18,230,75,24,134,212,98, +105,97,25,28,99,101,204,12,159,39,1,18,241,36,64,193, +62,90,194,98,169,144,176,94,67,34,160,168,33,65,251,32, +1,16,129,68,188,9,26,111,34,35,29,70,84,2,138,50, +128,153,174,71,61,210,145,174,7,80,148,243,39,202,96,102, +186,30,165,55,97,73,25,112,90,255,120,0,12,188,79,75, +24,208,236,119,78,212,53,2,6,247,113,79,10,86,102,77, +242,8,227,69,208,1,16,107,71,214,189,39,161,245,17,151, +240,6,164,183,247,204,118,20,36,99,48,90,99,198,169,123, +192,232,141,100,148,49,137,108,211,0,98,41,144,72,0,51, +203,62,72,240,38,64,162,4,69,13,137,196,37,104,186,28, +1,69,9,9,93,142,62,72,240,40,44,19,155,8,36,74, +143,34,93,143,196,39,202,96,102,25,163,8,40,106,207,34, +90,2,163,212,18,4,165,58,86,66,193,210,254,92,159,230, +254,186,40,70,168,2,125,75,191,235,32,107,67,214,61,36, +184,167,90,33,99,235,222,230,243,202,175,201,60,12,34,193, +75,6,28,72,240,26,116,53,128,34,30,4,72,56,22,64, +68,167,121,18,125,160,168,33,193,155,40,61,10,144,144,159, +18,18,241,38,18,192,140,71,81,118,57,106,72,36,54,17, +111,34,93,142,120,19,117,215,163,6,69,159,71,145,238,71, +70,63,98,220,241,48,178,157,245,26,22,37,20,202,115,105, +160,96,189,140,135,184,127,96,229,53,109,162,251,152,223,117, +240,38,214,134,172,107,72,168,72,212,228,26,147,111,242,178, +151,183,0,85,124,134,197,16,25,44,72,0,2,24,240,34, +196,37,64,2,12,74,72,148,160,152,213,229,0,136,232,164, +184,68,9,137,50,46,1,18,165,55,49,9,18,9,96,150, +93,142,104,60,137,122,72,180,244,40,2,137,114,196,35,222, +4,227,172,85,75,207,128,75,15,35,240,136,183,81,194,34, +64,40,161,16,13,28,156,151,235,228,90,185,159,124,0,152, +153,170,0,193,131,0,9,146,229,32,171,43,91,5,36,84, +46,147,170,196,37,204,241,23,151,80,105,19,188,100,168,140, +27,0,192,128,39,17,72,0,129,165,253,147,226,18,53,40, +150,10,137,128,162,134,68,159,55,1,18,81,160,72,151,163, +30,14,5,138,168,231,11,40,50,210,17,80,148,176,168,3, +153,101,183,131,242,44,226,93,80,173,123,60,138,120,0,60, +5,101,26,112,228,88,9,129,18,4,37,16,74,5,31,112, +112,143,220,79,222,116,17,189,135,3,12,241,32,6,72,172, +13,89,247,221,13,170,31,43,46,225,149,96,211,124,77,208, +209,207,101,52,90,101,6,90,66,34,158,4,15,2,12,236, +139,214,144,232,243,38,102,65,162,6,197,52,72,212,222,68, +13,137,114,72,20,40,2,11,170,219,81,118,61,74,80,212, +94,69,64,17,141,71,1,14,150,129,134,109,198,14,8,49, +98,198,158,99,12,61,0,168,161,80,130,160,84,80,168,225, +16,48,81,158,142,251,251,79,145,64,34,58,200,234,203,186, +134,68,42,18,23,213,212,94,243,37,188,236,229,203,67,94, +46,98,24,140,140,113,50,108,198,207,107,200,48,168,37,24, +196,131,8,40,164,155,230,77,244,65,162,14,96,130,68,217, +237,40,65,17,72,244,197,38,2,139,116,57,2,137,50,62, +17,45,99,20,101,215,35,176,8,48,202,24,5,131,76,23, +36,160,8,44,18,31,176,206,219,96,204,64,192,147,96,228, +57,110,189,132,69,13,6,105,74,117,94,9,135,220,211,61, +228,65,94,228,205,239,150,152,132,229,32,107,67,214,53,36, +72,32,33,120,233,45,65,193,75,255,57,233,27,137,42,98, +130,151,140,152,193,131,0,80,24,6,213,237,8,28,2,138, +232,52,111,98,26,36,38,197,38,150,226,77,0,69,96,17, +111,162,236,118,212,144,72,140,162,14,102,150,115,40,250,64, +145,128,102,186,31,233,130,196,128,179,206,192,173,243,60,178, +205,208,3,139,82,75,16,68,157,83,106,13,7,247,119,109, +121,225,245,120,189,92,0,218,111,202,59,28,100,109,200,86, +227,73,8,94,122,125,216,164,42,113,9,31,129,213,194,49, +34,134,199,112,227,77,128,2,72,228,181,113,26,48,212,144, +40,189,137,91,2,18,181,55,81,67,162,236,110,212,144,232, +155,63,81,122,20,1,69,221,245,8,36,210,245,208,146,83, +235,142,7,18,246,137,69,120,187,214,228,40,134,207,200,29, +235,131,65,32,80,194,32,154,237,64,41,128,136,23,1,102, +246,153,57,43,206,148,110,199,32,171,47,91,13,36,18,151, +16,188,212,183,245,157,2,21,156,193,112,223,25,107,217,229, +48,4,74,51,178,17,56,44,21,18,1,69,52,160,168,187, +29,180,142,75,4,20,129,68,128,17,64,68,65,162,111,164, +131,218,6,10,96,0,10,158,4,80,80,207,108,63,48,128, +4,56,80,134,104,105,63,72,48,78,134,25,72,164,69,143, +135,97,246,170,178,20,231,241,73,56,95,172,214,189,96,240, +210,88,6,14,37,0,2,6,105,162,125,112,8,32,128,9, +200,0,206,172,89,192,207,111,59,200,234,203,86,209,221,208, +242,0,133,87,140,5,47,197,37,76,245,21,49,87,233,25, +27,3,101,204,140,31,24,120,17,129,4,40,0,5,117,60, +90,66,162,4,69,9,137,172,211,218,171,40,61,10,222,132, +60,68,203,216,132,101,160,81,198,39,0,2,224,228,159,103, +145,46,7,104,240,34,172,199,147,0,16,158,131,117,128,176, +14,22,182,25,31,205,190,0,35,64,224,230,251,162,150,143, +229,232,58,196,240,125,223,193,144,178,152,132,227,62,206,235, +133,44,134,77,197,31,120,18,37,12,74,141,167,18,45,97, +20,72,1,68,32,33,175,186,137,102,208,250,77,7,89,27, +178,85,64,130,107,170,82,105,129,4,47,125,226,204,223,177, +169,244,42,37,227,98,132,140,151,177,131,65,38,84,197,147, +40,189,137,26,20,129,68,13,138,210,147,160,125,128,136,6, +20,60,138,120,21,181,55,1,28,214,211,221,72,0,51,112, +176,143,2,130,253,246,89,47,131,151,12,45,241,10,10,6, +129,135,165,180,206,227,97,128,4,8,136,227,152,210,174,171, +102,248,24,20,64,194,176,178,233,213,174,167,187,33,29,72, +240,8,98,244,96,16,207,97,22,20,250,224,64,227,221,200, +155,227,224,52,196,36,214,142,172,123,72,144,128,66,197,242, +178,151,73,85,62,47,167,85,210,210,105,117,25,31,227,101, +224,64,16,72,24,225,8,36,250,64,81,123,19,147,64,49, +173,187,17,77,124,34,26,80,80,30,68,20,28,168,117,80, +0,15,113,139,196,33,18,204,116,140,193,59,22,175,195,126, +144,113,77,30,7,24,240,30,188,83,161,219,96,106,52,176, +128,7,195,214,61,211,141,208,146,251,200,44,80,72,195,104, +197,118,124,245,203,113,159,164,247,225,89,231,185,38,80,56, +103,26,12,104,188,142,104,13,6,154,184,137,107,203,155,215, +254,135,152,196,218,145,173,2,18,68,133,210,229,224,170,250, +130,182,74,45,120,105,8,143,251,205,224,24,110,32,97,174, +68,32,145,224,101,9,137,62,80,68,39,121,19,53,36,74, +80,88,79,32,179,12,102,38,70,145,224,37,152,89,79,16, +19,16,120,18,32,224,28,199,129,34,221,16,144,176,13,24, +0,225,243,246,254,199,131,177,57,102,159,216,140,81,3,229, +193,224,125,127,195,72,4,143,193,4,38,113,6,101,100,216, +216,71,102,77,144,114,156,1,243,200,164,7,152,116,229,192, +37,240,1,2,233,64,130,241,247,193,160,84,105,1,33,80, +112,157,140,204,216,150,95,223,13,205,39,234,6,89,125,89, +247,129,203,136,150,7,36,124,169,74,101,214,26,233,71,115, +151,85,72,70,196,72,25,55,195,7,7,144,0,11,93,142, +190,110,71,64,81,2,162,246,36,74,45,61,138,18,20,209, +73,144,224,81,196,179,200,182,238,7,143,64,26,235,0,194, +160,124,245,201,223,7,120,115,82,107,14,20,238,45,157,227, +224,168,28,120,3,224,162,155,161,12,196,103,92,3,108,92, +195,112,49,131,245,53,106,47,87,129,65,254,91,149,49,187, +150,248,4,64,128,8,16,241,202,4,50,93,139,7,1,16, +242,160,27,195,192,93,111,18,16,74,48,4,14,81,231,7, +20,188,37,192,145,191,193,147,88,27,178,85,64,194,50,144, +48,194,225,203,202,130,108,190,84,197,32,84,58,45,20,67, +100,200,140,125,26,36,74,80,148,222,68,221,221,168,181,15, +20,81,222,68,13,137,64,129,129,75,111,157,209,131,67,188, +11,112,163,190,248,196,64,117,1,188,233,234,115,125,64,168, +31,47,61,15,67,12,230,180,211,78,235,12,204,140,83,251, +181,250,188,3,159,246,115,77,192,225,101,184,22,163,100,232, +190,15,106,91,121,137,231,24,134,228,13,232,162,232,126,240, +8,196,55,128,66,236,2,124,29,119,126,9,134,128,192,190, +0,34,80,168,225,0,12,148,55,146,37,80,128,132,223,202, +239,55,64,98,109,200,86,5,9,193,203,242,141,80,6,195, +112,4,225,184,222,140,146,1,51,116,80,0,9,177,9,235, +101,151,163,134,68,233,69,4,18,37,40,234,238,199,180,248, +4,56,208,128,130,225,50,30,238,61,160,229,255,42,180,226, +241,52,116,11,24,141,22,220,51,0,137,243,25,151,117,16, +225,49,248,75,59,231,251,223,15,179,23,5,50,65,196,52, +117,95,247,206,168,8,131,231,53,248,104,173,123,130,2,143, +64,90,129,72,127,133,39,80,89,2,70,30,228,203,95,28, +90,186,142,124,247,129,32,90,123,11,129,1,205,136,11,208, +200,187,101,60,9,112,243,194,151,223,180,79,6,120,172,172, +108,85,49,9,149,42,111,132,230,75,85,130,151,134,234,84, +68,173,40,195,101,232,153,43,145,47,103,3,67,13,139,18, +18,206,153,6,139,0,162,175,203,97,155,113,107,237,203,248, +4,72,48,8,6,204,176,205,237,240,249,61,158,130,252,51, +26,222,4,227,55,234,96,221,53,116,27,60,75,70,63,108, +235,10,248,223,10,176,49,249,73,172,33,243,43,128,64,183, +2,28,236,115,30,143,132,199,101,180,194,119,56,120,11,64, +170,53,7,16,111,210,50,102,249,225,61,240,92,92,95,112, +83,87,67,121,2,1,72,148,48,168,161,16,48,4,10,1, +67,20,152,228,43,160,176,4,62,158,10,232,7,8,126,91, +154,223,121,0,197,202,201,86,19,147,72,229,49,231,191,14, +94,122,89,73,69,21,8,100,164,140,26,8,0,34,144,176, +157,101,95,119,163,244,40,2,138,218,163,0,138,62,111,194, +58,183,222,167,221,24,58,120,0,4,88,200,19,72,200,167, +188,73,107,191,81,5,45,54,215,91,183,194,51,0,75,186, +35,224,192,131,96,244,174,41,173,185,33,140,142,235,175,203, +33,150,192,240,157,171,44,0,36,144,224,45,128,168,32,37, +239,64,44,194,228,41,223,227,224,181,216,159,56,1,79,204, +43,225,64,4,0,202,50,48,136,177,219,87,123,11,180,15, +14,174,43,159,20,20,120,37,60,8,106,219,51,203,163,225, +108,191,41,177,20,200,28,0,177,242,178,85,66,34,193,75, +149,95,255,153,113,50,28,134,197,77,103,200,0,160,171,1, +18,25,225,136,71,17,64,212,58,173,235,81,195,34,160,160, +182,25,172,238,15,67,0,1,144,176,31,48,228,47,144,112, +62,8,136,13,136,67,104,101,181,224,210,240,24,28,3,22, +235,9,68,50,58,128,48,43,146,55,162,213,231,81,1,13, +131,227,77,184,62,143,194,185,160,194,211,208,181,96,168,238, +35,112,105,216,152,23,227,94,129,1,163,150,7,42,109,12, +222,61,169,245,192,33,199,162,129,66,9,135,0,2,12,114, +93,10,102,212,49,249,213,205,242,97,227,252,174,148,103,17, +72,12,147,173,86,78,182,42,72,80,193,203,196,37,244,181, +181,140,92,106,6,81,6,47,25,188,160,37,72,36,120,89, +123,17,181,214,30,197,36,80,4,18,1,133,180,140,131,33, +90,74,3,86,233,138,104,181,65,65,55,193,240,165,121,30, +128,2,2,140,154,241,250,227,33,94,9,144,100,248,19,48, +116,99,24,150,231,116,13,176,112,29,222,128,46,6,32,48, +62,221,7,221,6,35,35,150,210,2,150,99,202,133,17,103, +56,51,6,157,248,5,131,7,13,203,24,186,253,210,129,131, +37,163,207,49,42,79,181,74,19,56,228,222,241,32,228,33, +195,182,233,70,241,92,252,166,60,8,26,56,100,57,200,202, +200,186,134,132,86,37,18,72,196,155,16,151,16,116,203,151, +170,4,2,85,122,45,84,226,18,192,0,18,60,138,122,190, +68,169,53,36,2,138,64,34,160,152,228,73,240,22,84,126, +45,163,138,47,77,188,9,199,25,149,209,5,111,175,26,149, +96,168,140,219,53,164,17,87,49,79,65,255,63,193,87,144, +1,12,207,38,200,199,200,98,116,206,53,215,192,204,69,177, +11,93,12,134,233,186,130,152,186,26,12,190,108,205,197,23, +98,188,142,241,34,24,118,140,62,215,183,30,15,163,52,120, +101,27,8,68,115,237,104,186,21,174,67,3,5,154,235,91, +2,163,251,120,142,76,209,6,127,191,111,150,131,172,156,108, +149,144,80,145,234,191,255,211,47,87,249,85,60,70,203,168, +1,33,93,14,222,68,32,81,122,21,129,68,9,136,64,162, +246,38,250,188,8,64,74,183,34,255,48,22,72,24,189,16, +103,96,80,60,7,35,12,238,45,109,134,43,65,193,58,15, +3,40,76,120,98,188,90,125,35,24,2,156,38,75,57,7, +80,92,143,135,33,77,98,16,158,89,252,66,235,204,0,237, +179,46,56,200,112,181,220,12,150,33,203,75,140,85,26,199, +203,110,135,99,1,66,210,39,14,17,24,80,105,162,37,24, +168,123,69,235,109,247,149,87,231,120,126,65,91,191,41,245, +251,198,147,40,127,251,65,110,89,217,234,186,27,42,143,138, +100,190,132,150,84,255,252,216,99,143,237,198,252,181,150,12, +34,125,127,0,40,167,103,7,16,209,26,18,165,71,209,7, +9,48,40,189,136,4,46,237,179,109,132,66,203,207,144,237, +183,79,90,83,168,5,47,13,73,102,104,52,6,15,18,142, +51,124,128,240,60,186,10,70,36,24,16,240,25,241,160,96, +66,147,158,209,49,182,24,31,56,232,239,219,87,110,83,134, +29,99,182,164,90,115,231,74,39,125,140,222,62,75,128,200, +241,236,11,20,74,173,65,16,205,189,117,157,2,174,12,233, +130,25,213,21,75,192,50,128,32,26,130,65,86,70,214,53, +36,106,9,36,168,184,68,190,84,197,197,22,151,48,116,167, +18,50,64,134,203,224,121,16,32,17,48,4,22,129,67,169, +37,52,38,117,55,74,80,4,22,150,192,34,32,8,88,12, +223,61,164,11,20,76,167,54,188,24,239,33,160,112,156,225, +39,134,1,0,140,8,4,28,183,205,83,72,32,147,97,1, +97,52,30,132,231,142,198,232,163,49,214,218,120,173,151,134, +94,2,36,219,165,246,237,207,53,235,107,231,222,129,67,169, +242,44,239,158,7,4,121,133,4,36,40,41,27,136,65,110, +89,217,106,33,33,186,239,101,47,193,75,45,174,96,158,161, +60,21,148,155,207,64,25,46,72,248,0,13,56,4,18,150, +140,120,18,36,74,79,162,84,160,136,150,192,160,206,211,157, +48,212,40,54,32,144,10,26,166,87,91,151,55,19,161,24, +136,244,37,44,128,192,58,80,88,58,150,137,86,214,65,34, +202,176,24,24,136,148,144,160,0,145,37,227,44,97,17,227, +45,13,216,122,109,220,125,6,159,253,179,192,64,115,237,220, +95,94,228,49,154,188,131,157,231,145,214,156,14,2,16,126, +91,50,64,98,229,100,171,133,68,230,75,232,179,27,29,240, +98,147,47,85,113,171,25,86,90,119,80,200,63,122,89,47, +33,17,175,33,128,200,186,243,2,138,114,189,244,42,2,138, +192,194,121,226,4,242,98,152,82,176,81,215,195,204,70,110, +189,238,71,188,3,221,161,196,43,226,73,80,128,0,12,42, +157,46,6,67,74,119,35,144,112,157,104,64,81,106,9,141, +26,24,49,92,26,80,100,191,101,169,57,47,199,250,96,208, +151,214,181,147,7,249,41,243,75,1,194,115,228,217,116,195, +0,66,23,195,111,59,0,98,101,101,171,134,132,249,18,94, +133,78,92,66,128,143,251,170,18,50,74,198,13,6,153,158, +93,67,34,160,40,181,132,68,52,251,234,174,71,0,145,46, +7,227,7,10,160,98,232,64,144,46,9,24,208,192,193,121, +210,100,95,212,62,144,3,141,24,145,237,64,34,160,136,6, +20,165,78,3,70,212,190,24,127,105,228,147,12,191,214,250, +122,185,102,192,64,229,165,6,4,13,36,168,231,52,27,148, +87,24,72,208,65,86,78,182,90,72,8,118,249,130,182,191, +255,51,169,74,92,194,164,33,147,170,84,88,253,123,6,205, +192,203,233,217,117,151,163,4,68,233,93,76,130,68,237,69, +208,192,195,186,99,9,102,2,4,143,192,122,2,153,182,65, +194,104,69,134,73,3,16,106,155,71,193,120,128,33,158,69, +186,29,246,213,192,232,51,68,90,67,35,70,28,85,78,181, +209,79,3,65,121,110,174,25,205,189,2,6,32,136,150,121, +202,62,249,150,127,207,166,203,146,111,76,208,193,147,88,89, +217,106,33,193,61,229,77,152,158,44,46,97,34,147,209,1, +47,45,233,55,51,56,70,171,155,144,97,80,16,232,243,38, +162,37,56,250,60,138,196,38,2,133,18,24,140,30,4,28, +183,4,2,105,172,243,48,168,125,150,224,1,2,12,63,208, +160,37,44,120,21,233,130,164,27,18,72,88,47,97,193,224, +74,163,140,198,48,75,3,46,13,218,122,96,17,99,47,65, +48,11,6,180,4,0,205,189,227,41,212,249,203,62,121,247, +252,241,146,204,251,40,187,27,3,40,86,78,182,42,72,144, +128,194,82,165,242,5,109,147,170,4,12,5,9,243,178,23, +35,211,130,51,212,18,18,181,39,81,170,125,116,146,55,81, +238,171,129,17,56,0,70,150,1,66,60,10,222,4,0,216, +47,141,252,5,16,241,32,228,219,122,186,31,89,15,24,24, +85,0,83,66,162,214,24,101,109,196,165,33,91,175,141,127, +26,12,234,237,82,115,77,234,254,242,85,170,188,38,191,229, +115,80,101,98,50,156,97,237,242,183,29,100,101,100,171,131, +68,41,60,137,76,170,242,233,53,193,66,175,60,155,24,164, +178,50,78,134,13,16,254,172,167,12,94,6,20,53,44,210, +245,136,6,14,37,36,2,135,210,147,200,50,221,140,62,5, +6,10,22,52,93,14,208,96,40,128,64,227,77,68,3,10, +6,5,22,125,154,86,153,6,18,1,70,105,172,125,0,97, +244,53,24,114,108,146,230,26,185,190,101,142,5,4,212,126, +75,0,148,183,156,39,207,158,9,32,149,179,88,142,119,81, +226,77,248,232,241,32,43,35,91,45,36,180,54,226,18,153, +84,101,218,179,151,151,140,38,152,84,165,210,51,68,6,157, +185,18,53,36,2,138,18,18,179,64,81,66,162,4,197,52, +72,212,96,8,28,162,32,65,235,46,71,13,137,196,42,250, +96,17,64,88,47,161,208,167,12,55,26,163,45,181,4,65, +140,220,18,60,236,11,0,92,43,233,115,61,251,250,142,203, +91,188,6,101,149,161,233,251,222,247,190,205,3,31,248,192, +238,5,57,241,37,224,167,64,49,200,202,200,86,15,9,147, +170,84,46,51,20,77,99,206,39,225,5,222,24,32,67,6, +131,18,18,150,89,239,243,38,166,193,162,236,110,4,20,37, +48,2,138,82,39,1,34,112,200,118,246,5,22,37,52,2, +138,192,162,4,70,13,141,0,35,198,26,131,93,170,50,236, +104,12,159,186,78,64,100,153,180,1,137,109,235,246,217,150, +111,128,84,150,15,120,192,3,154,123,220,227,30,205,95,255, +245,95,55,119,184,195,29,154,187,223,253,238,29,36,92,203, +68,179,43,175,188,114,254,187,151,153,129,57,200,202,200,86, +13,9,174,169,138,149,47,85,121,129,74,133,75,240,146,145, +49,92,16,200,48,104,0,17,72,148,160,152,4,140,18,18, +53,40,74,45,65,17,5,137,116,51,226,81,4,22,165,102, +127,9,138,82,75,88,148,192,40,161,81,194,99,26,48,178, +175,214,24,122,159,50,252,120,23,209,120,15,89,151,119,229, +117,255,251,223,191,3,2,24,220,246,182,183,109,254,242,47, +255,178,185,221,237,110,215,1,226,158,247,188,103,247,91,120, +70,51,56,77,203,246,54,43,208,27,210,6,125,93,13,191, +111,116,144,91,86,182,106,72,24,225,208,234,228,75,85,102, +238,121,85,218,164,42,19,152,24,12,35,85,113,85,204,128, +162,132,69,31,36,38,129,34,144,40,65,81,2,35,144,40, +181,246,44,202,216,68,160,81,106,9,138,82,107,104,4,22, +53,48,232,36,15,163,214,73,144,8,72,234,180,64,144,120, +133,107,123,62,177,158,187,221,237,110,205,95,252,197,95,52, +127,246,103,127,214,41,40,220,254,246,183,111,238,120,199,59, +54,119,190,243,157,59,48,232,86,72,171,236,149,31,224,25, +250,244,214,172,88,18,200,251,70,136,97,109,191,105,98,19, +9,100,14,114,203,201,86,15,9,170,5,18,151,240,22,165, +217,142,249,130,182,202,206,240,84,74,193,203,18,18,1,197, +36,111,162,6,69,13,9,186,28,80,148,176,88,74,204,34, +176,232,3,6,5,135,218,187,136,198,155,168,181,246,50,98, +252,1,132,109,199,3,11,80,8,52,92,215,51,50,118,0, +248,227,63,254,227,230,79,254,228,79,154,219,220,230,54,29, +12,238,114,151,187,116,176,224,65,220,235,94,247,106,238,115, +159,251,116,30,133,120,67,130,198,202,198,51,186,22,216,120, +179,84,12,201,219,179,222,193,241,161,28,159,220,19,140,230, +33,150,144,24,64,113,203,201,86,11,9,149,7,32,44,19, +151,200,23,180,125,80,214,171,214,90,60,6,197,120,85,82, +160,168,33,49,13,20,179,32,81,131,34,144,8,40,178,62, +9,18,224,80,122,23,129,67,128,17,72,244,193,34,128,232, +3,69,13,9,219,52,93,147,128,162,4,4,77,247,65,26, +249,18,71,208,101,248,195,63,252,195,230,119,127,247,119,155, +223,255,253,223,111,254,244,79,255,180,249,171,191,250,171,14, +10,128,192,75,232,131,2,32,43,183,128,65,30,1,199,156, +12,51,82,197,141,116,53,188,115,227,221,27,128,55,123,214, +188,23,128,72,240,114,128,196,45,47,91,125,76,130,234,195, +170,92,230,75,152,84,229,69,42,113,9,144,224,154,51,88, +80,200,63,141,151,160,152,6,139,18,16,165,246,1,162,134, +4,181,77,227,77,4,18,37,24,74,96,4,14,81,251,45, +75,80,196,195,8,40,64,193,50,199,203,174,72,9,144,0, +34,26,79,194,49,249,99,212,12,95,119,1,12,126,231,119, +126,167,249,131,63,248,131,46,166,192,67,184,247,189,239,221, +41,24,240,38,0,33,239,196,40,35,229,225,25,229,87,30, +92,219,100,44,93,10,175,151,251,38,5,112,251,31,82,195, +212,251,238,187,239,252,55,55,13,95,27,254,212,221,48,239, +5,244,211,229,72,67,48,64,226,150,147,173,30,18,42,145, +150,199,203,94,230,75,120,193,74,229,19,151,48,194,193,56, +84,94,198,207,16,54,21,18,89,47,247,149,192,160,75,129, +132,37,13,24,226,77,196,243,176,12,28,74,77,218,108,131, +5,80,36,70,17,5,133,0,132,199,192,83,8,12,64,196, +53,228,245,126,247,187,95,231,37,240,12,120,10,255,235,127, +253,175,110,93,215,225,174,119,189,107,231,29,72,3,6,150, +188,10,101,167,124,60,183,188,186,150,123,129,14,47,193,176, +179,151,191,120,10,160,224,255,80,64,193,191,172,233,86,24, +121,18,88,246,145,32,31,217,241,85,49,31,240,245,253,140, +120,17,186,26,160,15,18,233,78,14,128,184,101,101,171,143, +73,104,101,84,40,113,9,255,70,149,151,189,196,37,84,86, +134,194,232,24,182,74,190,20,72,4,20,53,24,2,143,26, +32,129,69,233,77,4,16,217,14,40,162,241,38,74,112,88, +103,120,241,22,234,238,71,192,16,56,36,77,60,136,18,20, +246,185,55,48,242,0,4,16,197,18,196,17,110,125,235,91, +119,64,48,226,144,192,226,54,219,108,211,121,8,1,66,188, +132,0,65,222,220,203,181,65,199,136,6,8,27,161,48,121, +77,12,40,80,48,231,193,63,140,121,187,211,39,251,77,185, +22,119,208,21,244,137,63,95,241,214,189,48,157,222,208,167, +223,77,240,217,156,23,94,132,174,198,224,69,172,156,108,181, +144,32,169,64,32,161,130,137,75,248,162,180,73,85,226,18, +222,8,213,146,50,48,70,12,8,75,133,68,31,40,166,1, +162,132,68,52,221,144,18,18,150,89,7,137,104,60,133,108, +7,24,209,192,32,96,136,199,224,217,164,117,31,64,96,236, +186,13,188,4,65,197,63,255,243,63,239,70,30,50,4,105, +126,2,47,33,147,152,226,93,81,207,230,58,241,102,92,31, +100,1,65,44,193,176,178,153,145,62,154,43,166,224,27,25, +166,193,235,62,248,50,152,46,4,40,240,228,124,165,203,75, +119,226,13,60,6,35,79,126,27,94,131,110,161,191,68,208, +189,0,135,12,125,130,67,60,8,191,107,116,144,91,86,182, +106,72,164,18,169,88,134,206,124,169,202,164,42,227,238,94, +246,242,241,23,21,60,173,234,44,72,148,26,72,148,80,168, +1,17,56,148,144,232,83,247,14,40,104,214,3,2,203,210, +155,96,248,1,66,233,69,4,8,174,39,127,186,2,128,0, +0,134,29,163,182,65,162,28,126,140,119,16,40,120,70,207, +225,90,242,0,58,186,36,188,4,221,6,30,130,97,100,221, +6,229,200,75,48,92,169,235,144,255,30,85,198,186,15,60, +5,80,240,247,6,98,12,241,22,124,181,219,168,133,225,77, +67,212,70,160,128,92,183,66,236,1,28,116,45,74,56,12, +158,195,202,203,86,15,9,162,114,169,108,121,217,75,203,229, +11,212,190,8,37,120,150,224,220,114,33,81,130,130,214,222, +69,60,137,218,155,232,83,96,40,85,126,106,207,2,0,180, +224,129,2,72,72,43,207,2,134,98,5,0,160,171,16,15, +65,96,209,104,67,128,32,29,32,100,148,193,185,242,45,143, +128,224,62,174,47,86,83,199,17,116,27,76,105,23,96,20, +248,229,37,248,211,30,95,248,22,79,16,16,86,174,62,195, +167,251,32,174,0,10,62,242,43,22,228,95,202,120,11,37, +24,196,26,12,107,150,96,0,244,192,97,232,86,172,190,108, +213,49,9,21,139,88,198,155,224,198,250,130,182,63,171,241, +53,105,209,117,46,51,3,100,48,90,210,77,129,132,245,122, +127,96,17,96,44,197,155,176,164,37,36,128,1,20,44,93, +135,145,27,94,228,21,136,33,252,209,31,253,209,124,12,225, +78,119,186,83,7,4,199,1,33,193,197,58,142,224,158,1, +2,72,26,226,52,218,147,56,2,47,65,183,193,7,95,0, +65,160,23,16,124,114,15,16,116,27,188,85,43,200,104,238, +9,32,136,41,24,61,242,103,66,186,15,60,133,62,40,152, +239,192,99,240,33,25,1,101,191,139,238,68,166,93,215,96, +232,131,195,0,140,149,147,173,218,147,32,129,133,74,39,46, +33,8,150,151,189,84,122,198,32,46,193,96,0,33,174,182, +37,163,178,143,209,91,198,29,183,30,8,88,74,111,31,181, +30,112,68,165,3,136,164,143,145,150,222,69,150,129,2,104, +89,119,63,49,2,30,65,70,25,44,65,1,16,12,63,242, +16,50,252,8,8,153,135,144,124,186,182,231,3,154,116,25, +204,119,0,4,195,143,98,51,233,50,0,2,120,154,163,32, +142,224,95,191,252,133,160,79,237,153,173,106,246,163,110,131, +46,27,15,193,84,119,208,21,16,6,4,31,248,17,87,48, +100,233,63,69,65,25,20,116,245,120,11,98,12,70,40,18, +132,4,6,80,8,24,232,0,128,181,37,27,6,18,84,165, +228,218,138,75,112,131,185,201,90,75,45,168,22,149,65,165, +79,110,25,99,11,4,2,0,235,246,131,70,220,245,192,32, +30,67,169,246,73,227,120,90,112,16,224,57,36,77,238,45, +62,192,19,48,31,1,16,204,69,176,110,232,49,222,65,188, +2,94,66,102,43,58,223,125,92,51,65,69,64,0,192,4, +22,203,145,134,204,73,48,210,224,179,126,60,4,129,197,18, +8,70,129,210,101,16,71,224,33,4,8,190,20,165,28,121, +8,186,112,128,96,36,34,80,72,108,1,20,120,11,186,17, +37,24,74,143,33,94,67,60,135,65,214,150,108,213,221,141, +44,163,250,184,42,173,191,209,83,225,5,214,180,158,12,136, +81,49,96,198,23,227,47,215,129,193,146,50,202,128,129,150, +158,70,210,74,147,116,224,160,11,193,136,237,3,3,49,1, +6,207,11,200,124,132,223,251,189,223,155,159,143,192,75,40, +39,40,101,232,177,244,18,2,156,140,102,152,143,16,32,240, +16,210,101,48,210,144,24,130,63,41,10,16,116,25,234,24, +2,15,65,151,193,71,122,76,98,210,101,8,16,12,73,250, +247,175,120,8,2,141,70,32,18,83,80,182,226,10,241,20, +196,21,50,59,18,20,74,48,228,55,169,127,163,65,214,158, +108,24,72,16,149,83,229,213,47,54,73,135,129,136,200,27, +186,211,234,106,133,25,33,173,189,133,24,124,212,182,52,165, +218,151,22,61,222,131,115,93,143,161,235,26,8,34,230,101, +167,4,24,117,37,64,65,183,34,32,0,17,235,185,30,111, +3,104,120,32,128,38,176,168,203,144,89,139,249,39,173,12, +61,250,146,147,46,67,70,26,120,8,98,8,241,16,202,46, +67,98,8,60,4,243,19,64,193,20,118,93,6,64,229,33, +40,51,93,53,64,240,86,109,128,16,47,33,113,133,128,161, +134,66,60,133,120,11,3,16,214,143,108,245,144,32,89,87, +65,85,98,174,176,96,90,190,84,165,197,21,188,212,42,199, +123,96,244,241,28,2,128,64,195,178,4,7,79,129,74,199, +184,25,59,163,207,208,35,16,128,66,230,35,232,58,0,6, +112,72,159,107,198,67,0,134,0,33,195,143,128,144,185,8, +70,26,204,71,16,84,52,66,35,134,96,232,209,4,165,50, +134,96,232,49,49,132,4,21,19,67,0,73,49,132,218,67, +48,43,21,16,120,8,226,8,128,32,192,88,142,60,196,59, +136,6,6,165,166,27,17,64,4,12,181,14,178,246,101,171, +143,73,144,84,82,203,116,57,244,163,25,142,47,104,103,190, +4,131,100,252,241,30,74,24,196,128,227,73,88,23,36,20, +39,48,9,137,241,215,30,130,25,140,9,46,150,19,148,114, +253,0,38,1,75,113,17,51,34,203,9,74,25,105,200,208, +35,47,65,28,65,208,85,222,141,52,120,9,202,4,37,221, +6,35,13,254,89,60,147,148,204,71,0,4,193,90,65,197, +210,67,72,151,129,135,0,156,160,80,2,129,215,85,122,8, +1,66,12,127,41,16,136,14,178,126,101,67,4,46,83,145, +3,137,116,57,180,170,198,246,181,198,34,253,12,20,16,184, +251,12,57,198,12,8,246,49,114,80,208,101,0,130,12,61, +154,185,104,95,94,137,174,231,35,184,142,235,6,8,9,46, +242,16,0,33,221,134,114,130,18,47,193,63,126,137,35,164, +219,16,47,65,55,169,12,44,6,8,153,139,160,203,192,83, +226,33,36,168,24,15,33,65,69,30,66,226,7,101,80,177, +236,46,196,43,24,100,99,203,134,240,36,210,154,165,245,203, +40,135,62,56,99,211,127,215,175,23,151,224,230,243,26,18, +84,100,248,229,92,4,221,7,30,2,239,161,244,16,74,32, +196,251,16,71,224,33,240,80,196,17,234,23,157,196,17,50, +252,232,127,74,51,99,81,183,129,151,224,221,134,122,198,98, +217,109,16,88,204,72,67,233,33,128,2,239,32,93,134,114, +148,1,20,234,248,65,60,132,120,9,37,84,233,32,27,91, +54,4,36,34,129,4,195,224,86,235,143,251,55,111,67,128, +90,112,19,138,64,194,204,69,175,67,155,143,160,27,145,201, +73,70,26,188,251,144,185,8,165,167,33,184,40,166,193,67, +48,19,50,195,143,153,160,100,180,193,240,99,128,96,248,209, +4,37,163,13,134,98,243,178,147,110,131,137,94,153,160,228, +187,156,233,54,212,64,224,37,152,160,164,219,0,10,1,66, +38,41,101,148,1,20,250,128,80,198,14,2,132,0,181,212, +65,54,182,108,40,72,168,240,12,129,129,112,177,181,184,12, +208,80,168,254,62,99,206,11,95,226,5,32,192,67,0,5, +48,208,93,0,131,196,16,50,31,161,244,16,252,253,93,31, +16,120,8,96,196,67,248,192,7,62,208,197,17,120,8,128, +96,98,23,15,33,35,13,245,208,99,102,43,150,115,16,116, +23,18,84,4,132,186,187,16,24,4,4,37,0,2,132,114, +223,32,131,76,146,13,9,9,134,195,160,184,227,90,103,127, +38,172,203,97,196,64,203,47,78,96,136,145,55,192,43,0, +131,116,25,236,203,140,197,204,71,240,153,53,64,0,154,196, +17,50,31,129,135,144,56,130,41,204,230,35,120,251,49,30, +66,226,8,2,139,226,8,102,43,26,105,0,5,113,132,204, +69,168,187,13,229,176,99,25,67,136,103,80,122,7,53,16, +74,29,100,144,89,178,213,66,162,207,0,98,24,140,137,97, +105,137,181,212,250,250,12,90,171,111,242,17,195,7,11,223, +89,20,59,176,45,168,40,134,0,8,153,177,152,41,204,121, +243,81,96,145,87,146,119,26,202,9,74,153,177,88,2,33, +67,143,1,2,47,161,158,156,84,78,97,230,37,208,105,94, +66,159,214,176,24,100,144,229,200,170,66,226,166,214,0,110, +190,233,198,209,214,150,149,24,72,45,246,49,44,70,166,69, +22,232,19,4,228,250,139,13,48,120,158,0,213,77,48,228, +40,160,152,81,6,67,143,190,162,84,206,71,224,137,148,129, +197,122,130,82,230,35,232,54,148,147,147,2,4,176,42,61, +132,120,9,233,58,148,64,40,193,96,217,7,137,26,4,229, +49,58,200,32,203,145,85,131,196,15,174,252,122,115,221,151, +206,27,109,109,121,153,102,16,246,51,46,45,116,190,162,237, +253,4,241,1,177,2,195,162,20,4,44,121,6,32,194,59, +0,3,30,130,56,66,223,140,69,113,132,178,203,16,32,36, +150,80,118,27,234,192,34,15,161,246,18,178,204,243,196,27, +168,215,107,29,100,144,45,37,171,2,137,235,190,124,126,115, +225,135,14,29,109,173,142,48,46,134,201,96,181,238,2,133, +60,10,177,2,198,111,66,18,181,173,171,224,152,248,65,134, +29,129,165,158,156,84,123,8,25,105,40,223,103,232,139,35, +88,198,35,168,117,48,248,65,86,91,86,28,18,223,252,236, +25,205,103,118,222,65,115,62,218,179,242,194,240,24,32,227, +100,184,90,119,6,174,59,160,91,32,94,64,173,243,10,242, +166,99,134,28,19,80,204,92,132,116,25,0,33,30,66,96, +144,88,194,164,17,7,154,245,210,19,136,14,50,200,106,203, +138,66,226,155,103,125,166,57,225,233,143,111,126,113,227,234, +254,35,116,12,176,4,5,227,6,11,93,2,134,79,211,61, +8,0,2,129,50,118,64,157,31,32,196,67,168,33,0,12, +37,28,74,16,100,123,144,65,214,162,172,24,36,174,255,202, +23,155,163,30,254,144,230,199,215,124,115,180,103,144,65,6, +89,15,178,34,144,184,225,138,203,155,35,30,122,223,214,147, +56,99,180,103,144,65,6,89,47,114,139,67,226,167,223,185, +190,57,234,17,15,105,206,123,207,219,71,123,6,25,100,144, +245,36,183,40,36,126,209,246,209,143,123,210,99,154,19,159, +249,132,230,87,109,95,124,144,65,6,89,127,114,139,65,226, +87,191,252,101,243,169,151,63,175,57,244,111,238,209,252,232, +91,223,24,237,29,100,144,65,214,155,220,98,144,248,194,59, +223,210,28,112,143,219,53,151,28,123,212,104,207,32,131,12, +178,30,229,22,129,196,229,31,63,174,57,224,158,183,111,62, +241,130,103,142,246,12,50,200,230,201,173,110,117,171,77,210, +72,189,29,41,211,150,199,235,237,72,153,182,212,200,172,253, +145,50,205,114,116,53,100,139,223,245,123,23,95,216,28,114, +255,187,118,250,163,111,14,221,140,65,182,140,244,25,204,82, +52,82,111,71,202,180,229,241,122,59,82,166,45,53,50,107, +127,164,76,179,28,93,13,217,162,119,189,233,71,63,108,142, +126,212,223,119,221,140,47,237,255,190,209,222,65,6,217,124, +89,174,145,204,74,95,31,159,181,29,89,234,254,73,233,34, +179,142,215,178,220,244,91,82,182,232,93,79,125,229,139,58, +64,0,197,205,63,191,105,180,119,144,65,54,95,182,180,81, +213,199,103,109,71,150,186,127,82,186,200,172,227,181,44,55, +253,150,148,45,118,215,139,142,62,162,3,4,189,242,83,39, +141,246,14,50,200,150,145,218,72,178,93,107,100,83,183,39, +105,164,239,24,141,244,29,163,181,212,251,203,180,165,70,234, +237,149,148,45,114,87,51,42,197,32,0,226,248,167,253,251, +178,95,222,50,92,250,195,111,92,221,124,243,179,159,110,46, +58,234,240,230,220,119,191,173,57,115,151,215,53,167,189,234, +197,205,39,95,252,236,46,0,122,242,11,183,107,78,253,207, +23,118,251,207,223,231,93,205,101,39,126,180,249,222,37,23, +13,243,47,54,136,76,50,154,90,35,155,186,61,73,35,125, +199,104,164,239,24,173,165,222,95,166,45,53,82,111,175,164, +108,246,93,25,233,241,79,121,236,188,23,177,148,169,215,63, +249,246,53,221,8,200,231,246,124,99,115,194,211,30,215,28, +242,128,187,205,159,191,92,61,244,129,119,239,64,2,46,63, +251,222,119,71,119,24,100,107,147,73,70,83,107,164,222,174, +101,214,241,72,210,77,210,90,234,253,101,218,190,253,145,50, +77,169,145,122,123,37,101,179,239,250,229,253,247,153,55,88, +176,232,19,95,159,250,198,103,78,111,62,183,199,206,205,135, +31,253,143,99,70,190,37,245,160,109,254,186,57,181,245,62, +188,76,54,200,214,37,147,140,166,214,72,189,93,203,172,227, +145,164,155,164,181,212,251,203,180,125,251,35,101,154,82,35, +245,246,74,202,102,221,213,215,165,14,190,223,157,231,141,244, +138,147,63,54,58,178,32,223,191,252,210,230,11,239,122,107, +115,250,14,47,107,62,241,252,103,52,199,254,199,191,54,71, +252,253,253,154,3,239,245,87,99,6,190,165,245,147,47,121, +118,243,131,43,190,62,202,197,32,235,93,38,25,77,173,145, +89,219,181,44,247,120,182,39,233,44,169,211,149,231,150,26, +169,183,87,82,54,235,174,39,61,247,233,243,70,121,228,63, +63,104,89,241,129,95,254,226,23,221,60,138,107,190,240,249, +230,146,99,142,108,206,121,199,158,157,97,31,249,47,127,219, +77,196,42,13,126,83,245,224,251,222,169,249,242,1,251,116, +49,143,65,214,183,76,50,154,90,35,179,182,107,89,238,241, +108,79,210,89,82,167,43,207,45,53,82,111,175,164,108,242, +93,121,13,165,65,158,191,239,222,163,35,155,47,63,251,238, +119,154,171,78,255,84,115,206,219,246,104,61,143,71,110,54, +52,78,126,209,118,205,77,63,250,209,232,234,131,172,71,89, +174,145,108,170,81,229,188,90,107,169,247,151,105,151,179,127, +169,178,220,244,91,82,54,233,174,55,223,120,99,115,212,195, +31,60,111,132,7,182,70,252,163,111,221,114,31,147,249,241, +181,223,106,46,56,236,192,238,141,210,210,248,151,163,31,125, +194,35,155,159,125,255,123,163,43,14,178,222,100,165,140,42, +231,213,90,75,189,191,76,187,156,253,75,149,229,166,223,146, +178,73,119,253,202,129,239,31,51,64,175,130,175,148,124,231, +130,175,52,167,191,230,229,205,129,247,190,195,88,30,150,162, +31,125,226,163,154,159,255,248,199,163,43,13,178,158,36,70, +178,92,141,172,213,237,229,234,106,200,178,239,202,109,63,252, +193,247,30,51,190,11,14,61,96,116,116,229,228,134,203,47, +109,187,17,207,26,203,199,82,244,83,47,127,254,178,231,113, +12,178,250,210,103,48,75,209,200,90,221,94,174,174,134,44, +251,174,95,124,255,187,23,25,222,15,174,186,98,116,116,92, +124,224,53,159,140,247,165,232,124,49,186,211,159,215,218,166, +169,212,185,179,228,242,143,31,223,28,246,183,247,90,148,167, +105,122,225,145,135,141,206,30,100,163,200,166,26,217,111,255, +230,111,78,61,47,215,173,175,63,105,255,122,148,101,229,222, +151,166,14,255,187,251,140,25,156,143,219,150,114,233,101,151, +53,239,122,239,187,155,215,191,113,167,230,63,119,120,117,167, +175,216,254,85,155,164,206,125,245,107,119,104,118,222,109,151, +230,29,239,126,87,115,248,135,62,216,124,250,51,103,52,223, +252,214,183,198,190,46,253,163,111,94,221,28,243,184,135,143, +229,107,154,250,16,142,207,234,13,178,113,100,83,140,245,250, +11,190,220,252,191,255,231,255,49,245,188,92,183,190,254,164, +253,235,81,150,149,123,127,168,83,27,220,25,59,190,114,116, +116,78,206,250,252,231,122,13,126,75,235,110,123,238,209,124, +234,212,83,186,255,180,32,254,50,240,132,167,63,110,81,254, +38,233,89,187,239,212,157,215,39,254,55,227,140,51,63,211, +171,142,45,87,46,186,228,226,238,220,207,159,253,249,209,158, +205,147,175,93,248,181,238,122,231,156,251,133,209,158,113,153, +117,124,150,108,238,249,171,41,203,53,206,58,93,182,175,254, +244,169,29,36,34,117,186,200,172,253,179,142,71,150,187,189, +146,178,244,187,182,45,247,71,254,237,159,22,25,91,253,79, +92,43,5,137,232,27,118,125,99,243,149,11,190,218,221,27, +40,150,234,81,28,124,223,59,79,156,198,125,197,149,87,246, +222,139,58,182,92,57,236,67,71,116,231,238,180,235,46,163, +61,155,39,7,28,124,80,119,189,55,189,101,207,209,158,113, +57,224,144,233,199,103,201,252,249,111,222,180,243,87,83,98, +76,75,53,170,58,157,245,187,252,246,127,111,46,59,241,216, +209,158,57,153,116,189,89,251,103,29,143,44,119,123,37,101, +201,119,189,246,220,179,123,141,237,186,47,158,59,74,49,39, +53,36,222,246,174,119,52,103,158,245,217,230,211,109,203,116, +218,167,79,239,90,255,147,78,254,68,115,194,199,78,108,142, +61,238,163,205,161,71,28,222,236,186,199,155,198,206,41,117, +215,61,119,111,222,183,223,190,93,247,165,239,56,213,45,113, +95,242,195,111,92,213,28,246,160,123,246,230,181,214,175,30, +242,129,238,156,90,6,72,172,61,72,204,50,154,122,123,146, +204,58,239,119,254,175,255,210,60,247,14,127,177,104,2,222, +172,243,234,237,200,172,116,217,158,165,171,41,75,190,251,103, +118,218,190,215,208,110,252,193,13,163,20,115,82,67,226,160, +67,15,25,29,153,44,226,11,92,242,183,190,227,237,99,231, +210,87,189,118,135,230,234,111,92,221,165,17,139,248,232,9, +199,55,59,188,254,117,139,211,189,102,251,246,248,220,92,141, +75,143,251,112,111,94,107,61,254,169,255,222,165,175,165,132, +196,135,142,62,170,249,217,141,55,206,171,96,236,15,90,143, +229,194,139,47,234,84,16,22,0,63,117,218,169,205,79,127, +246,211,238,255,63,63,222,66,240,140,207,158,217,5,106,73, +9,137,107,174,189,166,61,126,82,243,217,207,157,213,220,92, +84,68,221,152,207,180,231,128,231,39,79,57,165,185,234,234, +171,71,71,230,228,107,23,93,216,156,120,210,199,155,43,175, +186,178,23,18,57,126,133,227,61,144,24,191,254,167,166,95, +127,131,66,226,39,215,95,215,188,245,254,119,111,126,235,255, +249,191,187,237,82,30,248,192,7,118,26,153,118,157,82,102, +165,203,246,44,93,77,89,210,221,125,64,166,175,117,62,236, +193,247,26,165,88,144,77,129,68,196,95,224,241,44,202,243, +233,123,246,25,255,202,213,247,190,255,253,102,175,119,46,6, +202,129,135,28,60,151,160,5,138,185,27,117,126,107,245,254, +200,141,55,124,127,238,156,66,74,72,28,125,204,71,70,123, +23,228,188,47,158,223,29,227,193,236,253,190,247,204,167,21, +176,125,195,46,111,156,223,126,239,251,247,233,210,7,18,224, +246,154,55,236,56,127,156,193,146,111,93,243,173,230,181,59, +189,126,126,127,148,215,69,46,190,228,146,249,125,175,108,97, +24,207,43,16,152,117,124,249,215,223,189,91,95,15,144,88, +238,254,90,178,255,151,63,255,121,243,177,103,63,165,185,234, +244,83,186,6,105,191,253,246,235,254,9,126,146,72,67,159, +242,148,167,52,191,241,27,191,49,127,157,232,36,169,143,79, +218,174,117,53,101,73,119,247,6,103,159,145,233,255,215,178, +57,144,32,64,177,215,59,223,49,118,13,234,63,56,75,249, +225,143,126,216,236,184,243,27,198,210,108,191,227,107,187,243, +201,164,238,81,173,87,159,113,106,151,190,148,18,18,12,229, +144,195,15,155,87,127,4,28,72,208,119,190,231,221,93,151, +40,219,186,70,59,237,182,75,183,14,34,36,144,200,241,215, +237,52,151,239,157,223,180,235,220,241,15,206,129,113,199,182, +75,101,116,8,20,109,131,10,207,229,136,35,63,52,127,190, +86,158,33,91,15,4,102,29,63,236,131,115,247,223,113,231, +101,94,127,3,65,194,215,221,63,241,194,109,59,195,95,174, +248,143,216,29,119,220,113,12,22,147,164,62,62,105,187,214, +213,148,37,221,221,72,64,159,129,125,188,37,111,45,155,11, +9,114,238,249,231,141,93,131,38,56,89,202,113,109,215,163, +78,247,221,246,7,139,28,247,148,127,235,205,119,169,94,117, +175,101,90,76,226,134,27,110,24,131,196,213,223,248,70,115, +202,233,167,205,111,251,51,97,93,162,108,147,121,79,98,199, +57,163,252,200,71,143,237,182,65,196,182,225,93,219,239,217, +119,206,99,250,196,167,62,57,127,190,46,203,251,222,191,111, +183,190,231,94,111,233,142,191,251,125,239,237,182,3,129,28, +223,35,199,247,25,63,190,212,235,47,58,127,13,65,34,178, +169,70,83,26,92,125,254,183,206,62,171,123,25,240,187,23, +95,56,218,179,32,102,232,126,251,188,47,52,95,61,236,128, +230,188,247,190,163,249,236,174,59,118,159,105,60,99,199,87, +117,219,23,127,228,200,110,56,29,92,192,34,82,223,167,188, +119,223,254,72,153,166,79,87,67,150,116,215,73,223,128,248, +212,75,159,59,74,177,32,91,2,18,98,16,229,53,104,223, +112,220,185,231,47,24,107,244,219,215,93,55,58,218,52,23, +29,181,240,73,189,73,250,217,93,94,55,74,189,32,37,36, +120,43,111,121,251,94,243,202,131,41,33,33,14,114,250,25, +159,158,223,214,247,63,254,196,19,230,183,73,29,184,60,241, +164,143,117,219,32,193,243,121,251,222,239,236,182,181,224,175, +121,253,142,205,171,95,251,154,249,243,25,49,227,182,254,246, +189,223,213,157,95,199,36,222,179,239,62,83,143,207,190,126, +206,127,103,151,126,254,252,13,0,137,27,219,223,243,200,135, +63,164,251,148,65,4,44,206,222,107,247,230,216,39,60,106, +201,159,52,48,229,255,146,143,30,221,252,226,103,63,237,128, +81,223,167,188,119,223,254,72,153,166,79,87,67,102,222,245, +167,223,253,206,196,183,48,17,181,150,45,1,137,175,124,245, +171,99,215,160,181,39,161,5,22,252,171,211,149,144,48,196, +57,235,71,62,197,52,237,74,150,26,147,160,91,18,18,226, +21,90,253,82,205,86,93,54,36,170,192,229,180,235,155,217, +186,8,18,235,32,112,89,75,125,124,210,118,169,219,109,183, +93,243,185,55,191,177,171,223,215,158,119,206,40,37,239,225, +71,221,203,128,234,62,47,227,202,83,78,110,206,125,247,94, +205,39,94,176,109,115,232,131,238,209,91,143,162,199,60,238, +95,154,239,94,244,181,102,239,189,247,238,238,17,201,61,35, +217,158,180,191,150,73,251,87,66,102,222,245,234,79,159,210, +91,24,244,150,130,68,42,105,169,31,59,233,227,205,135,143, +61,166,217,103,191,247,55,187,189,121,143,110,212,163,78,67, +75,72,144,227,158,60,189,203,209,247,7,66,183,20,36,204, +233,32,39,126,188,31,18,9,116,114,91,175,188,234,170,249, +17,136,137,45,253,34,72,244,31,159,191,126,155,142,212,215, +183,191,247,252,173,24,18,15,125,232,67,155,27,190,126,89, +115,208,54,119,236,222,16,246,125,147,165,202,117,95,62,191, +249,252,91,119,107,14,127,232,125,123,235,212,65,109,215,229, +202,83,62,209,188,240,133,47,28,157,49,59,63,145,122,59, +50,105,255,74,200,204,187,126,105,191,247,244,22,4,189,37, +186,27,245,249,203,213,26,18,126,204,190,188,71,125,45,171, +150,18,18,90,219,147,79,249,212,188,138,65,108,42,36,184, +251,63,254,201,79,154,35,142,252,96,183,13,116,92,83,247, +176,253,174,247,190,167,75,159,64,226,235,118,122,125,183,253, +254,253,63,208,109,239,178,251,110,93,250,24,125,32,176,112, +252,77,189,199,223,241,238,189,187,109,163,47,36,215,55,226, +65,222,127,192,132,235,175,65,72,212,90,203,164,253,181,120, +78,111,19,171,3,98,11,155,34,55,253,240,7,205,249,239, +123,103,55,49,175,174,87,166,254,243,40,238,116,167,59,77, +205,103,157,223,122,59,50,105,255,74,200,204,187,126,250,117, +175,92,84,0,209,143,63,235,201,163,84,11,178,169,144,208, +55,62,246,248,227,186,214,181,60,127,185,90,67,226,178,19, +142,233,205,123,244,147,47,121,206,40,229,130,76,11,92,154, +24,182,169,144,160,70,48,242,140,111,121,251,219,186,227,71, +126,248,232,110,251,149,59,108,223,28,124,248,161,243,195,164, +251,238,191,95,119,188,12,132,190,126,151,157,231,207,15,4, +102,29,207,245,237,31,187,254,7,102,92,127,43,133,4,64, +124,247,162,11,230,62,55,160,171,113,238,217,221,126,229,4, +184,75,209,35,142,250,80,115,86,219,221,253,201,79,127,210, +124,231,194,11,154,15,62,236,111,22,213,45,223,63,249,194, +57,231,76,205,103,157,223,122,59,50,105,255,74,200,204,187, +126,108,219,39,46,122,248,232,49,255,254,47,163,84,11,178, +92,72,48,178,227,63,118,98,103,60,229,121,181,26,46,124, +223,126,239,111,142,60,250,168,110,210,143,201,75,90,246,186, +219,81,67,226,250,175,126,169,55,239,209,79,191,246,21,163, +148,11,114,75,65,194,156,138,119,190,103,174,85,103,136,174, +67,156,243,182,119,205,181,222,209,55,181,93,170,60,203,119, +190,243,157,230,117,163,225,222,157,119,219,181,123,209,173,75, +51,130,192,248,241,93,22,29,95,222,245,139,243,215,96,224, +50,82,27,77,182,107,157,36,254,154,193,239,127,240,253,238, +218,253,243,28,225,73,121,238,55,182,203,93,91,175,204,82, +121,103,72,56,90,214,185,215,182,192,61,229,180,211,154,27, +174,188,98,209,203,143,212,23,214,200,172,252,76,58,62,235, +188,149,144,153,119,63,250,81,255,176,232,193,163,130,56,45, +150,71,41,231,164,134,4,87,90,255,247,235,87,124,189,249, +218,133,23,54,159,59,251,236,206,200,63,112,208,129,205,27, +218,86,171,76,91,170,31,102,255,131,15,108,190,112,222,185, +205,13,63,248,193,232,234,139,69,203,87,158,87,67,194,167, +240,250,242,30,61,123,175,55,141,82,174,140,8,184,94,254, +245,203,155,235,175,31,127,11,85,235,246,173,107,174,233,102, +62,94,125,245,213,93,186,82,116,83,76,122,202,11,109,181, +204,58,78,114,125,177,136,229,94,127,173,73,109,60,217,174, +181,79,76,156,58,244,129,115,127,227,224,47,29,34,129,68, +89,135,252,46,223,251,254,247,186,152,88,234,216,73,159,60, +185,109,72,174,104,62,120,212,145,243,251,62,127,206,217,205, +21,159,58,105,81,253,58,237,213,47,233,174,49,45,63,100, +210,241,89,231,173,132,204,188,123,31,29,75,173,95,185,222, +220,152,2,53,235,178,28,115,158,38,179,32,97,14,254,180, +17,14,159,197,91,109,249,254,13,55,52,215,183,173,57,253, +225,102,124,139,51,215,48,225,107,107,149,229,26,77,157,254, +130,11,46,104,174,248,228,130,49,155,64,21,233,131,68,41, +31,109,187,195,142,239,241,214,55,119,219,140,63,241,29,35, +80,191,188,249,230,230,99,219,61,121,172,126,29,246,144,109, +154,159,254,244,167,205,127,249,47,255,165,55,223,117,254,178, +93,235,106,202,204,187,31,242,128,185,127,230,154,164,245,159, +241,108,14,36,184,224,159,253,220,220,139,90,75,149,89,144, +32,211,94,248,250,198,103,78,27,165,90,29,209,114,151,239, +162,152,29,57,75,174,249,246,181,205,161,31,60,188,83,222, +1,249,78,235,49,229,26,75,41,195,203,46,191,124,254,26, +38,128,173,23,89,174,209,244,165,63,115,215,185,174,6,245, +133,246,200,44,72,92,112,225,215,186,227,175,126,221,107,70, +123,22,234,123,130,194,151,84,239,13,153,164,101,234,255,35, +30,241,136,222,124,215,249,203,118,173,171,41,51,239,126,200, +253,239,50,246,208,181,138,238,150,50,11,18,34,234,186,32, +233,155,151,106,136,115,185,178,20,72,124,240,31,238,223,155, +119,250,227,107,231,140,108,181,196,203,97,101,254,121,81,179, +196,183,30,146,222,12,80,114,254,23,191,56,191,239,27,223, +252,70,183,111,154,36,88,169,194,103,42,251,90,150,218,88, +74,3,154,166,165,104,249,201,49,143,123,196,252,239,95,142, +208,205,130,132,250,233,56,168,123,241,111,255,131,15,106,94, +255,198,185,250,23,72,252,184,5,184,63,137,202,245,121,177, +55,180,93,237,87,190,242,149,19,243,69,102,237,159,116,124, +37,100,230,93,235,239,89,214,122,226,51,254,99,148,114,78, +250,32,97,223,85,223,184,186,249,113,241,17,218,143,125,226, +164,69,233,180,134,203,149,37,65,226,31,31,208,155,119,240, +88,77,81,105,247,120,235,91,186,124,11,50,90,30,114,196, +194,167,245,28,143,138,33,92,251,237,111,119,235,121,23,195, +228,44,219,196,232,16,143,128,102,159,165,115,120,13,94,138, +139,216,159,169,215,128,157,244,68,108,226,242,182,82,155,245, +186,150,224,81,27,73,105,56,211,180,79,12,79,166,14,44, +165,187,33,240,123,204,104,42,125,212,123,66,222,209,241,27, +216,14,36,200,135,31,243,176,249,235,31,120,175,59,52,63, +188,250,170,238,221,142,105,249,154,181,127,210,241,149,144,153, +119,157,22,184,164,72,249,211,235,23,10,181,15,18,10,185, +22,36,46,211,148,46,220,114,100,41,144,56,98,66,92,229, +148,255,124,193,40,197,234,200,197,151,206,189,125,105,100,33, +35,10,94,34,139,8,220,10,224,126,224,192,3,186,74,120, +208,97,135,116,239,111,148,207,107,52,130,152,136,37,109,42, +171,192,218,238,109,223,185,76,251,225,99,62,210,193,166,124, +35,84,23,239,157,239,222,187,155,217,41,16,87,70,242,189, +77,106,228,99,61,200,82,140,8,12,127,114,221,183,155,3, +183,185,227,124,29,248,248,179,159,58,58,186,0,137,143,158, +112,92,247,126,11,207,1,68,213,77,251,213,181,79,158,122, +74,235,169,125,115,62,238,115,205,181,215,118,199,74,72,0, +79,174,127,200,3,239,214,77,212,170,33,81,235,44,89,106, +186,91,66,102,222,245,164,231,60,109,254,129,39,169,79,236, +71,68,121,83,201,162,70,54,106,201,75,78,81,149,117,83, +34,235,75,129,196,193,247,235,239,50,213,95,213,90,105,201, +204,210,15,125,248,168,110,168,216,186,121,12,145,188,77,154, +152,197,199,91,239,171,124,94,243,29,64,133,225,103,238,131, +138,13,202,1,1,208,148,51,88,141,96,100,184,147,90,63, +238,196,227,231,231,82,24,242,227,229,105,41,109,27,114,94, +15,178,20,35,2,137,27,190,126,121,247,63,49,169,3,135, +60,240,238,205,47,70,245,46,144,136,150,67,157,230,180,244, +53,118,215,182,221,11,199,75,72,148,95,113,63,226,239,239, +219,237,219,170,33,225,159,191,243,192,147,212,31,245,100,90, +235,69,23,95,60,95,176,81,173,100,45,230,27,212,233,124, +228,118,185,50,11,18,42,64,95,158,169,15,232,174,150,24, +209,72,171,125,233,101,151,118,175,144,91,63,248,176,57,72, +136,53,228,153,222,248,166,93,59,47,194,108,207,75,47,191, +108,126,191,225,76,162,75,145,125,103,127,225,156,174,28,179, +253,221,239,125,183,251,144,140,215,195,169,209,19,47,203,229, +184,150,240,231,237,111,151,214,210,132,54,34,54,34,253,167, +207,88,254,111,178,18,82,26,88,159,241,212,251,173,223,230, +54,183,233,92,127,93,128,249,122,208,2,227,219,95,60,175, +75,19,72,28,119,226,9,221,55,56,116,183,2,232,115,207, +27,255,2,91,164,15,18,159,124,233,115,230,175,255,169,151, +63,175,219,247,216,199,62,182,55,159,145,228,119,150,174,134, +204,188,235,101,39,126,116,161,64,167,232,69,71,207,129,64, +223,56,173,80,169,94,198,42,165,52,146,232,14,237,121,95, +191,162,255,243,252,147,100,22,36,84,138,190,252,250,227,226, +213,148,196,100,76,18,211,194,101,178,83,38,159,149,47,185, +249,6,68,228,212,211,79,159,223,255,163,209,112,105,109,244, +39,23,175,130,251,214,197,217,231,156,51,54,47,34,94,92, +190,39,241,211,22,164,153,101,233,55,57,234,35,31,110,127, +159,197,31,227,89,75,50,203,120,234,253,217,190,185,5,226, +33,127,115,247,177,186,112,206,219,231,38,141,189,121,175,183, +118,101,112,218,25,159,238,182,73,234,242,164,143,2,247,65, +162,236,110,124,229,224,185,89,173,183,190,245,173,123,243,25, +73,254,102,233,106,200,204,187,138,55,148,238,217,36,61,226, +161,247,109,110,28,69,218,143,57,238,163,93,193,213,234,203, +81,90,195,72,162,197,165,110,255,186,215,118,51,24,151,26, +52,155,5,137,111,125,254,179,189,249,253,210,254,227,95,187, +90,73,241,108,59,237,58,247,5,43,30,196,151,191,242,149, +46,182,96,251,192,67,231,190,174,149,201,59,140,214,255,146, +68,120,26,246,239,178,199,194,36,176,218,232,205,49,169,203, +197,199,113,110,188,105,238,115,122,25,89,18,188,140,212,49, +34,223,190,184,224,107,95,27,29,93,125,233,51,24,90,203, +172,253,128,124,220,147,30,61,86,23,4,50,127,220,122,14, +41,3,101,103,2,160,180,9,18,123,169,240,186,158,174,108, +47,36,158,255,204,249,107,255,176,245,86,207,60,243,204,249, +251,71,39,73,157,174,214,213,144,37,221,213,8,70,89,168, +147,212,236,50,114,227,77,55,245,126,175,50,106,74,176,73, +40,90,188,244,165,107,101,52,199,28,119,108,235,62,127,161, +107,85,47,108,93,107,110,249,215,175,188,162,155,49,232,123, +151,126,160,250,235,84,53,36,196,29,234,124,10,182,250,127, +209,213,146,114,90,119,173,249,4,159,247,42,108,191,245,29, +115,239,119,68,118,27,125,5,171,156,238,30,163,223,251,125, +11,70,175,187,162,155,87,122,107,159,59,251,243,29,160,182, +31,117,45,12,131,70,24,132,160,179,174,77,210,251,126,198, +90,145,62,131,161,181,204,218,239,57,207,123,207,219,23,213, +137,211,182,127,105,243,131,182,204,118,127,203,92,176,151,103, +181,215,187,222,49,15,9,154,24,144,184,155,122,73,227,181, +5,18,38,239,29,254,144,185,17,65,118,227,126,245,240,39, +157,36,117,186,90,87,67,150,116,215,75,142,61,106,81,161, +78,210,124,129,90,244,119,159,15,188,127,190,128,87,74,107, +72,248,168,76,157,71,129,165,213,148,124,23,147,43,11,152, +49,124,42,200,168,98,229,93,22,173,91,196,240,100,210,157, +114,218,220,103,247,58,163,31,185,196,102,4,126,243,155,223, +236,190,216,69,121,14,229,247,43,65,66,100,62,219,121,119, +196,215,203,165,191,240,162,139,186,81,14,95,56,119,252,205, +111,91,59,144,168,165,54,154,210,144,74,141,148,251,62,253, +241,143,53,135,60,96,110,90,118,169,103,183,221,142,31,183, +93,56,211,174,235,81,164,89,26,72,148,49,143,171,78,251, +100,247,157,204,105,159,181,43,243,85,234,90,146,37,229,198, +191,136,79,154,107,80,171,86,250,210,227,230,190,193,208,81, +251,252,243,155,55,183,45,82,95,193,222,18,90,67,194,183, +2,234,60,174,230,44,75,1,177,228,85,151,130,152,63,146, +125,190,229,240,157,239,126,119,126,187,140,229,92,114,233,165, +243,251,5,21,197,42,188,96,150,125,202,250,204,179,22,62, +196,243,213,175,93,208,85,120,235,254,9,77,28,72,96,51, +199,247,59,112,255,14,26,9,90,234,202,136,9,249,238,133, +237,228,111,45,74,109,76,165,129,149,26,41,247,121,125,91, +172,160,174,23,244,228,151,60,103,108,130,157,238,177,50,153, +166,94,8,204,200,220,197,163,6,213,63,219,9,154,251,80, +110,121,239,90,202,99,165,174,37,89,114,110,252,127,102,93, +160,147,20,40,190,90,253,137,176,201,57,90,44,227,249,179, +222,248,220,84,213,39,247,73,251,136,183,251,234,127,31,247, +7,67,224,181,90,34,40,152,252,10,50,18,31,249,205,190, +253,15,58,176,57,255,75,11,179,39,203,24,14,192,36,192, +72,253,13,1,239,32,219,215,127,231,250,174,11,22,163,143, +26,202,251,252,57,115,95,94,202,212,226,232,117,215,95,215, +236,119,192,254,99,251,168,119,17,252,93,192,90,145,62,67, +162,145,89,251,35,217,190,249,23,63,111,187,199,47,29,171, +27,81,221,133,115,222,190,71,243,163,37,204,92,173,197,12, +78,215,16,240,63,225,132,19,70,123,23,231,35,146,253,147, +116,45,200,146,115,241,171,214,173,93,202,135,101,75,61,253, +53,175,152,127,13,183,22,239,225,51,18,111,68,94,116,241, +69,221,112,222,34,189,112,130,182,199,12,181,114,165,47,17, +167,184,226,235,221,7,112,203,8,62,225,238,213,121,242,159, +28,171,41,151,181,207,235,255,58,76,164,138,248,132,92,254, +199,67,203,14,116,217,174,3,184,254,87,131,119,1,36,186, +6,215,93,127,253,124,218,192,79,185,242,32,4,52,79,61, +253,180,206,51,41,197,189,93,227,75,95,254,114,119,142,235, +136,71,8,56,251,204,191,128,229,106,130,180,79,250,12,136, +70,102,237,143,148,219,63,255,233,79,155,51,119,126,205,162, +58,18,53,189,250,196,109,159,216,156,191,239,222,205,213,103, +156,214,213,229,105,95,176,50,37,251,224,251,221,185,57,246, +137,143,234,190,35,225,165,174,72,157,143,72,246,79,210,181, +32,203,202,197,13,87,92,222,205,32,235,43,208,73,250,161, +127,122,80,115,197,201,31,211,247,24,93,101,229,228,179,197, +139,60,244,232,71,254,253,178,62,83,54,200,218,145,218,104, +150,187,29,169,247,131,161,87,188,143,121,252,35,198,234,202, +36,61,252,193,219,116,127,234,100,152,243,156,119,190,185,185, +246,188,133,161,209,175,28,180,95,115,96,11,150,79,29,118, +240,124,28,98,150,36,63,181,70,234,237,213,144,101,223,253, +170,83,79,238,186,19,125,5,56,77,143,127,218,191,119,223, +203,92,169,22,74,148,185,126,177,139,11,56,200,250,148,89, +198,51,107,59,210,183,95,157,244,141,9,95,168,242,134,168, +239,162,122,123,179,172,59,182,189,24,118,242,11,183,235,62, +119,119,237,185,231,180,158,197,194,107,253,221,63,238,63,244, +62,205,251,183,123,234,252,107,225,125,247,175,37,233,106,141, +212,219,171,33,155,116,119,163,29,155,2,10,250,225,71,253, +67,247,95,23,63,190,102,238,47,249,110,41,169,231,71,124, +244,137,143,94,244,255,142,131,172,31,217,84,99,153,116,94, +246,71,129,162,108,192,110,110,161,113,243,77,55,45,104,187, +61,173,129,59,105,183,55,52,239,253,219,123,207,79,241,142, +228,250,147,164,204,67,153,174,222,94,77,217,228,92,92,241, +201,143,207,124,141,124,170,222,243,246,45,177,31,51,162,242, +217,221,8,202,150,148,79,239,88,124,155,211,119,12,191,176, +101,254,246,127,144,213,145,77,53,154,73,231,101,127,125,220, +255,125,250,139,191,165,120,188,1,203,79,190,125,109,243,190, +109,238,212,252,241,111,254,198,232,200,130,212,215,175,165,204, +67,153,174,222,94,77,217,172,92,124,239,226,175,117,163,5, +99,198,191,137,122,240,125,238,212,185,121,254,33,201,4,168, +107,206,254,108,243,227,111,95,211,254,8,203,111,253,253,137, +113,9,176,242,143,87,6,89,159,82,26,82,105,60,245,254, +73,26,153,181,93,139,23,179,104,36,219,62,201,159,243,78, +219,225,229,205,157,127,243,215,167,94,39,247,89,170,214,50, +105,255,74,200,102,223,245,230,155,110,236,188,129,73,111,90, +110,174,234,11,122,93,221,95,10,158,254,218,87,116,255,172, +244,229,3,246,237,254,94,205,127,27,248,3,149,90,4,144, +114,190,175,82,149,175,178,15,178,62,165,52,160,210,88,234, +253,147,52,50,107,187,150,73,233,163,151,157,120,108,243,229, +3,247,157,223,158,36,229,57,75,209,90,38,237,95,9,217, +98,119,253,201,117,215,54,159,127,243,46,205,161,15,28,127, +121,102,75,171,63,83,249,216,118,79,234,64,240,131,43,23, +191,130,46,0,117,228,63,63,104,62,253,197,31,94,252,6, +234,32,27,79,102,25,223,36,141,244,109,255,254,175,255,191, +205,211,110,251,39,205,255,254,191,253,111,243,199,107,141,212, +219,181,148,231,76,211,213,144,45,126,87,127,176,122,201,49, +71,118,255,140,85,71,136,55,69,15,185,255,93,155,19,159, +249,132,230,156,119,236,217,253,3,184,235,79,147,139,143,89, +152,66,126,210,243,158,190,42,67,175,131,172,61,153,100,100, +165,1,246,105,164,222,254,127,254,207,255,163,121,244,159,253, +97,243,27,255,223,255,55,150,190,214,72,189,93,75,121,206, +52,93,13,185,69,239,234,207,83,175,57,251,172,174,123,224, +79,126,24,251,209,255,250,208,238,147,120,140,95,220,64,119, +224,67,15,123,96,115,204,227,30,222,156,244,220,167,53,103, +188,225,213,205,23,247,125,119,243,245,79,156,216,124,255,242, +75,187,47,16,47,85,120,17,71,61,226,239,58,64,28,246, +183,247,90,213,151,184,6,217,178,210,103,48,75,209,90,38, +29,95,234,126,250,107,191,118,171,46,112,175,126,79,146,190, +243,104,100,169,219,245,254,213,144,213,189,251,22,110,229,191, +246,193,67,230,189,136,203,63,190,240,134,227,32,235,95,106, +163,89,170,214,50,233,248,82,247,211,219,252,222,255,234,26, +164,105,210,119,30,141,44,117,187,222,191,26,178,186,119,223, +130,98,202,172,111,90,0,196,103,118,218,126,180,119,144,173, +69,150,107,44,117,250,108,215,26,169,183,35,125,233,126,237, +215,126,109,126,127,223,241,105,58,73,250,210,150,186,154,178, +186,119,223,130,242,249,183,204,253,49,176,110,203,52,55,112, +144,245,41,203,53,150,58,125,182,107,141,212,219,145,73,233, +106,141,244,29,43,117,146,244,165,45,117,53,101,117,239,190, +133,228,123,23,95,216,28,116,239,59,118,95,24,242,126,201, +32,91,159,212,198,82,26,80,169,145,122,59,82,166,157,166, +155,42,147,174,83,239,159,164,181,76,218,191,146,178,186,119, +223,2,242,171,95,222,220,28,255,212,199,118,159,216,187,242, +212,147,71,123,7,217,218,164,54,150,108,215,26,169,183,35, +101,218,105,186,169,50,233,58,245,254,73,90,203,164,253,43, +41,171,123,247,45,32,153,56,117,254,62,239,26,237,25,100, +107,148,218,88,178,93,107,164,222,158,36,147,210,101,127,173, +181,244,165,161,181,204,218,95,31,159,180,127,53,100,117,239, +190,153,242,253,203,46,233,222,223,207,63,55,15,178,245,74, +109,44,165,1,149,26,169,183,39,201,164,116,217,95,107,45, +125,105,104,45,179,246,215,199,39,237,95,13,89,221,187,111, +134,120,51,207,167,233,188,130,126,243,141,235,227,239,242,7, +217,116,169,141,165,52,160,82,35,245,118,100,86,186,165,110, +47,117,127,100,210,254,200,172,243,38,29,95,9,89,157,187, +110,1,249,252,91,118,237,62,34,243,179,239,141,127,117,105, +144,173,83,106,35,41,13,167,212,72,189,29,153,149,110,169, +219,75,221,31,153,180,63,50,235,188,73,199,87,66,86,231, +174,155,41,87,158,114,114,55,39,226,7,87,45,239,143,124, +6,89,191,178,92,35,153,148,126,214,117,234,227,217,174,53, +82,111,71,102,237,223,212,227,171,33,107,35,23,203,16,96, +240,73,188,235,191,250,229,209,158,65,54,130,44,215,104,38, +165,159,117,157,250,120,182,107,141,212,219,145,89,251,55,245, +248,106,200,218,200,197,18,229,231,63,249,73,115,220,147,30, +211,124,235,115,103,142,246,12,178,81,164,54,158,165,234,44, +153,148,190,222,31,141,212,219,145,50,237,52,93,170,44,55, +253,45,33,171,123,247,101,136,79,207,157,254,154,151,119,95, +45,30,100,227,73,105,96,203,209,89,50,41,125,189,63,26, +169,183,35,101,218,105,186,84,89,110,250,91,66,86,247,238, +203,144,175,28,248,254,230,218,243,230,254,59,98,144,65,6, +89,57,89,23,144,240,81,219,239,95,122,241,104,107,144,65, +6,89,73,89,243,144,240,189,202,159,245,124,162,110,144,65, +6,89,25,89,55,221,141,65,6,25,100,117,100,128,196,32, +131,12,50,85,6,72,12,50,200,32,83,101,128,196,32,131, +12,50,69,154,230,255,7,191,171,212,35,236,50,144,76,0, +0,0,0,73,69,78,68,174,66,96,130}; + +int cube_image1_sz = sizeof(cube_image1); +int cube_image2_sz = sizeof(cube_image2); +//int cube_image_numbered_sz = sizeof(cube_image_numbered); +int splash_image_sz = sizeof(splash_image); + +
diff -r 000000000000 -r b567d56a59d7 eaLogoImage.c --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/eaLogoImage.c Fri Oct 03 13:30:09 2014 +0000 @@ -0,0 +1,12127 @@ +/***************************************************************************** + * + * Copyright(C) 2013, Embedded Artists AB + * All rights reserved. + * + ****************************************************************************** + * Software that is described herein is for illustrative purposes only + * which provides customers with programming information regarding the + * products. This software is supplied "AS IS" without any warranties. + * Embedded Artists AB assumes no responsibility or liability for the + * use of the software, conveys no license or title under any patent, + * copyright, or mask work right to the product. Embedded Artists AB + * reserves the right to make changes in the software without + * notification. Embedded Artists AB also make no representation or + * warranty that such application will be suitable for the specified + * use without further testing or modification. + *****************************************************************************/ + +const unsigned char eaLogo_image[] = { +66,77,118,244,2,0,0,0,0,0,54,0,0,0,40,0, +0,0,66,1,0,0,200,0,0,0,1,0,24,0,0,0, +0,0,64,244,2,0,19,11,0,0,19,11,0,0,0,0, +0,0,0,0,0,0,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,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,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,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,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,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,255,255,255,164,160,160,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,255,255, +255,255,255,255,64,96,128,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,255,255,255,255,255,255,255,255,255,64, +32,128,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,255,255, +255,255,255,255,255,255,255,240,251,255,0,32,128,240,251,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,255,255,255,255,255,255,255,255,255,255, +255,255,192,220,192,0,32,128,192,192,192,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,192,160,192, +0,0,128,192,192,192,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,0,0,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,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,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,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,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,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,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,128,128,160,0,0,128,192,160, +192,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,0,0,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,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,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,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,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,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,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,64,96,160,0,32,160,128,160,160,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,0,0,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,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,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,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,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,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,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,64,64, +128,0,32,160,128,128,160,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,255, +255,255,255,255,255,255,255,255,255,255,255,255,0,0,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,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,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,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,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,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,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,32,160,0,32,160,128, +128,192,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,255,255,255,255,255,255, +255,255,255,255,0,0,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,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,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,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,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,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,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,192,220,192,0,32,160,0,32,160,128,128,192,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,255,255,255,255,255,255,255,0,0,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,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,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,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,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,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,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,128,160,192,0, +32,160,0,32,160,128,128,160,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, +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,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, +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,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, +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,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, +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,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, +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,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, +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,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, +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,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, +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,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, +255,255,255,255,0,0,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,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,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,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,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,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,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,128,96,160,0,32,160,0,32,160, +192,192,192,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,255,0,0,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,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,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,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,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,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,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,64,64,160,64,32,160,0,32,160,192,192,192,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,32,128, +64,64,160,0,32,160,192,220,192,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,192,192,192,0,32,160,64,64,160,0,32, +128,240,251,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,255,255, +128,128,160,0,32,160,64,64,160,0,32,128,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,255,255,255,255,255,64,64,160,64,32, +160,64,64,160,64,64,160,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,255,255, +255,255,255,255,255,255,0,32,160,64,64,160,0,32,160,64, +96,160,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,255,255,255,255,255,255,255,255,192,192, +192,0,32,160,64,64,160,0,32,160,128,96,160,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,255,255, +255,255,255,255,255,255,255,255,255,128,96,160,0,32,160,64, +64,160,0,32,160,128,128,192,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, +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,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, +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,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, +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,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, +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,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, +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,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, +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,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, +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,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, +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,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,0,0,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,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,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,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,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,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,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,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,64,64,128,64,64,160,64,64,160,0,32,160, +192,192,192,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,0,0,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,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,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,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,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,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,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,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,240,251,255,0, +32,128,64,64,160,64,64,160,0,32,160,192,192,192,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,0,0,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,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,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,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,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,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,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,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,128,160,192,0,32,160,64,64,160, +64,64,160,0,32,128,240,251,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, +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,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, +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,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, +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,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, +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,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, +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,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, +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,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, +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,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, +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,255,255,255,255,255,255,255,255, +255,255,255,255,0,0,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,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,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,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,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,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,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,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,64,64,160,64,32,160,64,64,160,64,64,160,64,64, +160,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,255,255,255,255,255,255,255,255,255,255,255,0,0,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,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,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,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,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,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,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,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,0,32,160, +64,64,160,64,64,160,0,32,160,64,96,160,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,255,255,255,255, +255,255,255,255,0,0,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,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,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,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,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,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,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,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,192,160,192,0,32,160,64,64,160,64,64, +160,0,32,160,128,128,160,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,255,255,255,255,255,0,0,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,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,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,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,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,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,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,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, +64,64,160,64,64,160,64,64,160,64,64,160,0,32,160,192, +192,192,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,255,255,0,0,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,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,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,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,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,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,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,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,32,128,64,64, +160,64,64,160,64,64,160,0,32,160,192,220,192,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,128,160,192,0,32,160,64,64,160,64,64,160,64, +64,160,0,32,160,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,64,64, +160,64,64,160,64,64,160,64,64,160,64,32,160,64,64,128, +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,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, +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,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, +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,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, +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,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, +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,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, +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,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, +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,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, +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,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,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,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,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,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,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,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,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,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,192,220,192,0,32,160,64,64,160,64, +64,160,64,64,160,0,32,160,128,128,192,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,128,128,160,0,32,160,64,64,160,64,64,160,64,64,160, +0,32,160,192,192,192,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,32,160,64, +64,160,64,64,160,64,64,160,64,64,160,0,32,160,240,251, +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,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, +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,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, +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,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, +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,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, +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,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, +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,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, +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,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, +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,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,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,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,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,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,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,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,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,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,164,160,160,0,32,160,64,64,160,64,64,160, +64,64,160,64,64,160,64,64,160,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,255,64, +64,128,64,64,160,64,64,160,64,64,160,64,64,160,0,32, +160,128,96,160,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,255,192,220,192,0,32,160,64,64,160, +64,64,160,64,64,160,64,64,160,0,32,160,192,192,192,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,0,0,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,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,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,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,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,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,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,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,255,255, +255,255,64,96,160,64,64,160,64,64,160,64,64,160,64,64, +160,64,64,160,0,32,128,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,0,0,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,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,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,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,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,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,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,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,255,255,255,255,240,251,255,0,32,160, +64,64,160,64,64,160,64,64,160,64,64,160,64,32,160,64, +64,160,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,0,0,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,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,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,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,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,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,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,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,255,255, +255,255,255,255,255,128,128,160,0,32,160,64,64,160,64,64, +160,64,64,160,64,64,160,0,32,160,128,128,160,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,0,0,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,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,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,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,240,251,255,192,192,192,192,160,192,128,160,192,128, +128,192,64,96,160,64,96,160,64,96,192,64,96,192,0,32, +128,64,64,128,64,32,128,64,64,160,64,96,192,64,96,192, +64,96,160,64,96,160,128,128,192,128,128,160,192,160,224,164, +160,160,192,220,192,240,251,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,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,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,240,251,255, +0,32,160,64,64,160,64,64,160,64,64,160,64,64,160,64, +64,160,0,32,160,192,220,192,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, +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,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, +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,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, +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,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, +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,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, +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,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, +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,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, +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,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, +255,255,255,255,255,255,255,255,255,255,255,255,0,0,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,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,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,255,255,255,240,251,255,192,192,192,128, +128,192,64,96,160,64,64,160,0,32,128,0,32,160,0,32, +160,0,32,160,0,32,160,0,32,160,64,32,160,64,32,160, +64,32,160,64,64,160,64,64,160,64,64,160,64,64,160,64, +64,160,64,64,160,64,32,160,64,32,160,64,32,160,0,32, +160,0,32,160,0,32,160,0,32,160,0,32,160,0,32,160, +0,32,160,0,32,128,64,64,160,128,96,160,128,128,192,164, +160,160,240,251,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,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,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,128,128,192,0,32,160,64,64, +160,64,64,160,64,64,160,64,64,160,64,64,160,64,64,128, +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,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, +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,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, +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,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, +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,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, +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,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, +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,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, +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,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, +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,255,255,255,255,255,255,255,255, +255,255,255,255,0,0,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,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,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,192,192,192,128,128,160,64,64, +160,0,32,160,0,32,160,0,32,160,64,64,160,64,64,160, +64,64,160,64,64,160,64,64,160,64,64,160,64,64,160,64, +64,160,64,64,160,64,64,160,64,64,160,64,64,160,64,64, +160,64,64,160,64,64,160,64,64,160,64,64,160,64,64,160, +64,64,160,64,64,160,64,64,160,64,64,160,64,64,160,64, +64,160,64,64,160,64,64,160,64,64,160,64,64,160,64,64, +160,64,32,160,0,32,160,0,32,160,0,32,160,0,32,160, +64,32,128,128,96,160,128,128,160,192,192,192,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,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,255,255,255,255, +255,255,255,0,32,160,64,64,160,64,64,160,64,64,160,64, +64,160,64,64,160,64,32,160,128,128,160,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,255,255,255,255,255,255,255,255,255,0,0,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,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,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,240,251,255,128,160,192,64,64,160,0,32,160, +0,32,160,0,32,160,64,64,160,64,64,160,64,64,160,64, +64,160,64,64,160,64,64,160,64,64,160,64,64,160,64,64, +160,64,64,160,64,64,160,64,64,160,64,64,160,64,64,160, +64,64,160,64,64,160,64,64,160,64,64,160,64,64,160,64, +64,160,64,64,160,64,64,160,64,64,160,64,64,160,64,64, +160,64,64,160,64,64,160,64,64,160,64,64,160,64,64,160, +64,64,160,64,64,160,64,64,160,64,64,160,64,64,160,64, +64,160,64,64,160,64,64,160,64,64,160,64,32,160,0,32, +160,0,32,160,0,32,160,0,32,128,64,96,160,192,160,192, +192,220,192,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,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,128,128,192,0,32, +160,64,64,160,64,64,160,64,64,160,64,64,160,64,64,160, +0,32,160,192,220,192,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,255,255, +255,255,255,255,0,0,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,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,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,192,160,192,64,64,160,0,32,160,0, +32,160,64,64,160,64,64,160,64,64,160,64,64,160,64,64, +160,64,64,160,64,64,160,64,64,160,64,64,160,64,64,160, +64,64,160,64,64,160,64,64,160,64,64,160,64,64,160,64, +64,160,64,64,160,64,64,160,64,64,160,64,64,160,64,64, +160,64,64,160,64,64,160,64,64,160,64,64,160,64,64,160, +64,64,160,64,64,160,64,64,160,64,64,160,64,64,160,64, +64,160,64,64,160,64,64,160,64,64,160,64,64,160,64,64, +160,64,64,160,64,64,160,64,64,160,64,64,160,64,64,160, +64,64,160,64,64,160,64,64,160,64,64,160,64,64,160,64, +64,160,64,32,160,0,32,160,0,32,160,0,32,128,64,96, +160,128,160,192,192,220,192,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,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,0,32,128,64,64,160,64,64,160,64, +64,160,64,64,160,64,64,160,64,64,160,0,32,128,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,255,255,255,255,255,255,0,0,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,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,255,255, +255,255,255,255,255,240,251,255,128,128,160,0,32,160,0,32, +160,64,64,160,64,64,160,64,64,160,64,64,160,64,64,160, +64,64,160,64,64,160,64,64,160,64,64,160,64,64,160,64, +64,160,64,64,160,64,64,160,64,64,160,64,64,160,64,64, +160,64,64,160,64,64,160,64,64,160,64,64,160,64,64,160, +64,64,160,64,64,160,64,64,160,64,64,160,64,64,160,64, +64,160,64,64,160,64,64,160,64,64,160,64,64,160,64,64, +160,64,64,160,64,64,160,64,64,160,64,64,160,64,64,160, +64,64,160,64,64,160,64,64,160,64,64,160,64,64,160,64, +64,160,64,64,160,64,64,160,64,64,160,64,64,160,64,64, +160,64,64,160,64,64,160,64,64,160,64,64,160,64,64,160, +64,64,160,64,64,160,64,32,160,0,32,160,0,32,160,0, +32,160,64,96,160,192,160,192,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, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,128,128, +160,0,32,160,64,64,160,64,64,160,64,64,160,64,64,160, +64,64,160,0,32,160,128,96,160,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,255,255,255,0,0,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,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,255,192,220,192,128,96,160,0,32,160, +0,32,160,64,64,160,64,64,160,64,64,160,64,64,160,64, +64,160,64,64,160,64,64,160,64,64,160,64,64,160,64,64, +160,64,64,160,64,64,160,64,64,160,64,64,160,64,64,160, +64,64,160,64,64,160,64,64,160,64,64,160,64,64,160,64, +64,160,64,64,160,64,64,160,64,64,160,64,64,160,64,64, +160,64,64,160,64,64,160,64,64,160,64,64,160,64,64,160, +64,64,160,64,64,160,64,64,160,64,64,160,64,64,160,64, +64,160,64,64,160,64,64,160,64,64,160,64,64,160,64,64, +160,64,64,160,64,64,160,64,64,160,64,64,160,64,64,160, +64,64,160,64,64,160,64,64,160,64,64,160,64,64,160,64, +64,160,64,64,160,64,64,160,64,64,160,64,64,160,64,64, +160,64,64,160,64,64,160,64,64,160,64,32,160,0,32,160, +0,32,160,64,64,160,128,160,192,240,251,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,255,255,255,240,251,255,0,32,160,64,64,160,64, +64,160,64,64,160,64,64,160,64,64,160,64,64,160,0,32, +160,192,220,192,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,240,251,255,64,96,160,0, +32,160,64,32,160,64,64,160,64,64,160,64,64,160,64,64, +160,64,64,160,64,64,160,64,64,160,64,64,160,64,64,160, +64,64,160,64,64,160,64,64,160,64,64,160,64,64,160,64, +64,160,64,64,160,64,64,160,64,64,160,64,64,160,64,64, +160,64,64,160,64,64,160,64,64,160,64,64,160,64,64,160, +64,64,160,64,64,160,64,64,160,64,64,160,64,64,160,64, +64,160,64,64,160,64,64,160,64,64,160,64,64,160,64,64, +160,64,64,160,64,64,160,64,64,160,64,64,160,64,64,160, +64,64,160,64,64,160,64,64,160,64,64,160,64,64,160,64, +64,160,64,64,160,64,64,160,64,64,160,64,64,160,64,64, +160,64,64,160,64,64,160,64,64,160,64,64,160,64,64,160, +64,64,160,64,64,160,64,64,160,64,64,160,64,64,160,64, +64,160,64,64,160,64,64,160,64,64,160,0,32,160,0,32, +160,0,32,160,0,32,128,128,96,160,192,192,192,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,128,96,160,64,32,160,64,64,160,64,64,160,64,64,160, +64,64,160,64,64,160,64,64,160,64,64,160,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,128,128, +160,0,32,160,64,64,160,64,64,160,64,64,160,64,64,160, +64,64,160,64,64,160,64,64,160,64,64,160,64,64,160,64, +64,160,64,64,160,64,64,160,64,64,160,64,64,160,64,64, +160,64,64,160,64,64,160,64,64,160,64,64,160,64,64,160, +64,64,160,64,64,160,64,64,160,64,64,160,64,64,160,64, +64,160,64,64,160,64,64,160,64,64,160,64,64,160,64,64, +160,64,64,160,64,64,160,64,64,160,64,64,160,64,64,160, +64,64,160,64,64,160,64,64,160,64,64,160,64,64,160,64, +64,160,64,64,160,64,64,160,64,64,160,64,64,160,64,64, +160,64,64,160,64,64,160,64,64,160,64,64,160,64,64,160, +64,64,160,64,64,160,64,64,160,64,64,160,64,64,160,64, +64,160,64,64,160,64,32,160,0,32,160,0,32,160,0,32, +160,0,32,160,0,32,160,0,32,160,0,32,128,0,32,128, +64,96,160,64,96,160,128,128,160,128,128,160,128,160,192,128, +160,192,128,160,192,192,192,192,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,240,251,255,0,32,160,64, +64,160,64,64,160,64,64,160,64,64,160,64,64,160,64,64, +160,0,32,160,128,128,160,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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, +192,192,192,0,32,160,0,32,160,64,64,160,64,64,160,64, +64,160,64,64,160,64,64,160,64,64,160,64,64,160,64,64, +160,64,64,160,64,64,160,64,64,160,64,64,160,64,64,160, +64,64,160,64,64,160,64,64,160,64,64,160,64,64,160,64, +64,160,64,64,160,64,64,160,64,64,160,64,64,160,64,64, +160,64,64,160,64,64,160,64,64,160,64,64,160,64,64,160, +64,64,160,64,64,160,64,64,160,64,64,160,64,64,160,64, +64,160,64,64,160,64,64,160,64,64,160,64,64,160,64,64, +160,64,64,160,64,64,160,64,64,160,64,64,160,64,64,160, +64,64,160,64,64,160,64,64,160,64,64,160,64,64,160,64, +64,160,64,64,160,64,32,160,0,32,160,0,32,160,0,32, +160,0,32,160,0,32,128,64,64,128,64,96,160,128,96,160, +128,160,192,192,160,192,192,192,192,240,251,255,240,251,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,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,64,64,160,64,64,160,64,64,160,64,64,160, +64,64,160,64,64,160,64,64,160,64,64,160,0,32,160,240, +251,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,64,64,160,0,32,160,64,64,160,64,64, +160,64,64,160,64,64,160,64,64,160,64,64,160,64,64,160, +64,64,160,64,64,160,64,64,160,64,64,160,64,64,160,64, +64,160,64,64,160,64,64,160,64,64,160,64,64,160,64,64, +160,64,64,160,64,64,160,64,64,160,64,64,160,64,64,160, +64,64,160,64,64,160,64,64,160,64,64,160,64,64,160,64, +64,160,64,64,160,64,64,160,64,64,160,64,64,160,64,64, +160,64,64,160,64,64,160,64,64,160,64,64,160,64,64,160, +64,64,160,64,64,160,64,64,160,64,64,160,64,64,160,64, +64,160,64,64,160,64,64,160,64,64,160,64,32,160,0,32, +160,0,32,160,0,32,160,64,32,160,64,64,128,128,128,192, +128,128,192,192,192,192,192,192,192,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,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,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,192,192,192,0, +32,160,64,64,160,64,64,160,64,64,160,64,64,160,64,64, +160,64,64,160,64,64,160,64,64,160,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,192,192,192,0,32,160,64,64,160, +64,64,160,64,64,160,64,64,160,64,64,160,64,64,160,64, +64,160,64,64,160,64,64,160,64,64,160,64,64,160,64,64, +160,64,64,160,64,64,160,64,64,160,64,64,160,64,64,160, +64,64,160,64,64,160,64,64,160,64,64,160,64,64,160,64, +64,160,64,64,160,64,64,160,64,64,160,64,64,160,64,64, +160,64,64,160,64,64,160,64,64,160,64,64,160,64,64,160, +64,64,160,64,64,160,64,64,160,64,64,160,64,64,160,64, +64,160,64,64,160,64,64,160,64,64,160,64,64,160,64,64, +160,64,64,160,64,32,160,0,32,160,0,32,160,0,32,128, +64,64,160,64,96,160,128,160,192,192,192,192,240,251,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,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,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,255,0,32,128,64,64,160,64,64,160, +64,64,160,64,64,160,64,64,160,64,64,160,64,64,160,0, +32,160,192,192,192,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,128,128,160,0, +32,160,64,64,160,64,64,160,64,64,160,64,64,160,64,64, +160,64,64,160,64,64,160,64,64,160,64,64,160,64,64,160, +64,64,160,64,64,160,64,64,160,64,64,160,64,64,160,64, +64,160,64,64,160,64,64,160,64,64,160,64,64,160,64,64, +160,64,64,160,64,64,160,64,64,160,64,64,160,64,64,160, +64,64,160,64,64,160,64,64,160,64,64,160,64,64,160,64, +64,160,64,64,160,64,64,160,64,64,160,64,64,160,64,64, +160,64,64,160,64,64,160,64,64,160,64,64,160,64,64,160, +64,32,160,0,32,160,0,32,160,0,32,128,64,96,160,192, +160,192,192,220,192,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,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,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,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,128, +128,192,0,32,160,64,64,160,64,64,160,64,64,160,64,64, +160,64,64,160,64,64,160,64,64,160,0,32,128,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,255,255,255,255,255,255,255,255,255,255, +255,64,64,128,0,32,160,64,64,160,64,64,160,64,64,160, +64,64,160,64,64,160,64,64,160,64,64,160,64,64,160,64, +64,160,64,64,160,64,64,160,64,64,160,64,64,160,64,64, +160,64,64,160,64,64,160,64,64,160,64,64,160,64,64,160, +64,64,160,64,64,160,64,64,160,64,64,160,64,64,160,64, +64,160,64,64,160,64,64,160,64,64,160,64,64,160,64,64, +160,64,64,160,64,64,160,64,64,160,64,64,160,64,64,160, +64,64,160,64,64,160,64,64,160,64,64,160,64,64,160,0, +32,160,0,32,160,64,32,128,128,96,160,192,160,192,240,251, +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,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, +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,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,240,251,255,0,32,160,64,64,160, +64,64,160,64,64,160,64,64,160,64,64,160,64,64,160,64, +64,160,0,32,160,128,128,160,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, +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,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, +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,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, +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,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, +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,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, +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,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, +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,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, +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,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,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,255,255, +255,255,255,255,255,255,64,64,128,64,32,160,64,64,160,64, +64,160,64,64,160,64,64,160,64,64,160,64,64,160,64,64, +160,64,64,160,64,64,160,64,64,160,64,64,160,64,64,160, +64,64,160,64,64,160,64,64,160,64,64,160,64,64,160,64, +64,160,64,64,160,64,64,160,64,64,160,64,64,160,64,64, +160,64,64,160,64,64,160,64,64,160,64,64,160,64,64,160, +64,64,160,64,64,160,64,64,160,64,64,160,64,64,160,64, +64,160,64,64,160,64,64,160,64,64,160,64,64,160,0,32, +160,0,32,160,64,64,160,128,160,192,192,220,192,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,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,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,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,255,255,255, +255,255,64,96,160,64,64,160,64,64,160,64,64,160,64,64, +160,64,64,160,64,64,160,64,64,160,64,64,160,0,32,128, +240,251,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,255,255,240,251,255,0,32,160,64,64, +160,64,64,160,64,64,160,64,64,160,64,64,160,64,64,160, +64,64,160,64,64,160,64,64,160,64,64,160,64,64,160,64, +64,160,64,64,160,64,64,160,64,64,160,64,64,160,64,64, +160,64,64,160,64,64,160,64,64,160,64,64,160,64,64,160, +64,64,160,64,64,160,64,64,160,64,64,160,64,64,160,64, +64,160,64,64,160,64,64,160,64,64,160,64,64,160,64,64, +160,64,64,160,64,64,160,64,64,160,64,64,160,0,32,160, +0,32,160,64,64,160,192,160,192,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,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,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,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,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,192,192,192,0,32,160, +64,64,160,64,64,160,64,64,160,64,64,160,64,64,160,64, +64,160,64,64,160,64,64,160,64,96,160,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,240,251,255, +64,32,160,64,64,160,64,64,160,64,64,160,64,64,160,64, +64,160,64,64,160,64,64,160,64,64,160,64,64,160,64,64, +160,64,64,160,64,64,160,64,64,160,64,64,160,64,64,160, +64,64,160,64,64,160,64,64,160,64,64,160,64,64,160,64, +64,160,64,64,160,64,64,160,64,64,160,64,64,160,64,64, +160,64,64,160,64,64,160,64,64,160,64,64,160,64,64,160, +64,64,160,64,64,160,64,64,160,64,64,160,64,32,160,0, +32,160,64,64,160,128,160,192,240,251,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,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,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,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,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,32,128,64,64,160,64,64,160,64,64, +160,64,64,160,64,64,160,64,64,160,64,64,160,64,64,160, +0,32,160,192,192,192,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,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,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,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,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,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,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,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,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,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,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,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,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,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,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,0,0,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,32,160,64,64,160,64,64,160,64,64, +160,64,64,160,64,64,160,64,64,160,64,64,160,64,64,160, +64,64,160,64,64,160,64,64,160,64,64,160,64,64,160,64, +64,160,64,64,160,64,64,160,64,64,160,64,64,160,64,64, +160,64,64,160,64,64,160,64,64,160,64,64,160,64,64,160, +64,64,160,64,64,160,64,64,160,64,64,160,64,64,160,64, +64,160,64,64,160,64,64,160,64,64,160,64,64,160,0,32, +160,0,32,160,64,96,160,192,192,192,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,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,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,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,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,128,96,160, +64,32,160,64,64,160,64,64,160,64,64,160,64,64,160,64, +64,160,64,64,160,64,64,160,64,64,160,64,64,160,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,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,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,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,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,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,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,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,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,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,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,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,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,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,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,0,0,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,64,64,160,64,64,160, +64,64,160,64,64,160,64,64,160,64,64,160,64,64,160,64, +64,160,64,64,160,64,64,160,64,64,160,64,64,160,64,64, +160,64,64,160,64,64,160,64,64,160,64,64,160,64,64,160, +64,64,160,64,64,160,64,64,160,64,64,160,64,64,160,64, +64,160,64,64,160,64,64,160,64,64,160,64,64,160,64,64, +160,64,64,160,64,64,160,64,64,160,64,64,160,64,64,160, +64,32,160,0,32,128,128,128,192,240,251,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,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,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,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,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,255,255,192,192,192,0,32,160,64,64,160,64,64, +160,64,64,160,64,64,160,64,64,160,64,64,160,64,64,160, +64,64,160,0,32,160,192,192,192,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,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,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,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,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,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,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,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,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,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,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,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,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,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,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,0,0,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,64, +64,160,64,32,160,64,64,160,64,64,160,64,64,160,64,64, +160,64,64,160,64,64,160,64,64,160,64,64,160,64,64,160, +64,64,160,64,64,160,64,64,160,64,64,160,64,64,160,64, +64,160,64,64,160,64,64,160,64,64,160,64,64,160,64,64, +160,64,64,160,64,64,160,64,64,160,64,64,160,64,64,160, +64,64,160,64,64,160,64,64,160,64,64,160,64,64,160,64, +64,160,0,32,160,0,32,160,128,128,160,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,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,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,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,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,255,255,255,255,255,255,255,255,255,255,255,255,255, +0,32,160,64,64,160,64,64,160,64,64,160,64,64,160,64, +64,160,64,64,160,64,64,160,64,64,160,64,64,160,64,32, +128,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,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,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,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,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,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,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,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,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,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,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,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,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,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,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,0,0,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,128,128,160,0,32,160,64,64,160,64,64,160, +64,64,160,64,64,160,64,64,160,64,64,160,64,64,160,64, +64,160,64,64,160,64,64,160,64,64,160,64,64,160,64,64, +160,64,64,160,64,64,160,64,64,160,64,64,160,64,64,160, +64,64,160,64,64,160,64,64,160,64,64,160,64,64,160,64, +64,160,64,64,160,64,64,160,64,64,160,64,64,160,64,64, +160,64,64,160,64,64,160,0,32,160,128,96,160,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,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,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,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,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,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,128,96,160,64,32,160,64,64, +160,64,64,160,64,64,160,64,64,160,64,64,160,64,64,160, +64,64,160,64,64,160,0,32,160,128,160,192,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,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,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,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,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,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,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,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,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,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,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,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,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,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,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,0,0,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,192,192,192,0,32,160,64, +64,160,64,64,160,64,64,160,64,64,160,64,64,160,64,64, +160,64,64,160,64,64,160,64,64,160,64,64,160,64,64,160, +64,64,160,64,64,160,64,64,160,64,64,160,64,64,160,64, +64,160,64,64,160,64,64,160,64,64,160,64,64,160,64,64, +160,64,64,160,64,64,160,64,64,160,64,64,160,64,64,160, +64,64,160,64,64,160,64,64,160,0,32,160,64,64,160,192, +220,192,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,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,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,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,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,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +192,192,192,0,32,160,64,64,160,64,64,160,64,64,160,64, +64,160,64,64,160,64,64,160,64,64,160,64,64,160,64,64, +160,0,32,128,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,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,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,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,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,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,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,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,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,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,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,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,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,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,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,0,0,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,240,251, +255,0,32,128,64,64,160,64,64,160,64,64,160,64,64,160, +64,64,160,64,64,160,64,64,160,64,64,160,64,64,160,64, +64,160,64,64,160,64,64,160,64,64,160,64,64,160,64,64, +160,64,64,160,64,64,160,64,64,160,64,64,160,64,64,160, +64,64,160,64,64,160,64,64,160,64,64,160,64,64,160,64, +64,160,64,64,160,64,64,160,64,64,160,64,64,160,0,32, +128,128,160,192,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,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,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,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,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,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,32,160,64,64, +160,64,64,160,64,64,160,64,64,160,64,64,160,64,64,160, +64,64,160,64,64,160,64,64,160,0,32,160,128,160,192,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,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,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,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,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,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,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,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,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,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,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,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,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,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,255, +255,255,255,255,255,255,255,255,255,255,255,255,0,0,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,64,64,160,64,32,160,64,64,160,64, +64,160,64,64,160,64,64,160,64,64,160,64,64,160,64,64, +160,64,64,160,64,64,160,64,64,160,64,64,160,64,64,160, +64,64,160,64,64,160,64,64,160,64,64,160,64,64,160,64, +64,160,64,64,160,64,64,160,64,64,160,64,64,160,64,64, +160,64,64,160,64,64,160,64,64,160,64,64,160,64,64,160, +0,32,160,64,64,160,240,251,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, +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,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, +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,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, +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,64,96,160,64,64,160,64,64,160,64,64,160,64, +64,160,64,64,160,64,64,160,64,64,160,64,64,160,64,64, +160,64,64,160,0,32,128,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,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,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,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,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,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,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,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,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,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,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,240,251,255,192,220,192, +192,220,192,192,220,192,192,220,192,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,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,240,251,255,192,220,192,192,220,192, +192,220,192,192,220,192,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,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,192,160,192,0,32, +160,64,64,160,64,64,160,64,64,160,64,64,160,64,64,160, +64,64,160,64,64,160,64,64,160,64,64,160,64,64,160,64, +64,160,64,64,160,64,64,160,64,64,160,64,64,160,64,64, +160,64,64,160,64,64,160,64,64,160,64,64,160,64,64,160, +64,64,160,64,64,160,64,64,160,64,64,160,64,64,160,64, +64,160,64,64,160,0,32,160,128,128,160,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,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,240,251,255,240,251,255,192,192,192,192,192,192,164,160,160, +164,160,160,192,192,192,192,192,192,192,192,192,192,192,192,192, +192,192,192,192,192,192,192,192,192,192,192,192,192,192,192,192, +192,192,192,192,192,192,192,192,192,192,192,192,192,192,192,192, +192,192,192,192,192,192,192,192,192,192,192,192,192,192,192,192, +192,192,192,192,192,192,192,192,192,192,192,192,192,192,192,192, +192,192,192,192,192,192,192,192,192,192,192,192,192,192,192,192, +192,192,192,192,192,192,192,192,160,164,160,160,164,160,160,164, +160,160,164,160,160,164,160,160,164,160,160,164,160,160,192,192, +192,192,192,192,240,251,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,128,160,192,0,32, +160,64,64,160,64,64,160,64,64,160,64,64,160,64,64,160, +64,64,160,64,64,160,64,64,160,64,64,160,0,32,160,192, +160,192,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,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,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,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,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,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,192,192,192,164, +160,160,192,192,192,192,192,192,192,192,192,192,192,192,164,160, +160,192,192,192,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,164,160,160,192,192,192,192, +192,192,192,192,192,192,192,192,192,192,192,164,160,160,255,255, +255,255,255,255,164,160,160,192,192,192,192,192,192,192,192,192, +192,192,160,164,160,160,192,220,192,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,164,160,160,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,164,160,160,240,251,255,255, +255,255,255,255,255,192,192,192,164,160,160,192,192,192,192,192, +192,192,192,192,192,192,160,164,160,160,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,164,160,160,128, +96,96,128,96,96,128,96,96,128,96,96,128,128,96,128,96, +96,128,96,96,128,128,128,192,192,192,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,192,192,192,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,164,160,160,192,220,192,255,255,255, +255,255,255,255,255,255,255,255,255,192,192,192,128,96,96,128, +96,96,128,96,96,128,96,96,128,128,96,128,96,96,128,96, +96,128,96,96,164,160,160,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,0,0,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,0,32,128,64,64,160,64,64,160,64,64,160,64, +64,160,64,64,160,64,64,160,64,64,160,64,64,160,64,64, +160,64,64,160,64,64,160,64,64,160,64,64,160,64,64,160, +64,64,160,64,64,160,64,64,160,64,64,160,64,64,160,64, +64,160,64,64,160,64,64,160,64,64,160,64,64,160,64,64, +160,64,64,160,64,64,160,64,64,160,0,32,160,192,192,192, +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,192,220,192,192,192,192,164,160,160, +128,128,128,128,96,96,64,96,96,128,96,96,128,96,96,128, +128,96,128,128,96,128,128,96,128,128,96,128,128,96,128,128, +96,128,128,96,128,128,96,128,128,96,128,128,96,128,128,96, +128,128,96,128,128,96,128,128,96,128,128,96,128,128,96,128, +128,96,128,128,96,128,128,96,128,128,96,128,128,96,128,128, +96,128,128,96,128,128,96,128,128,96,128,128,96,128,128,96, +128,128,96,128,128,96,128,128,96,128,128,96,128,128,96,128, +128,96,128,128,96,128,128,96,128,128,96,128,128,96,128,128, +96,128,128,96,128,128,96,128,128,96,128,128,96,128,128,96, +128,128,96,128,128,96,128,128,96,128,128,96,128,96,96,128, +96,96,128,128,128,128,128,128,192,220,192,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,192,220,192,0,32,160,64,64,160,64,64,160,64, +64,160,64,64,160,64,64,160,64,64,160,64,64,160,64,64, +160,64,64,160,64,64,160,64,64,160,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,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,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,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,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,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,240,251,255,64,96,96,128,128,96,128,128,96, +128,128,96,128,128,96,128,128,96,128,96,96,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,64,96,96,128,128,96,128,128,96,128,128,96,128,128,96, +128,128,96,64,96,96,255,255,255,255,255,255,128,128,128,128, +128,96,128,128,96,128,128,96,128,128,96,128,96,96,128,128, +128,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,128,128,128,128, +96,96,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,96,96,192,192,192,255,255,255,255,255,255,192,192,192, +128,96,96,128,128,96,128,128,96,128,128,96,128,128,96,64, +96,96,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,128,96,96,128,128,96,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,96,128,96,96,192,192,192,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,164,160,160,128,96,96, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,96,164,160,160,255,255,255,255,255,255,255,255,255,128,128, +96,128,96,96,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,96,64, +96,96,192,192,192,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,0,0,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,128,96,160,0,32,160,64,64, +160,64,64,160,64,64,160,64,64,160,64,64,160,64,64,160, +64,64,160,64,64,160,64,64,160,64,64,160,64,64,160,64, +64,160,64,64,160,64,64,160,64,64,160,64,64,160,64,64, +160,64,64,160,64,64,160,64,64,160,64,64,160,64,64,160, +64,64,160,64,64,160,64,64,160,64,64,160,64,64,160,0, +32,160,240,251,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,192,220,192,164,160,160,128,128,128,64,96,96,128, +96,96,128,128,96,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,96, +128,128,128,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,32, +160,64,64,160,64,64,160,64,64,160,64,64,160,64,64,160, +64,64,160,64,64,160,64,64,160,64,64,160,64,64,160,0, +32,160,192,192,192,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,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,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,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,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,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,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,96,96,192,220,192,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,240,251,255,128,96,96,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,96,96,255,255, +255,255,255,255,164,160,160,128,128,96,128,128,128,128,128,128, +128,128,128,128,128,128,128,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,192,220,192,128,96,96,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,164,160,160,255, +255,255,255,255,255,240,251,255,128,96,96,128,128,128,128,128, +128,128,128,128,128,128,128,128,96,96,192,220,192,255,255,255, +255,255,255,255,255,255,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,96,96, +164,160,160,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,64,96,96,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,255,255,255, +255,255,255,164,160,160,128,128,96,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,96,96,164,160,160, +255,255,255,255,255,255,255,255,255,255,255,255,0,0,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,240,251,255, +0,32,160,64,64,160,64,64,160,64,64,160,64,64,160,64, +64,160,64,64,160,64,64,160,64,64,160,64,64,160,64,64, +160,64,64,160,64,64,160,64,64,160,64,64,160,64,64,160, +64,64,160,64,64,160,64,64,160,64,64,160,64,64,160,64, +64,160,64,64,160,64,64,160,64,64,160,64,64,160,64,64, +160,64,64,160,0,32,128,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,240,251,255,164,160,160,128,96,96,128,96,96,128,128, +96,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,164,160,160,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,64,96,160,64,64,160,64,64,160,64, +64,160,64,64,160,64,64,160,64,64,160,64,64,160,64,64, +160,64,64,160,64,64,160,64,64,160,64,64,160,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,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,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,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,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,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,192,192,192,128,96,96,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,160,128,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,128,96,96,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,96,96,255,255,255,255,255,255,192,192,192,128, +128,96,128,128,128,128,128,128,128,128,128,128,128,128,128,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,192,192,192,128,128,96,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,255,255,255,255,255,255,255,255,255, +64,96,96,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,96,164,160,160,255,255,255,255,255,255,255,255,255,128,96, +96,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,96,96,128,96,96,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,96,96,192,220,192,255,255, +255,255,255,255,255,255,255,192,220,192,128,96,96,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,64,96,96,255,255,255,255,255,255,128,96,96,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,96,96,128,96,96,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,96,96,192,192,192,255,255,255,255,255, +255,255,255,255,0,0,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,64,96,160,64,32,160,64,64,160,64,64, +160,64,64,160,64,64,160,64,64,160,64,64,160,64,64,160, +64,64,160,64,64,160,64,64,160,64,64,160,64,64,160,64, +64,160,64,64,160,64,64,160,64,64,160,64,64,160,64,64, +160,64,64,160,64,64,160,64,64,160,64,64,160,64,64,160, +64,64,160,64,64,160,64,32,160,64,64,160,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,192,192,192,128,128,128,128,96,96,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +164,160,160,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,128,160, +192,0,32,160,64,64,160,64,64,160,64,64,160,64,64,160, +64,64,160,64,64,160,64,64,160,64,64,160,64,64,160,64, +64,160,0,32,160,192,220,192,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, +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,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, +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,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, +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,128,96,96,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,96,96,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,128,96,96,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,96,96,255,255, +255,255,255,255,240,251,255,128,96,96,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,96,192,220,192,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,192,192,192,128,128,96,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,96,96,64,96,96,255, +255,255,255,255,255,255,255,255,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,164,160,160,255,255,255, +255,255,255,192,220,192,128,96,96,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,240,251,255,240,251, +255,128,128,128,128,128,96,128,128,128,128,128,128,128,128,128, +128,128,128,128,96,96,255,255,255,255,255,255,255,255,255,240, +251,255,128,96,96,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,96,96,128,96,96,192,220,192, +240,251,255,128,96,96,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,240,251,255,240,251,255,164,160, +160,128,128,96,128,128,128,128,128,128,128,128,128,128,128,128, +128,96,96,255,255,255,255,255,255,255,255,255,0,0,255,255, +255,255,255,255,255,255,255,255,255,255,240,251,255,0,32,160, +64,64,160,64,64,160,64,64,160,64,64,160,64,64,160,64, +64,160,64,64,160,64,64,160,64,64,160,64,64,160,64,64, +160,64,64,160,64,64,160,64,64,160,64,64,160,64,64,160, +64,64,160,64,64,160,64,64,160,64,64,160,64,64,160,64, +64,160,64,64,160,64,64,160,64,64,160,64,64,160,64,64, +160,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,192,220,192,128,96,96,128,96,96,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,164,160,160,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,192,192,192,0,32,160,64,64,160,64, +64,160,64,64,160,64,64,160,64,64,160,64,64,160,64,64, +160,64,64,160,64,64,160,64,64,160,0,64,160,64,96,160, +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,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, +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,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, +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,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,164,160,160,128,128,96, +128,128,128,128,128,128,128,128,128,128,128,128,128,96,96,192, +220,192,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,128,96,96,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,96,96,255,255,255,255,255,255,255,255,255,128, +96,96,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +96,192,192,192,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,192,192,192,128,128,96,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,164,160, +160,240,251,255,240,251,255,255,255,255,255,255,255,255,255,255, +164,160,160,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,96,255,255,255,255,255,255,240,251,255,128,96, +96,128,128,128,128,128,128,128,128,128,128,128,128,128,96,96, +255,255,255,255,255,255,255,255,255,255,255,255,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,96,192,192, +192,255,255,255,255,255,255,255,255,255,128,96,96,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,240, +251,255,240,251,255,255,255,255,192,220,192,128,96,96,128,128, +128,128,128,128,128,128,128,128,128,128,128,96,96,240,251,255, +255,255,255,255,255,255,255,255,255,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,96,164,160,160,255,255, +255,255,255,255,0,0,255,255,255,255,255,255,255,255,255,255, +255,255,128,128,160,64,32,160,64,64,160,64,64,160,64,64, +160,64,64,160,64,64,160,64,64,160,64,64,160,64,64,160, +64,64,160,64,64,160,64,64,160,64,64,160,64,64,160,64, +64,160,64,64,160,64,64,160,64,64,160,64,64,160,64,64, +160,64,64,160,64,64,160,64,64,160,64,64,160,64,64,160, +64,64,160,0,32,128,240,251,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,128,128,128,128,96, +96,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +164,160,160,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,32,160,64,64,160,64,64,160,64,64,160,64,64,160, +64,64,160,64,64,160,64,64,160,64,64,160,64,64,160,64, +64,160,64,64,160,0,32,160,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, +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,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, +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,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, +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,128,96,96,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,192,192,192,192,192,192, +192,192,192,192,192,192,192,192,192,128,96,96,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,96,96,255,255, +255,255,255,255,255,255,255,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,128,96,96,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,96,192,192,192,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,192,192,192,128,128,96,128,128, +128,128,128,128,128,128,128,128,128,128,64,96,96,255,255,255, +255,255,255,240,251,255,128,96,96,128,128,128,128,128,128,128, +128,128,128,128,128,64,96,96,255,255,255,255,255,255,255,255, +255,255,255,255,164,160,160,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,255,255,255,255,255,255,255, +255,255,128,96,96,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,164,160,160,255,255,255,255,255,255,255,255,255, +255,255,255,64,96,96,128,128,128,128,128,128,128,128,128,128, +128,128,128,96,96,192,220,192,255,255,255,255,255,255,255,255, +255,192,192,192,128,128,96,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,96,255,255,255,255,255,255,0,0,255,255, +255,255,255,255,255,255,255,255,255,255,0,32,160,64,64,160, +64,64,160,64,64,160,64,64,160,64,64,160,64,64,160,64, +64,160,64,64,160,64,64,160,64,64,160,64,64,160,64,64, +160,64,64,160,64,64,160,64,64,160,64,64,160,64,64,160, +64,64,160,64,64,160,64,64,160,64,64,160,64,64,160,64, +64,160,64,64,160,64,64,160,0,32,160,192,220,192,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,192,220,192, +128,96,96,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,164,160,160,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,64,64,128,64,64,160,64, +64,160,64,64,160,64,64,160,64,64,160,64,64,160,64,64, +160,64,64,160,64,64,160,64,64,160,64,64,160,0,32,160, +128,160,192,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,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,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,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,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,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,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,96,128,128,96,128,128,96,128,128,96,128,128, +96,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,96,96,255,255,255,255,255,255,255,255,255,164, +160,160,128,128,96,128,128,128,128,128,128,128,128,128,128,128, +128,128,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,128,96,96,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,96,164,160, +160,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +240,251,255,128,96,96,128,128,128,128,128,128,128,128,128,128, +128,128,128,96,96,192,220,192,255,255,255,255,255,255,128,128, +128,164,160,160,164,160,160,164,160,160,164,160,160,128,128,128, +240,251,255,255,255,255,255,255,255,255,255,255,128,160,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,96, +96,255,255,255,255,255,255,255,255,255,164,160,160,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,255, +255,255,255,255,255,255,255,255,255,255,255,164,160,160,164,160, +160,164,160,160,164,160,160,164,160,160,128,160,128,192,220,192, +255,255,255,255,255,255,255,255,255,164,160,160,128,128,96,128, +128,128,128,128,128,128,128,128,128,128,128,128,96,96,255,255, +255,255,255,255,0,0,255,255,255,255,255,255,255,255,255,192, +160,192,0,32,160,64,64,160,64,64,160,64,64,160,64,64, +160,64,64,160,64,64,160,64,64,160,64,64,160,64,64,160, +64,64,160,64,64,160,64,64,160,64,64,160,64,64,160,64, +64,160,64,64,160,64,64,160,64,64,160,64,64,160,64,64, +160,64,64,160,64,64,160,64,64,160,64,64,160,0,32,160, +192,192,192,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,192,192,192,128,96,96,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,96,128,128,96,128,128,96,128,128,96,128,128, +96,128,128,96,128,96,96,128,96,96,128,96,96,128,128,96, +128,96,96,128,96,96,128,96,96,128,96,96,128,96,96,128, +96,96,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +164,160,160,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,128,96,160,64,32,160,64,64,160,64,64,160,64,64,160, +64,64,160,64,64,160,64,64,160,64,64,160,64,64,160,64, +64,160,64,64,160,64,64,160,64,64,160,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,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,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,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,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,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,192,220,192,128,96,96,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,96,96,255,255, +255,255,255,255,255,255,255,192,192,192,128,128,96,128,128,128, +128,128,128,128,128,128,128,128,128,128,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,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,128,96,96,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,96,164,160,160, +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,240,251, +255,128,128,128,128,96,96,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,96,96,255,255,255,255,255,255,255, +255,255,192,192,192,128,128,96,128,128,128,128,128,128,128,128, +128,128,128,128,64,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,164,160, +160,128,96,96,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,96,96,240,251,255,255,255,255,0,0,255,255, +255,255,255,255,255,255,255,64,64,160,64,64,160,64,64,160, +64,64,160,64,64,160,64,64,160,64,64,160,64,64,160,64, +64,160,64,64,160,64,64,160,64,64,160,64,64,160,64,64, +160,64,64,160,64,64,160,64,64,160,64,64,160,64,64,160, +64,64,160,64,64,160,64,64,160,64,64,160,64,64,160,64, +64,160,0,32,160,128,128,160,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,192,220,192,128,96,96,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,96,128,96,96,128,96,96,128,96,96,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,96,96,128,96,96,128,128, +128,164,160,160,164,160,160,128,160,128,192,192,192,192,192,192, +192,192,192,192,192,192,164,160,160,192,192,192,192,220,192,192, +220,192,192,220,192,192,192,192,192,192,192,192,192,192,240,251, +255,240,251,255,240,251,255,240,251,255,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,164,160,160,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,128,160,192,0,32,160,64, +64,160,64,64,160,64,64,160,64,64,160,64,64,160,64,64, +160,64,64,160,64,64,160,64,64,160,64,64,160,64,64,160, +0,32,160,192,192,192,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,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,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,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,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,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, +128,96,96,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,96,96,255,255,255,255,255,255,255,255,255,240, +251,255,128,96,96,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,96,192,192,192,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,192,192,192,128, +128,96,128,128,128,128,128,128,128,128,128,128,128,128,128,96, +96,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,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,164,160,160,128,96,96,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,96, +96,255,255,255,255,255,255,255,255,255,192,220,192,128,96,96, +128,128,128,128,128,128,128,128,128,128,128,128,128,96,96,192, +220,192,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, +164,160,160,128,96,96,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,96,96,240,251, +255,255,255,255,0,0,255,255,255,255,255,255,240,251,255,0, +32,160,64,64,160,64,64,160,64,64,160,64,64,160,64,64, +160,64,64,160,64,64,160,64,64,160,64,64,160,64,64,160, +64,64,160,64,64,160,64,64,160,64,64,160,64,64,160,64, +64,160,64,64,160,64,64,160,64,64,160,64,64,160,64,64, +160,64,64,160,64,64,160,64,32,160,64,64,160,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,240,251,255,128, +96,96,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,96,64,96,96,128,128,128,164,160,160,192,220, +192,240,251,255,255,255,255,255,255,255,128,96,96,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,96,128,96,96,164,160,160, +192,220,192,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,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +164,160,160,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,192,192,192,0,32,160,64,64,160,64,64,160,64,64,160, +64,64,160,64,64,160,64,64,160,64,64,160,64,64,160,64, +64,160,64,64,160,64,64,160,64,32,160,64,96,160,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,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,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,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,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,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,192,192,192,128,128,96,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,96,96,255,255, +255,255,255,255,255,255,255,255,255,255,128,96,96,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,96,164,160,160,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,192,220,192,128,96,96,128,128,128,128,128,128, +128,128,128,128,128,128,128,96,96,240,251,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,164,160,160,128,128, +96,128,128,128,128,128,128,128,128,128,128,128,128,128,96,96, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,164,160,160,128,96,96,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,255,255,255,255,255,255,255, +255,255,255,255,255,128,96,96,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,96,192,192,192,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,192,192,192,64,96,96,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,64,96,96,255,255,255,255,255,255,0,0,255,255, +255,255,255,255,128,160,192,0,32,160,64,64,160,64,64,160, +64,64,160,64,64,160,64,64,160,64,64,160,64,64,160,64, +64,160,64,64,160,64,64,160,64,64,160,64,64,160,64,64, +160,64,64,160,64,64,160,64,64,160,64,64,160,64,64,160, +64,64,160,64,64,160,64,64,160,64,64,160,64,64,160,0, +32,160,240,251,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,128,96,96,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,96,96,128,128,128,192,192,192,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,96,128,96,96,192, +192,192,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,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,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,164,160,160,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,240,251,255,0,32,160,64, +64,160,64,64,160,64,64,160,64,64,160,64,64,160,64,64, +160,64,64,160,64,64,160,64,64,160,64,64,160,64,64,160, +64,64,160,0,32,128,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,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,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,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,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,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,128,96,96,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,96,96,128,96,96,128,96, +96,128,96,96,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,96,96,255,255,255,255,255,255,255,255,255,255, +255,255,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,240,251,255,128, +96,96,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +96,192,192,192,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,192,192,192,128,128,96,128,128,128,128,128,128,128, +128,128,128,128,128,128,96,96,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,128,96,96,128,128,96, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,96,96,192,192, +192,255,255,255,255,255,255,255,255,255,255,255,255,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,164, +160,160,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,128,128,128,128,128,96,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,96,96,164,160,160,255,255, +255,255,255,255,0,0,255,255,255,255,255,255,64,96,160,64, +64,160,64,64,160,64,64,160,64,64,160,64,64,160,64,64, +160,64,64,160,64,64,160,64,64,160,64,64,160,64,64,160, +64,64,160,64,64,160,64,64,160,64,64,160,64,64,160,64, +64,160,64,64,160,64,64,160,64,64,160,64,64,160,64,64, +160,64,64,160,0,32,160,128,128,192,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,192,192,192,128,128,96,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,64,96,96,164,160,160,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,192,192,160,128,128,96,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,96, +96,164,160,160,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,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,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +164,160,160,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,32,160,64,64,160,64,64,160,64,64,160, +64,64,160,64,64,160,64,64,160,64,64,160,64,64,160,64, +64,160,64,64,160,64,64,160,64,64,160,0,32,160,192,160, +192,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,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,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,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,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,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,164,160,160,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +255,255,255,255,255,255,255,255,255,192,192,192,128,128,96,128, +128,128,128,128,128,128,128,128,128,128,128,128,96,96,255,255, +255,255,255,255,255,255,255,255,255,255,164,160,160,128,128,96, +128,128,128,128,128,128,128,128,128,128,128,128,128,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,128,128,96,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,96,164,160,160,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,240,251,255,128,96, +96,128,128,128,128,128,128,128,128,128,128,128,128,128,128,96, +192,192,192,255,255,255,255,255,255,255,255,255,255,255,255,128, +96,96,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,96,96,164,160,160,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,164,160,160,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,96,96,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,128,128,96,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,96,96, +128,128,128,255,255,255,255,255,255,255,255,255,0,0,255,255, +255,255,255,255,0,32,160,64,64,160,64,64,160,64,64,160, +64,64,160,64,64,160,64,64,160,64,64,160,64,64,160,64, +64,160,64,64,160,64,64,160,64,64,160,64,64,160,64,64, +160,64,64,160,64,64,160,64,64,160,64,64,160,64,64,160, +64,64,160,64,64,160,64,64,160,64,64,160,64,64,128,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,128,96,96,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,96,128,128,128,240,251, +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,64,96,96,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,96,96,192,220,192,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,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,255,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,164,160,160,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,32,128,64, +64,160,64,64,160,64,64,160,64,64,160,64,64,160,64,64, +160,64,64,160,64,64,160,64,64,160,64,64,160,64,64,160, +64,64,160,64,64,160,64,64,160,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,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,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,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,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,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,240,251,255,128,96,96,128,128,128,128,128,128,128, +128,128,128,128,128,128,96,96,255,255,255,255,255,255,255,255, +255,192,220,192,128,96,96,128,128,128,128,128,128,128,128,128, +128,128,128,128,96,96,255,255,255,255,255,255,255,255,255,255, +255,255,192,192,192,128,128,96,128,128,128,128,128,128,128,128, +128,128,128,128,128,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,128, +160,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,128,96,96,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,96,192,192,192,255,255,255,255,255, +255,255,255,255,164,160,160,128,128,96,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,96,128,96,96,192,192,192,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,192,192,192, +128,128,96,128,128,128,128,128,128,128,128,128,128,128,128,128, +96,96,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,192,192,192,128,96,96,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,96,96,164,160,160,255,255,255,255,255,255,255,255, +255,255,255,255,0,0,255,255,255,192,192,192,0,32,160,64, +64,160,64,64,160,64,64,160,64,64,160,64,64,160,64,64, +160,64,64,160,64,64,160,64,64,160,64,64,160,64,64,160, +64,64,160,64,64,160,64,64,160,64,64,160,64,64,160,64, +64,160,64,64,160,64,64,160,64,64,160,64,64,160,64,64, +160,0,32,160,192,192,192,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,192,192,192,128,128,96,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,96,96, +164,160,160,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,164,160,160,128,128,96,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,96,240,251,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,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,255,255,255, +255,255,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +164,160,160,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,64,64,160,64,64,160,64,64,160,64,64,160, +64,64,160,64,64,160,64,64,160,64,64,160,64,64,160,64, +64,160,64,64,160,64,64,160,64,64,160,64,64,160,0,32, +160,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,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,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,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,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,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,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,96, +192,192,192,255,255,255,255,255,255,192,192,192,128,128,96,128, +128,128,128,128,128,128,128,128,128,128,128,128,96,96,255,255, +255,255,255,255,255,255,255,255,255,255,240,251,255,128,96,96, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,96,192, +192,192,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,164,160,160,128,128,96,128,128,128, +128,128,128,128,128,128,128,128,128,128,96,96,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,255,255,255,255,255,255,255,255,255,128,128,96,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,96,128,96,96,164,160,160,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,192,220,192,128,96,96,128,128,128,128,128, +128,128,128,128,128,128,128,128,96,96,192,220,192,255,255,255, +255,255,255,255,255,255,255,255,255,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,64,96,96,128,128,128,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,0,0,255,255, +255,128,128,192,0,32,160,64,64,160,64,64,160,64,64,160, +64,64,160,64,64,160,64,64,160,64,64,160,64,64,160,64, +64,160,64,64,160,64,64,160,64,64,160,64,64,160,64,64, +160,64,64,160,64,64,160,64,64,160,64,64,160,64,64,160, +64,64,160,64,64,160,64,64,160,64,64,160,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,96,164,160,160,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,128,96,96,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,96,96, +240,251,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,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,255,255,255,255,255,255,255,255,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,164,160,160,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,128,128,192,64, +32,160,64,64,160,64,64,160,64,64,160,64,64,160,64,64, +160,64,64,160,64,64,160,64,64,160,64,64,160,64,64,160, +64,64,160,64,64,160,0,32,160,192,160,192,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,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,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,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,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,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,192,192,192,128,128,96,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,255,255,255,255,255, +255,240,251,255,128,96,96,128,128,128,128,128,128,128,128,128, +128,128,128,128,96,96,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,128,96,96,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,164,160,160,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,192, +220,192,128,96,96,128,128,128,128,128,128,128,128,128,128,128, +128,128,96,96,240,251,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,164,160,160,128,128,96,128,128,128,128, +128,128,128,128,128,128,128,128,128,96,96,255,255,255,255,255, +255,255,255,255,128,96,96,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,96,96,164,160,160,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, +64,96,96,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,96,192,192,192,255,255,255,255,255,255,255,255,255,255,255, +255,128,96,96,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,96,96,128,128,128,240,251,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,0,0,255,255,255,64,64,160,64,64,160,64, +64,160,64,64,160,64,64,160,64,64,160,64,64,160,64,64, +160,64,64,160,64,64,160,64,64,160,64,64,160,64,64,160, +64,64,160,64,64,160,64,64,160,64,64,160,64,64,160,64, +64,160,64,64,160,64,64,160,64,64,160,64,64,160,0,32, +160,192,192,192,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,128,96,96,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,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,192,220, +192,128,96,96,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,96,96,192,220,192,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, +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,255,255,255,255,255,255,255,255, +255,255,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +164,160,160,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,128,128,192,0,32,160,64,64,160,64,64,160, +64,64,160,64,64,160,64,64,160,64,64,160,64,64,160,64, +64,160,64,64,160,64,64,160,64,64,160,64,64,160,64,64, +160,64,64,160,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,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,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,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,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,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,128,96,96,128,128,128,128,128,128,128,128,128,128,128,128, +128,96,96,255,255,255,255,255,255,240,251,255,128,96,96,128, +128,128,128,128,128,128,128,128,128,128,128,128,96,96,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +96,96,192,192,192,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,64,96,96,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,96,192,192,192,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,192,192, +192,128,128,96,128,128,128,128,128,128,128,128,128,128,128,128, +128,96,96,240,251,255,255,255,255,255,255,255,128,96,96,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,96, +96,240,251,255,255,255,255,255,255,255,240,251,255,192,220,192, +240,251,255,240,251,255,240,251,255,192,220,192,240,251,255,255, +255,255,255,255,255,255,255,255,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,164,160,160,255,255,255, +255,255,255,255,255,255,255,255,255,128,128,96,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,96,96,240,251, +255,255,255,255,255,255,255,240,251,255,192,220,192,240,251,255, +240,251,255,240,251,255,192,220,192,240,251,255,0,0,255,255, +255,0,32,128,64,64,160,64,64,160,64,64,160,64,64,160, +64,64,160,64,64,160,64,64,160,64,64,160,64,64,160,64, +64,160,64,64,160,64,64,160,64,64,160,64,64,160,64,64, +160,64,64,160,64,64,160,64,64,160,64,64,160,64,64,160, +64,64,160,64,64,160,64,64,160,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,192,220,192,128,96, +96,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +96,96,240,251,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,192,192,192,128,128,96,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,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,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,255,255,255, +255,255,255,255,255,255,255,255,255,255,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,164,160,160,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,128,160,192,0, +32,160,64,64,160,64,64,160,64,64,160,64,64,160,64,64, +160,64,64,160,64,64,160,64,64,160,64,64,160,64,64,160, +64,64,160,64,64,160,64,64,160,0,32,160,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,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,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,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,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,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,164,160,160,128,128,96,128, +128,128,128,128,128,128,128,128,128,128,96,164,160,160,255,255, +255,255,255,255,128,96,96,128,128,128,128,128,128,128,128,128, +128,128,128,128,96,96,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,164,160,160,128,128,96,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,96,128,96,96, +128,128,128,64,96,96,164,160,160,255,255,255,255,255,255,255, +255,255,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,164,160,160,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,240,251,255,128,96,96,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,96,192,192,192,255,255, +255,255,255,255,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,164,160,160,255,255,255,255,255,255,255, +255,255,192,192,192,128,96,96,128,96,96,128,96,96,128,96, +96,128,96,96,128,128,128,255,255,255,255,255,255,255,255,255, +164,160,160,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,96,255,255,255,255,255,255,255,255,255,255,255, +255,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,164,160,160,255,255,255,255,255,255,255,255,255,192, +192,192,128,96,96,128,96,96,128,96,96,128,96,96,128,96, +96,128,128,128,0,0,240,251,255,0,32,160,64,64,160,64, +64,160,64,64,160,64,64,160,64,64,160,64,64,160,64,64, +160,64,64,160,64,64,160,64,64,160,64,64,160,64,64,160, +64,64,160,64,64,160,64,64,160,64,64,160,64,64,160,64, +64,160,64,64,160,64,64,160,64,64,160,0,32,160,192,192, +192,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,192,192,192,128,128,96,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,164,160,160,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,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +96,96,192,220,192,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,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,255,255,255,255,255,255,255,255,255,255,255, +255,255,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +164,160,160,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,192,160,192,0,32,160,64,64,160,64,64,160, +64,64,160,64,64,160,64,64,160,64,64,160,64,64,160,64, +64,160,64,64,160,64,64,160,64,64,160,64,64,160,64,64, +160,0,32,160,192,192,192,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,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,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,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,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,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,128,96,96,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,255,255,255,255,255,255,128,96,96,128, +128,128,128,128,128,128,128,128,128,128,128,128,96,96,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,192,192,192, +128,128,96,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,255,255,255,255,255,255,255,255,255,164,160,160,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,128,96,96,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,96,164,160,160,255,255,255,255,255,255,164,160,160,128, +128,96,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,255,255,255,255,255,255,255,255,255,192,192,192,128,128,96, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,255, +255,255,255,255,255,255,255,255,192,192,192,128,128,96,128,128, +128,128,128,128,128,128,128,128,128,128,128,96,96,240,251,255, +255,255,255,255,255,255,255,255,255,192,192,192,128,128,96,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,255,255, +255,255,255,255,255,255,255,240,251,255,128,96,96,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,0,0,192,192, +192,0,32,160,64,64,160,64,64,160,64,64,160,64,64,160, +64,64,160,64,64,160,64,64,160,64,64,160,64,64,160,64, +64,160,64,64,160,64,64,160,64,64,160,64,64,160,64,64, +160,64,64,160,64,64,160,64,64,160,64,64,160,64,64,160, +64,64,160,64,32,128,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,164,160,160,128,128, +96,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,96,192, +220,192,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,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,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,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,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,164,160,160,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,192,192,192,0, +32,160,64,64,160,64,64,160,64,64,160,64,64,160,64,64, +160,64,64,160,64,64,160,64,64,160,64,64,160,64,64,160, +64,64,160,64,64,160,64,64,160,0,32,160,128,128,160,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,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,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,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,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,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,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,96,96,240,251, +255,255,255,255,64,96,96,128,128,128,128,128,128,128,128,128, +128,128,128,64,96,96,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,240,251,255,128,96,96,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,96,96,255,255,255,64,64,64,128, +96,96,128,128,96,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,96,96,128,96,96,64,64,64, +255,255,255,255,255,255,255,255,255,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,255,255, +255,255,255,255,240,251,255,128,96,96,128,128,128,128,128,128, +128,128,128,128,128,128,128,96,96,192,192,192,255,255,255,255, +255,255,128,160,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,255,255,255,128,128,128,128,96,96, +128,96,96,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,96,96,128,96,96,64,96,96,192,192, +192,255,255,255,64,96,96,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,96,164,160,160,255,255,255,255,255,255,164, +160,160,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,0,0,192,160,192,0,32,160,64,64,160,64, +64,160,64,64,160,64,64,160,64,64,160,64,64,160,64,64, +160,64,64,160,64,64,160,64,64,160,64,64,160,64,64,160, +64,64,160,64,64,160,64,64,160,64,64,160,64,64,160,64, +64,160,64,64,160,64,64,160,0,32,160,128,128,192,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,192,192,192,128,128,96,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,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,64,96, +96,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,164, +160,160,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,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,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +164,160,160,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,192,192,192,0,32,160,64,64,160,64,64,160, +64,64,160,64,64,160,64,64,160,64,64,160,64,64,160,64, +64,160,64,64,160,64,64,160,64,64,160,64,64,160,64,64, +160,64,64,160,64,64,160,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,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,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,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,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,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,192,220,192,128,96,96,128,128,128,128,128,128, +128,128,128,128,128,96,164,160,160,255,255,255,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,64,96,96,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +128,96,96,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,96, +96,255,255,255,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,96,192,220,192,255,255,255,255,255, +255,164,160,160,128,128,96,128,128,128,128,128,128,128,128,128, +128,128,128,64,96,96,255,255,255,255,255,255,255,255,255,164, +160,160,128,128,96,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,96,128,96,96,64,96,96,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,164,160,160,255, +255,255,192,192,192,128,128,96,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,164,160,160,255,255,255,192,192,192,128, +96,96,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,96,96,64,96,96,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,0,0,128,128, +192,64,32,160,64,64,160,64,64,160,64,64,160,64,64,160, +64,64,160,64,64,160,64,64,160,64,64,160,64,64,160,64, +64,160,64,64,160,64,64,160,64,64,160,64,64,160,64,64, +160,64,64,160,64,64,160,64,64,160,64,64,160,64,64,160, +0,32,160,240,251,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,192,192,192,128,128, +96,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,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,128,96,96,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,96,164,160,160,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,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,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,164,160,160,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,240,251,255,0, +32,160,64,64,160,64,64,160,64,64,160,64,64,160,64,64, +160,64,64,160,64,64,160,64,64,160,64,64,160,64,64,160, +64,64,160,64,64,160,64,64,160,64,64,160,0,32,160,240, +251,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,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,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,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,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,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,128, +96,96,128,128,128,128,128,128,128,128,128,128,128,128,128,96, +96,255,255,255,128,96,96,128,128,128,128,128,128,128,128,128, +128,128,128,64,96,96,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,164,160,160,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,164,160,160,128,96,96, +128,128,128,128,128,128,128,128,96,192,220,192,164,160,160,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,96, +192,192,192,255,255,255,255,255,255,192,220,192,128,96,96,128, +128,128,128,128,128,128,128,128,128,128,128,128,96,96,240,251, +255,255,255,255,255,255,255,255,255,255,128,128,128,128,128,96, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,96,96,192,220,192,255,255,255,192,220,192,128,128,96, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,255,255,255,255,255,255,164,160,160,128,96,96,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,96, +96,192,192,192,0,0,128,128,192,64,32,160,64,64,160,64, +64,160,64,64,160,64,64,160,64,64,160,64,64,160,64,64, +160,64,64,160,64,64,160,64,64,160,64,64,160,64,64,160, +64,64,160,64,64,160,64,64,160,64,64,160,64,64,160,64, +64,160,64,64,160,64,64,160,64,64,160,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,192,192,192,128,128,96,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,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,128,96, +96,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,96,164, +160,160,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,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,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +164,160,160,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,240,251,255,0,32,160,64,64,160,64,64,160, +64,64,160,64,64,160,64,64,160,64,64,160,64,64,160,64, +64,160,64,64,160,64,64,160,64,64,160,64,64,160,64,64, +160,64,64,160,0,32,160,192,160,192,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,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,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,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,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,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,192,192,192,128,128,96,128,128,128, +128,128,128,128,128,128,128,96,96,240,251,255,164,160,160,128, +128,128,128,128,128,128,128,128,128,128,128,128,96,96,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +192,192,192,128,128,96,128,128,128,128,128,128,128,128,128,128, +128,96,164,160,160,192,192,192,128,96,96,128,128,128,128,128, +96,192,192,192,192,220,192,128,96,96,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,255,255,255,255,255, +255,255,255,255,128,96,96,128,128,128,128,128,128,128,128,128, +128,128,128,128,96,96,192,192,192,255,255,255,255,255,255,255, +255,255,255,255,255,164,160,160,128,96,96,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,96,96,164,160,160,255,255,255,255, +255,255,240,251,255,64,96,96,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,96,96,255,255,255,255,255,255,255, +255,255,164,160,160,64,96,96,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,96,96,128,128,128,255,255,255,0,0,64,96, +160,64,64,160,64,64,160,64,64,160,64,64,160,64,64,160, +64,64,160,64,64,160,64,64,160,64,64,160,64,64,160,64, +64,160,64,64,160,64,64,160,64,64,160,64,64,160,64,64, +160,64,64,160,64,64,160,64,64,160,64,64,160,0,32,160, +128,160,192,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,192,192,192,128,128, +96,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,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,64,96,96,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,164,160,160,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,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,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,164,160,160,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,240,251,255,0, +32,160,64,64,160,64,64,160,64,64,160,64,64,160,64,64, +160,64,64,160,64,64,160,64,64,160,64,64,160,64,64,160, +64,64,160,64,64,160,64,64,160,64,64,160,64,32,160,128, +96,160,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,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,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,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,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,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,128,96,96,128,128,128,128,128,128,128,128,128,128,128, +128,164,160,160,164,160,160,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,96,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,192,220,192,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,164,160,160,255,255,255, +192,192,192,128,96,96,128,96,96,128,128,128,240,251,255,128, +128,96,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,255,255,255,255,255,255,255,255,255,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,164,160, +160,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +240,251,255,128,128,128,128,96,96,128,96,96,128,128,96,128, +128,96,128,128,96,128,128,96,128,96,96,128,96,96,192,192, +192,255,255,255,255,255,255,255,255,255,255,255,255,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,96, +96,240,251,255,255,255,255,255,255,255,255,255,255,240,251,255, +164,160,160,128,96,96,128,96,96,128,128,96,128,128,96,128, +128,96,128,128,96,128,96,96,128,96,96,192,192,192,255,255, +255,255,255,255,0,0,64,96,160,64,64,160,64,64,160,64, +64,160,64,64,160,64,64,160,64,64,160,64,64,160,64,64, +160,64,64,160,64,64,160,64,64,160,64,64,160,64,64,160, +64,64,160,64,64,160,64,64,160,64,64,160,64,64,160,64, +64,160,64,64,160,0,32,160,240,251,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,192,192,192,128,128,96,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,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,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,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,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,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +164,160,160,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,240,251,255,0,32,160,64,64,160,64,64,160, +64,64,160,64,64,160,64,64,160,64,64,160,64,64,160,64, +64,160,64,64,160,64,64,160,64,64,160,64,64,160,64,64, +160,64,64,160,64,64,160,64,64,128,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,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,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,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,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,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,164,160,160,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,96,164,160,160,128, +128,128,128,128,128,128,128,128,128,128,128,128,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,255,255,255,255,255,255,255,255,192,192, +192,192,192,192,255,255,255,255,255,255,255,255,255,192,192,192, +128,128,96,128,128,128,128,128,128,128,128,128,128,128,128,128, +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,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,192,220,192,192,192,192,192,192,192,192,192,192,192,192,192, +240,251,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,240,251,255,128,96, +96,128,128,128,128,128,128,128,128,128,128,128,128,128,96,96, +240,251,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,240,251, +255,192,192,192,192,192,192,192,192,192,192,192,192,240,251,255, +255,255,255,255,255,255,255,255,255,255,255,255,0,0,64,96, +160,64,64,160,64,64,160,64,64,160,64,64,160,64,64,160, +64,64,160,64,64,160,64,64,160,64,64,160,64,64,160,64, +64,160,64,64,160,64,64,160,64,64,160,64,64,160,64,64, +160,64,64,160,64,64,160,64,64,160,64,64,160,64,64,160, +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,192,192,192,128,128, +96,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,164, +160,160,164,160,160,192,192,192,192,220,192,240,251,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,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,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,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,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,164,160,160,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,240,251,255,0, +32,160,64,64,160,64,64,160,64,64,160,64,64,160,64,64, +160,64,64,160,64,64,160,64,64,160,64,64,160,64,64,160, +64,64,160,64,64,160,64,64,160,64,64,160,64,64,160,0, +32,160,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,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,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,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,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,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,240,251,255,128,96,96,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,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,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,192,220,192,128,96,96,128,128,128,128,128, +128,128,128,128,128,128,128,128,96,96,192,220,192,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,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,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,128,96,96,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,96,192,192,192,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,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,0,0,64,96,160,64,64,160,64,64,160,64, +64,160,64,64,160,64,64,160,64,64,160,64,64,160,64,64, +160,64,64,160,64,64,160,64,64,160,64,64,160,64,64,160, +64,64,160,64,64,160,64,64,160,64,64,160,64,64,160,64, +64,160,64,32,160,128,128,192,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,192,192,192,128,128,96,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,96,128,128,96, +128,96,96,128,96,96,128,96,96,128,96,96,128,128,128,164, +160,160,192,192,192,192,220,192,240,251,255,255,255,255,192,192, +192,128,128,96,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,164,160,160,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,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,255,255,255,255,255,255,255,255,255,255,255, +255,255,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +164,160,160,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,240,251,255,0,32,160,64,64,160,64,64,160, +64,64,160,64,64,160,64,64,160,64,64,160,64,64,160,64, +64,160,64,64,160,64,64,160,64,64,160,64,64,160,64,64, +160,64,64,160,64,64,160,0,32,160,192,192,192,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,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,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,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,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,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,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,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,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, +64,96,96,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,96,192,192,192,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,192,192,192,64,96,96,64,96,96,64,96,96, +64,96,96,64,96,96,64,96,64,240,251,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,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,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,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,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,0,0,64,64, +160,64,64,160,64,64,160,64,64,160,64,64,160,64,64,160, +64,64,160,64,64,160,64,64,160,64,64,160,64,64,160,64, +64,160,64,64,160,64,64,160,64,64,160,64,64,160,64,64, +160,64,64,160,64,64,160,64,64,160,0,32,160,192,192,192, +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,192,192,192,128,128, +96,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,96,128,96,96, +128,96,96,128,96,96,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,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,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,255,255,255, +255,255,255,255,255,255,255,255,255,255,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,164,160,160,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,240,251,255,0, +32,160,64,64,160,64,64,160,64,64,160,64,64,160,64,64, +160,64,64,160,64,64,160,64,64,160,64,64,160,64,64,160, +64,64,160,64,64,160,64,64,160,64,64,160,64,64,160,0, +32,160,128,160,192,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,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,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,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,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,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,192,192,192,128,128,96,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,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,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,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,164,160,160,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,128, +96,96,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +96,192,192,192,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,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,164,160,160,128,128,96,128,128,128,128, +128,128,128,128,128,128,128,128,128,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,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,0,0,64,64,160,64,64,160,64,64,160,64, +64,160,64,64,160,64,64,160,64,64,160,64,64,160,64,64, +160,64,64,160,64,64,160,64,64,160,64,64,160,64,64,160, +64,64,160,64,64,160,64,64,160,64,64,160,64,64,160,64, +64,160,0,32,160,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,192,192,192,128,128,96,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,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, +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,255,255,255,255,255,255,255,255, +255,255,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +164,160,160,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,240,251,255,0,32,160,64,64,160,64,64,160, +64,64,160,64,64,160,64,64,160,64,64,160,64,64,160,64, +64,160,64,64,160,64,64,160,64,64,160,64,64,160,64,64, +160,64,64,160,64,64,160,64,32,160,128,96,160,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,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,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,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,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,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,255,255,255, +128,96,96,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,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,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, +164,160,160,128,128,96,128,128,128,128,128,128,128,128,128,128, +128,128,128,96,96,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,128,128,96,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,96,164,160,160,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,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,192,192, +192,128,128,96,128,128,128,128,128,128,128,128,128,128,128,128, +128,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,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,0,0,64,64, +160,64,64,160,64,64,160,64,64,160,64,64,160,64,64,160, +64,64,160,64,64,160,64,64,160,64,64,160,64,64,160,64, +64,160,64,64,160,64,64,160,64,64,160,64,64,160,64,64, +160,64,64,160,64,64,160,64,64,160,64,32,128,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,192,192,192,128,128, +96,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,96, +164,160,160,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,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,255,255,255,255,255,255,255,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,164,160,160,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,240,251,255,0, +32,160,64,64,160,64,64,160,64,64,160,64,64,160,64,64, +160,64,64,160,64,64,160,64,64,160,64,64,160,64,64,160, +64,64,160,64,64,160,64,64,160,64,64,160,64,64,160,64, +64,160,64,64,160,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,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,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,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,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,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,255,255,255,164,160,160,128,128,96,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,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,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,192,192,192,128,96,96,128,128, +96,128,128,96,128,128,96,128,128,96,64,96,96,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,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,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,240,251,255,128,96,96,128,128,96,128, +128,96,128,128,96,128,128,96,128,96,96,192,192,192,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,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,0,0,64,96,160,64,64,160,64,64,160,64, +64,160,64,64,160,64,64,160,64,64,160,64,64,160,64,64, +160,64,64,160,64,64,160,64,64,160,64,64,160,64,64,160, +64,64,160,64,64,160,64,64,160,64,64,160,64,64,160,64, +32,160,128,128,160,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,192,192,192,128,128,96,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,96,96,164,160,160,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,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,255,255, +255,255,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +164,160,160,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,192,192,192,0,32,160,64,64,160,64,64,160, +64,64,160,64,64,160,64,64,160,64,64,160,64,64,160,64, +64,160,64,64,160,64,64,160,64,64,160,64,64,160,64,64, +160,64,64,160,64,64,160,64,64,160,0,32,128,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,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,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,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,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,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,255,255,255, +255,255,255,128,96,96,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,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,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, +240,251,255,164,160,160,164,160,160,164,160,160,164,160,160,164, +160,160,164,160,160,240,251,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,192,192,192,128,96,96,128,128,128, +128,128,128,128,128,128,128,128,128,128,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,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,164,160,160,164,160,160,164,160,160,164,160,160,164,160,160, +164,160,160,192,220,192,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,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,0,0,64,96, +160,64,64,160,64,64,160,64,64,160,64,64,160,64,64,160, +64,64,160,64,64,160,64,64,160,64,64,160,64,64,160,64, +64,160,64,64,160,64,64,160,64,64,160,64,64,160,64,64, +160,64,64,160,64,64,160,0,32,160,128,160,192,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,192,192,192,128,128, +96,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,96,128,128,128,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,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,255,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,164,160,160,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,192,192,192,0, +32,160,64,64,160,64,64,160,64,64,160,64,64,160,64,64, +160,64,64,160,64,64,160,64,64,160,64,64,160,64,64,160, +64,64,160,64,64,160,64,64,160,64,64,160,64,64,160,64, +64,160,0,32,160,240,251,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,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,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,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,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,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,255,255,255,255,164,160,160,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,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,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,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,240, +251,255,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,240,251,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,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,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,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,0,0,64,96,160,64,64,160,64,64,160,64, +64,160,64,64,160,64,64,160,64,64,160,64,64,160,64,64, +160,64,64,160,64,64,160,64,64,160,64,64,160,64,64,160, +64,64,160,64,64,160,64,64,160,64,64,160,64,64,160,0, +32,160,192,192,192,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,192,192,192,128,128,96,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,96,96,192,192,192,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,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,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +164,160,160,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,192,192,192,0,32,160,64,64,160,64,64,160, +64,64,160,64,64,160,64,64,160,64,64,160,64,64,160,64, +64,160,64,64,160,64,64,160,64,64,160,64,64,160,64,64, +160,64,64,160,64,64,160,64,64,160,0,32,160,192,192,192, +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,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, +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,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, +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,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, +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,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, +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,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, +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,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, +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,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,0,0,64,96, +160,64,64,160,64,64,160,64,64,160,64,64,160,64,64,160, +64,64,160,64,64,160,64,64,160,64,64,160,64,64,160,64, +64,160,64,64,160,64,64,160,64,64,160,64,64,160,64,64, +160,64,64,160,64,64,160,0,32,160,240,251,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,192,192,192,128,128, +96,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +96,96,128,96,96,128,128,96,128,128,96,128,128,96,128,128, +96,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,96,128, +96,96,192,192,160,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,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,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,164,160,160,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,128,160,192,0, +32,160,64,64,160,64,64,160,64,64,160,64,64,160,64,64, +160,64,64,160,64,64,160,64,64,160,64,64,160,64,64,160, +64,64,160,64,64,160,64,64,160,64,64,160,64,64,160,64, +64,160,0,32,160,128,160,192,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, +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,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, +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,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, +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,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, +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,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, +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,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, +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,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, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,0,0,128,128,192,64,32,160,64,64,160,64, +64,160,64,64,160,64,64,160,64,64,160,64,64,160,64,64, +160,64,64,160,64,64,160,64,64,160,64,64,160,64,64,160, +64,64,160,64,64,160,64,64,160,64,64,160,64,64,160,0, +32,128,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,192,192,192,128,128,96,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,96,164,160,160,192,220,192,192,220,192,192,192,192, +192,192,192,192,192,192,164,160,160,164,160,160,128,128,128,128, +128,128,128,96,96,128,96,96,128,96,96,128,128,96,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,96,128,96,96, +164,160,160,240,251,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,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +164,160,160,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,128,128,192,0,32,160,64,64,160,64,64,160, +64,64,160,64,64,160,64,64,160,64,64,160,64,64,160,64, +64,160,64,64,160,64,64,160,64,64,160,64,64,160,64,64, +160,64,64,160,64,64,160,64,64,160,0,32,160,128,160,192, +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,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, +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,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, +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,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, +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,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, +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,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, +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,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, +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,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,0,0,128,128, +192,64,32,160,64,64,160,64,64,160,64,64,160,64,64,160, +64,64,160,64,64,160,64,64,160,64,64,160,64,64,160,64, +64,160,64,64,160,64,64,160,64,64,160,64,64,160,64,64, +160,64,64,160,64,64,160,64,64,128,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,192,192,192,128,128, +96,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,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, +240,251,255,192,192,192,164,160,160,128,128,128,128,96,96,128, +96,96,128,128,96,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,96,128,96,96,128,128, +96,164,160,160,192,192,192,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,255, +255,255,255,255,255,255,255,255,255,255,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,164,160,160,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,128,128,192,64, +32,160,64,64,160,64,64,160,64,64,160,64,64,160,64,64, +160,64,64,160,64,64,160,64,64,160,64,64,160,64,64,160, +64,64,160,64,64,160,64,64,160,64,64,160,64,64,160,64, +64,160,64,32,160,128,128,160,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, +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,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, +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,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, +255,255,255,255,255,255,255,255,255,255,255,255,255,192,220,192, +192,192,192,192,192,192,240,251,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,192,192,192, +192,192,160,192,192,192,192,192,192,192,192,192,192,220,192,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,192,220,192,192,192,192,192,192,192,240,251,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,255,255,255,255,255,255,255,255,255,192, +220,192,192,192,192,192,192,192,192,220,192,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,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,192,220,192,192,192,192,192,192,192,192,192,192,192,192,192, +192,220,192,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,192,220,192,192,192,192,192,192,192, +192,220,192,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,128,160,192,0,32,160,64,64,160,64, +64,160,64,64,160,64,64,160,64,64,160,64,64,160,64,64, +160,64,64,160,64,64,160,64,64,160,64,64,160,64,64,160, +64,64,160,64,64,160,64,64,160,64,64,160,64,64,160,64, +96,160,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,192,192,192,128,128,96,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,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,255,255,255,255, +255,255,255,255,255,255,255,192,220,192,164,160,160,128,96,96, +128,96,96,128,128,96,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,96,128, +96,96,128,128,96,164,160,160,192,192,192,192,220,192,240,251, +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,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +164,160,160,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,64,96,160,64,64,160,64,64,160,64,64,160, +64,64,160,64,64,160,64,64,160,64,64,160,64,64,160,64, +64,160,64,64,160,64,64,160,64,64,160,64,64,160,64,64, +160,64,64,160,64,64,160,64,64,160,64,64,160,64,64,128, +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,192,220,192,128,128,128,164,160,160,164,160,160, +164,160,160,164,160,160,164,160,160,164,160,160,164,160,160,164, +160,160,164,160,160,164,160,160,164,160,160,164,160,160,164,160, +160,164,160,160,128,128,128,192,220,192,255,255,255,255,255,255, +164,160,160,128,160,128,164,160,160,164,160,160,164,160,160,128, +160,128,164,160,160,255,255,255,255,255,255,255,255,255,164,160, +160,164,160,160,164,160,160,164,160,160,164,160,160,128,128,128, +192,192,192,255,255,255,255,255,255,240,251,255,128,128,128,164, +160,160,164,160,160,164,160,160,164,160,160,128,128,128,240,251, +255,255,255,255,255,255,255,192,192,192,128,128,128,164,160,160, +164,160,160,164,160,160,128,160,128,164,160,160,255,255,255,192, +220,192,64,96,96,128,96,96,128,128,96,128,128,96,128,96, +96,128,128,128,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,192,220,192,128, +128,128,64,96,96,128,128,96,128,128,96,128,128,96,128,128, +96,128,128,96,128,96,96,64,96,96,164,160,160,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,240,251,255,128,96,96,128,96,96,128,128, +96,128,128,96,128,96,96,128,128,128,255,255,255,255,255,255, +128,128,128,164,160,160,164,160,160,164,160,160,164,160,160,128, +128,128,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,128,96,96,128,96,96,128,128,96,128,128,96, +128,96,96,128,128,96,255,255,255,255,255,255,128,128,128,164, +160,160,164,160,160,164,160,160,164,160,160,128,128,128,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +192,220,192,128,128,128,64,96,96,128,128,96,128,128,96,128, +128,96,128,128,96,128,128,96,128,96,96,128,96,96,164,160, +160,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,128,128,128,128, +96,96,128,128,96,128,128,96,128,96,96,128,128,96,240,251, +255,255,255,255,128,128,128,164,160,160,164,160,160,164,160,160, +164,160,160,128,128,128,240,251,255,255,255,255,0,0,192,160, +192,0,32,160,64,64,160,64,64,160,64,64,160,64,64,160, +64,64,160,64,64,160,64,64,160,64,64,160,64,64,160,64, +64,160,64,64,160,64,64,160,64,64,160,64,64,160,64,64, +160,64,64,160,64,32,160,128,128,192,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,192,192,192,128,128, +96,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,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,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,240,251,255,164,160,160,128,96, +96,128,128,96,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,96,128,96,96,128,96,96,128,96,96,128,128,128,128, +128,128,164,160,160,164,160,160,192,192,192,192,192,192,164,160, +160,192,220,192,192,220,192,164,160,160,128,96,96,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,164,160,160,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,64,64,160,64, +64,160,64,64,160,64,64,160,64,64,160,64,64,160,64,64, +160,64,64,160,64,64,160,64,64,160,64,64,160,64,64,160, +64,64,160,64,64,160,64,64,160,64,64,160,64,64,160,64, +64,160,64,64,160,64,96,160,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,192,192,192,128, +96,96,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,96,96,192, +192,192,255,255,255,255,255,255,128,128,128,128,128,96,128,128, +128,128,128,128,128,128,128,128,128,96,128,128,128,255,255,255, +255,255,255,255,255,255,128,128,128,128,128,96,128,128,128,128, +128,128,128,128,128,128,96,96,164,160,160,255,255,255,255,255, +255,240,251,255,128,96,96,128,128,128,128,128,128,128,128,128, +128,128,128,128,96,96,192,220,192,255,255,255,255,255,255,192, +192,192,128,96,96,128,128,128,128,128,128,128,128,128,128,128, +96,128,160,128,192,192,192,128,96,96,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,96,128,128,128,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,164,160,160,128,96,96,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,96,128,96,96,240,251,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,64,96,96, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,96,96,255,255,255,64,96,96,128,128,128,128,128, +128,128,128,128,128,128,128,64,96,96,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,128,96,96,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,96, +96,255,255,255,128,96,96,128,128,128,128,128,128,128,128,128, +128,128,128,64,96,96,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,164,160,160,128,96,96,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,96,128,96,96,240,251,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,128,96,96,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,96,96,255,255,255,128,96,96,128, +128,96,128,128,128,128,128,128,128,128,128,128,96,96,192,220, +192,255,255,255,0,0,192,192,192,0,32,160,64,64,160,64, +64,160,64,64,160,64,64,160,64,64,160,64,64,160,64,64, +160,64,64,160,64,64,160,64,64,160,64,64,160,64,64,160, +64,64,160,64,64,160,64,64,160,64,64,160,0,32,160,128, +128,192,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,192,192,192,128,128,96,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,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,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,192,192,192,128,96,96,128, +128,96,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,96,128,128,96,128,128,96,128,96,96,128,128,96,128, +128,96,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +164,160,160,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,32,160,64,64,160,64,64,160,64,64,160, +64,64,160,64,64,160,64,64,160,64,64,160,64,64,160,64, +64,160,64,64,160,64,64,160,64,64,160,64,64,160,64,64, +160,64,64,160,64,64,160,64,64,160,64,64,160,64,64,160, +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,192,192,192,128,128,96,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,96,192,192,192,255,255,255,255,255,255, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,255,255,255,255,255,255,255,255,255,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,96, +164,160,160,255,255,255,255,255,255,240,251,255,128,96,96,128, +128,128,128,128,128,128,128,128,128,128,128,128,96,96,192,220, +192,255,255,255,255,255,255,192,192,192,128,128,96,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,96,96,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,96,96,192,192,192,255,255,255,255,255,255, +255,255,255,255,255,255,164,160,160,128,96,96,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,96,96,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,164,160,160,128,128,96,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,96,96,128,128,128,128,128,128,128,128,128,128,128,128,128, +96,96,255,255,255,255,255,255,255,255,255,255,255,255,164,160, +160,128,128,96,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,96,96,255,255, +255,255,255,255,255,255,255,255,255,255,192,192,192,128,96,96, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,96,96,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,164,160,160,128,128,96,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,96,96,192,220,192,255,255,255,0,0,240,251, +255,0,32,160,64,64,160,64,64,160,64,64,160,64,64,160, +64,64,160,64,64,160,64,64,160,64,64,160,64,64,160,64, +64,160,64,64,160,64,64,160,64,64,160,64,64,160,64,64, +160,64,64,160,0,32,160,192,160,224,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,192,192,192,128,128, +96,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,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,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,192,192,192,128,96,96,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,164,160,160,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,240,251,255,0,32,160,64, +64,160,64,64,160,64,64,160,64,64,160,64,64,160,64,64, +160,64,64,160,64,64,160,64,64,160,64,64,160,64,64,160, +64,64,160,64,64,160,64,64,160,64,64,160,64,64,160,64, +64,160,64,64,160,0,32,128,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,192,192,192,128, +128,96,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,96,192, +192,192,255,255,255,255,255,255,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,255,255,255, +255,255,255,255,255,255,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,96,164,160,160,255,255,255,255,255, +255,240,251,255,128,96,96,128,128,128,128,128,128,128,128,128, +128,128,128,128,96,96,192,220,192,255,255,255,255,255,255,192, +192,192,128,128,96,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,255,255,255,255,255,255,255,255,255,255,255,255,128,96, +96,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,96,128,128,96,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,96,192,192,192,255,255, +255,255,255,255,255,255,255,255,255,255,64,96,96,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,96,96,255,255,255,255,255,255, +255,255,255,255,255,255,128,96,96,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,96,96,255,255,255,255,255,255,255,255,255,255, +255,255,128,96,96,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,96,128,128,96,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,96,164, +160,160,255,255,255,255,255,255,255,255,255,255,255,255,128,96, +96,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,96,96,192,220, +192,255,255,255,0,0,255,255,255,0,32,160,64,64,160,64, +64,160,64,64,160,64,64,160,64,64,160,64,64,160,64,64, +160,64,64,160,64,64,160,64,64,160,64,64,160,64,64,160, +64,64,160,64,64,160,64,64,160,64,64,160,0,32,160,164, +160,160,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,192,192,192,128,128,96,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,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,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,255,128,128,128,128,96,96,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +164,160,160,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,192,192,192,0,32,160,64,64,160,64,64,160,64,64,160, +64,64,160,64,64,160,64,64,160,64,64,160,64,64,160,64, +64,160,64,64,160,64,64,160,64,64,160,64,64,160,64,64, +160,64,64,160,64,64,160,64,64,160,64,64,160,0,32,160, +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,192,192,192,128,128,96,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,96,192,192,192,255,255,255,255,255,255, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,255,255,255,255,255,255,255,255,255,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,96, +164,160,160,255,255,255,255,255,255,240,251,255,128,96,96,128, +128,128,128,128,128,128,128,128,128,128,128,128,96,96,192,220, +192,255,255,255,255,255,255,192,192,192,128,128,96,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +96,96,128,96,96,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,96,96,255,255,255,255,255,255, +255,255,255,192,192,192,128,128,96,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,192,192,192,164,160, +160,128,128,96,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,255,255,255,255,255,255,255,255,255,192, +220,192,128,96,96,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,96,96,128,96,96,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +96,96,255,255,255,255,255,255,255,255,255,192,220,192,128,96, +96,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,96,96,128,96,96,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,96,96,255,255, +255,255,255,255,255,255,255,192,192,192,128,128,96,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,96,96,192, +192,192,192,192,192,128,96,96,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,96,96,255,255,255,255,255,255, +255,255,255,240,251,255,128,96,96,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,96,96,128,96, +96,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,96,96,192,220,192,255,255,255,0,0,255,255, +255,0,32,128,64,64,160,64,64,160,64,64,160,64,64,160, +64,64,160,64,64,160,64,64,160,64,64,160,64,64,160,64, +64,160,64,64,160,64,64,160,64,64,160,64,64,160,64,64, +160,64,64,160,0,32,160,192,192,192,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,192,192,192,128,128, +96,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,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,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,255,255,255,255, +192,192,192,128,96,96,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,164,160,160,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,128,128,192,0,32,160,64, +64,160,64,64,160,64,64,160,64,64,160,64,64,160,64,64, +160,64,64,160,64,64,160,64,64,160,64,64,160,64,64,160, +64,64,160,64,64,160,64,64,160,64,64,160,64,64,160,64, +64,160,64,64,160,0,32,160,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,192,192,192,128, +128,96,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,96,128,128,96,128,128,96,128,128,96, +128,128,96,128,128,96,128,128,96,128,128,96,128,96,96,192, +192,192,255,255,255,255,255,255,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,255,255,255, +255,255,255,255,255,255,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,96,164,160,160,255,255,255,255,255, +255,240,251,255,128,96,96,128,128,128,128,128,128,128,128,128, +128,128,128,128,96,96,192,220,192,255,255,255,255,255,255,192, +192,192,128,128,96,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,96,96,255,255,255,255,255,255,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +96,96,240,251,255,255,255,255,255,255,255,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,96,96, +255,255,255,255,255,255,255,255,255,164,160,160,128,128,96,128, +128,128,128,128,128,128,128,128,128,128,128,128,96,96,255,255, +255,255,255,255,255,255,255,192,192,192,128,128,96,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,164,160,160,255, +255,255,240,251,255,128,96,96,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,96,96,255,255,255,255,255,255, +255,255,255,192,192,192,128,128,96,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,96,164,160,160,255,255,255,240,251, +255,128,96,96,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,96,96,255,255,255,255,255,255,255,255,255,164, +160,160,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,96,96,255,255,255,255,255,255,255,255,255,192,192,192, +128,128,96,128,128,128,128,128,128,128,128,128,128,128,128,128, +96,96,240,251,255,255,255,255,255,255,255,192,192,192,128,128, +96,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,255,255,255,240,251,255,128,96,96,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,96,96,192,220, +192,255,255,255,0,0,255,255,255,64,96,160,64,64,160,64, +64,160,64,64,160,64,64,160,64,64,160,64,64,160,64,64, +160,64,64,160,64,64,160,64,64,160,64,64,160,64,64,160, +64,64,160,64,64,160,64,64,160,64,64,160,0,32,160,192, +192,192,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,192,192,192,128,128,96,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,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,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,255,255,255,255,255,255,255,192,192,192,128,96, +96,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +164,160,160,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,64,96,160,64,64,160,64,64,160,64,64,160,64,64,160, +64,64,160,64,64,160,64,64,160,64,64,160,64,64,160,64, +64,160,64,64,160,64,64,160,64,64,160,64,64,160,64,64, +160,64,64,160,64,64,160,64,64,160,64,64,160,0,32,160, +240,251,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,192,192,192,128,128,96,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,164,160,160,164, +160,160,164,160,160,164,160,160,164,160,160,164,160,160,164,160, +160,164,160,160,164,160,160,192,220,192,255,255,255,255,255,255, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,255,255,255,255,255,255,255,255,255,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,96, +164,160,160,255,255,255,255,255,255,240,251,255,128,96,96,128, +128,128,128,128,128,128,128,128,128,128,128,128,96,96,192,220, +192,255,255,255,255,255,255,192,192,192,128,128,96,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,96,192,192,192,255, +255,255,255,255,255,192,220,192,128,96,96,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,96,192,192,192,255,255,255, +255,255,255,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,255,255,255,255,255,255,255,255, +255,192,220,192,128,96,96,128,128,128,128,128,128,128,128,128, +128,128,128,128,96,96,192,220,192,255,255,255,255,255,255,164, +160,160,128,128,96,128,128,128,128,128,128,128,128,128,128,128, +128,64,96,96,255,255,255,255,255,255,255,255,255,128,160,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +96,96,255,255,255,255,255,255,255,255,255,164,160,160,128,128, +96,128,128,128,128,128,128,128,128,128,128,128,128,128,96,96, +255,255,255,255,255,255,255,255,255,164,160,160,128,128,96,128, +128,128,128,128,128,128,128,128,128,128,128,128,96,96,255,255, +255,255,255,255,255,255,255,164,160,160,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,255,255,255,255, +255,255,255,255,255,240,251,255,128,96,96,128,128,128,128,128, +128,128,128,128,128,128,128,128,96,96,192,220,192,255,255,255, +255,255,255,192,192,192,128,128,96,128,128,128,128,128,128,128, +128,128,128,128,128,128,96,96,240,251,255,255,255,255,255,255, +255,164,160,160,128,128,96,128,128,128,128,128,128,128,128,128, +128,128,128,128,96,96,192,220,192,255,255,255,0,0,255,255, +255,128,128,192,0,32,160,64,64,160,64,64,160,64,64,160, +64,64,160,64,64,160,64,64,160,64,64,160,64,64,160,64, +64,160,64,64,160,64,64,160,64,64,160,64,64,160,64,64, +160,64,64,160,0,32,160,192,192,192,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,192,192,192,128,128, +96,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,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,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,255,255,255,255, +255,255,255,255,255,255,164,160,160,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,164,160,160,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,32,160,64,64,160,64, +64,160,64,64,160,64,64,160,64,64,160,64,64,160,64,64, +160,64,64,160,64,64,160,64,64,160,64,64,160,64,64,160, +64,64,160,64,64,160,64,64,160,64,64,160,64,64,160,64, +64,160,64,64,160,0,32,160,240,251,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,192,192,192,128, +128,96,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,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,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,255,255,255, +255,255,255,255,255,255,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,96,164,160,160,255,255,255,255,255, +255,240,251,255,128,96,96,128,128,128,128,128,128,128,128,128, +128,128,128,128,96,96,192,220,192,255,255,255,255,255,255,192, +192,192,128,128,96,128,128,128,128,128,128,128,128,128,128,128, +128,128,96,96,240,251,255,255,255,255,255,255,255,240,251,255, +128,96,96,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,96,192,192,192,255,255,255,255,255,255,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +255,255,255,255,255,255,255,255,255,192,220,192,128,96,96,128, +128,96,128,128,96,128,128,96,128,128,96,128,96,96,192,192, +192,255,255,255,255,255,255,192,192,160,128,128,96,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,255,255,255,255, +255,255,255,255,255,192,192,192,128,128,96,128,128,128,128,128, +128,128,128,128,128,128,128,128,96,96,255,255,255,255,255,255, +255,255,255,164,160,160,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,96,96,255,255,255,255,255,255,255,255, +255,192,192,192,128,128,96,128,128,128,128,128,128,128,128,128, +128,128,128,128,96,96,255,255,255,255,255,255,255,255,255,164, +160,160,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,255,255,255,255,255,255,255,255,255,240,251,255, +128,96,96,128,128,96,128,128,96,128,128,96,128,128,96,128, +96,96,192,192,192,255,255,255,255,255,255,164,160,160,128,128, +96,128,128,128,128,128,128,128,128,128,128,128,128,128,96,96, +255,255,255,255,255,255,255,255,255,192,192,192,128,128,96,128, +128,128,128,128,128,128,128,128,128,128,128,128,96,96,192,220, +192,255,255,255,0,0,255,255,255,192,192,192,0,32,160,64, +64,160,64,64,160,64,64,160,64,64,160,64,64,160,64,64, +160,64,64,160,64,64,160,64,64,160,64,64,160,64,64,160, +64,64,160,64,64,160,64,64,160,64,64,160,0,32,160,192, +192,192,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,192,192,192,128,128,96,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,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,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,255,255,255,255,255,255,255,255,255,255,255,255, +255,128,96,96,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,96,96,128,96,96,128,96, +96,128,128,96,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +164,160,160,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,192,220, +192,0,32,160,64,64,160,64,64,160,64,64,160,64,64,160, +64,64,160,64,64,160,64,64,160,64,64,160,64,64,160,64, +64,160,64,64,160,64,64,160,64,64,160,64,64,160,64,64, +160,64,64,160,64,64,160,64,64,160,64,64,160,0,32,160, +240,251,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,192,192,192,128,128,96,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,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, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,255,255,255,255,255,255,255,255,255,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,96, +164,160,160,255,255,255,255,255,255,240,251,255,128,96,96,128, +128,128,128,128,128,128,128,128,128,128,128,128,96,96,192,220, +192,255,255,255,255,255,255,192,192,192,128,128,96,128,128,128, +128,128,128,128,128,128,128,128,128,128,96,96,240,251,255,255, +255,255,255,255,255,255,255,255,128,96,96,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,96,192,192,192,255,255,255, +255,255,255,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,255,255,255,255,255,255,255,255, +255,240,251,255,192,192,192,192,192,192,192,192,192,192,192,192, +192,192,192,192,192,192,240,251,255,255,255,255,255,255,255,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,255,255,255,255,255,255,255,255,255,192,192,192, +128,128,96,128,128,128,128,128,128,128,128,128,128,128,128,128, +96,96,255,255,255,255,255,255,255,255,255,164,160,160,128,128, +96,128,128,128,128,128,128,128,128,128,128,128,128,64,96,96, +255,255,255,255,255,255,255,255,255,192,192,192,128,128,96,128, +128,128,128,128,128,128,128,128,128,128,128,128,96,96,255,255, +255,255,255,255,255,255,255,164,160,160,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,255,255,255,255, +255,255,255,255,255,240,251,255,192,192,192,192,192,192,192,192, +192,192,192,192,192,192,192,192,192,192,240,251,255,255,255,255, +255,255,255,164,160,160,128,128,96,128,128,128,128,128,128,128, +128,128,128,128,128,64,96,96,255,255,255,255,255,255,255,255, +255,192,192,192,128,128,96,128,128,128,128,128,128,128,128,128, +128,128,128,128,96,96,192,220,192,255,255,255,0,0,255,255, +255,192,220,192,0,32,160,64,64,160,64,64,160,64,64,160, +64,64,160,64,64,160,64,64,160,64,64,160,64,64,160,64, +64,160,64,64,160,64,64,160,64,64,160,64,64,160,64,64, +160,64,64,160,0,32,160,192,192,192,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,192,192,192,128,128, +96,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,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,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,255,255,255,255, +255,255,255,255,255,255,255,255,255,192,192,192,128,128,96,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,96,164,160,160, +255,255,255,240,251,255,192,220,192,192,192,192,164,160,160,128, +128,128,128,96,96,128,96,96,128,96,96,128,96,96,128,128, +96,128,128,96,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,164,160,160,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,128,160,192,0,32,160,64,64,160,64, +64,160,64,64,160,64,64,160,64,64,160,64,64,160,64,64, +160,64,64,160,64,64,160,64,64,160,64,64,160,64,64,160, +64,64,160,64,64,160,64,64,160,64,64,160,64,64,160,64, +64,160,64,64,160,0,32,160,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,192,192,192,128, +128,96,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,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,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,255,255,255, +255,255,255,255,255,255,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,96,164,160,160,255,255,255,255,255, +255,240,251,255,128,96,96,128,128,128,128,128,128,128,128,128, +128,128,128,128,96,96,192,220,192,255,255,255,255,255,255,192, +192,192,128,128,96,128,128,128,128,128,128,128,128,128,128,128, +128,128,96,96,240,251,255,255,255,255,255,255,255,255,255,255, +128,96,96,128,128,128,128,128,128,128,128,128,128,128,128,128, +96,96,192,192,192,255,255,255,255,255,255,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +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,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,255,255,255,255, +255,255,255,255,255,192,192,192,128,128,96,128,128,128,128,128, +128,128,128,128,128,128,128,128,96,96,255,255,255,255,255,255, +255,255,255,164,160,160,128,128,96,128,128,128,128,128,128,128, +128,128,128,128,128,64,96,96,255,255,255,255,255,255,255,255, +255,192,192,192,128,128,96,128,128,128,128,128,128,128,128,128, +128,128,128,128,96,96,255,255,255,255,255,255,255,255,255,164, +160,160,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,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,164,160,160,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,64,96,96, +255,255,255,255,255,255,255,255,255,192,192,192,128,128,96,128, +128,128,128,128,128,128,128,128,128,128,128,128,96,96,192,220, +192,255,255,255,0,0,255,255,255,255,255,255,0,32,128,64, +64,160,64,64,160,64,64,160,64,64,160,64,64,160,64,64, +160,64,64,160,64,64,160,64,64,160,64,64,160,64,64,160, +64,64,160,64,64,160,64,64,160,64,64,160,0,32,160,240, +251,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,192,192,192,128,128,96,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,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,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,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,128,96,96,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +240,251,255,192,220,192,192,192,192,164,160,160,164,160,160,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +164,160,160,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,64,64, +160,64,64,160,64,64,160,64,64,160,64,64,160,64,64,160, +64,64,160,64,64,160,64,64,160,64,64,160,64,64,160,64, +64,160,64,64,160,64,64,160,64,64,160,64,64,160,64,64, +160,64,64,160,64,64,160,64,64,160,64,64,160,0,32,160, +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,192,192,192,128,128,96,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,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, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,255,255,255,255,255,255,255,255,255,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,96, +164,160,160,255,255,255,255,255,255,240,251,255,128,96,96,128, +128,128,128,128,128,128,128,128,128,128,128,128,96,96,192,220, +192,255,255,255,255,255,255,192,192,192,128,128,96,128,128,128, +128,128,128,128,128,128,128,128,128,128,96,96,240,251,255,255, +255,255,255,255,255,255,255,255,128,96,96,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,96,192,192,192,255,255,255, +255,255,255,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,240,251,255,240,251,255,240,251, +255,240,251,255,240,251,255,240,251,255,240,251,255,240,251,255, +240,251,255,240,251,255,240,251,255,255,255,255,255,255,255,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,255,255,255,255,255,255,255,255,255,192,192,192, +128,128,96,128,128,128,128,128,128,128,128,128,128,128,128,128, +96,96,255,255,255,255,255,255,255,255,255,164,160,160,128,128, +96,128,128,128,128,128,128,128,128,128,128,128,128,64,96,96, +255,255,255,255,255,255,255,255,255,192,192,192,128,128,96,128, +128,128,128,128,128,128,128,128,128,128,128,128,96,96,255,255, +255,255,255,255,255,255,255,164,160,160,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,240,251,255,240, +251,255,240,251,255,240,251,255,240,251,255,240,251,255,240,251, +255,240,251,255,240,251,255,240,251,255,240,251,255,255,255,255, +255,255,255,164,160,160,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,64,96,96,255,255,255,255,255,255,255,255, +255,192,192,192,128,128,96,128,128,128,128,128,128,128,128,128, +128,128,128,128,96,96,192,220,192,255,255,255,0,0,255,255, +255,255,255,255,64,96,160,64,64,160,64,64,160,64,64,160, +64,64,160,64,64,160,64,64,160,64,64,160,64,64,160,64, +64,160,64,64,160,64,64,160,64,64,160,64,64,160,64,64, +160,64,64,160,0,32,160,192,192,192,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,192,192,192,128,128, +96,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,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,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,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,128,160,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,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,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,164,160,160,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,32,160,64,64,160,64,64,160,64, +64,160,64,64,160,64,64,160,64,64,160,64,64,160,64,64, +160,64,64,160,64,64,160,64,64,160,64,64,160,64,64,160, +64,64,160,64,64,160,64,64,160,64,64,160,64,64,160,64, +64,160,64,64,160,0,32,128,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,192,192,192,128, +128,96,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,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,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,255,255,255, +255,255,255,255,255,255,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,96,164,160,160,255,255,255,255,255, +255,240,251,255,128,96,96,128,128,128,128,128,128,128,128,128, +128,128,128,128,96,96,192,220,192,255,255,255,255,255,255,192, +192,192,128,128,96,128,128,128,128,128,128,128,128,128,128,128, +128,128,96,96,240,251,255,255,255,255,255,255,255,255,255,255, +128,96,96,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,96,192,192,192,255,255,255,255,255,255,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,96,96,128,96,96,128,96,96,128,96,96,128,96,96,128, +96,96,128,96,96,128,96,96,128,96,96,128,96,96,192,192, +192,255,255,255,255,255,255,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,255,255,255,255, +255,255,255,255,255,192,192,192,128,128,96,128,128,128,128,128, +128,128,128,128,128,128,128,128,96,96,255,255,255,255,255,255, +255,255,255,164,160,160,128,128,96,128,128,128,128,128,128,128, +128,128,128,128,128,64,96,96,255,255,255,255,255,255,255,255, +255,192,192,192,128,128,96,128,128,128,128,128,128,128,128,128, +128,128,128,128,96,96,255,255,255,255,255,255,255,255,255,164, +160,160,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,96,96,128,96,96,128,96,96,128,96,96, +128,96,96,128,96,96,128,96,96,128,96,96,128,96,96,128, +96,96,164,160,160,255,255,255,255,255,255,164,160,160,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,64,96,96, +255,255,255,255,255,255,255,255,255,192,192,192,128,128,96,128, +128,128,128,128,128,128,128,128,128,128,128,128,96,96,192,220, +192,255,255,255,0,0,255,255,255,255,255,255,128,128,192,64, +32,160,64,64,160,64,64,160,64,64,160,64,64,160,64,64, +160,64,64,160,64,64,160,64,64,160,64,64,160,64,64,160, +64,64,160,64,64,160,64,64,160,64,64,160,0,32,160,192, +192,192,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,192,192,192,128,128,96,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,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,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,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,192,192,192,128,128,96,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,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,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +164,160,160,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,192,192,192,0,32, +160,64,64,160,64,64,160,64,64,160,64,64,160,64,64,160, +64,64,160,64,64,160,64,64,160,64,64,160,64,64,160,64, +64,160,64,64,160,64,64,160,64,64,160,64,64,160,64,64, +160,64,64,160,64,64,160,64,64,160,64,64,160,64,64,160, +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,192,192,192,128,128,96,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,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, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,255,255,255,255,255,255,255,255,255,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,96, +164,160,160,255,255,255,255,255,255,240,251,255,128,96,96,128, +128,128,128,128,128,128,128,128,128,128,128,128,96,96,192,220, +192,255,255,255,255,255,255,192,192,192,128,128,96,128,128,128, +128,128,128,128,128,128,128,128,128,128,96,96,240,251,255,255, +255,255,255,255,255,255,255,255,128,96,96,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,96,192,192,192,255,255,255, +255,255,255,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,96,192,192,192,255,255,255,255,255,255,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,255,255,255,255,255,255,255,255,255,192,192,192, +128,128,96,128,128,128,128,128,128,128,128,128,128,128,128,128, +96,96,255,255,255,255,255,255,255,255,255,164,160,160,128,128, +96,128,128,128,128,128,128,128,128,128,128,128,128,64,96,96, +255,255,255,255,255,255,255,255,255,192,192,192,128,128,96,128, +128,128,128,128,128,128,128,128,128,128,128,128,96,96,255,255, +255,255,255,255,255,255,255,164,160,160,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,96,164,160,160,255,255,255, +255,255,255,164,160,160,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,64,96,96,255,255,255,255,255,255,255,255, +255,192,192,192,128,128,96,128,128,128,128,128,128,128,128,128, +128,128,128,128,96,96,192,220,192,255,255,255,0,0,255,255, +255,255,255,255,192,192,192,0,32,160,64,64,160,64,64,160, +64,64,160,64,64,160,64,64,160,64,64,160,64,64,160,64, +64,160,64,64,160,64,64,160,64,64,160,64,64,160,64,64, +160,64,64,160,0,32,160,192,192,192,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,192,192,192,128,128, +96,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,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,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,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,192,192,192,128, +128,96,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,96,96, +240,251,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,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,164,160,160,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,64,96,160,0,64,160,64,64,160,64,64,160,64, +64,160,64,64,160,64,64,160,64,64,160,64,64,160,64,64, +160,64,64,160,64,64,160,64,64,160,64,64,160,64,64,160, +64,64,160,64,64,160,64,64,160,64,64,160,64,64,160,64, +64,160,64,64,160,64,64,160,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,192,192,192,128, +128,96,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,164,160,160,255, +255,255,255,255,255,255,255,255,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,255,255,255, +255,255,255,255,255,255,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,96,164,160,160,255,255,255,255,255, +255,240,251,255,128,96,96,128,128,128,128,128,128,128,128,128, +128,128,128,128,96,96,192,220,192,255,255,255,255,255,255,192, +192,192,128,128,96,128,128,128,128,128,128,128,128,128,128,128, +128,128,96,96,240,251,255,255,255,255,255,255,255,255,255,255, +128,96,96,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,96,192,192,192,255,255,255,255,255,255,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,96,192,192, +192,255,255,255,255,255,255,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,255,255,255,255, +255,255,255,255,255,192,192,192,128,128,96,128,128,128,128,128, +128,128,128,128,128,128,128,128,96,96,255,255,255,255,255,255, +255,255,255,164,160,160,128,128,96,128,128,128,128,128,128,128, +128,128,128,128,128,64,96,96,255,255,255,255,255,255,255,255, +255,192,192,192,128,128,96,128,128,128,128,128,128,128,128,128, +128,128,128,128,96,96,255,255,255,255,255,255,255,255,255,164, +160,160,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,96,164,160,160,255,255,255,255,255,255,164,160,160,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,64,96,96, +255,255,255,255,255,255,255,255,255,192,192,192,128,128,96,128, +128,128,128,128,128,128,128,128,128,128,128,128,96,96,192,220, +192,255,255,255,0,0,255,255,255,255,255,255,255,255,255,0, +32,160,64,64,160,64,64,160,64,64,160,64,64,160,64,64, +160,64,64,160,64,64,160,64,64,160,64,64,160,64,64,160, +64,64,160,64,64,160,64,64,160,64,64,160,0,32,160,192, +192,192,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,192,192,192,128,128,96,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,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,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,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,192,192,192,128,128,96,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,96,96,240,251,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,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +164,160,160,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,32,128,64,64, +160,64,64,160,64,64,160,64,64,160,64,64,160,64,64,160, +64,64,160,64,64,160,64,64,160,64,64,160,64,64,160,64, +64,160,64,64,160,64,64,160,64,64,160,64,64,160,64,64, +160,64,64,160,64,64,160,64,64,160,64,32,160,128,96,160, +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,192,192,192,128,128,96,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,96,164,160,160,255,255,255,255,255,255,255,255,255, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,255,255,255,255,255,255,255,255,255,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,96, +164,160,160,255,255,255,255,255,255,240,251,255,128,96,96,128, +128,128,128,128,128,128,128,128,128,128,128,128,96,96,192,220, +192,255,255,255,255,255,255,192,192,192,128,128,96,128,128,128, +128,128,128,128,128,128,128,128,128,128,96,96,240,251,255,255, +255,255,255,255,255,255,255,255,128,96,96,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,96,192,192,192,255,255,255, +255,255,255,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,96,96,128,96,96,128,96, +96,128,96,96,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,96,192,192,192,255,255,255,255,255,255,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,255,255,255,255,255,255,255,255,255,192,192,192, +128,128,96,128,128,128,128,128,128,128,128,128,128,128,128,128, +96,96,255,255,255,255,255,255,255,255,255,164,160,160,128,128, +96,128,128,128,128,128,128,128,128,128,128,128,128,128,96,96, +255,255,255,255,255,255,255,255,255,192,192,192,128,128,96,128, +128,128,128,128,128,128,128,128,128,128,128,128,96,96,255,255, +255,255,255,255,255,255,255,164,160,160,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,96,96,128, +96,96,128,96,96,128,96,96,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,96,164,160,160,255,255,255, +255,255,255,164,160,160,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,64,96,96,255,255,255,255,255,255,255,255, +255,192,192,192,128,128,96,128,128,128,128,128,128,128,128,128, +128,128,128,128,96,96,192,220,192,255,255,255,0,0,255,255, +255,255,255,255,255,255,255,64,64,160,64,64,160,64,64,160, +64,64,160,64,64,160,64,64,160,64,64,160,64,64,160,64, +64,160,64,64,160,64,64,160,64,64,160,64,64,160,64,64, +160,64,64,160,0,32,160,192,192,192,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,192,192,192,128,128, +96,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,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,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,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,164,160,160,128, +128,96,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,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,128,96,96,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +192,160,192,0,32,160,64,64,160,64,64,160,64,64,160,64, +64,160,64,64,160,64,64,160,64,64,160,64,64,160,64,64, +160,64,64,160,64,64,160,64,64,160,64,64,160,64,64,160, +64,64,160,64,64,160,64,64,160,64,64,160,64,64,160,64, +64,160,0,32,160,128,128,192,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,192,192,192,128, +128,96,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,164,160,160,255, +255,255,255,255,255,255,255,255,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,255,255,255, +255,255,255,255,255,255,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,96,164,160,160,255,255,255,255,255, +255,240,251,255,128,96,96,128,128,128,128,128,128,128,128,128, +128,128,128,128,96,96,192,220,192,255,255,255,255,255,255,192, +192,192,128,128,96,128,128,128,128,128,128,128,128,128,128,128, +128,128,96,96,240,251,255,255,255,255,255,255,255,255,255,255, +128,96,96,128,128,128,128,128,128,128,128,128,128,128,128,128, +96,96,192,192,192,255,255,255,255,255,255,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +240,251,255,192,220,192,192,220,192,240,251,255,128,96,96,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,96,192,192, +192,255,255,255,255,255,255,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,255,255,255,255, +255,255,255,255,255,192,192,192,128,128,96,128,128,128,128,128, +128,128,128,128,128,128,128,128,96,96,255,255,255,255,255,255, +255,255,255,164,160,160,128,128,96,128,128,128,128,128,128,128, +128,128,128,128,128,64,96,96,255,255,255,255,255,255,255,255, +255,192,192,192,128,128,96,128,128,128,128,128,128,128,128,128, +128,128,128,128,96,96,255,255,255,255,255,255,255,255,255,164, +160,160,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,240,251,255,192,220,192,192,220,192,240,251,255, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,96,164,160,160,255,255,255,255,255,255,164,160,160,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,96,96, +255,255,255,255,255,255,255,255,255,192,220,192,128,96,96,128, +128,128,128,128,128,128,128,128,128,128,128,128,96,96,192,220, +192,255,255,255,0,0,255,255,255,255,255,255,255,255,255,128, +128,192,0,32,160,64,64,160,64,64,160,64,64,160,64,64, +160,64,64,160,64,64,160,64,64,160,64,64,160,64,64,160, +64,64,160,64,64,160,64,64,160,64,64,160,0,32,160,128, +160,192,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,192,192,192,128,128,96,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,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,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,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,64,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,240,251,255,128, +96,96,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,96, +192,192,192,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,64,64,160,64,64,160,64,64, +160,64,64,160,64,64,160,64,64,160,64,64,160,64,64,160, +64,64,160,64,64,160,64,64,160,64,64,160,64,64,160,64, +64,160,64,64,160,64,64,160,64,64,160,64,64,160,64,64, +160,64,64,160,64,64,160,64,64,160,0,32,160,192,160,192, +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,192,192,192,128,128,96,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,164,160,160,255,255,255,255,255,255,255,255,255, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,255,255,255,255,255,255,255,255,255,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,96, +164,160,160,255,255,255,255,255,255,240,251,255,128,96,96,128, +128,128,128,128,128,128,128,128,128,128,128,128,96,96,192,220, +192,255,255,255,255,255,255,192,192,192,128,128,96,128,128,128, +128,128,128,128,128,128,128,128,128,128,96,96,240,251,255,255, +255,255,255,255,255,240,251,255,128,96,96,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,96,192,192,192,255,255,255, +255,255,255,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,255,255,255,255,255,255,255,255, +255,255,255,255,128,96,96,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,96,192,192,192,255,255,255,255,255,255,164, +160,160,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,255,255,255,255,255,255,255,255,255,164,160,160, +128,128,96,128,128,128,128,128,128,128,128,128,128,128,128,128, +96,96,255,255,255,255,255,255,255,255,255,164,160,160,128,128, +96,128,128,128,128,128,128,128,128,128,128,128,128,128,96,96, +255,255,255,255,255,255,255,255,255,164,160,160,128,128,96,128, +128,128,128,128,128,128,128,128,128,128,128,128,96,96,255,255, +255,255,255,255,255,255,255,164,160,160,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,255,255,255,255, +255,255,255,255,255,255,255,255,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,96,164,160,160,255,255,255, +255,255,255,164,160,160,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,96,96,255,255,255,255,255,255,255,255, +255,192,192,192,128,128,96,128,128,128,128,128,128,128,128,128, +128,128,128,128,96,96,192,220,192,255,255,255,0,0,255,255, +255,255,255,255,255,255,255,192,220,192,0,32,160,64,64,160, +64,64,160,64,64,160,64,64,160,64,64,160,64,64,160,64, +64,160,64,64,160,64,64,160,64,64,160,64,64,160,64,64, +160,64,64,160,0,32,160,192,160,224,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,192,192,192,128,128, +96,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,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,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,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,128,96,96,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +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,164,160,160,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,96,192,192,192,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,192,192,192, +0,32,160,64,64,160,64,64,160,64,64,160,64,64,160,64, +64,160,64,64,160,64,64,160,64,64,160,64,64,160,64,64, +160,64,64,160,64,64,160,64,64,160,64,64,160,64,64,160, +64,64,160,64,64,160,64,64,160,64,64,160,64,64,160,64, +64,160,0,32,160,192,220,192,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,192,192,192,128, +128,96,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,164,160,160,255, +255,255,255,255,255,255,255,255,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,255,255,255, +255,255,255,255,255,255,64,96,96,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,164,160,160,255,255,255,255,255, +255,192,220,192,128,96,96,128,128,128,128,128,128,128,128,128, +128,128,128,128,96,96,192,220,192,255,255,255,255,255,255,192, +192,192,128,128,96,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,96,192,192,192,255,255,255,255,255,255,192,192,192, +128,128,96,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,96,192,192,192,255,255,255,255,255,255,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +255,255,255,255,255,255,255,255,255,255,255,255,128,96,96,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,96,192,192, +192,255,255,255,255,255,255,164,160,160,128,128,96,128,128,128, +128,128,128,128,128,128,128,128,128,128,96,96,240,251,255,255, +255,255,255,255,255,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,96,96,255,255,255,255,255,255, +255,255,255,164,160,160,128,128,96,128,128,128,128,128,128,128, +128,128,128,128,128,128,96,96,240,251,255,255,255,255,255,255, +255,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,96,96,255,255,255,255,255,255,255,255,255,164, +160,160,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,255,255,255,255,255,255,255,255,255,255,255,255, +128,128,96,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,96,164,160,160,255,255,255,255,255,255,192,192,192,128,128, +96,128,128,128,128,128,128,128,128,128,128,128,128,128,96,96, +240,251,255,255,255,255,255,255,255,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,96,96,192,220, +192,255,255,255,0,0,255,255,255,255,255,255,255,255,255,255, +255,255,0,32,128,64,64,160,64,64,160,64,64,160,64,64, +160,64,64,160,64,64,160,64,64,160,64,64,160,64,64,160, +64,64,160,64,64,160,64,64,160,64,64,160,0,32,160,128, +128,160,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,192,192,192,128,128,96,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,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,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,255,255,255,255,255,255,255,255,255,255,255,255, +255,164,160,160,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,164,160,160,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,128,96,96,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,96, +192,220,192,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,64,96,160,64,64,160,64,64,160,64,64, +160,64,64,160,64,64,160,64,64,160,64,64,160,64,64,160, +64,64,160,64,64,160,64,64,160,64,64,160,64,64,160,64, +64,160,64,64,160,64,64,160,64,64,160,64,64,160,64,64, +160,64,64,160,64,64,160,64,64,160,0,32,160,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,192,192,192,128,128,96,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,96,128, +128,96,128,128,96,128,128,96,128,128,96,128,128,96,128,128, +96,128,96,96,164,160,160,255,255,255,255,255,255,255,255,255, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,96,96,164,160,160,240,251,255,164,160,160,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,96,96,192,192,192,240,251,255,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,96,96,192,220, +192,255,255,255,255,255,255,192,192,192,128,128,96,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,96,96,192, +192,192,192,220,192,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,96,96,240,251,255,255,255,255, +255,255,255,164,160,160,128,128,96,128,128,128,128,128,128,128, +128,128,128,128,128,128,96,96,255,255,255,255,255,255,255,255, +255,192,220,192,128,96,96,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,96,192,192,192,255,255,255,255,255,255,192, +192,192,128,128,96,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,240,251,255,192,192,192,128,96,96, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +96,96,255,255,255,255,255,255,255,255,255,192,192,192,128,128, +96,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,240,251,255,192,192,192,128,96,96,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,96,96,255,255, +255,255,255,255,255,255,255,192,192,192,128,128,96,128,128,128, +128,128,128,128,128,128,128,128,128,128,96,96,255,255,255,255, +255,255,255,255,255,255,255,255,128,96,96,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,96,164,160,160,255,255,255, +255,255,255,192,192,192,128,128,96,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,240,251,255,192,192, +192,128,96,96,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,96,96,192,220,192,255,255,255,0,0,255,255, +255,255,255,255,255,255,255,255,255,255,128,128,192,64,32,160, +64,64,160,64,64,160,64,64,160,64,64,160,64,64,160,64, +64,160,64,64,160,64,64,160,64,64,160,64,64,160,64,64, +160,64,64,160,64,32,160,128,96,160,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,192,192,192,128,128, +96,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,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,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,255,255,255,255, +255,255,255,255,255,255,240,251,255,128,96,96,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,96,192,192,192, +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,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,64,96,96,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,240,251,255,0,32,160, +64,64,160,64,64,160,64,64,160,64,64,160,64,64,160,64, +64,160,64,64,160,64,64,160,64,64,160,64,64,160,64,64, +160,64,64,160,64,64,160,64,64,160,64,64,160,64,64,160, +64,64,160,64,64,160,64,64,160,64,64,160,64,64,160,64, +64,160,64,64,160,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,192,192,192,128, +128,96,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,192,192,192,192,192,192,192,192,192,192,192,192, +192,192,192,192,192,192,192,192,192,164,160,160,192,192,192,255, +255,255,255,255,255,255,255,255,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,96, +128,96,96,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,96,128,96, +96,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,96,96,192,220,192,255,255,255,255,255,255,192, +192,192,128,128,96,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,96,128,96,96,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +96,96,255,255,255,255,255,255,255,255,255,192,192,192,128,96, +96,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +164,160,160,240,251,255,192,220,192,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,96,96,240,251, +255,255,255,255,255,255,255,192,192,192,128,96,96,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +96,96,128,128,96,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,96,96,255,255,255,255,255,255, +255,255,255,240,251,255,128,96,96,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,96,96,128,128, +96,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,96,96,255,255,255,255,255,255,255,255,255,192, +220,192,128,96,96,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,240,251,255,240,251,255,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +96,96,192,192,192,255,255,255,255,255,255,240,251,255,128,96, +96,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,96,96,128,128,96,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,96,96,192,220, +192,255,255,255,0,0,255,255,255,255,255,255,255,255,255,255, +255,255,192,192,192,0,32,160,64,64,160,64,64,160,64,64, +160,64,64,160,64,64,160,64,64,160,64,64,160,64,64,160, +64,64,160,64,64,160,64,64,160,64,64,160,64,64,160,64, +96,160,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,192,192,192,128,128,96,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,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,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,255,255,255,255,255,255,255,255,255,255,128,96, +96,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,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,164,160,160,128,96,96,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,64,96,160,64,64,160,64,64,160,64,64,160,64,64, +160,64,64,160,64,64,160,64,64,160,64,64,160,64,64,160, +64,64,160,64,64,160,64,64,160,64,64,160,64,64,160,64, +64,160,64,64,160,64,64,160,64,64,160,64,64,160,64,64, +160,64,64,160,64,64,160,64,32,160,128,96,160,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,192,192,192,128,128,96,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,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, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,96,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,96,96,240,251, +255,255,255,255,255,255,255,192,192,192,128,128,96,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,255,255,255,255,255,255, +255,255,255,255,255,255,128,96,96,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,96,96,128,96, +96,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,96,96,255,255,255,255,255,255,255,255,255,255, +255,255,128,96,96,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +96,96,255,255,255,255,255,255,255,255,255,255,255,255,128,96, +96,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,96,96,255,255, +255,255,255,255,255,255,255,255,255,255,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +96,96,128,96,96,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,96,96,255,255,255,255,255,255, +255,255,255,255,255,255,128,96,96,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,96,96,192,220,192,255,255,255,0,0,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,0,32,160, +64,64,160,64,64,160,64,64,160,64,64,160,64,64,160,64, +64,160,64,64,160,64,64,160,64,64,160,64,64,160,64,64, +160,64,64,160,64,64,160,64,32,128,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,192,192,192,128,128, +96,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,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,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,255,255,255,255, +255,255,255,128,96,96,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,96,164,160,160,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,164,160,160,128,96, +96,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,96,192,192,160,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,192,220,192,0,32,160,64,64,160, +64,64,160,64,64,160,64,64,160,64,64,160,64,64,160,64, +64,160,64,64,160,64,64,160,64,64,160,64,64,160,64,64, +160,64,64,160,64,64,160,64,64,160,64,64,160,64,64,160, +64,64,160,64,64,160,64,64,160,64,64,160,64,64,160,0, +32,160,192,160,192,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,192,192,192,128, +128,96,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,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,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,164,160,160,128,96,96, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,255,255,255,255,255,255,255,255,255,192, +192,192,128,128,96,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,96,96,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,96,96,192, +220,192,255,255,255,255,255,255,255,255,255,255,255,255,192,220, +192,128,96,96,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,96,96,192,220,192,255,255, +255,255,255,255,255,255,255,255,255,255,164,160,160,128,128,96, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,96,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,96,96,255,255,255,255,255,255, +255,255,255,255,255,255,164,160,160,128,128,96,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,96,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,96,96,255,255,255,255,255,255,255,255,255,255, +255,255,240,251,255,128,96,96,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,96,96,192, +192,192,255,255,255,255,255,255,255,255,255,255,255,255,192,192, +192,128,128,96,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,96,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,96,96,192,220, +192,255,255,255,0,0,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,128,96,160,0,32,160,64,64,160,64,64, +160,64,64,160,64,64,160,64,64,160,64,64,160,64,64,160, +64,64,160,64,64,160,64,64,160,64,64,160,64,64,160,0, +32,160,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,192,192,192,128,128,96,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,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,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,255,240,251,255,128,96,96,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +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,240,251,255, +128,128,128,128,128,96,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,64,96,96,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,64, +64,160,64,64,160,64,64,160,64,64,160,64,64,160,64,64, +160,64,64,160,64,64,160,64,64,160,64,64,160,64,64,160, +64,64,160,64,64,160,64,64,160,64,64,160,64,64,160,64, +64,160,64,64,160,64,64,160,64,64,160,64,64,160,64,64, +160,64,64,160,64,64,160,0,32,160,240,251,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,192,192,192,128,128,96,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,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, +128,128,128,128,128,96,128,128,128,128,128,128,128,128,128,128, +96,96,192,220,192,164,160,160,128,96,96,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,96,96,240,251,255, +240,251,255,128,96,96,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,64,96,96,240,251,255,255,255, +255,255,255,255,255,255,255,192,192,192,128,128,96,128,128,128, +128,128,128,128,128,128,128,128,128,128,96,96,192,192,192,128, +96,96,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,96,96,128,128,128,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,192,192,192,128,96,96,128, +128,96,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,96,64,96,96, +192,220,192,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,128,96,96,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,96,128,128,128,192,192,192, +128,128,96,128,128,128,128,128,128,128,128,128,128,128,128,128, +96,96,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,128,96,96,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,96,128,128,128,192,220,192,128,128,96,128, +128,128,128,128,128,128,128,128,128,128,128,128,96,96,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,192,220,192, +128,96,96,128,128,96,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,96,96,192,192,192,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,128,128,128,128,128,96,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,96,128,128, +128,192,192,192,128,128,96,128,128,128,128,128,128,128,128,128, +128,128,128,128,96,96,192,220,192,255,255,255,0,0,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,192,192,192, +0,32,160,64,64,160,64,64,160,64,64,160,64,64,160,64, +64,160,64,64,160,64,64,160,64,64,160,64,64,160,64,64, +160,64,64,160,64,64,160,0,32,160,240,251,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,192,192,192,128,128, +96,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,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,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,164,160,160,128,96,96, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,96,164,160,160,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,164,160,160,128,96,96,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,96,164,160,160,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,164,160,160,0,32,160,64,64,160,64,64,160, +64,64,160,64,64,160,64,64,160,64,64,160,64,64,160,64, +64,160,64,64,160,64,64,160,64,64,160,64,64,160,64,64, +160,64,64,160,64,64,160,64,64,160,64,64,160,64,64,160, +64,64,160,64,64,160,64,64,160,64,64,160,64,64,160,64, +64,128,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,255,255,192,192,192,128, +128,96,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,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,164,160,160,164,160,160,164,160, +160,164,160,160,164,160,160,164,160,160,192,220,192,255,255,255, +192,192,192,128,96,96,128,96,96,128,96,96,128,96,96,128, +128,128,240,251,255,255,255,255,255,255,255,240,251,255,128,128, +128,128,96,96,128,96,96,128,96,96,128,96,96,128,128,128, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,192, +192,192,128,128,96,128,128,128,128,128,128,128,128,128,128,128, +128,128,96,96,240,251,255,192,220,192,128,96,96,128,96,96, +128,96,96,128,96,96,64,96,96,164,160,160,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,164,160,160,128,96,96,128,96,96, +128,96,96,128,96,96,128,96,96,128,96,96,128,96,96,128, +128,96,164,160,160,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, +128,128,128,128,96,96,128,96,96,128,96,96,64,96,96,164, +160,160,255,255,255,192,192,192,128,128,96,128,128,128,128,128, +128,128,128,128,128,128,128,128,96,96,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,128,128,128,128, +96,96,128,96,96,128,96,96,64,96,96,164,160,160,255,255, +255,192,192,192,128,128,96,128,128,128,128,128,128,128,128,128, +128,128,128,128,96,96,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,164,160,160,128,128, +96,128,96,96,128,96,96,128,96,96,128,96,96,128,96,96, +128,96,96,128,96,96,164,160,160,240,251,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,164,160,160,64,96,96,128,96,96,128,96,96, +64,96,96,164,160,160,255,255,255,192,192,192,128,128,96,128, +128,128,128,128,128,128,128,128,128,128,128,128,96,96,192,220, +192,255,255,255,0,0,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,0,32,128,64,64,160,64,64, +160,64,64,160,64,64,160,64,64,160,64,64,160,64,64,160, +64,64,160,64,64,160,64,64,160,64,64,160,64,64,160,0, +32,160,192,192,192,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,192,192,192,128,128,96,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,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,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,192,192,192,128, +96,96,128,128,96,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,96,96,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,192,192,192,128,128,128,128,96,96,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,96,96,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,0,32,128,64, +64,160,64,64,160,64,64,160,64,64,160,64,64,160,64,64, +160,64,64,160,64,64,160,64,64,160,64,64,160,64,64,160, +64,64,160,64,64,160,64,64,160,64,64,160,64,64,160,64, +64,160,64,64,160,64,64,160,64,64,160,64,64,160,64,64, +160,64,64,160,0,32,160,128,128,192,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,255,255,192,192,192,128,128,96,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,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,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,240,251, +255,192,220,192,240,251,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,240,251,255,192,220,192,192, +220,192,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,192,192,192,128,128,96,128,128,128, +128,128,128,128,128,128,128,128,128,128,96,96,240,251,255,255, +255,255,255,255,255,240,251,255,192,220,192,192,220,192,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,255,255,192,220,192,240,251,255,192,220, +192,192,220,192,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,240,251,255,192,220, +192,192,220,192,255,255,255,255,255,255,255,255,255,164,160,160, +128,128,96,128,128,128,128,128,128,128,128,128,128,128,128,128, +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,192,220,192,192,220,192, +255,255,255,255,255,255,255,255,255,192,192,192,128,128,96,128, +128,128,128,128,128,128,128,128,128,128,128,128,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,192,220,192,192, +220,192,240,251,255,192,220,192,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, +255,255,192,220,192,192,220,192,255,255,255,255,255,255,255,255, +255,192,192,192,128,128,96,128,128,128,128,128,128,128,128,128, +128,128,128,128,96,96,192,220,192,255,255,255,0,0,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +128,128,192,0,32,160,64,64,160,64,64,160,64,64,160,64, +64,160,64,64,160,64,64,160,64,64,160,64,64,160,64,64, +160,64,64,160,64,64,160,0,32,160,192,160,192,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,192,192,192,128,128, +96,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,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,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,192,220,192,164,160, +160,128,96,96,128,128,96,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,96,96,255,255,255,255,255,255,240,251,255,192,220,192, +192,192,192,128,128,128,128,96,96,128,128,96,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,64,96,96,240, +251,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,64,64,160,64,32,160,64,64,160,64,64,160,64,64,160, +64,64,160,64,64,160,64,64,160,64,64,160,64,64,160,64, +64,160,64,64,160,64,64,160,64,64,160,64,64,160,64,64, +160,64,64,160,64,64,160,64,64,160,64,64,160,64,64,160, +64,64,160,64,64,160,64,64,160,64,64,160,0,32,160,192, +192,192,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,255,255,192,192,192,128, +128,96,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,96,128,128,96,128,128,96, +128,128,96,128,128,96,128,128,96,128,128,96,128,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,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,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,192, +192,192,128,128,96,128,128,128,128,128,128,128,128,128,128,128, +128,128,96,96,240,251,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,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,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,255,255, +255,255,255,255,255,164,160,160,128,128,96,128,128,128,128,128, +128,128,128,128,128,128,128,128,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,192,192,192,128,128,96,128,128,128,128,128,128,128,128,128, +128,128,128,128,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,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,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,192,192,192,128,128,96,128, +128,128,128,128,128,128,128,128,128,128,128,128,96,96,192,220, +192,255,255,255,0,0,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,192,220,192,0,32,160,64,64, +160,64,64,160,64,64,160,64,64,160,64,64,160,64,64,160, +64,64,160,64,64,160,64,64,160,64,64,160,64,64,160,64, +32,160,128,128,192,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,192,192,192,128,128,96,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,96,255,255,255,240,251,255,240,251,255,240,251,255, +192,192,192,192,192,192,192,192,192,192,220,192,192,220,192,192, +220,192,192,220,192,164,160,160,192,192,192,192,192,192,192,192, +192,192,192,192,164,160,160,164,160,160,164,160,160,128,128,128, +128,96,96,128,96,96,128,128,96,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +96,96,128,96,96,128,96,96,128,128,96,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,96,96,192,192,192,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,128,160,192,0,32,160,64,64,160,64, +64,160,64,64,160,64,64,160,64,64,160,64,64,160,64,64, +160,64,64,160,64,64,160,64,64,160,64,64,160,64,64,160, +64,64,160,64,64,160,64,64,160,64,64,160,64,64,160,64, +64,160,64,64,160,64,64,160,64,64,160,64,64,160,64,64, +160,64,64,160,64,64,160,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,255, +255,255,255,255,192,192,192,128,128,96,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,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,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,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,192,192,192,128,128,96,128,128,128, +128,128,128,128,128,128,128,128,128,128,96,96,240,251,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,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,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,255,255,255,255,255,255,255,164,160,160, +128,128,96,128,128,128,128,128,128,128,128,128,128,128,128,128, +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,192,192,192,128,128,96,128, +128,128,128,128,128,128,128,128,128,128,128,128,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,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,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,192,192,192,128,128,96,128,128,128,128,128,128,128,128,128, +128,128,128,128,96,96,192,220,192,255,255,255,0,0,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,64,64,128,64,64,160,64,64,160,64,64,160,64, +64,160,64,64,160,64,64,160,64,64,160,64,64,160,64,64, +160,64,64,160,64,64,160,64,64,160,64,64,160,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,192,192,192,128,128, +96,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,96,96,128, +96,96,128,96,96,128,96,96,128,96,96,128,128,96,128,96, +96,128,96,96,128,96,96,128,96,96,128,96,96,128,128,96, +128,128,96,128,128,96,128,128,96,128,128,96,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,64,96,96,192,192,192,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,192,220,192,0,32, +160,64,64,160,64,64,160,64,64,160,64,64,160,64,64,160, +64,64,160,64,64,160,64,64,160,64,64,160,64,64,160,64, +64,160,64,64,160,64,64,160,64,64,160,64,64,160,64,64, +160,64,64,160,64,64,160,64,64,160,64,64,160,64,64,160, +64,64,160,64,64,160,64,64,160,0,32,160,128,128,192,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,255,255,255,255,255,192,192,192,128, +128,96,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,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,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,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,192, +192,192,128,128,96,128,128,128,128,128,128,128,128,128,128,128, +128,128,96,96,240,251,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,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,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,255,255, +255,255,255,255,255,164,160,160,128,128,96,128,128,128,128,128, +128,128,128,128,128,128,128,128,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,192,192,192,128,128,96,128,128,128,128,128,128,128,128,128, +128,128,128,128,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,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,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,192,192,192,128,128,96,128, +128,128,128,128,128,128,128,128,128,128,128,128,96,96,192,220, +192,255,255,255,0,0,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,192,192,192,0,32, +160,64,64,160,64,64,160,64,64,160,64,64,160,64,64,160, +64,64,160,64,64,160,64,64,160,64,64,160,64,64,160,64, +64,160,0,32,128,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,192,192,192,128,128,96,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,96,96,192,220, +192,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,0,32,160,64,64,160,64,64,160,64,64,160,64, +64,160,64,64,160,64,64,160,64,64,160,64,64,160,64,64, +160,64,64,160,64,64,160,64,64,160,64,64,160,64,64,160, +64,64,160,64,64,160,64,64,160,64,64,160,64,64,160,64, +64,160,64,64,160,64,64,160,64,64,160,64,64,160,64,64, +160,0,32,128,240,251,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,255,255, +255,255,255,255,192,192,192,128,128,96,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,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,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,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,192,192,192,128,128,96,128,128,128, +128,128,128,128,128,128,128,128,128,128,96,96,240,251,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,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,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,255,255,255,255,255,255,255,164,160,160, +128,128,96,128,128,128,128,128,128,128,128,128,128,128,128,128, +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,192,192,192,128,128,96,128, +128,128,128,128,128,128,128,128,128,128,128,128,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,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,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,192,192,192,128,128,96,128,128,128,128,128,128,128,128,128, +128,128,128,128,96,96,192,220,192,255,255,255,0,0,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,32,160,64,64,160,64,64,160,64, +64,160,64,64,160,64,64,160,64,64,160,64,64,160,64,64, +160,64,64,160,64,64,160,64,64,160,0,32,160,240,251,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,192,192,192,128,128, +96,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,96,96, +128,128,128,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,64,64,160,64,32,160,64,64, +160,64,64,160,64,64,160,64,64,160,64,64,160,64,64,160, +64,64,160,64,64,160,64,64,160,64,64,160,64,64,160,64, +64,160,64,64,160,64,64,160,64,64,160,64,64,160,64,64, +160,64,64,160,64,64,160,64,64,160,64,64,160,64,64,160, +64,64,160,64,64,160,64,32,160,64,96,160,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,255,255,255,255,255,255,255,255,192,192,192,128, +128,96,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,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,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,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,192, +192,192,128,128,96,128,128,128,128,128,128,128,128,128,128,128, +128,128,96,96,192,220,192,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,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,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,255, +255,255,255,255,255,164,160,160,128,128,96,128,128,128,128,128, +128,128,128,128,128,128,128,128,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,192,192,192,128,128,96,128,128,128,128,128,128,128,128,128, +128,128,128,128,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,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,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,192,192,192,128,128,96,128, +128,128,128,128,128,128,128,128,128,128,128,128,96,96,192,220, +192,255,255,255,0,0,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,128,128, +192,0,32,160,64,64,160,64,64,160,64,64,160,64,64,160, +64,64,160,64,64,160,64,64,160,64,64,160,64,64,160,64, +64,160,0,32,160,192,160,192,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,192,192,192,128,128,96,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +96,96,128,128,96,192,192,192,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,64,64,128, +64,32,160,64,64,160,64,64,160,64,64,160,64,64,160,64, +64,160,64,64,160,64,64,160,64,64,160,64,64,160,64,64, +160,64,64,160,64,64,160,64,64,160,64,64,160,64,64,160, +64,64,160,64,64,160,64,64,160,64,64,160,64,64,160,64, +64,160,64,64,160,64,64,160,64,64,160,64,64,160,0,32, +160,192,220,192,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,255,255,255,255, +255,255,255,255,192,192,192,128,96,96,128,128,96,128,128,96, +128,128,96,128,128,96,128,128,96,128,128,96,128,128,96,128, +128,96,128,128,96,128,128,96,128,128,96,128,128,96,128,128, +96,128,128,96,128,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,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,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,192,192,192,128,96,96,128,128,96, +128,128,96,128,128,96,128,128,128,128,96,96,240,251,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,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,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,255,255,255,255,255,255,255,164,160,160, +128,96,96,128,128,128,128,128,96,128,128,96,128,128,128,64, +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,192,192,192,128,96,96,128, +128,96,128,128,96,128,128,96,128,128,128,64,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,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,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,192,192,192,128,96,96,128,128,96,128,128,96,128,128,96, +128,128,96,128,96,96,192,220,192,255,255,255,0,0,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,240,251,255,0,32,160,64,64,160,64, +64,160,64,64,160,64,64,160,64,64,160,64,64,160,64,64, +160,64,64,160,64,64,160,64,64,160,64,32,160,128,128,160, +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,192,192,192,128,128, +96,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,96,96,128,128,96,192,192,192,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,64,64,160,64,32,160,64,64,160,64,64,160,64,64, +160,64,64,160,64,64,160,64,64,160,64,64,160,64,64,160, +64,64,160,64,64,160,64,64,160,64,64,160,64,64,160,64, +64,160,64,64,160,64,64,160,64,64,160,64,64,160,64,64, +160,64,64,160,64,64,160,64,64,160,64,64,160,64,64,160, +64,64,160,64,64,160,64,64,160,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,255,255,255,255,255,255,255,255,255,255,255,192,220,192,164, +160,160,164,160,160,164,160,160,164,160,160,164,160,160,164,160, +160,164,160,160,164,160,160,164,160,160,164,160,160,164,160,160, +164,160,160,164,160,160,164,160,160,164,160,160,164,160,160,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,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,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,192, +220,192,164,160,160,164,160,160,164,160,160,164,160,160,164,160, +160,164,160,160,240,251,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,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,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,255,255, +255,255,255,255,255,192,220,192,164,160,160,164,160,160,164,160, +160,164,160,160,164,160,160,164,160,160,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,192,220,192,164,160,160,164,160,160,164,160,160,164,160,160, +164,160,160,164,160,160,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,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,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,192,220,192,164,160,160,164, +160,160,164,160,160,164,160,160,164,160,160,164,160,160,240,251, +255,255,255,255,0,0,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,64,96,160,64,64,160,64,64,160,64,64,160,64,64,160, +64,64,160,64,64,160,64,64,160,64,64,160,64,64,160,64, +64,160,64,64,160,64,64,160,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,192,192,192,128,128,96,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,96, +128,96,96,128,96,96,164,160,160,240,251,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,64,64,128,64,32,160,64,64,160, +64,64,160,64,64,160,64,64,160,64,64,160,64,64,160,64, +64,160,64,64,160,64,64,160,64,64,160,64,64,160,64,64, +160,64,64,160,64,64,160,64,64,160,64,64,160,64,64,160, +64,64,160,64,64,160,64,64,160,64,64,160,64,64,160,64, +64,160,64,64,160,64,64,160,64,64,160,0,32,160,192,220, +192,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,192,220,192,0,32,160,64, +64,160,64,64,160,64,64,160,64,64,160,64,64,160,64,64, +160,64,64,160,64,64,160,64,64,160,64,64,160,0,32,160, +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,164,160,160,128,96, +96,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128, +128,128,128,128,128,128,128,128,128,128,128,96,128,96,96,64, +96,96,128,128,128,164,160,160,192,220,192,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,240,251,255,64,64,160,64, +32,160,64,64,160,64,64,160,64,64,160,64,64,160,64,64, +160,64,64,160,64,64,160,64,64,160,64,64,160,64,64,160, +64,64,160,64,64,160,64,64,160,64,64,160,64,64,160,64, +64,160,64,64,160,64,64,160,64,64,160,64,64,160,64,64, +160,64,64,160,64,64,160,64,64,160,64,64,160,64,64,160, +64,32,160,64,96,160,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,64,64,160,64,64,160,64,64,160,64,64,160, +64,64,160,64,64,160,64,64,160,64,64,160,64,64,160,64, +64,160,64,64,160,0,32,160,192,192,192,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,192,220,192,128,160,128,128,128,128,128,96,96,128, +96,96,128,128,96,128,128,96,128,128,96,128,128,96,128,128, +96,128,128,96,128,128,96,128,128,96,128,128,96,128,128,96, +128,128,96,128,128,96,128,128,96,128,128,96,128,128,96,128, +128,96,128,128,96,128,128,96,128,128,96,128,128,96,128,128, +96,128,128,96,128,128,96,128,128,96,128,128,96,128,128,96, +128,128,96,128,128,96,128,128,96,128,128,96,128,128,96,128, +128,96,128,128,96,128,128,96,128,128,96,128,128,96,128,128, +96,128,128,96,128,128,96,128,128,96,128,128,96,128,128,96, +128,128,96,128,128,96,128,128,96,128,128,96,128,128,96,128, +96,96,128,96,96,128,96,96,128,96,96,128,128,128,164,160, +160,192,192,192,192,220,192,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,192,192, +192,0,32,128,64,64,160,64,64,160,64,64,160,64,64,160, +64,64,160,64,64,160,64,64,160,64,64,160,64,64,160,64, +64,160,64,64,160,64,64,160,64,64,160,64,64,160,64,64, +160,64,64,160,64,64,160,64,64,160,64,64,160,64,64,160, +64,64,160,64,64,160,64,64,160,64,64,160,64,64,160,64, +64,160,64,64,160,64,64,160,0,32,160,240,251,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,192,192,192,0, +32,160,64,64,160,64,64,160,64,64,160,64,64,160,64,64, +160,64,64,160,64,64,160,64,64,160,64,64,160,0,32,160, +128,128,192,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,240,251,255,192,192,192,192,192,192, +164,160,160,164,160,160,164,160,160,164,160,160,164,160,160,164, +160,160,164,160,160,192,192,192,192,192,192,192,192,192,192,192, +192,192,192,192,192,192,192,192,192,192,192,192,192,192,192,192, +192,192,192,192,192,192,192,192,192,192,192,192,192,192,192,192, +192,192,192,192,192,192,192,192,192,192,192,192,192,192,192,192, +192,192,192,192,192,192,192,192,192,192,192,192,192,192,192,192, +192,192,192,192,192,192,192,192,192,192,192,192,192,192,192,192, +192,160,192,192,192,164,160,160,164,160,160,164,160,160,164,160, +160,192,192,192,192,192,192,240,251,255,240,251,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,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,128,160,192,0,32,160,64,64,160,64,64,160,64, +64,160,64,64,160,64,64,160,64,64,160,64,64,160,64,64, +160,64,64,160,64,64,160,64,64,160,64,64,160,64,64,160, +64,64,160,64,64,160,64,64,160,64,64,160,64,64,160,64, +64,160,64,64,160,64,64,160,64,64,160,64,64,160,64,64, +160,64,64,160,64,64,160,64,64,160,64,64,160,0,32,160, +128,128,192,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,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,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,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,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,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,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,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,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,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,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,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,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,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,255,0,0,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,64,64,160,64,64,160,64,64,160, +64,64,160,64,64,160,64,64,160,64,64,160,64,64,160,64, +64,160,64,64,160,64,64,160,64,64,160,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,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,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,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,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,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,64,64,160,0,32,160,64,64, +160,64,64,160,64,64,160,64,64,160,64,64,160,64,64,160, +64,64,160,64,64,160,64,64,160,64,64,160,64,64,160,64, +64,160,64,64,160,64,64,160,64,64,160,64,64,160,64,64, +160,64,64,160,64,64,160,64,64,160,64,64,160,64,64,160, +64,64,160,64,64,160,64,64,160,64,64,160,64,64,160,64, +64,160,64,64,160,64,64,128,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, +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,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, +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,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, +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,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, +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,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, +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,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, +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,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, +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,255,255,255,255,0,0,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,192, +192,192,0,32,160,64,64,160,64,64,160,64,64,160,64,64, +160,64,64,160,64,64,160,64,64,160,64,64,160,64,64,160, +0,32,160,240,251,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,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,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,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,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,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,192,160,192,0,32,160, +64,64,160,64,64,160,64,64,160,64,64,160,64,64,160,64, +64,160,64,64,160,64,64,160,64,64,160,64,64,160,64,64, +160,64,64,160,64,64,160,64,64,160,64,64,160,64,64,160, +64,64,160,64,64,160,64,64,160,64,64,160,64,64,160,64, +64,160,64,64,160,64,64,160,64,64,160,64,64,160,64,64, +160,64,64,160,64,64,160,64,64,160,0,32,128,240,251,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,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,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,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,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,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,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,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,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,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,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,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,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,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,255, +255,255,255,255,0,0,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,64,64,128,64,64,160, +64,64,160,64,64,160,64,64,160,64,64,160,64,64,160,64, +64,160,64,64,160,64,64,160,0,32,160,128,160,192,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,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,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,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,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,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,240,251,255,64, +64,160,0,32,160,64,64,160,64,64,160,64,64,160,64,64, +160,64,64,160,64,64,160,64,64,160,64,64,160,64,64,160, +64,64,160,64,64,160,64,64,160,64,64,160,64,64,160,64, +64,160,64,64,160,64,64,160,64,64,160,64,64,160,64,64, +160,64,64,160,64,64,160,64,64,160,64,64,160,64,64,160, +64,64,160,64,64,160,64,64,160,64,64,160,64,64,160,0, +32,160,128,160,192,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,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,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,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,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,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,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,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,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,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,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,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,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,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,255,255,255,255,255,255,255,0,0,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,192,192,192,0,32,160,64,64,160,64,64,160,64,64, +160,64,64,160,64,64,160,64,64,160,64,64,160,64,64,160, +64,64,160,64,64,160,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,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,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,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,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,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,128,128,160,0,32,160,64,64,160,64,64,160,64,64,160, +64,64,160,64,64,160,64,64,160,64,64,160,64,64,160,64, +64,160,64,64,160,64,64,160,64,64,160,64,64,160,64,64, +160,64,64,160,64,64,160,64,64,160,64,64,160,64,64,160, +64,64,160,64,64,160,64,64,160,64,64,160,64,64,160,64, +64,160,64,64,160,64,64,160,64,64,160,64,64,160,64,64, +160,64,64,160,0,32,160,64,96,160,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,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,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,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,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,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,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,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,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,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,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,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,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,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,255,255,255,255,255,255, +255,255,255,255,0,0,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,64,64,160, +64,64,160,64,64,160,64,64,160,64,64,160,64,64,160,64, +64,160,64,64,160,64,64,160,64,64,160,0,32,160,240,251, +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,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, +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,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, +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,255,255,255,255,255,255,255,255, +255,255,255,128,128,192,0,32,160,0,32,160,64,64,160,64, +64,160,64,64,160,64,64,160,64,64,160,64,64,160,64,64, +160,64,64,160,64,64,160,64,64,160,64,64,160,64,64,160, +64,64,160,64,64,160,64,64,160,64,64,160,64,64,160,64, +64,160,64,64,160,64,64,160,64,64,160,64,64,160,64,64, +160,64,64,160,64,64,160,64,64,160,64,64,160,64,64,160, +64,64,160,64,64,160,64,64,160,64,64,160,64,64,128,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,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,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,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,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,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,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,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,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,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,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,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,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,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,255, +255,255,255,255,255,255,255,255,255,255,255,255,0,0,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,192,220,192,0,32,160,64,64,160,64,64, +160,64,64,160,64,64,160,64,64,160,64,64,160,64,64,160, +64,64,160,0,32,160,192,160,192,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,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,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,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,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,255,240,251,255,128,128,192,0,32,128,0,32,160,64,64, +160,64,64,160,64,64,160,64,64,160,64,64,160,64,64,160, +64,64,160,64,64,160,64,64,160,64,64,160,64,64,160,64, +64,160,64,64,160,64,64,160,64,64,160,64,64,160,64,64, +160,64,64,160,64,64,160,64,64,160,64,64,160,64,64,160, +64,64,160,64,64,160,64,64,160,64,64,160,64,64,160,64, +64,160,64,64,160,64,64,160,64,64,160,64,64,160,64,64, +160,0,32,128,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,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,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,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,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,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,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,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,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,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,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,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,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,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,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,0,0,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,255,255, +64,64,160,64,64,160,64,64,160,64,64,160,64,64,160,64, +64,160,64,64,160,64,64,160,64,64,160,64,64,160,64,64, +160,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,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,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,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,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,192,220,192,64,96,160,0,32,160,0,32,160, +64,64,160,64,64,160,64,64,160,64,64,160,64,64,160,64, +64,160,64,64,160,64,64,160,64,64,160,64,64,160,64,64, +160,64,64,160,64,64,160,64,64,160,64,64,160,64,64,160, +64,64,160,64,64,160,64,64,160,64,64,160,64,64,160,64, +64,160,64,64,160,64,64,160,64,64,160,64,64,160,64,64, +160,64,64,160,64,64,160,64,64,160,64,64,160,64,64,160, +64,64,160,64,64,160,0,32,160,240,251,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,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,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,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,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,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,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,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,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,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,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,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,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,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,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,0,0,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,255,255,240,251,255,0,32,160,64,64, +160,64,64,160,64,64,160,64,64,160,64,64,160,64,64,160, +64,64,160,64,64,160,0,32,160,240,251,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,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,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,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,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,240,251,255,128,160,192,64,64,128,0,32,160,64, +64,160,64,64,160,64,64,160,64,64,160,64,64,160,64,64, +160,64,64,160,64,64,160,64,64,160,64,64,160,64,64,160, +64,64,160,64,64,160,64,64,160,64,64,160,64,64,160,64, +64,160,64,64,160,64,64,160,64,64,160,64,64,160,64,64, +160,64,64,160,64,64,160,64,64,160,64,64,160,64,64,160, +64,64,160,64,64,160,64,64,160,64,64,160,64,64,160,64, +64,160,64,64,160,64,64,160,64,64,160,0,32,160,240,251, +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,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, +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,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, +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,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, +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,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, +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,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, +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,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, +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,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, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,0,0,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,255,255, +255,255,255,128,96,160,0,32,160,64,64,160,64,64,160,64, +64,160,64,64,160,64,64,160,64,64,160,64,64,160,0,32, +160,128,160,192,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,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,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,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,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,192,160,192,64,64,160,0,32,160,0,32, +160,64,64,160,64,64,160,64,64,160,64,64,160,64,64,160, +64,64,160,64,64,160,64,64,160,64,64,160,64,64,160,64, +64,160,64,64,160,64,64,160,64,64,160,64,64,160,64,64, +160,64,64,160,64,64,160,64,64,160,64,64,160,64,64,160, +64,64,160,64,64,160,64,64,160,64,64,160,64,64,160,64, +64,160,64,64,160,64,64,160,64,64,160,64,64,160,64,64, +160,64,64,160,64,64,160,64,64,160,64,64,160,64,64,160, +0,32,160,240,251,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,255,255,255,255,255,255,255,255,0,32, +160,64,64,160,64,64,160,64,64,160,64,64,160,64,64,160, +64,64,160,64,64,160,64,64,160,64,64,128,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,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,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,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,255,255,255,255, +255,240,251,255,128,160,192,64,96,160,0,32,160,0,32,160, +64,64,160,64,64,160,64,64,160,64,64,160,64,64,160,64, +64,160,64,64,160,64,64,160,64,64,160,64,64,160,64,64, +160,64,64,160,64,64,160,64,64,160,64,64,160,64,64,160, +64,64,160,64,64,160,64,64,160,64,64,160,64,64,160,64, +64,160,64,64,160,64,64,160,64,64,160,64,64,160,64,64, +160,64,64,160,64,64,160,64,64,160,64,64,160,64,64,160, +64,64,160,64,64,160,64,64,160,64,64,160,64,64,160,64, +64,160,64,32,160,64,32,160,240,251,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,255,255, +255,255,255,255,255,255,128,160,192,0,32,160,64,64,160,64, +64,160,64,64,160,64,64,160,64,64,160,64,64,160,64,64, +160,0,32,160,192,192,192,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,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,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,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,240,251,255, +192,192,192,128,128,160,64,64,160,0,32,160,0,32,160,64, +64,160,64,64,160,64,64,160,64,64,160,64,64,160,64,64, +160,64,64,160,64,64,160,64,64,160,64,64,160,64,64,160, +64,64,160,64,64,160,64,64,160,64,64,160,64,64,160,64, +64,160,64,64,160,64,64,160,64,64,160,64,64,160,64,64, +160,64,64,160,64,64,160,64,64,160,64,64,160,64,64,160, +64,64,160,64,64,160,64,64,160,64,64,160,64,64,160,64, +64,160,64,64,160,64,64,160,64,64,160,64,64,160,64,64, +160,64,64,160,64,64,160,0,32,160,64,64,160,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,255,255,255,255,255,255,255,255,255,255, +255,64,64,160,64,64,160,64,64,160,64,64,160,64,64,160, +64,64,160,64,64,160,64,64,160,0,32,160,128,128,192,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,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,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,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,192,220,192,128,160,192,128, +96,160,64,64,128,0,32,160,0,32,160,64,32,160,64,64, +160,64,64,160,64,64,160,64,64,160,64,64,160,64,64,160, +64,64,160,64,64,160,64,64,160,64,64,160,64,64,160,64, +64,160,64,64,160,64,64,160,64,64,160,64,64,160,64,64, +160,64,64,160,64,64,160,64,64,160,64,64,160,64,64,160, +64,64,160,64,64,160,64,64,160,64,64,160,64,64,160,64, +64,160,64,64,160,64,64,160,64,64,160,64,64,160,64,64, +160,64,64,160,64,64,160,64,64,160,64,64,160,64,64,160, +64,64,160,64,64,160,64,64,160,64,64,160,0,32,160,128, +96,160,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,255,255, +255,255,255,255,255,255,255,255,255,192,192,192,0,32,160,64, +64,160,64,64,160,64,64,160,64,64,160,64,64,160,64,64, +160,64,64,160,0,32,128,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,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,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,240, +251,255,192,220,192,128,160,192,128,128,160,64,64,160,0,32, +128,0,32,160,0,32,160,64,32,160,64,64,160,64,64,160, +64,64,160,64,64,160,64,64,160,64,64,160,64,64,160,64, +64,160,64,64,160,64,64,160,64,64,160,64,64,160,64,64, +160,64,64,160,64,64,160,64,64,160,64,64,160,64,64,160, +64,64,160,64,64,160,64,64,160,64,64,160,64,64,160,64, +64,160,64,64,160,64,64,160,64,64,160,64,64,160,64,64, +160,64,64,160,64,64,160,64,64,160,64,64,160,64,64,160, +64,64,160,64,64,160,64,64,160,64,64,160,64,64,160,64, +64,160,64,64,160,64,64,160,64,64,160,64,64,160,64,64, +160,0,32,128,192,160,192,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,64,96,160,0,32,160,64,64,160,64,64,160, +64,64,160,64,64,160,64,64,160,64,64,160,0,32,160,128, +160,192,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,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,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,240,251,255,192,220,192,192,192,192,128,160,192,128,96, +160,64,64,160,64,32,160,0,32,160,0,32,160,0,32,160, +64,32,160,64,64,160,64,64,160,64,64,160,64,64,160,64, +64,160,64,64,160,64,64,160,64,64,160,64,64,160,64,64, +160,64,64,160,64,64,160,64,64,160,64,64,160,64,64,160, +64,64,160,64,64,160,64,64,160,64,64,160,64,64,160,64, +64,160,64,64,160,64,64,160,64,64,160,64,64,160,64,64, +160,64,64,160,64,64,160,64,64,160,64,64,160,64,64,160, +64,64,160,64,64,160,64,64,160,64,64,160,64,64,160,64, +64,160,64,64,160,64,64,160,64,64,160,64,64,160,64,64, +160,64,64,160,64,64,160,64,64,160,64,64,160,64,64,160, +64,64,160,0,32,160,64,64,160,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,255,255,255,0,0,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,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,0, +32,160,64,64,160,64,64,160,64,64,160,64,64,160,64,64, +160,64,64,160,64,64,160,64,64,160,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,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,240, +251,255,240,251,255,192,192,192,192,192,192,128,160,192,128,96, +160,64,96,160,64,64,128,0,32,128,0,32,160,0,32,160, +0,32,160,0,32,160,64,32,160,64,64,160,64,64,160,64, +64,160,64,64,160,64,64,160,64,64,160,64,64,160,64,64, +160,64,64,160,64,64,160,64,64,160,64,64,160,64,64,160, +64,64,160,64,64,160,64,64,160,64,64,160,64,64,160,64, +64,160,64,64,160,64,64,160,64,64,160,64,64,160,64,64, +160,64,64,160,64,64,160,64,64,160,64,64,160,64,64,160, +64,64,160,64,64,160,64,64,160,64,64,160,64,64,160,64, +64,160,64,64,160,64,64,160,64,64,160,64,64,160,64,64, +160,64,64,160,64,64,160,64,64,160,64,64,160,64,64,160, +64,64,160,64,64,160,64,64,160,64,64,160,64,64,160,64, +64,160,64,64,160,0,32,160,0,32,128,192,160,192,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,255,255,255,255,255,255,0,0,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,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,192,160,192,0,32,160,64,64,160, +64,64,160,64,64,160,64,64,160,64,64,160,64,64,160,0, +32,160,192,192,192,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,192,220,192,164,160,160,128,160,192,128, +160,192,128,128,160,128,128,160,64,96,160,64,96,192,64,32, +128,0,32,128,0,32,128,0,32,160,0,32,160,0,32,160, +0,32,160,0,32,160,64,32,160,64,64,160,64,64,160,64, +64,160,64,64,160,64,64,160,64,64,160,64,64,160,64,64, +160,64,64,160,64,64,160,64,64,160,64,64,160,64,64,160, +64,64,160,64,64,160,64,64,160,64,64,160,64,64,160,64, +64,160,64,64,160,64,64,160,64,64,160,64,64,160,64,64, +160,64,64,160,64,64,160,64,64,160,64,64,160,64,64,160, +64,64,160,64,64,160,64,64,160,64,64,160,64,64,160,64, +64,160,64,64,160,64,64,160,64,64,160,64,64,160,64,64, +160,64,64,160,64,64,160,64,64,160,64,64,160,64,64,160, +64,64,160,64,64,160,64,64,160,64,64,160,64,64,160,64, +64,160,64,64,160,64,64,160,64,64,160,64,64,160,64,64, +160,64,64,160,64,64,160,64,32,160,0,32,160,128,96,160, +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,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, +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,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, +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,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, +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,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, +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,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, +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,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, +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,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, +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,255,255,255,255,255,255,255,255, +255,255,255,255,0,0,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,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,64,64,160,64,64,160,64,64,160,64,64,160,64,64, +160,64,64,160,64,64,160,64,32,160,64,96,160,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,192,192,192,128,128,160,64,32,128,0,32,160,0,32,160, +0,32,160,64,64,160,64,64,160,64,64,160,64,64,160,64, +64,160,64,64,160,64,64,160,64,64,160,64,64,160,64,64, +160,64,64,160,64,64,160,64,64,160,64,64,160,64,64,160, +64,64,160,64,64,160,64,64,160,64,64,160,64,64,160,64, +64,160,64,64,160,64,64,160,64,64,160,64,64,160,64,64, +160,64,64,160,64,64,160,64,64,160,64,64,160,64,64,160, +64,64,160,64,64,160,64,64,160,64,64,160,64,64,160,64, +64,160,64,64,160,64,64,160,64,64,160,64,64,160,64,64, +160,64,64,160,64,64,160,64,64,160,64,64,160,64,64,160, +64,64,160,64,64,160,64,64,160,64,64,160,64,64,160,64, +64,160,64,64,160,64,64,160,64,64,160,64,64,160,64,64, +160,64,64,160,64,64,160,64,64,160,64,64,160,64,64,160, +64,64,160,64,64,160,64,64,160,64,32,160,0,32,160,64, +96,160,240,251,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,0,0,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,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,240,251,255,0,32,128, +64,64,160,64,64,160,64,64,160,64,64,160,64,64,160,64, +64,160,0,32,160,240,251,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,255, +255,255,240,251,255,128,160,192,64,64,160,0,32,160,0,32, +160,0,32,160,64,64,160,64,64,160,64,64,160,64,64,160, +64,64,160,64,64,160,64,64,160,64,64,160,64,64,160,64, +64,160,64,64,160,64,64,160,64,64,160,64,64,160,64,64, +160,64,64,160,64,64,160,64,64,160,64,64,160,64,64,160, +64,64,160,64,64,160,64,64,160,64,64,160,64,64,160,64, +64,160,64,64,160,64,64,160,64,64,160,64,64,160,64,64, +160,64,64,160,64,64,160,64,64,160,64,64,160,64,64,160, +64,64,160,64,64,160,64,64,160,64,64,160,64,64,160,64, +64,160,64,64,160,64,64,160,64,64,160,64,64,160,64,64, +160,64,64,160,64,64,160,64,64,160,64,64,160,64,64,160, +64,64,160,64,64,160,64,64,160,64,64,160,64,64,160,64, +64,160,64,64,160,64,64,160,64,64,160,64,32,160,0,32, +160,64,96,160,192,192,192,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,0,0,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,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,128,128,192,0,32,160,64,64,160,64,64, +160,64,64,160,64,64,160,64,64,160,64,32,160,64,96,160, +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,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,192,192,192,128,128,160,0,32,128,0, +32,160,0,32,160,64,64,160,64,64,160,64,64,160,64,64, +160,64,64,160,64,64,160,64,64,160,64,64,160,64,64,160, +64,64,160,64,64,160,64,64,160,64,64,160,64,64,160,64, +64,160,64,64,160,64,64,160,64,64,160,64,64,160,64,64, +160,64,64,160,64,64,160,64,64,160,64,64,160,64,64,160, +64,64,160,64,64,160,64,64,160,64,64,160,64,64,160,64, +64,160,64,64,160,64,64,160,64,64,160,64,64,160,64,64, +160,64,64,160,64,64,160,64,64,160,64,64,160,64,64,160, +64,64,160,64,64,160,64,64,160,64,64,160,64,64,160,64, +64,160,64,64,160,64,64,160,64,64,160,64,64,160,64,64, +160,64,64,160,64,64,160,64,64,160,64,64,160,0,32,160, +0,32,160,128,96,160,192,220,192,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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, +64,64,160,64,64,160,64,64,160,64,64,160,64,64,160,64, +64,160,64,64,160,0,32,160,240,251,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,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,240,251,255,128,160,192,64,96,160, +0,32,128,0,32,160,0,32,160,64,32,160,64,64,160,64, +64,160,64,64,160,64,64,160,64,64,160,64,64,160,64,64, +160,64,64,160,64,64,160,64,64,160,64,64,160,64,64,160, +64,64,160,64,64,160,64,64,160,64,64,160,64,64,160,64, +64,160,64,64,160,64,64,160,64,64,160,64,64,160,64,64, +160,64,64,160,64,64,160,64,64,160,64,64,160,64,64,160, +64,64,160,64,64,160,64,64,160,64,64,160,64,64,160,64, +64,160,64,64,160,64,64,160,64,64,160,64,64,160,64,64, +160,64,64,160,64,64,160,64,64,160,64,64,160,64,64,160, +64,64,160,64,64,160,64,64,160,64,64,160,0,32,160,0, +32,160,64,64,160,128,160,192,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, +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,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, +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,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, +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,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, +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,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, +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,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, +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,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, +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,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, +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,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,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,240,251,255,0,32,128,64,64, +160,64,64,160,64,64,160,64,64,160,64,64,160,64,32,160, +64,96,160,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,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,240,251,255,192,160, +192,128,128,192,0,32,128,0,32,160,0,32,160,0,32,160, +64,32,160,64,64,160,64,64,160,64,64,160,64,64,160,64, +64,160,64,64,160,64,64,160,64,64,160,64,64,160,64,64, +160,64,64,160,64,64,160,64,64,160,64,64,160,64,64,160, +64,64,160,64,64,160,64,64,160,64,64,160,64,64,160,64, +64,160,64,64,160,64,64,160,64,64,160,64,64,160,64,64, +160,64,64,160,64,64,160,64,64,160,64,64,160,64,64,160, +64,64,160,64,64,160,64,64,160,64,64,160,64,64,160,64, +64,160,64,64,160,64,64,160,64,32,160,0,32,160,0,32, +160,64,64,128,128,160,192,240,251,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,255,255,255,0,0,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,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,128,128,192,0,32,160,64,64,160,64,64,160,64, +64,160,64,64,160,64,64,160,0,32,160,240,251,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,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,255,255,255, +255,255,192,192,192,128,128,192,128,96,160,64,64,128,0,32, +128,0,32,160,0,32,160,64,32,160,64,32,160,64,64,160, +64,64,160,64,64,160,64,64,160,64,64,160,64,64,160,64, +64,160,64,64,160,64,64,160,64,64,160,64,64,160,64,64, +160,64,64,160,64,64,160,64,64,160,64,64,160,64,64,160, +64,64,160,64,64,160,64,64,160,64,64,160,64,64,160,64, +64,160,64,64,160,64,64,160,64,64,160,64,64,160,64,64, +160,64,32,160,0,32,160,0,32,160,0,32,160,64,64,160, +128,96,160,192,160,192,240,251,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, +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,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, +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,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, +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,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, +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,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, +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,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, +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,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, +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,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, +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,255,255,255,255,255,255,255,255, +255,255,255,255,0,0,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,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,64,64, +160,64,64,160,64,64,160,64,64,160,64,64,160,64,64,160, +64,32,160,64,96,160,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,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,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,192,220,192,192,192,192,128, +128,192,128,96,160,64,64,160,0,32,128,0,32,160,0,32, +160,0,32,160,0,32,160,0,32,160,0,32,160,64,32,160, +64,64,160,64,64,160,64,32,160,64,64,160,64,64,160,64, +64,160,64,64,160,64,64,160,64,64,160,64,32,160,64,32, +160,64,64,160,0,32,160,0,32,160,0,32,160,0,32,160, +0,32,160,0,32,160,64,64,160,64,96,160,128,128,192,192, +192,192,240,251,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,32,128,64,64,160,64, +64,160,64,64,160,64,64,160,64,64,160,0,32,160,240,251, +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,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, +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,240,251,255,192,220,192,164,160,160,192, +192,192,128,128,160,128,128,192,64,96,160,64,96,160,64,96, +192,64,96,192,64,64,160,64,32,128,64,64,128,64,64,128, +64,96,192,64,96,192,64,96,160,64,96,160,128,128,192,128, +128,192,192,160,192,192,192,192,240,251,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,255,255,0,0,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,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,192,160,192,0,32,160,64,64,160,64,64,160,64,64,160, +64,64,160,64,64,160,64,96,160,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,64,96,160,0, +32,160,64,64,160,64,64,160,64,64,160,64,64,160,0,32, +160,192,220,192,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,255,64,32,128,64,64,160,64,64,160, +64,64,160,64,64,160,64,64,160,64,64,160,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,255,192, +220,192,0,32,128,64,64,160,64,64,160,64,64,160,64,64, +160,0,32,160,192,192,192,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,0,0,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,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,255,255,255,255,128,160,192,0,32,160, +64,64,160,64,64,160,64,64,160,64,64,160,64,64,160,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,0,0,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,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,255,255, +255,255,255,255,255,64,64,160,64,32,160,64,64,160,64,64, +160,64,64,160,0,32,160,128,128,192,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,0,0,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,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,255,255,255,255,255,255,255,255,255,255, +64,32,160,64,64,160,64,64,160,64,64,160,64,64,160,0, +32,128,240,251,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,0,0,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,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,255,255, +255,255,255,255,255,255,255,255,192,220,192,0,32,160,64,64, +160,64,64,160,64,64,160,64,64,160,64,96,160,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,0,0,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,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,255,255,255,255,255,255,255,255,255,255, +255,255,255,128,160,192,0,32,160,64,64,160,64,64,160,64, +64,160,0,32,160,192,192,192,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, +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,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, +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,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, +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,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, +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,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, +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,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, +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,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, +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,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, +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,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, +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,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, +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,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, +255,255,255,255,255,255,255,255,255,255,255,255,0,0,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,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,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,64,96, +160,0,32,160,64,64,160,64,64,160,64,64,160,64,32,160, +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,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, +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,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, +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,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, +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,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, +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,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, +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,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, +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,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, +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,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, +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,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, +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,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, +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,255,255,255,255,255,255,255,255, +255,255,255,255,0,0,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,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,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,64,64,128,64,64,160,64, +64,160,64,64,160,0,32,160,128,128,160,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,255,255,255,255,255,255,255,255,255,0,0,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,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,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,240,251,255,0,32,128,64,64,160,64,64,160,64,64,160, +0,32,160,192,220,192,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,255,255, +255,255,255,255,0,0,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,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,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,192,192,192,0, +32,128,64,64,160,64,64,160,64,64,160,64,64,160,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,255,255,255,255,255,255,0,0,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,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,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,128,160,192,0,32,160,64,64,160, +64,64,160,0,32,160,128,128,160,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,255,255,255,0,0,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,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,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,128,96,160,0,32,160,64,64,160,64,64,160,0,32, +160,192,220,192,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,64,64,160, +64,32,160,64,64,160,64,64,160,64,64,128,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,64,32,160,64,64,160,64,64, +160,0,32,160,128,128,192,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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, +240,251,255,0,32,128,64,64,160,64,64,160,0,32,160,192, +220,192,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,192,192,192,0,32, +160,64,64,160,64,64,160,0,32,128,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,128,160,192,0,32,160,64,64,160,0, +32,160,64,96,160,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,255,255, +255,128,128,160,0,32,160,64,64,160,0,32,160,128,160,192, +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,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, +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,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, +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,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, +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,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, +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,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, +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,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, +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,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, +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,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, +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,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, +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,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, +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,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,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,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,255,255,255,255,255,255,128,96,160,0, +32,160,64,64,160,0,32,160,240,251,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,255,255, +255,255,255,255,255,255,255,64,96,160,0,32,160,64,64,160, +64,32,128,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,255,255,255,255,255,255,255,255,255,255, +255,255,64,64,160,64,64,160,0,32,160,64,96,160,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,0,0,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,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,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,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,0,32,128, +64,64,160,0,32,160,192,160,192,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,0,0,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,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,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,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,240,251,255,0,32,160,64,64,160,0,32, +128,240,251,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,0,0,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,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,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,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +192,220,192,0,32,128,64,64,160,64,32,160,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,0,0,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,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,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,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,255,255,255,255,192,220,192,0,32, +160,0,32,160,64,64,160,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,255,255,255,255,255,255,255,255,255, +255,255,255,255,0,0,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,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,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,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,164,160,160,0,32,160,0,32,160,128, +128,192,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,255,255,255,255,255,255,255,255,255,255,0,0,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,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,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,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,128,160,192,0,32,160,0,32,160,192,192,192,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,255,255,255, +255,255,255,255,0,0,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,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,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,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,192,160,192,0, +32,160,0,32,128,240,251,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,255,255,255,255,255,0,0,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,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,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,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,192,160,192,0,32,160,0,32,128, +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,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, +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,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, +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,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, +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,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, +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,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, +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,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, +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,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, +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,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, +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,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, +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,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, +255,255,255,255,0,0,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,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,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,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,192,160,192,0,32,128,64,64,160,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,255,0,0,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,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,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,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,192,220,192, +0,32,128,64,96,160,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,255,255,192,192,192,0,32,128,128,128, +160,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,255,255, +255,255,255,240,251,255,0,32,128,192,192,192,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,255,255,255,255,255,255,255,255,255,255, +255,0,32,128,240,251,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,0,32,128,240, +251,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,255,255,255,255,255,255,255,255,255,255, +255,255,255,255,255,255,255,64,96,160,240,251,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,255,255, +255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, +255,255,192,192,192,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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,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}; + +int eaLogo_image_sz = sizeof(eaLogo_image); + +
diff -r 000000000000 -r b567d56a59d7 lodepng.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/lodepng.cpp Fri Oct 03 13:30:09 2014 +0000 @@ -0,0 +1,6260 @@ +/* +LodePNG version 20131222 + +Copyright (c) 2005-2013 Lode Vandevenne + +This software is provided 'as-is', without any express or implied +warranty. In no event will the authors be held liable for any damages +arising from the use of this software. + +Permission is granted to anyone to use this software for any purpose, +including commercial applications, and to alter it and redistribute it +freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software + in a product, an acknowledgment in the product documentation would be + appreciated but is not required. + + 2. Altered source versions must be plainly marked as such, and must not be + misrepresented as being the original software. + + 3. This notice may not be removed or altered from any source + distribution. +*/ + +/* +The manual and changelog are in the header file "lodepng.h" +Rename this file to lodepng.cpp to use it for C++, or to lodepng.c to use it for C. +*/ + +#include "lodepng.h" + +#include <stdio.h> +#include <stdlib.h> + +#ifdef LODEPNG_COMPILE_CPP +#include <fstream> +#endif /*LODEPNG_COMPILE_CPP*/ + +#define VERSION_STRING "20131222" + +/* +This source file is built up in the following large parts. The code sections +with the "LODEPNG_COMPILE_" #defines divide this up further in an intermixed way. +-Tools for C and common code for PNG and Zlib +-C Code for Zlib (huffman, deflate, ...) +-C Code for PNG (file format chunks, adam7, PNG filters, color conversions, ...) +-The C++ wrapper around all of the above +*/ + +/*The malloc, realloc and free functions defined here with "lodepng_" in front +of the name, so that you can easily change them to others related to your +platform if needed. Everything else in the code calls these. Pass +-DLODEPNG_NO_COMPILE_ALLOCATORS to the compiler, or comment out +#define LODEPNG_COMPILE_ALLOCATORS in the header, to disable the ones here and +define them in your own project's source files without needing to change +lodepng source code. Don't forget to remove "static" if you copypaste them +from here.*/ + +#ifdef LODEPNG_COMPILE_ALLOCATORS +static void* lodepng_malloc(size_t size) +{ + return malloc(size); +} + +static void* lodepng_realloc(void* ptr, size_t new_size) +{ + return realloc(ptr, new_size); +} + +static void lodepng_free(void* ptr) +{ + free(ptr); +} +#else /*LODEPNG_COMPILE_ALLOCATORS*/ +void* lodepng_malloc(size_t size); +void* lodepng_realloc(void* ptr, size_t new_size); +void lodepng_free(void* ptr); +#endif /*LODEPNG_COMPILE_ALLOCATORS*/ + +/* ////////////////////////////////////////////////////////////////////////// */ +/* ////////////////////////////////////////////////////////////////////////// */ +/* // Tools for C, and common code for PNG and Zlib. // */ +/* ////////////////////////////////////////////////////////////////////////// */ +/* ////////////////////////////////////////////////////////////////////////// */ + +/* +Often in case of an error a value is assigned to a variable and then it breaks +out of a loop (to go to the cleanup phase of a function). This macro does that. +It makes the error handling code shorter and more readable. + +Example: if(!uivector_resizev(&frequencies_ll, 286, 0)) ERROR_BREAK(83); +*/ +#define CERROR_BREAK(errorvar, code)\ +{\ + errorvar = code;\ + break;\ +} + +/*version of CERROR_BREAK that assumes the common case where the error variable is named "error"*/ +#define ERROR_BREAK(code) CERROR_BREAK(error, code) + +/*Set error var to the error code, and return it.*/ +#define CERROR_RETURN_ERROR(errorvar, code)\ +{\ + errorvar = code;\ + return code;\ +} + +/*Try the code, if it returns error, also return the error.*/ +#define CERROR_TRY_RETURN(call)\ +{\ + unsigned error = call;\ + if(error) return error;\ +} + +/* +About uivector, ucvector and string: +-All of them wrap dynamic arrays or text strings in a similar way. +-LodePNG was originally written in C++. The vectors replace the std::vectors that were used in the C++ version. +-The string tools are made to avoid problems with compilers that declare things like strncat as deprecated. +-They're not used in the interface, only internally in this file as static functions. +-As with many other structs in this file, the init and cleanup functions serve as ctor and dtor. +*/ + +#ifdef LODEPNG_COMPILE_ZLIB +/*dynamic vector of unsigned ints*/ +typedef struct uivector +{ + unsigned* data; + size_t size; /*size in number of unsigned longs*/ + size_t allocsize; /*allocated size in bytes*/ +} uivector; + +static void uivector_cleanup(void* p) +{ + ((uivector*)p)->size = ((uivector*)p)->allocsize = 0; + lodepng_free(((uivector*)p)->data); + ((uivector*)p)->data = NULL; +} + +/*returns 1 if success, 0 if failure ==> nothing done*/ +static unsigned uivector_resize(uivector* p, size_t size) +{ + if(size * sizeof(unsigned) > p->allocsize) + { + size_t newsize = size * sizeof(unsigned) * 2; + void* data = lodepng_realloc(p->data, newsize); + if(data) + { + p->allocsize = newsize; + p->data = (unsigned*)data; + p->size = size; + } + else return 0; + } + else p->size = size; + return 1; +} + +/*resize and give all new elements the value*/ +static unsigned uivector_resizev(uivector* p, size_t size, unsigned value) +{ + size_t oldsize = p->size, i; + if(!uivector_resize(p, size)) return 0; + for(i = oldsize; i < size; i++) p->data[i] = value; + return 1; +} + +static void uivector_init(uivector* p) +{ + p->data = NULL; + p->size = p->allocsize = 0; +} + +#ifdef LODEPNG_COMPILE_ENCODER +/*returns 1 if success, 0 if failure ==> nothing done*/ +static unsigned uivector_push_back(uivector* p, unsigned c) +{ + if(!uivector_resize(p, p->size + 1)) return 0; + p->data[p->size - 1] = c; + return 1; +} + +/*copy q to p, returns 1 if success, 0 if failure ==> nothing done*/ +static unsigned uivector_copy(uivector* p, const uivector* q) +{ + size_t i; + if(!uivector_resize(p, q->size)) return 0; + for(i = 0; i < q->size; i++) p->data[i] = q->data[i]; + return 1; +} +#endif /*LODEPNG_COMPILE_ENCODER*/ +#endif /*LODEPNG_COMPILE_ZLIB*/ + +/* /////////////////////////////////////////////////////////////////////////// */ + +/*dynamic vector of unsigned chars*/ +typedef struct ucvector +{ + unsigned char* data; + size_t size; /*used size*/ + size_t allocsize; /*allocated size*/ +} ucvector; + +/*returns 1 if success, 0 if failure ==> nothing done*/ +static unsigned ucvector_resize(ucvector* p, size_t size) +{ + if(size * sizeof(unsigned char) > p->allocsize) + { + size_t newsize = size * sizeof(unsigned char) * 2; + void* data = lodepng_realloc(p->data, newsize); + if(data) + { + p->allocsize = newsize; + p->data = (unsigned char*)data; + p->size = size; + } + else return 0; /*error: not enough memory*/ + } + else p->size = size; + return 1; +} + +#ifdef LODEPNG_COMPILE_PNG + +static void ucvector_cleanup(void* p) +{ + ((ucvector*)p)->size = ((ucvector*)p)->allocsize = 0; + lodepng_free(((ucvector*)p)->data); + ((ucvector*)p)->data = NULL; +} + +static void ucvector_init(ucvector* p) +{ + p->data = NULL; + p->size = p->allocsize = 0; +} + +#ifdef LODEPNG_COMPILE_DECODER +/*resize and give all new elements the value*/ +static unsigned ucvector_resizev(ucvector* p, size_t size, unsigned char value) +{ + size_t oldsize = p->size, i; + if(!ucvector_resize(p, size)) return 0; + for(i = oldsize; i < size; i++) p->data[i] = value; + return 1; +} +#endif /*LODEPNG_COMPILE_DECODER*/ +#endif /*LODEPNG_COMPILE_PNG*/ + +#ifdef LODEPNG_COMPILE_ZLIB +/*you can both convert from vector to buffer&size and vica versa. If you use +init_buffer to take over a buffer and size, it is not needed to use cleanup*/ +static void ucvector_init_buffer(ucvector* p, unsigned char* buffer, size_t size) +{ + p->data = buffer; + p->allocsize = p->size = size; +} +#endif /*LODEPNG_COMPILE_ZLIB*/ + +#if (defined(LODEPNG_COMPILE_PNG) && defined(LODEPNG_COMPILE_ANCILLARY_CHUNKS)) || defined(LODEPNG_COMPILE_ENCODER) +/*returns 1 if success, 0 if failure ==> nothing done*/ +static unsigned ucvector_push_back(ucvector* p, unsigned char c) +{ + if(!ucvector_resize(p, p->size + 1)) return 0; + p->data[p->size - 1] = c; + return 1; +} +#endif /*defined(LODEPNG_COMPILE_PNG) || defined(LODEPNG_COMPILE_ENCODER)*/ + + +/* ////////////////////////////////////////////////////////////////////////// */ + +#ifdef LODEPNG_COMPILE_PNG +#ifdef LODEPNG_COMPILE_ANCILLARY_CHUNKS +/*returns 1 if success, 0 if failure ==> nothing done*/ +static unsigned string_resize(char** out, size_t size) +{ + char* data = (char*)lodepng_realloc(*out, size + 1); + if(data) + { + data[size] = 0; /*null termination char*/ + *out = data; + } + return data != 0; +} + +/*init a {char*, size_t} pair for use as string*/ +static void string_init(char** out) +{ + *out = NULL; + string_resize(out, 0); +} + +/*free the above pair again*/ +static void string_cleanup(char** out) +{ + lodepng_free(*out); + *out = NULL; +} + +static void string_set(char** out, const char* in) +{ + size_t insize = strlen(in), i = 0; + if(string_resize(out, insize)) + { + for(i = 0; i < insize; i++) + { + (*out)[i] = in[i]; + } + } +} +#endif /*LODEPNG_COMPILE_ANCILLARY_CHUNKS*/ +#endif /*LODEPNG_COMPILE_PNG*/ + +/* ////////////////////////////////////////////////////////////////////////// */ + +unsigned lodepng_read32bitInt(const unsigned char* buffer) +{ + return (buffer[0] << 24) | (buffer[1] << 16) | (buffer[2] << 8) | buffer[3]; +} + +#if defined(LODEPNG_COMPILE_PNG) || defined(LODEPNG_COMPILE_ENCODER) +/*buffer must have at least 4 allocated bytes available*/ +static void lodepng_set32bitInt(unsigned char* buffer, unsigned value) +{ + buffer[0] = (unsigned char)((value >> 24) & 0xff); + buffer[1] = (unsigned char)((value >> 16) & 0xff); + buffer[2] = (unsigned char)((value >> 8) & 0xff); + buffer[3] = (unsigned char)((value ) & 0xff); +} +#endif /*defined(LODEPNG_COMPILE_PNG) || defined(LODEPNG_COMPILE_ENCODER)*/ + +#ifdef LODEPNG_COMPILE_ENCODER +static void lodepng_add32bitInt(ucvector* buffer, unsigned value) +{ + ucvector_resize(buffer, buffer->size + 4); /*todo: give error if resize failed*/ + lodepng_set32bitInt(&buffer->data[buffer->size - 4], value); +} +#endif /*LODEPNG_COMPILE_ENCODER*/ + +/* ////////////////////////////////////////////////////////////////////////// */ +/* / File IO / */ +/* ////////////////////////////////////////////////////////////////////////// */ + +#ifdef LODEPNG_COMPILE_DISK + +unsigned lodepng_load_file(unsigned char** out, size_t* outsize, const char* filename) +{ + FILE* file; + long size; + + /*provide some proper output values if error will happen*/ + *out = 0; + *outsize = 0; + + file = fopen(filename, "rb"); + if(!file) return 78; + + /*get filesize:*/ + fseek(file , 0 , SEEK_END); + size = ftell(file); + rewind(file); + + /*read contents of the file into the vector*/ + *outsize = 0; + *out = (unsigned char*)lodepng_malloc((size_t)size); + if(size && (*out)) (*outsize) = fread(*out, 1, (size_t)size, file); + + fclose(file); + if(!(*out) && size) return 83; /*the above malloc failed*/ + return 0; +} + +/*write given buffer to the file, overwriting the file, it doesn't append to it.*/ +unsigned lodepng_save_file(const unsigned char* buffer, size_t buffersize, const char* filename) +{ + FILE* file; + file = fopen(filename, "wb" ); + if(!file) return 79; + fwrite((char*)buffer , 1 , buffersize, file); + fclose(file); + return 0; +} + +#endif /*LODEPNG_COMPILE_DISK*/ + +/* ////////////////////////////////////////////////////////////////////////// */ +/* ////////////////////////////////////////////////////////////////////////// */ +/* // End of common code and tools. Begin of Zlib related code. // */ +/* ////////////////////////////////////////////////////////////////////////// */ +/* ////////////////////////////////////////////////////////////////////////// */ + +#ifdef LODEPNG_COMPILE_ZLIB +#ifdef LODEPNG_COMPILE_ENCODER +/*TODO: this ignores potential out of memory errors*/ +#define addBitToStream(/*size_t**/ bitpointer, /*ucvector**/ bitstream, /*unsigned char*/ bit)\ +{\ + /*add a new byte at the end*/\ + if(((*bitpointer) & 7) == 0) ucvector_push_back(bitstream, (unsigned char)0);\ + /*earlier bit of huffman code is in a lesser significant bit of an earlier byte*/\ + (bitstream->data[bitstream->size - 1]) |= (bit << ((*bitpointer) & 0x7));\ + (*bitpointer)++;\ +} + +static void addBitsToStream(size_t* bitpointer, ucvector* bitstream, unsigned value, size_t nbits) +{ + size_t i; + for(i = 0; i < nbits; i++) addBitToStream(bitpointer, bitstream, (unsigned char)((value >> i) & 1)); +} + +static void addBitsToStreamReversed(size_t* bitpointer, ucvector* bitstream, unsigned value, size_t nbits) +{ + size_t i; + for(i = 0; i < nbits; i++) addBitToStream(bitpointer, bitstream, (unsigned char)((value >> (nbits - 1 - i)) & 1)); +} +#endif /*LODEPNG_COMPILE_ENCODER*/ + +#ifdef LODEPNG_COMPILE_DECODER + +#define READBIT(bitpointer, bitstream) ((bitstream[bitpointer >> 3] >> (bitpointer & 0x7)) & (unsigned char)1) + +static unsigned char readBitFromStream(size_t* bitpointer, const unsigned char* bitstream) +{ + unsigned char result = (unsigned char)(READBIT(*bitpointer, bitstream)); + (*bitpointer)++; + return result; +} + +static unsigned readBitsFromStream(size_t* bitpointer, const unsigned char* bitstream, size_t nbits) +{ + unsigned result = 0, i; + for(i = 0; i < nbits; i++) + { + result += ((unsigned)READBIT(*bitpointer, bitstream)) << i; + (*bitpointer)++; + } + return result; +} +#endif /*LODEPNG_COMPILE_DECODER*/ + +/* ////////////////////////////////////////////////////////////////////////// */ +/* / Deflate - Huffman / */ +/* ////////////////////////////////////////////////////////////////////////// */ + +#define FIRST_LENGTH_CODE_INDEX 257 +#define LAST_LENGTH_CODE_INDEX 285 +/*256 literals, the end code, some length codes, and 2 unused codes*/ +#define NUM_DEFLATE_CODE_SYMBOLS 288 +/*the distance codes have their own symbols, 30 used, 2 unused*/ +#define NUM_DISTANCE_SYMBOLS 32 +/*the code length codes. 0-15: code lengths, 16: copy previous 3-6 times, 17: 3-10 zeros, 18: 11-138 zeros*/ +#define NUM_CODE_LENGTH_CODES 19 + +/*the base lengths represented by codes 257-285*/ +static const unsigned LENGTHBASE[29] + = {3, 4, 5, 6, 7, 8, 9, 10, 11, 13, 15, 17, 19, 23, 27, 31, 35, 43, 51, 59, + 67, 83, 99, 115, 131, 163, 195, 227, 258}; + +/*the extra bits used by codes 257-285 (added to base length)*/ +static const unsigned LENGTHEXTRA[29] + = {0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, + 4, 4, 4, 4, 5, 5, 5, 5, 0}; + +/*the base backwards distances (the bits of distance codes appear after length codes and use their own huffman tree)*/ +static const unsigned DISTANCEBASE[30] + = {1, 2, 3, 4, 5, 7, 9, 13, 17, 25, 33, 49, 65, 97, 129, 193, 257, 385, 513, + 769, 1025, 1537, 2049, 3073, 4097, 6145, 8193, 12289, 16385, 24577}; + +/*the extra bits of backwards distances (added to base)*/ +static const unsigned DISTANCEEXTRA[30] + = {0, 0, 0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8, + 8, 9, 9, 10, 10, 11, 11, 12, 12, 13, 13}; + +/*the order in which "code length alphabet code lengths" are stored, out of this +the huffman tree of the dynamic huffman tree lengths is generated*/ +static const unsigned CLCL_ORDER[NUM_CODE_LENGTH_CODES] + = {16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15}; + +/* ////////////////////////////////////////////////////////////////////////// */ + +/* +Huffman tree struct, containing multiple representations of the tree +*/ +typedef struct HuffmanTree +{ + unsigned* tree2d; + unsigned* tree1d; + unsigned* lengths; /*the lengths of the codes of the 1d-tree*/ + unsigned maxbitlen; /*maximum number of bits a single code can get*/ + unsigned numcodes; /*number of symbols in the alphabet = number of codes*/ +} HuffmanTree; + +/*function used for debug purposes to draw the tree in ascii art with C++*/ +/* +static void HuffmanTree_draw(HuffmanTree* tree) +{ + std::cout << "tree. length: " << tree->numcodes << " maxbitlen: " << tree->maxbitlen << std::endl; + for(size_t i = 0; i < tree->tree1d.size; i++) + { + if(tree->lengths.data[i]) + std::cout << i << " " << tree->tree1d.data[i] << " " << tree->lengths.data[i] << std::endl; + } + std::cout << std::endl; +}*/ + +static void HuffmanTree_init(HuffmanTree* tree) +{ + tree->tree2d = 0; + tree->tree1d = 0; + tree->lengths = 0; +} + +static void HuffmanTree_cleanup(HuffmanTree* tree) +{ + lodepng_free(tree->tree2d); + lodepng_free(tree->tree1d); + lodepng_free(tree->lengths); +} + +/*the tree representation used by the decoder. return value is error*/ +static unsigned HuffmanTree_make2DTree(HuffmanTree* tree) +{ + unsigned nodefilled = 0; /*up to which node it is filled*/ + unsigned treepos = 0; /*position in the tree (1 of the numcodes columns)*/ + unsigned n, i; + + tree->tree2d = (unsigned*)lodepng_malloc(tree->numcodes * 2 * sizeof(unsigned)); + if(!tree->tree2d) return 83; /*alloc fail*/ + + /* + convert tree1d[] to tree2d[][]. In the 2D array, a value of 32767 means + uninited, a value >= numcodes is an address to another bit, a value < numcodes + is a code. The 2 rows are the 2 possible bit values (0 or 1), there are as + many columns as codes - 1. + A good huffmann tree has N * 2 - 1 nodes, of which N - 1 are internal nodes. + Here, the internal nodes are stored (what their 0 and 1 option point to). + There is only memory for such good tree currently, if there are more nodes + (due to too long length codes), error 55 will happen + */ + for(n = 0; n < tree->numcodes * 2; n++) + { + tree->tree2d[n] = 32767; /*32767 here means the tree2d isn't filled there yet*/ + } + + for(n = 0; n < tree->numcodes; n++) /*the codes*/ + { + for(i = 0; i < tree->lengths[n]; i++) /*the bits for this code*/ + { + unsigned char bit = (unsigned char)((tree->tree1d[n] >> (tree->lengths[n] - i - 1)) & 1); + if(treepos > tree->numcodes - 2) return 55; /*oversubscribed, see comment in lodepng_error_text*/ + if(tree->tree2d[2 * treepos + bit] == 32767) /*not yet filled in*/ + { + if(i + 1 == tree->lengths[n]) /*last bit*/ + { + tree->tree2d[2 * treepos + bit] = n; /*put the current code in it*/ + treepos = 0; + } + else + { + /*put address of the next step in here, first that address has to be found of course + (it's just nodefilled + 1)...*/ + nodefilled++; + /*addresses encoded with numcodes added to it*/ + tree->tree2d[2 * treepos + bit] = nodefilled + tree->numcodes; + treepos = nodefilled; + } + } + else treepos = tree->tree2d[2 * treepos + bit] - tree->numcodes; + } + } + + for(n = 0; n < tree->numcodes * 2; n++) + { + if(tree->tree2d[n] == 32767) tree->tree2d[n] = 0; /*remove possible remaining 32767's*/ + } + + return 0; +} + +/* +Second step for the ...makeFromLengths and ...makeFromFrequencies functions. +numcodes, lengths and maxbitlen must already be filled in correctly. return +value is error. +*/ +static unsigned HuffmanTree_makeFromLengths2(HuffmanTree* tree) +{ + uivector blcount; + uivector nextcode; + unsigned bits, n, error = 0; + + uivector_init(&blcount); + uivector_init(&nextcode); + + tree->tree1d = (unsigned*)lodepng_malloc(tree->numcodes * sizeof(unsigned)); + if(!tree->tree1d) error = 83; /*alloc fail*/ + + if(!uivector_resizev(&blcount, tree->maxbitlen + 1, 0) + || !uivector_resizev(&nextcode, tree->maxbitlen + 1, 0)) + error = 83; /*alloc fail*/ + + if(!error) + { + /*step 1: count number of instances of each code length*/ + for(bits = 0; bits < tree->numcodes; bits++) blcount.data[tree->lengths[bits]]++; + /*step 2: generate the nextcode values*/ + for(bits = 1; bits <= tree->maxbitlen; bits++) + { + nextcode.data[bits] = (nextcode.data[bits - 1] + blcount.data[bits - 1]) << 1; + } + /*step 3: generate all the codes*/ + for(n = 0; n < tree->numcodes; n++) + { + if(tree->lengths[n] != 0) tree->tree1d[n] = nextcode.data[tree->lengths[n]]++; + } + } + + uivector_cleanup(&blcount); + uivector_cleanup(&nextcode); + + if(!error) return HuffmanTree_make2DTree(tree); + else return error; +} + +/* +given the code lengths (as stored in the PNG file), generate the tree as defined +by Deflate. maxbitlen is the maximum bits that a code in the tree can have. +return value is error. +*/ +static unsigned HuffmanTree_makeFromLengths(HuffmanTree* tree, const unsigned* bitlen, + size_t numcodes, unsigned maxbitlen) +{ + unsigned i; + tree->lengths = (unsigned*)lodepng_malloc(numcodes * sizeof(unsigned)); + if(!tree->lengths) return 83; /*alloc fail*/ + for(i = 0; i < numcodes; i++) tree->lengths[i] = bitlen[i]; + tree->numcodes = (unsigned)numcodes; /*number of symbols*/ + tree->maxbitlen = maxbitlen; + return HuffmanTree_makeFromLengths2(tree); +} + +#ifdef LODEPNG_COMPILE_ENCODER + +/* +A coin, this is the terminology used for the package-merge algorithm and the +coin collector's problem. This is used to generate the huffman tree. +A coin can be multiple coins (when they're merged) +*/ +typedef struct Coin +{ + uivector symbols; + float weight; /*the sum of all weights in this coin*/ +} Coin; + +static void coin_init(Coin* c) +{ + uivector_init(&c->symbols); +} + +/*argument c is void* so that this dtor can be given as function pointer to the vector resize function*/ +static void coin_cleanup(void* c) +{ + uivector_cleanup(&((Coin*)c)->symbols); +} + +static void coin_copy(Coin* c1, const Coin* c2) +{ + c1->weight = c2->weight; + uivector_copy(&c1->symbols, &c2->symbols); +} + +static void add_coins(Coin* c1, const Coin* c2) +{ + size_t i; + for(i = 0; i < c2->symbols.size; i++) uivector_push_back(&c1->symbols, c2->symbols.data[i]); + c1->weight += c2->weight; +} + +static void init_coins(Coin* coins, size_t num) +{ + size_t i; + for(i = 0; i < num; i++) coin_init(&coins[i]); +} + +static void cleanup_coins(Coin* coins, size_t num) +{ + size_t i; + for(i = 0; i < num; i++) coin_cleanup(&coins[i]); +} + +static int coin_compare(const void* a, const void* b) { + float wa = ((const Coin*)a)->weight; + float wb = ((const Coin*)b)->weight; + return wa > wb ? 1 : wa < wb ? -1 : 0; +} + +static unsigned append_symbol_coins(Coin* coins, const unsigned* frequencies, unsigned numcodes, size_t sum) +{ + unsigned i; + unsigned j = 0; /*index of present symbols*/ + for(i = 0; i < numcodes; i++) + { + if(frequencies[i] != 0) /*only include symbols that are present*/ + { + coins[j].weight = frequencies[i] / (float)sum; + uivector_push_back(&coins[j].symbols, i); + j++; + } + } + return 0; +} + +unsigned lodepng_huffman_code_lengths(unsigned* lengths, const unsigned* frequencies, + size_t numcodes, unsigned maxbitlen) +{ + unsigned i, j; + size_t sum = 0, numpresent = 0; + unsigned error = 0; + Coin* coins; /*the coins of the currently calculated row*/ + Coin* prev_row; /*the previous row of coins*/ + unsigned numcoins; + unsigned coinmem; + + if(numcodes == 0) return 80; /*error: a tree of 0 symbols is not supposed to be made*/ + + for(i = 0; i < numcodes; i++) + { + if(frequencies[i] > 0) + { + numpresent++; + sum += frequencies[i]; + } + } + + for(i = 0; i < numcodes; i++) lengths[i] = 0; + + /*ensure at least two present symbols. There should be at least one symbol + according to RFC 1951 section 3.2.7. To decoders incorrectly require two. To + make these work as well ensure there are at least two symbols. The + Package-Merge code below also doesn't work correctly if there's only one + symbol, it'd give it the theoritical 0 bits but in practice zlib wants 1 bit*/ + if(numpresent == 0) + { + lengths[0] = lengths[1] = 1; /*note that for RFC 1951 section 3.2.7, only lengths[0] = 1 is needed*/ + } + else if(numpresent == 1) + { + for(i = 0; i < numcodes; i++) + { + if(frequencies[i]) + { + lengths[i] = 1; + lengths[i == 0 ? 1 : 0] = 1; + break; + } + } + } + else + { + /*Package-Merge algorithm represented by coin collector's problem + For every symbol, maxbitlen coins will be created*/ + + coinmem = numpresent * 2; /*max amount of coins needed with the current algo*/ + coins = (Coin*)lodepng_malloc(sizeof(Coin) * coinmem); + prev_row = (Coin*)lodepng_malloc(sizeof(Coin) * coinmem); + if(!coins || !prev_row) + { + lodepng_free(coins); + lodepng_free(prev_row); + return 83; /*alloc fail*/ + } + init_coins(coins, coinmem); + init_coins(prev_row, coinmem); + + /*first row, lowest denominator*/ + error = append_symbol_coins(coins, frequencies, numcodes, sum); + numcoins = numpresent; + qsort(coins, numcoins, sizeof(Coin), coin_compare); + if(!error) + { + unsigned numprev = 0; + for(j = 1; j <= maxbitlen && !error; j++) /*each of the remaining rows*/ + { + unsigned tempnum; + Coin* tempcoins; + /*swap prev_row and coins, and their amounts*/ + tempcoins = prev_row; prev_row = coins; coins = tempcoins; + tempnum = numprev; numprev = numcoins; numcoins = tempnum; + + cleanup_coins(coins, numcoins); + init_coins(coins, numcoins); + + numcoins = 0; + + /*fill in the merged coins of the previous row*/ + for(i = 0; i + 1 < numprev; i += 2) + { + /*merge prev_row[i] and prev_row[i + 1] into new coin*/ + Coin* coin = &coins[numcoins++]; + coin_copy(coin, &prev_row[i]); + add_coins(coin, &prev_row[i + 1]); + } + /*fill in all the original symbols again*/ + if(j < maxbitlen) + { + error = append_symbol_coins(coins + numcoins, frequencies, numcodes, sum); + numcoins += numpresent; + } + qsort(coins, numcoins, sizeof(Coin), coin_compare); + } + } + + if(!error) + { + /*calculate the lenghts of each symbol, as the amount of times a coin of each symbol is used*/ + for(i = 0; i < numpresent - 1; i++) + { + Coin* coin = &coins[i]; + for(j = 0; j < coin->symbols.size; j++) lengths[coin->symbols.data[j]]++; + } + } + + cleanup_coins(coins, coinmem); + lodepng_free(coins); + cleanup_coins(prev_row, coinmem); + lodepng_free(prev_row); + } + + return error; +} + +/*Create the Huffman tree given the symbol frequencies*/ +static unsigned HuffmanTree_makeFromFrequencies(HuffmanTree* tree, const unsigned* frequencies, + size_t mincodes, size_t numcodes, unsigned maxbitlen) +{ + unsigned error = 0; + while(!frequencies[numcodes - 1] && numcodes > mincodes) numcodes--; /*trim zeroes*/ + tree->maxbitlen = maxbitlen; + tree->numcodes = (unsigned)numcodes; /*number of symbols*/ + tree->lengths = (unsigned*)lodepng_realloc(tree->lengths, numcodes * sizeof(unsigned)); + if(!tree->lengths) return 83; /*alloc fail*/ + /*initialize all lengths to 0*/ + memset(tree->lengths, 0, numcodes * sizeof(unsigned)); + + error = lodepng_huffman_code_lengths(tree->lengths, frequencies, numcodes, maxbitlen); + if(!error) error = HuffmanTree_makeFromLengths2(tree); + return error; +} + +static unsigned HuffmanTree_getCode(const HuffmanTree* tree, unsigned index) +{ + return tree->tree1d[index]; +} + +static unsigned HuffmanTree_getLength(const HuffmanTree* tree, unsigned index) +{ + return tree->lengths[index]; +} +#endif /*LODEPNG_COMPILE_ENCODER*/ + +/*get the literal and length code tree of a deflated block with fixed tree, as per the deflate specification*/ +static unsigned generateFixedLitLenTree(HuffmanTree* tree) +{ + unsigned i, error = 0; + unsigned* bitlen = (unsigned*)lodepng_malloc(NUM_DEFLATE_CODE_SYMBOLS * sizeof(unsigned)); + if(!bitlen) return 83; /*alloc fail*/ + + /*288 possible codes: 0-255=literals, 256=endcode, 257-285=lengthcodes, 286-287=unused*/ + for(i = 0; i <= 143; i++) bitlen[i] = 8; + for(i = 144; i <= 255; i++) bitlen[i] = 9; + for(i = 256; i <= 279; i++) bitlen[i] = 7; + for(i = 280; i <= 287; i++) bitlen[i] = 8; + + error = HuffmanTree_makeFromLengths(tree, bitlen, NUM_DEFLATE_CODE_SYMBOLS, 15); + + lodepng_free(bitlen); + return error; +} + +/*get the distance code tree of a deflated block with fixed tree, as specified in the deflate specification*/ +static unsigned generateFixedDistanceTree(HuffmanTree* tree) +{ + unsigned i, error = 0; + unsigned* bitlen = (unsigned*)lodepng_malloc(NUM_DISTANCE_SYMBOLS * sizeof(unsigned)); + if(!bitlen) return 83; /*alloc fail*/ + + /*there are 32 distance codes, but 30-31 are unused*/ + for(i = 0; i < NUM_DISTANCE_SYMBOLS; i++) bitlen[i] = 5; + error = HuffmanTree_makeFromLengths(tree, bitlen, NUM_DISTANCE_SYMBOLS, 15); + + lodepng_free(bitlen); + return error; +} + +#ifdef LODEPNG_COMPILE_DECODER + +/* +returns the code, or (unsigned)(-1) if error happened +inbitlength is the length of the complete buffer, in bits (so its byte length times 8) +*/ +static unsigned huffmanDecodeSymbol(const unsigned char* in, size_t* bp, + const HuffmanTree* codetree, size_t inbitlength) +{ + unsigned treepos = 0, ct; + for(;;) + { + if(*bp >= inbitlength) return (unsigned)(-1); /*error: end of input memory reached without endcode*/ + /* + decode the symbol from the tree. The "readBitFromStream" code is inlined in + the expression below because this is the biggest bottleneck while decoding + */ + ct = codetree->tree2d[(treepos << 1) + READBIT(*bp, in)]; + (*bp)++; + if(ct < codetree->numcodes) return ct; /*the symbol is decoded, return it*/ + else treepos = ct - codetree->numcodes; /*symbol not yet decoded, instead move tree position*/ + + if(treepos >= codetree->numcodes) return (unsigned)(-1); /*error: it appeared outside the codetree*/ + } +} +#endif /*LODEPNG_COMPILE_DECODER*/ + +#ifdef LODEPNG_COMPILE_DECODER + +/* ////////////////////////////////////////////////////////////////////////// */ +/* / Inflator (Decompressor) / */ +/* ////////////////////////////////////////////////////////////////////////// */ + +/*get the tree of a deflated block with fixed tree, as specified in the deflate specification*/ +static void getTreeInflateFixed(HuffmanTree* tree_ll, HuffmanTree* tree_d) +{ + /*TODO: check for out of memory errors*/ + generateFixedLitLenTree(tree_ll); + generateFixedDistanceTree(tree_d); +} + +/*get the tree of a deflated block with dynamic tree, the tree itself is also Huffman compressed with a known tree*/ +static unsigned getTreeInflateDynamic(HuffmanTree* tree_ll, HuffmanTree* tree_d, + const unsigned char* in, size_t* bp, size_t inlength) +{ + /*make sure that length values that aren't filled in will be 0, or a wrong tree will be generated*/ + unsigned error = 0; + unsigned n, HLIT, HDIST, HCLEN, i; + size_t inbitlength = inlength * 8; + + /*see comments in deflateDynamic for explanation of the context and these variables, it is analogous*/ + unsigned* bitlen_ll = 0; /*lit,len code lengths*/ + unsigned* bitlen_d = 0; /*dist code lengths*/ + /*code length code lengths ("clcl"), the bit lengths of the huffman tree used to compress bitlen_ll and bitlen_d*/ + unsigned* bitlen_cl = 0; + HuffmanTree tree_cl; /*the code tree for code length codes (the huffman tree for compressed huffman trees)*/ + + if((*bp) >> 3 >= inlength - 2) return 49; /*error: the bit pointer is or will go past the memory*/ + + /*number of literal/length codes + 257. Unlike the spec, the value 257 is added to it here already*/ + HLIT = readBitsFromStream(bp, in, 5) + 257; + /*number of distance codes. Unlike the spec, the value 1 is added to it here already*/ + HDIST = readBitsFromStream(bp, in, 5) + 1; + /*number of code length codes. Unlike the spec, the value 4 is added to it here already*/ + HCLEN = readBitsFromStream(bp, in, 4) + 4; + + HuffmanTree_init(&tree_cl); + + while(!error) + { + /*read the code length codes out of 3 * (amount of code length codes) bits*/ + + bitlen_cl = (unsigned*)lodepng_malloc(NUM_CODE_LENGTH_CODES * sizeof(unsigned)); + if(!bitlen_cl) ERROR_BREAK(83 /*alloc fail*/); + + for(i = 0; i < NUM_CODE_LENGTH_CODES; i++) + { + if(i < HCLEN) bitlen_cl[CLCL_ORDER[i]] = readBitsFromStream(bp, in, 3); + else bitlen_cl[CLCL_ORDER[i]] = 0; /*if not, it must stay 0*/ + } + + error = HuffmanTree_makeFromLengths(&tree_cl, bitlen_cl, NUM_CODE_LENGTH_CODES, 7); + if(error) break; + + /*now we can use this tree to read the lengths for the tree that this function will return*/ + bitlen_ll = (unsigned*)lodepng_malloc(NUM_DEFLATE_CODE_SYMBOLS * sizeof(unsigned)); + bitlen_d = (unsigned*)lodepng_malloc(NUM_DISTANCE_SYMBOLS * sizeof(unsigned)); + if(!bitlen_ll || !bitlen_d) ERROR_BREAK(83 /*alloc fail*/); + for(i = 0; i < NUM_DEFLATE_CODE_SYMBOLS; i++) bitlen_ll[i] = 0; + for(i = 0; i < NUM_DISTANCE_SYMBOLS; i++) bitlen_d[i] = 0; + + /*i is the current symbol we're reading in the part that contains the code lengths of lit/len and dist codes*/ + i = 0; + while(i < HLIT + HDIST) + { + unsigned code = huffmanDecodeSymbol(in, bp, &tree_cl, inbitlength); + if(code <= 15) /*a length code*/ + { + if(i < HLIT) bitlen_ll[i] = code; + else bitlen_d[i - HLIT] = code; + i++; + } + else if(code == 16) /*repeat previous*/ + { + unsigned replength = 3; /*read in the 2 bits that indicate repeat length (3-6)*/ + unsigned value; /*set value to the previous code*/ + + if(*bp >= inbitlength) ERROR_BREAK(50); /*error, bit pointer jumps past memory*/ + if (i == 0) ERROR_BREAK(54); /*can't repeat previous if i is 0*/ + + replength += readBitsFromStream(bp, in, 2); + + if(i < HLIT + 1) value = bitlen_ll[i - 1]; + else value = bitlen_d[i - HLIT - 1]; + /*repeat this value in the next lengths*/ + for(n = 0; n < replength; n++) + { + if(i >= HLIT + HDIST) ERROR_BREAK(13); /*error: i is larger than the amount of codes*/ + if(i < HLIT) bitlen_ll[i] = value; + else bitlen_d[i - HLIT] = value; + i++; + } + } + else if(code == 17) /*repeat "0" 3-10 times*/ + { + unsigned replength = 3; /*read in the bits that indicate repeat length*/ + if(*bp >= inbitlength) ERROR_BREAK(50); /*error, bit pointer jumps past memory*/ + + replength += readBitsFromStream(bp, in, 3); + + /*repeat this value in the next lengths*/ + for(n = 0; n < replength; n++) + { + if(i >= HLIT + HDIST) ERROR_BREAK(14); /*error: i is larger than the amount of codes*/ + + if(i < HLIT) bitlen_ll[i] = 0; + else bitlen_d[i - HLIT] = 0; + i++; + } + } + else if(code == 18) /*repeat "0" 11-138 times*/ + { + unsigned replength = 11; /*read in the bits that indicate repeat length*/ + if(*bp >= inbitlength) ERROR_BREAK(50); /*error, bit pointer jumps past memory*/ + + replength += readBitsFromStream(bp, in, 7); + + /*repeat this value in the next lengths*/ + for(n = 0; n < replength; n++) + { + if(i >= HLIT + HDIST) ERROR_BREAK(15); /*error: i is larger than the amount of codes*/ + + if(i < HLIT) bitlen_ll[i] = 0; + else bitlen_d[i - HLIT] = 0; + i++; + } + } + else /*if(code == (unsigned)(-1))*/ /*huffmanDecodeSymbol returns (unsigned)(-1) in case of error*/ + { + if(code == (unsigned)(-1)) + { + /*return error code 10 or 11 depending on the situation that happened in huffmanDecodeSymbol + (10=no endcode, 11=wrong jump outside of tree)*/ + error = (*bp) > inbitlength ? 10 : 11; + } + else error = 16; /*unexisting code, this can never happen*/ + break; + } + } + if(error) break; + + if(bitlen_ll[256] == 0) ERROR_BREAK(64); /*the length of the end code 256 must be larger than 0*/ + + /*now we've finally got HLIT and HDIST, so generate the code trees, and the function is done*/ + error = HuffmanTree_makeFromLengths(tree_ll, bitlen_ll, NUM_DEFLATE_CODE_SYMBOLS, 15); + if(error) break; + error = HuffmanTree_makeFromLengths(tree_d, bitlen_d, NUM_DISTANCE_SYMBOLS, 15); + + break; /*end of error-while*/ + } + + lodepng_free(bitlen_cl); + lodepng_free(bitlen_ll); + lodepng_free(bitlen_d); + HuffmanTree_cleanup(&tree_cl); + + return error; +} + +/*inflate a block with dynamic of fixed Huffman tree*/ +static unsigned inflateHuffmanBlock(ucvector* out, const unsigned char* in, size_t* bp, + size_t* pos, size_t inlength, unsigned btype) +{ + unsigned error = 0; + HuffmanTree tree_ll; /*the huffman tree for literal and length codes*/ + HuffmanTree tree_d; /*the huffman tree for distance codes*/ + size_t inbitlength = inlength * 8; + + HuffmanTree_init(&tree_ll); + HuffmanTree_init(&tree_d); + + if(btype == 1) getTreeInflateFixed(&tree_ll, &tree_d); + else if(btype == 2) error = getTreeInflateDynamic(&tree_ll, &tree_d, in, bp, inlength); + + while(!error) /*decode all symbols until end reached, breaks at end code*/ + { + /*code_ll is literal, length or end code*/ + unsigned code_ll = huffmanDecodeSymbol(in, bp, &tree_ll, inbitlength); + if(code_ll <= 255) /*literal symbol*/ + { + if((*pos) >= out->size) + { + /*reserve more room at once*/ + if(!ucvector_resize(out, ((*pos) + 1) * 2)) ERROR_BREAK(83 /*alloc fail*/); + } + out->data[(*pos)] = (unsigned char)(code_ll); + (*pos)++; + } + else if(code_ll >= FIRST_LENGTH_CODE_INDEX && code_ll <= LAST_LENGTH_CODE_INDEX) /*length code*/ + { + unsigned code_d, distance; + unsigned numextrabits_l, numextrabits_d; /*extra bits for length and distance*/ + size_t start, forward, backward, length; + + /*part 1: get length base*/ + length = LENGTHBASE[code_ll - FIRST_LENGTH_CODE_INDEX]; + + /*part 2: get extra bits and add the value of that to length*/ + numextrabits_l = LENGTHEXTRA[code_ll - FIRST_LENGTH_CODE_INDEX]; + if(*bp >= inbitlength) ERROR_BREAK(51); /*error, bit pointer will jump past memory*/ + length += readBitsFromStream(bp, in, numextrabits_l); + + /*part 3: get distance code*/ + code_d = huffmanDecodeSymbol(in, bp, &tree_d, inbitlength); + if(code_d > 29) + { + if(code_ll == (unsigned)(-1)) /*huffmanDecodeSymbol returns (unsigned)(-1) in case of error*/ + { + /*return error code 10 or 11 depending on the situation that happened in huffmanDecodeSymbol + (10=no endcode, 11=wrong jump outside of tree)*/ + error = (*bp) > inlength * 8 ? 10 : 11; + } + else error = 18; /*error: invalid distance code (30-31 are never used)*/ + break; + } + distance = DISTANCEBASE[code_d]; + + /*part 4: get extra bits from distance*/ + numextrabits_d = DISTANCEEXTRA[code_d]; + if(*bp >= inbitlength) ERROR_BREAK(51); /*error, bit pointer will jump past memory*/ + + distance += readBitsFromStream(bp, in, numextrabits_d); + + /*part 5: fill in all the out[n] values based on the length and dist*/ + start = (*pos); + if(distance > start) ERROR_BREAK(52); /*too long backward distance*/ + backward = start - distance; + if((*pos) + length >= out->size) + { + /*reserve more room at once*/ + if(!ucvector_resize(out, ((*pos) + length) * 2)) ERROR_BREAK(83 /*alloc fail*/); + } + + for(forward = 0; forward < length; forward++) + { + out->data[(*pos)] = out->data[backward]; + (*pos)++; + backward++; + if(backward >= start) backward = start - distance; + } + } + else if(code_ll == 256) + { + break; /*end code, break the loop*/ + } + else /*if(code == (unsigned)(-1))*/ /*huffmanDecodeSymbol returns (unsigned)(-1) in case of error*/ + { + /*return error code 10 or 11 depending on the situation that happened in huffmanDecodeSymbol + (10=no endcode, 11=wrong jump outside of tree)*/ + error = (*bp) > inlength * 8 ? 10 : 11; + break; + } + } + + HuffmanTree_cleanup(&tree_ll); + HuffmanTree_cleanup(&tree_d); + + return error; +} + +static unsigned inflateNoCompression(ucvector* out, const unsigned char* in, size_t* bp, size_t* pos, size_t inlength) +{ + /*go to first boundary of byte*/ + size_t p; + unsigned LEN, NLEN, n, error = 0; + while(((*bp) & 0x7) != 0) (*bp)++; + p = (*bp) / 8; /*byte position*/ + + /*read LEN (2 bytes) and NLEN (2 bytes)*/ + if(p >= inlength - 4) return 52; /*error, bit pointer will jump past memory*/ + LEN = in[p] + 256 * in[p + 1]; p += 2; + NLEN = in[p] + 256 * in[p + 1]; p += 2; + + /*check if 16-bit NLEN is really the one's complement of LEN*/ + if(LEN + NLEN != 65535) return 21; /*error: NLEN is not one's complement of LEN*/ + + if((*pos) + LEN >= out->size) + { + if(!ucvector_resize(out, (*pos) + LEN)) return 83; /*alloc fail*/ + } + + /*read the literal data: LEN bytes are now stored in the out buffer*/ + if(p + LEN > inlength) return 23; /*error: reading outside of in buffer*/ + for(n = 0; n < LEN; n++) out->data[(*pos)++] = in[p++]; + + (*bp) = p * 8; + + return error; +} + +static unsigned lodepng_inflatev(ucvector* out, + const unsigned char* in, size_t insize, + const LodePNGDecompressSettings* settings) +{ + /*bit pointer in the "in" data, current byte is bp >> 3, current bit is bp & 0x7 (from lsb to msb of the byte)*/ + size_t bp = 0; + unsigned BFINAL = 0; + size_t pos = 0; /*byte position in the out buffer*/ + + unsigned error = 0; + + (void)settings; + + while(!BFINAL) + { + unsigned BTYPE; + if(bp + 2 >= insize * 8) return 52; /*error, bit pointer will jump past memory*/ + BFINAL = readBitFromStream(&bp, in); + BTYPE = 1 * readBitFromStream(&bp, in); + BTYPE += 2 * readBitFromStream(&bp, in); + + if(BTYPE == 3) return 20; /*error: invalid BTYPE*/ + else if(BTYPE == 0) error = inflateNoCompression(out, in, &bp, &pos, insize); /*no compression*/ + else error = inflateHuffmanBlock(out, in, &bp, &pos, insize, BTYPE); /*compression, BTYPE 01 or 10*/ + + if(error) return error; + } + + /*Only now we know the true size of out, resize it to that*/ + if(!ucvector_resize(out, pos)) error = 83; /*alloc fail*/ + + return error; +} + +unsigned lodepng_inflate(unsigned char** out, size_t* outsize, + const unsigned char* in, size_t insize, + const LodePNGDecompressSettings* settings) +{ + unsigned error; + ucvector v; + ucvector_init_buffer(&v, *out, *outsize); + error = lodepng_inflatev(&v, in, insize, settings); + *out = v.data; + *outsize = v.size; + return error; +} + +static unsigned inflate(unsigned char** out, size_t* outsize, + const unsigned char* in, size_t insize, + const LodePNGDecompressSettings* settings) +{ + if(settings->custom_inflate) + { + return settings->custom_inflate(out, outsize, in, insize, settings); + } + else + { + return lodepng_inflate(out, outsize, in, insize, settings); + } +} + +#endif /*LODEPNG_COMPILE_DECODER*/ + +#ifdef LODEPNG_COMPILE_ENCODER + +/* ////////////////////////////////////////////////////////////////////////// */ +/* / Deflator (Compressor) / */ +/* ////////////////////////////////////////////////////////////////////////// */ + +static const size_t MAX_SUPPORTED_DEFLATE_LENGTH = 258; + +/*bitlen is the size in bits of the code*/ +static void addHuffmanSymbol(size_t* bp, ucvector* compressed, unsigned code, unsigned bitlen) +{ + addBitsToStreamReversed(bp, compressed, code, bitlen); +} + +/*search the index in the array, that has the largest value smaller than or equal to the given value, +given array must be sorted (if no value is smaller, it returns the size of the given array)*/ +static size_t searchCodeIndex(const unsigned* array, size_t array_size, size_t value) +{ + /*linear search implementation*/ + /*for(size_t i = 1; i < array_size; i++) if(array[i] > value) return i - 1; + return array_size - 1;*/ + + /*binary search implementation (not that much faster) (precondition: array_size > 0)*/ + size_t left = 1; + size_t right = array_size - 1; + while(left <= right) + { + size_t mid = (left + right) / 2; + if(array[mid] <= value) left = mid + 1; /*the value to find is more to the right*/ + else if(array[mid - 1] > value) right = mid - 1; /*the value to find is more to the left*/ + else return mid - 1; + } + return array_size - 1; +} + +static void addLengthDistance(uivector* values, size_t length, size_t distance) +{ + /*values in encoded vector are those used by deflate: + 0-255: literal bytes + 256: end + 257-285: length/distance pair (length code, followed by extra length bits, distance code, extra distance bits) + 286-287: invalid*/ + + unsigned length_code = (unsigned)searchCodeIndex(LENGTHBASE, 29, length); + unsigned extra_length = (unsigned)(length - LENGTHBASE[length_code]); + unsigned dist_code = (unsigned)searchCodeIndex(DISTANCEBASE, 30, distance); + unsigned extra_distance = (unsigned)(distance - DISTANCEBASE[dist_code]); + + uivector_push_back(values, length_code + FIRST_LENGTH_CODE_INDEX); + uivector_push_back(values, extra_length); + uivector_push_back(values, dist_code); + uivector_push_back(values, extra_distance); +} + +static const unsigned HASH_BIT_MASK = 65535; +static const unsigned HASH_NUM_VALUES = 65536; +static const unsigned HASH_NUM_CHARACTERS = 3; +static const unsigned HASH_SHIFT = 2; +/* +The HASH_NUM_CHARACTERS value is used to make encoding faster by using longer +sequences to generate a hash value from the stream bytes. Setting it to 3 +gives exactly the same compression as the brute force method, since deflate's +run length encoding starts with lengths of 3. Setting it to higher values, +like 6, can make the encoding faster (not always though!), but will cause the +encoding to miss any length between 3 and this value, so that the compression +may be worse (but this can vary too depending on the image, sometimes it is +even a bit better instead). +The HASH_NUM_VALUES is the amount of unique possible hash values that +combinations of bytes can give, the higher it is the more memory is needed, but +if it's too low the advantage of hashing is gone. +*/ + +typedef struct Hash +{ + int* head; /*hash value to head circular pos*/ + int* val; /*circular pos to hash value*/ + /*circular pos to prev circular pos*/ + unsigned short* chain; + unsigned short* zeros; +} Hash; + +static unsigned hash_init(Hash* hash, unsigned windowsize) +{ + unsigned i; + hash->head = (int*)lodepng_malloc(sizeof(int) * HASH_NUM_VALUES); + hash->val = (int*)lodepng_malloc(sizeof(int) * windowsize); + hash->chain = (unsigned short*)lodepng_malloc(sizeof(unsigned short) * windowsize); + hash->zeros = (unsigned short*)lodepng_malloc(sizeof(unsigned short) * windowsize); + + if(!hash->head || !hash->val || !hash->chain || !hash->zeros) return 83; /*alloc fail*/ + + /*initialize hash table*/ + for(i = 0; i < HASH_NUM_VALUES; i++) hash->head[i] = -1; + for(i = 0; i < windowsize; i++) hash->val[i] = -1; + for(i = 0; i < windowsize; i++) hash->chain[i] = i; /*same value as index indicates uninitialized*/ + + return 0; +} + +static void hash_cleanup(Hash* hash) +{ + lodepng_free(hash->head); + lodepng_free(hash->val); + lodepng_free(hash->chain); + lodepng_free(hash->zeros); +} + +static unsigned getHash(const unsigned char* data, size_t size, size_t pos) +{ + unsigned result = 0; + if (HASH_NUM_CHARACTERS == 3 && pos + 2 < size) { + result ^= (data[pos + 0] << (0 * HASH_SHIFT)); + result ^= (data[pos + 1] << (1 * HASH_SHIFT)); + result ^= (data[pos + 2] << (2 * HASH_SHIFT)); + } else { + size_t amount, i; + if(pos >= size) return 0; + amount = HASH_NUM_CHARACTERS; + if(pos + amount >= size) amount = size - pos; + for(i = 0; i < amount; i++) result ^= (data[pos + i] << (i * HASH_SHIFT)); + } + return result & HASH_BIT_MASK; +} + +static unsigned countZeros(const unsigned char* data, size_t size, size_t pos) +{ + const unsigned char* start = data + pos; + const unsigned char* end = start + MAX_SUPPORTED_DEFLATE_LENGTH; + if(end > data + size) end = data + size; + data = start; + while (data != end && *data == 0) data++; + /*subtracting two addresses returned as 32-bit number (max value is MAX_SUPPORTED_DEFLATE_LENGTH)*/ + return (unsigned)(data - start); +} + +/*wpos = pos & (windowsize - 1)*/ +static void updateHashChain(Hash* hash, size_t wpos, int hashval) +{ + hash->val[wpos] = hashval; + if(hash->head[hashval] != -1) hash->chain[wpos] = hash->head[hashval]; + hash->head[hashval] = wpos; +} + +/* +LZ77-encode the data. Return value is error code. The input are raw bytes, the output +is in the form of unsigned integers with codes representing for example literal bytes, or +length/distance pairs. +It uses a hash table technique to let it encode faster. When doing LZ77 encoding, a +sliding window (of windowsize) is used, and all past bytes in that window can be used as +the "dictionary". A brute force search through all possible distances would be slow, and +this hash technique is one out of several ways to speed this up. +*/ +static unsigned encodeLZ77(uivector* out, Hash* hash, + const unsigned char* in, size_t inpos, size_t insize, unsigned windowsize, + unsigned minmatch, unsigned nicematch, unsigned lazymatching) +{ + unsigned pos, i, error = 0; + /*for large window lengths, assume the user wants no compression loss. Otherwise, max hash chain length speedup.*/ + unsigned maxchainlength = windowsize >= 8192 ? windowsize : windowsize / 8; + unsigned maxlazymatch = windowsize >= 8192 ? MAX_SUPPORTED_DEFLATE_LENGTH : 64; + + unsigned usezeros = 1; /*not sure if setting it to false for windowsize < 8192 is better or worse*/ + unsigned numzeros = 0; + + unsigned offset; /*the offset represents the distance in LZ77 terminology*/ + unsigned length; + unsigned lazy = 0; + unsigned lazylength = 0, lazyoffset = 0; + unsigned hashval; + unsigned current_offset, current_length; + const unsigned char *lastptr, *foreptr, *backptr; + unsigned hashpos, prevpos; + + if(windowsize <= 0 || windowsize > 32768) return 60; /*error: windowsize smaller/larger than allowed*/ + if((windowsize & (windowsize - 1)) != 0) return 90; /*error: must be power of two*/ + + if(nicematch > MAX_SUPPORTED_DEFLATE_LENGTH) nicematch = MAX_SUPPORTED_DEFLATE_LENGTH; + + for(pos = inpos; pos < insize; pos++) + { + size_t wpos = pos & (windowsize - 1); /*position for in 'circular' hash buffers*/ + unsigned chainlength = 0; + + hashval = getHash(in, insize, pos); + updateHashChain(hash, wpos, hashval); + + if(usezeros && hashval == 0) + { + if (numzeros == 0) numzeros = countZeros(in, insize, pos); + else if (pos + numzeros >= insize || in[pos + numzeros - 1] != 0) numzeros--; + hash->zeros[wpos] = numzeros; + } + else + { + numzeros = 0; + } + + /*the length and offset found for the current position*/ + length = 0; + offset = 0; + + prevpos = hash->head[hashval]; + hashpos = hash->chain[prevpos]; + + lastptr = &in[insize < pos + MAX_SUPPORTED_DEFLATE_LENGTH ? insize : pos + MAX_SUPPORTED_DEFLATE_LENGTH]; + + /*search for the longest string*/ + for(;;) + { + /*stop when went completely around the circular buffer*/ + if(prevpos < wpos && hashpos > prevpos && hashpos <= wpos) break; + if(prevpos > wpos && (hashpos <= wpos || hashpos > prevpos)) break; + if(chainlength++ >= maxchainlength) break; + + current_offset = hashpos <= wpos ? wpos - hashpos : wpos - hashpos + windowsize; + if(current_offset > 0) + { + /*test the next characters*/ + foreptr = &in[pos]; + backptr = &in[pos - current_offset]; + + /*common case in PNGs is lots of zeros. Quickly skip over them as a speedup*/ + if(usezeros && hashval == 0 && hash->val[hashpos] == 0 /*hashval[hashpos] may be out of date*/) + { + unsigned skip = hash->zeros[hashpos]; + if(skip > numzeros) skip = numzeros; + backptr += skip; + foreptr += skip; + } + + while(foreptr != lastptr && *backptr == *foreptr) /*maximum supported length by deflate is max length*/ + { + ++backptr; + ++foreptr; + } + current_length = (unsigned)(foreptr - &in[pos]); + + if(current_length > length) + { + length = current_length; /*the longest length*/ + offset = current_offset; /*the offset that is related to this longest length*/ + /*jump out once a length of max length is found (speed gain). This also jumps + out if length is MAX_SUPPORTED_DEFLATE_LENGTH*/ + if(current_length >= nicematch) break; + } + } + + if(hashpos == hash->chain[hashpos]) break; + + prevpos = hashpos; + hashpos = hash->chain[hashpos]; + } + + if(lazymatching) + { + if(!lazy && length >= 3 && length <= maxlazymatch && length < MAX_SUPPORTED_DEFLATE_LENGTH) + { + lazy = 1; + lazylength = length; + lazyoffset = offset; + continue; /*try the next byte*/ + } + if(lazy) + { + lazy = 0; + if(pos == 0) ERROR_BREAK(81); + if(length > lazylength + 1) + { + /*push the previous character as literal*/ + if(!uivector_push_back(out, in[pos - 1])) ERROR_BREAK(83 /*alloc fail*/); + } + else + { + length = lazylength; + offset = lazyoffset; + hash->head[hashval] = -1; /*the same hashchain update will be done, this ensures no wrong alteration*/ + pos--; + } + } + } + if(length >= 3 && offset > windowsize) ERROR_BREAK(86 /*too big (or overflown negative) offset*/); + + /*encode it as length/distance pair or literal value*/ + if(length < 3) /*only lengths of 3 or higher are supported as length/distance pair*/ + { + if(!uivector_push_back(out, in[pos])) ERROR_BREAK(83 /*alloc fail*/); + } + else if(length < minmatch || (length == 3 && offset > 4096)) + { + /*compensate for the fact that longer offsets have more extra bits, a + length of only 3 may be not worth it then*/ + if(!uivector_push_back(out, in[pos])) ERROR_BREAK(83 /*alloc fail*/); + } + else + { + addLengthDistance(out, length, offset); + for(i = 1; i < length; i++) + { + pos++; + wpos = pos & (windowsize - 1); + hashval = getHash(in, insize, pos); + updateHashChain(hash, wpos, hashval); + if(usezeros && hashval == 0) + { + if (numzeros == 0) numzeros = countZeros(in, insize, pos); + else if (pos + numzeros >= insize || in[pos + numzeros - 1] != 0) numzeros--; + hash->zeros[wpos] = numzeros; + } + else + { + numzeros = 0; + } + } + } + } /*end of the loop through each character of input*/ + + return error; +} + +/* /////////////////////////////////////////////////////////////////////////// */ + +static unsigned deflateNoCompression(ucvector* out, const unsigned char* data, size_t datasize) +{ + /*non compressed deflate block data: 1 bit BFINAL,2 bits BTYPE,(5 bits): it jumps to start of next byte, + 2 bytes LEN, 2 bytes NLEN, LEN bytes literal DATA*/ + + size_t i, j, numdeflateblocks = (datasize + 65534) / 65535; + unsigned datapos = 0; + for(i = 0; i < numdeflateblocks; i++) + { + unsigned BFINAL, BTYPE, LEN, NLEN; + unsigned char firstbyte; + + BFINAL = (i == numdeflateblocks - 1); + BTYPE = 0; + + firstbyte = (unsigned char)(BFINAL + ((BTYPE & 1) << 1) + ((BTYPE & 2) << 1)); + ucvector_push_back(out, firstbyte); + + LEN = 65535; + if(datasize - datapos < 65535) LEN = (unsigned)datasize - datapos; + NLEN = 65535 - LEN; + + ucvector_push_back(out, (unsigned char)(LEN % 256)); + ucvector_push_back(out, (unsigned char)(LEN / 256)); + ucvector_push_back(out, (unsigned char)(NLEN % 256)); + ucvector_push_back(out, (unsigned char)(NLEN / 256)); + + /*Decompressed data*/ + for(j = 0; j < 65535 && datapos < datasize; j++) + { + ucvector_push_back(out, data[datapos++]); + } + } + + return 0; +} + +/* +write the lz77-encoded data, which has lit, len and dist codes, to compressed stream using huffman trees. +tree_ll: the tree for lit and len codes. +tree_d: the tree for distance codes. +*/ +static void writeLZ77data(size_t* bp, ucvector* out, const uivector* lz77_encoded, + const HuffmanTree* tree_ll, const HuffmanTree* tree_d) +{ + size_t i = 0; + for(i = 0; i < lz77_encoded->size; i++) + { + unsigned val = lz77_encoded->data[i]; + addHuffmanSymbol(bp, out, HuffmanTree_getCode(tree_ll, val), HuffmanTree_getLength(tree_ll, val)); + if(val > 256) /*for a length code, 3 more things have to be added*/ + { + unsigned length_index = val - FIRST_LENGTH_CODE_INDEX; + unsigned n_length_extra_bits = LENGTHEXTRA[length_index]; + unsigned length_extra_bits = lz77_encoded->data[++i]; + + unsigned distance_code = lz77_encoded->data[++i]; + + unsigned distance_index = distance_code; + unsigned n_distance_extra_bits = DISTANCEEXTRA[distance_index]; + unsigned distance_extra_bits = lz77_encoded->data[++i]; + + addBitsToStream(bp, out, length_extra_bits, n_length_extra_bits); + addHuffmanSymbol(bp, out, HuffmanTree_getCode(tree_d, distance_code), + HuffmanTree_getLength(tree_d, distance_code)); + addBitsToStream(bp, out, distance_extra_bits, n_distance_extra_bits); + } + } +} + +/*Deflate for a block of type "dynamic", that is, with freely, optimally, created huffman trees*/ +static unsigned deflateDynamic(ucvector* out, size_t* bp, Hash* hash, + const unsigned char* data, size_t datapos, size_t dataend, + const LodePNGCompressSettings* settings, int final) +{ + unsigned error = 0; + + /* + A block is compressed as follows: The PNG data is lz77 encoded, resulting in + literal bytes and length/distance pairs. This is then huffman compressed with + two huffman trees. One huffman tree is used for the lit and len values ("ll"), + another huffman tree is used for the dist values ("d"). These two trees are + stored using their code lengths, and to compress even more these code lengths + are also run-length encoded and huffman compressed. This gives a huffman tree + of code lengths "cl". The code lenghts used to describe this third tree are + the code length code lengths ("clcl"). + */ + + /*The lz77 encoded data, represented with integers since there will also be length and distance codes in it*/ + uivector lz77_encoded; + HuffmanTree tree_ll; /*tree for lit,len values*/ + HuffmanTree tree_d; /*tree for distance codes*/ + HuffmanTree tree_cl; /*tree for encoding the code lengths representing tree_ll and tree_d*/ + uivector frequencies_ll; /*frequency of lit,len codes*/ + uivector frequencies_d; /*frequency of dist codes*/ + uivector frequencies_cl; /*frequency of code length codes*/ + uivector bitlen_lld; /*lit,len,dist code lenghts (int bits), literally (without repeat codes).*/ + uivector bitlen_lld_e; /*bitlen_lld encoded with repeat codes (this is a rudemtary run length compression)*/ + /*bitlen_cl is the code length code lengths ("clcl"). The bit lengths of codes to represent tree_cl + (these are written as is in the file, it would be crazy to compress these using yet another huffman + tree that needs to be represented by yet another set of code lengths)*/ + uivector bitlen_cl; + size_t datasize = dataend - datapos; + + /* + Due to the huffman compression of huffman tree representations ("two levels"), there are some anologies: + bitlen_lld is to tree_cl what data is to tree_ll and tree_d. + bitlen_lld_e is to bitlen_lld what lz77_encoded is to data. + bitlen_cl is to bitlen_lld_e what bitlen_lld is to lz77_encoded. + */ + + unsigned BFINAL = final; + size_t numcodes_ll, numcodes_d, i; + unsigned HLIT, HDIST, HCLEN; + + uivector_init(&lz77_encoded); + HuffmanTree_init(&tree_ll); + HuffmanTree_init(&tree_d); + HuffmanTree_init(&tree_cl); + uivector_init(&frequencies_ll); + uivector_init(&frequencies_d); + uivector_init(&frequencies_cl); + uivector_init(&bitlen_lld); + uivector_init(&bitlen_lld_e); + uivector_init(&bitlen_cl); + + /*This while loop never loops due to a break at the end, it is here to + allow breaking out of it to the cleanup phase on error conditions.*/ + while(!error) + { + if(settings->use_lz77) + { + error = encodeLZ77(&lz77_encoded, hash, data, datapos, dataend, settings->windowsize, + settings->minmatch, settings->nicematch, settings->lazymatching); + if(error) break; + } + else + { + if(!uivector_resize(&lz77_encoded, datasize)) ERROR_BREAK(83 /*alloc fail*/); + for(i = datapos; i < dataend; i++) lz77_encoded.data[i] = data[i]; /*no LZ77, but still will be Huffman compressed*/ + } + + if(!uivector_resizev(&frequencies_ll, 286, 0)) ERROR_BREAK(83 /*alloc fail*/); + if(!uivector_resizev(&frequencies_d, 30, 0)) ERROR_BREAK(83 /*alloc fail*/); + + /*Count the frequencies of lit, len and dist codes*/ + for(i = 0; i < lz77_encoded.size; i++) + { + unsigned symbol = lz77_encoded.data[i]; + frequencies_ll.data[symbol]++; + if(symbol > 256) + { + unsigned dist = lz77_encoded.data[i + 2]; + frequencies_d.data[dist]++; + i += 3; + } + } + frequencies_ll.data[256] = 1; /*there will be exactly 1 end code, at the end of the block*/ + + /*Make both huffman trees, one for the lit and len codes, one for the dist codes*/ + error = HuffmanTree_makeFromFrequencies(&tree_ll, frequencies_ll.data, 257, frequencies_ll.size, 15); + if(error) break; + /*2, not 1, is chosen for mincodes: some buggy PNG decoders require at least 2 symbols in the dist tree*/ + error = HuffmanTree_makeFromFrequencies(&tree_d, frequencies_d.data, 2, frequencies_d.size, 15); + if(error) break; + + numcodes_ll = tree_ll.numcodes; if(numcodes_ll > 286) numcodes_ll = 286; + numcodes_d = tree_d.numcodes; if(numcodes_d > 30) numcodes_d = 30; + /*store the code lengths of both generated trees in bitlen_lld*/ + for(i = 0; i < numcodes_ll; i++) uivector_push_back(&bitlen_lld, HuffmanTree_getLength(&tree_ll, (unsigned)i)); + for(i = 0; i < numcodes_d; i++) uivector_push_back(&bitlen_lld, HuffmanTree_getLength(&tree_d, (unsigned)i)); + + /*run-length compress bitlen_ldd into bitlen_lld_e by using repeat codes 16 (copy length 3-6 times), + 17 (3-10 zeroes), 18 (11-138 zeroes)*/ + for(i = 0; i < (unsigned)bitlen_lld.size; i++) + { + unsigned j = 0; /*amount of repititions*/ + while(i + j + 1 < (unsigned)bitlen_lld.size && bitlen_lld.data[i + j + 1] == bitlen_lld.data[i]) j++; + + if(bitlen_lld.data[i] == 0 && j >= 2) /*repeat code for zeroes*/ + { + j++; /*include the first zero*/ + if(j <= 10) /*repeat code 17 supports max 10 zeroes*/ + { + uivector_push_back(&bitlen_lld_e, 17); + uivector_push_back(&bitlen_lld_e, j - 3); + } + else /*repeat code 18 supports max 138 zeroes*/ + { + if(j > 138) j = 138; + uivector_push_back(&bitlen_lld_e, 18); + uivector_push_back(&bitlen_lld_e, j - 11); + } + i += (j - 1); + } + else if(j >= 3) /*repeat code for value other than zero*/ + { + size_t k; + unsigned num = j / 6, rest = j % 6; + uivector_push_back(&bitlen_lld_e, bitlen_lld.data[i]); + for(k = 0; k < num; k++) + { + uivector_push_back(&bitlen_lld_e, 16); + uivector_push_back(&bitlen_lld_e, 6 - 3); + } + if(rest >= 3) + { + uivector_push_back(&bitlen_lld_e, 16); + uivector_push_back(&bitlen_lld_e, rest - 3); + } + else j -= rest; + i += j; + } + else /*too short to benefit from repeat code*/ + { + uivector_push_back(&bitlen_lld_e, bitlen_lld.data[i]); + } + } + + /*generate tree_cl, the huffmantree of huffmantrees*/ + + if(!uivector_resizev(&frequencies_cl, NUM_CODE_LENGTH_CODES, 0)) ERROR_BREAK(83 /*alloc fail*/); + for(i = 0; i < bitlen_lld_e.size; i++) + { + frequencies_cl.data[bitlen_lld_e.data[i]]++; + /*after a repeat code come the bits that specify the number of repetitions, + those don't need to be in the frequencies_cl calculation*/ + if(bitlen_lld_e.data[i] >= 16) i++; + } + + error = HuffmanTree_makeFromFrequencies(&tree_cl, frequencies_cl.data, + frequencies_cl.size, frequencies_cl.size, 7); + if(error) break; + + if(!uivector_resize(&bitlen_cl, tree_cl.numcodes)) ERROR_BREAK(83 /*alloc fail*/); + for(i = 0; i < tree_cl.numcodes; i++) + { + /*lenghts of code length tree is in the order as specified by deflate*/ + bitlen_cl.data[i] = HuffmanTree_getLength(&tree_cl, CLCL_ORDER[i]); + } + while(bitlen_cl.data[bitlen_cl.size - 1] == 0 && bitlen_cl.size > 4) + { + /*remove zeros at the end, but minimum size must be 4*/ + if(!uivector_resize(&bitlen_cl, bitlen_cl.size - 1)) ERROR_BREAK(83 /*alloc fail*/); + } + if(error) break; + + /* + Write everything into the output + + After the BFINAL and BTYPE, the dynamic block consists out of the following: + - 5 bits HLIT, 5 bits HDIST, 4 bits HCLEN + - (HCLEN+4)*3 bits code lengths of code length alphabet + - HLIT + 257 code lenghts of lit/length alphabet (encoded using the code length + alphabet, + possible repetition codes 16, 17, 18) + - HDIST + 1 code lengths of distance alphabet (encoded using the code length + alphabet, + possible repetition codes 16, 17, 18) + - compressed data + - 256 (end code) + */ + + /*Write block type*/ + addBitToStream(bp, out, BFINAL); + addBitToStream(bp, out, 0); /*first bit of BTYPE "dynamic"*/ + addBitToStream(bp, out, 1); /*second bit of BTYPE "dynamic"*/ + + /*write the HLIT, HDIST and HCLEN values*/ + HLIT = (unsigned)(numcodes_ll - 257); + HDIST = (unsigned)(numcodes_d - 1); + HCLEN = (unsigned)bitlen_cl.size - 4; + /*trim zeroes for HCLEN. HLIT and HDIST were already trimmed at tree creation*/ + while(!bitlen_cl.data[HCLEN + 4 - 1] && HCLEN > 0) HCLEN--; + addBitsToStream(bp, out, HLIT, 5); + addBitsToStream(bp, out, HDIST, 5); + addBitsToStream(bp, out, HCLEN, 4); + + /*write the code lenghts of the code length alphabet*/ + for(i = 0; i < HCLEN + 4; i++) addBitsToStream(bp, out, bitlen_cl.data[i], 3); + + /*write the lenghts of the lit/len AND the dist alphabet*/ + for(i = 0; i < bitlen_lld_e.size; i++) + { + addHuffmanSymbol(bp, out, HuffmanTree_getCode(&tree_cl, bitlen_lld_e.data[i]), + HuffmanTree_getLength(&tree_cl, bitlen_lld_e.data[i])); + /*extra bits of repeat codes*/ + if(bitlen_lld_e.data[i] == 16) addBitsToStream(bp, out, bitlen_lld_e.data[++i], 2); + else if(bitlen_lld_e.data[i] == 17) addBitsToStream(bp, out, bitlen_lld_e.data[++i], 3); + else if(bitlen_lld_e.data[i] == 18) addBitsToStream(bp, out, bitlen_lld_e.data[++i], 7); + } + + /*write the compressed data symbols*/ + writeLZ77data(bp, out, &lz77_encoded, &tree_ll, &tree_d); + /*error: the length of the end code 256 must be larger than 0*/ + if(HuffmanTree_getLength(&tree_ll, 256) == 0) ERROR_BREAK(64); + + /*write the end code*/ + addHuffmanSymbol(bp, out, HuffmanTree_getCode(&tree_ll, 256), HuffmanTree_getLength(&tree_ll, 256)); + + break; /*end of error-while*/ + } + + /*cleanup*/ + uivector_cleanup(&lz77_encoded); + HuffmanTree_cleanup(&tree_ll); + HuffmanTree_cleanup(&tree_d); + HuffmanTree_cleanup(&tree_cl); + uivector_cleanup(&frequencies_ll); + uivector_cleanup(&frequencies_d); + uivector_cleanup(&frequencies_cl); + uivector_cleanup(&bitlen_lld_e); + uivector_cleanup(&bitlen_lld); + uivector_cleanup(&bitlen_cl); + + return error; +} + +static unsigned deflateFixed(ucvector* out, size_t* bp, Hash* hash, + const unsigned char* data, + size_t datapos, size_t dataend, + const LodePNGCompressSettings* settings, int final) +{ + HuffmanTree tree_ll; /*tree for literal values and length codes*/ + HuffmanTree tree_d; /*tree for distance codes*/ + + unsigned BFINAL = final; + unsigned error = 0; + size_t i; + + HuffmanTree_init(&tree_ll); + HuffmanTree_init(&tree_d); + + generateFixedLitLenTree(&tree_ll); + generateFixedDistanceTree(&tree_d); + + addBitToStream(bp, out, BFINAL); + addBitToStream(bp, out, 1); /*first bit of BTYPE*/ + addBitToStream(bp, out, 0); /*second bit of BTYPE*/ + + if(settings->use_lz77) /*LZ77 encoded*/ + { + uivector lz77_encoded; + uivector_init(&lz77_encoded); + error = encodeLZ77(&lz77_encoded, hash, data, datapos, dataend, settings->windowsize, + settings->minmatch, settings->nicematch, settings->lazymatching); + if(!error) writeLZ77data(bp, out, &lz77_encoded, &tree_ll, &tree_d); + uivector_cleanup(&lz77_encoded); + } + else /*no LZ77, but still will be Huffman compressed*/ + { + for(i = datapos; i < dataend; i++) + { + addHuffmanSymbol(bp, out, HuffmanTree_getCode(&tree_ll, data[i]), HuffmanTree_getLength(&tree_ll, data[i])); + } + } + /*add END code*/ + if(!error) addHuffmanSymbol(bp, out, HuffmanTree_getCode(&tree_ll, 256), HuffmanTree_getLength(&tree_ll, 256)); + + /*cleanup*/ + HuffmanTree_cleanup(&tree_ll); + HuffmanTree_cleanup(&tree_d); + + return error; +} + +static unsigned lodepng_deflatev(ucvector* out, const unsigned char* in, size_t insize, + const LodePNGCompressSettings* settings) +{ + unsigned error = 0; + size_t i, blocksize, numdeflateblocks; + size_t bp = 0; /*the bit pointer*/ + Hash hash; + + if(settings->btype > 2) return 61; + else if(settings->btype == 0) return deflateNoCompression(out, in, insize); + else if(settings->btype == 1) blocksize = insize; + else /*if(settings->btype == 2)*/ + { + blocksize = insize / 8 + 8; + if(blocksize < 65535) blocksize = 65535; + } + + numdeflateblocks = (insize + blocksize - 1) / blocksize; + if(numdeflateblocks == 0) numdeflateblocks = 1; + + error = hash_init(&hash, settings->windowsize); + if(error) return error; + + for(i = 0; i < numdeflateblocks && !error; i++) + { + int final = i == numdeflateblocks - 1; + size_t start = i * blocksize; + size_t end = start + blocksize; + if(end > insize) end = insize; + + if(settings->btype == 1) error = deflateFixed(out, &bp, &hash, in, start, end, settings, final); + else if(settings->btype == 2) error = deflateDynamic(out, &bp, &hash, in, start, end, settings, final); + } + + hash_cleanup(&hash); + + return error; +} + +unsigned lodepng_deflate(unsigned char** out, size_t* outsize, + const unsigned char* in, size_t insize, + const LodePNGCompressSettings* settings) +{ + unsigned error; + ucvector v; + ucvector_init_buffer(&v, *out, *outsize); + error = lodepng_deflatev(&v, in, insize, settings); + *out = v.data; + *outsize = v.size; + return error; +} + +static unsigned deflate(unsigned char** out, size_t* outsize, + const unsigned char* in, size_t insize, + const LodePNGCompressSettings* settings) +{ + if(settings->custom_deflate) + { + return settings->custom_deflate(out, outsize, in, insize, settings); + } + else + { + return lodepng_deflate(out, outsize, in, insize, settings); + } +} + +#endif /*LODEPNG_COMPILE_DECODER*/ + +/* ////////////////////////////////////////////////////////////////////////// */ +/* / Adler32 */ +/* ////////////////////////////////////////////////////////////////////////// */ + +static unsigned update_adler32(unsigned adler, const unsigned char* data, unsigned len) +{ + unsigned s1 = adler & 0xffff; + unsigned s2 = (adler >> 16) & 0xffff; + + while(len > 0) + { + /*at least 5550 sums can be done before the sums overflow, saving a lot of module divisions*/ + unsigned amount = len > 5550 ? 5550 : len; + len -= amount; + while(amount > 0) + { + s1 += (*data++); + s2 += s1; + amount--; + } + s1 %= 65521; + s2 %= 65521; + } + + return (s2 << 16) | s1; +} + +/*Return the adler32 of the bytes data[0..len-1]*/ +static unsigned adler32(const unsigned char* data, unsigned len) +{ + return update_adler32(1L, data, len); +} + +/* ////////////////////////////////////////////////////////////////////////// */ +/* / Zlib / */ +/* ////////////////////////////////////////////////////////////////////////// */ + +#ifdef LODEPNG_COMPILE_DECODER + +unsigned lodepng_zlib_decompress(unsigned char** out, size_t* outsize, const unsigned char* in, + size_t insize, const LodePNGDecompressSettings* settings) +{ + unsigned error = 0; + unsigned CM, CINFO, FDICT; + + if(insize < 2) return 53; /*error, size of zlib data too small*/ + /*read information from zlib header*/ + if((in[0] * 256 + in[1]) % 31 != 0) + { + /*error: 256 * in[0] + in[1] must be a multiple of 31, the FCHECK value is supposed to be made that way*/ + return 24; + } + + CM = in[0] & 15; + CINFO = (in[0] >> 4) & 15; + /*FCHECK = in[1] & 31;*/ /*FCHECK is already tested above*/ + FDICT = (in[1] >> 5) & 1; + /*FLEVEL = (in[1] >> 6) & 3;*/ /*FLEVEL is not used here*/ + + if(CM != 8 || CINFO > 7) + { + /*error: only compression method 8: inflate with sliding window of 32k is supported by the PNG spec*/ + return 25; + } + if(FDICT != 0) + { + /*error: the specification of PNG says about the zlib stream: + "The additional flags shall not specify a preset dictionary."*/ + return 26; + } + + error = inflate(out, outsize, in + 2, insize - 2, settings); + if(error) return error; + + if(!settings->ignore_adler32) + { + unsigned ADLER32 = lodepng_read32bitInt(&in[insize - 4]); + unsigned checksum = adler32(*out, (unsigned)(*outsize)); + if(checksum != ADLER32) return 58; /*error, adler checksum not correct, data must be corrupted*/ + } + + return 0; /*no error*/ +} + +static unsigned zlib_decompress(unsigned char** out, size_t* outsize, const unsigned char* in, + size_t insize, const LodePNGDecompressSettings* settings) +{ + if(settings->custom_zlib) + { + return settings->custom_zlib(out, outsize, in, insize, settings); + } + else + { + return lodepng_zlib_decompress(out, outsize, in, insize, settings); + } +} + +#endif /*LODEPNG_COMPILE_DECODER*/ + +#ifdef LODEPNG_COMPILE_ENCODER + +unsigned lodepng_zlib_compress(unsigned char** out, size_t* outsize, const unsigned char* in, + size_t insize, const LodePNGCompressSettings* settings) +{ + /*initially, *out must be NULL and outsize 0, if you just give some random *out + that's pointing to a non allocated buffer, this'll crash*/ + ucvector outv; + size_t i; + unsigned error; + unsigned char* deflatedata = 0; + size_t deflatesize = 0; + + unsigned ADLER32; + /*zlib data: 1 byte CMF (CM+CINFO), 1 byte FLG, deflate data, 4 byte ADLER32 checksum of the Decompressed data*/ + unsigned CMF = 120; /*0b01111000: CM 8, CINFO 7. With CINFO 7, any window size up to 32768 can be used.*/ + unsigned FLEVEL = 0; + unsigned FDICT = 0; + unsigned CMFFLG = 256 * CMF + FDICT * 32 + FLEVEL * 64; + unsigned FCHECK = 31 - CMFFLG % 31; + CMFFLG += FCHECK; + + /*ucvector-controlled version of the output buffer, for dynamic array*/ + ucvector_init_buffer(&outv, *out, *outsize); + + ucvector_push_back(&outv, (unsigned char)(CMFFLG / 256)); + ucvector_push_back(&outv, (unsigned char)(CMFFLG % 256)); + + error = deflate(&deflatedata, &deflatesize, in, insize, settings); + + if(!error) + { + ADLER32 = adler32(in, (unsigned)insize); + for(i = 0; i < deflatesize; i++) ucvector_push_back(&outv, deflatedata[i]); + lodepng_free(deflatedata); + lodepng_add32bitInt(&outv, ADLER32); + } + + *out = outv.data; + *outsize = outv.size; + + return error; +} + +/* compress using the default or custom zlib function */ +static unsigned zlib_compress(unsigned char** out, size_t* outsize, const unsigned char* in, + size_t insize, const LodePNGCompressSettings* settings) +{ + if(settings->custom_zlib) + { + return settings->custom_zlib(out, outsize, in, insize, settings); + } + else + { + return lodepng_zlib_compress(out, outsize, in, insize, settings); + } +} + +#endif /*LODEPNG_COMPILE_ENCODER*/ + +#else /*no LODEPNG_COMPILE_ZLIB*/ + +#ifdef LODEPNG_COMPILE_DECODER +static unsigned zlib_decompress(unsigned char** out, size_t* outsize, const unsigned char* in, + size_t insize, const LodePNGDecompressSettings* settings) +{ + if (!settings->custom_zlib) return 87; /*no custom zlib function provided */ + return settings->custom_zlib(out, outsize, in, insize, settings); +} +#endif /*LODEPNG_COMPILE_DECODER*/ +#ifdef LODEPNG_COMPILE_ENCODER +static unsigned zlib_compress(unsigned char** out, size_t* outsize, const unsigned char* in, + size_t insize, const LodePNGCompressSettings* settings) +{ + if (!settings->custom_zlib) return 87; /*no custom zlib function provided */ + return settings->custom_zlib(out, outsize, in, insize, settings); +} +#endif /*LODEPNG_COMPILE_ENCODER*/ + +#endif /*LODEPNG_COMPILE_ZLIB*/ + +/* ////////////////////////////////////////////////////////////////////////// */ + +#ifdef LODEPNG_COMPILE_ENCODER + +/*this is a good tradeoff between speed and compression ratio*/ +#define DEFAULT_WINDOWSIZE 2048 + +void lodepng_compress_settings_init(LodePNGCompressSettings* settings) +{ + /*compress with dynamic huffman tree (not in the mathematical sense, just not the predefined one)*/ + settings->btype = 2; + settings->use_lz77 = 1; + settings->windowsize = DEFAULT_WINDOWSIZE; + settings->minmatch = 3; + settings->nicematch = 128; + settings->lazymatching = 1; + + settings->custom_zlib = 0; + settings->custom_deflate = 0; + settings->custom_context = 0; +} + +const LodePNGCompressSettings lodepng_default_compress_settings = {2, 1, DEFAULT_WINDOWSIZE, 3, 128, 1, 0, 0, 0}; + + +#endif /*LODEPNG_COMPILE_ENCODER*/ + +#ifdef LODEPNG_COMPILE_DECODER + +void lodepng_decompress_settings_init(LodePNGDecompressSettings* settings) +{ + settings->ignore_adler32 = 0; + + settings->custom_zlib = 0; + settings->custom_inflate = 0; + settings->custom_context = 0; +} + +const LodePNGDecompressSettings lodepng_default_decompress_settings = {0, 0, 0, 0}; + +#endif /*LODEPNG_COMPILE_DECODER*/ + +/* ////////////////////////////////////////////////////////////////////////// */ +/* ////////////////////////////////////////////////////////////////////////// */ +/* // End of Zlib related code. Begin of PNG related code. // */ +/* ////////////////////////////////////////////////////////////////////////// */ +/* ////////////////////////////////////////////////////////////////////////// */ + +#ifdef LODEPNG_COMPILE_PNG + +/* ////////////////////////////////////////////////////////////////////////// */ +/* / CRC32 / */ +/* ////////////////////////////////////////////////////////////////////////// */ + +/* CRC polynomial: 0xedb88320 */ +static unsigned lodepng_crc32_table[256] = { + 0u, 1996959894u, 3993919788u, 2567524794u, 124634137u, 1886057615u, 3915621685u, 2657392035u, + 249268274u, 2044508324u, 3772115230u, 2547177864u, 162941995u, 2125561021u, 3887607047u, 2428444049u, + 498536548u, 1789927666u, 4089016648u, 2227061214u, 450548861u, 1843258603u, 4107580753u, 2211677639u, + 325883990u, 1684777152u, 4251122042u, 2321926636u, 335633487u, 1661365465u, 4195302755u, 2366115317u, + 997073096u, 1281953886u, 3579855332u, 2724688242u, 1006888145u, 1258607687u, 3524101629u, 2768942443u, + 901097722u, 1119000684u, 3686517206u, 2898065728u, 853044451u, 1172266101u, 3705015759u, 2882616665u, + 651767980u, 1373503546u, 3369554304u, 3218104598u, 565507253u, 1454621731u, 3485111705u, 3099436303u, + 671266974u, 1594198024u, 3322730930u, 2970347812u, 795835527u, 1483230225u, 3244367275u, 3060149565u, + 1994146192u, 31158534u, 2563907772u, 4023717930u, 1907459465u, 112637215u, 2680153253u, 3904427059u, + 2013776290u, 251722036u, 2517215374u, 3775830040u, 2137656763u, 141376813u, 2439277719u, 3865271297u, + 1802195444u, 476864866u, 2238001368u, 4066508878u, 1812370925u, 453092731u, 2181625025u, 4111451223u, + 1706088902u, 314042704u, 2344532202u, 4240017532u, 1658658271u, 366619977u, 2362670323u, 4224994405u, + 1303535960u, 984961486u, 2747007092u, 3569037538u, 1256170817u, 1037604311u, 2765210733u, 3554079995u, + 1131014506u, 879679996u, 2909243462u, 3663771856u, 1141124467u, 855842277u, 2852801631u, 3708648649u, + 1342533948u, 654459306u, 3188396048u, 3373015174u, 1466479909u, 544179635u, 3110523913u, 3462522015u, + 1591671054u, 702138776u, 2966460450u, 3352799412u, 1504918807u, 783551873u, 3082640443u, 3233442989u, + 3988292384u, 2596254646u, 62317068u, 1957810842u, 3939845945u, 2647816111u, 81470997u, 1943803523u, + 3814918930u, 2489596804u, 225274430u, 2053790376u, 3826175755u, 2466906013u, 167816743u, 2097651377u, + 4027552580u, 2265490386u, 503444072u, 1762050814u, 4150417245u, 2154129355u, 426522225u, 1852507879u, + 4275313526u, 2312317920u, 282753626u, 1742555852u, 4189708143u, 2394877945u, 397917763u, 1622183637u, + 3604390888u, 2714866558u, 953729732u, 1340076626u, 3518719985u, 2797360999u, 1068828381u, 1219638859u, + 3624741850u, 2936675148u, 906185462u, 1090812512u, 3747672003u, 2825379669u, 829329135u, 1181335161u, + 3412177804u, 3160834842u, 628085408u, 1382605366u, 3423369109u, 3138078467u, 570562233u, 1426400815u, + 3317316542u, 2998733608u, 733239954u, 1555261956u, 3268935591u, 3050360625u, 752459403u, 1541320221u, + 2607071920u, 3965973030u, 1969922972u, 40735498u, 2617837225u, 3943577151u, 1913087877u, 83908371u, + 2512341634u, 3803740692u, 2075208622u, 213261112u, 2463272603u, 3855990285u, 2094854071u, 198958881u, + 2262029012u, 4057260610u, 1759359992u, 534414190u, 2176718541u, 4139329115u, 1873836001u, 414664567u, + 2282248934u, 4279200368u, 1711684554u, 285281116u, 2405801727u, 4167216745u, 1634467795u, 376229701u, + 2685067896u, 3608007406u, 1308918612u, 956543938u, 2808555105u, 3495958263u, 1231636301u, 1047427035u, + 2932959818u, 3654703836u, 1088359270u, 936918000u, 2847714899u, 3736837829u, 1202900863u, 817233897u, + 3183342108u, 3401237130u, 1404277552u, 615818150u, 3134207493u, 3453421203u, 1423857449u, 601450431u, + 3009837614u, 3294710456u, 1567103746u, 711928724u, 3020668471u, 3272380065u, 1510334235u, 755167117u +}; + +/*Return the CRC of the bytes buf[0..len-1].*/ +unsigned lodepng_crc32(const unsigned char* buf, size_t len) +{ + unsigned c = 0xffffffffL; + size_t n; + + for(n = 0; n < len; n++) + { + c = lodepng_crc32_table[(c ^ buf[n]) & 0xff] ^ (c >> 8); + } + return c ^ 0xffffffffL; +} + +/* ////////////////////////////////////////////////////////////////////////// */ +/* / Reading and writing single bits and bytes from/to stream for LodePNG / */ +/* ////////////////////////////////////////////////////////////////////////// */ + +static unsigned char readBitFromReversedStream(size_t* bitpointer, const unsigned char* bitstream) +{ + unsigned char result = (unsigned char)((bitstream[(*bitpointer) >> 3] >> (7 - ((*bitpointer) & 0x7))) & 1); + (*bitpointer)++; + return result; +} + +static unsigned readBitsFromReversedStream(size_t* bitpointer, const unsigned char* bitstream, size_t nbits) +{ + unsigned result = 0; + size_t i; + for(i = nbits - 1; i < nbits; i--) + { + result += (unsigned)readBitFromReversedStream(bitpointer, bitstream) << i; + } + return result; +} + +#ifdef LODEPNG_COMPILE_DECODER +static void setBitOfReversedStream0(size_t* bitpointer, unsigned char* bitstream, unsigned char bit) +{ + /*the current bit in bitstream must be 0 for this to work*/ + if(bit) + { + /*earlier bit of huffman code is in a lesser significant bit of an earlier byte*/ + bitstream[(*bitpointer) >> 3] |= (bit << (7 - ((*bitpointer) & 0x7))); + } + (*bitpointer)++; +} +#endif /*LODEPNG_COMPILE_DECODER*/ + +static void setBitOfReversedStream(size_t* bitpointer, unsigned char* bitstream, unsigned char bit) +{ + /*the current bit in bitstream may be 0 or 1 for this to work*/ + if(bit == 0) bitstream[(*bitpointer) >> 3] &= (unsigned char)(~(1 << (7 - ((*bitpointer) & 0x7)))); + else bitstream[(*bitpointer) >> 3] |= (1 << (7 - ((*bitpointer) & 0x7))); + (*bitpointer)++; +} + +/* ////////////////////////////////////////////////////////////////////////// */ +/* / PNG chunks / */ +/* ////////////////////////////////////////////////////////////////////////// */ + +unsigned lodepng_chunk_length(const unsigned char* chunk) +{ + return lodepng_read32bitInt(&chunk[0]); +} + +void lodepng_chunk_type(char type[5], const unsigned char* chunk) +{ + unsigned i; + for(i = 0; i < 4; i++) type[i] = chunk[4 + i]; + type[4] = 0; /*null termination char*/ +} + +unsigned char lodepng_chunk_type_equals(const unsigned char* chunk, const char* type) +{ + if(strlen(type) != 4) return 0; + return (chunk[4] == type[0] && chunk[5] == type[1] && chunk[6] == type[2] && chunk[7] == type[3]); +} + +unsigned char lodepng_chunk_ancillary(const unsigned char* chunk) +{ + return((chunk[4] & 32) != 0); +} + +unsigned char lodepng_chunk_private(const unsigned char* chunk) +{ + return((chunk[6] & 32) != 0); +} + +unsigned char lodepng_chunk_safetocopy(const unsigned char* chunk) +{ + return((chunk[7] & 32) != 0); +} + +unsigned char* lodepng_chunk_data(unsigned char* chunk) +{ + return &chunk[8]; +} + +const unsigned char* lodepng_chunk_data_const(const unsigned char* chunk) +{ + return &chunk[8]; +} + +unsigned lodepng_chunk_check_crc(const unsigned char* chunk) +{ + unsigned length = lodepng_chunk_length(chunk); + unsigned CRC = lodepng_read32bitInt(&chunk[length + 8]); + /*the CRC is taken of the data and the 4 chunk type letters, not the length*/ + unsigned checksum = lodepng_crc32(&chunk[4], length + 4); + if(CRC != checksum) return 1; + else return 0; +} + +void lodepng_chunk_generate_crc(unsigned char* chunk) +{ + unsigned length = lodepng_chunk_length(chunk); + unsigned CRC = lodepng_crc32(&chunk[4], length + 4); + lodepng_set32bitInt(chunk + 8 + length, CRC); +} + +unsigned char* lodepng_chunk_next(unsigned char* chunk) +{ + unsigned total_chunk_length = lodepng_chunk_length(chunk) + 12; + return &chunk[total_chunk_length]; +} + +const unsigned char* lodepng_chunk_next_const(const unsigned char* chunk) +{ + unsigned total_chunk_length = lodepng_chunk_length(chunk) + 12; + return &chunk[total_chunk_length]; +} + +unsigned lodepng_chunk_append(unsigned char** out, size_t* outlength, const unsigned char* chunk) +{ + unsigned i; + unsigned total_chunk_length = lodepng_chunk_length(chunk) + 12; + unsigned char *chunk_start, *new_buffer; + size_t new_length = (*outlength) + total_chunk_length; + if(new_length < total_chunk_length || new_length < (*outlength)) return 77; /*integer overflow happened*/ + + new_buffer = (unsigned char*)lodepng_realloc(*out, new_length); + if(!new_buffer) return 83; /*alloc fail*/ + (*out) = new_buffer; + (*outlength) = new_length; + chunk_start = &(*out)[new_length - total_chunk_length]; + + for(i = 0; i < total_chunk_length; i++) chunk_start[i] = chunk[i]; + + return 0; +} + +unsigned lodepng_chunk_create(unsigned char** out, size_t* outlength, unsigned length, + const char* type, const unsigned char* data) +{ + unsigned i; + unsigned char *chunk, *new_buffer; + size_t new_length = (*outlength) + length + 12; + if(new_length < length + 12 || new_length < (*outlength)) return 77; /*integer overflow happened*/ + new_buffer = (unsigned char*)lodepng_realloc(*out, new_length); + if(!new_buffer) return 83; /*alloc fail*/ + (*out) = new_buffer; + (*outlength) = new_length; + chunk = &(*out)[(*outlength) - length - 12]; + + /*1: length*/ + lodepng_set32bitInt(chunk, (unsigned)length); + + /*2: chunk name (4 letters)*/ + chunk[4] = type[0]; + chunk[5] = type[1]; + chunk[6] = type[2]; + chunk[7] = type[3]; + + /*3: the data*/ + for(i = 0; i < length; i++) chunk[8 + i] = data[i]; + + /*4: CRC (of the chunkname characters and the data)*/ + lodepng_chunk_generate_crc(chunk); + + return 0; +} + +/* ////////////////////////////////////////////////////////////////////////// */ +/* / Color types and such / */ +/* ////////////////////////////////////////////////////////////////////////// */ + +/*return type is a LodePNG error code*/ +static unsigned checkColorValidity(LodePNGColorType colortype, unsigned bd) /*bd = bitdepth*/ +{ + switch(colortype) + { + case 0: if(!(bd == 1 || bd == 2 || bd == 4 || bd == 8 || bd == 16)) return 37; break; /*grey*/ + case 2: if(!( bd == 8 || bd == 16)) return 37; break; /*RGB*/ + case 3: if(!(bd == 1 || bd == 2 || bd == 4 || bd == 8 )) return 37; break; /*palette*/ + case 4: if(!( bd == 8 || bd == 16)) return 37; break; /*grey + alpha*/ + case 6: if(!( bd == 8 || bd == 16)) return 37; break; /*RGBA*/ + default: return 31; + } + return 0; /*allowed color type / bits combination*/ +} + +static unsigned getNumColorChannels(LodePNGColorType colortype) +{ + switch(colortype) + { + case 0: return 1; /*grey*/ + case 2: return 3; /*RGB*/ + case 3: return 1; /*palette*/ + case 4: return 2; /*grey + alpha*/ + case 6: return 4; /*RGBA*/ + } + return 0; /*unexisting color type*/ +} + +static unsigned lodepng_get_bpp_lct(LodePNGColorType colortype, unsigned bitdepth) +{ + /*bits per pixel is amount of channels * bits per channel*/ + return getNumColorChannels(colortype) * bitdepth; +} + +/* ////////////////////////////////////////////////////////////////////////// */ + +void lodepng_color_mode_init(LodePNGColorMode* info) +{ + info->key_defined = 0; + info->key_r = info->key_g = info->key_b = 0; + info->colortype = LCT_RGBA; + info->bitdepth = 8; + info->palette = 0; + info->palettesize = 0; +} + +void lodepng_color_mode_cleanup(LodePNGColorMode* info) +{ + lodepng_palette_clear(info); +} + +unsigned lodepng_color_mode_copy(LodePNGColorMode* dest, const LodePNGColorMode* source) +{ + size_t i; + lodepng_color_mode_cleanup(dest); + *dest = *source; + if(source->palette) + { + dest->palette = (unsigned char*)lodepng_malloc(1024); + if(!dest->palette && source->palettesize) return 83; /*alloc fail*/ + for(i = 0; i < source->palettesize * 4; i++) dest->palette[i] = source->palette[i]; + } + return 0; +} + +static int lodepng_color_mode_equal(const LodePNGColorMode* a, const LodePNGColorMode* b) +{ + size_t i; + if(a->colortype != b->colortype) return 0; + if(a->bitdepth != b->bitdepth) return 0; + if(a->key_defined != b->key_defined) return 0; + if(a->key_defined) + { + if(a->key_r != b->key_r) return 0; + if(a->key_g != b->key_g) return 0; + if(a->key_b != b->key_b) return 0; + } + if(a->palettesize != b->palettesize) return 0; + for(i = 0; i < a->palettesize * 4; i++) + { + if(a->palette[i] != b->palette[i]) return 0; + } + return 1; +} + +void lodepng_palette_clear(LodePNGColorMode* info) +{ + if(info->palette) lodepng_free(info->palette); + info->palette = 0; + info->palettesize = 0; +} + +unsigned lodepng_palette_add(LodePNGColorMode* info, + unsigned char r, unsigned char g, unsigned char b, unsigned char a) +{ + unsigned char* data; + /*the same resize technique as C++ std::vectors is used, and here it's made so that for a palette with + the max of 256 colors, it'll have the exact alloc size*/ + if(!info->palette) /*allocate palette if empty*/ + { + /*room for 256 colors with 4 bytes each*/ + data = (unsigned char*)lodepng_realloc(info->palette, 1024); + if(!data) return 83; /*alloc fail*/ + else info->palette = data; + } + info->palette[4 * info->palettesize + 0] = r; + info->palette[4 * info->palettesize + 1] = g; + info->palette[4 * info->palettesize + 2] = b; + info->palette[4 * info->palettesize + 3] = a; + info->palettesize++; + return 0; +} + +unsigned lodepng_get_bpp(const LodePNGColorMode* info) +{ + /*calculate bits per pixel out of colortype and bitdepth*/ + return lodepng_get_bpp_lct(info->colortype, info->bitdepth); +} + +unsigned lodepng_get_channels(const LodePNGColorMode* info) +{ + return getNumColorChannels(info->colortype); +} + +unsigned lodepng_is_greyscale_type(const LodePNGColorMode* info) +{ + return info->colortype == LCT_GREY || info->colortype == LCT_GREY_ALPHA; +} + +unsigned lodepng_is_alpha_type(const LodePNGColorMode* info) +{ + return (info->colortype & 4) != 0; /*4 or 6*/ +} + +unsigned lodepng_is_palette_type(const LodePNGColorMode* info) +{ + return info->colortype == LCT_PALETTE; +} + +unsigned lodepng_has_palette_alpha(const LodePNGColorMode* info) +{ + size_t i; + for(i = 0; i < info->palettesize; i++) + { + if(info->palette[i * 4 + 3] < 255) return 1; + } + return 0; +} + +unsigned lodepng_can_have_alpha(const LodePNGColorMode* info) +{ + return info->key_defined + || lodepng_is_alpha_type(info) + || lodepng_has_palette_alpha(info); +} + +size_t lodepng_get_raw_size(unsigned w, unsigned h, const LodePNGColorMode* color) +{ + return (w * h * lodepng_get_bpp(color) + 7) / 8; +} + +size_t lodepng_get_raw_size_lct(unsigned w, unsigned h, LodePNGColorType colortype, unsigned bitdepth) +{ + return (w * h * lodepng_get_bpp_lct(colortype, bitdepth) + 7) / 8; +} + +#ifdef LODEPNG_COMPILE_ANCILLARY_CHUNKS + +static void LodePNGUnknownChunks_init(LodePNGInfo* info) +{ + unsigned i; + for(i = 0; i < 3; i++) info->unknown_chunks_data[i] = 0; + for(i = 0; i < 3; i++) info->unknown_chunks_size[i] = 0; +} + +static void LodePNGUnknownChunks_cleanup(LodePNGInfo* info) +{ + unsigned i; + for(i = 0; i < 3; i++) lodepng_free(info->unknown_chunks_data[i]); +} + +static unsigned LodePNGUnknownChunks_copy(LodePNGInfo* dest, const LodePNGInfo* src) +{ + unsigned i; + + LodePNGUnknownChunks_cleanup(dest); + + for(i = 0; i < 3; i++) + { + size_t j; + dest->unknown_chunks_size[i] = src->unknown_chunks_size[i]; + dest->unknown_chunks_data[i] = (unsigned char*)lodepng_malloc(src->unknown_chunks_size[i]); + if(!dest->unknown_chunks_data[i] && dest->unknown_chunks_size[i]) return 83; /*alloc fail*/ + for(j = 0; j < src->unknown_chunks_size[i]; j++) + { + dest->unknown_chunks_data[i][j] = src->unknown_chunks_data[i][j]; + } + } + + return 0; +} + +/******************************************************************************/ + +static void LodePNGText_init(LodePNGInfo* info) +{ + info->text_num = 0; + info->text_keys = NULL; + info->text_strings = NULL; +} + +static void LodePNGText_cleanup(LodePNGInfo* info) +{ + size_t i; + for(i = 0; i < info->text_num; i++) + { + string_cleanup(&info->text_keys[i]); + string_cleanup(&info->text_strings[i]); + } + lodepng_free(info->text_keys); + lodepng_free(info->text_strings); +} + +static unsigned LodePNGText_copy(LodePNGInfo* dest, const LodePNGInfo* source) +{ + size_t i = 0; + dest->text_keys = 0; + dest->text_strings = 0; + dest->text_num = 0; + for(i = 0; i < source->text_num; i++) + { + CERROR_TRY_RETURN(lodepng_add_text(dest, source->text_keys[i], source->text_strings[i])); + } + return 0; +} + +void lodepng_clear_text(LodePNGInfo* info) +{ + LodePNGText_cleanup(info); +} + +unsigned lodepng_add_text(LodePNGInfo* info, const char* key, const char* str) +{ + char** new_keys = (char**)(lodepng_realloc(info->text_keys, sizeof(char*) * (info->text_num + 1))); + char** new_strings = (char**)(lodepng_realloc(info->text_strings, sizeof(char*) * (info->text_num + 1))); + if(!new_keys || !new_strings) + { + lodepng_free(new_keys); + lodepng_free(new_strings); + return 83; /*alloc fail*/ + } + + info->text_num++; + info->text_keys = new_keys; + info->text_strings = new_strings; + + string_init(&info->text_keys[info->text_num - 1]); + string_set(&info->text_keys[info->text_num - 1], key); + + string_init(&info->text_strings[info->text_num - 1]); + string_set(&info->text_strings[info->text_num - 1], str); + + return 0; +} + +/******************************************************************************/ + +static void LodePNGIText_init(LodePNGInfo* info) +{ + info->itext_num = 0; + info->itext_keys = NULL; + info->itext_langtags = NULL; + info->itext_transkeys = NULL; + info->itext_strings = NULL; +} + +static void LodePNGIText_cleanup(LodePNGInfo* info) +{ + size_t i; + for(i = 0; i < info->itext_num; i++) + { + string_cleanup(&info->itext_keys[i]); + string_cleanup(&info->itext_langtags[i]); + string_cleanup(&info->itext_transkeys[i]); + string_cleanup(&info->itext_strings[i]); + } + lodepng_free(info->itext_keys); + lodepng_free(info->itext_langtags); + lodepng_free(info->itext_transkeys); + lodepng_free(info->itext_strings); +} + +static unsigned LodePNGIText_copy(LodePNGInfo* dest, const LodePNGInfo* source) +{ + size_t i = 0; + dest->itext_keys = 0; + dest->itext_langtags = 0; + dest->itext_transkeys = 0; + dest->itext_strings = 0; + dest->itext_num = 0; + for(i = 0; i < source->itext_num; i++) + { + CERROR_TRY_RETURN(lodepng_add_itext(dest, source->itext_keys[i], source->itext_langtags[i], + source->itext_transkeys[i], source->itext_strings[i])); + } + return 0; +} + +void lodepng_clear_itext(LodePNGInfo* info) +{ + LodePNGIText_cleanup(info); +} + +unsigned lodepng_add_itext(LodePNGInfo* info, const char* key, const char* langtag, + const char* transkey, const char* str) +{ + char** new_keys = (char**)(lodepng_realloc(info->itext_keys, sizeof(char*) * (info->itext_num + 1))); + char** new_langtags = (char**)(lodepng_realloc(info->itext_langtags, sizeof(char*) * (info->itext_num + 1))); + char** new_transkeys = (char**)(lodepng_realloc(info->itext_transkeys, sizeof(char*) * (info->itext_num + 1))); + char** new_strings = (char**)(lodepng_realloc(info->itext_strings, sizeof(char*) * (info->itext_num + 1))); + if(!new_keys || !new_langtags || !new_transkeys || !new_strings) + { + lodepng_free(new_keys); + lodepng_free(new_langtags); + lodepng_free(new_transkeys); + lodepng_free(new_strings); + return 83; /*alloc fail*/ + } + + info->itext_num++; + info->itext_keys = new_keys; + info->itext_langtags = new_langtags; + info->itext_transkeys = new_transkeys; + info->itext_strings = new_strings; + + string_init(&info->itext_keys[info->itext_num - 1]); + string_set(&info->itext_keys[info->itext_num - 1], key); + + string_init(&info->itext_langtags[info->itext_num - 1]); + string_set(&info->itext_langtags[info->itext_num - 1], langtag); + + string_init(&info->itext_transkeys[info->itext_num - 1]); + string_set(&info->itext_transkeys[info->itext_num - 1], transkey); + + string_init(&info->itext_strings[info->itext_num - 1]); + string_set(&info->itext_strings[info->itext_num - 1], str); + + return 0; +} +#endif /*LODEPNG_COMPILE_ANCILLARY_CHUNKS*/ + +void lodepng_info_init(LodePNGInfo* info) +{ + lodepng_color_mode_init(&info->color); + info->interlace_method = 0; + info->compression_method = 0; + info->filter_method = 0; +#ifdef LODEPNG_COMPILE_ANCILLARY_CHUNKS + info->background_defined = 0; + info->background_r = info->background_g = info->background_b = 0; + + LodePNGText_init(info); + LodePNGIText_init(info); + + info->time_defined = 0; + info->phys_defined = 0; + + LodePNGUnknownChunks_init(info); +#endif /*LODEPNG_COMPILE_ANCILLARY_CHUNKS*/ +} + +void lodepng_info_cleanup(LodePNGInfo* info) +{ + lodepng_color_mode_cleanup(&info->color); +#ifdef LODEPNG_COMPILE_ANCILLARY_CHUNKS + LodePNGText_cleanup(info); + LodePNGIText_cleanup(info); + + LodePNGUnknownChunks_cleanup(info); +#endif /*LODEPNG_COMPILE_ANCILLARY_CHUNKS*/ +} + +unsigned lodepng_info_copy(LodePNGInfo* dest, const LodePNGInfo* source) +{ + lodepng_info_cleanup(dest); + *dest = *source; + lodepng_color_mode_init(&dest->color); + CERROR_TRY_RETURN(lodepng_color_mode_copy(&dest->color, &source->color)); + +#ifdef LODEPNG_COMPILE_ANCILLARY_CHUNKS + CERROR_TRY_RETURN(LodePNGText_copy(dest, source)); + CERROR_TRY_RETURN(LodePNGIText_copy(dest, source)); + + LodePNGUnknownChunks_init(dest); + CERROR_TRY_RETURN(LodePNGUnknownChunks_copy(dest, source)); +#endif /*LODEPNG_COMPILE_ANCILLARY_CHUNKS*/ + return 0; +} + +void lodepng_info_swap(LodePNGInfo* a, LodePNGInfo* b) +{ + LodePNGInfo temp = *a; + *a = *b; + *b = temp; +} + +/* ////////////////////////////////////////////////////////////////////////// */ + +/*index: bitgroup index, bits: bitgroup size(1, 2 or 4), in: bitgroup value, out: octet array to add bits to*/ +static void addColorBits(unsigned char* out, size_t index, unsigned bits, unsigned in) +{ + unsigned m = bits == 1 ? 7 : bits == 2 ? 3 : 1; /*8 / bits - 1*/ + /*p = the partial index in the byte, e.g. with 4 palettebits it is 0 for first half or 1 for second half*/ + unsigned p = index & m; + in &= (1 << bits) - 1; /*filter out any other bits of the input value*/ + in = in << (bits * (m - p)); + if(p == 0) out[index * bits / 8] = in; + else out[index * bits / 8] |= in; +} + +typedef struct ColorTree ColorTree; + +/* +One node of a color tree +This is the data structure used to count the number of unique colors and to get a palette +index for a color. It's like an octree, but because the alpha channel is used too, each +node has 16 instead of 8 children. +*/ +struct ColorTree +{ + ColorTree* children[16]; /*up to 16 pointers to ColorTree of next level*/ + int index; /*the payload. Only has a meaningful value if this is in the last level*/ +}; + +static void color_tree_init(ColorTree* tree) +{ + int i; + for(i = 0; i < 16; i++) tree->children[i] = 0; + tree->index = -1; +} + +static void color_tree_cleanup(ColorTree* tree) +{ + int i; + for(i = 0; i < 16; i++) + { + if(tree->children[i]) + { + color_tree_cleanup(tree->children[i]); + lodepng_free(tree->children[i]); + } + } +} + +/*returns -1 if color not present, its index otherwise*/ +static int color_tree_get(ColorTree* tree, unsigned char r, unsigned char g, unsigned char b, unsigned char a) +{ + int bit = 0; + for(bit = 0; bit < 8; bit++) + { + int i = 8 * ((r >> bit) & 1) + 4 * ((g >> bit) & 1) + 2 * ((b >> bit) & 1) + 1 * ((a >> bit) & 1); + if(!tree->children[i]) return -1; + else tree = tree->children[i]; + } + return tree ? tree->index : -1; +} + +#ifdef LODEPNG_COMPILE_ENCODER +static int color_tree_has(ColorTree* tree, unsigned char r, unsigned char g, unsigned char b, unsigned char a) +{ + return color_tree_get(tree, r, g, b, a) >= 0; +} +#endif /*LODEPNG_COMPILE_ENCODER*/ + +/*color is not allowed to already exist. +Index should be >= 0 (it's signed to be compatible with using -1 for "doesn't exist")*/ +static void color_tree_add(ColorTree* tree, + unsigned char r, unsigned char g, unsigned char b, unsigned char a, int index) +{ + int bit; + for(bit = 0; bit < 8; bit++) + { + int i = 8 * ((r >> bit) & 1) + 4 * ((g >> bit) & 1) + 2 * ((b >> bit) & 1) + 1 * ((a >> bit) & 1); + if(!tree->children[i]) + { + tree->children[i] = (ColorTree*)lodepng_malloc(sizeof(ColorTree)); + color_tree_init(tree->children[i]); + } + tree = tree->children[i]; + } + tree->index = index; +} + +/*put a pixel, given its RGBA color, into image of any color type*/ +static unsigned rgba8ToPixel(unsigned char* out, size_t i, + const LodePNGColorMode* mode, ColorTree* tree /*for palette*/, + unsigned char r, unsigned char g, unsigned char b, unsigned char a) +{ + if(mode->colortype == LCT_GREY) + { + unsigned char grey = r; /*((unsigned short)r + g + b) / 3*/; + if(mode->bitdepth == 8) out[i] = grey; + else if(mode->bitdepth == 16) out[i * 2 + 0] = out[i * 2 + 1] = grey; + else + { + /*take the most significant bits of grey*/ + grey = (grey >> (8 - mode->bitdepth)) & ((1 << mode->bitdepth) - 1); + addColorBits(out, i, mode->bitdepth, grey); + } + } + else if(mode->colortype == LCT_RGB) + { + if(mode->bitdepth == 8) + { + out[i * 3 + 0] = r; + out[i * 3 + 1] = g; + out[i * 3 + 2] = b; + } + else + { + out[i * 6 + 0] = out[i * 6 + 1] = r; + out[i * 6 + 2] = out[i * 6 + 3] = g; + out[i * 6 + 4] = out[i * 6 + 5] = b; + } + } + else if(mode->colortype == LCT_PALETTE) + { + int index = color_tree_get(tree, r, g, b, a); + if(index < 0) return 82; /*color not in palette*/ + if(mode->bitdepth == 8) out[i] = index; + else addColorBits(out, i, mode->bitdepth, index); + } + else if(mode->colortype == LCT_GREY_ALPHA) + { + unsigned char grey = r; /*((unsigned short)r + g + b) / 3*/; + if(mode->bitdepth == 8) + { + out[i * 2 + 0] = grey; + out[i * 2 + 1] = a; + } + else if(mode->bitdepth == 16) + { + out[i * 4 + 0] = out[i * 4 + 1] = grey; + out[i * 4 + 2] = out[i * 4 + 3] = a; + } + } + else if(mode->colortype == LCT_RGBA) + { + if(mode->bitdepth == 8) + { + out[i * 4 + 0] = r; + out[i * 4 + 1] = g; + out[i * 4 + 2] = b; + out[i * 4 + 3] = a; + } + else + { + out[i * 8 + 0] = out[i * 8 + 1] = r; + out[i * 8 + 2] = out[i * 8 + 3] = g; + out[i * 8 + 4] = out[i * 8 + 5] = b; + out[i * 8 + 6] = out[i * 8 + 7] = a; + } + } + + return 0; /*no error*/ +} + +/*put a pixel, given its RGBA16 color, into image of any color 16-bitdepth type*/ +static unsigned rgba16ToPixel(unsigned char* out, size_t i, + const LodePNGColorMode* mode, + unsigned short r, unsigned short g, unsigned short b, unsigned short a) +{ + if(mode->bitdepth != 16) return 85; /*must be 16 for this function*/ + if(mode->colortype == LCT_GREY) + { + unsigned short grey = r; /*((unsigned)r + g + b) / 3*/; + out[i * 2 + 0] = (grey >> 8) & 255; + out[i * 2 + 1] = grey & 255; + } + else if(mode->colortype == LCT_RGB) + { + out[i * 6 + 0] = (r >> 8) & 255; + out[i * 6 + 1] = r & 255; + out[i * 6 + 2] = (g >> 8) & 255; + out[i * 6 + 3] = g & 255; + out[i * 6 + 4] = (b >> 8) & 255; + out[i * 6 + 5] = b & 255; + } + else if(mode->colortype == LCT_GREY_ALPHA) + { + unsigned short grey = r; /*((unsigned)r + g + b) / 3*/; + out[i * 4 + 0] = (grey >> 8) & 255; + out[i * 4 + 1] = grey & 255; + out[i * 4 + 2] = (a >> 8) & 255; + out[i * 4 + 3] = a & 255; + } + else if(mode->colortype == LCT_RGBA) + { + out[i * 8 + 0] = (r >> 8) & 255; + out[i * 8 + 1] = r & 255; + out[i * 8 + 2] = (g >> 8) & 255; + out[i * 8 + 3] = g & 255; + out[i * 8 + 4] = (b >> 8) & 255; + out[i * 8 + 5] = b & 255; + out[i * 8 + 6] = (a >> 8) & 255; + out[i * 8 + 7] = a & 255; + } + + return 0; /*no error*/ +} + +/*Get RGBA8 color of pixel with index i (y * width + x) from the raw image with given color type.*/ +static unsigned getPixelColorRGBA8(unsigned char* r, unsigned char* g, + unsigned char* b, unsigned char* a, + const unsigned char* in, size_t i, + const LodePNGColorMode* mode, + unsigned fix_png) +{ + if(mode->colortype == LCT_GREY) + { + if(mode->bitdepth == 8) + { + *r = *g = *b = in[i]; + if(mode->key_defined && *r == mode->key_r) *a = 0; + else *a = 255; + } + else if(mode->bitdepth == 16) + { + *r = *g = *b = in[i * 2 + 0]; + if(mode->key_defined && 256U * in[i * 2 + 0] + in[i * 2 + 1] == mode->key_r) *a = 0; + else *a = 255; + } + else + { + unsigned highest = ((1U << mode->bitdepth) - 1U); /*highest possible value for this bit depth*/ + size_t j = i * mode->bitdepth; + unsigned value = readBitsFromReversedStream(&j, in, mode->bitdepth); + *r = *g = *b = (value * 255) / highest; + if(mode->key_defined && value == mode->key_r) *a = 0; + else *a = 255; + } + } + else if(mode->colortype == LCT_RGB) + { + if(mode->bitdepth == 8) + { + *r = in[i * 3 + 0]; *g = in[i * 3 + 1]; *b = in[i * 3 + 2]; + if(mode->key_defined && *r == mode->key_r && *g == mode->key_g && *b == mode->key_b) *a = 0; + else *a = 255; + } + else + { + *r = in[i * 6 + 0]; + *g = in[i * 6 + 2]; + *b = in[i * 6 + 4]; + if(mode->key_defined && 256U * in[i * 6 + 0] + in[i * 6 + 1] == mode->key_r + && 256U * in[i * 6 + 2] + in[i * 6 + 3] == mode->key_g + && 256U * in[i * 6 + 4] + in[i * 6 + 5] == mode->key_b) *a = 0; + else *a = 255; + } + } + else if(mode->colortype == LCT_PALETTE) + { + unsigned index; + if(mode->bitdepth == 8) index = in[i]; + else + { + size_t j = i * mode->bitdepth; + index = readBitsFromReversedStream(&j, in, mode->bitdepth); + } + + if(index >= mode->palettesize) + { + /*This is an error according to the PNG spec, but fix_png can ignore it*/ + if(!fix_png) return (mode->bitdepth == 8 ? 46 : 47); /*index out of palette*/ + *r = *g = *b = 0; + *a = 255; + } + else + { + *r = mode->palette[index * 4 + 0]; + *g = mode->palette[index * 4 + 1]; + *b = mode->palette[index * 4 + 2]; + *a = mode->palette[index * 4 + 3]; + } + } + else if(mode->colortype == LCT_GREY_ALPHA) + { + if(mode->bitdepth == 8) + { + *r = *g = *b = in[i * 2 + 0]; + *a = in[i * 2 + 1]; + } + else + { + *r = *g = *b = in[i * 4 + 0]; + *a = in[i * 4 + 2]; + } + } + else if(mode->colortype == LCT_RGBA) + { + if(mode->bitdepth == 8) + { + *r = in[i * 4 + 0]; + *g = in[i * 4 + 1]; + *b = in[i * 4 + 2]; + *a = in[i * 4 + 3]; + } + else + { + *r = in[i * 8 + 0]; + *g = in[i * 8 + 2]; + *b = in[i * 8 + 4]; + *a = in[i * 8 + 6]; + } + } + + return 0; /*no error*/ +} + +/*Similar to getPixelColorRGBA8, but with all the for loops inside of the color +mode test cases, optimized to convert the colors much faster, when converting +to RGBA or RGB with 8 bit per cannel. buffer must be RGBA or RGB output with +enough memory, if has_alpha is true the output is RGBA. mode has the color mode +of the input buffer.*/ +static unsigned getPixelColorsRGBA8(unsigned char* buffer, size_t numpixels, + unsigned has_alpha, const unsigned char* in, + const LodePNGColorMode* mode, + unsigned fix_png) +{ + unsigned num_channels = has_alpha ? 4 : 3; + size_t i; + if(mode->colortype == LCT_GREY) + { + if(mode->bitdepth == 8) + { + for(i = 0; i < numpixels; i++, buffer += num_channels) + { + buffer[0] = buffer[1] = buffer[2] = in[i]; + if(has_alpha) buffer[3] = mode->key_defined && in[i] == mode->key_r ? 0 : 255; + } + } + else if(mode->bitdepth == 16) + { + for(i = 0; i < numpixels; i++, buffer += num_channels) + { + buffer[0] = buffer[1] = buffer[2] = in[i * 2]; + if(has_alpha) buffer[3] = mode->key_defined && 256U * in[i * 2 + 0] + in[i * 2 + 1] == mode->key_r ? 0 : 255; + } + } + else + { + unsigned highest = ((1U << mode->bitdepth) - 1U); /*highest possible value for this bit depth*/ + size_t j = 0; + for(i = 0; i < numpixels; i++, buffer += num_channels) + { + unsigned value = readBitsFromReversedStream(&j, in, mode->bitdepth); + buffer[0] = buffer[1] = buffer[2] = (value * 255) / highest; + if(has_alpha) buffer[3] = mode->key_defined && value == mode->key_r ? 0 : 255; + } + } + } + else if(mode->colortype == LCT_RGB) + { + if(mode->bitdepth == 8) + { + for(i = 0; i < numpixels; i++, buffer += num_channels) + { + buffer[0] = in[i * 3 + 0]; + buffer[1] = in[i * 3 + 1]; + buffer[2] = in[i * 3 + 2]; + if(has_alpha) buffer[3] = mode->key_defined && buffer[0] == mode->key_r + && buffer[1]== mode->key_g && buffer[2] == mode->key_b ? 0 : 255; + } + } + else + { + for(i = 0; i < numpixels; i++, buffer += num_channels) + { + buffer[0] = in[i * 6 + 0]; + buffer[1] = in[i * 6 + 2]; + buffer[2] = in[i * 6 + 4]; + if(has_alpha) buffer[3] = mode->key_defined + && 256U * in[i * 6 + 0] + in[i * 6 + 1] == mode->key_r + && 256U * in[i * 6 + 2] + in[i * 6 + 3] == mode->key_g + && 256U * in[i * 6 + 4] + in[i * 6 + 5] == mode->key_b ? 0 : 255; + } + } + } + else if(mode->colortype == LCT_PALETTE) + { + unsigned index; + size_t j = 0; + for(i = 0; i < numpixels; i++, buffer += num_channels) + { + if(mode->bitdepth == 8) index = in[i]; + else index = readBitsFromReversedStream(&j, in, mode->bitdepth); + + if(index >= mode->palettesize) + { + /*This is an error according to the PNG spec, but fix_png can ignore it*/ + if(!fix_png) return (mode->bitdepth == 8 ? 46 : 47); /*index out of palette*/ + buffer[0] = buffer[1] = buffer[2] = 0; + if(has_alpha) buffer[3] = 255; + } + else + { + buffer[0] = mode->palette[index * 4 + 0]; + buffer[1] = mode->palette[index * 4 + 1]; + buffer[2] = mode->palette[index * 4 + 2]; + if(has_alpha) buffer[3] = mode->palette[index * 4 + 3]; + } + } + } + else if(mode->colortype == LCT_GREY_ALPHA) + { + if(mode->bitdepth == 8) + { + for(i = 0; i < numpixels; i++, buffer += num_channels) + { + buffer[0] = buffer[1] = buffer[2] = in[i * 2 + 0]; + if(has_alpha) buffer[3] = in[i * 2 + 1]; + } + } + else + { + for(i = 0; i < numpixels; i++, buffer += num_channels) + { + buffer[0] = buffer[1] = buffer[2] = in[i * 4 + 0]; + if(has_alpha) buffer[3] = in[i * 4 + 2]; + } + } + } + else if(mode->colortype == LCT_RGBA) + { + if(mode->bitdepth == 8) + { + for(i = 0; i < numpixels; i++, buffer += num_channels) + { + buffer[0] = in[i * 4 + 0]; + buffer[1] = in[i * 4 + 1]; + buffer[2] = in[i * 4 + 2]; + if(has_alpha) buffer[3] = in[i * 4 + 3]; + } + } + else + { + for(i = 0; i < numpixels; i++, buffer += num_channels) + { + buffer[0] = in[i * 8 + 0]; + buffer[1] = in[i * 8 + 2]; + buffer[2] = in[i * 8 + 4]; + if(has_alpha) buffer[3] = in[i * 8 + 6]; + } + } + } + + return 0; /*no error*/ +} + +/*Get RGBA16 color of pixel with index i (y * width + x) from the raw image with +given color type, but the given color type must be 16-bit itself.*/ +static unsigned getPixelColorRGBA16(unsigned short* r, unsigned short* g, unsigned short* b, unsigned short* a, + const unsigned char* in, size_t i, const LodePNGColorMode* mode) +{ + if(mode->bitdepth != 16) return 85; /*error: this function only supports 16-bit input*/ + + if(mode->colortype == LCT_GREY) + { + *r = *g = *b = 256 * in[i * 2 + 0] + in[i * 2 + 1]; + if(mode->key_defined && 256U * in[i * 2 + 0] + in[i * 2 + 1] == mode->key_r) *a = 0; + else *a = 65535; + } + else if(mode->colortype == LCT_RGB) + { + *r = 256 * in[i * 6 + 0] + in[i * 6 + 1]; + *g = 256 * in[i * 6 + 2] + in[i * 6 + 3]; + *b = 256 * in[i * 6 + 4] + in[i * 6 + 5]; + if(mode->key_defined && 256U * in[i * 6 + 0] + in[i * 6 + 1] == mode->key_r + && 256U * in[i * 6 + 2] + in[i * 6 + 3] == mode->key_g + && 256U * in[i * 6 + 4] + in[i * 6 + 5] == mode->key_b) *a = 0; + else *a = 65535; + } + else if(mode->colortype == LCT_GREY_ALPHA) + { + *r = *g = *b = 256 * in[i * 4 + 0] + in[i * 4 + 1]; + *a = 256 * in[i * 4 + 2] + in[i * 4 + 3]; + } + else if(mode->colortype == LCT_RGBA) + { + *r = 256 * in[i * 8 + 0] + in[i * 8 + 1]; + *g = 256 * in[i * 8 + 2] + in[i * 8 + 3]; + *b = 256 * in[i * 8 + 4] + in[i * 8 + 5]; + *a = 256 * in[i * 8 + 6] + in[i * 8 + 7]; + } + else return 85; /*error: this function only supports 16-bit input, not palettes*/ + + return 0; /*no error*/ +} + +/* +converts from any color type to 24-bit or 32-bit (later maybe more supported). return value = LodePNG error code +the out buffer must have (w * h * bpp + 7) / 8 bytes, where bpp is the bits per pixel of the output color type +(lodepng_get_bpp) for < 8 bpp images, there may _not_ be padding bits at the end of scanlines. +*/ +unsigned lodepng_convert(unsigned char* out, const unsigned char* in, + LodePNGColorMode* mode_out, const LodePNGColorMode* mode_in, + unsigned w, unsigned h, unsigned fix_png) +{ + unsigned error = 0; + size_t i; + ColorTree tree; + size_t numpixels = w * h; + + if(lodepng_color_mode_equal(mode_out, mode_in)) + { + size_t numbytes = lodepng_get_raw_size(w, h, mode_in); + for(i = 0; i < numbytes; i++) out[i] = in[i]; + return error; + } + + if(mode_out->colortype == LCT_PALETTE) + { + size_t palsize = 1 << mode_out->bitdepth; + if(mode_out->palettesize < palsize) palsize = mode_out->palettesize; + color_tree_init(&tree); + for(i = 0; i < palsize; i++) + { + unsigned char* p = &mode_out->palette[i * 4]; + color_tree_add(&tree, p[0], p[1], p[2], p[3], i); + } + } + + if(mode_in->bitdepth == 16 && mode_out->bitdepth == 16) + { + for(i = 0; i < numpixels; i++) + { + unsigned short r = 0, g = 0, b = 0, a = 0; + error = getPixelColorRGBA16(&r, &g, &b, &a, in, i, mode_in); + if(error) break; + error = rgba16ToPixel(out, i, mode_out, r, g, b, a); + if(error) break; + } + } + else if(mode_out->bitdepth == 8 && mode_out->colortype == LCT_RGBA) + { + error = getPixelColorsRGBA8(out, numpixels, 1, in, mode_in, fix_png); + } + else if(mode_out->bitdepth == 8 && mode_out->colortype == LCT_RGB) + { + error = getPixelColorsRGBA8(out, numpixels, 0, in, mode_in, fix_png); + } + else + { + unsigned char r = 0, g = 0, b = 0, a = 0; + for(i = 0; i < numpixels; i++) + { + error = getPixelColorRGBA8(&r, &g, &b, &a, in, i, mode_in, fix_png); + if(error) break; + error = rgba8ToPixel(out, i, mode_out, &tree, r, g, b, a); + if(error) break; + } + } + + if(mode_out->colortype == LCT_PALETTE) + { + color_tree_cleanup(&tree); + } + + return error; +} + +#ifdef LODEPNG_COMPILE_ENCODER + +typedef struct ColorProfile +{ + unsigned char sixteenbit; /*needs more than 8 bits per channel*/ + unsigned char sixteenbit_done; + + + unsigned char colored; /*not greyscale*/ + unsigned char colored_done; + + unsigned char key; /*a color key is required, or more*/ + unsigned short key_r; /*these values are always in 16-bit bitdepth in the profile*/ + unsigned short key_g; + unsigned short key_b; + unsigned char alpha; /*alpha channel, or alpha palette, required*/ + unsigned char alpha_done; + + unsigned numcolors; + ColorTree tree; /*for listing the counted colors, up to 256*/ + unsigned char* palette; /*size 1024. Remember up to the first 256 RGBA colors*/ + unsigned maxnumcolors; /*if more than that amount counted*/ + unsigned char numcolors_done; + + unsigned greybits; /*amount of bits required for greyscale (1, 2, 4, 8). Does not take 16 bit into account.*/ + unsigned char greybits_done; + +} ColorProfile; + +static void color_profile_init(ColorProfile* profile, const LodePNGColorMode* mode) +{ + profile->sixteenbit = 0; + profile->sixteenbit_done = mode->bitdepth == 16 ? 0 : 1; + + profile->colored = 0; + profile->colored_done = lodepng_is_greyscale_type(mode) ? 1 : 0; + + profile->key = 0; + profile->alpha = 0; + profile->alpha_done = lodepng_can_have_alpha(mode) ? 0 : 1; + + profile->numcolors = 0; + color_tree_init(&profile->tree); + profile->palette = (unsigned char*)lodepng_malloc(1024); + profile->maxnumcolors = 257; + if(lodepng_get_bpp(mode) <= 8) + { + int bpp = lodepng_get_bpp(mode); + profile->maxnumcolors = bpp == 1 ? 2 : (bpp == 2 ? 4 : (bpp == 4 ? 16 : 256)); + } + profile->numcolors_done = 0; + + profile->greybits = 1; + profile->greybits_done = lodepng_get_bpp(mode) == 1 ? 1 : 0; +} + +static void color_profile_cleanup(ColorProfile* profile) +{ + color_tree_cleanup(&profile->tree); + lodepng_free(profile->palette); +} + +/*function used for debug purposes with C++*/ +/*void printColorProfile(ColorProfile* p) +{ + std::cout << "sixteenbit: " << (int)p->sixteenbit << std::endl; + std::cout << "sixteenbit_done: " << (int)p->sixteenbit_done << std::endl; + std::cout << "colored: " << (int)p->colored << std::endl; + std::cout << "colored_done: " << (int)p->colored_done << std::endl; + std::cout << "key: " << (int)p->key << std::endl; + std::cout << "key_r: " << (int)p->key_r << std::endl; + std::cout << "key_g: " << (int)p->key_g << std::endl; + std::cout << "key_b: " << (int)p->key_b << std::endl; + std::cout << "alpha: " << (int)p->alpha << std::endl; + std::cout << "alpha_done: " << (int)p->alpha_done << std::endl; + std::cout << "numcolors: " << (int)p->numcolors << std::endl; + std::cout << "maxnumcolors: " << (int)p->maxnumcolors << std::endl; + std::cout << "numcolors_done: " << (int)p->numcolors_done << std::endl; + std::cout << "greybits: " << (int)p->greybits << std::endl; + std::cout << "greybits_done: " << (int)p->greybits_done << std::endl; +}*/ + +/*Returns how many bits needed to represent given value (max 8 bit)*/ +unsigned getValueRequiredBits(unsigned short value) +{ + if(value == 0 || value == 255) return 1; + /*The scaling of 2-bit and 4-bit values uses multiples of 85 and 17*/ + if(value % 17 == 0) return value % 85 == 0 ? 2 : 4; + return 8; +} + +/*profile must already have been inited with mode. +It's ok to set some parameters of profile to done already.*/ +static unsigned get_color_profile(ColorProfile* profile, + const unsigned char* in, + size_t numpixels /*must be full image size, for certain filesize based choices*/, + const LodePNGColorMode* mode, + unsigned fix_png) +{ + unsigned error = 0; + size_t i; + + if(mode->bitdepth == 16) + { + for(i = 0; i < numpixels; i++) + { + unsigned short r, g, b, a; + error = getPixelColorRGBA16(&r, &g, &b, &a, in, i, mode); + if(error) break; + + /*a color is considered good for 8-bit if the first byte and the second byte are equal, + (so if it's divisible through 257), NOT necessarily if the second byte is 0*/ + if(!profile->sixteenbit_done + && (((r & 255) != ((r >> 8) & 255)) + || ((g & 255) != ((g >> 8) & 255)) + || ((b & 255) != ((b >> 8) & 255)))) + { + profile->sixteenbit = 1; + profile->sixteenbit_done = 1; + profile->greybits_done = 1; /*greybits is not applicable anymore at 16-bit*/ + profile->numcolors_done = 1; /*counting colors no longer useful, palette doesn't support 16-bit*/ + } + + if(!profile->colored_done && (r != g || r != b)) + { + profile->colored = 1; + profile->colored_done = 1; + profile->greybits_done = 1; /*greybits is not applicable anymore*/ + } + + if(!profile->alpha_done && a != 65535) + { + /*only use color key if numpixels large enough to justify tRNS chunk size*/ + if(a == 0 && numpixels > 16 && !(profile->key && (r != profile->key_r || g != profile->key_g || b != profile->key_b))) + { + if(!profile->alpha && !profile->key) + { + profile->key = 1; + profile->key_r = r; + profile->key_g = g; + profile->key_b = b; + } + } + else + { + profile->alpha = 1; + profile->alpha_done = 1; + profile->greybits_done = 1; /*greybits is not applicable anymore*/ + } + } + + /* Color key cannot be used if an opaque pixel also has that RGB color. */ + if(!profile->alpha_done && a == 65535 && profile->key + && r == profile->key_r && g == profile->key_g && b == profile->key_b) + { + profile->alpha = 1; + profile->alpha_done = 1; + profile->greybits_done = 1; /*greybits is not applicable anymore*/ + } + + if(!profile->greybits_done) + { + /*assuming 8-bit r, this test does not care about 16-bit*/ + unsigned bits = getValueRequiredBits(r); + if(bits > profile->greybits) profile->greybits = bits; + if(profile->greybits >= 8) profile->greybits_done = 1; + } + + if(!profile->numcolors_done) + { + /*assuming 8-bit rgba, this test does not care about 16-bit*/ + if(!color_tree_has(&profile->tree, (unsigned char)r, (unsigned char)g, (unsigned char)b, (unsigned char)a)) + { + color_tree_add(&profile->tree, (unsigned char)r, (unsigned char)g, (unsigned char)b, (unsigned char)a, + profile->numcolors); + if(profile->numcolors < 256) + { + unsigned char* p = profile->palette; + unsigned i = profile->numcolors; + p[i * 4 + 0] = (unsigned char)r; + p[i * 4 + 1] = (unsigned char)g; + p[i * 4 + 2] = (unsigned char)b; + p[i * 4 + 3] = (unsigned char)a; + } + profile->numcolors++; + if(profile->numcolors >= profile->maxnumcolors) profile->numcolors_done = 1; + } + } + + if(profile->alpha_done && profile->numcolors_done + && profile->colored_done && profile->sixteenbit_done && profile->greybits_done) + { + break; + } + }; + } + else /* < 16-bit */ + { + for(i = 0; i < numpixels; i++) + { + unsigned char r = 0, g = 0, b = 0, a = 0; + error = getPixelColorRGBA8(&r, &g, &b, &a, in, i, mode, fix_png); + if(error) break; + + if(!profile->colored_done && (r != g || r != b)) + { + profile->colored = 1; + profile->colored_done = 1; + profile->greybits_done = 1; /*greybits is not applicable anymore*/ + } + + if(!profile->alpha_done && a != 255) + { + if(a == 0 && !(profile->key && (r != profile->key_r || g != profile->key_g || b != profile->key_b))) + { + if(!profile->key) + { + profile->key = 1; + profile->key_r = r; + profile->key_g = g; + profile->key_b = b; + } + } + else + { + profile->alpha = 1; + profile->alpha_done = 1; + profile->greybits_done = 1; /*greybits is not applicable anymore*/ + } + } + + /* Color key cannot be used if an opaque pixel also has that RGB color. */ + if(!profile->alpha_done && a == 255 && profile->key + && r == profile->key_r && g == profile->key_g && b == profile->key_b) + { + profile->alpha = 1; + profile->alpha_done = 1; + profile->greybits_done = 1; /*greybits is not applicable anymore*/ + } + + if(!profile->greybits_done) + { + unsigned bits = getValueRequiredBits(r); + if(bits > profile->greybits) profile->greybits = bits; + if(profile->greybits >= 8) profile->greybits_done = 1; + } + + if(!profile->numcolors_done) + { + if(!color_tree_has(&profile->tree, r, g, b, a)) + { + + color_tree_add(&profile->tree, r, g, b, a, profile->numcolors); + if(profile->numcolors < 256) + { + unsigned char* p = profile->palette; + unsigned i = profile->numcolors; + p[i * 4 + 0] = r; + p[i * 4 + 1] = g; + p[i * 4 + 2] = b; + p[i * 4 + 3] = a; + } + profile->numcolors++; + if(profile->numcolors >= profile->maxnumcolors) profile->numcolors_done = 1; + } + } + + if(profile->alpha_done && profile->numcolors_done && profile->colored_done && profile->greybits_done) + { + break; + } + }; + } + + /*make the profile's key always 16-bit for consistency*/ + if(mode->bitdepth < 16) + { + /*repeat each byte twice*/ + profile->key_r *= 257; + profile->key_g *= 257; + profile->key_b *= 257; + } + + return error; +} + +static void setColorKeyFrom16bit(LodePNGColorMode* mode_out, unsigned r, unsigned g, unsigned b, unsigned bitdepth) +{ + unsigned mask = (1 << bitdepth) - 1; + mode_out->key_defined = 1; + mode_out->key_r = r & mask; + mode_out->key_g = g & mask; + mode_out->key_b = b & mask; +} + +/*updates values of mode with a potentially smaller color model. mode_out should +contain the user chosen color model, but will be overwritten with the new chosen one.*/ +unsigned lodepng_auto_choose_color(LodePNGColorMode* mode_out, + const unsigned char* image, unsigned w, unsigned h, + const LodePNGColorMode* mode_in, + LodePNGAutoConvert auto_convert) +{ + ColorProfile profile; + unsigned error = 0; + int no_nibbles = auto_convert == LAC_AUTO_NO_NIBBLES || auto_convert == LAC_AUTO_NO_NIBBLES_NO_PALETTE; + int no_palette = auto_convert == LAC_AUTO_NO_PALETTE || auto_convert == LAC_AUTO_NO_NIBBLES_NO_PALETTE; + + if(auto_convert == LAC_ALPHA) + { + if(mode_out->colortype != LCT_RGBA && mode_out->colortype != LCT_GREY_ALPHA) return 0; + } + + color_profile_init(&profile, mode_in); + if(auto_convert == LAC_ALPHA) + { + profile.colored_done = 1; + profile.greybits_done = 1; + profile.numcolors_done = 1; + profile.sixteenbit_done = 1; + } + error = get_color_profile(&profile, image, w * h, mode_in, 0 /*fix_png*/); + if(!error && auto_convert == LAC_ALPHA) + { + if(!profile.alpha) + { + mode_out->colortype = (mode_out->colortype == LCT_RGBA ? LCT_RGB : LCT_GREY); + if(profile.key) setColorKeyFrom16bit(mode_out, profile.key_r, profile.key_g, profile.key_b, mode_out->bitdepth); + } + } + else if(!error && auto_convert != LAC_ALPHA) + { + mode_out->key_defined = 0; + + if(profile.sixteenbit) + { + mode_out->bitdepth = 16; + if(profile.alpha) + { + mode_out->colortype = profile.colored ? LCT_RGBA : LCT_GREY_ALPHA; + } + else + { + mode_out->colortype = profile.colored ? LCT_RGB : LCT_GREY; + if(profile.key) setColorKeyFrom16bit(mode_out, profile.key_r, profile.key_g, profile.key_b, mode_out->bitdepth); + } + } + else /*less than 16 bits per channel*/ + { + /*don't add palette overhead if image hasn't got a lot of pixels*/ + unsigned n = profile.numcolors; + int palette_ok = !no_palette && n <= 256 && (n * 2 < w * h); + unsigned palettebits = n <= 2 ? 1 : (n <= 4 ? 2 : (n <= 16 ? 4 : 8)); + int grey_ok = !profile.colored && !profile.alpha; /*grey without alpha, with potentially low bits*/ + if(palette_ok || grey_ok) + { + if(!palette_ok || (grey_ok && profile.greybits <= palettebits)) + { + unsigned grey = profile.key_r; + mode_out->colortype = LCT_GREY; + mode_out->bitdepth = profile.greybits; + if(profile.key) setColorKeyFrom16bit(mode_out, grey, grey, grey, mode_out->bitdepth); + } + else + { + /*fill in the palette*/ + unsigned i; + unsigned char* p = profile.palette; + /*remove potential earlier palette*/ + lodepng_palette_clear(mode_out); + for(i = 0; i < profile.numcolors; i++) + { + error = lodepng_palette_add(mode_out, p[i * 4 + 0], p[i * 4 + 1], p[i * 4 + 2], p[i * 4 + 3]); + if(error) break; + } + + mode_out->colortype = LCT_PALETTE; + mode_out->bitdepth = palettebits; + } + } + else /*8-bit per channel*/ + { + mode_out->bitdepth = 8; + if(profile.alpha) + { + mode_out->colortype = profile.colored ? LCT_RGBA : LCT_GREY_ALPHA; + } + else + { + mode_out->colortype = profile.colored ? LCT_RGB : LCT_GREY /*LCT_GREY normally won't occur, already done earlier*/; + if(profile.key) setColorKeyFrom16bit(mode_out, profile.key_r, profile.key_g, profile.key_b, mode_out->bitdepth); + } + } + } + } + + color_profile_cleanup(&profile); + + if(mode_out->colortype == LCT_PALETTE && mode_in->palettesize == mode_out->palettesize) + { + /*In this case keep the palette order of the input, so that the user can choose an optimal one*/ + size_t i; + for(i = 0; i < mode_in->palettesize * 4; i++) + { + mode_out->palette[i] = mode_in->palette[i]; + } + } + + if(no_nibbles && mode_out->bitdepth < 8) + { + /*palette can keep its small amount of colors, as long as no indices use it*/ + mode_out->bitdepth = 8; + } + + return error; +} + +#endif /* #ifdef LODEPNG_COMPILE_ENCODER */ + +/* +Paeth predicter, used by PNG filter type 4 +The parameters are of type short, but should come from unsigned chars, the shorts +are only needed to make the paeth calculation correct. +*/ +static unsigned char paethPredictor(short a, short b, short c) +{ + short pa = abs(b - c); + short pb = abs(a - c); + short pc = abs(a + b - c - c); + + if(pc < pa && pc < pb) return (unsigned char)c; + else if(pb < pa) return (unsigned char)b; + else return (unsigned char)a; +} + +/*shared values used by multiple Adam7 related functions*/ + +static const unsigned ADAM7_IX[7] = { 0, 4, 0, 2, 0, 1, 0 }; /*x start values*/ +static const unsigned ADAM7_IY[7] = { 0, 0, 4, 0, 2, 0, 1 }; /*y start values*/ +static const unsigned ADAM7_DX[7] = { 8, 8, 4, 4, 2, 2, 1 }; /*x delta values*/ +static const unsigned ADAM7_DY[7] = { 8, 8, 8, 4, 4, 2, 2 }; /*y delta values*/ + +/* +Outputs various dimensions and positions in the image related to the Adam7 reduced images. +passw: output containing the width of the 7 passes +passh: output containing the height of the 7 passes +filter_passstart: output containing the index of the start and end of each + reduced image with filter bytes +padded_passstart output containing the index of the start and end of each + reduced image when without filter bytes but with padded scanlines +passstart: output containing the index of the start and end of each reduced + image without padding between scanlines, but still padding between the images +w, h: width and height of non-interlaced image +bpp: bits per pixel +"padded" is only relevant if bpp is less than 8 and a scanline or image does not + end at a full byte +*/ +static void Adam7_getpassvalues(unsigned passw[7], unsigned passh[7], size_t filter_passstart[8], + size_t padded_passstart[8], size_t passstart[8], unsigned w, unsigned h, unsigned bpp) +{ + /*the passstart values have 8 values: the 8th one indicates the byte after the end of the 7th (= last) pass*/ + unsigned i; + + /*calculate width and height in pixels of each pass*/ + for(i = 0; i < 7; i++) + { + passw[i] = (w + ADAM7_DX[i] - ADAM7_IX[i] - 1) / ADAM7_DX[i]; + passh[i] = (h + ADAM7_DY[i] - ADAM7_IY[i] - 1) / ADAM7_DY[i]; + if(passw[i] == 0) passh[i] = 0; + if(passh[i] == 0) passw[i] = 0; + } + + filter_passstart[0] = padded_passstart[0] = passstart[0] = 0; + for(i = 0; i < 7; i++) + { + /*if passw[i] is 0, it's 0 bytes, not 1 (no filtertype-byte)*/ + filter_passstart[i + 1] = filter_passstart[i] + + ((passw[i] && passh[i]) ? passh[i] * (1 + (passw[i] * bpp + 7) / 8) : 0); + /*bits padded if needed to fill full byte at end of each scanline*/ + padded_passstart[i + 1] = padded_passstart[i] + passh[i] * ((passw[i] * bpp + 7) / 8); + /*only padded at end of reduced image*/ + passstart[i + 1] = passstart[i] + (passh[i] * passw[i] * bpp + 7) / 8; + } +} + +#ifdef LODEPNG_COMPILE_DECODER + +/* ////////////////////////////////////////////////////////////////////////// */ +/* / PNG Decoder / */ +/* ////////////////////////////////////////////////////////////////////////// */ + +/*read the information from the header and store it in the LodePNGInfo. return value is error*/ +unsigned lodepng_inspect(unsigned* w, unsigned* h, LodePNGState* state, + const unsigned char* in, size_t insize) +{ + LodePNGInfo* info = &state->info_png; + if(insize == 0 || in == 0) + { + CERROR_RETURN_ERROR(state->error, 48); /*error: the given data is empty*/ + } + if(insize < 29) + { + CERROR_RETURN_ERROR(state->error, 27); /*error: the data length is smaller than the length of a PNG header*/ + } + + /*when decoding a new PNG image, make sure all parameters created after previous decoding are reset*/ + lodepng_info_cleanup(info); + lodepng_info_init(info); + + if(in[0] != 137 || in[1] != 80 || in[2] != 78 || in[3] != 71 + || in[4] != 13 || in[5] != 10 || in[6] != 26 || in[7] != 10) + { + CERROR_RETURN_ERROR(state->error, 28); /*error: the first 8 bytes are not the correct PNG signature*/ + } + if(in[12] != 'I' || in[13] != 'H' || in[14] != 'D' || in[15] != 'R') + { + CERROR_RETURN_ERROR(state->error, 29); /*error: it doesn't start with a IHDR chunk!*/ + } + + /*read the values given in the header*/ + *w = lodepng_read32bitInt(&in[16]); + *h = lodepng_read32bitInt(&in[20]); + info->color.bitdepth = in[24]; + info->color.colortype = (LodePNGColorType)in[25]; + info->compression_method = in[26]; + info->filter_method = in[27]; + info->interlace_method = in[28]; + + if(!state->decoder.ignore_crc) + { + unsigned CRC = lodepng_read32bitInt(&in[29]); + unsigned checksum = lodepng_crc32(&in[12], 17); + if(CRC != checksum) + { + CERROR_RETURN_ERROR(state->error, 57); /*invalid CRC*/ + } + } + + /*error: only compression method 0 is allowed in the specification*/ + if(info->compression_method != 0) CERROR_RETURN_ERROR(state->error, 32); + /*error: only filter method 0 is allowed in the specification*/ + if(info->filter_method != 0) CERROR_RETURN_ERROR(state->error, 33); + /*error: only interlace methods 0 and 1 exist in the specification*/ + if(info->interlace_method > 1) CERROR_RETURN_ERROR(state->error, 34); + + state->error = checkColorValidity(info->color.colortype, info->color.bitdepth); + return state->error; +} + +static unsigned unfilterScanline(unsigned char* recon, const unsigned char* scanline, const unsigned char* precon, + size_t bytewidth, unsigned char filterType, size_t length) +{ + /* + For PNG filter method 0 + unfilter a PNG image scanline by scanline. when the pixels are smaller than 1 byte, + the filter works byte per byte (bytewidth = 1) + precon is the previous unfiltered scanline, recon the result, scanline the current one + the incoming scanlines do NOT include the filtertype byte, that one is given in the parameter filterType instead + recon and scanline MAY be the same memory address! precon must be disjoint. + */ + + size_t i; + switch(filterType) + { + case 0: + for(i = 0; i < length; i++) recon[i] = scanline[i]; + break; + case 1: + for(i = 0; i < bytewidth; i++) recon[i] = scanline[i]; + for(i = bytewidth; i < length; i++) recon[i] = scanline[i] + recon[i - bytewidth]; + break; + case 2: + if(precon) + { + for(i = 0; i < length; i++) recon[i] = scanline[i] + precon[i]; + } + else + { + for(i = 0; i < length; i++) recon[i] = scanline[i]; + } + break; + case 3: + if(precon) + { + for(i = 0; i < bytewidth; i++) recon[i] = scanline[i] + precon[i] / 2; + for(i = bytewidth; i < length; i++) recon[i] = scanline[i] + ((recon[i - bytewidth] + precon[i]) / 2); + } + else + { + for(i = 0; i < bytewidth; i++) recon[i] = scanline[i]; + for(i = bytewidth; i < length; i++) recon[i] = scanline[i] + recon[i - bytewidth] / 2; + } + break; + case 4: + if(precon) + { + for(i = 0; i < bytewidth; i++) + { + recon[i] = (scanline[i] + precon[i]); /*paethPredictor(0, precon[i], 0) is always precon[i]*/ + } + for(i = bytewidth; i < length; i++) + { + recon[i] = (scanline[i] + paethPredictor(recon[i - bytewidth], precon[i], precon[i - bytewidth])); + } + } + else + { + for(i = 0; i < bytewidth; i++) + { + recon[i] = scanline[i]; + } + for(i = bytewidth; i < length; i++) + { + /*paethPredictor(recon[i - bytewidth], 0, 0) is always recon[i - bytewidth]*/ + recon[i] = (scanline[i] + recon[i - bytewidth]); + } + } + break; + default: return 36; /*error: unexisting filter type given*/ + } + return 0; +} + +static unsigned unfilter(unsigned char* out, const unsigned char* in, unsigned w, unsigned h, unsigned bpp) +{ + /* + For PNG filter method 0 + this function unfilters a single image (e.g. without interlacing this is called once, with Adam7 seven times) + out must have enough bytes allocated already, in must have the scanlines + 1 filtertype byte per scanline + w and h are image dimensions or dimensions of reduced image, bpp is bits per pixel + in and out are allowed to be the same memory address (but aren't the same size since in has the extra filter bytes) + */ + + unsigned y; + unsigned char* prevline = 0; + + /*bytewidth is used for filtering, is 1 when bpp < 8, number of bytes per pixel otherwise*/ + size_t bytewidth = (bpp + 7) / 8; + size_t linebytes = (w * bpp + 7) / 8; + + for(y = 0; y < h; y++) + { + size_t outindex = linebytes * y; + size_t inindex = (1 + linebytes) * y; /*the extra filterbyte added to each row*/ + unsigned char filterType = in[inindex]; + + CERROR_TRY_RETURN(unfilterScanline(&out[outindex], &in[inindex + 1], prevline, bytewidth, filterType, linebytes)); + + prevline = &out[outindex]; + } + + return 0; +} + +/* +in: Adam7 interlaced image, with no padding bits between scanlines, but between + reduced images so that each reduced image starts at a byte. +out: the same pixels, but re-ordered so that they're now a non-interlaced image with size w*h +bpp: bits per pixel +out has the following size in bits: w * h * bpp. +in is possibly bigger due to padding bits between reduced images. +out must be big enough AND must be 0 everywhere if bpp < 8 in the current implementation +(because that's likely a little bit faster) +NOTE: comments about padding bits are only relevant if bpp < 8 +*/ +static void Adam7_deinterlace(unsigned char* out, const unsigned char* in, unsigned w, unsigned h, unsigned bpp) +{ + unsigned passw[7], passh[7]; + size_t filter_passstart[8], padded_passstart[8], passstart[8]; + unsigned i; + + Adam7_getpassvalues(passw, passh, filter_passstart, padded_passstart, passstart, w, h, bpp); + + if(bpp >= 8) + { + for(i = 0; i < 7; i++) + { + unsigned x, y, b; + size_t bytewidth = bpp / 8; + for(y = 0; y < passh[i]; y++) + for(x = 0; x < passw[i]; x++) + { + size_t pixelinstart = passstart[i] + (y * passw[i] + x) * bytewidth; + size_t pixeloutstart = ((ADAM7_IY[i] + y * ADAM7_DY[i]) * w + ADAM7_IX[i] + x * ADAM7_DX[i]) * bytewidth; + for(b = 0; b < bytewidth; b++) + { + out[pixeloutstart + b] = in[pixelinstart + b]; + } + } + } + } + else /*bpp < 8: Adam7 with pixels < 8 bit is a bit trickier: with bit pointers*/ + { + for(i = 0; i < 7; i++) + { + unsigned x, y, b; + unsigned ilinebits = bpp * passw[i]; + unsigned olinebits = bpp * w; + size_t obp, ibp; /*bit pointers (for out and in buffer)*/ + for(y = 0; y < passh[i]; y++) + for(x = 0; x < passw[i]; x++) + { + ibp = (8 * passstart[i]) + (y * ilinebits + x * bpp); + obp = (ADAM7_IY[i] + y * ADAM7_DY[i]) * olinebits + (ADAM7_IX[i] + x * ADAM7_DX[i]) * bpp; + for(b = 0; b < bpp; b++) + { + unsigned char bit = readBitFromReversedStream(&ibp, in); + /*note that this function assumes the out buffer is completely 0, use setBitOfReversedStream otherwise*/ + setBitOfReversedStream0(&obp, out, bit); + } + } + } + } +} + +static void removePaddingBits(unsigned char* out, const unsigned char* in, + size_t olinebits, size_t ilinebits, unsigned h) +{ + /* + After filtering there are still padding bits if scanlines have non multiple of 8 bit amounts. They need + to be removed (except at last scanline of (Adam7-reduced) image) before working with pure image buffers + for the Adam7 code, the color convert code and the output to the user. + in and out are allowed to be the same buffer, in may also be higher but still overlapping; in must + have >= ilinebits*h bits, out must have >= olinebits*h bits, olinebits must be <= ilinebits + also used to move bits after earlier such operations happened, e.g. in a sequence of reduced images from Adam7 + only useful if (ilinebits - olinebits) is a value in the range 1..7 + */ + unsigned y; + size_t diff = ilinebits - olinebits; + size_t ibp = 0, obp = 0; /*input and output bit pointers*/ + for(y = 0; y < h; y++) + { + size_t x; + for(x = 0; x < olinebits; x++) + { + unsigned char bit = readBitFromReversedStream(&ibp, in); + setBitOfReversedStream(&obp, out, bit); + } + ibp += diff; + } +} + +/*out must be buffer big enough to contain full image, and in must contain the full decompressed data from +the IDAT chunks (with filter index bytes and possible padding bits) +return value is error*/ +static unsigned postProcessScanlines(unsigned char* out, unsigned char* in, + unsigned w, unsigned h, const LodePNGInfo* info_png) +{ + /* + This function converts the filtered-padded-interlaced data into pure 2D image buffer with the PNG's colortype. + Steps: + *) if no Adam7: 1) unfilter 2) remove padding bits (= posible extra bits per scanline if bpp < 8) + *) if adam7: 1) 7x unfilter 2) 7x remove padding bits 3) Adam7_deinterlace + NOTE: the in buffer will be overwritten with intermediate data! + */ + unsigned bpp = lodepng_get_bpp(&info_png->color); + if(bpp == 0) return 31; /*error: invalid colortype*/ + + if(info_png->interlace_method == 0) + { + if(bpp < 8 && w * bpp != ((w * bpp + 7) / 8) * 8) + { + CERROR_TRY_RETURN(unfilter(in, in, w, h, bpp)); + removePaddingBits(out, in, w * bpp, ((w * bpp + 7) / 8) * 8, h); + } + /*we can immediatly filter into the out buffer, no other steps needed*/ + else CERROR_TRY_RETURN(unfilter(out, in, w, h, bpp)); + } + else /*interlace_method is 1 (Adam7)*/ + { + unsigned passw[7], passh[7]; size_t filter_passstart[8], padded_passstart[8], passstart[8]; + unsigned i; + + Adam7_getpassvalues(passw, passh, filter_passstart, padded_passstart, passstart, w, h, bpp); + + for(i = 0; i < 7; i++) + { + CERROR_TRY_RETURN(unfilter(&in[padded_passstart[i]], &in[filter_passstart[i]], passw[i], passh[i], bpp)); + /*TODO: possible efficiency improvement: if in this reduced image the bits fit nicely in 1 scanline, + move bytes instead of bits or move not at all*/ + if(bpp < 8) + { + /*remove padding bits in scanlines; after this there still may be padding + bits between the different reduced images: each reduced image still starts nicely at a byte*/ + removePaddingBits(&in[passstart[i]], &in[padded_passstart[i]], passw[i] * bpp, + ((passw[i] * bpp + 7) / 8) * 8, passh[i]); + } + } + + Adam7_deinterlace(out, in, w, h, bpp); + } + + return 0; +} + +static unsigned readChunk_PLTE(LodePNGColorMode* color, const unsigned char* data, size_t chunkLength) +{ + unsigned pos = 0, i; + if(color->palette) lodepng_free(color->palette); + color->palettesize = chunkLength / 3; + color->palette = (unsigned char*)lodepng_malloc(4 * color->palettesize); + if(!color->palette && color->palettesize) + { + color->palettesize = 0; + return 83; /*alloc fail*/ + } + if(color->palettesize > 256) return 38; /*error: palette too big*/ + + for(i = 0; i < color->palettesize; i++) + { + color->palette[4 * i + 0] = data[pos++]; /*R*/ + color->palette[4 * i + 1] = data[pos++]; /*G*/ + color->palette[4 * i + 2] = data[pos++]; /*B*/ + color->palette[4 * i + 3] = 255; /*alpha*/ + } + + return 0; /* OK */ +} + +static unsigned readChunk_tRNS(LodePNGColorMode* color, const unsigned char* data, size_t chunkLength) +{ + unsigned i; + if(color->colortype == LCT_PALETTE) + { + /*error: more alpha values given than there are palette entries*/ + if(chunkLength > color->palettesize) return 38; + + for(i = 0; i < chunkLength; i++) color->palette[4 * i + 3] = data[i]; + } + else if(color->colortype == LCT_GREY) + { + /*error: this chunk must be 2 bytes for greyscale image*/ + if(chunkLength != 2) return 30; + + color->key_defined = 1; + color->key_r = color->key_g = color->key_b = 256 * data[0] + data[1]; + } + else if(color->colortype == LCT_RGB) + { + /*error: this chunk must be 6 bytes for RGB image*/ + if(chunkLength != 6) return 41; + + color->key_defined = 1; + color->key_r = 256 * data[0] + data[1]; + color->key_g = 256 * data[2] + data[3]; + color->key_b = 256 * data[4] + data[5]; + } + else return 42; /*error: tRNS chunk not allowed for other color models*/ + + return 0; /* OK */ +} + + +#ifdef LODEPNG_COMPILE_ANCILLARY_CHUNKS +/*background color chunk (bKGD)*/ +static unsigned readChunk_bKGD(LodePNGInfo* info, const unsigned char* data, size_t chunkLength) +{ + if(info->color.colortype == LCT_PALETTE) + { + /*error: this chunk must be 1 byte for indexed color image*/ + if(chunkLength != 1) return 43; + + info->background_defined = 1; + info->background_r = info->background_g = info->background_b = data[0]; + } + else if(info->color.colortype == LCT_GREY || info->color.colortype == LCT_GREY_ALPHA) + { + /*error: this chunk must be 2 bytes for greyscale image*/ + if(chunkLength != 2) return 44; + + info->background_defined = 1; + info->background_r = info->background_g = info->background_b + = 256 * data[0] + data[1]; + } + else if(info->color.colortype == LCT_RGB || info->color.colortype == LCT_RGBA) + { + /*error: this chunk must be 6 bytes for greyscale image*/ + if(chunkLength != 6) return 45; + + info->background_defined = 1; + info->background_r = 256 * data[0] + data[1]; + info->background_g = 256 * data[2] + data[3]; + info->background_b = 256 * data[4] + data[5]; + } + + return 0; /* OK */ +} + +/*text chunk (tEXt)*/ +static unsigned readChunk_tEXt(LodePNGInfo* info, const unsigned char* data, size_t chunkLength) +{ + unsigned error = 0; + char *key = 0, *str = 0; + unsigned i; + + while(!error) /*not really a while loop, only used to break on error*/ + { + unsigned length, string2_begin; + + length = 0; + while(length < chunkLength && data[length] != 0) length++; + /*even though it's not allowed by the standard, no error is thrown if + there's no null termination char, if the text is empty*/ + if(length < 1 || length > 79) CERROR_BREAK(error, 89); /*keyword too short or long*/ + + key = (char*)lodepng_malloc(length + 1); + if(!key) CERROR_BREAK(error, 83); /*alloc fail*/ + + key[length] = 0; + for(i = 0; i < length; i++) key[i] = data[i]; + + string2_begin = length + 1; /*skip keyword null terminator*/ + + length = chunkLength < string2_begin ? 0 : chunkLength - string2_begin; + str = (char*)lodepng_malloc(length + 1); + if(!str) CERROR_BREAK(error, 83); /*alloc fail*/ + + str[length] = 0; + for(i = 0; i < length; i++) str[i] = data[string2_begin + i]; + + error = lodepng_add_text(info, key, str); + + break; + } + + lodepng_free(key); + lodepng_free(str); + + return error; +} + +/*compressed text chunk (zTXt)*/ +static unsigned readChunk_zTXt(LodePNGInfo* info, const LodePNGDecompressSettings* zlibsettings, + const unsigned char* data, size_t chunkLength) +{ + unsigned error = 0; + unsigned i; + + unsigned length, string2_begin; + char *key = 0; + ucvector decoded; + + ucvector_init(&decoded); + + while(!error) /*not really a while loop, only used to break on error*/ + { + for(length = 0; length < chunkLength && data[length] != 0; length++) ; + if(length + 2 >= chunkLength) CERROR_BREAK(error, 75); /*no null termination, corrupt?*/ + if(length < 1 || length > 79) CERROR_BREAK(error, 89); /*keyword too short or long*/ + + key = (char*)lodepng_malloc(length + 1); + if(!key) CERROR_BREAK(error, 83); /*alloc fail*/ + + key[length] = 0; + for(i = 0; i < length; i++) key[i] = data[i]; + + if(data[length + 1] != 0) CERROR_BREAK(error, 72); /*the 0 byte indicating compression must be 0*/ + + string2_begin = length + 2; + if(string2_begin > chunkLength) CERROR_BREAK(error, 75); /*no null termination, corrupt?*/ + + length = chunkLength - string2_begin; + /*will fail if zlib error, e.g. if length is too small*/ + error = zlib_decompress(&decoded.data, &decoded.size, + (unsigned char*)(&data[string2_begin]), + length, zlibsettings); + if(error) break; + ucvector_push_back(&decoded, 0); + + error = lodepng_add_text(info, key, (char*)decoded.data); + + break; + } + + lodepng_free(key); + ucvector_cleanup(&decoded); + + return error; +} + +/*international text chunk (iTXt)*/ +static unsigned readChunk_iTXt(LodePNGInfo* info, const LodePNGDecompressSettings* zlibsettings, + const unsigned char* data, size_t chunkLength) +{ + unsigned error = 0; + unsigned i; + + unsigned length, begin, compressed; + char *key = 0, *langtag = 0, *transkey = 0; + ucvector decoded; + ucvector_init(&decoded); + + while(!error) /*not really a while loop, only used to break on error*/ + { + /*Quick check if the chunk length isn't too small. Even without check + it'd still fail with other error checks below if it's too short. This just gives a different error code.*/ + if(chunkLength < 5) CERROR_BREAK(error, 30); /*iTXt chunk too short*/ + + /*read the key*/ + for(length = 0; length < chunkLength && data[length] != 0; length++) ; + if(length + 3 >= chunkLength) CERROR_BREAK(error, 75); /*no null termination char, corrupt?*/ + if(length < 1 || length > 79) CERROR_BREAK(error, 89); /*keyword too short or long*/ + + key = (char*)lodepng_malloc(length + 1); + if(!key) CERROR_BREAK(error, 83); /*alloc fail*/ + + key[length] = 0; + for(i = 0; i < length; i++) key[i] = data[i]; + + /*read the compression method*/ + compressed = data[length + 1]; + if(data[length + 2] != 0) CERROR_BREAK(error, 72); /*the 0 byte indicating compression must be 0*/ + + /*even though it's not allowed by the standard, no error is thrown if + there's no null termination char, if the text is empty for the next 3 texts*/ + + /*read the langtag*/ + begin = length + 3; + length = 0; + for(i = begin; i < chunkLength && data[i] != 0; i++) length++; + + langtag = (char*)lodepng_malloc(length + 1); + if(!langtag) CERROR_BREAK(error, 83); /*alloc fail*/ + + langtag[length] = 0; + for(i = 0; i < length; i++) langtag[i] = data[begin + i]; + + /*read the transkey*/ + begin += length + 1; + length = 0; + for(i = begin; i < chunkLength && data[i] != 0; i++) length++; + + transkey = (char*)lodepng_malloc(length + 1); + if(!transkey) CERROR_BREAK(error, 83); /*alloc fail*/ + + transkey[length] = 0; + for(i = 0; i < length; i++) transkey[i] = data[begin + i]; + + /*read the actual text*/ + begin += length + 1; + + length = chunkLength < begin ? 0 : chunkLength - begin; + + if(compressed) + { + /*will fail if zlib error, e.g. if length is too small*/ + error = zlib_decompress(&decoded.data, &decoded.size, + (unsigned char*)(&data[begin]), + length, zlibsettings); + if(error) break; + if(decoded.allocsize < decoded.size) decoded.allocsize = decoded.size; + ucvector_push_back(&decoded, 0); + } + else + { + if(!ucvector_resize(&decoded, length + 1)) CERROR_BREAK(error, 83 /*alloc fail*/); + + decoded.data[length] = 0; + for(i = 0; i < length; i++) decoded.data[i] = data[begin + i]; + } + + error = lodepng_add_itext(info, key, langtag, transkey, (char*)decoded.data); + + break; + } + + lodepng_free(key); + lodepng_free(langtag); + lodepng_free(transkey); + ucvector_cleanup(&decoded); + + return error; +} + +static unsigned readChunk_tIME(LodePNGInfo* info, const unsigned char* data, size_t chunkLength) +{ + if(chunkLength != 7) return 73; /*invalid tIME chunk size*/ + + info->time_defined = 1; + info->time.year = 256 * data[0] + data[+ 1]; + info->time.month = data[2]; + info->time.day = data[3]; + info->time.hour = data[4]; + info->time.minute = data[5]; + info->time.second = data[6]; + + return 0; /* OK */ +} + +static unsigned readChunk_pHYs(LodePNGInfo* info, const unsigned char* data, size_t chunkLength) +{ + if(chunkLength != 9) return 74; /*invalid pHYs chunk size*/ + + info->phys_defined = 1; + info->phys_x = 16777216 * data[0] + 65536 * data[1] + 256 * data[2] + data[3]; + info->phys_y = 16777216 * data[4] + 65536 * data[5] + 256 * data[6] + data[7]; + info->phys_unit = data[8]; + + return 0; /* OK */ +} +#endif /*LODEPNG_COMPILE_ANCILLARY_CHUNKS*/ + +/*read a PNG, the result will be in the same color type as the PNG (hence "generic")*/ +static void decodeGeneric(unsigned char** out, unsigned* w, unsigned* h, + LodePNGState* state, + const unsigned char* in, size_t insize) +{ + unsigned char IEND = 0; + const unsigned char* chunk; + size_t i; + ucvector idat; /*the data from idat chunks*/ + ucvector scanlines; + + /*for unknown chunk order*/ + unsigned unknown = 0; +#ifdef LODEPNG_COMPILE_ANCILLARY_CHUNKS + unsigned critical_pos = 1; /*1 = after IHDR, 2 = after PLTE, 3 = after IDAT*/ +#endif /*LODEPNG_COMPILE_ANCILLARY_CHUNKS*/ + + /*provide some proper output values if error will happen*/ + *out = 0; + + state->error = lodepng_inspect(w, h, state, in, insize); /*reads header and resets other parameters in state->info_png*/ + if(state->error) return; + + ucvector_init(&idat); + chunk = &in[33]; /*first byte of the first chunk after the header*/ + + /*loop through the chunks, ignoring unknown chunks and stopping at IEND chunk. + IDAT data is put at the start of the in buffer*/ + while(!IEND && !state->error) + { + unsigned chunkLength; + const unsigned char* data; /*the data in the chunk*/ + + /*error: size of the in buffer too small to contain next chunk*/ + if((size_t)((chunk - in) + 12) > insize || chunk < in) CERROR_BREAK(state->error, 30); + + /*length of the data of the chunk, excluding the length bytes, chunk type and CRC bytes*/ + chunkLength = lodepng_chunk_length(chunk); + /*error: chunk length larger than the max PNG chunk size*/ + if(chunkLength > 2147483647) CERROR_BREAK(state->error, 63); + + if((size_t)((chunk - in) + chunkLength + 12) > insize || (chunk + chunkLength + 12) < in) + { + CERROR_BREAK(state->error, 64); /*error: size of the in buffer too small to contain next chunk*/ + } + + data = lodepng_chunk_data_const(chunk); + + /*IDAT chunk, containing compressed image data*/ + if(lodepng_chunk_type_equals(chunk, "IDAT")) + { + size_t oldsize = idat.size; + if(!ucvector_resize(&idat, oldsize + chunkLength)) CERROR_BREAK(state->error, 83 /*alloc fail*/); + for(i = 0; i < chunkLength; i++) idat.data[oldsize + i] = data[i]; +#ifdef LODEPNG_COMPILE_ANCILLARY_CHUNKS + critical_pos = 3; +#endif /*LODEPNG_COMPILE_ANCILLARY_CHUNKS*/ + } + /*IEND chunk*/ + else if(lodepng_chunk_type_equals(chunk, "IEND")) + { + IEND = 1; + } + /*palette chunk (PLTE)*/ + else if(lodepng_chunk_type_equals(chunk, "PLTE")) + { + state->error = readChunk_PLTE(&state->info_png.color, data, chunkLength); + if(state->error) break; +#ifdef LODEPNG_COMPILE_ANCILLARY_CHUNKS + critical_pos = 2; +#endif /*LODEPNG_COMPILE_ANCILLARY_CHUNKS*/ + } + /*palette transparency chunk (tRNS)*/ + else if(lodepng_chunk_type_equals(chunk, "tRNS")) + { + state->error = readChunk_tRNS(&state->info_png.color, data, chunkLength); + if(state->error) break; + } +#ifdef LODEPNG_COMPILE_ANCILLARY_CHUNKS + /*background color chunk (bKGD)*/ + else if(lodepng_chunk_type_equals(chunk, "bKGD")) + { + state->error = readChunk_bKGD(&state->info_png, data, chunkLength); + if(state->error) break; + } + /*text chunk (tEXt)*/ + else if(lodepng_chunk_type_equals(chunk, "tEXt")) + { + if(state->decoder.read_text_chunks) + { + state->error = readChunk_tEXt(&state->info_png, data, chunkLength); + if(state->error) break; + } + } + /*compressed text chunk (zTXt)*/ + else if(lodepng_chunk_type_equals(chunk, "zTXt")) + { + if(state->decoder.read_text_chunks) + { + state->error = readChunk_zTXt(&state->info_png, &state->decoder.zlibsettings, data, chunkLength); + if(state->error) break; + } + } + /*international text chunk (iTXt)*/ + else if(lodepng_chunk_type_equals(chunk, "iTXt")) + { + if(state->decoder.read_text_chunks) + { + state->error = readChunk_iTXt(&state->info_png, &state->decoder.zlibsettings, data, chunkLength); + if(state->error) break; + } + } + else if(lodepng_chunk_type_equals(chunk, "tIME")) + { + state->error = readChunk_tIME(&state->info_png, data, chunkLength); + if(state->error) break; + } + else if(lodepng_chunk_type_equals(chunk, "pHYs")) + { + state->error = readChunk_pHYs(&state->info_png, data, chunkLength); + if(state->error) break; + } +#endif /*LODEPNG_COMPILE_ANCILLARY_CHUNKS*/ + else /*it's not an implemented chunk type, so ignore it: skip over the data*/ + { + /*error: unknown critical chunk (5th bit of first byte of chunk type is 0)*/ + if(!lodepng_chunk_ancillary(chunk)) CERROR_BREAK(state->error, 69); + + unknown = 1; +#ifdef LODEPNG_COMPILE_ANCILLARY_CHUNKS + if(state->decoder.remember_unknown_chunks) + { + state->error = lodepng_chunk_append(&state->info_png.unknown_chunks_data[critical_pos - 1], + &state->info_png.unknown_chunks_size[critical_pos - 1], chunk); + if(state->error) break; + } +#endif /*LODEPNG_COMPILE_ANCILLARY_CHUNKS*/ + } + + if(!state->decoder.ignore_crc && !unknown) /*check CRC if wanted, only on known chunk types*/ + { + if(lodepng_chunk_check_crc(chunk)) CERROR_BREAK(state->error, 57); /*invalid CRC*/ + } + + if(!IEND) chunk = lodepng_chunk_next_const(chunk); + } + + ucvector_init(&scanlines); + if(!state->error) + { + /*maximum final image length is already reserved in the vector's length - this is not really necessary*/ + if(!ucvector_resize(&scanlines, lodepng_get_raw_size(*w, *h, &state->info_png.color) + *h)) + { + state->error = 83; /*alloc fail*/ + } + } + if(!state->error) + { + /*decompress with the Zlib decompressor*/ + state->error = zlib_decompress(&scanlines.data, &scanlines.size, idat.data, + idat.size, &state->decoder.zlibsettings); + } + ucvector_cleanup(&idat); + + if(!state->error) + { + ucvector outv; + ucvector_init(&outv); + if(!ucvector_resizev(&outv, + lodepng_get_raw_size(*w, *h, &state->info_png.color), 0)) state->error = 83; /*alloc fail*/ + if(!state->error) state->error = postProcessScanlines(outv.data, scanlines.data, *w, *h, &state->info_png); + *out = outv.data; + } + ucvector_cleanup(&scanlines); +} + +unsigned lodepng_decode(unsigned char** out, unsigned* w, unsigned* h, + LodePNGState* state, + const unsigned char* in, size_t insize) +{ + *out = 0; + decodeGeneric(out, w, h, state, in, insize); + if(state->error) return state->error; + if(!state->decoder.color_convert || lodepng_color_mode_equal(&state->info_raw, &state->info_png.color)) + { + /*same color type, no copying or converting of data needed*/ + /*store the info_png color settings on the info_raw so that the info_raw still reflects what colortype + the raw image has to the end user*/ + if(!state->decoder.color_convert) + { + state->error = lodepng_color_mode_copy(&state->info_raw, &state->info_png.color); + if(state->error) return state->error; + } + } + else + { + /*color conversion needed; sort of copy of the data*/ + unsigned char* data = *out; + size_t outsize; + + /*TODO: check if this works according to the statement in the documentation: "The converter can convert + from greyscale input color type, to 8-bit greyscale or greyscale with alpha"*/ + if(!(state->info_raw.colortype == LCT_RGB || state->info_raw.colortype == LCT_RGBA) + && !(state->info_raw.bitdepth == 8)) + { + return 56; /*unsupported color mode conversion*/ + } + + outsize = lodepng_get_raw_size(*w, *h, &state->info_raw); + *out = (unsigned char*)lodepng_malloc(outsize); + if(!(*out)) + { + state->error = 83; /*alloc fail*/ + } + else state->error = lodepng_convert(*out, data, &state->info_raw, &state->info_png.color, *w, *h, state->decoder.fix_png); + lodepng_free(data); + } + return state->error; +} + +unsigned lodepng_decode_memory(unsigned char** out, unsigned* w, unsigned* h, const unsigned char* in, + size_t insize, LodePNGColorType colortype, unsigned bitdepth) +{ + unsigned error; + LodePNGState state; + lodepng_state_init(&state); + state.info_raw.colortype = colortype; + state.info_raw.bitdepth = bitdepth; + error = lodepng_decode(out, w, h, &state, in, insize); + lodepng_state_cleanup(&state); + return error; +} + +unsigned lodepng_decode32(unsigned char** out, unsigned* w, unsigned* h, const unsigned char* in, size_t insize) +{ + return lodepng_decode_memory(out, w, h, in, insize, LCT_RGBA, 8); +} + +unsigned lodepng_decode24(unsigned char** out, unsigned* w, unsigned* h, const unsigned char* in, size_t insize) +{ + return lodepng_decode_memory(out, w, h, in, insize, LCT_RGB, 8); +} + +#ifdef LODEPNG_COMPILE_DISK +unsigned lodepng_decode_file(unsigned char** out, unsigned* w, unsigned* h, const char* filename, + LodePNGColorType colortype, unsigned bitdepth) +{ + unsigned char* buffer; + size_t buffersize; + unsigned error; + error = lodepng_load_file(&buffer, &buffersize, filename); + if(!error) error = lodepng_decode_memory(out, w, h, buffer, buffersize, colortype, bitdepth); + lodepng_free(buffer); + return error; +} + +unsigned lodepng_decode32_file(unsigned char** out, unsigned* w, unsigned* h, const char* filename) +{ + return lodepng_decode_file(out, w, h, filename, LCT_RGBA, 8); +} + +unsigned lodepng_decode24_file(unsigned char** out, unsigned* w, unsigned* h, const char* filename) +{ + return lodepng_decode_file(out, w, h, filename, LCT_RGB, 8); +} +#endif /*LODEPNG_COMPILE_DISK*/ + +void lodepng_decoder_settings_init(LodePNGDecoderSettings* settings) +{ + settings->color_convert = 1; +#ifdef LODEPNG_COMPILE_ANCILLARY_CHUNKS + settings->read_text_chunks = 1; + settings->remember_unknown_chunks = 0; +#endif /*LODEPNG_COMPILE_ANCILLARY_CHUNKS*/ + settings->ignore_crc = 0; + settings->fix_png = 0; + lodepng_decompress_settings_init(&settings->zlibsettings); +} + +#endif /*LODEPNG_COMPILE_DECODER*/ + +#if defined(LODEPNG_COMPILE_DECODER) || defined(LODEPNG_COMPILE_ENCODER) + +void lodepng_state_init(LodePNGState* state) +{ +#ifdef LODEPNG_COMPILE_DECODER + lodepng_decoder_settings_init(&state->decoder); +#endif /*LODEPNG_COMPILE_DECODER*/ +#ifdef LODEPNG_COMPILE_ENCODER + lodepng_encoder_settings_init(&state->encoder); +#endif /*LODEPNG_COMPILE_ENCODER*/ + lodepng_color_mode_init(&state->info_raw); + lodepng_info_init(&state->info_png); + state->error = 1; +} + +void lodepng_state_cleanup(LodePNGState* state) +{ + lodepng_color_mode_cleanup(&state->info_raw); + lodepng_info_cleanup(&state->info_png); +} + +void lodepng_state_copy(LodePNGState* dest, const LodePNGState* source) +{ + lodepng_state_cleanup(dest); + *dest = *source; + lodepng_color_mode_init(&dest->info_raw); + lodepng_info_init(&dest->info_png); + dest->error = lodepng_color_mode_copy(&dest->info_raw, &source->info_raw); if(dest->error) return; + dest->error = lodepng_info_copy(&dest->info_png, &source->info_png); if(dest->error) return; +} + +#endif /* defined(LODEPNG_COMPILE_DECODER) || defined(LODEPNG_COMPILE_ENCODER) */ + +#ifdef LODEPNG_COMPILE_ENCODER + +/* ////////////////////////////////////////////////////////////////////////// */ +/* / PNG Encoder / */ +/* ////////////////////////////////////////////////////////////////////////// */ + +/*chunkName must be string of 4 characters*/ +static unsigned addChunk(ucvector* out, const char* chunkName, const unsigned char* data, size_t length) +{ + CERROR_TRY_RETURN(lodepng_chunk_create(&out->data, &out->size, (unsigned)length, chunkName, data)); + out->allocsize = out->size; /*fix the allocsize again*/ + return 0; +} + +static void writeSignature(ucvector* out) +{ + /*8 bytes PNG signature, aka the magic bytes*/ + ucvector_push_back(out, 137); + ucvector_push_back(out, 80); + ucvector_push_back(out, 78); + ucvector_push_back(out, 71); + ucvector_push_back(out, 13); + ucvector_push_back(out, 10); + ucvector_push_back(out, 26); + ucvector_push_back(out, 10); +} + +static unsigned addChunk_IHDR(ucvector* out, unsigned w, unsigned h, + LodePNGColorType colortype, unsigned bitdepth, unsigned interlace_method) +{ + unsigned error = 0; + ucvector header; + ucvector_init(&header); + + lodepng_add32bitInt(&header, w); /*width*/ + lodepng_add32bitInt(&header, h); /*height*/ + ucvector_push_back(&header, (unsigned char)bitdepth); /*bit depth*/ + ucvector_push_back(&header, (unsigned char)colortype); /*color type*/ + ucvector_push_back(&header, 0); /*compression method*/ + ucvector_push_back(&header, 0); /*filter method*/ + ucvector_push_back(&header, interlace_method); /*interlace method*/ + + error = addChunk(out, "IHDR", header.data, header.size); + ucvector_cleanup(&header); + + return error; +} + +static unsigned addChunk_PLTE(ucvector* out, const LodePNGColorMode* info) +{ + unsigned error = 0; + size_t i; + ucvector PLTE; + ucvector_init(&PLTE); + for(i = 0; i < info->palettesize * 4; i++) + { + /*add all channels except alpha channel*/ + if(i % 4 != 3) ucvector_push_back(&PLTE, info->palette[i]); + } + error = addChunk(out, "PLTE", PLTE.data, PLTE.size); + ucvector_cleanup(&PLTE); + + return error; +} + +static unsigned addChunk_tRNS(ucvector* out, const LodePNGColorMode* info) +{ + unsigned error = 0; + size_t i; + ucvector tRNS; + ucvector_init(&tRNS); + if(info->colortype == LCT_PALETTE) + { + size_t amount = info->palettesize; + /*the tail of palette values that all have 255 as alpha, does not have to be encoded*/ + for(i = info->palettesize; i > 0; i--) + { + if(info->palette[4 * (i - 1) + 3] == 255) amount--; + else break; + } + /*add only alpha channel*/ + for(i = 0; i < amount; i++) ucvector_push_back(&tRNS, info->palette[4 * i + 3]); + } + else if(info->colortype == LCT_GREY) + { + if(info->key_defined) + { + ucvector_push_back(&tRNS, (unsigned char)(info->key_r / 256)); + ucvector_push_back(&tRNS, (unsigned char)(info->key_r % 256)); + } + } + else if(info->colortype == LCT_RGB) + { + if(info->key_defined) + { + ucvector_push_back(&tRNS, (unsigned char)(info->key_r / 256)); + ucvector_push_back(&tRNS, (unsigned char)(info->key_r % 256)); + ucvector_push_back(&tRNS, (unsigned char)(info->key_g / 256)); + ucvector_push_back(&tRNS, (unsigned char)(info->key_g % 256)); + ucvector_push_back(&tRNS, (unsigned char)(info->key_b / 256)); + ucvector_push_back(&tRNS, (unsigned char)(info->key_b % 256)); + } + } + + error = addChunk(out, "tRNS", tRNS.data, tRNS.size); + ucvector_cleanup(&tRNS); + + return error; +} + +static unsigned addChunk_IDAT(ucvector* out, const unsigned char* data, size_t datasize, + LodePNGCompressSettings* zlibsettings) +{ + ucvector zlibdata; + unsigned error = 0; + + /*compress with the Zlib compressor*/ + ucvector_init(&zlibdata); + error = zlib_compress(&zlibdata.data, &zlibdata.size, data, datasize, zlibsettings); + if(!error) error = addChunk(out, "IDAT", zlibdata.data, zlibdata.size); + ucvector_cleanup(&zlibdata); + + return error; +} + +static unsigned addChunk_IEND(ucvector* out) +{ + unsigned error = 0; + error = addChunk(out, "IEND", 0, 0); + return error; +} + +#ifdef LODEPNG_COMPILE_ANCILLARY_CHUNKS + +static unsigned addChunk_tEXt(ucvector* out, const char* keyword, const char* textstring) +{ + unsigned error = 0; + size_t i; + ucvector text; + ucvector_init(&text); + for(i = 0; keyword[i] != 0; i++) ucvector_push_back(&text, (unsigned char)keyword[i]); + if(i < 1 || i > 79) return 89; /*error: invalid keyword size*/ + ucvector_push_back(&text, 0); /*0 termination char*/ + for(i = 0; textstring[i] != 0; i++) ucvector_push_back(&text, (unsigned char)textstring[i]); + error = addChunk(out, "tEXt", text.data, text.size); + ucvector_cleanup(&text); + + return error; +} + +static unsigned addChunk_zTXt(ucvector* out, const char* keyword, const char* textstring, + LodePNGCompressSettings* zlibsettings) +{ + unsigned error = 0; + ucvector data, compressed; + size_t i, textsize = strlen(textstring); + + ucvector_init(&data); + ucvector_init(&compressed); + for(i = 0; keyword[i] != 0; i++) ucvector_push_back(&data, (unsigned char)keyword[i]); + if(i < 1 || i > 79) return 89; /*error: invalid keyword size*/ + ucvector_push_back(&data, 0); /*0 termination char*/ + ucvector_push_back(&data, 0); /*compression method: 0*/ + + error = zlib_compress(&compressed.data, &compressed.size, + (unsigned char*)textstring, textsize, zlibsettings); + if(!error) + { + for(i = 0; i < compressed.size; i++) ucvector_push_back(&data, compressed.data[i]); + error = addChunk(out, "zTXt", data.data, data.size); + } + + ucvector_cleanup(&compressed); + ucvector_cleanup(&data); + return error; +} + +static unsigned addChunk_iTXt(ucvector* out, unsigned compressed, const char* keyword, const char* langtag, + const char* transkey, const char* textstring, LodePNGCompressSettings* zlibsettings) +{ + unsigned error = 0; + ucvector data; + size_t i, textsize = strlen(textstring); + + ucvector_init(&data); + + for(i = 0; keyword[i] != 0; i++) ucvector_push_back(&data, (unsigned char)keyword[i]); + if(i < 1 || i > 79) return 89; /*error: invalid keyword size*/ + ucvector_push_back(&data, 0); /*null termination char*/ + ucvector_push_back(&data, compressed ? 1 : 0); /*compression flag*/ + ucvector_push_back(&data, 0); /*compression method*/ + for(i = 0; langtag[i] != 0; i++) ucvector_push_back(&data, (unsigned char)langtag[i]); + ucvector_push_back(&data, 0); /*null termination char*/ + for(i = 0; transkey[i] != 0; i++) ucvector_push_back(&data, (unsigned char)transkey[i]); + ucvector_push_back(&data, 0); /*null termination char*/ + + if(compressed) + { + ucvector compressed_data; + ucvector_init(&compressed_data); + error = zlib_compress(&compressed_data.data, &compressed_data.size, + (unsigned char*)textstring, textsize, zlibsettings); + if(!error) + { + for(i = 0; i < compressed_data.size; i++) ucvector_push_back(&data, compressed_data.data[i]); + } + ucvector_cleanup(&compressed_data); + } + else /*not compressed*/ + { + for(i = 0; textstring[i] != 0; i++) ucvector_push_back(&data, (unsigned char)textstring[i]); + } + + if(!error) error = addChunk(out, "iTXt", data.data, data.size); + ucvector_cleanup(&data); + return error; +} + +static unsigned addChunk_bKGD(ucvector* out, const LodePNGInfo* info) +{ + unsigned error = 0; + ucvector bKGD; + ucvector_init(&bKGD); + if(info->color.colortype == LCT_GREY || info->color.colortype == LCT_GREY_ALPHA) + { + ucvector_push_back(&bKGD, (unsigned char)(info->background_r / 256)); + ucvector_push_back(&bKGD, (unsigned char)(info->background_r % 256)); + } + else if(info->color.colortype == LCT_RGB || info->color.colortype == LCT_RGBA) + { + ucvector_push_back(&bKGD, (unsigned char)(info->background_r / 256)); + ucvector_push_back(&bKGD, (unsigned char)(info->background_r % 256)); + ucvector_push_back(&bKGD, (unsigned char)(info->background_g / 256)); + ucvector_push_back(&bKGD, (unsigned char)(info->background_g % 256)); + ucvector_push_back(&bKGD, (unsigned char)(info->background_b / 256)); + ucvector_push_back(&bKGD, (unsigned char)(info->background_b % 256)); + } + else if(info->color.colortype == LCT_PALETTE) + { + ucvector_push_back(&bKGD, (unsigned char)(info->background_r % 256)); /*palette index*/ + } + + error = addChunk(out, "bKGD", bKGD.data, bKGD.size); + ucvector_cleanup(&bKGD); + + return error; +} + +static unsigned addChunk_tIME(ucvector* out, const LodePNGTime* time) +{ + unsigned error = 0; + unsigned char* data = (unsigned char*)lodepng_malloc(7); + if(!data) return 83; /*alloc fail*/ + data[0] = (unsigned char)(time->year / 256); + data[1] = (unsigned char)(time->year % 256); + data[2] = time->month; + data[3] = time->day; + data[4] = time->hour; + data[5] = time->minute; + data[6] = time->second; + error = addChunk(out, "tIME", data, 7); + lodepng_free(data); + return error; +} + +static unsigned addChunk_pHYs(ucvector* out, const LodePNGInfo* info) +{ + unsigned error = 0; + ucvector data; + ucvector_init(&data); + + lodepng_add32bitInt(&data, info->phys_x); + lodepng_add32bitInt(&data, info->phys_y); + ucvector_push_back(&data, info->phys_unit); + + error = addChunk(out, "pHYs", data.data, data.size); + ucvector_cleanup(&data); + + return error; +} + +#endif /*LODEPNG_COMPILE_ANCILLARY_CHUNKS*/ + +static void filterScanline(unsigned char* out, const unsigned char* scanline, const unsigned char* prevline, + size_t length, size_t bytewidth, unsigned char filterType) +{ + size_t i; + switch(filterType) + { + case 0: /*None*/ + for(i = 0; i < length; i++) out[i] = scanline[i]; + break; + case 1: /*Sub*/ + if(prevline) + { + for(i = 0; i < bytewidth; i++) out[i] = scanline[i]; + for(i = bytewidth; i < length; i++) out[i] = scanline[i] - scanline[i - bytewidth]; + } + else + { + for(i = 0; i < bytewidth; i++) out[i] = scanline[i]; + for(i = bytewidth; i < length; i++) out[i] = scanline[i] - scanline[i - bytewidth]; + } + break; + case 2: /*Up*/ + if(prevline) + { + for(i = 0; i < length; i++) out[i] = scanline[i] - prevline[i]; + } + else + { + for(i = 0; i < length; i++) out[i] = scanline[i]; + } + break; + case 3: /*Average*/ + if(prevline) + { + for(i = 0; i < bytewidth; i++) out[i] = scanline[i] - prevline[i] / 2; + for(i = bytewidth; i < length; i++) out[i] = scanline[i] - ((scanline[i - bytewidth] + prevline[i]) / 2); + } + else + { + for(i = 0; i < bytewidth; i++) out[i] = scanline[i]; + for(i = bytewidth; i < length; i++) out[i] = scanline[i] - scanline[i - bytewidth] / 2; + } + break; + case 4: /*Paeth*/ + if(prevline) + { + /*paethPredictor(0, prevline[i], 0) is always prevline[i]*/ + for(i = 0; i < bytewidth; i++) out[i] = (scanline[i] - prevline[i]); + for(i = bytewidth; i < length; i++) + { + out[i] = (scanline[i] - paethPredictor(scanline[i - bytewidth], prevline[i], prevline[i - bytewidth])); + } + } + else + { + for(i = 0; i < bytewidth; i++) out[i] = scanline[i]; + /*paethPredictor(scanline[i - bytewidth], 0, 0) is always scanline[i - bytewidth]*/ + for(i = bytewidth; i < length; i++) out[i] = (scanline[i] - scanline[i - bytewidth]); + } + break; + default: return; /*unexisting filter type given*/ + } +} + +/* log2 approximation. A slight bit faster than std::log. */ +static float flog2(float f) +{ + float result = 0; + while(f > 32) { result += 4; f /= 16; } + while(f > 2) { result++; f /= 2; } + return result + 1.442695f * (f * f * f / 3 - 3 * f * f / 2 + 3 * f - 1.83333f); +} + +static unsigned filter(unsigned char* out, const unsigned char* in, unsigned w, unsigned h, + const LodePNGColorMode* info, const LodePNGEncoderSettings* settings) +{ + /* + For PNG filter method 0 + out must be a buffer with as size: h + (w * h * bpp + 7) / 8, because there are + the scanlines with 1 extra byte per scanline + */ + + unsigned bpp = lodepng_get_bpp(info); + /*the width of a scanline in bytes, not including the filter type*/ + size_t linebytes = (w * bpp + 7) / 8; + /*bytewidth is used for filtering, is 1 when bpp < 8, number of bytes per pixel otherwise*/ + size_t bytewidth = (bpp + 7) / 8; + const unsigned char* prevline = 0; + unsigned x, y; + unsigned error = 0; + LodePNGFilterStrategy strategy = settings->filter_strategy; + + /* + There is a heuristic called the minimum sum of absolute differences heuristic, suggested by the PNG standard: + * If the image type is Palette, or the bit depth is smaller than 8, then do not filter the image (i.e. + use fixed filtering, with the filter None). + * (The other case) If the image type is Grayscale or RGB (with or without Alpha), and the bit depth is + not smaller than 8, then use adaptive filtering heuristic as follows: independently for each row, apply + all five filters and select the filter that produces the smallest sum of absolute values per row. + This heuristic is used if filter strategy is LFS_MINSUM and filter_palette_zero is true. + + If filter_palette_zero is true and filter_strategy is not LFS_MINSUM, the above heuristic is followed, + but for "the other case", whatever strategy filter_strategy is set to instead of the minimum sum + heuristic is used. + */ + if(settings->filter_palette_zero && + (info->colortype == LCT_PALETTE || info->bitdepth < 8)) strategy = LFS_ZERO; + + if(bpp == 0) return 31; /*error: invalid color type*/ + + if(strategy == LFS_ZERO) + { + for(y = 0; y < h; y++) + { + size_t outindex = (1 + linebytes) * y; /*the extra filterbyte added to each row*/ + size_t inindex = linebytes * y; + out[outindex] = 0; /*filter type byte*/ + filterScanline(&out[outindex + 1], &in[inindex], prevline, linebytes, bytewidth, 0); + prevline = &in[inindex]; + } + } + else if(strategy == LFS_MINSUM) + { + /*adaptive filtering*/ + size_t sum[5]; + ucvector attempt[5]; /*five filtering attempts, one for each filter type*/ + size_t smallest = 0; + unsigned type, bestType = 0; + + for(type = 0; type < 5; type++) + { + ucvector_init(&attempt[type]); + if(!ucvector_resize(&attempt[type], linebytes)) return 83; /*alloc fail*/ + } + + if(!error) + { + for(y = 0; y < h; y++) + { + /*try the 5 filter types*/ + for(type = 0; type < 5; type++) + { + filterScanline(attempt[type].data, &in[y * linebytes], prevline, linebytes, bytewidth, type); + + /*calculate the sum of the result*/ + sum[type] = 0; + if(type == 0) + { + for(x = 0; x < linebytes; x++) sum[type] += (unsigned char)(attempt[type].data[x]); + } + else + { + for(x = 0; x < linebytes; x++) + { + /*For differences, each byte should be treated as signed, values above 127 are negative + (converted to signed char). Filtertype 0 isn't a difference though, so use unsigned there. + This means filtertype 0 is almost never chosen, but that is justified.*/ + signed char s = (signed char)(attempt[type].data[x]); + sum[type] += s < 0 ? -s : s; + } + } + + /*check if this is smallest sum (or if type == 0 it's the first case so always store the values)*/ + if(type == 0 || sum[type] < smallest) + { + bestType = type; + smallest = sum[type]; + } + } + + prevline = &in[y * linebytes]; + + /*now fill the out values*/ + out[y * (linebytes + 1)] = bestType; /*the first byte of a scanline will be the filter type*/ + for(x = 0; x < linebytes; x++) out[y * (linebytes + 1) + 1 + x] = attempt[bestType].data[x]; + } + } + + for(type = 0; type < 5; type++) ucvector_cleanup(&attempt[type]); + } + else if(strategy == LFS_ENTROPY) + { + float sum[5]; + ucvector attempt[5]; /*five filtering attempts, one for each filter type*/ + float smallest = 0; + unsigned type, bestType = 0; + unsigned count[256]; + + for(type = 0; type < 5; type++) + { + ucvector_init(&attempt[type]); + if(!ucvector_resize(&attempt[type], linebytes)) return 83; /*alloc fail*/ + } + + for(y = 0; y < h; y++) + { + /*try the 5 filter types*/ + for(type = 0; type < 5; type++) + { + filterScanline(attempt[type].data, &in[y * linebytes], prevline, linebytes, bytewidth, type); + for(x = 0; x < 256; x++) count[x] = 0; + for(x = 0; x < linebytes; x++) count[attempt[type].data[x]]++; + count[type]++; /*the filter type itself is part of the scanline*/ + sum[type] = 0; + for(x = 0; x < 256; x++) + { + float p = count[x] / (float)(linebytes + 1); + sum[type] += count[x] == 0 ? 0 : flog2(1 / p) * p; + } + /*check if this is smallest sum (or if type == 0 it's the first case so always store the values)*/ + if(type == 0 || sum[type] < smallest) + { + bestType = type; + smallest = sum[type]; + } + } + + prevline = &in[y * linebytes]; + + /*now fill the out values*/ + out[y * (linebytes + 1)] = bestType; /*the first byte of a scanline will be the filter type*/ + for(x = 0; x < linebytes; x++) out[y * (linebytes + 1) + 1 + x] = attempt[bestType].data[x]; + } + + for(type = 0; type < 5; type++) ucvector_cleanup(&attempt[type]); + } + else if(strategy == LFS_PREDEFINED) + { + for(y = 0; y < h; y++) + { + size_t outindex = (1 + linebytes) * y; /*the extra filterbyte added to each row*/ + size_t inindex = linebytes * y; + unsigned type = settings->predefined_filters[y]; + out[outindex] = type; /*filter type byte*/ + filterScanline(&out[outindex + 1], &in[inindex], prevline, linebytes, bytewidth, type); + prevline = &in[inindex]; + } + } + else if(strategy == LFS_BRUTE_FORCE) + { + /*brute force filter chooser. + deflate the scanline after every filter attempt to see which one deflates best. + This is very slow and gives only slightly smaller, sometimes even larger, result*/ + size_t size[5]; + ucvector attempt[5]; /*five filtering attempts, one for each filter type*/ + size_t smallest = 0; + unsigned type = 0, bestType = 0; + unsigned char* dummy; + LodePNGCompressSettings zlibsettings = settings->zlibsettings; + /*use fixed tree on the attempts so that the tree is not adapted to the filtertype on purpose, + to simulate the true case where the tree is the same for the whole image. Sometimes it gives + better result with dynamic tree anyway. Using the fixed tree sometimes gives worse, but in rare + cases better compression. It does make this a bit less slow, so it's worth doing this.*/ + zlibsettings.btype = 1; + /*a custom encoder likely doesn't read the btype setting and is optimized for complete PNG + images only, so disable it*/ + zlibsettings.custom_zlib = 0; + zlibsettings.custom_deflate = 0; + for(type = 0; type < 5; type++) + { + ucvector_init(&attempt[type]); + ucvector_resize(&attempt[type], linebytes); /*todo: give error if resize failed*/ + } + for(y = 0; y < h; y++) /*try the 5 filter types*/ + { + for(type = 0; type < 5; type++) + { + unsigned testsize = attempt[type].size; + /*if(testsize > 8) testsize /= 8;*/ /*it already works good enough by testing a part of the row*/ + + filterScanline(attempt[type].data, &in[y * linebytes], prevline, linebytes, bytewidth, type); + size[type] = 0; + dummy = 0; + zlib_compress(&dummy, &size[type], attempt[type].data, testsize, &zlibsettings); + lodepng_free(dummy); + /*check if this is smallest size (or if type == 0 it's the first case so always store the values)*/ + if(type == 0 || size[type] < smallest) + { + bestType = type; + smallest = size[type]; + } + } + prevline = &in[y * linebytes]; + out[y * (linebytes + 1)] = bestType; /*the first byte of a scanline will be the filter type*/ + for(x = 0; x < linebytes; x++) out[y * (linebytes + 1) + 1 + x] = attempt[bestType].data[x]; + } + for(type = 0; type < 5; type++) ucvector_cleanup(&attempt[type]); + } + else return 88; /* unknown filter strategy */ + + return error; +} + +static void addPaddingBits(unsigned char* out, const unsigned char* in, + size_t olinebits, size_t ilinebits, unsigned h) +{ + /*The opposite of the removePaddingBits function + olinebits must be >= ilinebits*/ + unsigned y; + size_t diff = olinebits - ilinebits; + size_t obp = 0, ibp = 0; /*bit pointers*/ + for(y = 0; y < h; y++) + { + size_t x; + for(x = 0; x < ilinebits; x++) + { + unsigned char bit = readBitFromReversedStream(&ibp, in); + setBitOfReversedStream(&obp, out, bit); + } + /*obp += diff; --> no, fill in some value in the padding bits too, to avoid + "Use of uninitialised value of size ###" warning from valgrind*/ + for(x = 0; x < diff; x++) setBitOfReversedStream(&obp, out, 0); + } +} + +/* +in: non-interlaced image with size w*h +out: the same pixels, but re-ordered according to PNG's Adam7 interlacing, with + no padding bits between scanlines, but between reduced images so that each + reduced image starts at a byte. +bpp: bits per pixel +there are no padding bits, not between scanlines, not between reduced images +in has the following size in bits: w * h * bpp. +out is possibly bigger due to padding bits between reduced images +NOTE: comments about padding bits are only relevant if bpp < 8 +*/ +static void Adam7_interlace(unsigned char* out, const unsigned char* in, unsigned w, unsigned h, unsigned bpp) +{ + unsigned passw[7], passh[7]; + size_t filter_passstart[8], padded_passstart[8], passstart[8]; + unsigned i; + + Adam7_getpassvalues(passw, passh, filter_passstart, padded_passstart, passstart, w, h, bpp); + + if(bpp >= 8) + { + for(i = 0; i < 7; i++) + { + unsigned x, y, b; + size_t bytewidth = bpp / 8; + for(y = 0; y < passh[i]; y++) + for(x = 0; x < passw[i]; x++) + { + size_t pixelinstart = ((ADAM7_IY[i] + y * ADAM7_DY[i]) * w + ADAM7_IX[i] + x * ADAM7_DX[i]) * bytewidth; + size_t pixeloutstart = passstart[i] + (y * passw[i] + x) * bytewidth; + for(b = 0; b < bytewidth; b++) + { + out[pixeloutstart + b] = in[pixelinstart + b]; + } + } + } + } + else /*bpp < 8: Adam7 with pixels < 8 bit is a bit trickier: with bit pointers*/ + { + for(i = 0; i < 7; i++) + { + unsigned x, y, b; + unsigned ilinebits = bpp * passw[i]; + unsigned olinebits = bpp * w; + size_t obp, ibp; /*bit pointers (for out and in buffer)*/ + for(y = 0; y < passh[i]; y++) + for(x = 0; x < passw[i]; x++) + { + ibp = (ADAM7_IY[i] + y * ADAM7_DY[i]) * olinebits + (ADAM7_IX[i] + x * ADAM7_DX[i]) * bpp; + obp = (8 * passstart[i]) + (y * ilinebits + x * bpp); + for(b = 0; b < bpp; b++) + { + unsigned char bit = readBitFromReversedStream(&ibp, in); + setBitOfReversedStream(&obp, out, bit); + } + } + } + } +} + +/*out must be buffer big enough to contain uncompressed IDAT chunk data, and in must contain the full image. +return value is error**/ +static unsigned preProcessScanlines(unsigned char** out, size_t* outsize, const unsigned char* in, + unsigned w, unsigned h, + const LodePNGInfo* info_png, const LodePNGEncoderSettings* settings) +{ + /* + This function converts the pure 2D image with the PNG's colortype, into filtered-padded-interlaced data. Steps: + *) if no Adam7: 1) add padding bits (= posible extra bits per scanline if bpp < 8) 2) filter + *) if adam7: 1) Adam7_interlace 2) 7x add padding bits 3) 7x filter + */ + unsigned bpp = lodepng_get_bpp(&info_png->color); + unsigned error = 0; + + if(info_png->interlace_method == 0) + { + *outsize = h + (h * ((w * bpp + 7) / 8)); /*image size plus an extra byte per scanline + possible padding bits*/ + *out = (unsigned char*)lodepng_malloc(*outsize); + if(!(*out) && (*outsize)) error = 83; /*alloc fail*/ + + if(!error) + { + /*non multiple of 8 bits per scanline, padding bits needed per scanline*/ + if(bpp < 8 && w * bpp != ((w * bpp + 7) / 8) * 8) + { + unsigned char* padded = (unsigned char*)lodepng_malloc(h * ((w * bpp + 7) / 8)); + if(!padded) error = 83; /*alloc fail*/ + if(!error) + { + addPaddingBits(padded, in, ((w * bpp + 7) / 8) * 8, w * bpp, h); + error = filter(*out, padded, w, h, &info_png->color, settings); + } + lodepng_free(padded); + } + else + { + /*we can immediatly filter into the out buffer, no other steps needed*/ + error = filter(*out, in, w, h, &info_png->color, settings); + } + } + } + else /*interlace_method is 1 (Adam7)*/ + { + unsigned passw[7], passh[7]; + size_t filter_passstart[8], padded_passstart[8], passstart[8]; + unsigned char* adam7; + + Adam7_getpassvalues(passw, passh, filter_passstart, padded_passstart, passstart, w, h, bpp); + + *outsize = filter_passstart[7]; /*image size plus an extra byte per scanline + possible padding bits*/ + *out = (unsigned char*)lodepng_malloc(*outsize); + if(!(*out)) error = 83; /*alloc fail*/ + + adam7 = (unsigned char*)lodepng_malloc(passstart[7]); + if(!adam7 && passstart[7]) error = 83; /*alloc fail*/ + + if(!error) + { + unsigned i; + + Adam7_interlace(adam7, in, w, h, bpp); + for(i = 0; i < 7; i++) + { + if(bpp < 8) + { + unsigned char* padded = (unsigned char*)lodepng_malloc(padded_passstart[i + 1] - padded_passstart[i]); + if(!padded) ERROR_BREAK(83); /*alloc fail*/ + addPaddingBits(padded, &adam7[passstart[i]], + ((passw[i] * bpp + 7) / 8) * 8, passw[i] * bpp, passh[i]); + error = filter(&(*out)[filter_passstart[i]], padded, + passw[i], passh[i], &info_png->color, settings); + lodepng_free(padded); + } + else + { + error = filter(&(*out)[filter_passstart[i]], &adam7[padded_passstart[i]], + passw[i], passh[i], &info_png->color, settings); + } + + if(error) break; + } + } + + lodepng_free(adam7); + } + + return error; +} + +/* +palette must have 4 * palettesize bytes allocated, and given in format RGBARGBARGBARGBA... +returns 0 if the palette is opaque, +returns 1 if the palette has a single color with alpha 0 ==> color key +returns 2 if the palette is semi-translucent. +*/ +static unsigned getPaletteTranslucency(const unsigned char* palette, size_t palettesize) +{ + size_t i, key = 0; + unsigned r = 0, g = 0, b = 0; /*the value of the color with alpha 0, so long as color keying is possible*/ + for(i = 0; i < palettesize; i++) + { + if(!key && palette[4 * i + 3] == 0) + { + r = palette[4 * i + 0]; g = palette[4 * i + 1]; b = palette[4 * i + 2]; + key = 1; + i = (size_t)(-1); /*restart from beginning, to detect earlier opaque colors with key's value*/ + } + else if(palette[4 * i + 3] != 255) return 2; + /*when key, no opaque RGB may have key's RGB*/ + else if(key && r == palette[i * 4 + 0] && g == palette[i * 4 + 1] && b == palette[i * 4 + 2]) return 2; + } + return key; +} + +#ifdef LODEPNG_COMPILE_ANCILLARY_CHUNKS +static unsigned addUnknownChunks(ucvector* out, unsigned char* data, size_t datasize) +{ + unsigned char* inchunk = data; + while((size_t)(inchunk - data) < datasize) + { + CERROR_TRY_RETURN(lodepng_chunk_append(&out->data, &out->size, inchunk)); + out->allocsize = out->size; /*fix the allocsize again*/ + inchunk = lodepng_chunk_next(inchunk); + } + return 0; +} +#endif /*LODEPNG_COMPILE_ANCILLARY_CHUNKS*/ + +unsigned lodepng_encode(unsigned char** out, size_t* outsize, + const unsigned char* image, unsigned w, unsigned h, + LodePNGState* state) +{ + LodePNGInfo info; + ucvector outv; + unsigned char* data = 0; /*uncompressed version of the IDAT chunk data*/ + size_t datasize = 0; + + /*provide some proper output values if error will happen*/ + *out = 0; + *outsize = 0; + state->error = 0; + + lodepng_info_init(&info); + lodepng_info_copy(&info, &state->info_png); + + if((info.color.colortype == LCT_PALETTE || state->encoder.force_palette) + && (info.color.palettesize == 0 || info.color.palettesize > 256)) + { + state->error = 68; /*invalid palette size, it is only allowed to be 1-256*/ + return state->error; + } + + if(state->encoder.auto_convert != LAC_NO) + { + state->error = lodepng_auto_choose_color(&info.color, image, w, h, &state->info_raw, + state->encoder.auto_convert); + } + if(state->error) return state->error; + + if(state->encoder.zlibsettings.btype > 2) + { + CERROR_RETURN_ERROR(state->error, 61); /*error: unexisting btype*/ + } + if(state->info_png.interlace_method > 1) + { + CERROR_RETURN_ERROR(state->error, 71); /*error: unexisting interlace mode*/ + } + + state->error = checkColorValidity(info.color.colortype, info.color.bitdepth); + if(state->error) return state->error; /*error: unexisting color type given*/ + state->error = checkColorValidity(state->info_raw.colortype, state->info_raw.bitdepth); + if(state->error) return state->error; /*error: unexisting color type given*/ + + if(!lodepng_color_mode_equal(&state->info_raw, &info.color)) + { + unsigned char* converted; + size_t size = (w * h * lodepng_get_bpp(&info.color) + 7) / 8; + + converted = (unsigned char*)lodepng_malloc(size); + if(!converted && size) state->error = 83; /*alloc fail*/ + if(!state->error) + { + state->error = lodepng_convert(converted, image, &info.color, &state->info_raw, w, h, 0 /*fix_png*/); + } + if(!state->error) preProcessScanlines(&data, &datasize, converted, w, h, &info, &state->encoder); + lodepng_free(converted); + } + else preProcessScanlines(&data, &datasize, image, w, h, &info, &state->encoder); + + ucvector_init(&outv); + while(!state->error) /*while only executed once, to break on error*/ + { +#ifdef LODEPNG_COMPILE_ANCILLARY_CHUNKS + size_t i; +#endif /*LODEPNG_COMPILE_ANCILLARY_CHUNKS*/ + /*write signature and chunks*/ + writeSignature(&outv); + /*IHDR*/ + addChunk_IHDR(&outv, w, h, info.color.colortype, info.color.bitdepth, info.interlace_method); +#ifdef LODEPNG_COMPILE_ANCILLARY_CHUNKS + /*unknown chunks between IHDR and PLTE*/ + if(info.unknown_chunks_data[0]) + { + state->error = addUnknownChunks(&outv, info.unknown_chunks_data[0], info.unknown_chunks_size[0]); + if(state->error) break; + } +#endif /*LODEPNG_COMPILE_ANCILLARY_CHUNKS*/ + /*PLTE*/ + if(info.color.colortype == LCT_PALETTE) + { + addChunk_PLTE(&outv, &info.color); + } + if(state->encoder.force_palette && (info.color.colortype == LCT_RGB || info.color.colortype == LCT_RGBA)) + { + addChunk_PLTE(&outv, &info.color); + } + /*tRNS*/ + if(info.color.colortype == LCT_PALETTE && getPaletteTranslucency(info.color.palette, info.color.palettesize) != 0) + { + addChunk_tRNS(&outv, &info.color); + } + if((info.color.colortype == LCT_GREY || info.color.colortype == LCT_RGB) && info.color.key_defined) + { + addChunk_tRNS(&outv, &info.color); + } +#ifdef LODEPNG_COMPILE_ANCILLARY_CHUNKS + /*bKGD (must come between PLTE and the IDAt chunks*/ + if(info.background_defined) addChunk_bKGD(&outv, &info); + /*pHYs (must come before the IDAT chunks)*/ + if(info.phys_defined) addChunk_pHYs(&outv, &info); + + /*unknown chunks between PLTE and IDAT*/ + if(info.unknown_chunks_data[1]) + { + state->error = addUnknownChunks(&outv, info.unknown_chunks_data[1], info.unknown_chunks_size[1]); + if(state->error) break; + } +#endif /*LODEPNG_COMPILE_ANCILLARY_CHUNKS*/ + /*IDAT (multiple IDAT chunks must be consecutive)*/ + state->error = addChunk_IDAT(&outv, data, datasize, &state->encoder.zlibsettings); + if(state->error) break; +#ifdef LODEPNG_COMPILE_ANCILLARY_CHUNKS + /*tIME*/ + if(info.time_defined) addChunk_tIME(&outv, &info.time); + /*tEXt and/or zTXt*/ + for(i = 0; i < info.text_num; i++) + { + if(strlen(info.text_keys[i]) > 79) + { + state->error = 66; /*text chunk too large*/ + break; + } + if(strlen(info.text_keys[i]) < 1) + { + state->error = 67; /*text chunk too small*/ + break; + } + if(state->encoder.text_compression) + { + addChunk_zTXt(&outv, info.text_keys[i], info.text_strings[i], &state->encoder.zlibsettings); + } + else + { + addChunk_tEXt(&outv, info.text_keys[i], info.text_strings[i]); + } + } + /*LodePNG version id in text chunk*/ + if(state->encoder.add_id) + { + unsigned alread_added_id_text = 0; + for(i = 0; i < info.text_num; i++) + { + if(!strcmp(info.text_keys[i], "LodePNG")) + { + alread_added_id_text = 1; + break; + } + } + if(alread_added_id_text == 0) + { + addChunk_tEXt(&outv, "LodePNG", VERSION_STRING); /*it's shorter as tEXt than as zTXt chunk*/ + } + } + /*iTXt*/ + for(i = 0; i < info.itext_num; i++) + { + if(strlen(info.itext_keys[i]) > 79) + { + state->error = 66; /*text chunk too large*/ + break; + } + if(strlen(info.itext_keys[i]) < 1) + { + state->error = 67; /*text chunk too small*/ + break; + } + addChunk_iTXt(&outv, state->encoder.text_compression, + info.itext_keys[i], info.itext_langtags[i], info.itext_transkeys[i], info.itext_strings[i], + &state->encoder.zlibsettings); + } + + /*unknown chunks between IDAT and IEND*/ + if(info.unknown_chunks_data[2]) + { + state->error = addUnknownChunks(&outv, info.unknown_chunks_data[2], info.unknown_chunks_size[2]); + if(state->error) break; + } +#endif /*LODEPNG_COMPILE_ANCILLARY_CHUNKS*/ + addChunk_IEND(&outv); + + break; /*this isn't really a while loop; no error happened so break out now!*/ + } + + lodepng_info_cleanup(&info); + lodepng_free(data); + /*instead of cleaning the vector up, give it to the output*/ + *out = outv.data; + *outsize = outv.size; + + return state->error; +} + +unsigned lodepng_encode_memory(unsigned char** out, size_t* outsize, const unsigned char* image, + unsigned w, unsigned h, LodePNGColorType colortype, unsigned bitdepth) +{ + unsigned error; + LodePNGState state; + lodepng_state_init(&state); + state.info_raw.colortype = colortype; + state.info_raw.bitdepth = bitdepth; + state.info_png.color.colortype = colortype; + state.info_png.color.bitdepth = bitdepth; + lodepng_encode(out, outsize, image, w, h, &state); + error = state.error; + lodepng_state_cleanup(&state); + return error; +} + +unsigned lodepng_encode32(unsigned char** out, size_t* outsize, const unsigned char* image, unsigned w, unsigned h) +{ + return lodepng_encode_memory(out, outsize, image, w, h, LCT_RGBA, 8); +} + +unsigned lodepng_encode24(unsigned char** out, size_t* outsize, const unsigned char* image, unsigned w, unsigned h) +{ + return lodepng_encode_memory(out, outsize, image, w, h, LCT_RGB, 8); +} + +#ifdef LODEPNG_COMPILE_DISK +unsigned lodepng_encode_file(const char* filename, const unsigned char* image, unsigned w, unsigned h, + LodePNGColorType colortype, unsigned bitdepth) +{ + unsigned char* buffer; + size_t buffersize; + unsigned error = lodepng_encode_memory(&buffer, &buffersize, image, w, h, colortype, bitdepth); + if(!error) error = lodepng_save_file(buffer, buffersize, filename); + lodepng_free(buffer); + return error; +} + +unsigned lodepng_encode32_file(const char* filename, const unsigned char* image, unsigned w, unsigned h) +{ + return lodepng_encode_file(filename, image, w, h, LCT_RGBA, 8); +} + +unsigned lodepng_encode24_file(const char* filename, const unsigned char* image, unsigned w, unsigned h) +{ + return lodepng_encode_file(filename, image, w, h, LCT_RGB, 8); +} +#endif /*LODEPNG_COMPILE_DISK*/ + +void lodepng_encoder_settings_init(LodePNGEncoderSettings* settings) +{ + lodepng_compress_settings_init(&settings->zlibsettings); + settings->filter_palette_zero = 1; + settings->filter_strategy = LFS_MINSUM; + settings->auto_convert = LAC_AUTO; + settings->force_palette = 0; + settings->predefined_filters = 0; +#ifdef LODEPNG_COMPILE_ANCILLARY_CHUNKS + settings->add_id = 0; + settings->text_compression = 1; +#endif /*LODEPNG_COMPILE_ANCILLARY_CHUNKS*/ +} + +#endif /*LODEPNG_COMPILE_ENCODER*/ +#endif /*LODEPNG_COMPILE_PNG*/ + +#ifdef LODEPNG_COMPILE_ERROR_TEXT +/* +This returns the description of a numerical error code in English. This is also +the documentation of all the error codes. +*/ +const char* lodepng_error_text(unsigned code) +{ + switch(code) + { + case 0: return "no error, everything went ok"; + case 1: return "nothing done yet"; /*the Encoder/Decoder has done nothing yet, error checking makes no sense yet*/ + case 10: return "end of input memory reached without huffman end code"; /*while huffman decoding*/ + case 11: return "error in code tree made it jump outside of huffman tree"; /*while huffman decoding*/ + case 13: return "problem while processing dynamic deflate block"; + case 14: return "problem while processing dynamic deflate block"; + case 15: return "problem while processing dynamic deflate block"; + case 16: return "unexisting code while processing dynamic deflate block"; + case 17: return "end of out buffer memory reached while inflating"; + case 18: return "invalid distance code while inflating"; + case 19: return "end of out buffer memory reached while inflating"; + case 20: return "invalid deflate block BTYPE encountered while decoding"; + case 21: return "NLEN is not ones complement of LEN in a deflate block"; + /*end of out buffer memory reached while inflating: + This can happen if the inflated deflate data is longer than the amount of bytes required to fill up + all the pixels of the image, given the color depth and image dimensions. Something that doesn't + happen in a normal, well encoded, PNG image.*/ + case 22: return "end of out buffer memory reached while inflating"; + case 23: return "end of in buffer memory reached while inflating"; + case 24: return "invalid FCHECK in zlib header"; + case 25: return "invalid compression method in zlib header"; + case 26: return "FDICT encountered in zlib header while it's not used for PNG"; + case 27: return "PNG file is smaller than a PNG header"; + /*Checks the magic file header, the first 8 bytes of the PNG file*/ + case 28: return "incorrect PNG signature, it's no PNG or corrupted"; + case 29: return "first chunk is not the header chunk"; + case 30: return "chunk length too large, chunk broken off at end of file"; + case 31: return "illegal PNG color type or bpp"; + case 32: return "illegal PNG compression method"; + case 33: return "illegal PNG filter method"; + case 34: return "illegal PNG interlace method"; + case 35: return "chunk length of a chunk is too large or the chunk too small"; + case 36: return "illegal PNG filter type encountered"; + case 37: return "illegal bit depth for this color type given"; + case 38: return "the palette is too big"; /*more than 256 colors*/ + case 39: return "more palette alpha values given in tRNS chunk than there are colors in the palette"; + case 40: return "tRNS chunk has wrong size for greyscale image"; + case 41: return "tRNS chunk has wrong size for RGB image"; + case 42: return "tRNS chunk appeared while it was not allowed for this color type"; + case 43: return "bKGD chunk has wrong size for palette image"; + case 44: return "bKGD chunk has wrong size for greyscale image"; + case 45: return "bKGD chunk has wrong size for RGB image"; + /*Is the palette too small?*/ + case 46: return "a value in indexed image is larger than the palette size (bitdepth = 8)"; + /*Is the palette too small?*/ + case 47: return "a value in indexed image is larger than the palette size (bitdepth < 8)"; + /*the input data is empty, maybe a PNG file doesn't exist or is in the wrong path*/ + case 48: return "empty input or file doesn't exist"; + case 49: return "jumped past memory while generating dynamic huffman tree"; + case 50: return "jumped past memory while generating dynamic huffman tree"; + case 51: return "jumped past memory while inflating huffman block"; + case 52: return "jumped past memory while inflating"; + case 53: return "size of zlib data too small"; + case 54: return "repeat symbol in tree while there was no value symbol yet"; + /*jumped past tree while generating huffman tree, this could be when the + tree will have more leaves than symbols after generating it out of the + given lenghts. They call this an oversubscribed dynamic bit lengths tree in zlib.*/ + case 55: return "jumped past tree while generating huffman tree"; + case 56: return "given output image colortype or bitdepth not supported for color conversion"; + case 57: return "invalid CRC encountered (checking CRC can be disabled)"; + case 58: return "invalid ADLER32 encountered (checking ADLER32 can be disabled)"; + case 59: return "requested color conversion not supported"; + case 60: return "invalid window size given in the settings of the encoder (must be 0-32768)"; + case 61: return "invalid BTYPE given in the settings of the encoder (only 0, 1 and 2 are allowed)"; + /*LodePNG leaves the choice of RGB to greyscale conversion formula to the user.*/ + case 62: return "conversion from color to greyscale not supported"; + case 63: return "length of a chunk too long, max allowed for PNG is 2147483647 bytes per chunk"; /*(2^31-1)*/ + /*this would result in the inability of a deflated block to ever contain an end code. It must be at least 1.*/ + case 64: return "the length of the END symbol 256 in the Huffman tree is 0"; + case 66: return "the length of a text chunk keyword given to the encoder is longer than the maximum of 79 bytes"; + case 67: return "the length of a text chunk keyword given to the encoder is smaller than the minimum of 1 byte"; + case 68: return "tried to encode a PLTE chunk with a palette that has less than 1 or more than 256 colors"; + case 69: return "unknown chunk type with 'critical' flag encountered by the decoder"; + case 71: return "unexisting interlace mode given to encoder (must be 0 or 1)"; + case 72: return "while decoding, unexisting compression method encountering in zTXt or iTXt chunk (it must be 0)"; + case 73: return "invalid tIME chunk size"; + case 74: return "invalid pHYs chunk size"; + /*length could be wrong, or data chopped off*/ + case 75: return "no null termination char found while decoding text chunk"; + case 76: return "iTXt chunk too short to contain required bytes"; + case 77: return "integer overflow in buffer size"; + case 78: return "failed to open file for reading"; /*file doesn't exist or couldn't be opened for reading*/ + case 79: return "failed to open file for writing"; + case 80: return "tried creating a tree of 0 symbols"; + case 81: return "lazy matching at pos 0 is impossible"; + case 82: return "color conversion to palette requested while a color isn't in palette"; + case 83: return "memory allocation failed"; + case 84: return "given image too small to contain all pixels to be encoded"; + case 85: return "internal color conversion bug"; + case 86: return "impossible offset in lz77 encoding (internal bug)"; + case 87: return "must provide custom zlib function pointer if LODEPNG_COMPILE_ZLIB is not defined"; + case 88: return "invalid filter strategy given for LodePNGEncoderSettings.filter_strategy"; + case 89: return "text chunk keyword too short or long: must have size 1-79"; + /*the windowsize in the LodePNGCompressSettings. Requiring POT(==> & instead of %) makes encoding 12% faster.*/ + case 90: return "windowsize must be a power of two"; + } + return "unknown error code"; +} +#endif /*LODEPNG_COMPILE_ERROR_TEXT*/ + +/* ////////////////////////////////////////////////////////////////////////// */ +/* ////////////////////////////////////////////////////////////////////////// */ +/* // C++ Wrapper // */ +/* ////////////////////////////////////////////////////////////////////////// */ +/* ////////////////////////////////////////////////////////////////////////// */ + +#ifdef LODEPNG_COMPILE_CPP +namespace lodepng +{ + +#ifdef LODEPNG_COMPILE_DISK +void load_file(std::vector<unsigned char>& buffer, const std::string& filename) +{ + std::ifstream file(filename.c_str(), std::ios::in|std::ios::binary|std::ios::ate); + + /*get filesize*/ + std::streamsize size = 0; + if(file.seekg(0, std::ios::end).good()) size = file.tellg(); + if(file.seekg(0, std::ios::beg).good()) size -= file.tellg(); + + /*read contents of the file into the vector*/ + buffer.resize(size_t(size)); + if(size > 0) file.read((char*)(&buffer[0]), size); +} + +/*write given buffer to the file, overwriting the file, it doesn't append to it.*/ +void save_file(const std::vector<unsigned char>& buffer, const std::string& filename) +{ + std::ofstream file(filename.c_str(), std::ios::out|std::ios::binary); + file.write(buffer.empty() ? 0 : (char*)&buffer[0], std::streamsize(buffer.size())); +} +#endif //LODEPNG_COMPILE_DISK + +#ifdef LODEPNG_COMPILE_ZLIB +#ifdef LODEPNG_COMPILE_DECODER +unsigned decompress(std::vector<unsigned char>& out, const unsigned char* in, size_t insize, + const LodePNGDecompressSettings& settings) +{ + unsigned char* buffer = 0; + size_t buffersize = 0; + unsigned error = zlib_decompress(&buffer, &buffersize, in, insize, &settings); + if(buffer) + { + out.insert(out.end(), &buffer[0], &buffer[buffersize]); + lodepng_free(buffer); + } + return error; +} + +unsigned decompress(std::vector<unsigned char>& out, const std::vector<unsigned char>& in, + const LodePNGDecompressSettings& settings) +{ + return decompress(out, in.empty() ? 0 : &in[0], in.size(), settings); +} +#endif //LODEPNG_COMPILE_DECODER + +#ifdef LODEPNG_COMPILE_ENCODER +unsigned compress(std::vector<unsigned char>& out, const unsigned char* in, size_t insize, + const LodePNGCompressSettings& settings) +{ + unsigned char* buffer = 0; + size_t buffersize = 0; + unsigned error = zlib_compress(&buffer, &buffersize, in, insize, &settings); + if(buffer) + { + out.insert(out.end(), &buffer[0], &buffer[buffersize]); + lodepng_free(buffer); + } + return error; +} + +unsigned compress(std::vector<unsigned char>& out, const std::vector<unsigned char>& in, + const LodePNGCompressSettings& settings) +{ + return compress(out, in.empty() ? 0 : &in[0], in.size(), settings); +} +#endif //LODEPNG_COMPILE_ENCODER +#endif //LODEPNG_COMPILE_ZLIB + + +#ifdef LODEPNG_COMPILE_PNG + +State::State() +{ + lodepng_state_init(this); +} + +State::State(const State& other) +{ + lodepng_state_init(this); + lodepng_state_copy(this, &other); +} + +State::~State() +{ + lodepng_state_cleanup(this); +} + +State& State::operator=(const State& other) +{ + lodepng_state_copy(this, &other); + return *this; +} + +#ifdef LODEPNG_COMPILE_DECODER + +unsigned decode(std::vector<unsigned char>& out, unsigned& w, unsigned& h, const unsigned char* in, + size_t insize, LodePNGColorType colortype, unsigned bitdepth) +{ + unsigned char* buffer; + unsigned error = lodepng_decode_memory(&buffer, &w, &h, in, insize, colortype, bitdepth); + if(buffer && !error) + { + State state; + state.info_raw.colortype = colortype; + state.info_raw.bitdepth = bitdepth; + size_t buffersize = lodepng_get_raw_size(w, h, &state.info_raw); + out.insert(out.end(), &buffer[0], &buffer[buffersize]); + lodepng_free(buffer); + } + return error; +} + +unsigned decode(std::vector<unsigned char>& out, unsigned& w, unsigned& h, + const std::vector<unsigned char>& in, LodePNGColorType colortype, unsigned bitdepth) +{ + return decode(out, w, h, in.empty() ? 0 : &in[0], (unsigned)in.size(), colortype, bitdepth); +} + +unsigned decode(std::vector<unsigned char>& out, unsigned& w, unsigned& h, + State& state, + const unsigned char* in, size_t insize) +{ + unsigned char* buffer = NULL; + unsigned error = lodepng_decode(&buffer, &w, &h, &state, in, insize); + if(buffer && !error) + { + size_t buffersize = lodepng_get_raw_size(w, h, &state.info_raw); + out.insert(out.end(), &buffer[0], &buffer[buffersize]); + } + lodepng_free(buffer); + return error; +} + +unsigned decode(std::vector<unsigned char>& out, unsigned& w, unsigned& h, + State& state, + const std::vector<unsigned char>& in) +{ + return decode(out, w, h, state, in.empty() ? 0 : &in[0], in.size()); +} + +#ifdef LODEPNG_COMPILE_DISK +unsigned decode(std::vector<unsigned char>& out, unsigned& w, unsigned& h, const std::string& filename, + LodePNGColorType colortype, unsigned bitdepth) +{ + std::vector<unsigned char> buffer; + load_file(buffer, filename); + return decode(out, w, h, buffer, colortype, bitdepth); +} +#endif //LODEPNG_COMPILE_DECODER +#endif //LODEPNG_COMPILE_DISK + +#ifdef LODEPNG_COMPILE_ENCODER +unsigned encode(std::vector<unsigned char>& out, const unsigned char* in, unsigned w, unsigned h, + LodePNGColorType colortype, unsigned bitdepth) +{ + unsigned char* buffer; + size_t buffersize; + unsigned error = lodepng_encode_memory(&buffer, &buffersize, in, w, h, colortype, bitdepth); + if(buffer) + { + out.insert(out.end(), &buffer[0], &buffer[buffersize]); + lodepng_free(buffer); + } + return error; +} + +unsigned encode(std::vector<unsigned char>& out, + const std::vector<unsigned char>& in, unsigned w, unsigned h, + LodePNGColorType colortype, unsigned bitdepth) +{ + if(lodepng_get_raw_size_lct(w, h, colortype, bitdepth) > in.size()) return 84; + return encode(out, in.empty() ? 0 : &in[0], w, h, colortype, bitdepth); +} + +unsigned encode(std::vector<unsigned char>& out, + const unsigned char* in, unsigned w, unsigned h, + State& state) +{ + unsigned char* buffer; + size_t buffersize; + unsigned error = lodepng_encode(&buffer, &buffersize, in, w, h, &state); + if(buffer) + { + out.insert(out.end(), &buffer[0], &buffer[buffersize]); + lodepng_free(buffer); + } + return error; +} + +unsigned encode(std::vector<unsigned char>& out, + const std::vector<unsigned char>& in, unsigned w, unsigned h, + State& state) +{ + if(lodepng_get_raw_size(w, h, &state.info_raw) > in.size()) return 84; + return encode(out, in.empty() ? 0 : &in[0], w, h, state); +} + +#ifdef LODEPNG_COMPILE_DISK +unsigned encode(const std::string& filename, + const unsigned char* in, unsigned w, unsigned h, + LodePNGColorType colortype, unsigned bitdepth) +{ + std::vector<unsigned char> buffer; + unsigned error = encode(buffer, in, w, h, colortype, bitdepth); + if(!error) save_file(buffer, filename); + return error; +} + +unsigned encode(const std::string& filename, + const std::vector<unsigned char>& in, unsigned w, unsigned h, + LodePNGColorType colortype, unsigned bitdepth) +{ + if(lodepng_get_raw_size_lct(w, h, colortype, bitdepth) > in.size()) return 84; + return encode(filename, in.empty() ? 0 : &in[0], w, h, colortype, bitdepth); +} +#endif //LODEPNG_COMPILE_DISK +#endif //LODEPNG_COMPILE_ENCODER +#endif //LODEPNG_COMPILE_PNG +} //namespace lodepng +#endif /*LODEPNG_COMPILE_CPP*/
diff -r 000000000000 -r b567d56a59d7 lodepng.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/lodepng.h Fri Oct 03 13:30:09 2014 +0000 @@ -0,0 +1,1725 @@ +/* +LodePNG version 20131222 + +Copyright (c) 2005-2013 Lode Vandevenne + +This software is provided 'as-is', without any express or implied +warranty. In no event will the authors be held liable for any damages +arising from the use of this software. + +Permission is granted to anyone to use this software for any purpose, +including commercial applications, and to alter it and redistribute it +freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software + in a product, an acknowledgment in the product documentation would be + appreciated but is not required. + + 2. Altered source versions must be plainly marked as such, and must not be + misrepresented as being the original software. + + 3. This notice may not be removed or altered from any source + distribution. +*/ + +#ifndef LODEPNG_H +#define LODEPNG_H + +#include <string.h> /*for size_t*/ + +#ifdef __cplusplus +#include <vector> +#include <string> +#endif /*__cplusplus*/ + + +// Settings modified by Embedded Artists +#define LODEPNG_NO_COMPILE_ENCODER +#define LODEPNG_NO_COMPILE_DISK +#define LODEPNG_NO_COMPILE_ANCILLARY_CHUNKS +#define LODEPNG_NO_COMPILE_ERROR_TEXT +#define LODEPNG_NO_COMPILE_CPP + + +/* +The following #defines are used to create code sections. They can be disabled +to disable code sections, which can give faster compile time and smaller binary. +The "NO_COMPILE" defines are designed to be used to pass as defines to the +compiler command to disable them without modifying this header, e.g. +-DLODEPNG_NO_COMPILE_ZLIB for gcc. +*/ +/*deflate & zlib. If disabled, you must specify alternative zlib functions in +the custom_zlib field of the compress and decompress settings*/ +#ifndef LODEPNG_NO_COMPILE_ZLIB +#define LODEPNG_COMPILE_ZLIB +#endif +/*png encoder and png decoder*/ +#ifndef LODEPNG_NO_COMPILE_PNG +#define LODEPNG_COMPILE_PNG +#endif +/*deflate&zlib decoder and png decoder*/ +#ifndef LODEPNG_NO_COMPILE_DECODER +#define LODEPNG_COMPILE_DECODER +#endif +/*deflate&zlib encoder and png encoder*/ +#ifndef LODEPNG_NO_COMPILE_ENCODER +#define LODEPNG_COMPILE_ENCODER +#endif +/*the optional built in harddisk file loading and saving functions*/ +#ifndef LODEPNG_NO_COMPILE_DISK +#define LODEPNG_COMPILE_DISK +#endif +/*support for chunks other than IHDR, IDAT, PLTE, tRNS, IEND: ancillary and unknown chunks*/ +#ifndef LODEPNG_NO_COMPILE_ANCILLARY_CHUNKS +#define LODEPNG_COMPILE_ANCILLARY_CHUNKS +#endif +/*ability to convert error numerical codes to English text string*/ +#ifndef LODEPNG_NO_COMPILE_ERROR_TEXT +#define LODEPNG_COMPILE_ERROR_TEXT +#endif +/*Compile the default allocators (C's free, malloc and realloc). If you disable this, +you can define the functions lodepng_free, lodepng_malloc and lodepng_realloc in your +source files with custom allocators.*/ +#ifndef LODEPNG_NO_COMPILE_ALLOCATORS +#define LODEPNG_COMPILE_ALLOCATORS +#endif +/*compile the C++ version (you can disable the C++ wrapper here even when compiling for C++)*/ +#ifdef __cplusplus +#ifndef LODEPNG_NO_COMPILE_CPP +#define LODEPNG_COMPILE_CPP +#endif +#endif + +#ifdef LODEPNG_COMPILE_PNG +/*The PNG color types (also used for raw).*/ +typedef enum LodePNGColorType +{ + LCT_GREY = 0, /*greyscale: 1,2,4,8,16 bit*/ + LCT_RGB = 2, /*RGB: 8,16 bit*/ + LCT_PALETTE = 3, /*palette: 1,2,4,8 bit*/ + LCT_GREY_ALPHA = 4, /*greyscale with alpha: 8,16 bit*/ + LCT_RGBA = 6 /*RGB with alpha: 8,16 bit*/ +} LodePNGColorType; + +#ifdef LODEPNG_COMPILE_DECODER +/* +Converts PNG data in memory to raw pixel data. +out: Output parameter. Pointer to buffer that will contain the raw pixel data. + After decoding, its size is w * h * (bytes per pixel) bytes larger than + initially. Bytes per pixel depends on colortype and bitdepth. + Must be freed after usage with free(*out). + Note: for 16-bit per channel colors, uses big endian format like PNG does. +w: Output parameter. Pointer to width of pixel data. +h: Output parameter. Pointer to height of pixel data. +in: Memory buffer with the PNG file. +insize: size of the in buffer. +colortype: the desired color type for the raw output image. See explanation on PNG color types. +bitdepth: the desired bit depth for the raw output image. See explanation on PNG color types. +Return value: LodePNG error code (0 means no error). +*/ +unsigned lodepng_decode_memory(unsigned char** out, unsigned* w, unsigned* h, + const unsigned char* in, size_t insize, + LodePNGColorType colortype, unsigned bitdepth); + +/*Same as lodepng_decode_memory, but always decodes to 32-bit RGBA raw image*/ +unsigned lodepng_decode32(unsigned char** out, unsigned* w, unsigned* h, + const unsigned char* in, size_t insize); + +/*Same as lodepng_decode_memory, but always decodes to 24-bit RGB raw image*/ +unsigned lodepng_decode24(unsigned char** out, unsigned* w, unsigned* h, + const unsigned char* in, size_t insize); + +#ifdef LODEPNG_COMPILE_DISK +/* +Load PNG from disk, from file with given name. +Same as the other decode functions, but instead takes a filename as input. +*/ +unsigned lodepng_decode_file(unsigned char** out, unsigned* w, unsigned* h, + const char* filename, + LodePNGColorType colortype, unsigned bitdepth); + +/*Same as lodepng_decode_file, but always decodes to 32-bit RGBA raw image.*/ +unsigned lodepng_decode32_file(unsigned char** out, unsigned* w, unsigned* h, + const char* filename); + +/*Same as lodepng_decode_file, but always decodes to 24-bit RGB raw image.*/ +unsigned lodepng_decode24_file(unsigned char** out, unsigned* w, unsigned* h, + const char* filename); +#endif /*LODEPNG_COMPILE_DISK*/ +#endif /*LODEPNG_COMPILE_DECODER*/ + + +#ifdef LODEPNG_COMPILE_ENCODER +/* +Converts raw pixel data into a PNG image in memory. The colortype and bitdepth + of the output PNG image cannot be chosen, they are automatically determined + by the colortype, bitdepth and content of the input pixel data. + Note: for 16-bit per channel colors, needs big endian format like PNG does. +out: Output parameter. Pointer to buffer that will contain the PNG image data. + Must be freed after usage with free(*out). +outsize: Output parameter. Pointer to the size in bytes of the out buffer. +image: The raw pixel data to encode. The size of this buffer should be + w * h * (bytes per pixel), bytes per pixel depends on colortype and bitdepth. +w: width of the raw pixel data in pixels. +h: height of the raw pixel data in pixels. +colortype: the color type of the raw input image. See explanation on PNG color types. +bitdepth: the bit depth of the raw input image. See explanation on PNG color types. +Return value: LodePNG error code (0 means no error). +*/ +unsigned lodepng_encode_memory(unsigned char** out, size_t* outsize, + const unsigned char* image, unsigned w, unsigned h, + LodePNGColorType colortype, unsigned bitdepth); + +/*Same as lodepng_encode_memory, but always encodes from 32-bit RGBA raw image.*/ +unsigned lodepng_encode32(unsigned char** out, size_t* outsize, + const unsigned char* image, unsigned w, unsigned h); + +/*Same as lodepng_encode_memory, but always encodes from 24-bit RGB raw image.*/ +unsigned lodepng_encode24(unsigned char** out, size_t* outsize, + const unsigned char* image, unsigned w, unsigned h); + +#ifdef LODEPNG_COMPILE_DISK +/* +Converts raw pixel data into a PNG file on disk. +Same as the other encode functions, but instead takes a filename as output. +NOTE: This overwrites existing files without warning! +*/ +unsigned lodepng_encode_file(const char* filename, + const unsigned char* image, unsigned w, unsigned h, + LodePNGColorType colortype, unsigned bitdepth); + +/*Same as lodepng_encode_file, but always encodes from 32-bit RGBA raw image.*/ +unsigned lodepng_encode32_file(const char* filename, + const unsigned char* image, unsigned w, unsigned h); + +/*Same as lodepng_encode_file, but always encodes from 24-bit RGB raw image.*/ +unsigned lodepng_encode24_file(const char* filename, + const unsigned char* image, unsigned w, unsigned h); +#endif /*LODEPNG_COMPILE_DISK*/ +#endif /*LODEPNG_COMPILE_ENCODER*/ + + +#ifdef LODEPNG_COMPILE_CPP +namespace lodepng +{ +#ifdef LODEPNG_COMPILE_DECODER +/*Same as lodepng_decode_memory, but decodes to an std::vector.*/ +unsigned decode(std::vector<unsigned char>& out, unsigned& w, unsigned& h, + const unsigned char* in, size_t insize, + LodePNGColorType colortype = LCT_RGBA, unsigned bitdepth = 8); +unsigned decode(std::vector<unsigned char>& out, unsigned& w, unsigned& h, + const std::vector<unsigned char>& in, + LodePNGColorType colortype = LCT_RGBA, unsigned bitdepth = 8); +#ifdef LODEPNG_COMPILE_DISK +/* +Converts PNG file from disk to raw pixel data in memory. +Same as the other decode functions, but instead takes a filename as input. +*/ +unsigned decode(std::vector<unsigned char>& out, unsigned& w, unsigned& h, + const std::string& filename, + LodePNGColorType colortype = LCT_RGBA, unsigned bitdepth = 8); +#endif //LODEPNG_COMPILE_DISK +#endif //LODEPNG_COMPILE_DECODER + +#ifdef LODEPNG_COMPILE_ENCODER +/*Same as lodepng_encode_memory, but encodes to an std::vector.*/ +unsigned encode(std::vector<unsigned char>& out, + const unsigned char* in, unsigned w, unsigned h, + LodePNGColorType colortype = LCT_RGBA, unsigned bitdepth = 8); +unsigned encode(std::vector<unsigned char>& out, + const std::vector<unsigned char>& in, unsigned w, unsigned h, + LodePNGColorType colortype = LCT_RGBA, unsigned bitdepth = 8); +#ifdef LODEPNG_COMPILE_DISK +/* +Converts 32-bit RGBA raw pixel data into a PNG file on disk. +Same as the other encode functions, but instead takes a filename as output. +NOTE: This overwrites existing files without warning! +*/ +unsigned encode(const std::string& filename, + const unsigned char* in, unsigned w, unsigned h, + LodePNGColorType colortype = LCT_RGBA, unsigned bitdepth = 8); +unsigned encode(const std::string& filename, + const std::vector<unsigned char>& in, unsigned w, unsigned h, + LodePNGColorType colortype = LCT_RGBA, unsigned bitdepth = 8); +#endif //LODEPNG_COMPILE_DISK +#endif //LODEPNG_COMPILE_ENCODER +} //namespace lodepng +#endif /*LODEPNG_COMPILE_CPP*/ +#endif /*LODEPNG_COMPILE_PNG*/ + +#ifdef LODEPNG_COMPILE_ERROR_TEXT +/*Returns an English description of the numerical error code.*/ +const char* lodepng_error_text(unsigned code); +#endif /*LODEPNG_COMPILE_ERROR_TEXT*/ + +#ifdef LODEPNG_COMPILE_DECODER +/*Settings for zlib decompression*/ +typedef struct LodePNGDecompressSettings LodePNGDecompressSettings; +struct LodePNGDecompressSettings +{ + unsigned ignore_adler32; /*if 1, continue and don't give an error message if the Adler32 checksum is corrupted*/ + + /*use custom zlib decoder instead of built in one (default: null)*/ + unsigned (*custom_zlib)(unsigned char**, size_t*, + const unsigned char*, size_t, + const LodePNGDecompressSettings*); + /*use custom deflate decoder instead of built in one (default: null) + if custom_zlib is used, custom_deflate is ignored since only the built in + zlib function will call custom_deflate*/ + unsigned (*custom_inflate)(unsigned char**, size_t*, + const unsigned char*, size_t, + const LodePNGDecompressSettings*); + + const void* custom_context; /*optional custom settings for custom functions*/ +}; + +extern const LodePNGDecompressSettings lodepng_default_decompress_settings; +void lodepng_decompress_settings_init(LodePNGDecompressSettings* settings); +#endif /*LODEPNG_COMPILE_DECODER*/ + +#ifdef LODEPNG_COMPILE_ENCODER +/* +Settings for zlib compression. Tweaking these settings tweaks the balance +between speed and compression ratio. +*/ +typedef struct LodePNGCompressSettings LodePNGCompressSettings; +struct LodePNGCompressSettings /*deflate = compress*/ +{ + /*LZ77 related settings*/ + unsigned btype; /*the block type for LZ (0, 1, 2 or 3, see zlib standard). Should be 2 for proper compression.*/ + unsigned use_lz77; /*whether or not to use LZ77. Should be 1 for proper compression.*/ + unsigned windowsize; /*must be a power of two <= 32768. higher compresses more but is slower. Typical value: 2048.*/ + unsigned minmatch; /*mininum lz77 length. 3 is normally best, 6 can be better for some PNGs. Default: 0*/ + unsigned nicematch; /*stop searching if >= this length found. Set to 258 for best compression. Default: 128*/ + unsigned lazymatching; /*use lazy matching: better compression but a bit slower. Default: true*/ + + /*use custom zlib encoder instead of built in one (default: null)*/ + unsigned (*custom_zlib)(unsigned char**, size_t*, + const unsigned char*, size_t, + const LodePNGCompressSettings*); + /*use custom deflate encoder instead of built in one (default: null) + if custom_zlib is used, custom_deflate is ignored since only the built in + zlib function will call custom_deflate*/ + unsigned (*custom_deflate)(unsigned char**, size_t*, + const unsigned char*, size_t, + const LodePNGCompressSettings*); + + const void* custom_context; /*optional custom settings for custom functions*/ +}; + +extern const LodePNGCompressSettings lodepng_default_compress_settings; +void lodepng_compress_settings_init(LodePNGCompressSettings* settings); +#endif /*LODEPNG_COMPILE_ENCODER*/ + +#ifdef LODEPNG_COMPILE_PNG +/* +Color mode of an image. Contains all information required to decode the pixel +bits to RGBA colors. This information is the same as used in the PNG file +format, and is used both for PNG and raw image data in LodePNG. +*/ +typedef struct LodePNGColorMode +{ + /*header (IHDR)*/ + LodePNGColorType colortype; /*color type, see PNG standard or documentation further in this header file*/ + unsigned bitdepth; /*bits per sample, see PNG standard or documentation further in this header file*/ + + /* + palette (PLTE and tRNS) + + Dynamically allocated with the colors of the palette, including alpha. + When encoding a PNG, to store your colors in the palette of the LodePNGColorMode, first use + lodepng_palette_clear, then for each color use lodepng_palette_add. + If you encode an image without alpha with palette, don't forget to put value 255 in each A byte of the palette. + + When decoding, by default you can ignore this palette, since LodePNG already + fills the palette colors in the pixels of the raw RGBA output. + + The palette is only supported for color type 3. + */ + unsigned char* palette; /*palette in RGBARGBA... order. When allocated, must be either 0, or have size 1024*/ + size_t palettesize; /*palette size in number of colors (amount of bytes is 4 * palettesize)*/ + + /* + transparent color key (tRNS) + + This color uses the same bit depth as the bitdepth value in this struct, which can be 1-bit to 16-bit. + For greyscale PNGs, r, g and b will all 3 be set to the same. + + When decoding, by default you can ignore this information, since LodePNG sets + pixels with this key to transparent already in the raw RGBA output. + + The color key is only supported for color types 0 and 2. + */ + unsigned key_defined; /*is a transparent color key given? 0 = false, 1 = true*/ + unsigned key_r; /*red/greyscale component of color key*/ + unsigned key_g; /*green component of color key*/ + unsigned key_b; /*blue component of color key*/ +} LodePNGColorMode; + +/*init, cleanup and copy functions to use with this struct*/ +void lodepng_color_mode_init(LodePNGColorMode* info); +void lodepng_color_mode_cleanup(LodePNGColorMode* info); +/*return value is error code (0 means no error)*/ +unsigned lodepng_color_mode_copy(LodePNGColorMode* dest, const LodePNGColorMode* source); + +void lodepng_palette_clear(LodePNGColorMode* info); +/*add 1 color to the palette*/ +unsigned lodepng_palette_add(LodePNGColorMode* info, + unsigned char r, unsigned char g, unsigned char b, unsigned char a); + +/*get the total amount of bits per pixel, based on colortype and bitdepth in the struct*/ +unsigned lodepng_get_bpp(const LodePNGColorMode* info); +/*get the amount of color channels used, based on colortype in the struct. +If a palette is used, it counts as 1 channel.*/ +unsigned lodepng_get_channels(const LodePNGColorMode* info); +/*is it a greyscale type? (only colortype 0 or 4)*/ +unsigned lodepng_is_greyscale_type(const LodePNGColorMode* info); +/*has it got an alpha channel? (only colortype 2 or 6)*/ +unsigned lodepng_is_alpha_type(const LodePNGColorMode* info); +/*has it got a palette? (only colortype 3)*/ +unsigned lodepng_is_palette_type(const LodePNGColorMode* info); +/*only returns true if there is a palette and there is a value in the palette with alpha < 255. +Loops through the palette to check this.*/ +unsigned lodepng_has_palette_alpha(const LodePNGColorMode* info); +/* +Check if the given color info indicates the possibility of having non-opaque pixels in the PNG image. +Returns true if the image can have translucent or invisible pixels (it still be opaque if it doesn't use such pixels). +Returns false if the image can only have opaque pixels. +In detail, it returns true only if it's a color type with alpha, or has a palette with non-opaque values, +or if "key_defined" is true. +*/ +unsigned lodepng_can_have_alpha(const LodePNGColorMode* info); +/*Returns the byte size of a raw image buffer with given width, height and color mode*/ +size_t lodepng_get_raw_size(unsigned w, unsigned h, const LodePNGColorMode* color); + +#ifdef LODEPNG_COMPILE_ANCILLARY_CHUNKS +/*The information of a Time chunk in PNG.*/ +typedef struct LodePNGTime +{ + unsigned year; /*2 bytes used (0-65535)*/ + unsigned month; /*1-12*/ + unsigned day; /*1-31*/ + unsigned hour; /*0-23*/ + unsigned minute; /*0-59*/ + unsigned second; /*0-60 (to allow for leap seconds)*/ +} LodePNGTime; +#endif /*LODEPNG_COMPILE_ANCILLARY_CHUNKS*/ + +/*Information about the PNG image, except pixels, width and height.*/ +typedef struct LodePNGInfo +{ + /*header (IHDR), palette (PLTE) and transparency (tRNS) chunks*/ + unsigned compression_method;/*compression method of the original file. Always 0.*/ + unsigned filter_method; /*filter method of the original file*/ + unsigned interlace_method; /*interlace method of the original file*/ + LodePNGColorMode color; /*color type and bits, palette and transparency of the PNG file*/ + +#ifdef LODEPNG_COMPILE_ANCILLARY_CHUNKS + /* + suggested background color chunk (bKGD) + This color uses the same color mode as the PNG (except alpha channel), which can be 1-bit to 16-bit. + + For greyscale PNGs, r, g and b will all 3 be set to the same. When encoding + the encoder writes the red one. For palette PNGs: When decoding, the RGB value + will be stored, not a palette index. But when encoding, specify the index of + the palette in background_r, the other two are then ignored. + + The decoder does not use this background color to edit the color of pixels. + */ + unsigned background_defined; /*is a suggested background color given?*/ + unsigned background_r; /*red component of suggested background color*/ + unsigned background_g; /*green component of suggested background color*/ + unsigned background_b; /*blue component of suggested background color*/ + + /* + non-international text chunks (tEXt and zTXt) + + The char** arrays each contain num strings. The actual messages are in + text_strings, while text_keys are keywords that give a short description what + the actual text represents, e.g. Title, Author, Description, or anything else. + + A keyword is minimum 1 character and maximum 79 characters long. It's + discouraged to use a single line length longer than 79 characters for texts. + + Don't allocate these text buffers yourself. Use the init/cleanup functions + correctly and use lodepng_add_text and lodepng_clear_text. + */ + size_t text_num; /*the amount of texts in these char** buffers (there may be more texts in itext)*/ + char** text_keys; /*the keyword of a text chunk (e.g. "Comment")*/ + char** text_strings; /*the actual text*/ + + /* + international text chunks (iTXt) + Similar to the non-international text chunks, but with additional strings + "langtags" and "transkeys". + */ + size_t itext_num; /*the amount of international texts in this PNG*/ + char** itext_keys; /*the English keyword of the text chunk (e.g. "Comment")*/ + char** itext_langtags; /*language tag for this text's language, ISO/IEC 646 string, e.g. ISO 639 language tag*/ + char** itext_transkeys; /*keyword translated to the international language - UTF-8 string*/ + char** itext_strings; /*the actual international text - UTF-8 string*/ + + /*time chunk (tIME)*/ + unsigned time_defined; /*set to 1 to make the encoder generate a tIME chunk*/ + LodePNGTime time; + + /*phys chunk (pHYs)*/ + unsigned phys_defined; /*if 0, there is no pHYs chunk and the values below are undefined, if 1 else there is one*/ + unsigned phys_x; /*pixels per unit in x direction*/ + unsigned phys_y; /*pixels per unit in y direction*/ + unsigned phys_unit; /*may be 0 (unknown unit) or 1 (metre)*/ + + /* + unknown chunks + There are 3 buffers, one for each position in the PNG where unknown chunks can appear + each buffer contains all unknown chunks for that position consecutively + The 3 buffers are the unknown chunks between certain critical chunks: + 0: IHDR-PLTE, 1: PLTE-IDAT, 2: IDAT-IEND + Do not allocate or traverse this data yourself. Use the chunk traversing functions declared + later, such as lodepng_chunk_next and lodepng_chunk_append, to read/write this struct. + */ + unsigned char* unknown_chunks_data[3]; + size_t unknown_chunks_size[3]; /*size in bytes of the unknown chunks, given for protection*/ +#endif /*LODEPNG_COMPILE_ANCILLARY_CHUNKS*/ +} LodePNGInfo; + +/*init, cleanup and copy functions to use with this struct*/ +void lodepng_info_init(LodePNGInfo* info); +void lodepng_info_cleanup(LodePNGInfo* info); +/*return value is error code (0 means no error)*/ +unsigned lodepng_info_copy(LodePNGInfo* dest, const LodePNGInfo* source); + +#ifdef LODEPNG_COMPILE_ANCILLARY_CHUNKS +void lodepng_clear_text(LodePNGInfo* info); /*use this to clear the texts again after you filled them in*/ +unsigned lodepng_add_text(LodePNGInfo* info, const char* key, const char* str); /*push back both texts at once*/ + +void lodepng_clear_itext(LodePNGInfo* info); /*use this to clear the itexts again after you filled them in*/ +unsigned lodepng_add_itext(LodePNGInfo* info, const char* key, const char* langtag, + const char* transkey, const char* str); /*push back the 4 texts of 1 chunk at once*/ +#endif /*LODEPNG_COMPILE_ANCILLARY_CHUNKS*/ + +/* +Converts raw buffer from one color type to another color type, based on +LodePNGColorMode structs to describe the input and output color type. +See the reference manual at the end of this header file to see which color conversions are supported. +return value = LodePNG error code (0 if all went ok, an error if the conversion isn't supported) +The out buffer must have size (w * h * bpp + 7) / 8, where bpp is the bits per pixel +of the output color type (lodepng_get_bpp) +The fix_png value works as described in struct LodePNGDecoderSettings. +Note: for 16-bit per channel colors, uses big endian format like PNG does. +*/ +unsigned lodepng_convert(unsigned char* out, const unsigned char* in, + LodePNGColorMode* mode_out, const LodePNGColorMode* mode_in, + unsigned w, unsigned h, unsigned fix_png); + +#ifdef LODEPNG_COMPILE_DECODER +/* +Settings for the decoder. This contains settings for the PNG and the Zlib +decoder, but not the Info settings from the Info structs. +*/ +typedef struct LodePNGDecoderSettings +{ + LodePNGDecompressSettings zlibsettings; /*in here is the setting to ignore Adler32 checksums*/ + + unsigned ignore_crc; /*ignore CRC checksums*/ + /* + The fix_png setting, if 1, makes the decoder tolerant towards some PNG images + that do not correctly follow the PNG specification. This only supports errors + that are fixable, were found in images that are actually used on the web, and + are silently tolerated by other decoders as well. Currently only one such fix + is implemented: if a palette index is out of bounds given the palette size, + interpret it as opaque black. + By default this value is 0, which makes it stop with an error on such images. + */ + unsigned fix_png; + unsigned color_convert; /*whether to convert the PNG to the color type you want. Default: yes*/ + +#ifdef LODEPNG_COMPILE_ANCILLARY_CHUNKS + unsigned read_text_chunks; /*if false but remember_unknown_chunks is true, they're stored in the unknown chunks*/ + /*store all bytes from unknown chunks in the LodePNGInfo (off by default, useful for a png editor)*/ + unsigned remember_unknown_chunks; +#endif /*LODEPNG_COMPILE_ANCILLARY_CHUNKS*/ +} LodePNGDecoderSettings; + +void lodepng_decoder_settings_init(LodePNGDecoderSettings* settings); +#endif /*LODEPNG_COMPILE_DECODER*/ + +#ifdef LODEPNG_COMPILE_ENCODER +/*automatically use color type with less bits per pixel if losslessly possible. Default: AUTO*/ +typedef enum LodePNGFilterStrategy +{ + /*every filter at zero*/ + LFS_ZERO, + /*Use filter that gives minumum sum, as described in the official PNG filter heuristic.*/ + LFS_MINSUM, + /*Use the filter type that gives smallest Shannon entropy for this scanline. Depending + on the image, this is better or worse than minsum.*/ + LFS_ENTROPY, + /* + Brute-force-search PNG filters by compressing each filter for each scanline. + Experimental, very slow, and only rarely gives better compression than MINSUM. + */ + LFS_BRUTE_FORCE, + /*use predefined_filters buffer: you specify the filter type for each scanline*/ + LFS_PREDEFINED +} LodePNGFilterStrategy; + +/*automatically use color type with less bits per pixel if losslessly possible. Default: LAC_AUTO*/ +typedef enum LodePNGAutoConvert +{ + LAC_NO, /*use color type user requested*/ + LAC_ALPHA, /*use color type user requested, but if only opaque pixels and RGBA or grey+alpha, use RGB or grey*/ + LAC_AUTO, /*use PNG color type that can losslessly represent the uncompressed image the smallest possible*/ + /* + like AUTO, but do not choose 1, 2 or 4 bit per pixel types. + sometimes a PNG image compresses worse if less than 8 bits per pixels. + */ + LAC_AUTO_NO_NIBBLES, + /* + like AUTO, but never choose palette color type. For small images, encoding + the palette may take more bytes than what is gained. Note that AUTO also + already prevents encoding the palette for extremely small images, but that may + not be sufficient because due to the compression it cannot predict when to + switch. + */ + LAC_AUTO_NO_PALETTE, + LAC_AUTO_NO_NIBBLES_NO_PALETTE +} LodePNGAutoConvert; + + +/* +Automatically chooses color type that gives smallest amount of bits in the +output image, e.g. grey if there are only greyscale pixels, palette if there +are less than 256 colors, ... +The auto_convert parameter allows limiting it to not use palette, ... +*/ +unsigned lodepng_auto_choose_color(LodePNGColorMode* mode_out, + const unsigned char* image, unsigned w, unsigned h, + const LodePNGColorMode* mode_in, + LodePNGAutoConvert auto_convert); + +/*Settings for the encoder.*/ +typedef struct LodePNGEncoderSettings +{ + LodePNGCompressSettings zlibsettings; /*settings for the zlib encoder, such as window size, ...*/ + + LodePNGAutoConvert auto_convert; /*how to automatically choose output PNG color type, if at all*/ + + /*If true, follows the official PNG heuristic: if the PNG uses a palette or lower than + 8 bit depth, set all filters to zero. Otherwise use the filter_strategy. Note that to + completely follow the official PNG heuristic, filter_palette_zero must be true and + filter_strategy must be LFS_MINSUM*/ + unsigned filter_palette_zero; + /*Which filter strategy to use when not using zeroes due to filter_palette_zero. + Set filter_palette_zero to 0 to ensure always using your chosen strategy. Default: LFS_MINSUM*/ + LodePNGFilterStrategy filter_strategy; + /*used if filter_strategy is LFS_PREDEFINED. In that case, this must point to a buffer with + the same length as the amount of scanlines in the image, and each value must <= 5. You + have to cleanup this buffer, LodePNG will never free it. Don't forget that filter_palette_zero + must be set to 0 to ensure this is also used on palette or low bitdepth images.*/ + const unsigned char* predefined_filters; + + /*force creating a PLTE chunk if colortype is 2 or 6 (= a suggested palette). + If colortype is 3, PLTE is _always_ created.*/ + unsigned force_palette; +#ifdef LODEPNG_COMPILE_ANCILLARY_CHUNKS + /*add LodePNG identifier and version as a text chunk, for debugging*/ + unsigned add_id; + /*encode text chunks as zTXt chunks instead of tEXt chunks, and use compression in iTXt chunks*/ + unsigned text_compression; +#endif /*LODEPNG_COMPILE_ANCILLARY_CHUNKS*/ +} LodePNGEncoderSettings; + +void lodepng_encoder_settings_init(LodePNGEncoderSettings* settings); +#endif /*LODEPNG_COMPILE_ENCODER*/ + + +#if defined(LODEPNG_COMPILE_DECODER) || defined(LODEPNG_COMPILE_ENCODER) +/*The settings, state and information for extended encoding and decoding.*/ +typedef struct LodePNGState +{ +#ifdef LODEPNG_COMPILE_DECODER + LodePNGDecoderSettings decoder; /*the decoding settings*/ +#endif /*LODEPNG_COMPILE_DECODER*/ +#ifdef LODEPNG_COMPILE_ENCODER + LodePNGEncoderSettings encoder; /*the encoding settings*/ +#endif /*LODEPNG_COMPILE_ENCODER*/ + LodePNGColorMode info_raw; /*specifies the format in which you would like to get the raw pixel buffer*/ + LodePNGInfo info_png; /*info of the PNG image obtained after decoding*/ + unsigned error; +#ifdef LODEPNG_COMPILE_CPP + //For the lodepng::State subclass. + virtual ~LodePNGState(){} +#endif +} LodePNGState; + +/*init, cleanup and copy functions to use with this struct*/ +void lodepng_state_init(LodePNGState* state); +void lodepng_state_cleanup(LodePNGState* state); +void lodepng_state_copy(LodePNGState* dest, const LodePNGState* source); +#endif /* defined(LODEPNG_COMPILE_DECODER) || defined(LODEPNG_COMPILE_ENCODER) */ + +#ifdef LODEPNG_COMPILE_DECODER +/* +Same as lodepng_decode_memory, but uses a LodePNGState to allow custom settings and +getting much more information about the PNG image and color mode. +*/ +unsigned lodepng_decode(unsigned char** out, unsigned* w, unsigned* h, + LodePNGState* state, + const unsigned char* in, size_t insize); + +/* +Read the PNG header, but not the actual data. This returns only the information +that is in the header chunk of the PNG, such as width, height and color type. The +information is placed in the info_png field of the LodePNGState. +*/ +unsigned lodepng_inspect(unsigned* w, unsigned* h, + LodePNGState* state, + const unsigned char* in, size_t insize); +#endif /*LODEPNG_COMPILE_DECODER*/ + + +#ifdef LODEPNG_COMPILE_ENCODER +/*This function allocates the out buffer with standard malloc and stores the size in *outsize.*/ +unsigned lodepng_encode(unsigned char** out, size_t* outsize, + const unsigned char* image, unsigned w, unsigned h, + LodePNGState* state); +#endif /*LODEPNG_COMPILE_ENCODER*/ + +/* +The lodepng_chunk functions are normally not needed, except to traverse the +unknown chunks stored in the LodePNGInfo struct, or add new ones to it. +It also allows traversing the chunks of an encoded PNG file yourself. + +PNG standard chunk naming conventions: +First byte: uppercase = critical, lowercase = ancillary +Second byte: uppercase = public, lowercase = private +Third byte: must be uppercase +Fourth byte: uppercase = unsafe to copy, lowercase = safe to copy +*/ + +/*get the length of the data of the chunk. Total chunk length has 12 bytes more.*/ +unsigned lodepng_chunk_length(const unsigned char* chunk); + +/*puts the 4-byte type in null terminated string*/ +void lodepng_chunk_type(char type[5], const unsigned char* chunk); + +/*check if the type is the given type*/ +unsigned char lodepng_chunk_type_equals(const unsigned char* chunk, const char* type); + +/*0: it's one of the critical chunk types, 1: it's an ancillary chunk (see PNG standard)*/ +unsigned char lodepng_chunk_ancillary(const unsigned char* chunk); + +/*0: public, 1: private (see PNG standard)*/ +unsigned char lodepng_chunk_private(const unsigned char* chunk); + +/*0: the chunk is unsafe to copy, 1: the chunk is safe to copy (see PNG standard)*/ +unsigned char lodepng_chunk_safetocopy(const unsigned char* chunk); + +/*get pointer to the data of the chunk, where the input points to the header of the chunk*/ +unsigned char* lodepng_chunk_data(unsigned char* chunk); +const unsigned char* lodepng_chunk_data_const(const unsigned char* chunk); + +/*returns 0 if the crc is correct, 1 if it's incorrect (0 for OK as usual!)*/ +unsigned lodepng_chunk_check_crc(const unsigned char* chunk); + +/*generates the correct CRC from the data and puts it in the last 4 bytes of the chunk*/ +void lodepng_chunk_generate_crc(unsigned char* chunk); + +/*iterate to next chunks. don't use on IEND chunk, as there is no next chunk then*/ +unsigned char* lodepng_chunk_next(unsigned char* chunk); +const unsigned char* lodepng_chunk_next_const(const unsigned char* chunk); + +/* +Appends chunk to the data in out. The given chunk should already have its chunk header. +The out variable and outlength are updated to reflect the new reallocated buffer. +Returns error code (0 if it went ok) +*/ +unsigned lodepng_chunk_append(unsigned char** out, size_t* outlength, const unsigned char* chunk); + +/* +Appends new chunk to out. The chunk to append is given by giving its length, type +and data separately. The type is a 4-letter string. +The out variable and outlength are updated to reflect the new reallocated buffer. +Returne error code (0 if it went ok) +*/ +unsigned lodepng_chunk_create(unsigned char** out, size_t* outlength, unsigned length, + const char* type, const unsigned char* data); + + +/*Calculate CRC32 of buffer*/ +unsigned lodepng_crc32(const unsigned char* buf, size_t len); +#endif /*LODEPNG_COMPILE_PNG*/ + + +#ifdef LODEPNG_COMPILE_ZLIB +/* +This zlib part can be used independently to zlib compress and decompress a +buffer. It cannot be used to create gzip files however, and it only supports the +part of zlib that is required for PNG, it does not support dictionaries. +*/ + +#ifdef LODEPNG_COMPILE_DECODER +/*Inflate a buffer. Inflate is the decompression step of deflate. Out buffer must be freed after use.*/ +unsigned lodepng_inflate(unsigned char** out, size_t* outsize, + const unsigned char* in, size_t insize, + const LodePNGDecompressSettings* settings); + +/* +Decompresses Zlib data. Reallocates the out buffer and appends the data. The +data must be according to the zlib specification. +Either, *out must be NULL and *outsize must be 0, or, *out must be a valid +buffer and *outsize its size in bytes. out must be freed by user after usage. +*/ +unsigned lodepng_zlib_decompress(unsigned char** out, size_t* outsize, + const unsigned char* in, size_t insize, + const LodePNGDecompressSettings* settings); +#endif /*LODEPNG_COMPILE_DECODER*/ + +#ifdef LODEPNG_COMPILE_ENCODER +/* +Compresses data with Zlib. Reallocates the out buffer and appends the data. +Zlib adds a small header and trailer around the deflate data. +The data is output in the format of the zlib specification. +Either, *out must be NULL and *outsize must be 0, or, *out must be a valid +buffer and *outsize its size in bytes. out must be freed by user after usage. +*/ +unsigned lodepng_zlib_compress(unsigned char** out, size_t* outsize, + const unsigned char* in, size_t insize, + const LodePNGCompressSettings* settings); + +/* +Find length-limited Huffman code for given frequencies. This function is in the +public interface only for tests, it's used internally by lodepng_deflate. +*/ +unsigned lodepng_huffman_code_lengths(unsigned* lengths, const unsigned* frequencies, + size_t numcodes, unsigned maxbitlen); + +/*Compress a buffer with deflate. See RFC 1951. Out buffer must be freed after use.*/ +unsigned lodepng_deflate(unsigned char** out, size_t* outsize, + const unsigned char* in, size_t insize, + const LodePNGCompressSettings* settings); + +#endif /*LODEPNG_COMPILE_ENCODER*/ +#endif /*LODEPNG_COMPILE_ZLIB*/ + +#ifdef LODEPNG_COMPILE_DISK +/* +Load a file from disk into buffer. The function allocates the out buffer, and +after usage you should free it. +out: output parameter, contains pointer to loaded buffer. +outsize: output parameter, size of the allocated out buffer +filename: the path to the file to load +return value: error code (0 means ok) +*/ +unsigned lodepng_load_file(unsigned char** out, size_t* outsize, const char* filename); + +/* +Save a file from buffer to disk. Warning, if it exists, this function overwrites +the file without warning! +buffer: the buffer to write +buffersize: size of the buffer to write +filename: the path to the file to save to +return value: error code (0 means ok) +*/ +unsigned lodepng_save_file(const unsigned char* buffer, size_t buffersize, const char* filename); +#endif /*LODEPNG_COMPILE_DISK*/ + +#ifdef LODEPNG_COMPILE_CPP +//The LodePNG C++ wrapper uses std::vectors instead of manually allocated memory buffers. +namespace lodepng +{ +#ifdef LODEPNG_COMPILE_PNG +class State : public LodePNGState +{ + public: + State(); + State(const State& other); + virtual ~State(); + State& operator=(const State& other); +}; + +#ifdef LODEPNG_COMPILE_DECODER +//Same as other lodepng::decode, but using a State for more settings and information. +unsigned decode(std::vector<unsigned char>& out, unsigned& w, unsigned& h, + State& state, + const unsigned char* in, size_t insize); +unsigned decode(std::vector<unsigned char>& out, unsigned& w, unsigned& h, + State& state, + const std::vector<unsigned char>& in); +#endif /*LODEPNG_COMPILE_DECODER*/ + +#ifdef LODEPNG_COMPILE_ENCODER +//Same as other lodepng::encode, but using a State for more settings and information. +unsigned encode(std::vector<unsigned char>& out, + const unsigned char* in, unsigned w, unsigned h, + State& state); +unsigned encode(std::vector<unsigned char>& out, + const std::vector<unsigned char>& in, unsigned w, unsigned h, + State& state); +#endif /*LODEPNG_COMPILE_ENCODER*/ + +#ifdef LODEPNG_COMPILE_DISK +/* +Load a file from disk into an std::vector. If the vector is empty, then either +the file doesn't exist or is an empty file. +*/ +void load_file(std::vector<unsigned char>& buffer, const std::string& filename); + +/* +Save the binary data in an std::vector to a file on disk. The file is overwritten +without warning. +*/ +void save_file(const std::vector<unsigned char>& buffer, const std::string& filename); +#endif //LODEPNG_COMPILE_DISK +#endif //LODEPNG_COMPILE_PNG + +#ifdef LODEPNG_COMPILE_ZLIB +#ifdef LODEPNG_COMPILE_DECODER +//Zlib-decompress an unsigned char buffer +unsigned decompress(std::vector<unsigned char>& out, const unsigned char* in, size_t insize, + const LodePNGDecompressSettings& settings = lodepng_default_decompress_settings); + +//Zlib-decompress an std::vector +unsigned decompress(std::vector<unsigned char>& out, const std::vector<unsigned char>& in, + const LodePNGDecompressSettings& settings = lodepng_default_decompress_settings); +#endif //LODEPNG_COMPILE_DECODER + +#ifdef LODEPNG_COMPILE_ENCODER +//Zlib-compress an unsigned char buffer +unsigned compress(std::vector<unsigned char>& out, const unsigned char* in, size_t insize, + const LodePNGCompressSettings& settings = lodepng_default_compress_settings); + +//Zlib-compress an std::vector +unsigned compress(std::vector<unsigned char>& out, const std::vector<unsigned char>& in, + const LodePNGCompressSettings& settings = lodepng_default_compress_settings); +#endif //LODEPNG_COMPILE_ENCODER +#endif //LODEPNG_COMPILE_ZLIB +} //namespace lodepng +#endif /*LODEPNG_COMPILE_CPP*/ + +/* +TODO: +[.] test if there are no memory leaks or security exploits - done a lot but needs to be checked often +[.] check compatibility with vareous compilers - done but needs to be redone for every newer version +[X] converting color to 16-bit per channel types +[ ] read all public PNG chunk types (but never let the color profile and gamma ones touch RGB values) +[ ] make sure encoder generates no chunks with size > (2^31)-1 +[ ] partial decoding (stream processing) +[X] let the "isFullyOpaque" function check color keys and transparent palettes too +[X] better name for the variables "codes", "codesD", "codelengthcodes", "clcl" and "lldl" +[ ] don't stop decoding on errors like 69, 57, 58 (make warnings) +[ ] make option to choose if the raw image with non multiple of 8 bits per scanline should have padding bits or not +[ ] let the C++ wrapper catch exceptions coming from the standard library and return LodePNG error codes +*/ + +#endif /*LODEPNG_H inclusion guard*/ + +/* +LodePNG Documentation +--------------------- + +0. table of contents +-------------------- + + 1. about + 1.1. supported features + 1.2. features not supported + 2. C and C++ version + 3. security + 4. decoding + 5. encoding + 6. color conversions + 6.1. PNG color types + 6.2. color conversions + 6.3. padding bits + 6.4. A note about 16-bits per channel and endianness + 7. error values + 8. chunks and PNG editing + 9. compiler support + 10. examples + 10.1. decoder C++ example + 10.2. decoder C example + 11. changes + 12. contact information + + +1. about +-------- + +PNG is a file format to store raster images losslessly with good compression, +supporting different color types and alpha channel. + +LodePNG is a PNG codec according to the Portable Network Graphics (PNG) +Specification (Second Edition) - W3C Recommendation 10 November 2003. + +The specifications used are: + +*) Portable Network Graphics (PNG) Specification (Second Edition): + http://www.w3.org/TR/2003/REC-PNG-20031110 +*) RFC 1950 ZLIB Compressed Data Format version 3.3: + http://www.gzip.org/zlib/rfc-zlib.html +*) RFC 1951 DEFLATE Compressed Data Format Specification ver 1.3: + http://www.gzip.org/zlib/rfc-deflate.html + +The most recent version of LodePNG can currently be found at +http://lodev.org/lodepng/ + +LodePNG works both in C (ISO C90) and C++, with a C++ wrapper that adds +extra functionality. + +LodePNG exists out of two files: +-lodepng.h: the header file for both C and C++ +-lodepng.c(pp): give it the name lodepng.c or lodepng.cpp (or .cc) depending on your usage + +If you want to start using LodePNG right away without reading this doc, get the +examples from the LodePNG website to see how to use it in code, or check the +smaller examples in chapter 13 here. + +LodePNG is simple but only supports the basic requirements. To achieve +simplicity, the following design choices were made: There are no dependencies +on any external library. There are functions to decode and encode a PNG with +a single function call, and extended versions of these functions taking a +LodePNGState struct allowing to specify or get more information. By default +the colors of the raw image are always RGB or RGBA, no matter what color type +the PNG file uses. To read and write files, there are simple functions to +convert the files to/from buffers in memory. + +This all makes LodePNG suitable for loading textures in games, demos and small +programs, ... It's less suitable for full fledged image editors, loading PNGs +over network (it requires all the image data to be available before decoding can +begin), life-critical systems, ... + +1.1. supported features +----------------------- + +The following features are supported by the decoder: + +*) decoding of PNGs with any color type, bit depth and interlace mode, to a 24- or 32-bit color raw image, + or the same color type as the PNG +*) encoding of PNGs, from any raw image to 24- or 32-bit color, or the same color type as the raw image +*) Adam7 interlace and deinterlace for any color type +*) loading the image from harddisk or decoding it from a buffer from other sources than harddisk +*) support for alpha channels, including RGBA color model, translucent palettes and color keying +*) zlib decompression (inflate) +*) zlib compression (deflate) +*) CRC32 and ADLER32 checksums +*) handling of unknown chunks, allowing making a PNG editor that stores custom and unknown chunks. +*) the following chunks are supported (generated/interpreted) by both encoder and decoder: + IHDR: header information + PLTE: color palette + IDAT: pixel data + IEND: the final chunk + tRNS: transparency for palettized images + tEXt: textual information + zTXt: compressed textual information + iTXt: international textual information + bKGD: suggested background color + pHYs: physical dimensions + tIME: modification time + +1.2. features not supported +--------------------------- + +The following features are _not_ supported: + +*) some features needed to make a conformant PNG-Editor might be still missing. +*) partial loading/stream processing. All data must be available and is processed in one call. +*) The following public chunks are not supported but treated as unknown chunks by LodePNG + cHRM, gAMA, iCCP, sRGB, sBIT, hIST, sPLT + Some of these are not supported on purpose: LodePNG wants to provide the RGB values + stored in the pixels, not values modified by system dependent gamma or color models. + + +2. C and C++ version +-------------------- + +The C version uses buffers allocated with alloc that you need to free() +yourself. You need to use init and cleanup functions for each struct whenever +using a struct from the C version to avoid exploits and memory leaks. + +The C++ version has extra functions with std::vectors in the interface and the +lodepng::State class which is a LodePNGState with constructor and destructor. + +These files work without modification for both C and C++ compilers because all +the additional C++ code is in "#ifdef __cplusplus" blocks that make C-compilers +ignore it, and the C code is made to compile both with strict ISO C90 and C++. + +To use the C++ version, you need to rename the source file to lodepng.cpp +(instead of lodepng.c), and compile it with a C++ compiler. + +To use the C version, you need to rename the source file to lodepng.c (instead +of lodepng.cpp), and compile it with a C compiler. + + +3. Security +----------- + +Even if carefully designed, it's always possible that LodePNG contains possible +exploits. If you discover one, please let me know, and it will be fixed. + +When using LodePNG, care has to be taken with the C version of LodePNG, as well +as the C-style structs when working with C++. The following conventions are used +for all C-style structs: + +-if a struct has a corresponding init function, always call the init function when making a new one +-if a struct has a corresponding cleanup function, call it before the struct disappears to avoid memory leaks +-if a struct has a corresponding copy function, use the copy function instead of "=". + The destination must also be inited already. + + +4. Decoding +----------- + +Decoding converts a PNG compressed image to a raw pixel buffer. + +Most documentation on using the decoder is at its declarations in the header +above. For C, simple decoding can be done with functions such as +lodepng_decode32, and more advanced decoding can be done with the struct +LodePNGState and lodepng_decode. For C++, all decoding can be done with the +various lodepng::decode functions, and lodepng::State can be used for advanced +features. + +When using the LodePNGState, it uses the following fields for decoding: +*) LodePNGInfo info_png: it stores extra information about the PNG (the input) in here +*) LodePNGColorMode info_raw: here you can say what color mode of the raw image (the output) you want to get +*) LodePNGDecoderSettings decoder: you can specify a few extra settings for the decoder to use + +LodePNGInfo info_png +-------------------- + +After decoding, this contains extra information of the PNG image, except the actual +pixels, width and height because these are already gotten directly from the decoder +functions. + +It contains for example the original color type of the PNG image, text comments, +suggested background color, etc... More details about the LodePNGInfo struct are +at its declaration documentation. + +LodePNGColorMode info_raw +------------------------- + +When decoding, here you can specify which color type you want +the resulting raw image to be. If this is different from the colortype of the +PNG, then the decoder will automatically convert the result. This conversion +always works, except if you want it to convert a color PNG to greyscale or to +a palette with missing colors. + +By default, 32-bit color is used for the result. + +LodePNGDecoderSettings decoder +------------------------------ + +The settings can be used to ignore the errors created by invalid CRC and Adler32 +chunks, and to disable the decoding of tEXt chunks. + +There's also a setting color_convert, true by default. If false, no conversion +is done, the resulting data will be as it was in the PNG (after decompression) +and you'll have to puzzle the colors of the pixels together yourself using the +color type information in the LodePNGInfo. + + +5. Encoding +----------- + +Encoding converts a raw pixel buffer to a PNG compressed image. + +Most documentation on using the encoder is at its declarations in the header +above. For C, simple encoding can be done with functions such as +lodepng_encode32, and more advanced decoding can be done with the struct +LodePNGState and lodepng_encode. For C++, all encoding can be done with the +various lodepng::encode functions, and lodepng::State can be used for advanced +features. + +Like the decoder, the encoder can also give errors. However it gives less errors +since the encoder input is trusted, the decoder input (a PNG image that could +be forged by anyone) is not trusted. + +When using the LodePNGState, it uses the following fields for encoding: +*) LodePNGInfo info_png: here you specify how you want the PNG (the output) to be. +*) LodePNGColorMode info_raw: here you say what color type of the raw image (the input) has +*) LodePNGEncoderSettings encoder: you can specify a few settings for the encoder to use + +LodePNGInfo info_png +-------------------- + +When encoding, you use this the opposite way as when decoding: for encoding, +you fill in the values you want the PNG to have before encoding. By default it's +not needed to specify a color type for the PNG since it's automatically chosen, +but it's possible to choose it yourself given the right settings. + +The encoder will not always exactly match the LodePNGInfo struct you give, +it tries as close as possible. Some things are ignored by the encoder. The +encoder uses, for example, the following settings from it when applicable: +colortype and bitdepth, text chunks, time chunk, the color key, the palette, the +background color, the interlace method, unknown chunks, ... + +When encoding to a PNG with colortype 3, the encoder will generate a PLTE chunk. +If the palette contains any colors for which the alpha channel is not 255 (so +there are translucent colors in the palette), it'll add a tRNS chunk. + +LodePNGColorMode info_raw +------------------------- + +You specify the color type of the raw image that you give to the input here, +including a possible transparent color key and palette you happen to be using in +your raw image data. + +By default, 32-bit color is assumed, meaning your input has to be in RGBA +format with 4 bytes (unsigned chars) per pixel. + +LodePNGEncoderSettings encoder +------------------------------ + +The following settings are supported (some are in sub-structs): +*) auto_convert: when this option is enabled, the encoder will +automatically choose the smallest possible color mode (including color key) that +can encode the colors of all pixels without information loss. +*) btype: the block type for LZ77. 0 = uncompressed, 1 = fixed huffman tree, + 2 = dynamic huffman tree (best compression). Should be 2 for proper + compression. +*) use_lz77: whether or not to use LZ77 for compressed block types. Should be + true for proper compression. +*) windowsize: the window size used by the LZ77 encoder (1 - 32768). Has value + 2048 by default, but can be set to 32768 for better, but slow, compression. +*) force_palette: if colortype is 2 or 6, you can make the encoder write a PLTE + chunk if force_palette is true. This can used as suggested palette to convert + to by viewers that don't support more than 256 colors (if those still exist) +*) add_id: add text chunk "Encoder: LodePNG <version>" to the image. +*) text_compression: default 1. If 1, it'll store texts as zTXt instead of tEXt chunks. + zTXt chunks use zlib compression on the text. This gives a smaller result on + large texts but a larger result on small texts (such as a single program name). + It's all tEXt or all zTXt though, there's no separate setting per text yet. + + +6. color conversions +-------------------- + +An important thing to note about LodePNG, is that the color type of the PNG, and +the color type of the raw image, are completely independent. By default, when +you decode a PNG, you get the result as a raw image in the color type you want, +no matter whether the PNG was encoded with a palette, greyscale or RGBA color. +And if you encode an image, by default LodePNG will automatically choose the PNG +color type that gives good compression based on the values of colors and amount +of colors in the image. It can be configured to let you control it instead as +well, though. + +To be able to do this, LodePNG does conversions from one color mode to another. +It can convert from almost any color type to any other color type, except the +following conversions: RGB to greyscale is not supported, and converting to a +palette when the palette doesn't have a required color is not supported. This is +not supported on purpose: this is information loss which requires a color +reduction algorithm that is beyong the scope of a PNG encoder (yes, RGB to grey +is easy, but there are multiple ways if you want to give some channels more +weight). + +By default, when decoding, you get the raw image in 32-bit RGBA or 24-bit RGB +color, no matter what color type the PNG has. And by default when encoding, +LodePNG automatically picks the best color model for the output PNG, and expects +the input image to be 32-bit RGBA or 24-bit RGB. So, unless you want to control +the color format of the images yourself, you can skip this chapter. + +6.1. PNG color types +-------------------- + +A PNG image can have many color types, ranging from 1-bit color to 64-bit color, +as well as palettized color modes. After the zlib decompression and unfiltering +in the PNG image is done, the raw pixel data will have that color type and thus +a certain amount of bits per pixel. If you want the output raw image after +decoding to have another color type, a conversion is done by LodePNG. + +The PNG specification gives the following color types: + +0: greyscale, bit depths 1, 2, 4, 8, 16 +2: RGB, bit depths 8 and 16 +3: palette, bit depths 1, 2, 4 and 8 +4: greyscale with alpha, bit depths 8 and 16 +6: RGBA, bit depths 8 and 16 + +Bit depth is the amount of bits per pixel per color channel. So the total amount +of bits per pixel is: amount of channels * bitdepth. + +6.2. color conversions +---------------------- + +As explained in the sections about the encoder and decoder, you can specify +color types and bit depths in info_png and info_raw to change the default +behaviour. + +If, when decoding, you want the raw image to be something else than the default, +you need to set the color type and bit depth you want in the LodePNGColorMode, +or the parameters of the simple function of LodePNG you're using. + +If, when encoding, you use another color type than the default in the input +image, you need to specify its color type and bit depth in the LodePNGColorMode +of the raw image, or use the parameters of the simplefunction of LodePNG you're +using. + +If, when encoding, you don't want LodePNG to choose the output PNG color type +but control it yourself, you need to set auto_convert in the encoder settings +to LAC_NONE, and specify the color type you want in the LodePNGInfo of the +encoder. + +If you do any of the above, LodePNG may need to do a color conversion, which +follows the rules below, and may sometimes not be allowed. + +To avoid some confusion: +-the decoder converts from PNG to raw image +-the encoder converts from raw image to PNG +-the colortype and bitdepth in LodePNGColorMode info_raw, are those of the raw image +-the colortype and bitdepth in the color field of LodePNGInfo info_png, are those of the PNG +-when encoding, the color type in LodePNGInfo is ignored if auto_convert + is enabled, it is automatically generated instead +-when decoding, the color type in LodePNGInfo is set by the decoder to that of the original + PNG image, but it can be ignored since the raw image has the color type you requested instead +-if the color type of the LodePNGColorMode and PNG image aren't the same, a conversion + between the color types is done if the color types are supported. If it is not + supported, an error is returned. If the types are the same, no conversion is done. +-even though some conversions aren't supported, LodePNG supports loading PNGs from any + colortype and saving PNGs to any colortype, sometimes it just requires preparing + the raw image correctly before encoding. +-both encoder and decoder use the same color converter. + +Non supported color conversions: +-color to greyscale: no error is thrown, but the result will look ugly because +only the red channel is taken +-anything, to palette when that palette does not have that color in it: in this +case an error is thrown + +Supported color conversions: +-anything to 8-bit RGB, 8-bit RGBA, 16-bit RGB, 16-bit RGBA +-any grey or grey+alpha, to grey or grey+alpha +-anything to a palette, as long as the palette has the requested colors in it +-removing alpha channel +-higher to smaller bitdepth, and vice versa + +If you want no color conversion to be done: +-In the encoder, you can make it save a PNG with any color type by giving the +raw color mode and LodePNGInfo the same color mode, and setting auto_convert to +LAC_NO. +-In the decoder, you can make it store the pixel data in the same color type +as the PNG has, by setting the color_convert setting to false. Settings in +info_raw are then ignored. + +The function lodepng_convert does the color conversion. It is available in the +interface but normally isn't needed since the encoder and decoder already call +it. + +6.3. padding bits +----------------- + +In the PNG file format, if a less than 8-bit per pixel color type is used and the scanlines +have a bit amount that isn't a multiple of 8, then padding bits are used so that each +scanline starts at a fresh byte. But that is NOT true for the LodePNG raw input and output. +The raw input image you give to the encoder, and the raw output image you get from the decoder +will NOT have these padding bits, e.g. in the case of a 1-bit image with a width +of 7 pixels, the first pixel of the second scanline will the the 8th bit of the first byte, +not the first bit of a new byte. + +6.4. A note about 16-bits per channel and endianness +---------------------------------------------------- + +LodePNG uses unsigned char arrays for 16-bit per channel colors too, just like +for any other color format. The 16-bit values are stored in big endian (most +significant byte first) in these arrays. This is the opposite order of the +little endian used by x86 CPU's. + +LodePNG always uses big endian because the PNG file format does so internally. +Conversions to other formats than PNG uses internally are not supported by +LodePNG on purpose, there are myriads of formats, including endianness of 16-bit +colors, the order in which you store R, G, B and A, and so on. Supporting and +converting to/from all that is outside the scope of LodePNG. + +This may mean that, depending on your use case, you may want to convert the big +endian output of LodePNG to little endian with a for loop. This is certainly not +always needed, many applications and libraries support big endian 16-bit colors +anyway, but it means you cannot simply cast the unsigned char* buffer to an +unsigned short* buffer on x86 CPUs. + + +7. error values +--------------- + +All functions in LodePNG that return an error code, return 0 if everything went +OK, or a non-zero code if there was an error. + +The meaning of the LodePNG error values can be retrieved with the function +lodepng_error_text: given the numerical error code, it returns a description +of the error in English as a string. + +Check the implementation of lodepng_error_text to see the meaning of each code. + + +8. chunks and PNG editing +------------------------- + +If you want to add extra chunks to a PNG you encode, or use LodePNG for a PNG +editor that should follow the rules about handling of unknown chunks, or if your +program is able to read other types of chunks than the ones handled by LodePNG, +then that's possible with the chunk functions of LodePNG. + +A PNG chunk has the following layout: + +4 bytes length +4 bytes type name +length bytes data +4 bytes CRC + +8.1. iterating through chunks +----------------------------- + +If you have a buffer containing the PNG image data, then the first chunk (the +IHDR chunk) starts at byte number 8 of that buffer. The first 8 bytes are the +signature of the PNG and are not part of a chunk. But if you start at byte 8 +then you have a chunk, and can check the following things of it. + +NOTE: none of these functions check for memory buffer boundaries. To avoid +exploits, always make sure the buffer contains all the data of the chunks. +When using lodepng_chunk_next, make sure the returned value is within the +allocated memory. + +unsigned lodepng_chunk_length(const unsigned char* chunk): + +Get the length of the chunk's data. The total chunk length is this length + 12. + +void lodepng_chunk_type(char type[5], const unsigned char* chunk): +unsigned char lodepng_chunk_type_equals(const unsigned char* chunk, const char* type): + +Get the type of the chunk or compare if it's a certain type + +unsigned char lodepng_chunk_critical(const unsigned char* chunk): +unsigned char lodepng_chunk_private(const unsigned char* chunk): +unsigned char lodepng_chunk_safetocopy(const unsigned char* chunk): + +Check if the chunk is critical in the PNG standard (only IHDR, PLTE, IDAT and IEND are). +Check if the chunk is private (public chunks are part of the standard, private ones not). +Check if the chunk is safe to copy. If it's not, then, when modifying data in a critical +chunk, unsafe to copy chunks of the old image may NOT be saved in the new one if your +program doesn't handle that type of unknown chunk. + +unsigned char* lodepng_chunk_data(unsigned char* chunk): +const unsigned char* lodepng_chunk_data_const(const unsigned char* chunk): + +Get a pointer to the start of the data of the chunk. + +unsigned lodepng_chunk_check_crc(const unsigned char* chunk): +void lodepng_chunk_generate_crc(unsigned char* chunk): + +Check if the crc is correct or generate a correct one. + +unsigned char* lodepng_chunk_next(unsigned char* chunk): +const unsigned char* lodepng_chunk_next_const(const unsigned char* chunk): + +Iterate to the next chunk. This works if you have a buffer with consecutive chunks. Note that these +functions do no boundary checking of the allocated data whatsoever, so make sure there is enough +data available in the buffer to be able to go to the next chunk. + +unsigned lodepng_chunk_append(unsigned char** out, size_t* outlength, const unsigned char* chunk): +unsigned lodepng_chunk_create(unsigned char** out, size_t* outlength, unsigned length, + const char* type, const unsigned char* data): + +These functions are used to create new chunks that are appended to the data in *out that has +length *outlength. The append function appends an existing chunk to the new data. The create +function creates a new chunk with the given parameters and appends it. Type is the 4-letter +name of the chunk. + +8.2. chunks in info_png +----------------------- + +The LodePNGInfo struct contains fields with the unknown chunk in it. It has 3 +buffers (each with size) to contain 3 types of unknown chunks: +the ones that come before the PLTE chunk, the ones that come between the PLTE +and the IDAT chunks, and the ones that come after the IDAT chunks. +It's necessary to make the distionction between these 3 cases because the PNG +standard forces to keep the ordering of unknown chunks compared to the critical +chunks, but does not force any other ordering rules. + +info_png.unknown_chunks_data[0] is the chunks before PLTE +info_png.unknown_chunks_data[1] is the chunks after PLTE, before IDAT +info_png.unknown_chunks_data[2] is the chunks after IDAT + +The chunks in these 3 buffers can be iterated through and read by using the same +way described in the previous subchapter. + +When using the decoder to decode a PNG, you can make it store all unknown chunks +if you set the option settings.remember_unknown_chunks to 1. By default, this +option is off (0). + +The encoder will always encode unknown chunks that are stored in the info_png. +If you need it to add a particular chunk that isn't known by LodePNG, you can +use lodepng_chunk_append or lodepng_chunk_create to the chunk data in +info_png.unknown_chunks_data[x]. + +Chunks that are known by LodePNG should not be added in that way. E.g. to make +LodePNG add a bKGD chunk, set background_defined to true and add the correct +parameters there instead. + + +9. compiler support +------------------- + +No libraries other than the current standard C library are needed to compile +LodePNG. For the C++ version, only the standard C++ library is needed on top. +Add the files lodepng.c(pp) and lodepng.h to your project, include +lodepng.h where needed, and your program can read/write PNG files. + +If performance is important, use optimization when compiling! For both the +encoder and decoder, this makes a large difference. + +Make sure that LodePNG is compiled with the same compiler of the same version +and with the same settings as the rest of the program, or the interfaces with +std::vectors and std::strings in C++ can be incompatible. + +CHAR_BITS must be 8 or higher, because LodePNG uses unsigned chars for octets. + +*) gcc and g++ + +LodePNG is developed in gcc so this compiler is natively supported. It gives no +warnings with compiler options "-Wall -Wextra -pedantic -ansi", with gcc and g++ +version 4.7.1 on Linux, 32-bit and 64-bit. + +*) Mingw + +The Mingw compiler (a port of gcc) for Windows is fully supported by LodePNG. + +*) Visual Studio 2005 and up, Visual C++ Express Edition 2005 and up + +Visual Studio may give warnings about 'fopen' being deprecated. A multiplatform library +can't support the proposed Visual Studio alternative however, so LodePNG keeps using +fopen. If you don't want to see the deprecated warnings, put this on top of lodepng.h +before the inclusions: +#define _CRT_SECURE_NO_DEPRECATE + +Other than the above warnings, LodePNG should be warning-free with warning +level 3 (W3). Warning level 4 (W4) will give warnings about integer conversions. +I'm not planning to resolve these warnings. To get rid of them, let Visual +Studio use warning level W3 for lodepng.cpp only: right click lodepng.cpp, +Properties, C/C++, General, Warning Level: Level 3 (/W3). + +Visual Studio may want "stdafx.h" files to be included in each source file and +give an error "unexpected end of file while looking for precompiled header". +That is not standard C++ and will not be added to the stock LodePNG. You can +disable it for lodepng.cpp only by right clicking it, Properties, C/C++, +Precompiled Headers, and set it to Not Using Precompiled Headers there. + +*) Visual Studio 6.0 + +LodePNG support for Visual Studio 6.0 is not guaranteed because VS6 doesn't +follow the C++ standard correctly. + +*) Comeau C/C++ + +Vesion 20070107 compiles without problems on the Comeau C/C++ Online Test Drive +at http://www.comeaucomputing.com/tryitout in both C90 and C++ mode. + +*) Compilers on Macintosh + +LodePNG has been reported to work both with the gcc and LLVM for Macintosh, both +for C and C++. + +*) Other Compilers + +If you encounter problems on other compilers, feel free to let me know and I may +try to fix it if the compiler is modern standards complient. + + +10. examples +------------ + +This decoder example shows the most basic usage of LodePNG. More complex +examples can be found on the LodePNG website. + +10.1. decoder C++ example +------------------------- + +#include "lodepng.h" +#include <iostream> + +int main(int argc, char *argv[]) +{ + const char* filename = argc > 1 ? argv[1] : "test.png"; + + //load and decode + std::vector<unsigned char> image; + unsigned width, height; + unsigned error = lodepng::decode(image, width, height, filename); + + //if there's an error, display it + if(error) std::cout << "decoder error " << error << ": " << lodepng_error_text(error) << std::endl; + + //the pixels are now in the vector "image", 4 bytes per pixel, ordered RGBARGBA..., use it as texture, draw it, ... +} + +10.2. decoder C example +----------------------- + +#include "lodepng.h" + +int main(int argc, char *argv[]) +{ + unsigned error; + unsigned char* image; + size_t width, height; + const char* filename = argc > 1 ? argv[1] : "test.png"; + + error = lodepng_decode32_file(&image, &width, &height, filename); + + if(error) printf("decoder error %u: %s\n", error, lodepng_error_text(error)); + + / * use image here * / + + free(image); + return 0; +} + + +11. changes +----------- + +The version number of LodePNG is the date of the change given in the format +yyyymmdd. + +Some changes aren't backwards compatible. Those are indicated with a (!) +symbol. + +*) 22 dec 2013: Power of two windowsize required for optimization. +*) 15 apr 2013: Fixed bug with LAC_ALPHA and color key. +*) 25 mar 2013: Added an optional feature to ignore some PNG errors (fix_png). +*) 11 mar 2013 (!): Bugfix with custom free. Changed from "my" to "lodepng_" + prefix for the custom allocators and made it possible with a new #define to + use custom ones in your project without needing to change lodepng's code. +*) 28 jan 2013: Bugfix with color key. +*) 27 okt 2012: Tweaks in text chunk keyword length error handling. +*) 8 okt 2012 (!): Added new filter strategy (entropy) and new auto color mode. + (no palette). Better deflate tree encoding. New compression tweak settings. + Faster color conversions while decoding. Some internal cleanups. +*) 23 sep 2012: Reduced warnings in Visual Studio a little bit. +*) 1 sep 2012 (!): Removed #define's for giving custom (de)compression functions + and made it work with function pointers instead. +*) 23 jun 2012: Added more filter strategies. Made it easier to use custom alloc + and free functions and toggle #defines from compiler flags. Small fixes. +*) 6 may 2012 (!): Made plugging in custom zlib/deflate functions more flexible. +*) 22 apr 2012 (!): Made interface more consistent, renaming a lot. Removed + redundant C++ codec classes. Reduced amount of structs. Everything changed, + but it is cleaner now imho and functionality remains the same. Also fixed + several bugs and shrinked the implementation code. Made new samples. +*) 6 nov 2011 (!): By default, the encoder now automatically chooses the best + PNG color model and bit depth, based on the amount and type of colors of the + raw image. For this, autoLeaveOutAlphaChannel replaced by auto_choose_color. +*) 9 okt 2011: simpler hash chain implementation for the encoder. +*) 8 sep 2011: lz77 encoder lazy matching instead of greedy matching. +*) 23 aug 2011: tweaked the zlib compression parameters after benchmarking. + A bug with the PNG filtertype heuristic was fixed, so that it chooses much + better ones (it's quite significant). A setting to do an experimental, slow, + brute force search for PNG filter types is added. +*) 17 aug 2011 (!): changed some C zlib related function names. +*) 16 aug 2011: made the code less wide (max 120 characters per line). +*) 17 apr 2011: code cleanup. Bugfixes. Convert low to 16-bit per sample colors. +*) 21 feb 2011: fixed compiling for C90. Fixed compiling with sections disabled. +*) 11 dec 2010: encoding is made faster, based on suggestion by Peter Eastman + to optimize long sequences of zeros. +*) 13 nov 2010: added LodePNG_InfoColor_hasPaletteAlpha and + LodePNG_InfoColor_canHaveAlpha functions for convenience. +*) 7 nov 2010: added LodePNG_error_text function to get error code description. +*) 30 okt 2010: made decoding slightly faster +*) 26 okt 2010: (!) changed some C function and struct names (more consistent). + Reorganized the documentation and the declaration order in the header. +*) 08 aug 2010: only changed some comments and external samples. +*) 05 jul 2010: fixed bug thanks to warnings in the new gcc version. +*) 14 mar 2010: fixed bug where too much memory was allocated for char buffers. +*) 02 sep 2008: fixed bug where it could create empty tree that linux apps could + read by ignoring the problem but windows apps couldn't. +*) 06 jun 2008: added more error checks for out of memory cases. +*) 26 apr 2008: added a few more checks here and there to ensure more safety. +*) 06 mar 2008: crash with encoding of strings fixed +*) 02 feb 2008: support for international text chunks added (iTXt) +*) 23 jan 2008: small cleanups, and #defines to divide code in sections +*) 20 jan 2008: support for unknown chunks allowing using LodePNG for an editor. +*) 18 jan 2008: support for tIME and pHYs chunks added to encoder and decoder. +*) 17 jan 2008: ability to encode and decode compressed zTXt chunks added + Also vareous fixes, such as in the deflate and the padding bits code. +*) 13 jan 2008: Added ability to encode Adam7-interlaced images. Improved + filtering code of encoder. +*) 07 jan 2008: (!) changed LodePNG to use ISO C90 instead of C++. A + C++ wrapper around this provides an interface almost identical to before. + Having LodePNG be pure ISO C90 makes it more portable. The C and C++ code + are together in these files but it works both for C and C++ compilers. +*) 29 dec 2007: (!) changed most integer types to unsigned int + other tweaks +*) 30 aug 2007: bug fixed which makes this Borland C++ compatible +*) 09 aug 2007: some VS2005 warnings removed again +*) 21 jul 2007: deflate code placed in new namespace separate from zlib code +*) 08 jun 2007: fixed bug with 2- and 4-bit color, and small interlaced images +*) 04 jun 2007: improved support for Visual Studio 2005: crash with accessing + invalid std::vector element [0] fixed, and level 3 and 4 warnings removed +*) 02 jun 2007: made the encoder add a tag with version by default +*) 27 may 2007: zlib and png code separated (but still in the same file), + simple encoder/decoder functions added for more simple usage cases +*) 19 may 2007: minor fixes, some code cleaning, new error added (error 69), + moved some examples from here to lodepng_examples.cpp +*) 12 may 2007: palette decoding bug fixed +*) 24 apr 2007: changed the license from BSD to the zlib license +*) 11 mar 2007: very simple addition: ability to encode bKGD chunks. +*) 04 mar 2007: (!) tEXt chunk related fixes, and support for encoding + palettized PNG images. Plus little interface change with palette and texts. +*) 03 mar 2007: Made it encode dynamic Huffman shorter with repeat codes. + Fixed a bug where the end code of a block had length 0 in the Huffman tree. +*) 26 feb 2007: Huffman compression with dynamic trees (BTYPE 2) now implemented + and supported by the encoder, resulting in smaller PNGs at the output. +*) 27 jan 2007: Made the Adler-32 test faster so that a timewaste is gone. +*) 24 jan 2007: gave encoder an error interface. Added color conversion from any + greyscale type to 8-bit greyscale with or without alpha. +*) 21 jan 2007: (!) Totally changed the interface. It allows more color types + to convert to and is more uniform. See the manual for how it works now. +*) 07 jan 2007: Some cleanup & fixes, and a few changes over the last days: + encode/decode custom tEXt chunks, separate classes for zlib & deflate, and + at last made the decoder give errors for incorrect Adler32 or Crc. +*) 01 jan 2007: Fixed bug with encoding PNGs with less than 8 bits per channel. +*) 29 dec 2006: Added support for encoding images without alpha channel, and + cleaned out code as well as making certain parts faster. +*) 28 dec 2006: Added "Settings" to the encoder. +*) 26 dec 2006: The encoder now does LZ77 encoding and produces much smaller files now. + Removed some code duplication in the decoder. Fixed little bug in an example. +*) 09 dec 2006: (!) Placed output parameters of public functions as first parameter. + Fixed a bug of the decoder with 16-bit per color. +*) 15 okt 2006: Changed documentation structure +*) 09 okt 2006: Encoder class added. It encodes a valid PNG image from the + given image buffer, however for now it's not compressed. +*) 08 sep 2006: (!) Changed to interface with a Decoder class +*) 30 jul 2006: (!) LodePNG_InfoPng , width and height are now retrieved in different + way. Renamed decodePNG to decodePNGGeneric. +*) 29 jul 2006: (!) Changed the interface: image info is now returned as a + struct of type LodePNG::LodePNG_Info, instead of a vector, which was a bit clumsy. +*) 28 jul 2006: Cleaned the code and added new error checks. + Corrected terminology "deflate" into "inflate". +*) 23 jun 2006: Added SDL example in the documentation in the header, this + example allows easy debugging by displaying the PNG and its transparency. +*) 22 jun 2006: (!) Changed way to obtain error value. Added + loadFile function for convenience. Made decodePNG32 faster. +*) 21 jun 2006: (!) Changed type of info vector to unsigned. + Changed position of palette in info vector. Fixed an important bug that + happened on PNGs with an uncompressed block. +*) 16 jun 2006: Internally changed unsigned into unsigned where + needed, and performed some optimizations. +*) 07 jun 2006: (!) Renamed functions to decodePNG and placed them + in LodePNG namespace. Changed the order of the parameters. Rewrote the + documentation in the header. Renamed files to lodepng.cpp and lodepng.h +*) 22 apr 2006: Optimized and improved some code +*) 07 sep 2005: (!) Changed to std::vector interface +*) 12 aug 2005: Initial release (C++, decoder only) + + +12. contact information +----------------------- + +Feel free to contact me with suggestions, problems, comments, ... concerning +LodePNG. If you encounter a PNG image that doesn't work properly with this +decoder, feel free to send it and I'll use it to find and fix the problem. + +My email address is (puzzle the account and domain together with an @ symbol): +Domain: gmail dot com. +Account: lode dot vandevenne. + + +Copyright (c) 2005-2013 Lode Vandevenne +*/
diff -r 000000000000 -r b567d56a59d7 main.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/main.cpp Fri Oct 03 13:30:09 2014 +0000 @@ -0,0 +1,46 @@ +/****************************************************************************** + * Includes + *****************************************************************************/ +#include "mbed.h" + +#include "TestDisplay.h" + +/****************************************************************************** + * Typedefs and defines + *****************************************************************************/ + + +/****************************************************************************** + * Local variables + *****************************************************************************/ + +DigitalOut myled(LED1); + +/****************************************************************************** + * Local functions + *****************************************************************************/ + +/* + * Test program for the 4.3" and 5" displays. This test is supposed to run + * on a LPC4088QSB board on an LPC4088 Experiment Base Board. + */ + + +int main() { + printf("\n" + "---\n" + "Display Demo Program for 4.3 and 5 inch display on the LPC4088 Experiment Base Board\n" + "Build Date: " __DATE__ " at " __TIME__ "\n" + "\n"); + + //TestDisplay display(TestDisplay::TFT_4_3); + TestDisplay display(TestDisplay::TFT_5); + display.runTest(); + + while(1) { + myled = 1; + wait(0.2); + myled = 0; + wait(0.2); + } +}
diff -r 000000000000 -r b567d56a59d7 mbed.bld --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mbed.bld Fri Oct 03 13:30:09 2014 +0000 @@ -0,0 +1,1 @@ +http://mbed.org/users/mbed_official/code/mbed/builds/552587b429a1 \ No newline at end of file