Disassembly: 
  L1: 55 ?? push ebp
   8b ec ?? mov ebp, esp
   51 ?? push ecx
   53 ?? push ebx
   56 ?? push esi
   8b f1 ?? mov esi, ecx
   57 ?? push edi
   c7 46 10 00 00 00 00 ?? mov dword ds:[esi + 0x10<16>], 0
   c7 46 14 0f 00 00 00 ?? mov dword ds:[esi + 0x14<20>], 15
   c6 06 00 ?? mov byte ds:[esi], 0
   8b 5e 14 ?? mov ebx, dword ds:[esi + 0x14<20>]
   83 fb 03 ?? cmp ebx, 3
   72 2f ?? jb basic block L6
  
  L2: 8b fe ?? mov edi, esi
   83 fb 10 ?? cmp ebx, 0x10<16>
   72 02 ?? jb basic block L4
  
  L3: 8b 3e ?? mov edi, dword ds:[esi]
  
  L4: 6a 03 ?? push 3
   68 f0 41 40 00 ?? push 0x004041f0<"bar">
   57 ?? push edi
   c7 46 10 03 00 00 00 ?? mov dword ds:[esi + 0x10<16>], 3
   e8 13 20 00 00 ?? call function 0x004033d2
  
  L5: 83 c4 0c ?? add esp, 12
   c6 47 03 00 ?? mov byte ds:[edi + 3], 0
   8b c6 ?? mov eax, esi
   5f ?? pop edi
   5e ?? pop esi
   5b ?? pop ebx
   8b e5 ?? mov esp, ebp
   5d ?? pop ebp
   c2 04 00 ?? ret 4
  
  L6: 8b cb ?? mov ecx, ebx
   b8 ff ff ff 7f ?? mov eax, 0x7fffffff
   d1 e9 ?? shr ecx, 1
   2b c1 ?? sub eax, ecx
   3b d8 ?? cmp ebx, eax
   76 07 ?? jbe basic block L8
  
  L7: bf ff ff ff 7f ?? mov edi, 0x7fffffff
   eb 0d ?? jmp basic block L9
  
  L8: 8d 04 19 ?? lea eax, ds:[ecx + ebx]
   bf 0f 00 00 00 ?? mov edi, 15
   3b c7 ?? cmp eax, edi
   0f 47 f8 ?? cmova edi, eax
  
  L9: 89 7d fc ?? mov dword ss:[ebp + 0xfc<252,-4>], edi
   47 ?? inc edi
   81 ff 00 10 00 00 ?? cmp edi, 0x00001000<4096>
   72 23 ?? jb basic block L13
  
  L10: 8d 47 23 ?? lea eax, ds:[edi + 0x23<35>]
   83 c9 ff ?? or ecx, 0xff<255,-1>
   3b c7 ?? cmp eax, edi
   0f 46 c1 ?? cmovbe eax, ecx
   50 ?? push eax
   e8 bc 0c 00 00 ?? call function 0x004020cd
  
  L11: 83 c4 04 ?? add esp, 4
   85 c0 ?? test eax, eax
   74 79 ?? je basic block L24
  
  L12: 8d 78 23 ?? lea edi, ds:[eax + 0x23<35>]
   83 e7 e0 ?? and edi, 0xe0<224,-32>
   89 47 fc ?? mov dword ds:[edi + 0xfc<252,-4>], eax
   eb 13 ?? jmp basic block L17
  
  L13: 85 ff ?? test edi, edi
   74 0d ?? je basic block L16
  
  L14: 57 ?? push edi
   e8 a0 0c 00 00 ?? call function 0x004020cd
  
  L15: 83 c4 04 ?? add esp, 4
   8b f8 ?? mov edi, eax
   eb 02 ?? jmp basic block L17
  
  L16: 33 ff ?? xor edi, edi
  
  L17: 8b 45 fc ?? mov eax, dword ss:[ebp + 0xfc<252,-4>]
   c7 46 10 03 00 00 00 ?? mov dword ds:[esi + 0x10<16>], 3
   89 46 14 ?? mov dword ds:[esi + 0x14<20>], eax
   66 a1 f0 41 40 00 ?? mov ax, word ds:[0x004041f0<"bar">]
   66 89 07 ?? mov word ds:[edi], ax
   a0 f2 41 40 00 ?? mov al, byte ds:[0x004041f2<"r">]
   88 47 02 ?? mov byte ds:[edi + 2], al
   c6 47 03 00 ?? mov byte ds:[edi + 3], 0
   83 fb 10 ?? cmp ebx, 0x10<16>
   72 27 ?? jb basic block L23
  
  L18: 8b 06 ?? mov eax, dword ds:[esi]
   43 ?? inc ebx
   81 fb 00 10 00 00 ?? cmp ebx, 0x00001000<4096>
   72 12 ?? jb basic block L21
  
  L19: 8b 48 fc ?? mov ecx, dword ds:[eax + 0xfc<252,-4>]
   83 c3 23 ?? add ebx, 0x23<35>
   2b c1 ?? sub eax, ecx
   83 c0 fc ?? add eax, 0xfc<252,-4>
   83 f8 1f ?? cmp eax, 0x1f<31>
   77 19 ?? ja basic block L24
  
  L20: 8b c1 ?? mov eax, ecx
  
  L21: 53 ?? push ebx
   50 ?? push eax
   e8 7c 0c 00 00 ?? call function 0x004020fd
  
  L22: 83 c4 08 ?? add esp, 8
  
  L23: 89 3e ?? mov dword ds:[esi], edi
   8b c6 ?? mov eax, esi
   5f ?? pop edi
   5e ?? pop esi
   5b ?? pop ebx
   8b e5 ?? mov esp, ebp
   5d ?? pop ebp
   c2 04 00 ?? ret 4
  
  L24: ff 15 f4 40 40 00 ?? call dword ds:[0x004040f4]
  
  L25: cc ?? int3
  
  L26: cc ?? int3
  
  L27: cc ?? int3
  
  L28: cc ?? int3
  
  L29: cc ?? int3
  
  L30: cc ?? int3
  
  L31: cc ?? int3
  
  L32: cc ?? int3
  
  L33: cc ?? int3
  
  