'pragma solidity' Keyword
' '           Text.Whitespace
'^'           Operator
'0.4.20'      Keyword
';'           Punctuation
'\n\n'        Text.Whitespace

'pragma solidity' Keyword
' '           Text.Whitespace
'>='          Operator
'0.4.0'       Keyword
' '           Text.Whitespace
'<'           Operator
'0.7.0'       Keyword
';'           Punctuation
'\n\n'        Text.Whitespace

'// one-line singleline comment\n' Comment.Single

'\n'          Text.Whitespace

'/* one-line multiline comment */' Comment.Multiline
'\n\n'        Text.Whitespace

'/*\n  multi-line multiline comment\n*/' Comment.Multiline
'\n\n'        Text.Whitespace

'contract'    Keyword
' '           Text.Whitespace
'ContractName' Name.Entity
' '           Text.Whitespace
'{'           Punctuation
'\n    '      Text.Whitespace
'address'     Keyword.Type
' '           Text.Whitespace
'public '     Keyword
'publicaddress' Name.Variable
';'           Punctuation
'\n\n    '    Text.Whitespace
'uint'        Keyword.Type
' '           Text.Whitespace
'varname1'    Name.Variable
' '           Text.Whitespace
'='           Operator
' '           Text.Whitespace
'1234'        Literal.Number.Decimal
';'           Punctuation
'\n    '      Text.Whitespace
'int'         Keyword.Type
' '           Text.Whitespace
'varname2'    Name.Variable
' '           Text.Whitespace
'='           Operator
' '           Text.Whitespace
'0x12abcdEF'  Literal.Number.Hex
';'           Punctuation
'\n\n    '    Text.Whitespace
'string'      Keyword.Type
' '           Text.Whitespace
'astringsingle' Name.Variable
' '           Text.Whitespace
'='           Operator
' '           Text.Whitespace
'\'test "string" value\\\' single\'' Literal.String.Single
';'           Punctuation
'\n    '      Text.Whitespace
'string'      Keyword.Type
' '           Text.Whitespace
'astringdouble' Name.Variable
' '           Text.Whitespace
'='           Operator
' '           Text.Whitespace
'"test \'string\' value\\" double"' Literal.String.Double
';'           Punctuation
'\n\n    '    Text.Whitespace
'address'     Keyword.Type
' '           Text.Whitespace
'public '     Keyword
'shipper'     Name.Variable
';'           Punctuation
'\n    '      Text.Whitespace
'address'     Keyword.Type
' '           Text.Whitespace
'private '    Keyword
'arbiter'     Name.Variable
';'           Punctuation
'\n    '      Text.Whitespace
'address'     Keyword.Type
' '           Text.Whitespace
'astronaut'   Name.Variable
';'           Punctuation
'\n\n    '    Text.Whitespace
'enum'        Keyword.Type
' '           Text.Whitespace
'State'       Name.Variable
' '           Text.Whitespace
'{'           Punctuation
'\n        '  Text.Whitespace
'NotStarted'  Text
','           Punctuation
'\n        '  Text.Whitespace
'WorkInProgress' Text
','           Punctuation
'\n        '  Text.Whitespace
'Done'        Text
'\n    '      Text.Whitespace
'}'           Punctuation
'\n    '      Text.Whitespace
'State'       Text
' '           Text.Whitespace
'public'      Keyword.Type
' '           Text.Whitespace
'state'       Text
';'           Punctuation
'\n\n    '    Text.Whitespace
'struct'      Keyword.Type
' '           Text.Whitespace
'AStruct'     Name.Variable
' '           Text.Whitespace
'{'           Punctuation
'\n        '  Text.Whitespace
'string'      Keyword.Type
' '           Text.Whitespace
'name'        Name.Variable
';'           Punctuation
'\n        '  Text.Whitespace
'uint8'       Keyword.Type
' '           Text.Whitespace
'atype'       Name.Variable
';'           Punctuation
'\n    '      Text.Whitespace
'}'           Punctuation
'\n\n    '    Text.Whitespace
'mapping'     Keyword.Type
'('           Punctuation
'address'     Keyword.Type
' '           Text.Whitespace
'='           Operator
'>'           Operator
' '           Text.Whitespace
'AStruct'     Text
')'           Punctuation
' '           Text.Whitespace
'registry'    Text
';'           Punctuation
'\n\n    '    Text.Whitespace
'event'       Keyword.Type
' '           Text.Whitespace
'Paid'        Name.Variable
'('           Punctuation
'uint256'     Keyword.Type
' '           Text.Whitespace
'value'       Name.Variable
')'           Punctuation
';'           Punctuation
'\n    '      Text.Whitespace
'event'       Keyword.Type
' '           Text.Whitespace
'Received'    Name.Variable
'('           Punctuation
'uint256'     Keyword.Type
' '           Text.Whitespace
'time'        Name.Variable
')'           Punctuation
';'           Punctuation
'\n    '      Text.Whitespace
'event'       Keyword.Type
' '           Text.Whitespace
'Withdraw'    Name.Variable
'('           Punctuation
'uint256'     Keyword.Type
' '           Text.Whitespace
'value'       Name.Variable
')'           Punctuation
';'           Punctuation
'\n\n    '    Text.Whitespace
'function'    Keyword.Type
' '           Text.Whitespace
'addRegistry' Name.Variable
'('           Punctuation
'string'      Keyword.Type
' '           Text.Whitespace
'_name'       Name.Variable
','           Punctuation
' '           Text.Whitespace
'uint8'       Keyword.Type
' '           Text.Whitespace
'_type'       Name.Variable
')'           Punctuation
' '           Text.Whitespace
'{'           Punctuation
'\n        '  Text.Whitespace
'AStruct'     Text
' '           Text.Whitespace
'memory'      Keyword.Type
' '           Text.Whitespace
'newItem'     Text
' '           Text.Whitespace
'='           Operator
' '           Text.Whitespace
'AStruct'     Text
'('           Punctuation
'{'           Punctuation
'name'        Text
':'           Operator
' '           Text.Whitespace
'_name'       Text
','           Punctuation
' '           Text.Whitespace
'atype'       Text
':'           Operator
' '           Text.Whitespace
'_type'       Text
'}'           Punctuation
')'           Punctuation
';'           Punctuation
'\n\n        ' Text.Whitespace
'registry'    Text
'['           Punctuation
'msg.sender'  Keyword
']'           Punctuation
' '           Text.Whitespace
'='           Operator
' '           Text.Whitespace
'newItem'     Text
';'           Punctuation
'\n    '      Text.Whitespace
'}'           Punctuation
'\n\n    '    Text.Whitespace
'function'    Keyword.Type
' '           Text.Whitespace
'getHash'     Name.Variable
'('           Punctuation
'AStruct'     Text
' '           Text.Whitespace
'item'        Text
')'           Punctuation
' '           Text.Whitespace
'returns'     Keyword.Type
' '           Text.Whitespace
'('           Punctuation
'uint'        Keyword.Type
')'           Punctuation
' '           Text.Whitespace
'{'           Punctuation
'\n        '  Text.Whitespace
'return'      Keyword.Type
' '           Text.Whitespace
'uint'        Keyword.Type
'('           Punctuation
'keccak256'   Name.Builtin
'('           Punctuation
'item'        Text
'.'           Punctuation
'name'        Text
','           Punctuation
' '           Text.Whitespace
'item'        Text
'.'           Punctuation
'atype'       Text
')'           Punctuation
')'           Punctuation
';'           Punctuation
'\n    '      Text.Whitespace
'}'           Punctuation
'\n\n    '    Text.Whitespace
'function'    Keyword.Type
' '           Text.Whitespace
'pay'         Name.Variable
'('           Punctuation
')'           Punctuation
' '           Text.Whitespace
'public'      Keyword.Type
' '           Text.Whitespace
'payable'     Keyword.Type
' '           Text.Whitespace
'{'           Punctuation
'\n        '  Text.Whitespace
'require'     Keyword.Type
'('           Punctuation
'msg.sender'  Keyword
' '           Text.Whitespace
'='           Operator
'='           Operator
' '           Text.Whitespace
'astronaut'   Text
')'           Punctuation
';'           Punctuation
'\n        '  Text.Whitespace
'state'       Text
' '           Text.Whitespace
'='           Operator
' '           Text.Whitespace
'State'       Text
'.'           Punctuation
'Paid'        Text
';'           Punctuation
'\n        '  Text.Whitespace
'Paid'        Text
'('           Punctuation
'msg.value'   Keyword
')'           Punctuation
';'           Punctuation
'\n    '      Text.Whitespace
'}'           Punctuation
'\n\n    '    Text.Whitespace
'function'    Keyword.Type
' '           Text.Whitespace
'receive'     Name.Variable
'('           Punctuation
')'           Punctuation
' '           Text.Whitespace
'public'      Keyword.Type
' '           Text.Whitespace
'{'           Punctuation
'\n        '  Text.Whitespace
'require'     Keyword.Type
'('           Punctuation
'msg.sender'  Keyword
' '           Text.Whitespace
'='           Operator
'='           Operator
' '           Text.Whitespace
'arbiter'     Text
')'           Punctuation
';'           Punctuation
'\n        '  Text.Whitespace
'require'     Keyword.Type
'('           Punctuation
'state'       Text
' '           Text.Whitespace
'='           Operator
'='           Operator
' '           Text.Whitespace
'State'       Text
'.'           Punctuation
'Paid'        Text
')'           Punctuation
';'           Punctuation
'\n        '  Text.Whitespace
'state'       Text
' '           Text.Whitespace
'='           Operator
' '           Text.Whitespace
'State'       Text
'.'           Punctuation
'Received'    Text
';'           Punctuation
'\n        '  Text.Whitespace
'Received'    Text
'('           Punctuation
'now'         Text
')'           Punctuation
';'           Punctuation
'\n    '      Text.Whitespace
'}'           Punctuation
'\n\n    '    Text.Whitespace
'function'    Keyword.Type
' '           Text.Whitespace
'withdraw'    Name.Variable
'('           Punctuation
')'           Punctuation
' '           Text.Whitespace
'public'      Keyword.Type
' '           Text.Whitespace
'{'           Punctuation
'\n        '  Text.Whitespace
'require'     Keyword.Type
'('           Punctuation
'msg.sender'  Keyword
' '           Text.Whitespace
'='           Operator
'='           Operator
' '           Text.Whitespace
'shipper'     Text
')'           Punctuation
';'           Punctuation
'\n        '  Text.Whitespace
'require'     Keyword.Type
'('           Punctuation
'state'       Text
' '           Text.Whitespace
'='           Operator
'='           Operator
' '           Text.Whitespace
'State'       Text
'.'           Punctuation
'Received'    Text
')'           Punctuation
';'           Punctuation
'\n        '  Text.Whitespace
'state'       Text
' '           Text.Whitespace
'='           Operator
' '           Text.Whitespace
'State'       Text
'.'           Punctuation
'Withdrawn'   Text
';'           Punctuation
'\n        '  Text.Whitespace
'Withdraw'    Text
'('           Punctuation
'this'        Keyword.Type
'.'           Punctuation
'balance'     Text
')'           Punctuation
';'           Punctuation
'\n        '  Text.Whitespace
'shipper'     Text
'.'           Punctuation
'transfer'    Text
'('           Punctuation
'this'        Keyword.Type
'.'           Punctuation
'balance'     Text
')'           Punctuation
';'           Punctuation
'\n    '      Text.Whitespace
'}'           Punctuation
'\n\n    '    Text.Whitespace
'function'    Keyword.Type
' '           Text.Whitespace
'max'         Name.Variable
'('           Punctuation
'uint'        Keyword.Type
' '           Text.Whitespace
'a'           Name.Variable
','           Punctuation
' '           Text.Whitespace
'uint'        Keyword.Type
' '           Text.Whitespace
'b'           Name.Variable
')'           Punctuation
' '           Text.Whitespace
'public'      Keyword.Type
' '           Text.Whitespace
'returns'     Keyword.Type
' '           Text.Whitespace
'('           Punctuation
'uint'        Keyword.Type
')'           Punctuation
' '           Text.Whitespace
'{'           Punctuation
'\n        '  Text.Whitespace
'if'          Keyword.Type
' '           Text.Whitespace
'('           Punctuation
'a'           Text
' '           Text.Whitespace
'>'           Operator
' '           Text.Whitespace
'b'           Text
' '           Text.Whitespace
'&'           Operator
'&'           Operator
' '           Text.Whitespace
'b'           Text
' '           Text.Whitespace
'<'           Operator
' '           Text.Whitespace
'a'           Text
')'           Punctuation
' '           Text.Whitespace
'{'           Punctuation
'\n            ' Text.Whitespace
'return'      Keyword.Type
' '           Text.Whitespace
'a'           Text
';'           Punctuation
'\n        '  Text.Whitespace
'}'           Punctuation
' '           Text.Whitespace
'else'        Keyword.Type
' '           Text.Whitespace
'{'           Punctuation
'\n            ' Text.Whitespace
'return'      Keyword.Type
' '           Text.Whitespace
'b'           Text
';'           Punctuation
'\n        '  Text.Whitespace
'}'           Punctuation
'\n    '      Text.Whitespace
'}'           Punctuation
'\n\n    '    Text.Whitespace
'function'    Keyword.Type
' '           Text.Whitespace
'operators'   Name.Variable
'('           Punctuation
')'           Punctuation
' '           Text.Whitespace
'public'      Keyword.Type
' '           Text.Whitespace
'{'           Punctuation
'\n        '  Text.Whitespace
'uint'        Keyword.Type
' '           Text.Whitespace
'a'           Name.Variable
' '           Text.Whitespace
'='           Operator
' '           Text.Whitespace
'20'          Literal.Number.Decimal
';'           Punctuation
'\n        '  Text.Whitespace
'uint'        Keyword.Type
' '           Text.Whitespace
'b'           Name.Variable
' '           Text.Whitespace
'='           Operator
' '           Text.Whitespace
'10'          Literal.Number.Decimal
';'           Punctuation
'\n        '  Text.Whitespace
'// arithmetic\n' Comment.Single

'        '    Text.Whitespace
'uint'        Keyword.Type
' '           Text.Whitespace
'_sum'        Name.Variable
' '           Text.Whitespace
'='           Operator
' '           Text.Whitespace
'a'           Text
' '           Text.Whitespace
'+'           Operator
' '           Text.Whitespace
'b'           Text
';'           Punctuation
'\n        '  Text.Whitespace
'uint'        Keyword.Type
' '           Text.Whitespace
'_diff'       Name.Variable
' '           Text.Whitespace
'='           Operator
' '           Text.Whitespace
'a'           Text
' '           Text.Whitespace
'-'           Operator
' '           Text.Whitespace
'b'           Text
';'           Punctuation
'\n        '  Text.Whitespace
'uint'        Keyword.Type
' '           Text.Whitespace
'_mul'        Name.Variable
' '           Text.Whitespace
'='           Operator
' '           Text.Whitespace
'a'           Text
' '           Text.Whitespace
'*'           Operator
' '           Text.Whitespace
'b'           Text
';'           Punctuation
'\n        '  Text.Whitespace
'uint'        Keyword.Type
' '           Text.Whitespace
'_div'        Name.Variable
' '           Text.Whitespace
'='           Operator
' '           Text.Whitespace
'a'           Text
' '           Text.Whitespace
'/'           Operator
' '           Text.Whitespace
'b'           Text
';'           Punctuation
'\n        '  Text.Whitespace
'uint'        Keyword.Type
' '           Text.Whitespace
'_mod'        Name.Variable
' '           Text.Whitespace
'='           Operator
' '           Text.Whitespace
'a'           Text
' '           Text.Whitespace
'%'           Operator
' '           Text.Whitespace
'b'           Text
';'           Punctuation
'\n        '  Text.Whitespace
'uint'        Keyword.Type
' '           Text.Whitespace
'_dec'        Name.Variable
' '           Text.Whitespace
'='           Operator
' '           Text.Whitespace
'-'           Operator
'-'           Operator
'b'           Text
';'           Punctuation
'\n        '  Text.Whitespace
'uint'        Keyword.Type
' '           Text.Whitespace
'_inc'        Name.Variable
' '           Text.Whitespace
'='           Operator
' '           Text.Whitespace
'+'           Operator
'+'           Operator
'a'           Text
';'           Punctuation
'\n\n        ' Text.Whitespace
'// comparison\n' Comment.Single

'        '    Text.Whitespace
'bool'        Keyword.Type
' '           Text.Whitespace
'_eq'         Name.Variable
' '           Text.Whitespace
'='           Operator
' '           Text.Whitespace
'a'           Text
' '           Text.Whitespace
'='           Operator
'='           Operator
' '           Text.Whitespace
'b'           Text
';'           Punctuation
'\n        '  Text.Whitespace
'bool'        Keyword.Type
' '           Text.Whitespace
'_noteq'      Name.Variable
' '           Text.Whitespace
'='           Operator
' '           Text.Whitespace
'a'           Text
' '           Text.Whitespace
'!'           Operator
'='           Operator
' '           Text.Whitespace
'b'           Text
';'           Punctuation
'\n        '  Text.Whitespace
'bool'        Keyword.Type
' '           Text.Whitespace
'_greater'    Name.Variable
' '           Text.Whitespace
'='           Operator
' '           Text.Whitespace
'a'           Text
' '           Text.Whitespace
'>'           Operator
' '           Text.Whitespace
'b'           Text
';'           Punctuation
'\n        '  Text.Whitespace
'bool'        Keyword.Type
' '           Text.Whitespace
'_less'       Name.Variable
' '           Text.Whitespace
'='           Operator
' '           Text.Whitespace
'a'           Text
' '           Text.Whitespace
'<'           Operator
' '           Text.Whitespace
'b'           Text
';'           Punctuation
'\n        '  Text.Whitespace
'bool'        Keyword.Type
' '           Text.Whitespace
'_geq'        Name.Variable
' '           Text.Whitespace
'='           Operator
' '           Text.Whitespace
'a'           Text
' '           Text.Whitespace
'>'           Operator
'='           Operator
' '           Text.Whitespace
'b'           Text
';'           Punctuation
'\n        '  Text.Whitespace
'bool'        Keyword.Type
' '           Text.Whitespace
'_leq'        Name.Variable
' '           Text.Whitespace
'='           Operator
' '           Text.Whitespace
'a'           Text
' '           Text.Whitespace
'<'           Operator
'='           Operator
' '           Text.Whitespace
'b'           Text
';'           Punctuation
'\n\n        ' Text.Whitespace
'// logical boolean\n' Comment.Single

'        '    Text.Whitespace
'bool'        Keyword.Type
' '           Text.Whitespace
'x'           Name.Variable
' '           Text.Whitespace
'='           Operator
' '           Text.Whitespace
'true'        Keyword.Type
';'           Punctuation
'\n        '  Text.Whitespace
'bool'        Keyword.Type
' '           Text.Whitespace
'y'           Name.Variable
' '           Text.Whitespace
'='           Operator
' '           Text.Whitespace
'false'       Keyword.Type
';'           Punctuation
'\n        '  Text.Whitespace
'bool'        Keyword.Type
' '           Text.Whitespace
'_and'        Name.Variable
' '           Text.Whitespace
'='           Operator
' '           Text.Whitespace
'x'           Text
' '           Text.Whitespace
'&'           Operator
'&'           Operator
' '           Text.Whitespace
'y'           Text
';'           Punctuation
'\n        '  Text.Whitespace
'bool'        Keyword.Type
' '           Text.Whitespace
'_or'         Name.Variable
' '           Text.Whitespace
'='           Operator
' '           Text.Whitespace
'a'           Text
' '           Text.Whitespace
'|'           Operator
'|'           Operator
' '           Text.Whitespace
'b'           Text
';'           Punctuation
'\n        '  Text.Whitespace
'bool'        Keyword.Type
' '           Text.Whitespace
'_not'        Name.Variable
' '           Text.Whitespace
'='           Operator
' '           Text.Whitespace
'!'           Operator
'a'           Text
';'           Punctuation
'\n\n        ' Text.Whitespace
'// bitwise\n' Comment.Single

'        '    Text.Whitespace
'uint64'      Keyword.Type
' '           Text.Whitespace
'i'           Name.Variable
' '           Text.Whitespace
'='           Operator
' '           Text.Whitespace
'20'          Literal.Number.Decimal
';'           Punctuation
'\n        '  Text.Whitespace
'uint64'      Keyword.Type
' '           Text.Whitespace
'j'           Name.Variable
' '           Text.Whitespace
'='           Operator
' '           Text.Whitespace
'10'          Literal.Number.Decimal
';'           Punctuation
'\n        '  Text.Whitespace
'uint64'      Keyword.Type
' '           Text.Whitespace
'_bitand'     Name.Variable
' '           Text.Whitespace
'='           Operator
' '           Text.Whitespace
'i'           Text
' '           Text.Whitespace
'&'           Operator
' '           Text.Whitespace
'j'           Text
';'           Punctuation
'\n        '  Text.Whitespace
'uint64'      Keyword.Type
' '           Text.Whitespace
'_bitor'      Name.Variable
' '           Text.Whitespace
'='           Operator
' '           Text.Whitespace
'i'           Text
' '           Text.Whitespace
'|'           Operator
' '           Text.Whitespace
'j'           Text
';'           Punctuation
'\n        '  Text.Whitespace
'uint64'      Keyword.Type
' '           Text.Whitespace
'_bitxor'     Name.Variable
' '           Text.Whitespace
'='           Operator
' '           Text.Whitespace
'i'           Text
' '           Text.Whitespace
'^'           Operator
' '           Text.Whitespace
'j'           Text
';'           Punctuation
'\n        '  Text.Whitespace
'uint64'      Keyword.Type
' '           Text.Whitespace
'_leftshift'  Name.Variable
' '           Text.Whitespace
'='           Operator
' '           Text.Whitespace
'i'           Text
' '           Text.Whitespace
'<'           Operator
'<'           Operator
' '           Text.Whitespace
'j'           Text
';'           Punctuation
'\n        '  Text.Whitespace
'uint64'      Keyword.Type
' '           Text.Whitespace
'_rightshift' Name.Variable
' '           Text.Whitespace
'='           Operator
' '           Text.Whitespace
'i'           Text
' '           Text.Whitespace
'>'           Operator
'>'           Operator
' '           Text.Whitespace
'j'           Text
';'           Punctuation
'\n        '  Text.Whitespace
'uint64'      Keyword.Type
' '           Text.Whitespace
'_bitnot'     Name.Variable
' '           Text.Whitespace
'='           Operator
' '           Text.Whitespace
'~'           Operator
'i'           Text
';'           Punctuation
'\n    '      Text.Whitespace
'}'           Punctuation
'\n'          Text.Whitespace

'}'           Punctuation
'\n'          Text.Whitespace
