4061ba:	83 4e 0c 20          	orl    $0x20,0xc(%esi)
4061be:	8b 45 fc             	mov    -0x4(%ebp),%eax
4061c1:	eb 02                	jmp    0x4061c5
4061c3:	8b c7                	mov    %edi,%eax
4061c5:	2b c3                	sub    %ebx,%eax
4061c7:	33 d2                	xor    %edx,%edx
4061c9:	f7 75 0c             	divl   0xc(%ebp)
4061cc:	eb e7                	jmp    0x4061b5
4061ce:	56                   	push   %esi
4061cf:	8b 74 24 0c          	mov    0xc(%esp),%esi
4061d3:	57                   	push   %edi
4061d4:	56                   	push   %esi
4061d5:	e8 ec f6 ff ff       	call   0x4058c6
4061da:	ff 4e 04             	decl   0x4(%esi)
4061dd:	59                   	pop    %ecx
4061de:	78 0f                	js     0x4061ef
4061e0:	8b 0e                	mov    (%esi),%ecx
4061e2:	8a 44 24 0c          	mov    0xc(%esp),%al
4061e6:	0f b6 f8             	movzbl %al,%edi
4061e9:	88 01                	mov    %al,(%ecx)
4061eb:	ff 06                	incl   (%esi)
4061ed:	eb 0e                	jmp    0x4061fd
4061ef:	56                   	push   %esi
4061f0:	ff 74 24 10          	push   0x10(%esp)
4061f4:	e8 8b 1b 00 00       	call   0x407d84
4061f9:	59                   	pop    %ecx
4061fa:	8b f8                	mov    %eax,%edi
4061fc:	59                   	pop    %ecx
4061fd:	56                   	push   %esi
4061fe:	e8 15 f7 ff ff       	call   0x405918
406203:	59                   	pop    %ecx
406204:	8b c7                	mov    %edi,%eax
406206:	5f                   	pop    %edi
406207:	5e                   	pop    %esi
406208:	c3                   	ret
406209:	56                   	push   %esi
40620a:	ff 74 24 0c          	push   0xc(%esp)
40620e:	e8 b3 f6 ff ff       	call   0x4058c6
406213:	ff 74 24 10          	push   0x10(%esp)
406217:	ff 74 24 10          	push   0x10(%esp)
40621b:	e8 12 00 00 00       	call   0x406232
406220:	ff 74 24 18          	push   0x18(%esp)
406224:	8b f0                	mov    %eax,%esi
406226:	e8 ed f6 ff ff       	call   0x405918
40622b:	83 c4 10             	add    $0x10,%esp
40622e:	8b c6                	mov    %esi,%eax
406230:	5e                   	pop    %esi
406231:	c3                   	ret
406232:	53                   	push   %ebx
406233:	8b 5c 24 08          	mov    0x8(%esp),%ebx
406237:	83 fb ff             	cmp    $0xffffffff,%ebx
40623a:	56                   	push   %esi
40623b:	74 41                	je     0x40627e
40623d:	8b 74 24 10          	mov    0x10(%esp),%esi
406241:	8b 46 0c             	mov    0xc(%esi),%eax
406244:	a8 01                	test   $0x1,%al
406246:	75 08                	jne    0x406250
406248:	a8 80                	test   $0x80,%al
40624a:	74 32                	je     0x40627e
40624c:	a8 02                	test   $0x2,%al
40624e:	75 2e                	jne    0x40627e
406250:	83 7e 08 00          	cmpl   $0x0,0x8(%esi)
406254:	75 07                	jne    0x40625d
406256:	56                   	push   %esi
406257:	e8 27 34 00 00       	call   0x409683
40625c:	59                   	pop    %ecx
40625d:	8b 06                	mov    (%esi),%eax
40625f:	3b 46 08             	cmp    0x8(%esi),%eax
406262:	75 09                	jne    0x40626d
406264:	83 7e 04 00          	cmpl   $0x0,0x4(%esi)
406268:	75 14                	jne    0x40627e
40626a:	40                   	inc    %eax
40626b:	89 06                	mov    %eax,(%esi)
40626d:	f6 46 0c 40          	testb  $0x40,0xc(%esi)
406271:	74 11                	je     0x406284
406273:	ff 0e                	decl   (%esi)
406275:	8b 06                	mov    (%esi),%eax
406277:	38 18                	cmp    %bl,(%eax)
406279:	74 0f                	je     0x40628a
40627b:	40                   	inc    %eax
40627c:	89 06                	mov    %eax,(%esi)
40627e:	83 c8 ff             	or     $0xffffffff,%eax
406281:	5e                   	pop    %esi
406282:	5b                   	pop    %ebx
406283:	c3                   	ret
406284:	ff 0e                	decl   (%esi)
406286:	8b 06                	mov    (%esi),%eax
406288:	88 18                	mov    %bl,(%eax)
40628a:	8b 46 0c             	mov    0xc(%esi),%eax
40628d:	ff 46 04             	incl   0x4(%esi)
406290:	24 ef                	and    $0xef,%al
406292:	0c 01                	or     $0x1,%al
406294:	89 46 0c             	mov    %eax,0xc(%esi)
406297:	8b c3                	mov    %ebx,%eax
406299:	25 ff 00 00 00       	and    $0xff,%eax
40629e:	eb e1                	jmp    0x406281
4062a0:	56                   	push   %esi
4062a1:	8b 74 24 08          	mov    0x8(%esp),%esi
4062a5:	57                   	push   %edi
4062a6:	56                   	push   %esi
4062a7:	e8 1a f6 ff ff       	call   0x4058c6
4062ac:	ff 4e 04             	decl   0x4(%esi)
4062af:	59                   	pop    %ecx
4062b0:	78 0a                	js     0x4062bc
4062b2:	8b 06                	mov    (%esi),%eax
4062b4:	0f b6 38             	movzbl (%eax),%edi
4062b7:	40                   	inc    %eax
4062b8:	89 06                	mov    %eax,(%esi)
4062ba:	eb 09                	jmp    0x4062c5
4062bc:	56                   	push   %esi
4062bd:	e8 05 34 00 00       	call   0x4096c7
4062c2:	59                   	pop    %ecx
4062c3:	8b f8                	mov    %eax,%edi
4062c5:	56                   	push   %esi
4062c6:	e8 4d f6 ff ff       	call   0x405918
4062cb:	59                   	pop    %ecx
4062cc:	8b c7                	mov    %edi,%eax
4062ce:	5f                   	pop    %edi
4062cf:	5e                   	pop    %esi
4062d0:	c3                   	ret
4062d1:	ff 74 24 04          	push   0x4(%esp)
4062d5:	e8 c9 34 00 00       	call   0x4097a3
4062da:	59                   	pop    %ecx
4062db:	8b 4c 24 08          	mov    0x8(%esp),%ecx
4062df:	89 01                	mov    %eax,(%ecx)
4062e1:	89 51 04             	mov    %edx,0x4(%ecx)
4062e4:	8b 11                	mov    (%ecx),%edx
4062e6:	83 c8 ff             	or     $0xffffffff,%eax
4062e9:	23 51 04             	and    0x4(%ecx),%edx
4062ec:	3b d0                	cmp    %eax,%edx
4062ee:	74 02                	je     0x4062f2
4062f0:	33 c0                	xor    %eax,%eax
4062f2:	c3                   	ret
4062f3:	55                   	push   %ebp
4062f4:	8b ec                	mov    %esp,%ebp
4062f6:	56                   	push   %esi
4062f7:	ff 75 08             	push   0x8(%ebp)
4062fa:	e8 c7 f5 ff ff       	call   0x4058c6
4062ff:	ff 75 10             	push   0x10(%ebp)
406302:	ff 75 0c             	push   0xc(%ebp)
406305:	ff 75 08             	push   0x8(%ebp)
406308:	e8 12 00 00 00       	call   0x40631f
40630d:	ff 75 08             	push   0x8(%ebp)
406310:	8b f0                	mov    %eax,%esi
406312:	e8 01 f6 ff ff       	call   0x405918
406317:	83 c4 14             	add    $0x14,%esp
40631a:	8b c6                	mov    %esi,%eax
40631c:	5e                   	pop    %esi
40631d:	5d                   	pop    %ebp
40631e:	c3                   	ret
40631f:	56                   	push   %esi
406320:	8b 74 24 08          	mov    0x8(%esp),%esi
406324:	57                   	push   %edi
406325:	8b 46 0c             	mov    0xc(%esi),%eax
406328:	a8 83                	test   $0x83,%al
40632a:	74 6f                	je     0x40639b
40632c:	8b 7c 24 14          	mov    0x14(%esp),%edi
406330:	85 ff                	test   %edi,%edi
406332:	74 0a                	je     0x40633e
406334:	83 ff 01             	cmp    $0x1,%edi
406337:	74 05                	je     0x40633e
406339:	83 ff 02             	cmp    $0x2,%edi
40633c:	75 5d                	jne    0x40639b
40633e:	24 ef                	and    $0xef,%al
406340:	83 ff 01             	cmp    $0x1,%edi
406343:	89 46 0c             	mov    %eax,0xc(%esi)
406346:	75 0d                	jne    0x406355
406348:	56                   	push   %esi
406349:	e8 e5 36 00 00       	call   0x409a33
40634e:	01 44 24 14          	add    %eax,0x14(%esp)
406352:	59                   	pop    %ecx
406353:	33 ff                	xor    %edi,%edi
406355:	56                   	push   %esi
406356:	e8 75 01 00 00       	call   0x4064d0
40635b:	8b 46 0c             	mov    0xc(%esi),%eax
40635e:	59                   	pop    %ecx
40635f:	a8 80                	test   $0x80,%al
406361:	74 07                	je     0x40636a
406363:	24 fc                	and    $0xfc,%al
406365:	89 46 0c             	mov    %eax,0xc(%esi)
406368:	eb 14                	jmp    0x40637e
40636a:	a8 01                	test   $0x1,%al
40636c:	74 10                	je     0x40637e
40636e:	a8 08                	test   $0x8,%al
406370:	74 0c                	je     0x40637e
406372:	f6 c4 04             	test   $0x4,%ah
406375:	75 07                	jne    0x40637e
406377:	c7 46 18 00 02 00 00 	movl   $0x200,0x18(%esi)
40637e:	57                   	push   %edi
40637f:	ff 74 24 14          	push   0x14(%esp)
406383:	ff 76 10             	push   0x10(%esi)
406386:	e8 d0 35 00 00       	call   0x40995b
40638b:	83 c4 0c             	add    $0xc,%esp
40638e:	33 c9                	xor    %ecx,%ecx
406390:	83 f8 ff             	cmp    $0xffffffff,%eax
406393:	0f 95 c1             	setne  %cl
406396:	49                   	dec    %ecx
406397:	8b c1                	mov    %ecx,%eax
406399:	eb 0e                	jmp    0x4063a9
40639b:	e8 3e 0d 00 00       	call   0x4070de
4063a0:	c7 00 16 00 00 00    	movl   $0x16,(%eax)
4063a6:	83 c8 ff             	or     $0xffffffff,%eax
4063a9:	5f                   	pop    %edi
4063aa:	5e                   	pop    %esi
4063ab:	c3                   	ret
4063ac:	8b 44 24 08          	mov    0x8(%esp),%eax
4063b0:	6a 00                	push   $0x0
4063b2:	ff 70 04             	push   0x4(%eax)
4063b5:	ff 30                	push   (%eax)
4063b7:	ff 74 24 10          	push   0x10(%esp)
4063bb:	e8 d4 37 00 00       	call   0x409b94
4063c0:	83 c4 10             	add    $0x10,%esp
4063c3:	c3                   	ret
4063c4:	55                   	push   %ebp
4063c5:	8b ec                	mov    %esp,%ebp
4063c7:	51                   	push   %ecx
4063c8:	83 65 fc 00          	andl   $0x0,-0x4(%ebp)
4063cc:	53                   	push   %ebx
4063cd:	8b 5d 10             	mov    0x10(%ebp),%ebx
4063d0:	57                   	push   %edi
4063d1:	8b 7d 14             	mov    0x14(%ebp),%edi
4063d4:	83 fb 04             	cmp    $0x4,%ebx
4063d7:	74 1b                	je     0x4063f4
4063d9:	83 ff 02             	cmp    $0x2,%edi
4063dc:	72 11                	jb     0x4063ef
4063de:	81 ff ff ff ff 7f    	cmp    $0x7fffffff,%edi
4063e4:	77 09                	ja     0x4063ef
4063e6:	85 db                	test   %ebx,%ebx
4063e8:	74 0a                	je     0x4063f4
4063ea:	83 fb 40             	cmp    $0x40,%ebx
4063ed:	74 05                	je     0x4063f4
4063ef:	83 c8 ff             	or     $0xffffffff,%eax
4063f2:	eb 7b                	jmp    0x40646f
4063f4:	56                   	push   %esi
4063f5:	8b 75 08             	mov    0x8(%ebp),%esi
4063f8:	56                   	push   %esi
4063f9:	83 e7 fe             	and    $0xfffffffe,%edi
4063fc:	e8 c5 f4 ff ff       	call   0x4058c6
406401:	56                   	push   %esi
406402:	e8 c9 00 00 00       	call   0x4064d0
406407:	56                   	push   %esi
406408:	e8 47 38 00 00       	call   0x409c54
40640d:	66 81 66 0c f3 c2    	andw   $0xc2f3,0xc(%esi)
406413:	8b 4e 0c             	mov    0xc(%esi),%ecx
406416:	83 c4 0c             	add    $0xc,%esp
406419:	f6 c3 04             	test   $0x4,%bl
40641c:	74 0e                	je     0x40642c
40641e:	83 c9 04             	or     $0x4,%ecx
406421:	6a 02                	push   $0x2
406423:	89 4e 0c             	mov    %ecx,0xc(%esi)
406426:	8d 46 14             	lea    0x14(%esi),%eax
406429:	5f                   	pop    %edi
40642a:	eb 2c                	jmp    0x406458
40642c:	8b 45 0c             	mov    0xc(%ebp),%eax
40642f:	85 c0                	test   %eax,%eax
406431:	75 1f                	jne    0x406452
406433:	57                   	push   %edi
406434:	e8 54 0f 00 00       	call   0x40738d
406439:	85 c0                	test   %eax,%eax
40643b:	59                   	pop    %ecx
40643c:	75 0c                	jne    0x40644a
40643e:	ff 05 f0 17 41 00    	incl   0x4117f0
406444:	83 4d fc ff          	orl    $0xffffffff,-0x4(%ebp)
406448:	eb 1a                	jmp    0x406464
40644a:	66 81 4e 0c 08 04    	orw    $0x408,0xc(%esi)
406450:	eb 06                	jmp    0x406458
406452:	80 cd 05             	or     $0x5,%ch
406455:	89 4e 0c             	mov    %ecx,0xc(%esi)
406458:	83 66 04 00          	andl   $0x0,0x4(%esi)
40645c:	89 7e 18             	mov    %edi,0x18(%esi)
40645f:	89 46 08             	mov    %eax,0x8(%esi)
406462:	89 06                	mov    %eax,(%esi)
406464:	56                   	push   %esi
406465:	e8 ae f4 ff ff       	call   0x405918
40646a:	8b 45 fc             	mov    -0x4(%ebp),%eax
40646d:	59                   	pop    %ecx
40646e:	5e                   	pop    %esi
40646f:	5f                   	pop    %edi
406470:	5b                   	pop    %ebx
406471:	c9                   	leave
406472:	c3                   	ret
406473:	56                   	push   %esi
406474:	8b 74 24 08          	mov    0x8(%esp),%esi
406478:	85 f6                	test   %esi,%esi
40647a:	75 09                	jne    0x406485
40647c:	56                   	push   %esi
40647d:	e8 b3 00 00 00       	call   0x406535
406482:	59                   	pop    %ecx
406483:	5e                   	pop    %esi
406484:	c3                   	ret
406485:	57                   	push   %edi
406486:	56                   	push   %esi
406487:	e8 3a f4 ff ff       	call   0x4058c6
40648c:	56                   	push   %esi
40648d:	e8 10 00 00 00       	call   0x4064a2
406492:	56                   	push   %esi
406493:	8b f8                	mov    %eax,%edi
406495:	e8 7e f4 ff ff       	call   0x405918
40649a:	83 c4 0c             	add    $0xc,%esp
40649d:	8b c7                	mov    %edi,%eax
40649f:	5f                   	pop    %edi
4064a0:	5e                   	pop    %esi
4064a1:	c3                   	ret
4064a2:	56                   	push   %esi
4064a3:	8b 74 24 08          	mov    0x8(%esp),%esi
4064a7:	56                   	push   %esi
4064a8:	e8 23 00 00 00       	call   0x4064d0
4064ad:	85 c0                	test   %eax,%eax
4064af:	59                   	pop    %ecx
4064b0:	74 05                	je     0x4064b7
4064b2:	83 c8 ff             	or     $0xffffffff,%eax
4064b5:	5e                   	pop    %esi
4064b6:	c3                   	ret
4064b7:	f6 46 0d 40          	testb  $0x40,0xd(%esi)
4064bb:	74 0f                	je     0x4064cc
4064bd:	ff 76 10             	push   0x10(%esi)
4064c0:	e8 ba 37 00 00       	call   0x409c7f
4064c5:	f7 d8                	neg    %eax
4064c7:	59                   	pop    %ecx
4064c8:	5e                   	pop    %esi
4064c9:	1b c0                	sbb    %eax,%eax
4064cb:	c3                   	ret
4064cc:	33 c0                	xor    %eax,%eax
4064ce:	5e                   	pop    %esi
4064cf:	c3                   	ret
4064d0:	53                   	push   %ebx
4064d1:	56                   	push   %esi
4064d2:	8b 74 24 0c          	mov    0xc(%esp),%esi
4064d6:	33 db                	xor    %ebx,%ebx
4064d8:	57                   	push   %edi
4064d9:	8b 46 0c             	mov    0xc(%esi),%eax
4064dc:	8b c8                	mov    %eax,%ecx
4064de:	83 e1 03             	and    $0x3,%ecx
4064e1:	80 f9 02             	cmp    $0x2,%cl
4064e4:	75 37                	jne    0x40651d
4064e6:	66 a9 08 01          	test   $0x108,%ax
4064ea:	74 31                	je     0x40651d
4064ec:	8b 46 08             	mov    0x8(%esi),%eax
4064ef:	8b 3e                	mov    (%esi),%edi
4064f1:	2b f8                	sub    %eax,%edi
4064f3:	85 ff                	test   %edi,%edi
4064f5:	7e 26                	jle    0x40651d
4064f7:	57                   	push   %edi
4064f8:	50                   	push   %eax
4064f9:	ff 76 10             	push   0x10(%esi)
4064fc:	e8 92 2f 00 00       	call   0x409493
406501:	83 c4 0c             	add    $0xc,%esp
406504:	3b c7                	cmp    %edi,%eax
406506:	75 0e                	jne    0x406516
406508:	8b 46 0c             	mov    0xc(%esi),%eax