40643d:	e8 33 e8 ff ff       	call   0x404c75
406442:	84 c0                	test   %al,%al
406444:	0f 84 80 00 00 00    	je     0x4064ca
40644a:	e8 d9 f4 ff ff       	call   0x405928
40644f:	85 c0                	test   %eax,%eax
406451:	78 77                	js     0x4064ca
406453:	e8 40 f3 ff ff       	call   0x405798
406458:	85 c0                	test   %eax,%eax
40645a:	78 6e                	js     0x4064ca
40645c:	8d 45 fc             	lea    -0x4(%ebp),%eax
40645f:	50                   	push   %eax
406460:	8d 85 f8 ff fe ff    	lea    -0x10008(%ebp),%eax
406466:	50                   	push   %eax
406467:	8b 45 08             	mov    0x8(%ebp),%eax
40646a:	68 ff 7f 00 00       	push   $0x7fff
40646f:	ff 30                	push   (%eax)
406471:	ff 15 14 d3 48 00    	call   *0x48d314
406477:	8d 85 f8 ff fe ff    	lea    -0x10008(%ebp),%eax
40647d:	50                   	push   %eax
40647e:	b9 28 12 4c 00       	mov    $0x4c1228,%ecx
406483:	e8 db 05 00 00       	call   0x406a63
406488:	ff 75 fc             	push   -0x4(%ebp)
40648b:	b9 18 12 4c 00       	mov    $0x4c1218,%ecx
406490:	e8 ce 05 00 00       	call   0x406a63
406495:	8b 45 fc             	mov    -0x4(%ebp),%eax
406498:	33 c9                	xor    %ecx,%ecx
40649a:	66 89 48 fe          	mov    %cx,-0x2(%eax)
40649e:	66 39 8d fc ff fe ff 	cmp    %cx,-0x10004(%ebp)
4064a5:	0f 84 24 f9 06 00    	je     0x475dcf
4064ab:	8d 85 f8 ff fe ff    	lea    -0x10008(%ebp),%eax
4064b1:	50                   	push   %eax
4064b2:	b9 38 12 4c 00       	mov    $0x4c1238,%ecx
4064b7:	e8 a7 05 00 00       	call   0x406a63
4064bc:	8b 45 0c             	mov    0xc(%ebp),%eax
4064bf:	a3 14 12 4c 00       	mov    %eax,0x4c1214
4064c4:	33 c0                	xor    %eax,%eax
4064c6:	c9                   	leave
4064c7:	c2 08 00             	ret    $0x8
4064ca:	83 c8 ff             	or     $0xffffffff,%eax
4064cd:	eb f7                	jmp    0x4064c6
4064cf:	55                   	push   %ebp
4064d0:	8b ec                	mov    %esp,%ebp
4064d2:	56                   	push   %esi
4064d3:	8b f1                	mov    %ecx,%esi
4064d5:	8b 46 0c             	mov    0xc(%esi),%eax
4064d8:	39 46 08             	cmp    %eax,0x8(%esi)
4064db:	74 3e                	je     0x40651b
4064dd:	6a 10                	push   $0x10
4064df:	e8 06 90 01 00       	call   0x41f4ea
4064e4:	8b d0                	mov    %eax,%edx
4064e6:	59                   	pop    %ecx
4064e7:	85 d2                	test   %edx,%edx
4064e9:	0f 84 21 ba 06 00    	je     0x471f10
4064ef:	8b 45 08             	mov    0x8(%ebp),%eax
4064f2:	8b 08                	mov    (%eax),%ecx
4064f4:	89 0a                	mov    %ecx,(%edx)
4064f6:	8b 48 04             	mov    0x4(%eax),%ecx
4064f9:	89 4a 04             	mov    %ecx,0x4(%edx)
4064fc:	8b 48 08             	mov    0x8(%eax),%ecx
4064ff:	89 4a 08             	mov    %ecx,0x8(%edx)
406502:	8b 40 0c             	mov    0xc(%eax),%eax
406505:	89 42 0c             	mov    %eax,0xc(%edx)
406508:	ff 00                	incl   (%eax)
40650a:	8b 4e 08             	mov    0x8(%esi),%ecx
40650d:	8b 46 04             	mov    0x4(%esi),%eax
406510:	89 14 88             	mov    %edx,(%eax,%ecx,4)
406513:	ff 46 08             	incl   0x8(%esi)
406516:	5e                   	pop    %esi
406517:	5d                   	pop    %ebp
406518:	c2 04 00             	ret    $0x4
40651b:	8d 0c 00             	lea    (%eax,%eax,1),%ecx
40651e:	6a 08                	push   $0x8
406520:	58                   	pop    %eax
406521:	3b c8                	cmp    %eax,%ecx
406523:	73 27                	jae    0x40654c
406525:	57                   	push   %edi
406526:	33 c9                	xor    %ecx,%ecx
406528:	6a 04                	push   $0x4
40652a:	5a                   	pop    %edx
40652b:	89 46 0c             	mov    %eax,0xc(%esi)
40652e:	f7 e2                	mul    %edx
406530:	0f 90 c1             	seto   %cl
406533:	f7 d9                	neg    %ecx
406535:	0b c8                	or     %eax,%ecx
406537:	51                   	push   %ecx
406538:	e8 ad 8f 01 00       	call   0x41f4ea
40653d:	83 7e 04 00          	cmpl   $0x0,0x4(%esi)
406541:	59                   	pop    %ecx
406542:	8b f8                	mov    %eax,%edi
406544:	75 0a                	jne    0x406550
406546:	89 7e 04             	mov    %edi,0x4(%esi)
406549:	5f                   	pop    %edi
40654a:	eb 91                	jmp    0x4064dd
40654c:	8b c1                	mov    %ecx,%eax
40654e:	eb d5                	jmp    0x406525
406550:	8b 46 08             	mov    0x8(%esi),%eax
406553:	85 c0                	test   %eax,%eax
406555:	74 ef                	je     0x406546
406557:	c1 e0 02             	shl    $0x2,%eax
40655a:	50                   	push   %eax
40655b:	ff 76 04             	push   0x4(%esi)
40655e:	57                   	push   %edi
40655f:	e8 1c 89 01 00       	call   0x41ee80
406564:	ff 76 04             	push   0x4(%esi)
406567:	e8 f2 8f 01 00       	call   0x41f55e
40656c:	83 c4 10             	add    $0x10,%esp
40656f:	eb d5                	jmp    0x406546
406571:	55                   	push   %ebp
406572:	8b ec                	mov    %esp,%ebp
406574:	56                   	push   %esi
406575:	ff 75 08             	push   0x8(%ebp)
406578:	8b f1                	mov    %ecx,%esi
40657a:	e8 19 00 00 00       	call   0x406598
40657f:	6a ff                	push   $0xffffffff
406581:	8b ce                	mov    %esi,%ecx
406583:	83 f8 ff             	cmp    $0xffffffff,%eax
406586:	74 0c                	je     0x406594
406588:	40                   	inc    %eax
406589:	50                   	push   %eax
40658a:	e8 fc 4b 00 00       	call   0x40b18b
40658f:	5e                   	pop    %esi
406590:	5d                   	pop    %ebp
406591:	c2 04 00             	ret    $0x4
406594:	6a 00                	push   $0x0
406596:	eb f2                	jmp    0x40658a
406598:	55                   	push   %ebp
406599:	8b ec                	mov    %esp,%ebp
40659b:	83 ec 10             	sub    $0x10,%esp
40659e:	53                   	push   %ebx
40659f:	56                   	push   %esi
4065a0:	8b c1                	mov    %ecx,%eax
4065a2:	57                   	push   %edi
4065a3:	8b 78 04             	mov    0x4(%eax),%edi
4065a6:	33 f6                	xor    %esi,%esi
4065a8:	89 45 f8             	mov    %eax,-0x8(%ebp)
4065ab:	89 7d f0             	mov    %edi,-0x10(%ebp)
4065ae:	8d 57 ff             	lea    -0x1(%edi),%edx
4065b1:	85 ff                	test   %edi,%edi
4065b3:	74 47                	je     0x4065fc
4065b5:	8b 45 08             	mov    0x8(%ebp),%eax
4065b8:	0f b7 00             	movzwl (%eax),%eax
4065bb:	89 45 fc             	mov    %eax,-0x4(%ebp)
4065be:	33 db                	xor    %ebx,%ebx
4065c0:	33 c9                	xor    %ecx,%ecx
4065c2:	66 85 c0             	test   %ax,%ax
4065c5:	74 2c                	je     0x4065f3
4065c7:	8b 45 f8             	mov    -0x8(%ebp),%eax
4065ca:	8b 7d 08             	mov    0x8(%ebp),%edi
4065cd:	8b 00                	mov    (%eax),%eax
4065cf:	0f b7 04 50          	movzwl (%eax,%edx,2),%eax
4065d3:	89 45 f4             	mov    %eax,-0xc(%ebp)
4065d6:	8b 45 fc             	mov    -0x4(%ebp),%eax
4065d9:	0f b7 c0             	movzwl %ax,%eax
4065dc:	66 39 45 f4          	cmp    %ax,-0xc(%ebp)
4065e0:	74 1f                	je     0x406601
4065e2:	43                   	inc    %ebx
4065e3:	0f b7 04 5f          	movzwl (%edi,%ebx,2),%eax
4065e7:	66 85 c0             	test   %ax,%ax
4065ea:	75 f0                	jne    0x4065dc
4065ec:	8b 7d f0             	mov    -0x10(%ebp),%edi
4065ef:	85 c9                	test   %ecx,%ecx
4065f1:	75 11                	jne    0x406604
4065f3:	8b c2                	mov    %edx,%eax
4065f5:	5f                   	pop    %edi
4065f6:	5e                   	pop    %esi
4065f7:	5b                   	pop    %ebx
4065f8:	c9                   	leave
4065f9:	c2 04 00             	ret    $0x4
4065fc:	83 c8 ff             	or     $0xffffffff,%eax
4065ff:	eb f4                	jmp    0x4065f5
406601:	41                   	inc    %ecx
406602:	eb de                	jmp    0x4065e2
406604:	8b 45 fc             	mov    -0x4(%ebp),%eax
406607:	4a                   	dec    %edx
406608:	46                   	inc    %esi
406609:	3b f7                	cmp    %edi,%esi
40660b:	72 b1                	jb     0x4065be
40660d:	eb ed                	jmp    0x4065fc
40660f:	55                   	push   %ebp
406610:	8b ec                	mov    %esp,%ebp
406612:	b8 00 00 01 00       	mov    $0x10000,%eax
406617:	e8 84 92 02 00       	call   0x42f8a0
40661c:	56                   	push   %esi
40661d:	6a 00                	push   $0x0
40661f:	8d 85 00 00 ff ff    	lea    -0x10000(%ebp),%eax
406625:	50                   	push   %eax
406626:	68 ff 7f 00 00       	push   $0x7fff
40662b:	ff 31                	push   (%ecx)
40662d:	8b f2                	mov    %edx,%esi
40662f:	ff 15 14 d3 48 00    	call   *0x48d314
406635:	8d 85 00 00 ff ff    	lea    -0x10000(%ebp),%eax
40663b:	50                   	push   %eax
40663c:	8b ce                	mov    %esi,%ecx
40663e:	e8 20 04 00 00       	call   0x406a63
406643:	68 54 dc 49 00       	push   $0x49dc54
406648:	8b ce                	mov    %esi,%ecx
40664a:	e8 22 ff ff ff       	call   0x406571
40664f:	5e                   	pop    %esi
406650:	c9                   	leave
406651:	c3                   	ret
406652:	55                   	push   %ebp
406653:	8b ec                	mov    %esp,%ebp
406655:	8b 45 08             	mov    0x8(%ebp),%eax
406658:	83 ec 10             	sub    $0x10,%esp
40665b:	8b 40 04             	mov    0x4(%eax),%eax
40665e:	53                   	push   %ebx
40665f:	56                   	push   %esi
406660:	8b 30                	mov    (%eax),%esi
406662:	57                   	push   %edi
406663:	8b ce                	mov    %esi,%ecx
406665:	e8 02 2d 00 00       	call   0x40936c
40666a:	8b 46 08             	mov    0x8(%esi),%eax
40666d:	8b 75 08             	mov    0x8(%ebp),%esi
406670:	8b 58 04             	mov    0x4(%eax),%ebx
406673:	8b 46 04             	mov    0x4(%esi),%eax
406676:	8b 48 04             	mov    0x4(%eax),%ecx
406679:	e8 08 6c 00 00       	call   0x40d286
40667e:	8b f8                	mov    %eax,%edi
406680:	85 ff                	test   %edi,%edi
406682:	78 49                	js     0x4066cd
406684:	3b fb                	cmp    %ebx,%edi
406686:	0f 8f 9c 65 07 00    	jg     0x47cc28
40668c:	2b df                	sub    %edi,%ebx
40668e:	53                   	push   %ebx
40668f:	8d 4d f0             	lea    -0x10(%ebp),%ecx
406692:	e8 78 04 00 00       	call   0x406b0f
406697:	8b 46 04             	mov    0x4(%esi),%eax
40669a:	8b 30                	mov    (%eax),%esi
40669c:	8b ce                	mov    %esi,%ecx
40669e:	e8 c9 2c 00 00       	call   0x40936c
4066a3:	53                   	push   %ebx
4066a4:	57                   	push   %edi
4066a5:	ff 76 08             	push   0x8(%esi)
4066a8:	8d 4d f0             	lea    -0x10(%ebp),%ecx
4066ab:	e8 39 03 00 00       	call   0x4069e9
4066b0:	8b 4d 0c             	mov    0xc(%ebp),%ecx
4066b3:	8d 45 f0             	lea    -0x10(%ebp),%eax
4066b6:	50                   	push   %eax
4066b7:	e8 ac 04 00 00       	call   0x406b68
4066bc:	8d 4d f0             	lea    -0x10(%ebp),%ecx
4066bf:	e8 73 64 00 00       	call   0x40cb37
4066c4:	5f                   	pop    %edi
4066c5:	5e                   	pop    %esi
4066c6:	33 c0                	xor    %eax,%eax
4066c8:	5b                   	pop    %ebx
4066c9:	c9                   	leave
4066ca:	c2 08 00             	ret    $0x8
4066cd:	33 ff                	xor    %edi,%edi
4066cf:	eb b3                	jmp    0x406684
4066d1:	55                   	push   %ebp
4066d2:	8b ec                	mov    %esp,%ebp
4066d4:	83 ec 68             	sub    $0x68,%esp
4066d7:	53                   	push   %ebx
4066d8:	56                   	push   %esi
4066d9:	57                   	push   %edi
4066da:	8d 4d 9c             	lea    -0x64(%ebp),%ecx
4066dd:	e8 15 71 00 00       	call   0x40d7f7
4066e2:	33 c0                	xor    %eax,%eax
4066e4:	89 45 e8             	mov    %eax,-0x18(%ebp)
4066e7:	89 45 d4             	mov    %eax,-0x2c(%ebp)
4066ea:	89 45 d8             	mov    %eax,-0x28(%ebp)
4066ed:	89 45 dc             	mov    %eax,-0x24(%ebp)
4066f0:	89 45 f4             	mov    %eax,-0xc(%ebp)
4066f3:	8b 45 14             	mov    0x14(%ebp),%eax
4066f6:	83 cf ff             	or     $0xffffffff,%edi
4066f9:	8b 00                	mov    (%eax),%eax
4066fb:	48                   	dec    %eax
4066fc:	8d 4d c0             	lea    -0x40(%ebp),%ecx
4066ff:	c7 45 d0 04 dc 49 00 	movl   $0x49dc04,-0x30(%ebp)
406706:	89 7d f0             	mov    %edi,-0x10(%ebp)
406709:	89 45 e0             	mov    %eax,-0x20(%ebp)
40670c:	e8 e6 70 00 00       	call   0x40d7f7
406711:	8b 5d 08             	mov    0x8(%ebp),%ebx
406714:	8b 75 0c             	mov    0xc(%ebp),%esi
406717:	8b 53 04             	mov    0x4(%ebx),%edx
40671a:	8b 06                	mov    (%esi),%eax
40671c:	6a 48                	push   $0x48
40671e:	8b 04 82             	mov    (%edx,%eax,4),%eax
406721:	59                   	pop    %ecx
406722:	0f b7 40 08          	movzwl 0x8(%eax),%eax
406726:	c7 45 e4 7f 00 00 00 	movl   $0x7f,-0x1c(%ebp)
40672d:	66 3b c1             	cmp    %cx,%ax
406730:	0f 84 17 01 00 00    	je     0x40684d
406736:	c7 45 ec 40 00 00 00 	movl   $0x40,-0x14(%ebp)
40673d:	c6 45 fb 00          	movb   $0x0,-0x5(%ebp)
406741:	66 85 c0             	test   %ax,%ax
406744:	0f 84 b8 f6 06 00    	je     0x475e02
40674a:	8b 06                	mov    (%esi),%eax
40674c:	8b 04 82             	mov    (%edx,%eax,4),%eax
40674f:	66 83 78 08 33       	cmpw   $0x33,0x8(%eax)
406754:	0f 85 e3 f6 06 00    	jne    0x475e3d
40675a:	ff 30                	push   (%eax)
40675c:	8d 4d c0             	lea    -0x40(%ebp),%ecx
40675f:	e8 89 07 00 00       	call   0x406eed
406764:	8b 45 d8             	mov    -0x28(%ebp),%eax
406767:	33 ff                	xor    %edi,%edi
406769:	85 c0                	test   %eax,%eax
40676b:	74 22                	je     0x40678f
40676d:	8b 75 d4             	mov    -0x2c(%ebp),%esi
406770:	8b d8                	mov    %eax,%ebx
406772:	8b 0c be             	mov    (%esi,%edi,4),%ecx
406775:	8d 55 c0             	lea    -0x40(%ebp),%edx
406778:	e8 a9 01 00 00       	call   0x406926
40677d:	84 c0                	test   %al,%al
40677f:	75 05                	jne    0x406786
406781:	47                   	inc    %edi
406782:	3b fb                	cmp    %ebx,%edi
406784:	72 ec                	jb     0x406772
406786:	8b 75 0c             	mov    0xc(%ebp),%esi
406789:	8b 5d 08             	mov    0x8(%ebp),%ebx
40678c:	8b 45 d8             	mov    -0x28(%ebp),%eax
40678f:	3b f8                	cmp    %eax,%edi
406791:	0f 85 ba f6 06 00    	jne    0x475e51
406797:	8d 45 c0             	lea    -0x40(%ebp),%eax
40679a:	50                   	push   %eax
40679b:	8d 4d d0             	lea    -0x30(%ebp),%ecx
40679e:	e8 2c fd ff ff       	call   0x4064cf
4067a3:	ff 06                	incl   (%esi)
4067a5:	8b 0e                	mov    (%esi),%ecx
4067a7:	8b 53 04             	mov    0x4(%ebx),%edx
4067aa:	8b 04 8a             	mov    (%edx,%ecx,4),%eax
4067ad:	66 83 78 08 41       	cmpw   $0x41,0x8(%eax)
4067b2:	75 48                	jne    0x4067fc
4067b4:	80 7d fb 00          	cmpb   $0x0,-0x5(%ebp)
4067b8:	75 42                	jne    0x4067fc
4067ba:	8d 41 01             	lea    0x1(%ecx),%eax
4067bd:	33 c9                	xor    %ecx,%ecx
4067bf:	8b f8                	mov    %eax,%edi
4067c1:	89 06                	mov    %eax,(%esi)
4067c3:	8b 04 ba             	mov    (%edx,%edi,4),%eax
4067c6:	0f b7 40 08          	movzwl 0x8(%eax),%eax
4067ca:	66 83 f8 47          	cmp    $0x47,%ax
4067ce:	0f 84 45 01 00 00    	je     0x406919
4067d4:	6a 48                	push   $0x48
4067d6:	5b                   	pop    %ebx
4067d7:	66 3b c3             	cmp    %bx,%ax
4067da:	8b 5d 08             	mov    0x8(%ebp),%ebx
4067dd:	0f 84 2e 01 00 00    	je     0x406911
4067e3:	66 3b 45 ec          	cmp    -0x14(%ebp),%ax
4067e7:	0f 84 e5 00 00 00    	je     0x4068d2
4067ed:	66 3b 45 e4          	cmp    -0x1c(%ebp),%ax
4067f1:	0f 84 28 01 00 00    	je     0x40691f
4067f7:	8d 47 01             	lea    0x1(%edi),%eax
4067fa:	eb c3                	jmp    0x4067bf
4067fc:	8b 7d f0             	mov    -0x10(%ebp),%edi
4067ff:	83 ff ff             	cmp    $0xffffffff,%edi
406802:	0f 85 17 01 00 00    	jne    0x40691f
406808:	8b 45 f4             	mov    -0xc(%ebp),%eax
40680b:	8b 0e                	mov    (%esi),%ecx
40680d:	40                   	inc    %eax