Disassembly: 
  L1: 55 ?? push ebp
   8b ec ?? mov ebp, esp
   6a ff ?? push 0xff<255,-1>
   68 60 35 40 00 ?? push 0x00403560
   64 a1 00 00 00 00 ?? mov eax, dword fs:[0]
   50 ?? push eax
   83 ec 0c ?? sub esp, 12
   53 ?? push ebx
   56 ?? push esi
   57 ?? push edi
   a1 04 60 40 00 ?? mov eax, dword ds:[0x00406004]
   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 f1 ?? mov esi, ecx
   89 75 ec ?? mov dword ss:[ebp + 0xec<236,-20>], esi
   8b 45 08 ?? mov eax, dword ss:[ebp + 8]
   8b f8 ?? mov edi, eax
   83 cf 0f ?? or edi, 15
   83 ff fe ?? cmp edi, 0xfe<254,-2>
   76 04 ?? jbe basic block L3
  
  L2: 8b f8 ?? mov edi, eax
   eb 27 ?? jmp basic block L6
  
  L3: 8b 5e 14 ?? mov ebx, dword ds:[esi + 0x14<20>]
   b8 ab aa aa aa ?? mov eax, 0xaaaaaaab
   f7 e7 ?? mul edi
   8b cb ?? mov ecx, ebx
   d1 e9 ?? shr ecx, 1
   d1 ea ?? shr edx, 1
   3b ca ?? cmp ecx, edx
   76 13 ?? jbe basic block L6
  
  L4: b8 fe ff ff ff ?? mov eax, 0xfffffffe<4294967294,-2>
   8d 3c 19 ?? lea edi, ds:[ecx + ebx]
   2b c1 ?? sub eax, ecx
   3b d8 ?? cmp ebx, eax
   76 05 ?? jbe basic block L6
  
  L5: bf fe ff ff ff ?? mov edi, 0xfffffffe<4294967294,-2>
  
  L6: 8d 47 01 ?? lea eax, ds:[edi + 1]
   c7 45 fc 00 00 00 00 ?? mov dword ss:[ebp + 0xfc<252,-4>], 0
   85 c0 ?? test eax, eax
   75 04 ?? jne basic block L8
  
  L7: 33 db ?? xor ebx, ebx
   eb 5b ?? jmp basic block L18
  
  L8: 3d 00 10 00 00 ?? cmp eax, 0x00001000<4096>
   72 21 ?? jb basic block L13
  
  L9: 8d 48 23 ?? lea ecx, ds:[eax + 0x23<35>]
   3b c8 ?? cmp ecx, eax
   77 06 ?? ja basic block L11
  
  L10: ff 15 84 40 40 00 ?? call dword ds:[0x00404084<".L@">]
  
  L11: 51 ?? push ecx
   e8 21 06 00 00 ?? call function 0x004021f5
  
  L12: 83 c4 04 ?? add esp, 4
   8d 58 23 ?? lea ebx, ds:[eax + 0x23<35>]
   83 e3 e0 ?? and ebx, 0xe0<224,-32>
   89 43 fc ?? mov dword ds:[ebx + 0xfc<252,-4>], eax
   eb 33 ?? jmp basic block L18
  
  L13: 50 ?? push eax
   e8 0d 06 00 00 ?? call function 0x004021f5
  
  L14: 83 c4 04 ?? add esp, 4
   8b d8 ?? mov ebx, eax
   eb 26 ?? jmp basic block L18
  
  L15: 8b 45 08 ?? mov eax, dword ss:[ebp + 8]
   89 45 08 ?? mov dword ss:[ebp + 8], eax
   40 ?? inc eax
   89 65 f0 ?? mov dword ss:[ebp + 0xf0<240,-16>], esp
   50 ?? push eax
   c6 45 fc 02 ?? mov byte ss:[ebp + 0xfc<252,-4>], 2
   e8 5d 01 00 00 ?? call function 0x00401d60
  
  L16: 89 45 e8 ?? mov dword ss:[ebp + 0xe8<232,-24>], eax
   b8 0c 1c 40 00 ?? mov eax, basic block L17
   c3 ?? ret
  
  L17: 8b 75 ec ?? mov esi, dword ss:[ebp + 0xec<236,-20>]
   8b 7d 08 ?? mov edi, dword ss:[ebp + 8]
   8b 5d e8 ?? mov ebx, dword ss:[ebp + 0xe8<232,-24>]
  
  L18: 8b 45 0c ?? mov eax, dword ss:[ebp + 12]
   85 c0 ?? test eax, eax
   74 1b ?? je basic block L25
  
  L19: 83 7e 14 10 ?? cmp dword ds:[esi + 0x14<20>], 0x10<16>
   72 04 ?? jb basic block L21
  
  L20: 8b 0e ?? mov ecx, dword ds:[esi]
   eb 02 ?? jmp basic block L22
  
  L21: 8b ce ?? mov ecx, esi
  
  L22: 85 c0 ?? test eax, eax
   74 0b ?? je basic block L25
  
  L23: 50 ?? push eax
   51 ?? push ecx
   53 ?? push ebx
   e8 6c 18 00 00 ?? call function 0x004034a0
  
  L24: 83 c4 0c ?? add esp, 12
  
  L25: 8b 46 14 ?? mov eax, dword ds:[esi + 0x14<20>]
   83 f8 10 ?? cmp eax, 0x10<16>
   72 45 ?? jb basic block L38
  
  L26: 8b 0e ?? mov ecx, dword ds:[esi]
   40 ?? inc eax
   3d 00 10 00 00 ?? cmp eax, 0x00001000<4096>
   72 32 ?? jb basic block L36
  
  L27: f6 c1 1f ?? test cl, 0x1f<31>
   74 06 ?? je basic block L29
  
  L28: ff 15 08 41 40 00 ?? call dword ds:[0x00404108<"DQ@">]
  
  L29: 8b 41 fc ?? mov eax, dword ds:[ecx + 0xfc<252,-4>]
   3b c1 ?? cmp eax, ecx
   72 06 ?? jb basic block L31
  
  L30: ff 15 08 41 40 00 ?? call dword ds:[0x00404108<"DQ@">]
  
  L31: 2b c8 ?? sub ecx, eax
   83 f9 04 ?? cmp ecx, 4
   73 06 ?? jae basic block L33
  
  L32: ff 15 08 41 40 00 ?? call dword ds:[0x00404108<"DQ@">]
  
  L33: 83 f9 23 ?? cmp ecx, 0x23<35>
   76 06 ?? jbe basic block L35
  
  L34: ff 15 08 41 40 00 ?? call dword ds:[0x00404108<"DQ@">]
  
  L35: 8b c8 ?? mov ecx, eax
  
  L36: 51 ?? push ecx
   e8 a7 05 00 00 ?? call function 0x00402228
  
  L37: 83 c4 04 ?? add esp, 4
  
  L38: c7 46 14 0f 00 00 00 ?? mov dword ds:[esi + 0x14<20>], 15
   83 7e 14 10 ?? cmp dword ds:[esi + 0x14<20>], 0x10<16>
   c7 46 10 00 00 00 00 ?? mov dword ds:[esi + 0x10<16>], 0
   72 04 ?? jb basic block L40
  
  L39: 8b 06 ?? mov eax, dword ds:[esi]
   eb 02 ?? jmp basic block L41
  
  L40: 8b c6 ?? mov eax, esi
  
  L41: c6 00 00 ?? mov byte ds:[eax], 0
   8b 45 0c ?? mov eax, dword ss:[ebp + 12]
   89 1e ?? mov dword ds:[esi], ebx
   89 7e 14 ?? mov dword ds:[esi + 0x14<20>], edi
   83 7e 14 10 ?? cmp dword ds:[esi + 0x14<20>], 0x10<16>
   89 46 10 ?? mov dword ds:[esi + 0x10<16>], eax
   72 02 ?? jb basic block L43
  
  L42: 8b f3 ?? mov esi, ebx
  
  L43: c6 04 06 00 ?? mov byte ds:[esi + eax], 0
   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
   c2 08 00 ?? ret 8
  
  