pal_from_spr/pal_from_spr.p8

445 lines
29 KiB
Lua
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

pico-8 cartridge // http://www.pico-8.com
version 41
__lua__
-- sprite-sampled palette
-- kistaro@gmail.com
function _init()
-- lock top 16 rows to default palette
pal({[0]=0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15}, 2)
poke(0x5f5f, 0x10)
poke2(0x5f70, 0xffff)
mode = "boxes"
active = "draw"
scx = 0
scy = 0
dcx = 0
dcy = 0
init_box_pals()
init_rows_pals()
end
function boxspr(x, y)
return 1+x+16*(y\2)+(y%2*0.5)
end
function init_box_pals()
box_pals = {}
for x=0,box_cols-1 do
local pal_col = {}
for y=0,box_rows-1 do
pal_col[y] = load_box_palette(boxspr(x,y))
end
box_pals[x] = pal_col
end
end
function init_rows_pals()
rows_pals = {}
for x=0,rows_cols-1 do
local pal_col = {}
for y=0,rows_rows-1 do
pal_col[y] = load_row_palette(
8+16*x,
16+2*y
)
end
rows_pals[x] = pal_col
end
end
function _update()
if (btnp(🅾)) mode = (mode == "boxes") and "rows" or "boxes"
if (btnp()) active = (active == "draw") and "screen" or "draw"
if active == "draw" then
if (btnp()) dcy -= 1
if (btnp()) dcy += 1
if (btnp()) dcx -= 1
if (btnp()) dcx += 1
else
if (btnp()) scy -= 1
if (btnp()) scy += 1
if (btnp()) scx -= 1
if (btnp()) scx += 1
end
dcx %= (mode == "boxes") and box_cols or rows_cols
scx %= (mode == "boxes") and box_cols or rows_cols
dcy %= (mode == "boxes") and box_rows or rows_rows
scy %= (mode == "boxes") and box_rows or rows_rows
end
function _draw()
cls()
draw_hud()
local pals = (mode == "boxes") and box_pals or rows_pals
pals[dcx][dcy]:do_both(0)
pals[scx][scy]:do_both(1)
draw_bars()
end
function draw_hud()
pal(0)
pal(1)
if (mode == "boxes") return draw_box_hud()
draw_rows_hud()
end
function print_shadow(s,x,y,c)
print(s,x+1,y+1,1)
print(s,x,y,c or 7)
end
function lpad(str,w)
str=tostr(str)
while (#str < w) str = " "..str
return str
end
box_rows = 4
box_cols = 4
function draw_box_hud()
spr(1,3,0,4,2)
local toff = time() * 4 \ 1 % 2
spr(107 + (active == "draw" and toff or 0),
3+8*dcx,4*dcy,1,0.5)
spr(109 + (active == "screen" and toff or 0),
3+8*scx,4*scy,1,0.5)
print_shadow("draw",42,1,(active == "draw" and toff ~= 0) and 7 or 12)
print_shadow(lpad(boxspr(scx,scy),3),46,9,6)
sspr(8+8*dcx,4*dcy,8,4,59,4,16,8)
print_shadow("scr",77,1,(active == "screen" and toff ~= 0) and 7 or 14)
print_shadow(lpad(boxspr(dcx,dcy),3),77,9,6)
sspr(8+8*scx,4*scy,8,4,91,4,16,8)
end
rows_rows = 8
rows_cols = 2
function draw_rows_hud()
spr(33,0,0,2,2)
spr(35,22,0,2,2)
local toff = time() * 4 \ 1 % 2
spr(103 + (active == "draw" and toff or 0),
17 + 22*dcx, 2*dcy, 0.25, 0.25)
spr(105 + (active == "screen" and toff or 0),
17 + 22*scx, 2*scy, 0.25, 0.25)
print_shadow("draw",44,0,(active == "draw" and toff ~= 0) and 7 or 12)
sspr(8+16*dcx,16+2*dcy,16,2,61,1,32,4)
print_shadow("scr",48,8,(active == "screen" and toff ~= 0) and 7 or 14)
sspr(8+16*scx,16+2*scy,16,2,61,9,32,4)
end
function draw_bars()
for i=0,15 do
local i6 = i * 6
rectfill(0,16+i6,128,i6+21,i)
end
for i=0,15 do
for y=16,120,8 do
spr(i+112,9+i*7,y,0.625,1)
end
end
for y=16,120,8 do
spr(111,120,y)
end
end
-->8
-- palette structure
palette = {
-- cols: table. identical
-- format to table-type
-- pal call
-- tr: transparency table.
-- keys: [0]..[15]
-- (color indexes)
-- vals: true/false/nil
-- for transparency of
-- that color. false
-- sets opaque, nil
-- means "do not set".
-- tables with no absent
-- values can be compiled
-- for faster do_palt.
-- cpl_tr: compiled tr. set by
-- compile_palt iff all
-- tr values in range
-- are nonnil. do_palt
-- is faster this way
}
palette_mt = {__index=palette}
function palette.new(x)
x = x or {}
if (not x.cols) x.cols = {}
if (not x.tr) x.tr = {}
setmetatable(x, palette_mt)
return x
end
function palette:do_pal(p)
pal(self.cols, p)
end
function palette:do_palt()
if (self.cpl_tr) return palt(self.cpl_tr)
local tr = self.tr
for i=0,15 do
if (tr[i] ~= nil) palt(i, tr[i])
end
end
function palette:do_both(p)
self:do_palt()
self:do_pal(p)
end
function palette:compile_palt()
self.cpl_tr = nil
local bits, tr = 0, self.tr
for i = 0,15 do
if (tr[i] == nil) return
bits <<= 1
if (tr[i]) bits += 1
end
self.cpl_tr = bits
return bits
end
-->8
-- load palettes
function load_box_palette(sidx)
local sint,sfrac=sidx\1,sidx%1
local x0,y0=sint%16*8,sint\16*8+sfrac*8\1
local cols,tr={},{}
for i=0,15 do
local x,y=x0+i%4,y0+i\4
local c,f= sget(x,y),sget(x+4,y)
if (f&0x1 ~= 0) c += 128
if (f&0x2 ~= 0) tr[i]=true
if (f&0x4 ~= 0) tr[i]=false
if (f&0x8 == 0) cols[i] = c
end
local ret=palette.new{cols=cols,tr=tr}
ret:compile_palt()
return ret
end
function load_row_palette(sx, sy)
local cols,tr={},{}
for i=0,15 do
local c,f = sget(sx+i,sy),sget(sx+i,sy+1)
if (f&0x1 ~= 0) c += 128
if (f&0x2 ~= 0) tr[i]=true
if (f&0x4 ~= 0) tr[i]=false
if (f&0x8 == 0) cols[i] = c
end
local ret=palette.new{cols=cols,tr=tr}
ret:compile_palt()
return ret
end
__gfx__
00000000012300000123111101230000012311110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000456700004567111145670440456711110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
0070070089ab000089ab111189ab024089ab11980000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
00077000cdef0000cdef1111cdef0000cdef11990000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
00077000012324440123355501232444012335550000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
00700700456744444567555545674004456755550000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
0000000089ab444489ab555589ab420489ab55ca0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000cdef4444cdef5555cdef4444cdef55ba0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000077700000123242401232424113324240000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
0000000077770000456724244567acacddff24240000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
000000007777000089ab353589ab3535113335350000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
0000000077770000cdef3535cdefbdbdddff35350000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000083425440055242400552424001124240000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
000000001dd54544667724246677acac22ee24240000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
0000000068ba44540055353500553535001135350000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000cac75444667735356677bdbd22ee35350000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
000000000123456789abcdef0123456789abcdef0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000011111111111111110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
000000000124456789abcdef0124456789abcdef0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000244444444444444435555555555555550000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
0000000007777777777777770123456789abcdef0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000024242424353535350000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
0000000008341dd568bacac700556677005566770000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000254445444454544424242424353535350000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
000000000123456789abcdef11dd66ff11dd66ff0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000355555555555555524242424353535350000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000005678bc005678bc0022eeaa0022eeaa0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000244444443555555524242424353535350000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000fedcba98765432100123456789abcdef0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000244444444444444433333333444455550000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
0000000000aabb88441111880123456789abcdef0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000010101010101898944442222555533330000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000000000000000000000000c00000007000000e0000000700000000c0c0c0c07070707e0e0e0e07070707001230123
00000000000000000000000000000000000000000000000000000000c0000000700000000e00000007000000c0000000700000000000000e0000000745674567
00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c00000007e00000007000000089ab89ab
0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0c0c0c0707070700e0e0e0e07070707cdefcdef
00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001230123
00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000045674567
00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000089ab89ab
000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000cdefcdef
5500055500111000002220000033300000444000005550000066600000777000008880000099900000aaa00000bbb00000ccc00000ddd00000eee00000fff000
500055550111000002220000033300000444000005550000066600000777000008880000099900000aaa00000bbb00000ccc00000ddd00000eee00000fff0000
00055555111000002220000033300000444000005550000066600000777000008880000099900000aaa00000bbb00000ccc00000ddd00000eee00000fff00000
500055550111000002220000033300000444000005550000066600000777000008880000099900000aaa00000bbb00000ccc00000ddd00000eee00000fff0000
5500055500111000002220000033300000444000005550000066600000777000008880000099900000aaa00000bbb00000ccc00000ddd00000eee00000fff000
500055550111000002220000033300000444000005550000066600000777000008880000099900000aaa00000bbb00000ccc00000ddd00000eee00000fff0000
00055555111000002220000033300000444000005550000066600000777000008880000099900000aaa00000bbb00000ccc00000ddd00000eee00000fff00000
500055550111000002220000033300000444000005550000066600000777000008880000099900000aaa00000bbb00000ccc00000ddd00000eee00000fff0000
__label__
000ecececec012311110123000001231111000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
000c567000e4567111145670440456711110000000cc00ccc0ccc0c0c000000000000000000000ee00ee0eee0000000000000000000000000000000000000000
000e9ab000c89ab111189ab024089ab11980000000c1c0c1c1c1c1c1c10000000000000000000e011e011e1e1000000000000000000000000000000000000000
000cececececdef1111cdef0000cdef11990000000c1c1cc01ccc1c1c10000000000000000000eee0e100ee01000000000000000000000000000000000000000
000012324440123355501232444012335550000000c1c1c1c0c1c1ccc1000112233000000000001e1e100e1e0000011223300000000000000000000000000000
000456744444567555545674004456755550000000ccc1c1c1c1c1ccc10001122330000000000ee010ee0e1e1000011223300000000000000000000000000000
00089ab444489ab555589ab420489ab55ca000000001110101010101110445566770000000000011000110101004455667700000000000000000000000000000
000cdef4444cdef5555cdef4444cdef55ba000000000000000000000000445566770000000000000000000000004455667700000000000000000000000000000
000077700000123242401232424113324240000000000000000000000008899aabb0000000000000000000000008899aabb00000000000000000000000000000
00077770000456724244567acacddff24240000000000000000000660008899aabb0000000000000000006600008899aabb00000000000000000000000000000
0007777000089ab353589ab353511333535000000000000000000006100ccddeeff000000000000000000061000ccddeeff00000000000000000000000000000
00077770000cdef3535cdefbdbdddff3535000000000000000000006100ccddeeff000000000000000000061000ccddeeff00000000000000000000000000000
00008342544005524240055242400112424000000000000000000006100000000000000000000000000000610000000000000000000000000000000000000000
0001dd54544667724246677acac22ee2424000000000000000000066600000000000000000000000000006660000000000000000000000000000000000000000
00068ba4454005535350055353500113535000000000000000000001110000000000000000000000000000111000000000000000000000000000000000000000
000cac75444667735356677bdbd22ee3535000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
000000000550000000111000022200003330000444000055500006660000777000088800009990000aaa0000bbb0000ccc0000ddd0000eee0000fff001230123
00000000050005000111000022200003330000444000055500006660000777000088800009990000aaa0000bbb0000ccc0000ddd0000eee0000fff0045674567
0000000000005500111000022200003330000444000055500006660000777000088800009990000aaa0000bbb0000ccc0000ddd0000eee0000fff00089ab89ab
00000000050005000111000022200003330000444000055500006660000777000088800009990000aaa0000bbb0000ccc0000ddd0000eee0000fff00cdefcdef
000000000550000000111000022200003330000444000055500006660000777000088800009990000aaa0000bbb0000ccc0000ddd0000eee0000fff001230123
00000000050005000111000022200003330000444000055500006660000777000088800009990000aaa0000bbb0000ccc0000ddd0000eee0000fff0045674567
1111111111115511111111122211113331111444111155511116661111777111188811119991111aaa1111bbb1111ccc1111ddd1111eee1111fff11189ab89ab
11111111151115111111111122211113331111444111155511116661111777111188811119991111aaa1111bbb1111ccc1111ddd1111eee1111fff11cdefcdef
111111111551111111111111122211113331111444111155511116661111777111188811119991111aaa1111bbb1111ccc1111ddd1111eee1111fff111231123
11111111151115111111111122211113331111444111155511116661111777111188811119991111aaa1111bbb1111ccc1111ddd1111eee1111fff1145674567
1111111111115511111111122211113331111444111155511116661111777111188811119991111aaa1111bbb1111ccc1111ddd1111eee1111fff11189ab89ab
11111111151115111111111122211113331111444111155511116661111777111188811119991111aaa1111bbb1111ccc1111ddd1111eee1111fff11cdefcdef
222222222552222222111222222222223332222444222255522226662222777222288822229992222aaa2222bbb2222ccc2222ddd2222eee2222fff221232123
22222222252225222111222222222223332222444222255522226662222777222288822229992222aaa2222bbb2222ccc2222ddd2222eee2222fff2245674567
2222222222225522111222222222223332222444222255522226662222777222288822229992222aaa2222bbb2222ccc2222ddd2222eee2222fff22289ab89ab
22222222252225222111222222222223332222444222255522226662222777222288822229992222aaa2222bbb2222ccc2222ddd2222eee2222fff22cdefcdef
222222222552222222111222222222223332222444222255522226662222777222288822229992222aaa2222bbb2222ccc2222ddd2222eee2222fff221232123
22222222252225222111222222222223332222444222255522226662222777222288822229992222aaa2222bbb2222ccc2222ddd2222eee2222fff2245674567
3333333333335533111333322233333333333444333355533336663333777333388833339993333aaa3333bbb3333ccc3333ddd3333eee3333fff33389ab89ab
33333333353335333111333322233333333333444333355533336663333777333388833339993333aaa3333bbb3333ccc3333ddd3333eee3333fff33cdefcdef
333333333553333333111333322233333333333444333355533336663333777333388833339993333aaa3333bbb3333ccc3333ddd3333eee3333fff331233123
33333333353335333111333322233333333333444333355533336663333777333388833339993333aaa3333bbb3333ccc3333ddd3333eee3333fff3345674567
3333333333335533111333322233333333333444333355533336663333777333388833339993333aaa3333bbb3333ccc3333ddd3333eee3333fff33389ab89ab
33333333353335333111333322233333333333444333355533336663333777333388833339993333aaa3333bbb3333ccc3333ddd3333eee3333fff33cdefcdef
444444444554444444111444422244443334444444444455544446664444777444488844449994444aaa4444bbb4444ccc4444ddd4444eee4444fff441234123
44444444454445444111444422244443334444444444455544446664444777444488844449994444aaa4444bbb4444ccc4444ddd4444eee4444fff4445674567
4444444444445544111444422244443334444444444455544446664444777444488844449994444aaa4444bbb4444ccc4444ddd4444eee4444fff44489ab89ab
44444444454445444111444422244443334444444444455544446664444777444488844449994444aaa4444bbb4444ccc4444ddd4444eee4444fff44cdefcdef
444444444554444444111444422244443334444444444455544446664444777444488844449994444aaa4444bbb4444ccc4444ddd4444eee4444fff441234123
44444444454445444111444422244443334444444444455544446664444777444488844449994444aaa4444bbb4444ccc4444ddd4444eee4444fff4445674567
5555555555555555111555522255553335555444555555555556665555777555588855559995555aaa5555bbb5555ccc5555ddd5555eee5555fff55589ab89ab
55555555555555555111555522255553335555444555555555556665555777555588855559995555aaa5555bbb5555ccc5555ddd5555eee5555fff55cdefcdef
555555555555555555111555522255553335555444555555555556665555777555588855559995555aaa5555bbb5555ccc5555ddd5555eee5555fff551235123
55555555555555555111555522255553335555444555555555556665555777555588855559995555aaa5555bbb5555ccc5555ddd5555eee5555fff5545674567
5555555555555555111555522255553335555444555555555556665555777555588855559995555aaa5555bbb5555ccc5555ddd5555eee5555fff55589ab89ab
55555555555555555111555522255553335555444555555555556665555777555588855559995555aaa5555bbb5555ccc5555ddd5555eee5555fff55cdefcdef
666666666556666666111666622266663336666444666655566666666666777666688866669996666aaa6666bbb6666ccc6666ddd6666eee6666fff661236123
66666666656665666111666622266663336666444666655566666666666777666688866669996666aaa6666bbb6666ccc6666ddd6666eee6666fff6645674567
6666666666665566111666622266663336666444666655566666666666777666688866669996666aaa6666bbb6666ccc6666ddd6666eee6666fff66689ab89ab
66666666656665666111666622266663336666444666655566666666666777666688866669996666aaa6666bbb6666ccc6666ddd6666eee6666fff66cdefcdef
666666666556666666111666622266663336666444666655566666666666777666688866669996666aaa6666bbb6666ccc6666ddd6666eee6666fff661236123
66666666656665666111666622266663336666444666655566666666666777666688866669996666aaa6666bbb6666ccc6666ddd6666eee6666fff6645674567
7777777777775577111777722277773337777444777755577776667777777777788877779997777aaa7777bbb7777ccc7777ddd7777eee7777fff77789ab89ab
77777777757775777111777722277773337777444777755577776667777777777788877779997777aaa7777bbb7777ccc7777ddd7777eee7777fff77cdefcdef
777777777557777777111777722277773337777444777755577776667777777777788877779997777aaa7777bbb7777ccc7777ddd7777eee7777fff771237123
77777777757775777111777722277773337777444777755577776667777777777788877779997777aaa7777bbb7777ccc7777ddd7777eee7777fff7745674567
7777777777775577111777722277773337777444777755577776667777777777788877779997777aaa7777bbb7777ccc7777ddd7777eee7777fff77789ab89ab
77777777757775777111777722277773337777444777755577776667777777777788877779997777aaa7777bbb7777ccc7777ddd7777eee7777fff77cdefcdef
888888888558888888111888822288883338888444888855588886668888777888888888889998888aaa8888bbb8888ccc8888ddd8888eee8888fff881238123
88888888858885888111888822288883338888444888855588886668888777888888888889998888aaa8888bbb8888ccc8888ddd8888eee8888fff8845674567
8888888888885588111888822288883338888444888855588886668888777888888888889998888aaa8888bbb8888ccc8888ddd8888eee8888fff88889ab89ab
88888888858885888111888822288883338888444888855588886668888777888888888889998888aaa8888bbb8888ccc8888ddd8888eee8888fff88cdefcdef
888888888558888888111888822288883338888444888855588886668888777888888888889998888aaa8888bbb8888ccc8888ddd8888eee8888fff881238123
88888888858885888111888822288883338888444888855588886668888777888888888889998888aaa8888bbb8888ccc8888ddd8888eee8888fff8845674567
9999999999995599111999922299993339999444999955599996669999777999988899999999999aaa9999bbb9999ccc9999ddd9999eee9999fff99989ab89ab
99999999959995999111999922299993339999444999955599996669999777999988899999999999aaa9999bbb9999ccc9999ddd9999eee9999fff99cdefcdef
999999999559999999111999922299993339999444999955599996669999777999988899999999999aaa9999bbb9999ccc9999ddd9999eee9999fff991239123
99999999959995999111999922299993339999444999955599996669999777999988899999999999aaa9999bbb9999ccc9999ddd9999eee9999fff9945674567
9999999999995599111999922299993339999444999955599996669999777999988899999999999aaa9999bbb9999ccc9999ddd9999eee9999fff99989ab89ab
99999999959995999111999922299993339999444999955599996669999777999988899999999999aaa9999bbb9999ccc9999ddd9999eee9999fff99cdefcdef
aaaaaaaaa55aaaaaaa111aaaa222aaaa333aaaa444aaaa555aaaa666aaaa777aaaa888aaaa999aaaaaaaaaaabbbaaaacccaaaadddaaaaeeeaaaafffaa123a123
aaaaaaaaa5aaa5aaa111aaaa222aaaa333aaaa444aaaa555aaaa666aaaa777aaaa888aaaa999aaaaaaaaaaabbbaaaacccaaaadddaaaaeeeaaaafffaa45674567
aaaaaaaaaaaa55aa111aaaa222aaaa333aaaa444aaaa555aaaa666aaaa777aaaa888aaaa999aaaaaaaaaaabbbaaaacccaaaadddaaaaeeeaaaafffaaa89ab89ab
aaaaaaaaa5aaa5aaa111aaaa222aaaa333aaaa444aaaa555aaaa666aaaa777aaaa888aaaa999aaaaaaaaaaabbbaaaacccaaaadddaaaaeeeaaaafffaacdefcdef
aaaaaaaaa55aaaaaaa111aaaa222aaaa333aaaa444aaaa555aaaa666aaaa777aaaa888aaaa999aaaaaaaaaaabbbaaaacccaaaadddaaaaeeeaaaafffaa123a123
aaaaaaaaa5aaa5aaa111aaaa222aaaa333aaaa444aaaa555aaaa666aaaa777aaaa888aaaa999aaaaaaaaaaabbbaaaacccaaaadddaaaaeeeaaaafffaa45674567
bbbbbbbbbbbb55bb111bbbb222bbbb333bbbb444bbbb555bbbb666bbbb777bbbb888bbbb999bbbbaaabbbbbbbbbbbcccbbbbdddbbbbeeebbbbfffbbb89ab89ab
bbbbbbbbb5bbb5bbb111bbbb222bbbb333bbbb444bbbb555bbbb666bbbb777bbbb888bbbb999bbbbaaabbbbbbbbbbbcccbbbbdddbbbbeeebbbbfffbbcdefcdef
bbbbbbbbb55bbbbbbb111bbbb222bbbb333bbbb444bbbb555bbbb666bbbb777bbbb888bbbb999bbbbaaabbbbbbbbbbbcccbbbbdddbbbbeeebbbbfffbb123b123
bbbbbbbbb5bbb5bbb111bbbb222bbbb333bbbb444bbbb555bbbb666bbbb777bbbb888bbbb999bbbbaaabbbbbbbbbbbcccbbbbdddbbbbeeebbbbfffbb45674567
bbbbbbbbbbbb55bb111bbbb222bbbb333bbbb444bbbb555bbbb666bbbb777bbbb888bbbb999bbbbaaabbbbbbbbbbbcccbbbbdddbbbbeeebbbbfffbbb89ab89ab
bbbbbbbbb5bbb5bbb111bbbb222bbbb333bbbb444bbbb555bbbb666bbbb777bbbb888bbbb999bbbbaaabbbbbbbbbbbcccbbbbdddbbbbeeebbbbfffbbcdefcdef
ccccccccc55ccccccc111cccc222cccc333cccc444cccc555cccc666cccc777cccc888cccc999ccccaaaccccbbbcccccccccccdddcccceeeccccfffcc123c123
ccccccccc5ccc5ccc111cccc222cccc333cccc444cccc555cccc666cccc777cccc888cccc999ccccaaaccccbbbcccccccccccdddcccceeeccccfffcc45674567
cccccccccccc55cc111cccc222cccc333cccc444cccc555cccc666cccc777cccc888cccc999ccccaaaccccbbbcccccccccccdddcccceeeccccfffccc89ab89ab
ccccccccc5ccc5ccc111cccc222cccc333cccc444cccc555cccc666cccc777cccc888cccc999ccccaaaccccbbbcccccccccccdddcccceeeccccfffcccdefcdef
ccccccccc55ccccccc111cccc222cccc333cccc444cccc555cccc666cccc777cccc888cccc999ccccaaaccccbbbcccccccccccdddcccceeeccccfffcc123c123
ccccccccc5ccc5ccc111cccc222cccc333cccc444cccc555cccc666cccc777cccc888cccc999ccccaaaccccbbbcccccccccccdddcccceeeccccfffcc45674567
dddddddddddd55dd111dddd222dddd333dddd444dddd555dddd666dddd777dddd888dddd999ddddaaaddddbbbddddcccdddddddddddeeeddddfffddd89ab89ab
ddddddddd5ddd5ddd111dddd222dddd333dddd444dddd555dddd666dddd777dddd888dddd999ddddaaaddddbbbddddcccdddddddddddeeeddddfffddcdefcdef
ddddddddd55ddddddd111dddd222dddd333dddd444dddd555dddd666dddd777dddd888dddd999ddddaaaddddbbbddddcccdddddddddddeeeddddfffdd123d123
ddddddddd5ddd5ddd111dddd222dddd333dddd444dddd555dddd666dddd777dddd888dddd999ddddaaaddddbbbddddcccdddddddddddeeeddddfffdd45674567
dddddddddddd55dd111dddd222dddd333dddd444dddd555dddd666dddd777dddd888dddd999ddddaaaddddbbbddddcccdddddddddddeeeddddfffddd89ab89ab
ddddddddd5ddd5ddd111dddd222dddd333dddd444dddd555dddd666dddd777dddd888dddd999ddddaaaddddbbbddddcccdddddddddddeeeddddfffddcdefcdef
eeeeeeeee55eeeeeee111eeee222eeee333eeee444eeee555eeee666eeee777eeee888eeee999eeeeaaaeeeebbbeeeeccceeeedddeeeeeeeeeeefffee123e123
eeeeeeeee5eee5eee111eeee222eeee333eeee444eeee555eeee666eeee777eeee888eeee999eeeeaaaeeeebbbeeeeccceeeedddeeeeeeeeeeefffee45674567
eeeeeeeeeeee55ee111eeee222eeee333eeee444eeee555eeee666eeee777eeee888eeee999eeeeaaaeeeebbbeeeeccceeeedddeeeeeeeeeeefffeee89ab89ab
eeeeeeeee5eee5eee111eeee222eeee333eeee444eeee555eeee666eeee777eeee888eeee999eeeeaaaeeeebbbeeeeccceeeedddeeeeeeeeeeefffeecdefcdef
eeeeeeeee55eeeeeee111eeee222eeee333eeee444eeee555eeee666eeee777eeee888eeee999eeeeaaaeeeebbbeeeeccceeeedddeeeeeeeeeeefffee123e123
eeeeeeeee5eee5eee111eeee222eeee333eeee444eeee555eeee666eeee777eeee888eeee999eeeeaaaeeeebbbeeeeccceeeedddeeeeeeeeeeefffee45674567
ffffffffffff55ff111ffff222ffff333ffff444ffff555ffff666ffff777ffff888ffff999ffffaaaffffbbbffffcccffffdddffffeeeffffffffff89ab89ab
fffffffff5fff5fff111ffff222ffff333ffff444ffff555ffff666ffff777ffff888ffff999ffffaaaffffbbbffffcccffffdddffffeeefffffffffcdefcdef
fffffffff55fffffff111ffff222ffff333ffff444ffff555ffff666ffff777ffff888ffff999ffffaaaffffbbbffffcccffffdddffffeeefffffffff123f123
fffffffff5fff5fff111ffff222ffff333ffff444ffff555ffff666ffff777ffff888ffff999ffffaaaffffbbbffffcccffffdddffffeeefffffffff45674567
ffffffffffff55ff111ffff222ffff333ffff444ffff555ffff666ffff777ffff888ffff999ffffaaaffffbbbffffcccffffdddffffeeeffffffffff89ab89ab
fffffffff5fff5fff111ffff222ffff333ffff444ffff555ffff666ffff777ffff888ffff999ffffaaaffffbbbffffcccffffdddffffeeefffffffffcdefcdef
000000000550000000111000022200003330000444000055500006660000777000088800009990000aaa0000bbb0000ccc0000ddd0000eee0000fff001230123
00000000050005000111000022200003330000444000055500006660000777000088800009990000aaa0000bbb0000ccc0000ddd0000eee0000fff0045674567
0000000000005500111000022200003330000444000055500006660000777000088800009990000aaa0000bbb0000ccc0000ddd0000eee0000fff00089ab89ab
00000000050005000111000022200003330000444000055500006660000777000088800009990000aaa0000bbb0000ccc0000ddd0000eee0000fff00cdefcdef
000000000550000000111000022200003330000444000055500006660000777000088800009990000aaa0000bbb0000ccc0000ddd0000eee0000fff001230123
00000000050005000111000022200003330000444000055500006660000777000088800009990000aaa0000bbb0000ccc0000ddd0000eee0000fff0045674567
0000000000005500111000022200003330000444000055500006660000777000088800009990000aaa0000bbb0000ccc0000ddd0000eee0000fff00089ab89ab
00000000050005000111000022200003330000444000055500006660000777000088800009990000aaa0000bbb0000ccc0000ddd0000eee0000fff00cdefcdef
000000000550000000111000022200003330000444000055500006660000777000088800009990000aaa0000bbb0000ccc0000ddd0000eee0000fff001230123
00000000050005000111000022200003330000444000055500006660000777000088800009990000aaa0000bbb0000ccc0000ddd0000eee0000fff0045674567
0000000000005500111000022200003330000444000055500006660000777000088800009990000aaa0000bbb0000ccc0000ddd0000eee0000fff00089ab89ab
00000000050005000111000022200003330000444000055500006660000777000088800009990000aaa0000bbb0000ccc0000ddd0000eee0000fff00cdefcdef
000000000550000000111000022200003330000444000055500006660000777000088800009990000aaa0000bbb0000ccc0000ddd0000eee0000fff001230123
00000000050005000111000022200003330000444000055500006660000777000088800009990000aaa0000bbb0000ccc0000ddd0000eee0000fff0045674567
0000000000005500111000022200003330000444000055500006660000777000088800009990000aaa0000bbb0000ccc0000ddd0000eee0000fff00089ab89ab
00000000050005000111000022200003330000444000055500006660000777000088800009990000aaa0000bbb0000ccc0000ddd0000eee0000fff00cdefcdef