// File: mattn[P]wandbox-run/./json.hpp
// Function: 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>::lexer::fill_line_buffer(unsigned long)
void fill_line_buffer(size_t n = 0)
        {
            // if line buffer is used, m_content points to its data
            assert(m_line_buffer.empty()
                   or m_content == reinterpret_cast<const lexer_char_t*>(m_line_buffer.data()));

            // if line buffer is used, m_limit is set past the end of its data
            assert(m_line_buffer.empty()
                   or m_limit == m_content + m_line_buffer.size());

            // pointer relationships
            assert(m_content <= m_start);
            assert(m_start <= m_cursor);
            assert(m_cursor <= m_limit);
            assert(m_marker == nullptr or m_marker  <= m_limit);

            // number of processed characters (p)
            const auto num_processed_chars = static_cast<size_t>(m_start - m_content);
            // offset for m_marker wrt. to m_start
            const auto offset_marker = (m_marker == nullptr) ? 0 : m_marker - m_start;
            // number of unprocessed characters (u)
            const auto offset_cursor = m_cursor - m_start;

            // no stream is used or end of file is reached
            if (m_stream == nullptr or m_stream->eof())
            {
                // m_start may or may not be pointing into m_line_buffer at
                // this point. We trust the standard library to do the right
                // thing. See http://stackoverflow.com/q/28142011/266378
                m_line_buffer.assign(m_start, m_limit);

                // append n characters to make sure that there is sufficient
                // space between m_cursor and m_limit
                m_line_buffer.append(1, '\x00');
                if (n > 0)
                {
                    m_line_buffer.append(n - 1, '\x01');
                }
            }
            else
            {
                // delete processed characters from line buffer
                m_line_buffer.erase(0, num_processed_chars);
                // read next line from input stream
                m_line_buffer_tmp.clear();
                std::getline(*m_stream, m_line_buffer_tmp, '\n');

                // add line with newline symbol to the line buffer
                m_line_buffer += m_line_buffer_tmp;
                m_line_buffer.push_back('\n');
            }

            // set pointers
            m_content = reinterpret_cast<const lexer_char_t*>(m_line_buffer.data());
            assert(m_content != nullptr);
            m_start  = m_content;
            m_marker = m_start + offset_marker;
            m_cursor = m_start + offset_cursor;
            m_limit  = m_start + m_line_buffer.size();
        }

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x70, %rsp
movq %rdi, -0x8(%rbp)
movq %rsi, -0x10(%rbp)
movq -0x8(%rbp), %rdi
movq %rdi, -0x38(%rbp)
addq $0x8, %rdi
callq 0xa28f0
movb %al, %cl
movb $0x1, %al
testb $0x1, %cl
movb %al, -0x29(%rbp)
jne 0x1a752
movq -0x38(%rbp), %rdi
movq 0x48(%rdi), %rax
movq %rax, -0x40(%rbp)
addq $0x8, %rdi
callq 0xbc680
movq %rax, %rcx
movq -0x40(%rbp), %rax
cmpq %rcx, %rax
sete %al
movb %al, -0x29(%rbp)
movb -0x29(%rbp), %al
testb $0x1, %al
jne 0x1a75b
jmp 0x1a75d
jmp 0x1a77c
leaq 0xba494(%rip), %rdi     # 0xd4bf8
leaq 0xb9f76(%rip), %rsi     # 0xd46e1
movl $0x2aaf, %edx           # imm = 0x2AAF
leaq 0xba4e3(%rip), %rcx     # 0xd4c5a
callq 0x13130
movq -0x38(%rbp), %rdi
addq $0x8, %rdi
callq 0xa28f0
movb %al, %cl
movb $0x1, %al
testb $0x1, %cl
movb %al, -0x41(%rbp)
jne 0x1a7c9
movq -0x38(%rbp), %rdi
movq 0x68(%rdi), %rax
movq %rax, -0x50(%rbp)
movq 0x48(%rdi), %rax
movq %rax, -0x58(%rbp)
addq $0x8, %rdi
callq 0xa25f0
movq -0x58(%rbp), %rcx
movq %rax, %rdx
movq -0x50(%rbp), %rax
addq %rdx, %rcx
cmpq %rcx, %rax
sete %al
movb %al, -0x41(%rbp)
movb -0x41(%rbp), %al
testb $0x1, %al
jne 0x1a7d2
jmp 0x1a7d4
jmp 0x1a7f3
leaq 0xba5ca(%rip), %rdi     # 0xd4da5
leaq 0xb9eff(%rip), %rsi     # 0xd46e1
movl $0x2ab3, %edx           # imm = 0x2AB3
leaq 0xba46c(%rip), %rcx     # 0xd4c5a
callq 0x13130
movq -0x38(%rbp), %rcx
movq 0x48(%rcx), %rax
cmpq 0x50(%rcx), %rax
ja 0x1a803
jmp 0x1a822
leaq 0xba5e0(%rip), %rdi     # 0xd4dea
leaq 0xb9ed0(%rip), %rsi     # 0xd46e1
movl $0x2ab6, %edx           # imm = 0x2AB6
leaq 0xba43d(%rip), %rcx     # 0xd4c5a
callq 0x13130
movq -0x38(%rbp), %rcx
movq 0x50(%rcx), %rax
cmpq 0x60(%rcx), %rax
ja 0x1a832
jmp 0x1a851
leaq 0xba5c6(%rip), %rdi     # 0xd4dff
leaq 0xb9ea1(%rip), %rsi     # 0xd46e1
movl $0x2ab7, %edx           # imm = 0x2AB7
leaq 0xba40e(%rip), %rcx     # 0xd4c5a
callq 0x13130
movq -0x38(%rbp), %rcx
movq 0x60(%rcx), %rax
cmpq 0x68(%rcx), %rax
ja 0x1a861
jmp 0x1a880
leaq 0xba5ab(%rip), %rdi     # 0xd4e13
leaq 0xb9e72(%rip), %rsi     # 0xd46e1
movl $0x2ab8, %edx           # imm = 0x2AB8
leaq 0xba3df(%rip), %rcx     # 0xd4c5a
callq 0x13130
movq -0x38(%rbp), %rcx
movb $0x1, %al
cmpq $0x0, 0x58(%rcx)
movb %al, -0x59(%rbp)
je 0x1a8a2
movq -0x38(%rbp), %rcx
movq 0x58(%rcx), %rax
cmpq 0x68(%rcx), %rax
setbe %al
movb %al, -0x59(%rbp)
movb -0x59(%rbp), %al
testb $0x1, %al
jne 0x1a8ab
jmp 0x1a8ad
jmp 0x1a8cc
leaq 0xba573(%rip), %rdi     # 0xd4e27
leaq 0xb9e26(%rip), %rsi     # 0xd46e1
movl $0x2ab9, %edx           # imm = 0x2AB9
leaq 0xba393(%rip), %rcx     # 0xd4c5a
callq 0x13130
movq -0x38(%rbp), %rax
movq 0x50(%rax), %rcx
movq 0x48(%rax), %rdx
subq %rdx, %rcx
movq %rcx, -0x18(%rbp)
cmpq $0x0, 0x58(%rax)
jne 0x1a8ee
xorl %eax, %eax
movq %rax, -0x68(%rbp)
jmp 0x1a901
movq -0x38(%rbp), %rcx
movq 0x58(%rcx), %rax
movq 0x50(%rcx), %rcx
subq %rcx, %rax
movq %rax, -0x68(%rbp)
movq -0x38(%rbp), %rax
movq -0x68(%rbp), %rcx
movq %rcx, -0x20(%rbp)
movq 0x60(%rax), %rcx
movq 0x50(%rax), %rdx
subq %rdx, %rcx
movq %rcx, -0x28(%rbp)
cmpq $0x0, (%rax)
je 0x1a93b
movq -0x38(%rbp), %rax
movq (%rax), %rdi
movq (%rdi), %rax
addq -0x18(%rax), %rdi
callq 0x72ac0
testb $0x1, %al
jne 0x1a93b
jmp 0x1a98a
movq -0x38(%rbp), %rax
movq %rax, %rdi
addq $0x8, %rdi
movq 0x50(%rax), %rsi
movq 0x68(%rax), %rdx
callq 0x1aa80
movq -0x38(%rbp), %rdi
addq $0x8, %rdi
movl $0x1, %esi
xorl %edx, %edx
callq 0xa2e30
cmpq $0x0, -0x10(%rbp)
jbe 0x1a988
movq -0x38(%rbp), %rdi
addq $0x8, %rdi
movq -0x10(%rbp), %rsi
subq $0x1, %rsi
movl $0x1, %edx
callq 0xa2e30
jmp 0x1a9e7
movq -0x38(%rbp), %rdi
addq $0x8, %rdi
movq -0x18(%rbp), %rdx
xorl %eax, %eax
movl %eax, %esi
callq 0xa2be0
movq -0x38(%rbp), %rdi
addq $0x28, %rdi
callq 0xa28d0
movq -0x38(%rbp), %rsi
movq (%rsi), %rdi
addq $0x28, %rsi
movl $0xa, %edx
callq 0x27be0
movq -0x38(%rbp), %rdi
movq %rdi, %rsi
addq $0x28, %rsi
addq $0x8, %rdi
callq 0xa3af0
movq -0x38(%rbp), %rdi
addq $0x8, %rdi
movl $0xa, %esi
callq 0xa2a60
movq -0x38(%rbp), %rdi
addq $0x8, %rdi
callq 0xbc680
movq %rax, %rcx
movq -0x38(%rbp), %rax
movq %rcx, 0x48(%rax)
cmpq $0x0, 0x48(%rax)
je 0x1aa08
jmp 0x1aa27
leaq 0xb9f2b(%rip), %rdi     # 0xd493a
leaq 0xb9ccb(%rip), %rsi     # 0xd46e1
movl $0x2ae1, %edx           # imm = 0x2AE1
leaq 0xba238(%rip), %rcx     # 0xd4c5a
callq 0x13130
movq -0x38(%rbp), %rdi
movq 0x48(%rdi), %rax
movq %rax, 0x50(%rdi)
movq 0x50(%rdi), %rax
addq -0x20(%rbp), %rax
movq %rax, 0x58(%rdi)
movq 0x50(%rdi), %rax
addq -0x28(%rbp), %rax
movq %rax, 0x60(%rdi)
movq 0x50(%rdi), %rax
movq %rax, -0x70(%rbp)
addq $0x8, %rdi
callq 0xa25f0
movq -0x70(%rbp), %rcx
movq %rax, %rdx
movq -0x38(%rbp), %rax
addq %rdx, %rcx
movq %rcx, 0x68(%rax)
addq $0x70, %rsp
popq %rbp
retq
nopw %cs:(%rax,%rax)
nop