add memoized decorator