// File: /workspace/github_cpp_makefile_star2_O3/patmorin[P]rotate/jain.cpp
// Function: main
int main(int argc, char *argv[]) {
	std::uint64_t n;
    if (argc != 2) usage(argv[0]);
	{
	    std::istringstream is_n(argv[1]);
	    is_n >> n;
	}

	const unsigned BLOCK=96;

	std::cout << "Building and filling...";
	std::cout.flush();
	auto *a = new std::uint32_t[n];

	std::iota(a, a+n, 0);
	std::cout << "done" << std::endl;

	std::cout << "Permuting using jain_inshuffle()...";
	std::cout.flush();
	print_array(a, n);
	auto start = std::chrono::high_resolution_clock::now();
	jain_inshuffle(a, n);
	auto stop =  std::chrono::high_resolution_clock::now();
	std::chrono::duration<double> elapsed = stop - start;
	std::cout << "done (" << elapsed.count() << "s)" << std::endl;
	print_array(a, n);
	check_inshuffle_output(a, n);

	std::cout << "Refilling...";
	std::cout.flush();
	std::iota(a, a+n, 0);
	std::cout << "done" << std::endl;

	std::cout << "Permuting using prime_inshuffle()...";
	std::cout.flush();
	print_array(a, n);
	start = std::chrono::high_resolution_clock::now();
	prime_inshuffle(a, n);
	stop =  std::chrono::high_resolution_clock::now();
	elapsed = stop - start;
	std::cout << "done (" << elapsed.count() << "s)" << std::endl;
	print_array(a, n);
	check_inshuffle_output(a, n);

	std::cout << "Refilling...";
	std::cout.flush();
	std::iota(a, a+n, 0);
	std::cout << "done" << std::endl;

	std::cout << "Permuting using jain_inshuffle_pf()...";
	std::cout.flush();
	print_array(a, n);
	start = std::chrono::high_resolution_clock::now();
	jain_inshuffle_pf(a, n);
	stop =  std::chrono::high_resolution_clock::now();
	elapsed = stop - start;
	std::cout << "done (" << elapsed.count() << "s)" << std::endl;
	print_array(a, n);
	check_inshuffle_output(a, n);

	std::cout << "Refilling...";
	std::cout.flush();
	std::iota(a, a+n, 0);
	std::cout << "done" << std::endl;

	std::cout << "Permuting using prime_inshuffle_pf()...";
	std::cout.flush();
	print_array(a, n);
	start = std::chrono::high_resolution_clock::now();
	prime_inshuffle_pf(a, n);
	stop =  std::chrono::high_resolution_clock::now();
	elapsed = stop - start;
	std::cout << "done (" << elapsed.count() << "s)" << std::endl;
	print_array(a, n);
	check_inshuffle_output(a, n);

	std::cout << "Refilling...";
	std::cout.flush();
	std::iota(a, a+n, 0);
	std::cout << "done" << std::endl;

	std::cout << "Permuting using prime_outshuffle()...";
	std::cout.flush();
	print_array(a, n);
	start = std::chrono::high_resolution_clock::now();
	prime_outshuffle(a, n);
	stop =  std::chrono::high_resolution_clock::now();
	elapsed = stop - start;
	std::cout << "done (" << elapsed.count() << "s)" << std::endl;
	print_array(a, n);
	check_outshuffle_output(a, n);

	std::cout << "Refilling...";
	std::cout.flush();
	std::iota(a, a+n, 0);
	std::cout << "done" << std::endl;

	std::cout << "Permuting using blocked_outshuffle()...";
	std::cout.flush();
	print_array(a, n);
	start = std::chrono::high_resolution_clock::now();
	blocked_outshuffle<BLOCK>(a, n);
	stop =  std::chrono::high_resolution_clock::now();
	elapsed = stop - start;
	std::cout << "done (" << elapsed.count() << "s)" << std::endl;
	print_array(a, n);
	check_outshuffle_output(a, n);

	std::cout << "Refilling...";
	std::cout.flush();
	std::iota(a, a+n, 0);
	std::cout << "done" << std::endl;

	std::cout << "Permuting using blocked_outshuffle_pf()...";
	std::cout.flush();
	print_array(a, n);
	start = std::chrono::high_resolution_clock::now();
	blocked_outshuffle<BLOCK,true>(a, n);
	stop =  std::chrono::high_resolution_clock::now();
	elapsed = stop - start;
	std::cout << "done (" << elapsed.count() << "s)" << std::endl;
	print_array(a, n);
	check_outshuffle_output(a, n);

	std::cout << "Refilling...";
	std::cout.flush();
	std::iota(a, a+n, 0);
	std::cout << "done" << std::endl;

	std::cout << "Permuting using jain_outshuffle()...";
	std::cout.flush();
	print_array(a, n);
	start = std::chrono::high_resolution_clock::now();
	jain_outshuffle(a, n);
	stop =  std::chrono::high_resolution_clock::now();
	elapsed = stop - start;
	std::cout << "done (" << elapsed.count() << "s)" << std::endl;
	print_array(a, n);
	check_outshuffle_output(a, n);

	std::cout << "Refilling...";
	std::cout.flush();
	std::iota(a, a+n, 0);
	std::cout << "done" << std::endl;

	std::cout << "Permuting using blocked_eytzinger()...";
	std::cout.flush();
	print_array(a, n);
	start = std::chrono::high_resolution_clock::now();
	blocked_eytzinger<BLOCK,true>(a, n);
	stop =  std::chrono::high_resolution_clock::now();
	elapsed = stop - start;
	std::cout << "done (" << elapsed.count() << "s)" << std::endl;
	print_array(a, n);
	// TODO: Check correctness of Eytzinger permutation

}

// Assembly:
pushq %r15
pushq %r14
pushq %r12
pushq %rbx
subq $0x1b8, %rsp            # imm = 0x1B8
cmpl $0x2, %edi
jne 0x22e7
movq 0x8(%rsi), %rsi
leaq 0x18(%rsp), %rdi
leaq 0x17(%rsp), %rdx
callq 0x1070
leaq 0x38(%rsp), %rdi
leaq 0x18(%rsp), %rsi
movl $0x8, %edx
callq 0x1170
leaq 0x28(%rsp), %rax
movq -0x10(%rax), %rdi
cmpq %rax, %rdi
je 0x1358
movq 0x28(%rsp), %rsi
incq %rsi
callq 0x1100
leaq 0x38(%rsp), %rdi
movq %rsp, %rsi
callq 0x1090
movq 0x4c5c(%rip), %rsi      # 0x5fc8
leaq 0x38(%rsp), %rdi
movabsq $0x3fffffffffffffff, %r12 # imm = 0x3FFFFFFFFFFFFFFF
callq 0x1130
leaq 0xb0(%rsp), %rdi
callq 0x1060
movq 0x4c3c(%rip), %r14      # 0x5fd0
leaq 0x2da2(%rip), %rsi      # 0x413d
movl $0x17, %edx
movq %r14, %rdi
callq 0x1110
movq %r14, %rdi
callq 0x10b0
movq (%rsp), %r15
movq %r15, %rax
shrq $0x3e, %rax
leaq (,%r15,4), %rcx
negq %rax
sbbq %rdi, %rdi
orq %rcx, %rdi
callq 0x1030
movq %rax, %rbx
testq %r15, %r15
je 0x1458
vpmovsxbd 0x2d3d(%rip), %zmm1 # 0x4120
vpmovsxbq 0x2d23(%rip), %zmm2 # 0x4110
vpmovsxbq 0x2d21(%rip), %zmm3 # 0x4118
vpbroadcastd 0x2cff(%rip), %zmm4 # 0x4100
addq %r12, %r15
movq %r15, %rcx
andl $0xf, %r15d
andq %r12, %rcx
negq %r15
vpbroadcastq %rcx, %zmm0
leaq 0x10(%rcx,%r15), %rax
xorl %ecx, %ecx
vpbroadcastq %rcx, %zmm5
vporq %zmm2, %zmm5, %zmm6
vporq %zmm3, %zmm5, %zmm5
vpcmpleuq %zmm0, %zmm5, %k0
vpcmpleuq %zmm0, %zmm6, %k1
kunpckbw %k0, %k1, %k1
vmovdqu32 %zmm1, (%rbx,%rcx,4) {%k1}
addq $0x10, %rcx
vpaddd %zmm4, %zmm1, %zmm1
cmpq %rcx, %rax
jne 0x141e
leaq 0x2cf6(%rip), %rsi      # 0x4155
movl $0x4, %edx
movq %r14, %rdi
vzeroupper
callq 0x1110
movq (%r14), %rax
movl $0xa, %esi
movq -0x18(%rax), %rdi
addq %r14, %rdi
callq 0x10e0
movsbl %al, %esi
movq %r14, %rdi
callq 0x1040
movq %rax, %rdi
callq 0x10b0
leaq 0x2cbd(%rip), %rsi      # 0x415a
movl $0x23, %edx
movq %r14, %rdi
callq 0x1110
movq %r14, %rdi
callq 0x10b0
movq (%rsp), %rsi
movq %rbx, %rdi
callq 0x233d
callq 0x1050
movq (%rsp), %rsi
movq %rbx, %rdi
movq %rax, %r15
callq 0x23de
callq 0x1050
subq %r15, %rax
leaq 0x2c9d(%rip), %rsi      # 0x417e
movl $0x6, %edx
movq %r14, %rdi
vcvtsi2sd %rax, %xmm7, %xmm0
vdivsd 0x2c12(%rip), %xmm0, %xmm0 # 0x4108
vmovsd %xmm0, 0x8(%rsp)
callq 0x1110
vmovq 0x8(%rsp), %xmm0
movq %r14, %rdi
callq 0x1150
leaq 0x2c6f(%rip), %rsi      # 0x4185
movl $0x2, %edx
movq %rax, %rdi
movq %rax, %r15
callq 0x1110
movq (%r15), %rax
movl $0xa, %esi
movq -0x18(%rax), %rdi
addq %r15, %rdi
callq 0x10e0
movsbl %al, %esi
movq %r15, %rdi
callq 0x1040
movq %rax, %rdi
callq 0x10b0
movq (%rsp), %rsi
movq %rbx, %rdi
callq 0x233d
movq (%rsp), %rsi
movq %rbx, %rdi
callq 0x2499
leaq 0x2c1c(%rip), %rsi      # 0x4188
movl $0xc, %edx
movq %r14, %rdi
callq 0x1110
movq %r14, %rdi
callq 0x10b0
movq (%rsp), %rax
testq %rax, %rax
je 0x1608
vpmovsxbd 0x2b8c(%rip), %zmm1 # 0x4120
vpmovsxbq 0x2b72(%rip), %zmm2 # 0x4110
vpmovsxbq 0x2b70(%rip), %zmm3 # 0x4118
vpbroadcastd 0x2b4e(%rip), %zmm4 # 0x4100
addq %r12, %rax
movq %rax, %rcx
andl $0xf, %eax
andq %r12, %rcx
negq %rax
vpbroadcastq %rcx, %zmm0
leaq 0x10(%rcx,%rax), %rax
xorl %ecx, %ecx
vpbroadcastq %rcx, %zmm5
vporq %zmm2, %zmm5, %zmm6
vporq %zmm3, %zmm5, %zmm5
vpcmpleuq %zmm0, %zmm5, %k0
vpcmpleuq %zmm0, %zmm6, %k1
kunpckbw %k0, %k1, %k1
vmovdqu32 %zmm1, (%rbx,%rcx,4) {%k1}
addq $0x10, %rcx
vpaddd %zmm4, %zmm1, %zmm1
cmpq %rcx, %rax
jne 0x15ce
leaq 0x2b46(%rip), %rsi      # 0x4155
movl $0x4, %edx
movq %r14, %rdi
vzeroupper
callq 0x1110
movq (%r14), %rax
movl $0xa, %esi
movq -0x18(%rax), %rdi
addq %r14, %rdi
callq 0x10e0
movsbl %al, %esi
movq %r14, %rdi
callq 0x1040
movq %rax, %rdi
callq 0x10b0
leaq 0x2b48(%rip), %rsi      # 0x4195
movl $0x24, %edx
movq %r14, %rdi
callq 0x1110
movq %r14, %rdi
callq 0x10b0
movq (%rsp), %rsi
movq %rbx, %rdi
callq 0x233d
callq 0x1050
movq (%rsp), %rsi
movq %rbx, %rdi
movq %rax, %r15
callq 0x24f3
callq 0x1050
subq %r15, %rax
leaq 0x2aed(%rip), %rsi      # 0x417e
movl $0x6, %edx
movq %r14, %rdi
vcvtsi2sd %rax, %xmm7, %xmm0
vdivsd 0x2a62(%rip), %xmm0, %xmm0 # 0x4108
vmovsd %xmm0, 0x8(%rsp)
callq 0x1110
vmovq 0x8(%rsp), %xmm0
movq %r14, %rdi
callq 0x1150
leaq 0x2abf(%rip), %rsi      # 0x4185
movl $0x2, %edx
movq %rax, %rdi
movq %rax, %r15
callq 0x1110
movq (%r15), %rax
movl $0xa, %esi
movq -0x18(%rax), %rdi
addq %r15, %rdi
callq 0x10e0
movsbl %al, %esi
movq %r15, %rdi
callq 0x1040
movq %rax, %rdi
callq 0x10b0
movq (%rsp), %rsi
movq %rbx, %rdi
callq 0x233d
movq (%rsp), %rsi
movq %rbx, %rdi
callq 0x2499
leaq 0x2a6c(%rip), %rsi      # 0x4188
movl $0xc, %edx
movq %r14, %rdi
callq 0x1110
movq %r14, %rdi
callq 0x10b0
movq (%rsp), %rax
testq %rax, %rax
je 0x17b8
vpmovsxbd 0x29dc(%rip), %zmm1 # 0x4120
vpmovsxbq 0x29c2(%rip), %zmm2 # 0x4110
vpmovsxbq 0x29c0(%rip), %zmm3 # 0x4118
vpbroadcastd 0x299e(%rip), %zmm4 # 0x4100
addq %r12, %rax
movq %rax, %rcx
andl $0xf, %eax
andq %r12, %rcx
negq %rax
vpbroadcastq %rcx, %zmm0
leaq 0x10(%rcx,%rax), %rax
xorl %ecx, %ecx
vpbroadcastq %rcx, %zmm5
vporq %zmm2, %zmm5, %zmm6
vporq %zmm3, %zmm5, %zmm5
vpcmpleuq %zmm0, %zmm5, %k0
vpcmpleuq %zmm0, %zmm6, %k1
kunpckbw %k0, %k1, %k1
vmovdqu32 %zmm1, (%rbx,%rcx,4) {%k1}
addq $0x10, %rcx
vpaddd %zmm4, %zmm1, %zmm1
cmpq %rcx, %rax
jne 0x177e
leaq 0x2996(%rip), %rsi      # 0x4155
movl $0x4, %edx
movq %r14, %rdi
vzeroupper
callq 0x1110
movq (%r14), %rax
movl $0xa, %esi
movq -0x18(%rax), %rdi
addq %r14, %rdi
callq 0x10e0
movsbl %al, %esi
movq %r14, %rdi
callq 0x1040
movq %rax, %rdi
callq 0x10b0
leaq 0x29bd(%rip), %rsi      # 0x41ba
movl $0x26, %edx
movq %r14, %rdi
callq 0x1110
movq %r14, %rdi
callq 0x10b0
movq (%rsp), %rsi
movq %rbx, %rdi
callq 0x233d
callq 0x1050
movq (%rsp), %rsi
movq %rbx, %rdi
movq %rax, %r15
callq 0x259e
callq 0x1050
subq %r15, %rax
leaq 0x293d(%rip), %rsi      # 0x417e
movl $0x6, %edx
movq %r14, %rdi
vcvtsi2sd %rax, %xmm7, %xmm0
vdivsd 0x28b2(%rip), %xmm0, %xmm0 # 0x4108
vmovsd %xmm0, 0x8(%rsp)
callq 0x1110
vmovq 0x8(%rsp), %xmm0
movq %r14, %rdi
callq 0x1150
leaq 0x290f(%rip), %rsi      # 0x4185
movl $0x2, %edx
movq %rax, %rdi
movq %rax, %r15
callq 0x1110
movq (%r15), %rax
movl $0xa, %esi
movq -0x18(%rax), %rdi
addq %r15, %rdi
callq 0x10e0
movsbl %al, %esi
movq %r15, %rdi
callq 0x1040
movq %rax, %rdi
callq 0x10b0
movq (%rsp), %rsi
movq %rbx, %rdi
callq 0x233d
movq (%rsp), %rsi
movq %rbx, %rdi
callq 0x2499
leaq 0x28bc(%rip), %rsi      # 0x4188
movl $0xc, %edx
movq %r14, %rdi
callq 0x1110
movq %r14, %rdi
callq 0x10b0
movq (%rsp), %rax
testq %rax, %rax
je 0x1968
vpmovsxbd 0x282c(%rip), %zmm1 # 0x4120
vpmovsxbq 0x2812(%rip), %zmm2 # 0x4110
vpmovsxbq 0x2810(%rip), %zmm3 # 0x4118
vpbroadcastd 0x27ee(%rip), %zmm4 # 0x4100
addq %r12, %rax
movq %rax, %rcx
andl $0xf, %eax
andq %r12, %rcx
negq %rax
vpbroadcastq %rcx, %zmm0
leaq 0x10(%rcx,%rax), %rax
xorl %ecx, %ecx
vpbroadcastq %rcx, %zmm5
vporq %zmm2, %zmm5, %zmm6
vporq %zmm3, %zmm5, %zmm5
vpcmpleuq %zmm0, %zmm5, %k0
vpcmpleuq %zmm0, %zmm6, %k1
kunpckbw %k0, %k1, %k1
vmovdqu32 %zmm1, (%rbx,%rcx,4) {%k1}
addq $0x10, %rcx
vpaddd %zmm4, %zmm1, %zmm1
cmpq %rcx, %rax
jne 0x192e
leaq 0x27e6(%rip), %rsi      # 0x4155
movl $0x4, %edx
movq %r14, %rdi
vzeroupper
callq 0x1110
movq (%r14), %rax
movl $0xa, %esi
movq -0x18(%rax), %rdi
addq %r14, %rdi
callq 0x10e0
movsbl %al, %esi
movq %r14, %rdi
callq 0x1040
movq %rax, %rdi
callq 0x10b0
leaq 0x2834(%rip), %rsi      # 0x41e1
movl $0x27, %edx
movq %r14, %rdi
callq 0x1110
movq %r14, %rdi
callq 0x10b0
movq (%rsp), %rsi
movq %rbx, %rdi
callq 0x233d
callq 0x1050
movq (%rsp), %rsi
movq %rbx, %rdi
movq %rax, %r15
callq 0x26d1
callq 0x1050
subq %r15, %rax
leaq 0x278d(%rip), %rsi      # 0x417e
movl $0x6, %edx
movq %r14, %rdi
vcvtsi2sd %rax, %xmm7, %xmm0
vdivsd 0x2702(%rip), %xmm0, %xmm0 # 0x4108
vmovsd %xmm0, 0x8(%rsp)
callq 0x1110
vmovq 0x8(%rsp), %xmm0
movq %r14, %rdi
callq 0x1150
leaq 0x275f(%rip), %rsi      # 0x4185
movl $0x2, %edx
movq %rax, %rdi
movq %rax, %r15
callq 0x1110
movq (%r15), %rax
movl $0xa, %esi
movq -0x18(%rax), %rdi
addq %r15, %rdi
callq 0x10e0
movsbl %al, %esi
movq %r15, %rdi
callq 0x1040
movq %rax, %rdi
callq 0x10b0
movq (%rsp), %rsi
movq %rbx, %rdi
callq 0x233d
movq (%rsp), %rsi
movq %rbx, %rdi
callq 0x2499
leaq 0x270c(%rip), %rsi      # 0x4188
movl $0xc, %edx
movq %r14, %rdi
callq 0x1110
movq %r14, %rdi
callq 0x10b0
movq (%rsp), %rax
testq %rax, %rax
je 0x1b18
vpmovsxbd 0x267c(%rip), %zmm1 # 0x4120
vpmovsxbq 0x2662(%rip), %zmm2 # 0x4110
vpmovsxbq 0x2660(%rip), %zmm3 # 0x4118
vpbroadcastd 0x263e(%rip), %zmm4 # 0x4100
addq %r12, %rax
movq %rax, %rcx
andl $0xf, %eax
andq %r12, %rcx
negq %rax
vpbroadcastq %rcx, %zmm0
leaq 0x10(%rcx,%rax), %rax
xorl %ecx, %ecx
vpbroadcastq %rcx, %zmm5
vporq %zmm2, %zmm5, %zmm6
vporq %zmm3, %zmm5, %zmm5
vpcmpleuq %zmm0, %zmm5, %k0
vpcmpleuq %zmm0, %zmm6, %k1
kunpckbw %k0, %k1, %k1
vmovdqu32 %zmm1, (%rbx,%rcx,4) {%k1}
addq $0x10, %rcx
vpaddd %zmm4, %zmm1, %zmm1
cmpq %rcx, %rax
jne 0x1ade
leaq 0x2636(%rip), %rsi      # 0x4155
movl $0x4, %edx
movq %r14, %rdi
vzeroupper
callq 0x1110
movq (%r14), %rax
movl $0xa, %esi
movq -0x18(%rax), %rdi
addq %r14, %rdi
callq 0x10e0
movsbl %al, %esi
movq %r14, %rdi
callq 0x1040
movq %rax, %rdi
callq 0x10b0
leaq 0x26ac(%rip), %rsi      # 0x4209
movl $0x25, %edx
movq %r14, %rdi
callq 0x1110
movq %r14, %rdi
callq 0x10b0
movq (%rsp), %rsi
movq %rbx, %rdi
callq 0x233d
callq 0x1050
movq (%rsp), %rsi
movq %rbx, %rdi
movq %rax, %r15
callq 0x27fb
callq 0x1050
subq %r15, %rax
leaq 0x25dd(%rip), %rsi      # 0x417e
movl $0x6, %edx
movq %r14, %rdi
vcvtsi2sd %rax, %xmm7, %xmm0
vdivsd 0x2552(%rip), %xmm0, %xmm0 # 0x4108
vmovsd %xmm0, 0x8(%rsp)
callq 0x1110
vmovq 0x8(%rsp), %xmm0
movq %r14, %rdi
callq 0x1150
leaq 0x25af(%rip), %rsi      # 0x4185
movl $0x2, %edx
movq %rax, %rdi
movq %rax, %r15
callq 0x1110
movq (%r15), %rax
movl $0xa, %esi
movq -0x18(%rax), %rdi
addq %r15, %rdi
callq 0x10e0
movsbl %al, %esi
movq %r15, %rdi
callq 0x1040
movq %rax, %rdi
callq 0x10b0
movq (%rsp), %rsi
movq %rbx, %rdi
callq 0x233d
movq (%rsp), %rsi
movq %rbx, %rdi
callq 0x2888
leaq 0x255c(%rip), %rsi      # 0x4188
movl $0xc, %edx
movq %r14, %rdi
callq 0x1110
movq %r14, %rdi
callq 0x10b0
movq (%rsp), %rax
testq %rax, %rax
je 0x1cc8
vpmovsxbd 0x24cc(%rip), %zmm1 # 0x4120
vpmovsxbq 0x24b2(%rip), %zmm2 # 0x4110
vpmovsxbq 0x24b0(%rip), %zmm3 # 0x4118
vpbroadcastd 0x248e(%rip), %zmm4 # 0x4100
addq %r12, %rax
movq %rax, %rcx
andl $0xf, %eax
andq %r12, %rcx
negq %rax
vpbroadcastq %rcx, %zmm0
leaq 0x10(%rcx,%rax), %rax
xorl %ecx, %ecx
vpbroadcastq %rcx, %zmm5
vporq %zmm2, %zmm5, %zmm6
vporq %zmm3, %zmm5, %zmm5
vpcmpleuq %zmm0, %zmm5, %k0
vpcmpleuq %zmm0, %zmm6, %k1
kunpckbw %k0, %k1, %k1
vmovdqu32 %zmm1, (%rbx,%rcx,4) {%k1}
addq $0x10, %rcx
vpaddd %zmm4, %zmm1, %zmm1
cmpq %rcx, %rax
jne 0x1c8e
leaq 0x2486(%rip), %rsi      # 0x4155
movl $0x4, %edx
movq %r14, %rdi
vzeroupper
callq 0x1110
movq (%r14), %rax
movl $0xa, %esi
movq -0x18(%rax), %rdi
addq %r14, %rdi
callq 0x10e0
movsbl %al, %esi
movq %r14, %rdi
callq 0x1040
movq %rax, %rdi
callq 0x10b0
leaq 0x2522(%rip), %rsi      # 0x422f
movl $0x27, %edx
movq %r14, %rdi
callq 0x1110
movq %r14, %rdi
callq 0x10b0
movq (%rsp), %rsi
movq %rbx, %rdi
callq 0x233d
callq 0x1050
movq (%rsp), %rsi
movq %rbx, %rdi
movq %rax, %r15
callq 0x28ed
callq 0x1050
subq %r15, %rax
leaq 0x242d(%rip), %rsi      # 0x417e
movl $0x6, %edx
movq %r14, %rdi
vcvtsi2sd %rax, %xmm7, %xmm0
vdivsd 0x23a2(%rip), %xmm0, %xmm0 # 0x4108
vmovsd %xmm0, 0x8(%rsp)
callq 0x1110
vmovq 0x8(%rsp), %xmm0
movq %r14, %rdi
callq 0x1150
leaq 0x23ff(%rip), %rsi      # 0x4185
movl $0x2, %edx
movq %rax, %rdi
movq %rax, %r15
callq 0x1110
movq (%r15), %rax
movl $0xa, %esi
movq -0x18(%rax), %rdi
addq %r15, %rdi
callq 0x10e0
movsbl %al, %esi
movq %r15, %rdi
callq 0x1040
movq %rax, %rdi
callq 0x10b0
movq (%rsp), %rsi
movq %rbx, %rdi
callq 0x233d
movq (%rsp), %rsi
movq %rbx, %rdi
callq 0x2888
leaq 0x23ac(%rip), %rsi      # 0x4188
movl $0xc, %edx
movq %r14, %rdi
callq 0x1110
movq %r14, %rdi
callq 0x10b0
movq (%rsp), %rax
testq %rax, %rax
je 0x1e78
vpmovsxbd 0x231c(%rip), %zmm1 # 0x4120
vpmovsxbq 0x2302(%rip), %zmm2 # 0x4110
vpmovsxbq 0x2300(%rip), %zmm3 # 0x4118
vpbroadcastd 0x22de(%rip), %zmm4 # 0x4100
addq %r12, %rax
movq %rax, %rcx
andl $0xf, %eax
andq %r12, %rcx
negq %rax
vpbroadcastq %rcx, %zmm0
leaq 0x10(%rcx,%rax), %rax
xorl %ecx, %ecx
vpbroadcastq %rcx, %zmm5
vporq %zmm2, %zmm5, %zmm6
vporq %zmm3, %zmm5, %zmm5
vpcmpleuq %zmm0, %zmm5, %k0
vpcmpleuq %zmm0, %zmm6, %k1
kunpckbw %k0, %k1, %k1
vmovdqu32 %zmm1, (%rbx,%rcx,4) {%k1}
addq $0x10, %rcx
vpaddd %zmm4, %zmm1, %zmm1
cmpq %rcx, %rax
jne 0x1e3e
leaq 0x22d6(%rip), %rsi      # 0x4155
movl $0x4, %edx
movq %r14, %rdi
vzeroupper
callq 0x1110
movq (%r14), %rax
movl $0xa, %esi
movq -0x18(%rax), %rdi
addq %r14, %rdi
callq 0x10e0
movsbl %al, %esi
movq %r14, %rdi
callq 0x1040
movq %rax, %rdi
callq 0x10b0
leaq 0x239a(%rip), %rsi      # 0x4257
movl $0x2a, %edx
movq %r14, %rdi
callq 0x1110
movq %r14, %rdi
callq 0x10b0
movq (%rsp), %rsi
movq %rbx, %rdi
callq 0x233d
callq 0x1050
movq (%rsp), %rsi
movq %rbx, %rdi
movq %rax, %r15
callq 0x29e2
callq 0x1050
subq %r15, %rax
leaq 0x227d(%rip), %rsi      # 0x417e
movl $0x6, %edx
movq %r14, %rdi
vcvtsi2sd %rax, %xmm7, %xmm0
vdivsd 0x21f2(%rip), %xmm0, %xmm0 # 0x4108
vmovsd %xmm0, 0x8(%rsp)
callq 0x1110
vmovq 0x8(%rsp), %xmm0
movq %r14, %rdi
callq 0x1150
leaq 0x224f(%rip), %rsi      # 0x4185
movl $0x2, %edx
movq %rax, %rdi
movq %rax, %r15
callq 0x1110
movq (%r15), %rax
movl $0xa, %esi
movq -0x18(%rax), %rdi
addq %r15, %rdi
callq 0x10e0
movsbl %al, %esi
movq %r15, %rdi
callq 0x1040
movq %rax, %rdi
callq 0x10b0
movq (%rsp), %rsi
movq %rbx, %rdi
callq 0x233d
movq (%rsp), %rsi
movq %rbx, %rdi
callq 0x2888
leaq 0x21fc(%rip), %rsi      # 0x4188
movl $0xc, %edx
movq %r14, %rdi
callq 0x1110
movq %r14, %rdi
callq 0x10b0
movq (%rsp), %rax
testq %rax, %rax
je 0x2028
vpmovsxbd 0x216c(%rip), %zmm1 # 0x4120
vpmovsxbq 0x2152(%rip), %zmm2 # 0x4110
vpmovsxbq 0x2150(%rip), %zmm3 # 0x4118
vpbroadcastd 0x212e(%rip), %zmm4 # 0x4100
addq %r12, %rax
movq %rax, %rcx
andl $0xf, %eax
andq %r12, %rcx
negq %rax
vpbroadcastq %rcx, %zmm0
leaq 0x10(%rcx,%rax), %rax
xorl %ecx, %ecx
vpbroadcastq %rcx, %zmm5
vporq %zmm2, %zmm5, %zmm6
vporq %zmm3, %zmm5, %zmm5
vpcmpleuq %zmm0, %zmm5, %k0
vpcmpleuq %zmm0, %zmm6, %k1
kunpckbw %k0, %k1, %k1
vmovdqu32 %zmm1, (%rbx,%rcx,4) {%k1}
addq $0x10, %rcx
vpaddd %zmm4, %zmm1, %zmm1
cmpq %rcx, %rax
jne 0x1fee
leaq 0x2126(%rip), %rsi      # 0x4155
movl $0x4, %edx
movq %r14, %rdi
vzeroupper
callq 0x1110
movq (%r14), %rax
movl $0xa, %esi
movq -0x18(%rax), %rdi
addq %r14, %rdi
callq 0x10e0
movsbl %al, %esi
movq %r14, %rdi
callq 0x1040
movq %rax, %rdi
callq 0x10b0
leaq 0x2215(%rip), %rsi      # 0x4282
movl $0x24, %edx
movq %r14, %rdi
callq 0x1110
movq %r14, %rdi
callq 0x10b0
movq (%rsp), %rsi
movq %rbx, %rdi
callq 0x233d
callq 0x1050
movq (%rsp), %rsi
movq %rbx, %rdi
movq %rax, %r15
callq 0x2ad7
callq 0x1050
subq %r15, %rax
leaq 0x20cd(%rip), %rsi      # 0x417e
movl $0x6, %edx
movq %r14, %rdi
vcvtsi2sd %rax, %xmm7, %xmm0
vdivsd 0x2042(%rip), %xmm0, %xmm0 # 0x4108
vmovsd %xmm0, 0x8(%rsp)
callq 0x1110
vmovq 0x8(%rsp), %xmm0
movq %r14, %rdi
callq 0x1150
leaq 0x209f(%rip), %rsi      # 0x4185
movl $0x2, %edx
movq %rax, %rdi
movq %rax, %r15
callq 0x1110
movq (%r15), %rax
movl $0xa, %esi
movq -0x18(%rax), %rdi
addq %r15, %rdi
callq 0x10e0
movsbl %al, %esi
movq %r15, %rdi
callq 0x1040
movq %rax, %rdi
callq 0x10b0
movq (%rsp), %rsi
movq %rbx, %rdi
callq 0x233d
movq (%rsp), %rsi
movq %rbx, %rdi
callq 0x2888
leaq 0x204c(%rip), %rsi      # 0x4188
movl $0xc, %edx
movq %r14, %rdi
callq 0x1110
movq %r14, %rdi
callq 0x10b0
movq (%rsp), %rax
testq %rax, %rax
je 0x21d5
vpmovsxbd 0x1fbc(%rip), %zmm1 # 0x4120
vpmovsxbq 0x1fa2(%rip), %zmm2 # 0x4110
vpmovsxbq 0x1fa0(%rip), %zmm3 # 0x4118
vpbroadcastd 0x1f7e(%rip), %zmm4 # 0x4100
addq %r12, %rax
xorl %ecx, %ecx
andq %rax, %r12
andl $0xf, %eax
negq %rax
vpbroadcastq %r12, %zmm0
leaq 0x10(%r12,%rax), %rax
vpbroadcastq %rcx, %zmm5
vporq %zmm2, %zmm5, %zmm6
vporq %zmm3, %zmm5, %zmm5
vpcmpleuq %zmm0, %zmm5, %k0
vpcmpleuq %zmm0, %zmm6, %k1
kunpckbw %k0, %k1, %k1
vmovdqu32 %zmm1, (%rbx,%rcx,4) {%k1}
addq $0x10, %rcx
vpaddd %zmm4, %zmm1, %zmm1
cmpq %rcx, %rax
jne 0x219b
leaq 0x1f79(%rip), %rsi      # 0x4155
movl $0x4, %edx
movq %r14, %rdi
vzeroupper
callq 0x1110
movq (%r14), %rax
movl $0xa, %esi
movq -0x18(%rax), %rdi
addq %r14, %rdi
callq 0x10e0
movsbl %al, %esi
movq %r14, %rdi
callq 0x1040
movq %rax, %rdi
callq 0x10b0
leaq 0x208d(%rip), %rsi      # 0x42a7
movl $0x26, %edx
movq %r14, %rdi
callq 0x1110
movq %r14, %rdi
callq 0x10b0
movq (%rsp), %rsi
movq %rbx, %rdi
callq 0x233d
callq 0x1050
movq (%rsp), %rsi
movq %rbx, %rdi
movq %rax, %r15
callq 0x2b82
callq 0x1050
subq %r15, %rax
leaq 0x1f20(%rip), %rsi      # 0x417e
movl $0x6, %edx
movq %r14, %rdi
vcvtsi2sd %rax, %xmm7, %xmm0
vdivsd 0x1e95(%rip), %xmm0, %xmm0 # 0x4108
vmovsd %xmm0, 0x8(%rsp)
callq 0x1110
vmovsd 0x8(%rsp), %xmm0
movq %r14, %rdi
callq 0x1150
leaq 0x1ef2(%rip), %rsi      # 0x4185
movl $0x2, %edx
movq %rax, %rdi
movq %rax, %r14
callq 0x1110
movq (%r14), %rax
movl $0xa, %esi
movq -0x18(%rax), %rdi
addq %r14, %rdi
callq 0x10e0
movsbl %al, %esi
movq %r14, %rdi
callq 0x1040
movq %rax, %rdi
callq 0x10b0
movq (%rsp), %rsi
movq %rbx, %rdi
callq 0x233d
xorl %eax, %eax
addq $0x1b8, %rsp            # imm = 0x1B8
popq %rbx
popq %r12
popq %r14
popq %r15
retq
movq (%rsi), %rdi
callq 0x12bc
movq 0x3cd2(%rip), %rsi      # 0x5fc8
leaq 0x38(%rsp), %rdi
movq %rax, %rbx
callq 0x1130
leaq 0xb0(%rsp), %rdi
callq 0x1060
jmp 0x2335
leaq 0x28(%rsp), %rcx
movq %rax, %rbx
movq -0x10(%rcx), %rdi
cmpq %rcx, %rdi
je 0x2335
movq 0x28(%rsp), %rsi
incq %rsi
callq 0x1100
jmp 0x2335
movq %rax, %rbx
movq %rbx, %rdi
callq 0x1180