program KnightsTour {
	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
		int r15 = 0
		int _ir0 = 0
		ptr _tmpptr0 = null
		ptr _tmpptr1 = null
		string str_0 = "Knights Tour"
		string str_1 = "data/font.ttf"
		string str_2 = "Could not open font.."
		string str_3 = "data/knight.bmp"
		string str_4 = "Warning: could not load knight.bmp"
		string str_5 = "data/logo.bmp"
		string str_6 = "Warning: could not load logo.bmp"
		string str_7 = "Press any key to start"
		string str_8 = "Knights Tour - Tap Space, Press Return to Reset"
		string str_9 = "Moves: "
		string str_10 = "-[ Tour Complete ]- Press Return to Reset"
		string fmt_str = "%s "
		string newline = "\n"
		int window_id = 0
		int renderer_id = 0
		int font_id = 0
		int knight_tex = 0
		int logo_tex = 0
		int running = 0
		int game_state = 0
		ptr board = null
		ptr seq_row = null
		ptr seq_col = null
		int seq_count = 0
		int knight_row = 0
		int knight_col = 0
		int moves = 0
		int tour_over = 0
		ptr horizontal = null
		ptr vertical = null
		ptr sort_deg = null
		ptr sort_row = null
		ptr sort_col = null
		int intro_start = 0
		int ev_type = 0
		int kc = 0
		int frame_start = 0
		int frame_time = 0
		int delay_time = 0
		int cur_time = 0
		int mouse_btn = 0
		int space_was_down = 0
		int space_now = 0
		int tour_ready = 0
		int last_move_time = 0
		int clear_board_i = 0
		int set_board_row = 0
		int set_board_col = 0
		int set_board_val = 0
		int sort_moves_n = 0
		int sort_moves_i = 0
		int sort_moves_j = 0
		int sort_moves_min_idx = 0
		int sort_moves_tmp = 0
		int reset_tour_dummy = 0
		int next_move_nr = 0
		int next_move_nc = 0
		int draw_board_i = 0
		int draw_board_j = 0
		int draw_board_rx = 0
		int draw_board_ry = 0
		int draw_knight_dx = 0
		int draw_knight_dy = 0
		int get_board_row = 0
		int get_board_col = 0
		int __funcret_get_board = 0
		int is_valid_move_row = 0
		int is_valid_move_col = 0
		int __funcret_is_valid_move = 0
		int get_degree_row = 0
		int get_degree_col = 0
		int get_degree_i = 0
		int get_degree_nr = 0
		int get_degree_nc = 0
		int get_degree_count = 0
		int __funcret_get_degree = 0
		int solve_tour_pos_row = 0
		int solve_tour_pos_col = 0
		int solve_tour_move_count = 0
		int solve_tour_i = 0
		int solve_tour_nr = 0
		int solve_tour_nc = 0
		int solve_tour_n = 0
		int __funcret_solve_tour = 0
	}
	section code {
	start:
		alloc board, 8, 64
		alloc seq_row, 8, 64
		alloc seq_col, 8, 64
		alloc horizontal, 8, 8
		alloc vertical, 8, 8
		alloc sort_deg, 8, 8
		alloc sort_row, 8, 8
		alloc sort_col, 8, 8
		invoke init
		mov rcx, 100
		mov rdx, 100
		mov rsi, 960
		mov rdi, 720
		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 init_text
		mov rsi, 14
		invoke load_font, str_1, rsi
		return rcx
		mov font_id, rcx
		mov rsi, 0
		sub rsi, 1
		cmp font_id, rsi
		jne ELSE_0
		print fmt_str, str_2
		print newline
	ELSE_0:
		mov r9, 255
		mov r10, 255
		mov r11, 255
		invoke load_texture_color_key_rgb, renderer_id, str_3, r9, r10, r11
		return r8
		mov knight_tex, r8
		mov r9, 0
		sub r9, 1
		cmp knight_tex, r9
		jne ELSE_4
		print fmt_str, str_4
		print newline
	ELSE_4:
		invoke load_texture, renderer_id, str_5
		return r9
		mov logo_tex, r9
		mov r9, 0
		sub r9, 1
		cmp logo_tex, r9
		jne ELSE_8
		print fmt_str, str_6
		print newline
	ELSE_8:
		invoke seed_random
		push rbx
		push rcx
		push rdx
		push rsi
		push rdi
		push r8
		call PROC_init_move_offsets
		pop r8
		pop rdi
		pop rsi
		pop rdx
		pop rcx
		pop rbx
		mov game_state, 0
		invoke get_ticks
		return r9
		mov intro_start, r9
		mov running, 1
		mov space_was_down, 0
		mov tour_ready, 0
		mov last_move_time, 0
	WHILE_12:
		cmp running, 0
		je ENDWHILE_13
		invoke get_ticks
		return r9
		mov frame_start, r9
	WHILE_14:
		invoke poll_event
		return r9
		cmp r9, 0
		je ENDWHILE_15
		invoke get_event_type
		return r9
		mov ev_type, r9
		cmp ev_type, 256
		jne ELSE_18
		mov running, 0
	ELSE_18:
		cmp ev_type, 768
		jne ELSE_22
		invoke get_key_code
		return r9
		mov kc, r9
		cmp kc, 27
		jne ELSE_26
		mov running, 0
		jmp ENDIF_27
	ELSE_26:
		cmp game_state, 0
		jne ELSE_30
		mov game_state, 1
		cmp tour_ready, 0
		jne ELSE_34
		push rbx
		push rcx
		push rdx
		push rsi
		push rdi
		push r8
		call PROC_reset_tour
		pop r8
		pop rdi
		pop rsi
		pop rdx
		pop rcx
		pop rbx
		mov tour_ready, 1
	ELSE_34:
		jmp ENDIF_31
	ELSE_30:
		cmp kc, 13
		jne ELSE_38
		push rbx
		push rcx
		push rdx
		push rsi
		push rdi
		push r8
		call PROC_reset_tour
		pop r8
		pop rdi
		pop rsi
		pop rdx
		pop rcx
		pop rbx
	ELSE_38:
	ENDIF_31:
	ENDIF_27:
	ELSE_22:
		cmp ev_type, 1025
		jne ELSE_42
		cmp game_state, 0
		jne ELSE_46
		mov game_state, 1
		cmp tour_ready, 0
		jne ELSE_50
		push rbx
		push rcx
		push rdx
		push rsi
		push rdi
		push r8
		call PROC_reset_tour
		pop r8
		pop rdi
		pop rsi
		pop rdx
		pop rcx
		pop rbx
		mov tour_ready, 1
	ELSE_50:
		jmp ENDIF_47
	ELSE_46:
		invoke get_mouse_button
		return r9
		mov mouse_btn, r9
		cmp mouse_btn, 1
		jne ELSE_54
		push rbx
		push rcx
		push rdx
		push rsi
		push rdi
		push r8
		call PROC_next_move
		pop r8
		pop rdi
		pop rsi
		pop rdx
		pop rcx
		pop rbx
		jmp ENDIF_55
	ELSE_54:
		cmp mouse_btn, 3
		jne ELSE_58
		push rbx
		push rcx
		push rdx
		push rsi
		push rdi
		push r8
		call PROC_reset_tour
		pop r8
		pop rdi
		pop rsi
		pop rdx
		pop rcx
		pop rbx
	ELSE_58:
	ENDIF_55:
	ENDIF_47:
	ELSE_42:
		jmp WHILE_14
	ENDWHILE_15:
		cmp game_state, 1
		jne ELSE_62
		mov r10, 44
		invoke is_key_pressed, r10
		return r9
		mov space_now, r9
		cmp space_now, 0
		je ELSE_66
		invoke get_ticks
		return r9
		mov cur_time, r9
		cmp space_was_down, 0
		je OR_ONE_76
		mov r10, cur_time
		sub r10, last_move_time
		cmp r10, 150
		jl ELSE_70
	OR_ONE_76:
		push rbx
		push rcx
		push rdx
		push rsi
		push rdi
		push r8
		call PROC_next_move
		pop r8
		pop rdi
		pop rsi
		pop rdx
		pop rcx
		pop rbx
		mov last_move_time, cur_time
	ELSE_70:
	ELSE_66:
		mov space_was_down, space_now
	ELSE_62:
		mov r9, 0
		mov r10, 0
		mov r11, 0
		mov r12, 255
		invoke set_draw_color, renderer_id, r9, r10, r11, r12
		invoke clear, renderer_id
		cmp game_state, 0
		jne ELSE_78
		mov r9, 0
		sub r9, 1
		cmp logo_tex, r9
		je ELSE_82
		mov r9, 0
		sub r9, 1
		mov r10, 0
		sub r10, 1
		mov r11, 0
		sub r11, 1
		mov r12, 0
		sub r12, 1
		mov r13, 0
		mov r14, 0
		mov r15, 960
		mov _ir0, 720
		invoke render_texture, renderer_id, logo_tex, r9, r10, r11, r12, r13, r14, r15, _ir0
	ELSE_82:
		mov r9, 380
		mov r10, 680
		mov r11, 255
		mov r12, 255
		mov r13, 255
		mov r14, 255
		invoke draw_text, renderer_id, font_id, str_7, r9, r10, r11, r12, r13, r14
		invoke get_ticks
		return r9
		mov cur_time, r9
		sub r9, intro_start
		cmp r9, 2000
		jl ELSE_86
		mov game_state, 1
		cmp tour_ready, 0
		jne ELSE_90
		push rbx
		push rcx
		push rdx
		push rsi
		push rdi
		push r8
		call PROC_reset_tour
		pop r8
		pop rdi
		pop rsi
		pop rdx
		pop rcx
		pop rbx
		mov tour_ready, 1
	ELSE_90:
	ELSE_86:
		jmp ENDIF_79
	ELSE_78:
		push rbx
		push rcx
		push rdx
		push rsi
		push rdi
		push r8
		call PROC_draw_board
		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_draw_knight
		pop r8
		pop rdi
		pop rsi
		pop rdx
		pop rcx
		pop rbx
		cmp moves, 65
		jge ELSE_94
		mov r9, 15
		mov r10, 5
		mov r11, 255
		mov r12, 255
		mov r13, 255
		mov r14, 255
		invoke draw_text, renderer_id, font_id, str_8, r9, r10, r11, r12, r13, r14
		invoke inttostr, moves
		return _tmpptr0
		invoke strlen, str_9
		return r9
		invoke strlen, _tmpptr0
		return r10
		mov r11, r9
		add r11, r10
		add r11, 1
		alloc _tmpptr1, 1, r11
		invoke strncpy, _tmpptr1, str_9, r9
		invoke strncat, _tmpptr1, _tmpptr0, r10
		mov r9, 400
		mov r10, 5
		mov r11, 255
		mov r12, 255
		mov r13, 255
		mov r14, 255
		invoke draw_text, renderer_id, font_id, _tmpptr1, r9, r10, r11, r12, r13, r14
		free _tmpptr1
		free _tmpptr0
		jmp ENDIF_95
	ELSE_94:
		mov r9, 15
		mov r10, 5
		mov r11, 255
		mov r12, 255
		mov r13, 255
		mov r14, 255
		invoke draw_text, renderer_id, font_id, str_10, r9, r10, r11, r12, r13, r14
	ENDIF_95:
	ENDIF_79:
		invoke present, renderer_id
		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_98
		invoke delay, delay_time
	ELSE_98:
		jmp WHILE_12
	ENDWHILE_13:
		mov r9, 0
		sub r9, 1
		cmp knight_tex, r9
		je ELSE_102
		invoke destroy_texture, knight_tex
	ELSE_102:
		mov r9, 0
		sub r9, 1
		cmp logo_tex, r9
		je ELSE_106
		invoke destroy_texture, logo_tex
	ELSE_106:
		invoke quit_text
		invoke destroy_renderer, renderer_id
		invoke destroy_window, window_id
		invoke quit
		free board
		free seq_row
		free seq_col
		free horizontal
		free vertical
		free sort_deg
		free sort_row
		free sort_col
		done
	function PROC_init_move_offsets:
		cmp 0, 0
		jl IDX_OOB_111
		cmp 0, 7
		jg IDX_OOB_111
		jmp IDX_OK_110
	IDX_OOB_111:
		exit 1
	IDX_OK_110:
		mov rbx, 0
		store 2, horizontal, rbx, 8
		mov rbx, 0
		sub rbx, 1
		cmp 0, 0
		jl IDX_OOB_113
		cmp 0, 7
		jg IDX_OOB_113
		jmp IDX_OK_112
	IDX_OOB_113:
		exit 1
	IDX_OK_112:
		mov rcx, 0
		store rbx, vertical, rcx, 8
		cmp 1, 0
		jl IDX_OOB_115
		cmp 1, 7
		jg IDX_OOB_115
		jmp IDX_OK_114
	IDX_OOB_115:
		exit 1
	IDX_OK_114:
		mov rcx, 1
		store 1, horizontal, rcx, 8
		mov rcx, 0
		sub rcx, 2
		cmp 1, 0
		jl IDX_OOB_117
		cmp 1, 7
		jg IDX_OOB_117
		jmp IDX_OK_116
	IDX_OOB_117:
		exit 1
	IDX_OK_116:
		mov rdx, 1
		store rcx, vertical, rdx, 8
		mov rdx, 0
		sub rdx, 1
		cmp 2, 0
		jl IDX_OOB_119
		cmp 2, 7
		jg IDX_OOB_119
		jmp IDX_OK_118
	IDX_OOB_119:
		exit 1
	IDX_OK_118:
		mov rsi, 2
		store rdx, horizontal, rsi, 8
		mov rsi, 0
		sub rsi, 2
		cmp 2, 0
		jl IDX_OOB_121
		cmp 2, 7
		jg IDX_OOB_121
		jmp IDX_OK_120
	IDX_OOB_121:
		exit 1
	IDX_OK_120:
		mov rdi, 2
		store rsi, vertical, rdi, 8
		mov rdi, 0
		sub rdi, 2
		cmp 3, 0
		jl IDX_OOB_123
		cmp 3, 7
		jg IDX_OOB_123
		jmp IDX_OK_122
	IDX_OOB_123:
		exit 1
	IDX_OK_122:
		mov r8, 3
		store rdi, horizontal, r8, 8
		mov r8, 0
		sub r8, 1
		cmp 3, 0
		jl IDX_OOB_125
		cmp 3, 7
		jg IDX_OOB_125
		jmp IDX_OK_124
	IDX_OOB_125:
		exit 1
	IDX_OK_124:
		mov r9, 3
		store r8, vertical, r9, 8
		mov r9, 0
		sub r9, 2
		cmp 4, 0
		jl IDX_OOB_127
		cmp 4, 7
		jg IDX_OOB_127
		jmp IDX_OK_126
	IDX_OOB_127:
		exit 1
	IDX_OK_126:
		mov r10, 4
		store r9, horizontal, r10, 8
		cmp 4, 0
		jl IDX_OOB_129
		cmp 4, 7
		jg IDX_OOB_129
		jmp IDX_OK_128
	IDX_OOB_129:
		exit 1
	IDX_OK_128:
		mov r9, 4
		store 1, vertical, r9, 8
		mov r9, 0
		sub r9, 1
		cmp 5, 0
		jl IDX_OOB_131
		cmp 5, 7
		jg IDX_OOB_131
		jmp IDX_OK_130
	IDX_OOB_131:
		exit 1
	IDX_OK_130:
		mov r10, 5
		store r9, horizontal, r10, 8
		cmp 5, 0
		jl IDX_OOB_133
		cmp 5, 7
		jg IDX_OOB_133
		jmp IDX_OK_132
	IDX_OOB_133:
		exit 1
	IDX_OK_132:
		mov r9, 5
		store 2, vertical, r9, 8
		cmp 6, 0
		jl IDX_OOB_135
		cmp 6, 7
		jg IDX_OOB_135
		jmp IDX_OK_134
	IDX_OOB_135:
		exit 1
	IDX_OK_134:
		mov r9, 6
		store 1, horizontal, r9, 8
		cmp 6, 0
		jl IDX_OOB_137
		cmp 6, 7
		jg IDX_OOB_137
		jmp IDX_OK_136
	IDX_OOB_137:
		exit 1
	IDX_OK_136:
		mov r9, 6
		store 2, vertical, r9, 8
		cmp 7, 0
		jl IDX_OOB_139
		cmp 7, 7
		jg IDX_OOB_139
		jmp IDX_OK_138
	IDX_OOB_139:
		exit 1
	IDX_OK_138:
		mov r9, 7
		store 2, horizontal, r9, 8
		cmp 7, 0
		jl IDX_OOB_141
		cmp 7, 7
		jg IDX_OOB_141
		jmp IDX_OK_140
	IDX_OOB_141:
		exit 1
	IDX_OK_140:
		mov r9, 7
		store 1, vertical, r9, 8
	PROC_END_init_move_offsets:
		ret
	function PROC_clear_board:
		mov clear_board_i, 0
	FOR_142:
		cmp clear_board_i, 63
		jg ENDFOR_143
		cmp clear_board_i, 0
		jl IDX_OOB_146
		cmp clear_board_i, 63
		jg IDX_OOB_146
		jmp IDX_OK_145
	IDX_OOB_146:
		exit 1
	IDX_OK_145:
		mov rbx, clear_board_i
		store 0, board, rbx, 8
	FOR_CONTINUE_144:
		add clear_board_i, 1
		jmp FOR_142
	ENDFOR_143:
	PROC_END_clear_board:
		ret
	function PROC_set_board:
		mov set_board_row, rbx
		mov set_board_col, rcx
		mov set_board_val, rdx
		mov rbx, set_board_row
		mul rbx, 8
		mov rcx, rbx
		add rcx, set_board_col
		cmp rcx, 0
		jl IDX_OOB_148
		cmp rcx, 63
		jg IDX_OOB_148
		jmp IDX_OK_147
	IDX_OOB_148:
		exit 1
	IDX_OK_147:
		mov rdx, rcx
		store set_board_val, board, rdx, 8
	PROC_END_set_board:
		ret
	function PROC_sort_moves:
		mov sort_moves_n, rbx
		mov sort_moves_i, 0
	WHILE_149:
		mov rbx, sort_moves_n
		sub rbx, 1
		cmp sort_moves_i, rbx
		jge ENDWHILE_150
		mov sort_moves_min_idx, sort_moves_i
		mov sort_moves_j, sort_moves_i
		add sort_moves_j, 1
	WHILE_153:
		cmp sort_moves_j, sort_moves_n
		jge ENDWHILE_154
		mov rdi, sort_moves_j
		load r8, sort_deg, rdi, 8
		mov rdi, sort_moves_min_idx
		load r9, sort_deg, rdi, 8
		cmp r8, r9
		jge ELSE_157
		mov sort_moves_min_idx, sort_moves_j
	ELSE_157:
		mov r9, sort_moves_j
		add r9, 1
		mov sort_moves_j, r9
		jmp WHILE_153
	ENDWHILE_154:
		cmp sort_moves_min_idx, sort_moves_i
		je ELSE_161
		mov r9, sort_moves_i
		load r10, sort_deg, r9, 8
		mov sort_moves_tmp, r10
		mov r9, sort_moves_min_idx
		load r10, sort_deg, r9, 8
		cmp sort_moves_i, 0
		jl IDX_OOB_166
		cmp sort_moves_i, 7
		jg IDX_OOB_166
		jmp IDX_OK_165
	IDX_OOB_166:
		exit 1
	IDX_OK_165:
		mov r9, sort_moves_i
		store r10, sort_deg, r9, 8
		cmp sort_moves_min_idx, 0
		jl IDX_OOB_168
		cmp sort_moves_min_idx, 7
		jg IDX_OOB_168
		jmp IDX_OK_167
	IDX_OOB_168:
		exit 1
	IDX_OK_167:
		mov r9, sort_moves_min_idx
		store sort_moves_tmp, sort_deg, r9, 8
		mov r9, sort_moves_i
		load r10, sort_row, r9, 8
		mov sort_moves_tmp, r10
		mov r9, sort_moves_min_idx
		load r10, sort_row, r9, 8
		cmp sort_moves_i, 0
		jl IDX_OOB_170
		cmp sort_moves_i, 7
		jg IDX_OOB_170
		jmp IDX_OK_169
	IDX_OOB_170:
		exit 1
	IDX_OK_169:
		mov r9, sort_moves_i
		store r10, sort_row, r9, 8
		cmp sort_moves_min_idx, 0
		jl IDX_OOB_172
		cmp sort_moves_min_idx, 7
		jg IDX_OOB_172
		jmp IDX_OK_171
	IDX_OOB_172:
		exit 1
	IDX_OK_171:
		mov r9, sort_moves_min_idx
		store sort_moves_tmp, sort_row, r9, 8
		mov r9, sort_moves_i
		load r10, sort_col, r9, 8
		mov sort_moves_tmp, r10
		mov r9, sort_moves_min_idx
		load r10, sort_col, r9, 8
		cmp sort_moves_i, 0
		jl IDX_OOB_174
		cmp sort_moves_i, 7
		jg IDX_OOB_174
		jmp IDX_OK_173
	IDX_OOB_174:
		exit 1
	IDX_OK_173:
		mov r9, sort_moves_i
		store r10, sort_col, r9, 8
		cmp sort_moves_min_idx, 0
		jl IDX_OOB_176
		cmp sort_moves_min_idx, 7
		jg IDX_OOB_176
		jmp IDX_OK_175
	IDX_OOB_176:
		exit 1
	IDX_OK_175:
		mov r9, sort_moves_min_idx
		store sort_moves_tmp, sort_col, r9, 8
	ELSE_161:
		add sort_moves_i, 1
		jmp WHILE_149
	ENDWHILE_150:
	PROC_END_sort_moves:
		ret
	function PROC_reset_tour:
		push reset_tour_dummy
		call PROC_clear_board
		pop reset_tour_dummy
		invoke rand
		return rbx
		mov rcx, rbx
		mod rcx, 8
		mov knight_row, rcx
		invoke rand
		return rdx
		mov rsi, rdx
		mod rsi, 8
		mov knight_col, rsi
		push rbx
		push rcx
		push rdx
		push rsi
		mov rbx, knight_row
		mov rcx, knight_col
		mov rdx, 1
		push reset_tour_dummy
		call PROC_set_board
		pop reset_tour_dummy
		pop rsi
		pop rdx
		pop rcx
		pop rbx
		mov seq_count, 0
		cmp 0, 0
		jl IDX_OOB_178
		cmp 0, 63
		jg IDX_OOB_178
		jmp IDX_OK_177
	IDX_OOB_178:
		exit 1
	IDX_OK_177:
		mov rdi, 0
		store knight_row, seq_row, rdi, 8
		cmp 0, 0
		jl IDX_OOB_180
		cmp 0, 63
		jg IDX_OOB_180
		jmp IDX_OK_179
	IDX_OOB_180:
		exit 1
	IDX_OK_179:
		mov rdi, 0
		store knight_col, seq_col, rdi, 8
		mov seq_count, 1
		push rbx
		push rcx
		push rdx
		push rsi
		mov rbx, knight_row
		mov rcx, knight_col
		mov rdx, 2
		push reset_tour_dummy
		call FUNC_solve_tour
		pop reset_tour_dummy
		pop rsi
		pop rdx
		pop rcx
		pop rbx
		mov rdi, rax
		mov reset_tour_dummy, rdi
		mov moves, 1
		mov tour_over, 0
	PROC_END_reset_tour:
		ret
	function PROC_next_move:
		cmp moves, 64
		jl ELSE_181
		jmp PROC_END_next_move
	ELSE_181:
		cmp seq_count, 0
		jg ELSE_185
		jmp PROC_END_next_move
	ELSE_185:
		cmp tour_over, 0
		je ELSE_189
		jmp PROC_END_next_move
	ELSE_189:
		mov rdx, moves
		load rsi, seq_row, rdx, 8
		mov next_move_nr, rsi
		mov rdx, moves
		load rdi, seq_col, rdx, 8
		mov next_move_nc, rdi
		mov rdx, 0
		sub rdx, 1
		push rbx
		push rcx
		push rsi
		push rdi
		mov rbx, knight_row
		mov rcx, knight_col
		push next_move_nr
		push next_move_nc
		call PROC_set_board
		pop next_move_nc
		pop next_move_nr
		pop rdi
		pop rsi
		pop rcx
		pop rbx
		mov knight_row, next_move_nr
		mov knight_col, next_move_nc
		mov r8, moves
		add r8, 1
		mov moves, r8
		push rbx
		push rcx
		push rdx
		push rsi
		push rdi
		push r8
		mov rbx, knight_row
		mov rcx, knight_col
		mov rdx, moves
		push next_move_nr
		push next_move_nc
		call PROC_set_board
		pop next_move_nc
		pop next_move_nr
		pop r8
		pop rdi
		pop rsi
		pop rdx
		pop rcx
		pop rbx
		cmp moves, 64
		jl ELSE_191
		mov tour_over, 1
	ELSE_191:
	PROC_END_next_move:
		ret
	function PROC_draw_board:
		mov draw_board_i, 0
	FOR_195:
		cmp draw_board_i, 7
		jg ENDFOR_196
		mov draw_board_j, 0
	FOR_198:
		cmp draw_board_j, 7
		jg ENDFOR_199
		mov rbx, draw_board_j
		mul rbx, 85
		mov rcx, 140
		add rcx, rbx
		mov draw_board_rx, rcx
		mov rdx, draw_board_i
		mul rdx, 85
		mov rsi, 40
		add rsi, rdx
		mov draw_board_ry, rsi
		push rbx
		push rcx
		push rdx
		push rsi
		mov rbx, draw_board_i
		mov rcx, draw_board_j
		push draw_board_i
		push draw_board_j
		push draw_board_rx
		push draw_board_ry
		call FUNC_get_board
		pop draw_board_ry
		pop draw_board_rx
		pop draw_board_j
		pop draw_board_i
		pop rsi
		pop rdx
		pop rcx
		pop rbx
		mov rdi, rax
		mov r8, 0
		sub r8, 1
		cmp rdi, r8
		jne ELSE_201
		mov r9, 0
		mov r10, 0
		mov r11, 0
		mov r12, 255
		invoke set_draw_color, renderer_id, r9, r10, r11, r12
		jmp ENDIF_202
	ELSE_201:
		mov r9, draw_board_i
		add r9, draw_board_j
		mod r9, 2
		cmp r9, 0
		jne ELSE_205
		mov r9, 255
		mov r10, 255
		mov r11, 255
		mov r12, 255
		invoke set_draw_color, renderer_id, r9, r10, r11, r12
		jmp ENDIF_206
	ELSE_205:
		mov r9, 255
		mov r10, 0
		mov r11, 0
		mov r12, 255
		invoke set_draw_color, renderer_id, r9, r10, r11, r12
	ENDIF_206:
	ENDIF_202:
		mov r9, 80
		mov r10, 80
		invoke fill_rect, renderer_id, draw_board_rx, draw_board_ry, r9, r10
	FOR_CONTINUE_200:
		add draw_board_j, 1
		jmp FOR_198
	ENDFOR_199:
	FOR_CONTINUE_197:
		add draw_board_i, 1
		jmp FOR_195
	ENDFOR_196:
	PROC_END_draw_board:
		ret
	function PROC_draw_knight:
		mov rbx, knight_col
		mul rbx, 85
		mov draw_knight_dx, 140
		add draw_knight_dx, rbx
		add draw_knight_dx, 10
		mov rsi, knight_row
		mul rsi, 85
		mov draw_knight_dy, 40
		add draw_knight_dy, rsi
		add draw_knight_dy, 10
		mov r9, 0
		sub r9, 1
		mov r10, 0
		sub r10, 1
		mov r11, 0
		sub r11, 1
		mov r12, 0
		sub r12, 1
		mov r13, 60
		mov r14, 60
		invoke render_texture, renderer_id, knight_tex, r9, r10, r11, r12, draw_knight_dx, draw_knight_dy, r13, r14
	PROC_END_draw_knight:
		ret
	function FUNC_get_board:
		mov get_board_row, rbx
		mov get_board_col, rcx
		mov rbx, get_board_row
		mul rbx, 8
		mov rcx, rbx
		add rcx, get_board_col
		mov rdx, rcx
		load rsi, board, rdx, 8
		mov __funcret_get_board, rsi
	FUNC_END_get_board:
		mov rax, __funcret_get_board
		ret
	function FUNC_is_valid_move:
		mov is_valid_move_row, rbx
		mov is_valid_move_col, rcx
		cmp is_valid_move_row, 0
		jl OR_ONE_215
		cmp is_valid_move_row, 8
		jl ELSE_209
	OR_ONE_215:
		mov __funcret_is_valid_move, 0
		jmp FUNC_END_is_valid_move
	ELSE_209:
		cmp is_valid_move_col, 0
		jl OR_ONE_223
		cmp is_valid_move_col, 8
		jl ELSE_217
	OR_ONE_223:
		mov __funcret_is_valid_move, 0
		jmp FUNC_END_is_valid_move
	ELSE_217:
		push rbx
		push rcx
		push rdx
		push rsi
		push rdi
		push r8
		mov rbx, is_valid_move_row
		mov rcx, is_valid_move_col
		push is_valid_move_row
		push is_valid_move_col
		call FUNC_get_board
		pop is_valid_move_col
		pop is_valid_move_row
		pop r8
		pop rdi
		pop rsi
		pop rdx
		pop rcx
		pop rbx
		cmp rax, 0
		je ELSE_225
		mov __funcret_is_valid_move, 0
		jmp ENDIF_226
	ELSE_225:
		mov __funcret_is_valid_move, 1
	ENDIF_226:
	FUNC_END_is_valid_move:
		mov rax, __funcret_is_valid_move
		ret
	function FUNC_get_degree:
		mov get_degree_row, rbx
		mov get_degree_col, rcx
		mov get_degree_count, 0
		mov get_degree_i, 0
	FOR_229:
		cmp get_degree_i, 7
		jg ENDFOR_230
		mov rbx, get_degree_i
		load rcx, vertical, rbx, 8
		mov rbx, get_degree_row
		add rbx, rcx
		mov get_degree_nr, rbx
		mov rdx, get_degree_i
		load rsi, horizontal, rdx, 8
		mov rdx, get_degree_col
		add rdx, rsi
		mov get_degree_nc, rdx
		push rbx
		push rcx
		push rdx
		push rsi
		mov rbx, get_degree_nr
		mov rcx, get_degree_nc
		push get_degree_row
		push get_degree_col
		push get_degree_i
		push get_degree_nr
		push get_degree_nc
		push get_degree_count
		call FUNC_is_valid_move
		pop get_degree_count
		pop get_degree_nc
		pop get_degree_nr
		pop get_degree_i
		pop get_degree_col
		pop get_degree_row
		pop rsi
		pop rdx
		pop rcx
		pop rbx
		cmp rax, 1
		jne ELSE_232
		add get_degree_count, 1
	ELSE_232:
	FOR_CONTINUE_231:
		add get_degree_i, 1
		jmp FOR_229
	ENDFOR_230:
		mov __funcret_get_degree, get_degree_count
	FUNC_END_get_degree:
		mov rax, __funcret_get_degree
		ret
	function FUNC_solve_tour:
		mov solve_tour_pos_row, rbx
		mov solve_tour_pos_col, rcx
		mov solve_tour_move_count, rdx
		cmp solve_tour_move_count, 65
		jne ELSE_236
		mov __funcret_solve_tour, 1
		jmp FUNC_END_solve_tour
	ELSE_236:
		mov solve_tour_n, 0
		mov solve_tour_i, 0
	FOR_240:
		cmp solve_tour_i, 7
		jg ENDFOR_241
		mov rcx, solve_tour_i
		load rdx, vertical, rcx, 8
		mov rcx, solve_tour_pos_row
		add rcx, rdx
		mov solve_tour_nr, rcx
		mov rsi, solve_tour_i
		load rdi, horizontal, rsi, 8
		mov rsi, solve_tour_pos_col
		add rsi, rdi
		mov solve_tour_nc, rsi
		push rbx
		push rcx
		push rdx
		push rsi
		push rdi
		mov rbx, solve_tour_nr
		mov rcx, solve_tour_nc
		push solve_tour_pos_row
		push solve_tour_pos_col
		push solve_tour_move_count
		push solve_tour_i
		push solve_tour_nr
		push solve_tour_nc
		push solve_tour_n
		call FUNC_is_valid_move
		pop solve_tour_n
		pop solve_tour_nc
		pop solve_tour_nr
		pop solve_tour_i
		pop solve_tour_move_count
		pop solve_tour_pos_col
		pop solve_tour_pos_row
		pop rdi
		pop rsi
		pop rdx
		pop rcx
		pop rbx
		mov r8, rax
		cmp r8, 1
		jne ELSE_243
		push rbx
		push rcx
		push rdx
		push rsi
		push rdi
		push r8
		mov rbx, solve_tour_nr
		mov rcx, solve_tour_nc
		push solve_tour_pos_row
		push solve_tour_pos_col
		push solve_tour_move_count
		push solve_tour_i
		push solve_tour_nr
		push solve_tour_nc
		push solve_tour_n
		call FUNC_get_degree
		pop solve_tour_n
		pop solve_tour_nc
		pop solve_tour_nr
		pop solve_tour_i
		pop solve_tour_move_count
		pop solve_tour_pos_col
		pop solve_tour_pos_row
		pop r8
		pop rdi
		pop rsi
		pop rdx
		pop rcx
		pop rbx
		mov r9, rax
		cmp solve_tour_n, 0
		jl IDX_OOB_248
		cmp solve_tour_n, 7
		jg IDX_OOB_248
		jmp IDX_OK_247
	IDX_OOB_248:
		exit 1
	IDX_OK_247:
		mov r10, solve_tour_n
		store r9, sort_deg, r10, 8
		cmp solve_tour_n, 0
		jl IDX_OOB_250
		cmp solve_tour_n, 7
		jg IDX_OOB_250
		jmp IDX_OK_249
	IDX_OOB_250:
		exit 1
	IDX_OK_249:
		mov r9, solve_tour_n
		store solve_tour_nr, sort_row, r9, 8
		cmp solve_tour_n, 0
		jl IDX_OOB_252
		cmp solve_tour_n, 7
		jg IDX_OOB_252
		jmp IDX_OK_251
	IDX_OOB_252:
		exit 1
	IDX_OK_251:
		mov r9, solve_tour_n
		store solve_tour_nc, sort_col, r9, 8
		mov r9, solve_tour_n
		add r9, 1
		mov solve_tour_n, r9
	ELSE_243:
	FOR_CONTINUE_242:
		add solve_tour_i, 1
		jmp FOR_240
	ENDFOR_241:
		push rbx
		push rcx
		push rdx
		push rsi
		push rdi
		push r8
		mov rbx, solve_tour_n
		push solve_tour_pos_row
		push solve_tour_pos_col
		push solve_tour_move_count
		push solve_tour_i
		push solve_tour_nr
		push solve_tour_nc
		push solve_tour_n
		call PROC_sort_moves
		pop solve_tour_n
		pop solve_tour_nc
		pop solve_tour_nr
		pop solve_tour_i
		pop solve_tour_move_count
		pop solve_tour_pos_col
		pop solve_tour_pos_row
		pop r8
		pop rdi
		pop rsi
		pop rdx
		pop rcx
		pop rbx
		mov solve_tour_i, 0
	WHILE_253:
		cmp solve_tour_i, solve_tour_n
		jge ENDWHILE_254
		mov r9, solve_tour_i
		load r10, sort_row, r9, 8
		mov r9, solve_tour_i
		load r11, sort_col, r9, 8
		push rbx
		push rcx
		push rdx
		push rsi
		push rdi
		push r8
		mov rbx, r10
		mov rcx, r11
		mov rdx, solve_tour_move_count
		push solve_tour_pos_row
		push solve_tour_pos_col
		push solve_tour_move_count
		push solve_tour_i
		push solve_tour_nr
		push solve_tour_nc
		push solve_tour_n
		call PROC_set_board
		pop solve_tour_n
		pop solve_tour_nc
		pop solve_tour_nr
		pop solve_tour_i
		pop solve_tour_move_count
		pop solve_tour_pos_col
		pop solve_tour_pos_row
		pop r8
		pop rdi
		pop rsi
		pop rdx
		pop rcx
		pop rbx
		mov r9, solve_tour_i
		load r10, sort_row, r9, 8
		cmp seq_count, 0
		jl IDX_OOB_258
		cmp seq_count, 63
		jg IDX_OOB_258
		jmp IDX_OK_257
	IDX_OOB_258:
		exit 1
	IDX_OK_257:
		mov r9, seq_count
		store r10, seq_row, r9, 8
		mov r9, solve_tour_i
		load r10, sort_col, r9, 8
		cmp seq_count, 0
		jl IDX_OOB_260
		cmp seq_count, 63
		jg IDX_OOB_260
		jmp IDX_OK_259
	IDX_OOB_260:
		exit 1
	IDX_OK_259:
		mov r9, seq_count
		store r10, seq_col, r9, 8
		mov r9, seq_count
		add r9, 1
		mov seq_count, r9
		mov r9, solve_tour_i
		load r10, sort_row, r9, 8
		mov r9, solve_tour_i
		load r11, sort_col, r9, 8
		mov r9, solve_tour_move_count
		add r9, 1
		push rbx
		push rcx
		push rdx
		push rsi
		push rdi
		push r8
		mov rbx, r10
		mov rcx, r11
		mov rdx, r9
		push solve_tour_pos_row
		push solve_tour_pos_col
		push solve_tour_move_count
		push solve_tour_i
		push solve_tour_nr
		push solve_tour_nc
		push solve_tour_n
		call FUNC_solve_tour
		pop solve_tour_n
		pop solve_tour_nc
		pop solve_tour_nr
		pop solve_tour_i
		pop solve_tour_move_count
		pop solve_tour_pos_col
		pop solve_tour_pos_row
		pop r8
		pop rdi
		pop rsi
		pop rdx
		pop rcx
		pop rbx
		cmp rax, 1
		jne ELSE_261
		mov __funcret_solve_tour, 1
		jmp FUNC_END_solve_tour
		jmp ENDIF_262
	ELSE_261:
		mov r9, solve_tour_i
		load r10, sort_row, r9, 8
		mov r9, solve_tour_i
		load r11, sort_col, r9, 8
		push rbx
		push rcx
		push rdx
		push rsi
		push rdi
		push r8
		mov rbx, r10
		mov rcx, r11
		mov rdx, 0
		push solve_tour_pos_row
		push solve_tour_pos_col
		push solve_tour_move_count
		push solve_tour_i
		push solve_tour_nr
		push solve_tour_nc
		push solve_tour_n
		call PROC_set_board
		pop solve_tour_n
		pop solve_tour_nc
		pop solve_tour_nr
		pop solve_tour_i
		pop solve_tour_move_count
		pop solve_tour_pos_col
		pop solve_tour_pos_row
		pop r8
		pop rdi
		pop rsi
		pop rdx
		pop rcx
		pop rbx
		sub seq_count, 1
	ENDIF_262:
		add solve_tour_i, 1
		jmp WHILE_253
	ENDWHILE_254:
		mov __funcret_solve_tour, 0
	FUNC_END_solve_tour:
		mov rax, __funcret_solve_tour
		ret
	}
}