'use strict'; 
 | 
var $ = require('../internals/export'); 
 | 
var uncurryThis = require('../internals/function-uncurry-this-clause'); 
 | 
var fails = require('../internals/fails'); 
 | 
var ArrayBufferModule = require('../internals/array-buffer'); 
 | 
var anObject = require('../internals/an-object'); 
 | 
var toAbsoluteIndex = require('../internals/to-absolute-index'); 
 | 
var toLength = require('../internals/to-length'); 
 | 
  
 | 
var ArrayBuffer = ArrayBufferModule.ArrayBuffer; 
 | 
var DataView = ArrayBufferModule.DataView; 
 | 
var DataViewPrototype = DataView.prototype; 
 | 
var nativeArrayBufferSlice = uncurryThis(ArrayBuffer.prototype.slice); 
 | 
var getUint8 = uncurryThis(DataViewPrototype.getUint8); 
 | 
var setUint8 = uncurryThis(DataViewPrototype.setUint8); 
 | 
  
 | 
var INCORRECT_SLICE = fails(function () { 
 | 
  return !new ArrayBuffer(2).slice(1, undefined).byteLength; 
 | 
}); 
 | 
  
 | 
// `ArrayBuffer.prototype.slice` method 
 | 
// https://tc39.es/ecma262/#sec-arraybuffer.prototype.slice 
 | 
$({ target: 'ArrayBuffer', proto: true, unsafe: true, forced: INCORRECT_SLICE }, { 
 | 
  slice: function slice(start, end) { 
 | 
    if (nativeArrayBufferSlice && end === undefined) { 
 | 
      return nativeArrayBufferSlice(anObject(this), start); // FF fix 
 | 
    } 
 | 
    var length = anObject(this).byteLength; 
 | 
    var first = toAbsoluteIndex(start, length); 
 | 
    var fin = toAbsoluteIndex(end === undefined ? length : end, length); 
 | 
    var result = new ArrayBuffer(toLength(fin - first)); 
 | 
    var viewSource = new DataView(this); 
 | 
    var viewTarget = new DataView(result); 
 | 
    var index = 0; 
 | 
    while (first < fin) { 
 | 
      setUint8(viewTarget, index++, getUint8(viewSource, first++)); 
 | 
    } return result; 
 | 
  } 
 | 
}); 
 |