// File: tomfunkhouser[P]gaps/pkgs/R3Surfels/R3SurfelFeatureEvaluation.cpp
// Function: gaps::CreateFeatures(gaps::R3SurfelScene*)
int
CreateFeatures(R3SurfelScene *scene)
{
  // Check if features are already created
  if (scene->NFeatures() > 0) return 1;

  // Create pointset features
  scene->InsertFeature(new R3SurfelPointSetFeature("PointSetZMax", 0, 16, 0.5));
  scene->InsertFeature(new R3SurfelPointSetFeature("PointSetZMean", 0, 8, 1));
  scene->InsertFeature(new R3SurfelPointSetFeature("PointSetZStddev", 0, 8, 1));      
  scene->InsertFeature(new R3SurfelPointSetFeature("PointSetXYMax", 0, 4, 0.5));      
  scene->InsertFeature(new R3SurfelPointSetFeature("PointSetXYStddev1", 0, 2, 1));      
  scene->InsertFeature(new R3SurfelPointSetFeature("PointSetXYStddev2", 0, 2, 1));

  // Return success
  return 1;
}

// Assembly:
subq $0x88, %rsp
movq %rdi, 0x78(%rsp)
movq 0x78(%rsp), %rdi
callq 0x16c80
cmpl $0x0, %eax
jle 0x16d8b
movl $0x1, 0x84(%rsp)
jmp 0x1705c
movq 0x78(%rsp), %rax
movq %rax, 0x58(%rsp)
movl $0x48, %edi
callq 0x13570
movq %rax, %rdi
movq %rdi, %rax
movq %rax, 0x60(%rsp)
leaq 0x18d3e7(%rip), %rsi    # 0x1a4198
xorps %xmm0, %xmm0
movsd 0x18d394(%rip), %xmm1   # 0x1a4150
movsd 0x18d394(%rip), %xmm2   # 0x1a4158
callq 0x170f0
jmp 0x16dcb
movq 0x60(%rsp), %rsi
movq 0x58(%rsp), %rdi
movq (%rdi), %rax
movq 0xb0(%rax), %rax
callq *%rax
movq 0x78(%rsp), %rax
movq %rax, 0x48(%rsp)
movl $0x48, %edi
callq 0x13570
movq %rax, %rdi
movq %rdi, %rax
movq %rax, 0x50(%rsp)
leaq 0x18d39e(%rip), %rsi    # 0x1a41a5
xorps %xmm0, %xmm0
movsd 0x18d34e(%rip), %xmm1   # 0x1a4160
movsd 0x18d34e(%rip), %xmm2   # 0x1a4168
callq 0x170f0
jmp 0x16e21
movq 0x50(%rsp), %rsi
movq 0x48(%rsp), %rdi
movq (%rdi), %rax
movq 0xb0(%rax), %rax
callq *%rax
movq 0x78(%rsp), %rax
movq %rax, 0x38(%rsp)
movl $0x48, %edi
callq 0x13570
movq %rax, %rdi
movq %rdi, %rax
movq %rax, 0x40(%rsp)
leaq 0x18d356(%rip), %rsi    # 0x1a41b3
xorps %xmm0, %xmm0
movsd 0x18d2f8(%rip), %xmm1   # 0x1a4160
movsd 0x18d2f8(%rip), %xmm2   # 0x1a4168
callq 0x170f0
jmp 0x16e77
movq 0x40(%rsp), %rsi
movq 0x38(%rsp), %rdi
movq (%rdi), %rax
movq 0xb0(%rax), %rax
callq *%rax
movq 0x78(%rsp), %rax
movq %rax, 0x28(%rsp)
movl $0x48, %edi
callq 0x13570
movq %rax, %rdi
movq %rdi, %rax
movq %rax, 0x30(%rsp)
leaq 0x18d310(%rip), %rsi    # 0x1a41c3
xorps %xmm0, %xmm0
movsd 0x18d2b2(%rip), %xmm1   # 0x1a4170
movsd 0x18d292(%rip), %xmm2   # 0x1a4158
callq 0x170f0
jmp 0x16ecd
movq 0x30(%rsp), %rsi
movq 0x28(%rsp), %rdi
movq (%rdi), %rax
movq 0xb0(%rax), %rax
callq *%rax
movq 0x78(%rsp), %rax
movq %rax, 0x18(%rsp)
movl $0x48, %edi
callq 0x13570
movq %rax, %rdi
movq %rdi, %rax
movq %rax, 0x20(%rsp)
leaq 0x18d2c8(%rip), %rsi    # 0x1a41d1
xorps %xmm0, %xmm0
movsd 0x18d264(%rip), %xmm1   # 0x1a4178
movsd 0x18d24c(%rip), %xmm2   # 0x1a4168
callq 0x170f0
jmp 0x16f23
movq 0x20(%rsp), %rsi
movq 0x18(%rsp), %rdi
movq (%rdi), %rax
movq 0xb0(%rax), %rax
callq *%rax
movq 0x78(%rsp), %rax
movq %rax, 0x8(%rsp)
movl $0x48, %edi
callq 0x13570
movq %rax, %rdi
movq %rdi, %rax
movq %rax, 0x10(%rsp)
leaq 0x18d284(%rip), %rsi    # 0x1a41e3
xorps %xmm0, %xmm0
movsd 0x18d20e(%rip), %xmm1   # 0x1a4178
movsd 0x18d1f6(%rip), %xmm2   # 0x1a4168
callq 0x170f0
jmp 0x16f79
movq 0x10(%rsp), %rsi
movq 0x8(%rsp), %rdi
movq (%rdi), %rax
callq *0xb0(%rax)
movl $0x1, 0x84(%rsp)
jmp 0x1705c
movq 0x60(%rsp), %rdi
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x70(%rsp)
movl %eax, 0x6c(%rsp)
movl $0x48, %esi
callq 0x13580
jmp 0x1706b
movq 0x50(%rsp), %rdi
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x70(%rsp)
movl %eax, 0x6c(%rsp)
movl $0x48, %esi
callq 0x13580
jmp 0x1706b
movq 0x40(%rsp), %rdi
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x70(%rsp)
movl %eax, 0x6c(%rsp)
movl $0x48, %esi
callq 0x13580
jmp 0x1706b
movq 0x30(%rsp), %rdi
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x70(%rsp)
movl %eax, 0x6c(%rsp)
movl $0x48, %esi
callq 0x13580
jmp 0x1706b
movq 0x20(%rsp), %rdi
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x70(%rsp)
movl %eax, 0x6c(%rsp)
movl $0x48, %esi
callq 0x13580
jmp 0x1706b
movq 0x10(%rsp), %rdi
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x70(%rsp)
movl %eax, 0x6c(%rsp)
movl $0x48, %esi
callq 0x13580
jmp 0x1706b
movl 0x84(%rsp), %eax
addq $0x88, %rsp
retq
movq 0x70(%rsp), %rdi
callq 0x13970
nopw %cs:(%rax,%rax)