1*cda5da8dSAndroid Build Coastguard Worker# This module is used to map the old Python 2 names to the new names used in 2*cda5da8dSAndroid Build Coastguard Worker# Python 3 for the pickle module. This needed to make pickle streams 3*cda5da8dSAndroid Build Coastguard Worker# generated with Python 2 loadable by Python 3. 4*cda5da8dSAndroid Build Coastguard Worker 5*cda5da8dSAndroid Build Coastguard Worker# This is a copy of lib2to3.fixes.fix_imports.MAPPING. We cannot import 6*cda5da8dSAndroid Build Coastguard Worker# lib2to3 and use the mapping defined there, because lib2to3 uses pickle. 7*cda5da8dSAndroid Build Coastguard Worker# Thus, this could cause the module to be imported recursively. 8*cda5da8dSAndroid Build Coastguard WorkerIMPORT_MAPPING = { 9*cda5da8dSAndroid Build Coastguard Worker '__builtin__' : 'builtins', 10*cda5da8dSAndroid Build Coastguard Worker 'copy_reg': 'copyreg', 11*cda5da8dSAndroid Build Coastguard Worker 'Queue': 'queue', 12*cda5da8dSAndroid Build Coastguard Worker 'SocketServer': 'socketserver', 13*cda5da8dSAndroid Build Coastguard Worker 'ConfigParser': 'configparser', 14*cda5da8dSAndroid Build Coastguard Worker 'repr': 'reprlib', 15*cda5da8dSAndroid Build Coastguard Worker 'tkFileDialog': 'tkinter.filedialog', 16*cda5da8dSAndroid Build Coastguard Worker 'tkSimpleDialog': 'tkinter.simpledialog', 17*cda5da8dSAndroid Build Coastguard Worker 'tkColorChooser': 'tkinter.colorchooser', 18*cda5da8dSAndroid Build Coastguard Worker 'tkCommonDialog': 'tkinter.commondialog', 19*cda5da8dSAndroid Build Coastguard Worker 'Dialog': 'tkinter.dialog', 20*cda5da8dSAndroid Build Coastguard Worker 'Tkdnd': 'tkinter.dnd', 21*cda5da8dSAndroid Build Coastguard Worker 'tkFont': 'tkinter.font', 22*cda5da8dSAndroid Build Coastguard Worker 'tkMessageBox': 'tkinter.messagebox', 23*cda5da8dSAndroid Build Coastguard Worker 'ScrolledText': 'tkinter.scrolledtext', 24*cda5da8dSAndroid Build Coastguard Worker 'Tkconstants': 'tkinter.constants', 25*cda5da8dSAndroid Build Coastguard Worker 'Tix': 'tkinter.tix', 26*cda5da8dSAndroid Build Coastguard Worker 'ttk': 'tkinter.ttk', 27*cda5da8dSAndroid Build Coastguard Worker 'Tkinter': 'tkinter', 28*cda5da8dSAndroid Build Coastguard Worker 'markupbase': '_markupbase', 29*cda5da8dSAndroid Build Coastguard Worker '_winreg': 'winreg', 30*cda5da8dSAndroid Build Coastguard Worker 'thread': '_thread', 31*cda5da8dSAndroid Build Coastguard Worker 'dummy_thread': '_dummy_thread', 32*cda5da8dSAndroid Build Coastguard Worker 'dbhash': 'dbm.bsd', 33*cda5da8dSAndroid Build Coastguard Worker 'dumbdbm': 'dbm.dumb', 34*cda5da8dSAndroid Build Coastguard Worker 'dbm': 'dbm.ndbm', 35*cda5da8dSAndroid Build Coastguard Worker 'gdbm': 'dbm.gnu', 36*cda5da8dSAndroid Build Coastguard Worker 'xmlrpclib': 'xmlrpc.client', 37*cda5da8dSAndroid Build Coastguard Worker 'SimpleXMLRPCServer': 'xmlrpc.server', 38*cda5da8dSAndroid Build Coastguard Worker 'httplib': 'http.client', 39*cda5da8dSAndroid Build Coastguard Worker 'htmlentitydefs' : 'html.entities', 40*cda5da8dSAndroid Build Coastguard Worker 'HTMLParser' : 'html.parser', 41*cda5da8dSAndroid Build Coastguard Worker 'Cookie': 'http.cookies', 42*cda5da8dSAndroid Build Coastguard Worker 'cookielib': 'http.cookiejar', 43*cda5da8dSAndroid Build Coastguard Worker 'BaseHTTPServer': 'http.server', 44*cda5da8dSAndroid Build Coastguard Worker 'test.test_support': 'test.support', 45*cda5da8dSAndroid Build Coastguard Worker 'commands': 'subprocess', 46*cda5da8dSAndroid Build Coastguard Worker 'urlparse' : 'urllib.parse', 47*cda5da8dSAndroid Build Coastguard Worker 'robotparser' : 'urllib.robotparser', 48*cda5da8dSAndroid Build Coastguard Worker 'urllib2': 'urllib.request', 49*cda5da8dSAndroid Build Coastguard Worker 'anydbm': 'dbm', 50*cda5da8dSAndroid Build Coastguard Worker '_abcoll' : 'collections.abc', 51*cda5da8dSAndroid Build Coastguard Worker} 52*cda5da8dSAndroid Build Coastguard Worker 53*cda5da8dSAndroid Build Coastguard Worker 54*cda5da8dSAndroid Build Coastguard Worker# This contains rename rules that are easy to handle. We ignore the more 55*cda5da8dSAndroid Build Coastguard Worker# complex stuff (e.g. mapping the names in the urllib and types modules). 56*cda5da8dSAndroid Build Coastguard Worker# These rules should be run before import names are fixed. 57*cda5da8dSAndroid Build Coastguard WorkerNAME_MAPPING = { 58*cda5da8dSAndroid Build Coastguard Worker ('__builtin__', 'xrange'): ('builtins', 'range'), 59*cda5da8dSAndroid Build Coastguard Worker ('__builtin__', 'reduce'): ('functools', 'reduce'), 60*cda5da8dSAndroid Build Coastguard Worker ('__builtin__', 'intern'): ('sys', 'intern'), 61*cda5da8dSAndroid Build Coastguard Worker ('__builtin__', 'unichr'): ('builtins', 'chr'), 62*cda5da8dSAndroid Build Coastguard Worker ('__builtin__', 'unicode'): ('builtins', 'str'), 63*cda5da8dSAndroid Build Coastguard Worker ('__builtin__', 'long'): ('builtins', 'int'), 64*cda5da8dSAndroid Build Coastguard Worker ('itertools', 'izip'): ('builtins', 'zip'), 65*cda5da8dSAndroid Build Coastguard Worker ('itertools', 'imap'): ('builtins', 'map'), 66*cda5da8dSAndroid Build Coastguard Worker ('itertools', 'ifilter'): ('builtins', 'filter'), 67*cda5da8dSAndroid Build Coastguard Worker ('itertools', 'ifilterfalse'): ('itertools', 'filterfalse'), 68*cda5da8dSAndroid Build Coastguard Worker ('itertools', 'izip_longest'): ('itertools', 'zip_longest'), 69*cda5da8dSAndroid Build Coastguard Worker ('UserDict', 'IterableUserDict'): ('collections', 'UserDict'), 70*cda5da8dSAndroid Build Coastguard Worker ('UserList', 'UserList'): ('collections', 'UserList'), 71*cda5da8dSAndroid Build Coastguard Worker ('UserString', 'UserString'): ('collections', 'UserString'), 72*cda5da8dSAndroid Build Coastguard Worker ('whichdb', 'whichdb'): ('dbm', 'whichdb'), 73*cda5da8dSAndroid Build Coastguard Worker ('_socket', 'fromfd'): ('socket', 'fromfd'), 74*cda5da8dSAndroid Build Coastguard Worker ('_multiprocessing', 'Connection'): ('multiprocessing.connection', 'Connection'), 75*cda5da8dSAndroid Build Coastguard Worker ('multiprocessing.process', 'Process'): ('multiprocessing.context', 'Process'), 76*cda5da8dSAndroid Build Coastguard Worker ('multiprocessing.forking', 'Popen'): ('multiprocessing.popen_fork', 'Popen'), 77*cda5da8dSAndroid Build Coastguard Worker ('urllib', 'ContentTooShortError'): ('urllib.error', 'ContentTooShortError'), 78*cda5da8dSAndroid Build Coastguard Worker ('urllib', 'getproxies'): ('urllib.request', 'getproxies'), 79*cda5da8dSAndroid Build Coastguard Worker ('urllib', 'pathname2url'): ('urllib.request', 'pathname2url'), 80*cda5da8dSAndroid Build Coastguard Worker ('urllib', 'quote_plus'): ('urllib.parse', 'quote_plus'), 81*cda5da8dSAndroid Build Coastguard Worker ('urllib', 'quote'): ('urllib.parse', 'quote'), 82*cda5da8dSAndroid Build Coastguard Worker ('urllib', 'unquote_plus'): ('urllib.parse', 'unquote_plus'), 83*cda5da8dSAndroid Build Coastguard Worker ('urllib', 'unquote'): ('urllib.parse', 'unquote'), 84*cda5da8dSAndroid Build Coastguard Worker ('urllib', 'url2pathname'): ('urllib.request', 'url2pathname'), 85*cda5da8dSAndroid Build Coastguard Worker ('urllib', 'urlcleanup'): ('urllib.request', 'urlcleanup'), 86*cda5da8dSAndroid Build Coastguard Worker ('urllib', 'urlencode'): ('urllib.parse', 'urlencode'), 87*cda5da8dSAndroid Build Coastguard Worker ('urllib', 'urlopen'): ('urllib.request', 'urlopen'), 88*cda5da8dSAndroid Build Coastguard Worker ('urllib', 'urlretrieve'): ('urllib.request', 'urlretrieve'), 89*cda5da8dSAndroid Build Coastguard Worker ('urllib2', 'HTTPError'): ('urllib.error', 'HTTPError'), 90*cda5da8dSAndroid Build Coastguard Worker ('urllib2', 'URLError'): ('urllib.error', 'URLError'), 91*cda5da8dSAndroid Build Coastguard Worker} 92*cda5da8dSAndroid Build Coastguard Worker 93*cda5da8dSAndroid Build Coastguard WorkerPYTHON2_EXCEPTIONS = ( 94*cda5da8dSAndroid Build Coastguard Worker "ArithmeticError", 95*cda5da8dSAndroid Build Coastguard Worker "AssertionError", 96*cda5da8dSAndroid Build Coastguard Worker "AttributeError", 97*cda5da8dSAndroid Build Coastguard Worker "BaseException", 98*cda5da8dSAndroid Build Coastguard Worker "BufferError", 99*cda5da8dSAndroid Build Coastguard Worker "BytesWarning", 100*cda5da8dSAndroid Build Coastguard Worker "DeprecationWarning", 101*cda5da8dSAndroid Build Coastguard Worker "EOFError", 102*cda5da8dSAndroid Build Coastguard Worker "EnvironmentError", 103*cda5da8dSAndroid Build Coastguard Worker "Exception", 104*cda5da8dSAndroid Build Coastguard Worker "FloatingPointError", 105*cda5da8dSAndroid Build Coastguard Worker "FutureWarning", 106*cda5da8dSAndroid Build Coastguard Worker "GeneratorExit", 107*cda5da8dSAndroid Build Coastguard Worker "IOError", 108*cda5da8dSAndroid Build Coastguard Worker "ImportError", 109*cda5da8dSAndroid Build Coastguard Worker "ImportWarning", 110*cda5da8dSAndroid Build Coastguard Worker "IndentationError", 111*cda5da8dSAndroid Build Coastguard Worker "IndexError", 112*cda5da8dSAndroid Build Coastguard Worker "KeyError", 113*cda5da8dSAndroid Build Coastguard Worker "KeyboardInterrupt", 114*cda5da8dSAndroid Build Coastguard Worker "LookupError", 115*cda5da8dSAndroid Build Coastguard Worker "MemoryError", 116*cda5da8dSAndroid Build Coastguard Worker "NameError", 117*cda5da8dSAndroid Build Coastguard Worker "NotImplementedError", 118*cda5da8dSAndroid Build Coastguard Worker "OSError", 119*cda5da8dSAndroid Build Coastguard Worker "OverflowError", 120*cda5da8dSAndroid Build Coastguard Worker "PendingDeprecationWarning", 121*cda5da8dSAndroid Build Coastguard Worker "ReferenceError", 122*cda5da8dSAndroid Build Coastguard Worker "RuntimeError", 123*cda5da8dSAndroid Build Coastguard Worker "RuntimeWarning", 124*cda5da8dSAndroid Build Coastguard Worker # StandardError is gone in Python 3, so we map it to Exception 125*cda5da8dSAndroid Build Coastguard Worker "StopIteration", 126*cda5da8dSAndroid Build Coastguard Worker "SyntaxError", 127*cda5da8dSAndroid Build Coastguard Worker "SyntaxWarning", 128*cda5da8dSAndroid Build Coastguard Worker "SystemError", 129*cda5da8dSAndroid Build Coastguard Worker "SystemExit", 130*cda5da8dSAndroid Build Coastguard Worker "TabError", 131*cda5da8dSAndroid Build Coastguard Worker "TypeError", 132*cda5da8dSAndroid Build Coastguard Worker "UnboundLocalError", 133*cda5da8dSAndroid Build Coastguard Worker "UnicodeDecodeError", 134*cda5da8dSAndroid Build Coastguard Worker "UnicodeEncodeError", 135*cda5da8dSAndroid Build Coastguard Worker "UnicodeError", 136*cda5da8dSAndroid Build Coastguard Worker "UnicodeTranslateError", 137*cda5da8dSAndroid Build Coastguard Worker "UnicodeWarning", 138*cda5da8dSAndroid Build Coastguard Worker "UserWarning", 139*cda5da8dSAndroid Build Coastguard Worker "ValueError", 140*cda5da8dSAndroid Build Coastguard Worker "Warning", 141*cda5da8dSAndroid Build Coastguard Worker "ZeroDivisionError", 142*cda5da8dSAndroid Build Coastguard Worker) 143*cda5da8dSAndroid Build Coastguard Worker 144*cda5da8dSAndroid Build Coastguard Workertry: 145*cda5da8dSAndroid Build Coastguard Worker WindowsError 146*cda5da8dSAndroid Build Coastguard Workerexcept NameError: 147*cda5da8dSAndroid Build Coastguard Worker pass 148*cda5da8dSAndroid Build Coastguard Workerelse: 149*cda5da8dSAndroid Build Coastguard Worker PYTHON2_EXCEPTIONS += ("WindowsError",) 150*cda5da8dSAndroid Build Coastguard Worker 151*cda5da8dSAndroid Build Coastguard Workerfor excname in PYTHON2_EXCEPTIONS: 152*cda5da8dSAndroid Build Coastguard Worker NAME_MAPPING[("exceptions", excname)] = ("builtins", excname) 153*cda5da8dSAndroid Build Coastguard Worker 154*cda5da8dSAndroid Build Coastguard WorkerMULTIPROCESSING_EXCEPTIONS = ( 155*cda5da8dSAndroid Build Coastguard Worker 'AuthenticationError', 156*cda5da8dSAndroid Build Coastguard Worker 'BufferTooShort', 157*cda5da8dSAndroid Build Coastguard Worker 'ProcessError', 158*cda5da8dSAndroid Build Coastguard Worker 'TimeoutError', 159*cda5da8dSAndroid Build Coastguard Worker) 160*cda5da8dSAndroid Build Coastguard Worker 161*cda5da8dSAndroid Build Coastguard Workerfor excname in MULTIPROCESSING_EXCEPTIONS: 162*cda5da8dSAndroid Build Coastguard Worker NAME_MAPPING[("multiprocessing", excname)] = ("multiprocessing.context", excname) 163*cda5da8dSAndroid Build Coastguard Worker 164*cda5da8dSAndroid Build Coastguard Worker# Same, but for 3.x to 2.x 165*cda5da8dSAndroid Build Coastguard WorkerREVERSE_IMPORT_MAPPING = dict((v, k) for (k, v) in IMPORT_MAPPING.items()) 166*cda5da8dSAndroid Build Coastguard Workerassert len(REVERSE_IMPORT_MAPPING) == len(IMPORT_MAPPING) 167*cda5da8dSAndroid Build Coastguard WorkerREVERSE_NAME_MAPPING = dict((v, k) for (k, v) in NAME_MAPPING.items()) 168*cda5da8dSAndroid Build Coastguard Workerassert len(REVERSE_NAME_MAPPING) == len(NAME_MAPPING) 169*cda5da8dSAndroid Build Coastguard Worker 170*cda5da8dSAndroid Build Coastguard Worker# Non-mutual mappings. 171*cda5da8dSAndroid Build Coastguard Worker 172*cda5da8dSAndroid Build Coastguard WorkerIMPORT_MAPPING.update({ 173*cda5da8dSAndroid Build Coastguard Worker 'cPickle': 'pickle', 174*cda5da8dSAndroid Build Coastguard Worker '_elementtree': 'xml.etree.ElementTree', 175*cda5da8dSAndroid Build Coastguard Worker 'FileDialog': 'tkinter.filedialog', 176*cda5da8dSAndroid Build Coastguard Worker 'SimpleDialog': 'tkinter.simpledialog', 177*cda5da8dSAndroid Build Coastguard Worker 'DocXMLRPCServer': 'xmlrpc.server', 178*cda5da8dSAndroid Build Coastguard Worker 'SimpleHTTPServer': 'http.server', 179*cda5da8dSAndroid Build Coastguard Worker 'CGIHTTPServer': 'http.server', 180*cda5da8dSAndroid Build Coastguard Worker # For compatibility with broken pickles saved in old Python 3 versions 181*cda5da8dSAndroid Build Coastguard Worker 'UserDict': 'collections', 182*cda5da8dSAndroid Build Coastguard Worker 'UserList': 'collections', 183*cda5da8dSAndroid Build Coastguard Worker 'UserString': 'collections', 184*cda5da8dSAndroid Build Coastguard Worker 'whichdb': 'dbm', 185*cda5da8dSAndroid Build Coastguard Worker 'StringIO': 'io', 186*cda5da8dSAndroid Build Coastguard Worker 'cStringIO': 'io', 187*cda5da8dSAndroid Build Coastguard Worker}) 188*cda5da8dSAndroid Build Coastguard Worker 189*cda5da8dSAndroid Build Coastguard WorkerREVERSE_IMPORT_MAPPING.update({ 190*cda5da8dSAndroid Build Coastguard Worker '_bz2': 'bz2', 191*cda5da8dSAndroid Build Coastguard Worker '_dbm': 'dbm', 192*cda5da8dSAndroid Build Coastguard Worker '_functools': 'functools', 193*cda5da8dSAndroid Build Coastguard Worker '_gdbm': 'gdbm', 194*cda5da8dSAndroid Build Coastguard Worker '_pickle': 'pickle', 195*cda5da8dSAndroid Build Coastguard Worker}) 196*cda5da8dSAndroid Build Coastguard Worker 197*cda5da8dSAndroid Build Coastguard WorkerNAME_MAPPING.update({ 198*cda5da8dSAndroid Build Coastguard Worker ('__builtin__', 'basestring'): ('builtins', 'str'), 199*cda5da8dSAndroid Build Coastguard Worker ('exceptions', 'StandardError'): ('builtins', 'Exception'), 200*cda5da8dSAndroid Build Coastguard Worker ('UserDict', 'UserDict'): ('collections', 'UserDict'), 201*cda5da8dSAndroid Build Coastguard Worker ('socket', '_socketobject'): ('socket', 'SocketType'), 202*cda5da8dSAndroid Build Coastguard Worker}) 203*cda5da8dSAndroid Build Coastguard Worker 204*cda5da8dSAndroid Build Coastguard WorkerREVERSE_NAME_MAPPING.update({ 205*cda5da8dSAndroid Build Coastguard Worker ('_functools', 'reduce'): ('__builtin__', 'reduce'), 206*cda5da8dSAndroid Build Coastguard Worker ('tkinter.filedialog', 'FileDialog'): ('FileDialog', 'FileDialog'), 207*cda5da8dSAndroid Build Coastguard Worker ('tkinter.filedialog', 'LoadFileDialog'): ('FileDialog', 'LoadFileDialog'), 208*cda5da8dSAndroid Build Coastguard Worker ('tkinter.filedialog', 'SaveFileDialog'): ('FileDialog', 'SaveFileDialog'), 209*cda5da8dSAndroid Build Coastguard Worker ('tkinter.simpledialog', 'SimpleDialog'): ('SimpleDialog', 'SimpleDialog'), 210*cda5da8dSAndroid Build Coastguard Worker ('xmlrpc.server', 'ServerHTMLDoc'): ('DocXMLRPCServer', 'ServerHTMLDoc'), 211*cda5da8dSAndroid Build Coastguard Worker ('xmlrpc.server', 'XMLRPCDocGenerator'): 212*cda5da8dSAndroid Build Coastguard Worker ('DocXMLRPCServer', 'XMLRPCDocGenerator'), 213*cda5da8dSAndroid Build Coastguard Worker ('xmlrpc.server', 'DocXMLRPCRequestHandler'): 214*cda5da8dSAndroid Build Coastguard Worker ('DocXMLRPCServer', 'DocXMLRPCRequestHandler'), 215*cda5da8dSAndroid Build Coastguard Worker ('xmlrpc.server', 'DocXMLRPCServer'): 216*cda5da8dSAndroid Build Coastguard Worker ('DocXMLRPCServer', 'DocXMLRPCServer'), 217*cda5da8dSAndroid Build Coastguard Worker ('xmlrpc.server', 'DocCGIXMLRPCRequestHandler'): 218*cda5da8dSAndroid Build Coastguard Worker ('DocXMLRPCServer', 'DocCGIXMLRPCRequestHandler'), 219*cda5da8dSAndroid Build Coastguard Worker ('http.server', 'SimpleHTTPRequestHandler'): 220*cda5da8dSAndroid Build Coastguard Worker ('SimpleHTTPServer', 'SimpleHTTPRequestHandler'), 221*cda5da8dSAndroid Build Coastguard Worker ('http.server', 'CGIHTTPRequestHandler'): 222*cda5da8dSAndroid Build Coastguard Worker ('CGIHTTPServer', 'CGIHTTPRequestHandler'), 223*cda5da8dSAndroid Build Coastguard Worker ('_socket', 'socket'): ('socket', '_socketobject'), 224*cda5da8dSAndroid Build Coastguard Worker}) 225*cda5da8dSAndroid Build Coastguard Worker 226*cda5da8dSAndroid Build Coastguard WorkerPYTHON3_OSERROR_EXCEPTIONS = ( 227*cda5da8dSAndroid Build Coastguard Worker 'BrokenPipeError', 228*cda5da8dSAndroid Build Coastguard Worker 'ChildProcessError', 229*cda5da8dSAndroid Build Coastguard Worker 'ConnectionAbortedError', 230*cda5da8dSAndroid Build Coastguard Worker 'ConnectionError', 231*cda5da8dSAndroid Build Coastguard Worker 'ConnectionRefusedError', 232*cda5da8dSAndroid Build Coastguard Worker 'ConnectionResetError', 233*cda5da8dSAndroid Build Coastguard Worker 'FileExistsError', 234*cda5da8dSAndroid Build Coastguard Worker 'FileNotFoundError', 235*cda5da8dSAndroid Build Coastguard Worker 'InterruptedError', 236*cda5da8dSAndroid Build Coastguard Worker 'IsADirectoryError', 237*cda5da8dSAndroid Build Coastguard Worker 'NotADirectoryError', 238*cda5da8dSAndroid Build Coastguard Worker 'PermissionError', 239*cda5da8dSAndroid Build Coastguard Worker 'ProcessLookupError', 240*cda5da8dSAndroid Build Coastguard Worker 'TimeoutError', 241*cda5da8dSAndroid Build Coastguard Worker) 242*cda5da8dSAndroid Build Coastguard Worker 243*cda5da8dSAndroid Build Coastguard Workerfor excname in PYTHON3_OSERROR_EXCEPTIONS: 244*cda5da8dSAndroid Build Coastguard Worker REVERSE_NAME_MAPPING[('builtins', excname)] = ('exceptions', 'OSError') 245*cda5da8dSAndroid Build Coastguard Worker 246*cda5da8dSAndroid Build Coastguard WorkerPYTHON3_IMPORTERROR_EXCEPTIONS = ( 247*cda5da8dSAndroid Build Coastguard Worker 'ModuleNotFoundError', 248*cda5da8dSAndroid Build Coastguard Worker) 249*cda5da8dSAndroid Build Coastguard Worker 250*cda5da8dSAndroid Build Coastguard Workerfor excname in PYTHON3_IMPORTERROR_EXCEPTIONS: 251*cda5da8dSAndroid Build Coastguard Worker REVERSE_NAME_MAPPING[('builtins', excname)] = ('exceptions', 'ImportError') 252*cda5da8dSAndroid Build Coastguard Workerdel excname 253