Convert a text offset to a real offset
        see https://solidity.readthedocs.io/en/develop/miscellaneous.html#source-mappings
        Returns:
            (dict): {'start':0, 'length':0, 'filename': 'file.sol'}

def _convert_source_mapping(offset, slither):
        '''
        Convert a text offset to a real offset
        see https://solidity.readthedocs.io/en/develop/miscellaneous.html#source-mappings
        Returns:
            (dict): {'start':0, 'length':0, 'filename': 'file.sol'}
        '''
        sourceUnits = slither.source_units

        position = re.findall('([0-9]*):([0-9]*):([-]?[0-9]*)', offset)
        if len(position) != 1:
            return {}

        s, l, f = position[0]
        s = int(s)
        l = int(l)
        f = int(f)

        if f not in sourceUnits:
            return {'start':s, 'length':l}
        filename_used = sourceUnits[f]
        filename_absolute = None
        filename_relative = None
        filename_short = None

        lines = []

        # If possible, convert the filename to its absolute/relative version
        if slither.crytic_compile:
            filenames = slither.crytic_compile.filename_lookup(filename_used)
            filename_absolute = filenames.absolute
            filename_relative = filenames.relative
            filename_short = filenames.short

            if filename_absolute in slither.source_code:
                filename = filename_absolute
            elif filename_relative in slither.source_code:
                filename = filename_relative
            elif filename_short in slither.source_code:
                filename = filename_short
            else:#
                filename = filename_used.used
        else:
            filename = filename_used

        if filename in slither.source_code:
            source_code = slither.source_code[filename]
            (lines, starting_column, ending_column) = SourceMapping._compute_line(source_code,
                                                                                  s,
                                                                                  l)
        else:
            (lines, starting_column, ending_column) = ([], None, None)


        return {'start':s,
                'length':l,
                'filename_used': filename_used,
                'filename_relative': filename_relative,
                'filename_absolute': filename_absolute,
                'filename_short': filename_short,
                'lines' : lines,
                'starting_column': starting_column,
                'ending_column': ending_column
                }