40a350:	33 ff                	xor    %edi,%edi
40a352:	8b cb                	mov    %ebx,%ecx
40a354:	8d 51 02             	lea    0x2(%ecx),%edx
40a357:	66 8b 01             	mov    (%ecx),%ax
40a35a:	83 c1 02             	add    $0x2,%ecx
40a35d:	66 3b c7             	cmp    %di,%ax
40a360:	75 f5                	jne    0x40a357
40a362:	2b ca                	sub    %edx,%ecx
40a364:	d1 f9                	sar    $1,%ecx
40a366:	8d 41 02             	lea    0x2(%ecx),%eax
40a369:	8d 0c 00             	lea    (%eax,%eax,1),%ecx
40a36c:	89 44 24 20          	mov    %eax,0x20(%esp)
40a370:	e8 5b 39 00 00       	call   0x40dcd0
40a375:	8b f8                	mov    %eax,%edi
40a377:	85 ff                	test   %edi,%edi
40a379:	0f 84 e7 23 01 00    	je     0x41c766
40a37f:	8b 54 24 20          	mov    0x20(%esp),%edx
40a383:	8b cf                	mov    %edi,%ecx
40a385:	53                   	push   %ebx
40a386:	e8 15 50 00 00       	call   0x40f3a0
40a38b:	33 c0                	xor    %eax,%eax
40a38d:	8b cf                	mov    %edi,%ecx
40a38f:	66 89 06             	mov    %ax,(%esi)
40a392:	e8 f7 fa ff ff       	call   0x409e8e
40a397:	80 7c 24 0e 00       	cmpb   $0x0,0xe(%esp)
40a39c:	8b f0                	mov    %eax,%esi
40a39e:	6a 22                	push   $0x22
40a3a0:	5b                   	pop    %ebx
40a3a1:	75 6d                	jne    0x40a410
40a3a3:	66 39 1e             	cmp    %bx,(%esi)
40a3a6:	0f 85 01 01 00 00    	jne    0x40a4ad
40a3ac:	bf 00 40 00 00       	mov    $0x4000,%edi
40a3b1:	8b cf                	mov    %edi,%ecx
40a3b3:	e8 18 39 00 00       	call   0x40dcd0
40a3b8:	8b d8                	mov    %eax,%ebx
40a3ba:	8b cf                	mov    %edi,%ecx
40a3bc:	89 5c 24 18          	mov    %ebx,0x18(%esp)
40a3c0:	e8 0b 39 00 00       	call   0x40dcd0
40a3c5:	89 44 24 1c          	mov    %eax,0x1c(%esp)
40a3c9:	85 db                	test   %ebx,%ebx
40a3cb:	0f 84 fe 23 01 00    	je     0x41c7cf
40a3d1:	85 c0                	test   %eax,%eax
40a3d3:	0f 84 f6 23 01 00    	je     0x41c7cf
40a3d9:	33 c0                	xor    %eax,%eax
40a3db:	6a 48                	push   $0x48
40a3dd:	50                   	push   %eax
40a3de:	8d 44 24 30          	lea    0x30(%esp),%eax
40a3e2:	50                   	push   %eax
40a3e3:	e8 d5 db 00 00       	call   0x417fbd
40a3e8:	83 c4 0c             	add    $0xc,%esp
40a3eb:	8d 4e 02             	lea    0x2(%esi),%ecx
40a3ee:	6a 22                	push   $0x22
40a3f0:	5f                   	pop    %edi
40a3f1:	8b d7                	mov    %edi,%edx
40a3f3:	e8 37 02 00 00       	call   0x40a62f
40a3f8:	85 c0                	test   %eax,%eax
40a3fa:	74 14                	je     0x40a410
40a3fc:	8d 58 02             	lea    0x2(%eax),%ebx
40a3ff:	8b d7                	mov    %edi,%edx
40a401:	8b cb                	mov    %ebx,%ecx
40a403:	e8 27 02 00 00       	call   0x40a62f
40a408:	85 c0                	test   %eax,%eax
40a40a:	0f 84 a3 00 00 00    	je     0x40a4b3
40a410:	8b 5c 24 14          	mov    0x14(%esp),%ebx
40a414:	6a 22                	push   $0x22
40a416:	58                   	pop    %eax
40a417:	66 39 06             	cmp    %ax,(%esi)
40a41a:	75 3b                	jne    0x40a457
40a41c:	83 c6 02             	add    $0x2,%esi
40a41f:	33 d2                	xor    %edx,%edx
40a421:	8b fe                	mov    %esi,%edi
40a423:	8d 4f 02             	lea    0x2(%edi),%ecx
40a426:	66 8b 07             	mov    (%edi),%ax
40a429:	83 c7 02             	add    $0x2,%edi
40a42c:	66 3b c2             	cmp    %dx,%ax
40a42f:	75 f5                	jne    0x40a426
40a431:	6a 22                	push   $0x22
40a433:	2b f9                	sub    %ecx,%edi
40a435:	8b ce                	mov    %esi,%ecx
40a437:	58                   	pop    %eax
40a438:	8b d0                	mov    %eax,%edx
40a43a:	d1 ff                	sar    $1,%edi
40a43c:	e8 b4 5d 00 00       	call   0x4101f5
40a441:	85 c0                	test   %eax,%eax
40a443:	74 12                	je     0x40a457
40a445:	33 c9                	xor    %ecx,%ecx
40a447:	8b d7                	mov    %edi,%edx
40a449:	66 89 08             	mov    %cx,(%eax)
40a44c:	83 c0 02             	add    $0x2,%eax
40a44f:	50                   	push   %eax
40a450:	8b ce                	mov    %esi,%ecx
40a452:	e8 e9 57 00 00       	call   0x40fc40
40a457:	8b ce                	mov    %esi,%ecx
40a459:	33 ff                	xor    %edi,%edi
40a45b:	8d 51 02             	lea    0x2(%ecx),%edx
40a45e:	66 8b 01             	mov    (%ecx),%ax
40a461:	83 c1 02             	add    $0x2,%ecx
40a464:	66 3b c7             	cmp    %di,%ax
40a467:	75 f5                	jne    0x40a45e
40a469:	2b ca                	sub    %edx,%ecx
40a46b:	d1 f9                	sar    $1,%ecx
40a46d:	6a 0a                	push   $0xa
40a46f:	58                   	pop    %eax
40a470:	66 89 04 4e          	mov    %ax,(%esi,%ecx,2)
40a474:	8b 44 24 10          	mov    0x10(%esp),%eax
40a478:	89 70 08             	mov    %esi,0x8(%eax)
40a47b:	8b cb                	mov    %ebx,%ecx
40a47d:	e8 de 37 00 00       	call   0x40dc60
40a482:	5f                   	pop    %edi
40a483:	5e                   	pop    %esi
40a484:	5b                   	pop    %ebx
40a485:	8b e5                	mov    %ebp,%esp
40a487:	5d                   	pop    %ebp
40a488:	c2 08 00             	ret    $0x8
40a48b:	c6 05 55 67 43 00 01 	movb   $0x1,0x436755
40a492:	8b 55 0c             	mov    0xc(%ebp),%edx
40a495:	8d 46 04             	lea    0x4(%esi),%eax
40a498:	50                   	push   %eax
40a499:	8b c6                	mov    %esi,%eax
40a49b:	8b ce                	mov    %esi,%ecx
40a49d:	2b c3                	sub    %ebx,%eax
40a49f:	d1 f8                	sar    $1,%eax
40a4a1:	2b d0                	sub    %eax,%edx
40a4a3:	e8 f8 4e 00 00       	call   0x40f3a0
40a4a8:	e9 e1 fd ff ff       	jmp    0x40a28e
40a4ad:	8b 5c 24 14          	mov    0x14(%esp),%ebx
40a4b1:	eb a4                	jmp    0x40a457
40a4b3:	0f b7 03             	movzwl (%ebx),%eax
40a4b6:	8b ce                	mov    %esi,%ecx
40a4b8:	89 44 24 20          	mov    %eax,0x20(%esp)
40a4bc:	33 c0                	xor    %eax,%eax
40a4be:	6a 26                	push   $0x26
40a4c0:	5a                   	pop    %edx
40a4c1:	66 89 03             	mov    %ax,(%ebx)
40a4c4:	e8 66 01 00 00       	call   0x40a62f
40a4c9:	85 c0                	test   %eax,%eax
40a4cb:	0f 85 f2 22 01 00    	jne    0x41c7c3
40a4d1:	6a 3c                	push   $0x3c
40a4d3:	5a                   	pop    %edx
40a4d4:	8b ce                	mov    %esi,%ecx
40a4d6:	e8 54 01 00 00       	call   0x40a62f
40a4db:	85 c0                	test   %eax,%eax
40a4dd:	0f 85 e0 22 01 00    	jne    0x41c7c3
40a4e3:	6a 3e                	push   $0x3e
40a4e5:	5a                   	pop    %edx
40a4e6:	8b ce                	mov    %esi,%ecx
40a4e8:	e8 42 01 00 00       	call   0x40a62f
40a4ed:	85 c0                	test   %eax,%eax
40a4ef:	0f 85 ce 22 01 00    	jne    0x41c7c3
40a4f5:	6a 40                	push   $0x40
40a4f7:	5a                   	pop    %edx
40a4f8:	8b ce                	mov    %esi,%ecx
40a4fa:	e8 30 01 00 00       	call   0x40a62f
40a4ff:	85 c0                	test   %eax,%eax
40a501:	0f 85 bc 22 01 00    	jne    0x41c7c3
40a507:	6a 5e                	push   $0x5e
40a509:	5a                   	pop    %edx
40a50a:	8b ce                	mov    %esi,%ecx
40a50c:	e8 1e 01 00 00       	call   0x40a62f
40a511:	85 c0                	test   %eax,%eax
40a513:	0f 85 aa 22 01 00    	jne    0x41c7c3
40a519:	6a 7c                	push   $0x7c
40a51b:	5a                   	pop    %edx
40a51c:	8b ce                	mov    %esi,%ecx
40a51e:	e8 0c 01 00 00       	call   0x40a62f
40a523:	85 c0                	test   %eax,%eax
40a525:	0f 85 98 22 01 00    	jne    0x41c7c3
40a52b:	0f b7 06             	movzwl (%esi),%eax
40a52e:	8b fe                	mov    %esi,%edi
40a530:	66 85 c0             	test   %ax,%ax
40a533:	0f 84 8a 22 01 00    	je     0x41c7c3
40a539:	8b c8                	mov    %eax,%ecx
40a53b:	51                   	push   %ecx
40a53c:	ff 15 ac a3 44 00    	call   *0x44a3ac
40a542:	59                   	pop    %ecx
40a543:	85 c0                	test   %eax,%eax
40a545:	75 12                	jne    0x40a559
40a547:	83 c7 02             	add    $0x2,%edi
40a54a:	0f b7 07             	movzwl (%edi),%eax
40a54d:	8b c8                	mov    %eax,%ecx
40a54f:	66 85 c0             	test   %ax,%ax
40a552:	75 e7                	jne    0x40a53b
40a554:	e9 6a 22 01 00       	jmp    0x41c7c3
40a559:	8b 44 24 18          	mov    0x18(%esp),%eax
40a55d:	8b ce                	mov    %esi,%ecx
40a55f:	8b 7c 24 1c          	mov    0x1c(%esp),%edi
40a563:	89 44 24 60          	mov    %eax,0x60(%esp)
40a567:	33 c0                	xor    %eax,%eax
40a569:	89 7c 24 64          	mov    %edi,0x64(%esp)
40a56d:	89 44 24 5c          	mov    %eax,0x5c(%esp)
40a571:	8d 51 02             	lea    0x2(%ecx),%edx
40a574:	66 8b 01             	mov    (%ecx),%ax
40a577:	83 c1 02             	add    $0x2,%ecx
40a57a:	66 3b 44 24 24       	cmp    0x24(%esp),%ax
40a57f:	75 f3                	jne    0x40a574
40a581:	2b ca                	sub    %edx,%ecx
40a583:	b8 00 20 00 00       	mov    $0x2000,%eax
40a588:	d1 f9                	sar    $1,%ecx
40a58a:	3b c8                	cmp    %eax,%ecx
40a58c:	0f 83 e2 21 01 00    	jae    0x41c774
40a592:	8b 4c 24 18          	mov    0x18(%esp),%ecx
40a596:	8b d0                	mov    %eax,%edx
40a598:	56                   	push   %esi
40a599:	e8 02 4e 00 00       	call   0x40f3a0
40a59e:	68 4c 23 40 00       	push   $0x40234c
40a5a3:	ba 00 20 00 00       	mov    $0x2000,%edx
40a5a8:	8b cf                	mov    %edi,%ecx
40a5aa:	e8 f1 4d 00 00       	call   0x40f3a0
40a5af:	8b 44 24 20          	mov    0x20(%esp),%eax
40a5b3:	8d 4c 24 28          	lea    0x28(%esp),%ecx
40a5b7:	66 89 03             	mov    %ax,(%ebx)
40a5ba:	8b 5c 24 14          	mov    0x14(%esp),%ebx
40a5be:	8b d3                	mov    %ebx,%edx
40a5c0:	68 03 20 00 00       	push   $0x2003
40a5c5:	e8 46 4e 00 00       	call   0x40f410
40a5ca:	8b 4c 24 18          	mov    0x18(%esp),%ecx
40a5ce:	8b f8                	mov    %eax,%edi
40a5d0:	e8 8b 36 00 00       	call   0x40dc60
40a5d5:	8b 4c 24 1c          	mov    0x1c(%esp),%ecx
40a5d9:	e8 82 36 00 00       	call   0x40dc60
40a5de:	85 ff                	test   %edi,%edi
40a5e0:	0f 84 2e fe ff ff    	je     0x40a414
40a5e6:	e9 ad 21 01 00       	jmp    0x41c798
40a5eb:	83 f9 66             	cmp    $0x66,%ecx
40a5ee:	0f 84 b9 1f 01 00    	je     0x41c5ad
40a5f4:	83 f9 76             	cmp    $0x76,%ecx
40a5f7:	0f 84 0d 20 01 00    	je     0x41c60a
40a5fd:	83 f9 74             	cmp    $0x74,%ecx
40a600:	0f 84 73 20 01 00    	je     0x41c679
40a606:	8b 55 0c             	mov    0xc(%ebp),%edx
40a609:	8d 7e 04             	lea    0x4(%esi),%edi
40a60c:	8b c6                	mov    %esi,%eax
40a60e:	2b c3                	sub    %ebx,%eax
40a610:	d1 f8                	sar    $1,%eax
40a612:	2b d0                	sub    %eax,%edx
40a614:	83 f9 73             	cmp    $0x73,%ecx
40a617:	75 05                	jne    0x40a61e
40a619:	c6 44 24 0e 01       	movb   $0x1,0xe(%esp)
40a61e:	57                   	push   %edi
40a61f:	8b ce                	mov    %esi,%ecx
40a621:	e8 7a 4d 00 00       	call   0x40f3a0
40a626:	8b 7c 24 10          	mov    0x10(%esp),%edi
40a62a:	e9 5f fc ff ff       	jmp    0x40a28e
40a62f:	85 c9                	test   %ecx,%ecx
40a631:	74 0b                	je     0x40a63e
40a633:	52                   	push   %edx
40a634:	51                   	push   %ecx
40a635:	ff 15 b0 a3 44 00    	call   *0x44a3b0
40a63b:	59                   	pop    %ecx
40a63c:	59                   	pop    %ecx
40a63d:	c3                   	ret
40a63e:	33 c0                	xor    %eax,%eax
40a640:	c3                   	ret
40a641:	8b ff                	mov    %edi,%edi
40a643:	55                   	push   %ebp
40a644:	8b ec                	mov    %esp,%ebp
40a646:	51                   	push   %ecx
40a647:	56                   	push   %esi
40a648:	33 c0                	xor    %eax,%eax
40a64a:	8b f1                	mov    %ecx,%esi
40a64c:	57                   	push   %edi
40a64d:	38 86 0c 02 00 00    	cmp    %al,0x20c(%esi)
40a653:	0f 95 c0             	setne  %al
40a656:	48                   	dec    %eax
40a657:	25 1d 81 ff ff       	and    $0xffff811d,%eax
40a65c:	05 e7 7f 00 00       	add    $0x7fe7,%eax
40a661:	50                   	push   %eax
40a662:	e8 89 3d 00 00       	call   0x40e3f0
40a667:	8b f8                	mov    %eax,%edi
40a669:	85 ff                	test   %edi,%edi
40a66b:	0f 88 2d 22 01 00    	js     0x41c89e
40a671:	8b 8e 08 02 00 00    	mov    0x208(%esi),%ecx
40a677:	85 c9                	test   %ecx,%ecx
40a679:	74 21                	je     0x40a69c
40a67b:	ff 75 08             	push   0x8(%ebp)
40a67e:	8b 96 10 02 00 00    	mov    0x210(%esi),%edx
40a684:	e8 17 4d 00 00       	call   0x40f3a0
40a689:	8b f0                	mov    %eax,%esi
40a68b:	85 f6                	test   %esi,%esi
40a68d:	0f 88 23 22 01 00    	js     0x41c8b6
40a693:	8b c6                	mov    %esi,%eax
40a695:	5f                   	pop    %edi
40a696:	5e                   	pop    %esi
40a697:	59                   	pop    %ecx
40a698:	5d                   	pop    %ebp
40a699:	c2 04 00             	ret    $0x4
40a69c:	8b ce                	mov    %esi,%ecx
40a69e:	eb db                	jmp    0x40a67b
40a6a0:	8b ff                	mov    %edi,%edi
40a6a2:	53                   	push   %ebx
40a6a3:	56                   	push   %esi
40a6a4:	57                   	push   %edi
40a6a5:	68 f0 4a 44 00       	push   $0x444af0
40a6aa:	33 db                	xor    %ebx,%ebx
40a6ac:	68 2c 23 40 00       	push   $0x40232c
40a6b1:	8b fb                	mov    %ebx,%edi
40a6b3:	ff 15 40 a4 44 00    	call   *0x44a440
40a6b9:	59                   	pop    %ecx
40a6ba:	59                   	pop    %ecx
40a6bb:	85 c0                	test   %eax,%eax
40a6bd:	0f 84 09 22 01 00    	je     0x41c8cc
40a6c3:	6a 2c                	push   $0x2c
40a6c5:	59                   	pop    %ecx
40a6c6:	e8 c5 14 00 00       	call   0x40bb90
40a6cb:	8b f0                	mov    %eax,%esi
40a6cd:	85 ff                	test   %edi,%edi
40a6cf:	0f 85 07 22 01 00    	jne    0x41c8dc
40a6d5:	33 c9                	xor    %ecx,%ecx
40a6d7:	e8 94 25 00 00       	call   0x40cc70
40a6dc:	6a 2c                	push   $0x2c
40a6de:	5a                   	pop    %edx
40a6df:	e8 23 f2 ff ff       	call   0x409907
40a6e4:	84 c0                	test   %al,%al
40a6e6:	0f 85 0f 22 01 00    	jne    0x41c8fb
40a6ec:	8b fb                	mov    %ebx,%edi
40a6ee:	38 1d 55 67 43 00    	cmp    %bl,0x436755
40a6f4:	74 1a                	je     0x40a710
40a6f6:	68 6c 22 40 00       	push   $0x40226c
40a6fb:	68 f0 4a 44 00       	push   $0x444af0
40a700:	ff 15 40 a4 44 00    	call   *0x44a440
40a706:	59                   	pop    %ecx
40a707:	59                   	pop    %ecx
40a708:	85 c0                	test   %eax,%eax
40a70a:	0f 84 a7 00 00 00    	je     0x40a7b7
40a710:	53                   	push   %ebx
40a711:	33 d2                	xor    %edx,%edx
40a713:	33 c9                	xor    %ecx,%ecx
40a715:	e8 f6 27 00 00       	call   0x40cf10
40a71a:	33 c9                	xor    %ecx,%ecx
40a71c:	e8 23 5d 00 00       	call   0x410444
40a721:	89 46 3c             	mov    %eax,0x3c(%esi)
40a724:	85 c0                	test   %eax,%eax
40a726:	74 08                	je     0x40a730
40a728:	85 ff                	test   %edi,%edi
40a72a:	0f 85 8f 00 00 00    	jne    0x40a7bf
40a730:	6a 2c                	push   $0x2c
40a732:	59                   	pop    %ecx
40a733:	e8 8c 01 00 00       	call   0x40a8c4
40a738:	89 46 40             	mov    %eax,0x40(%esi)
40a73b:	85 c0                	test   %eax,%eax
40a73d:	0f 84 c6 21 01 00    	je     0x41c909
40a743:	a1 cc 65 43 00       	mov    0x4365cc,%eax
40a748:	66 39 18             	cmp    %bx,(%eax)
40a74b:	74 28                	je     0x40a775
40a74d:	33 c9                	xor    %ecx,%ecx
40a74f:	e8 1c 25 00 00       	call   0x40cc70
40a754:	bf f0 4a 44 00       	mov    $0x444af0,%edi
40a759:	57                   	push   %edi
40a75a:	68 74 22 40 00       	push   $0x402274
40a75f:	ff 15 40 a4 44 00    	call   *0x44a440