// File: masaers[P]blind/blind_test.cpp
// Function: main
int main(const int argc, const char** argv) {
  using namespace std;
  using namespace com::masaers::blind;
  using namespace std::placeholders;

  {
    const auto f = blind(foo(), 1);
    int i = 2;
    int j = f(cref(i));
    f(i);
    assert(i == 3);
    assert(j == 3);
  }
  {
    const auto f = blind(foo2(), _1, 1);
    int i = 2;
    int j = f(cref(i));
    f(i);
    assert(i == 3);
    assert(j == 3);
  }

  {
    const auto rsort = blind(BLIND_FUNC(sort), _1, _2, [](auto&& a, auto&& b) { return a > b; });
    vector<int> vec{ 1, 2, 3, 4 };
    rsort(begin(vec), end(vec));
    {
      auto it = begin(vec);
      assert(*it++ == 4);
      assert(*it++ == 3);
      assert(*it++ == 2);
      assert(*it++ == 1);
      assert(it == end(vec));
    }

    deque<string> dq{ "a", "b", "c", "d" };
    rsort(begin(dq), end(dq));
    {
      auto it = begin(dq);
      assert(*it++ == "d");
      assert(*it++ == "c");
      assert(*it++ == "b");
      assert(*it++ == "a");
      assert(it == end(dq));
    }
  }
  {
    ostringstream os;
    const auto p = blind(BLIND_FUNC(print), ref(os));
    p(1, 1.0, '1', "1") << 2;
    assert(os.str() == "11112");
  }
  {
    vector<int> vec{ 1, 2, 3, 4 };
    auto sort_vec = blind(BLIND_FUNC(sort), begin(vec), end(vec));
    sort_vec([](auto&& a, auto&& b) { return a > b; });
    {
      auto it = begin(vec);
      assert(*it++ == 4);
      assert(*it++ == 3);
      assert(*it++ == 2);
      assert(*it++ == 1);
      assert(it == end(vec));
    }
    sort_vec();
    {
      auto it = begin(vec);
      assert(*it++ == 1);
      assert(*it++ == 2);
      assert(*it++ == 3);
      assert(*it++ == 4);
      assert(it == end(vec));
    }
  }
  {
    auto f = blind(BLIND_FUNC(bar<int, int>), _1, 1);
    assert(f(2) == 3);
  }
  return EXIT_SUCCESS;
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x6e0, %rsp            # imm = 0x6E0
movl $0x0, -0x4(%rbp)
movl %edi, -0x8(%rbp)
movq %rsi, -0x10(%rbp)
movl $0x1, -0x20(%rbp)
leaq -0x18(%rbp), %rdi
leaq -0x19(%rbp), %rsi
leaq -0x20(%rbp), %rdx
callq 0x7f60
movl $0x2, -0x24(%rbp)
leaq -0x24(%rbp), %rdi
callq 0x7fd0
movq %rax, -0x30(%rbp)
leaq -0x18(%rbp), %rdi
leaq -0x30(%rbp), %rsi
callq 0x7fa0
movl %eax, -0x28(%rbp)
leaq -0x18(%rbp), %rdi
leaq -0x24(%rbp), %rsi
callq 0x8000
cmpl $0x3, -0x24(%rbp)
jne 0x248a
jmp 0x24a9
leaq 0xcb73(%rip), %rdi      # 0xf004
leaq 0xcb73(%rip), %rsi      # 0xf00b
movl $0x2e, %edx
leaq 0xcb76(%rip), %rcx      # 0xf01a
callq 0x20f0
cmpl $0x3, -0x28(%rbp)
jne 0x24b1
jmp 0x24d0
leaq 0xcb85(%rip), %rdi      # 0xf03d
leaq 0xcb4c(%rip), %rsi      # 0xf00b
movl $0x2f, %edx
leaq 0xcb4f(%rip), %rcx      # 0xf01a
callq 0x20f0
movl $0x1, -0x40(%rbp)
leaq -0x38(%rbp), %rdi
leaq -0x39(%rbp), %rsi
movq 0x14aea(%rip), %rdx     # 0x16fd0
leaq -0x40(%rbp), %rcx
callq 0x8030
movl $0x2, -0x44(%rbp)
leaq -0x44(%rbp), %rdi
callq 0x7fd0
movq %rax, -0x50(%rbp)
leaq -0x38(%rbp), %rdi
leaq -0x50(%rbp), %rsi
callq 0x8070
movl %eax, -0x48(%rbp)
leaq -0x38(%rbp), %rdi
leaq -0x44(%rbp), %rsi
callq 0x80a0
cmpl $0x3, -0x44(%rbp)
jne 0x2528
jmp 0x2547
leaq 0xcad5(%rip), %rdi      # 0xf004
leaq 0xcad5(%rip), %rsi      # 0xf00b
movl $0x36, %edx
leaq 0xcad8(%rip), %rcx      # 0xf01a
callq 0x20f0
cmpl $0x3, -0x48(%rbp)
jne 0x254f
jmp 0x256e
leaq 0xcae7(%rip), %rdi      # 0xf03d
leaq 0xcaae(%rip), %rsi      # 0xf00b
movl $0x37, %edx
leaq 0xcab1(%rip), %rcx      # 0xf01a
callq 0x20f0
movq 0x14a5b(%rip), %rdx     # 0x16fd0
movq 0x14a74(%rip), %rcx     # 0x16ff0
leaq -0x52(%rbp), %rdi
leaq -0x53(%rbp), %rsi
leaq -0x54(%rbp), %r8
callq 0x34a0
movl $0x1, -0x90(%rbp)
movl $0x2, -0x8c(%rbp)
movl $0x3, -0x88(%rbp)
movl $0x4, -0x84(%rbp)
leaq -0x90(%rbp), %rax
movq %rax, -0x80(%rbp)
movq $0x4, -0x78(%rbp)
leaq -0x91(%rbp), %rdi
movq %rdi, -0x5a0(%rbp)
callq 0x80d0
movq -0x5a0(%rbp), %rcx
movq -0x80(%rbp), %rsi
movq -0x78(%rbp), %rdx
leaq -0x70(%rbp), %rdi
callq 0x80f0
jmp 0x25f5
leaq -0x91(%rbp), %rdi
callq 0x8170
leaq -0x70(%rbp), %rdi
callq 0x8190
movq %rax, -0x5a8(%rbp)
jmp 0x2613
movq -0x5a8(%rbp), %rax
movq %rax, -0xb0(%rbp)
leaq -0x70(%rbp), %rdi
callq 0x81c0
movq %rax, -0x5b0(%rbp)
jmp 0x2633
movq -0x5b0(%rbp), %rax
movq %rax, -0xb8(%rbp)
leaq -0x52(%rbp), %rdi
leaq -0xb0(%rbp), %rsi
leaq -0xb8(%rbp), %rdx
callq 0x34f0
jmp 0x265a
leaq -0x70(%rbp), %rdi
callq 0x8190
movq %rax, -0x5b8(%rbp)
jmp 0x266c
movq -0x5b8(%rbp), %rax
movq %rax, -0xc0(%rbp)
leaq -0xc0(%rbp), %rdi
xorl %esi, %esi
callq 0x81f0
movq %rax, -0xc8(%rbp)
leaq -0xc8(%rbp), %rdi
callq 0x8230
cmpl $0x4, (%rax)
jne 0x26a2
jmp 0x26fb
leaq 0xc99b(%rip), %rdi      # 0xf044
leaq 0xc95b(%rip), %rsi      # 0xf00b
movl $0x40, %edx
leaq 0xc95e(%rip), %rcx      # 0xf01a
callq 0x20f0
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xa0(%rbp)
movl %eax, -0xa4(%rbp)
leaq -0x91(%rbp), %rdi
callq 0x8170
jmp 0x348b
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xa0(%rbp)
movl %eax, -0xa4(%rbp)
jmp 0x2f08
leaq -0xc0(%rbp), %rdi
xorl %esi, %esi
callq 0x81f0
movq %rax, -0xd0(%rbp)
leaq -0xd0(%rbp), %rdi
callq 0x8230
cmpl $0x3, (%rax)
jne 0x2723
jmp 0x2742
leaq 0xc925(%rip), %rdi      # 0xf04f
leaq 0xc8da(%rip), %rsi      # 0xf00b
movl $0x41, %edx
leaq 0xc8dd(%rip), %rcx      # 0xf01a
callq 0x20f0
leaq -0xc0(%rbp), %rdi
xorl %esi, %esi
callq 0x81f0
movq %rax, -0xd8(%rbp)
leaq -0xd8(%rbp), %rdi
callq 0x8230
cmpl $0x2, (%rax)
jne 0x276a
jmp 0x2789
leaq 0xc8e9(%rip), %rdi      # 0xf05a
leaq 0xc893(%rip), %rsi      # 0xf00b
movl $0x42, %edx
leaq 0xc896(%rip), %rcx      # 0xf01a
callq 0x20f0
leaq -0xc0(%rbp), %rdi
xorl %esi, %esi
callq 0x81f0
movq %rax, -0xe0(%rbp)
leaq -0xe0(%rbp), %rdi
callq 0x8230
cmpl $0x1, (%rax)
jne 0x27b1
jmp 0x27d0
leaq 0xc8ad(%rip), %rdi      # 0xf065
leaq 0xc84c(%rip), %rsi      # 0xf00b
movl $0x43, %edx
leaq 0xc84f(%rip), %rcx      # 0xf01a
callq 0x20f0
leaq -0x70(%rbp), %rdi
callq 0x81c0
movq %rax, -0x5c0(%rbp)
jmp 0x27e2
movq -0x5c0(%rbp), %rax
movq %rax, -0xe8(%rbp)
leaq -0xc0(%rbp), %rdi
leaq -0xe8(%rbp), %rsi
callq 0x8250
testb $0x1, %al
jne 0x2809
jmp 0x280b
jmp 0x282a
leaq 0xc85e(%rip), %rdi      # 0xf070
leaq 0xc7f2(%rip), %rsi      # 0xf00b
movl $0x44, %edx
leaq 0xc7f5(%rip), %rcx      # 0xf01a
callq 0x20f0
movb $0x1, -0x1d5(%rbp)
leaq -0x1c8(%rbp), %rax
movq %rax, -0x5d0(%rbp)
movq %rax, -0x1d0(%rbp)
leaq -0x1d1(%rbp), %rdi
movq %rdi, -0x5c8(%rbp)
callq 0x2290
movq -0x5d0(%rbp), %rdi
movq -0x5c8(%rbp), %rdx
leaq 0xc811(%rip), %rsi      # 0xf07f
callq 0x8290
jmp 0x2875
leaq -0x1a8(%rbp), %rax
movq %rax, -0x5e0(%rbp)
movq %rax, -0x1d0(%rbp)
leaq -0x1d2(%rbp), %rdi
movq %rdi, -0x5d8(%rbp)
callq 0x2290
movq -0x5e0(%rbp), %rdi
movq -0x5d8(%rbp), %rdx
leaq 0xc7cf(%rip), %rsi      # 0xf081
callq 0x8290
jmp 0x28b9
leaq -0x188(%rbp), %rax
movq %rax, -0x5f0(%rbp)
movq %rax, -0x1d0(%rbp)
leaq -0x1d3(%rbp), %rdi
movq %rdi, -0x5e8(%rbp)
callq 0x2290
movq -0x5f0(%rbp), %rdi
movq -0x5e8(%rbp), %rdx
leaq 0xc78d(%rip), %rsi      # 0xf083
callq 0x8290
jmp 0x28fd
leaq -0x168(%rbp), %rax
movq %rax, -0x600(%rbp)
movq %rax, -0x1d0(%rbp)
leaq -0x1d4(%rbp), %rdi
movq %rdi, -0x5f8(%rbp)
callq 0x2290
movq -0x600(%rbp), %rdi
movq -0x5f8(%rbp), %rdx
leaq 0xc80a(%rip), %rsi      # 0xf144
callq 0x8290
jmp 0x2941
movb $0x0, -0x1d5(%rbp)
leaq -0x1c8(%rbp), %rax
movq %rax, -0x148(%rbp)
movq $0x4, -0x140(%rbp)
leaq -0x1d6(%rbp), %rdi
movq %rdi, -0x608(%rbp)
callq 0x8340
movq -0x608(%rbp), %rcx
movq -0x148(%rbp), %rsi
movq -0x140(%rbp), %rdx
leaq -0x138(%rbp), %rdi
callq 0x8360
jmp 0x2997
leaq -0x1d6(%rbp), %rdi
callq 0x83e0
leaq -0x1c8(%rbp), %rax
movq %rax, -0x618(%rbp)
addq $0x80, %rax
movq %rax, -0x610(%rbp)
movq -0x610(%rbp), %rdi
addq $-0x20, %rdi
movq %rdi, -0x620(%rbp)
callq 0x20e0
movq -0x618(%rbp), %rcx
movq -0x620(%rbp), %rax
cmpq %rcx, %rax
movq %rax, -0x610(%rbp)
jne 0x29be
leaq -0x1d4(%rbp), %rdi
callq 0x21c0
leaq -0x1d3(%rbp), %rdi
callq 0x21c0
leaq -0x1d2(%rbp), %rdi
callq 0x21c0
leaq -0x1d1(%rbp), %rdi
callq 0x21c0
leaq -0x1f8(%rbp), %rdi
leaq -0x138(%rbp), %rsi
callq 0x8400
jmp 0x2a34
leaq -0x218(%rbp), %rdi
leaq -0x138(%rbp), %rsi
callq 0x8430
jmp 0x2a49
leaq -0x52(%rbp), %rdi
leaq -0x1f8(%rbp), %rsi
leaq -0x218(%rbp), %rdx
callq 0x3530
jmp 0x2a62
leaq -0x238(%rbp), %rdi
leaq -0x138(%rbp), %rsi
callq 0x8400
jmp 0x2a77
leaq -0x258(%rbp), %rdi
movq %rdi, -0x630(%rbp)
leaq -0x238(%rbp), %rsi
xorl %edx, %edx
callq 0x8490
movq -0x630(%rbp), %rdi
callq 0x84d0
movq %rax, %rdi
leaq 0xc69b(%rip), %rsi      # 0xf144
callq 0x8460
movb %al, -0x621(%rbp)
jmp 0x2ab6
movb -0x621(%rbp), %al
testb $0x1, %al
jne 0x2ac2
jmp 0x2ac7
jmp 0x2c5b
leaq 0xc5b7(%rip), %rdi      # 0xf085
leaq 0xc536(%rip), %rsi      # 0xf00b
movl $0x4b, %edx
leaq 0xc539(%rip), %rcx      # 0xf01a
callq 0x20f0
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xa0(%rbp)
movl %eax, -0xa4(%rbp)
jmp 0x2bcf
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xa0(%rbp)
movl %eax, -0xa4(%rbp)
jmp 0x2bc3
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xa0(%rbp)
movl %eax, -0xa4(%rbp)
jmp 0x2bb7
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xa0(%rbp)
movl %eax, -0xa4(%rbp)
jmp 0x2bab
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xa0(%rbp)
movl %eax, -0xa4(%rbp)
leaq -0x1d6(%rbp), %rdi
callq 0x83e0
leaq -0x1c8(%rbp), %rax
movq %rax, -0x640(%rbp)
addq $0x80, %rax
movq %rax, -0x638(%rbp)
movq -0x638(%rbp), %rdi
addq $-0x20, %rdi
movq %rdi, -0x648(%rbp)
callq 0x20e0
movq -0x640(%rbp), %rcx
movq -0x648(%rbp), %rax
cmpq %rcx, %rax
movq %rax, -0x638(%rbp)
jne 0x2b78
jmp 0x2bab
leaq -0x1d4(%rbp), %rdi
callq 0x21c0
leaq -0x1d3(%rbp), %rdi
callq 0x21c0
leaq -0x1d2(%rbp), %rdi
callq 0x21c0
leaq -0x1d1(%rbp), %rdi
callq 0x21c0
testb $0x1, -0x1d5(%rbp)
jne 0x2be6
jmp 0x2c33
movq -0x1d0(%rbp), %rax
leaq -0x1c8(%rbp), %rcx
cmpq %rax, %rcx
movq %rax, -0x650(%rbp)
je 0x2c31
movq -0x650(%rbp), %rdi
addq $-0x20, %rdi
movq %rdi, -0x658(%rbp)
callq 0x20e0
movq -0x658(%rbp), %rax
leaq -0x1c8(%rbp), %rcx
cmpq %rcx, %rax
movq %rax, -0x650(%rbp)
jne 0x2c00
jmp 0x2c33
jmp 0x2f08
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xa0(%rbp)
movl %eax, -0xa4(%rbp)
leaq -0x138(%rbp), %rdi
callq 0x8520
jmp 0x2f08
leaq -0x278(%rbp), %rdi
movq %rdi, -0x668(%rbp)
leaq -0x238(%rbp), %rsi
xorl %edx, %edx
callq 0x8490
movq -0x668(%rbp), %rdi
callq 0x84d0
movq %rax, %rdi
leaq 0xc3f6(%rip), %rsi      # 0xf083
callq 0x8460
movb %al, -0x659(%rbp)
jmp 0x2c9a
movb -0x659(%rbp), %al
testb $0x1, %al
jne 0x2ca6
jmp 0x2ca8
jmp 0x2cc7
leaq 0xc3e3(%rip), %rdi      # 0xf092
leaq 0xc355(%rip), %rsi      # 0xf00b
movl $0x4c, %edx
leaq 0xc358(%rip), %rcx      # 0xf01a
callq 0x20f0
leaq -0x298(%rbp), %rdi
movq %rdi, -0x678(%rbp)
leaq -0x238(%rbp), %rsi
xorl %edx, %edx
callq 0x8490
movq -0x678(%rbp), %rdi
callq 0x84d0
movq %rax, %rdi
leaq 0xc388(%rip), %rsi      # 0xf081
callq 0x8460
movb %al, -0x669(%rbp)
jmp 0x2d06
movb -0x669(%rbp), %al
testb $0x1, %al
jne 0x2d12
jmp 0x2d14
jmp 0x2d33
leaq 0xc384(%rip), %rdi      # 0xf09f
leaq 0xc2e9(%rip), %rsi      # 0xf00b
movl $0x4d, %edx
leaq 0xc2ec(%rip), %rcx      # 0xf01a
callq 0x20f0
leaq -0x2b8(%rbp), %rdi
movq %rdi, -0x688(%rbp)
leaq -0x238(%rbp), %rsi
xorl %edx, %edx
callq 0x8490
movq -0x688(%rbp), %rdi
callq 0x84d0
movq %rax, %rdi
leaq 0xc31a(%rip), %rsi      # 0xf07f
callq 0x8460
movb %al, -0x679(%rbp)
jmp 0x2d72
movb -0x679(%rbp), %al
testb $0x1, %al
jne 0x2d7e
jmp 0x2d80
jmp 0x2d9f
leaq 0xc325(%rip), %rdi      # 0xf0ac
leaq 0xc27d(%rip), %rsi      # 0xf00b
movl $0x4e, %edx
leaq 0xc280(%rip), %rcx      # 0xf01a
callq 0x20f0
leaq -0x2d8(%rbp), %rdi
leaq -0x138(%rbp), %rsi
callq 0x8430
jmp 0x2db4
leaq -0x238(%rbp), %rdi
leaq -0x2d8(%rbp), %rsi
callq 0x84f0
testb $0x1, %al
jne 0x2dcd
jmp 0x2dcf
jmp 0x2dee
leaq 0xc2e3(%rip), %rdi      # 0xf0b9
leaq 0xc22e(%rip), %rsi      # 0xf00b
movl $0x4f, %edx
leaq 0xc231(%rip), %rcx      # 0xf01a
callq 0x20f0
leaq -0x138(%rbp), %rdi
callq 0x8520
leaq -0x70(%rbp), %rdi
callq 0x8590
leaq -0x450(%rbp), %rdi
movq %rdi, -0x690(%rbp)
callq 0x2220
movq -0x690(%rbp), %rdi
callq 0x85f0
movq %rax, -0x470(%rbp)
leaq -0x460(%rbp), %rdi
leaq -0x461(%rbp), %rsi
leaq -0x470(%rbp), %rdx
callq 0x3570
jmp 0x2e45
movl $0x1, -0x474(%rbp)
movabsq $0x3ff0000000000000, %rax # imm = 0x3FF0000000000000
movq %rax, -0x480(%rbp)
movb $0x31, -0x481(%rbp)
leaq 0xc200(%rip), %r8       # 0xf06e
leaq -0x460(%rbp), %rdi
leaq -0x474(%rbp), %rsi
leaq -0x480(%rbp), %rdx
leaq -0x481(%rbp), %rcx
callq 0x35b0
movq %rax, -0x698(%rbp)
jmp 0x2e98
movq -0x698(%rbp), %rdi
movl $0x2, %esi
callq 0x2270
jmp 0x2eab
leaq -0x4a8(%rbp), %rdi
leaq -0x450(%rbp), %rsi
callq 0x21a0
jmp 0x2ec0
leaq 0xc200(%rip), %rsi      # 0xf0c7
leaq -0x4a8(%rbp), %rdi
callq 0x8460
movb %al, -0x699(%rbp)
jmp 0x2edb
movb -0x699(%rbp), %al
testb $0x1, %al
jne 0x2ee7
jmp 0x2ee9
jmp 0x2f50
leaq 0xc1dd(%rip), %rdi      # 0xf0cd
leaq 0xc114(%rip), %rsi      # 0xf00b
movl $0x56, %edx
leaq 0xc117(%rip), %rcx      # 0xf01a
callq 0x20f0
leaq -0x70(%rbp), %rdi
callq 0x8590
jmp 0x348b
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xa0(%rbp)
movl %eax, -0xa4(%rbp)
jmp 0x30d3
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xa0(%rbp)
movl %eax, -0xa4(%rbp)
leaq -0x4a8(%rbp), %rdi
callq 0x20e0
jmp 0x30d3
leaq -0x4a8(%rbp), %rdi
callq 0x20e0
leaq -0x450(%rbp), %rdi
callq 0x2050
movl $0x1, -0x4e0(%rbp)
movl $0x2, -0x4dc(%rbp)
movl $0x3, -0x4d8(%rbp)
movl $0x4, -0x4d4(%rbp)
leaq -0x4e0(%rbp), %rax
movq %rax, -0x4d0(%rbp)
movq $0x4, -0x4c8(%rbp)
leaq -0x4e1(%rbp), %rdi
movq %rdi, -0x6a8(%rbp)
callq 0x80d0
movq -0x6a8(%rbp), %rcx
movq -0x4d0(%rbp), %rsi
movq -0x4c8(%rbp), %rdx
leaq -0x4c0(%rbp), %rdi
callq 0x80f0
jmp 0x2fdf
leaq -0x4e1(%rbp), %rdi
callq 0x8170
leaq -0x4c0(%rbp), %rdi
callq 0x8190
movq %rax, -0x6b0(%rbp)
jmp 0x3000
movq -0x6b0(%rbp), %rax
movq %rax, -0x510(%rbp)
leaq -0x4c0(%rbp), %rdi
callq 0x81c0
movq %rax, -0x6b8(%rbp)
jmp 0x3023
movq -0x6b8(%rbp), %rax
movq %rax, -0x518(%rbp)
leaq -0x500(%rbp), %rdi
leaq -0x501(%rbp), %rsi
leaq -0x510(%rbp), %rdx
leaq -0x518(%rbp), %rcx
callq 0x3600
jmp 0x3054
leaq -0x500(%rbp), %rdi
leaq -0x519(%rbp), %rsi
callq 0x3640
jmp 0x3069
leaq -0x4c0(%rbp), %rdi
callq 0x8190
movq %rax, -0x6c0(%rbp)
jmp 0x307e
movq -0x6c0(%rbp), %rax
movq %rax, -0x528(%rbp)
leaq -0x528(%rbp), %rdi
xorl %esi, %esi
callq 0x81f0
movq %rax, -0x530(%rbp)
leaq -0x530(%rbp), %rdi
callq 0x8230
cmpl $0x4, (%rax)
jne 0x30b4
jmp 0x312a
leaq 0xbf89(%rip), %rdi      # 0xf044
leaq 0xbf49(%rip), %rsi      # 0xf00b
movl $0x5e, %edx
leaq 0xbf4c(%rip), %rcx      # 0xf01a
callq 0x20f0
leaq -0x450(%rbp), %rdi
callq 0x2050
jmp 0x348b
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xa0(%rbp)
movl %eax, -0xa4(%rbp)
leaq -0x4e1(%rbp), %rdi
callq 0x8170
jmp 0x348b
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xa0(%rbp)
movl %eax, -0xa4(%rbp)
leaq -0x4c0(%rbp), %rdi
callq 0x8590
jmp 0x348b
leaq -0x528(%rbp), %rdi
xorl %esi, %esi
callq 0x81f0
movq %rax, -0x538(%rbp)
leaq -0x538(%rbp), %rdi
callq 0x8230
cmpl $0x3, (%rax)
jne 0x3152
jmp 0x3171
leaq 0xbef6(%rip), %rdi      # 0xf04f
leaq 0xbeab(%rip), %rsi      # 0xf00b
movl $0x5f, %edx
leaq 0xbeae(%rip), %rcx      # 0xf01a
callq 0x20f0
leaq -0x528(%rbp), %rdi
xorl %esi, %esi
callq 0x81f0
movq %rax, -0x540(%rbp)
leaq -0x540(%rbp), %rdi
callq 0x8230
cmpl $0x2, (%rax)
jne 0x3199
jmp 0x31b8
leaq 0xbeba(%rip), %rdi      # 0xf05a
leaq 0xbe64(%rip), %rsi      # 0xf00b
movl $0x60, %edx
leaq 0xbe67(%rip), %rcx      # 0xf01a
callq 0x20f0
leaq -0x528(%rbp), %rdi
xorl %esi, %esi
callq 0x81f0
movq %rax, -0x548(%rbp)
leaq -0x548(%rbp), %rdi
callq 0x8230
cmpl $0x1, (%rax)
jne 0x31e0
jmp 0x31ff
leaq 0xbe7e(%rip), %rdi      # 0xf065
leaq 0xbe1d(%rip), %rsi      # 0xf00b
movl $0x61, %edx
leaq 0xbe20(%rip), %rcx      # 0xf01a
callq 0x20f0
leaq -0x4c0(%rbp), %rdi
callq 0x81c0
movq %rax, -0x6c8(%rbp)
jmp 0x3214
movq -0x6c8(%rbp), %rax
movq %rax, -0x550(%rbp)
leaq -0x528(%rbp), %rdi
leaq -0x550(%rbp), %rsi
callq 0x8250
testb $0x1, %al
jne 0x323b
jmp 0x323d
jmp 0x325c
leaq 0xbe2c(%rip), %rdi      # 0xf070
leaq 0xbdc0(%rip), %rsi      # 0xf00b
movl $0x62, %edx
leaq 0xbdc3(%rip), %rcx      # 0xf01a
callq 0x20f0
leaq -0x500(%rbp), %rdi
callq 0x3680
jmp 0x326a
leaq -0x4c0(%rbp), %rdi
callq 0x8190
movq %rax, -0x6d0(%rbp)
jmp 0x327f
movq -0x6d0(%rbp), %rax
movq %rax, -0x558(%rbp)
leaq -0x558(%rbp), %rdi
xorl %esi, %esi
callq 0x81f0
movq %rax, -0x560(%rbp)
leaq -0x560(%rbp), %rdi
callq 0x8230
cmpl $0x1, (%rax)
jne 0x32b5
jmp 0x32d4
leaq 0xbda9(%rip), %rdi      # 0xf065
leaq 0xbd48(%rip), %rsi      # 0xf00b
movl $0x67, %edx
leaq 0xbd4b(%rip), %rcx      # 0xf01a
callq 0x20f0
leaq -0x558(%rbp), %rdi
xorl %esi, %esi
callq 0x81f0
movq %rax, -0x568(%rbp)
leaq -0x568(%rbp), %rdi
callq 0x8230
cmpl $0x2, (%rax)
jne 0x32fc
jmp 0x331b
leaq 0xbd57(%rip), %rdi      # 0xf05a
leaq 0xbd01(%rip), %rsi      # 0xf00b
movl $0x68, %edx
leaq 0xbd04(%rip), %rcx      # 0xf01a
callq 0x20f0
leaq -0x558(%rbp), %rdi
xorl %esi, %esi
callq 0x81f0
movq %rax, -0x570(%rbp)
leaq -0x570(%rbp), %rdi
callq 0x8230
cmpl $0x3, (%rax)
jne 0x3343
jmp 0x3362
leaq 0xbd05(%rip), %rdi      # 0xf04f
leaq 0xbcba(%rip), %rsi      # 0xf00b
movl $0x69, %edx
leaq 0xbcbd(%rip), %rcx      # 0xf01a
callq 0x20f0
leaq -0x558(%rbp), %rdi
xorl %esi, %esi
callq 0x81f0
movq %rax, -0x578(%rbp)
leaq -0x578(%rbp), %rdi
callq 0x8230
cmpl $0x4, (%rax)
jne 0x338a
jmp 0x33a9
leaq 0xbcb3(%rip), %rdi      # 0xf044
leaq 0xbc73(%rip), %rsi      # 0xf00b
movl $0x6a, %edx
leaq 0xbc76(%rip), %rcx      # 0xf01a
callq 0x20f0
leaq -0x4c0(%rbp), %rdi
callq 0x81c0
movq %rax, -0x6d8(%rbp)
jmp 0x33be
movq -0x6d8(%rbp), %rax
movq %rax, -0x580(%rbp)
leaq -0x558(%rbp), %rdi
leaq -0x580(%rbp), %rsi
callq 0x8250
testb $0x1, %al
jne 0x33e5
jmp 0x33e7
jmp 0x3406
leaq 0xbc82(%rip), %rdi      # 0xf070
leaq 0xbc16(%rip), %rsi      # 0xf00b
movl $0x6b, %edx
leaq 0xbc19(%rip), %rcx      # 0xf01a
callq 0x20f0
leaq -0x4c0(%rbp), %rdi
callq 0x8590
movl $0x1, -0x590(%rbp)
leaq -0x588(%rbp), %rdi
leaq -0x589(%rbp), %rsi
movq 0x13b9f(%rip), %rdx     # 0x16fd0
leaq -0x590(%rbp), %rcx
callq 0x36b0
movl $0x2, -0x594(%rbp)
leaq -0x588(%rbp), %rdi
leaq -0x594(%rbp), %rsi
callq 0x36f0
cmpl $0x3, %eax
jne 0x3461
jmp 0x3480
leaq 0xbc79(%rip), %rdi      # 0xf0e1
leaq 0xbb9c(%rip), %rsi      # 0xf00b
movl $0x70, %edx
leaq 0xbb9f(%rip), %rcx      # 0xf01a
callq 0x20f0
xorl %eax, %eax
addq $0x6e0, %rsp            # imm = 0x6E0
popq %rbp
retq
movq -0xa0(%rbp), %rdi
callq 0x2280
nopw (%rax,%rax)