(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()]
.