405069:	89 30                	mov    %esi,(%eax)
40506b:	5e                   	pop    %esi
40506c:	c2 0c 00             	ret    $0xc
40506f:	8b 41 10             	mov    0x10(%ecx),%eax
405072:	8b 54 24 08          	mov    0x8(%esp),%edx
405076:	56                   	push   %esi
405077:	8b 74 24 08          	mov    0x8(%esp),%esi
40507b:	2b d6                	sub    %esi,%edx
40507d:	89 30                	mov    %esi,(%eax)
40507f:	8b 41 20             	mov    0x20(%ecx),%eax
405082:	d1 fa                	sar    $1,%edx
405084:	89 30                	mov    %esi,(%eax)
405086:	8b 41 30             	mov    0x30(%ecx),%eax
405089:	5e                   	pop    %esi
40508a:	89 10                	mov    %edx,(%eax)
40508c:	c2 08 00             	ret    $0x8
40508f:	83 7c 24 04 00       	cmpl   $0x0,0x4(%esp)
405094:	56                   	push   %esi
405095:	8b f1                	mov    %ecx,%esi
405097:	74 15                	je     0x4050ae
405099:	ff 74 24 0c          	push   0xc(%esp)
40509d:	e8 8c fb ff ff       	call   0x404c2e
4050a2:	0b 44 24 0c          	or     0xc(%esp),%eax
4050a6:	8b ce                	mov    %esi,%ecx
4050a8:	50                   	push   %eax
4050a9:	e8 ba f1 ff ff       	call   0x404268
4050ae:	5e                   	pop    %esi
4050af:	c2 08 00             	ret    $0x8
4050b2:	33 c0                	xor    %eax,%eax
4050b4:	33 d2                	xor    %edx,%edx
4050b6:	c3                   	ret
4050b7:	57                   	push   %edi
4050b8:	8b f9                	mov    %ecx,%edi
4050ba:	e8 2f ed ff ff       	call   0x403dee
4050bf:	85 d2                	test   %edx,%edx
4050c1:	7c 1e                	jl     0x4050e1
4050c3:	7f 04                	jg     0x4050c9
4050c5:	85 c0                	test   %eax,%eax
4050c7:	74 18                	je     0x4050e1
4050c9:	8b cf                	mov    %edi,%ecx
4050cb:	e8 30 ed ff ff       	call   0x403e00
4050d0:	66 8b 4c 24 08       	mov    0x8(%esp),%cx
4050d5:	50                   	push   %eax
4050d6:	66 89 08             	mov    %cx,(%eax)
4050d9:	e8 45 00 00 00       	call   0x405123
4050de:	59                   	pop    %ecx
4050df:	eb 18                	jmp    0x4050f9
4050e1:	56                   	push   %esi
4050e2:	8b 37                	mov    (%edi),%esi
4050e4:	8d 44 24 0c          	lea    0xc(%esp),%eax
4050e8:	50                   	push   %eax
4050e9:	e8 35 00 00 00       	call   0x405123
4050ee:	59                   	pop    %ecx
4050ef:	0f b7 c0             	movzwl %ax,%eax
4050f2:	8b cf                	mov    %edi,%ecx
4050f4:	50                   	push   %eax
4050f5:	ff 56 0c             	call   *0xc(%esi)
4050f8:	5e                   	pop    %esi
4050f9:	0f b7 c0             	movzwl %ax,%eax
4050fc:	5f                   	pop    %edi
4050fd:	c2 04 00             	ret    $0x4
405100:	ff 74 24 0c          	push   0xc(%esp)
405104:	8b 01                	mov    (%ecx),%eax
405106:	ff 74 24 0c          	push   0xc(%esp)
40510a:	ff 74 24 0c          	push   0xc(%esp)
40510e:	ff 50 24             	call   *0x24(%eax)
405111:	c2 0c 00             	ret    $0xc
405114:	33 c0                	xor    %eax,%eax
405116:	c3                   	ret
405117:	8b 41 3c             	mov    0x3c(%ecx),%eax
40511a:	c3                   	ret
40511b:	8b 44 24 04          	mov    0x4(%esp),%eax
40511f:	66 8b 00             	mov    (%eax),%ax
405122:	c3                   	ret
405123:	8b 44 24 04          	mov    0x4(%esp),%eax
405127:	66 8b 00             	mov    (%eax),%ax
40512a:	c3                   	ret
40512b:	55                   	push   %ebp
40512c:	8b ec                	mov    %esp,%ebp
40512e:	51                   	push   %ecx
40512f:	51                   	push   %ecx
405130:	56                   	push   %esi
405131:	8b f1                	mov    %ecx,%esi
405133:	8b 06                	mov    (%esi),%eax
405135:	ff 50 18             	call   *0x18(%eax)
405138:	0f b7 c0             	movzwl %ax,%eax
40513b:	89 45 fc             	mov    %eax,-0x4(%ebp)
40513e:	e8 3f f4 ff ff       	call   0x404582
405143:	0f b7 c0             	movzwl %ax,%eax
405146:	89 45 f8             	mov    %eax,-0x8(%ebp)
405149:	8d 45 fc             	lea    -0x4(%ebp),%eax
40514c:	50                   	push   %eax
40514d:	8d 45 f8             	lea    -0x8(%ebp),%eax
405150:	50                   	push   %eax
405151:	e8 52 f4 ff ff       	call   0x4045a8
405156:	59                   	pop    %ecx
405157:	59                   	pop    %ecx
405158:	84 c0                	test   %al,%al
40515a:	74 07                	je     0x405163
40515c:	e8 21 f4 ff ff       	call   0x404582
405161:	eb 0e                	jmp    0x405171
405163:	8b ce                	mov    %esi,%ecx
405165:	e8 0b e9 ff ff       	call   0x403a75
40516a:	50                   	push   %eax
40516b:	e8 b3 ff ff ff       	call   0x405123
405170:	59                   	pop    %ecx
405171:	0f b7 c0             	movzwl %ax,%eax
405174:	5e                   	pop    %esi
405175:	8b e5                	mov    %ebp,%esp
405177:	5d                   	pop    %ebp
405178:	c3                   	ret
405179:	e9 04 f4 ff ff       	jmp    0x404582
40517e:	57                   	push   %edi
40517f:	8b f9                	mov    %ecx,%edi
405181:	e8 ce f5 ff ff       	call   0x404754
405186:	85 c0                	test   %eax,%eax
405188:	75 06                	jne    0x405190
40518a:	5f                   	pop    %edi
40518b:	e9 f2 f3 ff ff       	jmp    0x404582
405190:	56                   	push   %esi
405191:	8b cf                	mov    %edi,%ecx
405193:	e8 d0 f3 ff ff       	call   0x404568
405198:	8b cf                	mov    %edi,%ecx
40519a:	8b f0                	mov    %eax,%esi
40519c:	e8 b3 f5 ff ff       	call   0x404754
4051a1:	3b c6                	cmp    %esi,%eax
4051a3:	72 61                	jb     0x405206
4051a5:	f6 47 3c 04          	testb  $0x4,0x3c(%edi)
4051a9:	75 6c                	jne    0x405217
4051ab:	8b cf                	mov    %edi,%ecx
4051ad:	e8 6d fa ff ff       	call   0x404c1f
4051b2:	85 c0                	test   %eax,%eax
4051b4:	74 61                	je     0x405217
4051b6:	8b cf                	mov    %edi,%ecx
4051b8:	e8 62 fa ff ff       	call   0x404c1f
4051bd:	8b cf                	mov    %edi,%ecx
4051bf:	8b f0                	mov    %eax,%esi
4051c1:	e8 8e f5 ff ff       	call   0x404754
4051c6:	3b f0                	cmp    %eax,%esi
4051c8:	77 0c                	ja     0x4051d6
4051ca:	8b cf                	mov    %edi,%ecx
4051cc:	e8 83 f5 ff ff       	call   0x404754
4051d1:	39 47 38             	cmp    %eax,0x38(%edi)
4051d4:	76 41                	jbe    0x405217
4051d6:	8b cf                	mov    %edi,%ecx
4051d8:	e8 42 fa ff ff       	call   0x404c1f
4051dd:	39 47 38             	cmp    %eax,0x38(%edi)
4051e0:	73 0a                	jae    0x4051ec
4051e2:	8b cf                	mov    %edi,%ecx
4051e4:	e8 36 fa ff ff       	call   0x404c1f
4051e9:	89 47 38             	mov    %eax,0x38(%edi)
4051ec:	ff 77 38             	push   0x38(%edi)
4051ef:	8b cf                	mov    %edi,%ecx
4051f1:	e8 5e f5 ff ff       	call   0x404754
4051f6:	50                   	push   %eax
4051f7:	8b cf                	mov    %edi,%ecx
4051f9:	e8 64 f3 ff ff       	call   0x404562
4051fe:	50                   	push   %eax
4051ff:	8b cf                	mov    %edi,%ecx
405201:	e8 21 fe ff ff       	call   0x405027
405206:	8b cf                	mov    %edi,%ecx
405208:	e8 47 f5 ff ff       	call   0x404754
40520d:	50                   	push   %eax
40520e:	e8 10 ff ff ff       	call   0x405123
405213:	59                   	pop    %ecx
405214:	5e                   	pop    %esi
405215:	5f                   	pop    %edi
405216:	c3                   	ret
405217:	5e                   	pop    %esi
405218:	e9 6d ff ff ff       	jmp    0x40518a
40521d:	8b 01                	mov    (%ecx),%eax
40521f:	c3                   	ret
405220:	8b 01                	mov    (%ecx),%eax
405222:	c3                   	ret
405223:	83 79 04 00          	cmpl   $0x0,0x4(%ecx)
405227:	b8 cc 72 42 00       	mov    $0x4272cc,%eax
40522c:	0f 45 41 04          	cmovne 0x4(%ecx),%eax
405230:	c3                   	ret
405231:	b8 68 6b 42 00       	mov    $0x426b68,%eax
405236:	e8 85 1b 00 00       	call   0x406dc0
40523b:	51                   	push   %ecx
40523c:	51                   	push   %ecx
40523d:	56                   	push   %esi
40523e:	8d 45 ec             	lea    -0x14(%ebp),%eax
405241:	50                   	push   %eax
405242:	e8 e5 f4 ff ff       	call   0x40472c
405247:	83 65 fc 00          	andl   $0x0,-0x4(%ebp)
40524b:	50                   	push   %eax
40524c:	e8 88 d2 ff ff       	call   0x4024d9
405251:	83 4d fc ff          	orl    $0xffffffff,-0x4(%ebp)
405255:	8b f0                	mov    %eax,%esi
405257:	59                   	pop    %ecx
405258:	8d 4d ec             	lea    -0x14(%ebp),%ecx
40525b:	e8 92 de ff ff       	call   0x4030f2
405260:	ff 75 08             	push   0x8(%ebp)
405263:	8b ce                	mov    %esi,%ecx
405265:	e8 11 00 00 00       	call   0x40527b
40526a:	8b 4d f4             	mov    -0xc(%ebp),%ecx
40526d:	5e                   	pop    %esi
40526e:	64 89 0d 00 00 00 00 	mov    %ecx,%fs:0x0
405275:	8b e5                	mov    %ebp,%esp
405277:	5d                   	pop    %ebp
405278:	c2 04 00             	ret    $0x4
40527b:	8b 01                	mov    (%ecx),%eax
40527d:	ff 60 30             	jmp    *0x30(%eax)
405280:	8b 41 20             	mov    0x20(%ecx),%eax
405283:	8b 51 24             	mov    0x24(%ecx),%edx
405286:	56                   	push   %esi
405287:	8b 74 24 08          	mov    0x8(%esp),%esi
40528b:	89 71 20             	mov    %esi,0x20(%ecx)
40528e:	8b 74 24 0c          	mov    0xc(%esp),%esi
405292:	89 71 24             	mov    %esi,0x24(%ecx)
405295:	5e                   	pop    %esi
405296:	c2 08 00             	ret    $0x8
405299:	8b 41 20             	mov    0x20(%ecx),%eax
40529c:	8b 51 24             	mov    0x24(%ecx),%edx
40529f:	c3                   	ret
4052a0:	83 ec 0c             	sub    $0xc,%esp
4052a3:	53                   	push   %ebx
4052a4:	55                   	push   %ebp
4052a5:	56                   	push   %esi
4052a6:	57                   	push   %edi
4052a7:	8b 7c 24 28          	mov    0x28(%esp),%edi
4052ab:	8b c1                	mov    %ecx,%eax
4052ad:	89 44 24 10          	mov    %eax,0x10(%esp)
4052b1:	0f 57 c0             	xorps  %xmm0,%xmm0
4052b4:	66 0f 13 44 24 14    	movlpd %xmm0,0x14(%esp)
4052ba:	85 ff                	test   %edi,%edi
4052bc:	0f 8c ed 00 00 00    	jl     0x4053af
4052c2:	8b 74 24 24          	mov    0x24(%esp),%esi
4052c6:	7f 08                	jg     0x4052d0
4052c8:	85 f6                	test   %esi,%esi
4052ca:	0f 84 df 00 00 00    	je     0x4053af
4052d0:	8b 5c 24 18          	mov    0x18(%esp),%ebx
4052d4:	8b 6c 24 14          	mov    0x14(%esp),%ebp
4052d8:	8b c8                	mov    %eax,%ecx
4052da:	e8 84 e7 ff ff       	call   0x403a63
4052df:	8b ca                	mov    %edx,%ecx
4052e1:	89 44 24 24          	mov    %eax,0x24(%esp)
4052e5:	89 4c 24 14          	mov    %ecx,0x14(%esp)
4052e9:	85 c9                	test   %ecx,%ecx
4052eb:	7c 54                	jl     0x405341
4052ed:	7f 04                	jg     0x4052f3
4052ef:	85 c0                	test   %eax,%eax
4052f1:	74 4e                	je     0x405341
4052f3:	3b f9                	cmp    %ecx,%edi
4052f5:	7f 10                	jg     0x405307
4052f7:	7c 04                	jl     0x4052fd
4052f9:	3b f0                	cmp    %eax,%esi
4052fb:	73 0a                	jae    0x405307
4052fd:	8b c6                	mov    %esi,%eax
4052ff:	89 74 24 24          	mov    %esi,0x24(%esp)
405303:	89 7c 24 14          	mov    %edi,0x14(%esp)
405307:	8b 4c 24 10          	mov    0x10(%esp),%ecx
40530b:	50                   	push   %eax
40530c:	e8 43 f4 ff ff       	call   0x404754
405311:	8b 4c 24 24          	mov    0x24(%esp),%ecx
405315:	50                   	push   %eax
405316:	51                   	push   %ecx
405317:	e8 02 f0 ff ff       	call   0x40431e
40531c:	8b 44 24 30          	mov    0x30(%esp),%eax
405320:	83 c4 0c             	add    $0xc,%esp
405323:	8b 4c 24 10          	mov    0x10(%esp),%ecx
405327:	03 e8                	add    %eax,%ebp
405329:	13 5c 24 14          	adc    0x14(%esp),%ebx
40532d:	2b f0                	sub    %eax,%esi
40532f:	50                   	push   %eax
405330:	1b 7c 24 18          	sbb    0x18(%esp),%edi
405334:	e8 df f3 ff ff       	call   0x404718
405339:	8b 44 24 24          	mov    0x24(%esp),%eax
40533d:	03 c0                	add    %eax,%eax
40533f:	eb 52                	jmp    0x405393
405341:	8b 4c 24 10          	mov    0x10(%esp),%ecx
405345:	8b 01                	mov    (%ecx),%eax
405347:	ff 50 1c             	call   *0x1c(%eax)
40534a:	0f b7 c0             	movzwl %ax,%eax
40534d:	89 44 24 24          	mov    %eax,0x24(%esp)
405351:	e8 2c f2 ff ff       	call   0x404582
405356:	0f b7 c0             	movzwl %ax,%eax
405359:	89 44 24 14          	mov    %eax,0x14(%esp)
40535d:	8d 44 24 24          	lea    0x24(%esp),%eax
405361:	50                   	push   %eax
405362:	8d 44 24 18          	lea    0x18(%esp),%eax
405366:	50                   	push   %eax
405367:	e8 3c f2 ff ff       	call   0x4045a8
40536c:	59                   	pop    %ecx
40536d:	59                   	pop    %ecx
40536e:	84 c0                	test   %al,%al
405370:	75 45                	jne    0x4053b7
405372:	8d 44 24 24          	lea    0x24(%esp),%eax
405376:	50                   	push   %eax
405377:	e8 9f fd ff ff       	call   0x40511b
40537c:	59                   	pop    %ecx
40537d:	8b 4c 24 20          	mov    0x20(%esp),%ecx
405381:	83 c5 01             	add    $0x1,%ebp
405384:	6a 02                	push   $0x2
405386:	83 d3 00             	adc    $0x0,%ebx
405389:	83 c6 ff             	add    $0xffffffff,%esi
40538c:	66 89 01             	mov    %ax,(%ecx)
40538f:	83 d7 ff             	adc    $0xffffffff,%edi
405392:	58                   	pop    %eax
405393:	01 44 24 20          	add    %eax,0x20(%esp)
405397:	8b 44 24 10          	mov    0x10(%esp),%eax
40539b:	85 ff                	test   %edi,%edi
40539d:	0f 8f 35 ff ff ff    	jg     0x4052d8
4053a3:	7c 12                	jl     0x4053b7
4053a5:	85 f6                	test   %esi,%esi
4053a7:	0f 85 2b ff ff ff    	jne    0x4052d8
4053ad:	eb 08                	jmp    0x4053b7
4053af:	8b 5c 24 18          	mov    0x18(%esp),%ebx
4053b3:	8b 6c 24 14          	mov    0x14(%esp),%ebp
4053b7:	5f                   	pop    %edi
4053b8:	5e                   	pop    %esi
4053b9:	8b c5                	mov    %ebp,%eax
4053bb:	8b d3                	mov    %ebx,%edx
4053bd:	5d                   	pop    %ebp
4053be:	5b                   	pop    %ebx
4053bf:	83 c4 0c             	add    $0xc,%esp
4053c2:	c2 0c 00             	ret    $0xc
4053c5:	83 ec 10             	sub    $0x10,%esp
4053c8:	53                   	push   %ebx
4053c9:	8b 5c 24 20          	mov    0x20(%esp),%ebx
4053cd:	8b c1                	mov    %ecx,%eax
4053cf:	89 44 24 04          	mov    %eax,0x4(%esp)
4053d3:	0f 57 c0             	xorps  %xmm0,%xmm0
4053d6:	66 0f 13 44 24 0c    	movlpd %xmm0,0xc(%esp)
4053dc:	55                   	push   %ebp
4053dd:	57                   	push   %edi
4053de:	85 db                	test   %ebx,%ebx
4053e0:	0f 8c 0b 01 00 00    	jl     0x4054f1
4053e6:	8b 7c 24 24          	mov    0x24(%esp),%edi
4053ea:	7f 08                	jg     0x4053f4
4053ec:	85 ff                	test   %edi,%edi
4053ee:	0f 84 fd 00 00 00    	je     0x4054f1
4053f4:	8b 6c 24 18          	mov    0x18(%esp),%ebp
4053f8:	56                   	push   %esi
4053f9:	8b 74 24 18          	mov    0x18(%esp),%esi
4053fd:	89 74 24 28          	mov    %esi,0x28(%esp)
405401:	8b c8                	mov    %eax,%ecx
405403:	e8 e6 e9 ff ff       	call   0x403dee
405408:	8b ca                	mov    %edx,%ecx
40540a:	89 44 24 14          	mov    %eax,0x14(%esp)
40540e:	89 4c 24 18          	mov    %ecx,0x18(%esp)
405412:	85 c9                	test   %ecx,%ecx
405414:	7c 57                	jl     0x40546d
405416:	7f 04                	jg     0x40541c
405418:	85 c0                	test   %eax,%eax
40541a:	74 51                	je     0x40546d
40541c:	3b d9                	cmp    %ecx,%ebx
40541e:	7f 10                	jg     0x405430