program Tetris {
	section module {
 		io,
		sdl,
		std,
		string
	}
	section data {
		int rax = 0
		int rbx = 0
		int rcx = 0
		int rdx = 0
		int rsi = 0
		int rdi = 0
		int r8 = 0
		int r9 = 0
		int r10 = 0
		int r11 = 0
		int r12 = 0
		int r13 = 0
		int r14 = 0
		ptr _tmpptr0 = null
		ptr _tmpptr1 = null
		string str_0 = "MXVM Blocks"
		string str_1 = "blocks.bmp"
		string str_2 = "Could not load: blocks.bmp"
		string str_3 = "font.ttf"
		string str_4 = "Could not open font.."
		string str_5 = "Score: "
		string fmt_str = "%s "
		string newline = "\n"
		int window_id = 0
		int renderer_id = 0
		ptr board = null
		ptr pieces = null
		int piece_id = 0
		int rotation = 0
		int piece_x = 0
		int piece_y = 0
		int score = 0
		int game_over = 0
		int show_start = 0
		int last_drop = 0
		int font_id = 0
		int start_texture = 0
		int running = 0
		int ev = 0
		int col_result = 0
		int frame_start = 0
		int frame_time = 0
		int delay_time = 0
		int tick = 0
		ptr score_text = null
		int AllocClearBoard_ci = 0
		int LockPiece_li = 0
		int LockPiece_lidx = 0
		int LockPiece_lv = 0
		int LockPiece_lpx = 0
		int LockPiece_lpy = 0
		int LockPiece_lx = 0
		int LockPiece_ly = 0
		int LockPiece_lbi = 0
		int ClearLines_cy = 0
		int ClearLines_cx = 0
		int ClearLines_cidx2 = 0
		int ClearLines_cv2 = 0
		int ClearLines_cj = 0
		int ClearLines_cbi = 0
		int ClearLines_cbi2 = 0
		int ClearLines_is_full = 0
		int DrawCell_dx = 0
		int DrawCell_dy = 0
		int DrawCell_color = 0
		int DrawCell_dr = 0
		int DrawCell_dg = 0
		int DrawCell_db = 0
		int DrawCell_dtx = 0
		int DrawCell_dty = 0
		int DrawCell_dts = 0
		int DrawCell_dm = 0
		int DrawEmpty_dx = 0
		int DrawEmpty_dy = 0
		int DrawEmpty_dtx = 0
		int DrawEmpty_dty = 0
		int DrawEmpty_dts = 0
		int Render_ri = 0
		int Render_ridx = 0
		int Render_rv = 0
		int Render_rpx = 0
		int Render_rpy = 0
		int Render_rx = 0
		int Render_ry = 0
		int HandleInput_ev_type = 0
		int HandleInput_kc = 0
		int HandleInput_old_rot = 0
		int CheckCollision_cx = 0
		int CheckCollision_cy = 0
		int CheckCollision_ci = 0
		int CheckCollision_cidx = 0
		int CheckCollision_cv = 0
		int CheckCollision_cpx = 0
		int CheckCollision_cpy = 0
		int CheckCollision_ccx = 0
		int CheckCollision_ccy = 0
		int CheckCollision_bidx = 0
		int __funcret_CheckCollision = 0
	}
	section code {
	start:
		alloc board, 8, 200
		alloc pieces, 8, 112
		invoke init
		mov rcx, 100
		mov rdx, 100
		mov rsi, 400
		mov rdi, 800
		mov r8, 0
		invoke create_window, str_0, rcx, rdx, rsi, rdi, r8
		return rbx
		mov window_id, rbx
		mov rcx, 0
		sub rcx, 1
		mov rsi, 0
		invoke create_renderer, window_id, rcx, rsi
		return rdx
		mov renderer_id, rdx
		invoke load_texture, renderer_id, str_1
		return rcx
		mov start_texture, rcx
		mov rsi, 0
		sub rsi, 1
		cmp start_texture, rsi
		jne ELSE_0
		print fmt_str, str_2
		print newline
		invoke destroy_renderer, renderer_id
		invoke destroy_window, window_id
		invoke quit
		exit 1
	ELSE_0:
		invoke init_text
		mov r9, 20
		invoke load_font, str_3, r9
		return r8
		mov font_id, r8
		mov r9, 0
		sub r9, 1
		cmp font_id, r9
		jne ELSE_4
		print fmt_str, str_4
		print newline
		invoke destroy_renderer, renderer_id
		invoke destroy_window, window_id
		invoke quit
		exit 1
	ELSE_4:
		invoke seed_random
		mov score, 0
		mov game_over, 0
		mov show_start, 1
		mov running, 1
		push rbx
		push rcx
		push rdx
		push rsi
		push rdi
		push r8
		call PROC_AllocClearBoard
		pop r8
		pop rdi
		pop rsi
		pop rdx
		pop rcx
		pop rbx
		push rbx
		push rcx
		push rdx
		push rsi
		push rdi
		push r8
		call PROC_InitPieces
		pop r8
		pop rdi
		pop rsi
		pop rdx
		pop rcx
		pop rbx
		invoke get_ticks
		return r9
		mov last_drop, r9
		push rbx
		push rcx
		push rdx
		push rsi
		push rdi
		push r8
		call PROC_Render
		pop r8
		pop rdi
		pop rsi
		pop rdx
		pop rcx
		pop rbx
		push rbx
		push rcx
		push rdx
		push rsi
		push rdi
		push r8
		call PROC_SpawnPiece
		pop r8
		pop rdi
		pop rsi
		pop rdx
		pop rcx
		pop rbx
	WHILE_8:
		cmp running, 1
		jne ENDWHILE_9
		invoke get_ticks
		return r9
		mov frame_start, r9
		cmp game_over, 1
		jne ELSE_12
		push rbx
		push rcx
		push rdx
		push rsi
		push rdi
		push r8
		call PROC_GameReset
		pop r8
		pop rdi
		pop rsi
		pop rdx
		pop rcx
		pop rbx
	ELSE_12:
		push rbx
		push rcx
		push rdx
		push rsi
		push rdi
		push r8
		call PROC_HandleInput
		pop r8
		pop rdi
		pop rsi
		pop rdx
		pop rcx
		pop rbx
		cmp running, 1
		jne ELSE_16
		cmp show_start, 0
		jne ELSE_16
		mov r9, frame_start
		sub r9, last_drop
		mov tick, r9
		cmp tick, 800
		jl ELSE_24
		mov last_drop, frame_start
		push rbx
		push rcx
		push rdx
		push rsi
		push rdi
		push r8
		call PROC_MoveDown
		pop r8
		pop rdi
		pop rsi
		pop rdx
		pop rcx
		pop rbx
	ELSE_24:
	ELSE_16:
		cmp running, 1
		jne ELSE_28
		push rbx
		push rcx
		push rdx
		push rsi
		push rdi
		push r8
		call PROC_Render
		pop r8
		pop rdi
		pop rsi
		pop rdx
		pop rcx
		pop rbx
	ELSE_28:
		invoke get_ticks
		return r9
		sub r9, frame_start
		mov frame_time, r9
		mov r9, 16
		sub r9, frame_time
		mov delay_time, r9
		cmp delay_time, 0
		jle ELSE_32
		invoke delay, delay_time
	ELSE_32:
		jmp WHILE_8
	ENDWHILE_9:
		invoke quit_text
		invoke destroy_renderer, renderer_id
		invoke destroy_window, window_id
		invoke quit
		free board
		free pieces
		done
	function PROC_InitPieces:
		cmp 0, 0
		jl IDX_OOB_37
		cmp 0, 111
		jg IDX_OOB_37
		jmp IDX_OK_36
	IDX_OOB_37:
		exit 1
	IDX_OK_36:
		mov rbx, 0
		store 4, pieces, rbx, 8
		cmp 1, 0
		jl IDX_OOB_39
		cmp 1, 111
		jg IDX_OOB_39
		jmp IDX_OK_38
	IDX_OOB_39:
		exit 1
	IDX_OK_38:
		mov rbx, 1
		store 5, pieces, rbx, 8
		cmp 2, 0
		jl IDX_OOB_41
		cmp 2, 111
		jg IDX_OOB_41
		jmp IDX_OK_40
	IDX_OOB_41:
		exit 1
	IDX_OK_40:
		mov rbx, 2
		store 6, pieces, rbx, 8
		cmp 3, 0
		jl IDX_OOB_43
		cmp 3, 111
		jg IDX_OOB_43
		jmp IDX_OK_42
	IDX_OOB_43:
		exit 1
	IDX_OK_42:
		mov rbx, 3
		store 7, pieces, rbx, 8
		cmp 4, 0
		jl IDX_OOB_45
		cmp 4, 111
		jg IDX_OOB_45
		jmp IDX_OK_44
	IDX_OOB_45:
		exit 1
	IDX_OK_44:
		mov rbx, 4
		store 2, pieces, rbx, 8
		cmp 5, 0
		jl IDX_OOB_47
		cmp 5, 111
		jg IDX_OOB_47
		jmp IDX_OK_46
	IDX_OOB_47:
		exit 1
	IDX_OK_46:
		mov rbx, 5
		store 6, pieces, rbx, 8
		cmp 6, 0
		jl IDX_OOB_49
		cmp 6, 111
		jg IDX_OOB_49
		jmp IDX_OK_48
	IDX_OOB_49:
		exit 1
	IDX_OK_48:
		mov rbx, 6
		store 10, pieces, rbx, 8
		cmp 7, 0
		jl IDX_OOB_51
		cmp 7, 111
		jg IDX_OOB_51
		jmp IDX_OK_50
	IDX_OOB_51:
		exit 1
	IDX_OK_50:
		mov rbx, 7
		store 14, pieces, rbx, 8
		cmp 8, 0
		jl IDX_OOB_53
		cmp 8, 111
		jg IDX_OOB_53
		jmp IDX_OK_52
	IDX_OOB_53:
		exit 1
	IDX_OK_52:
		mov rbx, 8
		store 8, pieces, rbx, 8
		cmp 9, 0
		jl IDX_OOB_55
		cmp 9, 111
		jg IDX_OOB_55
		jmp IDX_OK_54
	IDX_OOB_55:
		exit 1
	IDX_OK_54:
		mov rbx, 9
		store 9, pieces, rbx, 8
		cmp 10, 0
		jl IDX_OOB_57
		cmp 10, 111
		jg IDX_OOB_57
		jmp IDX_OK_56
	IDX_OOB_57:
		exit 1
	IDX_OK_56:
		mov rbx, 10
		store 10, pieces, rbx, 8
		cmp 11, 0
		jl IDX_OOB_59
		cmp 11, 111
		jg IDX_OOB_59
		jmp IDX_OK_58
	IDX_OOB_59:
		exit 1
	IDX_OK_58:
		mov rbx, 11
		store 11, pieces, rbx, 8
		cmp 12, 0
		jl IDX_OOB_61
		cmp 12, 111
		jg IDX_OOB_61
		jmp IDX_OK_60
	IDX_OOB_61:
		exit 1
	IDX_OK_60:
		mov rbx, 12
		store 1, pieces, rbx, 8
		cmp 13, 0
		jl IDX_OOB_63
		cmp 13, 111
		jg IDX_OOB_63
		jmp IDX_OK_62
	IDX_OOB_63:
		exit 1
	IDX_OK_62:
		mov rbx, 13
		store 5, pieces, rbx, 8
		cmp 14, 0
		jl IDX_OOB_65
		cmp 14, 111
		jg IDX_OOB_65
		jmp IDX_OK_64
	IDX_OOB_65:
		exit 1
	IDX_OK_64:
		mov rbx, 14
		store 9, pieces, rbx, 8
		cmp 15, 0
		jl IDX_OOB_67
		cmp 15, 111
		jg IDX_OOB_67
		jmp IDX_OK_66
	IDX_OOB_67:
		exit 1
	IDX_OK_66:
		mov rbx, 15
		store 13, pieces, rbx, 8
		cmp 16, 0
		jl IDX_OOB_69
		cmp 16, 111
		jg IDX_OOB_69
		jmp IDX_OK_68
	IDX_OOB_69:
		exit 1
	IDX_OK_68:
		mov rbx, 16
		store 1, pieces, rbx, 8
		cmp 17, 0
		jl IDX_OOB_71
		cmp 17, 111
		jg IDX_OOB_71
		jmp IDX_OK_70
	IDX_OOB_71:
		exit 1
	IDX_OK_70:
		mov rbx, 17
		store 5, pieces, rbx, 8
		cmp 18, 0
		jl IDX_OOB_73
		cmp 18, 111
		jg IDX_OOB_73
		jmp IDX_OK_72
	IDX_OOB_73:
		exit 1
	IDX_OK_72:
		mov rbx, 18
		store 6, pieces, rbx, 8
		cmp 19, 0
		jl IDX_OOB_75
		cmp 19, 111
		jg IDX_OOB_75
		jmp IDX_OK_74
	IDX_OOB_75:
		exit 1
	IDX_OK_74:
		mov rbx, 19
		store 7, pieces, rbx, 8
		cmp 20, 0
		jl IDX_OOB_77
		cmp 20, 111
		jg IDX_OOB_77
		jmp IDX_OK_76
	IDX_OOB_77:
		exit 1
	IDX_OK_76:
		mov rbx, 20
		store 2, pieces, rbx, 8
		cmp 21, 0
		jl IDX_OOB_79
		cmp 21, 111
		jg IDX_OOB_79
		jmp IDX_OK_78
	IDX_OOB_79:
		exit 1
	IDX_OK_78:
		mov rbx, 21
		store 3, pieces, rbx, 8
		cmp 22, 0
		jl IDX_OOB_81
		cmp 22, 111
		jg IDX_OOB_81
		jmp IDX_OK_80
	IDX_OOB_81:
		exit 1
	IDX_OK_80:
		mov rbx, 22
		store 6, pieces, rbx, 8
		cmp 23, 0
		jl IDX_OOB_83
		cmp 23, 111
		jg IDX_OOB_83
		jmp IDX_OK_82
	IDX_OOB_83:
		exit 1
	IDX_OK_82:
		mov rbx, 23
		store 10, pieces, rbx, 8
		cmp 24, 0
		jl IDX_OOB_85
		cmp 24, 111
		jg IDX_OOB_85
		jmp IDX_OK_84
	IDX_OOB_85:
		exit 1
	IDX_OK_84:
		mov rbx, 24
		store 5, pieces, rbx, 8
		cmp 25, 0
		jl IDX_OOB_87
		cmp 25, 111
		jg IDX_OOB_87
		jmp IDX_OK_86
	IDX_OOB_87:
		exit 1
	IDX_OK_86:
		mov rbx, 25
		store 6, pieces, rbx, 8
		cmp 26, 0
		jl IDX_OOB_89
		cmp 26, 111
		jg IDX_OOB_89
		jmp IDX_OK_88
	IDX_OOB_89:
		exit 1
	IDX_OK_88:
		mov rbx, 26
		store 7, pieces, rbx, 8
		cmp 27, 0
		jl IDX_OOB_91
		cmp 27, 111
		jg IDX_OOB_91
		jmp IDX_OK_90
	IDX_OOB_91:
		exit 1
	IDX_OK_90:
		mov rbx, 27
		store 11, pieces, rbx, 8
		cmp 28, 0
		jl IDX_OOB_93
		cmp 28, 111
		jg IDX_OOB_93
		jmp IDX_OK_92
	IDX_OOB_93:
		exit 1
	IDX_OK_92:
		mov rbx, 28
		store 2, pieces, rbx, 8
		cmp 29, 0
		jl IDX_OOB_95
		cmp 29, 111
		jg IDX_OOB_95
		jmp IDX_OK_94
	IDX_OOB_95:
		exit 1
	IDX_OK_94:
		mov rbx, 29
		store 6, pieces, rbx, 8
		cmp 30, 0
		jl IDX_OOB_97
		cmp 30, 111
		jg IDX_OOB_97
		jmp IDX_OK_96
	IDX_OOB_97:
		exit 1
	IDX_OK_96:
		mov rbx, 30
		store 10, pieces, rbx, 8
		cmp 31, 0
		jl IDX_OOB_99
		cmp 31, 111
		jg IDX_OOB_99
		jmp IDX_OK_98
	IDX_OOB_99:
		exit 1
	IDX_OK_98:
		mov rbx, 31
		store 9, pieces, rbx, 8
		cmp 32, 0
		jl IDX_OOB_101
		cmp 32, 111
		jg IDX_OOB_101
		jmp IDX_OK_100
	IDX_OOB_101:
		exit 1
	IDX_OK_100:
		mov rbx, 32
		store 3, pieces, rbx, 8
		cmp 33, 0
		jl IDX_OOB_103
		cmp 33, 111
		jg IDX_OOB_103
		jmp IDX_OK_102
	IDX_OOB_103:
		exit 1
	IDX_OK_102:
		mov rbx, 33
		store 5, pieces, rbx, 8
		cmp 34, 0
		jl IDX_OOB_105
		cmp 34, 111
		jg IDX_OOB_105
		jmp IDX_OK_104
	IDX_OOB_105:
		exit 1
	IDX_OK_104:
		mov rbx, 34
		store 6, pieces, rbx, 8
		cmp 35, 0
		jl IDX_OOB_107
		cmp 35, 111
		jg IDX_OOB_107
		jmp IDX_OK_106
	IDX_OOB_107:
		exit 1
	IDX_OK_106:
		mov rbx, 35
		store 7, pieces, rbx, 8
		cmp 36, 0
		jl IDX_OOB_109
		cmp 36, 111
		jg IDX_OOB_109
		jmp IDX_OK_108
	IDX_OOB_109:
		exit 1
	IDX_OK_108:
		mov rbx, 36
		store 2, pieces, rbx, 8
		cmp 37, 0
		jl IDX_OOB_111
		cmp 37, 111
		jg IDX_OOB_111
		jmp IDX_OK_110
	IDX_OOB_111:
		exit 1
	IDX_OK_110:
		mov rbx, 37
		store 6, pieces, rbx, 8
		cmp 38, 0
		jl IDX_OOB_113
		cmp 38, 111
		jg IDX_OOB_113
		jmp IDX_OK_112
	IDX_OOB_113:
		exit 1
	IDX_OK_112:
		mov rbx, 38
		store 10, pieces, rbx, 8
		cmp 39, 0
		jl IDX_OOB_115
		cmp 39, 111
		jg IDX_OOB_115
		jmp IDX_OK_114
	IDX_OOB_115:
		exit 1
	IDX_OK_114:
		mov rbx, 39
		store 11, pieces, rbx, 8
		cmp 40, 0
		jl IDX_OOB_117
		cmp 40, 111
		jg IDX_OOB_117
		jmp IDX_OK_116
	IDX_OOB_117:
		exit 1
	IDX_OK_116:
		mov rbx, 40
		store 5, pieces, rbx, 8
		cmp 41, 0
		jl IDX_OOB_119
		cmp 41, 111
		jg IDX_OOB_119
		jmp IDX_OK_118
	IDX_OOB_119:
		exit 1
	IDX_OK_118:
		mov rbx, 41
		store 6, pieces, rbx, 8
		cmp 42, 0
		jl IDX_OOB_121
		cmp 42, 111
		jg IDX_OOB_121
		jmp IDX_OK_120
	IDX_OOB_121:
		exit 1
	IDX_OK_120:
		mov rbx, 42
		store 7, pieces, rbx, 8
		cmp 43, 0
		jl IDX_OOB_123
		cmp 43, 111
		jg IDX_OOB_123
		jmp IDX_OK_122
	IDX_OOB_123:
		exit 1
	IDX_OK_122:
		mov rbx, 43
		store 9, pieces, rbx, 8
		cmp 44, 0
		jl IDX_OOB_125
		cmp 44, 111
		jg IDX_OOB_125
		jmp IDX_OK_124
	IDX_OOB_125:
		exit 1
	IDX_OK_124:
		mov rbx, 44
		store 1, pieces, rbx, 8
		cmp 45, 0
		jl IDX_OOB_127
		cmp 45, 111
		jg IDX_OOB_127
		jmp IDX_OK_126
	IDX_OOB_127:
		exit 1
	IDX_OK_126:
		mov rbx, 45
		store 2, pieces, rbx, 8
		cmp 46, 0
		jl IDX_OOB_129
		cmp 46, 111
		jg IDX_OOB_129
		jmp IDX_OK_128
	IDX_OOB_129:
		exit 1
	IDX_OK_128:
		mov rbx, 46
		store 6, pieces, rbx, 8
		cmp 47, 0
		jl IDX_OOB_131
		cmp 47, 111
		jg IDX_OOB_131
		jmp IDX_OK_130
	IDX_OOB_131:
		exit 1
	IDX_OK_130:
		mov rbx, 47
		store 10, pieces, rbx, 8
		cmp 48, 0
		jl IDX_OOB_133
		cmp 48, 111
		jg IDX_OOB_133
		jmp IDX_OK_132
	IDX_OOB_133:
		exit 1
	IDX_OK_132:
		mov rbx, 48
		store 5, pieces, rbx, 8
		cmp 49, 0
		jl IDX_OOB_135
		cmp 49, 111
		jg IDX_OOB_135
		jmp IDX_OK_134
	IDX_OOB_135:
		exit 1
	IDX_OK_134:
		mov rbx, 49
		store 6, pieces, rbx, 8
		cmp 50, 0
		jl IDX_OOB_137
		cmp 50, 111
		jg IDX_OOB_137
		jmp IDX_OK_136
	IDX_OOB_137:
		exit 1
	IDX_OK_136:
		mov rbx, 50
		store 9, pieces, rbx, 8
		cmp 51, 0
		jl IDX_OOB_139
		cmp 51, 111
		jg IDX_OOB_139
		jmp IDX_OK_138
	IDX_OOB_139:
		exit 1
	IDX_OK_138:
		mov rbx, 51
		store 10, pieces, rbx, 8
		cmp 52, 0
		jl IDX_OOB_141
		cmp 52, 111
		jg IDX_OOB_141
		jmp IDX_OK_140
	IDX_OOB_141:
		exit 1
	IDX_OK_140:
		mov rbx, 52
		store 5, pieces, rbx, 8
		cmp 53, 0
		jl IDX_OOB_143
		cmp 53, 111
		jg IDX_OOB_143
		jmp IDX_OK_142
	IDX_OOB_143:
		exit 1
	IDX_OK_142:
		mov rbx, 53
		store 6, pieces, rbx, 8
		cmp 54, 0
		jl IDX_OOB_145
		cmp 54, 111
		jg IDX_OOB_145
		jmp IDX_OK_144
	IDX_OOB_145:
		exit 1
	IDX_OK_144:
		mov rbx, 54
		store 9, pieces, rbx, 8
		cmp 55, 0
		jl IDX_OOB_147
		cmp 55, 111
		jg IDX_OOB_147
		jmp IDX_OK_146
	IDX_OOB_147:
		exit 1
	IDX_OK_146:
		mov rbx, 55
		store 10, pieces, rbx, 8
		cmp 56, 0
		jl IDX_OOB_149
		cmp 56, 111
		jg IDX_OOB_149
		jmp IDX_OK_148
	IDX_OOB_149:
		exit 1
	IDX_OK_148:
		mov rbx, 56
		store 5, pieces, rbx, 8
		cmp 57, 0
		jl IDX_OOB_151
		cmp 57, 111
		jg IDX_OOB_151
		jmp IDX_OK_150
	IDX_OOB_151:
		exit 1
	IDX_OK_150:
		mov rbx, 57
		store 6, pieces, rbx, 8
		cmp 58, 0
		jl IDX_OOB_153
		cmp 58, 111
		jg IDX_OOB_153
		jmp IDX_OK_152
	IDX_OOB_153:
		exit 1
	IDX_OK_152:
		mov rbx, 58
		store 9, pieces, rbx, 8
		cmp 59, 0
		jl IDX_OOB_155
		cmp 59, 111
		jg IDX_OOB_155
		jmp IDX_OK_154
	IDX_OOB_155:
		exit 1
	IDX_OK_154:
		mov rbx, 59
		store 10, pieces, rbx, 8
		cmp 60, 0
		jl IDX_OOB_157
		cmp 60, 111
		jg IDX_OOB_157
		jmp IDX_OK_156
	IDX_OOB_157:
		exit 1
	IDX_OK_156:
		mov rbx, 60
		store 5, pieces, rbx, 8
		cmp 61, 0
		jl IDX_OOB_159
		cmp 61, 111
		jg IDX_OOB_159
		jmp IDX_OK_158
	IDX_OOB_159:
		exit 1
	IDX_OK_158:
		mov rbx, 61
		store 6, pieces, rbx, 8
		cmp 62, 0
		jl IDX_OOB_161
		cmp 62, 111
		jg IDX_OOB_161
		jmp IDX_OK_160
	IDX_OOB_161:
		exit 1
	IDX_OK_160:
		mov rbx, 62
		store 9, pieces, rbx, 8
		cmp 63, 0
		jl IDX_OOB_163
		cmp 63, 111
		jg IDX_OOB_163
		jmp IDX_OK_162
	IDX_OOB_163:
		exit 1
	IDX_OK_162:
		mov rbx, 63
		store 10, pieces, rbx, 8
		cmp 64, 0
		jl IDX_OOB_165
		cmp 64, 111
		jg IDX_OOB_165
		jmp IDX_OK_164
	IDX_OOB_165:
		exit 1
	IDX_OK_164:
		mov rbx, 64
		store 2, pieces, rbx, 8
		cmp 65, 0
		jl IDX_OOB_167
		cmp 65, 111
		jg IDX_OOB_167
		jmp IDX_OK_166
	IDX_OOB_167:
		exit 1
	IDX_OK_166:
		mov rbx, 65
		store 3, pieces, rbx, 8
		cmp 66, 0
		jl IDX_OOB_169
		cmp 66, 111
		jg IDX_OOB_169
		jmp IDX_OK_168
	IDX_OOB_169:
		exit 1
	IDX_OK_168:
		mov rbx, 66
		store 5, pieces, rbx, 8
		cmp 67, 0
		jl IDX_OOB_171
		cmp 67, 111
		jg IDX_OOB_171
		jmp IDX_OK_170
	IDX_OOB_171:
		exit 1
	IDX_OK_170:
		mov rbx, 67
		store 6, pieces, rbx, 8
		cmp 68, 0
		jl IDX_OOB_173
		cmp 68, 111
		jg IDX_OOB_173
		jmp IDX_OK_172
	IDX_OOB_173:
		exit 1
	IDX_OK_172:
		mov rbx, 68
		store 1, pieces, rbx, 8
		cmp 69, 0
		jl IDX_OOB_175
		cmp 69, 111
		jg IDX_OOB_175
		jmp IDX_OK_174
	IDX_OOB_175:
		exit 1
	IDX_OK_174:
		mov rbx, 69
		store 5, pieces, rbx, 8
		cmp 70, 0
		jl IDX_OOB_177
		cmp 70, 111
		jg IDX_OOB_177
		jmp IDX_OK_176
	IDX_OOB_177:
		exit 1
	IDX_OK_176:
		mov rbx, 70
		store 6, pieces, rbx, 8
		cmp 71, 0
		jl IDX_OOB_179
		cmp 71, 111
		jg IDX_OOB_179
		jmp IDX_OK_178
	IDX_OOB_179:
		exit 1
	IDX_OK_178:
		mov rbx, 71
		store 10, pieces, rbx, 8
		cmp 72, 0
		jl IDX_OOB_181
		cmp 72, 111
		jg IDX_OOB_181
		jmp IDX_OK_180
	IDX_OOB_181:
		exit 1
	IDX_OK_180:
		mov rbx, 72
		store 6, pieces, rbx, 8
		cmp 73, 0
		jl IDX_OOB_183
		cmp 73, 111
		jg IDX_OOB_183
		jmp IDX_OK_182
	IDX_OOB_183:
		exit 1
	IDX_OK_182:
		mov rbx, 73
		store 7, pieces, rbx, 8
		cmp 74, 0
		jl IDX_OOB_185
		cmp 74, 111
		jg IDX_OOB_185
		jmp IDX_OK_184
	IDX_OOB_185:
		exit 1
	IDX_OK_184:
		mov rbx, 74
		store 9, pieces, rbx, 8
		cmp 75, 0
		jl IDX_OOB_187
		cmp 75, 111
		jg IDX_OOB_187
		jmp IDX_OK_186
	IDX_OOB_187:
		exit 1
	IDX_OK_186:
		mov rbx, 75
		store 10, pieces, rbx, 8
		cmp 76, 0
		jl IDX_OOB_189
		cmp 76, 111
		jg IDX_OOB_189
		jmp IDX_OK_188
	IDX_OOB_189:
		exit 1
	IDX_OK_188:
		mov rbx, 76
		store 2, pieces, rbx, 8
		cmp 77, 0
		jl IDX_OOB_191
		cmp 77, 111
		jg IDX_OOB_191
		jmp IDX_OK_190
	IDX_OOB_191:
		exit 1
	IDX_OK_190:
		mov rbx, 77
		store 6, pieces, rbx, 8
		cmp 78, 0
		jl IDX_OOB_193
		cmp 78, 111
		jg IDX_OOB_193
		jmp IDX_OK_192
	IDX_OOB_193:
		exit 1
	IDX_OK_192:
		mov rbx, 78
		store 7, pieces, rbx, 8
		cmp 79, 0
		jl IDX_OOB_195
		cmp 79, 111
		jg IDX_OOB_195
		jmp IDX_OK_194
	IDX_OOB_195:
		exit 1
	IDX_OK_194:
		mov rbx, 79
		store 11, pieces, rbx, 8
		cmp 80, 0
		jl IDX_OOB_197
		cmp 80, 111
		jg IDX_OOB_197
		jmp IDX_OK_196
	IDX_OOB_197:
		exit 1
	IDX_OK_196:
		mov rbx, 80
		store 2, pieces, rbx, 8
		cmp 81, 0
		jl IDX_OOB_199
		cmp 81, 111
		jg IDX_OOB_199
		jmp IDX_OK_198
	IDX_OOB_199:
		exit 1
	IDX_OK_198:
		mov rbx, 81
		store 5, pieces, rbx, 8
		cmp 82, 0
		jl IDX_OOB_201
		cmp 82, 111
		jg IDX_OOB_201
		jmp IDX_OK_200
	IDX_OOB_201:
		exit 1
	IDX_OK_200:
		mov rbx, 82
		store 6, pieces, rbx, 8
		cmp 83, 0
		jl IDX_OOB_203
		cmp 83, 111
		jg IDX_OOB_203
		jmp IDX_OK_202
	IDX_OOB_203:
		exit 1
	IDX_OK_202:
		mov rbx, 83
		store 7, pieces, rbx, 8
		cmp 84, 0
		jl IDX_OOB_205
		cmp 84, 111
		jg IDX_OOB_205
		jmp IDX_OK_204
	IDX_OOB_205:
		exit 1
	IDX_OK_204:
		mov rbx, 84
		store 2, pieces, rbx, 8
		cmp 85, 0
		jl IDX_OOB_207
		cmp 85, 111
		jg IDX_OOB_207
		jmp IDX_OK_206
	IDX_OOB_207:
		exit 1
	IDX_OK_206:
		mov rbx, 85
		store 6, pieces, rbx, 8
		cmp 86, 0
		jl IDX_OOB_209
		cmp 86, 111
		jg IDX_OOB_209
		jmp IDX_OK_208
	IDX_OOB_209:
		exit 1
	IDX_OK_208:
		mov rbx, 86
		store 7, pieces, rbx, 8
		cmp 87, 0
		jl IDX_OOB_211
		cmp 87, 111
		jg IDX_OOB_211
		jmp IDX_OK_210
	IDX_OOB_211:
		exit 1
	IDX_OK_210:
		mov rbx, 87
		store 10, pieces, rbx, 8
		cmp 88, 0
		jl IDX_OOB_213
		cmp 88, 111
		jg IDX_OOB_213
		jmp IDX_OK_212
	IDX_OOB_213:
		exit 1
	IDX_OK_212:
		mov rbx, 88
		store 5, pieces, rbx, 8
		cmp 89, 0
		jl IDX_OOB_215
		cmp 89, 111
		jg IDX_OOB_215
		jmp IDX_OK_214
	IDX_OOB_215:
		exit 1
	IDX_OK_214:
		mov rbx, 89
		store 6, pieces, rbx, 8
		cmp 90, 0
		jl IDX_OOB_217
		cmp 90, 111
		jg IDX_OOB_217
		jmp IDX_OK_216
	IDX_OOB_217:
		exit 1
	IDX_OK_216:
		mov rbx, 90
		store 7, pieces, rbx, 8
		cmp 91, 0
		jl IDX_OOB_219
		cmp 91, 111
		jg IDX_OOB_219
		jmp IDX_OK_218
	IDX_OOB_219:
		exit 1
	IDX_OK_218:
		mov rbx, 91
		store 10, pieces, rbx, 8
		cmp 92, 0
		jl IDX_OOB_221
		cmp 92, 111
		jg IDX_OOB_221
		jmp IDX_OK_220
	IDX_OOB_221:
		exit 1
	IDX_OK_220:
		mov rbx, 92
		store 2, pieces, rbx, 8
		cmp 93, 0
		jl IDX_OOB_223
		cmp 93, 111
		jg IDX_OOB_223
		jmp IDX_OK_222
	IDX_OOB_223:
		exit 1
	IDX_OK_222:
		mov rbx, 93
		store 5, pieces, rbx, 8
		cmp 94, 0
		jl IDX_OOB_225
		cmp 94, 111
		jg IDX_OOB_225
		jmp IDX_OK_224
	IDX_OOB_225:
		exit 1
	IDX_OK_224:
		mov rbx, 94
		store 6, pieces, rbx, 8
		cmp 95, 0
		jl IDX_OOB_227
		cmp 95, 111
		jg IDX_OOB_227
		jmp IDX_OK_226
	IDX_OOB_227:
		exit 1
	IDX_OK_226:
		mov rbx, 95
		store 10, pieces, rbx, 8
		cmp 96, 0
		jl IDX_OOB_229
		cmp 96, 111
		jg IDX_OOB_229
		jmp IDX_OK_228
	IDX_OOB_229:
		exit 1
	IDX_OK_228:
		mov rbx, 96
		store 1, pieces, rbx, 8
		cmp 97, 0
		jl IDX_OOB_231
		cmp 97, 111
		jg IDX_OOB_231
		jmp IDX_OK_230
	IDX_OOB_231:
		exit 1
	IDX_OK_230:
		mov rbx, 97
		store 2, pieces, rbx, 8
		cmp 98, 0
		jl IDX_OOB_233
		cmp 98, 111
		jg IDX_OOB_233
		jmp IDX_OK_232
	IDX_OOB_233:
		exit 1
	IDX_OK_232:
		mov rbx, 98
		store 6, pieces, rbx, 8
		cmp 99, 0
		jl IDX_OOB_235
		cmp 99, 111
		jg IDX_OOB_235
		jmp IDX_OK_234
	IDX_OOB_235:
		exit 1
	IDX_OK_234:
		mov rbx, 99
		store 7, pieces, rbx, 8
		cmp 100, 0
		jl IDX_OOB_237
		cmp 100, 111
		jg IDX_OOB_237
		jmp IDX_OK_236
	IDX_OOB_237:
		exit 1
	IDX_OK_236:
		mov rbx, 100
		store 3, pieces, rbx, 8
		cmp 101, 0
		jl IDX_OOB_239
		cmp 101, 111
		jg IDX_OOB_239
		jmp IDX_OK_238
	IDX_OOB_239:
		exit 1
	IDX_OK_238:
		mov rbx, 101
		store 6, pieces, rbx, 8
		cmp 102, 0
		jl IDX_OOB_241
		cmp 102, 111
		jg IDX_OOB_241
		jmp IDX_OK_240
	IDX_OOB_241:
		exit 1
	IDX_OK_240:
		mov rbx, 102
		store 7, pieces, rbx, 8
		cmp 103, 0
		jl IDX_OOB_243
		cmp 103, 111
		jg IDX_OOB_243
		jmp IDX_OK_242
	IDX_OOB_243:
		exit 1
	IDX_OK_242:
		mov rbx, 103
		store 10, pieces, rbx, 8
		cmp 104, 0
		jl IDX_OOB_245
		cmp 104, 111
		jg IDX_OOB_245
		jmp IDX_OK_244
	IDX_OOB_245:
		exit 1
	IDX_OK_244:
		mov rbx, 104
		store 5, pieces, rbx, 8
		cmp 105, 0
		jl IDX_OOB_247
		cmp 105, 111
		jg IDX_OOB_247
		jmp IDX_OK_246
	IDX_OOB_247:
		exit 1
	IDX_OK_246:
		mov rbx, 105
		store 6, pieces, rbx, 8
		cmp 106, 0
		jl IDX_OOB_249
		cmp 106, 111
		jg IDX_OOB_249
		jmp IDX_OK_248
	IDX_OOB_249:
		exit 1
	IDX_OK_248:
		mov rbx, 106
		store 10, pieces, rbx, 8
		cmp 107, 0
		jl IDX_OOB_251
		cmp 107, 111
		jg IDX_OOB_251
		jmp IDX_OK_250
	IDX_OOB_251:
		exit 1
	IDX_OK_250:
		mov rbx, 107
		store 11, pieces, rbx, 8
		cmp 108, 0
		jl IDX_OOB_253
		cmp 108, 111
		jg IDX_OOB_253
		jmp IDX_OK_252
	IDX_OOB_253:
		exit 1
	IDX_OK_252:
		mov rbx, 108
		store 2, pieces, rbx, 8
		cmp 109, 0
		jl IDX_OOB_255
		cmp 109, 111
		jg IDX_OOB_255
		jmp IDX_OK_254
	IDX_OOB_255:
		exit 1
	IDX_OK_254:
		mov rbx, 109
		store 5, pieces, rbx, 8
		cmp 110, 0
		jl IDX_OOB_257
		cmp 110, 111
		jg IDX_OOB_257
		jmp IDX_OK_256
	IDX_OOB_257:
		exit 1
	IDX_OK_256:
		mov rbx, 110
		store 6, pieces, rbx, 8
		cmp 111, 0
		jl IDX_OOB_259
		cmp 111, 111
		jg IDX_OOB_259
		jmp IDX_OK_258
	IDX_OOB_259:
		exit 1
	IDX_OK_258:
		mov rbx, 111
		store 9, pieces, rbx, 8
	PROC_END_InitPieces:
		ret
	function PROC_AllocClearBoard:
		mov AllocClearBoard_ci, 0
	FOR_260:
		cmp AllocClearBoard_ci, 199
		jg ENDFOR_261
		cmp AllocClearBoard_ci, 0
		jl IDX_OOB_264
		cmp AllocClearBoard_ci, 199
		jg IDX_OOB_264
		jmp IDX_OK_263
	IDX_OOB_264:
		exit 1
	IDX_OK_263:
		mov rbx, AllocClearBoard_ci
		store 0, board, rbx, 8
	FOR_CONTINUE_262:
		add AllocClearBoard_ci, 1
		jmp FOR_260
	ENDFOR_261:
	PROC_END_AllocClearBoard:
		ret
	function PROC_LockPiece:
		mov LockPiece_li, 0
	FOR_265:
		cmp LockPiece_li, 3
		jg ENDFOR_266
		mov rbx, piece_id
		mul rbx, 16
		mov rcx, rotation
		mul rcx, 4
		mov LockPiece_lidx, rbx
		add LockPiece_lidx, rcx
		add LockPiece_lidx, LockPiece_li
		mov rdi, LockPiece_lidx
		load r8, pieces, rdi, 8
		mov LockPiece_lv, r8
		mov LockPiece_lpy, LockPiece_lv
		div LockPiece_lpy, 4
		mov r9, LockPiece_lv
		mod r9, 4
		mov LockPiece_lpx, r9
		mov r9, piece_x
		add r9, LockPiece_lpx
		mov LockPiece_lx, r9
		mov r9, piece_y
		add r9, LockPiece_lpy
		mov LockPiece_ly, r9
		cmp LockPiece_ly, 0
		jl ELSE_268
		cmp LockPiece_ly, 20
		jge ELSE_268
		mov r9, LockPiece_ly
		mul r9, 10
		add r9, LockPiece_lx
		mov LockPiece_lbi, r9
		mov r9, piece_id
		add r9, 1
		cmp LockPiece_lbi, 0
		jl IDX_OOB_277
		cmp LockPiece_lbi, 199
		jg IDX_OOB_277
		jmp IDX_OK_276
	IDX_OOB_277:
		exit 1
	IDX_OK_276:
		mov r10, LockPiece_lbi
		store r9, board, r10, 8
	ELSE_268:
	FOR_CONTINUE_267:
		add LockPiece_li, 1
		jmp FOR_265
	ENDFOR_266:
	PROC_END_LockPiece:
		ret
	function PROC_ClearLines:
		mov ClearLines_cy, 19
	WHILE_278:
		cmp ClearLines_cy, 0
		jl ENDWHILE_279
		mov ClearLines_is_full, 1
		mov ClearLines_cx, 0
	FOR_282:
		cmp ClearLines_cx, 9
		jg ENDFOR_283
		mov ClearLines_cidx2, ClearLines_cy
		mul ClearLines_cidx2, 10
		add ClearLines_cidx2, ClearLines_cx
		mov rsi, ClearLines_cidx2
		load rdi, board, rsi, 8
		cmp rdi, 0
		jne ELSE_285
		mov ClearLines_is_full, 0
	ELSE_285:
	FOR_CONTINUE_284:
		add ClearLines_cx, 1
		jmp FOR_282
	ENDFOR_283:
		cmp ClearLines_is_full, 1
		jne ELSE_289
		mov r9, score
		add r9, 10
		mov score, r9
		mov ClearLines_cj, ClearLines_cy
	WHILE_293:
		cmp ClearLines_cj, 0
		jle ENDWHILE_294
		mov ClearLines_cx, 0
	FOR_297:
		cmp ClearLines_cx, 9
		jg ENDFOR_298
		mov r9, ClearLines_cj
		sub r9, 1
		mul r9, 10
		add r9, ClearLines_cx
		mov ClearLines_cbi2, r9
		load r10, board, r9, 8
		mov ClearLines_cv2, r10
		mov r9, ClearLines_cj
		mul r9, 10
		add r9, ClearLines_cx
		mov ClearLines_cbi, r9
		cmp ClearLines_cbi, 0
		jl IDX_OOB_301
		cmp ClearLines_cbi, 199
		jg IDX_OOB_301
		jmp IDX_OK_300
	IDX_OOB_301:
		exit 1
	IDX_OK_300:
		mov r9, ClearLines_cbi
		store ClearLines_cv2, board, r9, 8
	FOR_CONTINUE_299:
		add ClearLines_cx, 1
		jmp FOR_297
	ENDFOR_298:
		mov r9, ClearLines_cj
		sub r9, 1
		mov ClearLines_cj, r9
		jmp WHILE_293
	ENDWHILE_294:
		mov ClearLines_cx, 0
	FOR_302:
		cmp ClearLines_cx, 9
		jg ENDFOR_303
		cmp ClearLines_cx, 0
		jl IDX_OOB_306
		cmp ClearLines_cx, 199
		jg IDX_OOB_306
		jmp IDX_OK_305
	IDX_OOB_306:
		exit 1
	IDX_OK_305:
		mov r9, ClearLines_cx
		store 0, board, r9, 8
	FOR_CONTINUE_304:
		add ClearLines_cx, 1
		jmp FOR_302
	ENDFOR_303:
		add ClearLines_cy, 1
	ELSE_289:
		sub ClearLines_cy, 1
		jmp WHILE_278
	ENDWHILE_279:
	PROC_END_ClearLines:
		ret
	function PROC_DrawCell:
		mov DrawCell_dx, rbx
		mov DrawCell_dy, rcx
		mov DrawCell_color, rdx
		mov DrawCell_dm, DrawCell_color
		mul DrawCell_dm, 35
		mov DrawCell_dr, DrawCell_dm
		mov DrawCell_dg, 255
		sub DrawCell_dg, DrawCell_dm
		mov DrawCell_db, 128
		add DrawCell_db, DrawCell_dm
		mov DrawCell_dtx, DrawCell_dx
		mul DrawCell_dtx, 40
		mov DrawCell_dty, DrawCell_dy
		mul DrawCell_dty, 40
		mov DrawCell_dts, 39
		mov r8, 255
		invoke set_draw_color, renderer_id, DrawCell_dr, DrawCell_dg, DrawCell_db, r8
		invoke fill_rect, renderer_id, DrawCell_dtx, DrawCell_dty, DrawCell_dts, DrawCell_dts
	PROC_END_DrawCell:
		ret
	function PROC_DrawEmpty:
		mov DrawEmpty_dx, rbx
		mov DrawEmpty_dy, rcx
		mov DrawEmpty_dtx, DrawEmpty_dx
		mul DrawEmpty_dtx, 40
		mov DrawEmpty_dty, DrawEmpty_dy
		mul DrawEmpty_dty, 40
		mov DrawEmpty_dts, 39
		mov rdx, 30
		mov rsi, 30
		mov rdi, 30
		mov r8, 255
		invoke set_draw_color, renderer_id, rdx, rsi, rdi, r8
		invoke fill_rect, renderer_id, DrawEmpty_dtx, DrawEmpty_dty, DrawEmpty_dts, DrawEmpty_dts
	PROC_END_DrawEmpty:
		ret
	function PROC_SpawnPiece:
		invoke rand
		return rbx
		mov rcx, rbx
		mod rcx, 7
		mov piece_id, rcx
		cmp piece_id, 0
		jge ELSE_307
		mov rsi, piece_id
		add rsi, 7
		mov piece_id, rsi
	ELSE_307:
		mov rotation, 0
		mov piece_x, 3
		mov piece_y, 0
		push rbx
		push rcx
		push rdx
		push rsi
		mov rbx, piece_x
		mov rcx, piece_y
		call FUNC_CheckCollision
		pop rsi
		pop rdx
		pop rcx
		pop rbx
		mov rdi, rax
		mov col_result, rdi
		cmp col_result, 1
		jne ELSE_311
		mov game_over, 1
	ELSE_311:
	PROC_END_SpawnPiece:
		ret
	function PROC_MoveDown:
		mov rbx, piece_y
		add rbx, 1
		mov rcx, rbx
		push rbx
		mov rbx, piece_x
		call FUNC_CheckCollision
		pop rbx
		mov rdx, rax
		mov col_result, rdx
		cmp col_result, 0
		je ELSE_315
		push rbx
		push rcx
		push rdx
		push rsi
		call PROC_LockPiece
		pop rsi
		pop rdx
		pop rcx
		pop rbx
		push rbx
		push rcx
		push rdx
		push rsi
		call PROC_ClearLines
		pop rsi
		pop rdx
		pop rcx
		pop rbx
		push rbx
		push rcx
		push rdx
		push rsi
		call PROC_SpawnPiece
		pop rsi
		pop rdx
		pop rcx
		pop rbx
		jmp ENDIF_316
	ELSE_315:
		add piece_y, 1
	ENDIF_316:
	PROC_END_MoveDown:
		ret
	function PROC_Render:
		cmp show_start, 1
		jne ELSE_319
		mov rcx, 0
		mov rdx, 0
		mov rsi, 0
		mov rdi, 255
		invoke set_draw_color, renderer_id, rcx, rdx, rsi, rdi
		invoke clear, renderer_id
		mov rcx, 0
		mov rdx, 0
		mov rsi, 400
		mov rdi, 800
		mov r8, 0
		mov r9, 0
		mov r10, 400
		mov r11, 800
		invoke render_texture, renderer_id, start_texture, rcx, rdx, rsi, rdi, r8, r9, r10, r11
		invoke present, renderer_id
		jmp PROC_END_Render
	ELSE_319:
		mov rcx, 0
		mov rdx, 0
		mov rsi, 0
		mov rdi, 255
		invoke set_draw_color, renderer_id, rcx, rdx, rsi, rdi
		invoke clear, renderer_id
		mov rcx, 0
		mov rdx, 0
		mov rsi, 400
		mov rdi, 800
		invoke fill_rect, renderer_id, rcx, rdx, rsi, rdi
		invoke inttostr, score
		return _tmpptr0
		invoke strlen, str_5
		return rcx
		invoke strlen, _tmpptr0
		return rdx
		mov rsi, rcx
		add rsi, rdx
		add rsi, 1
		alloc _tmpptr1, 1, rsi
		invoke strncpy, _tmpptr1, str_5, rcx
		invoke strncat, _tmpptr1, _tmpptr0, rdx
		mov score_text, _tmpptr1
		free _tmpptr0
		mov Render_ry, 0
	FOR_323:
		cmp Render_ry, 19
		jg ENDFOR_324
		mov Render_rx, 0
	FOR_326:
		cmp Render_rx, 9
		jg ENDFOR_327
		mov rcx, Render_ry
		mul rcx, 10
		mov rdx, rcx
		add rdx, Render_rx
		mov Render_ridx, rdx
		mov rsi, Render_ridx
		load rdi, board, rsi, 8
		mov Render_rv, rdi
		cmp Render_rv, 0
		jne ELSE_329
		push rbx
		push rcx
		push rdx
		push rsi
		push rdi
		mov rbx, Render_rx
		mov rcx, Render_ry
		push Render_ri
		push Render_ridx
		push Render_rv
		push Render_rpx
		push Render_rpy
		push Render_rx
		push Render_ry
		call PROC_DrawEmpty
		pop Render_ry
		pop Render_rx
		pop Render_rpy
		pop Render_rpx
		pop Render_rv
		pop Render_ridx
		pop Render_ri
		pop rdi
		pop rsi
		pop rdx
		pop rcx
		pop rbx
		jmp ENDIF_330
	ELSE_329:
		push rbx
		push rcx
		push rdx
		push rsi
		push rdi
		mov rbx, Render_rx
		mov rcx, Render_ry
		mov rdx, Render_rv
		push Render_ri
		push Render_ridx
		push Render_rv
		push Render_rpx
		push Render_rpy
		push Render_rx
		push Render_ry
		call PROC_DrawCell
		pop Render_ry
		pop Render_rx
		pop Render_rpy
		pop Render_rpx
		pop Render_rv
		pop Render_ridx
		pop Render_ri
		pop rdi
		pop rsi
		pop rdx
		pop rcx
		pop rbx
	ENDIF_330:
	FOR_CONTINUE_328:
		add Render_rx, 1
		jmp FOR_326
	ENDFOR_327:
	FOR_CONTINUE_325:
		add Render_ry, 1
		jmp FOR_323
	ENDFOR_324:
		mov Render_ri, 0
	FOR_333:
		cmp Render_ri, 3
		jg ENDFOR_334
		mov r8, piece_id
		mul r8, 16
		mov r9, rotation
		mul r9, 4
		mov r10, r8
		add r10, r9
		add r10, Render_ri
		mov Render_ridx, r10
		mov r9, Render_ridx
		load r10, pieces, r9, 8
		mov Render_rv, r10
		mov r9, Render_rv
		div r9, 4
		mov Render_rpy, r9
		mov r9, Render_rv
		mod r9, 4
		mov Render_rpx, r9
		mov r9, piece_x
		add r9, Render_rpx
		mov Render_rx, r9
		mov r9, piece_y
		add r9, Render_rpy
		mov Render_ry, r9
		cmp Render_ry, 0
		jl ELSE_336
		mov r9, piece_id
		add r9, 1
		push rbx
		push rcx
		push rdx
		push rsi
		push rdi
		push r8
		mov rbx, Render_rx
		mov rcx, Render_ry
		mov rdx, r9
		push Render_ri
		push Render_ridx
		push Render_rv
		push Render_rpx
		push Render_rpy
		push Render_rx
		push Render_ry
		call PROC_DrawCell
		pop Render_ry
		pop Render_rx
		pop Render_rpy
		pop Render_rpx
		pop Render_rv
		pop Render_ridx
		pop Render_ri
		pop r8
		pop rdi
		pop rsi
		pop rdx
		pop rcx
		pop rbx
	ELSE_336:
	FOR_CONTINUE_335:
		add Render_ri, 1
		jmp FOR_333
	ENDFOR_334:
		mov r9, 15
		mov r10, 15
		mov r11, 255
		mov r12, 255
		mov r13, 255
		mov r14, 255
		invoke draw_text, renderer_id, font_id, score_text, r9, r10, r11, r12, r13, r14
		invoke present, renderer_id
	PROC_END_Render:
		ret
	function PROC_GameReset:
		mov score, 0
		mov game_over, 0
		mov piece_x, 3
		mov piece_y, 0
		mov rotation, 0
		invoke get_ticks
		return rbx
		mov last_drop, rbx
		push rbx
		call PROC_AllocClearBoard
		pop rbx
		push rbx
		call PROC_SpawnPiece
		pop rbx
	PROC_END_GameReset:
		ret
	function PROC_HandleInput:
		invoke poll_event
		return rbx
		mov ev, rbx
	WHILE_340:
		cmp ev, 0
		je ENDWHILE_341
		invoke get_event_type
		return rdx
		mov HandleInput_ev_type, rdx
		cmp HandleInput_ev_type, 256
		jne ELSE_344
		mov running, 0
		jmp PROC_END_HandleInput
	ELSE_344:
		cmp HandleInput_ev_type, 768
		jne ELSE_348
		invoke get_key_code
		return r8
		mov HandleInput_kc, r8
		cmp HandleInput_kc, 27
		jne ELSE_352
		cmp show_start, 1
		jne ELSE_356
		mov running, 0
		jmp PROC_END_HandleInput
		jmp ENDIF_357
	ELSE_356:
		mov show_start, 1
	ENDIF_357:
		jmp ENDIF_353
	ELSE_352:
		cmp show_start, 1
		jne ELSE_360
		cmp HandleInput_kc, 13
		jne ELSE_364
		mov show_start, 0
	ELSE_364:
		jmp ENDIF_361
	ELSE_360:
		cmp HandleInput_kc, 1073741904
		jne ELSE_368
		mov r9, piece_x
		sub r9, 1
		push rbx
		push rcx
		push rdx
		push rsi
		push rdi
		push r8
		mov rbx, r9
		mov rcx, piece_y
		push HandleInput_ev_type
		push HandleInput_kc
		push HandleInput_old_rot
		call FUNC_CheckCollision
		pop HandleInput_old_rot
		pop HandleInput_kc
		pop HandleInput_ev_type
		pop r8
		pop rdi
		pop rsi
		pop rdx
		pop rcx
		pop rbx
		mov r10, rax
		mov col_result, r10
		cmp col_result, 0
		jne ELSE_372
		mov r9, piece_x
		sub r9, 1
		mov piece_x, r9
	ELSE_372:
		jmp ENDIF_369
	ELSE_368:
		cmp HandleInput_kc, 1073741903
		jne ELSE_376
		mov r9, piece_x
		add r9, 1
		push rbx
		push rcx
		push rdx
		push rsi
		push rdi
		push r8
		mov rbx, r9
		mov rcx, piece_y
		push HandleInput_ev_type
		push HandleInput_kc
		push HandleInput_old_rot
		call FUNC_CheckCollision
		pop HandleInput_old_rot
		pop HandleInput_kc
		pop HandleInput_ev_type
		pop r8
		pop rdi
		pop rsi
		pop rdx
		pop rcx
		pop rbx
		mov r10, rax
		mov col_result, r10
		cmp col_result, 0
		jne ELSE_380
		mov r9, piece_x
		add r9, 1
		mov piece_x, r9
	ELSE_380:
		jmp ENDIF_377
	ELSE_376:
		cmp HandleInput_kc, 1073741905
		jne ELSE_384
		push rbx
		push rcx
		push rdx
		push rsi
		push rdi
		push r8
		push HandleInput_ev_type
		push HandleInput_kc
		push HandleInput_old_rot
		call PROC_MoveDown
		pop HandleInput_old_rot
		pop HandleInput_kc
		pop HandleInput_ev_type
		pop r8
		pop rdi
		pop rsi
		pop rdx
		pop rcx
		pop rbx
		jmp ENDIF_385
	ELSE_384:
		cmp HandleInput_kc, 1073741906
		jne ELSE_388
		mov HandleInput_old_rot, rotation
		mov r9, rotation
		add r9, 1
		mod r9, 4
		mov rotation, r9
		push rbx
		push rcx
		push rdx
		push rsi
		push rdi
		push r8
		mov rbx, piece_x
		mov rcx, piece_y
		push HandleInput_ev_type
		push HandleInput_kc
		push HandleInput_old_rot
		call FUNC_CheckCollision
		pop HandleInput_old_rot
		pop HandleInput_kc
		pop HandleInput_ev_type
		pop r8
		pop rdi
		pop rsi
		pop rdx
		pop rcx
		pop rbx
		mov r9, rax
		mov col_result, r9
		cmp col_result, 0
		je ELSE_392
		mov rotation, HandleInput_old_rot
	ELSE_392:
	ELSE_388:
	ENDIF_385:
	ENDIF_377:
	ENDIF_369:
	ENDIF_361:
	ENDIF_353:
	ELSE_348:
		invoke poll_event
		return r9
		mov ev, r9
		jmp WHILE_340
	ENDWHILE_341:
	PROC_END_HandleInput:
		ret
	function FUNC_CheckCollision:
		mov CheckCollision_cx, rbx
		mov CheckCollision_cy, rcx
		mov CheckCollision_ci, 0
	FOR_396:
		cmp CheckCollision_ci, 3
		jg ENDFOR_397
		mov rbx, piece_id
		mul rbx, 16
		mov rcx, rotation
		mul rcx, 4
		mov CheckCollision_cidx, rbx
		add CheckCollision_cidx, rcx
		add CheckCollision_cidx, CheckCollision_ci
		mov rdi, CheckCollision_cidx
		load r8, pieces, rdi, 8
		mov CheckCollision_cv, r8
		mov CheckCollision_cpy, CheckCollision_cv
		div CheckCollision_cpy, 4
		mov r9, CheckCollision_cv
		mod r9, 4
		mov CheckCollision_cpx, r9
		mov r9, CheckCollision_cx
		add r9, CheckCollision_cpx
		mov CheckCollision_ccx, r9
		mov r9, CheckCollision_cy
		add r9, CheckCollision_cpy
		mov CheckCollision_ccy, r9
		cmp CheckCollision_ccx, 0
		jge ELSE_399
		mov __funcret_CheckCollision, 1
		jmp FUNC_END_CheckCollision
	ELSE_399:
		cmp CheckCollision_ccx, 10
		jl ELSE_403
		mov __funcret_CheckCollision, 1
		jmp FUNC_END_CheckCollision
	ELSE_403:
		cmp CheckCollision_ccy, 20
		jl ELSE_407
		mov __funcret_CheckCollision, 1
		jmp FUNC_END_CheckCollision
	ELSE_407:
		cmp CheckCollision_ccy, 0
		jl ELSE_411
		mov r9, CheckCollision_ccy
		mul r9, 10
		add r9, CheckCollision_ccx
		mov CheckCollision_bidx, r9
		load r10, board, r9, 8
		cmp r10, 0
		je ELSE_415
		mov __funcret_CheckCollision, 1
		jmp FUNC_END_CheckCollision
	ELSE_415:
	ELSE_411:
	FOR_CONTINUE_398:
		add CheckCollision_ci, 1
		jmp FOR_396
	ENDFOR_397:
		mov __funcret_CheckCollision, 0
	FUNC_END_CheckCollision:
		mov rax, __funcret_CheckCollision
		ret
	}
}