// File: Falldog[P]dcinja/src/include/nlohmann/json.hpp
// Function: nlohmann::json_pointer<nlohmann::basic_json<std::map, std::vector, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>, bool, long, unsigned long, double, std::allocator, nlohmann::adl_serializer, std::vector<unsigned char, std::allocator<unsigned char>>>>::contains(nlohmann::basic_json<std::map, std::vector, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>, bool, long, unsigned long, double, std::allocator, nlohmann::adl_serializer, std::vector<unsigned char, std::allocator<unsigned char>>> const*) const
bool contains(const BasicJsonType* ptr) const
    {
        for (const auto& reference_token : reference_tokens)
        {
            switch (ptr->type())
            {
                case detail::value_t::object:
                {
                    if (!ptr->contains(reference_token))
                    {
                        // we did not find the key in the object
                        return false;
                    }

                    ptr = &ptr->operator[](reference_token);
                    break;
                }

                case detail::value_t::array:
                {
                    if (JSON_HEDLEY_UNLIKELY(reference_token == "-"))
                    {
                        // "-" always fails the range check
                        return false;
                    }
                    if (JSON_HEDLEY_UNLIKELY(reference_token.size() == 1 && !("0" <= reference_token && reference_token <= "9")))
                    {
                        // invalid char
                        return false;
                    }
                    if (JSON_HEDLEY_UNLIKELY(reference_token.size() > 1))
                    {
                        if (JSON_HEDLEY_UNLIKELY(!('1' <= reference_token[0] && reference_token[0] <= '9')))
                        {
                            // first char should be between '1' and '9'
                            return false;
                        }
                        for (std::size_t i = 1; i < reference_token.size(); i++)
                        {
                            if (JSON_HEDLEY_UNLIKELY(!('0' <= reference_token[i] && reference_token[i] <= '9')))
                            {
                                // other char should be between '0' and '9'
                                return false;
                            }
                        }
                    }

                    const auto idx = array_index(reference_token);
                    if (idx >= ptr->size())
                    {
                        // index out of range
                        return false;
                    }

                    ptr = &ptr->operator[](idx);
                    break;
                }

                default:
                {
                    // we do not expect primitive values if there is still a
                    // reference token to process
                    return false;
                }
            }
        }

        // no reference token left means we found a primitive value
        return true;
    }

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x70, %rsp
movq %rdi, -0x10(%rbp)
movq %rsi, -0x18(%rbp)
movq -0x10(%rbp), %rax
movq %rax, -0x20(%rbp)
movq -0x20(%rbp), %rdi
callq 0x22030
movq %rax, -0x28(%rbp)
movq -0x20(%rbp), %rdi
callq 0x22060
movq %rax, -0x30(%rbp)
leaq -0x28(%rbp), %rdi
leaq -0x30(%rbp), %rsi
callq 0x22410
testb $0x1, %al
jne 0x6cd98
jmp 0x6cfc6
leaq -0x28(%rbp), %rdi
callq 0x22480
movq %rax, -0x38(%rbp)
movq -0x18(%rbp), %rdi
callq 0x6cfe0
movb %al, %cl
movb %cl, -0x49(%rbp)
subb $0x1, %al
je 0x6cdc5
jmp 0x6cdb9
movb -0x49(%rbp), %al
subb $0x2, %al
je 0x6cdf5
jmp 0x6cfb0
movq -0x18(%rbp), %rdi
movq -0x38(%rbp), %rsi
callq 0x6cff0
testb $0x1, %al
jne 0x6cddf
movb $0x0, -0x1(%rbp)
jmp 0x6cfca
movq -0x18(%rbp), %rdi
movq -0x38(%rbp), %rsi
callq 0x6d060
movq %rax, -0x18(%rbp)
jmp 0x6cfb6
movq -0x38(%rbp), %rdi
leaq 0x55855(%rip), %rsi     # 0xc2655
callq 0x10d10
xorb $-0x1, %al
xorb $-0x1, %al
testb $0x1, %al
jne 0x6ce0f
jmp 0x6ce18
movb $0x0, -0x1(%rbp)
jmp 0x6cfca
movq -0x38(%rbp), %rdi
callq 0xb440
movq %rax, %rcx
xorl %eax, %eax
cmpq $0x1, %rcx
movb %al, -0x4a(%rbp)
jne 0x6ce68
movq -0x38(%rbp), %rsi
leaq 0x5b36f(%rip), %rdi     # 0xc81a9
callq 0x6d230
movb %al, %cl
xorl %eax, %eax
testb $0x1, %cl
movb %al, -0x4b(%rbp)
jne 0x6ce4d
jmp 0x6ce60
movq -0x38(%rbp), %rdi
leaq 0x5b1df(%rip), %rsi     # 0xc8037
callq 0x6d260
movb %al, -0x4b(%rbp)
movb -0x4b(%rbp), %al
xorb $-0x1, %al
movb %al, -0x4a(%rbp)
movb -0x4a(%rbp), %al
xorb $-0x1, %al
xorb $-0x1, %al
testb $0x1, %al
jne 0x6ce75
jmp 0x6ce7e
movb $0x0, -0x1(%rbp)
jmp 0x6cfca
movq -0x38(%rbp), %rdi
callq 0xb440
cmpq $0x1, %rax
seta %al
xorb $-0x1, %al
xorb $-0x1, %al
testb $0x1, %al
jne 0x6ce9b
jmp 0x6cf6d
movq -0x38(%rbp), %rdi
xorl %eax, %eax
movl %eax, %esi
callq 0xb630
movsbl (%rax), %edx
xorl %eax, %eax
movl $0x31, %ecx
cmpl %edx, %ecx
movb %al, -0x4c(%rbp)
jg 0x6ced2
movq -0x38(%rbp), %rdi
xorl %eax, %eax
movl %eax, %esi
callq 0xb630
movsbl (%rax), %eax
cmpl $0x39, %eax
setle %al
movb %al, -0x4c(%rbp)
movb -0x4c(%rbp), %al
xorb $-0x1, %al
xorb $-0x1, %al
xorb $-0x1, %al
testb $0x1, %al
jne 0x6cee1
jmp 0x6ceea
movb $0x0, -0x1(%rbp)
jmp 0x6cfca
movq $0x1, -0x40(%rbp)
movq -0x40(%rbp), %rax
movq %rax, -0x58(%rbp)
movq -0x38(%rbp), %rdi
callq 0xb440
movq %rax, %rcx
movq -0x58(%rbp), %rax
cmpq %rcx, %rax
jae 0x6cf6b
movq -0x38(%rbp), %rdi
movq -0x40(%rbp), %rsi
callq 0xb630
movsbl (%rax), %edx
xorl %eax, %eax
movl $0x30, %ecx
cmpl %edx, %ecx
movb %al, -0x59(%rbp)
jg 0x6cf46
movq -0x38(%rbp), %rdi
movq -0x40(%rbp), %rsi
callq 0xb630
movsbl (%rax), %eax
cmpl $0x39, %eax
setle %al
movb %al, -0x59(%rbp)
movb -0x59(%rbp), %al
xorb $-0x1, %al
xorb $-0x1, %al
xorb $-0x1, %al
testb $0x1, %al
jne 0x6cf55
jmp 0x6cf5b
movb $0x0, -0x1(%rbp)
jmp 0x6cfca
jmp 0x6cf5d
movq -0x40(%rbp), %rax
addq $0x1, %rax
movq %rax, -0x40(%rbp)
jmp 0x6cef2
jmp 0x6cf6d
movq -0x38(%rbp), %rdi
callq 0x6d290
movq %rax, -0x48(%rbp)
movq -0x48(%rbp), %rax
movq %rax, -0x68(%rbp)
movq -0x18(%rbp), %rdi
callq 0x4bb10
movq %rax, %rcx
movq -0x68(%rbp), %rax
cmpq %rcx, %rax
jb 0x6cf9d
movb $0x0, -0x1(%rbp)
jmp 0x6cfca
movq -0x18(%rbp), %rdi
movq -0x48(%rbp), %rsi
callq 0x6d8c0
movq %rax, -0x18(%rbp)
jmp 0x6cfb6
movb $0x0, -0x1(%rbp)
jmp 0x6cfca
jmp 0x6cfb8
leaq -0x28(%rbp), %rdi
callq 0x224a0
jmp 0x6cd82
movb $0x1, -0x1(%rbp)
movb -0x1(%rbp), %al
andb $0x1, %al
addq $0x70, %rsp
popq %rbp
retq
nopw %cs:(%rax,%rax)
nop