-- 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 hovered=nil player_state=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) player_state = player_state_draw_card melds_on_tabletop={} end function TIC() cls(12) local points_of_interest = player_state.get_points_of_interest() local discard_x=((240 - 24) / 2) local draw_pile_x=discard_x - 24 - 4 local end_turn_x=discard_x + 24 + 4 if not hovered and #points_of_interest>0 then hovered=points_of_interest[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_sel=btnp(5) local c_back=btnp(4) if c_sel and hovered then player_state = player_state.update(hovered) end -- update hovered position local moved = c_up or c_down or c_left or c_right if moved and #points_of_interest > 0 then local start = hovered or {x=0,y=0,interest=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,point in ipairs(points_of_interest) do if hovered and point.interest == hovered.interest then -- pass elseif not nearest then local distance = distance_to_point_of_interest(start,dir,point) if distance > 0 then nearest = point end else local distance = distance_to_point_of_interest(start,dir,point) if distance > 0 and distance < distance_to_point_of_interest(start,dir,nearest) then nearest = point end end end if nearest then hovered = nearest end end -- render melds on tabletop local meld_x=2 for j,meld in ipairs(melds_on_tabletop) do local sel_state = nil if hovered and hovered.interest == meld then sel_state = 1 end for i,card in ipairs(meld) do card:render(meld_x, 10, false, sel_state) meld_x=meld_x + 8 end meld_x=meld_x + 28 end if is_an_interest(points_of_interest, "New\nMeld") then print("New\nMeld", meld_x, 17, 0) if hovered and hovered.interest=="New\nMeld" then spr(Card.spr_hilight.sid, meld_x, 10, Card.spr_hilight.colorkey, 1, 0, 0, Card.spr_hilight.tw, Card.spr_hilight.th) end else print("New\nMeld", meld_x, 17, 13) end -- render discard pile for i,card in ipairs(discard_pile) do local sel_state = nil if hovered and hovered.interest == card then sel_state = 1 end card:render(discard_x, 80 + (i - 1) * -0.25, false, sel_state) end if is_an_interest(points_of_interest, "Discard") then if hovered and hovered.interest=="Discard" then spr(Card.spr_hilight.sid, discard_x, 80 + (#discard_pile - 1) * -0.25, Card.spr_hilight.colorkey, 1, 0, 0, Card.spr_hilight.tw, Card.spr_hilight.th) end end -- render draw pile for i,card in ipairs(draw_pile) do local sel_state = nil if hovered and hovered.interest == card then sel_state = 1 end card:render(draw_pile_x, 80 + (i - 1) * -0.25, true, sel_state) end if is_an_interest(points_of_interest, "End\nTurn") then print("End\nTurn", end_turn_x, 80+7, 0) if hovered and hovered.interest=="End\nTurn" then spr(Card.spr_hilight.sid, end_turn_x, 80, Card.spr_hilight.colorkey, 1, 0, 0, Card.spr_hilight.tw, Card.spr_hilight.th) end else print("End\nTurn", end_turn_x, 80+7, 13) end local hand_start_x=((240 - #cards_in_hand * 12 - 24) / 2) for i,card in ipairs(cards_in_hand) do local ty=0 local sel_state = nil if cards_in_meld_draft:contains(card) then ty = -4 sel_state = 2 end if hovered and hovered.interest == card then sel_state = 1 end card:render(hand_start_x + (i - 1) * 12, 110 + ty, false, sel_state) end end player_state_draw_card = { update=function(point_of_interest) -- only accept drawing cards from the draw pile or if draw_pile:contains(point_of_interest.interest) then table.insert(cards_in_hand, draw_pile:draw()) cards_in_hand:sort(rummy_hand_sort_comparison) hovered = nil return player_state_action elseif discard_pile:contains(point_of_interest.interest) then table.insert(cards_in_hand, discard_pile:draw()) cards_in_hand:sort(rummy_hand_sort_comparison) hovered = nil return player_state_action end return player_state_draw_card end, get_points_of_interest=function() local points_of_interest = {} if #draw_pile > 0 then table.insert(points_of_interest, { x=3 + 12, y=80 + (#draw_pile - 1) * -0.25 + 12, interest=draw_pile[#draw_pile] }) end if #discard_pile > 0 then table.insert(points_of_interest, { x=39 + 12, y=80 + (#discard_pile - 1) * -0.25 + 12, interest=discard_pile[#discard_pile] }) end return points_of_interest end } player_state_action = { update=function(point_of_interest) if cards_in_hand:contains(point_of_interest.interest) then if cards_in_meld_draft:contains(point_of_interest.interest) then table.remove(cards_in_meld_draft, cards_in_meld_draft:index_of(point_of_interest.interest)) else table.insert(cards_in_meld_draft, point_of_interest.interest) cards_in_meld_draft:sort(rummy_hand_sort_comparison) end elseif point_of_interest.interest=="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 player_state_secondary_action end elseif point_of_interest.interest=="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 player_state_discard_confirm end elseif table_index_of(melds_on_tabletop, point_of_interest.interest) 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 return player_state_action end, get_points_of_interest=function() local points_of_interest = {} for i,card in ipairs(cards_in_hand) do table.insert(points_of_interest, { x=(i - 1) * 12 + 2 + 5, y=122, interest=card }) end if rummy_is_valid_meld(cards_in_meld_draft) then table.insert(points_of_interest, { x=80 + 12, y=17 + 6, interest="New\nMeld" }) end if #cards_in_meld_draft==1 then table.insert(points_of_interest, { x=39, y=80 + (#discard_pile - 1) * -0.25, interest="Discard" }) end if #cards_in_meld_draft>0 then for i,meld in ipairs(melds_on_tabletop) do local meld_with_draft=meld:with(cards_in_meld_draft) if rummy_is_valid_meld(meld_with_draft) then table.insert(points_of_interest, { x=i * 36, y=10, interest=meld }) end end end return points_of_interest end } -- In this state the player may only lay off a card or end their turn player_state_secondary_action = { update=function(point_of_interest) if cards_in_hand:contains(point_of_interest.interest) then if cards_in_meld_draft:contains(point_of_interest.interest) then table.remove(cards_in_meld_draft, cards_in_meld_draft:index_of(point_of_interest.interest)) else table.insert(cards_in_meld_draft, point_of_interest.interest) cards_in_meld_draft:sort(rummy_hand_sort_comparison) end elseif point_of_interest.interest=="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 player_state_discard_confirm end elseif table_index_of(melds_on_tabletop, point_of_interest.interest) 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 return player_state_secondary_action end, get_points_of_interest=function() local points_of_interest = {} for i,card in ipairs(cards_in_hand) do table.insert(points_of_interest, { x=(i - 1) * 12 + 2 + 5, y=122, interest=card }) end if #cards_in_meld_draft==1 then table.insert(points_of_interest, { x=39, y=80 + (#discard_pile - 1) * -0.25, interest="Discard" }) end if #cards_in_meld_draft>0 then for i,meld in ipairs(melds_on_tabletop) do local meld_with_draft=meld:with(cards_in_meld_draft) if rummy_is_valid_meld(meld_with_draft) then table.insert(points_of_interest, { x=i * 36, y=10, interest=meld }) end end end return points_of_interest end } player_state_discard_confirm = { update=function(point_of_interest) if point_of_interest.interest=="End\nTurn" then hovered = nil return player_state_draw_card end return player_state_discard_confirm end, get_points_of_interest=function() local points_of_interest = {} table.insert(points_of_interest, { x=80 + 12, y=87 + 6, interest="End\nTurn" }) return points_of_interest end } function is_an_interest(points_of_interest,interest_sought) for i,point in ipairs(points_of_interest) do if point.interest==interest_sought then return true end end return false 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 -- 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={ sid=5, tw=3, th=3, colorkey=14 }, spr_hilight={ sid=8, tw=3, th=3, colorkey=14 }, spr_selected={ sid=11, tw=3, th=3, colorkey=14 }, spr_hidden={ sid=56, tw=3, th=3, colorkey=14 }, } function Card:new(suit, rank) local card = { suit=suit, rank=rank, } setmetatable(card, { __index=Card }) return card 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 --