40a1b0:	53                   	push   %ebx
40a1b1:	e8 a0 02 00 00       	call   0x40a456
40a1b6:	e9 96 00 00 00       	jmp    0x40a251
40a1bb:	33 db                	xor    %ebx,%ebx
40a1bd:	85 f6                	test   %esi,%esi
40a1bf:	0f 84 8c 00 00 00    	je     0x40a251
40a1c5:	8b cf                	mov    %edi,%ecx
40a1c7:	8b 7d ec             	mov    -0x14(%ebp),%edi
40a1ca:	89 4d f0             	mov    %ecx,-0x10(%ebp)
40a1cd:	8b d1                	mov    %ecx,%edx
40a1cf:	8d 4d f4             	lea    -0xc(%ebp),%ecx
40a1d2:	6a 02                	push   $0x2
40a1d4:	e8 1d 02 00 00       	call   0x40a3f6
40a1d9:	8d 4d f4             	lea    -0xc(%ebp),%ecx
40a1dc:	e8 aa 02 00 00       	call   0x40a48b
40a1e1:	85 c0                	test   %eax,%eax
40a1e3:	74 18                	je     0x40a1fd
40a1e5:	33 c9                	xor    %ecx,%ecx
40a1e7:	8d 45 f4             	lea    -0xc(%ebp),%eax
40a1ea:	51                   	push   %ecx
40a1eb:	51                   	push   %ecx
40a1ec:	51                   	push   %ecx
40a1ed:	51                   	push   %ecx
40a1ee:	6a ff                	push   $0xffffffff
40a1f0:	50                   	push   %eax
40a1f1:	51                   	push   %ecx
40a1f2:	6a 01                	push   $0x1
40a1f4:	ff 15 c4 20 41 00    	call   *0x4120c4
40a1fa:	48                   	dec    %eax
40a1fb:	eb 02                	jmp    0x40a1ff
40a1fd:	33 c0                	xor    %eax,%eax
40a1ff:	03 c3                	add    %ebx,%eax
40a201:	89 45 e0             	mov    %eax,-0x20(%ebp)
40a204:	3b c6                	cmp    %esi,%eax
40a206:	77 1c                	ja     0x40a224
40a208:	8b 4d e8             	mov    -0x18(%ebp),%ecx
40a20b:	8d 55 f4             	lea    -0xc(%ebp),%edx
40a20e:	57                   	push   %edi
40a20f:	e8 42 02 00 00       	call   0x40a456
40a214:	8b 4d f0             	mov    -0x10(%ebp),%ecx
40a217:	8b 5d e0             	mov    -0x20(%ebp),%ebx
40a21a:	83 c1 02             	add    $0x2,%ecx
40a21d:	89 4d f0             	mov    %ecx,-0x10(%ebp)
40a220:	3b de                	cmp    %esi,%ebx
40a222:	72 a9                	jb     0x40a1cd
40a224:	8b 7d e4             	mov    -0x1c(%ebp),%edi
40a227:	89 5d f0             	mov    %ebx,-0x10(%ebp)
40a22a:	3b de                	cmp    %esi,%ebx
40a22c:	73 23                	jae    0x40a251
40a22e:	8b 7d ec             	mov    -0x14(%ebp),%edi
40a231:	8b de                	mov    %esi,%ebx
40a233:	2b 5d f0             	sub    -0x10(%ebp),%ebx
40a236:	8b 75 e8             	mov    -0x18(%ebp),%esi
40a239:	57                   	push   %edi
40a23a:	ba 68 18 40 00       	mov    $0x401868,%edx
40a23f:	8b ce                	mov    %esi,%ecx
40a241:	e8 10 02 00 00       	call   0x40a456
40a246:	83 eb 01             	sub    $0x1,%ebx
40a249:	75 ee                	jne    0x40a239
40a24b:	8b 75 dc             	mov    -0x24(%ebp),%esi
40a24e:	8b 7d e4             	mov    -0x1c(%ebp),%edi
40a251:	8b 55 e8             	mov    -0x18(%ebp),%edx
40a254:	8d 4e 01             	lea    0x1(%esi),%ecx
40a257:	51                   	push   %ecx
40a258:	8b cf                	mov    %edi,%ecx
40a25a:	e8 97 01 00 00       	call   0x40a3f6
40a25f:	8b c7                	mov    %edi,%eax
40a261:	8b 4d fc             	mov    -0x4(%ebp),%ecx
40a264:	5f                   	pop    %edi
40a265:	5e                   	pop    %esi
40a266:	33 cd                	xor    %ebp,%ecx
40a268:	5b                   	pop    %ebx
40a269:	e8 62 4a 00 00       	call   0x40ecd0
40a26e:	c9                   	leave
40a26f:	c2 04 00             	ret    $0x4
40a272:	8b ff                	mov    %edi,%edi
40a274:	55                   	push   %ebp
40a275:	8b ec                	mov    %esp,%ebp
40a277:	53                   	push   %ebx
40a278:	56                   	push   %esi
40a279:	8b f1                	mov    %ecx,%esi
40a27b:	8b da                	mov    %edx,%ebx
40a27d:	85 f6                	test   %esi,%esi
40a27f:	74 34                	je     0x40a2b5
40a281:	85 db                	test   %ebx,%ebx
40a283:	74 30                	je     0x40a2b5
40a285:	57                   	push   %edi
40a286:	ff 75 0c             	push   0xc(%ebp)
40a289:	ba 8c 18 40 00       	mov    $0x40188c,%edx
40a28e:	e8 63 01 00 00       	call   0x40a3f6
40a293:	33 ff                	xor    %edi,%edi
40a295:	39 7d 08             	cmp    %edi,0x8(%ebp)
40a298:	76 16                	jbe    0x40a2b0
40a29a:	ff 75 0c             	push   0xc(%ebp)
40a29d:	8b d3                	mov    %ebx,%edx
40a29f:	8b ce                	mov    %esi,%ecx
40a2a1:	e8 b0 01 00 00       	call   0x40a456
40a2a6:	85 c0                	test   %eax,%eax
40a2a8:	74 06                	je     0x40a2b0
40a2aa:	47                   	inc    %edi
40a2ab:	3b 7d 08             	cmp    0x8(%ebp),%edi
40a2ae:	72 ea                	jb     0x40a29a
40a2b0:	8b c6                	mov    %esi,%eax
40a2b2:	5f                   	pop    %edi
40a2b3:	eb 17                	jmp    0x40a2cc
40a2b5:	ff 15 48 20 41 00    	call   *0x412048
40a2bb:	85 c0                	test   %eax,%eax
40a2bd:	75 08                	jne    0x40a2c7
40a2bf:	6a 57                	push   $0x57
40a2c1:	ff 15 74 20 41 00    	call   *0x412074
40a2c7:	b8 8c 18 40 00       	mov    $0x40188c,%eax
40a2cc:	5e                   	pop    %esi
40a2cd:	5b                   	pop    %ebx
40a2ce:	5d                   	pop    %ebp
40a2cf:	c2 08 00             	ret    $0x8
40a2d2:	8b ff                	mov    %edi,%edi
40a2d4:	56                   	push   %esi
40a2d5:	8b f1                	mov    %ecx,%esi
40a2d7:	57                   	push   %edi
40a2d8:	8b fa                	mov    %edx,%edi
40a2da:	85 f6                	test   %esi,%esi
40a2dc:	74 22                	je     0x40a300
40a2de:	83 fe ff             	cmp    $0xffffffff,%esi
40a2e1:	74 1d                	je     0x40a300
40a2e3:	56                   	push   %esi
40a2e4:	ff 15 c0 20 41 00    	call   *0x4120c0
40a2ea:	83 f8 02             	cmp    $0x2,%eax
40a2ed:	75 11                	jne    0x40a300
40a2ef:	57                   	push   %edi
40a2f0:	56                   	push   %esi
40a2f1:	ff 15 bc 20 41 00    	call   *0x4120bc
40a2f7:	85 c0                	test   %eax,%eax
40a2f9:	74 05                	je     0x40a300
40a2fb:	33 c0                	xor    %eax,%eax
40a2fd:	40                   	inc    %eax
40a2fe:	eb 02                	jmp    0x40a302
40a300:	33 c0                	xor    %eax,%eax
40a302:	5f                   	pop    %edi
40a303:	5e                   	pop    %esi
40a304:	c3                   	ret
40a305:	8b ff                	mov    %edi,%edi
40a307:	55                   	push   %ebp
40a308:	8b ec                	mov    %esp,%ebp
40a30a:	51                   	push   %ecx
40a30b:	53                   	push   %ebx
40a30c:	56                   	push   %esi
40a30d:	57                   	push   %edi
40a30e:	33 ff                	xor    %edi,%edi
40a310:	89 7d fc             	mov    %edi,-0x4(%ebp)
40a313:	85 c9                	test   %ecx,%ecx
40a315:	75 0e                	jne    0x40a325
40a317:	ff 15 48 20 41 00    	call   *0x412048
40a31d:	85 c0                	test   %eax,%eax
40a31f:	75 70                	jne    0x40a391
40a321:	6a 57                	push   $0x57
40a323:	eb 66                	jmp    0x40a38b
40a325:	51                   	push   %ecx
40a326:	ff 15 70 22 41 00    	call   *0x412270
40a32c:	8b f0                	mov    %eax,%esi
40a32e:	ff 15 dc 22 41 00    	call   *0x4122dc
40a334:	56                   	push   %esi
40a335:	89 38                	mov    %edi,(%eax)
40a337:	ff 15 6c 22 41 00    	call   *0x41226c
40a33d:	8b d8                	mov    %eax,%ebx
40a33f:	59                   	pop    %ecx
40a340:	59                   	pop    %ecx
40a341:	83 fb ff             	cmp    $0xffffffff,%ebx
40a344:	74 43                	je     0x40a389
40a346:	ff 15 dc 22 41 00    	call   *0x4122dc
40a34c:	83 38 09             	cmpl   $0x9,(%eax)
40a34f:	74 38                	je     0x40a389
40a351:	53                   	push   %ebx
40a352:	ff 15 c0 20 41 00    	call   *0x4120c0
40a358:	83 f8 02             	cmp    $0x2,%eax
40a35b:	75 34                	jne    0x40a391
40a35d:	2b f7                	sub    %edi,%esi
40a35f:	74 12                	je     0x40a373
40a361:	83 ee 01             	sub    $0x1,%esi
40a364:	74 09                	je     0x40a36f
40a366:	83 ee 01             	sub    $0x1,%esi
40a369:	75 12                	jne    0x40a37d
40a36b:	6a f4                	push   $0xfffffff4
40a36d:	eb 06                	jmp    0x40a375
40a36f:	6a f5                	push   $0xfffffff5
40a371:	eb 02                	jmp    0x40a375
40a373:	6a f6                	push   $0xfffffff6
40a375:	ff 15 58 20 41 00    	call   *0x412058
40a37b:	8b f8                	mov    %eax,%edi
40a37d:	8d 55 fc             	lea    -0x4(%ebp),%edx
40a380:	8b cf                	mov    %edi,%ecx
40a382:	e8 4b ff ff ff       	call   0x40a2d2
40a387:	eb 0a                	jmp    0x40a393
40a389:	6a 06                	push   $0x6
40a38b:	ff 15 74 20 41 00    	call   *0x412074
40a391:	33 c0                	xor    %eax,%eax
40a393:	5f                   	pop    %edi
40a394:	5e                   	pop    %esi
40a395:	5b                   	pop    %ebx
40a396:	c9                   	leave
40a397:	c3                   	ret
40a398:	8b ff                	mov    %edi,%edi
40a39a:	55                   	push   %ebp
40a39b:	8b ec                	mov    %esp,%ebp
40a39d:	56                   	push   %esi
40a39e:	8b f1                	mov    %ecx,%esi
40a3a0:	85 f6                	test   %esi,%esi
40a3a2:	74 46                	je     0x40a3ea
40a3a4:	85 d2                	test   %edx,%edx
40a3a6:	74 42                	je     0x40a3ea
40a3a8:	8b 45 08             	mov    0x8(%ebp),%eax
40a3ab:	85 c0                	test   %eax,%eax
40a3ad:	7e 3b                	jle    0x40a3ea
40a3af:	33 c9                	xor    %ecx,%ecx
40a3b1:	85 c0                	test   %eax,%eax
40a3b3:	74 07                	je     0x40a3bc
40a3b5:	3d ff ff ff 7f       	cmp    $0x7fffffff,%eax
40a3ba:	76 05                	jbe    0x40a3c1
40a3bc:	b9 57 00 07 80       	mov    $0x80070057,%ecx
40a3c1:	85 c9                	test   %ecx,%ecx
40a3c3:	78 10                	js     0x40a3d5
40a3c5:	51                   	push   %ecx
40a3c6:	52                   	push   %edx
40a3c7:	51                   	push   %ecx
40a3c8:	8b d0                	mov    %eax,%edx
40a3ca:	8b ce                	mov    %esi,%ecx
40a3cc:	e8 26 0b 00 00       	call   0x40aef7
40a3d1:	8b c8                	mov    %eax,%ecx
40a3d3:	eb 07                	jmp    0x40a3dc
40a3d5:	85 c0                	test   %eax,%eax
40a3d7:	74 03                	je     0x40a3dc
40a3d9:	c6 06 00             	movb   $0x0,(%esi)
40a3dc:	85 c9                	test   %ecx,%ecx
40a3de:	79 11                	jns    0x40a3f1
40a3e0:	0f b7 c1             	movzwl %cx,%eax
40a3e3:	50                   	push   %eax
40a3e4:	ff 15 74 20 41 00    	call   *0x412074
40a3ea:	33 c0                	xor    %eax,%eax
40a3ec:	5e                   	pop    %esi
40a3ed:	5d                   	pop    %ebp
40a3ee:	c2 04 00             	ret    $0x4
40a3f1:	33 c0                	xor    %eax,%eax
40a3f3:	40                   	inc    %eax
40a3f4:	eb f6                	jmp    0x40a3ec
40a3f6:	8b ff                	mov    %edi,%edi
40a3f8:	55                   	push   %ebp
40a3f9:	8b ec                	mov    %esp,%ebp
40a3fb:	56                   	push   %esi
40a3fc:	8b f1                	mov    %ecx,%esi
40a3fe:	85 f6                	test   %esi,%esi
40a400:	74 48                	je     0x40a44a
40a402:	85 d2                	test   %edx,%edx
40a404:	74 44                	je     0x40a44a
40a406:	8b 45 08             	mov    0x8(%ebp),%eax
40a409:	85 c0                	test   %eax,%eax
40a40b:	7e 3d                	jle    0x40a44a
40a40d:	33 c9                	xor    %ecx,%ecx
40a40f:	85 c0                	test   %eax,%eax
40a411:	74 07                	je     0x40a41a
40a413:	3d ff ff ff 7f       	cmp    $0x7fffffff,%eax
40a418:	76 05                	jbe    0x40a41f
40a41a:	b9 57 00 07 80       	mov    $0x80070057,%ecx
40a41f:	85 c9                	test   %ecx,%ecx
40a421:	78 10                	js     0x40a433
40a423:	51                   	push   %ecx
40a424:	52                   	push   %edx
40a425:	51                   	push   %ecx
40a426:	8b d0                	mov    %eax,%edx
40a428:	8b ce                	mov    %esi,%ecx
40a42a:	e8 78 0a 00 00       	call   0x40aea7
40a42f:	8b c8                	mov    %eax,%ecx
40a431:	eb 09                	jmp    0x40a43c
40a433:	85 c0                	test   %eax,%eax
40a435:	74 05                	je     0x40a43c
40a437:	33 c0                	xor    %eax,%eax
40a439:	66 89 06             	mov    %ax,(%esi)
40a43c:	85 c9                	test   %ecx,%ecx
40a43e:	79 11                	jns    0x40a451
40a440:	0f b7 c1             	movzwl %cx,%eax
40a443:	50                   	push   %eax
40a444:	ff 15 74 20 41 00    	call   *0x412074
40a44a:	33 c0                	xor    %eax,%eax
40a44c:	5e                   	pop    %esi
40a44d:	5d                   	pop    %ebp
40a44e:	c2 04 00             	ret    $0x4
40a451:	33 c0                	xor    %eax,%eax
40a453:	40                   	inc    %eax
40a454:	eb f6                	jmp    0x40a44c
40a456:	8b ff                	mov    %edi,%edi
40a458:	55                   	push   %ebp
40a459:	8b ec                	mov    %esp,%ebp
40a45b:	8b c2                	mov    %edx,%eax
40a45d:	85 c9                	test   %ecx,%ecx
40a45f:	74 1f                	je     0x40a480
40a461:	85 c0                	test   %eax,%eax
40a463:	74 1b                	je     0x40a480
40a465:	8b 55 08             	mov    0x8(%ebp),%edx
40a468:	85 d2                	test   %edx,%edx
40a46a:	7e 14                	jle    0x40a480
40a46c:	50                   	push   %eax
40a46d:	e8 c7 09 00 00       	call   0x40ae39
40a472:	85 c0                	test   %eax,%eax
40a474:	79 10                	jns    0x40a486
40a476:	0f b7 c0             	movzwl %ax,%eax
40a479:	50                   	push   %eax
40a47a:	ff 15 74 20 41 00    	call   *0x412074
40a480:	33 c0                	xor    %eax,%eax
40a482:	5d                   	pop    %ebp
40a483:	c2 04 00             	ret    $0x4
40a486:	33 c0                	xor    %eax,%eax
40a488:	40                   	inc    %eax
40a489:	eb f7                	jmp    0x40a482
40a48b:	85 c9                	test   %ecx,%ecx
40a48d:	75 03                	jne    0x40a492
40a48f:	33 c0                	xor    %eax,%eax
40a491:	c3                   	ret
40a492:	51                   	push   %ecx
40a493:	ff 15 d4 20 41 00    	call   *0x4120d4
40a499:	c3                   	ret
40a49a:	8b ff                	mov    %edi,%edi
40a49c:	55                   	push   %ebp
40a49d:	8b ec                	mov    %esp,%ebp
40a49f:	56                   	push   %esi
40a4a0:	8b f1                	mov    %ecx,%esi
40a4a2:	85 f6                	test   %esi,%esi
40a4a4:	74 2e                	je     0x40a4d4
40a4a6:	85 d2                	test   %edx,%edx
40a4a8:	74 2a                	je     0x40a4d4
40a4aa:	8b 45 0c             	mov    0xc(%ebp),%eax
40a4ad:	33 c9                	xor    %ecx,%ecx
40a4af:	83 7d 08 01          	cmpl   $0x1,0x8(%ebp)
40a4b3:	0f 94 c1             	sete   %cl
40a4b6:	85 c0                	test   %eax,%eax
40a4b8:	75 03                	jne    0x40a4bd
40a4ba:	83 c8 ff             	or     $0xffffffff,%eax
40a4bd:	50                   	push   %eax
40a4be:	52                   	push   %edx
40a4bf:	50                   	push   %eax
40a4c0:	56                   	push   %esi
40a4c1:	51                   	push   %ecx
40a4c2:	ff 15 b0 20 41 00    	call   *0x4120b0
40a4c8:	50                   	push   %eax
40a4c9:	ff 15 b4 20 41 00    	call   *0x4120b4
40a4cf:	83 e8 02             	sub    $0x2,%eax
40a4d2:	eb 14                	jmp    0x40a4e8
40a4d4:	ff 15 48 20 41 00    	call   *0x412048
40a4da:	85 c0                	test   %eax,%eax
40a4dc:	75 08                	jne    0x40a4e6
40a4de:	6a 57                	push   $0x57
40a4e0:	ff 15 74 20 41 00    	call   *0x412074
40a4e6:	33 c0                	xor    %eax,%eax