diff --git a/src/examples/pyportal_boing/graphics/boing_graphics.go b/src/examples/pyportal_boing/graphics/boing_graphics.go new file mode 100644 index 0000000000..44be748dc2 --- /dev/null +++ b/src/examples/pyportal_boing/graphics/boing_graphics.go @@ -0,0 +1,1387 @@ +package graphics + +const ( + SCREENHEIGHT = 240 + SCREENWIDTH = 320 +) + +// Graphics arrays were generated from PNG images using Python and PIL. +// Each is bit-packed into bytes: background is 1bpp, ball is 4bpp. + +var Background = [SCREENHEIGHT * (SCREENWIDTH / 8)]uint8{ + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X07, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFC, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X04, 0X00, 0X04, 0X00, + 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, + 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, + 0X04, 0X00, 0X04, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, + 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, + 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, + 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, + 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X04, 0X00, 0X04, 0X00, + 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, + 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, + 0X04, 0X00, 0X04, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, + 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, + 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, + 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, + 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X04, 0X00, 0X04, 0X00, + 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, + 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, + 0X04, 0X00, 0X04, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, + 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, + 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, + 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, + 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X04, 0X00, 0X04, 0X00, + 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, + 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, + 0X04, 0X00, 0X04, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, + 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, + 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, + 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, + 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X04, 0X00, 0X04, 0X00, + 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, + 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, + 0X04, 0X00, 0X04, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, + 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, + 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, + 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, + 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X07, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFC, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, + 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, + 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, + 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, + 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X04, 0X00, 0X04, 0X00, + 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, + 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, + 0X04, 0X00, 0X04, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, + 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, + 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, + 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, + 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X04, 0X00, 0X04, 0X00, + 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, + 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, + 0X04, 0X00, 0X04, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, + 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, + 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, + 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, + 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X04, 0X00, 0X04, 0X00, + 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, + 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, + 0X04, 0X00, 0X04, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, + 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, + 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, + 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, + 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X04, 0X00, 0X04, 0X00, + 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, + 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, + 0X04, 0X00, 0X04, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, + 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, + 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, + 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, + 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X04, 0X00, 0X04, 0X00, + 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, + 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, + 0X04, 0X00, 0X04, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X07, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFC, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, + 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, + 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X04, 0X00, 0X04, 0X00, + 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, + 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, + 0X04, 0X00, 0X04, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, + 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, + 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, + 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, + 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X04, 0X00, 0X04, 0X00, + 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, + 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, + 0X04, 0X00, 0X04, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, + 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, + 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, + 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, + 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X04, 0X00, 0X04, 0X00, + 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, + 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, + 0X04, 0X00, 0X04, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, + 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, + 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, + 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, + 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X04, 0X00, 0X04, 0X00, + 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, + 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, + 0X04, 0X00, 0X04, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, + 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, + 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, + 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, + 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X04, 0X00, 0X04, 0X00, + 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, + 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, + 0X04, 0X00, 0X04, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, + 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, + 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X07, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFC, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X04, 0X00, 0X04, 0X00, + 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, + 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, + 0X04, 0X00, 0X04, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, + 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, + 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, + 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, + 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X04, 0X00, 0X04, 0X00, + 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, + 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, + 0X04, 0X00, 0X04, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, + 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, + 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, + 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, + 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X04, 0X00, 0X04, 0X00, + 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, + 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, + 0X04, 0X00, 0X04, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, + 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, + 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, + 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, + 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X04, 0X00, 0X04, 0X00, + 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, + 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, + 0X04, 0X00, 0X04, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, + 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, + 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, + 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, + 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X04, 0X00, 0X04, 0X00, + 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, + 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, + 0X04, 0X00, 0X04, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, + 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, + 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, + 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, + 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X07, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFC, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, + 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, + 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, + 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, + 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X04, 0X00, 0X04, 0X00, + 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, + 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, + 0X04, 0X00, 0X04, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, + 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, + 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, + 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, + 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X04, 0X00, 0X04, 0X00, + 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, + 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, + 0X04, 0X00, 0X04, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, + 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, + 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, + 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, + 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X04, 0X00, 0X04, 0X00, + 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, + 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, + 0X04, 0X00, 0X04, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, + 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, + 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, + 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, + 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X04, 0X00, 0X04, 0X00, + 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, + 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, + 0X04, 0X00, 0X04, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, + 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, + 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, + 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, + 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X04, 0X00, 0X04, 0X00, + 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, + 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, + 0X04, 0X00, 0X04, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X07, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFC, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, + 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, + 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X04, 0X00, 0X04, 0X00, + 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, + 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, + 0X04, 0X00, 0X04, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, + 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, + 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, + 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, + 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X04, 0X00, 0X04, 0X00, + 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, + 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, + 0X04, 0X00, 0X04, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, + 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, + 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, + 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, + 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X04, 0X00, 0X04, 0X00, + 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, + 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, + 0X04, 0X00, 0X04, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, + 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, + 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, + 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, + 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X04, 0X00, 0X04, 0X00, + 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, + 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, + 0X04, 0X00, 0X04, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, + 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, + 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, + 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, + 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X04, 0X00, 0X04, 0X00, + 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, + 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, + 0X04, 0X00, 0X04, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, + 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, + 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X07, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFC, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X04, 0X00, 0X04, 0X00, + 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, + 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, + 0X04, 0X00, 0X04, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, + 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, + 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, + 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, + 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X04, 0X00, 0X04, 0X00, + 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, + 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, + 0X04, 0X00, 0X04, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, + 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, + 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, + 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, + 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X04, 0X00, 0X04, 0X00, + 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, + 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, + 0X04, 0X00, 0X04, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, + 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, + 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, + 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, + 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X04, 0X00, 0X04, 0X00, + 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, + 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, + 0X04, 0X00, 0X04, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, + 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, + 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, + 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, + 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X04, 0X00, 0X04, 0X00, + 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, + 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, + 0X04, 0X00, 0X04, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, + 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, + 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, + 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, + 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X07, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFC, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, + 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, + 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, + 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, + 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X04, 0X00, 0X04, 0X00, + 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, + 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, + 0X04, 0X00, 0X04, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, + 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, + 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, + 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, + 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X04, 0X00, 0X04, 0X00, + 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, + 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, + 0X04, 0X00, 0X04, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, + 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, + 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, + 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, + 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X04, 0X00, 0X04, 0X00, + 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, + 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, + 0X04, 0X00, 0X04, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, + 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, + 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, + 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, + 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X04, 0X00, 0X04, 0X00, + 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, + 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, + 0X04, 0X00, 0X04, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, + 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, + 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, + 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, + 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X04, 0X00, 0X04, 0X00, + 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, + 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, + 0X04, 0X00, 0X04, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X07, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFC, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, + 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, + 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X04, 0X00, 0X04, 0X00, + 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, + 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, + 0X04, 0X00, 0X04, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, + 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, + 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, + 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, + 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X04, 0X00, 0X04, 0X00, + 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, + 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, + 0X04, 0X00, 0X04, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, + 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, + 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, + 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, + 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X04, 0X00, 0X04, 0X00, + 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, + 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, + 0X04, 0X00, 0X04, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, + 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, + 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, + 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, + 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X04, 0X00, 0X04, 0X00, + 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, + 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, + 0X04, 0X00, 0X04, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, + 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, + 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, + 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, + 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X04, 0X00, 0X04, 0X00, + 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, + 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, + 0X04, 0X00, 0X04, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, + 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, + 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X07, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFC, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X04, 0X00, 0X04, 0X00, + 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, + 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, + 0X04, 0X00, 0X04, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, + 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, + 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, + 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, + 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X04, 0X00, 0X04, 0X00, + 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, + 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, + 0X04, 0X00, 0X04, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, + 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, + 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, + 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, + 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X04, 0X00, 0X04, 0X00, + 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, + 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, + 0X04, 0X00, 0X04, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, + 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, + 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, + 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, + 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X04, 0X00, 0X04, 0X00, + 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, + 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, + 0X04, 0X00, 0X04, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, + 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, + 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, + 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, + 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X04, 0X00, 0X04, 0X00, + 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, + 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, + 0X04, 0X00, 0X04, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, + 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, + 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, + 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, + 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X07, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFC, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, + 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, + 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, + 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, + 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X04, 0X00, 0X04, 0X00, + 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, + 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, + 0X04, 0X00, 0X04, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, + 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, + 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, + 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, + 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X04, 0X00, 0X04, 0X00, + 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, + 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, + 0X04, 0X00, 0X04, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, + 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, + 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, + 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, + 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X04, 0X00, 0X04, 0X00, + 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, + 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, + 0X04, 0X00, 0X04, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, + 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, + 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, + 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, + 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X04, 0X00, 0X04, 0X00, + 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, + 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, + 0X04, 0X00, 0X04, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, + 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, + 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, + 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, + 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X04, 0X00, 0X04, 0X00, + 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, + 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, + 0X04, 0X00, 0X04, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X07, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFC, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, + 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, + 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X04, 0X00, 0X04, 0X00, + 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, + 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, + 0X04, 0X00, 0X04, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, + 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, + 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, + 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, + 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X04, 0X00, 0X04, 0X00, + 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, + 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, + 0X04, 0X00, 0X04, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, + 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, + 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, + 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, + 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X04, 0X00, 0X04, 0X00, + 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, + 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, + 0X04, 0X00, 0X04, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, + 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, + 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, + 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, + 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X04, 0X00, 0X04, 0X00, + 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, + 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, + 0X04, 0X00, 0X04, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, + 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, + 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, + 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, + 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X04, 0X00, 0X04, 0X00, + 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, + 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, + 0X04, 0X00, 0X04, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, + 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, + 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X07, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFC, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X08, 0X00, 0X08, 0X00, + 0X08, 0X00, 0X08, 0X00, 0X08, 0X00, 0X04, 0X00, 0X04, 0X00, 0X04, 0X00, + 0X04, 0X00, 0X04, 0X00, 0X02, 0X00, 0X02, 0X00, 0X02, 0X00, 0X02, 0X00, + 0X02, 0X00, 0X03, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X3F, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0X80, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X40, 0X00, 0X20, 0X00, 0X20, 0X00, 0X10, 0X00, + 0X10, 0X00, 0X08, 0X00, 0X08, 0X00, 0X04, 0X00, 0X02, 0X00, 0X02, 0X00, + 0X01, 0X00, 0X01, 0X00, 0X00, 0X80, 0X00, 0X80, 0X00, 0X40, 0X00, 0X40, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X80, 0X00, 0X40, 0X00, + 0X20, 0X00, 0X20, 0X00, 0X10, 0X00, 0X08, 0X00, 0X08, 0X00, 0X04, 0X00, + 0X02, 0X00, 0X02, 0X00, 0X01, 0X00, 0X00, 0X80, 0X00, 0X80, 0X00, 0X40, + 0X00, 0X20, 0X00, 0X30, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X03, + 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XF8, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X02, 0X00, 0X01, 0X00, 0X00, 0X80, 0X00, 0X40, 0X00, + 0X20, 0X00, 0X10, 0X00, 0X08, 0X00, 0X04, 0X00, 0X02, 0X00, 0X01, 0X00, + 0X00, 0X80, 0X00, 0X40, 0X00, 0X20, 0X00, 0X10, 0X00, 0X08, 0X00, 0X06, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X0C, 0X00, 0X02, 0X00, 0X01, + 0X00, 0X00, 0X80, 0X00, 0X40, 0X00, 0X10, 0X00, 0X08, 0X00, 0X04, 0X00, + 0X02, 0X00, 0X01, 0X00, 0X00, 0X40, 0X00, 0X20, 0X00, 0X10, 0X00, 0X08, + 0X00, 0X06, 0X00, 0X01, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X10, + 0X00, 0X04, 0X00, 0X02, 0X00, 0X01, 0X00, 0X00, 0X40, 0X00, 0X20, 0X00, + 0X08, 0X00, 0X04, 0X00, 0X02, 0X00, 0X00, 0X80, 0X00, 0X40, 0X00, 0X10, + 0X00, 0X08, 0X00, 0X04, 0X00, 0X01, 0X00, 0X00, 0X80, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X3F, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, + 0XE0, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X40, 0X00, 0X10, 0X00, 0X08, + 0X00, 0X02, 0X00, 0X00, 0X80, 0X00, 0X20, 0X00, 0X10, 0X00, 0X04, 0X00, + 0X01, 0X00, 0X00, 0X80, 0X00, 0X20, 0X00, 0X08, 0X00, 0X02, 0X00, 0X01, + 0X00, 0X00, 0X40, 0X00, 0X10, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X80, + 0X00, 0X20, 0X00, 0X10, 0X00, 0X04, 0X00, 0X01, 0X00, 0X00, 0X40, 0X00, + 0X10, 0X00, 0X04, 0X00, 0X01, 0X00, 0X00, 0X40, 0X00, 0X10, 0X00, 0X04, + 0X00, 0X01, 0X00, 0X00, 0X80, 0X00, 0X20, 0X00, 0X08, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X03, 0X00, 0X00, 0XC0, 0X00, 0X10, 0X00, 0X04, 0X00, 0X01, + 0X00, 0X00, 0X40, 0X00, 0X10, 0X00, 0X04, 0X00, 0X01, 0X00, 0X00, 0X40, + 0X00, 0X10, 0X00, 0X04, 0X00, 0X01, 0X00, 0X00, 0X60, 0X00, 0X18, 0X00, + 0X06, 0X00, 0X00, 0X00, 0X00, 0X00, 0X04, 0X00, 0X01, 0X00, 0X00, 0X20, + 0X00, 0X08, 0X00, 0X02, 0X00, 0X00, 0X80, 0X00, 0X10, 0X00, 0X04, 0X00, + 0X01, 0X00, 0X00, 0X20, 0X00, 0X08, 0X00, 0X02, 0X00, 0X00, 0X80, 0X00, + 0X10, 0X00, 0X04, 0X00, 0X01, 0X00, 0X00, 0X00, 0X00, 0X00, 0X08, 0X00, + 0X02, 0X00, 0X00, 0X40, 0X00, 0X10, 0X00, 0X02, 0X00, 0X00, 0X80, 0X00, + 0X10, 0X00, 0X04, 0X00, 0X01, 0X00, 0X00, 0X20, 0X00, 0X08, 0X00, 0X01, + 0X00, 0X00, 0X40, 0X00, 0X08, 0X00, 0X02, 0X00, 0X00, 0XC0, 0X00, 0X00, + 0X00, 0X00, 0X1F, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, + 0XFF, 0XE0, 0X00, 0X00, 0X00, 0X00, 0X60, 0X00, 0X08, 0X00, 0X01, 0X00, + 0X00, 0X20, 0X00, 0X04, 0X00, 0X01, 0X00, 0X00, 0X20, 0X00, 0X04, 0X00, + 0X00, 0X80, 0X00, 0X10, 0X00, 0X04, 0X00, 0X00, 0X80, 0X00, 0X10, 0X00, + 0X02, 0X00, 0X00, 0XC0, 0X00, 0X10, 0X00, 0X00, 0X00, 0X00, 0X80, 0X00, + 0X10, 0X00, 0X02, 0X00, 0X00, 0X40, 0X00, 0X08, 0X00, 0X01, 0X00, 0X00, + 0X20, 0X00, 0X04, 0X00, 0X00, 0X80, 0X00, 0X10, 0X00, 0X02, 0X00, 0X00, + 0X40, 0X00, 0X08, 0X00, 0X01, 0X00, 0X00, 0X20, 0X00, 0X0C, 0X00, 0X00, + 0X00, 0X01, 0X00, 0X00, 0X20, 0X00, 0X04, 0X00, 0X00, 0X80, 0X00, 0X08, + 0X00, 0X01, 0X00, 0X00, 0X20, 0X00, 0X04, 0X00, 0X00, 0X80, 0X00, 0X10, + 0X00, 0X02, 0X00, 0X00, 0X20, 0X00, 0X04, 0X00, 0X00, 0X80, 0X00, 0X10, + 0X00, 0X02, 0X00, 0X00, 0X00, 0X02, 0X00, 0X00, 0X40, 0X00, 0X08, 0X00, + 0X00, 0X80, 0X00, 0X10, 0X00, 0X02, 0X00, 0X00, 0X20, 0X00, 0X04, 0X00, + 0X00, 0X80, 0X00, 0X08, 0X00, 0X01, 0X00, 0X00, 0X20, 0X00, 0X02, 0X00, + 0X00, 0X40, 0X00, 0X08, 0X00, 0X01, 0X80, 0X00, 0X00, 0X04, 0X00, 0X00, + 0X80, 0X00, 0X08, 0X00, 0X01, 0X00, 0X00, 0X10, 0X00, 0X02, 0X00, 0X00, + 0X20, 0X00, 0X04, 0X00, 0X00, 0X80, 0X00, 0X08, 0X00, 0X01, 0X00, 0X00, + 0X10, 0X00, 0X02, 0X00, 0X00, 0X20, 0X00, 0X04, 0X00, 0X00, 0X40, 0X00, + 0X00, 0X18, 0X00, 0X01, 0X00, 0X00, 0X10, 0X00, 0X02, 0X00, 0X00, 0X20, + 0X00, 0X02, 0X00, 0X00, 0X40, 0X00, 0X04, 0X00, 0X00, 0X40, 0X00, 0X08, + 0X00, 0X00, 0X80, 0X00, 0X08, 0X00, 0X01, 0X00, 0X00, 0X10, 0X00, 0X03, + 0X00, 0X00, 0X20, 0X00, 0X00, 0X20, 0X00, 0X02, 0X00, 0X00, 0X20, 0X00, + 0X02, 0X00, 0X00, 0X20, 0X00, 0X04, 0X00, 0X00, 0X40, 0X00, 0X04, 0X00, + 0X00, 0X40, 0X00, 0X04, 0X00, 0X00, 0X80, 0X00, 0X08, 0X00, 0X00, 0X80, + 0X00, 0X08, 0X00, 0X00, 0X80, 0X00, 0X18, 0X00, 0X00, 0X7F, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, + 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFF, 0XFC, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, +} + +const ( + BALLWIDTH = 136 + BALLHEIGHT = 100 +) + +var Ball = [BALLHEIGHT * (BALLWIDTH / 2)]uint8{ + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X01, 0X11, + 0X11, 0X11, 0X11, 0X11, 0X10, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X01, 0X11, 0X11, 0X11, 0X11, 0X11, 0X11, + 0X11, 0X11, 0X11, 0X11, 0X11, 0X11, 0X11, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0XAA, 0XA6, 0X43, 0XDB, 0X00, 0X00, 0X00, 0X00, + 0X01, 0X11, 0X11, 0X11, 0X11, 0X11, 0X11, 0X11, 0X11, 0X11, 0X11, 0X11, + 0X11, 0X11, 0X11, 0X11, 0X10, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0XAA, 0XAA, + 0X86, 0X43, 0X32, 0XED, 0X33, 0X33, 0X3D, 0X11, 0X11, 0X11, 0X11, 0X11, + 0X11, 0X11, 0X11, 0X11, 0X11, 0X11, 0X11, 0X11, 0X11, 0X11, 0X11, 0X11, + 0X11, 0X11, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0XAA, 0XAA, 0X86, 0X54, 0X33, 0X32, 0XED, 0XCC, + 0XCB, 0X9A, 0XA3, 0X33, 0X33, 0X33, 0X11, 0X11, 0X11, 0X11, 0X11, 0X11, + 0X11, 0X11, 0X11, 0X11, 0X11, 0X11, 0X11, 0X11, 0X11, 0X11, 0X11, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0XAA, 0XAA, + 0X86, 0X55, 0X33, 0X32, 0XFE, 0XDD, 0XCC, 0XCB, 0XA9, 0X88, 0X76, 0XFF, + 0X55, 0X5A, 0X33, 0X33, 0X41, 0X11, 0X11, 0X11, 0X11, 0X11, 0X11, 0X11, + 0X11, 0X11, 0X11, 0X11, 0X11, 0X11, 0X11, 0X11, 0X10, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0XAA, 0XAA, 0X86, 0X55, 0X43, 0X32, 0XFF, 0XED, + 0XDC, 0XCC, 0XCB, 0XA9, 0X88, 0X87, 0X65, 0X54, 0X33, 0XCB, 0XA9, 0X85, + 0X3C, 0X41, 0X11, 0X11, 0X11, 0X11, 0X11, 0X11, 0X11, 0X11, 0X11, 0X11, + 0X11, 0X11, 0X11, 0X11, 0X11, 0X11, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X03, 0XFD, + 0X86, 0X55, 0X54, 0X32, 0XFF, 0XFF, 0XED, 0XDC, 0XCC, 0XBA, 0XA9, 0X88, + 0X87, 0X65, 0X55, 0X43, 0X32, 0X2F, 0XE6, 0X64, 0X32, 0XC9, 0X41, 0X11, + 0X11, 0X11, 0X11, 0X11, 0X11, 0X11, 0X11, 0X11, 0X11, 0X11, 0X11, 0X11, + 0X11, 0X11, 0X11, 0X10, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X03, 0X3F, 0XDC, 0XCA, 0X92, 0XFF, 0XFF, + 0XFE, 0XDD, 0XDC, 0XCB, 0XAA, 0XA9, 0X88, 0X87, 0X66, 0X55, 0X54, 0X33, + 0X22, 0XFE, 0XDD, 0XCB, 0X33, 0XFD, 0XA6, 0X41, 0X11, 0X11, 0X11, 0X11, + 0X11, 0X11, 0X11, 0X11, 0X11, 0X11, 0X11, 0X11, 0X11, 0X11, 0X11, 0X11, + 0X10, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X3F, 0XED, 0XCC, 0XA9, 0X88, 0X87, 0XED, 0XDD, 0XCC, 0XCB, 0XAA, + 0XA9, 0X88, 0X88, 0X76, 0X65, 0X54, 0X43, 0X32, 0X2F, 0XEE, 0XDD, 0XCB, + 0XAA, 0X98, 0XDC, 0X96, 0X47, 0X11, 0X11, 0X11, 0X11, 0X11, 0X11, 0X11, + 0X11, 0X11, 0X11, 0X11, 0X11, 0X11, 0X11, 0X11, 0X11, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X33, 0XFD, 0XCC, 0XBA, + 0X98, 0X88, 0X76, 0X65, 0X54, 0XBA, 0XAA, 0XA9, 0X88, 0X88, 0X76, 0X65, + 0X55, 0X44, 0X33, 0X22, 0XFF, 0XED, 0XDC, 0XBB, 0XAA, 0X98, 0X76, 0X5A, + 0X96, 0X48, 0X11, 0X11, 0X11, 0X11, 0X11, 0X11, 0X11, 0X11, 0X11, 0X11, + 0X11, 0X11, 0X11, 0X11, 0X11, 0X10, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X03, 0XFE, 0XDC, 0XCA, 0X98, 0X88, 0X87, 0X66, 0X55, + 0X43, 0X33, 0X22, 0X88, 0X88, 0X76, 0X66, 0X55, 0X54, 0X33, 0X32, 0X2F, + 0XFE, 0XED, 0XDC, 0XBA, 0XAA, 0X98, 0X76, 0X54, 0X32, 0X76, 0X48, 0X11, + 0X11, 0X11, 0X11, 0X11, 0X11, 0X11, 0X11, 0X11, 0X11, 0X11, 0X11, 0X11, + 0X11, 0X11, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X03, 0X3F, + 0XED, 0XCB, 0XA9, 0X88, 0X87, 0X76, 0X65, 0X54, 0X33, 0X32, 0X2F, 0XFF, + 0XE6, 0X66, 0X65, 0X55, 0X43, 0X33, 0X22, 0XFF, 0XEE, 0XDD, 0XCC, 0XBA, + 0XA9, 0X98, 0X76, 0X55, 0X32, 0XFE, 0XDC, 0XF8, 0X11, 0X11, 0X11, 0X11, + 0X11, 0X11, 0X11, 0X11, 0X11, 0X11, 0X11, 0X11, 0X11, 0X11, 0X10, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X03, 0X3F, 0XED, 0XCC, 0XBA, 0X98, 0X88, + 0X76, 0X66, 0X55, 0X43, 0X33, 0X22, 0XFF, 0XFE, 0XDD, 0XD5, 0X55, 0X44, + 0X33, 0X32, 0X2F, 0XFE, 0XEE, 0XDD, 0XCB, 0XBA, 0XA9, 0X98, 0X76, 0X65, + 0X43, 0X2F, 0XED, 0XC9, 0X88, 0X11, 0X11, 0X11, 0X11, 0X11, 0X11, 0X11, + 0X11, 0X11, 0X11, 0X11, 0X11, 0X11, 0X11, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X3F, 0XEE, 0XDC, 0XCB, 0XA9, 0X88, 0X87, 0X66, 0X55, 0X44, 0X33, + 0X32, 0X2F, 0XFF, 0XED, 0XDD, 0XCC, 0XCB, 0XB3, 0X33, 0X22, 0XFF, 0XFE, + 0XED, 0XDC, 0XCB, 0XBA, 0XA9, 0X98, 0X76, 0X65, 0X43, 0X2F, 0XED, 0XCB, + 0X98, 0X4F, 0X11, 0X11, 0X11, 0X11, 0X11, 0X11, 0X11, 0X11, 0X11, 0X11, + 0X11, 0X11, 0X11, 0X10, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X33, 0XFE, 0XED, 0XCB, + 0XA9, 0X88, 0X88, 0X76, 0X65, 0X54, 0X43, 0X33, 0X22, 0XFF, 0XFE, 0XED, + 0XDC, 0XCC, 0XBB, 0XAA, 0XA9, 0X9F, 0XFF, 0XEE, 0XED, 0XDC, 0XCB, 0XBA, + 0XA9, 0X88, 0X76, 0X65, 0X43, 0X32, 0XFE, 0XDC, 0XA9, 0X74, 0XF1, 0X11, + 0X11, 0X11, 0X11, 0X11, 0X11, 0X11, 0X11, 0X11, 0X11, 0X11, 0X11, 0X11, + 0X10, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X03, 0XFE, 0XED, 0XCC, 0XBA, 0X98, 0X88, 0X77, 0X66, + 0X55, 0X44, 0X33, 0X32, 0X2F, 0XFF, 0XEE, 0XDD, 0XDC, 0XCC, 0XBB, 0XAA, + 0X99, 0X98, 0X87, 0XEE, 0XDD, 0XCC, 0XCB, 0XBA, 0XA9, 0X88, 0X77, 0X65, + 0X54, 0X32, 0XFE, 0XDC, 0XC9, 0X86, 0X4F, 0X11, 0X11, 0X11, 0X11, 0X11, + 0X11, 0X11, 0X11, 0X11, 0X11, 0X11, 0X11, 0X11, 0X11, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X03, 0X3F, + 0XEE, 0XDC, 0XBB, 0XA9, 0X88, 0X87, 0X76, 0X65, 0X54, 0X43, 0X33, 0X22, + 0XFF, 0XFE, 0XED, 0XDD, 0XCC, 0XCB, 0XBA, 0XAA, 0X99, 0X88, 0X77, 0X77, + 0X66, 0XCC, 0XBB, 0XAA, 0X99, 0X88, 0X77, 0X65, 0X54, 0X33, 0X2F, 0XED, + 0XCB, 0X98, 0X64, 0XF1, 0X11, 0X11, 0X11, 0X11, 0X11, 0X11, 0X11, 0X11, + 0X11, 0X11, 0X11, 0X11, 0X11, 0X10, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0XA8, 0XEE, 0XED, 0XCB, 0XBA, 0X98, + 0X88, 0X77, 0X66, 0X55, 0X44, 0X33, 0X33, 0X22, 0XFF, 0XEE, 0XDD, 0XDC, + 0XCC, 0XBB, 0XAA, 0XA9, 0X99, 0X88, 0X77, 0X76, 0X66, 0X55, 0XBB, 0XAA, + 0X99, 0X88, 0X77, 0X65, 0X54, 0X33, 0X2F, 0XEE, 0XCC, 0XA9, 0X85, 0X2E, + 0X11, 0X11, 0X11, 0X11, 0X11, 0X11, 0X11, 0X11, 0X11, 0X11, 0X11, 0X11, + 0X11, 0X11, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X0A, 0X87, 0X76, 0X5B, 0XBA, 0X98, 0X88, 0X87, 0X66, 0X65, 0X54, + 0X43, 0X33, 0X32, 0X2F, 0XFF, 0XED, 0XDD, 0XCC, 0XCC, 0XBB, 0XAA, 0XA9, + 0X98, 0X87, 0X77, 0X76, 0X65, 0X55, 0X44, 0X33, 0X99, 0X88, 0X77, 0X66, + 0X54, 0X43, 0X22, 0XFE, 0XDC, 0XCA, 0X97, 0X52, 0XE1, 0X11, 0X11, 0X11, + 0X11, 0X11, 0X11, 0X11, 0X11, 0X11, 0X11, 0X11, 0X11, 0X11, 0X10, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X0A, 0X87, 0X65, + 0X44, 0X32, 0X88, 0X87, 0X76, 0X65, 0X54, 0X44, 0X33, 0X33, 0X22, 0XFF, + 0XFE, 0XED, 0XDD, 0XCC, 0XCB, 0XBA, 0XAA, 0X99, 0X98, 0X87, 0X77, 0X66, + 0X65, 0X54, 0X44, 0X33, 0X22, 0XFF, 0X77, 0X66, 0X55, 0X43, 0X32, 0XFE, + 0XED, 0XCB, 0XA9, 0X75, 0X2E, 0X11, 0X11, 0X11, 0X11, 0X11, 0X11, 0X11, + 0X11, 0X11, 0X11, 0X11, 0X11, 0X11, 0X11, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0XA8, 0X77, 0X65, 0X43, 0X2F, 0XFF, 0XEE, + 0X66, 0X55, 0X44, 0X43, 0X33, 0X32, 0X2F, 0XFF, 0XEE, 0XDD, 0XDC, 0XCC, + 0XBB, 0XAA, 0XAA, 0X99, 0X88, 0X77, 0X77, 0X66, 0X55, 0X54, 0X43, 0X32, + 0X22, 0XFF, 0XEE, 0X66, 0X55, 0X43, 0X32, 0X2F, 0XEE, 0XCC, 0XB9, 0X86, + 0X52, 0XE1, 0X11, 0X11, 0X11, 0X11, 0X11, 0X11, 0X11, 0X11, 0X11, 0X11, + 0X11, 0X11, 0X11, 0X10, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0XA8, 0X76, 0X54, 0X43, 0X2F, 0XFE, 0XED, 0XDC, 0XC4, 0X44, 0X33, + 0X33, 0X22, 0XFF, 0XFE, 0XED, 0XDD, 0XCC, 0XCB, 0XBB, 0XAA, 0XA9, 0X99, + 0X88, 0X77, 0X76, 0X66, 0X55, 0X54, 0X43, 0X32, 0X22, 0XFF, 0XEE, 0XDD, + 0XCC, 0X44, 0X33, 0X2F, 0XEE, 0XDC, 0XBA, 0X98, 0X64, 0XF1, 0X11, 0X11, + 0X11, 0X11, 0X11, 0X11, 0X11, 0X11, 0X11, 0X11, 0X11, 0X11, 0X11, 0X11, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X0A, 0X87, 0X65, 0X54, + 0X32, 0XFF, 0XFE, 0XED, 0XCC, 0XBB, 0XBA, 0X33, 0X32, 0X2F, 0XFF, 0XEE, + 0XDD, 0XDC, 0XCC, 0XCB, 0XBA, 0XAA, 0X99, 0X98, 0X87, 0X77, 0X76, 0X66, + 0X55, 0X44, 0X43, 0X32, 0X2F, 0XFF, 0XEE, 0XDD, 0XCC, 0XBB, 0XAA, 0X22, + 0XFE, 0XEC, 0XCB, 0XA9, 0X76, 0X4F, 0X11, 0X11, 0X11, 0X11, 0X11, 0X11, + 0X11, 0X11, 0X11, 0X11, 0X11, 0X11, 0X11, 0X11, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0XA8, 0X77, 0X65, 0X43, 0X22, 0XFF, 0XEE, 0XDD, + 0XCC, 0XBB, 0XBA, 0XAA, 0X99, 0XFF, 0XFE, 0XEE, 0XDD, 0XDC, 0XCC, 0XBB, + 0XBA, 0XAA, 0X99, 0X98, 0X87, 0X77, 0X66, 0X65, 0X55, 0X44, 0X33, 0X32, + 0X2F, 0XFE, 0XEE, 0XDD, 0XCC, 0XBB, 0XAA, 0X99, 0XFE, 0XED, 0XCC, 0XBA, + 0X97, 0X64, 0XF1, 0X11, 0X11, 0X11, 0X11, 0X11, 0X11, 0X11, 0X11, 0X11, + 0X11, 0X11, 0X11, 0X11, 0X10, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0XA8, 0X76, 0X54, 0X43, 0X2F, 0XFE, 0XEE, 0XDC, 0XCB, 0XBB, 0XAA, 0XA9, + 0X98, 0X88, 0XEE, 0XED, 0XDD, 0XCC, 0XCB, 0XBB, 0XAA, 0XA9, 0X99, 0X88, + 0X77, 0X77, 0X66, 0X65, 0X55, 0X44, 0X33, 0X22, 0X2F, 0XFE, 0XED, 0XDD, + 0XCC, 0XBB, 0XAA, 0X99, 0X88, 0X77, 0XCC, 0XBA, 0X98, 0X75, 0X4F, 0X11, + 0X11, 0X11, 0X11, 0X11, 0X11, 0X11, 0X11, 0X11, 0X11, 0X11, 0X11, 0X11, + 0X10, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X0A, 0X87, 0X76, 0X54, 0X32, + 0X2F, 0XFE, 0XED, 0XDC, 0XCB, 0XBB, 0XAA, 0XA9, 0X98, 0X88, 0X77, 0X66, + 0X65, 0XCC, 0XCB, 0XBA, 0XAA, 0XA9, 0X99, 0X88, 0X77, 0X76, 0X66, 0X55, + 0X54, 0X44, 0X33, 0X22, 0X2F, 0XFE, 0XED, 0XDD, 0XCC, 0XBB, 0XAA, 0X99, + 0X88, 0X77, 0X65, 0X54, 0XA9, 0X86, 0X52, 0XE1, 0X11, 0X11, 0X11, 0X11, + 0X11, 0X11, 0X11, 0X11, 0X11, 0X11, 0X11, 0X11, 0X11, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X0A, 0X87, 0X65, 0X44, 0X32, 0XFF, 0XEE, 0XDD, 0XCC, + 0XBB, 0XBA, 0XAA, 0X99, 0X88, 0X87, 0X77, 0X66, 0X65, 0X55, 0XBB, 0XBA, + 0XAA, 0X99, 0X98, 0X87, 0X77, 0X76, 0X66, 0X55, 0X54, 0X43, 0X33, 0X22, + 0X2F, 0XFE, 0XED, 0XDD, 0XCC, 0XBB, 0XAA, 0X99, 0X88, 0X77, 0X65, 0X54, + 0X33, 0X27, 0X65, 0X2E, 0X11, 0X11, 0X11, 0X11, 0X11, 0X11, 0X11, 0X11, + 0X11, 0X11, 0X11, 0X11, 0X11, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0XA8, + 0X76, 0X55, 0X43, 0X22, 0XFF, 0XEE, 0XDD, 0XCC, 0XBB, 0XBA, 0XAA, 0X99, + 0X88, 0X87, 0X76, 0X66, 0X55, 0X55, 0X44, 0X3A, 0XAA, 0X99, 0X98, 0X87, + 0X77, 0X66, 0X66, 0X55, 0X54, 0X43, 0X33, 0X22, 0XFF, 0XFE, 0XED, 0XDD, + 0XCC, 0XBB, 0XAA, 0X99, 0X88, 0X77, 0X65, 0X54, 0X33, 0X2F, 0XED, 0XC2, + 0XE1, 0X11, 0X11, 0X11, 0X11, 0X11, 0X11, 0X11, 0X11, 0X11, 0X11, 0X11, + 0X11, 0X10, 0X00, 0X00, 0X00, 0X00, 0X00, 0XA8, 0X76, 0X54, 0X32, 0X2F, + 0XFE, 0XED, 0XDC, 0XCB, 0XBB, 0XAA, 0XA9, 0X98, 0X88, 0X77, 0X76, 0X66, + 0X55, 0X54, 0X44, 0X33, 0X32, 0X99, 0X88, 0X77, 0X77, 0X66, 0X65, 0X55, + 0X44, 0X43, 0X32, 0X22, 0XFF, 0XFE, 0XED, 0XDD, 0XCC, 0XBB, 0XAA, 0X99, + 0X88, 0X77, 0X66, 0X55, 0X43, 0X2F, 0XED, 0XCB, 0X97, 0X11, 0X11, 0X11, + 0X11, 0X11, 0X11, 0X11, 0X11, 0X11, 0X11, 0X11, 0X11, 0X10, 0X00, 0X00, + 0X00, 0X00, 0X0A, 0X87, 0X65, 0X54, 0X32, 0X2F, 0XEE, 0XED, 0XDC, 0XCB, + 0XBB, 0XAA, 0XA9, 0X98, 0X88, 0X77, 0X66, 0X65, 0X55, 0X54, 0X43, 0X33, + 0X32, 0X22, 0XFF, 0XE7, 0X76, 0X66, 0X65, 0X55, 0X44, 0X33, 0X32, 0X22, + 0XFF, 0XFE, 0XED, 0XDC, 0XCC, 0XBB, 0XAA, 0X99, 0X88, 0X77, 0X76, 0X55, + 0X43, 0X32, 0XFE, 0XDC, 0X97, 0X11, 0X11, 0X11, 0X11, 0X11, 0X11, 0X11, + 0X11, 0X11, 0X11, 0X11, 0X11, 0X11, 0X00, 0X00, 0X00, 0X00, 0XA8, 0X76, + 0X55, 0X43, 0X22, 0XFF, 0XEE, 0XDD, 0XCC, 0XBB, 0XBA, 0XAA, 0X99, 0X88, + 0X87, 0X77, 0X66, 0X65, 0X55, 0X44, 0X43, 0X33, 0X22, 0X22, 0XFF, 0XEE, + 0XED, 0X66, 0X55, 0X55, 0X44, 0X33, 0X32, 0X22, 0XFF, 0XFE, 0XED, 0XDC, + 0XCC, 0XBB, 0XAA, 0X99, 0X88, 0X77, 0X76, 0X55, 0X43, 0X32, 0XFE, 0XDC, + 0XB9, 0X71, 0X11, 0X11, 0X11, 0X11, 0X11, 0X11, 0X11, 0X11, 0X11, 0X11, + 0X11, 0X11, 0X00, 0X00, 0X00, 0X00, 0XA8, 0X76, 0X54, 0X32, 0X22, 0XFE, + 0XEE, 0XDD, 0XCC, 0XBB, 0XBA, 0XAA, 0X99, 0X88, 0X87, 0X76, 0X66, 0X55, + 0X55, 0X44, 0X33, 0X33, 0X22, 0X2F, 0XFE, 0XEE, 0XED, 0XDD, 0XC5, 0X54, + 0X44, 0X33, 0X32, 0X22, 0XFF, 0XEE, 0XED, 0XDC, 0XCC, 0XBB, 0XAA, 0XA9, + 0X88, 0X77, 0X76, 0X55, 0X43, 0X32, 0XFE, 0XDC, 0XB9, 0X71, 0X11, 0X11, + 0X11, 0X11, 0X11, 0X11, 0X11, 0X11, 0X11, 0X11, 0X11, 0X11, 0X00, 0X00, + 0X00, 0X0A, 0X87, 0X65, 0X54, 0X32, 0X2F, 0XEE, 0XED, 0XDC, 0XCB, 0XBB, + 0XAA, 0XA9, 0X98, 0X88, 0X77, 0X76, 0X66, 0X55, 0X54, 0X44, 0X33, 0X32, + 0X22, 0X2F, 0XFE, 0XEE, 0XDD, 0XDD, 0XCC, 0XC4, 0X43, 0X33, 0X22, 0X2F, + 0XFF, 0XEE, 0XDD, 0XDC, 0XCC, 0XBB, 0XAA, 0XA9, 0X98, 0X87, 0X76, 0X55, + 0X44, 0X32, 0XFE, 0XDD, 0XCA, 0X81, 0X11, 0X11, 0X11, 0X11, 0X11, 0X11, + 0X11, 0X11, 0X11, 0X11, 0X11, 0X11, 0X10, 0X00, 0X00, 0X0A, 0X87, 0X65, + 0X43, 0X22, 0X2F, 0XEE, 0XDD, 0XDC, 0XCB, 0XBB, 0XAA, 0XA9, 0X98, 0X88, + 0X77, 0X66, 0X65, 0X55, 0X54, 0X44, 0X33, 0X32, 0X22, 0XFF, 0XEE, 0XEE, + 0XDD, 0XDC, 0XCC, 0XCB, 0XBA, 0X33, 0X22, 0X2F, 0XFF, 0XEE, 0XDD, 0XDC, + 0XCC, 0XBB, 0XAA, 0XA9, 0X98, 0X87, 0X76, 0X55, 0X44, 0X33, 0X2F, 0XED, + 0XCB, 0X97, 0X11, 0X11, 0X11, 0X11, 0X11, 0X11, 0X11, 0X11, 0X11, 0X11, + 0X11, 0X11, 0X10, 0X00, 0X00, 0X3F, 0XED, 0X55, 0X43, 0X22, 0XFE, 0XEE, + 0XDD, 0XCC, 0XBB, 0XBA, 0XAA, 0X99, 0X88, 0X87, 0X77, 0X66, 0X65, 0X55, + 0X44, 0X43, 0X33, 0X32, 0X22, 0XFF, 0XEE, 0XED, 0XDD, 0XDC, 0XCC, 0XBB, + 0XBA, 0XAA, 0X99, 0X98, 0XFF, 0XEE, 0XDD, 0XDC, 0XCC, 0XBB, 0XAA, 0XA9, + 0X98, 0X87, 0X76, 0X65, 0X54, 0X33, 0X2F, 0XED, 0XCB, 0X97, 0X11, 0X11, + 0X11, 0X11, 0X11, 0X11, 0X11, 0X11, 0X11, 0X11, 0X11, 0X11, 0X11, 0X00, + 0X00, 0X3F, 0XED, 0XCB, 0XA2, 0X22, 0XFE, 0XED, 0XDD, 0XCC, 0XBB, 0XBA, + 0XAA, 0X99, 0X88, 0X87, 0X76, 0X66, 0X65, 0X55, 0X44, 0X43, 0X33, 0X22, + 0X2F, 0XFF, 0XEE, 0XED, 0XDD, 0XCC, 0XCC, 0XBB, 0XAA, 0XAA, 0X99, 0X98, + 0X88, 0XEE, 0XDD, 0XDC, 0XCC, 0XBB, 0XAA, 0XA9, 0X98, 0X87, 0X76, 0X65, + 0X54, 0X33, 0X2F, 0XED, 0XDC, 0XA8, 0X51, 0X11, 0X11, 0X11, 0X11, 0X11, + 0X11, 0X11, 0X11, 0X11, 0X11, 0X11, 0X11, 0X00, 0X00, 0X3F, 0XED, 0XCB, + 0XA9, 0X98, 0XEE, 0XED, 0XDC, 0XCB, 0XBB, 0XAA, 0XA9, 0X98, 0X88, 0X77, + 0X76, 0X66, 0X55, 0X54, 0X44, 0X33, 0X33, 0X22, 0X2F, 0XFE, 0XEE, 0XED, + 0XDD, 0XCC, 0XCC, 0XBB, 0XAA, 0XA9, 0X99, 0X88, 0X88, 0X77, 0X6D, 0XDC, + 0XCC, 0XBB, 0XAA, 0XA9, 0X98, 0X87, 0X76, 0X65, 0X54, 0X33, 0X2F, 0XFE, + 0XDC, 0XB9, 0X71, 0X11, 0X11, 0X11, 0X11, 0X11, 0X11, 0X11, 0X11, 0X11, + 0X11, 0X11, 0X11, 0X10, 0X00, 0X3F, 0XED, 0XCB, 0XA9, 0X98, 0X77, 0XDD, + 0XDC, 0XCB, 0XBB, 0XAA, 0XA9, 0X98, 0X88, 0X77, 0X66, 0X66, 0X55, 0X54, + 0X44, 0X33, 0X32, 0X22, 0XFF, 0XFE, 0XEE, 0XDD, 0XDD, 0XCC, 0XCB, 0XBB, + 0XAA, 0XA9, 0X99, 0X88, 0X87, 0X77, 0X66, 0X65, 0XCC, 0XBB, 0XAA, 0XA9, + 0X98, 0X87, 0X77, 0X65, 0X54, 0X43, 0X3F, 0XFE, 0XDC, 0XBA, 0X81, 0X11, + 0X11, 0X11, 0X11, 0X11, 0X11, 0X11, 0X11, 0X11, 0X11, 0X11, 0X11, 0X10, + 0X00, 0X3F, 0XDC, 0XBB, 0XA9, 0X98, 0X77, 0X66, 0X55, 0X4B, 0XBA, 0XAA, + 0X99, 0X88, 0X87, 0X77, 0X66, 0X65, 0X55, 0X44, 0X43, 0X33, 0X32, 0X22, + 0XFF, 0XEE, 0XEE, 0XDD, 0XDC, 0XCC, 0XCB, 0XBB, 0XAA, 0XA9, 0X99, 0X88, + 0X87, 0X76, 0X66, 0X65, 0X55, 0X44, 0X3A, 0XA9, 0X98, 0X87, 0X77, 0X65, + 0X54, 0X43, 0X32, 0XFE, 0XDD, 0XBA, 0X85, 0X11, 0X11, 0X11, 0X11, 0X11, + 0X11, 0X11, 0X11, 0X11, 0X11, 0X11, 0X11, 0X11, 0X03, 0XFE, 0XDC, 0XBA, + 0XA9, 0X98, 0X77, 0X66, 0X55, 0X44, 0X4A, 0XAA, 0X99, 0X88, 0X87, 0X76, + 0X66, 0X65, 0X55, 0X44, 0X43, 0X33, 0X22, 0X2F, 0XFF, 0XEE, 0XED, 0XDD, + 0XDC, 0XCC, 0XCB, 0XBA, 0XAA, 0XA9, 0X99, 0X88, 0X87, 0X76, 0X66, 0X55, + 0X55, 0X44, 0X33, 0X39, 0X98, 0X87, 0X77, 0X65, 0X54, 0X43, 0X32, 0XFF, + 0XDD, 0XCB, 0X95, 0X11, 0X11, 0X11, 0X11, 0X11, 0X11, 0X11, 0X11, 0X11, + 0X11, 0X11, 0X11, 0X11, 0X03, 0XFE, 0XDC, 0XBA, 0X99, 0X88, 0X77, 0X66, + 0X55, 0X44, 0X43, 0X32, 0X2F, 0X88, 0X77, 0X76, 0X66, 0X55, 0X54, 0X44, + 0X43, 0X33, 0X22, 0X2F, 0XFF, 0XEE, 0XED, 0XDD, 0XCC, 0XCC, 0XBB, 0XBA, + 0XAA, 0X99, 0X98, 0X88, 0X87, 0X76, 0X66, 0X55, 0X54, 0X44, 0X33, 0X32, + 0X2F, 0XFE, 0X77, 0X66, 0X55, 0X43, 0X32, 0XFF, 0XED, 0XCB, 0XA8, 0X11, + 0X11, 0X11, 0X11, 0X11, 0X11, 0X11, 0X11, 0X11, 0X11, 0X11, 0X11, 0X11, + 0X03, 0XFE, 0XDC, 0XBA, 0X99, 0X87, 0X76, 0X65, 0X55, 0X44, 0X43, 0X32, + 0X2F, 0XFF, 0X77, 0X66, 0X66, 0X55, 0X54, 0X44, 0X33, 0X33, 0X22, 0XFF, + 0XFE, 0XEE, 0XED, 0XDD, 0XCC, 0XCC, 0XBB, 0XBA, 0XAA, 0X99, 0X98, 0X88, + 0X77, 0X76, 0X66, 0X55, 0X54, 0X43, 0X33, 0X32, 0X2F, 0XFE, 0XEE, 0X66, + 0X55, 0X44, 0X33, 0XFF, 0XED, 0XDB, 0XA8, 0X51, 0X11, 0X11, 0X11, 0X11, + 0X11, 0X11, 0X11, 0X11, 0X11, 0X11, 0X11, 0X11, 0X03, 0XFE, 0XDC, 0XBA, + 0X99, 0X87, 0X76, 0X65, 0X54, 0X44, 0X33, 0X32, 0X2F, 0XFF, 0XEE, 0XD6, + 0X65, 0X55, 0X44, 0X44, 0X33, 0X32, 0X22, 0XFF, 0XFE, 0XEE, 0XDD, 0XDD, + 0XCC, 0XCB, 0XBB, 0XAA, 0XAA, 0X99, 0X98, 0X88, 0X77, 0X66, 0X66, 0X55, + 0X54, 0X43, 0X33, 0X22, 0X2F, 0XFE, 0XEE, 0XDD, 0XCC, 0X44, 0X33, 0X2F, + 0XED, 0XDC, 0XB9, 0X51, 0X11, 0X11, 0X11, 0X11, 0X11, 0X11, 0X11, 0X11, + 0X11, 0X11, 0X11, 0X11, 0X03, 0XFE, 0XDC, 0XBA, 0X99, 0X87, 0X76, 0X65, + 0X54, 0X44, 0X33, 0X22, 0X2F, 0XFF, 0XEE, 0XDD, 0XDC, 0XCC, 0XB4, 0X43, + 0X33, 0X32, 0X2F, 0XFF, 0XFE, 0XEE, 0XDD, 0XDC, 0XCC, 0XCB, 0XBB, 0XAA, + 0XA9, 0X99, 0X88, 0X88, 0X77, 0X66, 0X65, 0X55, 0X54, 0X43, 0X33, 0X22, + 0XFF, 0XFE, 0XEE, 0XDD, 0XCC, 0XBB, 0XAA, 0X2F, 0XFD, 0XDC, 0XBA, 0X85, + 0X11, 0X11, 0X11, 0X11, 0X11, 0X11, 0X11, 0X11, 0X11, 0X11, 0X11, 0X11, + 0X03, 0XFD, 0XCB, 0XBA, 0X99, 0X87, 0X76, 0X65, 0X54, 0X44, 0X33, 0X22, + 0XFF, 0XFE, 0XEE, 0XDD, 0XDC, 0XCC, 0XBB, 0XBA, 0X33, 0X22, 0X2F, 0XFF, + 0XEE, 0XEE, 0XDD, 0XDC, 0XCC, 0XCB, 0XBB, 0XAA, 0XA9, 0X99, 0X88, 0X87, + 0X77, 0X66, 0X65, 0X55, 0X44, 0X43, 0X33, 0X22, 0XFF, 0XEE, 0XED, 0XDD, + 0XCC, 0XBB, 0XAA, 0X98, 0X8E, 0XDD, 0XBA, 0X85, 0X11, 0X11, 0X11, 0X11, + 0X11, 0X11, 0X11, 0X11, 0X11, 0X11, 0X11, 0X11, 0X03, 0XFD, 0XCB, 0XAA, + 0X99, 0X87, 0X76, 0X65, 0X54, 0X44, 0X33, 0X22, 0XFF, 0XFE, 0XED, 0XDD, + 0XDC, 0XCB, 0XBB, 0XBA, 0XAA, 0X22, 0XFF, 0XFF, 0XEE, 0XED, 0XDD, 0XDC, + 0XCC, 0XBB, 0XBA, 0XAA, 0XA9, 0X99, 0X88, 0X87, 0X76, 0X66, 0X65, 0X55, + 0X44, 0X33, 0X33, 0X22, 0XFF, 0XEE, 0XED, 0XDC, 0XCC, 0XBB, 0XAA, 0X98, + 0X87, 0X66, 0XCB, 0XA8, 0X11, 0X11, 0X11, 0X11, 0X11, 0X11, 0X11, 0X11, + 0X11, 0X11, 0X11, 0X11, 0X03, 0XFD, 0XCB, 0XAA, 0X98, 0X87, 0X76, 0X65, + 0X54, 0X43, 0X33, 0X22, 0XFF, 0XFE, 0XED, 0XDD, 0XCC, 0XCB, 0XBB, 0XAA, + 0XAA, 0X99, 0X8F, 0XFE, 0XEE, 0XED, 0XDD, 0XCC, 0XCC, 0XBB, 0XBA, 0XAA, + 0X99, 0X99, 0X88, 0X87, 0X76, 0X66, 0X55, 0X55, 0X44, 0X33, 0X32, 0X22, + 0XFF, 0XEE, 0XED, 0XDC, 0XCB, 0XBA, 0XAA, 0X98, 0X87, 0X66, 0X54, 0X3F, + 0X51, 0X11, 0X11, 0X11, 0X11, 0X11, 0X11, 0X11, 0X11, 0X11, 0X11, 0X11, + 0X03, 0XFD, 0XCB, 0XAA, 0X98, 0X87, 0X66, 0X55, 0X54, 0X43, 0X32, 0X22, + 0XFF, 0XFE, 0XED, 0XDD, 0XCC, 0XCB, 0XBB, 0XAA, 0XA9, 0X99, 0X88, 0X87, + 0XEE, 0XDD, 0XDD, 0XCC, 0XCC, 0XBB, 0XBA, 0XAA, 0X99, 0X98, 0X88, 0X87, + 0X76, 0X66, 0X55, 0X54, 0X44, 0X33, 0X32, 0X2F, 0XFF, 0XEE, 0XED, 0XDC, + 0XCB, 0XBA, 0XA9, 0X98, 0X87, 0X66, 0X54, 0X3F, 0XC1, 0X11, 0X11, 0X11, + 0X11, 0X11, 0X11, 0X11, 0X11, 0X11, 0X11, 0X11, 0X32, 0XFD, 0XCB, 0XAA, + 0X98, 0X87, 0X66, 0X55, 0X44, 0X43, 0X32, 0X22, 0XFF, 0XEE, 0XED, 0XDD, + 0XCC, 0XCB, 0XBB, 0XAA, 0XA9, 0X98, 0X88, 0X87, 0X77, 0X6D, 0XDC, 0XCC, + 0XCB, 0XBB, 0XBA, 0XAA, 0X99, 0X98, 0X88, 0X77, 0X76, 0X66, 0X55, 0X54, + 0X44, 0X33, 0X32, 0X2F, 0XFF, 0XEE, 0XDD, 0XDC, 0XCB, 0XBA, 0XA9, 0X98, + 0X77, 0X66, 0X54, 0X3F, 0XC1, 0X11, 0X11, 0X11, 0X11, 0X11, 0X11, 0X11, + 0X11, 0X11, 0X11, 0X11, 0X3F, 0XED, 0XCB, 0XAA, 0X98, 0X87, 0X66, 0X55, + 0X44, 0X43, 0X32, 0X22, 0XFF, 0XEE, 0XDD, 0XDD, 0XCC, 0XBB, 0XBB, 0XAA, + 0XA9, 0X98, 0X88, 0X77, 0X77, 0X66, 0X65, 0X55, 0X54, 0XBB, 0XAA, 0XAA, + 0X99, 0X98, 0X88, 0X77, 0X66, 0X66, 0X55, 0X54, 0X44, 0X33, 0X32, 0X2F, + 0XFF, 0XEE, 0XDD, 0XCC, 0XCB, 0XBA, 0XA9, 0X88, 0X77, 0X65, 0X44, 0X3F, + 0XC1, 0X11, 0X11, 0X11, 0X11, 0X11, 0X11, 0X11, 0X11, 0X11, 0X11, 0X10, + 0X3F, 0XDC, 0XBB, 0XA9, 0X98, 0X87, 0X66, 0X55, 0X44, 0X43, 0X32, 0X2F, + 0XFF, 0XEE, 0XDD, 0XDC, 0XCC, 0XBB, 0XBA, 0XAA, 0XA9, 0X98, 0X88, 0X77, + 0X76, 0X66, 0X65, 0X55, 0X54, 0X44, 0X3A, 0XA9, 0X99, 0X98, 0X88, 0X77, + 0X66, 0X65, 0X55, 0X54, 0X43, 0X33, 0X32, 0X2F, 0XFE, 0XEE, 0XDD, 0XCC, + 0XCB, 0XBA, 0XA9, 0X88, 0X76, 0X65, 0X43, 0X2F, 0X11, 0X11, 0X11, 0X11, + 0X11, 0X11, 0X11, 0X11, 0X11, 0X11, 0X11, 0X10, 0X3F, 0XDC, 0XBA, 0XA9, + 0X98, 0X77, 0X66, 0X55, 0X44, 0X33, 0X32, 0X2F, 0XFF, 0XEE, 0XDD, 0XDC, + 0XCC, 0XBB, 0XBA, 0XAA, 0X99, 0X98, 0X88, 0X77, 0X76, 0X66, 0X55, 0X55, + 0X44, 0X44, 0X33, 0X32, 0X99, 0X88, 0X88, 0X77, 0X66, 0X65, 0X55, 0X44, + 0X43, 0X33, 0X22, 0X2F, 0XFE, 0XEE, 0XDD, 0XCC, 0XCB, 0XBA, 0XA9, 0X88, + 0X76, 0X65, 0X43, 0XFE, 0X11, 0X11, 0X11, 0X11, 0X11, 0X11, 0X11, 0X11, + 0X11, 0X11, 0X11, 0X10, 0XAF, 0XDC, 0XBA, 0XA9, 0X88, 0X77, 0X66, 0X55, + 0X44, 0X33, 0X22, 0X2F, 0XFF, 0XEE, 0XDD, 0XDC, 0XCB, 0XBB, 0XBA, 0XAA, + 0X99, 0X88, 0X88, 0X77, 0X76, 0X66, 0X55, 0X55, 0X44, 0X43, 0X33, 0X32, + 0X22, 0XF8, 0X87, 0X77, 0X66, 0X65, 0X55, 0X44, 0X43, 0X33, 0X22, 0XFF, + 0XFE, 0XEE, 0XDD, 0XCC, 0XBB, 0XAA, 0XA9, 0X88, 0X76, 0X65, 0X43, 0XFC, + 0X11, 0X11, 0X11, 0X11, 0X11, 0X11, 0X11, 0X11, 0X11, 0X11, 0X11, 0X10, + 0XA8, 0X65, 0XBA, 0XA9, 0X88, 0X76, 0X65, 0X55, 0X44, 0X33, 0X22, 0X2F, + 0XFE, 0XEE, 0XDD, 0XDC, 0XCB, 0XBB, 0XAA, 0XAA, 0X99, 0X88, 0X87, 0X77, + 0X76, 0X66, 0X55, 0X54, 0X44, 0X43, 0X33, 0X22, 0X22, 0XFF, 0XF7, 0X76, + 0X66, 0X65, 0X55, 0X44, 0X43, 0X33, 0X22, 0XFF, 0XFE, 0XED, 0XDD, 0XCC, + 0XBB, 0XAA, 0X99, 0X88, 0X76, 0X65, 0X43, 0XFC, 0X11, 0X11, 0X11, 0X11, + 0X11, 0X11, 0X11, 0X11, 0X11, 0X11, 0X11, 0X10, 0X9A, 0X65, 0X43, 0X39, + 0X88, 0X76, 0X65, 0X54, 0X44, 0X33, 0X22, 0X2F, 0XFE, 0XED, 0XDD, 0XDC, + 0XCB, 0XBB, 0XAA, 0XA9, 0X99, 0X88, 0X87, 0X77, 0X66, 0X66, 0X55, 0X54, + 0X44, 0X33, 0X33, 0X22, 0X2F, 0XFF, 0XFE, 0XED, 0X66, 0X55, 0X55, 0X44, + 0X33, 0X33, 0X22, 0XFF, 0XFE, 0XED, 0XDC, 0XCC, 0XBB, 0XAA, 0X99, 0X87, + 0X76, 0X65, 0X43, 0XFC, 0X11, 0X11, 0X11, 0X11, 0X11, 0X11, 0X11, 0X11, + 0X11, 0X11, 0X11, 0X10, 0X0A, 0X86, 0X53, 0X32, 0XFF, 0X76, 0X65, 0X54, + 0X43, 0X33, 0X22, 0X2F, 0XFE, 0XED, 0XDD, 0XCC, 0XCB, 0XBB, 0XAA, 0XA9, + 0X98, 0X88, 0X87, 0X77, 0X66, 0X65, 0X55, 0X54, 0X44, 0X33, 0X32, 0X22, + 0X2F, 0XFF, 0XEE, 0XED, 0XDD, 0XC5, 0X54, 0X44, 0X33, 0X32, 0X22, 0XFF, + 0XFE, 0XED, 0XDC, 0XCC, 0XBB, 0XAA, 0X99, 0X87, 0X76, 0X54, 0X43, 0XFC, + 0X11, 0X11, 0X11, 0X11, 0X11, 0X11, 0X11, 0X11, 0X11, 0X11, 0X11, 0X10, + 0X0A, 0X86, 0X54, 0X33, 0XFF, 0XED, 0XD5, 0X54, 0X43, 0X32, 0X22, 0XFF, + 0XFE, 0XED, 0XDD, 0XCC, 0XBB, 0XBB, 0XAA, 0XA9, 0X98, 0X88, 0X77, 0X77, + 0X66, 0X65, 0X55, 0X44, 0X44, 0X33, 0X32, 0X22, 0XFF, 0XFF, 0XEE, 0XDD, + 0XDD, 0XCC, 0XCB, 0XBB, 0XA3, 0X32, 0X2F, 0XFF, 0XEE, 0XED, 0XDC, 0XCC, + 0XBB, 0XAA, 0X99, 0X87, 0X76, 0X54, 0X32, 0XF1, 0X11, 0X11, 0X11, 0X11, + 0X11, 0X11, 0X11, 0X11, 0X11, 0X11, 0X11, 0X10, 0X00, 0XA6, 0X54, 0X33, + 0X2F, 0XED, 0XDC, 0XCB, 0XB3, 0X32, 0X22, 0XFF, 0XEE, 0XED, 0XDD, 0XCC, + 0XBB, 0XBA, 0XAA, 0XA9, 0X98, 0X88, 0X77, 0X76, 0X66, 0X65, 0X55, 0X44, + 0X43, 0X33, 0X32, 0X22, 0XFF, 0XFE, 0XEE, 0XDD, 0XDC, 0XCC, 0XCB, 0XBB, + 0XAA, 0XA2, 0X2F, 0XFF, 0XEE, 0XDD, 0XDC, 0XCC, 0XBB, 0XAA, 0X99, 0X87, + 0X76, 0X54, 0X32, 0XF1, 0X11, 0X11, 0X11, 0X11, 0X11, 0X11, 0X11, 0X11, + 0X11, 0X11, 0X11, 0X10, 0X00, 0XA8, 0X65, 0X33, 0X2F, 0XFD, 0XDC, 0XCB, + 0XBA, 0XA9, 0X22, 0XFF, 0XEE, 0XDD, 0XDD, 0XCC, 0XBB, 0XBA, 0XAA, 0X99, + 0X98, 0X88, 0X77, 0X76, 0X66, 0X55, 0X54, 0X44, 0X43, 0X33, 0X22, 0X22, + 0XFF, 0XFE, 0XED, 0XDD, 0XDC, 0XCC, 0XBB, 0XBA, 0XAA, 0XA9, 0X98, 0XFF, + 0XEE, 0XDD, 0XCC, 0XCB, 0XBA, 0XAA, 0X99, 0X87, 0X76, 0X54, 0X32, 0XF1, + 0X11, 0X11, 0X11, 0X11, 0X11, 0X11, 0X11, 0X11, 0X11, 0X11, 0X11, 0X10, + 0X00, 0XA8, 0X65, 0X43, 0X2F, 0XFE, 0XDD, 0XCB, 0XBA, 0XA9, 0X99, 0X88, + 0XEE, 0XDD, 0XDC, 0XCC, 0XBB, 0XBA, 0XAA, 0X99, 0X88, 0X88, 0X77, 0X76, + 0X66, 0X55, 0X54, 0X44, 0X33, 0X33, 0X22, 0X2F, 0XFF, 0XEE, 0XED, 0XDD, + 0XCC, 0XCC, 0XBB, 0XBA, 0XAA, 0X99, 0X98, 0X88, 0X77, 0XDD, 0XCC, 0XCB, + 0XBA, 0XA9, 0X98, 0X87, 0X66, 0X54, 0X32, 0XF1, 0X11, 0X11, 0X11, 0X11, + 0X11, 0X11, 0X11, 0X11, 0X11, 0X11, 0X11, 0X10, 0X00, 0X0A, 0X65, 0X43, + 0X3F, 0XFE, 0XDD, 0XCC, 0XBB, 0XA9, 0X99, 0X88, 0X77, 0X6D, 0XDC, 0XCB, + 0XBB, 0XBA, 0XAA, 0X99, 0X88, 0X87, 0X77, 0X66, 0X66, 0X55, 0X54, 0X44, + 0X33, 0X32, 0X22, 0X2F, 0XFF, 0XEE, 0XED, 0XDD, 0XCC, 0XCB, 0XBB, 0XAA, + 0XAA, 0X99, 0X88, 0X87, 0X76, 0X66, 0X5C, 0XCB, 0XBA, 0XA9, 0X98, 0X77, + 0X66, 0X54, 0X32, 0XF1, 0X11, 0X11, 0X11, 0X11, 0X11, 0X11, 0X11, 0X11, + 0X11, 0X11, 0X11, 0X10, 0X00, 0X0A, 0X86, 0X53, 0X32, 0XFE, 0XDD, 0XCC, + 0XBB, 0XA9, 0X99, 0X88, 0X77, 0X66, 0X65, 0X54, 0XBB, 0XAA, 0XAA, 0X99, + 0X88, 0X87, 0X77, 0X66, 0X65, 0X55, 0X44, 0X44, 0X33, 0X32, 0X22, 0XFF, + 0XFE, 0XEE, 0XDD, 0XDD, 0XCC, 0XCB, 0XBB, 0XAA, 0XA9, 0X99, 0X88, 0X87, + 0X76, 0X66, 0X55, 0X54, 0X4A, 0XA9, 0X98, 0X77, 0X65, 0X44, 0X3F, 0XC1, + 0X11, 0X11, 0X11, 0X11, 0X11, 0X11, 0X11, 0X11, 0X11, 0X11, 0X11, 0X00, + 0X00, 0X0A, 0X96, 0X54, 0X32, 0XFF, 0XDD, 0XCC, 0XBB, 0XA9, 0X99, 0X88, + 0X77, 0X66, 0X65, 0X54, 0X44, 0X3A, 0XA9, 0X99, 0X88, 0X87, 0X77, 0X66, + 0X65, 0X55, 0X44, 0X43, 0X33, 0X32, 0X22, 0XFF, 0XFE, 0XEE, 0XDD, 0XDC, + 0XCC, 0XBB, 0XBA, 0XAA, 0XA9, 0X98, 0X88, 0X77, 0X66, 0X65, 0X55, 0X44, + 0X33, 0X39, 0X98, 0X77, 0X65, 0X43, 0X2F, 0X11, 0X11, 0X11, 0X11, 0X11, + 0X11, 0X11, 0X11, 0X11, 0X11, 0X11, 0X11, 0X00, 0X00, 0X0A, 0X96, 0X54, + 0X33, 0XFF, 0XED, 0XDC, 0XBB, 0XAA, 0X99, 0X88, 0X77, 0X66, 0X65, 0X54, + 0X44, 0X33, 0X39, 0X98, 0X88, 0X87, 0X77, 0X66, 0X65, 0X55, 0X44, 0X43, + 0X33, 0X22, 0X22, 0XFF, 0XEE, 0XED, 0XDD, 0XDC, 0XCC, 0XBB, 0XBA, 0XAA, + 0X99, 0X98, 0X88, 0X77, 0X66, 0X65, 0X55, 0X44, 0X33, 0X22, 0X2F, 0XEE, + 0X65, 0X43, 0X2F, 0X11, 0X11, 0X11, 0X11, 0X11, 0X11, 0X11, 0X11, 0X11, + 0X11, 0X11, 0X10, 0X00, 0X00, 0X00, 0XA8, 0X64, 0X33, 0X2F, 0XED, 0XDC, + 0XBB, 0XAA, 0X99, 0X88, 0X77, 0X66, 0X65, 0X54, 0X44, 0X33, 0X32, 0X2F, + 0X88, 0X77, 0X76, 0X66, 0X65, 0X54, 0X44, 0X43, 0X33, 0X22, 0X2F, 0XFF, + 0XEE, 0XED, 0XDD, 0XCC, 0XCB, 0XBB, 0XAA, 0XAA, 0X99, 0X88, 0X87, 0X76, + 0X66, 0X55, 0X54, 0X43, 0X33, 0X22, 0XFE, 0XED, 0XDC, 0X43, 0X2F, 0X11, + 0X11, 0X11, 0X11, 0X11, 0X11, 0X11, 0X11, 0X11, 0X11, 0X11, 0X10, 0X00, + 0X00, 0X00, 0XA9, 0X65, 0X43, 0X2F, 0XED, 0XDC, 0XBB, 0XAA, 0X99, 0X88, + 0X77, 0X66, 0X65, 0X54, 0X44, 0X33, 0X32, 0X2F, 0XFF, 0XEE, 0XED, 0X66, + 0X55, 0X54, 0X44, 0X33, 0X33, 0X22, 0X2F, 0XFE, 0XEE, 0XDD, 0XDD, 0XCC, + 0XCB, 0XBB, 0XAA, 0XA9, 0X99, 0X88, 0X87, 0X76, 0X66, 0X55, 0X54, 0X43, + 0X32, 0X22, 0XFE, 0XED, 0XCB, 0XBA, 0X98, 0X11, 0X11, 0X11, 0X11, 0X11, + 0X11, 0X11, 0X11, 0X11, 0X11, 0X11, 0X00, 0X00, 0X00, 0X00, 0XA9, 0X65, + 0X43, 0X2F, 0XED, 0XDC, 0XCB, 0XBA, 0X99, 0X88, 0X77, 0X66, 0X65, 0X54, + 0X44, 0X33, 0X32, 0X2F, 0XFF, 0XEE, 0XED, 0XDD, 0X55, 0X44, 0X44, 0X33, + 0X32, 0X22, 0X2F, 0XFE, 0XEE, 0XDD, 0XDC, 0XCC, 0XBB, 0XBB, 0XAA, 0XA9, + 0X98, 0X88, 0X77, 0X66, 0X65, 0X55, 0X44, 0X33, 0X32, 0X2F, 0XEE, 0XDD, + 0XCB, 0XA9, 0X81, 0X11, 0X11, 0X11, 0X11, 0X11, 0X11, 0X11, 0X11, 0X11, + 0X11, 0X11, 0X00, 0X00, 0X00, 0X00, 0X0A, 0X86, 0X43, 0X32, 0XFE, 0XDC, + 0XCB, 0XBA, 0X99, 0X98, 0X77, 0X66, 0X65, 0X54, 0X44, 0X33, 0X22, 0X2F, + 0XFF, 0XEE, 0XDD, 0XDD, 0XCC, 0XB4, 0X43, 0X33, 0X32, 0X22, 0XFF, 0XEE, + 0XEE, 0XDD, 0XDC, 0XCC, 0XBB, 0XBA, 0XAA, 0X99, 0X98, 0X88, 0X77, 0X66, + 0X65, 0X55, 0X44, 0X33, 0X22, 0XFF, 0XEE, 0XDC, 0XBB, 0XA9, 0X81, 0X11, + 0X11, 0X11, 0X11, 0X11, 0X11, 0X11, 0X11, 0X11, 0X11, 0X10, 0X00, 0X00, + 0X00, 0X00, 0X0A, 0X96, 0X54, 0X32, 0XFE, 0XDD, 0XCB, 0XBA, 0X99, 0X98, + 0X87, 0X66, 0X65, 0X54, 0X44, 0X33, 0X22, 0XFF, 0XFE, 0XEE, 0XDD, 0XDC, + 0XCC, 0XBB, 0XBA, 0X33, 0X22, 0X22, 0XFF, 0XEE, 0XED, 0XDD, 0XDC, 0XCB, + 0XBB, 0XBA, 0XAA, 0X99, 0X88, 0X87, 0X76, 0X66, 0X55, 0X54, 0X43, 0X32, + 0X22, 0XFE, 0XED, 0XCC, 0XBA, 0X98, 0X11, 0X11, 0X11, 0X11, 0X11, 0X11, + 0X11, 0X11, 0X11, 0X11, 0X11, 0X10, 0X00, 0X00, 0X00, 0X00, 0X0A, 0X96, + 0X54, 0X32, 0XFE, 0XDD, 0XCB, 0XBA, 0X99, 0X98, 0X87, 0X76, 0X65, 0X54, + 0X44, 0X33, 0X22, 0XFF, 0XFE, 0XEE, 0XDD, 0XDC, 0XCB, 0XBB, 0XBA, 0XAA, + 0X92, 0X2F, 0XFE, 0XEE, 0XED, 0XDD, 0XCC, 0XCB, 0XBB, 0XAA, 0XA9, 0X99, + 0X88, 0X87, 0X76, 0X66, 0X55, 0X54, 0X43, 0X32, 0X2F, 0XFE, 0XDD, 0XCB, + 0XA9, 0X98, 0X11, 0X11, 0X11, 0X11, 0X11, 0X11, 0X11, 0X11, 0X11, 0X11, + 0X11, 0X10, 0X00, 0X00, 0X00, 0X00, 0X00, 0XA9, 0X64, 0X32, 0XFE, 0XDD, + 0XCB, 0XBA, 0X99, 0X98, 0X87, 0X76, 0X65, 0X54, 0X43, 0X33, 0X22, 0XFF, + 0XFE, 0XEE, 0XDD, 0XDC, 0XCB, 0XBB, 0XAA, 0XA9, 0X99, 0X98, 0X87, 0XEE, + 0XDD, 0XDD, 0XCC, 0XBB, 0XBB, 0XAA, 0XA9, 0X98, 0X88, 0X77, 0X66, 0X65, + 0X55, 0X44, 0X33, 0X22, 0X2F, 0XEE, 0XDC, 0XBB, 0XA9, 0X81, 0X11, 0X11, + 0X11, 0X11, 0X11, 0X11, 0X11, 0X11, 0X11, 0X11, 0X11, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X32, 0XD5, 0X43, 0X2F, 0XED, 0XCB, 0XBA, 0XA9, 0X98, + 0X87, 0X76, 0X65, 0X54, 0X43, 0X33, 0X22, 0XFF, 0XFE, 0XED, 0XDD, 0XCC, + 0XCB, 0XBB, 0XAA, 0XA9, 0X99, 0X88, 0X87, 0X77, 0X6D, 0XDC, 0XCC, 0XBB, + 0XBA, 0XAA, 0X99, 0X98, 0X88, 0X77, 0X66, 0X65, 0X55, 0X44, 0X33, 0X22, + 0XFF, 0XED, 0XDC, 0XBA, 0X98, 0X11, 0X11, 0X11, 0X11, 0X11, 0X11, 0X11, + 0X11, 0X11, 0X11, 0X11, 0X11, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X03, + 0X2D, 0XBA, 0X9F, 0XED, 0XDC, 0XBB, 0XA9, 0X98, 0X87, 0X76, 0X65, 0X54, + 0X43, 0X33, 0X22, 0XFF, 0XFE, 0XED, 0XDD, 0XCC, 0XBB, 0XBA, 0XAA, 0X99, + 0X99, 0X88, 0X77, 0X76, 0X66, 0X6C, 0XCB, 0XBB, 0XBA, 0XAA, 0X99, 0X88, + 0X87, 0X76, 0X66, 0X55, 0X54, 0X43, 0X32, 0X2F, 0XFE, 0XED, 0XCB, 0XBA, + 0X98, 0X11, 0X11, 0X11, 0X11, 0X11, 0X11, 0X11, 0X11, 0X11, 0X11, 0X11, + 0X10, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X32, 0XDB, 0XA9, 0X7D, + 0XDC, 0XBB, 0XA9, 0X98, 0X87, 0X76, 0X65, 0X54, 0X43, 0X33, 0X22, 0XFF, + 0XEE, 0XED, 0XDD, 0XCC, 0XBB, 0XBA, 0XAA, 0X99, 0X98, 0X88, 0X77, 0X76, + 0X66, 0X55, 0X54, 0XBB, 0XAA, 0XA9, 0X99, 0X88, 0X87, 0X76, 0X66, 0X55, + 0X54, 0X43, 0X32, 0X2F, 0XFE, 0XDC, 0XCB, 0XA9, 0X81, 0X11, 0X11, 0X11, + 0X11, 0X11, 0X11, 0X11, 0X11, 0X11, 0X11, 0X11, 0X10, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X03, 0X2D, 0XBA, 0X87, 0X65, 0X44, 0XA9, 0X98, + 0X87, 0X76, 0X65, 0X54, 0X43, 0X33, 0X22, 0XFF, 0XEE, 0XED, 0XDC, 0XCC, + 0XBB, 0XBA, 0XA9, 0X99, 0X98, 0X87, 0X77, 0X66, 0X66, 0X55, 0X44, 0X44, + 0X33, 0X39, 0X98, 0X88, 0X77, 0X66, 0X65, 0X55, 0X44, 0X33, 0X22, 0XFF, + 0XEE, 0XDC, 0XBA, 0X99, 0X81, 0X11, 0X11, 0X11, 0X11, 0X11, 0X11, 0X11, + 0X11, 0X11, 0X11, 0X11, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X3F, 0XCB, 0X98, 0X76, 0X54, 0X42, 0X28, 0X87, 0X76, 0X65, 0X54, + 0X43, 0X32, 0X22, 0XFF, 0XEE, 0XDD, 0XDC, 0XCB, 0XBB, 0XAA, 0XA9, 0X99, + 0X88, 0X87, 0X77, 0X66, 0X65, 0X55, 0X44, 0X43, 0X33, 0X22, 0X28, 0X88, + 0X77, 0X66, 0X65, 0X55, 0X44, 0X32, 0X2F, 0XFF, 0XED, 0XCC, 0XBA, 0X98, + 0X11, 0X11, 0X11, 0X11, 0X11, 0X11, 0X11, 0X11, 0X11, 0X11, 0X11, 0X11, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X03, 0XFC, 0XA9, + 0X76, 0X54, 0X43, 0X22, 0XF7, 0X76, 0X65, 0X54, 0X43, 0X32, 0X2F, 0XFF, + 0XEE, 0XDD, 0XDC, 0XCB, 0XBB, 0XAA, 0X99, 0X99, 0X88, 0X77, 0X76, 0X66, + 0X55, 0X54, 0X44, 0X33, 0X32, 0X22, 0XFF, 0XFE, 0XED, 0X66, 0X55, 0X54, + 0X43, 0X32, 0X2F, 0XFE, 0XDC, 0XCB, 0XA9, 0X98, 0X11, 0X11, 0X11, 0X11, + 0X11, 0X11, 0X11, 0X11, 0X11, 0X11, 0X11, 0X10, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X3F, 0XCA, 0X97, 0X65, 0X44, 0X22, + 0XFE, 0XED, 0XD5, 0X54, 0X43, 0X32, 0X2F, 0XFF, 0XEE, 0XDD, 0XCC, 0XCB, + 0XBA, 0XAA, 0X99, 0X98, 0X88, 0X77, 0X76, 0X66, 0X55, 0X44, 0X44, 0X33, + 0X22, 0X2F, 0XFF, 0XEE, 0XDD, 0XDD, 0X55, 0X54, 0X43, 0X22, 0XFF, 0XFE, + 0XDC, 0XBA, 0X99, 0X81, 0X11, 0X11, 0X11, 0X11, 0X11, 0X11, 0X11, 0X11, + 0X11, 0X11, 0X11, 0X10, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X03, 0XFC, 0XA8, 0X76, 0X54, 0X32, 0X2F, 0XED, 0XDC, 0XCB, + 0XB3, 0X32, 0X2F, 0XFE, 0XEE, 0XDD, 0XCC, 0XBB, 0XBA, 0XA9, 0X99, 0X98, + 0X87, 0X77, 0X66, 0X65, 0X55, 0X44, 0X43, 0X33, 0X22, 0XFF, 0XFE, 0XED, + 0XDD, 0XDC, 0XCC, 0XBB, 0X33, 0X22, 0XFF, 0XED, 0XCC, 0XBA, 0X98, 0X11, + 0X11, 0X11, 0X11, 0X11, 0X11, 0X11, 0X11, 0X11, 0X11, 0X11, 0X11, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X03, 0X2D, + 0XCA, 0X87, 0X54, 0X42, 0X2F, 0XEE, 0XDD, 0XCB, 0XBA, 0XA2, 0X2F, 0XFE, + 0XED, 0XDD, 0XCC, 0XBB, 0XBA, 0XA9, 0X99, 0X88, 0X87, 0X76, 0X66, 0X55, + 0X54, 0X44, 0X33, 0X32, 0X22, 0XFF, 0XEE, 0XDD, 0XDD, 0XCC, 0XCB, 0XBA, + 0XA9, 0X9F, 0XFF, 0XED, 0XCB, 0XA9, 0X98, 0X11, 0X11, 0X11, 0X11, 0X11, + 0X11, 0X11, 0X11, 0X11, 0X11, 0X11, 0X10, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X32, 0XDB, 0X98, 0X75, 0X43, + 0X22, 0XFE, 0XDD, 0XCC, 0XBA, 0XA9, 0X98, 0X8E, 0XED, 0XDC, 0XCC, 0XBB, + 0XAA, 0X99, 0X99, 0X88, 0X77, 0X76, 0X66, 0X55, 0X44, 0X43, 0X33, 0X22, + 0X2F, 0XFE, 0XED, 0XDD, 0XDC, 0XCC, 0XBB, 0XAA, 0X99, 0X88, 0X87, 0X6C, + 0XCB, 0XA9, 0X81, 0X11, 0X11, 0X11, 0X11, 0X11, 0X11, 0X11, 0X11, 0X11, + 0X11, 0X10, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X03, 0X2D, 0XB9, 0X76, 0X54, 0X32, 0XFE, 0XED, 0XCC, + 0XBB, 0XA9, 0X98, 0X87, 0X76, 0X6C, 0XCB, 0XBB, 0XAA, 0X99, 0X98, 0X88, + 0X77, 0X66, 0X65, 0X54, 0X44, 0X43, 0X32, 0X22, 0XFF, 0XEE, 0XDD, 0XDD, + 0XCC, 0XCB, 0XBA, 0XA9, 0X98, 0X88, 0X76, 0X55, 0X43, 0X99, 0X81, 0X11, + 0X11, 0X11, 0X11, 0X11, 0X11, 0X11, 0X11, 0X11, 0X11, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X32, 0XDB, 0X87, 0X64, 0X42, 0X2F, 0XED, 0XDC, 0XBB, 0XA9, 0X98, 0X87, + 0X76, 0X65, 0X5B, 0XBA, 0XA9, 0X99, 0X98, 0X87, 0X77, 0X66, 0X65, 0X54, + 0X44, 0X33, 0X22, 0X2F, 0XFE, 0XED, 0XDD, 0XDC, 0XCB, 0XBA, 0XAA, 0X98, + 0X88, 0X87, 0X65, 0X54, 0X32, 0X2F, 0X11, 0X11, 0X11, 0X11, 0X11, 0X11, + 0X11, 0X11, 0X11, 0X11, 0X10, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X03, 0XFC, 0XA8, 0X75, + 0X43, 0X2F, 0XEE, 0XDC, 0XBB, 0XA9, 0X98, 0X87, 0X76, 0X65, 0X54, 0X43, + 0X32, 0X99, 0X88, 0X87, 0X76, 0X66, 0X55, 0X44, 0X43, 0X32, 0X22, 0XFF, + 0XFE, 0XED, 0XDD, 0XCC, 0XBB, 0XAA, 0X99, 0X88, 0X87, 0X65, 0X54, 0X43, + 0X22, 0XF1, 0X11, 0X11, 0X11, 0X11, 0X11, 0X11, 0X11, 0X11, 0X11, 0X11, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X3F, 0XCA, 0X87, 0X44, 0X32, 0XFE, 0XDC, + 0XCB, 0XA9, 0X98, 0X87, 0X66, 0X55, 0X44, 0X43, 0X22, 0X22, 0X88, 0X77, + 0X76, 0X65, 0X54, 0X44, 0X33, 0X32, 0X2F, 0XFF, 0XEE, 0XDD, 0XDC, 0XCB, + 0XBA, 0XA9, 0X98, 0X88, 0X76, 0X55, 0X43, 0X22, 0XF1, 0X11, 0X11, 0X11, + 0X11, 0X11, 0X11, 0X11, 0X11, 0X11, 0X11, 0X10, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X03, 0XFC, 0X97, 0X64, 0X32, 0XFE, 0XDD, 0XCB, 0XAA, 0X98, 0X87, + 0X66, 0X55, 0X44, 0X33, 0X22, 0X2F, 0XFF, 0XEE, 0X66, 0X65, 0X54, 0X44, + 0X33, 0X22, 0X2F, 0XFE, 0XED, 0XDD, 0XCC, 0XBB, 0XAA, 0X99, 0X88, 0X87, + 0X65, 0X44, 0X32, 0X2F, 0X11, 0X11, 0X11, 0X11, 0X11, 0X11, 0X11, 0X11, + 0X11, 0X11, 0X10, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0XAA, 0X78, + 0X75, 0X43, 0X2F, 0XED, 0XCB, 0XAA, 0X98, 0X77, 0X66, 0X55, 0X44, 0X32, + 0X22, 0XFF, 0XFE, 0XED, 0XDD, 0XCC, 0X44, 0X43, 0X32, 0X22, 0XFF, 0XEE, + 0XDD, 0XDC, 0XCB, 0XBA, 0XA9, 0X88, 0X88, 0X76, 0X54, 0X43, 0X2F, 0X11, + 0X11, 0X11, 0X11, 0X11, 0X11, 0X11, 0X11, 0X11, 0X11, 0X11, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0XAA, 0X7E, 0X43, 0X2F, 0XED, + 0XCB, 0XBA, 0X98, 0X77, 0X66, 0X54, 0X43, 0X32, 0X22, 0XFF, 0XEE, 0XDD, + 0XDC, 0XCB, 0XBB, 0XAA, 0X22, 0X2F, 0XFE, 0XED, 0XDD, 0XCC, 0XBB, 0XAA, + 0X98, 0X88, 0X76, 0X55, 0X43, 0X22, 0XF1, 0X11, 0X11, 0X11, 0X11, 0X11, + 0X11, 0X11, 0X11, 0X11, 0X11, 0X10, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0XAA, 0X7E, 0XA9, 0XFE, 0XDC, 0XBA, 0X98, 0X77, + 0X66, 0X54, 0X43, 0X22, 0X2F, 0XFE, 0XED, 0XDD, 0XCC, 0XBB, 0XBA, 0XA9, + 0X99, 0XFF, 0XEE, 0XDD, 0XDC, 0XBB, 0XAA, 0XA9, 0X88, 0X87, 0X65, 0X44, + 0X32, 0XF1, 0X11, 0X11, 0X11, 0X11, 0X11, 0X11, 0X11, 0X11, 0X11, 0X11, + 0X11, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0XAA, 0X7E, 0XA9, 0X6C, 0XBA, 0X98, 0X76, 0X66, 0X54, 0X33, 0X22, + 0XFF, 0XEE, 0XDD, 0XDC, 0XBB, 0XBA, 0XA9, 0X99, 0X98, 0X87, 0X7D, 0XDD, + 0XCB, 0XBA, 0XA9, 0X98, 0X88, 0X76, 0X54, 0X43, 0XF1, 0X11, 0X11, 0X11, + 0X11, 0X11, 0X11, 0X11, 0X11, 0X11, 0X11, 0X11, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0XAA, 0X7E, + 0XA7, 0X53, 0X98, 0X76, 0X65, 0X54, 0X32, 0X2F, 0XFE, 0XED, 0XDD, 0XCB, + 0XBB, 0XAA, 0X99, 0X98, 0X88, 0X77, 0X66, 0X65, 0X44, 0XAA, 0X98, 0X88, + 0X87, 0X64, 0X43, 0X2F, 0X11, 0X11, 0X11, 0X11, 0X11, 0X11, 0X11, 0X11, + 0X11, 0X11, 0X11, 0X10, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0XAA, 0X7B, 0X96, 0X3F, 0XE6, + 0X65, 0X43, 0X32, 0X2F, 0XEE, 0XDD, 0XCC, 0XBB, 0XBA, 0X99, 0X98, 0X88, + 0X77, 0X66, 0X65, 0X44, 0X33, 0X32, 0X88, 0X87, 0X65, 0X44, 0X3F, 0X11, + 0X11, 0X11, 0X11, 0X11, 0X11, 0X11, 0X11, 0X11, 0X11, 0X11, 0X10, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0XAA, 0X7B, 0X93, 0XFE, 0XDC, 0XB3, 0X22, 0XFE, + 0XED, 0XDC, 0XCB, 0XBA, 0XA9, 0X98, 0X88, 0X77, 0X66, 0X65, 0X44, 0X33, + 0X32, 0XFF, 0XFF, 0XED, 0X44, 0X43, 0XF1, 0X11, 0X11, 0X11, 0X11, 0X11, + 0X11, 0X11, 0X11, 0X11, 0X11, 0X10, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0XAA, 0X7B, 0X5F, 0XDC, 0XAA, 0X98, 0XEE, 0XDD, 0XCB, 0XBB, 0XA9, + 0X98, 0X88, 0X77, 0X66, 0X54, 0X43, 0X33, 0X2F, 0XFF, 0XFF, 0XED, 0XBB, + 0XBA, 0X81, 0X11, 0X11, 0X11, 0X11, 0X11, 0X11, 0X11, 0X11, 0X11, 0X11, + 0X10, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0XAA, 0X7B, + 0XEB, 0XA9, 0X77, 0X76, 0X65, 0XBB, 0XBA, 0X98, 0X88, 0X77, 0X65, 0X44, + 0X43, 0X32, 0XFF, 0XFF, 0XED, 0XDB, 0XBB, 0XBA, 0X11, 0X11, 0X11, 0X11, + 0X11, 0X11, 0X11, 0X11, 0X11, 0X11, 0X11, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0XAA, 0XB9, 0X77, 0X64, 0X44, + 0X44, 0X43, 0X28, 0X88, 0X77, 0X65, 0X44, 0X43, 0X32, 0XFF, 0XED, 0XDC, + 0XBB, 0XBA, 0X11, 0X11, 0X11, 0X11, 0X11, 0X11, 0X11, 0X11, 0X11, 0X11, + 0X11, 0X11, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0XAB, 0XBF, 0XFF, 0XFF, 0XFF, 0XEC, + 0X54, 0X44, 0X33, 0X2F, 0XED, 0XDD, 0XBB, 0XBA, 0X11, 0X11, 0X11, 0X11, + 0X11, 0X11, 0X11, 0X11, 0X11, 0X11, 0X11, 0X11, 0X10, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X66, 0XAB, 0XBB, 0XBA, 0X97, 0XED, 0XDD, + 0XDB, 0XBA, 0X11, 0X11, 0X11, 0X11, 0X11, 0X11, 0X11, 0X11, 0X11, 0X11, + 0X11, 0X11, 0X11, 0X10, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X66, 0X66, 0X53, 0XBA, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X01, 0X11, 0X11, 0X11, 0X11, 0X11, 0X10, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, + 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, +} diff --git a/src/examples/pyportal_boing/ili9341/README.md b/src/examples/pyportal_boing/ili9341/README.md new file mode 100644 index 0000000000..94c2d00948 --- /dev/null +++ b/src/examples/pyportal_boing/ili9341/README.md @@ -0,0 +1,19 @@ +TinyGo driver for TFT displays using ILI9341 driver chips. + +These displays support 8-bit parallel, 16-bit parallel, or SPI interfaces. + +Examples of such displays include: + + * [Adafruit PyPortal + ](https://www.adafruit.com/product/4116) + * [Adafruit 2.8" Touch Shield V2 (SPI)](http://www.adafruit.com/products/1651) + * [Adafruit 2.4" TFT LCD with Touchscreen Breakout w/MicroSD Socket](https://www.adafruit.com/product/2478) + * [2.8" TFT LCD with Touchscreen Breakout Board w/MicroSD Socket](https://www.adafruit.com/product/1770) + * [2.2" 18-bit color TFT LCD display with microSD card breakout](https://www.adafruit.com/product/1770) + * [TFT FeatherWing - 2.4" 320x240 Touchscreen For All Feathers](https://www.adafruit.com/product/3315) + +Currently this driver only supports an 8-bit parallel interface using ATSAMD51 +(this is the default configuration on PyPortal). It should be relatively +straightforward to implement a more generic SPI-based interface as well. +Please see `parallel_atsamd51.go` for an example of what needs to be +implemented if you are interested in contributing. diff --git a/src/examples/pyportal_boing/ili9341/ili9341.go b/src/examples/pyportal_boing/ili9341/ili9341.go new file mode 100644 index 0000000000..6bc22492e9 --- /dev/null +++ b/src/examples/pyportal_boing/ili9341/ili9341.go @@ -0,0 +1,310 @@ +package ili9341 + +import ( + "errors" + "image/color" + "machine" + "time" +) + +type Config struct { + Width int16 + Height int16 + Rotation Rotation +} + +type Device struct { + width int16 + height int16 + rotation Rotation + driver driver + + dc machine.Pin + cs machine.Pin + rst machine.Pin + rd machine.Pin +} + +func (d *Device) Configure(config Config) { + + if config.Width == 0 { + config.Width = TFTWIDTH + } + if config.Height == 0 { + config.Height = TFTHEIGHT + } + d.width = config.Width + d.height = config.Height + d.rotation = config.Rotation + + output := machine.PinConfig{machine.PinOutput} + + // configure chip select if there is one + if d.cs != machine.NoPin { + d.cs.Configure(output) + d.cs.High() // deselect + } + + d.dc.Configure(output) + d.dc.High() // data mode + + // driver-specific configuration + d.driver.configure(&config) + + if d.rd != machine.NoPin { + d.rd.Configure(output) + d.rd.High() + } + + // reset the display + if d.rst != machine.NoPin { + // configure hardware reset if there is one + d.rst.Configure(output) + d.rst.High() + delay(100) + d.rst.Low() + delay(100) + d.rst.High() + delay(200) + } else { + // if no hardware reset, send software reset + d.sendCommand(SWRESET, nil) + delay(150) + } + + initCmd := []byte{ + 0xEF, 3, 0x03, 0x80, 0x02, + 0xCF, 3, 0x00, 0xC1, 0x30, + 0xED, 4, 0x64, 0x03, 0x12, 0x81, + 0xE8, 3, 0x85, 0x00, 0x78, + 0xCB, 5, 0x39, 0x2C, 0x00, 0x34, 0x02, + 0xF7, 1, 0x20, + 0xEA, 2, 0x00, 0x00, + PWCTR1, 1, 0x23, // Power control VRH[5:0] + PWCTR2, 1, 0x10, // Power control SAP[2:0];BT[3:0] + VMCTR1, 2, 0x3e, 0x28, // VCM control + VMCTR2, 1, 0x86, // VCM control2 + MADCTL, 1, 0x48, // Memory Access Control + VSCRSADD, 1, 0x00, // Vertical scroll zero + PIXFMT, 1, 0x55, + FRMCTR1, 2, 0x00, 0x18, + DFUNCTR, 3, 0x08, 0x82, 0x27, // Display Function Control + 0xF2, 1, 0x00, // 3Gamma Function Disable + GAMMASET, 1, 0x01, // Gamma curve selected + GMCTRP1, 15, 0x0F, 0x31, 0x2B, 0x0C, 0x0E, 0x08, // Set Gamma + 0x4E, 0xF1, 0x37, 0x07, 0x10, 0x03, 0x0E, 0x09, 0x00, + GMCTRN1, 15, 0x00, 0x0E, 0x14, 0x03, 0x11, 0x07, // Set Gamma + 0x31, 0xC1, 0x48, 0x08, 0x0F, 0x0C, 0x31, 0x36, 0x0F, + SLPOUT, 0x80, // Exit Sleep + DISPON, 0x80, // Display on + 0x00, // End of list + } + for i, c := 0, len(initCmd); i < c; { + cmd := initCmd[i] + if cmd == 0x00 { + break + } + x := initCmd[i+1] + numArgs := int(x & 0x7F) + d.sendCommand(cmd, initCmd[i+2:i+2+numArgs]) + if x&0x80 > 0 { + delay(150) + } + i += numArgs + 2 + } + + d.SetRotation(d.rotation) +} + +// Size returns the current size of the display. +func (d *Device) Size() (x, y int16) { + if d.rotation == 1 || d.rotation == 3 { + return d.height, d.width + } + return d.width, d.height +} + +// SetPixel modifies the internal buffer. +func (d *Device) SetPixel(x, y int16, c color.RGBA) { + d.setWindow(x, y, 1, 1) + c565 := RGBATo565(c) + d.startWrite() + d.driver.write16(c565) + d.endWrite() +} + +// Display sends the buffer (if any) to the screen. +func (d *Device) Display() error { + return nil +} + +func (d *Device) DrawRGBBitmap(x, y int16, data []uint16, w, h int16) error { + k, i := d.Size() + if x < 0 || y < 0 || w <= 0 || h <= 0 || + x >= k || (x+w) > k || y >= i || (y+h) > i { + return errors.New("rectangle coordinates outside display area") + } + d.setWindow(x, y, w, h) + d.startWrite() + d.driver.write16sl(data) + d.endWrite() + return nil +} + +// FillRectangle fills a rectangle at a given coordinates with a color +func (d *Device) FillRectangle(x, y, width, height int16, c color.RGBA) error { + k, i := d.Size() + if x < 0 || y < 0 || width <= 0 || height <= 0 || + x >= k || (x+width) > k || y >= i || (y+height) > i { + return errors.New("rectangle coordinates outside display area") + } + d.setWindow(x, y, width, height) + c565 := RGBATo565(c) + d.startWrite() + d.driver.write16n(c565, int(width)*int(height)) + d.endWrite() + return nil +} + +// DrawRectangle fills a rectangle at a given coordinates with a color +func (d *Device) DrawRectangle(x, y, w, h int16, c color.RGBA) error { + if err := d.DrawFastHLine(x, x+w-1, y, c); err != nil { + return err + } + if err := d.DrawFastHLine(x, x+w-1, y+h-1, c); err != nil { + return err + } + if err := d.DrawFastVLine(x, y, y+h-1, c); err != nil { + return err + } + if err := d.DrawFastVLine(x+w-1, y, y+h-1, c); err != nil { + return err + } + return nil +} + +// DrawFastVLine draws a vertical line faster than using SetPixel +func (d *Device) DrawFastVLine(x, y0, y1 int16, c color.RGBA) error { + if y0 > y1 { + y0, y1 = y1, y0 + } + return d.FillRectangle(x, y0, 1, y1-y0+1, c) +} + +// DrawFastHLine draws a horizontal line faster than using SetPixel +func (d *Device) DrawFastHLine(x0, x1, y int16, c color.RGBA) error { + if x0 > x1 { + x0, x1 = x1, x0 + } + return d.FillRectangle(x0, y, x1-x0+1, 1, c) +} + +// FillScreen fills the screen with a given color +func (d *Device) FillScreen(c color.RGBA) { + if d.rotation == Rotation0 || d.rotation == Rotation180 { + d.FillRectangle(0, 0, d.width, d.height, c) + } else { + d.FillRectangle(0, 0, d.height, d.width, c) + } +} + +func (d *Device) GetRotation() Rotation { + return d.rotation +} + +// SetRotation changes the rotation of the device (clock-wise) +func (d *Device) SetRotation(rotation Rotation) { + madctl := uint8(0) + switch rotation % 4 { + case 0: + madctl = MADCTL_MX | MADCTL_BGR + case 1: + madctl = MADCTL_MV | MADCTL_BGR + case 2: + madctl = MADCTL_MY | MADCTL_BGR + case 3: + madctl = MADCTL_MX | MADCTL_MY | MADCTL_MV | MADCTL_BGR + } + d.sendCommand(MADCTL, []uint8{madctl}) + d.rotation = rotation +} + +// SetScrollWindow sets an area to scroll with fixed top and bottom parts of the display +func (d *Device) SetScrollArea(topFixedArea, bottomFixedArea int16) { + d.sendCommand(VSCRDEF, []uint8{ + uint8(topFixedArea >> 8), uint8(topFixedArea), + uint8(d.height - topFixedArea - bottomFixedArea>>8), + uint8(d.height - topFixedArea - bottomFixedArea), + uint8(bottomFixedArea >> 8), uint8(bottomFixedArea), + }) +} + +// SetScroll sets the vertical scroll address of the display. +func (d *Device) SetScroll(line int16) { + d.sendCommand(VSCRSADD, []uint8{uint8(line >> 8), uint8(line)}) +} + +// SpotScroll returns the display to its normal state +func (d *Device) StopScroll() { + d.sendCommand(NORON, nil) +} + +// setWindow prepares the screen to be modified at a given rectangle +func (d *Device) setWindow(x, y, w, h int16) { + //x += d.columnOffset + //y += d.rowOffset + d.sendCommand(CASET, []uint8{ + uint8(x >> 8), uint8(x), uint8((x + w - 1) >> 8), uint8(x + w - 1), + }) + d.sendCommand(PASET, []uint8{ + uint8(y >> 8), uint8(y), uint8((y + h - 1) >> 8), uint8(y + h - 1), + }) + d.sendCommand(RAMWR, nil) +} + +//go:inline +func (d *Device) startWrite() { + if d.cs != machine.NoPin { + d.cs.Low() + } +} + +//go:inline +func (d *Device) endWrite() { + if d.cs != machine.NoPin { + d.cs.High() + } +} + +func (d *Device) sendCommand(cmd byte, data []byte) { + d.startWrite() + d.dc.Low() + d.driver.write8(cmd) + d.dc.High() + d.driver.write8sl(data) + d.endWrite() +} + +type driver interface { + configure(config *Config) + write8(b byte) + write8n(b byte, n int) + write8sl(b []byte) + write16(data uint16) + write16n(data uint16, n int) + write16sl(data []uint16) +} + +func delay(m int) { + t := time.Now().UnixNano() + int64(time.Duration(m*1000)*time.Microsecond) + for time.Now().UnixNano() < t { + } +} + +// RGBATo565 converts a color.RGBA to uint16 used in the display +func RGBATo565(c color.RGBA) uint16 { + r, g, b, _ := c.RGBA() + return uint16((r & 0xF800) + + ((g & 0xFC00) >> 5) + + ((b & 0xF800) >> 11)) +} diff --git a/src/examples/pyportal_boing/ili9341/parallel_atsamd51.go b/src/examples/pyportal_boing/ili9341/parallel_atsamd51.go new file mode 100644 index 0000000000..4b566829ad --- /dev/null +++ b/src/examples/pyportal_boing/ili9341/parallel_atsamd51.go @@ -0,0 +1,109 @@ +// +build atsamd51 + +package ili9341 + +import ( + "machine" + "runtime/volatile" + "unsafe" +) + +type parallelDriver struct { + d0 machine.Pin + wr machine.Pin + + setPort *uint8 + + clrPort *uint32 + clrMask uint32 + + wrPortSet *uint32 + wrMaskSet uint32 + + wrPortClr *uint32 + wrMaskClr uint32 +} + +func NewParallel(d0, wr, dc, cs, rst, rd machine.Pin) *Device { + return &Device{ + dc: dc, + cs: cs, + rd: rd, + rst: rst, + driver: ¶llelDriver{ + d0: d0, + wr: wr, + }, + } +} + +func (pd *parallelDriver) configure(config *Config) { + output := machine.PinConfig{machine.PinOutput} + for pin := pd.d0; pin < pd.d0+8; pin++ { + pin.Configure(output) + pin.Low() + } + pd.wr.Configure(output) + pd.wr.High() + + // Calculates the address of the OUT register from the OUTSET register and obtains an address that allows 8-bit access. + // OUT : offset = 0x10 + // OUTSET : offset = 0x18 + setPort, _ := pd.d0.PortMaskSet() + setMask := uint32(pd.d0) & 0x1f + pd.setPort = (*uint8)(unsafe.Pointer(uintptr(unsafe.Pointer(setPort)) - uintptr(8) + uintptr(setMask/8))) + + pd.clrPort, _ = (pd.d0).PortMaskClear() + pd.clrMask = 0xFF << uint32(pd.d0) + + pd.wrPortSet, pd.wrMaskSet = pd.wr.PortMaskSet() + pd.wrPortClr, pd.wrMaskClr = pd.wr.PortMaskClear() +} + +//go:inline +func (pd *parallelDriver) write8(b byte) { + volatile.StoreUint8(pd.setPort, uint8(b)) + pd.wrx() +} + +//go:inline +func (pd *parallelDriver) wrx() { + volatile.StoreUint32(pd.wrPortClr, pd.wrMaskClr) + volatile.StoreUint32(pd.wrPortSet, pd.wrMaskSet) +} + +//go:inline +func (pd *parallelDriver) write8n(b byte, n int) { + for i := 0; i < n; i++ { + pd.write8(b) + } +} + +//go:inline +func (pd *parallelDriver) write8sl(b []byte) { + for i := 0; i < len(b); i++ { + pd.write8(b[i]) + } +} + +//go:inline +func (pd *parallelDriver) write16(data uint16) { + pd.write8(byte(data >> 8)) + pd.write8(byte(data)) +} + +//go:inline +func (pd *parallelDriver) write16n(data uint16, n int) { + for i := 0; i < n; i++ { + pd.write8(byte(data >> 8)) + pd.write8(byte(data)) + } +} + +//go:inline +func (pd *parallelDriver) write16sl(data []uint16) { + for i, c := 0, len(data); i < c; i++ { + pd.write8(byte(data[i] >> 8)) + pd.write8(byte(data[i])) + } +} diff --git a/src/examples/pyportal_boing/ili9341/registers.go b/src/examples/pyportal_boing/ili9341/registers.go new file mode 100644 index 0000000000..d458ee967d --- /dev/null +++ b/src/examples/pyportal_boing/ili9341/registers.go @@ -0,0 +1,84 @@ +package ili9341 + +type Rotation uint8 + +const ( + + // register constants based on source: + // https://github.com/adafruit/Adafruit_ILI9341/blob/master/Adafruit_ILI9341.h + + TFTWIDTH = 240 ///< ILI9341 max TFT width + TFTHEIGHT = 320 ///< ILI9341 max TFT height + + NOP = 0x00 ///< No-op register + SWRESET = 0x01 ///< Software reset register + RDDID = 0x04 ///< Read display identification information + RDDST = 0x09 ///< Read Display Status + + SLPIN = 0x10 ///< Enter Sleep Mode + SLPOUT = 0x11 ///< Sleep Out + PTLON = 0x12 ///< Partial Mode ON + NORON = 0x13 ///< Normal Display Mode ON + + RDMODE = 0x0A ///< Read Display Power Mode + RDMADCTL = 0x0B ///< Read Display MADCTL + RDPIXFMT = 0x0C ///< Read Display Pixel Format + RDIMGFMT = 0x0D ///< Read Display Image Format + RDSELFDIAG = 0x0F ///< Read Display Self-Diagnostic Result + + INVOFF = 0x20 ///< Display Inversion OFF + INVON = 0x21 ///< Display Inversion ON + GAMMASET = 0x26 ///< Gamma Set + DISPOFF = 0x28 ///< Display OFF + DISPON = 0x29 ///< Display ON + + CASET = 0x2A ///< Column Address Set + PASET = 0x2B ///< Page Address Set + RAMWR = 0x2C ///< Memory Write + RAMRD = 0x2E ///< Memory Read + + PTLAR = 0x30 ///< Partial Area + VSCRDEF = 0x33 ///< Vertical Scrolling Definition + MADCTL = 0x36 ///< Memory Access Control + VSCRSADD = 0x37 ///< Vertical Scrolling Start Address + PIXFMT = 0x3A ///< COLMOD: Pixel Format Set + + FRMCTR1 = 0xB1 ///< Frame Rate Control (In Normal Mode/Full Colors) + FRMCTR2 = 0xB2 ///< Frame Rate Control (In Idle Mode/8 colors) + FRMCTR3 = 0xB3 ///< Frame Rate control (In Partial Mode/Full Colors) + INVCTR = 0xB4 ///< Display Inversion Control + DFUNCTR = 0xB6 ///< Display Function Control + + PWCTR1 = 0xC0 ///< Power Control 1 + PWCTR2 = 0xC1 ///< Power Control 2 + PWCTR3 = 0xC2 ///< Power Control 3 + PWCTR4 = 0xC3 ///< Power Control 4 + PWCTR5 = 0xC4 ///< Power Control 5 + VMCTR1 = 0xC5 ///< VCOM Control 1 + VMCTR2 = 0xC7 ///< VCOM Control 2 + + RDID1 = 0xDA ///< Read ID 1 + RDID2 = 0xDB ///< Read ID 2 + RDID3 = 0xDC ///< Read ID 3 + RDID4 = 0xDD ///< Read ID 4 + + GMCTRP1 = 0xE0 ///< Positive Gamma Correction + GMCTRN1 = 0xE1 ///< Negative Gamma Correction + //PWCTR6 0xFC + + MADCTL_MY = 0x80 ///< Bottom to top + MADCTL_MX = 0x40 ///< Right to left + MADCTL_MV = 0x20 ///< Reverse Mode + MADCTL_ML = 0x10 ///< LCD refresh Bottom to top + MADCTL_RGB = 0x00 ///< Red-Green-Blue pixel order + MADCTL_BGR = 0x08 ///< Blue-Green-Red pixel order + MADCTL_MH = 0x04 ///< LCD refresh right to left + +) + +const ( + Rotation0 Rotation = 0 + Rotation90 Rotation = 1 // 90 degrees clock-wise rotation + Rotation180 Rotation = 2 + Rotation270 Rotation = 3 +) diff --git a/src/examples/pyportal_boing/ili9341/spi_atsamd51.go b/src/examples/pyportal_boing/ili9341/spi_atsamd51.go new file mode 100644 index 0000000000..8c8d6d97f7 --- /dev/null +++ b/src/examples/pyportal_boing/ili9341/spi_atsamd51.go @@ -0,0 +1,111 @@ +// +build atsamd51 + +package ili9341 + +import ( + "device/sam" + "machine" +) + +type spiDriver struct { + bus *machine.SPI +} + +func NewSpi(bus *machine.SPI, dc, cs, rst machine.Pin) *Device { + return &Device{ + dc: dc, + cs: cs, + rst: rst, + rd: machine.NoPin, + driver: &spiDriver{ + bus: bus, + }, + } +} + +func (pd *spiDriver) configure(config *Config) { +} + +func (pd *spiDriver) write8(b byte) { + pd.bus.Bus.CTRLB.ClearBits(sam.SERCOM_SPIM_CTRLB_RXEN) + + for !pd.bus.Bus.INTFLAG.HasBits(sam.SERCOM_SPIM_INTFLAG_DRE) { + } + pd.bus.Bus.DATA.Set(uint32(b)) + + pd.bus.Bus.CTRLB.SetBits(sam.SERCOM_SPIM_CTRLB_RXEN) + for pd.bus.Bus.SYNCBUSY.HasBits(sam.SERCOM_SPIM_SYNCBUSY_CTRLB) { + } +} + +func (pd *spiDriver) write8n(b byte, n int) { + pd.bus.Bus.CTRLB.ClearBits(sam.SERCOM_SPIM_CTRLB_RXEN) + + for i, c := 0, n; i < c; i++ { + for !pd.bus.Bus.INTFLAG.HasBits(sam.SERCOM_SPIM_INTFLAG_DRE) { + } + pd.bus.Bus.DATA.Set(uint32(b)) + } + + pd.bus.Bus.CTRLB.SetBits(sam.SERCOM_SPIM_CTRLB_RXEN) + for pd.bus.Bus.SYNCBUSY.HasBits(sam.SERCOM_SPIM_SYNCBUSY_CTRLB) { + } +} + +func (pd *spiDriver) write8sl(b []byte) { + pd.bus.Bus.CTRLB.ClearBits(sam.SERCOM_SPIM_CTRLB_RXEN) + + for i, c := 0, len(b); i < c; i++ { + for !pd.bus.Bus.INTFLAG.HasBits(sam.SERCOM_SPIM_INTFLAG_DRE) { + } + pd.bus.Bus.DATA.Set(uint32(b[i])) + } + + pd.bus.Bus.CTRLB.SetBits(sam.SERCOM_SPIM_CTRLB_RXEN) + for pd.bus.Bus.SYNCBUSY.HasBits(sam.SERCOM_SPIM_SYNCBUSY_CTRLB) { + } +} + +func (pd *spiDriver) write16(data uint16) { + pd.bus.Bus.CTRLB.ClearBits(sam.SERCOM_SPIM_CTRLB_RXEN) + + for !pd.bus.Bus.INTFLAG.HasBits(sam.SERCOM_SPIM_INTFLAG_DRE) { + } + pd.bus.Bus.DATA.Set(uint32(uint8(data >> 8))) + for !pd.bus.Bus.INTFLAG.HasBits(sam.SERCOM_SPIM_INTFLAG_DRE) { + } + pd.bus.Bus.DATA.Set(uint32(uint8(data))) + + pd.bus.Bus.CTRLB.SetBits(sam.SERCOM_SPIM_CTRLB_RXEN) + for pd.bus.Bus.SYNCBUSY.HasBits(sam.SERCOM_SPIM_SYNCBUSY_CTRLB) { + } +} + +func (pd *spiDriver) write16n(data uint16, n int) { + pd.bus.Bus.CTRLB.ClearBits(sam.SERCOM_SPIM_CTRLB_RXEN) + + for i := 0; i < n; i++ { + for !pd.bus.Bus.INTFLAG.HasBits(sam.SERCOM_SPIM_INTFLAG_DRE) { + } + pd.bus.Bus.DATA.Set(uint32(uint8(data >> 8))) + for !pd.bus.Bus.INTFLAG.HasBits(sam.SERCOM_SPIM_INTFLAG_DRE) { + } + pd.bus.Bus.DATA.Set(uint32(uint8(data))) + } + + pd.bus.Bus.CTRLB.SetBits(sam.SERCOM_SPIM_CTRLB_RXEN) + for pd.bus.Bus.SYNCBUSY.HasBits(sam.SERCOM_SPIM_SYNCBUSY_CTRLB) { + } +} + +// for pyportal_boing +var data8 = make([]uint8, (136+8)*(100+8)*2) + +func (pd *spiDriver) write16sl(data []uint16) { + for i, b := range data { + data8[i*2+0] = uint8(b >> 8) + data8[i*2+1] = uint8(b) + } + + pd.bus.Tx(data8[:len(data)*2], nil) +} diff --git a/src/examples/pyportal_boing/main.go b/src/examples/pyportal_boing/main.go new file mode 100644 index 0000000000..7f27015903 --- /dev/null +++ b/src/examples/pyportal_boing/main.go @@ -0,0 +1,227 @@ +// Port of Adafruit's "pyportal_boing" demo found here: +// https://github.com/adafruit/Adafruit_ILI9341/blob/master/examples/pyportal_boing +package main + +import ( + "machine" + "time" + + "examples/pyportal_boing/graphics" + "examples/pyportal_boing/ili9341" +) + +const ( + BGCOLOR = 0xAD75 + GRIDCOLOR = 0xA815 + BGSHADOW = 0x5285 + GRIDSHADOW = 0x600C + RED = 0xF800 + WHITE = 0xFFFF + + YBOTTOM = 123 // Ball Y coord at bottom + YBOUNCE = -3.5 // Upward velocity on ball bounce + + _debug = false +) + +var ( + frameBuffer = [(graphics.BALLHEIGHT + 8) * (graphics.BALLWIDTH + 8)]uint16{} + + startTime int64 + frame int64 + + // Ball coordinates are stored floating-point because screen refresh + // is so quick, whole-pixel movements are just too fast! + ballx float32 + bally float32 + ballvx float32 + ballvy float32 + ballframe float32 + balloldx float32 + balloldy float32 + + // Color table for ball rotation effect + palette [16]uint16 +) + +func main() { + + // configure backlight + backlight.Configure(machine.PinConfig{machine.PinOutput}) + + // configure display + display.Configure(ili9341.Config{}) + print("width, height == ") + width, height := display.Size() + println(width, height) + + backlight.High() + + display.SetRotation(ili9341.Rotation270) + DrawBackground() + + startTime = time.Now().UnixNano() + frame = 0 + + ballx = 20.0 + bally = YBOTTOM // Current ball position + ballvx = 0.8 + ballvy = YBOUNCE // Ball velocity + ballframe = 3 // Ball animation frame # + balloldx = ballx + balloldy = bally // Prior ball position + + for { + + balloldx = ballx // Save prior position + balloldy = bally + ballx += ballvx // Update position + bally += ballvy + ballvy += 0.06 // Update Y velocity + if (ballx <= 15) || (ballx >= graphics.SCREENWIDTH-graphics.BALLWIDTH) { + ballvx *= -1 // Left/right bounce + } + if bally >= YBOTTOM { // Hit ground? + bally = YBOTTOM // Clip and + ballvy = YBOUNCE // bounce up + } + + // Determine screen area to update. This is the bounds of the ball's + // prior and current positions, so the old ball is fully erased and new + // ball is fully drawn. + var minx, miny, maxx, maxy, width, height int16 + + // Determine bounds of prior and new positions + minx = int16(ballx) + if int16(balloldx) < minx { + minx = int16(balloldx) + } + miny = int16(bally) + if int16(balloldy) < miny { + miny = int16(balloldy) + } + maxx = int16(ballx + graphics.BALLWIDTH - 1) + if int16(balloldx+graphics.BALLWIDTH-1) > maxx { + maxx = int16(balloldx + graphics.BALLWIDTH - 1) + } + maxy = int16(bally + graphics.BALLHEIGHT - 1) + if int16(balloldy+graphics.BALLHEIGHT-1) > maxy { + maxy = int16(balloldy + graphics.BALLHEIGHT - 1) + } + + width = maxx - minx + 1 + height = maxy - miny + 1 + + // Ball animation frame # is incremented opposite the ball's X velocity + ballframe -= ballvx * 0.5 + if ballframe < 0 { + ballframe += 14 // Constrain from 0 to 13 + } else if ballframe >= 14 { + ballframe -= 14 + } + + // Set 7 palette entries to white, 7 to red, based on frame number. + // This makes the ball spin + for i := 0; i < 14; i++ { + if (int(ballframe)+i)%14 < 7 { + palette[i+2] = WHITE + } else { + palette[i+2] = RED + } // Palette entries 0 and 1 aren't used (clear and shadow, respectively) + } + + // Only the changed rectangle is drawn into the 'renderbuf' array... + var c uint16 //, *destPtr; + bx := minx - int16(ballx) // X relative to ball bitmap (can be negative) + by := miny - int16(bally) // Y relative to ball bitmap (can be negative) + bgx := minx // X relative to background bitmap (>= 0) + bgy := miny // Y relative to background bitmap (>= 0) + var bx1, bgx1 int16 // Loop counters and working vars + var p uint8 // 'packed' value of 2 ball pixels + var bufIdx int8 = 0 + + //tft.setAddrWindow(minx, miny, width, height) + + for y := 0; y < int(height); y++ { // For each row... + //destPtr = &renderbuf[bufIdx][0]; + bx1 = bx // Need to keep the original bx and bgx values, + bgx1 = bgx // so copies of them are made here (and changed in loop below) + for x := 0; x < int(width); x++ { + var bgidx = int(bgy)*(graphics.SCREENWIDTH/8) + int(bgx1/8) + if (bx1 >= 0) && (bx1 < graphics.BALLWIDTH) && // Is current pixel row/column + (by >= 0) && (by < graphics.BALLHEIGHT) { // inside the ball bitmap area? + // Yes, do ball compositing math... + p = graphics.Ball[int(by*(graphics.BALLWIDTH/2))+int(bx1/2)] // Get packed value (2 pixels) + if (bx1 & 1) != 0 { + c = uint16(p & 0xF) + } else { + c = uint16(p >> 4) + } // Unpack high or low nybble + if c == 0 { // Outside ball - just draw grid + if graphics.Background[bgidx]&(0x80>>(bgx1&7)) != 0 { + c = GRIDCOLOR + } else { + c = BGCOLOR + } + } else if c > 1 { // In ball area... + c = palette[c] + } else { // In shadow area... + if graphics.Background[bgidx]&(0x80>>(bgx1&7)) != 0 { + c = GRIDSHADOW + } else { + c = BGSHADOW + } + } + } else { // Outside ball bitmap, just draw background bitmap... + if graphics.Background[bgidx]&(0x80>>(bgx1&7)) != 0 { + c = GRIDCOLOR + } else { + c = BGCOLOR + } + } + frameBuffer[y*int(width)+x] = c + bx1++ // Increment bitmap position counters (X axis) + bgx1++ + } + //tft.dmaWait(); // Wait for prior line to complete + //tft.writePixels(&renderbuf[bufIdx][0], width, false); // Non-blocking write + bufIdx = 1 - bufIdx + by++ // Increment bitmap position counters (Y axis) + bgy++ + } + + machine.SPI3.DmaWait() + display.DrawRGBBitmap(minx, miny, frameBuffer[:width*height], width, height) + + // Show approximate frame rate + frame++ + if frame&255 == 0 { // Every 256 frames... + elapsed := (time.Now().UnixNano() - startTime) / int64(time.Second) + if elapsed > 0 { + println(frame/elapsed, " fps") + } + } + } +} + +func DrawBackground() { + w, h := display.Size() + byteWidth := (w + 7) / 8 // Bitmap scanline pad = whole byte + var b uint8 + for j := int16(0); j < h; j++ { + for k := int16(0); k < w; k++ { + if k&7 > 0 { + b <<= 1 + } else { + b = graphics.Background[j*byteWidth+k/8] + } + if b&0x80 == 0 { + frameBuffer[k] = BGCOLOR + } else { + frameBuffer[k] = GRIDCOLOR + } + } + machine.SPI3.DmaWait() + display.DrawRGBBitmap(0, j, frameBuffer[0:w], w, 1) + } +} diff --git a/src/examples/pyportal_boing/pyportal.go b/src/examples/pyportal_boing/pyportal.go new file mode 100644 index 0000000000..ed8e22d152 --- /dev/null +++ b/src/examples/pyportal_boing/pyportal.go @@ -0,0 +1,22 @@ +// +build pyportal + +package main + +import ( + "machine" + + "examples/pyportal_boing/ili9341" +) + +var ( + display = ili9341.NewParallel( + machine.LCD_DATA0, + machine.TFT_WR, + machine.TFT_DC, + machine.TFT_CS, + machine.TFT_RESET, + machine.TFT_RD, + ) + + backlight = machine.TFT_BACKLIGHT +) diff --git a/src/examples/pyportal_boing/wioterminal.go b/src/examples/pyportal_boing/wioterminal.go new file mode 100644 index 0000000000..bb04dee682 --- /dev/null +++ b/src/examples/pyportal_boing/wioterminal.go @@ -0,0 +1,33 @@ +// +build wioterminal + +package main + +import ( + "machine" + + "examples/pyportal_boing/ili9341" +) + +var ( + display = ili9341.NewSpi( + &machine.SPI3, + machine.LCD_DC, + machine.NoPin, // machine.LCD_SS_PIN, + machine.LCD_RESET, + ) + + backlight = machine.LCD_BACKLIGHT +) + +func init() { + machine.SPI3.Configure(machine.SPIConfig{ + SCK: machine.LCD_SCK_PIN, + MOSI: machine.LCD_MOSI_PIN, + MISO: machine.LCD_MISO_PIN, + Frequency: 40000000, + }) + machine.SPI3.SetupDMA() + + machine.LCD_SS_PIN.Configure(machine.PinConfig{Mode: machine.PinOutput}) + machine.LCD_SS_PIN.Low() +} diff --git a/src/machine/machine_atsamd51.go b/src/machine/machine_atsamd51.go index 7008590bab..d50ed0124a 100644 --- a/src/machine/machine_atsamd51.go +++ b/src/machine/machine_atsamd51.go @@ -1303,6 +1303,10 @@ func (i2c I2C) readByte() byte { type SPI struct { Bus *sam.SERCOM_SPIM_Type SERCOM uint8 + + DmaChannel uint32 + DmaEnabled bool + DmaWaitEnd bool } // SPIConfig is used to store config info for SPI. @@ -1440,6 +1444,97 @@ func (spi SPI) Transfer(w byte) (byte, error) { return byte(spi.Bus.DATA.Get()), nil } +const dmaDescriptors = 2 + +//go:align 16 +var dmaDescriptorSection [dmaDescriptors]dmaDescriptor + +//go:align 16 +var dmaDescriptorWritebackSection [dmaDescriptors]dmaDescriptor + +type dmaDescriptor struct { + btctrl uint16 + btcnt uint16 + srcaddr unsafe.Pointer + dstaddr unsafe.Pointer + descaddr unsafe.Pointer +} + +// SetupDMA setup DMA for SPI tx. +func (spi *SPI) SetupDMA() error { + spi.DmaChannel = 0 + spi.DmaEnabled = true + spi.DmaWaitEnd = false + triggerSource := uint32(0x13) // TODO: calc from spi.SERCOM + + // Init DMAC. + // First configure the clocks, then configure the DMA descriptors. Those + // descriptors must live in SRAM and must be aligned on a 16-byte boundary. + // http://www.lucadavidian.com/2018/03/08/wifi-controlled-neo-pixels-strips/ + // https://svn.larosterna.com/oss/trunk/arduino/zerotimer/zerodma.cpp + sam.MCLK.AHBMASK.SetBits(sam.MCLK_AHBMASK_DMAC_) + sam.DMAC.BASEADDR.Set(uint32(uintptr(unsafe.Pointer(&dmaDescriptorSection)))) + sam.DMAC.WRBADDR.Set(uint32(uintptr(unsafe.Pointer(&dmaDescriptorWritebackSection)))) + + // Enable peripheral with all priorities. + sam.DMAC.CTRL.SetBits(sam.DMAC_CTRL_DMAENABLE | sam.DMAC_CTRL_LVLEN0 | sam.DMAC_CTRL_LVLEN1 | sam.DMAC_CTRL_LVLEN2 | sam.DMAC_CTRL_LVLEN3) + + // Configure channel descriptor. + dmaDescriptorSection[spi.DmaChannel] = dmaDescriptor{ + btctrl: (1 << 0) | // VALID: Descriptor Valid + (0 << 3) | // BLOCKACT=NOACT: Block Action + (1 << 10) | // SRCINC: Source Address Increment Enable + (0 << 11) | // DSTINC: Destination Address Increment Enable + (1 << 12) | // STEPSEL=SRC: Step Selection + (0 << 13), // STEPSIZE=X1: Address Increment Step Size + dstaddr: unsafe.Pointer(&spi.Bus.DATA.Reg), + } + + // Reset channel. + sam.DMAC.CHANNEL[spi.DmaChannel].CHCTRLA.ClearBits(sam.DMAC_CHANNEL_CHCTRLA_ENABLE) + sam.DMAC.CHANNEL[spi.DmaChannel].CHCTRLA.SetBits(sam.DMAC_CHANNEL_CHCTRLA_SWRST) + + // Configure channel. + sam.DMAC.CHANNEL[spi.DmaChannel].CHPRILVL.Set(0) + sam.DMAC.CHANNEL[spi.DmaChannel].CHCTRLA.Set((sam.DMAC_CHANNEL_CHCTRLA_TRIGACT_BURST << sam.DMAC_CHANNEL_CHCTRLA_TRIGACT_Pos) | (triggerSource << sam.DMAC_CHANNEL_CHCTRLA_TRIGSRC_Pos) | (sam.DMAC_CHANNEL_CHCTRLA_BURSTLEN_SINGLE << sam.DMAC_CHANNEL_CHCTRLA_BURSTLEN_Pos)) + //sam.DMAC.CHANNEL[spi.DmaChannel].CHCTRLA.Set((sam.DMAC_CHANNEL_CHCTRLA_TRIGACT_BLOCK << sam.DMAC_CHANNEL_CHCTRLA_TRIGACT_Pos) | (triggerSource << sam.DMAC_CHANNEL_CHCTRLA_TRIGSRC_Pos) | (sam.DMAC_CHANNEL_CHCTRLA_BURSTLEN_SINGLE << sam.DMAC_CHANNEL_CHCTRLA_BURSTLEN_Pos)) + return nil +} + +func (spi *SPI) TransferDma8(buf []byte) { + //sam.DMAC.CHANNEL[spi.Channel].CHCTRLA.ClearBits(sam.DMAC_CHANNEL_CHCTRLA_ENABLE) + descriptor := &dmaDescriptorSection[spi.DmaChannel] + descriptor.srcaddr = unsafe.Pointer(uintptr(unsafe.Pointer(&buf[0])) + uintptr(len(buf))) + descriptor.btcnt = uint16(len(buf)) // beat count + + // Start the transfer. + spi.DmaWaitEnd = true + sam.DMAC.CHANNEL[spi.DmaChannel].CHCTRLA.SetBits(sam.DMAC_CHANNEL_CHCTRLA_ENABLE) +} + +func (spi *SPI) TransferDma16(buf []uint16) { + //sam.DMAC.CHANNEL[spi.Channel].CHCTRLA.ClearBits(sam.DMAC_CHANNEL_CHCTRLA_ENABLE) + descriptor := &dmaDescriptorSection[spi.DmaChannel] + descriptor.srcaddr = unsafe.Pointer(uintptr(unsafe.Pointer(&buf[0])) + uintptr(len(buf)*2)) + descriptor.btcnt = uint16(len(buf) * 2) // beat count + + // Start the transfer. + spi.DmaWaitEnd = true + sam.DMAC.CHANNEL[spi.DmaChannel].CHCTRLA.SetBits(sam.DMAC_CHANNEL_CHCTRLA_ENABLE) +} + +func (spi *SPI) DmaWait() error { + if !spi.DmaWaitEnd { + return nil + } + + for !sam.DMAC.CHANNEL[spi.DmaChannel].CHINTFLAG.HasBits(sam.DMAC_CHANNEL_CHINTFLAG_TCMPL) { + } + sam.DMAC.CHANNEL[spi.DmaChannel].CHINTFLAG.SetBits(sam.DMAC_CHANNEL_CHINTFLAG_TCMPL) + spi.DmaWaitEnd = false + return nil +} + // The QSPI peripheral on ATSAMD51 is only available on the following pins const ( QSPI_SCK = PB10 diff --git a/src/machine/spi.go b/src/machine/spi.go index 2b022c4136..91e6d05161 100644 --- a/src/machine/spi.go +++ b/src/machine/spi.go @@ -34,7 +34,7 @@ var ( // // spi.Tx(nil, rx) // -func (spi SPI) Tx(w, r []byte) error { +func (spi *SPI) Tx(w, r []byte) error { var err error switch { @@ -48,10 +48,19 @@ func (spi SPI) Tx(w, r []byte) error { } case r == nil: // write only - for _, b := range w { - _, err = spi.Transfer(b) - if err != nil { - return err + if spi.DmaEnabled { + spi.TransferDma8(w) + + // If you want to wait until you're finished, you can uncomment + //return spi.DmaWait() + + return nil + } else { + for _, b := range w { + _, err = spi.Transfer(b) + if err != nil { + return err + } } }