From 039e12e6eff2cf1774575c86cbc67f3de9881241 Mon Sep 17 00:00:00 2001 From: Jacob Lambert Date: Fri, 19 Jun 2026 18:27:28 -0700 Subject: [PATCH 01/12] Enable comgr hotswap via THEROCK_ENABLE_HOTSWAP, bump amd-llvm Adds a single THEROCK_ENABLE_HOTSWAP option (ON) that turns on the comgr hotswap transpiler and runtime tool, and bumps compiler/amd-llvm to a commit that includes the link-order fix so enabling hotswap does not break build-time AOT compilation (e.g. rocFFT's rocfft_aot_helper on gfx1250). The amd-llvm bump duplicates #5989 and is here only so CI can exercise the enabled build end-to-end; it can be dropped from this PR once #5989 lands. Changes: - CMakeLists.txt: add THEROCK_ENABLE_HOTSWAP option (ON), replacing the THEROCK_BUILD_COMGR_HOTSWAP name from #5988. - compiler/CMakeLists.txt: wire the option into amd-comgr, passing COMGR_ENABLE_HOTSWAP_TRANSPILE=ON and (Linux) HOTSWAP_BUILD_TOOL=ON plus the HSA include root, producing libamd_comgr_hotswap_tool.so. - compiler/amd-llvm: bump to 46fcb339 (users/lambj/therock-hotswap-cherrypick-v3 tip, includes the link-order fix). Note: making the runtime actually load the tool requires HSA_TOOLS_LIB to be set in the runtime/test environment (ROCr reads it only from the env); that is handled separately in the CI test scripts, not by this build option. --- CMakeLists.txt | 1 + compiler/CMakeLists.txt | 11 +++++++++++ compiler/amd-llvm | 2 +- 3 files changed, 13 insertions(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 7c6a3c42a93..67e83ff9312 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -124,6 +124,7 @@ option(THEROCK_COMPOSABLE_KERNEL_FOR_MIOPEN_ONLY option(THEROCK_BUILD_LLVM_TOOLS "Enables building all LLVM tools (not just minimum required)" OFF) option(THEROCK_BUILD_LLVM_TESTS "Enables building LLVM LIT tests" OFF) +option(THEROCK_ENABLE_HOTSWAP "Enables the comgr hotswap transpiler/tool and loads it in the runtime via HSA_TOOLS_LIB" ON) set(THEROCK_SANITIZER "" CACHE STRING "Enable project wide sanitizer build ('ASAN' for host+device, 'HOST_ASAN' for host-only)") diff --git a/compiler/CMakeLists.txt b/compiler/CMakeLists.txt index f1da62fb0f4..7c026fec551 100644 --- a/compiler/CMakeLists.txt +++ b/compiler/CMakeLists.txt @@ -159,6 +159,16 @@ if(THEROCK_ENABLE_COMPILER) # version script, avoiding symbol interposition issues. ############################################################################## + set(_comgr_hotswap_cmake_args) + if(THEROCK_ENABLE_HOTSWAP) + list(APPEND _comgr_hotswap_cmake_args -DCOMGR_ENABLE_HOTSWAP_TRANSPILE=ON) + if(NOT WIN32) + list(APPEND _comgr_hotswap_cmake_args + -DHOTSWAP_BUILD_TOOL=ON + "-DHOTSWAP_TOOL_HSA_INCLUDE_ROOT=${THEROCK_ROCM_SYSTEMS_SOURCE_DIR}/projects/rocr-runtime/runtime/hsa-runtime") + endif() + endif() + therock_cmake_subproject_declare(amd-comgr USE_DIST_AMDGPU_TARGETS NO_INSTALL_RPATH # See manual handling in the pre_hook. @@ -174,6 +184,7 @@ if(THEROCK_ENABLE_COMPILER) -DTHEROCK_BUILD_COMGR_TESTS=${THEROCK_BUILD_COMGR_TESTS} "-DLLVM_VERSION_SUFFIX=-rocm${ROCM_MAJOR_VERSION}" -DLLVM_ENABLE_SYMBOL_VERSIONING=ON + ${_comgr_hotswap_cmake_args} BUILD_DEPS rocm-cmake RUNTIME_DEPS diff --git a/compiler/amd-llvm b/compiler/amd-llvm index f0495acbfcf..46fcb339fb6 160000 --- a/compiler/amd-llvm +++ b/compiler/amd-llvm @@ -1 +1 @@ -Subproject commit f0495acbfcff357a55abe1c61a7e954f8574e702 +Subproject commit 46fcb339fb61119b337f973c7ca9e710a319fdd0 From 7d072cd92ad3b3f6e7eeae02e73a7198eb55fd98 Mon Sep 17 00:00:00 2001 From: Jacob Lambert Date: Fri, 19 Jun 2026 18:56:25 -0700 Subject: [PATCH 02/12] Load comgr hotswap tool via HSA_TOOLS_LIB in hip-tests Add a hotswap smoke test to the Linux hip-tests stage: set HSA_TOOLS_LIB to the built libamd_comgr_hotswap_tool.so so ROCr/CLR exercise the tool-load path during tests that load code objects on the GPU. The tool is inert on non-gfx1250 targets, so this guards against the enabled tool perturbing existing results. THEROCK_ENABLE_HOTSWAP is on by default, so the tool must be present; a missing tool indicates a broken/misconfigured build and fails the step loudly rather than silently skipping. Note: the test job consumes prebuilt artifacts and cannot read the build-time THEROCK_ENABLE_HOTSWAP value, so this gates on "Linux hip-tests run" as a proxy. A build with THEROCK_ENABLE_HOTSWAP=OFF running hip-tests would falsely fail here; carrying the flag from build to test would require an artifact marker. Changes: - .github/workflows/test_component.yml: add "Enable hotswap tool loading" step before the Test step, scoped to Linux hip-tests. --- .github/workflows/test_component.yml | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/.github/workflows/test_component.yml b/.github/workflows/test_component.yml index e6867f67beb..96d8725ccf1 100644 --- a/.github/workflows/test_component.yml +++ b/.github/workflows/test_component.yml @@ -154,6 +154,23 @@ jobs: echo "HSA_XNACK=1" >> $GITHUB_ENV echo "ASAN_SYMBOLIZER_PATH=${{ env.OUTPUT_ARTIFACTS_DIR }}/llvm/bin/llvm-symbolizer" >> $GITHUB_ENV + # Hotswap smoke test: hotswap is built by default (THEROCK_ENABLE_HOTSWAP=ON), so the + # tool must be present in the artifacts. Load it via HSA_TOOLS_LIB so ROCr/CLR exercise + # the tool-load path during hip-tests (which load code objects on the GPU). The tool is + # inert on non-gfx1250 targets, so this is a regression guard that enabling it does not + # perturb existing results. A missing tool means a broken/misconfigured build, so fail + # loudly rather than silently skipping. + - name: Enable hotswap tool loading + if: ${{ runner.os == 'Linux' && fromJSON(inputs.component).job_name == 'hip-tests' }} + run: | + hotswap_tool="${{ env.OUTPUT_ARTIFACTS_DIR }}/lib/libamd_comgr_hotswap_tool.so" + if [ ! -f "$hotswap_tool" ]; then + echo "::error::Hotswap tool not found at $hotswap_tool. THEROCK_ENABLE_HOTSWAP is on by default, so it should be present in the artifacts." + exit 1 + fi + echo "Loading hotswap tool via HSA_TOOLS_LIB: $hotswap_tool" + echo "HSA_TOOLS_LIB=$hotswap_tool" >> $GITHUB_ENV + - name: Test id: test timeout-minutes: ${{ fromJSON(inputs.component).timeout_minutes }} From b9305ed33287b053bc18bba1a1ea1419b71ad4dc Mon Sep 17 00:00:00 2001 From: Jacob Lambert Date: Fri, 19 Jun 2026 21:12:51 -0700 Subject: [PATCH 03/12] Revert "Load comgr hotswap tool via HSA_TOOLS_LIB in hip-tests" This reverts commit 7d072cd92ad3b3f6e7eeae02e73a7198eb55fd98. --- .github/workflows/test_component.yml | 17 ----------------- 1 file changed, 17 deletions(-) diff --git a/.github/workflows/test_component.yml b/.github/workflows/test_component.yml index 96d8725ccf1..e6867f67beb 100644 --- a/.github/workflows/test_component.yml +++ b/.github/workflows/test_component.yml @@ -154,23 +154,6 @@ jobs: echo "HSA_XNACK=1" >> $GITHUB_ENV echo "ASAN_SYMBOLIZER_PATH=${{ env.OUTPUT_ARTIFACTS_DIR }}/llvm/bin/llvm-symbolizer" >> $GITHUB_ENV - # Hotswap smoke test: hotswap is built by default (THEROCK_ENABLE_HOTSWAP=ON), so the - # tool must be present in the artifacts. Load it via HSA_TOOLS_LIB so ROCr/CLR exercise - # the tool-load path during hip-tests (which load code objects on the GPU). The tool is - # inert on non-gfx1250 targets, so this is a regression guard that enabling it does not - # perturb existing results. A missing tool means a broken/misconfigured build, so fail - # loudly rather than silently skipping. - - name: Enable hotswap tool loading - if: ${{ runner.os == 'Linux' && fromJSON(inputs.component).job_name == 'hip-tests' }} - run: | - hotswap_tool="${{ env.OUTPUT_ARTIFACTS_DIR }}/lib/libamd_comgr_hotswap_tool.so" - if [ ! -f "$hotswap_tool" ]; then - echo "::error::Hotswap tool not found at $hotswap_tool. THEROCK_ENABLE_HOTSWAP is on by default, so it should be present in the artifacts." - exit 1 - fi - echo "Loading hotswap tool via HSA_TOOLS_LIB: $hotswap_tool" - echo "HSA_TOOLS_LIB=$hotswap_tool" >> $GITHUB_ENV - - name: Test id: test timeout-minutes: ${{ fromJSON(inputs.component).timeout_minutes }} From 74e3a55972c943c2b3de76e41f324f6f63f0746d Mon Sep 17 00:00:00 2001 From: Harsh Menon Date: Sun, 21 Jun 2026 10:34:13 -0500 Subject: [PATCH 04/12] feat(hotswap): integrate entry trampoline subprojects ISSUE ID: ROCm/llvm-project#3000 Build on PR #6007 by pinning amd-llvm to a commit that includes the COMGR hotswap kernel-entry trampoline implementation and rocm-systems to the paired loader-side revert. --- .gitmodules | 4 ++-- CMakeLists.txt | 2 +- compiler/CMakeLists.txt | 5 ----- compiler/amd-llvm | 2 +- core/CMakeLists.txt | 31 +++++++++++++++++++++++++++++++ rocm-systems | 2 +- 6 files changed, 36 insertions(+), 10 deletions(-) diff --git a/.gitmodules b/.gitmodules index ab3779c8d37..b50ba10873e 100644 --- a/.gitmodules +++ b/.gitmodules @@ -8,7 +8,7 @@ # Branch follows the weekly format: amd-compiler-YYYY-MM-DD [submodule "llvm-project"] path = compiler/amd-llvm - url = https://github.com/ROCm/llvm-project.git + url = https://github.com/harsh-amd/llvm-project.git # Branch follows the weekly format: amd-compiler-YYYY-MM-DD [submodule "rocm-cmake"] path = base/rocm-cmake @@ -20,7 +20,7 @@ branch = develop [submodule "rocm-systems"] path = rocm-systems - url = https://github.com/ROCm/rocm-systems.git + url = https://github.com/harsh-amd/rocm-systems.git branch = develop [submodule "spirv-llvm-translator"] path = compiler/spirv-llvm-translator diff --git a/CMakeLists.txt b/CMakeLists.txt index 67e83ff9312..8560e3852ed 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -124,7 +124,7 @@ option(THEROCK_COMPOSABLE_KERNEL_FOR_MIOPEN_ONLY option(THEROCK_BUILD_LLVM_TOOLS "Enables building all LLVM tools (not just minimum required)" OFF) option(THEROCK_BUILD_LLVM_TESTS "Enables building LLVM LIT tests" OFF) -option(THEROCK_ENABLE_HOTSWAP "Enables the comgr hotswap transpiler/tool and loads it in the runtime via HSA_TOOLS_LIB" ON) +option(THEROCK_ENABLE_HOTSWAP "Enables COMGR hotswap rewriting and the ROCR HSA hotswap tool" ON) set(THEROCK_SANITIZER "" CACHE STRING "Enable project wide sanitizer build ('ASAN' for host+device, 'HOST_ASAN' for host-only)") diff --git a/compiler/CMakeLists.txt b/compiler/CMakeLists.txt index 7c026fec551..ca7e3d48612 100644 --- a/compiler/CMakeLists.txt +++ b/compiler/CMakeLists.txt @@ -162,11 +162,6 @@ if(THEROCK_ENABLE_COMPILER) set(_comgr_hotswap_cmake_args) if(THEROCK_ENABLE_HOTSWAP) list(APPEND _comgr_hotswap_cmake_args -DCOMGR_ENABLE_HOTSWAP_TRANSPILE=ON) - if(NOT WIN32) - list(APPEND _comgr_hotswap_cmake_args - -DHOTSWAP_BUILD_TOOL=ON - "-DHOTSWAP_TOOL_HSA_INCLUDE_ROOT=${THEROCK_ROCM_SYSTEMS_SOURCE_DIR}/projects/rocr-runtime/runtime/hsa-runtime") - endif() endif() therock_cmake_subproject_declare(amd-comgr diff --git a/compiler/amd-llvm b/compiler/amd-llvm index 46fcb339fb6..5027bd3ea20 160000 --- a/compiler/amd-llvm +++ b/compiler/amd-llvm @@ -1 +1 @@ -Subproject commit 46fcb339fb61119b337f973c7ca9e710a319fdd0 +Subproject commit 5027bd3ea2076092638407ab4e6bf772be87558a diff --git a/core/CMakeLists.txt b/core/CMakeLists.txt index 32c799a68cc..8d980de9502 100644 --- a/core/CMakeLists.txt +++ b/core/CMakeLists.txt @@ -143,6 +143,36 @@ if(THEROCK_ENABLE_CORE_RUNTIME) LIB_NAMES libhsa-runtime64.so ) + set(_core_runtime_hotswap_subproject_deps) + if(THEROCK_ENABLE_HOTSWAP AND NOT WIN32) + ############################################################################ + # HSA HotSwap tool + ############################################################################ + + therock_cmake_subproject_declare(hsa-hotswap + EXTERNAL_SOURCE_DIR "${THEROCK_ROCM_SYSTEMS_SOURCE_DIR}/projects/hotswap" + BINARY_DIR "${CMAKE_CURRENT_BINARY_DIR}/hsa-hotswap" + BACKGROUND_BUILD + COMPILER_TOOLCHAIN + "${_system_toolchain}" + RUNTIME_DEPS + ROCR-Runtime + amd-comgr + INTERFACE_LINK_DIRS + "lib" + INTERFACE_INSTALL_RPATH_DIRS + "lib" + ) + therock_cmake_subproject_glob_c_sources(hsa-hotswap SUBDIRS .) + therock_cmake_subproject_activate(hsa-hotswap) + list(APPEND _core_runtime_hotswap_subproject_deps hsa-hotswap) + + therock_test_validate_shared_lib( + PATH hsa-hotswap/dist/lib + LIB_NAMES libhsa-hotswap.so + ) + endif() + ############################################################################## # rocminfo ############################################################################## @@ -165,6 +195,7 @@ if(THEROCK_ENABLE_CORE_RUNTIME) set(_core_runtime_subproject_deps ROCR-Runtime rocminfo + ${_core_runtime_hotswap_subproject_deps} ) set(_core_runtime_artifact_components dbg diff --git a/rocm-systems b/rocm-systems index a0952b2b339..028fd09e1e9 160000 --- a/rocm-systems +++ b/rocm-systems @@ -1 +1 @@ -Subproject commit a0952b2b339b4603050acee1672b0aa0d8abb702 +Subproject commit 028fd09e1e912672023722f3e74e62abe20deffd From b951150504fa1eee2e2e2862cba17a143c947c7a Mon Sep 17 00:00:00 2001 From: harsh-amd <149193359+harsh-amd@users.noreply.github.com> Date: Sun, 21 Jun 2026 13:53:00 -0500 Subject: [PATCH 05/12] ci: exercise hsa hotswap tool in hip-tests --- .github/workflows/test_component.yml | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/.github/workflows/test_component.yml b/.github/workflows/test_component.yml index e6867f67beb..5c725fdda95 100644 --- a/.github/workflows/test_component.yml +++ b/.github/workflows/test_component.yml @@ -154,6 +154,26 @@ jobs: echo "HSA_XNACK=1" >> $GITHUB_ENV echo "ASAN_SYMBOLIZER_PATH=${{ env.OUTPUT_ARTIFACTS_DIR }}/llvm/bin/llvm-symbolizer" >> $GITHUB_ENV + # Hotswap smoke test: hotswap is built by default (THEROCK_ENABLE_HOTSWAP=ON), so the + # tool must be present in the artifacts. Load it via HSA_TOOLS_LIB so ROCr/CLR exercise + # the tool-load path during hip-tests (which load code objects on the GPU). The entry + # trampoline rewrite is opt-in, so enable AMD_COMGR_HOTSWAP_ENTRY_TRAMPOLINES here to + # exercise gfx1250 same-stepping dispatch-entry redirection. The tool is inert on + # non-gfx1250 targets, so this is a regression guard that enabling it does not perturb + # existing results. A missing tool means a broken/misconfigured build, so fail loudly + # rather than silently skipping. + - name: Enable hotswap tool loading + if: ${{ runner.os == 'Linux' && fromJSON(inputs.component).job_name == 'hip-tests' }} + run: | + hotswap_tool="${{ env.OUTPUT_ARTIFACTS_DIR }}/lib/libhsa-hotswap.so" + if [ ! -f "$hotswap_tool" ]; then + echo "::error::Hotswap tool not found at $hotswap_tool. THEROCK_ENABLE_HOTSWAP is on by default, so it should be present in the artifacts." + exit 1 + fi + echo "Loading hotswap tool via HSA_TOOLS_LIB: $hotswap_tool" + echo "HSA_TOOLS_LIB=$hotswap_tool" >> $GITHUB_ENV + echo "AMD_COMGR_HOTSWAP_ENTRY_TRAMPOLINES=1" >> $GITHUB_ENV + - name: Test id: test timeout-minutes: ${{ fromJSON(inputs.component).timeout_minutes }} From 6c081bc0f6b9f1fb71e9f500d60e0d6cb3395772 Mon Sep 17 00:00:00 2001 From: harsh-amd <149193359+harsh-amd@users.noreply.github.com> Date: Sun, 21 Jun 2026 13:55:00 -0500 Subject: [PATCH 06/12] deps: update hotswap subproject pins --- compiler/amd-llvm | 2 +- rocm-systems | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/compiler/amd-llvm b/compiler/amd-llvm index 5027bd3ea20..2350cd2065d 160000 --- a/compiler/amd-llvm +++ b/compiler/amd-llvm @@ -1 +1 @@ -Subproject commit 5027bd3ea2076092638407ab4e6bf772be87558a +Subproject commit 2350cd2065de967fab4b721f002f4ad470bc3ac4 diff --git a/rocm-systems b/rocm-systems index 028fd09e1e9..fdd417f823d 160000 --- a/rocm-systems +++ b/rocm-systems @@ -1 +1 @@ -Subproject commit 028fd09e1e912672023722f3e74e62abe20deffd +Subproject commit fdd417f823d65b350146e550591a38991a629c4a From bd5b8f88664baf0de9a5bbedcf04e8acf44c8526 Mon Sep 17 00:00:00 2001 From: harsh-amd <149193359+harsh-amd@users.noreply.github.com> Date: Sun, 21 Jun 2026 11:56:32 -0700 Subject: [PATCH 07/12] fix: build hotswap as target-neutral subproject --- core/CMakeLists.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/core/CMakeLists.txt b/core/CMakeLists.txt index 8d980de9502..c0cd3fac0c8 100644 --- a/core/CMakeLists.txt +++ b/core/CMakeLists.txt @@ -153,6 +153,7 @@ if(THEROCK_ENABLE_CORE_RUNTIME) EXTERNAL_SOURCE_DIR "${THEROCK_ROCM_SYSTEMS_SOURCE_DIR}/projects/hotswap" BINARY_DIR "${CMAKE_CURRENT_BINARY_DIR}/hsa-hotswap" BACKGROUND_BUILD + DISABLE_AMDGPU_TARGETS COMPILER_TOOLCHAIN "${_system_toolchain}" RUNTIME_DEPS From 1d9821a2045bf6add8d9afabeb1acbd3c2c77651 Mon Sep 17 00:00:00 2001 From: Harsh Menon Date: Sun, 21 Jun 2026 11:59:49 -0700 Subject: [PATCH 08/12] deps: refresh hotswap amd-llvm pin --- compiler/amd-llvm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/compiler/amd-llvm b/compiler/amd-llvm index 2350cd2065d..63d04e1d3a2 160000 --- a/compiler/amd-llvm +++ b/compiler/amd-llvm @@ -1 +1 @@ -Subproject commit 2350cd2065de967fab4b721f002f4ad470bc3ac4 +Subproject commit 63d04e1d3a26ea52b7f98a97bbc88e03837df5b9 From e5824caac4b16510e14d6ecdcaab98d5c423c94e Mon Sep 17 00:00:00 2001 From: Harsh Menon Date: Sun, 21 Jun 2026 12:15:07 -0700 Subject: [PATCH 09/12] deps: refresh hotswap amd-llvm pin --- compiler/amd-llvm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/compiler/amd-llvm b/compiler/amd-llvm index 63d04e1d3a2..6523fc65bc8 160000 --- a/compiler/amd-llvm +++ b/compiler/amd-llvm @@ -1 +1 @@ -Subproject commit 63d04e1d3a26ea52b7f98a97bbc88e03837df5b9 +Subproject commit 6523fc65bc87bb35dc954ae4138f512c4126b09f From eefdfec5b3c3c69c7303985f59dcd2eb5cf2459c Mon Sep 17 00:00:00 2001 From: harsh-amd <149193359+harsh-amd@users.noreply.github.com> Date: Sun, 21 Jun 2026 13:31:40 -0700 Subject: [PATCH 10/12] deps: refresh hotswap rocm-systems pin --- rocm-systems | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/rocm-systems b/rocm-systems index fdd417f823d..498f001069a 160000 --- a/rocm-systems +++ b/rocm-systems @@ -1 +1 @@ -Subproject commit fdd417f823d65b350146e550591a38991a629c4a +Subproject commit 498f001069a5d653979e443d09528494350ec45a From 1d12c79670f5753ffb847e00932f991c8ec6ef09 Mon Sep 17 00:00:00 2001 From: harsh-amd <149193359+harsh-amd@users.noreply.github.com> Date: Sun, 21 Jun 2026 13:36:25 -0700 Subject: [PATCH 11/12] deps: correct hotswap rocm-systems pin --- rocm-systems | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/rocm-systems b/rocm-systems index 498f001069a..498f0010695 160000 --- a/rocm-systems +++ b/rocm-systems @@ -1 +1 @@ -Subproject commit 498f001069a5d653979e443d09528494350ec45a +Subproject commit 498f0010695614c27aba46824e2a9916dcb07e6b From f8a90139dae072237ade25144bbe365d0d1631b3 Mon Sep 17 00:00:00 2001 From: harsh-amd <149193359+harsh-amd@users.noreply.github.com> Date: Sun, 21 Jun 2026 14:14:04 -0700 Subject: [PATCH 12/12] deps: pick up hipfile ASAN link fix --- rocm-systems | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/rocm-systems b/rocm-systems index 498f0010695..edd6590c50f 160000 --- a/rocm-systems +++ b/rocm-systems @@ -1 +1 @@ -Subproject commit 498f0010695614c27aba46824e2a9916dcb07e6b +Subproject commit edd6590c50fe10331a71ae2da4039a56dab32c84