def get_abi_tag():<EOL>
soabi = get_config_var('<STR_LIT>')<EOL>impl = get_abbr_impl()<EOL>if not soabi and impl in {'<STR_LIT>', '<STR_LIT>'} and hasattr(sys, '<STR_LIT>'):<EOL><INDENT>d = '<STR_LIT>'<EOL>m = '<STR_LIT>'<EOL>u = '<STR_LIT>'<EOL>if get_flag('<STR_LIT>',<EOL>lambda: hasattr(sys, '<STR_LIT>'),<EOL>warn=(impl == '<STR_LIT>')):<EOL><INDENT>d = '<STR_LIT:d>'<EOL><DEDENT>if get_flag('<STR_LIT>',<EOL>lambda: impl == '<STR_LIT>',<EOL>warn=(impl == '<STR_LIT>')):<EOL><INDENT>m = '<STR_LIT:m>'<EOL><DEDENT>if get_flag('<STR_LIT>',<EOL>lambda: sys.maxunicode == <NUM_LIT>,<EOL>expected=<NUM_LIT:4>,<EOL>warn=(impl == '<STR_LIT>' and<EOL>sys.version_info < (<NUM_LIT:3>, <NUM_LIT:3>)))and sys.version_info < (<NUM_LIT:3>, <NUM_LIT:3>):<EOL><INDENT>u = '<STR_LIT:u>'<EOL><DEDENT>abi = '<STR_LIT>' % (impl, get_impl_ver(), d, m, u)<EOL><DEDENT>elif soabi and soabi.startswith('<STR_LIT>'):<EOL><INDENT>abi = '<STR_LIT>' + soabi.split('<STR_LIT:->')[<NUM_LIT:1>]<EOL><DEDENT>elif soabi:<EOL><INDENT>abi = soabi.replace('<STR_LIT:.>', '<STR_LIT:_>').replace('<STR_LIT:->', '<STR_LIT:_>')<EOL><DEDENT>else:<EOL><INDENT>abi = None<EOL><DEDENT>return abi<EOL>
Return the ABI tag based on SOABI (if available) or emulate SOABI
    (CPython 2, PyPy).