<table border="1" cellspacing="0" cellpadding="8">
    <tr>
        <th>Issue</th>
        <td>
            <a href=https://github.com/llvm/llvm-project/issues/71822>71822</a>
        </td>
    </tr>

    <tr>
        <th>Summary</th>
        <td>
            BOLT JITLink failure when BOLTing Clang on aarch64
        </td>
    </tr>

    <tr>
      <th>Labels</th>
      <td>
            BOLT
      </td>
    </tr>

    <tr>
      <th>Assignees</th>
      <td>
      </td>
    </tr>

    <tr>
      <th>Reporter</th>
      <td>
          nathanchance
      </td>
    </tr>
</table>

<pre>
    When attempting to apply BOLT to clang on an aarch64 host using building the Linux kernel as the instrumentation benchmark, I get an error during the BOLT stage. I can reproduce consistently with the following workflow.

```
$ curl -LSs https://cdn.kernel.org/pub/linux/kernel/v6.x/linux-6.6.1.tar.xz | tar -C src -xJf -

$ fd -d 2 .
src/
src/linux-6.6.1/
src/llvm-project/

$ /usr/bin/clang --version
clang version 17.0.4 (Fedora 17.0.4-1.fc40)
Target: aarch64-redhat-linux-gnu
Thread model: posix
InstalledDir: /usr/bin

$ git -C src/llvm-project show -s --format='%h ("%s")'
fd389f46deb0 ("[flang] Change `uniqueCGIdent` separator from `.` to `X` (#71338)")

$ cmake \
-B build/llvm/bootstrap \
-G Ninja \
-S src/llvm-project/llvm \
-Wno-dev \
--log-level=NOTICE \
-DCLANG_ENABLE_ARCMT=OFF \
-DCLANG_ENABLE_STATIC_ANALYZER=OFF \
-DCLANG_PLUGIN_SUPPORT=OFF \
-DCMAKE_AR=/usr/bin/llvm-ar \
-DCMAKE_BUILD_TYPE=Release \
-DCMAKE_CXX_ARCHIVE_CREATE='<CMAKE_AR> DqcT <TARGET> <OBJECTS>' \
-DCMAKE_CXX_ARCHIVE_FINISH=true \
-DCMAKE_CXX_COMPILER=/usr/bin/clang++ \
-DCMAKE_C_COMPILER=/usr/bin/clang \
-DCOMPILER_RT_BUILD_CRT=OFF \
-DCOMPILER_RT_BUILD_LIBFUZZER=OFF \
-DCOMPILER_RT_BUILD_SANITIZERS=OFF \
-DCOMPILER_RT_BUILD_XRAY=OFF \
-DLLVM_BUILD_UTILS=OFF \
-DLLVM_ENABLE_ASSERTIONS=OFF \
-DLLVM_ENABLE_BACKTRACES=OFF \
-DLLVM_ENABLE_BINDINGS=OFF \
-DLLVM_ENABLE_OCAMLDOC=OFF \
-DLLVM_ENABLE_PROJECTS='clang;lld;bolt;compiler-rt' \
-DLLVM_ENABLE_TERMINFO=OFF \
-DLLVM_ENABLE_WARNINGS=OFF \
-DLLVM_EXTERNAL_CLANG_TOOLS_EXTRA_SOURCE_DIR= \
-DLLVM_INCLUDE_DOCS=OFF \
-DLLVM_INCLUDE_EXAMPLES=OFF \
-DLLVM_INCLUDE_TESTS=OFF \
-DLLVM_TARGETS_TO_BUILD=host \
-DLLVM_USE_LINKER=/usr/bin/ld.lld

$ ninja -C build/llvm/bootstrap

$ cmake \
-B build/llvm/instrumented \
-G Ninja \
-S src/llvm-project/llvm \
-Wno-dev \
--log-level=NOTICE \
-DCLANG_ENABLE_ARCMT=OFF \
-DCLANG_ENABLE_STATIC_ANALYZER=OFF \
-DCLANG_PLUGIN_SUPPORT=OFF \
-DCLANG_TABLEGEN=$PWD/build/llvm/bootstrap/bin/clang-tblgen \
-DCMAKE_AR=$PWD/build/llvm/bootstrap/bin/llvm-ar \
-DCMAKE_BUILD_TYPE=Release \
-DCMAKE_CXX_ARCHIVE_CREATE='<CMAKE_AR> DqcT <TARGET> <OBJECTS>' \
-DCMAKE_CXX_ARCHIVE_FINISH=true \
-DCMAKE_CXX_COMPILER=$PWD/build/llvm/bootstrap/bin/clang++ \
-DCMAKE_CXX_FLAGS= \
-DCMAKE_C_COMPILER=$PWD/build/llvm/bootstrap/bin/clang \
-DCMAKE_C_FLAGS= \
-DCMAKE_RANLIB=$PWD/build/llvm/bootstrap/bin/llvm-ranlib \
-DLLVM_BUILD_INSTRUMENTED=IR \
-DLLVM_BUILD_RUNTIME=OFF \
-DLLVM_DISTRIBUTION_COMPONENTS='llvm-ar;llvm-nm;llvm-objcopy;llvm-objdump;llvm-ranlib;llvm-readelf;llvm-strip;clang;clang-resource-headers;lld' \
-DLLVM_ENABLE_ASSERTIONS=ON \
-DLLVM_ENABLE_BINDINGS=OFF \
-DLLVM_ENABLE_OCAMLDOC=OFF \
-DLLVM_ENABLE_PROJECTS='clang;lld' \
-DLLVM_ENABLE_TERMINFO=OFF \
-DLLVM_ENABLE_WARNINGS=OFF \
-DLLVM_EXTERNAL_CLANG_TOOLS_EXTRA_SOURCE_DIR= \
-DLLVM_INCLUDE_DOCS=OFF \
-DLLVM_INCLUDE_EXAMPLES=OFF \
-DLLVM_LINK_LLVM_DYLIB=ON \
-DLLVM_TABLEGEN=$PWD/build/llvm/bootstrap/bin/llvm-tblgen \
-DLLVM_TARGETS_TO_BUILD='AArch64;ARM;X86' \
-DLLVM_USE_LINKER=$PWD/build/llvm/bootstrap/bin/ld.lld \
-DLLVM_VP_COUNTERS_PER_SITE=6

$ ninja -C build/llvm/instrumented distribution

$ make \
-C src/linux-6.6.1 \
-skj"$(nproc)" \
ARCH=arm64 \
KCFLAGS=-Wno-error \
LLVM=$PWD/build/llvm/instrumented/bin/ \
O=$PWD/build/linux defconfig all

$ build/llvm/bootstrap/bin/llvm-profdata merge \
-output=$PWD/build/llvm/instrumented/profdata.prof \
build/llvm/instrumented/profiles/*.profraw

$ cmake \
-B build/llvm/final \
-G Ninja \
-S src/llvm-project/llvm \
-Wno-dev \
--log-level=NOTICE \
-DCLANG_ENABLE_ARCMT=OFF \
-DCLANG_ENABLE_STATIC_ANALYZER=OFF \
-DCLANG_PLUGIN_SUPPORT=OFF \
-DCLANG_TABLEGEN=$PWD/build/llvm/bootstrap/bin/clang-tblgen \
-DCMAKE_AR=$PWD/build/llvm/bootstrap/bin/llvm-ar \
-DCMAKE_BUILD_TYPE=Release \
-DCMAKE_CXX_ARCHIVE_CREATE='<CMAKE_AR> DqcT <TARGET> <OBJECTS>' \
-DCMAKE_CXX_ARCHIVE_FINISH=true \
-DCMAKE_CXX_COMPILER=$PWD/build/llvm/bootstrap/bin/clang++ \
-DCMAKE_CXX_FLAGS= \
-DCMAKE_C_COMPILER=$PWD/build/llvm/bootstrap/bin/clang \
-DCMAKE_C_FLAGS= \
-DCMAKE_EXE_LINKER_FLAGS=-Wl,--emit-relocs \
-DCMAKE_INSTALL_PREFIX=$PWD/install \
-DCMAKE_RANLIB=$PWD/build/llvm/bootstrap/bin/llvm-ranlib \
-DLLVM_DISTRIBUTION_COMPONENTS='llvm-ar;llvm-nm;llvm-objcopy;llvm-objdump;llvm-ranlib;llvm-readelf;llvm-strip;clang;clang-resource-headers;lld' \
-DLLVM_ENABLE_ASSERTIONS=ON \
-DLLVM_ENABLE_BINDINGS=OFF \
-DLLVM_ENABLE_OCAMLDOC=OFF \
-DLLVM_ENABLE_PROJECTS='clang;lld' \
-DLLVM_ENABLE_TERMINFO=OFF \
-DLLVM_ENABLE_WARNINGS=OFF \
-DLLVM_EXTERNAL_CLANG_TOOLS_EXTRA_SOURCE_DIR= \
-DLLVM_INCLUDE_DOCS=OFF \
-DLLVM_INCLUDE_EXAMPLES=OFF \
-DLLVM_PROFDATA_FILE=$PWD/build/llvm/instrumented/profdata.prof \
-DLLVM_TABLEGEN=$PWD/build/llvm/bootstrap/bin/llvm-tblgen \
-DLLVM_TARGETS_TO_BUILD='AArch64;ARM;X86' \
-DLLVM_USE_LINKER=$PWD/build/llvm/bootstrap/bin/ld.lld

$ ninja -C build/llvm/final install-distribution

$ build/llvm/bootstrap/bin/llvm-bolt \
--instrument \
--instrumentation-file=$PWD/build/llvm/final/clang.fdata \
--instrumentation-file-append-pid \
-o install/bin/clang.inst \
"$(realpath install/bin/clang)"
BOLT-INFO: shared object or position-independent executable detected
BOLT-INFO: Target architecture: aarch64
BOLT-INFO: BOLT version: fd389f46deb0252a7f7412ef4b0809d7dc2d7072
BOLT-INFO: first alloc address is 0x0
BOLT-INFO: creating new program header table at address 0x6800000, offset 0x6800000
BOLT-INFO: enabling relocation mode
BOLT-INFO: forcing -jump-tables=move for instrumentation
BOLT-INFO: disabling -align-macro-fusion on non-x86 platform
BOLT-INFO: number of removed linker-inserted veneers: 0
BOLT-INFO: 0 out of 135164 functions in the binary (0.0%) have non-empty execution profile
BOLT-INSTRUMENTER: Number of indirect call site descriptors: 30216
BOLT-INSTRUMENTER: Number of indirect call target descriptors: 130849
BOLT-INSTRUMENTER: Number of function descriptors: 130849
BOLT-INSTRUMENTER: Number of branch counters: 1064749
BOLT-INSTRUMENTER: Number of ST leaf node counters: 572082
BOLT-INSTRUMENTER: Number of direct call counters: 0
BOLT-INSTRUMENTER: Total number of counters: 1636831
BOLT-INSTRUMENTER: Total size of counters: 13094648 bytes (static alloc memory)
BOLT-INSTRUMENTER: Total size of string table emitted: 15927198 bytes in file
BOLT-INSTRUMENTER: Total size of descriptors: 125545540 bytes in file
BOLT-INSTRUMENTER: Profile will be saved to file .../build/llvm/final/clang.fdata
BOLT-INFO: Starting stub-insertion pass
BOLT-INFO: Inserted 10463 stubs in the hot area and 0 stubs in the cold area. Shared 0 times, iterated 3 times.
BOLT-INFO: padding code to 0xe600000 to accommodate hot text
BOLT-INFO: output linked against instrumentation runtime library, lib entry point is 0x10123bf4
BOLT-INFO: clear procedure is 0x10120164
BOLT-INFO: setting __bolt_runtime_start to 0x10123b64
BOLT-INFO: setting __bolt_runtime_fini to 0x10123bf4
BOLT-INFO: setting __hot_start to 0x6a00000
BOLT-INFO: setting __hot_end to 0xe4e308c

$ make \
-C src/linux-6.6.1 \
-skj"$(nproc)" \
ARCH=arm64 \
CC=$PWD/install/bin/clang.inst \
HOSTCC=$PWD/install/bin/clang.inst \
KCFLAGS=-Wno-error \
LLVM=$PWD/install/bin/ \
O=$PWD/build/linux mrproper virtconfig all

$ build/llvm/bootstrap/bin/merge-fdata build/llvm/final/clang.fdata.*.fdata >build/llvm/final/clang.fdata

$ build/llvm/bootstrap/bin/llvm-bolt \
--data=$PWD/build/llvm/final/clang.fdata \
--dyno-stats \
--icf=1 \
-o $PWD/install/bin/clang.bolt \
--reorder-blocks=ext-tsp \
--reorder-functions=hfsort+ \
--split-all-cold \
--split-functions \
--use-gnu-stack \
"$(realpath install/bin/clang)"
Using legacy profile format.
Profile from 6079 files merged.
BOLT-INFO: shared object or position-independent executable detected
BOLT-INFO: Target architecture: aarch64
BOLT-INFO: BOLT version: fd389f46deb0252a7f7412ef4b0809d7dc2d7072
BOLT-INFO: first alloc address is 0x0
BOLT-INFO: enabling relocation mode
BOLT-INFO: disabling -align-macro-fusion on non-x86 platform
BOLT-INFO: pre-processing profile using branch profile reader
BOLT-INFO: profile collection done on a binary already processed by BOLT
BOLT-INFO: number of removed linker-inserted veneers: 0
BOLT-INFO: 25654 out of 135164 functions in the binary (19.0%) have non-empty execution profile
BOLT-INFO: 867 functions with profile could not be optimized
BOLT-INFO: profile for 1 objects was ignored
BOLT-INFO: ICF folded 26054 out of 135421 functions in 7 passes. 0 functions had jump tables.
BOLT-INFO: Removing all identical functions will save 3213.16 KB of code space. Folded functions were called 10879947418 times based on profile.
BOLT-INFO: basic block reordering modified layout of 10442 functions (40.70% of profiled, 9.55% of total)
BOLT-INFO: 56 Functions were reordered by LoopInversionPass
BOLT-INFO: hfsort+ reduced the number of chains from 24111 to 10662
BOLT-INFO: program-wide dynostats after all optimizations before SCTC and FOP:

       1396569943937 : executed forward branches
        130283647792 : taken forward branches
        203770667059 : executed backward branches
 125227683663 : taken backward branches
         33970162534 : executed unconditional branches
        171577527582 : all function calls
 22678304162 : indirect calls
         11439979116 : PLT calls
 8936906951881 : executed instructions
       1408294259742 : executed load instructions
                   0 : executed store instructions
 0 : taken jump table branches
                   0 : taken unknown indirect branches
       1634310773530 : total branches
 289481493989 : taken branches
       1344829279541 : non-taken conditional branches
        255511331455 : taken conditional branches
 1600340610996 : all conditional branches
                   0 : linker-inserted veneer calls

       1361735980655 : executed forward branches (-2.5%)
         64376483788 : taken forward branches (-50.6%)
        238604630341 : executed backward branches (+17.1%)
 120877684864 : taken backward branches (-3.5%)
         29160773340 : executed unconditional branches (-14.2%)
        171577527582 : all function calls (=)
         22678304162 : indirect calls (=)
 11439979116 : PLT calls (=)
       8911764180706 : executed instructions (-0.3%)
       1408294259742 : executed load instructions (=)
 0 : executed store instructions (=)
                   0 : taken jump table branches (=)
                   0 : taken unknown indirect branches (=)
       1629501384336 : total branches (-0.3%)
 214414941992 : taken branches (-25.9%)
       1415086442344 : non-taken conditional branches (+5.2%)
        185254168652 : taken conditional branches (-27.5%)
       1600340610996 : all conditional branches (=)
 0 : linker-inserted veneer calls (=)

BOLT-INFO: Starting stub-insertion pass
BOLT-INFO: Inserted 115911 stubs in the hot area and 40165 stubs in the cold area. Shared 0 times, iterated 3 times.
BOLT-ERROR: JITLink failed: In graph in-memory object file, section .text.cold: relocation target .text + 0x1c718 at address 0x6800000 is out of range of ADRLiteral21 fixup at 0x748d3d8 (_ZNK5clang11DeclRefExpr11getBeginLocEv.cold.0/, 0x7470cc0 + 0x1c718)
```

I uploaded [`clang.fdata`](https://github.com/nathanchance/bug-files/raw/main/llvm-bolt-aarch64-jitlink/clang.fdata.zst) (`zstd` compressed) in case it is useful for avoiding the BOLT instrumentation phase.

</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJzsG9ty4rjya5wXlV26-PqQBzAwyw6BFJDd7L5QwpbBE2P5yHIu8_WnJJtgiEnIzp46VbtD7WZA6m51t1p9k03LMt3kjF0bTt9wBle0klsurnMqtzSP1P_sas3jl-vftywHVEq2K2Sab4DkgBZF9gL6s8lS_Yoymm8AzwHNAaUi2ro22PJSgqpU8OsqzWKNuGVgkubVM3hgImcZoKUeS_NSimrHckllynOwZnm03VHxYOAQjMGGSUWZCcEFiCuxJ6WXLyXdMAuMQURzIFgheFxFDEQ8L9NSslxmL-AplVuNkfAs408K_4mLhyTjT5YBBwbsNX9d2PxX_8Q2iCqRAXOyKMFWyqI0SM_AIwOPoji3aiEsLjYGHhXV2sCjTEln4FE9ZeDRo2s978dN13ItZEkqrOfvwPBCIKkAZghKEQHz-dcEmEfcYBskMTBjgEHDZikitXzre4vw6Uz2uDMLwb-xSL5OHSgbeFSVwsCjdZorefQWmuYjE2XK8xquHmyGAPIsaClEf8RiLmgzYCIriWxo4KBGWlKxYdIgvb0pmILFWyrNmtVNXjVwW8FoDHY8ZpmCLniZPtdT47yUNMtYPEiFmjri9USOTSobFZ7IDMotfwJmCUwz4WJHpUEGBvYM7GyVDAbGBnZK_U-gxjXFJCZ-kNhuzNZwD-X0E6UHwxmAcEvzDQOGC6s8_U_Fwi_jmOXScCEoWUEFlVyARPCdArHUsOTq6736qskRDxHi6yXxq8pa5rajDwwYTlgPmf368DSiKQ1wLkspaNEC-gKmaf6NtkYWHfpofragfs-5GbPH1oiZ8Y2ZsUe1I4PpbDkOh63ZQTjpTb-shtNefzJc9ebhzdIgg9lodBZmsewtx-GqN-1N_vhzOD8HfTu5-zKerhZ3t7ezeRfNm95XtaDewSOz1QJS8Ra4fzeeDFbLP26HBhnMWcZoyd5Chff3So5fxr8NV-F82FsOGyMh4WHNIRj8J1oCg4TL3vzLcKlGDBLO-r8Ow-XCIEMDe--THo2n48UvBhlIUZ3hIpzd3I4nww4R9SE0cN_A_Q7UjxCPUBrQ1XzZ6Cfs1PYbsMm4P7r7s3sD3wAvetPxcvzncL64BPp-3vvjLdxk8ttNA3C3HE86KGmIvSUuFsP5cjybfgDX74Vfl_NeOPwIbjwdjKdfPoCahb2byWAWvg91O581ZqLsqt5L0s-y2CD9Nc-kQfoR3xVpxoQp5IkltQkth_Ob8XQ0e3-533vz6Xus3y-H82lvsqrP3XI2myzU4Ly3Wszu5uFwNRirTX6DOJ6Gk7vBcDWYhedo70GG972b28lZHe_BlsPF8hxMfc4Wq-WsNgKDDHQ6cQp3txiuJuPp1y7rz2JLafnEv-baUZrhWbf6aYd8yF1Y_K_yybUFKZJfhlOtf_v2d7ULZ1V75JhMuc42LD_r5i8l9s-MAJ9S5dngcH-_Gk162ht8GDo-tWIXtfMrzXvTybj_-V0VNM_S9Zm4MJ4ulvO7m-F0OVT-YTw_Aze_my7HN8MznmYwXizn4_6dih5aH7PpcLr31o1paX_9uDPz3f4bX3-LePHS-hlXu2L_s2b79RejMcuS_c9SilRB7iNBfRYEK3klImZuFbQomxBxPhoch7zp_zeS_fODlgoyq9pg_qhNuUPnf8kXaqN46wrPhUEDe72erqoM0u_NbwzSv_fdrh04iY0X86PD5htqv92uwtnddDmcL1a3w_lqMdaO0r00vh5FyThVp2BdyddC80DgJNy-FnaHMrc1Wz5802WUbWA_LwSP6rrqAKHcr0EGVOxc-zD6Ndz7Kh1u677C66yS9x2VtSV51doBe9aJqnseMUsinifpBtAsO5X7MkMpBE9iKinYMbFp64lXsqjk5WzvCVnqy4HOx0hpxkrdAelpVEGfPp0xJWlOs5-p0s9U6Weq9GZueL_32quDj8oMHJom26XSFCzjUfkWT2VDvclkdTsfjsb3bS7Tupf2P8_KfmZSPzOpCzKp2_lsNOgte6vReDL84Xj1z8u8Lk2o6iDaHG7zvYzqMkWsedbur5gH_XeP6osaU6UD7wipmdw7QqvOXD6gZtKiYHlsFmk7CeV7SY99q6VGD2CvuaBgNCuo3HZjNc13jdKfTZZmfa56oNxSwWLA1_r6gAt9JaE5S_OYKbaUOtgziypJ1xkDMZMsUgb6llZ9CwKoiLapAqoEa12JdCDoy6z97QvpgfZNBHYw9RLPRpgl9hr6MIi9OMKxB70uOZJUlFIlmTwCNI4FK0uQlgA-ww7gSDCqb_Vy9gQKwTeC7kDtPEEtJZWvVOCz60P1MXAIeJKUTLbG3hJnOV1niriOW_Xl3o7HrItpLiIFaX6rdoWpVy4NMtjxR6bmTu8IOyjEadmsZtIs3eTmjkaCm0mlb694DnKem8--C4qMyoSLXQeNvNqtmQA8AYKppWOQpfkDE8pWmVDFyyPLmY4rPdAlMQS8kgofEQe5NkiqPFL8liDN9RXkOs2peAEG9qEFDewYOABb-sg0d2xXyJfGwhTTTcZ9tM5r22Ou1pu-MpzmcSqU4UYq3JepVPZZRiItJK_5JRAj9y_QkrUtn1BDBPp2cBG5vRJ-gMRa0DzagohXuWzUj6BrexeiL5YgYzQBOY_ZERHHw9DHF9Foq6RNAr6DveSSZi2rOuLfJa5P0IfYZfqdvcElMLBd2wfrF8lKZU2lOhdRc-p3bMfFy-v94gXEVfzIN82JV6mmcmtqISfAHgr2C6U5-MAgj8mebjh2HNtxbHgxudv6BICnNMvAmoGSqkMpucYDlmVdFHU6DupCUqH9XimrdXO89ZGjZdkBPt6ffwRtl2ik1yO95crRMwpoHgN4PBfxLNaTFljU4QUCme5UER2CVDJBFVFSj1kdCxc01s9ORMpyJQfwmbna3erHMKKI73Y8prLmQrJn2UGj7g7UriwGdEN13Dx96kJUueICZOlaUGU9ofoKWC7FCyh4mss6iiCIMFknXUEsyhgVymtFLK4EO8BD1Bn0Sib1HqxWKv9YNRysSrU3tbD1Yp9BTtI8beN2MnrA3XLZXs-l52LZMQrL42Y3bEagH_0_-lhh2FHovZsh_TJbLD-P9bl-2SnFi3pjO1EIXjABHlMhf6BLpvtiZp1pfuwWLAP39mkpGV7qRn40tdaU_nLSHL_k3FTOvjxKpaPEIAN0lDJ_sMenbAnGRcyEuc549KBSL_YsTVkWXTCvWY1BBtuk5EIed1XMsshSaarSRDvANzOHtKg1VZXM3OSVki56-KG0_k4_d5axDY1e9kkUqJ8CanzsPq7oh3Vc6AU6oJR1YzXucsT_yurgEwn835F-F4KZOnqUegP3O9c8RlingPtB3Q4SnURqgIhnGWvyTp4z_XziPv2mmUJ_Ac1iLAbr-nHG_0VNgB3XsS-vC1Dw1wqDejHf9VrE9ZOPB4VUWQxyLlUixQuZ7tLvnebZOjEANRZfgidagnSTc9GJMw5HIOFZzGKAXXgkr43RsbyezrJYaQHYmtjSGKjir05CO5OhudoAZQsqB0_VgUsjmh3Jq2ofpTWCEbGQC77269w5ZqAsaMQsMKq5bCExwXRar9M73wsC27ORX-dkYE2VeRx03sXXmpZpBLTnBI2PVFzueJwmqTIY-rJXB7Rt3FrbwL4NLU9tuJpu1ohV8hVYjtMMS5VUn6bz9dKOC0bHkjQM1DY94bwY543nuO3ObQ8eXLC4ilR-vWXtomWrEsbaVWIbIaQyHwRdt8u9NC0E8ymNGVDBqo5VNJFM6G1rDI_WHK9ZwgUDi3AZ6vR5NLs1SK8daEH9QSRwHTcIbBIQD2jfpE-D2kkunqiIGwfByiM8VSphn7i25wVY40n6wPIPkDAkngdd14NOcLzYmkYPXYgIOxh7rk9cl7SWOQe-_xASeBC52CH28TpVHvE81gGGZudE85DjeQ72HL8WTen3tdhWFr1HwNj1fAJt5NaARwX-KU8I2SQIvAAhVwPfTpZHcH5A3AC6gYN8Hx1zXdcUTW5wtH029HFgYyfwbHyMk3H6DmL7A48RS6lMpwMTtjbg4FHObcEp_Rqvyh9y_pQfNNWJjVxiEwQ9jzikwdb17wkw9gPbR3ZAAj9oG0cnSWLbPg6wFzh2rV0VAGqEj00CO46DECHIdpzWSu8gIhdCYkMXwSBwX63o45Xe6K07KrYt50ROF3nECXzoNqyePdDKS5rYcuqoeMKGaxPPtX3i-f47x1uTcKDldtHAxHdVWQ-JjT447fVT3H3kWeiIEsLQ9zzXt33Xfu_4az7IGVFwgFxlS8SGlzgDTQvZFu4idoFv0LKoQuQNH-96izdoZ_3FmQX8ACHPtZEPPeie9x9aPGiRDuk-403eMPGhFzmrl25P0eFhPknhrK85Qwe5OHAgIr5NiNvhdTo1h5FtIzuwUXAUB4_PmGMFnepGDvRd28bEti9wSc0hcc5Ypu9gx0au7zr4AxdVM-V1HpfL_dYZC3jPX52i_J0NROQECL3TQbQhcp2_qYs4nM9nuo_663g5SfMHkFCdXmqGwEbQQlXTZt0v3te2urLAISib6smS7FlaigeF16oEm4sBPQ9U_gifUeQhv_PKSBWZTRIs9Fs0PAG9wXyi2c9UiZA-V4VChc-e7cck9tUurP6cfnV0gY_QgEXZnCXD50IgtGGyzzZpPuHR8FFzp8qmkWJcEfBgFME2U4e9PHnLS_8dg6pQrkM_xN03XNhu-7jQcAYG9o9fAdukclutrYjvDDxqvzWnezobc_-slKBPBh7t6HFHyNy_HfUtlcoSTzpT30upCkBlhi78XsrYcCGI-K4QulxVc6ly4yUDqe7LViVLqkyXbPSRp_HRS3Knrd5iS8t9IXMVX5M4IAG9YtfIDQLH9jziXm2vvTiOYBTRdUAQWSPoQYpIxHDixQFMfHyVXmOICUIwQC5xiGMFAYvW0dp1kIdjakPDhmxH08xSUltcbK7SsqzYtYd8jK8yumZZqd8-xFjX3hgbzuBKXNdKqjalYcMsLWV5ICBTmbFrLVTbpCvBwNOW5VpcJXr4-kpirearSmTX7-xf03w7eeJMs6v2UHP83wAAAP__E0PkRg">