https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=56270
uint32_t GetOps() const { return ops.count + ops.sat.value; }
    
    bool CheckOpsLimit() const { return GetOps() <= MAX_OPS_PER_SCRIPT; }
    /** Return the maximum number of stack elements needed to satisfy this script non-malleably, including
     * the script push. */
    uint32_t GetStackSize() const { return ss.sat.value + 1; }
    
    bool CheckStackSize() const { return GetStackSize() - 1 <= MAX_STANDARD_P2WSH_STACK_ITEMS; }
    
    Type GetType() const { return typ; }
    
    const Node* FindInsaneSub() const {
        return TreeEval<const Node*>([](const Node& node, Span<const Node*> subs) -> const Node* {
            for (auto& sub: subs) if (sub) return sub;
            if (!node.IsSaneSubexpression()) return &node;
            return nullptr;
        });
    }
    
    
    template<typename F>
    bool IsSatisfiable(F fn) const