diff --git a/src/api/math.lua b/src/api/math.lua index fc7fb18d..a9f46b34 100644 --- a/src/api/math.lua +++ b/src/api/math.lua @@ -266,7 +266,7 @@ ffi.metatype(mat4, { m.m[0], m.m[1], m.m[2], m.m[3], m.m[4], m.m[5], m.m[6], m.m[7], m.m[8], m.m[9], m.m[10], m.m[11], - m.m[12], m.m[13], m.m[14], m.m[15] = ... + m.m[12], m.m[13], m.m[14], m.m[15] = x, ... end return m end, @@ -283,21 +283,19 @@ ffi.metatype(mat4, { identity = function(m) checkmat4(m) - C.mat4_identity(m) + return C.mat4_identity(m) end, - inverse = function(m) + invert = function(m, out) checkmat4(m) - local out = math.mat4() - C.mat4_invert(C.mat4_set(out, m)) - return out + out = out and C.mat4_set(out, m) or m + return C.mat4_invert(out) end, transpose = function(m) checkmat4(m) - local out = math.mat4() - C.mat4_transpose(C.mat4_set(out, m)) - return out + out = out and C.mat4_set(out, m) or m + return C.mat4_transpose(out) end, translate = function(m, x, y, z) @@ -368,5 +366,9 @@ ffi.metatype(mat4, { C.mat4_transform(m, f + 0, f + 1, f + 2) return math.vec3(f[0], f[1], f[2]) end + end, + + __tostring = function(m) + return 'mat4' end }) diff --git a/src/api/math.lua.h b/src/api/math.lua.h index b61921b4..54d7bf4a 100644 --- a/src/api/math.lua.h +++ b/src/api/math.lua.h @@ -647,215 +647,218 @@ unsigned char math_lua[] = { 0x6d, 0x2e, 0x6d, 0x5b, 0x31, 0x32, 0x5d, 0x2c, 0x20, 0x6d, 0x2e, 0x6d, 0x5b, 0x31, 0x33, 0x5d, 0x2c, 0x20, 0x6d, 0x2e, 0x6d, 0x5b, 0x31, 0x34, 0x5d, 0x2c, 0x20, 0x6d, 0x2e, 0x6d, 0x5b, 0x31, 0x35, 0x5d, 0x20, 0x3d, - 0x20, 0x2e, 0x2e, 0x2e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x65, - 0x6e, 0x64, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, - 0x75, 0x72, 0x6e, 0x20, 0x6d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x65, 0x6e, - 0x64, 0x2c, 0x0a, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x63, 0x6f, 0x70, 0x79, - 0x20, 0x3d, 0x20, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x28, - 0x6d, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x63, 0x68, 0x65, - 0x63, 0x6b, 0x6d, 0x61, 0x74, 0x34, 0x28, 0x6d, 0x29, 0x0a, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x6d, - 0x61, 0x74, 0x68, 0x2e, 0x6d, 0x61, 0x74, 0x34, 0x28, 0x6d, 0x3a, 0x75, - 0x6e, 0x70, 0x61, 0x63, 0x6b, 0x28, 0x29, 0x29, 0x0a, 0x20, 0x20, 0x20, - 0x20, 0x65, 0x6e, 0x64, 0x2c, 0x0a, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x73, - 0x61, 0x76, 0x65, 0x20, 0x3d, 0x20, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, + 0x20, 0x78, 0x2c, 0x20, 0x2e, 0x2e, 0x2e, 0x0a, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x65, 0x6e, 0x64, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x6d, 0x0a, 0x20, 0x20, 0x20, + 0x20, 0x65, 0x6e, 0x64, 0x2c, 0x0a, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x63, + 0x6f, 0x70, 0x79, 0x20, 0x3d, 0x20, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x28, 0x6d, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x6d, 0x61, 0x74, 0x34, 0x28, 0x6d, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, - 0x6e, 0x20, 0x6d, 0x61, 0x74, 0x34, 0x28, 0x6d, 0x3a, 0x75, 0x6e, 0x70, - 0x61, 0x63, 0x6b, 0x28, 0x29, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x65, - 0x6e, 0x64, 0x2c, 0x0a, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x69, 0x64, 0x65, - 0x6e, 0x74, 0x69, 0x74, 0x79, 0x20, 0x3d, 0x20, 0x66, 0x75, 0x6e, 0x63, - 0x74, 0x69, 0x6f, 0x6e, 0x28, 0x6d, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x6d, 0x61, 0x74, 0x34, 0x28, - 0x6d, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x43, 0x2e, 0x6d, - 0x61, 0x74, 0x34, 0x5f, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, - 0x28, 0x6d, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x65, 0x6e, 0x64, 0x2c, - 0x0a, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x69, 0x6e, 0x76, 0x65, 0x72, 0x73, - 0x65, 0x20, 0x3d, 0x20, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, - 0x28, 0x6d, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x63, 0x68, - 0x65, 0x63, 0x6b, 0x6d, 0x61, 0x74, 0x34, 0x28, 0x6d, 0x29, 0x0a, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x20, 0x6f, - 0x75, 0x74, 0x20, 0x3d, 0x20, 0x6d, 0x61, 0x74, 0x68, 0x2e, 0x6d, 0x61, - 0x74, 0x34, 0x28, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x43, - 0x2e, 0x6d, 0x61, 0x74, 0x34, 0x5f, 0x69, 0x6e, 0x76, 0x65, 0x72, 0x74, - 0x28, 0x43, 0x2e, 0x6d, 0x61, 0x74, 0x34, 0x5f, 0x73, 0x65, 0x74, 0x28, - 0x6f, 0x75, 0x74, 0x2c, 0x20, 0x6d, 0x29, 0x29, 0x0a, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x6f, 0x75, - 0x74, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x65, 0x6e, 0x64, 0x2c, 0x0a, 0x0a, - 0x20, 0x20, 0x20, 0x20, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x70, 0x6f, 0x73, - 0x65, 0x20, 0x3d, 0x20, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, - 0x28, 0x6d, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x63, 0x68, - 0x65, 0x63, 0x6b, 0x6d, 0x61, 0x74, 0x34, 0x28, 0x6d, 0x29, 0x0a, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x20, 0x6f, - 0x75, 0x74, 0x20, 0x3d, 0x20, 0x6d, 0x61, 0x74, 0x68, 0x2e, 0x6d, 0x61, - 0x74, 0x34, 0x28, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x43, - 0x2e, 0x6d, 0x61, 0x74, 0x34, 0x5f, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x70, - 0x6f, 0x73, 0x65, 0x28, 0x43, 0x2e, 0x6d, 0x61, 0x74, 0x34, 0x5f, 0x73, - 0x65, 0x74, 0x28, 0x6f, 0x75, 0x74, 0x2c, 0x20, 0x6d, 0x29, 0x29, 0x0a, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, - 0x20, 0x6f, 0x75, 0x74, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x65, 0x6e, 0x64, - 0x2c, 0x0a, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x74, 0x72, 0x61, 0x6e, 0x73, - 0x6c, 0x61, 0x74, 0x65, 0x20, 0x3d, 0x20, 0x66, 0x75, 0x6e, 0x63, 0x74, - 0x69, 0x6f, 0x6e, 0x28, 0x6d, 0x2c, 0x20, 0x78, 0x2c, 0x20, 0x79, 0x2c, - 0x20, 0x7a, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x63, 0x68, - 0x65, 0x63, 0x6b, 0x6d, 0x61, 0x74, 0x34, 0x28, 0x6d, 0x29, 0x0a, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x74, 0x79, 0x70, 0x65, - 0x28, 0x78, 0x29, 0x20, 0x3d, 0x3d, 0x20, 0x27, 0x6e, 0x75, 0x6d, 0x62, - 0x65, 0x72, 0x27, 0x20, 0x74, 0x68, 0x65, 0x6e, 0x0a, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x43, 0x2e, 0x6d, 0x61, 0x74, 0x34, 0x5f, - 0x74, 0x72, 0x61, 0x6e, 0x73, 0x6c, 0x61, 0x74, 0x65, 0x28, 0x6d, 0x2c, - 0x20, 0x78, 0x2c, 0x20, 0x79, 0x2c, 0x20, 0x7a, 0x29, 0x0a, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x65, 0x6c, 0x73, 0x65, 0x0a, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x76, 0x65, - 0x63, 0x33, 0x28, 0x78, 0x2c, 0x20, 0x31, 0x2c, 0x20, 0x27, 0x76, 0x65, - 0x63, 0x33, 0x20, 0x6f, 0x72, 0x20, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, - 0x27, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x43, - 0x2e, 0x6d, 0x61, 0x74, 0x34, 0x5f, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x6c, - 0x61, 0x74, 0x65, 0x28, 0x6d, 0x2c, 0x20, 0x78, 0x2e, 0x78, 0x2c, 0x20, - 0x78, 0x2e, 0x79, 0x2c, 0x20, 0x78, 0x2e, 0x7a, 0x29, 0x0a, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x65, 0x6e, 0x64, 0x0a, 0x20, 0x20, 0x20, 0x20, - 0x65, 0x6e, 0x64, 0x2c, 0x0a, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x72, 0x6f, - 0x74, 0x61, 0x74, 0x65, 0x20, 0x3d, 0x20, 0x66, 0x75, 0x6e, 0x63, 0x74, - 0x69, 0x6f, 0x6e, 0x28, 0x6d, 0x2c, 0x20, 0x61, 0x6e, 0x67, 0x6c, 0x65, - 0x2c, 0x20, 0x61, 0x78, 0x2c, 0x20, 0x61, 0x79, 0x2c, 0x20, 0x61, 0x7a, - 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x63, 0x68, 0x65, 0x63, - 0x6b, 0x6d, 0x61, 0x74, 0x34, 0x28, 0x6d, 0x29, 0x0a, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x74, 0x79, 0x70, 0x65, 0x28, 0x61, - 0x6e, 0x67, 0x6c, 0x65, 0x29, 0x20, 0x3d, 0x3d, 0x20, 0x27, 0x6e, 0x75, - 0x6d, 0x62, 0x65, 0x72, 0x27, 0x20, 0x74, 0x68, 0x65, 0x6e, 0x0a, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x43, 0x2e, 0x6d, 0x61, 0x74, - 0x34, 0x5f, 0x72, 0x6f, 0x74, 0x61, 0x74, 0x65, 0x28, 0x6d, 0x2c, 0x20, - 0x61, 0x6e, 0x67, 0x6c, 0x65, 0x2c, 0x20, 0x61, 0x78, 0x2c, 0x20, 0x61, - 0x79, 0x2c, 0x20, 0x61, 0x7a, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x65, 0x6c, 0x73, 0x65, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x71, 0x75, 0x61, 0x74, 0x28, - 0x61, 0x6e, 0x67, 0x6c, 0x65, 0x2c, 0x20, 0x31, 0x2c, 0x20, 0x27, 0x71, - 0x75, 0x61, 0x74, 0x20, 0x6f, 0x72, 0x20, 0x6e, 0x75, 0x6d, 0x62, 0x65, - 0x72, 0x27, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x43, 0x2e, 0x6d, 0x61, 0x74, 0x34, 0x5f, 0x72, 0x6f, 0x74, 0x61, 0x74, - 0x65, 0x51, 0x75, 0x61, 0x74, 0x28, 0x6d, 0x2c, 0x20, 0x61, 0x6e, 0x67, - 0x6c, 0x65, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x65, 0x6e, - 0x64, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x65, 0x6e, 0x64, 0x2c, 0x0a, 0x0a, - 0x20, 0x20, 0x20, 0x20, 0x73, 0x63, 0x61, 0x6c, 0x65, 0x20, 0x3d, 0x20, - 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x28, 0x6d, 0x2c, 0x20, - 0x73, 0x78, 0x2c, 0x20, 0x73, 0x79, 0x2c, 0x20, 0x73, 0x7a, 0x29, 0x0a, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x6d, - 0x61, 0x74, 0x34, 0x28, 0x6d, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x69, 0x66, 0x20, 0x74, 0x79, 0x70, 0x65, 0x28, 0x73, 0x78, 0x29, - 0x20, 0x3d, 0x3d, 0x20, 0x27, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x27, - 0x20, 0x74, 0x68, 0x65, 0x6e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x43, 0x2e, 0x6d, 0x61, 0x74, 0x34, 0x5f, 0x73, 0x63, 0x61, - 0x6c, 0x65, 0x28, 0x6d, 0x2c, 0x20, 0x73, 0x78, 0x2c, 0x20, 0x73, 0x79, - 0x2c, 0x20, 0x73, 0x7a, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x65, 0x6c, 0x73, 0x65, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x76, 0x65, 0x63, 0x33, 0x28, 0x73, - 0x78, 0x2c, 0x20, 0x31, 0x2c, 0x20, 0x27, 0x76, 0x65, 0x63, 0x33, 0x20, - 0x6f, 0x72, 0x20, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x27, 0x29, 0x0a, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x43, 0x2e, 0x6d, 0x61, - 0x74, 0x34, 0x5f, 0x73, 0x63, 0x61, 0x6c, 0x65, 0x28, 0x6d, 0x2c, 0x20, - 0x73, 0x78, 0x2e, 0x78, 0x2c, 0x20, 0x73, 0x78, 0x2e, 0x79, 0x2c, 0x20, - 0x73, 0x78, 0x2e, 0x7a, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x65, 0x6e, 0x64, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x65, 0x6e, 0x64, 0x2c, - 0x0a, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x67, 0x65, 0x74, 0x54, 0x72, 0x61, - 0x6e, 0x73, 0x66, 0x6f, 0x72, 0x6d, 0x20, 0x3d, 0x20, 0x66, 0x75, 0x6e, + 0x6e, 0x20, 0x6d, 0x61, 0x74, 0x68, 0x2e, 0x6d, 0x61, 0x74, 0x34, 0x28, + 0x6d, 0x3a, 0x75, 0x6e, 0x70, 0x61, 0x63, 0x6b, 0x28, 0x29, 0x29, 0x0a, + 0x20, 0x20, 0x20, 0x20, 0x65, 0x6e, 0x64, 0x2c, 0x0a, 0x0a, 0x20, 0x20, + 0x20, 0x20, 0x73, 0x61, 0x76, 0x65, 0x20, 0x3d, 0x20, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x28, 0x6d, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x6d, 0x61, 0x74, 0x34, - 0x28, 0x6d, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x6c, 0x6f, - 0x63, 0x61, 0x6c, 0x20, 0x66, 0x20, 0x3d, 0x20, 0x6e, 0x65, 0x77, 0x28, - 0x27, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x5b, 0x31, 0x30, 0x5d, 0x27, 0x29, - 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x43, 0x2e, 0x6d, 0x61, 0x74, - 0x34, 0x5f, 0x67, 0x65, 0x74, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x66, 0x6f, - 0x72, 0x6d, 0x28, 0x6d, 0x2c, 0x20, 0x66, 0x20, 0x2b, 0x20, 0x30, 0x2c, - 0x20, 0x66, 0x20, 0x2b, 0x20, 0x31, 0x2c, 0x20, 0x66, 0x20, 0x2b, 0x20, - 0x32, 0x2c, 0x20, 0x66, 0x20, 0x2b, 0x20, 0x33, 0x2c, 0x20, 0x66, 0x20, - 0x2b, 0x20, 0x34, 0x2c, 0x20, 0x66, 0x20, 0x2b, 0x20, 0x35, 0x2c, 0x20, - 0x66, 0x20, 0x2b, 0x20, 0x36, 0x2c, 0x20, 0x66, 0x20, 0x2b, 0x20, 0x37, - 0x2c, 0x20, 0x66, 0x20, 0x2b, 0x20, 0x38, 0x2c, 0x20, 0x66, 0x20, 0x2b, - 0x20, 0x39, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, - 0x74, 0x75, 0x72, 0x6e, 0x20, 0x66, 0x5b, 0x30, 0x5d, 0x2c, 0x20, 0x66, - 0x5b, 0x31, 0x5d, 0x2c, 0x20, 0x66, 0x5b, 0x32, 0x5d, 0x2c, 0x20, 0x66, - 0x5b, 0x33, 0x5d, 0x2c, 0x20, 0x66, 0x5b, 0x34, 0x5d, 0x2c, 0x20, 0x66, - 0x5b, 0x35, 0x5d, 0x2c, 0x20, 0x66, 0x5b, 0x36, 0x5d, 0x2c, 0x20, 0x66, - 0x5b, 0x37, 0x5d, 0x2c, 0x20, 0x66, 0x5b, 0x38, 0x5d, 0x2c, 0x20, 0x66, - 0x5b, 0x39, 0x5d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x65, 0x6e, 0x64, 0x2c, - 0x0a, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x73, 0x65, 0x74, 0x54, 0x72, 0x61, - 0x6e, 0x73, 0x66, 0x6f, 0x72, 0x6d, 0x20, 0x3d, 0x20, 0x66, 0x75, 0x6e, - 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x28, 0x6d, 0x2c, 0x20, 0x78, 0x2c, 0x20, - 0x79, 0x2c, 0x20, 0x7a, 0x2c, 0x20, 0x73, 0x78, 0x2c, 0x20, 0x73, 0x79, - 0x2c, 0x20, 0x73, 0x7a, 0x2c, 0x20, 0x61, 0x6e, 0x67, 0x6c, 0x65, 0x2c, - 0x20, 0x61, 0x78, 0x2c, 0x20, 0x61, 0x79, 0x2c, 0x20, 0x61, 0x7a, 0x29, + 0x28, 0x6d, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, + 0x74, 0x75, 0x72, 0x6e, 0x20, 0x6d, 0x61, 0x74, 0x34, 0x28, 0x6d, 0x3a, + 0x75, 0x6e, 0x70, 0x61, 0x63, 0x6b, 0x28, 0x29, 0x29, 0x0a, 0x20, 0x20, + 0x20, 0x20, 0x65, 0x6e, 0x64, 0x2c, 0x0a, 0x0a, 0x20, 0x20, 0x20, 0x20, + 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x20, 0x3d, 0x20, 0x66, + 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x28, 0x6d, 0x29, 0x0a, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x6d, 0x61, + 0x74, 0x34, 0x28, 0x6d, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x43, 0x2e, 0x6d, 0x61, 0x74, + 0x34, 0x5f, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x28, 0x6d, + 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x65, 0x6e, 0x64, 0x2c, 0x0a, 0x0a, + 0x20, 0x20, 0x20, 0x20, 0x69, 0x6e, 0x76, 0x65, 0x72, 0x74, 0x20, 0x3d, + 0x20, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x28, 0x6d, 0x2c, + 0x20, 0x6f, 0x75, 0x74, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x63, 0x68, 0x65, 0x63, 0x6b, 0x6d, 0x61, 0x74, 0x34, 0x28, 0x6d, 0x29, + 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x6f, 0x75, 0x74, 0x20, 0x3d, + 0x20, 0x6f, 0x75, 0x74, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x43, 0x2e, 0x6d, + 0x61, 0x74, 0x34, 0x5f, 0x73, 0x65, 0x74, 0x28, 0x6f, 0x75, 0x74, 0x2c, + 0x20, 0x6d, 0x29, 0x20, 0x6f, 0x72, 0x20, 0x6d, 0x0a, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x43, 0x2e, + 0x6d, 0x61, 0x74, 0x34, 0x5f, 0x69, 0x6e, 0x76, 0x65, 0x72, 0x74, 0x28, + 0x6f, 0x75, 0x74, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x65, 0x6e, 0x64, + 0x2c, 0x0a, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x74, 0x72, 0x61, 0x6e, 0x73, + 0x70, 0x6f, 0x73, 0x65, 0x20, 0x3d, 0x20, 0x66, 0x75, 0x6e, 0x63, 0x74, + 0x69, 0x6f, 0x6e, 0x28, 0x6d, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x6d, 0x61, 0x74, 0x34, 0x28, 0x6d, + 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x6f, 0x75, 0x74, 0x20, + 0x3d, 0x20, 0x6f, 0x75, 0x74, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x43, 0x2e, + 0x6d, 0x61, 0x74, 0x34, 0x5f, 0x73, 0x65, 0x74, 0x28, 0x6f, 0x75, 0x74, + 0x2c, 0x20, 0x6d, 0x29, 0x20, 0x6f, 0x72, 0x20, 0x6d, 0x0a, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x43, + 0x2e, 0x6d, 0x61, 0x74, 0x34, 0x5f, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x70, + 0x6f, 0x73, 0x65, 0x28, 0x6f, 0x75, 0x74, 0x29, 0x0a, 0x20, 0x20, 0x20, + 0x20, 0x65, 0x6e, 0x64, 0x2c, 0x0a, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x74, + 0x72, 0x61, 0x6e, 0x73, 0x6c, 0x61, 0x74, 0x65, 0x20, 0x3d, 0x20, 0x66, + 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x28, 0x6d, 0x2c, 0x20, 0x78, + 0x2c, 0x20, 0x79, 0x2c, 0x20, 0x7a, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x6d, 0x61, 0x74, 0x34, 0x28, + 0x6d, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, + 0x74, 0x79, 0x70, 0x65, 0x28, 0x78, 0x29, 0x20, 0x3d, 0x3d, 0x20, 0x27, + 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x27, 0x20, 0x74, 0x68, 0x65, 0x6e, + 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x43, 0x2e, 0x6d, + 0x61, 0x74, 0x34, 0x5f, 0x74, 0x72, 0x61, 0x6e, 0x73, 0x6c, 0x61, 0x74, + 0x65, 0x28, 0x6d, 0x2c, 0x20, 0x78, 0x2c, 0x20, 0x79, 0x2c, 0x20, 0x7a, + 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x65, 0x6c, 0x73, 0x65, + 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x63, 0x68, 0x65, + 0x63, 0x6b, 0x76, 0x65, 0x63, 0x33, 0x28, 0x78, 0x2c, 0x20, 0x31, 0x2c, + 0x20, 0x27, 0x76, 0x65, 0x63, 0x33, 0x20, 0x6f, 0x72, 0x20, 0x6e, 0x75, + 0x6d, 0x62, 0x65, 0x72, 0x27, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x43, 0x2e, 0x6d, 0x61, 0x74, 0x34, 0x5f, 0x74, 0x72, + 0x61, 0x6e, 0x73, 0x6c, 0x61, 0x74, 0x65, 0x28, 0x6d, 0x2c, 0x20, 0x78, + 0x2e, 0x78, 0x2c, 0x20, 0x78, 0x2e, 0x79, 0x2c, 0x20, 0x78, 0x2e, 0x7a, + 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x65, 0x6e, 0x64, 0x0a, + 0x20, 0x20, 0x20, 0x20, 0x65, 0x6e, 0x64, 0x2c, 0x0a, 0x0a, 0x20, 0x20, + 0x20, 0x20, 0x72, 0x6f, 0x74, 0x61, 0x74, 0x65, 0x20, 0x3d, 0x20, 0x66, + 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x28, 0x6d, 0x2c, 0x20, 0x61, + 0x6e, 0x67, 0x6c, 0x65, 0x2c, 0x20, 0x61, 0x78, 0x2c, 0x20, 0x61, 0x79, + 0x2c, 0x20, 0x61, 0x7a, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x63, 0x68, 0x65, 0x63, 0x6b, 0x6d, 0x61, 0x74, 0x34, 0x28, 0x6d, 0x29, + 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x74, 0x79, + 0x70, 0x65, 0x28, 0x61, 0x6e, 0x67, 0x6c, 0x65, 0x29, 0x20, 0x3d, 0x3d, + 0x20, 0x27, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x27, 0x20, 0x74, 0x68, + 0x65, 0x6e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x43, + 0x2e, 0x6d, 0x61, 0x74, 0x34, 0x5f, 0x72, 0x6f, 0x74, 0x61, 0x74, 0x65, + 0x28, 0x6d, 0x2c, 0x20, 0x61, 0x6e, 0x67, 0x6c, 0x65, 0x2c, 0x20, 0x61, + 0x78, 0x2c, 0x20, 0x61, 0x79, 0x2c, 0x20, 0x61, 0x7a, 0x29, 0x0a, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x65, 0x6c, 0x73, 0x65, 0x0a, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x71, + 0x75, 0x61, 0x74, 0x28, 0x61, 0x6e, 0x67, 0x6c, 0x65, 0x2c, 0x20, 0x31, + 0x2c, 0x20, 0x27, 0x71, 0x75, 0x61, 0x74, 0x20, 0x6f, 0x72, 0x20, 0x6e, + 0x75, 0x6d, 0x62, 0x65, 0x72, 0x27, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x43, 0x2e, 0x6d, 0x61, 0x74, 0x34, 0x5f, 0x72, + 0x6f, 0x74, 0x61, 0x74, 0x65, 0x51, 0x75, 0x61, 0x74, 0x28, 0x6d, 0x2c, + 0x20, 0x61, 0x6e, 0x67, 0x6c, 0x65, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x65, 0x6e, 0x64, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x65, 0x6e, + 0x64, 0x2c, 0x0a, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x73, 0x63, 0x61, 0x6c, + 0x65, 0x20, 0x3d, 0x20, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, + 0x28, 0x6d, 0x2c, 0x20, 0x73, 0x78, 0x2c, 0x20, 0x73, 0x79, 0x2c, 0x20, + 0x73, 0x7a, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x63, 0x68, + 0x65, 0x63, 0x6b, 0x6d, 0x61, 0x74, 0x34, 0x28, 0x6d, 0x29, 0x0a, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x74, 0x79, 0x70, 0x65, + 0x28, 0x73, 0x78, 0x29, 0x20, 0x3d, 0x3d, 0x20, 0x27, 0x6e, 0x75, 0x6d, + 0x62, 0x65, 0x72, 0x27, 0x20, 0x74, 0x68, 0x65, 0x6e, 0x0a, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x43, 0x2e, 0x6d, 0x61, 0x74, 0x34, + 0x5f, 0x73, 0x63, 0x61, 0x6c, 0x65, 0x28, 0x6d, 0x2c, 0x20, 0x73, 0x78, + 0x2c, 0x20, 0x73, 0x79, 0x2c, 0x20, 0x73, 0x7a, 0x29, 0x0a, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x65, 0x6c, 0x73, 0x65, 0x0a, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x76, 0x65, + 0x63, 0x33, 0x28, 0x73, 0x78, 0x2c, 0x20, 0x31, 0x2c, 0x20, 0x27, 0x76, + 0x65, 0x63, 0x33, 0x20, 0x6f, 0x72, 0x20, 0x6e, 0x75, 0x6d, 0x62, 0x65, + 0x72, 0x27, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x43, 0x2e, 0x6d, 0x61, 0x74, 0x34, 0x5f, 0x73, 0x63, 0x61, 0x6c, 0x65, + 0x28, 0x6d, 0x2c, 0x20, 0x73, 0x78, 0x2e, 0x78, 0x2c, 0x20, 0x73, 0x78, + 0x2e, 0x79, 0x2c, 0x20, 0x73, 0x78, 0x2e, 0x7a, 0x29, 0x0a, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x65, 0x6e, 0x64, 0x0a, 0x20, 0x20, 0x20, 0x20, + 0x65, 0x6e, 0x64, 0x2c, 0x0a, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x67, 0x65, + 0x74, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x66, 0x6f, 0x72, 0x6d, 0x20, 0x3d, + 0x20, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x28, 0x6d, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x6d, 0x61, 0x74, 0x34, 0x28, 0x6d, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x43, 0x2e, 0x6d, 0x61, 0x74, 0x34, 0x5f, 0x73, 0x65, 0x74, - 0x54, 0x72, 0x61, 0x6e, 0x73, 0x66, 0x6f, 0x72, 0x6d, 0x28, 0x6d, 0x2c, - 0x20, 0x78, 0x20, 0x6f, 0x72, 0x20, 0x30, 0x2c, 0x20, 0x79, 0x20, 0x6f, - 0x72, 0x20, 0x30, 0x2c, 0x20, 0x7a, 0x20, 0x6f, 0x72, 0x20, 0x30, 0x2c, - 0x20, 0x73, 0x78, 0x20, 0x6f, 0x72, 0x20, 0x31, 0x2c, 0x20, 0x73, 0x79, - 0x20, 0x6f, 0x72, 0x20, 0x73, 0x78, 0x20, 0x6f, 0x72, 0x20, 0x31, 0x2c, - 0x20, 0x73, 0x7a, 0x20, 0x6f, 0x72, 0x20, 0x73, 0x78, 0x20, 0x6f, 0x72, - 0x20, 0x31, 0x2c, 0x20, 0x61, 0x6e, 0x67, 0x6c, 0x65, 0x20, 0x6f, 0x72, - 0x20, 0x30, 0x2c, 0x20, 0x61, 0x78, 0x20, 0x6f, 0x72, 0x20, 0x30, 0x2c, - 0x20, 0x61, 0x79, 0x20, 0x6f, 0x72, 0x20, 0x31, 0x2c, 0x20, 0x61, 0x7a, - 0x20, 0x6f, 0x72, 0x20, 0x30, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x6d, 0x0a, 0x20, 0x20, - 0x20, 0x20, 0x65, 0x6e, 0x64, 0x2c, 0x0a, 0x0a, 0x20, 0x20, 0x20, 0x20, - 0x70, 0x65, 0x72, 0x73, 0x70, 0x65, 0x63, 0x74, 0x69, 0x76, 0x65, 0x20, - 0x3d, 0x20, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x28, 0x6d, - 0x2c, 0x20, 0x6e, 0x65, 0x61, 0x72, 0x2c, 0x20, 0x66, 0x61, 0x72, 0x2c, - 0x20, 0x66, 0x6f, 0x76, 0x2c, 0x20, 0x61, 0x73, 0x70, 0x65, 0x63, 0x74, + 0x20, 0x20, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x20, 0x66, 0x20, 0x3d, 0x20, + 0x6e, 0x65, 0x77, 0x28, 0x27, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x5b, 0x31, + 0x30, 0x5d, 0x27, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x43, + 0x2e, 0x6d, 0x61, 0x74, 0x34, 0x5f, 0x67, 0x65, 0x74, 0x54, 0x72, 0x61, + 0x6e, 0x73, 0x66, 0x6f, 0x72, 0x6d, 0x28, 0x6d, 0x2c, 0x20, 0x66, 0x20, + 0x2b, 0x20, 0x30, 0x2c, 0x20, 0x66, 0x20, 0x2b, 0x20, 0x31, 0x2c, 0x20, + 0x66, 0x20, 0x2b, 0x20, 0x32, 0x2c, 0x20, 0x66, 0x20, 0x2b, 0x20, 0x33, + 0x2c, 0x20, 0x66, 0x20, 0x2b, 0x20, 0x34, 0x2c, 0x20, 0x66, 0x20, 0x2b, + 0x20, 0x35, 0x2c, 0x20, 0x66, 0x20, 0x2b, 0x20, 0x36, 0x2c, 0x20, 0x66, + 0x20, 0x2b, 0x20, 0x37, 0x2c, 0x20, 0x66, 0x20, 0x2b, 0x20, 0x38, 0x2c, + 0x20, 0x66, 0x20, 0x2b, 0x20, 0x39, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x66, 0x5b, 0x30, + 0x5d, 0x2c, 0x20, 0x66, 0x5b, 0x31, 0x5d, 0x2c, 0x20, 0x66, 0x5b, 0x32, + 0x5d, 0x2c, 0x20, 0x66, 0x5b, 0x33, 0x5d, 0x2c, 0x20, 0x66, 0x5b, 0x34, + 0x5d, 0x2c, 0x20, 0x66, 0x5b, 0x35, 0x5d, 0x2c, 0x20, 0x66, 0x5b, 0x36, + 0x5d, 0x2c, 0x20, 0x66, 0x5b, 0x37, 0x5d, 0x2c, 0x20, 0x66, 0x5b, 0x38, + 0x5d, 0x2c, 0x20, 0x66, 0x5b, 0x39, 0x5d, 0x0a, 0x20, 0x20, 0x20, 0x20, + 0x65, 0x6e, 0x64, 0x2c, 0x0a, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x73, 0x65, + 0x74, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x66, 0x6f, 0x72, 0x6d, 0x20, 0x3d, + 0x20, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x28, 0x6d, 0x2c, + 0x20, 0x78, 0x2c, 0x20, 0x79, 0x2c, 0x20, 0x7a, 0x2c, 0x20, 0x73, 0x78, + 0x2c, 0x20, 0x73, 0x79, 0x2c, 0x20, 0x73, 0x7a, 0x2c, 0x20, 0x61, 0x6e, + 0x67, 0x6c, 0x65, 0x2c, 0x20, 0x61, 0x78, 0x2c, 0x20, 0x61, 0x79, 0x2c, + 0x20, 0x61, 0x7a, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x63, + 0x68, 0x65, 0x63, 0x6b, 0x6d, 0x61, 0x74, 0x34, 0x28, 0x6d, 0x29, 0x0a, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x43, 0x2e, 0x6d, 0x61, 0x74, 0x34, + 0x5f, 0x73, 0x65, 0x74, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x66, 0x6f, 0x72, + 0x6d, 0x28, 0x6d, 0x2c, 0x20, 0x78, 0x20, 0x6f, 0x72, 0x20, 0x30, 0x2c, + 0x20, 0x79, 0x20, 0x6f, 0x72, 0x20, 0x30, 0x2c, 0x20, 0x7a, 0x20, 0x6f, + 0x72, 0x20, 0x30, 0x2c, 0x20, 0x73, 0x78, 0x20, 0x6f, 0x72, 0x20, 0x31, + 0x2c, 0x20, 0x73, 0x79, 0x20, 0x6f, 0x72, 0x20, 0x73, 0x78, 0x20, 0x6f, + 0x72, 0x20, 0x31, 0x2c, 0x20, 0x73, 0x7a, 0x20, 0x6f, 0x72, 0x20, 0x73, + 0x78, 0x20, 0x6f, 0x72, 0x20, 0x31, 0x2c, 0x20, 0x61, 0x6e, 0x67, 0x6c, + 0x65, 0x20, 0x6f, 0x72, 0x20, 0x30, 0x2c, 0x20, 0x61, 0x78, 0x20, 0x6f, + 0x72, 0x20, 0x30, 0x2c, 0x20, 0x61, 0x79, 0x20, 0x6f, 0x72, 0x20, 0x31, + 0x2c, 0x20, 0x61, 0x7a, 0x20, 0x6f, 0x72, 0x20, 0x30, 0x29, 0x0a, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, + 0x6d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x65, 0x6e, 0x64, 0x2c, 0x0a, 0x0a, + 0x20, 0x20, 0x20, 0x20, 0x70, 0x65, 0x72, 0x73, 0x70, 0x65, 0x63, 0x74, + 0x69, 0x76, 0x65, 0x20, 0x3d, 0x20, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, + 0x6f, 0x6e, 0x28, 0x6d, 0x2c, 0x20, 0x6e, 0x65, 0x61, 0x72, 0x2c, 0x20, + 0x66, 0x61, 0x72, 0x2c, 0x20, 0x66, 0x6f, 0x76, 0x2c, 0x20, 0x61, 0x73, + 0x70, 0x65, 0x63, 0x74, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x63, 0x68, 0x65, 0x63, 0x6b, 0x6d, 0x61, 0x74, 0x34, 0x28, 0x6d, 0x29, + 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x43, 0x2e, 0x6d, 0x61, 0x74, + 0x34, 0x5f, 0x70, 0x65, 0x72, 0x73, 0x70, 0x65, 0x63, 0x74, 0x69, 0x76, + 0x65, 0x28, 0x6d, 0x2c, 0x20, 0x6e, 0x65, 0x61, 0x72, 0x2c, 0x20, 0x66, + 0x61, 0x72, 0x2c, 0x20, 0x66, 0x6f, 0x76, 0x2c, 0x20, 0x61, 0x73, 0x70, + 0x65, 0x63, 0x74, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x72, + 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x6d, 0x0a, 0x20, 0x20, 0x20, 0x20, + 0x65, 0x6e, 0x64, 0x2c, 0x0a, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x6f, 0x72, + 0x74, 0x68, 0x6f, 0x67, 0x72, 0x61, 0x70, 0x68, 0x69, 0x63, 0x20, 0x3d, + 0x20, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x28, 0x6d, 0x2c, + 0x20, 0x6c, 0x65, 0x66, 0x74, 0x2c, 0x20, 0x72, 0x69, 0x67, 0x68, 0x74, + 0x2c, 0x20, 0x74, 0x6f, 0x70, 0x2c, 0x20, 0x62, 0x6f, 0x74, 0x74, 0x6f, + 0x6d, 0x2c, 0x20, 0x6e, 0x65, 0x61, 0x72, 0x2c, 0x20, 0x66, 0x61, 0x72, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x6d, 0x61, 0x74, 0x34, 0x28, 0x6d, 0x29, 0x0a, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x43, 0x2e, 0x6d, 0x61, 0x74, 0x34, 0x5f, 0x70, 0x65, - 0x72, 0x73, 0x70, 0x65, 0x63, 0x74, 0x69, 0x76, 0x65, 0x28, 0x6d, 0x2c, - 0x20, 0x6e, 0x65, 0x61, 0x72, 0x2c, 0x20, 0x66, 0x61, 0x72, 0x2c, 0x20, - 0x66, 0x6f, 0x76, 0x2c, 0x20, 0x61, 0x73, 0x70, 0x65, 0x63, 0x74, 0x29, - 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, - 0x6e, 0x20, 0x6d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x65, 0x6e, 0x64, 0x2c, - 0x0a, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x6f, 0x72, 0x74, 0x68, 0x6f, 0x67, - 0x72, 0x61, 0x70, 0x68, 0x69, 0x63, 0x20, 0x3d, 0x20, 0x66, 0x75, 0x6e, - 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x28, 0x6d, 0x2c, 0x20, 0x6c, 0x65, 0x66, - 0x74, 0x2c, 0x20, 0x72, 0x69, 0x67, 0x68, 0x74, 0x2c, 0x20, 0x74, 0x6f, - 0x70, 0x2c, 0x20, 0x62, 0x6f, 0x74, 0x74, 0x6f, 0x6d, 0x2c, 0x20, 0x6e, - 0x65, 0x61, 0x72, 0x2c, 0x20, 0x66, 0x61, 0x72, 0x29, 0x0a, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x6d, 0x61, 0x74, - 0x34, 0x28, 0x6d, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x43, - 0x2e, 0x6d, 0x61, 0x74, 0x34, 0x5f, 0x6f, 0x72, 0x74, 0x68, 0x6f, 0x67, - 0x72, 0x61, 0x70, 0x68, 0x69, 0x63, 0x28, 0x6d, 0x2c, 0x20, 0x6c, 0x65, - 0x66, 0x74, 0x2c, 0x20, 0x72, 0x69, 0x67, 0x68, 0x74, 0x2c, 0x20, 0x74, - 0x6f, 0x70, 0x2c, 0x20, 0x62, 0x6f, 0x74, 0x74, 0x6f, 0x6d, 0x2c, 0x20, - 0x6e, 0x65, 0x61, 0x72, 0x2c, 0x20, 0x66, 0x61, 0x72, 0x29, 0x0a, 0x20, - 0x20, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, - 0x6d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x65, 0x6e, 0x64, 0x0a, 0x20, 0x20, - 0x7d, 0x2c, 0x0a, 0x0a, 0x20, 0x20, 0x5f, 0x5f, 0x6d, 0x75, 0x6c, 0x20, - 0x3d, 0x20, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x28, 0x6d, - 0x2c, 0x20, 0x6e, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x63, 0x68, 0x65, - 0x63, 0x6b, 0x6d, 0x61, 0x74, 0x34, 0x28, 0x6d, 0x29, 0x0a, 0x20, 0x20, - 0x20, 0x20, 0x69, 0x66, 0x20, 0x69, 0x73, 0x74, 0x79, 0x70, 0x65, 0x28, - 0x6d, 0x61, 0x74, 0x34, 0x2c, 0x20, 0x6e, 0x29, 0x20, 0x74, 0x68, 0x65, - 0x6e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x6c, 0x6f, 0x63, 0x61, - 0x6c, 0x20, 0x6f, 0x75, 0x74, 0x20, 0x3d, 0x20, 0x6d, 0x61, 0x74, 0x68, - 0x2e, 0x6d, 0x61, 0x74, 0x34, 0x28, 0x6d, 0x29, 0x0a, 0x20, 0x20, 0x20, - 0x20, 0x20, 0x20, 0x43, 0x2e, 0x6d, 0x61, 0x74, 0x34, 0x5f, 0x6d, 0x75, - 0x6c, 0x74, 0x69, 0x70, 0x6c, 0x79, 0x28, 0x6f, 0x75, 0x74, 0x2c, 0x20, - 0x6e, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, - 0x75, 0x72, 0x6e, 0x20, 0x6f, 0x75, 0x74, 0x0a, 0x20, 0x20, 0x20, 0x20, - 0x65, 0x6c, 0x73, 0x65, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x63, - 0x68, 0x65, 0x63, 0x6b, 0x76, 0x65, 0x63, 0x33, 0x28, 0x6e, 0x2c, 0x20, - 0x31, 0x2c, 0x20, 0x27, 0x6d, 0x61, 0x74, 0x34, 0x20, 0x6f, 0x72, 0x20, - 0x76, 0x65, 0x63, 0x33, 0x27, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x20, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x20, 0x66, 0x20, 0x3d, 0x20, 0x6e, - 0x65, 0x77, 0x28, 0x27, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x5b, 0x33, 0x5d, - 0x27, 0x2c, 0x20, 0x6e, 0x2e, 0x78, 0x2c, 0x20, 0x6e, 0x2e, 0x79, 0x2c, - 0x20, 0x6e, 0x2e, 0x7a, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, - 0x43, 0x2e, 0x6d, 0x61, 0x74, 0x34, 0x5f, 0x74, 0x72, 0x61, 0x6e, 0x73, - 0x66, 0x6f, 0x72, 0x6d, 0x28, 0x6d, 0x2c, 0x20, 0x66, 0x20, 0x2b, 0x20, - 0x30, 0x2c, 0x20, 0x66, 0x20, 0x2b, 0x20, 0x31, 0x2c, 0x20, 0x66, 0x20, - 0x2b, 0x20, 0x32, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x72, - 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x6d, 0x61, 0x74, 0x68, 0x2e, 0x76, - 0x65, 0x63, 0x33, 0x28, 0x66, 0x5b, 0x30, 0x5d, 0x2c, 0x20, 0x66, 0x5b, - 0x31, 0x5d, 0x2c, 0x20, 0x66, 0x5b, 0x32, 0x5d, 0x29, 0x0a, 0x20, 0x20, - 0x20, 0x20, 0x65, 0x6e, 0x64, 0x0a, 0x20, 0x20, 0x65, 0x6e, 0x64, 0x0a, - 0x7d, 0x29, 0x0a + 0x20, 0x20, 0x20, 0x43, 0x2e, 0x6d, 0x61, 0x74, 0x34, 0x5f, 0x6f, 0x72, + 0x74, 0x68, 0x6f, 0x67, 0x72, 0x61, 0x70, 0x68, 0x69, 0x63, 0x28, 0x6d, + 0x2c, 0x20, 0x6c, 0x65, 0x66, 0x74, 0x2c, 0x20, 0x72, 0x69, 0x67, 0x68, + 0x74, 0x2c, 0x20, 0x74, 0x6f, 0x70, 0x2c, 0x20, 0x62, 0x6f, 0x74, 0x74, + 0x6f, 0x6d, 0x2c, 0x20, 0x6e, 0x65, 0x61, 0x72, 0x2c, 0x20, 0x66, 0x61, + 0x72, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, + 0x75, 0x72, 0x6e, 0x20, 0x6d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x65, 0x6e, + 0x64, 0x0a, 0x20, 0x20, 0x7d, 0x2c, 0x0a, 0x0a, 0x20, 0x20, 0x5f, 0x5f, + 0x6d, 0x75, 0x6c, 0x20, 0x3d, 0x20, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, + 0x6f, 0x6e, 0x28, 0x6d, 0x2c, 0x20, 0x6e, 0x29, 0x0a, 0x20, 0x20, 0x20, + 0x20, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x6d, 0x61, 0x74, 0x34, 0x28, 0x6d, + 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x69, 0x73, 0x74, + 0x79, 0x70, 0x65, 0x28, 0x6d, 0x61, 0x74, 0x34, 0x2c, 0x20, 0x6e, 0x29, + 0x20, 0x74, 0x68, 0x65, 0x6e, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x20, 0x6f, 0x75, 0x74, 0x20, 0x3d, 0x20, + 0x6d, 0x61, 0x74, 0x68, 0x2e, 0x6d, 0x61, 0x74, 0x34, 0x28, 0x6d, 0x29, + 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x43, 0x2e, 0x6d, 0x61, 0x74, + 0x34, 0x5f, 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x70, 0x6c, 0x79, 0x28, 0x6f, + 0x75, 0x74, 0x2c, 0x20, 0x6e, 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x6f, 0x75, 0x74, 0x0a, + 0x20, 0x20, 0x20, 0x20, 0x65, 0x6c, 0x73, 0x65, 0x0a, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x76, 0x65, 0x63, 0x33, + 0x28, 0x6e, 0x2c, 0x20, 0x31, 0x2c, 0x20, 0x27, 0x6d, 0x61, 0x74, 0x34, + 0x20, 0x6f, 0x72, 0x20, 0x76, 0x65, 0x63, 0x33, 0x27, 0x29, 0x0a, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x20, 0x66, + 0x20, 0x3d, 0x20, 0x6e, 0x65, 0x77, 0x28, 0x27, 0x66, 0x6c, 0x6f, 0x61, + 0x74, 0x5b, 0x33, 0x5d, 0x27, 0x2c, 0x20, 0x6e, 0x2e, 0x78, 0x2c, 0x20, + 0x6e, 0x2e, 0x79, 0x2c, 0x20, 0x6e, 0x2e, 0x7a, 0x29, 0x0a, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x43, 0x2e, 0x6d, 0x61, 0x74, 0x34, 0x5f, 0x74, + 0x72, 0x61, 0x6e, 0x73, 0x66, 0x6f, 0x72, 0x6d, 0x28, 0x6d, 0x2c, 0x20, + 0x66, 0x20, 0x2b, 0x20, 0x30, 0x2c, 0x20, 0x66, 0x20, 0x2b, 0x20, 0x31, + 0x2c, 0x20, 0x66, 0x20, 0x2b, 0x20, 0x32, 0x29, 0x0a, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x6d, 0x61, + 0x74, 0x68, 0x2e, 0x76, 0x65, 0x63, 0x33, 0x28, 0x66, 0x5b, 0x30, 0x5d, + 0x2c, 0x20, 0x66, 0x5b, 0x31, 0x5d, 0x2c, 0x20, 0x66, 0x5b, 0x32, 0x5d, + 0x29, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x65, 0x6e, 0x64, 0x0a, 0x20, 0x20, + 0x65, 0x6e, 0x64, 0x2c, 0x0a, 0x0a, 0x20, 0x20, 0x5f, 0x5f, 0x74, 0x6f, + 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x20, 0x3d, 0x20, 0x66, 0x75, 0x6e, + 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x28, 0x6d, 0x29, 0x0a, 0x20, 0x20, 0x20, + 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x27, 0x6d, 0x61, 0x74, + 0x34, 0x27, 0x0a, 0x20, 0x20, 0x65, 0x6e, 0x64, 0x0a, 0x7d, 0x29, 0x0a }; -unsigned int math_lua_len = 10287; +unsigned int math_lua_len = 10332; diff --git a/src/api/types/mat4.c b/src/api/types/mat4.c index 4bb87325..41e477c8 100644 --- a/src/api/types/mat4.c +++ b/src/api/types/mat4.c @@ -100,19 +100,19 @@ static int l_lovrMat4Identity(lua_State* L) { return 1; } -static int l_lovrMat4Inverse(lua_State* L) { +static int l_lovrMat4Invert(lua_State* L) { mat4 m = luax_checkmathtype(L, 1, MATH_MAT4, NULL); - mat4 n = lovrPoolAllocate(lovrMathGetPool(), MATH_MAT4); - mat4_invert(mat4_init(n, m)); - luax_pushlightmathtype(L, n, MATH_MAT4); + mat4 out = lua_gettop(L) > 1 ? mat4_init(luax_checkmathtype(L, 2, MATH_MAT4, NULL), m) : m; + mat4_invert(out); + luax_pushlightmathtype(L, out, MATH_MAT4); return 1; } static int l_lovrMat4Transpose(lua_State* L) { mat4 m = luax_checkmathtype(L, 1, MATH_MAT4, NULL); - mat4 n = lovrPoolAllocate(lovrMathGetPool(), MATH_MAT4); - mat4_transpose(mat4_init(n, m)); - luax_pushlightmathtype(L, n, MATH_MAT4); + mat4 out = lua_gettop(L) > 1 ? mat4_init(luax_checkmathtype(L, 2, MATH_MAT4, NULL), m) : m; + mat4_transpose(out); + luax_pushlightmathtype(L, out, MATH_MAT4); return 1; } @@ -220,13 +220,19 @@ static int l_lovrMat4__mul(lua_State* L) { return 1; } +static int l_lovrMat4__tostring(lua_State* L) { + mat4 m = luax_checkmathtype(L, 1, MATH_MAT4, NULL); + lua_pushliteral(L, "mat4"); + return 1; +} + const luaL_Reg lovrMat4[] = { { "unpack", l_lovrMat4Unpack }, { "set", l_lovrMat4Set }, { "copy", l_lovrMat4Copy }, { "save", l_lovrMat4Save }, { "identity", l_lovrMat4Identity }, - { "inverse", l_lovrMat4Inverse }, + { "invert", l_lovrMat4Invert }, { "transpose", l_lovrMat4Transpose }, { "translate", l_lovrMat4Translate }, { "rotate", l_lovrMat4Rotate }, @@ -236,5 +242,6 @@ const luaL_Reg lovrMat4[] = { { "perspective", l_lovrMat4Perspective }, { "orthographic", l_lovrMat4Orthographic }, { "__mul", l_lovrMat4__mul }, + { "__tostring", l_lovrMat4__tostring }, { NULL, NULL } };