super(
new SyncPipeExpressionGraph(),
// in order to capture out degree in sub-graph, we need to capture at least two successors
new ExpressionGraph()
.arcs( SHARED_GROUP, or( new FlowElementExpression( HashJoin.class ), new FlowElementExpression( Group.class ), new FlowElementExpression( Tap.class ) ) )
.arcs( SHARED_GROUP, or( new FlowElementExpression( HashJoin.class ), new FlowElementExpression( Group.class ), new FlowElementExpression( Tap.class ) ) ),
// sub-graph to match has out degree captured above
new ExpressionGraph()
.arcs(
new FlowElementExpression( ElementCapture.Primary, Pipe.class, TypeExpression.Topo.SplitOnly )
)
);
}