abstract the input source