'use strict'; 
 | 
var TO_STRING_TAG_SUPPORT = require('../internals/to-string-tag-support'); 
 | 
var isCallable = require('../internals/is-callable'); 
 | 
var classofRaw = require('../internals/classof-raw'); 
 | 
var wellKnownSymbol = require('../internals/well-known-symbol'); 
 | 
  
 | 
var TO_STRING_TAG = wellKnownSymbol('toStringTag'); 
 | 
var $Object = Object; 
 | 
  
 | 
// ES3 wrong here 
 | 
var CORRECT_ARGUMENTS = classofRaw(function () { return arguments; }()) === 'Arguments'; 
 | 
  
 | 
// fallback for IE11 Script Access Denied error 
 | 
var tryGet = function (it, key) { 
 | 
  try { 
 | 
    return it[key]; 
 | 
  } catch (error) { /* empty */ } 
 | 
}; 
 | 
  
 | 
// getting tag from ES6+ `Object.prototype.toString` 
 | 
module.exports = TO_STRING_TAG_SUPPORT ? classofRaw : function (it) { 
 | 
  var O, tag, result; 
 | 
  return it === undefined ? 'Undefined' : it === null ? 'Null' 
 | 
    // @@toStringTag case 
 | 
    : typeof (tag = tryGet(O = $Object(it), TO_STRING_TAG)) == 'string' ? tag 
 | 
    // builtinTag case 
 | 
    : CORRECT_ARGUMENTS ? classofRaw(O) 
 | 
    // ES3 arguments fallback 
 | 
    : (result = classofRaw(O)) === 'Object' && isCallable(O.callee) ? 'Arguments' : result; 
 | 
}; 
 |