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

    <tr>
        <th>Summary</th>
        <td>
            Cannot select `fmaximum` for `f128`
        </td>
    </tr>

    <tr>
      <th>Labels</th>
      <td>
            new issue
      </td>
    </tr>

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

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

<pre>
    When working on [Simplifying Optimization of Flang intrinsics codegen](https://github.com/llvm/llvm-project/pull/65814), it was discovered that it is not possible to use `llvm.intr.maximum.f128`.

## 1. Original Fortran program
```fortran
subroutine test(x, t)
  real(16) :: x(100), t
 t = maxval(x)
end subroutine test
```
```
$ ./build/bin/flang-new -c -O2 f.f90
```
<details>
<summary>Error log</summary>
<pre>
LLVM ERROR: Cannot select: t27: f128 = fmaximum contract t26, t25
  t26: f128,ch = load<(load (s128) from %ir.scevgep, !tbaa !3)> t0, t5, undef:i64
    t5: i64 = add t2, t4
      t2: i64,ch = CopyFromReg t0, Register:i64 %4
        t1: i64 = Register %4
 t4: i64,ch = CopyFromReg t0, Register:i64 %0
        t3: i64 = Register %0
    t9: i64 = undef
  t25: f128 = fmaximum contract t24, t21
 t24: f128,ch = load<(load (s128) from %ir.scevgep2, !tbaa !3)> t0, t23, undef:i64
      t23: i64 = add t5, Constant:i64<-16>
        t5: i64 = add t2, t4
          t2: i64,ch = CopyFromReg t0, Register:i64 %4
 t1: i64 = Register %4
          t4: i64,ch = CopyFromReg t0, Register:i64 %0
            t3: i64 = Register %0
        t22: i64 = Constant<-16>
      t9: i64 = undef
    t21: f128 = fmaximum contract t20, t17
      t20: f128,ch = load<(load (s128) from %ir.scevgep4, !tbaa !3)> t0, t19, undef:i64
        t19: i64 = add t5, Constant:i64<-32>
 t5: i64 = add t2, t4
            t2: i64,ch = CopyFromReg t0, Register:i64 %4
              t1: i64 = Register %4
            t4: i64,ch = CopyFromReg t0, Register:i64 %0
              t3: i64 = Register %0
          t18: i64 = Constant<-32>
        t9: i64 = undef
 t17: f128 = fmaximum contract t16, t13
        t16: f128,ch = load<(load (s128) from %ir.scevgep6, !tbaa !3)> t0, t15, undef:i64
          t15: i64 = add t5, Constant:i64<-48>
            t5: i64 = add t2, t4
 t2: i64,ch = CopyFromReg t0, Register:i64 %4
                t1: i64 = Register %4
              t4: i64,ch = CopyFromReg t0, Register:i64 %0
 t3: i64 = Register %0
            t14: i64 = Constant<-48>
          t9: i64 = undef
        t13: f128 = fmaximum contract t10, t12
          t10: f128,ch = load<(load (s128) from %ir.scevgep8, !tbaa !3)> t0, t7, undef:i64
            t7: i64 = add t5, Constant:i64<-64>
              t5: i64 = add t2, t4
 t2: i64,ch = CopyFromReg t0, Register:i64 %4
                  t1: i64 = Register %4
                t4: i64,ch = CopyFromReg t0, Register:i64 %0
                  t3: i64 = Register %0
              t6: i64 = Constant<-64>
            t9: i64 = undef
          t12: f128,ch = CopyFromReg t0, Register:f128 %1
            t11: f128 = Register %1
In function: test_
PLEASE submit a bug report to https://github.com/llvm/llvm-project/issues/ and include the crash backtrace.
Stack dump:
0.      Program arguments: /home/unterumarmung/dev/llvm-project/build/bin/flang-new -fc1 -triple x86_64-unknown-linux-gnu -emit-obj -fcolor-diagnostics -mrelocation-model pic -pic-level 2 -pic-is-pie -target-cpu x86-64 -O2 -o f.o -x f95-cpp-input f.f90
1.      Running pass 'Function Pass Manager' on module 'FIRModule'.
2.      Running pass 'X86 DAG->DAG Instruction Selection' on function '@test_'
 #0 0x00000000014e45f7 llvm::sys::PrintStackTrace(llvm::raw_ostream&, int) (/home/unterumarmung/dev/llvm-project/build/bin/flang-new+0x14e45f7)
 #1 0x00000000014e205e llvm::sys::RunSignalHandlers() (/home/unterumarmung/dev/llvm-project/build/bin/flang-new+0x14e205e)
 #2 0x00000000014e4f4f SignalHandler(int) Signals.cpp:0:0
 #3 0x00007fbbb0211420 __restore_rt (/lib/x86_64-linux-gnu/libpthread.so.0+0x14420)
 #4 0x00007fbbafc0e00b raise /build/glibc-SzIz7B/glibc-2.31/signal/../sysdeps/unix/sysv/linux/raise.c:51:1
 #5 0x00007fbbafbed859 abort /build/glibc-SzIz7B/glibc-2.31/stdlib/abort.c:81:7
 #6 0x0000000001487f43 llvm::report_fatal_error(llvm::Twine const&, bool) (/home/unterumarmung/dev/llvm-project/build/bin/flang-new+0x1487f43)
 #7 0x00000000019ca53e llvm::SelectionDAGISel::CannotYetSelect(llvm::SDNode*) (/home/unterumarmung/dev/llvm-project/build/bin/flang-new+0x19ca53e)
 #8 0x00000000019c978c llvm::SelectionDAGISel::SelectCodeCommon(llvm::SDNode*, unsigned char const*, unsigned int) (/home/unterumarmung/dev/llvm-project/build/bin/flang-new+0x19c978c)
 #9 0x0000000001178537 (anonymous namespace)::X86DAGToDAGISel::Select(llvm::SDNode*) X86ISelDAGToDAG.cpp:0:0
#10 0x00000000019bdfd5 llvm::SelectionDAGISel::DoInstructionSelection() (/home/unterumarmung/dev/llvm-project/build/bin/flang-new+0x19bdfd5)
#11 0x00000000019bceef llvm::SelectionDAGISel::CodeGenAndEmitDAG() (/home/unterumarmung/dev/llvm-project/build/bin/flang-new+0x19bceef)
#12 0x00000000019bab01 llvm::SelectionDAGISel::SelectAllBasicBlocks(llvm::Function const&) (/home/unterumarmung/dev/llvm-project/build/bin/flang-new+0x19bab01)
#13 0x00000000019b7524 llvm::SelectionDAGISel::runOnMachineFunction(llvm::MachineFunction&) (/home/unterumarmung/dev/llvm-project/build/bin/flang-new+0x19b7524)
#14 0x000000000116a2e9 (anonymous namespace)::X86DAGToDAGISel::runOnMachineFunction(llvm::MachineFunction&) X86ISelDAGToDAG.cpp:0:0
#15 0x0000000004010d85 llvm::MachineFunctionPass::runOnFunction(llvm::Function&) (/home/unterumarmung/dev/llvm-project/build/bin/flang-new+0x4010d85)
#16 0x000000000579f404 llvm::FPPassManager::runOnFunction(llvm::Function&) (/home/unterumarmung/dev/llvm-project/build/bin/flang-new+0x579f404)
#17 0x00000000057a5f01 llvm::FPPassManager::runOnModule(llvm::Module&) (/home/unterumarmung/dev/llvm-project/build/bin/flang-new+0x57a5f01)
#18 0x000000000579fab1 llvm::legacy::PassManagerImpl::run(llvm::Module&) (/home/unterumarmung/dev/llvm-project/build/bin/flang-new+0x579fab1)
#19 0x0000000001b0554e Fortran::frontend::CodeGenAction::executeAction() (/home/unterumarmung/dev/llvm-project/build/bin/flang-new+0x1b0554e)
#20 0x0000000001516f8c Fortran::frontend::FrontendAction::execute() (/home/unterumarmung/dev/llvm-project/build/bin/flang-new+0x1516f8c)
#21 0x0000000001504976 Fortran::frontend::CompilerInstance::executeAction(Fortran::frontend::FrontendAction&) (/home/unterumarmung/dev/llvm-project/build/bin/flang-new+0x1504976)
#22 0x000000000151b798 Fortran::frontend::executeCompilerInvocation(Fortran::frontend::CompilerInstance*) (/home/unterumarmung/dev/llvm-project/build/bin/flang-new+0x151b798)
#23 0x00000000010a2987 fc1_main(llvm::ArrayRef<char const*>, char const*) (/home/unterumarmung/dev/llvm-project/build/bin/flang-new+0x10a2987)
#24 0x00000000010a0f92 main (/home/unterumarmung/dev/llvm-project/build/bin/flang-new+0x10a0f92)
#25 0x00007fbbafbef083 __libc_start_main /build/glibc-SzIz7B/glibc-2.31/csu/../csu/libc-start.c:342:3
#26 0x00000000010a0aae _start (/home/unterumarmung/dev/llvm-project/build/bin/flang-new+0x10a0aae)
flang-new: error: unable to execute command: Aborted
flang-new: error: flang frontend command failed due to signal (use -v to see invocation)
flang-new version 18.0.0 (https://github.com/llvm/llvm-project 1a0cbb9c32edf64ab620d31242029b31795fcfd8)
Target: x86_64-unknown-linux-gnu
Thread model: posix
InstalledDir: /home/unterumarmung/dev/llvm-project/build/bin
flang-new: note: diagnostic msg:
********************

PLEASE ATTACH THE FOLLOWING FILES TO THE BUG REPORT:
Preprocessed source(s) and associated run script(s) are located at:
flang-new: note: diagnostic msg: /tmp/f-b4496e
flang-new: note: diagnostic msg: /tmp/f-b4496e.sh
flang-new: note: diagnostic msg:

********************
</pre>
</details>

Same with `-ffast-math` flag

## 2. LLVM IR

```llvm
; ModuleID = 'FIRModule'
source_filename = "FIRModule"
target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-f80:128-n8:16:32:64-S128"
target triple = "x86_64-unknown-linux-gnu"

; Function Attrs: nofree nosync nounwind memory(argmem: readwrite)
define void @test_(ptr nocapture readonly %0, ptr nocapture writeonly %1) local_unnamed_addr #0 {
.lr.ph.i:
  br label %2

2: ; preds = %2, %.lr.ph.i
  %3 = phi fp128 [ 0xLFFFFFFFFFFFFFFFFFFFEFFFFFFFFFFFF, %.lr.ph.i ], [ %28, %2 ]
  %4 = phi i64 [ 0, %.lr.ph.i ], [ %29, %2 ]
  %5 = shl i64 %4, 4
  %6 = getelementptr i8, ptr %0, i64 %5
  %7 = load fp128, ptr %6, align 16, !tbaa !3
  %8 = tail call contract fp128 @llvm.maximum.f128(fp128 %7, fp128 %3)
  %9 = shl i64 %4, 4
  %10 = add i64 %9, 16
  %11 = getelementptr i8, ptr %0, i64 %10
  %12 = load fp128, ptr %11, align 16, !tbaa !3
  %13 = tail call contract fp128 @llvm.maximum.f128(fp128 %12, fp128 %8)
  %14 = shl i64 %4, 4
  %15 = add i64 %14, 32
  %16 = getelementptr i8, ptr %0, i64 %15
  %17 = load fp128, ptr %16, align 16, !tbaa !3
  %18 = tail call contract fp128 @llvm.maximum.f128(fp128 %17, fp128 %13)
  %19 = shl i64 %4, 4
  %20 = add i64 %19, 48
  %21 = getelementptr i8, ptr %0, i64 %20
  %22 = load fp128, ptr %21, align 16, !tbaa !3
  %23 = tail call contract fp128 @llvm.maximum.f128(fp128 %22, fp128 %18)
  %24 = shl i64 %4, 4
  %25 = add i64 %24, 64
  %26 = getelementptr i8, ptr %0, i64 %25
  %27 = load fp128, ptr %26, align 16, !tbaa !3
  %28 = tail call contract fp128 @llvm.maximum.f128(fp128 %27, fp128 %23)
  %29 = add nuw nsw i64 %4, 5
  %exitcond.not.i.4 = icmp eq i64 %29, 100
  br i1 %exitcond.not.i.4, label %_FortranAMaxvalReal16x1_contract_simplified.exit, label %2

_FortranAMaxvalReal16x1_contract_simplified.exit: ; preds = %2
 store fp128 %28, ptr %1, align 16, !tbaa !3
  ret void
}

; Function Attrs: mustprogress nocallback nofree nosync nounwind speculatable willreturn memory(none)
declare fp128 @llvm.maximum.f128(fp128, fp128) #1

attributes #0 = { nofree nosync nounwind memory(argmem: readwrite) }
attributes #1 = { mustprogress nocallback nofree nosync nounwind speculatable willreturn memory(none) }

!llvm.module.flags = !{!0, !1, !2}

!0 = !{i32 2, !"Debug Info Version", i32 3}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{!4, !4, i64 0}
!4 = !{!"any data access", !5, i64 0}
!5 = !{!"any access", !6, i64 0}
!6 = !{!"Flang Type TBAA Root"}
```
```
$ ./build/bin/llc f.ll
```

## 3. Reduced LLVM IR

```llvm
target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-f80:128-n8:16:32:64-S128"
target triple = "x86_64-unknown-linux-gnu"

define void @test_(fp128 %0) {
.lr.ph.i:
  %1 = tail call fp128 @llvm.maximum.f128(fp128 %0, fp128 0xL00000000000000000000000000000000)
  store fp128 %1, ptr null, align 16
  ret void
}

; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none)
declare fp128 @llvm.maximum.f128(fp128, fp128) #0

attributes #0 = { nocallback nofree nosync nounwind speculatable willreturn memory(none) }
```
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJzUW1tzq7qS_jXkpQsXiIvhIQ_OxWunKutkVZI5Z8-TS4CwdRZIjCRy2b9-ShJgcOLYue2Zk1orMVKr9XXrU0stZCwlXTNCTp3ozIkuTnCrNlyctkwR0dZY1C1bn2S8eD7914YweOTiN2Vr4Ayc6OyO1k1Fy2ddctMoWtO_sKKcAS9hWWG2BsqUoEzSXELOC7ImzIkuHJRslGqkEywctHTQck3Vps1mOa8dtKyqh_6P2wj-b5IrBy2btqoctIyjxA8dlDroHKiCRyyhoDLnD0SQAtQGK11MJTCuoOFS0qwioDi0koATe1rrTIOa1fiJ1m09K32UOLE3c7wLx1t0v1HgoAD8GdwIuqYMV7DkQgnMoBF8LXDdycWe_VfaWlsq20zwVlFGQBGpHJQ8abhKwzYCAILgykGJHzsoBe2GYAFPusDzOuNUJ6rACS6gxk8PpsXToISwAnZ7moJ6_RGFMHPQMmtpVei_lDloWerBchl5BDcH9wZBOSvTPQqC84IoTCvpBJdDkWzrGotnJ7i8FIILqPjaCc4dtNxWDLKNIMPj9fU_f8Ll7e3NrXbBOWZ63CSp9KAHC1Borv_oMTJ-KLtRg5wzJXCuQKHYuAtFvW91SdfGQef5xjSsOC4MoER_Agcl0tSnUApeg4MiKmYyJw9r0mh9DvJVhrH-G2iXB5egPNNRpH-3rCClEyxoHPbdgq4KFkDj0PSIiwIUMk1GMhpeJ7UFd86b56Xg9S1Zd73ckjWVigjbhYY30QGg_HFfvfhYUIUf6sfb6SfY189IUKVjIeubYTCigwMY2gH0e-Ao_Nz4obcHUM_tPSMIpnZ3EM2In3MmFWaqaxKcu348sHjw1lEM-AIWHB7-bU9fwoOjuWCNQ2PJretecdob3AFDikPssYPqz6ej6H2OQuHbFPLTNygEpv5IEgVo64_j2fNVUeTYWALfQad3EEpjTPZRauxCOEQqTZQDjPLtguIHu4P6yWUlPsCp_QtLD-AlP_awKkxeuOSo8PSVrHonrz7NrHeQSUML99HpVd-9GaWswuAgr7pxRi8H9pPRKnmbWfMDxAItciSz9O9XmPW3c-vd7PrayAXvi15GPN7HuD0-Pcg5MGR6wZw3jbIERZH_2pyYLrZjizrxKwZly3Kd4pndOZFqZWt-XV8u7i51QlJTBRiydg2CNFwonXy9O9ujUrZEOmgJmBVAWV61BQG1IZALLDeQ4fy3nlakS9vuFM5_Q9HWje7FFHkza9Yvm7ABFuu2JkxpHOCg5YbXxEHLSaLroGVBHl7C2ZsslbkPrhK0qQg8JfEqDt2W_Wb8kbkVZe2Tu2YtuKSmyuXZv7U8r7hwC4rXjEul02K3FqTiucmb3ZoXpIKG5uA2NHcr8kAqQPaBSrehBFyFxZooN29a3aUbhyZhczmUMw7uE5Rp5OZN41LWtGqcyPmdR25bxnTG3mApwUHzZTek8EsX_MQMr4lw0Fwn-TUv2ooYqavbn-bBQfPO62iPwj-TGC4WP1wnuLxY_IArJpVobRd3JrXT_LH6ezrpZk7oWUahfjPnoMAD78nrf_yQhFE5B0MakzXLZ2k__BKUKUODe80LHTcHIYEfV1wqQXDt2HSRMmUybz1vvoIJDjrznjp02zTfQYG_Ax95EXkN_m3L7uia4eoPzIqKCOnYYP_lCDWACUK06-AyLGGCxUFJ5y9bLGd5o-eZZ_4PioJO0bzMssxDvh8iD1YrQaTigqyE6oypaOagZTdbhlliKxq1EQQXM8lnXoc4RN4EbzjqBpe5RzwvA4Gp1CwdrF9XNMvdu7-u_pqfDY9oFvgOWkpjhYOWs5l-epYFaaRxL32yBcatGpmDlkb1LHeCRaTjo79FEk2QZKRIohRwxo2lxyFRhfWGaWU6SXQnI_7H0-FJ5mUYjAhkY-yqxApXKyIEFxPm3z9SRvQeRKqO-Rnn1XcQywCbDNR8gjzNcRSMqT9EgovFj6s7UtlSewL030TZ6okxdxf_4AVx0OIb8Ft4E_zJDv50nuQH8dvSc16Qc17XOsy9boDekJmD1wLyDRb9EE1rvidKWUsmpqYTU_15EgVz3S1mnD3XvJXAcE1kYwJrao35M4kvFj_u-Svm7x-1P5NYC_cNXwYSHTKnIT_NirKIDjr-go-WmdEq8x1R1EIaPKgx-zuYc0LKw2TnBflB2IIVlzVVF4sf3wVXo5nARTtwceb5R3J7UVVnWNL8rOL5bzkZ6mEjsQ0432CMxjoxJtgxZh6h8KAxomU37CfON5SRHvfEmBd132ONBjuxJpzOxRgjkn5oLn7QwqOmaDQGGXq-VyTjKbqjWe8rR5heBfOtfu4QTvw8WVijeVqG3pg1y18adb8Z_r8E32GbgJ9PweOonMzffeD7DfyYBF3RtwA3uCbAk12v42wMvCJrnD93O_qtCVd1syX13wffoJvAny6UmRdFIelfDVpApeBMEVZMI3yfMjvBgjyRvFVk8Y3rk8U1Bo6ma2rkx2WSvwV82T29gvx7MFtIE8zTNTXywnQev-3suqEVEVfmaCUnr_v7eKO_JeJbMyZ2op2xyeZp8padnUVbcx-644O3rXvhnm_ZSFv4E_um67OHUZrMocz9VY3pdDYvhMDPt6R0gvPprji41BvjnZ3yl2O30CbYwx3sXpki0Li_vm-tetL3bn5ZekkAq5VOIFdSYaFWHZCjcs1ctn3Kaz-aSqPHJJ5BiPTvbffxrukYE7Adf4PxGG8D1rY2WIBNaoMFtAx3dzm6CQA5r2ts6A0LnUCT4q32phT6OdE3hhLTihRQtEa1PRvQ9rWSgPtgyggBOppkuyjhgQipt71-MvNmHrz7egv42MuzLM0DRIoyDnEWI68IfBQiD6VZ4M_TqMzLYjut7s0ZoLk1sufUsZMzxylgjhW1dMMlferPcqXCVUWKCyo-eST60umMKx1-YXvQCbVcD2ezZvp-9N_onk536ry4v1-c_wH3f1zC8ub6-uZfV__4Acur68s7uL8xxWf_9QNuL3_d3N4PGH4J0gieEylJAZK3whwaSh1WNC2wlDynWJECRMtA5oI2ahAQBMyZLSkAq0HlcS7QnlZ1o2eBm4VhGpPPtZ7JzQdG4KvGwVzyGd_osSUvrgjZY3pcE3ikagNO7LlliaVya6w2Tuzp6bl-5Q4WmoG5I3R1O6ns7ySZ2dT1ewZ2N3h1Yd5f7JxZd3ezzECvSloRnUZ1gmgk2L2es6fsUGCFK_zMW9WLElcvVsRt0FwnRYGJmkg_-tNH_SkOzS-X9h_KRDfyUeKyRH-I-zZx6N6Z1zjT_rt3C13feyd732rriiEXXyglpGVEKQgBxuUzy4Hxlj1SVkBNai6edYIp1jXRtoGOGY-Cqm1ELkhJGYEHTgvYHtMnjRLAeI4b1QpimnFWPdtXYOgcptVGY1-vt9VmClWrlumRKFa4KIQ98XfmZ7bbWSVmzWZGB9oCZAIqnBEdoqOJ0eZNmLa8EaSQncei7i5QNGjq1DgoCoxMs6FQNuadV3QG3tP18uXP5fhhRyGY-4znprXur3sXGyFTse0tHHozb_R0Xwc0pXs0RUaT3FQwvCJF5xCOJGIjsSaKVKQmTOlxoEk_Iv3odK2jUcP58OrZ-mTUxBwe44quGfgvbzJsVdh3h3ryQ46ravv-u3NyaK9gTm5foqSrRJF5Vz08jQ6U9WN60HLfG14_dyLGi348lvHf4x7fGzdF-x3k-0d6yA8-5yIfTXyUTH3kh4edFO06yTcyARoLvYtE_phF_hs08o_lkf9JIvlTJvk7VPIPcwm94JK99hUmY6F3kQmNyYTeIBM6lkzok2RCUzL5O2xCh9mEXrDJXuiMJ0LvYhMaswm9wSZ0LJvQJ9mEpmxCO2xC6eAD1j4Ck48Td43NIU9U5ZwVM8bVjM6sf2leN0D-Z7DfBi3PGy161H-ttZYblsNVl_wvfprb4rcEV3785K96W1fSXtenpJhpRZPGk7X03ZpeX3otevP6d-S7STg4ZvwEUWbn0SGcXxze69StVOamPpHSbEGqKsP57317INmQvK2wMgnmI60qQVQr2HZvxDgbb4byCm9NeoM6A2nsYUXgj5FjpQTNWkVkt-vRbpuffXCfBoNfpnr9Qe83-QR2BwT51h9mPz3T2_qeEr7e2CG_2_jYBdNBPnqpwRu1oAGC_kq3g9AFydo1XLGSwz9t3u3YIKblgq0q1K3zWyXJVsmvq3O4Jg-kGrVF47Zop-183Pby7bbB1Nz-LnHYRzhvLBxOhR2EMHs2aQfgXGenXS8OshdEXyiIXlWw2zZ-tW38oq391s79c0Pg_myxgFvOldYyNPrAl0uqKodyVlWvNxkne8EMbknR5qQ4Mun7T87S9uRUQ6D07OTanwrp-LmzrB23mnnbxcx7uvYO_IyWup1Q7g9Jnvly1iiSfzxy__8J1t5xwfob4mjP85PiNCjSIMUn5NSP0zAI_SRITzanJfHjbB4WUYLDKMmKbB4HBKc5Ibj0Ii86oafIQ4GX-p7vBV6QzvwgzoMgIzmZhymZx07okRrTambcwcX6xFy5PI2jJIlPzK5Amq8EIsTII5hKzd_o4kScmqPArF1L7U4qldxqUVRV5HTyPS5wYq-_Dm0OergwRfZ7dyetqE4_fj_U4P3fAAAA__-YxxTn">