407b0d:	66 81 ff ff ff       	cmp    $0xffff,%di
407b12:	0f 84 5c 01 00 00    	je     0x407c74
407b18:	8b 46 0c             	mov    0xc(%esi),%eax
407b1b:	a8 01                	test   $0x1,%al
407b1d:	75 10                	jne    0x407b2f
407b1f:	84 c0                	test   %al,%al
407b21:	0f 89 4d 01 00 00    	jns    0x407c74
407b27:	a8 02                	test   $0x2,%al
407b29:	0f 85 45 01 00 00    	jne    0x407c74
407b2f:	83 7e 08 00          	cmpl   $0x0,0x8(%esi)
407b33:	75 07                	jne    0x407b3c
407b35:	56                   	push   %esi
407b36:	e8 22 72 00 00       	call   0x40ed5d
407b3b:	59                   	pop    %ecx
407b3c:	f6 46 0c 40          	testb  $0x40,0xc(%esi)
407b40:	0f 85 01 01 00 00    	jne    0x407c47
407b46:	56                   	push   %esi
407b47:	e8 fa 6e 00 00       	call   0x40ea46
407b4c:	83 f8 ff             	cmp    $0xffffffff,%eax
407b4f:	59                   	pop    %ecx
407b50:	bb f0 cb 41 00       	mov    $0x41cbf0,%ebx
407b55:	74 2e                	je     0x407b85
407b57:	56                   	push   %esi
407b58:	e8 e9 6e 00 00       	call   0x40ea46
407b5d:	83 f8 fe             	cmp    $0xfffffffe,%eax
407b60:	59                   	pop    %ecx
407b61:	74 22                	je     0x407b85
407b63:	56                   	push   %esi
407b64:	e8 dd 6e 00 00       	call   0x40ea46
407b69:	c1 f8 05             	sar    $0x5,%eax
407b6c:	56                   	push   %esi
407b6d:	8d 3c 85 c0 e4 41 00 	lea    0x41e4c0(,%eax,4),%edi
407b74:	e8 cd 6e 00 00       	call   0x40ea46
407b79:	83 e0 1f             	and    $0x1f,%eax
407b7c:	6b c0 28             	imul   $0x28,%eax,%eax
407b7f:	03 07                	add    (%edi),%eax
407b81:	59                   	pop    %ecx
407b82:	59                   	pop    %ecx
407b83:	eb 02                	jmp    0x407b87
407b85:	8b c3                	mov    %ebx,%eax
407b87:	f6 40 04 80          	testb  $0x80,0x4(%eax)
407b8b:	0f 84 b3 00 00 00    	je     0x407c44
407b91:	56                   	push   %esi
407b92:	e8 af 6e 00 00       	call   0x40ea46
407b97:	83 f8 ff             	cmp    $0xffffffff,%eax
407b9a:	59                   	pop    %ecx
407b9b:	74 2e                	je     0x407bcb
407b9d:	56                   	push   %esi
407b9e:	e8 a3 6e 00 00       	call   0x40ea46
407ba3:	83 f8 fe             	cmp    $0xfffffffe,%eax
407ba6:	59                   	pop    %ecx
407ba7:	74 22                	je     0x407bcb
407ba9:	56                   	push   %esi
407baa:	e8 97 6e 00 00       	call   0x40ea46
407baf:	c1 f8 05             	sar    $0x5,%eax
407bb2:	56                   	push   %esi
407bb3:	8d 3c 85 c0 e4 41 00 	lea    0x41e4c0(,%eax,4),%edi
407bba:	e8 87 6e 00 00       	call   0x40ea46
407bbf:	83 e0 1f             	and    $0x1f,%eax
407bc2:	6b c0 28             	imul   $0x28,%eax,%eax
407bc5:	03 07                	add    (%edi),%eax
407bc7:	59                   	pop    %ecx
407bc8:	59                   	pop    %ecx
407bc9:	eb 02                	jmp    0x407bcd
407bcb:	8b c3                	mov    %ebx,%eax
407bcd:	f6 40 24 7f          	testb  $0x7f,0x24(%eax)
407bd1:	74 11                	je     0x407be4
407bd3:	8b 55 08             	mov    0x8(%ebp),%edx
407bd6:	6a 02                	push   $0x2
407bd8:	58                   	pop    %eax
407bd9:	88 55 f4             	mov    %dl,-0xc(%ebp)
407bdc:	88 75 f5             	mov    %dh,-0xb(%ebp)
407bdf:	89 45 f0             	mov    %eax,-0x10(%ebp)
407be2:	eb 1f                	jmp    0x407c03
407be4:	ff 75 08             	push   0x8(%ebp)
407be7:	8d 45 f4             	lea    -0xc(%ebp),%eax
407bea:	6a 05                	push   $0x5
407bec:	50                   	push   %eax
407bed:	8d 45 f0             	lea    -0x10(%ebp),%eax
407bf0:	50                   	push   %eax
407bf1:	e8 4c 71 00 00       	call   0x40ed42
407bf6:	83 c4 10             	add    $0x10,%esp
407bf9:	85 c0                	test   %eax,%eax
407bfb:	75 77                	jne    0x407c74
407bfd:	8b 45 f0             	mov    -0x10(%ebp),%eax
407c00:	8b 55 08             	mov    0x8(%ebp),%edx
407c03:	8b 4e 08             	mov    0x8(%esi),%ecx
407c06:	03 c8                	add    %eax,%ecx
407c08:	39 0e                	cmp    %ecx,(%esi)
407c0a:	73 0d                	jae    0x407c19
407c0c:	83 7e 04 00          	cmpl   $0x0,0x4(%esi)
407c10:	75 62                	jne    0x407c74
407c12:	3b 46 18             	cmp    0x18(%esi),%eax
407c15:	7f 5d                	jg     0x407c74
407c17:	89 0e                	mov    %ecx,(%esi)
407c19:	8d 48 ff             	lea    -0x1(%eax),%ecx
407c1c:	85 c9                	test   %ecx,%ecx
407c1e:	7c 10                	jl     0x407c30
407c20:	ff 0e                	decl   (%esi)
407c22:	49                   	dec    %ecx
407c23:	8a 5c 0d f5          	mov    -0xb(%ebp,%ecx,1),%bl
407c27:	8b 06                	mov    (%esi),%eax
407c29:	88 18                	mov    %bl,(%eax)
407c2b:	79 f3                	jns    0x407c20
407c2d:	8b 45 f0             	mov    -0x10(%ebp),%eax
407c30:	01 46 04             	add    %eax,0x4(%esi)
407c33:	8b 46 0c             	mov    0xc(%esi),%eax
407c36:	83 e0 ef             	and    $0xffffffef,%eax
407c39:	83 c8 01             	or     $0x1,%eax
407c3c:	89 46 0c             	mov    %eax,0xc(%esi)
407c3f:	66 8b c2             	mov    %dx,%ax
407c42:	eb 34                	jmp    0x407c78
407c44:	8b 7d 08             	mov    0x8(%ebp),%edi
407c47:	8b 46 08             	mov    0x8(%esi),%eax
407c4a:	83 c0 02             	add    $0x2,%eax
407c4d:	39 06                	cmp    %eax,(%esi)
407c4f:	73 0e                	jae    0x407c5f
407c51:	83 7e 04 00          	cmpl   $0x0,0x4(%esi)
407c55:	75 1d                	jne    0x407c74
407c57:	83 7e 18 02          	cmpl   $0x2,0x18(%esi)
407c5b:	72 17                	jb     0x407c74
407c5d:	89 06                	mov    %eax,(%esi)
407c5f:	83 06 fe             	addl   $0xfffffffe,(%esi)
407c62:	f6 46 0c 40          	testb  $0x40,0xc(%esi)
407c66:	8b 06                	mov    (%esi),%eax
407c68:	74 1d                	je     0x407c87
407c6a:	66 39 38             	cmp    %di,(%eax)
407c6d:	74 1b                	je     0x407c8a
407c6f:	83 c0 02             	add    $0x2,%eax
407c72:	89 06                	mov    %eax,(%esi)
407c74:	66 0d ff ff          	or     $0xffff,%ax
407c78:	8b 4d fc             	mov    -0x4(%ebp),%ecx
407c7b:	5f                   	pop    %edi
407c7c:	5e                   	pop    %esi
407c7d:	33 cd                	xor    %ebp,%ecx
407c7f:	5b                   	pop    %ebx
407c80:	e8 b0 e2 ff ff       	call   0x405f35
407c85:	c9                   	leave
407c86:	c3                   	ret
407c87:	66 89 38             	mov    %di,(%eax)
407c8a:	8b 46 0c             	mov    0xc(%esi),%eax
407c8d:	83 46 04 02          	addl   $0x2,0x4(%esi)
407c91:	83 e0 ef             	and    $0xffffffef,%eax
407c94:	83 c8 01             	or     $0x1,%eax
407c97:	89 46 0c             	mov    %eax,0xc(%esi)
407c9a:	66 8b c7             	mov    %di,%ax
407c9d:	eb d9                	jmp    0x407c78
407c9f:	6a 0c                	push   $0xc
407ca1:	68 10 aa 41 00       	push   $0x41aa10
407ca6:	e8 9d 59 00 00       	call   0x40d648
407cab:	33 c0                	xor    %eax,%eax
407cad:	33 f6                	xor    %esi,%esi
407caf:	39 75 0c             	cmp    %esi,0xc(%ebp)
407cb2:	0f 95 c0             	setne  %al
407cb5:	3b c6                	cmp    %esi,%eax
407cb7:	75 1e                	jne    0x407cd7
407cb9:	e8 3c 17 00 00       	call   0x4093fa
407cbe:	c7 00 16 00 00 00    	movl   $0x16,(%eax)
407cc4:	56                   	push   %esi
407cc5:	56                   	push   %esi
407cc6:	56                   	push   %esi
407cc7:	56                   	push   %esi
407cc8:	56                   	push   %esi
407cc9:	e8 82 f9 ff ff       	call   0x407650
407cce:	83 c4 14             	add    $0x14,%esp
407cd1:	66 0d ff ff          	or     $0xffff,%ax
407cd5:	eb 2f                	jmp    0x407d06
407cd7:	ff 75 0c             	push   0xc(%ebp)
407cda:	e8 26 0c 00 00       	call   0x408905
407cdf:	59                   	pop    %ecx
407ce0:	89 75 fc             	mov    %esi,-0x4(%ebp)
407ce3:	ff 75 0c             	push   0xc(%ebp)
407ce6:	ff 75 08             	push   0x8(%ebp)
407ce9:	e8 06 fe ff ff       	call   0x407af4
407cee:	59                   	pop    %ecx
407cef:	59                   	pop    %ecx
407cf0:	0f b7 c0             	movzwl %ax,%eax
407cf3:	89 45 e4             	mov    %eax,-0x1c(%ebp)
407cf6:	c7 45 fc fe ff ff ff 	movl   $0xfffffffe,-0x4(%ebp)
407cfd:	e8 0a 00 00 00       	call   0x407d0c
407d02:	66 8b 45 e4          	mov    -0x1c(%ebp),%ax
407d06:	e8 82 59 00 00       	call   0x40d68d
407d0b:	c3                   	ret
407d0c:	ff 75 0c             	push   0xc(%ebp)
407d0f:	e8 43 0c 00 00       	call   0x408957
407d14:	59                   	pop    %ecx
407d15:	c3                   	ret
407d16:	53                   	push   %ebx
407d17:	56                   	push   %esi
407d18:	8b 74 24 0c          	mov    0xc(%esp),%esi
407d1c:	8b 46 0c             	mov    0xc(%esi),%eax
407d1f:	8b c8                	mov    %eax,%ecx
407d21:	80 e1 03             	and    $0x3,%cl
407d24:	33 db                	xor    %ebx,%ebx
407d26:	80 f9 02             	cmp    $0x2,%cl
407d29:	75 3f                	jne    0x407d6a
407d2b:	66 a9 08 01          	test   $0x108,%ax
407d2f:	74 39                	je     0x407d6a
407d31:	8b 46 08             	mov    0x8(%esi),%eax
407d34:	57                   	push   %edi
407d35:	8b 3e                	mov    (%esi),%edi
407d37:	2b f8                	sub    %eax,%edi
407d39:	85 ff                	test   %edi,%edi
407d3b:	7e 2c                	jle    0x407d69
407d3d:	57                   	push   %edi
407d3e:	50                   	push   %eax
407d3f:	56                   	push   %esi
407d40:	e8 01 6d 00 00       	call   0x40ea46
407d45:	59                   	pop    %ecx
407d46:	50                   	push   %eax
407d47:	e8 1b 76 00 00       	call   0x40f367
407d4c:	83 c4 0c             	add    $0xc,%esp
407d4f:	3b c7                	cmp    %edi,%eax
407d51:	75 0f                	jne    0x407d62
407d53:	8b 46 0c             	mov    0xc(%esi),%eax
407d56:	84 c0                	test   %al,%al
407d58:	79 0f                	jns    0x407d69
407d5a:	83 e0 fd             	and    $0xfffffffd,%eax
407d5d:	89 46 0c             	mov    %eax,0xc(%esi)
407d60:	eb 07                	jmp    0x407d69
407d62:	83 4e 0c 20          	orl    $0x20,0xc(%esi)
407d66:	83 cb ff             	or     $0xffffffff,%ebx
407d69:	5f                   	pop    %edi
407d6a:	8b 46 08             	mov    0x8(%esi),%eax
407d6d:	83 66 04 00          	andl   $0x0,0x4(%esi)
407d71:	89 06                	mov    %eax,(%esi)
407d73:	5e                   	pop    %esi
407d74:	8b c3                	mov    %ebx,%eax
407d76:	5b                   	pop    %ebx
407d77:	c3                   	ret
407d78:	56                   	push   %esi
407d79:	8b 74 24 08          	mov    0x8(%esp),%esi
407d7d:	85 f6                	test   %esi,%esi
407d7f:	75 09                	jne    0x407d8a
407d81:	56                   	push   %esi
407d82:	e8 33 00 00 00       	call   0x407dba
407d87:	59                   	pop    %ecx
407d88:	5e                   	pop    %esi
407d89:	c3                   	ret
407d8a:	56                   	push   %esi
407d8b:	e8 86 ff ff ff       	call   0x407d16
407d90:	85 c0                	test   %eax,%eax
407d92:	59                   	pop    %ecx
407d93:	74 05                	je     0x407d9a
407d95:	83 c8 ff             	or     $0xffffffff,%eax
407d98:	5e                   	pop    %esi
407d99:	c3                   	ret
407d9a:	66 f7 46 0c 00 40    	testw  $0x4000,0xc(%esi)
407da0:	74 14                	je     0x407db6
407da2:	56                   	push   %esi
407da3:	e8 9e 6c 00 00       	call   0x40ea46
407da8:	50                   	push   %eax
407da9:	e8 95 76 00 00       	call   0x40f443
407dae:	59                   	pop    %ecx
407daf:	59                   	pop    %ecx
407db0:	f7 d8                	neg    %eax
407db2:	1b c0                	sbb    %eax,%eax
407db4:	5e                   	pop    %esi
407db5:	c3                   	ret
407db6:	33 c0                	xor    %eax,%eax
407db8:	5e                   	pop    %esi
407db9:	c3                   	ret
407dba:	6a 14                	push   $0x14
407dbc:	68 30 aa 41 00       	push   $0x41aa30
407dc1:	e8 82 58 00 00       	call   0x40d648
407dc6:	33 ff                	xor    %edi,%edi
407dc8:	89 7d e4             	mov    %edi,-0x1c(%ebp)
407dcb:	89 7d dc             	mov    %edi,-0x24(%ebp)
407dce:	6a 01                	push   $0x1
407dd0:	e8 42 4d 00 00       	call   0x40cb17
407dd5:	59                   	pop    %ecx
407dd6:	89 7d fc             	mov    %edi,-0x4(%ebp)
407dd9:	33 f6                	xor    %esi,%esi
407ddb:	89 75 e0             	mov    %esi,-0x20(%ebp)
407dde:	3b 35 00 f6 41 00    	cmp    0x41f600,%esi
407de4:	0f 8d 83 00 00 00    	jge    0x407e6d
407dea:	a1 fc e5 41 00       	mov    0x41e5fc,%eax
407def:	8d 04 b0             	lea    (%eax,%esi,4),%eax
407df2:	39 38                	cmp    %edi,(%eax)
407df4:	74 5e                	je     0x407e54
407df6:	8b 00                	mov    (%eax),%eax
407df8:	f6 40 0c 83          	testb  $0x83,0xc(%eax)
407dfc:	74 56                	je     0x407e54
407dfe:	50                   	push   %eax
407dff:	56                   	push   %esi
407e00:	e8 2f 0b 00 00       	call   0x408934
407e05:	59                   	pop    %ecx
407e06:	59                   	pop    %ecx
407e07:	33 d2                	xor    %edx,%edx
407e09:	42                   	inc    %edx
407e0a:	89 55 fc             	mov    %edx,-0x4(%ebp)
407e0d:	a1 fc e5 41 00       	mov    0x41e5fc,%eax
407e12:	8b 04 b0             	mov    (%eax,%esi,4),%eax
407e15:	8b 48 0c             	mov    0xc(%eax),%ecx
407e18:	f6 c1 83             	test   $0x83,%cl
407e1b:	74 2f                	je     0x407e4c
407e1d:	39 55 08             	cmp    %edx,0x8(%ebp)
407e20:	75 11                	jne    0x407e33
407e22:	50                   	push   %eax
407e23:	e8 50 ff ff ff       	call   0x407d78
407e28:	59                   	pop    %ecx
407e29:	83 f8 ff             	cmp    $0xffffffff,%eax
407e2c:	74 1e                	je     0x407e4c
407e2e:	ff 45 e4             	incl   -0x1c(%ebp)
407e31:	eb 19                	jmp    0x407e4c
407e33:	39 7d 08             	cmp    %edi,0x8(%ebp)
407e36:	75 14                	jne    0x407e4c
407e38:	f6 c1 02             	test   $0x2,%cl
407e3b:	74 0f                	je     0x407e4c
407e3d:	50                   	push   %eax
407e3e:	e8 35 ff ff ff       	call   0x407d78
407e43:	59                   	pop    %ecx
407e44:	83 f8 ff             	cmp    $0xffffffff,%eax
407e47:	75 03                	jne    0x407e4c
407e49:	09 45 dc             	or     %eax,-0x24(%ebp)
407e4c:	89 7d fc             	mov    %edi,-0x4(%ebp)
407e4f:	e8 08 00 00 00       	call   0x407e5c
407e54:	46                   	inc    %esi
407e55:	eb 84                	jmp    0x407ddb
407e57:	33 ff                	xor    %edi,%edi
407e59:	8b 75 e0             	mov    -0x20(%ebp),%esi
407e5c:	a1 fc e5 41 00       	mov    0x41e5fc,%eax
407e61:	ff 34 b0             	push   (%eax,%esi,4)
407e64:	56                   	push   %esi
407e65:	e8 1c 0b 00 00       	call   0x408986
407e6a:	59                   	pop    %ecx
407e6b:	59                   	pop    %ecx
407e6c:	c3                   	ret
407e6d:	c7 45 fc fe ff ff ff 	movl   $0xfffffffe,-0x4(%ebp)
407e74:	e8 12 00 00 00       	call   0x407e8b
407e79:	83 7d 08 01          	cmpl   $0x1,0x8(%ebp)
407e7d:	8b 45 e4             	mov    -0x1c(%ebp),%eax
407e80:	74 03                	je     0x407e85
407e82:	8b 45 dc             	mov    -0x24(%ebp),%eax
407e85:	e8 03 58 00 00       	call   0x40d68d
407e8a:	c3                   	ret
407e8b:	6a 01                	push   $0x1
407e8d:	e8 ad 4b 00 00       	call   0x40ca3f
407e92:	59                   	pop    %ecx
407e93:	c3                   	ret
407e94:	6a 0c                	push   $0xc
407e96:	68 58 aa 41 00       	push   $0x41aa58
407e9b:	e8 a8 57 00 00       	call   0x40d648
407ea0:	33 f6                	xor    %esi,%esi
407ea2:	39 75 08             	cmp    %esi,0x8(%ebp)
407ea5:	75 09                	jne    0x407eb0
407ea7:	56                   	push   %esi
407ea8:	e8 0d ff ff ff       	call   0x407dba
407ead:	59                   	pop    %ecx
407eae:	eb 27                	jmp    0x407ed7