user: Translate the below assembly code into C programming language:

```asm
<SMoGType>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0x10,%rsp
  mov    %rdi,-0x8(%rbp)
  mov    %rsi,-0x10(%rbp)
  mov    -0x8(%rbp),%rax
  mov    $0x1,%edx
  lea    D865(%rip),%rcx
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <strncmp@plt>
  test   %eax,%eax
  jne    L476
  lea    D865(%rip),%rax
  mov    %rax,%rdi
  call   <GetSMoGType@plt>
  jmp    L869
L476:
  mov    -0x8(%rbp),%rax
  lea    D539(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcmp@plt>
  test   %eax,%eax
  jne    L333
  lea    D755(%rip),%rax
  mov    %rax,%rdi
  call   <GetSMoGType@plt>
  jmp    L869
L333:
  mov    -0x8(%rbp),%rax
  lea    D603(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcmp@plt>
  test   %eax,%eax
  jne    L322
  lea    D603(%rip),%rax
  mov    %rax,%rdi
  call   <GetSMoGType@plt>
  jmp    L869
L322:
  mov    -0x8(%rbp),%rax
  lea    D349(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcmp@plt>
  test   %eax,%eax
  jne    L379
  mov    -0x10(%rbp),%rax
  lea    D102(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcmp@plt>
  test   %eax,%eax
  je     L802
  mov    -0x10(%rbp),%rax
  lea    D210(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcmp@plt>
  test   %eax,%eax
  jne    L401
L802:
  lea    D912(%rip),%rax
  mov    %rax,%rdi
  call   <GetSMoGType@plt>
  jmp    L869
L401:
  lea    D91(%rip),%rax
  mov    %rax,%rdi
  call   <GetSMoGType@plt>
  jmp    L869
L379:
  mov    -0x8(%rbp),%rax
  mov    $0x2,%edx
  lea    D642(%rip),%rcx
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <strncmp@plt>
  test   %eax,%eax
  jne    L170
  mov    -0x10(%rbp),%rax
  lea    D68(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcmp@plt>
  test   %eax,%eax
  je     L883
  mov    -0x10(%rbp),%rax
  lea    D35(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcmp@plt>
  test   %eax,%eax
  jne    L678
L883:
  lea    D755(%rip),%rax
  mov    %rax,%rdi
  call   <GetSMoGType@plt>
  jmp    L869
L678:
  mov    -0x10(%rbp),%rax
  lea    D573(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcmp@plt>
  test   %eax,%eax
  je     L555
  mov    -0x10(%rbp),%rax
  lea    D565(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcmp@plt>
  test   %eax,%eax
  je     L555
  mov    -0x10(%rbp),%rax
  lea    D423(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcmp@plt>
  test   %eax,%eax
  je     L555
  mov    -0x10(%rbp),%rax
  lea    D51(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcmp@plt>
  test   %eax,%eax
  jne    L602
L555:
  lea    D695(%rip),%rax
  mov    %rax,%rdi
  call   <GetSMoGType@plt>
  jmp    L869
L602:
  lea    D91(%rip),%rax
  mov    %rax,%rdi
  call   <GetSMoGType@plt>
  jmp    L869
L170:
  mov    -0x8(%rbp),%rax
  mov    $0x2,%edx
  lea    D459(%rip),%rcx
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <strncmp@plt>
  test   %eax,%eax
  jne    L350
  mov    -0x10(%rbp),%rax
  lea    D821(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcmp@plt>
  test   %eax,%eax
  je     L27
  mov    -0x10(%rbp),%rax
  lea    D564(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcmp@plt>
  test   %eax,%eax
  jne    L809
L27:
  lea    D755(%rip),%rax
  mov    %rax,%rdi
  call   <GetSMoGType@plt>
  jmp    L869
L809:
  mov    -0x10(%rbp),%rax
  lea    D858(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcmp@plt>
  test   %eax,%eax
  jne    L431
  lea    D912(%rip),%rax
  mov    %rax,%rdi
  call   <GetSMoGType@plt>
  jmp    L869
L431:
  mov    -0x10(%rbp),%rax
  lea    D723(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcmp@plt>
  test   %eax,%eax
  jne    L863
  lea    D603(%rip),%rax
  mov    %rax,%rdi
  call   <GetSMoGType@plt>
  jmp    L869
L863:
  mov    -0x10(%rbp),%rax
  lea    D573(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcmp@plt>
  test   %eax,%eax
  je     L142
  mov    -0x10(%rbp),%rax
  lea    D565(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcmp@plt>
  test   %eax,%eax
  je     L142
  mov    -0x10(%rbp),%rax
  lea    D423(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcmp@plt>
  test   %eax,%eax
  je     L142
  mov    -0x10(%rbp),%rax
  lea    D51(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcmp@plt>
  test   %eax,%eax
  jne    L146
L142:
  lea    D695(%rip),%rax
  mov    %rax,%rdi
  call   <GetSMoGType@plt>
  jmp    L869
L146:
  lea    D91(%rip),%rax
  mov    %rax,%rdi
  call   <GetSMoGType@plt>
  jmp    L869
L350:
  mov    -0x8(%rbp),%rax
  mov    $0x2,%edx
  lea    D125(%rip),%rcx
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <strncmp@plt>
  test   %eax,%eax
  jne    L238
  mov    -0x10(%rbp),%rax
  lea    D281(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcmp@plt>
  test   %eax,%eax
  je     L798
  mov    -0x10(%rbp),%rax
  lea    D423(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcmp@plt>
  test   %eax,%eax
  jne    L593
L798:
  lea    D912(%rip),%rax
  mov    %rax,%rdi
  call   <GetSMoGType@plt>
  jmp    L869
L593:
  lea    D695(%rip),%rax
  mov    %rax,%rdi
  call   <GetSMoGType@plt>
  jmp    L869
L238:
  mov    -0x8(%rbp),%rax
  mov    $0x2,%edx
  lea    D823(%rip),%rcx
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <strncmp@plt>
  test   %eax,%eax
  jne    L639
  mov    -0x10(%rbp),%rax
  lea    D858(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcmp@plt>
  test   %eax,%eax
  jne    L667
  lea    D755(%rip),%rax
  mov    %rax,%rdi
  call   <GetSMoGType@plt>
  jmp    L869
L667:
  mov    -0x10(%rbp),%rax
  lea    D565(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcmp@plt>
  test   %eax,%eax
  jne    L768
  lea    D912(%rip),%rax
  mov    %rax,%rdi
  call   <GetSMoGType@plt>
  jmp    L869
L768:
  lea    D695(%rip),%rax
  mov    %rax,%rdi
  call   <GetSMoGType@plt>
  jmp    L869
L639:
  mov    -0x8(%rbp),%rax
  mov    $0x2,%edx
  lea    D626(%rip),%rcx
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <strncmp@plt>
  test   %eax,%eax
  jne    L143
  lea    D695(%rip),%rax
  mov    %rax,%rdi
  call   <GetSMoGType@plt>
  jmp    L869
L143:
  mov    -0x8(%rbp),%rax
  lea    D566(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcmp@plt>
  test   %eax,%eax
  jne    L103
  lea    D686(%rip),%rax
  mov    %rax,%rdi
  call   <GetSMoGType@plt>
  jmp    L869
L103:
  mov    -0x8(%rbp),%rax
  mov    $0x2,%edx
  lea    D919(%rip),%rcx
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <strncmp@plt>
  test   %eax,%eax
  jne    L895
  mov    -0x10(%rbp),%rax
  lea    D423(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcmp@plt>
  test   %eax,%eax
  jne    L707
  lea    D146(%rip),%rax
  mov    %rax,%rdi
  call   <GetSMoGType@plt>
  jmp    L869
L707:
  lea    D919(%rip),%rax
  mov    %rax,%rdi
  call   <GetSMoGType@plt>
  jmp    L869
L895:
  mov    -0x8(%rbp),%rax
  mov    $0x2,%edx
  lea    D138(%rip),%rcx
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <strncmp@plt>
  test   %eax,%eax
  jne    L607
  mov    -0x10(%rbp),%rax
  lea    D423(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcmp@plt>
  test   %eax,%eax
  jne    L871
  lea    D146(%rip),%rax
  mov    %rax,%rdi
  call   <GetSMoGType@plt>
  jmp    L869
L871:
  lea    D919(%rip),%rax
  mov    %rax,%rdi
  call   <GetSMoGType@plt>
  jmp    L869
L607:
  mov    -0x8(%rbp),%rax
  lea    D302(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcmp@plt>
  test   %eax,%eax
  jne    L461
  lea    D146(%rip),%rax
  mov    %rax,%rdi
  call   <GetSMoGType@plt>
  jmp    L869
L461:
  mov    -0x8(%rbp),%rax
  mov    $0x2,%edx
  lea    D742(%rip),%rcx
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <strncmp@plt>
  test   %eax,%eax
  jne    L669
  lea    D146(%rip),%rax
  mov    %rax,%rdi
  call   <GetSMoGType@plt>
  jmp    L869
L669:
  mov    -0x8(%rbp),%rax
  lea    D309(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcmp@plt>
  test   %eax,%eax
  jne    L221
  mov    -0x10(%rbp),%rax
  mov    $0x3,%edx
  lea    D537(%rip),%rcx
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <strncmp@plt>
  test   %eax,%eax
  jne    L640
  lea    D434(%rip),%rax
  mov    %rax,%rdi
  call   <GetSMoGType@plt>
  jmp    L869
L640:
  lea    D292(%rip),%rax
  mov    %rax,%rdi
  call   <GetSMoGType@plt>
  jmp    L869
L221:
  mov    -0x8(%rbp),%rax
  mov    $0x2,%edx
  lea    D861(%rip),%rcx
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <strncmp@plt>
  test   %eax,%eax
  jne    L432
  lea    D434(%rip),%rax
  mov    %rax,%rdi
  call   <GetSMoGType@plt>
  jmp    L869
L432:
  mov    -0x8(%rbp),%rax
  mov    $0x2,%edx
  lea    D434(%rip),%rcx
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <strncmp@plt>
  test   %eax,%eax
  jne    L628
  mov    -0x10(%rbp),%rax
  lea    D68(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcmp@plt>
  test   %eax,%eax
  jne    L455
  lea    D484(%rip),%rax
  mov    %rax,%rdi
  call   <GetSMoGType@plt>
  jmp    L869
L455:
  lea    D292(%rip),%rax
  mov    %rax,%rdi
  call   <GetSMoGType@plt>
  jmp    L869
L628:
  mov    -0x8(%rbp),%rax
  mov    $0x2,%edx
  lea    D899(%rip),%rcx
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <strncmp@plt>
  test   %eax,%eax
  jne    L264
  mov    -0x10(%rbp),%rax
  lea    D821(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcmp@plt>
  test   %eax,%eax
  jne    L799
  lea    D484(%rip),%rax
  mov    %rax,%rdi
  call   <GetSMoGType@plt>
  jmp    L869
L799:
  lea    D292(%rip),%rax
  mov    %rax,%rdi
  call   <GetSMoGType@plt>
  jmp    L869
L264:
  mov    -0x8(%rbp),%rax
  mov    $0x2,%edx
  lea    D893(%rip),%rcx
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <strncmp@plt>
  test   %eax,%eax
  jne    L742
  lea    D434(%rip),%rax
  mov    %rax,%rdi
  call   <GetSMoGType@plt>
  jmp    L869
L742:
  mov    -0x8(%rbp),%rax
  mov    $0x1,%edx
  lea    D89(%rip),%rcx
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <strncmp@plt>
  test   %eax,%eax
  jne    L533
  lea    D436(%rip),%rax
  mov    %rax,%rdi
  call   <GetSMoGType@plt>
  jmp    L869
L533:
  mov    -0x8(%rbp),%rax
  mov    $0x3,%edx
  lea    D661(%rip),%rcx
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <strncmp@plt>
  test   %eax,%eax
  jne    L372
  lea    D484(%rip),%rax
  mov    %rax,%rdi
  call   <GetSMoGType@plt>
  jmp    L869
L372:
  mov    -0x8(%rbp),%rax
  mov    $0x3,%edx
  lea    D511(%rip),%rcx
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <strncmp@plt>
  test   %eax,%eax
  jne    L885
  lea    D484(%rip),%rax
  mov    %rax,%rdi
  call   <GetSMoGType@plt>
  jmp    L869
L885:
  mov    -0x8(%rbp),%rax
  mov    $0x2,%edx
  lea    D491(%rip),%rcx
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <strncmp@plt>
  test   %eax,%eax
  je     L310
  mov    -0x8(%rbp),%rax
  mov    $0x2,%edx
  lea    D169(%rip),%rcx
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <strncmp@plt>
  test   %eax,%eax
  je     L310
  mov    -0x8(%rbp),%rax
  mov    $0x2,%edx
  lea    D225(%rip),%rcx
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <strncmp@plt>
  test   %eax,%eax
  je     L310
  mov    -0x8(%rbp),%rax
  mov    $0x2,%edx
  lea    D273(%rip),%rcx
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <strncmp@plt>
  test   %eax,%eax
  je     L310
  mov    -0x8(%rbp),%rax
  mov    $0x2,%edx
  lea    D888(%rip),%rcx
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <strncmp@plt>
  test   %eax,%eax
  je     L310
  mov    -0x8(%rbp),%rax
  mov    $0x2,%edx
  lea    D612(%rip),%rcx
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <strncmp@plt>
  test   %eax,%eax
  jne    L356
L310:
  lea    D491(%rip),%rax
  mov    %rax,%rdi
  call   <GetSMoGType@plt>
  jmp    L869
L356:
  lea    D865(%rip),%rax
  mov    %rax,%rdi
  call   <GetSMoGType@plt>
L869:
  leave
  ret
```

tool_calls: name: disassemble_data
arguments: tag: D865
datatype: string
name: disassemble_data
arguments: tag: D539
datatype: string
name: disassemble_data
arguments: tag: D755
datatype: string
name: disassemble_data
arguments: tag: D603
datatype: string
name: disassemble_data
arguments: tag: D349
datatype: string
name: disassemble_data
arguments: tag: D102
datatype: string
name: disassemble_data
arguments: tag: D210
datatype: string
name: disassemble_data
arguments: tag: D912
datatype: string
name: disassemble_data
arguments: tag: D91
datatype: string
name: disassemble_data
arguments: tag: D642
datatype: string
name: disassemble_data
arguments: tag: D68
datatype: string
name: disassemble_data
arguments: tag: D35
datatype: string
name: disassemble_data
arguments: tag: D573
datatype: string
name: disassemble_data
arguments: tag: D565
datatype: string
name: disassemble_data
arguments: tag: D423
datatype: string
name: disassemble_data
arguments: tag: D51
datatype: string
name: disassemble_data
arguments: tag: D695
datatype: string
name: disassemble_data
arguments: tag: D459
datatype: string
name: disassemble_data
arguments: tag: D821
datatype: string
name: disassemble_data
arguments: tag: D564
datatype: string
name: disassemble_data
arguments: tag: D858
datatype: string
name: disassemble_data
arguments: tag: D723
datatype: string
name: disassemble_data
arguments: tag: D125
datatype: string
name: disassemble_data
arguments: tag: D281
datatype: string
name: disassemble_data
arguments: tag: D823
datatype: string
name: disassemble_data
arguments: tag: D626
datatype: string
name: disassemble_data
arguments: tag: D566
datatype: string
name: disassemble_data
arguments: tag: D686
datatype: string
name: disassemble_data
arguments: tag: D919
datatype: string
name: disassemble_data
arguments: tag: D146
datatype: string
name: disassemble_data
arguments: tag: D138
datatype: string
name: disassemble_data
arguments: tag: D302
datatype: string
name: disassemble_data
arguments: tag: D742
datatype: string
name: disassemble_data
arguments: tag: D309
datatype: string
name: disassemble_data
arguments: tag: D537
datatype: string
name: disassemble_data
arguments: tag: D434
datatype: string
name: disassemble_data
arguments: tag: D292
datatype: string
name: disassemble_data
arguments: tag: D861
datatype: string
name: disassemble_data
arguments: tag: D484
datatype: string
name: disassemble_data
arguments: tag: D899
datatype: string
name: disassemble_data
arguments: tag: D893
datatype: string
name: disassemble_data
arguments: tag: D89
datatype: string
name: disassemble_data
arguments: tag: D436
datatype: string
name: disassemble_data
arguments: tag: D661
datatype: string
name: disassemble_data
arguments: tag: D511
datatype: string
name: disassemble_data
arguments: tag: D491
datatype: string
name: disassemble_data
arguments: tag: D169
datatype: string
name: disassemble_data
arguments: tag: D225
datatype: string
name: disassemble_data
arguments: tag: D273
datatype: string
name: disassemble_data
arguments: tag: D888
datatype: string
name: disassemble_data
arguments: tag: D612
datatype: string

tool: D865: H

tool: D539: C

tool: D755: CC

tool: D603: CA

tool: D349: CB

tool: D102: SER

tool: D210: THR

tool: D912: CP

tool: D91: C3

tool: D642: CG

tool: D68: ASP

tool: D35: ASN

tool: D573: PHE

tool: D565: TYR

tool: D423: HIS

tool: D51: TRP

tool: D695: C2

tool: D459: CD

tool: D821: GLU

tool: D564: GLN

tool: D858: ARG

tool: D723: PRO

tool: D125: CE

tool: D281: LYS

tool: D823: CZ

tool: D626: CH

tool: D566: N

tool: D686: NM

tool: D919: ND

tool: D146: NC

tool: D138: NE

tool: D302: NZ

tool: D742: NH

tool: D309: O

tool: D537: HOH

tool: D434: OD

tool: D292: OB

tool: D861: OG

tool: D484: OC

tool: D899: OE

tool: D893: OH

tool: D89: S

tool: D436: SP

tool: D661: OXT

tool: D511: OCT

tool: D491: ME

tool: D169: ZN

tool: D225: FE

tool: D273: MG

tool: D888: MN

tool: D612: CU

assistant: ```c
int SMoGType(char *atomname, char *residue) {
  if (!strncmp(atomname, "H", 1))
    return (GetSMoGType("H"));
  else if (!(strcmp(atomname, "C")))
    return (GetSMoGType("CC"));
  else if (!(strcmp(atomname, "CA")))
    return (GetSMoGType("CA"));
  else if (!(strcmp(atomname, "CB"))) {
    if ((!(strcmp(residue, "SER"))) || (!(strcmp(residue, "THR"))))
      return (GetSMoGType("CP"));
    else
      return (GetSMoGType("C3"));
  } else if (!(strncmp(atomname, "CG", 2))) {
    if ((!(strcmp(residue, "ASP"))) || (!(strcmp(residue, "ASN"))))
      return (GetSMoGType("CC"));
    else if ((!(strcmp(residue, "PHE"))) || (!(strcmp(residue, "TYR"))) || (!(strcmp(residue, "HIS"))) || (!(strcmp(residue, "TRP"))))
      return (GetSMoGType("C2"));
    else
      return (GetSMoGType("C3"));
  } else if (!(strncmp(atomname, "CD", 2))) {
    if ((!(strcmp(residue, "GLU"))) || (!(strcmp(residue, "GLN"))))
      return (GetSMoGType("CC"));
    else if (!(strcmp(residue, "ARG")))
      return (GetSMoGType("CP"));
    else if (!(strcmp(residue, "PRO")))
      return (GetSMoGType("CA"));
    else if ((!(strcmp(residue, "PHE"))) || (!(strcmp(residue, "TYR"))) || (!(strcmp(residue, "HIS"))) || (!(strcmp(residue, "TRP"))))
      return (GetSMoGType("C2"));
    else
      return (GetSMoGType("C3"));
  } else if (!(strncmp(atomname, "CE", 2))) {
    if ((!(strcmp(residue, "LYS"))) || (!(strcmp(residue, "HIS"))))
      return (GetSMoGType("CP"));
    else
      return (GetSMoGType("C2"));
  } else if (!(strncmp(atomname, "CZ", 2))) {
    if (!(strcmp(residue, "ARG")))
      return (GetSMoGType("CC"));
    else if (!(strcmp(residue, "TYR")))
      return (GetSMoGType("CP"));
    else
      return (GetSMoGType("C2"));
  } else if (!(strncmp(atomname, "CH", 2)))
    return (GetSMoGType("C2"));
  else if (!(strcmp(atomname, "N")))
    return (GetSMoGType("NM"));
  else if (!(strncmp(atomname, "ND", 2))) {
    if (!(strcmp(residue, "HIS")))
      return (GetSMoGType("NC"));
    else
      return (GetSMoGType("ND"));
  } else if (!(strncmp(atomname, "NE", 2))) {
    if (!(strcmp(residue, "HIS")))
      return (GetSMoGType("NC"));
    else
      return (GetSMoGType("ND"));
  } else if (!(strcmp(atomname, "NZ")))
    return (GetSMoGType("NC"));
  else if (!(strncmp(atomname, "NH", 2)))
    return (GetSMoGType("NC"));
  else if (!(strcmp(atomname, "O")))
    if (!(strncmp(residue, "HOH", 3)))
      return (GetSMoGType("OD"));
    else
      return (GetSMoGType("OB"));
  else if (!(strncmp(atomname, "OG", 2)))
    return (GetSMoGType("OD"));
  else if (!(strncmp(atomname, "OD", 2))) {
    if (!(strcmp(residue, "ASP")))
      return (GetSMoGType("OC"));
    else
      return (GetSMoGType("OB"));
  } else if (!(strncmp(atomname, "OE", 2))) {
    if (!(strcmp(residue, "GLU")))
      return (GetSMoGType("OC"));
    else
      return (GetSMoGType("OB"));
  } else if (!(strncmp(atomname, "OH", 2)))
    return (GetSMoGType("OD"));
  else if (!(strncmp(atomname, "S", 1)))
    return (GetSMoGType("SP"));
  else if (!(strncmp(atomname, "OXT", 3)))
    return (GetSMoGType("OC"));
  else if (!(strncmp(atomname, "OCT", 3)))
    return (GetSMoGType("OC"));
  else if (!strncmp(atomname, "ME", 2) || !strncmp(atomname, "ZN", 2) || !strncmp(atomname, "FE", 2) || !strncmp(atomname, "MG", 2) || !strncmp(atomname, "MN", 2) || !strncmp(atomname, "CU", 2))
    return (GetSMoGType("ME"));
  else {
    return (GetSMoGType("H"));
  }
  return -500;
}
```