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

    <tr>
        <th>Summary</th>
        <td>
            [mlir] Crash when using --pass-pipeline="builtin.module(func.func(mesh-spmdization,test-constant-fold))"
        </td>
    </tr>

    <tr>
      <th>Labels</th>
      <td>
            mlir
      </td>
    </tr>

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

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

<pre>
    I have the following MLIR program:
test.mlir:
`mesh.mesh @mesh_2d(shape = 2x4)
func.func @element_wise_on_def(%arg0: tensor<8x16xf32>, %arg1: tensor<4096x14336xf32>) -> tensor<8x16xf32> {
  %0 = tosa.sigmoid %arg0 : (tensor<8x16xf32>) -> tensor<8x16xf32>
  %1 = mesh.shard %0 to <@mesh_2d, [[0], [1]]> : tensor<8x16xf32>
  return %1 : tensor<8x16xf32>
}`
The program does not use %arg1,but when running the --pass-pipeline="builtin.module(func.func(sharding-propagation,cse))"
The correct result is as follows:
`module {
  mesh.mesh @mesh_2d(shape = 2x4)
  func.func @element_wise_on_def(%arg0: tensor<8x16xf32>, %arg1: tensor<4096x14336xf32>) -> tensor<8x16xf32> {
    %sharding_annotated = mesh.shard %arg0 to <@mesh_2d, [[0], [1]]> annotate_for_users : tensor<8x16xf32>
    %0 = tosa.sigmoid %sharding_annotated : (tensor<8x16xf32>) -> tensor<8x16xf32>
    %sharding_annotated_0 = mesh.shard %0 to <@mesh_2d, [[0], [1]]> : tensor<8x16xf32>
    return %sharding_annotated_0 : tensor<8x16xf32>
  }
}`
The above MLIR program will cause a crash when using the following command:
`mlir-opt --pass-pipeline="builtin.module(func.func(mesh-spmdization,test-constant-fold))" test.mlir`
And the crash backtrace is:
`mlir-opt: mlir/lib/Dialect/Mesh/Transforms/Spmdization.cpp:536: mlir::mesh::shardedBlockArgumentTypes(mlir::Block&, mlir::SymbolTableCollection&)::<lambda(mlir::BlockArgument)>: Assertion `rankedTensorArg.hasOneUse()' failed.
PLEASE submit a bug report to https://github.com/llvm/llvm-project/issues/ and include the crash backtrace.
Stack dump:
0.      Program arguments: /home/j00882515/BiShengIR/build/bin/mlir-opt --pass-pipeline=builtin.module(func.func(mesh-spmdization,test-constant-fold)) test_oneuse_spmd.mlir
 #0 0x0000000001fc58c8 llvm::sys::PrintStackTrace(llvm::raw_ostream&, int) /home/j00882515/BiShengIR/llvm/lib/Support/Unix/Signals.inc:723:22
 #1 0x0000000001fc5c5c PrintStackTraceSignalHandler(void*) /home/j00882515/BiShengIR/llvm/lib/Support/Unix/Signals.inc:798:1
 #2 0x0000000001fc388c llvm::sys::RunSignalHandlers() /home/j00882515/BiShengIR/llvm/lib/Support/Signals.cpp:105:20
 #3 0x0000000001fc524c SignalHandler(int) /home/j00882515/BiShengIR/llvm/lib/Support/Unix/Signals.inc:413:1
 #4 0x0000ffff805f98dc (linux-vdso.so.1+0x8dc)
 #5 0x0000ffff80168bd0 __pthread_kill_implementation /usr/src/debug/glibc-2.34-70.oe2203.aarch64/nptl/pthread_kill.c:44:76
 #6 0x0000ffff80124bfc gsignal /usr/src/debug/glibc-2.34-70.oe2203.aarch64/signal/../sysdeps/posix/raise.c:27:6
 #7 0x0000ffff80112c70 abort /usr/src/debug/glibc-2.34-70.oe2203.aarch64/stdlib/abort.c:81:7
 #8 0x0000ffff8011e624 __assert_fail_base /usr/src/debug/glibc-2.34-70.oe2203.aarch64/assert/assert.c:89:7
 #9 0x0000ffff8011e68c (/usr/lib64/libc.so.6+0x3668c)
#10 0x0000000003da91b0 mlir::mesh::shardedBlockArgumentTypes(mlir::Block&, mlir::SymbolTableCollection&)::'lambda'(mlir::BlockArgument)::operator()(mlir::BlockArgument) const /home/j00882515/BiShengIR/mlir/lib/Dialect/Mesh/Transforms/Spmdization.cpp:537:54
#11 0x0000000003daa3d4 std::back_insert_iterator<llvm::SmallVector<mlir::Type, 6u>> std::transform<mlir::BlockArgument*, std::back_insert_iterator<llvm::SmallVector<mlir::Type, 6u>>, mlir::mesh::shardedBlockArgumentTypes(mlir::Block&, mlir::SymbolTableCollection&)::'lambda'(mlir::BlockArgument)>(mlir::BlockArgument*, mlir::BlockArgument*, std::back_insert_iterator<llvm::SmallVector<mlir::Type, 6u>>, mlir::mesh::shardedBlockArgumentTypes(mlir::Block&, mlir::SymbolTableCollection&)::'lambda'(mlir::BlockArgument)) /usr/include/c++/10.3.1/bits/stl_algo.h:4320:24
#12 0x0000000003daa00c std::back_insert_iterator<llvm::SmallVector<mlir::Type, 6u>> llvm::transform<llvm::MutableArrayRef<mlir::BlockArgument>, std::back_insert_iterator<llvm::SmallVector<mlir::Type, 6u>>, mlir::mesh::shardedBlockArgumentTypes(mlir::Block&, mlir::SymbolTableCollection&)::'lambda'(mlir::BlockArgument)>(llvm::MutableArrayRef<mlir::BlockArgument>&&, std::back_insert_iterator<llvm::SmallVector<mlir::Type, 6u>>, mlir::mesh::shardedBlockArgumentTypes(mlir::Block&, mlir::SymbolTableCollection&)::'lambda'(mlir::BlockArgument)) /home/j00882515/BiShengIR/llvm/include/llvm/ADT/STLExtras.h:1939:1
#13 0x0000000003da92c8 mlir::mesh::shardedBlockArgumentTypes(mlir::Block&, mlir::SymbolTableCollection&) /home/j00882515/BiShengIR/mlir/lib/Dialect/Mesh/Transforms/Spmdization.cpp:544:10
#14 0x0000000003da99bc mlir::mesh::spmdizeBlock(mlir::Block&, mlir::IRMapping&, mlir::SymbolTableCollection&, mlir::OpBuilder&) /home/j00882515/BiShengIR/mlir/lib/Dialect/Mesh/Transforms/Spmdization.cpp:667:40
#15 0x0000000003da9c44 mlir::mesh::spmdizeFuncOp(mlir::FunctionOpInterface, mlir::IRMapping&, mlir::SymbolTableCollection&) /home/j00882515/BiShengIR/mlir/lib/Dialect/Mesh/Transforms/Spmdization.cpp:699:15
#16 0x0000000003da9e6c mlir::mesh::(anonymous namespace)::Spmdization::runOnOperation() /home/j00882515/BiShengIR/mlir/lib/Dialect/Mesh/Transforms/Spmdization.cpp:736:15
#17 0x00000000061ace1c mlir::detail::OpToOpPassAdaptor::run(mlir::Pass*, mlir::Operation*, mlir::AnalysisManager, bool, unsigned int)::'lambda0'()::operator()() const /home/j00882515/BiShengIR/mlir/lib/Pass/Pass.cpp:516:57
#18 0x00000000061afdcc void llvm::function_ref<void ()>::callback_fn<mlir::detail::OpToOpPassAdaptor::run(mlir::Pass*, mlir::Operation*, mlir::AnalysisManager, bool, unsigned int)::'lambda0'()>(long) /home/j00882515/BiShengIR/llvm/include/llvm/ADT/STLFunctionalExtras.h:46:40
#19 0x0000000001fe3158 llvm::function_ref<void ()>::operator()() const /home/j00882515/BiShengIR/llvm/include/llvm/ADT/STLFunctionalExtras.h:68:62
#20 0x00000000061b6f18 void mlir::MLIRContext::executeAction<mlir::PassExecutionAction, mlir::Pass&>(llvm::function_ref<void ()>, llvm::ArrayRef<mlir::IRUnit>, mlir::Pass&) /home/j00882515/BiShengIR/mlir/include/mlir/IR/MLIRContext.h:276:3
#21 0x00000000061ad108 mlir::detail::OpToOpPassAdaptor::run(mlir::Pass*, mlir::Operation*, mlir::AnalysisManager, bool, unsigned int) /home/j00882515/BiShengIR/mlir/lib/Pass/Pass.cpp:525:23
#22 0x00000000061ad33c mlir::detail::OpToOpPassAdaptor::runPipeline(mlir::OpPassManager&, mlir::Operation*, mlir::AnalysisManager, bool, unsigned int, mlir::PassInstrumentor*, mlir::PassInstrumentation::PipelineParentInfo const*) /home/j00882515/BiShengIR/mlir/lib/Pass/Pass.cpp:585:15
#23 0x00000000061ae104 mlir::detail::OpToOpPassAdaptor::runOnOperationAsyncImpl(bool)::'lambda'(mlir::detail::OpToOpPassAdaptor::runOnOperationAsyncImpl(bool)::OpPMInfo&)::operator()(mlir::detail::OpToOpPassAdaptor::runOnOperationAsyncImpl(bool)::OpPMInfo&) const /home/j00882515/BiShengIR/mlir/lib/Pass/Pass.cpp:807:69
#24 0x00000000061b0740 mlir::LogicalResult mlir::failableParallelForEach<__gnu_cxx::__normal_iterator<mlir::detail::OpToOpPassAdaptor::runOnOperationAsyncImpl(bool)::OpPMInfo*, std::vector<mlir::detail::OpToOpPassAdaptor::runOnOperationAsyncImpl(bool)::OpPMInfo, std::allocator<mlir::detail::OpToOpPassAdaptor::runOnOperationAsyncImpl(bool)::OpPMInfo>>>, mlir::detail::OpToOpPassAdaptor::runOnOperationAsyncImpl(bool)::'lambda'(mlir::detail::OpToOpPassAdaptor::runOnOperationAsyncImpl(bool)::OpPMInfo&)&>(mlir::MLIRContext*, __gnu_cxx::__normal_iterator<mlir::detail::OpToOpPassAdaptor::runOnOperationAsyncImpl(bool)::OpPMInfo*, std::vector<mlir::detail::OpToOpPassAdaptor::runOnOperationAsyncImpl(bool)::OpPMInfo, std::allocator<mlir::detail::OpToOpPassAdaptor::runOnOperationAsyncImpl(bool)::OpPMInfo>>>, __gnu_cxx::__normal_iterator<mlir::detail::OpToOpPassAdaptor::runOnOperationAsyncImpl(bool)::OpPMInfo*, std::vector<mlir::detail::OpToOpPassAdaptor::runOnOperationAsyncImpl(bool)::OpPMInfo, std::allocator<mlir::detail::OpToOpPassAdaptor::runOnOperationAsyncImpl(bool)::OpPMInfo>>>, mlir::detail::OpToOpPassAdaptor::runOnOperationAsyncImpl(bool)::'lambda'(mlir::detail::OpToOpPassAdaptor::runOnOperationAsyncImpl(bool)::OpPMInfo&)&) /home/j00882515/BiShengIR/mlir/include/mlir/IR/Threading.h:46:17
#25 0x00000000061afbac mlir::LogicalResult mlir::failableParallelForEach<std::vector<mlir::detail::OpToOpPassAdaptor::runOnOperationAsyncImpl(bool)::OpPMInfo, std::allocator<mlir::detail::OpToOpPassAdaptor::runOnOperationAsyncImpl(bool)::OpPMInfo>>&, mlir::detail::OpToOpPassAdaptor::runOnOperationAsyncImpl(bool)::'lambda'(mlir::detail::OpToOpPassAdaptor::runOnOperationAsyncImpl(bool)::OpPMInfo&)&>(mlir::MLIRContext*, std::vector<mlir::detail::OpToOpPassAdaptor::runOnOperationAsyncImpl(bool)::OpPMInfo, std::allocator<mlir::detail::OpToOpPassAdaptor::runOnOperationAsyncImpl(bool)::OpPMInfo>>&, mlir::detail::OpToOpPassAdaptor::runOnOperationAsyncImpl(bool)::'lambda'(mlir::detail::OpToOpPassAdaptor::runOnOperationAsyncImpl(bool)::OpPMInfo&)&) /home/j00882515/BiShengIR/mlir/include/mlir/IR/Threading.h:94:1
#26 0x00000000061ae490 mlir::detail::OpToOpPassAdaptor::runOnOperationAsyncImpl(bool) /home/j00882515/BiShengIR/mlir/lib/Pass/Pass.cpp:815:13
#27 0x00000000061adc20 mlir::detail::OpToOpPassAdaptor::runOnOperation(bool) /home/j00882515/BiShengIR/mlir/lib/Pass/Pass.cpp:709:1
#28 0x00000000061acdf0 mlir::detail::OpToOpPassAdaptor::run(mlir::Pass*, mlir::Operation*, mlir::AnalysisManager, bool, unsigned int)::'lambda0'()::operator()() const /home/j00882515/BiShengIR/mlir/lib/Pass/Pass.cpp:517:34
#29 0x00000000061afdcc void llvm::function_ref<void ()>::callback_fn<mlir::detail::OpToOpPassAdaptor::run(mlir::Pass*, mlir::Operation*, mlir::AnalysisManager, bool, unsigned int)::'lambda0'()>(long) /home/j00882515/BiShengIR/llvm/include/llvm/ADT/STLFunctionalExtras.h:46:40
#30 0x0000000001fe3158 llvm::function_ref<void ()>::operator()() const /home/j00882515/BiShengIR/llvm/include/llvm/ADT/STLFunctionalExtras.h:68:62
#31 0x00000000061b6f18 void mlir::MLIRContext::executeAction<mlir::PassExecutionAction, mlir::Pass&>(llvm::function_ref<void ()>, llvm::ArrayRef<mlir::IRUnit>, mlir::Pass&) /home/j00882515/BiShengIR/mlir/include/mlir/IR/MLIRContext.h:276:3
#32 0x00000000061ad108 mlir::detail::OpToOpPassAdaptor::run(mlir::Pass*, mlir::Operation*, mlir::AnalysisManager, bool, unsigned int) /home/j00882515/BiShengIR/mlir/lib/Pass/Pass.cpp:525:23
#33 0x00000000061ad33c mlir::detail::OpToOpPassAdaptor::runPipeline(mlir::OpPassManager&, mlir::Operation*, mlir::AnalysisManager, bool, unsigned int, mlir::PassInstrumentor*, mlir::PassInstrumentation::PipelineParentInfo const*) /home/j00882515/BiShengIR/mlir/lib/Pass/Pass.cpp:585:15
#34 0x00000000061aeaf8 mlir::PassManager::runPasses(mlir::Operation*, mlir::AnalysisManager) /home/j00882515/BiShengIR/mlir/lib/Pass/Pass.cpp:898:1
#35 0x00000000061ae9a8 mlir::PassManager::run(mlir::Operation*) /home/j00882515/BiShengIR/mlir/lib/Pass/Pass.cpp:876:76
#36 0x00000000061a2e4c performActions(llvm::raw_ostream&, std::shared_ptr<llvm::SourceMgr> const&, mlir::MLIRContext*, mlir::MlirOptMainConfig const&) /home/j00882515/BiShengIR/mlir/lib/Tools/mlir-opt/MlirOptMain.cpp:394:13
#37 0x00000000061a3310 processBuffer(llvm::raw_ostream&, std::unique_ptr<llvm::MemoryBuffer, std::default_delete<llvm::MemoryBuffer>>, mlir::MlirOptMainConfig const&, mlir::DialectRegistry&, llvm::ThreadPool*) /home/j00882515/BiShengIR/mlir/lib/Tools/mlir-opt/MlirOptMain.cpp:459:58
#38 0x00000000061a36c4 mlir::MlirOptMain(llvm::raw_ostream&, std::unique_ptr<llvm::MemoryBuffer, std::default_delete<llvm::MemoryBuffer>>, mlir::DialectRegistry&, mlir::MlirOptMainConfig const&)::'lambda'(std::unique_ptr<llvm::MemoryBuffer, std::default_delete<llvm::MemoryBuffer>>, llvm::raw_ostream&)::operator()(std::unique_ptr<llvm::MemoryBuffer, std::default_delete<llvm::MemoryBuffer>>, llvm::raw_ostream&) const /home/j00882515/BiShengIR/mlir/lib/Tools/mlir-opt/MlirOptMain.cpp:531:36
#39 0x00000000061a4434 mlir::LogicalResult llvm::function_ref<mlir::LogicalResult (std::unique_ptr<llvm::MemoryBuffer, std::default_delete<llvm::MemoryBuffer>>, llvm::raw_ostream&)>::callback_fn<mlir::MlirOptMain(llvm::raw_ostream&, std::unique_ptr<llvm::MemoryBuffer, std::default_delete<llvm::MemoryBuffer>>, mlir::DialectRegistry&, mlir::MlirOptMainConfig const&)::'lambda'(std::unique_ptr<llvm::MemoryBuffer, std::default_delete<llvm::MemoryBuffer>>, llvm::raw_ostream&)>(long, std::unique_ptr<llvm::MemoryBuffer, std::default_delete<llvm::MemoryBuffer>>, llvm::raw_ostream&) /home/j00882515/BiShengIR/llvm/include/llvm/ADT/STLFunctionalExtras.h:45:52
#40 0x00000000062ff168 llvm::function_ref<mlir::LogicalResult (std::unique_ptr<llvm::MemoryBuffer, std::default_delete<llvm::MemoryBuffer>>, llvm::raw_ostream&)>::operator()(std::unique_ptr<llvm::MemoryBuffer, std::default_delete<llvm::MemoryBuffer>>, llvm::raw_ostream&) const /home/j00882515/BiShengIR/llvm/include/llvm/ADT/STLFunctionalExtras.h:68:12
#41 0x00000000062febdc mlir::splitAndProcessBuffer(std::unique_ptr<llvm::MemoryBuffer, std::default_delete<llvm::MemoryBuffer>>, llvm::function_ref<mlir::LogicalResult (std::unique_ptr<llvm::MemoryBuffer, std::default_delete<llvm::MemoryBuffer>>, llvm::raw_ostream&)>, llvm::raw_ostream&, bool, bool) /home/j00882515/BiShengIR/mlir/lib/Support/ToolUtilities.cpp:28:60
#42 0x00000000061a3814 mlir::MlirOptMain(llvm::raw_ostream&, std::unique_ptr<llvm::MemoryBuffer, std::default_delete<llvm::MemoryBuffer>>, mlir::DialectRegistry&, mlir::MlirOptMainConfig const&) /home/j00882515/BiShengIR/mlir/lib/Tools/mlir-opt/MlirOptMain.cpp:535:61
#43 0x00000000061a3a20 mlir::MlirOptMain(int, char**, llvm::StringRef, llvm::StringRef, mlir::DialectRegistry&) /home/j00882515/BiShengIR/mlir/lib/Tools/mlir-opt/MlirOptMain.cpp:568:13
#44 0x00000000061a3b3c mlir::MlirOptMain(int, char**, llvm::StringRef, mlir::DialectRegistry&) /home/j00882515/BiShengIR/mlir/lib/Tools/mlir-opt/MlirOptMain.cpp:584:73
#45 0x0000000001f3d41c main /home/j00882515/BiShengIR/mlir/tools/mlir-opt/mlir-opt.cpp:297:0
#46 0x0000ffff80112f3c __libc_start_call_main /usr/src/debug/glibc-2.34-70.oe2203.aarch64/csu/../sysdeps/nptl/libc_start_call_main.h:74:3
#47 0x0000ffff80113008 __libc_start_main /usr/src/debug/glibc-2.34-70.oe2203.aarch64/csu/../csu/libc-start.c:389:24
#48 0x0000000001f3d0b0 _start (/home/j00882515/BiShengIR/build/bin/mlir-opt+0x1f3d0b0)`
Because I didn't use %arg1, an assertion failure was triggered. Why is this one-use restriction designed?
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJzsXFlzozyX_jXKjSoukDDgi1w4i2vyTqeSSqdnLikhhK23ZYmRRDqZX_-VhDFLHGfvpTpdXYkDQjrn0XNWA8QYvpSMHYHpMZieHpDarpQ--u_Tf_755yBXxf3ROVyRWwbtisFSCaF-cLmEF1_Or2Gl1VKTNcBzEJyCYG6ZsZO14Hp7BMTBmpnVxP2AIPJ_ZKgAKDUrUjEI8ClEdxFAs2Z8WUs6cT_cYCbYmkmb_eCGZUpmBSsBSgGaEr0MAJ5Dy6RRGuCT9C6M70qMAD4D6AQ2Q8LBkCiYxXdhhHE3cAYPAT7bOQsEyXEjEXSzBV5QqwyZGL5cK15s1nAn5hCgdLcoe1bozR762T1OZkV00axoFQT4pI_ZCfR7dByA6enmr9B9nJ56iR8DZLOQZrbWsl1v31iQnII4aD7frFi7zbBQzECpLKwN22KMTvLawh8rJqGupXTccEw5PKyIMYcVr5jgkgF8ChDKay4sl5O1KmrBAEq3290QQhdcLg8rrSqyJJYrCdAJNcyxw_1HnUhUac2ohZqZWljIDSRmw04zIJ9fqb-bL6IjhL8jIT1pWrgyIqWyxLJiB4s8Q19KpHbCrFQ6qw3T5klu7TGSnXK-zWQe0T8Lfood9S3pESH2T-DMa6edkVzdsoFnhT-4EJASZ3AEUk3MqjG12rSG1rlkqtZrIosB_QXXh6qyrzBHh9ahqdYF___WFJ17P6RKGkukPSyVKLaWCTvX32o0l4UXsJE6J_S71YQyyM0uCR1o_nK0EDwHaHHKiWDUArS4YGYF0OJGE2lKpdcGoMXXTrAJrSqA51Mcb-fAc4DnToHmk98lVhwLRb_P9bJ2NnxzXzHj1NyO96cBih0juqNf79e5EjckF-xECSeRxyJ2avsBAJ8Iss4L8nCydi0_9sxJNzeGaTcDBHGgifzOihvPlLleTlbEXEr2zfm71KOawJJwwYpJg9bVl7P51zNo6nzNLSQwr5dQs0pp6zi-srbyyKIFQIslt6s6n1C1doCK2_aXc67_NrByY2oHwQISWUAuqagLtmvHNst_tYR-h0W9rrb7F0yg_3e1YSvZKGwaC1-s1JoBtPg3CNIUTcMpQItj_nXF5PL8GqCF41_hfnMJ0GIPV9-LqJ6lmZKsNixzlzSMbewSIBzA4C5o_4UlnaY0hR69hkf3pvlwpbm0Ho8bBxBAaTdIkx-ZMlYzst6QiXsGPAOPdp88_7_WldtagBbfJL9zB_hSEmEmXFKA5wnCAM_bkOiED8fC0ymFI0mbOf6LyEIwDVB6q3gB0PwDxJulAM_DTjo0kg6nKd0F7XUtB0KaxhheL14rV-MlwmDqYAs6wfAYNhRROMbpQ7YwCvEQo2gjSlmWZRpMy1laUBcoBZf13eFtYdTEqEkI0HFwlxa0y1IAwtPBtWGc5kUAs6yyK81IkX3nQmR8XTUJDGlcEFrUxjlcoylAi4Ll9dK5DsFzeogmODpMgoliCAV4QoimqzgCaCErKwBa9CeeeG0it-1xJ1E8lAhFeUnh0ngIXrl2czFAi8nE_XVvClY5D1Yp4_HVhBvmpUEJwPOeMMlQmBDRJHDxVtvXimKLZpP9JH7N1OV3SbdmOlqTxSiCWUZ8DMica89y4jPp1wjQTLP90EgwG0oweyBB6gm1XVHw3E_mlnLcij23cBynHbucaxk4RlyQWZgHvyDUoqQNtckT0dYdVRXTxCrdhtM9F0AfLJ5h329MURwrp1GHazjCleAigsYWjZQuAmdcerpwu1EGn3Re8-uaCPE_jDbHO_Uc4g7buPZ5x1k3pW0lHIwfwTF3176_FMPd_v04c7bv_Hy47idiTUK19SSb_BGgBQXo2P9fhMEEu3C1yLk13meKjIilmjg1IoxcyYx61oDG1hAE9COsobukbw7d0YvaOnjmWpP7a1buMZVmi_66jfem8lq84o1kfx1qL0kgO3PaHJif3riYcvPl7M5qYrwJhTM86zJIZ0F4HKcRTX8mJB8eQX2WGQadxtFY41lOd2vsJ2MblZ5U8vz6glQVl8sXqN8fdVkdu-rWVQ8_A5g4dqlF1ANmOgaGRtE-YBa1pJfVABl3yK1xWZ1Ly3TpS923gvTxUMy8UUw7KOIxFCzezRGAUiKVvF-r2kBJ1sxUXueNqffW2tT6tbyUlz7N9Oo9s1J9k3qJ73P11Uv66sUhoSzsq1cwS7hoWXmjLqsrYsy8IJX3pxs9BhvvBjxIeXp6js7MJRH3hpsLIsnSMf4E5koJ97uW_tulYtMEGbnMoPGZj2fsr07NGw38r9Z1hA63adLhlo5wKwtK4a3iRS9BKDcmkGkf126bpna67egBPKdECB_CSjmITn8I7j6UK2fC7xKeWp9BRC9QRfHIOc2GTReGw2n6MtTfRJXXaRGn7gfaaoGCIYHyuAzThkDdHl18Ob8-UdKyO9scYHeM1pbNG4_YJ4zb_TN_liu5OT_Y74Ye8Tj92o8WOukBuzNFO7_-Jrl9kD-1q73EpXWIbg74kz0MPJAocXzAHZDhyBKLMEh_Uw_2Do4I-RZkT300Vh_jlzvwq7Zd3oehGbrV6kGO8mY8xoQ5l8Zqn00605zvG9CLo63sV0Qzac9lqRpTfnZr-inI0-kwZiI8gpyFQfRiyHuxf27uJT1fVwKgtEHqqfLg_Za4rK4uHGb9qmRP7-ujFn6vQJ0GvnfbdR9RNPKzQRL1u49f1JJTIq6bWwG64yXhwiWgV0QTIZhYKH1G6Argkyxbyjqjd3fNwCyTSq-J6FefH4vXsF90-7C0_YhFeysSIRT9GZo2dfk4tPzJ5tXG390hvtnZT379Cn59ov5p1W-w6rfnuTf-K1Eul13RE3b1JpqO682c0DeFsb-HauPM9Q-n2pMB5HNn_9CdfW8nMosGDX4Uj-uWaBa8M3rvkMGHvtzqVbjjFmVB0ZvEfk9pk2D4JQoa9wVpUb5c2F_e19tZBb5rP9WVabj7-hbNPvupv6ifOr5x8c_sp-Lws5_6Lv1U_KCh-Ff1U_G4uffZT_3ofiqOxnkJKdORpK3uW4CJMaP7DV4A4HukKf17lJ0S4wKNzchTSuwR_z0k9Ibd3lTrRBznf4hFFFZMl0qvGxdnnrgbfZvomxXRrMgqO7rZRtWasoulBvisZc2I5w_rld45wfVlZS8IlydKlnzZm-PFiNwoJUzv0QDn-7r5NyDhJkfu2f8428Q4DGClFWXGHNdl6W_pfhZGteT_V7MHGF2wtdL37VS98QUrSS1sVjDBLHv8mh3dk33A9cdt7he4ZkturL7fnO_WaeqHK-9dXsPCZ2EeTWfeDXSYj5NmHNNot3a_Ifa7MX0mqXdWmz9Pi8exfKwI-C1ke10Z8ixyTnHo3ELPa44rkyjC0aOdt0cTwccu-F0gfbKC-jTCX7QrbUX4M4HdZ3sfVpdOfT6-NbxoeIcMKssw3lOX_jEG9oe71DeU62Fvc8PR5rK86JdZphLczmVxNUq8fgVWfyDR9o7oysdXtkG7RxNdSP1mueCWs7buQL4z0_WXonFDAafhX5LdfVCG4hxl3JWe0bhlgcmgQT4EeNMpoCvS9ATmQ7J8tZrL5TUr9xzej84Had14kK5Qi8ZdA5wPGjWv1_qXqJf6J2B76k2HXVlcRCGFa8Ll89e3D1duP7a2OksAnvdsNR4_6lpiCrNM8JxmxhJtM5cfZq0cr3j0lJr64TO4m-eCdy3jw0cSDXqU0fiJXBwE6VDM95Gw-eiH-2n9g7LYPynbe_YsSsd7FeQBbATZPDH7qpcZ-OdpN9M5x9461WPWvNTjHBa8kAAl45fqQCIh2b4toiRc1JrBH8RAq_lyyTQrJvB_V_eQG2hX3EAl2aGbQjNjNffRDhas6S0CvDgojnAxwzNywI7CBEUJmqI0OVgdFZignMwSWoRpFOIkJyhnYYGmOUqiMicH_AgFKApSlAQIhSiZxGk6xWFMS5QkOYlTEAVsTbiYOGOcKL088K-WOAqDOEzQgSA5E8a_XgqhhtYITE8P9JF_IUVeLw2IAsGNNd0MllvhX0nlL5iewpPxu08--o0mB7UWR69_qcZG-dsj9J8AAAD__3cAEmc">