// File: ambersun1234[P]AVL_Tree/./googletest/googletest/src/gtest.cc
// Function: testing::internal::UnitTestImpl::GetTestCase(char const*, char const*, void (*)(), void (*)())
TestCase* UnitTestImpl::GetTestCase(const char* test_case_name,
                                    const char* type_param,
                                    Test::SetUpTestCaseFunc set_up_tc,
                                    Test::TearDownTestCaseFunc tear_down_tc) {
  // Can we find a TestCase with the given name?
  const std::vector<TestCase*>::const_reverse_iterator test_case =
      std::find_if(test_cases_.rbegin(), test_cases_.rend(),
                   TestCaseNameIs(test_case_name));

  if (test_case != test_cases_.rend())
    return *test_case;

  // No.  Let's create one.
  TestCase* const new_test_case =
      new TestCase(test_case_name, type_param, set_up_tc, tear_down_tc);

  // Is this a death test case?
  if (internal::UnitTestOptions::MatchesFilter(test_case_name,
                                               kDeathTestCaseFilter)) {
    // Yes.  Inserts the test case after the last death test case
    // defined so far.  This only works when the test cases haven't
    // been shuffled.  Otherwise we may end up running a death test
    // after a non-death test.
    ++last_death_test_case_;
    test_cases_.insert(test_cases_.begin() + last_death_test_case_,
                       new_test_case);
  } else {
    // No.  Appends to the end of the list.
    test_cases_.push_back(new_test_case);
  }

  test_case_indices_.push_back(static_cast<int>(test_case_indices_.size()));
  return new_test_case;
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x160, %rsp            # imm = 0x160
movq %rdi, -0x10(%rbp)
movq %rsi, -0x18(%rbp)
movq %rdx, -0x20(%rbp)
movq %rcx, -0x28(%rbp)
movq %r8, -0x30(%rbp)
movq -0x10(%rbp), %rsi
movq %rsi, -0x128(%rbp)
addq $0xb8, %rsi
movq %rsi, -0x120(%rbp)
leaq -0x48(%rbp), %rdi
callq 0x3d820
movq -0x120(%rbp), %rsi
leaq -0x50(%rbp), %rdi
callq 0x3d870
movq -0x18(%rbp), %rax
movq %rax, -0x118(%rbp)
leaq -0x91(%rbp), %rdi
movq %rdi, -0x110(%rbp)
callq 0x9c50
movq -0x118(%rbp), %rsi
movq -0x110(%rbp), %rdx
leaq -0x90(%rbp), %rdi
callq 0xf1d0
jmp 0x2c2fb
leaq -0x70(%rbp), %rdi
leaq -0x90(%rbp), %rsi
callq 0x3d8c0
jmp 0x2c30d
leaq -0x40(%rbp), %rdi
leaq -0x48(%rbp), %rsi
leaq -0x50(%rbp), %rdx
leaq -0x70(%rbp), %rcx
callq 0x3d730
jmp 0x2c324
leaq -0x38(%rbp), %rdi
leaq -0x40(%rbp), %rsi
callq 0x3d8f0
jmp 0x2c333
leaq -0x70(%rbp), %rdi
callq 0x3d920
leaq -0x90(%rbp), %rdi
callq 0x9db8
leaq -0x91(%rbp), %rdi
callq 0x96d0
movq -0x128(%rbp), %rsi
addq $0xb8, %rsi
leaq -0xb0(%rbp), %rdi
callq 0x3d870
leaq -0x38(%rbp), %rdi
leaq -0xb0(%rbp), %rsi
callq 0x3d940
testb $0x1, %al
jne 0x2c384
jmp 0x2c3f9
leaq -0x38(%rbp), %rdi
callq 0x3d980
movq (%rax), %rax
movq %rax, -0x8(%rbp)
jmp 0x2c610
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xa0(%rbp)
movl %eax, -0xa4(%rbp)
jmp 0x2c3e8
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xa0(%rbp)
movl %eax, -0xa4(%rbp)
jmp 0x2c3dc
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xa0(%rbp)
movl %eax, -0xa4(%rbp)
leaq -0x70(%rbp), %rdi
callq 0x3d920
leaq -0x90(%rbp), %rdi
callq 0x9db8
leaq -0x91(%rbp), %rdi
callq 0x96d0
jmp 0x2c61d
movl $0xf8, %edi
callq 0x9600
movq %rax, %rdi
movq %rdi, %rax
movq %rax, -0x130(%rbp)
movq -0x18(%rbp), %rsi
movq -0x20(%rbp), %rdx
movq -0x28(%rbp), %rcx
movq -0x30(%rbp), %r8
callq 0x201d0
jmp 0x2c427
movq -0x130(%rbp), %rax
movq %rax, -0xb8(%rbp)
movq -0x18(%rbp), %rax
movq %rax, -0x140(%rbp)
leaq -0xd9(%rbp), %rdi
movq %rdi, -0x138(%rbp)
callq 0x9c50
movq -0x140(%rbp), %rsi
movq -0x138(%rbp), %rdx
leaq -0xd8(%rbp), %rdi
callq 0xf1d0
jmp 0x2c46f
leaq 0x2ad1a(%rip), %rsi     # 0x57190
leaq -0xd8(%rbp), %rdi
callq 0x17980
movb %al, -0x141(%rbp)
jmp 0x2c48a
leaq -0xd8(%rbp), %rdi
callq 0x9db8
leaq -0xd9(%rbp), %rdi
callq 0x96d0
movb -0x141(%rbp), %al
testb $0x1, %al
jne 0x2c4b1
jmp 0x2c5af
movq -0x128(%rbp), %rdi
movl 0x104(%rdi), %eax
addl $0x1, %eax
movl %eax, 0x104(%rdi)
movq %rdi, %rax
addq $0xb8, %rax
movq %rax, -0x150(%rbp)
addq $0xb8, %rdi
callq 0x3dbb0
movq %rax, %rcx
movq -0x128(%rbp), %rax
movq %rcx, -0xf8(%rbp)
movslq 0x104(%rax), %rsi
leaq -0xf8(%rbp), %rdi
callq 0x3dbe0
movq %rax, -0xf0(%rbp)
leaq -0xe8(%rbp), %rdi
leaq -0xf0(%rbp), %rsi
callq 0x3dc20
movq -0x150(%rbp), %rdi
movq -0xe8(%rbp), %rsi
leaq -0xb8(%rbp), %rdx
callq 0x3d9b0
movq %rax, -0x100(%rbp)
jmp 0x2c5c9
movq -0x130(%rbp), %rdi
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xa0(%rbp)
movl %eax, -0xa4(%rbp)
movl $0xf8, %esi
callq 0x9630
jmp 0x2c61d
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xa0(%rbp)
movl %eax, -0xa4(%rbp)
jmp 0x2c5a1
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0xa0(%rbp)
movl %eax, -0xa4(%rbp)
leaq -0xd8(%rbp), %rdi
callq 0x9db8
leaq -0xd9(%rbp), %rdi
callq 0x96d0
jmp 0x2c61d
movq -0x128(%rbp), %rdi
addq $0xb8, %rdi
leaq -0xb8(%rbp), %rsi
callq 0x3dc60
movq -0x128(%rbp), %rdi
movq %rdi, %rax
addq $0xd0, %rax
movq %rax, -0x158(%rbp)
addq $0xd0, %rdi
callq 0x3b5f0
movq -0x158(%rbp), %rdi
movl %eax, -0x104(%rbp)
leaq -0x104(%rbp), %rsi
callq 0x3b5c0
movq -0xb8(%rbp), %rax
movq %rax, -0x8(%rbp)
movq -0x8(%rbp), %rax
addq $0x160, %rsp            # imm = 0x160
popq %rbp
retq
movq -0xa0(%rbp), %rdi
callq 0x9c40
nopl (%rax)