@swizec/loljs
Version:
LOLCODE to JavaScript compiler by @markwatkinson, adapted for modern JS
1 lines • 206 kB
Source Map (JSON)
{"version":3,"file":"loljs.mjs","sources":["../src/ast.js","../parser.js","../src/lol.js"],"sourcesContent":["\"use strict\";\nvar lol = lol || {};\nlol.ast = {};\n\nlol.ast.Node = function (location, name) {\n this._location = location;\n this._name = name;\n};\n\nlol.ast.Body = function (location) {\n lol.ast.Node.call(this, location, 'Body');\n this.lines = [];\n};\nlol.ast.Body.prototype = Object.create(lol.ast.Node.prototype);\nlol.ast.Body.prototype.push = function (line) {\n this.lines.push(line);\n};\n\nlol.ast.Declaration = function (location, name, assignment) {\n lol.ast.Node.call(this, location, 'Declaration');\n this.name = name;\n this.value = assignment || null;\n};\nlol.ast.Declaration.prototype = Object.create(lol.ast.Node.prototype);\n\nlol.ast.Assignment = function (location, name, value) {\n lol.ast.Node.call(this, location, 'Assignment');\n this.name = name;\n this.value = value;\n};\nlol.ast.Assignment.prototype = Object.create(lol.ast.Node.prototype);\n\n\nlol.ast.Indexer = function (location, lhs, rhs) {\n lol.ast.Node.call(this, location, 'Indexer');\n this.lhs = lhs;\n this.rhs = rhs;\n}\nlol.ast.Indexer.prototype = Object.create(lol.ast.Node.prototype);\n\n\nlol.ast.Identifier = function (location, name) {\n lol.ast.Node.call(this, location, 'Identifier');\n this.name = name;\n};\nlol.ast.Identifier.prototype = Object.create(lol.ast.Node.prototype);\n\nlol.ast.Literal = function (location, value) {\n lol.ast.Node.call(this, location, 'Literal');\n var self = this;\n this._wrapped = false;\n this._primitive = true;\n if (typeof value === 'string') {\n var delim = value.charAt(0);\n value = value.slice(1, -1);\n // FIXME: we are going to let variable interpolation be the runtime's\n // problem, but that means a dynamically constructed string could end\n // up being interpolated. Which is wrong.\n value = value.replace(/:(\\((.*?)\\)|.)/g, function ($0, $1, $2) {\n var ret;\n if ($1.charAt(0) === '(') {\n ret = String.fromCharCode(parseInt($2, 16));\n } else {\n switch ($1) {\n case ')':\n ret = '\\n';\n break;\n case '>':\n ret = '\\t';\n break;\n case '\"':\n case \"'\":\n case ':':\n ret = $1;\n break;\n default:\n ret = $0;\n }\n }\n return ret;\n });\n }\n this.value = value;\n};\nlol.ast.Literal.prototype = Object.create(lol.ast.Node.prototype);\n\nlol.ast.ArgList = function (location, args) {\n lol.ast.Node.call(this, location, 'ArgList');\n this.values = args || [];\n};\nlol.ast.ArgList.prototype = Object.create(lol.ast.Node.prototype);\nlol.ast.ArgList.prototype.push = function (v) {\n this.values.push(v);\n};\n\nlol.ast.FunctionCall = function (location, name, args) {\n lol.ast.Node.call(this, location, 'FunctionCall');\n this.name = name;\n this.args = args;\n};\nlol.ast.FunctionCall.prototype = Object.create(lol.ast.Node.prototype);\n\nlol.ast.FunctionDefinition = function (location, name, args, body) {\n lol.ast.Node.call(this, location, 'FunctionDefinition');\n this.name = name;\n this.args = args;\n this.body = body;\n};\nlol.ast.FunctionDefinition.prototype = Object.create(lol.ast.Node.prototype);\n\nlol.ast.If = function (location, body) {\n lol.ast.Node.call(this, location, 'If');\n this.condition = null;\n this.body = body;\n this.elseIfs = [];\n this.elseBody = null;\n};\nlol.ast.If.prototype = Object.create(lol.ast.Node.prototype);\n\nlol.ast.Return = function (location, expression) {\n lol.ast.Node.call(this, location, 'Return');\n this.expression = expression || null;\n\n};\nlol.ast.Return.prototype = Object.create(lol.ast.Node.prototype);\n\n\nlol.ast.LoopOperation = function (location, command, symbol) {\n lol.ast.Node.call(this, location, 'LoopOperation');\n this.command = command;\n this.symbol = symbol;\n};\nlol.ast.LoopOperation.prototype = Object.create(lol.ast.Node.prototype);\n\nlol.ast.LoopCondition = function (location, check, expression) {\n lol.ast.Node.call(this, location, 'LoopCondition');\n this.check = check;\n this.expression = expression;\n};\nlol.ast.LoopCondition.prototype = Object.create(lol.ast.Node.prototype);\n\nlol.ast.Loop = function (location, body, op, condition) {\n lol.ast.Node.call(this, location, 'Loop');\n this.body = body;\n this.op = op || null;\n this.condition = condition || null;\n};\nlol.ast.Loop.prototype = Object.create(lol.ast.Node.prototype);\n\nlol.ast.NoOp = function (location) {\n lol.ast.Node.call(this, location, 'NoOp');\n};\nlol.ast.NoOp.prototype = Object.create(lol.ast.Node.prototype);\n\nlol.ast.Visible = function (location, expression) {\n lol.ast.Node.call(this, location, 'Visible');\n this.expression = expression;\n};\nlol.ast.Visible.prototype = Object.create(lol.ast.Node.prototype);\n\nlol.ast.Gimmeh = function (location, variable) {\n lol.ast.Node.call(this, location, 'Gimmeh');\n this.variable = variable;\n};\nlol.ast.Gimmeh.prototype = Object.create(lol.ast.Node.prototype);\n\n\nlol.ast.Cast = function (location, expression, type) {\n lol.ast.Node.call(this, location, 'Cast');\n this.expression = expression;\n this.type = type;\n};\nlol.ast.Cast.prototype = Object.create(lol.ast.Node.prototype);\n\n\nlol.ast.Breakpoint = function (location) {\n lol.ast.Node.call(this, location, 'Breakpoint');\n};\nlol.ast.Breakpoint.prototype = Object.create(lol.ast.Node.prototype);\n\n\nlol.ast.Switch = function (location, branches) {\n lol.ast.Node.call(this, location, 'Switch');\n this.branches = branches || [];\n};\nlol.ast.Switch.prototype = Object.create(lol.ast.Node.prototype);\n\nlol.ast.Case = function (location, condition, body) {\n lol.ast.Node.call(this, location, 'Case');\n this.condition = condition;\n this.body = body;\n};\nlol.ast.Case.prototype = Object.create(lol.ast.Node.prototype);\n\nlol.ast.CaseDefault = function (location, body) {\n lol.ast.Node.call(this, location, 'CaseDefault');\n this.body = body;\n};\nlol.ast.CaseDefault.prototype = Object.create(lol.ast.Node.prototype);\n\nlol.ast.Break = function (location) {\n lol.ast.Node.call(this, location, 'Break');\n}\nlol.ast.Break.prototype = Object.create(lol.ast.Node.prototype);\n\nexport default lol.ast;","/* parser generated by jison 0.4.13 */\n/*\n Returns a Parser object of the following structure:\n\n Parser: {\n yy: {}\n }\n\n Parser.prototype: {\n yy: {},\n trace: function(),\n symbols_: {associative list: name ==> number},\n terminals_: {associative list: number ==> name},\n productions_: [...],\n performAction: function anonymous(yytext, yyleng, yylineno, yy, yystate, $$, _$),\n table: [...],\n defaultActions: {...},\n parseError: function(str, hash),\n parse: function(input),\n\n lexer: {\n EOF: 1,\n parseError: function(str, hash),\n setInput: function(input),\n input: function(),\n unput: function(str),\n more: function(),\n less: function(n),\n pastInput: function(),\n upcomingInput: function(),\n showPosition: function(),\n test_match: function(regex_match_array, rule_index),\n next: function(),\n lex: function(),\n begin: function(condition),\n popState: function(),\n _currentRules: function(),\n topState: function(),\n pushState: function(condition),\n\n options: {\n ranges: boolean (optional: true ==> token location info will include a .range[] member)\n flex: boolean (optional: true ==> flex-like lexing behaviour where the rules are tested exhaustively to find the longest match)\n backtrack_lexer: boolean (optional: true ==> lexer regexes are tested in order and for each matching regex the action code is invoked; the lexer terminates the scan when a token is returned by the action code)\n },\n\n performAction: function(yy, yy_, $avoiding_name_collisions, YY_START),\n rules: [...],\n conditions: {associative list: name ==> set},\n }\n }\n\n\n token location info (@$, _$, etc.): {\n first_line: n,\n last_line: n,\n first_column: n,\n last_column: n,\n range: [start_number, end_number] (where the numbers are indexes into the input string, regular zero-based)\n }\n\n\n the parseError function receives a 'hash' object with these members for lexer and parser errors: {\n text: (matched text)\n token: (the produced terminal token, if any)\n line: (yylineno)\n }\n while parser (grammar) errors will also provide these members, i.e. parser errors deliver a superset of attributes: {\n loc: (yylloc)\n expected: (string describing the set of expected tokens)\n recoverable: (boolean: TRUE when the parser has a error recovery rule available for this particular error)\n }\n*/\n\nimport ast from \"./src/ast\";\n\nvar parser = (function() {\n var parser = {\n trace: function trace() {},\n yy: {},\n symbols_: {\n error: 2,\n root: 3,\n body: 4,\n eol: 5,\n NEWLINE: 6,\n COMMA: 7,\n EOF: 8,\n arg_end: 9,\n MKAY: 10,\n arg_list: 11,\n exp: 12,\n SEP: 13,\n function_call: 14,\n IDENTIFIER: 15,\n function_def_arg_list: 16,\n YR: 17,\n function_def: 18,\n HOW_DUZ_I: 19,\n IF_U_SAY_SO: 20,\n loop_operation: 21,\n UPPIN: 22,\n NERFIN: 23,\n loop_condition: 24,\n TIL: 25,\n WILE: 26,\n loop_end: 27,\n IM_OUTTA_YR: 28,\n loop: 29,\n IM_IN_YR: 30,\n wtf_branch: 31,\n OMG: 32,\n OMGWTF: 33,\n wtf: 34,\n WTF: 35,\n OIC: 36,\n type: 37,\n TYPE: 38,\n NOOB: 39,\n simple_exp: 40,\n indexer: 41,\n BIN_OP: 42,\n P_BIN_OP: 43,\n UN_OP: 44,\n NUMBER: 45,\n YARN: 46,\n TROOF: 47,\n \"(\": 48,\n \")\": 49,\n CAST_MAEK: 50,\n A: 51,\n index: 52,\n \"!\": 53,\n array_dec: 54,\n NOTHING: 55,\n var_dec: 56,\n VAR_DEC: 57,\n ITS: 58,\n ITS_GOT: 59,\n conditional_inner: 60,\n O_RLY: 61,\n YA_RLY: 62,\n MEBBE: 63,\n NO_WAI: 64,\n conditional: 65,\n line: 66,\n assignment: 67,\n R: 68,\n R_GOT: 69,\n O_NVM: 70,\n GTFO: 71,\n FOUND_YR: 72,\n VISIBLE: 73,\n GIMMEH: 74,\n CAST_IS_NOW: 75,\n HALP: 76,\n $accept: 0,\n $end: 1\n },\n terminals_: {\n 2: \"error\",\n 6: \"NEWLINE\",\n 7: \"COMMA\",\n 8: \"EOF\",\n 10: \"MKAY\",\n 13: \"SEP\",\n 15: \"IDENTIFIER\",\n 17: \"YR\",\n 19: \"HOW_DUZ_I\",\n 20: \"IF_U_SAY_SO\",\n 22: \"UPPIN\",\n 23: \"NERFIN\",\n 25: \"TIL\",\n 26: \"WILE\",\n 28: \"IM_OUTTA_YR\",\n 30: \"IM_IN_YR\",\n 32: \"OMG\",\n 33: \"OMGWTF\",\n 35: \"WTF\",\n 36: \"OIC\",\n 38: \"TYPE\",\n 39: \"NOOB\",\n 42: \"BIN_OP\",\n 43: \"P_BIN_OP\",\n 44: \"UN_OP\",\n 45: \"NUMBER\",\n 46: \"YARN\",\n 47: \"TROOF\",\n 48: \"(\",\n 49: \")\",\n 50: \"CAST_MAEK\",\n 51: \"A\",\n 53: \"!\",\n 55: \"NOTHING\",\n 57: \"VAR_DEC\",\n 58: \"ITS\",\n 59: \"ITS_GOT\",\n 61: \"O_RLY\",\n 62: \"YA_RLY\",\n 63: \"MEBBE\",\n 64: \"NO_WAI\",\n 68: \"R\",\n 69: \"R_GOT\",\n 70: \"O_NVM\",\n 71: \"GTFO\",\n 72: \"FOUND_YR\",\n 73: \"VISIBLE\",\n 74: \"GIMMEH\",\n 75: \"CAST_IS_NOW\",\n 76: \"HALP\"\n },\n productions_: [\n 0,\n [3, 1],\n [5, 1],\n [5, 1],\n [5, 1],\n [9, 1],\n [9, 1],\n [11, 1],\n [11, 3],\n [14, 3],\n [16, 2],\n [16, 4],\n [16, 0],\n [18, 6],\n [21, 3],\n [21, 3],\n [24, 2],\n [24, 2],\n [27, 2],\n [27, 1],\n [29, 5],\n [29, 7],\n [31, 4],\n [31, 3],\n [31, 5],\n [31, 4],\n [34, 4],\n [34, 3],\n [37, 1],\n [37, 1],\n [40, 1],\n [40, 3],\n [40, 4],\n [40, 2],\n [40, 1],\n [40, 1],\n [40, 1],\n [40, 1],\n [40, 1],\n [40, 1],\n [40, 3],\n [40, 4],\n [52, 1],\n [52, 1],\n [52, 3],\n [41, 3],\n [41, 3],\n [12, 1],\n [54, 1],\n [54, 1],\n [54, 3],\n [56, 4],\n [56, 4],\n [56, 2],\n [60, 5],\n [60, 5],\n [60, 4],\n [65, 2],\n [4, 1],\n [4, 2],\n [4, 2],\n [4, 3],\n [67, 3],\n [67, 3],\n [67, 3],\n [67, 3],\n [66, 1],\n [66, 1],\n [66, 1],\n [66, 1],\n [66, 2],\n [66, 1],\n [66, 1],\n [66, 2],\n [66, 2],\n [66, 3],\n [66, 1],\n [66, 1],\n [66, 1],\n [66, 1]\n ],\n performAction: function anonymous(\n yytext,\n yyleng,\n yylineno,\n yy,\n yystate /* action[1] */,\n $$ /* vstack */,\n _$ /* lstack */\n ) {\n /* this == yyval */\n\n var $0 = $$.length - 1;\n switch (yystate) {\n case 1:\n return $$[$0];\n break;\n case 2:\n this.$ = $$[$0];\n break;\n case 3:\n this.$ = $$[$0];\n break;\n case 4:\n this.$ = $$[$0];\n break;\n case 5:\n this.$ = $$[$0];\n break;\n case 7:\n this.$ = new ast.ArgList(this._$, [$$[$0]]);\n break;\n case 8:\n $$[$0 - 2].push($$[$0]);\n this.$ = $$[$0 - 2];\n\n break;\n case 9:\n this.$ = new ast.FunctionCall(\n this._$,\n $$[$0 - 2],\n $$[$0 - 1]\n );\n break;\n case 10:\n this.$ = [$$[$0]];\n break;\n case 11:\n $$[$0 - 3].push($$[$0]);\n this.$ = $$[$0 - 3];\n break;\n case 12:\n this.$ = [];\n break;\n case 13:\n this.$ = new ast.FunctionDefinition(\n this._$,\n $$[$0 - 4],\n $$[$0 - 3],\n $$[$0 - 1]\n );\n break;\n case 14:\n this.$ = new ast.LoopOperation(this._$, \"inc\", $$[$0]);\n break;\n case 15:\n this.$ = new ast.LoopOperation(this._$, \"dec\", $$[$01]);\n break;\n case 16:\n this.$ = new ast.LoopCondition(this._$, \"until\", $$[$0]);\n break;\n case 17:\n this.$ = new ast.LoopCondition(this._$, \"while\", $$[$0]);\n break;\n case 18:\n this.$ = $$[$0 - 1];\n break;\n case 19:\n this.$ = $$[$0];\n break;\n case 20:\n this.$ = new ast.Loop(this._$, $$[$0 - 1]);\n break;\n case 21:\n this.$ = new ast.Loop(\n this._$,\n $$[$0 - 1],\n $$[$0 - 4],\n $$[$0 - 3]\n );\n\n break;\n case 22:\n this.$ = [];\n this.$.push(new ast.Case(this._$, $$[$0 - 2], $$[$0]));\n\n break;\n case 23:\n this.$ = [];\n this.$.push(new ast.CaseDefault(this._$, $$[$0]));\n\n break;\n case 24:\n $$[$0 - 4].push(new ast.Case(this._$, $$[$0 - 2], $$[$0]));\n this.$ = $$[$0 - 4];\n\n break;\n case 25:\n $$[$0 - 3].push(new ast.CaseDefault(this._$, $$[$0]));\n this.$ = $$[$0 - 3];\n\n break;\n case 26:\n this.$ = new ast.Switch(this._$, $$[$0 - 1]);\n\n break;\n case 27:\n this.$ = new ast.Switch(this._$);\n\n break;\n case 28:\n this.$ = $$[$0];\n break;\n case 29:\n this.$ = $$[$0];\n break;\n case 30:\n this.$ = $$[$0];\n break;\n case 31:\n var args = new ast.ArgList(this._$, [$$[$0 - 2], $$[$0]]);\n this.$ = new ast.FunctionCall(this._$, $$[$0 - 1], args);\n\n break;\n case 32:\n var args = new ast.ArgList(this._$, [$$[$0 - 2], $$[$0]]);\n this.$ = new ast.FunctionCall(this._$, $$[$0 - 3], args);\n\n break;\n case 33:\n var args = new ast.ArgList(this._$, [$$[$0]]);\n var fName = $$[$0 - 1].replace(/\\s+/g, \" \");\n this.$ = new ast.FunctionCall(this._$, fName, args);\n\n break;\n case 34:\n this.$ = $$[$0];\n break;\n case 35:\n this.$ = new ast.Literal(this._$, Number($$[$0]));\n break;\n case 36:\n this.$ = new ast.Literal(this._$, $$[$0]);\n break;\n case 37:\n this.$ = new ast.Literal(\n this._$,\n $$[$0].toLowerCase() === \"win\"\n );\n break;\n case 38:\n this.$ = new ast.Literal(this._$, null);\n break;\n case 39:\n this.$ = new ast.Identifier(this._$, $$[$0]);\n break;\n case 40:\n this.$ = $$[$0 - 1];\n break;\n case 41:\n this.$ = new ast.Cast(this._$, $$[$0 - 2], $$[$0]);\n break;\n case 42:\n this.$ = new ast.Literal(this._$, Number($$[$0]));\n break;\n case 43:\n this.$ = new ast.Identifier(this._$, $$[$0]);\n break;\n case 44:\n this.$ = $$[$0 - 1];\n break;\n case 45:\n this.$ = new ast.Indexer(this._$, $$[$0 - 2], $$[$0]);\n\n break;\n case 46:\n this.$ = new ast.Indexer(this._$, $$[$0 - 2], $$[$0]);\n\n break;\n case 47:\n this.$ = $$[$0];\n break;\n case 48:\n this.$ = new ast.Literal(this._$, [$$[$0]]);\n break;\n case 49:\n this.$ = new ast.Literal(this._$, []);\n break;\n case 50:\n $$[$0 - 2].value.push($$[$0]);\n this.$ = $$[$0 - 2];\n\n break;\n case 51:\n this.$ = new ast.Declaration(this._$, $$[$0 - 2], $$[$0]);\n break;\n case 52:\n this.$ = new ast.Declaration(this._$, $$[$0 - 2], $$[$0]);\n break;\n case 53:\n this.$ = new ast.Declaration(this._$, $$[$0]);\n break;\n case 54:\n this.$ = new ast.If(this._$, $$[$0]);\n break;\n case 55:\n var elseIf = new ast.If(this._$, $$[$0]);\n elseIf.condition = $$[$0 - 2];\n $$[$0 - 4].elseIfs.push(elseIf);\n this.$ = $$[$0 - 4];\n\n break;\n case 56:\n $$[$0 - 3].elseBody = $$[$0];\n this.$ = $$[$0 - 3];\n break;\n case 57:\n this.$ = $$[$0 - 1];\n break;\n case 58:\n this.$ = new ast.Body(this._$);\n break;\n case 59:\n this.$ = new ast.Body(this._$);\n this.$.push($$[$0 - 1]);\n\n break;\n case 60:\n this.$ = $$[$0 - 1];\n\n break;\n case 61:\n $$[$0 - 2].push($$[$0 - 1]);\n this.$ = $$[$0 - 2];\n\n break;\n case 62:\n this.$ = new ast.Assignment(this._$, $$[$0 - 2], $$[$0]);\n break;\n case 63:\n this.$ = new ast.Assignment(this._$, $$[$0 - 2], $$[$0]);\n break;\n case 64:\n this.$ = new ast.Assignment(this._$, $$[$0 - 2], $$[$0]);\n break;\n case 65:\n this.$ = new ast.Assignment(this._$, $$[$0 - 2], $$[$0]);\n break;\n case 66:\n this.$ = $$[$0];\n break;\n case 67:\n this.$ = $$[$0];\n break;\n case 68:\n this.$ = new ast.NoOp(this._$);\n break;\n case 69:\n this.$ = new ast.Break(this._$);\n break;\n case 70:\n this.$ = new ast.Return(this._$, $$[$0]);\n break;\n case 71:\n this.$ = $$[$0];\n break;\n case 72:\n this.$ = $$[$0];\n break;\n case 73:\n this.$ = new ast.Visible(this._$, $$[$0]);\n break;\n case 74:\n this.$ = new ast.Gimmeh(this._$, $$[$0]);\n break;\n case 75:\n var ident = new ast.Identifier(this._$, $$[$0 - 2]);\n var cast = (this.$ = new ast.Cast(this._$, ident, $$[$0]));\n var assignment = new ast.Assignment(\n this._$,\n $$[$0 - 2],\n cast\n );\n this.$ = assignment;\n\n break;\n case 76:\n this.$ = $$[$0];\n break;\n case 77:\n this.$ = $$[$0];\n break;\n case 78:\n this.$ = new ast.Breakpoint(this._$);\n break;\n case 79:\n this.$ = $$[$0];\n break;\n }\n },\n table: [\n {\n 3: 1,\n 4: 2,\n 5: 3,\n 6: [1, 5],\n 7: [1, 6],\n 8: [1, 7],\n 12: 14,\n 14: 31,\n 15: [1, 17],\n 18: 19,\n 19: [1, 27],\n 29: 9,\n 30: [1, 23],\n 34: 21,\n 35: [1, 28],\n 39: [1, 35],\n 40: 25,\n 41: 24,\n 43: [1, 29],\n 44: [1, 30],\n 45: [1, 32],\n 46: [1, 33],\n 47: [1, 34],\n 48: [1, 36],\n 50: [1, 37],\n 56: 8,\n 57: [1, 22],\n 60: 26,\n 61: [1, 38],\n 65: 18,\n 66: 4,\n 67: 13,\n 70: [1, 10],\n 71: [1, 11],\n 72: [1, 12],\n 73: [1, 15],\n 74: [1, 16],\n 76: [1, 20]\n },\n { 1: [3] },\n {\n 1: [2, 1],\n 5: 39,\n 6: [1, 5],\n 7: [1, 6],\n 8: [1, 7],\n 12: 14,\n 14: 31,\n 15: [1, 17],\n 18: 19,\n 19: [1, 27],\n 29: 9,\n 30: [1, 23],\n 34: 21,\n 35: [1, 28],\n 39: [1, 35],\n 40: 25,\n 41: 24,\n 43: [1, 29],\n 44: [1, 30],\n 45: [1, 32],\n 46: [1, 33],\n 47: [1, 34],\n 48: [1, 36],\n 50: [1, 37],\n 56: 8,\n 57: [1, 22],\n 60: 26,\n 61: [1, 38],\n 65: 18,\n 66: 40,\n 67: 13,\n 70: [1, 10],\n 71: [1, 11],\n 72: [1, 12],\n 73: [1, 15],\n 74: [1, 16],\n 76: [1, 20]\n },\n {\n 1: [2, 58],\n 6: [2, 58],\n 7: [2, 58],\n 8: [2, 58],\n 15: [2, 58],\n 19: [2, 58],\n 20: [2, 58],\n 28: [2, 58],\n 30: [2, 58],\n 32: [2, 58],\n 33: [2, 58],\n 35: [2, 58],\n 36: [2, 58],\n 39: [2, 58],\n 43: [2, 58],\n 44: [2, 58],\n 45: [2, 58],\n 46: [2, 58],\n 47: [2, 58],\n 48: [2, 58],\n 50: [2, 58],\n 57: [2, 58],\n 61: [2, 58],\n 63: [2, 58],\n 64: [2, 58],\n 70: [2, 58],\n 71: [2, 58],\n 72: [2, 58],\n 73: [2, 58],\n 74: [2, 58],\n 76: [2, 58]\n },\n { 5: 41, 6: [1, 5], 7: [1, 6], 8: [1, 7] },\n {\n 1: [2, 2],\n 6: [2, 2],\n 7: [2, 2],\n 8: [2, 2],\n 10: [2, 2],\n 13: [2, 2],\n 15: [2, 2],\n 19: [2, 2],\n 20: [2, 2],\n 28: [2, 2],\n 30: [2, 2],\n 32: [2, 2],\n 33: [2, 2],\n 35: [2, 2],\n 36: [2, 2],\n 39: [2, 2],\n 42: [2, 2],\n 43: [2, 2],\n 44: [2, 2],\n 45: [2, 2],\n 46: [2, 2],\n 47: [2, 2],\n 48: [2, 2],\n 49: [2, 2],\n 50: [2, 2],\n 51: [2, 2],\n 53: [2, 2],\n 57: [2, 2],\n 61: [2, 2],\n 62: [2, 2],\n 63: [2, 2],\n 64: [2, 2],\n 70: [2, 2],\n 71: [2, 2],\n 72: [2, 2],\n 73: [2, 2],\n 74: [2, 2],\n 76: [2, 2]\n },\n {\n 1: [2, 3],\n 6: [2, 3],\n 7: [2, 3],\n 8: [2, 3],\n 10: [2, 3],\n 13: [2, 3],\n 15: [2, 3],\n 19: [2, 3],\n 20: [2, 3],\n 28: [2, 3],\n 30: [2, 3],\n 32: [2, 3],\n 33: [2, 3],\n 35: [2, 3],\n 36: [2, 3],\n 39: [2, 3],\n 42: [2, 3],\n 43: [2, 3],\n 44: [2, 3],\n 45: [2, 3],\n 46: [2, 3],\n 47: [2, 3],\n 48: [2, 3],\n 49: [2, 3],\n 50: [2, 3],\n 51: [2, 3],\n 53: [2, 3],\n 57: [2, 3],\n 61: [2, 3],\n 62: [2, 3],\n 63: [2, 3],\n 64: [2, 3],\n 70: [2, 3],\n 71: [2, 3],\n 72: [2, 3],\n 73: [2, 3],\n 74: [2, 3],\n 76: [2, 3]\n },\n {\n 1: [2, 4],\n 6: [2, 4],\n 7: [2, 4],\n 8: [2, 4],\n 10: [2, 4],\n 13: [2, 4],\n 15: [2, 4],\n 19: [2, 4],\n 20: [2, 4],\n 28: [2, 4],\n 30: [2, 4],\n 32: [2, 4],\n 33: [2, 4],\n 35: [2, 4],\n 36: [2, 4],\n 39: [2, 4],\n 42: [2, 4],\n 43: [2, 4],\n 44: [2, 4],\n 45: [2, 4],\n 46: [2, 4],\n 47: [2, 4],\n 48: [2, 4],\n 49: [2, 4],\n 50: [2, 4],\n 51: [2, 4],\n 53: [2, 4],\n 57: [2, 4],\n 61: [2, 4],\n 62: [2, 4],\n 63: [2, 4],\n 64: [2, 4],\n 70: [2, 4],\n 71: [2, 4],\n 72: [2, 4],\n 73: [2, 4],\n 74: [2, 4],\n 76: [2, 4]\n },\n { 6: [2, 66], 7: [2, 66], 8: [2, 66] },\n { 6: [2, 67], 7: [2, 67], 8: [2, 67] },\n { 6: [2, 68], 7: [2, 68], 8: [2, 68] },\n { 6: [2, 69], 7: [2, 69], 8: [2, 69] },\n {\n 12: 42,\n 14: 31,\n 15: [1, 44],\n 39: [1, 35],\n 40: 25,\n 41: 43,\n 43: [1, 29],\n 44: [1, 30],\n 45: [1, 32],\n 46: [1, 33],\n 47: [1, 34],\n 48: [1, 36],\n 50: [1, 37]\n },\n { 6: [2, 71], 7: [2, 71], 8: [2, 71] },\n { 6: [2, 72], 7: [2, 72], 8: [2, 72] },\n {\n 12: 45,\n 14: 31,\n 15: [1, 44],\n 39: [1, 35],\n 40: 25,\n 41: 43,\n 43: [1, 29],\n 44: [1, 30],\n 45: [1, 32],\n 46: [1, 33],\n 47: [1, 34],\n 48: [1, 36],\n 50: [1, 37]\n },\n { 15: [1, 46] },\n {\n 6: [2, 39],\n 7: [2, 39],\n 8: [2, 39],\n 11: 50,\n 12: 51,\n 14: 31,\n 15: [1, 44],\n 39: [1, 35],\n 40: 25,\n 41: 43,\n 42: [2, 39],\n 43: [1, 29],\n 44: [1, 30],\n 45: [1, 32],\n 46: [1, 33],\n 47: [1, 34],\n 48: [1, 36],\n 50: [1, 37],\n 53: [2, 39],\n 68: [1, 48],\n 69: [1, 49],\n 75: [1, 47]\n },\n { 6: [2, 76], 7: [2, 76], 8: [2, 76] },\n { 6: [2, 77], 7: [2, 77], 8: [2, 77] },\n { 6: [2, 78], 7: [2, 78], 8: [2, 78] },\n { 6: [2, 79], 7: [2, 79], 8: [2, 79] },\n { 15: [1, 52] },\n { 15: [1, 53] },\n {\n 6: [2, 30],\n 7: [2, 30],\n 8: [2, 30],\n 42: [2, 30],\n 53: [1, 56],\n 68: [1, 54],\n 69: [1, 55]\n },\n {\n 6: [2, 47],\n 7: [2, 47],\n 8: [2, 47],\n 10: [2, 47],\n 13: [2, 47],\n 42: [1, 58],\n 53: [1, 57]\n },\n { 36: [1, 59], 63: [1, 60], 64: [1, 61] },\n { 15: [1, 62] },\n { 5: 63, 6: [1, 5], 7: [1, 6], 8: [1, 7] },\n {\n 14: 31,\n 15: [1, 44],\n 39: [1, 35],\n 40: 64,\n 41: 43,\n 43: [1, 29],\n 44: [1, 30],\n 45: [1, 32],\n 46: [1, 33],\n 47: [1, 34],\n 48: [1, 36],\n 50: [1, 37]\n },\n {\n 14: 31,\n 15: [1, 44],\n 39: [1, 35],\n 40: 65,\n 41: 43,\n 43: [1, 29],\n 44: [1, 30],\n 45: [1, 32],\n 46: [1, 33],\n 47: [1, 34],\n 48: [1, 36],\n 50: [1, 37]\n },\n {\n 6: [2, 34],\n 7: [2, 34],\n 8: [2, 34],\n 10: [2, 34],\n 13: [2, 34],\n 42: [2, 34],\n 49: [2, 34],\n 51: [2, 34],\n 53: [2, 34]\n },\n {\n 6: [2, 35],\n 7: [2, 35],\n 8: [2, 35],\n 10: [2, 35],\n 13: [2, 35],\n 42: [2, 35],\n 49: [2, 35],\n 51: [2, 35],\n 53: [2, 35]\n },\n {\n 6: [2, 36],\n 7: [2, 36],\n 8: [2, 36],\n 10: [2, 36],\n 13: [2, 36],\n 42: [2, 36],\n 49: [2, 36],\n 51: [2, 36],\n 53: [2, 36]\n },\n {\n 6: [2, 37],\n 7: [2, 37],\n 8: [2, 37],\n 10: [2, 37],\n 13: [2, 37],\n 42: [2, 37],\n 49: [2, 37],\n 51: [2, 37],\n 53: [2, 37]\n },\n {\n 6: [2, 38],\n 7: [2, 38],\n 8: [2, 38],\n 10: [2, 38],\n 13: [2, 38],\n 42: [2, 38],\n 49: [2, 38],\n 51: [2, 38],\n 53: [2, 38]\n },\n {\n 14: 31,\n 15: [1, 44],\n 39: [1, 35],\n 40: 66,\n 41: 43,\n 43: [1, 29],\n 44: [1, 30],\n 45: [1, 32],\n 46: [1, 33],\n 47: [1, 34],\n 48: [1, 36],\n 50: [1, 37]\n },\n {\n 14: 31,\n 15: [1, 44],\n 39: [1, 35],\n 40: 67,\n 41: 43,\n 43: [1, 29],\n 44: [1, 30],\n 45: [1, 32],\n 46: [1, 33],\n 47: [1, 34],\n 48: [1, 36],\n 50: [1, 37]\n },\n { 5: 68, 6: [1, 5], 7: [1, 6], 8: [1, 7] },\n {\n 1: [2, 60],\n 6: [2, 60],\n 7: [2, 60],\n 8: [2, 60],\n 15: [2, 60],\n 19: [2, 60],\n 20: [2, 60],\n 28: [2, 60],\n 30: [2, 60],\n 32: [2, 60],\n 33: [2, 60],\n 35: [2, 60],\n 36: [2, 60],\n 39: [2, 60],\n 43: [2, 60],\n 44: [2, 60],\n 45: [2, 60],\n 46: [2, 60],\n 47: [2, 60],\n 48: [2, 60],\n 50: [2, 60],\n 57: [2, 60],\n 61: [2, 60],\n 63: [2, 60],\n 64: [2, 60],\n 70: [2, 60],\n 71: [2, 60],\n 72: [2, 60],\n 73: [2, 60],\n 74: [2, 60],\n 76: [2, 60]\n },\n { 5: 69, 6: [1, 5], 7: [1, 6], 8: [1, 7] },\n {\n 1: [2, 59],\n 6: [2, 59],\n 7: [2, 59],\n 8: [2, 59],\n 15: [2, 59],\n 19: [2, 59],\n 20: [2, 59],\n 28: [2, 59],\n 30: [2, 59],\n 32: [2, 59],\n 33: [2, 59],\n 35: [2, 59],\n 36: [2, 59],\n 39: [2, 59],\n 43: [2, 59],\n 44: [2, 59],\n 45: [2, 59],\n 46: [2, 59],\n 47: [2, 59],\n 48: [2, 59],\n 50: [2, 59],\n 57: [2, 59],\n 61: [2, 59],\n 63: [2, 59],\n 64: [2, 59],\n 70: [2, 59],\n 71: [2, 59],\n 72: [2, 59],\n 73: [2, 59],\n 74: [2, 59],\n 76: [2, 59]\n },\n { 6: [2, 70], 7: [2, 70], 8: [2, 70] },\n {\n 6: [2, 30],\n 7: [2, 30],\n 8: [2, 30],\n 10: [2, 30],\n 13: [2, 30],\n 42: [2, 30],\n 49: [2, 30],\n 51: [2, 30],\n 53: [1, 56]\n },\n {\n 6: [2, 39],\n 7: [2, 39],\n 8: [2, 39],\n 10: [2, 39],\n 11: 50,\n 12: 51,\n 13: [2, 39],\n 14: 31,\n 15: [1, 44],\n 39: [1, 35],\n 40: 25,\n 41: 43,\n 42: [2, 39],\n 43: [1, 29],\n 44: [1, 30],\n 45: [1, 32],\n 46: [1, 33],\n 47: [1, 34],\n 48: [1, 36],\n 49: [2, 39],\n 50: [1, 37],\n 51: [2, 39],\n 53: [2, 39]\n },\n { 6: [2, 73], 7: [2, 73], 8: [2, 73] },\n { 6: [2, 74], 7: [2, 74], 8: [2, 74] },\n { 37: 70, 38: [1, 71], 39: [1, 72] },\n {\n 12: 73,\n 14: 31,\n 15: [1, 44],\n 39: [1, 35],\n 40: 25,\n 41: 43,\n 43: [1, 29],\n 44: [1, 30],\n 45: [1, 32],\n 46: [1, 33],\n 47: [1, 34],\n 48: [1, 36],\n 50: [1, 37]\n },\n {\n 12: 75,\n 14: 31,\n 15: [1, 44],\n 39: [1, 35],\n 40: 25,\n 41: 43,\n 43: [1, 29],\n 44: [1, 30],\n 45: [1, 32],\n 46: [1, 33],\n 47: [1, 34],\n 48: [1, 36],\n 50: [1, 37],\n 54: 74,\n 55: [1, 76]\n },\n {\n 5: 80,\n 6: [1, 5],\n 7: [1, 6],\n 8: [1, 7],\n 9: 77,\n 10: [1, 79],\n 13: [1, 78]\n },\n { 6: [2, 7], 7: [2, 7], 8: [2, 7], 10: [2, 7], 13: [2, 7] },\n { 6: [2, 53], 7: [2, 53], 8: [2, 53], 58: [1, 81], 59: [1, 82] },\n {\n 5: 83,\n 6: [1, 5],\n 7: [1, 6],\n 8: [1, 7],\n 21: 84,\n 22: [1, 85],\n 23: [1, 86]\n },\n {\n 12: 87,\n 14: 31,\n 15: [1, 44],\n 39: [1, 35],\n 40: 25,\n 41: 43,\n 43: [1, 29],\n 44: [1, 30],\n 45: [1, 32],\n 46: [1, 33],\n 47: [1, 34],\n 48: [1, 36],\n 50: [1, 37]\n },\n {\n 12: 75,\n 14: 31,\n 15: [1, 44],\n 39: [1, 35],\n 40: 25,\n 41: 43,\n 43: [1, 29],\n 44: [1, 30],\n 45: [1, 32],\n 46: [1, 33],\n 47: [1, 34],\n 48: [1, 36],\n 50: [1, 37],\n 54: 88,\n 55: [1, 76]\n },\n { 15: [1, 91], 45: [1, 90], 48: [1, 92], 52: 89 },\n { 15: [1, 91], 45: [1, 90], 48: [1, 92], 52: 93 },\n {\n 14: 31,\n 15: [1, 44],\n 39: [1, 35],\n 40: 94,\n 41: 43,\n 43: [1, 29],\n 44: [1, 30],\n 45: [1, 32],\n 46: [1, 33],\n 47: [1, 34],\n 48: [1, 36],\n 50: [1, 37]\n },\n { 6: [2, 57], 7: [2, 57], 8: [2, 57] },\n {\n 14: 31,\n 15: [1, 44],\n 39: [1, 35],\n 40: 95,\n 41: 43,\n 43: [1, 29],\n 44: [1, 30],\n 45: [1, 32],\n 46: [1, 33],\n 47: [1, 34],\n 48: [1, 36],\n 50: [1, 37]\n },\n { 5: 96, 6: [1, 5], 7: [1, 6], 8: [1, 7] },\n {\n 6: [2, 12],\n 7: [2, 12],\n 8: [2, 12],\n 13: [2, 12],\n 16: 97,\n 17: [1, 98]\n },\n { 31: 99, 32: [1, 101], 33: [1, 102], 36: [1, 100] },\n { 13: [1, 103], 42: [1, 58], 53: [1, 57] },\n {\n 6: [2, 33],\n 7: [2, 33],\n 8: [2, 33],\n 10: [2, 33],\n 13: [2, 33],\n 42: [1, 58],\n 49: [2, 33],\n 51: [2, 33],\n 53: [1, 57]\n },\n { 42: [1, 58], 49: [1, 104], 53: [1, 57] },\n { 42: [1, 58], 51: [1, 105], 53: [1, 57] },\n { 62: [1, 106] },\n {\n 1: [2, 61],\n 6: [2, 61],\n 7: [2, 61],\n 8: [2, 61],\n 15: [2, 61],\n 19: [2, 61],\n 20: [2, 61],\n 28: [2, 61],\n 30: [2, 61],\n 32: [2, 61],\n 33: [2, 61],\n 35: [2, 61],\n 36: [2, 61],\n 39: [2, 61],\n 43: [2, 61],\n 44: [2, 61],\n 45: [2, 61],\n 46: [2, 61],\n 47: [2, 61],\n 48: [2, 61],\n 50: [2, 61],\n 57: [2, 61],\n 61: [2, 61],\n 63: [2, 61],\n 64: [2, 61],\n 70: [2, 61],\n 71: [2, 61],\n 72: [2, 61],\n 73: [2, 61],\n 74: [2, 61],\n 76: [2, 61]\n },\n { 6: [2, 75], 7: [2, 75], 8: [2, 75] },\n {\n 6: [2, 28],\n 7: [2, 28],\n 8: [2, 28],\n 10: [2, 28],\n 13: [2, 28],\n 42: [2, 28],\n 49: [2, 28],\n 51: [2, 28],\n 53: [2, 28]\n },\n {\n 6: [2, 29],\n 7: [2, 29],\n 8: [2, 29],\n 10: [2, 29],\n 13: [2, 29],\n 42: [2, 29],\n 49: [2, 29],\n 51: [2, 29],\n 53: [2, 29]\n },\n { 6: [2, 62], 7: [2, 62], 8: [2, 62] },\n { 6: [2, 63], 7: [2, 63], 8: [2, 63], 13: [1, 107] },\n { 6: [2, 48], 7: [2, 48], 8: [2, 48], 13: [2, 48] },\n { 6: [2, 49], 7: [2, 49], 8: [2, 49], 13: [2, 49] },\n {\n 6: [2, 9],\n 7: [2, 9],\n 8: [2, 9],\n 10: [2, 9],\n 13: [2, 9],\n 42: [2, 9],\n 49: [2, 9],\n 51: [2, 9],\n 53: [2, 9]\n },\n {\n 12: 108,\n 14: 31,\n 15: [1, 44],\n 39: [1, 35],\n 40: 25,\n 41: 43,\n 43: [1, 29],\n 44: [1, 30],\n 45: [1, 32],\n 46: [1, 33],\n 47: [1, 34],\n 48: [1, 36],\n 50: [1, 37]\n },\n {\n 6: [2, 5],\n 7: [2, 5],\n 8: [2, 5],\n 10: [2, 5],\n 13: [2, 5],\n 42: [2, 5],\n 49: [2, 5],\n 51: [2, 5],\n 53: [2, 5]\n },\n {\n 6: [2, 6],\n 7: [2, 6],\n 8: [2, 6],\n 10: [2, 6],\n 13: [2, 6],\n 42: [2, 6],\n 49: [2, 6],\n 51: [2, 6],\n 53: [2, 6]\n },\n {\n 12: 109,\n 14: 31,\n 15: [1, 44],\n 39: [1, 35],\n 40: 25,\n 41: 43,\n 43: [1, 29],\n 44: [1, 30],\n 45: [1, 32],\n 46: [1, 33],\n 47: [1, 34],\n 48: [1, 36],\n 50: [1, 37]\n },\n {\n 12: 75,\n 14: 31,\n 15: [1, 44],\n 39: [1, 35],\n 40: 25,\n 41: 43,\n 43: [1, 29],\n 44: [1, 30],\n 45: [1, 32],\n 46: [1, 33],\n 47: [1, 34],\n 48: [1, 36],\n 50: [1, 37],\n 54: 110,\n 55: [1, 76]\n },\n {\n 4: 111,\n 5: 3,\n 6: [1, 5],\n 7: [1, 6],\n 8: [1, 7],\n 12: 14,\n 14: 31,\n 15: [1, 17],\n 18: 19,\n 19: [1, 27],\n 29: 9,\n 30: [1, 23],\n 34: 21,\n 35: [1, 28],\n 39: [1, 35],\n 40: 25,\n 41: 24,\n 43: [1, 29],\n 44: [1, 30],\n 45: [1, 32],\n 46: [1, 33],\n 47: [1, 34],\n 48: [1, 36],\n 50: [1, 37],\n 56: 8,\n 57: [1, 22],\n 60: 26,\n 61: [1, 38],\n 65: 18,\n 66: 4,\n 67: 13,\n 70: [1, 10],\n 71: [1, 11],\n