'Provides'

def process_data(self, iterator, start_val=0, max_vals=None, **kwargs):

    filter_cols = loads(kwargs.get('filter_cols', '[]'))
    no_detail = ('no_detail' in kwargs)
    rval = []
    message = None
    for (count, line) in enumerate(iterator):
        if (count < start_val):
            continue
        if (max_vals and ((count - start_val) >= max_vals)):
            message = (self.error_max_vals % (max_vals, 'features'))
            break
        feature = line.split()
        length = len(feature)
        payload = [hash(line), int(feature[1]), int(feature[2])]
        if no_detail:
            rval.append(payload)
            continue
        if (length >= 4):
            payload.append(feature[3])
        if (length >= 6):
            payload.append(feature[5])
        if (length >= 8):
            payload.append(int(feature[6]))
            payload.append(int(feature[7]))
        if (length >= 12):
            block_sizes = [int(n) for n in feature[10].split(',') if (n != '')]
            block_starts = [int(n) for n in feature[11].split(',') if (n != '')]
            blocks = zip(block_sizes, block_starts)
            payload.append([((int(feature[1]) + block[1]), ((int(feature[1]) + block[1]) + block[0])) for block in blocks])
        if ((length >= 5) and filter_cols and (filter_cols[0] == 'Score')):
            payload.extend([None for i in range((8 - len(payload)))])
            try:
                payload.append(float(feature[4]))
            except:
                payload.append(feature[4])
        rval.append(payload)
    return {'data': rval, 'dataset_type': self.dataset_type, 'message': message}
