// File: probonopd[P]decodeir/DecodeIR.cpp
// Function: Signal::tryElan()
void Signal::tryElan()   // {40.2k,398,msb}<1,-1|1,-2>(3,-2,D:8,~D:8,2,-2,F:8,~F:8,1,^50m)+  DAR 2012
{
	if ( nFrameL != 35)
		return;
    if ( sortOff.min1 * 3.6 < sortBurst.max3  || sortOff.min1 * 2.4 > sortBurst.max3)
        return;
	if (pFrame[34] > 2.4 * sortOff.min1 || pFrame[34] < 1.6 * sortOff.min1 
		|| pFrame[35] > 2.4 * sortOff.min1 || pFrame[35] < 1.6 * sortOff.min1 )
		return;
	cleanup();
	nMaxShort = sortBurst.min1 * .4;
	int cNdx = 0;
	for (int ndx=1; ndx<35; ++ndx)
	{
		if (ndx == 17) ndx++;
		if (pFrame[2*ndx] > nMaxShort)
		{
			if (pFrame[2*ndx+1] > 2 * nMaxShort)
				cBits[cNdx>>3] |= 0x80 >> (cNdx&7);
		}
		cNdx++;
	}
	int dev = cBits[0];
	int devComp = cBits[1];
	int cmd = cBits[2];
	int cmdComp = cBits[3];
	if ((0xFF ^ devComp) !=  dev || (0xFF ^ cmdComp) != cmd)
		return;
	strcpy(pProtocol,"Elan");
	*pDevice = dev;
	*pOBC = cmd;
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x30, %rsp
movq %rdi, -0x8(%rbp)
movq -0x8(%rbp), %rax
movq %rax, -0x28(%rbp)
cmpl $0x23, 0x48(%rax)
je 0x13eef
jmp 0x14183
movq -0x28(%rbp), %rax
movss 0x18c(%rax), %xmm0
cvtss2sd %xmm0, %xmm1
movsd 0x6769(%rip), %xmm0     # 0x1a670
mulsd %xmm0, %xmm1
movss 0x1e4(%rax), %xmm0
cvtss2sd %xmm0, %xmm0
ucomisd %xmm1, %xmm0
ja 0x13f4b
movq -0x28(%rbp), %rax
movss 0x18c(%rax), %xmm0
cvtss2sd %xmm0, %xmm0
movsd 0x6343(%rip), %xmm1     # 0x1a278
mulsd %xmm1, %xmm0
movss 0x1e4(%rax), %xmm1
cvtss2sd %xmm1, %xmm1
ucomisd %xmm1, %xmm0
jbe 0x13f50
jmp 0x14183
movq -0x28(%rbp), %rax
movq 0x38(%rax), %rcx
movss 0x88(%rcx), %xmm0
cvtss2sd %xmm0, %xmm0
movss 0x18c(%rax), %xmm1
cvtss2sd %xmm1, %xmm2
movsd 0x6300(%rip), %xmm1     # 0x1a278
mulsd %xmm2, %xmm1
ucomisd %xmm1, %xmm0
ja 0x1401c
movq -0x28(%rbp), %rax
movq 0x38(%rax), %rcx
movss 0x88(%rcx), %xmm0
cvtss2sd %xmm0, %xmm1
movss 0x18c(%rax), %xmm0
cvtss2sd %xmm0, %xmm2
movsd 0x636a(%rip), %xmm0     # 0x1a318
mulsd %xmm2, %xmm0
ucomisd %xmm1, %xmm0
ja 0x1401c
movq -0x28(%rbp), %rax
movq 0x38(%rax), %rcx
movss 0x8c(%rcx), %xmm0
cvtss2sd %xmm0, %xmm0
movss 0x18c(%rax), %xmm1
cvtss2sd %xmm1, %xmm2
movsd 0x6298(%rip), %xmm1     # 0x1a278
mulsd %xmm2, %xmm1
ucomisd %xmm1, %xmm0
ja 0x1401c
movq -0x28(%rbp), %rax
movq 0x38(%rax), %rcx
movss 0x8c(%rcx), %xmm0
cvtss2sd %xmm0, %xmm1
movss 0x18c(%rax), %xmm0
cvtss2sd %xmm0, %xmm2
movsd 0x6306(%rip), %xmm0     # 0x1a318
mulsd %xmm2, %xmm0
ucomisd %xmm1, %xmm0
jbe 0x14021
jmp 0x14183
movq -0x28(%rbp), %rdi
callq 0x16180
movq -0x28(%rbp), %rax
movss 0x1d0(%rax), %xmm0
cvtss2sd %xmm0, %xmm0
movsd 0x6316(%rip), %xmm1     # 0x1a358
mulsd %xmm1, %xmm0
cvtsd2ss %xmm0, %xmm0
movss %xmm0, 0xe8(%rax)
movl $0x0, -0xc(%rbp)
movl $0x1, -0x10(%rbp)
cmpl $0x23, -0x10(%rbp)
jge 0x14108
cmpl $0x11, -0x10(%rbp)
jne 0x14079
movl -0x10(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x10(%rbp)
movq -0x28(%rbp), %rax
movq 0x38(%rax), %rcx
movl -0x10(%rbp), %edx
shll %edx
movslq %edx, %rdx
movss (%rcx,%rdx,4), %xmm0
ucomiss 0xe8(%rax), %xmm0
jbe 0x140f1
movq -0x28(%rbp), %rax
movq 0x38(%rax), %rcx
movl -0x10(%rbp), %edx
shll %edx
addl $0x1, %edx
movslq %edx, %rdx
movss (%rcx,%rdx,4), %xmm0
movss 0x5f5d(%rip), %xmm1     # 0x1a014
mulss 0xe8(%rax), %xmm1
ucomiss %xmm1, %xmm0
jbe 0x140ef
movq -0x28(%rbp), %rax
movl -0xc(%rbp), %ecx
andl $0x7, %ecx
movl $0x80, %esi
sarl %cl, %esi
movl -0xc(%rbp), %ecx
sarl $0x3, %ecx
movslq %ecx, %rcx
movzbl 0xa0(%rax,%rcx), %edx
orl %esi, %edx
movb %dl, 0xa0(%rax,%rcx)
jmp 0x140f1
movl -0xc(%rbp), %eax
addl $0x1, %eax
movl %eax, -0xc(%rbp)
movl -0x10(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x10(%rbp)
jmp 0x14060
movq -0x28(%rbp), %rax
movzbl 0xa0(%rax), %ecx
movl %ecx, -0x14(%rbp)
movzbl 0xa1(%rax), %ecx
movl %ecx, -0x18(%rbp)
movzbl 0xa2(%rax), %ecx
movl %ecx, -0x1c(%rbp)
movzbl 0xa3(%rax), %eax
movl %eax, -0x20(%rbp)
movl -0x18(%rbp), %eax
xorl $0xff, %eax
cmpl -0x14(%rbp), %eax
jne 0x1414e
movl -0x20(%rbp), %eax
xorl $0xff, %eax
cmpl -0x1c(%rbp), %eax
je 0x14150
jmp 0x14183
movq -0x28(%rbp), %rax
movq 0x148(%rax), %rdi
leaq 0x6e57(%rip), %rsi      # 0x1afb9
callq 0x2120
movq -0x28(%rbp), %rax
movl -0x14(%rbp), %edx
movq 0x160(%rax), %rcx
movl %edx, (%rcx)
movl -0x1c(%rbp), %ecx
movq 0x170(%rax), %rax
movl %ecx, (%rax)
addq $0x30, %rsp
popq %rbp
retq
nopl (%rax)