From c6f29dbb596ff0fd6d8b6445eabbf01f6d063c8c Mon Sep 17 00:00:00 2001 From: Cyndy Ishida Date: Wed, 20 Dec 2023 14:56:53 -0800 Subject: [PATCH] [readtapi] Setup simple stubify support (#76075) 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. Add Util APIs to TextAPI for common operations used by readtapi for now. --- llvm/include/llvm/TextAPI/Utils.h | 34 + llvm/lib/TextAPI/CMakeLists.txt | 1 + llvm/lib/TextAPI/Utils.cpp | 40 + .../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/CMakeLists.txt | 1 + llvm/tools/llvm-readtapi/TapiOpts.td | 6 + llvm/tools/llvm-readtapi/llvm-readtapi.cpp | 78 +- 16 files changed, 6022 insertions(+), 85 deletions(-) create mode 100644 llvm/include/llvm/TextAPI/Utils.h create mode 100644 llvm/lib/TextAPI/Utils.cpp 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/include/llvm/TextAPI/Utils.h b/llvm/include/llvm/TextAPI/Utils.h new file mode 100644 index 000000000000..bb22ea5e9606 --- /dev/null +++ b/llvm/include/llvm/TextAPI/Utils.h @@ -0,0 +1,34 @@ +//===- 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/ADT/Twine.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; + +/// Replace extension considering frameworks. +/// +/// \param Path Location of file. +/// \param Extension File extension to update with. +void replace_extension(SmallVectorImpl &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 2017a1ad6398..29533756e41a 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 new file mode 100644 index 000000000000..6d85083e0b54 --- /dev/null +++ b/llvm/lib/TextAPI/Utils.cpp @@ -0,0 +1,40 @@ +//===- 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; + +void llvm::MachO::replace_extension(SmallVectorImpl &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; + } + // 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); + + // Append '.' if needed. + if (!Ext.empty() && Ext[0] != '.') + Path.push_back('.'); + + // Append extension. + Path.append(Ext.begin(), Ext.end()); +} 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 000000000000..1cd97f09bac7 --- /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 000000000000..48ceea1ed801 --- /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 000000000000..50219ab1fefb --- /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 000000000000..bc247110e1ff --- /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 000000000000..abf17e645cc6 --- /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 09dc768518eb..000000000000 --- 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 000000000000..d31097ff2289 --- /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 000000000000..3ecc9ff1aeee --- /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 000000000000..177301cff918 --- /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 1ec7a40a2e40..90ba1c25ec12 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/CMakeLists.txt b/llvm/tools/llvm-readtapi/CMakeLists.txt index ef88d786d832..855a1473888f 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/TapiOpts.td b/llvm/tools/llvm-readtapi/TapiOpts.td index 552690ce1385..34ec5616a42e 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; def extract: FF<"extract", "extract from input file">, Group; def remove: FF<"remove", "remove from input file">, Group; +def stubify: FF<"stubify", "create a tapi file from a dynamic library or framework">, Group; // // General Driver options @@ -26,3 +27,8 @@ defm output: JS<"o", "write output to ","">; 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)","">; defm arch: JS<"arch", "specify the ", "">; + +// +// 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 5fa023d12525..193a281d6341 100644 --- a/llvm/tools/llvm-readtapi/llvm-readtapi.cpp +++ b/llvm/tools/llvm-readtapi/llvm-readtapi.cpp @@ -10,23 +10,32 @@ // //===----------------------------------------------------------------------===// #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" +#include "llvm/TextAPI/Utils.h" #include 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 +65,15 @@ public: } }; +struct StubOptions { + bool DeleteInput = false; +}; + struct Context { std::vector Inputs; std::unique_ptr OutStream; FileType WriteFT = FileType::TBD_V5; + StubOptions StubOpt; bool Compact = false; Architecture Arch = AK_unknown; }; @@ -86,13 +100,35 @@ getInterfaceFile(const StringRef Filename, bool ResetBanner = true) { MemoryBuffer::getFile(Filename); if (BufferOrErr.getError()) ExitOnErr(errorCodeToError(BufferOrErr.getError())); - Expected> IF = - TextAPIReader::get((*BufferOrErr)->getMemBufferRef()); - if (!IF) - ExitOnErr(IF.takeError()); + auto Buffer = std::move(*BufferOrErr); + + std::unique_ptr 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 +178,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 OutputLoc = FileName; + MachO::replace_extension(OutputLoc, ".tbd"); + Ctx.OutStream = std::make_unique(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>( const llvm::MachO::InterfaceFile &, Architecture)>; @@ -160,6 +220,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 +247,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 +302,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;