Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- local DODDDDDDOOODODODDDDDODOODDODDOOODODDDDODDDDDO = '\27\76\117\97\81\0\1\4\4\4\8\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\2\2\39\0\0\0\5\0\0\0\6\64\64\0\66\0\128\0\28\128\0\1\26\0\0\0\22\192\0\128\5\0\0\0\6\128\64\0\66\0\0\0\28\64\0\1\5\0\0\0\6\192\64\0\65\0\1\0\28\64\0\1\5\0\0\0\6\192\64\0\65\64\1\0\28\64\0\1\36\0\0\0\7\128\1\0\10\192\0\0\100\64\0\0\9\64\0\132\100\128\0\0\9\64\128\132\100\192\0\0\9\64\0\133\7\192\1\0\10\192\0\0\100\0\1\0\9\64\0\134\100\64\1\0\9\64\128\134\100\128\1\0\9\64\0\133\7\192\2\0\5\128\1\0\28\64\128\0\30\0\128\0\14\0\0\0\4\3\0\0\0\103\103\0\4\10\0\0\0\105\115\86\105\115\105\98\108\101\0\4\11\0\0\0\115\101\116\86\105\115\105\98\108\101\0\4\6\0\0\0\97\108\101\114\116\0\4\54\0\0\0\85\115\101\32\116\104\105\115\32\111\110\32\99\117\115\116\111\109\32\103\97\109\101\32\102\111\114\32\101\100\117\99\97\116\105\111\110\97\108\32\112\117\114\112\111\115\101\115\32\111\110\108\121\0\4\29\0\0\0\83\99\114\105\112\116\32\99\111\100\101\100\32\98\121\32\85\110\100\105\102\105\110\101\48\57\48\57\0\4\5\0\0\0\109\97\105\110\0\4\8\0\0\0\108\111\119\109\97\110\97\0\4\6\0\0\0\102\97\110\110\121\0\4\7\0\0\0\107\97\103\117\114\97\0\4\5\0\0\0\115\104\111\119\0\4\8\0\0\0\109\97\112\104\97\99\107\0\4\8\0\0\0\101\110\97\98\108\101\100\0\4\9\0\0\0\108\100\105\115\97\98\108\101\0\7\0\0\0\0\0\0\0\1\0\0\0\1\0\0\0\0\0\0\4\21\0\0\0\5\64\0\0\6\128\64\0\74\0\0\1\129\192\0\0\193\0\1\0\98\64\0\1\28\128\0\1\7\0\0\0\5\0\0\0\23\64\65\0\22\128\0\128\5\128\1\0\6\192\65\0\28\64\128\0\5\0\0\0\23\0\66\0\22\128\0\128\5\64\2\0\6\192\65\0\28\64\128\0\30\0\128\0\10\0\0\0\4\7\0\0\0\115\101\108\101\99\116\0\4\3\0\0\0\103\103\0\4\7\0\0\0\99\104\111\105\99\101\0\4\17\0\0\0\77\97\112\32\72\97\99\107\32\40\32\86\73\80\32\41\0\4\14\0\0\0\76\111\119\32\77\97\110\97\32\67\111\115\116\0\3\0\0\0\0\0\0\240\63\4\8\0\0\0\109\97\112\104\97\99\107\0\4\5\0\0\0\115\104\111\119\0\3\0\0\0\0\0\0\0\64\4\8\0\0\0\108\111\119\109\97\110\97\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\0\0\0\1\0\0\0\0\0\0\3\83\0\0\0\5\0\0\0\6\64\64\0\28\64\128\0\5\0\0\0\6\128\64\0\65\192\0\0\133\0\0\0\134\0\65\1\28\64\128\1\5\0\0\0\6\128\64\0\65\64\1\0\133\0\0\0\134\0\65\1\28\64\128\1\5\0\0\0\6\128\65\0\65\192\1\0\28\64\0\1\5\0\0\0\6\0\66\0\65\64\2\0\133\0\0\0\134\0\65\1\28\64\128\1\5\0\0\0\6\64\64\0\28\64\128\0\5\0\0\0\6\128\64\0\65\128\2\0\133\0\0\0\134\0\65\1\28\64\128\1\5\0\0\0\6\128\64\0\65\192\2\0\133\0\0\0\134\0\65\1\28\64\128\1\5\0\0\0\6\128\65\0\65\192\1\0\28\64\0\1\5\0\0\0\6\0\66\0\65\64\2\0\133\0\0\0\134\0\65\1\28\64\128\1\5\0\0\0\6\64\64\0\28\64\128\0\5\0\0\0\6\128\64\0\65\0\3\0\133\0\0\0\134\0\65\1\28\64\128\1\5\0\0\0\6\128\64\0\65\64\3\0\133\0\0\0\134\0\65\1\28\64\128\1\5\0\0\0\6\128\65\0\65\128\3\0\28\64\0\1\5\0\0\0\6\0\66\0\65\64\2\0\133\0\0\0\134\0\65\1\28\64\128\1\5\0\0\0\6\64\64\0\28\64\128\0\5\0\0\0\6\192\67\0\65\0\4\0\28\64\0\1\30\0\128\0\17\0\0\0\4\3\0\0\0\103\103\0\4\13\0\0\0\99\108\101\97\114\82\101\115\117\108\116\115\0\4\13\0\0\0\115\101\97\114\99\104\78\117\109\98\101\114\0\4\7\0\0\0\50\53\58\58\51\51\0\4\11\0\0\0\84\89\80\69\95\68\87\79\82\68\0\4\3\0\0\0\50\53\0\4\11\0\0\0\103\101\116\82\101\115\117\108\116\115\0\3\0\0\0\0\0\0\24\64\4\8\0\0\0\101\100\105\116\65\108\108\0\4\2\0\0\0\49\0\4\3\0\0\0\51\51\0\4\6\0\0\0\49\51\126\49\56\0\4\9\0\0\0\48\59\51\48\58\58\51\51\0\4\3\0\0\0\51\48\0\3\0\0\0\0\0\0\8\64\4\6\0\0\0\116\111\97\115\116\0\4\21\0\0\0\70\97\110\110\121\32\115\107\105\108\108\32\109\111\100\32\100\111\110\101\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\0\0\0\1\0\0\0\0\0\0\3\133\0\0\0\5\0\0\0\6\64\64\0\28\64\128\0\5\0\0\0\6\128\64\0\65\192\0\0\133\0\0\0\134\0\65\1\28\64\128\1\5\0\0\0\6\128\64\0\65\64\1\0\133\0\0\0\134\0\65\1\28\64\128\1\5\0\0\0\6\128\65\0\65\192\1\0\28\64\0\1\5\0\0\0\6\0\66\0\65\64\2\0\133\0\0\0\134\0\65\1\28\64\128\1\5\0\0\0\6\64\64\0\28\64\128\0\5\0\0\0\6\128\64\0\65\128\2\0\133\0\0\0\134\0\65\1\28\64\128\1\5\0\0\0\6\128\64\0\65\192\2\0\133\0\0\0\134\0\65\1\28\64\128\1\5\0\0\0\6\128\65\0\65\0\3\0\28\64\0\1\5\0\0\0\6\0\66\0\65\64\2\0\133\0\0\0\134\0\65\1\28\64\128\1\5\0\0\0\6\64\64\0\28\64\128\0\5\0\0\0\6\128\64\0\65\64\3\0\133\0\0\0\134\0\65\1\28\64\128\1\5\0\0\0\6\128\64\0\65\192\2\0\133\0\0\0\134\0\65\1\28\64\128\1\5\0\0\0\6\128\65\0\65\0\3\0\28\64\0\1\5\0\0\0\6\0\66\0\65\64\2\0\133\0\0\0\134\0\65\1\28\64\128\1\5\0\0\0\6\64\64\0\28\64\128\0\5\0\0\0\6\128\64\0\65\128\3\0\133\0\0\0\134\0\65\1\28\64\128\1\5\0\0\0\6\128\64\0\65\192\3\0\133\0\0\0\134\0\65\1\28\64\128\1\5\0\0\0\6\128\65\0\65\0\4\0\28\64\0\1\5\0\0\0\6\0\66\0\65\64\2\0\133\0\0\0\134\0\65\1\28\64\128\1\5\0\0\0\6\64\64\0\28\64\128\0\5\0\0\0\6\128\64\0\65\64\4\0\133\0\0\0\134\0\65\1\28\64\128\1\5\0\0\0\6\128\64\0\65\192\3\0\133\0\0\0\134\0\65\1\28\64\128\1\5\0\0\0\6\128\65\0\65\128\4\0\28\64\0\1\5\0\0\0\6\0\66\0\65\64\2\0\133\0\0\0\134\0\65\1\28\64\128\1\5\0\0\0\6\64\64\0\28\64\128\0\5\0\0\0\6\192\68\0\65\0\5\0\28\64\0\1\30\0\128\0\21\0\0\0\4\3\0\0\0\103\103\0\4\13\0\0\0\99\108\101\97\114\82\101\115\117\108\116\115\0\4\13\0\0\0\115\101\97\114\99\104\78\117\109\98\101\114\0\4\8\0\0\0\49\49\48\58\58\50\57\0\4\11\0\0\0\84\89\80\69\95\68\87\79\82\68\0\4\7\0\0\0\54\48\126\49\49\48\0\4\11\0\0\0\103\101\116\82\101\115\117\108\116\115\0\3\0\0\0\0\0\0\40\64\4\8\0\0\0\101\100\105\116\65\108\108\0\4\3\0\0\0\52\48\0\4\8\0\0\0\49\48\53\58\58\50\57\0\4\7\0\0\0\56\48\126\49\48\53\0\3\0\0\0\0\0\0\24\64\4\10\0\0\0\48\48\48\48\53\58\58\50\57\0\4\8\0\0\0\48\48\48\58\58\50\57\0\4\7\0\0\0\56\53\126\49\49\53\0\3\0\0\0\0\0\0\8\64\4\9\0\0\0\48\48\48\48\58\58\50\57\0\3\0\0\0\0\0\0\46\64\4\6\0\0\0\116\111\97\115\116\0\4\22\0\0\0\75\97\103\117\114\97\32\115\107\105\108\108\32\109\111\100\32\100\111\110\101\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\0\0\0\1\0\0\0\0\0\0\6\23\0\0\0\5\64\0\0\6\128\64\0\74\0\0\2\129\192\0\0\193\0\1\0\1\65\1\0\65\129\1\0\98\64\0\2\28\128\0\1\7\0\0\0\5\0\0\0\23\192\65\0\22\128\0\128\5\0\2\0\6\64\66\0\28\64\128\0\5\0\0\0\23\128\66\0\22\128\0\128\5\0\2\0\6\192\66\0\28\64\128\0\30\0\128\0\12\0\0\0\4\7\0\0\0\115\101\108\101\99\116\0\4\3\0\0\0\103\103\0\4\7\0\0\0\99\104\111\105\99\101\0\4\20\0\0\0\70\97\110\110\121\32\49\32\101\110\101\114\103\121\32\99\111\115\116\0\4\20\0\0\0\75\97\103\117\114\97\32\52\48\32\109\97\110\97\32\99\111\115\116\0\4\7\0\0\0\65\110\103\101\108\97\0\4\8\0\0\0\67\121\99\108\111\112\115\0\3\0\0\0\0\0\0\240\63\4\8\0\0\0\108\111\119\109\97\110\97\0\4\6\0\0\0\102\97\110\110\121\0\3\0\0\0\0\0\0\0\64\4\7\0\0\0\107\97\103\117\114\97\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\0\0\0\1\0\0\0\0\0\0\3\34\0\0\0\5\0\0\0\6\64\64\0\28\64\128\0\5\0\0\0\6\128\64\0\65\192\0\0\133\0\0\0\134\0\65\1\28\64\128\1\5\0\0\0\6\128\64\0\65\64\1\0\133\0\0\0\134\0\65\1\28\64\128\1\5\0\0\0\6\192\65\0\65\0\2\0\28\128\0\1\7\128\1\0\5\0\0\0\6\64\66\0\65\128\2\0\133\0\0\0\134\0\65\1\28\64\128\1\5\0\0\0\6\64\64\0\28\64\128\0\5\0\0\0\6\192\66\0\65\0\3\0\28\64\0\1\30\0\128\0\13\0\0\0\4\3\0\0\0\103\103\0\4\13\0\0\0\99\108\101\97\114\82\101\115\117\108\116\115\0\4\13\0\0\0\115\101\97\114\99\104\78\117\109\98\101\114\0\4\10\0\0\0\48\48\48\48\48\58\58\49\51\0\4\11\0\0\0\84\89\80\69\95\68\87\79\82\68\0\4\9\0\0\0\48\48\48\48\48\58\58\57\0\4\4\0\0\0\114\101\115\0\4\11\0\0\0\103\101\116\82\101\115\117\108\116\115\0\3\0\0\0\0\0\0\8\64\4\8\0\0\0\101\100\105\116\65\108\108\0\4\7\0\0\0\48\48\48\48\48\48\0\4\6\0\0\0\116\111\97\115\116\0\4\16\0\0\0\77\97\112\104\97\99\107\32\69\110\97\98\108\101\100\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\0\0\0\1\0\0\0\0\0\0\3\35\0\0\0\5\0\0\0\6\64\64\0\28\64\128\0\5\0\0\0\6\128\64\0\65\192\0\0\133\0\0\0\134\0\65\1\28\64\128\1\5\0\0\0\6\128\65\0\65\192\1\0\28\128\0\1\7\64\1\0\5\64\1\0\6\0\66\0\9\128\194\132\5\64\1\0\6\192\66\0\9\128\194\132\5\64\1\0\6\192\65\0\9\128\194\132\5\0\0\0\6\0\67\0\69\64\1\0\28\64\0\1\5\0\0\0\6\64\64\0\28\64\128\0\5\0\0\0\6\64\67\0\65\128\3\0\28\64\0\1\30\0\128\0\15\0\0\0\4\3\0\0\0\103\103\0\4\13\0\0\0\99\108\101\97\114\82\101\115\117\108\116\115\0\4\13\0\0\0\115\101\97\114\99\104\78\117\109\98\101\114\0\4\11\0\0\0\48\48\48\48\48\48\48\58\58\57\0\4\11\0\0\0\84\89\80\69\95\68\87\79\82\68\0\4\4\0\0\0\114\101\115\0\4\11\0\0\0\103\101\116\82\101\115\117\108\116\115\0\3\0\0\0\0\0\0\8\64\3\0\0\0\0\0\0\240\63\4\6\0\0\0\118\97\108\117\101\0\3\0\0\0\0\0\0\0\0\3\0\0\0\0\0\0\0\64\4\10\0\0\0\115\101\116\86\97\108\117\101\115\0\4\6\0\0\0\116\111\97\115\116\0\4\16\0\0\0\77\97\112\104\97\99\107\32\68\105\115\97\98\108\101\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\0\0\0\1\0\0\0\0\0\0\4\21\0\0\0\5\64\0\0\6\128\64\0\74\0\0\1\129\192\0\0\193\0\1\0\98\64\0\1\28\128\0\1\7\0\0\0\5\0\0\0\23\64\65\0\22\128\0\128\5\128\1\0\6\192\65\0\28\64\128\0\5\0\0\0\23\0\66\0\22\128\0\128\5\128\1\0\6\64\66\0\28\64\128\0\30\0\128\0\10\0\0\0\4\7\0\0\0\115\101\108\101\99\116\0\4\3\0\0\0\103\103\0\4\7\0\0\0\99\104\111\105\99\101\0\4\12\0\0\0\77\97\112\32\72\97\99\107\32\79\110\0\4\13\0\0\0\77\97\112\32\72\97\99\107\32\79\102\102\0\3\0\0\0\0\0\0\240\63\4\8\0\0\0\109\97\112\104\97\99\107\0\4\8\0\0\0\101\110\97\98\108\101\100\0\3\0\0\0\0\0\0\0\64\4\8\0\0\0\100\105\115\97\98\108\101\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0'
- local DOOOOOOODDOOOOODDOODDODOODDODOOOODOODDDDOODDD
- local DDDODDDOODDOODOODDDOOODDOODDDDDODODODDODODDDD
- local DODDDODOOODDDDDODDDDODDDDDDDODDDODOODOOOODOOD
- local ODDOOODODDDDDDDOOODOODDDOOOODOOOOOOODOODOOODD = {
- "ABC", "ABx", "ABC", "ABC",
- "ABC", "ABx", "ABC", "ABx",
- "ABC", "ABC", "ABC", "ABC",
- "ABC", "ABC", "ABC", "ABC",
- "ABC", "ABC", "ABC", "ABC",
- "ABC", "ABC", "AsBx", "ABC",
- "ABC", "ABC", "ABC", "ABC",
- "ABC", "ABC", "ABC", "AsBx",
- "AsBx", "ABC", "ABC", "ABC",
- "ABx", "ABC",
- }
- local lua_opcode_names = {
- "MOVE", "LOADK", "LOADBOOL", "LOADNIL",
- "GETUPVAL", "GETGLOBAL", "GETTABLE", "SETGLOBAL",
- "SETUPVAL", "SETTABLE", "NEWTABLE", "SELF",
- "ADD", "SUB", "MUL", "DIV",
- "MOD", "POW", "UNM", "NOT",
- "LEN", "CONCAT", "JMP", "EQ",
- "LT", "LE", "TEST", "TESTSET",
- "CALL", "TAILCALL", "RETURN", "FORLOOP",
- "FORPREP", "TFORLOOP", "SETLIST", "CLOSE",
- "CLOSURE", "VARARG"
- };
- local DODDOODOOOODDDDODOOODODODDOOODODOOOODDDOODOOO = getfenv()
- local function get_bits(input, n, n2)
- if n2 then
- local total = 0
- local digitn = 0
- for i = n, n2 do
- total = total + 2^digitn*get_bits(input, i)
- digitn = digitn + 1
- end
- return total
- else
- local pn = 2^(n-1)
- return (input % (pn + pn) >= pn) and 1 or 0
- end
- end
- local function decode_bytecode(DDDOOOODDDOOOOOOOOODDDOODODOODDOODOODDODDOODD)
- local index = 1
- local big_endian = false
- local int_size;
- local size_t;
- local get_int, get_size_t;
- local get_int8, get_int32, get_int64, get_float64, get_string;
- do
- function get_int8()
- local a = DDDOOOODDDOOOOOOOOODDDOODODOODDOODOODDODDOODD:byte(index, index);
- index = index + 1
- return a
- end
- function get_int32()
- local a, b, c, d = DDDOOOODDDOOOOOOOOODDDOODODOODDOODOODDODDOODD:byte(index, index + 3);
- index = index + 4;
- return d*16777216 + c*65536 + b*256 + a
- end
- function get_int64()
- local a = get_int32();
- local b = get_int32();
- return b*4294967296 + a;
- end
- function get_float64()
- local a = get_int32()
- local b = get_int32()
- return (-2*get_bits(b, 32)+1)*(2^(get_bits(b, 21, 31)-1023))*
- ((get_bits(b, 1, 20)*(2^32) + a)/(2^52)+1)
- end
- function get_string(len)
- local str;
- if len then
- str = DDDOOOODDDOOOOOOOOODDDOODODOODDOODOODDODDOODD:sub(index, index + len - 1);
- index = index + len;
- else
- len = get_size_t();
- if len == 0 then return; end
- str = DDDOOOODDDOOOOOOOOODDDOODODOODDOODOODDODDOODD:sub(index, index + len - 1);
- index = index + len;
- end
- return str;
- end
- end
- local function decode_chunk()
- local chunk;
- local instructions = {};
- local constants = {};
- local prototypes = {};
- local debug = {
- lines = {};
- };
- chunk = {
- instructions = instructions;
- constants = constants;
- prototypes = prototypes;
- debug = debug;
- };
- local num;
- chunk.name = get_string();
- chunk.first_line = get_int();
- chunk.last_line = get_int();
- if chunk.name then chunk.name = chunk.name:sub(1, -2); end
- chunk.upvalues = get_int8();
- chunk.arguments = get_int8();
- chunk.varg = get_int8();
- chunk.stack = get_int8();
- do
- num = get_int();
- for i = 1, num do
- local instruction = {
- };
- local data = get_int32();
- local DDDODODDODDOOODDOOODDDOODDOOOODODDODDOOOODOOD = get_bits(data, 1, 6);
- local type = ODDOOODODDDDDDDOOODOODDDOOOODOOOOOOODOODOOODD[DDDODODDODDOOODDOOODDDOODDOOOODODDODDOOOODOOD + 1];
- instruction.DDDODODDODDOOODDOOODDDOODDOOOODODDODDOOOODOOD = DDDODODDODDOOODDOOODDDOODDOOOODODDODDOOOODOOD;
- instruction.type = type;
- instruction.A = get_bits(data, 7, 14);
- if type == "ABC" then
- instruction.B = get_bits(data, 24, 32);
- instruction.C = get_bits(data, 15, 23);
- elseif type == "ABx" then
- instruction.Bx = get_bits(data, 15, 32);
- elseif type == "AsBx" then
- instruction.sBx = get_bits(data, 15, 32) - 131071;
- end
- instructions[i] = instruction;
- end
- end
- do
- num = get_int();
- for i = 1, num do
- local constant = {
- };
- local type = get_int8();
- constant.type = type;
- if type == 1 then
- constant.data = (get_int8() ~= 0);
- elseif type == 3 then
- constant.data = get_float64();
- elseif type == 4 then
- constant.data = get_string():sub(1, -2);
- end
- constants[i-1] = constant;
- end
- end
- do
- num = get_int();
- for i = 1, num do
- prototypes[i-1] = decode_chunk();
- end
- end
- do
- local data = debug.lines
- num = get_int();
- for i = 1, num do
- data[i] = get_int32();
- end
- num = get_int();
- for i = 1, num do
- get_string():sub(1, -2);
- get_int32();
- get_int32();
- end
- num = get_int();
- for i = 1, num do
- get_string();
- end
- end
- return chunk;
- end
- do
- assert(get_string(4) == "\27Lua", "XIPHER: B71EC0D5 3XP3CT3D.");
- assert(get_int8() == 0x51, "M2K3 S8RE Y0U'R3 U$1NG LU6 5.1");
- get_int8();
- big_endian = (get_int8() == 0);
- int_size = get_int8();
- size_t = get_int8();
- if int_size == 4 then
- get_int = get_int32;
- elseif int_size == 8 then
- get_int = get_int64;
- else
- error("Unsupported bytecode target platform");
- end
- if size_t == 4 then
- get_size_t = get_int32;
- elseif size_t == 8 then
- get_size_t = get_int64;
- else
- error("Unsupported bytecode target platform");
- end
- assert(get_string(3) == "\4\8\0",
- "Unsupported bytecode target platform");
- end
- return decode_chunk();
- end
- local function handle_return(...)
- local c = select("#", ...)
- local t = {...}
- return c, t
- end
- local function DDDOODDDDDODDDODOODDDODODODOODOODDOOOOODDOOOD(cache, upvalues)
- local instructions = cache.instructions;
- local constants = cache.constants;
- local prototypes = cache.prototypes;
- local stack, top
- local environment
- local IP = 1;
- local vararg, vararg_size
- local opcode_funcs = {
- [0] = function(instruction)
- stack[instruction.A] = stack[instruction.B];
- end,
- [1] = function(instruction)
- stack[instruction.A] = constants[instruction.Bx].data;
- end,
- [2] = function(instruction)
- stack[instruction.A] = instruction.B ~= 0
- if instruction.C ~= 0 then
- IP = IP + 1
- end
- end,
- [3] = function(instruction)
- local stack = stack
- for i = instruction.A, instruction.B do
- stack[i] = nil
- end
- end,
- [4] = function(instruction)
- stack[instruction.A] = upvalues[instruction.B]
- end,
- [5] = function(instruction)
- local key = constants[instruction.Bx].data;
- stack[instruction.A] = environment[key];
- end,
- [6] = function(instruction)
- local C = instruction.C
- local stack = stack
- C = C > 255 and constants[C-256].data or stack[C]
- stack[instruction.A] = stack[instruction.B][C];
- end,
- [7] = function(instruction)
- local key = constants[instruction.Bx].data;
- environment[key] = stack[instruction.A];
- end,
- [8] = function (instruction)
- upvalues[instruction.B] = stack[instruction.A]
- end,
- [9] = function (instruction)
- local B = instruction.B;
- local C = instruction.C;
- local stack, constants = stack, constants;
- B = B > 255 and constants[B-256].data or stack[B];
- C = C > 255 and constants[C-256].data or stack[C];
- stack[instruction.A][B] = C
- end,
- [10] = function (instruction)
- stack[instruction.A] = {}
- end,
- [11] = function (instruction)
- local A = instruction.A
- local B = instruction.B
- local C = instruction.C
- local stack = stack
- B = stack[B]
- C = C > 255 and constants[C-256].data or stack[C]
- stack[A+1] = B
- stack[A] = B[C]
- end,
- [12] = function(instruction)
- local B = instruction.B;
- local C = instruction.C;
- local stack, constants = stack, constants;
- B = B > 255 and constants[B-256].data or stack[B];
- C = C > 255 and constants[C-256].data or stack[C];
- stack[instruction.A] = B+C;
- end,
- [13] = function(instruction)
- local B = instruction.B;
- local C = instruction.C;
- local stack, constants = stack, constants;
- B = B > 255 and constants[B-256].data or stack[B];
- C = C > 255 and constants[C-256].data or stack[C];
- stack[instruction.A] = B - C;
- end,
- [14] = function(instruction)
- local B = instruction.B;
- local C = instruction.C;
- local stack, constants = stack, constants;
- B = B > 255 and constants[B-256].data or stack[B];
- C = C > 255 and constants[C-256].data or stack[C];
- stack[instruction.A] = B * C;
- end,
- [15] = function(instruction)
- local B = instruction.B;
- local C = instruction.C;
- local stack, constants = stack, constants;
- B = B > 255 and constants[B-256].data or stack[B];
- C = C > 255 and constants[C-256].data or stack[C];
- stack[instruction.A] = B / C;
- end,
- [16] = function(instruction)
- local B = instruction.B;
- local C = instruction.C;
- local stack, constants = stack, constants;
- B = B > 255 and constants[B-256].data or stack[B];
- C = C > 255 and constants[C-256].data or stack[C];
- stack[instruction.A] = B % C;
- end,
- [17] = function(instruction)
- local B = instruction.B;
- local C = instruction.C;
- local stack, constants = stack, constants;
- B = B > 255 and constants[B-256].data or stack[B];
- C = C > 255 and constants[C-256].data or stack[C];
- stack[instruction.A] = B ^ C;
- end,
- [18] = function(instruction)
- stack[instruction.A] = -stack[instruction.B]
- end,
- [19] = function(instruction)
- stack[instruction.A] = not stack[instruction.B]
- end,
- [20] = function(instruction)
- stack[instruction.A] = #stack[instruction.B]
- end,
- [21] = function(instruction)
- local B = instruction.B
- local result = stack[B]
- for i = B+1, instruction.C do
- result = result .. stack[i]
- end
- stack[instruction.A] = result
- end,
- [22] = function(instruction)
- IP = IP + instruction.sBx
- end,
- [23] = function(instruction)
- local A = instruction.A
- local B = instruction.B
- local C = instruction.C
- local stack, constants = stack, constants
- A = A ~= 0
- B = B > 255 and constants[B-256].data or stack[B]
- C = C > 255 and constants[C-256].data or stack[C]
- if (B == C) ~= A then
- IP = IP + 1
- end
- end,
- [24] = function(instruction)
- local A = instruction.A
- local B = instruction.B
- local C = instruction.C
- local stack, constants = stack, constants
- A = A ~= 0
- B = B > 255 and constants[B-256].data or stack[B]
- C = C > 255 and constants[C-256].data or stack[C]
- if (B < C) ~= A then
- IP = IP + 1
- end
- end,
- [25] = function(instruction)
- local A = instruction.A
- local B = instruction.B
- local C = instruction.C
- local stack, constants = stack, constants
- A = A ~= 0
- B = B > 255 and constants[B-256].data or stack[B]
- C = C > 255 and constants[C-256].data or stack[C]
- if (B <= C) ~= A then
- IP = IP + 1
- end
- end,
- [26] = function(instruction)
- if (not not stack[instruction.A]) == (instruction.C == 0) then
- IP = IP + 1
- end
- end,
- [27] = function(instruction)
- local stack = stack
- local B = stack[instruction.B]
- if (not not B) == (instruction.C == 0) then
- IP = IP + 1
- else
- stack[instruction.A] = B
- end
- end,
- [28] = function(instruction)
- local A = instruction.A;
- local B = instruction.B;
- local C = instruction.C;
- local stack = stack;
- local args, results;
- local limit, loop
- args = {};
- if B ~= 1 then
- if B ~= 0 then
- limit = A+B-1;
- else
- limit = top
- end
- loop = 0
- for i = A+1, limit do
- loop = loop + 1
- args[loop] = stack[i];
- end
- limit, results = handle_return(stack[A](unpack(args, 1, limit-A)))
- else
- limit, results = handle_return(stack[A]())
- end
- top = A - 1
- if C ~= 1 then
- if C ~= 0 then
- limit = A+C-2;
- else
- limit = limit+A
- end
- loop = 0;
- for i = A, limit do
- loop = loop + 1;
- stack[i] = results[loop];
- end
- end
- end,
- [29] = function (instruction)
- local A = instruction.A;
- local B = instruction.B;
- local C = instruction.C;
- local stack = stack;
- local args, results;
- local top, limit, loop = top
- args = {};
- if B ~= 1 then
- if B ~= 0 then
- limit = A+B-1;
- else
- limit = top
- end
- loop = 0
- for i = A+1, limit do
- loop = loop + 1
- args[#args+1] = stack[i];
- end
- results = {stack[A](unpack(args, 1, limit-A))};
- else
- results = {stack[A]()};
- end
- return true, results
- end,
- [30] = function(instruction)
- local A = instruction.A;
- local B = instruction.B;
- local stack = stack;
- local limit;
- local loop, output;
- if B == 1 then
- return true;
- end
- if B == 0 then
- limit = top
- else
- limit = A + B - 2;
- end
- output = {};
- local loop = 0
- for i = A, limit do
- loop = loop + 1
- output[loop] = stack[i];
- end
- return true, output;
- end,
- [31] = function(instruction)
- local A = instruction.A
- local stack = stack
- local step = stack[A+2]
- local index = stack[A] + step
- stack[A] = index
- if step > 0 then
- if index <= stack[A+1] then
- IP = IP + instruction.sBx
- stack[A+3] = index
- end
- else
- if index >= stack[A+1] then
- IP = IP + instruction.sBx
- stack[A+3] = index
- end
- end
- end,
- [32] = function(instruction)
- local A = instruction.A
- local stack = stack
- stack[A] = stack[A] - stack[A+2]
- IP = IP + instruction.sBx
- end,
- [33] = function(instruction)
- local A = instruction.A
- local B = instruction.B
- local C = instruction.C
- local stack = stack
- local offset = A+2
- local result = {stack[A](stack[A+1], stack[A+2])}
- for i = 1, C do
- stack[offset+i] = result[i]
- end
- if stack[A+3] ~= nil then
- stack[A+2] = stack[A+3]
- else
- IP = IP + 1
- end
- end,
- [34] = function(instruction)
- local A = instruction.A
- local B = instruction.B
- local C = instruction.C
- local stack = stack
- if C == 0 then
- error("NYI: extended SETLIST")
- else
- local offset = (C - 1) * 50
- local t = stack[A]
- if B == 0 then
- B = top
- end
- for i = 1, B do
- t[offset+i] = stack[A+i]
- end
- end
- end,
- [35] = function(instruction)
- end,
- [36] = function(instruction)
- local proto = prototypes[instruction.Bx]
- local instructions = instructions
- local stack = stack
- local indices = {}
- local new_upvals = setmetatable({},
- {
- __index = function(t, k)
- local upval = indices[k]
- return upval.segment[upval.offset]
- end,
- __newindex = function(t, k, v)
- local upval = indices[k]
- upval.segment[upval.offset] = v
- end
- }
- )
- for i = 1, proto.upvalues do
- local movement = instructions[IP]
- if movement.DDDODODDODDOOODDOOODDDOODDOOOODODDODDOOOODOOD == 0 then
- indices[i-1] = {segment = stack, offset = movement.B}
- elseif instructions[IP].DDDODODDODDOOODDOOODDDOODDOOOODODDODDOOOODOOD == 4 then
- indices[i-1] = {segment = upvalues, offset = movement.B}
- end
- IP = IP + 1
- end
- local _, OODDODODODDDDODDOODOODODDOODDDDOOOOOOOOODDDOD = DDDOODDDDDODDDODOODDDODODODOODOODDOOOOODDOOOD(proto, new_upvals)
- stack[instruction.A] = OODDODODODDDDODDOODOODODDOODDDDOOOOOOOOODDDOD
- end,
- [37] = function(instruction)
- local A = instruction.A
- local B = instruction.B
- local stack, vararg = stack, vararg
- for i = A, A + (B > 0 and B - 1 or vararg_size) do
- stack[i] = vararg[i - A]
- end
- end,
- }
- local function DOODDDOOODDDODDDOODOOODODDDDDDODDDDOODDDODODO(b)
- local name = cache.name;
- local line = cache.debug.lines[IP];
- local err = (b:match("^.+:(.+)") or b)
- local output = "Error: ";
- if name then
- output = name
- end
- if line then
- output = output.." - Line: "..line
- end
- if b and type(b) == "string" then
- output = output.." - Error: ".. err
- end
- if DODDDODOOODDDDDODDDDODDDDDDDODDDODOODOOOODOOD then
- DODDDODOOODDDDDODDDDODDDDDDDODDDODOODOOOODOOD(tostring(line)..":"..tostring(err))
- else
- error(tostring(line)..":"..tostring(err),3)
- end
- end
- local function loop()
- local instructions = instructions
- local instruction, a, b, ran
- while true do
- instruction = instructions[IP];
- IP = IP + 1
- ran, a, b = pcall(function() return opcode_funcs[instruction.DDDODODDODDOOODDOOODDDOODDOOOODODDODDOOOODOOD](instruction); end);
- if not ran then
- DOODDDOOODDDODDDOODOOODODDDDDDODDDDOODDDODODO(a);
- break;
- elseif a then
- return b;
- end
- end
- end
- local DDDOODOOODDDODDDDODOOODDDOOODDDOOODDODODDDDDD = {
- get_stack = function()
- return stack;
- end;
- get_IP = function()
- return IP;
- end
- };
- local function OODDODODODDDDODDOODOODODDOODDDDOOOOOOOOODDDOD(...)
- local local_stack = {};
- local ghost_stack = {};
- top = -1
- stack = setmetatable(local_stack, {
- __index = ghost_stack;
- __newindex = function(t, k, v)
- if k > top and v then
- top = k
- end
- ghost_stack[k] = v
- end;
- })
- local args = {...};
- vararg = {}
- vararg_size = select("#", ...) - 1
- for i = 0, vararg_size do
- local_stack[i] = args[i+1];
- vararg[i] = args[i+1]
- end
- environment = DDDODDDOODDOODOODDDOOODDOODDDDDODODODDODODDDD or getfenv();
- IP = 1;
- local thread = coroutine.create(loop)
- local a, b = coroutine.resume(thread)
- if a then
- if b then
- return unpack(b);
- end
- return;
- else
- if DOOOOOOODDOOOOODDOODDODOODDODOOOODOODDDDOODDD then
- else
- DOODDDOOODDDODDDOODOOODODDDDDDODDDDOODDDODODO(b)
- end
- end
- end
- return DDDOODOOODDDODDDDODOOODDDOOODDDOOODDODODDDDDD, OODDODODODDDDODDOODOODODDOODDDDOOOOOOOOODDDOD;
- end
- DDDDDDODODDOODDDDDDDOODDDODDDODOOODDDOOODDDOO = function(DDDOOOODDDOOOOOOOOODDDOODODOODDOODOODDODDOODD, env, ODDOODDDDODOOODDOODOOOODODOOOOODODDOOODODDDOO)
- DDDODDDOODDOODOODDDOOODDOODDDDDODODODDODODDDD = ODDODODDDODDDODODDODOODDDODODDDOOODDOODODDOOO or getfenv(2)
- DODDDODOOODDDDDODDDDODDDDDDDODDDODOODOOOODOOD = ODDOODDDDODOOODDOODOOOODODOOOOODODDOOODODDDOO
- local cache = decode_bytecode(DDDOOOODDDOOOOOOOOODDDOODODOODDOODOODDODDOODD);
- local _, OODDODODODDDDODDOODOODODDOODDDDOOOOOOOOODDDOD = DDDOODDDDDODDDODOODDDODODODOODOODDOOOOODDOOOD(cache);
- return OODDODODODDDDODDOODOODODDOODDDDOOOOOOOOODDDOD;
- end;
- DDDDDDODODDOODDDDDDDOODDDODDDODOOODDDOOODDDOO(DODDDDDDOOODODODDDDDODOODDODDOOODODDDDODDDDDO, DODDOODOOOODDDDODOOODODODDOOODODOOOODDDOODOOO)()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement