// File: /workspace/github_cpp_makefile_star2_O2/rossy[P]crossc/SPIRV-Cross/spirv_glsl.cpp
// Function: spirv_cross::CompilerGLSL::layout_for_variable[abi:cxx11](spirv_cross::SPIRVariable const&)
string CompilerGLSL::layout_for_variable(const SPIRVariable &var)
{
	// FIXME: Come up with a better solution for when to disable layouts.
	// Having layouts depend on extensions as well as which types
	// of layouts are used. For now, the simple solution is to just disable
	// layouts for legacy versions.
	if (is_legacy())
		return "";

	vector<string> attr;

	auto &dec = ir.meta[var.self].decoration;
	auto &type = get<SPIRType>(var.basetype);
	auto flags = dec.decoration_flags;
	auto typeflags = ir.meta[type.self].decoration.decoration_flags;

	if (options.vulkan_semantics && var.storage == StorageClassPushConstant)
		attr.push_back("push_constant");

	if (flags.get(DecorationRowMajor))
		attr.push_back("row_major");
	if (flags.get(DecorationColMajor))
		attr.push_back("column_major");

	if (options.vulkan_semantics)
	{
		if (flags.get(DecorationInputAttachmentIndex))
			attr.push_back(join("input_attachment_index = ", dec.input_attachment));
	}

	bool is_block = has_decoration(type.self, DecorationBlock);
	if (flags.get(DecorationLocation) && can_use_io_location(var.storage, is_block))
	{
		Bitset combined_decoration;
		for (uint32_t i = 0; i < ir.meta[type.self].members.size(); i++)
			combined_decoration.merge_or(combined_decoration_for_member(type, i));

		// If our members have location decorations, we don't need to
		// emit location decorations at the top as well (looks weird).
		if (!combined_decoration.get(DecorationLocation))
			attr.push_back(join("location = ", dec.location));
	}

	// Can only declare Component if we can declare location.
	if (flags.get(DecorationComponent) && can_use_io_location(var.storage, is_block))
	{
		if (!options.es)
		{
			if (options.version < 440 && options.version >= 140)
				require_extension_internal("GL_ARB_enhanced_layouts");
			else if (options.version < 140)
				SPIRV_CROSS_THROW("Component decoration is not supported in targets below GLSL 1.40.");
			attr.push_back(join("component = ", dec.component));
		}
		else
			SPIRV_CROSS_THROW("Component decoration is not supported in ES targets.");
	}

	if (flags.get(DecorationIndex))
		attr.push_back(join("index = ", dec.index));

	// Do not emit set = decoration in regular GLSL output, but
	// we need to preserve it in Vulkan GLSL mode.
	if (var.storage != StorageClassPushConstant)
	{
		if (flags.get(DecorationDescriptorSet) && options.vulkan_semantics)
			attr.push_back(join("set = ", dec.set));
	}

	// GL 3.0/GLSL 1.30 is not considered legacy, but it doesn't have UBOs ...
	bool can_use_buffer_blocks = (options.es && options.version >= 300) || (!options.es && options.version >= 140);

	bool can_use_binding;
	if (options.es)
		can_use_binding = options.version >= 310;
	else
		can_use_binding = options.enable_420pack_extension || (options.version >= 420);

	// Make sure we don't emit binding layout for a classic uniform on GLSL 1.30.
	if (!can_use_buffer_blocks && var.storage == StorageClassUniform)
		can_use_binding = false;

	if (can_use_binding && flags.get(DecorationBinding))
		attr.push_back(join("binding = ", dec.binding));

	if (flags.get(DecorationOffset))
		attr.push_back(join("offset = ", dec.offset));

	bool push_constant_block = options.vulkan_semantics && var.storage == StorageClassPushConstant;
	bool ssbo_block = var.storage == StorageClassStorageBuffer ||
	                  (var.storage == StorageClassUniform && typeflags.get(DecorationBufferBlock));

	// Instead of adding explicit offsets for every element here, just assume we're using std140 or std430.
	// If SPIR-V does not comply with either layout, we cannot really work around it.
	if (can_use_buffer_blocks && var.storage == StorageClassUniform && typeflags.get(DecorationBlock))
	{
		if (buffer_is_packing_standard(type, BufferPackingStd140))
			attr.push_back("std140");
		else if (buffer_is_packing_standard(type, BufferPackingStd140EnhancedLayout))
		{
			attr.push_back("std140");
			// Fallback time. We might be able to use the ARB_enhanced_layouts to deal with this difference,
			// however, we can only use layout(offset) on the block itself, not any substructs, so the substructs better be the appropriate layout.
			// Enhanced layouts seem to always work in Vulkan GLSL, so no need for extensions there.
			if (options.es && !options.vulkan_semantics)
				SPIRV_CROSS_THROW("Push constant block cannot be expressed as neither std430 nor std140. ES-targets do "
				                  "not support GL_ARB_enhanced_layouts.");
			if (!options.es && !options.vulkan_semantics && options.version < 440)
				require_extension_internal("GL_ARB_enhanced_layouts");

			// This is a very last minute to check for this, but use this unused decoration to mark that we should emit
			// explicit offsets for this block type.
			// layout_for_variable() will be called before the actual buffer emit.
			// The alternative is a full pass before codegen where we deduce this decoration,
			// but then we are just doing the exact same work twice, and more complexity.
			set_decoration(type.self, DecorationCPacked);
		}
		else
		{
			SPIRV_CROSS_THROW("Uniform buffer cannot be expressed as std140, even with enhanced layouts. You can try "
			                  "flattening this block to "
			                  "support a more flexible layout.");
		}
	}
	else if (can_use_buffer_blocks && (push_constant_block || ssbo_block))
	{
		if (buffer_is_packing_standard(type, BufferPackingStd430))
			attr.push_back("std430");
		else if (buffer_is_packing_standard(type, BufferPackingStd140))
			attr.push_back("std140");
		else if (buffer_is_packing_standard(type, BufferPackingStd140EnhancedLayout))
		{
			attr.push_back("std140");

			// Fallback time. We might be able to use the ARB_enhanced_layouts to deal with this difference,
			// however, we can only use layout(offset) on the block itself, not any substructs, so the substructs better be the appropriate layout.
			// Enhanced layouts seem to always work in Vulkan GLSL, so no need for extensions there.
			if (options.es && !options.vulkan_semantics)
				SPIRV_CROSS_THROW("Push constant block cannot be expressed as neither std430 nor std140. ES-targets do "
				                  "not support GL_ARB_enhanced_layouts.");
			if (!options.es && !options.vulkan_semantics && options.version < 440)
				require_extension_internal("GL_ARB_enhanced_layouts");

			set_decoration(type.self, DecorationCPacked);
		}
		else if (buffer_is_packing_standard(type, BufferPackingStd430EnhancedLayout))
		{
			attr.push_back("std430");
			if (options.es && !options.vulkan_semantics)
				SPIRV_CROSS_THROW("Push constant block cannot be expressed as neither std430 nor std140. ES-targets do "
				                  "not support GL_ARB_enhanced_layouts.");
			if (!options.es && !options.vulkan_semantics && options.version < 440)
				require_extension_internal("GL_ARB_enhanced_layouts");

			set_decoration(type.self, DecorationCPacked);
		}
		else
		{
			SPIRV_CROSS_THROW("Buffer block cannot be expressed as neither std430 nor std140, even with enhanced "
			                  "layouts. You can try flattening this block to support a more flexible layout.");
		}
	}

	// For images, the type itself adds a layout qualifer.
	// Only emit the format for storage images.
	if (type.basetype == SPIRType::Image && type.image.sampled == 2)
	{
		const char *fmt = format_to_glsl(type.image.format);
		if (fmt)
			attr.push_back(fmt);
	}

	if (attr.empty())
		return "";

	string res = "layout(";
	res += merge(attr);
	res += ") ";
	return res;
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x138, %rsp            # imm = 0x138
movq %rdx, %r15
movq %rsi, %r14
movq %rdi, %rbx
movq %rsi, %rdi
callq 0x41b9c
testb %al, %al
je 0x23dcc
leaq 0x6bad0(%rip), %rsi     # 0x8f887
leaq 0xb8(%rsp), %rdx
movq %rbx, %rdi
callq 0x6100
jmp 0x24709
movq %rbx, 0x68(%rsp)
xorps %xmm0, %xmm0
movaps %xmm0, 0x40(%rsp)
andq $0x0, 0x50(%rsp)
movl 0x8(%r15), %eax
movq %r15, 0x60(%rsp)
movl 0xc(%r15), %esi
imulq $0x148, %rax, %rbx      # imm = 0x148
addq 0x38(%r14), %rbx
movq %r14, %rdi
callq 0x90a4
movq %rax, %r15
movq %rbx, 0x58(%rsp)
leaq 0x60(%rbx), %rsi
leaq 0xb8(%rsp), %rdi
callq 0x934a
movl 0x8(%r15), %eax
movq 0x38(%r14), %rcx
imulq $0x148, %rax, %rax      # imm = 0x148
leaq (%rcx,%rax), %rsi
addq $0x60, %rsi
leaq 0xf8(%rsp), %rdi
callq 0x934a
cmpb $0x1, 0x43e(%r14)
jne 0x23e7a
movq 0x60(%rsp), %rax
cmpl $0x9, 0x10(%rax)
jne 0x23e7a
leaq 0x6df64(%rip), %rsi     # 0x91dbc
movq %rsp, %rdi
leaq 0x78(%rsp), %rdx
callq 0x6100
leaq 0x40(%rsp), %rdi
movq %rsp, %rsi
callq 0xcc8c
movq %rsp, %rdi
callq 0x6548
movq 0xb8(%rsp), %rax
testb $0x10, %al
je 0x23eb7
leaq 0x6dc19(%rip), %rsi     # 0x91aa6
movq %rsp, %rdi
leaq 0x78(%rsp), %rdx
callq 0x6100
leaq 0x40(%rsp), %rdi
movq %rsp, %rsi
callq 0xcc8c
movq %rsp, %rdi
callq 0x6548
movq 0xb8(%rsp), %rax
testb $0x20, %al
je 0x23ee4
leaq 0x6df08(%rip), %rsi     # 0x91dca
movq %rsp, %rdi
leaq 0x78(%rsp), %rdx
callq 0x6100
leaq 0x40(%rsp), %rdi
movq %rsp, %rsi
callq 0xcc8c
movq %rsp, %rdi
callq 0x6548
cmpb $0x1, 0x43e(%r14)
jne 0x23f28
testb $0x8, 0xbd(%rsp)
je 0x23f28
movq 0x58(%rsp), %rax
leaq 0xc0(%rax), %rdx
leaq 0x6decc(%rip), %rsi     # 0x91dd7
movq %rsp, %rdi
callq 0x41cbf
leaq 0x40(%rsp), %rdi
movq %rsp, %rsi
callq 0xcc8c
movq %rsp, %rdi
callq 0x6548
movl 0x8(%r15), %esi
pushq $0x2
popq %rdx
movq %r14, %rdi
callq 0x103d2
testb $0x40, 0xbb(%rsp)
movzbl %al, %edx
je 0x24053
movq 0x60(%rsp), %rax
movl 0x10(%rax), %esi
movq %r14, %rdi
movl %edx, 0x74(%rsp)
callq 0x23326
testb %al, %al
movl 0x74(%rsp), %edx
je 0x24053
leaq 0x8(%rsp), %rax
andq $0x0, -0x8(%rax)
leaq 0x38(%rsp), %rax
movq %rax, -0x30(%rax)
movq $0x1, -0x28(%rax)
xorps %xmm0, %xmm0
movups %xmm0, -0x20(%rax)
movl $0x3f800000, -0x10(%rax) # imm = 0x3F800000
movups %xmm0, -0x8(%rax)
xorl %r13d, %r13d
movl $0xd0, %ebx
leaq 0x78(%rsp), %rbp
movq %rsp, %r12
movl %r13d, %ecx
movq %r15, %r8
movl 0x8(%r15), %eax
movq %r14, %rsi
movq 0x38(%r14), %rdx
imulq $0x148, %rax, %rdi      # imm = 0x148
movq 0xd8(%rdx,%rdi), %rax
subq 0xd0(%rdx,%rdi), %rax
cqto
idivq %rbx
cmpq %rcx, %rax
jbe 0x24002
movq %rbp, %rdi
movq %r8, %rdx
movl %r13d, %ecx
callq 0x16ba6
movq %r12, %rdi
movq %rbp, %rsi
callq 0x17e7a
leaq 0x80(%rsp), %rdi
callq 0xb51c
incl %r13d
jmp 0x23fa5
testb $0x40, 0x3(%rsp)
movq %r8, %r15
movq %rsi, %r14
jne 0x24045
movq 0x58(%rsp), %rax
leaq 0xa4(%rax), %rdx
leaq 0x6da8e(%rip), %rsi     # 0x91ab0
leaq 0x78(%rsp), %rdi
callq 0x416ac
leaq 0x40(%rsp), %rdi
leaq 0x78(%rsp), %rsi
callq 0xcc8c
leaq 0x78(%rsp), %rdi
callq 0x6548
leaq 0x8(%rsp), %rdi
callq 0xb51c
movl 0x74(%rsp), %edx
testb $-0x80, 0xbb(%rsp)
je 0x24100
movq 0x60(%rsp), %rax
movl 0x10(%rax), %esi
movq %r14, %rdi
callq 0x23326
testb %al, %al
je 0x24100
cmpb $0x0, 0x43c(%r14)
jne 0x2471e
movl 0x438(%r14), %eax
leal -0x8c(%rax), %ecx
cmpl $0x12b, %ecx            # imm = 0x12B
ja 0x240c5
leaq 0x6da19(%rip), %rsi     # 0x91abc
movq %rsp, %rdi
leaq 0x78(%rsp), %rdx
callq 0x6100
movq %rsp, %rsi
movq %r14, %rdi
callq 0x21390
movq %rsp, %rdi
callq 0x6548
jmp 0x240d0
cmpl $0x8b, %eax
jbe 0x24768
movq 0x58(%rsp), %rax
leaq 0xa8(%rax), %rdx
leaq 0x6da33(%rip), %rsi     # 0x91b16
movq %rsp, %rdi
callq 0x41bc9
leaq 0x40(%rsp), %rdi
movq %rsp, %rsi
callq 0xcc8c
movq %rsp, %rdi
callq 0x6548
testb $0x1, 0xbc(%rsp)
je 0x2413a
movq 0x58(%rsp), %rax
leaq 0xc8(%rax), %rdx
leaq 0x6dccb(%rip), %rsi     # 0x91de8
movq %rsp, %rdi
callq 0x41d29
leaq 0x40(%rsp), %rdi
movq %rsp, %rsi
callq 0xcc8c
movq %rsp, %rdi
callq 0x6548
movq 0x60(%rsp), %rax
cmpl $0x9, 0x10(%rax)
je 0x24189
testb $0x4, 0xbc(%rsp)
je 0x24189
cmpb $0x1, 0x43e(%r14)
jne 0x24189
movq 0x58(%rsp), %rax
leaq 0xac(%rax), %rdx
leaq 0x6d9ef(%rip), %rsi     # 0x91b5b
movq %rsp, %rdi
callq 0x41d93
leaq 0x40(%rsp), %rdi
movq %rsp, %rsi
callq 0xcc8c
movq %rsp, %rdi
callq 0x6548
movl 0x438(%r14), %eax
cmpb $0x1, 0x43c(%r14)
jne 0x241ac
cmpl $0x12c, %eax            # imm = 0x12C
setae %bl
cmpl $0x136, %eax            # imm = 0x136
setae %al
jmp 0x241c3
cmpl $0x8c, %eax
setae %bl
cmpl $0x1a4, %eax            # imm = 0x1A4
setae %al
orb 0x441(%r14), %al
movq 0x60(%rsp), %rcx
cmpl $0x2, 0x10(%rcx)
setne %dl
orb %bl, %dl
movq 0xb8(%rsp), %rcx
movq %rcx, %rsi
shrq $0x21, %rsi
andl $0x1, %esi
andb %dl, %sil
andb %al, %sil
cmpb $0x1, %sil
jne 0x24227
movq 0x58(%rsp), %rax
leaq 0xb0(%rax), %rdx
leaq 0x6dbef(%rip), %rsi     # 0x91df1
movq %rsp, %rdi
callq 0x41dfd
leaq 0x40(%rsp), %rdi
movq %rsp, %rsi
callq 0xcc8c
movq %rsp, %rdi
callq 0x6548
movq 0xb8(%rsp), %rcx
btq $0x23, %rcx
jae 0x2425e
movq 0x58(%rsp), %rdx
addq $0xb4, %rdx
leaq 0x6d917(%rip), %rsi     # 0x91b58
movq %rsp, %rdi
callq 0x41c33
leaq 0x40(%rsp), %rdi
movq %rsp, %rsi
callq 0xcc8c
movq %rsp, %rdi
callq 0x6548
movq 0x60(%rsp), %rax
movl 0x10(%rax), %edx
cmpl $0x9, %edx
sete %al
andb 0x43e(%r14), %al
cmpl $0x2, %edx
je 0x24283
movb $0x1, %cl
cmpl $0xc, %edx
je 0x242a2
xorl %ecx, %ecx
jmp 0x242a2
testb %bl, %bl
je 0x2462c
movq 0xf8(%rsp), %rcx
testb $0x4, %cl
jne 0x243d6
andl $0x8, %ecx
shrl $0x3, %ecx
orb %cl, %al
andb %al, %bl
cmpb $0x1, %bl
jne 0x2462c
pushq $0x1
popq %rdx
pushq $-0x1
popq %r8
movq %r14, %rdi
movq %r15, %rsi
xorl %ecx, %ecx
callq 0x23b1a
testb %al, %al
je 0x242ed
leaq 0x6dc3d(%rip), %rsi     # 0x91f0b
movq %rsp, %rdi
leaq 0x78(%rsp), %rdx
callq 0x6100
leaq 0x40(%rsp), %rdi
movq %rsp, %rsi
callq 0xcc8c
jmp 0x24412
pushq $-0x1
popq %r8
movq %r14, %rdi
movq %r15, %rsi
xorl %edx, %edx
xorl %ecx, %ecx
callq 0x23b1a
testb %al, %al
je 0x2432a
leaq 0x6daf1(%rip), %rsi     # 0x91dfc
movq %rsp, %rdi
leaq 0x78(%rsp), %rdx
callq 0x6100
leaq 0x40(%rsp), %rdi
movq %rsp, %rsi
callq 0xcc8c
jmp 0x24412
pushq $0x2
popq %rdx
pushq $-0x1
popq %r8
movq %r14, %rdi
movq %r15, %rsi
xorl %ecx, %ecx
callq 0x23b1a
testb %al, %al
je 0x2441f
leaq 0x6daaf(%rip), %rsi     # 0x91dfc
movq %rsp, %rdi
leaq 0x78(%rsp), %rdx
callq 0x6100
leaq 0x40(%rsp), %rdi
movq %rsp, %rsi
callq 0xcc8c
movq %rsp, %rdi
callq 0x6548
movb 0x43e(%r14), %al
cmpb $0x1, 0x43c(%r14)
jne 0x24577
testb %al, %al
jne 0x2461b
pushq $0x10
popq %rdi
callq 0x6140
movq %rax, %rbx
leaq 0x6da65(%rip), %rsi     # 0x91e03
movq %rsp, %rdi
leaq 0x78(%rsp), %rdx
callq 0x6100
movb $0x1, %bpl
movq %rsp, %rsi
movq %rbx, %rdi
callq 0x6f6e
xorl %ebp, %ebp
leaq 0xc29fe(%rip), %rsi     # 0xe6dc0
movq 0xc3c17(%rip), %rdx     # 0xe7fe0
movq %rbx, %rdi
callq 0x6490
jmp 0x2483e
pushq $-0x1
popq %r8
movq %r14, %rdi
movq %r15, %rsi
xorl %edx, %edx
xorl %ecx, %ecx
callq 0x23b1a
testb %al, %al
je 0x244cb
leaq 0x6da04(%rip), %rsi     # 0x91dfc
movq %rsp, %rdi
leaq 0x78(%rsp), %rdx
callq 0x6100
leaq 0x40(%rsp), %rdi
movq %rsp, %rsi
callq 0xcc8c
movq %rsp, %rdi
callq 0x6548
jmp 0x2462c
pushq $0x3
popq %rdx
pushq $-0x1
popq %r8
movq %r14, %rdi
movq %r15, %rsi
xorl %ecx, %ecx
callq 0x23b1a
testb %al, %al
je 0x247b2
leaq 0x6dac9(%rip), %rsi     # 0x91f0b
movq %rsp, %rdi
leaq 0x78(%rsp), %rdx
callq 0x6100
leaq 0x40(%rsp), %rdi
movq %rsp, %rsi
callq 0xcc8c
movq %rsp, %rdi
callq 0x6548
movb 0x43e(%r14), %al
cmpb $0x1, 0x43c(%r14)
jne 0x245b1
testb %al, %al
jne 0x2461b
pushq $0x10
popq %rdi
callq 0x6140
movq %rax, %rbx
leaq 0x6d970(%rip), %rsi     # 0x91e03
movq %rsp, %rdi
leaq 0x78(%rsp), %rdx
callq 0x6100
movb $0x1, %bpl
movq %rsp, %rsi
movq %rbx, %rdi
callq 0x6f6e
xorl %ebp, %ebp
leaq 0xc2909(%rip), %rsi     # 0xe6dc0
movq 0xc3b22(%rip), %rdx     # 0xe7fe0
movq %rbx, %rdi
callq 0x6490
jmp 0x2483e
pushq $0x2
popq %rdx
pushq $-0x1
popq %r8
movq %r14, %rdi
movq %r15, %rsi
xorl %ecx, %ecx
callq 0x23b1a
testb %al, %al
je 0x247f9
leaq 0x6d90e(%rip), %rsi     # 0x91dfc
movq %rsp, %rdi
leaq 0x78(%rsp), %rdx
callq 0x6100
leaq 0x40(%rsp), %rdi
movq %rsp, %rsi
callq 0xcc8c
movq %rsp, %rdi
callq 0x6548
movb 0x43e(%r14), %al
cmpb $0x1, 0x43c(%r14)
jne 0x245e3
testb %al, %al
jne 0x2461b
pushq $0x10
popq %rdi
callq 0x6140
movq %rax, %rbx
leaq 0x6d8c4(%rip), %rsi     # 0x91e03
movq %rsp, %rdi
leaq 0x78(%rsp), %rdx
callq 0x6100
movb $0x1, %bpl
movq %rsp, %rsi
movq %rbx, %rdi
callq 0x6f6e
xorl %ebp, %ebp
leaq 0xc285d(%rip), %rsi     # 0xe6dc0
movq 0xc3a76(%rip), %rdx     # 0xe7fe0
movq %rbx, %rdi
callq 0x6490
jmp 0x2483e
testb %al, %al
jne 0x2461b
cmpl $0x1b7, 0x438(%r14) # imm = 0x1B7
ja 0x2461b
leaq 0x6d525(%rip), %rsi     # 0x91abc
movq %rsp, %rdi
leaq 0x78(%rsp), %rdx
callq 0x6100
movq %rsp, %rsi
movq %r14, %rdi
callq 0x21390
jmp 0x24613
testb %al, %al
jne 0x2461b
cmpl $0x1b7, 0x438(%r14) # imm = 0x1B7
ja 0x2461b
leaq 0x6d4f3(%rip), %rsi     # 0x91abc
movq %rsp, %rdi
leaq 0x78(%rsp), %rdx
callq 0x6100
movq %rsp, %rsi
movq %r14, %rdi
callq 0x21390
jmp 0x24613
testb %al, %al
jne 0x2461b
cmpl $0x1b7, 0x438(%r14) # imm = 0x1B7
ja 0x2461b
leaq 0x6d4c1(%rip), %rsi     # 0x91abc
movq %rsp, %rdi
leaq 0x78(%rsp), %rdx
callq 0x6100
movq %rsp, %rsi
movq %r14, %rdi
callq 0x21390
movq %rsp, %rdi
callq 0x6548
movl 0x8(%r15), %esi
pushq $0xa
popq %rdx
movq %r14, %rdi
xorl %ecx, %ecx
callq 0x1206e
cmpl $0xd, 0xc(%r15)
jne 0x24676
cmpl $0x2, 0x8c(%r15)
jne 0x24676
movl 0x90(%r15), %esi
movq %r14, %rdi
callq 0x23400
testq %rax, %rax
je 0x24676
movq %rsp, %rdi
leaq 0x78(%rsp), %rdx
movq %rax, %rsi
callq 0x6100
leaq 0x40(%rsp), %rdi
movq %rsp, %rsi
callq 0xcc8c
movq %rsp, %rdi
callq 0x6548
movq 0x40(%rsp), %rax
cmpq 0x48(%rsp), %rax
je 0x246cc
leaq 0x6d399(%rip), %rsi     # 0x91a22
movq %rsp, %rdx
movq 0x68(%rsp), %rdi
callq 0x6100
movq %rsp, %rdi
leaq 0x40(%rsp), %rsi
callq 0x41980
movq %rsp, %rsi
movq 0x68(%rsp), %rbx
movq %rbx, %rdi
callq 0x64f0
movq %rsp, %rdi
callq 0x6548
leaq 0x7170b(%rip), %rsi     # 0x95dcd
movq %rbx, %rdi
callq 0x64d0
jmp 0x246e0
leaq 0x6b1b4(%rip), %rsi     # 0x8f887
movq %rsp, %rdx
movq 0x68(%rsp), %rdi
callq 0x6100
leaq 0x100(%rsp), %rdi
callq 0xb51c
leaq 0xc0(%rsp), %rdi
callq 0xb51c
leaq 0x40(%rsp), %rdi
callq 0xb98a
movq 0x68(%rsp), %rbx
movq %rbx, %rax
addq $0x138, %rsp            # imm = 0x138
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
pushq $0x10
popq %rdi
callq 0x6140
movq %rax, %rbx
leaq 0x6d3f3(%rip), %rsi     # 0x91b23
movq %rsp, %rdi
leaq 0x78(%rsp), %rdx
callq 0x6100
movb $0x1, %bpl
movq %rsp, %rsi
movq %rbx, %rdi
callq 0x6f6e
xorl %ebp, %ebp
leaq 0xc266c(%rip), %rsi     # 0xe6dc0
movq 0xc3885(%rip), %rdx     # 0xe7fe0
movq %rbx, %rdi
callq 0x6490
jmp 0x2483e
pushq $0x10
popq %rdi
callq 0x6140
movq %rax, %rbx
leaq 0x6d35a(%rip), %rsi     # 0x91ad4
movq %rsp, %rdi
leaq 0x78(%rsp), %rdx
callq 0x6100
movb $0x1, %bpl
movq %rsp, %rsi
movq %rbx, %rdi
callq 0x6f6e
xorl %ebp, %ebp
leaq 0xc2622(%rip), %rsi     # 0xe6dc0
movq 0xc383b(%rip), %rdx     # 0xe7fe0
movq %rbx, %rdi
callq 0x6490
jmp 0x2483e
pushq $0x10
popq %rdi
callq 0x6140
movq %rax, %rbx
leaq 0x6d74e(%rip), %rsi     # 0x91f12
movq %rsp, %rdi
leaq 0x78(%rsp), %rdx
callq 0x6100
movb $0x1, %bpl
movq %rsp, %rsi
movq %rbx, %rdi
callq 0x6f6e
xorl %ebp, %ebp
leaq 0xc25d8(%rip), %rsi     # 0xe6dc0
movq 0xc37f1(%rip), %rdx     # 0xe7fe0
movq %rbx, %rdi
callq 0x6490
jmp 0x2483e
pushq $0x10
popq %rdi
callq 0x6140
movq %rax, %rbx
leaq 0x6d671(%rip), %rsi     # 0x91e7c
movq %rsp, %rdi
leaq 0x78(%rsp), %rdx
callq 0x6100
movb $0x1, %bpl
movq %rsp, %rsi
movq %rbx, %rdi
callq 0x6f6e
xorl %ebp, %ebp
leaq 0xc2591(%rip), %rsi     # 0xe6dc0
movq 0xc37aa(%rip), %rdx     # 0xe7fe0
movq %rbx, %rdi
callq 0x6490
jmp 0x2491e
jmp 0x24956
jmp 0x248d1
jmp 0x248e6
jmp 0x2491e
jmp 0x24956
jmp 0x248d1
jmp 0x248e6
jmp 0x2491e
jmp 0x24956
jmp 0x248d1
jmp 0x248e6
jmp 0x248d1
jmp 0x248e6
jmp 0x248d1
jmp 0x248e6
jmp 0x2491e
jmp 0x24956
jmp 0x2491e
jmp 0x24956
jmp 0x2491e
jmp 0x24956
jmp 0x2491e
jmp 0x24956
jmp 0x248d1
jmp 0x248e6
jmp 0x2491e
jmp 0x24956
movq %rax, %r14
leaq 0x78(%rsp), %rdi
callq 0x6548
jmp 0x24970
jmp 0x2496d
jmp 0x2491e
jmp 0x2491e
jmp 0x24956
jmp 0x24956
movq %rax, %r14
movq %rsp, %rdi
callq 0x6548
testb %bpl, %bpl
jne 0x248e9
jmp 0x2497a
movq %rax, %r14
movq %rbx, %rdi
callq 0x6200
jmp 0x2497a
jmp 0x2491e
jmp 0x24956
jmp 0x2491e
jmp 0x24956
jmp 0x2491e
jmp 0x24956
jmp 0x2491e
jmp 0x24956
jmp 0x24956
jmp 0x24956
jmp 0x2491e
jmp 0x24956
jmp 0x2491e
jmp 0x24956
jmp 0x2491e
jmp 0x24956
jmp 0x2491e
jmp 0x24956
jmp 0x2491e
jmp 0x24956
movq %rax, %r14
movq %rsp, %rdi
jmp 0x2493f
jmp 0x24956
jmp 0x24937
movq %rax, %r14
movq %rsp, %rdi
callq 0x6548
jmp 0x2493a
movq %rax, %r14
movq 0x68(%rsp), %rdi
callq 0x6548
jmp 0x2497a
jmp 0x24956
jmp 0x24956
movq %rax, %r14
jmp 0x24987
jmp 0x24951
movq %rax, %r14
jmp 0x24994
movq %rax, %r14
jmp 0x2497a
movq %rax, %r14
leaq 0x80(%rsp), %rdi
callq 0xb51c
jmp 0x24970
movq %rax, %r14
leaq 0x8(%rsp), %rdi
callq 0xb51c
leaq 0x100(%rsp), %rdi
callq 0xb51c
leaq 0xc0(%rsp), %rdi
callq 0xb51c
leaq 0x40(%rsp), %rdi
callq 0xb98a
movq %r14, %rdi
callq 0x64b0