pico-8 cartridge // http://www.pico-8.com version 41 __lua__ -- function _init() start_scene("title") end function _update() if _scene and _scene.update then _scene.update() end end function _draw() if _scene and _scene.draw then _scene.draw() end end function start_scene(name) _scene = _scenes[name] _scene_start = time() if _scene.start then _scene.start() end end function scene_time() return time() - _scene_start end _scene = nil _scenes = {} _scene_start = 0 function draw_title() cls() print("title " .. scene_time()) end function update_title() if scene_time() > 0 then start_scene("ocean") end end _scenes.title = {start=nil, draw=draw_title, update=update_title} function start_ocean() -- DEBUG new_x = 0 new_y = 0 blocked = false end function draw_ocean() cls(12) local ocean_anim = {[0]=0, 0, 1, 2, 3, 4, 0, 0, 0, 0, 0, 0, 0} local wind_x = headings[wind_heading].dx local wind_y = headings[wind_heading].dy if wind_x ~= 0 or wind_y ~= 0 then for x=0,15 do for y=0,15 do local anim = ocean_anim[(flr(time()*4) - wind_y*y - wind_x*x) % #ocean_anim] local base = 0 if wind_y ~= 0 then base = 5 end if anim > 0 then spr(base+anim, 8*x, 8*y, 1, 1, wind_x < 0, wind_y < 0) end end end end if player_y < 8 then rectfill(0, 0, 128, 8*(8-player_y), 7) elseif player_y > 56 then rectfill(0, 128-8*(player_y-56), 128, 128, 7) end map(player_x-8, player_y-8, 0, 0, 16, 16) draw_ship(player_ship, player_heading, 64, 64) -- DEBUG new_x, new_y local cc = 7 if blocked then cc = 8 end -- IN PROGRESS: figure out how to check right tile -- rect((new_x-8)*8, (new_y-player_y-8)*8, (new_x-player_x)*8+8, (new_y-player_y)*8+8, cc) -- hud rectfill(0, 110, 128, 128, 15) --pal(4, 132) -- leather rect(0, 110, 127, 127, 4) -- for x=0,128,16 do -- line(x, 110, x, 127, 4) -- end palt(0, false) palt(1, true) local icon_y = 118 local text_y = 112 -- compass print(headings[player_heading].name, 6, text_y, 4) spr(73, 5, icon_y) -- bird print(headings[wind_heading].name.." "..wind_speed.." knots", 20, text_y, 4) spr(74, 19, icon_y) -- sextant print(player_x..","..player_y, 60, text_y, 4) spr(76, 60, icon_y) -- cannon print("3/3", 90, text_y, 4) spr(77, 90, icon_y) palt() --spr_r(9, 4, 120, 120, 1, 1, false, false, 4, 4, headings[player_heading].angle, 1) --function spr_r(i, j, x, y, w, h, flip_x, flip_y, pivot_x, pivot_y, angle, transparent_color) end function update_ocean() if btnp(0) then player_heading = (player_heading - 1) % 8 elseif btnp(1) then player_heading = (player_heading + 1) % 8 end -- DEBUG: make these local again new_x = (player_x + headings[player_heading].dx) % 128 new_y = player_y + headings[player_heading].dy blocked = fget(mget(new_x, new_y), 0) if t() - last_move_time > player_ship.speed then last_move_time = t() if not blocked then player_x = new_x player_y = new_y end end end _scenes.ocean = {start=start_ocean, draw=draw_ocean, update=update_ocean} function draw_ship(ship, heading, x, y) spr_r(ship.i, ship.j, x-ship.w*4, y-ship.h*4, 1, ship.h, false, false, ship.w*4, ship.h*4, headings[heading].angle, 0) if ship.w > 1 then spr_r(ship.i, ship.j, x-ship.w*4, y-ship.h*4, 1, ship.h, true, false, ship.w*4, ship.h*4, headings[heading].angle, 0) end end -- globals headings = { [0]={angle=0, dx=0, dy=-1, name="n"}, {angle=0.875, dx=1, dy=-1, name="ne"}, {angle=0.75, dx=1, dy=0, name="e"}, {angle=0.625, dx=1, dy=1, name="se"}, {angle=0.5, dx=0, dy=1, name="s"}, {angle=0.375, dx=-1, dy=1, name="sw"}, {angle=0.25, dx=-1, dy=0, name="w"}, {angle=0.125, dx=-1, dy=-1, name="nw"}, } ship_type = { small={i=0, j=4, w=1, h=1, speed=1}, medium={i=1, j=4, w=1, h=2, speed=0.6}, large={i=2, j=4, w=2, h=2, speed=0.4}, ghost={i=3, j=4, w=2, h=3} } player_ship = ship_type.medium player_x = 10 player_y = 60 player_heading = 0 last_move_time = 0 wind_heading = 0 wind_speed = 0 -- external utils -- via https://www.lexaloffle.com/bbs/?pid=52525 function spr_r(i, j, x, y, w, h, flip_x, flip_y, pivot_x, pivot_y, angle, transparent_color) -- precompute pixel values from tile indices: sprite source top-left, sprite size local sx = 8 * i local sy = 8 * j local sw = 8 * w local sh = 8 * h -- precompute angle trigonometry local sa = sin(angle) local ca = cos(angle) -- in the operations below, 0.5 offsets represent pixel "inside" -- we let PICO-8 functions floor coordinates at the last moment for more symmetrical results -- precompute "target disc": where we must draw pixels of the rotated sprite (relative to (x, y)) -- the target disc ratio is the distance between the pivot the farthest corner of the sprite rectangle local max_dx = max(pivot_x, sw - pivot_x) - 0.5 local max_dy = max(pivot_y, sh - pivot_y) - 0.5 local max_sqr_dist = max_dx * max_dx + max_dy * max_dy local max_dist_minus_half = ceil(sqrt(max_sqr_dist)) - 0.5 -- iterate over disc's bounding box, then check if pixel is really in disc for dx = - max_dist_minus_half, max_dist_minus_half do for dy = - max_dist_minus_half, max_dist_minus_half do if dx * dx + dy * dy <= max_sqr_dist then -- prepare flip factors local sign_x = flip_x and -1 or 1 local sign_y = flip_y and -1 or 1 local xx = pivot_x + sign_x * ( ca * dx + sa * dy) local yy = pivot_y + sign_y * (-sa * dx + ca * dy) -- make sure to never draw pixels from the spritesheet -- that are outside the source sprite if xx >= 0 and xx < sw and yy >= 0 and yy < sh then -- get source pixel local c = sget(sx + xx, sy + yy) -- ignore if transparent color if c ~= transparent_color then -- set target pixel color to source pixel color pset(x + dx, y + dy, c) end end end end end end __gfx__ ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc7cccccccccc7ccc333333333333333333333333555555555555555555555555 ccccccccc7ccccccccc7ccccccccc7ccccccccc7ccccccccccccccccccccc7cccccccccccccccccc333333333333333333333333555555555595555555555555 ccccccccccccccccccccccccccccccccccccccccccccccccccccccccc7cccccccccc7ccccccccccc33a3333333a3338333333383555555555555555555555555 ccccccccccccccccccccccccccccccccccccccccccccccccccccc7cccccccccccccccccccccccccc333333333333333333333333555555555559559555555555 cccccccccc7cccccccccc7ccccccccc7ccccccccccccccccc7cccccccccccccccccccccccccccccc333333333333333333333333555555555555555555559555 ccccccccccccccccccccccccccccccccccccccccccccc7cccccccccccccc7ccccccccccccccccccc33a3333333a3383333833333555555555555555555955555 ccccccccc7ccccccccc7cccccccccc7cccccccccc7ccccccccc7cccccccccccccccccccccccccccc333333333333333333333333559555555555559555559555 cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc333333333333333333333333555555555555555555555555 cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc67777776cccccccc33333333cccccccccccccccccccccccccccc ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc6777777776cccccc3333333333ccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc677777777776cccc333333333333ccccccccccccccccccc4444444 ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc67777777777776cc33333333333333cccccccccccccccccc4444444 cccccccffffffffffcccccccccccccc3333333333cccccccccccccc6666666666ccccccc67777777777777763333333333333333ccccccccccccccccc4444444 ccccccffffffffffffcccccccccccc333333333333cccccccccccc677777777776cccccc77777777777777773333333333333333ccccccccccccccccc4004004 cccccffffffffffffffcccccccccc33333333333333cccccccccc67777777777776ccccc77777777777777773333333333333333cccccccccccccccccccccccc ccccffffffffffffffffcccccccc3333333333333333cccccccc6777777777777776cccc77777777777777773333333333333333cccccccccccccccccccccccc ccccffffffffffffffffcccccccc3333333333333333cccccccc6777777777777776cccc77777777777777773333333333333333cccccccccccccccccc4444cc ccccffffffffffffffffcccccccc3333333333333333cccccccc6777777777777776cccc77777777777777773333333333333333cccccccccccccccccc4440cc ccccffffffffffffffffcccccccc3333333333333333cccccccc6777777777777776cccc77777777777777773333333333333333cccccccccccccccccc4440cc ccccffffffffffffffffcccccccc3333333333333333cccccccc6777777777777776cccc67777777777777763333333333333333cccccccccccccccccc4444cc ccccffffffffffffffffcccccccc3333333333333333cccccccc6777777777777776ccccc67777777777776cc33333333333333ccccccccccccccccccc4440cc ccccffffffffffffffffcccccccc3333333333333333cccccccc6777777777777776cccccc677777777776cccc333333333333cccccccccccccccccccc4440cc ccccffffffffffffffffcccccccc3333333333333333cccccccc6777777777777776ccccccc6777777776cccccc3333333333ccccccccccccccccccccc4444cc ccccffffffffffffffffcccccccc3333333333333333cccccccc6777777777777776cccccccc67777776cccccccc33333333cccccccccccccccccccccccccccc ccccffffffffffffffffcccccccc3333333333333333cccccccc6777777777777776cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccffffffffffffffcccccccccc33333333333333cccccccccc67777777777776ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc ccccccffffffffffffcccccccccccc333333333333cccccccccccc677777777776cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccffffffffffcccccccccccccc3333333333cccccccccccccc6666666666ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc 00000000000440000000000400000005000000000000000000000000000000000000000011555511111111111111119111149111111110010000000000000000 00000000004444000000004400000055000000000000000000000000000000000000000015668651111177711111144911149111111100000000000000000000 00044000004444000000044400000556000000000000000000000000000000000000000056688665117770711111994111999911111990000000000000000000 004ff400044ff440000044ff00000566000000000000000000000000000000000000000056688665117777991114491119149191110009010000000000000000 004ff40004f44f4000004fff00005566000000000000000000000000000000000000000056677665777777711999411191149991199009110000000000000000 004ff40004f44f400077777400005566000000000000000000000000000000000000000056677665177777719669111191149119004441110000000000000000 0044440004f44f400004466700005566000000000000000000000000000000000000000015676651111171119669111119149191004941110000000000000000 000000007777777700044ff507777775000000000000000000000000000000000000000011555511111151111991111111999911104441110000000000000000 00000000077777700777777400077777000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000046556400077777700055566000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000004f55f400004566500055565000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000004f44f4000044fff07777775000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000004f44f4000044fff00077777000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000044ff440000044ff00055566000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000004444000000444f00055566000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000440000000044400055566000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000077777775000000000000000011111111111111111111111111111111111111110000000000000000000000000000000000000000 0000000000000000000000000077777700000000000000000077770077777777aaaaaaaa3333333322d22dd20000000000000000000000000000000000000000 0000000000000000000000000005556600000000000000000077770099999999aa8aa8aa333333332dd22d220000000000000000000000000000000000000000 0000000000000000000000000000556600000000000000000007700077977977aaa88aaacccccccc22d22dd20000000000000000000000000000000000000000 0000000000000000000000000000556600000000000000000070070077977977aaa88aaacccccccc2dd22d220000000000000000000000000000000000000000 0000000000000000000000000000055500000000000000000007700099999999aa8aa8aa3333333322d22dd20000000000000000000000000000000000000000 0000000000000000000000000000005500000000000000000070070077777777aaaaaaaa333333332dd22d220000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000011111111111111111111111111111111111111110000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 00000042424200000000000000424200000000000000424242000000000000004242420000000000004242420000000000000000000000000000000000001200 12121212121212120000120012120012121212001242420000121242000000121212121200424212121212124242424200000000000000000000000000000000 00000000000000000000000042424200000000000000000000000000000000000000000000000000004200000000000000000000000000000000000000000000 00001212121212000000420012420000000000000000000000000000000000121212124200121212424242421212121200000000000000000012120000000000 00000000000000000000004242424200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 00001212121212000000120000000012121242000000000000000000000000121212121200121212121242000000000000000000000000001212120012000000 00000000000000000000424242424200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000121212000000000000000000000000000000424242424200000000000000000000121212121212000000000000000000000000001212121200000000 00000000000000000000424242000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000424242424200000000000000000000000000000000000000000000000000000000001212121200000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000004242424200000000000000000000000000000000000000000000000000000000121212120000120000 00000000000000000000000000000000000000000000000000000000000000000042000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000012120000000000 00000000000000000000000000000000000000000042000000000000000000000000424242420000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000004242420000000000000000424200424200424200000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001200120000 00000000000000000000000000000000000000424242424200000000000000004242424200000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000042424242424200000000000000000000004242000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000001212121212121212121212000000000000000000 00000000000000000000000000000000000042424242424200000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000121212000000000012121212121212121212000000000000000000 00000000000000000000000000000000000000424242424200000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000121212000000000000121212121212120000000000000000000000 00000000000000000000000000000000000000424242420000000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000012001200000000000000000000000000000000121212000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000012121212120000000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000012121212120000000000000012121200000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000042424242424200000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000121212120000000000000012121200000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000004242424242424200000000000000000000000000000000000000000000000000000000000000000000000000006171 71810000000000000000000000000000000000121212120000000000000012121200000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000004242424242424200000000000000000000000000000000000000000000000000000000000000000000000000006272 72820000000000000000000000000000000000000012121200000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000004242424242424200000000000000000000000000000000000000000000000000000000000000000000000000006373 73830000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000061717181000000000000 00000000000000000000000000000000000042424242424200000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000062727282000000000000 00000000000000000000000000000000000000004242420000000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000063737383000000000000 00000000000000000000000000000000000000000042000000000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000618161810000000000000000617181f30000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000617171810000000000617171810000000000006171718100 00000000000000000000000000617171810000000000000000000000000000000000628262820000618100000000627282f30000000000000000000000000000 00000000000000000000000000006171718100000000000000000000000000000000000000000000627272820000000000627272820000000000006272728200 00000000000000000000000000627272820000000000000000000000000000000000638363830000628200000000637383f30000000000000000000000000000 00000000000000000000000000006272728200000000000000000000000000617171810000000000637373830000000000637373830000000000006373738300 00000000000000000000000000637373830000000000000000000000000000000000000000000000628200000000000000000000000000000000000000000000 00000000000000000000000000006373738300000000006171718100000000627272820000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000628200000000000000000000000000000000000000000000 00617171810000617171810000000000000000000000006272728200000000637373830000000000000000000000000000617171810000000061717181000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000638300000000000000000000000000000000000000000000 00627272820000627272820000000000000000000000006373738300000000000000000000000000000000000000000000627272820000000062727282000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 00637373830000637373830000000000000000000000000000000000000000000000000000000000000000000000000000637373830000000063737383000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 61717181000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 71717171717171717171717171717171717171717171717171717171717171717171717171717171717171717171717171717171717171717171717171717171 71717171717171717171717171717171717171717171717171717171717171717171717171717171717171717171717171717171717171717171717171717171 __gff__ 0000000000000000000001010101010100010001010101010101010101010101000101000101020301010101010000000001000101010202010100000000000002020202000000000000000000000000020202020000000000000000000000000000020200000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 __map__ 2727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727 37373737373737373737373737373737373737373737373737373737373737373737373737373737373737373737373737373737373737373737373737373737373737373737373737373737373737373737373737292727272727272727272727272a3737373737373737373737373737373737373737373737373737373737 0000000000000000000000000000000000000000000000000000000016171718000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000026272727272727272727272727280000000000000000000000000000000000000000000000000000000000 000000161717171717171718000000000000000000000000000000002627272800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003629272727272727272727272a380000000000000000000000000000000000000000000000000000000000 00000026272727272727271a1718000000000000000000000000000036373738000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000262727272727272727272a38000000000000000000000000000000000000000000000000000000000000 000000363826272727272727272800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000036292727272a373737373800000000000000000000000000000000000000000000000000000000000000 000000000026272727272727271a180000000000000000001617171800000000161717180000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003629272728000000000000000000000000000000000000000000000000000000000000000000000000 0000000000262727272727272727280000000000000000002627272800000000262727280000000000000000000000000000000000000000000000000000000000000027272727270000000000000000000000000000000026272728000000000000000000000000000000000000000000000000000000000000000000000000 000000000036372927272a37292a380000000000000000003637373800000000363737380000000000000000000000000000000000000000000000000000000000000027272727270000000000000000000000000000000026272a38000000000000000000000000270000270000270000000000000000000000000000000000 0000000000000026272728000000000000000000000000001617171800000000000000000000000000000000000000000000000000000000000000000000000000000027272727270000000000000000000000000000000036373800000000000000000000000027270027270000270000000000000000000000000000000000 0000000000000026272728000000000000000000000000002627272800000000001617171800000000000000000000000000000000000000000000000000000000000000272700000000000000000000000000000000000000000000000000000000000000272727000027000027270000000000000000000000000000000000 0000000000000026272728000000000000000000000000003637373800000000002627272800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000270000002727000027000000000000000000000000000000000000 0000000000000036373738000000000000000000000000000000000000000000003637373800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000270000002700000027000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000027270000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000027272727000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000027272727270000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000272727272700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000027272727000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000272727000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000240000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000242400000000000000000000000000000000000000000000000000000000000000 0000000000000024242400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000242424240000000000000000000000000000000000000000000000000000000000 0000000000002424242400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000242424242400240000000000000000000000000000000000000000000000000000 0000000000002424242400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000242424242400242424242424000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000242424242400242424242424242400000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000242424242424242424242400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000242424242400242424242424242424000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000002424242424242424242424242424242424242424000000000000000000000000000000000000000000000000000000000000000000000000000021210021210000000000242424242400242424242424242424000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000024242424242424242424242424242424242424242424242424000000000000000000000000000000000000212121000000000000000000000000000000000000000021000000000000242400242424242424242424000000000000000000000000000000000000 0000000000000000000000000000000000000000000000002424242424242424002400000000000000000000000000000000000000000000000000000000000000212121212121000000000000000000000000000000000000000000210000212121212400242424242424242424240000000000000000000000000000000000 0000002424240000000000000000000000000000000000002424242424240000000000000000000000000000000000000000000000000000000000000000000000212121212121210021000021210000000000002121000021000000000000242424242100212424242424242424242400000000000000000000000000000000 0000002424242400000000000000000000000000000000002424242400000000002400000000000024242424000000000000000000000000000000000000000000212121212121210021210021212100212100002121210021212121210000242121212100212121242124242424242424240000000000000000000000000000