(module
  (import "wasi_snapshot_preview1" "fd_write" (func $fd_write (param i32 i32 i32 i32) (result i32)))
  (import "wasi_snapshot_preview1" "proc_exit" (func $proc_exit (param i32)))
  (data (i32.const 48) "\04\00\00\00true")
  (data (i32.const 56) "\05\00\00\00false")
  (data (i32.const 64) "\01\00\00\00-")
  (func $alloc (param $n i32) (result i32) (local $p i32) (local $limit i32)
    (local.set $p (global.get $hp))
    (global.set $hp (i32.and (i32.add (i32.add (local.get $p) (local.get $n)) (i32.const 7)) (i32.const -8)))
    (local.set $limit (i32.mul (memory.size) (i32.const 65536)))
    (if (i32.gt_u (global.get $hp) (local.get $limit))
      (then
        (if (i32.eq (memory.grow (i32.add (i32.shr_u (i32.sub (global.get $hp) (local.get $limit)) (i32.const 16)) (i32.const 1))) (i32.const -1))
          (then (unreachable)))))
    (local.get $p))
  (func $str_eq (param $a i32) (param $b i32) (result i32) (local $n i32) (local $i i32)
    (local.set $n (i32.load (local.get $a)))
    (if (i32.ne (local.get $n) (i32.load (local.get $b))) (then (return (i32.const 0))))
    (block $done
      (loop $next
        (br_if $done (i32.ge_u (local.get $i) (local.get $n)))
        (if (i32.ne (i32.load8_u (i32.add (i32.add (local.get $a) (i32.const 4)) (local.get $i)))
                    (i32.load8_u (i32.add (i32.add (local.get $b) (i32.const 4)) (local.get $i))))
          (then (return (i32.const 0))))
        (local.set $i (i32.add (local.get $i) (i32.const 1)))
        (br $next)))
    (i32.const 1))
  (memory (export "memory") 2)
  (global $hp (mut i32) (i32.const 88))
  (type $fun0 (func (param i32 i32) (result i32 i32 i32)))
  (table $closures 1 funcref)
  (elem (table $closures) (i32.const 0) func $f_c0)
  (func $f_c0 (param $env i32) (param $v3 i32) (result i32 i32 i32)
    (local $v0 i32)
    (local $v1 i32)
    (local $v2 i32)
    (local $v4 i32)
    (local $v5 i32)
    (local.set $v0 (i32.load offset=8 (local.get $env)))
    (local.set $v1 (i32.load offset=16 (local.get $env)))
    (local.set $v2 (i32.load offset=24 (local.get $env)))
    (local.set $v4 (i32.eq (local.get $v3) (i32.const 0)))
    (if (local.get $v4)
        (then
            (local.set $v5 (i32.const 80))
            (return (i32.const 0) (local.get $v5) (i32.const 0))
        )
        (else
            (return (local.get $v0) (local.get $v1) (local.get $v2))
        ))
    (unreachable)
  )
  (func $spiralMain (result i32)
    (local $v0 i32)
    (local $v1 i32)
    (local $v2 i32)
    (local $v3 i32)
    (local $t4 i32)
    (local $v4 i32)
    (local $v5 i32)
    (local $v6 i32)
    (local $v7 i32)
    (local $v9 i32)
    (local $v8 i32)
    (local $v10 i32)
    (local.set $v0 (i32.const 7))
    (local.set $v1 (i32.const 72))
    (local.set $v2 (i32.const 1))
    (local.set $t4 (call $alloc (i32.const 32)))
    (i32.store (local.get $t4) (i32.const 0))
    (i32.store offset=8 (local.get $t4) (local.get $v0))
    (i32.store offset=16 (local.get $t4) (local.get $v1))
    (i32.store offset=24 (local.get $t4) (local.get $v2))
    (local.set $v3 (local.get $t4))
    (call_indirect (type $fun0) (local.get $v3) (i32.const 1) (i32.load (local.get $v3)))
    (local.set $v6)
    (local.set $v5)
    (local.set $v4)
    (local.set $v7 (i32.eq (local.get $v4) (i32.const 7)))
    (if (local.get $v7)
        (then
            (local.set $v8 (call $str_eq (local.get $v5) (i32.const 72)))
            (local.set $v9 (local.get $v8))
        )
        (else
            (local.set $v9 (i32.const 0))
        ))
    (local.set $v10 (i32.and (local.get $v9) (local.get $v6)))
    (if (local.get $v10)
        (then
            (return (i32.const 0))
        )
        (else
            (return (i32.const 1))
        ))
    (unreachable)
  )
  (data (i32.const 72) "\02\00\00\00hi")
  (data (i32.const 80) "\02\00\00\00no")
  (func $_start (export "_start")
    (call $proc_exit (call $spiralMain)))
)
