408ea7:	56                   	push   %esi
408ea8:	57                   	push   %edi
408ea9:	8b d9                	mov    %ecx,%ebx
408eab:	e8 d0 d9 ff ff       	call   0x406880
408eb0:	ff 73 04             	push   0x4(%ebx)
408eb3:	8d 73 0c             	lea    0xc(%ebx),%esi
408eb6:	89 45 fc             	mov    %eax,-0x4(%ebp)
408eb9:	56                   	push   %esi
408eba:	8b 50 4c             	mov    0x4c(%eax),%edx
408ebd:	8d 7b 10             	lea    0x10(%ebx),%edi
408ec0:	89 16                	mov    %edx,(%esi)
408ec2:	8b 50 48             	mov    0x48(%eax),%edx
408ec5:	50                   	push   %eax
408ec6:	89 17                	mov    %edx,(%edi)
408ec8:	e8 80 41 00 00       	call   0x40d04d
408ecd:	ff 73 04             	push   0x4(%ebx)
408ed0:	8b 75 fc             	mov    -0x4(%ebp),%esi
408ed3:	57                   	push   %edi
408ed4:	56                   	push   %esi
408ed5:	e8 d1 41 00 00       	call   0x40d0ab
408eda:	8b 86 50 03 00 00    	mov    0x350(%esi),%eax
408ee0:	83 c4 18             	add    $0x18,%esp
408ee3:	a8 02                	test   $0x2,%al
408ee5:	75 0d                	jne    0x408ef4
408ee7:	83 c8 02             	or     $0x2,%eax
408eea:	89 86 50 03 00 00    	mov    %eax,0x350(%esi)
408ef0:	c6 43 14 02          	movb   $0x2,0x14(%ebx)
408ef4:	5f                   	pop    %edi
408ef5:	5e                   	pop    %esi
408ef6:	5b                   	pop    %ebx
408ef7:	8b e5                	mov    %ebp,%esp
408ef9:	5d                   	pop    %ebp
408efa:	c3                   	ret
408efb:	83 39 00             	cmpl   $0x0,(%ecx)
408efe:	75 13                	jne    0x408f13
408f00:	e8 2a 18 00 00       	call   0x40a72f
408f05:	c7 00 16 00 00 00    	movl   $0x16,(%eax)
408f0b:	e8 b9 e5 ff ff       	call   0x4074c9
408f10:	32 c0                	xor    %al,%al
408f12:	c3                   	ret
408f13:	b0 01                	mov    $0x1,%al
408f15:	c3                   	ret
408f16:	8b ff                	mov    %edi,%edi
408f18:	55                   	push   %ebp
408f19:	8b ec                	mov    %esp,%ebp
408f1b:	8b 01                	mov    (%ecx),%eax
408f1d:	85 c0                	test   %eax,%eax
408f1f:	75 22                	jne    0x408f43
408f21:	8b 45 08             	mov    0x8(%ebp),%eax
408f24:	50                   	push   %eax
408f25:	c6 40 1c 01          	movb   $0x1,0x1c(%eax)
408f29:	c7 40 18 16 00 00 00 	movl   $0x16,0x18(%eax)
408f30:	33 c0                	xor    %eax,%eax
408f32:	50                   	push   %eax
408f33:	50                   	push   %eax
408f34:	50                   	push   %eax
408f35:	50                   	push   %eax
408f36:	50                   	push   %eax
408f37:	e8 10 e5 ff ff       	call   0x40744c
408f3c:	83 c4 18             	add    $0x18,%esp
408f3f:	32 c0                	xor    %al,%al
408f41:	eb 07                	jmp    0x408f4a
408f43:	50                   	push   %eax
408f44:	e8 7a dd ff ff       	call   0x406cc3
408f49:	59                   	pop    %ecx
408f4a:	5d                   	pop    %ebp
408f4b:	c2 04 00             	ret    $0x4
408f4e:	8b ff                	mov    %edi,%edi
408f50:	55                   	push   %ebp
408f51:	8b ec                	mov    %esp,%ebp
408f53:	ff 75 10             	push   0x10(%ebp)
408f56:	ff 75 08             	push   0x8(%ebp)
408f59:	e8 12 00 00 00       	call   0x408f70
408f5e:	84 c0                	test   %al,%al
408f60:	8b 45 0c             	mov    0xc(%ebp),%eax
408f63:	74 04                	je     0x408f69
408f65:	ff 00                	incl   (%eax)
408f67:	eb 03                	jmp    0x408f6c
408f69:	83 08 ff             	orl    $0xffffffff,(%eax)
408f6c:	5d                   	pop    %ebp
408f6d:	c2 0c 00             	ret    $0xc
408f70:	8b ff                	mov    %edi,%edi
408f72:	55                   	push   %ebp
408f73:	8b ec                	mov    %esp,%ebp
408f75:	8b 01                	mov    (%ecx),%eax
408f77:	8b 40 0c             	mov    0xc(%eax),%eax
408f7a:	90                   	nop
408f7b:	c1 e8 0c             	shr    $0xc,%eax
408f7e:	a8 01                	test   $0x1,%al
408f80:	74 0c                	je     0x408f8e
408f82:	8b 01                	mov    (%ecx),%eax
408f84:	83 78 04 00          	cmpl   $0x0,0x4(%eax)
408f88:	75 04                	jne    0x408f8e
408f8a:	b0 01                	mov    $0x1,%al
408f8c:	eb 18                	jmp    0x408fa6
408f8e:	ff 75 0c             	push   0xc(%ebp)
408f91:	0f be 45 08          	movsbl 0x8(%ebp),%eax
408f95:	ff 31                	push   (%ecx)
408f97:	50                   	push   %eax
408f98:	e8 81 4f 00 00       	call   0x40df1e
408f9d:	83 c4 0c             	add    $0xc,%esp
408fa0:	83 f8 ff             	cmp    $0xffffffff,%eax
408fa3:	0f 95 c0             	setne  %al
408fa6:	5d                   	pop    %ebp
408fa7:	c2 08 00             	ret    $0x8
408faa:	8b ff                	mov    %edi,%edi
408fac:	55                   	push   %ebp
408fad:	8b ec                	mov    %esp,%ebp
408faf:	8b 01                	mov    (%ecx),%eax
408fb1:	8b 40 0c             	mov    0xc(%eax),%eax
408fb4:	90                   	nop
408fb5:	c1 e8 0c             	shr    $0xc,%eax
408fb8:	a8 01                	test   $0x1,%al
408fba:	74 14                	je     0x408fd0
408fbc:	8b 01                	mov    (%ecx),%eax
408fbe:	83 78 04 00          	cmpl   $0x0,0x4(%eax)
408fc2:	75 0c                	jne    0x408fd0
408fc4:	8b 4d 10             	mov    0x10(%ebp),%ecx
408fc7:	8b 45 0c             	mov    0xc(%ebp),%eax
408fca:	01 01                	add    %eax,(%ecx)
408fcc:	5d                   	pop    %ebp
408fcd:	c2 10 00             	ret    $0x10
408fd0:	5d                   	pop    %ebp
408fd1:	e9 00 00 00 00       	jmp    0x408fd6
408fd6:	8b ff                	mov    %edi,%edi
408fd8:	55                   	push   %ebp
408fd9:	8b ec                	mov    %esp,%ebp
408fdb:	83 ec 10             	sub    $0x10,%esp
408fde:	53                   	push   %ebx
408fdf:	8b 5d 08             	mov    0x8(%ebp),%ebx
408fe2:	56                   	push   %esi
408fe3:	8b 75 14             	mov    0x14(%ebp),%esi
408fe6:	89 4d fc             	mov    %ecx,-0x4(%ebp)
408fe9:	8b 46 18             	mov    0x18(%esi),%eax
408fec:	89 45 f4             	mov    %eax,-0xc(%ebp)
408fef:	8b 46 1c             	mov    0x1c(%esi),%eax
408ff2:	89 45 f0             	mov    %eax,-0x10(%ebp)
408ff5:	8b 45 0c             	mov    0xc(%ebp),%eax
408ff8:	03 c3                	add    %ebx,%eax
408ffa:	89 45 f8             	mov    %eax,-0x8(%ebp)
408ffd:	3b d8                	cmp    %eax,%ebx
408fff:	74 42                	je     0x409043
409001:	57                   	push   %edi
409002:	8b 7d 10             	mov    0x10(%ebp),%edi
409005:	0f b6 03             	movzbl (%ebx),%eax
409008:	56                   	push   %esi
409009:	50                   	push   %eax
40900a:	e8 61 ff ff ff       	call   0x408f70
40900f:	84 c0                	test   %al,%al
409011:	75 1a                	jne    0x40902d
409013:	38 46 1c             	cmp    %al,0x1c(%esi)
409016:	74 27                	je     0x40903f
409018:	83 7e 18 2a          	cmpl   $0x2a,0x18(%esi)
40901c:	75 21                	jne    0x40903f
40901e:	8b 4d fc             	mov    -0x4(%ebp),%ecx
409021:	56                   	push   %esi
409022:	6a 3f                	push   $0x3f
409024:	e8 47 ff ff ff       	call   0x408f70
409029:	84 c0                	test   %al,%al
40902b:	74 04                	je     0x409031
40902d:	ff 07                	incl   (%edi)
40902f:	eb 03                	jmp    0x409034
409031:	83 0f ff             	orl    $0xffffffff,(%edi)
409034:	43                   	inc    %ebx
409035:	3b 5d f8             	cmp    -0x8(%ebp),%ebx
409038:	74 08                	je     0x409042
40903a:	8b 4d fc             	mov    -0x4(%ebp),%ecx
40903d:	eb c6                	jmp    0x409005
40903f:	83 0f ff             	orl    $0xffffffff,(%edi)
409042:	5f                   	pop    %edi
409043:	8b 45 f4             	mov    -0xc(%ebp),%eax
409046:	89 46 18             	mov    %eax,0x18(%esi)
409049:	8b 45 f0             	mov    -0x10(%ebp),%eax
40904c:	89 46 1c             	mov    %eax,0x1c(%esi)
40904f:	5e                   	pop    %esi
409050:	5b                   	pop    %ebx
409051:	c9                   	leave
409052:	c2 10 00             	ret    $0x10
409055:	8b ff                	mov    %edi,%edi
409057:	55                   	push   %ebp
409058:	8b ec                	mov    %esp,%ebp
40905a:	8b 4d 0c             	mov    0xc(%ebp),%ecx
40905d:	8d 41 01             	lea    0x1(%ecx),%eax
409060:	3d 00 01 00 00       	cmp    $0x100,%eax
409065:	77 0c                	ja     0x409073
409067:	8b 45 08             	mov    0x8(%ebp),%eax
40906a:	0f b7 04 48          	movzwl (%eax,%ecx,2),%eax
40906e:	23 45 10             	and    0x10(%ebp),%eax
409071:	5d                   	pop    %ebp
409072:	c3                   	ret
409073:	33 c0                	xor    %eax,%eax
409075:	5d                   	pop    %ebp
409076:	c3                   	ret
409077:	8b ff                	mov    %edi,%edi
409079:	55                   	push   %ebp
40907a:	8b ec                	mov    %esp,%ebp
40907c:	83 ec 5c             	sub    $0x5c,%esp
40907f:	56                   	push   %esi
409080:	ff 75 18             	push   0x18(%ebp)
409083:	8d 4d a4             	lea    -0x5c(%ebp),%ecx
409086:	e8 df d6 ff ff       	call   0x40676a
40908b:	8b 45 1c             	mov    0x1c(%ebp),%eax
40908e:	8b 55 10             	mov    0x10(%ebp),%edx
409091:	8b 75 14             	mov    0x14(%ebp),%esi
409094:	8b 4d 0c             	mov    0xc(%ebp),%ecx
409097:	89 45 f0             	mov    %eax,-0x10(%ebp)
40909a:	8b 45 08             	mov    0x8(%ebp),%eax
40909d:	89 75 f4             	mov    %esi,-0xc(%ebp)
4090a0:	89 55 f8             	mov    %edx,-0x8(%ebp)
4090a3:	89 45 e0             	mov    %eax,-0x20(%ebp)
4090a6:	89 4d e4             	mov    %ecx,-0x1c(%ebp)
4090a9:	85 d2                	test   %edx,%edx
4090ab:	75 23                	jne    0x4090d0
4090ad:	8d 45 a4             	lea    -0x5c(%ebp),%eax
4090b0:	c6 45 c0 01          	movb   $0x1,-0x40(%ebp)
4090b4:	50                   	push   %eax
4090b5:	33 c0                	xor    %eax,%eax
4090b7:	c7 45 bc 16 00 00 00 	movl   $0x16,-0x44(%ebp)
4090be:	50                   	push   %eax
4090bf:	50                   	push   %eax
4090c0:	50                   	push   %eax
4090c1:	50                   	push   %eax
4090c2:	50                   	push   %eax
4090c3:	e8 84 e3 ff ff       	call   0x40744c
4090c8:	83 c4 18             	add    $0x18,%esp
4090cb:	83 ce ff             	or     $0xffffffff,%esi
4090ce:	eb 3e                	jmp    0x40910e
4090d0:	85 f6                	test   %esi,%esi
4090d2:	74 d9                	je     0x4090ad
4090d4:	8d 45 f8             	lea    -0x8(%ebp),%eax
4090d7:	89 55 ec             	mov    %edx,-0x14(%ebp)
4090da:	89 45 cc             	mov    %eax,-0x34(%ebp)
4090dd:	8d 4d ff             	lea    -0x1(%ebp),%ecx
4090e0:	8d 45 a4             	lea    -0x5c(%ebp),%eax
4090e3:	89 55 e8             	mov    %edx,-0x18(%ebp)
4090e6:	89 45 d0             	mov    %eax,-0x30(%ebp)
4090e9:	8d 45 e0             	lea    -0x20(%ebp),%eax
4090ec:	89 45 d4             	mov    %eax,-0x2c(%ebp)
4090ef:	8d 45 f4             	lea    -0xc(%ebp),%eax
4090f2:	89 45 d8             	mov    %eax,-0x28(%ebp)
4090f5:	8d 45 f0             	lea    -0x10(%ebp),%eax
4090f8:	89 45 dc             	mov    %eax,-0x24(%ebp)
4090fb:	8d 45 ec             	lea    -0x14(%ebp),%eax
4090fe:	50                   	push   %eax
4090ff:	8d 45 cc             	lea    -0x34(%ebp),%eax
409102:	50                   	push   %eax
409103:	8d 45 e8             	lea    -0x18(%ebp),%eax
409106:	50                   	push   %eax
409107:	e8 1e e4 ff ff       	call   0x40752a
40910c:	8b f0                	mov    %eax,%esi
40910e:	8d 4d a4             	lea    -0x5c(%ebp),%ecx
409111:	e8 9c d6 ff ff       	call   0x4067b2
409116:	8b c6                	mov    %esi,%eax
409118:	5e                   	pop    %esi
409119:	c9                   	leave
40911a:	c3                   	ret
40911b:	8b ff                	mov    %edi,%edi
40911d:	55                   	push   %ebp
40911e:	8b ec                	mov    %esp,%ebp
409120:	8b 0d c0 10 42 00    	mov    0x4210c0,%ecx
409126:	8b 45 08             	mov    0x8(%ebp),%eax
409129:	83 e1 1f             	and    $0x1f,%ecx
40912c:	33 05 c0 10 42 00    	xor    0x4210c0,%eax
409132:	d3 c8                	ror    %cl,%eax
409134:	5d                   	pop    %ebp
409135:	c3                   	ret
409136:	8b ff                	mov    %edi,%edi
409138:	55                   	push   %ebp
409139:	8b ec                	mov    %esp,%ebp
40913b:	8b 45 08             	mov    0x8(%ebp),%eax
40913e:	a3 4c 1e 42 00       	mov    %eax,0x421e4c
409143:	5d                   	pop    %ebp
409144:	c3                   	ret
409145:	8b ff                	mov    %edi,%edi
409147:	55                   	push   %ebp
409148:	8b ec                	mov    %esp,%ebp
40914a:	56                   	push   %esi
40914b:	e8 21 00 00 00       	call   0x409171
409150:	8b f0                	mov    %eax,%esi
409152:	85 f6                	test   %esi,%esi
409154:	74 16                	je     0x40916c
409156:	ff 75 08             	push   0x8(%ebp)
409159:	8b ce                	mov    %esi,%ecx
40915b:	ff 15 54 91 41 00    	call   *0x419154
409161:	ff d6                	call   *%esi
409163:	f7 d8                	neg    %eax
409165:	59                   	pop    %ecx
409166:	1b c0                	sbb    %eax,%eax
409168:	f7 d8                	neg    %eax
40916a:	eb 02                	jmp    0x40916e
40916c:	33 c0                	xor    %eax,%eax
40916e:	5e                   	pop    %esi
40916f:	5d                   	pop    %ebp
409170:	c3                   	ret
409171:	6a 0c                	push   $0xc
409173:	68 c0 fe 41 00       	push   $0x41fec0
409178:	e8 23 ad ff ff       	call   0x403ea0
40917d:	83 65 e4 00          	andl   $0x0,-0x1c(%ebp)
409181:	6a 00                	push   $0x0
409183:	e8 04 4e 00 00       	call   0x40df8c
409188:	59                   	pop    %ecx
409189:	83 65 fc 00          	andl   $0x0,-0x4(%ebp)
40918d:	ff 35 4c 1e 42 00    	push   0x421e4c
409193:	e8 83 ff ff ff       	call   0x40911b
409198:	59                   	pop    %ecx
409199:	8b f0                	mov    %eax,%esi
40919b:	89 75 e4             	mov    %esi,-0x1c(%ebp)
40919e:	c7 45 fc fe ff ff ff 	movl   $0xfffffffe,-0x4(%ebp)
4091a5:	e8 15 00 00 00       	call   0x4091bf
4091aa:	8b c6                	mov    %esi,%eax
4091ac:	8b 4d f0             	mov    -0x10(%ebp),%ecx
4091af:	64 89 0d 00 00 00 00 	mov    %ecx,%fs:0x0
4091b6:	59                   	pop    %ecx
4091b7:	5f                   	pop    %edi
4091b8:	5e                   	pop    %esi
4091b9:	5b                   	pop    %ebx
4091ba:	c9                   	leave
4091bb:	c3                   	ret
4091bc:	8b 75 e4             	mov    -0x1c(%ebp),%esi
4091bf:	6a 00                	push   $0x0
4091c1:	e8 0e 4e 00 00       	call   0x40dfd4
4091c6:	59                   	pop    %ecx
4091c7:	c3                   	ret
4091c8:	8b ff                	mov    %edi,%edi
4091ca:	55                   	push   %ebp
4091cb:	8b ec                	mov    %esp,%ebp
4091cd:	5d                   	pop    %ebp
4091ce:	e9 ff 3d 00 00       	jmp    0x40cfd2
4091d3:	8b ff                	mov    %edi,%edi
4091d5:	55                   	push   %ebp
4091d6:	8b ec                	mov    %esp,%ebp
4091d8:	51                   	push   %ecx
4091d9:	ff 75 08             	push   0x8(%ebp)
4091dc:	c7 45 fc 00 00 00 00 	movl   $0x0,-0x4(%ebp)
4091e3:	8b 45 fc             	mov    -0x4(%ebp),%eax
4091e6:	e8 b4 15 00 00       	call   0x40a79f
4091eb:	59                   	pop    %ecx
4091ec:	c9                   	leave
4091ed:	c3                   	ret
4091ee:	8b ff                	mov    %edi,%edi
4091f0:	55                   	push   %ebp
4091f1:	8b ec                	mov    %esp,%ebp
4091f3:	51                   	push   %ecx
4091f4:	56                   	push   %esi
4091f5:	57                   	push   %edi
4091f6:	e8 03 33 00 00       	call   0x40c4fe
4091fb:	8b f0                	mov    %eax,%esi
4091fd:	85 f6                	test   %esi,%esi
4091ff:	74 1c                	je     0x40921d
409201:	8b 16                	mov    (%esi),%edx