40746d:	83 c8 ff             	or     $0xffffffff,%eax
407470:	eb 47                	jmp    0x4074b9
407472:	8b 75 14             	mov    0x14(%ebp),%esi
407475:	85 f6                	test   %esi,%esi
407477:	74 0a                	je     0x407483
407479:	83 fe 01             	cmp    $0x1,%esi
40747c:	74 05                	je     0x407483
40747e:	83 fe 02             	cmp    $0x2,%esi
407481:	75 da                	jne    0x40745d
407483:	83 4d e4 ff          	orl    $0xffffffff,-0x1c(%ebp)
407487:	ff 75 08             	push   0x8(%ebp)
40748a:	e8 9b 42 00 00       	call   0x40b72a
40748f:	59                   	pop    %ecx
407490:	83 65 fc 00          	andl   $0x0,-0x4(%ebp)
407494:	56                   	push   %esi
407495:	ff 75 10             	push   0x10(%ebp)
407498:	ff 75 0c             	push   0xc(%ebp)
40749b:	ff 75 08             	push   0x8(%ebp)
40749e:	e8 02 01 00 00       	call   0x4075a5
4074a3:	83 c4 10             	add    $0x10,%esp
4074a6:	8b f0                	mov    %eax,%esi
4074a8:	89 75 e4             	mov    %esi,-0x1c(%ebp)
4074ab:	c7 45 fc fe ff ff ff 	movl   $0xfffffffe,-0x4(%ebp)
4074b2:	e8 0b 00 00 00       	call   0x4074c2
4074b7:	8b c6                	mov    %esi,%eax
4074b9:	e8 d8 c6 ff ff       	call   0x403b96
4074be:	c3                   	ret
4074bf:	8b 75 e4             	mov    -0x1c(%ebp),%esi
4074c2:	ff 75 08             	push   0x8(%ebp)
4074c5:	e8 74 42 00 00       	call   0x40b73e
4074ca:	59                   	pop    %ecx
4074cb:	c3                   	ret
4074cc:	8b ff                	mov    %edi,%edi
4074ce:	55                   	push   %ebp
4074cf:	8b ec                	mov    %esp,%ebp
4074d1:	83 7d 14 02          	cmpl   $0x2,0x14(%ebp)
4074d5:	57                   	push   %edi
4074d6:	75 07                	jne    0x4074df
4074d8:	32 c0                	xor    %al,%al
4074da:	e9 8d 00 00 00       	jmp    0x40756c
4074df:	8b 45 08             	mov    0x8(%ebp),%eax
4074e2:	8b 40 0c             	mov    0xc(%eax),%eax
4074e5:	a9 c0 04 00 00       	test   $0x4c0,%eax
4074ea:	74 ec                	je     0x4074d8
4074ec:	8b 45 08             	mov    0x8(%ebp),%eax
4074ef:	8b 40 0c             	mov    0xc(%eax),%eax
4074f2:	a8 06                	test   $0x6,%al
4074f4:	75 e2                	jne    0x4074d8
4074f6:	8b 45 08             	mov    0x8(%ebp),%eax
4074f9:	56                   	push   %esi
4074fa:	33 f6                	xor    %esi,%esi
4074fc:	39 70 08             	cmp    %esi,0x8(%eax)
4074ff:	7c 68                	jl     0x407569
407501:	8b 50 10             	mov    0x10(%eax),%edx
407504:	8b c2                	mov    %edx,%eax
407506:	8b ca                	mov    %edx,%ecx
407508:	83 e0 3f             	and    $0x3f,%eax
40750b:	c1 f9 06             	sar    $0x6,%ecx
40750e:	6b c0 30             	imul   $0x30,%eax,%eax
407511:	8b 0c 8d c0 41 42 00 	mov    0x4241c0(,%ecx,4),%ecx
407518:	f6 44 01 28 80       	testb  $0x80,0x28(%ecx,%eax,1)
40751d:	75 4a                	jne    0x407569
40751f:	80 7c 01 29 00       	cmpb   $0x0,0x29(%ecx,%eax,1)
407524:	75 43                	jne    0x407569
407526:	39 75 14             	cmp    %esi,0x14(%ebp)
407529:	75 44                	jne    0x40756f
40752b:	6a 01                	push   $0x1
40752d:	56                   	push   %esi
40752e:	56                   	push   %esi
40752f:	52                   	push   %edx
407530:	e8 dc 6d 00 00       	call   0x40e311
407535:	8b fa                	mov    %edx,%edi
407537:	83 c4 10             	add    $0x10,%esp
40753a:	8b c8                	mov    %eax,%ecx
40753c:	3b fe                	cmp    %esi,%edi
40753e:	7f 06                	jg     0x407546
407540:	7c 27                	jl     0x407569
407542:	3b ce                	cmp    %esi,%ecx
407544:	72 23                	jb     0x407569
407546:	8b 75 08             	mov    0x8(%ebp),%esi
407549:	8d 45 0c             	lea    0xc(%ebp),%eax
40754c:	50                   	push   %eax
40754d:	8b 46 08             	mov    0x8(%esi),%eax
407550:	99                   	cltd
407551:	2b c8                	sub    %eax,%ecx
407553:	1b fa                	sbb    %edx,%edi
407555:	57                   	push   %edi
407556:	51                   	push   %ecx
407557:	ff 75 10             	push   0x10(%ebp)
40755a:	ff 75 0c             	push   0xc(%ebp)
40755d:	e8 62 fe ff ff       	call   0x4073c4
407562:	83 c4 14             	add    $0x14,%esp
407565:	85 c0                	test   %eax,%eax
407567:	79 09                	jns    0x407572
407569:	32 c0                	xor    %al,%al
40756b:	5e                   	pop    %esi
40756c:	5f                   	pop    %edi
40756d:	5d                   	pop    %ebp
40756e:	c3                   	ret
40756f:	8b 75 08             	mov    0x8(%ebp),%esi
407572:	8b 46 04             	mov    0x4(%esi),%eax
407575:	8b 0e                	mov    (%esi),%ecx
407577:	2b c1                	sub    %ecx,%eax
407579:	99                   	cltd
40757a:	3b 55 10             	cmp    0x10(%ebp),%edx
40757d:	7f ea                	jg     0x407569
40757f:	8b 7d 0c             	mov    0xc(%ebp),%edi
407582:	7c 04                	jl     0x407588
407584:	3b c7                	cmp    %edi,%eax
407586:	77 e1                	ja     0x407569
407588:	8b 46 08             	mov    0x8(%esi),%eax
40758b:	99                   	cltd
40758c:	39 55 10             	cmp    %edx,0x10(%ebp)
40758f:	7f d8                	jg     0x407569
407591:	7c 04                	jl     0x407597
407593:	3b f8                	cmp    %eax,%edi
407595:	77 d2                	ja     0x407569
407597:	03 cf                	add    %edi,%ecx
407599:	b0 01                	mov    $0x1,%al
40759b:	89 0e                	mov    %ecx,(%esi)
40759d:	8b 4d 08             	mov    0x8(%ebp),%ecx
4075a0:	29 79 08             	sub    %edi,0x8(%ecx)
4075a3:	eb c6                	jmp    0x40756b
4075a5:	8b ff                	mov    %edi,%edi
4075a7:	55                   	push   %ebp
4075a8:	8b ec                	mov    %esp,%ebp
4075aa:	8b 45 08             	mov    0x8(%ebp),%eax
4075ad:	8b 40 0c             	mov    0xc(%eax),%eax
4075b0:	c1 e8 0d             	shr    $0xd,%eax
4075b3:	a8 01                	test   $0x1,%al
4075b5:	75 10                	jne    0x4075c7
4075b7:	e8 4b 07 00 00       	call   0x407d07
4075bc:	c7 00 16 00 00 00    	movl   $0x16,(%eax)
4075c2:	83 c8 ff             	or     $0xffffffff,%eax
4075c5:	5d                   	pop    %ebp
4075c6:	c3                   	ret
4075c7:	8b 45 08             	mov    0x8(%ebp),%eax
4075ca:	53                   	push   %ebx
4075cb:	56                   	push   %esi
4075cc:	57                   	push   %edi
4075cd:	6a f7                	push   $0xfffffff7
4075cf:	59                   	pop    %ecx
4075d0:	83 c0 0c             	add    $0xc,%eax
4075d3:	f0 21 08             	lock and %ecx,(%eax)
4075d6:	8b 75 14             	mov    0x14(%ebp),%esi
4075d9:	8b 7d 10             	mov    0x10(%ebp),%edi
4075dc:	8b 5d 0c             	mov    0xc(%ebp),%ebx
4075df:	56                   	push   %esi
4075e0:	57                   	push   %edi
4075e1:	53                   	push   %ebx
4075e2:	ff 75 08             	push   0x8(%ebp)
4075e5:	e8 e2 fe ff ff       	call   0x4074cc
4075ea:	83 c4 10             	add    $0x10,%esp
4075ed:	84 c0                	test   %al,%al
4075ef:	0f 85 82 00 00 00    	jne    0x407677
4075f5:	83 fe 01             	cmp    $0x1,%esi
4075f8:	75 0f                	jne    0x407609
4075fa:	ff 75 08             	push   0x8(%ebp)
4075fd:	e8 66 6b 00 00       	call   0x40e168
407602:	03 d8                	add    %eax,%ebx
407604:	59                   	pop    %ecx
407605:	13 fa                	adc    %edx,%edi
407607:	33 f6                	xor    %esi,%esi
407609:	ff 75 08             	push   0x8(%ebp)
40760c:	e8 15 65 00 00       	call   0x40db26
407611:	8b 45 08             	mov    0x8(%ebp),%eax
407614:	59                   	pop    %ecx
407615:	8b 48 04             	mov    0x4(%eax),%ecx
407618:	83 60 08 00          	andl   $0x0,0x8(%eax)
40761c:	89 08                	mov    %ecx,(%eax)
40761e:	8b 45 08             	mov    0x8(%ebp),%eax
407621:	8b 40 0c             	mov    0xc(%eax),%eax
407624:	c1 e8 02             	shr    $0x2,%eax
407627:	a8 01                	test   $0x1,%al
407629:	8b 45 08             	mov    0x8(%ebp),%eax
40762c:	74 0b                	je     0x407639
40762e:	6a fc                	push   $0xfffffffc
407630:	59                   	pop    %ecx
407631:	83 c0 0c             	add    $0xc,%eax
407634:	f0 21 08             	lock and %ecx,(%eax)
407637:	eb 21                	jmp    0x40765a
407639:	8b 40 0c             	mov    0xc(%eax),%eax
40763c:	83 e0 41             	and    $0x41,%eax
40763f:	3c 41                	cmp    $0x41,%al
407641:	75 17                	jne    0x40765a
407643:	8b 45 08             	mov    0x8(%ebp),%eax
407646:	8b 40 0c             	mov    0xc(%eax),%eax
407649:	c1 e8 08             	shr    $0x8,%eax
40764c:	a8 01                	test   $0x1,%al
40764e:	75 0a                	jne    0x40765a
407650:	8b 45 08             	mov    0x8(%ebp),%eax
407653:	c7 40 18 00 02 00 00 	movl   $0x200,0x18(%eax)
40765a:	8b 45 08             	mov    0x8(%ebp),%eax
40765d:	8b 40 10             	mov    0x10(%eax),%eax
407660:	56                   	push   %esi
407661:	57                   	push   %edi
407662:	53                   	push   %ebx
407663:	50                   	push   %eax
407664:	e8 a8 6c 00 00       	call   0x40e311
407669:	23 c2                	and    %edx,%eax
40766b:	83 c4 10             	add    $0x10,%esp
40766e:	83 f8 ff             	cmp    $0xffffffff,%eax
407671:	75 04                	jne    0x407677
407673:	0b c0                	or     %eax,%eax
407675:	eb 02                	jmp    0x407679
407677:	33 c0                	xor    %eax,%eax
407679:	5f                   	pop    %edi
40767a:	5e                   	pop    %esi
40767b:	5b                   	pop    %ebx
40767c:	5d                   	pop    %ebp
40767d:	c3                   	ret
40767e:	8b ff                	mov    %edi,%edi
407680:	55                   	push   %ebp
407681:	8b ec                	mov    %esp,%ebp
407683:	ff 75 10             	push   0x10(%ebp)
407686:	8b 45 0c             	mov    0xc(%ebp),%eax
407689:	99                   	cltd
40768a:	52                   	push   %edx
40768b:	50                   	push   %eax
40768c:	ff 75 08             	push   0x8(%ebp)
40768f:	e8 b1 fd ff ff       	call   0x407445
407694:	83 c4 10             	add    $0x10,%esp
407697:	5d                   	pop    %ebp
407698:	c3                   	ret
407699:	8b ff                	mov    %edi,%edi
40769b:	55                   	push   %ebp
40769c:	8b ec                	mov    %esp,%ebp
40769e:	53                   	push   %ebx
40769f:	56                   	push   %esi
4076a0:	57                   	push   %edi
4076a1:	8b 7d 08             	mov    0x8(%ebp),%edi
4076a4:	85 ff                	test   %edi,%edi
4076a6:	74 13                	je     0x4076bb
4076a8:	8b 4d 0c             	mov    0xc(%ebp),%ecx
4076ab:	85 c9                	test   %ecx,%ecx
4076ad:	74 0c                	je     0x4076bb
4076af:	8b 5d 10             	mov    0x10(%ebp),%ebx
4076b2:	85 db                	test   %ebx,%ebx
4076b4:	75 1b                	jne    0x4076d1
4076b6:	33 c0                	xor    %eax,%eax
4076b8:	66 89 07             	mov    %ax,(%edi)
4076bb:	e8 47 06 00 00       	call   0x407d07
4076c0:	6a 16                	push   $0x16
4076c2:	5e                   	pop    %esi
4076c3:	89 30                	mov    %esi,(%eax)
4076c5:	e8 64 05 00 00       	call   0x407c2e
4076ca:	5f                   	pop    %edi
4076cb:	8b c6                	mov    %esi,%eax
4076cd:	5e                   	pop    %esi
4076ce:	5b                   	pop    %ebx
4076cf:	5d                   	pop    %ebp
4076d0:	c3                   	ret
4076d1:	8b d7                	mov    %edi,%edx
4076d3:	33 f6                	xor    %esi,%esi
4076d5:	66 39 32             	cmp    %si,(%edx)
4076d8:	74 08                	je     0x4076e2
4076da:	83 c2 02             	add    $0x2,%edx
4076dd:	83 e9 01             	sub    $0x1,%ecx
4076e0:	75 f3                	jne    0x4076d5
4076e2:	85 c9                	test   %ecx,%ecx
4076e4:	74 d0                	je     0x4076b6
4076e6:	2b da                	sub    %edx,%ebx
4076e8:	0f b7 04 13          	movzwl (%ebx,%edx,1),%eax
4076ec:	66 89 02             	mov    %ax,(%edx)
4076ef:	8d 52 02             	lea    0x2(%edx),%edx
4076f2:	66 85 c0             	test   %ax,%ax
4076f5:	74 05                	je     0x4076fc
4076f7:	83 e9 01             	sub    $0x1,%ecx
4076fa:	75 ec                	jne    0x4076e8
4076fc:	85 c9                	test   %ecx,%ecx
4076fe:	75 ca                	jne    0x4076ca
407700:	33 c0                	xor    %eax,%eax
407702:	66 89 07             	mov    %ax,(%edi)
407705:	e8 fd 05 00 00       	call   0x407d07
40770a:	6a 22                	push   $0x22
40770c:	eb b4                	jmp    0x4076c2
40770e:	6a 0c                	push   $0xc
407710:	68 b8 1b 42 00       	push   $0x421bb8
407715:	e8 36 c4 ff ff       	call   0x403b50
40771a:	83 65 e4 00          	andl   $0x0,-0x1c(%ebp)
40771e:	8b 45 08             	mov    0x8(%ebp),%eax
407721:	ff 30                	push   (%eax)
407723:	e8 02 40 00 00       	call   0x40b72a
407728:	59                   	pop    %ecx
407729:	83 65 fc 00          	andl   $0x0,-0x4(%ebp)
40772d:	8b 4d 0c             	mov    0xc(%ebp),%ecx
407730:	e8 52 00 00 00       	call   0x407787
407735:	8b f0                	mov    %eax,%esi
407737:	89 75 e4             	mov    %esi,-0x1c(%ebp)
40773a:	c7 45 fc fe ff ff ff 	movl   $0xfffffffe,-0x4(%ebp)
407741:	e8 0d 00 00 00       	call   0x407753
407746:	8b c6                	mov    %esi,%eax
407748:	e8 49 c4 ff ff       	call   0x403b96
40774d:	c2 0c 00             	ret    $0xc
407750:	8b 75 e4             	mov    -0x1c(%ebp),%esi
407753:	8b 45 10             	mov    0x10(%ebp),%eax
407756:	ff 30                	push   (%eax)
407758:	e8 e1 3f 00 00       	call   0x40b73e
40775d:	59                   	pop    %ecx
40775e:	c3                   	ret
40775f:	8b ff                	mov    %edi,%edi
407761:	55                   	push   %ebp
407762:	8b ec                	mov    %esp,%ebp
407764:	83 ec 0c             	sub    $0xc,%esp
407767:	8b 45 08             	mov    0x8(%ebp),%eax
40776a:	8d 4d ff             	lea    -0x1(%ebp),%ecx
40776d:	89 45 f8             	mov    %eax,-0x8(%ebp)
407770:	89 45 f4             	mov    %eax,-0xc(%ebp)
407773:	8d 45 f8             	lea    -0x8(%ebp),%eax
407776:	50                   	push   %eax
407777:	ff 75 0c             	push   0xc(%ebp)
40777a:	8d 45 f4             	lea    -0xc(%ebp),%eax
40777d:	50                   	push   %eax
40777e:	e8 8b ff ff ff       	call   0x40770e
407783:	8b e5                	mov    %ebp,%esp
407785:	5d                   	pop    %ebp
407786:	c3                   	ret
407787:	8b ff                	mov    %edi,%edi
407789:	55                   	push   %ebp
40778a:	8b ec                	mov    %esp,%ebp
40778c:	51                   	push   %ecx
40778d:	51                   	push   %ecx
40778e:	56                   	push   %esi
40778f:	8b f1                	mov    %ecx,%esi
407791:	57                   	push   %edi
407792:	8b 06                	mov    (%esi),%eax
407794:	8b 38                	mov    (%eax),%edi
407796:	57                   	push   %edi
407797:	e8 cb 3f 00 00       	call   0x40b767
40779c:	88 45 fc             	mov    %al,-0x4(%ebp)
40779f:	8b 06                	mov    (%esi),%eax
4077a1:	ff 30                	push   (%eax)
4077a3:	8b 46 0c             	mov    0xc(%esi),%eax
4077a6:	ff 30                	push   (%eax)
4077a8:	8b 46 08             	mov    0x8(%esi),%eax
4077ab:	ff 30                	push   (%eax)
4077ad:	8b 46 04             	mov    0x4(%esi),%eax
4077b0:	ff 30                	push   (%eax)
4077b2:	e8 16 00 00 00       	call   0x4077cd
4077b7:	57                   	push   %edi
4077b8:	ff 75 fc             	push   -0x4(%ebp)
4077bb:	8b f0                	mov    %eax,%esi
4077bd:	e8 5a 40 00 00       	call   0x40b81c
4077c2:	83 c4 1c             	add    $0x1c,%esp
4077c5:	8b c6                	mov    %esi,%eax
4077c7:	5f                   	pop    %edi
4077c8:	5e                   	pop    %esi
4077c9:	8b e5                	mov    %ebp,%esp
4077cb:	5d                   	pop    %ebp
4077cc:	c3                   	ret