#define NULL ((void *)0)
typedef unsigned long size_t; // Customize by platform.
typedef long intptr_t;
typedef unsigned long uintptr_t;
typedef long scalar_t__; // Either arithmetic or pointer type.
/* By default, we understand bool (as a convenience). */
typedef int bool;
#define false 0
#define true 1

/* Forward declarations */

/* Type definitions */
typedef int /*<<< orphan*/ FILE;

/* Variables and functions */
int IsResourceFork(int /*<<< orphan*/ *, unsigned long);
int fread(unsigned char *, int, int, int /*<<< orphan*/ *);
int IsResourceInBinary(FILE *f) {
  unsigned char header[128];
  unsigned long offset;
  if (fread(header, 1, 128, f) != 128)
    return (0);
  if (header[0] != 0 || header[74] != 0 || header[82] != 0 || header[1] <= 0 ||
      header[1] > 33 || header[63] != 0 || header[2 + header[1]] != 0)
    return (0);
  offset = 128 + ((header[0x53] << 24) | (header[0x54] << 16) |
                  (header[0x55] << 8) | header[0x56]);
  return (IsResourceFork(f, offset));
}


x86 assembly (clang, -O0):
<IsResourceInBinary>:
push   %rbp
mov    %rsp,%rbp
sub    $0xa0,%rsp
mov    %rdi,-0x10(%rbp)
lea    -0x90(%rbp),%rdi
mov    -0x10(%rbp),%rcx
mov    $0x1,%esi
mov    $0x80,%edx
call   1030 <fread@plt>
cmp    $0x80,%eax
je     1160 <IsResourceInBinary+0x40>
movl   $0x0,-0x4(%rbp)
jmp    1220 <IsResourceInBinary+0x100>
movzbl -0x90(%rbp),%eax
cmp    $0x0,%eax
jne    11d4 <IsResourceInBinary+0xb4>
movzbl -0x46(%rbp),%eax
cmp    $0x0,%eax
jne    11d4 <IsResourceInBinary+0xb4>
movzbl -0x3e(%rbp),%eax
cmp    $0x0,%eax
jne    11d4 <IsResourceInBinary+0xb4>
movzbl -0x8f(%rbp),%eax
cmp    $0x0,%eax
jle    11d4 <IsResourceInBinary+0xb4>
movzbl -0x8f(%rbp),%eax
cmp    $0x21,%eax
jg     11d4 <IsResourceInBinary+0xb4>
movzbl -0x51(%rbp),%eax
cmp    $0x0,%eax
jne    11d4 <IsResourceInBinary+0xb4>
movzbl -0x8f(%rbp),%eax
add    $0x2,%eax
cltq
movzbl -0x90(%rbp,%rax,1),%eax
ff
cmp    $0x0,%eax
je     11e0 <IsResourceInBinary+0xc0>
movl   $0x0,-0x4(%rbp)
jmp    1220 <IsResourceInBinary+0x100>
movzbl -0x3d(%rbp),%eax
shl    $0x18,%eax
movzbl -0x3c(%rbp),%ecx
shl    $0x10,%ecx
or     %ecx,%eax
movzbl -0x3b(%rbp),%ecx
shl    $0x8,%ecx
or     %ecx,%eax
movzbl -0x3a(%rbp),%ecx
or     %ecx,%eax
add    $0x80,%eax
cltq
mov    %rax,-0x98(%rbp)
mov    -0x10(%rbp),%rdi
mov    -0x98(%rbp),%rsi
call   1040 <IsResourceFork@plt>
mov    %eax,-0x4(%rbp)
mov    -0x4(%rbp),%eax
add    $0xa0,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<IsResourceInBinary>:
push   %r14
push   %rbx
sub    $0x88,%rsp
mov    %rdi,%rbx
mov    %rsp,%r14
mov    %r14,%rdi
mov    $0x1,%esi
mov    $0x80,%edx
mov    %rbx,%rcx
call   1030 <fread@plt>
cmp    $0x80,%eax
jne    117e <IsResourceInBinary+0x5e>
cmpb   $0x0,(%rsp)
jne    117e <IsResourceInBinary+0x5e>
cmpb   $0x0,0x4a(%rsp)
jne    117e <IsResourceInBinary+0x5e>
cmpb   $0x0,0x52(%rsp)
jne    117e <IsResourceInBinary+0x5e>
mov    0x1(%rsp),%al
test   %al,%al
je     117e <IsResourceInBinary+0x5e>
cmp    $0x21,%al
ja     117e <IsResourceInBinary+0x5e>
cmpb   $0x0,0x3f(%rsp)
jne    117e <IsResourceInBinary+0x5e>
movzbl %al,%eax
cmpb   $0x0,0x2(%rax,%r14,1)
je     118b <IsResourceInBinary+0x6b>
xor    %eax,%eax
add    $0x88,%rsp
pop    %rbx
pop    %r14
ret
movzbl 0x53(%rsp),%eax
shl    $0x18,%eax
movzbl 0x54(%rsp),%ecx
shl    $0x10,%rcx
cltq
or     %rcx,%rax
movzbl 0x55(%rsp),%ecx
shl    $0x8,%rcx
or     %rax,%rcx
movzbl 0x56(%rsp),%eax
lea    (%rax,%rcx,1),%rsi
add    $0x80,%rsi
mov    %rbx,%rdi
add    $0x88,%rsp
pop    %rbx
pop    %r14
jmp    1040 <IsResourceFork@plt>

LLVM IR (-O0):
define i32 @IsResourceInBinary(i32* %0) {
%2 = alloca i32
%3 = alloca i32*
%4 = alloca [128 x i8]
%5 = alloca i64
store i32* %0, i32** %3
%6 = getelementptr inbounds [128 x i8], [128 x i8]* %4, i64 0, i64 0
%7 = load i32*, i32** %3
%8 = call i32 @fread(i8* %6, i32 1, i32 128, i32* %7)
%9 = icmp ne i32 %8, 128
br i1 %9, label %10, label %11
10: ; preds = %1
store i32 0, i32* %2
br label %76
11: ; preds = %1
%12 = getelementptr inbounds [128 x i8], [128 x i8]* %4, i64 0, i64 0
%13 = load i8, i8* %12
%14 = zext i8 %13 to i32
%15 = icmp ne i32 %14, 0
br i1 %15, label %51, label %16
16: ; preds = %11
%17 = getelementptr inbounds [128 x i8], [128 x i8]* %4, i64 0, i64 74
%18 = load i8, i8* %17
%19 = zext i8 %18 to i32
%20 = icmp ne i32 %19, 0
br i1 %20, label %51, label %21
21: ; preds = %16
%22 = getelementptr inbounds [128 x i8], [128 x i8]* %4, i64 0, i64 82
%23 = load i8, i8* %22
%24 = zext i8 %23 to i32
%25 = icmp ne i32 %24, 0
br i1 %25, label %51, label %26
26: ; preds = %21
%27 = getelementptr inbounds [128 x i8], [128 x i8]* %4, i64 0, i64 1
%28 = load i8, i8* %27
%29 = zext i8 %28 to i32
%30 = icmp sle i32 %29, 0
br i1 %30, label %51, label %31
31: ; preds = %26
%32 = getelementptr inbounds [128 x i8], [128 x i8]* %4, i64 0, i64 1
%33 = load i8, i8* %32
%34 = zext i8 %33 to i32
%35 = icmp sgt i32 %34, 33
br i1 %35, label %51, label %36
36: ; preds = %31
%37 = getelementptr inbounds [128 x i8], [128 x i8]* %4, i64 0, i64 63
%38 = load i8, i8* %37
%39 = zext i8 %38 to i32
%40 = icmp ne i32 %39, 0
br i1 %40, label %51, label %41
41: ; preds = %36
%42 = getelementptr inbounds [128 x i8], [128 x i8]* %4, i64 0, i64 1
%43 = load i8, i8* %42
%44 = zext i8 %43 to i32
%45 = add nsw i32 2, %44
%46 = sext i32 %45 to i64
%47 = getelementptr inbounds [128 x i8], [128 x i8]* %4, i64 0, i64 %46
%48 = load i8, i8* %47
%49 = zext i8 %48 to i32
%50 = icmp ne i32 %49, 0
br i1 %50, label %51, label %52
51: ; preds = %41, %36, %31, %26, %21, %16, %11
store i32 0, i32* %2
br label %76
52: ; preds = %41
%53 = getelementptr inbounds [128 x i8], [128 x i8]* %4, i64 0, i64 83
%54 = load i8, i8* %53
%55 = zext i8 %54 to i32
%56 = shl i32 %55, 24
%57 = getelementptr inbounds [128 x i8], [128 x i8]* %4, i64 0, i64 84
%58 = load i8, i8* %57
%59 = zext i8 %58 to i32
%60 = shl i32 %59, 16
%61 = or i32 %56, %60
%62 = getelementptr inbounds [128 x i8], [128 x i8]* %4, i64 0, i64 85
%63 = load i8, i8* %62
%64 = zext i8 %63 to i32
%65 = shl i32 %64, 8
%66 = or i32 %61, %65
%67 = getelementptr inbounds [128 x i8], [128 x i8]* %4, i64 0, i64 86
%68 = load i8, i8* %67
%69 = zext i8 %68 to i32
%70 = or i32 %66, %69
%71 = add nsw i32 128, %70
%72 = sext i32 %71 to i64
store i64 %72, i64* %5
%73 = load i32*, i32** %3
%74 = load i64, i64* %5
%75 = call i32 @IsResourceFork(i32* %73, i64 %74)
store i32 %75, i32* %2
br label %76
76: ; preds = %52, %51, %10
%77 = load i32, i32* %2
ret i32 %77
}

LLVM IR (-O2):
define i32 @IsResourceInBinary(i32* %0) {
%2 = alloca [128 x i8]
%3 = getelementptr inbounds [128 x i8], [128 x i8]* %2, i64 0, i64 0
%4 = call i32 @fread(i8* %3, i32 1, i32 128, i32* %0)
%5 = icmp eq i32 %4, 128
br i1 %5, label %6, label %55
6: ; preds = %1
%7 = load i8, i8* %3
%8 = icmp ne i8 %7, 0
%9 = getelementptr inbounds [128 x i8], [128 x i8]* %2, i64 0, i64 74
%10 = load i8, i8* %9
%11 = icmp ne i8 %10, 0
%12 = select i1 %8, i1 true, i1 %11
%13 = getelementptr inbounds [128 x i8], [128 x i8]* %2, i64 0, i64 82
%14 = load i8, i8* %13
%15 = icmp ne i8 %14, 0
%16 = select i1 %12, i1 true, i1 %15
%17 = getelementptr inbounds [128 x i8], [128 x i8]* %2, i64 0, i64 1
%18 = load i8, i8* %17
%19 = icmp eq i8 %18, 0
%20 = select i1 %16, i1 true, i1 %19
%21 = icmp ugt i8 %18, 33
%22 = select i1 %20, i1 true, i1 %21
%23 = getelementptr inbounds [128 x i8], [128 x i8]* %2, i64 0, i64 63
%24 = load i8, i8* %23
%25 = icmp ne i8 %24, 0
%26 = select i1 %22, i1 true, i1 %25
br i1 %26, label %55, label %27
27: ; preds = %6
%28 = zext i8 %18 to i64
%29 = add nuw nsw i64 %28, 2
%30 = getelementptr inbounds [128 x i8], [128 x i8]* %2, i64 0, i64 %29
%31 = load i8, i8* %30
%32 = icmp eq i8 %31, 0
br i1 %32, label %33, label %55
33: ; preds = %27
%34 = getelementptr inbounds [128 x i8], [128 x i8]* %2, i64 0, i64 83
%35 = load i8, i8* %34
%36 = zext i8 %35 to i32
%37 = shl nuw i32 %36, 24
%38 = getelementptr inbounds [128 x i8], [128 x i8]* %2, i64 0, i64 84
%39 = load i8, i8* %38
%40 = zext i8 %39 to i32
%41 = shl nuw nsw i32 %40, 16
%42 = or i32 %41, %37
%43 = getelementptr inbounds [128 x i8], [128 x i8]* %2, i64 0, i64 85
%44 = load i8, i8* %43
%45 = zext i8 %44 to i32
%46 = shl nuw nsw i32 %45, 8
%47 = or i32 %42, %46
%48 = getelementptr inbounds [128 x i8], [128 x i8]* %2, i64 0, i64 86
%49 = load i8, i8* %48
%50 = zext i8 %49 to i32
%51 = or i32 %47, %50
%52 = add nsw i32 %51, 128
%53 = sext i32 %52 to i64
%54 = tail call i32 @IsResourceFork(i32* %0, i64 %53)
br label %55
55: ; preds = %6, %27, %1, %33
%56 = phi i32 [ %54, %33 ], [ 0, %1 ], [ 0, %27 ], [ 0, %6 ]
ret i32 %56
}