'use strict'; 
 | 
var $ = require('../internals/export'); 
 | 
var isArray = require('../internals/is-array'); 
 | 
var isConstructor = require('../internals/is-constructor'); 
 | 
var isObject = require('../internals/is-object'); 
 | 
var toAbsoluteIndex = require('../internals/to-absolute-index'); 
 | 
var lengthOfArrayLike = require('../internals/length-of-array-like'); 
 | 
var toIndexedObject = require('../internals/to-indexed-object'); 
 | 
var createProperty = require('../internals/create-property'); 
 | 
var wellKnownSymbol = require('../internals/well-known-symbol'); 
 | 
var arrayMethodHasSpeciesSupport = require('../internals/array-method-has-species-support'); 
 | 
var nativeSlice = require('../internals/array-slice'); 
 | 
  
 | 
var HAS_SPECIES_SUPPORT = arrayMethodHasSpeciesSupport('slice'); 
 | 
  
 | 
var SPECIES = wellKnownSymbol('species'); 
 | 
var $Array = Array; 
 | 
var max = Math.max; 
 | 
  
 | 
// `Array.prototype.slice` method 
 | 
// https://tc39.es/ecma262/#sec-array.prototype.slice 
 | 
// fallback for not array-like ES3 strings and DOM objects 
 | 
$({ target: 'Array', proto: true, forced: !HAS_SPECIES_SUPPORT }, { 
 | 
  slice: function slice(start, end) { 
 | 
    var O = toIndexedObject(this); 
 | 
    var length = lengthOfArrayLike(O); 
 | 
    var k = toAbsoluteIndex(start, length); 
 | 
    var fin = toAbsoluteIndex(end === undefined ? length : end, length); 
 | 
    // inline `ArraySpeciesCreate` for usage native `Array#slice` where it's possible 
 | 
    var Constructor, result, n; 
 | 
    if (isArray(O)) { 
 | 
      Constructor = O.constructor; 
 | 
      // cross-realm fallback 
 | 
      if (isConstructor(Constructor) && (Constructor === $Array || isArray(Constructor.prototype))) { 
 | 
        Constructor = undefined; 
 | 
      } else if (isObject(Constructor)) { 
 | 
        Constructor = Constructor[SPECIES]; 
 | 
        if (Constructor === null) Constructor = undefined; 
 | 
      } 
 | 
      if (Constructor === $Array || Constructor === undefined) { 
 | 
        return nativeSlice(O, k, fin); 
 | 
      } 
 | 
    } 
 | 
    result = new (Constructor === undefined ? $Array : Constructor)(max(fin - k, 0)); 
 | 
    for (n = 0; k < fin; k++, n++) if (k in O) createProperty(result, n, O[k]); 
 | 
    result.length = n; 
 | 
    return result; 
 | 
  } 
 | 
}); 
 |