// File: yhirose[P]fizzbuzzlang/./peglib.h
// Function: peg::parse_literal(char const*, unsigned long, peg::SemanticValues&, peg::Context&, std::any&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>> const&, std::once_flag&, bool&, bool)
inline size_t parse_literal(const char *s, size_t n, SemanticValues &vs,
                            Context &c, std::any &dt, const std::string &lit,
                            std::once_flag &init_is_word, bool &is_word,
                            bool ignore_case) {
  size_t i = 0;
  for (; i < lit.size(); i++) {
    if (i >= n || (ignore_case ? (std::tolower(s[i]) != std::tolower(lit[i]))
                               : (s[i] != lit[i]))) {
      c.set_error_pos(s, lit.data());
      return static_cast<size_t>(-1);
    }
  }

  // Word check
  if (c.wordOpe) {
    auto save_ignore_trace_state = c.ignore_trace_state;
    c.ignore_trace_state = !c.verbose_trace;
    auto se =
        scope_exit([&]() { c.ignore_trace_state = save_ignore_trace_state; });

    std::call_once(init_is_word, [&]() {
      SemanticValues dummy_vs;
      Context dummy_c(nullptr, c.s, c.l, 0, nullptr, nullptr, false, nullptr,
                      nullptr, nullptr, false, nullptr);
      std::any dummy_dt;

      auto len =
          c.wordOpe->parse(lit.data(), lit.size(), dummy_vs, dummy_c, dummy_dt);
      is_word = success(len);
    });

    if (is_word) {
      SemanticValues dummy_vs;
      Context dummy_c(nullptr, c.s, c.l, 0, nullptr, nullptr, false, nullptr,
                      nullptr, nullptr, false, nullptr);
      std::any dummy_dt;

      NotPredicate ope(c.wordOpe);
      auto len = ope.parse(s + i, n - i, dummy_vs, dummy_c, dummy_dt);
      if (fail(len)) {
        c.set_error_pos(s, lit.data());
        return len;
      }
      i += len;
    }
  }

  // Skip whitespace
  if (!c.in_token_boundary_count && c.whitespaceOpe) {
    auto save_ignore_trace_state = c.ignore_trace_state;
    c.ignore_trace_state = !c.verbose_trace;
    auto se =
        scope_exit([&]() { c.ignore_trace_state = save_ignore_trace_state; });

    auto len = c.whitespaceOpe->parse(s + i, n - i, vs, c, dt);
    if (fail(len)) { return len; }
    i += len;
  }

  return i;
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x590, %rsp            # imm = 0x590
movb 0x20(%rbp), %al
movq 0x18(%rbp), %r10
movq 0x10(%rbp), %r10
movq %rdi, -0x10(%rbp)
movq %rsi, -0x18(%rbp)
movq %rdx, -0x20(%rbp)
movq %rcx, -0x28(%rbp)
movq %r8, -0x30(%rbp)
movq %r9, -0x38(%rbp)
andb $0x1, %al
movb %al, -0x39(%rbp)
movq $0x0, -0x48(%rbp)
movq -0x48(%rbp), %rax
movq %rax, -0x4f0(%rbp)
movq -0x38(%rbp), %rdi
callq 0xa2d0
movq %rax, %rcx
movq -0x4f0(%rbp), %rax
cmpq %rcx, %rax
jae 0xe0d0
movq -0x48(%rbp), %rax
cmpq -0x18(%rbp), %rax
jae 0xe07b
testb $0x1, -0x39(%rbp)
je 0xe04c
movq -0x10(%rbp), %rax
movq -0x48(%rbp), %rcx
movsbl (%rax,%rcx), %edi
callq 0xa560
movl %eax, -0x4f4(%rbp)
movq -0x38(%rbp), %rdi
movq -0x48(%rbp), %rsi
callq 0xa440
movsbl (%rax), %edi
callq 0xa560
movl %eax, %ecx
movl -0x4f4(%rbp), %eax
cmpl %ecx, %eax
jne 0xe07b
jmp 0xe0bd
movq -0x10(%rbp), %rax
movq -0x48(%rbp), %rcx
movsbl (%rax,%rcx), %eax
movl %eax, -0x4f8(%rbp)
movq -0x38(%rbp), %rdi
movq -0x48(%rbp), %rsi
callq 0xa440
movq %rax, %rcx
movl -0x4f8(%rbp), %eax
movsbl (%rcx), %ecx
cmpl %ecx, %eax
je 0xe0bd
movq -0x28(%rbp), %rax
movq %rax, -0x508(%rbp)
movq -0x10(%rbp), %rax
movq %rax, -0x500(%rbp)
movq -0x38(%rbp), %rdi
callq 0xa4d0
movq -0x508(%rbp), %rdi
movq -0x500(%rbp), %rsi
movq %rax, %rdx
callq 0xd050
movq $-0x1, -0x8(%rbp)
jmp 0xe66c
jmp 0xe0bf
movq -0x48(%rbp), %rax
addq $0x1, %rax
movq %rax, -0x48(%rbp)
jmp 0xdfdb
movq -0x28(%rbp), %rdi
addq $0x108, %rdi            # imm = 0x108
callq 0xd270
testb $0x1, %al
jne 0xe0e9
jmp 0xe51b
movq -0x28(%rbp), %rax
movb 0x288(%rax), %al
andb $0x1, %al
movb %al, -0x49(%rbp)
movq -0x28(%rbp), %rax
movb 0x240(%rax), %cl
notb %cl
andb $0x1, %cl
movb %cl, 0x288(%rax)
movq -0x28(%rbp), %rax
movq %rax, -0x78(%rbp)
leaq -0x49(%rbp), %rax
movq %rax, -0x70(%rbp)
leaq -0x68(%rbp), %rdi
leaq -0x78(%rbp), %rsi
callq 0x1f600
movq 0x10(%rbp), %rdi
movq -0x28(%rbp), %rax
movq %rax, -0x90(%rbp)
movq -0x38(%rbp), %rax
movq %rax, -0x88(%rbp)
movq 0x18(%rbp), %rax
movq %rax, -0x80(%rbp)
leaq -0x90(%rbp), %rsi
callq 0x1f630
jmp 0xe15a
movq 0x18(%rbp), %rax
testb $0x1, (%rax)
je 0xe4e7
leaq -0x140(%rbp), %rdi
callq 0xd2c0
movq -0x28(%rbp), %rax
movq 0x8(%rax), %rcx
movq %rcx, -0x520(%rbp)
movq 0x10(%rax), %rax
movq %rax, -0x518(%rbp)
xorl %eax, %eax
movl %eax, %esi
movq %rsi, -0x510(%rbp)
leaq -0x3f8(%rbp), %rdi
callq 0xd340
movq -0x510(%rbp), %rsi
leaq -0x408(%rbp), %rdi
callq 0xd340
movq -0x510(%rbp), %rsi
leaq -0x428(%rbp), %rdi
callq 0xd360
movq -0x510(%rbp), %rsi
leaq -0x448(%rbp), %rdi
callq 0xd3a0
movq $0x0, -0x460(%rbp)
leaq -0x458(%rbp), %rdi
leaq -0x460(%rbp), %rsi
callq 0xd3e0
jmp 0xe1fd
xorl %eax, %eax
movl %eax, %esi
movq %rsi, -0x528(%rbp)
leaq -0x480(%rbp), %rdi
movq %rdi, -0x530(%rbp)
callq 0xd430
movq -0x530(%rbp), %rsi
movq -0x520(%rbp), %rdx
movq -0x518(%rbp), %rcx
movq -0x528(%rbp), %r8
movq %rsp, %rax
movq %rsi, 0x30(%rax)
leaq -0x458(%rbp), %rsi
movq %rsi, 0x20(%rax)
leaq -0x448(%rbp), %rsi
movq %rsi, 0x18(%rax)
leaq -0x428(%rbp), %rsi
movq %rsi, 0x10(%rax)
leaq -0x408(%rbp), %rsi
movq %rsi, (%rax)
movl $0x0, 0x28(%rax)
movl $0x0, 0x8(%rax)
leaq -0x3e8(%rbp), %rdi
leaq -0x3f8(%rbp), %r9
movq %r8, %rsi
callq 0xd470
jmp 0xe28f
leaq -0x480(%rbp), %rdi
callq 0xd9d0
leaq -0x458(%rbp), %rdi
callq 0xd9f0
leaq -0x448(%rbp), %rdi
callq 0xda10
leaq -0x428(%rbp), %rdi
callq 0xda30
leaq -0x408(%rbp), %rdi
callq 0xda50
leaq -0x3f8(%rbp), %rdi
callq 0xda50
leaq -0x490(%rbp), %rdi
callq 0xda70
movq -0x28(%rbp), %rsi
addq $0x108, %rsi            # imm = 0x108
leaq -0x4a8(%rbp), %rdi
callq 0xdaa0
jmp 0xe2fc
movq -0x10(%rbp), %rsi
movq -0x48(%rbp), %rax
addq %rax, %rsi
movq -0x18(%rbp), %rdx
subq %rax, %rdx
leaq -0x4a8(%rbp), %rdi
leaq -0x140(%rbp), %rcx
leaq -0x3e8(%rbp), %r8
leaq -0x490(%rbp), %r9
callq 0xdaf0
movq %rax, -0x538(%rbp)
jmp 0xe338
movq -0x538(%rbp), %rax
movq %rax, -0x4b0(%rbp)
movq -0x4b0(%rbp), %rdi
callq 0xdbd0
testb $0x1, %al
jne 0xe35b
jmp 0xe46a
movq -0x28(%rbp), %rax
movq %rax, -0x548(%rbp)
movq -0x10(%rbp), %rax
movq %rax, -0x540(%rbp)
movq -0x38(%rbp), %rdi
callq 0xa4d0
movq -0x548(%rbp), %rdi
movq -0x540(%rbp), %rsi
movq %rax, %rdx
callq 0xd050
jmp 0xe392
movq -0x4b0(%rbp), %rax
movq %rax, -0x8(%rbp)
movl $0x1, -0x4b4(%rbp)
jmp 0xe483
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x98(%rbp)
movl %eax, -0x9c(%rbp)
jmp 0xe50d
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x98(%rbp)
movl %eax, -0x9c(%rbp)
jmp 0xe401
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x98(%rbp)
movl %eax, -0x9c(%rbp)
leaq -0x480(%rbp), %rdi
callq 0xd9d0
leaq -0x458(%rbp), %rdi
callq 0xd9f0
leaq -0x448(%rbp), %rdi
callq 0xda10
leaq -0x428(%rbp), %rdi
callq 0xda30
leaq -0x408(%rbp), %rdi
callq 0xda50
leaq -0x3f8(%rbp), %rdi
callq 0xda50
jmp 0xe4d9
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x98(%rbp)
movl %eax, -0x9c(%rbp)
jmp 0xe4c1
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x98(%rbp)
movl %eax, -0x9c(%rbp)
leaq -0x4a8(%rbp), %rdi
callq 0xdbf0
jmp 0xe4c1
movq -0x4b0(%rbp), %rax
addq -0x48(%rbp), %rax
movq %rax, -0x48(%rbp)
movl $0x0, -0x4b4(%rbp)
leaq -0x4a8(%rbp), %rdi
callq 0xdbf0
leaq -0x490(%rbp), %rdi
callq 0xd9f0
leaq -0x3e8(%rbp), %rdi
callq 0xdc30
leaq -0x140(%rbp), %rdi
callq 0xde10
movl -0x4b4(%rbp), %eax
testl %eax, %eax
jne 0xe4f1
jmp 0xe4bf
jmp 0xe4e7
leaq -0x490(%rbp), %rdi
callq 0xd9f0
leaq -0x3e8(%rbp), %rdi
callq 0xdc30
leaq -0x140(%rbp), %rdi
callq 0xde10
jmp 0xe50d
movl $0x0, -0x4b4(%rbp)
leaq -0x68(%rbp), %rdi
callq 0x1f6b0
movl -0x4b4(%rbp), %eax
testl %eax, %eax
je 0xe50b
jmp 0xe506
jmp 0xe66c
jmp 0xe51b
leaq -0x68(%rbp), %rdi
callq 0x1f6b0
jmp 0xe679
movq -0x28(%rbp), %rax
cmpq $0x0, 0xe8(%rax)
jne 0xe664
movq -0x28(%rbp), %rdi
addq $0xf0, %rdi
callq 0xd270
testb $0x1, %al
jne 0xe546
jmp 0xe664
movq -0x28(%rbp), %rax
movb 0x288(%rax), %al
andb $0x1, %al
movb %al, -0x4b5(%rbp)
movq -0x28(%rbp), %rax
movb 0x240(%rax), %cl
notb %cl
andb $0x1, %cl
movb %cl, 0x288(%rax)
movq -0x28(%rbp), %rax
movq %rax, -0x4e0(%rbp)
leaq -0x4b5(%rbp), %rax
movq %rax, -0x4d8(%rbp)
leaq -0x4d0(%rbp), %rdi
leaq -0x4e0(%rbp), %rsi
callq 0x1f6f0
movq -0x28(%rbp), %rdi
addq $0xf0, %rdi
callq 0xded0
movq %rax, %rdi
movq -0x10(%rbp), %rsi
movq -0x48(%rbp), %rax
addq %rax, %rsi
movq -0x18(%rbp), %rdx
subq %rax, %rdx
movq -0x20(%rbp), %rcx
movq -0x28(%rbp), %r8
movq -0x30(%rbp), %r9
callq 0xdaf0
movq %rax, -0x550(%rbp)
jmp 0xe5d8
movq -0x550(%rbp), %rax
movq %rax, -0x4e8(%rbp)
movq -0x4e8(%rbp), %rdi
callq 0xdbd0
testb $0x1, %al
jne 0xe5f8
jmp 0xe62f
movq -0x4e8(%rbp), %rax
movq %rax, -0x8(%rbp)
movl $0x1, -0x4b4(%rbp)
jmp 0xe648
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x98(%rbp)
movl %eax, -0x9c(%rbp)
leaq -0x4d0(%rbp), %rdi
callq 0x1f720
jmp 0xe679
movq -0x4e8(%rbp), %rax
addq -0x48(%rbp), %rax
movq %rax, -0x48(%rbp)
movl $0x0, -0x4b4(%rbp)
leaq -0x4d0(%rbp), %rdi
callq 0x1f720
movl -0x4b4(%rbp), %eax
testl %eax, %eax
je 0xe662
jmp 0xe660
jmp 0xe66c
jmp 0xe664
movq -0x48(%rbp), %rax
movq %rax, -0x8(%rbp)
movq -0x8(%rbp), %rax
addq $0x590, %rsp            # imm = 0x590
popq %rbp
retq
movq -0x98(%rbp), %rdi
callq 0xa650
nopw %cs:(%rax,%rax)
nop