-- title: rummy -- author: geemili -- desc: The card game Rummy, for TIC-80 -- site: website link -- license: MIT License -- version: 0.1 -- script: lua -- stack of cards that cards are drawn from draw_pile=nil discard_pile=nil cards_in_hand=nil -- List of cards that have been added to a meld, but are not yet placed on the tabletop. May be too -- few cards for a meld. Should be verified before adding it to the list of melds on the tabletop. cards_in_meld_draft=nil melds_on_tabletop=nil -- `points_of_interest` is an array of things that can be hovered/selected by the controller current_page=nil hovered=nil current_handler=nil function BOOT() draw_pile = create_deck() draw_pile:shuffle() cards_in_hand = draw_pile:draw_stack(10) cards_in_hand:sort(rummy_hand_sort_comparison) cards_in_meld_draft=CardStack:new() discard_pile = draw_pile:draw_stack(1) current_handler=handler_draw_card melds_on_tabletop={} end function TIC() local c_sel=btnp(5) local request=nil if c_sel and hovered then request=hovered.action current_page=nil end while not current_page do trace(current_handler) trace(request) local response=current_handler(request) if response.redirect then current_handler=response.redirect request=nil elseif response.page then current_page=response.page else cls(12) print("Invalid response!") for key,val in pairs(response) do trace("key="..key) trace("val="..val) end return nil end end local actions = get_actions_from_page(current_page) if not hovered and #actions>0 then hovered=actions[1] end local c_up=btnp(0,10,3) local c_down=btnp(1,10,3) local c_left=btnp(2,10,3) local c_right=btnp(3,10,3) local c_back=btnp(4) -- update hovered action local moved = c_up or c_down or c_left or c_right if moved and #actions > 0 then local start=hovered or {x=0,y=0,action=nil} local dir={0, 0} if c_left then dir[1]=dir[1] - 1 end if c_right then dir[1]=dir[1] + 1 end if c_up then dir[2]=dir[2] - 1 end if c_down then dir[2]=dir[2] + 1 end local nearest=nil for i,action in ipairs(actions) do if hovered and action.action==hovered.action then -- pass elseif not nearest then local distance=distance_to_point_of_interest(start,dir,action) if distance>0 then nearest=action end else local distance=distance_to_point_of_interest(start,dir,action) if distance>0 and distance0 then local meld_with_draft=meld:with(draft) if rummy_is_valid_meld(meld_with_draft) then meld_action=meld end end for i,card in ipairs(meld) do table.insert(elements, { visual=card, x=meld_x, y=meld_y, action=meld_action, }) meld_x=meld_x + 8 end meld_x=meld_x + 28 end table.insert(elements, { visual="New\nMeld", textx=meld_x, texty=meld_y+7, x=meld_x, y=meld_y, action=((new_meld_allowed and rummy_is_valid_meld(draft)) and "New\nMeld" or nil), action_x=meld_x, action_y=meld_y, }) end function build_draw_discard_ui(elements, options) local discard_x=((240 - 24) / 2) local discard_y=80 local draw_pile_x=discard_x - 24 - 4 local end_turn_x=discard_x + 24 + 4 -- render draw pile for i,card in ipairs(draw_pile) do if i==#draw_pile and options.is_drawing then table.insert(elements, { visual=card, x=draw_pile_x, y=discard_y + (i - 1) * -0.25, hidden=true, action=card, }) else table.insert(elements, { visual=card, x=draw_pile_x, y=discard_y + (i - 1) * -0.25, hidden=true, }) end end -- render discard pile for i,card in ipairs(discard_pile) do if i==#discard_pile and options.is_drawing then table.insert(elements, { visual=card, x=discard_x, y=discard_y + (i - 1) * -0.25, action=card, }) else table.insert(elements, { visual=card, x=discard_x, y=discard_y + (i - 1) * -0.25 }) end end table.insert(elements, { visual=(#discard_pile==0 and Card.sprite), x=discard_x, y=discard_y + (#discard_pile - 1) * -0.25, action=options.discard_action, }) table.insert(elements, { visual="End\nTurn", textx=end_turn_x, texty=discard_y + 7, x=end_turn_x, y=discard_y, action=options.end_turn_action, }) end function build_hand_ui(elements, hand, draft, can_select) local hand_start_x=((240 - #cards_in_hand * 12 - 24) / 2) local hand_y=110 for i,card in ipairs(hand) do if can_select then local ty=0 local sel_state = nil if draft:contains(card) then ty = -4 sel_state = 2 end table.insert(elements, { visual=card, x=hand_start_x + (i - 1) * 12, y=hand_y + ty, sel_state=sel_state, action=card, action_y=hand_y, }) else table.insert(elements, { visual=card, x=hand_start_x + (i - 1) * 12, y=hand_y }) end end end function handler_draw_card(action) if draw_pile:contains(action) then table.insert(cards_in_hand, draw_pile:draw()) cards_in_hand:sort(rummy_hand_sort_comparison) hovered = nil return { redirect=handler_player_action } elseif discard_pile:contains(action) then table.insert(cards_in_hand, discard_pile:draw()) cards_in_hand:sort(rummy_hand_sort_comparison) hovered = nil return { redirect=handler_player_action } end local elements={} build_meld_ui(elements, cards_in_meld_draft, false) build_draw_discard_ui(elements, { is_drawing=true }) build_hand_ui(elements, cards_in_hand, cards_in_meld_draft, false) return { page=elements } end function handler_player_action(action) if cards_in_hand:contains(action) then if cards_in_meld_draft:contains(action) then table.remove(cards_in_meld_draft, cards_in_meld_draft:index_of(action)) else table.insert(cards_in_meld_draft, action) cards_in_meld_draft:sort(rummy_hand_sort_comparison) end elseif action=="New\nMeld" then if rummy_is_valid_meld(cards_in_meld_draft) then for i,card in ipairs(cards_in_meld_draft) do table.remove(cards_in_hand, cards_in_hand:index_of(card)) end table.insert(melds_on_tabletop, cards_in_meld_draft) cards_in_meld_draft=CardStack:new() hovered = nil return { redirect=handler_player_secondary_action } end elseif action=="Discard" then if #cards_in_meld_draft==1 then table.remove(cards_in_hand, cards_in_hand:index_of(cards_in_meld_draft[1])) table.insert(discard_pile, cards_in_meld_draft[1]) cards_in_meld_draft=CardStack:new() hovered = nil return { redirect=handler_discard_confirm } end elseif table_index_of(melds_on_tabletop, action) then local meld=point_of_interest.interest local meld_with_draft=meld:with(cards_in_meld_draft) if rummy_is_valid_meld(meld_with_draft) then for i,card in ipairs(cards_in_meld_draft) do table.remove(cards_in_hand, cards_in_hand:index_of(card)) table.insert(meld, card) end meld:sort(rummy_hand_sort_comparison) cards_in_meld_draft=CardStack:new() end end local elements={} build_meld_ui(elements, cards_in_meld_draft, true) build_draw_discard_ui(elements, { discard_action=(#cards_in_meld_draft==1 and "Discard" or nil), }) build_hand_ui(elements, cards_in_hand, cards_in_meld_draft, true) return { page=elements } end function handler_player_secondary_action(action) if cards_in_hand:contains(action) then if cards_in_meld_draft:contains(action) then table.remove(cards_in_meld_draft, cards_in_meld_draft:index_of(action)) else table.insert(cards_in_meld_draft, action) cards_in_meld_draft:sort(rummy_hand_sort_comparison) end elseif action=="Discard" then if #cards_in_meld_draft==1 then table.remove(cards_in_hand, cards_in_hand:index_of(cards_in_meld_draft[1])) table.insert(discard_pile, cards_in_meld_draft[1]) cards_in_meld_draft=CardStack:new() hovered = nil return { redirect=handler_discard_confirm } end elseif table_index_of(melds_on_tabletop, action) then local meld=point_of_interest.interest local meld_with_draft=meld:with(cards_in_meld_draft) if rummy_is_valid_meld(meld_with_draft) then for i,card in ipairs(cards_in_meld_draft) do table.remove(cards_in_hand, cards_in_hand:index_of(card)) table.insert(meld, card) end meld:sort(rummy_hand_sort_comparison) cards_in_meld_draft=CardStack:new() end end local elements={} build_meld_ui(elements, cards_in_meld_draft, false) build_draw_discard_ui(elements, { discard_action=(#cards_in_meld_draft==1 and "Discard" or nil), }) build_hand_ui(elements, cards_in_hand, cards_in_meld_draft, true) return { page=elements } end function handler_discard_confirm(action) if action=="End\nTurn" then hovered = nil return { redirect=handler_draw_card } end local elements={} build_meld_ui(elements, cards_in_meld_draft, false) build_draw_discard_ui(elements, { end_turn_action="End\nTurn", }) build_hand_ui(elements, cards_in_hand, cards_in_meld_draft, false) return { page=elements } end function distance_to_point_of_interest(start,dir,point_of_interest) local off_axis_dir = {dir[2],-dir[1]} local offset={point_of_interest.x-start.x,point_of_interest.y-start.y} -- use dot product to check how inline with each direction the point of interest is local in_axis_distance=offset[1]*dir[1]+offset[2]*dir[2] local off_axis_distance=offset[1]*off_axis_dir[1]+offset[2]*off_axis_dir[2] if in_axis_distance > 0 then -- use the square of the off_axis_distance to reduce how often it is chosen and ignore direction return in_axis_distance + off_axis_distance * off_axis_distance else return in_axis_distance end end function rummy_hand_sort_comparison(a, b) -- compare rank if a.rankb.rank then return false end -- compare suit if a.suitb.suit then return false end -- Both are the same; we need to return false or else `table.sort` will throw an -- "invalid comparison function for sorting" error. return false end function rummy_is_valid_meld(stack) if #stack<3 then return false end stack:sort(rummy_hand_sort_comparison) local expected_rank=stack[1].rank local is_valid_set=true for i,card in ipairs(stack) do if card.rank~=expected_rank then is_valid_set=false break end end local expected_suit=stack[1].suit local is_valid_run=true for i=2,#stack do local card=stack[i] if card.suit~=expected_suit or card.rank~=(stack[i-1].rank+1) then is_valid_run=false break end end return is_valid_run or is_valid_set end function create_deck() local cards=CardStack:new() for i=1,13 do for a=1,4 do table.insert(cards, Card:new(a, i)) end end return cards end function table_index_of(table, value) for i,v in ipairs(table) do if v==value then return i end end return nil end -- CardStack CardStack = {} function CardStack:new(obj) local stack = obj or {} setmetatable(stack, { __index=CardStack }) return stack end function CardStack:sort(compare_function) table.sort(self,compare_function) end function CardStack:shuffle() for a,c in ipairs(self) do local b=math.random(#self) local tmp=self[a] self[a]=self[b] self[b]=tmp end end -- Draws one card and returns a Card, or nil if the stack is empty. function CardStack:draw() if #self>0 then local drawn_card = self[#self] table.remove(self, #self) return drawn_card else return nil end end -- Draws up to N cards and returns a CardStack. The stack will contain up to N cards, less if the stack doesn't -- contain that many cards. function CardStack:draw_stack(amount,destination_stack) local draw_stack=destination_stack or CardStack:new() local n = amount if amount > #self then n = #self end for i=1,n do table.insert(draw_stack, self:draw()) end return draw_stack end function CardStack:contains(card_sought) for i,card in ipairs(self) do if card==card_sought then return true end end return false end function CardStack:index_of(card_sought) for i,card in ipairs(self) do if card==card_sought then return i end end return nil end -- returns a new CardStack containing the cards from self and other. Does not remove the cards from self and other. function CardStack:with(other) local new_stack=CardStack:new() for i,card in ipairs(self) do table.insert(new_stack, card) end for i,card in ipairs(other) do table.insert(new_stack, card) end return new_stack end Sprite={} Sprite.__index=Sprite function Sprite:new(obj) local o = obj or {} setmetatable(o, Sprite) return o end -- Card rendering stuff suit_icon={34,35,33,36} suit_color={0,0,2,2} suit_names={'clubs','spades','hearts','diamonds'} rank_symbols={'A','2','3','4','5','6','7','8','9','10','J','Q','K'} Card = { sprite=Sprite:new({ sid=5, tw=3, th=3, colorkey=14 }), spr_hilight=Sprite:new({ sid=8, tw=3, th=3, colorkey=14 }), spr_selected=Sprite:new({ sid=11, tw=3, th=3, colorkey=14 }), spr_hidden=Sprite:new({ sid=56, tw=3, th=3, colorkey=14 }), } Card.__index = Card function Card:new(suit, rank) local card = { suit=suit, rank=rank, } setmetatable(card, Card) return card end function Card:__tostring(suit, rank) return "<"..rank_symbols[self.rank].." of "..suit_names[self.suit]..">" end function Card:render(x, y, hidden, sel_state) if hidden then spr(self.spr_hidden.sid, x, y, self.spr_hidden.colorkey, 1, 0, 0, self.spr_hidden.tw, self.spr_hidden.th) else spr(self.sprite.sid, x, y, self.sprite.colorkey, 1, 0, 0, self.sprite.tw, self.sprite.th) spr(suit_icon[self.suit],x+2,y+2,14) print(rank_symbols[self.rank],x+2,y+15,suit_color[self.suit]) end -- Draw hilight if sel_state==1 then spr(self.spr_hilight.sid, x, y, self.spr_hilight.colorkey, 1, 0, 0, self.spr_hilight.tw, self.spr_hilight.th) elseif sel_state==2 then spr(self.spr_selected.sid, x, y, self.spr_selected.colorkey, 1, 0, 0, self.spr_selected.tw, self.spr_selected.th) end end function Card:render_horizontal(x, y) spr(self.sprite.sid, x, y, self.sprite.colorkey, 1, 0, 0, self.sprite.tw, self.sprite.th) spr(suit_icon[self.suit],x+2,y+2,14) -- render text offscreen to get it's width. The width is then used to right align the text. local symbol = rank_symbols[self.rank] local text_width = print(symbol,1024,1024) print(symbol,x+22-text_width,y+2,suit_color[self.suit]) end -- -- 001:eccccccccc888888caaaaaaaca888888cacccccccacc0ccccacc0ccccacc0ccc -- 002:ccccceee8888cceeaaaa0cee888a0ceeccca0ccc0cca0c0c0cca0c0c0cca0c0c -- 003:eccccccccc888888caaaaaaaca888888cacccccccacccccccacc0ccccacc0ccc -- 004:ccccceee8888cceeaaaa0cee888a0ceeccca0cccccca0c0c0cca0c0c0cca0c0c -- 005:ee000000e0cccccc0ccccccc0ccccccc0ccccccc0ccccccc0ccccccc0ccccccc -- 006:00000000cccccccccccccccccccccccccccccccccccccccccccccccccccccccc -- 007:000000eecccccc0eccccccc0ccccccc0ccccccc0ccccccc0ccccccc0ccccccc0 -- 008:ee555555e5eeeeee5eeeeeee5eeeeeee5eeeeeee5eeeeeee5eeeeeee5eeeeeee -- 009:55555555eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee -- 010:555555eeeeeeee5eeeeeeee5eeeeeee5eeeeeee5eeeeeee5eeeeeee5eeeeeee5 -- 011:ee222222e2eeeeee2eeeeeee2eeeeeee2eeeeeee2eeeeeee2eeeeeee2eeeeeee -- 012:22222222eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee -- 013:222222eeeeeeee2eeeeeeee2eeeeeee2eeeeeee2eeeeeee2eeeeeee2eeeeeee2 -- 014:eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee -- 017:cacccccccaaaaaaacaaacaaacaaaaccccaaaaaaac8888888cc000cccecccccec -- 018:ccca00ccaaaa0ccecaaa0ceeaaaa0ceeaaaa0cee8888ccee000cceeecccceeee -- 019:cacccccccaaaaaaacaaacaaacaaaaccccaaaaaaac8888888cc000cccecccccec -- 020:ccca00ccaaaa0ccecaaa0ceeaaaa0ceeaaaa0cee8888ccee000cceeecccceeee -- 021:0ccccccc0ccccccc0ccccccc0ccccccc0ccccccc0ccccccc0ccccccc0ccccccc -- 022:cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc -- 023:ccccccc0ccccccc0ccccccc0ccccccc0ccccccc0ccccccc0ccccccc0ccccccc0 -- 024:5eeeeeee5eeeeeee5eeeeeee5eeeeeee5eeeeeee5eeeeeee5eeeeeee5eeeeeee -- 025:eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee -- 026:eeeeeee5eeeeeee5eeeeeee5eeeeeee5eeeeeee5eeeeeee5eeeeeee5eeeeeee5 -- 027:2eeeeeee2eeeeeee2eeeeeee2eeeeeee2eeeeeee2eeeeeee2eeeeeee2eeeeeee -- 028:eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee -- 029:eeeeeee2eeeeeee2eeeeeee2eeeeeee2eeeeeee2eeeeeee2eeeeeee2eeeeeee2 -- 030:eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee -- 033:ee2eee2ee222e2222222222222222222e2222222ee22222eeee222eeeeee2eee -- 034:eee0eeeeee000eeeee000eeee0e0e0ee0000000e0000000eeee0eeeeee000eee -- 035:eee0eeeeee000eeee00000ee0000000e0000000ee00000eeeee0eeeeee000eee -- 036:eee2eeeeee222eeee22222ee2222222e2222222ee22222eeee222eeeeee2eeee -- 037:0ccccccc0ccccccc0ccccccc0ccccccc0ccccccc0ccccccce0ccccccee000000 -- 038:cccccccccccccccccccccccccccccccccccccccccccccccccccccccc00000000 -- 039:ccccccc0ccccccc0ccccccc0ccccccc0ccccccc0ccccccc0cccccc0e000000ee -- 040:5eeeeeee5eeeeeee5eeeeeee5eeeeeee5eeeeeee5eeeeeeee5eeeeeeee555555 -- 041:eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee55555555 -- 042:eeeeeee5eeeeeee5eeeeeee5eeeeeee5eeeeeee5eeeeeee5eeeeee5e555555ee -- 043:2eeeeeee2eeeeeee2eeeeeee2eeeeeee2eeeeeee2eeeeeeee2eeeeeeee222222 -- 044:eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee22222222 -- 045:eeeeeee2eeeeeee2eeeeeee2eeeeeee2eeeeeee2eeeeeee2eeeeee2e222222ee -- 046:eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee -- 049:eee0eeeeee0c0eeeee0c00eee00ccc0e0c0cccc0e0ccccc0ee0ccc0eeee000ee -- 053:0ccccccc0ccccccc0ccccccc0ccccccc0ccccccc0ccccccc00cccccc00000000 -- 054:cccccccccccccccccccccccccccccccccccccccccccccccccccccccc00000000 -- 055:ccccccc0ccccccc0ccccccc0ccccccc0ccccccc0ccccccc0cccccc0000000000 -- 056:ee000000e0cccccc0ccccccc0ccfffff0ccffcfc0ccfcfcf0ccffcfc0ccfcfcf -- 057:00000000ccccccccccccccccfffffffffcfcfcfccfcfcfcffcfcfcfccfcfcfcf -- 058:000000eecccccc0eccccccc0fffffcc0fcfcfcc0cfcffcc0fcfcfcc0cfcffcc0 -- 059:eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee -- 060:eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee -- 061:eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee -- 062:eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee -- 069:00dddddd0d00000000dddddd0d00000000dddddd0d000000e0ddddddee000000 -- 070:dddddddd00000000dddddddd00000000dddddddd00000000dddddddd00000000 -- 071:dddddd00000000d0dddddd00000000d0dddddd00000000d0dddddd0e000000ee -- 072:0ccffcfc0ccfcfcf0ccffcfc0ccfcfcf0ccffcfc0ccfcfcf0ccffcfc0ccfcfcf -- 073:fcfcfcfccfcfcfcffcfcfcfccfcfcfcffcfcfcfccfcfcfcffcfcfcfccfcfcfcf -- 074:fcfcfcc0cfcffcc0fcfcfcc0cfcffcc0fcfcfcc0cfcffcc0fcfcfcc0cfcffcc0 -- 085:eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee -- 086:eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee -- 087:eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee -- 088:0ccffcfc0ccfcfcf0ccffcfc0ccfcfcf0ccfffff0ccccccce0ccccccee000000 -- 089:fcfcfcfccfcfcfcffcfcfcfccfcfcfcfffffffffcccccccccccccccc00000000 -- 090:fcfcfcc0cfcffcc0fcfcfcc0cfcffcc0fffffcc0ccccccc0cccccc0e000000ee -- 101:eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee -- 102:eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee -- 103:eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee -- 104:eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee -- -- -- 000:00000000ffffffff00000000ffffffff -- 001:0123456789abcdeffedcba9876543210 -- 002:0123456789abcdef0123456789abcdef -- -- -- 000:000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000304000000000 -- -- -- 000:100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 -- -- -- 000:cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc -- 001:cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc -- 002:cc000000000000000000000000cccccc000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000cccc -- 003:cc0cccccccccccccccccccccc0ccccc0ccccccc0ccccccc0ccccccc0ccccccc0ccccccc0ccccccc0ccccccc0ccccccc0ccccccc0ccccccc0ccccccc0ccccccc0ccccccc0ccccccc0ccccccc0ccccccc0ccccccc0ccccccc0ccccccc0ccccccc0ccccccc0ccccccc0ccccccc0cccccccccccccccccccc0ccc -- 004:cc0cccccccccccccccccccccc0cccc0cccc2cc0cccc0cc0cccc2cc0ccc2ccc0ccc2ccc0cccc0cc0cccc2cc0cccc0cc0cccc0cc0cccc0cc0cccc0cc0ccc2ccc0ccc2ccc0cccc0cc0cccc2cc0cccc0cc0cccc0cc0cccc2cc0ccc2ccc0ccc2ccc0cccc0cc0cccc2cc0cccc0cc0cccc0ccccccccccccccccc0cc -- 005:cc0cccccccccccccccccccccc0cccc0ccc222c0ccc000c0ccc222c0cc222c20cc222c20ccc000c0ccc222c0ccc000c0ccc000c0ccc000c0ccc000c0cc222c20cc222c20ccc000c0ccc222c0ccc000c0ccc000c0ccc222c0cc222c20cc222c20ccc000c0ccc222c0ccc000c0ccc000cccccccccccccccc0cc -- 006:cc0cccccccccccccccccccccc0cccc0cc222220cc000000cc222220c2222220c2222220cc000000cc222220cc000000cc000000cc000000ccc000c0c2222220c2222220ccc000c0cc222220cc000000ccc000c0cc222220c2222220c2222220ccc000c0cc222220ccc000c0ccc000cccccccccccccccc0cc -- 007:cc0cccccccccccccccccccccc0cccc0c2222220c0000000c2222220c2222220c2222220c0000000c2222220c0000000c0000000c0000000cc0c0c00c2222220c2222220cc0c0c00c2222220c0000000cc0c0c00c2222220c2222220c2222220cc0c0c00c2222220cc0c0c00cc0c0c0ccccccccccccccc0cc -- 008:cc0cccccccccccccccccccccc0cccc0c2222220c0000000c2222220cc222220cc222220c0000000c2222220c0000000c0000000c0000000c0000000cc222220cc222220c0000000c2222220c0000000c0000000c2222220cc222220cc222220c0000000c2222220c0000000c0000000cccccccccccccc0cc -- 009:cc0cccccccccccccccccccccc0cccc0cc222220cc000000cc222220ccc22220ccc22220cc000000cc222220cc000000cc000000cc000000c0000000ccc22220ccc22220c0000000cc222220cc000000c0000000cc222220ccc22220ccc22220c0000000cc222220c0000000c0000000cccccccccccccc0cc -- 010:cc0cccccccccccccccccccccc0cccc0ccc222c0cccc0cc0ccc222c0cccc2220cccc2220cccc0cc0ccc222c0cccc0cc0cccc0cc0cccc0cc0cccc0cc0cccc2220cccc2220cccc0cc0ccc222c0cccc0cc0cccc0cc0ccc222c0cccc2220cccc2220cccc0cc0ccc222c0cccc0cc0cccc0ccccccccccccccccc0cc -- 011:cc0cccccccccccccccccccccc0cccc0cccc2cc0ccc000c0cccc2cc0ccccc2c0ccccc2c0ccc000c0cccc2cc0ccc000c0ccc000c0ccc000c0ccc000c0ccccc2c0ccccc2c0ccc000c0cccc2cc0ccc000c0ccc000c0cccc2cc0ccccc2c0ccccc2c0ccc000c0cccc2cc0ccc000c0ccc000cccccccccccccccc0cc -- 012:cc0cccccccccccccccccccccc0cccc0ccccccc0ccccccc0ccccccc0ccccccc0ccccccc0ccccccc0ccccccc0ccccccc0ccccccc0ccccccc0ccccccc0ccccccc0ccccccc0ccccccc0ccccccc0ccccccc0ccccccc0ccccccc0ccccccc0ccccccc0ccccccc0ccccccc0ccccccc0cccccccccccccccccccccc0cc -- 013:cc0cccccccccccccccccccccc0cccc0ccccccc0ccccccc0ccccccc0ccccccc0ccccccc0ccccccc0ccccccc0ccccccc0ccccccc0ccccccc0ccccccc0ccccccc0ccccccc0ccccccc0ccccccc0ccccccc0ccccccc0ccccccc0ccccccc0ccccccc0ccccccc0ccccccc0ccccccc0cccccccccccccccccccccc0cc -- 014:cc0cccccccccccccccccccccc0cccc0ccccccc0ccccccc0ccccccc0ccccccc0ccccccc0ccccccc0ccccccc0ccccccc0ccccccc0ccccccc0ccccccc0ccccccc0ccccccc0ccccccc0ccccccc0ccccccc0ccccccc0ccccccc0ccccccc0ccccccc0ccccccc0ccccccc0ccccccc0cccccccccccccccccccccc0cc -- 015:cc0cccccccccccccccccccccc0cccc0ccccccc0ccccccc0ccccccc0ccccccc0ccccccc0ccccccc0ccccccc0ccccccc0ccccccc0ccccccc0ccccccc0ccccccc0ccccccc0ccccccc0ccccccc0ccccccc0ccccccc0ccccccc0ccccccc0ccccccc0ccccccc0ccccccc0ccccccc0cccccccccccccccccccccc0cc -- 016:cc0cccccccccccccccccccccc0cccc0ccccccc0ccccccc0ccccccc0ccccccc0ccccccc0ccccccc0ccccccc0ccccccc0ccccccc0ccccccc0ccccccc0ccccccc0ccccccc0ccccccc0ccccccc0ccccccc0ccccccc0ccccccc0ccccccc0ccccccc0ccccccc0ccccccc0ccccccc0cccccccccccccccccccccc0cc -- 017:cc0cccccccccccccccccccccc0cccc0cfffffc0ccffccc0ccfffcc0ccfffcc0ccfffcc0cfffffc0ccfffcc0cffffcc0ccfffcc0ccfffcc0ccfffcc0ccfffcc0cfffffc0cffccfc0cfffffc0cffccfc0cffffcc0cffccfc0cffccfc0cccffcc0cccffcc0ccffccc0cfffffc0cfffffcccccccccccccccc0cc -- 018:cc0cccccccccccccccccccccc0cccc0ccccffc0cfffccf0cffccfc0cffccfc0cffccfc0ccccffc0cffccfc0ccccffc0cffcccc0cffccfc0cffccfc0cffccfc0ccccffc0cffcfcc0ccccffc0cffcfcc0ccccffc0cffcfcc0cffcfcc0ccfffcc0ccfffcc0cfffccf0ccccffc0ccccffcccccccccccccccc0cc -- 019:cc0cccccccccccccccccccccc0cccc0cccffcc0ccffccf0ccffffc0cffccfc0ccffffc0cccffcc0ccfffcc0ccfffcc0cffffcc0cffccfc0ccffffc0cffccfc0ccccffc0cfffccc0ccccffc0cfffccc0ccfffcc0cfffccc0cfffccc0cffcfcc0cffcfcc0ccffccf0cccffcc0ccccffcccccccccccccccc0cc -- 020:cc0cccccccccccccccccccccc0cccc0ccffccc0ccffccf0cccccfc0cffccfc0cccccfc0ccffccc0cffccfc0cffcccc0cffccfc0cfffffc0cccccfc0cfffffc0cffcffc0cffcfcc0cffcffc0cffcfcc0cffcccc0cffcfcc0cffcfcc0cfffffc0cfffffc0ccffccf0ccffccc0cffcffcccccccccccccccc0cc -- 021:cc0cccccccccccccccccccccc0cccc0cffcccc0cffffcc0ccfffcc0ccfffcc0ccfffcc0cffcccc0ccfffcc0cfffffc0ccfffcc0cffccfc0ccfffcc0cffccfc0ccfffcc0cffccfc0ccfffcc0cffccfc0cfffffc0cffccfc0cffccfc0ccccfcc0ccccfcc0cffffcc0cffcccc0ccfffccccccccccccccccc0cc -- 022:cc0cccccccccccccccccccccc0cccc0ccccccc0ccccccc0ccccccc0cccccfc0ccccccc0ccccccc0ccccccc0ccccccc0ccccccc0ccccccc0ccccccc0ccccccc0ccccccc0ccccccc0ccccccc0ccccccc0ccccccc0ccccccc0ccccccc0ccccccc0ccccccc0ccccccc0ccccccc0cccccccccccccccccccccc0cc -- 023:cc0cccccccccccccccccccccc0cccc0ccccccc0ccccccc0ccccccc0ccccccc0ccccccc0ccccccc0ccccccc0ccccccc0ccccccc0ccccccc0ccccccc0ccccccc0ccccccc0ccccccc0ccccccc0ccccccc0ccccccc0ccccccc0ccccccc0ccccccc0ccccccc0ccccccc0ccccccc0cccccccccccccccccccccc0cc -- 024:cc0cccccccccccccccccccccc0ccccc0ccccccc0ccccccc0ccccccc0ccccccc0ccccccc0ccccccc0ccccccc0ccccccc0ccccccc0ccccccc0ccccccc0ccccccc0ccccccc0ccccccc0ccccccc0ccccccc0ccccccc0ccccccc0ccccccc0ccccccc0ccccccc0ccccccc0ccccccc0cccccccccccccccccccc0ccc -- 025:cc000000000000000000000000cccccc000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000cccc -- 026:cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc -- 027:cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc -- 028:cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc -- 029:cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc -- 030:cc000000000000000000000000cccccc00000000000000000000cccccccccc00000000000000000000cccccccccc00000000000000000000cccccccccc00000000000000000000cccccccccc00000000000000000000cccccccccc00000000000000000000cccccccccc00000000000000000000cccccccc -- 031:cc0eeeeeeeeeeeeeeeeeeeeee0ccccc0cccccccccccccccccccc0cccccccc0cccccccccccccccccccc0cccccccc0cccccccccccccccccccc0cccccccc0cccccccccccccccccccc0cccccccc0cccccccccccccccccccc0cccccccc0cccccccccccccccccccc0cccccccc0cccccccccccccccccccc0ccccccc -- 032:cc0eeeeeeeeeeeeeeeeeeeeee0cccc0cccc0ccccccccccccccccc0cccccc0cccc0ccccccccccccccccc0cccccc0cccc0ccccccccccccccccc0cccccc0cccc0ccccccccccccccccc0cccccc0ccc2ccc2cccccccccccccc0cccccc0cccc2ccccccccccccccccc0cccccc0cccc2ccccccccccccccccc0cccccc -- 033:cc0eeeeeeeeeeeeeeeeeeeeee0cccc0ccc000cccccccccccccccc0cccccc0ccc000cccccccccccccccc0cccccc0ccc000cccccccccccccccc0cccccc0ccc000cccccccccccccccc0cccccc0cc222c222ccccccccccccc0cccccc0ccc222cccccccccccccccc0cccccc0ccc222cccccccccccccccc0cccccc -- 034:cc0eeeeeeeeeeeeeeeeeeeeee0cccc0cc00000ccccccccfffffcc0cccccc0cc00000ccccccccfffffcc0cccccc0cc00000cccccccccfffccc0cccccc0ccc000ccccccccccfffccc0cccccc0c22222222ccccccfffffcc0cccccc0cc22222ccccccccffffccc0cccccc0cc22222cccccccccfffccc0cccccc -- 035:cc0eeeeeeeeeeeeeeeeeeeeee0cccc0c0000000ccccccccccffcc0cccccc0c0000000cccccccffccccc0cccccc0c0000000cccccccffccfcc0cccccc0cc0c0c0ccccccccffccfcc0cccccc0c22222222cccccccccffcc0cccccc0c2222222ccccccccccffcc0cccccc0c2222222cccccccffccfcc0cccccc -- 036:cc0eeeeeeeeeeeeeeeeeeeeee0cccc0c0000000cccccccccffccc0cccccc0c0000000cccccccffffccc0cccccc0c0000000cccccccffccfcc0cccccc0c0000000cccccccffccfcc0cccccc0cc2222222ccccccccffccc0cccccc0c2222222ccccccccfffccc0cccccc0c2222222cccccccffccfcc0cccccc -- 037:cc0eeeeeeeeeeeeeeeeeeeeee0cccc0cc00000ccccccccfccffcc0cccccc0cc00000cccccccccccffcc0cccccc0cc00000ccccccccffccfcc0cccccc0c0000000cccccccfffffcc0cccccc0ccc22222ccccccccffcccc0cccccc0cc22222ccccccccffccccc0cccccc0cc22222ccccccccfffffcc0cccccc -- 038:cc0eeeeeeeeeeeeeeeeeeeeee0cccc0cccc0cccccccccccfffccc0cccccc0c00000000000000000000c0cccccc0c00000000000000000000c0cccccc0c00000000000000000000c0cccccc0c00000000000000000000c0cccccc0c00000000000000000000c0cccccc0c00000000000000000000c0cccccc -- 039:cc0eeeeeeeeeeeeeeeeeeeeee0cccc0ccc000cccccccccccccccc0cccccc00cccccccccccccccccccc00cccccc00cccccccccccccccccccc00cccccc00cccccccccccccccccccc00cccccc00cccccccccccccccccccc00cccccc00cccccccccccccccccccc00cccccc00cccccccccccccccccccc00cccccc -- 040:cc0eeeeeeeeeeeeeeeeeeeeee0cccc0cccccccccccccccccccccc0cccccc0ccc2ccc2cccccccccccccc0cccccc0cccc2ccccccccccccccccc0cccccc0cccc0ccccccccccccccccc0cccccc0cccc2ccccccccccccccccc0cccccc0ccc2ccc2cccccccccccccc0cccccc0cccc2ccccccccccccccccc0cccccc -- 041:cc0eeeeeeeeeeeeeeeeeeeeee0cccc0cccccccccccccccccccccc0cccccc0cc222c222ccccccccccccc0cccccc0ccc222cccccccccccccccc0cccccc0ccc000cccccccccccccccc0cccccc0ccc222cccccccccccccccc0cccccc0cc222c222ccccccccccccc0cccccc0ccc222cccccccccccccccc0cccccc -- 042:cc0eeeeeeeeeeeeeeeeeeeeee0cccc0cccccccccccccccccccccc0cccccc0c22222222ccccccfffffcc0cccccc0cc22222ccccccccfffffcc0cccccc0cc00000cccccccccfffccc0cccccc0cc22222ccccccccfffffcc0cccccc0c22222222ccccccffffccc0cccccc0cc22222cccccccccfffccc0cccccc -- 043:cc0eeeeeeeeeeeeeeeeeeeeee0cccc0cccccccccccccccccccccc0cccccc0c22222222cccccccccffcc0cccccc0c2222222ccccccccccffcc0cccccc0c0000000cccccccffccfcc0cccccc0c2222222cccccccffccccc0cccccc0c22222222cccccccccffcc0cccccc0c2222222cccccccffccfcc0cccccc -- 044:cc0eeeeeeeeeeeeeeeeeeeeee0cccc0cccccccccccccccccccccc0cccccc0cc2222222ccccccccffccc0cccccc0c2222222cccccccccffccc0cccccc0c0000000ccccccccffffcc0cccccc0c2222222cccccccffffccc0cccccc0cc2222222cccccccfffccc0cccccc0c2222222cccccccffccfcc0cccccc -- 045:cc0eeeeeeeeeeeeeeeeeeeeee0cccc0cccccccccccccccccccccc0cccccc0ccc22222cccccccfccffcc0cccccc0cc22222ccccccccfccffcc0cccccc0cc00000ccccccccccccfcc0cccccc0cc22222cccccccccccffcc0cccccc0ccc22222cccccccffccccc0cccccc0cc22222ccccccccffccfcc0cccccc -- 046:cc0eeeeeeeeeeeeeeeeeeeeee0cccc0cccccccccccccccccccccc0cccccc0cccc222cccccccccfffccc0cccccc0c00000000000000000000c0cccccc0c00000000000000000000c0cccccc0c00000000000000000000c0cccccc0c00000000000000000000c0cccccc0c00000000000000000000c0cccccc -- 047:cc0eeeeeeeeeeeeeeeeeeeeee0cccc0cccccccccccccccccccccc0cccccc0ccccc2cccccccccccccccc0cccccc00cccccccccccccccccccc00cccccc00cccccccccccccccccccc00cccccc00cccccccccccccccccccc00cccccc00cccccccccccccccccccc00cccccc00cccccccccccccccccccc00cccccc -- 048:cc0eeeeeeeeeeeeeeeeeeeeee0cccc0cccccccccccccccccccccc0cccccc0cccccccccccccccccccccc0cccccc0cccc0ccccccccccccccccc0cccccc0cccc0ccccccccccccccccc0cccccc0ccc2ccc2cccccccccccccc0cccccc0cccc0ccccccccccccccccc0cccccc0cccc0ccccccccccccccccc0cccccc -- 049:cc0eeeeeeeeeeeeeeeeeeeeee0cccc0cccccccccccccccccccccc0cccccc0cccccccccccccccccccccc0cccccc0ccc000cccccccccccccccc0cccccc0ccc000cccccccccccccccc0cccccc0cc222c222ccccccccccccc0cccccc0ccc000cccccccccccccccc0cccccc0ccc000cccccccccccccccc0cccccc -- 050:cc0eeeeeeeeeeeeeeeeeeeeee0cccc0cccccccccccccccccccccc0cccccc0cccccccccccccccccccccc0cccccc0cc00000ccccccccccffccc0cccccc0cc00000ccccccccfffffcc0cccccc0c22222222cccccccfffccc0cccccc0cc00000cccccccccfffccc0cccccc0ccc000cccccccccfffffcc0cccccc -- 051:cc0eeeeeeeeeeeeeeeeeeeeee0cccc0cccccccccccccccccccccc0cccccc0cccccccccccccccccccccc0cccccc0c0000000ccccccccfffccc0cccccc0c0000000ccccccccccffcc0cccccc0c22222222ccccccffccccc0cccccc0c0000000cccccccffccfcc0cccccc0cc0c0c0cccccccccccffcc0cccccc -- 052:cc0eeeeeeeeeeeeeeeeeeeeee0ccccc0cccccccccccccccccccc0ccccccc0cccccccccccccccccccccc0cccccc0c0000000cccccccffcfccc0cccccc0c0000000ccccccccccffcc0cccccc0cc2222222ccccccffffccc0cccccc0c0000000ccccccccfffccc0cccccc0c0000000cccccccccffccc0cccccc -- 053:cc000000000000000000000000cccccc00000000000000000000cccccccc0cccccccccccccccccccccc0cccccc0cc00000ccccccccfffffcc0cccccc0cc00000ccccccccffcffcc0cccccc0ccc22222cccccccffccfcc0cccccc0cc00000ccccccccffccfcc0cccccc0c0000000cccccccfccffcc0cccccc -- 054:cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc0cccccccccccccccccccccc0cccccc0cccc0cccccccccccccfccc0cccccc0c00000000000000000000c0cccccc0c00000000000000000000c0cccccc0c00000000000000000000c0cccccc0c00000000000000000000c0cccccc -- 055:cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc0cccccccccccccccccccccc0cccccc0ccc000cccccccccccccccc0cccccc00cccccccccccccccccccc00cccccc00cccccccccccccccccccc00cccccc00cccccccccccccccccccc00cccccc00cccccccccccccccccccc00cccccc -- 056:cc000000000000000000000000cccccccccccccccccccccccccccccccccc0cccccccccccccccccccccc0cccccc0cccccccccccccccccccccc0cccccc0ccc2ccc2cccccccccccccc0cccccc0cccc0ccccccccccccccccc0cccccc0cccc0ccccccccccccccccc0cccccc0ccc2ccc2cccccccccccccc0cccccc -- 057:cc0eeeeeeeeeeeeeeeeeeeeee0cccccccccccccccccccccccccccccccccc0cccccccccccccccccccccc0cccccc0cccccccccccccccccccccc0cccccc0cc222c222ccccccccccccc0cccccc0ccc000cccccccccccccccc0cccccc0ccc000cccccccccccccccc0cccccc0cc222c222ccccccccccccc0cccccc -- 058:cc0eeeeeeeeeeeeeeeeeeeeee0cccccccccccccccccccccccccccccccccc0cccccccccccccccccccccc0cccccc0cccccccccccccccccccccc0cccccc0c22222222cccccccfffccc0cccccc0ccc000cccccccccfffffcc0cccccc0ccc000ccccccccccfffccc0cccccc0c22222222ccccccfffffcc0cccccc -- 059:cc0eeeeeeeeeeeeeeeeeeeeee0cccccccccccccccccccccccccccccccccc0cccccccccccccccccccccc0cccccc0cccccccccccccccccccccc0cccccc0c22222222ccccccffccfcc0cccccc0cc0c0c0ccccccccffccccc0cccccc0cc0c0c0ccccccccffccfcc0cccccc0c22222222ccccccffccccc0cccccc -- 060:cc0eeeeeeeeeeeeeeeeeeeeee0ccccccccccccccccccccccccccccccccccc0cccccccccccccccccccc0ccccccc0cccccccccccccccccccccc0cccccc0cc2222222cccccccfffccc0cccccc0c0000000cccccccffffccc0cccccc0c0000000ccccccccfffccc0cccccc0cc2222222ccccccffffccc0cccccc -- 061:cc0eeeeeeeeeeeeeeeeeeeeee0cccccccccccccccccccccccccccccccccccc00000000000000000000cccccccc0cccccccccccccccccccccc0cccccc0ccc22222cccccccffccfcc0cccccc0c0000000ccccccccccffcc0cccccc0c0000000cccccccffccfcc0cccccc0ccc22222ccccccccccffcc0cccccc -- 062:cc0eeeeeeeeeeeeeeeeeeeeee0cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc0cccccccccccccccccccccc0cccccc0cccc222cccccccccfffccc0cccccc0c00000000000000000000c0cccccc0c00000000000000000000c0cccccc0c00000000000000000000c0cccccc -- 063:cc0eeeeeeeeeeeeeeeeeeeeee0cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc0cccccccccccccccccccccc0cccccc0ccccc2cccccccccccccccc0cccccc00cccccccccccccccccccc00cccccc00cccccccccccccccccccc00cccccc00cccccccccccccccccccc00cccccc -- 064:cc0eeeeeeeeeeeeeeeeeeeeee0cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc0cccccccccccccccccccccc0cccccc0cccccccccccccccccccccc0cccccc0cccc2ccccccccccccccccc0cccccc0cccc2ccccccccccccccccc0cccccc0cccc0ccccccccccccccccc0cccccc -- 065:cc0eeeeeeeeeeeeeeeeeeeeee0cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc0cccccccccccccccccccccc0cccccc0cccccccccccccccccccccc0cccccc0ccc222cccccccccccccccc0cccccc0ccc222cccccccccccccccc0cccccc0ccc000cccccccccccccccc0cccccc -- 066:cc0eeeeeeeeeeeeeeeeeeeeee0cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc0cccccccccccccccccccccc0cccccc0cccccccccccccccccccccc0cccccc0cc22222ccccccccccffccc0cccccc0cc22222cccccccccfffccc0cccccc0ccc000cccccffcccfffccc0cccccc -- 067:cc0eeeeeeeeeeeeeeeeeeeeee0cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc0cccccccccccccccccccccc0cccccc0cccccccccccccccccccccc0cccccc0c2222222ccccccccfffccc0cccccc0c2222222cccccccffccccc0cccccc0cc0c0c0cccfffccffcffcc0cccccc -- 068:cc0eeeeeeeeeeeeeeeeeeeeee0ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc0cccccccccccccccccccc0ccccccc0cccccccccccccccccccccc0cccccc0c2222222cccccccffcfccc0cccccc0c2222222cccccccffffccc0cccccc0c0000000cccffccfffcfcc0cccccc -- 069:cc0eeeeeeeeeeeeeeeeeeeeee0cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc00000000000000000000cccccccc0cccccccccccccccccccccc0cccccc0cc22222ccccccccfffffcc0cccccc0cc22222ccccccccffccfcc0cccccc0c0000000cccffccffccfcc0cccccc -- 070:cc0eeeeeeeeeeeeeeeeeeeeee0cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc0cccccccccccccccccccccc0cccccc0ccc222ccccccccccccfccc0cccccc0c00000000000000000000c0cccccc0c00000000000000000000c0cccccc -- 071:cc0eeeeeeeeeeeeeeeeeeeeee0cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc0cccccccccccccccccccccc0cccccc0cccc2ccccccccccccccccc0cccccc00cccccccccccccccccccc00cccccc00cccccccccccccccccccc00cccccc -- 072:cc0eeeeeeeeeeeeeeeeeeeeee0cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc0cccccccccccccccccccccc0cccccc0cccccccccccccccccccccc0cccccc0ccc2ccc2cccccccccccccc0cccccc0cccc0ccccccccccccccccc0cccccc -- 073:cc0eeeeeeeeeeeeeeeeeeeeee0cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc0cccccccccccccccccccccc0cccccc0cccccccccccccccccccccc0cccccc0cc222c222ccccccccccccc0cccccc0ccc000cccccccccccccccc0cccccc -- 074:cc0eeeeeeeeeeeeeeeeeeeeee0cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc0cccccccccccccccccccccc0cccccc0cccccccccccccccccccccc0cccccc0c22222222ccffcccfffccc0cccccc0ccc000ccccccccccfffccc0cccccc -- 075:cc0eeeeeeeeeeeeeeeeeeeeee0cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc0cccccccccccccccccccccc0cccccc0cccccccccccccccccccccc0cccccc0c22222222cfffccffcffcc0cccccc0cc0c0c0ccccccccffccfcc0cccccc -- 076:cc0eeeeeeeeeeeeeeeeeeeeee0ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc0cccccccccccccccccccc0ccccccc0cccccccccccccccccccccc0cccccc0cc2222222ccffccfffcfcc0cccccc0c0000000cccccccffccfcc0cccccc -- 077:cc0eeeeeeeeeeeeeeeeeeeeee0cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc00000000000000000000cccccccc0cccccccccccccccccccccc0cccccc0ccc22222cccffccffccfcc0cccccc0c0000000cccccccffccfcc0cccccc -- 078:cc0eeeeeeeeeeeeeeeeeeeeee0cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc0cccccccccccccccccccccc0cccccc0cccc222cccffffccfffccc0cccccc0c00000000000000000000c0cccccc -- 079:cc000000000000000000000000cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc0cccccccccccccccccccccc0cccccc0ccccc2cccccccccccccccc0cccccc00cccccccccccccccccccc00cccccc -- 080:cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc0cccccccccccccccccccccc0cccccc0cccccccccccccccccccccc0cccccc0cccc0ccccccccccccccccc0cccccc -- 081:cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc0cccccccccccccccccccccc0cccccc0cccccccccccccccccccccc0cccccc0ccc000cccccccccccccccc0cccccc -- 082:cc000000000000000000000000cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc0cccccccccccccccccccccc0cccccc0cccccccccccccccccccccc0cccccc0ccc000ccccccccccfffccc0cccccc -- 083:cc0eeeeeeeeeeeeeeeeeeeeee0cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc0cccccccccccccccccccccc0cccccc0cccccccccccccccccccccc0cccccc0cc0c0c0ccccccccffccccc0cccccc -- 084:cc0eeeeeeeeeeeeeeeeeeeeee0ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc0cccccccccccccccccccc0ccccccc0cccccccccccccccccccccc0cccccc0c0000000cccccccffffccc0cccccc -- 085:cc0eeeeeeeeeeeeeeeeeeeeee0cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc00000000000000000000cccccccc0cccccccccccccccccccccc0cccccc0c0000000cccccccffccfcc0cccccc -- 086:cc0eeeeeeeeeeeeeeeeeeeeee0cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc0cccccccccccccccccccccc0cccccc0cccc0cccccccccccfffccc0cccccc -- 087:cc0eeeeeeeeeeeeeeeeeeeeee0cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc0cccccccccccccccccccccc0cccccc0ccc000cccccccccccccccc0cccccc -- 088:cc0eeeeeeeeeeeeeeeeeeeeee0cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc0cccccccccccccccccccccc0cccccc0cccccccccccccccccccccc0cccccc -- 089:cc0eeeeeeeeeeeeeeeeeeeeee0cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc0cccccccccccccccccccccc0cccccc0cccccccccccccccccccccc0cccccc -- 090:cc0eeeeeeeeeeeeeeeeeeeeee0cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc0cccccccccccccccccccccc0cccccc0cccccccccccccccccccccc0cccccc -- 091:cc0eeeeeeeeeeeeeeeeeeeeee0cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc0cccccccccccccccccccccc0cccccc0cccccccccccccccccccccc0cccccc -- 092:cc0eeeeeeeeeeeeeeeeeeeeee0ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc0cccccccccccccccccccc0ccccccc0cccccccccccccccccccccc0cccccc -- 093:cc0eeeeeeeeeeeeeeeeeeeeee0cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc00000000000000000000cccccccc0cccccccccccccccccccccc0cccccc -- 094:cc0eeeeeeeeeeeeeeeeeeeeee0cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc0cccccccccccccccccccccc0cccccc -- 095:cc0eeeeeeeeeeeeeeeeeeeeee0cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc0cccccccccccccccccccccc0cccccc -- 096:cc0eeeeeeeeeeeeeeeeeeeeee0cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc0cccccccccccccccccccccc0cccccc -- 097:cc0eeeeeeeeeeeeeeeeeeeeee0cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc0cccccccccccccccccccccc0cccccc -- 098:cc0eeeeeeeeeeeeeeeeeeeeee0cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc0cccccccccccccccccccccc0cccccc -- 099:cc0eeeeeeeeeeeeeeeeeeeeee0cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc0cccccccccccccccccccccc0cccccc -- 100:cc0eeeeeeeeeeeeeeeeeeeeee0ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc0cccccccccccccccccccc0ccccccc -- 101:cc0eeeeeeeeeeeeeeeeeeeeee0cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc00000000000000000000cccccccc -- 102:cc0eeeeeeeeeeeeeeeeeeeeee0cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc -- 103:cc0eeeeeeeeeeeeeeeeeeeeee0cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc -- 104:cc0eeeeeeeeeeeeeeeeeeeeee0cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc -- 105:cc000000000000000000000000cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc -- 106:cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc -- 107:cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc -- 108:cc000000000000000000000000cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc -- 109:cc0eeeeeeeeeeeeeeeeeeeeee0cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc -- 110:cc0eeeeeeeeeeeeeeeeeeeeee0cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc -- 111:cc0eeeeeeeeeeeeeeeeeeeeee0cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc -- 112:cc0eeeeeeeeeeeeeeeeeeeeee0cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc -- 113:cc0eeeeeeeeeeeeeeeeeeeeee0cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc -- 114:cc0eeeeeeeeeeeeeeeeeeeeee0cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc -- 115:cc0eeeeeeeeeeeeeeeeeeeeee0cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc -- 116:cc0eeeeeeeeeeeeeeeeeeeeee0cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc -- 117:cc0eeeeeeeeeeeeeeeeeeeeee0cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc -- 118:cc0eeeeeeeeeeeeeeeeeeeeee0cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc -- 119:cc0eeeeeeeeeeeeeeeeeeeeee0cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc -- 120:cc0eeeeeeeeeeeeeeeeeeeeee0cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc -- 121:cc0eeeeeeeeeeeeeeeeeeeeee0cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc -- 122:cc0eeeeeeeeeeeeeeeeeeeeee0cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc -- 123:cc0eeeeeeeeeeeeeeeeeeeeee0cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc -- 124:cc0eeeeeeeeeeeeeeeeeeeeee0cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc -- 125:cc0eeeeeeeeeeeeeeeeeeeeee0cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc -- 126:cc0eeeeeeeeeeeeeeeeeeeeee0cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc -- 127:cc0eeeeeeeeeeeeeeeeeeeeee0cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc -- 128:cc0eeeeeeeeeeeeeeeeeeeeee0cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc -- 129:cc0eeeeeeeeeeeeeeeeeeeeee0cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc -- 130:cc0eeeeeeeeeeeeeeeeeeeeee0cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc -- 131:cc000000000000000000000000cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc -- 132:cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc -- 133:cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc -- 134:cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc -- 135:cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc -- -- -- 000:1a1c2c5d275db13e53ef7d57ffcd75a7f07038b76425717929366f3b5dc941a6f673eff7f4f4f494b0c2566c86333c57 --