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

    <tr>
        <th>Summary</th>
        <td>
            Assert on isForInductionVars in SuperVectorizer
        </td>
    </tr>

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

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

    <tr>
      <th>Reporter</th>
      <td>
          c-rhodes
      </td>
    </tr>
</table>

<pre>
    The following IR (taken from `mlir/test/Integration/Dialect/Linalg/CPU/matmul-vs-matvec.mlir`):
```
func @matvec(%A: memref<?x?xf32>, %B: memref<?x?xf32>) -> (memref<?x?xf32>) {
  %c0 = arith.constant 0 : index
  %c1 = arith.constant 1 : index
  %f0 = arith.constant 0.0 : f32
  %m = memref.dim %A, %c0 : memref<?x?xf32>
  %x = memref.dim %A, %c1 : memref<?x?xf32>
  %n = memref.dim %B, %c1 : memref<?x?xf32>
  %C = memref.alloc(%m, %n) : memref<?x?xf32>
  linalg.fill(%f0, %C) : f32, memref<?x?xf32>
  scf.for %i = %c0 to %n step %c1 {
    %b = memref.subview %B[0, %i][%x, 1][1, 1] : memref<?x?xf32> to memref<?xf32, offset: ?, strides: [?]>
    %c = memref.subview %C[0, %i][%m, 1][1, 1] : memref<?x?xf32> to memref<?xf32, offset: ?, strides: [?]>
    linalg.matvec ins(%A, %b: memref<?x?xf32>, memref<?xf32, offset: ?, strides: [?]>)
                  outs(%c: memref<?xf32, offset: ?, strides: [?]>)
  }
  return %C : memref<?x?xf32>
}
```

crashes in the SuperVectorizer:
```
./bin/mlir-opt ../mlir/test/Integration/Dialect/Linalg/CPU/matmul-vs-matvec.mlir -convert-linalg-to-affine-loops -affine-super-vectorize="virtual-vector-size=128"
mlir-opt: /home/culrho01/llvm-project/mlir/lib/Dialect/Affine/Analysis/AffineStructures.cpp:567: void mlir::FlatAffineValueConstraints::addInductionVarOrTerminalSymbol(mlir::Value): Assertion `(isTopLevelValue(val) || isForInductionVar(val)) && "non-terminal symbol / loop
 IV expected"' failed.
PLEASE submit a bug report to https://github.com/llvm/llvm-project/issues/ and include the crash backtrace.
Stack dump:
0.      Program arguments: ./bin/mlir-opt ../mlir/test/Integration/Dialect/Linalg/CPU/matmul-vs-matvec.mlir -convert-linalg-to-affine-loops -affine-super-vectorize=virtual-vector-size=128
1.      #0 0x0000ffff9d237c5c llvm::sys::PrintStackTrace(llvm::raw_ostream&, int) /home/culrho01/llvm-project/llvm/lib/Support/Unix/Signals.inc:565:11
[1]    21947 abort (core dumped)  ./bin/mlir-opt  -convert-linalg-to-affine-loops
```

The issue appears to be the upper bound of an `AffineForOp` is owned by an `scf::ForOp`, so `isForInductionVar(val)` triggers the assert. The IR after `-convert-linalg-to-affine-loops` is:
```
  func @matvec(%arg0: memref<?x?xf32>, %arg1: memref<?x?xf32>) -> memref<?x?xf32> {
    %c0 = arith.constant 0 : index
    %c1 = arith.constant 1 : index
    %cst = arith.constant 0.000000e+00 : f32
    %0 = memref.dim %arg0, %c0 : memref<?x?xf32>
    %1 = memref.dim %arg0, %c1 : memref<?x?xf32>
    %2 = memref.dim %arg1, %c1 : memref<?x?xf32>
    %3 = memref.alloc(%0, %2) : memref<?x?xf32>
    affine.for %arg2 = 0 to %0 {
      affine.for %arg3 = 0 to %2 {
        affine.store %cst, %3[%arg2, %arg3] : memref<?x?xf32>
      }
    }
    scf.for %arg2 = %c0 to %2 step %c1 {
      %4 = memref.subview %arg1[0, %arg2] [%1, 1] [1, 1] : memref<?x?xf32> to memref<?xf32, #map>
      %5 = memref.subview %3[0, %arg2] [%0, 1] [1, 1] : memref<?x?xf32> to memref<?xf32, #map>
      %6 = memref.dim %arg0, %c0 : memref<?x?xf32>
      %7 = memref.dim %arg0, %c1 : memref<?x?xf32>
      affine.for %arg3 = 0 to %6 {
        affine.for %arg4 = 0 to %7 {
          %8 = affine.load %arg0[%arg3, %arg4] : memref<?x?xf32>
          %9 = affine.load %4[%arg4] : memref<?xf32, #map>
          %10 = affine.load %5[%arg3] : memref<?xf32, #map>
          %11 = arith.mulf %8, %9 : f32
          %12 = arith.addf %10, %11 : f32
          affine.store %12, %5[%arg3] : memref<?xf32, #map>
        }
      }
    }
    return %3 : memref<?x?xf32>
  }
```

and the `val` that triggers the assert is: `%6 = memref.dim %arg0, %c0 : memref<?x?xf32>`.

Full backtrace:
```
#0  __GI_raise (sig=sig@entry=6) at ../sysdeps/unix/sysv/linux/raise.c:50
#1  0x0000ffffeecc5d54 in __GI_abort () at abort.c:79
#2  0x0000ffffeecd261c in __assert_fail_base (fmt=0xffffeedcbc48 "%s%s%s:%u: %s%sAssertion `%s' failed.\n%n", assertion=assertion@entry=0xfffff2456f86 "(isTopLevelValue(val) || isForInductionVar(val)) && \"non-terminal symbol / loop IV expected\"",
    file=file@entry=0xfffff244e7d6 "/home/culrho01/llvm-project/mlir/lib/Dialect/Affine/Analysis/AffineStructures.cpp", line=line@entry=567, function=function@entry=0xfffff2448c46 "void mlir::FlatAffineValueConstraints::addInductionVarOrTerminalSymbol(mlir::Value)")
    at assert.c:92
#3  0x0000ffffeecd2684 in __GI___assert_fail (assertion=0xfffff2456f86 "(isTopLevelValue(val) || isForInductionVar(val)) && \"non-terminal symbol / loop IV expected\"",
    file=0xfffff244e7d6 "/home/culrho01/llvm-project/mlir/lib/Dialect/Affine/Analysis/AffineStructures.cpp", line=567, function=0xfffff2448c46 "void mlir::FlatAffineValueConstraints::addInductionVarOrTerminalSymbol(mlir::Value)") at assert.c:101
#4  0x0000fffff2480c84 in mlir::FlatAffineValueConstraints::addInductionVarOrTerminalSymbol (this=0xffffeb6637c0, val=...) at /home/culrho01/llvm-project/mlir/lib/Dialect/Affine/Analysis/AffineStructures.cpp:566
#5  0x0000fffff2481390 in mlir::FlatAffineValueConstraints::addBound (this=0xffffeb6637c0, type=mlir::IntegerPolyhedron::UB, pos=0, boundMap=..., boundOperands=...) at /home/culrho01/llvm-project/mlir/lib/Dialect/Affine/Analysis/AffineStructures.cpp:1246
#6  0x0000fffff24811e4 in mlir::FlatAffineValueConstraints::addAffineForOpDomain (this=0xffffeb6637c0, forOp=...) at /home/culrho01/llvm-project/mlir/lib/Dialect/Affine/Analysis/AffineStructures.cpp:631
#7  0x0000fffff246ab4c in mlir::getIndexSet (ops=..., domain=0xffffeb6637c0) at /home/culrho01/llvm-project/mlir/lib/Dialect/Affine/Analysis/AffineAnalysis.cpp:229
#8  0x0000fffff246aee4 in getOpIndexSet (op=0xffffe0006450, indexSet=0xffffeb6637c0) at /home/culrho01/llvm-project/mlir/lib/Dialect/Affine/Analysis/AffineAnalysis.cpp:247
#9  0x0000fffff246ac78 in mlir::MemRefAccess::getAccessRelation (this=0xffffeb665728, rel=...) at /home/culrho01/llvm-project/mlir/lib/Dialect/Affine/Analysis/AffineAnalysis.cpp:431
#10 0x0000fffff246a3c0 in mlir::checkMemrefAccessDependence (srcAccess=..., dstAccess=..., loopDepth=2, dependenceConstraints=0xffffeb6651e0, dependenceComponents=0x0, allowRAR=false) at /home/culrho01/llvm-project/mlir/lib/Dialect/Affine/Analysis/AffineAnalysis.cpp:589
#11 0x0000fffff246a0c4 in mlir::isLoopMemoryParallel (forOp=...) at /home/culrho01/llvm-project/mlir/lib/Dialect/Affine/Analysis/AffineAnalysis.cpp:147
#12 0x0000fffff2469ef0 in mlir::isLoopParallel (forOp=..., parallelReductions=0x0) at /home/culrho01/llvm-project/mlir/lib/Dialect/Affine/Analysis/AffineAnalysis.cpp:115
#13 0x0000fffff5a8e734 in (anonymous namespace)::Vectorize::runOnOperation()::$_5::operator()(mlir::AffineForOp) const (this=0xffffeb665ed8, loop=...) at /home/culrho01/llvm-project/mlir/lib/Dialect/Affine/Transforms/SuperVectorize.cpp:1751
#14 0x0000fffff5a8e6f4 in _ZZN4mlir6detail4walkILNS_9WalkOrderE1EZN12_GLOBAL__N_19Vectorize14runOnOperationEvE3$_5NS_11AffineForOpEvEENSt9enable_ifIXaantsr4llvm9is_one_ofIT1_PNS_9OperationEPNS_6RegionEPNS_5BlockEEE5valuesr3std7is_sameIT2_vEE5valueESF_E4typeESA_OT0_ENKUlSA_E_clESA_ (this=0xffffeb665d58, op=0xffffe0006c10) at /home/culrho01/llvm-project/mlir/include/mlir/IR/Visitors.h:195
#15 0x0000fffff5a8e690 in _ZN4llvm12function_refIFvPN4mlir9OperationEEE11callback_fnIZNS1_6detail4walkILNS1_9WalkOrderE1EZN12_GLOBAL__N_19Vectorize14runOnOperationEvE3$_5NS1_11AffineForOpEvEENSt9enable_ifIXaantsr4llvm9is_one_ofIT1_S3_PNS1_6RegionEPNS1_5BlockEEE5valuesr3std7is_sameIT2_vEE5valueESK_E4typeES3_OT0_EUlS3_E_EEvlS3_ (callable=281474631097688, params=0xffffe0006c10) at /home/culrho01/llvm-project/llvm/include/llvm/ADT/STLFunctionalExtras.h:45
#16 0x0000ffffef8c8b30 in llvm::function_ref<void (mlir::Operation*)>::operator()(mlir::Operation*) const (this=0xffffeb665a40, params=0xffffe0006c10) at /home/culrho01/llvm-project/llvm/include/llvm/ADT/STLFunctionalExtras.h:68
#17 0x0000ffffef8c7ee8 in mlir::detail::walk(mlir::Operation*, llvm::function_ref<void (mlir::Operation*)>, mlir::WalkOrder) (op=0xffffe0006c10, callback=..., order=mlir::WalkOrder::PostOrder) at /home/culrho01/llvm-project/mlir/lib/IR/Visitors.cpp:70
#18 0x0000ffffef8c7ea8 in mlir::detail::walk(mlir::Operation*, llvm::function_ref<void (mlir::Operation*)>, mlir::WalkOrder) (op=0xffffe0004430, callback=..., order=mlir::WalkOrder::PostOrder) at /home/culrho01/llvm-project/mlir/lib/IR/Visitors.cpp:65
#19 0x0000ffffef8c7ea8 in mlir::detail::walk(mlir::Operation*, llvm::function_ref<void (mlir::Operation*)>, mlir::WalkOrder) (op=0x382450, callback=..., order=mlir::WalkOrder::PostOrder) at /home/culrho01/llvm-project/mlir/lib/IR/Visitors.cpp:65
#20 0x0000ffffef8c7ea8 in mlir::detail::walk(mlir::Operation*, llvm::function_ref<void (mlir::Operation*)>, mlir::WalkOrder) (op=0x37de90, callback=..., order=mlir::WalkOrder::PostOrder) at /home/culrho01/llvm-project/mlir/lib/IR/Visitors.cpp:65
#21 0x0000fffff5a8e61c in mlir::detail::walk<(mlir::WalkOrder)1, (anonymous namespace)::Vectorize::runOnOperation()::$_5, mlir::AffineForOp, void> (op=0x37de90, callback=...) at /home/culrho01/llvm-project/mlir/include/mlir/IR/Visitors.h:197
#22 0x0000fffff5a8e59c in mlir::Operation::walk<(mlir::WalkOrder)1, (anonymous namespace)::Vectorize::runOnOperation()::$_5, void> (this=0x37de90, callback=...) at /home/culrho01/llvm-project/mlir/include/mlir/IR/Operation.h:516
#23 0x0000fffff5a8e2f0 in mlir::OpState::walk<(mlir::WalkOrder)1, (anonymous namespace)::Vectorize::runOnOperation()::$_5, void> (this=0xffffeb666100, callback=...) at /home/culrho01/llvm-project/mlir/include/mlir/IR/OpDefinition.h:163
#24 0x0000fffff5a8e08c in (anonymous namespace)::Vectorize::runOnOperation (this=0x3c3ec0) at /home/culrho01/llvm-project/mlir/lib/Dialect/Affine/Transforms/SuperVectorize.cpp:1750
#25 0x0000ffffefbd8a70 in mlir::detail::OpToOpPassAdaptor::run (pass=0x3c3ec0, op=0x37de90, am=..., verifyPasses=true, parentInitGeneration=1) at /home/culrho01/llvm-project/mlir/lib/Pass/Pass.cpp:392
#26 0x0000ffffefbd906c in mlir::detail::OpToOpPassAdaptor::runPipeline (passes=..., op=0x37de90, am=..., verifyPasses=true, parentInitGeneration=1, instrumentor=0x0, parentInfo=0xffffffffc678) at /home/culrho01/llvm-project/mlir/lib/Pass/Pass.cpp:452
#27 0x0000ffffefbdcba4 in mlir::detail::OpToOpPassAdaptor::runOnOperationAsyncImpl(bool)::$_8::operator()<std::pair<mlir::Operation*, mlir::AnalysisManager> >(std::pair<mlir::Operation*, mlir::AnalysisManager>&) const (this=0xffffffffc608, opPMPair=...)
    at /home/culrho01/llvm-project/mlir/lib/Pass/Pass.cpp:614
#28 0x0000ffffefbdcd40 in mlir::failableParallelForEach<__gnu_cxx::__normal_iterator<std::pair<mlir::Operation*, mlir::AnalysisManager>*, std::vector<std::pair<mlir::Operation*, mlir::AnalysisManager>, std::allocator<std::pair<mlir::Operation*, mlir::AnalysisManager> > > >, mlir::detail::OpToOpPassAdaptor::runOnOperationAsyncImpl(bool)::$_8&>(mlir::MLIRContext*, __gnu_cxx::__normal_iterator<std::pair<mlir::Operation*, mlir::AnalysisManager>*, std::vector<std::pair<mlir::Operation*, mlir::AnalysisManager>, std::allocator<std::pair<mlir::Operation*, mlir::AnalysisManager> > > >, __gnu_cxx::__normal_iterator<std::pair<mlir::Operation*, mlir::AnalysisManager>*, std::vector<std::pair<mlir::Operation*, mlir::AnalysisManager>, std::allocator<std::pair<mlir::Operation*, mlir::AnalysisManager> > > >, mlir::detail::OpToOpPassAdaptor::runOnOperationAsyncImpl(bool)::$_8&)::{lambda()#1}::operator()() const (this=0x3d5600) at /home/culrho01/llvm-project/mlir/include/mlir/IR/Threading.h:65
#29 0x0000ffffefbdd550 in std::_Function_handler<void (), mlir::failableParallelForEach<__gnu_cxx::__normal_iterator<std::pair<mlir::Operation*, mlir::AnalysisManager>*, std::vector<std::pair<mlir::Operation*, mlir::AnalysisManager>, std::allocator<std::pair<mlir::Operation*, mlir::AnalysisManager> > > >, mlir::detail::OpToOpPassAdaptor::runOnOperationAsyncImpl(bool)::$_8&>(mlir::MLIRContext*, __gnu_cxx::__normal_iterator<std::pair<mlir::Operation*, mlir::AnalysisManager>*, std::vector<std::pair<mlir::Operation*, mlir::AnalysisManager>, std::allocator<std::pair<mlir::Operation*, mlir::AnalysisManager> > > >, __gnu_cxx::__normal_iterator<std::pair<mlir::Operation*, mlir::AnalysisManager>*, std::vector<std::pair<mlir::Operation*, mlir::AnalysisManager>, std::allocator<std::pair<mlir::Operation*, mlir::AnalysisManager> > > >, mlir::detail::OpToOpPassAdaptor::runOnOperationAsyncImpl(bool)::$_8&)::{lambda()#1}>::_M_invoke(std::_Any_data const&) (__functor=...) at /usr/bin/../lib/gcc/aarch64-linux-gnu/9/../../../../include/c++/9/bits/std_function.h:300
#30 0x0000fffff037dee8 in std::function<void ()>::operator()() const (this=0x3d5650) at /usr/bin/../lib/gcc/aarch64-linux-gnu/9/../../../../include/c++/9/bits/std_function.h:688
#31 0x0000ffffefbf4e38 in llvm::ThreadPool::createTaskAndFuture(std::function<void ()>)::{lambda()#1}::operator()() const (this=0x3d5640) at /home/culrho01/llvm-project/llvm/include/llvm/Support/ThreadPool.h:95
#32 0x0000ffffefbf4ca4 in std::_Function_handler<void (), llvm::ThreadPool::createTaskAndFuture(std::function<void ()>)::{lambda()#1}>::_M_invoke(std::_Any_data const&) (__functor=...)
    at /usr/bin/../lib/gcc/aarch64-linux-gnu/9/../../../../include/c++/9/bits/std_function.h:300
#33 0x0000fffff037dee8 in std::function<void ()>::operator()() const (this=0xffffeb6666d8) at /usr/bin/../lib/gcc/aarch64-linux-gnu/9/../../../../include/c++/9/bits/std_function.h:688
#34 0x0000ffffef3804b0 in llvm::ThreadPool::grow(int)::$_0::operator()() const (this=0x3d56b0) at /home/culrho01/llvm-project/llvm/lib/Support/ThreadPool.cpp:59
#35 0x0000ffffef380374 in llvm::thread::Apply<llvm::ThreadPool::grow(int)::$_0>(std::tuple<llvm::ThreadPool::grow(int)::$_0>&, std::integer_sequence<unsigned long>) (Callee=...) at /home/culrho01/llvm-project/llvm/include/llvm/Support/thread.h:42
#36 0x0000ffffef38033c in llvm::thread::GenericThreadProxy<std::tuple<llvm::ThreadPool::grow(int)::$_0> >(void*) (Ptr=0x3d56b0) at /home/culrho01/llvm-project/llvm/include/llvm/Support/thread.h:50
#37 0x0000ffffef37ffec in llvm::thread::ThreadProxy<std::tuple<llvm::ThreadPool::grow(int)::$_0> >(void*) (Ptr=0x3d56b0) at /home/culrho01/llvm-project/llvm/include/llvm/Support/thread.h:60
#38 0x0000fffff7fa53d0 in start_thread (arg=0xffffffffbeaf) at pthread_create.c:477
#39 0x0000ffffeed754ec in thread_start () at ../sysdeps/unix/sysv/linux/aarch64/clone.S:78
```

I'm based on commit `f72d8897`.
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJztXFtT4zoS_jXhxZWU73YeeAghnEotM1DAzG6dF5dsy4l3fFvLzpD99dst-Z4LtwwwW0NBYstSq_vrVqtbknFTf3v-sKZSkEZR-jNMVtLyThqpdkF-0EQK8jSWRqYcR2E-Uq8Kygr4WiYFXeWkCNME7i5DElEPy6_DhEQruJjffoPPmBRxGY03bAxXG-pNOBVTHqnTkTYbyZcjeYa34pffBmXiSSNdFg2AjZFqzKCyFNM4p8FIm4-0q0f8CzR1pC1G6hyYNS6OVplKY_hGoY5UGVkXggUJCXqyNNIuJZKHxXripQkrSFJIWDiTwsSnj926yr66yt66wX66E0EZuWnrxryqYHnih7HEsRACe6LBIXlaIo_HiCjPJJLsIXLxUiLzLhECxlapN64IJVwLT5OKuJFNgjCKBIFArijMawrYAIqeIMS8YBKkObYMOW8C1yIVIrOCZrWArW1wUdyuKKx0NyH9KTAxLmpmwpFxOUKUjEcsUcStUl8fkxRZ6D2q5EmDgNECG0IhFrAiD33KeAmOgSvspBVQWOcBXud7eY0_jtdKr2Lkw8Bh9egXPLpPeIE3MQEOqeGj_5OWRcWIt8PA63sZWZf1ZU6LMk_qAfKE9TftBm5TfHo5YWvKADupAI9-X2Y0_w6eOc3D_9L8kMudgKd2Q3Tk6J7HaVZIk0l1dxqXL43B021oXoyFjsdFOiZBECZ0HKVpxqT6jiHH403NMhjuSFU3YV6UJKqKx0w8UFAnlbes-eaAq1frNKbw5ZVRvk5lsOKrKNrE4yxP_y14riSLQrcnyowzgRfA5JaFrCm7L_LSAzVRNvGyDLoxTAs726ShL3FqGk5SVxEpRIPvJCrpHN17TsKkYOI58f1l4gMlAPE7yW_yB5rHiMj9NnZT9GYtLU5BTJTSjDEADxpJfPK0Q_aQZtd0Q6Oqlr0hkZjD5vArhewqzbs9NTV4JdWEX_hSkzQZFxULEuM8IH4SKqUyz-V3iT5mgA_1EW7VkgISRtSfiOe314vZ_UICtxKHhUQkt1yBQWdpXqBfWBdFxkVXYVhcrWDKK12Y9OJKI7uKCRkrKcIukcQHM_ai0qfclrlpSy7xfgCiHq26vy-gQPLLOGuMW56IcXubp2CuMcy0qzKmQgXSpzb1w3bOBVMqwUaqJkvyoww_AfxMfVWzPPDyHFFuOmxb2dttDrbHMXpA0MAK2ko5-emkYJ6UxNwgwGqSQpjH0wOo1h4fQOBmUOFw9S0JH7EgXIHobAL640PFgE9FqXwPTiswo8CPqkx1SyIuGguw5qU55apES5tK-3T1FLhHXCNGuNy6JJJllOQM7dMVtgX801xy0xJsLg3A9HCYiXEM4-gmgztoK6U_E-pL7raqANFDNeqrOtzzp_joyPgDUjA5rFYUOYC-CR_aEwn5g7ibBDAekcRTknKWDnl0SdoXRsNIkJ-OpKGW8pxg-lA4MAyVnh1IvyyUFrVZcSCa5j9gwxfyTmDNW8p7AlqOz0uia05JeYLSs6JjTkndT0l5OSXtQKRdM6U-M9KWJGFzdZQM3Agm6yBZ7qt7T32tV18d1m9asAKHv9BpxaUmIlLstLVN7YlwtEu8E2QNbjqRfyNTN_hXDwb_HF_9QEjNtdVG1ZxzZJfL0Ymm3xhawwwQk2worGoYB9jSDvIk_3KezNMMNE7LOs1Qe9JKzYNW2rbQey2s3RacY1u4J9E4SonfsFybttbqRX-BaVf0p_vo6w3x_RSPaax2avI-wkaH69cS7vp3iJ4CjlKFwXTXVbcN1U5DiKMDwWbVUlEONR26F6X2JW8TpudNjnmaNrvTnrVMcjS_w6AYgwYoxnACY4k1KfYFFCI4EOnCG8egKU-6PFyVUdTG4YciEB6kSo7z19KBBIgh9DYLV8AHfuoyBOT5Fu5MnIlIFYVD3OrTDMP_UgSSULDhYWZS4i2nNOExZduNInWCYUo9z_DBP0MGzDtvosuqH37PSVjThoQ6IOGrpuIJEgJNB3MexyVCjiCGRPNSfhS1fc_1dFviyZHBmj9MeoxSJKSiaJDEYWGbTBnzRKyAcaMjdVXop71uURN9B6pumIFtir5PlBTiGtrRvLCXEfLagunW5AMQCZjkX3t41qnlVzz_-kxd4BlhZe2Sf7UcYQ4PDzFUrrBuLvexbXs6Z_s9cn5ku7MihYYr8gS03KnaWK62a7l2a_w980XL7drVb2FDn8Bodq3kA01iYAmKrDSmoHdNAZizZU-Ywsn44ptCa5xYaufnmqZmeXweQSvQLifoxzmX77UMZzYAGEMAFG0qvxiAC74KcEzSYpuhXbRU-XIRzW_TaLumfo42gsXf-AZJlnIqeMkXGL5gMCFwqkpuMprDxM4-AD5F1Vv8zB38FPpyA-osm1ymMTw7imXAl07eX3BTaweONZDbJK7u9eVe0WKJiw_3lMcSuP7S6NDnUu6R7teJUxdUwqhqG8rYO8JQoUQQ4SbrC9HyDPVNXSSDYVXlQwXSrUag6Y5AnmX3tfOFxnc0mHkeZazRl7i9oxERIdceIzQslWceOX0H1zUQUe8YoCIPRdS8gePy1tT78YUH6EKwS5pR0FTiicg692rxG7NkxbAIZ15oV6yhiM9wfkOkN5K7EClUHtaMszShdUX-FFeYft7N7jCCIhGj74ijYbe2D0ngAEfZGziwkF0DCABkmm9vSQ6MUz6tvZMfGjCvdOwc8ts-81MayPuYP8g2zDXVoztaTeKNjt5PJMVoRdK6IhnEppbG9YGRKISH2zgtmZSQmLKM705Mq5Cn3RPhGxVlcpPwSVJsyNhNxZGqO4a4TPnzNK8edyOo7kI-AMFXiff7A-rb9Tg5uS08wBzPQF8xEzsmnY3ZGjrL6PgEfYidGYjA_u-_v-rYmenTAsJ6_SeJfiyvv94703_C1U3u03yhLP7-qqjOX9c3F7Nrx_nqKNOmN0XvA7rYLDQOJJBQlA5Y8GDx9b6Y0oS4EXXCYPkvQmDc5zqKPg2ZA37ASYPlg-LcYv8tSbw17-iqvjYuotT7sVgsjA3GDSzXWOFbQIGB8pcPqrOpHy3ur5yFjiHW4n7m3DzIzuLrP75FcL1wvAjL9qvOF4tIw0nNU15h_NW2Y1uwvIOP7yELAUE2WaOuph0zN3ZUJeJOBzSFPShqnTw44L-XV5tbocEOYIuFongwdnFdxQmS5d9f7xVnqGHlBCpWXq_jew3VrHQVq7xIs_9oNKsJzYJeNdDrYrHBC74HCBggJzhD2eAedQjU5Kll2nbt32L2Fg1X-5athquC2eUDDsuH66tKUyRaPMKEKLStd5RtdhPuwPZsV-PKbjdWu8oeaXOeG_YcUseXzbgvWzzpwwZNjjkxossfiZVpt1hZA6wsSgehm7BwcY1mfkTo-RshxhNCzfNmHIlli51g2BMry_WQbKfYlDfqZn8tKbHlnrKiofyauaPvbMTUYHWWO-0dUMnvAaqua58KVLMzqqe_G6iarVYJ2yeEU5V_Ozgtn04_LZzKToCheE_Aqc17sHTFrs4TnDIE70Hci7fn_Ihcdfj6SbB_SaTW5liqOgTSmA6AbIX8QCw7kDXz-68GreGIo2Yo7bqgupPGqcPM9Ca7L0hBPxtmdUxkKvIvRe6SgsWHDXiKqbXg7eRxsu29NQfuG4an0ZOuzj0rU20DEtXoOXvXt4klH_ZON9lDepPdEsZmPskw2q0FRKkywvpSNSlda_8kbn3zhuZhsEVqeNr6sshxr4QHvzQplqCTv2jSDOhL5bUoYQfVVwWB1tmEU80BAlMIIF-DwG2YUdx1qpGgncW708KA67wMquHBWGSgXsmrWwRpu88FP55p2afDTjc62FkD7DyX6K_BrjM8ZmybeMs4w400N02jnrOwR_tyLW0Oaat4khHseH44GunMdNXa1xeSkBVGA-B-MOCwT0OMb6ceyvWEWuRq1eP2yy3vqfJrvZ3jE2jMVPRWY_ZQY74-GO-43YxZfL1UCbHAgnjgGueOs0pKx3t8FBUdJwE_QyInLCp1nEoRVZWGmDhTfULyHdr8gOVJuZc6f_26px4MYGLcYju7KdfLu3maFPSxqDj9o7RXKe0PbJ_P1psC6yIiseuTeq1NU_Dk3f5luP1OWPMNUz7Z6vLDOqfED5OVWETrJH_Tgbv1DYO72wZ9p16Hc9Yk8SMEtUmMuQDzP675NzXXP675j2v-RLB9qGuuNkmcL06YbNIftBtmO7Nk6_ikIMJPV4Ez1HAcvmKY5sOUv2ToesXrZfzssQh9V54Hn4Tk3trUx_zc8RhMBcqmdcXBR-vOoeUF_-V13RBfG74CFp160ZK7dk1uU-fee3yBjLmd2CBpBGtPHfZc-sEdo8NTlSF_AuFxH68RXulPbIFONbu_kyYmxVs0F37vwW1BHwj7MUv8qxIPdHWt4DBYJ5729VNso7VvTbZicpA6W8uaOsTIE9nxSyb_D8DzRGN1mMZ-jkGrvc-gbRYvTd_-bENX75mlZsu6Kx8fuqs8_Ynny_krxq3nl1889txXjL3ha8qdAVedImsPkWnGUDbN0vuyFbx5NWlmWbQFRb9G8t5KUVFmeOzhtYTMXigQihPJDqP_KfHQHtAtExau8P3lKE1W9X-8Ue05ZgH0xQviTzs1AZI4PtF5X8HcQVfzDqPLly1Dr0IiTx-33djmTZBVK3V820CcqYC72yJ_k6E9D4_O4rnWX_7ULPg8gsf_GRCdl8W07qpiYAXE0PwqzSV54YhGfNMkX_XWQF1Kgoq_TNRyxLTGX5DQrXb3T-tl0tS3DF1gXTXjPXVeFXvWK2mVy0VMYGDRyT10atWect8rfMuRasUSvkrmS2kCTi7Gf5wBlQJL9W17auH7dmf-ueZPtSk5K8Iioufi1TGsv_MCDv9nL4N_9HJW5tH56__3hqHLtny2PofROiW6pwUW0YnlBgq18Ci4bJmG5Vre9CwiLo3YOX-RUq2SA1JtI-FLxmfhuSqr-GsoOlDVJoY39XU7CDT41D1DwRetYsgkJsjLJM1XZ_k5Z8stVwweRiErWPsQcgx0YpR3CfRJWazT_NwbgzX6lJ1xEc45__8DEsYVHA">