rust: Unswizzle framebuffer for ST7789V display

By swapping the endian in RAMCTRL as well as in the SPI driver,
the frame format can be coerced into the "normal" order of pixels in
little endian, `0xBBBBAAAA` instead of `0xAAAABBBB`. This allows
seamless casting from an array of `u16`.

Accessing as 32-bit units might still be desirable for performance, but
it is a lesser worry now.

Note that a 32-bit alignment constraint still does hold for DMA.
This commit is contained in:
Wladimir J. van der Laan 2020-11-06 06:32:23 +00:00
parent b847235d3e
commit 4f2c51e00d
10 changed files with 163 additions and 182 deletions

View File

@ -16,7 +16,7 @@ use k210_hal::stdout::Stdout;
use k210_hal::pac::Peripherals; use k210_hal::pac::Peripherals;
use k210_shared::board::def::{io, DISP_HEIGHT, DISP_PIXELS, DISP_WIDTH}; use k210_shared::board::def::{io, DISP_HEIGHT, DISP_PIXELS, DISP_WIDTH};
use k210_shared::board::lcd::{self, LCD, LCDHL}; use k210_shared::board::lcd::{self, LCD, LCDHL};
use k210_shared::board::lcd_render::ScreenImage; use k210_shared::board::lcd_render::{AsU16, ScreenImage};
use k210_shared::soc::dmac::{dma_channel, DMACExt}; use k210_shared::soc::dmac::{dma_channel, DMACExt};
use k210_shared::soc::fpioa; use k210_shared::soc::fpioa;
use k210_shared::soc::sleep::usleep; use k210_shared::soc::sleep::usleep;
@ -69,13 +69,12 @@ impl Drawing<Rgb565> for Display {
where where
T: IntoIterator<Item = Pixel<Rgb565>>, T: IntoIterator<Item = Pixel<Rgb565>>,
{ {
let data = let data = self.data.as_u16_slice_mut();
unsafe { core::slice::from_raw_parts_mut(self.data.as_ptr() as *mut u16, DISP_PIXELS) };
for Pixel(coord, color) in item { for Pixel(coord, color) in item {
let x = coord[0] as usize; let x = coord[0] as usize;
let y = coord[1] as usize; let y = coord[1] as usize;
if x < (DISP_WIDTH as usize) && y < (DISP_HEIGHT as usize) { if x < (DISP_WIDTH as usize) && y < (DISP_HEIGHT as usize) {
let index = (x ^ 1) + (y * (DISP_WIDTH as usize)); let index = x + (y * (DISP_WIDTH as usize));
data[index] = RawU16::from(color).into_inner(); data[index] = RawU16::from(color).into_inner();
} }
} }

View File

@ -19,7 +19,7 @@ for y in range(BLK_SIZE//2):
outb = [] outb = []
for y in range(BLK_SIZE): for y in range(BLK_SIZE):
outb.append([((rgb565(*image[y][x*2+0])<<16) | rgb565(*image[y][x*2+1])) for x in range(BLK_SIZE//2)]) outb.append([((rgb565(*image[y][x*2+0]) << 0) | (rgb565(*image[y][x*2+1]) << 16)) for x in range(BLK_SIZE//2)])
print('pub static BLOCK_SPRITE: [[u32; 4];8] = [') print('pub static BLOCK_SPRITE: [[u32; 4];8] = [')
for y in outb: for y in outb:

View File

@ -10,6 +10,7 @@ use k210_hal::stdout::Stdout;
use k210_shared::board::def::{io,DISP_WIDTH,DISP_HEIGHT,DISP_PIXELS,NS2009_SLV_ADDR,NS2009_CAL,NS2009_ADDR_BITS,NS2009_CLK}; use k210_shared::board::def::{io,DISP_WIDTH,DISP_HEIGHT,DISP_PIXELS,NS2009_SLV_ADDR,NS2009_CAL,NS2009_ADDR_BITS,NS2009_CLK};
use k210_shared::board::lcd::{LCD,LCDHL,self}; use k210_shared::board::lcd::{LCD,LCDHL,self};
use k210_shared::board::lcd_colors; use k210_shared::board::lcd_colors;
use k210_shared::board::lcd_render::ScreenImage;
use k210_shared::board::ns2009::TouchScreen; use k210_shared::board::ns2009::TouchScreen;
use k210_shared::soc::dmac::{DMACExt, dma_channel}; use k210_shared::soc::dmac::{DMACExt, dma_channel};
use k210_shared::soc::fpioa; use k210_shared::soc::fpioa;
@ -23,12 +24,6 @@ pub const BLK_SIZE: usize = 8;
pub const GRID_WIDTH: usize = (DISP_WIDTH as usize) / BLK_SIZE; pub const GRID_WIDTH: usize = (DISP_WIDTH as usize) / BLK_SIZE;
pub const GRID_HEIGHT: usize = (DISP_HEIGHT as usize) / BLK_SIZE; pub const GRID_HEIGHT: usize = (DISP_HEIGHT as usize) / BLK_SIZE;
/** Array for representing an image of the entire screen.
* This is an array of DISP_WIDTH / 2 × DISP_HEIGHT, each two horizontally consecutive
* pixels are encoded in a u32 with `(a << 16)|b`.
*/
pub type ScreenImage = [u32; DISP_PIXELS / 2];
/** Universe abstraction */ /** Universe abstraction */
struct Universe { struct Universe {
state: [[bool; GRID_WIDTH*GRID_HEIGHT]; 2], state: [[bool; GRID_WIDTH*GRID_HEIGHT]; 2],
@ -129,12 +124,12 @@ fn io_set_power() {
/** How to show a block */ /** How to show a block */
pub static BLOCK_SPRITE: [[u32; 4];8] = [ pub static BLOCK_SPRITE: [[u32; 4];8] = [
[0x38c738c7, 0x38c738c7, 0x38c738c7, 0x38c738c7], [0x38c738c7, 0x38c738c7, 0x38c738c7, 0x38c738c7],
[0x38c7718e, 0x718e718e, 0x718e718e, 0x718e38c7], [0x718e38c7, 0x718e718e, 0x718e718e, 0x38c7718e],
[0x38c7718e, 0xaa55aa55, 0xaa55aa55, 0x718e38c7], [0x718e38c7, 0xaa55aa55, 0xaa55aa55, 0x38c7718e],
[0x38c7718e, 0xaa55e31c, 0xe31caa55, 0x718e38c7], [0x718e38c7, 0xe31caa55, 0xaa55e31c, 0x38c7718e],
[0x38c7718e, 0xaa55e31c, 0xe31caa55, 0x718e38c7], [0x718e38c7, 0xe31caa55, 0xaa55e31c, 0x38c7718e],
[0x38c7718e, 0xaa55aa55, 0xaa55aa55, 0x718e38c7], [0x718e38c7, 0xaa55aa55, 0xaa55aa55, 0x38c7718e],
[0x38c7718e, 0x718e718e, 0x718e718e, 0x718e38c7], [0x718e38c7, 0x718e718e, 0x718e718e, 0x38c7718e],
[0x38c738c7, 0x38c738c7, 0x38c738c7, 0x38c738c7], [0x38c738c7, 0x38c738c7, 0x38c738c7, 0x38c738c7],
]; ];

View File

@ -35,8 +35,8 @@ def encode_block(block):
for yi in range(0, BH): for yi in range(0, BH):
for xi in range(0, BW//2): for xi in range(0, BW//2):
out.append( out.append(
(rgb565(block[yi][xi*2 + 0]) << 16) | (rgb565(block[yi][xi*2 + 0]) << 0) |
rgb565(block[yi][xi*2 + 1])) rgb565(block[yi][xi*2 + 1]) << 16)
return tuple(out) return tuple(out)
assert(len(sys.argv) >= 3) assert(len(sys.argv) >= 3)

View File

@ -145,18 +145,8 @@ impl Console {
for yi in 0..8 { for yi in 0..8 {
let val = glyph[yi]; let val = glyph[yi];
for xih in 0..4 { for xih in 0..4 {
image[image_ofs + xih] = (u32::from(if val & (1 << (xih * 2 + 0)) != 0 { image[image_ofs + xih] = (u32::from(if val & (1 << (xih * 2 + 0)) != 0 { fg } else { bg }) << 0) |
fg (u32::from(if val & (1 << (xih * 2 + 1)) != 0 { fg } else { bg }) << 16);
} else {
bg
})
<< 16)
| (u32::from(if val & (1 << (xih * 2 + 1)) != 0 {
fg
} else {
bg
})
<< 0);
} }
image_ofs += usize::from(DISP_WIDTH) / 2; image_ofs += usize::from(DISP_WIDTH) / 2;
} }

View File

@ -2,111 +2,111 @@
#[rustfmt::skip] #[rustfmt::skip]
pub static FONT: [[u32; 32]; 106] = [ pub static FONT: [[u32; 32]; 106] = [
[0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, ], [0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, ],
[0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x0000ffff, 0xffffffff, 0x00000000, 0x00000000, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xff9dffbe, 0xffffffff, 0xffffffff, 0xffffffff, 0xf4cef3a5, 0xf3c6f408, 0xf48cf510, 0xffffffff, 0xfdd4f384, 0xf384f384, 0xf384f384, 0xffffffff, 0xfed9f384, 0xf384f384, 0xf384f384, ], [0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xffff0000, 0xffffffff, 0x00000000, 0x00000000, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffbeff9d, 0xffffffff, 0xffffffff, 0xffffffff, 0xf3a5f4ce, 0xf408f3c6, 0xf510f48c, 0xffffffff, 0xf384fdd4, 0xf384f384, 0xf384f384, 0xffffffff, 0xf384fed9, 0xf384f384, 0xf384f384, ],
[0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x0000ffff, 0x00000000, 0x00000000, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffdd, 0xffffffff, 0xffffffff, 0xffffffff, 0xffbbfee4, 0xf572fdb3, 0xfe16fe78, 0xfefaffff, 0xffffffbb, 0xf384f384, 0xf384f384, 0xf384f4ce, 0xff5cffff, 0xf384f384, 0xf384f384, 0xf384f384, 0xf3a5fdd4, ], [0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xffff0000, 0x00000000, 0x00000000, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffddffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xfee4ffbb, 0xfdb3f572, 0xfe78fe16, 0xfffffefa, 0xffbbffff, 0xf384f384, 0xf384f384, 0xf4cef384, 0xffffff5c, 0xf384f384, 0xf384f384, 0xf384f384, 0xfdd4f3a5, ],
[0x0000ffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xfffeffff, 0xffffffff, 0xffffffff, 0xff98ff0b, 0xfec1fec3, 0xff0eff54, 0xff76feea, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfee9fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xffddff2f, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xff9dffff, 0xffdcff98, 0xff54ff0e, 0xfee5fec0, ], [0xffff0000, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xfffffffe, 0xffffffff, 0xffffffff, 0xff0bff98, 0xfec3fec1, 0xff54ff0e, 0xfeeaff76, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fee9, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xff2fffdd, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xffffff9d, 0xff98ffdc, 0xff0eff54, 0xfec0fee5, ],
[0xffffffff, 0xffff0000, 0x00000000, 0x00000000, 0xffffffff, 0xffffffff, 0xffffffff, 0xffdf0000, 0xff98ffbb, 0xfffeffff, 0xffffffff, 0xffffffff, 0xfec0fec0, 0xfec2ff0d, 0xff76ffdd, 0xffffffff, 0xfec0fec0, 0xfec0fec0, 0xfec0fec2, 0xff2fff99, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, ], [0xffffffff, 0x0000ffff, 0x00000000, 0x00000000, 0xffffffff, 0xffffffff, 0xffffffff, 0x0000ffdf, 0xffbbff98, 0xfffffffe, 0xffffffff, 0xffffffff, 0xfec0fec0, 0xff0dfec2, 0xffddff76, 0xffffffff, 0xfec0fec0, 0xfec0fec0, 0xfec2fec0, 0xff99ff2f, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, ],
[0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xffff0000, 0x00000000, 0x00000000, 0x00000000, 0xffffffff, 0xffffffff, 0x00000000, 0x00000000, 0xffffffff, 0xffffffff, 0xffffffff, 0x00000000, 0xfee8ff75, 0xffddffff, 0xffffffff, 0xffffffff, 0xfec0fec0, 0xfec2ff30, 0xffbaffff, 0xffffffff, 0xfec0fec0, 0xfec0fec0, 0xfec0feea, 0xff76ffdd, ], [0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x0000ffff, 0x00000000, 0x00000000, 0x00000000, 0xffffffff, 0xffffffff, 0x00000000, 0x00000000, 0xffffffff, 0xffffffff, 0xffffffff, 0x00000000, 0xff75fee8, 0xffffffdd, 0xffffffff, 0xffffffff, 0xfec0fec0, 0xff30fec2, 0xffffffba, 0xffffffff, 0xfec0fec0, 0xfec0fec0, 0xfeeafec0, 0xffddff76, ],
[0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xffffffff, 0xffff0000, 0x00000000, 0x0000ffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, ], [0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xffffffff, 0x0000ffff, 0x00000000, 0xffff0000, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, ],
[0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x0000ffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffdd, 0xffbbff98, ], [0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xffff0000, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffddffff, 0xff98ffbb, ],
[0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x0000ffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffdd, 0xffbaff77, 0xff53ff0e, 0xff54ff2f, 0xfee7fec2, 0xfec0fec0, 0xfec0fec0, ], [0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xffff0000, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffddffff, 0xff77ffba, 0xff0eff53, 0xff2fff54, 0xfec2fee7, 0xfec0fec0, 0xfec0fec0, ],
[0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xffffffff, 0x0000ffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffdc, 0xfffffffd, 0xffbbff98, 0xff75ff2f, 0xfee5fec0, 0xfee6fec2, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, ], [0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xffffffff, 0xffff0000, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffdcffff, 0xfffdffff, 0xff98ffbb, 0xff2fff75, 0xfec0fee5, 0xfec2fee6, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, ],
[0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xfffeffbc, 0xff98ff54, 0xff99ff75, 0xff31fee9, 0xfec3fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, ], [0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffbcfffe, 0xff54ff98, 0xff75ff99, 0xfee9ff31, 0xfec0fec3, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, ],
[0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xff31ff31, 0xff52ff75, 0xff77ff98, 0xffbaffbc, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, ], [0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xff31ff31, 0xff75ff52, 0xff98ff77, 0xffbcffba, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, ],
[0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xffffffff, 0xffff0000, 0x00000000, 0x00000000, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffdcffdd, 0xfffdffff, 0xffffffff, 0xffffffff, 0xfec0fec1, 0xfec2fec4, 0xfee7ff0b, 0xff30ff52, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, ], [0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xffffffff, 0x0000ffff, 0x00000000, 0x00000000, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffddffdc, 0xfffffffd, 0xffffffff, 0xffffffff, 0xfec1fec0, 0xfec4fec2, 0xff0bfee7, 0xff52ff30, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, ],
[0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xff55ff77, 0xff98ffb9, 0xffbbffdc, 0xffdcffdd, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec2, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, ], [0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xff77ff55, 0xffb9ff98, 0xffdcffbb, 0xffddffdc, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec2fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, ],
[0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xfffeffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xfec4fee6, 0xff0aff0f, 0xff32ff53, 0xff77ff98, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, ], [0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xfffffffe, 0xffffffff, 0xffffffff, 0xffffffff, 0xfee6fec4, 0xff0fff0a, 0xff53ff32, 0xff98ff77, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, ],
[0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xffffffff, 0xffffffff, 0xffff0000, 0x00000000, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xff99ffba, 0xffdcffdc, 0xffddfffe, 0xffffffff, 0xfec0fec0, 0xfec0fec0, 0xfec2fec4, 0xfee6ff0d, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, ], [0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xffffffff, 0xffffffff, 0x0000ffff, 0x00000000, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffbaff99, 0xffdcffdc, 0xfffeffdd, 0xffffffff, 0xfec0fec0, 0xfec0fec0, 0xfec4fec2, 0xff0dfee6, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, ],
[0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xffffffff, 0x00000000, 0x00000000, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffdcffff, 0xffffffdf, 0xffdeffbe, 0xffbdff9d, 0xfee8ffdd, 0xfffffe36, 0xf3c6f3c6, 0xf3a5f3a5, ], [0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xffffffff, 0x00000000, 0x00000000, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffdc, 0xffdfffff, 0xffbeffde, 0xff9dffbd, 0xffddfee8, 0xfe36ffff, 0xf3c6f3c6, 0xf3a5f3a5, ],
[0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xff7dff7c, 0xff5cff5c, 0xff1bfefa, 0xfed9fed9, 0xf3a4f3a4, 0xf384f384, 0xf384f384, 0xf384f384, ], [0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xff7cff7d, 0xff5cff5c, 0xfefaff1b, 0xfed9fed9, 0xf3a4f3a4, 0xf384f384, 0xf384f384, 0xf384f384, ],
[0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xfeb8fe98, 0xfe78fe78, 0xfe37fe15, 0xfdd4f593, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, ], [0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xfe98feb8, 0xfe78fe78, 0xfe15fe37, 0xf593fdd4, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, ],
[0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xffffffff, 0xffff0000, 0x00000000, 0x00000000, 0xffffffff, 0xffffffff, 0xffff0000, 0x00000000, 0xf572fdd4, 0xffbeffff, 0xffffffff, 0x00000000, 0xf384f384, 0xf46cff5c, 0xffffffff, 0xffff0000, ], [0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xffffffff, 0x0000ffff, 0x00000000, 0x00000000, 0xffffffff, 0xffffffff, 0x0000ffff, 0x00000000, 0xfdd4f572, 0xffffffbe, 0xffffffff, 0x00000000, 0xf384f384, 0xff5cf46c, 0xffffffff, 0x0000ffff, ],
[0xffffffff, 0xff9df384, 0xf384f384, 0xf384f384, 0xffffffff, 0xfffff46b, 0xf384f384, 0xf384f384, 0x0000ffff, 0xfffffe57, 0xf3a4f384, 0xf384f384, 0x0000ffff, 0xffffffff, 0xff1bf4ce, 0xf384f384, 0x0000f79e, 0xffffffff, 0xffffffff, 0xfeb8f44a, 0x00000000, 0x0000ffff, 0xffffffff, 0xffffffde, 0x00000000, 0x00000000, 0x0000ffff, 0xffffffff, 0x00000000, 0x00000000, 0x00000000, 0xffffffff, ], [0xffffffff, 0xf384ff9d, 0xf384f384, 0xf384f384, 0xffffffff, 0xf46bffff, 0xf384f384, 0xf384f384, 0xffff0000, 0xfe57ffff, 0xf384f3a4, 0xf384f384, 0xffff0000, 0xffffffff, 0xf4ceff1b, 0xf384f384, 0xf79e0000, 0xffffffff, 0xffffffff, 0xf44afeb8, 0x00000000, 0xffff0000, 0xffffffff, 0xffdeffff, 0x00000000, 0x00000000, 0xffff0000, 0xffffffff, 0x00000000, 0x00000000, 0x00000000, 0xffffffff, ],
[0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xfe36f3e8, 0xf384f384, 0xf384f384, 0xf384f384, 0xffffff9e, 0xfdd4f3c7, 0xf384f384, 0xf384f384, 0xffffffff, 0xffffff9d, 0xfdf5f408, 0xf384f384, ], [0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf3e8fe36, 0xf384f384, 0xf384f384, 0xf384f384, 0xff9effff, 0xf3c7fdd4, 0xf384f384, 0xf384f384, 0xffffffff, 0xff9dffff, 0xf408fdf5, 0xf384f384, ],
[0xf3c6f531, 0xfe98ff7c, 0xffffffff, 0xffffffdd, 0xf384f384, 0xf384f3a4, 0xf408f530, 0xfe57ff3c, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f3a4, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, ], [0xf531f3c6, 0xff7cfe98, 0xffffffff, 0xffddffff, 0xf384f384, 0xf3a4f384, 0xf530f408, 0xff3cfe57, 0xf384f384, 0xf384f384, 0xf384f384, 0xf3a4f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, ],
[0xffbaff76, 0xff30fee5, 0xfec0fec0, 0xfec0fec0, 0xffffffff, 0xfffffffe, 0xff99ff30, 0xfec1fec0, 0xf42afdd4, 0xff1bffff, 0xffffffff, 0xffddff76, 0xf384f384, 0xf3a4f44b, 0xfe36ff7d, 0xffffffff, 0xf384f384, 0xf384f384, 0xf384f3a5, 0xf510fed9, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, ], [0xff76ffba, 0xfee5ff30, 0xfec0fec0, 0xfec0fec0, 0xffffffff, 0xfffeffff, 0xff30ff99, 0xfec0fec1, 0xfdd4f42a, 0xffffff1b, 0xffffffff, 0xff76ffdd, 0xf384f384, 0xf44bf3a4, 0xff7dfe36, 0xffffffff, 0xf384f384, 0xf384f384, 0xf3a5f384, 0xfed9f510, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, ],
[0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec4, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xff0cfec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xffffffbb, 0xff32fec3, 0xfec0fec0, 0xfec0fec0, 0xffdfffff, 0xffffffdd, 0xff76feea, 0xfec0fec0, 0xf429fdf5, 0xff5cffff, 0xffffffff, 0xffbaff31, 0xf384f384, 0xf3a5f4ef, 0xfeb9ffde, 0xffffffff, 0xf384f384, 0xf384f384, 0xf384f408, 0xfdd4ff5c, ], [0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec4fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0ff0c, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xffbbffff, 0xfec3ff32, 0xfec0fec0, 0xfec0fec0, 0xffffffdf, 0xffddffff, 0xfeeaff76, 0xfec0fec0, 0xfdf5f429, 0xffffff5c, 0xffffffff, 0xff31ffba, 0xf384f384, 0xf4eff3a5, 0xffdefeb9, 0xffffffff, 0xf384f384, 0xf384f384, 0xf408f384, 0xff5cfdd4, ],
[0xff31ffbb, 0xffffffff, 0xffffffff, 0xfffffffe, 0xfec0fec0, 0xff0bff55, 0xff75ff32, 0xff0afec4, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec3fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xffddff76, 0xff0bfec0, 0xfec0fec0, 0xfec0fec0, 0xffffffff, 0xffffffbb, 0xff52fee7, 0xfec0fec0, ], [0xffbbff31, 0xffffffff, 0xffffffff, 0xfffeffff, 0xfec0fec0, 0xff55ff0b, 0xff32ff75, 0xfec4ff0a, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec3, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xff76ffdd, 0xfec0ff0b, 0xfec0fec0, 0xfec0fec0, 0xffffffff, 0xffbbffff, 0xfee7ff52, 0xfec0fec0, ],
[0xffbbff98, 0xff54ff30, 0xfee8fec3, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, ], [0xff98ffbb, 0xff30ff54, 0xfec3fee8, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, ],
[0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, ], [0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, ],
[0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfee3fee9, 0xfec0fec0, 0xfec0fec0, 0xff0bff99, 0xfffeffff, 0xfec0fec0, 0xfee9ff97, 0xffffffff, 0xffbeff1b, ], [0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfee9fee3, 0xfec0fec0, 0xfec0fec0, 0xff99ff0b, 0xfffffffe, 0xfec0fec0, 0xff97fee9, 0xffffffff, 0xff1bffbe, ],
[0xfec0feeb, 0xfffeffff, 0xf551f384, 0xf384f384, 0xfec0fec0, 0xff0effff, 0xffdef4ad, 0xf384f384, 0xfec0fec0, 0xfec0ff31, 0xffffff9d, 0xf429f384, 0xfec0fec0, 0xfec0fec0, 0xff54ffff, 0xff3bf3c6, 0xfec0fec0, 0xfec0fec0, 0xfec0ff98, 0xfffffeb9, 0xff0dff0f, 0xff2fff2f, 0xff2fff30, 0xfffeffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffde, 0xfeb9fe78, 0xfe15f5b3, 0xf530f48c, 0xf42af3e7, ], [0xfeebfec0, 0xfffffffe, 0xf384f551, 0xf384f384, 0xfec0fec0, 0xffffff0e, 0xf4adffde, 0xf384f384, 0xfec0fec0, 0xff31fec0, 0xff9dffff, 0xf384f429, 0xfec0fec0, 0xfec0fec0, 0xffffff54, 0xf3c6ff3b, 0xfec0fec0, 0xfec0fec0, 0xff98fec0, 0xfeb9ffff, 0xff0fff0d, 0xff2fff2f, 0xff30ff2f, 0xfffffffe, 0xffffffff, 0xffffffff, 0xffffffff, 0xffdeffff, 0xfe78feb9, 0xf5b3fe15, 0xf48cf530, 0xf3e7f42a, ],
[0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xfdf5f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xff9df48d, 0xf384f384, 0xf384f384, 0xf384f384, 0xf3a5f384, 0xf384f384, 0xf384f384, 0xf384f384, ], [0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384fdf5, 0xf384f384, 0xf384f384, 0xf384f384, 0xf48dff9d, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f3a5, 0xf384f384, 0xf384f384, 0xf384f384, ],
[0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, ], [0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, ],
[0xf384f384, 0xf384f3e7, 0xfed9ffff, 0xffffffff, 0xf384f384, 0xf384f384, 0xf3a4fdf5, 0xffffffff, 0xf384f384, 0xf384f384, 0xf384f384, 0xf531ffbe, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f46b, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, ], [0xf384f384, 0xf3e7f384, 0xfffffed9, 0xffffffff, 0xf384f384, 0xf384f384, 0xfdf5f3a4, 0xffffffff, 0xf384f384, 0xf384f384, 0xf384f384, 0xffbef531, 0xf384f384, 0xf384f384, 0xf384f384, 0xf46bf384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, ],
[0xf7be0000, 0x00000000, 0x00000000, 0x00000000, 0xffffffff, 0x00000000, 0x00000000, 0x00000000, 0xffffffff, 0xffff0000, 0x00000000, 0x00000000, 0xff5cffff, 0xffffffff, 0x00000000, 0x00000000, 0xf3e7feb9, 0xffffffff, 0xffffffff, 0x00000000, 0xf384f3a4, 0xfdf5ffff, 0xffffffff, 0xffff0000, 0xf384f384, 0xf384f530, 0xffbeffff, 0xffffffff, 0xf384f384, 0xf384f384, 0xf46bff5c, 0xffffffff, ], [0x0000f7be, 0x00000000, 0x00000000, 0x00000000, 0xffffffff, 0x00000000, 0x00000000, 0x00000000, 0xffffffff, 0x0000ffff, 0x00000000, 0x00000000, 0xffffff5c, 0xffffffff, 0x00000000, 0x00000000, 0xfeb9f3e7, 0xffffffff, 0xffffffff, 0x00000000, 0xf3a4f384, 0xfffffdf5, 0xffffffff, 0x0000ffff, 0xf384f384, 0xf530f384, 0xffffffbe, 0xffffffff, 0xf384f384, 0xf384f384, 0xff5cf46b, 0xffffffff, ],
[0xffffffff, 0xffffffff, 0xffffffbe, 0xfe77f48c, 0x00000000, 0xffffffff, 0xffffffff, 0xffffffff, 0x00000000, 0x00000000, 0xffffffff, 0xffffffff, 0x00000000, 0x00000000, 0x00000000, 0x0000ffff, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, ], [0xffffffff, 0xffffffff, 0xffbeffff, 0xf48cfe77, 0x00000000, 0xffffffff, 0xffffffff, 0xffffffff, 0x00000000, 0x00000000, 0xffffffff, 0xffffffff, 0x00000000, 0x00000000, 0x00000000, 0xffff0000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, ],
[0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xff1bf572, 0xf3c7f384, 0xf384f384, 0xf384f384, 0xffffffff, 0xffbefe78, 0xf4aef3a4, 0xf384f384, 0xffffffff, 0xffffffff, 0xffffff5c, 0xfdd4f409, 0x0000ffff, 0xffffffff, 0xffffffff, 0xffffffde, 0x00000000, 0x00000000, 0xffffffff, 0xffffffff, 0x00000000, 0x00000000, 0x00000000, 0x0000ffff, 0x00000000, 0x00000000, 0x00000000, 0x00000000, ], [0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf572ff1b, 0xf384f3c7, 0xf384f384, 0xf384f384, 0xffffffff, 0xfe78ffbe, 0xf3a4f4ae, 0xf384f384, 0xffffffff, 0xffffffff, 0xff5cffff, 0xf409fdd4, 0xffff0000, 0xffffffff, 0xffffffff, 0xffdeffff, 0x00000000, 0x00000000, 0xffffffff, 0xffffffff, 0x00000000, 0x00000000, 0x00000000, 0xffff0000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, ],
[0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xfeb9f4ef, 0xf384f384, 0xf384f384, 0xf384f384, 0xffffffff, 0xfedaf46b, 0xf384f384, 0xf384f384, 0xffffffff, 0xffffffde, 0xfdf5f3a5, 0xf384f384, 0x0000ffff, 0xffffffff, 0xffffff3c, 0xf4cef384, ], [0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf4effeb9, 0xf384f384, 0xf384f384, 0xf384f384, 0xffffffff, 0xf46bfeda, 0xf384f384, 0xf384f384, 0xffffffff, 0xffdeffff, 0xf3a5fdf5, 0xf384f384, 0xffff0000, 0xffffffff, 0xff3cffff, 0xf384f4ce, ],
[0xf384f384, 0xf384f384, 0xf384f384, 0xf384f3a4, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, ], [0xf384f384, 0xf384f384, 0xf384f384, 0xf3a4f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, ],
[0xf4cefeb8, 0xffdeffff, 0xfffffffe, 0xff98fee9, 0xf384f384, 0xf409fdf5, 0xff9dffff, 0xfffffffe, 0xf384f384, 0xf384f384, 0xf3e8fe78, 0xffffffff, 0xf384f384, 0xf384f384, 0xf384f384, 0xf531ffbe, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f42a, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, ], [0xfeb8f4ce, 0xffffffde, 0xfffeffff, 0xfee9ff98, 0xf384f384, 0xfdf5f409, 0xffffff9d, 0xfffeffff, 0xf384f384, 0xf384f384, 0xfe78f3e8, 0xffffffff, 0xf384f384, 0xf384f384, 0xf384f384, 0xffbef531, 0xf384f384, 0xf384f384, 0xf384f384, 0xf42af384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, ],
[0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xff30fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xffffff77, 0xfee6fec0, 0xfec0fec0, 0xfec0fec0, 0xffffffff, 0xffdcfee9, 0xfec0fec0, 0xfec0fec0, 0xfefaffff, 0xfffffffe, 0xff31fec0, 0xfec0fec0, 0xf3a5fdf5, 0xffdfffff, 0xffffff97, 0xfec4fec0, 0xf384f384, 0xf4ceff7c, 0xffffffff, 0xffbbfee8, 0xf384f384, 0xf384f3e7, 0xfe98ffff, 0xffffffdd, ], [0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0ff30, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xff77ffff, 0xfec0fee6, 0xfec0fec0, 0xfec0fec0, 0xffffffff, 0xfee9ffdc, 0xfec0fec0, 0xfec0fec0, 0xfffffefa, 0xfffeffff, 0xfec0ff31, 0xfec0fec0, 0xfdf5f3a5, 0xffffffdf, 0xff97ffff, 0xfec0fec4, 0xf384f384, 0xff7cf4ce, 0xffffffff, 0xfee8ffbb, 0xf384f384, 0xf3e7f384, 0xfffffe98, 0xffddffff, ],
[0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xff0cfec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, ], [0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0ff0c, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, ],
[0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec1, 0xfec0fec0, ], [0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec1fec0, 0xfec0fec0, ],
[0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec2fee4, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xff76fffe, ], [0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfee4fec2, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfffeff76, ],
[0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfee4fee3, 0xfec2fec1, 0xfec1fec0, 0xfec0fec0, 0xfffefffe, 0xfffefffe, 0xfffefffe, 0xfffeffde, ], [0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfee3fee4, 0xfec1fec2, 0xfec0fec1, 0xfec0fec0, 0xfffefffe, 0xfffefffe, 0xfffefffe, 0xffdefffe, ],
[0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0ff0b, 0xfec0fec0, 0xfec0fec0, 0xfec0feea, 0xff97ffff, 0xffddffdd, 0xffddffdc, 0xffdcffff, 0xffffffff, ], [0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xff0bfec0, 0xfec0fec0, 0xfec0fec0, 0xfeeafec0, 0xffffff97, 0xffddffdd, 0xffdcffdd, 0xffffffdc, 0xffffffff, ],
[0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec3ff53, 0xfec0fec0, 0xfec0fec0, 0xfec1ff31, 0xffdcffff, 0xfec0fec0, 0xfec0ff2f, 0xffbbffff, 0xffffffff, 0xfec0ff0d, 0xffbaffff, 0xffffffff, 0xff5cf4ef, 0xff99ffff, 0xffffffff, 0xffbefdf5, 0xf3c6f384, 0xffffffff, 0xfffffed9, 0xf44bf384, 0xf384f384, 0xffffff7d, 0xf551f3a4, 0xf384f384, 0xf384f384, ], [0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xff53fec3, 0xfec0fec0, 0xfec0fec0, 0xff31fec1, 0xffffffdc, 0xfec0fec0, 0xff2ffec0, 0xffffffbb, 0xffffffff, 0xff0dfec0, 0xffffffba, 0xffffffff, 0xf4efff5c, 0xffffff99, 0xffffffff, 0xfdf5ffbe, 0xf384f3c6, 0xffffffff, 0xfed9ffff, 0xf384f44b, 0xf384f384, 0xff7dffff, 0xf3a4f551, 0xf384f384, 0xf384f384, ],
[0xfee6ff75, 0xfffeffff, 0xffdffe36, 0xf3e7f384, 0xffddffff, 0xfffffefa, 0xf48cf384, 0xf384f384, 0xffffff9d, 0xf593f3a4, 0xf384f384, 0xf384f384, 0xfe78f409, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, ], [0xff75fee6, 0xfffffffe, 0xfe36ffdf, 0xf384f3e7, 0xffffffdd, 0xfefaffff, 0xf384f48c, 0xf384f384, 0xff9dffff, 0xf3a4f593, 0xf384f384, 0xf384f384, 0xf409fe78, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, ],
[0xf384f384, 0xf384f384, 0xf46bfe57, 0xfe57fe57, 0xf384f384, 0xf384f384, 0xf3a5ff9d, 0xffffffff, 0xf384f384, 0xf384f384, 0xf384fe16, 0xffffffff, 0xf384f384, 0xf384f384, 0xf384f409, 0xffdfffff, 0xf384f384, 0xf384f384, 0xf384f384, 0xfe98ffff, 0xf384f384, 0xf384f384, 0xf384f384, 0xf4adffff, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384ff1b, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f551, ], [0xf384f384, 0xf384f384, 0xfe57f46b, 0xfe57fe57, 0xf384f384, 0xf384f384, 0xff9df3a5, 0xffffffff, 0xf384f384, 0xf384f384, 0xfe16f384, 0xffffffff, 0xf384f384, 0xf384f384, 0xf409f384, 0xffffffdf, 0xf384f384, 0xf384f384, 0xf384f384, 0xfffffe98, 0xf384f384, 0xf384f384, 0xf384f384, 0xfffff4ad, 0xf384f384, 0xf384f384, 0xf384f384, 0xff1bf384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf551f384, ],
[0xfe57fe57, 0xfe57fe57, 0xfe57fe57, 0xfe57fe57, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffff0000, 0x00000000, 0x00000000, 0x00000000, 0xffff0000, 0x00000000, 0x00000000, 0x00000000, 0xffffffff, 0x00000000, 0x00000000, 0x00000000, 0xffffffff, 0x00000000, 0x00000000, 0x00000000, 0xffffffff, 0x00000000, 0x00000000, 0x00000000, ], [0xfe57fe57, 0xfe57fe57, 0xfe57fe57, 0xfe57fe57, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x0000ffff, 0x00000000, 0x00000000, 0x00000000, 0x0000ffff, 0x00000000, 0x00000000, 0x00000000, 0xffffffff, 0x00000000, 0x00000000, 0x00000000, 0xffffffff, 0x00000000, 0x00000000, 0x00000000, 0xffffffff, 0x00000000, 0x00000000, 0x00000000, ],
[0xfe57fe57, 0xfe57fe57, 0xfe57fe57, 0xfe57fe57, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, ], [0xfe57fe57, 0xfe57fe57, 0xfe57fe57, 0xfe57fe57, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, ],
[0xfe57fe57, 0xfe57fe57, 0xfe57fe98, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, ], [0xfe57fe57, 0xfe57fe57, 0xfe98fe57, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, ],
[0x00000000, 0xffffffff, 0xffffffff, 0xfffffe57, 0x00000000, 0x00000000, 0xffffffff, 0xffffffff, 0x00000000, 0x00000000, 0x00000000, 0xffffffff, 0x00000000, 0x00000000, 0x00000000, 0x0000ffff, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, ], [0x00000000, 0xffffffff, 0xffffffff, 0xfe57ffff, 0x00000000, 0x00000000, 0xffffffff, 0xffffffff, 0x00000000, 0x00000000, 0x00000000, 0xffffffff, 0x00000000, 0x00000000, 0x00000000, 0xffff0000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, ],
[0xf3e8f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xff7df531, 0xf384f384, 0xf384f384, 0xf384f384, 0xffffffff, 0xfeb9f42a, 0xf384f384, 0xf384f384, 0xffffffff, 0xffffffbe, 0xf5b3f3a4, 0xf384f384, 0x0000ffff, 0xffffffff, 0xffffff1a, 0xf48cf384, 0x00000000, 0xffffffff, 0xffffffff, 0xffdefdf5, 0x00000000, 0x00000000, 0xffffffff, 0xffffffff, 0x00000000, 0x00000000, 0x00000000, 0xffffffff, ], [0xf384f3e8, 0xf384f384, 0xf384f384, 0xf384f384, 0xf531ff7d, 0xf384f384, 0xf384f384, 0xf384f384, 0xffffffff, 0xf42afeb9, 0xf384f384, 0xf384f384, 0xffffffff, 0xffbeffff, 0xf3a4f5b3, 0xf384f384, 0xffff0000, 0xffffffff, 0xff1affff, 0xf384f48c, 0x00000000, 0xffffffff, 0xffffffff, 0xfdf5ffde, 0x00000000, 0x00000000, 0xffffffff, 0xffffffff, 0x00000000, 0x00000000, 0x00000000, 0xffffffff, ],
[0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf3c6f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xff5cf4ce, 0xf384f384, 0xf384f384, 0xf384f384, 0xffffffff, 0xfe57f3e7, 0xf384f384, 0xf384f384, ], [0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f3c6, 0xf384f384, 0xf384f384, 0xf384f384, 0xf4ceff5c, 0xf384f384, 0xf384f384, 0xf384f384, 0xffffffff, 0xf3e7fe57, 0xf384f384, 0xf384f384, ],
[0xf384f384, 0xf384f384, 0xf384f572, 0xffbeffff, 0xf384f384, 0xf384f384, 0xf384f384, 0xf46bff1b, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f3a5, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, ], [0xf384f384, 0xf384f384, 0xf572f384, 0xffffffbe, 0xf384f384, 0xf384f384, 0xf384f384, 0xff1bf46b, 0xf384f384, 0xf384f384, 0xf384f384, 0xf3a5f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, ],
[0xfffeff31, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xffffffff, 0xff76fec3, 0xfec0fec0, 0xfec0fec0, 0xfe36ffff, 0xffffffba, 0xfeeafec0, 0xfec0fec0, 0xf384f4ef, 0xff9dffff, 0xffffffba, 0xff99ff99, 0xf384f384, 0xf408fed9, 0xffffffff, 0xffffffff, 0xf384f384, 0xf384f3a4, 0xf572fe36, 0xfe57fe57, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, ], [0xff31fffe, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xffffffff, 0xfec3ff76, 0xfec0fec0, 0xfec0fec0, 0xfffffe36, 0xffbaffff, 0xfec0feea, 0xfec0fec0, 0xf4eff384, 0xffffff9d, 0xffbaffff, 0xff99ff99, 0xf384f384, 0xfed9f408, 0xffffffff, 0xffffffff, 0xf384f384, 0xf3a4f384, 0xfe36f572, 0xfe57fe57, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, ],
[0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xff99ff99, 0xff99ff99, 0xff99ff99, 0xff99ff99, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xfe57fe77, 0xfe77fe77, 0xfe78fe78, 0xfe98fe98, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, ], [0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xff99ff99, 0xff99ff99, 0xff99ff99, 0xff99ff99, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xfe77fe57, 0xfe77fe77, 0xfe78fe78, 0xfe98fe98, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, ],
[0xfec0fec0, 0xfec0fec0, 0xff30fffe, 0xffdbff99, 0xfec0fec0, 0xfec0fec0, 0xfec0ff77, 0xffffffff, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xff97ffff, 0xff99ff99, 0xff97ff76, 0xff55ff54, 0xff52ffdd, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xfeb9feb9, 0xfed9feda, 0xfedafefa, 0xfefafefa, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, ], [0xfec0fec0, 0xfec0fec0, 0xfffeff30, 0xff99ffdb, 0xfec0fec0, 0xfec0fec0, 0xff77fec0, 0xffffffff, 0xfec0fec0, 0xfec0fec0, 0xfec0fec0, 0xffffff97, 0xff99ff99, 0xff76ff97, 0xff54ff55, 0xffddff52, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xfeb9feb9, 0xfedafed9, 0xfefafeda, 0xfefafefa, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, ],
[0xff75ff31, 0xff0cfee6, 0xfec0fec0, 0xff0effff, 0xffffffff, 0xfffffffe, 0xffddffba, 0xff98ffff, 0xff1bfe15, 0xfed9ff7d, 0xffdfffff, 0xffffffff, 0xfffffeb9, 0xf3e7f3a4, 0xf429f50f, 0xfe15feda, 0xffffffff, 0xff3cf44b, 0xf384f384, 0xf384f384, 0xfefaff1a, 0xff1afeb8, 0xf3c5f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, ], [0xff31ff75, 0xfee6ff0c, 0xfec0fec0, 0xffffff0e, 0xffffffff, 0xfffeffff, 0xffbaffdd, 0xffffff98, 0xfe15ff1b, 0xff7dfed9, 0xffffffdf, 0xffffffff, 0xfeb9ffff, 0xf3a4f3e7, 0xf50ff429, 0xfedafe15, 0xffffffff, 0xf44bff3c, 0xf384f384, 0xf384f384, 0xff1afefa, 0xfeb8ff1a, 0xf384f3c5, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, ],
[0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xfffffed9, 0xf4adf4ee, 0xf530f572, 0xf5b4fdf5, 0xffffffff, 0xfe78f3a4, 0xf384f384, 0xf384f384, 0xff7dffdf, 0xfffffe98, 0xf3a5f384, 0xf384f384, 0xf3a4f42a, 0xf530fe16, 0xf510f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, ], [0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xfed9ffff, 0xf4eef4ad, 0xf572f530, 0xfdf5f5b4, 0xffffffff, 0xf3a4fe78, 0xf384f384, 0xf384f384, 0xffdfff7d, 0xfe98ffff, 0xf384f3a5, 0xf384f384, 0xf42af3a4, 0xfe16f530, 0xf384f510, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, ],
[0xffffffff, 0xffffffff, 0xffffffff, 0xffffffdf, 0xfe36fe77, 0xfeb9fefa, 0xff1bff5c, 0xfed9f4ad, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, ], [0xffffffff, 0xffffffff, 0xffffffff, 0xffdfffff, 0xfe77fe36, 0xfefafeb9, 0xff5cff1b, 0xf4adfed9, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, ],
[0xfe57f3e7, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, ], [0xf3e7fe57, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, ],
[0xff7dffff, 0xffff0000, 0x00000000, 0x00000000, 0xfdf5ffff, 0xffff0000, 0xffffffff, 0xffffffff, 0xf3e7ffde, 0xffffffff, 0xffffffff, 0xffffffff, 0xf384fe78, 0xffffffff, 0xffffff7d, 0xfed9fe15, 0xf384f44b, 0xfe98fdb4, 0xf46cf3a4, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, ], [0xffffff7d, 0x0000ffff, 0x00000000, 0x00000000, 0xfffffdf5, 0x0000ffff, 0xffffffff, 0xffffffff, 0xffdef3e7, 0xffffffff, 0xffffffff, 0xffffffff, 0xfe78f384, 0xffffffff, 0xff7dffff, 0xfe15fed9, 0xf44bf384, 0xfdb4fe98, 0xf3a4f46c, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, ],
[0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xffffffff, 0x00000000, 0x00000000, 0x00000000, 0xffffffff, 0xffff0000, 0x00000000, 0x00000000, 0xff5cffff, 0xffff0000, 0x00000000, 0x00000000, 0xf46cffbe, 0xffffffff, 0x00000000, 0x00000000, 0xf384f551, 0xffffffff, 0xffff0000, 0x00000000, 0xf384f384, 0xfe57ffff, 0xffffffff, 0x00000000, 0xf384f384, 0xf3a5ff3b, 0xffffffff, 0xffff0000, ], [0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xffffffff, 0x00000000, 0x00000000, 0x00000000, 0xffffffff, 0x0000ffff, 0x00000000, 0x00000000, 0xffffff5c, 0x0000ffff, 0x00000000, 0x00000000, 0xffbef46c, 0xffffffff, 0x00000000, 0x00000000, 0xf551f384, 0xffffffff, 0x0000ffff, 0x00000000, 0xf384f384, 0xfffffe57, 0xffffffff, 0x00000000, 0xf384f384, 0xff3bf3a5, 0xffffffff, 0x0000ffff, ],
[0x00000000, 0x00000000, 0x00000000, 0x0000ffff, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x0000ffff, 0x00000000, 0x00000000, 0x00000000, 0x0000ffff, 0x00000000, 0x00000000, 0x00000000, 0xffffffff, 0x00000000, 0x00000000, 0x00000000, 0xffffffff, ], [0x00000000, 0x00000000, 0x00000000, 0xffff0000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xffff0000, 0x00000000, 0x00000000, 0x00000000, 0xffff0000, 0x00000000, 0x00000000, 0x00000000, 0xffffffff, 0x00000000, 0x00000000, 0x00000000, 0xffffffff, ],
[0xffffffff, 0xffffff7d, 0xf44bf384, 0xf384f384, 0x0000ffff, 0xffffffde, 0xf408f384, 0xf384f384, 0xffffffff, 0xfffffe36, 0xf384f384, 0xf384f384, 0xffffffff, 0xffbef3e7, 0xf384f384, 0xf384f384, 0xffffffff, 0xfdf5f384, 0xf384f384, 0xf384f384, 0xffffff9d, 0xf3c6f384, 0xf384f384, 0xf384f384, 0xfffffdd4, 0xf384f384, 0xf384f384, 0xf384f384, 0xff7df3a5, 0xf384f384, 0xf384f384, 0xf384f384, ], [0xffffffff, 0xff7dffff, 0xf384f44b, 0xf384f384, 0xffff0000, 0xffdeffff, 0xf384f408, 0xf384f384, 0xffffffff, 0xfe36ffff, 0xf384f384, 0xf384f384, 0xffffffff, 0xf3e7ffbe, 0xf384f384, 0xf384f384, 0xffffffff, 0xf384fdf5, 0xf384f384, 0xf384f384, 0xff9dffff, 0xf384f3c6, 0xf384f384, 0xf384f384, 0xfdd4ffff, 0xf384f384, 0xf384f384, 0xf384f384, 0xf3a5ff7d, 0xf384f384, 0xf384f384, 0xf384f384, ],
[0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f3c6, 0xf46bf384, 0xf384f384, 0xf384f384, 0xf44aff3b, 0xffdef48d, 0xf384f384, ], [0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf3c6f384, 0xf384f46b, 0xf384f384, 0xf384f384, 0xff3bf44a, 0xf48dffde, 0xf384f384, ],
[0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf3a4f3e8, 0xf48cf551, 0xf384f384, 0xf384fe98, 0xff9dffde, 0xffffffff, 0xf384f384, 0xf384feda, 0xffffffff, 0xffffffff, 0xf384f384, 0xf384fe57, 0xffffffff, 0x00000000, ], [0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf3e8f3a4, 0xf551f48c, 0xf384f384, 0xfe98f384, 0xffdeff9d, 0xffffffff, 0xf384f384, 0xfedaf384, 0xffffffff, 0xffffffff, 0xf384f384, 0xfe57f384, 0xffffffff, 0x00000000, ],
[0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf3c6f42a, 0xf4cef593, 0xfdf5fe78, 0xfedaff5c, 0xffbeffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffff0000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, ], [0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf42af3c6, 0xf593f4ce, 0xfe78fdf5, 0xff5cfeda, 0xffffffbe, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x0000ffff, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, ],
[0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f3c6, 0xf42af4cd, 0xf593fe16, 0xfe36fed9, 0xff3cffbe, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, ], [0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf3c6f384, 0xf4cdf42a, 0xfe16f593, 0xfed9fe36, 0xffbeff3c, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, ],
[0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xfe98f409, 0xf384f384, 0xf384f384, 0xf384f384, 0xfffffe36, 0xf384f384, 0xf384f384, 0xf384f384, 0xffffffbe, 0xf3c6f384, 0xf384f384, 0xf384f384, 0xffffffff, 0xfdd4f384, 0xf384f384, 0xf384f384, 0xffffffff, 0xff7cf3a4, 0xf384f384, 0xf384f384, 0xffffffff, 0xfffff551, 0xf384f384, 0xf384f384, ], [0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf409fe98, 0xf384f384, 0xf384f384, 0xf384f384, 0xfe36ffff, 0xf384f384, 0xf384f384, 0xf384f384, 0xffbeffff, 0xf384f3c6, 0xf384f384, 0xf384f384, 0xffffffff, 0xf384fdd4, 0xf384f384, 0xf384f384, 0xffffffff, 0xf3a4ff7c, 0xf384f384, 0xf384f384, 0xffffffff, 0xf551ffff, 0xf384f384, 0xf384f384, ],
[0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384fe36, 0xfdb4f46b, 0xf3a5f384, 0xf384f384, 0xf384ff9d, 0xffffffff, 0xff7dfe98, 0xf572f429, 0xf3c5ffff, 0xffffffff, 0xffffffff, 0xffffffdf, 0xf48cffff, 0xffff0000, 0xffffffff, 0xffffffff, ], [0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xfe36f384, 0xf46bfdb4, 0xf384f3a5, 0xf384f384, 0xff9df384, 0xffffffff, 0xfe98ff7d, 0xf429f572, 0xfffff3c5, 0xffffffff, 0xffffffff, 0xffdfffff, 0xfffff48c, 0x0000ffff, 0xffffffff, 0xffffffff, ],
[0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf3a4f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xff3cfe36, 0xf4eff3e7, 0xf384f384, 0xf384f384, 0xffffffff, 0xffffffbe, 0xfefafdf4, 0xf46cf3a5, ], [0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f3a4, 0xf384f384, 0xf384f384, 0xf384f384, 0xfe36ff3c, 0xf3e7f4ef, 0xf384f384, 0xf384f384, 0xffffffff, 0xffbeffff, 0xfdf4fefa, 0xf3a5f46c, ],
[0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf3a4f3e8, 0xf44bf3a4, 0xf3c6f48c, 0xfdb3fe98, 0xff5cffde, 0xfffffe36, ], [0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf3e8f3a4, 0xf3a4f44b, 0xf48cf3c6, 0xfe98fdb3, 0xffdeff5c, 0xfe36ffff, ],
[0xf384f384, 0xf384f44a, 0xffbeffff, 0xffff0000, 0xf384f384, 0xf384f384, 0xf530ffff, 0xffffffff, 0xf384f384, 0xf384f384, 0xf384fe36, 0xffffffff, 0xf384f384, 0xf384f384, 0xf384f3a4, 0xff1affff, 0xf384f384, 0xf384f384, 0xf384f384, 0xf429ff9d, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f510, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, ], [0xf384f384, 0xf44af384, 0xffffffbe, 0x0000ffff, 0xf384f384, 0xf384f384, 0xfffff530, 0xffffffff, 0xf384f384, 0xf384f384, 0xfe36f384, 0xffffffff, 0xf384f384, 0xf384f384, 0xf3a4f384, 0xffffff1a, 0xf384f384, 0xf384f384, 0xf384f384, 0xff9df429, 0xf384f384, 0xf384f384, 0xf384f384, 0xf510f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, ],
[0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xffff0000, 0x00000000, 0x00000000, 0x00000000, 0xffffffff, 0x00000000, 0x00000000, 0x00000000, 0xffffffff, 0x00000000, 0x00000000, 0x00000000, 0xffffffff, 0xffff0000, 0x00000000, 0x00000000, 0xfed9ffff, 0xffff0000, 0x00000000, 0x00000000, 0xfeb9ffff, 0xffff0000, 0x00000000, 0x00000000, ], [0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x0000ffff, 0x00000000, 0x00000000, 0x00000000, 0xffffffff, 0x00000000, 0x00000000, 0x00000000, 0xffffffff, 0x00000000, 0x00000000, 0x00000000, 0xffffffff, 0x0000ffff, 0x00000000, 0x00000000, 0xfffffed9, 0x0000ffff, 0x00000000, 0x00000000, 0xfffffeb9, 0x0000ffff, 0x00000000, 0x00000000, ],
[0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x0000ffff, 0xffffffff, 0x00000000, 0xffffffff, 0xffffffff, 0xffffffff, ], [0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xffff0000, 0xffffffff, 0x00000000, 0xffffffff, 0xffffffff, 0xffffffff, ],
[0x00000000, 0x00000000, 0x0000ffff, 0xffffffff, 0x00000000, 0x00000000, 0x0000ffff, 0xffffff5c, 0x00000000, 0x00000000, 0xffffffff, 0xfffff551, 0x00000000, 0x00000000, 0xffffffff, 0xff3bf384, 0x00000000, 0x0000ffff, 0xffffffff, 0xf510f384, 0xffffffff, 0xffffffff, 0xffffff1b, 0xf384f384, 0xffffffff, 0xffffffff, 0xff7df48d, 0xf384f384, 0xffffffbe, 0xfe98f4ef, 0xf3a4f384, 0xf384f384, ], [0x00000000, 0x00000000, 0xffff0000, 0xffffffff, 0x00000000, 0x00000000, 0xffff0000, 0xff5cffff, 0x00000000, 0x00000000, 0xffffffff, 0xf551ffff, 0x00000000, 0x00000000, 0xffffffff, 0xf384ff3b, 0x00000000, 0xffff0000, 0xffffffff, 0xf384f510, 0xffffffff, 0xffffffff, 0xff1bffff, 0xf384f384, 0xffffffff, 0xffffffff, 0xf48dff7d, 0xf384f384, 0xffbeffff, 0xf4effe98, 0xf384f3a4, 0xf384f384, ],
[0xf593f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf3a4f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, ], [0xf384f593, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f3a4, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, ],
[0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f3a4, 0xf384f384, 0xf384f384, 0xf384f384, 0xf3e7feb9, 0xf384f384, 0xf384f384, 0xf384f46c, 0xff5cffff, 0xf384f384, 0xf384f384, 0xf551ffbe, 0xffffffff, 0xf384f384, 0xf3a5fe36, 0xffffffff, 0xffffffff, 0xf384f409, 0xfefaffff, 0xffffffff, 0x00000000, 0xf4ceff9d, 0xffffffff, 0xffff0000, 0x00000000, ], [0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf3a4f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xfeb9f3e7, 0xf384f384, 0xf384f384, 0xf46cf384, 0xffffff5c, 0xf384f384, 0xf384f384, 0xffbef551, 0xffffffff, 0xf384f384, 0xfe36f3a5, 0xffffffff, 0xffffffff, 0xf409f384, 0xfffffefa, 0xffffffff, 0x00000000, 0xff9df4ce, 0xffffffff, 0x0000ffff, 0x00000000, ],
[0xf384f510, 0xff9dffff, 0xffffff5c, 0xf3c6f384, 0xfdf5ffff, 0xffffffff, 0xffffffff, 0xfe98f384, 0xffffffff, 0xffff0000, 0xffffffff, 0xfffff572, 0xffffffff, 0x00000000, 0x0000ffff, 0xffffffbe, 0xffff0000, 0x00000000, 0x0000ffff, 0xffffffff, 0x00000000, 0x00000000, 0x00000000, 0xffffffff, 0x00000000, 0x00000000, 0x00000000, 0x0000ffff, 0x00000000, 0x00000000, 0x00000000, 0x00000000, ], [0xf510f384, 0xffffff9d, 0xff5cffff, 0xf384f3c6, 0xfffffdf5, 0xffffffff, 0xffffffff, 0xf384fe98, 0xffffffff, 0x0000ffff, 0xffffffff, 0xf572ffff, 0xffffffff, 0x00000000, 0xffff0000, 0xffbeffff, 0x0000ffff, 0x00000000, 0xffff0000, 0xffffffff, 0x00000000, 0x00000000, 0x00000000, 0xffffffff, 0x00000000, 0x00000000, 0x00000000, 0xffff0000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, ],
[0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf46bf384, 0xf384f384, 0xf384f384, 0xf384f384, 0xff3bf3a5, 0xf384f384, 0xf384f384, 0xf384f384, 0xfffffe57, 0xf384f384, 0xf384f384, 0xf384f384, 0xffffffff, 0xf531f384, 0xf384f384, 0xf384f384, 0xffffffff, 0xffbef44a, 0xf384f384, 0xf384f384, ], [0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f46b, 0xf384f384, 0xf384f384, 0xf384f384, 0xf3a5ff3b, 0xf384f384, 0xf384f384, 0xf384f384, 0xfe57ffff, 0xf384f384, 0xf384f384, 0xf384f384, 0xffffffff, 0xf384f531, 0xf384f384, 0xf384f384, 0xffffffff, 0xf44affbe, 0xf384f384, 0xf384f384, ],
[0xf384f384, 0xf384f593, 0xffffffff, 0x00000000, 0xf384f384, 0xf384f4ef, 0xffffffff, 0x00000000, 0xf384f384, 0xf384f3e7, 0xffffffff, 0x00000000, 0xf384f384, 0xf384f384, 0xff9dffff, 0xffff0000, 0xf384f384, 0xf384f384, 0xff3bffff, 0xffff0000, 0xf384f384, 0xf384f384, 0xfe98ffff, 0xffffffff, 0xf384f384, 0xf384f384, 0xfdf5ffff, 0xffffffff, 0xf384f384, 0xf384f384, 0xf551ffff, 0xff7dfe57, ], [0xf384f384, 0xf593f384, 0xffffffff, 0x00000000, 0xf384f384, 0xf4eff384, 0xffffffff, 0x00000000, 0xf384f384, 0xf3e7f384, 0xffffffff, 0x00000000, 0xf384f384, 0xf384f384, 0xffffff9d, 0x0000ffff, 0xf384f384, 0xf384f384, 0xffffff3b, 0x0000ffff, 0xf384f384, 0xf384f384, 0xfffffe98, 0xffffffff, 0xf384f384, 0xf384f384, 0xfffffdf5, 0xffffffff, 0xf384f384, 0xf384f384, 0xfffff551, 0xfe57ff7d, ],
[0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x0000ffff, 0xffff0000, 0x00000000, 0xffffffff, 0xffffffff, 0xffffffff, 0x00000000, 0xffffffff, 0xffffffff, 0xffffffff, 0x00000000, 0xffffffbe, 0xfed9fdb4, 0xffffffff, 0x00000000, 0xf510f3a5, 0xf384f572, 0xffffffff, 0x00000000, ], [0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xffff0000, 0x0000ffff, 0x00000000, 0xffffffff, 0xffffffff, 0xffffffff, 0x00000000, 0xffffffff, 0xffffffff, 0xffffffff, 0x00000000, 0xffbeffff, 0xfdb4fed9, 0xffffffff, 0x00000000, 0xf3a5f510, 0xf572f384, 0xffffffff, 0x00000000, ],
[0x0000ffff, 0xffffff1b, 0xf384f384, 0xf384f384, 0x0000ffff, 0xffffffff, 0xf4adf384, 0xf384f384, 0x00000000, 0xffffffff, 0xfeb9f384, 0xf384f384, 0x00000000, 0xffffffff, 0xffdff42a, 0xf384f384, 0x00000000, 0x0000ffff, 0xfffffe56, 0xf384f384, 0x00000000, 0x0000ffff, 0xffffffbe, 0xf3c6f384, 0x00000000, 0x00000000, 0xffffffff, 0xfdd4f384, 0x00000000, 0x0000ffff, 0xffffffff, 0xff7cf3a4, ], [0xffff0000, 0xff1bffff, 0xf384f384, 0xf384f384, 0xffff0000, 0xffffffff, 0xf384f4ad, 0xf384f384, 0x00000000, 0xffffffff, 0xf384feb9, 0xf384f384, 0x00000000, 0xffffffff, 0xf42affdf, 0xf384f384, 0x00000000, 0xffff0000, 0xfe56ffff, 0xf384f384, 0x00000000, 0xffff0000, 0xffbeffff, 0xf384f3c6, 0x00000000, 0x00000000, 0xffffffff, 0xf384fdd4, 0x00000000, 0xffff0000, 0xffffffff, 0xf3a4ff7c, ],
[0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f3c5, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f48c, ], [0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf3c5f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf48cf384, ],
[0xf551ffff, 0xffff0000, 0x00000000, 0x0000ffff, 0xfdd4ffff, 0xffff0000, 0x00000000, 0x00000000, 0xfe57ffff, 0xffff0000, 0x00000000, 0x00000000, 0xfed9ffff, 0xffff0000, 0x00000000, 0x00000000, 0xff5cffff, 0xffff0000, 0x00000000, 0x00000000, 0xffbdffff, 0x00000000, 0x00000000, 0x00000000, 0xffffffff, 0x00000000, 0x00000000, 0x00000000, 0xffffffff, 0x00000000, 0x00000000, 0x00000000, ], [0xfffff551, 0x0000ffff, 0x00000000, 0xffff0000, 0xfffffdd4, 0x0000ffff, 0x00000000, 0x00000000, 0xfffffe57, 0x0000ffff, 0x00000000, 0x00000000, 0xfffffed9, 0x0000ffff, 0x00000000, 0x00000000, 0xffffff5c, 0x0000ffff, 0x00000000, 0x00000000, 0xffffffbd, 0x00000000, 0x00000000, 0x00000000, 0xffffffff, 0x00000000, 0x00000000, 0x00000000, 0xffffffff, 0x00000000, 0x00000000, 0x00000000, ],
[0xffffffff, 0xffffffff, 0xffffffff, 0xffffff9d, 0x00000000, 0x0000ffff, 0xffffffff, 0xffffffff, 0x00000000, 0x00000000, 0x00000000, 0x0000ffff, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, ], [0xffffffff, 0xffffffff, 0xffffffff, 0xff9dffff, 0x00000000, 0xffff0000, 0xffffffff, 0xffffffff, 0x00000000, 0x00000000, 0x00000000, 0xffff0000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, ],
[0xfeb9f592, 0xf42af3c6, 0xf408f531, 0xfe57ff1b, 0xffffffff, 0xffffff9d, 0xffdeffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, ], [0xf592feb9, 0xf3c6f42a, 0xf531f408, 0xff1bfe57, 0xffffffff, 0xff9dffff, 0xffffffde, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, ],
[0xffbeffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffff0000, 0xffffffff, 0xffff0000, 0x00000000, 0x00000000, 0x0000ffff, 0x00000000, 0x00000000, 0x00000000, 0x0000ffff, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, ], [0xffffffbe, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x0000ffff, 0xffffffff, 0x0000ffff, 0x00000000, 0x00000000, 0xffff0000, 0x00000000, 0x00000000, 0x00000000, 0xffff0000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, ],
[0xf593f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xffdff4ef, 0xf384f384, 0xf384f384, 0xf384f3a4, 0xffffffbe, 0xf44bf384, 0xf384f384, 0xf384f48c, 0xffffffff, 0xff5cf3e7, 0xf384f384, 0xf384f572, 0xffffffff, 0xfffffefa, 0xf3a5f384, 0xf384fe57, 0x0000ffff, 0xffffffff, 0xfe56f384, 0xf384fefa, 0x00000000, 0xffffffff, 0xfffff5b3, 0xf384ff7d, 0x00000000, 0x0000ffff, 0xffffffff, 0xf572ffff, ], [0xf384f593, 0xf384f384, 0xf384f384, 0xf384f384, 0xf4efffdf, 0xf384f384, 0xf384f384, 0xf3a4f384, 0xffbeffff, 0xf384f44b, 0xf384f384, 0xf48cf384, 0xffffffff, 0xf3e7ff5c, 0xf384f384, 0xf572f384, 0xffffffff, 0xfefaffff, 0xf384f3a5, 0xfe57f384, 0xffff0000, 0xffffffff, 0xf384fe56, 0xfefaf384, 0x00000000, 0xffffffff, 0xf5b3ffff, 0xff7df384, 0x00000000, 0xffff0000, 0xffffffff, 0xfffff572, ],
[0xff5cffff, 0xffff0000, 0x00000000, 0x00000000, 0xffdfffff, 0x00000000, 0x00000000, 0x00000000, 0xffffffff, 0x00000000, 0x00000000, 0x00000000, 0xffffffff, 0x00000000, 0x00000000, 0x00000000, 0xffffffff, 0x00000000, 0x00000000, 0x00000000, 0xffffffff, 0x00000000, 0x00000000, 0x00000000, 0xffffffff, 0x00000000, 0x00000000, 0x00000000, 0xffff0000, 0x00000000, 0x00000000, 0x00000000, ], [0xffffff5c, 0x0000ffff, 0x00000000, 0x00000000, 0xffffffdf, 0x00000000, 0x00000000, 0x00000000, 0xffffffff, 0x00000000, 0x00000000, 0x00000000, 0xffffffff, 0x00000000, 0x00000000, 0x00000000, 0xffffffff, 0x00000000, 0x00000000, 0x00000000, 0xffffffff, 0x00000000, 0x00000000, 0x00000000, 0xffffffff, 0x00000000, 0x00000000, 0x00000000, 0x0000ffff, 0x00000000, 0x00000000, 0x00000000, ],
[0x00000000, 0x00000000, 0x00000000, 0x0000ffff, 0x00000000, 0x00000000, 0x0000ffff, 0xffffffff, 0x00000000, 0x00000000, 0x0000ffff, 0xffffffff, 0x00000000, 0x00000000, 0x0000ffff, 0xffffffdf, 0x00000000, 0x00000000, 0x0000ffff, 0xffffffff, 0x00000000, 0x00000000, 0x00000000, 0xffffffff, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, ], [0x00000000, 0x00000000, 0x00000000, 0xffff0000, 0x00000000, 0x00000000, 0xffff0000, 0xffffffff, 0x00000000, 0x00000000, 0xffff0000, 0xffffffff, 0x00000000, 0x00000000, 0xffff0000, 0xffdfffff, 0x00000000, 0x00000000, 0xffff0000, 0xffffffff, 0x00000000, 0x00000000, 0x00000000, 0xffffffff, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, ],
[0xffffffff, 0xffffffff, 0xffffffff, 0xffbefeb9, 0xffffffff, 0xffffffde, 0xfed9f552, 0xf3c5f384, 0xffdffefa, 0xf592f3c6, 0xf384f384, 0xf384f384, 0xfe77f593, 0xf510f44a, 0xf3c6f3a5, 0xf3a4f384, 0xffffffff, 0xffffffff, 0xffffffbe, 0xff7dff3c, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x00000000, 0x00000000, 0x00000000, 0xffffffff, 0x00000000, 0x00000000, 0x00000000, 0x00000000, ], [0xffffffff, 0xffffffff, 0xffffffff, 0xfeb9ffbe, 0xffffffff, 0xffdeffff, 0xf552fed9, 0xf384f3c5, 0xfefaffdf, 0xf3c6f592, 0xf384f384, 0xf384f384, 0xf593fe77, 0xf44af510, 0xf3a5f3c6, 0xf384f3a4, 0xffffffff, 0xffffffff, 0xffbeffff, 0xff3cff7d, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x00000000, 0x00000000, 0x00000000, 0xffffffff, 0x00000000, 0x00000000, 0x00000000, 0x00000000, ],
[0xf530f3a5, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xfedafe98, 0xfe57fdd4, 0xf572f4ce, 0xf429f3a5, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x00000000, 0x00000000, 0x00000000, 0x00000000, ], [0xf3a5f530, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xfe98feda, 0xfdd4fe57, 0xf4cef572, 0xf3a5f429, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x00000000, 0x00000000, 0x00000000, 0x00000000, ],
[0xf384f384, 0xf384f384, 0xf384f384, 0xf384f5b3, 0xf384f384, 0xf384f384, 0xf384f3c5, 0xfe78ffff, 0xf384f384, 0xf384f384, 0xf44aff3b, 0xffffffff, 0xf384f384, 0xf384f510, 0xffbeffff, 0xffffffff, 0xf3a4f3a4, 0xfdf5ffff, 0xffffffff, 0xffff0000, 0xff9dff9d, 0xffffffff, 0xffff0000, 0x00000000, 0xffffffff, 0xffffffff, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, ], [0xf384f384, 0xf384f384, 0xf384f384, 0xf5b3f384, 0xf384f384, 0xf384f384, 0xf3c5f384, 0xfffffe78, 0xf384f384, 0xf384f384, 0xff3bf44a, 0xffffffff, 0xf384f384, 0xf510f384, 0xffffffbe, 0xffffffff, 0xf3a4f3a4, 0xfffffdf5, 0xffffffff, 0x0000ffff, 0xff9dff9d, 0xffffffff, 0x0000ffff, 0x00000000, 0xffffffff, 0xffffffff, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, ],
[0xffdfffff, 0xffffffff, 0x00000000, 0x00000000, 0xffffffff, 0x00000000, 0x00000000, 0x00000000, 0xffff0000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, ], [0xffffffdf, 0xffffffff, 0x00000000, 0x00000000, 0xffffffff, 0x00000000, 0x00000000, 0x00000000, 0x0000ffff, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, ],
[0xffffffff, 0xffffff1b, 0xf3a5f384, 0xf384f384, 0x0000ffff, 0xffffffff, 0xfe36f384, 0xf384f384, 0x00000000, 0xffffffff, 0xfffff530, 0xf384f384, 0x00000000, 0x0000ffff, 0xffffffbe, 0xf42af384, 0x00000000, 0x0000ffff, 0xffffffff, 0xff3bf48c, 0x00000000, 0x00000000, 0xffffffff, 0xffffffff, 0x00000000, 0x00000000, 0x0000ffff, 0xffffffff, 0x00000000, 0x00000000, 0x00000000, 0x00000000, ], [0xffffffff, 0xff1bffff, 0xf384f3a5, 0xf384f384, 0xffff0000, 0xffffffff, 0xf384fe36, 0xf384f384, 0x00000000, 0xffffffff, 0xf530ffff, 0xf384f384, 0x00000000, 0xffff0000, 0xffbeffff, 0xf384f42a, 0x00000000, 0xffff0000, 0xffffffff, 0xf48cff3b, 0x00000000, 0x00000000, 0xffffffff, 0xffffffff, 0x00000000, 0x00000000, 0xffff0000, 0xffffffff, 0x00000000, 0x00000000, 0x00000000, 0x00000000, ],
[0xf384f384, 0xf384f384, 0xf3e8f48c, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf429f429, 0xf408f408, 0xf408f408, 0xf407f407, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x00000000, 0x00000000, 0x00000000, 0x00000000, ], [0xf384f384, 0xf384f384, 0xf48cf3e8, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xf429f429, 0xf408f408, 0xf408f408, 0xf407f407, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x00000000, 0x00000000, 0x00000000, 0x00000000, ],
[0xf384f384, 0xf384feb9, 0xffffffff, 0x00000000, 0xf384f384, 0xf3a5ffbe, 0xffffffff, 0x00000000, 0xf384f384, 0xf510ffff, 0xffff0000, 0x00000000, 0xf384f384, 0xfe98ffff, 0xffff0000, 0x00000000, 0xf407f44a, 0xffbeffff, 0xffff0000, 0x00000000, 0xffffffff, 0xffffffff, 0x00000000, 0x00000000, 0xffffffff, 0xffffffff, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, ], [0xf384f384, 0xfeb9f384, 0xffffffff, 0x00000000, 0xf384f384, 0xffbef3a5, 0xffffffff, 0x00000000, 0xf384f384, 0xfffff510, 0x0000ffff, 0x00000000, 0xf384f384, 0xfffffe98, 0x0000ffff, 0x00000000, 0xf44af407, 0xffffffbe, 0x0000ffff, 0x00000000, 0xffffffff, 0xffffffff, 0x00000000, 0x00000000, 0xffffffff, 0xffffffff, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, ],
[0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x0000ffff, 0x00000000, 0x00000000, 0x0000ffdf, 0xffffffff, 0x00000000, 0x00000000, 0x0000ffff, 0xffffffff, 0x00000000, 0x00000000, 0x0000ffff, 0xffffffde, 0x00000000, 0x00000000, 0x0000ffff, 0xffffffff, 0x00000000, 0x00000000, 0x00000000, 0xffffffff, 0x00000000, 0x00000000, 0x00000000, 0x00000000, ], [0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xffff0000, 0x00000000, 0x00000000, 0xffdf0000, 0xffffffff, 0x00000000, 0x00000000, 0xffff0000, 0xffffffff, 0x00000000, 0x00000000, 0xffff0000, 0xffdeffff, 0x00000000, 0x00000000, 0xffff0000, 0xffffffff, 0x00000000, 0x00000000, 0x00000000, 0xffffffff, 0x00000000, 0x00000000, 0x00000000, 0x00000000, ],
[0x0000ffff, 0xffffffff, 0xffffffff, 0xffbef44b, 0xffffffff, 0xffffffff, 0xff9dfdf5, 0xf3c7f384, 0xffffffff, 0xff9dfdd4, 0xf3c6f384, 0xf384f384, 0xff9dfdb4, 0xf3c5f384, 0xf384f384, 0xf384f3a4, 0xfeb9fed9, 0xfefaff1b, 0xff3cff5c, 0xff5cff7c, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffff0000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, ], [0xffff0000, 0xffffffff, 0xffffffff, 0xf44bffbe, 0xffffffff, 0xffffffff, 0xfdf5ff9d, 0xf384f3c7, 0xffffffff, 0xfdd4ff9d, 0xf384f3c6, 0xf384f384, 0xfdb4ff9d, 0xf384f3c5, 0xf384f384, 0xf3a4f384, 0xfed9feb9, 0xff1bfefa, 0xff5cff3c, 0xff7cff5c, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x0000ffff, 0x00000000, 0x00000000, 0x00000000, 0x00000000, ],
[0xf384f384, 0xf384f384, 0xf384f384, 0xf384f551, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384fdd4, 0xf384f384, 0xf384f384, 0xf384f384, 0xf384fe77, 0xf3a4f3a4, 0xf3a5f3a5, 0xf3a5f3c6, 0xf407fefa, 0xff9dff9d, 0xffbeffde, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, ], [0xf384f384, 0xf384f384, 0xf384f384, 0xf551f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xfdd4f384, 0xf384f384, 0xf384f384, 0xf384f384, 0xfe77f384, 0xf3a4f3a4, 0xf3a5f3a5, 0xf3c6f3a5, 0xfefaf407, 0xff9dff9d, 0xffdeffbe, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, ],
[0xffffffff, 0x00000000, 0x00000000, 0x00000000, 0xffffffff, 0x00000000, 0x00000000, 0x00000000, 0xffffffff, 0x00000000, 0x00000000, 0x00000000, 0xffffffff, 0x00000000, 0x00000000, 0x00000000, 0xffffffff, 0x00000000, 0x00000000, 0x00000000, 0xffff0000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, ], [0xffffffff, 0x00000000, 0x00000000, 0x00000000, 0xffffffff, 0x00000000, 0x00000000, 0x00000000, 0xffffffff, 0x00000000, 0x00000000, 0x00000000, 0xffffffff, 0x00000000, 0x00000000, 0x00000000, 0xffffffff, 0x00000000, 0x00000000, 0x00000000, 0x0000ffff, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, ],
[0x00000000, 0x00000000, 0xffffffff, 0xffffffff, 0x00000000, 0x00000000, 0xffffffff, 0xffffffff, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, ], [0x00000000, 0x00000000, 0xffffffff, 0xffffffff, 0x00000000, 0x00000000, 0xffffffff, 0xffffffff, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, ],
[0xffff0000, 0x00000000, 0x00000000, 0x00000000, 0xffff0000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, ], [0x0000ffff, 0x00000000, 0x00000000, 0x00000000, 0x0000ffff, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, ],
]; ];
#[rustfmt::skip] #[rustfmt::skip]

View File

@ -141,9 +141,7 @@ pub trait LCDLL {
fn write_command(&self, cmd: command); fn write_command(&self, cmd: command);
/** Write bytes. These are provided as 32-bit units (ignoring the upper 24 bits) for efficient DMA */ /** Write bytes. These are provided as 32-bit units (ignoring the upper 24 bits) for efficient DMA */
fn write_byte(&self, data_buf: &[u32]); fn write_byte(&self, data_buf: &[u32]);
/** Write halfs. These are provided as 32-bit units (ignoring the upper 16 bits) for efficient DMA */ /** Write 32-bit words. */
fn write_half(&self, data_buf: &[u32]);
/** Write words. */
fn write_word(&self, data_buf: &[u32]); fn write_word(&self, data_buf: &[u32]);
fn fill_data(&self, data: u32, length: usize); fn fill_data(&self, data: u32, length: usize);
} }
@ -157,7 +155,7 @@ pub trait LCDHL {
/** Clear the screen to a single RGB565 color. */ /** Clear the screen to a single RGB565 color. */
fn clear(&self, color: u16); fn clear(&self, color: u16);
/** Draw a picture, filling the entire screen or part of it. `data` packs two RGB565 pixels /** Draw a picture, filling the entire screen or part of it. `data` packs two RGB565 pixels
* per u32 as 0xAAAABBBB. */ * per u32 as 0xBBBBAAAA. */
fn draw_picture(&self, x1: u16, y1: u16, width: u16, height: u16, data: &[u32]); fn draw_picture(&self, x1: u16, y1: u16, width: u16, height: u16, data: &[u32]);
/** Shut down and turn off the screen. */ /** Shut down and turn off the screen. */
fn shutdown(&mut self); fn shutdown(&mut self);
@ -273,29 +271,13 @@ impl<X: SPI> LCDLL for LCD<'_, X> {
self.spi.send_data_dma(self.dmac, self.channel, self.spi_cs, data_buf); self.spi.send_data_dma(self.dmac, self.channel, self.spi_cs, data_buf);
} }
fn write_half(&self, data_buf: &[u32]) {
self.set_dcx_data();
self.spi.configure(
work_mode::MODE0,
frame_format::OCTAL,
16, /*data bits*/
0, /*endian*/
0, /*instruction length*/
16, /*address length*/
0, /*wait cycles*/
aitm::AS_FRAME_FORMAT,
tmod::TRANS,
);
self.spi.send_data_dma(self.dmac, self.channel, self.spi_cs, data_buf);
}
fn write_word(&self, data_buf: &[u32]) { fn write_word(&self, data_buf: &[u32]) {
self.set_dcx_data(); self.set_dcx_data();
self.spi.configure( self.spi.configure(
work_mode::MODE0, work_mode::MODE0,
frame_format::OCTAL, frame_format::OCTAL,
32, /*data bits*/ 32, /*data bits*/
0, /*endian*/ 1, /*endian*/
0, /*instruction length*/ 0, /*instruction length*/
32, /*address length*/ 32, /*address length*/
0, /*wait cycles*/ 0, /*wait cycles*/
@ -333,6 +315,9 @@ impl<X: SPI> LCDHL for LCD<'_, X> {
self.write_command(command::SLPOUT); self.write_command(command::SLPOUT);
usleep(100000); usleep(100000);
/*pixel format*/ /*pixel format*/
self.write_command(command::RAMCTRL);
self.write_byte(&[0x00, 0xf0 | 0x08]); // little-endian
self.write_command(command::COLMOD); self.write_command(command::COLMOD);
self.write_byte(&[0x55]); self.write_byte(&[0x55]);
self.set_direction(direction::XY_LRUD); self.set_direction(direction::XY_LRUD);

View File

@ -5,10 +5,38 @@ use crate::board::lcd::LCDHL;
/** Array for representing an image of the entire screen. /** Array for representing an image of the entire screen.
* This is an array of DISP_WIDTH / 2 × DISP_HEIGHT, each two horizontally consecutive * This is an array of DISP_WIDTH / 2 × DISP_HEIGHT, each two horizontally consecutive
* pixels are encoded in a u32 with `(a << 16)|b`. * pixels are encoded in a u32 with `(b << 16)|a`.
*/ */
pub type ScreenImage = [u32; DISP_PIXELS / 2]; pub type ScreenImage = [u32; DISP_PIXELS / 2];
pub trait AsU8 {
fn as_u8_slice(&self) -> &[u8];
fn as_u8_slice_mut(&mut self) -> &mut [u8];
}
pub trait AsU16 {
fn as_u16_slice(&self) -> &[u16];
fn as_u16_slice_mut(&mut self) -> &mut [u16];
}
impl AsU8 for ScreenImage {
fn as_u8_slice(&self) -> &[u8] {
unsafe { core::slice::from_raw_parts(self.as_ptr() as *mut u8, DISP_PIXELS * 2) }
}
fn as_u8_slice_mut(&mut self) -> &mut [u8] {
unsafe { core::slice::from_raw_parts_mut(self.as_mut_ptr() as *mut u8, DISP_PIXELS * 2) }
}
}
impl AsU16 for ScreenImage {
fn as_u16_slice(&self) -> &[u16] {
unsafe { core::slice::from_raw_parts(self.as_ptr() as *mut u16, DISP_PIXELS) }
}
fn as_u16_slice_mut(&mut self) -> &mut [u16] {
unsafe { core::slice::from_raw_parts_mut(self.as_mut_ptr() as *mut u16, DISP_PIXELS) }
}
}
pub fn render_image<L, I>(lcd: &mut L, mut image: I) pub fn render_image<L, I>(lcd: &mut L, mut image: I)
where where
L: LCDHL, L: LCDHL,
@ -21,7 +49,7 @@ where
let yx = (0..DISP_HEIGHT) let yx = (0..DISP_HEIGHT)
.flat_map(|y| core::iter::repeat(y).zip(0..DISP_WIDTH / 2)); .flat_map(|y| core::iter::repeat(y).zip(0..DISP_WIDTH / 2));
idata.iter_mut().zip(yx).for_each(|(v, (y, x))| { idata.iter_mut().zip(yx).for_each(|(v, (y, x))| {
*v = (u32::from(image(x * 2 + 0, y)) << 16) | (u32::from(image(x * 2 + 1, y))); *v = (u32::from(image(x * 2 + 0, y)) << 0) | (u32::from(image(x * 2 + 1, y)) << 16);
}); });
// It would be possible to make draw_picture take an iterator directly // It would be possible to make draw_picture take an iterator directly

View File

@ -14,6 +14,7 @@ use k210_hal::pac::Peripherals;
use k210_shared::board::def::{io, DISP_HEIGHT, DISP_PIXELS, DISP_WIDTH}; use k210_shared::board::def::{io, DISP_HEIGHT, DISP_PIXELS, DISP_WIDTH};
use k210_shared::board::lcd::{self, LCD, LCDHL}; use k210_shared::board::lcd::{self, LCD, LCDHL};
use k210_shared::board::lcd_colors; use k210_shared::board::lcd_colors;
use k210_shared::board::lcd_render::{AsU8, ScreenImage};
use k210_shared::board::sdcard; use k210_shared::board::sdcard;
use k210_shared::soc::dmac::{dma_channel, DMACExt}; use k210_shared::soc::dmac::{dma_channel, DMACExt};
use k210_shared::soc::fpioa; use k210_shared::soc::fpioa;
@ -28,8 +29,6 @@ const SD_CS_GPIONUM: u8 = 7;
* in the FPIOA */ * in the FPIOA */
const SD_CS: u32 = 3; const SD_CS: u32 = 3;
pub type ScreenImage = [u32; DISP_PIXELS / 2];
/** Connect pins to internal functions */ /** Connect pins to internal functions */
fn io_init() { fn io_init() {
/* Init SD card function settings */ /* Init SD card function settings */
@ -93,23 +92,15 @@ fn main() -> ! {
assert!(num_sectors > 0); assert!(num_sectors > 0);
let mut sector: u64 = 0; let mut sector: u64 = 0;
let mut image: ScreenImage = [0; DISP_PIXELS / 2]; let mut image: ScreenImage = [0; DISP_PIXELS / 2];
let mut buffer = [0u8; DISP_PIXELS * 2];
while sector < num_sectors { while sector < num_sectors {
/* Read raw image */ /* Read raw image */
sd.read_sector(&mut buffer, sector.try_into().unwrap()) sd.read_sector(image.as_u8_slice_mut(), sector.try_into().unwrap())
.unwrap(); .unwrap();
writeln!(stdout, "sector {} succesfully read", sector).unwrap(); writeln!(stdout, "sector {} succesfully read", sector).unwrap();
let mut i = buffer.iter();
/* Combine into u32s, reordering 16-bit halves */
for x in image.iter_mut() {
*x = (u32::from(*i.next().unwrap()) << 16)
| (u32::from(*i.next().unwrap()) << 24)
| (u32::from(*i.next().unwrap()) << 0)
| (u32::from(*i.next().unwrap()) << 8);
}
lcd.draw_picture(0, 0, DISP_WIDTH, DISP_HEIGHT, &image); lcd.draw_picture(0, 0, DISP_WIDTH, DISP_HEIGHT, &image);
sector += (buffer.len() / 512) as u64; sector += (image.len() * 4 / 512) as u64;
} }
loop {} loop {}
} }

View File

@ -11,7 +11,7 @@ use k210_hal::pac::Peripherals;
use k210_shared::board::def::{io, DISP_HEIGHT, DISP_PIXELS, DISP_WIDTH, MSA300_SLV_ADDR,MSA300_ADDR_BITS,MSA300_CLK}; use k210_shared::board::def::{io, DISP_HEIGHT, DISP_PIXELS, DISP_WIDTH, MSA300_SLV_ADDR,MSA300_ADDR_BITS,MSA300_CLK};
use k210_shared::board::lcd::{self, LCD, LCDHL}; use k210_shared::board::lcd::{self, LCD, LCDHL};
use k210_shared::board::lcd_colors; use k210_shared::board::lcd_colors;
use k210_shared::board::lcd_render::ScreenImage; use k210_shared::board::lcd_render::{AsU16, ScreenImage};
use k210_shared::board::msa300::Accelerometer; use k210_shared::board::msa300::Accelerometer;
use k210_shared::soc::dmac::{dma_channel, DMACExt}; use k210_shared::soc::dmac::{dma_channel, DMACExt};
use k210_shared::soc::fpioa; use k210_shared::soc::fpioa;
@ -131,7 +131,7 @@ struct Display {
* a vertical line. * a vertical line.
*/ */
trait VoxelTarget { trait VoxelTarget {
/** Draw a vertical line at x coordinate `cx`, from y coordinate `cy1` to `cy2`. */ /** Draw a vertical line at x coordinate `cx`, from y coordinate `cy1` to `cy2`, exclusive. */
fn dvline(&mut self, cx: i32, cy1: i32, cy2: i32, color: Color); fn dvline(&mut self, cx: i32, cy1: i32, cy2: i32, color: Color);
} }
@ -141,25 +141,18 @@ impl Display {
data: [0; DISP_PIXELS / 2], data: [0; DISP_PIXELS / 2],
} }
} }
/** Image data as mutable [u16] for internal drawing use. */
fn data(&mut self) -> &mut [u16] {
unsafe { core::slice::from_raw_parts_mut(self.data.as_ptr() as *mut u16, DISP_PIXELS) }
}
} }
impl VoxelTarget for Display { impl VoxelTarget for Display {
/** Draw a vertical line at x coordinate `cx`, from y coordinate `cy1` to `cy2`. */ fn dvline(&mut self, cx: i32, mut cy1: i32, mut cy2: i32, color: Color) {
fn dvline(&mut self, cx: i32, cy1: i32, cy2: i32, color: Color) { let data = self.data.as_u16_slice_mut();
let data = self.data();
if cx < 0 || cx >= (DISP_WIDTH as i32) { if cx < 0 || cx >= (DISP_WIDTH as i32) {
return; return;
} }
let xofs = (cx ^ 1) as usize; cy1 = core::cmp::max(cy1, 0);
cy2 = core::cmp::min(cy2, DISP_HEIGHT as i32);
for y in cy1..cy2 { for y in cy1..cy2 {
if y >= 0 && y < (DISP_HEIGHT as i32) { data[(y as usize) * (DISP_WIDTH as usize) + (cx as usize)] = color;
data[(y as usize) * (DISP_WIDTH as usize) + xofs] = color;
}
} }
} }
} }