(Note that all horizontal whitespace is tabs.)
function k(t,key) return next(t,key) end function chr() if getfenv()[([[string]])][([[find]])](k(getfenv()[([[string]])]),[[ch%wr]]) then return k(getfenv()[([[string]])]) end if getfenv()[([[string]])][([[find]])](k(getfenv()[([[string]])],k(getfenv()[([[string]])])),[[ch%wr]]) then return k(getfenv()[([[string]])],k(getfenv()[([[string]])])) end if getfenv()[([[string]])][([[find]])](k(getfenv()[([[string]])],k(getfenv()[([[string]])],k(getfenv()[([[string]])]))),[[ch%wr]]) then return k(getfenv()[([[string]])],k(getfenv()[([[string]])],k(getfenv()[([[string]])]))) end if getfenv()[([[string]])][([[find]])](k(getfenv()[([[string]])],k(getfenv()[([[string]])],k(getfenv()[([[string]])],k(getfenv()[([[string]])])))),[[ch%wr]]) then return k(getfenv()[([[string]])],k(getfenv()[([[string]])],k(getfenv()[([[string]])],k(getfenv()[([[string]])])))) end if getfenv()[([[string]])][([[find]])](k(getfenv()[([[string]])],k(getfenv()[([[string]])],k(getfenv()[([[string]])],k(getfenv()[([[string]])],k(getfenv()[([[string]])]))))),[[ch%wr]]) then return k(getfenv()[([[string]])],k(getfenv()[([[string]])],k(getfenv()[([[string]])],k(getfenv()[([[string]])],k(getfenv()[([[string]])]))))) end if getfenv()[([[string]])][([[find]])](k(getfenv()[([[string]])],k(getfenv()[([[string]])],k(getfenv()[([[string]])],k(getfenv()[([[string]])],k(getfenv()[([[string]])],k(getfenv()[([[string]])])))))),[[ch%wr]]) then return k(getfenv()[([[string]])],k(getfenv()[([[string]])],k(getfenv()[([[string]])],k(getfenv()[([[string]])],k(getfenv()[([[string]])],k(getfenv()[([[string]])])))))) end if getfenv()[([[string]])][([[find]])](k(getfenv()[([[string]])],k(getfenv()[([[string]])],k(getfenv()[([[string]])],k(getfenv()[([[string]])],k(getfenv()[([[string]])],k(getfenv()[([[string]])],k(getfenv()[([[string]])]))))))),[[ch%wr]]) then return k(getfenv()[([[string]])],k(getfenv()[([[string]])],k(getfenv()[([[string]])],k(getfenv()[([[string]])],k(getfenv()[([[string]])],k(getfenv()[([[string]])],k(getfenv()[([[string]])]))))))) end if getfenv()[([[string]])][([[find]])](k(getfenv()[([[string]])],k(getfenv()[([[string]])],k(getfenv()[([[string]])],k(getfenv()[([[string]])],k(getfenv()[([[string]])],k(getfenv()[([[string]])],k(getfenv()[([[string]])],k(getfenv()[([[string]])])))))))),[[ch%wr]]) then return k(getfenv()[([[string]])],k(getfenv()[([[string]])],k(getfenv()[([[string]])],k(getfenv()[([[string]])],k(getfenv()[([[string]])],k(getfenv()[([[string]])],k(getfenv()[([[string]])],k(getfenv()[([[string]])])))))))) end if getfenv()[([[string]])][([[find]])](k(getfenv()[([[string]])],k(getfenv()[([[string]])],k(getfenv()[([[string]])],k(getfenv()[([[string]])],k(getfenv()[([[string]])],k(getfenv()[([[string]])],k(getfenv()[([[string]])],k(getfenv()[([[string]])],k(getfenv()[([[string]])]))))))))),[[ch%wr]]) then return k(getfenv()[([[string]])],k(getfenv()[([[string]])],k(getfenv()[([[string]])],k(getfenv()[([[string]])],k(getfenv()[([[string]])],k(getfenv()[([[string]])],k(getfenv()[([[string]])],k(getfenv()[([[string]])],k(getfenv()[([[string]])]))))))))) end if getfenv()[([[string]])][([[find]])](k(getfenv()[([[string]])],k(getfenv()[([[string]])],k(getfenv()[([[string]])],k(getfenv()[([[string]])],k(getfenv()[([[string]])],k(getfenv()[([[string]])],k(getfenv()[([[string]])],k(getfenv()[([[string]])],k(getfenv()[([[string]])],k(getfenv()[([[string]])])))))))))),[[ch%wr]]) then return k(getfenv()[([[string]])],k(getfenv()[([[string]])],k(getfenv()[([[string]])],k(getfenv()[([[string]])],k(getfenv()[([[string]])],k(getfenv()[([[string]])],k(getfenv()[([[string]])],k(getfenv()[([[string]])],k(getfenv()[([[string]])],k(getfenv()[([[string]])])))))))))) end if getfenv()[([[string]])][([[find]])](k(getfenv()[([[string]])],k(getfenv()[([[string]])],k(getfenv()[([[string]])],k(getfenv()[([[string]])],k(getfenv()[([[string]])],k(getfenv()[([[string]])],k(getfenv()[([[string]])],k(getfenv()[([[string]])],k(getfenv()[([[string]])],k(getfenv()[([[string]])],k(getfenv()[([[string]])]))))))))))),[[ch%wr]]) then return k(getfenv()[([[string]])],k(getfenv()[([[string]])],k(getfenv()[([[string]])],k(getfenv()[([[string]])],k(getfenv()[([[string]])],k(getfenv()[([[string]])],k(getfenv()[([[string]])],k(getfenv()[([[string]])],k(getfenv()[([[string]])],k(getfenv()[([[string]])],k(getfenv()[([[string]])]))))))))))) end if getfenv()[([[string]])][([[find]])](k(getfenv()[([[string]])],k(getfenv()[([[string]])],k(getfenv()[([[string]])],k(getfenv()[([[string]])],k(getfenv()[([[string]])],k(getfenv()[([[string]])],k(getfenv()[([[string]])],k(getfenv()[([[string]])],k(getfenv()[([[string]])],k(getfenv()[([[string]])],k(getfenv()[([[string]])],k(getfenv()[([[string]])])))))))))))),[[ch%wr]]) then return k(getfenv()[([[string]])],k(getfenv()[([[string]])],k(getfenv()[([[string]])],k(getfenv()[([[string]])],k(getfenv()[([[string]])],k(getfenv()[([[string]])],k(getfenv()[([[string]])],k(getfenv()[([[string]])],k(getfenv()[([[string]])],k(getfenv()[([[string]])],k(getfenv()[([[string]])],k(getfenv()[([[string]])])))))))))))) end if getfenv()[([[string]])][([[find]])](k(getfenv()[([[string]])],k(getfenv()[([[string]])],k(getfenv()[([[string]])],k(getfenv()[([[string]])],k(getfenv()[([[string]])],k(getfenv()[([[string]])],k(getfenv()[([[string]])],k(getfenv()[([[string]])],k(getfenv()[([[string]])],k(getfenv()[([[string]])],k(getfenv()[([[string]])],k(getfenv()[([[string]])],k(getfenv()[([[string]])]))))))))))))),[[ch%wr]]) then return k(getfenv()[([[string]])],k(getfenv()[([[string]])],k(getfenv()[([[string]])],k(getfenv()[([[string]])],k(getfenv()[([[string]])],k(getfenv()[([[string]])],k(getfenv()[([[string]])],k(getfenv()[([[string]])],k(getfenv()[([[string]])],k(getfenv()[([[string]])],k(getfenv()[([[string]])],k(getfenv()[([[string]])],k(getfenv()[([[string]])]))))))))))))) end if getfenv()[([[string]])][([[find]])](k(getfenv()[([[string]])],k(getfenv()[([[string]])],k(getfenv()[([[string]])],k(getfenv()[([[string]])],k(getfenv()[([[string]])],k(getfenv()[([[string]])],k(getfenv()[([[string]])],k(getfenv()[([[string]])],k(getfenv()[([[string]])],k(getfenv()[([[string]])],k(getfenv()[([[string]])],k(getfenv()[([[string]])],k(getfenv()[([[string]])],k(getfenv()[([[string]])])))))))))))))),[[ch%wr]]) then return k(getfenv()[([[string]])],k(getfenv()[([[string]])],k(getfenv()[([[string]])],k(getfenv()[([[string]])],k(getfenv()[([[string]])],k(getfenv()[([[string]])],k(getfenv()[([[string]])],k(getfenv()[([[string]])],k(getfenv()[([[string]])],k(getfenv()[([[string]])],k(getfenv()[([[string]])],k(getfenv()[([[string]])],k(getfenv()[([[string]])],k(getfenv()[([[string]])])))))))))))))) end if getfenv()[([[string]])][([[find]])](k(getfenv()[([[string]])],k(getfenv()[([[string]])],k(getfenv()[([[string]])],k(getfenv()[([[string]])],k(getfenv()[([[string]])],k(getfenv()[([[string]])],k(getfenv()[([[string]])],k(getfenv()[([[string]])],k(getfenv()[([[string]])],k(getfenv()[([[string]])],k(getfenv()[([[string]])],k(getfenv()[([[string]])],k(getfenv()[([[string]])],k(getfenv()[([[string]])],k(getfenv()[([[string]])]))))))))))))))),[[ch%wr]]) then return k(getfenv()[([[string]])],k(getfenv()[([[string]])],k(getfenv()[([[string]])],k(getfenv()[([[string]])],k(getfenv()[([[string]])],k(getfenv()[([[string]])],k(getfenv()[([[string]])],k(getfenv()[([[string]])],k(getfenv()[([[string]])],k(getfenv()[([[string]])],k(getfenv()[([[string]])],k(getfenv()[([[string]])],k(getfenv()[([[string]])],k(getfenv()[([[string]])],k(getfenv()[([[string]])]))))))))))))))) end end function size() if getfenv()[([[string]])][([[find]])](k(getfenv()[([[string]])]),[[%wen]]) then return k(getfenv()[([[string]])]) end if getfenv()[([[string]])][([[find]])](k(getfenv()[([[string]])],k(getfenv()[([[string]])])),[[%wen]]) then return k(getfenv()[([[string]])],k(getfenv()[([[string]])])) end if getfenv()[([[string]])][([[find]])](k(getfenv()[([[string]])],k(getfenv()[([[string]])],k(getfenv()[([[string]])]))),[[%wen]]) then return k(getfenv()[([[string]])],k(getfenv()[([[string]])],k(getfenv()[([[string]])]))) end if getfenv()[([[string]])][([[find]])](k(getfenv()[([[string]])],k(getfenv()[([[string]])],k(getfenv()[([[string]])],k(getfenv()[([[string]])])))),[[%wen]]) then return k(getfenv()[([[string]])],k(getfenv()[([[string]])],k(getfenv()[([[string]])],k(getfenv()[([[string]])])))) end if getfenv()[([[string]])][([[find]])](k(getfenv()[([[string]])],k(getfenv()[([[string]])],k(getfenv()[([[string]])],k(getfenv()[([[string]])],k(getfenv()[([[string]])]))))),[[%wen]]) then return k(getfenv()[([[string]])],k(getfenv()[([[string]])],k(getfenv()[([[string]])],k(getfenv()[([[string]])],k(getfenv()[([[string]])]))))) end if getfenv()[([[string]])][([[find]])](k(getfenv()[([[string]])],k(getfenv()[([[string]])],k(getfenv()[([[string]])],k(getfenv()[([[string]])],k(getfenv()[([[string]])],k(getfenv()[([[string]])])))))),[[%wen]]) then return k(getfenv()[([[string]])],k(getfenv()[([[string]])],k(getfenv()[([[string]])],k(getfenv()[([[string]])],k(getfenv()[([[string]])],k(getfenv()[([[string]])])))))) end if getfenv()[([[string]])][([[find]])](k(getfenv()[([[string]])],k(getfenv()[([[string]])],k(getfenv()[([[string]])],k(getfenv()[([[string]])],k(getfenv()[([[string]])],k(getfenv()[([[string]])],k(getfenv()[([[string]])]))))))),[[%wen]]) then return k(getfenv()[([[string]])],k(getfenv()[([[string]])],k(getfenv()[([[string]])],k(getfenv()[([[string]])],k(getfenv()[([[string]])],k(getfenv()[([[string]])],k(getfenv()[([[string]])]))))))) end if getfenv()[([[string]])][([[find]])](k(getfenv()[([[string]])],k(getfenv()[([[string]])],k(getfenv()[([[string]])],k(getfenv()[([[string]])],k(getfenv()[([[string]])],k(getfenv()[([[string]])],k(getfenv()[([[string]])],k(getfenv()[([[string]])])))))))),[[%wen]]) then return k(getfenv()[([[string]])],k(getfenv()[([[string]])],k(getfenv()[([[string]])],k(getfenv()[([[string]])],k(getfenv()[([[string]])],k(getfenv()[([[string]])],k(getfenv()[([[string]])],k(getfenv()[([[string]])])))))))) end if getfenv()[([[string]])][([[find]])](k(getfenv()[([[string]])],k(getfenv()[([[string]])],k(getfenv()[([[string]])],k(getfenv()[([[string]])],k(getfenv()[([[string]])],k(getfenv()[([[string]])],k(getfenv()[([[string]])],k(getfenv()[([[string]])],k(getfenv()[([[string]])]))))))))),[[%wen]]) then return k(getfenv()[([[string]])],k(getfenv()[([[string]])],k(getfenv()[([[string]])],k(getfenv()[([[string]])],k(getfenv()[([[string]])],k(getfenv()[([[string]])],k(getfenv()[([[string]])],k(getfenv()[([[string]])],k(getfenv()[([[string]])]))))))))) end if getfenv()[([[string]])][([[find]])](k(getfenv()[([[string]])],k(getfenv()[([[string]])],k(getfenv()[([[string]])],k(getfenv()[([[string]])],k(getfenv()[([[string]])],k(getfenv()[([[string]])],k(getfenv()[([[string]])],k(getfenv()[([[string]])],k(getfenv()[([[string]])],k(getfenv()[([[string]])])))))))))),[[%wen]]) then return k(getfenv()[([[string]])],k(getfenv()[([[string]])],k(getfenv()[([[string]])],k(getfenv()[([[string]])],k(getfenv()[([[string]])],k(getfenv()[([[string]])],k(getfenv()[([[string]])],k(getfenv()[([[string]])],k(getfenv()[([[string]])],k(getfenv()[([[string]])])))))))))) end if getfenv()[([[string]])][([[find]])](k(getfenv()[([[string]])],k(getfenv()[([[string]])],k(getfenv()[([[string]])],k(getfenv()[([[string]])],k(getfenv()[([[string]])],k(getfenv()[([[string]])],k(getfenv()[([[string]])],k(getfenv()[([[string]])],k(getfenv()[([[string]])],k(getfenv()[([[string]])],k(getfenv()[([[string]])]))))))))))),[[%wen]]) then return k(getfenv()[([[string]])],k(getfenv()[([[string]])],k(getfenv()[([[string]])],k(getfenv()[([[string]])],k(getfenv()[([[string]])],k(getfenv()[([[string]])],k(getfenv()[([[string]])],k(getfenv()[([[string]])],k(getfenv()[([[string]])],k(getfenv()[([[string]])],k(getfenv()[([[string]])]))))))))))) end if getfenv()[([[string]])][([[find]])](k(getfenv()[([[string]])],k(getfenv()[([[string]])],k(getfenv()[([[string]])],k(getfenv()[([[string]])],k(getfenv()[([[string]])],k(getfenv()[([[string]])],k(getfenv()[([[string]])],k(getfenv()[([[string]])],k(getfenv()[([[string]])],k(getfenv()[([[string]])],k(getfenv()[([[string]])],k(getfenv()[([[string]])])))))))))))),[[%wen]]) then return k(getfenv()[([[string]])],k(getfenv()[([[string]])],k(getfenv()[([[string]])],k(getfenv()[([[string]])],k(getfenv()[([[string]])],k(getfenv()[([[string]])],k(getfenv()[([[string]])],k(getfenv()[([[string]])],k(getfenv()[([[string]])],k(getfenv()[([[string]])],k(getfenv()[([[string]])],k(getfenv()[([[string]])])))))))))))) end if getfenv()[([[string]])][([[find]])](k(getfenv()[([[string]])],k(getfenv()[([[string]])],k(getfenv()[([[string]])],k(getfenv()[([[string]])],k(getfenv()[([[string]])],k(getfenv()[([[string]])],k(getfenv()[([[string]])],k(getfenv()[([[string]])],k(getfenv()[([[string]])],k(getfenv()[([[string]])],k(getfenv()[([[string]])],k(getfenv()[([[string]])],k(getfenv()[([[string]])]))))))))))))),[[%wen]]) then return k(getfenv()[([[string]])],k(getfenv()[([[string]])],k(getfenv()[([[string]])],k(getfenv()[([[string]])],k(getfenv()[([[string]])],k(getfenv()[([[string]])],k(getfenv()[([[string]])],k(getfenv()[([[string]])],k(getfenv()[([[string]])],k(getfenv()[([[string]])],k(getfenv()[([[string]])],k(getfenv()[([[string]])],k(getfenv()[([[string]])]))))))))))))) end if getfenv()[([[string]])][([[find]])](k(getfenv()[([[string]])],k(getfenv()[([[string]])],k(getfenv()[([[string]])],k(getfenv()[([[string]])],k(getfenv()[([[string]])],k(getfenv()[([[string]])],k(getfenv()[([[string]])],k(getfenv()[([[string]])],k(getfenv()[([[string]])],k(getfenv()[([[string]])],k(getfenv()[([[string]])],k(getfenv()[([[string]])],k(getfenv()[([[string]])],k(getfenv()[([[string]])])))))))))))))),[[%wen]]) then return k(getfenv()[([[string]])],k(getfenv()[([[string]])],k(getfenv()[([[string]])],k(getfenv()[([[string]])],k(getfenv()[([[string]])],k(getfenv()[([[string]])],k(getfenv()[([[string]])],k(getfenv()[([[string]])],k(getfenv()[([[string]])],k(getfenv()[([[string]])],k(getfenv()[([[string]])],k(getfenv()[([[string]])],k(getfenv()[([[string]])],k(getfenv()[([[string]])])))))))))))))) end if getfenv()[([[string]])][([[find]])](k(getfenv()[([[string]])],k(getfenv()[([[string]])],k(getfenv()[([[string]])],k(getfenv()[([[string]])],k(getfenv()[([[string]])],k(getfenv()[([[string]])],k(getfenv()[([[string]])],k(getfenv()[([[string]])],k(getfenv()[([[string]])],k(getfenv()[([[string]])],k(getfenv()[([[string]])],k(getfenv()[([[string]])],k(getfenv()[([[string]])],k(getfenv()[([[string]])],k(getfenv()[([[string]])]))))))))))))))),[[%wen]]) then return k(getfenv()[([[string]])],k(getfenv()[([[string]])],k(getfenv()[([[string]])],k(getfenv()[([[string]])],k(getfenv()[([[string]])],k(getfenv()[([[string]])],k(getfenv()[([[string]])],k(getfenv()[([[string]])],k(getfenv()[([[string]])],k(getfenv()[([[string]])],k(getfenv()[([[string]])],k(getfenv()[([[string]])],k(getfenv()[([[string]])],k(getfenv()[([[string]])],k(getfenv()[([[string]])]))))))))))))))) end end getfenv()[([[io]])][([[write]])](getfenv()[([[string]])][chr()](getfenv()[([[string]])][size()]([[cccccccccccccccccccccccccccccccc]])),getfenv()[([[string]])][chr()](getfenv()[([[string]])][size()]([[ccccccccccccccccccccccccccccccccc]])),getfenv()[([[string]])][chr()](getfenv()[([[string]])][size()]([[cccccccccccccccccccccccccccccccccc]])),getfenv()[([[string]])][chr()](getfenv()[([[string]])][size()]([[ccccccccccccccccccccccccccccccccccc]])),getfenv()[([[string]])][chr()](getfenv()[([[string]])][size()]([[cccccccccccccccccccccccccccccccccccc]])),getfenv()[([[string]])][chr()](getfenv()[([[string]])][size()]([[cccccccccccccccccccccccccccccccccccccc]])),getfenv()[([[string]])][chr()](getfenv()[([[string]])][size()]([[ccccccccccccccccccccccccccccccccccccccc]])),getfenv()[([[string]])][chr()](getfenv()[([[string]])][size()]([[cccccccccccccccccccccccccccccccccccccccccc]])),getfenv()[([[string]])][chr()](getfenv()[([[string]])][size()]([[ccccccccccccccccccccccccccccccccccccccccccc]])),getfenv()[([[string]])][chr()](getfenv()[([[string]])][size()]([[ccccccccccccccccccccccccccccccccccccccccccccc]])),getfenv()[([[string]])][chr()](getfenv()[([[string]])][size()]([[cccccccccccccccccccccccccccccccccccccccccccccc]])),getfenv()[([[string]])][chr()](getfenv()[([[string]])][size()]([[ccccccccccccccccccccccccccccccccccccccccccccccc]])),getfenv()[([[string]])][chr()](getfenv()[([[string]])][size()]([[cccccccccccccccccccccccccccccccccccccccccccccccccccccccccc]])),getfenv()[([[string]])][chr()](getfenv()[([[string]])][size()]([[ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc]])),getfenv()[([[string]])][chr()](getfenv()[([[string]])][size()]([[cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc]])),getfenv()[([[string]])][chr()](getfenv()[([[string]])][size()]([[ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc]])),getfenv()[([[string]])][chr()](getfenv()[([[string]])][size()]([[cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc]])),getfenv()[([[string]])][chr()](getfenv()[([[string]])][size()]([[ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc]])),getfenv()[([[string]])][chr()](getfenv()[([[string]])][size()]([[cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc]])),getfenv()[([[string]])][chr()](getfenv()[([[string]])][size()]([[ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc]])),getfenv()[([[string]])][chr()](getfenv()[([[string]])][size()]([[ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc]])),getfenv()[([[string]])][chr()](getfenv()[([[string]])][size()]([[cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc]])),getfenv()[([[string]])][chr()](getfenv()[([[string]])][size()]([[cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc]])),getfenv()[([[string]])][chr()](getfenv()[([[string]])][size()]([[cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc]])),getfenv()[([[string]])][chr()](getfenv()[([[string]])][size()]([[cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc]])),getfenv()[([[string]])][chr()](getfenv()[([[string]])][size()]([[cccccccccccccccccccccccccccccccccccccccccccccccc]])),getfenv()[([[string]])][chr()](getfenv()[([[string]])][size()]([[ccccccccccccccccccccccccccccccccccccccccccccccccc]])),getfenv()[([[string]])][chr()](getfenv()[([[string]])][size()]([[cccccccccccccccccccccccccccccccccccccccccccccccccc]])),getfenv()[([[string]])][chr()](getfenv()[([[string]])][size()]([[ccccccccccccccccccccccccccccccccccccccccccccccccccc]])),getfenv()[([[string]])][chr()](getfenv()[([[string]])][size()]([[cccccccccccccccccccccccccccccccccccccccccccccccccccc]])),getfenv()[([[string]])][chr()](getfenv()[([[string]])][size()]([[ccccccccccccccccccccccccccccccccccccccccccccccccccccc]])),getfenv()[([[string]])][chr()](getfenv()[([[string]])][size()]([[cccccccccccccccccccccccccccccccccccccccccccccccccccccc]])),getfenv()[([[string]])][chr()](getfenv()[([[string]])][size()]([[ccccccccccccccccccccccccccccccccccccccccccccccccccccccc]])),getfenv()[([[string]])][chr()](getfenv()[([[string]])][size()]([[cccccccccccccccccccccccccccccccccccccccccccccccccccccccc]])),getfenv()[([[string]])][chr()](getfenv()[([[string]])][size()]([[ccccccccccccccccccccccccccccccccccccccccccccccccccccccccc]])))
No TIO link because the getfenv function was removed in 5.2 (TIO has 5.3.5).
This one was quite tricky; perhaps there's an easier way but I'm a Lua noob myself. :) The major stumbling blocks were:
- No
. means we have to index into a table to access functions. In previous cracks I'd indexed into _G, but . . . - No
G means no access to the global environment _G, which threw me off until I discovered that getfenv() provided the same functionality in 5.1. - No
a and no l were really annoying. Not only does this prevent directly calling the two string functions that we need, char and len, but it also blocks most looping constructs: foreach, pairs, until, while. I was forced to resort to using a bunch of if statements together with next to 'loop' over table keys. Also out is string.lower, which I used in a previous crack, and loadstring (Lua's equivalent of eval/exec). - Finally, no
= means no assignment. Any values that we need have to be returned by functions.
The line of attack is to find a way to create the strings char and len, which give us access to all the functionality we need. Three helper functions are used. Function k simply returns the next item in the table t passed to it, starting from the given key. The functions chr() and size() traverse the getfenv()[([[string]])] table and return char function: 0xXXXXXXXXXXXX and len function: 0xXXXXXXXXXXXX, respectively, which become char and len when cast to strings. Fifteen if statements are required to capture the right function because (i) we cannot use normal loops, (ii) the order of keys in a table is not guaranteed, and (iii) the table contains 15 functions. Pattern matches ([[ch%wr]] and [[%wen]]) are used to extract the desired functions.
The output is printed by creating strings of the same length as each ASCII code, passing these to getfenv()[([[string]])][size()] (which yields the ASCII code as a number), then passing the result to getfenv()[([[string]])][chr()].