Commits

Laurens Rodriguez  committed ba2c189

Killa 0.3: use "Math" instead of "math" for mathematic functions (like JavaScript), changed all the other global tables also (String, Table, Os, etc).
Updated tests.

  • Participants
  • Parent commits 6909b16

Comments (0)

Files changed (16)

File bin/windows/game/game.kia

 
     // Initialize falling tetromino.
     this::setTetromino(Platform::random() % this.TETROMINO_TYPES, this.m_fallingBlock)
-    this.m_fallingBlock.x = math.floor((this.BOARD_TILEMAP_WIDTH - this.m_fallingBlock.size) / 2)
+    this.m_fallingBlock.x = Math.floor((this.BOARD_TILEMAP_WIDTH - this.m_fallingBlock.size) / 2)
     this.m_fallingBlock.y = 0
 
     // Initialize preview tetromino.
         this.m_stats.level += 1
 
         // Increase speed for falling tetrominoes.
-        this.m_fallingDelay = math.floor(DELAY_FACTOR_FOR_LEVEL_UP * this.m_fallingDelay
+        this.m_fallingDelay = Math.floor(DELAY_FACTOR_FOR_LEVEL_UP * this.m_fallingDelay
                                          / DELAY_DIVISOR_FOR_LEVEL_UP)
     }
 
 
                 // Reset position.
                 this.m_fallingBlock.y = 0
-                this.m_fallingBlock.x = math.floor((this.BOARD_TILEMAP_WIDTH 
+                this.m_fallingBlock.x = Math.floor((this.BOARD_TILEMAP_WIDTH 
                                         - this.m_fallingBlock.size) / 2)
                 this::onTetrominoMoved()
 

File bin/windows/game/mandelbrot.kia

         if ((dx >= MINIMUM_CELL_SIZE) && (dy >= MINIMUM_CELL_SIZE)) {
 
             // Save actual zone position
-            table.insert(m_zones, [m_fractalZoneX1, m_fractalZoneY1, m_fractalZoneX2, m_fractalZoneY2])
+            Table.insert(m_zones, [m_fractalZoneX1, m_fractalZoneY1, m_fractalZoneX2, m_fractalZoneY2])
 
             // Set new drawing zone. (x1,y1) bottom-left corner, (x2,y2) up-right corner
             m_fractalZoneX1 += (m_zoomGridX * dx)
         toggleZoomZone()
     }
     if ($m_zones > 0) {
-        var zone = table.remove(m_zones)
+        var zone = Table.remove(m_zones)
         m_fractalZoneX1 = zone[0]
         m_fractalZoneY1 = zone[1]
         m_fractalZoneX2 = zone[2]
 
     if (opc == COLOR_GRAY) {
         for (k = 0; k < 16; k += 1) {
-            table.insert(m_colors, [4*m_colorSteps[k][1], 4*m_colorSteps[k][1], 4*m_colorSteps[k][1]])
+            Table.insert(m_colors, [4*m_colorSteps[k][1], 4*m_colorSteps[k][1], 4*m_colorSteps[k][1]])
         }
     }
     else if (opc == COLOR_BLUE) {
         for (k = 0; k < 16; k += 1) {
-            table.insert(m_colors, [4*m_colorSteps[k][0], 4*m_colorSteps[k][1], 4*m_colorSteps[k][2]])
+            Table.insert(m_colors, [4*m_colorSteps[k][0], 4*m_colorSteps[k][1], 4*m_colorSteps[k][2]])
         }
     }
     else if (opc == COLOR_RED) {
         for (k = 0; k < 16; k += 1) {
-            table.insert(m_colors, [4*m_colorSteps[k][2], 13 * k, 3*m_colorSteps[k][0]])
+            Table.insert(m_colors, [4*m_colorSteps[k][2], 13 * k, 3*m_colorSteps[k][0]])
         }
     }
     else if (opc == COLOR_GREEN) {
         for (k = 0; k < 16; k += 1) {
-            table.insert(m_colors, [14 * k, 4*m_colorSteps[k][2], 4*m_colorSteps[k][0]])
+            Table.insert(m_colors, [14 * k, 4*m_colorSteps[k][2], 4*m_colorSteps[k][0]])
         }
     }
     else if (opc == COLOR_RANDOM) {
         var c1, c2, c3
         do {
-            c1 = math.random(COLOR_STEP) - 1
-            c2 = math.random(COLOR_STEP) - 1
-            c3 = math.random(COLOR_STEP) - 1
+            c1 = Math.random(COLOR_STEP) - 1
+            c2 = Math.random(COLOR_STEP) - 1
+            c3 = Math.random(COLOR_STEP) - 1
 
         } while ((c1 + c2 + c3) < MINIMUM_COLOR_STEP)
 
-        table.insert(m_colors, [0, 0, 0]) // base color is black
+        Table.insert(m_colors, [0, 0, 0]) // base color is black
 
-        var a1 = math.random(COLOR_RANGE) - 1
-        var a2 = math.random(COLOR_RANGE) - 1
-        var a3 = math.random(COLOR_RANGE) - 1
+        var a1 = Math.random(COLOR_RANGE) - 1
+        var a2 = Math.random(COLOR_RANGE) - 1
+        var a3 = Math.random(COLOR_RANGE) - 1
 
-        // Fill color table.
+        // Fill color Table.
         for (k = 1; k < 16; k += 1) {
             var t1 = (a1 + (k-1) * c1) % (COLOR_RANGE * 2)
             var t2 = (a2 + (k-1) * c2) % (COLOR_RANGE * 2)
             if (t3 >= COLOR_RANGE) {
                 t3 = (COLOR_RANGE * 2) - t3 - 1
             }
-            table.insert(m_colors, [4*t1, 4*t2, 4*t3])
+            Table.insert(m_colors, [4*t1, 4*t2, 4*t3])
         }
     }
     else if (opc == COLOR_PALETTE) {
-        var palette = math.random($m_palette) - 1
-        table.insert(m_colors, [0, 0, 0]) // base color is black
+        var palette = Math.random($m_palette) - 1
+        Table.insert(m_colors, [0, 0, 0]) // base color is black
 
-        // Fill color table.
+        // Fill color Table.
         for (k = 1; k < 16; k += 1) {
             var p1 = (m_palette[palette][0] + (k-1) * m_palette[palette][1]) % (COLOR_RANGE * 2)
             var p2 = (m_palette[palette][2] + (k-1) * m_palette[palette][3]) % (COLOR_RANGE * 2)
             if (p3 >= COLOR_RANGE) {
                 p3 = (COLOR_RANGE * 2) - p3 - 1
             }
-            table.insert(m_colors, [4*p1, 4*p2, 4*p3])
+            Table.insert(m_colors, [4*p1, 4*p2, 4*p3])
         }
     }
 }

File bin/windows/game/minecraft4k.kia

 
 function init() {
     for (var i = 1; i < 16; i += 1) {
-        var br = 255 - ((math.random() * 96) | 0);
+        var br = 255 - ((Math.random() * 96) | 0);
         for (var y = 0; y < 16 * 3; y += 1) {
             for (var x = 0; x < 16; x += 1) {
                 var color = 0x966C4A;
                 if (i == 4) {
                     color = 0x7F7F7F;
                 }
-                if (i != 4 || ((math.random() * 3) | 0) == 0) {
-                    br = 255 - ((math.random() * 96) | 0);
+                if (i != 4 || ((Math.random() * 3) | 0) == 0) {
+                    br = 255 - ((Math.random() * 96) | 0);
                 }
                 if ((i == 1 && y < (((x * x * 3 + x * 81) >> 2) & 3) + 18)) {
                     color = 0x6AAA40;
                         if (yd > xd) {
                             xd = yd;
                         }
-                        br = 196 - ((math.random() * 32) | 0) + xd % 3 * 32;
+                        br = 196 - ((Math.random() * 32) | 0) + xd % 3 * 32;
                     }
-                    else if (((math.random() * 2) | 0) == 0) {
+                    else if (((Math.random() * 2) | 0) == 0) {
                         br = br * (150 - (x & 1) * 100) / 100;
                     }
                 }
 
                 if (i == 8) {
                     color = 0x50D937;
-                    if (((math.random() * 2) | 0) == 0) {
+                    if (((Math.random() * 2) | 0) == 0) {
                         color = 0;
                         brr = 255;
                     }
                 var i = z << 12 | y << 6 | x;
                 var yd = (y - 32.5) * 0.4;
                 var zd = (z - 32.5) * 0.4;
-                map[i] = (math.random() * 16) | 0;
-                if (math.random() > math.sqrt(math.sqrt(yd * yd + zd * zd)) - 0.8) {
+                map[i] = (Math.random() * 16) | 0;
+                if (Math.random() > Math.sqrt(Math.sqrt(yd * yd + zd * zd)) - 0.8) {
                     map[i] = 0;
                 }
             }
 
 var f = 0;
 function renderMinecraft() {
-    var dateNow = math.floor(1000 * love.timer.getTime());
-    var xRot = math.sin(dateNow % 10000 / 10000 * global.math.pi * 2) * 0.1 + global.math.pi / 2;
-    var yRot = math.cos(dateNow % 10000 / 10000 * global.math.pi * 2) * 0.1;
-    var yCos = math.cos(yRot);
-    var ySin = math.sin(yRot);
-    var xCos = math.cos(xRot);
-    var xSin = math.sin(xRot);
+    var dateNow = Math.floor(1000 * love.timer.getTime());
+    var xRot = Math.sin(dateNow % 10000 / 10000 * global.Math.pi * 2) * 0.1 + global.Math.pi / 2;
+    var yRot = Math.cos(dateNow % 10000 / 10000 * global.Math.pi * 2) * 0.1;
+    var yCos = Math.cos(yRot);
+    var ySin = Math.sin(yRot);
+    var xCos = Math.cos(xRot);
+    var xSin = Math.sin(xRot);
 
     var ox = 32.5 + dateNow % 10000 / 10000 * 8;
     var oy = 32.5;

File bin/windows/game/physics.kia

 var world
 var player = {}
 var tiles  = []
-var middleTile = math.floor(TILES/2)
+var middleTile = Math.floor(TILES/2)
 
 // a and b are fixtures. coll is a contact object
 function beginContact(a, b, coll) {
   	box.fixture = love.physics.newFixture(box.body, box.shape, 1)
     var index = $tiles
   	box.fixture::setUserData([ID_TILE, index])
-  	table.insert(tiles, box)
+  	Table.insert(tiles, box)
 }
 
 function love.load() {

File bin/windows/game/platform.kia

            "Could not set screen mode")
 
     // Initialize random generator
-    math.randomseed(os.time())
+    Math.randomseed(Os.time())
 
     // Load images.
     this.m_bmpBackground = love.graphics.newImage("back.png")
     do {
         love.graphics.drawq(this.m_bmpNumbers, this.m_numbers[color][number % 10],
                             x + NUMBER_WIDTH * (length - pos), y)
-        number = math.floor(number / 10)
+        number = Math.floor(number / 10)
         pos += 1
     } while (pos < length)
 }
 }
 
 function Platform::getSystemTime() {
-    return math.floor(1000 * love.timer.getTime())
+    return Math.floor(1000 * love.timer.getTime())
 }
 
 function Platform::random() {
-    return math.random(1_000_000_000)
+    return Math.random(1_000_000_000)
 }
 
 // Return platform instance

File bin/windows/test.kia

 
 //------------------------------------------------------------------------------
-print(table.unpack([1, 2, 3]))
-var t = table.pack(100, 200, 300)
+print(Table.unpack([1, 2, 3]))
+var t = Table.pack(100, 200, 300)
 print(t[0], t[1], t[2], t.n)
 
 //------------------------------------------------------------------------------
     print(k ..") "..v)
 }
 print($t);
-table.remove(t)
+Table.remove(t)
 for each (var k,v in ipairs(t)) {
     print(k ..") "..v)
 }
 print($t);
-table.insert(t, 2, 700)
+Table.insert(t, 2, 700)
 print($t);
 var q = {}
 for each (var k,v in ipairs(t)) {
     print(k ..") "..v)
-    table.insert(q, v);
+    Table.insert(q, v);
 }
-table.sort(t, function(a, b) { return a > b })
-print(table.concat(t,",",1))
+Table.sort(t, function(a, b) { return a > b })
+print(Table.concat(t,",",1))
 for each (var i = 0 to $q - 1) {
     print(i .."] "..tostring(q[i]))
 }
             i += 1
         }
         if (i < limit) {
-            table.insert(ret, i)
+            Table.insert(ret, i)
             for (var j = i * i;  j <= limit; j += i) {
                 sieve[j] = true
             }
     }
     return ret
 }
-print(table.concat(primes(100),","))
+print(Table.concat(primes(100),","))
 
 //------------------------------------------------------------------------------
 function printPowers(base, count) {
     var verses = []
     for (var i = beers; i >= 0; i -= 1) {
         if (i >= 2) {
-            table.insert(verses, createVerse(i));
+            Table.insert(verses, createVerse(i));
         }
         else if (i == 1) {
-            table.insert(verses, function() {
+            Table.insert(verses, function() {
                 return '1 bottle of beer on the wall, 1 bottle of beer.'
                         .. takeOneDown() .. bottlesOnTheWall('no more') .. '.\n'
             })
         }
         else {
-            table.insert(verses, function() {
+            Table.insert(verses, function() {
                 return bottlesOnTheWall('No more') .. ', ' 
                        .. bottlesOfBeer('no more') 
                        .. '.\nGo to the store and buy some more, ' 
         b = a + ((k % 2 == 0)? 4 : -4) / (2 * k + 1)
         a , b = b , a
         k += 1
-    } while (math.abs(a - b) >= precision)
+    } while (Math.abs(a - b) >= precision)
     return a
 }
 
 print(pi(10e-5))
-print(2*math.asin(1))
+print(2 * Math.asin(1))
 
 //*///--------------------------------------------------------------------------

File src/common/runtime.cpp

 
 int luax_preload(lua_State *L, lua_CFunction f, const char *name)
 {
-	lua_getglobal(L, "package");
+	lua_getglobal(L, LUA_LOADLIBNAME);
 	lua_getfield(L, -1, "preload");
 	lua_pushcfunction(L, f);
 	lua_setfield(L, -2, name);
 int luax_register_searcher(lua_State *L, lua_CFunction f, int pos)
 {
 	// Add the package loader to the package.loaders table.
-	lua_getglobal(L, "package");
+	lua_getglobal(L, LUA_LOADLIBNAME);
 
 	if (lua_isnil(L, -1))
 		return luaL_error(L, "Can't register searcher: package table does not exist.");

File src/libraries/killa/killalib.h

 
 KILLAMOD_API int (killaopen_base) (killa_State *L);
 
-#define KILLA_COLIBNAME     "coroutine"
+#define KILLA_COLIBNAME     "Coroutine"
 KILLAMOD_API int (killaopen_coroutine) (killa_State *L);
 
-#define KILLA_TABLIBNAME    "table"
+#define KILLA_TABLIBNAME    "Table"
 KILLAMOD_API int (killaopen_table) (killa_State *L);
 
-#define KILLA_IOLIBNAME     "io"
+#define KILLA_IOLIBNAME     "Io"
 KILLAMOD_API int (killaopen_io) (killa_State *L);
 
-#define KILLA_OSLIBNAME     "os"
+#define KILLA_OSLIBNAME     "Os"
 KILLAMOD_API int (killaopen_os) (killa_State *L);
 
-#define KILLA_STRLIBNAME    "string"
+#define KILLA_STRLIBNAME    "String"
 KILLAMOD_API int (killaopen_string) (killa_State *L);
 
-#define KILLA_BITLIBNAME    "bit32"
+#define KILLA_BITLIBNAME    "Bit32"
 KILLAMOD_API int (killaopen_bit32) (killa_State *L);
 
-#define KILLA_MATHLIBNAME   "math"
+#define KILLA_MATHLIBNAME   "Math"
 KILLAMOD_API int (killaopen_math) (killa_State *L);
 
-#define KILLA_DBLIBNAME     "debug"
+#define KILLA_DBLIBNAME     "Debug"
 KILLAMOD_API int (killaopen_debug) (killa_State *L);
 
-#define KILLA_LOADLIBNAME   "package"
+#define KILLA_LOADLIBNAME   "Package"
 KILLAMOD_API int (killaopen_package) (killa_State *L);
 
 

File src/libraries/killa/klua.h

 #define LUALIB_API          KILLALIB_API
 #define LUA_VERSION         KILLA_VERSION
 
+#define LUA_COLIBNAME       KILLA_COLIBNAME
+#define LUA_TABLIBNAME      KILLA_TABLIBNAME
+#define LUA_IOLIBNAME       KILLA_IOLIBNAME
+#define LUA_OSLIBNAME       KILLA_OSLIBNAME
+#define LUA_STRLIBNAME      KILLA_STRLIBNAME
+#define LUA_BITLIBNAME      KILLA_BITLIBNAME
+#define LUA_MATHLIBNAME     KILLA_MATHLIBNAME
+#define LUA_DBLIBNAME       KILLA_DBLIBNAME
+#define LUA_LOADLIBNAME     KILLA_LOADLIBNAME
+
 #define LUA_ERRMEM          KILLA_ERRMEM
 #define LUA_ERRRUN          KILLA_ERRRUN
 #define LUA_ERRSYNTAX       KILLA_ERRSYNTAX

File src/libraries/luasocket/luasocket.cpp

 // Quick macro for adding functions to 
 // the preloder.
 #define PRELOAD(name, function) \
-	lua_getglobal(L, "package"); \
+	lua_getglobal(L, LUA_LOADLIBNAME); \
 	lua_getfield(L, -1, "preload"); \
 	lua_pushcfunction(L, function); \
 	lua_setfield(L, -2, name); \

File src/love.cpp

 
 static int love_preload(lua_State *L, lua_CFunction f, const char *name)
 {
-	lua_getglobal(L, "package");
+	lua_getglobal(L, LUA_LOADLIBNAME);
 	lua_getfield(L, -1, "preload");
 	lua_pushcfunction(L, f);
 	lua_setfield(L, -2, name);

File src/scripts/auto.kia

 	}
 
 	//let's open the input file
-	var src_file = io.open(src, "rb")
+	var src_file = Io.open(src, "rb")
 	//create an output string
 	var out_data = ""
 	//go through the input file line-by-line
 	src_file::close()
 
 	//open, write and close the output
-	var out_file = io.open(dst, "wb")
+	var out_file = Io.open(dst, "wb")
 	//see pattern above
 	out_file::write(pattern::format(src, cpp_name, out_data, src))
 	out_file::close()

File src/scripts/boot.kia

 
 // Replace any \ with /.
 function love.path.normalslashes(p) {
-	return string.gsub(p, "\\", "/")
+	return String.gsub(p, "\\", "/")
 }
 
 // Makes sure there is a slash at the end
 // of a path.
 function love.path.endslash(p) {
-	if (string.sub(p, string.len(p)) != "/") {
+	if (String.sub(p, String.len(p)) != "/") {
 		return p .. "/"
 	} else {
 		return p
 	var tmp = love.path.normalslashes(p)
 
 	// Path is absolute if it starts with a "/".
-	if (string.find(tmp, "/") == 1) {
+	if (String.find(tmp, "/") == 1) {
 		return true
 	}
 
 	// Path is absolute if it starts with a
 	// letter followed by a colon.
-	if (string.find(tmp, "%a:") == 1) {
+	if (String.find(tmp, "%a:") == 1) {
 		return true
 	}
 
 	var last = p
 
 	while (a) {
-		a = string.find(p, "/", a+1)
+		a = String.find(p, "/", a+1)
 
 		if (a) {
-			last = string.sub(p, a+1)
+			last = String.sub(p, a+1)
 		}
 	}
 
 }
 
 // Finds the key in the table with the lowest integral index. The lowest
-// will typically the executable.
+// will typically the execuTable.
 function love.arg.getLow(a) {
-	var m = global.math.huge
+	var m = global.Math.huge
 	for each (var k,v in pairs(a)) {
 		if (k < m) {
 			m = k
 	if (m.a > 0) {
 		m.arg = {}
 		for each (var j = i to i + m.a - 1) {
-			table.insert(m.arg, global.arg[j])
+			Table.insert(m.arg, global.arg[j])
 			i = j
 		}
 	}
 
 	for each (var i = base to argc + base - 1) {
 		// Look for options.
-		var s, e, m = string.find(global.arg[i], "%-%-(.+)")
+		var s, e, m = String.find(global.arg[i], "%-%-(.+)")
 
 		if (m && love.arg.options[m]) {
 			i = love.arg.parse_option(love.arg.options[m], i+1)
 		release: false,
 	}
 
-	// If config file exists, load it and allow it to update config table.
+	// If config file exists, load it and allow it to update config Table.
 	if (! love.conf && love.filesystem && love.filesystem.exists("conf.kia")) {
 		require("conf")
 	}
 
 function love.run() {
 
-	math.randomseed(os.time())
-	math.random() math.random()
+	Math.randomseed(Os.time())
+	Math.random()
+    Math.random()
 
 	if (love.load) { love.load(global.arg) }
 
 	var heart_image
 	
 	function add_heart_ring(radius, number, speed) {
-		var step = global.math.pi * 2/number
+		var step = global.Math.pi * 2/number
 		for each (var i = 1 to number) {
 			var heart = {
 				radius: radius,
 				speed: speed,
 				opacity: radius/450
 			}
-			table.insert(hearts, heart)
+			Table.insert(hearts, heart)
 		}
-		table.insert(rings, radius)
+		Table.insert(rings, radius)
 	}
 	
 	function update_hearts(dt) {
 	
 	function draw_hearts() {
 		for each (var i,v in ipairs(hearts)) {
-			var x = math.cos(v.position) * v.radius + cx
-			var y = math.sin(v.position) * v.radius + cy
+			var x = Math.cos(v.position) * v.radius + cx
+			var y = Math.sin(v.position) * v.radius + cy
 			love.graphics.setColor(255, 255, 255, v.opacity*255)
 			love.graphics.draw(heart_image, x, y, v.position+0.4, 1, 1, 32, 32)
 		}
 	}
 	
 	function love.load() {
-		math.randomseed(os.time())
+		Math.randomseed(Os.time())
 		pig = {
 			x: cx,
 			y: cy,
 var debug = global.debug
 
 function error_printer(msg, layer) {
-	print((debug.traceback("Error: " .. tostring(msg), 1+(layer || 1))::gsub("\n[^\n]+$", "")))
+	print((Debug.traceback("Error: " .. tostring(msg), 1+(layer || 1))::gsub("\n[^\n]+$", "")))
 }
 
 function love.errhand(msg) {
 
 	love.graphics.setColor(255, 255, 255, 255)
 
-	var trace = debug.traceback()
+	var trace = Debug.traceback()
 
 	love.graphics.clear()
 
 	var err = {}
 
-	table.insert(err, "Error\n")
-	table.insert(err, msg.."\n\n")
+	Table.insert(err, "Error\n")
+	Table.insert(err, msg.."\n\n")
 
-	for each (var l in string.gmatch(trace, "(.-)\n")) {
-		if (! string.match(l, "boot.kia")) {
-			l = string.gsub(l, "stack traceback:", "Traceback\n")
-			table.insert(err, l)
+	for each (var l in String.gmatch(trace, "(.-)\n")) {
+		if (! String.match(l, "boot.kia")) {
+			l = String.gsub(l, "stack traceback:", "Traceback\n")
+			Table.insert(err, l)
 		}
 	}
 
-	var p = table.concat(err, "\n")
+	var p = Table.concat(err, "\n")
 
-	p = string.gsub(p, "\t", "")
-	p = string.gsub(p, "%[string \"(.-)\"%]", "%1")
+	p = String.gsub(p, "\t", "")
+	p = String.gsub(p, "%[string \"(.-)\"%]", "%1")
 
 	function draw() {
 		love.graphics.clear()
 
 	var err = {}
 
-	var p = string.format("An error has occured that caused %s to stop.\nYou can notify %s about this%s.", 
+	var p = String.format("An error has occured that caused %s to stop.\nYou can notify %s about this%s.", 
                           love._release.title || "this game", love._release.author || "the author", love._release.url && " at " .. love._release.url || "")
 
 	function draw() {

File src/scripts/boot.kia.h

 	0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x6c, 0x6f, 0x76, 0x65, 0x2e, 0x70, 0x61, 0x74, 0x68, 
 	0x2e, 0x6e, 0x6f, 0x72, 0x6d, 0x61, 0x6c, 0x73, 0x6c, 0x61, 0x73, 0x68, 0x65, 0x73, 0x28, 0x70, 0x29, 0x20, 
 	0x7b, 0x0a,
-	0x09, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x2e, 0x67, 0x73, 0x75, 
+	0x09, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x2e, 0x67, 0x73, 0x75, 
 	0x62, 0x28, 0x70, 0x2c, 0x20, 0x22, 0x5c, 0x5c, 0x22, 0x2c, 0x20, 0x22, 0x2f, 0x22, 0x29, 0x0a,
 	0x7d, 0x0a,0x0a,
 	0x2f, 0x2f, 0x20, 0x4d, 0x61, 0x6b, 0x65, 0x73, 0x20, 0x73, 0x75, 0x72, 0x65, 0x20, 0x74, 0x68, 0x65, 0x72, 
 	0x2f, 0x2f, 0x20, 0x6f, 0x66, 0x20, 0x61, 0x20, 0x70, 0x61, 0x74, 0x68, 0x2e, 0x0a,
 	0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x6c, 0x6f, 0x76, 0x65, 0x2e, 0x70, 0x61, 0x74, 0x68, 
 	0x2e, 0x65, 0x6e, 0x64, 0x73, 0x6c, 0x61, 0x73, 0x68, 0x28, 0x70, 0x29, 0x20, 0x7b, 0x0a,
-	0x09, 0x69, 0x66, 0x20, 0x28, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x2e, 0x73, 0x75, 0x62, 0x28, 0x70, 0x2c, 
-	0x20, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x2e, 0x6c, 0x65, 0x6e, 0x28, 0x70, 0x29, 0x29, 0x20, 0x21, 0x3d, 
+	0x09, 0x69, 0x66, 0x20, 0x28, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x2e, 0x73, 0x75, 0x62, 0x28, 0x70, 0x2c, 
+	0x20, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x2e, 0x6c, 0x65, 0x6e, 0x28, 0x70, 0x29, 0x29, 0x20, 0x21, 0x3d, 
 	0x20, 0x22, 0x2f, 0x22, 0x29, 0x20, 0x7b, 0x0a,
 	0x09, 0x09, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x70, 0x20, 0x2e, 0x2e, 0x20, 0x22, 0x2f, 0x22, 0x0a,
 	0x09, 0x7d, 0x20, 0x65, 0x6c, 0x73, 0x65, 0x20, 0x7b, 0x0a,
 	0x09, 0x2f, 0x2f, 0x20, 0x50, 0x61, 0x74, 0x68, 0x20, 0x69, 0x73, 0x20, 0x61, 0x62, 0x73, 0x6f, 0x6c, 0x75, 
 	0x74, 0x65, 0x20, 0x69, 0x66, 0x20, 0x69, 0x74, 0x20, 0x73, 0x74, 0x61, 0x72, 0x74, 0x73, 0x20, 0x77, 0x69, 
 	0x74, 0x68, 0x20, 0x61, 0x20, 0x22, 0x2f, 0x22, 0x2e, 0x0a,
-	0x09, 0x69, 0x66, 0x20, 0x28, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x2e, 0x66, 0x69, 0x6e, 0x64, 0x28, 0x74, 
+	0x09, 0x69, 0x66, 0x20, 0x28, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x2e, 0x66, 0x69, 0x6e, 0x64, 0x28, 0x74, 
 	0x6d, 0x70, 0x2c, 0x20, 0x22, 0x2f, 0x22, 0x29, 0x20, 0x3d, 0x3d, 0x20, 0x31, 0x29, 0x20, 0x7b, 0x0a,
 	0x09, 0x09, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x74, 0x72, 0x75, 0x65, 0x0a,
 	0x09, 0x7d, 0x0a,0x0a,
 	0x74, 0x68, 0x20, 0x61, 0x0a,
 	0x09, 0x2f, 0x2f, 0x20, 0x6c, 0x65, 0x74, 0x74, 0x65, 0x72, 0x20, 0x66, 0x6f, 0x6c, 0x6c, 0x6f, 0x77, 0x65, 
 	0x64, 0x20, 0x62, 0x79, 0x20, 0x61, 0x20, 0x63, 0x6f, 0x6c, 0x6f, 0x6e, 0x2e, 0x0a,
-	0x09, 0x69, 0x66, 0x20, 0x28, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x2e, 0x66, 0x69, 0x6e, 0x64, 0x28, 0x74, 
+	0x09, 0x69, 0x66, 0x20, 0x28, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x2e, 0x66, 0x69, 0x6e, 0x64, 0x28, 0x74, 
 	0x6d, 0x70, 0x2c, 0x20, 0x22, 0x25, 0x61, 0x3a, 0x22, 0x29, 0x20, 0x3d, 0x3d, 0x20, 0x31, 0x29, 0x20, 0x7b, 0x0a,
 	0x09, 0x09, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x74, 0x72, 0x75, 0x65, 0x0a,
 	0x09, 0x7d, 0x0a,0x0a,
 	0x09, 0x76, 0x61, 0x72, 0x20, 0x61, 0x20, 0x3d, 0x20, 0x30, 0x0a,
 	0x09, 0x76, 0x61, 0x72, 0x20, 0x6c, 0x61, 0x73, 0x74, 0x20, 0x3d, 0x20, 0x70, 0x0a,0x0a,
 	0x09, 0x77, 0x68, 0x69, 0x6c, 0x65, 0x20, 0x28, 0x61, 0x29, 0x20, 0x7b, 0x0a,
-	0x09, 0x09, 0x61, 0x20, 0x3d, 0x20, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x2e, 0x66, 0x69, 0x6e, 0x64, 0x28, 
+	0x09, 0x09, 0x61, 0x20, 0x3d, 0x20, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x2e, 0x66, 0x69, 0x6e, 0x64, 0x28, 
 	0x70, 0x2c, 0x20, 0x22, 0x2f, 0x22, 0x2c, 0x20, 0x61, 0x2b, 0x31, 0x29, 0x0a,0x0a,
 	0x09, 0x09, 0x69, 0x66, 0x20, 0x28, 0x61, 0x29, 0x20, 0x7b, 0x0a,
-	0x09, 0x09, 0x09, 0x6c, 0x61, 0x73, 0x74, 0x20, 0x3d, 0x20, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x2e, 0x73, 
+	0x09, 0x09, 0x09, 0x6c, 0x61, 0x73, 0x74, 0x20, 0x3d, 0x20, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x2e, 0x73, 
 	0x75, 0x62, 0x28, 0x70, 0x2c, 0x20, 0x61, 0x2b, 0x31, 0x29, 0x0a,
 	0x09, 0x09, 0x7d, 0x0a,
 	0x09, 0x7d, 0x0a,0x0a,
 	0x74, 0x68, 0x65, 0x20, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x2e, 0x0a,
 	0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x6c, 0x6f, 0x76, 0x65, 0x2e, 0x61, 0x72, 0x67, 0x2e, 
 	0x67, 0x65, 0x74, 0x4c, 0x6f, 0x77, 0x28, 0x61, 0x29, 0x20, 0x7b, 0x0a,
-	0x09, 0x76, 0x61, 0x72, 0x20, 0x6d, 0x20, 0x3d, 0x20, 0x67, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x2e, 0x6d, 0x61, 
+	0x09, 0x76, 0x61, 0x72, 0x20, 0x6d, 0x20, 0x3d, 0x20, 0x67, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x2e, 0x4d, 0x61, 
 	0x74, 0x68, 0x2e, 0x68, 0x75, 0x67, 0x65, 0x0a,
 	0x09, 0x66, 0x6f, 0x72, 0x20, 0x65, 0x61, 0x63, 0x68, 0x20, 0x28, 0x76, 0x61, 0x72, 0x20, 0x6b, 0x2c, 0x76, 
 	0x20, 0x69, 0x6e, 0x20, 0x70, 0x61, 0x69, 0x72, 0x73, 0x28, 0x61, 0x29, 0x29, 0x20, 0x7b, 0x0a,
 	0x09, 0x09, 0x66, 0x6f, 0x72, 0x20, 0x65, 0x61, 0x63, 0x68, 0x20, 0x28, 0x76, 0x61, 0x72, 0x20, 0x6a, 0x20, 
 	0x3d, 0x20, 0x69, 0x20, 0x74, 0x6f, 0x20, 0x69, 0x20, 0x2b, 0x20, 0x6d, 0x2e, 0x61, 0x20, 0x2d, 0x20, 0x31, 
 	0x29, 0x20, 0x7b, 0x0a,
-	0x09, 0x09, 0x09, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x2e, 0x69, 0x6e, 0x73, 0x65, 0x72, 0x74, 0x28, 0x6d, 0x2e, 
+	0x09, 0x09, 0x09, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x2e, 0x69, 0x6e, 0x73, 0x65, 0x72, 0x74, 0x28, 0x6d, 0x2e, 
 	0x61, 0x72, 0x67, 0x2c, 0x20, 0x67, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x2e, 0x61, 0x72, 0x67, 0x5b, 0x6a, 0x5d, 
 	0x29, 0x0a,
 	0x09, 0x09, 0x09, 0x69, 0x20, 0x3d, 0x20, 0x6a, 0x0a,
 	0x73, 0x65, 0x20, 0x2d, 0x20, 0x31, 0x29, 0x20, 0x7b, 0x0a,
 	0x09, 0x09, 0x2f, 0x2f, 0x20, 0x4c, 0x6f, 0x6f, 0x6b, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x6f, 0x70, 0x74, 0x69, 
 	0x6f, 0x6e, 0x73, 0x2e, 0x0a,
-	0x09, 0x09, 0x76, 0x61, 0x72, 0x20, 0x73, 0x2c, 0x20, 0x65, 0x2c, 0x20, 0x6d, 0x20, 0x3d, 0x20, 0x73, 0x74, 
+	0x09, 0x09, 0x76, 0x61, 0x72, 0x20, 0x73, 0x2c, 0x20, 0x65, 0x2c, 0x20, 0x6d, 0x20, 0x3d, 0x20, 0x53, 0x74, 
 	0x72, 0x69, 0x6e, 0x67, 0x2e, 0x66, 0x69, 0x6e, 0x64, 0x28, 0x67, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x2e, 0x61, 
 	0x72, 0x67, 0x5b, 0x69, 0x5d, 0x2c, 0x20, 0x22, 0x25, 0x2d, 0x25, 0x2d, 0x28, 0x2e, 0x2b, 0x29, 0x22, 0x29, 0x0a,0x0a,
 	0x09, 0x09, 0x69, 0x66, 0x20, 0x28, 0x6d, 0x20, 0x26, 0x26, 0x20, 0x6c, 0x6f, 0x76, 0x65, 0x2e, 0x61, 0x72, 
 	0x7d, 0x0a,0x0a,
 	0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x6c, 0x6f, 0x76, 0x65, 0x2e, 0x72, 0x75, 0x6e, 0x28, 
 	0x29, 0x20, 0x7b, 0x0a,0x0a,
-	0x09, 0x6d, 0x61, 0x74, 0x68, 0x2e, 0x72, 0x61, 0x6e, 0x64, 0x6f, 0x6d, 0x73, 0x65, 0x65, 0x64, 0x28, 0x6f, 
+	0x09, 0x4d, 0x61, 0x74, 0x68, 0x2e, 0x72, 0x61, 0x6e, 0x64, 0x6f, 0x6d, 0x73, 0x65, 0x65, 0x64, 0x28, 0x4f, 
 	0x73, 0x2e, 0x74, 0x69, 0x6d, 0x65, 0x28, 0x29, 0x29, 0x0a,
-	0x09, 0x6d, 0x61, 0x74, 0x68, 0x2e, 0x72, 0x61, 0x6e, 0x64, 0x6f, 0x6d, 0x28, 0x29, 0x20, 0x6d, 0x61, 0x74, 
-	0x68, 0x2e, 0x72, 0x61, 0x6e, 0x64, 0x6f, 0x6d, 0x28, 0x29, 0x0a,0x0a,
+	0x09, 0x4d, 0x61, 0x74, 0x68, 0x2e, 0x72, 0x61, 0x6e, 0x64, 0x6f, 0x6d, 0x28, 0x29, 0x0a,
+	0x20, 0x20, 0x20, 0x20, 0x4d, 0x61, 0x74, 0x68, 0x2e, 0x72, 0x61, 0x6e, 0x64, 0x6f, 0x6d, 0x28, 0x29, 0x0a,0x0a,
 	0x09, 0x69, 0x66, 0x20, 0x28, 0x6c, 0x6f, 0x76, 0x65, 0x2e, 0x6c, 0x6f, 0x61, 0x64, 0x29, 0x20, 0x7b, 0x20, 
 	0x6c, 0x6f, 0x76, 0x65, 0x2e, 0x6c, 0x6f, 0x61, 0x64, 0x28, 0x67, 0x6c, 0x6f, 0x62, 0x61, 0x6c, 0x2e, 0x61, 
 	0x72, 0x67, 0x29, 0x20, 0x7d, 0x0a,0x0a,
 	0x74, 0x5f, 0x72, 0x69, 0x6e, 0x67, 0x28, 0x72, 0x61, 0x64, 0x69, 0x75, 0x73, 0x2c, 0x20, 0x6e, 0x75, 0x6d, 
 	0x62, 0x65, 0x72, 0x2c, 0x20, 0x73, 0x70, 0x65, 0x65, 0x64, 0x29, 0x20, 0x7b, 0x0a,
 	0x09, 0x09, 0x76, 0x61, 0x72, 0x20, 0x73, 0x74, 0x65, 0x70, 0x20, 0x3d, 0x20, 0x67, 0x6c, 0x6f, 0x62, 0x61, 
-	0x6c, 0x2e, 0x6d, 0x61, 0x74, 0x68, 0x2e, 0x70, 0x69, 0x20, 0x2a, 0x20, 0x32, 0x2f, 0x6e, 0x75, 0x6d, 0x62, 
+	0x6c, 0x2e, 0x4d, 0x61, 0x74, 0x68, 0x2e, 0x70, 0x69, 0x20, 0x2a, 0x20, 0x32, 0x2f, 0x6e, 0x75, 0x6d, 0x62, 
 	0x65, 0x72, 0x0a,
 	0x09, 0x09, 0x66, 0x6f, 0x72, 0x20, 0x65, 0x61, 0x63, 0x68, 0x20, 0x28, 0x76, 0x61, 0x72, 0x20, 0x69, 0x20, 
 	0x3d, 0x20, 0x31, 0x20, 0x74, 0x6f, 0x20, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x29, 0x20, 0x7b, 0x0a,
 	0x09, 0x09, 0x09, 0x09, 0x6f, 0x70, 0x61, 0x63, 0x69, 0x74, 0x79, 0x3a, 0x20, 0x72, 0x61, 0x64, 0x69, 0x75, 
 	0x73, 0x2f, 0x34, 0x35, 0x30, 0x0a,
 	0x09, 0x09, 0x09, 0x7d, 0x0a,
-	0x09, 0x09, 0x09, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x2e, 0x69, 0x6e, 0x73, 0x65, 0x72, 0x74, 0x28, 0x68, 0x65, 
+	0x09, 0x09, 0x09, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x2e, 0x69, 0x6e, 0x73, 0x65, 0x72, 0x74, 0x28, 0x68, 0x65, 
 	0x61, 0x72, 0x74, 0x73, 0x2c, 0x20, 0x68, 0x65, 0x61, 0x72, 0x74, 0x29, 0x0a,
 	0x09, 0x09, 0x7d, 0x0a,
-	0x09, 0x09, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x2e, 0x69, 0x6e, 0x73, 0x65, 0x72, 0x74, 0x28, 0x72, 0x69, 0x6e, 
+	0x09, 0x09, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x2e, 0x69, 0x6e, 0x73, 0x65, 0x72, 0x74, 0x28, 0x72, 0x69, 0x6e, 
 	0x67, 0x73, 0x2c, 0x20, 0x72, 0x61, 0x64, 0x69, 0x75, 0x73, 0x29, 0x0a,
 	0x09, 0x7d, 0x0a,
 	0x09, 0x0a,
 	0x09, 0x09, 0x66, 0x6f, 0x72, 0x20, 0x65, 0x61, 0x63, 0x68, 0x20, 0x28, 0x76, 0x61, 0x72, 0x20, 0x69, 0x2c, 
 	0x76, 0x20, 0x69, 0x6e, 0x20, 0x69, 0x70, 0x61, 0x69, 0x72, 0x73, 0x28, 0x68, 0x65, 0x61, 0x72, 0x74, 0x73, 
 	0x29, 0x29, 0x20, 0x7b, 0x0a,
-	0x09, 0x09, 0x09, 0x76, 0x61, 0x72, 0x20, 0x78, 0x20, 0x3d, 0x20, 0x6d, 0x61, 0x74, 0x68, 0x2e, 0x63, 0x6f, 
+	0x09, 0x09, 0x09, 0x76, 0x61, 0x72, 0x20, 0x78, 0x20, 0x3d, 0x20, 0x4d, 0x61, 0x74, 0x68, 0x2e, 0x63, 0x6f, 
 	0x73, 0x28, 0x76, 0x2e, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x29, 0x20, 0x2a, 0x20, 0x76, 0x2e, 
 	0x72, 0x61, 0x64, 0x69, 0x75, 0x73, 0x20, 0x2b, 0x20, 0x63, 0x78, 0x0a,
-	0x09, 0x09, 0x09, 0x76, 0x61, 0x72, 0x20, 0x79, 0x20, 0x3d, 0x20, 0x6d, 0x61, 0x74, 0x68, 0x2e, 0x73, 0x69, 
+	0x09, 0x09, 0x09, 0x76, 0x61, 0x72, 0x20, 0x79, 0x20, 0x3d, 0x20, 0x4d, 0x61, 0x74, 0x68, 0x2e, 0x73, 0x69, 
 	0x6e, 0x28, 0x76, 0x2e, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x29, 0x20, 0x2a, 0x20, 0x76, 0x2e, 
 	0x72, 0x61, 0x64, 0x69, 0x75, 0x73, 0x20, 0x2b, 0x20, 0x63, 0x79, 0x0a,
 	0x09, 0x09, 0x09, 0x6c, 0x6f, 0x76, 0x65, 0x2e, 0x67, 0x72, 0x61, 0x70, 0x68, 0x69, 0x63, 0x73, 0x2e, 0x73, 
 	0x09, 0x0a,
 	0x09, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x6c, 0x6f, 0x76, 0x65, 0x2e, 0x6c, 0x6f, 0x61, 
 	0x64, 0x28, 0x29, 0x20, 0x7b, 0x0a,
-	0x09, 0x09, 0x6d, 0x61, 0x74, 0x68, 0x2e, 0x72, 0x61, 0x6e, 0x64, 0x6f, 0x6d, 0x73, 0x65, 0x65, 0x64, 0x28, 
-	0x6f, 0x73, 0x2e, 0x74, 0x69, 0x6d, 0x65, 0x28, 0x29, 0x29, 0x0a,
+	0x09, 0x09, 0x4d, 0x61, 0x74, 0x68, 0x2e, 0x72, 0x61, 0x6e, 0x64, 0x6f, 0x6d, 0x73, 0x65, 0x65, 0x64, 0x28, 
+	0x4f, 0x73, 0x2e, 0x74, 0x69, 0x6d, 0x65, 0x28, 0x29, 0x29, 0x0a,
 	0x09, 0x09, 0x70, 0x69, 0x67, 0x20, 0x3d, 0x20, 0x7b, 0x0a,
 	0x09, 0x09, 0x09, 0x78, 0x3a, 0x20, 0x63, 0x78, 0x2c, 0x0a,
 	0x09, 0x09, 0x09, 0x79, 0x3a, 0x20, 0x63, 0x79, 0x2c, 0x0a,
 	0x2e, 0x64, 0x65, 0x62, 0x75, 0x67, 0x0a,0x0a,
 	0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x5f, 0x70, 0x72, 0x69, 
 	0x6e, 0x74, 0x65, 0x72, 0x28, 0x6d, 0x73, 0x67, 0x2c, 0x20, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x29, 0x20, 0x7b, 0x0a,
-	0x09, 0x70, 0x72, 0x69, 0x6e, 0x74, 0x28, 0x28, 0x64, 0x65, 0x62, 0x75, 0x67, 0x2e, 0x74, 0x72, 0x61, 0x63, 
+	0x09, 0x70, 0x72, 0x69, 0x6e, 0x74, 0x28, 0x28, 0x44, 0x65, 0x62, 0x75, 0x67, 0x2e, 0x74, 0x72, 0x61, 0x63, 
 	0x65, 0x62, 0x61, 0x63, 0x6b, 0x28, 0x22, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x3a, 0x20, 0x22, 0x20, 0x2e, 0x2e, 
 	0x20, 0x74, 0x6f, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x28, 0x6d, 0x73, 0x67, 0x29, 0x2c, 0x20, 0x31, 0x2b, 
 	0x28, 0x6c, 0x61, 0x79, 0x65, 0x72, 0x20, 0x7c, 0x7c, 0x20, 0x31, 0x29, 0x29, 0x3a, 0x3a, 0x67, 0x73, 0x75, 
 	0x09, 0x6c, 0x6f, 0x76, 0x65, 0x2e, 0x67, 0x72, 0x61, 0x70, 0x68, 0x69, 0x63, 0x73, 0x2e, 0x73, 0x65, 0x74, 
 	0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x28, 0x32, 0x35, 0x35, 0x2c, 0x20, 0x32, 0x35, 0x35, 0x2c, 0x20, 0x32, 0x35, 
 	0x35, 0x2c, 0x20, 0x32, 0x35, 0x35, 0x29, 0x0a,0x0a,
-	0x09, 0x76, 0x61, 0x72, 0x20, 0x74, 0x72, 0x61, 0x63, 0x65, 0x20, 0x3d, 0x20, 0x64, 0x65, 0x62, 0x75, 0x67, 
+	0x09, 0x76, 0x61, 0x72, 0x20, 0x74, 0x72, 0x61, 0x63, 0x65, 0x20, 0x3d, 0x20, 0x44, 0x65, 0x62, 0x75, 0x67, 
 	0x2e, 0x74, 0x72, 0x61, 0x63, 0x65, 0x62, 0x61, 0x63, 0x6b, 0x28, 0x29, 0x0a,0x0a,
 	0x09, 0x6c, 0x6f, 0x76, 0x65, 0x2e, 0x67, 0x72, 0x61, 0x70, 0x68, 0x69, 0x63, 0x73, 0x2e, 0x63, 0x6c, 0x65, 
 	0x61, 0x72, 0x28, 0x29, 0x0a,0x0a,
 	0x09, 0x76, 0x61, 0x72, 0x20, 0x65, 0x72, 0x72, 0x20, 0x3d, 0x20, 0x7b, 0x7d, 0x0a,0x0a,
-	0x09, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x2e, 0x69, 0x6e, 0x73, 0x65, 0x72, 0x74, 0x28, 0x65, 0x72, 0x72, 0x2c, 
+	0x09, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x2e, 0x69, 0x6e, 0x73, 0x65, 0x72, 0x74, 0x28, 0x65, 0x72, 0x72, 0x2c, 
 	0x20, 0x22, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x5c, 0x6e, 0x22, 0x29, 0x0a,
-	0x09, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x2e, 0x69, 0x6e, 0x73, 0x65, 0x72, 0x74, 0x28, 0x65, 0x72, 0x72, 0x2c, 
+	0x09, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x2e, 0x69, 0x6e, 0x73, 0x65, 0x72, 0x74, 0x28, 0x65, 0x72, 0x72, 0x2c, 
 	0x20, 0x6d, 0x73, 0x67, 0x2e, 0x2e, 0x22, 0x5c, 0x6e, 0x5c, 0x6e, 0x22, 0x29, 0x0a,0x0a,
 	0x09, 0x66, 0x6f, 0x72, 0x20, 0x65, 0x61, 0x63, 0x68, 0x20, 0x28, 0x76, 0x61, 0x72, 0x20, 0x6c, 0x20, 0x69, 
-	0x6e, 0x20, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x2e, 0x67, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x28, 0x74, 0x72, 
+	0x6e, 0x20, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x2e, 0x67, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x28, 0x74, 0x72, 
 	0x61, 0x63, 0x65, 0x2c, 0x20, 0x22, 0x28, 0x2e, 0x2d, 0x29, 0x5c, 0x6e, 0x22, 0x29, 0x29, 0x20, 0x7b, 0x0a,
-	0x09, 0x09, 0x69, 0x66, 0x20, 0x28, 0x21, 0x20, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x2e, 0x6d, 0x61, 0x74, 
+	0x09, 0x09, 0x69, 0x66, 0x20, 0x28, 0x21, 0x20, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x2e, 0x6d, 0x61, 0x74, 
 	0x63, 0x68, 0x28, 0x6c, 0x2c, 0x20, 0x22, 0x62, 0x6f, 0x6f, 0x74, 0x2e, 0x6b, 0x69, 0x61, 0x22, 0x29, 0x29, 
 	0x20, 0x7b, 0x0a,
-	0x09, 0x09, 0x09, 0x6c, 0x20, 0x3d, 0x20, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x2e, 0x67, 0x73, 0x75, 0x62, 
+	0x09, 0x09, 0x09, 0x6c, 0x20, 0x3d, 0x20, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x2e, 0x67, 0x73, 0x75, 0x62, 
 	0x28, 0x6c, 0x2c, 0x20, 0x22, 0x73, 0x74, 0x61, 0x63, 0x6b, 0x20, 0x74, 0x72, 0x61, 0x63, 0x65, 0x62, 0x61, 
 	0x63, 0x6b, 0x3a, 0x22, 0x2c, 0x20, 0x22, 0x54, 0x72, 0x61, 0x63, 0x65, 0x62, 0x61, 0x63, 0x6b, 0x5c, 0x6e, 
 	0x22, 0x29, 0x0a,
-	0x09, 0x09, 0x09, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x2e, 0x69, 0x6e, 0x73, 0x65, 0x72, 0x74, 0x28, 0x65, 0x72, 
+	0x09, 0x09, 0x09, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x2e, 0x69, 0x6e, 0x73, 0x65, 0x72, 0x74, 0x28, 0x65, 0x72, 
 	0x72, 0x2c, 0x20, 0x6c, 0x29, 0x0a,
 	0x09, 0x09, 0x7d, 0x0a,
 	0x09, 0x7d, 0x0a,0x0a,
-	0x09, 0x76, 0x61, 0x72, 0x20, 0x70, 0x20, 0x3d, 0x20, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x2e, 0x63, 0x6f, 0x6e, 
+	0x09, 0x76, 0x61, 0x72, 0x20, 0x70, 0x20, 0x3d, 0x20, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x2e, 0x63, 0x6f, 0x6e, 
 	0x63, 0x61, 0x74, 0x28, 0x65, 0x72, 0x72, 0x2c, 0x20, 0x22, 0x5c, 0x6e, 0x22, 0x29, 0x0a,0x0a,
-	0x09, 0x70, 0x20, 0x3d, 0x20, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x2e, 0x67, 0x73, 0x75, 0x62, 0x28, 0x70, 
+	0x09, 0x70, 0x20, 0x3d, 0x20, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x2e, 0x67, 0x73, 0x75, 0x62, 0x28, 0x70, 
 	0x2c, 0x20, 0x22, 0x5c, 0x74, 0x22, 0x2c, 0x20, 0x22, 0x22, 0x29, 0x0a,
-	0x09, 0x70, 0x20, 0x3d, 0x20, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x2e, 0x67, 0x73, 0x75, 0x62, 0x28, 0x70, 
+	0x09, 0x70, 0x20, 0x3d, 0x20, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x2e, 0x67, 0x73, 0x75, 0x62, 0x28, 0x70, 
 	0x2c, 0x20, 0x22, 0x25, 0x5b, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x20, 0x5c, 0x22, 0x28, 0x2e, 0x2d, 0x29, 
 	0x5c, 0x22, 0x25, 0x5d, 0x22, 0x2c, 0x20, 0x22, 0x25, 0x31, 0x22, 0x29, 0x0a,0x0a,
 	0x09, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x64, 0x72, 0x61, 0x77, 0x28, 0x29, 0x20, 0x7b, 0x0a,
 	0x09, 0x6c, 0x6f, 0x76, 0x65, 0x2e, 0x67, 0x72, 0x61, 0x70, 0x68, 0x69, 0x63, 0x73, 0x2e, 0x63, 0x6c, 0x65, 
 	0x61, 0x72, 0x28, 0x29, 0x0a,0x0a,
 	0x09, 0x76, 0x61, 0x72, 0x20, 0x65, 0x72, 0x72, 0x20, 0x3d, 0x20, 0x7b, 0x7d, 0x0a,0x0a,
-	0x09, 0x76, 0x61, 0x72, 0x20, 0x70, 0x20, 0x3d, 0x20, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x2e, 0x66, 0x6f, 
+	0x09, 0x76, 0x61, 0x72, 0x20, 0x70, 0x20, 0x3d, 0x20, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x2e, 0x66, 0x6f, 
 	0x72, 0x6d, 0x61, 0x74, 0x28, 0x22, 0x41, 0x6e, 0x20, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x20, 0x68, 0x61, 0x73, 
 	0x20, 0x6f, 0x63, 0x63, 0x75, 0x72, 0x65, 0x64, 0x20, 0x74, 0x68, 0x61, 0x74, 0x20, 0x63, 0x61, 0x75, 0x73, 
 	0x65, 0x64, 0x20, 0x25, 0x73, 0x20, 0x74, 0x6f, 0x20, 0x73, 0x74, 0x6f, 0x70, 0x2e, 0x5c, 0x6e, 0x59, 0x6f, 

File src/scripts/graphics.kia

 		gl_FragColor = effect(gl_Color, _tex0_, gl_TexCoord[0].xy, gl_FragCoord.xy);
 	}"""
     public function love.graphics._effectCodeToGLSL(code) {
-		return table.concat([GLSL_HEADER, "\n", code, GLSL_FOOTER])
+		return Table.concat([GLSL_HEADER, "\n", code, GLSL_FOOTER])
     }
 
     public function love.graphics._transformGLSLErrorMessages(message) {
         }
         // did not match any known error messages
         if ($lines == 1) { return message }
-        return table.concat(lines, "\n")
+        return Table.concat(lines, "\n")
     }
 
     // helper to transform a matrix from {{a,b,c}, {d,e,f}, ...} to

File src/scripts/graphics.kia.h

 	0x6e, 0x20, 0x6c, 0x6f, 0x76, 0x65, 0x2e, 0x67, 0x72, 0x61, 0x70, 0x68, 0x69, 0x63, 0x73, 0x2e, 0x5f, 0x65, 
 	0x66, 0x66, 0x65, 0x63, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x54, 0x6f, 0x47, 0x4c, 0x53, 0x4c, 0x28, 0x63, 0x6f, 
 	0x64, 0x65, 0x29, 0x20, 0x7b, 0x0a,
-	0x09, 0x09, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x2e, 0x63, 0x6f, 0x6e, 
+	0x09, 0x09, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x2e, 0x63, 0x6f, 0x6e, 
 	0x63, 0x61, 0x74, 0x28, 0x5b, 0x47, 0x4c, 0x53, 0x4c, 0x5f, 0x48, 0x45, 0x41, 0x44, 0x45, 0x52, 0x2c, 0x20, 
 	0x22, 0x5c, 0x6e, 0x22, 0x2c, 0x20, 0x63, 0x6f, 0x64, 0x65, 0x2c, 0x20, 0x47, 0x4c, 0x53, 0x4c, 0x5f, 0x46, 
 	0x4f, 0x4f, 0x54, 0x45, 0x52, 0x5d, 0x29, 0x0a,
 	0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x24, 0x6c, 0x69, 0x6e, 0x65, 0x73, 
 	0x20, 0x3d, 0x3d, 0x20, 0x31, 0x29, 0x20, 0x7b, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x6d, 0x65, 
 	0x73, 0x73, 0x61, 0x67, 0x65, 0x20, 0x7d, 0x0a,
-	0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x74, 0x61, 0x62, 
+	0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x54, 0x61, 0x62, 
 	0x6c, 0x65, 0x2e, 0x63, 0x6f, 0x6e, 0x63, 0x61, 0x74, 0x28, 0x6c, 0x69, 0x6e, 0x65, 0x73, 0x2c, 0x20, 0x22, 
 	0x5c, 0x6e, 0x22, 0x29, 0x0a,
 	0x20, 0x20, 0x20, 0x20, 0x7d, 0x0a,0x0a,