// File: tanakh[P]icfpc2015/./picojson.h
// Function: picojson::value::to_str[abi:cxx11]() const
inline std::string value::to_str() const {
    switch (type_) {
    case null_type:      return "null";
    case boolean_type:   return u_.boolean_ ? "true" : "false";
#ifdef PICOJSON_USE_INT64
    case int64_type: {
      char buf[sizeof("-9223372036854775808")];
      SNPRINTF(buf, sizeof(buf), "%" PRId64, u_.int64_);
      return buf;
    }
#endif
    case number_type:    {
      char buf[256];
      double tmp;
      SNPRINTF(buf, sizeof(buf), fabs(u_.number_) < (1ULL << 53) && modf(u_.number_, &tmp) == 0 ? "%.f" : "%.17g", u_.number_);
#if PICOJSON_USE_LOCALE
      char *decimal_point = localeconv()->decimal_point;
      if (strcmp(decimal_point, ".") != 0) {
        size_t decimal_point_len = strlen(decimal_point);
        for (char *p = buf; *p != '\0'; ++p) {
          if (strncmp(p, decimal_point, decimal_point_len) == 0) {
            return std::string(buf, p) + "." + (p + decimal_point_len);
          }
        }
      }
#endif
      return buf;
    }
    case string_type:    return *u_.string_;
    case array_type:     return "array";
    case object_type:    return "object";
    default:             PICOJSON_ASSERT(0);
#ifdef _MSC_VER
      __assume(0);
#endif
    }
    return std::string();
  }

// Assembly:
subq $0x248, %rsp            # imm = 0x248
movq %rdi, 0x68(%rsp)
movq %rdi, %rax
movq %rax, 0x70(%rsp)
movq %rdi, 0x240(%rsp)
movq %rsi, 0x238(%rsp)
movq 0x238(%rsp), %rax
movq %rax, 0x78(%rsp)
movl (%rax), %eax
movq %rax, 0x80(%rsp)
subq $0x6, %rax
ja 0x1c80f
movq 0x80(%rsp), %rax
leaq 0x1a0e8(%rip), %rcx     # 0x363ec
movslq (%rcx,%rax,4), %rax
addq %rcx, %rax
jmpq *%rax
leaq 0x237(%rsp), %rdi
movq %rdi, 0x60(%rsp)
callq 0x4630
movq 0x68(%rsp), %rdi
movq 0x60(%rsp), %rdx
leaq 0x1a59f(%rip), %rsi     # 0x368cf
callq 0x44f0
jmp 0x1c337
leaq 0x237(%rsp), %rdi
callq 0x4430
jmp 0x1c869
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x228(%rsp)
movl %eax, 0x224(%rsp)
leaq 0x237(%rsp), %rdi
callq 0x4430
jmp 0x1c876
movq 0x78(%rsp), %rax
movb 0x8(%rax), %dl
leaq 0x1a556(%rip), %rcx     # 0x368d4
leaq 0x1a554(%rip), %rax     # 0x368d9
testb $0x1, %dl
cmovneq %rcx, %rax
movq %rax, 0x50(%rsp)
leaq 0x223(%rsp), %rdi
movq %rdi, 0x58(%rsp)
callq 0x4630
movq 0x68(%rsp), %rdi
movq 0x50(%rsp), %rsi
movq 0x58(%rsp), %rdx
callq 0x44f0
jmp 0x1c3b9
leaq 0x223(%rsp), %rdi
callq 0x4430
jmp 0x1c869
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x228(%rsp)
movl %eax, 0x224(%rsp)
leaq 0x223(%rsp), %rdi
callq 0x4430
jmp 0x1c876
movq 0x78(%rsp), %rax
movq 0x8(%rax), %rcx
leaq 0x1a4de(%rip), %rdx     # 0x368df
xorl %eax, %eax
leaq 0x200(%rsp), %rdi
movq %rdi, 0x40(%rsp)
movl $0x15, %esi
callq 0x45a0
leaq 0x1ff(%rsp), %rdi
movq %rdi, 0x48(%rsp)
callq 0x4630
movq 0x68(%rsp), %rdi
movq 0x40(%rsp), %rsi
movq 0x48(%rsp), %rdx
callq 0x44f0
jmp 0x1c442
leaq 0x1ff(%rsp), %rdi
callq 0x4430
jmp 0x1c869
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x228(%rsp)
movl %eax, 0x224(%rsp)
leaq 0x1ff(%rsp), %rdi
callq 0x4430
jmp 0x1c876
movq 0x78(%rsp), %rax
leaq 0xf0(%rsp), %rcx
movq %rcx, 0x30(%rsp)
movsd 0x8(%rax), %xmm1
movaps 0x19c08(%rip), %xmm0    # 0x360a0
pand %xmm0, %xmm1
xorl %eax, %eax
movsd 0x19bca(%rip), %xmm0    # 0x36070
ucomisd %xmm1, %xmm0
movb %al, 0x3f(%rsp)
jbe 0x1c4da
movq 0x78(%rsp), %rax
movsd 0x8(%rax), %xmm0
leaq 0xe8(%rsp), %rdi
callq 0x4640
xorps %xmm1, %xmm1
ucomisd %xmm1, %xmm0
sete %al
setnp %cl
andb %cl, %al
movb %al, 0x3f(%rsp)
movq 0x30(%rsp), %rdi
movq 0x78(%rsp), %rax
movb 0x3f(%rsp), %sil
leaq 0x1a3f7(%rip), %rdx     # 0x368e7
leaq 0x1a3ec(%rip), %rcx     # 0x368e3
testb $0x1, %sil
cmovneq %rcx, %rdx
movsd 0x8(%rax), %xmm0
movl $0x100, %esi            # imm = 0x100
movb $0x1, %al
callq 0x45a0
callq 0x46c0
movq (%rax), %rax
movq %rax, 0xe0(%rsp)
movq 0xe0(%rsp), %rdi
leaq 0x1a22f(%rip), %rsi     # 0x3675e
callq 0x4510
cmpl $0x0, %eax
je 0x1c6d6
movq 0xe0(%rsp), %rdi
callq 0x4150
movq %rax, 0xd8(%rsp)
leaq 0xf0(%rsp), %rax
movq %rax, 0xd0(%rsp)
movq 0xd0(%rsp), %rax
movsbl (%rax), %eax
cmpl $0x0, %eax
je 0x1c6d4
movq 0xd0(%rsp), %rdi
movq 0xe0(%rsp), %rsi
movq 0xd8(%rsp), %rdx
callq 0x4180
cmpl $0x0, %eax
jne 0x1c6b9
movq 0xd0(%rsp), %rax
movq %rax, 0x20(%rsp)
leaq 0x8f(%rsp), %rdi
movq %rdi, 0x28(%rsp)
callq 0x4630
movq 0x20(%rsp), %rdx
movq 0x28(%rsp), %rcx
leaq 0x90(%rsp), %rdi
leaq 0xf0(%rsp), %rsi
callq 0x1d010
jmp 0x1c5dc
leaq 0x1a17b(%rip), %rdx     # 0x3675e
leaq 0xb0(%rsp), %rdi
leaq 0x90(%rsp), %rsi
callq 0x1cfc0
jmp 0x1c5fa
movq 0x68(%rsp), %rdi
movq 0xd0(%rsp), %rdx
movq 0xd8(%rsp), %rax
addq %rax, %rdx
leaq 0xb0(%rsp), %rsi
callq 0x1cfc0
jmp 0x1c621
leaq 0xb0(%rsp), %rdi
callq 0x4700
leaq 0x90(%rsp), %rdi
callq 0x4700
leaq 0x8f(%rsp), %rdi
callq 0x4430
jmp 0x1c869
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x228(%rsp)
movl %eax, 0x224(%rsp)
jmp 0x1c6a7
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x228(%rsp)
movl %eax, 0x224(%rsp)
jmp 0x1c69a
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x228(%rsp)
movl %eax, 0x224(%rsp)
leaq 0xb0(%rsp), %rdi
callq 0x4700
leaq 0x90(%rsp), %rdi
callq 0x4700
leaq 0x8f(%rsp), %rdi
callq 0x4430
jmp 0x1c876
jmp 0x1c6bb
movq 0xd0(%rsp), %rax
addq $0x1, %rax
movq %rax, 0xd0(%rsp)
jmp 0x1c562
jmp 0x1c6d6
leaq 0x8e(%rsp), %rdi
movq %rdi, 0x18(%rsp)
callq 0x4630
movq 0x68(%rsp), %rdi
movq 0x18(%rsp), %rdx
leaq 0xf0(%rsp), %rsi
callq 0x44f0
jmp 0x1c701
leaq 0x8e(%rsp), %rdi
callq 0x4430
jmp 0x1c869
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x228(%rsp)
movl %eax, 0x224(%rsp)
leaq 0x8e(%rsp), %rdi
callq 0x4430
jmp 0x1c876
movq 0x68(%rsp), %rdi
movq 0x78(%rsp), %rax
movq 0x8(%rax), %rsi
callq 0x4140
jmp 0x1c869
leaq 0x8d(%rsp), %rdi
movq %rdi, 0x10(%rsp)
callq 0x4630
movq 0x68(%rsp), %rdi
movq 0x10(%rsp), %rdx
leaq 0x1a179(%rip), %rsi     # 0x368ed
callq 0x44f0
jmp 0x1c77b
leaq 0x8d(%rsp), %rdi
callq 0x4430
jmp 0x1c869
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x228(%rsp)
movl %eax, 0x224(%rsp)
leaq 0x8d(%rsp), %rdi
callq 0x4430
jmp 0x1c876
leaq 0x8c(%rsp), %rdi
movq %rdi, 0x8(%rsp)
callq 0x4630
movq 0x68(%rsp), %rdi
movq 0x8(%rsp), %rdx
leaq 0x1a11d(%rip), %rsi     # 0x368f3
callq 0x44f0
jmp 0x1c7dd
leaq 0x8c(%rsp), %rdi
callq 0x4430
jmp 0x1c869
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x228(%rsp)
movl %eax, 0x224(%rsp)
leaq 0x8c(%rsp), %rdi
callq 0x4430
jmp 0x1c876
jmp 0x1c811
movl $0x10, %edi
callq 0x4190
movq %rax, %rdi
movq %rdi, %rax
movq %rax, (%rsp)
leaq 0x19eca(%rip), %rsi     # 0x366f6
callq 0x4110
jmp 0x1c833
movq (%rsp), %rdi
movq 0x2d7b2(%rip), %rsi     # 0x49ff0
movq 0x2d773(%rip), %rdx     # 0x49fb8
callq 0x45f0
movq (%rsp), %rdi
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x228(%rsp)
movl %eax, 0x224(%rsp)
callq 0x42b0
jmp 0x1c876
movq 0x70(%rsp), %rax
addq $0x248, %rsp            # imm = 0x248
retq
movq 0x228(%rsp), %rdi
callq 0x4620
nopw %cs:(%rax,%rax)
nopl (%rax)