'use strict'; 
 | 
/* global ActiveXObject -- old IE, WSH */ 
 | 
var anObject = require('../internals/an-object'); 
 | 
var definePropertiesModule = require('../internals/object-define-properties'); 
 | 
var enumBugKeys = require('../internals/enum-bug-keys'); 
 | 
var hiddenKeys = require('../internals/hidden-keys'); 
 | 
var html = require('../internals/html'); 
 | 
var documentCreateElement = require('../internals/document-create-element'); 
 | 
var sharedKey = require('../internals/shared-key'); 
 | 
  
 | 
var GT = '>'; 
 | 
var LT = '<'; 
 | 
var PROTOTYPE = 'prototype'; 
 | 
var SCRIPT = 'script'; 
 | 
var IE_PROTO = sharedKey('IE_PROTO'); 
 | 
  
 | 
var EmptyConstructor = function () { /* empty */ }; 
 | 
  
 | 
var scriptTag = function (content) { 
 | 
  return LT + SCRIPT + GT + content + LT + '/' + SCRIPT + GT; 
 | 
}; 
 | 
  
 | 
// Create object with fake `null` prototype: use ActiveX Object with cleared prototype 
 | 
var NullProtoObjectViaActiveX = function (activeXDocument) { 
 | 
  activeXDocument.write(scriptTag('')); 
 | 
  activeXDocument.close(); 
 | 
  var temp = activeXDocument.parentWindow.Object; 
 | 
  // eslint-disable-next-line no-useless-assignment -- avoid memory leak 
 | 
  activeXDocument = null; 
 | 
  return temp; 
 | 
}; 
 | 
  
 | 
// Create object with fake `null` prototype: use iframe Object with cleared prototype 
 | 
var NullProtoObjectViaIFrame = function () { 
 | 
  // Thrash, waste and sodomy: IE GC bug 
 | 
  var iframe = documentCreateElement('iframe'); 
 | 
  var JS = 'java' + SCRIPT + ':'; 
 | 
  var iframeDocument; 
 | 
  iframe.style.display = 'none'; 
 | 
  html.appendChild(iframe); 
 | 
  // https://github.com/zloirock/core-js/issues/475 
 | 
  iframe.src = String(JS); 
 | 
  iframeDocument = iframe.contentWindow.document; 
 | 
  iframeDocument.open(); 
 | 
  iframeDocument.write(scriptTag('document.F=Object')); 
 | 
  iframeDocument.close(); 
 | 
  return iframeDocument.F; 
 | 
}; 
 | 
  
 | 
// Check for document.domain and active x support 
 | 
// No need to use active x approach when document.domain is not set 
 | 
// see https://github.com/es-shims/es5-shim/issues/150 
 | 
// variation of https://github.com/kitcambridge/es5-shim/commit/4f738ac066346 
 | 
// avoid IE GC bug 
 | 
var activeXDocument; 
 | 
var NullProtoObject = function () { 
 | 
  try { 
 | 
    activeXDocument = new ActiveXObject('htmlfile'); 
 | 
  } catch (error) { /* ignore */ } 
 | 
  NullProtoObject = typeof document != 'undefined' 
 | 
    ? document.domain && activeXDocument 
 | 
      ? NullProtoObjectViaActiveX(activeXDocument) // old IE 
 | 
      : NullProtoObjectViaIFrame() 
 | 
    : NullProtoObjectViaActiveX(activeXDocument); // WSH 
 | 
  var length = enumBugKeys.length; 
 | 
  while (length--) delete NullProtoObject[PROTOTYPE][enumBugKeys[length]]; 
 | 
  return NullProtoObject(); 
 | 
}; 
 | 
  
 | 
hiddenKeys[IE_PROTO] = true; 
 | 
  
 | 
// `Object.create` method 
 | 
// https://tc39.es/ecma262/#sec-object.create 
 | 
// eslint-disable-next-line es/no-object-create -- safe 
 | 
module.exports = Object.create || function create(O, Properties) { 
 | 
  var result; 
 | 
  if (O !== null) { 
 | 
    EmptyConstructor[PROTOTYPE] = anObject(O); 
 | 
    result = new EmptyConstructor(); 
 | 
    EmptyConstructor[PROTOTYPE] = null; 
 | 
    // add "__proto__" for Object.getPrototypeOf polyfill 
 | 
    result[IE_PROTO] = O; 
 | 
  } else result = NullProtoObject(); 
 | 
  return Properties === undefined ? result : definePropertiesModule.f(result, Properties); 
 | 
}; 
 |