// File: /workspace/github_cpp_makefile_star2_O2/shancheng[P]shancheng/src/sudoku.cpp
// Function: main
int main(int argc, char* argv[]) {
  po::options_description desc("Options");
  desc.add_options()
    ("file",         po::value<string>(),   "set input file")
    ("size",         po::value<uint32_t>(), "set size")
    ("debug",                               "debug mode")
    ("help",                                "show the help");
  po::variables_map vm;
  po::store(po::parse_command_line(argc, argv, desc), vm);
  po::notify(vm);
  if (vm.count("file") > 0) {
    options.opt_file = vm["file"].as<string>();
  }
  if (vm.count("size") > 0) {
    options.SetSize(vm["size"].as<uint32_t>());
  }
  if (vm.count("debug") > 0) {
    options.opt_debug = true;
  }
  if (vm.count("help") > 0 ) {
    cout << desc << "\n";
    return 0;
  }
  options.Print(cout);

  Sudoku sudoku;
  if (!sudoku.Init()) {
    cerr << "Failed to init the sudoku data\n";
    return 1;
  }
  sudoku.Solve();
  return 0;
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0xb698, %rsp           # imm = 0xB698
movq %rsi, %rbx
movl %edi, %ebp
leaq 0x5976(%rip), %rsi      # 0xb004
leaq 0x580(%rsp), %rdi
leaq 0x180(%rsp), %rdx
callq 0x659c
movq 0xb8e6(%rip), %rax      # 0x10f90
movl (%rax), %edx
movl %edx, %ecx
shrl %ecx
leaq 0x100(%rsp), %rdi
leaq 0x580(%rsp), %rsi
callq 0x5330
leaq 0x580(%rsp), %rdi
callq 0x54f8
leaq 0x100(%rsp), %rdi
callq 0x5290
movq %rax, 0x580(%rsp)
callq 0x65d7
leaq 0x5923(%rip), %rsi      # 0xb016
leaq 0x5912(%rip), %rcx      # 0xb00c
leaq 0x580(%rsp), %rdi
movq %rax, %rdx
callq 0x54b0
movq %rax, %r14
callq 0x65de
leaq 0x5906(%rip), %rsi      # 0xb01f
leaq 0x58fb(%rip), %rcx      # 0xb01b
movq %r14, %rdi
movq %rax, %rdx
callq 0x54b0
leaq 0x58f2(%rip), %rsi      # 0xb024
leaq 0x58f1(%rip), %rdx      # 0xb02a
movq %rax, %rdi
callq 0x5480
leaq 0x58f6(%rip), %rsi      # 0xb03e
leaq 0x58e6(%rip), %rdx      # 0xb035
movq %rax, %rdi
callq 0x5480
leaq 0x60(%rsp), %rdi
callq 0x50d0
xorpd %xmm0, %xmm0
leaq 0x40(%rsp), %r9
movapd %xmm0, (%r9)
movapd %xmm0, 0x10(%r9)
leaq 0x580(%rsp), %rdi
leaq 0x100(%rsp), %rcx
movl %ebp, %esi
movq %rbx, %rdx
xorl %r8d, %r8d
callq 0x65e5
leaq 0x580(%rsp), %rdi
leaq 0x60(%rsp), %rsi
xorl %edx, %edx
callq 0x5430
leaq 0x580(%rsp), %rdi
callq 0x6726
leaq 0x40(%rsp), %rdi
callq 0x6696
leaq 0x60(%rsp), %rdi
callq 0x5140
leaq 0x5848(%rip), %rsi      # 0xb016
leaq 0x580(%rsp), %rdi
leaq 0x180(%rsp), %rdx
callq 0x659c
leaq 0x70(%rsp), %rbx
leaq 0x580(%rsp), %rsi
movq %rbx, %rdi
callq 0x66a6
movq %rax, %r14
leaq 0x580(%rsp), %rdi
callq 0x54f8
testq %r14, %r14
je 0x585f
leaq 0x5802(%rip), %rsi      # 0xb016
leaq 0x580(%rsp), %rdi
leaq 0x180(%rsp), %rdx
callq 0x659c
leaq 0x60(%rsp), %rdi
leaq 0x580(%rsp), %rsi
callq 0x5270
movq %rax, %rdi
callq 0x9e50
leaq 0xba5e(%rip), %rdi      # 0x112a8
movq %rax, %rsi
callq 0x5120
leaq 0x580(%rsp), %rdi
callq 0x54f8
leaq 0x57b9(%rip), %rsi      # 0xb01f
leaq 0x580(%rsp), %rdi
leaq 0x180(%rsp), %rdx
callq 0x659c
leaq 0x580(%rsp), %rsi
movq %rbx, %rdi
callq 0x66a6
movq %rax, %r14
leaq 0x580(%rsp), %rdi
callq 0x54f8
testq %r14, %r14
je 0x5901
leaq 0x5778(%rip), %rsi      # 0xb01f
leaq 0x580(%rsp), %rdi
leaq 0x180(%rsp), %rdx
callq 0x659c
leaq 0x60(%rsp), %rdi
leaq 0x580(%rsp), %rsi
callq 0x5270
movq %rax, %rdi
callq 0xa0b4
movl (%rax), %eax
movl %eax, 0xb9ea(%rip)      # 0x112c8
incl %eax
cvtsi2sd %rax, %xmm0
sqrtsd %xmm0, %xmm0
cvttsd2si %xmm0, %rax
movl %eax, 0xb9d8(%rip)      # 0x112cc
leaq 0x580(%rsp), %rdi
callq 0x54f8
leaq 0x571c(%rip), %rsi      # 0xb024
leaq 0x580(%rsp), %rdi
leaq 0x180(%rsp), %rdx
callq 0x659c
leaq 0x580(%rsp), %rsi
movq %rbx, %rdi
callq 0x66a6
movq %rax, %r14
leaq 0x580(%rsp), %rdi
callq 0x54f8
testq %r14, %r14
je 0x5949
movb $0x1, 0xb987(%rip)      # 0x112d0
leaq 0x56ee(%rip), %rsi      # 0xb03e
leaq 0x580(%rsp), %rdi
leaq 0x180(%rsp), %rdx
callq 0x659c
leaq 0x580(%rsp), %rsi
movq %rbx, %rdi
callq 0x66a6
movq %rax, %rbx
leaq 0x580(%rsp), %rdi
callq 0x54f8
testq %rbx, %rbx
je 0x59b4
movq 0xb627(%rip), %rdi      # 0x10fb8
leaq 0x100(%rsp), %rsi
callq 0x5070
xorl %ebx, %ebx
leaq 0x56c5(%rip), %rsi      # 0xb06c
movq %rax, %rdi
callq 0x5230
jmp 0x5f85
movq 0xb5fd(%rip), %rdi      # 0x10fb8
leaq 0x56a1(%rip), %rsi      # 0xb063
callq 0x5230
movq 0xb5ea(%rip), %rdi      # 0x10fb8
leaq 0x5699(%rip), %rsi      # 0xb06e
callq 0x5230
movq 0xb5d7(%rip), %rdi      # 0x10fb8
leaq 0x56c7(%rip), %rsi      # 0xb0af
callq 0x5230
leaq 0xb8b4(%rip), %rsi      # 0x112a8
movq %rax, %rdi
callq 0x5210
leaq 0x5669(%rip), %rsi      # 0xb06c
movq %rax, %rdi
callq 0x5230
movq 0xb5a6(%rip), %rdi      # 0x10fb8
leaq 0x56a3(%rip), %rsi      # 0xb0bc
callq 0x5230
movl 0xb8a4(%rip), %esi      # 0x112c8
movq %rax, %rdi
callq 0x5180
leaq 0x5639(%rip), %rsi      # 0xb06c
movq %rax, %rdi
callq 0x5230
movq 0xb576(%rip), %rdi      # 0x10fb8
leaq 0x5680(%rip), %rsi      # 0xb0c9
callq 0x5230
movl 0xb878(%rip), %esi      # 0x112cc
movq %rax, %rdi
callq 0x5180
leaq 0x5609(%rip), %rsi      # 0xb06c
movq %rax, %rdi
callq 0x5230
movq 0xb546(%rip), %rdi      # 0x10fb8
leaq 0x55f3(%rip), %rsi      # 0xb06c
callq 0x5230
pushq $0x10
popq %rax
xorpd %xmm0, %xmm0
andq $0x0, 0x570(%rsp,%rax)
andl $0x0, 0x578(%rsp,%rax)
movupd %xmm0, 0x580(%rsp,%rax)
movupd %xmm0, 0x590(%rsp,%rax)
movupd %xmm0, 0x5a0(%rsp,%rax)
addq $0x48, %rax
cmpq $0xafd8, %rax           # imm = 0xAFD8
jne 0x5a85
leaq 0x580(%rsp), %rbx
movl $0xb0f4, %edx           # imm = 0xB0F4
movq %rbx, %rdi
xorl %esi, %esi
callq 0x5130
xorpd %xmm0, %xmm0
movupd %xmm0, 0xb0f8(%rbx)
movupd %xmm0, 0xb101(%rbx)
movq 0xb7b9(%rip), %rdi      # 0x112a8
leaq 0x55e0(%rip), %rsi      # 0xb0d6
callq 0x52b0
movq %rax, %r14
movq 0xb4a3(%rip), %rdx      # 0x10fa8
leaq 0x30(%rsp), %rdi
movq %rax, %rsi
callq 0x6846
testq %r14, %r14
je 0x5ea2
movq %r14, 0x8(%rsp)
pushq $0x1
popq %r13
xorl %r14d, %r14d
leaq 0x180(%rsp), %rbx
movq %rbx, %rdi
movl $0x400, %esi            # imm = 0x400
movq 0x8(%rsp), %rdx
callq 0x53a0
testq %rax, %rax
je 0x5c20
movq %rbx, %rdi
leaq 0x5566(%rip), %rsi      # 0xb0ba
callq 0x5380
movq %rax, %rdi
movl %r14d, %eax
leaq 0xb548(%rsp), %rcx
leaq (%rcx,%rax,4), %r15
xorl %r13d, %r13d
imulq $0x708, %rax, %rax      # imm = 0x708
leaq (%rsp,%rax), %rbp
addq $0x580, %rbp            # imm = 0x580
testq %rdi, %rdi
je 0x5c14
movl %r13d, %eax
imulq $0x48, %rax, %r12
leaq (%r12,%rbp), %rbx
movl %r14d, (%r12,%rbp)
movl %r13d, 0x4(%r12,%rbp)
movq %r15, 0x10(%r12,%rbp)
leaq 0xb548(%rsp), %rcx
leaq 0x64(%rcx,%rax,4), %rax
movq %rax, 0x18(%r12,%rbp)
movl 0xb712(%rip), %esi      # 0x112cc
movl %r14d, %eax
xorl %edx, %edx
divl %esi
movl %eax, %ecx
movl %r13d, %eax
xorl %edx, %edx
divl %esi
imulq $0x14, %rcx, %rcx
leaq 0xb610(%rsp), %rdx
addq %rdx, %rcx
leaq (%rcx,%rax,4), %rax
movq %rax, 0x20(%r12,%rbp)
xorl %esi, %esi
pushq $0xa
popq %rdx
callq 0x5300
movl %eax, 0x8(%r12,%rbp)
movq %rbx, %rdi
movl %eax, %esi
callq 0x60b4
incl %r13d
xorl %edi, %edi
leaq 0x54b3(%rip), %rsi      # 0xb0ba
callq 0x5380
movq %rax, %rdi
jmp 0x5b80
incl %r14d
pushq $0x1
popq %r13
jmp 0x5b27
leaq 0x580(%rsp), %rdi
callq 0x60ce
cmpb $0x1, 0xb69c(%rip)      # 0x112d0
jne 0x5c5c
movq 0xb37b(%rip), %rdi      # 0x10fb8
leaq 0x54a9(%rip), %rsi      # 0xb0ed
callq 0x5230
movq 0xb368(%rip), %rdi      # 0x10fb8
leaq 0x541b(%rip), %rsi      # 0xb072
callq 0x5230
movl 0xb666(%rip), %eax      # 0x112c8
xorl %edx, %edx
movl %eax, %ecx
cmpq %rcx, %rdx
jae 0x5e36
movq %rdx, 0x20(%rsp)
imulq $0x708, %rdx, %rcx      # imm = 0x708
leaq (%rsp,%rcx), %rbx
addq $0x580, %rbx            # imm = 0x580
xorl %r14d, %r14d
movq %rbx, 0x18(%rsp)
movl %eax, %ecx
cmpq %rcx, %r14
jae 0x5e29
imulq $0x48, %r14, %rcx
leaq (%rbx,%rcx), %r15
cmpl $0x0, 0x8(%rcx,%rbx)
jne 0x5e0a
movq 0x10(%r15), %rcx
movq 0x18(%r15), %rdx
movl (%rdx), %ebp
orl (%rcx), %ebp
movq 0x20(%r15), %rcx
orl (%rcx), %ebp
leaq 0x28(%r15), %rbx
movl %r13d, %r12d
cmpl %eax, %r12d
ja 0x5ced
btl %r12d, %ebp
jb 0x5ce8
movl %r12d, 0x14(%rsp)
movq %rbx, %rdi
leaq 0x14(%rsp), %rsi
callq 0x698a
movl 0xb5e0(%rip), %eax      # 0x112c8
incl %r12d
jmp 0x5cc5
movq 0x30(%r15), %rax
subq 0x28(%r15), %rax
sarq $0x2, %rax
imull $0x19, (%r15), %ecx
imulq $0x271, %rax, %rax      # imm = 0x271
movl 0x4(%r15), %edx
addq %rcx, %rdx
addq %rax, %rdx
movq %rdx, 0x40(%r15)
movq 0xb680(%rsp), %rax
cmpq 0xb688(%rsp), %rax
je 0x5d35
movq %r15, (%rax)
addq $0x8, 0xb680(%rsp)
jmp 0x5e05
movq 0xb678(%rsp), %rdx
movq %rax, %r13
subq %rdx, %r13
movabsq $0x7ffffffffffffff8, %rcx # imm = 0x7FFFFFFFFFFFFFF8
cmpq %rcx, %r13
je 0x5fb0
movq %r13, %r12
sarq $0x3, %r12
cmpq %rdx, %rax
movq %r12, %rax
pushq $0x1
popq %rcx
cmoveq %rcx, %rax
leaq (%rax,%r12), %rbp
movabsq $0xfffffffffffffff, %rcx # imm = 0xFFFFFFFFFFFFFFF
cmpq %rcx, %rbp
cmovaeq %rcx, %rbp
addq %r12, %rax
cmovbq %rcx, %rbp
testq %rbp, %rbp
je 0x5da7
movq %rdx, 0x28(%rsp)
leaq (,%rbp,8), %rdi
callq 0x5240
movq %rax, %rbx
movq 0x28(%rsp), %rdx
jmp 0x5da9
xorl %ebx, %ebx
movq %r15, (%rbx,%r12,8)
testq %r13, %r13
jle 0x5dc6
movq %rbx, %rdi
movq %rdx, %rsi
movq %rdx, %r12
movq %r13, %rdx
callq 0x53c0
movq %r12, %rdx
leaq (%rbx,%r13), %r12
addq $0x8, %r12
movq 0xb688(%rsp), %rsi
subq %rdx, %rsi
sarq $0x3, %rsi
movq %rdx, %rdi
callq 0x621e
movq %rbx, 0xb678(%rsp)
movq %r12, 0xb680(%rsp)
leaq (%rbx,%rbp,8), %rax
movq %rax, 0xb688(%rsp)
pushq $0x1
popq %r13
movq 0x18(%rsp), %rbx
cmpb $0x1, 0xb4bf(%rip)      # 0x112d0
jne 0x5e1b
movq %r15, %rdi
callq 0x6168
incq %r14
movl 0xb4a4(%rip), %eax      # 0x112c8
jmp 0x5c8e
movq 0x20(%rsp), %rdx
incq %rdx
jmp 0x5c64
movq 0xb678(%rsp), %rbx
movq 0xb680(%rsp), %r14
cmpq %r14, %rbx
je 0x5ee0
movq %r14, %r15
subq %rbx, %r15
movq %r15, %rax
sarq $0x3, %rax
bsrq %rax, %rdx
xorl $0x3f, %edx
addl %edx, %edx
xorq $0x7e, %rdx
movq %rbx, %rdi
movq %r14, %rsi
callq 0x622d
cmpq $0x81, %r15
jl 0x5ed5
leaq 0x80(%rbx), %r15
movq %rbx, %rdi
movq %r15, %rsi
callq 0x642e
cmpq %r14, %r15
je 0x5ee0
movq %r15, %rdi
callq 0x6495
addq $0x8, %r15
jmp 0x5e8f
movq 0xb147(%rip), %rdi      # 0x10ff0
leaq 0x5228(%rip), %rsi      # 0xb0d8
callq 0x5230
leaq 0xb3ec(%rip), %rsi      # 0x112a8
movq %rax, %rdi
callq 0x5210
leaq 0x51a1(%rip), %rsi      # 0xb06c
movq %rax, %rdi
callq 0x5230
jmp 0x5f39
movq %rbx, %rdi
movq %r14, %rsi
callq 0x642e
cmpb $0x1, 0xb3e9(%rip)      # 0x112d0
movq 0x8(%rsp), %r14
jne 0x5f39
movq 0xb0c3(%rip), %rdi      # 0x10fb8
leaq 0x51fc(%rip), %rsi      # 0xb0f8
callq 0x5230
movq 0xb0b0(%rip), %rdi      # 0x10fb8
leaq 0x5163(%rip), %rsi      # 0xb072
callq 0x5230
movq 0xb678(%rsp), %rbx
movq 0x8(%rsp), %r14
cmpq 0xb680(%rsp), %rbx
je 0x5f39
movq (%rbx), %rdi
callq 0x6168
addq $0x8, %rbx
jmp 0x5f21
leaq 0x38(%rsp), %rdi
callq 0x68c0
testq %r14, %r14
je 0x5f62
leaq 0x580(%rsp), %rdi
movb $0x0, 0xb110(%rdi)
xorl %ebx, %ebx
xorl %esi, %esi
callq 0x64b4
jmp 0x5f78
movq 0xb087(%rip), %rdi      # 0x10ff0
leaq 0x50d3(%rip), %rsi      # 0xb043
callq 0x5230
pushq $0x1
popq %rbx
leaq 0x580(%rsp), %rdi
callq 0x6072
leaq 0x60(%rsp), %rdi
callq 0x66c0
leaq 0x100(%rsp), %rdi
callq 0x66f2
movl %ebx, %eax
addq $0xb698, %rsp           # imm = 0xB698
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
leaq 0x5150(%rip), %rdi      # 0xb107
callq 0x5110
jmp 0x6039
jmp 0x6029
jmp 0x6029
jmp 0x6039
movq %rax, %rbx
jmp 0x6046
jmp 0x6015
jmp 0x6029
jmp 0x6015
jmp 0x6029
jmp 0x6015
jmp 0x6029
jmp 0x6015
jmp 0x6029
movq %rax, %rbx
leaq 0x580(%rsp), %rdi
callq 0x6726
jmp 0x5fee
movq %rax, %rbx
leaq 0x40(%rsp), %rdi
callq 0x6696
jmp 0x6053
jmp 0x602e
movq %rax, %rbx
leaq 0x580(%rsp), %rdi
callq 0x54f8
jmp 0x606a
movq %rax, %rbx
jmp 0x606a
jmp 0x6015
movq %rax, %rbx
leaq 0x580(%rsp), %rdi
callq 0x54f8
jmp 0x6053
jmp 0x6039
movq %rax, %rbx
jmp 0x6053
movq %rax, %rbx
jmp 0x605d
jmp 0x6039
jmp 0x6039
jmp 0x6039
movq %rax, %rbx
leaq 0x38(%rsp), %rdi
callq 0x68c0
leaq 0x580(%rsp), %rdi
callq 0x6072
leaq 0x60(%rsp), %rdi
callq 0x66c0
leaq 0x100(%rsp), %rdi
callq 0x66f2
movq %rbx, %rdi
callq 0x5440