// File: halfflat[P]tinyopt/test/googletest/googletest/src/gtest.cc
// Function: testing::internal::XmlUnitTestResultPrinter::EscapeXml(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>> const&, bool)
std::string XmlUnitTestResultPrinter::EscapeXml(const std::string& str,
                                                bool is_attribute) {
  Message m;

  for (size_t i = 0; i < str.size(); ++i) {
    const char ch = str[i];
    switch (ch) {
      case '<':
        m << "&lt;";
        break;
      case '>':
        m << "&gt;";
        break;
      case '&':
        m << "&amp;";
        break;
      case '\'':
        if (is_attribute)
          m << "&apos;";
        else
          m << '\'';
        break;
      case '"':
        if (is_attribute)
          m << "&quot;";
        else
          m << '"';
        break;
      default:
        if (IsValidXmlCharacter(static_cast<unsigned char>(ch))) {
          if (is_attribute &&
              IsNormalizableWhitespace(static_cast<unsigned char>(ch)))
            m << "&#x" << String::FormatByte(static_cast<unsigned char>(ch))
              << ";";
          else
            m << ch;
        }
        break;
    }
  }

  return m.GetString();
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0xa0, %rsp
movq %rdi, -0x70(%rbp)
movb %dl, %al
movq %rdi, %rcx
movq %rcx, -0x68(%rbp)
movq %rdi, -0x8(%rbp)
movq %rsi, -0x10(%rbp)
andb $0x1, %al
movb %al, -0x11(%rbp)
leaq -0x20(%rbp), %rdi
callq 0x84210
movq $0x0, -0x28(%rbp)
movq -0x28(%rbp), %rax
movq %rax, -0x78(%rbp)
movq -0x10(%rbp), %rdi
callq 0x104f0
movq %rax, %rcx
movq -0x78(%rbp), %rax
cmpq %rcx, %rax
jae 0x8f468
movq -0x10(%rbp), %rdi
movq -0x28(%rbp), %rsi
callq 0x10850
movb (%rax), %al
movb %al, -0x29(%rbp)
movsbl -0x29(%rbp), %eax
addl $-0x22, %eax
movl %eax, %ecx
movq %rcx, -0x80(%rbp)
subl $0x1c, %eax
ja 0x8f381
movq -0x80(%rbp), %rax
leaq 0x3ceda(%rip), %rcx     # 0xcc194
movslq (%rcx,%rax,4), %rax
addq %rcx, %rax
jmpq *%rax
leaq 0x3fb00(%rip), %rsi     # 0xcedca
leaq -0x20(%rbp), %rdi
callq 0xa94c0
jmp 0x8f2d5
jmp 0x8f455
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x38(%rbp)
movl %eax, -0x3c(%rbp)
jmp 0x8f48d
leaq 0x3fadd(%rip), %rsi     # 0xcedcf
leaq -0x20(%rbp), %rdi
callq 0xa94c0
jmp 0x8f2fd
jmp 0x8f455
leaq 0x3facb(%rip), %rsi     # 0xcedd4
leaq -0x20(%rbp), %rdi
callq 0xa40b0
jmp 0x8f314
jmp 0x8f455
testb $0x1, -0x11(%rbp)
je 0x8f333
leaq 0x3fab4(%rip), %rsi     # 0xcedda
leaq -0x20(%rbp), %rdi
callq 0xa4030
jmp 0x8f331
jmp 0x8f348
movb $0x27, -0x3d(%rbp)
leaq -0x20(%rbp), %rdi
leaq -0x3d(%rbp), %rsi
callq 0xa9500
jmp 0x8f346
jmp 0x8f348
jmp 0x8f455
testb $0x1, -0x11(%rbp)
je 0x8f367
leaq 0x3fa87(%rip), %rsi     # 0xcede1
leaq -0x20(%rbp), %rdi
callq 0xa4030
jmp 0x8f365
jmp 0x8f37c
movb $0x22, -0x3e(%rbp)
leaq -0x20(%rbp), %rdi
leaq -0x3e(%rbp), %rsi
callq 0xa9500
jmp 0x8f37a
jmp 0x8f37c
jmp 0x8f455
movzbl -0x29(%rbp), %edi
callq 0xa9540
movb %al, -0x81(%rbp)
jmp 0x8f392
movb -0x81(%rbp), %al
testb $0x1, %al
jne 0x8f3a1
jmp 0x8f453
testb $0x1, -0x11(%rbp)
je 0x8f440
movzbl -0x29(%rbp), %edi
callq 0xa9580
movb %al, -0x82(%rbp)
jmp 0x8f3bc
movb -0x82(%rbp), %al
testb $0x1, %al
jne 0x8f3c8
jmp 0x8f440
leaq 0x3fa19(%rip), %rsi     # 0xcede8
leaq -0x20(%rbp), %rdi
callq 0xa4240
movq %rax, -0x90(%rbp)
jmp 0x8f3e1
movzbl -0x29(%rbp), %esi
leaq -0x60(%rbp), %rdi
callq 0x88320
jmp 0x8f3f0
movq -0x90(%rbp), %rdi
leaq -0x60(%rbp), %rsi
callq 0xa2ef0
movq %rax, -0x98(%rbp)
jmp 0x8f409
movq -0x98(%rbp), %rdi
leaq 0x3edef(%rip), %rsi     # 0xce206
callq 0xa2e50
jmp 0x8f41e
leaq -0x60(%rbp), %rdi
callq 0x10fc8
jmp 0x8f451
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x38(%rbp)
movl %eax, -0x3c(%rbp)
leaq -0x60(%rbp), %rdi
callq 0x10fc8
jmp 0x8f48d
leaq -0x20(%rbp), %rdi
leaq -0x29(%rbp), %rsi
callq 0xa9500
jmp 0x8f44f
jmp 0x8f451
jmp 0x8f453
jmp 0x8f455
jmp 0x8f457
movq -0x28(%rbp), %rax
addq $0x1, %rax
movq %rax, -0x28(%rbp)
jmp 0x8f266
movq -0x70(%rbp), %rdi
leaq -0x20(%rbp), %rsi
callq 0x77710
jmp 0x8f477
leaq -0x20(%rbp), %rdi
callq 0x1d500
movq -0x68(%rbp), %rax
addq $0xa0, %rsp
popq %rbp
retq
leaq -0x20(%rbp), %rdi
callq 0x1d500
movq -0x38(%rbp), %rdi
callq 0x10e00
nop