Disassembly: 
  L1: 55 ?? push ebp
   8b ec ?? mov ebp, esp
   6a ff ?? push 0xff<255,-1>
   68 cd 49 40 00 ?? push 0x004049cd
   64 a1 00 00 00 00 ?? mov eax, dword fs:[0]
   50 ?? push eax
   83 ec 10 ?? sub esp, 0x10<16>
   53 ?? push ebx
   56 ?? push esi
   57 ?? push edi
   a1 04 80 40 00 ?? mov eax, dword ds:[0x00408004]
   33 c5 ?? xor eax, ebp
   50 ?? push eax
   8d 45 f4 ?? lea eax, ss:[ebp + 0xf4<244,-12>]
   64 a3 00 00 00 00 ?? mov dword fs:[0], eax
   89 65 f0 ?? mov dword ss:[ebp + 0xf0<240,-16>], esp
   8b 7d 08 ?? mov edi, dword ss:[ebp + 8]
   33 db ?? xor ebx, ebx
   89 5d ec ?? mov dword ss:[ebp + 0xec<236,-20>], ebx
   8b 07 ?? mov eax, dword ds:[edi]
   8b 48 04 ?? mov ecx, dword ds:[eax + 4]
   03 cf ?? add ecx, edi
   ff 15 9c 90 40 00 ?? call dword ds:[function 0x0040909c]
  
  L2: 85 d2 ?? test edx, edx
   7c 2c ?? jl basic block L9
  
  L3: 7f 04 ?? jg basic block L5
  
  L4: 85 c0 ?? test eax, eax
   74 26 ?? je basic block L9
  
  L5: 8b 07 ?? mov eax, dword ds:[edi]
   8b 48 04 ?? mov ecx, dword ds:[eax + 4]
   03 cf ?? add ecx, edi
   ff 15 9c 90 40 00 ?? call dword ds:[function 0x0040909c]
  
  L6: 3b 45 10 ?? cmp eax, dword ss:[ebp + 0x10<16>]
   76 14 ?? jbe basic block L9
  
  L7: 8b 07 ?? mov eax, dword ds:[edi]
   8b 48 04 ?? mov ecx, dword ds:[eax + 4]
   03 cf ?? add ecx, edi
   ff 15 9c 90 40 00 ?? call dword ds:[function 0x0040909c]
  
  L8: 8b f0 ?? mov esi, eax
   2b 75 10 ?? sub esi, dword ss:[ebp + 0x10<16>]
   eb 02 ?? jmp basic block L10
  
  L9: 33 f6 ?? xor esi, esi
  
  L10: 57 ?? push edi
   8d 4d e4 ?? lea ecx, ss:[ebp + 0xe4<228,-28>]
   e8 27 fb ff ff ?? call function 0x00401172
  
  L11: 80 7d e8 00 ?? cmp byte ss:[ebp + 0xe8<232,-24>], 0
   c7 45 fc 00 00 00 00 ?? mov dword ss:[ebp + 0xfc<252,-4>], 0
   75 0a ?? jne basic block L13
  
  L12: bb 04 00 00 00 ?? mov ebx, 4
   e9 ef 00 00 00 ?? jmp basic block L40
  
  L13: 8b 07 ?? mov eax, dword ds:[edi]
   c6 45 fc 01 ?? mov byte ss:[ebp + 0xfc<252,-4>], 1
   8b 48 04 ?? mov ecx, dword ds:[eax + 4]
   03 cf ?? add ecx, edi
   ff 15 a0 90 40 00 ?? call dword ds:[function 0x004090a0]
  
  L14: 25 c0 01 00 00 ?? and eax, 0x000001c0<448>
   83 f8 40 ?? cmp eax, 0x40<64>
   74 3f ?? je basic block L23
  
  L15: 0f 1f 00 ?? nop dword ds:[eax]
  
  L16: 85 f6 ?? test esi, esi
   74 38 ?? je basic block L23
  
  L17: 8b 07 ?? mov eax, dword ds:[edi]
   8b 48 04 ?? mov ecx, dword ds:[eax + 4]
   03 cf ?? add ecx, edi
   ff 15 80 90 40 00 ?? call dword ds:[function 0x00409080]
  
  L18: 0f b6 c0 ?? movzx eax, al
   50 ?? push eax
   8b 07 ?? mov eax, dword ds:[edi]
   8b 48 04 ?? mov ecx, dword ds:[eax + 4]
   03 cf ?? add ecx, edi
   ff 15 84 90 40 00 ?? call dword ds:[function 0x00409084]
  
  L19: 8b c8 ?? mov ecx, eax
   ff 15 94 90 40 00 ?? call dword ds:[function 0x00409094]
  
  L20: 83 f8 ff ?? cmp eax, 0xff<255,-1>
   75 0a ?? jne basic block L22
  
  L21: bb 04 00 00 00 ?? mov ebx, 4
   89 5d ec ?? mov dword ss:[ebp + 0xec<236,-20>], ebx
   eb 29 ?? jmp basic block L27
  
  L22: 4e ?? dec esi
   eb c4 ?? jmp basic block L16
  
  L23: 8b 07 ?? mov eax, dword ds:[edi]
   6a 00 ?? push 0
   ff 75 10 ?? push dword ss:[ebp + 0x10<16>]
   8b 48 04 ?? mov ecx, dword ds:[eax + 4]
   ff 75 0c ?? push dword ss:[ebp + 12]
   03 cf ?? add ecx, edi
   ff 15 84 90 40 00 ?? call dword ds:[function 0x00409084]
  
  L24: 8b c8 ?? mov ecx, eax
   ff 15 90 90 40 00 ?? call dword ds:[function 0x00409090]
  
  L25: 3b 45 10 ?? cmp eax, dword ss:[ebp + 0x10<16>]
   75 36 ?? jne basic block L33
  
  L26: 85 d2 ?? test edx, edx
   75 32 ?? jne basic block L33
  
  L27: 85 f6 ?? test esi, esi
   74 31 ?? je basic block L34
  
  L28: 8b 07 ?? mov eax, dword ds:[edi]
   8b 48 04 ?? mov ecx, dword ds:[eax + 4]
   03 cf ?? add ecx, edi
   ff 15 80 90 40 00 ?? call dword ds:[function 0x00409080]
  
  L29: 0f b6 c0 ?? movzx eax, al
   50 ?? push eax
   8b 07 ?? mov eax, dword ds:[edi]
   8b 48 04 ?? mov ecx, dword ds:[eax + 4]
   03 cf ?? add ecx, edi
   ff 15 84 90 40 00 ?? call dword ds:[function 0x00409084]
  
  L30: 8b c8 ?? mov ecx, eax
   ff 15 94 90 40 00 ?? call dword ds:[function 0x00409094]
  
  L31: 83 f8 ff ?? cmp eax, 0xff<255,-1>
   74 03 ?? je basic block L33
  
  L32: 4e ?? dec esi
   eb ce ?? jmp basic block L27
  
  L33: 83 cb 04 ?? or ebx, 4
  
  L34: 8b 07 ?? mov eax, dword ds:[edi]
   6a 00 ?? push 0
   6a 00 ?? push 0
   8b 48 04 ?? mov ecx, dword ds:[eax + 4]
   03 cf ?? add ecx, edi
   ff 15 98 90 40 00 ?? call dword ds:[function 0x00409098]
  
  L35: eb 20 ?? jmp basic block L39
  
  L36: 8b 55 08 ?? mov edx, dword ss:[ebp + 8]
   6a 01 ?? push 1
   6a 04 ?? push 4
   8b 02 ?? mov eax, dword ds:[edx]
   8b 48 04 ?? mov ecx, dword ds:[eax + 4]
   03 ca ?? add ecx, edx
   ff 15 8c 90 40 00 ?? call dword ds:[function 0x0040908c]
  
  L37: b8 44 17 40 00 ?? mov eax, basic block L38
   c3 ?? ret
  
  L38: 8b 7d 08 ?? mov edi, dword ss:[ebp + 8]
   8b 5d ec ?? mov ebx, dword ss:[ebp + 0xec<236,-20>]
  
  L39: c7 45 fc 00 00 00 00 ?? mov dword ss:[ebp + 0xfc<252,-4>], 0
  
  L40: 8b 07 ?? mov eax, dword ds:[edi]
   6a 00 ?? push 0
   53 ?? push ebx
   8b 48 04 ?? mov ecx, dword ds:[eax + 4]
   03 cf ?? add ecx, edi
   ff 15 8c 90 40 00 ?? call dword ds:[function 0x0040908c]
  
  L41: e8 d7 06 00 00 ?? call function 0x00401e3d
  
  L42: 84 c0 ?? test al, al
   75 09 ?? jne basic block L44
  
  L43: 8b 4d e4 ?? mov ecx, dword ss:[ebp + 0xe4<228,-28>]
   ff 15 70 90 40 00 ?? call dword ds:[function 0x00409070]
  
  L44: 8b 55 e4 ?? mov edx, dword ss:[ebp + 0xe4<228,-28>]
   c7 45 fc 03 00 00 00 ?? mov dword ss:[ebp + 0xfc<252,-4>], 3
   8b 02 ?? mov eax, dword ds:[edx]
   8b 48 04 ?? mov ecx, dword ds:[eax + 4]
   03 ca ?? add ecx, edx
   ff 15 84 90 40 00 ?? call dword ds:[function 0x00409084]
  
  L45: 85 c0 ?? test eax, eax
   74 07 ?? je basic block L47
  
  L46: 8b 10 ?? mov edx, dword ds:[eax]
   8b c8 ?? mov ecx, eax
   ff 52 08 ?? call dword ds:[edx + 8]
  
  L47: 8b c7 ?? mov eax, edi
   8b 4d f4 ?? mov ecx, dword ss:[ebp + 0xf4<244,-12>]
   64 89 0d 00 00 00 00 ?? mov dword fs:[0], ecx
   59 ?? pop ecx
   5f ?? pop edi
   5e ?? pop esi
   5b ?? pop ebx
   8b e5 ?? mov esp, ebp
   5d ?? pop ebp
   c3 ?? ret
  
  