[llvm] [readtapi] Setup simple stubify support (PR #76075)

Cyndy Ishida via llvm-commits llvm-commits at lists.llvm.org
Wed Dec 20 12:56:03 PST 2023


https://github.com/cyndyishida updated https://github.com/llvm/llvm-project/pull/76075

>From 76ea1d0ab1ebd4e54fe43c270df79ec1a1c93c29 Mon Sep 17 00:00:00 2001
From: Cyndy Ishida <cyndy_ishida at apple.com>
Date: Tue, 19 Dec 2023 09:21:07 -0800
Subject: [PATCH 1/3] [readtapi] Setup simple stubify support

Stubify broadly takes either tbd files or binary dylibs and turns them into tbd files. In future patches, stubify will also allow additional information to be embedded into the final tbd output too.
---
 .../llvm-readtapi/Inputs/flat_namespace.yaml  |  328 ++
 .../Inputs/mixed-swift-objc.yaml              | 4011 +++++++++++++++++
 .../test/tools/llvm-readtapi/Inputs/objc.yaml |  692 +++
 .../llvm-readtapi/Inputs/thread_local.yaml    |  228 +
 .../tools/llvm-readtapi/Inputs/universal.yaml |  372 ++
 .../compare-incorrect-format.test             |    7 -
 .../llvm-readtapi/compare-tbd-dylib.test      |   41 +
 .../tools/llvm-readtapi/stubify-invalid.test  |    7 +
 llvm/test/tools/llvm-readtapi/stubify.test    |  158 +
 llvm/test/tools/llvm-readtapi/write.test      |  103 +-
 llvm/tools/llvm-readtapi/TapiOpts.td          |    6 +
 llvm/tools/llvm-readtapi/llvm-readtapi.cpp    |  100 +-
 12 files changed, 5968 insertions(+), 85 deletions(-)
 create mode 100644 llvm/test/tools/llvm-readtapi/Inputs/flat_namespace.yaml
 create mode 100644 llvm/test/tools/llvm-readtapi/Inputs/mixed-swift-objc.yaml
 create mode 100644 llvm/test/tools/llvm-readtapi/Inputs/objc.yaml
 create mode 100644 llvm/test/tools/llvm-readtapi/Inputs/thread_local.yaml
 create mode 100644 llvm/test/tools/llvm-readtapi/Inputs/universal.yaml
 delete mode 100644 llvm/test/tools/llvm-readtapi/compare-incorrect-format.test
 create mode 100644 llvm/test/tools/llvm-readtapi/compare-tbd-dylib.test
 create mode 100644 llvm/test/tools/llvm-readtapi/stubify-invalid.test
 create mode 100644 llvm/test/tools/llvm-readtapi/stubify.test

diff --git a/llvm/test/tools/llvm-readtapi/Inputs/flat_namespace.yaml b/llvm/test/tools/llvm-readtapi/Inputs/flat_namespace.yaml
new file mode 100644
index 00000000000000..1cd97f09bac706
--- /dev/null
+++ b/llvm/test/tools/llvm-readtapi/Inputs/flat_namespace.yaml
@@ -0,0 +1,328 @@
+--- !mach-o
+FileHeader:
+  magic:           0xFEEDFACF
+  cputype:         0x01000007
+  cpusubtype:      0x00000003
+  filetype:        0x00000006
+  ncmds:           13
+  sizeofcmds:      1128
+  flags:           0x00100004
+  reserved:        0x00000000
+LoadCommands:
+  - cmd:             LC_SEGMENT_64
+    cmdsize:         392
+    segname:         __TEXT
+    vmaddr:          0
+    vmsize:          4096
+    fileoff:         0
+    filesize:        4096
+    maxprot:         7
+    initprot:        5
+    nsects:          4
+    flags:           0
+    Sections:
+      - sectname:        __text
+        segname:         __TEXT
+        addr:            0x0000000000000F60
+        size:            44
+        offset:          0x00000F60
+        align:           4
+        reloff:          0x00000000
+        nreloc:          0
+        flags:           0x80000400
+        reserved1:       0x00000000
+        reserved2:       0x00000000
+        reserved3:       0x00000000
+        content:         554889E54883EC10897DFCBF7A000000E817000000488B0D940000008B39037DFC8945F889F84883C4105DC3
+      - sectname:        __stubs
+        segname:         __TEXT
+        addr:            0x0000000000000F8C
+        size:            6
+        offset:          0x00000F8C
+        align:           1
+        reloff:          0x00000000
+        nreloc:          0
+        flags:           0x80000408
+        reserved1:       0x00000000
+        reserved2:       0x00000006
+        reserved3:       0x00000000
+        content:         FF2586000000
+      - sectname:        __stub_helper
+        segname:         __TEXT
+        addr:            0x0000000000000F94
+        size:            26
+        offset:          0x00000F94
+        align:           2
+        reloff:          0x00000000
+        nreloc:          0
+        flags:           0x80000400
+        reserved1:       0x00000000
+        reserved2:       0x00000000
+        reserved3:       0x00000000
+        content:         4C8D1D6D0000004153FF255D000000906800000000E9E6FFFFFF
+      - sectname:        __unwind_info
+        segname:         __TEXT
+        addr:            0x0000000000000FB0
+        size:            72
+        offset:          0x00000FB0
+        align:           2
+        reloff:          0x00000000
+        nreloc:          0
+        flags:           0x00000000
+        reserved1:       0x00000000
+        reserved2:       0x00000000
+        reserved3:       0x00000000
+        content:         010000001C000000000000001C000000000000001C00000002000000600F000034000000340000008D0F00000000000034000000030000000C000100100001000000000000000001
+  - cmd:             LC_SEGMENT_64
+    cmdsize:         312
+    segname:         __DATA
+    vmaddr:          4096
+    vmsize:          4096
+    fileoff:         4096
+    filesize:        4096
+    maxprot:         7
+    initprot:        3
+    nsects:          3
+    flags:           0
+    Sections:
+      - sectname:        __nl_symbol_ptr
+        segname:         __DATA
+        addr:            0x0000000000001000
+        size:            16
+        offset:          0x00001000
+        align:           3
+        reloff:          0x00000000
+        nreloc:          0
+        flags:           0x00000006
+        reserved1:       0x00000001
+        reserved2:       0x00000000
+        reserved3:       0x00000000
+        content:         '00000000000000000000000000000000'
+      - sectname:        __got
+        segname:         __DATA
+        addr:            0x0000000000001010
+        size:            8
+        offset:          0x00001010
+        align:           3
+        reloff:          0x00000000
+        nreloc:          0
+        flags:           0x00000006
+        reserved1:       0x00000003
+        reserved2:       0x00000000
+        reserved3:       0x00000000
+        content:         '0000000000000000'
+      - sectname:        __la_symbol_ptr
+        segname:         __DATA
+        addr:            0x0000000000001018
+        size:            8
+        offset:          0x00001018
+        align:           3
+        reloff:          0x00000000
+        nreloc:          0
+        flags:           0x00000007
+        reserved1:       0x00000004
+        reserved2:       0x00000000
+        reserved3:       0x00000000
+        content:         A40F000000000000
+  - cmd:             LC_SEGMENT_64
+    cmdsize:         72
+    segname:         __LINKEDIT
+    vmaddr:          8192
+    vmsize:          4096
+    fileoff:         8192
+    filesize:        220
+    maxprot:         7
+    initprot:        1
+    nsects:          0
+    flags:           0
+  - cmd:             LC_ID_DYLIB
+    cmdsize:         40
+    dylib:
+      name:            24
+      timestamp:       1
+      current_version: 0
+      compatibility_version: 0
+    Content:   foo.dylib
+    ZeroPadBytes:    7
+  - cmd:             LC_DYLD_INFO_ONLY
+    cmdsize:         48
+    rebase_off:      8192
+    rebase_size:     8
+    bind_off:        8200
+    bind_size:       48
+    weak_bind_off:   0
+    weak_bind_size:  0
+    lazy_bind_off:   8248
+    lazy_bind_size:  16
+    export_off:      8264
+    export_size:     16
+  - cmd:             LC_SYMTAB
+    cmdsize:         24
+    symoff:          8288
+    nsyms:           4
+    stroff:          8372
+    strsize:         40
+  - cmd:             LC_DYSYMTAB
+    cmdsize:         80
+    ilocalsym:       0
+    nlocalsym:       0
+    iextdefsym:      0
+    nextdefsym:      1
+    iundefsym:       1
+    nundefsym:       3
+    tocoff:          0
+    ntoc:            0
+    modtaboff:       0
+    nmodtab:         0
+    extrefsymoff:    0
+    nextrefsyms:     0
+    indirectsymoff:  8352
+    nindirectsyms:   5
+    extreloff:       0
+    nextrel:         0
+    locreloff:       0
+    nlocrel:         0
+  - cmd:             LC_UUID
+    cmdsize:         24
+    uuid:            24AE602E-6B89-37A8-9E38-39A436D25110
+  - cmd:             LC_BUILD_VERSION
+    cmdsize:         32
+    platform:        1
+    minos:           658944
+    sdk:             658944
+    ntools:          1
+    Tools:
+      - tool:            3
+        version:         29491968
+  - cmd:             LC_SOURCE_VERSION
+    cmdsize:         16
+    version:         0
+  - cmd:             LC_LOAD_DYLIB
+    cmdsize:         56
+    dylib:
+      name:            24
+      timestamp:       2
+      current_version: 82115073
+      compatibility_version: 65536
+    Content:   '/usr/lib/libSystem.B.dylib'
+    ZeroPadBytes:    6
+  - cmd:             LC_FUNCTION_STARTS
+    cmdsize:         16
+    dataoff:         8280
+    datasize:        8
+  - cmd:             LC_DATA_IN_CODE
+    cmdsize:         16
+    dataoff:         8288
+    datasize:        0
+LinkEditData:
+  RebaseOpcodes:
+    - Opcode:          REBASE_OPCODE_SET_TYPE_IMM
+      Imm:             1
+    - Opcode:          REBASE_OPCODE_SET_SEGMENT_AND_OFFSET_ULEB
+      Imm:             1
+      ExtraData:
+        - 0x0000000000000018
+    - Opcode:          REBASE_OPCODE_DO_REBASE_IMM_TIMES
+      Imm:             1
+    - Opcode:          REBASE_OPCODE_DONE
+      Imm:             0
+  BindOpcodes:
+    - Opcode:          BIND_OPCODE_SET_DYLIB_SPECIAL_IMM
+      Imm:             14
+      Symbol:          ''
+    - Opcode:          BIND_OPCODE_SET_SYMBOL_TRAILING_FLAGS_IMM
+      Imm:             0
+      Symbol:          _bar
+    - Opcode:          BIND_OPCODE_SET_TYPE_IMM
+      Imm:             1
+      Symbol:          ''
+    - Opcode:          BIND_OPCODE_SET_SEGMENT_AND_OFFSET_ULEB
+      Imm:             1
+      ULEBExtraData:
+        - 0x0000000000000010
+      Symbol:          ''
+    - Opcode:          BIND_OPCODE_DO_BIND
+      Imm:             0
+      Symbol:          ''
+    - Opcode:          BIND_OPCODE_SET_SYMBOL_TRAILING_FLAGS_IMM
+      Imm:             0
+      Symbol:          dyld_stub_binder
+    - Opcode:          BIND_OPCODE_ADD_ADDR_ULEB
+      Imm:             0
+      ULEBExtraData:
+        - 0xFFFFFFFFFFFFFFE8
+      Symbol:          ''
+    - Opcode:          BIND_OPCODE_DO_BIND
+      Imm:             0
+      Symbol:          ''
+    - Opcode:          BIND_OPCODE_DONE
+      Imm:             0
+      Symbol:          ''
+  LazyBindOpcodes:
+    - Opcode:          BIND_OPCODE_SET_SEGMENT_AND_OFFSET_ULEB
+      Imm:             1
+      ULEBExtraData:
+        - 0x0000000000000018
+      Symbol:          ''
+    - Opcode:          BIND_OPCODE_SET_DYLIB_SPECIAL_IMM
+      Imm:             14
+      Symbol:          ''
+    - Opcode:          BIND_OPCODE_SET_SYMBOL_TRAILING_FLAGS_IMM
+      Imm:             0
+      Symbol:          _putchar
+    - Opcode:          BIND_OPCODE_DO_BIND
+      Imm:             0
+      Symbol:          ''
+    - Opcode:          BIND_OPCODE_DONE
+      Imm:             0
+      Symbol:          ''
+    - Opcode:          BIND_OPCODE_DONE
+      Imm:             0
+      Symbol:          ''
+  ExportTrie:
+    TerminalSize:    0
+    NodeOffset:      0
+    Name:            ''
+    Flags:           0x0000000000000000
+    Address:         0x0000000000000000
+    Other:           0x0000000000000000
+    ImportName:      ''
+    Children:
+      - TerminalSize:    3
+        NodeOffset:      8
+        Name:            _foo
+        Flags:           0x0000000000000000
+        Address:         0x0000000000000F60
+        Other:           0x0000000000000000
+        ImportName:      ''
+  NameList:
+    - n_strx:          2
+      n_type:          0x0F
+      n_sect:          1
+      n_desc:          0
+      n_value:         3936
+    - n_strx:          7
+      n_type:          0x01
+      n_sect:          0
+      n_desc:          0
+      n_value:         0
+    - n_strx:          12
+      n_type:          0x01
+      n_sect:          0
+      n_desc:          0
+      n_value:         0
+    - n_strx:          21
+      n_type:          0x01
+      n_sect:          0
+      n_desc:          0
+      n_value:         0
+  StringTable:
+    - ' '
+    - _foo
+    - _bar
+    - _putchar
+    - dyld_stub_binder
+    - ''
+    - ''
+...
+
diff --git a/llvm/test/tools/llvm-readtapi/Inputs/mixed-swift-objc.yaml b/llvm/test/tools/llvm-readtapi/Inputs/mixed-swift-objc.yaml
new file mode 100644
index 00000000000000..48ceea1ed80136
--- /dev/null
+++ b/llvm/test/tools/llvm-readtapi/Inputs/mixed-swift-objc.yaml
@@ -0,0 +1,4011 @@
+--- !mach-o
+FileHeader:
+  magic:           0xFEEDFACF
+  cputype:         0x1000007
+  cpusubtype:      0x3
+  filetype:        0x6
+  ncmds:           27
+  sizeofcmds:      3200
+  flags:           0x110085
+  reserved:        0x0
+LoadCommands:
+  - cmd:             LC_SEGMENT_64
+    cmdsize:         1032
+    segname:         __TEXT
+    vmaddr:          0
+    vmsize:          16384
+    fileoff:         0
+    filesize:        16384
+    maxprot:         5
+    initprot:        5
+    nsects:          12
+    flags:           0
+    Sections:
+      - sectname:        __text
+        segname:         __TEXT
+        addr:            0x1B30
+        size:            6790
+        offset:          0x1B30
+        align:           4
+        reloff:          0x0
+        nreloc:          0
+        flags:           0x80000400
+        reserved1:       0x0
+        reserved2:       0x0
+        reserved3:       0x0
+        content:         554889E531C05DC30F1F840000000000554889E5B8010000005DC30F1F440000554889E531C024010FB6C05DC3909090554889E541555031C089C7E8600500004989C5E8E80200004883C408415D5DC3554889E541554883EC28488945E8488B3F48897DD8E80C1B0000488B45D8488945F04C8B6DF04C896DE0498B4500488B4058FFD0488B7DE04889C1488B45E8488908E8D91A00004883C428415D5DC390554889E541554883EC38488975C0488B3F48897DC8E8BC1A0000488B75C0488B45C8488945F0488B45F0488945D0488B3E48897DD8E89C1A0000488B7DD0488B45D8488945E84C8B6DE84C896DE0498B4500488B4060FFD0488B7DE0E86F1A00004883C438415D5DC30F1F8000000000554889E54883EC304C89EF4883C71031C089C1488D75E8488975D8BA20000000E81D1A0000498B7D1048897DE0E8341A0000488B7DD8E8131A0000488B45E04883C4305DC366662E0F1F840000000000554889E54883EC3048897DE0E8051A00004C89EF4883C71031C089C1488D75E8488975D8BA21000000E8C4190000488B45E0498B7D1049894510E8D1190000488B7DD8E8B6190000488B7DE0E8BF1900004883C4305DC3660F1F840000000000554889E54883EC104C896DF04889FE488B7DF04883C71048897DF831C089C1BA21000000E869190000488B55F8488D050C0000004883C4105DC3660F1F440000554889E54883EC1048897DF84088F0A801750B488B7DF8E842190000EB09488B7DF8E8371900004883C4105DC30F1F00554889E54883EC104C896DF048C745F8000000004C896DF8498B7D10E81F190000488B45F04883C4105DC30F1F440000554889E54883EC1048C745F8000000004C896DF8E8B7FFFFFF4889C7BE18000000BA07000000E8CD1800004883C4105DC36666666666662E0F1F840000000000554889E54155504C89EFBE18000000BA07000000E8931800004989C5E80F0000004883C408415D5DC30F1F8000000000554889E541554883EC184C896DE848C745F0000000004C896DF031C089C7E8AD0200004989C5E8350000004889C1488B45E8488948104883C418415D5DC36690554889E5488D3D95320000E88A17000031C989CA5DC390909090909090909090554889E54155504C89EFBE10000000BA07000000E8031800004989C5E80F0000004883C408415D5DC30F1F8000000000554889E54C89E848C745F800000000488945F85DC366662E0F1F840000000000554889E548C745F8000000004C896DF85DC366666666662E0F1F840000000000554889E54C89E848C745F800000000488945F85DC366662E0F1F840000000000554889E54883EC1048C745F8000000004C896DF8E8C7FFFFFF4889C7BE10000000BA07000000E86D1700004883C4105DC36666666666662E0F1F840000000000554889E54155504C89EFBE10000000BA07000000E8331700004989C5E80F0000004883C408415D5DC30F1F8000000000554889E54C89E848C745F800000000488945F85DC366662E0F1F840000000000554889E548C745F8000000004C896DF85DC366666666662E0F1F840000000000554889E54C89E848C745F800000000488945F85DC366662E0F1F840000000000554889E54883EC1048C745F8000000004C896DF8E8C7FFFFFF4889C7BE10000000BA07000000E89D1600004883C4105DC36666666666662E0F1F840000000000554889E54155504C89EFBE10000000BA07000000E8631600004989C5E80F0000004883C408415D5DC30F1F8000000000554889E54C89E848C745F800000000488945F85DC366662E0F1F840000000000554889E548C745F8000000004C896DF85DC366666666662E0F1F840000000000554889E54C89E848C745F800000000488945F85DC366662E0F1F840000000000554889E54883EC1048C745F8000000004C896DF8E8C7FFFFFF4889C7BE10000000BA07000000E8CD1500004883C4105DC36666666666662E0F1F840000000000554889E5488D3DBD300000E8FA14000031C989CA5DC3662E0F1F840000000000554889E5488D3D3D310000E8DA14000031C989CA5DC3662E0F1F840000000000554889E5488D3DBD310000E8BA14000031C989CA5DC390909090909090909090554889E54157415641554154534883EC484C894DA04C8945A848894DB0488955B84989F68B4F2089C8C1E81883E00148C1E004488D14074881C2C00000004889559848897DC84801F8C1E91783E1084889CA48894D904C8BBC01C0000000488D8680000000488945D031C0488945C04531ED66666666662E0F1F8400000000004D89FC4983E4037427498D4424FF4883F8010F861101000041F6C5017424E9B9000000666666662E0F1F8400000000004C89F7E8A80B000041F6C5010F859A000000488B4DB848C7411800000000488B45A048894120488B45B048894108488B45A848890131C031D231C931DBF0490FC74E50EB2166662E0F1F8400000000004881E1FFF3FFFF418856214889C3F0490FC74E507432F7C20002000075224889D1F7C20004000075D74881E1FFF7FFFFEBD966666666662E0F1F8400000000004C89F7E808050000488B7DD0E88F1200004C89F7E8B708000041B50131C031D231C931DBF0490FC74E500FB6DA483B5DC07610488B7DC84889DEE87106000048895DC04C89F84883E0FC498946104C89F8488B4D90488B5598F04C0FB1340A74614989C7E9D7FEFFFF488B7DC8E85E0A000041F6C501746D31C031D231C931DBF0490FC74E50EB130F1F8400000000004889C3F0490FC74E507439F7C20002000075294889D14881C900080000F7C20004000074DB4881E1FFFBFFFF41885621EBCEE8A90700004531E4EB194C89F7E8AC0200004C89F7E8C4070000488B7DD0E86B1100004C89E04883C4485B415C415D415E415F5DC3660F1F840000000000480FBAED3C554156488D6C24084883EC0841574154534883EC184989CF4989D44889F34989FDE835070000488D0DBE000000488948384C8978404889DF4889C64C89FA4D89E74C89E14D89F04D89E9E86CFDFFFF4883F801741C4883F80274714883C4185B415C415F4883C4105D480FBAF53CC208008B432089C1C1E91883E10148C1E1044801D9C1E81783E008488D3C01488B9408C8000000488B42F80FB67050488D0C3E4881C1D800000048F7D64821CE4C89EFFF50104C89F84883C4185B415C415F4883C4105D480FBAF53CFFE0488D35FE13000031FF31C0E86F0600006666666666662E0F1F840000000000480FBAED3C554156488D6C2408504C89F04D8B364883C4105D480FBAF53CFF60086666666666662E0F1F840000000000480FBAED3C554156488D6C24084883EC0841574154534883EC184989CF4989D44889F34989FDE815060000488D0DDE000000488948384C8978404889DF4889C64C89FA4D89E74C89E14D89F04D89E9E84CFCFFFF4883F80274524883F8010F85880000008B432089C1C1E91883E10148C1E1044801D9C1E81783E008488D3C01488B9408C8000000488B42F80FB67050488D0C3E4881C1D800000048F7D64821CE4C89EFFF50104531EDEB288B432089C1C1E91883E10148C1E1044801D9C1E81783E0084C8BAC08D00000004C89EFE8301100004C89F84883C4185B415C415F4883C4105D480FBAF53CFFE04883C4185B415C415F4883C4105D480FBAF53CC2080066666666662E0F1F840000000000480FBAED3C554156488D6C240850498B06498B4E084D8B6E184989C64883C4105D480FBAF53CFFE10F1F840000000000554889E54983F921B8200000004C0F42C85DFF64240890909090909090909090554889E54157415641554154534883EC284989FF31C031D231C931DBF0480FC74F504989C54989D631F6488945C0488955C84C8D65C041F7C6000200007430904889F3666666662E0F1F8400000000004C89FF4C89E6E8550300004C8B75C841F7C60002000075E84C8B6DC04889DE4885F6740C4C896E18EB41660F1F440000BF20000000E8420F00004889C348C70001000000488D780848897DB831F6E8BD0B000048C74310C00000004C896B18488B7DB8E8C80B00004889DE488D5E104981CE00020000488B45C0488B55C84C89F1F0490FC74F5074204989C54989D6488945C0488955C841F7C6000200000F854CFFFFFFE976FFFFFF488B45C84889C14881C90008000048894DC8A900040000740F4881E1FFFBFFFF48894DC8418847214989F6488B5DC0498B4750498B5758F0490FC74F5075F8488D3D692E0000E83C0B0000498D5E084889DFE8400B0000498B064883F80175124889DFE80F0B00004C89F7E85D0E0000EB0648FFC8498906488D3D302E00004883C4285B415C415D415E415F5DE9050B00000F1F440000554889E54157415641554154534883EC284989FF31C031D231C931DBF0480FC74F504989C54989D631F6488945C0488955C84C8D65C041F7C6000200007430904889F3666666662E0F1F8400000000004C89FF4C89E6E8C50100004C8B75C841F7C60002000075E84C8B6DC04889DE4885F6740C4C896E18EB41660F1F440000BF20000000E8B20D00004889C348C70001000000488D780848897DB831F6E82D0A000048C74310C00000004C896B18488B7DB8E8380A00004889DE488D5E104981CE00020000488B45C0488B55C84C89F1F0490FC74F5074204989C54989D6488945C0488955C841F7C6000200000F854CFFFFFFE976FFFFFF488B45C84889C14881E1FFF7FFFF48894DC8A90004000074124889C14881E1FFF3FFFF48894DC8418847214989F6488B5DC0498B4750498B5758666666662E0F1F840000000000F0490FC74F5075F8488D3DC92C0000E89C090000498D5E084889DFE8A0090000498B064883F80175124889DFE86F0900004C89F7E8BD0C0000EB0648FFC8498906488D3D902C00004883C4285B415C415D415E415F5DE9650900000F1F440000554889E54156534889F34989FE48833D5B2C0000FF7518488B054A2C00004885C074284C89F74889DE5B415E5DFFE0488D3D3A2C0000488D352B2C0000488D150C000000E8650C0000EBCCE8580C0000554889E553504889FB488D35F60E000048C7C7FEFFFFFFE8480C00004889034883C4085B5DC3662E0F1F840000000000554889E54157415641554154534883EC184989F64989FF4C8D25DA2B000048897DD0EB466666662E0F1F84000000000048FFC8488B4DC84889014D89EC4C8B7DD04C89EFE89708000031C031D231C931DBF0490FC74F5049890649895608F7C2000200000F84A10000004C89E7E85E08000031C031D231C931DBF0490FC74F5049890649895608F7C20002000074624889C34885C0745A4989DF488D43F0488945C848FF43F04C89E7E8320800004883C3F84889DFE8160800004889DFE81E0800004D89E54C89E7E803080000498B47F04883F8010F8555FFFFFF4889DFE8DD070000488B7DC8E82A0B0000E949FFFFFF488D3D002B00004883C4185B415C415D415E415F5DE9D50700004883C4185B415C415D415E415F5DC3909090909090554889E5E8FF0A000090909090909090554889E5BF670000005DE9370B000090554889E55350BF67000000E8260B00004889C3BF6700000031F6E8770B00004889D84883C4085B5DC30F1F8000000000554889E553504889FBBF68000000E8F30A0000488D78184889DE4883C4085B5DE91B01000066662E0F1F840000000000554889E54157415653504889FBBF68000000E8BF0A00004989C6488D3D3F2A0000488D35A800000031D2E82B0B0000803D322A00000075404D8B7E1848833D342A0000FF753D488B05232A00004885C074094C89FFFFD084C0740B498B7E18E8080B0000EB04498B46184889432841C646180041C64620004883C4085B415E415F5DC3488D3DEE290000488D35DF290000488D1538010000E8F1090000EBA790554889E5488D3DB5290000488D351E00000031D2E8A10A00000FB605A82900005DC366666666662E0F1F840000000000554889E54883EC20488D7DE8E8A109000048837DE80C0F94C048837DF0000F99C10F9EC220C120D1880D6A2900004883C4205DC36666662E0F1F840000000000554889E54157415653504989F64889FB488D3D39290000488D35A2FFFFFF31D2E8250A0000803D2C29000000740B4883C4085B415E415F5DC34D8B7E2848833D23290000FF7557488B05122900004885C074094C89FFFFD084C0740B498B7E28E8F7090000EB04498B462849C74628FFFFFFFF807B0800741C488D48014883F90272AB4889C74883C4085B415E415F5DE9FB080000C6430801488903EB90488D3DC3280000488D35B4280000488D150D000000E8C6080000EB8D660F1F440000554889E553504889FB488D356A0B000048C7C7FEFFFFFFE8A80800004889034883C4085B5DC390909090909090909090554889E553504889FB48833D77280000FF751E488B05662800004885C0740B4889DF4883C4085B5DFFE04883C4085B5DC3488D3D50280000488D3541280000488D155A000000E843080000EBC60F1F00554889E553504889FB48833D37280000FF751E488B05262800004885C0740B4889DF4883C4085B5DFFE04883C4085B5DC3488D3D10280000488D3501280000488D153A000000E8F3070000EBC60F1F00554889E553504889FB488D35BD0A000048C7C7FEFFFFFFE8D80700004889034883C4085B5DC3662E0F1F840000000000554889E553504889FB488D359C0A000048C7C7FEFFFFFFE8A80700004889034883C4085B5DC390909090909090909090554889E5535031F6E8B707000085C075074883C4085B5DC389C389C7E81F000000488D35630A0000488D157D0A000031FF4889C14189D831C0E842FCFFFF6690FFCF83FF22771D554889E5488D054200000048630CB84801C15DFFE1488D05E40C0000C3488D05FE0C0000C3488D05DA0C0000C3488D05DA0C0000C3488D05E00C0000C3488D05B50C0000C3488D05C90C0000C3C8FFFFFFD0FFFFFFD0FFFFFFD0FFFFFFD0FFFFFFD0FFFFFFD0FFFFFFD0FFFFFFD0FFFFFFD0FFFFFFD8FFFFFFE0FFFFFFD0FFFFFFD0FFFFFFD0FFFFFFE8FFFFFFD0FFFFFFD0FFFFFFD0FFFFFFD0FFFFFFD0FFFFFFF0FFFFFFD0FFFFFFD0FFFFFFD0FFFFFFD0FFFFFFD0FFFFFFD0FFFFFFD0FFFFFFD0FFFFFFD0FFFFFFD0FFFFFFD0FFFFFFD0FFFFFFF8FFFFFF554889E55350E89306000085C075074883C4085B5DC389C389C7E801FFFFFF488D3545090000488D158609000031FF4889C14189D831C0E824FBFFFF0F1F4000554889E55350E85F06000085C075074883C4085B5DC389C389C7E8C1FEFFFF488D3505090000488D156709000031FF4889C14189D831C0E8E4FAFFFF0F1F4000554889E55350E80D06000085C075074883C4085B5DC389C389C7E881FEFFFF488D35C5080000488D154709000031FF4889C14189D831C0E8A4FAFFFF0F1F4000554889E55350E8E505000085C075074883C4085B5DC389C389C7E841FEFFFF488D3585080000488D152A09000031FF4889C14189D831C0E864FAFFFF0F1F4000554889E541574156534883EC184189F74889FB488D7DD8E8C405000085C07539410FB6F7488D7DD8E8B905000085C07542488D75D84889DFE88505000085C07559488D7DD8E89005000085C075654883C4185B415E415F5DC34189C689C7E8BDFDFFFF488D3501080000488D15CC080000EB184189C689C7E8A3FDFFFF488D35E7070000488D15D008000031FF4889C14589F031C0E8C6F9FFFF89C389C7E87DFDFFFF488D35C1070000488D15D1080000EB1789C389C7E864FDFFFF488D35A8070000488D15DA08000031FF4889C14189D831C0E887F9FFFF0F1F8000000000554889E55350E8D104000085C075074883C4085B5DC389C389C7E821FDFFFF488D3565070000488D15B808000031FF4889C14189D831C0E844F9FFFF0F1F4000554889E55350E89D04000085C075074883C4085B5DC389C389C7E8E1FCFFFF488D3525070000488D159608000031FF4889C14189D831C0E804F9FFFF0F1F4000554889E55350E86904000085C075074883C4085B5DC389C389C7E8A1FCFFFF488D35E5060000488D157108000031FF4889C14189D831C0E8C4F8FFFF0F1F4000554889E55350E82304000089C3A9EFFFFFFF750C85DB0F94C04883C4085B5DC389DFE859FCFFFF488D359D060000488D154608000031FF4889C14189D831C0E87CF8FFFF6666662E0F1F840000000000554889E5C707000000005DC30F1F4000554889E55DC3662E0F1F840000000000554889E55DE96C030000660F1F440000554889E55DE968030000660F1F440000554889E55DE952030000660F1F440000554889E5535031F6E8A503000085C075074883C4085B5DC389C389C7E8BFFBFFFF488D3503060000488D15CA07000031FF4889C14189D831C0E8E2F7FFFF6690554889E55350E86103000085C075074883C4085B5DC389C389C7E881FBFFFF488D35C5050000488D15B207000031FF4889C14189D831C0E8A4F7FFFF0F1F4000554889E55350E82D03000085C075074883C4085B5DC389C389C7E841FBFFFF488D3585050000488D159207000031FF4889C14189D831C0E864F7FFFF0F1F4000554889E55350E8F302000089C3A9EFFFFFFF750C85DB0F94C04883C4085B5DC389DFE8F9FAFFFF488D353D050000488D156907000031FF4889C14189D831C0E81CF7FFFF6666662E0F1F840000000000554889E55350E8B502000085C075074883C4085B5DC389C389C7E8B1FAFFFF488D35F5040000488D154307000031FF4889C14189D831C0E8D4F6FFFF0F1F4000554889E55350E86902000089C3A9EFFFFFFF750C85DB0F94C04883C4085B5DC389DFE869FAFFFF488D35AD040000488D151A07000031FF4889C14189D831C0E88CF6FFFF6666662E0F1F840000000000554889E55350E81F02000085C075074883C4085B5DC389C389C7E821FAFFFF488D3565040000488D15F406000031FF4889C14189D831C0E844F6FFFF0F1F4000554889E55350E8DF01000085C075074883C4085B5DC389C389C7E8E1F9FFFF488D3525040000488D15B406000031FF4889C14189D831C0E804F6FFFF90909090554889E553504889FB48833D17210000FF751E488B05062100004885C0740B4889DF4883C4085B5DFFE04883C4085B5DC3488D3DF0200000488D35E1200000488D155A000000E8C3000000EBC60F1F00554889E553504889FB48833DD7200000FF751E488B05C62000004885C0740B4889DF4883C4085B5DFFE04883C4085B5DC3488D3DB0200000488D35A1200000488D153A000000E873000000EBC60F1F00554889E553504889FB488D354306000048C7C7FEFFFFFFE8580000004889034883C4085B5DC3662E0F1F840000000000554889E553504889FB488D353606000048C7C7FEFFFFFFE8280000004889034883C4085B5DC3
+      - sectname:        __stubs
+        segname:         __TEXT
+        addr:            0x35B6
+        size:            252
+        offset:          0x35B6
+        align:           1
+        reloff:          0x0
+        nreloc:          0
+        flags:           0x80000408
+        reserved1:       0x0
+        reserved2:       0x6
+        reserved3:       0x0
+        content:         FF254C0A0000FF254E0A0000FF25500A0000FF25520A0000FF25540A0000FF25560A0000FF25580A0000FF255A0A0000FF255C0A0000FF255E0A0000FF25600A0000FF25620A0000FF25640A0000FF25660A0000FF25680A0000FF256A0A0000FF256C0A0000FF256E0A0000FF25700A0000FF25720A0000FF25740A0000FF25760A0000FF25780A0000FF257A0A0000FF257C0A0000FF257E0A0000FF25800A0000FF25820A0000FF25840A0000FF25860A0000FF25880A0000FF258A0A0000FF258C0A0000FF258E0A0000FF25900A0000FF25920A0000FF25940A0000FF25960A0000FF25980A0000FF259A0A0000FF259C0A0000FF259E0A0000
+      - sectname:        __const
+        segname:         __TEXT
+        addr:            0x36C0
+        size:            190
+        offset:          0x36C0
+        align:           4
+        reloff:          0x0
+        nreloc:          0
+        flags:           0x0
+        reserved1:       0x0
+        reserved2:       0x0
+        reserved3:       0x0
+        content:         4028232950524F4752414D3A53756767657374696F6E734B6974202050524F4A4543543A53756767657374696F6E734B69742D310A000000000000000000F03F100000000000000053756767657374696F6E734B697400000000000000000000547261696C53756767657374696F6E7300000300000000000000000000000000417661696C61626C655365727669636573000000000000000000000000000000536572766963655265717565737465720053657276696365526174657200
+      - sectname:        __cstring
+        segname:         __TEXT
+        addr:            0x3780
+        size:            1144
+        offset:          0x3780
+        align:           4
+        reloff:          0x0
+        nreloc:          0
+        flags:           0x2
+        reserved1:       0x0
+        reserved2:       0x0
+        reserved3:       0x0
+        content:         5F547443313453756767657374696F6E734B69743136547261696C53756767657374696F6E7300616374697665536572766963657300000000000000000000005F5474433137417661696C61626C6553657276696365733137417661696C61626C6553657276696365730000000000005F5474433137417661696C61626C655365727669636573313653657276696365526571756573746572000000000000005F5474433137417661696C61626C655365727669636573313253657276696365526174657200667574757265207265706F7274656420616E206572726F722C2062757420776169742063616E6E6F74207468726F770073776966745F7461736B5F657363616C617465005F5A3139766F75636865725F6E656564735F61646F70745039766F75636865725F73005F5F7473616E5F61637175697265005F5F7473616E5F72656C656173650027257327206661696C65642077697468206572726F722027257327282564290A00707468726561645F636F6E645F696E69742826636F6E646974696F6E2C206E756C6C7074722900707468726561645F636F6E645F64657374726F792826636F6E646974696F6E2900707468726561645F636F6E645F7369676E616C2826636F6E646974696F6E2900707468726561645F636F6E645F62726F6164636173742826636F6E646974696F6E2900707468726561645F636F6E645F776169742826636F6E646974696F6E2C20266D757465782900707468726561645F6D75746578617474725F696E69742826617474722900707468726561645F6D75746578617474725F736574747970652826617474722C206B696E642900707468726561645F6D757465785F696E697428266D757465782C2026617474722900707468726561645F6D75746578617474725F64657374726F792826617474722900707468726561645F6D757465785F64657374726F7928266D757465782900707468726561645F6D757465785F6C6F636B28266D757465782900707468726561645F6D757465785F756E6C6F636B28266D757465782900707468726561645F6D757465785F7472796C6F636B28266D757465782900707468726561645F72776C6F636B5F696E6974282672776C6F636B2C206E756C6C7074722900707468726561645F72776C6F636B5F64657374726F79282672776C6F636B2900707468726561645F72776C6F636B5F72646C6F636B282672776C6F636B2900707468726561645F72776C6F636B5F74727972646C6F636B282672776C6F636B2900707468726561645F72776C6F636B5F77726C6F636B282672776C6F636B2900707468726561645F72776C6F636B5F74727977726C6F636B282672776C6F636B2900707468726561645F72776C6F636B5F756E6C6F636B282672776C6F636B290045494E56414C00455045524D0045444541444C4B00454E4F4D454D0045414741494E004542555359003C756E6B6E6F776E3E0073776966745F7461736B5F656E7465725468726561644C6F63616C436F6E746578740073776966745F7461736B5F657869745468726561644C6F63616C436F6E7465787400
+      - sectname:        __constg_swiftt
+        segname:         __TEXT
+        addr:            0x3BF8
+        size:            312
+        offset:          0x3BF8
+        align:           2
+        reloff:          0x0
+        nreloc:          0
+        flags:           0x0
+        reserved1:       0x0
+        reserved2:       0x0
+        reserved3:       0x0
+        content:         000000000000000008FBFFFF50000080F0FFFFFF14FBFFFF30E2FFFF4401000000000000030000000F00000005000000010000000A0000000B000000040000001200000004E0FFFF130000004CE0FFFF14000000A4E0FFFF010000007CE1FFFF0000000000000000E0FAFFFF50000080F0FFFFFFD4FAFFFF60E4FFFF0001000000000000030000000C00000002000000000000000A0000000A0000000200000001000000C4E1FFFF100000000CE2FFFF50000080ACFFFFFFB0FAFFFF3CE4FFFFCC00000000000000030000000C00000002000000000000000A0000000A000000020000000100000050E2FFFF1000000098E2FFFF5000008068FFFFFF7DFAFFFF18E4FFFF9800000000000000030000000C00000002000000000000000A0000000A0000000200000001000000DCE2FFFF1000000024E3FFFF
+      - sectname:        __swift5_typeref
+        segname:         __TEXT
+        addr:            0x3D30
+        size:            24
+        offset:          0x3D30
+        align:           1
+        reloff:          0x0
+        nreloc:          0
+        flags:           0x0
+        reserved1:       0x0
+        reserved2:       0x0
+        reserved3:       0x0
+        content:         01D3FEFFFF0002C902000000016BFFFFFF0001A9FFFFFF00
+      - sectname:        __swift5_reflstr
+        segname:         __TEXT
+        addr:            0x3D48
+        size:            15
+        offset:          0x3D48
+        align:           0
+        reloff:          0x0
+        nreloc:          0
+        flags:           0x0
+        reserved1:       0x0
+        reserved2:       0x0
+        reserved3:       0x0
+        content:         '616374697665536572766963657300'
+      - sectname:        __swift5_fieldmd
+        segname:         __TEXT
+        addr:            0x3D58
+        size:            76
+        offset:          0x3D58
+        align:           2
+        reloff:          0x0
+        nreloc:          0
+        flags:           0x0
+        reserved1:       0x0
+        reserved2:       0x0
+        reserved3:       0x0
+        content:         D8FFFFFF0000000001000C000100000002000000CAFFFFFFD8FFFFFFC2FFFFFF0000000001000C0000000000B8FFFFFF0000000001000C0000000000AEFFFFFF0000000001000C0000000000
+      - sectname:        __swift5_types
+        segname:         __TEXT
+        addr:            0x3DA4
+        size:            16
+        offset:          0x3DA4
+        align:           2
+        reloff:          0x0
+        nreloc:          0
+        flags:           0x0
+        reserved1:       0x0
+        reserved2:       0x0
+        reserved3:       0x0
+        content:         60FEFFFFBCFEFFFFFCFEFFFF3CFFFFFF
+      - sectname:        __unwind_info
+        segname:         __TEXT
+        addr:            0x3DB4
+        size:            224
+        offset:          0x3DB4
+        align:           2
+        reloff:          0x0
+        nreloc:          0
+        flags:           0x0
+        reserved1:       0x0
+        reserved2:       0x0
+        reserved3:       0x0
+        content:         010000001C000000050000003000000000000000300000000200000000000001010001010300010161010301D1580501301B00004800000048000000B73500000000000048000000030000000C0020008C000300000000003000000210010000A00200021003000030030002600300000004000230040000D00400020005000000060004400800073009000060090006700A0000C00A0004F00D0005400E0001700E0004900F0000B00F000110100003B010000020110003E0110001501300003014000130150003101600012017000070170001210002018800000460000004
+      - sectname:        __eh_frame
+        segname:         __TEXT
+        addr:            0x3E98
+        size:            320
+        offset:          0x3E98
+        align:           3
+        reloff:          0x0
+        nreloc:          0
+        flags:           0x0
+        reserved1:       0x0
+        reserved2:       0x0
+        reserved3:       0x0
+        content:         1400000000000000017A520001781001100C0708900100001400000000000000017A520001781001100C0708900100001400000000000000017A520001781001100C0708900100001400000000000000017A520001781001100C070890010000240000001C00000070E4FFFFFFFFFFFFE10000000000000000460E1086024B0D064983078C068F05240000004400000068E5FFFFFFFFFFFF020100000000000000460E1086024B0D064983078C068F051400000000000000017A520001781001100C0708900100001400000000000000017A520001781001100C0708900100001400000000000000017A520001781001100C0708900100001400000000000000017A520001781001100C0708900100001400000000000000017A520001781001100C0708900100001400000000000000017A520001781001100C070890010000
+      - sectname:        __objc_classname
+        segname:         __TEXT
+        addr:            0x3FD8
+        size:            29
+        offset:          0x3FD8
+        align:           0
+        reloff:          0x0
+        nreloc:          0
+        flags:           0x2
+        reserved1:       0x0
+        reserved2:       0x0
+        reserved3:       0x0
+        content:         506F646361737453756767657374696F6E0053756767657374696F6E00
+  - cmd:             LC_SEGMENT_64
+    cmdsize:         472
+    segname:         __DATA_CONST
+    vmaddr:          16384
+    vmsize:          4096
+    fileoff:         16384
+    filesize:        4096
+    maxprot:         3
+    initprot:        3
+    nsects:          5
+    flags:           0
+    Sections:
+      - sectname:        __got
+        segname:         __DATA_CONST
+        addr:            0x4000
+        size:            344
+        offset:          0x4000
+        align:           3
+        reloff:          0x0
+        nreloc:          0
+        flags:           0x6
+        reserved1:       0x2A
+        reserved2:       0x0
+        reserved3:       0x0
+        content:         643C00000000100000000000000010800100000000001080020000000000108003000000000010800400000000001080050000000000108006000000000010800700000000001080080000000000108009000000000010800A000000000010800B000000000010800C000000000010800D000000000010800E000000000010800F0000000000108010000000000010801100000000001080120000000000108013000000000010801400000000001080150000000000108016000000000010801700000000001080180000000000108019000000000010801A000000000010801B000000000010801C000000000010801D000000000010801E000000000010801F00000000001080200000000000108021000000000010802200000000001080230000000000108024000000000010802500000000001080260000000000108027000000000010802800000000001080290000000000A080
+      - sectname:        __const
+        segname:         __DATA_CONST
+        addr:            0x4158
+        size:            144
+        offset:          0x4158
+        align:           3
+        reloff:          0x0
+        nreloc:          0
+        flags:           0x0
+        reserved1:       0x0
+        reserved2:       0x0
+        reserved3:       0x0
+        content:         00004002DCFAFFFF20DAFFFF6CDAFFFF0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000385300000000800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003853000000001000
+      - sectname:        __objc_classlist
+        segname:         __DATA_CONST
+        addr:            0x41E8
+        size:            48
+        offset:          0x41E8
+        align:           3
+        reloff:          0x0
+        nreloc:          0
+        flags:           0x10000000
+        reserved1:       0x0
+        reserved2:       0x0
+        reserved3:       0x0
+        content:         28500000000010007850000000001000E05000000000100098510000000010003852000000001000D852000000005000
+      - sectname:        __objc_imageinfo
+        segname:         __DATA_CONST
+        addr:            0x4218
+        size:            8
+        offset:          0x4218
+        align:           2
+        reloff:          0x0
+        nreloc:          0
+        flags:           0x0
+        reserved1:       0x0
+        reserved2:       0x0
+        reserved3:       0x0
+        content:         0000000040070B05
+      - sectname:        __objc_const
+        segname:         __DATA_CONST
+        addr:            0x4220
+        size:            904
+        offset:          0x4220
+        align:           3
+        reloff:          0x0
+        nreloc:          0
+        flags:           0x0
+        reserved1:       0x0
+        reserved2:       0x0
+        reserved3:       0x0
+        content:         810000002800000028000000000000000000000000000000D83F00000000900000000000000000000000000000000000000000000000000000000000000000000000000000000000800000000800000008000000000000000000000000000000D83F00000000900000000000000000000000000000000000000000000000000000000000000000000000000000000000810000002800000028000000000000000000000000000000EA3F00000000900000000000000000000000000000000000000000000000000000000000000000000000000000000000800000000800000008000000000000000000000000000000EA3F0000000090000000000000000000000000000000000000000000000000000000000000000000000000000000000081000000280000002800000000000000000000000000000080370000000070000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000010000000037000000001000A737000000001000EC370000000050000300000008000000800000001000000018000000000000000000000000000000803700000000300000000000000000000000000000000000884300000000600000000000000000000000000000000000810000002800000028000000000000000000000000000000C03700000000900000000000000000000000000000000000000000000000000000000000000000000000000000000000800000001000000010000000000000000000000000000000C03700000000900000000000000000000000000000000000000000000000000000000000000000000000000000000000810000002800000028000000000000000000000000000000F03700000000900000000000000000000000000000000000000000000000000000000000000000000000000000000000800000001000000010000000000000000000000000000000F03700000000900000000000000000000000000000000000000000000000000000000000000000000000000000000000810000002800000028000000000000000000000000000000203800000000900000000000000000000000000000000000000000000000000000000000000000000000000000000000800000001000000010000000000000000000000000000000203800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+  - cmd:             LC_SEGMENT_64
+    cmdsize:         552
+    segname:         __DATA
+    vmaddr:          20480
+    vmsize:          4096
+    fileoff:         20480
+    filesize:        4096
+    maxprot:         3
+    initprot:        3
+    nsects:          6
+    flags:           0
+    Sections:
+      - sectname:        __objc_data
+        segname:         __DATA
+        addr:            0x5000
+        size:            160
+        offset:          0x5000
+        align:           3
+        reloff:          0x0
+        nreloc:          0
+        flags:           0x0
+        reserved1:       0x0
+        reserved2:       0x0
+        reserved3:       0x0
+        content:         2B0000000000108050500000000010002A0000000000208000000000000000002042000000001000005000000000100078500000000010002A00000000002080000000000000000068420000000010002B000000000010802B000000000010802A000000000020800000000000000000B04200000000100050500000000010002C000000000010802A000000000020800000000000000000F842000000001000
+      - sectname:        __data
+        segname:         __DATA
+        addr:            0x50A0
+        size:            665
+        offset:          0x50A0
+        align:           3
+        reloff:          0x0
+        nreloc:          0
+        flags:           0x0
+        reserved1:       0x0
+        reserved2:       0x0
+        reserved3:       0x0
+        content:         2D000000000010802D000000000010802A00000000002080000000000000000040430000000020000000000000000000901D0000000010002E00000000001080A0500000000010002F000000000010802A000000000020800000000000000000B243000000004000020000000000000018000000070000009000000018000000043C00000000300000000000000000001000000000000000401C000000001000901C000000001000F01C000000001000D01D0000000010002D000000000010802D000000000010802A000000000020800000000000000000F8430000000020000000000000000000F01E0000000010002E0000000000108058510000000010002F000000000010802A0000000000208000000000000000004244000000004000020000000000000010000000070000007800000018000000643C0000000020000000000000000000601E000000001000B01E0000000010002D000000000010802D000000000010802A00000000002080000000000000000088440000000020000000000000000000C01F0000000010002E00000000001080F8510000000010002F000000000010802A000000000020800000000000000000D244000000004000020000000000000010000000070000007800000018000000A83C0000000020000000000000000000301F000000001000801F0000000010002D000000000010802D000000000010802A0000000000208000000000000000001845000000002000000000000000000090200000000010002E0000000000108098520000000010002F000000000010802A0000000000208000000000000000006245000000004000020000000000000010000000070000007800000018000000EC3C00000000200000000000000000000020000000001000502000000000800000
+      - sectname:        __s_async_hook
+        segname:         __DATA
+        addr:            0x5340
+        size:            400
+        offset:          0x5340
+        align:           3
+        reloff:          0x0
+        nreloc:          0
+        flags:           0x0
+        reserved1:       0x0
+        reserved2:       0x0
+        reserved3:       0x0
+        content:         000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000D0250000000010007023000000001000902400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+      - sectname:        __swift56_hooks
+        segname:         __DATA
+        addr:            0x54D0
+        size:            176
+        offset:          0x54D0
+        align:           3
+        reloff:          0x0
+        nreloc:          0
+        flags:           0x0
+        reserved1:       0x0
+        reserved2:       0x0
+        reserved3:       0x0
+        content:         '0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000'
+      - sectname:        __common
+        segname:         __DATA
+        addr:            0x5580
+        size:            8
+        offset:          0x0
+        align:           3
+        reloff:          0x0
+        nreloc:          0
+        flags:           0x1
+        reserved1:       0x0
+        reserved2:       0x0
+        reserved3:       0x0
+      - sectname:        __bss
+        segname:         __DATA
+        addr:            0x5588
+        size:            120
+        offset:          0x0
+        align:           3
+        reloff:          0x0
+        nreloc:          0
+        flags:           0x1
+        reserved1:       0x0
+        reserved2:       0x0
+        reserved3:       0x0
+  - cmd:             LC_SEGMENT_64
+    cmdsize:         72
+    segname:         __LINKEDIT
+    vmaddr:          24576
+    vmsize:          32768
+    fileoff:         24576
+    filesize:        29912
+    maxprot:         1
+    initprot:        1
+    nsects:          0
+    flags:           0
+  - cmd:             LC_ID_DYLIB
+    cmdsize:         104
+    dylib:
+      name:            24
+      timestamp:       1
+      current_version: 65536
+      compatibility_version: 65536
+    Content:         '/System/Library/Frameworks/SuggestionsKit.framework/Versions/A/SuggestionsKit'
+    ZeroPadBytes:    3
+  - cmd:             LC_DYLD_CHAINED_FIXUPS
+    cmdsize:         16
+    dataoff:         24576
+    datasize:        1288
+  - cmd:             LC_DYLD_EXPORTS_TRIE
+    cmdsize:         16
+    dataoff:         25864
+    datasize:        1176
+  - cmd:             LC_SYMTAB
+    cmdsize:         24
+    symoff:          28832
+    nsyms:           460
+    stroff:          36536
+    strsize:         17952
+  - cmd:             LC_DYSYMTAB
+    cmdsize:         80
+    ilocalsym:       0
+    nlocalsym:       345
+    iextdefsym:      345
+    nextdefsym:      60
+    iundefsym:       405
+    nundefsym:       55
+    tocoff:          0
+    ntoc:            0
+    modtaboff:       0
+    nmodtab:         0
+    extrefsymoff:    0
+    nextrefsyms:     0
+    indirectsymoff:  36192
+    nindirectsyms:   85
+    extreloff:       0
+    nextrel:         0
+    locreloff:       0
+    nlocrel:         0
+  - cmd:             LC_UUID
+    cmdsize:         24
+    uuid:            12258037-7DB8-3F3E-B24D-0CF79DC22D90
+  - cmd:             LC_BUILD_VERSION
+    cmdsize:         32
+    platform:        1
+    minos:           787200
+    sdk:             983040
+    ntools:          1
+    Tools:
+      - tool:            3
+        version:         62456064
+  - cmd:             LC_BUILD_VERSION
+    cmdsize:         32
+    platform:        6
+    minos:           1179648
+    sdk:             1179648
+    ntools:          1
+    Tools:
+      - tool:            3
+        version:         62456064
+  - cmd:             LC_SOURCE_VERSION
+    cmdsize:         16
+    version:         0
+  - cmd:             LC_SEGMENT_SPLIT_INFO
+    cmdsize:         16
+    dataoff:         27040
+    datasize:        1680
+  - cmd:             LC_LOAD_DYLIB
+    cmdsize:         56
+    dylib:
+      name:            24
+      timestamp:       2
+      current_version: 14942208
+      compatibility_version: 65536
+    Content:         '/usr/lib/libobjc.A.dylib'
+    ZeroPadBytes:    8
+  - cmd:             LC_LOAD_DYLIB
+    cmdsize:         56
+    dylib:
+      name:            24
+      timestamp:       2
+      current_version: 88342528
+      compatibility_version: 65536
+    Content:         '/usr/lib/libSystem.B.dylib'
+    ZeroPadBytes:    6
+  - cmd:             LC_LOAD_DYLIB
+    cmdsize:         48
+    dylib:
+      name:            24
+      timestamp:       2
+      current_version: 104897792
+      compatibility_version: 65536
+    Content:         '/usr/lib/libc++.1.dylib'
+    ZeroPadBytes:    1
+  - cmd:             LC_LOAD_DYLIB
+    cmdsize:         64
+    dylib:
+      name:            24
+      timestamp:       2
+      current_version: 330496
+      compatibility_version: 65536
+    Content:         '/usr/lib/swift/libswiftCore.dylib'
+    ZeroPadBytes:    7
+  - cmd:             LC_LOAD_WEAK_DYLIB
+    cmdsize:         72
+    dylib:
+      name:            24
+      timestamp:       2
+      current_version: 7889920
+      compatibility_version: 65536
+    Content:         '/usr/lib/swift/libswiftCoreFoundation.dylib'
+    ZeroPadBytes:    5
+  - cmd:             LC_LOAD_WEAK_DYLIB
+    cmdsize:         64
+    dylib:
+      name:            24
+      timestamp:       2
+      current_version: 0
+      compatibility_version: 65536
+    Content:         '/usr/lib/swift/libswiftDarwin.dylib'
+    ZeroPadBytes:    5
+  - cmd:             LC_LOAD_WEAK_DYLIB
+    cmdsize:         64
+    dylib:
+      name:            24
+      timestamp:       2
+      current_version: 2686976
+      compatibility_version: 65536
+    Content:         '/usr/lib/swift/libswiftDispatch.dylib'
+    ZeroPadBytes:    3
+  - cmd:             LC_LOAD_WEAK_DYLIB
+    cmdsize:         64
+    dylib:
+      name:            24
+      timestamp:       2
+      current_version: 65536
+      compatibility_version: 65536
+    Content:         '/usr/lib/swift/libswiftIOKit.dylib'
+    ZeroPadBytes:    6
+  - cmd:             LC_LOAD_WEAK_DYLIB
+    cmdsize:         64
+    dylib:
+      name:            24
+      timestamp:       2
+      current_version: 524288
+      compatibility_version: 65536
+    Content:         '/usr/lib/swift/libswiftObjectiveC.dylib'
+    ZeroPadBytes:    1
+  - cmd:             LC_LOAD_WEAK_DYLIB
+    cmdsize:         64
+    dylib:
+      name:            24
+      timestamp:       2
+      current_version: 2752512
+      compatibility_version: 65536
+    Content:         '/usr/lib/swift/libswiftXPC.dylib'
+    ZeroPadBytes:    8
+  - cmd:             LC_LOAD_WEAK_DYLIB
+    cmdsize:         64
+    dylib:
+      name:            24
+      timestamp:       2
+      current_version: 65536
+      compatibility_version: 65536
+    Content:         '/usr/lib/swift/libswiftFoundation.dylib'
+    ZeroPadBytes:    1
+  - cmd:             LC_FUNCTION_STARTS
+    cmdsize:         16
+    dataoff:         28720
+    datasize:        104
+  - cmd:             LC_DATA_IN_CODE
+    cmdsize:         16
+    dataoff:         28824
+    datasize:        8
+LinkEditData:
+  ExportTrie:
+    TerminalSize:    0
+    NodeOffset:      0
+    Name:            ''
+    Flags:           0x0
+    Address:         0x0
+    Other:           0x0
+    ImportName:      ''
+    Children:
+      - TerminalSize:    0
+        NodeOffset:      764
+        Name:            _
+        Flags:           0x0
+        Address:         0x0
+        Other:           0x0
+        ImportName:      ''
+        Children:
+          - TerminalSize:    0
+            NodeOffset:      236
+            Name:            '$s1'
+            Flags:           0x0
+            Address:         0x0
+            Other:           0x0
+            ImportName:      ''
+            Children:
+              - TerminalSize:    0
+                NodeOffset:      93
+                Name:            4SuggestionsKit05TrailA0C
+                Flags:           0x0
+                Address:         0x0
+                Other:           0x0
+                ImportName:      ''
+                Children:
+                  - TerminalSize:    0
+                    NodeOffset:      20
+                    Name:            14activeServices09AvailableE0AECv
+                    Flags:           0x0
+                    Address:         0x0
+                    Other:           0x0
+                    ImportName:      ''
+                    Children:
+                      - TerminalSize:    3
+                        NodeOffset:      6
+                        Name:            M
+                        Flags:           0x0
+                        Address:         0x1CF0
+                        Other:           0x0
+                        ImportName:      ''
+                        Children:
+                          - TerminalSize:    3
+                            NodeOffset:      15
+                            Name:            Tq
+                            Flags:           0x0
+                            Address:         0x3C48
+                            Other:           0x0
+                            ImportName:      ''
+                      - TerminalSize:    3
+                        NodeOffset:      34
+                        Name:            g
+                        Flags:           0x0
+                        Address:         0x1C40
+                        Other:           0x0
+                        ImportName:      ''
+                        Children:
+                          - TerminalSize:    3
+                            NodeOffset:      43
+                            Name:            Tq
+                            Flags:           0x0
+                            Address:         0x3C38
+                            Other:           0x0
+                            ImportName:      ''
+                      - TerminalSize:    0
+                        NodeOffset:      54
+                        Name:            p
+                        Flags:           0x0
+                        Address:         0x0
+                        Other:           0x0
+                        ImportName:      ''
+                        Children:
+                          - TerminalSize:    4
+                            NodeOffset:      48
+                            Name:            MV
+                            Flags:           0x0
+                            Address:         0x4158
+                            Other:           0x0
+                            ImportName:      ''
+                          - TerminalSize:    3
+                            NodeOffset:      69
+                            Name:            Wvd
+                            Flags:           0x0
+                            Address:         0x3700
+                            Other:           0x0
+                            ImportName:      ''
+                          - TerminalSize:    3
+                            NodeOffset:      74
+                            Name:            fi
+                            Flags:           0x0
+                            Address:         0x1B60
+                            Other:           0x0
+                            ImportName:      ''
+                      - TerminalSize:    3
+                        NodeOffset:      79
+                        Name:            s
+                        Flags:           0x0
+                        Address:         0x1C90
+                        Other:           0x0
+                        ImportName:      ''
+                        Children:
+                          - TerminalSize:    3
+                            NodeOffset:      88
+                            Name:            Tq
+                            Flags:           0x0
+                            Address:         0x3C40
+                            Other:           0x0
+                            ImportName:      ''
+                  - TerminalSize:    0
+                    NodeOffset:      165
+                    Name:            ACycf
+                    Flags:           0x0
+                    Address:         0x0
+                    Other:           0x0
+                    ImportName:      ''
+                    Children:
+                      - TerminalSize:    3
+                        NodeOffset:      150
+                        Name:            C
+                        Flags:           0x0
+                        Address:         0x1DD0
+                        Other:           0x0
+                        ImportName:      ''
+                        Children:
+                          - TerminalSize:    3
+                            NodeOffset:      160
+                            Name:            Tq
+                            Flags:           0x0
+                            Address:         0x3C50
+                            Other:           0x0
+                            ImportName:      ''
+                      - TerminalSize:    3
+                        NodeOffset:      175
+                        Name:            c
+                        Flags:           0x0
+                        Address:         0x1E00
+                        Other:           0x0
+                        ImportName:      ''
+                  - TerminalSize:    0
+                    NodeOffset:      185
+                    Name:            M
+                    Flags:           0x0
+                    Address:         0x0
+                    Other:           0x0
+                    ImportName:      ''
+                    Children:
+                      - TerminalSize:    3
+                        NodeOffset:      180
+                        Name:            a
+                        Flags:           0x0
+                        Address:         0x1E40
+                        Other:           0x0
+                        ImportName:      ''
+                      - TerminalSize:    4
+                        NodeOffset:      199
+                        Name:            m
+                        Flags:           0x0
+                        Address:         0x50A0
+                        Other:           0x0
+                        ImportName:      ''
+                      - TerminalSize:    3
+                        NodeOffset:      205
+                        Name:            n
+                        Flags:           0x0
+                        Address:         0x3C04
+                        Other:           0x0
+                        ImportName:      ''
+                  - TerminalSize:    4
+                    NodeOffset:      210
+                    Name:            N
+                    Flags:           0x0
+                    Address:         0x50E0
+                    Other:           0x0
+                    ImportName:      ''
+                  - TerminalSize:    0
+                    NodeOffset:      221
+                    Name:            f
+                    Flags:           0x0
+                    Address:         0x0
+                    Other:           0x0
+                    ImportName:      ''
+                    Children:
+                      - TerminalSize:    3
+                        NodeOffset:      216
+                        Name:            D
+                        Flags:           0x0
+                        Address:         0x1D90
+                        Other:           0x0
+                        ImportName:      ''
+                      - TerminalSize:    3
+                        NodeOffset:      231
+                        Name:            d
+                        Flags:           0x0
+                        Address:         0x1D60
+                        Other:           0x0
+                        ImportName:      ''
+              - TerminalSize:    0
+                NodeOffset:      611
+                Name:            7AvailableServices
+                Flags:           0x0
+                Address:         0x0
+                Other:           0x0
+                ImportName:      ''
+                Children:
+                  - TerminalSize:    0
+                    NodeOffset:      430
+                    Name:            '1'
+                    Flags:           0x0
+                    Address:         0x0
+                    Other:           0x0
+                    ImportName:      ''
+                    Children:
+                      - TerminalSize:    0
+                        NodeOffset:      301
+                        Name:            2ServiceRaterC
+                        Flags:           0x0
+                        Address:         0x0
+                        Other:           0x0
+                        ImportName:      ''
+                        Children:
+                          - TerminalSize:    3
+                            NodeOffset:      286
+                            Name:            13publishRatingyyF
+                            Flags:           0x0
+                            Address:         0x2050
+                            Other:           0x0
+                            ImportName:      ''
+                            Children:
+                              - TerminalSize:    3
+                                NodeOffset:      296
+                                Name:            Tq
+                                Flags:           0x0
+                                Address:         0x3D28
+                                Other:           0x0
+                                ImportName:      ''
+                          - TerminalSize:    0
+                            NodeOffset:      359
+                            Name:            ACycf
+                            Flags:           0x0
+                            Address:         0x0
+                            Other:           0x0
+                            ImportName:      ''
+                            Children:
+                              - TerminalSize:    3
+                                NodeOffset:      344
+                                Name:            C
+                                Flags:           0x0
+                                Address:         0x2000
+                                Other:           0x0
+                                ImportName:      ''
+                                Children:
+                                  - TerminalSize:    3
+                                    NodeOffset:      354
+                                    Name:            Tq
+                                    Flags:           0x0
+                                    Address:         0x3D20
+                                    Other:           0x0
+                                    ImportName:      ''
+                              - TerminalSize:    3
+                                NodeOffset:      369
+                                Name:            c
+                                Flags:           0x0
+                                Address:         0x2030
+                                Other:           0x0
+                                ImportName:      ''
+                          - TerminalSize:    0
+                            NodeOffset:      379
+                            Name:            M
+                            Flags:           0x0
+                            Address:         0x0
+                            Other:           0x0
+                            ImportName:      ''
+                            Children:
+                              - TerminalSize:    3
+                                NodeOffset:      374
+                                Name:            a
+                                Flags:           0x0
+                                Address:         0x2110
+                                Other:           0x0
+                                ImportName:      ''
+                              - TerminalSize:    4
+                                NodeOffset:      393
+                                Name:            m
+                                Flags:           0x0
+                                Address:         0x5298
+                                Other:           0x0
+                                ImportName:      ''
+                              - TerminalSize:    3
+                                NodeOffset:      399
+                                Name:            n
+                                Flags:           0x0
+                                Address:         0x3CEC
+                                Other:           0x0
+                                ImportName:      ''
+                          - TerminalSize:    4
+                            NodeOffset:      404
+                            Name:            N
+                            Flags:           0x0
+                            Address:         0x52D8
+                            Other:           0x0
+                            ImportName:      ''
+                          - TerminalSize:    0
+                            NodeOffset:      415
+                            Name:            f
+                            Flags:           0x0
+                            Address:         0x0
+                            Other:           0x0
+                            ImportName:      ''
+                            Children:
+                              - TerminalSize:    3
+                                NodeOffset:      410
+                                Name:            D
+                                Flags:           0x0
+                                Address:         0x2090
+                                Other:           0x0
+                                ImportName:      ''
+                              - TerminalSize:    3
+                                NodeOffset:      425
+                                Name:            d
+                                Flags:           0x0
+                                Address:         0x2070
+                                Other:           0x0
+                                ImportName:      ''
+                      - TerminalSize:    0
+                        NodeOffset:      485
+                        Name:            6ServiceRequesterC
+                        Flags:           0x0
+                        Address:         0x0
+                        Other:           0x0
+                        ImportName:      ''
+                        Children:
+                          - TerminalSize:    3
+                            NodeOffset:      470
+                            Name:            10enterQueueyyF
+                            Flags:           0x0
+                            Address:         0x1F80
+                            Other:           0x0
+                            ImportName:      ''
+                            Children:
+                              - TerminalSize:    3
+                                NodeOffset:      480
+                                Name:            Tq
+                                Flags:           0x0
+                                Address:         0x3CE4
+                                Other:           0x0
+                                ImportName:      ''
+                          - TerminalSize:    0
+                            NodeOffset:      540
+                            Name:            ACycf
+                            Flags:           0x0
+                            Address:         0x0
+                            Other:           0x0
+                            ImportName:      ''
+                            Children:
+                              - TerminalSize:    3
+                                NodeOffset:      525
+                                Name:            C
+                                Flags:           0x0
+                                Address:         0x1F30
+                                Other:           0x0
+                                ImportName:      ''
+                                Children:
+                                  - TerminalSize:    3
+                                    NodeOffset:      535
+                                    Name:            Tq
+                                    Flags:           0x0
+                                    Address:         0x3CDC
+                                    Other:           0x0
+                                    ImportName:      ''
+                              - TerminalSize:    3
+                                NodeOffset:      550
+                                Name:            c
+                                Flags:           0x0
+                                Address:         0x1F60
+                                Other:           0x0
+                                ImportName:      ''
+                          - TerminalSize:    0
+                            NodeOffset:      560
+                            Name:            M
+                            Flags:           0x0
+                            Address:         0x0
+                            Other:           0x0
+                            ImportName:      ''
+                            Children:
+                              - TerminalSize:    3
+                                NodeOffset:      555
+                                Name:            a
+                                Flags:           0x0
+                                Address:         0x20F0
+                                Other:           0x0
+                                ImportName:      ''
+                              - TerminalSize:    4
+                                NodeOffset:      574
+                                Name:            m
+                                Flags:           0x0
+                                Address:         0x51F8
+                                Other:           0x0
+                                ImportName:      ''
+                              - TerminalSize:    3
+                                NodeOffset:      580
+                                Name:            n
+                                Flags:           0x0
+                                Address:         0x3CA8
+                                Other:           0x0
+                                ImportName:      ''
+                          - TerminalSize:    4
+                            NodeOffset:      585
+                            Name:            N
+                            Flags:           0x0
+                            Address:         0x5238
+                            Other:           0x0
+                            ImportName:      ''
+                          - TerminalSize:    0
+                            NodeOffset:      596
+                            Name:            f
+                            Flags:           0x0
+                            Address:         0x0
+                            Other:           0x0
+                            ImportName:      ''
+                            Children:
+                              - TerminalSize:    3
+                                NodeOffset:      591
+                                Name:            D
+                                Flags:           0x0
+                                Address:         0x1FC0
+                                Other:           0x0
+                                ImportName:      ''
+                              - TerminalSize:    3
+                                NodeOffset:      606
+                                Name:            d
+                                Flags:           0x0
+                                Address:         0x1FA0
+                                Other:           0x0
+                                ImportName:      ''
+                  - TerminalSize:    0
+                    NodeOffset:      638
+                    Name:            AAC
+                    Flags:           0x0
+                    Address:         0x0
+                    Other:           0x0
+                    ImportName:      ''
+                    Children:
+                      - TerminalSize:    3
+                        NodeOffset:      623
+                        Name:            10getServiceyyF
+                        Flags:           0x0
+                        Address:         0x1EB0
+                        Other:           0x0
+                        ImportName:      ''
+                        Children:
+                          - TerminalSize:    3
+                            NodeOffset:      633
+                            Name:            Tq
+                            Flags:           0x0
+                            Address:         0x3CA0
+                            Other:           0x0
+                            ImportName:      ''
+                      - TerminalSize:    0
+                        NodeOffset:      693
+                        Name:            ABycf
+                        Flags:           0x0
+                        Address:         0x0
+                        Other:           0x0
+                        ImportName:      ''
+                        Children:
+                          - TerminalSize:    3
+                            NodeOffset:      678
+                            Name:            C
+                            Flags:           0x0
+                            Address:         0x1E60
+                            Other:           0x0
+                            ImportName:      ''
+                            Children:
+                              - TerminalSize:    3
+                                NodeOffset:      688
+                                Name:            Tq
+                                Flags:           0x0
+                                Address:         0x3C98
+                                Other:           0x0
+                                ImportName:      ''
+                          - TerminalSize:    3
+                            NodeOffset:      703
+                            Name:            c
+                            Flags:           0x0
+                            Address:         0x1E90
+                            Other:           0x0
+                            ImportName:      ''
+                      - TerminalSize:    0
+                        NodeOffset:      713
+                        Name:            M
+                        Flags:           0x0
+                        Address:         0x0
+                        Other:           0x0
+                        ImportName:      ''
+                        Children:
+                          - TerminalSize:    3
+                            NodeOffset:      708
+                            Name:            a
+                            Flags:           0x0
+                            Address:         0x20D0
+                            Other:           0x0
+                            ImportName:      ''
+                          - TerminalSize:    4
+                            NodeOffset:      727
+                            Name:            m
+                            Flags:           0x0
+                            Address:         0x5158
+                            Other:           0x0
+                            ImportName:      ''
+                          - TerminalSize:    3
+                            NodeOffset:      733
+                            Name:            n
+                            Flags:           0x0
+                            Address:         0x3C64
+                            Other:           0x0
+                            ImportName:      ''
+                      - TerminalSize:    4
+                        NodeOffset:      738
+                        Name:            N
+                        Flags:           0x0
+                        Address:         0x5198
+                        Other:           0x0
+                        ImportName:      ''
+                      - TerminalSize:    0
+                        NodeOffset:      749
+                        Name:            f
+                        Flags:           0x0
+                        Address:         0x0
+                        Other:           0x0
+                        ImportName:      ''
+                        Children:
+                          - TerminalSize:    3
+                            NodeOffset:      744
+                            Name:            D
+                            Flags:           0x0
+                            Address:         0x1EF0
+                            Other:           0x0
+                            ImportName:      ''
+                          - TerminalSize:    3
+                            NodeOffset:      759
+                            Name:            d
+                            Flags:           0x0
+                            Address:         0x1ED0
+                            Other:           0x0
+                            ImportName:      ''
+          - TerminalSize:    0
+            NodeOffset:      931
+            Name:            OBJC_
+            Flags:           0x0
+            Address:         0x0
+            Other:           0x0
+            ImportName:      ''
+            Children:
+              - TerminalSize:    0
+                NodeOffset:      890
+                Name:            'CLASS_$_'
+                Flags:           0x0
+                Address:         0x0
+                Other:           0x0
+                ImportName:      ''
+                Children:
+                  - TerminalSize:    4
+                    NodeOffset:      884
+                    Name:            PodcastSuggestion
+                    Flags:           0x0
+                    Address:         0x5028
+                    Other:           0x0
+                    ImportName:      ''
+                  - TerminalSize:    4
+                    NodeOffset:      925
+                    Name:            Suggestion
+                    Flags:           0x0
+                    Address:         0x5078
+                    Other:           0x0
+                    ImportName:      ''
+              - TerminalSize:    0
+                NodeOffset:      965
+                Name:            'METACLASS_$_'
+                Flags:           0x0
+                Address:         0x0
+                Other:           0x0
+                ImportName:      ''
+                Children:
+                  - TerminalSize:    4
+                    NodeOffset:      959
+                    Name:            PodcastSuggestion
+                    Flags:           0x0
+                    Address:         0x5000
+                    Other:           0x0
+                    ImportName:      ''
+                  - TerminalSize:    4
+                    NodeOffset:      1000
+                    Name:            Suggestion
+                    Flags:           0x0
+                    Address:         0x5050
+                    Other:           0x0
+                    ImportName:      ''
+          - TerminalSize:    0
+            NodeOffset:      1011
+            Name:            SuggestionsKitVersion
+            Flags:           0x0
+            Address:         0x0
+            Other:           0x0
+            ImportName:      ''
+            Children:
+              - TerminalSize:    3
+                NodeOffset:      1006
+                Name:            Number
+                Flags:           0x0
+                Address:         0x36F8
+                Other:           0x0
+                ImportName:      ''
+              - TerminalSize:    3
+                NodeOffset:      1031
+                Name:            String
+                Flags:           0x0
+                Address:         0x36C0
+                Other:           0x0
+                ImportName:      ''
+          - TerminalSize:    3
+            NodeOffset:      1036
+            Name:            launchOnTestApps
+            Flags:           0x0
+            Address:         0x1B50
+            Other:           0x0
+            ImportName:      ''
+          - TerminalSize:    3
+            NodeOffset:      1041
+            Name:            setupTestSuggestionService
+            Flags:           0x0
+            Address:         0x1B30
+            Other:           0x0
+            ImportName:      ''
+          - TerminalSize:    3
+            NodeOffset:      1046
+            Name:            teardownTestSuggestionService
+            Flags:           0x0
+            Address:         0x1B40
+            Other:           0x0
+            ImportName:      ''
+  NameList:
+    - n_strx:          3740
+      n_type:          0x1E
+      n_sect:          1
+      n_desc:          128
+      n_value:         7040
+    - n_strx:          3808
+      n_type:          0x1E
+      n_sect:          1
+      n_desc:          128
+      n_value:         7120
+    - n_strx:          3876
+      n_type:          0xE
+      n_sect:          1
+      n_desc:          0
+      n_value:         7472
+    - n_strx:          3949
+      n_type:          0x1E
+      n_sect:          1
+      n_desc:          0
+      n_value:         8496
+    - n_strx:          4073
+      n_type:          0x1E
+      n_sect:          1
+      n_desc:          128
+      n_value:         9072
+    - n_strx:          4284
+      n_type:          0xE
+      n_sect:          1
+      n_desc:          0
+      n_value:         9312
+    - n_strx:          4345
+      n_type:          0x1E
+      n_sect:          1
+      n_desc:          128
+      n_value:         9360
+    - n_strx:          4583
+      n_type:          0xE
+      n_sect:          1
+      n_desc:          0
+      n_value:         9632
+    - n_strx:          4646
+      n_type:          0x1E
+      n_sect:          1
+      n_desc:          128
+      n_value:         9680
+    - n_strx:          4880
+      n_type:          0x1E
+      n_sect:          1
+      n_desc:          0
+      n_value:         9712
+    - n_strx:          4923
+      n_type:          0x1E
+      n_sect:          1
+      n_desc:          0
+      n_value:         10112
+    - n_strx:          4968
+      n_type:          0x1E
+      n_sect:          1
+      n_desc:          0
+      n_value:         10528
+    - n_strx:          5045
+      n_type:          0xE
+      n_sect:          1
+      n_desc:          0
+      n_value:         10608
+    - n_strx:          5156
+      n_type:          0xE
+      n_sect:          1
+      n_desc:          0
+      n_value:         10656
+    - n_strx:          5234
+      n_type:          0x1E
+      n_sect:          1
+      n_desc:          0
+      n_value:         10944
+    - n_strx:          5281
+      n_type:          0x1E
+      n_sect:          1
+      n_desc:          0
+      n_value:         10960
+    - n_strx:          5317
+      n_type:          0x1E
+      n_sect:          1
+      n_desc:          0
+      n_value:         10976
+    - n_strx:          5356
+      n_type:          0x1E
+      n_sect:          1
+      n_desc:          0
+      n_value:         11024
+    - n_strx:          5401
+      n_type:          0x1E
+      n_sect:          1
+      n_desc:          0
+      n_value:         11072
+    - n_strx:          5448
+      n_type:          0x1E
+      n_sect:          1
+      n_desc:          0
+      n_value:         11232
+    - n_strx:          5498
+      n_type:          0xE
+      n_sect:          1
+      n_desc:          0
+      n_value:         11280
+    - n_strx:          5534
+      n_type:          0x1E
+      n_sect:          1
+      n_desc:          128
+      n_value:         11344
+    - n_strx:          5581
+      n_type:          0xE
+      n_sect:          1
+      n_desc:          0
+      n_value:         11536
+    - n_strx:          5659
+      n_type:          0x1E
+      n_sect:          1
+      n_desc:          0
+      n_value:         11584
+    - n_strx:          5694
+      n_type:          0x1E
+      n_sect:          1
+      n_desc:          0
+      n_value:         11664
+    - n_strx:          5729
+      n_type:          0xE
+      n_sect:          1
+      n_desc:          0
+      n_value:         11744
+    - n_strx:          5799
+      n_type:          0xE
+      n_sect:          1
+      n_desc:          0
+      n_value:         11792
+    - n_strx:          5869
+      n_type:          0x1E
+      n_sect:          1
+      n_desc:          0
+      n_value:         11840
+    - n_strx:          5936
+      n_type:          0xE
+      n_sect:          1
+      n_desc:          0
+      n_value:         11904
+    - n_strx:          5952
+      n_type:          0x1E
+      n_sect:          1
+      n_desc:          0
+      n_value:         12128
+    - n_strx:          6022
+      n_type:          0x1E
+      n_sect:          1
+      n_desc:          0
+      n_value:         12192
+    - n_strx:          6094
+      n_type:          0x1E
+      n_sect:          1
+      n_desc:          0
+      n_value:         12256
+    - n_strx:          6166
+      n_type:          0x1E
+      n_sect:          1
+      n_desc:          0
+      n_value:         12320
+    - n_strx:          6259
+      n_type:          0x1E
+      n_sect:          1
+      n_desc:          0
+      n_value:         12384
+    - n_strx:          6324
+      n_type:          0x1E
+      n_sect:          1
+      n_desc:          0
+      n_value:         12608
+    - n_strx:          6391
+      n_type:          0x1E
+      n_sect:          1
+      n_desc:          0
+      n_value:         12672
+    - n_strx:          6455
+      n_type:          0x1E
+      n_sect:          1
+      n_desc:          0
+      n_value:         12736
+    - n_strx:          6521
+      n_type:          0x1E
+      n_sect:          1
+      n_desc:          0
+      n_value:         12800
+    - n_strx:          6589
+      n_type:          0x1E
+      n_sect:          1
+      n_desc:          0
+      n_value:         12880
+    - n_strx:          6647
+      n_type:          0x1E
+      n_sect:          1
+      n_desc:          0
+      n_value:         12896
+    - n_strx:          6707
+      n_type:          0x1E
+      n_sect:          1
+      n_desc:          0
+      n_value:         12912
+    - n_strx:          6764
+      n_type:          0x1E
+      n_sect:          1
+      n_desc:          0
+      n_value:         12928
+    - n_strx:          6823
+      n_type:          0x1E
+      n_sect:          1
+      n_desc:          0
+      n_value:         12944
+    - n_strx:          6884
+      n_type:          0x1E
+      n_sect:          1
+      n_desc:          0
+      n_value:         12960
+    - n_strx:          6957
+      n_type:          0x1E
+      n_sect:          1
+      n_desc:          0
+      n_value:         13024
+    - n_strx:          7033
+      n_type:          0x1E
+      n_sect:          1
+      n_desc:          0
+      n_value:         13088
+    - n_strx:          7110
+      n_type:          0x1E
+      n_sect:          1
+      n_desc:          0
+      n_value:         13152
+    - n_strx:          7192
+      n_type:          0x1E
+      n_sect:          1
+      n_desc:          0
+      n_value:         13232
+    - n_strx:          7270
+      n_type:          0x1E
+      n_sect:          1
+      n_desc:          0
+      n_value:         13296
+    - n_strx:          7353
+      n_type:          0x1E
+      n_sect:          1
+      n_desc:          0
+      n_value:         13376
+    - n_strx:          7433
+      n_type:          0x1E
+      n_sect:          1
+      n_desc:          0
+      n_value:         13440
+    - n_strx:          7514
+      n_type:          0x1E
+      n_sect:          1
+      n_desc:          128
+      n_value:         13504
+    - n_strx:          7576
+      n_type:          0x1E
+      n_sect:          1
+      n_desc:          128
+      n_value:         13584
+    - n_strx:          7637
+      n_type:          0xE
+      n_sect:          1
+      n_desc:          0
+      n_value:         13664
+    - n_strx:          7733
+      n_type:          0xE
+      n_sect:          1
+      n_desc:          0
+      n_value:         13712
+    - n_strx:          7828
+      n_type:          0x1E
+      n_sect:          3
+      n_desc:          128
+      n_value:         14130
+    - n_strx:          7856
+      n_type:          0x1E
+      n_sect:          5
+      n_desc:          128
+      n_value:         15352
+    - n_strx:          7879
+      n_type:          0x1E
+      n_sect:          5
+      n_desc:          128
+      n_value:         15448
+    - n_strx:          7905
+      n_type:          0x1E
+      n_sect:          6
+      n_desc:          128
+      n_value:         15664
+    - n_strx:          7948
+      n_type:          0x1E
+      n_sect:          6
+      n_desc:          128
+      n_value:         15670
+    - n_strx:          7987
+      n_type:          0x1E
+      n_sect:          6
+      n_desc:          128
+      n_value:         15676
+    - n_strx:          8042
+      n_type:          0x1E
+      n_sect:          6
+      n_desc:          128
+      n_value:         15682
+    - n_strx:          8093
+      n_type:          0xE
+      n_sect:          8
+      n_desc:          0
+      n_value:         15704
+    - n_strx:          8125
+      n_type:          0xE
+      n_sect:          8
+      n_desc:          0
+      n_value:         15732
+    - n_strx:          8153
+      n_type:          0xE
+      n_sect:          8
+      n_desc:          0
+      n_value:         15748
+    - n_strx:          8197
+      n_type:          0xE
+      n_sect:          8
+      n_desc:          0
+      n_value:         15764
+    - n_strx:          8237
+      n_type:          0x1E
+      n_sect:          14
+      n_desc:          128
+      n_value:         16744
+    - n_strx:          8291
+      n_type:          0x1E
+      n_sect:          14
+      n_desc:          128
+      n_value:         16752
+    - n_strx:          8345
+      n_type:          0x1E
+      n_sect:          14
+      n_desc:          128
+      n_value:         16760
+    - n_strx:          8395
+      n_type:          0x1E
+      n_sect:          14
+      n_desc:          128
+      n_value:         16768
+    - n_strx:          8453
+      n_type:          0x1E
+      n_sect:          14
+      n_desc:          128
+      n_value:         16776
+    - n_strx:          8505
+      n_type:          0x1E
+      n_sect:          14
+      n_desc:          128
+      n_value:         16784
+    - n_strx:          8552
+      n_type:          0x1E
+      n_sect:          14
+      n_desc:          128
+      n_value:         16792
+    - n_strx:          8601
+      n_type:          0x1E
+      n_sect:          14
+      n_desc:          128
+      n_value:         16800
+    - n_strx:          8660
+      n_type:          0x1E
+      n_sect:          14
+      n_desc:          128
+      n_value:         16808
+    - n_strx:          8717
+      n_type:          0x1E
+      n_sect:          14
+      n_desc:          128
+      n_value:         16816
+    - n_strx:          8774
+      n_type:          0x1E
+      n_sect:          14
+      n_desc:          128
+      n_value:         16824
+    - n_strx:          8827
+      n_type:          0x1E
+      n_sect:          14
+      n_desc:          128
+      n_value:         16832
+    - n_strx:          8888
+      n_type:          0x1E
+      n_sect:          14
+      n_desc:          128
+      n_value:         16840
+    - n_strx:          8943
+      n_type:          0x1E
+      n_sect:          14
+      n_desc:          128
+      n_value:         16848
+    - n_strx:          8993
+      n_type:          0x1E
+      n_sect:          14
+      n_desc:          128
+      n_value:         16856
+    - n_strx:          9045
+      n_type:          0x1E
+      n_sect:          14
+      n_desc:          128
+      n_value:         16864
+    - n_strx:          9107
+      n_type:          0xE
+      n_sect:          17
+      n_desc:          0
+      n_value:         16928
+    - n_strx:          9147
+      n_type:          0xE
+      n_sect:          17
+      n_desc:          0
+      n_value:         17000
+    - n_strx:          9183
+      n_type:          0xE
+      n_sect:          17
+      n_desc:          0
+      n_value:         17072
+    - n_strx:          9216
+      n_type:          0xE
+      n_sect:          17
+      n_desc:          0
+      n_value:         17144
+    - n_strx:          9245
+      n_type:          0xE
+      n_sect:          17
+      n_desc:          0
+      n_value:         17216
+    - n_strx:          9301
+      n_type:          0xE
+      n_sect:          17
+      n_desc:          0
+      n_value:         17288
+    - n_strx:          9348
+      n_type:          0xE
+      n_sect:          17
+      n_desc:          0
+      n_value:         17328
+    - n_strx:          9394
+      n_type:          0xE
+      n_sect:          17
+      n_desc:          0
+      n_value:         17400
+    - n_strx:          9454
+      n_type:          0xE
+      n_sect:          17
+      n_desc:          0
+      n_value:         17472
+    - n_strx:          9504
+      n_type:          0xE
+      n_sect:          17
+      n_desc:          0
+      n_value:         17544
+    - n_strx:          9563
+      n_type:          0xE
+      n_sect:          17
+      n_desc:          0
+      n_value:         17616
+    - n_strx:          9612
+      n_type:          0xE
+      n_sect:          17
+      n_desc:          0
+      n_value:         17688
+    - n_strx:          9667
+      n_type:          0xE
+      n_sect:          17
+      n_desc:          0
+      n_value:         17760
+    - n_strx:          9712
+      n_type:          0xE
+      n_sect:          19
+      n_desc:          0
+      n_value:         20680
+    - n_strx:          9744
+      n_type:          0xE
+      n_sect:          19
+      n_desc:          0
+      n_value:         20864
+    - n_strx:          9772
+      n_type:          0xE
+      n_sect:          19
+      n_desc:          0
+      n_value:         21024
+    - n_strx:          9816
+      n_type:          0xE
+      n_sect:          19
+      n_desc:          0
+      n_value:         21184
+    - n_strx:          9856
+      n_type:          0x1E
+      n_sect:          19
+      n_desc:          128
+      n_value:         21304
+    - n_strx:          9898
+      n_type:          0x1E
+      n_sect:          20
+      n_desc:          0
+      n_value:         21312
+    - n_strx:          9927
+      n_type:          0x1E
+      n_sect:          21
+      n_desc:          0
+      n_value:         21712
+    - n_strx:          9952
+      n_type:          0x1E
+      n_sect:          22
+      n_desc:          0
+      n_value:         21888
+    - n_strx:          9991
+      n_type:          0xE
+      n_sect:          23
+      n_desc:          0
+      n_value:         21896
+    - n_strx:          10090
+      n_type:          0xE
+      n_sect:          23
+      n_desc:          0
+      n_value:         21912
+    - n_strx:          10125
+      n_type:          0xE
+      n_sect:          23
+      n_desc:          0
+      n_value:         21920
+    - n_strx:          10155
+      n_type:          0xE
+      n_sect:          23
+      n_desc:          0
+      n_value:         21928
+    - n_strx:          10178
+      n_type:          0xE
+      n_sect:          23
+      n_desc:          0
+      n_value:         21936
+    - n_strx:          10244
+      n_type:          0xE
+      n_sect:          23
+      n_desc:          0
+      n_value:         21952
+    - n_strx:          10301
+      n_type:          0xE
+      n_sect:          23
+      n_desc:          0
+      n_value:         21968
+    - n_strx:          10358
+      n_type:          0xE
+      n_sect:          23
+      n_desc:          0
+      n_value:         21984
+    - n_strx:          10442
+      n_type:          0xE
+      n_sect:          23
+      n_desc:          0
+      n_value:         22000
+    - n_strx:          10525
+      n_type:          0x32
+      n_sect:          0
+      n_desc:          0
+      n_value:         0
+    - n_strx:          10795
+      n_type:          0x32
+      n_sect:          0
+      n_desc:          0
+      n_value:         0
+    - n_strx:          1
+      n_type:          0x64
+      n_sect:          1
+      n_desc:          0
+      n_value:         0
+    - n_strx:          11071
+      n_type:          0x64
+      n_sect:          0
+      n_desc:          0
+      n_value:         0
+    - n_strx:          11308
+      n_type:          0x64
+      n_sect:          0
+      n_desc:          0
+      n_value:         0
+    - n_strx:          11330
+      n_type:          0x66
+      n_sect:          3
+      n_desc:          1
+      n_value:         0
+    - n_strx:          11595
+      n_type:          0x20
+      n_sect:          0
+      n_desc:          0
+      n_value:         0
+    - n_strx:          11624
+      n_type:          0x20
+      n_sect:          0
+      n_desc:          0
+      n_value:         0
+    - n_strx:          1
+      n_type:          0x64
+      n_sect:          1
+      n_desc:          0
+      n_value:         0
+    - n_strx:          11653
+      n_type:          0x64
+      n_sect:          0
+      n_desc:          0
+      n_value:         0
+    - n_strx:          11708
+      n_type:          0x64
+      n_sect:          0
+      n_desc:          0
+      n_value:         0
+    - n_strx:          11728
+      n_type:          0x66
+      n_sect:          3
+      n_desc:          1
+      n_value:         0
+    - n_strx:          11991
+      n_type:          0x26
+      n_sect:          17
+      n_desc:          0
+      n_value:         16928
+    - n_strx:          12031
+      n_type:          0x26
+      n_sect:          17
+      n_desc:          0
+      n_value:         17000
+    - n_strx:          12067
+      n_type:          0x20
+      n_sect:          0
+      n_desc:          0
+      n_value:         0
+    - n_strx:          12103
+      n_type:          0x20
+      n_sect:          0
+      n_desc:          0
+      n_value:         0
+    - n_strx:          1
+      n_type:          0x64
+      n_sect:          1
+      n_desc:          0
+      n_value:         0
+    - n_strx:          12135
+      n_type:          0x64
+      n_sect:          0
+      n_desc:          0
+      n_value:         0
+    - n_strx:          12190
+      n_type:          0x64
+      n_sect:          0
+      n_desc:          0
+      n_value:         0
+    - n_strx:          12207
+      n_type:          0x66
+      n_sect:          3
+      n_desc:          1
+      n_value:         0
+    - n_strx:          1
+      n_type:          0x2E
+      n_sect:          1
+      n_desc:          0
+      n_value:         6960
+    - n_strx:          12467
+      n_type:          0x24
+      n_sect:          1
+      n_desc:          0
+      n_value:         6960
+    - n_strx:          1
+      n_type:          0x24
+      n_sect:          0
+      n_desc:          0
+      n_value:         16
+    - n_strx:          1
+      n_type:          0x4E
+      n_sect:          1
+      n_desc:          0
+      n_value:         6960
+    - n_strx:          1
+      n_type:          0x2E
+      n_sect:          1
+      n_desc:          0
+      n_value:         6976
+    - n_strx:          12495
+      n_type:          0x24
+      n_sect:          1
+      n_desc:          0
+      n_value:         6976
+    - n_strx:          1
+      n_type:          0x24
+      n_sect:          0
+      n_desc:          0
+      n_value:         16
+    - n_strx:          1
+      n_type:          0x4E
+      n_sect:          1
+      n_desc:          0
+      n_value:         6976
+    - n_strx:          1
+      n_type:          0x2E
+      n_sect:          1
+      n_desc:          0
+      n_value:         6992
+    - n_strx:          12526
+      n_type:          0x24
+      n_sect:          1
+      n_desc:          0
+      n_value:         6992
+    - n_strx:          1
+      n_type:          0x24
+      n_sect:          0
+      n_desc:          0
+      n_value:         13
+    - n_strx:          1
+      n_type:          0x4E
+      n_sect:          1
+      n_desc:          0
+      n_value:         6992
+    - n_strx:          1
+      n_type:          0x64
+      n_sect:          1
+      n_desc:          0
+      n_value:         0
+    - n_strx:          12544
+      n_type:          0x64
+      n_sect:          0
+      n_desc:          0
+      n_value:         0
+    - n_strx:          12599
+      n_type:          0x64
+      n_sect:          0
+      n_desc:          0
+      n_value:         0
+    - n_strx:          12612
+      n_type:          0x66
+      n_sect:          3
+      n_desc:          1
+      n_value:         0
+    - n_strx:          12868
+      n_type:          0x26
+      n_sect:          17
+      n_desc:          0
+      n_value:         17072
+    - n_strx:          12901
+      n_type:          0x26
+      n_sect:          17
+      n_desc:          0
+      n_value:         17144
+    - n_strx:          12930
+      n_type:          0x20
+      n_sect:          0
+      n_desc:          0
+      n_value:         0
+    - n_strx:          12959
+      n_type:          0x20
+      n_sect:          0
+      n_desc:          0
+      n_value:         0
+    - n_strx:          1
+      n_type:          0x64
+      n_sect:          1
+      n_desc:          0
+      n_value:         0
+    - n_strx:          12984
+      n_type:          0x64
+      n_sect:          0
+      n_desc:          0
+      n_value:         0
+    - n_strx:          13039
+      n_type:          0x64
+      n_sect:          0
+      n_desc:          0
+      n_value:         0
+    - n_strx:          13062
+      n_type:          0x66
+      n_sect:          3
+      n_desc:          1
+      n_value:         0
+    - n_strx:          1
+      n_type:          0x2E
+      n_sect:          1
+      n_desc:          0
+      n_value:         7008
+    - n_strx:          13324
+      n_type:          0x24
+      n_sect:          1
+      n_desc:          0
+      n_value:         7008
+    - n_strx:          1
+      n_type:          0x24
+      n_sect:          0
+      n_desc:          0
+      n_value:         32
+    - n_strx:          1
+      n_type:          0x4E
+      n_sect:          1
+      n_desc:          0
+      n_value:         7008
+    - n_strx:          1
+      n_type:          0x2E
+      n_sect:          1
+      n_desc:          0
+      n_value:         7040
+    - n_strx:          13390
+      n_type:          0x24
+      n_sect:          1
+      n_desc:          0
+      n_value:         7040
+    - n_strx:          1
+      n_type:          0x24
+      n_sect:          0
+      n_desc:          0
+      n_value:         80
+    - n_strx:          1
+      n_type:          0x4E
+      n_sect:          1
+      n_desc:          0
+      n_value:         7040
+    - n_strx:          1
+      n_type:          0x2E
+      n_sect:          1
+      n_desc:          0
+      n_value:         7120
+    - n_strx:          13458
+      n_type:          0x24
+      n_sect:          1
+      n_desc:          0
+      n_value:         7120
+    - n_strx:          1
+      n_type:          0x24
+      n_sect:          0
+      n_desc:          0
+      n_value:         112
+    - n_strx:          1
+      n_type:          0x4E
+      n_sect:          1
+      n_desc:          0
+      n_value:         7120
+    - n_strx:          1
+      n_type:          0x2E
+      n_sect:          1
+      n_desc:          0
+      n_value:         7232
+    - n_strx:          13526
+      n_type:          0x24
+      n_sect:          1
+      n_desc:          0
+      n_value:         7232
+    - n_strx:          1
+      n_type:          0x24
+      n_sect:          0
+      n_desc:          0
+      n_value:         80
+    - n_strx:          1
+      n_type:          0x4E
+      n_sect:          1
+      n_desc:          0
+      n_value:         7232
+    - n_strx:          1
+      n_type:          0x2E
+      n_sect:          1
+      n_desc:          0
+      n_value:         7312
+    - n_strx:          13590
+      n_type:          0x24
+      n_sect:          1
+      n_desc:          0
+      n_value:         7312
+    - n_strx:          1
+      n_type:          0x24
+      n_sect:          0
+      n_desc:          0
+      n_value:         96
+    - n_strx:          1
+      n_type:          0x4E
+      n_sect:          1
+      n_desc:          0
+      n_value:         7312
+    - n_strx:          1
+      n_type:          0x2E
+      n_sect:          1
+      n_desc:          0
+      n_value:         7408
+    - n_strx:          13654
+      n_type:          0x24
+      n_sect:          1
+      n_desc:          0
+      n_value:         7408
+    - n_strx:          1
+      n_type:          0x24
+      n_sect:          0
+      n_desc:          0
+      n_value:         64
+    - n_strx:          1
+      n_type:          0x4E
+      n_sect:          1
+      n_desc:          0
+      n_value:         7408
+    - n_strx:          1
+      n_type:          0x2E
+      n_sect:          1
+      n_desc:          0
+      n_value:         7472
+    - n_strx:          13718
+      n_type:          0x24
+      n_sect:          1
+      n_desc:          0
+      n_value:         7472
+    - n_strx:          1
+      n_type:          0x24
+      n_sect:          0
+      n_desc:          0
+      n_value:         48
+    - n_strx:          1
+      n_type:          0x4E
+      n_sect:          1
+      n_desc:          0
+      n_value:         7472
+    - n_strx:          1
+      n_type:          0x2E
+      n_sect:          1
+      n_desc:          0
+      n_value:         7520
+    - n_strx:          13791
+      n_type:          0x24
+      n_sect:          1
+      n_desc:          0
+      n_value:         7520
+    - n_strx:          1
+      n_type:          0x24
+      n_sect:          0
+      n_desc:          0
+      n_value:         48
+    - n_strx:          1
+      n_type:          0x4E
+      n_sect:          1
+      n_desc:          0
+      n_value:         7520
+    - n_strx:          1
+      n_type:          0x2E
+      n_sect:          1
+      n_desc:          0
+      n_value:         7568
+    - n_strx:          13823
+      n_type:          0x24
+      n_sect:          1
+      n_desc:          0
+      n_value:         7568
+    - n_strx:          1
+      n_type:          0x24
+      n_sect:          0
+      n_desc:          0
+      n_value:         64
+    - n_strx:          1
+      n_type:          0x4E
+      n_sect:          1
+      n_desc:          0
+      n_value:         7568
+    - n_strx:          1
+      n_type:          0x2E
+      n_sect:          1
+      n_desc:          0
+      n_value:         7632
+    - n_strx:          13855
+      n_type:          0x24
+      n_sect:          1
+      n_desc:          0
+      n_value:         7632
+    - n_strx:          1
+      n_type:          0x24
+      n_sect:          0
+      n_desc:          0
+      n_value:         48
+    - n_strx:          1
+      n_type:          0x4E
+      n_sect:          1
+      n_desc:          0
+      n_value:         7632
+    - n_strx:          1
+      n_type:          0x2E
+      n_sect:          1
+      n_desc:          0
+      n_value:         7680
+    - n_strx:          13891
+      n_type:          0x24
+      n_sect:          1
+      n_desc:          0
+      n_value:         7680
+    - n_strx:          1
+      n_type:          0x24
+      n_sect:          0
+      n_desc:          0
+      n_value:         64
+    - n_strx:          1
+      n_type:          0x4E
+      n_sect:          1
+      n_desc:          0
+      n_value:         7680
+    - n_strx:          1
+      n_type:          0x2E
+      n_sect:          1
+      n_desc:          0
+      n_value:         7744
+    - n_strx:          13927
+      n_type:          0x24
+      n_sect:          1
+      n_desc:          0
+      n_value:         7744
+    - n_strx:          1
+      n_type:          0x24
+      n_sect:          0
+      n_desc:          0
+      n_value:         22
+    - n_strx:          1
+      n_type:          0x4E
+      n_sect:          1
+      n_desc:          0
+      n_value:         7744
+    - n_strx:          13959
+      n_type:          0x20
+      n_sect:          0
+      n_desc:          0
+      n_value:         0
+    - n_strx:          14026
+      n_type:          0x20
+      n_sect:          0
+      n_desc:          0
+      n_value:         0
+    - n_strx:          14054
+      n_type:          0x20
+      n_sect:          0
+      n_desc:          0
+      n_value:         0
+    - n_strx:          14077
+      n_type:          0x20
+      n_sect:          0
+      n_desc:          0
+      n_value:         0
+    - n_strx:          14109
+      n_type:          0x20
+      n_sect:          0
+      n_desc:          0
+      n_value:         0
+    - n_strx:          14175
+      n_type:          0x20
+      n_sect:          0
+      n_desc:          0
+      n_value:         0
+    - n_strx:          14241
+      n_type:          0x20
+      n_sect:          0
+      n_desc:          0
+      n_value:         0
+    - n_strx:          14307
+      n_type:          0x20
+      n_sect:          0
+      n_desc:          0
+      n_value:         0
+    - n_strx:          14345
+      n_type:          0x20
+      n_sect:          0
+      n_desc:          0
+      n_value:         0
+    - n_strx:          14388
+      n_type:          0x20
+      n_sect:          0
+      n_desc:          0
+      n_value:         0
+    - n_strx:          14427
+      n_type:          0x26
+      n_sect:          8
+      n_desc:          0
+      n_value:         15704
+    - n_strx:          14459
+      n_type:          0x20
+      n_sect:          0
+      n_desc:          0
+      n_value:         0
+    - n_strx:          14525
+      n_type:          0x20
+      n_sect:          0
+      n_desc:          0
+      n_value:         0
+    - n_strx:          14579
+      n_type:          0x20
+      n_sect:          0
+      n_desc:          0
+      n_value:         0
+    - n_strx:          14633
+      n_type:          0x20
+      n_sect:          0
+      n_desc:          0
+      n_value:         0
+    - n_strx:          14683
+      n_type:          0x20
+      n_sect:          0
+      n_desc:          0
+      n_value:         0
+    - n_strx:          14741
+      n_type:          0x20
+      n_sect:          0
+      n_desc:          0
+      n_value:         0
+    - n_strx:          14793
+      n_type:          0x20
+      n_sect:          0
+      n_desc:          0
+      n_value:         0
+    - n_strx:          14840
+      n_type:          0x20
+      n_sect:          0
+      n_desc:          0
+      n_value:         0
+    - n_strx:          14889
+      n_type:          0x20
+      n_sect:          0
+      n_desc:          0
+      n_value:         0
+    - n_strx:          14948
+      n_type:          0x26
+      n_sect:          17
+      n_desc:          0
+      n_value:         17216
+    - n_strx:          15004
+      n_type:          0x26
+      n_sect:          17
+      n_desc:          0
+      n_value:         17288
+    - n_strx:          15051
+      n_type:          0x26
+      n_sect:          17
+      n_desc:          0
+      n_value:         17328
+    - n_strx:          15097
+      n_type:          0x20
+      n_sect:          0
+      n_desc:          0
+      n_value:         0
+    - n_strx:          15129
+      n_type:          0x26
+      n_sect:          19
+      n_desc:          0
+      n_value:         20680
+    - n_strx:          15161
+      n_type:          0x20
+      n_sect:          0
+      n_desc:          0
+      n_value:         0
+    - n_strx:          1
+      n_type:          0x64
+      n_sect:          1
+      n_desc:          0
+      n_value:         0
+    - n_strx:          15192
+      n_type:          0x64
+      n_sect:          0
+      n_desc:          0
+      n_value:         0
+    - n_strx:          15250
+      n_type:          0x64
+      n_sect:          0
+      n_desc:          0
+      n_value:         0
+    - n_strx:          15265
+      n_type:          0x66
+      n_sect:          3
+      n_desc:          1
+      n_value:         0
+    - n_strx:          1
+      n_type:          0x2E
+      n_sect:          1
+      n_desc:          0
+      n_value:         7776
+    - n_strx:          15466
+      n_type:          0x24
+      n_sect:          1
+      n_desc:          0
+      n_value:         7776
+    - n_strx:          1
+      n_type:          0x24
+      n_sect:          0
+      n_desc:          0
+      n_value:         48
+    - n_strx:          1
+      n_type:          0x4E
+      n_sect:          1
+      n_desc:          0
+      n_value:         7776
+    - n_strx:          1
+      n_type:          0x2E
+      n_sect:          1
+      n_desc:          0
+      n_value:         7824
+    - n_strx:          15498
+      n_type:          0x24
+      n_sect:          1
+      n_desc:          0
+      n_value:         7824
+    - n_strx:          1
+      n_type:          0x24
+      n_sect:          0
+      n_desc:          0
+      n_value:         32
+    - n_strx:          1
+      n_type:          0x4E
+      n_sect:          1
+      n_desc:          0
+      n_value:         7824
+    - n_strx:          1
+      n_type:          0x2E
+      n_sect:          1
+      n_desc:          0
+      n_value:         7856
+    - n_strx:          15530
+      n_type:          0x24
+      n_sect:          1
+      n_desc:          0
+      n_value:         7856
+    - n_strx:          1
+      n_type:          0x24
+      n_sect:          0
+      n_desc:          0
+      n_value:         32
+    - n_strx:          1
+      n_type:          0x4E
+      n_sect:          1
+      n_desc:          0
+      n_value:         7856
+    - n_strx:          1
+      n_type:          0x2E
+      n_sect:          1
+      n_desc:          0
+      n_value:         7888
+    - n_strx:          15571
+      n_type:          0x24
+      n_sect:          1
+      n_desc:          0
+      n_value:         7888
+    - n_strx:          1
+      n_type:          0x24
+      n_sect:          0
+      n_desc:          0
+      n_value:         32
+    - n_strx:          1
+      n_type:          0x4E
+      n_sect:          1
+      n_desc:          0
+      n_value:         7888
+    - n_strx:          1
+      n_type:          0x2E
+      n_sect:          1
+      n_desc:          0
+      n_value:         7920
+    - n_strx:          15599
+      n_type:          0x24
+      n_sect:          1
+      n_desc:          0
+      n_value:         7920
+    - n_strx:          1
+      n_type:          0x24
+      n_sect:          0
+      n_desc:          0
+      n_value:         64
+    - n_strx:          1
+      n_type:          0x4E
+      n_sect:          1
+      n_desc:          0
+      n_value:         7920
+    - n_strx:          1
+      n_type:          0x2E
+      n_sect:          1
+      n_desc:          0
+      n_value:         7984
+    - n_strx:          15627
+      n_type:          0x24
+      n_sect:          1
+      n_desc:          0
+      n_value:         7984
+    - n_strx:          1
+      n_type:          0x24
+      n_sect:          0
+      n_desc:          0
+      n_value:         48
+    - n_strx:          1
+      n_type:          0x4E
+      n_sect:          1
+      n_desc:          0
+      n_value:         7984
+    - n_strx:          1
+      n_type:          0x2E
+      n_sect:          1
+      n_desc:          0
+      n_value:         8032
+    - n_strx:          15675
+      n_type:          0x24
+      n_sect:          1
+      n_desc:          0
+      n_value:         8032
+    - n_strx:          1
+      n_type:          0x24
+      n_sect:          0
+      n_desc:          0
+      n_value:         32
+    - n_strx:          1
+      n_type:          0x4E
+      n_sect:          1
+      n_desc:          0
+      n_value:         8032
+    - n_strx:          1
+      n_type:          0x2E
+      n_sect:          1
+      n_desc:          0
+      n_value:         8064
+    - n_strx:          15723
+      n_type:          0x24
+      n_sect:          1
+      n_desc:          0
+      n_value:         8064
+    - n_strx:          1
+      n_type:          0x24
+      n_sect:          0
+      n_desc:          0
+      n_value:         32
+    - n_strx:          1
+      n_type:          0x4E
+      n_sect:          1
+      n_desc:          0
+      n_value:         8064
+    - n_strx:          1
+      n_type:          0x2E
+      n_sect:          1
+      n_desc:          0
+      n_value:         8096
+    - n_strx:          15780
+      n_type:          0x24
+      n_sect:          1
+      n_desc:          0
+      n_value:         8096
+    - n_strx:          1
+      n_type:          0x24
+      n_sect:          0
+      n_desc:          0
+      n_value:         32
+    - n_strx:          1
+      n_type:          0x4E
+      n_sect:          1
+      n_desc:          0
+      n_value:         8096
+    - n_strx:          1
+      n_type:          0x2E
+      n_sect:          1
+      n_desc:          0
+      n_value:         8128
+    - n_strx:          15824
+      n_type:          0x24
+      n_sect:          1
+      n_desc:          0
+      n_value:         8128
+    - n_strx:          1
+      n_type:          0x24
+      n_sect:          0
+      n_desc:          0
+      n_value:         64
+    - n_strx:          1
+      n_type:          0x4E
+      n_sect:          1
+      n_desc:          0
+      n_value:         8128
+    - n_strx:          1
+      n_type:          0x2E
+      n_sect:          1
+      n_desc:          0
+      n_value:         8192
+    - n_strx:          15868
+      n_type:          0x24
+      n_sect:          1
+      n_desc:          0
+      n_value:         8192
+    - n_strx:          1
+      n_type:          0x24
+      n_sect:          0
+      n_desc:          0
+      n_value:         48
+    - n_strx:          1
+      n_type:          0x4E
+      n_sect:          1
+      n_desc:          0
+      n_value:         8192
+    - n_strx:          1
+      n_type:          0x2E
+      n_sect:          1
+      n_desc:          0
+      n_value:         8240
+    - n_strx:          15912
+      n_type:          0x24
+      n_sect:          1
+      n_desc:          0
+      n_value:         8240
+    - n_strx:          1
+      n_type:          0x24
+      n_sect:          0
+      n_desc:          0
+      n_value:         32
+    - n_strx:          1
+      n_type:          0x4E
+      n_sect:          1
+      n_desc:          0
+      n_value:         8240
+    - n_strx:          1
+      n_type:          0x2E
+      n_sect:          1
+      n_desc:          0
+      n_value:         8272
+    - n_strx:          15956
+      n_type:          0x24
+      n_sect:          1
+      n_desc:          0
+      n_value:         8272
+    - n_strx:          1
+      n_type:          0x24
+      n_sect:          0
+      n_desc:          0
+      n_value:         32
+    - n_strx:          1
+      n_type:          0x4E
+      n_sect:          1
+      n_desc:          0
+      n_value:         8272
+    - n_strx:          1
+      n_type:          0x2E
+      n_sect:          1
+      n_desc:          0
+      n_value:         8304
+    - n_strx:          16012
+      n_type:          0x24
+      n_sect:          1
+      n_desc:          0
+      n_value:         8304
+    - n_strx:          1
+      n_type:          0x24
+      n_sect:          0
+      n_desc:          0
+      n_value:         32
+    - n_strx:          1
+      n_type:          0x4E
+      n_sect:          1
+      n_desc:          0
+      n_value:         8304
+    - n_strx:          1
+      n_type:          0x2E
+      n_sect:          1
+      n_desc:          0
+      n_value:         8336
+    - n_strx:          16052
+      n_type:          0x24
+      n_sect:          1
+      n_desc:          0
+      n_value:         8336
+    - n_strx:          1
+      n_type:          0x24
+      n_sect:          0
+      n_desc:          0
+      n_value:         64
+    - n_strx:          1
+      n_type:          0x4E
+      n_sect:          1
+      n_desc:          0
+      n_value:         8336
+    - n_strx:          1
+      n_type:          0x2E
+      n_sect:          1
+      n_desc:          0
+      n_value:         8400
+    - n_strx:          16092
+      n_type:          0x24
+      n_sect:          1
+      n_desc:          0
+      n_value:         8400
+    - n_strx:          1
+      n_type:          0x24
+      n_sect:          0
+      n_desc:          0
+      n_value:         32
+    - n_strx:          1
+      n_type:          0x4E
+      n_sect:          1
+      n_desc:          0
+      n_value:         8400
+    - n_strx:          1
+      n_type:          0x2E
+      n_sect:          1
+      n_desc:          0
+      n_value:         8432
+    - n_strx:          16120
+      n_type:          0x24
+      n_sect:          1
+      n_desc:          0
+      n_value:         8432
+    - n_strx:          1
+      n_type:          0x24
+      n_sect:          0
+      n_desc:          0
+      n_value:         32
+    - n_strx:          1
+      n_type:          0x4E
+      n_sect:          1
+      n_desc:          0
+      n_value:         8432
+    - n_strx:          1
+      n_type:          0x2E
+      n_sect:          1
+      n_desc:          0
+      n_value:         8464
+    - n_strx:          16164
+      n_type:          0x24
+      n_sect:          1
+      n_desc:          0
+      n_value:         8464
+    - n_strx:          1
+      n_type:          0x24
+      n_sect:          0
+      n_desc:          0
+      n_value:         22
+    - n_strx:          1
+      n_type:          0x4E
+      n_sect:          1
+      n_desc:          0
+      n_value:         8464
+    - n_strx:          16204
+      n_type:          0x20
+      n_sect:          0
+      n_desc:          0
+      n_value:         0
+    - n_strx:          16230
+      n_type:          0x20
+      n_sect:          0
+      n_desc:          0
+      n_value:         0
+    - n_strx:          16258
+      n_type:          0x20
+      n_sect:          0
+      n_desc:          0
+      n_value:         0
+    - n_strx:          16292
+      n_type:          0x20
+      n_sect:          0
+      n_desc:          0
+      n_value:         0
+    - n_strx:          16335
+      n_type:          0x20
+      n_sect:          0
+      n_desc:          0
+      n_value:         0
+    - n_strx:          16379
+      n_type:          0x20
+      n_sect:          0
+      n_desc:          0
+      n_value:         0
+    - n_strx:          16429
+      n_type:          0x20
+      n_sect:          0
+      n_desc:          0
+      n_value:         0
+    - n_strx:          16488
+      n_type:          0x20
+      n_sect:          0
+      n_desc:          0
+      n_value:         0
+    - n_strx:          16528
+      n_type:          0x20
+      n_sect:          0
+      n_desc:          0
+      n_value:         0
+    - n_strx:          16574
+      n_type:          0x20
+      n_sect:          0
+      n_desc:          0
+      n_value:         0
+    - n_strx:          16632
+      n_type:          0x20
+      n_sect:          0
+      n_desc:          0
+      n_value:         0
+    - n_strx:          16687
+      n_type:          0x20
+      n_sect:          0
+      n_desc:          0
+      n_value:         0
+    - n_strx:          16738
+      n_type:          0x26
+      n_sect:          8
+      n_desc:          0
+      n_value:         15732
+    - n_strx:          16766
+      n_type:          0x26
+      n_sect:          8
+      n_desc:          0
+      n_value:         15748
+    - n_strx:          16810
+      n_type:          0x26
+      n_sect:          8
+      n_desc:          0
+      n_value:         15764
+    - n_strx:          16850
+      n_type:          0x20
+      n_sect:          0
+      n_desc:          0
+      n_value:         0
+    - n_strx:          16907
+      n_type:          0x20
+      n_sect:          0
+      n_desc:          0
+      n_value:         0
+    - n_strx:          16964
+      n_type:          0x20
+      n_sect:          0
+      n_desc:          0
+      n_value:         0
+    - n_strx:          17017
+      n_type:          0x20
+      n_sect:          0
+      n_desc:          0
+      n_value:         0
+    - n_strx:          17078
+      n_type:          0x20
+      n_sect:          0
+      n_desc:          0
+      n_value:         0
+    - n_strx:          17133
+      n_type:          0x20
+      n_sect:          0
+      n_desc:          0
+      n_value:         0
+    - n_strx:          17183
+      n_type:          0x20
+      n_sect:          0
+      n_desc:          0
+      n_value:         0
+    - n_strx:          17235
+      n_type:          0x20
+      n_sect:          0
+      n_desc:          0
+      n_value:         0
+    - n_strx:          17297
+      n_type:          0x26
+      n_sect:          17
+      n_desc:          0
+      n_value:         17400
+    - n_strx:          17357
+      n_type:          0x26
+      n_sect:          17
+      n_desc:          0
+      n_value:         17472
+    - n_strx:          17407
+      n_type:          0x26
+      n_sect:          17
+      n_desc:          0
+      n_value:         17544
+    - n_strx:          17466
+      n_type:          0x26
+      n_sect:          17
+      n_desc:          0
+      n_value:         17616
+    - n_strx:          17515
+      n_type:          0x26
+      n_sect:          17
+      n_desc:          0
+      n_value:         17688
+    - n_strx:          17570
+      n_type:          0x26
+      n_sect:          17
+      n_desc:          0
+      n_value:         17760
+    - n_strx:          17615
+      n_type:          0x20
+      n_sect:          0
+      n_desc:          0
+      n_value:         0
+    - n_strx:          17643
+      n_type:          0x26
+      n_sect:          19
+      n_desc:          0
+      n_value:         20864
+    - n_strx:          17671
+      n_type:          0x20
+      n_sect:          0
+      n_desc:          0
+      n_value:         0
+    - n_strx:          17698
+      n_type:          0x20
+      n_sect:          0
+      n_desc:          0
+      n_value:         0
+    - n_strx:          17742
+      n_type:          0x26
+      n_sect:          19
+      n_desc:          0
+      n_value:         21024
+    - n_strx:          17786
+      n_type:          0x20
+      n_sect:          0
+      n_desc:          0
+      n_value:         0
+    - n_strx:          17829
+      n_type:          0x20
+      n_sect:          0
+      n_desc:          0
+      n_value:         0
+    - n_strx:          17869
+      n_type:          0x26
+      n_sect:          19
+      n_desc:          0
+      n_value:         21184
+    - n_strx:          17909
+      n_type:          0x20
+      n_sect:          0
+      n_desc:          0
+      n_value:         0
+    - n_strx:          1
+      n_type:          0x64
+      n_sect:          1
+      n_desc:          0
+      n_value:         0
+    - n_strx:          2
+      n_type:          0xF
+      n_sect:          1
+      n_desc:          0
+      n_value:         7408
+    - n_strx:          66
+      n_type:          0xF
+      n_sect:          5
+      n_desc:          0
+      n_value:         15432
+    - n_strx:          132
+      n_type:          0xF
+      n_sect:          1
+      n_desc:          0
+      n_value:         7232
+    - n_strx:          196
+      n_type:          0xF
+      n_sect:          5
+      n_desc:          0
+      n_value:         15416
+    - n_strx:          262
+      n_type:          0xF
+      n_sect:          14
+      n_desc:          0
+      n_value:         16728
+    - n_strx:          328
+      n_type:          0xF
+      n_sect:          3
+      n_desc:          0
+      n_value:         14080
+    - n_strx:          395
+      n_type:          0xF
+      n_sect:          1
+      n_desc:          0
+      n_value:         7008
+    - n_strx:          461
+      n_type:          0xF
+      n_sect:          1
+      n_desc:          0
+      n_value:         7312
+    - n_strx:          525
+      n_type:          0xF
+      n_sect:          5
+      n_desc:          0
+      n_value:         15424
+    - n_strx:          591
+      n_type:          0xF
+      n_sect:          1
+      n_desc:          0
+      n_value:         7632
+    - n_strx:          627
+      n_type:          0xF
+      n_sect:          5
+      n_desc:          0
+      n_value:         15440
+    - n_strx:          665
+      n_type:          0xF
+      n_sect:          1
+      n_desc:          0
+      n_value:         7680
+    - n_strx:          701
+      n_type:          0xF
+      n_sect:          1
+      n_desc:          0
+      n_value:         7744
+    - n_strx:          733
+      n_type:          0xF
+      n_sect:          19
+      n_desc:          0
+      n_value:         20640
+    - n_strx:          765
+      n_type:          0xF
+      n_sect:          5
+      n_desc:          0
+      n_value:         15364
+    - n_strx:          797
+      n_type:          0xF
+      n_sect:          19
+      n_desc:          0
+      n_value:         20704
+    - n_strx:          828
+      n_type:          0xF
+      n_sect:          1
+      n_desc:          0
+      n_value:         7568
+    - n_strx:          860
+      n_type:          0xF
+      n_sect:          1
+      n_desc:          0
+      n_value:         7520
+    - n_strx:          892
+      n_type:          0xF
+      n_sect:          1
+      n_desc:          0
+      n_value:         8272
+    - n_strx:          948
+      n_type:          0xF
+      n_sect:          5
+      n_desc:          0
+      n_value:         15656
+    - n_strx:          1006
+      n_type:          0xF
+      n_sect:          1
+      n_desc:          0
+      n_value:         8192
+    - n_strx:          1050
+      n_type:          0xF
+      n_sect:          5
+      n_desc:          0
+      n_value:         15648
+    - n_strx:          1096
+      n_type:          0xF
+      n_sect:          1
+      n_desc:          0
+      n_value:         8240
+    - n_strx:          1140
+      n_type:          0xF
+      n_sect:          1
+      n_desc:          0
+      n_value:         8464
+    - n_strx:          1180
+      n_type:          0xF
+      n_sect:          19
+      n_desc:          0
+      n_value:         21144
+    - n_strx:          1220
+      n_type:          0xF
+      n_sect:          5
+      n_desc:          0
+      n_value:         15596
+    - n_strx:          1260
+      n_type:          0xF
+      n_sect:          19
+      n_desc:          0
+      n_value:         21208
+    - n_strx:          1299
+      n_type:          0xF
+      n_sect:          1
+      n_desc:          0
+      n_value:         8336
+    - n_strx:          1339
+      n_type:          0xF
+      n_sect:          1
+      n_desc:          0
+      n_value:         8304
+    - n_strx:          1379
+      n_type:          0xF
+      n_sect:          1
+      n_desc:          0
+      n_value:         8064
+    - n_strx:          1436
+      n_type:          0xF
+      n_sect:          5
+      n_desc:          0
+      n_value:         15588
+    - n_strx:          1495
+      n_type:          0xF
+      n_sect:          1
+      n_desc:          0
+      n_value:         7984
+    - n_strx:          1543
+      n_type:          0xF
+      n_sect:          5
+      n_desc:          0
+      n_value:         15580
+    - n_strx:          1593
+      n_type:          0xF
+      n_sect:          1
+      n_desc:          0
+      n_value:         8032
+    - n_strx:          1641
+      n_type:          0xF
+      n_sect:          1
+      n_desc:          0
+      n_value:         8432
+    - n_strx:          1685
+      n_type:          0xF
+      n_sect:          19
+      n_desc:          0
+      n_value:         20984
+    - n_strx:          1729
+      n_type:          0xF
+      n_sect:          5
+      n_desc:          0
+      n_value:         15528
+    - n_strx:          1773
+      n_type:          0xF
+      n_sect:          19
+      n_desc:          0
+      n_value:         21048
+    - n_strx:          1816
+      n_type:          0xF
+      n_sect:          1
+      n_desc:          0
+      n_value:         8128
+    - n_strx:          1860
+      n_type:          0xF
+      n_sect:          1
+      n_desc:          0
+      n_value:         8096
+    - n_strx:          1904
+      n_type:          0xF
+      n_sect:          1
+      n_desc:          0
+      n_value:         7856
+    - n_strx:          1945
+      n_type:          0xF
+      n_sect:          5
+      n_desc:          0
+      n_value:         15520
+    - n_strx:          1988
+      n_type:          0xF
+      n_sect:          1
+      n_desc:          0
+      n_value:         7776
+    - n_strx:          2020
+      n_type:          0xF
+      n_sect:          5
+      n_desc:          0
+      n_value:         15512
+    - n_strx:          2054
+      n_type:          0xF
+      n_sect:          1
+      n_desc:          0
+      n_value:         7824
+    - n_strx:          2086
+      n_type:          0xF
+      n_sect:          1
+      n_desc:          0
+      n_value:         8400
+    - n_strx:          2114
+      n_type:          0xF
+      n_sect:          19
+      n_desc:          0
+      n_value:         20824
+    - n_strx:          2142
+      n_type:          0xF
+      n_sect:          5
+      n_desc:          0
+      n_value:         15460
+    - n_strx:          2170
+      n_type:          0xF
+      n_sect:          19
+      n_desc:          0
+      n_value:         20888
+    - n_strx:          2197
+      n_type:          0xF
+      n_sect:          1
+      n_desc:          0
+      n_value:         7920
+    - n_strx:          2225
+      n_type:          0xF
+      n_sect:          1
+      n_desc:          0
+      n_value:         7888
+    - n_strx:          2253
+      n_type:          0xF
+      n_sect:          18
+      n_desc:          0
+      n_value:         20520
+    - n_strx:          2285
+      n_type:          0xF
+      n_sect:          18
+      n_desc:          0
+      n_value:         20600
+    - n_strx:          2310
+      n_type:          0xF
+      n_sect:          18
+      n_desc:          0
+      n_value:         20480
+    - n_strx:          2346
+      n_type:          0xF
+      n_sect:          18
+      n_desc:          0
+      n_value:         20560
+    - n_strx:          2375
+      n_type:          0xF
+      n_sect:          3
+      n_desc:          0
+      n_value:         14072
+    - n_strx:          2404
+      n_type:          0xF
+      n_sect:          3
+      n_desc:          0
+      n_value:         14016
+    - n_strx:          2433
+      n_type:          0xF
+      n_sect:          1
+      n_desc:          0
+      n_value:         6992
+    - n_strx:          2451
+      n_type:          0xF
+      n_sect:          1
+      n_desc:          0
+      n_value:         6960
+    - n_strx:          2479
+      n_type:          0xF
+      n_sect:          1
+      n_desc:          0
+      n_value:         6976
+    - n_strx:          2510
+      n_type:          0x1
+      n_sect:          0
+      n_desc:          1024
+      n_value:         0
+    - n_strx:          2518
+      n_type:          0x1
+      n_sect:          0
+      n_desc:          256
+      n_value:         0
+    - n_strx:          2541
+      n_type:          0x1
+      n_sect:          0
+      n_desc:          1024
+      n_value:         0
+    - n_strx:          2575
+      n_type:          0x1
+      n_sect:          0
+      n_desc:          256
+      n_value:         0
+    - n_strx:          2602
+      n_type:          0x1
+      n_sect:          0
+      n_desc:          1024
+      n_value:         0
+    - n_strx:          2640
+      n_type:          0x1
+      n_sect:          0
+      n_desc:          896
+      n_value:         0
+    - n_strx:          2648
+      n_type:          0x1
+      n_sect:          0
+      n_desc:          896
+      n_value:         0
+    - n_strx:          2655
+      n_type:          0x1
+      n_sect:          0
+      n_desc:          256
+      n_value:         0
+    - n_strx:          2674
+      n_type:          0x1
+      n_sect:          0
+      n_desc:          1344
+      n_value:         0
+    - n_strx:          2715
+      n_type:          0x1
+      n_sect:          0
+      n_desc:          1600
+      n_value:         0
+    - n_strx:          2748
+      n_type:          0x1
+      n_sect:          0
+      n_desc:          1856
+      n_value:         0
+    - n_strx:          2783
+      n_type:          0x1
+      n_sect:          0
+      n_desc:          2880
+      n_value:         0
+    - n_strx:          2820
+      n_type:          0x1
+      n_sect:          0
+      n_desc:          2112
+      n_value:         0
+    - n_strx:          2852
+      n_type:          0x1
+      n_sect:          0
+      n_desc:          2368
+      n_value:         0
+    - n_strx:          2889
+      n_type:          0x1
+      n_sect:          0
+      n_desc:          2624
+      n_value:         0
+    - n_strx:          2919
+      n_type:          0x1
+      n_sect:          0
+      n_desc:          1024
+      n_value:         0
+    - n_strx:          2957
+      n_type:          0x1
+      n_sect:          0
+      n_desc:          512
+      n_value:         0
+    - n_strx:          2964
+      n_type:          0x1
+      n_sect:          0
+      n_desc:          512
+      n_value:         0
+    - n_strx:          2981
+      n_type:          0x1
+      n_sect:          0
+      n_desc:          512
+      n_value:         0
+    - n_strx:          2988
+      n_type:          0x1
+      n_sect:          0
+      n_desc:          256
+      n_value:         0
+    - n_strx:          3003
+      n_type:          0x1
+      n_sect:          0
+      n_desc:          576
+      n_value:         0
+    - n_strx:          3015
+      n_type:          0x1
+      n_sect:          0
+      n_desc:          576
+      n_value:         0
+    - n_strx:          3036
+      n_type:          0x1
+      n_sect:          0
+      n_desc:          576
+      n_value:         0
+    - n_strx:          3060
+      n_type:          0x1
+      n_sect:          0
+      n_desc:          576
+      n_value:         0
+    - n_strx:          3083
+      n_type:          0x1
+      n_sect:          0
+      n_desc:          512
+      n_value:         0
+    - n_strx:          3107
+      n_type:          0x1
+      n_sect:          0
+      n_desc:          512
+      n_value:         0
+    - n_strx:          3129
+      n_type:          0x1
+      n_sect:          0
+      n_desc:          512
+      n_value:         0
+    - n_strx:          3148
+      n_type:          0x1
+      n_sect:          0
+      n_desc:          512
+      n_value:         0
+    - n_strx:          3169
+      n_type:          0x1
+      n_sect:          0
+      n_desc:          512
+      n_value:         0
+    - n_strx:          3188
+      n_type:          0x1
+      n_sect:          0
+      n_desc:          512
+      n_value:         0
+    - n_strx:          3209
+      n_type:          0x1
+      n_sect:          0
+      n_desc:          512
+      n_value:         0
+    - n_strx:          3232
+      n_type:          0x1
+      n_sect:          0
+      n_desc:          512
+      n_value:         0
+    - n_strx:          3252
+      n_type:          0x1
+      n_sect:          0
+      n_desc:          512
+      n_value:         0
+    - n_strx:          3272
+      n_type:          0x1
+      n_sect:          0
+      n_desc:          512
+      n_value:         0
+    - n_strx:          3295
+      n_type:          0x1
+      n_sect:          0
+      n_desc:          512
+      n_value:         0
+    - n_strx:          3317
+      n_type:          0x1
+      n_sect:          0
+      n_desc:          512
+      n_value:         0
+    - n_strx:          3344
+      n_type:          0x1
+      n_sect:          0
+      n_desc:          512
+      n_value:         0
+    - n_strx:          3368
+      n_type:          0x1
+      n_sect:          0
+      n_desc:          512
+      n_value:         0
+    - n_strx:          3395
+      n_type:          0x1
+      n_sect:          0
+      n_desc:          512
+      n_value:         0
+    - n_strx:          3419
+      n_type:          0x1
+      n_sect:          0
+      n_desc:          512
+      n_value:         0
+    - n_strx:          3440
+      n_type:          0x1
+      n_sect:          0
+      n_desc:          512
+      n_value:         0
+    - n_strx:          3463
+      n_type:          0x1
+      n_sect:          0
+      n_desc:          512
+      n_value:         0
+    - n_strx:          3489
+      n_type:          0x1
+      n_sect:          0
+      n_desc:          512
+      n_value:         0
+    - n_strx:          3515
+      n_type:          0x1
+      n_sect:          0
+      n_desc:          512
+      n_value:         0
+    - n_strx:          3538
+      n_type:          0x1
+      n_sect:          0
+      n_desc:          512
+      n_value:         0
+    - n_strx:          3561
+      n_type:          0x1
+      n_sect:          0
+      n_desc:          512
+      n_value:         0
+    - n_strx:          3582
+      n_type:          0x1
+      n_sect:          0
+      n_desc:          1024
+      n_value:         0
+    - n_strx:          3601
+      n_type:          0x1
+      n_sect:          0
+      n_desc:          1024
+      n_value:         0
+    - n_strx:          3620
+      n_type:          0x1
+      n_sect:          0
+      n_desc:          1024
+      n_value:         0
+    - n_strx:          3648
+      n_type:          0x1
+      n_sect:          0
+      n_desc:          1024
+      n_value:         0
+    - n_strx:          3665
+      n_type:          0x1
+      n_sect:          0
+      n_desc:          1024
+      n_value:         0
+    - n_strx:          3684
+      n_type:          0x1
+      n_sect:          0
+      n_desc:          1024
+      n_value:         0
+    - n_strx:          3696
+      n_type:          0x1
+      n_sect:          0
+      n_desc:          1024
+      n_value:         0
+    - n_strx:          3711
+      n_type:          0x1
+      n_sect:          0
+      n_desc:          1024
+      n_value:         0
+    - n_strx:          3725
+      n_type:          0x1
+      n_sect:          0
+      n_desc:          576
+      n_value:         0
+  StringTable:
+    - ' '
+    - '_$s14SuggestionsKit05TrailA0C14activeServices09AvailableE0AECvM'
+    - '_$s14SuggestionsKit05TrailA0C14activeServices09AvailableE0AECvMTq'
+    - '_$s14SuggestionsKit05TrailA0C14activeServices09AvailableE0AECvg'
+    - '_$s14SuggestionsKit05TrailA0C14activeServices09AvailableE0AECvgTq'
+    - '_$s14SuggestionsKit05TrailA0C14activeServices09AvailableE0AECvpMV'
+    - '_$s14SuggestionsKit05TrailA0C14activeServices09AvailableE0AECvpWvd'
+    - '_$s14SuggestionsKit05TrailA0C14activeServices09AvailableE0AECvpfi'
+    - '_$s14SuggestionsKit05TrailA0C14activeServices09AvailableE0AECvs'
+    - '_$s14SuggestionsKit05TrailA0C14activeServices09AvailableE0AECvsTq'
+    - '_$s14SuggestionsKit05TrailA0CACycfC'
+    - '_$s14SuggestionsKit05TrailA0CACycfCTq'
+    - '_$s14SuggestionsKit05TrailA0CACycfc'
+    - '_$s14SuggestionsKit05TrailA0CMa'
+    - '_$s14SuggestionsKit05TrailA0CMm'
+    - '_$s14SuggestionsKit05TrailA0CMn'
+    - '_$s14SuggestionsKit05TrailA0CN'
+    - '_$s14SuggestionsKit05TrailA0CfD'
+    - '_$s14SuggestionsKit05TrailA0Cfd'
+    - '_$s17AvailableServices12ServiceRaterC13publishRatingyyF'
+    - '_$s17AvailableServices12ServiceRaterC13publishRatingyyFTq'
+    - '_$s17AvailableServices12ServiceRaterCACycfC'
+    - '_$s17AvailableServices12ServiceRaterCACycfCTq'
+    - '_$s17AvailableServices12ServiceRaterCACycfc'
+    - '_$s17AvailableServices12ServiceRaterCMa'
+    - '_$s17AvailableServices12ServiceRaterCMm'
+    - '_$s17AvailableServices12ServiceRaterCMn'
+    - '_$s17AvailableServices12ServiceRaterCN'
+    - '_$s17AvailableServices12ServiceRaterCfD'
+    - '_$s17AvailableServices12ServiceRaterCfd'
+    - '_$s17AvailableServices16ServiceRequesterC10enterQueueyyF'
+    - '_$s17AvailableServices16ServiceRequesterC10enterQueueyyFTq'
+    - '_$s17AvailableServices16ServiceRequesterCACycfC'
+    - '_$s17AvailableServices16ServiceRequesterCACycfCTq'
+    - '_$s17AvailableServices16ServiceRequesterCACycfc'
+    - '_$s17AvailableServices16ServiceRequesterCMa'
+    - '_$s17AvailableServices16ServiceRequesterCMm'
+    - '_$s17AvailableServices16ServiceRequesterCMn'
+    - '_$s17AvailableServices16ServiceRequesterCN'
+    - '_$s17AvailableServices16ServiceRequesterCfD'
+    - '_$s17AvailableServices16ServiceRequesterCfd'
+    - '_$s17AvailableServicesAAC10getServiceyyF'
+    - '_$s17AvailableServicesAAC10getServiceyyFTq'
+    - '_$s17AvailableServicesAACABycfC'
+    - '_$s17AvailableServicesAACABycfCTq'
+    - '_$s17AvailableServicesAACABycfc'
+    - '_$s17AvailableServicesAACMa'
+    - '_$s17AvailableServicesAACMm'
+    - '_$s17AvailableServicesAACMn'
+    - '_$s17AvailableServicesAACN'
+    - '_$s17AvailableServicesAACfD'
+    - '_$s17AvailableServicesAACfd'
+    - '_OBJC_CLASS_$_PodcastSuggestion'
+    - '_OBJC_CLASS_$_Suggestion'
+    - '_OBJC_METACLASS_$_PodcastSuggestion'
+    - '_OBJC_METACLASS_$_Suggestion'
+    - _SuggestionsKitVersionNumber
+    - _SuggestionsKitVersionString
+    - _launchOnTestApps
+    - _setupTestSuggestionService
+    - _teardownTestSuggestionService
+    - '_$sBoWV'
+    - '_OBJC_CLASS_$_NSObject'
+    - '_OBJC_CLASS_$__TtCs12_SwiftObject'
+    - '_OBJC_METACLASS_$_NSObject'
+    - '_OBJC_METACLASS_$__TtCs12_SwiftObject'
+    - __ZdlPv
+    - __Znwm
+    - __objc_empty_cache
+    - '__swift_FORCE_LOAD_$_swiftCoreFoundation'
+    - '__swift_FORCE_LOAD_$_swiftDarwin'
+    - '__swift_FORCE_LOAD_$_swiftDispatch'
+    - '__swift_FORCE_LOAD_$_swiftFoundation'
+    - '__swift_FORCE_LOAD_$_swiftIOKit'
+    - '__swift_FORCE_LOAD_$_swiftObjectiveC'
+    - '__swift_FORCE_LOAD_$_swiftXPC'
+    - __swift_stdlib_operatingSystemVersion
+    - _abort
+    - _dispatch_once_f
+    - _dlsym
+    - _objc_opt_self
+    - _os_release
+    - _os_unfair_lock_lock
+    - _os_unfair_lock_trylock
+    - _os_unfair_lock_unlock
+    - _pthread_cond_broadcast
+    - _pthread_cond_destroy
+    - _pthread_cond_init
+    - _pthread_cond_signal
+    - _pthread_cond_wait
+    - _pthread_getspecific
+    - _pthread_mutex_destroy
+    - _pthread_mutex_init
+    - _pthread_mutex_lock
+    - _pthread_mutex_trylock
+    - _pthread_mutex_unlock
+    - _pthread_mutexattr_destroy
+    - _pthread_mutexattr_init
+    - _pthread_mutexattr_settype
+    - _pthread_rwlock_destroy
+    - _pthread_rwlock_init
+    - _pthread_rwlock_rdlock
+    - _pthread_rwlock_tryrdlock
+    - _pthread_rwlock_trywrlock
+    - _pthread_rwlock_unlock
+    - _pthread_rwlock_wrlock
+    - _pthread_setspecific
+    - _swift_allocObject
+    - _swift_beginAccess
+    - _swift_deallocClassInstance
+    - _swift_endAccess
+    - _swift_errorRetain
+    - _swift_once
+    - _swift_release
+    - _swift_retain
+    - _voucher_adopt
+    - '_$s14SuggestionsKit05TrailA0C14activeServices09AvailableE0AECvpACTK'
+    - '_$s14SuggestionsKit05TrailA0C14activeServices09AvailableE0AECvpACTk'
+    - '_$s14SuggestionsKit05TrailA0C14activeServices09AvailableE0AECvM.resume.0'
+    - __ZN5swift9AsyncTask10waitFutureEPS0_PNS_12AsyncContextEPU14swiftasynccallFvU19swift_async_contextS3_ES3_PNS_11OpaqueValueE
+    - __ZN5swift38swift56override_swift_task_future_waitEPNS_11OpaqueValueEPNS_12AsyncContextEPNS_9AsyncTaskEPU14swiftasynccallFvU19swift_async_contextS3_ES3_PU14swiftasynccallFvS1_U19swift_async_contextS3_S5_S7_S3_E
+    - __ZL31task_future_wait_resume_adapterPN5swift12AsyncContextE
+    - __ZN5swift47swift56override_swift_task_future_wait_throwingEPNS_11OpaqueValueEPNS_12AsyncContextEPNS_9AsyncTaskEPU14swiftasynccallFvU19swift_async_contextS3_U13swift_contextPvES3_PU14swiftasynccallFvS1_U19swift_async_contextS3_S5_S8_S3_E
+    - __ZL33task_wait_throwing_resume_adapterPN5swift12AsyncContextE
+    - __ZN5swift40swift56override_swift_task_create_commonEmPNS_16TaskOptionRecordEPKNS_14TargetMetadataINS_9InProcessEEEPU14swiftasynccallFvU19swift_async_contextPNS_12AsyncContextEEPvmPU9swiftcallFNS_19AsyncTaskAndContextEmS1_S6_SA_SB_mE
+    - __ZN5swift9AsyncTask18flagAsRunning_slowEv
+    - __ZN5swift9AsyncTask20flagAsSuspended_slowEv
+    - __ZN5swift31swift_task_escalateBackdeploy56EPNS_9AsyncTaskENS_11JobPriorityE
+    - '__ZZZN5swift31swift_task_escalateBackdeploy56EPNS_9AsyncTaskENS_11JobPriorityEENK3$_0clEvENUlPvE_8__invokeES4_'
+    - __ZN5swiftL25waitForStatusRecordUnlockEPNS_9AsyncTaskERNS_16ActiveTaskStatusE
+    - __ZN5swift28swift_Concurrency_fatalErrorEjPKcz
+    - __ZN5swift21swift_task_getCurrentEv
+    - __ZN5swift24_swift_task_clearCurrentEv
+    - __ZN5swift16adoptTaskVoucherEPNS_9AsyncTaskE
+    - __ZN5swift18restoreTaskVoucherEPNS_9AsyncTaskE
+    - __ZN5swift14VoucherManager19vouchersAreDisabledEv
+    - __ZL27_initializeVouchersDisabledPv
+    - __ZN5swift14VoucherManager9swapToJobEPNS_3JobE
+    - __ZZZL25swift_voucher_needs_adoptP9voucher_sENKUlvE_clEvENUlPvE_8__invokeES2_
+    - __ZN5swift19_swift_tsan_acquireEPv
+    - __ZN5swift19_swift_tsan_releaseEPv
+    - '__ZZZN5swift19_swift_tsan_acquireEPvENK3$_0clEvENUlS0_E_8__invokeES0_'
+    - '__ZZZN5swift19_swift_tsan_releaseEPvENK3$_0clEvENUlS0_E_8__invokeES0_'
+    - __ZN5swift23ConditionPlatformHelper4initER22_opaque_pthread_cond_t
+    - __ZL9errorNamei
+    - __ZN5swift23ConditionPlatformHelper7destroyER22_opaque_pthread_cond_t
+    - __ZN5swift23ConditionPlatformHelper9notifyOneER22_opaque_pthread_cond_t
+    - __ZN5swift23ConditionPlatformHelper9notifyAllER22_opaque_pthread_cond_t
+    - __ZN5swift23ConditionPlatformHelper4waitER22_opaque_pthread_cond_tR23_opaque_pthread_mutex_t
+    - __ZN5swift19MutexPlatformHelper4initER23_opaque_pthread_mutex_tb
+    - __ZN5swift19MutexPlatformHelper7destroyER23_opaque_pthread_mutex_t
+    - __ZN5swift19MutexPlatformHelper4lockER23_opaque_pthread_mutex_t
+    - __ZN5swift19MutexPlatformHelper6unlockER23_opaque_pthread_mutex_t
+    - __ZN5swift19MutexPlatformHelper8try_lockER23_opaque_pthread_mutex_t
+    - __ZN5swift19MutexPlatformHelper4initER16os_unfair_lock_sb
+    - __ZN5swift19MutexPlatformHelper7destroyER16os_unfair_lock_s
+    - __ZN5swift19MutexPlatformHelper4lockER16os_unfair_lock_s
+    - __ZN5swift19MutexPlatformHelper6unlockER16os_unfair_lock_s
+    - __ZN5swift19MutexPlatformHelper8try_lockER16os_unfair_lock_s
+    - __ZN5swift27ReadWriteLockPlatformHelper4initER24_opaque_pthread_rwlock_t
+    - __ZN5swift27ReadWriteLockPlatformHelper7destroyER24_opaque_pthread_rwlock_t
+    - __ZN5swift27ReadWriteLockPlatformHelper8readLockER24_opaque_pthread_rwlock_t
+    - __ZN5swift27ReadWriteLockPlatformHelper12try_readLockER24_opaque_pthread_rwlock_t
+    - __ZN5swift27ReadWriteLockPlatformHelper9writeLockER24_opaque_pthread_rwlock_t
+    - __ZN5swift27ReadWriteLockPlatformHelper13try_writeLockER24_opaque_pthread_rwlock_t
+    - __ZN5swift27ReadWriteLockPlatformHelper10readUnlockER24_opaque_pthread_rwlock_t
+    - __ZN5swift27ReadWriteLockPlatformHelper11writeUnlockER24_opaque_pthread_rwlock_t
+    - __ZN5swift46swift_task_enterThreadLocalContextBackdeploy56EPc
+    - __ZN5swift45swift_task_exitThreadLocalContextBackdeploy56EPc
+    - '__ZZZN5swift46swift_task_enterThreadLocalContextBackdeploy56EPcENK3$_0clEvENUlPvE_8__invokeES2_'
+    - '__ZZZN5swift45swift_task_exitThreadLocalContextBackdeploy56EPcENK3$_0clEvENUlPvE_8__invokeES2_'
+    - ___swift_reflection_version
+    - '_$s14SuggestionsKitMXM'
+    - '_$s17AvailableServicesMXM'
+    - _symbolic _____ 14SuggestionsKit05TrailA0C
+    - _symbolic _____ 17AvailableServicesAAC
+    - _symbolic _____ 17AvailableServices16ServiceRequesterC
+    - _symbolic _____ 17AvailableServices12ServiceRaterC
+    - '_$s14SuggestionsKit05TrailA0CMF'
+    - '_$s17AvailableServicesAACMF'
+    - '_$s17AvailableServices16ServiceRequesterCMF'
+    - '_$s17AvailableServices12ServiceRaterCMF'
+    - '__swift_FORCE_LOAD_$_swiftFoundation_$_SuggestionsKit'
+    - '__swift_FORCE_LOAD_$_swiftObjectiveC_$_SuggestionsKit'
+    - '__swift_FORCE_LOAD_$_swiftDarwin_$_SuggestionsKit'
+    - '__swift_FORCE_LOAD_$_swiftCoreFoundation_$_SuggestionsKit'
+    - '__swift_FORCE_LOAD_$_swiftDispatch_$_SuggestionsKit'
+    - '__swift_FORCE_LOAD_$_swiftXPC_$_SuggestionsKit'
+    - '__swift_FORCE_LOAD_$_swiftIOKit_$_SuggestionsKit'
+    - '__swift_FORCE_LOAD_$_swiftCompatibility56_$_SuggestionsKit'
+    - '__swift_FORCE_LOAD_$_swiftFoundation_$_AvailableServices'
+    - '__swift_FORCE_LOAD_$_swiftObjectiveC_$_AvailableServices'
+    - '__swift_FORCE_LOAD_$_swiftDarwin_$_AvailableServices'
+    - '__swift_FORCE_LOAD_$_swiftCoreFoundation_$_AvailableServices'
+    - '__swift_FORCE_LOAD_$_swiftDispatch_$_AvailableServices'
+    - '__swift_FORCE_LOAD_$_swiftXPC_$_AvailableServices'
+    - '__swift_FORCE_LOAD_$_swiftIOKit_$_AvailableServices'
+    - '__swift_FORCE_LOAD_$_swiftCompatibility56_$_AvailableServices'
+    - '__OBJC_METACLASS_RO_$_PodcastSuggestion'
+    - '__OBJC_CLASS_RO_$_PodcastSuggestion'
+    - '__OBJC_METACLASS_RO_$_Suggestion'
+    - '__OBJC_CLASS_RO_$_Suggestion'
+    - __METACLASS_DATA__TtC14SuggestionsKit16TrailSuggestions
+    - __IVARS__TtC14SuggestionsKit16TrailSuggestions
+    - __DATA__TtC14SuggestionsKit16TrailSuggestions
+    - __METACLASS_DATA__TtC17AvailableServices17AvailableServices
+    - __DATA__TtC17AvailableServices17AvailableServices
+    - __METACLASS_DATA__TtC17AvailableServices16ServiceRequester
+    - __DATA__TtC17AvailableServices16ServiceRequester
+    - __METACLASS_DATA__TtC17AvailableServices12ServiceRater
+    - __DATA__TtC17AvailableServices12ServiceRater
+    - '_$s14SuggestionsKit05TrailA0CMf'
+    - '_$s17AvailableServicesAACMf'
+    - '_$s17AvailableServices16ServiceRequesterCMf'
+    - '_$s17AvailableServices12ServiceRaterCMf'
+    - '__swift_FORCE_LOAD_$_swiftCompatibility56'
+    - _Swift56ConcurrencyOverrides
+    - _Swift56RuntimeOverrides
+    - __ZN5swift25TaskAllocatorSlabMetadataE
+    - '__ZZZN5swift31swift_task_escalateBackdeploy56EPNS_9AsyncTaskENS_11JobPriorityEENK3$_0clEvE7TheLazy'
+    - __ZN5swiftL20StatusRecordLockLockE
+    - __ZL23voucherDisableCheckOnce
+    - __ZL16vouchersDisabled
+    - __ZZZL25swift_voucher_needs_adoptP9voucher_sENKUlvE_clEvE7TheLazy
+    - '__ZZZN5swift19_swift_tsan_acquireEPvENK3$_0clEvE7TheLazy'
+    - '__ZZZN5swift19_swift_tsan_releaseEPvENK3$_0clEvE7TheLazy'
+    - '__ZZZN5swift46swift_task_enterThreadLocalContextBackdeploy56EPcENK3$_0clEvE7TheLazy'
+    - '__ZZZN5swift45swift_task_exitThreadLocalContextBackdeploy56EPcENK3$_0clEvE7TheLazy'
+    - '/Users/cishida/Library/Developer/Xcode/DerivedData/SuggestionsKit-cqcvpwifregfbkgcgfkoxwikfhff/Build/Intermediates.noindex/InstallIntermediates/macosx/Intermediates.noindex/SuggestionsKit.build/Debug/SuggestionsKit.build/Objects-normal/x86_64/SuggestionsKit.swiftmodule'
+    - '/Users/cishida/Library/Developer/Xcode/DerivedData/SuggestionsKit-cqcvpwifregfbkgcgfkoxwikfhff/Build/Intermediates.noindex/InstallIntermediates/macosx/Intermediates.noindex/SuggestionsKit.build/Debug/AvailableServices.build/Objects-normal/x86_64/AvailableServices.swiftmodule'
+    - '/Users/cishida/Library/Developer/Xcode/DerivedData/SuggestionsKit-cqcvpwifregfbkgcgfkoxwikfhff/Build/Intermediates.noindex/InstallIntermediates/macosx/Intermediates.noindex/SuggestionsKit.build/Debug/SuggestionsKit.build/DerivedSources/'
+    - SuggestionsKit_vers.c
+    - '/Users/cishida/Library/Developer/Xcode/DerivedData/SuggestionsKit-cqcvpwifregfbkgcgfkoxwikfhff/Build/Intermediates.noindex/InstallIntermediates/macosx/Intermediates.noindex/SuggestionsKit.build/Debug/SuggestionsKit.build/Objects-normal/x86_64/SuggestionsKit_vers.o'
+    - _SuggestionsKitVersionString
+    - _SuggestionsKitVersionNumber
+    - '/Users/cishida/Projects/suggestionskit/SuggestionsKit/'
+    - PodcastSuggestion.m
+    - '/Users/cishida/Library/Developer/Xcode/DerivedData/SuggestionsKit-cqcvpwifregfbkgcgfkoxwikfhff/Build/Intermediates.noindex/InstallIntermediates/macosx/Intermediates.noindex/SuggestionsKit.build/Debug/SuggestionsKit.build/Objects-normal/x86_64/PodcastSuggestion.o'
+    - '__OBJC_METACLASS_RO_$_PodcastSuggestion'
+    - '__OBJC_CLASS_RO_$_PodcastSuggestion'
+    - '_OBJC_METACLASS_$_PodcastSuggestion'
+    - '_OBJC_CLASS_$_PodcastSuggestion'
+    - '/Users/cishida/Projects/suggestionskit/SuggestionsKit/'
+    - PrivateHelpers.m
+    - '/Users/cishida/Library/Developer/Xcode/DerivedData/SuggestionsKit-cqcvpwifregfbkgcgfkoxwikfhff/Build/Intermediates.noindex/InstallIntermediates/macosx/Intermediates.noindex/SuggestionsKit.build/Debug/SuggestionsKit.build/Objects-normal/x86_64/PrivateHelpers.o'
+    - _setupTestSuggestionService
+    - _teardownTestSuggestionService
+    - _launchOnTestApps
+    - '/Users/cishida/Projects/suggestionskit/SuggestionsKit/'
+    - Suggestion.m
+    - '/Users/cishida/Library/Developer/Xcode/DerivedData/SuggestionsKit-cqcvpwifregfbkgcgfkoxwikfhff/Build/Intermediates.noindex/InstallIntermediates/macosx/Intermediates.noindex/SuggestionsKit.build/Debug/SuggestionsKit.build/Objects-normal/x86_64/Suggestion.o'
+    - '__OBJC_METACLASS_RO_$_Suggestion'
+    - '__OBJC_CLASS_RO_$_Suggestion'
+    - '_OBJC_METACLASS_$_Suggestion'
+    - '_OBJC_CLASS_$_Suggestion'
+    - '/Users/cishida/Projects/suggestionskit/SuggestionsKit/'
+    - TrailSuggestions.swift
+    - '/Users/cishida/Library/Developer/Xcode/DerivedData/SuggestionsKit-cqcvpwifregfbkgcgfkoxwikfhff/Build/Intermediates.noindex/InstallIntermediates/macosx/Intermediates.noindex/SuggestionsKit.build/Debug/SuggestionsKit.build/Objects-normal/x86_64/TrailSuggestions.o'
+    - '_$s14SuggestionsKit05TrailA0C14activeServices09AvailableE0AECvpfi'
+    - '_$s14SuggestionsKit05TrailA0C14activeServices09AvailableE0AECvpACTK'
+    - '_$s14SuggestionsKit05TrailA0C14activeServices09AvailableE0AECvpACTk'
+    - '_$s14SuggestionsKit05TrailA0C14activeServices09AvailableE0AECvg'
+    - '_$s14SuggestionsKit05TrailA0C14activeServices09AvailableE0AECvs'
+    - '_$s14SuggestionsKit05TrailA0C14activeServices09AvailableE0AECvM'
+    - '_$s14SuggestionsKit05TrailA0C14activeServices09AvailableE0AECvM.resume.0'
+    - '_$s14SuggestionsKit05TrailA0Cfd'
+    - '_$s14SuggestionsKit05TrailA0CfD'
+    - '_$s14SuggestionsKit05TrailA0CACycfC'
+    - '_$s14SuggestionsKit05TrailA0CACycfc'
+    - '_$s14SuggestionsKit05TrailA0CMa'
+    - '_$s14SuggestionsKit05TrailA0C14activeServices09AvailableE0AECvpWvd'
+    - ___swift_reflection_version
+    - '_$s14SuggestionsKitMXM'
+    - '_$s14SuggestionsKit05TrailA0CMn'
+    - '_$s14SuggestionsKit05TrailA0C14activeServices09AvailableE0AECvgTq'
+    - '_$s14SuggestionsKit05TrailA0C14activeServices09AvailableE0AECvsTq'
+    - '_$s14SuggestionsKit05TrailA0C14activeServices09AvailableE0AECvMTq'
+    - '_$s14SuggestionsKit05TrailA0CACycfCTq'
+    - _symbolic _____ 14SuggestionsKit05TrailA0C
+    - _symbolic _____ 17AvailableServicesAAC
+    - '_$s14SuggestionsKit05TrailA0CMF'
+    - '_$s14SuggestionsKit05TrailA0C14activeServices09AvailableE0AECvpMV'
+    - '__swift_FORCE_LOAD_$_swiftFoundation_$_SuggestionsKit'
+    - '__swift_FORCE_LOAD_$_swiftObjectiveC_$_SuggestionsKit'
+    - '__swift_FORCE_LOAD_$_swiftDarwin_$_SuggestionsKit'
+    - '__swift_FORCE_LOAD_$_swiftCoreFoundation_$_SuggestionsKit'
+    - '__swift_FORCE_LOAD_$_swiftDispatch_$_SuggestionsKit'
+    - '__swift_FORCE_LOAD_$_swiftXPC_$_SuggestionsKit'
+    - '__swift_FORCE_LOAD_$_swiftIOKit_$_SuggestionsKit'
+    - '__swift_FORCE_LOAD_$_swiftCompatibility56_$_SuggestionsKit'
+    - __METACLASS_DATA__TtC14SuggestionsKit16TrailSuggestions
+    - __IVARS__TtC14SuggestionsKit16TrailSuggestions
+    - __DATA__TtC14SuggestionsKit16TrailSuggestions
+    - '_$s14SuggestionsKit05TrailA0CMm'
+    - '_$s14SuggestionsKit05TrailA0CMf'
+    - '_$s14SuggestionsKit05TrailA0CN'
+    - '/Users/cishida/Projects/suggestionskit/AvailableServices/'
+    - Services.swift
+    - '/Users/cishida/Library/Developer/Xcode/DerivedData/SuggestionsKit-cqcvpwifregfbkgcgfkoxwikfhff/Build/Intermediates.noindex/InstallIntermediates/macosx/Products/Debug/libAvailableServices.a(Services.o)'
+    - '_$s17AvailableServicesAACABycfC'
+    - '_$s17AvailableServicesAACABycfc'
+    - '_$s17AvailableServicesAAC10getServiceyyF'
+    - '_$s17AvailableServicesAACfd'
+    - '_$s17AvailableServicesAACfD'
+    - '_$s17AvailableServices16ServiceRequesterCACycfC'
+    - '_$s17AvailableServices16ServiceRequesterCACycfc'
+    - '_$s17AvailableServices16ServiceRequesterC10enterQueueyyF'
+    - '_$s17AvailableServices16ServiceRequesterCfd'
+    - '_$s17AvailableServices16ServiceRequesterCfD'
+    - '_$s17AvailableServices12ServiceRaterCACycfC'
+    - '_$s17AvailableServices12ServiceRaterCACycfc'
+    - '_$s17AvailableServices12ServiceRaterC13publishRatingyyF'
+    - '_$s17AvailableServices12ServiceRaterCfd'
+    - '_$s17AvailableServices12ServiceRaterCfD'
+    - '_$s17AvailableServicesAACMa'
+    - '_$s17AvailableServices16ServiceRequesterCMa'
+    - '_$s17AvailableServices12ServiceRaterCMa'
+    - '_$s17AvailableServicesMXM'
+    - '_$s17AvailableServicesAACMn'
+    - '_$s17AvailableServicesAACABycfCTq'
+    - '_$s17AvailableServicesAAC10getServiceyyFTq'
+    - '_$s17AvailableServices16ServiceRequesterCMn'
+    - '_$s17AvailableServices16ServiceRequesterCACycfCTq'
+    - '_$s17AvailableServices16ServiceRequesterC10enterQueueyyFTq'
+    - '_$s17AvailableServices12ServiceRaterCMn'
+    - '_$s17AvailableServices12ServiceRaterCACycfCTq'
+    - '_$s17AvailableServices12ServiceRaterC13publishRatingyyFTq'
+    - _symbolic _____ 17AvailableServices16ServiceRequesterC
+    - _symbolic _____ 17AvailableServices12ServiceRaterC
+    - '_$s17AvailableServicesAACMF'
+    - '_$s17AvailableServices16ServiceRequesterCMF'
+    - '_$s17AvailableServices12ServiceRaterCMF'
+    - '__swift_FORCE_LOAD_$_swiftFoundation_$_AvailableServices'
+    - '__swift_FORCE_LOAD_$_swiftObjectiveC_$_AvailableServices'
+    - '__swift_FORCE_LOAD_$_swiftDarwin_$_AvailableServices'
+    - '__swift_FORCE_LOAD_$_swiftCoreFoundation_$_AvailableServices'
+    - '__swift_FORCE_LOAD_$_swiftDispatch_$_AvailableServices'
+    - '__swift_FORCE_LOAD_$_swiftXPC_$_AvailableServices'
+    - '__swift_FORCE_LOAD_$_swiftIOKit_$_AvailableServices'
+    - '__swift_FORCE_LOAD_$_swiftCompatibility56_$_AvailableServices'
+    - __METACLASS_DATA__TtC17AvailableServices17AvailableServices
+    - __DATA__TtC17AvailableServices17AvailableServices
+    - __METACLASS_DATA__TtC17AvailableServices16ServiceRequester
+    - __DATA__TtC17AvailableServices16ServiceRequester
+    - __METACLASS_DATA__TtC17AvailableServices12ServiceRater
+    - __DATA__TtC17AvailableServices12ServiceRater
+    - '_$s17AvailableServicesAACMm'
+    - '_$s17AvailableServicesAACMf'
+    - '_$s17AvailableServicesAACN'
+    - '_$s17AvailableServices16ServiceRequesterCMm'
+    - '_$s17AvailableServices16ServiceRequesterCMf'
+    - '_$s17AvailableServices16ServiceRequesterCN'
+    - '_$s17AvailableServices12ServiceRaterCMm'
+    - '_$s17AvailableServices12ServiceRaterCMf'
+    - '_$s17AvailableServices12ServiceRaterCN'
+    - ''
+    - ''
+    - ''
+    - ''
+  IndirectSymbols: [ 0x19A, 0x19B, 0x1A4, 0x1A5, 0x1A6, 0x1A7, 0x1A8, 0x1A9, 
+                     0x1AA, 0x1AB, 0x1AC, 0x1AD, 0x1AE, 0x1AF, 0x1B0, 0x1B1, 
+                     0x1B2, 0x1B3, 0x1B4, 0x1B5, 0x1B6, 0x1B7, 0x1B8, 0x1B9, 
+                     0x1BA, 0x1BB, 0x1BC, 0x1BD, 0x1BE, 0x1BF, 0x1C0, 0x1C1, 
+                     0x1C2, 0x1C3, 0x1C4, 0x1C5, 0x1C6, 0x1C7, 0x1C8, 0x1C9, 
+                     0x1CA, 0x1CB, 0x80000000, 0x19A, 0x19B, 0x1A4, 0x1A5, 
+                     0x1A6, 0x1A7, 0x1A8, 0x1A9, 0x1AA, 0x1AB, 0x1AC, 0x1AD, 
+                     0x1AE, 0x1AF, 0x1B0, 0x1B1, 0x1B2, 0x1B3, 0x1B4, 0x1B5, 
+                     0x1B6, 0x1B7, 0x1B8, 0x1B9, 0x1BA, 0x1BB, 0x1BC, 0x1BD, 
+                     0x1BE, 0x1BF, 0x1C0, 0x1C1, 0x1C2, 0x1C3, 0x1C4, 0x1C5, 
+                     0x1C6, 0x1C7, 0x1C8, 0x1C9, 0x1CA, 0x1CB ]
+  FunctionStarts:  [ 0x1B30, 0x1B40, 0x1B50, 0x1B60, 0x1B80, 0x1BD0, 0x1C40, 
+                     0x1C90, 0x1CF0, 0x1D30, 0x1D60, 0x1D90, 0x1DD0, 0x1E00, 
+                     0x1E40, 0x1E60, 0x1E90, 0x1EB0, 0x1ED0, 0x1EF0, 0x1F30, 
+                     0x1F60, 0x1F80, 0x1FA0, 0x1FC0, 0x2000, 0x2030, 0x2050, 
+                     0x2070, 0x2090, 0x20D0, 0x20F0, 0x2110, 0x2130, 0x2370, 
+                     0x2460, 0x2490, 0x25A0, 0x25D0, 0x25F0, 0x2780, 0x2920, 
+                     0x2970, 0x29A0, 0x2AC0, 0x2AD0, 0x2AE0, 0x2B10, 0x2B40, 
+                     0x2BE0, 0x2C10, 0x2C50, 0x2D10, 0x2D40, 0x2D90, 0x2DE0, 
+                     0x2E10, 0x2E40, 0x2E80, 0x2F60, 0x2FA0, 0x2FE0, 0x3020, 
+                     0x3060, 0x3140, 0x3180, 0x31C0, 0x3200, 0x3250, 0x3260, 
+                     0x3270, 0x3280, 0x3290, 0x32A0, 0x32E0, 0x3320, 0x3360, 
+                     0x33B0, 0x33F0, 0x3440, 0x3480, 0x34C0, 0x3510, 0x3560, 
+                     0x3590 ]
+  ChainedFixups:   [ 0x0, 0x0, 0x0, 0x0, 0x20, 0x0, 0x0, 0x0, 0x68, 0x0, 
+                     0x0, 0x0, 0x28, 0x1, 0x0, 0x0, 0x30, 0x0, 0x0, 0x0, 
+                     0x1, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 
+                     0x0, 0x0, 0x4, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 
+                     0x18, 0x0, 0x0, 0x0, 0x30, 0x0, 0x0, 0x0, 0x0, 0x0, 
+                     0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x18, 0x0, 0x0, 0x0, 
+                     0x0, 0x10, 0x6, 0x0, 0x0, 0x40, 0x0, 0x0, 0x0, 0x0, 
+                     0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0x0, 0x0, 0x0, 
+                     0x18, 0x0, 0x0, 0x0, 0x0, 0x10, 0x6, 0x0, 0x0, 0x50, 
+                     0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 
+                     0x1, 0x0, 0x0, 0x0, 0xFD, 0x2, 0x0, 0x0, 0xFD, 0x12, 
+                     0x0, 0x0, 0x4, 0x20, 0x0, 0x0, 0x2, 0x6C, 0x0, 0x0, 
+                     0x2, 0x7A, 0x0, 0x0, 0x2, 0x9C, 0x0, 0x0, 0x1, 0xAA, 
+                     0x0, 0x0, 0x2, 0xC9, 0x0, 0x0, 0x2, 0xE1, 0x0, 0x0, 
+                     0x2, 0xB, 0x1, 0x0, 0x2, 0x3B, 0x1, 0x0, 0x2, 0x68, 
+                     0x1, 0x0, 0x2, 0x98, 0x1, 0x0, 0x2, 0xC4, 0x1, 0x0, 
+                     0x2, 0xEA, 0x1, 0x0, 0x2, 0x14, 0x2, 0x0, 0x2, 0x3A, 
+                     0x2, 0x0, 0x2, 0x64, 0x2, 0x0, 0x2, 0x92, 0x2, 0x0, 
+                     0x2, 0xBA, 0x2, 0x0, 0x2, 0xE2, 0x2, 0x0, 0x2, 0x10, 
+                     0x3, 0x0, 0x2, 0x3C, 0x3, 0x0, 0x2, 0x72, 0x3, 0x0, 
+                     0x2, 0xA2, 0x3, 0x0, 0x2, 0xD8, 0x3, 0x0, 0x2, 0x8, 
+                     0x4, 0x0, 0x2, 0x32, 0x4, 0x0, 0x2, 0x60, 0x4, 0x0, 
+                     0x2, 0x94, 0x4, 0x0, 0x2, 0xC8, 0x4, 0x0, 0x2, 0xF6, 
+                     0x4, 0x0, 0x2, 0x24, 0x5, 0x0, 0x4, 0x4E, 0x5, 0x0, 
+                     0x4, 0x74, 0x5, 0x0, 0x4, 0x9A, 0x5, 0x0, 0x4, 0xD2, 
+                     0x5, 0x0, 0x4, 0xF4, 0x5, 0x0, 0x4, 0x1A, 0x6, 0x0, 
+                     0x4, 0x32, 0x6, 0x0, 0x4, 0x50, 0x6, 0x0, 0x2, 0x6D, 
+                     0x6, 0x0, 0x1, 0x8A, 0x6, 0x0, 0x1, 0xB0, 0x6, 0x0, 
+                     0x1, 0xE6, 0x6, 0x0, 0x4, 0x14, 0x7, 0x0, 0x4, 0x60, 
+                     0x7, 0x0, 0x4, 0x70, 0x7, 0x0, 0x0, 0x5F, 0x5F, 0x5A, 
+                     0x64, 0x6C, 0x50, 0x76, 0x0, 0x5F, 0x5F, 0x5A, 0x6E, 
+                     0x77, 0x6D, 0x0, 0x5F, 0x5F, 0x73, 0x77, 0x69, 0x66, 
+                     0x74, 0x5F, 0x73, 0x74, 0x64, 0x6C, 0x69, 0x62, 0x5F, 
+                     0x6F, 0x70, 0x65, 0x72, 0x61, 0x74, 0x69, 0x6E, 0x67, 
+                     0x53, 0x79, 0x73, 0x74, 0x65, 0x6D, 0x56, 0x65, 0x72, 
+                     0x73, 0x69, 0x6F, 0x6E, 0x0, 0x5F, 0x61, 0x62, 0x6F, 
+                     0x72, 0x74, 0x0, 0x5F, 0x64, 0x69, 0x73, 0x70, 0x61, 
+                     0x74, 0x63, 0x68, 0x5F, 0x6F, 0x6E, 0x63, 0x65, 0x5F, 
+                     0x66, 0x0, 0x5F, 0x64, 0x6C, 0x73, 0x79, 0x6D, 0x0, 
+                     0x5F, 0x6F, 0x62, 0x6A, 0x63, 0x5F, 0x6F, 0x70, 0x74, 
+                     0x5F, 0x73, 0x65, 0x6C, 0x66, 0x0, 0x5F, 0x6F, 0x73, 
+                     0x5F, 0x72, 0x65, 0x6C, 0x65, 0x61, 0x73, 0x65, 0x0, 
+                     0x5F, 0x6F, 0x73, 0x5F, 0x75, 0x6E, 0x66, 0x61, 0x69, 
+                     0x72, 0x5F, 0x6C, 0x6F, 0x63, 0x6B, 0x5F, 0x6C, 0x6F, 
+                     0x63, 0x6B, 0x0, 0x5F, 0x6F, 0x73, 0x5F, 0x75, 0x6E, 
+                     0x66, 0x61, 0x69, 0x72, 0x5F, 0x6C, 0x6F, 0x63, 0x6B, 
+                     0x5F, 0x74, 0x72, 0x79, 0x6C, 0x6F, 0x63, 0x6B, 0x0, 
+                     0x5F, 0x6F, 0x73, 0x5F, 0x75, 0x6E, 0x66, 0x61, 0x69, 
+                     0x72, 0x5F, 0x6C, 0x6F, 0x63, 0x6B, 0x5F, 0x75, 0x6E, 
+                     0x6C, 0x6F, 0x63, 0x6B, 0x0, 0x5F, 0x70, 0x74, 0x68, 
+                     0x72, 0x65, 0x61, 0x64, 0x5F, 0x63, 0x6F, 0x6E, 0x64, 
+                     0x5F, 0x62, 0x72, 0x6F, 0x61, 0x64, 0x63, 0x61, 0x73, 
+                     0x74, 0x0, 0x5F, 0x70, 0x74, 0x68, 0x72, 0x65, 0x61, 
+                     0x64, 0x5F, 0x63, 0x6F, 0x6E, 0x64, 0x5F, 0x64, 0x65, 
+                     0x73, 0x74, 0x72, 0x6F, 0x79, 0x0, 0x5F, 0x70, 0x74, 
+                     0x68, 0x72, 0x65, 0x61, 0x64, 0x5F, 0x63, 0x6F, 0x6E, 
+                     0x64, 0x5F, 0x69, 0x6E, 0x69, 0x74, 0x0, 0x5F, 0x70, 
+                     0x74, 0x68, 0x72, 0x65, 0x61, 0x64, 0x5F, 0x63, 0x6F, 
+                     0x6E, 0x64, 0x5F, 0x73, 0x69, 0x67, 0x6E, 0x61, 0x6C, 
+                     0x0, 0x5F, 0x70, 0x74, 0x68, 0x72, 0x65, 0x61, 0x64, 
+                     0x5F, 0x63, 0x6F, 0x6E, 0x64, 0x5F, 0x77, 0x61, 0x69, 
+                     0x74, 0x0, 0x5F, 0x70, 0x74, 0x68, 0x72, 0x65, 0x61, 
+                     0x64, 0x5F, 0x67, 0x65, 0x74, 0x73, 0x70, 0x65, 0x63, 
+                     0x69, 0x66, 0x69, 0x63, 0x0, 0x5F, 0x70, 0x74, 0x68, 
+                     0x72, 0x65, 0x61, 0x64, 0x5F, 0x6D, 0x75, 0x74, 0x65, 
+                     0x78, 0x5F, 0x64, 0x65, 0x73, 0x74, 0x72, 0x6F, 0x79, 
+                     0x0, 0x5F, 0x70, 0x74, 0x68, 0x72, 0x65, 0x61, 0x64, 
+                     0x5F, 0x6D, 0x75, 0x74, 0x65, 0x78, 0x5F, 0x69, 0x6E, 
+                     0x69, 0x74, 0x0, 0x5F, 0x70, 0x74, 0x68, 0x72, 0x65, 
+                     0x61, 0x64, 0x5F, 0x6D, 0x75, 0x74, 0x65, 0x78, 0x5F, 
+                     0x6C, 0x6F, 0x63, 0x6B, 0x0, 0x5F, 0x70, 0x74, 0x68, 
+                     0x72, 0x65, 0x61, 0x64, 0x5F, 0x6D, 0x75, 0x74, 0x65, 
+                     0x78, 0x5F, 0x74, 0x72, 0x79, 0x6C, 0x6F, 0x63, 0x6B, 
+                     0x0, 0x5F, 0x70, 0x74, 0x68, 0x72, 0x65, 0x61, 0x64, 
+                     0x5F, 0x6D, 0x75, 0x74, 0x65, 0x78, 0x5F, 0x75, 0x6E, 
+                     0x6C, 0x6F, 0x63, 0x6B, 0x0, 0x5F, 0x70, 0x74, 0x68, 
+                     0x72, 0x65, 0x61, 0x64, 0x5F, 0x6D, 0x75, 0x74, 0x65, 
+                     0x78, 0x61, 0x74, 0x74, 0x72, 0x5F, 0x64, 0x65, 0x73, 
+                     0x74, 0x72, 0x6F, 0x79, 0x0, 0x5F, 0x70, 0x74, 0x68, 
+                     0x72, 0x65, 0x61, 0x64, 0x5F, 0x6D, 0x75, 0x74, 0x65, 
+                     0x78, 0x61, 0x74, 0x74, 0x72, 0x5F, 0x69, 0x6E, 0x69, 
+                     0x74, 0x0, 0x5F, 0x70, 0x74, 0x68, 0x72, 0x65, 0x61, 
+                     0x64, 0x5F, 0x6D, 0x75, 0x74, 0x65, 0x78, 0x61, 0x74, 
+                     0x74, 0x72, 0x5F, 0x73, 0x65, 0x74, 0x74, 0x79, 0x70, 
+                     0x65, 0x0, 0x5F, 0x70, 0x74, 0x68, 0x72, 0x65, 0x61, 
+                     0x64, 0x5F, 0x72, 0x77, 0x6C, 0x6F, 0x63, 0x6B, 0x5F, 
+                     0x64, 0x65, 0x73, 0x74, 0x72, 0x6F, 0x79, 0x0, 0x5F, 
+                     0x70, 0x74, 0x68, 0x72, 0x65, 0x61, 0x64, 0x5F, 0x72, 
+                     0x77, 0x6C, 0x6F, 0x63, 0x6B, 0x5F, 0x69, 0x6E, 0x69, 
+                     0x74, 0x0, 0x5F, 0x70, 0x74, 0x68, 0x72, 0x65, 0x61, 
+                     0x64, 0x5F, 0x72, 0x77, 0x6C, 0x6F, 0x63, 0x6B, 0x5F, 
+                     0x72, 0x64, 0x6C, 0x6F, 0x63, 0x6B, 0x0, 0x5F, 0x70, 
+                     0x74, 0x68, 0x72, 0x65, 0x61, 0x64, 0x5F, 0x72, 0x77, 
+                     0x6C, 0x6F, 0x63, 0x6B, 0x5F, 0x74, 0x72, 0x79, 0x72, 
+                     0x64, 0x6C, 0x6F, 0x63, 0x6B, 0x0, 0x5F, 0x70, 0x74, 
+                     0x68, 0x72, 0x65, 0x61, 0x64, 0x5F, 0x72, 0x77, 0x6C, 
+                     0x6F, 0x63, 0x6B, 0x5F, 0x74, 0x72, 0x79, 0x77, 0x72, 
+                     0x6C, 0x6F, 0x63, 0x6B, 0x0, 0x5F, 0x70, 0x74, 0x68, 
+                     0x72, 0x65, 0x61, 0x64, 0x5F, 0x72, 0x77, 0x6C, 0x6F, 
+                     0x63, 0x6B, 0x5F, 0x75, 0x6E, 0x6C, 0x6F, 0x63, 0x6B, 
+                     0x0, 0x5F, 0x70, 0x74, 0x68, 0x72, 0x65, 0x61, 0x64, 
+                     0x5F, 0x72, 0x77, 0x6C, 0x6F, 0x63, 0x6B, 0x5F, 0x77, 
+                     0x72, 0x6C, 0x6F, 0x63, 0x6B, 0x0, 0x5F, 0x70, 0x74, 
+                     0x68, 0x72, 0x65, 0x61, 0x64, 0x5F, 0x73, 0x65, 0x74, 
+                     0x73, 0x70, 0x65, 0x63, 0x69, 0x66, 0x69, 0x63, 0x0, 
+                     0x5F, 0x73, 0x77, 0x69, 0x66, 0x74, 0x5F, 0x61, 0x6C, 
+                     0x6C, 0x6F, 0x63, 0x4F, 0x62, 0x6A, 0x65, 0x63, 0x74, 
+                     0x0, 0x5F, 0x73, 0x77, 0x69, 0x66, 0x74, 0x5F, 0x62, 
+                     0x65, 0x67, 0x69, 0x6E, 0x41, 0x63, 0x63, 0x65, 0x73, 
+                     0x73, 0x0, 0x5F, 0x73, 0x77, 0x69, 0x66, 0x74, 0x5F, 
+                     0x64, 0x65, 0x61, 0x6C, 0x6C, 0x6F, 0x63, 0x43, 0x6C, 
+                     0x61, 0x73, 0x73, 0x49, 0x6E, 0x73, 0x74, 0x61, 0x6E, 
+                     0x63, 0x65, 0x0, 0x5F, 0x73, 0x77, 0x69, 0x66, 0x74, 
+                     0x5F, 0x65, 0x6E, 0x64, 0x41, 0x63, 0x63, 0x65, 0x73, 
+                     0x73, 0x0, 0x5F, 0x73, 0x77, 0x69, 0x66, 0x74, 0x5F, 
+                     0x65, 0x72, 0x72, 0x6F, 0x72, 0x52, 0x65, 0x74, 0x61, 
+                     0x69, 0x6E, 0x0, 0x5F, 0x73, 0x77, 0x69, 0x66, 0x74, 
+                     0x5F, 0x6F, 0x6E, 0x63, 0x65, 0x0, 0x5F, 0x73, 0x77, 
+                     0x69, 0x66, 0x74, 0x5F, 0x72, 0x65, 0x6C, 0x65, 0x61, 
+                     0x73, 0x65, 0x0, 0x5F, 0x73, 0x77, 0x69, 0x66, 0x74, 
+                     0x5F, 0x72, 0x65, 0x74, 0x61, 0x69, 0x6E, 0x0, 0x5F, 
+                     0x76, 0x6F, 0x75, 0x63, 0x68, 0x65, 0x72, 0x5F, 0x61, 
+                     0x64, 0x6F, 0x70, 0x74, 0x0, 0x5F, 0x5F, 0x6F, 0x62, 
+                     0x6A, 0x63, 0x5F, 0x65, 0x6D, 0x70, 0x74, 0x79, 0x5F, 
+                     0x63, 0x61, 0x63, 0x68, 0x65, 0x0, 0x5F, 0x4F, 0x42, 
+                     0x4A, 0x43, 0x5F, 0x4D, 0x45, 0x54, 0x41, 0x43, 0x4C, 
+                     0x41, 0x53, 0x53, 0x5F, 0x24, 0x5F, 0x4E, 0x53, 0x4F, 
+                     0x62, 0x6A, 0x65, 0x63, 0x74, 0x0, 0x5F, 0x4F, 0x42, 
+                     0x4A, 0x43, 0x5F, 0x43, 0x4C, 0x41, 0x53, 0x53, 0x5F, 
+                     0x24, 0x5F, 0x4E, 0x53, 0x4F, 0x62, 0x6A, 0x65, 0x63, 
+                     0x74, 0x0, 0x5F, 0x4F, 0x42, 0x4A, 0x43, 0x5F, 0x4D, 
+                     0x45, 0x54, 0x41, 0x43, 0x4C, 0x41, 0x53, 0x53, 0x5F, 
+                     0x24, 0x5F, 0x5F, 0x54, 0x74, 0x43, 0x73, 0x31, 0x32, 
+                     0x5F, 0x53, 0x77, 0x69, 0x66, 0x74, 0x4F, 0x62, 0x6A, 
+                     0x65, 0x63, 0x74, 0x0, 0x5F, 0x24, 0x73, 0x42, 0x6F, 
+                     0x57, 0x56, 0x0, 0x5F, 0x4F, 0x42, 0x4A, 0x43, 0x5F, 
+                     0x43, 0x4C, 0x41, 0x53, 0x53, 0x5F, 0x24, 0x5F, 0x5F, 
+                     0x54, 0x74, 0x43, 0x73, 0x31, 0x32, 0x5F, 0x53, 0x77, 
+                     0x69, 0x66, 0x74, 0x4F, 0x62, 0x6A, 0x65, 0x63, 0x74, 
+                     0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0 ]
+  DataInCode:
+    - Offset:          0x2ED4
+      Length:          140
+      Kind:            0x4
+...
diff --git a/llvm/test/tools/llvm-readtapi/Inputs/objc.yaml b/llvm/test/tools/llvm-readtapi/Inputs/objc.yaml
new file mode 100644
index 00000000000000..50219ab1fefb39
--- /dev/null
+++ b/llvm/test/tools/llvm-readtapi/Inputs/objc.yaml
@@ -0,0 +1,692 @@
+--- !mach-o
+FileHeader:
+  magic:           0xFEEDFACF
+  cputype:         0x100000C
+  cpusubtype:      0x0
+  filetype:        0x6
+  ncmds:           16
+  sizeofcmds:      1912
+  flags:           0x100085
+  reserved:        0x0
+LoadCommands:
+  - cmd:             LC_SEGMENT_64
+    cmdsize:         552
+    segname:         __TEXT
+    vmaddr:          0
+    vmsize:          16384
+    fileoff:         0
+    filesize:        16384
+    maxprot:         5
+    initprot:        5
+    nsects:          6
+    flags:           0
+    Sections:
+      - sectname:        __text
+        segname:         __TEXT
+        addr:            0x7B8
+        size:            44
+        offset:          0x7B8
+        align:           2
+        reloff:          0x0
+        nreloc:          0
+        flags:           0x80000400
+        reserved1:       0x0
+        reserved2:       0x0
+        reserved3:       0x0
+        content:         FF8300D1FD7B01A9FD430091E00700F9E10300F9E80740F90041009104000094FD7B41A9FF830091C0035FD6
+      - sectname:        __stubs
+        segname:         __TEXT
+        addr:            0x7E4
+        size:            12
+        offset:          0x7E4
+        align:           2
+        reloff:          0x0
+        nreloc:          0
+        flags:           0x80000408
+        reserved1:       0x1
+        reserved2:       0xC
+        reserved3:       0x0
+        content:         50000090100240F900021FD6
+      - sectname:        __stub_helper
+        segname:         __TEXT
+        addr:            0x7F0
+        size:            36
+        offset:          0x7F0
+        align:           2
+        reloff:          0x0
+        nreloc:          0
+        flags:           0x80000400
+        reserved1:       0x0
+        reserved2:       0x0
+        reserved3:       0x0
+        content:         5100009031220091F047BFA930000090100240F900021FD650000018F9FFFF1700000000
+      - sectname:        __cstring
+        segname:         __TEXT
+        addr:            0x814
+        size:            35
+        offset:          0x814
+        align:           0
+        reloff:          0x0
+        nreloc:          0
+        flags:           0x2
+        reserved1:       0x0
+        reserved2:       0x0
+        reserved3:       0x0
+        content:         53756767657374696F6E00110076313640303A3800420040224E53537472696E672200
+      - sectname:        __objc_methname
+        segname:         __TEXT
+        addr:            0x837
+        size:            32
+        offset:          0x837
+        align:           0
+        reloff:          0x0
+        nreloc:          0
+        flags:           0x2
+        reserved1:       0x0
+        reserved2:       0x0
+        reserved3:       0x0
+        content:         2E6378785F6465737472756374005F746F7043686F696365005F6F7468657200
+      - sectname:        __unwind_info
+        segname:         __TEXT
+        addr:            0x858
+        size:            4152
+        offset:          0x858
+        align:           2
+        reloff:          0x0
+        nreloc:          0
+        flags:           0x0
+        reserved1:       0x0
+        reserved2:       0x0
+        reserved3:       0x0
+        content:         010000001C000000010000002000000000000000200000000200000000000004B80700003800000038000000E40700000000000038000000030000000C0001001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
+  - cmd:             LC_SEGMENT_64
+    cmdsize:         312
+    segname:         __DATA_CONST
+    vmaddr:          16384
+    vmsize:          16384
+    fileoff:         16384
+    filesize:        16384
+    maxprot:         3
+    initprot:        3
+    nsects:          3
+    flags:           16
+    Sections:
+      - sectname:        __got
+        segname:         __DATA_CONST
+        addr:            0x4000
+        size:            8
+        offset:          0x4000
+        align:           3
+        reloff:          0x0
+        nreloc:          0
+        flags:           0x6
+        reserved1:       0x0
+        reserved2:       0x0
+        reserved3:       0x0
+        content:         '0000000000000000'
+      - sectname:        __objc_classlist
+        segname:         __DATA_CONST
+        addr:            0x4008
+        size:            8
+        offset:          0x4008
+        align:           3
+        reloff:          0x0
+        nreloc:          0
+        flags:           0x10000000
+        reserved1:       0x0
+        reserved2:       0x0
+        reserved3:       0x0
+        content:         '3081000000000000'
+      - sectname:        __objc_imageinfo
+        segname:         __DATA_CONST
+        addr:            0x4010
+        size:            8
+        offset:          0x4010
+        align:           0
+        reloff:          0x0
+        nreloc:          0
+        flags:           0x0
+        reserved1:       0x0
+        reserved2:       0x0
+        reserved3:       0x0
+        content:         '0000000040000000'
+  - cmd:             LC_SEGMENT_64
+    cmdsize:         472
+    segname:         __DATA
+    vmaddr:          32768
+    vmsize:          16384
+    fileoff:         32768
+    filesize:        16384
+    maxprot:         3
+    initprot:        3
+    nsects:          5
+    flags:           0
+    Sections:
+      - sectname:        __la_symbol_ptr
+        segname:         __DATA
+        addr:            0x8000
+        size:            8
+        offset:          0x8000
+        align:           3
+        reloff:          0x0
+        nreloc:          0
+        flags:           0x7
+        reserved1:       0x2
+        reserved2:       0x0
+        reserved3:       0x0
+        content:         '0808000000000000'
+      - sectname:        __data
+        segname:         __DATA
+        addr:            0x8008
+        size:            8
+        offset:          0x8008
+        align:           3
+        reloff:          0x0
+        nreloc:          0
+        flags:           0x0
+        reserved1:       0x0
+        reserved2:       0x0
+        reserved3:       0x0
+        content:         '0000000000000000'
+      - sectname:        __objc_const
+        segname:         __DATA
+        addr:            0x8010
+        size:            248
+        offset:          0x8010
+        align:           3
+        reloff:          0x0
+        nreloc:          0
+        flags:           0x0
+        reserved1:       0x0
+        reserved2:       0x0
+        reserved3:       0x0
+        content:         850100002800000028000000000000000000000000000000140800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000180000000100000037080000000000002108000000000000B807000000000000200000000200000058810000000000004508000000000000290800000000000000000000010000005C8100000000000050080000000000002B08000000000000030000000800000084010000080000001800000000000000000000000000000014080000000000005880000000000000000000000000000078800000000000001F080000000000000000000000000000
+      - sectname:        __objc_data
+        segname:         __DATA
+        addr:            0x8108
+        size:            80
+        offset:          0x8108
+        align:           3
+        reloff:          0x0
+        nreloc:          0
+        flags:           0x0
+        reserved1:       0x0
+        reserved2:       0x0
+        reserved3:       0x0
+        content:         000000000000000000000000000000000000000000000000000000000000000010800000000000000881000000000000000000000000000000000000000000000000000000000000C080000000000000
+      - sectname:        __objc_ivar
+        segname:         __DATA
+        addr:            0x8158
+        size:            8
+        offset:          0x8158
+        align:           2
+        reloff:          0x0
+        nreloc:          0
+        flags:           0x0
+        reserved1:       0x0
+        reserved2:       0x0
+        reserved3:       0x0
+        content:         '0800000010000000'
+  - cmd:             LC_SEGMENT_64
+    cmdsize:         72
+    segname:         __LINKEDIT
+    vmaddr:          49152
+    vmsize:          2336
+    fileoff:         49152
+    filesize:        2336
+    maxprot:         1
+    initprot:        1
+    nsects:          0
+    flags:           0
+  - cmd:             LC_DYLD_INFO_ONLY
+    cmdsize:         48
+    rebase_off:      49152
+    rebase_size:     24
+    bind_off:        49176
+    bind_size:       128
+    weak_bind_off:   0
+    weak_bind_size:  0
+    lazy_bind_off:   49304
+    lazy_bind_size:  24
+    export_off:      49328
+    export_size:     128
+  - cmd:             LC_SYMTAB
+    cmdsize:         24
+    symoff:          49464
+    nsyms:           28
+    stroff:          49928
+    strsize:         1016
+  - cmd:             LC_DYSYMTAB
+    cmdsize:         80
+    ilocalsym:       0
+    nlocalsym:       19
+    iextdefsym:      19
+    nextdefsym:      4
+    iundefsym:       23
+    nundefsym:       5
+    tocoff:          0
+    ntoc:            0
+    modtaboff:       0
+    nmodtab:         0
+    extrefsymoff:    0
+    nextrefsyms:     0
+    indirectsymoff:  49912
+    nindirectsyms:   3
+    extreloff:       0
+    nextrel:         0
+    locreloff:       0
+    nlocrel:         0
+  - cmd:             LC_ID_DYLIB
+    cmdsize:         40
+    dylib:
+      name:            24
+      timestamp:       0
+      current_version: 0
+      compatibility_version: 0
+    Content:         tmp.dylib
+    ZeroPadBytes:    7
+  - cmd:             LC_UUID
+    cmdsize:         24
+    uuid:            4C4C44F3-5555-3144-A1E7-371E4713DEDE
+  - cmd:             LC_BUILD_VERSION
+    cmdsize:         32
+    platform:        1
+    minos:           851968
+    sdk:             983040
+    ntools:          1
+    Tools:
+      - tool:            4
+        version:         1179648
+  - cmd:             LC_LOAD_DYLIB
+    cmdsize:         96
+    dylib:
+      name:            24
+      timestamp:       0
+      current_version: 197001216
+      compatibility_version: 19660800
+    Content:         '/System/Library/Frameworks/Foundation.framework/Versions/C/Foundation'
+    ZeroPadBytes:    3
+  - cmd:             LC_LOAD_DYLIB
+    cmdsize:         56
+    dylib:
+      name:            24
+      timestamp:       0
+      current_version: 14942208
+      compatibility_version: 65536
+    Content:         '/usr/lib/libobjc.A.dylib'
+    ZeroPadBytes:    8
+  - cmd:             LC_LOAD_DYLIB
+    cmdsize:         56
+    dylib:
+      name:            24
+      timestamp:       0
+      current_version: 88342528
+      compatibility_version: 65536
+    Content:         '/usr/lib/libSystem.B.dylib'
+    ZeroPadBytes:    6
+  - cmd:             LC_FUNCTION_STARTS
+    cmdsize:         16
+    dataoff:         49456
+    datasize:        8
+  - cmd:             LC_DATA_IN_CODE
+    cmdsize:         16
+    dataoff:         49464
+    datasize:        0
+  - cmd:             LC_CODE_SIGNATURE
+    cmdsize:         16
+    dataoff:         50944
+    datasize:        544
+LinkEditData:
+  RebaseOpcodes:
+    - Opcode:          REBASE_OPCODE_SET_TYPE_IMM
+      Imm:             1
+    - Opcode:          REBASE_OPCODE_SET_SEGMENT_AND_OFFSET_ULEB
+      Imm:             1
+      ExtraData:       [ 0x8 ]
+    - Opcode:          REBASE_OPCODE_DO_REBASE_IMM_TIMES
+      Imm:             1
+    - Opcode:          REBASE_OPCODE_SET_SEGMENT_AND_OFFSET_ULEB
+      Imm:             2
+      ExtraData:       [ 0x0 ]
+    - Opcode:          REBASE_OPCODE_DO_REBASE_ULEB_TIMES_SKIPPING_ULEB
+      Imm:             0
+      ExtraData:       [ 0x2, 0x20 ]
+    - Opcode:          REBASE_OPCODE_ADD_ADDR_IMM_SCALED
+      Imm:             2
+    - Opcode:          REBASE_OPCODE_DO_REBASE_IMM_TIMES
+      Imm:             3
+    - Opcode:          REBASE_OPCODE_ADD_ADDR_IMM_SCALED
+      Imm:             1
+    - Opcode:          REBASE_OPCODE_DO_REBASE_IMM_TIMES
+      Imm:             3
+    - Opcode:          REBASE_OPCODE_ADD_ADDR_IMM_SCALED
+      Imm:             1
+    - Opcode:          REBASE_OPCODE_DO_REBASE_IMM_TIMES
+      Imm:             3
+    - Opcode:          REBASE_OPCODE_ADD_ADDR_IMM_SCALED
+      Imm:             4
+    - Opcode:          REBASE_OPCODE_DO_REBASE_IMM_TIMES
+      Imm:             2
+    - Opcode:          REBASE_OPCODE_ADD_ADDR_IMM_SCALED
+      Imm:             1
+    - Opcode:          REBASE_OPCODE_DO_REBASE_IMM_TIMES
+      Imm:             2
+    - Opcode:          REBASE_OPCODE_ADD_ADDR_IMM_SCALED
+      Imm:             5
+    - Opcode:          REBASE_OPCODE_DO_REBASE_IMM_TIMES
+      Imm:             2
+    - Opcode:          REBASE_OPCODE_ADD_ADDR_IMM_SCALED
+      Imm:             3
+    - Opcode:          REBASE_OPCODE_DO_REBASE_IMM_TIMES
+      Imm:             1
+    - Opcode:          REBASE_OPCODE_DONE
+      Imm:             0
+  BindOpcodes:
+    - Opcode:          BIND_OPCODE_SET_SYMBOL_TRAILING_FLAGS_IMM
+      Imm:             0
+      Symbol:          dyld_stub_binder
+    - Opcode:          BIND_OPCODE_SET_TYPE_IMM
+      Imm:             1
+      Symbol:          ''
+    - Opcode:          BIND_OPCODE_SET_DYLIB_ORDINAL_IMM
+      Imm:             3
+      Symbol:          ''
+    - Opcode:          BIND_OPCODE_SET_SEGMENT_AND_OFFSET_ULEB
+      Imm:             1
+      ULEBExtraData:   [ 0x0 ]
+      Symbol:          ''
+    - Opcode:          BIND_OPCODE_DO_BIND
+      Imm:             0
+      Symbol:          ''
+    - Opcode:          BIND_OPCODE_SET_SYMBOL_TRAILING_FLAGS_IMM
+      Imm:             0
+      Symbol:          '_OBJC_METACLASS_$_NSObject'
+    - Opcode:          BIND_OPCODE_SET_TYPE_IMM
+      Imm:             1
+      Symbol:          ''
+    - Opcode:          BIND_OPCODE_SET_DYLIB_ORDINAL_IMM
+      Imm:             2
+      Symbol:          ''
+    - Opcode:          BIND_OPCODE_SET_SEGMENT_AND_OFFSET_ULEB
+      Imm:             2
+      ULEBExtraData:   [ 0x108 ]
+      Symbol:          ''
+    - Opcode:          BIND_OPCODE_DO_BIND
+      Imm:             0
+      Symbol:          ''
+    - Opcode:          BIND_OPCODE_DO_BIND
+      Imm:             0
+      Symbol:          ''
+    - Opcode:          BIND_OPCODE_SET_SYMBOL_TRAILING_FLAGS_IMM
+      Imm:             0
+      Symbol:          __objc_empty_cache
+    - Opcode:          BIND_OPCODE_SET_TYPE_IMM
+      Imm:             1
+      Symbol:          ''
+    - Opcode:          BIND_OPCODE_DO_BIND
+      Imm:             0
+      Symbol:          ''
+    - Opcode:          BIND_OPCODE_ADD_ADDR_ULEB
+      Imm:             0
+      ULEBExtraData:   [ 0x20 ]
+      Symbol:          ''
+    - Opcode:          BIND_OPCODE_DO_BIND
+      Imm:             0
+      Symbol:          ''
+    - Opcode:          BIND_OPCODE_SET_SYMBOL_TRAILING_FLAGS_IMM
+      Imm:             0
+      Symbol:          '_OBJC_CLASS_$_NSObject'
+    - Opcode:          BIND_OPCODE_SET_TYPE_IMM
+      Imm:             1
+      Symbol:          ''
+    - Opcode:          BIND_OPCODE_ADD_ADDR_ULEB
+      Imm:             0
+      ULEBExtraData:   [ 0xFFFFFFFFFFFFFFF0 ]
+      Symbol:          ''
+    - Opcode:          BIND_OPCODE_DO_BIND
+      Imm:             0
+      Symbol:          ''
+    - Opcode:          BIND_OPCODE_DONE
+      Imm:             0
+      Symbol:          ''
+  LazyBindOpcodes:
+    - Opcode:          BIND_OPCODE_SET_SEGMENT_AND_OFFSET_ULEB
+      Imm:             2
+      ULEBExtraData:   [ 0x0 ]
+      Symbol:          ''
+    - Opcode:          BIND_OPCODE_SET_DYLIB_ORDINAL_IMM
+      Imm:             2
+      Symbol:          ''
+    - Opcode:          BIND_OPCODE_SET_SYMBOL_TRAILING_FLAGS_IMM
+      Imm:             0
+      Symbol:          _objc_destroyWeak
+    - Opcode:          BIND_OPCODE_DO_BIND
+      Imm:             0
+      Symbol:          ''
+    - Opcode:          BIND_OPCODE_DONE
+      Imm:             0
+      Symbol:          ''
+  ExportTrie:
+    TerminalSize:    0
+    NodeOffset:      0
+    Name:            ''
+    Flags:           0x0
+    Address:         0x0
+    Other:           0x0
+    ImportName:      ''
+    Children:
+      - TerminalSize:    0
+        NodeOffset:      10
+        Name:            _OBJC_
+        Flags:           0x0
+        Address:         0x0
+        Other:           0x0
+        ImportName:      ''
+        Children:
+          - TerminalSize:    4
+            NodeOffset:      77
+            Name:            'CLASS_$_Suggestion'
+            Flags:           0x0
+            Address:         0x8130
+            Other:           0x0
+            ImportName:      ''
+          - TerminalSize:    4
+            NodeOffset:      83
+            Name:            'METACLASS_$_Suggestion'
+            Flags:           0x0
+            Address:         0x8108
+            Other:           0x0
+            ImportName:      ''
+          - TerminalSize:    0
+            NodeOffset:      89
+            Name:            'IVAR_$_Suggestion._'
+            Flags:           0x0
+            Address:         0x0
+            Other:           0x0
+            ImportName:      ''
+            Children:
+              - TerminalSize:    4
+                NodeOffset:      109
+                Name:            other
+                Flags:           0x0
+                Address:         0x815C
+                Other:           0x0
+                ImportName:      ''
+              - TerminalSize:    4
+                NodeOffset:      115
+                Name:            topChoice
+                Flags:           0x0
+                Address:         0x8158
+                Other:           0x0
+                ImportName:      ''
+  NameList:
+    - n_strx:          407
+      n_type:          0x64
+      n_sect:          0
+      n_desc:          0
+      n_value:         0
+    - n_strx:          474
+      n_type:          0x66
+      n_sect:          0
+      n_desc:          1
+      n_value:         0
+    - n_strx:          729
+      n_type:          0x24
+      n_sect:          1
+      n_desc:          0
+      n_value:         1976
+    - n_strx:          1
+      n_type:          0x24
+      n_sect:          0
+      n_desc:          0
+      n_value:         44
+    - n_strx:          757
+      n_type:          0x26
+      n_sect:          12
+      n_desc:          0
+      n_value:         32784
+    - n_strx:          790
+      n_type:          0x26
+      n_sect:          12
+      n_desc:          0
+      n_value:         32856
+    - n_strx:          827
+      n_type:          0x26
+      n_sect:          12
+      n_desc:          0
+      n_value:         32888
+    - n_strx:          866
+      n_type:          0x26
+      n_sect:          12
+      n_desc:          0
+      n_value:         32960
+    - n_strx:          895
+      n_type:          0x20
+      n_sect:          13
+      n_desc:          0
+      n_value:         33032
+    - n_strx:          924
+      n_type:          0x20
+      n_sect:          13
+      n_desc:          0
+      n_value:         33072
+    - n_strx:          949
+      n_type:          0x20
+      n_sect:          14
+      n_desc:          0
+      n_value:         33112
+    - n_strx:          984
+      n_type:          0x20
+      n_sect:          14
+      n_desc:          0
+      n_value:         33116
+    - n_strx:          1
+      n_type:          0x64
+      n_sect:          1
+      n_desc:          0
+      n_value:         0
+    - n_strx:          2
+      n_type:          0xE
+      n_sect:          1
+      n_desc:          0
+      n_value:         1976
+    - n_strx:          30
+      n_type:          0xE
+      n_sect:          12
+      n_desc:          0
+      n_value:         32784
+    - n_strx:          63
+      n_type:          0xE
+      n_sect:          12
+      n_desc:          0
+      n_value:         32856
+    - n_strx:          100
+      n_type:          0xE
+      n_sect:          12
+      n_desc:          0
+      n_value:         32888
+    - n_strx:          139
+      n_type:          0xE
+      n_sect:          12
+      n_desc:          0
+      n_value:         32960
+    - n_strx:          168
+      n_type:          0xE
+      n_sect:          11
+      n_desc:          0
+      n_value:         32776
+    - n_strx:          183
+      n_type:          0xF
+      n_sect:          13
+      n_desc:          0
+      n_value:         33032
+    - n_strx:          212
+      n_type:          0xF
+      n_sect:          13
+      n_desc:          0
+      n_value:         33072
+    - n_strx:          237
+      n_type:          0xF
+      n_sect:          14
+      n_desc:          0
+      n_value:         33112
+    - n_strx:          272
+      n_type:          0xF
+      n_sect:          14
+      n_desc:          0
+      n_value:         33116
+    - n_strx:          303
+      n_type:          0x1
+      n_sect:          0
+      n_desc:          512
+      n_value:         0
+    - n_strx:          326
+      n_type:          0x1
+      n_sect:          0
+      n_desc:          512
+      n_value:         0
+    - n_strx:          353
+      n_type:          0x1
+      n_sect:          0
+      n_desc:          512
+      n_value:         0
+    - n_strx:          372
+      n_type:          0x1
+      n_sect:          0
+      n_desc:          512
+      n_value:         0
+    - n_strx:          390
+      n_type:          0x1
+      n_sect:          0
+      n_desc:          768
+      n_value:         0
+  StringTable:
+    - ' '
+    - '-[Suggestion .cxx_destruct]'
+    - '__OBJC_METACLASS_RO_$_Suggestion'
+    - '__OBJC_$_INSTANCE_METHODS_Suggestion'
+    - '__OBJC_$_INSTANCE_VARIABLES_Suggestion'
+    - '__OBJC_CLASS_RO_$_Suggestion'
+    - __dyld_private
+    - '_OBJC_METACLASS_$_Suggestion'
+    - '_OBJC_CLASS_$_Suggestion'
+    - '_OBJC_IVAR_$_Suggestion._topChoice'
+    - '_OBJC_IVAR_$_Suggestion._other'
+    - '_OBJC_CLASS_$_NSObject'
+    - '_OBJC_METACLASS_$_NSObject'
+    - __objc_empty_cache
+    - _objc_destroyWeak
+    - dyld_stub_binder
+    - '-[Suggestion .cxx_destruct]'
+    - '__OBJC_METACLASS_RO_$_Suggestion'
+    - '__OBJC_$_INSTANCE_METHODS_Suggestion'
+    - '__OBJC_$_INSTANCE_VARIABLES_Suggestion'
+    - '__OBJC_CLASS_RO_$_Suggestion'
+    - '_OBJC_METACLASS_$_Suggestion'
+    - '_OBJC_CLASS_$_Suggestion'
+    - '_OBJC_IVAR_$_Suggestion._topChoice'
+    - '_OBJC_IVAR_$_Suggestion._other'
+    - ''
+  IndirectSymbols: [ 0x1B, 0x1A, 0x1A ]
+  FunctionStarts:  [ 0x7B8 ]
+...
diff --git a/llvm/test/tools/llvm-readtapi/Inputs/thread_local.yaml b/llvm/test/tools/llvm-readtapi/Inputs/thread_local.yaml
new file mode 100644
index 00000000000000..bc247110e1ffd6
--- /dev/null
+++ b/llvm/test/tools/llvm-readtapi/Inputs/thread_local.yaml
@@ -0,0 +1,228 @@
+--- !mach-o
+FileHeader:
+  magic:           0xFEEDFACF
+  cputype:         0x01000007
+  cpusubtype:      0x00000003
+  filetype:        0x00000006
+  ncmds:           13
+  sizeofcmds:      872
+  flags:           0x00900085
+  reserved:        0x00000000
+LoadCommands:
+  - cmd:             LC_SEGMENT_64
+    cmdsize:         152
+    segname:         __TEXT
+    vmaddr:          0
+    vmsize:          16384
+    fileoff:         0
+    filesize:        16384
+    maxprot:         5
+    initprot:        5
+    nsects:          1
+    flags:           0
+    Sections:
+      - sectname:        __text
+        segname:         __TEXT
+        addr:            0x0000000000004000
+        size:            0
+        offset:          0x00004000
+        align:           0
+        reloff:          0x00000000
+        nreloc:          0
+        flags:           0x80000400
+        reserved1:       0x00000000
+        reserved2:       0x00000000
+        reserved3:       0x00000000
+        content:         ''
+  - cmd:             LC_SEGMENT_64
+    cmdsize:         232
+    segname:         __DATA
+    vmaddr:          16384
+    vmsize:          16384
+    fileoff:         16384
+    filesize:        16384
+    maxprot:         3
+    initprot:        3
+    nsects:          2
+    flags:           0
+    Sections:
+      - sectname:        __thread_vars
+        segname:         __DATA
+        addr:            0x0000000000004000
+        size:            24
+        offset:          0x00004000
+        align:           3
+        reloff:          0x00000000
+        nreloc:          0
+        flags:           0x00000013
+        reserved1:       0x00000000
+        reserved2:       0x00000000
+        reserved3:       0x00000000
+        content:         '000000000000000000000000000000000000000000000000'
+      - sectname:        __thread_bss
+        segname:         __DATA
+        addr:            0x0000000000004018
+        size:            1
+        offset:          0x00000000
+        align:           0
+        reloff:          0x00000000
+        nreloc:          0
+        flags:           0x00000012
+        reserved1:       0x00000000
+        reserved2:       0x00000000
+        reserved3:       0x00000000
+  - cmd:             LC_SEGMENT_64
+    cmdsize:         72
+    segname:         __LINKEDIT
+    vmaddr:          32768
+    vmsize:          16384
+    fileoff:         32768
+    filesize:        184
+    maxprot:         1
+    initprot:        1
+    nsects:          0
+    flags:           0
+  - cmd:             LC_ID_DYLIB
+    cmdsize:         104
+    dylib:
+      name:            24
+      timestamp:       1
+      current_version: 0
+      compatibility_version: 0
+    Content:   '/System/Library/Frameworks/ThreadLocal.framework/ThreadLocal'
+    ZeroPadBytes:    2
+  - cmd:             LC_DYLD_INFO_ONLY
+    cmdsize:         48
+    rebase_off:      0
+    rebase_size:     0
+    bind_off:        32768
+    bind_size:       24
+    weak_bind_off:   0
+    weak_bind_size:  0
+    lazy_bind_off:   0
+    lazy_bind_size:  0
+    export_off:      32792
+    export_size:     24
+  - cmd:             LC_SYMTAB
+    cmdsize:         24
+    symoff:          32824
+    nsyms:           4
+    stroff:          32888
+    strsize:         64
+  - cmd:             LC_DYSYMTAB
+    cmdsize:         80
+    ilocalsym:       0
+    nlocalsym:       1
+    iextdefsym:      1
+    nextdefsym:      1
+    iundefsym:       2
+    nundefsym:       2
+    tocoff:          0
+    ntoc:            0
+    modtaboff:       0
+    nmodtab:         0
+    extrefsymoff:    0
+    nextrefsyms:     0
+    indirectsymoff:  0
+    nindirectsyms:   0
+    extreloff:       0
+    nextrel:         0
+    locreloff:       0
+    nlocrel:         0
+  - cmd:             LC_UUID
+    cmdsize:         24
+    uuid:            E4FA1DB7-CD39-3568-B80D-BFAF224E5ADC
+  - cmd:             LC_BUILD_VERSION
+    cmdsize:         32
+    platform:        1
+    minos:           720896
+    sdk:             720896
+    ntools:          1
+    Tools:
+      - tool:            3
+        version:         39913216
+  - cmd:             LC_SOURCE_VERSION
+    cmdsize:         16
+    version:         0
+  - cmd:             LC_LOAD_DYLIB
+    cmdsize:         56
+    dylib:
+      name:            24
+      timestamp:       2
+      current_version: 84672512
+      compatibility_version: 65536
+    Content:   '/usr/lib/libSystem.B.dylib'
+    ZeroPadBytes:    6
+  - cmd:             LC_FUNCTION_STARTS
+    cmdsize:         16
+    dataoff:         32816
+    datasize:        8
+  - cmd:             LC_DATA_IN_CODE
+    cmdsize:         16
+    dataoff:         32824
+    datasize:        0
+LinkEditData:
+  BindOpcodes:
+    - Opcode:          BIND_OPCODE_SET_DYLIB_ORDINAL_IMM
+      Imm:             1
+      Symbol:          ''
+    - Opcode:          BIND_OPCODE_SET_SYMBOL_TRAILING_FLAGS_IMM
+      Imm:             0
+      Symbol:          __tlv_bootstrap
+    - Opcode:          BIND_OPCODE_SET_TYPE_IMM
+      Imm:             1
+      Symbol:          ''
+    - Opcode:          BIND_OPCODE_SET_SEGMENT_AND_OFFSET_ULEB
+      Imm:             1
+      ULEBExtraData:   [ 0x0000000000000000 ]
+      Symbol:          ''
+    - Opcode:          BIND_OPCODE_DO_BIND
+      Imm:             0
+      Symbol:          ''
+    - Opcode:          BIND_OPCODE_DONE
+      Imm:             0
+      Symbol:          ''
+  ExportTrie:
+    TerminalSize:    0
+    NodeOffset:      0
+    Name:            ''
+    Flags:           0x0000000000000000
+    Address:         0x0000000000000000
+    Other:           0x0000000000000000
+    ImportName:      ''
+    Children:
+      - TerminalSize:    4
+        NodeOffset:      13
+        Name:            _MySymbol
+        Flags:           0x0000000000000001
+        Address:         0x0000000000004000
+        Other:           0x0000000000000000
+        ImportName:      ''
+  NameList:
+    - n_strx:          45
+      n_type:          0x0E
+      n_sect:          3
+      n_desc:          0
+      n_value:         16408
+    - n_strx:          2
+      n_type:          0x0F
+      n_sect:          2
+      n_desc:          0
+      n_value:         16384
+    - n_strx:          12
+      n_type:          0x01
+      n_sect:          0
+      n_desc:          256
+      n_value:         0
+    - n_strx:          28
+      n_type:          0x01
+      n_sect:          0
+      n_desc:          256
+      n_value:         0
+  StringTable:
+    - ' '
+    - _MySymbol
+    - __tlv_bootstrap
+    - dyld_stub_binder
+    - '_MySymbol$tlv$init'
+...
diff --git a/llvm/test/tools/llvm-readtapi/Inputs/universal.yaml b/llvm/test/tools/llvm-readtapi/Inputs/universal.yaml
new file mode 100644
index 00000000000000..abf17e645cc69b
--- /dev/null
+++ b/llvm/test/tools/llvm-readtapi/Inputs/universal.yaml
@@ -0,0 +1,372 @@
+--- !fat-mach-o
+FatHeader:
+  magic:           0xCAFEBABE
+  nfat_arch:       2
+FatArchs:
+  - cputype:         0x0000000C
+    cpusubtype:      0x00000009
+    offset:          0x0000000000004000
+    size:            16424
+    align:           14
+  - cputype:         0x0100000C
+    cpusubtype:      0x00000000
+    offset:          0x000000000000C000
+    size:            16464
+    align:           14
+Slices:
+  - !mach-o
+    FileHeader:
+      magic:           0xFEEDFACE
+      cputype:         0x0000000C
+      cpusubtype:      0x00000009
+      filetype:        0x00000006
+      ncmds:           13
+      sizeofcmds:      608
+      flags:           0x00100085
+    LoadCommands:
+      - cmd:             LC_SEGMENT
+        cmdsize:         124
+        segname:         __TEXT
+        vmaddr:          0
+        vmsize:          16384
+        fileoff:         0
+        filesize:        16384
+        maxprot:         5
+        initprot:        5
+        nsects:          1
+        flags:           0
+        Sections:
+          - sectname:        __text
+            segname:         __TEXT
+            addr:            0x0000000000004000
+            size:            0
+            offset:          0x00004000
+            align:           0
+            reloff:          0x00000000
+            nreloc:          0
+            flags:           0x80000400
+            reserved1:       0x00000000
+            reserved2:       0x00000000
+            reserved3:       0x00000000
+            content:         ''
+      - cmd:             LC_SEGMENT
+        cmdsize:         124
+        segname:         __DATA
+        vmaddr:          16384
+        vmsize:          16384
+        fileoff:         0
+        filesize:        0
+        maxprot:         3
+        initprot:        3
+        nsects:          1
+        flags:           0
+        Sections:
+          - sectname:        __common
+            segname:         __DATA
+            addr:            0x0000000000004000
+            size:            4
+            offset:          0x00000000
+            align:           2
+            reloff:          0x00000000
+            nreloc:          0
+            flags:           0x00000001
+            reserved1:       0x00000000
+            reserved2:       0x00000000
+            reserved3:       0x00000000
+      - cmd:             LC_SEGMENT
+        cmdsize:         56
+        segname:         __LINKEDIT
+        vmaddr:          32768
+        vmsize:          16384
+        fileoff:         16384
+        filesize:        40
+        maxprot:         1
+        initprot:        1
+        nsects:          0
+        flags:           0
+      - cmd:             LC_ID_DYLIB
+        cmdsize:         44
+        dylib:
+          name:            24
+          timestamp:       1
+          current_version: 0
+          compatibility_version: 0
+        Content:   '@rpath/libfoo.dylib'
+        ZeroPadBytes:    1
+      - cmd:             LC_DYLD_INFO_ONLY
+        cmdsize:         48
+        rebase_off:      0
+        rebase_size:     0
+        bind_off:        0
+        bind_size:       0
+        weak_bind_off:   0
+        weak_bind_size:  0
+        lazy_bind_off:   0
+        lazy_bind_size:  0
+        export_off:      16384
+        export_size:     16
+      - cmd:             LC_SYMTAB
+        cmdsize:         24
+        symoff:          16404
+        nsyms:           1
+        stroff:          16416
+        strsize:         8
+      - cmd:             LC_DYSYMTAB
+        cmdsize:         80
+        ilocalsym:       0
+        nlocalsym:       0
+        iextdefsym:      0
+        nextdefsym:      1
+        iundefsym:       1
+        nundefsym:       0
+        tocoff:          0
+        ntoc:            0
+        modtaboff:       0
+        nmodtab:         0
+        extrefsymoff:    0
+        nextrefsyms:     0
+        indirectsymoff:  0
+        nindirectsyms:   0
+        extreloff:       0
+        nextrel:         0
+        locreloff:       0
+        nlocrel:         0
+      - cmd:             LC_UUID
+        cmdsize:         24
+        uuid:            55BB3EB2-88FF-39A2-BAFB-C8695DC33D4B
+      - cmd:             LC_VERSION_MIN_IPHONEOS
+        cmdsize:         16
+        version:         680803
+        sdk:             917504
+      - cmd:             LC_SOURCE_VERSION
+        cmdsize:         16
+        version:         0
+      - cmd:             LC_ENCRYPTION_INFO
+        cmdsize:         20
+        cryptoff:        16384
+        cryptsize:       0
+        cryptid:         0
+      - cmd:             LC_FUNCTION_STARTS
+        cmdsize:         16
+        dataoff:         16400
+        datasize:        4
+      - cmd:             LC_DATA_IN_CODE
+        cmdsize:         16
+        dataoff:         16404
+        datasize:        0
+    LinkEditData:
+      ExportTrie:
+        TerminalSize:    0
+        NodeOffset:      0
+        Name:            ''
+        Flags:           0x0000000000000000
+        Address:         0x0000000000000000
+        Other:           0x0000000000000000
+        ImportName:      ''
+        Children:
+          - TerminalSize:    4
+            NodeOffset:      8
+            Name:            _foo
+            Flags:           0x0000000000000000
+            Address:         0x0000000000004000
+            Other:           0x0000000000000000
+            ImportName:      ''
+      NameList:
+        - n_strx:          2
+          n_type:          0x0F
+          n_sect:          2
+          n_desc:          0
+          n_value:         16384
+      StringTable:
+        - ' '
+        - _foo
+        - ''
+  - !mach-o
+    FileHeader:
+      magic:           0xFEEDFACF
+      cputype:         0x0100000C
+      cpusubtype:      0x00000000
+      filetype:        0x00000006
+      ncmds:           14
+      sizeofcmds:      760
+      flags:           0x00100085
+      reserved:        0x00000000
+    LoadCommands:
+      - cmd:             LC_SEGMENT_64
+        cmdsize:         152
+        segname:         __TEXT
+        vmaddr:          0
+        vmsize:          16384
+        fileoff:         0
+        filesize:        16384
+        maxprot:         5
+        initprot:        5
+        nsects:          1
+        flags:           0
+        Sections:
+          - sectname:        __text
+            segname:         __TEXT
+            addr:            0x0000000000004000
+            size:            0
+            offset:          0x00004000
+            align:           0
+            reloff:          0x00000000
+            nreloc:          0
+            flags:           0x80000400
+            reserved1:       0x00000000
+            reserved2:       0x00000000
+            reserved3:       0x00000000
+            content:         ''
+      - cmd:             LC_SEGMENT_64
+        cmdsize:         152
+        segname:         __DATA
+        vmaddr:          16384
+        vmsize:          16384
+        fileoff:         0
+        filesize:        0
+        maxprot:         3
+        initprot:        3
+        nsects:          1
+        flags:           0
+        Sections:
+          - sectname:        __common
+            segname:         __DATA
+            addr:            0x0000000000004000
+            size:            4
+            offset:          0x00000000
+            align:           2
+            reloff:          0x00000000
+            nreloc:          0
+            flags:           0x00000001
+            reserved1:       0x00000000
+            reserved2:       0x00000000
+            reserved3:       0x00000000
+      - cmd:             LC_SEGMENT_64
+        cmdsize:         72
+        segname:         __LINKEDIT
+        vmaddr:          32768
+        vmsize:          16384
+        fileoff:         16384
+        filesize:        80
+        maxprot:         1
+        initprot:        1
+        nsects:          0
+        flags:           0
+      - cmd:             LC_ID_DYLIB
+        cmdsize:         48
+        dylib:
+          name:            24
+          timestamp:       1
+          current_version: 0
+          compatibility_version: 0
+        Content:   '@rpath/libfoo.dylib'
+        ZeroPadBytes:    5
+      - cmd:             LC_DYLD_INFO_ONLY
+        cmdsize:         48
+        rebase_off:      0
+        rebase_size:     0
+        bind_off:        0
+        bind_size:       0
+        weak_bind_off:   0
+        weak_bind_size:  0
+        lazy_bind_off:   0
+        lazy_bind_size:  0
+        export_off:      16384
+        export_size:     16
+      - cmd:             LC_SYMTAB
+        cmdsize:         24
+        symoff:          16408
+        nsyms:           2
+        stroff:          16440
+        strsize:         24
+      - cmd:             LC_DYSYMTAB
+        cmdsize:         80
+        ilocalsym:       0
+        nlocalsym:       0
+        iextdefsym:      0
+        nextdefsym:      1
+        iundefsym:       1
+        nundefsym:       1
+        tocoff:          0
+        ntoc:            0
+        modtaboff:       0
+        nmodtab:         0
+        extrefsymoff:    0
+        nextrefsyms:     0
+        indirectsymoff:  0
+        nindirectsyms:   0
+        extreloff:       0
+        nextrel:         0
+        locreloff:       0
+        nlocrel:         0
+      - cmd:             LC_UUID
+        cmdsize:         24
+        uuid:            57F7A4EB-2EDE-3150-80B6-8D587A135790
+      - cmd:             LC_BUILD_VERSION
+        cmdsize:         32
+        platform:        2
+        minos:           917504
+        sdk:             917504
+        ntools:          1
+        Tools:
+          - tool:            3
+            version:         39322368
+      - cmd:             LC_SOURCE_VERSION
+        cmdsize:         16
+        version:         0
+      - cmd:             LC_ENCRYPTION_INFO_64
+        cmdsize:         24
+        cryptoff:        16384
+        cryptsize:       0
+        cryptid:         0
+        pad:             0
+      - cmd:             LC_LOAD_DYLIB
+        cmdsize:         56
+        dylib:
+          name:            24
+          timestamp:       2
+          current_version: 84017152
+          compatibility_version: 65536
+        Content:   '/usr/lib/libSystem.B.dylib'
+        ZeroPadBytes:    6
+      - cmd:             LC_FUNCTION_STARTS
+        cmdsize:         16
+        dataoff:         16400
+        datasize:        8
+      - cmd:             LC_DATA_IN_CODE
+        cmdsize:         16
+        dataoff:         16408
+        datasize:        0
+    LinkEditData:
+      ExportTrie:
+        TerminalSize:    0
+        NodeOffset:      0
+        Name:            ''
+        Flags:           0x0000000000000000
+        Address:         0x0000000000000000
+        Other:           0x0000000000000000
+        ImportName:      ''
+        Children:
+          - TerminalSize:    4
+            NodeOffset:      8
+            Name:            _foo
+            Flags:           0x0000000000000000
+            Address:         0x0000000000004000
+            Other:           0x0000000000000000
+            ImportName:      ''
+      NameList:
+        - n_strx:          2
+          n_type:          0x0F
+          n_sect:          2
+          n_desc:          0
+          n_value:         16384
+        - n_strx:          7
+          n_type:          0x01
+          n_sect:          0
+          n_desc:          256
+          n_value:         0
+      StringTable:
+        - ' '
+        - _foo
+        - dyld_stub_binder
+...
diff --git a/llvm/test/tools/llvm-readtapi/compare-incorrect-format.test b/llvm/test/tools/llvm-readtapi/compare-incorrect-format.test
deleted file mode 100644
index 09dc768518ebc7..00000000000000
--- a/llvm/test/tools/llvm-readtapi/compare-incorrect-format.test
+++ /dev/null
@@ -1,7 +0,0 @@
-; RUN: mkdir -p %t
-; RUN: yaml2obj %S/Inputs/macho.yaml -o %t/macho.dylib
-; RUN: not llvm-readtapi --compare %S/Inputs/v4A.tbd %t/macho.dylib 2>&1 | FileCheck %s
-
-; CHECK: error: {{.*}}macho.dylib' unsupported file type 
-; CHECK-NOT: error:
-; CHECK-NOT: warning:
diff --git a/llvm/test/tools/llvm-readtapi/compare-tbd-dylib.test b/llvm/test/tools/llvm-readtapi/compare-tbd-dylib.test
new file mode 100644
index 00000000000000..d31097ff22898c
--- /dev/null
+++ b/llvm/test/tools/llvm-readtapi/compare-tbd-dylib.test
@@ -0,0 +1,41 @@
+; RUN: rm -rf %t
+; RUN: split-file %s %t
+; RUN: mkdir -p %t
+; RUN: yaml2obj %S/Inputs/macho.yaml -o %t/macho.dylib
+; RUN: not llvm-readtapi --compare %t/macho.tbd %t/macho.dylib 2>&1 | FileCheck %s
+
+; CHECK:      macho.tbd
+; CHECK-NEXT: macho.dylib
+; CHECK:      Current Version
+; CHECK-NEXT: 	< 1.2
+; CHECK-NEXT: 	> 1
+; CHECK-NEXT: Compatibility Version
+; CHECK-NEXT: 	< 3.1
+; CHECK-NEXT: 	> 1
+
+;--- macho.tbd
+{
+  "main_library": {
+    "flags": [
+      {
+        "attributes": [
+          "not_app_extension_safe"
+        ]
+      }
+    ],
+    "current_versions":[{"version": "1.2"}],
+    "compatibility_versions":[{ "version": "3.1"}],
+    "install_names": [
+      {
+        "name": "macho-no-exports.dylib"
+      }
+    ],
+    "target_info": [
+      {
+        "min_deployment": "10.10",
+        "target": "x86_64-macos"
+      }
+    ]
+  },
+  "tapi_tbd_version": 5
+}
diff --git a/llvm/test/tools/llvm-readtapi/stubify-invalid.test b/llvm/test/tools/llvm-readtapi/stubify-invalid.test
new file mode 100644
index 00000000000000..3ecc9ff1aeee3a
--- /dev/null
+++ b/llvm/test/tools/llvm-readtapi/stubify-invalid.test
@@ -0,0 +1,7 @@
+; RUN: rm -rf %t
+; RUN: not llvm-readtapi -stubify %t/objc.dylib %t/flat_namespace.dylib %t/thread_local.dylib %t/fat.dylib --o tmp.tbd 2>&1 | FileCheck %s --allow-empty --check-prefix OUT
+; RUN: not llvm-readtapi -stubify --o tmp.tbd 2>&1 | FileCheck %s --allow-empty --check-prefix IN 
+
+; OUT: error: cannot write multiple inputs into single output file
+; IN: error: stubify requires at least one input file
+
diff --git a/llvm/test/tools/llvm-readtapi/stubify.test b/llvm/test/tools/llvm-readtapi/stubify.test
new file mode 100644
index 00000000000000..177301cff918cf
--- /dev/null
+++ b/llvm/test/tools/llvm-readtapi/stubify.test
@@ -0,0 +1,158 @@
+; RUN: rm -rf %t
+; RUN: split-file %s %t
+; RUN: yaml2obj %S/Inputs/flat_namespace.yaml -o %t/flat_namespace.dylib
+; RUN: yaml2obj %S/Inputs/thread_local.yaml -o %t/thread_local.dylib
+; RUN: yaml2obj %S/Inputs/universal.yaml -o %t/fat.dylib
+; RUN: yaml2obj %S/Inputs/objc.yaml -o %t/objc.dylib
+; RUN: llvm-readtapi -stubify %t/objc.dylib -o %t/new_objc.tbd 2>&1 | FileCheck %s --allow-empty 
+; RUN: llvm-readtapi -stubify %t/objc.dylib %t/flat_namespace.dylib %t/thread_local.dylib %t/fat.dylib -delete-input 2>&1 | FileCheck %s --allow-empty 
+; RUN: llvm-readtapi -compare %t/expected_flat.tbd %t/flat_namespace.tbd 2>&1 | FileCheck %s --allow-empty 
+; RUN: llvm-readtapi -compare %t/expected_tl.tbd %t/thread_local.tbd 2>&1 | FileCheck %s --allow-empty 
+; RUN: llvm-readtapi -compare %t/objc.tbd %t/expected_objc.tbd 2>&1 | FileCheck %s --allow-empty 
+; RUN: llvm-readtapi -compare %t/new_objc.tbd %t/expected_objc.tbd 2>&1 | FileCheck %s --allow-empty 
+
+; CHECK-NOT: error: 
+; CHECK-NOT: warning: 
+
+;--- expected_flat.tbd
+{
+  "main_library": {
+    "compatibility_versions": [
+      {
+        "version": "0"
+      }
+    ],
+    "current_versions": [
+      {
+        "version": "0"
+      }
+    ],
+    "exported_symbols": [
+      {
+        "text": {
+          "global": [ "_foo" ]
+        }
+      }
+    ],
+    "flags": [
+      {
+        "attributes": [
+          "flat_namespace",
+          "not_app_extension_safe"
+        ]
+      }
+    ],
+    "install_names": [
+      {
+        "name": "foo.dylib"
+      }
+    ],
+    "target_info": [
+      {
+        "min_deployment": "10.14",
+        "target": "x86_64-macos"
+      }
+    ],
+    "undefined_symbols": [
+      {
+        "data": {
+          "global": [ "dyld_stub_binder", "_bar", "_putchar" ]
+        }
+      }
+    ]
+  },
+  "tapi_tbd_version": 5
+}
+
+;--- expected_tl.tbd
+{
+  "main_library": {
+    "compatibility_versions": [
+      {
+        "version": "0"
+      }
+    ],
+    "current_versions": [
+      {
+        "version": "0"
+      }
+    ],
+    "exported_symbols": [
+      {
+        "data": {
+          "thread_local": [
+            "_MySymbol"
+          ]
+        }
+      }
+    ],
+    "flags": [
+      {
+        "attributes": [
+          "not_app_extension_safe"
+        ]
+      }
+    ],
+    "install_names": [
+      {
+        "name": "/System/Library/Frameworks/ThreadLocal.framework/ThreadLocal"
+      }
+    ],
+    "target_info": [
+      {
+        "min_deployment": "11",
+        "target": "x86_64-macos"
+      }
+    ]
+  },
+  "tapi_tbd_version": 5
+}
+
+;--- expected_objc.tbd
+{
+  "main_library": {
+    "compatibility_versions": [
+      {
+        "version": "0"
+      }
+    ],
+    "current_versions": [
+      {
+        "version": "0"
+      }
+    ],
+    "exported_symbols": [
+      {
+        "data": {
+          "objc_class": [
+            "Suggestion"
+          ],
+          "objc_ivar": [
+            "Suggestion._topChoice",
+            "Suggestion._other"
+          ]
+        }
+      }
+    ],
+    "flags": [
+      {
+        "attributes": [
+          "not_app_extension_safe"
+        ]
+      }
+    ],
+    "install_names": [
+      {
+        "name": "tmp.dylib"
+      }
+    ],
+    "target_info": [
+      {
+        "min_deployment": "13",
+        "target": "arm64-macos"
+      }
+    ]
+  },
+  "tapi_tbd_version": 5
+}
+
diff --git a/llvm/test/tools/llvm-readtapi/write.test b/llvm/test/tools/llvm-readtapi/write.test
index 1ec7a40a2e4058..90ba1c25ec12e4 100644
--- a/llvm/test/tools/llvm-readtapi/write.test
+++ b/llvm/test/tools/llvm-readtapi/write.test
@@ -1,77 +1,34 @@
 ; RUN: rm -rf %t
 ; RUN: split-file %s %t
-; RUN: llvm-readtapi %t/arm64.tbd 2>&1 | FileCheck %s
+; RUN: mkdir -p %t
+; RUN: yaml2obj %S/Inputs/macho.yaml -o %t/macho.dylib
+; RUN: llvm-readtapi %t/macho.dylib -o %t/out.tbd 2>&1 | FileCheck %s --allow-empty 
+; RUN: llvm-readtapi -compare %t/out.tbd %t/expected.tbd 2>&1 | FileCheck %s --allow-empty 
 
-; CHECK-NOT: error 
-; CHECK-NOT: warning
-; CHECK: {
-; CHECK-NEXT:   "main_library": {
-; CHECK-NEXT:     "allowable_clients": [
-; CHECK-NEXT:       {
-; CHECK-NEXT:         "clients": [
-; CHECK-NEXT:           "ClientAll"
-; CHECK-NEXT:         ]
-; CHECK-NEXT:       }
-; CHECK-NEXT:     ],
-; CHECK-NEXT:     "exported_symbols": [
-; CHECK-NEXT:       {
-; CHECK-NEXT:         "data": {
-; CHECK-NEXT:           "global": [
-; CHECK-NEXT:             "_sym1"
-; CHECK-NEXT:           ],
-; CHECK-NEXT:           "objc_class": [
-; CHECK-NEXT:             "_A"
-; CHECK-NEXT:           ],
-; CHECK-NEXT:           "objc_ivar": [
-; CHECK-NEXT:             "_A._ivar1"
-; CHECK-NEXT:           ],
-; CHECK-NEXT:           "thread_local": [
-; CHECK-NEXT:             "_tlv1"
-; CHECK-NEXT:           ],
-; CHECK-NEXT:           "weak": [
-; CHECK-NEXT:             "_weak1"
-; CHECK-NEXT:           ]
-; CHECK-NEXT:         }
-; CHECK-NEXT:       }
-; CHECK-NEXT:     ],
-; CHECK-NEXT:     "install_names": [
-; CHECK-NEXT:       {
-; CHECK-NEXT:         "name": "/usr/lib/libfat.dylib"
-; CHECK-NEXT:       }
-; CHECK-NEXT:     ],
-; CHECK-NEXT:     "reexported_libraries": [
-; CHECK-NEXT:       {
-; CHECK-NEXT:         "names": [
-; CHECK-NEXT:           "/usr/lib/liball.dylib"
-; CHECK-NEXT:         ]
-; CHECK-NEXT:       }
-; CHECK-NEXT:     ],
-; CHECK-NEXT:     "target_info": [
-; CHECK-NEXT:       {
-; CHECK-NEXT:         "target": "arm64-macos"
-; CHECK-NEXT:       }
-; CHECK-NEXT:     ]
-; CHECK-NEXT:   },
-; CHECK-NEXT:   "tapi_tbd_version": 5
-; CHECK-NEXT: }
+; CHECK-NOT: error
+; CHECK-NOT: warning  
 
-
-;--- arm64.tbd
---- !tapi-tbd
-tbd-version:     4
-targets:         [ arm64-macos ]
-install-name:    '/usr/lib/libfat.dylib'
-allowable-clients:
-  - targets:         [ arm64-macos ]
-    clients:         [ ClientAll ]
-reexported-libraries:
-  - targets:         [ arm64-macos ]
-    libraries:       [ '/usr/lib/liball.dylib' ]
-exports:
-  - targets:         [ arm64-macos ]
-    symbols:         [ _sym1 ]
-    objc-classes:    [ _A ]
-    objc-ivars:      [ _A._ivar1 ]
-    weak-symbols:    [ _weak1 ]
-    thread-local-symbols: [ _tlv1 ]
-...
+;--- expected.tbd
+{
+  "main_library": {
+    "flags": [
+      {
+        "attributes": [
+          "not_app_extension_safe"
+        ]
+      }
+    ],
+    "install_names": [
+      {
+        "name": "macho-no-exports.dylib"
+      }
+    ],
+    "target_info": [
+      {
+        "min_deployment": "10.10",
+        "target": "x86_64-macos"
+      }
+    ]
+  },
+  "tapi_tbd_version": 5
+}
diff --git a/llvm/tools/llvm-readtapi/TapiOpts.td b/llvm/tools/llvm-readtapi/TapiOpts.td
index 552690ce1385db..34ec5616a42e27 100644
--- a/llvm/tools/llvm-readtapi/TapiOpts.td
+++ b/llvm/tools/llvm-readtapi/TapiOpts.td
@@ -15,6 +15,7 @@ def compare : FF<"compare", "compare tapi files for library differences">, Group
 def merge : FF<"merge", "merge the input files that represent the same library">, Group<action_group>;
 def extract: FF<"extract", "extract <architecture> from input file">, Group<action_group>;
 def remove: FF<"remove", "remove <architecture> from input file">, Group<action_group>;
+def stubify: FF<"stubify", "create a tapi file from a dynamic library or framework">, Group<action_group>;
 
 //
 // General Driver options 
@@ -26,3 +27,8 @@ defm output: JS<"o", "write output to <file>","<file>">;
 def compact: FF<"compact", "write compact tapi output file">;
 defm filetype: JS<"filetype", "specify the output file type (tbd-v3, tbd-v4 or tbd-v5)","<value>">;
 defm arch: JS<"arch", "specify the <architecture>", "<architecture>">;
+
+//
+// Stub options
+//
+def delete_input : FF<"delete-input", "delete and replace input file on success">;
diff --git a/llvm/tools/llvm-readtapi/llvm-readtapi.cpp b/llvm/tools/llvm-readtapi/llvm-readtapi.cpp
index 5fa023d1252582..78f1809e9d6473 100644
--- a/llvm/tools/llvm-readtapi/llvm-readtapi.cpp
+++ b/llvm/tools/llvm-readtapi/llvm-readtapi.cpp
@@ -10,14 +10,18 @@
 //
 //===----------------------------------------------------------------------===//
 #include "DiffEngine.h"
+#include "llvm/BinaryFormat/Magic.h"
 #include "llvm/Option/Arg.h"
 #include "llvm/Option/ArgList.h"
 #include "llvm/Option/Option.h"
 #include "llvm/Support/CommandLine.h"
 #include "llvm/Support/Error.h"
+#include "llvm/Support/FileSystem.h"
 #include "llvm/Support/InitLLVM.h"
 #include "llvm/Support/MemoryBuffer.h"
+#include "llvm/Support/Path.h"
 #include "llvm/Support/raw_ostream.h"
+#include "llvm/TextAPI/DylibReader.h"
 #include "llvm/TextAPI/TextAPIError.h"
 #include "llvm/TextAPI/TextAPIReader.h"
 #include "llvm/TextAPI/TextAPIWriter.h"
@@ -27,6 +31,10 @@ using namespace llvm;
 using namespace MachO;
 using namespace object;
 
+#if !defined(PATH_MAX)
+#define PATH_MAX 1024
+#endif
+
 namespace {
 using namespace llvm::opt;
 enum ID {
@@ -56,10 +64,15 @@ class TAPIOptTable : public opt::GenericOptTable {
   }
 };
 
+struct StubOptions {
+  bool DeleteInput = false;
+};
+
 struct Context {
   std::vector<std::string> Inputs;
   std::unique_ptr<llvm::raw_fd_stream> OutStream;
   FileType WriteFT = FileType::TBD_V5;
+  StubOptions StubOpt;
   bool Compact = false;
   Architecture Arch = AK_unknown;
 };
@@ -79,6 +92,29 @@ static void reportError(Twine Message, int ExitCode = EXIT_FAILURE) {
   exit(ExitCode);
 }
 
+/// Replace extension considering frameworks.
+static void replace_extension(SmallVectorImpl<char> &Path,
+                              const Twine &Extension) {
+  StringRef P(Path.begin(), Path.size());
+  auto ParentPath = sys::path::parent_path(P);
+  auto Filename = sys::path::filename(P);
+
+  if (!ParentPath.ends_with(Filename.str() + ".framework")) {
+    sys::path::replace_extension(Path, Extension);
+    return;
+  }
+
+  SmallString<8> Storage;
+  StringRef Ext = Extension.toStringRef(Storage);
+
+  // Append '.' if needed.
+  if (!Ext.empty() && Ext[0] != '.')
+    Path.push_back('.');
+
+  // Append extension.
+  Path.append(Ext.begin(), Ext.end());
+}
+
 static std::unique_ptr<InterfaceFile>
 getInterfaceFile(const StringRef Filename, bool ResetBanner = true) {
   ExitOnErr.setBanner(TOOLNAME + ": error: '" + Filename.str() + "' ");
@@ -86,13 +122,35 @@ getInterfaceFile(const StringRef Filename, bool ResetBanner = true) {
       MemoryBuffer::getFile(Filename);
   if (BufferOrErr.getError())
     ExitOnErr(errorCodeToError(BufferOrErr.getError()));
-  Expected<std::unique_ptr<InterfaceFile>> IF =
-      TextAPIReader::get((*BufferOrErr)->getMemBufferRef());
-  if (!IF)
-    ExitOnErr(IF.takeError());
+  auto Buffer = std::move(*BufferOrErr);
+
+  std::unique_ptr<InterfaceFile> IF;
+  switch (identify_magic(Buffer->getBuffer())) {
+  case file_magic::macho_dynamically_linked_shared_lib:
+    LLVM_FALLTHROUGH;
+  case file_magic::macho_dynamically_linked_shared_lib_stub:
+    LLVM_FALLTHROUGH;
+  case file_magic::macho_universal_binary: {
+    auto IFOrErr = DylibReader::get(Buffer->getMemBufferRef());
+    if (!IFOrErr)
+      ExitOnErr(IFOrErr.takeError());
+    IF = std::move(*IFOrErr);
+    break;
+  }
+  case file_magic::tapi_file: {
+    auto IFOrErr = TextAPIReader::get(Buffer->getMemBufferRef());
+    if (!IFOrErr)
+      ExitOnErr(IFOrErr.takeError());
+    IF = std::move(*IFOrErr);
+    break;
+  }
+  default:
+    reportError(Filename + ": unsupported file type");
+  }
+
   if (ResetBanner)
     ExitOnErr.setBanner(TOOLNAME + ": error: ");
-  return std::move(*IF);
+  return IF;
 }
 
 static bool handleCompareAction(const Context &Ctx) {
@@ -142,6 +200,30 @@ static bool handleMergeAction(const Context &Ctx) {
   return handleWriteAction(Ctx, std::move(Out));
 }
 
+static bool handleStubifyAction(Context &Ctx) {
+  if (Ctx.Inputs.empty())
+    reportError("stubify requires at least one input file");
+
+  if ((Ctx.Inputs.size() > 1) && (Ctx.OutStream != nullptr))
+    reportError("cannot write multiple inputs into single output file");
+
+  for (StringRef FileName : Ctx.Inputs) {
+    auto IF = getInterfaceFile(FileName);
+    if (Ctx.StubOpt.DeleteInput) {
+      std::error_code EC;
+      SmallString<PATH_MAX> OutputLoc = FileName;
+      replace_extension(OutputLoc, ".tbd");
+      Ctx.OutStream = std::make_unique<llvm::raw_fd_stream>(OutputLoc, EC);
+      if (EC)
+        reportError("opening file '" + OutputLoc + ": " + EC.message());
+      if (auto Err = sys::fs::remove(FileName))
+        reportError("deleting file '" + FileName + ": " + EC.message());
+    }
+    handleWriteAction(Ctx, std::move(IF));
+  }
+  return EXIT_SUCCESS;
+}
+
 using IFOperation =
     std::function<llvm::Expected<std::unique_ptr<InterfaceFile>>(
         const llvm::MachO::InterfaceFile &, Architecture)>;
@@ -160,6 +242,10 @@ static bool handleSingleFileAction(const Context &Ctx, const StringRef Action,
   return handleWriteAction(Ctx, std::move(*OutIF));
 }
 
+static void setStubOptions(opt::InputArgList &Args, StubOptions &Opt) {
+  Opt.DeleteInput = Args.hasArg(OPT_delete_input);
+}
+
 int main(int Argc, char **Argv) {
   InitLLVM X(Argc, Argv);
   BumpPtrAllocator A;
@@ -183,6 +269,7 @@ int main(int Argc, char **Argv) {
     return EXIT_SUCCESS;
   }
 
+  // TODO: Add support for picking up libraries from directory input.
   for (opt::Arg *A : Args.filtered(OPT_INPUT))
     Ctx.Inputs.push_back(A->getValue());
 
@@ -237,6 +324,9 @@ int main(int Argc, char **Argv) {
     return handleSingleFileAction(Ctx, "extract", &InterfaceFile::extract);
   case OPT_remove:
     return handleSingleFileAction(Ctx, "remove", &InterfaceFile::remove);
+  case OPT_stubify:
+    setStubOptions(Args, Ctx.StubOpt);
+    return handleStubifyAction(Ctx);
   }
 
   return EXIT_SUCCESS;

>From def014bf6ae94106d0c1b1e8daadffa5580df5e5 Mon Sep 17 00:00:00 2001
From: Cyndy Ishida <cyndy_ishida at apple.com>
Date: Wed, 20 Dec 2023 11:28:39 -0800
Subject: [PATCH 2/3] f

---
 llvm/include/llvm/TextAPI/Utils.h | 31 +++++++++++++++++++++++++
 llvm/lib/TextAPI/Utils.cpp        | 38 +++++++++++++++++++++++++++++++
 2 files changed, 69 insertions(+)
 create mode 100644 llvm/include/llvm/TextAPI/Utils.h
 create mode 100644 llvm/lib/TextAPI/Utils.cpp

diff --git a/llvm/include/llvm/TextAPI/Utils.h b/llvm/include/llvm/TextAPI/Utils.h
new file mode 100644
index 00000000000000..77ed449c34f271
--- /dev/null
+++ b/llvm/include/llvm/TextAPI/Utils.h
@@ -0,0 +1,31 @@
+//===- llvm/TextAPI/Utils.h - TAPI Utils -----------------------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+//
+// Helper functionality used for Darwin specific operations.
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef LLVM_TEXTAPI_UTILS_H
+#define LLVM_TEXTAPI_UTILS_H
+
+#include "llvm/Support/FileSystem.h"
+#include "llvm/Support/Path.h"
+
+#if !defined(PATH_MAX)
+#define PATH_MAX 1024
+#endif
+
+namespace llvm::MachO {
+
+using PathSeq = std::vector<std::string>;
+
+/// Replace extension considering frameworks.
+static void replace_extension(SmallVectorImpl<char> &Path,
+                              const Twine &Extension);
+} // namespace llvm::MachO
+#endif // LLVM_TEXTAPI_UTILS_H
diff --git a/llvm/lib/TextAPI/Utils.cpp b/llvm/lib/TextAPI/Utils.cpp
new file mode 100644
index 00000000000000..e17df0df578af0
--- /dev/null
+++ b/llvm/lib/TextAPI/Utils.cpp
@@ -0,0 +1,38 @@
+//===- Utils.cpp ----------------------------------------------------------===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+//
+// Implements utility functions for TextAPI Darwin operations.
+//
+//===----------------------------------------------------------------------===//
+
+#include "llvm/TextAPI/Utils.h"
+
+using namespace llvm;
+using namespace llvm::MachO;
+
+static void llvm::MachO::replace_extension(SmallVectorImpl<char> &Path,
+                                           const Twine &Extension) {
+  StringRef P(Path.begin(), Path.size());
+  auto ParentPath = sys::path::parent_path(P);
+  auto Filename = sys::path::filename(P);
+
+  if (!ParentPath.ends_with(Filename.str() + ".framework")) {
+    sys::path::replace_extension(Path, Extension);
+    return;
+  }
+
+  SmallString<8> Storage;
+  StringRef Ext = Extension.toStringRef(Storage);
+
+  // Append '.' if needed.
+  if (!Ext.empty() && Ext[0] != '.')
+    Path.push_back('.');
+
+  // Append extension.
+  Path.append(Ext.begin(), Ext.end());
+}

>From 5ce769326d9aca8e5a9deb26baf8c5a9990cc14e Mon Sep 17 00:00:00 2001
From: Cyndy Ishida <cyndy_ishida at apple.com>
Date: Wed, 20 Dec 2023 12:54:33 -0800
Subject: [PATCH 3/3] Move Path helpers into TextAPI and add descriptive
 comments

---
 llvm/include/llvm/TextAPI/Utils.h          |  7 ++++--
 llvm/lib/TextAPI/CMakeLists.txt            |  1 +
 llvm/lib/TextAPI/Utils.cpp                 |  8 ++++---
 llvm/tools/llvm-readtapi/CMakeLists.txt    |  1 +
 llvm/tools/llvm-readtapi/llvm-readtapi.cpp | 26 ++--------------------
 5 files changed, 14 insertions(+), 29 deletions(-)

diff --git a/llvm/include/llvm/TextAPI/Utils.h b/llvm/include/llvm/TextAPI/Utils.h
index 77ed449c34f271..bb22ea5e9606b2 100644
--- a/llvm/include/llvm/TextAPI/Utils.h
+++ b/llvm/include/llvm/TextAPI/Utils.h
@@ -13,6 +13,7 @@
 #ifndef LLVM_TEXTAPI_UTILS_H
 #define LLVM_TEXTAPI_UTILS_H
 
+#include "llvm/ADT/Twine.h"
 #include "llvm/Support/FileSystem.h"
 #include "llvm/Support/Path.h"
 
@@ -25,7 +26,9 @@ namespace llvm::MachO {
 using PathSeq = std::vector<std::string>;
 
 /// Replace extension considering frameworks.
-static void replace_extension(SmallVectorImpl<char> &Path,
-                              const Twine &Extension);
+///
+/// \param Path Location of file.
+/// \param Extension File extension to update with.
+void replace_extension(SmallVectorImpl<char> &Path, const Twine &Extension);
 } // namespace llvm::MachO
 #endif // LLVM_TEXTAPI_UTILS_H
diff --git a/llvm/lib/TextAPI/CMakeLists.txt b/llvm/lib/TextAPI/CMakeLists.txt
index 2017a1ad6398b3..29533756e41aed 100644
--- a/llvm/lib/TextAPI/CMakeLists.txt
+++ b/llvm/lib/TextAPI/CMakeLists.txt
@@ -13,6 +13,7 @@ add_llvm_component_library(LLVMTextAPI
   TextAPIError.cpp
   TextStub.cpp
   TextStubCommon.cpp
+  Utils.cpp
 
   ADDITIONAL_HEADER_DIRS
   "${LLVM_MAIN_INCLUDE_DIR}/llvm/TextAPI"
diff --git a/llvm/lib/TextAPI/Utils.cpp b/llvm/lib/TextAPI/Utils.cpp
index e17df0df578af0..6d85083e0b54c1 100644
--- a/llvm/lib/TextAPI/Utils.cpp
+++ b/llvm/lib/TextAPI/Utils.cpp
@@ -15,8 +15,8 @@
 using namespace llvm;
 using namespace llvm::MachO;
 
-static void llvm::MachO::replace_extension(SmallVectorImpl<char> &Path,
-                                           const Twine &Extension) {
+void llvm::MachO::replace_extension(SmallVectorImpl<char> &Path,
+                                    const Twine &Extension) {
   StringRef P(Path.begin(), Path.size());
   auto ParentPath = sys::path::parent_path(P);
   auto Filename = sys::path::filename(P);
@@ -25,7 +25,9 @@ static void llvm::MachO::replace_extension(SmallVectorImpl<char> &Path,
     sys::path::replace_extension(Path, Extension);
     return;
   }
-
+  // Framework dylibs do not have a file extension, in those cases the new
+  // extension is appended. e.g. given Path: "Foo.framework/Foo" and Extension:
+  // "tbd", the result is "Foo.framework/Foo.tbd".
   SmallString<8> Storage;
   StringRef Ext = Extension.toStringRef(Storage);
 
diff --git a/llvm/tools/llvm-readtapi/CMakeLists.txt b/llvm/tools/llvm-readtapi/CMakeLists.txt
index ef88d786d832fc..855a1473888f53 100644
--- a/llvm/tools/llvm-readtapi/CMakeLists.txt
+++ b/llvm/tools/llvm-readtapi/CMakeLists.txt
@@ -1,4 +1,5 @@
 set(LLVM_LINK_COMPONENTS
+  BinaryFormat
   Object
   Support
   Option
diff --git a/llvm/tools/llvm-readtapi/llvm-readtapi.cpp b/llvm/tools/llvm-readtapi/llvm-readtapi.cpp
index 78f1809e9d6473..193a281d6341af 100644
--- a/llvm/tools/llvm-readtapi/llvm-readtapi.cpp
+++ b/llvm/tools/llvm-readtapi/llvm-readtapi.cpp
@@ -25,6 +25,7 @@
 #include "llvm/TextAPI/TextAPIError.h"
 #include "llvm/TextAPI/TextAPIReader.h"
 #include "llvm/TextAPI/TextAPIWriter.h"
+#include "llvm/TextAPI/Utils.h"
 #include <cstdlib>
 
 using namespace llvm;
@@ -92,29 +93,6 @@ static void reportError(Twine Message, int ExitCode = EXIT_FAILURE) {
   exit(ExitCode);
 }
 
-/// Replace extension considering frameworks.
-static void replace_extension(SmallVectorImpl<char> &Path,
-                              const Twine &Extension) {
-  StringRef P(Path.begin(), Path.size());
-  auto ParentPath = sys::path::parent_path(P);
-  auto Filename = sys::path::filename(P);
-
-  if (!ParentPath.ends_with(Filename.str() + ".framework")) {
-    sys::path::replace_extension(Path, Extension);
-    return;
-  }
-
-  SmallString<8> Storage;
-  StringRef Ext = Extension.toStringRef(Storage);
-
-  // Append '.' if needed.
-  if (!Ext.empty() && Ext[0] != '.')
-    Path.push_back('.');
-
-  // Append extension.
-  Path.append(Ext.begin(), Ext.end());
-}
-
 static std::unique_ptr<InterfaceFile>
 getInterfaceFile(const StringRef Filename, bool ResetBanner = true) {
   ExitOnErr.setBanner(TOOLNAME + ": error: '" + Filename.str() + "' ");
@@ -212,7 +190,7 @@ static bool handleStubifyAction(Context &Ctx) {
     if (Ctx.StubOpt.DeleteInput) {
       std::error_code EC;
       SmallString<PATH_MAX> OutputLoc = FileName;
-      replace_extension(OutputLoc, ".tbd");
+      MachO::replace_extension(OutputLoc, ".tbd");
       Ctx.OutStream = std::make_unique<llvm::raw_fd_stream>(OutputLoc, EC);
       if (EC)
         reportError("opening file '" + OutputLoc + ": " + EC.message());



More information about the llvm-commits mailing list