// File: theanarkh[P]js_runtime_loader/No.cc
// Function: main
int main(int argc, char* argv[]) {
  setvbuf(stdout, nullptr, _IONBF, 0);
  setvbuf(stderr, nullptr, _IONBF, 0);
  v8::V8::InitializeICUDefaultLocation(argv[0]);
  v8::V8::InitializeExternalStartupData(argv[0]);
  std::unique_ptr<Platform> platform = platform::NewDefaultPlatform();
  v8::V8::InitializePlatform(platform.get());
  v8::V8::Initialize();
  Isolate::CreateParams create_params;
  create_params.array_buffer_allocator = ArrayBuffer::Allocator::NewDefaultAllocator();
  Isolate* isolate = Isolate::New(create_params);
  {
    Isolate::Scope isolate_scope(isolate);
    HandleScope handle_scope(isolate);
    Local<ObjectTemplate> global = ObjectTemplate::New(isolate);
    Local<Context> context = Context::New(isolate, nullptr, global);
    Context::Scope context_scope(context);
    Local<Object> No = Object::New(isolate);
    No::Loader::Init(isolate, No);
    No::Console::Init(isolate, No);
    No::Process::Init(isolate, No, argv, argc);
    Local<Object> globalInstance = context->Global();
    globalInstance->Set(context, String::NewFromUtf8Literal(isolate, "No", 
    NewStringType::kNormal), No);
    // 设置全局属性global指向全局对象
    globalInstance->Set(context, String::NewFromUtf8Literal(isolate, 
      "global", 
      NewStringType::kNormal), globalInstance).Check();
    {
      // 打开文件
      int fd = open("No.js", 0, O_RDONLY);
      struct stat info;
      // 取得文件信息
      fstat(fd, &info);
      // 分配内存保存文件内容
      char *ptr = (char *)malloc(info.st_size + 1);
      // ptr[info.st_size] = '\0';
      read(fd, (void *)ptr, info.st_size);
      // 要执行的js代码
      Local<String> source = String::NewFromUtf8(isolate, ptr,
                          NewStringType::kNormal,
                          info.st_size).ToLocalChecked();

      // 编译
      Local<Script> script = Script::Compile(context, source).ToLocalChecked();
      // 解析完应该没用了，释放内存
      free(ptr);
      // 执行
      Local<Value> result = script->Run(context).ToLocalChecked();
    }
  }

  // Dispose the isolate and tear down V8.
  isolate->Dispose();
  v8::V8::Dispose();
  v8::V8::ShutdownPlatform();
  delete create_params.array_buffer_allocator;
  return 0;
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x4f0, %rsp            # imm = 0x4F0
movl $0x0, -0x158(%rbp)
movl %edi, -0x15c(%rbp)
movq %rsi, -0x168(%rbp)
movq 0x117f217(%rip), %rax   # 0x126ef10
movq (%rax), %rdi
xorl %eax, %eax
movl %eax, -0x3fc(%rbp)
movl %eax, %ecx
movq %rcx, -0x408(%rbp)
movl $0x2, %edx
movl %edx, -0x40c(%rbp)
movq %rcx, %rsi
callq 0xe6630
movl -0x40c(%rbp), %edx
movq -0x408(%rbp), %rcx
movq 0x117f1ec(%rip), %rax   # 0x126ef20
movq (%rax), %rdi
movq %rcx, %rsi
callq 0xe6630
movq -0x408(%rbp), %rsi
movq -0x168(%rbp), %rax
movq (%rax), %rdi
callq 0x11d840
movq -0x168(%rbp), %rax
movq (%rax), %rdi
callq 0x11d850
leaq -0x178(%rbp), %rdi
movq %rdi, -0x3f8(%rbp)
callq 0xf0730
movl -0x3fc(%rbp), %ecx
movq -0x3f8(%rbp), %r8
leaq -0x170(%rbp), %rdi
movl %ecx, %esi
movl %ecx, %edx
callq 0xf2c80
jmp 0xefd96
leaq -0x178(%rbp), %rdi
callq 0xf0760
leaq -0x170(%rbp), %rdi
callq 0xf07d0
movq %rax, %rdi
callq 0x11d6b0
jmp 0xefdb8
movl $0x3, -0x154(%rbp)
movl $0x3, %edi
callq 0x11d6d0
jmp 0xefdce
jmp 0xefdd0
leaq -0x210(%rbp), %rdi
callq 0x12d830
jmp 0xefdde
callq 0x129150
movq %rax, -0x418(%rbp)
jmp 0xefdec
movq -0x418(%rbp), %rax
movq %rax, -0x1b8(%rbp)
leaq -0x210(%rbp), %rdi
callq 0x12dd30
movq %rax, -0x420(%rbp)
jmp 0xefe0f
movq -0x420(%rbp), %rax
movq %rax, -0x218(%rbp)
movq -0x218(%rbp), %rsi
leaq -0x220(%rbp), %rdi
callq 0xf0800
jmp 0xefe32
movq -0x218(%rbp), %rsi
leaq -0x238(%rbp), %rdi
callq 0xf9a90
jmp 0xefe47
movq -0x218(%rbp), %rax
movq %rax, -0x428(%rbp)
leaq -0x248(%rbp), %rax
movq %rax, -0x150(%rbp)
movq -0x150(%rbp), %rax
movq $0x0, (%rax)
movq -0x428(%rbp), %rdi
movq -0x248(%rbp), %rsi
callq 0xfc710
movq %rax, -0x430(%rbp)
jmp 0xefe8d
movq -0x430(%rbp), %rax
movq %rax, -0x240(%rbp)
movq -0x218(%rbp), %rax
movq %rax, -0x438(%rbp)
movq -0x240(%rbp), %rax
movq %rax, -0x260(%rbp)
movq -0x260(%rbp), %rax
movq %rax, -0x140(%rbp)
leaq -0x258(%rbp), %rax
movq %rax, -0x148(%rbp)
movq -0x148(%rbp), %rax
leaq -0x140(%rbp), %rcx
movq %rcx, -0x50(%rbp)
movq -0x50(%rbp), %rcx
movq (%rcx), %rcx
movq %rcx, (%rax)
leaq -0x268(%rbp), %rax
movq %rax, -0x138(%rbp)
movq -0x138(%rbp), %rax
movq $0x0, (%rax)
xorl %eax, %eax
movl %eax, %edx
leaq -0x278(%rbp), %rdi
movq %rdx, %rsi
callq 0xf0830
jmp 0xeff20
movq -0x438(%rbp), %rdi
movq -0x258(%rbp), %rdx
movq -0x268(%rbp), %rcx
movq -0x278(%rbp), %r8
movq -0x270(%rbp), %r9
movq %rsp, %rax
movq $0x0, (%rax)
xorl %eax, %eax
movl %eax, %esi
callq 0x11e530
movq %rax, -0x440(%rbp)
jmp 0xeff5f
movq -0x440(%rbp), %rax
movq %rax, -0x250(%rbp)
movq -0x250(%rbp), %rax
movq %rax, -0x288(%rbp)
movq -0x288(%rbp), %rax
movq %rax, -0x128(%rbp)
leaq -0x280(%rbp), %rax
movq %rax, -0x130(%rbp)
movq -0x130(%rbp), %rax
movq -0x128(%rbp), %rcx
movq %rcx, (%rax)
movq %rax, -0x120(%rbp)
movq -0x120(%rbp), %rax
movq (%rax), %rdi
callq 0xf9f60
jmp 0xeffc0
jmp 0xeffc2
movq -0x218(%rbp), %rdi
callq 0x1218d0
movq %rax, -0x448(%rbp)
jmp 0xeffd7
movq -0x448(%rbp), %rax
movq %rax, -0x290(%rbp)
movq -0x218(%rbp), %rdi
movq -0x290(%rbp), %rax
movq %rax, -0x298(%rbp)
movq -0x298(%rbp), %rsi
callq 0xf1d00
jmp 0xf0008
movq -0x218(%rbp), %rdi
movq -0x290(%rbp), %rax
movq %rax, -0x2a0(%rbp)
movq -0x2a0(%rbp), %rsi
callq 0xf1000
jmp 0xf002b
movq -0x218(%rbp), %rdi
movq -0x290(%rbp), %rax
movq %rax, -0x2a8(%rbp)
movq -0x168(%rbp), %rdx
movl -0x15c(%rbp), %ecx
movq -0x2a8(%rbp), %rsi
callq 0xf24d0
jmp 0xf005b
leaq -0x250(%rbp), %rax
movq %rax, -0x118(%rbp)
movq -0x118(%rbp), %rax
movq (%rax), %rax
movq %rax, -0x450(%rbp)
movq -0x450(%rbp), %rdi
callq 0x11f500
movq %rax, -0x458(%rbp)
jmp 0xf008f
movq -0x458(%rbp), %rax
movq %rax, -0x2b0(%rbp)
leaq -0x2b0(%rbp), %rax
movq %rax, -0x108(%rbp)
movq -0x108(%rbp), %rax
movq (%rax), %rax
movq %rax, -0x460(%rbp)
movq -0x250(%rbp), %rax
movq %rax, -0x2b8(%rbp)
movq -0x218(%rbp), %rdi
leaq 0xdf6f2c(%rip), %rsi    # 0xee7004
xorl %edx, %edx
callq 0xf0860
movq %rax, -0x468(%rbp)
jmp 0xf00e8
movq -0x468(%rbp), %rax
movq %rax, -0x2c8(%rbp)
movq -0x2c8(%rbp), %rax
movq %rax, -0xf8(%rbp)
leaq -0x2c0(%rbp), %rax
movq %rax, -0x100(%rbp)
movq -0x100(%rbp), %rax
leaq -0xf8(%rbp), %rcx
movq %rcx, -0x40(%rbp)
movq -0x40(%rbp), %rcx
movq (%rcx), %rcx
movq %rcx, (%rax)
movq -0x290(%rbp), %rax
movq %rax, -0x2d8(%rbp)
movq -0x2d8(%rbp), %rax
movq %rax, -0xd8(%rbp)
leaq -0x2d0(%rbp), %rax
movq %rax, -0xe0(%rbp)
movq -0xe0(%rbp), %rax
leaq -0xd8(%rbp), %rcx
movq %rcx, -0x30(%rbp)
movq -0x30(%rbp), %rcx
movq (%rcx), %rcx
movq %rcx, (%rax)
movq -0x460(%rbp), %rdi
movq -0x2b8(%rbp), %rsi
movq -0x2c0(%rbp), %rdx
movq -0x2d0(%rbp), %rcx
callq 0x110410
movw %ax, -0x46a(%rbp)
jmp 0xf019e
movw -0x46a(%rbp), %ax
movw %ax, -0x2da(%rbp)
leaq -0x2b0(%rbp), %rax
movq %rax, -0x110(%rbp)
movq -0x110(%rbp), %rax
movq (%rax), %rax
movq %rax, -0x478(%rbp)
movq -0x250(%rbp), %rax
movq %rax, -0x2e8(%rbp)
movq -0x218(%rbp), %rdi
leaq 0xe57de0(%rip), %rsi    # 0xf47fc7
xorl %edx, %edx
callq 0xf08a0
movq %rax, -0x480(%rbp)
jmp 0xf01f7
movq -0x480(%rbp), %rax
movq %rax, -0x2f8(%rbp)
movq -0x2f8(%rbp), %rax
movq %rax, -0xe8(%rbp)
leaq -0x2f0(%rbp), %rax
movq %rax, -0xf0(%rbp)
movq -0xf0(%rbp), %rax
leaq -0xe8(%rbp), %rcx
movq %rcx, -0x48(%rbp)
movq -0x48(%rbp), %rcx
movq (%rcx), %rcx
movq %rcx, (%rax)
movq -0x2b0(%rbp), %rax
movq %rax, -0x308(%rbp)
movq -0x308(%rbp), %rax
movq %rax, -0xc8(%rbp)
leaq -0x300(%rbp), %rax
movq %rax, -0xd0(%rbp)
movq -0xd0(%rbp), %rax
leaq -0xc8(%rbp), %rcx
movq %rcx, -0x38(%rbp)
movq -0x38(%rbp), %rcx
movq (%rcx), %rcx
movq %rcx, (%rax)
movq -0x478(%rbp), %rdi
movq -0x2e8(%rbp), %rsi
movq -0x2f0(%rbp), %rdx
movq -0x300(%rbp), %rcx
callq 0x110410
movw %ax, -0x482(%rbp)
jmp 0xf02ad
movw -0x482(%rbp), %ax
movw %ax, -0x2dc(%rbp)
leaq -0x2dc(%rbp), %rax
movq %rax, -0xc0(%rbp)
movq -0xc0(%rbp), %rax
movq %rax, -0x28(%rbp)
movq -0x28(%rbp), %rax
movb (%rax), %al
xorb $-0x1, %al
testb $0x1, %al
jne 0xf02e2
jmp 0xf02eb
callq 0xf9940
jmp 0xf02e9
jmp 0xf02eb
jmp 0xf02ed
leaq 0xdf6d13(%rip), %rdi    # 0xee7007
xorl %edx, %edx
movb %dl, %al
movl %edx, %esi
callq 0xe6620
movl %eax, -0x488(%rbp)
jmp 0xf0307
movl -0x488(%rbp), %eax
movl %eax, -0x30c(%rbp)
movl -0x30c(%rbp), %edi
leaq -0x3a0(%rbp), %rsi
callq 0xe6d40
movq -0x370(%rbp), %rdi
incq %rdi
callq 0xe6d80
movq %rax, -0x3a8(%rbp)
movl -0x30c(%rbp), %edi
movq -0x3a8(%rbp), %rsi
movq -0x370(%rbp), %rdx
callq 0xe6b10
jmp 0xf0356
movq -0x218(%rbp), %rdi
movq -0x3a8(%rbp), %rsi
movl -0x370(%rbp), %ecx
xorl %edx, %edx
callq 0x120d90
movq %rax, -0x490(%rbp)
jmp 0xf037a
movq -0x490(%rbp), %rax
movq %rax, -0x3b8(%rbp)
leaq -0x3b8(%rbp), %rax
movq %rax, -0xb8(%rbp)
movq -0xb8(%rbp), %rax
movq %rax, -0x498(%rbp)
cmpq $0x0, (%rax)
sete %al
testb $0x1, %al
jne 0xf03b1
jmp 0xf03ba
callq 0xf99b0
jmp 0xf03b8
jmp 0xf03ba
movq -0x498(%rbp), %rax
movq (%rax), %rax
leaq -0xb0(%rbp), %rcx
movq %rcx, -0x58(%rbp)
movq %rax, -0x60(%rbp)
movq -0x58(%rbp), %rax
movq -0x60(%rbp), %rcx
movq %rcx, (%rax)
movq -0xb0(%rbp), %rax
movq %rax, -0x4a0(%rbp)
movq -0x4a0(%rbp), %rax
movq %rax, -0x3b0(%rbp)
movq -0x250(%rbp), %rax
movq %rax, -0x3d0(%rbp)
movq -0x3b0(%rbp), %rax
movq %rax, -0x3d8(%rbp)
movq -0x3d0(%rbp), %rdi
movq -0x3d8(%rbp), %rsi
xorl %eax, %eax
movl %eax, %edx
callq 0x104f10
movq %rax, -0x4a8(%rbp)
jmp 0xf0436
movq -0x4a8(%rbp), %rax
movq %rax, -0x3c8(%rbp)
leaq -0x3c8(%rbp), %rax
movq %rax, -0xa8(%rbp)
movq -0xa8(%rbp), %rax
movq %rax, -0x4b0(%rbp)
cmpq $0x0, (%rax)
sete %al
testb $0x1, %al
jne 0xf046d
jmp 0xf0476
callq 0xf99b0
jmp 0xf0474
jmp 0xf0476
movq -0x4b0(%rbp), %rax
movq (%rax), %rax
leaq -0xa0(%rbp), %rcx
movq %rcx, -0x18(%rbp)
movq %rax, -0x20(%rbp)
movq -0x18(%rbp), %rax
movq -0x20(%rbp), %rcx
movq %rcx, (%rax)
movq -0xa0(%rbp), %rax
movq %rax, -0x4b8(%rbp)
movq -0x4b8(%rbp), %rax
movq %rax, -0x3c0(%rbp)
movq -0x3a8(%rbp), %rdi
callq 0xe6200
leaq -0x3c0(%rbp), %rax
movq %rax, -0x98(%rbp)
movq -0x98(%rbp), %rax
movq (%rax), %rax
movq %rax, -0x4c0(%rbp)
movq -0x4c0(%rbp), %rdi
movq -0x250(%rbp), %rax
movq %rax, -0x3f0(%rbp)
movq -0x3f0(%rbp), %rsi
callq 0xff650
movq %rax, -0x4c8(%rbp)
jmp 0xf050b
movq -0x4c8(%rbp), %rax
movq %rax, -0x3e8(%rbp)
leaq -0x3e8(%rbp), %rax
movq %rax, -0x90(%rbp)
movq -0x90(%rbp), %rax
movq %rax, -0x4d0(%rbp)
cmpq $0x0, (%rax)
sete %al
testb $0x1, %al
jne 0xf0542
jmp 0xf054b
callq 0xf99b0
jmp 0xf0549
jmp 0xf054b
movq -0x4d0(%rbp), %rax
movq (%rax), %rax
leaq -0x88(%rbp), %rcx
movq %rcx, -0x8(%rbp)
movq %rax, -0x10(%rbp)
movq -0x8(%rbp), %rax
movq -0x10(%rbp), %rcx
movq %rcx, (%rax)
movq -0x88(%rbp), %rax
movq %rax, -0x4d8(%rbp)
movq -0x4d8(%rbp), %rax
movq %rax, -0x3e0(%rbp)
leaq -0x280(%rbp), %rax
movq %rax, -0x80(%rbp)
movq -0x80(%rbp), %rax
movq %rax, -0x78(%rbp)
movq -0x78(%rbp), %rax
movq (%rax), %rdi
callq 0xfa1d0
jmp 0xf05b4
movq %rax, %rdi
callq 0xf0a20
leaq -0x238(%rbp), %rdi
callq 0x100080
leaq -0x220(%rbp), %rdi
callq 0xf08e0
movq -0x218(%rbp), %rdi
callq 0xf7830
jmp 0xf05da
callq 0x11d790
jmp 0xf05e1
callq 0x11d6c0
jmp 0xf05e8
movq -0x1b8(%rbp), %rax
movq %rax, -0x4e0(%rbp)
cmpq $0x0, %rax
je 0xf0609
movq -0x4e0(%rbp), %rdi
movq (%rdi), %rax
callq *0x8(%rax)
movl $0x0, -0x158(%rbp)
leaq -0x210(%rbp), %rdi
callq 0x12d870
leaq -0x170(%rbp), %rdi
callq 0xf0910
movl -0x158(%rbp), %eax
addq $0x4f0, %rsp            # imm = 0x4F0
popq %rbp
retq
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x180(%rbp)
movl %eax, -0x184(%rbp)
leaq -0x178(%rbp), %rdi
callq 0xf0760
jmp 0xf071d
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x180(%rbp)
movl %eax, -0x184(%rbp)
jmp 0xf0711
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x180(%rbp)
movl %eax, -0x184(%rbp)
jmp 0xf0705
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x180(%rbp)
movl %eax, -0x184(%rbp)
jmp 0xf06f9
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x180(%rbp)
movl %eax, -0x184(%rbp)
jmp 0xf06ed
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x180(%rbp)
movl %eax, -0x184(%rbp)
leaq -0x280(%rbp), %rax
movq %rax, -0x70(%rbp)
movq -0x70(%rbp), %rax
movq %rax, -0x68(%rbp)
movq -0x68(%rbp), %rax
movq (%rax), %rdi
callq 0xfa1d0
jmp 0xf06eb
movq %rax, %rdi
callq 0xf0a20
jmp 0xf06ed
leaq -0x238(%rbp), %rdi
callq 0x100080
leaq -0x220(%rbp), %rdi
callq 0xf08e0
leaq -0x210(%rbp), %rdi
callq 0x12d870
leaq -0x170(%rbp), %rdi
callq 0xf0910
movq -0x180(%rbp), %rdi
callq 0xe6960
nopl (%rax)