// File: /workspace/github_cpp_makefile_star2_O3/rossy[P]crossc/SPIRV-Cross/spirv_glsl.cpp
// Function: spirv_cross::CompilerGLSL::emit_subgroup_op(spirv_cross::Instruction const&)
void CompilerGLSL::emit_subgroup_op(const Instruction &i)
{
	const uint32_t *ops = stream(i);
	auto op = static_cast<Op>(i.op);

	if (!options.vulkan_semantics)
		SPIRV_CROSS_THROW("Can only use subgroup operations in Vulkan semantics.");

	switch (op)
	{
	case OpGroupNonUniformElect:
		require_extension_internal("GL_KHR_shader_subgroup_basic");
		break;

	case OpGroupNonUniformBroadcast:
	case OpGroupNonUniformBroadcastFirst:
	case OpGroupNonUniformBallot:
	case OpGroupNonUniformInverseBallot:
	case OpGroupNonUniformBallotBitExtract:
	case OpGroupNonUniformBallotBitCount:
	case OpGroupNonUniformBallotFindLSB:
	case OpGroupNonUniformBallotFindMSB:
		require_extension_internal("GL_KHR_shader_subgroup_ballot");
		break;

	case OpGroupNonUniformShuffle:
	case OpGroupNonUniformShuffleXor:
		require_extension_internal("GL_KHR_shader_subgroup_shuffle");
		break;

	case OpGroupNonUniformShuffleUp:
	case OpGroupNonUniformShuffleDown:
		require_extension_internal("GL_KHR_shader_subgroup_shuffle_relative");
		break;

	case OpGroupNonUniformAll:
	case OpGroupNonUniformAny:
	case OpGroupNonUniformAllEqual:
		require_extension_internal("GL_KHR_shader_subgroup_vote");
		break;

	case OpGroupNonUniformFAdd:
	case OpGroupNonUniformFMul:
	case OpGroupNonUniformFMin:
	case OpGroupNonUniformFMax:
	case OpGroupNonUniformIAdd:
	case OpGroupNonUniformIMul:
	case OpGroupNonUniformSMin:
	case OpGroupNonUniformSMax:
	case OpGroupNonUniformUMin:
	case OpGroupNonUniformUMax:
	case OpGroupNonUniformBitwiseAnd:
	case OpGroupNonUniformBitwiseOr:
	case OpGroupNonUniformBitwiseXor:
	{
		auto operation = static_cast<GroupOperation>(ops[3]);
		if (operation == GroupOperationClusteredReduce)
		{
			require_extension_internal("GL_KHR_shader_subgroup_clustered");
		}
		else if (operation == GroupOperationExclusiveScan || operation == GroupOperationInclusiveScan ||
		         operation == GroupOperationReduce)
		{
			require_extension_internal("GL_KHR_shader_subgroup_arithmetic");
		}
		else
			SPIRV_CROSS_THROW("Invalid group operation.");
		break;
	}

	case OpGroupNonUniformQuadSwap:
	case OpGroupNonUniformQuadBroadcast:
		require_extension_internal("GL_KHR_shader_subgroup_quad");
		break;

	default:
		SPIRV_CROSS_THROW("Invalid opcode for subgroup.");
	}

	uint32_t result_type = ops[0];
	uint32_t id = ops[1];

	auto scope = static_cast<Scope>(get<SPIRConstant>(ops[2]).scalar());
	if (scope != ScopeSubgroup)
		SPIRV_CROSS_THROW("Only subgroup scope is supported.");

	switch (op)
	{
	case OpGroupNonUniformElect:
		emit_op(result_type, id, "subgroupElect()", true);
		break;

	case OpGroupNonUniformBroadcast:
		emit_binary_func_op(result_type, id, ops[3], ops[4], "subgroupBroadcast");
		break;

	case OpGroupNonUniformBroadcastFirst:
		emit_unary_func_op(result_type, id, ops[3], "subgroupBroadcastFirst");
		break;

	case OpGroupNonUniformBallot:
		emit_unary_func_op(result_type, id, ops[3], "subgroupBallot");
		break;

	case OpGroupNonUniformInverseBallot:
		emit_unary_func_op(result_type, id, ops[3], "subgroupInverseBallot");
		break;

	case OpGroupNonUniformBallotBitExtract:
		emit_binary_func_op(result_type, id, ops[3], ops[4], "subgroupBallotBitExtract");
		break;

	case OpGroupNonUniformBallotFindLSB:
		emit_unary_func_op(result_type, id, ops[3], "subgroupBallotFindLSB");
		break;

	case OpGroupNonUniformBallotFindMSB:
		emit_unary_func_op(result_type, id, ops[3], "subgroupBallotFindMSB");
		break;

	case OpGroupNonUniformBallotBitCount:
	{
		auto operation = static_cast<GroupOperation>(ops[3]);
		if (operation == GroupOperationReduce)
			emit_unary_func_op(result_type, id, ops[4], "subgroupBallotBitCount");
		else if (operation == GroupOperationInclusiveScan)
			emit_unary_func_op(result_type, id, ops[4], "subgroupBallotInclusiveBitCount");
		else if (operation == GroupOperationExclusiveScan)
			emit_unary_func_op(result_type, id, ops[4], "subgroupBallotExclusiveBitCount");
		else
			SPIRV_CROSS_THROW("Invalid BitCount operation.");
		break;
	}

	case OpGroupNonUniformShuffle:
		emit_binary_func_op(result_type, id, ops[3], ops[4], "subgroupShuffle");
		break;

	case OpGroupNonUniformShuffleXor:
		emit_binary_func_op(result_type, id, ops[3], ops[4], "subgroupShuffleXor");
		break;

	case OpGroupNonUniformShuffleUp:
		emit_binary_func_op(result_type, id, ops[3], ops[4], "subgroupShuffleUp");
		break;

	case OpGroupNonUniformShuffleDown:
		emit_binary_func_op(result_type, id, ops[3], ops[4], "subgroupShuffleDown");
		break;

	case OpGroupNonUniformAll:
		emit_unary_func_op(result_type, id, ops[3], "subgroupAll");
		break;

	case OpGroupNonUniformAny:
		emit_unary_func_op(result_type, id, ops[3], "subgroupAny");
		break;

	case OpGroupNonUniformAllEqual:
		emit_unary_func_op(result_type, id, ops[3], "subgroupAllEqual");
		break;

		// clang-format off
#define GLSL_GROUP_OP(op, glsl_op) \
case OpGroupNonUniform##op: \
	{ \
		auto operation = static_cast<GroupOperation>(ops[3]); \
		if (operation == GroupOperationReduce) \
			emit_unary_func_op(result_type, id, ops[4], "subgroup" #glsl_op); \
		else if (operation == GroupOperationInclusiveScan) \
			emit_unary_func_op(result_type, id, ops[4], "subgroupInclusive" #glsl_op); \
		else if (operation == GroupOperationExclusiveScan) \
			emit_unary_func_op(result_type, id, ops[4], "subgroupExclusive" #glsl_op); \
		else if (operation == GroupOperationClusteredReduce) \
			emit_binary_func_op(result_type, id, ops[4], ops[5], "subgroupClustered" #glsl_op); \
		else \
			SPIRV_CROSS_THROW("Invalid group operation."); \
		break; \
	}
	GLSL_GROUP_OP(FAdd, Add)
	GLSL_GROUP_OP(FMul, Mul)
	GLSL_GROUP_OP(FMin, Min)
	GLSL_GROUP_OP(FMax, Max)
	GLSL_GROUP_OP(IAdd, Add)
	GLSL_GROUP_OP(IMul, Mul)
	GLSL_GROUP_OP(SMin, Min)
	GLSL_GROUP_OP(SMax, Max)
	GLSL_GROUP_OP(UMin, Min)
	GLSL_GROUP_OP(UMax, Max)
	GLSL_GROUP_OP(BitwiseAnd, And)
	GLSL_GROUP_OP(BitwiseOr, Or)
	GLSL_GROUP_OP(BitwiseXor, Xor)
#undef GLSL_GROUP_OP
		// clang-format on

	case OpGroupNonUniformQuadSwap:
	{
		uint32_t direction = get<SPIRConstant>(ops[4]).scalar();
		if (direction == 0)
			emit_unary_func_op(result_type, id, ops[3], "subgroupQuadSwapHorizontal");
		else if (direction == 1)
			emit_unary_func_op(result_type, id, ops[3], "subgroupQuadSwapVertical");
		else if (direction == 2)
			emit_unary_func_op(result_type, id, ops[3], "subgroupQuadSwapDiagonal");
		else
			SPIRV_CROSS_THROW("Invalid quad swap direction.");
		break;
	}

	case OpGroupNonUniformQuadBroadcast:
	{
		emit_binary_func_op(result_type, id, ops[3], ops[4], "subgroupQuadBroadcast");
		break;
	}

	default:
		SPIRV_CROSS_THROW("Invalid opcode for subgroup.");
	}

	register_control_dependent_expression(id);
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r12
pushq %rbx
subq $0x20, %rsp
movq %rsi, %r15
movq %rdi, %rbx
callq 0x1b2ac
cmpb $0x0, 0x43e(%rbx)
je 0x3f5df
movzwl (%r15), %r12d
addl $0xfffffeb3, %r12d      # imm = 0xFFFFFEB3
cmpl $0x21, %r12d
ja 0x3f70e
movq %rax, %r14
leaq 0x76adf(%rip), %rax     # 0xb596c
movslq (%rax,%r12,4), %rcx
addq %rax, %rcx
jmpq *%rcx
movl 0xc(%r14), %eax
cmpl $0x3, %eax
jne 0x3eefd
leaq 0x10(%rsp), %r15
movq %r15, -0x10(%r15)
leaq 0x79ba0(%rip), %rsi     # 0xb8a4f
leaq 0x79bb9(%rip), %rdx     # 0xb8a6f
movq %rsp, %rdi
callq 0x7be0
movq %rsp, %rsi
movq %rbx, %rdi
callq 0x26356
jmp 0x3f012
leaq 0x10(%rsp), %r15
movq %r15, -0x10(%r15)
leaq 0x79af0(%rip), %rsi     # 0xb89ce
leaq 0x79b06(%rip), %rdx     # 0xb89eb
movq %rsp, %rdi
callq 0x7be0
movq %rsp, %rsi
movq %rbx, %rdi
callq 0x26356
jmp 0x3f012
jae 0x3f6a9
leaq 0x10(%rsp), %r15
movq %r15, -0x10(%r15)
leaq 0x79b5d(%rip), %rsi     # 0xb8a70
leaq 0x79b77(%rip), %rdx     # 0xb8a91
movq %rsp, %rdi
callq 0x7be0
movq %rsp, %rsi
movq %rbx, %rdi
callq 0x26356
jmp 0x3f012
leaq 0x10(%rsp), %r15
movq %r15, -0x10(%r15)
leaq 0x79af1(%rip), %rsi     # 0xb8a33
leaq 0x79b05(%rip), %rdx     # 0xb8a4e
movq %rsp, %rdi
callq 0x7be0
movq %rsp, %rsi
movq %rbx, %rdi
callq 0x26356
jmp 0x3f012
leaq 0x10(%rsp), %r15
movq %r15, -0x10(%r15)
leaq 0x79a7b(%rip), %rsi     # 0xb89ec
leaq 0x79a92(%rip), %rdx     # 0xb8a0a
movq %rsp, %rdi
callq 0x7be0
movq %rsp, %rsi
movq %rbx, %rdi
callq 0x26356
jmp 0x3f012
leaq 0x10(%rsp), %r15
movq %r15, -0x10(%r15)
leaq 0x79b0b(%rip), %rsi     # 0xb8aab
leaq 0x79b1f(%rip), %rdx     # 0xb8ac6
movq %rsp, %rdi
callq 0x7be0
movq %rsp, %rsi
movq %rbx, %rdi
callq 0x26356
jmp 0x3f012
leaq 0x10(%rsp), %r15
movq %r15, -0x10(%r15)
leaq 0x79a3f(%rip), %rsi     # 0xb8a0b
leaq 0x79a5f(%rip), %rdx     # 0xb8a32
movq %rsp, %rdi
callq 0x7be0
movq %rsp, %rsi
movq %rbx, %rdi
callq 0x26356
jmp 0x3f012
leaq 0x10(%rsp), %r15
movq %r15, -0x10(%r15)
leaq 0x799b9(%rip), %rsi     # 0xb89b1
leaq 0x799ce(%rip), %rdx     # 0xb89cd
movq %rsp, %rdi
callq 0x7be0
movq %rsp, %rsi
movq %rbx, %rdi
callq 0x26356
movq (%rsp), %rdi
cmpq %r15, %rdi
je 0x3f028
movq 0x10(%rsp), %rsi
incq %rsi
callq 0x6260
movl (%r14), %r15d
movl 0x4(%r14), %ebp
movl 0x8(%r14), %esi
movq %rbx, %rdi
callq 0x1c036
cmpl $0x3, 0x10(%rax)
jne 0x3f644
cmpl $0x21, %r12d
ja 0x3f773
leaq 0x7699e(%rip), %rax     # 0xb59f4
movslq (%rax,%r12,4), %rcx
addq %rax, %rcx
jmpq *%rcx
leaq 0x10(%rsp), %r14
movq %r14, -0x10(%r14)
leaq 0x79a97(%rip), %rsi     # 0xb8b06
leaq 0x79a9f(%rip), %rdx     # 0xb8b15
movq %rsp, %rdi
callq 0x7be0
movq %rsp, %rcx
movq %rbx, %rdi
movl %r15d, %esi
movl %ebp, %edx
movl $0x1, %r8d
xorl %r9d, %r9d
callq 0x3942c
movq (%rsp), %rdi
cmpq %r14, %rdi
je 0x3f5c8
movq 0x10(%rsp), %rsi
incq %rsi
callq 0x6260
jmp 0x3f5c8
movl 0xc(%r14), %eax
cmpq $0x3, %rax
ja 0x3f8a2
leaq 0x76a01(%rip), %rcx     # 0xb5acc
movslq (%rcx,%rax,4), %rax
addq %rcx, %rax
jmpq *%rax
movl 0xc(%r14), %ecx
leaq 0x79ab4(%rip), %r8      # 0xb8b93
jmp 0x3f5bb
movl 0xc(%r14), %eax
cmpq $0x3, %rax
ja 0x3f907
leaq 0x769e3(%rip), %rcx     # 0xb5adc
movslq (%rcx,%rax,4), %rax
addq %rcx, %rax
jmpq *%rax
movl 0xc(%r14), %eax
cmpl $0x2, %eax
je 0x3f4ff
cmpl $0x1, %eax
je 0x3f4ef
testl %eax, %eax
jne 0x3f7d8
movl 0x10(%r14), %ecx
leaq 0x79a7e(%rip), %r8      # 0xb8ba9
jmp 0x3f5bb
movl 0xc(%r14), %eax
cmpq $0x3, %rax
ja 0x3f96c
leaq 0x769e7(%rip), %rcx     # 0xb5b2c
movslq (%rcx,%rax,4), %rax
addq %rcx, %rax
jmpq *%rax
movl 0xc(%r14), %ecx
movl 0x10(%r14), %r8d
leaq 0x79abf(%rip), %r9      # 0xb8c1c
jmp 0x3f5a1
movl 0xc(%r14), %ecx
leaq 0x79a10(%rip), %r8      # 0xb8b7d
jmp 0x3f5bb
movl 0xc(%r14), %ecx
movl 0x10(%r14), %r8d
leaq 0x799e3(%rip), %r9      # 0xb8b64
jmp 0x3f5a1
movl 0xc(%r14), %ecx
movl 0x10(%r14), %r8d
leaq 0x79a97(%rip), %r9      # 0xb8c2c
jmp 0x3f5a1
movl 0xc(%r14), %eax
cmpq $0x3, %rax
ja 0x3f9d1
leaq 0x7698d(%rip), %rcx     # 0xb5b3c
movslq (%rcx,%rax,4), %rax
addq %rcx, %rax
jmpq *%rax
movl 0xc(%r14), %eax
cmpq $0x3, %rax
ja 0x3fa36
leaq 0x768ef(%rip), %rcx     # 0xb5abc
movslq (%rcx,%rax,4), %rax
addq %rcx, %rax
jmpq *%rax
movl 0xc(%r14), %ecx
movl 0x10(%r14), %r8d
leaq 0x79a5a(%rip), %r9      # 0xb8c3f
jmp 0x3f5a1
movl 0xc(%r14), %eax
cmpq $0x3, %rax
ja 0x3fa9b
leaq 0x768fd(%rip), %rcx     # 0xb5afc
movslq (%rcx,%rax,4), %rax
addq %rcx, %rax
jmpq *%rax
movl 0x10(%r14), %ecx
leaq 0x79a7b(%rip), %r8      # 0xb8c8e
jmp 0x3f5bb
movl 0xc(%r14), %ecx
movl 0x10(%r14), %r8d
leaq 0x798ef(%rip), %r9      # 0xb8b16
jmp 0x3f5a1
movl 0xc(%r14), %ecx
movl 0x10(%r14), %r8d
leaq 0x79a16(%rip), %r9      # 0xb8c51
jmp 0x3f5a1
movl 0xc(%r14), %eax
cmpq $0x3, %rax
ja 0x3fb00
leaq 0x76847(%rip), %rcx     # 0xb5a9c
movslq (%rcx,%rax,4), %rax
addq %rcx, %rax
jmpq *%rax
movl 0x10(%r14), %ecx
leaq 0x79b51(%rip), %r8      # 0xb8dba
jmp 0x3f5bb
movl 0x10(%r14), %esi
movq %rbx, %rdi
callq 0x1c036
movl 0x10(%rax), %eax
cmpl $0x2, %eax
je 0x3f51f
cmpl $0x1, %eax
je 0x3f50f
testl %eax, %eax
jne 0x3f83d
movl 0xc(%r14), %ecx
leaq 0x79bf5(%rip), %r8      # 0xb8e97
jmp 0x3f5bb
movl 0xc(%r14), %ecx
leaq 0x79876(%rip), %r8      # 0xb8b28
jmp 0x3f5bb
movl 0xc(%r14), %ecx
leaq 0x799af(%rip), %r8      # 0xb8c71
jmp 0x3f5bb
movl 0xc(%r14), %ecx
leaq 0x7987c(%rip), %r8      # 0xb8b4e
jmp 0x3f5bb
movl 0xc(%r14), %ecx
leaq 0x7999b(%rip), %r8      # 0xb8c7d
jmp 0x3f5bb
movl 0xc(%r14), %ecx
leaq 0x79973(%rip), %r8      # 0xb8c65
jmp 0x3f5bb
movl 0xc(%r14), %eax
cmpq $0x3, %rax
ja 0x3fb65
leaq 0x76770(%rip), %rcx     # 0xb5a7c
movslq (%rcx,%rax,4), %rax
addq %rcx, %rax
jmpq *%rax
movl 0x10(%r14), %ecx
leaq 0x79b2c(%rip), %r8      # 0xb8e4c
jmp 0x3f5bb
movl 0xc(%r14), %ecx
movl 0x10(%r14), %r8d
leaq 0x79bcd(%rip), %r9      # 0xb8f01
jmp 0x3f5a1
movl 0xc(%r14), %ecx
leaq 0x797fb(%rip), %r8      # 0xb8b3f
jmp 0x3f5bb
movl 0xc(%r14), %eax
cmpq $0x3, %rax
ja 0x3fbca
leaq 0x7678e(%rip), %rcx     # 0xb5aec
movslq (%rcx,%rax,4), %rax
addq %rcx, %rax
jmpq *%rax
movl 0x10(%r14), %ecx
leaq 0x79967(%rip), %r8      # 0xb8cd9
jmp 0x3f5bb
movl 0xc(%r14), %eax
cmpq $0x3, %rax
ja 0x3fc2f
leaq 0x76720(%rip), %rcx     # 0xb5aac
movslq (%rcx,%rax,4), %rax
addq %rcx, %rax
jmpq *%rax
movl 0xc(%r14), %eax
cmpq $0x3, %rax
ja 0x3fc94
leaq 0x76772(%rip), %rcx     # 0xb5b1c
movslq (%rcx,%rax,4), %rax
addq %rcx, %rax
jmpq *%rax
movl 0x10(%r14), %ecx
leaq 0x79966(%rip), %r8      # 0xb8d24
jmp 0x3f5bb
movl 0xc(%r14), %eax
cmpq $0x3, %rax
ja 0x3fcf9
leaq 0x766b4(%rip), %rcx     # 0xb5a8c
movslq (%rcx,%rax,4), %rax
addq %rcx, %rax
jmpq *%rax
movl 0x10(%r14), %ecx
leaq 0x79a19(%rip), %r8      # 0xb8e05
jmp 0x3f5bb
movl 0xc(%r14), %eax
cmpq $0x3, %rax
ja 0x3fd5b
leaq 0x76706(%rip), %rcx     # 0xb5b0c
movslq (%rcx,%rax,4), %rax
addq %rcx, %rax
jmpq *%rax
movl 0x10(%r14), %ecx
leaq 0x79955(%rip), %r8      # 0xb8d6f
jmp 0x3f5bb
movl 0x10(%r14), %ecx
leaq 0x7991b(%rip), %r8      # 0xb8d45
jmp 0x3f5bb
movl 0x10(%r14), %ecx
movl 0x14(%r14), %r8d
leaq 0x7991c(%rip), %r9      # 0xb8d5a
jmp 0x3f5a1
movl 0x10(%r14), %ecx
leaq 0x798e2(%rip), %r8      # 0xb8d30
jmp 0x3f5bb
movl 0x10(%r14), %ecx
leaq 0x79932(%rip), %r8      # 0xb8d90
jmp 0x3f5bb
movl 0x10(%r14), %ecx
movl 0x14(%r14), %r8d
leaq 0x79933(%rip), %r9      # 0xb8da5
jmp 0x3f5a1
movl 0x10(%r14), %ecx
leaq 0x798f9(%rip), %r8      # 0xb8d7b
jmp 0x3f5bb
movl 0x10(%r14), %ecx
leaq 0x7981d(%rip), %r8      # 0xb8caf
jmp 0x3f5bb
movl 0x10(%r14), %ecx
movl 0x14(%r14), %r8d
leaq 0x7981e(%rip), %r9      # 0xb8cc4
jmp 0x3f5a1
movl 0x10(%r14), %ecx
leaq 0x797e4(%rip), %r8      # 0xb8c9a
jmp 0x3f5bb
movl 0x10(%r14), %ecx
leaq 0x79834(%rip), %r8      # 0xb8cfa
jmp 0x3f5bb
movl 0x10(%r14), %ecx
movl 0x14(%r14), %r8d
leaq 0x79835(%rip), %r9      # 0xb8d0f
jmp 0x3f5a1
movl 0x10(%r14), %ecx
leaq 0x797fb(%rip), %r8      # 0xb8ce5
jmp 0x3f5bb
movl 0x10(%r14), %ecx
leaq 0x796c6(%rip), %r8      # 0xb8bc0
jmp 0x3f5bb
movl 0x10(%r14), %ecx
leaq 0x796d6(%rip), %r8      # 0xb8be0
jmp 0x3f5bb
movl 0xc(%r14), %ecx
leaq 0x79998(%rip), %r8      # 0xb8eb2
jmp 0x3f5bb
movl 0xc(%r14), %ecx
leaq 0x799a1(%rip), %r8      # 0xb8ecb
jmp 0x3f5bb
movl 0x10(%r14), %ecx
leaq 0x798a1(%rip), %r8      # 0xb8ddb
jmp 0x3f5bb
movl 0x10(%r14), %ecx
movl 0x14(%r14), %r8d
leaq 0x798a5(%rip), %r9      # 0xb8df0
jmp 0x3f5a1
movl 0x10(%r14), %ecx
leaq 0x7986e(%rip), %r8      # 0xb8dc6
jmp 0x3f5bb
movl 0x10(%r14), %ecx
leaq 0x79908(%rip), %r8      # 0xb8e6d
jmp 0x3f5bb
movl 0x10(%r14), %ecx
movl 0x14(%r14), %r8d
leaq 0x7990c(%rip), %r9      # 0xb8e82
jmp 0x3f5a1
movl 0x10(%r14), %ecx
leaq 0x798d5(%rip), %r8      # 0xb8e58
jmp 0x3f5bb
movl 0x10(%r14), %ecx
leaq 0x79894(%rip), %r8      # 0xb8e24
jmp 0x3f5bb
movl 0x10(%r14), %ecx
movl 0x14(%r14), %r8d
leaq 0x79897(%rip), %r9      # 0xb8e38
movq %rbx, %rdi
movl %r15d, %esi
movl %ebp, %edx
callq 0x3a096
jmp 0x3f5c8
movl 0x10(%r14), %ecx
leaq 0x79855(%rip), %r8      # 0xb8e10
movq %rbx, %rdi
movl %r15d, %esi
movl %ebp, %edx
callq 0x39f86
movq %rbx, %rdi
movl %ebp, %esi
callq 0x3c676
addq $0x20, %rsp
popq %rbx
popq %r12
popq %r14
popq %r15
popq %rbp
retq
movl $0x10, %edi
callq 0x6140
movq %rax, %r14
leaq 0x10(%rsp), %r15
movq %r15, -0x10(%r15)
leaq 0x7937f(%rip), %rsi     # 0xb897b
leaq 0x793ad(%rip), %rdx     # 0xb89b0
movq %rsp, %rdi
callq 0x7be0
movb $0x1, %bpl
movq %rsp, %rsi
movq %r14, %rdi
callq 0x6320
leaq 0xbc7a8(%rip), %rax     # 0xfbdc8
addq $0x10, %rax
movq %rax, (%r14)
xorl %ebp, %ebp
leaq 0xbc780(%rip), %rsi     # 0xfbdb0
movq 0xbd9a1(%rip), %rdx     # 0xfcfd8
movq %r14, %rdi
callq 0x6470
jmp 0x3fdbb
movl $0x10, %edi
callq 0x6140
movq %rax, %r14
leaq 0x10(%rsp), %r15
movq %r15, -0x10(%r15)
leaq 0x79483(%rip), %rsi     # 0xb8ae4
leaq 0x7949d(%rip), %rdx     # 0xb8b05
movq %rsp, %rdi
callq 0x7be0
movb $0x1, %bpl
movq %rsp, %rsi
movq %r14, %rdi
callq 0x6320
leaq 0xbc743(%rip), %rax     # 0xfbdc8
addq $0x10, %rax
movq %rax, (%r14)
xorl %ebp, %ebp
leaq 0xbc71b(%rip), %rsi     # 0xfbdb0
movq 0xbd93c(%rip), %rdx     # 0xfcfd8
movq %r14, %rdi
callq 0x6470
jmp 0x3fdbb
movl $0x10, %edi
callq 0x6140
movq %rax, %r14
leaq 0x10(%rsp), %r15
movq %r15, -0x10(%r15)
leaq 0x793cc(%rip), %rsi     # 0xb8a92
leaq 0x793dd(%rip), %rdx     # 0xb8aaa
movq %rsp, %rdi
callq 0x7be0
movb $0x1, %bpl
movq %rsp, %rsi
movq %r14, %rdi
callq 0x6320
leaq 0xbc6de(%rip), %rax     # 0xfbdc8
addq $0x10, %rax
movq %rax, (%r14)
xorl %ebp, %ebp
leaq 0xbc6b6(%rip), %rsi     # 0xfbdb0
movq 0xbd8d7(%rip), %rdx     # 0xfcfd8
movq %r14, %rdi
callq 0x6470
jmp 0x3fdbb
movl $0x10, %edi
callq 0x6140
movq %rax, %r14
leaq 0x10(%rsp), %r15
movq %r15, -0x10(%r15)
leaq 0x7939c(%rip), %rsi     # 0xb8ac7
leaq 0x793b1(%rip), %rdx     # 0xb8ae3
movq %rsp, %rdi
callq 0x7be0
movb $0x1, %bpl
movq %rsp, %rsi
movq %r14, %rdi
callq 0x6320
leaq 0xbc679(%rip), %rax     # 0xfbdc8
addq $0x10, %rax
movq %rax, (%r14)
xorl %ebp, %ebp
leaq 0xbc651(%rip), %rsi     # 0xfbdb0
movq 0xbd872(%rip), %rdx     # 0xfcfd8
movq %r14, %rdi
callq 0x6470
jmp 0x3fdbb
movl $0x10, %edi
callq 0x6140
movq %rax, %r14
leaq 0x10(%rsp), %r15
movq %r15, -0x10(%r15)
leaq 0x79337(%rip), %rsi     # 0xb8ac7
leaq 0x7934c(%rip), %rdx     # 0xb8ae3
movq %rsp, %rdi
callq 0x7be0
movb $0x1, %bpl
movq %rsp, %rsi
movq %r14, %rdi
callq 0x6320
leaq 0xbc614(%rip), %rax     # 0xfbdc8
addq $0x10, %rax
movq %rax, (%r14)
xorl %ebp, %ebp
leaq 0xbc5ec(%rip), %rsi     # 0xfbdb0
movq 0xbd80d(%rip), %rdx     # 0xfcfd8
movq %r14, %rdi
callq 0x6470
jmp 0x3fdbb
movl $0x10, %edi
callq 0x6140
movq %rax, %r14
leaq 0x10(%rsp), %r15
movq %r15, -0x10(%r15)
leaq 0x7940b(%rip), %rsi     # 0xb8c00
leaq 0x7941f(%rip), %rdx     # 0xb8c1b
movq %rsp, %rdi
callq 0x7be0
movb $0x1, %bpl
movq %rsp, %rsi
movq %r14, %rdi
callq 0x6320
leaq 0xbc5af(%rip), %rax     # 0xfbdc8
addq $0x10, %rax
movq %rax, (%r14)
xorl %ebp, %ebp
leaq 0xbc587(%rip), %rsi     # 0xfbdb0
movq 0xbd7a8(%rip), %rdx     # 0xfcfd8
movq %r14, %rdi
callq 0x6470
jmp 0x3fdbb
movl $0x10, %edi
callq 0x6140
movq %rax, %r14
leaq 0x10(%rsp), %r15
movq %r15, -0x10(%r15)
leaq 0x7968a(%rip), %rsi     # 0xb8ee4
leaq 0x7969f(%rip), %rdx     # 0xb8f00
movq %rsp, %rdi
callq 0x7be0
movb $0x1, %bpl
movq %rsp, %rsi
movq %r14, %rdi
callq 0x6320
leaq 0xbc54a(%rip), %rax     # 0xfbdc8
addq $0x10, %rax
movq %rax, (%r14)
xorl %ebp, %ebp
leaq 0xbc522(%rip), %rsi     # 0xfbdb0
movq 0xbd743(%rip), %rdx     # 0xfcfd8
movq %r14, %rdi
callq 0x6470
jmp 0x3fdbb
movl $0x10, %edi
callq 0x6140
movq %rax, %r14
leaq 0x10(%rsp), %r15
movq %r15, -0x10(%r15)
leaq 0x791d3(%rip), %rsi     # 0xb8a92
leaq 0x791e4(%rip), %rdx     # 0xb8aaa
movq %rsp, %rdi
callq 0x7be0
movb $0x1, %bpl
movq %rsp, %rsi
movq %r14, %rdi
callq 0x6320
leaq 0xbc4e5(%rip), %rax     # 0xfbdc8
addq $0x10, %rax
movq %rax, (%r14)
xorl %ebp, %ebp
leaq 0xbc4bd(%rip), %rsi     # 0xfbdb0
movq 0xbd6de(%rip), %rdx     # 0xfcfd8
movq %r14, %rdi
callq 0x6470
jmp 0x3fdbb
movl $0x10, %edi
callq 0x6140
movq %rax, %r14
leaq 0x10(%rsp), %r15
movq %r15, -0x10(%r15)
leaq 0x7916e(%rip), %rsi     # 0xb8a92
leaq 0x7917f(%rip), %rdx     # 0xb8aaa
movq %rsp, %rdi
callq 0x7be0
movb $0x1, %bpl
movq %rsp, %rsi
movq %r14, %rdi
callq 0x6320
leaq 0xbc480(%rip), %rax     # 0xfbdc8
addq $0x10, %rax
movq %rax, (%r14)
xorl %ebp, %ebp
leaq 0xbc458(%rip), %rsi     # 0xfbdb0
movq 0xbd679(%rip), %rdx     # 0xfcfd8
movq %r14, %rdi
callq 0x6470
jmp 0x3fdbb
movl $0x10, %edi
callq 0x6140
movq %rax, %r14
leaq 0x10(%rsp), %r15
movq %r15, -0x10(%r15)
leaq 0x79109(%rip), %rsi     # 0xb8a92
leaq 0x7911a(%rip), %rdx     # 0xb8aaa
movq %rsp, %rdi
callq 0x7be0
movb $0x1, %bpl
movq %rsp, %rsi
movq %r14, %rdi
callq 0x6320
leaq 0xbc41b(%rip), %rax     # 0xfbdc8
addq $0x10, %rax
movq %rax, (%r14)
xorl %ebp, %ebp
leaq 0xbc3f3(%rip), %rsi     # 0xfbdb0
movq 0xbd614(%rip), %rdx     # 0xfcfd8
movq %r14, %rdi
callq 0x6470
jmp 0x3fdbb
movl $0x10, %edi
callq 0x6140
movq %rax, %r14
leaq 0x10(%rsp), %r15
movq %r15, -0x10(%r15)
leaq 0x790a4(%rip), %rsi     # 0xb8a92
leaq 0x790b5(%rip), %rdx     # 0xb8aaa
movq %rsp, %rdi
callq 0x7be0
movb $0x1, %bpl
movq %rsp, %rsi
movq %r14, %rdi
callq 0x6320
leaq 0xbc3b6(%rip), %rax     # 0xfbdc8
addq $0x10, %rax
movq %rax, (%r14)
xorl %ebp, %ebp
leaq 0xbc38e(%rip), %rsi     # 0xfbdb0
movq 0xbd5af(%rip), %rdx     # 0xfcfd8
movq %r14, %rdi
callq 0x6470
jmp 0x3fdbb
movl $0x10, %edi
callq 0x6140
movq %rax, %r14
leaq 0x10(%rsp), %r15
movq %r15, -0x10(%r15)
leaq 0x7903f(%rip), %rsi     # 0xb8a92
leaq 0x79050(%rip), %rdx     # 0xb8aaa
movq %rsp, %rdi
callq 0x7be0
movb $0x1, %bpl
movq %rsp, %rsi
movq %r14, %rdi
callq 0x6320
leaq 0xbc351(%rip), %rax     # 0xfbdc8
addq $0x10, %rax
movq %rax, (%r14)
xorl %ebp, %ebp
leaq 0xbc329(%rip), %rsi     # 0xfbdb0
movq 0xbd54a(%rip), %rdx     # 0xfcfd8
movq %r14, %rdi
callq 0x6470
jmp 0x3fdbb
movl $0x10, %edi
callq 0x6140
movq %rax, %r14
leaq 0x10(%rsp), %r15
movq %r15, -0x10(%r15)
leaq 0x78fda(%rip), %rsi     # 0xb8a92
leaq 0x78feb(%rip), %rdx     # 0xb8aaa
movq %rsp, %rdi
callq 0x7be0
movb $0x1, %bpl
movq %rsp, %rsi
movq %r14, %rdi
callq 0x6320
leaq 0xbc2ec(%rip), %rax     # 0xfbdc8
addq $0x10, %rax
movq %rax, (%r14)
xorl %ebp, %ebp
leaq 0xbc2c4(%rip), %rsi     # 0xfbdb0
movq 0xbd4e5(%rip), %rdx     # 0xfcfd8
movq %r14, %rdi
callq 0x6470
jmp 0x3fdbb
movl $0x10, %edi
callq 0x6140
movq %rax, %r14
leaq 0x10(%rsp), %r15
movq %r15, -0x10(%r15)
leaq 0x78f75(%rip), %rsi     # 0xb8a92
leaq 0x78f86(%rip), %rdx     # 0xb8aaa
movq %rsp, %rdi
callq 0x7be0
movb $0x1, %bpl
movq %rsp, %rsi
movq %r14, %rdi
callq 0x6320
leaq 0xbc287(%rip), %rax     # 0xfbdc8
addq $0x10, %rax
movq %rax, (%r14)
xorl %ebp, %ebp
leaq 0xbc25f(%rip), %rsi     # 0xfbdb0
movq 0xbd480(%rip), %rdx     # 0xfcfd8
movq %r14, %rdi
callq 0x6470
jmp 0x3fdbb
movl $0x10, %edi
callq 0x6140
movq %rax, %r14
leaq 0x10(%rsp), %r15
movq %r15, -0x10(%r15)
leaq 0x78f10(%rip), %rsi     # 0xb8a92
leaq 0x78f21(%rip), %rdx     # 0xb8aaa
movq %rsp, %rdi
callq 0x7be0
movb $0x1, %bpl
movq %rsp, %rsi
movq %r14, %rdi
callq 0x6320
leaq 0xbc222(%rip), %rax     # 0xfbdc8
addq $0x10, %rax
movq %rax, (%r14)
xorl %ebp, %ebp
leaq 0xbc1fa(%rip), %rsi     # 0xfbdb0
movq 0xbd41b(%rip), %rdx     # 0xfcfd8
movq %r14, %rdi
callq 0x6470
jmp 0x3fdbb
movl $0x10, %edi
callq 0x6140
movq %rax, %r14
leaq 0x10(%rsp), %r15
movq %r15, -0x10(%r15)
leaq 0x78eab(%rip), %rsi     # 0xb8a92
leaq 0x78ebc(%rip), %rdx     # 0xb8aaa
movq %rsp, %rdi
callq 0x7be0
movb $0x1, %bpl
movq %rsp, %rsi
movq %r14, %rdi
callq 0x6320
leaq 0xbc1bd(%rip), %rax     # 0xfbdc8
addq $0x10, %rax
movq %rax, (%r14)
xorl %ebp, %ebp
leaq 0xbc195(%rip), %rsi     # 0xfbdb0
movq 0xbd3b6(%rip), %rdx     # 0xfcfd8
movq %r14, %rdi
callq 0x6470
jmp 0x3fdbb
movl $0x10, %edi
callq 0x6140
movq %rax, %r14
leaq 0x10(%rsp), %r15
movq %r15, -0x10(%r15)
leaq 0x78e46(%rip), %rsi     # 0xb8a92
leaq 0x78e57(%rip), %rdx     # 0xb8aaa
movq %rsp, %rdi
callq 0x7be0
movb $0x1, %bpl
movq %rsp, %rsi
movq %r14, %rdi
callq 0x6320
leaq 0xbc158(%rip), %rax     # 0xfbdc8
addq $0x10, %rax
movq %rax, (%r14)
xorl %ebp, %ebp
leaq 0xbc130(%rip), %rsi     # 0xfbdb0
movq 0xbd351(%rip), %rdx     # 0xfcfd8
movq %r14, %rdi
callq 0x6470
jmp 0x3fdbb
movl $0x10, %edi
callq 0x6140
movq %rax, %r14
leaq 0x10(%rsp), %r15
movq %r15, -0x10(%r15)
leaq 0x78de1(%rip), %rsi     # 0xb8a92
leaq 0x78df2(%rip), %rdx     # 0xb8aaa
movq %rsp, %rdi
callq 0x7be0
movb $0x1, %bpl
movq %rsp, %rsi
movq %r14, %rdi
callq 0x6320
leaq 0xbc0f3(%rip), %rax     # 0xfbdc8
addq $0x10, %rax
movq %rax, (%r14)
xorl %ebp, %ebp
leaq 0xbc0cb(%rip), %rsi     # 0xfbdb0
movq 0xbd2ec(%rip), %rdx     # 0xfcfd8
movq %r14, %rdi
callq 0x6470
jmp 0x3fdbb
movl $0x10, %edi
callq 0x6140
movq %rax, %r14
leaq 0x10(%rsp), %r15
movq %r15, -0x10(%r15)
leaq 0x78d7c(%rip), %rsi     # 0xb8a92
leaq 0x78d8d(%rip), %rdx     # 0xb8aaa
movq %rsp, %rdi
callq 0x7be0
movb $0x1, %bpl
movq %rsp, %rsi
movq %r14, %rdi
callq 0x6320
leaq 0xbc08e(%rip), %rax     # 0xfbdc8
addq $0x10, %rax
movq %rax, (%r14)
xorl %ebp, %ebp
leaq 0xbc066(%rip), %rsi     # 0xfbdb0
movq 0xbd287(%rip), %rdx     # 0xfcfd8
movq %r14, %rdi
callq 0x6470
jmp 0x3fdbb
movl $0x10, %edi
callq 0x6140
movq %rax, %r14
leaq 0x10(%rsp), %r15
movq %r15, -0x10(%r15)
leaq 0x78d1a(%rip), %rsi     # 0xb8a92
leaq 0x78d2b(%rip), %rdx     # 0xb8aaa
movq %rsp, %rdi
callq 0x7be0
movb $0x1, %bpl
movq %rsp, %rsi
movq %r14, %rdi
callq 0x6320
leaq 0xbc02c(%rip), %rax     # 0xfbdc8
addq $0x10, %rax
movq %rax, (%r14)
xorl %ebp, %ebp
leaq 0xbc004(%rip), %rsi     # 0xfbdb0
movq 0xbd225(%rip), %rdx     # 0xfcfd8
movq %r14, %rdi
callq 0x6470
jmp 0x3fe9b
jmp 0x3febb
jmp 0x3fe9b
jmp 0x3febb
jmp 0x3fe9b
jmp 0x3febb
jmp 0x3fe9b
jmp 0x3febb
jmp 0x3fe9b
jmp 0x3febb
jmp 0x3fe9b
jmp 0x3febb
jmp 0x3fe9b
jmp 0x3febb
jmp 0x3fe9b
jmp 0x3febb
jmp 0x3fe9b
jmp 0x3febb
jmp 0x3fe9b
jmp 0x3febb
jmp 0x3fe9b
jmp 0x3febb
jmp 0x3fe9b
jmp 0x3febb
jmp 0x3fe9b
jmp 0x3febb
jmp 0x3fe9b
jmp 0x3febb
jmp 0x3fe9b
jmp 0x3febb
jmp 0x3fe9b
jmp 0x3febb
jmp 0x3fe9b
jmp 0x3febb
movq %rax, %rbx
movq (%rsp), %rdi
cmpq %r14, %rdi
jne 0x3fe83
jmp 0x3fec6
jmp 0x3fe92
jmp 0x3fe77
jmp 0x3fe92
jmp 0x3fe77
jmp 0x3fe77
jmp 0x3fe77
jmp 0x3fe92
jmp 0x3fe92
jmp 0x3fe92
jmp 0x3fe77
jmp 0x3fe92
jmp 0x3fe9b
jmp 0x3febb
jmp 0x3fe77
jmp 0x3fe92
jmp 0x3fe77
jmp 0x3fe92
movq %rax, %rbx
movq (%rsp), %rdi
cmpq %r15, %rdi
je 0x3fec6
movq 0x10(%rsp), %rsi
incq %rsi
callq 0x6260
jmp 0x3fec6
movq %rax, %rbx
jmp 0x3fec6
jmp 0x3fe9b
jmp 0x3febb
movq %rax, %rbx
movq (%rsp), %rdi
cmpq %r15, %rdi
je 0x3feb4
movq 0x10(%rsp), %rsi
incq %rsi
callq 0x6260
testb %bpl, %bpl
jne 0x3febe
jmp 0x3fec6
movq %rax, %rbx
movq %r14, %rdi
callq 0x6200
movq %rbx, %rdi
callq 0x64a0