UNPKG

2 MBSource Map (JSON)View Raw
1{"version":3,"sources":["webpack:///webpack/bootstrap","webpack:///./node_modules/core-js/modules/_export.js","webpack:///./src/internal/DataPool/DataObject.js","webpack:///./node_modules/core-js/modules/_global.js","webpack:///./node_modules/core-js/modules/_fails.js","webpack:///./node_modules/core-js/modules/_an-object.js","webpack:///./node_modules/core-js/modules/_is-object.js","webpack:///./node_modules/core-js/modules/_wks.js","webpack:///./node_modules/console-browserify/index.js","webpack:///./node_modules/core-js/modules/_to-length.js","webpack:///./node_modules/core-js/modules/_core.js","webpack:///./node_modules/core-js/modules/_descriptors.js","webpack:///./node_modules/core-js/modules/_object-dp.js","webpack:///./node_modules/core-js/modules/_to-object.js","webpack:///./node_modules/core-js/modules/_redefine.js","webpack:///./node_modules/core-js/modules/_string-html.js","webpack:///./node_modules/core-js/modules/_has.js","webpack:///./node_modules/core-js/modules/_hide.js","webpack:///./node_modules/core-js/modules/_to-iobject.js","webpack:///./face/faces/BaseFace.js","webpack:///./node_modules/lodash/lodash.js","webpack:///./src/internal/DataPool/Delayer.js","webpack:///(webpack)/buildin/global.js","webpack:///./node_modules/core-js/modules/_strict-method.js","webpack:///./node_modules/core-js/modules/_ctx.js","webpack:///./node_modules/core-js/modules/_a-function.js","webpack:///./node_modules/core-js/modules/_to-integer.js","webpack:///./node_modules/core-js/modules/_object-gopd.js","webpack:///./node_modules/core-js/modules/_object-sap.js","webpack:///./node_modules/core-js/modules/_array-methods.js","webpack:///./node_modules/process/browser.js","webpack:///./node_modules/core-js/modules/_cof.js","webpack:///./node_modules/core-js/modules/_defined.js","webpack:///./node_modules/core-js/modules/_typed-array.js","webpack:///./src/model/Vatom.js","webpack:///./node_modules/core-js/modules/_to-primitive.js","webpack:///./node_modules/core-js/modules/_meta.js","webpack:///./src/internal/DataPool/plugins/BLOCKvRegion.js","webpack:///./src/internal/EventEmitter.js","webpack:///./node_modules/core-js/modules/_property-desc.js","webpack:///./node_modules/core-js/modules/_uid.js","webpack:///./node_modules/core-js/modules/_library.js","webpack:///./node_modules/core-js/modules/_object-keys.js","webpack:///./node_modules/core-js/modules/_to-absolute-index.js","webpack:///./node_modules/core-js/modules/_object-create.js","webpack:///./node_modules/core-js/modules/_object-gopn.js","webpack:///./node_modules/core-js/modules/_object-gpo.js","webpack:///./node_modules/core-js/modules/_add-to-unscopables.js","webpack:///./node_modules/core-js/modules/_validate-collection.js","webpack:///./node_modules/readable-stream/lib/_stream_duplex.js","webpack:///./node_modules/core-js/modules/_set-to-string-tag.js","webpack:///./node_modules/core-js/modules/_string-trim.js","webpack:///./node_modules/core-js/modules/_iterators.js","webpack:///./node_modules/core-js/modules/_set-species.js","webpack:///./node_modules/core-js/modules/_an-instance.js","webpack:///./node_modules/core-js/modules/_redefine-all.js","webpack:///./node_modules/inherits/inherits_browser.js","webpack:///./node_modules/jwt-decode/lib/index.js","webpack:///./node_modules/core-js/modules/_iobject.js","webpack:///./node_modules/core-js/modules/_object-pie.js","webpack:///./node_modules/core-js/modules/_classof.js","webpack:///./node_modules/core-js/modules/_species-constructor.js","webpack:///./node_modules/core-util-is/lib/util.js","webpack:///./src/client/Discover.js","webpack:///./src/model/User.js","webpack:///./node_modules/util/util.js","webpack:///./node_modules/core-js/modules/_shared.js","webpack:///./node_modules/core-js/modules/_array-includes.js","webpack:///./node_modules/core-js/modules/_object-gops.js","webpack:///./node_modules/core-js/modules/_is-array.js","webpack:///./node_modules/core-js/modules/_iter-detect.js","webpack:///./node_modules/core-js/modules/_flags.js","webpack:///./node_modules/core-js/modules/_regexp-exec-abstract.js","webpack:///./node_modules/core-js/modules/_fix-re-wks.js","webpack:///./node_modules/core-js/modules/_for-of.js","webpack:///./node_modules/core-js/modules/_user-agent.js","webpack:///./node_modules/core-js/modules/_collection.js","webpack:///./node_modules/core-js/modules/_typed.js","webpack:///./node_modules/buffer/index.js","webpack:///./node_modules/process-nextick-args/index.js","webpack:///./node_modules/@brillout/assert/assert.js","webpack:///./node_modules/url-parse/index.js","webpack:///./face/FaceSelection.js","webpack:///./node_modules/lzutf8/build/production/lzutf8.js","webpack:///./src/internal/DataPool/DataObjectAnimator.js","webpack:///./node_modules/core-js/modules/_dom-create.js","webpack:///./node_modules/core-js/modules/_wks-ext.js","webpack:///./node_modules/core-js/modules/_shared-key.js","webpack:///./node_modules/core-js/modules/_enum-bug-keys.js","webpack:///./node_modules/core-js/modules/_html.js","webpack:///./node_modules/core-js/modules/_set-proto.js","webpack:///./node_modules/core-js/modules/_string-ws.js","webpack:///./node_modules/core-js/modules/_inherit-if-required.js","webpack:///./node_modules/core-js/modules/_string-repeat.js","webpack:///./node_modules/core-js/modules/_math-sign.js","webpack:///./node_modules/core-js/modules/_math-expm1.js","webpack:///./node_modules/core-js/modules/_string-at.js","webpack:///./node_modules/core-js/modules/_iter-define.js","webpack:///./node_modules/core-js/modules/_string-context.js","webpack:///./node_modules/core-js/modules/_is-regexp.js","webpack:///./node_modules/core-js/modules/_fails-is-regexp.js","webpack:///./node_modules/core-js/modules/_is-array-iter.js","webpack:///./node_modules/core-js/modules/_create-property.js","webpack:///./node_modules/core-js/modules/core.get-iterator-method.js","webpack:///./node_modules/core-js/modules/_array-fill.js","webpack:///./node_modules/core-js/modules/es6.array.iterator.js","webpack:///./node_modules/core-js/modules/_regexp-exec.js","webpack:///./node_modules/core-js/modules/_advance-string-index.js","webpack:///./node_modules/core-js/modules/_task.js","webpack:///./node_modules/core-js/modules/_typed-buffer.js","webpack:///./node_modules/core-js/library/modules/_global.js","webpack:///./node_modules/core-js/library/modules/_is-object.js","webpack:///./node_modules/core-js/library/modules/_descriptors.js","webpack:///./node_modules/events/events.js","webpack:///./node_modules/readable-stream/readable-browser.js","webpack:///./node_modules/readable-stream/node_modules/safe-buffer/index.js","webpack:///./node_modules/readable-stream/lib/_stream_writable.js","webpack:///./src/internal/DataPool/EventEmitter.js","webpack:///./src/internal/DataPool/plugins/GeoPosRegion.js","webpack:///./node_modules/core-js/modules/_ie8-dom-define.js","webpack:///./node_modules/core-js/modules/_wks-define.js","webpack:///./node_modules/core-js/modules/_object-keys-internal.js","webpack:///./node_modules/core-js/modules/_object-dps.js","webpack:///./node_modules/core-js/modules/_object-gopn-ext.js","webpack:///./node_modules/core-js/modules/_object-assign.js","webpack:///./node_modules/core-js/modules/_same-value.js","webpack:///./node_modules/core-js/modules/_bind.js","webpack:///./node_modules/core-js/modules/_invoke.js","webpack:///./node_modules/core-js/modules/_parse-int.js","webpack:///./node_modules/core-js/modules/_parse-float.js","webpack:///./node_modules/core-js/modules/_a-number-value.js","webpack:///./node_modules/core-js/modules/_is-integer.js","webpack:///./node_modules/core-js/modules/_math-log1p.js","webpack:///./node_modules/core-js/modules/_iter-create.js","webpack:///./node_modules/core-js/modules/_iter-call.js","webpack:///./node_modules/core-js/modules/_array-species-create.js","webpack:///./node_modules/core-js/modules/_array-reduce.js","webpack:///./node_modules/core-js/modules/_array-copy-within.js","webpack:///./node_modules/core-js/modules/_iter-step.js","webpack:///./node_modules/core-js/modules/es6.regexp.exec.js","webpack:///./node_modules/core-js/modules/es6.regexp.flags.js","webpack:///./node_modules/core-js/modules/es6.promise.js","webpack:///./node_modules/core-js/modules/_new-promise-capability.js","webpack:///./node_modules/core-js/modules/_promise-resolve.js","webpack:///./node_modules/core-js/modules/_collection-strong.js","webpack:///./node_modules/core-js/modules/_collection-weak.js","webpack:///./node_modules/core-js/modules/_to-index.js","webpack:///./node_modules/core-js/modules/_own-keys.js","webpack:///./node_modules/core-js/modules/_string-pad.js","webpack:///./node_modules/core-js/modules/_object-to-array.js","webpack:///./node_modules/core-js/library/modules/_core.js","webpack:///./node_modules/core-js/library/modules/_fails.js","webpack:///(webpack)/buildin/module.js","webpack:///./node_modules/isarray/index.js","webpack:///./node_modules/timers-browserify/main.js","webpack:///./node_modules/stream-browserify/index.js","webpack:///./node_modules/readable-stream/lib/_stream_readable.js","webpack:///./node_modules/readable-stream/lib/internal/streams/stream-browser.js","webpack:///./node_modules/readable-stream/lib/internal/streams/destroy.js","webpack:///./node_modules/string_decoder/lib/string_decoder.js","webpack:///./node_modules/readable-stream/lib/_stream_transform.js","webpack:///./node_modules/@brillout/assert/log.js","webpack:///./node_modules/@brillout/assert/utils/isNodejs.js","webpack:///./node_modules/@brillout/format-text/index.js","webpack:///./node_modules/reassert/utils/isNodejs.js","webpack:///./src/internal/DataPool/Region.js","webpack:///./src/internal/DataPool/Filter.js","webpack:///./src/internal/DataPool/LocalStorageMap.js","webpack:///./src/internal/DataPool/LZUTF8WorkerScript.js","webpack:///./src/internal/repo/Store.js","webpack:///./src/internal/net/rest/api/UserApi.js","webpack:///./src/internal/net/Client.js","webpack:///./node_modules/@brillout/fetch/index.js","webpack:///./src/client/manager/WebSockets.js","webpack:///./face/VatomView.js","webpack:///./face/faces/ProgressImage.js","webpack:///./face/faces/ImageFace.js","webpack:///./face/faces/ImagePolicy.js","webpack:///./face/faces/LayeredImage.js","webpack:///./face/faces/WebFace/BaseWebFace.js","webpack:///./face/faces/WebFace/BridgeV1.js","webpack:///./face/faces/WebFace/BridgeV2.js","webpack:///./node_modules/@babel/polyfill/lib/index.js","webpack:///./node_modules/util/support/isBufferBrowser.js","webpack:///./node_modules/util/node_modules/inherits/inherits_browser.js","webpack:///./node_modules/assert/assert.js","webpack:///./node_modules/object-assign/index.js","webpack:///./node_modules/date-now/index.js","webpack:///./node_modules/@babel/polyfill/lib/noConflict.js","webpack:///./node_modules/core-js/es6/index.js","webpack:///./node_modules/core-js/modules/es6.symbol.js","webpack:///./node_modules/core-js/modules/_function-to-string.js","webpack:///./node_modules/core-js/modules/_enum-keys.js","webpack:///./node_modules/core-js/modules/es6.object.create.js","webpack:///./node_modules/core-js/modules/es6.object.define-property.js","webpack:///./node_modules/core-js/modules/es6.object.define-properties.js","webpack:///./node_modules/core-js/modules/es6.object.get-own-property-descriptor.js","webpack:///./node_modules/core-js/modules/es6.object.get-prototype-of.js","webpack:///./node_modules/core-js/modules/es6.object.keys.js","webpack:///./node_modules/core-js/modules/es6.object.get-own-property-names.js","webpack:///./node_modules/core-js/modules/es6.object.freeze.js","webpack:///./node_modules/core-js/modules/es6.object.seal.js","webpack:///./node_modules/core-js/modules/es6.object.prevent-extensions.js","webpack:///./node_modules/core-js/modules/es6.object.is-frozen.js","webpack:///./node_modules/core-js/modules/es6.object.is-sealed.js","webpack:///./node_modules/core-js/modules/es6.object.is-extensible.js","webpack:///./node_modules/core-js/modules/es6.object.assign.js","webpack:///./node_modules/core-js/modules/es6.object.is.js","webpack:///./node_modules/core-js/modules/es6.object.set-prototype-of.js","webpack:///./node_modules/core-js/modules/es6.object.to-string.js","webpack:///./node_modules/core-js/modules/es6.function.bind.js","webpack:///./node_modules/core-js/modules/es6.function.name.js","webpack:///./node_modules/core-js/modules/es6.function.has-instance.js","webpack:///./node_modules/core-js/modules/es6.parse-int.js","webpack:///./node_modules/core-js/modules/es6.parse-float.js","webpack:///./node_modules/core-js/modules/es6.number.constructor.js","webpack:///./node_modules/core-js/modules/es6.number.to-fixed.js","webpack:///./node_modules/core-js/modules/es6.number.to-precision.js","webpack:///./node_modules/core-js/modules/es6.number.epsilon.js","webpack:///./node_modules/core-js/modules/es6.number.is-finite.js","webpack:///./node_modules/core-js/modules/es6.number.is-integer.js","webpack:///./node_modules/core-js/modules/es6.number.is-nan.js","webpack:///./node_modules/core-js/modules/es6.number.is-safe-integer.js","webpack:///./node_modules/core-js/modules/es6.number.max-safe-integer.js","webpack:///./node_modules/core-js/modules/es6.number.min-safe-integer.js","webpack:///./node_modules/core-js/modules/es6.number.parse-float.js","webpack:///./node_modules/core-js/modules/es6.number.parse-int.js","webpack:///./node_modules/core-js/modules/es6.math.acosh.js","webpack:///./node_modules/core-js/modules/es6.math.asinh.js","webpack:///./node_modules/core-js/modules/es6.math.atanh.js","webpack:///./node_modules/core-js/modules/es6.math.cbrt.js","webpack:///./node_modules/core-js/modules/es6.math.clz32.js","webpack:///./node_modules/core-js/modules/es6.math.cosh.js","webpack:///./node_modules/core-js/modules/es6.math.expm1.js","webpack:///./node_modules/core-js/modules/es6.math.fround.js","webpack:///./node_modules/core-js/modules/_math-fround.js","webpack:///./node_modules/core-js/modules/es6.math.hypot.js","webpack:///./node_modules/core-js/modules/es6.math.imul.js","webpack:///./node_modules/core-js/modules/es6.math.log10.js","webpack:///./node_modules/core-js/modules/es6.math.log1p.js","webpack:///./node_modules/core-js/modules/es6.math.log2.js","webpack:///./node_modules/core-js/modules/es6.math.sign.js","webpack:///./node_modules/core-js/modules/es6.math.sinh.js","webpack:///./node_modules/core-js/modules/es6.math.tanh.js","webpack:///./node_modules/core-js/modules/es6.math.trunc.js","webpack:///./node_modules/core-js/modules/es6.string.from-code-point.js","webpack:///./node_modules/core-js/modules/es6.string.raw.js","webpack:///./node_modules/core-js/modules/es6.string.trim.js","webpack:///./node_modules/core-js/modules/es6.string.iterator.js","webpack:///./node_modules/core-js/modules/es6.string.code-point-at.js","webpack:///./node_modules/core-js/modules/es6.string.ends-with.js","webpack:///./node_modules/core-js/modules/es6.string.includes.js","webpack:///./node_modules/core-js/modules/es6.string.repeat.js","webpack:///./node_modules/core-js/modules/es6.string.starts-with.js","webpack:///./node_modules/core-js/modules/es6.string.anchor.js","webpack:///./node_modules/core-js/modules/es6.string.big.js","webpack:///./node_modules/core-js/modules/es6.string.blink.js","webpack:///./node_modules/core-js/modules/es6.string.bold.js","webpack:///./node_modules/core-js/modules/es6.string.fixed.js","webpack:///./node_modules/core-js/modules/es6.string.fontcolor.js","webpack:///./node_modules/core-js/modules/es6.string.fontsize.js","webpack:///./node_modules/core-js/modules/es6.string.italics.js","webpack:///./node_modules/core-js/modules/es6.string.link.js","webpack:///./node_modules/core-js/modules/es6.string.small.js","webpack:///./node_modules/core-js/modules/es6.string.strike.js","webpack:///./node_modules/core-js/modules/es6.string.sub.js","webpack:///./node_modules/core-js/modules/es6.string.sup.js","webpack:///./node_modules/core-js/modules/es6.date.now.js","webpack:///./node_modules/core-js/modules/es6.date.to-json.js","webpack:///./node_modules/core-js/modules/es6.date.to-iso-string.js","webpack:///./node_modules/core-js/modules/_date-to-iso-string.js","webpack:///./node_modules/core-js/modules/es6.date.to-string.js","webpack:///./node_modules/core-js/modules/es6.date.to-primitive.js","webpack:///./node_modules/core-js/modules/_date-to-primitive.js","webpack:///./node_modules/core-js/modules/es6.array.is-array.js","webpack:///./node_modules/core-js/modules/es6.array.from.js","webpack:///./node_modules/core-js/modules/es6.array.of.js","webpack:///./node_modules/core-js/modules/es6.array.join.js","webpack:///./node_modules/core-js/modules/es6.array.slice.js","webpack:///./node_modules/core-js/modules/es6.array.sort.js","webpack:///./node_modules/core-js/modules/es6.array.for-each.js","webpack:///./node_modules/core-js/modules/_array-species-constructor.js","webpack:///./node_modules/core-js/modules/es6.array.map.js","webpack:///./node_modules/core-js/modules/es6.array.filter.js","webpack:///./node_modules/core-js/modules/es6.array.some.js","webpack:///./node_modules/core-js/modules/es6.array.every.js","webpack:///./node_modules/core-js/modules/es6.array.reduce.js","webpack:///./node_modules/core-js/modules/es6.array.reduce-right.js","webpack:///./node_modules/core-js/modules/es6.array.index-of.js","webpack:///./node_modules/core-js/modules/es6.array.last-index-of.js","webpack:///./node_modules/core-js/modules/es6.array.copy-within.js","webpack:///./node_modules/core-js/modules/es6.array.fill.js","webpack:///./node_modules/core-js/modules/es6.array.find.js","webpack:///./node_modules/core-js/modules/es6.array.find-index.js","webpack:///./node_modules/core-js/modules/es6.array.species.js","webpack:///./node_modules/core-js/modules/es6.regexp.constructor.js","webpack:///./node_modules/core-js/modules/es6.regexp.to-string.js","webpack:///./node_modules/core-js/modules/es6.regexp.match.js","webpack:///./node_modules/core-js/modules/es6.regexp.replace.js","webpack:///./node_modules/core-js/modules/es6.regexp.search.js","webpack:///./node_modules/core-js/modules/es6.regexp.split.js","webpack:///./node_modules/core-js/modules/_microtask.js","webpack:///./node_modules/core-js/modules/_perform.js","webpack:///./node_modules/core-js/modules/es6.map.js","webpack:///./node_modules/core-js/modules/es6.set.js","webpack:///./node_modules/core-js/modules/es6.weak-map.js","webpack:///./node_modules/core-js/modules/es6.weak-set.js","webpack:///./node_modules/core-js/modules/es6.typed.array-buffer.js","webpack:///./node_modules/core-js/modules/es6.typed.data-view.js","webpack:///./node_modules/core-js/modules/es6.typed.int8-array.js","webpack:///./node_modules/core-js/modules/es6.typed.uint8-array.js","webpack:///./node_modules/core-js/modules/es6.typed.uint8-clamped-array.js","webpack:///./node_modules/core-js/modules/es6.typed.int16-array.js","webpack:///./node_modules/core-js/modules/es6.typed.uint16-array.js","webpack:///./node_modules/core-js/modules/es6.typed.int32-array.js","webpack:///./node_modules/core-js/modules/es6.typed.uint32-array.js","webpack:///./node_modules/core-js/modules/es6.typed.float32-array.js","webpack:///./node_modules/core-js/modules/es6.typed.float64-array.js","webpack:///./node_modules/core-js/modules/es6.reflect.apply.js","webpack:///./node_modules/core-js/modules/es6.reflect.construct.js","webpack:///./node_modules/core-js/modules/es6.reflect.define-property.js","webpack:///./node_modules/core-js/modules/es6.reflect.delete-property.js","webpack:///./node_modules/core-js/modules/es6.reflect.enumerate.js","webpack:///./node_modules/core-js/modules/es6.reflect.get.js","webpack:///./node_modules/core-js/modules/es6.reflect.get-own-property-descriptor.js","webpack:///./node_modules/core-js/modules/es6.reflect.get-prototype-of.js","webpack:///./node_modules/core-js/modules/es6.reflect.has.js","webpack:///./node_modules/core-js/modules/es6.reflect.is-extensible.js","webpack:///./node_modules/core-js/modules/es6.reflect.own-keys.js","webpack:///./node_modules/core-js/modules/es6.reflect.prevent-extensions.js","webpack:///./node_modules/core-js/modules/es6.reflect.set.js","webpack:///./node_modules/core-js/modules/es6.reflect.set-prototype-of.js","webpack:///./node_modules/core-js/fn/array/includes.js","webpack:///./node_modules/core-js/modules/es7.array.includes.js","webpack:///./node_modules/core-js/fn/array/flat-map.js","webpack:///./node_modules/core-js/modules/es7.array.flat-map.js","webpack:///./node_modules/core-js/modules/_flatten-into-array.js","webpack:///./node_modules/core-js/fn/string/pad-start.js","webpack:///./node_modules/core-js/modules/es7.string.pad-start.js","webpack:///./node_modules/core-js/fn/string/pad-end.js","webpack:///./node_modules/core-js/modules/es7.string.pad-end.js","webpack:///./node_modules/core-js/fn/string/trim-start.js","webpack:///./node_modules/core-js/modules/es7.string.trim-left.js","webpack:///./node_modules/core-js/fn/string/trim-end.js","webpack:///./node_modules/core-js/modules/es7.string.trim-right.js","webpack:///./node_modules/core-js/fn/symbol/async-iterator.js","webpack:///./node_modules/core-js/modules/es7.symbol.async-iterator.js","webpack:///./node_modules/core-js/fn/object/get-own-property-descriptors.js","webpack:///./node_modules/core-js/modules/es7.object.get-own-property-descriptors.js","webpack:///./node_modules/core-js/fn/object/values.js","webpack:///./node_modules/core-js/modules/es7.object.values.js","webpack:///./node_modules/core-js/fn/object/entries.js","webpack:///./node_modules/core-js/modules/es7.object.entries.js","webpack:///./node_modules/core-js/fn/promise/finally.js","webpack:///./node_modules/core-js/modules/es7.promise.finally.js","webpack:///./node_modules/core-js/web/index.js","webpack:///./node_modules/core-js/modules/web.timers.js","webpack:///./node_modules/core-js/modules/web.immediate.js","webpack:///./node_modules/core-js/modules/web.dom.iterable.js","webpack:///./node_modules/regenerator-runtime/runtime.js","webpack:///./node_modules/core-js/library/fn/global.js","webpack:///./node_modules/core-js/library/modules/es7.global.js","webpack:///./node_modules/core-js/library/modules/_export.js","webpack:///./node_modules/core-js/library/modules/_ctx.js","webpack:///./node_modules/core-js/library/modules/_a-function.js","webpack:///./node_modules/core-js/library/modules/_hide.js","webpack:///./node_modules/core-js/library/modules/_object-dp.js","webpack:///./node_modules/core-js/library/modules/_an-object.js","webpack:///./node_modules/core-js/library/modules/_ie8-dom-define.js","webpack:///./node_modules/core-js/library/modules/_dom-create.js","webpack:///./node_modules/core-js/library/modules/_to-primitive.js","webpack:///./node_modules/core-js/library/modules/_property-desc.js","webpack:///./node_modules/core-js/library/modules/_has.js","webpack:///./src/internal/DataPool/plugins/InventoryRegion.js","webpack:///./node_modules/lz-string/libs/lz-string.js","webpack:///./node_modules/base64-js/index.js","webpack:///./node_modules/ieee754/index.js","webpack:///./node_modules/setimmediate/setImmediate.js","webpack:///./node_modules/readable-stream/lib/internal/streams/BufferList.js","webpack:///./node_modules/util-deprecate/browser.js","webpack:///./node_modules/string_decoder/node_modules/safe-buffer/index.js","webpack:///./node_modules/readable-stream/lib/_stream_passthrough.js","webpack:///./node_modules/readable-stream/writable-browser.js","webpack:///./node_modules/readable-stream/duplex-browser.js","webpack:///./node_modules/readable-stream/transform.js","webpack:///./node_modules/readable-stream/passthrough.js","webpack:///./node_modules/requires-port/index.js","webpack:///./node_modules/querystringify/index.js","webpack:///./src/internal/DataPool/plugins/VatomIDRegion.js","webpack:///./src/internal/DataPool/plugins/VatomChildrenRegion.js","webpack:///./node_modules/jwt-decode/lib/base64_url_decode.js","webpack:///./node_modules/jwt-decode/lib/atob.js","webpack:///./node_modules/@brillout/assert/index.js","webpack:///./node_modules/reassert/warning.js","webpack:///./node_modules/reassert/assert.js","webpack:///./node_modules/reassert/log.js","webpack:///./node_modules/@brillout/format-text/node_modules/string-width/index.js","webpack:///./node_modules/@brillout/format-text/node_modules/strip-ansi/index.js","webpack:///./node_modules/@brillout/format-text/node_modules/ansi-regex/index.js","webpack:///./node_modules/is-fullwidth-code-point/index.js","webpack:///./node_modules/@brillout/assert/internal.js","webpack:///./node_modules/@brillout/assert/usage.js","webpack:///./node_modules/@brillout/assert/warning.js","webpack:///./src/internal/DataPool/index.js","webpack:///./src/client/manager/UserManager.js","webpack:///./src/internal/net/rest/api/VatomApi.js","webpack:///./src/client/manager/Vatoms.js","webpack:///./src/client/manager/Activity.js","webpack:///./src/internal/net/rest/api/ActivityApi.js","webpack:///./src/client/manager/MultiWebSockets.js","webpack:///./src/client/Blockv.js","webpack:///./face/index-browser.js"],"names":["installedModules","__webpack_require__","moduleId","exports","module","i","l","modules","call","m","c","d","name","getter","o","Object","defineProperty","enumerable","get","r","Symbol","toStringTag","value","t","mode","__esModule","ns","create","key","bind","n","object","property","prototype","hasOwnProperty","p","s","global","core","hide","redefine","ctx","$export","type","source","own","out","exp","IS_FORCED","F","IS_GLOBAL","G","IS_STATIC","S","IS_PROTO","P","IS_BIND","B","target","expProto","undefined","Function","U","W","R","DataObject","id","data","this","rev","cached","window","Math","self","__g","exec","e","isObject","it","TypeError","store","uid","USE_SYMBOL","console","util","assert","now","slice","Array","times","functions","log","apply","arguments","warn","label","time","Error","duration","err","message","format","error","stack","inspect","expression","arr","ok","length","tuple","f","toInteger","min","version","__e","a","anObject","IE8_DOM_DEFINE","toPrimitive","dP","O","Attributes","defined","has","SRC","$toString","TPL","split","inspectSource","val","safe","isFunction","join","String","fails","quot","createHTML","string","tag","attribute","p1","replace","NAME","test","toLowerCase","createDesc","IObject","BaseFace","vatomView","vatom","face","element","document","createElement","style","position","width","height","FUNC_ERROR_TEXT","PLACEHOLDER","wrapFlags","argsTag","arrayTag","boolTag","dateTag","errorTag","funcTag","genTag","mapTag","numberTag","objectTag","regexpTag","setTag","stringTag","symbolTag","weakMapTag","arrayBufferTag","dataViewTag","float32Tag","float64Tag","int8Tag","int16Tag","int32Tag","uint8Tag","uint16Tag","uint32Tag","reEmptyStringLeading","reEmptyStringMiddle","reEmptyStringTrailing","reEscapedHtml","reUnescapedHtml","reHasEscapedHtml","RegExp","reHasUnescapedHtml","reEscape","reEvaluate","reInterpolate","reIsDeepProp","reIsPlainProp","rePropName","reRegExpChar","reHasRegExpChar","reTrim","reTrimStart","reTrimEnd","reWrapComment","reWrapDetails","reSplitDetails","reAsciiWord","reEscapeChar","reEsTemplate","reFlags","reIsBadHex","reIsBinary","reIsHostCtor","reIsOctal","reIsUint","reLatin","reNoMatch","reUnescapedString","rsComboRange","rsComboMarksRange","rsBreakRange","rsMathOpRange","rsAstral","rsBreak","rsCombo","rsDigits","rsDingbat","rsLower","rsMisc","rsFitz","rsNonAstral","rsRegional","rsSurrPair","rsUpper","rsMiscLower","rsMiscUpper","reOptMod","rsSeq","rsEmoji","rsSymbol","reApos","reComboMark","reUnicode","reUnicodeWord","reHasUnicode","reHasUnicodeWord","contextProps","templateCounter","typedArrayTags","cloneableTags","stringEscapes","freeParseFloat","parseFloat","freeParseInt","parseInt","freeGlobal","freeSelf","root","freeExports","nodeType","freeModule","moduleExports","freeProcess","process","nodeUtil","types","require","binding","nodeIsArrayBuffer","isArrayBuffer","nodeIsDate","isDate","nodeIsMap","isMap","nodeIsRegExp","isRegExp","nodeIsSet","isSet","nodeIsTypedArray","isTypedArray","func","thisArg","args","arrayAggregator","array","setter","iteratee","accumulator","index","arrayEach","arrayEachRight","arrayEvery","predicate","arrayFilter","resIndex","result","arrayIncludes","baseIndexOf","arrayIncludesWith","comparator","arrayMap","arrayPush","values","offset","arrayReduce","initAccum","arrayReduceRight","arraySome","asciiSize","baseProperty","baseFindKey","collection","eachFunc","baseFindIndex","fromIndex","fromRight","strictIndexOf","baseIsNaN","baseIndexOfWith","baseMean","baseSum","basePropertyOf","baseReduce","current","baseTimes","baseUnary","baseValues","props","cacheHas","cache","charsStartIndex","strSymbols","chrSymbols","charsEndIndex","countHolders","placeholder","deburrLetter","escapeHtmlChar","escapeStringChar","chr","hasUnicode","mapToArray","map","size","forEach","overArg","transform","arg","replaceHolders","setToArray","set","setToPairs","stringSize","lastIndex","unicodeSize","stringToArray","match","unicodeToArray","asciiToArray","unescapeHtmlChar","_","runInContext","context","defaults","pick","Date","arrayProto","funcProto","objectProto","coreJsData","funcToString","toString","idCounter","maskSrcKey","keys","IE_PROTO","nativeObjectToString","objectCtorString","oldDash","reIsNative","Buffer","Uint8Array","allocUnsafe","getPrototype","getPrototypeOf","objectCreate","propertyIsEnumerable","splice","spreadableSymbol","isConcatSpreadable","symIterator","iterator","symToStringTag","getNative","ctxClearTimeout","clearTimeout","ctxNow","ctxSetTimeout","setTimeout","nativeCeil","ceil","nativeFloor","floor","nativeGetSymbols","getOwnPropertySymbols","nativeIsBuffer","isBuffer","nativeIsFinite","isFinite","nativeJoin","nativeKeys","nativeMax","max","nativeMin","nativeNow","nativeParseInt","nativeRandom","random","nativeReverse","reverse","DataView","Map","Promise","Set","WeakMap","nativeCreate","metaMap","realNames","dataViewCtorString","toSource","mapCtorString","promiseCtorString","setCtorString","weakMapCtorString","symbolProto","symbolValueOf","valueOf","symbolToString","lodash","isObjectLike","isArray","LazyWrapper","LodashWrapper","wrapperClone","baseCreate","proto","baseLodash","chainAll","__wrapped__","__actions__","__chain__","__index__","__values__","__dir__","__filtered__","__iteratees__","__takeCount__","__views__","Hash","entries","clear","entry","ListCache","MapCache","SetCache","__data__","add","Stack","arrayLikeKeys","inherited","isArr","isArg","isArguments","isBuff","isType","skipIndexes","isIndex","push","arraySample","baseRandom","arraySampleSize","shuffleSelf","copyArray","baseClamp","arrayShuffle","assignMergeValue","eq","baseAssignValue","assignValue","objValue","assocIndexOf","baseAggregator","baseEach","baseAssign","copyObject","baseAt","paths","skip","number","lower","upper","baseClone","bitmask","customizer","isDeep","isFlat","isFull","constructor","input","initCloneArray","getTag","isFunc","cloneBuffer","initCloneObject","getSymbolsIn","copySymbolsIn","keysIn","baseAssignIn","getSymbols","copySymbols","Ctor","cloneArrayBuffer","dataView","buffer","byteOffset","byteLength","cloneDataView","cloneTypedArray","regexp","cloneRegExp","symbol","initCloneByTag","stacked","subValue","getAllKeysIn","getAllKeys","baseConformsTo","baseDelay","wait","baseDifference","includes","isCommon","valuesLength","outer","computed","valuesIndex","templateSettings","pop","getMapData","pairs","LARGE_ARRAY_SIZE","createBaseEach","baseForOwn","baseEachRight","baseForOwnRight","baseEvery","baseExtremum","isSymbol","baseFilter","baseFlatten","depth","isStrict","isFlattenable","baseFor","createBaseFor","baseForRight","baseFunctions","baseGet","path","castPath","toKey","baseGetAllKeys","keysFunc","symbolsFunc","baseGetTag","isOwn","unmasked","getRawTag","objectToString","baseGt","other","baseHas","baseHasIn","baseIntersection","arrays","othLength","othIndex","caches","maxLength","Infinity","seen","baseInvoke","parent","last","baseIsArguments","baseIsEqual","equalFunc","objIsArr","othIsArr","objTag","othTag","objIsObj","othIsObj","isSameTag","equalArrays","convert","isPartial","equalByTag","objIsWrapped","othIsWrapped","objUnwrapped","othUnwrapped","objProps","objLength","skipCtor","othValue","compared","objCtor","othCtor","equalObjects","baseIsEqualDeep","baseIsMatch","matchData","noCustomizer","srcValue","COMPARE_PARTIAL_FLAG","baseIsNative","baseIteratee","identity","baseMatchesProperty","baseMatches","baseKeys","isPrototype","baseKeysIn","nativeKeysIn","isProto","baseLt","baseMap","isArrayLike","getMatchData","matchesStrictComparable","isKey","isStrictComparable","hasIn","baseMerge","srcIndex","mergeFunc","safeGet","newValue","isTyped","isArrayLikeObject","isPlainObject","toPlainObject","baseMergeDeep","baseNth","baseOrderBy","iteratees","orders","getIteratee","comparer","sort","baseSortBy","objCriteria","criteria","othCriteria","ordersLength","compareAscending","order","compareMultiple","basePickBy","baseSet","basePullAll","indexOf","basePullAt","indexes","previous","baseUnset","baseRepeat","baseRest","start","setToString","overRest","baseSample","baseSampleSize","nested","baseSetData","baseSetToString","constant","baseShuffle","baseSlice","end","baseSome","baseSortedIndex","retHighest","low","high","MAX_ARRAY_LENGTH","mid","baseSortedIndexBy","valIsNaN","valIsNull","valIsSymbol","valIsUndefined","othIsDefined","othIsNull","othIsReflexive","othIsSymbol","setLow","baseSortedUniq","baseToNumber","baseToString","baseUniq","createSet","seenIndex","baseUpdate","updater","baseWhile","isDrop","baseWrapperValue","actions","action","baseXor","baseZipObject","assignFunc","valsLength","castArrayLikeObject","castFunction","stringToPath","castRest","castSlice","copy","arrayBuffer","typedArray","valIsDefined","valIsReflexive","composeArgs","partials","holders","isCurried","argsIndex","argsLength","holdersLength","leftIndex","leftLength","rangeLength","isUncurried","composeArgsRight","holdersIndex","rightIndex","rightLength","isNew","createAggregator","initializer","createAssigner","assigner","sources","guard","isIterateeCall","iterable","createCaseFirst","methodName","charAt","trailing","createCompounder","callback","words","deburr","createCtor","thisBinding","createFind","findIndexFunc","createFlow","flatRest","funcs","prereq","thru","wrapper","getFuncName","funcName","getData","isLaziable","plant","createHybrid","partialsRight","holdersRight","argPos","ary","arity","isAry","isBind","isBindKey","isFlip","getHolder","holdersCount","newHolders","createRecurry","fn","reorder","createInverter","toIteratee","baseInverter","createMathOperation","operator","defaultValue","createOver","arrayFunc","createPadding","chars","charsLength","createRange","step","toFinite","baseRange","createRelationalOperation","toNumber","wrapFunc","isCurry","newData","setData","setWrapToString","createRound","precision","pair","noop","createToPairs","baseToPairs","createWrap","srcBitmask","newBitmask","isCombo","mergeData","createCurry","createPartial","createBind","customDefaultsAssignIn","customDefaultsMerge","customOmitClone","arrLength","arrValue","flatten","otherFunc","getValue","stubArray","hasPath","hasFunc","isLength","ArrayBuffer","resolve","ctorString","isMaskable","stubFalse","otherArgs","oldArray","shortOut","reference","details","insertWrapDetails","updateWrapDetails","getWrapDetails","count","lastCalled","stamp","remaining","rand","memoize","memoizeCapped","charCodeAt","quote","subString","clone","difference","differenceBy","differenceWith","findIndex","findLastIndex","head","intersection","mapped","intersectionBy","intersectionWith","pull","pullAll","pullAt","union","unionBy","unionWith","unzip","group","unzipWith","without","xor","xorBy","xorWith","zip","zipWith","chain","interceptor","wrapperAt","countBy","find","findLast","forEachRight","groupBy","invokeMap","keyBy","partition","sortBy","before","bindKey","WRAP_BIND_FLAG","debounce","options","lastArgs","lastThis","maxWait","timerId","lastCallTime","lastInvokeTime","leading","maxing","invokeFunc","leadingEdge","timerExpired","shouldInvoke","timeSinceLastCall","trailingEdge","timeWaiting","remainingWait","debounced","isInvoking","cancel","flush","defer","delay","resolver","memoized","Cache","negate","overArgs","transforms","funcsLength","partial","partialRight","rearg","gt","gte","isError","isInteger","isNumber","isString","lt","lte","toArray","next","done","iteratorToArray","remainder","toLength","isBinary","assign","assignIn","assignInWith","assignWith","at","propsIndex","propsLength","defaultsDeep","mergeWith","invert","invertBy","invoke","merge","omit","CLONE_DEEP_FLAG","basePick","pickBy","prop","toPairs","toPairsIn","camelCase","word","capitalize","upperFirst","kebabCase","lowerCase","lowerFirst","snakeCase","startCase","upperCase","toUpperCase","pattern","hasUnicodeWord","unicodeWords","asciiWords","attempt","bindAll","methodNames","flow","flowRight","method","methodOf","mixin","over","overEvery","overSome","basePropertyDeep","range","rangeRight","augend","addend","divide","dividend","divisor","multiply","multiplier","multiplicand","round","subtract","minuend","subtrahend","after","castArray","chunk","compact","concat","cond","conforms","baseConforms","properties","curry","curryRight","drop","dropRight","dropRightWhile","dropWhile","fill","baseFill","filter","flatMap","flatMapDeep","flatMapDepth","flattenDeep","flattenDepth","flip","fromPairs","functionsIn","initial","mapKeys","mapValues","matches","matchesProperty","nthArg","omitBy","once","orderBy","propertyOf","pullAllBy","pullAllWith","reject","remove","rest","sampleSize","setWith","shuffle","sortedUniq","sortedUniqBy","separator","limit","spread","tail","take","takeRight","takeRightWhile","takeWhile","tap","throttle","toPath","isArrLike","unary","uniq","uniqBy","uniqWith","unset","update","updateWith","valuesIn","wrap","zipObject","zipObjectDeep","entriesIn","extend","extendWith","clamp","cloneDeep","cloneDeepWith","cloneWith","conformsTo","defaultTo","endsWith","escape","escapeRegExp","every","findKey","findLastKey","forIn","forInRight","forOwn","forOwnRight","inRange","baseInRange","isBoolean","isElement","isEmpty","isEqual","isEqualWith","isMatch","isMatchWith","isNaN","isNative","isNil","isNull","isSafeInteger","isUndefined","isWeakMap","isWeakSet","lastIndexOf","strictLastIndexOf","maxBy","mean","meanBy","minBy","stubObject","stubString","stubTrue","nth","noConflict","pad","strLength","padEnd","padStart","radix","floating","temp","reduce","reduceRight","repeat","sample","some","sortedIndex","sortedIndexBy","sortedIndexOf","sortedLastIndex","sortedLastIndexBy","sortedLastIndexOf","startsWith","sum","sumBy","template","settings","isEscaping","isEvaluating","imports","importsKeys","importsValues","interpolate","reDelimiters","evaluate","sourceURL","escapeValue","interpolateValue","esTemplateValue","evaluateValue","variable","toLower","toSafeInteger","toUpper","trim","trimEnd","trimStart","truncate","omission","search","substring","newEnd","unescape","uniqueId","prefix","each","eachRight","first","VERSION","isFilter","takeName","dropName","checkIteratee","isTaker","lodashFunc","retUnwrapped","isLazy","useLazy","isHybrid","isUnwrapped","onlyLazy","chainName","dir","isRight","view","getView","iterLength","takeCount","iterIndex","commit","wrapped","toJSON","pending","timer","executePendingActions","g","aFunction","that","b","pIE","toIObject","gOPD","getOwnPropertyDescriptor","KEY","toObject","asc","TYPE","$create","IS_MAP","IS_FILTER","IS_SOME","IS_EVERY","IS_FIND_INDEX","NO_HOLES","$this","callbackfn","res","cachedSetTimeout","cachedClearTimeout","defaultSetTimout","defaultClearTimeout","runTimeout","fun","currentQueue","queue","draining","queueIndex","cleanUpNextTick","drainQueue","timeout","len","run","marker","runClearTimeout","Item","nextTick","title","browser","env","argv","versions","on","addListener","off","removeListener","removeAllListeners","emit","prependListener","prependOnceListener","listeners","cwd","chdir","umask","LIBRARY","$typed","$buffer","anInstance","propertyDesc","redefineAll","toIndex","toAbsoluteIndex","classof","isArrayIter","gOPN","getIterFn","wks","createArrayMethod","createArrayIncludes","speciesConstructor","ArrayIterators","Iterators","$iterDetect","setSpecies","arrayFill","arrayCopyWithin","$DP","$GOPD","RangeError","ArrayProto","$ArrayBuffer","$DataView","arrayForEach","arrayFind","arrayFindIndex","arrayIndexOf","arrayValues","arrayKeys","arrayEntries","arrayLastIndexOf","arrayJoin","arraySort","arraySlice","arrayToString","arrayToLocaleString","toLocaleString","ITERATOR","TAG","TYPED_CONSTRUCTOR","DEF_CONSTRUCTOR","ALL_CONSTRUCTORS","CONSTR","TYPED_ARRAY","TYPED","VIEW","$map","allocate","LITTLE_ENDIAN","Uint16Array","FORCED_SET","toOffset","BYTES","validate","C","speciesFromList","list","fromList","addGetter","internal","_d","$from","aLen","mapfn","mapping","iterFn","$of","TO_LOCALE_BUG","$toLocaleString","copyWithin","searchElement","middle","comparefn","subarray","begin","$begin","BYTES_PER_ELEMENT","$slice","$set","arrayLike","src","$iterators","isTAIndex","$getDesc","$setDesc","desc","configurable","writable","$TypedArrayPrototype$","CLAMPED","GETTER","SETTER","TypedArray","Base","TAC","FORCED","ABV","TypedArrayPrototype","addElement","v","$offset","$length","klass","$len","iter","$nativeIterator","CORRECT_ITER_NAME","$iterator","of","from","Vatom","payload","faces","otherVatom","isFolder","isDefinedFolder","policies","templateVariation","template_variation","maxCount","creation_policy","policy_count_max","enforceMaxCount","enforce_policy_count_max","constraints","platform","view_mode","unpublished","sync","when_created","when_modified","META","setDesc","isExtensible","FREEZE","preventExtensions","setMeta","w","meta","NEED","fastKey","getWeak","onFreeze","BLOCKvRegion","dataPool","queuedMessages","socketPaused","socketProcessing","onWebSocketMessage","socket","Blockv","WebSockets","connect","addEventListener","DataObjectAnimator","withBlockv","addRegion","removeEventListener","removeRegion","processNextMessage","msg","shift","processMessage","msg_type","new_object","updateObjects","new_data","objects","parent_id","Delayer","nextUpdate","changes","u","oldParent","newParent","keyPath","oldValue","objectOrID","Region","EventEmitter","eventName","privateEventListeners","removeAfterCall","when","callbacks","passArguments","otherClass","bitmap","px","$keys","enumBugKeys","dPs","Empty","createDict","iframeDocument","iframe","display","appendChild","contentWindow","open","write","close","Properties","hiddenKeys","getOwnPropertyNames","ObjectProto","UNSCOPABLES","_t","pna","objectKeys","obj","Duplex","inherits","Readable","Writable","readable","allowHalfOpen","onend","_writableState","ended","onEndNT","highWaterMark","_readableState","destroyed","_destroy","cb","def","stat","spaces","space","ltrim","rtrim","exporter","ALIAS","FORCE","DESCRIPTORS","SPECIES","Constructor","forbiddenField","ctor","superCtor","super_","TempCtor","base64_url_decode","InvalidTokenError","token","pos","header","JSON","parse","cof","ARG","T","tryGet","callee","D","isNullOrUndefined","re","isPrimitive","Discover","bv","customPayload","overridePayload","filters","FieldTemplateVariation","scope","auth","setScopeToOwnedVatomsOnly","samples","field","compareOperation","combineOperation","filter_op","FilterOperation","Equal","bool_op","CombineOperation","And","fqdn","FieldPublisherFqdn","FieldOwner","group_by","filter_elems","fields","client","request","getPayload","then","results","actionsArray","facesArray","vatomsArray","aName","aKey","GreaterThan","GreaterOrEqual","LessThan","LessOrEqual","NotEqual","Match","Or","FieldAcquireable","FieldPrivateName","FieldID","FieldTemplate","FieldVisibilityType","FieldParentID","User","user","firstName","first_name","lastName","last_name","namePublic","name_public","avatarUri","avatar_uri","avatarPublic","avatar_public","birthday","language","nonPushNotification","nonpush_notification","guestId","guest_id","isPasswordSet","is_password_set","activated","system_properties","isAdmin","is_admin","isMerchant","is_merchant","lastLogin","last_login","pubFqdn","pub_fqdn","rawPayload","consents","user_consents","createdBy","created_by","dataType","data_type","modifiedBy","modified_by","whenCreated","whenModified","getOwnPropertyDescriptors","descriptors","formatRegExp","str","x","Number","stringify","deprecate","noDeprecation","warned","throwDeprecation","traceDeprecation","trace","debugEnviron","debugs","opts","stylize","stylizeNoColor","colors","showHidden","_extend","customInspect","stylizeWithColor","formatValue","styleType","styles","recurseTimes","ret","primitive","simple","formatPrimitive","visibleKeys","hash","idx","arrayToHash","formatError","output","base","braces","toUTCString","formatProperty","formatArray","prev","cur","numLinesEst","reduceToSingleString","line","substr","ar","debuglog","NODE_DEBUG","pid","months","timestamp","getHours","getMinutes","getSeconds","getDate","getMonth","origin","kCustomPromisifiedSymbol","callbackifyOnRejected","reason","newReason","promisify","original","promiseResolve","promiseReject","promise","setPrototypeOf","defineProperties","custom","callbackify","callbackified","maybeCb","rej","copyright","IS_INCLUDES","el","SAFE_CLOSING","riter","skipClosing","ignoreCase","multiline","unicode","sticky","builtinExec","regexpExec","REPLACE_SUPPORTS_NAMED_GROUPS","groups","SPLIT_WORKS_WITH_OVERWRITTEN_EXEC","originalExec","SYMBOL","DELEGATES_TO_SYMBOL","DELEGATES_TO_EXEC","execCalled","nativeRegExpMethod","fns","nativeMethod","arg2","forceStringMethod","strfn","rxfn","BREAK","RETURN","navigator","userAgent","forOf","setToStringTag","inheritIfRequired","methods","common","IS_WEAK","ADDER","fixMethod","instance","HASNT_CHAINING","THROWS_ON_PRIMITIVES","ACCEPT_ITERABLES","BUGGY_ZERO","$instance","getConstructor","setStrong","Typed","TypedArrayConstructors","base64","ieee754","kMaxLength","TYPED_ARRAY_SUPPORT","createBuffer","__proto__","encodingOrOffset","fromArrayLike","fromArrayBuffer","encoding","isEncoding","actual","fromString","checked","fromObject","assertSize","isView","loweredCase","utf8ToBytes","base64ToBytes","slowToString","hexSlice","utf8Slice","asciiSlice","latin1Slice","base64Slice","utf16leSlice","swap","bidirectionalIndexOf","indexSize","valLength","read","buf","readUInt16BE","foundIndex","found","j","hexWrite","strLen","parsed","utf8Write","blitBuffer","asciiWrite","byteArray","asciiToBytes","latin1Write","base64Write","ucs2Write","units","hi","lo","utf16leToBytes","fromByteArray","secondByte","thirdByte","fourthByte","tempCodePoint","firstByte","codePoint","bytesPerSequence","codePoints","fromCharCode","decodeCodePointsArray","SlowBuffer","alloc","INSPECT_MAX_BYTES","foo","typedArraySupport","poolSize","_augment","species","allocUnsafeSlow","_isBuffer","compare","y","swap16","swap32","swap64","equals","thisStart","thisEnd","thisCopy","targetCopy","_arr","toHex","bytes","checkOffset","ext","checkInt","objectWriteUInt16","littleEndian","objectWriteUInt32","checkIEEE754","writeFloat","noAssert","writeDouble","newBuf","sliceLen","readUIntLE","mul","readUIntBE","readUInt8","readUInt16LE","readUInt32LE","readUInt32BE","readIntLE","pow","readIntBE","readInt8","readInt16LE","readInt16BE","readInt32LE","readInt32BE","readFloatLE","readFloatBE","readDoubleLE","readDoubleBE","writeUIntLE","writeUIntBE","writeUInt8","writeUInt16LE","writeUInt16BE","writeUInt32LE","writeUInt32BE","writeIntLE","sub","writeIntBE","writeInt8","writeInt16LE","writeInt16BE","writeInt32LE","writeInt32BE","writeFloatLE","writeFloatBE","writeDoubleLE","writeDoubleBE","targetStart","code","INVALID_BASE64_RE","leadSurrogate","toByteArray","stringtrim","base64clean","dst","arg1","arg3","logify_input","titleFormat","isNodejs","option_keys","is_warning","is_usage","is_internal","parseArguments","msgs","IS_REASSERT_OPTS","getErrorMessage","condition","callStack","getErrorDetailsMessage","is_browser","getStackMessage","getErrorSummaryMessage","throwError","interupt_execution","throw__browser","stackTraceLimit","getCallStack","stackTraceLimit__original","callStackString","lines","lines__filtered","required","qs","slashes","protocolre","left","trimLeft","rules","address","NaN","ignore","query","lolcation","loc","location","finaldestination","protocol","Url","pathname","href","extractProtocol","parser","relative","extracted","instruction","instructions","url","unshift","up","port","host","hostname","username","password","part","char","ins","Icon","Engaged","Fullscreen","Card","LZUTF8","runningInNodeJS","node","runningInMainNodeJSModule","commonJSAvailable","runningInWebWorker","runningInNodeChildProcess","send","runningInNullOrigin","webWorkersAvailable","Worker","appendToDocument","body","innerHTML","createErrorMessage","exception","content","exceptionJSON","printExceptionAndStackTraceToConsole","getGlobalObject","globalObject","AsyncCompressor","compressAsync","Timer","compressor","Compressor","encodeUTF8","sourceBlocks","ArrayTools","splitByteArray","blockSize","compressedBlocks","compressBlocksStartingAt","compressedBlock","compressBlock","getElapsedTime","enqueueImmediate","restart","joinedCompressedBlocks_1","concatUint8Arrays","CompressionCommon","encodeCompressedBytes","outputEncoding","createCompressionStream","compressionStream","Transform","decodeStrings","_transform","BufferTools","uint8ArrayToBuffer","bufferToUint8Array","AsyncDecompressor","decompressAsync","decodeCompressedBytes","inputEncoding","decompressor","Decompressor","decompressedBlocks","decompressBlocksStartingAt","decompressedBlock","decompressBlock","joinedDecompressedBlocks_1","encodeDecompressedBytes","createDecompressionStream","decompressionStream","WebWorker","responseListener","response","globalWorker","postMessage","installWebWorkerIfNeeded","compressedData","compress","appVersion","decompressedData","decompress","createGlobalWorkerIfNeeded","scriptURI","scriptElement","getElementById","getAttribute","terminate","ArraySegment","container","startPosition","getInReversedOrder","reverseIndex","copyElements","sourceIndex","destination","destinationIndex","zeroElements","countNonzeroValuesInArray","truncateStartingElements","truncatedLength","sourcePosition","doubleByteArrayCapacity","newArray","totalLength","_i","arrays_1","_a","arrays_2","maxPartLength","blockLength","convertToUint8ArrayIfNeeded","arrClone","getCroppedBuffer","cropStartOffset","cropLength","additionalCapacity","croppedBuffer","getCroppedAndAppendedByteArray","byteArrayToAppend","detectCompressionSourceEncoding","compressedBytes","encodeBase64","encodeBinaryString","encodeStorageBinaryString","normalizedBytes","decodeBase64","decodeBinaryString","decodeStorageBinaryString","decompressedBytes","decodeUTF8","EventLoop","asyncFlushFunc","queuedFunctions","initializeScheduler","queuedFunctions_1","setImmediate","targetOrigin_1","token_1","event","MessageChannel","MessagePort","channel_1","port1","onmessage","port2","ObjectTools","override","newPropertyValues","newProperties","getRandomIntegerInRange","getRandomUTF16StringOfLength","randomString","randomCodePoint","Encoding","CodePoint","decodeToString","StringBuilder","outputBufferCapacity","outputPosition","outputString","outputBuffer","appendCharCode","charCode","flushBufferToOutputString","appendCharCodes","charCodes","length_1","appendString","length_2","appendCodePoint","getOutputString","startTime","getTimestamp","getElapsedTimeAndRestart","elapsedTime","logAndRestart","logToDocument","toFixed","timestampFunc","createGlobalTimestampFunction","getMicrosecondTimestamp","hrtime","baseTimestamp_1","nodeTimeStamp","millisecondTime","chrome","Interval","baseTimestamp_2","chromeIntervalObject_1","microseconds","performance","baseTimestamp_3","getTime","useCustomHashTable","MinimumSequenceLength","MaximumSequenceLength","MaximumMatchDistance","PrefixHashTableSize","inputBufferStreamOffset","Uint32Array","prefixHashTable","CompressorCustomHashTable","CompressorSimpleHashTable","compressUtf8Block","utf8Bytes","bufferStartingReadOffset","cropAndAddNewBytesToInputBuffer","inputBuffer","inputBufferLength","outputBufferPosition","latestMatchEndPosition","readPosition","inputValue","withinAMatchedRange","outputRawByte","targetBucketIndex","getBucketIndexForPrefix","matchLocator","findLongestMatch","outputPointerBytes","distance","inputStreamPosition","addValueToBucket","matchedSequencePosition","bucketIndex","bucket","getArraySegmentForBucketIndex","reusableArraySegmentObject","longestMatchDistance","longestMatchLength","testedSequencePosition","testedSequenceDistance","lengthToSurpass","newInput","bucketCount","minimumBucketCapacity","maximumBucketCapacity","bucketLocators","storage","storageIndex","valueToAdd","truncateBucketToNewerElements","endPosition","bucketLength","truncatedBucketLength","oldBucketLocators","oldStorage","length_3","destPosition","length_4","outputObject","getUsedBucketCount","getTotalElementCount","buckets","currentSum","decompressBlockToString","inputBufferRemainder","outputStartPosition","cropOutputBufferToWindowAndInitialize","inputLength","sequenceLengthIdentifier","outputByte","matchLength","matchDistance","matchPosition","rollBackIfOutputBufferEndsWithATruncatedMultibyteSequence","initialCapacity","outputBufferRemainder","Base64","charCodeMap","reverseCharCodeMap","encode","inputBytes","encodeWithJS","decode","base64String","decodeWithJS","addPadding","uint24","length_5","lengthModulo4","paddingCharacter","BinaryString","outputStringBuilder","state","appendToOutput","encodeFromString","nextCharCode","DecimalString","lookupTable","binaryBytes","resultArray","StorageBinaryString","UTF8","nativeTextEncoder","nativeTextDecoder","createNativeTextEncoderAndDecoderIfAvailable","outputArray","writeIndex","readIndex","startOffset","endOffset","outputCodePoint","leadByte","length_6","TextEncoder","TextDecoder","useWebWorker","normalizedInput","blockv","regions","updateTimer","timeSkew","animator","action_name","nextPositions","next_positions","updates","geo_pos","earliestTime","clearUpdatesFor","region","isMonitoringID","setInterval","doNextUpdate","afterTime","clearInterval","change","is","shared","documentElement","check","buggy","sign","$expm1","expm1","TO_STRING","$iterCreate","BUGGY","returnThis","DEFAULT","IS_SET","IteratorPrototype","getMethod","kind","DEF_VALUES","VALUES_BUG","$native","$default","$entries","$anyNative","searchString","MATCH","$defineProperty","getIteratorMethod","endPos","addToUnscopables","iterated","_k","Arguments","re1","re2","regexpFlags","nativeExec","nativeReplace","patchedExec","UPDATES_LAST_INDEX_WRONG","NPCG_INCLUDED","reCopy","channel","html","cel","setTask","clearTask","clearImmediate","Dispatch","counter","listener","importScripts","removeChild","BaseBuffer","abs","LN2","$BUFFER","$LENGTH","$OFFSET","packIEEE754","mLen","nBytes","eLen","eMax","eBias","rt","unpackIEEE754","nBits","unpackI32","packI8","packI16","packI32","packF64","packF32","isLittleEndian","intIndex","_b","pack","conversion","ArrayBufferProto","$setInt8","setInt8","getInt8","setUint8","bufferLength","getUint8","getInt16","getUint16","getInt32","getUint32","getFloat32","getFloat64","setInt16","setUint16","setInt32","setUint32","setFloat32","setFloat64","ReflectOwnKeys","Reflect","ReflectApply","receiver","ownKeys","NumberIsNaN","init","_events","_eventsCount","_maxListeners","defaultMaxListeners","$getMaxListeners","_addListener","prepend","events","existing","warning","newListener","emitter","onceWrapper","fired","wrapFn","_onceWrap","_listeners","unwrap","evlistener","unwrapListeners","arrayClone","listenerCount","setMaxListeners","getMaxListeners","doError","er","handler","originalListener","spliceOne","rawListeners","eventNames","Stream","PassThrough","copyProps","SafeBuffer","CorkedRequest","_this","finish","corkReq","pendingcb","corkedRequestsFree","onCorkedFinish","asyncWrite","WritableState","internalUtil","OurUint8Array","realHasInstance","destroyImpl","nop","stream","isDuplex","objectMode","writableObjectMode","hwm","writableHwm","writableHighWaterMark","defaultHwm","finalCalled","needDrain","ending","finished","noDecode","defaultEncoding","writing","corked","bufferProcessing","onwrite","writecb","writelen","onwriteStateUpdate","finishMaybe","errorEmitted","onwriteError","needFinish","bufferedRequest","clearBuffer","afterWrite","lastBufferedRequest","prefinished","bufferedRequestCount","_write","writev","_writev","destroy","final","_final","doWrite","onwriteDrain","holder","allBuffers","isBuf","callFinal","need","prefinish","getBuffer","hasInstance","pipe","_uint8ArrayToBuffer","writeAfterEnd","valid","validChunk","newChunk","decodeChunk","writeOrBuffer","cork","uncork","setDefaultEncoding","endWritable","_undestroy","undestroy","_eventListeners","onSuccess","onFail","_removeAfterCall","GeoPosRegion","coordinates","noCache","top_right","lat","lon","bottom_left","sendRegionCommand","onWebSocketOpen","onTimer","forceSynchronize","isOpen","cmd","top_left","bottom_right","sendMessage","dropped","descriptor","pauseMessages","publisher_fqdn","vatoms","addObjects","resumeMessages","op","ids","vatom_id","preemptiveChange","vatomID","wksExt","$Symbol","names","getKeys","windowNames","getWindowNames","gOPS","$assign","A","K","k","isEnum","factories","construct","partArgs","bound","un","$parseInt","$trim","ws","hex","$parseFloat","log1p","memo","to","inc","forced","flags","Internal","newGenericPromiseCapability","OwnPromiseCapability","Wrapper","task","microtask","newPromiseCapabilityModule","perform","v8","$Promise","isNode","empty","newPromiseCapability","USE_NATIVE","FakePromise","PromiseRejectionEvent","isThenable","notify","isReject","_n","_c","_v","_s","reaction","exited","fail","domain","_h","onHandleUnhandled","enter","exit","onUnhandled","unhandled","isUnhandled","onunhandledrejection","onrejectionhandled","$reject","_w","$resolve","executor","onFulfilled","onRejected","capability","$$reject","all","$index","alreadyCalled","race","PromiseCapability","$$resolve","promiseCapability","$iterDefine","SIZE","getEntry","_f","_l","$has","uncaughtFrozenStore","UncaughtFrozenStore","findUncaughtFrozen","ufstore","fillString","stringLength","fillStr","intMaxLength","fillLen","stringFiller","isEntries","webpackPolyfill","children","Timeout","clearFn","_id","_clearFn","unref","ref","enroll","item","msecs","_idleTimeoutId","_idleTimeout","unenroll","_unrefActive","active","_onTimeout","EE","dest","ondata","pause","ondrain","resume","_isStdio","onclose","didOnEnd","onerror","cleanup","ReadableState","EElistenerCount","debugUtil","debug","StringDecoder","BufferList","kProxyEvents","readableObjectMode","readableHwm","readableHighWaterMark","pipes","pipesCount","flowing","endEmitted","reading","needReadable","emittedReadable","readableListening","resumeScheduled","awaitDrain","readingMore","decoder","_read","readableAddChunk","addToFront","skipChunkCheck","emitReadable","onEofChunk","chunkInvalid","addChunk","maybeReadMore","needMoreData","isPaused","setEncoding","enc","howMuchToRead","computeNewHighWaterMark","emitReadable_","maybeReadMore_","nReadingNextTick","resume_","hasStrings","nb","copyFromBufferString","copyFromBuffer","fromListPartial","endReadable","endReadableNT","xs","nOrig","doRead","pipeOpts","endFn","stdout","stderr","unpipe","onunpipe","unpipeInfo","hasUnpiped","onfinish","cleanedUp","pipeOnDrain","increasedAwaitDrain","dests","ev","paused","_fromList","emitErrorNT","readableDestroyed","writableDestroyed","nenc","retried","_normalizeEncoding","normalizeEncoding","text","utf16Text","utf16End","fillLast","utf8FillLast","base64Text","base64End","simpleWrite","simpleEnd","lastNeed","lastTotal","lastChar","utf8CheckByte","byte","utf8CheckExtraBytes","total","utf8CheckIncomplete","afterTransform","ts","_transformState","transforming","writechunk","rs","needTransform","writeencoding","_flush","_this2","err2","stringify_object","input_str","toStr","get_str","obj_copy","get_prettier_copy","parent_objects","el_copy","thing","tableFormat","rows","padding","indent","columnWidths","cells","cell","columnNumber","getStringWidth","colWidth","paddingRight","getBar","assert_warning","titleWidth","barWidth","leftWidth","bar","title_bar","stringWidth","eval","filler","_syncPromise","synchronize","_synchronize","stateKey","load","loadedIDs","keysToRemove","removeObjects","existingObject","willUpdateFields","willAdd","didUpdate","willRemove","info","waitUntilStable","items","getItem","willUpdateField","Filter","_objects","LocalStorageMap","Database","noStore","loaded","compressed","localStorage","Blob","URL","blob","atob","LZUTF8WorkerScript","createObjectURL","uncompressed","row","thisValue","saveSoon","itm","getExtra","saveInterval","saveTimer","changesStillOccurring","save","startedAt","Store","serverAddress","userid","jwtDecode","refreshToken","user_id","APPID","appid","wssocketAddress","websocAddress","accessToken","refresh","privateRefreshToken","setItem","rT","provider","privateAssetProvider","UserApi","registration","access_token","refresh_token","assetProvider","asset_provider","userID","setSessionInfo","tokenType","token_type","auth_data","verification","noRequest","aP","aPlen","urlParse","comparethis","uri","queryString","mapString","tokenId","appID","stateID","redirectURI","encodeURIComponent","newWindow","promiseResolved","promiseSuccess","promiseFail","closeChecker","closed","messageListener","oauthObj","oa","setRefreshToken","getCurrentUser","profile","assetProviders","error_text","ErrorCodes","2","17","401","516","517","521","527","1004","1701","1708","2030","2031","2032","2034","2037","2049","2051","2552","2553","2562","2563","2564","2566","2567","2569","2571","2572","Client","endpoint","headers","checkToken","authRequest","t0","statekey","server","FormData","extraHeaders","json","fetch","t1","milliseconds","dateString","lockedUntil","status","httpStatus","requestID","request_id","serverMessage","main","Code","Msg","tokenFetchPromise","Authorization","UserManager","logout","decodedToken","expirationTime","isBrowser","usage","delayTime","shouldRetry","retryConnection","WebSocket","handleConnected","handleMessage","handleError","handleClose","readyState","ed","trigger","retryTimer","registeredFace","ImageFace","ProgressImage","ImagePolicy","LayeredImage","VatomView","vAtom","FSP","config","vatomObj","fsp","FaceSelection","_currentFace","onVatomUpdated","createLoader","loader","css","getElementsByTagName","styleSheet","cssText","createTextNode","createErrorView","errorView","bvi","con","resources","du","encodeAssetProvider","backgroundSize","backgroundPosition","backgroundRepeat","backgroundImage","alert","onUnload","firstChild","parentNode","rFace","st","FaceClass","display_url","excludedFaces","BaseWebFace","opacity","onLoad","sendRequest","faceClass","srcWidth","srcHeight","maxWidth","maxHeight","ratio","img","onload","overflow","fillContainer","percentContainer","baseImg","empty_image","activatedImg","full_image","waitForImage","imgs","score","cloning_score","paddingStart","padding_start","paddingEnd","padding_end","direction","invertedScore","top","updateImage","scale","resourceName","image","resource","iurl","showImage","image_policy","policy","count_max","keyValue","refreshImage","image_mode","imageURL","reloadImages","encodeUrl","layerImage","getLayerImage","newImages","createImageNode","imagePromises","child","images","div","pendingRequests","setAttribute","owner","getPublicUserProfile","BridgeV1","BridgeV2","observeListenerSet","listChildren","onIncomingBridgeMessage","observeChildren","getChildren","rpc","performAction","getUser","patchVatom","getVatom","getUserProfile","getVatomChildren","vatomParentSet","encodeResource","onMessage","responseID","response_id","error_message","error_code","processIncomingBridgeMessage","resp","sendV2Message","sendv1Message","_responseName","errorCode","errorText","isRequest","vatomInfo","faceProperties","encodeVatom","mapVatom","vatomStateChanged","uv","encodeUser","Vatoms","vatomInfos","Events","callEvent","actionData","actionName","avatarURL","getUserVatoms","us","pu","avatarURI","setParent","pId","new_parent_id","vId","getCurrentUserTokens","tokens","is_guest","has_email","has_phone","has_verified_email","confirmed","has_verified_phone","encodedUrls","urls","eur","_global","_babelPolyfill","objectAssign","hasOwn","pSlice","functionsHaveNames","pToString","arrbuf","regex","getName","something","rawname","expected","stackStartFunction","AssertionError","_deepEqual","strict","memos","Float32Array","Float64Array","actualIndex","actualVisitedObjects","aIsArgs","bIsArgs","ka","kb","objEquiv","expectedException","isPrototypeOf","_throws","shouldThrow","block","_tryBlock","userProvidedMessage","isUnexpectedException","generatedMessage","getMessage","captureStackTrace","fn_name","next_line","equal","notEqual","deepEqual","deepStrictEqual","notDeepEqual","notDeepStrictEqual","strictEqual","notStrictEqual","throws","doesNotThrow","ifError","propIsEnumerable","test1","test2","test3","letter","shouldUseNative","symbols","$fails","wksDefine","enumKeys","_create","gOPNExt","$GOPS","$JSON","_stringify","HIDDEN","TO_PRIMITIVE","SymbolRegistry","AllSymbols","OPSymbols","QObject","findChild","setSymbolDesc","protoDesc","sym","$defineProperties","$propertyIsEnumerable","E","$getOwnPropertyDescriptor","$getOwnPropertyNames","$getOwnPropertySymbols","IS_OP","es6Symbols","wellKnownSymbols","keyFor","useSetter","useSimple","FAILS_ON_PRIMITIVES","replacer","$replacer","$getPrototypeOf","$freeze","$seal","$preventExtensions","$isFrozen","$isSealed","$isExtensible","FProto","nameRE","HAS_INSTANCE","FunctionProto","$Number","BROKEN_COF","TRIM","argument","third","maxCode","digits","aNumberValue","$toFixed","ERROR","c2","numToString","acc","fractionDigits","z","x2","$toPrecision","toPrecision","EPSILON","_isFinite","MAX_SAFE_INTEGER","MIN_SAFE_INTEGER","sqrt","$acosh","acosh","MAX_VALUE","$asinh","asinh","$atanh","atanh","cbrt","clz32","LOG2E","cosh","fround","EPSILON32","MAX32","MIN32","$abs","$sign","hypot","value1","value2","larg","$imul","imul","xn","yn","xl","yl","log10","LOG10E","log2","sinh","tanh","trunc","$fromCodePoint","fromCodePoint","raw","callSite","tpl","$at","point","codePointAt","$endsWith","$startsWith","color","toISOString","pv","$toISOString","lz","num","getUTCFullYear","getUTCMilliseconds","getUTCMonth","getUTCDate","getUTCHours","getUTCMinutes","getUTCSeconds","DateProto","hint","createProperty","upTo","cloned","$sort","$forEach","STRICT","$filter","$some","$every","$reduce","$indexOf","NEGATIVE_ZERO","$find","$flags","$RegExp","CORRECT_NEW","tiRE","piRE","fiU","proxy","define","advanceStringIndex","regExpExec","$match","maybeCallNative","rx","fullUnicode","matchStr","SUBSTITUTION_SYMBOLS","SUBSTITUTION_SYMBOLS_NO_NAMED","REPLACE","$replace","searchValue","replaceValue","functionalReplace","accumulatedResult","nextSourcePosition","matched","captures","namedCaptures","replacerArgs","replacement","getSubstitution","tailPos","ch","capture","sameValue","SEARCH","$search","previousLastIndex","callRegExpExec","$min","$push","SUPPORTS_Y","SPLIT","$split","internalSplit","lastLength","lastLastIndex","splitLimit","separatorCopy","splitter","unicodeMatching","lim","q","macrotask","Observer","MutationObserver","WebKitMutationObserver","standalone","toggle","observe","characterData","strong","InternalMap","weak","NATIVE_WEAK_MAP","IS_IE11","ActiveXObject","$WeakMap","$isView","fin","viewS","viewT","rApply","fApply","thisArgument","argumentsList","L","rConstruct","NEW_TARGET_BUG","ARGS_BUG","Target","newTarget","$args","propertyKey","attributes","deleteProperty","Enumerate","enumerate","getProto","V","existingDescriptor","ownDesc","setProto","$includes","flattenIntoArray","arraySpeciesCreate","sourceLen","IS_CONCAT_SPREADABLE","mapper","spreadable","targetIndex","mapFn","$pad","WEBKIT_BUG","trimRight","getDesc","$values","onFinally","MSIE","boundArgs","$task","TO_STRING_TAG","ArrayValues","DOMIterables","CSSRuleList","CSSStyleDeclaration","CSSValueList","ClientRectList","DOMRectList","DOMStringList","DOMTokenList","DataTransferItemList","FileList","HTMLAllCollection","HTMLCollection","HTMLFormElement","HTMLSelectElement","MediaList","MimeTypeArray","NamedNodeMap","NodeList","PaintRequestList","Plugin","PluginArray","SVGLengthList","SVGNumberList","SVGPathSegList","SVGPointList","SVGStringList","SVGTransformList","SourceBufferList","StyleSheetList","TextTrackCueList","TextTrackList","TouchList","collections","explicit","Collection","runtime","Op","iteratorSymbol","asyncIteratorSymbol","asyncIterator","toStringTagSymbol","innerFn","outerFn","tryLocsList","protoGenerator","Generator","generator","Context","_invoke","doneResult","delegate","delegateResult","maybeInvokeDelegate","ContinueSentinel","sent","_sent","dispatchException","abrupt","record","tryCatch","makeInvokeMethod","GeneratorFunction","GeneratorFunctionPrototype","NativeIteratorPrototype","Gp","defineIteratorMethods","AsyncIterator","previousPromise","callInvokeWithMethodAndArg","__await","unwrapped","resultName","nextLoc","pushTryEntry","locs","tryLoc","catchLoc","finallyLoc","afterLoc","tryEntries","resetTryEntry","completion","reset","iteratorMethod","displayName","isGeneratorFunction","genFun","mark","awrap","async","skipTempReset","stop","rootRecord","rval","handle","caught","hasCatch","hasFinally","finallyEntry","complete","thrown","delegateYield","regeneratorRuntime","accidentalStrictMode","IS_WRAP","virtual","InventoryRegion","sessionInfo","currentUserID","loadV2","loadV2FacesActions","loadV1","templateIDs","lastStableSync","maxPerRequest","allChanges","templates","since","actions_changes","templateID","operation","faces_changes","clearCacheForTemplates","objectTemplate","setExtra","disableSyncV2","currentHash","serverHashReq","allSyncs","page","nextToken","next_token","idsToFetch","syncInfo","VatomsPerPage","remainingIds","newObjects","pageCount","old_owner","new_owner","vatomRef","onObjectPreemptivelyChanged","LZString","keyStrBase64","keyStrUriSafe","baseReverseDic","getBaseValue","alphabet","character","compressToBase64","_compress","decompressFromBase64","_decompress","compressToUTF16","decompressFromUTF16","compressToUint8Array","TotalLen","current_value","decompressFromUint8Array","compressToEncodedURIComponent","decompressFromEncodedURIComponent","bitsPerChar","getCharFromInt","ii","context_dictionary","context_dictionaryToCreate","context_c","context_wc","context_w","context_enlargeIn","context_dictSize","context_numBits","context_data","context_data_val","context_data_position","resetValue","getNextValue","bits","resb","maxpower","power","dictionary","enlargeIn","dictSize","numBits","b64","lens","getLens","validLen","placeHoldersLen","tmp","Arr","_byteLength","curByte","revLookup","uint8","extraBytes","parts","len2","encodeChunk","lookup","isLE","registerImmediate","messagePrefix","onGlobalMessage","nextHandle","tasksByHandle","currentlyRunningATask","doc","attachTo","runIfPresent","postMessageIsAsynchronous","oldOnMessage","canUsePostMessage","script","onreadystatechange","attachEvent","_classCallCheck","decodeURIComponent","VatomIDRegion","VatomChildrenRegion","parentID","setScope","b64DecodeUnicode","InvalidCharacterError","bs","bc","assert_internal","assert_usage","stripAnsi","isFullwidthCodePoint","ansiRegex","DataPool","plugins","onSessionInfoChanged","sizeBytes","estimatedSize","removeItem","register","login","loginGuest","loginOAuthPopup","getUserTokens","formData","uploadAvatar","updateUser","getAccessToken","sendTokenVerification","getRefreshToken","verify","verifyUserToken","addUserToken","tokenID","setDefaultToken","deleteUserToken","getGuestToken","resetPassword","addRedeemable","VatomApi","template_id","return","vatomApi","getActions","vatomId","phoneNumber","email","undos","undo","newParentID","vatomIds","bottomLeft","topRight","geoDiscover","geoDiscoverGroups","childID","parentPayload","trashVatom","Activity","activityApi","threads","threadMessages","ActivityApi","cursor","MultiWebSockets","sockets","addresses","websocketAddress","triggerEvent","userApi","isLoggedIn"],"mappings":"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","file":"blockv-faces.min.js","sourcesContent":[" \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 181);\n","var global = require('./_global');\nvar core = require('./_core');\nvar hide = require('./_hide');\nvar redefine = require('./_redefine');\nvar ctx = require('./_ctx');\nvar PROTOTYPE = 'prototype';\n\nvar $export = function (type, name, source) {\n var IS_FORCED = type & $export.F;\n var IS_GLOBAL = type & $export.G;\n var IS_STATIC = type & $export.S;\n var IS_PROTO = type & $export.P;\n var IS_BIND = type & $export.B;\n var target = IS_GLOBAL ? global : IS_STATIC ? global[name] || (global[name] = {}) : (global[name] || {})[PROTOTYPE];\n var exports = IS_GLOBAL ? core : core[name] || (core[name] = {});\n var expProto = exports[PROTOTYPE] || (exports[PROTOTYPE] = {});\n var key, own, out, exp;\n if (IS_GLOBAL) source = name;\n for (key in source) {\n // contains in native\n own = !IS_FORCED && target && target[key] !== undefined;\n // export native or passed\n out = (own ? target : source)[key];\n // bind timers to global for call from export context\n exp = IS_BIND && own ? ctx(out, global) : IS_PROTO && typeof out == 'function' ? ctx(Function.call, out) : out;\n // extend global\n if (target) redefine(target, key, out, type & $export.U);\n // export\n if (exports[key] != out) hide(exports, key, exp);\n if (IS_PROTO && expProto[key] != out) expProto[key] = out;\n }\n};\nglobal.core = core;\n// type bitmap\n$export.F = 1; // forced\n$export.G = 2; // global\n$export.S = 4; // static\n$export.P = 8; // proto\n$export.B = 16; // bind\n$export.W = 32; // wrap\n$export.U = 64; // safe\n$export.R = 128; // real proto method for `library`\nmodule.exports = $export;\n","\r\n/**\r\n * Represents a raw data object, potentially without any data, which is monitored by a region.\r\n */\r\nexport default class DataObject {\r\n\r\n constructor(type, id, data) {\r\n\r\n /** Object type */\r\n this.type = type\r\n\r\n /** Object identifier */\r\n this.id = id\r\n\r\n /** Object revision, if any */\r\n this.rev = null\r\n\r\n /** Object payload, if any */\r\n this.data = data\r\n\r\n /** \r\n * Cached object. Plugins map this raw data object to their own types, this is used to cache\r\n * those types if there have been no changes.\r\n */\r\n this.cached = null\r\n\r\n }\r\n\r\n}","// https://github.com/zloirock/core-js/issues/86#issuecomment-115759028\nvar global = module.exports = typeof window != 'undefined' && window.Math == Math\n ? window : typeof self != 'undefined' && self.Math == Math ? self\n // eslint-disable-next-line no-new-func\n : Function('return this')();\nif (typeof __g == 'number') __g = global; // eslint-disable-line no-undef\n","module.exports = function (exec) {\n try {\n return !!exec();\n } catch (e) {\n return true;\n }\n};\n","var isObject = require('./_is-object');\nmodule.exports = function (it) {\n if (!isObject(it)) throw TypeError(it + ' is not an object!');\n return it;\n};\n","module.exports = function (it) {\n return typeof it === 'object' ? it !== null : typeof it === 'function';\n};\n","var store = require('./_shared')('wks');\nvar uid = require('./_uid');\nvar Symbol = require('./_global').Symbol;\nvar USE_SYMBOL = typeof Symbol == 'function';\n\nvar $exports = module.exports = function (name) {\n return store[name] || (store[name] =\n USE_SYMBOL && Symbol[name] || (USE_SYMBOL ? Symbol : uid)('Symbol.' + name));\n};\n\n$exports.store = store;\n","/*global window, global*/\nvar util = require(\"util\")\nvar assert = require(\"assert\")\nvar now = require(\"date-now\")\n\nvar slice = Array.prototype.slice\nvar console\nvar times = {}\n\nif (typeof global !== \"undefined\" && global.console) {\n console = global.console\n} else if (typeof window !== \"undefined\" && window.console) {\n console = window.console\n} else {\n console = {}\n}\n\nvar functions = [\n [log, \"log\"],\n [info, \"info\"],\n [warn, \"warn\"],\n [error, \"error\"],\n [time, \"time\"],\n [timeEnd, \"timeEnd\"],\n [trace, \"trace\"],\n [dir, \"dir\"],\n [consoleAssert, \"assert\"]\n]\n\nfor (var i = 0; i < functions.length; i++) {\n var tuple = functions[i]\n var f = tuple[0]\n var name = tuple[1]\n\n if (!console[name]) {\n console[name] = f\n }\n}\n\nmodule.exports = console\n\nfunction log() {}\n\nfunction info() {\n console.log.apply(console, arguments)\n}\n\nfunction warn() {\n console.log.apply(console, arguments)\n}\n\nfunction error() {\n console.warn.apply(console, arguments)\n}\n\nfunction time(label) {\n times[label] = now()\n}\n\nfunction timeEnd(label) {\n var time = times[label]\n if (!time) {\n throw new Error(\"No such label: \" + label)\n }\n\n var duration = now() - time\n console.log(label + \": \" + duration + \"ms\")\n}\n\nfunction trace() {\n var err = new Error()\n err.name = \"Trace\"\n err.message = util.format.apply(null, arguments)\n console.error(err.stack)\n}\n\nfunction dir(object) {\n console.log(util.inspect(object) + \"\\n\")\n}\n\nfunction consoleAssert(expression) {\n if (!expression) {\n var arr = slice.call(arguments, 1)\n assert.ok(false, util.format.apply(null, arr))\n }\n}\n","// 7.1.15 ToLength\nvar toInteger = require('./_to-integer');\nvar min = Math.min;\nmodule.exports = function (it) {\n return it > 0 ? min(toInteger(it), 0x1fffffffffffff) : 0; // pow(2, 53) - 1 == 9007199254740991\n};\n","var core = module.exports = { version: '2.6.9' };\nif (typeof __e == 'number') __e = core; // eslint-disable-line no-undef\n","// Thank's IE8 for his funny defineProperty\nmodule.exports = !require('./_fails')(function () {\n return Object.defineProperty({}, 'a', { get: function () { return 7; } }).a != 7;\n});\n","var anObject = require('./_an-object');\nvar IE8_DOM_DEFINE = require('./_ie8-dom-define');\nvar toPrimitive = require('./_to-primitive');\nvar dP = Object.defineProperty;\n\nexports.f = require('./_descriptors') ? Object.defineProperty : function defineProperty(O, P, Attributes) {\n anObject(O);\n P = toPrimitive(P, true);\n anObject(Attributes);\n if (IE8_DOM_DEFINE) try {\n return dP(O, P, Attributes);\n } catch (e) { /* empty */ }\n if ('get' in Attributes || 'set' in Attributes) throw TypeError('Accessors not supported!');\n if ('value' in Attributes) O[P] = Attributes.value;\n return O;\n};\n","// 7.1.13 ToObject(argument)\nvar defined = require('./_defined');\nmodule.exports = function (it) {\n return Object(defined(it));\n};\n","var global = require('./_global');\nvar hide = require('./_hide');\nvar has = require('./_has');\nvar SRC = require('./_uid')('src');\nvar $toString = require('./_function-to-string');\nvar TO_STRING = 'toString';\nvar TPL = ('' + $toString).split(TO_STRING);\n\nrequire('./_core').inspectSource = function (it) {\n return $toString.call(it);\n};\n\n(module.exports = function (O, key, val, safe) {\n var isFunction = typeof val == 'function';\n if (isFunction) has(val, 'name') || hide(val, 'name', key);\n if (O[key] === val) return;\n if (isFunction) has(val, SRC) || hide(val, SRC, O[key] ? '' + O[key] : TPL.join(String(key)));\n if (O === global) {\n O[key] = val;\n } else if (!safe) {\n delete O[key];\n hide(O, key, val);\n } else if (O[key]) {\n O[key] = val;\n } else {\n hide(O, key, val);\n }\n// add fake Function#toString for correct work wrapped methods / constructors with methods like LoDash isNative\n})(Function.prototype, TO_STRING, function toString() {\n return typeof this == 'function' && this[SRC] || $toString.call(this);\n});\n","var $export = require('./_export');\nvar fails = require('./_fails');\nvar defined = require('./_defined');\nvar quot = /\"/g;\n// B.2.3.2.1 CreateHTML(string, tag, attribute, value)\nvar createHTML = function (string, tag, attribute, value) {\n var S = String(defined(string));\n var p1 = '<' + tag;\n if (attribute !== '') p1 += ' ' + attribute + '=\"' + String(value).replace(quot, '&quot;') + '\"';\n return p1 + '>' + S + '</' + tag + '>';\n};\nmodule.exports = function (NAME, exec) {\n var O = {};\n O[NAME] = exec(createHTML);\n $export($export.P + $export.F * fails(function () {\n var test = ''[NAME]('\"');\n return test !== test.toLowerCase() || test.split('\"').length > 3;\n }), 'String', O);\n};\n","var hasOwnProperty = {}.hasOwnProperty;\nmodule.exports = function (it, key) {\n return hasOwnProperty.call(it, key);\n};\n","var dP = require('./_object-dp');\nvar createDesc = require('./_property-desc');\nmodule.exports = require('./_descriptors') ? function (object, key, value) {\n return dP.f(object, key, createDesc(1, value));\n} : function (object, key, value) {\n object[key] = value;\n return object;\n};\n","// to indexed object, toObject with fallback for non-array-like ES3 strings\nvar IObject = require('./_iobject');\nvar defined = require('./_defined');\nmodule.exports = function (it) {\n return IObject(defined(it));\n};\n","//\r\n// BlockV AG. Copyright (c) 2018, all rights reserved.\r\n//\r\n// Licensed under the BlockV SDK License (the \"License\"); you may not use this file or\r\n// the BlockV SDK except in compliance with the License accompanying it. Unless\r\n// required by applicable law or agreed to in writing, the BlockV SDK distributed under\r\n// the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF\r\n// ANY KIND, either express or implied. See the License for the specific language\r\n// governing permissions and limitations under the License.\r\n//\r\n\r\n/* eslint-disable class-methods-use-this */\r\n\r\nexport default class BaseFace {\r\n constructor (vatomView, vatom, face) {\r\n // Store info\r\n this.vatomView = vatomView\r\n this.face = face\r\n\r\n // Create element\r\n this.element = document.createElement('div')\r\n this.element.style.position = 'relative'\r\n this.element.style.width = '100%'\r\n this.element.style.height = '100%'\r\n }\r\n\r\n get vatom() {\r\n return this.vatomView.vatom\r\n }\r\n\r\n /** Called when the view is resized */\r\n onResize () {}\r\n \r\n onLoad () {}\r\n\r\n onUnload () {}\r\n\r\n onVatomUpdated () {}\r\n}\r\n","/**\n * @license\n * Lodash <https://lodash.com/>\n * Copyright OpenJS Foundation and other contributors <https://openjsf.org/>\n * Released under MIT license <https://lodash.com/license>\n * Based on Underscore.js 1.8.3 <http://underscorejs.org/LICENSE>\n * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n */\n;(function() {\n\n /** Used as a safe reference for `undefined` in pre-ES5 environments. */\n var undefined;\n\n /** Used as the semantic version number. */\n var VERSION = '4.17.15';\n\n /** Used as the size to enable large array optimizations. */\n var LARGE_ARRAY_SIZE = 200;\n\n /** Error message constants. */\n var CORE_ERROR_TEXT = 'Unsupported core-js use. Try https://npms.io/search?q=ponyfill.',\n FUNC_ERROR_TEXT = 'Expected a function';\n\n /** Used to stand-in for `undefined` hash values. */\n var HASH_UNDEFINED = '__lodash_hash_undefined__';\n\n /** Used as the maximum memoize cache size. */\n var MAX_MEMOIZE_SIZE = 500;\n\n /** Used as the internal argument placeholder. */\n var PLACEHOLDER = '__lodash_placeholder__';\n\n /** Used to compose bitmasks for cloning. */\n var CLONE_DEEP_FLAG = 1,\n CLONE_FLAT_FLAG = 2,\n CLONE_SYMBOLS_FLAG = 4;\n\n /** Used to compose bitmasks for value comparisons. */\n var COMPARE_PARTIAL_FLAG = 1,\n COMPARE_UNORDERED_FLAG = 2;\n\n /** Used to compose bitmasks for function metadata. */\n var WRAP_BIND_FLAG = 1,\n WRAP_BIND_KEY_FLAG = 2,\n WRAP_CURRY_BOUND_FLAG = 4,\n WRAP_CURRY_FLAG = 8,\n WRAP_CURRY_RIGHT_FLAG = 16,\n WRAP_PARTIAL_FLAG = 32,\n WRAP_PARTIAL_RIGHT_FLAG = 64,\n WRAP_ARY_FLAG = 128,\n WRAP_REARG_FLAG = 256,\n WRAP_FLIP_FLAG = 512;\n\n /** Used as default options for `_.truncate`. */\n var DEFAULT_TRUNC_LENGTH = 30,\n DEFAULT_TRUNC_OMISSION = '...';\n\n /** Used to detect hot functions by number of calls within a span of milliseconds. */\n var HOT_COUNT = 800,\n HOT_SPAN = 16;\n\n /** Used to indicate the type of lazy iteratees. */\n var LAZY_FILTER_FLAG = 1,\n LAZY_MAP_FLAG = 2,\n LAZY_WHILE_FLAG = 3;\n\n /** Used as references for various `Number` constants. */\n var INFINITY = 1 / 0,\n MAX_SAFE_INTEGER = 9007199254740991,\n MAX_INTEGER = 1.7976931348623157e+308,\n NAN = 0 / 0;\n\n /** Used as references for the maximum length and index of an array. */\n var MAX_ARRAY_LENGTH = 4294967295,\n MAX_ARRAY_INDEX = MAX_ARRAY_LENGTH - 1,\n HALF_MAX_ARRAY_LENGTH = MAX_ARRAY_LENGTH >>> 1;\n\n /** Used to associate wrap methods with their bit flags. */\n var wrapFlags = [\n ['ary', WRAP_ARY_FLAG],\n ['bind', WRAP_BIND_FLAG],\n ['bindKey', WRAP_BIND_KEY_FLAG],\n ['curry', WRAP_CURRY_FLAG],\n ['curryRight', WRAP_CURRY_RIGHT_FLAG],\n ['flip', WRAP_FLIP_FLAG],\n ['partial', WRAP_PARTIAL_FLAG],\n ['partialRight', WRAP_PARTIAL_RIGHT_FLAG],\n ['rearg', WRAP_REARG_FLAG]\n ];\n\n /** `Object#toString` result references. */\n var argsTag = '[object Arguments]',\n arrayTag = '[object Array]',\n asyncTag = '[object AsyncFunction]',\n boolTag = '[object Boolean]',\n dateTag = '[object Date]',\n domExcTag = '[object DOMException]',\n errorTag = '[object Error]',\n funcTag = '[object Function]',\n genTag = '[object GeneratorFunction]',\n mapTag = '[object Map]',\n numberTag = '[object Number]',\n nullTag = '[object Null]',\n objectTag = '[object Object]',\n promiseTag = '[object Promise]',\n proxyTag = '[object Proxy]',\n regexpTag = '[object RegExp]',\n setTag = '[object Set]',\n stringTag = '[object String]',\n symbolTag = '[object Symbol]',\n undefinedTag = '[object Undefined]',\n weakMapTag = '[object WeakMap]',\n weakSetTag = '[object WeakSet]';\n\n var arrayBufferTag = '[object ArrayBuffer]',\n dataViewTag = '[object DataView]',\n float32Tag = '[object Float32Array]',\n float64Tag = '[object Float64Array]',\n int8Tag = '[object Int8Array]',\n int16Tag = '[object Int16Array]',\n int32Tag = '[object Int32Array]',\n uint8Tag = '[object Uint8Array]',\n uint8ClampedTag = '[object Uint8ClampedArray]',\n uint16Tag = '[object Uint16Array]',\n uint32Tag = '[object Uint32Array]';\n\n /** Used to match empty string literals in compiled template source. */\n var reEmptyStringLeading = /\\b__p \\+= '';/g,\n reEmptyStringMiddle = /\\b(__p \\+=) '' \\+/g,\n reEmptyStringTrailing = /(__e\\(.*?\\)|\\b__t\\)) \\+\\n'';/g;\n\n /** Used to match HTML entities and HTML characters. */\n var reEscapedHtml = /&(?:amp|lt|gt|quot|#39);/g,\n reUnescapedHtml = /[&<>\"']/g,\n reHasEscapedHtml = RegExp(reEscapedHtml.source),\n reHasUnescapedHtml = RegExp(reUnescapedHtml.source);\n\n /** Used to match template delimiters. */\n var reEscape = /<%-([\\s\\S]+?)%>/g,\n reEvaluate = /<%([\\s\\S]+?)%>/g,\n reInterpolate = /<%=([\\s\\S]+?)%>/g;\n\n /** Used to match property names within property paths. */\n var reIsDeepProp = /\\.|\\[(?:[^[\\]]*|([\"'])(?:(?!\\1)[^\\\\]|\\\\.)*?\\1)\\]/,\n reIsPlainProp = /^\\w*$/,\n rePropName = /[^.[\\]]+|\\[(?:(-?\\d+(?:\\.\\d+)?)|([\"'])((?:(?!\\2)[^\\\\]|\\\\.)*?)\\2)\\]|(?=(?:\\.|\\[\\])(?:\\.|\\[\\]|$))/g;\n\n /**\n * Used to match `RegExp`\n * [syntax characters](http://ecma-international.org/ecma-262/7.0/#sec-patterns).\n */\n var reRegExpChar = /[\\\\^$.*+?()[\\]{}|]/g,\n reHasRegExpChar = RegExp(reRegExpChar.source);\n\n /** Used to match leading and trailing whitespace. */\n var reTrim = /^\\s+|\\s+$/g,\n reTrimStart = /^\\s+/,\n reTrimEnd = /\\s+$/;\n\n /** Used to match wrap detail comments. */\n var reWrapComment = /\\{(?:\\n\\/\\* \\[wrapped with .+\\] \\*\\/)?\\n?/,\n reWrapDetails = /\\{\\n\\/\\* \\[wrapped with (.+)\\] \\*/,\n reSplitDetails = /,? & /;\n\n /** Used to match words composed of alphanumeric characters. */\n var reAsciiWord = /[^\\x00-\\x2f\\x3a-\\x40\\x5b-\\x60\\x7b-\\x7f]+/g;\n\n /** Used to match backslashes in property paths. */\n var reEscapeChar = /\\\\(\\\\)?/g;\n\n /**\n * Used to match\n * [ES template delimiters](http://ecma-international.org/ecma-262/7.0/#sec-template-literal-lexical-components).\n */\n var reEsTemplate = /\\$\\{([^\\\\}]*(?:\\\\.[^\\\\}]*)*)\\}/g;\n\n /** Used to match `RegExp` flags from their coerced string values. */\n var reFlags = /\\w*$/;\n\n /** Used to detect bad signed hexadecimal string values. */\n var reIsBadHex = /^[-+]0x[0-9a-f]+$/i;\n\n /** Used to detect binary string values. */\n var reIsBinary = /^0b[01]+$/i;\n\n /** Used to detect host constructors (Safari). */\n var reIsHostCtor = /^\\[object .+?Constructor\\]$/;\n\n /** Used to detect octal string values. */\n var reIsOctal = /^0o[0-7]+$/i;\n\n /** Used to detect unsigned integer values. */\n var reIsUint = /^(?:0|[1-9]\\d*)$/;\n\n /** Used to match Latin Unicode letters (excluding mathematical operators). */\n var reLatin = /[\\xc0-\\xd6\\xd8-\\xf6\\xf8-\\xff\\u0100-\\u017f]/g;\n\n /** Used to ensure capturing order of template delimiters. */\n var reNoMatch = /($^)/;\n\n /** Used to match unescaped characters in compiled string literals. */\n var reUnescapedString = /['\\n\\r\\u2028\\u2029\\\\]/g;\n\n /** Used to compose unicode character classes. */\n var rsAstralRange = '\\\\ud800-\\\\udfff',\n rsComboMarksRange = '\\\\u0300-\\\\u036f',\n reComboHalfMarksRange = '\\\\ufe20-\\\\ufe2f',\n rsComboSymbolsRange = '\\\\u20d0-\\\\u20ff',\n rsComboRange = rsComboMarksRange + reComboHalfMarksRange + rsComboSymbolsRange,\n rsDingbatRange = '\\\\u2700-\\\\u27bf',\n rsLowerRange = 'a-z\\\\xdf-\\\\xf6\\\\xf8-\\\\xff',\n rsMathOpRange = '\\\\xac\\\\xb1\\\\xd7\\\\xf7',\n rsNonCharRange = '\\\\x00-\\\\x2f\\\\x3a-\\\\x40\\\\x5b-\\\\x60\\\\x7b-\\\\xbf',\n rsPunctuationRange = '\\\\u2000-\\\\u206f',\n rsSpaceRange = ' \\\\t\\\\x0b\\\\f\\\\xa0\\\\ufeff\\\\n\\\\r\\\\u2028\\\\u2029\\\\u1680\\\\u180e\\\\u2000\\\\u2001\\\\u2002\\\\u2003\\\\u2004\\\\u2005\\\\u2006\\\\u2007\\\\u2008\\\\u2009\\\\u200a\\\\u202f\\\\u205f\\\\u3000',\n rsUpperRange = 'A-Z\\\\xc0-\\\\xd6\\\\xd8-\\\\xde',\n rsVarRange = '\\\\ufe0e\\\\ufe0f',\n rsBreakRange = rsMathOpRange + rsNonCharRange + rsPunctuationRange + rsSpaceRange;\n\n /** Used to compose unicode capture groups. */\n var rsApos = \"['\\u2019]\",\n rsAstral = '[' + rsAstralRange + ']',\n rsBreak = '[' + rsBreakRange + ']',\n rsCombo = '[' + rsComboRange + ']',\n rsDigits = '\\\\d+',\n rsDingbat = '[' + rsDingbatRange + ']',\n rsLower = '[' + rsLowerRange + ']',\n rsMisc = '[^' + rsAstralRange + rsBreakRange + rsDigits + rsDingbatRange + rsLowerRange + rsUpperRange + ']',\n rsFitz = '\\\\ud83c[\\\\udffb-\\\\udfff]',\n rsModifier = '(?:' + rsCombo + '|' + rsFitz + ')',\n rsNonAstral = '[^' + rsAstralRange + ']',\n rsRegional = '(?:\\\\ud83c[\\\\udde6-\\\\uddff]){2}',\n rsSurrPair = '[\\\\ud800-\\\\udbff][\\\\udc00-\\\\udfff]',\n rsUpper = '[' + rsUpperRange + ']',\n rsZWJ = '\\\\u200d';\n\n /** Used to compose unicode regexes. */\n var rsMiscLower = '(?:' + rsLower + '|' + rsMisc + ')',\n rsMiscUpper = '(?:' + rsUpper + '|' + rsMisc + ')',\n rsOptContrLower = '(?:' + rsApos + '(?:d|ll|m|re|s|t|ve))?',\n rsOptContrUpper = '(?:' + rsApos + '(?:D|LL|M|RE|S|T|VE))?',\n reOptMod = rsModifier + '?',\n rsOptVar = '[' + rsVarRange + ']?',\n rsOptJoin = '(?:' + rsZWJ + '(?:' + [rsNonAstral, rsRegional, rsSurrPair].join('|') + ')' + rsOptVar + reOptMod + ')*',\n rsOrdLower = '\\\\d*(?:1st|2nd|3rd|(?![123])\\\\dth)(?=\\\\b|[A-Z_])',\n rsOrdUpper = '\\\\d*(?:1ST|2ND|3RD|(?![123])\\\\dTH)(?=\\\\b|[a-z_])',\n rsSeq = rsOptVar + reOptMod + rsOptJoin,\n rsEmoji = '(?:' + [rsDingbat, rsRegional, rsSurrPair].join('|') + ')' + rsSeq,\n rsSymbol = '(?:' + [rsNonAstral + rsCombo + '?', rsCombo, rsRegional, rsSurrPair, rsAstral].join('|') + ')';\n\n /** Used to match apostrophes. */\n var reApos = RegExp(rsApos, 'g');\n\n /**\n * Used to match [combining diacritical marks](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks) and\n * [combining diacritical marks for symbols](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks_for_Symbols).\n */\n var reComboMark = RegExp(rsCombo, 'g');\n\n /** Used to match [string symbols](https://mathiasbynens.be/notes/javascript-unicode). */\n var reUnicode = RegExp(rsFitz + '(?=' + rsFitz + ')|' + rsSymbol + rsSeq, 'g');\n\n /** Used to match complex or compound words. */\n var reUnicodeWord = RegExp([\n rsUpper + '?' + rsLower + '+' + rsOptContrLower + '(?=' + [rsBreak, rsUpper, '$'].join('|') + ')',\n rsMiscUpper + '+' + rsOptContrUpper + '(?=' + [rsBreak, rsUpper + rsMiscLower, '$'].join('|') + ')',\n rsUpper + '?' + rsMiscLower + '+' + rsOptContrLower,\n rsUpper + '+' + rsOptContrUpper,\n rsOrdUpper,\n rsOrdLower,\n rsDigits,\n rsEmoji\n ].join('|'), 'g');\n\n /** Used to detect strings with [zero-width joiners or code points from the astral planes](http://eev.ee/blog/2015/09/12/dark-corners-of-unicode/). */\n var reHasUnicode = RegExp('[' + rsZWJ + rsAstralRange + rsComboRange + rsVarRange + ']');\n\n /** Used to detect strings that need a more robust regexp to match words. */\n var reHasUnicodeWord = /[a-z][A-Z]|[A-Z]{2}[a-z]|[0-9][a-zA-Z]|[a-zA-Z][0-9]|[^a-zA-Z0-9 ]/;\n\n /** Used to assign default `context` object properties. */\n var contextProps = [\n 'Array', 'Buffer', 'DataView', 'Date', 'Error', 'Float32Array', 'Float64Array',\n 'Function', 'Int8Array', 'Int16Array', 'Int32Array', 'Map', 'Math', 'Object',\n 'Promise', 'RegExp', 'Set', 'String', 'Symbol', 'TypeError', 'Uint8Array',\n 'Uint8ClampedArray', 'Uint16Array', 'Uint32Array', 'WeakMap',\n '_', 'clearTimeout', 'isFinite', 'parseInt', 'setTimeout'\n ];\n\n /** Used to make template sourceURLs easier to identify. */\n var templateCounter = -1;\n\n /** Used to identify `toStringTag` values of typed arrays. */\n var typedArrayTags = {};\n typedArrayTags[float32Tag] = typedArrayTags[float64Tag] =\n typedArrayTags[int8Tag] = typedArrayTags[int16Tag] =\n typedArrayTags[int32Tag] = typedArrayTags[uint8Tag] =\n typedArrayTags[uint8ClampedTag] = typedArrayTags[uint16Tag] =\n typedArrayTags[uint32Tag] = true;\n typedArrayTags[argsTag] = typedArrayTags[arrayTag] =\n typedArrayTags[arrayBufferTag] = typedArrayTags[boolTag] =\n typedArrayTags[dataViewTag] = typedArrayTags[dateTag] =\n typedArrayTags[errorTag] = typedArrayTags[funcTag] =\n typedArrayTags[mapTag] = typedArrayTags[numberTag] =\n typedArrayTags[objectTag] = typedArrayTags[regexpTag] =\n typedArrayTags[setTag] = typedArrayTags[stringTag] =\n typedArrayTags[weakMapTag] = false;\n\n /** Used to identify `toStringTag` values supported by `_.clone`. */\n var cloneableTags = {};\n cloneableTags[argsTag] = cloneableTags[arrayTag] =\n cloneableTags[arrayBufferTag] = cloneableTags[dataViewTag] =\n cloneableTags[boolTag] = cloneableTags[dateTag] =\n cloneableTags[float32Tag] = cloneableTags[float64Tag] =\n cloneableTags[int8Tag] = cloneableTags[int16Tag] =\n cloneableTags[int32Tag] = cloneableTags[mapTag] =\n cloneableTags[numberTag] = cloneableTags[objectTag] =\n cloneableTags[regexpTag] = cloneableTags[setTag] =\n cloneableTags[stringTag] = cloneableTags[symbolTag] =\n cloneableTags[uint8Tag] = cloneableTags[uint8ClampedTag] =\n cloneableTags[uint16Tag] = cloneableTags[uint32Tag] = true;\n cloneableTags[errorTag] = cloneableTags[funcTag] =\n cloneableTags[weakMapTag] = false;\n\n /** Used to map Latin Unicode letters to basic Latin letters. */\n var deburredLetters = {\n // Latin-1 Supplement block.\n '\\xc0': 'A', '\\xc1': 'A', '\\xc2': 'A', '\\xc3': 'A', '\\xc4': 'A', '\\xc5': 'A',\n '\\xe0': 'a', '\\xe1': 'a', '\\xe2': 'a', '\\xe3': 'a', '\\xe4': 'a', '\\xe5': 'a',\n '\\xc7': 'C', '\\xe7': 'c',\n '\\xd0': 'D', '\\xf0': 'd',\n '\\xc8': 'E', '\\xc9': 'E', '\\xca': 'E', '\\xcb': 'E',\n '\\xe8': 'e', '\\xe9': 'e', '\\xea': 'e', '\\xeb': 'e',\n '\\xcc': 'I', '\\xcd': 'I', '\\xce': 'I', '\\xcf': 'I',\n '\\xec': 'i', '\\xed': 'i', '\\xee': 'i', '\\xef': 'i',\n '\\xd1': 'N', '\\xf1': 'n',\n '\\xd2': 'O', '\\xd3': 'O', '\\xd4': 'O', '\\xd5': 'O', '\\xd6': 'O', '\\xd8': 'O',\n '\\xf2': 'o', '\\xf3': 'o', '\\xf4': 'o', '\\xf5': 'o', '\\xf6': 'o', '\\xf8': 'o',\n '\\xd9': 'U', '\\xda': 'U', '\\xdb': 'U', '\\xdc': 'U',\n '\\xf9': 'u', '\\xfa': 'u', '\\xfb': 'u', '\\xfc': 'u',\n '\\xdd': 'Y', '\\xfd': 'y', '\\xff': 'y',\n '\\xc6': 'Ae', '\\xe6': 'ae',\n '\\xde': 'Th', '\\xfe': 'th',\n '\\xdf': 'ss',\n // Latin Extended-A block.\n '\\u0100': 'A', '\\u0102': 'A', '\\u0104': 'A',\n '\\u0101': 'a', '\\u0103': 'a', '\\u0105': 'a',\n '\\u0106': 'C', '\\u0108': 'C', '\\u010a': 'C', '\\u010c': 'C',\n '\\u0107': 'c', '\\u0109': 'c', '\\u010b': 'c', '\\u010d': 'c',\n '\\u010e': 'D', '\\u0110': 'D', '\\u010f': 'd', '\\u0111': 'd',\n '\\u0112': 'E', '\\u0114': 'E', '\\u0116': 'E', '\\u0118': 'E', '\\u011a': 'E',\n '\\u0113': 'e', '\\u0115': 'e', '\\u0117': 'e', '\\u0119': 'e', '\\u011b': 'e',\n '\\u011c': 'G', '\\u011e': 'G', '\\u0120': 'G', '\\u0122': 'G',\n '\\u011d': 'g', '\\u011f': 'g', '\\u0121': 'g', '\\u0123': 'g',\n '\\u0124': 'H', '\\u0126': 'H', '\\u0125': 'h', '\\u0127': 'h',\n '\\u0128': 'I', '\\u012a': 'I', '\\u012c': 'I', '\\u012e': 'I', '\\u0130': 'I',\n '\\u0129': 'i', '\\u012b': 'i', '\\u012d': 'i', '\\u012f': 'i', '\\u0131': 'i',\n '\\u0134': 'J', '\\u0135': 'j',\n '\\u0136': 'K', '\\u0137': 'k', '\\u0138': 'k',\n '\\u0139': 'L', '\\u013b': 'L', '\\u013d': 'L', '\\u013f': 'L', '\\u0141': 'L',\n '\\u013a': 'l', '\\u013c': 'l', '\\u013e': 'l', '\\u0140': 'l', '\\u0142': 'l',\n '\\u0143': 'N', '\\u0145': 'N', '\\u0147': 'N', '\\u014a': 'N',\n '\\u0144': 'n', '\\u0146': 'n', '\\u0148': 'n', '\\u014b': 'n',\n '\\u014c': 'O', '\\u014e': 'O', '\\u0150': 'O',\n '\\u014d': 'o', '\\u014f': 'o', '\\u0151': 'o',\n '\\u0154': 'R', '\\u0156': 'R', '\\u0158': 'R',\n '\\u0155': 'r', '\\u0157': 'r', '\\u0159': 'r',\n '\\u015a': 'S', '\\u015c': 'S', '\\u015e': 'S', '\\u0160': 'S',\n '\\u015b': 's', '\\u015d': 's', '\\u015f': 's', '\\u0161': 's',\n '\\u0162': 'T', '\\u0164': 'T', '\\u0166': 'T',\n '\\u0163': 't', '\\u0165': 't', '\\u0167': 't',\n '\\u0168': 'U', '\\u016a': 'U', '\\u016c': 'U', '\\u016e': 'U', '\\u0170': 'U', '\\u0172': 'U',\n '\\u0169': 'u', '\\u016b': 'u', '\\u016d': 'u', '\\u016f': 'u', '\\u0171': 'u', '\\u0173': 'u',\n '\\u0174': 'W', '\\u0175': 'w',\n '\\u0176': 'Y', '\\u0177': 'y', '\\u0178': 'Y',\n '\\u0179': 'Z', '\\u017b': 'Z', '\\u017d': 'Z',\n '\\u017a': 'z', '\\u017c': 'z', '\\u017e': 'z',\n '\\u0132': 'IJ', '\\u0133': 'ij',\n '\\u0152': 'Oe', '\\u0153': 'oe',\n '\\u0149': \"'n\", '\\u017f': 's'\n };\n\n /** Used to map characters to HTML entities. */\n var htmlEscapes = {\n '&': '&amp;',\n '<': '&lt;',\n '>': '&gt;',\n '\"': '&quot;',\n \"'\": '&#39;'\n };\n\n /** Used to map HTML entities to characters. */\n var htmlUnescapes = {\n '&amp;': '&',\n '&lt;': '<',\n '&gt;': '>',\n '&quot;': '\"',\n '&#39;': \"'\"\n };\n\n /** Used to escape characters for inclusion in compiled string literals. */\n var stringEscapes = {\n '\\\\': '\\\\',\n \"'\": \"'\",\n '\\n': 'n',\n '\\r': 'r',\n '\\u2028': 'u2028',\n '\\u2029': 'u2029'\n };\n\n /** Built-in method references without a dependency on `root`. */\n var freeParseFloat = parseFloat,\n freeParseInt = parseInt;\n\n /** Detect free variable `global` from Node.js. */\n var freeGlobal = typeof global == 'object' && global && global.Object === Object && global;\n\n /** Detect free variable `self`. */\n var freeSelf = typeof self == 'object' && self && self.Object === Object && self;\n\n /** Used as a reference to the global object. */\n var root = freeGlobal || freeSelf || Function('return this')();\n\n /** Detect free variable `exports`. */\n var freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports;\n\n /** Detect free variable `module`. */\n var freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module;\n\n /** Detect the popular CommonJS extension `module.exports`. */\n var moduleExports = freeModule && freeModule.exports === freeExports;\n\n /** Detect free variable `process` from Node.js. */\n var freeProcess = moduleExports && freeGlobal.process;\n\n /** Used to access faster Node.js helpers. */\n var nodeUtil = (function() {\n try {\n // Use `util.types` for Node.js 10+.\n var types = freeModule && freeModule.require && freeModule.require('util').types;\n\n if (types) {\n return types;\n }\n\n // Legacy `process.binding('util')` for Node.js < 10.\n return freeProcess && freeProcess.binding && freeProcess.binding('util');\n } catch (e) {}\n }());\n\n /* Node.js helper references. */\n var nodeIsArrayBuffer = nodeUtil && nodeUtil.isArrayBuffer,\n nodeIsDate = nodeUtil && nodeUtil.isDate,\n nodeIsMap = nodeUtil && nodeUtil.isMap,\n nodeIsRegExp = nodeUtil && nodeUtil.isRegExp,\n nodeIsSet = nodeUtil && nodeUtil.isSet,\n nodeIsTypedArray = nodeUtil && nodeUtil.isTypedArray;\n\n /*--------------------------------------------------------------------------*/\n\n /**\n * A faster alternative to `Function#apply`, this function invokes `func`\n * with the `this` binding of `thisArg` and the arguments of `args`.\n *\n * @private\n * @param {Function} func The function to invoke.\n * @param {*} thisArg The `this` binding of `func`.\n * @param {Array} args The arguments to invoke `func` with.\n * @returns {*} Returns the result of `func`.\n */\n function apply(func, thisArg, args) {\n switch (args.length) {\n case 0: return func.call(thisArg);\n case 1: return func.call(thisArg, args[0]);\n case 2: return func.call(thisArg, args[0], args[1]);\n case 3: return func.call(thisArg, args[0], args[1], args[2]);\n }\n return func.apply(thisArg, args);\n }\n\n /**\n * A specialized version of `baseAggregator` for arrays.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} setter The function to set `accumulator` values.\n * @param {Function} iteratee The iteratee to transform keys.\n * @param {Object} accumulator The initial aggregated object.\n * @returns {Function} Returns `accumulator`.\n */\n function arrayAggregator(array, setter, iteratee, accumulator) {\n var index = -1,\n length = array == null ? 0 : array.length;\n\n while (++index < length) {\n var value = array[index];\n setter(accumulator, value, iteratee(value), array);\n }\n return accumulator;\n }\n\n /**\n * A specialized version of `_.forEach` for arrays without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns `array`.\n */\n function arrayEach(array, iteratee) {\n var index = -1,\n length = array == null ? 0 : array.length;\n\n while (++index < length) {\n if (iteratee(array[index], index, array) === false) {\n break;\n }\n }\n return array;\n }\n\n /**\n * A specialized version of `_.forEachRight` for arrays without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns `array`.\n */\n function arrayEachRight(array, iteratee) {\n var length = array == null ? 0 : array.length;\n\n while (length--) {\n if (iteratee(array[length], length, array) === false) {\n break;\n }\n }\n return array;\n }\n\n /**\n * A specialized version of `_.every` for arrays without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {boolean} Returns `true` if all elements pass the predicate check,\n * else `false`.\n */\n function arrayEvery(array, predicate) {\n var index = -1,\n length = array == null ? 0 : array.length;\n\n while (++index < length) {\n if (!predicate(array[index], index, array)) {\n return false;\n }\n }\n return true;\n }\n\n /**\n * A specialized version of `_.filter` for arrays without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {Array} Returns the new filtered array.\n */\n function arrayFilter(array, predicate) {\n var index = -1,\n length = array == null ? 0 : array.length,\n resIndex = 0,\n result = [];\n\n while (++index < length) {\n var value = array[index];\n if (predicate(value, index, array)) {\n result[resIndex++] = value;\n }\n }\n return result;\n }\n\n /**\n * A specialized version of `_.includes` for arrays without support for\n * specifying an index to search from.\n *\n * @private\n * @param {Array} [array] The array to inspect.\n * @param {*} target The value to search for.\n * @returns {boolean} Returns `true` if `target` is found, else `false`.\n */\n function arrayIncludes(array, value) {\n var length = array == null ? 0 : array.length;\n return !!length && baseIndexOf(array, value, 0) > -1;\n }\n\n /**\n * This function is like `arrayIncludes` except that it accepts a comparator.\n *\n * @private\n * @param {Array} [array] The array to inspect.\n * @param {*} target The value to search for.\n * @param {Function} comparator The comparator invoked per element.\n * @returns {boolean} Returns `true` if `target` is found, else `false`.\n */\n function arrayIncludesWith(array, value, comparator) {\n var index = -1,\n length = array == null ? 0 : array.length;\n\n while (++index < length) {\n if (comparator(value, array[index])) {\n return true;\n }\n }\n return false;\n }\n\n /**\n * A specialized version of `_.map` for arrays without support for iteratee\n * shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns the new mapped array.\n */\n function arrayMap(array, iteratee) {\n var index = -1,\n length = array == null ? 0 : array.length,\n result = Array(length);\n\n while (++index < length) {\n result[index] = iteratee(array[index], index, array);\n }\n return result;\n }\n\n /**\n * Appends the elements of `values` to `array`.\n *\n * @private\n * @param {Array} array The array to modify.\n * @param {Array} values The values to append.\n * @returns {Array} Returns `array`.\n */\n function arrayPush(array, values) {\n var index = -1,\n length = values.length,\n offset = array.length;\n\n while (++index < length) {\n array[offset + index] = values[index];\n }\n return array;\n }\n\n /**\n * A specialized version of `_.reduce` for arrays without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @param {*} [accumulator] The initial value.\n * @param {boolean} [initAccum] Specify using the first element of `array` as\n * the initial value.\n * @returns {*} Returns the accumulated value.\n */\n function arrayReduce(array, iteratee, accumulator, initAccum) {\n var index = -1,\n length = array == null ? 0 : array.length;\n\n if (initAccum && length) {\n accumulator = array[++index];\n }\n while (++index < length) {\n accumulator = iteratee(accumulator, array[index], index, array);\n }\n return accumulator;\n }\n\n /**\n * A specialized version of `_.reduceRight` for arrays without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @param {*} [accumulator] The initial value.\n * @param {boolean} [initAccum] Specify using the last element of `array` as\n * the initial value.\n * @returns {*} Returns the accumulated value.\n */\n function arrayReduceRight(array, iteratee, accumulator, initAccum) {\n var length = array == null ? 0 : array.length;\n if (initAccum && length) {\n accumulator = array[--length];\n }\n while (length--) {\n accumulator = iteratee(accumulator, array[length], length, array);\n }\n return accumulator;\n }\n\n /**\n * A specialized version of `_.some` for arrays without support for iteratee\n * shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {boolean} Returns `true` if any element passes the predicate check,\n * else `false`.\n */\n function arraySome(array, predicate) {\n var index = -1,\n length = array == null ? 0 : array.length;\n\n while (++index < length) {\n if (predicate(array[index], index, array)) {\n return true;\n }\n }\n return false;\n }\n\n /**\n * Gets the size of an ASCII `string`.\n *\n * @private\n * @param {string} string The string inspect.\n * @returns {number} Returns the string size.\n */\n var asciiSize = baseProperty('length');\n\n /**\n * Converts an ASCII `string` to an array.\n *\n * @private\n * @param {string} string The string to convert.\n * @returns {Array} Returns the converted array.\n */\n function asciiToArray(string) {\n return string.split('');\n }\n\n /**\n * Splits an ASCII `string` into an array of its words.\n *\n * @private\n * @param {string} The string to inspect.\n * @returns {Array} Returns the words of `string`.\n */\n function asciiWords(string) {\n return string.match(reAsciiWord) || [];\n }\n\n /**\n * The base implementation of methods like `_.findKey` and `_.findLastKey`,\n * without support for iteratee shorthands, which iterates over `collection`\n * using `eachFunc`.\n *\n * @private\n * @param {Array|Object} collection The collection to inspect.\n * @param {Function} predicate The function invoked per iteration.\n * @param {Function} eachFunc The function to iterate over `collection`.\n * @returns {*} Returns the found element or its key, else `undefined`.\n */\n function baseFindKey(collection, predicate, eachFunc) {\n var result;\n eachFunc(collection, function(value, key, collection) {\n if (predicate(value, key, collection)) {\n result = key;\n return false;\n }\n });\n return result;\n }\n\n /**\n * The base implementation of `_.findIndex` and `_.findLastIndex` without\n * support for iteratee shorthands.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {Function} predicate The function invoked per iteration.\n * @param {number} fromIndex The index to search from.\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\n function baseFindIndex(array, predicate, fromIndex, fromRight) {\n var length = array.length,\n index = fromIndex + (fromRight ? 1 : -1);\n\n while ((fromRight ? index-- : ++index < length)) {\n if (predicate(array[index], index, array)) {\n return index;\n }\n }\n return -1;\n }\n\n /**\n * The base implementation of `_.indexOf` without `fromIndex` bounds checks.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} value The value to search for.\n * @param {number} fromIndex The index to search from.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\n function baseIndexOf(array, value, fromIndex) {\n return value === value\n ? strictIndexOf(array, value, fromIndex)\n : baseFindIndex(array, baseIsNaN, fromIndex);\n }\n\n /**\n * This function is like `baseIndexOf` except that it accepts a comparator.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} value The value to search for.\n * @param {number} fromIndex The index to search from.\n * @param {Function} comparator The comparator invoked per element.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\n function baseIndexOfWith(array, value, fromIndex, comparator) {\n var index = fromIndex - 1,\n length = array.length;\n\n while (++index < length) {\n if (comparator(array[index], value)) {\n return index;\n }\n }\n return -1;\n }\n\n /**\n * The base implementation of `_.isNaN` without support for number objects.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is `NaN`, else `false`.\n */\n function baseIsNaN(value) {\n return value !== value;\n }\n\n /**\n * The base implementation of `_.mean` and `_.meanBy` without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} array The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {number} Returns the mean.\n */\n function baseMean(array, iteratee) {\n var length = array == null ? 0 : array.length;\n return length ? (baseSum(array, iteratee) / length) : NAN;\n }\n\n /**\n * The base implementation of `_.property` without support for deep paths.\n *\n * @private\n * @param {string} key The key of the property to get.\n * @returns {Function} Returns the new accessor function.\n */\n function baseProperty(key) {\n return function(object) {\n return object == null ? undefined : object[key];\n };\n }\n\n /**\n * The base implementation of `_.propertyOf` without support for deep paths.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Function} Returns the new accessor function.\n */\n function basePropertyOf(object) {\n return function(key) {\n return object == null ? undefined : object[key];\n };\n }\n\n /**\n * The base implementation of `_.reduce` and `_.reduceRight`, without support\n * for iteratee shorthands, which iterates over `collection` using `eachFunc`.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @param {*} accumulator The initial value.\n * @param {boolean} initAccum Specify using the first or last element of\n * `collection` as the initial value.\n * @param {Function} eachFunc The function to iterate over `collection`.\n * @returns {*} Returns the accumulated value.\n */\n function baseReduce(collection, iteratee, accumulator, initAccum, eachFunc) {\n eachFunc(collection, function(value, index, collection) {\n accumulator = initAccum\n ? (initAccum = false, value)\n : iteratee(accumulator, value, index, collection);\n });\n return accumulator;\n }\n\n /**\n * The base implementation of `_.sortBy` which uses `comparer` to define the\n * sort order of `array` and replaces criteria objects with their corresponding\n * values.\n *\n * @private\n * @param {Array} array The array to sort.\n * @param {Function} comparer The function to define sort order.\n * @returns {Array} Returns `array`.\n */\n function baseSortBy(array, comparer) {\n var length = array.length;\n\n array.sort(comparer);\n while (length--) {\n array[length] = array[length].value;\n }\n return array;\n }\n\n /**\n * The base implementation of `_.sum` and `_.sumBy` without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} array The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {number} Returns the sum.\n */\n function baseSum(array, iteratee) {\n var result,\n index = -1,\n length = array.length;\n\n while (++index < length) {\n var current = iteratee(array[index]);\n if (current !== undefined) {\n result = result === undefined ? current : (result + current);\n }\n }\n return result;\n }\n\n /**\n * The base implementation of `_.times` without support for iteratee shorthands\n * or max array length checks.\n *\n * @private\n * @param {number} n The number of times to invoke `iteratee`.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns the array of results.\n */\n function baseTimes(n, iteratee) {\n var index = -1,\n result = Array(n);\n\n while (++index < n) {\n result[index] = iteratee(index);\n }\n return result;\n }\n\n /**\n * The base implementation of `_.toPairs` and `_.toPairsIn` which creates an array\n * of key-value pairs for `object` corresponding to the property names of `props`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Array} props The property names to get values for.\n * @returns {Object} Returns the key-value pairs.\n */\n function baseToPairs(object, props) {\n return arrayMap(props, function(key) {\n return [key, object[key]];\n });\n }\n\n /**\n * The base implementation of `_.unary` without support for storing metadata.\n *\n * @private\n * @param {Function} func The function to cap arguments for.\n * @returns {Function} Returns the new capped function.\n */\n function baseUnary(func) {\n return function(value) {\n return func(value);\n };\n }\n\n /**\n * The base implementation of `_.values` and `_.valuesIn` which creates an\n * array of `object` property values corresponding to the property names\n * of `props`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Array} props The property names to get values for.\n * @returns {Object} Returns the array of property values.\n */\n function baseValues(object, props) {\n return arrayMap(props, function(key) {\n return object[key];\n });\n }\n\n /**\n * Checks if a `cache` value for `key` exists.\n *\n * @private\n * @param {Object} cache The cache to query.\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\n function cacheHas(cache, key) {\n return cache.has(key);\n }\n\n /**\n * Used by `_.trim` and `_.trimStart` to get the index of the first string symbol\n * that is not found in the character symbols.\n *\n * @private\n * @param {Array} strSymbols The string symbols to inspect.\n * @param {Array} chrSymbols The character symbols to find.\n * @returns {number} Returns the index of the first unmatched string symbol.\n */\n function charsStartIndex(strSymbols, chrSymbols) {\n var index = -1,\n length = strSymbols.length;\n\n while (++index < length && baseIndexOf(chrSymbols, strSymbols[index], 0) > -1) {}\n return index;\n }\n\n /**\n * Used by `_.trim` and `_.trimEnd` to get the index of the last string symbol\n * that is not found in the character symbols.\n *\n * @private\n * @param {Array} strSymbols The string symbols to inspect.\n * @param {Array} chrSymbols The character symbols to find.\n * @returns {number} Returns the index of the last unmatched string symbol.\n */\n function charsEndIndex(strSymbols, chrSymbols) {\n var index = strSymbols.length;\n\n while (index-- && baseIndexOf(chrSymbols, strSymbols[index], 0) > -1) {}\n return index;\n }\n\n /**\n * Gets the number of `placeholder` occurrences in `array`.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} placeholder The placeholder to search for.\n * @returns {number} Returns the placeholder count.\n */\n function countHolders(array, placeholder) {\n var length = array.length,\n result = 0;\n\n while (length--) {\n if (array[length] === placeholder) {\n ++result;\n }\n }\n return result;\n }\n\n /**\n * Used by `_.deburr` to convert Latin-1 Supplement and Latin Extended-A\n * letters to basic Latin letters.\n *\n * @private\n * @param {string} letter The matched letter to deburr.\n * @returns {string} Returns the deburred letter.\n */\n var deburrLetter = basePropertyOf(deburredLetters);\n\n /**\n * Used by `_.escape` to convert characters to HTML entities.\n *\n * @private\n * @param {string} chr The matched character to escape.\n * @returns {string} Returns the escaped character.\n */\n var escapeHtmlChar = basePropertyOf(htmlEscapes);\n\n /**\n * Used by `_.template` to escape characters for inclusion in compiled string literals.\n *\n * @private\n * @param {string} chr The matched character to escape.\n * @returns {string} Returns the escaped character.\n */\n function escapeStringChar(chr) {\n return '\\\\' + stringEscapes[chr];\n }\n\n /**\n * Gets the value at `key` of `object`.\n *\n * @private\n * @param {Object} [object] The object to query.\n * @param {string} key The key of the property to get.\n * @returns {*} Returns the property value.\n */\n function getValue(object, key) {\n return object == null ? undefined : object[key];\n }\n\n /**\n * Checks if `string` contains Unicode symbols.\n *\n * @private\n * @param {string} string The string to inspect.\n * @returns {boolean} Returns `true` if a symbol is found, else `false`.\n */\n function hasUnicode(string) {\n return reHasUnicode.test(string);\n }\n\n /**\n * Checks if `string` contains a word composed of Unicode symbols.\n *\n * @private\n * @param {string} string The string to inspect.\n * @returns {boolean} Returns `true` if a word is found, else `false`.\n */\n function hasUnicodeWord(string) {\n return reHasUnicodeWord.test(string);\n }\n\n /**\n * Converts `iterator` to an array.\n *\n * @private\n * @param {Object} iterator The iterator to convert.\n * @returns {Array} Returns the converted array.\n */\n function iteratorToArray(iterator) {\n var data,\n result = [];\n\n while (!(data = iterator.next()).done) {\n result.push(data.value);\n }\n return result;\n }\n\n /**\n * Converts `map` to its key-value pairs.\n *\n * @private\n * @param {Object} map The map to convert.\n * @returns {Array} Returns the key-value pairs.\n */\n function mapToArray(map) {\n var index = -1,\n result = Array(map.size);\n\n map.forEach(function(value, key) {\n result[++index] = [key, value];\n });\n return result;\n }\n\n /**\n * Creates a unary function that invokes `func` with its argument transformed.\n *\n * @private\n * @param {Function} func The function to wrap.\n * @param {Function} transform The argument transform.\n * @returns {Function} Returns the new function.\n */\n function overArg(func, transform) {\n return function(arg) {\n return func(transform(arg));\n };\n }\n\n /**\n * Replaces all `placeholder` elements in `array` with an internal placeholder\n * and returns an array of their indexes.\n *\n * @private\n * @param {Array} array The array to modify.\n * @param {*} placeholder The placeholder to replace.\n * @returns {Array} Returns the new array of placeholder indexes.\n */\n function replaceHolders(array, placeholder) {\n var index = -1,\n length = array.length,\n resIndex = 0,\n result = [];\n\n while (++index < length) {\n var value = array[index];\n if (value === placeholder || value === PLACEHOLDER) {\n array[index] = PLACEHOLDER;\n result[resIndex++] = index;\n }\n }\n return result;\n }\n\n /**\n * Converts `set` to an array of its values.\n *\n * @private\n * @param {Object} set The set to convert.\n * @returns {Array} Returns the values.\n */\n function setToArray(set) {\n var index = -1,\n result = Array(set.size);\n\n set.forEach(function(value) {\n result[++index] = value;\n });\n return result;\n }\n\n /**\n * Converts `set` to its value-value pairs.\n *\n * @private\n * @param {Object} set The set to convert.\n * @returns {Array} Returns the value-value pairs.\n */\n function setToPairs(set) {\n var index = -1,\n result = Array(set.size);\n\n set.forEach(function(value) {\n result[++index] = [value, value];\n });\n return result;\n }\n\n /**\n * A specialized version of `_.indexOf` which performs strict equality\n * comparisons of values, i.e. `===`.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} value The value to search for.\n * @param {number} fromIndex The index to search from.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\n function strictIndexOf(array, value, fromIndex) {\n var index = fromIndex - 1,\n length = array.length;\n\n while (++index < length) {\n if (array[index] === value) {\n return index;\n }\n }\n return -1;\n }\n\n /**\n * A specialized version of `_.lastIndexOf` which performs strict equality\n * comparisons of values, i.e. `===`.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} value The value to search for.\n * @param {number} fromIndex The index to search from.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\n function strictLastIndexOf(array, value, fromIndex) {\n var index = fromIndex + 1;\n while (index--) {\n if (array[index] === value) {\n return index;\n }\n }\n return index;\n }\n\n /**\n * Gets the number of symbols in `string`.\n *\n * @private\n * @param {string} string The string to inspect.\n * @returns {number} Returns the string size.\n */\n function stringSize(string) {\n return hasUnicode(string)\n ? unicodeSize(string)\n : asciiSize(string);\n }\n\n /**\n * Converts `string` to an array.\n *\n * @private\n * @param {string} string The string to convert.\n * @returns {Array} Returns the converted array.\n */\n function stringToArray(string) {\n return hasUnicode(string)\n ? unicodeToArray(string)\n : asciiToArray(string);\n }\n\n /**\n * Used by `_.unescape` to convert HTML entities to characters.\n *\n * @private\n * @param {string} chr The matched character to unescape.\n * @returns {string} Returns the unescaped character.\n */\n var unescapeHtmlChar = basePropertyOf(htmlUnescapes);\n\n /**\n * Gets the size of a Unicode `string`.\n *\n * @private\n * @param {string} string The string inspect.\n * @returns {number} Returns the string size.\n */\n function unicodeSize(string) {\n var result = reUnicode.lastIndex = 0;\n while (reUnicode.test(string)) {\n ++result;\n }\n return result;\n }\n\n /**\n * Converts a Unicode `string` to an array.\n *\n * @private\n * @param {string} string The string to convert.\n * @returns {Array} Returns the converted array.\n */\n function unicodeToArray(string) {\n return string.match(reUnicode) || [];\n }\n\n /**\n * Splits a Unicode `string` into an array of its words.\n *\n * @private\n * @param {string} The string to inspect.\n * @returns {Array} Returns the words of `string`.\n */\n function unicodeWords(string) {\n return string.match(reUnicodeWord) || [];\n }\n\n /*--------------------------------------------------------------------------*/\n\n /**\n * Create a new pristine `lodash` function using the `context` object.\n *\n * @static\n * @memberOf _\n * @since 1.1.0\n * @category Util\n * @param {Object} [context=root] The context object.\n * @returns {Function} Returns a new `lodash` function.\n * @example\n *\n * _.mixin({ 'foo': _.constant('foo') });\n *\n * var lodash = _.runInContext();\n * lodash.mixin({ 'bar': lodash.constant('bar') });\n *\n * _.isFunction(_.foo);\n * // => true\n * _.isFunction(_.bar);\n * // => false\n *\n * lodash.isFunction(lodash.foo);\n * // => false\n * lodash.isFunction(lodash.bar);\n * // => true\n *\n * // Create a suped-up `defer` in Node.js.\n * var defer = _.runInContext({ 'setTimeout': setImmediate }).defer;\n */\n var runInContext = (function runInContext(context) {\n context = context == null ? root : _.defaults(root.Object(), context, _.pick(root, contextProps));\n\n /** Built-in constructor references. */\n var Array = context.Array,\n Date = context.Date,\n Error = context.Error,\n Function = context.Function,\n Math = context.Math,\n Object = context.Object,\n RegExp = context.RegExp,\n String = context.String,\n TypeError = context.TypeError;\n\n /** Used for built-in method references. */\n var arrayProto = Array.prototype,\n funcProto = Function.prototype,\n objectProto = Object.prototype;\n\n /** Used to detect overreaching core-js shims. */\n var coreJsData = context['__core-js_shared__'];\n\n /** Used to resolve the decompiled source of functions. */\n var funcToString = funcProto.toString;\n\n /** Used to check objects for own properties. */\n var hasOwnProperty = objectProto.hasOwnProperty;\n\n /** Used to generate unique IDs. */\n var idCounter = 0;\n\n /** Used to detect methods masquerading as native. */\n var maskSrcKey = (function() {\n var uid = /[^.]+$/.exec(coreJsData && coreJsData.keys && coreJsData.keys.IE_PROTO || '');\n return uid ? ('Symbol(src)_1.' + uid) : '';\n }());\n\n /**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\n var nativeObjectToString = objectProto.toString;\n\n /** Used to infer the `Object` constructor. */\n var objectCtorString = funcToString.call(Object);\n\n /** Used to restore the original `_` reference in `_.noConflict`. */\n var oldDash = root._;\n\n /** Used to detect if a method is native. */\n var reIsNative = RegExp('^' +\n funcToString.call(hasOwnProperty).replace(reRegExpChar, '\\\\$&')\n .replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g, '$1.*?') + '$'\n );\n\n /** Built-in value references. */\n var Buffer = moduleExports ? context.Buffer : undefined,\n Symbol = context.Symbol,\n Uint8Array = context.Uint8Array,\n allocUnsafe = Buffer ? Buffer.allocUnsafe : undefined,\n getPrototype = overArg(Object.getPrototypeOf, Object),\n objectCreate = Object.create,\n propertyIsEnumerable = objectProto.propertyIsEnumerable,\n splice = arrayProto.splice,\n spreadableSymbol = Symbol ? Symbol.isConcatSpreadable : undefined,\n symIterator = Symbol ? Symbol.iterator : undefined,\n symToStringTag = Symbol ? Symbol.toStringTag : undefined;\n\n var defineProperty = (function() {\n try {\n var func = getNative(Object, 'defineProperty');\n func({}, '', {});\n return func;\n } catch (e) {}\n }());\n\n /** Mocked built-ins. */\n var ctxClearTimeout = context.clearTimeout !== root.clearTimeout && context.clearTimeout,\n ctxNow = Date && Date.now !== root.Date.now && Date.now,\n ctxSetTimeout = context.setTimeout !== root.setTimeout && context.setTimeout;\n\n /* Built-in method references for those with the same name as other `lodash` methods. */\n var nativeCeil = Math.ceil,\n nativeFloor = Math.floor,\n nativeGetSymbols = Object.getOwnPropertySymbols,\n nativeIsBuffer = Buffer ? Buffer.isBuffer : undefined,\n nativeIsFinite = context.isFinite,\n nativeJoin = arrayProto.join,\n nativeKeys = overArg(Object.keys, Object),\n nativeMax = Math.max,\n nativeMin = Math.min,\n nativeNow = Date.now,\n nativeParseInt = context.parseInt,\n nativeRandom = Math.random,\n nativeReverse = arrayProto.reverse;\n\n /* Built-in method references that are verified to be native. */\n var DataView = getNative(context, 'DataView'),\n Map = getNative(context, 'Map'),\n Promise = getNative(context, 'Promise'),\n Set = getNative(context, 'Set'),\n WeakMap = getNative(context, 'WeakMap'),\n nativeCreate = getNative(Object, 'create');\n\n /** Used to store function metadata. */\n var metaMap = WeakMap && new WeakMap;\n\n /** Used to lookup unminified function names. */\n var realNames = {};\n\n /** Used to detect maps, sets, and weakmaps. */\n var dataViewCtorString = toSource(DataView),\n mapCtorString = toSource(Map),\n promiseCtorString = toSource(Promise),\n setCtorString = toSource(Set),\n weakMapCtorString = toSource(WeakMap);\n\n /** Used to convert symbols to primitives and strings. */\n var symbolProto = Symbol ? Symbol.prototype : undefined,\n symbolValueOf = symbolProto ? symbolProto.valueOf : undefined,\n symbolToString = symbolProto ? symbolProto.toString : undefined;\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Creates a `lodash` object which wraps `value` to enable implicit method\n * chain sequences. Methods that operate on and return arrays, collections,\n * and functions can be chained together. Methods that retrieve a single value\n * or may return a primitive value will automatically end the chain sequence\n * and return the unwrapped value. Otherwise, the value must be unwrapped\n * with `_#value`.\n *\n * Explicit chain sequences, which must be unwrapped with `_#value`, may be\n * enabled using `_.chain`.\n *\n * The execution of chained methods is lazy, that is, it's deferred until\n * `_#value` is implicitly or explicitly called.\n *\n * Lazy evaluation allows several methods to support shortcut fusion.\n * Shortcut fusion is an optimization to merge iteratee calls; this avoids\n * the creation of intermediate arrays and can greatly reduce the number of\n * iteratee executions. Sections of a chain sequence qualify for shortcut\n * fusion if the section is applied to an array and iteratees accept only\n * one argument. The heuristic for whether a section qualifies for shortcut\n * fusion is subject to change.\n *\n * Chaining is supported in custom builds as long as the `_#value` method is\n * directly or indirectly included in the build.\n *\n * In addition to lodash methods, wrappers have `Array` and `String` methods.\n *\n * The wrapper `Array` methods are:\n * `concat`, `join`, `pop`, `push`, `shift`, `sort`, `splice`, and `unshift`\n *\n * The wrapper `String` methods are:\n * `replace` and `split`\n *\n * The wrapper methods that support shortcut fusion are:\n * `at`, `compact`, `drop`, `dropRight`, `dropWhile`, `filter`, `find`,\n * `findLast`, `head`, `initial`, `last`, `map`, `reject`, `reverse`, `slice`,\n * `tail`, `take`, `takeRight`, `takeRightWhile`, `takeWhile`, and `toArray`\n *\n * The chainable wrapper methods are:\n * `after`, `ary`, `assign`, `assignIn`, `assignInWith`, `assignWith`, `at`,\n * `before`, `bind`, `bindAll`, `bindKey`, `castArray`, `chain`, `chunk`,\n * `commit`, `compact`, `concat`, `conforms`, `constant`, `countBy`, `create`,\n * `curry`, `debounce`, `defaults`, `defaultsDeep`, `defer`, `delay`,\n * `difference`, `differenceBy`, `differenceWith`, `drop`, `dropRight`,\n * `dropRightWhile`, `dropWhile`, `extend`, `extendWith`, `fill`, `filter`,\n * `flatMap`, `flatMapDeep`, `flatMapDepth`, `flatten`, `flattenDeep`,\n * `flattenDepth`, `flip`, `flow`, `flowRight`, `fromPairs`, `functions`,\n * `functionsIn`, `groupBy`, `initial`, `intersection`, `intersectionBy`,\n * `intersectionWith`, `invert`, `invertBy`, `invokeMap`, `iteratee`, `keyBy`,\n * `keys`, `keysIn`, `map`, `mapKeys`, `mapValues`, `matches`, `matchesProperty`,\n * `memoize`, `merge`, `mergeWith`, `method`, `methodOf`, `mixin`, `negate`,\n * `nthArg`, `omit`, `omitBy`, `once`, `orderBy`, `over`, `overArgs`,\n * `overEvery`, `overSome`, `partial`, `partialRight`, `partition`, `pick`,\n * `pickBy`, `plant`, `property`, `propertyOf`, `pull`, `pullAll`, `pullAllBy`,\n * `pullAllWith`, `pullAt`, `push`, `range`, `rangeRight`, `rearg`, `reject`,\n * `remove`, `rest`, `reverse`, `sampleSize`, `set`, `setWith`, `shuffle`,\n * `slice`, `sort`, `sortBy`, `splice`, `spread`, `tail`, `take`, `takeRight`,\n * `takeRightWhile`, `takeWhile`, `tap`, `throttle`, `thru`, `toArray`,\n * `toPairs`, `toPairsIn`, `toPath`, `toPlainObject`, `transform`, `unary`,\n * `union`, `unionBy`, `unionWith`, `uniq`, `uniqBy`, `uniqWith`, `unset`,\n * `unshift`, `unzip`, `unzipWith`, `update`, `updateWith`, `values`,\n * `valuesIn`, `without`, `wrap`, `xor`, `xorBy`, `xorWith`, `zip`,\n * `zipObject`, `zipObjectDeep`, and `zipWith`\n *\n * The wrapper methods that are **not** chainable by default are:\n * `add`, `attempt`, `camelCase`, `capitalize`, `ceil`, `clamp`, `clone`,\n * `cloneDeep`, `cloneDeepWith`, `cloneWith`, `conformsTo`, `deburr`,\n * `defaultTo`, `divide`, `each`, `eachRight`, `endsWith`, `eq`, `escape`,\n * `escapeRegExp`, `every`, `find`, `findIndex`, `findKey`, `findLast`,\n * `findLastIndex`, `findLastKey`, `first`, `floor`, `forEach`, `forEachRight`,\n * `forIn`, `forInRight`, `forOwn`, `forOwnRight`, `get`, `gt`, `gte`, `has`,\n * `hasIn`, `head`, `identity`, `includes`, `indexOf`, `inRange`, `invoke`,\n * `isArguments`, `isArray`, `isArrayBuffer`, `isArrayLike`, `isArrayLikeObject`,\n * `isBoolean`, `isBuffer`, `isDate`, `isElement`, `isEmpty`, `isEqual`,\n * `isEqualWith`, `isError`, `isFinite`, `isFunction`, `isInteger`, `isLength`,\n * `isMap`, `isMatch`, `isMatchWith`, `isNaN`, `isNative`, `isNil`, `isNull`,\n * `isNumber`, `isObject`, `isObjectLike`, `isPlainObject`, `isRegExp`,\n * `isSafeInteger`, `isSet`, `isString`, `isUndefined`, `isTypedArray`,\n * `isWeakMap`, `isWeakSet`, `join`, `kebabCase`, `last`, `lastIndexOf`,\n * `lowerCase`, `lowerFirst`, `lt`, `lte`, `max`, `maxBy`, `mean`, `meanBy`,\n * `min`, `minBy`, `multiply`, `noConflict`, `noop`, `now`, `nth`, `pad`,\n * `padEnd`, `padStart`, `parseInt`, `pop`, `random`, `reduce`, `reduceRight`,\n * `repeat`, `result`, `round`, `runInContext`, `sample`, `shift`, `size`,\n * `snakeCase`, `some`, `sortedIndex`, `sortedIndexBy`, `sortedLastIndex`,\n * `sortedLastIndexBy`, `startCase`, `startsWith`, `stubArray`, `stubFalse`,\n * `stubObject`, `stubString`, `stubTrue`, `subtract`, `sum`, `sumBy`,\n * `template`, `times`, `toFinite`, `toInteger`, `toJSON`, `toLength`,\n * `toLower`, `toNumber`, `toSafeInteger`, `toString`, `toUpper`, `trim`,\n * `trimEnd`, `trimStart`, `truncate`, `unescape`, `uniqueId`, `upperCase`,\n * `upperFirst`, `value`, and `words`\n *\n * @name _\n * @constructor\n * @category Seq\n * @param {*} value The value to wrap in a `lodash` instance.\n * @returns {Object} Returns the new `lodash` wrapper instance.\n * @example\n *\n * function square(n) {\n * return n * n;\n * }\n *\n * var wrapped = _([1, 2, 3]);\n *\n * // Returns an unwrapped value.\n * wrapped.reduce(_.add);\n * // => 6\n *\n * // Returns a wrapped value.\n * var squares = wrapped.map(square);\n *\n * _.isArray(squares);\n * // => false\n *\n * _.isArray(squares.value());\n * // => true\n */\n function lodash(value) {\n if (isObjectLike(value) && !isArray(value) && !(value instanceof LazyWrapper)) {\n if (value instanceof LodashWrapper) {\n return value;\n }\n if (hasOwnProperty.call(value, '__wrapped__')) {\n return wrapperClone(value);\n }\n }\n return new LodashWrapper(value);\n }\n\n /**\n * The base implementation of `_.create` without support for assigning\n * properties to the created object.\n *\n * @private\n * @param {Object} proto The object to inherit from.\n * @returns {Object} Returns the new object.\n */\n var baseCreate = (function() {\n function object() {}\n return function(proto) {\n if (!isObject(proto)) {\n return {};\n }\n if (objectCreate) {\n return objectCreate(proto);\n }\n object.prototype = proto;\n var result = new object;\n object.prototype = undefined;\n return result;\n };\n }());\n\n /**\n * The function whose prototype chain sequence wrappers inherit from.\n *\n * @private\n */\n function baseLodash() {\n // No operation performed.\n }\n\n /**\n * The base constructor for creating `lodash` wrapper objects.\n *\n * @private\n * @param {*} value The value to wrap.\n * @param {boolean} [chainAll] Enable explicit method chain sequences.\n */\n function LodashWrapper(value, chainAll) {\n this.__wrapped__ = value;\n this.__actions__ = [];\n this.__chain__ = !!chainAll;\n this.__index__ = 0;\n this.__values__ = undefined;\n }\n\n /**\n * By default, the template delimiters used by lodash are like those in\n * embedded Ruby (ERB) as well as ES2015 template strings. Change the\n * following template settings to use alternative delimiters.\n *\n * @static\n * @memberOf _\n * @type {Object}\n */\n lodash.templateSettings = {\n\n /**\n * Used to detect `data` property values to be HTML-escaped.\n *\n * @memberOf _.templateSettings\n * @type {RegExp}\n */\n 'escape': reEscape,\n\n /**\n * Used to detect code to be evaluated.\n *\n * @memberOf _.templateSettings\n * @type {RegExp}\n */\n 'evaluate': reEvaluate,\n\n /**\n * Used to detect `data` property values to inject.\n *\n * @memberOf _.templateSettings\n * @type {RegExp}\n */\n 'interpolate': reInterpolate,\n\n /**\n * Used to reference the data object in the template text.\n *\n * @memberOf _.templateSettings\n * @type {string}\n */\n 'variable': '',\n\n /**\n * Used to import variables into the compiled template.\n *\n * @memberOf _.templateSettings\n * @type {Object}\n */\n 'imports': {\n\n /**\n * A reference to the `lodash` function.\n *\n * @memberOf _.templateSettings.imports\n * @type {Function}\n */\n '_': lodash\n }\n };\n\n // Ensure wrappers are instances of `baseLodash`.\n lodash.prototype = baseLodash.prototype;\n lodash.prototype.constructor = lodash;\n\n LodashWrapper.prototype = baseCreate(baseLodash.prototype);\n LodashWrapper.prototype.constructor = LodashWrapper;\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Creates a lazy wrapper object which wraps `value` to enable lazy evaluation.\n *\n * @private\n * @constructor\n * @param {*} value The value to wrap.\n */\n function LazyWrapper(value) {\n this.__wrapped__ = value;\n this.__actions__ = [];\n this.__dir__ = 1;\n this.__filtered__ = false;\n this.__iteratees__ = [];\n this.__takeCount__ = MAX_ARRAY_LENGTH;\n this.__views__ = [];\n }\n\n /**\n * Creates a clone of the lazy wrapper object.\n *\n * @private\n * @name clone\n * @memberOf LazyWrapper\n * @returns {Object} Returns the cloned `LazyWrapper` object.\n */\n function lazyClone() {\n var result = new LazyWrapper(this.__wrapped__);\n result.__actions__ = copyArray(this.__actions__);\n result.__dir__ = this.__dir__;\n result.__filtered__ = this.__filtered__;\n result.__iteratees__ = copyArray(this.__iteratees__);\n result.__takeCount__ = this.__takeCount__;\n result.__views__ = copyArray(this.__views__);\n return result;\n }\n\n /**\n * Reverses the direction of lazy iteration.\n *\n * @private\n * @name reverse\n * @memberOf LazyWrapper\n * @returns {Object} Returns the new reversed `LazyWrapper` object.\n */\n function lazyReverse() {\n if (this.__filtered__) {\n var result = new LazyWrapper(this);\n result.__dir__ = -1;\n result.__filtered__ = true;\n } else {\n result = this.clone();\n result.__dir__ *= -1;\n }\n return result;\n }\n\n /**\n * Extracts the unwrapped value from its lazy wrapper.\n *\n * @private\n * @name value\n * @memberOf LazyWrapper\n * @returns {*} Returns the unwrapped value.\n */\n function lazyValue() {\n var array = this.__wrapped__.value(),\n dir = this.__dir__,\n isArr = isArray(array),\n isRight = dir < 0,\n arrLength = isArr ? array.length : 0,\n view = getView(0, arrLength, this.__views__),\n start = view.start,\n end = view.end,\n length = end - start,\n index = isRight ? end : (start - 1),\n iteratees = this.__iteratees__,\n iterLength = iteratees.length,\n resIndex = 0,\n takeCount = nativeMin(length, this.__takeCount__);\n\n if (!isArr || (!isRight && arrLength == length && takeCount == length)) {\n return baseWrapperValue(array, this.__actions__);\n }\n var result = [];\n\n outer:\n while (length-- && resIndex < takeCount) {\n index += dir;\n\n var iterIndex = -1,\n value = array[index];\n\n while (++iterIndex < iterLength) {\n var data = iteratees[iterIndex],\n iteratee = data.iteratee,\n type = data.type,\n computed = iteratee(value);\n\n if (type == LAZY_MAP_FLAG) {\n value = computed;\n } else if (!computed) {\n if (type == LAZY_FILTER_FLAG) {\n continue outer;\n } else {\n break outer;\n }\n }\n }\n result[resIndex++] = value;\n }\n return result;\n }\n\n // Ensure `LazyWrapper` is an instance of `baseLodash`.\n LazyWrapper.prototype = baseCreate(baseLodash.prototype);\n LazyWrapper.prototype.constructor = LazyWrapper;\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Creates a hash object.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\n function Hash(entries) {\n var index = -1,\n length = entries == null ? 0 : entries.length;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n }\n\n /**\n * Removes all key-value entries from the hash.\n *\n * @private\n * @name clear\n * @memberOf Hash\n */\n function hashClear() {\n this.__data__ = nativeCreate ? nativeCreate(null) : {};\n this.size = 0;\n }\n\n /**\n * Removes `key` and its value from the hash.\n *\n * @private\n * @name delete\n * @memberOf Hash\n * @param {Object} hash The hash to modify.\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\n function hashDelete(key) {\n var result = this.has(key) && delete this.__data__[key];\n this.size -= result ? 1 : 0;\n return result;\n }\n\n /**\n * Gets the hash value for `key`.\n *\n * @private\n * @name get\n * @memberOf Hash\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\n function hashGet(key) {\n var data = this.__data__;\n if (nativeCreate) {\n var result = data[key];\n return result === HASH_UNDEFINED ? undefined : result;\n }\n return hasOwnProperty.call(data, key) ? data[key] : undefined;\n }\n\n /**\n * Checks if a hash value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf Hash\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\n function hashHas(key) {\n var data = this.__data__;\n return nativeCreate ? (data[key] !== undefined) : hasOwnProperty.call(data, key);\n }\n\n /**\n * Sets the hash `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf Hash\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the hash instance.\n */\n function hashSet(key, value) {\n var data = this.__data__;\n this.size += this.has(key) ? 0 : 1;\n data[key] = (nativeCreate && value === undefined) ? HASH_UNDEFINED : value;\n return this;\n }\n\n // Add methods to `Hash`.\n Hash.prototype.clear = hashClear;\n Hash.prototype['delete'] = hashDelete;\n Hash.prototype.get = hashGet;\n Hash.prototype.has = hashHas;\n Hash.prototype.set = hashSet;\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Creates an list cache object.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\n function ListCache(entries) {\n var index = -1,\n length = entries == null ? 0 : entries.length;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n }\n\n /**\n * Removes all key-value entries from the list cache.\n *\n * @private\n * @name clear\n * @memberOf ListCache\n */\n function listCacheClear() {\n this.__data__ = [];\n this.size = 0;\n }\n\n /**\n * Removes `key` and its value from the list cache.\n *\n * @private\n * @name delete\n * @memberOf ListCache\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\n function listCacheDelete(key) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n if (index < 0) {\n return false;\n }\n var lastIndex = data.length - 1;\n if (index == lastIndex) {\n data.pop();\n } else {\n splice.call(data, index, 1);\n }\n --this.size;\n return true;\n }\n\n /**\n * Gets the list cache value for `key`.\n *\n * @private\n * @name get\n * @memberOf ListCache\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\n function listCacheGet(key) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n return index < 0 ? undefined : data[index][1];\n }\n\n /**\n * Checks if a list cache value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf ListCache\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\n function listCacheHas(key) {\n return assocIndexOf(this.__data__, key) > -1;\n }\n\n /**\n * Sets the list cache `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf ListCache\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the list cache instance.\n */\n function listCacheSet(key, value) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n if (index < 0) {\n ++this.size;\n data.push([key, value]);\n } else {\n data[index][1] = value;\n }\n return this;\n }\n\n // Add methods to `ListCache`.\n ListCache.prototype.clear = listCacheClear;\n ListCache.prototype['delete'] = listCacheDelete;\n ListCache.prototype.get = listCacheGet;\n ListCache.prototype.has = listCacheHas;\n ListCache.prototype.set = listCacheSet;\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Creates a map cache object to store key-value pairs.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\n function MapCache(entries) {\n var index = -1,\n length = entries == null ? 0 : entries.length;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n }\n\n /**\n * Removes all key-value entries from the map.\n *\n * @private\n * @name clear\n * @memberOf MapCache\n */\n function mapCacheClear() {\n this.size = 0;\n this.__data__ = {\n 'hash': new Hash,\n 'map': new (Map || ListCache),\n 'string': new Hash\n };\n }\n\n /**\n * Removes `key` and its value from the map.\n *\n * @private\n * @name delete\n * @memberOf MapCache\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\n function mapCacheDelete(key) {\n var result = getMapData(this, key)['delete'](key);\n this.size -= result ? 1 : 0;\n return result;\n }\n\n /**\n * Gets the map value for `key`.\n *\n * @private\n * @name get\n * @memberOf MapCache\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\n function mapCacheGet(key) {\n return getMapData(this, key).get(key);\n }\n\n /**\n * Checks if a map value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf MapCache\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\n function mapCacheHas(key) {\n return getMapData(this, key).has(key);\n }\n\n /**\n * Sets the map `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf MapCache\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the map cache instance.\n */\n function mapCacheSet(key, value) {\n var data = getMapData(this, key),\n size = data.size;\n\n data.set(key, value);\n this.size += data.size == size ? 0 : 1;\n return this;\n }\n\n // Add methods to `MapCache`.\n MapCache.prototype.clear = mapCacheClear;\n MapCache.prototype['delete'] = mapCacheDelete;\n MapCache.prototype.get = mapCacheGet;\n MapCache.prototype.has = mapCacheHas;\n MapCache.prototype.set = mapCacheSet;\n\n /*------------------------------------------------------------------------*/\n\n /**\n *\n * Creates an array cache object to store unique values.\n *\n * @private\n * @constructor\n * @param {Array} [values] The values to cache.\n */\n function SetCache(values) {\n var index = -1,\n length = values == null ? 0 : values.length;\n\n this.__data__ = new MapCache;\n while (++index < length) {\n this.add(values[index]);\n }\n }\n\n /**\n * Adds `value` to the array cache.\n *\n * @private\n * @name add\n * @memberOf SetCache\n * @alias push\n * @param {*} value The value to cache.\n * @returns {Object} Returns the cache instance.\n */\n function setCacheAdd(value) {\n this.__data__.set(value, HASH_UNDEFINED);\n return this;\n }\n\n /**\n * Checks if `value` is in the array cache.\n *\n * @private\n * @name has\n * @memberOf SetCache\n * @param {*} value The value to search for.\n * @returns {number} Returns `true` if `value` is found, else `false`.\n */\n function setCacheHas(value) {\n return this.__data__.has(value);\n }\n\n // Add methods to `SetCache`.\n SetCache.prototype.add = SetCache.prototype.push = setCacheAdd;\n SetCache.prototype.has = setCacheHas;\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Creates a stack cache object to store key-value pairs.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\n function Stack(entries) {\n var data = this.__data__ = new ListCache(entries);\n this.size = data.size;\n }\n\n /**\n * Removes all key-value entries from the stack.\n *\n * @private\n * @name clear\n * @memberOf Stack\n */\n function stackClear() {\n this.__data__ = new ListCache;\n this.size = 0;\n }\n\n /**\n * Removes `key` and its value from the stack.\n *\n * @private\n * @name delete\n * @memberOf Stack\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\n function stackDelete(key) {\n var data = this.__data__,\n result = data['delete'](key);\n\n this.size = data.size;\n return result;\n }\n\n /**\n * Gets the stack value for `key`.\n *\n * @private\n * @name get\n * @memberOf Stack\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\n function stackGet(key) {\n return this.__data__.get(key);\n }\n\n /**\n * Checks if a stack value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf Stack\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\n function stackHas(key) {\n return this.__data__.has(key);\n }\n\n /**\n * Sets the stack `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf Stack\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the stack cache instance.\n */\n function stackSet(key, value) {\n var data = this.__data__;\n if (data instanceof ListCache) {\n var pairs = data.__data__;\n if (!Map || (pairs.length < LARGE_ARRAY_SIZE - 1)) {\n pairs.push([key, value]);\n this.size = ++data.size;\n return this;\n }\n data = this.__data__ = new MapCache(pairs);\n }\n data.set(key, value);\n this.size = data.size;\n return this;\n }\n\n // Add methods to `Stack`.\n Stack.prototype.clear = stackClear;\n Stack.prototype['delete'] = stackDelete;\n Stack.prototype.get = stackGet;\n Stack.prototype.has = stackHas;\n Stack.prototype.set = stackSet;\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Creates an array of the enumerable property names of the array-like `value`.\n *\n * @private\n * @param {*} value The value to query.\n * @param {boolean} inherited Specify returning inherited property names.\n * @returns {Array} Returns the array of property names.\n */\n function arrayLikeKeys(value, inherited) {\n var isArr = isArray(value),\n isArg = !isArr && isArguments(value),\n isBuff = !isArr && !isArg && isBuffer(value),\n isType = !isArr && !isArg && !isBuff && isTypedArray(value),\n skipIndexes = isArr || isArg || isBuff || isType,\n result = skipIndexes ? baseTimes(value.length, String) : [],\n length = result.length;\n\n for (var key in value) {\n if ((inherited || hasOwnProperty.call(value, key)) &&\n !(skipIndexes && (\n // Safari 9 has enumerable `arguments.length` in strict mode.\n key == 'length' ||\n // Node.js 0.10 has enumerable non-index properties on buffers.\n (isBuff && (key == 'offset' || key == 'parent')) ||\n // PhantomJS 2 has enumerable non-index properties on typed arrays.\n (isType && (key == 'buffer' || key == 'byteLength' || key == 'byteOffset')) ||\n // Skip index properties.\n isIndex(key, length)\n ))) {\n result.push(key);\n }\n }\n return result;\n }\n\n /**\n * A specialized version of `_.sample` for arrays.\n *\n * @private\n * @param {Array} array The array to sample.\n * @returns {*} Returns the random element.\n */\n function arraySample(array) {\n var length = array.length;\n return length ? array[baseRandom(0, length - 1)] : undefined;\n }\n\n /**\n * A specialized version of `_.sampleSize` for arrays.\n *\n * @private\n * @param {Array} array The array to sample.\n * @param {number} n The number of elements to sample.\n * @returns {Array} Returns the random elements.\n */\n function arraySampleSize(array, n) {\n return shuffleSelf(copyArray(array), baseClamp(n, 0, array.length));\n }\n\n /**\n * A specialized version of `_.shuffle` for arrays.\n *\n * @private\n * @param {Array} array The array to shuffle.\n * @returns {Array} Returns the new shuffled array.\n */\n function arrayShuffle(array) {\n return shuffleSelf(copyArray(array));\n }\n\n /**\n * This function is like `assignValue` except that it doesn't assign\n * `undefined` values.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {string} key The key of the property to assign.\n * @param {*} value The value to assign.\n */\n function assignMergeValue(object, key, value) {\n if ((value !== undefined && !eq(object[key], value)) ||\n (value === undefined && !(key in object))) {\n baseAssignValue(object, key, value);\n }\n }\n\n /**\n * Assigns `value` to `key` of `object` if the existing value is not equivalent\n * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * for equality comparisons.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {string} key The key of the property to assign.\n * @param {*} value The value to assign.\n */\n function assignValue(object, key, value) {\n var objValue = object[key];\n if (!(hasOwnProperty.call(object, key) && eq(objValue, value)) ||\n (value === undefined && !(key in object))) {\n baseAssignValue(object, key, value);\n }\n }\n\n /**\n * Gets the index at which the `key` is found in `array` of key-value pairs.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} key The key to search for.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\n function assocIndexOf(array, key) {\n var length = array.length;\n while (length--) {\n if (eq(array[length][0], key)) {\n return length;\n }\n }\n return -1;\n }\n\n /**\n * Aggregates elements of `collection` on `accumulator` with keys transformed\n * by `iteratee` and values set by `setter`.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} setter The function to set `accumulator` values.\n * @param {Function} iteratee The iteratee to transform keys.\n * @param {Object} accumulator The initial aggregated object.\n * @returns {Function} Returns `accumulator`.\n */\n function baseAggregator(collection, setter, iteratee, accumulator) {\n baseEach(collection, function(value, key, collection) {\n setter(accumulator, value, iteratee(value), collection);\n });\n return accumulator;\n }\n\n /**\n * The base implementation of `_.assign` without support for multiple sources\n * or `customizer` functions.\n *\n * @private\n * @param {Object} object The destination object.\n * @param {Object} source The source object.\n * @returns {Object} Returns `object`.\n */\n function baseAssign(object, source) {\n return object && copyObject(source, keys(source), object);\n }\n\n /**\n * The base implementation of `_.assignIn` without support for multiple sources\n * or `customizer` functions.\n *\n * @private\n * @param {Object} object The destination object.\n * @param {Object} source The source object.\n * @returns {Object} Returns `object`.\n */\n function baseAssignIn(object, source) {\n return object && copyObject(source, keysIn(source), object);\n }\n\n /**\n * The base implementation of `assignValue` and `assignMergeValue` without\n * value checks.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {string} key The key of the property to assign.\n * @param {*} value The value to assign.\n */\n function baseAssignValue(object, key, value) {\n if (key == '__proto__' && defineProperty) {\n defineProperty(object, key, {\n 'configurable': true,\n 'enumerable': true,\n 'value': value,\n 'writable': true\n });\n } else {\n object[key] = value;\n }\n }\n\n /**\n * The base implementation of `_.at` without support for individual paths.\n *\n * @private\n * @param {Object} object The object to iterate over.\n * @param {string[]} paths The property paths to pick.\n * @returns {Array} Returns the picked elements.\n */\n function baseAt(object, paths) {\n var index = -1,\n length = paths.length,\n result = Array(length),\n skip = object == null;\n\n while (++index < length) {\n result[index] = skip ? undefined : get(object, paths[index]);\n }\n return result;\n }\n\n /**\n * The base implementation of `_.clamp` which doesn't coerce arguments.\n *\n * @private\n * @param {number} number The number to clamp.\n * @param {number} [lower] The lower bound.\n * @param {number} upper The upper bound.\n * @returns {number} Returns the clamped number.\n */\n function baseClamp(number, lower, upper) {\n if (number === number) {\n if (upper !== undefined) {\n number = number <= upper ? number : upper;\n }\n if (lower !== undefined) {\n number = number >= lower ? number : lower;\n }\n }\n return number;\n }\n\n /**\n * The base implementation of `_.clone` and `_.cloneDeep` which tracks\n * traversed objects.\n *\n * @private\n * @param {*} value The value to clone.\n * @param {boolean} bitmask The bitmask flags.\n * 1 - Deep clone\n * 2 - Flatten inherited properties\n * 4 - Clone symbols\n * @param {Function} [customizer] The function to customize cloning.\n * @param {string} [key] The key of `value`.\n * @param {Object} [object] The parent object of `value`.\n * @param {Object} [stack] Tracks traversed objects and their clone counterparts.\n * @returns {*} Returns the cloned value.\n */\n function baseClone(value, bitmask, customizer, key, object, stack) {\n var result,\n isDeep = bitmask & CLONE_DEEP_FLAG,\n isFlat = bitmask & CLONE_FLAT_FLAG,\n isFull = bitmask & CLONE_SYMBOLS_FLAG;\n\n if (customizer) {\n result = object ? customizer(value, key, object, stack) : customizer(value);\n }\n if (result !== undefined) {\n return result;\n }\n if (!isObject(value)) {\n return value;\n }\n var isArr = isArray(value);\n if (isArr) {\n result = initCloneArray(value);\n if (!isDeep) {\n return copyArray(value, result);\n }\n } else {\n var tag = getTag(value),\n isFunc = tag == funcTag || tag == genTag;\n\n if (isBuffer(value)) {\n return cloneBuffer(value, isDeep);\n }\n if (tag == objectTag || tag == argsTag || (isFunc && !object)) {\n result = (isFlat || isFunc) ? {} : initCloneObject(value);\n if (!isDeep) {\n return isFlat\n ? copySymbolsIn(value, baseAssignIn(result, value))\n : copySymbols(value, baseAssign(result, value));\n }\n } else {\n if (!cloneableTags[tag]) {\n return object ? value : {};\n }\n result = initCloneByTag(value, tag, isDeep);\n }\n }\n // Check for circular references and return its corresponding clone.\n stack || (stack = new Stack);\n var stacked = stack.get(value);\n if (stacked) {\n return stacked;\n }\n stack.set(value, result);\n\n if (isSet(value)) {\n value.forEach(function(subValue) {\n result.add(baseClone(subValue, bitmask, customizer, subValue, value, stack));\n });\n } else if (isMap(value)) {\n value.forEach(function(subValue, key) {\n result.set(key, baseClone(subValue, bitmask, customizer, key, value, stack));\n });\n }\n\n var keysFunc = isFull\n ? (isFlat ? getAllKeysIn : getAllKeys)\n : (isFlat ? keysIn : keys);\n\n var props = isArr ? undefined : keysFunc(value);\n arrayEach(props || value, function(subValue, key) {\n if (props) {\n key = subValue;\n subValue = value[key];\n }\n // Recursively populate clone (susceptible to call stack limits).\n assignValue(result, key, baseClone(subValue, bitmask, customizer, key, value, stack));\n });\n return result;\n }\n\n /**\n * The base implementation of `_.conforms` which doesn't clone `source`.\n *\n * @private\n * @param {Object} source The object of property predicates to conform to.\n * @returns {Function} Returns the new spec function.\n */\n function baseConforms(source) {\n var props = keys(source);\n return function(object) {\n return baseConformsTo(object, source, props);\n };\n }\n\n /**\n * The base implementation of `_.conformsTo` which accepts `props` to check.\n *\n * @private\n * @param {Object} object The object to inspect.\n * @param {Object} source The object of property predicates to conform to.\n * @returns {boolean} Returns `true` if `object` conforms, else `false`.\n */\n function baseConformsTo(object, source, props) {\n var length = props.length;\n if (object == null) {\n return !length;\n }\n object = Object(object);\n while (length--) {\n var key = props[length],\n predicate = source[key],\n value = object[key];\n\n if ((value === undefined && !(key in object)) || !predicate(value)) {\n return false;\n }\n }\n return true;\n }\n\n /**\n * The base implementation of `_.delay` and `_.defer` which accepts `args`\n * to provide to `func`.\n *\n * @private\n * @param {Function} func The function to delay.\n * @param {number} wait The number of milliseconds to delay invocation.\n * @param {Array} args The arguments to provide to `func`.\n * @returns {number|Object} Returns the timer id or timeout object.\n */\n function baseDelay(func, wait, args) {\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n return setTimeout(function() { func.apply(undefined, args); }, wait);\n }\n\n /**\n * The base implementation of methods like `_.difference` without support\n * for excluding multiple arrays or iteratee shorthands.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {Array} values The values to exclude.\n * @param {Function} [iteratee] The iteratee invoked per element.\n * @param {Function} [comparator] The comparator invoked per element.\n * @returns {Array} Returns the new array of filtered values.\n */\n function baseDifference(array, values, iteratee, comparator) {\n var index = -1,\n includes = arrayIncludes,\n isCommon = true,\n length = array.length,\n result = [],\n valuesLength = values.length;\n\n if (!length) {\n return result;\n }\n if (iteratee) {\n values = arrayMap(values, baseUnary(iteratee));\n }\n if (comparator) {\n includes = arrayIncludesWith;\n isCommon = false;\n }\n else if (values.length >= LARGE_ARRAY_SIZE) {\n includes = cacheHas;\n isCommon = false;\n values = new SetCache(values);\n }\n outer:\n while (++index < length) {\n var value = array[index],\n computed = iteratee == null ? value : iteratee(value);\n\n value = (comparator || value !== 0) ? value : 0;\n if (isCommon && computed === computed) {\n var valuesIndex = valuesLength;\n while (valuesIndex--) {\n if (values[valuesIndex] === computed) {\n continue outer;\n }\n }\n result.push(value);\n }\n else if (!includes(values, computed, comparator)) {\n result.push(value);\n }\n }\n return result;\n }\n\n /**\n * The base implementation of `_.forEach` without support for iteratee shorthands.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array|Object} Returns `collection`.\n */\n var baseEach = createBaseEach(baseForOwn);\n\n /**\n * The base implementation of `_.forEachRight` without support for iteratee shorthands.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array|Object} Returns `collection`.\n */\n var baseEachRight = createBaseEach(baseForOwnRight, true);\n\n /**\n * The base implementation of `_.every` without support for iteratee shorthands.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {boolean} Returns `true` if all elements pass the predicate check,\n * else `false`\n */\n function baseEvery(collection, predicate) {\n var result = true;\n baseEach(collection, function(value, index, collection) {\n result = !!predicate(value, index, collection);\n return result;\n });\n return result;\n }\n\n /**\n * The base implementation of methods like `_.max` and `_.min` which accepts a\n * `comparator` to determine the extremum value.\n *\n * @private\n * @param {Array} array The array to iterate over.\n * @param {Function} iteratee The iteratee invoked per iteration.\n * @param {Function} comparator The comparator used to compare values.\n * @returns {*} Returns the extremum value.\n */\n function baseExtremum(array, iteratee, comparator) {\n var index = -1,\n length = array.length;\n\n while (++index < length) {\n var value = array[index],\n current = iteratee(value);\n\n if (current != null && (computed === undefined\n ? (current === current && !isSymbol(current))\n : comparator(current, computed)\n )) {\n var computed = current,\n result = value;\n }\n }\n return result;\n }\n\n /**\n * The base implementation of `_.fill` without an iteratee call guard.\n *\n * @private\n * @param {Array} array The array to fill.\n * @param {*} value The value to fill `array` with.\n * @param {number} [start=0] The start position.\n * @param {number} [end=array.length] The end position.\n * @returns {Array} Returns `array`.\n */\n function baseFill(array, value, start, end) {\n var length = array.length;\n\n start = toInteger(start);\n if (start < 0) {\n start = -start > length ? 0 : (length + start);\n }\n end = (end === undefined || end > length) ? length : toInteger(end);\n if (end < 0) {\n end += length;\n }\n end = start > end ? 0 : toLength(end);\n while (start < end) {\n array[start++] = value;\n }\n return array;\n }\n\n /**\n * The base implementation of `_.filter` without support for iteratee shorthands.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {Array} Returns the new filtered array.\n */\n function baseFilter(collection, predicate) {\n var result = [];\n baseEach(collection, function(value, index, collection) {\n if (predicate(value, index, collection)) {\n result.push(value);\n }\n });\n return result;\n }\n\n /**\n * The base implementation of `_.flatten` with support for restricting flattening.\n *\n * @private\n * @param {Array} array The array to flatten.\n * @param {number} depth The maximum recursion depth.\n * @param {boolean} [predicate=isFlattenable] The function invoked per iteration.\n * @param {boolean} [isStrict] Restrict to values that pass `predicate` checks.\n * @param {Array} [result=[]] The initial result value.\n * @returns {Array} Returns the new flattened array.\n */\n function baseFlatten(array, depth, predicate, isStrict, result) {\n var index = -1,\n length = array.length;\n\n predicate || (predicate = isFlattenable);\n result || (result = []);\n\n while (++index < length) {\n var value = array[index];\n if (depth > 0 && predicate(value)) {\n if (depth > 1) {\n // Recursively flatten arrays (susceptible to call stack limits).\n baseFlatten(value, depth - 1, predicate, isStrict, result);\n } else {\n arrayPush(result, value);\n }\n } else if (!isStrict) {\n result[result.length] = value;\n }\n }\n return result;\n }\n\n /**\n * The base implementation of `baseForOwn` which iterates over `object`\n * properties returned by `keysFunc` and invokes `iteratee` for each property.\n * Iteratee functions may exit iteration early by explicitly returning `false`.\n *\n * @private\n * @param {Object} object The object to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @param {Function} keysFunc The function to get the keys of `object`.\n * @returns {Object} Returns `object`.\n */\n var baseFor = createBaseFor();\n\n /**\n * This function is like `baseFor` except that it iterates over properties\n * in the opposite order.\n *\n * @private\n * @param {Object} object The object to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @param {Function} keysFunc The function to get the keys of `object`.\n * @returns {Object} Returns `object`.\n */\n var baseForRight = createBaseFor(true);\n\n /**\n * The base implementation of `_.forOwn` without support for iteratee shorthands.\n *\n * @private\n * @param {Object} object The object to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Object} Returns `object`.\n */\n function baseForOwn(object, iteratee) {\n return object && baseFor(object, iteratee, keys);\n }\n\n /**\n * The base implementation of `_.forOwnRight` without support for iteratee shorthands.\n *\n * @private\n * @param {Object} object The object to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Object} Returns `object`.\n */\n function baseForOwnRight(object, iteratee) {\n return object && baseForRight(object, iteratee, keys);\n }\n\n /**\n * The base implementation of `_.functions` which creates an array of\n * `object` function property names filtered from `props`.\n *\n * @private\n * @param {Object} object The object to inspect.\n * @param {Array} props The property names to filter.\n * @returns {Array} Returns the function names.\n */\n function baseFunctions(object, props) {\n return arrayFilter(props, function(key) {\n return isFunction(object[key]);\n });\n }\n\n /**\n * The base implementation of `_.get` without support for default values.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Array|string} path The path of the property to get.\n * @returns {*} Returns the resolved value.\n */\n function baseGet(object, path) {\n path = castPath(path, object);\n\n var index = 0,\n length = path.length;\n\n while (object != null && index < length) {\n object = object[toKey(path[index++])];\n }\n return (index && index == length) ? object : undefined;\n }\n\n /**\n * The base implementation of `getAllKeys` and `getAllKeysIn` which uses\n * `keysFunc` and `symbolsFunc` to get the enumerable property names and\n * symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Function} keysFunc The function to get the keys of `object`.\n * @param {Function} symbolsFunc The function to get the symbols of `object`.\n * @returns {Array} Returns the array of property names and symbols.\n */\n function baseGetAllKeys(object, keysFunc, symbolsFunc) {\n var result = keysFunc(object);\n return isArray(object) ? result : arrayPush(result, symbolsFunc(object));\n }\n\n /**\n * The base implementation of `getTag` without fallbacks for buggy environments.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the `toStringTag`.\n */\n function baseGetTag(value) {\n if (value == null) {\n return value === undefined ? undefinedTag : nullTag;\n }\n return (symToStringTag && symToStringTag in Object(value))\n ? getRawTag(value)\n : objectToString(value);\n }\n\n /**\n * The base implementation of `_.gt` which doesn't coerce arguments.\n *\n * @private\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if `value` is greater than `other`,\n * else `false`.\n */\n function baseGt(value, other) {\n return value > other;\n }\n\n /**\n * The base implementation of `_.has` without support for deep paths.\n *\n * @private\n * @param {Object} [object] The object to query.\n * @param {Array|string} key The key to check.\n * @returns {boolean} Returns `true` if `key` exists, else `false`.\n */\n function baseHas(object, key) {\n return object != null && hasOwnProperty.call(object, key);\n }\n\n /**\n * The base implementation of `_.hasIn` without support for deep paths.\n *\n * @private\n * @param {Object} [object] The object to query.\n * @param {Array|string} key The key to check.\n * @returns {boolean} Returns `true` if `key` exists, else `false`.\n */\n function baseHasIn(object, key) {\n return object != null && key in Object(object);\n }\n\n /**\n * The base implementation of `_.inRange` which doesn't coerce arguments.\n *\n * @private\n * @param {number} number The number to check.\n * @param {number} start The start of the range.\n * @param {number} end The end of the range.\n * @returns {boolean} Returns `true` if `number` is in the range, else `false`.\n */\n function baseInRange(number, start, end) {\n return number >= nativeMin(start, end) && number < nativeMax(start, end);\n }\n\n /**\n * The base implementation of methods like `_.intersection`, without support\n * for iteratee shorthands, that accepts an array of arrays to inspect.\n *\n * @private\n * @param {Array} arrays The arrays to inspect.\n * @param {Function} [iteratee] The iteratee invoked per element.\n * @param {Function} [comparator] The comparator invoked per element.\n * @returns {Array} Returns the new array of shared values.\n */\n function baseIntersection(arrays, iteratee, comparator) {\n var includes = comparator ? arrayIncludesWith : arrayIncludes,\n length = arrays[0].length,\n othLength = arrays.length,\n othIndex = othLength,\n caches = Array(othLength),\n maxLength = Infinity,\n result = [];\n\n while (othIndex--) {\n var array = arrays[othIndex];\n if (othIndex && iteratee) {\n array = arrayMap(array, baseUnary(iteratee));\n }\n maxLength = nativeMin(array.length, maxLength);\n caches[othIndex] = !comparator && (iteratee || (length >= 120 && array.length >= 120))\n ? new SetCache(othIndex && array)\n : undefined;\n }\n array = arrays[0];\n\n var index = -1,\n seen = caches[0];\n\n outer:\n while (++index < length && result.length < maxLength) {\n var value = array[index],\n computed = iteratee ? iteratee(value) : value;\n\n value = (comparator || value !== 0) ? value : 0;\n if (!(seen\n ? cacheHas(seen, computed)\n : includes(result, computed, comparator)\n )) {\n othIndex = othLength;\n while (--othIndex) {\n var cache = caches[othIndex];\n if (!(cache\n ? cacheHas(cache, computed)\n : includes(arrays[othIndex], computed, comparator))\n ) {\n continue outer;\n }\n }\n if (seen) {\n seen.push(computed);\n }\n result.push(value);\n }\n }\n return result;\n }\n\n /**\n * The base implementation of `_.invert` and `_.invertBy` which inverts\n * `object` with values transformed by `iteratee` and set by `setter`.\n *\n * @private\n * @param {Object} object The object to iterate over.\n * @param {Function} setter The function to set `accumulator` values.\n * @param {Function} iteratee The iteratee to transform values.\n * @param {Object} accumulator The initial inverted object.\n * @returns {Function} Returns `accumulator`.\n */\n function baseInverter(object, setter, iteratee, accumulator) {\n baseForOwn(object, function(value, key, object) {\n setter(accumulator, iteratee(value), key, object);\n });\n return accumulator;\n }\n\n /**\n * The base implementation of `_.invoke` without support for individual\n * method arguments.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Array|string} path The path of the method to invoke.\n * @param {Array} args The arguments to invoke the method with.\n * @returns {*} Returns the result of the invoked method.\n */\n function baseInvoke(object, path, args) {\n path = castPath(path, object);\n object = parent(object, path);\n var func = object == null ? object : object[toKey(last(path))];\n return func == null ? undefined : apply(func, object, args);\n }\n\n /**\n * The base implementation of `_.isArguments`.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an `arguments` object,\n */\n function baseIsArguments(value) {\n return isObjectLike(value) && baseGetTag(value) == argsTag;\n }\n\n /**\n * The base implementation of `_.isArrayBuffer` without Node.js optimizations.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an array buffer, else `false`.\n */\n function baseIsArrayBuffer(value) {\n return isObjectLike(value) && baseGetTag(value) == arrayBufferTag;\n }\n\n /**\n * The base implementation of `_.isDate` without Node.js optimizations.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a date object, else `false`.\n */\n function baseIsDate(value) {\n return isObjectLike(value) && baseGetTag(value) == dateTag;\n }\n\n /**\n * The base implementation of `_.isEqual` which supports partial comparisons\n * and tracks traversed objects.\n *\n * @private\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @param {boolean} bitmask The bitmask flags.\n * 1 - Unordered comparison\n * 2 - Partial comparison\n * @param {Function} [customizer] The function to customize comparisons.\n * @param {Object} [stack] Tracks traversed `value` and `other` objects.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n */\n function baseIsEqual(value, other, bitmask, customizer, stack) {\n if (value === other) {\n return true;\n }\n if (value == null || other == null || (!isObjectLike(value) && !isObjectLike(other))) {\n return value !== value && other !== other;\n }\n return baseIsEqualDeep(value, other, bitmask, customizer, baseIsEqual, stack);\n }\n\n /**\n * A specialized version of `baseIsEqual` for arrays and objects which performs\n * deep comparisons and tracks traversed objects enabling objects with circular\n * references to be compared.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} [stack] Tracks traversed `object` and `other` objects.\n * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n */\n function baseIsEqualDeep(object, other, bitmask, customizer, equalFunc, stack) {\n var objIsArr = isArray(object),\n othIsArr = isArray(other),\n objTag = objIsArr ? arrayTag : getTag(object),\n othTag = othIsArr ? arrayTag : getTag(other);\n\n objTag = objTag == argsTag ? objectTag : objTag;\n othTag = othTag == argsTag ? objectTag : othTag;\n\n var objIsObj = objTag == objectTag,\n othIsObj = othTag == objectTag,\n isSameTag = objTag == othTag;\n\n if (isSameTag && isBuffer(object)) {\n if (!isBuffer(other)) {\n return false;\n }\n objIsArr = true;\n objIsObj = false;\n }\n if (isSameTag && !objIsObj) {\n stack || (stack = new Stack);\n return (objIsArr || isTypedArray(object))\n ? equalArrays(object, other, bitmask, customizer, equalFunc, stack)\n : equalByTag(object, other, objTag, bitmask, customizer, equalFunc, stack);\n }\n if (!(bitmask & COMPARE_PARTIAL_FLAG)) {\n var objIsWrapped = objIsObj && hasOwnProperty.call(object, '__wrapped__'),\n othIsWrapped = othIsObj && hasOwnProperty.call(other, '__wrapped__');\n\n if (objIsWrapped || othIsWrapped) {\n var objUnwrapped = objIsWrapped ? object.value() : object,\n othUnwrapped = othIsWrapped ? other.value() : other;\n\n stack || (stack = new Stack);\n return equalFunc(objUnwrapped, othUnwrapped, bitmask, customizer, stack);\n }\n }\n if (!isSameTag) {\n return false;\n }\n stack || (stack = new Stack);\n return equalObjects(object, other, bitmask, customizer, equalFunc, stack);\n }\n\n /**\n * The base implementation of `_.isMap` without Node.js optimizations.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a map, else `false`.\n */\n function baseIsMap(value) {\n return isObjectLike(value) && getTag(value) == mapTag;\n }\n\n /**\n * The base implementation of `_.isMatch` without support for iteratee shorthands.\n *\n * @private\n * @param {Object} object The object to inspect.\n * @param {Object} source The object of property values to match.\n * @param {Array} matchData The property names, values, and compare flags to match.\n * @param {Function} [customizer] The function to customize comparisons.\n * @returns {boolean} Returns `true` if `object` is a match, else `false`.\n */\n function baseIsMatch(object, source, matchData, customizer) {\n var index = matchData.length,\n length = index,\n noCustomizer = !customizer;\n\n if (object == null) {\n return !length;\n }\n object = Object(object);\n while (index--) {\n var data = matchData[index];\n if ((noCustomizer && data[2])\n ? data[1] !== object[data[0]]\n : !(data[0] in object)\n ) {\n return false;\n }\n }\n while (++index < length) {\n data = matchData[index];\n var key = data[0],\n objValue = object[key],\n srcValue = data[1];\n\n if (noCustomizer && data[2]) {\n if (objValue === undefined && !(key in object)) {\n return false;\n }\n } else {\n var stack = new Stack;\n if (customizer) {\n var result = customizer(objValue, srcValue, key, object, source, stack);\n }\n if (!(result === undefined\n ? baseIsEqual(srcValue, objValue, COMPARE_PARTIAL_FLAG | COMPARE_UNORDERED_FLAG, customizer, stack)\n : result\n )) {\n return false;\n }\n }\n }\n return true;\n }\n\n /**\n * The base implementation of `_.isNative` without bad shim checks.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a native function,\n * else `false`.\n */\n function baseIsNative(value) {\n if (!isObject(value) || isMasked(value)) {\n return false;\n }\n var pattern = isFunction(value) ? reIsNative : reIsHostCtor;\n return pattern.test(toSource(value));\n }\n\n /**\n * The base implementation of `_.isRegExp` without Node.js optimizations.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a regexp, else `false`.\n */\n function baseIsRegExp(value) {\n return isObjectLike(value) && baseGetTag(value) == regexpTag;\n }\n\n /**\n * The base implementation of `_.isSet` without Node.js optimizations.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a set, else `false`.\n */\n function baseIsSet(value) {\n return isObjectLike(value) && getTag(value) == setTag;\n }\n\n /**\n * The base implementation of `_.isTypedArray` without Node.js optimizations.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a typed array, else `false`.\n */\n function baseIsTypedArray(value) {\n return isObjectLike(value) &&\n isLength(value.length) && !!typedArrayTags[baseGetTag(value)];\n }\n\n /**\n * The base implementation of `_.iteratee`.\n *\n * @private\n * @param {*} [value=_.identity] The value to convert to an iteratee.\n * @returns {Function} Returns the iteratee.\n */\n function baseIteratee(value) {\n // Don't store the `typeof` result in a variable to avoid a JIT bug in Safari 9.\n // See https://bugs.webkit.org/show_bug.cgi?id=156034 for more details.\n if (typeof value == 'function') {\n return value;\n }\n if (value == null) {\n return identity;\n }\n if (typeof value == 'object') {\n return isArray(value)\n ? baseMatchesProperty(value[0], value[1])\n : baseMatches(value);\n }\n return property(value);\n }\n\n /**\n * The base implementation of `_.keys` which doesn't treat sparse arrays as dense.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n */\n function baseKeys(object) {\n if (!isPrototype(object)) {\n return nativeKeys(object);\n }\n var result = [];\n for (var key in Object(object)) {\n if (hasOwnProperty.call(object, key) && key != 'constructor') {\n result.push(key);\n }\n }\n return result;\n }\n\n /**\n * The base implementation of `_.keysIn` which doesn't treat sparse arrays as dense.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n */\n function baseKeysIn(object) {\n if (!isObject(object)) {\n return nativeKeysIn(object);\n }\n var isProto = isPrototype(object),\n result = [];\n\n for (var key in object) {\n if (!(key == 'constructor' && (isProto || !hasOwnProperty.call(object, key)))) {\n result.push(key);\n }\n }\n return result;\n }\n\n /**\n * The base implementation of `_.lt` which doesn't coerce arguments.\n *\n * @private\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if `value` is less than `other`,\n * else `false`.\n */\n function baseLt(value, other) {\n return value < other;\n }\n\n /**\n * The base implementation of `_.map` without support for iteratee shorthands.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns the new mapped array.\n */\n function baseMap(collection, iteratee) {\n var index = -1,\n result = isArrayLike(collection) ? Array(collection.length) : [];\n\n baseEach(collection, function(value, key, collection) {\n result[++index] = iteratee(value, key, collection);\n });\n return result;\n }\n\n /**\n * The base implementation of `_.matches` which doesn't clone `source`.\n *\n * @private\n * @param {Object} source The object of property values to match.\n * @returns {Function} Returns the new spec function.\n */\n function baseMatches(source) {\n var matchData = getMatchData(source);\n if (matchData.length == 1 && matchData[0][2]) {\n return matchesStrictComparable(matchData[0][0], matchData[0][1]);\n }\n return function(object) {\n return object === source || baseIsMatch(object, source, matchData);\n };\n }\n\n /**\n * The base implementation of `_.matchesProperty` which doesn't clone `srcValue`.\n *\n * @private\n * @param {string} path The path of the property to get.\n * @param {*} srcValue The value to match.\n * @returns {Function} Returns the new spec function.\n */\n function baseMatchesProperty(path, srcValue) {\n if (isKey(path) && isStrictComparable(srcValue)) {\n return matchesStrictComparable(toKey(path), srcValue);\n }\n return function(object) {\n var objValue = get(object, path);\n return (objValue === undefined && objValue === srcValue)\n ? hasIn(object, path)\n : baseIsEqual(srcValue, objValue, COMPARE_PARTIAL_FLAG | COMPARE_UNORDERED_FLAG);\n };\n }\n\n /**\n * The base implementation of `_.merge` without support for multiple sources.\n *\n * @private\n * @param {Object} object The destination object.\n * @param {Object} source The source object.\n * @param {number} srcIndex The index of `source`.\n * @param {Function} [customizer] The function to customize merged values.\n * @param {Object} [stack] Tracks traversed source values and their merged\n * counterparts.\n */\n function baseMerge(object, source, srcIndex, customizer, stack) {\n if (object === source) {\n return;\n }\n baseFor(source, function(srcValue, key) {\n stack || (stack = new Stack);\n if (isObject(srcValue)) {\n baseMergeDeep(object, source, key, srcIndex, baseMerge, customizer, stack);\n }\n else {\n var newValue = customizer\n ? customizer(safeGet(object, key), srcValue, (key + ''), object, source, stack)\n : undefined;\n\n if (newValue === undefined) {\n newValue = srcValue;\n }\n assignMergeValue(object, key, newValue);\n }\n }, keysIn);\n }\n\n /**\n * A specialized version of `baseMerge` for arrays and objects which performs\n * deep merges and tracks traversed objects enabling objects with circular\n * references to be merged.\n *\n * @private\n * @param {Object} object The destination object.\n * @param {Object} source The source object.\n * @param {string} key The key of the value to merge.\n * @param {number} srcIndex The index of `source`.\n * @param {Function} mergeFunc The function to merge values.\n * @param {Function} [customizer] The function to customize assigned values.\n * @param {Object} [stack] Tracks traversed source values and their merged\n * counterparts.\n */\n function baseMergeDeep(object, source, key, srcIndex, mergeFunc, customizer, stack) {\n var objValue = safeGet(object, key),\n srcValue = safeGet(source, key),\n stacked = stack.get(srcValue);\n\n if (stacked) {\n assignMergeValue(object, key, stacked);\n return;\n }\n var newValue = customizer\n ? customizer(objValue, srcValue, (key + ''), object, source, stack)\n : undefined;\n\n var isCommon = newValue === undefined;\n\n if (isCommon) {\n var isArr = isArray(srcValue),\n isBuff = !isArr && isBuffer(srcValue),\n isTyped = !isArr && !isBuff && isTypedArray(srcValue);\n\n newValue = srcValue;\n if (isArr || isBuff || isTyped) {\n if (isArray(objValue)) {\n newValue = objValue;\n }\n else if (isArrayLikeObject(objValue)) {\n newValue = copyArray(objValue);\n }\n else if (isBuff) {\n isCommon = false;\n newValue = cloneBuffer(srcValue, true);\n }\n else if (isTyped) {\n isCommon = false;\n newValue = cloneTypedArray(srcValue, true);\n }\n else {\n newValue = [];\n }\n }\n else if (isPlainObject(srcValue) || isArguments(srcValue)) {\n newValue = objValue;\n if (isArguments(objValue)) {\n newValue = toPlainObject(objValue);\n }\n else if (!isObject(objValue) || isFunction(objValue)) {\n newValue = initCloneObject(srcValue);\n }\n }\n else {\n isCommon = false;\n }\n }\n if (isCommon) {\n // Recursively merge objects and arrays (susceptible to call stack limits).\n stack.set(srcValue, newValue);\n mergeFunc(newValue, srcValue, srcIndex, customizer, stack);\n stack['delete'](srcValue);\n }\n assignMergeValue(object, key, newValue);\n }\n\n /**\n * The base implementation of `_.nth` which doesn't coerce arguments.\n *\n * @private\n * @param {Array} array The array to query.\n * @param {number} n The index of the element to return.\n * @returns {*} Returns the nth element of `array`.\n */\n function baseNth(array, n) {\n var length = array.length;\n if (!length) {\n return;\n }\n n += n < 0 ? length : 0;\n return isIndex(n, length) ? array[n] : undefined;\n }\n\n /**\n * The base implementation of `_.orderBy` without param guards.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function[]|Object[]|string[]} iteratees The iteratees to sort by.\n * @param {string[]} orders The sort orders of `iteratees`.\n * @returns {Array} Returns the new sorted array.\n */\n function baseOrderBy(collection, iteratees, orders) {\n var index = -1;\n iteratees = arrayMap(iteratees.length ? iteratees : [identity], baseUnary(getIteratee()));\n\n var result = baseMap(collection, function(value, key, collection) {\n var criteria = arrayMap(iteratees, function(iteratee) {\n return iteratee(value);\n });\n return { 'criteria': criteria, 'index': ++index, 'value': value };\n });\n\n return baseSortBy(result, function(object, other) {\n return compareMultiple(object, other, orders);\n });\n }\n\n /**\n * The base implementation of `_.pick` without support for individual\n * property identifiers.\n *\n * @private\n * @param {Object} object The source object.\n * @param {string[]} paths The property paths to pick.\n * @returns {Object} Returns the new object.\n */\n function basePick(object, paths) {\n return basePickBy(object, paths, function(value, path) {\n return hasIn(object, path);\n });\n }\n\n /**\n * The base implementation of `_.pickBy` without support for iteratee shorthands.\n *\n * @private\n * @param {Object} object The source object.\n * @param {string[]} paths The property paths to pick.\n * @param {Function} predicate The function invoked per property.\n * @returns {Object} Returns the new object.\n */\n function basePickBy(object, paths, predicate) {\n var index = -1,\n length = paths.length,\n result = {};\n\n while (++index < length) {\n var path = paths[index],\n value = baseGet(object, path);\n\n if (predicate(value, path)) {\n baseSet(result, castPath(path, object), value);\n }\n }\n return result;\n }\n\n /**\n * A specialized version of `baseProperty` which supports deep paths.\n *\n * @private\n * @param {Array|string} path The path of the property to get.\n * @returns {Function} Returns the new accessor function.\n */\n function basePropertyDeep(path) {\n return function(object) {\n return baseGet(object, path);\n };\n }\n\n /**\n * The base implementation of `_.pullAllBy` without support for iteratee\n * shorthands.\n *\n * @private\n * @param {Array} array The array to modify.\n * @param {Array} values The values to remove.\n * @param {Function} [iteratee] The iteratee invoked per element.\n * @param {Function} [comparator] The comparator invoked per element.\n * @returns {Array} Returns `array`.\n */\n function basePullAll(array, values, iteratee, comparator) {\n var indexOf = comparator ? baseIndexOfWith : baseIndexOf,\n index = -1,\n length = values.length,\n seen = array;\n\n if (array === values) {\n values = copyArray(values);\n }\n if (iteratee) {\n seen = arrayMap(array, baseUnary(iteratee));\n }\n while (++index < length) {\n var fromIndex = 0,\n value = values[index],\n computed = iteratee ? iteratee(value) : value;\n\n while ((fromIndex = indexOf(seen, computed, fromIndex, comparator)) > -1) {\n if (seen !== array) {\n splice.call(seen, fromIndex, 1);\n }\n splice.call(array, fromIndex, 1);\n }\n }\n return array;\n }\n\n /**\n * The base implementation of `_.pullAt` without support for individual\n * indexes or capturing the removed elements.\n *\n * @private\n * @param {Array} array The array to modify.\n * @param {number[]} indexes The indexes of elements to remove.\n * @returns {Array} Returns `array`.\n */\n function basePullAt(array, indexes) {\n var length = array ? indexes.length : 0,\n lastIndex = length - 1;\n\n while (length--) {\n var index = indexes[length];\n if (length == lastIndex || index !== previous) {\n var previous = index;\n if (isIndex(index)) {\n splice.call(array, index, 1);\n } else {\n baseUnset(array, index);\n }\n }\n }\n return array;\n }\n\n /**\n * The base implementation of `_.random` without support for returning\n * floating-point numbers.\n *\n * @private\n * @param {number} lower The lower bound.\n * @param {number} upper The upper bound.\n * @returns {number} Returns the random number.\n */\n function baseRandom(lower, upper) {\n return lower + nativeFloor(nativeRandom() * (upper - lower + 1));\n }\n\n /**\n * The base implementation of `_.range` and `_.rangeRight` which doesn't\n * coerce arguments.\n *\n * @private\n * @param {number} start The start of the range.\n * @param {number} end The end of the range.\n * @param {number} step The value to increment or decrement by.\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {Array} Returns the range of numbers.\n */\n function baseRange(start, end, step, fromRight) {\n var index = -1,\n length = nativeMax(nativeCeil((end - start) / (step || 1)), 0),\n result = Array(length);\n\n while (length--) {\n result[fromRight ? length : ++index] = start;\n start += step;\n }\n return result;\n }\n\n /**\n * The base implementation of `_.repeat` which doesn't coerce arguments.\n *\n * @private\n * @param {string} string The string to repeat.\n * @param {number} n The number of times to repeat the string.\n * @returns {string} Returns the repeated string.\n */\n function baseRepeat(string, n) {\n var result = '';\n if (!string || n < 1 || n > MAX_SAFE_INTEGER) {\n return result;\n }\n // Leverage the exponentiation by squaring algorithm for a faster repeat.\n // See https://en.wikipedia.org/wiki/Exponentiation_by_squaring for more details.\n do {\n if (n % 2) {\n result += string;\n }\n n = nativeFloor(n / 2);\n if (n) {\n string += string;\n }\n } while (n);\n\n return result;\n }\n\n /**\n * The base implementation of `_.rest` which doesn't validate or coerce arguments.\n *\n * @private\n * @param {Function} func The function to apply a rest parameter to.\n * @param {number} [start=func.length-1] The start position of the rest parameter.\n * @returns {Function} Returns the new function.\n */\n function baseRest(func, start) {\n return setToString(overRest(func, start, identity), func + '');\n }\n\n /**\n * The base implementation of `_.sample`.\n *\n * @private\n * @param {Array|Object} collection The collection to sample.\n * @returns {*} Returns the random element.\n */\n function baseSample(collection) {\n return arraySample(values(collection));\n }\n\n /**\n * The base implementation of `_.sampleSize` without param guards.\n *\n * @private\n * @param {Array|Object} collection The collection to sample.\n * @param {number} n The number of elements to sample.\n * @returns {Array} Returns the random elements.\n */\n function baseSampleSize(collection, n) {\n var array = values(collection);\n return shuffleSelf(array, baseClamp(n, 0, array.length));\n }\n\n /**\n * The base implementation of `_.set`.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {Array|string} path The path of the property to set.\n * @param {*} value The value to set.\n * @param {Function} [customizer] The function to customize path creation.\n * @returns {Object} Returns `object`.\n */\n function baseSet(object, path, value, customizer) {\n if (!isObject(object)) {\n return object;\n }\n path = castPath(path, object);\n\n var index = -1,\n length = path.length,\n lastIndex = length - 1,\n nested = object;\n\n while (nested != null && ++index < length) {\n var key = toKey(path[index]),\n newValue = value;\n\n if (index != lastIndex) {\n var objValue = nested[key];\n newValue = customizer ? customizer(objValue, key, nested) : undefined;\n if (newValue === undefined) {\n newValue = isObject(objValue)\n ? objValue\n : (isIndex(path[index + 1]) ? [] : {});\n }\n }\n assignValue(nested, key, newValue);\n nested = nested[key];\n }\n return object;\n }\n\n /**\n * The base implementation of `setData` without support for hot loop shorting.\n *\n * @private\n * @param {Function} func The function to associate metadata with.\n * @param {*} data The metadata.\n * @returns {Function} Returns `func`.\n */\n var baseSetData = !metaMap ? identity : function(func, data) {\n metaMap.set(func, data);\n return func;\n };\n\n /**\n * The base implementation of `setToString` without support for hot loop shorting.\n *\n * @private\n * @param {Function} func The function to modify.\n * @param {Function} string The `toString` result.\n * @returns {Function} Returns `func`.\n */\n var baseSetToString = !defineProperty ? identity : function(func, string) {\n return defineProperty(func, 'toString', {\n 'configurable': true,\n 'enumerable': false,\n 'value': constant(string),\n 'writable': true\n });\n };\n\n /**\n * The base implementation of `_.shuffle`.\n *\n * @private\n * @param {Array|Object} collection The collection to shuffle.\n * @returns {Array} Returns the new shuffled array.\n */\n function baseShuffle(collection) {\n return shuffleSelf(values(collection));\n }\n\n /**\n * The base implementation of `_.slice` without an iteratee call guard.\n *\n * @private\n * @param {Array} array The array to slice.\n * @param {number} [start=0] The start position.\n * @param {number} [end=array.length] The end position.\n * @returns {Array} Returns the slice of `array`.\n */\n function baseSlice(array, start, end) {\n var index = -1,\n length = array.length;\n\n if (start < 0) {\n start = -start > length ? 0 : (length + start);\n }\n end = end > length ? length : end;\n if (end < 0) {\n end += length;\n }\n length = start > end ? 0 : ((end - start) >>> 0);\n start >>>= 0;\n\n var result = Array(length);\n while (++index < length) {\n result[index] = array[index + start];\n }\n return result;\n }\n\n /**\n * The base implementation of `_.some` without support for iteratee shorthands.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {boolean} Returns `true` if any element passes the predicate check,\n * else `false`.\n */\n function baseSome(collection, predicate) {\n var result;\n\n baseEach(collection, function(value, index, collection) {\n result = predicate(value, index, collection);\n return !result;\n });\n return !!result;\n }\n\n /**\n * The base implementation of `_.sortedIndex` and `_.sortedLastIndex` which\n * performs a binary search of `array` to determine the index at which `value`\n * should be inserted into `array` in order to maintain its sort order.\n *\n * @private\n * @param {Array} array The sorted array to inspect.\n * @param {*} value The value to evaluate.\n * @param {boolean} [retHighest] Specify returning the highest qualified index.\n * @returns {number} Returns the index at which `value` should be inserted\n * into `array`.\n */\n function baseSortedIndex(array, value, retHighest) {\n var low = 0,\n high = array == null ? low : array.length;\n\n if (typeof value == 'number' && value === value && high <= HALF_MAX_ARRAY_LENGTH) {\n while (low < high) {\n var mid = (low + high) >>> 1,\n computed = array[mid];\n\n if (computed !== null && !isSymbol(computed) &&\n (retHighest ? (computed <= value) : (computed < value))) {\n low = mid + 1;\n } else {\n high = mid;\n }\n }\n return high;\n }\n return baseSortedIndexBy(array, value, identity, retHighest);\n }\n\n /**\n * The base implementation of `_.sortedIndexBy` and `_.sortedLastIndexBy`\n * which invokes `iteratee` for `value` and each element of `array` to compute\n * their sort ranking. The iteratee is invoked with one argument; (value).\n *\n * @private\n * @param {Array} array The sorted array to inspect.\n * @param {*} value The value to evaluate.\n * @param {Function} iteratee The iteratee invoked per element.\n * @param {boolean} [retHighest] Specify returning the highest qualified index.\n * @returns {number} Returns the index at which `value` should be inserted\n * into `array`.\n */\n function baseSortedIndexBy(array, value, iteratee, retHighest) {\n value = iteratee(value);\n\n var low = 0,\n high = array == null ? 0 : array.length,\n valIsNaN = value !== value,\n valIsNull = value === null,\n valIsSymbol = isSymbol(value),\n valIsUndefined = value === undefined;\n\n while (low < high) {\n var mid = nativeFloor((low + high) / 2),\n computed = iteratee(array[mid]),\n othIsDefined = computed !== undefined,\n othIsNull = computed === null,\n othIsReflexive = computed === computed,\n othIsSymbol = isSymbol(computed);\n\n if (valIsNaN) {\n var setLow = retHighest || othIsReflexive;\n } else if (valIsUndefined) {\n setLow = othIsReflexive && (retHighest || othIsDefined);\n } else if (valIsNull) {\n setLow = othIsReflexive && othIsDefined && (retHighest || !othIsNull);\n } else if (valIsSymbol) {\n setLow = othIsReflexive && othIsDefined && !othIsNull && (retHighest || !othIsSymbol);\n } else if (othIsNull || othIsSymbol) {\n setLow = false;\n } else {\n setLow = retHighest ? (computed <= value) : (computed < value);\n }\n if (setLow) {\n low = mid + 1;\n } else {\n high = mid;\n }\n }\n return nativeMin(high, MAX_ARRAY_INDEX);\n }\n\n /**\n * The base implementation of `_.sortedUniq` and `_.sortedUniqBy` without\n * support for iteratee shorthands.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {Function} [iteratee] The iteratee invoked per element.\n * @returns {Array} Returns the new duplicate free array.\n */\n function baseSortedUniq(array, iteratee) {\n var index = -1,\n length = array.length,\n resIndex = 0,\n result = [];\n\n while (++index < length) {\n var value = array[index],\n computed = iteratee ? iteratee(value) : value;\n\n if (!index || !eq(computed, seen)) {\n var seen = computed;\n result[resIndex++] = value === 0 ? 0 : value;\n }\n }\n return result;\n }\n\n /**\n * The base implementation of `_.toNumber` which doesn't ensure correct\n * conversions of binary, hexadecimal, or octal string values.\n *\n * @private\n * @param {*} value The value to process.\n * @returns {number} Returns the number.\n */\n function baseToNumber(value) {\n if (typeof value == 'number') {\n return value;\n }\n if (isSymbol(value)) {\n return NAN;\n }\n return +value;\n }\n\n /**\n * The base implementation of `_.toString` which doesn't convert nullish\n * values to empty strings.\n *\n * @private\n * @param {*} value The value to process.\n * @returns {string} Returns the string.\n */\n function baseToString(value) {\n // Exit early for strings to avoid a performance hit in some environments.\n if (typeof value == 'string') {\n return value;\n }\n if (isArray(value)) {\n // Recursively convert values (susceptible to call stack limits).\n return arrayMap(value, baseToString) + '';\n }\n if (isSymbol(value)) {\n return symbolToString ? symbolToString.call(value) : '';\n }\n var result = (value + '');\n return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result;\n }\n\n /**\n * The base implementation of `_.uniqBy` without support for iteratee shorthands.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {Function} [iteratee] The iteratee invoked per element.\n * @param {Function} [comparator] The comparator invoked per element.\n * @returns {Array} Returns the new duplicate free array.\n */\n function baseUniq(array, iteratee, comparator) {\n var index = -1,\n includes = arrayIncludes,\n length = array.length,\n isCommon = true,\n result = [],\n seen = result;\n\n if (comparator) {\n isCommon = false;\n includes = arrayIncludesWith;\n }\n else if (length >= LARGE_ARRAY_SIZE) {\n var set = iteratee ? null : createSet(array);\n if (set) {\n return setToArray(set);\n }\n isCommon = false;\n includes = cacheHas;\n seen = new SetCache;\n }\n else {\n seen = iteratee ? [] : result;\n }\n outer:\n while (++index < length) {\n var value = array[index],\n computed = iteratee ? iteratee(value) : value;\n\n value = (comparator || value !== 0) ? value : 0;\n if (isCommon && computed === computed) {\n var seenIndex = seen.length;\n while (seenIndex--) {\n if (seen[seenIndex] === computed) {\n continue outer;\n }\n }\n if (iteratee) {\n seen.push(computed);\n }\n result.push(value);\n }\n else if (!includes(seen, computed, comparator)) {\n if (seen !== result) {\n seen.push(computed);\n }\n result.push(value);\n }\n }\n return result;\n }\n\n /**\n * The base implementation of `_.unset`.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {Array|string} path The property path to unset.\n * @returns {boolean} Returns `true` if the property is deleted, else `false`.\n */\n function baseUnset(object, path) {\n path = castPath(path, object);\n object = parent(object, path);\n return object == null || delete object[toKey(last(path))];\n }\n\n /**\n * The base implementation of `_.update`.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {Array|string} path The path of the property to update.\n * @param {Function} updater The function to produce the updated value.\n * @param {Function} [customizer] The function to customize path creation.\n * @returns {Object} Returns `object`.\n */\n function baseUpdate(object, path, updater, customizer) {\n return baseSet(object, path, updater(baseGet(object, path)), customizer);\n }\n\n /**\n * The base implementation of methods like `_.dropWhile` and `_.takeWhile`\n * without support for iteratee shorthands.\n *\n * @private\n * @param {Array} array The array to query.\n * @param {Function} predicate The function invoked per iteration.\n * @param {boolean} [isDrop] Specify dropping elements instead of taking them.\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {Array} Returns the slice of `array`.\n */\n function baseWhile(array, predicate, isDrop, fromRight) {\n var length = array.length,\n index = fromRight ? length : -1;\n\n while ((fromRight ? index-- : ++index < length) &&\n predicate(array[index], index, array)) {}\n\n return isDrop\n ? baseSlice(array, (fromRight ? 0 : index), (fromRight ? index + 1 : length))\n : baseSlice(array, (fromRight ? index + 1 : 0), (fromRight ? length : index));\n }\n\n /**\n * The base implementation of `wrapperValue` which returns the result of\n * performing a sequence of actions on the unwrapped `value`, where each\n * successive action is supplied the return value of the previous.\n *\n * @private\n * @param {*} value The unwrapped value.\n * @param {Array} actions Actions to perform to resolve the unwrapped value.\n * @returns {*} Returns the resolved value.\n */\n function baseWrapperValue(value, actions) {\n var result = value;\n if (result instanceof LazyWrapper) {\n result = result.value();\n }\n return arrayReduce(actions, function(result, action) {\n return action.func.apply(action.thisArg, arrayPush([result], action.args));\n }, result);\n }\n\n /**\n * The base implementation of methods like `_.xor`, without support for\n * iteratee shorthands, that accepts an array of arrays to inspect.\n *\n * @private\n * @param {Array} arrays The arrays to inspect.\n * @param {Function} [iteratee] The iteratee invoked per element.\n * @param {Function} [comparator] The comparator invoked per element.\n * @returns {Array} Returns the new array of values.\n */\n function baseXor(arrays, iteratee, comparator) {\n var length = arrays.length;\n if (length < 2) {\n return length ? baseUniq(arrays[0]) : [];\n }\n var index = -1,\n result = Array(length);\n\n while (++index < length) {\n var array = arrays[index],\n othIndex = -1;\n\n while (++othIndex < length) {\n if (othIndex != index) {\n result[index] = baseDifference(result[index] || array, arrays[othIndex], iteratee, comparator);\n }\n }\n }\n return baseUniq(baseFlatten(result, 1), iteratee, comparator);\n }\n\n /**\n * This base implementation of `_.zipObject` which assigns values using `assignFunc`.\n *\n * @private\n * @param {Array} props The property identifiers.\n * @param {Array} values The property values.\n * @param {Function} assignFunc The function to assign values.\n * @returns {Object} Returns the new object.\n */\n function baseZipObject(props, values, assignFunc) {\n var index = -1,\n length = props.length,\n valsLength = values.length,\n result = {};\n\n while (++index < length) {\n var value = index < valsLength ? values[index] : undefined;\n assignFunc(result, props[index], value);\n }\n return result;\n }\n\n /**\n * Casts `value` to an empty array if it's not an array like object.\n *\n * @private\n * @param {*} value The value to inspect.\n * @returns {Array|Object} Returns the cast array-like object.\n */\n function castArrayLikeObject(value) {\n return isArrayLikeObject(value) ? value : [];\n }\n\n /**\n * Casts `value` to `identity` if it's not a function.\n *\n * @private\n * @param {*} value The value to inspect.\n * @returns {Function} Returns cast function.\n */\n function castFunction(value) {\n return typeof value == 'function' ? value : identity;\n }\n\n /**\n * Casts `value` to a path array if it's not one.\n *\n * @private\n * @param {*} value The value to inspect.\n * @param {Object} [object] The object to query keys on.\n * @returns {Array} Returns the cast property path array.\n */\n function castPath(value, object) {\n if (isArray(value)) {\n return value;\n }\n return isKey(value, object) ? [value] : stringToPath(toString(value));\n }\n\n /**\n * A `baseRest` alias which can be replaced with `identity` by module\n * replacement plugins.\n *\n * @private\n * @type {Function}\n * @param {Function} func The function to apply a rest parameter to.\n * @returns {Function} Returns the new function.\n */\n var castRest = baseRest;\n\n /**\n * Casts `array` to a slice if it's needed.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {number} start The start position.\n * @param {number} [end=array.length] The end position.\n * @returns {Array} Returns the cast slice.\n */\n function castSlice(array, start, end) {\n var length = array.length;\n end = end === undefined ? length : end;\n return (!start && end >= length) ? array : baseSlice(array, start, end);\n }\n\n /**\n * A simple wrapper around the global [`clearTimeout`](https://mdn.io/clearTimeout).\n *\n * @private\n * @param {number|Object} id The timer id or timeout object of the timer to clear.\n */\n var clearTimeout = ctxClearTimeout || function(id) {\n return root.clearTimeout(id);\n };\n\n /**\n * Creates a clone of `buffer`.\n *\n * @private\n * @param {Buffer} buffer The buffer to clone.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @returns {Buffer} Returns the cloned buffer.\n */\n function cloneBuffer(buffer, isDeep) {\n if (isDeep) {\n return buffer.slice();\n }\n var length = buffer.length,\n result = allocUnsafe ? allocUnsafe(length) : new buffer.constructor(length);\n\n buffer.copy(result);\n return result;\n }\n\n /**\n * Creates a clone of `arrayBuffer`.\n *\n * @private\n * @param {ArrayBuffer} arrayBuffer The array buffer to clone.\n * @returns {ArrayBuffer} Returns the cloned array buffer.\n */\n function cloneArrayBuffer(arrayBuffer) {\n var result = new arrayBuffer.constructor(arrayBuffer.byteLength);\n new Uint8Array(result).set(new Uint8Array(arrayBuffer));\n return result;\n }\n\n /**\n * Creates a clone of `dataView`.\n *\n * @private\n * @param {Object} dataView The data view to clone.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @returns {Object} Returns the cloned data view.\n */\n function cloneDataView(dataView, isDeep) {\n var buffer = isDeep ? cloneArrayBuffer(dataView.buffer) : dataView.buffer;\n return new dataView.constructor(buffer, dataView.byteOffset, dataView.byteLength);\n }\n\n /**\n * Creates a clone of `regexp`.\n *\n * @private\n * @param {Object} regexp The regexp to clone.\n * @returns {Object} Returns the cloned regexp.\n */\n function cloneRegExp(regexp) {\n var result = new regexp.constructor(regexp.source, reFlags.exec(regexp));\n result.lastIndex = regexp.lastIndex;\n return result;\n }\n\n /**\n * Creates a clone of the `symbol` object.\n *\n * @private\n * @param {Object} symbol The symbol object to clone.\n * @returns {Object} Returns the cloned symbol object.\n */\n function cloneSymbol(symbol) {\n return symbolValueOf ? Object(symbolValueOf.call(symbol)) : {};\n }\n\n /**\n * Creates a clone of `typedArray`.\n *\n * @private\n * @param {Object} typedArray The typed array to clone.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @returns {Object} Returns the cloned typed array.\n */\n function cloneTypedArray(typedArray, isDeep) {\n var buffer = isDeep ? cloneArrayBuffer(typedArray.buffer) : typedArray.buffer;\n return new typedArray.constructor(buffer, typedArray.byteOffset, typedArray.length);\n }\n\n /**\n * Compares values to sort them in ascending order.\n *\n * @private\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {number} Returns the sort order indicator for `value`.\n */\n function compareAscending(value, other) {\n if (value !== other) {\n var valIsDefined = value !== undefined,\n valIsNull = value === null,\n valIsReflexive = value === value,\n valIsSymbol = isSymbol(value);\n\n var othIsDefined = other !== undefined,\n othIsNull = other === null,\n othIsReflexive = other === other,\n othIsSymbol = isSymbol(other);\n\n if ((!othIsNull && !othIsSymbol && !valIsSymbol && value > other) ||\n (valIsSymbol && othIsDefined && othIsReflexive && !othIsNull && !othIsSymbol) ||\n (valIsNull && othIsDefined && othIsReflexive) ||\n (!valIsDefined && othIsReflexive) ||\n !valIsReflexive) {\n return 1;\n }\n if ((!valIsNull && !valIsSymbol && !othIsSymbol && value < other) ||\n (othIsSymbol && valIsDefined && valIsReflexive && !valIsNull && !valIsSymbol) ||\n (othIsNull && valIsDefined && valIsReflexive) ||\n (!othIsDefined && valIsReflexive) ||\n !othIsReflexive) {\n return -1;\n }\n }\n return 0;\n }\n\n /**\n * Used by `_.orderBy` to compare multiple properties of a value to another\n * and stable sort them.\n *\n * If `orders` is unspecified, all values are sorted in ascending order. Otherwise,\n * specify an order of \"desc\" for descending or \"asc\" for ascending sort order\n * of corresponding values.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {boolean[]|string[]} orders The order to sort by for each property.\n * @returns {number} Returns the sort order indicator for `object`.\n */\n function compareMultiple(object, other, orders) {\n var index = -1,\n objCriteria = object.criteria,\n othCriteria = other.criteria,\n length = objCriteria.length,\n ordersLength = orders.length;\n\n while (++index < length) {\n var result = compareAscending(objCriteria[index], othCriteria[index]);\n if (result) {\n if (index >= ordersLength) {\n return result;\n }\n var order = orders[index];\n return result * (order == 'desc' ? -1 : 1);\n }\n }\n // Fixes an `Array#sort` bug in the JS engine embedded in Adobe applications\n // that causes it, under certain circumstances, to provide the same value for\n // `object` and `other`. See https://github.com/jashkenas/underscore/pull/1247\n // for more details.\n //\n // This also ensures a stable sort in V8 and other engines.\n // See https://bugs.chromium.org/p/v8/issues/detail?id=90 for more details.\n return object.index - other.index;\n }\n\n /**\n * Creates an array that is the composition of partially applied arguments,\n * placeholders, and provided arguments into a single array of arguments.\n *\n * @private\n * @param {Array} args The provided arguments.\n * @param {Array} partials The arguments to prepend to those provided.\n * @param {Array} holders The `partials` placeholder indexes.\n * @params {boolean} [isCurried] Specify composing for a curried function.\n * @returns {Array} Returns the new array of composed arguments.\n */\n function composeArgs(args, partials, holders, isCurried) {\n var argsIndex = -1,\n argsLength = args.length,\n holdersLength = holders.length,\n leftIndex = -1,\n leftLength = partials.length,\n rangeLength = nativeMax(argsLength - holdersLength, 0),\n result = Array(leftLength + rangeLength),\n isUncurried = !isCurried;\n\n while (++leftIndex < leftLength) {\n result[leftIndex] = partials[leftIndex];\n }\n while (++argsIndex < holdersLength) {\n if (isUncurried || argsIndex < argsLength) {\n result[holders[argsIndex]] = args[argsIndex];\n }\n }\n while (rangeLength--) {\n result[leftIndex++] = args[argsIndex++];\n }\n return result;\n }\n\n /**\n * This function is like `composeArgs` except that the arguments composition\n * is tailored for `_.partialRight`.\n *\n * @private\n * @param {Array} args The provided arguments.\n * @param {Array} partials The arguments to append to those provided.\n * @param {Array} holders The `partials` placeholder indexes.\n * @params {boolean} [isCurried] Specify composing for a curried function.\n * @returns {Array} Returns the new array of composed arguments.\n */\n function composeArgsRight(args, partials, holders, isCurried) {\n var argsIndex = -1,\n argsLength = args.length,\n holdersIndex = -1,\n holdersLength = holders.length,\n rightIndex = -1,\n rightLength = partials.length,\n rangeLength = nativeMax(argsLength - holdersLength, 0),\n result = Array(rangeLength + rightLength),\n isUncurried = !isCurried;\n\n while (++argsIndex < rangeLength) {\n result[argsIndex] = args[argsIndex];\n }\n var offset = argsIndex;\n while (++rightIndex < rightLength) {\n result[offset + rightIndex] = partials[rightIndex];\n }\n while (++holdersIndex < holdersLength) {\n if (isUncurried || argsIndex < argsLength) {\n result[offset + holders[holdersIndex]] = args[argsIndex++];\n }\n }\n return result;\n }\n\n /**\n * Copies the values of `source` to `array`.\n *\n * @private\n * @param {Array} source The array to copy values from.\n * @param {Array} [array=[]] The array to copy values to.\n * @returns {Array} Returns `array`.\n */\n function copyArray(source, array) {\n var index = -1,\n length = source.length;\n\n array || (array = Array(length));\n while (++index < length) {\n array[index] = source[index];\n }\n return array;\n }\n\n /**\n * Copies properties of `source` to `object`.\n *\n * @private\n * @param {Object} source The object to copy properties from.\n * @param {Array} props The property identifiers to copy.\n * @param {Object} [object={}] The object to copy properties to.\n * @param {Function} [customizer] The function to customize copied values.\n * @returns {Object} Returns `object`.\n */\n function copyObject(source, props, object, customizer) {\n var isNew = !object;\n object || (object = {});\n\n var index = -1,\n length = props.length;\n\n while (++index < length) {\n var key = props[index];\n\n var newValue = customizer\n ? customizer(object[key], source[key], key, object, source)\n : undefined;\n\n if (newValue === undefined) {\n newValue = source[key];\n }\n if (isNew) {\n baseAssignValue(object, key, newValue);\n } else {\n assignValue(object, key, newValue);\n }\n }\n return object;\n }\n\n /**\n * Copies own symbols of `source` to `object`.\n *\n * @private\n * @param {Object} source The object to copy symbols from.\n * @param {Object} [object={}] The object to copy symbols to.\n * @returns {Object} Returns `object`.\n */\n function copySymbols(source, object) {\n return copyObject(source, getSymbols(source), object);\n }\n\n /**\n * Copies own and inherited symbols of `source` to `object`.\n *\n * @private\n * @param {Object} source The object to copy symbols from.\n * @param {Object} [object={}] The object to copy symbols to.\n * @returns {Object} Returns `object`.\n */\n function copySymbolsIn(source, object) {\n return copyObject(source, getSymbolsIn(source), object);\n }\n\n /**\n * Creates a function like `_.groupBy`.\n *\n * @private\n * @param {Function} setter The function to set accumulator values.\n * @param {Function} [initializer] The accumulator object initializer.\n * @returns {Function} Returns the new aggregator function.\n */\n function createAggregator(setter, initializer) {\n return function(collection, iteratee) {\n var func = isArray(collection) ? arrayAggregator : baseAggregator,\n accumulator = initializer ? initializer() : {};\n\n return func(collection, setter, getIteratee(iteratee, 2), accumulator);\n };\n }\n\n /**\n * Creates a function like `_.assign`.\n *\n * @private\n * @param {Function} assigner The function to assign values.\n * @returns {Function} Returns the new assigner function.\n */\n function createAssigner(assigner) {\n return baseRest(function(object, sources) {\n var index = -1,\n length = sources.length,\n customizer = length > 1 ? sources[length - 1] : undefined,\n guard = length > 2 ? sources[2] : undefined;\n\n customizer = (assigner.length > 3 && typeof customizer == 'function')\n ? (length--, customizer)\n : undefined;\n\n if (guard && isIterateeCall(sources[0], sources[1], guard)) {\n customizer = length < 3 ? undefined : customizer;\n length = 1;\n }\n object = Object(object);\n while (++index < length) {\n var source = sources[index];\n if (source) {\n assigner(object, source, index, customizer);\n }\n }\n return object;\n });\n }\n\n /**\n * Creates a `baseEach` or `baseEachRight` function.\n *\n * @private\n * @param {Function} eachFunc The function to iterate over a collection.\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {Function} Returns the new base function.\n */\n function createBaseEach(eachFunc, fromRight) {\n return function(collection, iteratee) {\n if (collection == null) {\n return collection;\n }\n if (!isArrayLike(collection)) {\n return eachFunc(collection, iteratee);\n }\n var length = collection.length,\n index = fromRight ? length : -1,\n iterable = Object(collection);\n\n while ((fromRight ? index-- : ++index < length)) {\n if (iteratee(iterable[index], index, iterable) === false) {\n break;\n }\n }\n return collection;\n };\n }\n\n /**\n * Creates a base function for methods like `_.forIn` and `_.forOwn`.\n *\n * @private\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {Function} Returns the new base function.\n */\n function createBaseFor(fromRight) {\n return function(object, iteratee, keysFunc) {\n var index = -1,\n iterable = Object(object),\n props = keysFunc(object),\n length = props.length;\n\n while (length--) {\n var key = props[fromRight ? length : ++index];\n if (iteratee(iterable[key], key, iterable) === false) {\n break;\n }\n }\n return object;\n };\n }\n\n /**\n * Creates a function that wraps `func` to invoke it with the optional `this`\n * binding of `thisArg`.\n *\n * @private\n * @param {Function} func The function to wrap.\n * @param {number} bitmask The bitmask flags. See `createWrap` for more details.\n * @param {*} [thisArg] The `this` binding of `func`.\n * @returns {Function} Returns the new wrapped function.\n */\n function createBind(func, bitmask, thisArg) {\n var isBind = bitmask & WRAP_BIND_FLAG,\n Ctor = createCtor(func);\n\n function wrapper() {\n var fn = (this && this !== root && this instanceof wrapper) ? Ctor : func;\n return fn.apply(isBind ? thisArg : this, arguments);\n }\n return wrapper;\n }\n\n /**\n * Creates a function like `_.lowerFirst`.\n *\n * @private\n * @param {string} methodName The name of the `String` case method to use.\n * @returns {Function} Returns the new case function.\n */\n function createCaseFirst(methodName) {\n return function(string) {\n string = toString(string);\n\n var strSymbols = hasUnicode(string)\n ? stringToArray(string)\n : undefined;\n\n var chr = strSymbols\n ? strSymbols[0]\n : string.charAt(0);\n\n var trailing = strSymbols\n ? castSlice(strSymbols, 1).join('')\n : string.slice(1);\n\n return chr[methodName]() + trailing;\n };\n }\n\n /**\n * Creates a function like `_.camelCase`.\n *\n * @private\n * @param {Function} callback The function to combine each word.\n * @returns {Function} Returns the new compounder function.\n */\n function createCompounder(callback) {\n return function(string) {\n return arrayReduce(words(deburr(string).replace(reApos, '')), callback, '');\n };\n }\n\n /**\n * Creates a function that produces an instance of `Ctor` regardless of\n * whether it was invoked as part of a `new` expression or by `call` or `apply`.\n *\n * @private\n * @param {Function} Ctor The constructor to wrap.\n * @returns {Function} Returns the new wrapped function.\n */\n function createCtor(Ctor) {\n return function() {\n // Use a `switch` statement to work with class constructors. See\n // http://ecma-international.org/ecma-262/7.0/#sec-ecmascript-function-objects-call-thisargument-argumentslist\n // for more details.\n var args = arguments;\n switch (args.length) {\n case 0: return new Ctor;\n case 1: return new Ctor(args[0]);\n case 2: return new Ctor(args[0], args[1]);\n case 3: return new Ctor(args[0], args[1], args[2]);\n case 4: return new Ctor(args[0], args[1], args[2], args[3]);\n case 5: return new Ctor(args[0], args[1], args[2], args[3], args[4]);\n case 6: return new Ctor(args[0], args[1], args[2], args[3], args[4], args[5]);\n case 7: return new Ctor(args[0], args[1], args[2], args[3], args[4], args[5], args[6]);\n }\n var thisBinding = baseCreate(Ctor.prototype),\n result = Ctor.apply(thisBinding, args);\n\n // Mimic the constructor's `return` behavior.\n // See https://es5.github.io/#x13.2.2 for more details.\n return isObject(result) ? result : thisBinding;\n };\n }\n\n /**\n * Creates a function that wraps `func` to enable currying.\n *\n * @private\n * @param {Function} func The function to wrap.\n * @param {number} bitmask The bitmask flags. See `createWrap` for more details.\n * @param {number} arity The arity of `func`.\n * @returns {Function} Returns the new wrapped function.\n */\n function createCurry(func, bitmask, arity) {\n var Ctor = createCtor(func);\n\n function wrapper() {\n var length = arguments.length,\n args = Array(length),\n index = length,\n placeholder = getHolder(wrapper);\n\n while (index--) {\n args[index] = arguments[index];\n }\n var holders = (length < 3 && args[0] !== placeholder && args[length - 1] !== placeholder)\n ? []\n : replaceHolders(args, placeholder);\n\n length -= holders.length;\n if (length < arity) {\n return createRecurry(\n func, bitmask, createHybrid, wrapper.placeholder, undefined,\n args, holders, undefined, undefined, arity - length);\n }\n var fn = (this && this !== root && this instanceof wrapper) ? Ctor : func;\n return apply(fn, this, args);\n }\n return wrapper;\n }\n\n /**\n * Creates a `_.find` or `_.findLast` function.\n *\n * @private\n * @param {Function} findIndexFunc The function to find the collection index.\n * @returns {Function} Returns the new find function.\n */\n function createFind(findIndexFunc) {\n return function(collection, predicate, fromIndex) {\n var iterable = Object(collection);\n if (!isArrayLike(collection)) {\n var iteratee = getIteratee(predicate, 3);\n collection = keys(collection);\n predicate = function(key) { return iteratee(iterable[key], key, iterable); };\n }\n var index = findIndexFunc(collection, predicate, fromIndex);\n return index > -1 ? iterable[iteratee ? collection[index] : index] : undefined;\n };\n }\n\n /**\n * Creates a `_.flow` or `_.flowRight` function.\n *\n * @private\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {Function} Returns the new flow function.\n */\n function createFlow(fromRight) {\n return flatRest(function(funcs) {\n var length = funcs.length,\n index = length,\n prereq = LodashWrapper.prototype.thru;\n\n if (fromRight) {\n funcs.reverse();\n }\n while (index--) {\n var func = funcs[index];\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n if (prereq && !wrapper && getFuncName(func) == 'wrapper') {\n var wrapper = new LodashWrapper([], true);\n }\n }\n index = wrapper ? index : length;\n while (++index < length) {\n func = funcs[index];\n\n var funcName = getFuncName(func),\n data = funcName == 'wrapper' ? getData(func) : undefined;\n\n if (data && isLaziable(data[0]) &&\n data[1] == (WRAP_ARY_FLAG | WRAP_CURRY_FLAG | WRAP_PARTIAL_FLAG | WRAP_REARG_FLAG) &&\n !data[4].length && data[9] == 1\n ) {\n wrapper = wrapper[getFuncName(data[0])].apply(wrapper, data[3]);\n } else {\n wrapper = (func.length == 1 && isLaziable(func))\n ? wrapper[funcName]()\n : wrapper.thru(func);\n }\n }\n return function() {\n var args = arguments,\n value = args[0];\n\n if (wrapper && args.length == 1 && isArray(value)) {\n return wrapper.plant(value).value();\n }\n var index = 0,\n result = length ? funcs[index].apply(this, args) : value;\n\n while (++index < length) {\n result = funcs[index].call(this, result);\n }\n return result;\n };\n });\n }\n\n /**\n * Creates a function that wraps `func` to invoke it with optional `this`\n * binding of `thisArg`, partial application, and currying.\n *\n * @private\n * @param {Function|string} func The function or method name to wrap.\n * @param {number} bitmask The bitmask flags. See `createWrap` for more details.\n * @param {*} [thisArg] The `this` binding of `func`.\n * @param {Array} [partials] The arguments to prepend to those provided to\n * the new function.\n * @param {Array} [holders] The `partials` placeholder indexes.\n * @param {Array} [partialsRight] The arguments to append to those provided\n * to the new function.\n * @param {Array} [holdersRight] The `partialsRight` placeholder indexes.\n * @param {Array} [argPos] The argument positions of the new function.\n * @param {number} [ary] The arity cap of `func`.\n * @param {number} [arity] The arity of `func`.\n * @returns {Function} Returns the new wrapped function.\n */\n function createHybrid(func, bitmask, thisArg, partials, holders, partialsRight, holdersRight, argPos, ary, arity) {\n var isAry = bitmask & WRAP_ARY_FLAG,\n isBind = bitmask & WRAP_BIND_FLAG,\n isBindKey = bitmask & WRAP_BIND_KEY_FLAG,\n isCurried = bitmask & (WRAP_CURRY_FLAG | WRAP_CURRY_RIGHT_FLAG),\n isFlip = bitmask & WRAP_FLIP_FLAG,\n Ctor = isBindKey ? undefined : createCtor(func);\n\n function wrapper() {\n var length = arguments.length,\n args = Array(length),\n index = length;\n\n while (index--) {\n args[index] = arguments[index];\n }\n if (isCurried) {\n var placeholder = getHolder(wrapper),\n holdersCount = countHolders(args, placeholder);\n }\n if (partials) {\n args = composeArgs(args, partials, holders, isCurried);\n }\n if (partialsRight) {\n args = composeArgsRight(args, partialsRight, holdersRight, isCurried);\n }\n length -= holdersCount;\n if (isCurried && length < arity) {\n var newHolders = replaceHolders(args, placeholder);\n return createRecurry(\n func, bitmask, createHybrid, wrapper.placeholder, thisArg,\n args, newHolders, argPos, ary, arity - length\n );\n }\n var thisBinding = isBind ? thisArg : this,\n fn = isBindKey ? thisBinding[func] : func;\n\n length = args.length;\n if (argPos) {\n args = reorder(args, argPos);\n } else if (isFlip && length > 1) {\n args.reverse();\n }\n if (isAry && ary < length) {\n args.length = ary;\n }\n if (this && this !== root && this instanceof wrapper) {\n fn = Ctor || createCtor(fn);\n }\n return fn.apply(thisBinding, args);\n }\n return wrapper;\n }\n\n /**\n * Creates a function like `_.invertBy`.\n *\n * @private\n * @param {Function} setter The function to set accumulator values.\n * @param {Function} toIteratee The function to resolve iteratees.\n * @returns {Function} Returns the new inverter function.\n */\n function createInverter(setter, toIteratee) {\n return function(object, iteratee) {\n return baseInverter(object, setter, toIteratee(iteratee), {});\n };\n }\n\n /**\n * Creates a function that performs a mathematical operation on two values.\n *\n * @private\n * @param {Function} operator The function to perform the operation.\n * @param {number} [defaultValue] The value used for `undefined` arguments.\n * @returns {Function} Returns the new mathematical operation function.\n */\n function createMathOperation(operator, defaultValue) {\n return function(value, other) {\n var result;\n if (value === undefined && other === undefined) {\n return defaultValue;\n }\n if (value !== undefined) {\n result = value;\n }\n if (other !== undefined) {\n if (result === undefined) {\n return other;\n }\n if (typeof value == 'string' || typeof other == 'string') {\n value = baseToString(value);\n other = baseToString(other);\n } else {\n value = baseToNumber(value);\n other = baseToNumber(other);\n }\n result = operator(value, other);\n }\n return result;\n };\n }\n\n /**\n * Creates a function like `_.over`.\n *\n * @private\n * @param {Function} arrayFunc The function to iterate over iteratees.\n * @returns {Function} Returns the new over function.\n */\n function createOver(arrayFunc) {\n return flatRest(function(iteratees) {\n iteratees = arrayMap(iteratees, baseUnary(getIteratee()));\n return baseRest(function(args) {\n var thisArg = this;\n return arrayFunc(iteratees, function(iteratee) {\n return apply(iteratee, thisArg, args);\n });\n });\n });\n }\n\n /**\n * Creates the padding for `string` based on `length`. The `chars` string\n * is truncated if the number of characters exceeds `length`.\n *\n * @private\n * @param {number} length The padding length.\n * @param {string} [chars=' '] The string used as padding.\n * @returns {string} Returns the padding for `string`.\n */\n function createPadding(length, chars) {\n chars = chars === undefined ? ' ' : baseToString(chars);\n\n var charsLength = chars.length;\n if (charsLength < 2) {\n return charsLength ? baseRepeat(chars, length) : chars;\n }\n var result = baseRepeat(chars, nativeCeil(length / stringSize(chars)));\n return hasUnicode(chars)\n ? castSlice(stringToArray(result), 0, length).join('')\n : result.slice(0, length);\n }\n\n /**\n * Creates a function that wraps `func` to invoke it with the `this` binding\n * of `thisArg` and `partials` prepended to the arguments it receives.\n *\n * @private\n * @param {Function} func The function to wrap.\n * @param {number} bitmask The bitmask flags. See `createWrap` for more details.\n * @param {*} thisArg The `this` binding of `func`.\n * @param {Array} partials The arguments to prepend to those provided to\n * the new function.\n * @returns {Function} Returns the new wrapped function.\n */\n function createPartial(func, bitmask, thisArg, partials) {\n var isBind = bitmask & WRAP_BIND_FLAG,\n Ctor = createCtor(func);\n\n function wrapper() {\n var argsIndex = -1,\n argsLength = arguments.length,\n leftIndex = -1,\n leftLength = partials.length,\n args = Array(leftLength + argsLength),\n fn = (this && this !== root && this instanceof wrapper) ? Ctor : func;\n\n while (++leftIndex < leftLength) {\n args[leftIndex] = partials[leftIndex];\n }\n while (argsLength--) {\n args[leftIndex++] = arguments[++argsIndex];\n }\n return apply(fn, isBind ? thisArg : this, args);\n }\n return wrapper;\n }\n\n /**\n * Creates a `_.range` or `_.rangeRight` function.\n *\n * @private\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {Function} Returns the new range function.\n */\n function createRange(fromRight) {\n return function(start, end, step) {\n if (step && typeof step != 'number' && isIterateeCall(start, end, step)) {\n end = step = undefined;\n }\n // Ensure the sign of `-0` is preserved.\n start = toFinite(start);\n if (end === undefined) {\n end = start;\n start = 0;\n } else {\n end = toFinite(end);\n }\n step = step === undefined ? (start < end ? 1 : -1) : toFinite(step);\n return baseRange(start, end, step, fromRight);\n };\n }\n\n /**\n * Creates a function that performs a relational operation on two values.\n *\n * @private\n * @param {Function} operator The function to perform the operation.\n * @returns {Function} Returns the new relational operation function.\n */\n function createRelationalOperation(operator) {\n return function(value, other) {\n if (!(typeof value == 'string' && typeof other == 'string')) {\n value = toNumber(value);\n other = toNumber(other);\n }\n return operator(value, other);\n };\n }\n\n /**\n * Creates a function that wraps `func` to continue currying.\n *\n * @private\n * @param {Function} func The function to wrap.\n * @param {number} bitmask The bitmask flags. See `createWrap` for more details.\n * @param {Function} wrapFunc The function to create the `func` wrapper.\n * @param {*} placeholder The placeholder value.\n * @param {*} [thisArg] The `this` binding of `func`.\n * @param {Array} [partials] The arguments to prepend to those provided to\n * the new function.\n * @param {Array} [holders] The `partials` placeholder indexes.\n * @param {Array} [argPos] The argument positions of the new function.\n * @param {number} [ary] The arity cap of `func`.\n * @param {number} [arity] The arity of `func`.\n * @returns {Function} Returns the new wrapped function.\n */\n function createRecurry(func, bitmask, wrapFunc, placeholder, thisArg, partials, holders, argPos, ary, arity) {\n var isCurry = bitmask & WRAP_CURRY_FLAG,\n newHolders = isCurry ? holders : undefined,\n newHoldersRight = isCurry ? undefined : holders,\n newPartials = isCurry ? partials : undefined,\n newPartialsRight = isCurry ? undefined : partials;\n\n bitmask |= (isCurry ? WRAP_PARTIAL_FLAG : WRAP_PARTIAL_RIGHT_FLAG);\n bitmask &= ~(isCurry ? WRAP_PARTIAL_RIGHT_FLAG : WRAP_PARTIAL_FLAG);\n\n if (!(bitmask & WRAP_CURRY_BOUND_FLAG)) {\n bitmask &= ~(WRAP_BIND_FLAG | WRAP_BIND_KEY_FLAG);\n }\n var newData = [\n func, bitmask, thisArg, newPartials, newHolders, newPartialsRight,\n newHoldersRight, argPos, ary, arity\n ];\n\n var result = wrapFunc.apply(undefined, newData);\n if (isLaziable(func)) {\n setData(result, newData);\n }\n result.placeholder = placeholder;\n return setWrapToString(result, func, bitmask);\n }\n\n /**\n * Creates a function like `_.round`.\n *\n * @private\n * @param {string} methodName The name of the `Math` method to use when rounding.\n * @returns {Function} Returns the new round function.\n */\n function createRound(methodName) {\n var func = Math[methodName];\n return function(number, precision) {\n number = toNumber(number);\n precision = precision == null ? 0 : nativeMin(toInteger(precision), 292);\n if (precision && nativeIsFinite(number)) {\n // Shift with exponential notation to avoid floating-point issues.\n // See [MDN](https://mdn.io/round#Examples) for more details.\n var pair = (toString(number) + 'e').split('e'),\n value = func(pair[0] + 'e' + (+pair[1] + precision));\n\n pair = (toString(value) + 'e').split('e');\n return +(pair[0] + 'e' + (+pair[1] - precision));\n }\n return func(number);\n };\n }\n\n /**\n * Creates a set object of `values`.\n *\n * @private\n * @param {Array} values The values to add to the set.\n * @returns {Object} Returns the new set.\n */\n var createSet = !(Set && (1 / setToArray(new Set([,-0]))[1]) == INFINITY) ? noop : function(values) {\n return new Set(values);\n };\n\n /**\n * Creates a `_.toPairs` or `_.toPairsIn` function.\n *\n * @private\n * @param {Function} keysFunc The function to get the keys of a given object.\n * @returns {Function} Returns the new pairs function.\n */\n function createToPairs(keysFunc) {\n return function(object) {\n var tag = getTag(object);\n if (tag == mapTag) {\n return mapToArray(object);\n }\n if (tag == setTag) {\n return setToPairs(object);\n }\n return baseToPairs(object, keysFunc(object));\n };\n }\n\n /**\n * Creates a function that either curries or invokes `func` with optional\n * `this` binding and partially applied arguments.\n *\n * @private\n * @param {Function|string} func The function or method name to wrap.\n * @param {number} bitmask The bitmask flags.\n * 1 - `_.bind`\n * 2 - `_.bindKey`\n * 4 - `_.curry` or `_.curryRight` of a bound function\n * 8 - `_.curry`\n * 16 - `_.curryRight`\n * 32 - `_.partial`\n * 64 - `_.partialRight`\n * 128 - `_.rearg`\n * 256 - `_.ary`\n * 512 - `_.flip`\n * @param {*} [thisArg] The `this` binding of `func`.\n * @param {Array} [partials] The arguments to be partially applied.\n * @param {Array} [holders] The `partials` placeholder indexes.\n * @param {Array} [argPos] The argument positions of the new function.\n * @param {number} [ary] The arity cap of `func`.\n * @param {number} [arity] The arity of `func`.\n * @returns {Function} Returns the new wrapped function.\n */\n function createWrap(func, bitmask, thisArg, partials, holders, argPos, ary, arity) {\n var isBindKey = bitmask & WRAP_BIND_KEY_FLAG;\n if (!isBindKey && typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n var length = partials ? partials.length : 0;\n if (!length) {\n bitmask &= ~(WRAP_PARTIAL_FLAG | WRAP_PARTIAL_RIGHT_FLAG);\n partials = holders = undefined;\n }\n ary = ary === undefined ? ary : nativeMax(toInteger(ary), 0);\n arity = arity === undefined ? arity : toInteger(arity);\n length -= holders ? holders.length : 0;\n\n if (bitmask & WRAP_PARTIAL_RIGHT_FLAG) {\n var partialsRight = partials,\n holdersRight = holders;\n\n partials = holders = undefined;\n }\n var data = isBindKey ? undefined : getData(func);\n\n var newData = [\n func, bitmask, thisArg, partials, holders, partialsRight, holdersRight,\n argPos, ary, arity\n ];\n\n if (data) {\n mergeData(newData, data);\n }\n func = newData[0];\n bitmask = newData[1];\n thisArg = newData[2];\n partials = newData[3];\n holders = newData[4];\n arity = newData[9] = newData[9] === undefined\n ? (isBindKey ? 0 : func.length)\n : nativeMax(newData[9] - length, 0);\n\n if (!arity && bitmask & (WRAP_CURRY_FLAG | WRAP_CURRY_RIGHT_FLAG)) {\n bitmask &= ~(WRAP_CURRY_FLAG | WRAP_CURRY_RIGHT_FLAG);\n }\n if (!bitmask || bitmask == WRAP_BIND_FLAG) {\n var result = createBind(func, bitmask, thisArg);\n } else if (bitmask == WRAP_CURRY_FLAG || bitmask == WRAP_CURRY_RIGHT_FLAG) {\n result = createCurry(func, bitmask, arity);\n } else if ((bitmask == WRAP_PARTIAL_FLAG || bitmask == (WRAP_BIND_FLAG | WRAP_PARTIAL_FLAG)) && !holders.length) {\n result = createPartial(func, bitmask, thisArg, partials);\n } else {\n result = createHybrid.apply(undefined, newData);\n }\n var setter = data ? baseSetData : setData;\n return setWrapToString(setter(result, newData), func, bitmask);\n }\n\n /**\n * Used by `_.defaults` to customize its `_.assignIn` use to assign properties\n * of source objects to the destination object for all destination properties\n * that resolve to `undefined`.\n *\n * @private\n * @param {*} objValue The destination value.\n * @param {*} srcValue The source value.\n * @param {string} key The key of the property to assign.\n * @param {Object} object The parent object of `objValue`.\n * @returns {*} Returns the value to assign.\n */\n function customDefaultsAssignIn(objValue, srcValue, key, object) {\n if (objValue === undefined ||\n (eq(objValue, objectProto[key]) && !hasOwnProperty.call(object, key))) {\n return srcValue;\n }\n return objValue;\n }\n\n /**\n * Used by `_.defaultsDeep` to customize its `_.merge` use to merge source\n * objects into destination objects that are passed thru.\n *\n * @private\n * @param {*} objValue The destination value.\n * @param {*} srcValue The source value.\n * @param {string} key The key of the property to merge.\n * @param {Object} object The parent object of `objValue`.\n * @param {Object} source The parent object of `srcValue`.\n * @param {Object} [stack] Tracks traversed source values and their merged\n * counterparts.\n * @returns {*} Returns the value to assign.\n */\n function customDefaultsMerge(objValue, srcValue, key, object, source, stack) {\n if (isObject(objValue) && isObject(srcValue)) {\n // Recursively merge objects and arrays (susceptible to call stack limits).\n stack.set(srcValue, objValue);\n baseMerge(objValue, srcValue, undefined, customDefaultsMerge, stack);\n stack['delete'](srcValue);\n }\n return objValue;\n }\n\n /**\n * Used by `_.omit` to customize its `_.cloneDeep` use to only clone plain\n * objects.\n *\n * @private\n * @param {*} value The value to inspect.\n * @param {string} key The key of the property to inspect.\n * @returns {*} Returns the uncloned value or `undefined` to defer cloning to `_.cloneDeep`.\n */\n function customOmitClone(value) {\n return isPlainObject(value) ? undefined : value;\n }\n\n /**\n * A specialized version of `baseIsEqualDeep` for arrays with support for\n * partial deep comparisons.\n *\n * @private\n * @param {Array} array The array to compare.\n * @param {Array} other The other array to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} stack Tracks traversed `array` and `other` objects.\n * @returns {boolean} Returns `true` if the arrays are equivalent, else `false`.\n */\n function equalArrays(array, other, bitmask, customizer, equalFunc, stack) {\n var isPartial = bitmask & COMPARE_PARTIAL_FLAG,\n arrLength = array.length,\n othLength = other.length;\n\n if (arrLength != othLength && !(isPartial && othLength > arrLength)) {\n return false;\n }\n // Assume cyclic values are equal.\n var stacked = stack.get(array);\n if (stacked && stack.get(other)) {\n return stacked == other;\n }\n var index = -1,\n result = true,\n seen = (bitmask & COMPARE_UNORDERED_FLAG) ? new SetCache : undefined;\n\n stack.set(array, other);\n stack.set(other, array);\n\n // Ignore non-index properties.\n while (++index < arrLength) {\n var arrValue = array[index],\n othValue = other[index];\n\n if (customizer) {\n var compared = isPartial\n ? customizer(othValue, arrValue, index, other, array, stack)\n : customizer(arrValue, othValue, index, array, other, stack);\n }\n if (compared !== undefined) {\n if (compared) {\n continue;\n }\n result = false;\n break;\n }\n // Recursively compare arrays (susceptible to call stack limits).\n if (seen) {\n if (!arraySome(other, function(othValue, othIndex) {\n if (!cacheHas(seen, othIndex) &&\n (arrValue === othValue || equalFunc(arrValue, othValue, bitmask, customizer, stack))) {\n return seen.push(othIndex);\n }\n })) {\n result = false;\n break;\n }\n } else if (!(\n arrValue === othValue ||\n equalFunc(arrValue, othValue, bitmask, customizer, stack)\n )) {\n result = false;\n break;\n }\n }\n stack['delete'](array);\n stack['delete'](other);\n return result;\n }\n\n /**\n * A specialized version of `baseIsEqualDeep` for comparing objects of\n * the same `toStringTag`.\n *\n * **Note:** This function only supports comparing values with tags of\n * `Boolean`, `Date`, `Error`, `Number`, `RegExp`, or `String`.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {string} tag The `toStringTag` of the objects to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} stack Tracks traversed `object` and `other` objects.\n * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n */\n function equalByTag(object, other, tag, bitmask, customizer, equalFunc, stack) {\n switch (tag) {\n case dataViewTag:\n if ((object.byteLength != other.byteLength) ||\n (object.byteOffset != other.byteOffset)) {\n return false;\n }\n object = object.buffer;\n other = other.buffer;\n\n case arrayBufferTag:\n if ((object.byteLength != other.byteLength) ||\n !equalFunc(new Uint8Array(object), new Uint8Array(other))) {\n return false;\n }\n return true;\n\n case boolTag:\n case dateTag:\n case numberTag:\n // Coerce booleans to `1` or `0` and dates to milliseconds.\n // Invalid dates are coerced to `NaN`.\n return eq(+object, +other);\n\n case errorTag:\n return object.name == other.name && object.message == other.message;\n\n case regexpTag:\n case stringTag:\n // Coerce regexes to strings and treat strings, primitives and objects,\n // as equal. See http://www.ecma-international.org/ecma-262/7.0/#sec-regexp.prototype.tostring\n // for more details.\n return object == (other + '');\n\n case mapTag:\n var convert = mapToArray;\n\n case setTag:\n var isPartial = bitmask & COMPARE_PARTIAL_FLAG;\n convert || (convert = setToArray);\n\n if (object.size != other.size && !isPartial) {\n return false;\n }\n // Assume cyclic values are equal.\n var stacked = stack.get(object);\n if (stacked) {\n return stacked == other;\n }\n bitmask |= COMPARE_UNORDERED_FLAG;\n\n // Recursively compare objects (susceptible to call stack limits).\n stack.set(object, other);\n var result = equalArrays(convert(object), convert(other), bitmask, customizer, equalFunc, stack);\n stack['delete'](object);\n return result;\n\n case symbolTag:\n if (symbolValueOf) {\n return symbolValueOf.call(object) == symbolValueOf.call(other);\n }\n }\n return false;\n }\n\n /**\n * A specialized version of `baseIsEqualDeep` for objects with support for\n * partial deep comparisons.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} stack Tracks traversed `object` and `other` objects.\n * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n */\n function equalObjects(object, other, bitmask, customizer, equalFunc, stack) {\n var isPartial = bitmask & COMPARE_PARTIAL_FLAG,\n objProps = getAllKeys(object),\n objLength = objProps.length,\n othProps = getAllKeys(other),\n othLength = othProps.length;\n\n if (objLength != othLength && !isPartial) {\n return false;\n }\n var index = objLength;\n while (index--) {\n var key = objProps[index];\n if (!(isPartial ? key in other : hasOwnProperty.call(other, key))) {\n return false;\n }\n }\n // Assume cyclic values are equal.\n var stacked = stack.get(object);\n if (stacked && stack.get(other)) {\n return stacked == other;\n }\n var result = true;\n stack.set(object, other);\n stack.set(other, object);\n\n var skipCtor = isPartial;\n while (++index < objLength) {\n key = objProps[index];\n var objValue = object[key],\n othValue = other[key];\n\n if (customizer) {\n var compared = isPartial\n ? customizer(othValue, objValue, key, other, object, stack)\n : customizer(objValue, othValue, key, object, other, stack);\n }\n // Recursively compare objects (susceptible to call stack limits).\n if (!(compared === undefined\n ? (objValue === othValue || equalFunc(objValue, othValue, bitmask, customizer, stack))\n : compared\n )) {\n result = false;\n break;\n }\n skipCtor || (skipCtor = key == 'constructor');\n }\n if (result && !skipCtor) {\n var objCtor = object.constructor,\n othCtor = other.constructor;\n\n // Non `Object` object instances with different constructors are not equal.\n if (objCtor != othCtor &&\n ('constructor' in object && 'constructor' in other) &&\n !(typeof objCtor == 'function' && objCtor instanceof objCtor &&\n typeof othCtor == 'function' && othCtor instanceof othCtor)) {\n result = false;\n }\n }\n stack['delete'](object);\n stack['delete'](other);\n return result;\n }\n\n /**\n * A specialized version of `baseRest` which flattens the rest array.\n *\n * @private\n * @param {Function} func The function to apply a rest parameter to.\n * @returns {Function} Returns the new function.\n */\n function flatRest(func) {\n return setToString(overRest(func, undefined, flatten), func + '');\n }\n\n /**\n * Creates an array of own enumerable property names and symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names and symbols.\n */\n function getAllKeys(object) {\n return baseGetAllKeys(object, keys, getSymbols);\n }\n\n /**\n * Creates an array of own and inherited enumerable property names and\n * symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names and symbols.\n */\n function getAllKeysIn(object) {\n return baseGetAllKeys(object, keysIn, getSymbolsIn);\n }\n\n /**\n * Gets metadata for `func`.\n *\n * @private\n * @param {Function} func The function to query.\n * @returns {*} Returns the metadata for `func`.\n */\n var getData = !metaMap ? noop : function(func) {\n return metaMap.get(func);\n };\n\n /**\n * Gets the name of `func`.\n *\n * @private\n * @param {Function} func The function to query.\n * @returns {string} Returns the function name.\n */\n function getFuncName(func) {\n var result = (func.name + ''),\n array = realNames[result],\n length = hasOwnProperty.call(realNames, result) ? array.length : 0;\n\n while (length--) {\n var data = array[length],\n otherFunc = data.func;\n if (otherFunc == null || otherFunc == func) {\n return data.name;\n }\n }\n return result;\n }\n\n /**\n * Gets the argument placeholder value for `func`.\n *\n * @private\n * @param {Function} func The function to inspect.\n * @returns {*} Returns the placeholder value.\n */\n function getHolder(func) {\n var object = hasOwnProperty.call(lodash, 'placeholder') ? lodash : func;\n return object.placeholder;\n }\n\n /**\n * Gets the appropriate \"iteratee\" function. If `_.iteratee` is customized,\n * this function returns the custom method, otherwise it returns `baseIteratee`.\n * If arguments are provided, the chosen function is invoked with them and\n * its result is returned.\n *\n * @private\n * @param {*} [value] The value to convert to an iteratee.\n * @param {number} [arity] The arity of the created iteratee.\n * @returns {Function} Returns the chosen function or its result.\n */\n function getIteratee() {\n var result = lodash.iteratee || iteratee;\n result = result === iteratee ? baseIteratee : result;\n return arguments.length ? result(arguments[0], arguments[1]) : result;\n }\n\n /**\n * Gets the data for `map`.\n *\n * @private\n * @param {Object} map The map to query.\n * @param {string} key The reference key.\n * @returns {*} Returns the map data.\n */\n function getMapData(map, key) {\n var data = map.__data__;\n return isKeyable(key)\n ? data[typeof key == 'string' ? 'string' : 'hash']\n : data.map;\n }\n\n /**\n * Gets the property names, values, and compare flags of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the match data of `object`.\n */\n function getMatchData(object) {\n var result = keys(object),\n length = result.length;\n\n while (length--) {\n var key = result[length],\n value = object[key];\n\n result[length] = [key, value, isStrictComparable(value)];\n }\n return result;\n }\n\n /**\n * Gets the native function at `key` of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {string} key The key of the method to get.\n * @returns {*} Returns the function if it's native, else `undefined`.\n */\n function getNative(object, key) {\n var value = getValue(object, key);\n return baseIsNative(value) ? value : undefined;\n }\n\n /**\n * A specialized version of `baseGetTag` which ignores `Symbol.toStringTag` values.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the raw `toStringTag`.\n */\n function getRawTag(value) {\n var isOwn = hasOwnProperty.call(value, symToStringTag),\n tag = value[symToStringTag];\n\n try {\n value[symToStringTag] = undefined;\n var unmasked = true;\n } catch (e) {}\n\n var result = nativeObjectToString.call(value);\n if (unmasked) {\n if (isOwn) {\n value[symToStringTag] = tag;\n } else {\n delete value[symToStringTag];\n }\n }\n return result;\n }\n\n /**\n * Creates an array of the own enumerable symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of symbols.\n */\n var getSymbols = !nativeGetSymbols ? stubArray : function(object) {\n if (object == null) {\n return [];\n }\n object = Object(object);\n return arrayFilter(nativeGetSymbols(object), function(symbol) {\n return propertyIsEnumerable.call(object, symbol);\n });\n };\n\n /**\n * Creates an array of the own and inherited enumerable symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of symbols.\n */\n var getSymbolsIn = !nativeGetSymbols ? stubArray : function(object) {\n var result = [];\n while (object) {\n arrayPush(result, getSymbols(object));\n object = getPrototype(object);\n }\n return result;\n };\n\n /**\n * Gets the `toStringTag` of `value`.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the `toStringTag`.\n */\n var getTag = baseGetTag;\n\n // Fallback for data views, maps, sets, and weak maps in IE 11 and promises in Node.js < 6.\n if ((DataView && getTag(new DataView(new ArrayBuffer(1))) != dataViewTag) ||\n (Map && getTag(new Map) != mapTag) ||\n (Promise && getTag(Promise.resolve()) != promiseTag) ||\n (Set && getTag(new Set) != setTag) ||\n (WeakMap && getTag(new WeakMap) != weakMapTag)) {\n getTag = function(value) {\n var result = baseGetTag(value),\n Ctor = result == objectTag ? value.constructor : undefined,\n ctorString = Ctor ? toSource(Ctor) : '';\n\n if (ctorString) {\n switch (ctorString) {\n case dataViewCtorString: return dataViewTag;\n case mapCtorString: return mapTag;\n case promiseCtorString: return promiseTag;\n case setCtorString: return setTag;\n case weakMapCtorString: return weakMapTag;\n }\n }\n return result;\n };\n }\n\n /**\n * Gets the view, applying any `transforms` to the `start` and `end` positions.\n *\n * @private\n * @param {number} start The start of the view.\n * @param {number} end The end of the view.\n * @param {Array} transforms The transformations to apply to the view.\n * @returns {Object} Returns an object containing the `start` and `end`\n * positions of the view.\n */\n function getView(start, end, transforms) {\n var index = -1,\n length = transforms.length;\n\n while (++index < length) {\n var data = transforms[index],\n size = data.size;\n\n switch (data.type) {\n case 'drop': start += size; break;\n case 'dropRight': end -= size; break;\n case 'take': end = nativeMin(end, start + size); break;\n case 'takeRight': start = nativeMax(start, end - size); break;\n }\n }\n return { 'start': start, 'end': end };\n }\n\n /**\n * Extracts wrapper details from the `source` body comment.\n *\n * @private\n * @param {string} source The source to inspect.\n * @returns {Array} Returns the wrapper details.\n */\n function getWrapDetails(source) {\n var match = source.match(reWrapDetails);\n return match ? match[1].split(reSplitDetails) : [];\n }\n\n /**\n * Checks if `path` exists on `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Array|string} path The path to check.\n * @param {Function} hasFunc The function to check properties.\n * @returns {boolean} Returns `true` if `path` exists, else `false`.\n */\n function hasPath(object, path, hasFunc) {\n path = castPath(path, object);\n\n var index = -1,\n length = path.length,\n result = false;\n\n while (++index < length) {\n var key = toKey(path[index]);\n if (!(result = object != null && hasFunc(object, key))) {\n break;\n }\n object = object[key];\n }\n if (result || ++index != length) {\n return result;\n }\n length = object == null ? 0 : object.length;\n return !!length && isLength(length) && isIndex(key, length) &&\n (isArray(object) || isArguments(object));\n }\n\n /**\n * Initializes an array clone.\n *\n * @private\n * @param {Array} array The array to clone.\n * @returns {Array} Returns the initialized clone.\n */\n function initCloneArray(array) {\n var length = array.length,\n result = new array.constructor(length);\n\n // Add properties assigned by `RegExp#exec`.\n if (length && typeof array[0] == 'string' && hasOwnProperty.call(array, 'index')) {\n result.index = array.index;\n result.input = array.input;\n }\n return result;\n }\n\n /**\n * Initializes an object clone.\n *\n * @private\n * @param {Object} object The object to clone.\n * @returns {Object} Returns the initialized clone.\n */\n function initCloneObject(object) {\n return (typeof object.constructor == 'function' && !isPrototype(object))\n ? baseCreate(getPrototype(object))\n : {};\n }\n\n /**\n * Initializes an object clone based on its `toStringTag`.\n *\n * **Note:** This function only supports cloning values with tags of\n * `Boolean`, `Date`, `Error`, `Map`, `Number`, `RegExp`, `Set`, or `String`.\n *\n * @private\n * @param {Object} object The object to clone.\n * @param {string} tag The `toStringTag` of the object to clone.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @returns {Object} Returns the initialized clone.\n */\n function initCloneByTag(object, tag, isDeep) {\n var Ctor = object.constructor;\n switch (tag) {\n case arrayBufferTag:\n return cloneArrayBuffer(object);\n\n case boolTag:\n case dateTag:\n return new Ctor(+object);\n\n case dataViewTag:\n return cloneDataView(object, isDeep);\n\n case float32Tag: case float64Tag:\n case int8Tag: case int16Tag: case int32Tag:\n case uint8Tag: case uint8ClampedTag: case uint16Tag: case uint32Tag:\n return cloneTypedArray(object, isDeep);\n\n case mapTag:\n return new Ctor;\n\n case numberTag:\n case stringTag:\n return new Ctor(object);\n\n case regexpTag:\n return cloneRegExp(object);\n\n case setTag:\n return new Ctor;\n\n case symbolTag:\n return cloneSymbol(object);\n }\n }\n\n /**\n * Inserts wrapper `details` in a comment at the top of the `source` body.\n *\n * @private\n * @param {string} source The source to modify.\n * @returns {Array} details The details to insert.\n * @returns {string} Returns the modified source.\n */\n function insertWrapDetails(source, details) {\n var length = details.length;\n if (!length) {\n return source;\n }\n var lastIndex = length - 1;\n details[lastIndex] = (length > 1 ? '& ' : '') + details[lastIndex];\n details = details.join(length > 2 ? ', ' : ' ');\n return source.replace(reWrapComment, '{\\n/* [wrapped with ' + details + '] */\\n');\n }\n\n /**\n * Checks if `value` is a flattenable `arguments` object or array.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is flattenable, else `false`.\n */\n function isFlattenable(value) {\n return isArray(value) || isArguments(value) ||\n !!(spreadableSymbol && value && value[spreadableSymbol]);\n }\n\n /**\n * Checks if `value` is a valid array-like index.\n *\n * @private\n * @param {*} value The value to check.\n * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index.\n * @returns {boolean} Returns `true` if `value` is a valid index, else `false`.\n */\n function isIndex(value, length) {\n var type = typeof value;\n length = length == null ? MAX_SAFE_INTEGER : length;\n\n return !!length &&\n (type == 'number' ||\n (type != 'symbol' && reIsUint.test(value))) &&\n (value > -1 && value % 1 == 0 && value < length);\n }\n\n /**\n * Checks if the given arguments are from an iteratee call.\n *\n * @private\n * @param {*} value The potential iteratee value argument.\n * @param {*} index The potential iteratee index or key argument.\n * @param {*} object The potential iteratee object argument.\n * @returns {boolean} Returns `true` if the arguments are from an iteratee call,\n * else `false`.\n */\n function isIterateeCall(value, index, object) {\n if (!isObject(object)) {\n return false;\n }\n var type = typeof index;\n if (type == 'number'\n ? (isArrayLike(object) && isIndex(index, object.length))\n : (type == 'string' && index in object)\n ) {\n return eq(object[index], value);\n }\n return false;\n }\n\n /**\n * Checks if `value` is a property name and not a property path.\n *\n * @private\n * @param {*} value The value to check.\n * @param {Object} [object] The object to query keys on.\n * @returns {boolean} Returns `true` if `value` is a property name, else `false`.\n */\n function isKey(value, object) {\n if (isArray(value)) {\n return false;\n }\n var type = typeof value;\n if (type == 'number' || type == 'symbol' || type == 'boolean' ||\n value == null || isSymbol(value)) {\n return true;\n }\n return reIsPlainProp.test(value) || !reIsDeepProp.test(value) ||\n (object != null && value in Object(object));\n }\n\n /**\n * Checks if `value` is suitable for use as unique object key.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is suitable, else `false`.\n */\n function isKeyable(value) {\n var type = typeof value;\n return (type == 'string' || type == 'number' || type == 'symbol' || type == 'boolean')\n ? (value !== '__proto__')\n : (value === null);\n }\n\n /**\n * Checks if `func` has a lazy counterpart.\n *\n * @private\n * @param {Function} func The function to check.\n * @returns {boolean} Returns `true` if `func` has a lazy counterpart,\n * else `false`.\n */\n function isLaziable(func) {\n var funcName = getFuncName(func),\n other = lodash[funcName];\n\n if (typeof other != 'function' || !(funcName in LazyWrapper.prototype)) {\n return false;\n }\n if (func === other) {\n return true;\n }\n var data = getData(other);\n return !!data && func === data[0];\n }\n\n /**\n * Checks if `func` has its source masked.\n *\n * @private\n * @param {Function} func The function to check.\n * @returns {boolean} Returns `true` if `func` is masked, else `false`.\n */\n function isMasked(func) {\n return !!maskSrcKey && (maskSrcKey in func);\n }\n\n /**\n * Checks if `func` is capable of being masked.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `func` is maskable, else `false`.\n */\n var isMaskable = coreJsData ? isFunction : stubFalse;\n\n /**\n * Checks if `value` is likely a prototype object.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a prototype, else `false`.\n */\n function isPrototype(value) {\n var Ctor = value && value.constructor,\n proto = (typeof Ctor == 'function' && Ctor.prototype) || objectProto;\n\n return value === proto;\n }\n\n /**\n * Checks if `value` is suitable for strict equality comparisons, i.e. `===`.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` if suitable for strict\n * equality comparisons, else `false`.\n */\n function isStrictComparable(value) {\n return value === value && !isObject(value);\n }\n\n /**\n * A specialized version of `matchesProperty` for source values suitable\n * for strict equality comparisons, i.e. `===`.\n *\n * @private\n * @param {string} key The key of the property to get.\n * @param {*} srcValue The value to match.\n * @returns {Function} Returns the new spec function.\n */\n function matchesStrictComparable(key, srcValue) {\n return function(object) {\n if (object == null) {\n return false;\n }\n return object[key] === srcValue &&\n (srcValue !== undefined || (key in Object(object)));\n };\n }\n\n /**\n * A specialized version of `_.memoize` which clears the memoized function's\n * cache when it exceeds `MAX_MEMOIZE_SIZE`.\n *\n * @private\n * @param {Function} func The function to have its output memoized.\n * @returns {Function} Returns the new memoized function.\n */\n function memoizeCapped(func) {\n var result = memoize(func, function(key) {\n if (cache.size === MAX_MEMOIZE_SIZE) {\n cache.clear();\n }\n return key;\n });\n\n var cache = result.cache;\n return result;\n }\n\n /**\n * Merges the function metadata of `source` into `data`.\n *\n * Merging metadata reduces the number of wrappers used to invoke a function.\n * This is possible because methods like `_.bind`, `_.curry`, and `_.partial`\n * may be applied regardless of execution order. Methods like `_.ary` and\n * `_.rearg` modify function arguments, making the order in which they are\n * executed important, preventing the merging of metadata. However, we make\n * an exception for a safe combined case where curried functions have `_.ary`\n * and or `_.rearg` applied.\n *\n * @private\n * @param {Array} data The destination metadata.\n * @param {Array} source The source metadata.\n * @returns {Array} Returns `data`.\n */\n function mergeData(data, source) {\n var bitmask = data[1],\n srcBitmask = source[1],\n newBitmask = bitmask | srcBitmask,\n isCommon = newBitmask < (WRAP_BIND_FLAG | WRAP_BIND_KEY_FLAG | WRAP_ARY_FLAG);\n\n var isCombo =\n ((srcBitmask == WRAP_ARY_FLAG) && (bitmask == WRAP_CURRY_FLAG)) ||\n ((srcBitmask == WRAP_ARY_FLAG) && (bitmask == WRAP_REARG_FLAG) && (data[7].length <= source[8])) ||\n ((srcBitmask == (WRAP_ARY_FLAG | WRAP_REARG_FLAG)) && (source[7].length <= source[8]) && (bitmask == WRAP_CURRY_FLAG));\n\n // Exit early if metadata can't be merged.\n if (!(isCommon || isCombo)) {\n return data;\n }\n // Use source `thisArg` if available.\n if (srcBitmask & WRAP_BIND_FLAG) {\n data[2] = source[2];\n // Set when currying a bound function.\n newBitmask |= bitmask & WRAP_BIND_FLAG ? 0 : WRAP_CURRY_BOUND_FLAG;\n }\n // Compose partial arguments.\n var value = source[3];\n if (value) {\n var partials = data[3];\n data[3] = partials ? composeArgs(partials, value, source[4]) : value;\n data[4] = partials ? replaceHolders(data[3], PLACEHOLDER) : source[4];\n }\n // Compose partial right arguments.\n value = source[5];\n if (value) {\n partials = data[5];\n data[5] = partials ? composeArgsRight(partials, value, source[6]) : value;\n data[6] = partials ? replaceHolders(data[5], PLACEHOLDER) : source[6];\n }\n // Use source `argPos` if available.\n value = source[7];\n if (value) {\n data[7] = value;\n }\n // Use source `ary` if it's smaller.\n if (srcBitmask & WRAP_ARY_FLAG) {\n data[8] = data[8] == null ? source[8] : nativeMin(data[8], source[8]);\n }\n // Use source `arity` if one is not provided.\n if (data[9] == null) {\n data[9] = source[9];\n }\n // Use source `func` and merge bitmasks.\n data[0] = source[0];\n data[1] = newBitmask;\n\n return data;\n }\n\n /**\n * This function is like\n * [`Object.keys`](http://ecma-international.org/ecma-262/7.0/#sec-object.keys)\n * except that it includes inherited enumerable properties.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n */\n function nativeKeysIn(object) {\n var result = [];\n if (object != null) {\n for (var key in Object(object)) {\n result.push(key);\n }\n }\n return result;\n }\n\n /**\n * Converts `value` to a string using `Object.prototype.toString`.\n *\n * @private\n * @param {*} value The value to convert.\n * @returns {string} Returns the converted string.\n */\n function objectToString(value) {\n return nativeObjectToString.call(value);\n }\n\n /**\n * A specialized version of `baseRest` which transforms the rest array.\n *\n * @private\n * @param {Function} func The function to apply a rest parameter to.\n * @param {number} [start=func.length-1] The start position of the rest parameter.\n * @param {Function} transform The rest array transform.\n * @returns {Function} Returns the new function.\n */\n function overRest(func, start, transform) {\n start = nativeMax(start === undefined ? (func.length - 1) : start, 0);\n return function() {\n var args = arguments,\n index = -1,\n length = nativeMax(args.length - start, 0),\n array = Array(length);\n\n while (++index < length) {\n array[index] = args[start + index];\n }\n index = -1;\n var otherArgs = Array(start + 1);\n while (++index < start) {\n otherArgs[index] = args[index];\n }\n otherArgs[start] = transform(array);\n return apply(func, this, otherArgs);\n };\n }\n\n /**\n * Gets the parent value at `path` of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Array} path The path to get the parent value of.\n * @returns {*} Returns the parent value.\n */\n function parent(object, path) {\n return path.length < 2 ? object : baseGet(object, baseSlice(path, 0, -1));\n }\n\n /**\n * Reorder `array` according to the specified indexes where the element at\n * the first index is assigned as the first element, the element at\n * the second index is assigned as the second element, and so on.\n *\n * @private\n * @param {Array} array The array to reorder.\n * @param {Array} indexes The arranged array indexes.\n * @returns {Array} Returns `array`.\n */\n function reorder(array, indexes) {\n var arrLength = array.length,\n length = nativeMin(indexes.length, arrLength),\n oldArray = copyArray(array);\n\n while (length--) {\n var index = indexes[length];\n array[length] = isIndex(index, arrLength) ? oldArray[index] : undefined;\n }\n return array;\n }\n\n /**\n * Gets the value at `key`, unless `key` is \"__proto__\" or \"constructor\".\n *\n * @private\n * @param {Object} object The object to query.\n * @param {string} key The key of the property to get.\n * @returns {*} Returns the property value.\n */\n function safeGet(object, key) {\n if (key === 'constructor' && typeof object[key] === 'function') {\n return;\n }\n\n if (key == '__proto__') {\n return;\n }\n\n return object[key];\n }\n\n /**\n * Sets metadata for `func`.\n *\n * **Note:** If this function becomes hot, i.e. is invoked a lot in a short\n * period of time, it will trip its breaker and transition to an identity\n * function to avoid garbage collection pauses in V8. See\n * [V8 issue 2070](https://bugs.chromium.org/p/v8/issues/detail?id=2070)\n * for more details.\n *\n * @private\n * @param {Function} func The function to associate metadata with.\n * @param {*} data The metadata.\n * @returns {Function} Returns `func`.\n */\n var setData = shortOut(baseSetData);\n\n /**\n * A simple wrapper around the global [`setTimeout`](https://mdn.io/setTimeout).\n *\n * @private\n * @param {Function} func The function to delay.\n * @param {number} wait The number of milliseconds to delay invocation.\n * @returns {number|Object} Returns the timer id or timeout object.\n */\n var setTimeout = ctxSetTimeout || function(func, wait) {\n return root.setTimeout(func, wait);\n };\n\n /**\n * Sets the `toString` method of `func` to return `string`.\n *\n * @private\n * @param {Function} func The function to modify.\n * @param {Function} string The `toString` result.\n * @returns {Function} Returns `func`.\n */\n var setToString = shortOut(baseSetToString);\n\n /**\n * Sets the `toString` method of `wrapper` to mimic the source of `reference`\n * with wrapper details in a comment at the top of the source body.\n *\n * @private\n * @param {Function} wrapper The function to modify.\n * @param {Function} reference The reference function.\n * @param {number} bitmask The bitmask flags. See `createWrap` for more details.\n * @returns {Function} Returns `wrapper`.\n */\n function setWrapToString(wrapper, reference, bitmask) {\n var source = (reference + '');\n return setToString(wrapper, insertWrapDetails(source, updateWrapDetails(getWrapDetails(source), bitmask)));\n }\n\n /**\n * Creates a function that'll short out and invoke `identity` instead\n * of `func` when it's called `HOT_COUNT` or more times in `HOT_SPAN`\n * milliseconds.\n *\n * @private\n * @param {Function} func The function to restrict.\n * @returns {Function} Returns the new shortable function.\n */\n function shortOut(func) {\n var count = 0,\n lastCalled = 0;\n\n return function() {\n var stamp = nativeNow(),\n remaining = HOT_SPAN - (stamp - lastCalled);\n\n lastCalled = stamp;\n if (remaining > 0) {\n if (++count >= HOT_COUNT) {\n return arguments[0];\n }\n } else {\n count = 0;\n }\n return func.apply(undefined, arguments);\n };\n }\n\n /**\n * A specialized version of `_.shuffle` which mutates and sets the size of `array`.\n *\n * @private\n * @param {Array} array The array to shuffle.\n * @param {number} [size=array.length] The size of `array`.\n * @returns {Array} Returns `array`.\n */\n function shuffleSelf(array, size) {\n var index = -1,\n length = array.length,\n lastIndex = length - 1;\n\n size = size === undefined ? length : size;\n while (++index < size) {\n var rand = baseRandom(index, lastIndex),\n value = array[rand];\n\n array[rand] = array[index];\n array[index] = value;\n }\n array.length = size;\n return array;\n }\n\n /**\n * Converts `string` to a property path array.\n *\n * @private\n * @param {string} string The string to convert.\n * @returns {Array} Returns the property path array.\n */\n var stringToPath = memoizeCapped(function(string) {\n var result = [];\n if (string.charCodeAt(0) === 46 /* . */) {\n result.push('');\n }\n string.replace(rePropName, function(match, number, quote, subString) {\n result.push(quote ? subString.replace(reEscapeChar, '$1') : (number || match));\n });\n return result;\n });\n\n /**\n * Converts `value` to a string key if it's not a string or symbol.\n *\n * @private\n * @param {*} value The value to inspect.\n * @returns {string|symbol} Returns the key.\n */\n function toKey(value) {\n if (typeof value == 'string' || isSymbol(value)) {\n return value;\n }\n var result = (value + '');\n return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result;\n }\n\n /**\n * Converts `func` to its source code.\n *\n * @private\n * @param {Function} func The function to convert.\n * @returns {string} Returns the source code.\n */\n function toSource(func) {\n if (func != null) {\n try {\n return funcToString.call(func);\n } catch (e) {}\n try {\n return (func + '');\n } catch (e) {}\n }\n return '';\n }\n\n /**\n * Updates wrapper `details` based on `bitmask` flags.\n *\n * @private\n * @returns {Array} details The details to modify.\n * @param {number} bitmask The bitmask flags. See `createWrap` for more details.\n * @returns {Array} Returns `details`.\n */\n function updateWrapDetails(details, bitmask) {\n arrayEach(wrapFlags, function(pair) {\n var value = '_.' + pair[0];\n if ((bitmask & pair[1]) && !arrayIncludes(details, value)) {\n details.push(value);\n }\n });\n return details.sort();\n }\n\n /**\n * Creates a clone of `wrapper`.\n *\n * @private\n * @param {Object} wrapper The wrapper to clone.\n * @returns {Object} Returns the cloned wrapper.\n */\n function wrapperClone(wrapper) {\n if (wrapper instanceof LazyWrapper) {\n return wrapper.clone();\n }\n var result = new LodashWrapper(wrapper.__wrapped__, wrapper.__chain__);\n result.__actions__ = copyArray(wrapper.__actions__);\n result.__index__ = wrapper.__index__;\n result.__values__ = wrapper.__values__;\n return result;\n }\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Creates an array of elements split into groups the length of `size`.\n * If `array` can't be split evenly, the final chunk will be the remaining\n * elements.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Array\n * @param {Array} array The array to process.\n * @param {number} [size=1] The length of each chunk\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {Array} Returns the new array of chunks.\n * @example\n *\n * _.chunk(['a', 'b', 'c', 'd'], 2);\n * // => [['a', 'b'], ['c', 'd']]\n *\n * _.chunk(['a', 'b', 'c', 'd'], 3);\n * // => [['a', 'b', 'c'], ['d']]\n */\n function chunk(array, size, guard) {\n if ((guard ? isIterateeCall(array, size, guard) : size === undefined)) {\n size = 1;\n } else {\n size = nativeMax(toInteger(size), 0);\n }\n var length = array == null ? 0 : array.length;\n if (!length || size < 1) {\n return [];\n }\n var index = 0,\n resIndex = 0,\n result = Array(nativeCeil(length / size));\n\n while (index < length) {\n result[resIndex++] = baseSlice(array, index, (index += size));\n }\n return result;\n }\n\n /**\n * Creates an array with all falsey values removed. The values `false`, `null`,\n * `0`, `\"\"`, `undefined`, and `NaN` are falsey.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to compact.\n * @returns {Array} Returns the new array of filtered values.\n * @example\n *\n * _.compact([0, 1, false, 2, '', 3]);\n * // => [1, 2, 3]\n */\n function compact(array) {\n var index = -1,\n length = array == null ? 0 : array.length,\n resIndex = 0,\n result = [];\n\n while (++index < length) {\n var value = array[index];\n if (value) {\n result[resIndex++] = value;\n }\n }\n return result;\n }\n\n /**\n * Creates a new array concatenating `array` with any additional arrays\n * and/or values.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to concatenate.\n * @param {...*} [values] The values to concatenate.\n * @returns {Array} Returns the new concatenated array.\n * @example\n *\n * var array = [1];\n * var other = _.concat(array, 2, [3], [[4]]);\n *\n * console.log(other);\n * // => [1, 2, 3, [4]]\n *\n * console.log(array);\n * // => [1]\n */\n function concat() {\n var length = arguments.length;\n if (!length) {\n return [];\n }\n var args = Array(length - 1),\n array = arguments[0],\n index = length;\n\n while (index--) {\n args[index - 1] = arguments[index];\n }\n return arrayPush(isArray(array) ? copyArray(array) : [array], baseFlatten(args, 1));\n }\n\n /**\n * Creates an array of `array` values not included in the other given arrays\n * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * for equality comparisons. The order and references of result values are\n * determined by the first array.\n *\n * **Note:** Unlike `_.pullAll`, this method returns a new array.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {...Array} [values] The values to exclude.\n * @returns {Array} Returns the new array of filtered values.\n * @see _.without, _.xor\n * @example\n *\n * _.difference([2, 1], [2, 3]);\n * // => [1]\n */\n var difference = baseRest(function(array, values) {\n return isArrayLikeObject(array)\n ? baseDifference(array, baseFlatten(values, 1, isArrayLikeObject, true))\n : [];\n });\n\n /**\n * This method is like `_.difference` except that it accepts `iteratee` which\n * is invoked for each element of `array` and `values` to generate the criterion\n * by which they're compared. The order and references of result values are\n * determined by the first array. The iteratee is invoked with one argument:\n * (value).\n *\n * **Note:** Unlike `_.pullAllBy`, this method returns a new array.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {...Array} [values] The values to exclude.\n * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n * @returns {Array} Returns the new array of filtered values.\n * @example\n *\n * _.differenceBy([2.1, 1.2], [2.3, 3.4], Math.floor);\n * // => [1.2]\n *\n * // The `_.property` iteratee shorthand.\n * _.differenceBy([{ 'x': 2 }, { 'x': 1 }], [{ 'x': 1 }], 'x');\n * // => [{ 'x': 2 }]\n */\n var differenceBy = baseRest(function(array, values) {\n var iteratee = last(values);\n if (isArrayLikeObject(iteratee)) {\n iteratee = undefined;\n }\n return isArrayLikeObject(array)\n ? baseDifference(array, baseFlatten(values, 1, isArrayLikeObject, true), getIteratee(iteratee, 2))\n : [];\n });\n\n /**\n * This method is like `_.difference` except that it accepts `comparator`\n * which is invoked to compare elements of `array` to `values`. The order and\n * references of result values are determined by the first array. The comparator\n * is invoked with two arguments: (arrVal, othVal).\n *\n * **Note:** Unlike `_.pullAllWith`, this method returns a new array.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {...Array} [values] The values to exclude.\n * @param {Function} [comparator] The comparator invoked per element.\n * @returns {Array} Returns the new array of filtered values.\n * @example\n *\n * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }];\n *\n * _.differenceWith(objects, [{ 'x': 1, 'y': 2 }], _.isEqual);\n * // => [{ 'x': 2, 'y': 1 }]\n */\n var differenceWith = baseRest(function(array, values) {\n var comparator = last(values);\n if (isArrayLikeObject(comparator)) {\n comparator = undefined;\n }\n return isArrayLikeObject(array)\n ? baseDifference(array, baseFlatten(values, 1, isArrayLikeObject, true), undefined, comparator)\n : [];\n });\n\n /**\n * Creates a slice of `array` with `n` elements dropped from the beginning.\n *\n * @static\n * @memberOf _\n * @since 0.5.0\n * @category Array\n * @param {Array} array The array to query.\n * @param {number} [n=1] The number of elements to drop.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {Array} Returns the slice of `array`.\n * @example\n *\n * _.drop([1, 2, 3]);\n * // => [2, 3]\n *\n * _.drop([1, 2, 3], 2);\n * // => [3]\n *\n * _.drop([1, 2, 3], 5);\n * // => []\n *\n * _.drop([1, 2, 3], 0);\n * // => [1, 2, 3]\n */\n function drop(array, n, guard) {\n var length = array == null ? 0 : array.length;\n if (!length) {\n return [];\n }\n n = (guard || n === undefined) ? 1 : toInteger(n);\n return baseSlice(array, n < 0 ? 0 : n, length);\n }\n\n /**\n * Creates a slice of `array` with `n` elements dropped from the end.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Array\n * @param {Array} array The array to query.\n * @param {number} [n=1] The number of elements to drop.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {Array} Returns the slice of `array`.\n * @example\n *\n * _.dropRight([1, 2, 3]);\n * // => [1, 2]\n *\n * _.dropRight([1, 2, 3], 2);\n * // => [1]\n *\n * _.dropRight([1, 2, 3], 5);\n * // => []\n *\n * _.dropRight([1, 2, 3], 0);\n * // => [1, 2, 3]\n */\n function dropRight(array, n, guard) {\n var length = array == null ? 0 : array.length;\n if (!length) {\n return [];\n }\n n = (guard || n === undefined) ? 1 : toInteger(n);\n n = length - n;\n return baseSlice(array, 0, n < 0 ? 0 : n);\n }\n\n /**\n * Creates a slice of `array` excluding elements dropped from the end.\n * Elements are dropped until `predicate` returns falsey. The predicate is\n * invoked with three arguments: (value, index, array).\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Array\n * @param {Array} array The array to query.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @returns {Array} Returns the slice of `array`.\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'active': true },\n * { 'user': 'fred', 'active': false },\n * { 'user': 'pebbles', 'active': false }\n * ];\n *\n * _.dropRightWhile(users, function(o) { return !o.active; });\n * // => objects for ['barney']\n *\n * // The `_.matches` iteratee shorthand.\n * _.dropRightWhile(users, { 'user': 'pebbles', 'active': false });\n * // => objects for ['barney', 'fred']\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.dropRightWhile(users, ['active', false]);\n * // => objects for ['barney']\n *\n * // The `_.property` iteratee shorthand.\n * _.dropRightWhile(users, 'active');\n * // => objects for ['barney', 'fred', 'pebbles']\n */\n function dropRightWhile(array, predicate) {\n return (array && array.length)\n ? baseWhile(array, getIteratee(predicate, 3), true, true)\n : [];\n }\n\n /**\n * Creates a slice of `array` excluding elements dropped from the beginning.\n * Elements are dropped until `predicate` returns falsey. The predicate is\n * invoked with three arguments: (value, index, array).\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Array\n * @param {Array} array The array to query.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @returns {Array} Returns the slice of `array`.\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'active': false },\n * { 'user': 'fred', 'active': false },\n * { 'user': 'pebbles', 'active': true }\n * ];\n *\n * _.dropWhile(users, function(o) { return !o.active; });\n * // => objects for ['pebbles']\n *\n * // The `_.matches` iteratee shorthand.\n * _.dropWhile(users, { 'user': 'barney', 'active': false });\n * // => objects for ['fred', 'pebbles']\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.dropWhile(users, ['active', false]);\n * // => objects for ['pebbles']\n *\n * // The `_.property` iteratee shorthand.\n * _.dropWhile(users, 'active');\n * // => objects for ['barney', 'fred', 'pebbles']\n */\n function dropWhile(array, predicate) {\n return (array && array.length)\n ? baseWhile(array, getIteratee(predicate, 3), true)\n : [];\n }\n\n /**\n * Fills elements of `array` with `value` from `start` up to, but not\n * including, `end`.\n *\n * **Note:** This method mutates `array`.\n *\n * @static\n * @memberOf _\n * @since 3.2.0\n * @category Array\n * @param {Array} array The array to fill.\n * @param {*} value The value to fill `array` with.\n * @param {number} [start=0] The start position.\n * @param {number} [end=array.length] The end position.\n * @returns {Array} Returns `array`.\n * @example\n *\n * var array = [1, 2, 3];\n *\n * _.fill(array, 'a');\n * console.log(array);\n * // => ['a', 'a', 'a']\n *\n * _.fill(Array(3), 2);\n * // => [2, 2, 2]\n *\n * _.fill([4, 6, 8, 10], '*', 1, 3);\n * // => [4, '*', '*', 10]\n */\n function fill(array, value, start, end) {\n var length = array == null ? 0 : array.length;\n if (!length) {\n return [];\n }\n if (start && typeof start != 'number' && isIterateeCall(array, value, start)) {\n start = 0;\n end = length;\n }\n return baseFill(array, value, start, end);\n }\n\n /**\n * This method is like `_.find` except that it returns the index of the first\n * element `predicate` returns truthy for instead of the element itself.\n *\n * @static\n * @memberOf _\n * @since 1.1.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @param {number} [fromIndex=0] The index to search from.\n * @returns {number} Returns the index of the found element, else `-1`.\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'active': false },\n * { 'user': 'fred', 'active': false },\n * { 'user': 'pebbles', 'active': true }\n * ];\n *\n * _.findIndex(users, function(o) { return o.user == 'barney'; });\n * // => 0\n *\n * // The `_.matches` iteratee shorthand.\n * _.findIndex(users, { 'user': 'fred', 'active': false });\n * // => 1\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.findIndex(users, ['active', false]);\n * // => 0\n *\n * // The `_.property` iteratee shorthand.\n * _.findIndex(users, 'active');\n * // => 2\n */\n function findIndex(array, predicate, fromIndex) {\n var length = array == null ? 0 : array.length;\n if (!length) {\n return -1;\n }\n var index = fromIndex == null ? 0 : toInteger(fromIndex);\n if (index < 0) {\n index = nativeMax(length + index, 0);\n }\n return baseFindIndex(array, getIteratee(predicate, 3), index);\n }\n\n /**\n * This method is like `_.findIndex` except that it iterates over elements\n * of `collection` from right to left.\n *\n * @static\n * @memberOf _\n * @since 2.0.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @param {number} [fromIndex=array.length-1] The index to search from.\n * @returns {number} Returns the index of the found element, else `-1`.\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'active': true },\n * { 'user': 'fred', 'active': false },\n * { 'user': 'pebbles', 'active': false }\n * ];\n *\n * _.findLastIndex(users, function(o) { return o.user == 'pebbles'; });\n * // => 2\n *\n * // The `_.matches` iteratee shorthand.\n * _.findLastIndex(users, { 'user': 'barney', 'active': true });\n * // => 0\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.findLastIndex(users, ['active', false]);\n * // => 2\n *\n * // The `_.property` iteratee shorthand.\n * _.findLastIndex(users, 'active');\n * // => 0\n */\n function findLastIndex(array, predicate, fromIndex) {\n var length = array == null ? 0 : array.length;\n if (!length) {\n return -1;\n }\n var index = length - 1;\n if (fromIndex !== undefined) {\n index = toInteger(fromIndex);\n index = fromIndex < 0\n ? nativeMax(length + index, 0)\n : nativeMin(index, length - 1);\n }\n return baseFindIndex(array, getIteratee(predicate, 3), index, true);\n }\n\n /**\n * Flattens `array` a single level deep.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to flatten.\n * @returns {Array} Returns the new flattened array.\n * @example\n *\n * _.flatten([1, [2, [3, [4]], 5]]);\n * // => [1, 2, [3, [4]], 5]\n */\n function flatten(array) {\n var length = array == null ? 0 : array.length;\n return length ? baseFlatten(array, 1) : [];\n }\n\n /**\n * Recursively flattens `array`.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Array\n * @param {Array} array The array to flatten.\n * @returns {Array} Returns the new flattened array.\n * @example\n *\n * _.flattenDeep([1, [2, [3, [4]], 5]]);\n * // => [1, 2, 3, 4, 5]\n */\n function flattenDeep(array) {\n var length = array == null ? 0 : array.length;\n return length ? baseFlatten(array, INFINITY) : [];\n }\n\n /**\n * Recursively flatten `array` up to `depth` times.\n *\n * @static\n * @memberOf _\n * @since 4.4.0\n * @category Array\n * @param {Array} array The array to flatten.\n * @param {number} [depth=1] The maximum recursion depth.\n * @returns {Array} Returns the new flattened array.\n * @example\n *\n * var array = [1, [2, [3, [4]], 5]];\n *\n * _.flattenDepth(array, 1);\n * // => [1, 2, [3, [4]], 5]\n *\n * _.flattenDepth(array, 2);\n * // => [1, 2, 3, [4], 5]\n */\n function flattenDepth(array, depth) {\n var length = array == null ? 0 : array.length;\n if (!length) {\n return [];\n }\n depth = depth === undefined ? 1 : toInteger(depth);\n return baseFlatten(array, depth);\n }\n\n /**\n * The inverse of `_.toPairs`; this method returns an object composed\n * from key-value `pairs`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} pairs The key-value pairs.\n * @returns {Object} Returns the new object.\n * @example\n *\n * _.fromPairs([['a', 1], ['b', 2]]);\n * // => { 'a': 1, 'b': 2 }\n */\n function fromPairs(pairs) {\n var index = -1,\n length = pairs == null ? 0 : pairs.length,\n result = {};\n\n while (++index < length) {\n var pair = pairs[index];\n result[pair[0]] = pair[1];\n }\n return result;\n }\n\n /**\n * Gets the first element of `array`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @alias first\n * @category Array\n * @param {Array} array The array to query.\n * @returns {*} Returns the first element of `array`.\n * @example\n *\n * _.head([1, 2, 3]);\n * // => 1\n *\n * _.head([]);\n * // => undefined\n */\n function head(array) {\n return (array && array.length) ? array[0] : undefined;\n }\n\n /**\n * Gets the index at which the first occurrence of `value` is found in `array`\n * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * for equality comparisons. If `fromIndex` is negative, it's used as the\n * offset from the end of `array`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {*} value The value to search for.\n * @param {number} [fromIndex=0] The index to search from.\n * @returns {number} Returns the index of the matched value, else `-1`.\n * @example\n *\n * _.indexOf([1, 2, 1, 2], 2);\n * // => 1\n *\n * // Search from the `fromIndex`.\n * _.indexOf([1, 2, 1, 2], 2, 2);\n * // => 3\n */\n function indexOf(array, value, fromIndex) {\n var length = array == null ? 0 : array.length;\n if (!length) {\n return -1;\n }\n var index = fromIndex == null ? 0 : toInteger(fromIndex);\n if (index < 0) {\n index = nativeMax(length + index, 0);\n }\n return baseIndexOf(array, value, index);\n }\n\n /**\n * Gets all but the last element of `array`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to query.\n * @returns {Array} Returns the slice of `array`.\n * @example\n *\n * _.initial([1, 2, 3]);\n * // => [1, 2]\n */\n function initial(array) {\n var length = array == null ? 0 : array.length;\n return length ? baseSlice(array, 0, -1) : [];\n }\n\n /**\n * Creates an array of unique values that are included in all given arrays\n * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * for equality comparisons. The order and references of result values are\n * determined by the first array.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {...Array} [arrays] The arrays to inspect.\n * @returns {Array} Returns the new array of intersecting values.\n * @example\n *\n * _.intersection([2, 1], [2, 3]);\n * // => [2]\n */\n var intersection = baseRest(function(arrays) {\n var mapped = arrayMap(arrays, castArrayLikeObject);\n return (mapped.length && mapped[0] === arrays[0])\n ? baseIntersection(mapped)\n : [];\n });\n\n /**\n * This method is like `_.intersection` except that it accepts `iteratee`\n * which is invoked for each element of each `arrays` to generate the criterion\n * by which they're compared. The order and references of result values are\n * determined by the first array. The iteratee is invoked with one argument:\n * (value).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {...Array} [arrays] The arrays to inspect.\n * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n * @returns {Array} Returns the new array of intersecting values.\n * @example\n *\n * _.intersectionBy([2.1, 1.2], [2.3, 3.4], Math.floor);\n * // => [2.1]\n *\n * // The `_.property` iteratee shorthand.\n * _.intersectionBy([{ 'x': 1 }], [{ 'x': 2 }, { 'x': 1 }], 'x');\n * // => [{ 'x': 1 }]\n */\n var intersectionBy = baseRest(function(arrays) {\n var iteratee = last(arrays),\n mapped = arrayMap(arrays, castArrayLikeObject);\n\n if (iteratee === last(mapped)) {\n iteratee = undefined;\n } else {\n mapped.pop();\n }\n return (mapped.length && mapped[0] === arrays[0])\n ? baseIntersection(mapped, getIteratee(iteratee, 2))\n : [];\n });\n\n /**\n * This method is like `_.intersection` except that it accepts `comparator`\n * which is invoked to compare elements of `arrays`. The order and references\n * of result values are determined by the first array. The comparator is\n * invoked with two arguments: (arrVal, othVal).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {...Array} [arrays] The arrays to inspect.\n * @param {Function} [comparator] The comparator invoked per element.\n * @returns {Array} Returns the new array of intersecting values.\n * @example\n *\n * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }];\n * var others = [{ 'x': 1, 'y': 1 }, { 'x': 1, 'y': 2 }];\n *\n * _.intersectionWith(objects, others, _.isEqual);\n * // => [{ 'x': 1, 'y': 2 }]\n */\n var intersectionWith = baseRest(function(arrays) {\n var comparator = last(arrays),\n mapped = arrayMap(arrays, castArrayLikeObject);\n\n comparator = typeof comparator == 'function' ? comparator : undefined;\n if (comparator) {\n mapped.pop();\n }\n return (mapped.length && mapped[0] === arrays[0])\n ? baseIntersection(mapped, undefined, comparator)\n : [];\n });\n\n /**\n * Converts all elements in `array` into a string separated by `separator`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to convert.\n * @param {string} [separator=','] The element separator.\n * @returns {string} Returns the joined string.\n * @example\n *\n * _.join(['a', 'b', 'c'], '~');\n * // => 'a~b~c'\n */\n function join(array, separator) {\n return array == null ? '' : nativeJoin.call(array, separator);\n }\n\n /**\n * Gets the last element of `array`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to query.\n * @returns {*} Returns the last element of `array`.\n * @example\n *\n * _.last([1, 2, 3]);\n * // => 3\n */\n function last(array) {\n var length = array == null ? 0 : array.length;\n return length ? array[length - 1] : undefined;\n }\n\n /**\n * This method is like `_.indexOf` except that it iterates over elements of\n * `array` from right to left.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {*} value The value to search for.\n * @param {number} [fromIndex=array.length-1] The index to search from.\n * @returns {number} Returns the index of the matched value, else `-1`.\n * @example\n *\n * _.lastIndexOf([1, 2, 1, 2], 2);\n * // => 3\n *\n * // Search from the `fromIndex`.\n * _.lastIndexOf([1, 2, 1, 2], 2, 2);\n * // => 1\n */\n function lastIndexOf(array, value, fromIndex) {\n var length = array == null ? 0 : array.length;\n if (!length) {\n return -1;\n }\n var index = length;\n if (fromIndex !== undefined) {\n index = toInteger(fromIndex);\n index = index < 0 ? nativeMax(length + index, 0) : nativeMin(index, length - 1);\n }\n return value === value\n ? strictLastIndexOf(array, value, index)\n : baseFindIndex(array, baseIsNaN, index, true);\n }\n\n /**\n * Gets the element at index `n` of `array`. If `n` is negative, the nth\n * element from the end is returned.\n *\n * @static\n * @memberOf _\n * @since 4.11.0\n * @category Array\n * @param {Array} array The array to query.\n * @param {number} [n=0] The index of the element to return.\n * @returns {*} Returns the nth element of `array`.\n * @example\n *\n * var array = ['a', 'b', 'c', 'd'];\n *\n * _.nth(array, 1);\n * // => 'b'\n *\n * _.nth(array, -2);\n * // => 'c';\n */\n function nth(array, n) {\n return (array && array.length) ? baseNth(array, toInteger(n)) : undefined;\n }\n\n /**\n * Removes all given values from `array` using\n * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * for equality comparisons.\n *\n * **Note:** Unlike `_.without`, this method mutates `array`. Use `_.remove`\n * to remove elements from an array by predicate.\n *\n * @static\n * @memberOf _\n * @since 2.0.0\n * @category Array\n * @param {Array} array The array to modify.\n * @param {...*} [values] The values to remove.\n * @returns {Array} Returns `array`.\n * @example\n *\n * var array = ['a', 'b', 'c', 'a', 'b', 'c'];\n *\n * _.pull(array, 'a', 'c');\n * console.log(array);\n * // => ['b', 'b']\n */\n var pull = baseRest(pullAll);\n\n /**\n * This method is like `_.pull` except that it accepts an array of values to remove.\n *\n * **Note:** Unlike `_.difference`, this method mutates `array`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to modify.\n * @param {Array} values The values to remove.\n * @returns {Array} Returns `array`.\n * @example\n *\n * var array = ['a', 'b', 'c', 'a', 'b', 'c'];\n *\n * _.pullAll(array, ['a', 'c']);\n * console.log(array);\n * // => ['b', 'b']\n */\n function pullAll(array, values) {\n return (array && array.length && values && values.length)\n ? basePullAll(array, values)\n : array;\n }\n\n /**\n * This method is like `_.pullAll` except that it accepts `iteratee` which is\n * invoked for each element of `array` and `values` to generate the criterion\n * by which they're compared. The iteratee is invoked with one argument: (value).\n *\n * **Note:** Unlike `_.differenceBy`, this method mutates `array`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to modify.\n * @param {Array} values The values to remove.\n * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n * @returns {Array} Returns `array`.\n * @example\n *\n * var array = [{ 'x': 1 }, { 'x': 2 }, { 'x': 3 }, { 'x': 1 }];\n *\n * _.pullAllBy(array, [{ 'x': 1 }, { 'x': 3 }], 'x');\n * console.log(array);\n * // => [{ 'x': 2 }]\n */\n function pullAllBy(array, values, iteratee) {\n return (array && array.length && values && values.length)\n ? basePullAll(array, values, getIteratee(iteratee, 2))\n : array;\n }\n\n /**\n * This method is like `_.pullAll` except that it accepts `comparator` which\n * is invoked to compare elements of `array` to `values`. The comparator is\n * invoked with two arguments: (arrVal, othVal).\n *\n * **Note:** Unlike `_.differenceWith`, this method mutates `array`.\n *\n * @static\n * @memberOf _\n * @since 4.6.0\n * @category Array\n * @param {Array} array The array to modify.\n * @param {Array} values The values to remove.\n * @param {Function} [comparator] The comparator invoked per element.\n * @returns {Array} Returns `array`.\n * @example\n *\n * var array = [{ 'x': 1, 'y': 2 }, { 'x': 3, 'y': 4 }, { 'x': 5, 'y': 6 }];\n *\n * _.pullAllWith(array, [{ 'x': 3, 'y': 4 }], _.isEqual);\n * console.log(array);\n * // => [{ 'x': 1, 'y': 2 }, { 'x': 5, 'y': 6 }]\n */\n function pullAllWith(array, values, comparator) {\n return (array && array.length && values && values.length)\n ? basePullAll(array, values, undefined, comparator)\n : array;\n }\n\n /**\n * Removes elements from `array` corresponding to `indexes` and returns an\n * array of removed elements.\n *\n * **Note:** Unlike `_.at`, this method mutates `array`.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Array\n * @param {Array} array The array to modify.\n * @param {...(number|number[])} [indexes] The indexes of elements to remove.\n * @returns {Array} Returns the new array of removed elements.\n * @example\n *\n * var array = ['a', 'b', 'c', 'd'];\n * var pulled = _.pullAt(array, [1, 3]);\n *\n * console.log(array);\n * // => ['a', 'c']\n *\n * console.log(pulled);\n * // => ['b', 'd']\n */\n var pullAt = flatRest(function(array, indexes) {\n var length = array == null ? 0 : array.length,\n result = baseAt(array, indexes);\n\n basePullAt(array, arrayMap(indexes, function(index) {\n return isIndex(index, length) ? +index : index;\n }).sort(compareAscending));\n\n return result;\n });\n\n /**\n * Removes all elements from `array` that `predicate` returns truthy for\n * and returns an array of the removed elements. The predicate is invoked\n * with three arguments: (value, index, array).\n *\n * **Note:** Unlike `_.filter`, this method mutates `array`. Use `_.pull`\n * to pull elements from an array by value.\n *\n * @static\n * @memberOf _\n * @since 2.0.0\n * @category Array\n * @param {Array} array The array to modify.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @returns {Array} Returns the new array of removed elements.\n * @example\n *\n * var array = [1, 2, 3, 4];\n * var evens = _.remove(array, function(n) {\n * return n % 2 == 0;\n * });\n *\n * console.log(array);\n * // => [1, 3]\n *\n * console.log(evens);\n * // => [2, 4]\n */\n function remove(array, predicate) {\n var result = [];\n if (!(array && array.length)) {\n return result;\n }\n var index = -1,\n indexes = [],\n length = array.length;\n\n predicate = getIteratee(predicate, 3);\n while (++index < length) {\n var value = array[index];\n if (predicate(value, index, array)) {\n result.push(value);\n indexes.push(index);\n }\n }\n basePullAt(array, indexes);\n return result;\n }\n\n /**\n * Reverses `array` so that the first element becomes the last, the second\n * element becomes the second to last, and so on.\n *\n * **Note:** This method mutates `array` and is based on\n * [`Array#reverse`](https://mdn.io/Array/reverse).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to modify.\n * @returns {Array} Returns `array`.\n * @example\n *\n * var array = [1, 2, 3];\n *\n * _.reverse(array);\n * // => [3, 2, 1]\n *\n * console.log(array);\n * // => [3, 2, 1]\n */\n function reverse(array) {\n return array == null ? array : nativeReverse.call(array);\n }\n\n /**\n * Creates a slice of `array` from `start` up to, but not including, `end`.\n *\n * **Note:** This method is used instead of\n * [`Array#slice`](https://mdn.io/Array/slice) to ensure dense arrays are\n * returned.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Array\n * @param {Array} array The array to slice.\n * @param {number} [start=0] The start position.\n * @param {number} [end=array.length] The end position.\n * @returns {Array} Returns the slice of `array`.\n */\n function slice(array, start, end) {\n var length = array == null ? 0 : array.length;\n if (!length) {\n return [];\n }\n if (end && typeof end != 'number' && isIterateeCall(array, start, end)) {\n start = 0;\n end = length;\n }\n else {\n start = start == null ? 0 : toInteger(start);\n end = end === undefined ? length : toInteger(end);\n }\n return baseSlice(array, start, end);\n }\n\n /**\n * Uses a binary search to determine the lowest index at which `value`\n * should be inserted into `array` in order to maintain its sort order.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The sorted array to inspect.\n * @param {*} value The value to evaluate.\n * @returns {number} Returns the index at which `value` should be inserted\n * into `array`.\n * @example\n *\n * _.sortedIndex([30, 50], 40);\n * // => 1\n */\n function sortedIndex(array, value) {\n return baseSortedIndex(array, value);\n }\n\n /**\n * This method is like `_.sortedIndex` except that it accepts `iteratee`\n * which is invoked for `value` and each element of `array` to compute their\n * sort ranking. The iteratee is invoked with one argument: (value).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The sorted array to inspect.\n * @param {*} value The value to evaluate.\n * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n * @returns {number} Returns the index at which `value` should be inserted\n * into `array`.\n * @example\n *\n * var objects = [{ 'x': 4 }, { 'x': 5 }];\n *\n * _.sortedIndexBy(objects, { 'x': 4 }, function(o) { return o.x; });\n * // => 0\n *\n * // The `_.property` iteratee shorthand.\n * _.sortedIndexBy(objects, { 'x': 4 }, 'x');\n * // => 0\n */\n function sortedIndexBy(array, value, iteratee) {\n return baseSortedIndexBy(array, value, getIteratee(iteratee, 2));\n }\n\n /**\n * This method is like `_.indexOf` except that it performs a binary\n * search on a sorted `array`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {*} value The value to search for.\n * @returns {number} Returns the index of the matched value, else `-1`.\n * @example\n *\n * _.sortedIndexOf([4, 5, 5, 5, 6], 5);\n * // => 1\n */\n function sortedIndexOf(array, value) {\n var length = array == null ? 0 : array.length;\n if (length) {\n var index = baseSortedIndex(array, value);\n if (index < length && eq(array[index], value)) {\n return index;\n }\n }\n return -1;\n }\n\n /**\n * This method is like `_.sortedIndex` except that it returns the highest\n * index at which `value` should be inserted into `array` in order to\n * maintain its sort order.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Array\n * @param {Array} array The sorted array to inspect.\n * @param {*} value The value to evaluate.\n * @returns {number} Returns the index at which `value` should be inserted\n * into `array`.\n * @example\n *\n * _.sortedLastIndex([4, 5, 5, 5, 6], 5);\n * // => 4\n */\n function sortedLastIndex(array, value) {\n return baseSortedIndex(array, value, true);\n }\n\n /**\n * This method is like `_.sortedLastIndex` except that it accepts `iteratee`\n * which is invoked for `value` and each element of `array` to compute their\n * sort ranking. The iteratee is invoked with one argument: (value).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The sorted array to inspect.\n * @param {*} value The value to evaluate.\n * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n * @returns {number} Returns the index at which `value` should be inserted\n * into `array`.\n * @example\n *\n * var objects = [{ 'x': 4 }, { 'x': 5 }];\n *\n * _.sortedLastIndexBy(objects, { 'x': 4 }, function(o) { return o.x; });\n * // => 1\n *\n * // The `_.property` iteratee shorthand.\n * _.sortedLastIndexBy(objects, { 'x': 4 }, 'x');\n * // => 1\n */\n function sortedLastIndexBy(array, value, iteratee) {\n return baseSortedIndexBy(array, value, getIteratee(iteratee, 2), true);\n }\n\n /**\n * This method is like `_.lastIndexOf` except that it performs a binary\n * search on a sorted `array`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {*} value The value to search for.\n * @returns {number} Returns the index of the matched value, else `-1`.\n * @example\n *\n * _.sortedLastIndexOf([4, 5, 5, 5, 6], 5);\n * // => 3\n */\n function sortedLastIndexOf(array, value) {\n var length = array == null ? 0 : array.length;\n if (length) {\n var index = baseSortedIndex(array, value, true) - 1;\n if (eq(array[index], value)) {\n return index;\n }\n }\n return -1;\n }\n\n /**\n * This method is like `_.uniq` except that it's designed and optimized\n * for sorted arrays.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @returns {Array} Returns the new duplicate free array.\n * @example\n *\n * _.sortedUniq([1, 1, 2]);\n * // => [1, 2]\n */\n function sortedUniq(array) {\n return (array && array.length)\n ? baseSortedUniq(array)\n : [];\n }\n\n /**\n * This method is like `_.uniqBy` except that it's designed and optimized\n * for sorted arrays.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {Function} [iteratee] The iteratee invoked per element.\n * @returns {Array} Returns the new duplicate free array.\n * @example\n *\n * _.sortedUniqBy([1.1, 1.2, 2.3, 2.4], Math.floor);\n * // => [1.1, 2.3]\n */\n function sortedUniqBy(array, iteratee) {\n return (array && array.length)\n ? baseSortedUniq(array, getIteratee(iteratee, 2))\n : [];\n }\n\n /**\n * Gets all but the first element of `array`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to query.\n * @returns {Array} Returns the slice of `array`.\n * @example\n *\n * _.tail([1, 2, 3]);\n * // => [2, 3]\n */\n function tail(array) {\n var length = array == null ? 0 : array.length;\n return length ? baseSlice(array, 1, length) : [];\n }\n\n /**\n * Creates a slice of `array` with `n` elements taken from the beginning.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to query.\n * @param {number} [n=1] The number of elements to take.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {Array} Returns the slice of `array`.\n * @example\n *\n * _.take([1, 2, 3]);\n * // => [1]\n *\n * _.take([1, 2, 3], 2);\n * // => [1, 2]\n *\n * _.take([1, 2, 3], 5);\n * // => [1, 2, 3]\n *\n * _.take([1, 2, 3], 0);\n * // => []\n */\n function take(array, n, guard) {\n if (!(array && array.length)) {\n return [];\n }\n n = (guard || n === undefined) ? 1 : toInteger(n);\n return baseSlice(array, 0, n < 0 ? 0 : n);\n }\n\n /**\n * Creates a slice of `array` with `n` elements taken from the end.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Array\n * @param {Array} array The array to query.\n * @param {number} [n=1] The number of elements to take.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {Array} Returns the slice of `array`.\n * @example\n *\n * _.takeRight([1, 2, 3]);\n * // => [3]\n *\n * _.takeRight([1, 2, 3], 2);\n * // => [2, 3]\n *\n * _.takeRight([1, 2, 3], 5);\n * // => [1, 2, 3]\n *\n * _.takeRight([1, 2, 3], 0);\n * // => []\n */\n function takeRight(array, n, guard) {\n var length = array == null ? 0 : array.length;\n if (!length) {\n return [];\n }\n n = (guard || n === undefined) ? 1 : toInteger(n);\n n = length - n;\n return baseSlice(array, n < 0 ? 0 : n, length);\n }\n\n /**\n * Creates a slice of `array` with elements taken from the end. Elements are\n * taken until `predicate` returns falsey. The predicate is invoked with\n * three arguments: (value, index, array).\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Array\n * @param {Array} array The array to query.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @returns {Array} Returns the slice of `array`.\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'active': true },\n * { 'user': 'fred', 'active': false },\n * { 'user': 'pebbles', 'active': false }\n * ];\n *\n * _.takeRightWhile(users, function(o) { return !o.active; });\n * // => objects for ['fred', 'pebbles']\n *\n * // The `_.matches` iteratee shorthand.\n * _.takeRightWhile(users, { 'user': 'pebbles', 'active': false });\n * // => objects for ['pebbles']\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.takeRightWhile(users, ['active', false]);\n * // => objects for ['fred', 'pebbles']\n *\n * // The `_.property` iteratee shorthand.\n * _.takeRightWhile(users, 'active');\n * // => []\n */\n function takeRightWhile(array, predicate) {\n return (array && array.length)\n ? baseWhile(array, getIteratee(predicate, 3), false, true)\n : [];\n }\n\n /**\n * Creates a slice of `array` with elements taken from the beginning. Elements\n * are taken until `predicate` returns falsey. The predicate is invoked with\n * three arguments: (value, index, array).\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Array\n * @param {Array} array The array to query.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @returns {Array} Returns the slice of `array`.\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'active': false },\n * { 'user': 'fred', 'active': false },\n * { 'user': 'pebbles', 'active': true }\n * ];\n *\n * _.takeWhile(users, function(o) { return !o.active; });\n * // => objects for ['barney', 'fred']\n *\n * // The `_.matches` iteratee shorthand.\n * _.takeWhile(users, { 'user': 'barney', 'active': false });\n * // => objects for ['barney']\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.takeWhile(users, ['active', false]);\n * // => objects for ['barney', 'fred']\n *\n * // The `_.property` iteratee shorthand.\n * _.takeWhile(users, 'active');\n * // => []\n */\n function takeWhile(array, predicate) {\n return (array && array.length)\n ? baseWhile(array, getIteratee(predicate, 3))\n : [];\n }\n\n /**\n * Creates an array of unique values, in order, from all given arrays using\n * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * for equality comparisons.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {...Array} [arrays] The arrays to inspect.\n * @returns {Array} Returns the new array of combined values.\n * @example\n *\n * _.union([2], [1, 2]);\n * // => [2, 1]\n */\n var union = baseRest(function(arrays) {\n return baseUniq(baseFlatten(arrays, 1, isArrayLikeObject, true));\n });\n\n /**\n * This method is like `_.union` except that it accepts `iteratee` which is\n * invoked for each element of each `arrays` to generate the criterion by\n * which uniqueness is computed. Result values are chosen from the first\n * array in which the value occurs. The iteratee is invoked with one argument:\n * (value).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {...Array} [arrays] The arrays to inspect.\n * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n * @returns {Array} Returns the new array of combined values.\n * @example\n *\n * _.unionBy([2.1], [1.2, 2.3], Math.floor);\n * // => [2.1, 1.2]\n *\n * // The `_.property` iteratee shorthand.\n * _.unionBy([{ 'x': 1 }], [{ 'x': 2 }, { 'x': 1 }], 'x');\n * // => [{ 'x': 1 }, { 'x': 2 }]\n */\n var unionBy = baseRest(function(arrays) {\n var iteratee = last(arrays);\n if (isArrayLikeObject(iteratee)) {\n iteratee = undefined;\n }\n return baseUniq(baseFlatten(arrays, 1, isArrayLikeObject, true), getIteratee(iteratee, 2));\n });\n\n /**\n * This method is like `_.union` except that it accepts `comparator` which\n * is invoked to compare elements of `arrays`. Result values are chosen from\n * the first array in which the value occurs. The comparator is invoked\n * with two arguments: (arrVal, othVal).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {...Array} [arrays] The arrays to inspect.\n * @param {Function} [comparator] The comparator invoked per element.\n * @returns {Array} Returns the new array of combined values.\n * @example\n *\n * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }];\n * var others = [{ 'x': 1, 'y': 1 }, { 'x': 1, 'y': 2 }];\n *\n * _.unionWith(objects, others, _.isEqual);\n * // => [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }, { 'x': 1, 'y': 1 }]\n */\n var unionWith = baseRest(function(arrays) {\n var comparator = last(arrays);\n comparator = typeof comparator == 'function' ? comparator : undefined;\n return baseUniq(baseFlatten(arrays, 1, isArrayLikeObject, true), undefined, comparator);\n });\n\n /**\n * Creates a duplicate-free version of an array, using\n * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * for equality comparisons, in which only the first occurrence of each element\n * is kept. The order of result values is determined by the order they occur\n * in the array.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @returns {Array} Returns the new duplicate free array.\n * @example\n *\n * _.uniq([2, 1, 2]);\n * // => [2, 1]\n */\n function uniq(array) {\n return (array && array.length) ? baseUniq(array) : [];\n }\n\n /**\n * This method is like `_.uniq` except that it accepts `iteratee` which is\n * invoked for each element in `array` to generate the criterion by which\n * uniqueness is computed. The order of result values is determined by the\n * order they occur in the array. The iteratee is invoked with one argument:\n * (value).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n * @returns {Array} Returns the new duplicate free array.\n * @example\n *\n * _.uniqBy([2.1, 1.2, 2.3], Math.floor);\n * // => [2.1, 1.2]\n *\n * // The `_.property` iteratee shorthand.\n * _.uniqBy([{ 'x': 1 }, { 'x': 2 }, { 'x': 1 }], 'x');\n * // => [{ 'x': 1 }, { 'x': 2 }]\n */\n function uniqBy(array, iteratee) {\n return (array && array.length) ? baseUniq(array, getIteratee(iteratee, 2)) : [];\n }\n\n /**\n * This method is like `_.uniq` except that it accepts `comparator` which\n * is invoked to compare elements of `array`. The order of result values is\n * determined by the order they occur in the array.The comparator is invoked\n * with two arguments: (arrVal, othVal).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {Function} [comparator] The comparator invoked per element.\n * @returns {Array} Returns the new duplicate free array.\n * @example\n *\n * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }, { 'x': 1, 'y': 2 }];\n *\n * _.uniqWith(objects, _.isEqual);\n * // => [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }]\n */\n function uniqWith(array, comparator) {\n comparator = typeof comparator == 'function' ? comparator : undefined;\n return (array && array.length) ? baseUniq(array, undefined, comparator) : [];\n }\n\n /**\n * This method is like `_.zip` except that it accepts an array of grouped\n * elements and creates an array regrouping the elements to their pre-zip\n * configuration.\n *\n * @static\n * @memberOf _\n * @since 1.2.0\n * @category Array\n * @param {Array} array The array of grouped elements to process.\n * @returns {Array} Returns the new array of regrouped elements.\n * @example\n *\n * var zipped = _.zip(['a', 'b'], [1, 2], [true, false]);\n * // => [['a', 1, true], ['b', 2, false]]\n *\n * _.unzip(zipped);\n * // => [['a', 'b'], [1, 2], [true, false]]\n */\n function unzip(array) {\n if (!(array && array.length)) {\n return [];\n }\n var length = 0;\n array = arrayFilter(array, function(group) {\n if (isArrayLikeObject(group)) {\n length = nativeMax(group.length, length);\n return true;\n }\n });\n return baseTimes(length, function(index) {\n return arrayMap(array, baseProperty(index));\n });\n }\n\n /**\n * This method is like `_.unzip` except that it accepts `iteratee` to specify\n * how regrouped values should be combined. The iteratee is invoked with the\n * elements of each group: (...group).\n *\n * @static\n * @memberOf _\n * @since 3.8.0\n * @category Array\n * @param {Array} array The array of grouped elements to process.\n * @param {Function} [iteratee=_.identity] The function to combine\n * regrouped values.\n * @returns {Array} Returns the new array of regrouped elements.\n * @example\n *\n * var zipped = _.zip([1, 2], [10, 20], [100, 200]);\n * // => [[1, 10, 100], [2, 20, 200]]\n *\n * _.unzipWith(zipped, _.add);\n * // => [3, 30, 300]\n */\n function unzipWith(array, iteratee) {\n if (!(array && array.length)) {\n return [];\n }\n var result = unzip(array);\n if (iteratee == null) {\n return result;\n }\n return arrayMap(result, function(group) {\n return apply(iteratee, undefined, group);\n });\n }\n\n /**\n * Creates an array excluding all given values using\n * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * for equality comparisons.\n *\n * **Note:** Unlike `_.pull`, this method returns a new array.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {...*} [values] The values to exclude.\n * @returns {Array} Returns the new array of filtered values.\n * @see _.difference, _.xor\n * @example\n *\n * _.without([2, 1, 2, 3], 1, 2);\n * // => [3]\n */\n var without = baseRest(function(array, values) {\n return isArrayLikeObject(array)\n ? baseDifference(array, values)\n : [];\n });\n\n /**\n * Creates an array of unique values that is the\n * [symmetric difference](https://en.wikipedia.org/wiki/Symmetric_difference)\n * of the given arrays. The order of result values is determined by the order\n * they occur in the arrays.\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Array\n * @param {...Array} [arrays] The arrays to inspect.\n * @returns {Array} Returns the new array of filtered values.\n * @see _.difference, _.without\n * @example\n *\n * _.xor([2, 1], [2, 3]);\n * // => [1, 3]\n */\n var xor = baseRest(function(arrays) {\n return baseXor(arrayFilter(arrays, isArrayLikeObject));\n });\n\n /**\n * This method is like `_.xor` except that it accepts `iteratee` which is\n * invoked for each element of each `arrays` to generate the criterion by\n * which by which they're compared. The order of result values is determined\n * by the order they occur in the arrays. The iteratee is invoked with one\n * argument: (value).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {...Array} [arrays] The arrays to inspect.\n * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n * @returns {Array} Returns the new array of filtered values.\n * @example\n *\n * _.xorBy([2.1, 1.2], [2.3, 3.4], Math.floor);\n * // => [1.2, 3.4]\n *\n * // The `_.property` iteratee shorthand.\n * _.xorBy([{ 'x': 1 }], [{ 'x': 2 }, { 'x': 1 }], 'x');\n * // => [{ 'x': 2 }]\n */\n var xorBy = baseRest(function(arrays) {\n var iteratee = last(arrays);\n if (isArrayLikeObject(iteratee)) {\n iteratee = undefined;\n }\n return baseXor(arrayFilter(arrays, isArrayLikeObject), getIteratee(iteratee, 2));\n });\n\n /**\n * This method is like `_.xor` except that it accepts `comparator` which is\n * invoked to compare elements of `arrays`. The order of result values is\n * determined by the order they occur in the arrays. The comparator is invoked\n * with two arguments: (arrVal, othVal).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {...Array} [arrays] The arrays to inspect.\n * @param {Function} [comparator] The comparator invoked per element.\n * @returns {Array} Returns the new array of filtered values.\n * @example\n *\n * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }];\n * var others = [{ 'x': 1, 'y': 1 }, { 'x': 1, 'y': 2 }];\n *\n * _.xorWith(objects, others, _.isEqual);\n * // => [{ 'x': 2, 'y': 1 }, { 'x': 1, 'y': 1 }]\n */\n var xorWith = baseRest(function(arrays) {\n var comparator = last(arrays);\n comparator = typeof comparator == 'function' ? comparator : undefined;\n return baseXor(arrayFilter(arrays, isArrayLikeObject), undefined, comparator);\n });\n\n /**\n * Creates an array of grouped elements, the first of which contains the\n * first elements of the given arrays, the second of which contains the\n * second elements of the given arrays, and so on.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {...Array} [arrays] The arrays to process.\n * @returns {Array} Returns the new array of grouped elements.\n * @example\n *\n * _.zip(['a', 'b'], [1, 2], [true, false]);\n * // => [['a', 1, true], ['b', 2, false]]\n */\n var zip = baseRest(unzip);\n\n /**\n * This method is like `_.fromPairs` except that it accepts two arrays,\n * one of property identifiers and one of corresponding values.\n *\n * @static\n * @memberOf _\n * @since 0.4.0\n * @category Array\n * @param {Array} [props=[]] The property identifiers.\n * @param {Array} [values=[]] The property values.\n * @returns {Object} Returns the new object.\n * @example\n *\n * _.zipObject(['a', 'b'], [1, 2]);\n * // => { 'a': 1, 'b': 2 }\n */\n function zipObject(props, values) {\n return baseZipObject(props || [], values || [], assignValue);\n }\n\n /**\n * This method is like `_.zipObject` except that it supports property paths.\n *\n * @static\n * @memberOf _\n * @since 4.1.0\n * @category Array\n * @param {Array} [props=[]] The property identifiers.\n * @param {Array} [values=[]] The property values.\n * @returns {Object} Returns the new object.\n * @example\n *\n * _.zipObjectDeep(['a.b[0].c', 'a.b[1].d'], [1, 2]);\n * // => { 'a': { 'b': [{ 'c': 1 }, { 'd': 2 }] } }\n */\n function zipObjectDeep(props, values) {\n return baseZipObject(props || [], values || [], baseSet);\n }\n\n /**\n * This method is like `_.zip` except that it accepts `iteratee` to specify\n * how grouped values should be combined. The iteratee is invoked with the\n * elements of each group: (...group).\n *\n * @static\n * @memberOf _\n * @since 3.8.0\n * @category Array\n * @param {...Array} [arrays] The arrays to process.\n * @param {Function} [iteratee=_.identity] The function to combine\n * grouped values.\n * @returns {Array} Returns the new array of grouped elements.\n * @example\n *\n * _.zipWith([1, 2], [10, 20], [100, 200], function(a, b, c) {\n * return a + b + c;\n * });\n * // => [111, 222]\n */\n var zipWith = baseRest(function(arrays) {\n var length = arrays.length,\n iteratee = length > 1 ? arrays[length - 1] : undefined;\n\n iteratee = typeof iteratee == 'function' ? (arrays.pop(), iteratee) : undefined;\n return unzipWith(arrays, iteratee);\n });\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Creates a `lodash` wrapper instance that wraps `value` with explicit method\n * chain sequences enabled. The result of such sequences must be unwrapped\n * with `_#value`.\n *\n * @static\n * @memberOf _\n * @since 1.3.0\n * @category Seq\n * @param {*} value The value to wrap.\n * @returns {Object} Returns the new `lodash` wrapper instance.\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'age': 36 },\n * { 'user': 'fred', 'age': 40 },\n * { 'user': 'pebbles', 'age': 1 }\n * ];\n *\n * var youngest = _\n * .chain(users)\n * .sortBy('age')\n * .map(function(o) {\n * return o.user + ' is ' + o.age;\n * })\n * .head()\n * .value();\n * // => 'pebbles is 1'\n */\n function chain(value) {\n var result = lodash(value);\n result.__chain__ = true;\n return result;\n }\n\n /**\n * This method invokes `interceptor` and returns `value`. The interceptor\n * is invoked with one argument; (value). The purpose of this method is to\n * \"tap into\" a method chain sequence in order to modify intermediate results.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Seq\n * @param {*} value The value to provide to `interceptor`.\n * @param {Function} interceptor The function to invoke.\n * @returns {*} Returns `value`.\n * @example\n *\n * _([1, 2, 3])\n * .tap(function(array) {\n * // Mutate input array.\n * array.pop();\n * })\n * .reverse()\n * .value();\n * // => [2, 1]\n */\n function tap(value, interceptor) {\n interceptor(value);\n return value;\n }\n\n /**\n * This method is like `_.tap` except that it returns the result of `interceptor`.\n * The purpose of this method is to \"pass thru\" values replacing intermediate\n * results in a method chain sequence.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Seq\n * @param {*} value The value to provide to `interceptor`.\n * @param {Function} interceptor The function to invoke.\n * @returns {*} Returns the result of `interceptor`.\n * @example\n *\n * _(' abc ')\n * .chain()\n * .trim()\n * .thru(function(value) {\n * return [value];\n * })\n * .value();\n * // => ['abc']\n */\n function thru(value, interceptor) {\n return interceptor(value);\n }\n\n /**\n * This method is the wrapper version of `_.at`.\n *\n * @name at\n * @memberOf _\n * @since 1.0.0\n * @category Seq\n * @param {...(string|string[])} [paths] The property paths to pick.\n * @returns {Object} Returns the new `lodash` wrapper instance.\n * @example\n *\n * var object = { 'a': [{ 'b': { 'c': 3 } }, 4] };\n *\n * _(object).at(['a[0].b.c', 'a[1]']).value();\n * // => [3, 4]\n */\n var wrapperAt = flatRest(function(paths) {\n var length = paths.length,\n start = length ? paths[0] : 0,\n value = this.__wrapped__,\n interceptor = function(object) { return baseAt(object, paths); };\n\n if (length > 1 || this.__actions__.length ||\n !(value instanceof LazyWrapper) || !isIndex(start)) {\n return this.thru(interceptor);\n }\n value = value.slice(start, +start + (length ? 1 : 0));\n value.__actions__.push({\n 'func': thru,\n 'args': [interceptor],\n 'thisArg': undefined\n });\n return new LodashWrapper(value, this.__chain__).thru(function(array) {\n if (length && !array.length) {\n array.push(undefined);\n }\n return array;\n });\n });\n\n /**\n * Creates a `lodash` wrapper instance with explicit method chain sequences enabled.\n *\n * @name chain\n * @memberOf _\n * @since 0.1.0\n * @category Seq\n * @returns {Object} Returns the new `lodash` wrapper instance.\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'age': 36 },\n * { 'user': 'fred', 'age': 40 }\n * ];\n *\n * // A sequence without explicit chaining.\n * _(users).head();\n * // => { 'user': 'barney', 'age': 36 }\n *\n * // A sequence with explicit chaining.\n * _(users)\n * .chain()\n * .head()\n * .pick('user')\n * .value();\n * // => { 'user': 'barney' }\n */\n function wrapperChain() {\n return chain(this);\n }\n\n /**\n * Executes the chain sequence and returns the wrapped result.\n *\n * @name commit\n * @memberOf _\n * @since 3.2.0\n * @category Seq\n * @returns {Object} Returns the new `lodash` wrapper instance.\n * @example\n *\n * var array = [1, 2];\n * var wrapped = _(array).push(3);\n *\n * console.log(array);\n * // => [1, 2]\n *\n * wrapped = wrapped.commit();\n * console.log(array);\n * // => [1, 2, 3]\n *\n * wrapped.last();\n * // => 3\n *\n * console.log(array);\n * // => [1, 2, 3]\n */\n function wrapperCommit() {\n return new LodashWrapper(this.value(), this.__chain__);\n }\n\n /**\n * Gets the next value on a wrapped object following the\n * [iterator protocol](https://mdn.io/iteration_protocols#iterator).\n *\n * @name next\n * @memberOf _\n * @since 4.0.0\n * @category Seq\n * @returns {Object} Returns the next iterator value.\n * @example\n *\n * var wrapped = _([1, 2]);\n *\n * wrapped.next();\n * // => { 'done': false, 'value': 1 }\n *\n * wrapped.next();\n * // => { 'done': false, 'value': 2 }\n *\n * wrapped.next();\n * // => { 'done': true, 'value': undefined }\n */\n function wrapperNext() {\n if (this.__values__ === undefined) {\n this.__values__ = toArray(this.value());\n }\n var done = this.__index__ >= this.__values__.length,\n value = done ? undefined : this.__values__[this.__index__++];\n\n return { 'done': done, 'value': value };\n }\n\n /**\n * Enables the wrapper to be iterable.\n *\n * @name Symbol.iterator\n * @memberOf _\n * @since 4.0.0\n * @category Seq\n * @returns {Object} Returns the wrapper object.\n * @example\n *\n * var wrapped = _([1, 2]);\n *\n * wrapped[Symbol.iterator]() === wrapped;\n * // => true\n *\n * Array.from(wrapped);\n * // => [1, 2]\n */\n function wrapperToIterator() {\n return this;\n }\n\n /**\n * Creates a clone of the chain sequence planting `value` as the wrapped value.\n *\n * @name plant\n * @memberOf _\n * @since 3.2.0\n * @category Seq\n * @param {*} value The value to plant.\n * @returns {Object} Returns the new `lodash` wrapper instance.\n * @example\n *\n * function square(n) {\n * return n * n;\n * }\n *\n * var wrapped = _([1, 2]).map(square);\n * var other = wrapped.plant([3, 4]);\n *\n * other.value();\n * // => [9, 16]\n *\n * wrapped.value();\n * // => [1, 4]\n */\n function wrapperPlant(value) {\n var result,\n parent = this;\n\n while (parent instanceof baseLodash) {\n var clone = wrapperClone(parent);\n clone.__index__ = 0;\n clone.__values__ = undefined;\n if (result) {\n previous.__wrapped__ = clone;\n } else {\n result = clone;\n }\n var previous = clone;\n parent = parent.__wrapped__;\n }\n previous.__wrapped__ = value;\n return result;\n }\n\n /**\n * This method is the wrapper version of `_.reverse`.\n *\n * **Note:** This method mutates the wrapped array.\n *\n * @name reverse\n * @memberOf _\n * @since 0.1.0\n * @category Seq\n * @returns {Object} Returns the new `lodash` wrapper instance.\n * @example\n *\n * var array = [1, 2, 3];\n *\n * _(array).reverse().value()\n * // => [3, 2, 1]\n *\n * console.log(array);\n * // => [3, 2, 1]\n */\n function wrapperReverse() {\n var value = this.__wrapped__;\n if (value instanceof LazyWrapper) {\n var wrapped = value;\n if (this.__actions__.length) {\n wrapped = new LazyWrapper(this);\n }\n wrapped = wrapped.reverse();\n wrapped.__actions__.push({\n 'func': thru,\n 'args': [reverse],\n 'thisArg': undefined\n });\n return new LodashWrapper(wrapped, this.__chain__);\n }\n return this.thru(reverse);\n }\n\n /**\n * Executes the chain sequence to resolve the unwrapped value.\n *\n * @name value\n * @memberOf _\n * @since 0.1.0\n * @alias toJSON, valueOf\n * @category Seq\n * @returns {*} Returns the resolved unwrapped value.\n * @example\n *\n * _([1, 2, 3]).value();\n * // => [1, 2, 3]\n */\n function wrapperValue() {\n return baseWrapperValue(this.__wrapped__, this.__actions__);\n }\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Creates an object composed of keys generated from the results of running\n * each element of `collection` thru `iteratee`. The corresponding value of\n * each key is the number of times the key was returned by `iteratee`. The\n * iteratee is invoked with one argument: (value).\n *\n * @static\n * @memberOf _\n * @since 0.5.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity] The iteratee to transform keys.\n * @returns {Object} Returns the composed aggregate object.\n * @example\n *\n * _.countBy([6.1, 4.2, 6.3], Math.floor);\n * // => { '4': 1, '6': 2 }\n *\n * // The `_.property` iteratee shorthand.\n * _.countBy(['one', 'two', 'three'], 'length');\n * // => { '3': 2, '5': 1 }\n */\n var countBy = createAggregator(function(result, value, key) {\n if (hasOwnProperty.call(result, key)) {\n ++result[key];\n } else {\n baseAssignValue(result, key, 1);\n }\n });\n\n /**\n * Checks if `predicate` returns truthy for **all** elements of `collection`.\n * Iteration is stopped once `predicate` returns falsey. The predicate is\n * invoked with three arguments: (value, index|key, collection).\n *\n * **Note:** This method returns `true` for\n * [empty collections](https://en.wikipedia.org/wiki/Empty_set) because\n * [everything is true](https://en.wikipedia.org/wiki/Vacuous_truth) of\n * elements of empty collections.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {boolean} Returns `true` if all elements pass the predicate check,\n * else `false`.\n * @example\n *\n * _.every([true, 1, null, 'yes'], Boolean);\n * // => false\n *\n * var users = [\n * { 'user': 'barney', 'age': 36, 'active': false },\n * { 'user': 'fred', 'age': 40, 'active': false }\n * ];\n *\n * // The `_.matches` iteratee shorthand.\n * _.every(users, { 'user': 'barney', 'active': false });\n * // => false\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.every(users, ['active', false]);\n * // => true\n *\n * // The `_.property` iteratee shorthand.\n * _.every(users, 'active');\n * // => false\n */\n function every(collection, predicate, guard) {\n var func = isArray(collection) ? arrayEvery : baseEvery;\n if (guard && isIterateeCall(collection, predicate, guard)) {\n predicate = undefined;\n }\n return func(collection, getIteratee(predicate, 3));\n }\n\n /**\n * Iterates over elements of `collection`, returning an array of all elements\n * `predicate` returns truthy for. The predicate is invoked with three\n * arguments: (value, index|key, collection).\n *\n * **Note:** Unlike `_.remove`, this method returns a new array.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @returns {Array} Returns the new filtered array.\n * @see _.reject\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'age': 36, 'active': true },\n * { 'user': 'fred', 'age': 40, 'active': false }\n * ];\n *\n * _.filter(users, function(o) { return !o.active; });\n * // => objects for ['fred']\n *\n * // The `_.matches` iteratee shorthand.\n * _.filter(users, { 'age': 36, 'active': true });\n * // => objects for ['barney']\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.filter(users, ['active', false]);\n * // => objects for ['fred']\n *\n * // The `_.property` iteratee shorthand.\n * _.filter(users, 'active');\n * // => objects for ['barney']\n */\n function filter(collection, predicate) {\n var func = isArray(collection) ? arrayFilter : baseFilter;\n return func(collection, getIteratee(predicate, 3));\n }\n\n /**\n * Iterates over elements of `collection`, returning the first element\n * `predicate` returns truthy for. The predicate is invoked with three\n * arguments: (value, index|key, collection).\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to inspect.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @param {number} [fromIndex=0] The index to search from.\n * @returns {*} Returns the matched element, else `undefined`.\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'age': 36, 'active': true },\n * { 'user': 'fred', 'age': 40, 'active': false },\n * { 'user': 'pebbles', 'age': 1, 'active': true }\n * ];\n *\n * _.find(users, function(o) { return o.age < 40; });\n * // => object for 'barney'\n *\n * // The `_.matches` iteratee shorthand.\n * _.find(users, { 'age': 1, 'active': true });\n * // => object for 'pebbles'\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.find(users, ['active', false]);\n * // => object for 'fred'\n *\n * // The `_.property` iteratee shorthand.\n * _.find(users, 'active');\n * // => object for 'barney'\n */\n var find = createFind(findIndex);\n\n /**\n * This method is like `_.find` except that it iterates over elements of\n * `collection` from right to left.\n *\n * @static\n * @memberOf _\n * @since 2.0.0\n * @category Collection\n * @param {Array|Object} collection The collection to inspect.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @param {number} [fromIndex=collection.length-1] The index to search from.\n * @returns {*} Returns the matched element, else `undefined`.\n * @example\n *\n * _.findLast([1, 2, 3, 4], function(n) {\n * return n % 2 == 1;\n * });\n * // => 3\n */\n var findLast = createFind(findLastIndex);\n\n /**\n * Creates a flattened array of values by running each element in `collection`\n * thru `iteratee` and flattening the mapped results. The iteratee is invoked\n * with three arguments: (value, index|key, collection).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Array} Returns the new flattened array.\n * @example\n *\n * function duplicate(n) {\n * return [n, n];\n * }\n *\n * _.flatMap([1, 2], duplicate);\n * // => [1, 1, 2, 2]\n */\n function flatMap(collection, iteratee) {\n return baseFlatten(map(collection, iteratee), 1);\n }\n\n /**\n * This method is like `_.flatMap` except that it recursively flattens the\n * mapped results.\n *\n * @static\n * @memberOf _\n * @since 4.7.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Array} Returns the new flattened array.\n * @example\n *\n * function duplicate(n) {\n * return [[[n, n]]];\n * }\n *\n * _.flatMapDeep([1, 2], duplicate);\n * // => [1, 1, 2, 2]\n */\n function flatMapDeep(collection, iteratee) {\n return baseFlatten(map(collection, iteratee), INFINITY);\n }\n\n /**\n * This method is like `_.flatMap` except that it recursively flattens the\n * mapped results up to `depth` times.\n *\n * @static\n * @memberOf _\n * @since 4.7.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @param {number} [depth=1] The maximum recursion depth.\n * @returns {Array} Returns the new flattened array.\n * @example\n *\n * function duplicate(n) {\n * return [[[n, n]]];\n * }\n *\n * _.flatMapDepth([1, 2], duplicate, 2);\n * // => [[1, 1], [2, 2]]\n */\n function flatMapDepth(collection, iteratee, depth) {\n depth = depth === undefined ? 1 : toInteger(depth);\n return baseFlatten(map(collection, iteratee), depth);\n }\n\n /**\n * Iterates over elements of `collection` and invokes `iteratee` for each element.\n * The iteratee is invoked with three arguments: (value, index|key, collection).\n * Iteratee functions may exit iteration early by explicitly returning `false`.\n *\n * **Note:** As with other \"Collections\" methods, objects with a \"length\"\n * property are iterated like arrays. To avoid this behavior use `_.forIn`\n * or `_.forOwn` for object iteration.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @alias each\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Array|Object} Returns `collection`.\n * @see _.forEachRight\n * @example\n *\n * _.forEach([1, 2], function(value) {\n * console.log(value);\n * });\n * // => Logs `1` then `2`.\n *\n * _.forEach({ 'a': 1, 'b': 2 }, function(value, key) {\n * console.log(key);\n * });\n * // => Logs 'a' then 'b' (iteration order is not guaranteed).\n */\n function forEach(collection, iteratee) {\n var func = isArray(collection) ? arrayEach : baseEach;\n return func(collection, getIteratee(iteratee, 3));\n }\n\n /**\n * This method is like `_.forEach` except that it iterates over elements of\n * `collection` from right to left.\n *\n * @static\n * @memberOf _\n * @since 2.0.0\n * @alias eachRight\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Array|Object} Returns `collection`.\n * @see _.forEach\n * @example\n *\n * _.forEachRight([1, 2], function(value) {\n * console.log(value);\n * });\n * // => Logs `2` then `1`.\n */\n function forEachRight(collection, iteratee) {\n var func = isArray(collection) ? arrayEachRight : baseEachRight;\n return func(collection, getIteratee(iteratee, 3));\n }\n\n /**\n * Creates an object composed of keys generated from the results of running\n * each element of `collection` thru `iteratee`. The order of grouped values\n * is determined by the order they occur in `collection`. The corresponding\n * value of each key is an array of elements responsible for generating the\n * key. The iteratee is invoked with one argument: (value).\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity] The iteratee to transform keys.\n * @returns {Object} Returns the composed aggregate object.\n * @example\n *\n * _.groupBy([6.1, 4.2, 6.3], Math.floor);\n * // => { '4': [4.2], '6': [6.1, 6.3] }\n *\n * // The `_.property` iteratee shorthand.\n * _.groupBy(['one', 'two', 'three'], 'length');\n * // => { '3': ['one', 'two'], '5': ['three'] }\n */\n var groupBy = createAggregator(function(result, value, key) {\n if (hasOwnProperty.call(result, key)) {\n result[key].push(value);\n } else {\n baseAssignValue(result, key, [value]);\n }\n });\n\n /**\n * Checks if `value` is in `collection`. If `collection` is a string, it's\n * checked for a substring of `value`, otherwise\n * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * is used for equality comparisons. If `fromIndex` is negative, it's used as\n * the offset from the end of `collection`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object|string} collection The collection to inspect.\n * @param {*} value The value to search for.\n * @param {number} [fromIndex=0] The index to search from.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.reduce`.\n * @returns {boolean} Returns `true` if `value` is found, else `false`.\n * @example\n *\n * _.includes([1, 2, 3], 1);\n * // => true\n *\n * _.includes([1, 2, 3], 1, 2);\n * // => false\n *\n * _.includes({ 'a': 1, 'b': 2 }, 1);\n * // => true\n *\n * _.includes('abcd', 'bc');\n * // => true\n */\n function includes(collection, value, fromIndex, guard) {\n collection = isArrayLike(collection) ? collection : values(collection);\n fromIndex = (fromIndex && !guard) ? toInteger(fromIndex) : 0;\n\n var length = collection.length;\n if (fromIndex < 0) {\n fromIndex = nativeMax(length + fromIndex, 0);\n }\n return isString(collection)\n ? (fromIndex <= length && collection.indexOf(value, fromIndex) > -1)\n : (!!length && baseIndexOf(collection, value, fromIndex) > -1);\n }\n\n /**\n * Invokes the method at `path` of each element in `collection`, returning\n * an array of the results of each invoked method. Any additional arguments\n * are provided to each invoked method. If `path` is a function, it's invoked\n * for, and `this` bound to, each element in `collection`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Array|Function|string} path The path of the method to invoke or\n * the function invoked per iteration.\n * @param {...*} [args] The arguments to invoke each method with.\n * @returns {Array} Returns the array of results.\n * @example\n *\n * _.invokeMap([[5, 1, 7], [3, 2, 1]], 'sort');\n * // => [[1, 5, 7], [1, 2, 3]]\n *\n * _.invokeMap([123, 456], String.prototype.split, '');\n * // => [['1', '2', '3'], ['4', '5', '6']]\n */\n var invokeMap = baseRest(function(collection, path, args) {\n var index = -1,\n isFunc = typeof path == 'function',\n result = isArrayLike(collection) ? Array(collection.length) : [];\n\n baseEach(collection, function(value) {\n result[++index] = isFunc ? apply(path, value, args) : baseInvoke(value, path, args);\n });\n return result;\n });\n\n /**\n * Creates an object composed of keys generated from the results of running\n * each element of `collection` thru `iteratee`. The corresponding value of\n * each key is the last element responsible for generating the key. The\n * iteratee is invoked with one argument: (value).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity] The iteratee to transform keys.\n * @returns {Object} Returns the composed aggregate object.\n * @example\n *\n * var array = [\n * { 'dir': 'left', 'code': 97 },\n * { 'dir': 'right', 'code': 100 }\n * ];\n *\n * _.keyBy(array, function(o) {\n * return String.fromCharCode(o.code);\n * });\n * // => { 'a': { 'dir': 'left', 'code': 97 }, 'd': { 'dir': 'right', 'code': 100 } }\n *\n * _.keyBy(array, 'dir');\n * // => { 'left': { 'dir': 'left', 'code': 97 }, 'right': { 'dir': 'right', 'code': 100 } }\n */\n var keyBy = createAggregator(function(result, value, key) {\n baseAssignValue(result, key, value);\n });\n\n /**\n * Creates an array of values by running each element in `collection` thru\n * `iteratee`. The iteratee is invoked with three arguments:\n * (value, index|key, collection).\n *\n * Many lodash methods are guarded to work as iteratees for methods like\n * `_.every`, `_.filter`, `_.map`, `_.mapValues`, `_.reject`, and `_.some`.\n *\n * The guarded methods are:\n * `ary`, `chunk`, `curry`, `curryRight`, `drop`, `dropRight`, `every`,\n * `fill`, `invert`, `parseInt`, `random`, `range`, `rangeRight`, `repeat`,\n * `sampleSize`, `slice`, `some`, `sortBy`, `split`, `take`, `takeRight`,\n * `template`, `trim`, `trimEnd`, `trimStart`, and `words`\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Array} Returns the new mapped array.\n * @example\n *\n * function square(n) {\n * return n * n;\n * }\n *\n * _.map([4, 8], square);\n * // => [16, 64]\n *\n * _.map({ 'a': 4, 'b': 8 }, square);\n * // => [16, 64] (iteration order is not guaranteed)\n *\n * var users = [\n * { 'user': 'barney' },\n * { 'user': 'fred' }\n * ];\n *\n * // The `_.property` iteratee shorthand.\n * _.map(users, 'user');\n * // => ['barney', 'fred']\n */\n function map(collection, iteratee) {\n var func = isArray(collection) ? arrayMap : baseMap;\n return func(collection, getIteratee(iteratee, 3));\n }\n\n /**\n * This method is like `_.sortBy` except that it allows specifying the sort\n * orders of the iteratees to sort by. If `orders` is unspecified, all values\n * are sorted in ascending order. Otherwise, specify an order of \"desc\" for\n * descending or \"asc\" for ascending sort order of corresponding values.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Array[]|Function[]|Object[]|string[]} [iteratees=[_.identity]]\n * The iteratees to sort by.\n * @param {string[]} [orders] The sort orders of `iteratees`.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.reduce`.\n * @returns {Array} Returns the new sorted array.\n * @example\n *\n * var users = [\n * { 'user': 'fred', 'age': 48 },\n * { 'user': 'barney', 'age': 34 },\n * { 'user': 'fred', 'age': 40 },\n * { 'user': 'barney', 'age': 36 }\n * ];\n *\n * // Sort by `user` in ascending order and by `age` in descending order.\n * _.orderBy(users, ['user', 'age'], ['asc', 'desc']);\n * // => objects for [['barney', 36], ['barney', 34], ['fred', 48], ['fred', 40]]\n */\n function orderBy(collection, iteratees, orders, guard) {\n if (collection == null) {\n return [];\n }\n if (!isArray(iteratees)) {\n iteratees = iteratees == null ? [] : [iteratees];\n }\n orders = guard ? undefined : orders;\n if (!isArray(orders)) {\n orders = orders == null ? [] : [orders];\n }\n return baseOrderBy(collection, iteratees, orders);\n }\n\n /**\n * Creates an array of elements split into two groups, the first of which\n * contains elements `predicate` returns truthy for, the second of which\n * contains elements `predicate` returns falsey for. The predicate is\n * invoked with one argument: (value).\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @returns {Array} Returns the array of grouped elements.\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'age': 36, 'active': false },\n * { 'user': 'fred', 'age': 40, 'active': true },\n * { 'user': 'pebbles', 'age': 1, 'active': false }\n * ];\n *\n * _.partition(users, function(o) { return o.active; });\n * // => objects for [['fred'], ['barney', 'pebbles']]\n *\n * // The `_.matches` iteratee shorthand.\n * _.partition(users, { 'age': 1, 'active': false });\n * // => objects for [['pebbles'], ['barney', 'fred']]\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.partition(users, ['active', false]);\n * // => objects for [['barney', 'pebbles'], ['fred']]\n *\n * // The `_.property` iteratee shorthand.\n * _.partition(users, 'active');\n * // => objects for [['fred'], ['barney', 'pebbles']]\n */\n var partition = createAggregator(function(result, value, key) {\n result[key ? 0 : 1].push(value);\n }, function() { return [[], []]; });\n\n /**\n * Reduces `collection` to a value which is the accumulated result of running\n * each element in `collection` thru `iteratee`, where each successive\n * invocation is supplied the return value of the previous. If `accumulator`\n * is not given, the first element of `collection` is used as the initial\n * value. The iteratee is invoked with four arguments:\n * (accumulator, value, index|key, collection).\n *\n * Many lodash methods are guarded to work as iteratees for methods like\n * `_.reduce`, `_.reduceRight`, and `_.transform`.\n *\n * The guarded methods are:\n * `assign`, `defaults`, `defaultsDeep`, `includes`, `merge`, `orderBy`,\n * and `sortBy`\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @param {*} [accumulator] The initial value.\n * @returns {*} Returns the accumulated value.\n * @see _.reduceRight\n * @example\n *\n * _.reduce([1, 2], function(sum, n) {\n * return sum + n;\n * }, 0);\n * // => 3\n *\n * _.reduce({ 'a': 1, 'b': 2, 'c': 1 }, function(result, value, key) {\n * (result[value] || (result[value] = [])).push(key);\n * return result;\n * }, {});\n * // => { '1': ['a', 'c'], '2': ['b'] } (iteration order is not guaranteed)\n */\n function reduce(collection, iteratee, accumulator) {\n var func = isArray(collection) ? arrayReduce : baseReduce,\n initAccum = arguments.length < 3;\n\n return func(collection, getIteratee(iteratee, 4), accumulator, initAccum, baseEach);\n }\n\n /**\n * This method is like `_.reduce` except that it iterates over elements of\n * `collection` from right to left.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @param {*} [accumulator] The initial value.\n * @returns {*} Returns the accumulated value.\n * @see _.reduce\n * @example\n *\n * var array = [[0, 1], [2, 3], [4, 5]];\n *\n * _.reduceRight(array, function(flattened, other) {\n * return flattened.concat(other);\n * }, []);\n * // => [4, 5, 2, 3, 0, 1]\n */\n function reduceRight(collection, iteratee, accumulator) {\n var func = isArray(collection) ? arrayReduceRight : baseReduce,\n initAccum = arguments.length < 3;\n\n return func(collection, getIteratee(iteratee, 4), accumulator, initAccum, baseEachRight);\n }\n\n /**\n * The opposite of `_.filter`; this method returns the elements of `collection`\n * that `predicate` does **not** return truthy for.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @returns {Array} Returns the new filtered array.\n * @see _.filter\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'age': 36, 'active': false },\n * { 'user': 'fred', 'age': 40, 'active': true }\n * ];\n *\n * _.reject(users, function(o) { return !o.active; });\n * // => objects for ['fred']\n *\n * // The `_.matches` iteratee shorthand.\n * _.reject(users, { 'age': 40, 'active': true });\n * // => objects for ['barney']\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.reject(users, ['active', false]);\n * // => objects for ['fred']\n *\n * // The `_.property` iteratee shorthand.\n * _.reject(users, 'active');\n * // => objects for ['barney']\n */\n function reject(collection, predicate) {\n var func = isArray(collection) ? arrayFilter : baseFilter;\n return func(collection, negate(getIteratee(predicate, 3)));\n }\n\n /**\n * Gets a random element from `collection`.\n *\n * @static\n * @memberOf _\n * @since 2.0.0\n * @category Collection\n * @param {Array|Object} collection The collection to sample.\n * @returns {*} Returns the random element.\n * @example\n *\n * _.sample([1, 2, 3, 4]);\n * // => 2\n */\n function sample(collection) {\n var func = isArray(collection) ? arraySample : baseSample;\n return func(collection);\n }\n\n /**\n * Gets `n` random elements at unique keys from `collection` up to the\n * size of `collection`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Collection\n * @param {Array|Object} collection The collection to sample.\n * @param {number} [n=1] The number of elements to sample.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {Array} Returns the random elements.\n * @example\n *\n * _.sampleSize([1, 2, 3], 2);\n * // => [3, 1]\n *\n * _.sampleSize([1, 2, 3], 4);\n * // => [2, 3, 1]\n */\n function sampleSize(collection, n, guard) {\n if ((guard ? isIterateeCall(collection, n, guard) : n === undefined)) {\n n = 1;\n } else {\n n = toInteger(n);\n }\n var func = isArray(collection) ? arraySampleSize : baseSampleSize;\n return func(collection, n);\n }\n\n /**\n * Creates an array of shuffled values, using a version of the\n * [Fisher-Yates shuffle](https://en.wikipedia.org/wiki/Fisher-Yates_shuffle).\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to shuffle.\n * @returns {Array} Returns the new shuffled array.\n * @example\n *\n * _.shuffle([1, 2, 3, 4]);\n * // => [4, 1, 3, 2]\n */\n function shuffle(collection) {\n var func = isArray(collection) ? arrayShuffle : baseShuffle;\n return func(collection);\n }\n\n /**\n * Gets the size of `collection` by returning its length for array-like\n * values or the number of own enumerable string keyed properties for objects.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object|string} collection The collection to inspect.\n * @returns {number} Returns the collection size.\n * @example\n *\n * _.size([1, 2, 3]);\n * // => 3\n *\n * _.size({ 'a': 1, 'b': 2 });\n * // => 2\n *\n * _.size('pebbles');\n * // => 7\n */\n function size(collection) {\n if (collection == null) {\n return 0;\n }\n if (isArrayLike(collection)) {\n return isString(collection) ? stringSize(collection) : collection.length;\n }\n var tag = getTag(collection);\n if (tag == mapTag || tag == setTag) {\n return collection.size;\n }\n return baseKeys(collection).length;\n }\n\n /**\n * Checks if `predicate` returns truthy for **any** element of `collection`.\n * Iteration is stopped once `predicate` returns truthy. The predicate is\n * invoked with three arguments: (value, index|key, collection).\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {boolean} Returns `true` if any element passes the predicate check,\n * else `false`.\n * @example\n *\n * _.some([null, 0, 'yes', false], Boolean);\n * // => true\n *\n * var users = [\n * { 'user': 'barney', 'active': true },\n * { 'user': 'fred', 'active': false }\n * ];\n *\n * // The `_.matches` iteratee shorthand.\n * _.some(users, { 'user': 'barney', 'active': false });\n * // => false\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.some(users, ['active', false]);\n * // => true\n *\n * // The `_.property` iteratee shorthand.\n * _.some(users, 'active');\n * // => true\n */\n function some(collection, predicate, guard) {\n var func = isArray(collection) ? arraySome : baseSome;\n if (guard && isIterateeCall(collection, predicate, guard)) {\n predicate = undefined;\n }\n return func(collection, getIteratee(predicate, 3));\n }\n\n /**\n * Creates an array of elements, sorted in ascending order by the results of\n * running each element in a collection thru each iteratee. This method\n * performs a stable sort, that is, it preserves the original sort order of\n * equal elements. The iteratees are invoked with one argument: (value).\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {...(Function|Function[])} [iteratees=[_.identity]]\n * The iteratees to sort by.\n * @returns {Array} Returns the new sorted array.\n * @example\n *\n * var users = [\n * { 'user': 'fred', 'age': 48 },\n * { 'user': 'barney', 'age': 36 },\n * { 'user': 'fred', 'age': 40 },\n * { 'user': 'barney', 'age': 34 }\n * ];\n *\n * _.sortBy(users, [function(o) { return o.user; }]);\n * // => objects for [['barney', 36], ['barney', 34], ['fred', 48], ['fred', 40]]\n *\n * _.sortBy(users, ['user', 'age']);\n * // => objects for [['barney', 34], ['barney', 36], ['fred', 40], ['fred', 48]]\n */\n var sortBy = baseRest(function(collection, iteratees) {\n if (collection == null) {\n return [];\n }\n var length = iteratees.length;\n if (length > 1 && isIterateeCall(collection, iteratees[0], iteratees[1])) {\n iteratees = [];\n } else if (length > 2 && isIterateeCall(iteratees[0], iteratees[1], iteratees[2])) {\n iteratees = [iteratees[0]];\n }\n return baseOrderBy(collection, baseFlatten(iteratees, 1), []);\n });\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Gets the timestamp of the number of milliseconds that have elapsed since\n * the Unix epoch (1 January 1970 00:00:00 UTC).\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Date\n * @returns {number} Returns the timestamp.\n * @example\n *\n * _.defer(function(stamp) {\n * console.log(_.now() - stamp);\n * }, _.now());\n * // => Logs the number of milliseconds it took for the deferred invocation.\n */\n var now = ctxNow || function() {\n return root.Date.now();\n };\n\n /*------------------------------------------------------------------------*/\n\n /**\n * The opposite of `_.before`; this method creates a function that invokes\n * `func` once it's called `n` or more times.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {number} n The number of calls before `func` is invoked.\n * @param {Function} func The function to restrict.\n * @returns {Function} Returns the new restricted function.\n * @example\n *\n * var saves = ['profile', 'settings'];\n *\n * var done = _.after(saves.length, function() {\n * console.log('done saving!');\n * });\n *\n * _.forEach(saves, function(type) {\n * asyncSave({ 'type': type, 'complete': done });\n * });\n * // => Logs 'done saving!' after the two async saves have completed.\n */\n function after(n, func) {\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n n = toInteger(n);\n return function() {\n if (--n < 1) {\n return func.apply(this, arguments);\n }\n };\n }\n\n /**\n * Creates a function that invokes `func`, with up to `n` arguments,\n * ignoring any additional arguments.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Function\n * @param {Function} func The function to cap arguments for.\n * @param {number} [n=func.length] The arity cap.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {Function} Returns the new capped function.\n * @example\n *\n * _.map(['6', '8', '10'], _.ary(parseInt, 1));\n * // => [6, 8, 10]\n */\n function ary(func, n, guard) {\n n = guard ? undefined : n;\n n = (func && n == null) ? func.length : n;\n return createWrap(func, WRAP_ARY_FLAG, undefined, undefined, undefined, undefined, n);\n }\n\n /**\n * Creates a function that invokes `func`, with the `this` binding and arguments\n * of the created function, while it's called less than `n` times. Subsequent\n * calls to the created function return the result of the last `func` invocation.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Function\n * @param {number} n The number of calls at which `func` is no longer invoked.\n * @param {Function} func The function to restrict.\n * @returns {Function} Returns the new restricted function.\n * @example\n *\n * jQuery(element).on('click', _.before(5, addContactToList));\n * // => Allows adding up to 4 contacts to the list.\n */\n function before(n, func) {\n var result;\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n n = toInteger(n);\n return function() {\n if (--n > 0) {\n result = func.apply(this, arguments);\n }\n if (n <= 1) {\n func = undefined;\n }\n return result;\n };\n }\n\n /**\n * Creates a function that invokes `func` with the `this` binding of `thisArg`\n * and `partials` prepended to the arguments it receives.\n *\n * The `_.bind.placeholder` value, which defaults to `_` in monolithic builds,\n * may be used as a placeholder for partially applied arguments.\n *\n * **Note:** Unlike native `Function#bind`, this method doesn't set the \"length\"\n * property of bound functions.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to bind.\n * @param {*} thisArg The `this` binding of `func`.\n * @param {...*} [partials] The arguments to be partially applied.\n * @returns {Function} Returns the new bound function.\n * @example\n *\n * function greet(greeting, punctuation) {\n * return greeting + ' ' + this.user + punctuation;\n * }\n *\n * var object = { 'user': 'fred' };\n *\n * var bound = _.bind(greet, object, 'hi');\n * bound('!');\n * // => 'hi fred!'\n *\n * // Bound with placeholders.\n * var bound = _.bind(greet, object, _, '!');\n * bound('hi');\n * // => 'hi fred!'\n */\n var bind = baseRest(function(func, thisArg, partials) {\n var bitmask = WRAP_BIND_FLAG;\n if (partials.length) {\n var holders = replaceHolders(partials, getHolder(bind));\n bitmask |= WRAP_PARTIAL_FLAG;\n }\n return createWrap(func, bitmask, thisArg, partials, holders);\n });\n\n /**\n * Creates a function that invokes the method at `object[key]` with `partials`\n * prepended to the arguments it receives.\n *\n * This method differs from `_.bind` by allowing bound functions to reference\n * methods that may be redefined or don't yet exist. See\n * [Peter Michaux's article](http://peter.michaux.ca/articles/lazy-function-definition-pattern)\n * for more details.\n *\n * The `_.bindKey.placeholder` value, which defaults to `_` in monolithic\n * builds, may be used as a placeholder for partially applied arguments.\n *\n * @static\n * @memberOf _\n * @since 0.10.0\n * @category Function\n * @param {Object} object The object to invoke the method on.\n * @param {string} key The key of the method.\n * @param {...*} [partials] The arguments to be partially applied.\n * @returns {Function} Returns the new bound function.\n * @example\n *\n * var object = {\n * 'user': 'fred',\n * 'greet': function(greeting, punctuation) {\n * return greeting + ' ' + this.user + punctuation;\n * }\n * };\n *\n * var bound = _.bindKey(object, 'greet', 'hi');\n * bound('!');\n * // => 'hi fred!'\n *\n * object.greet = function(greeting, punctuation) {\n * return greeting + 'ya ' + this.user + punctuation;\n * };\n *\n * bound('!');\n * // => 'hiya fred!'\n *\n * // Bound with placeholders.\n * var bound = _.bindKey(object, 'greet', _, '!');\n * bound('hi');\n * // => 'hiya fred!'\n */\n var bindKey = baseRest(function(object, key, partials) {\n var bitmask = WRAP_BIND_FLAG | WRAP_BIND_KEY_FLAG;\n if (partials.length) {\n var holders = replaceHolders(partials, getHolder(bindKey));\n bitmask |= WRAP_PARTIAL_FLAG;\n }\n return createWrap(key, bitmask, object, partials, holders);\n });\n\n /**\n * Creates a function that accepts arguments of `func` and either invokes\n * `func` returning its result, if at least `arity` number of arguments have\n * been provided, or returns a function that accepts the remaining `func`\n * arguments, and so on. The arity of `func` may be specified if `func.length`\n * is not sufficient.\n *\n * The `_.curry.placeholder` value, which defaults to `_` in monolithic builds,\n * may be used as a placeholder for provided arguments.\n *\n * **Note:** This method doesn't set the \"length\" property of curried functions.\n *\n * @static\n * @memberOf _\n * @since 2.0.0\n * @category Function\n * @param {Function} func The function to curry.\n * @param {number} [arity=func.length] The arity of `func`.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {Function} Returns the new curried function.\n * @example\n *\n * var abc = function(a, b, c) {\n * return [a, b, c];\n * };\n *\n * var curried = _.curry(abc);\n *\n * curried(1)(2)(3);\n * // => [1, 2, 3]\n *\n * curried(1, 2)(3);\n * // => [1, 2, 3]\n *\n * curried(1, 2, 3);\n * // => [1, 2, 3]\n *\n * // Curried with placeholders.\n * curried(1)(_, 3)(2);\n * // => [1, 2, 3]\n */\n function curry(func, arity, guard) {\n arity = guard ? undefined : arity;\n var result = createWrap(func, WRAP_CURRY_FLAG, undefined, undefined, undefined, undefined, undefined, arity);\n result.placeholder = curry.placeholder;\n return result;\n }\n\n /**\n * This method is like `_.curry` except that arguments are applied to `func`\n * in the manner of `_.partialRight` instead of `_.partial`.\n *\n * The `_.curryRight.placeholder` value, which defaults to `_` in monolithic\n * builds, may be used as a placeholder for provided arguments.\n *\n * **Note:** This method doesn't set the \"length\" property of curried functions.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Function\n * @param {Function} func The function to curry.\n * @param {number} [arity=func.length] The arity of `func`.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {Function} Returns the new curried function.\n * @example\n *\n * var abc = function(a, b, c) {\n * return [a, b, c];\n * };\n *\n * var curried = _.curryRight(abc);\n *\n * curried(3)(2)(1);\n * // => [1, 2, 3]\n *\n * curried(2, 3)(1);\n * // => [1, 2, 3]\n *\n * curried(1, 2, 3);\n * // => [1, 2, 3]\n *\n * // Curried with placeholders.\n * curried(3)(1, _)(2);\n * // => [1, 2, 3]\n */\n function curryRight(func, arity, guard) {\n arity = guard ? undefined : arity;\n var result = createWrap(func, WRAP_CURRY_RIGHT_FLAG, undefined, undefined, undefined, undefined, undefined, arity);\n result.placeholder = curryRight.placeholder;\n return result;\n }\n\n /**\n * Creates a debounced function that delays invoking `func` until after `wait`\n * milliseconds have elapsed since the last time the debounced function was\n * invoked. The debounced function comes with a `cancel` method to cancel\n * delayed `func` invocations and a `flush` method to immediately invoke them.\n * Provide `options` to indicate whether `func` should be invoked on the\n * leading and/or trailing edge of the `wait` timeout. The `func` is invoked\n * with the last arguments provided to the debounced function. Subsequent\n * calls to the debounced function return the result of the last `func`\n * invocation.\n *\n * **Note:** If `leading` and `trailing` options are `true`, `func` is\n * invoked on the trailing edge of the timeout only if the debounced function\n * is invoked more than once during the `wait` timeout.\n *\n * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred\n * until to the next tick, similar to `setTimeout` with a timeout of `0`.\n *\n * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/)\n * for details over the differences between `_.debounce` and `_.throttle`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to debounce.\n * @param {number} [wait=0] The number of milliseconds to delay.\n * @param {Object} [options={}] The options object.\n * @param {boolean} [options.leading=false]\n * Specify invoking on the leading edge of the timeout.\n * @param {number} [options.maxWait]\n * The maximum time `func` is allowed to be delayed before it's invoked.\n * @param {boolean} [options.trailing=true]\n * Specify invoking on the trailing edge of the timeout.\n * @returns {Function} Returns the new debounced function.\n * @example\n *\n * // Avoid costly calculations while the window size is in flux.\n * jQuery(window).on('resize', _.debounce(calculateLayout, 150));\n *\n * // Invoke `sendMail` when clicked, debouncing subsequent calls.\n * jQuery(element).on('click', _.debounce(sendMail, 300, {\n * 'leading': true,\n * 'trailing': false\n * }));\n *\n * // Ensure `batchLog` is invoked once after 1 second of debounced calls.\n * var debounced = _.debounce(batchLog, 250, { 'maxWait': 1000 });\n * var source = new EventSource('/stream');\n * jQuery(source).on('message', debounced);\n *\n * // Cancel the trailing debounced invocation.\n * jQuery(window).on('popstate', debounced.cancel);\n */\n function debounce(func, wait, options) {\n var lastArgs,\n lastThis,\n maxWait,\n result,\n timerId,\n lastCallTime,\n lastInvokeTime = 0,\n leading = false,\n maxing = false,\n trailing = true;\n\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n wait = toNumber(wait) || 0;\n if (isObject(options)) {\n leading = !!options.leading;\n maxing = 'maxWait' in options;\n maxWait = maxing ? nativeMax(toNumber(options.maxWait) || 0, wait) : maxWait;\n trailing = 'trailing' in options ? !!options.trailing : trailing;\n }\n\n function invokeFunc(time) {\n var args = lastArgs,\n thisArg = lastThis;\n\n lastArgs = lastThis = undefined;\n lastInvokeTime = time;\n result = func.apply(thisArg, args);\n return result;\n }\n\n function leadingEdge(time) {\n // Reset any `maxWait` timer.\n lastInvokeTime = time;\n // Start the timer for the trailing edge.\n timerId = setTimeout(timerExpired, wait);\n // Invoke the leading edge.\n return leading ? invokeFunc(time) : result;\n }\n\n function remainingWait(time) {\n var timeSinceLastCall = time - lastCallTime,\n timeSinceLastInvoke = time - lastInvokeTime,\n timeWaiting = wait - timeSinceLastCall;\n\n return maxing\n ? nativeMin(timeWaiting, maxWait - timeSinceLastInvoke)\n : timeWaiting;\n }\n\n function shouldInvoke(time) {\n var timeSinceLastCall = time - lastCallTime,\n timeSinceLastInvoke = time - lastInvokeTime;\n\n // Either this is the first call, activity has stopped and we're at the\n // trailing edge, the system time has gone backwards and we're treating\n // it as the trailing edge, or we've hit the `maxWait` limit.\n return (lastCallTime === undefined || (timeSinceLastCall >= wait) ||\n (timeSinceLastCall < 0) || (maxing && timeSinceLastInvoke >= maxWait));\n }\n\n function timerExpired() {\n var time = now();\n if (shouldInvoke(time)) {\n return trailingEdge(time);\n }\n // Restart the timer.\n timerId = setTimeout(timerExpired, remainingWait(time));\n }\n\n function trailingEdge(time) {\n timerId = undefined;\n\n // Only invoke if we have `lastArgs` which means `func` has been\n // debounced at least once.\n if (trailing && lastArgs) {\n return invokeFunc(time);\n }\n lastArgs = lastThis = undefined;\n return result;\n }\n\n function cancel() {\n if (timerId !== undefined) {\n clearTimeout(timerId);\n }\n lastInvokeTime = 0;\n lastArgs = lastCallTime = lastThis = timerId = undefined;\n }\n\n function flush() {\n return timerId === undefined ? result : trailingEdge(now());\n }\n\n function debounced() {\n var time = now(),\n isInvoking = shouldInvoke(time);\n\n lastArgs = arguments;\n lastThis = this;\n lastCallTime = time;\n\n if (isInvoking) {\n if (timerId === undefined) {\n return leadingEdge(lastCallTime);\n }\n if (maxing) {\n // Handle invocations in a tight loop.\n clearTimeout(timerId);\n timerId = setTimeout(timerExpired, wait);\n return invokeFunc(lastCallTime);\n }\n }\n if (timerId === undefined) {\n timerId = setTimeout(timerExpired, wait);\n }\n return result;\n }\n debounced.cancel = cancel;\n debounced.flush = flush;\n return debounced;\n }\n\n /**\n * Defers invoking the `func` until the current call stack has cleared. Any\n * additional arguments are provided to `func` when it's invoked.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to defer.\n * @param {...*} [args] The arguments to invoke `func` with.\n * @returns {number} Returns the timer id.\n * @example\n *\n * _.defer(function(text) {\n * console.log(text);\n * }, 'deferred');\n * // => Logs 'deferred' after one millisecond.\n */\n var defer = baseRest(function(func, args) {\n return baseDelay(func, 1, args);\n });\n\n /**\n * Invokes `func` after `wait` milliseconds. Any additional arguments are\n * provided to `func` when it's invoked.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to delay.\n * @param {number} wait The number of milliseconds to delay invocation.\n * @param {...*} [args] The arguments to invoke `func` with.\n * @returns {number} Returns the timer id.\n * @example\n *\n * _.delay(function(text) {\n * console.log(text);\n * }, 1000, 'later');\n * // => Logs 'later' after one second.\n */\n var delay = baseRest(function(func, wait, args) {\n return baseDelay(func, toNumber(wait) || 0, args);\n });\n\n /**\n * Creates a function that invokes `func` with arguments reversed.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Function\n * @param {Function} func The function to flip arguments for.\n * @returns {Function} Returns the new flipped function.\n * @example\n *\n * var flipped = _.flip(function() {\n * return _.toArray(arguments);\n * });\n *\n * flipped('a', 'b', 'c', 'd');\n * // => ['d', 'c', 'b', 'a']\n */\n function flip(func) {\n return createWrap(func, WRAP_FLIP_FLAG);\n }\n\n /**\n * Creates a function that memoizes the result of `func`. If `resolver` is\n * provided, it determines the cache key for storing the result based on the\n * arguments provided to the memoized function. By default, the first argument\n * provided to the memoized function is used as the map cache key. The `func`\n * is invoked with the `this` binding of the memoized function.\n *\n * **Note:** The cache is exposed as the `cache` property on the memoized\n * function. Its creation may be customized by replacing the `_.memoize.Cache`\n * constructor with one whose instances implement the\n * [`Map`](http://ecma-international.org/ecma-262/7.0/#sec-properties-of-the-map-prototype-object)\n * method interface of `clear`, `delete`, `get`, `has`, and `set`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to have its output memoized.\n * @param {Function} [resolver] The function to resolve the cache key.\n * @returns {Function} Returns the new memoized function.\n * @example\n *\n * var object = { 'a': 1, 'b': 2 };\n * var other = { 'c': 3, 'd': 4 };\n *\n * var values = _.memoize(_.values);\n * values(object);\n * // => [1, 2]\n *\n * values(other);\n * // => [3, 4]\n *\n * object.a = 2;\n * values(object);\n * // => [1, 2]\n *\n * // Modify the result cache.\n * values.cache.set(object, ['a', 'b']);\n * values(object);\n * // => ['a', 'b']\n *\n * // Replace `_.memoize.Cache`.\n * _.memoize.Cache = WeakMap;\n */\n function memoize(func, resolver) {\n if (typeof func != 'function' || (resolver != null && typeof resolver != 'function')) {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n var memoized = function() {\n var args = arguments,\n key = resolver ? resolver.apply(this, args) : args[0],\n cache = memoized.cache;\n\n if (cache.has(key)) {\n return cache.get(key);\n }\n var result = func.apply(this, args);\n memoized.cache = cache.set(key, result) || cache;\n return result;\n };\n memoized.cache = new (memoize.Cache || MapCache);\n return memoized;\n }\n\n // Expose `MapCache`.\n memoize.Cache = MapCache;\n\n /**\n * Creates a function that negates the result of the predicate `func`. The\n * `func` predicate is invoked with the `this` binding and arguments of the\n * created function.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Function\n * @param {Function} predicate The predicate to negate.\n * @returns {Function} Returns the new negated function.\n * @example\n *\n * function isEven(n) {\n * return n % 2 == 0;\n * }\n *\n * _.filter([1, 2, 3, 4, 5, 6], _.negate(isEven));\n * // => [1, 3, 5]\n */\n function negate(predicate) {\n if (typeof predicate != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n return function() {\n var args = arguments;\n switch (args.length) {\n case 0: return !predicate.call(this);\n case 1: return !predicate.call(this, args[0]);\n case 2: return !predicate.call(this, args[0], args[1]);\n case 3: return !predicate.call(this, args[0], args[1], args[2]);\n }\n return !predicate.apply(this, args);\n };\n }\n\n /**\n * Creates a function that is restricted to invoking `func` once. Repeat calls\n * to the function return the value of the first invocation. The `func` is\n * invoked with the `this` binding and arguments of the created function.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to restrict.\n * @returns {Function} Returns the new restricted function.\n * @example\n *\n * var initialize = _.once(createApplication);\n * initialize();\n * initialize();\n * // => `createApplication` is invoked once\n */\n function once(func) {\n return before(2, func);\n }\n\n /**\n * Creates a function that invokes `func` with its arguments transformed.\n *\n * @static\n * @since 4.0.0\n * @memberOf _\n * @category Function\n * @param {Function} func The function to wrap.\n * @param {...(Function|Function[])} [transforms=[_.identity]]\n * The argument transforms.\n * @returns {Function} Returns the new function.\n * @example\n *\n * function doubled(n) {\n * return n * 2;\n * }\n *\n * function square(n) {\n * return n * n;\n * }\n *\n * var func = _.overArgs(function(x, y) {\n * return [x, y];\n * }, [square, doubled]);\n *\n * func(9, 3);\n * // => [81, 6]\n *\n * func(10, 5);\n * // => [100, 10]\n */\n var overArgs = castRest(function(func, transforms) {\n transforms = (transforms.length == 1 && isArray(transforms[0]))\n ? arrayMap(transforms[0], baseUnary(getIteratee()))\n : arrayMap(baseFlatten(transforms, 1), baseUnary(getIteratee()));\n\n var funcsLength = transforms.length;\n return baseRest(function(args) {\n var index = -1,\n length = nativeMin(args.length, funcsLength);\n\n while (++index < length) {\n args[index] = transforms[index].call(this, args[index]);\n }\n return apply(func, this, args);\n });\n });\n\n /**\n * Creates a function that invokes `func` with `partials` prepended to the\n * arguments it receives. This method is like `_.bind` except it does **not**\n * alter the `this` binding.\n *\n * The `_.partial.placeholder` value, which defaults to `_` in monolithic\n * builds, may be used as a placeholder for partially applied arguments.\n *\n * **Note:** This method doesn't set the \"length\" property of partially\n * applied functions.\n *\n * @static\n * @memberOf _\n * @since 0.2.0\n * @category Function\n * @param {Function} func The function to partially apply arguments to.\n * @param {...*} [partials] The arguments to be partially applied.\n * @returns {Function} Returns the new partially applied function.\n * @example\n *\n * function greet(greeting, name) {\n * return greeting + ' ' + name;\n * }\n *\n * var sayHelloTo = _.partial(greet, 'hello');\n * sayHelloTo('fred');\n * // => 'hello fred'\n *\n * // Partially applied with placeholders.\n * var greetFred = _.partial(greet, _, 'fred');\n * greetFred('hi');\n * // => 'hi fred'\n */\n var partial = baseRest(function(func, partials) {\n var holders = replaceHolders(partials, getHolder(partial));\n return createWrap(func, WRAP_PARTIAL_FLAG, undefined, partials, holders);\n });\n\n /**\n * This method is like `_.partial` except that partially applied arguments\n * are appended to the arguments it receives.\n *\n * The `_.partialRight.placeholder` value, which defaults to `_` in monolithic\n * builds, may be used as a placeholder for partially applied arguments.\n *\n * **Note:** This method doesn't set the \"length\" property of partially\n * applied functions.\n *\n * @static\n * @memberOf _\n * @since 1.0.0\n * @category Function\n * @param {Function} func The function to partially apply arguments to.\n * @param {...*} [partials] The arguments to be partially applied.\n * @returns {Function} Returns the new partially applied function.\n * @example\n *\n * function greet(greeting, name) {\n * return greeting + ' ' + name;\n * }\n *\n * var greetFred = _.partialRight(greet, 'fred');\n * greetFred('hi');\n * // => 'hi fred'\n *\n * // Partially applied with placeholders.\n * var sayHelloTo = _.partialRight(greet, 'hello', _);\n * sayHelloTo('fred');\n * // => 'hello fred'\n */\n var partialRight = baseRest(function(func, partials) {\n var holders = replaceHolders(partials, getHolder(partialRight));\n return createWrap(func, WRAP_PARTIAL_RIGHT_FLAG, undefined, partials, holders);\n });\n\n /**\n * Creates a function that invokes `func` with arguments arranged according\n * to the specified `indexes` where the argument value at the first index is\n * provided as the first argument, the argument value at the second index is\n * provided as the second argument, and so on.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Function\n * @param {Function} func The function to rearrange arguments for.\n * @param {...(number|number[])} indexes The arranged argument indexes.\n * @returns {Function} Returns the new function.\n * @example\n *\n * var rearged = _.rearg(function(a, b, c) {\n * return [a, b, c];\n * }, [2, 0, 1]);\n *\n * rearged('b', 'c', 'a')\n * // => ['a', 'b', 'c']\n */\n var rearg = flatRest(function(func, indexes) {\n return createWrap(func, WRAP_REARG_FLAG, undefined, undefined, undefined, indexes);\n });\n\n /**\n * Creates a function that invokes `func` with the `this` binding of the\n * created function and arguments from `start` and beyond provided as\n * an array.\n *\n * **Note:** This method is based on the\n * [rest parameter](https://mdn.io/rest_parameters).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Function\n * @param {Function} func The function to apply a rest parameter to.\n * @param {number} [start=func.length-1] The start position of the rest parameter.\n * @returns {Function} Returns the new function.\n * @example\n *\n * var say = _.rest(function(what, names) {\n * return what + ' ' + _.initial(names).join(', ') +\n * (_.size(names) > 1 ? ', & ' : '') + _.last(names);\n * });\n *\n * say('hello', 'fred', 'barney', 'pebbles');\n * // => 'hello fred, barney, & pebbles'\n */\n function rest(func, start) {\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n start = start === undefined ? start : toInteger(start);\n return baseRest(func, start);\n }\n\n /**\n * Creates a function that invokes `func` with the `this` binding of the\n * create function and an array of arguments much like\n * [`Function#apply`](http://www.ecma-international.org/ecma-262/7.0/#sec-function.prototype.apply).\n *\n * **Note:** This method is based on the\n * [spread operator](https://mdn.io/spread_operator).\n *\n * @static\n * @memberOf _\n * @since 3.2.0\n * @category Function\n * @param {Function} func The function to spread arguments over.\n * @param {number} [start=0] The start position of the spread.\n * @returns {Function} Returns the new function.\n * @example\n *\n * var say = _.spread(function(who, what) {\n * return who + ' says ' + what;\n * });\n *\n * say(['fred', 'hello']);\n * // => 'fred says hello'\n *\n * var numbers = Promise.all([\n * Promise.resolve(40),\n * Promise.resolve(36)\n * ]);\n *\n * numbers.then(_.spread(function(x, y) {\n * return x + y;\n * }));\n * // => a Promise of 76\n */\n function spread(func, start) {\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n start = start == null ? 0 : nativeMax(toInteger(start), 0);\n return baseRest(function(args) {\n var array = args[start],\n otherArgs = castSlice(args, 0, start);\n\n if (array) {\n arrayPush(otherArgs, array);\n }\n return apply(func, this, otherArgs);\n });\n }\n\n /**\n * Creates a throttled function that only invokes `func` at most once per\n * every `wait` milliseconds. The throttled function comes with a `cancel`\n * method to cancel delayed `func` invocations and a `flush` method to\n * immediately invoke them. Provide `options` to indicate whether `func`\n * should be invoked on the leading and/or trailing edge of the `wait`\n * timeout. The `func` is invoked with the last arguments provided to the\n * throttled function. Subsequent calls to the throttled function return the\n * result of the last `func` invocation.\n *\n * **Note:** If `leading` and `trailing` options are `true`, `func` is\n * invoked on the trailing edge of the timeout only if the throttled function\n * is invoked more than once during the `wait` timeout.\n *\n * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred\n * until to the next tick, similar to `setTimeout` with a timeout of `0`.\n *\n * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/)\n * for details over the differences between `_.throttle` and `_.debounce`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to throttle.\n * @param {number} [wait=0] The number of milliseconds to throttle invocations to.\n * @param {Object} [options={}] The options object.\n * @param {boolean} [options.leading=true]\n * Specify invoking on the leading edge of the timeout.\n * @param {boolean} [options.trailing=true]\n * Specify invoking on the trailing edge of the timeout.\n * @returns {Function} Returns the new throttled function.\n * @example\n *\n * // Avoid excessively updating the position while scrolling.\n * jQuery(window).on('scroll', _.throttle(updatePosition, 100));\n *\n * // Invoke `renewToken` when the click event is fired, but not more than once every 5 minutes.\n * var throttled = _.throttle(renewToken, 300000, { 'trailing': false });\n * jQuery(element).on('click', throttled);\n *\n * // Cancel the trailing throttled invocation.\n * jQuery(window).on('popstate', throttled.cancel);\n */\n function throttle(func, wait, options) {\n var leading = true,\n trailing = true;\n\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n if (isObject(options)) {\n leading = 'leading' in options ? !!options.leading : leading;\n trailing = 'trailing' in options ? !!options.trailing : trailing;\n }\n return debounce(func, wait, {\n 'leading': leading,\n 'maxWait': wait,\n 'trailing': trailing\n });\n }\n\n /**\n * Creates a function that accepts up to one argument, ignoring any\n * additional arguments.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Function\n * @param {Function} func The function to cap arguments for.\n * @returns {Function} Returns the new capped function.\n * @example\n *\n * _.map(['6', '8', '10'], _.unary(parseInt));\n * // => [6, 8, 10]\n */\n function unary(func) {\n return ary(func, 1);\n }\n\n /**\n * Creates a function that provides `value` to `wrapper` as its first\n * argument. Any additional arguments provided to the function are appended\n * to those provided to the `wrapper`. The wrapper is invoked with the `this`\n * binding of the created function.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {*} value The value to wrap.\n * @param {Function} [wrapper=identity] The wrapper function.\n * @returns {Function} Returns the new function.\n * @example\n *\n * var p = _.wrap(_.escape, function(func, text) {\n * return '<p>' + func(text) + '</p>';\n * });\n *\n * p('fred, barney, & pebbles');\n * // => '<p>fred, barney, &amp; pebbles</p>'\n */\n function wrap(value, wrapper) {\n return partial(castFunction(wrapper), value);\n }\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Casts `value` as an array if it's not one.\n *\n * @static\n * @memberOf _\n * @since 4.4.0\n * @category Lang\n * @param {*} value The value to inspect.\n * @returns {Array} Returns the cast array.\n * @example\n *\n * _.castArray(1);\n * // => [1]\n *\n * _.castArray({ 'a': 1 });\n * // => [{ 'a': 1 }]\n *\n * _.castArray('abc');\n * // => ['abc']\n *\n * _.castArray(null);\n * // => [null]\n *\n * _.castArray(undefined);\n * // => [undefined]\n *\n * _.castArray();\n * // => []\n *\n * var array = [1, 2, 3];\n * console.log(_.castArray(array) === array);\n * // => true\n */\n function castArray() {\n if (!arguments.length) {\n return [];\n }\n var value = arguments[0];\n return isArray(value) ? value : [value];\n }\n\n /**\n * Creates a shallow clone of `value`.\n *\n * **Note:** This method is loosely based on the\n * [structured clone algorithm](https://mdn.io/Structured_clone_algorithm)\n * and supports cloning arrays, array buffers, booleans, date objects, maps,\n * numbers, `Object` objects, regexes, sets, strings, symbols, and typed\n * arrays. The own enumerable properties of `arguments` objects are cloned\n * as plain objects. An empty object is returned for uncloneable values such\n * as error objects, functions, DOM nodes, and WeakMaps.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to clone.\n * @returns {*} Returns the cloned value.\n * @see _.cloneDeep\n * @example\n *\n * var objects = [{ 'a': 1 }, { 'b': 2 }];\n *\n * var shallow = _.clone(objects);\n * console.log(shallow[0] === objects[0]);\n * // => true\n */\n function clone(value) {\n return baseClone(value, CLONE_SYMBOLS_FLAG);\n }\n\n /**\n * This method is like `_.clone` except that it accepts `customizer` which\n * is invoked to produce the cloned value. If `customizer` returns `undefined`,\n * cloning is handled by the method instead. The `customizer` is invoked with\n * up to four arguments; (value [, index|key, object, stack]).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to clone.\n * @param {Function} [customizer] The function to customize cloning.\n * @returns {*} Returns the cloned value.\n * @see _.cloneDeepWith\n * @example\n *\n * function customizer(value) {\n * if (_.isElement(value)) {\n * return value.cloneNode(false);\n * }\n * }\n *\n * var el = _.cloneWith(document.body, customizer);\n *\n * console.log(el === document.body);\n * // => false\n * console.log(el.nodeName);\n * // => 'BODY'\n * console.log(el.childNodes.length);\n * // => 0\n */\n function cloneWith(value, customizer) {\n customizer = typeof customizer == 'function' ? customizer : undefined;\n return baseClone(value, CLONE_SYMBOLS_FLAG, customizer);\n }\n\n /**\n * This method is like `_.clone` except that it recursively clones `value`.\n *\n * @static\n * @memberOf _\n * @since 1.0.0\n * @category Lang\n * @param {*} value The value to recursively clone.\n * @returns {*} Returns the deep cloned value.\n * @see _.clone\n * @example\n *\n * var objects = [{ 'a': 1 }, { 'b': 2 }];\n *\n * var deep = _.cloneDeep(objects);\n * console.log(deep[0] === objects[0]);\n * // => false\n */\n function cloneDeep(value) {\n return baseClone(value, CLONE_DEEP_FLAG | CLONE_SYMBOLS_FLAG);\n }\n\n /**\n * This method is like `_.cloneWith` except that it recursively clones `value`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to recursively clone.\n * @param {Function} [customizer] The function to customize cloning.\n * @returns {*} Returns the deep cloned value.\n * @see _.cloneWith\n * @example\n *\n * function customizer(value) {\n * if (_.isElement(value)) {\n * return value.cloneNode(true);\n * }\n * }\n *\n * var el = _.cloneDeepWith(document.body, customizer);\n *\n * console.log(el === document.body);\n * // => false\n * console.log(el.nodeName);\n * // => 'BODY'\n * console.log(el.childNodes.length);\n * // => 20\n */\n function cloneDeepWith(value, customizer) {\n customizer = typeof customizer == 'function' ? customizer : undefined;\n return baseClone(value, CLONE_DEEP_FLAG | CLONE_SYMBOLS_FLAG, customizer);\n }\n\n /**\n * Checks if `object` conforms to `source` by invoking the predicate\n * properties of `source` with the corresponding property values of `object`.\n *\n * **Note:** This method is equivalent to `_.conforms` when `source` is\n * partially applied.\n *\n * @static\n * @memberOf _\n * @since 4.14.0\n * @category Lang\n * @param {Object} object The object to inspect.\n * @param {Object} source The object of property predicates to conform to.\n * @returns {boolean} Returns `true` if `object` conforms, else `false`.\n * @example\n *\n * var object = { 'a': 1, 'b': 2 };\n *\n * _.conformsTo(object, { 'b': function(n) { return n > 1; } });\n * // => true\n *\n * _.conformsTo(object, { 'b': function(n) { return n > 2; } });\n * // => false\n */\n function conformsTo(object, source) {\n return source == null || baseConformsTo(object, source, keys(source));\n }\n\n /**\n * Performs a\n * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * comparison between two values to determine if they are equivalent.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n * @example\n *\n * var object = { 'a': 1 };\n * var other = { 'a': 1 };\n *\n * _.eq(object, object);\n * // => true\n *\n * _.eq(object, other);\n * // => false\n *\n * _.eq('a', 'a');\n * // => true\n *\n * _.eq('a', Object('a'));\n * // => false\n *\n * _.eq(NaN, NaN);\n * // => true\n */\n function eq(value, other) {\n return value === other || (value !== value && other !== other);\n }\n\n /**\n * Checks if `value` is greater than `other`.\n *\n * @static\n * @memberOf _\n * @since 3.9.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if `value` is greater than `other`,\n * else `false`.\n * @see _.lt\n * @example\n *\n * _.gt(3, 1);\n * // => true\n *\n * _.gt(3, 3);\n * // => false\n *\n * _.gt(1, 3);\n * // => false\n */\n var gt = createRelationalOperation(baseGt);\n\n /**\n * Checks if `value` is greater than or equal to `other`.\n *\n * @static\n * @memberOf _\n * @since 3.9.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if `value` is greater than or equal to\n * `other`, else `false`.\n * @see _.lte\n * @example\n *\n * _.gte(3, 1);\n * // => true\n *\n * _.gte(3, 3);\n * // => true\n *\n * _.gte(1, 3);\n * // => false\n */\n var gte = createRelationalOperation(function(value, other) {\n return value >= other;\n });\n\n /**\n * Checks if `value` is likely an `arguments` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an `arguments` object,\n * else `false`.\n * @example\n *\n * _.isArguments(function() { return arguments; }());\n * // => true\n *\n * _.isArguments([1, 2, 3]);\n * // => false\n */\n var isArguments = baseIsArguments(function() { return arguments; }()) ? baseIsArguments : function(value) {\n return isObjectLike(value) && hasOwnProperty.call(value, 'callee') &&\n !propertyIsEnumerable.call(value, 'callee');\n };\n\n /**\n * Checks if `value` is classified as an `Array` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an array, else `false`.\n * @example\n *\n * _.isArray([1, 2, 3]);\n * // => true\n *\n * _.isArray(document.body.children);\n * // => false\n *\n * _.isArray('abc');\n * // => false\n *\n * _.isArray(_.noop);\n * // => false\n */\n var isArray = Array.isArray;\n\n /**\n * Checks if `value` is classified as an `ArrayBuffer` object.\n *\n * @static\n * @memberOf _\n * @since 4.3.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an array buffer, else `false`.\n * @example\n *\n * _.isArrayBuffer(new ArrayBuffer(2));\n * // => true\n *\n * _.isArrayBuffer(new Array(2));\n * // => false\n */\n var isArrayBuffer = nodeIsArrayBuffer ? baseUnary(nodeIsArrayBuffer) : baseIsArrayBuffer;\n\n /**\n * Checks if `value` is array-like. A value is considered array-like if it's\n * not a function and has a `value.length` that's an integer greater than or\n * equal to `0` and less than or equal to `Number.MAX_SAFE_INTEGER`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is array-like, else `false`.\n * @example\n *\n * _.isArrayLike([1, 2, 3]);\n * // => true\n *\n * _.isArrayLike(document.body.children);\n * // => true\n *\n * _.isArrayLike('abc');\n * // => true\n *\n * _.isArrayLike(_.noop);\n * // => false\n */\n function isArrayLike(value) {\n return value != null && isLength(value.length) && !isFunction(value);\n }\n\n /**\n * This method is like `_.isArrayLike` except that it also checks if `value`\n * is an object.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an array-like object,\n * else `false`.\n * @example\n *\n * _.isArrayLikeObject([1, 2, 3]);\n * // => true\n *\n * _.isArrayLikeObject(document.body.children);\n * // => true\n *\n * _.isArrayLikeObject('abc');\n * // => false\n *\n * _.isArrayLikeObject(_.noop);\n * // => false\n */\n function isArrayLikeObject(value) {\n return isObjectLike(value) && isArrayLike(value);\n }\n\n /**\n * Checks if `value` is classified as a boolean primitive or object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a boolean, else `false`.\n * @example\n *\n * _.isBoolean(false);\n * // => true\n *\n * _.isBoolean(null);\n * // => false\n */\n function isBoolean(value) {\n return value === true || value === false ||\n (isObjectLike(value) && baseGetTag(value) == boolTag);\n }\n\n /**\n * Checks if `value` is a buffer.\n *\n * @static\n * @memberOf _\n * @since 4.3.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a buffer, else `false`.\n * @example\n *\n * _.isBuffer(new Buffer(2));\n * // => true\n *\n * _.isBuffer(new Uint8Array(2));\n * // => false\n */\n var isBuffer = nativeIsBuffer || stubFalse;\n\n /**\n * Checks if `value` is classified as a `Date` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a date object, else `false`.\n * @example\n *\n * _.isDate(new Date);\n * // => true\n *\n * _.isDate('Mon April 23 2012');\n * // => false\n */\n var isDate = nodeIsDate ? baseUnary(nodeIsDate) : baseIsDate;\n\n /**\n * Checks if `value` is likely a DOM element.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a DOM element, else `false`.\n * @example\n *\n * _.isElement(document.body);\n * // => true\n *\n * _.isElement('<body>');\n * // => false\n */\n function isElement(value) {\n return isObjectLike(value) && value.nodeType === 1 && !isPlainObject(value);\n }\n\n /**\n * Checks if `value` is an empty object, collection, map, or set.\n *\n * Objects are considered empty if they have no own enumerable string keyed\n * properties.\n *\n * Array-like values such as `arguments` objects, arrays, buffers, strings, or\n * jQuery-like collections are considered empty if they have a `length` of `0`.\n * Similarly, maps and sets are considered empty if they have a `size` of `0`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is empty, else `false`.\n * @example\n *\n * _.isEmpty(null);\n * // => true\n *\n * _.isEmpty(true);\n * // => true\n *\n * _.isEmpty(1);\n * // => true\n *\n * _.isEmpty([1, 2, 3]);\n * // => false\n *\n * _.isEmpty({ 'a': 1 });\n * // => false\n */\n function isEmpty(value) {\n if (value == null) {\n return true;\n }\n if (isArrayLike(value) &&\n (isArray(value) || typeof value == 'string' || typeof value.splice == 'function' ||\n isBuffer(value) || isTypedArray(value) || isArguments(value))) {\n return !value.length;\n }\n var tag = getTag(value);\n if (tag == mapTag || tag == setTag) {\n return !value.size;\n }\n if (isPrototype(value)) {\n return !baseKeys(value).length;\n }\n for (var key in value) {\n if (hasOwnProperty.call(value, key)) {\n return false;\n }\n }\n return true;\n }\n\n /**\n * Performs a deep comparison between two values to determine if they are\n * equivalent.\n *\n * **Note:** This method supports comparing arrays, array buffers, booleans,\n * date objects, error objects, maps, numbers, `Object` objects, regexes,\n * sets, strings, symbols, and typed arrays. `Object` objects are compared\n * by their own, not inherited, enumerable properties. Functions and DOM\n * nodes are compared by strict equality, i.e. `===`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n * @example\n *\n * var object = { 'a': 1 };\n * var other = { 'a': 1 };\n *\n * _.isEqual(object, other);\n * // => true\n *\n * object === other;\n * // => false\n */\n function isEqual(value, other) {\n return baseIsEqual(value, other);\n }\n\n /**\n * This method is like `_.isEqual` except that it accepts `customizer` which\n * is invoked to compare values. If `customizer` returns `undefined`, comparisons\n * are handled by the method instead. The `customizer` is invoked with up to\n * six arguments: (objValue, othValue [, index|key, object, other, stack]).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @param {Function} [customizer] The function to customize comparisons.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n * @example\n *\n * function isGreeting(value) {\n * return /^h(?:i|ello)$/.test(value);\n * }\n *\n * function customizer(objValue, othValue) {\n * if (isGreeting(objValue) && isGreeting(othValue)) {\n * return true;\n * }\n * }\n *\n * var array = ['hello', 'goodbye'];\n * var other = ['hi', 'goodbye'];\n *\n * _.isEqualWith(array, other, customizer);\n * // => true\n */\n function isEqualWith(value, other, customizer) {\n customizer = typeof customizer == 'function' ? customizer : undefined;\n var result = customizer ? customizer(value, other) : undefined;\n return result === undefined ? baseIsEqual(value, other, undefined, customizer) : !!result;\n }\n\n /**\n * Checks if `value` is an `Error`, `EvalError`, `RangeError`, `ReferenceError`,\n * `SyntaxError`, `TypeError`, or `URIError` object.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an error object, else `false`.\n * @example\n *\n * _.isError(new Error);\n * // => true\n *\n * _.isError(Error);\n * // => false\n */\n function isError(value) {\n if (!isObjectLike(value)) {\n return false;\n }\n var tag = baseGetTag(value);\n return tag == errorTag || tag == domExcTag ||\n (typeof value.message == 'string' && typeof value.name == 'string' && !isPlainObject(value));\n }\n\n /**\n * Checks if `value` is a finite primitive number.\n *\n * **Note:** This method is based on\n * [`Number.isFinite`](https://mdn.io/Number/isFinite).\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a finite number, else `false`.\n * @example\n *\n * _.isFinite(3);\n * // => true\n *\n * _.isFinite(Number.MIN_VALUE);\n * // => true\n *\n * _.isFinite(Infinity);\n * // => false\n *\n * _.isFinite('3');\n * // => false\n */\n function isFinite(value) {\n return typeof value == 'number' && nativeIsFinite(value);\n }\n\n /**\n * Checks if `value` is classified as a `Function` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a function, else `false`.\n * @example\n *\n * _.isFunction(_);\n * // => true\n *\n * _.isFunction(/abc/);\n * // => false\n */\n function isFunction(value) {\n if (!isObject(value)) {\n return false;\n }\n // The use of `Object#toString` avoids issues with the `typeof` operator\n // in Safari 9 which returns 'object' for typed arrays and other constructors.\n var tag = baseGetTag(value);\n return tag == funcTag || tag == genTag || tag == asyncTag || tag == proxyTag;\n }\n\n /**\n * Checks if `value` is an integer.\n *\n * **Note:** This method is based on\n * [`Number.isInteger`](https://mdn.io/Number/isInteger).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an integer, else `false`.\n * @example\n *\n * _.isInteger(3);\n * // => true\n *\n * _.isInteger(Number.MIN_VALUE);\n * // => false\n *\n * _.isInteger(Infinity);\n * // => false\n *\n * _.isInteger('3');\n * // => false\n */\n function isInteger(value) {\n return typeof value == 'number' && value == toInteger(value);\n }\n\n /**\n * Checks if `value` is a valid array-like length.\n *\n * **Note:** This method is loosely based on\n * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a valid length, else `false`.\n * @example\n *\n * _.isLength(3);\n * // => true\n *\n * _.isLength(Number.MIN_VALUE);\n * // => false\n *\n * _.isLength(Infinity);\n * // => false\n *\n * _.isLength('3');\n * // => false\n */\n function isLength(value) {\n return typeof value == 'number' &&\n value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER;\n }\n\n /**\n * Checks if `value` is the\n * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)\n * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(_.noop);\n * // => true\n *\n * _.isObject(null);\n * // => false\n */\n function isObject(value) {\n var type = typeof value;\n return value != null && (type == 'object' || type == 'function');\n }\n\n /**\n * Checks if `value` is object-like. A value is object-like if it's not `null`\n * and has a `typeof` result of \"object\".\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n * @example\n *\n * _.isObjectLike({});\n * // => true\n *\n * _.isObjectLike([1, 2, 3]);\n * // => true\n *\n * _.isObjectLike(_.noop);\n * // => false\n *\n * _.isObjectLike(null);\n * // => false\n */\n function isObjectLike(value) {\n return value != null && typeof value == 'object';\n }\n\n /**\n * Checks if `value` is classified as a `Map` object.\n *\n * @static\n * @memberOf _\n * @since 4.3.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a map, else `false`.\n * @example\n *\n * _.isMap(new Map);\n * // => true\n *\n * _.isMap(new WeakMap);\n * // => false\n */\n var isMap = nodeIsMap ? baseUnary(nodeIsMap) : baseIsMap;\n\n /**\n * Performs a partial deep comparison between `object` and `source` to\n * determine if `object` contains equivalent property values.\n *\n * **Note:** This method is equivalent to `_.matches` when `source` is\n * partially applied.\n *\n * Partial comparisons will match empty array and empty object `source`\n * values against any array or object value, respectively. See `_.isEqual`\n * for a list of supported value comparisons.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Lang\n * @param {Object} object The object to inspect.\n * @param {Object} source The object of property values to match.\n * @returns {boolean} Returns `true` if `object` is a match, else `false`.\n * @example\n *\n * var object = { 'a': 1, 'b': 2 };\n *\n * _.isMatch(object, { 'b': 2 });\n * // => true\n *\n * _.isMatch(object, { 'b': 1 });\n * // => false\n */\n function isMatch(object, source) {\n return object === source || baseIsMatch(object, source, getMatchData(source));\n }\n\n /**\n * This method is like `_.isMatch` except that it accepts `customizer` which\n * is invoked to compare values. If `customizer` returns `undefined`, comparisons\n * are handled by the method instead. The `customizer` is invoked with five\n * arguments: (objValue, srcValue, index|key, object, source).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {Object} object The object to inspect.\n * @param {Object} source The object of property values to match.\n * @param {Function} [customizer] The function to customize comparisons.\n * @returns {boolean} Returns `true` if `object` is a match, else `false`.\n * @example\n *\n * function isGreeting(value) {\n * return /^h(?:i|ello)$/.test(value);\n * }\n *\n * function customizer(objValue, srcValue) {\n * if (isGreeting(objValue) && isGreeting(srcValue)) {\n * return true;\n * }\n * }\n *\n * var object = { 'greeting': 'hello' };\n * var source = { 'greeting': 'hi' };\n *\n * _.isMatchWith(object, source, customizer);\n * // => true\n */\n function isMatchWith(object, source, customizer) {\n customizer = typeof customizer == 'function' ? customizer : undefined;\n return baseIsMatch(object, source, getMatchData(source), customizer);\n }\n\n /**\n * Checks if `value` is `NaN`.\n *\n * **Note:** This method is based on\n * [`Number.isNaN`](https://mdn.io/Number/isNaN) and is not the same as\n * global [`isNaN`](https://mdn.io/isNaN) which returns `true` for\n * `undefined` and other non-number values.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is `NaN`, else `false`.\n * @example\n *\n * _.isNaN(NaN);\n * // => true\n *\n * _.isNaN(new Number(NaN));\n * // => true\n *\n * isNaN(undefined);\n * // => true\n *\n * _.isNaN(undefined);\n * // => false\n */\n function isNaN(value) {\n // An `NaN` primitive is the only value that is not equal to itself.\n // Perform the `toStringTag` check first to avoid errors with some\n // ActiveX objects in IE.\n return isNumber(value) && value != +value;\n }\n\n /**\n * Checks if `value` is a pristine native function.\n *\n * **Note:** This method can't reliably detect native functions in the presence\n * of the core-js package because core-js circumvents this kind of detection.\n * Despite multiple requests, the core-js maintainer has made it clear: any\n * attempt to fix the detection will be obstructed. As a result, we're left\n * with little choice but to throw an error. Unfortunately, this also affects\n * packages, like [babel-polyfill](https://www.npmjs.com/package/babel-polyfill),\n * which rely on core-js.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a native function,\n * else `false`.\n * @example\n *\n * _.isNative(Array.prototype.push);\n * // => true\n *\n * _.isNative(_);\n * // => false\n */\n function isNative(value) {\n if (isMaskable(value)) {\n throw new Error(CORE_ERROR_TEXT);\n }\n return baseIsNative(value);\n }\n\n /**\n * Checks if `value` is `null`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is `null`, else `false`.\n * @example\n *\n * _.isNull(null);\n * // => true\n *\n * _.isNull(void 0);\n * // => false\n */\n function isNull(value) {\n return value === null;\n }\n\n /**\n * Checks if `value` is `null` or `undefined`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is nullish, else `false`.\n * @example\n *\n * _.isNil(null);\n * // => true\n *\n * _.isNil(void 0);\n * // => true\n *\n * _.isNil(NaN);\n * // => false\n */\n function isNil(value) {\n return value == null;\n }\n\n /**\n * Checks if `value` is classified as a `Number` primitive or object.\n *\n * **Note:** To exclude `Infinity`, `-Infinity`, and `NaN`, which are\n * classified as numbers, use the `_.isFinite` method.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a number, else `false`.\n * @example\n *\n * _.isNumber(3);\n * // => true\n *\n * _.isNumber(Number.MIN_VALUE);\n * // => true\n *\n * _.isNumber(Infinity);\n * // => true\n *\n * _.isNumber('3');\n * // => false\n */\n function isNumber(value) {\n return typeof value == 'number' ||\n (isObjectLike(value) && baseGetTag(value) == numberTag);\n }\n\n /**\n * Checks if `value` is a plain object, that is, an object created by the\n * `Object` constructor or one with a `[[Prototype]]` of `null`.\n *\n * @static\n * @memberOf _\n * @since 0.8.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a plain object, else `false`.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * }\n *\n * _.isPlainObject(new Foo);\n * // => false\n *\n * _.isPlainObject([1, 2, 3]);\n * // => false\n *\n * _.isPlainObject({ 'x': 0, 'y': 0 });\n * // => true\n *\n * _.isPlainObject(Object.create(null));\n * // => true\n */\n function isPlainObject(value) {\n if (!isObjectLike(value) || baseGetTag(value) != objectTag) {\n return false;\n }\n var proto = getPrototype(value);\n if (proto === null) {\n return true;\n }\n var Ctor = hasOwnProperty.call(proto, 'constructor') && proto.constructor;\n return typeof Ctor == 'function' && Ctor instanceof Ctor &&\n funcToString.call(Ctor) == objectCtorString;\n }\n\n /**\n * Checks if `value` is classified as a `RegExp` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a regexp, else `false`.\n * @example\n *\n * _.isRegExp(/abc/);\n * // => true\n *\n * _.isRegExp('/abc/');\n * // => false\n */\n var isRegExp = nodeIsRegExp ? baseUnary(nodeIsRegExp) : baseIsRegExp;\n\n /**\n * Checks if `value` is a safe integer. An integer is safe if it's an IEEE-754\n * double precision number which isn't the result of a rounded unsafe integer.\n *\n * **Note:** This method is based on\n * [`Number.isSafeInteger`](https://mdn.io/Number/isSafeInteger).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a safe integer, else `false`.\n * @example\n *\n * _.isSafeInteger(3);\n * // => true\n *\n * _.isSafeInteger(Number.MIN_VALUE);\n * // => false\n *\n * _.isSafeInteger(Infinity);\n * // => false\n *\n * _.isSafeInteger('3');\n * // => false\n */\n function isSafeInteger(value) {\n return isInteger(value) && value >= -MAX_SAFE_INTEGER && value <= MAX_SAFE_INTEGER;\n }\n\n /**\n * Checks if `value` is classified as a `Set` object.\n *\n * @static\n * @memberOf _\n * @since 4.3.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a set, else `false`.\n * @example\n *\n * _.isSet(new Set);\n * // => true\n *\n * _.isSet(new WeakSet);\n * // => false\n */\n var isSet = nodeIsSet ? baseUnary(nodeIsSet) : baseIsSet;\n\n /**\n * Checks if `value` is classified as a `String` primitive or object.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a string, else `false`.\n * @example\n *\n * _.isString('abc');\n * // => true\n *\n * _.isString(1);\n * // => false\n */\n function isString(value) {\n return typeof value == 'string' ||\n (!isArray(value) && isObjectLike(value) && baseGetTag(value) == stringTag);\n }\n\n /**\n * Checks if `value` is classified as a `Symbol` primitive or object.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a symbol, else `false`.\n * @example\n *\n * _.isSymbol(Symbol.iterator);\n * // => true\n *\n * _.isSymbol('abc');\n * // => false\n */\n function isSymbol(value) {\n return typeof value == 'symbol' ||\n (isObjectLike(value) && baseGetTag(value) == symbolTag);\n }\n\n /**\n * Checks if `value` is classified as a typed array.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a typed array, else `false`.\n * @example\n *\n * _.isTypedArray(new Uint8Array);\n * // => true\n *\n * _.isTypedArray([]);\n * // => false\n */\n var isTypedArray = nodeIsTypedArray ? baseUnary(nodeIsTypedArray) : baseIsTypedArray;\n\n /**\n * Checks if `value` is `undefined`.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is `undefined`, else `false`.\n * @example\n *\n * _.isUndefined(void 0);\n * // => true\n *\n * _.isUndefined(null);\n * // => false\n */\n function isUndefined(value) {\n return value === undefined;\n }\n\n /**\n * Checks if `value` is classified as a `WeakMap` object.\n *\n * @static\n * @memberOf _\n * @since 4.3.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a weak map, else `false`.\n * @example\n *\n * _.isWeakMap(new WeakMap);\n * // => true\n *\n * _.isWeakMap(new Map);\n * // => false\n */\n function isWeakMap(value) {\n return isObjectLike(value) && getTag(value) == weakMapTag;\n }\n\n /**\n * Checks if `value` is classified as a `WeakSet` object.\n *\n * @static\n * @memberOf _\n * @since 4.3.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a weak set, else `false`.\n * @example\n *\n * _.isWeakSet(new WeakSet);\n * // => true\n *\n * _.isWeakSet(new Set);\n * // => false\n */\n function isWeakSet(value) {\n return isObjectLike(value) && baseGetTag(value) == weakSetTag;\n }\n\n /**\n * Checks if `value` is less than `other`.\n *\n * @static\n * @memberOf _\n * @since 3.9.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if `value` is less than `other`,\n * else `false`.\n * @see _.gt\n * @example\n *\n * _.lt(1, 3);\n * // => true\n *\n * _.lt(3, 3);\n * // => false\n *\n * _.lt(3, 1);\n * // => false\n */\n var lt = createRelationalOperation(baseLt);\n\n /**\n * Checks if `value` is less than or equal to `other`.\n *\n * @static\n * @memberOf _\n * @since 3.9.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if `value` is less than or equal to\n * `other`, else `false`.\n * @see _.gte\n * @example\n *\n * _.lte(1, 3);\n * // => true\n *\n * _.lte(3, 3);\n * // => true\n *\n * _.lte(3, 1);\n * // => false\n */\n var lte = createRelationalOperation(function(value, other) {\n return value <= other;\n });\n\n /**\n * Converts `value` to an array.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {Array} Returns the converted array.\n * @example\n *\n * _.toArray({ 'a': 1, 'b': 2 });\n * // => [1, 2]\n *\n * _.toArray('abc');\n * // => ['a', 'b', 'c']\n *\n * _.toArray(1);\n * // => []\n *\n * _.toArray(null);\n * // => []\n */\n function toArray(value) {\n if (!value) {\n return [];\n }\n if (isArrayLike(value)) {\n return isString(value) ? stringToArray(value) : copyArray(value);\n }\n if (symIterator && value[symIterator]) {\n return iteratorToArray(value[symIterator]());\n }\n var tag = getTag(value),\n func = tag == mapTag ? mapToArray : (tag == setTag ? setToArray : values);\n\n return func(value);\n }\n\n /**\n * Converts `value` to a finite number.\n *\n * @static\n * @memberOf _\n * @since 4.12.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {number} Returns the converted number.\n * @example\n *\n * _.toFinite(3.2);\n * // => 3.2\n *\n * _.toFinite(Number.MIN_VALUE);\n * // => 5e-324\n *\n * _.toFinite(Infinity);\n * // => 1.7976931348623157e+308\n *\n * _.toFinite('3.2');\n * // => 3.2\n */\n function toFinite(value) {\n if (!value) {\n return value === 0 ? value : 0;\n }\n value = toNumber(value);\n if (value === INFINITY || value === -INFINITY) {\n var sign = (value < 0 ? -1 : 1);\n return sign * MAX_INTEGER;\n }\n return value === value ? value : 0;\n }\n\n /**\n * Converts `value` to an integer.\n *\n * **Note:** This method is loosely based on\n * [`ToInteger`](http://www.ecma-international.org/ecma-262/7.0/#sec-tointeger).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {number} Returns the converted integer.\n * @example\n *\n * _.toInteger(3.2);\n * // => 3\n *\n * _.toInteger(Number.MIN_VALUE);\n * // => 0\n *\n * _.toInteger(Infinity);\n * // => 1.7976931348623157e+308\n *\n * _.toInteger('3.2');\n * // => 3\n */\n function toInteger(value) {\n var result = toFinite(value),\n remainder = result % 1;\n\n return result === result ? (remainder ? result - remainder : result) : 0;\n }\n\n /**\n * Converts `value` to an integer suitable for use as the length of an\n * array-like object.\n *\n * **Note:** This method is based on\n * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {number} Returns the converted integer.\n * @example\n *\n * _.toLength(3.2);\n * // => 3\n *\n * _.toLength(Number.MIN_VALUE);\n * // => 0\n *\n * _.toLength(Infinity);\n * // => 4294967295\n *\n * _.toLength('3.2');\n * // => 3\n */\n function toLength(value) {\n return value ? baseClamp(toInteger(value), 0, MAX_ARRAY_LENGTH) : 0;\n }\n\n /**\n * Converts `value` to a number.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to process.\n * @returns {number} Returns the number.\n * @example\n *\n * _.toNumber(3.2);\n * // => 3.2\n *\n * _.toNumber(Number.MIN_VALUE);\n * // => 5e-324\n *\n * _.toNumber(Infinity);\n * // => Infinity\n *\n * _.toNumber('3.2');\n * // => 3.2\n */\n function toNumber(value) {\n if (typeof value == 'number') {\n return value;\n }\n if (isSymbol(value)) {\n return NAN;\n }\n if (isObject(value)) {\n var other = typeof value.valueOf == 'function' ? value.valueOf() : value;\n value = isObject(other) ? (other + '') : other;\n }\n if (typeof value != 'string') {\n return value === 0 ? value : +value;\n }\n value = value.replace(reTrim, '');\n var isBinary = reIsBinary.test(value);\n return (isBinary || reIsOctal.test(value))\n ? freeParseInt(value.slice(2), isBinary ? 2 : 8)\n : (reIsBadHex.test(value) ? NAN : +value);\n }\n\n /**\n * Converts `value` to a plain object flattening inherited enumerable string\n * keyed properties of `value` to own properties of the plain object.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {Object} Returns the converted plain object.\n * @example\n *\n * function Foo() {\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.assign({ 'a': 1 }, new Foo);\n * // => { 'a': 1, 'b': 2 }\n *\n * _.assign({ 'a': 1 }, _.toPlainObject(new Foo));\n * // => { 'a': 1, 'b': 2, 'c': 3 }\n */\n function toPlainObject(value) {\n return copyObject(value, keysIn(value));\n }\n\n /**\n * Converts `value` to a safe integer. A safe integer can be compared and\n * represented correctly.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {number} Returns the converted integer.\n * @example\n *\n * _.toSafeInteger(3.2);\n * // => 3\n *\n * _.toSafeInteger(Number.MIN_VALUE);\n * // => 0\n *\n * _.toSafeInteger(Infinity);\n * // => 9007199254740991\n *\n * _.toSafeInteger('3.2');\n * // => 3\n */\n function toSafeInteger(value) {\n return value\n ? baseClamp(toInteger(value), -MAX_SAFE_INTEGER, MAX_SAFE_INTEGER)\n : (value === 0 ? value : 0);\n }\n\n /**\n * Converts `value` to a string. An empty string is returned for `null`\n * and `undefined` values. The sign of `-0` is preserved.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {string} Returns the converted string.\n * @example\n *\n * _.toString(null);\n * // => ''\n *\n * _.toString(-0);\n * // => '-0'\n *\n * _.toString([1, 2, 3]);\n * // => '1,2,3'\n */\n function toString(value) {\n return value == null ? '' : baseToString(value);\n }\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Assigns own enumerable string keyed properties of source objects to the\n * destination object. Source objects are applied from left to right.\n * Subsequent sources overwrite property assignments of previous sources.\n *\n * **Note:** This method mutates `object` and is loosely based on\n * [`Object.assign`](https://mdn.io/Object/assign).\n *\n * @static\n * @memberOf _\n * @since 0.10.0\n * @category Object\n * @param {Object} object The destination object.\n * @param {...Object} [sources] The source objects.\n * @returns {Object} Returns `object`.\n * @see _.assignIn\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * }\n *\n * function Bar() {\n * this.c = 3;\n * }\n *\n * Foo.prototype.b = 2;\n * Bar.prototype.d = 4;\n *\n * _.assign({ 'a': 0 }, new Foo, new Bar);\n * // => { 'a': 1, 'c': 3 }\n */\n var assign = createAssigner(function(object, source) {\n if (isPrototype(source) || isArrayLike(source)) {\n copyObject(source, keys(source), object);\n return;\n }\n for (var key in source) {\n if (hasOwnProperty.call(source, key)) {\n assignValue(object, key, source[key]);\n }\n }\n });\n\n /**\n * This method is like `_.assign` except that it iterates over own and\n * inherited source properties.\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @alias extend\n * @category Object\n * @param {Object} object The destination object.\n * @param {...Object} [sources] The source objects.\n * @returns {Object} Returns `object`.\n * @see _.assign\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * }\n *\n * function Bar() {\n * this.c = 3;\n * }\n *\n * Foo.prototype.b = 2;\n * Bar.prototype.d = 4;\n *\n * _.assignIn({ 'a': 0 }, new Foo, new Bar);\n * // => { 'a': 1, 'b': 2, 'c': 3, 'd': 4 }\n */\n var assignIn = createAssigner(function(object, source) {\n copyObject(source, keysIn(source), object);\n });\n\n /**\n * This method is like `_.assignIn` except that it accepts `customizer`\n * which is invoked to produce the assigned values. If `customizer` returns\n * `undefined`, assignment is handled by the method instead. The `customizer`\n * is invoked with five arguments: (objValue, srcValue, key, object, source).\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @alias extendWith\n * @category Object\n * @param {Object} object The destination object.\n * @param {...Object} sources The source objects.\n * @param {Function} [customizer] The function to customize assigned values.\n * @returns {Object} Returns `object`.\n * @see _.assignWith\n * @example\n *\n * function customizer(objValue, srcValue) {\n * return _.isUndefined(objValue) ? srcValue : objValue;\n * }\n *\n * var defaults = _.partialRight(_.assignInWith, customizer);\n *\n * defaults({ 'a': 1 }, { 'b': 2 }, { 'a': 3 });\n * // => { 'a': 1, 'b': 2 }\n */\n var assignInWith = createAssigner(function(object, source, srcIndex, customizer) {\n copyObject(source, keysIn(source), object, customizer);\n });\n\n /**\n * This method is like `_.assign` except that it accepts `customizer`\n * which is invoked to produce the assigned values. If `customizer` returns\n * `undefined`, assignment is handled by the method instead. The `customizer`\n * is invoked with five arguments: (objValue, srcValue, key, object, source).\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Object\n * @param {Object} object The destination object.\n * @param {...Object} sources The source objects.\n * @param {Function} [customizer] The function to customize assigned values.\n * @returns {Object} Returns `object`.\n * @see _.assignInWith\n * @example\n *\n * function customizer(objValue, srcValue) {\n * return _.isUndefined(objValue) ? srcValue : objValue;\n * }\n *\n * var defaults = _.partialRight(_.assignWith, customizer);\n *\n * defaults({ 'a': 1 }, { 'b': 2 }, { 'a': 3 });\n * // => { 'a': 1, 'b': 2 }\n */\n var assignWith = createAssigner(function(object, source, srcIndex, customizer) {\n copyObject(source, keys(source), object, customizer);\n });\n\n /**\n * Creates an array of values corresponding to `paths` of `object`.\n *\n * @static\n * @memberOf _\n * @since 1.0.0\n * @category Object\n * @param {Object} object The object to iterate over.\n * @param {...(string|string[])} [paths] The property paths to pick.\n * @returns {Array} Returns the picked values.\n * @example\n *\n * var object = { 'a': [{ 'b': { 'c': 3 } }, 4] };\n *\n * _.at(object, ['a[0].b.c', 'a[1]']);\n * // => [3, 4]\n */\n var at = flatRest(baseAt);\n\n /**\n * Creates an object that inherits from the `prototype` object. If a\n * `properties` object is given, its own enumerable string keyed properties\n * are assigned to the created object.\n *\n * @static\n * @memberOf _\n * @since 2.3.0\n * @category Object\n * @param {Object} prototype The object to inherit from.\n * @param {Object} [properties] The properties to assign to the object.\n * @returns {Object} Returns the new object.\n * @example\n *\n * function Shape() {\n * this.x = 0;\n * this.y = 0;\n * }\n *\n * function Circle() {\n * Shape.call(this);\n * }\n *\n * Circle.prototype = _.create(Shape.prototype, {\n * 'constructor': Circle\n * });\n *\n * var circle = new Circle;\n * circle instanceof Circle;\n * // => true\n *\n * circle instanceof Shape;\n * // => true\n */\n function create(prototype, properties) {\n var result = baseCreate(prototype);\n return properties == null ? result : baseAssign(result, properties);\n }\n\n /**\n * Assigns own and inherited enumerable string keyed properties of source\n * objects to the destination object for all destination properties that\n * resolve to `undefined`. Source objects are applied from left to right.\n * Once a property is set, additional values of the same property are ignored.\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The destination object.\n * @param {...Object} [sources] The source objects.\n * @returns {Object} Returns `object`.\n * @see _.defaultsDeep\n * @example\n *\n * _.defaults({ 'a': 1 }, { 'b': 2 }, { 'a': 3 });\n * // => { 'a': 1, 'b': 2 }\n */\n var defaults = baseRest(function(object, sources) {\n object = Object(object);\n\n var index = -1;\n var length = sources.length;\n var guard = length > 2 ? sources[2] : undefined;\n\n if (guard && isIterateeCall(sources[0], sources[1], guard)) {\n length = 1;\n }\n\n while (++index < length) {\n var source = sources[index];\n var props = keysIn(source);\n var propsIndex = -1;\n var propsLength = props.length;\n\n while (++propsIndex < propsLength) {\n var key = props[propsIndex];\n var value = object[key];\n\n if (value === undefined ||\n (eq(value, objectProto[key]) && !hasOwnProperty.call(object, key))) {\n object[key] = source[key];\n }\n }\n }\n\n return object;\n });\n\n /**\n * This method is like `_.defaults` except that it recursively assigns\n * default properties.\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 3.10.0\n * @category Object\n * @param {Object} object The destination object.\n * @param {...Object} [sources] The source objects.\n * @returns {Object} Returns `object`.\n * @see _.defaults\n * @example\n *\n * _.defaultsDeep({ 'a': { 'b': 2 } }, { 'a': { 'b': 1, 'c': 3 } });\n * // => { 'a': { 'b': 2, 'c': 3 } }\n */\n var defaultsDeep = baseRest(function(args) {\n args.push(undefined, customDefaultsMerge);\n return apply(mergeWith, undefined, args);\n });\n\n /**\n * This method is like `_.find` except that it returns the key of the first\n * element `predicate` returns truthy for instead of the element itself.\n *\n * @static\n * @memberOf _\n * @since 1.1.0\n * @category Object\n * @param {Object} object The object to inspect.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @returns {string|undefined} Returns the key of the matched element,\n * else `undefined`.\n * @example\n *\n * var users = {\n * 'barney': { 'age': 36, 'active': true },\n * 'fred': { 'age': 40, 'active': false },\n * 'pebbles': { 'age': 1, 'active': true }\n * };\n *\n * _.findKey(users, function(o) { return o.age < 40; });\n * // => 'barney' (iteration order is not guaranteed)\n *\n * // The `_.matches` iteratee shorthand.\n * _.findKey(users, { 'age': 1, 'active': true });\n * // => 'pebbles'\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.findKey(users, ['active', false]);\n * // => 'fred'\n *\n * // The `_.property` iteratee shorthand.\n * _.findKey(users, 'active');\n * // => 'barney'\n */\n function findKey(object, predicate) {\n return baseFindKey(object, getIteratee(predicate, 3), baseForOwn);\n }\n\n /**\n * This method is like `_.findKey` except that it iterates over elements of\n * a collection in the opposite order.\n *\n * @static\n * @memberOf _\n * @since 2.0.0\n * @category Object\n * @param {Object} object The object to inspect.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @returns {string|undefined} Returns the key of the matched element,\n * else `undefined`.\n * @example\n *\n * var users = {\n * 'barney': { 'age': 36, 'active': true },\n * 'fred': { 'age': 40, 'active': false },\n * 'pebbles': { 'age': 1, 'active': true }\n * };\n *\n * _.findLastKey(users, function(o) { return o.age < 40; });\n * // => returns 'pebbles' assuming `_.findKey` returns 'barney'\n *\n * // The `_.matches` iteratee shorthand.\n * _.findLastKey(users, { 'age': 36, 'active': true });\n * // => 'barney'\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.findLastKey(users, ['active', false]);\n * // => 'fred'\n *\n * // The `_.property` iteratee shorthand.\n * _.findLastKey(users, 'active');\n * // => 'pebbles'\n */\n function findLastKey(object, predicate) {\n return baseFindKey(object, getIteratee(predicate, 3), baseForOwnRight);\n }\n\n /**\n * Iterates over own and inherited enumerable string keyed properties of an\n * object and invokes `iteratee` for each property. The iteratee is invoked\n * with three arguments: (value, key, object). Iteratee functions may exit\n * iteration early by explicitly returning `false`.\n *\n * @static\n * @memberOf _\n * @since 0.3.0\n * @category Object\n * @param {Object} object The object to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Object} Returns `object`.\n * @see _.forInRight\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.forIn(new Foo, function(value, key) {\n * console.log(key);\n * });\n * // => Logs 'a', 'b', then 'c' (iteration order is not guaranteed).\n */\n function forIn(object, iteratee) {\n return object == null\n ? object\n : baseFor(object, getIteratee(iteratee, 3), keysIn);\n }\n\n /**\n * This method is like `_.forIn` except that it iterates over properties of\n * `object` in the opposite order.\n *\n * @static\n * @memberOf _\n * @since 2.0.0\n * @category Object\n * @param {Object} object The object to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Object} Returns `object`.\n * @see _.forIn\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.forInRight(new Foo, function(value, key) {\n * console.log(key);\n * });\n * // => Logs 'c', 'b', then 'a' assuming `_.forIn` logs 'a', 'b', then 'c'.\n */\n function forInRight(object, iteratee) {\n return object == null\n ? object\n : baseForRight(object, getIteratee(iteratee, 3), keysIn);\n }\n\n /**\n * Iterates over own enumerable string keyed properties of an object and\n * invokes `iteratee` for each property. The iteratee is invoked with three\n * arguments: (value, key, object). Iteratee functions may exit iteration\n * early by explicitly returning `false`.\n *\n * @static\n * @memberOf _\n * @since 0.3.0\n * @category Object\n * @param {Object} object The object to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Object} Returns `object`.\n * @see _.forOwnRight\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.forOwn(new Foo, function(value, key) {\n * console.log(key);\n * });\n * // => Logs 'a' then 'b' (iteration order is not guaranteed).\n */\n function forOwn(object, iteratee) {\n return object && baseForOwn(object, getIteratee(iteratee, 3));\n }\n\n /**\n * This method is like `_.forOwn` except that it iterates over properties of\n * `object` in the opposite order.\n *\n * @static\n * @memberOf _\n * @since 2.0.0\n * @category Object\n * @param {Object} object The object to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Object} Returns `object`.\n * @see _.forOwn\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.forOwnRight(new Foo, function(value, key) {\n * console.log(key);\n * });\n * // => Logs 'b' then 'a' assuming `_.forOwn` logs 'a' then 'b'.\n */\n function forOwnRight(object, iteratee) {\n return object && baseForOwnRight(object, getIteratee(iteratee, 3));\n }\n\n /**\n * Creates an array of function property names from own enumerable properties\n * of `object`.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The object to inspect.\n * @returns {Array} Returns the function names.\n * @see _.functionsIn\n * @example\n *\n * function Foo() {\n * this.a = _.constant('a');\n * this.b = _.constant('b');\n * }\n *\n * Foo.prototype.c = _.constant('c');\n *\n * _.functions(new Foo);\n * // => ['a', 'b']\n */\n function functions(object) {\n return object == null ? [] : baseFunctions(object, keys(object));\n }\n\n /**\n * Creates an array of function property names from own and inherited\n * enumerable properties of `object`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Object\n * @param {Object} object The object to inspect.\n * @returns {Array} Returns the function names.\n * @see _.functions\n * @example\n *\n * function Foo() {\n * this.a = _.constant('a');\n * this.b = _.constant('b');\n * }\n *\n * Foo.prototype.c = _.constant('c');\n *\n * _.functionsIn(new Foo);\n * // => ['a', 'b', 'c']\n */\n function functionsIn(object) {\n return object == null ? [] : baseFunctions(object, keysIn(object));\n }\n\n /**\n * Gets the value at `path` of `object`. If the resolved value is\n * `undefined`, the `defaultValue` is returned in its place.\n *\n * @static\n * @memberOf _\n * @since 3.7.0\n * @category Object\n * @param {Object} object The object to query.\n * @param {Array|string} path The path of the property to get.\n * @param {*} [defaultValue] The value returned for `undefined` resolved values.\n * @returns {*} Returns the resolved value.\n * @example\n *\n * var object = { 'a': [{ 'b': { 'c': 3 } }] };\n *\n * _.get(object, 'a[0].b.c');\n * // => 3\n *\n * _.get(object, ['a', '0', 'b', 'c']);\n * // => 3\n *\n * _.get(object, 'a.b.c', 'default');\n * // => 'default'\n */\n function get(object, path, defaultValue) {\n var result = object == null ? undefined : baseGet(object, path);\n return result === undefined ? defaultValue : result;\n }\n\n /**\n * Checks if `path` is a direct property of `object`.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The object to query.\n * @param {Array|string} path The path to check.\n * @returns {boolean} Returns `true` if `path` exists, else `false`.\n * @example\n *\n * var object = { 'a': { 'b': 2 } };\n * var other = _.create({ 'a': _.create({ 'b': 2 }) });\n *\n * _.has(object, 'a');\n * // => true\n *\n * _.has(object, 'a.b');\n * // => true\n *\n * _.has(object, ['a', 'b']);\n * // => true\n *\n * _.has(other, 'a');\n * // => false\n */\n function has(object, path) {\n return object != null && hasPath(object, path, baseHas);\n }\n\n /**\n * Checks if `path` is a direct or inherited property of `object`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Object\n * @param {Object} object The object to query.\n * @param {Array|string} path The path to check.\n * @returns {boolean} Returns `true` if `path` exists, else `false`.\n * @example\n *\n * var object = _.create({ 'a': _.create({ 'b': 2 }) });\n *\n * _.hasIn(object, 'a');\n * // => true\n *\n * _.hasIn(object, 'a.b');\n * // => true\n *\n * _.hasIn(object, ['a', 'b']);\n * // => true\n *\n * _.hasIn(object, 'b');\n * // => false\n */\n function hasIn(object, path) {\n return object != null && hasPath(object, path, baseHasIn);\n }\n\n /**\n * Creates an object composed of the inverted keys and values of `object`.\n * If `object` contains duplicate values, subsequent values overwrite\n * property assignments of previous values.\n *\n * @static\n * @memberOf _\n * @since 0.7.0\n * @category Object\n * @param {Object} object The object to invert.\n * @returns {Object} Returns the new inverted object.\n * @example\n *\n * var object = { 'a': 1, 'b': 2, 'c': 1 };\n *\n * _.invert(object);\n * // => { '1': 'c', '2': 'b' }\n */\n var invert = createInverter(function(result, value, key) {\n if (value != null &&\n typeof value.toString != 'function') {\n value = nativeObjectToString.call(value);\n }\n\n result[value] = key;\n }, constant(identity));\n\n /**\n * This method is like `_.invert` except that the inverted object is generated\n * from the results of running each element of `object` thru `iteratee`. The\n * corresponding inverted value of each inverted key is an array of keys\n * responsible for generating the inverted value. The iteratee is invoked\n * with one argument: (value).\n *\n * @static\n * @memberOf _\n * @since 4.1.0\n * @category Object\n * @param {Object} object The object to invert.\n * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n * @returns {Object} Returns the new inverted object.\n * @example\n *\n * var object = { 'a': 1, 'b': 2, 'c': 1 };\n *\n * _.invertBy(object);\n * // => { '1': ['a', 'c'], '2': ['b'] }\n *\n * _.invertBy(object, function(value) {\n * return 'group' + value;\n * });\n * // => { 'group1': ['a', 'c'], 'group2': ['b'] }\n */\n var invertBy = createInverter(function(result, value, key) {\n if (value != null &&\n typeof value.toString != 'function') {\n value = nativeObjectToString.call(value);\n }\n\n if (hasOwnProperty.call(result, value)) {\n result[value].push(key);\n } else {\n result[value] = [key];\n }\n }, getIteratee);\n\n /**\n * Invokes the method at `path` of `object`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Object\n * @param {Object} object The object to query.\n * @param {Array|string} path The path of the method to invoke.\n * @param {...*} [args] The arguments to invoke the method with.\n * @returns {*} Returns the result of the invoked method.\n * @example\n *\n * var object = { 'a': [{ 'b': { 'c': [1, 2, 3, 4] } }] };\n *\n * _.invoke(object, 'a[0].b.c.slice', 1, 3);\n * // => [2, 3]\n */\n var invoke = baseRest(baseInvoke);\n\n /**\n * Creates an array of the own enumerable property names of `object`.\n *\n * **Note:** Non-object values are coerced to objects. See the\n * [ES spec](http://ecma-international.org/ecma-262/7.0/#sec-object.keys)\n * for more details.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.keys(new Foo);\n * // => ['a', 'b'] (iteration order is not guaranteed)\n *\n * _.keys('hi');\n * // => ['0', '1']\n */\n function keys(object) {\n return isArrayLike(object) ? arrayLikeKeys(object) : baseKeys(object);\n }\n\n /**\n * Creates an array of the own and inherited enumerable property names of `object`.\n *\n * **Note:** Non-object values are coerced to objects.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.keysIn(new Foo);\n * // => ['a', 'b', 'c'] (iteration order is not guaranteed)\n */\n function keysIn(object) {\n return isArrayLike(object) ? arrayLikeKeys(object, true) : baseKeysIn(object);\n }\n\n /**\n * The opposite of `_.mapValues`; this method creates an object with the\n * same values as `object` and keys generated by running each own enumerable\n * string keyed property of `object` thru `iteratee`. The iteratee is invoked\n * with three arguments: (value, key, object).\n *\n * @static\n * @memberOf _\n * @since 3.8.0\n * @category Object\n * @param {Object} object The object to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Object} Returns the new mapped object.\n * @see _.mapValues\n * @example\n *\n * _.mapKeys({ 'a': 1, 'b': 2 }, function(value, key) {\n * return key + value;\n * });\n * // => { 'a1': 1, 'b2': 2 }\n */\n function mapKeys(object, iteratee) {\n var result = {};\n iteratee = getIteratee(iteratee, 3);\n\n baseForOwn(object, function(value, key, object) {\n baseAssignValue(result, iteratee(value, key, object), value);\n });\n return result;\n }\n\n /**\n * Creates an object with the same keys as `object` and values generated\n * by running each own enumerable string keyed property of `object` thru\n * `iteratee`. The iteratee is invoked with three arguments:\n * (value, key, object).\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Object\n * @param {Object} object The object to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Object} Returns the new mapped object.\n * @see _.mapKeys\n * @example\n *\n * var users = {\n * 'fred': { 'user': 'fred', 'age': 40 },\n * 'pebbles': { 'user': 'pebbles', 'age': 1 }\n * };\n *\n * _.mapValues(users, function(o) { return o.age; });\n * // => { 'fred': 40, 'pebbles': 1 } (iteration order is not guaranteed)\n *\n * // The `_.property` iteratee shorthand.\n * _.mapValues(users, 'age');\n * // => { 'fred': 40, 'pebbles': 1 } (iteration order is not guaranteed)\n */\n function mapValues(object, iteratee) {\n var result = {};\n iteratee = getIteratee(iteratee, 3);\n\n baseForOwn(object, function(value, key, object) {\n baseAssignValue(result, key, iteratee(value, key, object));\n });\n return result;\n }\n\n /**\n * This method is like `_.assign` except that it recursively merges own and\n * inherited enumerable string keyed properties of source objects into the\n * destination object. Source properties that resolve to `undefined` are\n * skipped if a destination value exists. Array and plain object properties\n * are merged recursively. Other objects and value types are overridden by\n * assignment. Source objects are applied from left to right. Subsequent\n * sources overwrite property assignments of previous sources.\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 0.5.0\n * @category Object\n * @param {Object} object The destination object.\n * @param {...Object} [sources] The source objects.\n * @returns {Object} Returns `object`.\n * @example\n *\n * var object = {\n * 'a': [{ 'b': 2 }, { 'd': 4 }]\n * };\n *\n * var other = {\n * 'a': [{ 'c': 3 }, { 'e': 5 }]\n * };\n *\n * _.merge(object, other);\n * // => { 'a': [{ 'b': 2, 'c': 3 }, { 'd': 4, 'e': 5 }] }\n */\n var merge = createAssigner(function(object, source, srcIndex) {\n baseMerge(object, source, srcIndex);\n });\n\n /**\n * This method is like `_.merge` except that it accepts `customizer` which\n * is invoked to produce the merged values of the destination and source\n * properties. If `customizer` returns `undefined`, merging is handled by the\n * method instead. The `customizer` is invoked with six arguments:\n * (objValue, srcValue, key, object, source, stack).\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Object\n * @param {Object} object The destination object.\n * @param {...Object} sources The source objects.\n * @param {Function} customizer The function to customize assigned values.\n * @returns {Object} Returns `object`.\n * @example\n *\n * function customizer(objValue, srcValue) {\n * if (_.isArray(objValue)) {\n * return objValue.concat(srcValue);\n * }\n * }\n *\n * var object = { 'a': [1], 'b': [2] };\n * var other = { 'a': [3], 'b': [4] };\n *\n * _.mergeWith(object, other, customizer);\n * // => { 'a': [1, 3], 'b': [2, 4] }\n */\n var mergeWith = createAssigner(function(object, source, srcIndex, customizer) {\n baseMerge(object, source, srcIndex, customizer);\n });\n\n /**\n * The opposite of `_.pick`; this method creates an object composed of the\n * own and inherited enumerable property paths of `object` that are not omitted.\n *\n * **Note:** This method is considerably slower than `_.pick`.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The source object.\n * @param {...(string|string[])} [paths] The property paths to omit.\n * @returns {Object} Returns the new object.\n * @example\n *\n * var object = { 'a': 1, 'b': '2', 'c': 3 };\n *\n * _.omit(object, ['a', 'c']);\n * // => { 'b': '2' }\n */\n var omit = flatRest(function(object, paths) {\n var result = {};\n if (object == null) {\n return result;\n }\n var isDeep = false;\n paths = arrayMap(paths, function(path) {\n path = castPath(path, object);\n isDeep || (isDeep = path.length > 1);\n return path;\n });\n copyObject(object, getAllKeysIn(object), result);\n if (isDeep) {\n result = baseClone(result, CLONE_DEEP_FLAG | CLONE_FLAT_FLAG | CLONE_SYMBOLS_FLAG, customOmitClone);\n }\n var length = paths.length;\n while (length--) {\n baseUnset(result, paths[length]);\n }\n return result;\n });\n\n /**\n * The opposite of `_.pickBy`; this method creates an object composed of\n * the own and inherited enumerable string keyed properties of `object` that\n * `predicate` doesn't return truthy for. The predicate is invoked with two\n * arguments: (value, key).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Object\n * @param {Object} object The source object.\n * @param {Function} [predicate=_.identity] The function invoked per property.\n * @returns {Object} Returns the new object.\n * @example\n *\n * var object = { 'a': 1, 'b': '2', 'c': 3 };\n *\n * _.omitBy(object, _.isNumber);\n * // => { 'b': '2' }\n */\n function omitBy(object, predicate) {\n return pickBy(object, negate(getIteratee(predicate)));\n }\n\n /**\n * Creates an object composed of the picked `object` properties.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The source object.\n * @param {...(string|string[])} [paths] The property paths to pick.\n * @returns {Object} Returns the new object.\n * @example\n *\n * var object = { 'a': 1, 'b': '2', 'c': 3 };\n *\n * _.pick(object, ['a', 'c']);\n * // => { 'a': 1, 'c': 3 }\n */\n var pick = flatRest(function(object, paths) {\n return object == null ? {} : basePick(object, paths);\n });\n\n /**\n * Creates an object composed of the `object` properties `predicate` returns\n * truthy for. The predicate is invoked with two arguments: (value, key).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Object\n * @param {Object} object The source object.\n * @param {Function} [predicate=_.identity] The function invoked per property.\n * @returns {Object} Returns the new object.\n * @example\n *\n * var object = { 'a': 1, 'b': '2', 'c': 3 };\n *\n * _.pickBy(object, _.isNumber);\n * // => { 'a': 1, 'c': 3 }\n */\n function pickBy(object, predicate) {\n if (object == null) {\n return {};\n }\n var props = arrayMap(getAllKeysIn(object), function(prop) {\n return [prop];\n });\n predicate = getIteratee(predicate);\n return basePickBy(object, props, function(value, path) {\n return predicate(value, path[0]);\n });\n }\n\n /**\n * This method is like `_.get` except that if the resolved value is a\n * function it's invoked with the `this` binding of its parent object and\n * its result is returned.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The object to query.\n * @param {Array|string} path The path of the property to resolve.\n * @param {*} [defaultValue] The value returned for `undefined` resolved values.\n * @returns {*} Returns the resolved value.\n * @example\n *\n * var object = { 'a': [{ 'b': { 'c1': 3, 'c2': _.constant(4) } }] };\n *\n * _.result(object, 'a[0].b.c1');\n * // => 3\n *\n * _.result(object, 'a[0].b.c2');\n * // => 4\n *\n * _.result(object, 'a[0].b.c3', 'default');\n * // => 'default'\n *\n * _.result(object, 'a[0].b.c3', _.constant('default'));\n * // => 'default'\n */\n function result(object, path, defaultValue) {\n path = castPath(path, object);\n\n var index = -1,\n length = path.length;\n\n // Ensure the loop is entered when path is empty.\n if (!length) {\n length = 1;\n object = undefined;\n }\n while (++index < length) {\n var value = object == null ? undefined : object[toKey(path[index])];\n if (value === undefined) {\n index = length;\n value = defaultValue;\n }\n object = isFunction(value) ? value.call(object) : value;\n }\n return object;\n }\n\n /**\n * Sets the value at `path` of `object`. If a portion of `path` doesn't exist,\n * it's created. Arrays are created for missing index properties while objects\n * are created for all other missing properties. Use `_.setWith` to customize\n * `path` creation.\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 3.7.0\n * @category Object\n * @param {Object} object The object to modify.\n * @param {Array|string} path The path of the property to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns `object`.\n * @example\n *\n * var object = { 'a': [{ 'b': { 'c': 3 } }] };\n *\n * _.set(object, 'a[0].b.c', 4);\n * console.log(object.a[0].b.c);\n * // => 4\n *\n * _.set(object, ['x', '0', 'y', 'z'], 5);\n * console.log(object.x[0].y.z);\n * // => 5\n */\n function set(object, path, value) {\n return object == null ? object : baseSet(object, path, value);\n }\n\n /**\n * This method is like `_.set` except that it accepts `customizer` which is\n * invoked to produce the objects of `path`. If `customizer` returns `undefined`\n * path creation is handled by the method instead. The `customizer` is invoked\n * with three arguments: (nsValue, key, nsObject).\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Object\n * @param {Object} object The object to modify.\n * @param {Array|string} path The path of the property to set.\n * @param {*} value The value to set.\n * @param {Function} [customizer] The function to customize assigned values.\n * @returns {Object} Returns `object`.\n * @example\n *\n * var object = {};\n *\n * _.setWith(object, '[0][1]', 'a', Object);\n * // => { '0': { '1': 'a' } }\n */\n function setWith(object, path, value, customizer) {\n customizer = typeof customizer == 'function' ? customizer : undefined;\n return object == null ? object : baseSet(object, path, value, customizer);\n }\n\n /**\n * Creates an array of own enumerable string keyed-value pairs for `object`\n * which can be consumed by `_.fromPairs`. If `object` is a map or set, its\n * entries are returned.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @alias entries\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the key-value pairs.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.toPairs(new Foo);\n * // => [['a', 1], ['b', 2]] (iteration order is not guaranteed)\n */\n var toPairs = createToPairs(keys);\n\n /**\n * Creates an array of own and inherited enumerable string keyed-value pairs\n * for `object` which can be consumed by `_.fromPairs`. If `object` is a map\n * or set, its entries are returned.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @alias entriesIn\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the key-value pairs.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.toPairsIn(new Foo);\n * // => [['a', 1], ['b', 2], ['c', 3]] (iteration order is not guaranteed)\n */\n var toPairsIn = createToPairs(keysIn);\n\n /**\n * An alternative to `_.reduce`; this method transforms `object` to a new\n * `accumulator` object which is the result of running each of its own\n * enumerable string keyed properties thru `iteratee`, with each invocation\n * potentially mutating the `accumulator` object. If `accumulator` is not\n * provided, a new object with the same `[[Prototype]]` will be used. The\n * iteratee is invoked with four arguments: (accumulator, value, key, object).\n * Iteratee functions may exit iteration early by explicitly returning `false`.\n *\n * @static\n * @memberOf _\n * @since 1.3.0\n * @category Object\n * @param {Object} object The object to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @param {*} [accumulator] The custom accumulator value.\n * @returns {*} Returns the accumulated value.\n * @example\n *\n * _.transform([2, 3, 4], function(result, n) {\n * result.push(n *= n);\n * return n % 2 == 0;\n * }, []);\n * // => [4, 9]\n *\n * _.transform({ 'a': 1, 'b': 2, 'c': 1 }, function(result, value, key) {\n * (result[value] || (result[value] = [])).push(key);\n * }, {});\n * // => { '1': ['a', 'c'], '2': ['b'] }\n */\n function transform(object, iteratee, accumulator) {\n var isArr = isArray(object),\n isArrLike = isArr || isBuffer(object) || isTypedArray(object);\n\n iteratee = getIteratee(iteratee, 4);\n if (accumulator == null) {\n var Ctor = object && object.constructor;\n if (isArrLike) {\n accumulator = isArr ? new Ctor : [];\n }\n else if (isObject(object)) {\n accumulator = isFunction(Ctor) ? baseCreate(getPrototype(object)) : {};\n }\n else {\n accumulator = {};\n }\n }\n (isArrLike ? arrayEach : baseForOwn)(object, function(value, index, object) {\n return iteratee(accumulator, value, index, object);\n });\n return accumulator;\n }\n\n /**\n * Removes the property at `path` of `object`.\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Object\n * @param {Object} object The object to modify.\n * @param {Array|string} path The path of the property to unset.\n * @returns {boolean} Returns `true` if the property is deleted, else `false`.\n * @example\n *\n * var object = { 'a': [{ 'b': { 'c': 7 } }] };\n * _.unset(object, 'a[0].b.c');\n * // => true\n *\n * console.log(object);\n * // => { 'a': [{ 'b': {} }] };\n *\n * _.unset(object, ['a', '0', 'b', 'c']);\n * // => true\n *\n * console.log(object);\n * // => { 'a': [{ 'b': {} }] };\n */\n function unset(object, path) {\n return object == null ? true : baseUnset(object, path);\n }\n\n /**\n * This method is like `_.set` except that accepts `updater` to produce the\n * value to set. Use `_.updateWith` to customize `path` creation. The `updater`\n * is invoked with one argument: (value).\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 4.6.0\n * @category Object\n * @param {Object} object The object to modify.\n * @param {Array|string} path The path of the property to set.\n * @param {Function} updater The function to produce the updated value.\n * @returns {Object} Returns `object`.\n * @example\n *\n * var object = { 'a': [{ 'b': { 'c': 3 } }] };\n *\n * _.update(object, 'a[0].b.c', function(n) { return n * n; });\n * console.log(object.a[0].b.c);\n * // => 9\n *\n * _.update(object, 'x[0].y.z', function(n) { return n ? n + 1 : 0; });\n * console.log(object.x[0].y.z);\n * // => 0\n */\n function update(object, path, updater) {\n return object == null ? object : baseUpdate(object, path, castFunction(updater));\n }\n\n /**\n * This method is like `_.update` except that it accepts `customizer` which is\n * invoked to produce the objects of `path`. If `customizer` returns `undefined`\n * path creation is handled by the method instead. The `customizer` is invoked\n * with three arguments: (nsValue, key, nsObject).\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 4.6.0\n * @category Object\n * @param {Object} object The object to modify.\n * @param {Array|string} path The path of the property to set.\n * @param {Function} updater The function to produce the updated value.\n * @param {Function} [customizer] The function to customize assigned values.\n * @returns {Object} Returns `object`.\n * @example\n *\n * var object = {};\n *\n * _.updateWith(object, '[0][1]', _.constant('a'), Object);\n * // => { '0': { '1': 'a' } }\n */\n function updateWith(object, path, updater, customizer) {\n customizer = typeof customizer == 'function' ? customizer : undefined;\n return object == null ? object : baseUpdate(object, path, castFunction(updater), customizer);\n }\n\n /**\n * Creates an array of the own enumerable string keyed property values of `object`.\n *\n * **Note:** Non-object values are coerced to objects.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property values.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.values(new Foo);\n * // => [1, 2] (iteration order is not guaranteed)\n *\n * _.values('hi');\n * // => ['h', 'i']\n */\n function values(object) {\n return object == null ? [] : baseValues(object, keys(object));\n }\n\n /**\n * Creates an array of the own and inherited enumerable string keyed property\n * values of `object`.\n *\n * **Note:** Non-object values are coerced to objects.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property values.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.valuesIn(new Foo);\n * // => [1, 2, 3] (iteration order is not guaranteed)\n */\n function valuesIn(object) {\n return object == null ? [] : baseValues(object, keysIn(object));\n }\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Clamps `number` within the inclusive `lower` and `upper` bounds.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Number\n * @param {number} number The number to clamp.\n * @param {number} [lower] The lower bound.\n * @param {number} upper The upper bound.\n * @returns {number} Returns the clamped number.\n * @example\n *\n * _.clamp(-10, -5, 5);\n * // => -5\n *\n * _.clamp(10, -5, 5);\n * // => 5\n */\n function clamp(number, lower, upper) {\n if (upper === undefined) {\n upper = lower;\n lower = undefined;\n }\n if (upper !== undefined) {\n upper = toNumber(upper);\n upper = upper === upper ? upper : 0;\n }\n if (lower !== undefined) {\n lower = toNumber(lower);\n lower = lower === lower ? lower : 0;\n }\n return baseClamp(toNumber(number), lower, upper);\n }\n\n /**\n * Checks if `n` is between `start` and up to, but not including, `end`. If\n * `end` is not specified, it's set to `start` with `start` then set to `0`.\n * If `start` is greater than `end` the params are swapped to support\n * negative ranges.\n *\n * @static\n * @memberOf _\n * @since 3.3.0\n * @category Number\n * @param {number} number The number to check.\n * @param {number} [start=0] The start of the range.\n * @param {number} end The end of the range.\n * @returns {boolean} Returns `true` if `number` is in the range, else `false`.\n * @see _.range, _.rangeRight\n * @example\n *\n * _.inRange(3, 2, 4);\n * // => true\n *\n * _.inRange(4, 8);\n * // => true\n *\n * _.inRange(4, 2);\n * // => false\n *\n * _.inRange(2, 2);\n * // => false\n *\n * _.inRange(1.2, 2);\n * // => true\n *\n * _.inRange(5.2, 4);\n * // => false\n *\n * _.inRange(-3, -2, -6);\n * // => true\n */\n function inRange(number, start, end) {\n start = toFinite(start);\n if (end === undefined) {\n end = start;\n start = 0;\n } else {\n end = toFinite(end);\n }\n number = toNumber(number);\n return baseInRange(number, start, end);\n }\n\n /**\n * Produces a random number between the inclusive `lower` and `upper` bounds.\n * If only one argument is provided a number between `0` and the given number\n * is returned. If `floating` is `true`, or either `lower` or `upper` are\n * floats, a floating-point number is returned instead of an integer.\n *\n * **Note:** JavaScript follows the IEEE-754 standard for resolving\n * floating-point values which can produce unexpected results.\n *\n * @static\n * @memberOf _\n * @since 0.7.0\n * @category Number\n * @param {number} [lower=0] The lower bound.\n * @param {number} [upper=1] The upper bound.\n * @param {boolean} [floating] Specify returning a floating-point number.\n * @returns {number} Returns the random number.\n * @example\n *\n * _.random(0, 5);\n * // => an integer between 0 and 5\n *\n * _.random(5);\n * // => also an integer between 0 and 5\n *\n * _.random(5, true);\n * // => a floating-point number between 0 and 5\n *\n * _.random(1.2, 5.2);\n * // => a floating-point number between 1.2 and 5.2\n */\n function random(lower, upper, floating) {\n if (floating && typeof floating != 'boolean' && isIterateeCall(lower, upper, floating)) {\n upper = floating = undefined;\n }\n if (floating === undefined) {\n if (typeof upper == 'boolean') {\n floating = upper;\n upper = undefined;\n }\n else if (typeof lower == 'boolean') {\n floating = lower;\n lower = undefined;\n }\n }\n if (lower === undefined && upper === undefined) {\n lower = 0;\n upper = 1;\n }\n else {\n lower = toFinite(lower);\n if (upper === undefined) {\n upper = lower;\n lower = 0;\n } else {\n upper = toFinite(upper);\n }\n }\n if (lower > upper) {\n var temp = lower;\n lower = upper;\n upper = temp;\n }\n if (floating || lower % 1 || upper % 1) {\n var rand = nativeRandom();\n return nativeMin(lower + (rand * (upper - lower + freeParseFloat('1e-' + ((rand + '').length - 1)))), upper);\n }\n return baseRandom(lower, upper);\n }\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Converts `string` to [camel case](https://en.wikipedia.org/wiki/CamelCase).\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to convert.\n * @returns {string} Returns the camel cased string.\n * @example\n *\n * _.camelCase('Foo Bar');\n * // => 'fooBar'\n *\n * _.camelCase('--foo-bar--');\n * // => 'fooBar'\n *\n * _.camelCase('__FOO_BAR__');\n * // => 'fooBar'\n */\n var camelCase = createCompounder(function(result, word, index) {\n word = word.toLowerCase();\n return result + (index ? capitalize(word) : word);\n });\n\n /**\n * Converts the first character of `string` to upper case and the remaining\n * to lower case.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to capitalize.\n * @returns {string} Returns the capitalized string.\n * @example\n *\n * _.capitalize('FRED');\n * // => 'Fred'\n */\n function capitalize(string) {\n return upperFirst(toString(string).toLowerCase());\n }\n\n /**\n * Deburrs `string` by converting\n * [Latin-1 Supplement](https://en.wikipedia.org/wiki/Latin-1_Supplement_(Unicode_block)#Character_table)\n * and [Latin Extended-A](https://en.wikipedia.org/wiki/Latin_Extended-A)\n * letters to basic Latin letters and removing\n * [combining diacritical marks](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks).\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to deburr.\n * @returns {string} Returns the deburred string.\n * @example\n *\n * _.deburr('déjà vu');\n * // => 'deja vu'\n */\n function deburr(string) {\n string = toString(string);\n return string && string.replace(reLatin, deburrLetter).replace(reComboMark, '');\n }\n\n /**\n * Checks if `string` ends with the given target string.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to inspect.\n * @param {string} [target] The string to search for.\n * @param {number} [position=string.length] The position to search up to.\n * @returns {boolean} Returns `true` if `string` ends with `target`,\n * else `false`.\n * @example\n *\n * _.endsWith('abc', 'c');\n * // => true\n *\n * _.endsWith('abc', 'b');\n * // => false\n *\n * _.endsWith('abc', 'b', 2);\n * // => true\n */\n function endsWith(string, target, position) {\n string = toString(string);\n target = baseToString(target);\n\n var length = string.length;\n position = position === undefined\n ? length\n : baseClamp(toInteger(position), 0, length);\n\n var end = position;\n position -= target.length;\n return position >= 0 && string.slice(position, end) == target;\n }\n\n /**\n * Converts the characters \"&\", \"<\", \">\", '\"', and \"'\" in `string` to their\n * corresponding HTML entities.\n *\n * **Note:** No other characters are escaped. To escape additional\n * characters use a third-party library like [_he_](https://mths.be/he).\n *\n * Though the \">\" character is escaped for symmetry, characters like\n * \">\" and \"/\" don't need escaping in HTML and have no special meaning\n * unless they're part of a tag or unquoted attribute value. See\n * [Mathias Bynens's article](https://mathiasbynens.be/notes/ambiguous-ampersands)\n * (under \"semi-related fun fact\") for more details.\n *\n * When working with HTML you should always\n * [quote attribute values](http://wonko.com/post/html-escaping) to reduce\n * XSS vectors.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category String\n * @param {string} [string=''] The string to escape.\n * @returns {string} Returns the escaped string.\n * @example\n *\n * _.escape('fred, barney, & pebbles');\n * // => 'fred, barney, &amp; pebbles'\n */\n function escape(string) {\n string = toString(string);\n return (string && reHasUnescapedHtml.test(string))\n ? string.replace(reUnescapedHtml, escapeHtmlChar)\n : string;\n }\n\n /**\n * Escapes the `RegExp` special characters \"^\", \"$\", \"\\\", \".\", \"*\", \"+\",\n * \"?\", \"(\", \")\", \"[\", \"]\", \"{\", \"}\", and \"|\" in `string`.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to escape.\n * @returns {string} Returns the escaped string.\n * @example\n *\n * _.escapeRegExp('[lodash](https://lodash.com/)');\n * // => '\\[lodash\\]\\(https://lodash\\.com/\\)'\n */\n function escapeRegExp(string) {\n string = toString(string);\n return (string && reHasRegExpChar.test(string))\n ? string.replace(reRegExpChar, '\\\\$&')\n : string;\n }\n\n /**\n * Converts `string` to\n * [kebab case](https://en.wikipedia.org/wiki/Letter_case#Special_case_styles).\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to convert.\n * @returns {string} Returns the kebab cased string.\n * @example\n *\n * _.kebabCase('Foo Bar');\n * // => 'foo-bar'\n *\n * _.kebabCase('fooBar');\n * // => 'foo-bar'\n *\n * _.kebabCase('__FOO_BAR__');\n * // => 'foo-bar'\n */\n var kebabCase = createCompounder(function(result, word, index) {\n return result + (index ? '-' : '') + word.toLowerCase();\n });\n\n /**\n * Converts `string`, as space separated words, to lower case.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category String\n * @param {string} [string=''] The string to convert.\n * @returns {string} Returns the lower cased string.\n * @example\n *\n * _.lowerCase('--Foo-Bar--');\n * // => 'foo bar'\n *\n * _.lowerCase('fooBar');\n * // => 'foo bar'\n *\n * _.lowerCase('__FOO_BAR__');\n * // => 'foo bar'\n */\n var lowerCase = createCompounder(function(result, word, index) {\n return result + (index ? ' ' : '') + word.toLowerCase();\n });\n\n /**\n * Converts the first character of `string` to lower case.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category String\n * @param {string} [string=''] The string to convert.\n * @returns {string} Returns the converted string.\n * @example\n *\n * _.lowerFirst('Fred');\n * // => 'fred'\n *\n * _.lowerFirst('FRED');\n * // => 'fRED'\n */\n var lowerFirst = createCaseFirst('toLowerCase');\n\n /**\n * Pads `string` on the left and right sides if it's shorter than `length`.\n * Padding characters are truncated if they can't be evenly divided by `length`.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to pad.\n * @param {number} [length=0] The padding length.\n * @param {string} [chars=' '] The string used as padding.\n * @returns {string} Returns the padded string.\n * @example\n *\n * _.pad('abc', 8);\n * // => ' abc '\n *\n * _.pad('abc', 8, '_-');\n * // => '_-abc_-_'\n *\n * _.pad('abc', 3);\n * // => 'abc'\n */\n function pad(string, length, chars) {\n string = toString(string);\n length = toInteger(length);\n\n var strLength = length ? stringSize(string) : 0;\n if (!length || strLength >= length) {\n return string;\n }\n var mid = (length - strLength) / 2;\n return (\n createPadding(nativeFloor(mid), chars) +\n string +\n createPadding(nativeCeil(mid), chars)\n );\n }\n\n /**\n * Pads `string` on the right side if it's shorter than `length`. Padding\n * characters are truncated if they exceed `length`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category String\n * @param {string} [string=''] The string to pad.\n * @param {number} [length=0] The padding length.\n * @param {string} [chars=' '] The string used as padding.\n * @returns {string} Returns the padded string.\n * @example\n *\n * _.padEnd('abc', 6);\n * // => 'abc '\n *\n * _.padEnd('abc', 6, '_-');\n * // => 'abc_-_'\n *\n * _.padEnd('abc', 3);\n * // => 'abc'\n */\n function padEnd(string, length, chars) {\n string = toString(string);\n length = toInteger(length);\n\n var strLength = length ? stringSize(string) : 0;\n return (length && strLength < length)\n ? (string + createPadding(length - strLength, chars))\n : string;\n }\n\n /**\n * Pads `string` on the left side if it's shorter than `length`. Padding\n * characters are truncated if they exceed `length`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category String\n * @param {string} [string=''] The string to pad.\n * @param {number} [length=0] The padding length.\n * @param {string} [chars=' '] The string used as padding.\n * @returns {string} Returns the padded string.\n * @example\n *\n * _.padStart('abc', 6);\n * // => ' abc'\n *\n * _.padStart('abc', 6, '_-');\n * // => '_-_abc'\n *\n * _.padStart('abc', 3);\n * // => 'abc'\n */\n function padStart(string, length, chars) {\n string = toString(string);\n length = toInteger(length);\n\n var strLength = length ? stringSize(string) : 0;\n return (length && strLength < length)\n ? (createPadding(length - strLength, chars) + string)\n : string;\n }\n\n /**\n * Converts `string` to an integer of the specified radix. If `radix` is\n * `undefined` or `0`, a `radix` of `10` is used unless `value` is a\n * hexadecimal, in which case a `radix` of `16` is used.\n *\n * **Note:** This method aligns with the\n * [ES5 implementation](https://es5.github.io/#x15.1.2.2) of `parseInt`.\n *\n * @static\n * @memberOf _\n * @since 1.1.0\n * @category String\n * @param {string} string The string to convert.\n * @param {number} [radix=10] The radix to interpret `value` by.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {number} Returns the converted integer.\n * @example\n *\n * _.parseInt('08');\n * // => 8\n *\n * _.map(['6', '08', '10'], _.parseInt);\n * // => [6, 8, 10]\n */\n function parseInt(string, radix, guard) {\n if (guard || radix == null) {\n radix = 0;\n } else if (radix) {\n radix = +radix;\n }\n return nativeParseInt(toString(string).replace(reTrimStart, ''), radix || 0);\n }\n\n /**\n * Repeats the given string `n` times.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to repeat.\n * @param {number} [n=1] The number of times to repeat the string.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {string} Returns the repeated string.\n * @example\n *\n * _.repeat('*', 3);\n * // => '***'\n *\n * _.repeat('abc', 2);\n * // => 'abcabc'\n *\n * _.repeat('abc', 0);\n * // => ''\n */\n function repeat(string, n, guard) {\n if ((guard ? isIterateeCall(string, n, guard) : n === undefined)) {\n n = 1;\n } else {\n n = toInteger(n);\n }\n return baseRepeat(toString(string), n);\n }\n\n /**\n * Replaces matches for `pattern` in `string` with `replacement`.\n *\n * **Note:** This method is based on\n * [`String#replace`](https://mdn.io/String/replace).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category String\n * @param {string} [string=''] The string to modify.\n * @param {RegExp|string} pattern The pattern to replace.\n * @param {Function|string} replacement The match replacement.\n * @returns {string} Returns the modified string.\n * @example\n *\n * _.replace('Hi Fred', 'Fred', 'Barney');\n * // => 'Hi Barney'\n */\n function replace() {\n var args = arguments,\n string = toString(args[0]);\n\n return args.length < 3 ? string : string.replace(args[1], args[2]);\n }\n\n /**\n * Converts `string` to\n * [snake case](https://en.wikipedia.org/wiki/Snake_case).\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to convert.\n * @returns {string} Returns the snake cased string.\n * @example\n *\n * _.snakeCase('Foo Bar');\n * // => 'foo_bar'\n *\n * _.snakeCase('fooBar');\n * // => 'foo_bar'\n *\n * _.snakeCase('--FOO-BAR--');\n * // => 'foo_bar'\n */\n var snakeCase = createCompounder(function(result, word, index) {\n return result + (index ? '_' : '') + word.toLowerCase();\n });\n\n /**\n * Splits `string` by `separator`.\n *\n * **Note:** This method is based on\n * [`String#split`](https://mdn.io/String/split).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category String\n * @param {string} [string=''] The string to split.\n * @param {RegExp|string} separator The separator pattern to split by.\n * @param {number} [limit] The length to truncate results to.\n * @returns {Array} Returns the string segments.\n * @example\n *\n * _.split('a-b-c', '-', 2);\n * // => ['a', 'b']\n */\n function split(string, separator, limit) {\n if (limit && typeof limit != 'number' && isIterateeCall(string, separator, limit)) {\n separator = limit = undefined;\n }\n limit = limit === undefined ? MAX_ARRAY_LENGTH : limit >>> 0;\n if (!limit) {\n return [];\n }\n string = toString(string);\n if (string && (\n typeof separator == 'string' ||\n (separator != null && !isRegExp(separator))\n )) {\n separator = baseToString(separator);\n if (!separator && hasUnicode(string)) {\n return castSlice(stringToArray(string), 0, limit);\n }\n }\n return string.split(separator, limit);\n }\n\n /**\n * Converts `string` to\n * [start case](https://en.wikipedia.org/wiki/Letter_case#Stylistic_or_specialised_usage).\n *\n * @static\n * @memberOf _\n * @since 3.1.0\n * @category String\n * @param {string} [string=''] The string to convert.\n * @returns {string} Returns the start cased string.\n * @example\n *\n * _.startCase('--foo-bar--');\n * // => 'Foo Bar'\n *\n * _.startCase('fooBar');\n * // => 'Foo Bar'\n *\n * _.startCase('__FOO_BAR__');\n * // => 'FOO BAR'\n */\n var startCase = createCompounder(function(result, word, index) {\n return result + (index ? ' ' : '') + upperFirst(word);\n });\n\n /**\n * Checks if `string` starts with the given target string.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to inspect.\n * @param {string} [target] The string to search for.\n * @param {number} [position=0] The position to search from.\n * @returns {boolean} Returns `true` if `string` starts with `target`,\n * else `false`.\n * @example\n *\n * _.startsWith('abc', 'a');\n * // => true\n *\n * _.startsWith('abc', 'b');\n * // => false\n *\n * _.startsWith('abc', 'b', 1);\n * // => true\n */\n function startsWith(string, target, position) {\n string = toString(string);\n position = position == null\n ? 0\n : baseClamp(toInteger(position), 0, string.length);\n\n target = baseToString(target);\n return string.slice(position, position + target.length) == target;\n }\n\n /**\n * Creates a compiled template function that can interpolate data properties\n * in \"interpolate\" delimiters, HTML-escape interpolated data properties in\n * \"escape\" delimiters, and execute JavaScript in \"evaluate\" delimiters. Data\n * properties may be accessed as free variables in the template. If a setting\n * object is given, it takes precedence over `_.templateSettings` values.\n *\n * **Note:** In the development build `_.template` utilizes\n * [sourceURLs](http://www.html5rocks.com/en/tutorials/developertools/sourcemaps/#toc-sourceurl)\n * for easier debugging.\n *\n * For more information on precompiling templates see\n * [lodash's custom builds documentation](https://lodash.com/custom-builds).\n *\n * For more information on Chrome extension sandboxes see\n * [Chrome's extensions documentation](https://developer.chrome.com/extensions/sandboxingEval).\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category String\n * @param {string} [string=''] The template string.\n * @param {Object} [options={}] The options object.\n * @param {RegExp} [options.escape=_.templateSettings.escape]\n * The HTML \"escape\" delimiter.\n * @param {RegExp} [options.evaluate=_.templateSettings.evaluate]\n * The \"evaluate\" delimiter.\n * @param {Object} [options.imports=_.templateSettings.imports]\n * An object to import into the template as free variables.\n * @param {RegExp} [options.interpolate=_.templateSettings.interpolate]\n * The \"interpolate\" delimiter.\n * @param {string} [options.sourceURL='lodash.templateSources[n]']\n * The sourceURL of the compiled template.\n * @param {string} [options.variable='obj']\n * The data object variable name.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {Function} Returns the compiled template function.\n * @example\n *\n * // Use the \"interpolate\" delimiter to create a compiled template.\n * var compiled = _.template('hello <%= user %>!');\n * compiled({ 'user': 'fred' });\n * // => 'hello fred!'\n *\n * // Use the HTML \"escape\" delimiter to escape data property values.\n * var compiled = _.template('<b><%- value %></b>');\n * compiled({ 'value': '<script>' });\n * // => '<b>&lt;script&gt;</b>'\n *\n * // Use the \"evaluate\" delimiter to execute JavaScript and generate HTML.\n * var compiled = _.template('<% _.forEach(users, function(user) { %><li><%- user %></li><% }); %>');\n * compiled({ 'users': ['fred', 'barney'] });\n * // => '<li>fred</li><li>barney</li>'\n *\n * // Use the internal `print` function in \"evaluate\" delimiters.\n * var compiled = _.template('<% print(\"hello \" + user); %>!');\n * compiled({ 'user': 'barney' });\n * // => 'hello barney!'\n *\n * // Use the ES template literal delimiter as an \"interpolate\" delimiter.\n * // Disable support by replacing the \"interpolate\" delimiter.\n * var compiled = _.template('hello ${ user }!');\n * compiled({ 'user': 'pebbles' });\n * // => 'hello pebbles!'\n *\n * // Use backslashes to treat delimiters as plain text.\n * var compiled = _.template('<%= \"\\\\<%- value %\\\\>\" %>');\n * compiled({ 'value': 'ignored' });\n * // => '<%- value %>'\n *\n * // Use the `imports` option to import `jQuery` as `jq`.\n * var text = '<% jq.each(users, function(user) { %><li><%- user %></li><% }); %>';\n * var compiled = _.template(text, { 'imports': { 'jq': jQuery } });\n * compiled({ 'users': ['fred', 'barney'] });\n * // => '<li>fred</li><li>barney</li>'\n *\n * // Use the `sourceURL` option to specify a custom sourceURL for the template.\n * var compiled = _.template('hello <%= user %>!', { 'sourceURL': '/basic/greeting.jst' });\n * compiled(data);\n * // => Find the source of \"greeting.jst\" under the Sources tab or Resources panel of the web inspector.\n *\n * // Use the `variable` option to ensure a with-statement isn't used in the compiled template.\n * var compiled = _.template('hi <%= data.user %>!', { 'variable': 'data' });\n * compiled.source;\n * // => function(data) {\n * // var __t, __p = '';\n * // __p += 'hi ' + ((__t = ( data.user )) == null ? '' : __t) + '!';\n * // return __p;\n * // }\n *\n * // Use custom template delimiters.\n * _.templateSettings.interpolate = /{{([\\s\\S]+?)}}/g;\n * var compiled = _.template('hello {{ user }}!');\n * compiled({ 'user': 'mustache' });\n * // => 'hello mustache!'\n *\n * // Use the `source` property to inline compiled templates for meaningful\n * // line numbers in error messages and stack traces.\n * fs.writeFileSync(path.join(process.cwd(), 'jst.js'), '\\\n * var JST = {\\\n * \"main\": ' + _.template(mainText).source + '\\\n * };\\\n * ');\n */\n function template(string, options, guard) {\n // Based on John Resig's `tmpl` implementation\n // (http://ejohn.org/blog/javascript-micro-templating/)\n // and Laura Doktorova's doT.js (https://github.com/olado/doT).\n var settings = lodash.templateSettings;\n\n if (guard && isIterateeCall(string, options, guard)) {\n options = undefined;\n }\n string = toString(string);\n options = assignInWith({}, options, settings, customDefaultsAssignIn);\n\n var imports = assignInWith({}, options.imports, settings.imports, customDefaultsAssignIn),\n importsKeys = keys(imports),\n importsValues = baseValues(imports, importsKeys);\n\n var isEscaping,\n isEvaluating,\n index = 0,\n interpolate = options.interpolate || reNoMatch,\n source = \"__p += '\";\n\n // Compile the regexp to match each delimiter.\n var reDelimiters = RegExp(\n (options.escape || reNoMatch).source + '|' +\n interpolate.source + '|' +\n (interpolate === reInterpolate ? reEsTemplate : reNoMatch).source + '|' +\n (options.evaluate || reNoMatch).source + '|$'\n , 'g');\n\n // Use a sourceURL for easier debugging.\n // The sourceURL gets injected into the source that's eval-ed, so be careful\n // with lookup (in case of e.g. prototype pollution), and strip newlines if any.\n // A newline wouldn't be a valid sourceURL anyway, and it'd enable code injection.\n var sourceURL = '//# sourceURL=' +\n (hasOwnProperty.call(options, 'sourceURL')\n ? (options.sourceURL + '').replace(/[\\r\\n]/g, ' ')\n : ('lodash.templateSources[' + (++templateCounter) + ']')\n ) + '\\n';\n\n string.replace(reDelimiters, function(match, escapeValue, interpolateValue, esTemplateValue, evaluateValue, offset) {\n interpolateValue || (interpolateValue = esTemplateValue);\n\n // Escape characters that can't be included in string literals.\n source += string.slice(index, offset).replace(reUnescapedString, escapeStringChar);\n\n // Replace delimiters with snippets.\n if (escapeValue) {\n isEscaping = true;\n source += \"' +\\n__e(\" + escapeValue + \") +\\n'\";\n }\n if (evaluateValue) {\n isEvaluating = true;\n source += \"';\\n\" + evaluateValue + \";\\n__p += '\";\n }\n if (interpolateValue) {\n source += \"' +\\n((__t = (\" + interpolateValue + \")) == null ? '' : __t) +\\n'\";\n }\n index = offset + match.length;\n\n // The JS engine embedded in Adobe products needs `match` returned in\n // order to produce the correct `offset` value.\n return match;\n });\n\n source += \"';\\n\";\n\n // If `variable` is not specified wrap a with-statement around the generated\n // code to add the data object to the top of the scope chain.\n // Like with sourceURL, we take care to not check the option's prototype,\n // as this configuration is a code injection vector.\n var variable = hasOwnProperty.call(options, 'variable') && options.variable;\n if (!variable) {\n source = 'with (obj) {\\n' + source + '\\n}\\n';\n }\n // Cleanup code by stripping empty strings.\n source = (isEvaluating ? source.replace(reEmptyStringLeading, '') : source)\n .replace(reEmptyStringMiddle, '$1')\n .replace(reEmptyStringTrailing, '$1;');\n\n // Frame code as the function body.\n source = 'function(' + (variable || 'obj') + ') {\\n' +\n (variable\n ? ''\n : 'obj || (obj = {});\\n'\n ) +\n \"var __t, __p = ''\" +\n (isEscaping\n ? ', __e = _.escape'\n : ''\n ) +\n (isEvaluating\n ? ', __j = Array.prototype.join;\\n' +\n \"function print() { __p += __j.call(arguments, '') }\\n\"\n : ';\\n'\n ) +\n source +\n 'return __p\\n}';\n\n var result = attempt(function() {\n return Function(importsKeys, sourceURL + 'return ' + source)\n .apply(undefined, importsValues);\n });\n\n // Provide the compiled function's source by its `toString` method or\n // the `source` property as a convenience for inlining compiled templates.\n result.source = source;\n if (isError(result)) {\n throw result;\n }\n return result;\n }\n\n /**\n * Converts `string`, as a whole, to lower case just like\n * [String#toLowerCase](https://mdn.io/toLowerCase).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category String\n * @param {string} [string=''] The string to convert.\n * @returns {string} Returns the lower cased string.\n * @example\n *\n * _.toLower('--Foo-Bar--');\n * // => '--foo-bar--'\n *\n * _.toLower('fooBar');\n * // => 'foobar'\n *\n * _.toLower('__FOO_BAR__');\n * // => '__foo_bar__'\n */\n function toLower(value) {\n return toString(value).toLowerCase();\n }\n\n /**\n * Converts `string`, as a whole, to upper case just like\n * [String#toUpperCase](https://mdn.io/toUpperCase).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category String\n * @param {string} [string=''] The string to convert.\n * @returns {string} Returns the upper cased string.\n * @example\n *\n * _.toUpper('--foo-bar--');\n * // => '--FOO-BAR--'\n *\n * _.toUpper('fooBar');\n * // => 'FOOBAR'\n *\n * _.toUpper('__foo_bar__');\n * // => '__FOO_BAR__'\n */\n function toUpper(value) {\n return toString(value).toUpperCase();\n }\n\n /**\n * Removes leading and trailing whitespace or specified characters from `string`.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to trim.\n * @param {string} [chars=whitespace] The characters to trim.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {string} Returns the trimmed string.\n * @example\n *\n * _.trim(' abc ');\n * // => 'abc'\n *\n * _.trim('-_-abc-_-', '_-');\n * // => 'abc'\n *\n * _.map([' foo ', ' bar '], _.trim);\n * // => ['foo', 'bar']\n */\n function trim(string, chars, guard) {\n string = toString(string);\n if (string && (guard || chars === undefined)) {\n return string.replace(reTrim, '');\n }\n if (!string || !(chars = baseToString(chars))) {\n return string;\n }\n var strSymbols = stringToArray(string),\n chrSymbols = stringToArray(chars),\n start = charsStartIndex(strSymbols, chrSymbols),\n end = charsEndIndex(strSymbols, chrSymbols) + 1;\n\n return castSlice(strSymbols, start, end).join('');\n }\n\n /**\n * Removes trailing whitespace or specified characters from `string`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category String\n * @param {string} [string=''] The string to trim.\n * @param {string} [chars=whitespace] The characters to trim.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {string} Returns the trimmed string.\n * @example\n *\n * _.trimEnd(' abc ');\n * // => ' abc'\n *\n * _.trimEnd('-_-abc-_-', '_-');\n * // => '-_-abc'\n */\n function trimEnd(string, chars, guard) {\n string = toString(string);\n if (string && (guard || chars === undefined)) {\n return string.replace(reTrimEnd, '');\n }\n if (!string || !(chars = baseToString(chars))) {\n return string;\n }\n var strSymbols = stringToArray(string),\n end = charsEndIndex(strSymbols, stringToArray(chars)) + 1;\n\n return castSlice(strSymbols, 0, end).join('');\n }\n\n /**\n * Removes leading whitespace or specified characters from `string`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category String\n * @param {string} [string=''] The string to trim.\n * @param {string} [chars=whitespace] The characters to trim.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {string} Returns the trimmed string.\n * @example\n *\n * _.trimStart(' abc ');\n * // => 'abc '\n *\n * _.trimStart('-_-abc-_-', '_-');\n * // => 'abc-_-'\n */\n function trimStart(string, chars, guard) {\n string = toString(string);\n if (string && (guard || chars === undefined)) {\n return string.replace(reTrimStart, '');\n }\n if (!string || !(chars = baseToString(chars))) {\n return string;\n }\n var strSymbols = stringToArray(string),\n start = charsStartIndex(strSymbols, stringToArray(chars));\n\n return castSlice(strSymbols, start).join('');\n }\n\n /**\n * Truncates `string` if it's longer than the given maximum string length.\n * The last characters of the truncated string are replaced with the omission\n * string which defaults to \"...\".\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category String\n * @param {string} [string=''] The string to truncate.\n * @param {Object} [options={}] The options object.\n * @param {number} [options.length=30] The maximum string length.\n * @param {string} [options.omission='...'] The string to indicate text is omitted.\n * @param {RegExp|string} [options.separator] The separator pattern to truncate to.\n * @returns {string} Returns the truncated string.\n * @example\n *\n * _.truncate('hi-diddly-ho there, neighborino');\n * // => 'hi-diddly-ho there, neighbo...'\n *\n * _.truncate('hi-diddly-ho there, neighborino', {\n * 'length': 24,\n * 'separator': ' '\n * });\n * // => 'hi-diddly-ho there,...'\n *\n * _.truncate('hi-diddly-ho there, neighborino', {\n * 'length': 24,\n * 'separator': /,? +/\n * });\n * // => 'hi-diddly-ho there...'\n *\n * _.truncate('hi-diddly-ho there, neighborino', {\n * 'omission': ' [...]'\n * });\n * // => 'hi-diddly-ho there, neig [...]'\n */\n function truncate(string, options) {\n var length = DEFAULT_TRUNC_LENGTH,\n omission = DEFAULT_TRUNC_OMISSION;\n\n if (isObject(options)) {\n var separator = 'separator' in options ? options.separator : separator;\n length = 'length' in options ? toInteger(options.length) : length;\n omission = 'omission' in options ? baseToString(options.omission) : omission;\n }\n string = toString(string);\n\n var strLength = string.length;\n if (hasUnicode(string)) {\n var strSymbols = stringToArray(string);\n strLength = strSymbols.length;\n }\n if (length >= strLength) {\n return string;\n }\n var end = length - stringSize(omission);\n if (end < 1) {\n return omission;\n }\n var result = strSymbols\n ? castSlice(strSymbols, 0, end).join('')\n : string.slice(0, end);\n\n if (separator === undefined) {\n return result + omission;\n }\n if (strSymbols) {\n end += (result.length - end);\n }\n if (isRegExp(separator)) {\n if (string.slice(end).search(separator)) {\n var match,\n substring = result;\n\n if (!separator.global) {\n separator = RegExp(separator.source, toString(reFlags.exec(separator)) + 'g');\n }\n separator.lastIndex = 0;\n while ((match = separator.exec(substring))) {\n var newEnd = match.index;\n }\n result = result.slice(0, newEnd === undefined ? end : newEnd);\n }\n } else if (string.indexOf(baseToString(separator), end) != end) {\n var index = result.lastIndexOf(separator);\n if (index > -1) {\n result = result.slice(0, index);\n }\n }\n return result + omission;\n }\n\n /**\n * The inverse of `_.escape`; this method converts the HTML entities\n * `&amp;`, `&lt;`, `&gt;`, `&quot;`, and `&#39;` in `string` to\n * their corresponding characters.\n *\n * **Note:** No other HTML entities are unescaped. To unescape additional\n * HTML entities use a third-party library like [_he_](https://mths.be/he).\n *\n * @static\n * @memberOf _\n * @since 0.6.0\n * @category String\n * @param {string} [string=''] The string to unescape.\n * @returns {string} Returns the unescaped string.\n * @example\n *\n * _.unescape('fred, barney, &amp; pebbles');\n * // => 'fred, barney, & pebbles'\n */\n function unescape(string) {\n string = toString(string);\n return (string && reHasEscapedHtml.test(string))\n ? string.replace(reEscapedHtml, unescapeHtmlChar)\n : string;\n }\n\n /**\n * Converts `string`, as space separated words, to upper case.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category String\n * @param {string} [string=''] The string to convert.\n * @returns {string} Returns the upper cased string.\n * @example\n *\n * _.upperCase('--foo-bar');\n * // => 'FOO BAR'\n *\n * _.upperCase('fooBar');\n * // => 'FOO BAR'\n *\n * _.upperCase('__foo_bar__');\n * // => 'FOO BAR'\n */\n var upperCase = createCompounder(function(result, word, index) {\n return result + (index ? ' ' : '') + word.toUpperCase();\n });\n\n /**\n * Converts the first character of `string` to upper case.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category String\n * @param {string} [string=''] The string to convert.\n * @returns {string} Returns the converted string.\n * @example\n *\n * _.upperFirst('fred');\n * // => 'Fred'\n *\n * _.upperFirst('FRED');\n * // => 'FRED'\n */\n var upperFirst = createCaseFirst('toUpperCase');\n\n /**\n * Splits `string` into an array of its words.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to inspect.\n * @param {RegExp|string} [pattern] The pattern to match words.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {Array} Returns the words of `string`.\n * @example\n *\n * _.words('fred, barney, & pebbles');\n * // => ['fred', 'barney', 'pebbles']\n *\n * _.words('fred, barney, & pebbles', /[^, ]+/g);\n * // => ['fred', 'barney', '&', 'pebbles']\n */\n function words(string, pattern, guard) {\n string = toString(string);\n pattern = guard ? undefined : pattern;\n\n if (pattern === undefined) {\n return hasUnicodeWord(string) ? unicodeWords(string) : asciiWords(string);\n }\n return string.match(pattern) || [];\n }\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Attempts to invoke `func`, returning either the result or the caught error\n * object. Any additional arguments are provided to `func` when it's invoked.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Util\n * @param {Function} func The function to attempt.\n * @param {...*} [args] The arguments to invoke `func` with.\n * @returns {*} Returns the `func` result or error object.\n * @example\n *\n * // Avoid throwing errors for invalid selectors.\n * var elements = _.attempt(function(selector) {\n * return document.querySelectorAll(selector);\n * }, '>_>');\n *\n * if (_.isError(elements)) {\n * elements = [];\n * }\n */\n var attempt = baseRest(function(func, args) {\n try {\n return apply(func, undefined, args);\n } catch (e) {\n return isError(e) ? e : new Error(e);\n }\n });\n\n /**\n * Binds methods of an object to the object itself, overwriting the existing\n * method.\n *\n * **Note:** This method doesn't set the \"length\" property of bound functions.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Util\n * @param {Object} object The object to bind and assign the bound methods to.\n * @param {...(string|string[])} methodNames The object method names to bind.\n * @returns {Object} Returns `object`.\n * @example\n *\n * var view = {\n * 'label': 'docs',\n * 'click': function() {\n * console.log('clicked ' + this.label);\n * }\n * };\n *\n * _.bindAll(view, ['click']);\n * jQuery(element).on('click', view.click);\n * // => Logs 'clicked docs' when clicked.\n */\n var bindAll = flatRest(function(object, methodNames) {\n arrayEach(methodNames, function(key) {\n key = toKey(key);\n baseAssignValue(object, key, bind(object[key], object));\n });\n return object;\n });\n\n /**\n * Creates a function that iterates over `pairs` and invokes the corresponding\n * function of the first predicate to return truthy. The predicate-function\n * pairs are invoked with the `this` binding and arguments of the created\n * function.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Util\n * @param {Array} pairs The predicate-function pairs.\n * @returns {Function} Returns the new composite function.\n * @example\n *\n * var func = _.cond([\n * [_.matches({ 'a': 1 }), _.constant('matches A')],\n * [_.conforms({ 'b': _.isNumber }), _.constant('matches B')],\n * [_.stubTrue, _.constant('no match')]\n * ]);\n *\n * func({ 'a': 1, 'b': 2 });\n * // => 'matches A'\n *\n * func({ 'a': 0, 'b': 1 });\n * // => 'matches B'\n *\n * func({ 'a': '1', 'b': '2' });\n * // => 'no match'\n */\n function cond(pairs) {\n var length = pairs == null ? 0 : pairs.length,\n toIteratee = getIteratee();\n\n pairs = !length ? [] : arrayMap(pairs, function(pair) {\n if (typeof pair[1] != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n return [toIteratee(pair[0]), pair[1]];\n });\n\n return baseRest(function(args) {\n var index = -1;\n while (++index < length) {\n var pair = pairs[index];\n if (apply(pair[0], this, args)) {\n return apply(pair[1], this, args);\n }\n }\n });\n }\n\n /**\n * Creates a function that invokes the predicate properties of `source` with\n * the corresponding property values of a given object, returning `true` if\n * all predicates return truthy, else `false`.\n *\n * **Note:** The created function is equivalent to `_.conformsTo` with\n * `source` partially applied.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Util\n * @param {Object} source The object of property predicates to conform to.\n * @returns {Function} Returns the new spec function.\n * @example\n *\n * var objects = [\n * { 'a': 2, 'b': 1 },\n * { 'a': 1, 'b': 2 }\n * ];\n *\n * _.filter(objects, _.conforms({ 'b': function(n) { return n > 1; } }));\n * // => [{ 'a': 1, 'b': 2 }]\n */\n function conforms(source) {\n return baseConforms(baseClone(source, CLONE_DEEP_FLAG));\n }\n\n /**\n * Creates a function that returns `value`.\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Util\n * @param {*} value The value to return from the new function.\n * @returns {Function} Returns the new constant function.\n * @example\n *\n * var objects = _.times(2, _.constant({ 'a': 1 }));\n *\n * console.log(objects);\n * // => [{ 'a': 1 }, { 'a': 1 }]\n *\n * console.log(objects[0] === objects[1]);\n * // => true\n */\n function constant(value) {\n return function() {\n return value;\n };\n }\n\n /**\n * Checks `value` to determine whether a default value should be returned in\n * its place. The `defaultValue` is returned if `value` is `NaN`, `null`,\n * or `undefined`.\n *\n * @static\n * @memberOf _\n * @since 4.14.0\n * @category Util\n * @param {*} value The value to check.\n * @param {*} defaultValue The default value.\n * @returns {*} Returns the resolved value.\n * @example\n *\n * _.defaultTo(1, 10);\n * // => 1\n *\n * _.defaultTo(undefined, 10);\n * // => 10\n */\n function defaultTo(value, defaultValue) {\n return (value == null || value !== value) ? defaultValue : value;\n }\n\n /**\n * Creates a function that returns the result of invoking the given functions\n * with the `this` binding of the created function, where each successive\n * invocation is supplied the return value of the previous.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Util\n * @param {...(Function|Function[])} [funcs] The functions to invoke.\n * @returns {Function} Returns the new composite function.\n * @see _.flowRight\n * @example\n *\n * function square(n) {\n * return n * n;\n * }\n *\n * var addSquare = _.flow([_.add, square]);\n * addSquare(1, 2);\n * // => 9\n */\n var flow = createFlow();\n\n /**\n * This method is like `_.flow` except that it creates a function that\n * invokes the given functions from right to left.\n *\n * @static\n * @since 3.0.0\n * @memberOf _\n * @category Util\n * @param {...(Function|Function[])} [funcs] The functions to invoke.\n * @returns {Function} Returns the new composite function.\n * @see _.flow\n * @example\n *\n * function square(n) {\n * return n * n;\n * }\n *\n * var addSquare = _.flowRight([square, _.add]);\n * addSquare(1, 2);\n * // => 9\n */\n var flowRight = createFlow(true);\n\n /**\n * This method returns the first argument it receives.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Util\n * @param {*} value Any value.\n * @returns {*} Returns `value`.\n * @example\n *\n * var object = { 'a': 1 };\n *\n * console.log(_.identity(object) === object);\n * // => true\n */\n function identity(value) {\n return value;\n }\n\n /**\n * Creates a function that invokes `func` with the arguments of the created\n * function. If `func` is a property name, the created function returns the\n * property value for a given element. If `func` is an array or object, the\n * created function returns `true` for elements that contain the equivalent\n * source properties, otherwise it returns `false`.\n *\n * @static\n * @since 4.0.0\n * @memberOf _\n * @category Util\n * @param {*} [func=_.identity] The value to convert to a callback.\n * @returns {Function} Returns the callback.\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'age': 36, 'active': true },\n * { 'user': 'fred', 'age': 40, 'active': false }\n * ];\n *\n * // The `_.matches` iteratee shorthand.\n * _.filter(users, _.iteratee({ 'user': 'barney', 'active': true }));\n * // => [{ 'user': 'barney', 'age': 36, 'active': true }]\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.filter(users, _.iteratee(['user', 'fred']));\n * // => [{ 'user': 'fred', 'age': 40 }]\n *\n * // The `_.property` iteratee shorthand.\n * _.map(users, _.iteratee('user'));\n * // => ['barney', 'fred']\n *\n * // Create custom iteratee shorthands.\n * _.iteratee = _.wrap(_.iteratee, function(iteratee, func) {\n * return !_.isRegExp(func) ? iteratee(func) : function(string) {\n * return func.test(string);\n * };\n * });\n *\n * _.filter(['abc', 'def'], /ef/);\n * // => ['def']\n */\n function iteratee(func) {\n return baseIteratee(typeof func == 'function' ? func : baseClone(func, CLONE_DEEP_FLAG));\n }\n\n /**\n * Creates a function that performs a partial deep comparison between a given\n * object and `source`, returning `true` if the given object has equivalent\n * property values, else `false`.\n *\n * **Note:** The created function is equivalent to `_.isMatch` with `source`\n * partially applied.\n *\n * Partial comparisons will match empty array and empty object `source`\n * values against any array or object value, respectively. See `_.isEqual`\n * for a list of supported value comparisons.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Util\n * @param {Object} source The object of property values to match.\n * @returns {Function} Returns the new spec function.\n * @example\n *\n * var objects = [\n * { 'a': 1, 'b': 2, 'c': 3 },\n * { 'a': 4, 'b': 5, 'c': 6 }\n * ];\n *\n * _.filter(objects, _.matches({ 'a': 4, 'c': 6 }));\n * // => [{ 'a': 4, 'b': 5, 'c': 6 }]\n */\n function matches(source) {\n return baseMatches(baseClone(source, CLONE_DEEP_FLAG));\n }\n\n /**\n * Creates a function that performs a partial deep comparison between the\n * value at `path` of a given object to `srcValue`, returning `true` if the\n * object value is equivalent, else `false`.\n *\n * **Note:** Partial comparisons will match empty array and empty object\n * `srcValue` values against any array or object value, respectively. See\n * `_.isEqual` for a list of supported value comparisons.\n *\n * @static\n * @memberOf _\n * @since 3.2.0\n * @category Util\n * @param {Array|string} path The path of the property to get.\n * @param {*} srcValue The value to match.\n * @returns {Function} Returns the new spec function.\n * @example\n *\n * var objects = [\n * { 'a': 1, 'b': 2, 'c': 3 },\n * { 'a': 4, 'b': 5, 'c': 6 }\n * ];\n *\n * _.find(objects, _.matchesProperty('a', 4));\n * // => { 'a': 4, 'b': 5, 'c': 6 }\n */\n function matchesProperty(path, srcValue) {\n return baseMatchesProperty(path, baseClone(srcValue, CLONE_DEEP_FLAG));\n }\n\n /**\n * Creates a function that invokes the method at `path` of a given object.\n * Any additional arguments are provided to the invoked method.\n *\n * @static\n * @memberOf _\n * @since 3.7.0\n * @category Util\n * @param {Array|string} path The path of the method to invoke.\n * @param {...*} [args] The arguments to invoke the method with.\n * @returns {Function} Returns the new invoker function.\n * @example\n *\n * var objects = [\n * { 'a': { 'b': _.constant(2) } },\n * { 'a': { 'b': _.constant(1) } }\n * ];\n *\n * _.map(objects, _.method('a.b'));\n * // => [2, 1]\n *\n * _.map(objects, _.method(['a', 'b']));\n * // => [2, 1]\n */\n var method = baseRest(function(path, args) {\n return function(object) {\n return baseInvoke(object, path, args);\n };\n });\n\n /**\n * The opposite of `_.method`; this method creates a function that invokes\n * the method at a given path of `object`. Any additional arguments are\n * provided to the invoked method.\n *\n * @static\n * @memberOf _\n * @since 3.7.0\n * @category Util\n * @param {Object} object The object to query.\n * @param {...*} [args] The arguments to invoke the method with.\n * @returns {Function} Returns the new invoker function.\n * @example\n *\n * var array = _.times(3, _.constant),\n * object = { 'a': array, 'b': array, 'c': array };\n *\n * _.map(['a[2]', 'c[0]'], _.methodOf(object));\n * // => [2, 0]\n *\n * _.map([['a', '2'], ['c', '0']], _.methodOf(object));\n * // => [2, 0]\n */\n var methodOf = baseRest(function(object, args) {\n return function(path) {\n return baseInvoke(object, path, args);\n };\n });\n\n /**\n * Adds all own enumerable string keyed function properties of a source\n * object to the destination object. If `object` is a function, then methods\n * are added to its prototype as well.\n *\n * **Note:** Use `_.runInContext` to create a pristine `lodash` function to\n * avoid conflicts caused by modifying the original.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Util\n * @param {Function|Object} [object=lodash] The destination object.\n * @param {Object} source The object of functions to add.\n * @param {Object} [options={}] The options object.\n * @param {boolean} [options.chain=true] Specify whether mixins are chainable.\n * @returns {Function|Object} Returns `object`.\n * @example\n *\n * function vowels(string) {\n * return _.filter(string, function(v) {\n * return /[aeiou]/i.test(v);\n * });\n * }\n *\n * _.mixin({ 'vowels': vowels });\n * _.vowels('fred');\n * // => ['e']\n *\n * _('fred').vowels().value();\n * // => ['e']\n *\n * _.mixin({ 'vowels': vowels }, { 'chain': false });\n * _('fred').vowels();\n * // => ['e']\n */\n function mixin(object, source, options) {\n var props = keys(source),\n methodNames = baseFunctions(source, props);\n\n if (options == null &&\n !(isObject(source) && (methodNames.length || !props.length))) {\n options = source;\n source = object;\n object = this;\n methodNames = baseFunctions(source, keys(source));\n }\n var chain = !(isObject(options) && 'chain' in options) || !!options.chain,\n isFunc = isFunction(object);\n\n arrayEach(methodNames, function(methodName) {\n var func = source[methodName];\n object[methodName] = func;\n if (isFunc) {\n object.prototype[methodName] = function() {\n var chainAll = this.__chain__;\n if (chain || chainAll) {\n var result = object(this.__wrapped__),\n actions = result.__actions__ = copyArray(this.__actions__);\n\n actions.push({ 'func': func, 'args': arguments, 'thisArg': object });\n result.__chain__ = chainAll;\n return result;\n }\n return func.apply(object, arrayPush([this.value()], arguments));\n };\n }\n });\n\n return object;\n }\n\n /**\n * Reverts the `_` variable to its previous value and returns a reference to\n * the `lodash` function.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Util\n * @returns {Function} Returns the `lodash` function.\n * @example\n *\n * var lodash = _.noConflict();\n */\n function noConflict() {\n if (root._ === this) {\n root._ = oldDash;\n }\n return this;\n }\n\n /**\n * This method returns `undefined`.\n *\n * @static\n * @memberOf _\n * @since 2.3.0\n * @category Util\n * @example\n *\n * _.times(2, _.noop);\n * // => [undefined, undefined]\n */\n function noop() {\n // No operation performed.\n }\n\n /**\n * Creates a function that gets the argument at index `n`. If `n` is negative,\n * the nth argument from the end is returned.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Util\n * @param {number} [n=0] The index of the argument to return.\n * @returns {Function} Returns the new pass-thru function.\n * @example\n *\n * var func = _.nthArg(1);\n * func('a', 'b', 'c', 'd');\n * // => 'b'\n *\n * var func = _.nthArg(-2);\n * func('a', 'b', 'c', 'd');\n * // => 'c'\n */\n function nthArg(n) {\n n = toInteger(n);\n return baseRest(function(args) {\n return baseNth(args, n);\n });\n }\n\n /**\n * Creates a function that invokes `iteratees` with the arguments it receives\n * and returns their results.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Util\n * @param {...(Function|Function[])} [iteratees=[_.identity]]\n * The iteratees to invoke.\n * @returns {Function} Returns the new function.\n * @example\n *\n * var func = _.over([Math.max, Math.min]);\n *\n * func(1, 2, 3, 4);\n * // => [4, 1]\n */\n var over = createOver(arrayMap);\n\n /**\n * Creates a function that checks if **all** of the `predicates` return\n * truthy when invoked with the arguments it receives.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Util\n * @param {...(Function|Function[])} [predicates=[_.identity]]\n * The predicates to check.\n * @returns {Function} Returns the new function.\n * @example\n *\n * var func = _.overEvery([Boolean, isFinite]);\n *\n * func('1');\n * // => true\n *\n * func(null);\n * // => false\n *\n * func(NaN);\n * // => false\n */\n var overEvery = createOver(arrayEvery);\n\n /**\n * Creates a function that checks if **any** of the `predicates` return\n * truthy when invoked with the arguments it receives.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Util\n * @param {...(Function|Function[])} [predicates=[_.identity]]\n * The predicates to check.\n * @returns {Function} Returns the new function.\n * @example\n *\n * var func = _.overSome([Boolean, isFinite]);\n *\n * func('1');\n * // => true\n *\n * func(null);\n * // => true\n *\n * func(NaN);\n * // => false\n */\n var overSome = createOver(arraySome);\n\n /**\n * Creates a function that returns the value at `path` of a given object.\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Util\n * @param {Array|string} path The path of the property to get.\n * @returns {Function} Returns the new accessor function.\n * @example\n *\n * var objects = [\n * { 'a': { 'b': 2 } },\n * { 'a': { 'b': 1 } }\n * ];\n *\n * _.map(objects, _.property('a.b'));\n * // => [2, 1]\n *\n * _.map(_.sortBy(objects, _.property(['a', 'b'])), 'a.b');\n * // => [1, 2]\n */\n function property(path) {\n return isKey(path) ? baseProperty(toKey(path)) : basePropertyDeep(path);\n }\n\n /**\n * The opposite of `_.property`; this method creates a function that returns\n * the value at a given path of `object`.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Util\n * @param {Object} object The object to query.\n * @returns {Function} Returns the new accessor function.\n * @example\n *\n * var array = [0, 1, 2],\n * object = { 'a': array, 'b': array, 'c': array };\n *\n * _.map(['a[2]', 'c[0]'], _.propertyOf(object));\n * // => [2, 0]\n *\n * _.map([['a', '2'], ['c', '0']], _.propertyOf(object));\n * // => [2, 0]\n */\n function propertyOf(object) {\n return function(path) {\n return object == null ? undefined : baseGet(object, path);\n };\n }\n\n /**\n * Creates an array of numbers (positive and/or negative) progressing from\n * `start` up to, but not including, `end`. A step of `-1` is used if a negative\n * `start` is specified without an `end` or `step`. If `end` is not specified,\n * it's set to `start` with `start` then set to `0`.\n *\n * **Note:** JavaScript follows the IEEE-754 standard for resolving\n * floating-point values which can produce unexpected results.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Util\n * @param {number} [start=0] The start of the range.\n * @param {number} end The end of the range.\n * @param {number} [step=1] The value to increment or decrement by.\n * @returns {Array} Returns the range of numbers.\n * @see _.inRange, _.rangeRight\n * @example\n *\n * _.range(4);\n * // => [0, 1, 2, 3]\n *\n * _.range(-4);\n * // => [0, -1, -2, -3]\n *\n * _.range(1, 5);\n * // => [1, 2, 3, 4]\n *\n * _.range(0, 20, 5);\n * // => [0, 5, 10, 15]\n *\n * _.range(0, -4, -1);\n * // => [0, -1, -2, -3]\n *\n * _.range(1, 4, 0);\n * // => [1, 1, 1]\n *\n * _.range(0);\n * // => []\n */\n var range = createRange();\n\n /**\n * This method is like `_.range` except that it populates values in\n * descending order.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Util\n * @param {number} [start=0] The start of the range.\n * @param {number} end The end of the range.\n * @param {number} [step=1] The value to increment or decrement by.\n * @returns {Array} Returns the range of numbers.\n * @see _.inRange, _.range\n * @example\n *\n * _.rangeRight(4);\n * // => [3, 2, 1, 0]\n *\n * _.rangeRight(-4);\n * // => [-3, -2, -1, 0]\n *\n * _.rangeRight(1, 5);\n * // => [4, 3, 2, 1]\n *\n * _.rangeRight(0, 20, 5);\n * // => [15, 10, 5, 0]\n *\n * _.rangeRight(0, -4, -1);\n * // => [-3, -2, -1, 0]\n *\n * _.rangeRight(1, 4, 0);\n * // => [1, 1, 1]\n *\n * _.rangeRight(0);\n * // => []\n */\n var rangeRight = createRange(true);\n\n /**\n * This method returns a new empty array.\n *\n * @static\n * @memberOf _\n * @since 4.13.0\n * @category Util\n * @returns {Array} Returns the new empty array.\n * @example\n *\n * var arrays = _.times(2, _.stubArray);\n *\n * console.log(arrays);\n * // => [[], []]\n *\n * console.log(arrays[0] === arrays[1]);\n * // => false\n */\n function stubArray() {\n return [];\n }\n\n /**\n * This method returns `false`.\n *\n * @static\n * @memberOf _\n * @since 4.13.0\n * @category Util\n * @returns {boolean} Returns `false`.\n * @example\n *\n * _.times(2, _.stubFalse);\n * // => [false, false]\n */\n function stubFalse() {\n return false;\n }\n\n /**\n * This method returns a new empty object.\n *\n * @static\n * @memberOf _\n * @since 4.13.0\n * @category Util\n * @returns {Object} Returns the new empty object.\n * @example\n *\n * var objects = _.times(2, _.stubObject);\n *\n * console.log(objects);\n * // => [{}, {}]\n *\n * console.log(objects[0] === objects[1]);\n * // => false\n */\n function stubObject() {\n return {};\n }\n\n /**\n * This method returns an empty string.\n *\n * @static\n * @memberOf _\n * @since 4.13.0\n * @category Util\n * @returns {string} Returns the empty string.\n * @example\n *\n * _.times(2, _.stubString);\n * // => ['', '']\n */\n function stubString() {\n return '';\n }\n\n /**\n * This method returns `true`.\n *\n * @static\n * @memberOf _\n * @since 4.13.0\n * @category Util\n * @returns {boolean} Returns `true`.\n * @example\n *\n * _.times(2, _.stubTrue);\n * // => [true, true]\n */\n function stubTrue() {\n return true;\n }\n\n /**\n * Invokes the iteratee `n` times, returning an array of the results of\n * each invocation. The iteratee is invoked with one argument; (index).\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Util\n * @param {number} n The number of times to invoke `iteratee`.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Array} Returns the array of results.\n * @example\n *\n * _.times(3, String);\n * // => ['0', '1', '2']\n *\n * _.times(4, _.constant(0));\n * // => [0, 0, 0, 0]\n */\n function times(n, iteratee) {\n n = toInteger(n);\n if (n < 1 || n > MAX_SAFE_INTEGER) {\n return [];\n }\n var index = MAX_ARRAY_LENGTH,\n length = nativeMin(n, MAX_ARRAY_LENGTH);\n\n iteratee = getIteratee(iteratee);\n n -= MAX_ARRAY_LENGTH;\n\n var result = baseTimes(length, iteratee);\n while (++index < n) {\n iteratee(index);\n }\n return result;\n }\n\n /**\n * Converts `value` to a property path array.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Util\n * @param {*} value The value to convert.\n * @returns {Array} Returns the new property path array.\n * @example\n *\n * _.toPath('a.b.c');\n * // => ['a', 'b', 'c']\n *\n * _.toPath('a[0].b.c');\n * // => ['a', '0', 'b', 'c']\n */\n function toPath(value) {\n if (isArray(value)) {\n return arrayMap(value, toKey);\n }\n return isSymbol(value) ? [value] : copyArray(stringToPath(toString(value)));\n }\n\n /**\n * Generates a unique ID. If `prefix` is given, the ID is appended to it.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Util\n * @param {string} [prefix=''] The value to prefix the ID with.\n * @returns {string} Returns the unique ID.\n * @example\n *\n * _.uniqueId('contact_');\n * // => 'contact_104'\n *\n * _.uniqueId();\n * // => '105'\n */\n function uniqueId(prefix) {\n var id = ++idCounter;\n return toString(prefix) + id;\n }\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Adds two numbers.\n *\n * @static\n * @memberOf _\n * @since 3.4.0\n * @category Math\n * @param {number} augend The first number in an addition.\n * @param {number} addend The second number in an addition.\n * @returns {number} Returns the total.\n * @example\n *\n * _.add(6, 4);\n * // => 10\n */\n var add = createMathOperation(function(augend, addend) {\n return augend + addend;\n }, 0);\n\n /**\n * Computes `number` rounded up to `precision`.\n *\n * @static\n * @memberOf _\n * @since 3.10.0\n * @category Math\n * @param {number} number The number to round up.\n * @param {number} [precision=0] The precision to round up to.\n * @returns {number} Returns the rounded up number.\n * @example\n *\n * _.ceil(4.006);\n * // => 5\n *\n * _.ceil(6.004, 2);\n * // => 6.01\n *\n * _.ceil(6040, -2);\n * // => 6100\n */\n var ceil = createRound('ceil');\n\n /**\n * Divide two numbers.\n *\n * @static\n * @memberOf _\n * @since 4.7.0\n * @category Math\n * @param {number} dividend The first number in a division.\n * @param {number} divisor The second number in a division.\n * @returns {number} Returns the quotient.\n * @example\n *\n * _.divide(6, 4);\n * // => 1.5\n */\n var divide = createMathOperation(function(dividend, divisor) {\n return dividend / divisor;\n }, 1);\n\n /**\n * Computes `number` rounded down to `precision`.\n *\n * @static\n * @memberOf _\n * @since 3.10.0\n * @category Math\n * @param {number} number The number to round down.\n * @param {number} [precision=0] The precision to round down to.\n * @returns {number} Returns the rounded down number.\n * @example\n *\n * _.floor(4.006);\n * // => 4\n *\n * _.floor(0.046, 2);\n * // => 0.04\n *\n * _.floor(4060, -2);\n * // => 4000\n */\n var floor = createRound('floor');\n\n /**\n * Computes the maximum value of `array`. If `array` is empty or falsey,\n * `undefined` is returned.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Math\n * @param {Array} array The array to iterate over.\n * @returns {*} Returns the maximum value.\n * @example\n *\n * _.max([4, 2, 8, 6]);\n * // => 8\n *\n * _.max([]);\n * // => undefined\n */\n function max(array) {\n return (array && array.length)\n ? baseExtremum(array, identity, baseGt)\n : undefined;\n }\n\n /**\n * This method is like `_.max` except that it accepts `iteratee` which is\n * invoked for each element in `array` to generate the criterion by which\n * the value is ranked. The iteratee is invoked with one argument: (value).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Math\n * @param {Array} array The array to iterate over.\n * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n * @returns {*} Returns the maximum value.\n * @example\n *\n * var objects = [{ 'n': 1 }, { 'n': 2 }];\n *\n * _.maxBy(objects, function(o) { return o.n; });\n * // => { 'n': 2 }\n *\n * // The `_.property` iteratee shorthand.\n * _.maxBy(objects, 'n');\n * // => { 'n': 2 }\n */\n function maxBy(array, iteratee) {\n return (array && array.length)\n ? baseExtremum(array, getIteratee(iteratee, 2), baseGt)\n : undefined;\n }\n\n /**\n * Computes the mean of the values in `array`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Math\n * @param {Array} array The array to iterate over.\n * @returns {number} Returns the mean.\n * @example\n *\n * _.mean([4, 2, 8, 6]);\n * // => 5\n */\n function mean(array) {\n return baseMean(array, identity);\n }\n\n /**\n * This method is like `_.mean` except that it accepts `iteratee` which is\n * invoked for each element in `array` to generate the value to be averaged.\n * The iteratee is invoked with one argument: (value).\n *\n * @static\n * @memberOf _\n * @since 4.7.0\n * @category Math\n * @param {Array} array The array to iterate over.\n * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n * @returns {number} Returns the mean.\n * @example\n *\n * var objects = [{ 'n': 4 }, { 'n': 2 }, { 'n': 8 }, { 'n': 6 }];\n *\n * _.meanBy(objects, function(o) { return o.n; });\n * // => 5\n *\n * // The `_.property` iteratee shorthand.\n * _.meanBy(objects, 'n');\n * // => 5\n */\n function meanBy(array, iteratee) {\n return baseMean(array, getIteratee(iteratee, 2));\n }\n\n /**\n * Computes the minimum value of `array`. If `array` is empty or falsey,\n * `undefined` is returned.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Math\n * @param {Array} array The array to iterate over.\n * @returns {*} Returns the minimum value.\n * @example\n *\n * _.min([4, 2, 8, 6]);\n * // => 2\n *\n * _.min([]);\n * // => undefined\n */\n function min(array) {\n return (array && array.length)\n ? baseExtremum(array, identity, baseLt)\n : undefined;\n }\n\n /**\n * This method is like `_.min` except that it accepts `iteratee` which is\n * invoked for each element in `array` to generate the criterion by which\n * the value is ranked. The iteratee is invoked with one argument: (value).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Math\n * @param {Array} array The array to iterate over.\n * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n * @returns {*} Returns the minimum value.\n * @example\n *\n * var objects = [{ 'n': 1 }, { 'n': 2 }];\n *\n * _.minBy(objects, function(o) { return o.n; });\n * // => { 'n': 1 }\n *\n * // The `_.property` iteratee shorthand.\n * _.minBy(objects, 'n');\n * // => { 'n': 1 }\n */\n function minBy(array, iteratee) {\n return (array && array.length)\n ? baseExtremum(array, getIteratee(iteratee, 2), baseLt)\n : undefined;\n }\n\n /**\n * Multiply two numbers.\n *\n * @static\n * @memberOf _\n * @since 4.7.0\n * @category Math\n * @param {number} multiplier The first number in a multiplication.\n * @param {number} multiplicand The second number in a multiplication.\n * @returns {number} Returns the product.\n * @example\n *\n * _.multiply(6, 4);\n * // => 24\n */\n var multiply = createMathOperation(function(multiplier, multiplicand) {\n return multiplier * multiplicand;\n }, 1);\n\n /**\n * Computes `number` rounded to `precision`.\n *\n * @static\n * @memberOf _\n * @since 3.10.0\n * @category Math\n * @param {number} number The number to round.\n * @param {number} [precision=0] The precision to round to.\n * @returns {number} Returns the rounded number.\n * @example\n *\n * _.round(4.006);\n * // => 4\n *\n * _.round(4.006, 2);\n * // => 4.01\n *\n * _.round(4060, -2);\n * // => 4100\n */\n var round = createRound('round');\n\n /**\n * Subtract two numbers.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Math\n * @param {number} minuend The first number in a subtraction.\n * @param {number} subtrahend The second number in a subtraction.\n * @returns {number} Returns the difference.\n * @example\n *\n * _.subtract(6, 4);\n * // => 2\n */\n var subtract = createMathOperation(function(minuend, subtrahend) {\n return minuend - subtrahend;\n }, 0);\n\n /**\n * Computes the sum of the values in `array`.\n *\n * @static\n * @memberOf _\n * @since 3.4.0\n * @category Math\n * @param {Array} array The array to iterate over.\n * @returns {number} Returns the sum.\n * @example\n *\n * _.sum([4, 2, 8, 6]);\n * // => 20\n */\n function sum(array) {\n return (array && array.length)\n ? baseSum(array, identity)\n : 0;\n }\n\n /**\n * This method is like `_.sum` except that it accepts `iteratee` which is\n * invoked for each element in `array` to generate the value to be summed.\n * The iteratee is invoked with one argument: (value).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Math\n * @param {Array} array The array to iterate over.\n * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n * @returns {number} Returns the sum.\n * @example\n *\n * var objects = [{ 'n': 4 }, { 'n': 2 }, { 'n': 8 }, { 'n': 6 }];\n *\n * _.sumBy(objects, function(o) { return o.n; });\n * // => 20\n *\n * // The `_.property` iteratee shorthand.\n * _.sumBy(objects, 'n');\n * // => 20\n */\n function sumBy(array, iteratee) {\n return (array && array.length)\n ? baseSum(array, getIteratee(iteratee, 2))\n : 0;\n }\n\n /*------------------------------------------------------------------------*/\n\n // Add methods that return wrapped values in chain sequences.\n lodash.after = after;\n lodash.ary = ary;\n lodash.assign = assign;\n lodash.assignIn = assignIn;\n lodash.assignInWith = assignInWith;\n lodash.assignWith = assignWith;\n lodash.at = at;\n lodash.before = before;\n lodash.bind = bind;\n lodash.bindAll = bindAll;\n lodash.bindKey = bindKey;\n lodash.castArray = castArray;\n lodash.chain = chain;\n lodash.chunk = chunk;\n lodash.compact = compact;\n lodash.concat = concat;\n lodash.cond = cond;\n lodash.conforms = conforms;\n lodash.constant = constant;\n lodash.countBy = countBy;\n lodash.create = create;\n lodash.curry = curry;\n lodash.curryRight = curryRight;\n lodash.debounce = debounce;\n lodash.defaults = defaults;\n lodash.defaultsDeep = defaultsDeep;\n lodash.defer = defer;\n lodash.delay = delay;\n lodash.difference = difference;\n lodash.differenceBy = differenceBy;\n lodash.differenceWith = differenceWith;\n lodash.drop = drop;\n lodash.dropRight = dropRight;\n lodash.dropRightWhile = dropRightWhile;\n lodash.dropWhile = dropWhile;\n lodash.fill = fill;\n lodash.filter = filter;\n lodash.flatMap = flatMap;\n lodash.flatMapDeep = flatMapDeep;\n lodash.flatMapDepth = flatMapDepth;\n lodash.flatten = flatten;\n lodash.flattenDeep = flattenDeep;\n lodash.flattenDepth = flattenDepth;\n lodash.flip = flip;\n lodash.flow = flow;\n lodash.flowRight = flowRight;\n lodash.fromPairs = fromPairs;\n lodash.functions = functions;\n lodash.functionsIn = functionsIn;\n lodash.groupBy = groupBy;\n lodash.initial = initial;\n lodash.intersection = intersection;\n lodash.intersectionBy = intersectionBy;\n lodash.intersectionWith = intersectionWith;\n lodash.invert = invert;\n lodash.invertBy = invertBy;\n lodash.invokeMap = invokeMap;\n lodash.iteratee = iteratee;\n lodash.keyBy = keyBy;\n lodash.keys = keys;\n lodash.keysIn = keysIn;\n lodash.map = map;\n lodash.mapKeys = mapKeys;\n lodash.mapValues = mapValues;\n lodash.matches = matches;\n lodash.matchesProperty = matchesProperty;\n lodash.memoize = memoize;\n lodash.merge = merge;\n lodash.mergeWith = mergeWith;\n lodash.method = method;\n lodash.methodOf = methodOf;\n lodash.mixin = mixin;\n lodash.negate = negate;\n lodash.nthArg = nthArg;\n lodash.omit = omit;\n lodash.omitBy = omitBy;\n lodash.once = once;\n lodash.orderBy = orderBy;\n lodash.over = over;\n lodash.overArgs = overArgs;\n lodash.overEvery = overEvery;\n lodash.overSome = overSome;\n lodash.partial = partial;\n lodash.partialRight = partialRight;\n lodash.partition = partition;\n lodash.pick = pick;\n lodash.pickBy = pickBy;\n lodash.property = property;\n lodash.propertyOf = propertyOf;\n lodash.pull = pull;\n lodash.pullAll = pullAll;\n lodash.pullAllBy = pullAllBy;\n lodash.pullAllWith = pullAllWith;\n lodash.pullAt = pullAt;\n lodash.range = range;\n lodash.rangeRight = rangeRight;\n lodash.rearg = rearg;\n lodash.reject = reject;\n lodash.remove = remove;\n lodash.rest = rest;\n lodash.reverse = reverse;\n lodash.sampleSize = sampleSize;\n lodash.set = set;\n lodash.setWith = setWith;\n lodash.shuffle = shuffle;\n lodash.slice = slice;\n lodash.sortBy = sortBy;\n lodash.sortedUniq = sortedUniq;\n lodash.sortedUniqBy = sortedUniqBy;\n lodash.split = split;\n lodash.spread = spread;\n lodash.tail = tail;\n lodash.take = take;\n lodash.takeRight = takeRight;\n lodash.takeRightWhile = takeRightWhile;\n lodash.takeWhile = takeWhile;\n lodash.tap = tap;\n lodash.throttle = throttle;\n lodash.thru = thru;\n lodash.toArray = toArray;\n lodash.toPairs = toPairs;\n lodash.toPairsIn = toPairsIn;\n lodash.toPath = toPath;\n lodash.toPlainObject = toPlainObject;\n lodash.transform = transform;\n lodash.unary = unary;\n lodash.union = union;\n lodash.unionBy = unionBy;\n lodash.unionWith = unionWith;\n lodash.uniq = uniq;\n lodash.uniqBy = uniqBy;\n lodash.uniqWith = uniqWith;\n lodash.unset = unset;\n lodash.unzip = unzip;\n lodash.unzipWith = unzipWith;\n lodash.update = update;\n lodash.updateWith = updateWith;\n lodash.values = values;\n lodash.valuesIn = valuesIn;\n lodash.without = without;\n lodash.words = words;\n lodash.wrap = wrap;\n lodash.xor = xor;\n lodash.xorBy = xorBy;\n lodash.xorWith = xorWith;\n lodash.zip = zip;\n lodash.zipObject = zipObject;\n lodash.zipObjectDeep = zipObjectDeep;\n lodash.zipWith = zipWith;\n\n // Add aliases.\n lodash.entries = toPairs;\n lodash.entriesIn = toPairsIn;\n lodash.extend = assignIn;\n lodash.extendWith = assignInWith;\n\n // Add methods to `lodash.prototype`.\n mixin(lodash, lodash);\n\n /*------------------------------------------------------------------------*/\n\n // Add methods that return unwrapped values in chain sequences.\n lodash.add = add;\n lodash.attempt = attempt;\n lodash.camelCase = camelCase;\n lodash.capitalize = capitalize;\n lodash.ceil = ceil;\n lodash.clamp = clamp;\n lodash.clone = clone;\n lodash.cloneDeep = cloneDeep;\n lodash.cloneDeepWith = cloneDeepWith;\n lodash.cloneWith = cloneWith;\n lodash.conformsTo = conformsTo;\n lodash.deburr = deburr;\n lodash.defaultTo = defaultTo;\n lodash.divide = divide;\n lodash.endsWith = endsWith;\n lodash.eq = eq;\n lodash.escape = escape;\n lodash.escapeRegExp = escapeRegExp;\n lodash.every = every;\n lodash.find = find;\n lodash.findIndex = findIndex;\n lodash.findKey = findKey;\n lodash.findLast = findLast;\n lodash.findLastIndex = findLastIndex;\n lodash.findLastKey = findLastKey;\n lodash.floor = floor;\n lodash.forEach = forEach;\n lodash.forEachRight = forEachRight;\n lodash.forIn = forIn;\n lodash.forInRight = forInRight;\n lodash.forOwn = forOwn;\n lodash.forOwnRight = forOwnRight;\n lodash.get = get;\n lodash.gt = gt;\n lodash.gte = gte;\n lodash.has = has;\n lodash.hasIn = hasIn;\n lodash.head = head;\n lodash.identity = identity;\n lodash.includes = includes;\n lodash.indexOf = indexOf;\n lodash.inRange = inRange;\n lodash.invoke = invoke;\n lodash.isArguments = isArguments;\n lodash.isArray = isArray;\n lodash.isArrayBuffer = isArrayBuffer;\n lodash.isArrayLike = isArrayLike;\n lodash.isArrayLikeObject = isArrayLikeObject;\n lodash.isBoolean = isBoolean;\n lodash.isBuffer = isBuffer;\n lodash.isDate = isDate;\n lodash.isElement = isElement;\n lodash.isEmpty = isEmpty;\n lodash.isEqual = isEqual;\n lodash.isEqualWith = isEqualWith;\n lodash.isError = isError;\n lodash.isFinite = isFinite;\n lodash.isFunction = isFunction;\n lodash.isInteger = isInteger;\n lodash.isLength = isLength;\n lodash.isMap = isMap;\n lodash.isMatch = isMatch;\n lodash.isMatchWith = isMatchWith;\n lodash.isNaN = isNaN;\n lodash.isNative = isNative;\n lodash.isNil = isNil;\n lodash.isNull = isNull;\n lodash.isNumber = isNumber;\n lodash.isObject = isObject;\n lodash.isObjectLike = isObjectLike;\n lodash.isPlainObject = isPlainObject;\n lodash.isRegExp = isRegExp;\n lodash.isSafeInteger = isSafeInteger;\n lodash.isSet = isSet;\n lodash.isString = isString;\n lodash.isSymbol = isSymbol;\n lodash.isTypedArray = isTypedArray;\n lodash.isUndefined = isUndefined;\n lodash.isWeakMap = isWeakMap;\n lodash.isWeakSet = isWeakSet;\n lodash.join = join;\n lodash.kebabCase = kebabCase;\n lodash.last = last;\n lodash.lastIndexOf = lastIndexOf;\n lodash.lowerCase = lowerCase;\n lodash.lowerFirst = lowerFirst;\n lodash.lt = lt;\n lodash.lte = lte;\n lodash.max = max;\n lodash.maxBy = maxBy;\n lodash.mean = mean;\n lodash.meanBy = meanBy;\n lodash.min = min;\n lodash.minBy = minBy;\n lodash.stubArray = stubArray;\n lodash.stubFalse = stubFalse;\n lodash.stubObject = stubObject;\n lodash.stubString = stubString;\n lodash.stubTrue = stubTrue;\n lodash.multiply = multiply;\n lodash.nth = nth;\n lodash.noConflict = noConflict;\n lodash.noop = noop;\n lodash.now = now;\n lodash.pad = pad;\n lodash.padEnd = padEnd;\n lodash.padStart = padStart;\n lodash.parseInt = parseInt;\n lodash.random = random;\n lodash.reduce = reduce;\n lodash.reduceRight = reduceRight;\n lodash.repeat = repeat;\n lodash.replace = replace;\n lodash.result = result;\n lodash.round = round;\n lodash.runInContext = runInContext;\n lodash.sample = sample;\n lodash.size = size;\n lodash.snakeCase = snakeCase;\n lodash.some = some;\n lodash.sortedIndex = sortedIndex;\n lodash.sortedIndexBy = sortedIndexBy;\n lodash.sortedIndexOf = sortedIndexOf;\n lodash.sortedLastIndex = sortedLastIndex;\n lodash.sortedLastIndexBy = sortedLastIndexBy;\n lodash.sortedLastIndexOf = sortedLastIndexOf;\n lodash.startCase = startCase;\n lodash.startsWith = startsWith;\n lodash.subtract = subtract;\n lodash.sum = sum;\n lodash.sumBy = sumBy;\n lodash.template = template;\n lodash.times = times;\n lodash.toFinite = toFinite;\n lodash.toInteger = toInteger;\n lodash.toLength = toLength;\n lodash.toLower = toLower;\n lodash.toNumber = toNumber;\n lodash.toSafeInteger = toSafeInteger;\n lodash.toString = toString;\n lodash.toUpper = toUpper;\n lodash.trim = trim;\n lodash.trimEnd = trimEnd;\n lodash.trimStart = trimStart;\n lodash.truncate = truncate;\n lodash.unescape = unescape;\n lodash.uniqueId = uniqueId;\n lodash.upperCase = upperCase;\n lodash.upperFirst = upperFirst;\n\n // Add aliases.\n lodash.each = forEach;\n lodash.eachRight = forEachRight;\n lodash.first = head;\n\n mixin(lodash, (function() {\n var source = {};\n baseForOwn(lodash, function(func, methodName) {\n if (!hasOwnProperty.call(lodash.prototype, methodName)) {\n source[methodName] = func;\n }\n });\n return source;\n }()), { 'chain': false });\n\n /*------------------------------------------------------------------------*/\n\n /**\n * The semantic version number.\n *\n * @static\n * @memberOf _\n * @type {string}\n */\n lodash.VERSION = VERSION;\n\n // Assign default placeholders.\n arrayEach(['bind', 'bindKey', 'curry', 'curryRight', 'partial', 'partialRight'], function(methodName) {\n lodash[methodName].placeholder = lodash;\n });\n\n // Add `LazyWrapper` methods for `_.drop` and `_.take` variants.\n arrayEach(['drop', 'take'], function(methodName, index) {\n LazyWrapper.prototype[methodName] = function(n) {\n n = n === undefined ? 1 : nativeMax(toInteger(n), 0);\n\n var result = (this.__filtered__ && !index)\n ? new LazyWrapper(this)\n : this.clone();\n\n if (result.__filtered__) {\n result.__takeCount__ = nativeMin(n, result.__takeCount__);\n } else {\n result.__views__.push({\n 'size': nativeMin(n, MAX_ARRAY_LENGTH),\n 'type': methodName + (result.__dir__ < 0 ? 'Right' : '')\n });\n }\n return result;\n };\n\n LazyWrapper.prototype[methodName + 'Right'] = function(n) {\n return this.reverse()[methodName](n).reverse();\n };\n });\n\n // Add `LazyWrapper` methods that accept an `iteratee` value.\n arrayEach(['filter', 'map', 'takeWhile'], function(methodName, index) {\n var type = index + 1,\n isFilter = type == LAZY_FILTER_FLAG || type == LAZY_WHILE_FLAG;\n\n LazyWrapper.prototype[methodName] = function(iteratee) {\n var result = this.clone();\n result.__iteratees__.push({\n 'iteratee': getIteratee(iteratee, 3),\n 'type': type\n });\n result.__filtered__ = result.__filtered__ || isFilter;\n return result;\n };\n });\n\n // Add `LazyWrapper` methods for `_.head` and `_.last`.\n arrayEach(['head', 'last'], function(methodName, index) {\n var takeName = 'take' + (index ? 'Right' : '');\n\n LazyWrapper.prototype[methodName] = function() {\n return this[takeName](1).value()[0];\n };\n });\n\n // Add `LazyWrapper` methods for `_.initial` and `_.tail`.\n arrayEach(['initial', 'tail'], function(methodName, index) {\n var dropName = 'drop' + (index ? '' : 'Right');\n\n LazyWrapper.prototype[methodName] = function() {\n return this.__filtered__ ? new LazyWrapper(this) : this[dropName](1);\n };\n });\n\n LazyWrapper.prototype.compact = function() {\n return this.filter(identity);\n };\n\n LazyWrapper.prototype.find = function(predicate) {\n return this.filter(predicate).head();\n };\n\n LazyWrapper.prototype.findLast = function(predicate) {\n return this.reverse().find(predicate);\n };\n\n LazyWrapper.prototype.invokeMap = baseRest(function(path, args) {\n if (typeof path == 'function') {\n return new LazyWrapper(this);\n }\n return this.map(function(value) {\n return baseInvoke(value, path, args);\n });\n });\n\n LazyWrapper.prototype.reject = function(predicate) {\n return this.filter(negate(getIteratee(predicate)));\n };\n\n LazyWrapper.prototype.slice = function(start, end) {\n start = toInteger(start);\n\n var result = this;\n if (result.__filtered__ && (start > 0 || end < 0)) {\n return new LazyWrapper(result);\n }\n if (start < 0) {\n result = result.takeRight(-start);\n } else if (start) {\n result = result.drop(start);\n }\n if (end !== undefined) {\n end = toInteger(end);\n result = end < 0 ? result.dropRight(-end) : result.take(end - start);\n }\n return result;\n };\n\n LazyWrapper.prototype.takeRightWhile = function(predicate) {\n return this.reverse().takeWhile(predicate).reverse();\n };\n\n LazyWrapper.prototype.toArray = function() {\n return this.take(MAX_ARRAY_LENGTH);\n };\n\n // Add `LazyWrapper` methods to `lodash.prototype`.\n baseForOwn(LazyWrapper.prototype, function(func, methodName) {\n var checkIteratee = /^(?:filter|find|map|reject)|While$/.test(methodName),\n isTaker = /^(?:head|last)$/.test(methodName),\n lodashFunc = lodash[isTaker ? ('take' + (methodName == 'last' ? 'Right' : '')) : methodName],\n retUnwrapped = isTaker || /^find/.test(methodName);\n\n if (!lodashFunc) {\n return;\n }\n lodash.prototype[methodName] = function() {\n var value = this.__wrapped__,\n args = isTaker ? [1] : arguments,\n isLazy = value instanceof LazyWrapper,\n iteratee = args[0],\n useLazy = isLazy || isArray(value);\n\n var interceptor = function(value) {\n var result = lodashFunc.apply(lodash, arrayPush([value], args));\n return (isTaker && chainAll) ? result[0] : result;\n };\n\n if (useLazy && checkIteratee && typeof iteratee == 'function' && iteratee.length != 1) {\n // Avoid lazy use if the iteratee has a \"length\" value other than `1`.\n isLazy = useLazy = false;\n }\n var chainAll = this.__chain__,\n isHybrid = !!this.__actions__.length,\n isUnwrapped = retUnwrapped && !chainAll,\n onlyLazy = isLazy && !isHybrid;\n\n if (!retUnwrapped && useLazy) {\n value = onlyLazy ? value : new LazyWrapper(this);\n var result = func.apply(value, args);\n result.__actions__.push({ 'func': thru, 'args': [interceptor], 'thisArg': undefined });\n return new LodashWrapper(result, chainAll);\n }\n if (isUnwrapped && onlyLazy) {\n return func.apply(this, args);\n }\n result = this.thru(interceptor);\n return isUnwrapped ? (isTaker ? result.value()[0] : result.value()) : result;\n };\n });\n\n // Add `Array` methods to `lodash.prototype`.\n arrayEach(['pop', 'push', 'shift', 'sort', 'splice', 'unshift'], function(methodName) {\n var func = arrayProto[methodName],\n chainName = /^(?:push|sort|unshift)$/.test(methodName) ? 'tap' : 'thru',\n retUnwrapped = /^(?:pop|shift)$/.test(methodName);\n\n lodash.prototype[methodName] = function() {\n var args = arguments;\n if (retUnwrapped && !this.__chain__) {\n var value = this.value();\n return func.apply(isArray(value) ? value : [], args);\n }\n return this[chainName](function(value) {\n return func.apply(isArray(value) ? value : [], args);\n });\n };\n });\n\n // Map minified method names to their real names.\n baseForOwn(LazyWrapper.prototype, function(func, methodName) {\n var lodashFunc = lodash[methodName];\n if (lodashFunc) {\n var key = lodashFunc.name + '';\n if (!hasOwnProperty.call(realNames, key)) {\n realNames[key] = [];\n }\n realNames[key].push({ 'name': methodName, 'func': lodashFunc });\n }\n });\n\n realNames[createHybrid(undefined, WRAP_BIND_KEY_FLAG).name] = [{\n 'name': 'wrapper',\n 'func': undefined\n }];\n\n // Add methods to `LazyWrapper`.\n LazyWrapper.prototype.clone = lazyClone;\n LazyWrapper.prototype.reverse = lazyReverse;\n LazyWrapper.prototype.value = lazyValue;\n\n // Add chain sequence methods to the `lodash` wrapper.\n lodash.prototype.at = wrapperAt;\n lodash.prototype.chain = wrapperChain;\n lodash.prototype.commit = wrapperCommit;\n lodash.prototype.next = wrapperNext;\n lodash.prototype.plant = wrapperPlant;\n lodash.prototype.reverse = wrapperReverse;\n lodash.prototype.toJSON = lodash.prototype.valueOf = lodash.prototype.value = wrapperValue;\n\n // Add lazy aliases.\n lodash.prototype.first = lodash.prototype.head;\n\n if (symIterator) {\n lodash.prototype[symIterator] = wrapperToIterator;\n }\n return lodash;\n });\n\n /*--------------------------------------------------------------------------*/\n\n // Export lodash.\n var _ = runInContext();\n\n // Some AMD build optimizers, like r.js, check for condition patterns like:\n if (typeof define == 'function' && typeof define.amd == 'object' && define.amd) {\n // Expose Lodash on the global object to prevent errors when Lodash is\n // loaded by a script tag in the presence of an AMD loader.\n // See http://requirejs.org/docs/errors.html#mismatch for more details.\n // Use `_.noConflict` to remove Lodash from the global object.\n root._ = _;\n\n // Define as an anonymous module so, through path mapping, it can be\n // referenced as the \"underscore\" module.\n define(function() {\n return _;\n });\n }\n // Check for `exports` after `define` in case a build optimizer adds it.\n else if (freeModule) {\n // Export for Node.js.\n (freeModule.exports = _)._ = _;\n // Export for CommonJS support.\n freeExports._ = _;\n }\n else {\n // Export to the global object.\n root._ = _;\n }\n}.call(this));\n","\r\n/** \r\n * This class handles executing code on the next run loop. This is the same as `setImmediate()` or `setTimeout(..., 0)` except\r\n * it doesn't create so many timers.\r\n */\r\nexport default new class Delayer {\r\n\r\n constructor() {\r\n\r\n /** List of functions to execute on the next run loop */\r\n this.pending = []\r\n\r\n /** Timer to execute pending actions */\r\n this.timer = null\r\n\r\n // Bind function\r\n this.executePendingActions = this.executePendingActions.bind(this)\r\n\r\n }\r\n\r\n /** Schedule an action */\r\n run(func) {\r\n\r\n // Add to list\r\n this.pending.push(func)\r\n\r\n // Start timer if needed\r\n if (!this.timer)\r\n this.timer = setTimeout(this.executePendingActions, 0)\r\n\r\n }\r\n\r\n /** @private Called to execute pending actions */\r\n executePendingActions() {\r\n\r\n // Remove timer\r\n this.timer = null\r\n\r\n // Perform each action\r\n let actions = this.pending\r\n this.pending = []\r\n for (let action of actions) {\r\n\r\n // Catch errors\r\n try {\r\n action()\r\n } catch (err) {\r\n console.error('Delayed action failed: ', err)\r\n }\r\n\r\n }\r\n\r\n }\r\n\r\n}","var g;\n\n// This works in non-strict mode\ng = (function() {\n\treturn this;\n})();\n\ntry {\n\t// This works if eval is allowed (see CSP)\n\tg = g || new Function(\"return this\")();\n} catch (e) {\n\t// This works if the window reference is available\n\tif (typeof window === \"object\") g = window;\n}\n\n// g can still be undefined, but nothing to do about it...\n// We return undefined, instead of nothing here, so it's\n// easier to handle this case. if(!global) { ...}\n\nmodule.exports = g;\n","'use strict';\nvar fails = require('./_fails');\n\nmodule.exports = function (method, arg) {\n return !!method && fails(function () {\n // eslint-disable-next-line no-useless-call\n arg ? method.call(null, function () { /* empty */ }, 1) : method.call(null);\n });\n};\n","// optional / simple context binding\nvar aFunction = require('./_a-function');\nmodule.exports = function (fn, that, length) {\n aFunction(fn);\n if (that === undefined) return fn;\n switch (length) {\n case 1: return function (a) {\n return fn.call(that, a);\n };\n case 2: return function (a, b) {\n return fn.call(that, a, b);\n };\n case 3: return function (a, b, c) {\n return fn.call(that, a, b, c);\n };\n }\n return function (/* ...args */) {\n return fn.apply(that, arguments);\n };\n};\n","module.exports = function (it) {\n if (typeof it != 'function') throw TypeError(it + ' is not a function!');\n return it;\n};\n","// 7.1.4 ToInteger\nvar ceil = Math.ceil;\nvar floor = Math.floor;\nmodule.exports = function (it) {\n return isNaN(it = +it) ? 0 : (it > 0 ? floor : ceil)(it);\n};\n","var pIE = require('./_object-pie');\nvar createDesc = require('./_property-desc');\nvar toIObject = require('./_to-iobject');\nvar toPrimitive = require('./_to-primitive');\nvar has = require('./_has');\nvar IE8_DOM_DEFINE = require('./_ie8-dom-define');\nvar gOPD = Object.getOwnPropertyDescriptor;\n\nexports.f = require('./_descriptors') ? gOPD : function getOwnPropertyDescriptor(O, P) {\n O = toIObject(O);\n P = toPrimitive(P, true);\n if (IE8_DOM_DEFINE) try {\n return gOPD(O, P);\n } catch (e) { /* empty */ }\n if (has(O, P)) return createDesc(!pIE.f.call(O, P), O[P]);\n};\n","// most Object methods by ES6 should accept primitives\nvar $export = require('./_export');\nvar core = require('./_core');\nvar fails = require('./_fails');\nmodule.exports = function (KEY, exec) {\n var fn = (core.Object || {})[KEY] || Object[KEY];\n var exp = {};\n exp[KEY] = exec(fn);\n $export($export.S + $export.F * fails(function () { fn(1); }), 'Object', exp);\n};\n","// 0 -> Array#forEach\n// 1 -> Array#map\n// 2 -> Array#filter\n// 3 -> Array#some\n// 4 -> Array#every\n// 5 -> Array#find\n// 6 -> Array#findIndex\nvar ctx = require('./_ctx');\nvar IObject = require('./_iobject');\nvar toObject = require('./_to-object');\nvar toLength = require('./_to-length');\nvar asc = require('./_array-species-create');\nmodule.exports = function (TYPE, $create) {\n var IS_MAP = TYPE == 1;\n var IS_FILTER = TYPE == 2;\n var IS_SOME = TYPE == 3;\n var IS_EVERY = TYPE == 4;\n var IS_FIND_INDEX = TYPE == 6;\n var NO_HOLES = TYPE == 5 || IS_FIND_INDEX;\n var create = $create || asc;\n return function ($this, callbackfn, that) {\n var O = toObject($this);\n var self = IObject(O);\n var f = ctx(callbackfn, that, 3);\n var length = toLength(self.length);\n var index = 0;\n var result = IS_MAP ? create($this, length) : IS_FILTER ? create($this, 0) : undefined;\n var val, res;\n for (;length > index; index++) if (NO_HOLES || index in self) {\n val = self[index];\n res = f(val, index, O);\n if (TYPE) {\n if (IS_MAP) result[index] = res; // map\n else if (res) switch (TYPE) {\n case 3: return true; // some\n case 5: return val; // find\n case 6: return index; // findIndex\n case 2: result.push(val); // filter\n } else if (IS_EVERY) return false; // every\n }\n }\n return IS_FIND_INDEX ? -1 : IS_SOME || IS_EVERY ? IS_EVERY : result;\n };\n};\n","// shim for using process in browser\nvar process = module.exports = {};\n\n// cached from whatever global is present so that test runners that stub it\n// don't break things. But we need to wrap it in a try catch in case it is\n// wrapped in strict mode code which doesn't define any globals. It's inside a\n// function because try/catches deoptimize in certain engines.\n\nvar cachedSetTimeout;\nvar cachedClearTimeout;\n\nfunction defaultSetTimout() {\n throw new Error('setTimeout has not been defined');\n}\nfunction defaultClearTimeout () {\n throw new Error('clearTimeout has not been defined');\n}\n(function () {\n try {\n if (typeof setTimeout === 'function') {\n cachedSetTimeout = setTimeout;\n } else {\n cachedSetTimeout = defaultSetTimout;\n }\n } catch (e) {\n cachedSetTimeout = defaultSetTimout;\n }\n try {\n if (typeof clearTimeout === 'function') {\n cachedClearTimeout = clearTimeout;\n } else {\n cachedClearTimeout = defaultClearTimeout;\n }\n } catch (e) {\n cachedClearTimeout = defaultClearTimeout;\n }\n} ())\nfunction runTimeout(fun) {\n if (cachedSetTimeout === setTimeout) {\n //normal enviroments in sane situations\n return setTimeout(fun, 0);\n }\n // if setTimeout wasn't available but was latter defined\n if ((cachedSetTimeout === defaultSetTimout || !cachedSetTimeout) && setTimeout) {\n cachedSetTimeout = setTimeout;\n return setTimeout(fun, 0);\n }\n try {\n // when when somebody has screwed with setTimeout but no I.E. maddness\n return cachedSetTimeout(fun, 0);\n } catch(e){\n try {\n // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally\n return cachedSetTimeout.call(null, fun, 0);\n } catch(e){\n // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error\n return cachedSetTimeout.call(this, fun, 0);\n }\n }\n\n\n}\nfunction runClearTimeout(marker) {\n if (cachedClearTimeout === clearTimeout) {\n //normal enviroments in sane situations\n return clearTimeout(marker);\n }\n // if clearTimeout wasn't available but was latter defined\n if ((cachedClearTimeout === defaultClearTimeout || !cachedClearTimeout) && clearTimeout) {\n cachedClearTimeout = clearTimeout;\n return clearTimeout(marker);\n }\n try {\n // when when somebody has screwed with setTimeout but no I.E. maddness\n return cachedClearTimeout(marker);\n } catch (e){\n try {\n // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally\n return cachedClearTimeout.call(null, marker);\n } catch (e){\n // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error.\n // Some versions of I.E. have different rules for clearTimeout vs setTimeout\n return cachedClearTimeout.call(this, marker);\n }\n }\n\n\n\n}\nvar queue = [];\nvar draining = false;\nvar currentQueue;\nvar queueIndex = -1;\n\nfunction cleanUpNextTick() {\n if (!draining || !currentQueue) {\n return;\n }\n draining = false;\n if (currentQueue.length) {\n queue = currentQueue.concat(queue);\n } else {\n queueIndex = -1;\n }\n if (queue.length) {\n drainQueue();\n }\n}\n\nfunction drainQueue() {\n if (draining) {\n return;\n }\n var timeout = runTimeout(cleanUpNextTick);\n draining = true;\n\n var len = queue.length;\n while(len) {\n currentQueue = queue;\n queue = [];\n while (++queueIndex < len) {\n if (currentQueue) {\n currentQueue[queueIndex].run();\n }\n }\n queueIndex = -1;\n len = queue.length;\n }\n currentQueue = null;\n draining = false;\n runClearTimeout(timeout);\n}\n\nprocess.nextTick = function (fun) {\n var args = new Array(arguments.length - 1);\n if (arguments.length > 1) {\n for (var i = 1; i < arguments.length; i++) {\n args[i - 1] = arguments[i];\n }\n }\n queue.push(new Item(fun, args));\n if (queue.length === 1 && !draining) {\n runTimeout(drainQueue);\n }\n};\n\n// v8 likes predictible objects\nfunction Item(fun, array) {\n this.fun = fun;\n this.array = array;\n}\nItem.prototype.run = function () {\n this.fun.apply(null, this.array);\n};\nprocess.title = 'browser';\nprocess.browser = true;\nprocess.env = {};\nprocess.argv = [];\nprocess.version = ''; // empty string to avoid regexp issues\nprocess.versions = {};\n\nfunction noop() {}\n\nprocess.on = noop;\nprocess.addListener = noop;\nprocess.once = noop;\nprocess.off = noop;\nprocess.removeListener = noop;\nprocess.removeAllListeners = noop;\nprocess.emit = noop;\nprocess.prependListener = noop;\nprocess.prependOnceListener = noop;\n\nprocess.listeners = function (name) { return [] }\n\nprocess.binding = function (name) {\n throw new Error('process.binding is not supported');\n};\n\nprocess.cwd = function () { return '/' };\nprocess.chdir = function (dir) {\n throw new Error('process.chdir is not supported');\n};\nprocess.umask = function() { return 0; };\n","var toString = {}.toString;\n\nmodule.exports = function (it) {\n return toString.call(it).slice(8, -1);\n};\n","// 7.2.1 RequireObjectCoercible(argument)\nmodule.exports = function (it) {\n if (it == undefined) throw TypeError(\"Can't call method on \" + it);\n return it;\n};\n","'use strict';\nif (require('./_descriptors')) {\n var LIBRARY = require('./_library');\n var global = require('./_global');\n var fails = require('./_fails');\n var $export = require('./_export');\n var $typed = require('./_typed');\n var $buffer = require('./_typed-buffer');\n var ctx = require('./_ctx');\n var anInstance = require('./_an-instance');\n var propertyDesc = require('./_property-desc');\n var hide = require('./_hide');\n var redefineAll = require('./_redefine-all');\n var toInteger = require('./_to-integer');\n var toLength = require('./_to-length');\n var toIndex = require('./_to-index');\n var toAbsoluteIndex = require('./_to-absolute-index');\n var toPrimitive = require('./_to-primitive');\n var has = require('./_has');\n var classof = require('./_classof');\n var isObject = require('./_is-object');\n var toObject = require('./_to-object');\n var isArrayIter = require('./_is-array-iter');\n var create = require('./_object-create');\n var getPrototypeOf = require('./_object-gpo');\n var gOPN = require('./_object-gopn').f;\n var getIterFn = require('./core.get-iterator-method');\n var uid = require('./_uid');\n var wks = require('./_wks');\n var createArrayMethod = require('./_array-methods');\n var createArrayIncludes = require('./_array-includes');\n var speciesConstructor = require('./_species-constructor');\n var ArrayIterators = require('./es6.array.iterator');\n var Iterators = require('./_iterators');\n var $iterDetect = require('./_iter-detect');\n var setSpecies = require('./_set-species');\n var arrayFill = require('./_array-fill');\n var arrayCopyWithin = require('./_array-copy-within');\n var $DP = require('./_object-dp');\n var $GOPD = require('./_object-gopd');\n var dP = $DP.f;\n var gOPD = $GOPD.f;\n var RangeError = global.RangeError;\n var TypeError = global.TypeError;\n var Uint8Array = global.Uint8Array;\n var ARRAY_BUFFER = 'ArrayBuffer';\n var SHARED_BUFFER = 'Shared' + ARRAY_BUFFER;\n var BYTES_PER_ELEMENT = 'BYTES_PER_ELEMENT';\n var PROTOTYPE = 'prototype';\n var ArrayProto = Array[PROTOTYPE];\n var $ArrayBuffer = $buffer.ArrayBuffer;\n var $DataView = $buffer.DataView;\n var arrayForEach = createArrayMethod(0);\n var arrayFilter = createArrayMethod(2);\n var arraySome = createArrayMethod(3);\n var arrayEvery = createArrayMethod(4);\n var arrayFind = createArrayMethod(5);\n var arrayFindIndex = createArrayMethod(6);\n var arrayIncludes = createArrayIncludes(true);\n var arrayIndexOf = createArrayIncludes(false);\n var arrayValues = ArrayIterators.values;\n var arrayKeys = ArrayIterators.keys;\n var arrayEntries = ArrayIterators.entries;\n var arrayLastIndexOf = ArrayProto.lastIndexOf;\n var arrayReduce = ArrayProto.reduce;\n var arrayReduceRight = ArrayProto.reduceRight;\n var arrayJoin = ArrayProto.join;\n var arraySort = ArrayProto.sort;\n var arraySlice = ArrayProto.slice;\n var arrayToString = ArrayProto.toString;\n var arrayToLocaleString = ArrayProto.toLocaleString;\n var ITERATOR = wks('iterator');\n var TAG = wks('toStringTag');\n var TYPED_CONSTRUCTOR = uid('typed_constructor');\n var DEF_CONSTRUCTOR = uid('def_constructor');\n var ALL_CONSTRUCTORS = $typed.CONSTR;\n var TYPED_ARRAY = $typed.TYPED;\n var VIEW = $typed.VIEW;\n var WRONG_LENGTH = 'Wrong length!';\n\n var $map = createArrayMethod(1, function (O, length) {\n return allocate(speciesConstructor(O, O[DEF_CONSTRUCTOR]), length);\n });\n\n var LITTLE_ENDIAN = fails(function () {\n // eslint-disable-next-line no-undef\n return new Uint8Array(new Uint16Array([1]).buffer)[0] === 1;\n });\n\n var FORCED_SET = !!Uint8Array && !!Uint8Array[PROTOTYPE].set && fails(function () {\n new Uint8Array(1).set({});\n });\n\n var toOffset = function (it, BYTES) {\n var offset = toInteger(it);\n if (offset < 0 || offset % BYTES) throw RangeError('Wrong offset!');\n return offset;\n };\n\n var validate = function (it) {\n if (isObject(it) && TYPED_ARRAY in it) return it;\n throw TypeError(it + ' is not a typed array!');\n };\n\n var allocate = function (C, length) {\n if (!(isObject(C) && TYPED_CONSTRUCTOR in C)) {\n throw TypeError('It is not a typed array constructor!');\n } return new C(length);\n };\n\n var speciesFromList = function (O, list) {\n return fromList(speciesConstructor(O, O[DEF_CONSTRUCTOR]), list);\n };\n\n var fromList = function (C, list) {\n var index = 0;\n var length = list.length;\n var result = allocate(C, length);\n while (length > index) result[index] = list[index++];\n return result;\n };\n\n var addGetter = function (it, key, internal) {\n dP(it, key, { get: function () { return this._d[internal]; } });\n };\n\n var $from = function from(source /* , mapfn, thisArg */) {\n var O = toObject(source);\n var aLen = arguments.length;\n var mapfn = aLen > 1 ? arguments[1] : undefined;\n var mapping = mapfn !== undefined;\n var iterFn = getIterFn(O);\n var i, length, values, result, step, iterator;\n if (iterFn != undefined && !isArrayIter(iterFn)) {\n for (iterator = iterFn.call(O), values = [], i = 0; !(step = iterator.next()).done; i++) {\n values.push(step.value);\n } O = values;\n }\n if (mapping && aLen > 2) mapfn = ctx(mapfn, arguments[2], 2);\n for (i = 0, length = toLength(O.length), result = allocate(this, length); length > i; i++) {\n result[i] = mapping ? mapfn(O[i], i) : O[i];\n }\n return result;\n };\n\n var $of = function of(/* ...items */) {\n var index = 0;\n var length = arguments.length;\n var result = allocate(this, length);\n while (length > index) result[index] = arguments[index++];\n return result;\n };\n\n // iOS Safari 6.x fails here\n var TO_LOCALE_BUG = !!Uint8Array && fails(function () { arrayToLocaleString.call(new Uint8Array(1)); });\n\n var $toLocaleString = function toLocaleString() {\n return arrayToLocaleString.apply(TO_LOCALE_BUG ? arraySlice.call(validate(this)) : validate(this), arguments);\n };\n\n var proto = {\n copyWithin: function copyWithin(target, start /* , end */) {\n return arrayCopyWithin.call(validate(this), target, start, arguments.length > 2 ? arguments[2] : undefined);\n },\n every: function every(callbackfn /* , thisArg */) {\n return arrayEvery(validate(this), callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n },\n fill: function fill(value /* , start, end */) { // eslint-disable-line no-unused-vars\n return arrayFill.apply(validate(this), arguments);\n },\n filter: function filter(callbackfn /* , thisArg */) {\n return speciesFromList(this, arrayFilter(validate(this), callbackfn,\n arguments.length > 1 ? arguments[1] : undefined));\n },\n find: function find(predicate /* , thisArg */) {\n return arrayFind(validate(this), predicate, arguments.length > 1 ? arguments[1] : undefined);\n },\n findIndex: function findIndex(predicate /* , thisArg */) {\n return arrayFindIndex(validate(this), predicate, arguments.length > 1 ? arguments[1] : undefined);\n },\n forEach: function forEach(callbackfn /* , thisArg */) {\n arrayForEach(validate(this), callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n },\n indexOf: function indexOf(searchElement /* , fromIndex */) {\n return arrayIndexOf(validate(this), searchElement, arguments.length > 1 ? arguments[1] : undefined);\n },\n includes: function includes(searchElement /* , fromIndex */) {\n return arrayIncludes(validate(this), searchElement, arguments.length > 1 ? arguments[1] : undefined);\n },\n join: function join(separator) { // eslint-disable-line no-unused-vars\n return arrayJoin.apply(validate(this), arguments);\n },\n lastIndexOf: function lastIndexOf(searchElement /* , fromIndex */) { // eslint-disable-line no-unused-vars\n return arrayLastIndexOf.apply(validate(this), arguments);\n },\n map: function map(mapfn /* , thisArg */) {\n return $map(validate(this), mapfn, arguments.length > 1 ? arguments[1] : undefined);\n },\n reduce: function reduce(callbackfn /* , initialValue */) { // eslint-disable-line no-unused-vars\n return arrayReduce.apply(validate(this), arguments);\n },\n reduceRight: function reduceRight(callbackfn /* , initialValue */) { // eslint-disable-line no-unused-vars\n return arrayReduceRight.apply(validate(this), arguments);\n },\n reverse: function reverse() {\n var that = this;\n var length = validate(that).length;\n var middle = Math.floor(length / 2);\n var index = 0;\n var value;\n while (index < middle) {\n value = that[index];\n that[index++] = that[--length];\n that[length] = value;\n } return that;\n },\n some: function some(callbackfn /* , thisArg */) {\n return arraySome(validate(this), callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n },\n sort: function sort(comparefn) {\n return arraySort.call(validate(this), comparefn);\n },\n subarray: function subarray(begin, end) {\n var O = validate(this);\n var length = O.length;\n var $begin = toAbsoluteIndex(begin, length);\n return new (speciesConstructor(O, O[DEF_CONSTRUCTOR]))(\n O.buffer,\n O.byteOffset + $begin * O.BYTES_PER_ELEMENT,\n toLength((end === undefined ? length : toAbsoluteIndex(end, length)) - $begin)\n );\n }\n };\n\n var $slice = function slice(start, end) {\n return speciesFromList(this, arraySlice.call(validate(this), start, end));\n };\n\n var $set = function set(arrayLike /* , offset */) {\n validate(this);\n var offset = toOffset(arguments[1], 1);\n var length = this.length;\n var src = toObject(arrayLike);\n var len = toLength(src.length);\n var index = 0;\n if (len + offset > length) throw RangeError(WRONG_LENGTH);\n while (index < len) this[offset + index] = src[index++];\n };\n\n var $iterators = {\n entries: function entries() {\n return arrayEntries.call(validate(this));\n },\n keys: function keys() {\n return arrayKeys.call(validate(this));\n },\n values: function values() {\n return arrayValues.call(validate(this));\n }\n };\n\n var isTAIndex = function (target, key) {\n return isObject(target)\n && target[TYPED_ARRAY]\n && typeof key != 'symbol'\n && key in target\n && String(+key) == String(key);\n };\n var $getDesc = function getOwnPropertyDescriptor(target, key) {\n return isTAIndex(target, key = toPrimitive(key, true))\n ? propertyDesc(2, target[key])\n : gOPD(target, key);\n };\n var $setDesc = function defineProperty(target, key, desc) {\n if (isTAIndex(target, key = toPrimitive(key, true))\n && isObject(desc)\n && has(desc, 'value')\n && !has(desc, 'get')\n && !has(desc, 'set')\n // TODO: add validation descriptor w/o calling accessors\n && !desc.configurable\n && (!has(desc, 'writable') || desc.writable)\n && (!has(desc, 'enumerable') || desc.enumerable)\n ) {\n target[key] = desc.value;\n return target;\n } return dP(target, key, desc);\n };\n\n if (!ALL_CONSTRUCTORS) {\n $GOPD.f = $getDesc;\n $DP.f = $setDesc;\n }\n\n $export($export.S + $export.F * !ALL_CONSTRUCTORS, 'Object', {\n getOwnPropertyDescriptor: $getDesc,\n defineProperty: $setDesc\n });\n\n if (fails(function () { arrayToString.call({}); })) {\n arrayToString = arrayToLocaleString = function toString() {\n return arrayJoin.call(this);\n };\n }\n\n var $TypedArrayPrototype$ = redefineAll({}, proto);\n redefineAll($TypedArrayPrototype$, $iterators);\n hide($TypedArrayPrototype$, ITERATOR, $iterators.values);\n redefineAll($TypedArrayPrototype$, {\n slice: $slice,\n set: $set,\n constructor: function () { /* noop */ },\n toString: arrayToString,\n toLocaleString: $toLocaleString\n });\n addGetter($TypedArrayPrototype$, 'buffer', 'b');\n addGetter($TypedArrayPrototype$, 'byteOffset', 'o');\n addGetter($TypedArrayPrototype$, 'byteLength', 'l');\n addGetter($TypedArrayPrototype$, 'length', 'e');\n dP($TypedArrayPrototype$, TAG, {\n get: function () { return this[TYPED_ARRAY]; }\n });\n\n // eslint-disable-next-line max-statements\n module.exports = function (KEY, BYTES, wrapper, CLAMPED) {\n CLAMPED = !!CLAMPED;\n var NAME = KEY + (CLAMPED ? 'Clamped' : '') + 'Array';\n var GETTER = 'get' + KEY;\n var SETTER = 'set' + KEY;\n var TypedArray = global[NAME];\n var Base = TypedArray || {};\n var TAC = TypedArray && getPrototypeOf(TypedArray);\n var FORCED = !TypedArray || !$typed.ABV;\n var O = {};\n var TypedArrayPrototype = TypedArray && TypedArray[PROTOTYPE];\n var getter = function (that, index) {\n var data = that._d;\n return data.v[GETTER](index * BYTES + data.o, LITTLE_ENDIAN);\n };\n var setter = function (that, index, value) {\n var data = that._d;\n if (CLAMPED) value = (value = Math.round(value)) < 0 ? 0 : value > 0xff ? 0xff : value & 0xff;\n data.v[SETTER](index * BYTES + data.o, value, LITTLE_ENDIAN);\n };\n var addElement = function (that, index) {\n dP(that, index, {\n get: function () {\n return getter(this, index);\n },\n set: function (value) {\n return setter(this, index, value);\n },\n enumerable: true\n });\n };\n if (FORCED) {\n TypedArray = wrapper(function (that, data, $offset, $length) {\n anInstance(that, TypedArray, NAME, '_d');\n var index = 0;\n var offset = 0;\n var buffer, byteLength, length, klass;\n if (!isObject(data)) {\n length = toIndex(data);\n byteLength = length * BYTES;\n buffer = new $ArrayBuffer(byteLength);\n } else if (data instanceof $ArrayBuffer || (klass = classof(data)) == ARRAY_BUFFER || klass == SHARED_BUFFER) {\n buffer = data;\n offset = toOffset($offset, BYTES);\n var $len = data.byteLength;\n if ($length === undefined) {\n if ($len % BYTES) throw RangeError(WRONG_LENGTH);\n byteLength = $len - offset;\n if (byteLength < 0) throw RangeError(WRONG_LENGTH);\n } else {\n byteLength = toLength($length) * BYTES;\n if (byteLength + offset > $len) throw RangeError(WRONG_LENGTH);\n }\n length = byteLength / BYTES;\n } else if (TYPED_ARRAY in data) {\n return fromList(TypedArray, data);\n } else {\n return $from.call(TypedArray, data);\n }\n hide(that, '_d', {\n b: buffer,\n o: offset,\n l: byteLength,\n e: length,\n v: new $DataView(buffer)\n });\n while (index < length) addElement(that, index++);\n });\n TypedArrayPrototype = TypedArray[PROTOTYPE] = create($TypedArrayPrototype$);\n hide(TypedArrayPrototype, 'constructor', TypedArray);\n } else if (!fails(function () {\n TypedArray(1);\n }) || !fails(function () {\n new TypedArray(-1); // eslint-disable-line no-new\n }) || !$iterDetect(function (iter) {\n new TypedArray(); // eslint-disable-line no-new\n new TypedArray(null); // eslint-disable-line no-new\n new TypedArray(1.5); // eslint-disable-line no-new\n new TypedArray(iter); // eslint-disable-line no-new\n }, true)) {\n TypedArray = wrapper(function (that, data, $offset, $length) {\n anInstance(that, TypedArray, NAME);\n var klass;\n // `ws` module bug, temporarily remove validation length for Uint8Array\n // https://github.com/websockets/ws/pull/645\n if (!isObject(data)) return new Base(toIndex(data));\n if (data instanceof $ArrayBuffer || (klass = classof(data)) == ARRAY_BUFFER || klass == SHARED_BUFFER) {\n return $length !== undefined\n ? new Base(data, toOffset($offset, BYTES), $length)\n : $offset !== undefined\n ? new Base(data, toOffset($offset, BYTES))\n : new Base(data);\n }\n if (TYPED_ARRAY in data) return fromList(TypedArray, data);\n return $from.call(TypedArray, data);\n });\n arrayForEach(TAC !== Function.prototype ? gOPN(Base).concat(gOPN(TAC)) : gOPN(Base), function (key) {\n if (!(key in TypedArray)) hide(TypedArray, key, Base[key]);\n });\n TypedArray[PROTOTYPE] = TypedArrayPrototype;\n if (!LIBRARY) TypedArrayPrototype.constructor = TypedArray;\n }\n var $nativeIterator = TypedArrayPrototype[ITERATOR];\n var CORRECT_ITER_NAME = !!$nativeIterator\n && ($nativeIterator.name == 'values' || $nativeIterator.name == undefined);\n var $iterator = $iterators.values;\n hide(TypedArray, TYPED_CONSTRUCTOR, true);\n hide(TypedArrayPrototype, TYPED_ARRAY, NAME);\n hide(TypedArrayPrototype, VIEW, true);\n hide(TypedArrayPrototype, DEF_CONSTRUCTOR, TypedArray);\n\n if (CLAMPED ? new TypedArray(1)[TAG] != NAME : !(TAG in TypedArrayPrototype)) {\n dP(TypedArrayPrototype, TAG, {\n get: function () { return NAME; }\n });\n }\n\n O[NAME] = TypedArray;\n\n $export($export.G + $export.W + $export.F * (TypedArray != Base), O);\n\n $export($export.S, NAME, {\n BYTES_PER_ELEMENT: BYTES\n });\n\n $export($export.S + $export.F * fails(function () { Base.of.call(TypedArray, 1); }), NAME, {\n from: $from,\n of: $of\n });\n\n if (!(BYTES_PER_ELEMENT in TypedArrayPrototype)) hide(TypedArrayPrototype, BYTES_PER_ELEMENT, BYTES);\n\n $export($export.P, NAME, proto);\n\n setSpecies(NAME);\n\n $export($export.P + $export.F * FORCED_SET, NAME, { set: $set });\n\n $export($export.P + $export.F * !CORRECT_ITER_NAME, NAME, $iterators);\n\n if (!LIBRARY && TypedArrayPrototype.toString != arrayToString) TypedArrayPrototype.toString = arrayToString;\n\n $export($export.P + $export.F * fails(function () {\n new TypedArray(1).slice();\n }), NAME, { slice: $slice });\n\n $export($export.P + $export.F * (fails(function () {\n return [1, 2].toLocaleString() != new TypedArray([1, 2]).toLocaleString();\n }) || !fails(function () {\n TypedArrayPrototype.toLocaleString.call([1, 2]);\n })), NAME, { toLocaleString: $toLocaleString });\n\n Iterators[NAME] = CORRECT_ITER_NAME ? $nativeIterator : $iterator;\n if (!LIBRARY && !CORRECT_ITER_NAME) hide(TypedArrayPrototype, ITERATOR, $iterator);\n };\n} else module.exports = function () { /* empty */ };\n","//\r\n// BlockV AG. Copyright (c) 2018, all rights reserved.\r\n//\r\n// Licensed under the BlockV SDK License (the \"License\"); you may not use this file or\r\n// the BlockV SDK except in compliance with the License accompanying it. Unless\r\n// required by applicable law or agreed to in writing, the BlockV SDK distributed under\r\n// the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF\r\n// ANY KIND, either express or implied. See the License for the specific language\r\n// governing permissions and limitations under the License.\r\n//\r\nimport urlParse from 'url-parse'\r\nexport default class Vatom {\r\n constructor (payload, faces, actions) {\r\n this.payload = payload\r\n this.faces = faces\r\n this.actions = actions\r\n }\r\n\r\n get id () {\r\n return this.payload.id\r\n }\r\n\r\n get private () {\r\n return this.payload.private\r\n }\r\n\r\n get unpublished () {\r\n return this.payload.unpublished\r\n }\r\n\r\n get version () {\r\n return this.payload.version\r\n }\r\n\r\n get sync () {\r\n return this.payload.sync\r\n } \r\n\r\n get whenCreated () {\r\n return this.payload.when_created\r\n }\r\n\r\n get whenModified () {\r\n return this.payload.when_modified\r\n }\r\n\r\n get properties () {\r\n return this.payload['vAtom::vAtomType']\r\n }\r\n\r\n /** True if this is a folder vatom */\r\n get isFolder () {\r\n return this.properties['root_type'].indexOf('ContainerType') !== -1\r\n }\r\n\r\n /** True if this is a defined folder vatom, ie a folder that can only accept certain types of child vatoms. */\r\n get isDefinedFolder () {\r\n return this.properties['root_type'].indexOf('DefinedFolderContainerType') !== -1\r\n }\r\n\r\n /** True if this is a discover folder vatom, ie a folder whose contents are fetched by performing the `Discover` action on it. */\r\n get isDiscoverFolder () {\r\n return this.properties['root_type'].indexOf('DiscoverFolderContainerType') != -1\r\n }\r\n\r\n canPerformAction (action) {\r\n return this.actions.find(a => a.name.indexOf(action) !== -1)\r\n }\r\n\r\n canCombineWith (otherVatom) {\r\n // Stop if null or ourselves\r\n if (!otherVatom || this.id === otherVatom.id) {\r\n return false\r\n }\r\n\r\n // If it's not a folder, deny\r\n if (!this.isFolder) {\r\n return false\r\n }\r\n\r\n // If it's not a defined folder, allow\r\n if (!this.isDefinedFolder) {\r\n return true\r\n }\r\n\r\n // Get child policies\r\n let policies = this.properties['child_policy'] || []\r\n\r\n // Make child policies a little easier for us to understand\r\n policies = policies.map(p => ({\r\n templateVariation: p.template_variation,\r\n maxCount: (p.creation_policy && p.creation_policy.policy_count_max) || 9999,\r\n enforceMaxCount: (p.creation_policy && p.creation_policy.enforce_policy_count_max) || false\r\n }))\r\n\r\n // Make sure we have a match\r\n for (let policy of policies) {\r\n // Check if template variation matches\r\n if (policy.templateVariation === otherVatom.properties.template_variation) {\r\n return true\r\n }\r\n }\r\n\r\n // No match found, deny\r\n return false\r\n }\r\n\r\n /** Checks if this vatom has an icon face */\r\n containsIconFace () {\r\n return !!this.faces.find(f => (f.properties.constraints.platform === 'web' || f.properties.constraints.platform === 'generic') && f.properties.constraints.view_mode === 'icon')\r\n }\r\n\r\n /** Checks if this vatom has a card face */\r\n containsCardFace () {\r\n return !!this.faces.find(f => (f.properties.constraints.platform === 'web' || f.properties.constraints.platform === 'generic') && f.properties.constraints.view_mode === 'card')\r\n }\r\n\r\n /** Checks if this vatom has a fullscreen face */\r\n containsFullscreenFace () {\r\n return !!this.faces.find(f => (f.properties.constraints.platform === 'web' || f.properties.constraints.platform === 'generic') && f.properties.constraints.view_mode === 'fullscreen')\r\n }\r\n\r\n /** TO DO: Implement in next release\r\n\r\n static mapString (o) {\r\n return Object.keys(o).map(key => `${key}=${o[key]}`).join('&')\r\n }\r\n\r\n encodeResource (url) {\r\n const aP = this.store.assetProvider\r\n const aPlen = aP.length\r\n const compare = urlParse(url)\r\n for (let i = 0; i < aPlen; i += 1) {\r\n const comparethis = urlParse(aP[i].uri)\r\n if (compare.hostname === comparethis.hostname) {\r\n // same uri so get the policy signature and key and append\r\n const queryString = Vatom.mapString(aP[i].descriptor)\r\n return `${url}?${queryString}`\r\n }\r\n }\r\n return url\r\n }\r\n\r\n getResource (resourceName, customPath) {\r\n let payloadResource = (customPath || this.payload['vAtom::vAtomType'].resources).find(r => r.name === resourceName)\r\n return this.encodeResource(payloadResource.value.value)\r\n }\r\n */\r\n}\r\n","// 7.1.1 ToPrimitive(input [, PreferredType])\nvar isObject = require('./_is-object');\n// instead of the ES6 spec version, we didn't implement @@toPrimitive case\n// and the second argument - flag - preferred type is a string\nmodule.exports = function (it, S) {\n if (!isObject(it)) return it;\n var fn, val;\n if (S && typeof (fn = it.toString) == 'function' && !isObject(val = fn.call(it))) return val;\n if (typeof (fn = it.valueOf) == 'function' && !isObject(val = fn.call(it))) return val;\n if (!S && typeof (fn = it.toString) == 'function' && !isObject(val = fn.call(it))) return val;\n throw TypeError(\"Can't convert object to primitive value\");\n};\n","var META = require('./_uid')('meta');\nvar isObject = require('./_is-object');\nvar has = require('./_has');\nvar setDesc = require('./_object-dp').f;\nvar id = 0;\nvar isExtensible = Object.isExtensible || function () {\n return true;\n};\nvar FREEZE = !require('./_fails')(function () {\n return isExtensible(Object.preventExtensions({}));\n});\nvar setMeta = function (it) {\n setDesc(it, META, { value: {\n i: 'O' + ++id, // object ID\n w: {} // weak collections IDs\n } });\n};\nvar fastKey = function (it, create) {\n // return primitive with prefix\n if (!isObject(it)) return typeof it == 'symbol' ? it : (typeof it == 'string' ? 'S' : 'P') + it;\n if (!has(it, META)) {\n // can't set metadata to uncaught frozen object\n if (!isExtensible(it)) return 'F';\n // not necessary to add metadata\n if (!create) return 'E';\n // add missing metadata\n setMeta(it);\n // return object ID\n } return it[META].i;\n};\nvar getWeak = function (it, create) {\n if (!has(it, META)) {\n // can't set metadata to uncaught frozen object\n if (!isExtensible(it)) return true;\n // not necessary to add metadata\n if (!create) return false;\n // add missing metadata\n setMeta(it);\n // return hash weak collections IDs\n } return it[META].w;\n};\n// add metadata on freeze-family methods calling\nvar onFreeze = function (it) {\n if (FREEZE && meta.NEED && isExtensible(it) && !has(it, META)) setMeta(it);\n return it;\n};\nvar meta = module.exports = {\n KEY: META,\n NEED: false,\n fastKey: fastKey,\n getWeak: getWeak,\n onFreeze: onFreeze\n};\n","\r\nimport Region from '../Region'\r\nimport Vatom from '../../../model/Vatom'\r\nimport DataObjectAnimator from '../DataObjectAnimator'\r\nimport { merge } from 'lodash'\r\nimport Delayer from '../Delayer'\r\n\r\n/**\r\n * Intermediate class which handles updates via the BLOCKv websocket and returning Vatom objects. Regions can subclass this to automatically\r\n * get updates via WebSocket.\r\n */\r\nexport default class BLOCKvRegion extends Region {\r\n constructor (dataPool) {\r\n super(dataPool)\r\n\r\n // Queue of pending WebSocket messages\r\n this.queuedMessages = []\r\n this.socketPaused = false\r\n this.socketProcessing = false\r\n\r\n // Bind functions\r\n this.onWebSocketMessage = this.onWebSocketMessage.bind(this)\r\n\r\n // Add listeners for the WebSocket\r\n this.socket = this.dataPool.Blockv.WebSockets\r\n this.socket.connect()\r\n this.socket.addEventListener('websocket.raw', this.onWebSocketMessage)\r\n\r\n // Monitor for timed updates\r\n DataObjectAnimator.withBlockv(dataPool.Blockv).addRegion(this)\r\n }\r\n\r\n /** Called when this region is going to be shut down */\r\n close () {\r\n super.close()\r\n // Remove listeners\r\n this.socket.removeEventListener('websocket.raw', this.onWebSocketMessage)\r\n DataObjectAnimator.withBlockv(this.dataPool.Blockv).removeRegion(this)\r\n }\r\n\r\n /**\r\n * Called to pause processing of websocket messages\r\n * @private Called by subclasses.\r\n */\r\n pauseMessages () {\r\n this.socketPaused = true\r\n }\r\n\r\n /**\r\n * Called to resume processing of websocket messages\r\n *\r\n * @private Called by subclasses.\r\n */\r\n resumeMessages () {\r\n // Unpause\r\n this.socketPaused = false\r\n\r\n // Process next message if needed\r\n if (!this.socketProcessing) {\r\n this.processNextMessage()\r\n }\r\n }\r\n\r\n /**\r\n * Called when there's a new event message via the WebSocket.\r\n *\r\n * @private\r\n * @param {Object} msg The raw JSON from the websocket event message\r\n */\r\n onWebSocketMessage (msg) {\r\n // Add to queue\r\n this.queuedMessages.push(msg)\r\n\r\n // Process it if necessary\r\n if (!this.socketPaused && !this.socketProcessing) {\r\n this.processNextMessage()\r\n }\r\n }\r\n\r\n /**\r\n * Called to process the next WebSocket message.\r\n */\r\n async processNextMessage () {\r\n // Stop if socket is paused\r\n if (this.socketPaused) {\r\n return\r\n }\r\n\r\n // Stop if already processing\r\n if (this.socketProcessing) {\r\n return\r\n }\r\n this.socketProcessing = true\r\n\r\n // Get next msg to process\r\n let msg = this.queuedMessages.shift()\r\n if (!msg) {\r\n\r\n // No more messages!\r\n this.socketProcessing = false\r\n return\r\n\r\n }\r\n\r\n // Process message\r\n try {\r\n\r\n // Process message\r\n await this.processMessage(msg)\r\n\r\n } catch (err) {\r\n\r\n // Error!\r\n console.warn('[DataPool > BVWebSocketRegion] Error processing WebSocket message! ' + err.message, msg)\r\n\r\n }\r\n\r\n // Done, process next message\r\n this.socketProcessing = false\r\n this.processNextMessage()\r\n }\r\n\r\n /**\r\n * Processes a WebSocket message.\r\n *\r\n * @private Called by BVWebSocketRegion.\r\n * @abstract Subclasses can override to process other WebSocket messages. Always call super.processMessage(msg) though.\r\n * @param {Object} msg The raw JSON from the websocket event message\r\n */\r\n async processMessage (msg) {\r\n\r\n // We only handle state_update messages here\r\n if (msg.msg_type != 'state_update')\r\n return\r\n\r\n // Get vatom ID\r\n let vatomID = msg.payload && msg.payload.id\r\n if (!vatomID) {\r\n throw new Error(`Got websocket message with no vatom ID in it.`)\r\n }\r\n\r\n // Ensure it's formatted correctly\r\n if (!msg.payload.new_object) {\r\n throw new Error(`WebSocket message had no new object payload.`)\r\n }\r\n\r\n // Update existing objects\r\n this.updateObjects([{\r\n id: msg.payload.id,\r\n new_data: msg.payload.new_object\r\n }])\r\n }\r\n\r\n /** Map our data objects to Vatom objects */\r\n map (object) {\r\n // Only handle vatoms\r\n if (object.type !== 'vatom') {\r\n return null\r\n }\r\n\r\n // Fetch all faces linked to this vatom\r\n let faces = Array.from(this.objects.values()).filter(o => o.type === 'face' && o.data.template === object.data['vAtom::vAtomType'].template).map(o => o.data)\r\n\r\n // Fetch all actions linked to this vatom\r\n let actions = Array.from(this.objects.values()).filter(o => o.type === 'action' && o.data.name.startsWith(object.data['vAtom::vAtomType'].template + '::Action::')).map(o => o.data)\r\n\r\n // Create vatom object\r\n return new Vatom(object.data, faces, actions)\r\n }\r\n\r\n /**\r\n * Called when an object is about to be added.\r\n *\r\n * @private\r\n * @abstract Can be overridden by subclasses which need to get these events.\r\n * @param {DataObject} object The object which will be added.\r\n */\r\n willAdd (object) {\r\n // Notify parent as well\r\n let parent = object.data && object.data['vAtom::vAtomType'] && object.data['vAtom::vAtomType'].parent_id\r\n if (parent) {\r\n Delayer.run(e => this.emit('object.updated', parent))\r\n }\r\n // If our DataObjectAnimator has a scheduled update for this object, include that change now. This is to work around map objects jumping around when a new region is created.\r\n let nextUpdate = DataObjectAnimator.withBlockv(this.dataPool.Blockv).changes.find(u => u.id === object.id)\r\n if (nextUpdate) {\r\n merge(object.data, nextUpdate.new_data)\r\n }\r\n }\r\n\r\n /**\r\n * Called when an object is about to be updated.\r\n *\r\n * @private\r\n * @abstract Can be overridden by subclasses which need to get these events.\r\n * @param {DataObject} object The object which will be updated.\r\n * @param {Object} newData The sparse object containing the changed fields\r\n */\r\n willUpdateFields (object, newData) {\r\n // Notify parent as well\r\n let oldParent = object.data && object.data['vAtom::vAtomType'] && object.data['vAtom::vAtomType'].parent_id\r\n let newParent = newData && newData['vAtom::vAtomType'] && newData['vAtom::vAtomType'].parent_id\r\n if (newParent) { Delayer.run(e => this.emit('object.updated', oldParent)) }\r\n if (newParent) { Delayer.run(e => this.emit('object.updated', newParent)) }\r\n }\r\n\r\n /**\r\n * Called when an object is about to be updated.\r\n *\r\n * @private\r\n * @abstract Can be overridden by subclasses which need to get these events.\r\n * @param {DataObject} object The object which will be updated.\r\n * @param {String} keyPath The field which will be changed.\r\n * @param {*} oldValue The current field value.\r\n * @param {*} newValue The new field value.\r\n */\r\n willUpdateField (object, keyPath, oldValue, newValue) {\r\n // Only do if modifying the parent ID field\r\n if (keyPath !== 'vAtom::vAtomType.parent_id') {\r\n return\r\n }\r\n // Notify parent\r\n Delayer.run(e => this.emit('object.updated', oldValue))\r\n Delayer.run(e => this.emit('object.updated', newValue))\r\n }\r\n\r\n /**\r\n * Called when an object is about to be removed.\r\n *\r\n * @private\r\n * @abstract Can be overridden by subclasses which need to get these events.\r\n * @param {DataObject|String} objectOrID The object (or ID) which will be updated.\r\n */\r\n willRemove (objectOrID) {\r\n // Get object if needed\r\n let object = objectOrID\r\n if (typeof objectOrID === 'string') {\r\n object = this.objects.get(objectOrID)\r\n }\r\n // Notify parent as well\r\n let parent = object && object.data && object.data['vAtom::vAtomType'] && object.data['vAtom::vAtomType'].parent_id\r\n if (parent) {\r\n Delayer.run(e => this.emit('object.updated', parent))\r\n }\r\n }\r\n}\r\n","//\r\n// BlockV AG. Copyright (c) 2018, all rights reserved.\r\n//\r\n// Licensed under the BlockV SDK License (the \"License\"); you may not use this file or\r\n// the BlockV SDK except in compliance with the License accompanying it. Unless\r\n// required by applicable law or agreed to in writing, the BlockV SDK distributed under\r\n// the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF\r\n// ANY KIND, either express or implied. See the License for the specific language\r\n// governing permissions and limitations under the License.\r\n//\r\n\r\n//\r\n// EventEmitter class\r\n// This class provides simple event functionality for classes, with Promise support.\r\n// Usage for once-off event listeners:\r\n// myObj.when(\"closed\").then(function(data) {\r\n// alert(\"Closed! \" + data);\r\n// });\r\n//\r\n// Usage for permanent event listeners:\r\n// myObj.on(\"closed\", function(data) {\r\n// alert(\"Closed! \" + data);\r\n// });\r\n//\r\n// Usage when triggering an event from a subclass:\r\n// this.emit(\"closed\", \"customData\");\r\n\r\nclass EventEmitter {\r\n /**\r\n * Adds an event listener. If callback is null, a Promise will be returned.\r\n * Note that if using the Promise\r\n * it will only be triggered on the first event emitted. */\r\n\r\n when (eventName, callback = null) {\r\n // Make sure event listener object exists\r\n this.privateEventListeners = this.privateEventListeners || {}\r\n\r\n // Make sure event listener array exists\r\n this.privateEventListeners[eventName] = this.privateEventListeners[eventName] || []\r\n\r\n // Check if using promise form\r\n if (callback) {\r\n // Just add the callback\r\n this.privateEventListeners[eventName].push(callback)\r\n return null\r\n }\r\n // Return the promise\r\n return new Promise((resolve) => {\r\n // Promise callbacks can only be used once\r\n // eslint-disable-next-line no-param-reassign\r\n resolve.removeAfterCall = true\r\n\r\n // Add success handler to event listener array\r\n this.privateEventListeners[eventName].push(resolve)\r\n })\r\n }\r\n\r\n /** Synonyms */\r\n on () {\r\n return this.when.apply(this, arguments)\r\n }\r\n\r\n addEventListener () {\r\n return this.when.apply(this, arguments)\r\n }\r\n\r\n /** Remove event listener */\r\n removeEventListener (eventName, callback) {\r\n // Make sure event listener object exists\r\n this.privateEventListeners = this.privateEventListeners || {}\r\n\r\n // Make sure event listener array exists\r\n this.privateEventListeners[eventName] = this.privateEventListeners[eventName] || []\r\n\r\n // Find and remove it\r\n for (let i = 0; i < this.privateEventListeners[eventName].length; i += 1) {\r\n if (this.privateEventListeners[eventName][i] === callback) {\r\n this.privateEventListeners[eventName].splice(i, 1)\r\n i -= 1\r\n }\r\n }\r\n }\r\n\r\n off () {\r\n return this.removeEventListener.apply(this, arguments)\r\n }\r\n\r\n /** Triggers an event. Each argument after the first one will be passed to event listeners */\r\n emit (eventName) {\r\n // Setup the once-off promise if one of it's events were triggered\r\n // if (eventName == \"success\" || eventName == \"failed\")\r\n // this._setupPromise();\r\n\r\n // Get list of callbacks\r\n const callbacks = (this.privateEventListeners && this.privateEventListeners[eventName]) || []\r\n // Call events\r\n let passArguments = Array.from(arguments).slice(1)\r\n callbacks.forEach((callback) => {\r\n callback.apply(this, passArguments)\r\n })\r\n\r\n // Remove callbacks that can only be called once\r\n for (let i = 0; i < callbacks.length; i += 1) {\r\n if (callbacks[i].removeAfterCall) {\r\n callbacks.splice(i, 1)\r\n i -= 1\r\n }\r\n }\r\n }\r\n\r\n /** Synonyms */\r\n trigger () {\r\n return this.emit.apply(this, arguments)\r\n }\r\n\r\n triggerEvent () {\r\n return this.emit.apply(this, arguments)\r\n }\r\n}\r\n\r\n// Apply as a mixin to a class or object\r\nEventEmitter.mixin = function eventEmitterMixin (otherClass) {\r\n // eslint-disable-next-line no-restricted-syntax\r\n for (const prop in EventEmitter.prototype) {\r\n // eslint-disable-next-line no-prototype-builtins\r\n if (EventEmitter.prototype.hasOwnProperty(prop)) {\r\n // eslint-disable-next-line no-param-reassign\r\n otherClass[prop] = EventEmitter.prototype[prop]\r\n }\r\n }\r\n}\r\nmodule.exports = EventEmitter\r\n","module.exports = function (bitmap, value) {\n return {\n enumerable: !(bitmap & 1),\n configurable: !(bitmap & 2),\n writable: !(bitmap & 4),\n value: value\n };\n};\n","var id = 0;\nvar px = Math.random();\nmodule.exports = function (key) {\n return 'Symbol('.concat(key === undefined ? '' : key, ')_', (++id + px).toString(36));\n};\n","module.exports = false;\n","// 19.1.2.14 / 15.2.3.14 Object.keys(O)\nvar $keys = require('./_object-keys-internal');\nvar enumBugKeys = require('./_enum-bug-keys');\n\nmodule.exports = Object.keys || function keys(O) {\n return $keys(O, enumBugKeys);\n};\n","var toInteger = require('./_to-integer');\nvar max = Math.max;\nvar min = Math.min;\nmodule.exports = function (index, length) {\n index = toInteger(index);\n return index < 0 ? max(index + length, 0) : min(index, length);\n};\n","// 19.1.2.2 / 15.2.3.5 Object.create(O [, Properties])\nvar anObject = require('./_an-object');\nvar dPs = require('./_object-dps');\nvar enumBugKeys = require('./_enum-bug-keys');\nvar IE_PROTO = require('./_shared-key')('IE_PROTO');\nvar Empty = function () { /* empty */ };\nvar PROTOTYPE = 'prototype';\n\n// Create object with fake `null` prototype: use iframe Object with cleared prototype\nvar createDict = function () {\n // Thrash, waste and sodomy: IE GC bug\n var iframe = require('./_dom-create')('iframe');\n var i = enumBugKeys.length;\n var lt = '<';\n var gt = '>';\n var iframeDocument;\n iframe.style.display = 'none';\n require('./_html').appendChild(iframe);\n iframe.src = 'javascript:'; // eslint-disable-line no-script-url\n // createDict = iframe.contentWindow.Object;\n // html.removeChild(iframe);\n iframeDocument = iframe.contentWindow.document;\n iframeDocument.open();\n iframeDocument.write(lt + 'script' + gt + 'document.F=Object' + lt + '/script' + gt);\n iframeDocument.close();\n createDict = iframeDocument.F;\n while (i--) delete createDict[PROTOTYPE][enumBugKeys[i]];\n return createDict();\n};\n\nmodule.exports = Object.create || function create(O, Properties) {\n var result;\n if (O !== null) {\n Empty[PROTOTYPE] = anObject(O);\n result = new Empty();\n Empty[PROTOTYPE] = null;\n // add \"__proto__\" for Object.getPrototypeOf polyfill\n result[IE_PROTO] = O;\n } else result = createDict();\n return Properties === undefined ? result : dPs(result, Properties);\n};\n","// 19.1.2.7 / 15.2.3.4 Object.getOwnPropertyNames(O)\nvar $keys = require('./_object-keys-internal');\nvar hiddenKeys = require('./_enum-bug-keys').concat('length', 'prototype');\n\nexports.f = Object.getOwnPropertyNames || function getOwnPropertyNames(O) {\n return $keys(O, hiddenKeys);\n};\n","// 19.1.2.9 / 15.2.3.2 Object.getPrototypeOf(O)\nvar has = require('./_has');\nvar toObject = require('./_to-object');\nvar IE_PROTO = require('./_shared-key')('IE_PROTO');\nvar ObjectProto = Object.prototype;\n\nmodule.exports = Object.getPrototypeOf || function (O) {\n O = toObject(O);\n if (has(O, IE_PROTO)) return O[IE_PROTO];\n if (typeof O.constructor == 'function' && O instanceof O.constructor) {\n return O.constructor.prototype;\n } return O instanceof Object ? ObjectProto : null;\n};\n","// 22.1.3.31 Array.prototype[@@unscopables]\nvar UNSCOPABLES = require('./_wks')('unscopables');\nvar ArrayProto = Array.prototype;\nif (ArrayProto[UNSCOPABLES] == undefined) require('./_hide')(ArrayProto, UNSCOPABLES, {});\nmodule.exports = function (key) {\n ArrayProto[UNSCOPABLES][key] = true;\n};\n","var isObject = require('./_is-object');\nmodule.exports = function (it, TYPE) {\n if (!isObject(it) || it._t !== TYPE) throw TypeError('Incompatible receiver, ' + TYPE + ' required!');\n return it;\n};\n","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n// a duplex stream is just a stream that is both readable and writable.\n// Since JS doesn't have multiple prototypal inheritance, this class\n// prototypally inherits from Readable, and then parasitically from\n// Writable.\n\n'use strict';\n\n/*<replacement>*/\n\nvar pna = require('process-nextick-args');\n/*</replacement>*/\n\n/*<replacement>*/\nvar objectKeys = Object.keys || function (obj) {\n var keys = [];\n for (var key in obj) {\n keys.push(key);\n }return keys;\n};\n/*</replacement>*/\n\nmodule.exports = Duplex;\n\n/*<replacement>*/\nvar util = require('core-util-is');\nutil.inherits = require('inherits');\n/*</replacement>*/\n\nvar Readable = require('./_stream_readable');\nvar Writable = require('./_stream_writable');\n\nutil.inherits(Duplex, Readable);\n\n{\n // avoid scope creep, the keys array can then be collected\n var keys = objectKeys(Writable.prototype);\n for (var v = 0; v < keys.length; v++) {\n var method = keys[v];\n if (!Duplex.prototype[method]) Duplex.prototype[method] = Writable.prototype[method];\n }\n}\n\nfunction Duplex(options) {\n if (!(this instanceof Duplex)) return new Duplex(options);\n\n Readable.call(this, options);\n Writable.call(this, options);\n\n if (options && options.readable === false) this.readable = false;\n\n if (options && options.writable === false) this.writable = false;\n\n this.allowHalfOpen = true;\n if (options && options.allowHalfOpen === false) this.allowHalfOpen = false;\n\n this.once('end', onend);\n}\n\nObject.defineProperty(Duplex.prototype, 'writableHighWaterMark', {\n // making it explicit this property is not enumerable\n // because otherwise some prototype manipulation in\n // userland will fail\n enumerable: false,\n get: function () {\n return this._writableState.highWaterMark;\n }\n});\n\n// the no-half-open enforcer\nfunction onend() {\n // if we allow half-open state, or if the writable side ended,\n // then we're ok.\n if (this.allowHalfOpen || this._writableState.ended) return;\n\n // no more data can be written.\n // But allow more writes to happen in this tick.\n pna.nextTick(onEndNT, this);\n}\n\nfunction onEndNT(self) {\n self.end();\n}\n\nObject.defineProperty(Duplex.prototype, 'destroyed', {\n get: function () {\n if (this._readableState === undefined || this._writableState === undefined) {\n return false;\n }\n return this._readableState.destroyed && this._writableState.destroyed;\n },\n set: function (value) {\n // we ignore the value if the stream\n // has not been initialized yet\n if (this._readableState === undefined || this._writableState === undefined) {\n return;\n }\n\n // backward compatibility, the user is explicitly\n // managing destroyed\n this._readableState.destroyed = value;\n this._writableState.destroyed = value;\n }\n});\n\nDuplex.prototype._destroy = function (err, cb) {\n this.push(null);\n this.end();\n\n pna.nextTick(cb, err);\n};","var def = require('./_object-dp').f;\nvar has = require('./_has');\nvar TAG = require('./_wks')('toStringTag');\n\nmodule.exports = function (it, tag, stat) {\n if (it && !has(it = stat ? it : it.prototype, TAG)) def(it, TAG, { configurable: true, value: tag });\n};\n","var $export = require('./_export');\nvar defined = require('./_defined');\nvar fails = require('./_fails');\nvar spaces = require('./_string-ws');\nvar space = '[' + spaces + ']';\nvar non = '\\u200b\\u0085';\nvar ltrim = RegExp('^' + space + space + '*');\nvar rtrim = RegExp(space + space + '*$');\n\nvar exporter = function (KEY, exec, ALIAS) {\n var exp = {};\n var FORCE = fails(function () {\n return !!spaces[KEY]() || non[KEY]() != non;\n });\n var fn = exp[KEY] = FORCE ? exec(trim) : spaces[KEY];\n if (ALIAS) exp[ALIAS] = fn;\n $export($export.P + $export.F * FORCE, 'String', exp);\n};\n\n// 1 -> String#trimLeft\n// 2 -> String#trimRight\n// 3 -> String#trim\nvar trim = exporter.trim = function (string, TYPE) {\n string = String(defined(string));\n if (TYPE & 1) string = string.replace(ltrim, '');\n if (TYPE & 2) string = string.replace(rtrim, '');\n return string;\n};\n\nmodule.exports = exporter;\n","module.exports = {};\n","'use strict';\nvar global = require('./_global');\nvar dP = require('./_object-dp');\nvar DESCRIPTORS = require('./_descriptors');\nvar SPECIES = require('./_wks')('species');\n\nmodule.exports = function (KEY) {\n var C = global[KEY];\n if (DESCRIPTORS && C && !C[SPECIES]) dP.f(C, SPECIES, {\n configurable: true,\n get: function () { return this; }\n });\n};\n","module.exports = function (it, Constructor, name, forbiddenField) {\n if (!(it instanceof Constructor) || (forbiddenField !== undefined && forbiddenField in it)) {\n throw TypeError(name + ': incorrect invocation!');\n } return it;\n};\n","var redefine = require('./_redefine');\nmodule.exports = function (target, src, safe) {\n for (var key in src) redefine(target, key, src[key], safe);\n return target;\n};\n","if (typeof Object.create === 'function') {\n // implementation from standard node.js 'util' module\n module.exports = function inherits(ctor, superCtor) {\n if (superCtor) {\n ctor.super_ = superCtor\n ctor.prototype = Object.create(superCtor.prototype, {\n constructor: {\n value: ctor,\n enumerable: false,\n writable: true,\n configurable: true\n }\n })\n }\n };\n} else {\n // old school shim for old browsers\n module.exports = function inherits(ctor, superCtor) {\n if (superCtor) {\n ctor.super_ = superCtor\n var TempCtor = function () {}\n TempCtor.prototype = superCtor.prototype\n ctor.prototype = new TempCtor()\n ctor.prototype.constructor = ctor\n }\n }\n}\n","'use strict';\n\nvar base64_url_decode = require('./base64_url_decode');\n\nfunction InvalidTokenError(message) {\n this.message = message;\n}\n\nInvalidTokenError.prototype = new Error();\nInvalidTokenError.prototype.name = 'InvalidTokenError';\n\nmodule.exports = function (token,options) {\n if (typeof token !== 'string') {\n throw new InvalidTokenError('Invalid token specified');\n }\n\n options = options || {};\n var pos = options.header === true ? 0 : 1;\n try {\n return JSON.parse(base64_url_decode(token.split('.')[pos]));\n } catch (e) {\n throw new InvalidTokenError('Invalid token specified: ' + e.message);\n }\n};\n\nmodule.exports.InvalidTokenError = InvalidTokenError;\n","// fallback for non-array-like ES3 and non-enumerable old V8 strings\nvar cof = require('./_cof');\n// eslint-disable-next-line no-prototype-builtins\nmodule.exports = Object('z').propertyIsEnumerable(0) ? Object : function (it) {\n return cof(it) == 'String' ? it.split('') : Object(it);\n};\n","exports.f = {}.propertyIsEnumerable;\n","// getting tag from 19.1.3.6 Object.prototype.toString()\nvar cof = require('./_cof');\nvar TAG = require('./_wks')('toStringTag');\n// ES3 wrong here\nvar ARG = cof(function () { return arguments; }()) == 'Arguments';\n\n// fallback for IE11 Script Access Denied error\nvar tryGet = function (it, key) {\n try {\n return it[key];\n } catch (e) { /* empty */ }\n};\n\nmodule.exports = function (it) {\n var O, T, B;\n return it === undefined ? 'Undefined' : it === null ? 'Null'\n // @@toStringTag case\n : typeof (T = tryGet(O = Object(it), TAG)) == 'string' ? T\n // builtinTag case\n : ARG ? cof(O)\n // ES3 arguments fallback\n : (B = cof(O)) == 'Object' && typeof O.callee == 'function' ? 'Arguments' : B;\n};\n","// 7.3.20 SpeciesConstructor(O, defaultConstructor)\nvar anObject = require('./_an-object');\nvar aFunction = require('./_a-function');\nvar SPECIES = require('./_wks')('species');\nmodule.exports = function (O, D) {\n var C = anObject(O).constructor;\n var S;\n return C === undefined || (S = anObject(C)[SPECIES]) == undefined ? D : aFunction(S);\n};\n","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n// NOTE: These type checking functions intentionally don't use `instanceof`\n// because it is fragile and can be easily faked with `Object.create()`.\n\nfunction isArray(arg) {\n if (Array.isArray) {\n return Array.isArray(arg);\n }\n return objectToString(arg) === '[object Array]';\n}\nexports.isArray = isArray;\n\nfunction isBoolean(arg) {\n return typeof arg === 'boolean';\n}\nexports.isBoolean = isBoolean;\n\nfunction isNull(arg) {\n return arg === null;\n}\nexports.isNull = isNull;\n\nfunction isNullOrUndefined(arg) {\n return arg == null;\n}\nexports.isNullOrUndefined = isNullOrUndefined;\n\nfunction isNumber(arg) {\n return typeof arg === 'number';\n}\nexports.isNumber = isNumber;\n\nfunction isString(arg) {\n return typeof arg === 'string';\n}\nexports.isString = isString;\n\nfunction isSymbol(arg) {\n return typeof arg === 'symbol';\n}\nexports.isSymbol = isSymbol;\n\nfunction isUndefined(arg) {\n return arg === void 0;\n}\nexports.isUndefined = isUndefined;\n\nfunction isRegExp(re) {\n return objectToString(re) === '[object RegExp]';\n}\nexports.isRegExp = isRegExp;\n\nfunction isObject(arg) {\n return typeof arg === 'object' && arg !== null;\n}\nexports.isObject = isObject;\n\nfunction isDate(d) {\n return objectToString(d) === '[object Date]';\n}\nexports.isDate = isDate;\n\nfunction isError(e) {\n return (objectToString(e) === '[object Error]' || e instanceof Error);\n}\nexports.isError = isError;\n\nfunction isFunction(arg) {\n return typeof arg === 'function';\n}\nexports.isFunction = isFunction;\n\nfunction isPrimitive(arg) {\n return arg === null ||\n typeof arg === 'boolean' ||\n typeof arg === 'number' ||\n typeof arg === 'string' ||\n typeof arg === 'symbol' || // ES6 symbol\n typeof arg === 'undefined';\n}\nexports.isPrimitive = isPrimitive;\n\nexports.isBuffer = Buffer.isBuffer;\n\nfunction objectToString(o) {\n return Object.prototype.toString.call(o);\n}\n","//\r\n// BlockV AG. Copyright (c) 2018, all rights reserved.\r\n//\r\n// Licensed under the BlockV SDK License (the \"License\"); you may not use this file or\r\n// the BlockV SDK except in compliance with the License accompanying it. Unless\r\n// required by applicable law or agreed to in writing, the BlockV SDK distributed under\r\n// the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF\r\n// ANY KIND, either express or implied. See the License for the specific language\r\n// governing permissions and limitations under the License.\r\n//\r\n\r\nimport Vatom from '../model/Vatom'\r\n\r\nexport default class Discover {\r\n constructor (bv, customPayload) {\r\n this.bv = bv\r\n // Setup default vars\r\n this.overridePayload = customPayload\r\n this.filters = []\r\n this.groupBy = [Discover.FieldTemplateVariation]\r\n this.scope = null\r\n this.auth = true\r\n\r\n // The default scope returns vatoms that the user owns only\r\n this.setScopeToOwnedVatomsOnly()\r\n\r\n /** The number of samples to return. This is based on the groupBy property.\r\n 0 will return all vatoms without sampling them. */\r\n this.samples = 0\r\n }\r\n\r\n /** Appends a filter to the filters list. */\r\n appendFilter (field, value, compareOperation, combineOperation) {\r\n // Append filter\r\n this.filters.push({\r\n field,\r\n value,\r\n filter_op: compareOperation || Discover.FilterOperation.Equal,\r\n bool_op: combineOperation || Discover.CombineOperation.And\r\n })\r\n }\r\n\r\n /** Set the scope to only return vatoms with the specified publisher FQDN */\r\n setScopeToPublisherFQDN (fqdn) {\r\n // Set scope\r\n this.scope = {\r\n key: Discover.FieldPublisherFqdn,\r\n value: fqdn\r\n }\r\n }\r\n\r\n /** Set the scope to only return owned vatoms */\r\n setScopeToOwnedVatomsOnly () {\r\n // Set scope\r\n this.scope = {\r\n key: Discover.FieldOwner,\r\n value: '$currentuser'\r\n }\r\n }\r\n\r\n /** Set the scope to specified key and value */\r\n setScope (key, value) {\r\n // Set scope\r\n this.scope = {\r\n key,\r\n value\r\n }\r\n }\r\n\r\n /** @private Get the request payload to send to the Discovery API call */\r\n getPayload () {\r\n // Check for override\r\n if (this.overridePayload) {\r\n return this.overridePayload\r\n }\r\n // Check scope\r\n if (!this.scope) {\r\n throw new Error('Vatomic SDK: No scope set for discover filter!')\r\n }\r\n // Create payload\r\n const payload = {}\r\n payload.scope = this.scope\r\n\r\n // Set sampling\r\n if (this.samples > 0 && this.groupBy.length > 0) {\r\n payload.sample = this.samples\r\n payload.group_by = this.groupBy\r\n }\r\n\r\n // Set filters\r\n if (this.filters.length > 0) {\r\n payload.filters = [{\r\n filter_elems: this.filters\r\n }]\r\n }\r\n\r\n // Set return info\r\n payload.return = {\r\n type: '*',\r\n fields: []\r\n }\r\n\r\n // Done\r\n return payload\r\n }\r\n\r\n /** Execute the discover query, returning an array of Vatoms. @returns Promise<[Vatom]> */\r\n execute () {\r\n // Send request\r\n return this.bv.client.request('POST', '/v1/vatom/discover', this.getPayload(), this.auth).then((data) => {\r\n const { actions, faces, results } = data\r\n\r\n const actionsArray = []\r\n const facesArray = []\r\n const vatomsArray = []\r\n // eslint-disable-next-line\r\n for (let a of actions) {\r\n const aName = a.name.split('::Action::')\r\n const aKey = aName[0]\r\n actionsArray.push({\r\n template: aKey,\r\n action: aName[1],\r\n meta: a.meta,\r\n properties: a.properties\r\n })\r\n }\r\n // eslint-disable-next-line\r\n for (let f of faces) {\r\n facesArray.push({\r\n template: f.template,\r\n id: f.id,\r\n meta: f.meta,\r\n properties: f.properties\r\n })\r\n }\r\n // eslint-disable-next-line\r\n for (let v of results) {\r\n const { template } = v['vAtom::vAtomType']\r\n const obj = new Vatom(v, facesArray.filter(f => f.template === template), actionsArray.filter(a => a.template === template))\r\n vatomsArray.push(obj)\r\n }\r\n return vatomsArray\r\n })\r\n }\r\n\r\n /** Execute the discover query, returning the count of vatoms. @returns Promise<Integer> */\r\n count () {\r\n // Inject \"count only\" into the payload\r\n const payload = this.getPayload()\r\n payload.return.type = 'count'\r\n\r\n // Send request\r\n return this.bv.client.request('POST', '/v1/vatom/discover', payload, this.auth)\r\n .then(data => data.count || 0)\r\n }\r\n}\r\n\r\n/** Filter operations */\r\nDiscover.FilterOperation = {\r\n Equal: 'Eq',\r\n GreaterThan: 'Gt',\r\n GreaterOrEqual: 'Ge',\r\n LessThan: 'Lt',\r\n LessOrEqual: 'Le',\r\n NotEqual: 'Ne',\r\n Match: 'Match'\r\n}\r\n\r\n/** Filter combine operations */\r\nDiscover.CombineOperation = {\r\n And: 'And',\r\n Or: 'Or'\r\n}\r\n\r\n/** Predefined fields */\r\nDiscover.FieldAcquireable = 'vAtom::vAtomType.acquireable'\r\nDiscover.FieldPrivateName = 'private.name'\r\nDiscover.FieldID = 'id'\r\nDiscover.FieldPublisherFqdn = 'vAtom::vAtomType.publisher_fqdn'\r\nDiscover.FieldTemplate = 'vAtom::vAtomType.template'\r\nDiscover.FieldTemplateVariation = 'vAtom::vAtomType.template_variation'\r\nDiscover.FieldVisibilityType = 'vAtom::vAtomType.visibility.type'\r\nDiscover.FieldOwner = 'vAtom::vAtomType.owner'\r\nDiscover.FieldParentID = 'vAtom::vAtomType.parent_id'\r\n\r\n\r\n","//\r\n// BlockV AG. Copyright (c) 2018, all rights reserved.\r\n//\r\n// Licensed under the BlockV SDK License (the \"License\"); you may not use this file or\r\n// the BlockV SDK except in compliance with the License accompanying it. Unless\r\n// required by applicable law or agreed to in writing, the BlockV SDK distributed under\r\n// the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF\r\n// ANY KIND, either express or implied. See the License for the specific language\r\n// governing permissions and limitations under the License.\r\n//\r\nexport default class User {\r\n constructor (user) {\r\n this.id = user.id\r\n this.firstName = user.properties.first_name\r\n this.lastName = user.properties.last_name\r\n this.namePublic = user.properties.name_public\r\n this.avatarUri = user.properties.avatar_uri\r\n this.avatarPublic = user.properties.avatar_public\r\n this.birthday = user.properties.birthday\r\n this.language = user.properties.language\r\n this.nonPushNotification = user.properties.nonpush_notification\r\n this.guestId = user.properties.guest_id\r\n this.isPasswordSet = user.properties.is_password_set\r\n this.activated = user.system_properties.activated\r\n this.isAdmin = user.system_properties.is_admin\r\n this.isMerchant = user.system_properties.is_merchant\r\n this.lastLogin = user.system_properties.last_login\r\n this.pubFqdn = user.system_properties.pub_fqdn\r\n this.rawPayload = user\r\n this.consents = user.properties.user_consents\r\n this.meta = {\r\n createdBy: user.meta.created_by,\r\n dataType: user.meta.data_type,\r\n modifiedBy: user.meta.modified_by,\r\n whenCreated: user.meta.when_created,\r\n whenModified: user.meta.when_modified\r\n }\r\n }\r\n}\r\n","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\nvar getOwnPropertyDescriptors = Object.getOwnPropertyDescriptors ||\n function getOwnPropertyDescriptors(obj) {\n var keys = Object.keys(obj);\n var descriptors = {};\n for (var i = 0; i < keys.length; i++) {\n descriptors[keys[i]] = Object.getOwnPropertyDescriptor(obj, keys[i]);\n }\n return descriptors;\n };\n\nvar formatRegExp = /%[sdj%]/g;\nexports.format = function(f) {\n if (!isString(f)) {\n var objects = [];\n for (var i = 0; i < arguments.length; i++) {\n objects.push(inspect(arguments[i]));\n }\n return objects.join(' ');\n }\n\n var i = 1;\n var args = arguments;\n var len = args.length;\n var str = String(f).replace(formatRegExp, function(x) {\n if (x === '%%') return '%';\n if (i >= len) return x;\n switch (x) {\n case '%s': return String(args[i++]);\n case '%d': return Number(args[i++]);\n case '%j':\n try {\n return JSON.stringify(args[i++]);\n } catch (_) {\n return '[Circular]';\n }\n default:\n return x;\n }\n });\n for (var x = args[i]; i < len; x = args[++i]) {\n if (isNull(x) || !isObject(x)) {\n str += ' ' + x;\n } else {\n str += ' ' + inspect(x);\n }\n }\n return str;\n};\n\n\n// Mark that a method should not be used.\n// Returns a modified function which warns once by default.\n// If --no-deprecation is set, then it is a no-op.\nexports.deprecate = function(fn, msg) {\n if (typeof process !== 'undefined' && process.noDeprecation === true) {\n return fn;\n }\n\n // Allow for deprecating things in the process of starting up.\n if (typeof process === 'undefined') {\n return function() {\n return exports.deprecate(fn, msg).apply(this, arguments);\n };\n }\n\n var warned = false;\n function deprecated() {\n if (!warned) {\n if (process.throwDeprecation) {\n throw new Error(msg);\n } else if (process.traceDeprecation) {\n console.trace(msg);\n } else {\n console.error(msg);\n }\n warned = true;\n }\n return fn.apply(this, arguments);\n }\n\n return deprecated;\n};\n\n\nvar debugs = {};\nvar debugEnviron;\nexports.debuglog = function(set) {\n if (isUndefined(debugEnviron))\n debugEnviron = process.env.NODE_DEBUG || '';\n set = set.toUpperCase();\n if (!debugs[set]) {\n if (new RegExp('\\\\b' + set + '\\\\b', 'i').test(debugEnviron)) {\n var pid = process.pid;\n debugs[set] = function() {\n var msg = exports.format.apply(exports, arguments);\n console.error('%s %d: %s', set, pid, msg);\n };\n } else {\n debugs[set] = function() {};\n }\n }\n return debugs[set];\n};\n\n\n/**\n * Echos the value of a value. Trys to print the value out\n * in the best way possible given the different types.\n *\n * @param {Object} obj The object to print out.\n * @param {Object} opts Optional options object that alters the output.\n */\n/* legacy: obj, showHidden, depth, colors*/\nfunction inspect(obj, opts) {\n // default options\n var ctx = {\n seen: [],\n stylize: stylizeNoColor\n };\n // legacy...\n if (arguments.length >= 3) ctx.depth = arguments[2];\n if (arguments.length >= 4) ctx.colors = arguments[3];\n if (isBoolean(opts)) {\n // legacy...\n ctx.showHidden = opts;\n } else if (opts) {\n // got an \"options\" object\n exports._extend(ctx, opts);\n }\n // set default options\n if (isUndefined(ctx.showHidden)) ctx.showHidden = false;\n if (isUndefined(ctx.depth)) ctx.depth = 2;\n if (isUndefined(ctx.colors)) ctx.colors = false;\n if (isUndefined(ctx.customInspect)) ctx.customInspect = true;\n if (ctx.colors) ctx.stylize = stylizeWithColor;\n return formatValue(ctx, obj, ctx.depth);\n}\nexports.inspect = inspect;\n\n\n// http://en.wikipedia.org/wiki/ANSI_escape_code#graphics\ninspect.colors = {\n 'bold' : [1, 22],\n 'italic' : [3, 23],\n 'underline' : [4, 24],\n 'inverse' : [7, 27],\n 'white' : [37, 39],\n 'grey' : [90, 39],\n 'black' : [30, 39],\n 'blue' : [34, 39],\n 'cyan' : [36, 39],\n 'green' : [32, 39],\n 'magenta' : [35, 39],\n 'red' : [31, 39],\n 'yellow' : [33, 39]\n};\n\n// Don't use 'blue' not visible on cmd.exe\ninspect.styles = {\n 'special': 'cyan',\n 'number': 'yellow',\n 'boolean': 'yellow',\n 'undefined': 'grey',\n 'null': 'bold',\n 'string': 'green',\n 'date': 'magenta',\n // \"name\": intentionally not styling\n 'regexp': 'red'\n};\n\n\nfunction stylizeWithColor(str, styleType) {\n var style = inspect.styles[styleType];\n\n if (style) {\n return '\\u001b[' + inspect.colors[style][0] + 'm' + str +\n '\\u001b[' + inspect.colors[style][1] + 'm';\n } else {\n return str;\n }\n}\n\n\nfunction stylizeNoColor(str, styleType) {\n return str;\n}\n\n\nfunction arrayToHash(array) {\n var hash = {};\n\n array.forEach(function(val, idx) {\n hash[val] = true;\n });\n\n return hash;\n}\n\n\nfunction formatValue(ctx, value, recurseTimes) {\n // Provide a hook for user-specified inspect functions.\n // Check that value is an object with an inspect function on it\n if (ctx.customInspect &&\n value &&\n isFunction(value.inspect) &&\n // Filter out the util module, it's inspect function is special\n value.inspect !== exports.inspect &&\n // Also filter out any prototype objects using the circular check.\n !(value.constructor && value.constructor.prototype === value)) {\n var ret = value.inspect(recurseTimes, ctx);\n if (!isString(ret)) {\n ret = formatValue(ctx, ret, recurseTimes);\n }\n return ret;\n }\n\n // Primitive types cannot have properties\n var primitive = formatPrimitive(ctx, value);\n if (primitive) {\n return primitive;\n }\n\n // Look up the keys of the object.\n var keys = Object.keys(value);\n var visibleKeys = arrayToHash(keys);\n\n if (ctx.showHidden) {\n keys = Object.getOwnPropertyNames(value);\n }\n\n // IE doesn't make error fields non-enumerable\n // http://msdn.microsoft.com/en-us/library/ie/dww52sbt(v=vs.94).aspx\n if (isError(value)\n && (keys.indexOf('message') >= 0 || keys.indexOf('description') >= 0)) {\n return formatError(value);\n }\n\n // Some type of object without properties can be shortcutted.\n if (keys.length === 0) {\n if (isFunction(value)) {\n var name = value.name ? ': ' + value.name : '';\n return ctx.stylize('[Function' + name + ']', 'special');\n }\n if (isRegExp(value)) {\n return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp');\n }\n if (isDate(value)) {\n return ctx.stylize(Date.prototype.toString.call(value), 'date');\n }\n if (isError(value)) {\n return formatError(value);\n }\n }\n\n var base = '', array = false, braces = ['{', '}'];\n\n // Make Array say that they are Array\n if (isArray(value)) {\n array = true;\n braces = ['[', ']'];\n }\n\n // Make functions say that they are functions\n if (isFunction(value)) {\n var n = value.name ? ': ' + value.name : '';\n base = ' [Function' + n + ']';\n }\n\n // Make RegExps say that they are RegExps\n if (isRegExp(value)) {\n base = ' ' + RegExp.prototype.toString.call(value);\n }\n\n // Make dates with properties first say the date\n if (isDate(value)) {\n base = ' ' + Date.prototype.toUTCString.call(value);\n }\n\n // Make error with message first say the error\n if (isError(value)) {\n base = ' ' + formatError(value);\n }\n\n if (keys.length === 0 && (!array || value.length == 0)) {\n return braces[0] + base + braces[1];\n }\n\n if (recurseTimes < 0) {\n if (isRegExp(value)) {\n return ctx.stylize(RegExp.prototype.toString.call(value), 'regexp');\n } else {\n return ctx.stylize('[Object]', 'special');\n }\n }\n\n ctx.seen.push(value);\n\n var output;\n if (array) {\n output = formatArray(ctx, value, recurseTimes, visibleKeys, keys);\n } else {\n output = keys.map(function(key) {\n return formatProperty(ctx, value, recurseTimes, visibleKeys, key, array);\n });\n }\n\n ctx.seen.pop();\n\n return reduceToSingleString(output, base, braces);\n}\n\n\nfunction formatPrimitive(ctx, value) {\n if (isUndefined(value))\n return ctx.stylize('undefined', 'undefined');\n if (isString(value)) {\n var simple = '\\'' + JSON.stringify(value).replace(/^\"|\"$/g, '')\n .replace(/'/g, \"\\\\'\")\n .replace(/\\\\\"/g, '\"') + '\\'';\n return ctx.stylize(simple, 'string');\n }\n if (isNumber(value))\n return ctx.stylize('' + value, 'number');\n if (isBoolean(value))\n return ctx.stylize('' + value, 'boolean');\n // For some reason typeof null is \"object\", so special case here.\n if (isNull(value))\n return ctx.stylize('null', 'null');\n}\n\n\nfunction formatError(value) {\n return '[' + Error.prototype.toString.call(value) + ']';\n}\n\n\nfunction formatArray(ctx, value, recurseTimes, visibleKeys, keys) {\n var output = [];\n for (var i = 0, l = value.length; i < l; ++i) {\n if (hasOwnProperty(value, String(i))) {\n output.push(formatProperty(ctx, value, recurseTimes, visibleKeys,\n String(i), true));\n } else {\n output.push('');\n }\n }\n keys.forEach(function(key) {\n if (!key.match(/^\\d+$/)) {\n output.push(formatProperty(ctx, value, recurseTimes, visibleKeys,\n key, true));\n }\n });\n return output;\n}\n\n\nfunction formatProperty(ctx, value, recurseTimes, visibleKeys, key, array) {\n var name, str, desc;\n desc = Object.getOwnPropertyDescriptor(value, key) || { value: value[key] };\n if (desc.get) {\n if (desc.set) {\n str = ctx.stylize('[Getter/Setter]', 'special');\n } else {\n str = ctx.stylize('[Getter]', 'special');\n }\n } else {\n if (desc.set) {\n str = ctx.stylize('[Setter]', 'special');\n }\n }\n if (!hasOwnProperty(visibleKeys, key)) {\n name = '[' + key + ']';\n }\n if (!str) {\n if (ctx.seen.indexOf(desc.value) < 0) {\n if (isNull(recurseTimes)) {\n str = formatValue(ctx, desc.value, null);\n } else {\n str = formatValue(ctx, desc.value, recurseTimes - 1);\n }\n if (str.indexOf('\\n') > -1) {\n if (array) {\n str = str.split('\\n').map(function(line) {\n return ' ' + line;\n }).join('\\n').substr(2);\n } else {\n str = '\\n' + str.split('\\n').map(function(line) {\n return ' ' + line;\n }).join('\\n');\n }\n }\n } else {\n str = ctx.stylize('[Circular]', 'special');\n }\n }\n if (isUndefined(name)) {\n if (array && key.match(/^\\d+$/)) {\n return str;\n }\n name = JSON.stringify('' + key);\n if (name.match(/^\"([a-zA-Z_][a-zA-Z_0-9]*)\"$/)) {\n name = name.substr(1, name.length - 2);\n name = ctx.stylize(name, 'name');\n } else {\n name = name.replace(/'/g, \"\\\\'\")\n .replace(/\\\\\"/g, '\"')\n .replace(/(^\"|\"$)/g, \"'\");\n name = ctx.stylize(name, 'string');\n }\n }\n\n return name + ': ' + str;\n}\n\n\nfunction reduceToSingleString(output, base, braces) {\n var numLinesEst = 0;\n var length = output.reduce(function(prev, cur) {\n numLinesEst++;\n if (cur.indexOf('\\n') >= 0) numLinesEst++;\n return prev + cur.replace(/\\u001b\\[\\d\\d?m/g, '').length + 1;\n }, 0);\n\n if (length > 60) {\n return braces[0] +\n (base === '' ? '' : base + '\\n ') +\n ' ' +\n output.join(',\\n ') +\n ' ' +\n braces[1];\n }\n\n return braces[0] + base + ' ' + output.join(', ') + ' ' + braces[1];\n}\n\n\n// NOTE: These type checking functions intentionally don't use `instanceof`\n// because it is fragile and can be easily faked with `Object.create()`.\nfunction isArray(ar) {\n return Array.isArray(ar);\n}\nexports.isArray = isArray;\n\nfunction isBoolean(arg) {\n return typeof arg === 'boolean';\n}\nexports.isBoolean = isBoolean;\n\nfunction isNull(arg) {\n return arg === null;\n}\nexports.isNull = isNull;\n\nfunction isNullOrUndefined(arg) {\n return arg == null;\n}\nexports.isNullOrUndefined = isNullOrUndefined;\n\nfunction isNumber(arg) {\n return typeof arg === 'number';\n}\nexports.isNumber = isNumber;\n\nfunction isString(arg) {\n return typeof arg === 'string';\n}\nexports.isString = isString;\n\nfunction isSymbol(arg) {\n return typeof arg === 'symbol';\n}\nexports.isSymbol = isSymbol;\n\nfunction isUndefined(arg) {\n return arg === void 0;\n}\nexports.isUndefined = isUndefined;\n\nfunction isRegExp(re) {\n return isObject(re) && objectToString(re) === '[object RegExp]';\n}\nexports.isRegExp = isRegExp;\n\nfunction isObject(arg) {\n return typeof arg === 'object' && arg !== null;\n}\nexports.isObject = isObject;\n\nfunction isDate(d) {\n return isObject(d) && objectToString(d) === '[object Date]';\n}\nexports.isDate = isDate;\n\nfunction isError(e) {\n return isObject(e) &&\n (objectToString(e) === '[object Error]' || e instanceof Error);\n}\nexports.isError = isError;\n\nfunction isFunction(arg) {\n return typeof arg === 'function';\n}\nexports.isFunction = isFunction;\n\nfunction isPrimitive(arg) {\n return arg === null ||\n typeof arg === 'boolean' ||\n typeof arg === 'number' ||\n typeof arg === 'string' ||\n typeof arg === 'symbol' || // ES6 symbol\n typeof arg === 'undefined';\n}\nexports.isPrimitive = isPrimitive;\n\nexports.isBuffer = require('./support/isBuffer');\n\nfunction objectToString(o) {\n return Object.prototype.toString.call(o);\n}\n\n\nfunction pad(n) {\n return n < 10 ? '0' + n.toString(10) : n.toString(10);\n}\n\n\nvar months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep',\n 'Oct', 'Nov', 'Dec'];\n\n// 26 Feb 16:19:34\nfunction timestamp() {\n var d = new Date();\n var time = [pad(d.getHours()),\n pad(d.getMinutes()),\n pad(d.getSeconds())].join(':');\n return [d.getDate(), months[d.getMonth()], time].join(' ');\n}\n\n\n// log is just a thin wrapper to console.log that prepends a timestamp\nexports.log = function() {\n console.log('%s - %s', timestamp(), exports.format.apply(exports, arguments));\n};\n\n\n/**\n * Inherit the prototype methods from one constructor into another.\n *\n * The Function.prototype.inherits from lang.js rewritten as a standalone\n * function (not on Function.prototype). NOTE: If this file is to be loaded\n * during bootstrapping this function needs to be rewritten using some native\n * functions as prototype setup using normal JavaScript does not work as\n * expected during bootstrapping (see mirror.js in r114903).\n *\n * @param {function} ctor Constructor function which needs to inherit the\n * prototype.\n * @param {function} superCtor Constructor function to inherit prototype from.\n */\nexports.inherits = require('inherits');\n\nexports._extend = function(origin, add) {\n // Don't do anything if add isn't an object\n if (!add || !isObject(add)) return origin;\n\n var keys = Object.keys(add);\n var i = keys.length;\n while (i--) {\n origin[keys[i]] = add[keys[i]];\n }\n return origin;\n};\n\nfunction hasOwnProperty(obj, prop) {\n return Object.prototype.hasOwnProperty.call(obj, prop);\n}\n\nvar kCustomPromisifiedSymbol = typeof Symbol !== 'undefined' ? Symbol('util.promisify.custom') : undefined;\n\nexports.promisify = function promisify(original) {\n if (typeof original !== 'function')\n throw new TypeError('The \"original\" argument must be of type Function');\n\n if (kCustomPromisifiedSymbol && original[kCustomPromisifiedSymbol]) {\n var fn = original[kCustomPromisifiedSymbol];\n if (typeof fn !== 'function') {\n throw new TypeError('The \"util.promisify.custom\" argument must be of type Function');\n }\n Object.defineProperty(fn, kCustomPromisifiedSymbol, {\n value: fn, enumerable: false, writable: false, configurable: true\n });\n return fn;\n }\n\n function fn() {\n var promiseResolve, promiseReject;\n var promise = new Promise(function (resolve, reject) {\n promiseResolve = resolve;\n promiseReject = reject;\n });\n\n var args = [];\n for (var i = 0; i < arguments.length; i++) {\n args.push(arguments[i]);\n }\n args.push(function (err, value) {\n if (err) {\n promiseReject(err);\n } else {\n promiseResolve(value);\n }\n });\n\n try {\n original.apply(this, args);\n } catch (err) {\n promiseReject(err);\n }\n\n return promise;\n }\n\n Object.setPrototypeOf(fn, Object.getPrototypeOf(original));\n\n if (kCustomPromisifiedSymbol) Object.defineProperty(fn, kCustomPromisifiedSymbol, {\n value: fn, enumerable: false, writable: false, configurable: true\n });\n return Object.defineProperties(\n fn,\n getOwnPropertyDescriptors(original)\n );\n}\n\nexports.promisify.custom = kCustomPromisifiedSymbol\n\nfunction callbackifyOnRejected(reason, cb) {\n // `!reason` guard inspired by bluebird (Ref: https://goo.gl/t5IS6M).\n // Because `null` is a special error value in callbacks which means \"no error\n // occurred\", we error-wrap so the callback consumer can distinguish between\n // \"the promise rejected with null\" or \"the promise fulfilled with undefined\".\n if (!reason) {\n var newReason = new Error('Promise was rejected with a falsy value');\n newReason.reason = reason;\n reason = newReason;\n }\n return cb(reason);\n}\n\nfunction callbackify(original) {\n if (typeof original !== 'function') {\n throw new TypeError('The \"original\" argument must be of type Function');\n }\n\n // We DO NOT return the promise as it gives the user a false sense that\n // the promise is actually somehow related to the callback's execution\n // and that the callback throwing will reject the promise.\n function callbackified() {\n var args = [];\n for (var i = 0; i < arguments.length; i++) {\n args.push(arguments[i]);\n }\n\n var maybeCb = args.pop();\n if (typeof maybeCb !== 'function') {\n throw new TypeError('The last argument must be of type Function');\n }\n var self = this;\n var cb = function() {\n return maybeCb.apply(self, arguments);\n };\n // In true node style we process the callback on `nextTick` with all the\n // implications (stack, `uncaughtException`, `async_hooks`)\n original.apply(this, args)\n .then(function(ret) { process.nextTick(cb, null, ret) },\n function(rej) { process.nextTick(callbackifyOnRejected, rej, cb) });\n }\n\n Object.setPrototypeOf(callbackified, Object.getPrototypeOf(original));\n Object.defineProperties(callbackified,\n getOwnPropertyDescriptors(original));\n return callbackified;\n}\nexports.callbackify = callbackify;\n","var core = require('./_core');\nvar global = require('./_global');\nvar SHARED = '__core-js_shared__';\nvar store = global[SHARED] || (global[SHARED] = {});\n\n(module.exports = function (key, value) {\n return store[key] || (store[key] = value !== undefined ? value : {});\n})('versions', []).push({\n version: core.version,\n mode: require('./_library') ? 'pure' : 'global',\n copyright: '© 2019 Denis Pushkarev (zloirock.ru)'\n});\n","// false -> Array#indexOf\n// true -> Array#includes\nvar toIObject = require('./_to-iobject');\nvar toLength = require('./_to-length');\nvar toAbsoluteIndex = require('./_to-absolute-index');\nmodule.exports = function (IS_INCLUDES) {\n return function ($this, el, fromIndex) {\n var O = toIObject($this);\n var length = toLength(O.length);\n var index = toAbsoluteIndex(fromIndex, length);\n var value;\n // Array#includes uses SameValueZero equality algorithm\n // eslint-disable-next-line no-self-compare\n if (IS_INCLUDES && el != el) while (length > index) {\n value = O[index++];\n // eslint-disable-next-line no-self-compare\n if (value != value) return true;\n // Array#indexOf ignores holes, Array#includes - not\n } else for (;length > index; index++) if (IS_INCLUDES || index in O) {\n if (O[index] === el) return IS_INCLUDES || index || 0;\n } return !IS_INCLUDES && -1;\n };\n};\n","exports.f = Object.getOwnPropertySymbols;\n","// 7.2.2 IsArray(argument)\nvar cof = require('./_cof');\nmodule.exports = Array.isArray || function isArray(arg) {\n return cof(arg) == 'Array';\n};\n","var ITERATOR = require('./_wks')('iterator');\nvar SAFE_CLOSING = false;\n\ntry {\n var riter = [7][ITERATOR]();\n riter['return'] = function () { SAFE_CLOSING = true; };\n // eslint-disable-next-line no-throw-literal\n Array.from(riter, function () { throw 2; });\n} catch (e) { /* empty */ }\n\nmodule.exports = function (exec, skipClosing) {\n if (!skipClosing && !SAFE_CLOSING) return false;\n var safe = false;\n try {\n var arr = [7];\n var iter = arr[ITERATOR]();\n iter.next = function () { return { done: safe = true }; };\n arr[ITERATOR] = function () { return iter; };\n exec(arr);\n } catch (e) { /* empty */ }\n return safe;\n};\n","'use strict';\n// 21.2.5.3 get RegExp.prototype.flags\nvar anObject = require('./_an-object');\nmodule.exports = function () {\n var that = anObject(this);\n var result = '';\n if (that.global) result += 'g';\n if (that.ignoreCase) result += 'i';\n if (that.multiline) result += 'm';\n if (that.unicode) result += 'u';\n if (that.sticky) result += 'y';\n return result;\n};\n","'use strict';\n\nvar classof = require('./_classof');\nvar builtinExec = RegExp.prototype.exec;\n\n // `RegExpExec` abstract operation\n// https://tc39.github.io/ecma262/#sec-regexpexec\nmodule.exports = function (R, S) {\n var exec = R.exec;\n if (typeof exec === 'function') {\n var result = exec.call(R, S);\n if (typeof result !== 'object') {\n throw new TypeError('RegExp exec method returned something other than an Object or null');\n }\n return result;\n }\n if (classof(R) !== 'RegExp') {\n throw new TypeError('RegExp#exec called on incompatible receiver');\n }\n return builtinExec.call(R, S);\n};\n","'use strict';\nrequire('./es6.regexp.exec');\nvar redefine = require('./_redefine');\nvar hide = require('./_hide');\nvar fails = require('./_fails');\nvar defined = require('./_defined');\nvar wks = require('./_wks');\nvar regexpExec = require('./_regexp-exec');\n\nvar SPECIES = wks('species');\n\nvar REPLACE_SUPPORTS_NAMED_GROUPS = !fails(function () {\n // #replace needs built-in support for named groups.\n // #match works fine because it just return the exec results, even if it has\n // a \"grops\" property.\n var re = /./;\n re.exec = function () {\n var result = [];\n result.groups = { a: '7' };\n return result;\n };\n return ''.replace(re, '$<a>') !== '7';\n});\n\nvar SPLIT_WORKS_WITH_OVERWRITTEN_EXEC = (function () {\n // Chrome 51 has a buggy \"split\" implementation when RegExp#exec !== nativeExec\n var re = /(?:)/;\n var originalExec = re.exec;\n re.exec = function () { return originalExec.apply(this, arguments); };\n var result = 'ab'.split(re);\n return result.length === 2 && result[0] === 'a' && result[1] === 'b';\n})();\n\nmodule.exports = function (KEY, length, exec) {\n var SYMBOL = wks(KEY);\n\n var DELEGATES_TO_SYMBOL = !fails(function () {\n // String methods call symbol-named RegEp methods\n var O = {};\n O[SYMBOL] = function () { return 7; };\n return ''[KEY](O) != 7;\n });\n\n var DELEGATES_TO_EXEC = DELEGATES_TO_SYMBOL ? !fails(function () {\n // Symbol-named RegExp methods call .exec\n var execCalled = false;\n var re = /a/;\n re.exec = function () { execCalled = true; return null; };\n if (KEY === 'split') {\n // RegExp[@@split] doesn't call the regex's exec method, but first creates\n // a new one. We need to return the patched regex when creating the new one.\n re.constructor = {};\n re.constructor[SPECIES] = function () { return re; };\n }\n re[SYMBOL]('');\n return !execCalled;\n }) : undefined;\n\n if (\n !DELEGATES_TO_SYMBOL ||\n !DELEGATES_TO_EXEC ||\n (KEY === 'replace' && !REPLACE_SUPPORTS_NAMED_GROUPS) ||\n (KEY === 'split' && !SPLIT_WORKS_WITH_OVERWRITTEN_EXEC)\n ) {\n var nativeRegExpMethod = /./[SYMBOL];\n var fns = exec(\n defined,\n SYMBOL,\n ''[KEY],\n function maybeCallNative(nativeMethod, regexp, str, arg2, forceStringMethod) {\n if (regexp.exec === regexpExec) {\n if (DELEGATES_TO_SYMBOL && !forceStringMethod) {\n // The native String method already delegates to @@method (this\n // polyfilled function), leasing to infinite recursion.\n // We avoid it by directly calling the native @@method method.\n return { done: true, value: nativeRegExpMethod.call(regexp, str, arg2) };\n }\n return { done: true, value: nativeMethod.call(str, regexp, arg2) };\n }\n return { done: false };\n }\n );\n var strfn = fns[0];\n var rxfn = fns[1];\n\n redefine(String.prototype, KEY, strfn);\n hide(RegExp.prototype, SYMBOL, length == 2\n // 21.2.5.8 RegExp.prototype[@@replace](string, replaceValue)\n // 21.2.5.11 RegExp.prototype[@@split](string, limit)\n ? function (string, arg) { return rxfn.call(string, this, arg); }\n // 21.2.5.6 RegExp.prototype[@@match](string)\n // 21.2.5.9 RegExp.prototype[@@search](string)\n : function (string) { return rxfn.call(string, this); }\n );\n }\n};\n","var ctx = require('./_ctx');\nvar call = require('./_iter-call');\nvar isArrayIter = require('./_is-array-iter');\nvar anObject = require('./_an-object');\nvar toLength = require('./_to-length');\nvar getIterFn = require('./core.get-iterator-method');\nvar BREAK = {};\nvar RETURN = {};\nvar exports = module.exports = function (iterable, entries, fn, that, ITERATOR) {\n var iterFn = ITERATOR ? function () { return iterable; } : getIterFn(iterable);\n var f = ctx(fn, that, entries ? 2 : 1);\n var index = 0;\n var length, step, iterator, result;\n if (typeof iterFn != 'function') throw TypeError(iterable + ' is not iterable!');\n // fast case for arrays with default iterator\n if (isArrayIter(iterFn)) for (length = toLength(iterable.length); length > index; index++) {\n result = entries ? f(anObject(step = iterable[index])[0], step[1]) : f(iterable[index]);\n if (result === BREAK || result === RETURN) return result;\n } else for (iterator = iterFn.call(iterable); !(step = iterator.next()).done;) {\n result = call(iterator, f, step.value, entries);\n if (result === BREAK || result === RETURN) return result;\n }\n};\nexports.BREAK = BREAK;\nexports.RETURN = RETURN;\n","var global = require('./_global');\nvar navigator = global.navigator;\n\nmodule.exports = navigator && navigator.userAgent || '';\n","'use strict';\nvar global = require('./_global');\nvar $export = require('./_export');\nvar redefine = require('./_redefine');\nvar redefineAll = require('./_redefine-all');\nvar meta = require('./_meta');\nvar forOf = require('./_for-of');\nvar anInstance = require('./_an-instance');\nvar isObject = require('./_is-object');\nvar fails = require('./_fails');\nvar $iterDetect = require('./_iter-detect');\nvar setToStringTag = require('./_set-to-string-tag');\nvar inheritIfRequired = require('./_inherit-if-required');\n\nmodule.exports = function (NAME, wrapper, methods, common, IS_MAP, IS_WEAK) {\n var Base = global[NAME];\n var C = Base;\n var ADDER = IS_MAP ? 'set' : 'add';\n var proto = C && C.prototype;\n var O = {};\n var fixMethod = function (KEY) {\n var fn = proto[KEY];\n redefine(proto, KEY,\n KEY == 'delete' ? function (a) {\n return IS_WEAK && !isObject(a) ? false : fn.call(this, a === 0 ? 0 : a);\n } : KEY == 'has' ? function has(a) {\n return IS_WEAK && !isObject(a) ? false : fn.call(this, a === 0 ? 0 : a);\n } : KEY == 'get' ? function get(a) {\n return IS_WEAK && !isObject(a) ? undefined : fn.call(this, a === 0 ? 0 : a);\n } : KEY == 'add' ? function add(a) { fn.call(this, a === 0 ? 0 : a); return this; }\n : function set(a, b) { fn.call(this, a === 0 ? 0 : a, b); return this; }\n );\n };\n if (typeof C != 'function' || !(IS_WEAK || proto.forEach && !fails(function () {\n new C().entries().next();\n }))) {\n // create collection constructor\n C = common.getConstructor(wrapper, NAME, IS_MAP, ADDER);\n redefineAll(C.prototype, methods);\n meta.NEED = true;\n } else {\n var instance = new C();\n // early implementations not supports chaining\n var HASNT_CHAINING = instance[ADDER](IS_WEAK ? {} : -0, 1) != instance;\n // V8 ~ Chromium 40- weak-collections throws on primitives, but should return false\n var THROWS_ON_PRIMITIVES = fails(function () { instance.has(1); });\n // most early implementations doesn't supports iterables, most modern - not close it correctly\n var ACCEPT_ITERABLES = $iterDetect(function (iter) { new C(iter); }); // eslint-disable-line no-new\n // for early implementations -0 and +0 not the same\n var BUGGY_ZERO = !IS_WEAK && fails(function () {\n // V8 ~ Chromium 42- fails only with 5+ elements\n var $instance = new C();\n var index = 5;\n while (index--) $instance[ADDER](index, index);\n return !$instance.has(-0);\n });\n if (!ACCEPT_ITERABLES) {\n C = wrapper(function (target, iterable) {\n anInstance(target, C, NAME);\n var that = inheritIfRequired(new Base(), target, C);\n if (iterable != undefined) forOf(iterable, IS_MAP, that[ADDER], that);\n return that;\n });\n C.prototype = proto;\n proto.constructor = C;\n }\n if (THROWS_ON_PRIMITIVES || BUGGY_ZERO) {\n fixMethod('delete');\n fixMethod('has');\n IS_MAP && fixMethod('get');\n }\n if (BUGGY_ZERO || HASNT_CHAINING) fixMethod(ADDER);\n // weak collections should not contains .clear method\n if (IS_WEAK && proto.clear) delete proto.clear;\n }\n\n setToStringTag(C, NAME);\n\n O[NAME] = C;\n $export($export.G + $export.W + $export.F * (C != Base), O);\n\n if (!IS_WEAK) common.setStrong(C, NAME, IS_MAP);\n\n return C;\n};\n","var global = require('./_global');\nvar hide = require('./_hide');\nvar uid = require('./_uid');\nvar TYPED = uid('typed_array');\nvar VIEW = uid('view');\nvar ABV = !!(global.ArrayBuffer && global.DataView);\nvar CONSTR = ABV;\nvar i = 0;\nvar l = 9;\nvar Typed;\n\nvar TypedArrayConstructors = (\n 'Int8Array,Uint8Array,Uint8ClampedArray,Int16Array,Uint16Array,Int32Array,Uint32Array,Float32Array,Float64Array'\n).split(',');\n\nwhile (i < l) {\n if (Typed = global[TypedArrayConstructors[i++]]) {\n hide(Typed.prototype, TYPED, true);\n hide(Typed.prototype, VIEW, true);\n } else CONSTR = false;\n}\n\nmodule.exports = {\n ABV: ABV,\n CONSTR: CONSTR,\n TYPED: TYPED,\n VIEW: VIEW\n};\n","/*!\n * The buffer module from node.js, for the browser.\n *\n * @author Feross Aboukhadijeh <feross@feross.org> <http://feross.org>\n * @license MIT\n */\n/* eslint-disable no-proto */\n\n'use strict'\n\nvar base64 = require('base64-js')\nvar ieee754 = require('ieee754')\nvar isArray = require('isarray')\n\nexports.Buffer = Buffer\nexports.SlowBuffer = SlowBuffer\nexports.INSPECT_MAX_BYTES = 50\n\n/**\n * If `Buffer.TYPED_ARRAY_SUPPORT`:\n * === true Use Uint8Array implementation (fastest)\n * === false Use Object implementation (most compatible, even IE6)\n *\n * Browsers that support typed arrays are IE 10+, Firefox 4+, Chrome 7+, Safari 5.1+,\n * Opera 11.6+, iOS 4.2+.\n *\n * Due to various browser bugs, sometimes the Object implementation will be used even\n * when the browser supports typed arrays.\n *\n * Note:\n *\n * - Firefox 4-29 lacks support for adding new properties to `Uint8Array` instances,\n * See: https://bugzilla.mozilla.org/show_bug.cgi?id=695438.\n *\n * - Chrome 9-10 is missing the `TypedArray.prototype.subarray` function.\n *\n * - IE10 has a broken `TypedArray.prototype.subarray` function which returns arrays of\n * incorrect length in some situations.\n\n * We detect these buggy browsers and set `Buffer.TYPED_ARRAY_SUPPORT` to `false` so they\n * get the Object implementation, which is slower but behaves correctly.\n */\nBuffer.TYPED_ARRAY_SUPPORT = global.TYPED_ARRAY_SUPPORT !== undefined\n ? global.TYPED_ARRAY_SUPPORT\n : typedArraySupport()\n\n/*\n * Export kMaxLength after typed array support is determined.\n */\nexports.kMaxLength = kMaxLength()\n\nfunction typedArraySupport () {\n try {\n var arr = new Uint8Array(1)\n arr.__proto__ = {__proto__: Uint8Array.prototype, foo: function () { return 42 }}\n return arr.foo() === 42 && // typed array instances can be augmented\n typeof arr.subarray === 'function' && // chrome 9-10 lack `subarray`\n arr.subarray(1, 1).byteLength === 0 // ie10 has broken `subarray`\n } catch (e) {\n return false\n }\n}\n\nfunction kMaxLength () {\n return Buffer.TYPED_ARRAY_SUPPORT\n ? 0x7fffffff\n : 0x3fffffff\n}\n\nfunction createBuffer (that, length) {\n if (kMaxLength() < length) {\n throw new RangeError('Invalid typed array length')\n }\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n // Return an augmented `Uint8Array` instance, for best performance\n that = new Uint8Array(length)\n that.__proto__ = Buffer.prototype\n } else {\n // Fallback: Return an object instance of the Buffer class\n if (that === null) {\n that = new Buffer(length)\n }\n that.length = length\n }\n\n return that\n}\n\n/**\n * The Buffer constructor returns instances of `Uint8Array` that have their\n * prototype changed to `Buffer.prototype`. Furthermore, `Buffer` is a subclass of\n * `Uint8Array`, so the returned instances will have all the node `Buffer` methods\n * and the `Uint8Array` methods. Square bracket notation works as expected -- it\n * returns a single octet.\n *\n * The `Uint8Array` prototype remains unmodified.\n */\n\nfunction Buffer (arg, encodingOrOffset, length) {\n if (!Buffer.TYPED_ARRAY_SUPPORT && !(this instanceof Buffer)) {\n return new Buffer(arg, encodingOrOffset, length)\n }\n\n // Common case.\n if (typeof arg === 'number') {\n if (typeof encodingOrOffset === 'string') {\n throw new Error(\n 'If encoding is specified then the first argument must be a string'\n )\n }\n return allocUnsafe(this, arg)\n }\n return from(this, arg, encodingOrOffset, length)\n}\n\nBuffer.poolSize = 8192 // not used by this implementation\n\n// TODO: Legacy, not needed anymore. Remove in next major version.\nBuffer._augment = function (arr) {\n arr.__proto__ = Buffer.prototype\n return arr\n}\n\nfunction from (that, value, encodingOrOffset, length) {\n if (typeof value === 'number') {\n throw new TypeError('\"value\" argument must not be a number')\n }\n\n if (typeof ArrayBuffer !== 'undefined' && value instanceof ArrayBuffer) {\n return fromArrayBuffer(that, value, encodingOrOffset, length)\n }\n\n if (typeof value === 'string') {\n return fromString(that, value, encodingOrOffset)\n }\n\n return fromObject(that, value)\n}\n\n/**\n * Functionally equivalent to Buffer(arg, encoding) but throws a TypeError\n * if value is a number.\n * Buffer.from(str[, encoding])\n * Buffer.from(array)\n * Buffer.from(buffer)\n * Buffer.from(arrayBuffer[, byteOffset[, length]])\n **/\nBuffer.from = function (value, encodingOrOffset, length) {\n return from(null, value, encodingOrOffset, length)\n}\n\nif (Buffer.TYPED_ARRAY_SUPPORT) {\n Buffer.prototype.__proto__ = Uint8Array.prototype\n Buffer.__proto__ = Uint8Array\n if (typeof Symbol !== 'undefined' && Symbol.species &&\n Buffer[Symbol.species] === Buffer) {\n // Fix subarray() in ES2016. See: https://github.com/feross/buffer/pull/97\n Object.defineProperty(Buffer, Symbol.species, {\n value: null,\n configurable: true\n })\n }\n}\n\nfunction assertSize (size) {\n if (typeof size !== 'number') {\n throw new TypeError('\"size\" argument must be a number')\n } else if (size < 0) {\n throw new RangeError('\"size\" argument must not be negative')\n }\n}\n\nfunction alloc (that, size, fill, encoding) {\n assertSize(size)\n if (size <= 0) {\n return createBuffer(that, size)\n }\n if (fill !== undefined) {\n // Only pay attention to encoding if it's a string. This\n // prevents accidentally sending in a number that would\n // be interpretted as a start offset.\n return typeof encoding === 'string'\n ? createBuffer(that, size).fill(fill, encoding)\n : createBuffer(that, size).fill(fill)\n }\n return createBuffer(that, size)\n}\n\n/**\n * Creates a new filled Buffer instance.\n * alloc(size[, fill[, encoding]])\n **/\nBuffer.alloc = function (size, fill, encoding) {\n return alloc(null, size, fill, encoding)\n}\n\nfunction allocUnsafe (that, size) {\n assertSize(size)\n that = createBuffer(that, size < 0 ? 0 : checked(size) | 0)\n if (!Buffer.TYPED_ARRAY_SUPPORT) {\n for (var i = 0; i < size; ++i) {\n that[i] = 0\n }\n }\n return that\n}\n\n/**\n * Equivalent to Buffer(num), by default creates a non-zero-filled Buffer instance.\n * */\nBuffer.allocUnsafe = function (size) {\n return allocUnsafe(null, size)\n}\n/**\n * Equivalent to SlowBuffer(num), by default creates a non-zero-filled Buffer instance.\n */\nBuffer.allocUnsafeSlow = function (size) {\n return allocUnsafe(null, size)\n}\n\nfunction fromString (that, string, encoding) {\n if (typeof encoding !== 'string' || encoding === '') {\n encoding = 'utf8'\n }\n\n if (!Buffer.isEncoding(encoding)) {\n throw new TypeError('\"encoding\" must be a valid string encoding')\n }\n\n var length = byteLength(string, encoding) | 0\n that = createBuffer(that, length)\n\n var actual = that.write(string, encoding)\n\n if (actual !== length) {\n // Writing a hex string, for example, that contains invalid characters will\n // cause everything after the first invalid character to be ignored. (e.g.\n // 'abxxcd' will be treated as 'ab')\n that = that.slice(0, actual)\n }\n\n return that\n}\n\nfunction fromArrayLike (that, array) {\n var length = array.length < 0 ? 0 : checked(array.length) | 0\n that = createBuffer(that, length)\n for (var i = 0; i < length; i += 1) {\n that[i] = array[i] & 255\n }\n return that\n}\n\nfunction fromArrayBuffer (that, array, byteOffset, length) {\n array.byteLength // this throws if `array` is not a valid ArrayBuffer\n\n if (byteOffset < 0 || array.byteLength < byteOffset) {\n throw new RangeError('\\'offset\\' is out of bounds')\n }\n\n if (array.byteLength < byteOffset + (length || 0)) {\n throw new RangeError('\\'length\\' is out of bounds')\n }\n\n if (byteOffset === undefined && length === undefined) {\n array = new Uint8Array(array)\n } else if (length === undefined) {\n array = new Uint8Array(array, byteOffset)\n } else {\n array = new Uint8Array(array, byteOffset, length)\n }\n\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n // Return an augmented `Uint8Array` instance, for best performance\n that = array\n that.__proto__ = Buffer.prototype\n } else {\n // Fallback: Return an object instance of the Buffer class\n that = fromArrayLike(that, array)\n }\n return that\n}\n\nfunction fromObject (that, obj) {\n if (Buffer.isBuffer(obj)) {\n var len = checked(obj.length) | 0\n that = createBuffer(that, len)\n\n if (that.length === 0) {\n return that\n }\n\n obj.copy(that, 0, 0, len)\n return that\n }\n\n if (obj) {\n if ((typeof ArrayBuffer !== 'undefined' &&\n obj.buffer instanceof ArrayBuffer) || 'length' in obj) {\n if (typeof obj.length !== 'number' || isnan(obj.length)) {\n return createBuffer(that, 0)\n }\n return fromArrayLike(that, obj)\n }\n\n if (obj.type === 'Buffer' && isArray(obj.data)) {\n return fromArrayLike(that, obj.data)\n }\n }\n\n throw new TypeError('First argument must be a string, Buffer, ArrayBuffer, Array, or array-like object.')\n}\n\nfunction checked (length) {\n // Note: cannot use `length < kMaxLength()` here because that fails when\n // length is NaN (which is otherwise coerced to zero.)\n if (length >= kMaxLength()) {\n throw new RangeError('Attempt to allocate Buffer larger than maximum ' +\n 'size: 0x' + kMaxLength().toString(16) + ' bytes')\n }\n return length | 0\n}\n\nfunction SlowBuffer (length) {\n if (+length != length) { // eslint-disable-line eqeqeq\n length = 0\n }\n return Buffer.alloc(+length)\n}\n\nBuffer.isBuffer = function isBuffer (b) {\n return !!(b != null && b._isBuffer)\n}\n\nBuffer.compare = function compare (a, b) {\n if (!Buffer.isBuffer(a) || !Buffer.isBuffer(b)) {\n throw new TypeError('Arguments must be Buffers')\n }\n\n if (a === b) return 0\n\n var x = a.length\n var y = b.length\n\n for (var i = 0, len = Math.min(x, y); i < len; ++i) {\n if (a[i] !== b[i]) {\n x = a[i]\n y = b[i]\n break\n }\n }\n\n if (x < y) return -1\n if (y < x) return 1\n return 0\n}\n\nBuffer.isEncoding = function isEncoding (encoding) {\n switch (String(encoding).toLowerCase()) {\n case 'hex':\n case 'utf8':\n case 'utf-8':\n case 'ascii':\n case 'latin1':\n case 'binary':\n case 'base64':\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return true\n default:\n return false\n }\n}\n\nBuffer.concat = function concat (list, length) {\n if (!isArray(list)) {\n throw new TypeError('\"list\" argument must be an Array of Buffers')\n }\n\n if (list.length === 0) {\n return Buffer.alloc(0)\n }\n\n var i\n if (length === undefined) {\n length = 0\n for (i = 0; i < list.length; ++i) {\n length += list[i].length\n }\n }\n\n var buffer = Buffer.allocUnsafe(length)\n var pos = 0\n for (i = 0; i < list.length; ++i) {\n var buf = list[i]\n if (!Buffer.isBuffer(buf)) {\n throw new TypeError('\"list\" argument must be an Array of Buffers')\n }\n buf.copy(buffer, pos)\n pos += buf.length\n }\n return buffer\n}\n\nfunction byteLength (string, encoding) {\n if (Buffer.isBuffer(string)) {\n return string.length\n }\n if (typeof ArrayBuffer !== 'undefined' && typeof ArrayBuffer.isView === 'function' &&\n (ArrayBuffer.isView(string) || string instanceof ArrayBuffer)) {\n return string.byteLength\n }\n if (typeof string !== 'string') {\n string = '' + string\n }\n\n var len = string.length\n if (len === 0) return 0\n\n // Use a for loop to avoid recursion\n var loweredCase = false\n for (;;) {\n switch (encoding) {\n case 'ascii':\n case 'latin1':\n case 'binary':\n return len\n case 'utf8':\n case 'utf-8':\n case undefined:\n return utf8ToBytes(string).length\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return len * 2\n case 'hex':\n return len >>> 1\n case 'base64':\n return base64ToBytes(string).length\n default:\n if (loweredCase) return utf8ToBytes(string).length // assume utf8\n encoding = ('' + encoding).toLowerCase()\n loweredCase = true\n }\n }\n}\nBuffer.byteLength = byteLength\n\nfunction slowToString (encoding, start, end) {\n var loweredCase = false\n\n // No need to verify that \"this.length <= MAX_UINT32\" since it's a read-only\n // property of a typed array.\n\n // This behaves neither like String nor Uint8Array in that we set start/end\n // to their upper/lower bounds if the value passed is out of range.\n // undefined is handled specially as per ECMA-262 6th Edition,\n // Section 13.3.3.7 Runtime Semantics: KeyedBindingInitialization.\n if (start === undefined || start < 0) {\n start = 0\n }\n // Return early if start > this.length. Done here to prevent potential uint32\n // coercion fail below.\n if (start > this.length) {\n return ''\n }\n\n if (end === undefined || end > this.length) {\n end = this.length\n }\n\n if (end <= 0) {\n return ''\n }\n\n // Force coersion to uint32. This will also coerce falsey/NaN values to 0.\n end >>>= 0\n start >>>= 0\n\n if (end <= start) {\n return ''\n }\n\n if (!encoding) encoding = 'utf8'\n\n while (true) {\n switch (encoding) {\n case 'hex':\n return hexSlice(this, start, end)\n\n case 'utf8':\n case 'utf-8':\n return utf8Slice(this, start, end)\n\n case 'ascii':\n return asciiSlice(this, start, end)\n\n case 'latin1':\n case 'binary':\n return latin1Slice(this, start, end)\n\n case 'base64':\n return base64Slice(this, start, end)\n\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return utf16leSlice(this, start, end)\n\n default:\n if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)\n encoding = (encoding + '').toLowerCase()\n loweredCase = true\n }\n }\n}\n\n// The property is used by `Buffer.isBuffer` and `is-buffer` (in Safari 5-7) to detect\n// Buffer instances.\nBuffer.prototype._isBuffer = true\n\nfunction swap (b, n, m) {\n var i = b[n]\n b[n] = b[m]\n b[m] = i\n}\n\nBuffer.prototype.swap16 = function swap16 () {\n var len = this.length\n if (len % 2 !== 0) {\n throw new RangeError('Buffer size must be a multiple of 16-bits')\n }\n for (var i = 0; i < len; i += 2) {\n swap(this, i, i + 1)\n }\n return this\n}\n\nBuffer.prototype.swap32 = function swap32 () {\n var len = this.length\n if (len % 4 !== 0) {\n throw new RangeError('Buffer size must be a multiple of 32-bits')\n }\n for (var i = 0; i < len; i += 4) {\n swap(this, i, i + 3)\n swap(this, i + 1, i + 2)\n }\n return this\n}\n\nBuffer.prototype.swap64 = function swap64 () {\n var len = this.length\n if (len % 8 !== 0) {\n throw new RangeError('Buffer size must be a multiple of 64-bits')\n }\n for (var i = 0; i < len; i += 8) {\n swap(this, i, i + 7)\n swap(this, i + 1, i + 6)\n swap(this, i + 2, i + 5)\n swap(this, i + 3, i + 4)\n }\n return this\n}\n\nBuffer.prototype.toString = function toString () {\n var length = this.length | 0\n if (length === 0) return ''\n if (arguments.length === 0) return utf8Slice(this, 0, length)\n return slowToString.apply(this, arguments)\n}\n\nBuffer.prototype.equals = function equals (b) {\n if (!Buffer.isBuffer(b)) throw new TypeError('Argument must be a Buffer')\n if (this === b) return true\n return Buffer.compare(this, b) === 0\n}\n\nBuffer.prototype.inspect = function inspect () {\n var str = ''\n var max = exports.INSPECT_MAX_BYTES\n if (this.length > 0) {\n str = this.toString('hex', 0, max).match(/.{2}/g).join(' ')\n if (this.length > max) str += ' ... '\n }\n return '<Buffer ' + str + '>'\n}\n\nBuffer.prototype.compare = function compare (target, start, end, thisStart, thisEnd) {\n if (!Buffer.isBuffer(target)) {\n throw new TypeError('Argument must be a Buffer')\n }\n\n if (start === undefined) {\n start = 0\n }\n if (end === undefined) {\n end = target ? target.length : 0\n }\n if (thisStart === undefined) {\n thisStart = 0\n }\n if (thisEnd === undefined) {\n thisEnd = this.length\n }\n\n if (start < 0 || end > target.length || thisStart < 0 || thisEnd > this.length) {\n throw new RangeError('out of range index')\n }\n\n if (thisStart >= thisEnd && start >= end) {\n return 0\n }\n if (thisStart >= thisEnd) {\n return -1\n }\n if (start >= end) {\n return 1\n }\n\n start >>>= 0\n end >>>= 0\n thisStart >>>= 0\n thisEnd >>>= 0\n\n if (this === target) return 0\n\n var x = thisEnd - thisStart\n var y = end - start\n var len = Math.min(x, y)\n\n var thisCopy = this.slice(thisStart, thisEnd)\n var targetCopy = target.slice(start, end)\n\n for (var i = 0; i < len; ++i) {\n if (thisCopy[i] !== targetCopy[i]) {\n x = thisCopy[i]\n y = targetCopy[i]\n break\n }\n }\n\n if (x < y) return -1\n if (y < x) return 1\n return 0\n}\n\n// Finds either the first index of `val` in `buffer` at offset >= `byteOffset`,\n// OR the last index of `val` in `buffer` at offset <= `byteOffset`.\n//\n// Arguments:\n// - buffer - a Buffer to search\n// - val - a string, Buffer, or number\n// - byteOffset - an index into `buffer`; will be clamped to an int32\n// - encoding - an optional encoding, relevant is val is a string\n// - dir - true for indexOf, false for lastIndexOf\nfunction bidirectionalIndexOf (buffer, val, byteOffset, encoding, dir) {\n // Empty buffer means no match\n if (buffer.length === 0) return -1\n\n // Normalize byteOffset\n if (typeof byteOffset === 'string') {\n encoding = byteOffset\n byteOffset = 0\n } else if (byteOffset > 0x7fffffff) {\n byteOffset = 0x7fffffff\n } else if (byteOffset < -0x80000000) {\n byteOffset = -0x80000000\n }\n byteOffset = +byteOffset // Coerce to Number.\n if (isNaN(byteOffset)) {\n // byteOffset: it it's undefined, null, NaN, \"foo\", etc, search whole buffer\n byteOffset = dir ? 0 : (buffer.length - 1)\n }\n\n // Normalize byteOffset: negative offsets start from the end of the buffer\n if (byteOffset < 0) byteOffset = buffer.length + byteOffset\n if (byteOffset >= buffer.length) {\n if (dir) return -1\n else byteOffset = buffer.length - 1\n } else if (byteOffset < 0) {\n if (dir) byteOffset = 0\n else return -1\n }\n\n // Normalize val\n if (typeof val === 'string') {\n val = Buffer.from(val, encoding)\n }\n\n // Finally, search either indexOf (if dir is true) or lastIndexOf\n if (Buffer.isBuffer(val)) {\n // Special case: looking for empty string/buffer always fails\n if (val.length === 0) {\n return -1\n }\n return arrayIndexOf(buffer, val, byteOffset, encoding, dir)\n } else if (typeof val === 'number') {\n val = val & 0xFF // Search for a byte value [0-255]\n if (Buffer.TYPED_ARRAY_SUPPORT &&\n typeof Uint8Array.prototype.indexOf === 'function') {\n if (dir) {\n return Uint8Array.prototype.indexOf.call(buffer, val, byteOffset)\n } else {\n return Uint8Array.prototype.lastIndexOf.call(buffer, val, byteOffset)\n }\n }\n return arrayIndexOf(buffer, [ val ], byteOffset, encoding, dir)\n }\n\n throw new TypeError('val must be string, number or Buffer')\n}\n\nfunction arrayIndexOf (arr, val, byteOffset, encoding, dir) {\n var indexSize = 1\n var arrLength = arr.length\n var valLength = val.length\n\n if (encoding !== undefined) {\n encoding = String(encoding).toLowerCase()\n if (encoding === 'ucs2' || encoding === 'ucs-2' ||\n encoding === 'utf16le' || encoding === 'utf-16le') {\n if (arr.length < 2 || val.length < 2) {\n return -1\n }\n indexSize = 2\n arrLength /= 2\n valLength /= 2\n byteOffset /= 2\n }\n }\n\n function read (buf, i) {\n if (indexSize === 1) {\n return buf[i]\n } else {\n return buf.readUInt16BE(i * indexSize)\n }\n }\n\n var i\n if (dir) {\n var foundIndex = -1\n for (i = byteOffset; i < arrLength; i++) {\n if (read(arr, i) === read(val, foundIndex === -1 ? 0 : i - foundIndex)) {\n if (foundIndex === -1) foundIndex = i\n if (i - foundIndex + 1 === valLength) return foundIndex * indexSize\n } else {\n if (foundIndex !== -1) i -= i - foundIndex\n foundIndex = -1\n }\n }\n } else {\n if (byteOffset + valLength > arrLength) byteOffset = arrLength - valLength\n for (i = byteOffset; i >= 0; i--) {\n var found = true\n for (var j = 0; j < valLength; j++) {\n if (read(arr, i + j) !== read(val, j)) {\n found = false\n break\n }\n }\n if (found) return i\n }\n }\n\n return -1\n}\n\nBuffer.prototype.includes = function includes (val, byteOffset, encoding) {\n return this.indexOf(val, byteOffset, encoding) !== -1\n}\n\nBuffer.prototype.indexOf = function indexOf (val, byteOffset, encoding) {\n return bidirectionalIndexOf(this, val, byteOffset, encoding, true)\n}\n\nBuffer.prototype.lastIndexOf = function lastIndexOf (val, byteOffset, encoding) {\n return bidirectionalIndexOf(this, val, byteOffset, encoding, false)\n}\n\nfunction hexWrite (buf, string, offset, length) {\n offset = Number(offset) || 0\n var remaining = buf.length - offset\n if (!length) {\n length = remaining\n } else {\n length = Number(length)\n if (length > remaining) {\n length = remaining\n }\n }\n\n // must be an even number of digits\n var strLen = string.length\n if (strLen % 2 !== 0) throw new TypeError('Invalid hex string')\n\n if (length > strLen / 2) {\n length = strLen / 2\n }\n for (var i = 0; i < length; ++i) {\n var parsed = parseInt(string.substr(i * 2, 2), 16)\n if (isNaN(parsed)) return i\n buf[offset + i] = parsed\n }\n return i\n}\n\nfunction utf8Write (buf, string, offset, length) {\n return blitBuffer(utf8ToBytes(string, buf.length - offset), buf, offset, length)\n}\n\nfunction asciiWrite (buf, string, offset, length) {\n return blitBuffer(asciiToBytes(string), buf, offset, length)\n}\n\nfunction latin1Write (buf, string, offset, length) {\n return asciiWrite(buf, string, offset, length)\n}\n\nfunction base64Write (buf, string, offset, length) {\n return blitBuffer(base64ToBytes(string), buf, offset, length)\n}\n\nfunction ucs2Write (buf, string, offset, length) {\n return blitBuffer(utf16leToBytes(string, buf.length - offset), buf, offset, length)\n}\n\nBuffer.prototype.write = function write (string, offset, length, encoding) {\n // Buffer#write(string)\n if (offset === undefined) {\n encoding = 'utf8'\n length = this.length\n offset = 0\n // Buffer#write(string, encoding)\n } else if (length === undefined && typeof offset === 'string') {\n encoding = offset\n length = this.length\n offset = 0\n // Buffer#write(string, offset[, length][, encoding])\n } else if (isFinite(offset)) {\n offset = offset | 0\n if (isFinite(length)) {\n length = length | 0\n if (encoding === undefined) encoding = 'utf8'\n } else {\n encoding = length\n length = undefined\n }\n // legacy write(string, encoding, offset, length) - remove in v0.13\n } else {\n throw new Error(\n 'Buffer.write(string, encoding, offset[, length]) is no longer supported'\n )\n }\n\n var remaining = this.length - offset\n if (length === undefined || length > remaining) length = remaining\n\n if ((string.length > 0 && (length < 0 || offset < 0)) || offset > this.length) {\n throw new RangeError('Attempt to write outside buffer bounds')\n }\n\n if (!encoding) encoding = 'utf8'\n\n var loweredCase = false\n for (;;) {\n switch (encoding) {\n case 'hex':\n return hexWrite(this, string, offset, length)\n\n case 'utf8':\n case 'utf-8':\n return utf8Write(this, string, offset, length)\n\n case 'ascii':\n return asciiWrite(this, string, offset, length)\n\n case 'latin1':\n case 'binary':\n return latin1Write(this, string, offset, length)\n\n case 'base64':\n // Warning: maxLength not taken into account in base64Write\n return base64Write(this, string, offset, length)\n\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return ucs2Write(this, string, offset, length)\n\n default:\n if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)\n encoding = ('' + encoding).toLowerCase()\n loweredCase = true\n }\n }\n}\n\nBuffer.prototype.toJSON = function toJSON () {\n return {\n type: 'Buffer',\n data: Array.prototype.slice.call(this._arr || this, 0)\n }\n}\n\nfunction base64Slice (buf, start, end) {\n if (start === 0 && end === buf.length) {\n return base64.fromByteArray(buf)\n } else {\n return base64.fromByteArray(buf.slice(start, end))\n }\n}\n\nfunction utf8Slice (buf, start, end) {\n end = Math.min(buf.length, end)\n var res = []\n\n var i = start\n while (i < end) {\n var firstByte = buf[i]\n var codePoint = null\n var bytesPerSequence = (firstByte > 0xEF) ? 4\n : (firstByte > 0xDF) ? 3\n : (firstByte > 0xBF) ? 2\n : 1\n\n if (i + bytesPerSequence <= end) {\n var secondByte, thirdByte, fourthByte, tempCodePoint\n\n switch (bytesPerSequence) {\n case 1:\n if (firstByte < 0x80) {\n codePoint = firstByte\n }\n break\n case 2:\n secondByte = buf[i + 1]\n if ((secondByte & 0xC0) === 0x80) {\n tempCodePoint = (firstByte & 0x1F) << 0x6 | (secondByte & 0x3F)\n if (tempCodePoint > 0x7F) {\n codePoint = tempCodePoint\n }\n }\n break\n case 3:\n secondByte = buf[i + 1]\n thirdByte = buf[i + 2]\n if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80) {\n tempCodePoint = (firstByte & 0xF) << 0xC | (secondByte & 0x3F) << 0x6 | (thirdByte & 0x3F)\n if (tempCodePoint > 0x7FF && (tempCodePoint < 0xD800 || tempCodePoint > 0xDFFF)) {\n codePoint = tempCodePoint\n }\n }\n break\n case 4:\n secondByte = buf[i + 1]\n thirdByte = buf[i + 2]\n fourthByte = buf[i + 3]\n if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80 && (fourthByte & 0xC0) === 0x80) {\n tempCodePoint = (firstByte & 0xF) << 0x12 | (secondByte & 0x3F) << 0xC | (thirdByte & 0x3F) << 0x6 | (fourthByte & 0x3F)\n if (tempCodePoint > 0xFFFF && tempCodePoint < 0x110000) {\n codePoint = tempCodePoint\n }\n }\n }\n }\n\n if (codePoint === null) {\n // we did not generate a valid codePoint so insert a\n // replacement char (U+FFFD) and advance only 1 byte\n codePoint = 0xFFFD\n bytesPerSequence = 1\n } else if (codePoint > 0xFFFF) {\n // encode to utf16 (surrogate pair dance)\n codePoint -= 0x10000\n res.push(codePoint >>> 10 & 0x3FF | 0xD800)\n codePoint = 0xDC00 | codePoint & 0x3FF\n }\n\n res.push(codePoint)\n i += bytesPerSequence\n }\n\n return decodeCodePointsArray(res)\n}\n\n// Based on http://stackoverflow.com/a/22747272/680742, the browser with\n// the lowest limit is Chrome, with 0x10000 args.\n// We go 1 magnitude less, for safety\nvar MAX_ARGUMENTS_LENGTH = 0x1000\n\nfunction decodeCodePointsArray (codePoints) {\n var len = codePoints.length\n if (len <= MAX_ARGUMENTS_LENGTH) {\n return String.fromCharCode.apply(String, codePoints) // avoid extra slice()\n }\n\n // Decode in chunks to avoid \"call stack size exceeded\".\n var res = ''\n var i = 0\n while (i < len) {\n res += String.fromCharCode.apply(\n String,\n codePoints.slice(i, i += MAX_ARGUMENTS_LENGTH)\n )\n }\n return res\n}\n\nfunction asciiSlice (buf, start, end) {\n var ret = ''\n end = Math.min(buf.length, end)\n\n for (var i = start; i < end; ++i) {\n ret += String.fromCharCode(buf[i] & 0x7F)\n }\n return ret\n}\n\nfunction latin1Slice (buf, start, end) {\n var ret = ''\n end = Math.min(buf.length, end)\n\n for (var i = start; i < end; ++i) {\n ret += String.fromCharCode(buf[i])\n }\n return ret\n}\n\nfunction hexSlice (buf, start, end) {\n var len = buf.length\n\n if (!start || start < 0) start = 0\n if (!end || end < 0 || end > len) end = len\n\n var out = ''\n for (var i = start; i < end; ++i) {\n out += toHex(buf[i])\n }\n return out\n}\n\nfunction utf16leSlice (buf, start, end) {\n var bytes = buf.slice(start, end)\n var res = ''\n for (var i = 0; i < bytes.length; i += 2) {\n res += String.fromCharCode(bytes[i] + bytes[i + 1] * 256)\n }\n return res\n}\n\nBuffer.prototype.slice = function slice (start, end) {\n var len = this.length\n start = ~~start\n end = end === undefined ? len : ~~end\n\n if (start < 0) {\n start += len\n if (start < 0) start = 0\n } else if (start > len) {\n start = len\n }\n\n if (end < 0) {\n end += len\n if (end < 0) end = 0\n } else if (end > len) {\n end = len\n }\n\n if (end < start) end = start\n\n var newBuf\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n newBuf = this.subarray(start, end)\n newBuf.__proto__ = Buffer.prototype\n } else {\n var sliceLen = end - start\n newBuf = new Buffer(sliceLen, undefined)\n for (var i = 0; i < sliceLen; ++i) {\n newBuf[i] = this[i + start]\n }\n }\n\n return newBuf\n}\n\n/*\n * Need to make sure that buffer isn't trying to write out of bounds.\n */\nfunction checkOffset (offset, ext, length) {\n if ((offset % 1) !== 0 || offset < 0) throw new RangeError('offset is not uint')\n if (offset + ext > length) throw new RangeError('Trying to access beyond buffer length')\n}\n\nBuffer.prototype.readUIntLE = function readUIntLE (offset, byteLength, noAssert) {\n offset = offset | 0\n byteLength = byteLength | 0\n if (!noAssert) checkOffset(offset, byteLength, this.length)\n\n var val = this[offset]\n var mul = 1\n var i = 0\n while (++i < byteLength && (mul *= 0x100)) {\n val += this[offset + i] * mul\n }\n\n return val\n}\n\nBuffer.prototype.readUIntBE = function readUIntBE (offset, byteLength, noAssert) {\n offset = offset | 0\n byteLength = byteLength | 0\n if (!noAssert) {\n checkOffset(offset, byteLength, this.length)\n }\n\n var val = this[offset + --byteLength]\n var mul = 1\n while (byteLength > 0 && (mul *= 0x100)) {\n val += this[offset + --byteLength] * mul\n }\n\n return val\n}\n\nBuffer.prototype.readUInt8 = function readUInt8 (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 1, this.length)\n return this[offset]\n}\n\nBuffer.prototype.readUInt16LE = function readUInt16LE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 2, this.length)\n return this[offset] | (this[offset + 1] << 8)\n}\n\nBuffer.prototype.readUInt16BE = function readUInt16BE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 2, this.length)\n return (this[offset] << 8) | this[offset + 1]\n}\n\nBuffer.prototype.readUInt32LE = function readUInt32LE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 4, this.length)\n\n return ((this[offset]) |\n (this[offset + 1] << 8) |\n (this[offset + 2] << 16)) +\n (this[offset + 3] * 0x1000000)\n}\n\nBuffer.prototype.readUInt32BE = function readUInt32BE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 4, this.length)\n\n return (this[offset] * 0x1000000) +\n ((this[offset + 1] << 16) |\n (this[offset + 2] << 8) |\n this[offset + 3])\n}\n\nBuffer.prototype.readIntLE = function readIntLE (offset, byteLength, noAssert) {\n offset = offset | 0\n byteLength = byteLength | 0\n if (!noAssert) checkOffset(offset, byteLength, this.length)\n\n var val = this[offset]\n var mul = 1\n var i = 0\n while (++i < byteLength && (mul *= 0x100)) {\n val += this[offset + i] * mul\n }\n mul *= 0x80\n\n if (val >= mul) val -= Math.pow(2, 8 * byteLength)\n\n return val\n}\n\nBuffer.prototype.readIntBE = function readIntBE (offset, byteLength, noAssert) {\n offset = offset | 0\n byteLength = byteLength | 0\n if (!noAssert) checkOffset(offset, byteLength, this.length)\n\n var i = byteLength\n var mul = 1\n var val = this[offset + --i]\n while (i > 0 && (mul *= 0x100)) {\n val += this[offset + --i] * mul\n }\n mul *= 0x80\n\n if (val >= mul) val -= Math.pow(2, 8 * byteLength)\n\n return val\n}\n\nBuffer.prototype.readInt8 = function readInt8 (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 1, this.length)\n if (!(this[offset] & 0x80)) return (this[offset])\n return ((0xff - this[offset] + 1) * -1)\n}\n\nBuffer.prototype.readInt16LE = function readInt16LE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 2, this.length)\n var val = this[offset] | (this[offset + 1] << 8)\n return (val & 0x8000) ? val | 0xFFFF0000 : val\n}\n\nBuffer.prototype.readInt16BE = function readInt16BE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 2, this.length)\n var val = this[offset + 1] | (this[offset] << 8)\n return (val & 0x8000) ? val | 0xFFFF0000 : val\n}\n\nBuffer.prototype.readInt32LE = function readInt32LE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 4, this.length)\n\n return (this[offset]) |\n (this[offset + 1] << 8) |\n (this[offset + 2] << 16) |\n (this[offset + 3] << 24)\n}\n\nBuffer.prototype.readInt32BE = function readInt32BE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 4, this.length)\n\n return (this[offset] << 24) |\n (this[offset + 1] << 16) |\n (this[offset + 2] << 8) |\n (this[offset + 3])\n}\n\nBuffer.prototype.readFloatLE = function readFloatLE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 4, this.length)\n return ieee754.read(this, offset, true, 23, 4)\n}\n\nBuffer.prototype.readFloatBE = function readFloatBE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 4, this.length)\n return ieee754.read(this, offset, false, 23, 4)\n}\n\nBuffer.prototype.readDoubleLE = function readDoubleLE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 8, this.length)\n return ieee754.read(this, offset, true, 52, 8)\n}\n\nBuffer.prototype.readDoubleBE = function readDoubleBE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 8, this.length)\n return ieee754.read(this, offset, false, 52, 8)\n}\n\nfunction checkInt (buf, value, offset, ext, max, min) {\n if (!Buffer.isBuffer(buf)) throw new TypeError('\"buffer\" argument must be a Buffer instance')\n if (value > max || value < min) throw new RangeError('\"value\" argument is out of bounds')\n if (offset + ext > buf.length) throw new RangeError('Index out of range')\n}\n\nBuffer.prototype.writeUIntLE = function writeUIntLE (value, offset, byteLength, noAssert) {\n value = +value\n offset = offset | 0\n byteLength = byteLength | 0\n if (!noAssert) {\n var maxBytes = Math.pow(2, 8 * byteLength) - 1\n checkInt(this, value, offset, byteLength, maxBytes, 0)\n }\n\n var mul = 1\n var i = 0\n this[offset] = value & 0xFF\n while (++i < byteLength && (mul *= 0x100)) {\n this[offset + i] = (value / mul) & 0xFF\n }\n\n return offset + byteLength\n}\n\nBuffer.prototype.writeUIntBE = function writeUIntBE (value, offset, byteLength, noAssert) {\n value = +value\n offset = offset | 0\n byteLength = byteLength | 0\n if (!noAssert) {\n var maxBytes = Math.pow(2, 8 * byteLength) - 1\n checkInt(this, value, offset, byteLength, maxBytes, 0)\n }\n\n var i = byteLength - 1\n var mul = 1\n this[offset + i] = value & 0xFF\n while (--i >= 0 && (mul *= 0x100)) {\n this[offset + i] = (value / mul) & 0xFF\n }\n\n return offset + byteLength\n}\n\nBuffer.prototype.writeUInt8 = function writeUInt8 (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 1, 0xff, 0)\n if (!Buffer.TYPED_ARRAY_SUPPORT) value = Math.floor(value)\n this[offset] = (value & 0xff)\n return offset + 1\n}\n\nfunction objectWriteUInt16 (buf, value, offset, littleEndian) {\n if (value < 0) value = 0xffff + value + 1\n for (var i = 0, j = Math.min(buf.length - offset, 2); i < j; ++i) {\n buf[offset + i] = (value & (0xff << (8 * (littleEndian ? i : 1 - i)))) >>>\n (littleEndian ? i : 1 - i) * 8\n }\n}\n\nBuffer.prototype.writeUInt16LE = function writeUInt16LE (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset] = (value & 0xff)\n this[offset + 1] = (value >>> 8)\n } else {\n objectWriteUInt16(this, value, offset, true)\n }\n return offset + 2\n}\n\nBuffer.prototype.writeUInt16BE = function writeUInt16BE (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset] = (value >>> 8)\n this[offset + 1] = (value & 0xff)\n } else {\n objectWriteUInt16(this, value, offset, false)\n }\n return offset + 2\n}\n\nfunction objectWriteUInt32 (buf, value, offset, littleEndian) {\n if (value < 0) value = 0xffffffff + value + 1\n for (var i = 0, j = Math.min(buf.length - offset, 4); i < j; ++i) {\n buf[offset + i] = (value >>> (littleEndian ? i : 3 - i) * 8) & 0xff\n }\n}\n\nBuffer.prototype.writeUInt32LE = function writeUInt32LE (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset + 3] = (value >>> 24)\n this[offset + 2] = (value >>> 16)\n this[offset + 1] = (value >>> 8)\n this[offset] = (value & 0xff)\n } else {\n objectWriteUInt32(this, value, offset, true)\n }\n return offset + 4\n}\n\nBuffer.prototype.writeUInt32BE = function writeUInt32BE (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset] = (value >>> 24)\n this[offset + 1] = (value >>> 16)\n this[offset + 2] = (value >>> 8)\n this[offset + 3] = (value & 0xff)\n } else {\n objectWriteUInt32(this, value, offset, false)\n }\n return offset + 4\n}\n\nBuffer.prototype.writeIntLE = function writeIntLE (value, offset, byteLength, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) {\n var limit = Math.pow(2, 8 * byteLength - 1)\n\n checkInt(this, value, offset, byteLength, limit - 1, -limit)\n }\n\n var i = 0\n var mul = 1\n var sub = 0\n this[offset] = value & 0xFF\n while (++i < byteLength && (mul *= 0x100)) {\n if (value < 0 && sub === 0 && this[offset + i - 1] !== 0) {\n sub = 1\n }\n this[offset + i] = ((value / mul) >> 0) - sub & 0xFF\n }\n\n return offset + byteLength\n}\n\nBuffer.prototype.writeIntBE = function writeIntBE (value, offset, byteLength, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) {\n var limit = Math.pow(2, 8 * byteLength - 1)\n\n checkInt(this, value, offset, byteLength, limit - 1, -limit)\n }\n\n var i = byteLength - 1\n var mul = 1\n var sub = 0\n this[offset + i] = value & 0xFF\n while (--i >= 0 && (mul *= 0x100)) {\n if (value < 0 && sub === 0 && this[offset + i + 1] !== 0) {\n sub = 1\n }\n this[offset + i] = ((value / mul) >> 0) - sub & 0xFF\n }\n\n return offset + byteLength\n}\n\nBuffer.prototype.writeInt8 = function writeInt8 (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 1, 0x7f, -0x80)\n if (!Buffer.TYPED_ARRAY_SUPPORT) value = Math.floor(value)\n if (value < 0) value = 0xff + value + 1\n this[offset] = (value & 0xff)\n return offset + 1\n}\n\nBuffer.prototype.writeInt16LE = function writeInt16LE (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset] = (value & 0xff)\n this[offset + 1] = (value >>> 8)\n } else {\n objectWriteUInt16(this, value, offset, true)\n }\n return offset + 2\n}\n\nBuffer.prototype.writeInt16BE = function writeInt16BE (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset] = (value >>> 8)\n this[offset + 1] = (value & 0xff)\n } else {\n objectWriteUInt16(this, value, offset, false)\n }\n return offset + 2\n}\n\nBuffer.prototype.writeInt32LE = function writeInt32LE (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset] = (value & 0xff)\n this[offset + 1] = (value >>> 8)\n this[offset + 2] = (value >>> 16)\n this[offset + 3] = (value >>> 24)\n } else {\n objectWriteUInt32(this, value, offset, true)\n }\n return offset + 4\n}\n\nBuffer.prototype.writeInt32BE = function writeInt32BE (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)\n if (value < 0) value = 0xffffffff + value + 1\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset] = (value >>> 24)\n this[offset + 1] = (value >>> 16)\n this[offset + 2] = (value >>> 8)\n this[offset + 3] = (value & 0xff)\n } else {\n objectWriteUInt32(this, value, offset, false)\n }\n return offset + 4\n}\n\nfunction checkIEEE754 (buf, value, offset, ext, max, min) {\n if (offset + ext > buf.length) throw new RangeError('Index out of range')\n if (offset < 0) throw new RangeError('Index out of range')\n}\n\nfunction writeFloat (buf, value, offset, littleEndian, noAssert) {\n if (!noAssert) {\n checkIEEE754(buf, value, offset, 4, 3.4028234663852886e+38, -3.4028234663852886e+38)\n }\n ieee754.write(buf, value, offset, littleEndian, 23, 4)\n return offset + 4\n}\n\nBuffer.prototype.writeFloatLE = function writeFloatLE (value, offset, noAssert) {\n return writeFloat(this, value, offset, true, noAssert)\n}\n\nBuffer.prototype.writeFloatBE = function writeFloatBE (value, offset, noAssert) {\n return writeFloat(this, value, offset, false, noAssert)\n}\n\nfunction writeDouble (buf, value, offset, littleEndian, noAssert) {\n if (!noAssert) {\n checkIEEE754(buf, value, offset, 8, 1.7976931348623157E+308, -1.7976931348623157E+308)\n }\n ieee754.write(buf, value, offset, littleEndian, 52, 8)\n return offset + 8\n}\n\nBuffer.prototype.writeDoubleLE = function writeDoubleLE (value, offset, noAssert) {\n return writeDouble(this, value, offset, true, noAssert)\n}\n\nBuffer.prototype.writeDoubleBE = function writeDoubleBE (value, offset, noAssert) {\n return writeDouble(this, value, offset, false, noAssert)\n}\n\n// copy(targetBuffer, targetStart=0, sourceStart=0, sourceEnd=buffer.length)\nBuffer.prototype.copy = function copy (target, targetStart, start, end) {\n if (!start) start = 0\n if (!end && end !== 0) end = this.length\n if (targetStart >= target.length) targetStart = target.length\n if (!targetStart) targetStart = 0\n if (end > 0 && end < start) end = start\n\n // Copy 0 bytes; we're done\n if (end === start) return 0\n if (target.length === 0 || this.length === 0) return 0\n\n // Fatal error conditions\n if (targetStart < 0) {\n throw new RangeError('targetStart out of bounds')\n }\n if (start < 0 || start >= this.length) throw new RangeError('sourceStart out of bounds')\n if (end < 0) throw new RangeError('sourceEnd out of bounds')\n\n // Are we oob?\n if (end > this.length) end = this.length\n if (target.length - targetStart < end - start) {\n end = target.length - targetStart + start\n }\n\n var len = end - start\n var i\n\n if (this === target && start < targetStart && targetStart < end) {\n // descending copy from end\n for (i = len - 1; i >= 0; --i) {\n target[i + targetStart] = this[i + start]\n }\n } else if (len < 1000 || !Buffer.TYPED_ARRAY_SUPPORT) {\n // ascending copy from start\n for (i = 0; i < len; ++i) {\n target[i + targetStart] = this[i + start]\n }\n } else {\n Uint8Array.prototype.set.call(\n target,\n this.subarray(start, start + len),\n targetStart\n )\n }\n\n return len\n}\n\n// Usage:\n// buffer.fill(number[, offset[, end]])\n// buffer.fill(buffer[, offset[, end]])\n// buffer.fill(string[, offset[, end]][, encoding])\nBuffer.prototype.fill = function fill (val, start, end, encoding) {\n // Handle string cases:\n if (typeof val === 'string') {\n if (typeof start === 'string') {\n encoding = start\n start = 0\n end = this.length\n } else if (typeof end === 'string') {\n encoding = end\n end = this.length\n }\n if (val.length === 1) {\n var code = val.charCodeAt(0)\n if (code < 256) {\n val = code\n }\n }\n if (encoding !== undefined && typeof encoding !== 'string') {\n throw new TypeError('encoding must be a string')\n }\n if (typeof encoding === 'string' && !Buffer.isEncoding(encoding)) {\n throw new TypeError('Unknown encoding: ' + encoding)\n }\n } else if (typeof val === 'number') {\n val = val & 255\n }\n\n // Invalid ranges are not set to a default, so can range check early.\n if (start < 0 || this.length < start || this.length < end) {\n throw new RangeError('Out of range index')\n }\n\n if (end <= start) {\n return this\n }\n\n start = start >>> 0\n end = end === undefined ? this.length : end >>> 0\n\n if (!val) val = 0\n\n var i\n if (typeof val === 'number') {\n for (i = start; i < end; ++i) {\n this[i] = val\n }\n } else {\n var bytes = Buffer.isBuffer(val)\n ? val\n : utf8ToBytes(new Buffer(val, encoding).toString())\n var len = bytes.length\n for (i = 0; i < end - start; ++i) {\n this[i + start] = bytes[i % len]\n }\n }\n\n return this\n}\n\n// HELPER FUNCTIONS\n// ================\n\nvar INVALID_BASE64_RE = /[^+\\/0-9A-Za-z-_]/g\n\nfunction base64clean (str) {\n // Node strips out invalid characters like \\n and \\t from the string, base64-js does not\n str = stringtrim(str).replace(INVALID_BASE64_RE, '')\n // Node converts strings with length < 2 to ''\n if (str.length < 2) return ''\n // Node allows for non-padded base64 strings (missing trailing ===), base64-js does not\n while (str.length % 4 !== 0) {\n str = str + '='\n }\n return str\n}\n\nfunction stringtrim (str) {\n if (str.trim) return str.trim()\n return str.replace(/^\\s+|\\s+$/g, '')\n}\n\nfunction toHex (n) {\n if (n < 16) return '0' + n.toString(16)\n return n.toString(16)\n}\n\nfunction utf8ToBytes (string, units) {\n units = units || Infinity\n var codePoint\n var length = string.length\n var leadSurrogate = null\n var bytes = []\n\n for (var i = 0; i < length; ++i) {\n codePoint = string.charCodeAt(i)\n\n // is surrogate component\n if (codePoint > 0xD7FF && codePoint < 0xE000) {\n // last char was a lead\n if (!leadSurrogate) {\n // no lead yet\n if (codePoint > 0xDBFF) {\n // unexpected trail\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n continue\n } else if (i + 1 === length) {\n // unpaired lead\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n continue\n }\n\n // valid lead\n leadSurrogate = codePoint\n\n continue\n }\n\n // 2 leads in a row\n if (codePoint < 0xDC00) {\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n leadSurrogate = codePoint\n continue\n }\n\n // valid surrogate pair\n codePoint = (leadSurrogate - 0xD800 << 10 | codePoint - 0xDC00) + 0x10000\n } else if (leadSurrogate) {\n // valid bmp char, but last char was a lead\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n }\n\n leadSurrogate = null\n\n // encode utf8\n if (codePoint < 0x80) {\n if ((units -= 1) < 0) break\n bytes.push(codePoint)\n } else if (codePoint < 0x800) {\n if ((units -= 2) < 0) break\n bytes.push(\n codePoint >> 0x6 | 0xC0,\n codePoint & 0x3F | 0x80\n )\n } else if (codePoint < 0x10000) {\n if ((units -= 3) < 0) break\n bytes.push(\n codePoint >> 0xC | 0xE0,\n codePoint >> 0x6 & 0x3F | 0x80,\n codePoint & 0x3F | 0x80\n )\n } else if (codePoint < 0x110000) {\n if ((units -= 4) < 0) break\n bytes.push(\n codePoint >> 0x12 | 0xF0,\n codePoint >> 0xC & 0x3F | 0x80,\n codePoint >> 0x6 & 0x3F | 0x80,\n codePoint & 0x3F | 0x80\n )\n } else {\n throw new Error('Invalid code point')\n }\n }\n\n return bytes\n}\n\nfunction asciiToBytes (str) {\n var byteArray = []\n for (var i = 0; i < str.length; ++i) {\n // Node's code seems to be doing this and not & 0x7F..\n byteArray.push(str.charCodeAt(i) & 0xFF)\n }\n return byteArray\n}\n\nfunction utf16leToBytes (str, units) {\n var c, hi, lo\n var byteArray = []\n for (var i = 0; i < str.length; ++i) {\n if ((units -= 2) < 0) break\n\n c = str.charCodeAt(i)\n hi = c >> 8\n lo = c % 256\n byteArray.push(lo)\n byteArray.push(hi)\n }\n\n return byteArray\n}\n\nfunction base64ToBytes (str) {\n return base64.toByteArray(base64clean(str))\n}\n\nfunction blitBuffer (src, dst, offset, length) {\n for (var i = 0; i < length; ++i) {\n if ((i + offset >= dst.length) || (i >= src.length)) break\n dst[i + offset] = src[i]\n }\n return i\n}\n\nfunction isnan (val) {\n return val !== val // eslint-disable-line no-self-compare\n}\n","'use strict';\n\nif (typeof process === 'undefined' ||\n !process.version ||\n process.version.indexOf('v0.') === 0 ||\n process.version.indexOf('v1.') === 0 && process.version.indexOf('v1.8.') !== 0) {\n module.exports = { nextTick: nextTick };\n} else {\n module.exports = process\n}\n\nfunction nextTick(fn, arg1, arg2, arg3) {\n if (typeof fn !== 'function') {\n throw new TypeError('\"callback\" argument must be a function');\n }\n var len = arguments.length;\n var args, i;\n switch (len) {\n case 0:\n case 1:\n return process.nextTick(fn);\n case 2:\n return process.nextTick(function afterTickOne() {\n fn.call(null, arg1);\n });\n case 3:\n return process.nextTick(function afterTickTwo() {\n fn.call(null, arg1, arg2);\n });\n case 4:\n return process.nextTick(function afterTickThree() {\n fn.call(null, arg1, arg2, arg3);\n });\n default:\n args = new Array(len - 1);\n i = 0;\n while (i < args.length) {\n args[i++] = arguments[i];\n }\n return process.nextTick(function afterTick() {\n fn.apply(null, args);\n });\n }\n}\n\n","var logify_input = require('./log').logify_input;\nvar titleFormat = require('@brillout/format-text').titleFormat;\nvar isNodejs = require('./utils/isNodejs');\n\nvar option_keys = {\n is_warning: 'is_warning',\n is_usage: 'is_usage',\n is_internal: 'is_internal',\n details: 'details',\n};\n\nmodule.exports = assert;\n\nfunction assert(condition) {\n if( condition ) {\n return condition;\n }\n\n // parse arguments\n var parsed = parseArguments([].slice.call(arguments, 1));\n var msgs = parsed.msgs;\n var opts = parsed.opts;\n\n var callStack = getCallStack();\n\n // build error message\n var message = getErrorMessage(condition, msgs, opts, callStack);\n\n // throw logic\n throwError(message, opts, callStack);\n\n // convenience to write code like `if( ! require('assert/soft')(condition) ) return;`\n return condition;\n}\n\nfunction parseArguments(args) {\n var msgs = [];\n var opts = {};\n for(var i in args) {\n var arg = args[i];\n var is_option_arg = arg && arg.IS_REASSERT_OPTS;\n if( is_option_arg ) {\n for(var j in arg) {\n if( !option_keys[j] && j!=='IS_REASSERT_OPTS' ) {\n var msg = 'Unkonwn option `'+j+'`';\n throw new Error('@brillout/assert: [Internal Error]: '+msg);\n }\n opts[j] = arg[j];\n }\n } else {\n msgs.push(arg);\n }\n }\n\n return {msgs: msgs, opts: opts};\n}\n\nfunction getErrorMessage(condition, msgs, opts, callStack) {\n var message = [];\n\n message = message.concat(getErrorDetailsMessage(opts));\n\n if( ! is_browser() ) {\n message = message.concat(getStackMessage(opts, msgs, callStack));\n message.push('\\n');\n }\n\n message = message.concat(getErrorSummaryMessage(condition, msgs, opts));\n\n return message;\n}\nfunction getErrorSummaryMessage(condition, msgs, opts) {\n let message = [];\n\n var title = (\n opts[option_keys.is_warning] && 'Warning' ||\n opts[option_keys.is_usage] && 'Wrong Usage' ||\n opts[option_keys.is_internal] && 'Internal Error' ||\n 'Assertion Fail'\n );\n\n message.push(titleFormat(title));\n\n if( msgs.length===0 ) {\n message.push('Failed assertion condition: `'+condition+' != true`');\n }\n\n for(var i in msgs) {\n var msg = msgs[i];\n var str = logify_input(msg);\n\n message.push(str);\n }\n\n if( opts.details ) {\n message.push('');\n message.push('See \"Error Details\" above for more information.');\n }\n\n return message;\n}\nfunction getStackMessage(opts, msgs, callStack) {\n if( opts[option_keys.is_warning] && msgs.length>0 ) {\n return [];\n }\n\n /*\n // Without this Node.js adds a `[` and a `]` to the error string\n var niceFormattingPrefix = 'Error\\n at:';\n */\n\n return [\n // niceFormattingPrefix,\n titleFormat('Stack Trace'),\n callStack.join('\\n')\n ];\n}\nfunction getErrorDetailsMessage(opts) {\n if( ! opts.details ) {\n return [];\n }\n\n var message = [\n titleFormat('Error Details')\n ];\n\n for(var i in opts.details) {\n message.push(logify_input(opts.details[i]));\n }\n\n message.push('\\n');\n\n return message;\n}\n\nfunction throwError(message, opts, callStack) {\n var interupt_execution = !opts[option_keys.is_warning];\n\n if( isNodejs() ) {\n if( interupt_execution ) {\n var err = new Error();\n err.stack = message.join('\\n');\n throw err;\n } else {\n for(var i in message) console.error(message[i]);\n }\n }\n\n if( is_browser() ) {\n if( interupt_execution ) {\n throw__browser(message);\n } else {\n setTimeout(function() {\n throw__browser(message);\n }, 0);\n }\n }\n}\n\nfunction throw__browser(message) {\n for(var i in message) console.error(message[i]);\n Error.stackTraceLimit = Infinity;\n throw new Error();\n}\n\nfunction getCallStack() {\n var stackTraceLimit__original = Error.stackTraceLimit;\n Error.stackTraceLimit = Infinity;\n var callStackString = new Error().stack;\n Error.stackTraceLimit = stackTraceLimit__original;\n\n var lines = callStackString.split('\\n');\n\n var lines__filtered = [];\n for(var i in lines) {\n var line = lines[i];\n if( line === 'Error' ) {\n continue;\n }\n if( line.indexOf('/node_modules/@brillout/assert/') !== -1 ) {\n continue;\n }\n if( line.indexOf(' (internal/') !== -1 ) {\n continue;\n }\n // line = line.replace(/^ */, '');\n // line = line.replace(/^at */, ' ');\n lines__filtered.push(line);\n }\n\n var callStack = lines__filtered;\n return callStack;\n}\n\n/* TODO - reimplement soft errors\n\n // determine whether we are in production\n var prod = is_prod();\n\n var message = 'Assertion-Error'+(prod?'[prod]':'[dev]')+': '+condition+'!=true';\n var interupt_execution = (!prod || opts[option_keys.is_hard]) && !opts[option_keys.is_soft];\n\nfunction is_prod() {\n var prod_browser = is_browser() && window.location.hostname !== 'localhost';\n var prod_nodejs = isNodejs() && process.env['NODE_ENV'] === 'production';\n return prod_browser || prod_nodejs;\n}\n*/\n\nfunction is_browser() {\n return typeof window !== \"undefined\";\n}\n","'use strict';\n\nvar required = require('requires-port')\n , qs = require('querystringify')\n , slashes = /^[A-Za-z][A-Za-z0-9+-.]*:\\/\\//\n , protocolre = /^([a-z][a-z0-9.+-]*:)?(\\/\\/)?([\\S\\s]*)/i\n , whitespace = '[\\\\x09\\\\x0A\\\\x0B\\\\x0C\\\\x0D\\\\x20\\\\xA0\\\\u1680\\\\u180E\\\\u2000\\\\u2001\\\\u2002\\\\u2003\\\\u2004\\\\u2005\\\\u2006\\\\u2007\\\\u2008\\\\u2009\\\\u200A\\\\u202F\\\\u205F\\\\u3000\\\\u2028\\\\u2029\\\\uFEFF]'\n , left = new RegExp('^'+ whitespace +'+');\n\n/**\n * Trim a given string.\n *\n * @param {String} str String to trim.\n * @public\n */\nfunction trimLeft(str) {\n return (str ? str : '').toString().replace(left, '');\n}\n\n/**\n * These are the parse rules for the URL parser, it informs the parser\n * about:\n *\n * 0. The char it Needs to parse, if it's a string it should be done using\n * indexOf, RegExp using exec and NaN means set as current value.\n * 1. The property we should set when parsing this value.\n * 2. Indication if it's backwards or forward parsing, when set as number it's\n * the value of extra chars that should be split off.\n * 3. Inherit from location if non existing in the parser.\n * 4. `toLowerCase` the resulting value.\n */\nvar rules = [\n ['#', 'hash'], // Extract from the back.\n ['?', 'query'], // Extract from the back.\n function sanitize(address) { // Sanitize what is left of the address\n return address.replace('\\\\', '/');\n },\n ['/', 'pathname'], // Extract from the back.\n ['@', 'auth', 1], // Extract from the front.\n [NaN, 'host', undefined, 1, 1], // Set left over value.\n [/:(\\d+)$/, 'port', undefined, 1], // RegExp the back.\n [NaN, 'hostname', undefined, 1, 1] // Set left over.\n];\n\n/**\n * These properties should not be copied or inherited from. This is only needed\n * for all non blob URL's as a blob URL does not include a hash, only the\n * origin.\n *\n * @type {Object}\n * @private\n */\nvar ignore = { hash: 1, query: 1 };\n\n/**\n * The location object differs when your code is loaded through a normal page,\n * Worker or through a worker using a blob. And with the blobble begins the\n * trouble as the location object will contain the URL of the blob, not the\n * location of the page where our code is loaded in. The actual origin is\n * encoded in the `pathname` so we can thankfully generate a good \"default\"\n * location from it so we can generate proper relative URL's again.\n *\n * @param {Object|String} loc Optional default location object.\n * @returns {Object} lolcation object.\n * @public\n */\nfunction lolcation(loc) {\n var globalVar;\n\n if (typeof window !== 'undefined') globalVar = window;\n else if (typeof global !== 'undefined') globalVar = global;\n else if (typeof self !== 'undefined') globalVar = self;\n else globalVar = {};\n\n var location = globalVar.location || {};\n loc = loc || location;\n\n var finaldestination = {}\n , type = typeof loc\n , key;\n\n if ('blob:' === loc.protocol) {\n finaldestination = new Url(unescape(loc.pathname), {});\n } else if ('string' === type) {\n finaldestination = new Url(loc, {});\n for (key in ignore) delete finaldestination[key];\n } else if ('object' === type) {\n for (key in loc) {\n if (key in ignore) continue;\n finaldestination[key] = loc[key];\n }\n\n if (finaldestination.slashes === undefined) {\n finaldestination.slashes = slashes.test(loc.href);\n }\n }\n\n return finaldestination;\n}\n\n/**\n * @typedef ProtocolExtract\n * @type Object\n * @property {String} protocol Protocol matched in the URL, in lowercase.\n * @property {Boolean} slashes `true` if protocol is followed by \"//\", else `false`.\n * @property {String} rest Rest of the URL that is not part of the protocol.\n */\n\n/**\n * Extract protocol information from a URL with/without double slash (\"//\").\n *\n * @param {String} address URL we want to extract from.\n * @return {ProtocolExtract} Extracted information.\n * @private\n */\nfunction extractProtocol(address) {\n address = trimLeft(address);\n var match = protocolre.exec(address);\n\n return {\n protocol: match[1] ? match[1].toLowerCase() : '',\n slashes: !!match[2],\n rest: match[3]\n };\n}\n\n/**\n * Resolve a relative URL pathname against a base URL pathname.\n *\n * @param {String} relative Pathname of the relative URL.\n * @param {String} base Pathname of the base URL.\n * @return {String} Resolved pathname.\n * @private\n */\nfunction resolve(relative, base) {\n if (relative === '') return base;\n\n var path = (base || '/').split('/').slice(0, -1).concat(relative.split('/'))\n , i = path.length\n , last = path[i - 1]\n , unshift = false\n , up = 0;\n\n while (i--) {\n if (path[i] === '.') {\n path.splice(i, 1);\n } else if (path[i] === '..') {\n path.splice(i, 1);\n up++;\n } else if (up) {\n if (i === 0) unshift = true;\n path.splice(i, 1);\n up--;\n }\n }\n\n if (unshift) path.unshift('');\n if (last === '.' || last === '..') path.push('');\n\n return path.join('/');\n}\n\n/**\n * The actual URL instance. Instead of returning an object we've opted-in to\n * create an actual constructor as it's much more memory efficient and\n * faster and it pleases my OCD.\n *\n * It is worth noting that we should not use `URL` as class name to prevent\n * clashes with the global URL instance that got introduced in browsers.\n *\n * @constructor\n * @param {String} address URL we want to parse.\n * @param {Object|String} [location] Location defaults for relative paths.\n * @param {Boolean|Function} [parser] Parser for the query string.\n * @private\n */\nfunction Url(address, location, parser) {\n address = trimLeft(address);\n\n if (!(this instanceof Url)) {\n return new Url(address, location, parser);\n }\n\n var relative, extracted, parse, instruction, index, key\n , instructions = rules.slice()\n , type = typeof location\n , url = this\n , i = 0;\n\n //\n // The following if statements allows this module two have compatibility with\n // 2 different API:\n //\n // 1. Node.js's `url.parse` api which accepts a URL, boolean as arguments\n // where the boolean indicates that the query string should also be parsed.\n //\n // 2. The `URL` interface of the browser which accepts a URL, object as\n // arguments. The supplied object will be used as default values / fall-back\n // for relative paths.\n //\n if ('object' !== type && 'string' !== type) {\n parser = location;\n location = null;\n }\n\n if (parser && 'function' !== typeof parser) parser = qs.parse;\n\n location = lolcation(location);\n\n //\n // Extract protocol information before running the instructions.\n //\n extracted = extractProtocol(address || '');\n relative = !extracted.protocol && !extracted.slashes;\n url.slashes = extracted.slashes || relative && location.slashes;\n url.protocol = extracted.protocol || location.protocol || '';\n address = extracted.rest;\n\n //\n // When the authority component is absent the URL starts with a path\n // component.\n //\n if (!extracted.slashes) instructions[3] = [/(.*)/, 'pathname'];\n\n for (; i < instructions.length; i++) {\n instruction = instructions[i];\n\n if (typeof instruction === 'function') {\n address = instruction(address);\n continue;\n }\n\n parse = instruction[0];\n key = instruction[1];\n\n if (parse !== parse) {\n url[key] = address;\n } else if ('string' === typeof parse) {\n if (~(index = address.indexOf(parse))) {\n if ('number' === typeof instruction[2]) {\n url[key] = address.slice(0, index);\n address = address.slice(index + instruction[2]);\n } else {\n url[key] = address.slice(index);\n address = address.slice(0, index);\n }\n }\n } else if ((index = parse.exec(address))) {\n url[key] = index[1];\n address = address.slice(0, index.index);\n }\n\n url[key] = url[key] || (\n relative && instruction[3] ? location[key] || '' : ''\n );\n\n //\n // Hostname, host and protocol should be lowercased so they can be used to\n // create a proper `origin`.\n //\n if (instruction[4]) url[key] = url[key].toLowerCase();\n }\n\n //\n // Also parse the supplied query string in to an object. If we're supplied\n // with a custom parser as function use that instead of the default build-in\n // parser.\n //\n if (parser) url.query = parser(url.query);\n\n //\n // If the URL is relative, resolve the pathname against the base URL.\n //\n if (\n relative\n && location.slashes\n && url.pathname.charAt(0) !== '/'\n && (url.pathname !== '' || location.pathname !== '')\n ) {\n url.pathname = resolve(url.pathname, location.pathname);\n }\n\n //\n // We should not add port numbers if they are already the default port number\n // for a given protocol. As the host also contains the port number we're going\n // override it with the hostname which contains no port number.\n //\n if (!required(url.port, url.protocol)) {\n url.host = url.hostname;\n url.port = '';\n }\n\n //\n // Parse down the `auth` for the username and password.\n //\n url.username = url.password = '';\n if (url.auth) {\n instruction = url.auth.split(':');\n url.username = instruction[0] || '';\n url.password = instruction[1] || '';\n }\n\n url.origin = url.protocol && url.host && url.protocol !== 'file:'\n ? url.protocol +'//'+ url.host\n : 'null';\n\n //\n // The href is just the compiled result.\n //\n url.href = url.toString();\n}\n\n/**\n * This is convenience method for changing properties in the URL instance to\n * insure that they all propagate correctly.\n *\n * @param {String} part Property we need to adjust.\n * @param {Mixed} value The newly assigned value.\n * @param {Boolean|Function} fn When setting the query, it will be the function\n * used to parse the query.\n * When setting the protocol, double slash will be\n * removed from the final url if it is true.\n * @returns {URL} URL instance for chaining.\n * @public\n */\nfunction set(part, value, fn) {\n var url = this;\n\n switch (part) {\n case 'query':\n if ('string' === typeof value && value.length) {\n value = (fn || qs.parse)(value);\n }\n\n url[part] = value;\n break;\n\n case 'port':\n url[part] = value;\n\n if (!required(value, url.protocol)) {\n url.host = url.hostname;\n url[part] = '';\n } else if (value) {\n url.host = url.hostname +':'+ value;\n }\n\n break;\n\n case 'hostname':\n url[part] = value;\n\n if (url.port) value += ':'+ url.port;\n url.host = value;\n break;\n\n case 'host':\n url[part] = value;\n\n if (/:\\d+$/.test(value)) {\n value = value.split(':');\n url.port = value.pop();\n url.hostname = value.join(':');\n } else {\n url.hostname = value;\n url.port = '';\n }\n\n break;\n\n case 'protocol':\n url.protocol = value.toLowerCase();\n url.slashes = !fn;\n break;\n\n case 'pathname':\n case 'hash':\n if (value) {\n var char = part === 'pathname' ? '/' : '#';\n url[part] = value.charAt(0) !== char ? char + value : value;\n } else {\n url[part] = value;\n }\n break;\n\n default:\n url[part] = value;\n }\n\n for (var i = 0; i < rules.length; i++) {\n var ins = rules[i];\n\n if (ins[4]) url[ins[1]] = url[ins[1]].toLowerCase();\n }\n\n url.origin = url.protocol && url.host && url.protocol !== 'file:'\n ? url.protocol +'//'+ url.host\n : 'null';\n\n url.href = url.toString();\n\n return url;\n}\n\n/**\n * Transform the properties back in to a valid and full URL string.\n *\n * @param {Function} stringify Optional query stringify function.\n * @returns {String} Compiled version of the URL.\n * @public\n */\nfunction toString(stringify) {\n if (!stringify || 'function' !== typeof stringify) stringify = qs.stringify;\n\n var query\n , url = this\n , protocol = url.protocol;\n\n if (protocol && protocol.charAt(protocol.length - 1) !== ':') protocol += ':';\n\n var result = protocol + (url.slashes ? '//' : '');\n\n if (url.username) {\n result += url.username;\n if (url.password) result += ':'+ url.password;\n result += '@';\n }\n\n result += url.host + url.pathname;\n\n query = 'object' === typeof url.query ? stringify(url.query) : url.query;\n if (query) result += '?' !== query.charAt(0) ? '?'+ query : query;\n\n if (url.hash) result += url.hash;\n\n return result;\n}\n\nUrl.prototype = { set: set, toString: toString };\n\n//\n// Expose the URL parser and some additional properties that might be useful for\n// others or testing.\n//\nUrl.extractProtocol = extractProtocol;\nUrl.location = lolcation;\nUrl.trimLeft = trimLeft;\nUrl.qs = qs;\n\nmodule.exports = Url;\n","//\r\n// BlockV AG. Copyright (c) 2018, all rights reserved.\r\n//\r\n// Licensed under the BlockV SDK License (the \"License\"); you may not use this file or\r\n// the BlockV SDK except in compliance with the License accompanying it. Unless\r\n// required by applicable law or agreed to in writing, the BlockV SDK distributed under\r\n// the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF\r\n// ANY KIND, either express or implied. See the License for the specific language\r\n// governing permissions and limitations under the License.\r\n//\r\n/* eslint-disable no-use-before-define */\r\n\r\nexport default {\r\n\r\n // This display mode is used in the inventory view.\r\n Icon: vatom =>\r\n vatom.faces.find(v => v.properties.constraints.view_mode === 'icon' && v.properties.constraints.platform === 'web') ||\r\n vatom.faces.find(v => v.properties.constraints.view_mode === 'icon' && v.properties.constraints.platform === 'generic'),\r\n\r\n // This display mode is used when a user opens the vatom. It falls back to icon if no engaged face is found.\r\n Engaged: vatom =>\r\n vatom.faces.find(v => v.properties.constraints.view_mode === 'engaged' && v.properties.constraints.platform === 'web') ||\r\n vatom.faces.find(v => v.properties.constraints.view_mode === 'engaged' && v.properties.constraints.platform === 'generic') ||\r\n vatom.faces.find(v => v.properties.constraints.view_mode === 'icon' && v.properties.constraints.platform === 'web') ||\r\n vatom.faces.find(v => v.properties.constraints.view_mode === 'icon' && v.properties.constraints.platform === 'generic'),\r\n\r\n // This display mode is used when a vatom enters fullscreen mode\r\n Fullscreen: vatom =>\r\n vatom.faces.find(v => v.properties.constraints.view_mode === 'fullscreen' && v.properties.constraints.platform === 'web') ||\r\n vatom.faces.find(v => v.properties.constraints.view_mode === 'fullscreen' && v.properties.constraints.platform === 'generic'),\r\n\r\n // This display mode is used in the info card\r\n Card: vatom =>\r\n vatom.faces.find(v => v.properties.constraints.view_mode === 'card' && v.properties.constraints.platform === 'web') ||\r\n vatom.faces.find(v => v.properties.constraints.view_mode === 'card' && v.properties.constraints.platform === 'generic')\r\n\r\n}\r\n","/*!\r\n LZ-UTF8 v0.5.5\r\n\r\n Copyright (c) 2018, Rotem Dan\r\n Released under the MIT license.\r\n\r\n Build date: 2018-07-30 \r\n\r\n Please report any issue at https://github.com/rotemdan/lzutf8.js/issues\r\n*/\r\nvar LZUTF8;\n(function (LZUTF8) {\n LZUTF8.runningInNodeJS = function () {\n return ((typeof process === \"object\") && (typeof process.versions === \"object\") && (typeof process.versions.node === \"string\"));\n };\n LZUTF8.runningInMainNodeJSModule = function () {\n return LZUTF8.runningInNodeJS() && require.main === module;\n };\n LZUTF8.commonJSAvailable = function () {\n return typeof module === \"object\" && typeof module.exports === \"object\";\n };\n LZUTF8.runningInWebWorker = function () {\n return typeof window === \"undefined\" && typeof self === \"object\" && typeof self.addEventListener === \"function\" && typeof self.close === \"function\";\n };\n LZUTF8.runningInNodeChildProcess = function () {\n return LZUTF8.runningInNodeJS() && typeof process.send === \"function\";\n };\n LZUTF8.runningInNullOrigin = function () {\n if (typeof window !== \"object\" || typeof window.location !== \"object\")\n return false;\n return document.location.protocol !== 'http:' && document.location.protocol !== 'https:';\n };\n LZUTF8.webWorkersAvailable = function () {\n if (typeof Worker !== \"function\" || LZUTF8.runningInNullOrigin())\n return false;\n if (LZUTF8.runningInNodeJS())\n return false;\n if (navigator && navigator.userAgent && navigator.userAgent.indexOf(\"Android 4.3\") >= 0)\n return false;\n return true;\n };\n LZUTF8.log = function (message, appendToDocument) {\n if (appendToDocument === void 0) { appendToDocument = false; }\n if (typeof console !== \"object\")\n return;\n console.log(message);\n if (appendToDocument && typeof document == \"object\")\n document.body.innerHTML += message + \"<br/>\";\n };\n LZUTF8.createErrorMessage = function (exception, title) {\n if (title === void 0) { title = \"Unhandled exception\"; }\n if (exception == null)\n return title;\n title += \": \";\n if (typeof exception.content === \"object\") {\n if (LZUTF8.runningInNodeJS()) {\n return title + exception.content.stack;\n }\n else {\n var exceptionJSON = JSON.stringify(exception.content);\n if (exceptionJSON !== \"{}\")\n return title + exceptionJSON;\n else\n return title + exception.content;\n }\n }\n else if (typeof exception.content === \"string\") {\n return title + exception.content;\n }\n else {\n return title + exception;\n }\n };\n LZUTF8.printExceptionAndStackTraceToConsole = function (exception, title) {\n if (title === void 0) { title = \"Unhandled exception\"; }\n LZUTF8.log(LZUTF8.createErrorMessage(exception, title));\n };\n LZUTF8.getGlobalObject = function () {\n if (typeof global === \"object\")\n return global;\n else if (typeof window === \"object\")\n return window;\n else if (typeof self === \"object\")\n return self;\n else\n return {};\n };\n LZUTF8.toString = Object.prototype.toString;\n if (LZUTF8.commonJSAvailable())\n module.exports = LZUTF8;\n})(LZUTF8 || (LZUTF8 = {}));\nif (typeof Uint8Array === \"function\" && new Uint8Array(1).subarray(1).byteLength !== 0) {\n var subarray = function (start, end) {\n var clamp = function (v, min, max) { return v < min ? min : v > max ? max : v; };\n start = start | 0;\n end = end | 0;\n if (arguments.length < 1)\n start = 0;\n if (arguments.length < 2)\n end = this.length;\n if (start < 0)\n start = this.length + start;\n if (end < 0)\n end = this.length + end;\n start = clamp(start, 0, this.length);\n end = clamp(end, 0, this.length);\n var len = end - start;\n if (len < 0)\n len = 0;\n return new this.constructor(this.buffer, this.byteOffset + start * this.BYTES_PER_ELEMENT, len);\n };\n var types = ['Int8Array', 'Uint8Array', 'Uint8ClampedArray', 'Int16Array', 'Uint16Array', 'Int32Array', 'Uint32Array', 'Float32Array', 'Float64Array'];\n var globalObject = void 0;\n if (typeof window === \"object\")\n globalObject = window;\n else if (typeof self === \"object\")\n globalObject = self;\n if (globalObject !== undefined) {\n for (var i = 0; i < types.length; i++) {\n if (globalObject[types[i]])\n globalObject[types[i]].prototype.subarray = subarray;\n }\n }\n}\nvar LZUTF8;\n(function (LZUTF8) {\n var AsyncCompressor = (function () {\n function AsyncCompressor() {\n }\n AsyncCompressor.compressAsync = function (input, options, callback) {\n var timer = new LZUTF8.Timer();\n var compressor = new LZUTF8.Compressor();\n if (!callback)\n throw new TypeError(\"compressAsync: No callback argument given\");\n if (typeof input === \"string\") {\n input = LZUTF8.encodeUTF8(input);\n }\n else if (input == null || !(input instanceof Uint8Array)) {\n callback(undefined, new TypeError(\"compressAsync: Invalid input argument, only 'string' and 'Uint8Array' are supported\"));\n return;\n }\n var sourceBlocks = LZUTF8.ArrayTools.splitByteArray(input, options.blockSize);\n var compressedBlocks = [];\n var compressBlocksStartingAt = function (index) {\n if (index < sourceBlocks.length) {\n var compressedBlock = void 0;\n try {\n compressedBlock = compressor.compressBlock(sourceBlocks[index]);\n }\n catch (e) {\n callback(undefined, e);\n return;\n }\n compressedBlocks.push(compressedBlock);\n if (timer.getElapsedTime() <= 20) {\n compressBlocksStartingAt(index + 1);\n }\n else {\n LZUTF8.enqueueImmediate(function () { return compressBlocksStartingAt(index + 1); });\n timer.restart();\n }\n }\n else {\n var joinedCompressedBlocks_1 = LZUTF8.ArrayTools.concatUint8Arrays(compressedBlocks);\n LZUTF8.enqueueImmediate(function () {\n var result;\n try {\n result = LZUTF8.CompressionCommon.encodeCompressedBytes(joinedCompressedBlocks_1, options.outputEncoding);\n }\n catch (e) {\n callback(undefined, e);\n return;\n }\n LZUTF8.enqueueImmediate(function () { return callback(result); });\n });\n }\n };\n LZUTF8.enqueueImmediate(function () { return compressBlocksStartingAt(0); });\n };\n AsyncCompressor.createCompressionStream = function () {\n var compressor = new LZUTF8.Compressor();\n var NodeStream = require(\"stream\");\n var compressionStream = new NodeStream.Transform({ decodeStrings: true, highWaterMark: 65536 });\n compressionStream._transform = function (data, encoding, done) {\n var buffer;\n try {\n buffer = LZUTF8.BufferTools.uint8ArrayToBuffer(compressor.compressBlock(LZUTF8.BufferTools.bufferToUint8Array(data)));\n }\n catch (e) {\n compressionStream.emit(\"error\", e);\n return;\n }\n compressionStream.push(buffer);\n done();\n };\n return compressionStream;\n };\n return AsyncCompressor;\n }());\n LZUTF8.AsyncCompressor = AsyncCompressor;\n})(LZUTF8 || (LZUTF8 = {}));\nvar LZUTF8;\n(function (LZUTF8) {\n var AsyncDecompressor = (function () {\n function AsyncDecompressor() {\n }\n AsyncDecompressor.decompressAsync = function (input, options, callback) {\n if (!callback)\n throw new TypeError(\"decompressAsync: No callback argument given\");\n var timer = new LZUTF8.Timer();\n try {\n input = LZUTF8.CompressionCommon.decodeCompressedBytes(input, options.inputEncoding);\n }\n catch (e) {\n callback(undefined, e);\n return;\n }\n var decompressor = new LZUTF8.Decompressor();\n var sourceBlocks = LZUTF8.ArrayTools.splitByteArray(input, options.blockSize);\n var decompressedBlocks = [];\n var decompressBlocksStartingAt = function (index) {\n if (index < sourceBlocks.length) {\n var decompressedBlock = void 0;\n try {\n decompressedBlock = decompressor.decompressBlock(sourceBlocks[index]);\n }\n catch (e) {\n callback(undefined, e);\n return;\n }\n decompressedBlocks.push(decompressedBlock);\n if (timer.getElapsedTime() <= 20) {\n decompressBlocksStartingAt(index + 1);\n }\n else {\n LZUTF8.enqueueImmediate(function () { return decompressBlocksStartingAt(index + 1); });\n timer.restart();\n }\n }\n else {\n var joinedDecompressedBlocks_1 = LZUTF8.ArrayTools.concatUint8Arrays(decompressedBlocks);\n LZUTF8.enqueueImmediate(function () {\n var result;\n try {\n result = LZUTF8.CompressionCommon.encodeDecompressedBytes(joinedDecompressedBlocks_1, options.outputEncoding);\n }\n catch (e) {\n callback(undefined, e);\n return;\n }\n LZUTF8.enqueueImmediate(function () { return callback(result); });\n });\n }\n };\n LZUTF8.enqueueImmediate(function () { return decompressBlocksStartingAt(0); });\n };\n AsyncDecompressor.createDecompressionStream = function () {\n var decompressor = new LZUTF8.Decompressor();\n var NodeStream = require(\"stream\");\n var decompressionStream = new NodeStream.Transform({ decodeStrings: true, highWaterMark: 65536 });\n decompressionStream._transform = function (data, encoding, done) {\n var buffer;\n try {\n buffer = LZUTF8.BufferTools.uint8ArrayToBuffer(decompressor.decompressBlock(LZUTF8.BufferTools.bufferToUint8Array(data)));\n }\n catch (e) {\n decompressionStream.emit(\"error\", e);\n return;\n }\n decompressionStream.push(buffer);\n done();\n };\n return decompressionStream;\n };\n return AsyncDecompressor;\n }());\n LZUTF8.AsyncDecompressor = AsyncDecompressor;\n})(LZUTF8 || (LZUTF8 = {}));\nvar LZUTF8;\n(function (LZUTF8) {\n var WebWorker;\n (function (WebWorker) {\n WebWorker.compressAsync = function (input, options, callback) {\n if (options.inputEncoding == \"ByteArray\") {\n if (!(input instanceof Uint8Array)) {\n callback(undefined, new TypeError(\"compressAsync: input is not a Uint8Array\"));\n return;\n }\n }\n var request = {\n token: Math.random().toString(),\n type: \"compress\",\n data: input,\n inputEncoding: options.inputEncoding,\n outputEncoding: options.outputEncoding\n };\n var responseListener = function (e) {\n var response = e.data;\n if (!response || response.token != request.token)\n return;\n WebWorker.globalWorker.removeEventListener(\"message\", responseListener);\n if (response.type == \"error\")\n callback(undefined, new Error(response.error));\n else\n callback(response.data);\n };\n WebWorker.globalWorker.addEventListener(\"message\", responseListener);\n WebWorker.globalWorker.postMessage(request, []);\n };\n WebWorker.decompressAsync = function (input, options, callback) {\n var request = {\n token: Math.random().toString(),\n type: \"decompress\",\n data: input,\n inputEncoding: options.inputEncoding,\n outputEncoding: options.outputEncoding\n };\n var responseListener = function (e) {\n var response = e.data;\n if (!response || response.token != request.token)\n return;\n WebWorker.globalWorker.removeEventListener(\"message\", responseListener);\n if (response.type == \"error\")\n callback(undefined, new Error(response.error));\n else\n callback(response.data);\n };\n WebWorker.globalWorker.addEventListener(\"message\", responseListener);\n WebWorker.globalWorker.postMessage(request, []);\n };\n WebWorker.installWebWorkerIfNeeded = function () {\n if (typeof self == \"object\" && self.document === undefined && self.addEventListener != undefined) {\n self.addEventListener(\"message\", function (e) {\n var request = e.data;\n if (request.type == \"compress\") {\n var compressedData = void 0;\n try {\n compressedData = LZUTF8.compress(request.data, { outputEncoding: request.outputEncoding });\n }\n catch (e) {\n self.postMessage({ token: request.token, type: \"error\", error: LZUTF8.createErrorMessage(e) }, []);\n return;\n }\n var response = {\n token: request.token,\n type: \"compressionResult\",\n data: compressedData,\n encoding: request.outputEncoding,\n };\n if (response.data instanceof Uint8Array && navigator.appVersion.indexOf(\"MSIE 10\") === -1)\n self.postMessage(response, [response.data.buffer]);\n else\n self.postMessage(response, []);\n }\n else if (request.type == \"decompress\") {\n var decompressedData = void 0;\n try {\n decompressedData = LZUTF8.decompress(request.data, { inputEncoding: request.inputEncoding, outputEncoding: request.outputEncoding });\n }\n catch (e) {\n self.postMessage({ token: request.token, type: \"error\", error: LZUTF8.createErrorMessage(e) }, []);\n return;\n }\n var response = {\n token: request.token,\n type: \"decompressionResult\",\n data: decompressedData,\n encoding: request.outputEncoding,\n };\n if (response.data instanceof Uint8Array && navigator.appVersion.indexOf(\"MSIE 10\") === -1)\n self.postMessage(response, [response.data.buffer]);\n else\n self.postMessage(response, []);\n }\n });\n self.addEventListener(\"error\", function (e) {\n LZUTF8.log(LZUTF8.createErrorMessage(e.error, \"Unexpected LZUTF8 WebWorker exception\"));\n });\n }\n };\n WebWorker.createGlobalWorkerIfNeeded = function () {\n if (WebWorker.globalWorker)\n return true;\n if (!LZUTF8.webWorkersAvailable())\n return false;\n if (!WebWorker.scriptURI && typeof document === \"object\") {\n var scriptElement = document.getElementById(\"lzutf8\");\n if (scriptElement != null)\n WebWorker.scriptURI = scriptElement.getAttribute(\"src\") || undefined;\n }\n if (WebWorker.scriptURI) {\n WebWorker.globalWorker = new Worker(WebWorker.scriptURI);\n return true;\n }\n else {\n return false;\n }\n };\n WebWorker.terminate = function () {\n if (WebWorker.globalWorker) {\n WebWorker.globalWorker.terminate();\n WebWorker.globalWorker = undefined;\n }\n };\n })(WebWorker = LZUTF8.WebWorker || (LZUTF8.WebWorker = {}));\n WebWorker.installWebWorkerIfNeeded();\n})(LZUTF8 || (LZUTF8 = {}));\nvar LZUTF8;\n(function (LZUTF8) {\n var ArraySegment = (function () {\n function ArraySegment(container, startPosition, length) {\n this.container = container;\n this.startPosition = startPosition;\n this.length = length;\n }\n ArraySegment.prototype.get = function (index) {\n return this.container[this.startPosition + index];\n };\n ArraySegment.prototype.getInReversedOrder = function (reverseIndex) {\n return this.container[this.startPosition + this.length - 1 - reverseIndex];\n };\n ArraySegment.prototype.set = function (index, value) {\n this.container[this.startPosition + index] = value;\n };\n return ArraySegment;\n }());\n LZUTF8.ArraySegment = ArraySegment;\n})(LZUTF8 || (LZUTF8 = {}));\nvar LZUTF8;\n(function (LZUTF8) {\n var ArrayTools;\n (function (ArrayTools) {\n ArrayTools.copyElements = function (source, sourceIndex, destination, destinationIndex, count) {\n while (count--)\n destination[destinationIndex++] = source[sourceIndex++];\n };\n ArrayTools.zeroElements = function (collection, index, count) {\n while (count--)\n collection[index++] = 0;\n };\n ArrayTools.countNonzeroValuesInArray = function (array) {\n var result = 0;\n for (var i = 0; i < array.length; i++)\n if (array[i])\n result++;\n return result;\n };\n ArrayTools.truncateStartingElements = function (array, truncatedLength) {\n if (array.length <= truncatedLength)\n throw new RangeError(\"truncateStartingElements: Requested length should be smaller than array length\");\n var sourcePosition = array.length - truncatedLength;\n for (var i = 0; i < truncatedLength; i++)\n array[i] = array[sourcePosition + i];\n array.length = truncatedLength;\n };\n ArrayTools.doubleByteArrayCapacity = function (array) {\n var newArray = new Uint8Array(array.length * 2);\n newArray.set(array);\n return newArray;\n };\n ArrayTools.concatUint8Arrays = function (arrays) {\n var totalLength = 0;\n for (var _i = 0, arrays_1 = arrays; _i < arrays_1.length; _i++) {\n var array = arrays_1[_i];\n totalLength += array.length;\n }\n var result = new Uint8Array(totalLength);\n var offset = 0;\n for (var _a = 0, arrays_2 = arrays; _a < arrays_2.length; _a++) {\n var array = arrays_2[_a];\n result.set(array, offset);\n offset += array.length;\n }\n return result;\n };\n ArrayTools.splitByteArray = function (byteArray, maxPartLength) {\n var result = [];\n for (var offset = 0; offset < byteArray.length;) {\n var blockLength = Math.min(maxPartLength, byteArray.length - offset);\n result.push(byteArray.subarray(offset, offset + blockLength));\n offset += blockLength;\n }\n return result;\n };\n })(ArrayTools = LZUTF8.ArrayTools || (LZUTF8.ArrayTools = {}));\n})(LZUTF8 || (LZUTF8 = {}));\nvar LZUTF8;\n(function (LZUTF8) {\n var BufferTools;\n (function (BufferTools) {\n BufferTools.convertToUint8ArrayIfNeeded = function (input) {\n if (typeof Buffer === \"function\" && Buffer.isBuffer(input))\n return BufferTools.bufferToUint8Array(input);\n else\n return input;\n };\n BufferTools.uint8ArrayToBuffer = function (arr) {\n if (Buffer.prototype instanceof Uint8Array) {\n var arrClone = new Uint8Array(arr.buffer, arr.byteOffset, arr.byteLength);\n Object[\"setPrototypeOf\"](arrClone, Buffer.prototype);\n return arrClone;\n }\n else {\n var len = arr.length;\n var buf = new Buffer(len);\n for (var i = 0; i < len; i++)\n buf[i] = arr[i];\n return buf;\n }\n };\n BufferTools.bufferToUint8Array = function (buf) {\n if (Buffer.prototype instanceof Uint8Array) {\n return new Uint8Array(buf[\"buffer\"], buf[\"byteOffset\"], buf[\"byteLength\"]);\n }\n else {\n var len = buf.length;\n var arr = new Uint8Array(len);\n for (var i = 0; i < len; i++)\n arr[i] = buf[i];\n return arr;\n }\n };\n })(BufferTools = LZUTF8.BufferTools || (LZUTF8.BufferTools = {}));\n})(LZUTF8 || (LZUTF8 = {}));\nvar LZUTF8;\n(function (LZUTF8) {\n var CompressionCommon;\n (function (CompressionCommon) {\n CompressionCommon.getCroppedBuffer = function (buffer, cropStartOffset, cropLength, additionalCapacity) {\n if (additionalCapacity === void 0) { additionalCapacity = 0; }\n var croppedBuffer = new Uint8Array(cropLength + additionalCapacity);\n croppedBuffer.set(buffer.subarray(cropStartOffset, cropStartOffset + cropLength));\n return croppedBuffer;\n };\n CompressionCommon.getCroppedAndAppendedByteArray = function (bytes, cropStartOffset, cropLength, byteArrayToAppend) {\n return LZUTF8.ArrayTools.concatUint8Arrays([bytes.subarray(cropStartOffset, cropStartOffset + cropLength), byteArrayToAppend]);\n };\n CompressionCommon.detectCompressionSourceEncoding = function (input) {\n if (input == null)\n throw new TypeError(\"detectCompressionSourceEncoding: input is null or undefined\");\n if (typeof input === \"string\")\n return \"String\";\n else if (input instanceof Uint8Array || (typeof Buffer === \"function\" && Buffer.isBuffer(input)))\n return \"ByteArray\";\n else\n throw new TypeError(\"detectCompressionSourceEncoding: input must be of type 'string', 'Uint8Array' or 'Buffer'\");\n };\n CompressionCommon.encodeCompressedBytes = function (compressedBytes, outputEncoding) {\n switch (outputEncoding) {\n case \"ByteArray\":\n return compressedBytes;\n case \"Buffer\":\n return LZUTF8.BufferTools.uint8ArrayToBuffer(compressedBytes);\n case \"Base64\":\n return LZUTF8.encodeBase64(compressedBytes);\n case \"BinaryString\":\n return LZUTF8.encodeBinaryString(compressedBytes);\n case \"StorageBinaryString\":\n return LZUTF8.encodeStorageBinaryString(compressedBytes);\n default:\n throw new TypeError(\"encodeCompressedBytes: invalid output encoding requested\");\n }\n };\n CompressionCommon.decodeCompressedBytes = function (compressedData, inputEncoding) {\n if (inputEncoding == null)\n throw new TypeError(\"decodeCompressedData: Input is null or undefined\");\n switch (inputEncoding) {\n case \"ByteArray\":\n case \"Buffer\":\n var normalizedBytes = LZUTF8.BufferTools.convertToUint8ArrayIfNeeded(compressedData);\n if (!(normalizedBytes instanceof Uint8Array))\n throw new TypeError(\"decodeCompressedData: 'ByteArray' or 'Buffer' input type was specified but input is not a Uint8Array or Buffer\");\n return normalizedBytes;\n case \"Base64\":\n if (typeof compressedData !== \"string\")\n throw new TypeError(\"decodeCompressedData: 'Base64' input type was specified but input is not a string\");\n return LZUTF8.decodeBase64(compressedData);\n case \"BinaryString\":\n if (typeof compressedData !== \"string\")\n throw new TypeError(\"decodeCompressedData: 'BinaryString' input type was specified but input is not a string\");\n return LZUTF8.decodeBinaryString(compressedData);\n case \"StorageBinaryString\":\n if (typeof compressedData !== \"string\")\n throw new TypeError(\"decodeCompressedData: 'StorageBinaryString' input type was specified but input is not a string\");\n return LZUTF8.decodeStorageBinaryString(compressedData);\n default:\n throw new TypeError(\"decodeCompressedData: invalid input encoding requested: '\" + inputEncoding + \"'\");\n }\n };\n CompressionCommon.encodeDecompressedBytes = function (decompressedBytes, outputEncoding) {\n switch (outputEncoding) {\n case \"String\":\n return LZUTF8.decodeUTF8(decompressedBytes);\n case \"ByteArray\":\n return decompressedBytes;\n case \"Buffer\":\n if (typeof Buffer !== \"function\")\n throw new TypeError(\"encodeDecompressedBytes: a 'Buffer' type was specified but is not supported at the current envirnment\");\n return LZUTF8.BufferTools.uint8ArrayToBuffer(decompressedBytes);\n default:\n throw new TypeError(\"encodeDecompressedBytes: invalid output encoding requested\");\n }\n };\n })(CompressionCommon = LZUTF8.CompressionCommon || (LZUTF8.CompressionCommon = {}));\n})(LZUTF8 || (LZUTF8 = {}));\nvar LZUTF8;\n(function (LZUTF8) {\n var EventLoop;\n (function (EventLoop) {\n var queuedFunctions = [];\n var asyncFlushFunc;\n EventLoop.enqueueImmediate = function (func) {\n queuedFunctions.push(func);\n if (queuedFunctions.length === 1)\n asyncFlushFunc();\n };\n EventLoop.initializeScheduler = function () {\n var flush = function () {\n for (var _i = 0, queuedFunctions_1 = queuedFunctions; _i < queuedFunctions_1.length; _i++) {\n var func = queuedFunctions_1[_i];\n try {\n func.call(undefined);\n }\n catch (exception) {\n LZUTF8.printExceptionAndStackTraceToConsole(exception, \"enqueueImmediate exception\");\n }\n }\n queuedFunctions.length = 0;\n };\n if (LZUTF8.runningInNodeJS()) {\n asyncFlushFunc = function () { return setImmediate(function () { return flush(); }); };\n }\n if (typeof window === \"object\" && typeof window.addEventListener === \"function\" && typeof window.postMessage === \"function\") {\n var token_1 = \"enqueueImmediate-\" + Math.random().toString();\n window.addEventListener(\"message\", function (event) {\n if (event.data === token_1)\n flush();\n });\n var targetOrigin_1;\n if (LZUTF8.runningInNullOrigin())\n targetOrigin_1 = '*';\n else\n targetOrigin_1 = window.location.href;\n asyncFlushFunc = function () { return window.postMessage(token_1, targetOrigin_1); };\n }\n else if (typeof MessageChannel === \"function\" && typeof MessagePort === \"function\") {\n var channel_1 = new MessageChannel();\n channel_1.port1.onmessage = function () { return flush(); };\n asyncFlushFunc = function () { return channel_1.port2.postMessage(0); };\n }\n else {\n asyncFlushFunc = function () { return setTimeout(function () { return flush(); }, 0); };\n }\n };\n EventLoop.initializeScheduler();\n })(EventLoop = LZUTF8.EventLoop || (LZUTF8.EventLoop = {}));\n LZUTF8.enqueueImmediate = function (func) { return EventLoop.enqueueImmediate(func); };\n})(LZUTF8 || (LZUTF8 = {}));\nvar LZUTF8;\n(function (LZUTF8) {\n var ObjectTools;\n (function (ObjectTools) {\n ObjectTools.override = function (obj, newPropertyValues) {\n return ObjectTools.extend(obj, newPropertyValues);\n };\n ObjectTools.extend = function (obj, newProperties) {\n if (obj == null)\n throw new TypeError(\"obj is null or undefined\");\n if (typeof obj !== \"object\")\n throw new TypeError(\"obj is not an object\");\n if (newProperties == null)\n newProperties = {};\n if (typeof newProperties !== \"object\")\n throw new TypeError(\"newProperties is not an object\");\n if (newProperties != null) {\n for (var property in newProperties)\n obj[property] = newProperties[property];\n }\n return obj;\n };\n })(ObjectTools = LZUTF8.ObjectTools || (LZUTF8.ObjectTools = {}));\n})(LZUTF8 || (LZUTF8 = {}));\nvar LZUTF8;\n(function (LZUTF8) {\n LZUTF8.getRandomIntegerInRange = function (low, high) {\n return low + Math.floor(Math.random() * (high - low));\n };\n LZUTF8.getRandomUTF16StringOfLength = function (length) {\n var randomString = \"\";\n for (var i = 0; i < length; i++) {\n var randomCodePoint = void 0;\n do {\n randomCodePoint = LZUTF8.getRandomIntegerInRange(0, 0x10FFFF + 1);\n } while (randomCodePoint >= 0xD800 && randomCodePoint <= 0xDFFF);\n randomString += LZUTF8.Encoding.CodePoint.decodeToString(randomCodePoint);\n }\n return randomString;\n };\n})(LZUTF8 || (LZUTF8 = {}));\nvar LZUTF8;\n(function (LZUTF8) {\n var StringBuilder = (function () {\n function StringBuilder(outputBufferCapacity) {\n if (outputBufferCapacity === void 0) { outputBufferCapacity = 1024; }\n this.outputBufferCapacity = outputBufferCapacity;\n this.outputPosition = 0;\n this.outputString = \"\";\n this.outputBuffer = new Uint16Array(this.outputBufferCapacity);\n }\n StringBuilder.prototype.appendCharCode = function (charCode) {\n this.outputBuffer[this.outputPosition++] = charCode;\n if (this.outputPosition === this.outputBufferCapacity)\n this.flushBufferToOutputString();\n };\n StringBuilder.prototype.appendCharCodes = function (charCodes) {\n for (var i = 0, length_1 = charCodes.length; i < length_1; i++)\n this.appendCharCode(charCodes[i]);\n };\n StringBuilder.prototype.appendString = function (str) {\n for (var i = 0, length_2 = str.length; i < length_2; i++)\n this.appendCharCode(str.charCodeAt(i));\n };\n StringBuilder.prototype.appendCodePoint = function (codePoint) {\n if (codePoint <= 0xFFFF) {\n this.appendCharCode(codePoint);\n }\n else if (codePoint <= 0x10FFFF) {\n this.appendCharCode(0xD800 + ((codePoint - 0x10000) >>> 10));\n this.appendCharCode(0xDC00 + ((codePoint - 0x10000) & 1023));\n }\n else\n throw new Error(\"appendCodePoint: A code point of \" + codePoint + \" cannot be encoded in UTF-16\");\n };\n StringBuilder.prototype.getOutputString = function () {\n this.flushBufferToOutputString();\n return this.outputString;\n };\n StringBuilder.prototype.flushBufferToOutputString = function () {\n if (this.outputPosition === this.outputBufferCapacity)\n this.outputString += String.fromCharCode.apply(null, this.outputBuffer);\n else\n this.outputString += String.fromCharCode.apply(null, this.outputBuffer.subarray(0, this.outputPosition));\n this.outputPosition = 0;\n };\n return StringBuilder;\n }());\n LZUTF8.StringBuilder = StringBuilder;\n})(LZUTF8 || (LZUTF8 = {}));\nvar LZUTF8;\n(function (LZUTF8) {\n var Timer = (function () {\n function Timer() {\n this.restart();\n }\n Timer.prototype.restart = function () {\n this.startTime = Timer.getTimestamp();\n };\n Timer.prototype.getElapsedTime = function () {\n return Timer.getTimestamp() - this.startTime;\n };\n Timer.prototype.getElapsedTimeAndRestart = function () {\n var elapsedTime = this.getElapsedTime();\n this.restart();\n return elapsedTime;\n };\n Timer.prototype.logAndRestart = function (title, logToDocument) {\n if (logToDocument === void 0) { logToDocument = true; }\n var elapsedTime = this.getElapsedTime();\n var message = title + \": \" + elapsedTime.toFixed(3) + \"ms\";\n LZUTF8.log(message, logToDocument);\n this.restart();\n return elapsedTime;\n };\n Timer.getTimestamp = function () {\n if (!this.timestampFunc)\n this.createGlobalTimestampFunction();\n return this.timestampFunc();\n };\n Timer.getMicrosecondTimestamp = function () {\n return Math.floor(Timer.getTimestamp() * 1000);\n };\n Timer.createGlobalTimestampFunction = function () {\n if (typeof process === \"object\" && typeof process.hrtime === \"function\") {\n var baseTimestamp_1 = 0;\n this.timestampFunc = function () {\n var nodeTimeStamp = process.hrtime();\n var millisecondTime = (nodeTimeStamp[0] * 1000) + (nodeTimeStamp[1] / 1000000);\n return baseTimestamp_1 + millisecondTime;\n };\n baseTimestamp_1 = Date.now() - this.timestampFunc();\n }\n else if (typeof chrome === \"object\" && chrome.Interval) {\n var baseTimestamp_2 = Date.now();\n var chromeIntervalObject_1 = new chrome.Interval();\n chromeIntervalObject_1.start();\n this.timestampFunc = function () { return baseTimestamp_2 + chromeIntervalObject_1.microseconds() / 1000; };\n }\n else if (typeof performance === \"object\" && performance.now) {\n var baseTimestamp_3 = Date.now() - performance.now();\n this.timestampFunc = function () { return baseTimestamp_3 + performance.now(); };\n }\n else if (Date.now) {\n this.timestampFunc = function () { return Date.now(); };\n }\n else {\n this.timestampFunc = function () { return (new Date()).getTime(); };\n }\n };\n return Timer;\n }());\n LZUTF8.Timer = Timer;\n})(LZUTF8 || (LZUTF8 = {}));\nvar LZUTF8;\n(function (LZUTF8) {\n var Compressor = (function () {\n function Compressor(useCustomHashTable) {\n if (useCustomHashTable === void 0) { useCustomHashTable = true; }\n this.MinimumSequenceLength = 4;\n this.MaximumSequenceLength = 31;\n this.MaximumMatchDistance = 32767;\n this.PrefixHashTableSize = 65537;\n this.inputBufferStreamOffset = 1;\n if (useCustomHashTable && typeof Uint32Array == \"function\")\n this.prefixHashTable = new LZUTF8.CompressorCustomHashTable(this.PrefixHashTableSize);\n else\n this.prefixHashTable = new LZUTF8.CompressorSimpleHashTable(this.PrefixHashTableSize);\n }\n Compressor.prototype.compressBlock = function (input) {\n if (input === undefined || input === null)\n throw new TypeError(\"compressBlock: undefined or null input received\");\n if (typeof input == \"string\")\n input = LZUTF8.encodeUTF8(input);\n input = LZUTF8.BufferTools.convertToUint8ArrayIfNeeded(input);\n return this.compressUtf8Block(input);\n };\n Compressor.prototype.compressUtf8Block = function (utf8Bytes) {\n if (!utf8Bytes || utf8Bytes.length == 0)\n return new Uint8Array(0);\n var bufferStartingReadOffset = this.cropAndAddNewBytesToInputBuffer(utf8Bytes);\n var inputBuffer = this.inputBuffer;\n var inputBufferLength = this.inputBuffer.length;\n this.outputBuffer = new Uint8Array(utf8Bytes.length);\n this.outputBufferPosition = 0;\n var latestMatchEndPosition = 0;\n for (var readPosition = bufferStartingReadOffset; readPosition < inputBufferLength; readPosition++) {\n var inputValue = inputBuffer[readPosition];\n var withinAMatchedRange = readPosition < latestMatchEndPosition;\n if (readPosition > inputBufferLength - this.MinimumSequenceLength) {\n if (!withinAMatchedRange)\n this.outputRawByte(inputValue);\n continue;\n }\n var targetBucketIndex = this.getBucketIndexForPrefix(readPosition);\n if (!withinAMatchedRange) {\n var matchLocator = this.findLongestMatch(readPosition, targetBucketIndex);\n if (matchLocator != null) {\n this.outputPointerBytes(matchLocator.length, matchLocator.distance);\n latestMatchEndPosition = readPosition + matchLocator.length;\n withinAMatchedRange = true;\n }\n }\n if (!withinAMatchedRange)\n this.outputRawByte(inputValue);\n var inputStreamPosition = this.inputBufferStreamOffset + readPosition;\n this.prefixHashTable.addValueToBucket(targetBucketIndex, inputStreamPosition);\n }\n return this.outputBuffer.subarray(0, this.outputBufferPosition);\n };\n Compressor.prototype.findLongestMatch = function (matchedSequencePosition, bucketIndex) {\n var bucket = this.prefixHashTable.getArraySegmentForBucketIndex(bucketIndex, this.reusableArraySegmentObject);\n if (bucket == null)\n return null;\n var input = this.inputBuffer;\n var longestMatchDistance;\n var longestMatchLength = 0;\n for (var i = 0; i < bucket.length; i++) {\n var testedSequencePosition = bucket.getInReversedOrder(i) - this.inputBufferStreamOffset;\n var testedSequenceDistance = matchedSequencePosition - testedSequencePosition;\n var lengthToSurpass = void 0;\n if (longestMatchDistance === undefined)\n lengthToSurpass = this.MinimumSequenceLength - 1;\n else if (longestMatchDistance < 128 && testedSequenceDistance >= 128)\n lengthToSurpass = longestMatchLength + (longestMatchLength >>> 1);\n else\n lengthToSurpass = longestMatchLength;\n if (testedSequenceDistance > this.MaximumMatchDistance ||\n lengthToSurpass >= this.MaximumSequenceLength ||\n matchedSequencePosition + lengthToSurpass >= input.length)\n break;\n if (input[testedSequencePosition + lengthToSurpass] !== input[matchedSequencePosition + lengthToSurpass])\n continue;\n for (var offset = 0;; offset++) {\n if (matchedSequencePosition + offset === input.length ||\n input[testedSequencePosition + offset] !== input[matchedSequencePosition + offset]) {\n if (offset > lengthToSurpass) {\n longestMatchDistance = testedSequenceDistance;\n longestMatchLength = offset;\n }\n break;\n }\n else if (offset === this.MaximumSequenceLength)\n return { distance: testedSequenceDistance, length: this.MaximumSequenceLength };\n }\n }\n if (longestMatchDistance !== undefined)\n return { distance: longestMatchDistance, length: longestMatchLength };\n else\n return null;\n };\n Compressor.prototype.getBucketIndexForPrefix = function (startPosition) {\n return (this.inputBuffer[startPosition] * 7880599 +\n this.inputBuffer[startPosition + 1] * 39601 +\n this.inputBuffer[startPosition + 2] * 199 +\n this.inputBuffer[startPosition + 3]) % this.PrefixHashTableSize;\n };\n Compressor.prototype.outputPointerBytes = function (length, distance) {\n if (distance < 128) {\n this.outputRawByte(192 | length);\n this.outputRawByte(distance);\n }\n else {\n this.outputRawByte(224 | length);\n this.outputRawByte(distance >>> 8);\n this.outputRawByte(distance & 255);\n }\n };\n Compressor.prototype.outputRawByte = function (value) {\n this.outputBuffer[this.outputBufferPosition++] = value;\n };\n Compressor.prototype.cropAndAddNewBytesToInputBuffer = function (newInput) {\n if (this.inputBuffer === undefined) {\n this.inputBuffer = newInput;\n return 0;\n }\n else {\n var cropLength = Math.min(this.inputBuffer.length, this.MaximumMatchDistance);\n var cropStartOffset = this.inputBuffer.length - cropLength;\n this.inputBuffer = LZUTF8.CompressionCommon.getCroppedAndAppendedByteArray(this.inputBuffer, cropStartOffset, cropLength, newInput);\n this.inputBufferStreamOffset += cropStartOffset;\n return cropLength;\n }\n };\n return Compressor;\n }());\n LZUTF8.Compressor = Compressor;\n})(LZUTF8 || (LZUTF8 = {}));\nvar LZUTF8;\n(function (LZUTF8) {\n var CompressorCustomHashTable = (function () {\n function CompressorCustomHashTable(bucketCount) {\n this.minimumBucketCapacity = 4;\n this.maximumBucketCapacity = 64;\n this.bucketLocators = new Uint32Array(bucketCount * 2);\n this.storage = new Uint32Array(bucketCount * 2);\n this.storageIndex = 1;\n }\n CompressorCustomHashTable.prototype.addValueToBucket = function (bucketIndex, valueToAdd) {\n bucketIndex <<= 1;\n if (this.storageIndex >= (this.storage.length >>> 1))\n this.compact();\n var startPosition = this.bucketLocators[bucketIndex];\n var length;\n if (startPosition === 0) {\n startPosition = this.storageIndex;\n length = 1;\n this.storage[this.storageIndex] = valueToAdd;\n this.storageIndex += this.minimumBucketCapacity;\n }\n else {\n length = this.bucketLocators[bucketIndex + 1];\n if (length === this.maximumBucketCapacity - 1)\n length = this.truncateBucketToNewerElements(startPosition, length, this.maximumBucketCapacity / 2);\n var endPosition = startPosition + length;\n if (this.storage[endPosition] === 0) {\n this.storage[endPosition] = valueToAdd;\n if (endPosition === this.storageIndex)\n this.storageIndex += length;\n }\n else {\n LZUTF8.ArrayTools.copyElements(this.storage, startPosition, this.storage, this.storageIndex, length);\n startPosition = this.storageIndex;\n this.storageIndex += length;\n this.storage[this.storageIndex++] = valueToAdd;\n this.storageIndex += length;\n }\n length++;\n }\n this.bucketLocators[bucketIndex] = startPosition;\n this.bucketLocators[bucketIndex + 1] = length;\n };\n CompressorCustomHashTable.prototype.truncateBucketToNewerElements = function (startPosition, bucketLength, truncatedBucketLength) {\n var sourcePosition = startPosition + bucketLength - truncatedBucketLength;\n LZUTF8.ArrayTools.copyElements(this.storage, sourcePosition, this.storage, startPosition, truncatedBucketLength);\n LZUTF8.ArrayTools.zeroElements(this.storage, startPosition + truncatedBucketLength, bucketLength - truncatedBucketLength);\n return truncatedBucketLength;\n };\n CompressorCustomHashTable.prototype.compact = function () {\n var oldBucketLocators = this.bucketLocators;\n var oldStorage = this.storage;\n this.bucketLocators = new Uint32Array(this.bucketLocators.length);\n this.storageIndex = 1;\n for (var bucketIndex = 0; bucketIndex < oldBucketLocators.length; bucketIndex += 2) {\n var length_3 = oldBucketLocators[bucketIndex + 1];\n if (length_3 === 0)\n continue;\n this.bucketLocators[bucketIndex] = this.storageIndex;\n this.bucketLocators[bucketIndex + 1] = length_3;\n this.storageIndex += Math.max(Math.min(length_3 * 2, this.maximumBucketCapacity), this.minimumBucketCapacity);\n }\n this.storage = new Uint32Array(this.storageIndex * 8);\n for (var bucketIndex = 0; bucketIndex < oldBucketLocators.length; bucketIndex += 2) {\n var sourcePosition = oldBucketLocators[bucketIndex];\n if (sourcePosition === 0)\n continue;\n var destPosition = this.bucketLocators[bucketIndex];\n var length_4 = this.bucketLocators[bucketIndex + 1];\n LZUTF8.ArrayTools.copyElements(oldStorage, sourcePosition, this.storage, destPosition, length_4);\n }\n };\n CompressorCustomHashTable.prototype.getArraySegmentForBucketIndex = function (bucketIndex, outputObject) {\n bucketIndex <<= 1;\n var startPosition = this.bucketLocators[bucketIndex];\n if (startPosition === 0)\n return null;\n if (outputObject === undefined)\n outputObject = new LZUTF8.ArraySegment(this.storage, startPosition, this.bucketLocators[bucketIndex + 1]);\n return outputObject;\n };\n CompressorCustomHashTable.prototype.getUsedBucketCount = function () {\n return Math.floor(LZUTF8.ArrayTools.countNonzeroValuesInArray(this.bucketLocators) / 2);\n };\n CompressorCustomHashTable.prototype.getTotalElementCount = function () {\n var result = 0;\n for (var i = 0; i < this.bucketLocators.length; i += 2)\n result += this.bucketLocators[i + 1];\n return result;\n };\n return CompressorCustomHashTable;\n }());\n LZUTF8.CompressorCustomHashTable = CompressorCustomHashTable;\n})(LZUTF8 || (LZUTF8 = {}));\nvar LZUTF8;\n(function (LZUTF8) {\n var CompressorSimpleHashTable = (function () {\n function CompressorSimpleHashTable(size) {\n this.maximumBucketCapacity = 64;\n this.buckets = new Array(size);\n }\n CompressorSimpleHashTable.prototype.addValueToBucket = function (bucketIndex, valueToAdd) {\n var bucket = this.buckets[bucketIndex];\n if (bucket === undefined) {\n this.buckets[bucketIndex] = [valueToAdd];\n }\n else {\n if (bucket.length === this.maximumBucketCapacity - 1)\n LZUTF8.ArrayTools.truncateStartingElements(bucket, this.maximumBucketCapacity / 2);\n bucket.push(valueToAdd);\n }\n };\n CompressorSimpleHashTable.prototype.getArraySegmentForBucketIndex = function (bucketIndex, outputObject) {\n var bucket = this.buckets[bucketIndex];\n if (bucket === undefined)\n return null;\n if (outputObject === undefined)\n outputObject = new LZUTF8.ArraySegment(bucket, 0, bucket.length);\n return outputObject;\n };\n CompressorSimpleHashTable.prototype.getUsedBucketCount = function () {\n return LZUTF8.ArrayTools.countNonzeroValuesInArray(this.buckets);\n };\n CompressorSimpleHashTable.prototype.getTotalElementCount = function () {\n var currentSum = 0;\n for (var i = 0; i < this.buckets.length; i++) {\n if (this.buckets[i] !== undefined)\n currentSum += this.buckets[i].length;\n }\n return currentSum;\n };\n return CompressorSimpleHashTable;\n }());\n LZUTF8.CompressorSimpleHashTable = CompressorSimpleHashTable;\n})(LZUTF8 || (LZUTF8 = {}));\nvar LZUTF8;\n(function (LZUTF8) {\n var Decompressor = (function () {\n function Decompressor() {\n this.MaximumMatchDistance = 32767;\n this.outputPosition = 0;\n }\n Decompressor.prototype.decompressBlockToString = function (input) {\n input = LZUTF8.BufferTools.convertToUint8ArrayIfNeeded(input);\n return LZUTF8.decodeUTF8(this.decompressBlock(input));\n };\n Decompressor.prototype.decompressBlock = function (input) {\n if (this.inputBufferRemainder) {\n input = LZUTF8.ArrayTools.concatUint8Arrays([this.inputBufferRemainder, input]);\n this.inputBufferRemainder = undefined;\n }\n var outputStartPosition = this.cropOutputBufferToWindowAndInitialize(Math.max(input.length * 4, 1024));\n for (var readPosition = 0, inputLength = input.length; readPosition < inputLength; readPosition++) {\n var inputValue = input[readPosition];\n if (inputValue >>> 6 != 3) {\n this.outputByte(inputValue);\n continue;\n }\n var sequenceLengthIdentifier = inputValue >>> 5;\n if (readPosition == inputLength - 1 ||\n (readPosition == inputLength - 2 && sequenceLengthIdentifier == 7)) {\n this.inputBufferRemainder = input.subarray(readPosition);\n break;\n }\n if (input[readPosition + 1] >>> 7 === 1) {\n this.outputByte(inputValue);\n }\n else {\n var matchLength = inputValue & 31;\n var matchDistance = void 0;\n if (sequenceLengthIdentifier == 6) {\n matchDistance = input[readPosition + 1];\n readPosition += 1;\n }\n else {\n matchDistance = (input[readPosition + 1] << 8) | (input[readPosition + 2]);\n readPosition += 2;\n }\n var matchPosition = this.outputPosition - matchDistance;\n for (var offset = 0; offset < matchLength; offset++)\n this.outputByte(this.outputBuffer[matchPosition + offset]);\n }\n }\n this.rollBackIfOutputBufferEndsWithATruncatedMultibyteSequence();\n return LZUTF8.CompressionCommon.getCroppedBuffer(this.outputBuffer, outputStartPosition, this.outputPosition - outputStartPosition);\n };\n Decompressor.prototype.outputByte = function (value) {\n if (this.outputPosition === this.outputBuffer.length)\n this.outputBuffer = LZUTF8.ArrayTools.doubleByteArrayCapacity(this.outputBuffer);\n this.outputBuffer[this.outputPosition++] = value;\n };\n Decompressor.prototype.cropOutputBufferToWindowAndInitialize = function (initialCapacity) {\n if (!this.outputBuffer) {\n this.outputBuffer = new Uint8Array(initialCapacity);\n return 0;\n }\n var cropLength = Math.min(this.outputPosition, this.MaximumMatchDistance);\n this.outputBuffer = LZUTF8.CompressionCommon.getCroppedBuffer(this.outputBuffer, this.outputPosition - cropLength, cropLength, initialCapacity);\n this.outputPosition = cropLength;\n if (this.outputBufferRemainder) {\n for (var i = 0; i < this.outputBufferRemainder.length; i++)\n this.outputByte(this.outputBufferRemainder[i]);\n this.outputBufferRemainder = undefined;\n }\n return cropLength;\n };\n Decompressor.prototype.rollBackIfOutputBufferEndsWithATruncatedMultibyteSequence = function () {\n for (var offset = 1; offset <= 4 && this.outputPosition - offset >= 0; offset++) {\n var value = this.outputBuffer[this.outputPosition - offset];\n if ((offset < 4 && (value >>> 3) === 30) ||\n (offset < 3 && (value >>> 4) === 14) ||\n (offset < 2 && (value >>> 5) === 6)) {\n this.outputBufferRemainder = this.outputBuffer.subarray(this.outputPosition - offset, this.outputPosition);\n this.outputPosition -= offset;\n return;\n }\n }\n };\n return Decompressor;\n }());\n LZUTF8.Decompressor = Decompressor;\n})(LZUTF8 || (LZUTF8 = {}));\nvar LZUTF8;\n(function (LZUTF8) {\n var Encoding;\n (function (Encoding) {\n var Base64;\n (function (Base64) {\n var charCodeMap = new Uint8Array([65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 43, 47]);\n var reverseCharCodeMap = new Uint8Array([255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 62, 255, 255, 255, 63, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 255, 255, 255, 0, 255, 255, 255, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 255, 255, 255, 255, 255, 255, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 255, 255, 255, 255]);\n var paddingCharacter = \"=\";\n var paddingCharCode = 61;\n Base64.encode = function (inputBytes) {\n if (!inputBytes || inputBytes.length == 0)\n return \"\";\n if (LZUTF8.runningInNodeJS()) {\n return (LZUTF8.BufferTools.uint8ArrayToBuffer(inputBytes)).toString(\"base64\");\n }\n else {\n return Base64.encodeWithJS(inputBytes);\n }\n };\n Base64.decode = function (base64String) {\n if (!base64String)\n return new Uint8Array(0);\n if (LZUTF8.runningInNodeJS()) {\n return LZUTF8.BufferTools.bufferToUint8Array(new Buffer(base64String, \"base64\"));\n }\n else {\n return Base64.decodeWithJS(base64String);\n }\n };\n Base64.encodeWithJS = function (inputBytes, addPadding) {\n if (addPadding === void 0) { addPadding = true; }\n if (!inputBytes || inputBytes.length == 0)\n return \"\";\n var map = charCodeMap;\n var output = new LZUTF8.StringBuilder();\n var uint24;\n for (var readPosition = 0, length_5 = inputBytes.length; readPosition < length_5; readPosition += 3) {\n if (readPosition <= length_5 - 3) {\n uint24 = inputBytes[readPosition] << 16 | inputBytes[readPosition + 1] << 8 | inputBytes[readPosition + 2];\n output.appendCharCode(map[(uint24 >>> 18) & 63]);\n output.appendCharCode(map[(uint24 >>> 12) & 63]);\n output.appendCharCode(map[(uint24 >>> 6) & 63]);\n output.appendCharCode(map[(uint24) & 63]);\n uint24 = 0;\n }\n else if (readPosition === length_5 - 2) {\n uint24 = inputBytes[readPosition] << 16 | inputBytes[readPosition + 1] << 8;\n output.appendCharCode(map[(uint24 >>> 18) & 63]);\n output.appendCharCode(map[(uint24 >>> 12) & 63]);\n output.appendCharCode(map[(uint24 >>> 6) & 63]);\n if (addPadding)\n output.appendCharCode(paddingCharCode);\n }\n else if (readPosition === length_5 - 1) {\n uint24 = inputBytes[readPosition] << 16;\n output.appendCharCode(map[(uint24 >>> 18) & 63]);\n output.appendCharCode(map[(uint24 >>> 12) & 63]);\n if (addPadding) {\n output.appendCharCode(paddingCharCode);\n output.appendCharCode(paddingCharCode);\n }\n }\n }\n return output.getOutputString();\n };\n Base64.decodeWithJS = function (base64String, outputBuffer) {\n if (!base64String || base64String.length == 0)\n return new Uint8Array(0);\n var lengthModulo4 = base64String.length % 4;\n if (lengthModulo4 === 1)\n throw new Error(\"Invalid Base64 string: length % 4 == 1\");\n else if (lengthModulo4 === 2)\n base64String += paddingCharacter + paddingCharacter;\n else if (lengthModulo4 === 3)\n base64String += paddingCharacter;\n if (!outputBuffer)\n outputBuffer = new Uint8Array(base64String.length);\n var outputPosition = 0;\n var length = base64String.length;\n for (var i = 0; i < length; i += 4) {\n var uint24 = (reverseCharCodeMap[base64String.charCodeAt(i)] << 18) |\n (reverseCharCodeMap[base64String.charCodeAt(i + 1)] << 12) |\n (reverseCharCodeMap[base64String.charCodeAt(i + 2)] << 6) |\n (reverseCharCodeMap[base64String.charCodeAt(i + 3)]);\n outputBuffer[outputPosition++] = (uint24 >>> 16) & 255;\n outputBuffer[outputPosition++] = (uint24 >>> 8) & 255;\n outputBuffer[outputPosition++] = (uint24) & 255;\n }\n if (base64String.charCodeAt(length - 1) == paddingCharCode)\n outputPosition--;\n if (base64String.charCodeAt(length - 2) == paddingCharCode)\n outputPosition--;\n return outputBuffer.subarray(0, outputPosition);\n };\n })(Base64 = Encoding.Base64 || (Encoding.Base64 = {}));\n })(Encoding = LZUTF8.Encoding || (LZUTF8.Encoding = {}));\n})(LZUTF8 || (LZUTF8 = {}));\nvar LZUTF8;\n(function (LZUTF8) {\n var Encoding;\n (function (Encoding) {\n var BinaryString;\n (function (BinaryString) {\n BinaryString.encode = function (input) {\n if (input == null)\n throw new TypeError(\"BinaryString.encode: undefined or null input received\");\n if (input.length === 0)\n return \"\";\n var inputLength = input.length;\n var outputStringBuilder = new LZUTF8.StringBuilder();\n var remainder = 0;\n var state = 1;\n for (var i = 0; i < inputLength; i += 2) {\n var value = void 0;\n if (i == inputLength - 1)\n value = (input[i] << 8);\n else\n value = (input[i] << 8) | input[i + 1];\n outputStringBuilder.appendCharCode((remainder << (16 - state)) | value >>> state);\n remainder = value & ((1 << state) - 1);\n if (state === 15) {\n outputStringBuilder.appendCharCode(remainder);\n remainder = 0;\n state = 1;\n }\n else {\n state += 1;\n }\n if (i >= inputLength - 2)\n outputStringBuilder.appendCharCode(remainder << (16 - state));\n }\n outputStringBuilder.appendCharCode(32768 | (inputLength % 2));\n return outputStringBuilder.getOutputString();\n };\n BinaryString.decode = function (input) {\n if (typeof input !== \"string\")\n throw new TypeError(\"BinaryString.decode: invalid input type\");\n if (input == \"\")\n return new Uint8Array(0);\n var output = new Uint8Array(input.length * 3);\n var outputPosition = 0;\n var appendToOutput = function (value) {\n output[outputPosition++] = value >>> 8;\n output[outputPosition++] = value & 255;\n };\n var remainder = 0;\n var state = 0;\n for (var i = 0; i < input.length; i++) {\n var value = input.charCodeAt(i);\n if (value >= 32768) {\n if (value == (32768 | 1))\n outputPosition--;\n state = 0;\n continue;\n }\n if (state == 0) {\n remainder = value;\n }\n else {\n appendToOutput((remainder << state) | (value >>> (15 - state)));\n remainder = value & ((1 << (15 - state)) - 1);\n }\n if (state == 15)\n state = 0;\n else\n state += 1;\n }\n return output.subarray(0, outputPosition);\n };\n })(BinaryString = Encoding.BinaryString || (Encoding.BinaryString = {}));\n })(Encoding = LZUTF8.Encoding || (LZUTF8.Encoding = {}));\n})(LZUTF8 || (LZUTF8 = {}));\nvar LZUTF8;\n(function (LZUTF8) {\n var Encoding;\n (function (Encoding) {\n var CodePoint;\n (function (CodePoint) {\n CodePoint.encodeFromString = function (str, position) {\n var charCode = str.charCodeAt(position);\n if (charCode < 0xD800 || charCode > 0xDBFF)\n return charCode;\n else {\n var nextCharCode = str.charCodeAt(position + 1);\n if (nextCharCode >= 0xDC00 && nextCharCode <= 0xDFFF)\n return 0x10000 + (((charCode - 0xD800) << 10) + (nextCharCode - 0xDC00));\n else\n throw new Error(\"getUnicodeCodePoint: Received a lead surrogate character, char code \" + charCode + \", followed by \" + nextCharCode + \", which is not a trailing surrogate character code.\");\n }\n };\n CodePoint.decodeToString = function (codePoint) {\n if (codePoint <= 0xFFFF)\n return String.fromCharCode(codePoint);\n else if (codePoint <= 0x10FFFF)\n return String.fromCharCode(0xD800 + ((codePoint - 0x10000) >>> 10), 0xDC00 + ((codePoint - 0x10000) & 1023));\n else\n throw new Error(\"getStringFromUnicodeCodePoint: A code point of \" + codePoint + \" cannot be encoded in UTF-16\");\n };\n })(CodePoint = Encoding.CodePoint || (Encoding.CodePoint = {}));\n })(Encoding = LZUTF8.Encoding || (LZUTF8.Encoding = {}));\n})(LZUTF8 || (LZUTF8 = {}));\nvar LZUTF8;\n(function (LZUTF8) {\n var Encoding;\n (function (Encoding) {\n var DecimalString;\n (function (DecimalString) {\n var lookupTable = [\"000\", \"001\", \"002\", \"003\", \"004\", \"005\", \"006\", \"007\", \"008\", \"009\", \"010\", \"011\", \"012\", \"013\", \"014\", \"015\", \"016\", \"017\", \"018\", \"019\", \"020\", \"021\", \"022\", \"023\", \"024\", \"025\", \"026\", \"027\", \"028\", \"029\", \"030\", \"031\", \"032\", \"033\", \"034\", \"035\", \"036\", \"037\", \"038\", \"039\", \"040\", \"041\", \"042\", \"043\", \"044\", \"045\", \"046\", \"047\", \"048\", \"049\", \"050\", \"051\", \"052\", \"053\", \"054\", \"055\", \"056\", \"057\", \"058\", \"059\", \"060\", \"061\", \"062\", \"063\", \"064\", \"065\", \"066\", \"067\", \"068\", \"069\", \"070\", \"071\", \"072\", \"073\", \"074\", \"075\", \"076\", \"077\", \"078\", \"079\", \"080\", \"081\", \"082\", \"083\", \"084\", \"085\", \"086\", \"087\", \"088\", \"089\", \"090\", \"091\", \"092\", \"093\", \"094\", \"095\", \"096\", \"097\", \"098\", \"099\", \"100\", \"101\", \"102\", \"103\", \"104\", \"105\", \"106\", \"107\", \"108\", \"109\", \"110\", \"111\", \"112\", \"113\", \"114\", \"115\", \"116\", \"117\", \"118\", \"119\", \"120\", \"121\", \"122\", \"123\", \"124\", \"125\", \"126\", \"127\", \"128\", \"129\", \"130\", \"131\", \"132\", \"133\", \"134\", \"135\", \"136\", \"137\", \"138\", \"139\", \"140\", \"141\", \"142\", \"143\", \"144\", \"145\", \"146\", \"147\", \"148\", \"149\", \"150\", \"151\", \"152\", \"153\", \"154\", \"155\", \"156\", \"157\", \"158\", \"159\", \"160\", \"161\", \"162\", \"163\", \"164\", \"165\", \"166\", \"167\", \"168\", \"169\", \"170\", \"171\", \"172\", \"173\", \"174\", \"175\", \"176\", \"177\", \"178\", \"179\", \"180\", \"181\", \"182\", \"183\", \"184\", \"185\", \"186\", \"187\", \"188\", \"189\", \"190\", \"191\", \"192\", \"193\", \"194\", \"195\", \"196\", \"197\", \"198\", \"199\", \"200\", \"201\", \"202\", \"203\", \"204\", \"205\", \"206\", \"207\", \"208\", \"209\", \"210\", \"211\", \"212\", \"213\", \"214\", \"215\", \"216\", \"217\", \"218\", \"219\", \"220\", \"221\", \"222\", \"223\", \"224\", \"225\", \"226\", \"227\", \"228\", \"229\", \"230\", \"231\", \"232\", \"233\", \"234\", \"235\", \"236\", \"237\", \"238\", \"239\", \"240\", \"241\", \"242\", \"243\", \"244\", \"245\", \"246\", \"247\", \"248\", \"249\", \"250\", \"251\", \"252\", \"253\", \"254\", \"255\"];\n DecimalString.encode = function (binaryBytes) {\n var resultArray = [];\n for (var i = 0; i < binaryBytes.length; i++)\n resultArray.push(lookupTable[binaryBytes[i]]);\n return resultArray.join(\" \");\n };\n })(DecimalString = Encoding.DecimalString || (Encoding.DecimalString = {}));\n })(Encoding = LZUTF8.Encoding || (LZUTF8.Encoding = {}));\n})(LZUTF8 || (LZUTF8 = {}));\nvar LZUTF8;\n(function (LZUTF8) {\n var Encoding;\n (function (Encoding) {\n var StorageBinaryString;\n (function (StorageBinaryString) {\n StorageBinaryString.encode = function (input) {\n return Encoding.BinaryString.encode(input).replace(/\\0/g, '\\u8002');\n };\n StorageBinaryString.decode = function (input) {\n return Encoding.BinaryString.decode(input.replace(/\\u8002/g, '\\0'));\n };\n })(StorageBinaryString = Encoding.StorageBinaryString || (Encoding.StorageBinaryString = {}));\n })(Encoding = LZUTF8.Encoding || (LZUTF8.Encoding = {}));\n})(LZUTF8 || (LZUTF8 = {}));\nvar LZUTF8;\n(function (LZUTF8) {\n var Encoding;\n (function (Encoding) {\n var UTF8;\n (function (UTF8) {\n var nativeTextEncoder;\n var nativeTextDecoder;\n UTF8.encode = function (str) {\n if (!str || str.length == 0)\n return new Uint8Array(0);\n if (LZUTF8.runningInNodeJS()) {\n return LZUTF8.BufferTools.bufferToUint8Array(new Buffer(str, \"utf8\"));\n }\n else if (UTF8.createNativeTextEncoderAndDecoderIfAvailable()) {\n return nativeTextEncoder.encode(str);\n }\n else {\n return UTF8.encodeWithJS(str);\n }\n };\n UTF8.decode = function (utf8Bytes) {\n if (!utf8Bytes || utf8Bytes.length == 0)\n return \"\";\n if (LZUTF8.runningInNodeJS()) {\n return LZUTF8.BufferTools.uint8ArrayToBuffer(utf8Bytes).toString(\"utf8\");\n }\n else if (UTF8.createNativeTextEncoderAndDecoderIfAvailable()) {\n return nativeTextDecoder.decode(utf8Bytes);\n }\n else {\n return UTF8.decodeWithJS(utf8Bytes);\n }\n };\n UTF8.encodeWithJS = function (str, outputArray) {\n if (!str || str.length == 0)\n return new Uint8Array(0);\n if (!outputArray)\n outputArray = new Uint8Array(str.length * 4);\n var writeIndex = 0;\n for (var readIndex = 0; readIndex < str.length; readIndex++) {\n var charCode = Encoding.CodePoint.encodeFromString(str, readIndex);\n if (charCode <= 0x7F) {\n outputArray[writeIndex++] = charCode;\n }\n else if (charCode <= 0x7FF) {\n outputArray[writeIndex++] = 0xC0 | (charCode >>> 6);\n outputArray[writeIndex++] = 0x80 | (charCode & 63);\n }\n else if (charCode <= 0xFFFF) {\n outputArray[writeIndex++] = 0xE0 | (charCode >>> 12);\n outputArray[writeIndex++] = 0x80 | ((charCode >>> 6) & 63);\n outputArray[writeIndex++] = 0x80 | (charCode & 63);\n }\n else if (charCode <= 0x10FFFF) {\n outputArray[writeIndex++] = 0xF0 | (charCode >>> 18);\n outputArray[writeIndex++] = 0x80 | ((charCode >>> 12) & 63);\n outputArray[writeIndex++] = 0x80 | ((charCode >>> 6) & 63);\n outputArray[writeIndex++] = 0x80 | (charCode & 63);\n readIndex++;\n }\n else\n throw new Error(\"Invalid UTF-16 string: Encountered a character unsupported by UTF-8/16 (RFC 3629)\");\n }\n return outputArray.subarray(0, writeIndex);\n };\n UTF8.decodeWithJS = function (utf8Bytes, startOffset, endOffset) {\n if (startOffset === void 0) { startOffset = 0; }\n if (!utf8Bytes || utf8Bytes.length == 0)\n return \"\";\n if (endOffset === undefined)\n endOffset = utf8Bytes.length;\n var output = new LZUTF8.StringBuilder();\n var outputCodePoint;\n var leadByte;\n for (var readIndex = startOffset, length_6 = endOffset; readIndex < length_6;) {\n leadByte = utf8Bytes[readIndex];\n if ((leadByte >>> 7) === 0) {\n outputCodePoint = leadByte;\n readIndex += 1;\n }\n else if ((leadByte >>> 5) === 6) {\n if (readIndex + 1 >= endOffset)\n throw new Error(\"Invalid UTF-8 stream: Truncated codepoint sequence encountered at position \" + readIndex);\n outputCodePoint = ((leadByte & 31) << 6) | (utf8Bytes[readIndex + 1] & 63);\n readIndex += 2;\n }\n else if ((leadByte >>> 4) === 14) {\n if (readIndex + 2 >= endOffset)\n throw new Error(\"Invalid UTF-8 stream: Truncated codepoint sequence encountered at position \" + readIndex);\n outputCodePoint = ((leadByte & 15) << 12) | ((utf8Bytes[readIndex + 1] & 63) << 6) | (utf8Bytes[readIndex + 2] & 63);\n readIndex += 3;\n }\n else if ((leadByte >>> 3) === 30) {\n if (readIndex + 3 >= endOffset)\n throw new Error(\"Invalid UTF-8 stream: Truncated codepoint sequence encountered at position \" + readIndex);\n outputCodePoint = ((leadByte & 7) << 18) | ((utf8Bytes[readIndex + 1] & 63) << 12) | ((utf8Bytes[readIndex + 2] & 63) << 6) | (utf8Bytes[readIndex + 3] & 63);\n readIndex += 4;\n }\n else\n throw new Error(\"Invalid UTF-8 stream: An invalid lead byte value encountered at position \" + readIndex);\n output.appendCodePoint(outputCodePoint);\n }\n return output.getOutputString();\n };\n UTF8.createNativeTextEncoderAndDecoderIfAvailable = function () {\n if (nativeTextEncoder)\n return true;\n if (typeof TextEncoder == \"function\") {\n nativeTextEncoder = new TextEncoder(\"utf-8\");\n nativeTextDecoder = new TextDecoder(\"utf-8\");\n return true;\n }\n else\n return false;\n };\n })(UTF8 = Encoding.UTF8 || (Encoding.UTF8 = {}));\n })(Encoding = LZUTF8.Encoding || (LZUTF8.Encoding = {}));\n})(LZUTF8 || (LZUTF8 = {}));\nvar LZUTF8;\n(function (LZUTF8) {\n function compress(input, options) {\n if (options === void 0) { options = {}; }\n if (input == null)\n throw new TypeError(\"compress: undefined or null input received\");\n var inputEncoding = LZUTF8.CompressionCommon.detectCompressionSourceEncoding(input);\n options = LZUTF8.ObjectTools.override({ inputEncoding: inputEncoding, outputEncoding: \"ByteArray\" }, options);\n var compressor = new LZUTF8.Compressor();\n var compressedBytes = compressor.compressBlock(input);\n return LZUTF8.CompressionCommon.encodeCompressedBytes(compressedBytes, options.outputEncoding);\n }\n LZUTF8.compress = compress;\n function decompress(input, options) {\n if (options === void 0) { options = {}; }\n if (input == null)\n throw new TypeError(\"decompress: undefined or null input received\");\n options = LZUTF8.ObjectTools.override({ inputEncoding: \"ByteArray\", outputEncoding: \"String\" }, options);\n var inputBytes = LZUTF8.CompressionCommon.decodeCompressedBytes(input, options.inputEncoding);\n var decompressor = new LZUTF8.Decompressor();\n var decompressedBytes = decompressor.decompressBlock(inputBytes);\n return LZUTF8.CompressionCommon.encodeDecompressedBytes(decompressedBytes, options.outputEncoding);\n }\n LZUTF8.decompress = decompress;\n function compressAsync(input, options, callback) {\n if (callback == null)\n callback = function () { };\n var inputEncoding;\n try {\n inputEncoding = LZUTF8.CompressionCommon.detectCompressionSourceEncoding(input);\n }\n catch (e) {\n callback(undefined, e);\n return;\n }\n options = LZUTF8.ObjectTools.override({\n inputEncoding: inputEncoding,\n outputEncoding: \"ByteArray\",\n useWebWorker: true,\n blockSize: 65536\n }, options);\n LZUTF8.enqueueImmediate(function () {\n if (options.useWebWorker && LZUTF8.WebWorker.createGlobalWorkerIfNeeded()) {\n LZUTF8.WebWorker.compressAsync(input, options, callback);\n }\n else {\n LZUTF8.AsyncCompressor.compressAsync(input, options, callback);\n }\n });\n }\n LZUTF8.compressAsync = compressAsync;\n function decompressAsync(input, options, callback) {\n if (callback == null)\n callback = function () { };\n if (input == null) {\n callback(undefined, new TypeError(\"decompressAsync: undefined or null input received\"));\n return;\n }\n options = LZUTF8.ObjectTools.override({\n inputEncoding: \"ByteArray\",\n outputEncoding: \"String\",\n useWebWorker: true,\n blockSize: 65536\n }, options);\n var normalizedInput = LZUTF8.BufferTools.convertToUint8ArrayIfNeeded(input);\n LZUTF8.EventLoop.enqueueImmediate(function () {\n if (options.useWebWorker && LZUTF8.WebWorker.createGlobalWorkerIfNeeded()) {\n LZUTF8.WebWorker.decompressAsync(normalizedInput, options, callback);\n }\n else {\n LZUTF8.AsyncDecompressor.decompressAsync(input, options, callback);\n }\n });\n }\n LZUTF8.decompressAsync = decompressAsync;\n function createCompressionStream() {\n return LZUTF8.AsyncCompressor.createCompressionStream();\n }\n LZUTF8.createCompressionStream = createCompressionStream;\n function createDecompressionStream() {\n return LZUTF8.AsyncDecompressor.createDecompressionStream();\n }\n LZUTF8.createDecompressionStream = createDecompressionStream;\n function encodeUTF8(str) {\n return LZUTF8.Encoding.UTF8.encode(str);\n }\n LZUTF8.encodeUTF8 = encodeUTF8;\n function decodeUTF8(input) {\n return LZUTF8.Encoding.UTF8.decode(input);\n }\n LZUTF8.decodeUTF8 = decodeUTF8;\n function encodeBase64(input) {\n return LZUTF8.Encoding.Base64.encode(input);\n }\n LZUTF8.encodeBase64 = encodeBase64;\n function decodeBase64(str) {\n return LZUTF8.Encoding.Base64.decode(str);\n }\n LZUTF8.decodeBase64 = decodeBase64;\n function encodeBinaryString(input) {\n return LZUTF8.Encoding.BinaryString.encode(input);\n }\n LZUTF8.encodeBinaryString = encodeBinaryString;\n function decodeBinaryString(str) {\n return LZUTF8.Encoding.BinaryString.decode(str);\n }\n LZUTF8.decodeBinaryString = decodeBinaryString;\n function encodeStorageBinaryString(input) {\n return LZUTF8.Encoding.StorageBinaryString.encode(input);\n }\n LZUTF8.encodeStorageBinaryString = encodeStorageBinaryString;\n function decodeStorageBinaryString(str) {\n return LZUTF8.Encoding.StorageBinaryString.decode(str);\n }\n LZUTF8.decodeStorageBinaryString = decodeStorageBinaryString;\n})(LZUTF8 || (LZUTF8 = {}));\n","\r\n\r\n/**\r\n * Singleton. Responsible for storing and exeucting changes to objects over time.\r\n */\r\nexport default class DataObjectAnimator {\r\n static withBlockv (bv) {\r\n if (!bv.animator)\r\n bv.animator = new DataObjectAnimator(bv)\r\n return bv.animator\r\n }\r\n /** Constructor */\r\n constructor(bv) {\r\n // blockv\r\n this.blockv = bv\r\n\r\n // Store regions\r\n this.regions = []\r\n\r\n // List of changes\r\n this.changes = []\r\n\r\n // Update timer\r\n this.updateTimer = null\r\n\r\n // Time skew, for syncing server time to client time. This time is added to the device's \"current time\".\r\n this.timeSkew = 0\r\n\r\n // Add listeners for the WebSocket\r\n this.onWebSocketMessage = this.onWebSocketMessage.bind(this)\r\n this.blockv.WebSockets.addEventListener('websocket.raw', this.onWebSocketMessage)\r\n\r\n\r\n }\r\n\r\n /** Called when a new message comes down the WebSocket */\r\n onWebSocketMessage(msg) {\r\n\r\n // We only handle state update messages here.\r\n if (msg.msg_type != 'state_update')\r\n return\r\n\r\n // Only handle brain updates\r\n if (msg.payload.action_name != 'brain-update')\r\n return\r\n\r\n // Check if the brain has given us a set of next positions\r\n let nextPositions = msg.payload.new_object.next_positions\r\n if (nextPositions) {\r\n\r\n // Map coordinates to sparse object updates\r\n let updates = nextPositions.map(p => { return {\r\n id: msg.payload.id,\r\n time: p.time,\r\n new_data: {\r\n 'vAtom::vAtomType': {\r\n 'geo_pos': {\r\n 'coordinates': p.geo_pos\r\n }\r\n }\r\n }\r\n }})\r\n\r\n // Fetch earliest time\r\n let earliestTime = updates[0].time\r\n for (let update of updates)\r\n if (earliestTime > update.time)\r\n earliestTime = update.time\r\n\r\n // Clear old data from animator\r\n this.clearUpdatesFor(msg.payload.id, earliestTime)\r\n\r\n // Hand off to the animator\r\n this.add(updates)\r\n\r\n }\r\n\r\n }\r\n\r\n /** Add a region */\r\n addRegion(region) {\r\n this.regions.push(region)\r\n }\r\n\r\n /** Remove a region */\r\n removeRegion(region) {\r\n this.regions = this.regions.filter(r => r != region)\r\n }\r\n\r\n /** Check if any of our regions has this data object */\r\n isMonitoringID(id) {\r\n\r\n for (let region of this.regions)\r\n if (region.objects.get(id))\r\n return true\r\n\r\n // No, we don't care about this object\r\n return false\r\n\r\n }\r\n\r\n /** Add updates to be executed */\r\n add(updates) {\r\n\r\n // Add updates to the array\r\n let now = Date.now() + this.timeSkew\r\n for (let u of updates) {\r\n\r\n // Ensure we care about this object\r\n if (!this.isMonitoringID(u.id))\r\n continue\r\n \r\n // Ensure this time entry has not passed already\r\n if (!u.time || u.time < now)\r\n continue\r\n\r\n // Add it\r\n this.changes.push(u)\r\n\r\n }\r\n\r\n // Sort changes oldest to newest\r\n this.changes.sort((a, b) => a.time - b.time)\r\n\r\n // Start update timer if needed\r\n if (!this.updateTimer)\r\n this.updateTimer = setInterval(this.doNextUpdate.bind(this), 50)\r\n\r\n }\r\n\r\n /** Remove pending updates for the specified object ID */\r\n clearUpdatesFor(id, afterTime = 0) {\r\n\r\n // Remove items\r\n for (let i = 0 ; i < this.changes.length ; i++)\r\n if (this.changes[i].id == id && this.changes[i].time > afterTime)\r\n this.changes.splice(i--, 1)\r\n\r\n }\r\n\r\n /** @private Run the next update */\r\n doNextUpdate() {\r\n\r\n // Stop if no more entries\r\n if (this.changes.length == 0) {\r\n clearInterval(this.updateTimer)\r\n this.updateTimer = null\r\n return\r\n }\r\n\r\n // Check if the first entry has passed yet\r\n let now = Date.now() + this.timeSkew\r\n if (this.changes[0].time > now)\r\n return\r\n\r\n // Get change to execute\r\n let change = this.changes.shift()\r\n\r\n // Do it on all regions\r\n for (let region of this.regions)\r\n region.updateObjects([change])\r\n\r\n // If next entry time has also passed already, don't wait, just execute\r\n if (this.changes.length > 0 && this.changes[0].time < now)\r\n this.doNextUpdate()\r\n\r\n }\r\n\r\n}","var isObject = require('./_is-object');\nvar document = require('./_global').document;\n// typeof document.createElement is 'object' in old IE\nvar is = isObject(document) && isObject(document.createElement);\nmodule.exports = function (it) {\n return is ? document.createElement(it) : {};\n};\n","exports.f = require('./_wks');\n","var shared = require('./_shared')('keys');\nvar uid = require('./_uid');\nmodule.exports = function (key) {\n return shared[key] || (shared[key] = uid(key));\n};\n","// IE 8- don't enum bug keys\nmodule.exports = (\n 'constructor,hasOwnProperty,isPrototypeOf,propertyIsEnumerable,toLocaleString,toString,valueOf'\n).split(',');\n","var document = require('./_global').document;\nmodule.exports = document && document.documentElement;\n","// Works with __proto__ only. Old v8 can't work with null proto objects.\n/* eslint-disable no-proto */\nvar isObject = require('./_is-object');\nvar anObject = require('./_an-object');\nvar check = function (O, proto) {\n anObject(O);\n if (!isObject(proto) && proto !== null) throw TypeError(proto + \": can't set as prototype!\");\n};\nmodule.exports = {\n set: Object.setPrototypeOf || ('__proto__' in {} ? // eslint-disable-line\n function (test, buggy, set) {\n try {\n set = require('./_ctx')(Function.call, require('./_object-gopd').f(Object.prototype, '__proto__').set, 2);\n set(test, []);\n buggy = !(test instanceof Array);\n } catch (e) { buggy = true; }\n return function setPrototypeOf(O, proto) {\n check(O, proto);\n if (buggy) O.__proto__ = proto;\n else set(O, proto);\n return O;\n };\n }({}, false) : undefined),\n check: check\n};\n","module.exports = '\\x09\\x0A\\x0B\\x0C\\x0D\\x20\\xA0\\u1680\\u180E\\u2000\\u2001\\u2002\\u2003' +\n '\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200A\\u202F\\u205F\\u3000\\u2028\\u2029\\uFEFF';\n","var isObject = require('./_is-object');\nvar setPrototypeOf = require('./_set-proto').set;\nmodule.exports = function (that, target, C) {\n var S = target.constructor;\n var P;\n if (S !== C && typeof S == 'function' && (P = S.prototype) !== C.prototype && isObject(P) && setPrototypeOf) {\n setPrototypeOf(that, P);\n } return that;\n};\n","'use strict';\nvar toInteger = require('./_to-integer');\nvar defined = require('./_defined');\n\nmodule.exports = function repeat(count) {\n var str = String(defined(this));\n var res = '';\n var n = toInteger(count);\n if (n < 0 || n == Infinity) throw RangeError(\"Count can't be negative\");\n for (;n > 0; (n >>>= 1) && (str += str)) if (n & 1) res += str;\n return res;\n};\n","// 20.2.2.28 Math.sign(x)\nmodule.exports = Math.sign || function sign(x) {\n // eslint-disable-next-line no-self-compare\n return (x = +x) == 0 || x != x ? x : x < 0 ? -1 : 1;\n};\n","// 20.2.2.14 Math.expm1(x)\nvar $expm1 = Math.expm1;\nmodule.exports = (!$expm1\n // Old FF bug\n || $expm1(10) > 22025.465794806719 || $expm1(10) < 22025.4657948067165168\n // Tor Browser bug\n || $expm1(-2e-17) != -2e-17\n) ? function expm1(x) {\n return (x = +x) == 0 ? x : x > -1e-6 && x < 1e-6 ? x + x * x / 2 : Math.exp(x) - 1;\n} : $expm1;\n","var toInteger = require('./_to-integer');\nvar defined = require('./_defined');\n// true -> String#at\n// false -> String#codePointAt\nmodule.exports = function (TO_STRING) {\n return function (that, pos) {\n var s = String(defined(that));\n var i = toInteger(pos);\n var l = s.length;\n var a, b;\n if (i < 0 || i >= l) return TO_STRING ? '' : undefined;\n a = s.charCodeAt(i);\n return a < 0xd800 || a > 0xdbff || i + 1 === l || (b = s.charCodeAt(i + 1)) < 0xdc00 || b > 0xdfff\n ? TO_STRING ? s.charAt(i) : a\n : TO_STRING ? s.slice(i, i + 2) : (a - 0xd800 << 10) + (b - 0xdc00) + 0x10000;\n };\n};\n","'use strict';\nvar LIBRARY = require('./_library');\nvar $export = require('./_export');\nvar redefine = require('./_redefine');\nvar hide = require('./_hide');\nvar Iterators = require('./_iterators');\nvar $iterCreate = require('./_iter-create');\nvar setToStringTag = require('./_set-to-string-tag');\nvar getPrototypeOf = require('./_object-gpo');\nvar ITERATOR = require('./_wks')('iterator');\nvar BUGGY = !([].keys && 'next' in [].keys()); // Safari has buggy iterators w/o `next`\nvar FF_ITERATOR = '@@iterator';\nvar KEYS = 'keys';\nvar VALUES = 'values';\n\nvar returnThis = function () { return this; };\n\nmodule.exports = function (Base, NAME, Constructor, next, DEFAULT, IS_SET, FORCED) {\n $iterCreate(Constructor, NAME, next);\n var getMethod = function (kind) {\n if (!BUGGY && kind in proto) return proto[kind];\n switch (kind) {\n case KEYS: return function keys() { return new Constructor(this, kind); };\n case VALUES: return function values() { return new Constructor(this, kind); };\n } return function entries() { return new Constructor(this, kind); };\n };\n var TAG = NAME + ' Iterator';\n var DEF_VALUES = DEFAULT == VALUES;\n var VALUES_BUG = false;\n var proto = Base.prototype;\n var $native = proto[ITERATOR] || proto[FF_ITERATOR] || DEFAULT && proto[DEFAULT];\n var $default = $native || getMethod(DEFAULT);\n var $entries = DEFAULT ? !DEF_VALUES ? $default : getMethod('entries') : undefined;\n var $anyNative = NAME == 'Array' ? proto.entries || $native : $native;\n var methods, key, IteratorPrototype;\n // Fix native\n if ($anyNative) {\n IteratorPrototype = getPrototypeOf($anyNative.call(new Base()));\n if (IteratorPrototype !== Object.prototype && IteratorPrototype.next) {\n // Set @@toStringTag to native iterators\n setToStringTag(IteratorPrototype, TAG, true);\n // fix for some old engines\n if (!LIBRARY && typeof IteratorPrototype[ITERATOR] != 'function') hide(IteratorPrototype, ITERATOR, returnThis);\n }\n }\n // fix Array#{values, @@iterator}.name in V8 / FF\n if (DEF_VALUES && $native && $native.name !== VALUES) {\n VALUES_BUG = true;\n $default = function values() { return $native.call(this); };\n }\n // Define iterator\n if ((!LIBRARY || FORCED) && (BUGGY || VALUES_BUG || !proto[ITERATOR])) {\n hide(proto, ITERATOR, $default);\n }\n // Plug for library\n Iterators[NAME] = $default;\n Iterators[TAG] = returnThis;\n if (DEFAULT) {\n methods = {\n values: DEF_VALUES ? $default : getMethod(VALUES),\n keys: IS_SET ? $default : getMethod(KEYS),\n entries: $entries\n };\n if (FORCED) for (key in methods) {\n if (!(key in proto)) redefine(proto, key, methods[key]);\n } else $export($export.P + $export.F * (BUGGY || VALUES_BUG), NAME, methods);\n }\n return methods;\n};\n","// helper for String#{startsWith, endsWith, includes}\nvar isRegExp = require('./_is-regexp');\nvar defined = require('./_defined');\n\nmodule.exports = function (that, searchString, NAME) {\n if (isRegExp(searchString)) throw TypeError('String#' + NAME + \" doesn't accept regex!\");\n return String(defined(that));\n};\n","// 7.2.8 IsRegExp(argument)\nvar isObject = require('./_is-object');\nvar cof = require('./_cof');\nvar MATCH = require('./_wks')('match');\nmodule.exports = function (it) {\n var isRegExp;\n return isObject(it) && ((isRegExp = it[MATCH]) !== undefined ? !!isRegExp : cof(it) == 'RegExp');\n};\n","var MATCH = require('./_wks')('match');\nmodule.exports = function (KEY) {\n var re = /./;\n try {\n '/./'[KEY](re);\n } catch (e) {\n try {\n re[MATCH] = false;\n return !'/./'[KEY](re);\n } catch (f) { /* empty */ }\n } return true;\n};\n","// check on default Array iterator\nvar Iterators = require('./_iterators');\nvar ITERATOR = require('./_wks')('iterator');\nvar ArrayProto = Array.prototype;\n\nmodule.exports = function (it) {\n return it !== undefined && (Iterators.Array === it || ArrayProto[ITERATOR] === it);\n};\n","'use strict';\nvar $defineProperty = require('./_object-dp');\nvar createDesc = require('./_property-desc');\n\nmodule.exports = function (object, index, value) {\n if (index in object) $defineProperty.f(object, index, createDesc(0, value));\n else object[index] = value;\n};\n","var classof = require('./_classof');\nvar ITERATOR = require('./_wks')('iterator');\nvar Iterators = require('./_iterators');\nmodule.exports = require('./_core').getIteratorMethod = function (it) {\n if (it != undefined) return it[ITERATOR]\n || it['@@iterator']\n || Iterators[classof(it)];\n};\n","// 22.1.3.6 Array.prototype.fill(value, start = 0, end = this.length)\n'use strict';\nvar toObject = require('./_to-object');\nvar toAbsoluteIndex = require('./_to-absolute-index');\nvar toLength = require('./_to-length');\nmodule.exports = function fill(value /* , start = 0, end = @length */) {\n var O = toObject(this);\n var length = toLength(O.length);\n var aLen = arguments.length;\n var index = toAbsoluteIndex(aLen > 1 ? arguments[1] : undefined, length);\n var end = aLen > 2 ? arguments[2] : undefined;\n var endPos = end === undefined ? length : toAbsoluteIndex(end, length);\n while (endPos > index) O[index++] = value;\n return O;\n};\n","'use strict';\nvar addToUnscopables = require('./_add-to-unscopables');\nvar step = require('./_iter-step');\nvar Iterators = require('./_iterators');\nvar toIObject = require('./_to-iobject');\n\n// 22.1.3.4 Array.prototype.entries()\n// 22.1.3.13 Array.prototype.keys()\n// 22.1.3.29 Array.prototype.values()\n// 22.1.3.30 Array.prototype[@@iterator]()\nmodule.exports = require('./_iter-define')(Array, 'Array', function (iterated, kind) {\n this._t = toIObject(iterated); // target\n this._i = 0; // next index\n this._k = kind; // kind\n// 22.1.5.2.1 %ArrayIteratorPrototype%.next()\n}, function () {\n var O = this._t;\n var kind = this._k;\n var index = this._i++;\n if (!O || index >= O.length) {\n this._t = undefined;\n return step(1);\n }\n if (kind == 'keys') return step(0, index);\n if (kind == 'values') return step(0, O[index]);\n return step(0, [index, O[index]]);\n}, 'values');\n\n// argumentsList[@@iterator] is %ArrayProto_values% (9.4.4.6, 9.4.4.7)\nIterators.Arguments = Iterators.Array;\n\naddToUnscopables('keys');\naddToUnscopables('values');\naddToUnscopables('entries');\n","'use strict';\n\nvar regexpFlags = require('./_flags');\n\nvar nativeExec = RegExp.prototype.exec;\n// This always refers to the native implementation, because the\n// String#replace polyfill uses ./fix-regexp-well-known-symbol-logic.js,\n// which loads this file before patching the method.\nvar nativeReplace = String.prototype.replace;\n\nvar patchedExec = nativeExec;\n\nvar LAST_INDEX = 'lastIndex';\n\nvar UPDATES_LAST_INDEX_WRONG = (function () {\n var re1 = /a/,\n re2 = /b*/g;\n nativeExec.call(re1, 'a');\n nativeExec.call(re2, 'a');\n return re1[LAST_INDEX] !== 0 || re2[LAST_INDEX] !== 0;\n})();\n\n// nonparticipating capturing group, copied from es5-shim's String#split patch.\nvar NPCG_INCLUDED = /()??/.exec('')[1] !== undefined;\n\nvar PATCH = UPDATES_LAST_INDEX_WRONG || NPCG_INCLUDED;\n\nif (PATCH) {\n patchedExec = function exec(str) {\n var re = this;\n var lastIndex, reCopy, match, i;\n\n if (NPCG_INCLUDED) {\n reCopy = new RegExp('^' + re.source + '$(?!\\\\s)', regexpFlags.call(re));\n }\n if (UPDATES_LAST_INDEX_WRONG) lastIndex = re[LAST_INDEX];\n\n match = nativeExec.call(re, str);\n\n if (UPDATES_LAST_INDEX_WRONG && match) {\n re[LAST_INDEX] = re.global ? match.index + match[0].length : lastIndex;\n }\n if (NPCG_INCLUDED && match && match.length > 1) {\n // Fix browsers whose `exec` methods don't consistently return `undefined`\n // for NPCG, like IE8. NOTE: This doesn' work for /(.?)?/\n // eslint-disable-next-line no-loop-func\n nativeReplace.call(match[0], reCopy, function () {\n for (i = 1; i < arguments.length - 2; i++) {\n if (arguments[i] === undefined) match[i] = undefined;\n }\n });\n }\n\n return match;\n };\n}\n\nmodule.exports = patchedExec;\n","'use strict';\nvar at = require('./_string-at')(true);\n\n // `AdvanceStringIndex` abstract operation\n// https://tc39.github.io/ecma262/#sec-advancestringindex\nmodule.exports = function (S, index, unicode) {\n return index + (unicode ? at(S, index).length : 1);\n};\n","var ctx = require('./_ctx');\nvar invoke = require('./_invoke');\nvar html = require('./_html');\nvar cel = require('./_dom-create');\nvar global = require('./_global');\nvar process = global.process;\nvar setTask = global.setImmediate;\nvar clearTask = global.clearImmediate;\nvar MessageChannel = global.MessageChannel;\nvar Dispatch = global.Dispatch;\nvar counter = 0;\nvar queue = {};\nvar ONREADYSTATECHANGE = 'onreadystatechange';\nvar defer, channel, port;\nvar run = function () {\n var id = +this;\n // eslint-disable-next-line no-prototype-builtins\n if (queue.hasOwnProperty(id)) {\n var fn = queue[id];\n delete queue[id];\n fn();\n }\n};\nvar listener = function (event) {\n run.call(event.data);\n};\n// Node.js 0.9+ & IE10+ has setImmediate, otherwise:\nif (!setTask || !clearTask) {\n setTask = function setImmediate(fn) {\n var args = [];\n var i = 1;\n while (arguments.length > i) args.push(arguments[i++]);\n queue[++counter] = function () {\n // eslint-disable-next-line no-new-func\n invoke(typeof fn == 'function' ? fn : Function(fn), args);\n };\n defer(counter);\n return counter;\n };\n clearTask = function clearImmediate(id) {\n delete queue[id];\n };\n // Node.js 0.8-\n if (require('./_cof')(process) == 'process') {\n defer = function (id) {\n process.nextTick(ctx(run, id, 1));\n };\n // Sphere (JS game engine) Dispatch API\n } else if (Dispatch && Dispatch.now) {\n defer = function (id) {\n Dispatch.now(ctx(run, id, 1));\n };\n // Browsers with MessageChannel, includes WebWorkers\n } else if (MessageChannel) {\n channel = new MessageChannel();\n port = channel.port2;\n channel.port1.onmessage = listener;\n defer = ctx(port.postMessage, port, 1);\n // Browsers with postMessage, skip WebWorkers\n // IE8 has postMessage, but it's sync & typeof its postMessage is 'object'\n } else if (global.addEventListener && typeof postMessage == 'function' && !global.importScripts) {\n defer = function (id) {\n global.postMessage(id + '', '*');\n };\n global.addEventListener('message', listener, false);\n // IE8-\n } else if (ONREADYSTATECHANGE in cel('script')) {\n defer = function (id) {\n html.appendChild(cel('script'))[ONREADYSTATECHANGE] = function () {\n html.removeChild(this);\n run.call(id);\n };\n };\n // Rest old browsers\n } else {\n defer = function (id) {\n setTimeout(ctx(run, id, 1), 0);\n };\n }\n}\nmodule.exports = {\n set: setTask,\n clear: clearTask\n};\n","'use strict';\nvar global = require('./_global');\nvar DESCRIPTORS = require('./_descriptors');\nvar LIBRARY = require('./_library');\nvar $typed = require('./_typed');\nvar hide = require('./_hide');\nvar redefineAll = require('./_redefine-all');\nvar fails = require('./_fails');\nvar anInstance = require('./_an-instance');\nvar toInteger = require('./_to-integer');\nvar toLength = require('./_to-length');\nvar toIndex = require('./_to-index');\nvar gOPN = require('./_object-gopn').f;\nvar dP = require('./_object-dp').f;\nvar arrayFill = require('./_array-fill');\nvar setToStringTag = require('./_set-to-string-tag');\nvar ARRAY_BUFFER = 'ArrayBuffer';\nvar DATA_VIEW = 'DataView';\nvar PROTOTYPE = 'prototype';\nvar WRONG_LENGTH = 'Wrong length!';\nvar WRONG_INDEX = 'Wrong index!';\nvar $ArrayBuffer = global[ARRAY_BUFFER];\nvar $DataView = global[DATA_VIEW];\nvar Math = global.Math;\nvar RangeError = global.RangeError;\n// eslint-disable-next-line no-shadow-restricted-names\nvar Infinity = global.Infinity;\nvar BaseBuffer = $ArrayBuffer;\nvar abs = Math.abs;\nvar pow = Math.pow;\nvar floor = Math.floor;\nvar log = Math.log;\nvar LN2 = Math.LN2;\nvar BUFFER = 'buffer';\nvar BYTE_LENGTH = 'byteLength';\nvar BYTE_OFFSET = 'byteOffset';\nvar $BUFFER = DESCRIPTORS ? '_b' : BUFFER;\nvar $LENGTH = DESCRIPTORS ? '_l' : BYTE_LENGTH;\nvar $OFFSET = DESCRIPTORS ? '_o' : BYTE_OFFSET;\n\n// IEEE754 conversions based on https://github.com/feross/ieee754\nfunction packIEEE754(value, mLen, nBytes) {\n var buffer = new Array(nBytes);\n var eLen = nBytes * 8 - mLen - 1;\n var eMax = (1 << eLen) - 1;\n var eBias = eMax >> 1;\n var rt = mLen === 23 ? pow(2, -24) - pow(2, -77) : 0;\n var i = 0;\n var s = value < 0 || value === 0 && 1 / value < 0 ? 1 : 0;\n var e, m, c;\n value = abs(value);\n // eslint-disable-next-line no-self-compare\n if (value != value || value === Infinity) {\n // eslint-disable-next-line no-self-compare\n m = value != value ? 1 : 0;\n e = eMax;\n } else {\n e = floor(log(value) / LN2);\n if (value * (c = pow(2, -e)) < 1) {\n e--;\n c *= 2;\n }\n if (e + eBias >= 1) {\n value += rt / c;\n } else {\n value += rt * pow(2, 1 - eBias);\n }\n if (value * c >= 2) {\n e++;\n c /= 2;\n }\n if (e + eBias >= eMax) {\n m = 0;\n e = eMax;\n } else if (e + eBias >= 1) {\n m = (value * c - 1) * pow(2, mLen);\n e = e + eBias;\n } else {\n m = value * pow(2, eBias - 1) * pow(2, mLen);\n e = 0;\n }\n }\n for (; mLen >= 8; buffer[i++] = m & 255, m /= 256, mLen -= 8);\n e = e << mLen | m;\n eLen += mLen;\n for (; eLen > 0; buffer[i++] = e & 255, e /= 256, eLen -= 8);\n buffer[--i] |= s * 128;\n return buffer;\n}\nfunction unpackIEEE754(buffer, mLen, nBytes) {\n var eLen = nBytes * 8 - mLen - 1;\n var eMax = (1 << eLen) - 1;\n var eBias = eMax >> 1;\n var nBits = eLen - 7;\n var i = nBytes - 1;\n var s = buffer[i--];\n var e = s & 127;\n var m;\n s >>= 7;\n for (; nBits > 0; e = e * 256 + buffer[i], i--, nBits -= 8);\n m = e & (1 << -nBits) - 1;\n e >>= -nBits;\n nBits += mLen;\n for (; nBits > 0; m = m * 256 + buffer[i], i--, nBits -= 8);\n if (e === 0) {\n e = 1 - eBias;\n } else if (e === eMax) {\n return m ? NaN : s ? -Infinity : Infinity;\n } else {\n m = m + pow(2, mLen);\n e = e - eBias;\n } return (s ? -1 : 1) * m * pow(2, e - mLen);\n}\n\nfunction unpackI32(bytes) {\n return bytes[3] << 24 | bytes[2] << 16 | bytes[1] << 8 | bytes[0];\n}\nfunction packI8(it) {\n return [it & 0xff];\n}\nfunction packI16(it) {\n return [it & 0xff, it >> 8 & 0xff];\n}\nfunction packI32(it) {\n return [it & 0xff, it >> 8 & 0xff, it >> 16 & 0xff, it >> 24 & 0xff];\n}\nfunction packF64(it) {\n return packIEEE754(it, 52, 8);\n}\nfunction packF32(it) {\n return packIEEE754(it, 23, 4);\n}\n\nfunction addGetter(C, key, internal) {\n dP(C[PROTOTYPE], key, { get: function () { return this[internal]; } });\n}\n\nfunction get(view, bytes, index, isLittleEndian) {\n var numIndex = +index;\n var intIndex = toIndex(numIndex);\n if (intIndex + bytes > view[$LENGTH]) throw RangeError(WRONG_INDEX);\n var store = view[$BUFFER]._b;\n var start = intIndex + view[$OFFSET];\n var pack = store.slice(start, start + bytes);\n return isLittleEndian ? pack : pack.reverse();\n}\nfunction set(view, bytes, index, conversion, value, isLittleEndian) {\n var numIndex = +index;\n var intIndex = toIndex(numIndex);\n if (intIndex + bytes > view[$LENGTH]) throw RangeError(WRONG_INDEX);\n var store = view[$BUFFER]._b;\n var start = intIndex + view[$OFFSET];\n var pack = conversion(+value);\n for (var i = 0; i < bytes; i++) store[start + i] = pack[isLittleEndian ? i : bytes - i - 1];\n}\n\nif (!$typed.ABV) {\n $ArrayBuffer = function ArrayBuffer(length) {\n anInstance(this, $ArrayBuffer, ARRAY_BUFFER);\n var byteLength = toIndex(length);\n this._b = arrayFill.call(new Array(byteLength), 0);\n this[$LENGTH] = byteLength;\n };\n\n $DataView = function DataView(buffer, byteOffset, byteLength) {\n anInstance(this, $DataView, DATA_VIEW);\n anInstance(buffer, $ArrayBuffer, DATA_VIEW);\n var bufferLength = buffer[$LENGTH];\n var offset = toInteger(byteOffset);\n if (offset < 0 || offset > bufferLength) throw RangeError('Wrong offset!');\n byteLength = byteLength === undefined ? bufferLength - offset : toLength(byteLength);\n if (offset + byteLength > bufferLength) throw RangeError(WRONG_LENGTH);\n this[$BUFFER] = buffer;\n this[$OFFSET] = offset;\n this[$LENGTH] = byteLength;\n };\n\n if (DESCRIPTORS) {\n addGetter($ArrayBuffer, BYTE_LENGTH, '_l');\n addGetter($DataView, BUFFER, '_b');\n addGetter($DataView, BYTE_LENGTH, '_l');\n addGetter($DataView, BYTE_OFFSET, '_o');\n }\n\n redefineAll($DataView[PROTOTYPE], {\n getInt8: function getInt8(byteOffset) {\n return get(this, 1, byteOffset)[0] << 24 >> 24;\n },\n getUint8: function getUint8(byteOffset) {\n return get(this, 1, byteOffset)[0];\n },\n getInt16: function getInt16(byteOffset /* , littleEndian */) {\n var bytes = get(this, 2, byteOffset, arguments[1]);\n return (bytes[1] << 8 | bytes[0]) << 16 >> 16;\n },\n getUint16: function getUint16(byteOffset /* , littleEndian */) {\n var bytes = get(this, 2, byteOffset, arguments[1]);\n return bytes[1] << 8 | bytes[0];\n },\n getInt32: function getInt32(byteOffset /* , littleEndian */) {\n return unpackI32(get(this, 4, byteOffset, arguments[1]));\n },\n getUint32: function getUint32(byteOffset /* , littleEndian */) {\n return unpackI32(get(this, 4, byteOffset, arguments[1])) >>> 0;\n },\n getFloat32: function getFloat32(byteOffset /* , littleEndian */) {\n return unpackIEEE754(get(this, 4, byteOffset, arguments[1]), 23, 4);\n },\n getFloat64: function getFloat64(byteOffset /* , littleEndian */) {\n return unpackIEEE754(get(this, 8, byteOffset, arguments[1]), 52, 8);\n },\n setInt8: function setInt8(byteOffset, value) {\n set(this, 1, byteOffset, packI8, value);\n },\n setUint8: function setUint8(byteOffset, value) {\n set(this, 1, byteOffset, packI8, value);\n },\n setInt16: function setInt16(byteOffset, value /* , littleEndian */) {\n set(this, 2, byteOffset, packI16, value, arguments[2]);\n },\n setUint16: function setUint16(byteOffset, value /* , littleEndian */) {\n set(this, 2, byteOffset, packI16, value, arguments[2]);\n },\n setInt32: function setInt32(byteOffset, value /* , littleEndian */) {\n set(this, 4, byteOffset, packI32, value, arguments[2]);\n },\n setUint32: function setUint32(byteOffset, value /* , littleEndian */) {\n set(this, 4, byteOffset, packI32, value, arguments[2]);\n },\n setFloat32: function setFloat32(byteOffset, value /* , littleEndian */) {\n set(this, 4, byteOffset, packF32, value, arguments[2]);\n },\n setFloat64: function setFloat64(byteOffset, value /* , littleEndian */) {\n set(this, 8, byteOffset, packF64, value, arguments[2]);\n }\n });\n} else {\n if (!fails(function () {\n $ArrayBuffer(1);\n }) || !fails(function () {\n new $ArrayBuffer(-1); // eslint-disable-line no-new\n }) || fails(function () {\n new $ArrayBuffer(); // eslint-disable-line no-new\n new $ArrayBuffer(1.5); // eslint-disable-line no-new\n new $ArrayBuffer(NaN); // eslint-disable-line no-new\n return $ArrayBuffer.name != ARRAY_BUFFER;\n })) {\n $ArrayBuffer = function ArrayBuffer(length) {\n anInstance(this, $ArrayBuffer);\n return new BaseBuffer(toIndex(length));\n };\n var ArrayBufferProto = $ArrayBuffer[PROTOTYPE] = BaseBuffer[PROTOTYPE];\n for (var keys = gOPN(BaseBuffer), j = 0, key; keys.length > j;) {\n if (!((key = keys[j++]) in $ArrayBuffer)) hide($ArrayBuffer, key, BaseBuffer[key]);\n }\n if (!LIBRARY) ArrayBufferProto.constructor = $ArrayBuffer;\n }\n // iOS Safari 7.x bug\n var view = new $DataView(new $ArrayBuffer(2));\n var $setInt8 = $DataView[PROTOTYPE].setInt8;\n view.setInt8(0, 2147483648);\n view.setInt8(1, 2147483649);\n if (view.getInt8(0) || !view.getInt8(1)) redefineAll($DataView[PROTOTYPE], {\n setInt8: function setInt8(byteOffset, value) {\n $setInt8.call(this, byteOffset, value << 24 >> 24);\n },\n setUint8: function setUint8(byteOffset, value) {\n $setInt8.call(this, byteOffset, value << 24 >> 24);\n }\n }, true);\n}\nsetToStringTag($ArrayBuffer, ARRAY_BUFFER);\nsetToStringTag($DataView, DATA_VIEW);\nhide($DataView[PROTOTYPE], $typed.VIEW, true);\nexports[ARRAY_BUFFER] = $ArrayBuffer;\nexports[DATA_VIEW] = $DataView;\n","// https://github.com/zloirock/core-js/issues/86#issuecomment-115759028\nvar global = module.exports = typeof window != 'undefined' && window.Math == Math\n ? window : typeof self != 'undefined' && self.Math == Math ? self\n // eslint-disable-next-line no-new-func\n : Function('return this')();\nif (typeof __g == 'number') __g = global; // eslint-disable-line no-undef\n","module.exports = function (it) {\n return typeof it === 'object' ? it !== null : typeof it === 'function';\n};\n","// Thank's IE8 for his funny defineProperty\nmodule.exports = !require('./_fails')(function () {\n return Object.defineProperty({}, 'a', { get: function () { return 7; } }).a != 7;\n});\n","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n'use strict';\n\nvar R = typeof Reflect === 'object' ? Reflect : null\nvar ReflectApply = R && typeof R.apply === 'function'\n ? R.apply\n : function ReflectApply(target, receiver, args) {\n return Function.prototype.apply.call(target, receiver, args);\n }\n\nvar ReflectOwnKeys\nif (R && typeof R.ownKeys === 'function') {\n ReflectOwnKeys = R.ownKeys\n} else if (Object.getOwnPropertySymbols) {\n ReflectOwnKeys = function ReflectOwnKeys(target) {\n return Object.getOwnPropertyNames(target)\n .concat(Object.getOwnPropertySymbols(target));\n };\n} else {\n ReflectOwnKeys = function ReflectOwnKeys(target) {\n return Object.getOwnPropertyNames(target);\n };\n}\n\nfunction ProcessEmitWarning(warning) {\n if (console && console.warn) console.warn(warning);\n}\n\nvar NumberIsNaN = Number.isNaN || function NumberIsNaN(value) {\n return value !== value;\n}\n\nfunction EventEmitter() {\n EventEmitter.init.call(this);\n}\nmodule.exports = EventEmitter;\n\n// Backwards-compat with node 0.10.x\nEventEmitter.EventEmitter = EventEmitter;\n\nEventEmitter.prototype._events = undefined;\nEventEmitter.prototype._eventsCount = 0;\nEventEmitter.prototype._maxListeners = undefined;\n\n// By default EventEmitters will print a warning if more than 10 listeners are\n// added to it. This is a useful default which helps finding memory leaks.\nvar defaultMaxListeners = 10;\n\nObject.defineProperty(EventEmitter, 'defaultMaxListeners', {\n enumerable: true,\n get: function() {\n return defaultMaxListeners;\n },\n set: function(arg) {\n if (typeof arg !== 'number' || arg < 0 || NumberIsNaN(arg)) {\n throw new RangeError('The value of \"defaultMaxListeners\" is out of range. It must be a non-negative number. Received ' + arg + '.');\n }\n defaultMaxListeners = arg;\n }\n});\n\nEventEmitter.init = function() {\n\n if (this._events === undefined ||\n this._events === Object.getPrototypeOf(this)._events) {\n this._events = Object.create(null);\n this._eventsCount = 0;\n }\n\n this._maxListeners = this._maxListeners || undefined;\n};\n\n// Obviously not all Emitters should be limited to 10. This function allows\n// that to be increased. Set to zero for unlimited.\nEventEmitter.prototype.setMaxListeners = function setMaxListeners(n) {\n if (typeof n !== 'number' || n < 0 || NumberIsNaN(n)) {\n throw new RangeError('The value of \"n\" is out of range. It must be a non-negative number. Received ' + n + '.');\n }\n this._maxListeners = n;\n return this;\n};\n\nfunction $getMaxListeners(that) {\n if (that._maxListeners === undefined)\n return EventEmitter.defaultMaxListeners;\n return that._maxListeners;\n}\n\nEventEmitter.prototype.getMaxListeners = function getMaxListeners() {\n return $getMaxListeners(this);\n};\n\nEventEmitter.prototype.emit = function emit(type) {\n var args = [];\n for (var i = 1; i < arguments.length; i++) args.push(arguments[i]);\n var doError = (type === 'error');\n\n var events = this._events;\n if (events !== undefined)\n doError = (doError && events.error === undefined);\n else if (!doError)\n return false;\n\n // If there is no 'error' event listener then throw.\n if (doError) {\n var er;\n if (args.length > 0)\n er = args[0];\n if (er instanceof Error) {\n // Note: The comments on the `throw` lines are intentional, they show\n // up in Node's output if this results in an unhandled exception.\n throw er; // Unhandled 'error' event\n }\n // At least give some kind of context to the user\n var err = new Error('Unhandled error.' + (er ? ' (' + er.message + ')' : ''));\n err.context = er;\n throw err; // Unhandled 'error' event\n }\n\n var handler = events[type];\n\n if (handler === undefined)\n return false;\n\n if (typeof handler === 'function') {\n ReflectApply(handler, this, args);\n } else {\n var len = handler.length;\n var listeners = arrayClone(handler, len);\n for (var i = 0; i < len; ++i)\n ReflectApply(listeners[i], this, args);\n }\n\n return true;\n};\n\nfunction _addListener(target, type, listener, prepend) {\n var m;\n var events;\n var existing;\n\n if (typeof listener !== 'function') {\n throw new TypeError('The \"listener\" argument must be of type Function. Received type ' + typeof listener);\n }\n\n events = target._events;\n if (events === undefined) {\n events = target._events = Object.create(null);\n target._eventsCount = 0;\n } else {\n // To avoid recursion in the case that type === \"newListener\"! Before\n // adding it to the listeners, first emit \"newListener\".\n if (events.newListener !== undefined) {\n target.emit('newListener', type,\n listener.listener ? listener.listener : listener);\n\n // Re-assign `events` because a newListener handler could have caused the\n // this._events to be assigned to a new object\n events = target._events;\n }\n existing = events[type];\n }\n\n if (existing === undefined) {\n // Optimize the case of one listener. Don't need the extra array object.\n existing = events[type] = listener;\n ++target._eventsCount;\n } else {\n if (typeof existing === 'function') {\n // Adding the second element, need to change to array.\n existing = events[type] =\n prepend ? [listener, existing] : [existing, listener];\n // If we've already got an array, just append.\n } else if (prepend) {\n existing.unshift(listener);\n } else {\n existing.push(listener);\n }\n\n // Check for listener leak\n m = $getMaxListeners(target);\n if (m > 0 && existing.length > m && !existing.warned) {\n existing.warned = true;\n // No error code for this since it is a Warning\n // eslint-disable-next-line no-restricted-syntax\n var w = new Error('Possible EventEmitter memory leak detected. ' +\n existing.length + ' ' + String(type) + ' listeners ' +\n 'added. Use emitter.setMaxListeners() to ' +\n 'increase limit');\n w.name = 'MaxListenersExceededWarning';\n w.emitter = target;\n w.type = type;\n w.count = existing.length;\n ProcessEmitWarning(w);\n }\n }\n\n return target;\n}\n\nEventEmitter.prototype.addListener = function addListener(type, listener) {\n return _addListener(this, type, listener, false);\n};\n\nEventEmitter.prototype.on = EventEmitter.prototype.addListener;\n\nEventEmitter.prototype.prependListener =\n function prependListener(type, listener) {\n return _addListener(this, type, listener, true);\n };\n\nfunction onceWrapper() {\n var args = [];\n for (var i = 0; i < arguments.length; i++) args.push(arguments[i]);\n if (!this.fired) {\n this.target.removeListener(this.type, this.wrapFn);\n this.fired = true;\n ReflectApply(this.listener, this.target, args);\n }\n}\n\nfunction _onceWrap(target, type, listener) {\n var state = { fired: false, wrapFn: undefined, target: target, type: type, listener: listener };\n var wrapped = onceWrapper.bind(state);\n wrapped.listener = listener;\n state.wrapFn = wrapped;\n return wrapped;\n}\n\nEventEmitter.prototype.once = function once(type, listener) {\n if (typeof listener !== 'function') {\n throw new TypeError('The \"listener\" argument must be of type Function. Received type ' + typeof listener);\n }\n this.on(type, _onceWrap(this, type, listener));\n return this;\n};\n\nEventEmitter.prototype.prependOnceListener =\n function prependOnceListener(type, listener) {\n if (typeof listener !== 'function') {\n throw new TypeError('The \"listener\" argument must be of type Function. Received type ' + typeof listener);\n }\n this.prependListener(type, _onceWrap(this, type, listener));\n return this;\n };\n\n// Emits a 'removeListener' event if and only if the listener was removed.\nEventEmitter.prototype.removeListener =\n function removeListener(type, listener) {\n var list, events, position, i, originalListener;\n\n if (typeof listener !== 'function') {\n throw new TypeError('The \"listener\" argument must be of type Function. Received type ' + typeof listener);\n }\n\n events = this._events;\n if (events === undefined)\n return this;\n\n list = events[type];\n if (list === undefined)\n return this;\n\n if (list === listener || list.listener === listener) {\n if (--this._eventsCount === 0)\n this._events = Object.create(null);\n else {\n delete events[type];\n if (events.removeListener)\n this.emit('removeListener', type, list.listener || listener);\n }\n } else if (typeof list !== 'function') {\n position = -1;\n\n for (i = list.length - 1; i >= 0; i--) {\n if (list[i] === listener || list[i].listener === listener) {\n originalListener = list[i].listener;\n position = i;\n break;\n }\n }\n\n if (position < 0)\n return this;\n\n if (position === 0)\n list.shift();\n else {\n spliceOne(list, position);\n }\n\n if (list.length === 1)\n events[type] = list[0];\n\n if (events.removeListener !== undefined)\n this.emit('removeListener', type, originalListener || listener);\n }\n\n return this;\n };\n\nEventEmitter.prototype.off = EventEmitter.prototype.removeListener;\n\nEventEmitter.prototype.removeAllListeners =\n function removeAllListeners(type) {\n var listeners, events, i;\n\n events = this._events;\n if (events === undefined)\n return this;\n\n // not listening for removeListener, no need to emit\n if (events.removeListener === undefined) {\n if (arguments.length === 0) {\n this._events = Object.create(null);\n this._eventsCount = 0;\n } else if (events[type] !== undefined) {\n if (--this._eventsCount === 0)\n this._events = Object.create(null);\n else\n delete events[type];\n }\n return this;\n }\n\n // emit removeListener for all listeners on all events\n if (arguments.length === 0) {\n var keys = Object.keys(events);\n var key;\n for (i = 0; i < keys.length; ++i) {\n key = keys[i];\n if (key === 'removeListener') continue;\n this.removeAllListeners(key);\n }\n this.removeAllListeners('removeListener');\n this._events = Object.create(null);\n this._eventsCount = 0;\n return this;\n }\n\n listeners = events[type];\n\n if (typeof listeners === 'function') {\n this.removeListener(type, listeners);\n } else if (listeners !== undefined) {\n // LIFO order\n for (i = listeners.length - 1; i >= 0; i--) {\n this.removeListener(type, listeners[i]);\n }\n }\n\n return this;\n };\n\nfunction _listeners(target, type, unwrap) {\n var events = target._events;\n\n if (events === undefined)\n return [];\n\n var evlistener = events[type];\n if (evlistener === undefined)\n return [];\n\n if (typeof evlistener === 'function')\n return unwrap ? [evlistener.listener || evlistener] : [evlistener];\n\n return unwrap ?\n unwrapListeners(evlistener) : arrayClone(evlistener, evlistener.length);\n}\n\nEventEmitter.prototype.listeners = function listeners(type) {\n return _listeners(this, type, true);\n};\n\nEventEmitter.prototype.rawListeners = function rawListeners(type) {\n return _listeners(this, type, false);\n};\n\nEventEmitter.listenerCount = function(emitter, type) {\n if (typeof emitter.listenerCount === 'function') {\n return emitter.listenerCount(type);\n } else {\n return listenerCount.call(emitter, type);\n }\n};\n\nEventEmitter.prototype.listenerCount = listenerCount;\nfunction listenerCount(type) {\n var events = this._events;\n\n if (events !== undefined) {\n var evlistener = events[type];\n\n if (typeof evlistener === 'function') {\n return 1;\n } else if (evlistener !== undefined) {\n return evlistener.length;\n }\n }\n\n return 0;\n}\n\nEventEmitter.prototype.eventNames = function eventNames() {\n return this._eventsCount > 0 ? ReflectOwnKeys(this._events) : [];\n};\n\nfunction arrayClone(arr, n) {\n var copy = new Array(n);\n for (var i = 0; i < n; ++i)\n copy[i] = arr[i];\n return copy;\n}\n\nfunction spliceOne(list, index) {\n for (; index + 1 < list.length; index++)\n list[index] = list[index + 1];\n list.pop();\n}\n\nfunction unwrapListeners(arr) {\n var ret = new Array(arr.length);\n for (var i = 0; i < ret.length; ++i) {\n ret[i] = arr[i].listener || arr[i];\n }\n return ret;\n}\n","exports = module.exports = require('./lib/_stream_readable.js');\nexports.Stream = exports;\nexports.Readable = exports;\nexports.Writable = require('./lib/_stream_writable.js');\nexports.Duplex = require('./lib/_stream_duplex.js');\nexports.Transform = require('./lib/_stream_transform.js');\nexports.PassThrough = require('./lib/_stream_passthrough.js');\n","/* eslint-disable node/no-deprecated-api */\nvar buffer = require('buffer')\nvar Buffer = buffer.Buffer\n\n// alternative to using Object.keys for old browsers\nfunction copyProps (src, dst) {\n for (var key in src) {\n dst[key] = src[key]\n }\n}\nif (Buffer.from && Buffer.alloc && Buffer.allocUnsafe && Buffer.allocUnsafeSlow) {\n module.exports = buffer\n} else {\n // Copy properties from require('buffer')\n copyProps(buffer, exports)\n exports.Buffer = SafeBuffer\n}\n\nfunction SafeBuffer (arg, encodingOrOffset, length) {\n return Buffer(arg, encodingOrOffset, length)\n}\n\n// Copy static methods from Buffer\ncopyProps(Buffer, SafeBuffer)\n\nSafeBuffer.from = function (arg, encodingOrOffset, length) {\n if (typeof arg === 'number') {\n throw new TypeError('Argument must not be a number')\n }\n return Buffer(arg, encodingOrOffset, length)\n}\n\nSafeBuffer.alloc = function (size, fill, encoding) {\n if (typeof size !== 'number') {\n throw new TypeError('Argument must be a number')\n }\n var buf = Buffer(size)\n if (fill !== undefined) {\n if (typeof encoding === 'string') {\n buf.fill(fill, encoding)\n } else {\n buf.fill(fill)\n }\n } else {\n buf.fill(0)\n }\n return buf\n}\n\nSafeBuffer.allocUnsafe = function (size) {\n if (typeof size !== 'number') {\n throw new TypeError('Argument must be a number')\n }\n return Buffer(size)\n}\n\nSafeBuffer.allocUnsafeSlow = function (size) {\n if (typeof size !== 'number') {\n throw new TypeError('Argument must be a number')\n }\n return buffer.SlowBuffer(size)\n}\n","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n// A bit simpler than readable streams.\n// Implement an async ._write(chunk, encoding, cb), and it'll handle all\n// the drain event emission and buffering.\n\n'use strict';\n\n/*<replacement>*/\n\nvar pna = require('process-nextick-args');\n/*</replacement>*/\n\nmodule.exports = Writable;\n\n/* <replacement> */\nfunction WriteReq(chunk, encoding, cb) {\n this.chunk = chunk;\n this.encoding = encoding;\n this.callback = cb;\n this.next = null;\n}\n\n// It seems a linked list but it is not\n// there will be only 2 of these for each stream\nfunction CorkedRequest(state) {\n var _this = this;\n\n this.next = null;\n this.entry = null;\n this.finish = function () {\n onCorkedFinish(_this, state);\n };\n}\n/* </replacement> */\n\n/*<replacement>*/\nvar asyncWrite = !process.browser && ['v0.10', 'v0.9.'].indexOf(process.version.slice(0, 5)) > -1 ? setImmediate : pna.nextTick;\n/*</replacement>*/\n\n/*<replacement>*/\nvar Duplex;\n/*</replacement>*/\n\nWritable.WritableState = WritableState;\n\n/*<replacement>*/\nvar util = require('core-util-is');\nutil.inherits = require('inherits');\n/*</replacement>*/\n\n/*<replacement>*/\nvar internalUtil = {\n deprecate: require('util-deprecate')\n};\n/*</replacement>*/\n\n/*<replacement>*/\nvar Stream = require('./internal/streams/stream');\n/*</replacement>*/\n\n/*<replacement>*/\n\nvar Buffer = require('safe-buffer').Buffer;\nvar OurUint8Array = global.Uint8Array || function () {};\nfunction _uint8ArrayToBuffer(chunk) {\n return Buffer.from(chunk);\n}\nfunction _isUint8Array(obj) {\n return Buffer.isBuffer(obj) || obj instanceof OurUint8Array;\n}\n\n/*</replacement>*/\n\nvar destroyImpl = require('./internal/streams/destroy');\n\nutil.inherits(Writable, Stream);\n\nfunction nop() {}\n\nfunction WritableState(options, stream) {\n Duplex = Duplex || require('./_stream_duplex');\n\n options = options || {};\n\n // Duplex streams are both readable and writable, but share\n // the same options object.\n // However, some cases require setting options to different\n // values for the readable and the writable sides of the duplex stream.\n // These options can be provided separately as readableXXX and writableXXX.\n var isDuplex = stream instanceof Duplex;\n\n // object stream flag to indicate whether or not this stream\n // contains buffers or objects.\n this.objectMode = !!options.objectMode;\n\n if (isDuplex) this.objectMode = this.objectMode || !!options.writableObjectMode;\n\n // the point at which write() starts returning false\n // Note: 0 is a valid value, means that we always return false if\n // the entire buffer is not flushed immediately on write()\n var hwm = options.highWaterMark;\n var writableHwm = options.writableHighWaterMark;\n var defaultHwm = this.objectMode ? 16 : 16 * 1024;\n\n if (hwm || hwm === 0) this.highWaterMark = hwm;else if (isDuplex && (writableHwm || writableHwm === 0)) this.highWaterMark = writableHwm;else this.highWaterMark = defaultHwm;\n\n // cast to ints.\n this.highWaterMark = Math.floor(this.highWaterMark);\n\n // if _final has been called\n this.finalCalled = false;\n\n // drain event flag.\n this.needDrain = false;\n // at the start of calling end()\n this.ending = false;\n // when end() has been called, and returned\n this.ended = false;\n // when 'finish' is emitted\n this.finished = false;\n\n // has it been destroyed\n this.destroyed = false;\n\n // should we decode strings into buffers before passing to _write?\n // this is here so that some node-core streams can optimize string\n // handling at a lower level.\n var noDecode = options.decodeStrings === false;\n this.decodeStrings = !noDecode;\n\n // Crypto is kind of old and crusty. Historically, its default string\n // encoding is 'binary' so we have to make this configurable.\n // Everything else in the universe uses 'utf8', though.\n this.defaultEncoding = options.defaultEncoding || 'utf8';\n\n // not an actual buffer we keep track of, but a measurement\n // of how much we're waiting to get pushed to some underlying\n // socket or file.\n this.length = 0;\n\n // a flag to see when we're in the middle of a write.\n this.writing = false;\n\n // when true all writes will be buffered until .uncork() call\n this.corked = 0;\n\n // a flag to be able to tell if the onwrite cb is called immediately,\n // or on a later tick. We set this to true at first, because any\n // actions that shouldn't happen until \"later\" should generally also\n // not happen before the first write call.\n this.sync = true;\n\n // a flag to know if we're processing previously buffered items, which\n // may call the _write() callback in the same tick, so that we don't\n // end up in an overlapped onwrite situation.\n this.bufferProcessing = false;\n\n // the callback that's passed to _write(chunk,cb)\n this.onwrite = function (er) {\n onwrite(stream, er);\n };\n\n // the callback that the user supplies to write(chunk,encoding,cb)\n this.writecb = null;\n\n // the amount that is being written when _write is called.\n this.writelen = 0;\n\n this.bufferedRequest = null;\n this.lastBufferedRequest = null;\n\n // number of pending user-supplied write callbacks\n // this must be 0 before 'finish' can be emitted\n this.pendingcb = 0;\n\n // emit prefinish if the only thing we're waiting for is _write cbs\n // This is relevant for synchronous Transform streams\n this.prefinished = false;\n\n // True if the error was already emitted and should not be thrown again\n this.errorEmitted = false;\n\n // count buffered requests\n this.bufferedRequestCount = 0;\n\n // allocate the first CorkedRequest, there is always\n // one allocated and free to use, and we maintain at most two\n this.corkedRequestsFree = new CorkedRequest(this);\n}\n\nWritableState.prototype.getBuffer = function getBuffer() {\n var current = this.bufferedRequest;\n var out = [];\n while (current) {\n out.push(current);\n current = current.next;\n }\n return out;\n};\n\n(function () {\n try {\n Object.defineProperty(WritableState.prototype, 'buffer', {\n get: internalUtil.deprecate(function () {\n return this.getBuffer();\n }, '_writableState.buffer is deprecated. Use _writableState.getBuffer ' + 'instead.', 'DEP0003')\n });\n } catch (_) {}\n})();\n\n// Test _writableState for inheritance to account for Duplex streams,\n// whose prototype chain only points to Readable.\nvar realHasInstance;\nif (typeof Symbol === 'function' && Symbol.hasInstance && typeof Function.prototype[Symbol.hasInstance] === 'function') {\n realHasInstance = Function.prototype[Symbol.hasInstance];\n Object.defineProperty(Writable, Symbol.hasInstance, {\n value: function (object) {\n if (realHasInstance.call(this, object)) return true;\n if (this !== Writable) return false;\n\n return object && object._writableState instanceof WritableState;\n }\n });\n} else {\n realHasInstance = function (object) {\n return object instanceof this;\n };\n}\n\nfunction Writable(options) {\n Duplex = Duplex || require('./_stream_duplex');\n\n // Writable ctor is applied to Duplexes, too.\n // `realHasInstance` is necessary because using plain `instanceof`\n // would return false, as no `_writableState` property is attached.\n\n // Trying to use the custom `instanceof` for Writable here will also break the\n // Node.js LazyTransform implementation, which has a non-trivial getter for\n // `_writableState` that would lead to infinite recursion.\n if (!realHasInstance.call(Writable, this) && !(this instanceof Duplex)) {\n return new Writable(options);\n }\n\n this._writableState = new WritableState(options, this);\n\n // legacy.\n this.writable = true;\n\n if (options) {\n if (typeof options.write === 'function') this._write = options.write;\n\n if (typeof options.writev === 'function') this._writev = options.writev;\n\n if (typeof options.destroy === 'function') this._destroy = options.destroy;\n\n if (typeof options.final === 'function') this._final = options.final;\n }\n\n Stream.call(this);\n}\n\n// Otherwise people can pipe Writable streams, which is just wrong.\nWritable.prototype.pipe = function () {\n this.emit('error', new Error('Cannot pipe, not readable'));\n};\n\nfunction writeAfterEnd(stream, cb) {\n var er = new Error('write after end');\n // TODO: defer error events consistently everywhere, not just the cb\n stream.emit('error', er);\n pna.nextTick(cb, er);\n}\n\n// Checks that a user-supplied chunk is valid, especially for the particular\n// mode the stream is in. Currently this means that `null` is never accepted\n// and undefined/non-string values are only allowed in object mode.\nfunction validChunk(stream, state, chunk, cb) {\n var valid = true;\n var er = false;\n\n if (chunk === null) {\n er = new TypeError('May not write null values to stream');\n } else if (typeof chunk !== 'string' && chunk !== undefined && !state.objectMode) {\n er = new TypeError('Invalid non-string/buffer chunk');\n }\n if (er) {\n stream.emit('error', er);\n pna.nextTick(cb, er);\n valid = false;\n }\n return valid;\n}\n\nWritable.prototype.write = function (chunk, encoding, cb) {\n var state = this._writableState;\n var ret = false;\n var isBuf = !state.objectMode && _isUint8Array(chunk);\n\n if (isBuf && !Buffer.isBuffer(chunk)) {\n chunk = _uint8ArrayToBuffer(chunk);\n }\n\n if (typeof encoding === 'function') {\n cb = encoding;\n encoding = null;\n }\n\n if (isBuf) encoding = 'buffer';else if (!encoding) encoding = state.defaultEncoding;\n\n if (typeof cb !== 'function') cb = nop;\n\n if (state.ended) writeAfterEnd(this, cb);else if (isBuf || validChunk(this, state, chunk, cb)) {\n state.pendingcb++;\n ret = writeOrBuffer(this, state, isBuf, chunk, encoding, cb);\n }\n\n return ret;\n};\n\nWritable.prototype.cork = function () {\n var state = this._writableState;\n\n state.corked++;\n};\n\nWritable.prototype.uncork = function () {\n var state = this._writableState;\n\n if (state.corked) {\n state.corked--;\n\n if (!state.writing && !state.corked && !state.finished && !state.bufferProcessing && state.bufferedRequest) clearBuffer(this, state);\n }\n};\n\nWritable.prototype.setDefaultEncoding = function setDefaultEncoding(encoding) {\n // node::ParseEncoding() requires lower case.\n if (typeof encoding === 'string') encoding = encoding.toLowerCase();\n if (!(['hex', 'utf8', 'utf-8', 'ascii', 'binary', 'base64', 'ucs2', 'ucs-2', 'utf16le', 'utf-16le', 'raw'].indexOf((encoding + '').toLowerCase()) > -1)) throw new TypeError('Unknown encoding: ' + encoding);\n this._writableState.defaultEncoding = encoding;\n return this;\n};\n\nfunction decodeChunk(state, chunk, encoding) {\n if (!state.objectMode && state.decodeStrings !== false && typeof chunk === 'string') {\n chunk = Buffer.from(chunk, encoding);\n }\n return chunk;\n}\n\nObject.defineProperty(Writable.prototype, 'writableHighWaterMark', {\n // making it explicit this property is not enumerable\n // because otherwise some prototype manipulation in\n // userland will fail\n enumerable: false,\n get: function () {\n return this._writableState.highWaterMark;\n }\n});\n\n// if we're already writing something, then just put this\n// in the queue, and wait our turn. Otherwise, call _write\n// If we return false, then we need a drain event, so set that flag.\nfunction writeOrBuffer(stream, state, isBuf, chunk, encoding, cb) {\n if (!isBuf) {\n var newChunk = decodeChunk(state, chunk, encoding);\n if (chunk !== newChunk) {\n isBuf = true;\n encoding = 'buffer';\n chunk = newChunk;\n }\n }\n var len = state.objectMode ? 1 : chunk.length;\n\n state.length += len;\n\n var ret = state.length < state.highWaterMark;\n // we must ensure that previous needDrain will not be reset to false.\n if (!ret) state.needDrain = true;\n\n if (state.writing || state.corked) {\n var last = state.lastBufferedRequest;\n state.lastBufferedRequest = {\n chunk: chunk,\n encoding: encoding,\n isBuf: isBuf,\n callback: cb,\n next: null\n };\n if (last) {\n last.next = state.lastBufferedRequest;\n } else {\n state.bufferedRequest = state.lastBufferedRequest;\n }\n state.bufferedRequestCount += 1;\n } else {\n doWrite(stream, state, false, len, chunk, encoding, cb);\n }\n\n return ret;\n}\n\nfunction doWrite(stream, state, writev, len, chunk, encoding, cb) {\n state.writelen = len;\n state.writecb = cb;\n state.writing = true;\n state.sync = true;\n if (writev) stream._writev(chunk, state.onwrite);else stream._write(chunk, encoding, state.onwrite);\n state.sync = false;\n}\n\nfunction onwriteError(stream, state, sync, er, cb) {\n --state.pendingcb;\n\n if (sync) {\n // defer the callback if we are being called synchronously\n // to avoid piling up things on the stack\n pna.nextTick(cb, er);\n // this can emit finish, and it will always happen\n // after error\n pna.nextTick(finishMaybe, stream, state);\n stream._writableState.errorEmitted = true;\n stream.emit('error', er);\n } else {\n // the caller expect this to happen before if\n // it is async\n cb(er);\n stream._writableState.errorEmitted = true;\n stream.emit('error', er);\n // this can emit finish, but finish must\n // always follow error\n finishMaybe(stream, state);\n }\n}\n\nfunction onwriteStateUpdate(state) {\n state.writing = false;\n state.writecb = null;\n state.length -= state.writelen;\n state.writelen = 0;\n}\n\nfunction onwrite(stream, er) {\n var state = stream._writableState;\n var sync = state.sync;\n var cb = state.writecb;\n\n onwriteStateUpdate(state);\n\n if (er) onwriteError(stream, state, sync, er, cb);else {\n // Check if we're actually ready to finish, but don't emit yet\n var finished = needFinish(state);\n\n if (!finished && !state.corked && !state.bufferProcessing && state.bufferedRequest) {\n clearBuffer(stream, state);\n }\n\n if (sync) {\n /*<replacement>*/\n asyncWrite(afterWrite, stream, state, finished, cb);\n /*</replacement>*/\n } else {\n afterWrite(stream, state, finished, cb);\n }\n }\n}\n\nfunction afterWrite(stream, state, finished, cb) {\n if (!finished) onwriteDrain(stream, state);\n state.pendingcb--;\n cb();\n finishMaybe(stream, state);\n}\n\n// Must force callback to be called on nextTick, so that we don't\n// emit 'drain' before the write() consumer gets the 'false' return\n// value, and has a chance to attach a 'drain' listener.\nfunction onwriteDrain(stream, state) {\n if (state.length === 0 && state.needDrain) {\n state.needDrain = false;\n stream.emit('drain');\n }\n}\n\n// if there's something in the buffer waiting, then process it\nfunction clearBuffer(stream, state) {\n state.bufferProcessing = true;\n var entry = state.bufferedRequest;\n\n if (stream._writev && entry && entry.next) {\n // Fast case, write everything using _writev()\n var l = state.bufferedRequestCount;\n var buffer = new Array(l);\n var holder = state.corkedRequestsFree;\n holder.entry = entry;\n\n var count = 0;\n var allBuffers = true;\n while (entry) {\n buffer[count] = entry;\n if (!entry.isBuf) allBuffers = false;\n entry = entry.next;\n count += 1;\n }\n buffer.allBuffers = allBuffers;\n\n doWrite(stream, state, true, state.length, buffer, '', holder.finish);\n\n // doWrite is almost always async, defer these to save a bit of time\n // as the hot path ends with doWrite\n state.pendingcb++;\n state.lastBufferedRequest = null;\n if (holder.next) {\n state.corkedRequestsFree = holder.next;\n holder.next = null;\n } else {\n state.corkedRequestsFree = new CorkedRequest(state);\n }\n state.bufferedRequestCount = 0;\n } else {\n // Slow case, write chunks one-by-one\n while (entry) {\n var chunk = entry.chunk;\n var encoding = entry.encoding;\n var cb = entry.callback;\n var len = state.objectMode ? 1 : chunk.length;\n\n doWrite(stream, state, false, len, chunk, encoding, cb);\n entry = entry.next;\n state.bufferedRequestCount--;\n // if we didn't call the onwrite immediately, then\n // it means that we need to wait until it does.\n // also, that means that the chunk and cb are currently\n // being processed, so move the buffer counter past them.\n if (state.writing) {\n break;\n }\n }\n\n if (entry === null) state.lastBufferedRequest = null;\n }\n\n state.bufferedRequest = entry;\n state.bufferProcessing = false;\n}\n\nWritable.prototype._write = function (chunk, encoding, cb) {\n cb(new Error('_write() is not implemented'));\n};\n\nWritable.prototype._writev = null;\n\nWritable.prototype.end = function (chunk, encoding, cb) {\n var state = this._writableState;\n\n if (typeof chunk === 'function') {\n cb = chunk;\n chunk = null;\n encoding = null;\n } else if (typeof encoding === 'function') {\n cb = encoding;\n encoding = null;\n }\n\n if (chunk !== null && chunk !== undefined) this.write(chunk, encoding);\n\n // .end() fully uncorks\n if (state.corked) {\n state.corked = 1;\n this.uncork();\n }\n\n // ignore unnecessary end() calls.\n if (!state.ending && !state.finished) endWritable(this, state, cb);\n};\n\nfunction needFinish(state) {\n return state.ending && state.length === 0 && state.bufferedRequest === null && !state.finished && !state.writing;\n}\nfunction callFinal(stream, state) {\n stream._final(function (err) {\n state.pendingcb--;\n if (err) {\n stream.emit('error', err);\n }\n state.prefinished = true;\n stream.emit('prefinish');\n finishMaybe(stream, state);\n });\n}\nfunction prefinish(stream, state) {\n if (!state.prefinished && !state.finalCalled) {\n if (typeof stream._final === 'function') {\n state.pendingcb++;\n state.finalCalled = true;\n pna.nextTick(callFinal, stream, state);\n } else {\n state.prefinished = true;\n stream.emit('prefinish');\n }\n }\n}\n\nfunction finishMaybe(stream, state) {\n var need = needFinish(state);\n if (need) {\n prefinish(stream, state);\n if (state.pendingcb === 0) {\n state.finished = true;\n stream.emit('finish');\n }\n }\n return need;\n}\n\nfunction endWritable(stream, state, cb) {\n state.ending = true;\n finishMaybe(stream, state);\n if (cb) {\n if (state.finished) pna.nextTick(cb);else stream.once('finish', cb);\n }\n state.ended = true;\n stream.writable = false;\n}\n\nfunction onCorkedFinish(corkReq, state, err) {\n var entry = corkReq.entry;\n corkReq.entry = null;\n while (entry) {\n var cb = entry.callback;\n state.pendingcb--;\n cb(err);\n entry = entry.next;\n }\n if (state.corkedRequestsFree) {\n state.corkedRequestsFree.next = corkReq;\n } else {\n state.corkedRequestsFree = corkReq;\n }\n}\n\nObject.defineProperty(Writable.prototype, 'destroyed', {\n get: function () {\n if (this._writableState === undefined) {\n return false;\n }\n return this._writableState.destroyed;\n },\n set: function (value) {\n // we ignore the value if the stream\n // has not been initialized yet\n if (!this._writableState) {\n return;\n }\n\n // backward compatibility, the user is explicitly\n // managing destroyed\n this._writableState.destroyed = value;\n }\n});\n\nWritable.prototype.destroy = destroyImpl.destroy;\nWritable.prototype._undestroy = destroyImpl.undestroy;\nWritable.prototype._destroy = function (err, cb) {\n this.end();\n cb(err);\n};","//\r\n// EventEmitter class - This class provides simple event functionality for classes, with Promise support.\r\n//\r\n//\tUsage for once-off event listeners:\r\n//\r\n//\t\tmyObj.when(\"closed\").then(function(data) {\r\n//\t\t\talert(\"Closed! \" + data);\r\n//\t\t});\r\n//\r\n//\r\n//\tUsage for permanent event listeners:\r\n//\r\n//\t\tmyObj.on(\"closed\", function(data) {\r\n//\t\t\talert(\"Closed! \" + data);\r\n//\t\t});\r\n//\r\n//\r\n//\tUsage when triggering an event from a subclass:\r\n//\r\n//\t\tthis.emit(\"closed\", \"customData\");\r\n//\r\n\r\nexport default class EventEmitter {\r\n\r\n\r\n\t/** Adds an event listener. If callback is null, a Promise will be returned. Note that if using the Promise\r\n\t * it will only be triggered on the first event emitted. */\r\n\twhen(eventName, callback = null) {\r\n\r\n\t\t// Make sure event listener object exists\r\n\t\tthis._eventListeners = this._eventListeners || {};\r\n\r\n\t\t// Make sure event listener array exists\r\n\t\tthis._eventListeners[eventName] = this._eventListeners[eventName] || [];\r\n\r\n\t\t// Check if using promise form\r\n\t\tif (callback) {\r\n\r\n\t\t\t// Just add the callback\r\n\t\t\tthis._eventListeners[eventName].push(callback);\r\n\r\n\t\t} else {\r\n\r\n\t\t\t// Return the promise\r\n\t\t\treturn new Promise((onSuccess, onFail) => {\r\n\r\n\t\t\t\t// Promise callbacks can only be used once\r\n\t\t\t\tonSuccess._removeAfterCall = true;\r\n\r\n\t\t\t\t// Add success handler to event listener array\r\n\t\t\t\tthis._eventListeners[eventName].push(onSuccess);\r\n\r\n\t\t\t});\r\n\r\n\t\t}\r\n\r\n\t}\r\n\r\n\t/** Synonyms */\r\n\ton() {\r\n\t\treturn this.when.apply(this, arguments);\r\n\t}\r\n\r\n\taddEventListener() {\r\n\t\treturn this.when.apply(this, arguments);\r\n\t}\r\n\r\n\r\n\r\n /** Remove event listener */\r\n removeEventListener(eventName, callback) {\r\n\r\n\t\t// Make sure event listener object exists\r\n\t\tthis._eventListeners = this._eventListeners || {};\r\n\r\n\t\t// Make sure event listener array exists\r\n\t\tthis._eventListeners[eventName] = this._eventListeners[eventName] || [];\r\n\r\n // Find and remove it\r\n for (var i = 0 ; i < this._eventListeners[eventName].length ; i++)\r\n if (this._eventListeners[eventName][i] == callback)\r\n this._eventListeners[eventName].splice(i--, 1)\r\n\r\n }\r\n\r\n off() {\r\n return this.removeEventListener.apply(this, arguments);\r\n }\r\n\r\n\r\n\r\n\r\n\t/** Triggers an event. Each argument after the first one will be passed to event listeners */\r\n\temit(eventName, ...args) {\r\n\r\n\t\t// Setup the once-off promise if one of it's events were triggered\r\n\t\t//if (eventName == \"success\" || eventName == \"failed\")\r\n\t\t//\tthis._setupPromise();\r\n\r\n\t\t// Get list of callbacks\r\n\t\tvar callbacks = this._eventListeners && this._eventListeners[eventName] || [];\r\n\r\n\t\t// Call events\r\n\t\tfor (var callback of callbacks) {\r\n\r\n\t\t\t// Call it\r\n\t\t\tcallback.apply(this, args);\r\n\r\n\t\t}\r\n\r\n\t\t// Remove callbacks that can only be called once\r\n\t\tfor (var i = 0 ; i < callbacks.length ; i++)\r\n\t\t\tif (callbacks[i]._removeAfterCall)\r\n\t\t\t\tcallbacks.splice(i--, 1);\r\n\r\n\t}\r\n\r\n\t/** Synonyms */\r\n\ttrigger() {\r\n\t\treturn this.emit.apply(this, arguments);\r\n\t}\r\n\r\n\ttriggerEvent() {\r\n\t\treturn this.emit.apply(this, arguments);\r\n\t}\r\n\r\n}\r\n\r\n// Apply as a mixin to a class or object\r\nEventEmitter.mixin = function(otherClass) {\r\n\r\n\tfor (var prop in EventEmitter.prototype)\r\n\t\tif (EventEmitter.prototype.hasOwnProperty(prop))\r\n\t\t\totherClass[prop] = EventEmitter.prototype[prop];\r\n\r\n}\r\n","/* gloabl Events */\nimport BLOCKvRegion from './BLOCKvRegion'\nimport DataObject from '../DataObject'\nimport Events from '../EventEmitter'\n\n/**\n * This region plugin provides access to a collection of vatoms that has been dropped within the specified region on the map.\n *\n * To get an instance, call `DataPool.region('geopos', { top_right: { lat: ..., lon: ... }, bottom_left: { lat: ..., lon: ... } })`\n */\nexport default class GeoPosRegion extends BLOCKvRegion {\n\n /** Plugin ID */\n static get id () { return 'geopos' }\n\n /** Constructor */\n constructor (dataPool, coordinates) {\n super(dataPool)\n\n // Don't cache this content\n this.noCache = true\n\n // Fail if coordinates are invalid\n if (!coordinates || !coordinates.top_right || !coordinates.top_right.lat || !coordinates.top_right.lon || !coordinates.bottom_left || !coordinates.bottom_left.lat || !coordinates.bottom_left.lon) {\n throw new Error('Please specify the top_right and bottom_left coordinates in the region descriptor.')\n }\n\n // Store coordinates\n this.coordinates = coordinates\n\n // Send region command to the WebSocket\n this.sendRegionCommand()\n\n // Listen for events\n this.onWebSocketOpen = this.onWebSocketOpen.bind(this)\n this.socket.addEventListener('connected', this.onWebSocketOpen)\n\n // Start refresh timer\n this.timer = setInterval(this.onTimer.bind(this), 30000)\n\n }\n\n /** Called when this region is going to be shut down */\n close () {\n super.close()\n\n // Remove listeners\n this.socket.removeEventListener('connected', this.onWebSocketOpen)\n\n // Remove timer\n clearInterval(this.timer)\n\n }\n\n /** Called on timer */\n onTimer() {\n this.forceSynchronize()\n }\n\n /** Called when the WebSocket connection re-opens */\n onWebSocketOpen () {\n\n // Full refresh this region, in case any messages were missed\n this.forceSynchronize()\n\n // Send region command again\n this.sendRegionCommand()\n\n }\n\n /** Sends the region command up the websocket to enable region monitoring */\n sendRegionCommand () {\n\n // Stop if WebSocket is not connected\n if (!this.socket.isOpen)\n return\n\n // Convert our coordinates into the ones needed by the command\n let topLeft = {\n lat: Math.max(this.coordinates.top_right.lat, this.coordinates.bottom_left.lat),\n lon: Math.min(this.coordinates.top_right.lon, this.coordinates.bottom_left.lon)\n }\n let bottomRight = {\n lat: Math.min(this.coordinates.top_right.lat, this.coordinates.bottom_left.lat),\n lon: Math.max(this.coordinates.top_right.lon, this.coordinates.bottom_left.lon)\n }\n\n // Create command payload\n let cmd = {\n id: '1',\n version: '1',\n type: 'command',\n cmd: 'monitor',\n payload: {\n top_left: topLeft,\n bottom_right: bottomRight\n }\n }\n\n // Send it up\n console.log('Sending WS command: ' + JSON.stringify(cmd))\n this.dataPool.Blockv.WebSockets.sendMessage(cmd)\n\n }\n\n /**\n * Returns true if the object with the specified ID exists in the cache.\n *\n * @param {*} id The object's ID\n * @returns {boolean} True if the object exists.\n */\n has (id) {\n\n // Check super implementation\n if(!super.has(id))\n return false\n \n // Check if dropped\n let object = this.objects.get(id)\n let props = object.data['vAtom::vAtomType'] || {}\n if (props.dropped && props.geo_pos && props.geo_pos.coordinates && props.geo_pos.coordinates[0])\n return true\n\n }\n\n /** Our state key is the region */\n get stateKey () {\n return 'geopos:' + this.coordinates.top_right.lat + ',' + this.coordinates.top_right.lon + ' ' + this.coordinates.bottom_left.lat + ',' + this.coordinates.bottom_left.lon\n }\n\n /** Check if a region request matches our region */\n matches (id, descriptor) {\n // Check all filters match\n if (id !== 'geopos') return false\n if (!descriptor || !descriptor.top_right || !descriptor.bottom_left) return false\n if (descriptor.top_right.lat !== this.coordinates.top_right.lat) return false\n if (descriptor.top_right.lon !== this.coordinates.top_right.lon) return false\n if (descriptor.bottom_left.lat !== this.coordinates.bottom_left.lat) return false\n if (descriptor.bottom_left.lon !== this.coordinates.bottom_left.lon) return false\n\n // Yes they do\n return true\n }\n\n /** Load current state from the server */\n async load () {\n // Pause websocket events\n this.pauseMessages()\n\n let payload = {\n top_right: this.coordinates.top_right,\n bottom_left: this.coordinates.bottom_left,\n filter: 'all',\n limit: 10000\n }\n\n if (this.coordinates.publisher_fqdn)\n payload['publisher_fqdn'] = this.coordinates.publisher_fqdn\n // Fetch data\n let response = await this.dataPool.Blockv.client.request('POST', '/v1/vatom/geodiscover', payload, true)\n\n // Add vatom to new objects list\n let objects = []\n response.vatoms.map(v => new DataObject('vatom', v.id, v)).forEach(f => objects.push(f))\n\n // Add faces to new objects list\n response.faces.map(f => new DataObject('face', f.id, f)).forEach(f => objects.push(f))\n\n // Add actions to new objects list\n response.actions.map(a => new DataObject('action', a.name, a)).forEach(a => objects.push(a))\n\n // Add new objects\n this.addObjects(objects)\n\n // Resume websocket messages\n this.resumeMessages()\n\n // Return array of IDs\n return objects.map(o => o.id)\n }\n\n /** This region type should not be cached */\n save () {}\n\n /** Override to only return dropped vatoms */\n map (object) {\n\n // Check FQDN filter\n if(this.coordinates.publisher_fqdn && object.data && object.data['vAtom::vAtomType'] && object.data['vAtom::vAtomType'].publisher_fqdn !== this.coordinates.publisher_fqdn)\n return null\n \n // Check if dropped\n let props = object.data['vAtom::vAtomType'] || {}\n if (props.dropped && props.geo_pos && props.geo_pos.coordinates && props.geo_pos.coordinates[0])\n return super.map(object)\n \n // Vatom is not dropped!\n return null\n\n }\n\n /**\n * Processes a WebSocket message.\n *\n * @private Called by BVWebSocketRegion.\n * @abstract Subclasses can override to process other WebSocket messages. Always call super.processMessage(msg) though.\n * @param {Object} msg The raw JSON from the websocket event message\n */\n async processMessage(msg) {\n super.processMessage(msg)\n\n // Check for map add event\n if (msg.msg_type === 'map' && msg.payload.op === 'add') {\n\n // A vatom was added to the map. Fetch vatom, add components to data pool\n let objects = []\n let response = await this.dataPool.Blockv.client.request('POST', '/v1/user/vatom/get', { ids: [msg.payload.vatom_id] }, true)\n let vatom = new DataObject('vatom', response.vatoms[0].id, response.vatoms[0])\n objects.push(vatom)\n response.faces.map(f => new DataObject('face', f.id, f)).forEach(f => objects.push(f))\n response.actions.map(a => new DataObject('action', a.name, a)).forEach(a => objects.push(a))\n this.addObjects(objects)\n return\n\n } else if (msg.msg_type === 'map' && msg.payload.op === 'remove') {\n\n // A vatom was removed from the map. Undrop it\n this.preemptiveChange(msg.payload.vatom_id, 'vAtom::vAtomType.dropped', false)\n return\n\n } else if (msg.msg_type == 'state_update') {\n\n // Get vatom ID\n let vatomID = msg.payload && msg.payload.id\n if (!vatomID) {\n throw new Error(`Got websocket message with no vatom ID in it.`)\n }\n\n // Check if this is a newly dropped vatom\n let dropped = msg.payload.new_object && msg.payload.new_object['vAtom::vAtomType'] && msg.payload.new_object['vAtom::vAtomType'].dropped\n if (!dropped) {\n return\n }\n\n // Check if we already have this vatom\n if (this.objects.get(vatomID)) {\n return\n }\n\n // A new vatom was dropped! Pause WebSocket message processing\n this.pauseMessages()\n\n // Fetch vatom payload\n this.dataPool.Blockv.client.request('POST', '/v1/user/vatom/get', { ids: [vatomID] }, true).then(response => {\n // Add vatom to new objects list\n let objects = []\n objects.push(new DataObject('vatom', response.vatoms[0].id, response.vatoms[0]))\n\n // Add faces to new objects list\n response.faces.map(f => new DataObject('face', f.id, f)).forEach(f => objects.push(f))\n\n // Add actions to new objects list\n response.actions.map(a => new DataObject('action', a.name, a)).forEach(a => objects.push(a))\n\n // Add new objects\n this.addObjects(objects)\n }).catch(err => {\n // Log it\n console.warn(`[DataPool > GeoPosRegion] A vatom was dropped, but we could not fetch it's payload! ` + err.message)\n }).then(e => {\n // Resume message processing\n this.resumeMessages()\n })\n\n }\n }\n}\n","module.exports = !require('./_descriptors') && !require('./_fails')(function () {\n return Object.defineProperty(require('./_dom-create')('div'), 'a', { get: function () { return 7; } }).a != 7;\n});\n","var global = require('./_global');\nvar core = require('./_core');\nvar LIBRARY = require('./_library');\nvar wksExt = require('./_wks-ext');\nvar defineProperty = require('./_object-dp').f;\nmodule.exports = function (name) {\n var $Symbol = core.Symbol || (core.Symbol = LIBRARY ? {} : global.Symbol || {});\n if (name.charAt(0) != '_' && !(name in $Symbol)) defineProperty($Symbol, name, { value: wksExt.f(name) });\n};\n","var has = require('./_has');\nvar toIObject = require('./_to-iobject');\nvar arrayIndexOf = require('./_array-includes')(false);\nvar IE_PROTO = require('./_shared-key')('IE_PROTO');\n\nmodule.exports = function (object, names) {\n var O = toIObject(object);\n var i = 0;\n var result = [];\n var key;\n for (key in O) if (key != IE_PROTO) has(O, key) && result.push(key);\n // Don't enum bug & hidden keys\n while (names.length > i) if (has(O, key = names[i++])) {\n ~arrayIndexOf(result, key) || result.push(key);\n }\n return result;\n};\n","var dP = require('./_object-dp');\nvar anObject = require('./_an-object');\nvar getKeys = require('./_object-keys');\n\nmodule.exports = require('./_descriptors') ? Object.defineProperties : function defineProperties(O, Properties) {\n anObject(O);\n var keys = getKeys(Properties);\n var length = keys.length;\n var i = 0;\n var P;\n while (length > i) dP.f(O, P = keys[i++], Properties[P]);\n return O;\n};\n","// fallback for IE11 buggy Object.getOwnPropertyNames with iframe and window\nvar toIObject = require('./_to-iobject');\nvar gOPN = require('./_object-gopn').f;\nvar toString = {}.toString;\n\nvar windowNames = typeof window == 'object' && window && Object.getOwnPropertyNames\n ? Object.getOwnPropertyNames(window) : [];\n\nvar getWindowNames = function (it) {\n try {\n return gOPN(it);\n } catch (e) {\n return windowNames.slice();\n }\n};\n\nmodule.exports.f = function getOwnPropertyNames(it) {\n return windowNames && toString.call(it) == '[object Window]' ? getWindowNames(it) : gOPN(toIObject(it));\n};\n","'use strict';\n// 19.1.2.1 Object.assign(target, source, ...)\nvar DESCRIPTORS = require('./_descriptors');\nvar getKeys = require('./_object-keys');\nvar gOPS = require('./_object-gops');\nvar pIE = require('./_object-pie');\nvar toObject = require('./_to-object');\nvar IObject = require('./_iobject');\nvar $assign = Object.assign;\n\n// should work with symbols and should have deterministic property order (V8 bug)\nmodule.exports = !$assign || require('./_fails')(function () {\n var A = {};\n var B = {};\n // eslint-disable-next-line no-undef\n var S = Symbol();\n var K = 'abcdefghijklmnopqrst';\n A[S] = 7;\n K.split('').forEach(function (k) { B[k] = k; });\n return $assign({}, A)[S] != 7 || Object.keys($assign({}, B)).join('') != K;\n}) ? function assign(target, source) { // eslint-disable-line no-unused-vars\n var T = toObject(target);\n var aLen = arguments.length;\n var index = 1;\n var getSymbols = gOPS.f;\n var isEnum = pIE.f;\n while (aLen > index) {\n var S = IObject(arguments[index++]);\n var keys = getSymbols ? getKeys(S).concat(getSymbols(S)) : getKeys(S);\n var length = keys.length;\n var j = 0;\n var key;\n while (length > j) {\n key = keys[j++];\n if (!DESCRIPTORS || isEnum.call(S, key)) T[key] = S[key];\n }\n } return T;\n} : $assign;\n","// 7.2.9 SameValue(x, y)\nmodule.exports = Object.is || function is(x, y) {\n // eslint-disable-next-line no-self-compare\n return x === y ? x !== 0 || 1 / x === 1 / y : x != x && y != y;\n};\n","'use strict';\nvar aFunction = require('./_a-function');\nvar isObject = require('./_is-object');\nvar invoke = require('./_invoke');\nvar arraySlice = [].slice;\nvar factories = {};\n\nvar construct = function (F, len, args) {\n if (!(len in factories)) {\n for (var n = [], i = 0; i < len; i++) n[i] = 'a[' + i + ']';\n // eslint-disable-next-line no-new-func\n factories[len] = Function('F,a', 'return new F(' + n.join(',') + ')');\n } return factories[len](F, args);\n};\n\nmodule.exports = Function.bind || function bind(that /* , ...args */) {\n var fn = aFunction(this);\n var partArgs = arraySlice.call(arguments, 1);\n var bound = function (/* args... */) {\n var args = partArgs.concat(arraySlice.call(arguments));\n return this instanceof bound ? construct(fn, args.length, args) : invoke(fn, args, that);\n };\n if (isObject(fn.prototype)) bound.prototype = fn.prototype;\n return bound;\n};\n","// fast apply, http://jsperf.lnkit.com/fast-apply/5\nmodule.exports = function (fn, args, that) {\n var un = that === undefined;\n switch (args.length) {\n case 0: return un ? fn()\n : fn.call(that);\n case 1: return un ? fn(args[0])\n : fn.call(that, args[0]);\n case 2: return un ? fn(args[0], args[1])\n : fn.call(that, args[0], args[1]);\n case 3: return un ? fn(args[0], args[1], args[2])\n : fn.call(that, args[0], args[1], args[2]);\n case 4: return un ? fn(args[0], args[1], args[2], args[3])\n : fn.call(that, args[0], args[1], args[2], args[3]);\n } return fn.apply(that, args);\n};\n","var $parseInt = require('./_global').parseInt;\nvar $trim = require('./_string-trim').trim;\nvar ws = require('./_string-ws');\nvar hex = /^[-+]?0[xX]/;\n\nmodule.exports = $parseInt(ws + '08') !== 8 || $parseInt(ws + '0x16') !== 22 ? function parseInt(str, radix) {\n var string = $trim(String(str), 3);\n return $parseInt(string, (radix >>> 0) || (hex.test(string) ? 16 : 10));\n} : $parseInt;\n","var $parseFloat = require('./_global').parseFloat;\nvar $trim = require('./_string-trim').trim;\n\nmodule.exports = 1 / $parseFloat(require('./_string-ws') + '-0') !== -Infinity ? function parseFloat(str) {\n var string = $trim(String(str), 3);\n var result = $parseFloat(string);\n return result === 0 && string.charAt(0) == '-' ? -0 : result;\n} : $parseFloat;\n","var cof = require('./_cof');\nmodule.exports = function (it, msg) {\n if (typeof it != 'number' && cof(it) != 'Number') throw TypeError(msg);\n return +it;\n};\n","// 20.1.2.3 Number.isInteger(number)\nvar isObject = require('./_is-object');\nvar floor = Math.floor;\nmodule.exports = function isInteger(it) {\n return !isObject(it) && isFinite(it) && floor(it) === it;\n};\n","// 20.2.2.20 Math.log1p(x)\nmodule.exports = Math.log1p || function log1p(x) {\n return (x = +x) > -1e-8 && x < 1e-8 ? x - x * x / 2 : Math.log(1 + x);\n};\n","'use strict';\nvar create = require('./_object-create');\nvar descriptor = require('./_property-desc');\nvar setToStringTag = require('./_set-to-string-tag');\nvar IteratorPrototype = {};\n\n// 25.1.2.1.1 %IteratorPrototype%[@@iterator]()\nrequire('./_hide')(IteratorPrototype, require('./_wks')('iterator'), function () { return this; });\n\nmodule.exports = function (Constructor, NAME, next) {\n Constructor.prototype = create(IteratorPrototype, { next: descriptor(1, next) });\n setToStringTag(Constructor, NAME + ' Iterator');\n};\n","// call something on iterator step with safe closing on error\nvar anObject = require('./_an-object');\nmodule.exports = function (iterator, fn, value, entries) {\n try {\n return entries ? fn(anObject(value)[0], value[1]) : fn(value);\n // 7.4.6 IteratorClose(iterator, completion)\n } catch (e) {\n var ret = iterator['return'];\n if (ret !== undefined) anObject(ret.call(iterator));\n throw e;\n }\n};\n","// 9.4.2.3 ArraySpeciesCreate(originalArray, length)\nvar speciesConstructor = require('./_array-species-constructor');\n\nmodule.exports = function (original, length) {\n return new (speciesConstructor(original))(length);\n};\n","var aFunction = require('./_a-function');\nvar toObject = require('./_to-object');\nvar IObject = require('./_iobject');\nvar toLength = require('./_to-length');\n\nmodule.exports = function (that, callbackfn, aLen, memo, isRight) {\n aFunction(callbackfn);\n var O = toObject(that);\n var self = IObject(O);\n var length = toLength(O.length);\n var index = isRight ? length - 1 : 0;\n var i = isRight ? -1 : 1;\n if (aLen < 2) for (;;) {\n if (index in self) {\n memo = self[index];\n index += i;\n break;\n }\n index += i;\n if (isRight ? index < 0 : length <= index) {\n throw TypeError('Reduce of empty array with no initial value');\n }\n }\n for (;isRight ? index >= 0 : length > index; index += i) if (index in self) {\n memo = callbackfn(memo, self[index], index, O);\n }\n return memo;\n};\n","// 22.1.3.3 Array.prototype.copyWithin(target, start, end = this.length)\n'use strict';\nvar toObject = require('./_to-object');\nvar toAbsoluteIndex = require('./_to-absolute-index');\nvar toLength = require('./_to-length');\n\nmodule.exports = [].copyWithin || function copyWithin(target /* = 0 */, start /* = 0, end = @length */) {\n var O = toObject(this);\n var len = toLength(O.length);\n var to = toAbsoluteIndex(target, len);\n var from = toAbsoluteIndex(start, len);\n var end = arguments.length > 2 ? arguments[2] : undefined;\n var count = Math.min((end === undefined ? len : toAbsoluteIndex(end, len)) - from, len - to);\n var inc = 1;\n if (from < to && to < from + count) {\n inc = -1;\n from += count - 1;\n to += count - 1;\n }\n while (count-- > 0) {\n if (from in O) O[to] = O[from];\n else delete O[to];\n to += inc;\n from += inc;\n } return O;\n};\n","module.exports = function (done, value) {\n return { value: value, done: !!done };\n};\n","'use strict';\nvar regexpExec = require('./_regexp-exec');\nrequire('./_export')({\n target: 'RegExp',\n proto: true,\n forced: regexpExec !== /./.exec\n}, {\n exec: regexpExec\n});\n","// 21.2.5.3 get RegExp.prototype.flags()\nif (require('./_descriptors') && /./g.flags != 'g') require('./_object-dp').f(RegExp.prototype, 'flags', {\n configurable: true,\n get: require('./_flags')\n});\n","'use strict';\nvar LIBRARY = require('./_library');\nvar global = require('./_global');\nvar ctx = require('./_ctx');\nvar classof = require('./_classof');\nvar $export = require('./_export');\nvar isObject = require('./_is-object');\nvar aFunction = require('./_a-function');\nvar anInstance = require('./_an-instance');\nvar forOf = require('./_for-of');\nvar speciesConstructor = require('./_species-constructor');\nvar task = require('./_task').set;\nvar microtask = require('./_microtask')();\nvar newPromiseCapabilityModule = require('./_new-promise-capability');\nvar perform = require('./_perform');\nvar userAgent = require('./_user-agent');\nvar promiseResolve = require('./_promise-resolve');\nvar PROMISE = 'Promise';\nvar TypeError = global.TypeError;\nvar process = global.process;\nvar versions = process && process.versions;\nvar v8 = versions && versions.v8 || '';\nvar $Promise = global[PROMISE];\nvar isNode = classof(process) == 'process';\nvar empty = function () { /* empty */ };\nvar Internal, newGenericPromiseCapability, OwnPromiseCapability, Wrapper;\nvar newPromiseCapability = newGenericPromiseCapability = newPromiseCapabilityModule.f;\n\nvar USE_NATIVE = !!function () {\n try {\n // correct subclassing with @@species support\n var promise = $Promise.resolve(1);\n var FakePromise = (promise.constructor = {})[require('./_wks')('species')] = function (exec) {\n exec(empty, empty);\n };\n // unhandled rejections tracking support, NodeJS Promise without it fails @@species test\n return (isNode || typeof PromiseRejectionEvent == 'function')\n && promise.then(empty) instanceof FakePromise\n // v8 6.6 (Node 10 and Chrome 66) have a bug with resolving custom thenables\n // https://bugs.chromium.org/p/chromium/issues/detail?id=830565\n // we can't detect it synchronously, so just check versions\n && v8.indexOf('6.6') !== 0\n && userAgent.indexOf('Chrome/66') === -1;\n } catch (e) { /* empty */ }\n}();\n\n// helpers\nvar isThenable = function (it) {\n var then;\n return isObject(it) && typeof (then = it.then) == 'function' ? then : false;\n};\nvar notify = function (promise, isReject) {\n if (promise._n) return;\n promise._n = true;\n var chain = promise._c;\n microtask(function () {\n var value = promise._v;\n var ok = promise._s == 1;\n var i = 0;\n var run = function (reaction) {\n var handler = ok ? reaction.ok : reaction.fail;\n var resolve = reaction.resolve;\n var reject = reaction.reject;\n var domain = reaction.domain;\n var result, then, exited;\n try {\n if (handler) {\n if (!ok) {\n if (promise._h == 2) onHandleUnhandled(promise);\n promise._h = 1;\n }\n if (handler === true) result = value;\n else {\n if (domain) domain.enter();\n result = handler(value); // may throw\n if (domain) {\n domain.exit();\n exited = true;\n }\n }\n if (result === reaction.promise) {\n reject(TypeError('Promise-chain cycle'));\n } else if (then = isThenable(result)) {\n then.call(result, resolve, reject);\n } else resolve(result);\n } else reject(value);\n } catch (e) {\n if (domain && !exited) domain.exit();\n reject(e);\n }\n };\n while (chain.length > i) run(chain[i++]); // variable length - can't use forEach\n promise._c = [];\n promise._n = false;\n if (isReject && !promise._h) onUnhandled(promise);\n });\n};\nvar onUnhandled = function (promise) {\n task.call(global, function () {\n var value = promise._v;\n var unhandled = isUnhandled(promise);\n var result, handler, console;\n if (unhandled) {\n result = perform(function () {\n if (isNode) {\n process.emit('unhandledRejection', value, promise);\n } else if (handler = global.onunhandledrejection) {\n handler({ promise: promise, reason: value });\n } else if ((console = global.console) && console.error) {\n console.error('Unhandled promise rejection', value);\n }\n });\n // Browsers should not trigger `rejectionHandled` event if it was handled here, NodeJS - should\n promise._h = isNode || isUnhandled(promise) ? 2 : 1;\n } promise._a = undefined;\n if (unhandled && result.e) throw result.v;\n });\n};\nvar isUnhandled = function (promise) {\n return promise._h !== 1 && (promise._a || promise._c).length === 0;\n};\nvar onHandleUnhandled = function (promise) {\n task.call(global, function () {\n var handler;\n if (isNode) {\n process.emit('rejectionHandled', promise);\n } else if (handler = global.onrejectionhandled) {\n handler({ promise: promise, reason: promise._v });\n }\n });\n};\nvar $reject = function (value) {\n var promise = this;\n if (promise._d) return;\n promise._d = true;\n promise = promise._w || promise; // unwrap\n promise._v = value;\n promise._s = 2;\n if (!promise._a) promise._a = promise._c.slice();\n notify(promise, true);\n};\nvar $resolve = function (value) {\n var promise = this;\n var then;\n if (promise._d) return;\n promise._d = true;\n promise = promise._w || promise; // unwrap\n try {\n if (promise === value) throw TypeError(\"Promise can't be resolved itself\");\n if (then = isThenable(value)) {\n microtask(function () {\n var wrapper = { _w: promise, _d: false }; // wrap\n try {\n then.call(value, ctx($resolve, wrapper, 1), ctx($reject, wrapper, 1));\n } catch (e) {\n $reject.call(wrapper, e);\n }\n });\n } else {\n promise._v = value;\n promise._s = 1;\n notify(promise, false);\n }\n } catch (e) {\n $reject.call({ _w: promise, _d: false }, e); // wrap\n }\n};\n\n// constructor polyfill\nif (!USE_NATIVE) {\n // 25.4.3.1 Promise(executor)\n $Promise = function Promise(executor) {\n anInstance(this, $Promise, PROMISE, '_h');\n aFunction(executor);\n Internal.call(this);\n try {\n executor(ctx($resolve, this, 1), ctx($reject, this, 1));\n } catch (err) {\n $reject.call(this, err);\n }\n };\n // eslint-disable-next-line no-unused-vars\n Internal = function Promise(executor) {\n this._c = []; // <- awaiting reactions\n this._a = undefined; // <- checked in isUnhandled reactions\n this._s = 0; // <- state\n this._d = false; // <- done\n this._v = undefined; // <- value\n this._h = 0; // <- rejection state, 0 - default, 1 - handled, 2 - unhandled\n this._n = false; // <- notify\n };\n Internal.prototype = require('./_redefine-all')($Promise.prototype, {\n // 25.4.5.3 Promise.prototype.then(onFulfilled, onRejected)\n then: function then(onFulfilled, onRejected) {\n var reaction = newPromiseCapability(speciesConstructor(this, $Promise));\n reaction.ok = typeof onFulfilled == 'function' ? onFulfilled : true;\n reaction.fail = typeof onRejected == 'function' && onRejected;\n reaction.domain = isNode ? process.domain : undefined;\n this._c.push(reaction);\n if (this._a) this._a.push(reaction);\n if (this._s) notify(this, false);\n return reaction.promise;\n },\n // 25.4.5.1 Promise.prototype.catch(onRejected)\n 'catch': function (onRejected) {\n return this.then(undefined, onRejected);\n }\n });\n OwnPromiseCapability = function () {\n var promise = new Internal();\n this.promise = promise;\n this.resolve = ctx($resolve, promise, 1);\n this.reject = ctx($reject, promise, 1);\n };\n newPromiseCapabilityModule.f = newPromiseCapability = function (C) {\n return C === $Promise || C === Wrapper\n ? new OwnPromiseCapability(C)\n : newGenericPromiseCapability(C);\n };\n}\n\n$export($export.G + $export.W + $export.F * !USE_NATIVE, { Promise: $Promise });\nrequire('./_set-to-string-tag')($Promise, PROMISE);\nrequire('./_set-species')(PROMISE);\nWrapper = require('./_core')[PROMISE];\n\n// statics\n$export($export.S + $export.F * !USE_NATIVE, PROMISE, {\n // 25.4.4.5 Promise.reject(r)\n reject: function reject(r) {\n var capability = newPromiseCapability(this);\n var $$reject = capability.reject;\n $$reject(r);\n return capability.promise;\n }\n});\n$export($export.S + $export.F * (LIBRARY || !USE_NATIVE), PROMISE, {\n // 25.4.4.6 Promise.resolve(x)\n resolve: function resolve(x) {\n return promiseResolve(LIBRARY && this === Wrapper ? $Promise : this, x);\n }\n});\n$export($export.S + $export.F * !(USE_NATIVE && require('./_iter-detect')(function (iter) {\n $Promise.all(iter)['catch'](empty);\n})), PROMISE, {\n // 25.4.4.1 Promise.all(iterable)\n all: function all(iterable) {\n var C = this;\n var capability = newPromiseCapability(C);\n var resolve = capability.resolve;\n var reject = capability.reject;\n var result = perform(function () {\n var values = [];\n var index = 0;\n var remaining = 1;\n forOf(iterable, false, function (promise) {\n var $index = index++;\n var alreadyCalled = false;\n values.push(undefined);\n remaining++;\n C.resolve(promise).then(function (value) {\n if (alreadyCalled) return;\n alreadyCalled = true;\n values[$index] = value;\n --remaining || resolve(values);\n }, reject);\n });\n --remaining || resolve(values);\n });\n if (result.e) reject(result.v);\n return capability.promise;\n },\n // 25.4.4.4 Promise.race(iterable)\n race: function race(iterable) {\n var C = this;\n var capability = newPromiseCapability(C);\n var reject = capability.reject;\n var result = perform(function () {\n forOf(iterable, false, function (promise) {\n C.resolve(promise).then(capability.resolve, reject);\n });\n });\n if (result.e) reject(result.v);\n return capability.promise;\n }\n});\n","'use strict';\n// 25.4.1.5 NewPromiseCapability(C)\nvar aFunction = require('./_a-function');\n\nfunction PromiseCapability(C) {\n var resolve, reject;\n this.promise = new C(function ($$resolve, $$reject) {\n if (resolve !== undefined || reject !== undefined) throw TypeError('Bad Promise constructor');\n resolve = $$resolve;\n reject = $$reject;\n });\n this.resolve = aFunction(resolve);\n this.reject = aFunction(reject);\n}\n\nmodule.exports.f = function (C) {\n return new PromiseCapability(C);\n};\n","var anObject = require('./_an-object');\nvar isObject = require('./_is-object');\nvar newPromiseCapability = require('./_new-promise-capability');\n\nmodule.exports = function (C, x) {\n anObject(C);\n if (isObject(x) && x.constructor === C) return x;\n var promiseCapability = newPromiseCapability.f(C);\n var resolve = promiseCapability.resolve;\n resolve(x);\n return promiseCapability.promise;\n};\n","'use strict';\nvar dP = require('./_object-dp').f;\nvar create = require('./_object-create');\nvar redefineAll = require('./_redefine-all');\nvar ctx = require('./_ctx');\nvar anInstance = require('./_an-instance');\nvar forOf = require('./_for-of');\nvar $iterDefine = require('./_iter-define');\nvar step = require('./_iter-step');\nvar setSpecies = require('./_set-species');\nvar DESCRIPTORS = require('./_descriptors');\nvar fastKey = require('./_meta').fastKey;\nvar validate = require('./_validate-collection');\nvar SIZE = DESCRIPTORS ? '_s' : 'size';\n\nvar getEntry = function (that, key) {\n // fast case\n var index = fastKey(key);\n var entry;\n if (index !== 'F') return that._i[index];\n // frozen object case\n for (entry = that._f; entry; entry = entry.n) {\n if (entry.k == key) return entry;\n }\n};\n\nmodule.exports = {\n getConstructor: function (wrapper, NAME, IS_MAP, ADDER) {\n var C = wrapper(function (that, iterable) {\n anInstance(that, C, NAME, '_i');\n that._t = NAME; // collection type\n that._i = create(null); // index\n that._f = undefined; // first entry\n that._l = undefined; // last entry\n that[SIZE] = 0; // size\n if (iterable != undefined) forOf(iterable, IS_MAP, that[ADDER], that);\n });\n redefineAll(C.prototype, {\n // 23.1.3.1 Map.prototype.clear()\n // 23.2.3.2 Set.prototype.clear()\n clear: function clear() {\n for (var that = validate(this, NAME), data = that._i, entry = that._f; entry; entry = entry.n) {\n entry.r = true;\n if (entry.p) entry.p = entry.p.n = undefined;\n delete data[entry.i];\n }\n that._f = that._l = undefined;\n that[SIZE] = 0;\n },\n // 23.1.3.3 Map.prototype.delete(key)\n // 23.2.3.4 Set.prototype.delete(value)\n 'delete': function (key) {\n var that = validate(this, NAME);\n var entry = getEntry(that, key);\n if (entry) {\n var next = entry.n;\n var prev = entry.p;\n delete that._i[entry.i];\n entry.r = true;\n if (prev) prev.n = next;\n if (next) next.p = prev;\n if (that._f == entry) that._f = next;\n if (that._l == entry) that._l = prev;\n that[SIZE]--;\n } return !!entry;\n },\n // 23.2.3.6 Set.prototype.forEach(callbackfn, thisArg = undefined)\n // 23.1.3.5 Map.prototype.forEach(callbackfn, thisArg = undefined)\n forEach: function forEach(callbackfn /* , that = undefined */) {\n validate(this, NAME);\n var f = ctx(callbackfn, arguments.length > 1 ? arguments[1] : undefined, 3);\n var entry;\n while (entry = entry ? entry.n : this._f) {\n f(entry.v, entry.k, this);\n // revert to the last existing entry\n while (entry && entry.r) entry = entry.p;\n }\n },\n // 23.1.3.7 Map.prototype.has(key)\n // 23.2.3.7 Set.prototype.has(value)\n has: function has(key) {\n return !!getEntry(validate(this, NAME), key);\n }\n });\n if (DESCRIPTORS) dP(C.prototype, 'size', {\n get: function () {\n return validate(this, NAME)[SIZE];\n }\n });\n return C;\n },\n def: function (that, key, value) {\n var entry = getEntry(that, key);\n var prev, index;\n // change existing entry\n if (entry) {\n entry.v = value;\n // create new entry\n } else {\n that._l = entry = {\n i: index = fastKey(key, true), // <- index\n k: key, // <- key\n v: value, // <- value\n p: prev = that._l, // <- previous entry\n n: undefined, // <- next entry\n r: false // <- removed\n };\n if (!that._f) that._f = entry;\n if (prev) prev.n = entry;\n that[SIZE]++;\n // add to index\n if (index !== 'F') that._i[index] = entry;\n } return that;\n },\n getEntry: getEntry,\n setStrong: function (C, NAME, IS_MAP) {\n // add .keys, .values, .entries, [@@iterator]\n // 23.1.3.4, 23.1.3.8, 23.1.3.11, 23.1.3.12, 23.2.3.5, 23.2.3.8, 23.2.3.10, 23.2.3.11\n $iterDefine(C, NAME, function (iterated, kind) {\n this._t = validate(iterated, NAME); // target\n this._k = kind; // kind\n this._l = undefined; // previous\n }, function () {\n var that = this;\n var kind = that._k;\n var entry = that._l;\n // revert to the last existing entry\n while (entry && entry.r) entry = entry.p;\n // get next entry\n if (!that._t || !(that._l = entry = entry ? entry.n : that._t._f)) {\n // or finish the iteration\n that._t = undefined;\n return step(1);\n }\n // return step by kind\n if (kind == 'keys') return step(0, entry.k);\n if (kind == 'values') return step(0, entry.v);\n return step(0, [entry.k, entry.v]);\n }, IS_MAP ? 'entries' : 'values', !IS_MAP, true);\n\n // add [@@species], 23.1.2.2, 23.2.2.2\n setSpecies(NAME);\n }\n};\n","'use strict';\nvar redefineAll = require('./_redefine-all');\nvar getWeak = require('./_meta').getWeak;\nvar anObject = require('./_an-object');\nvar isObject = require('./_is-object');\nvar anInstance = require('./_an-instance');\nvar forOf = require('./_for-of');\nvar createArrayMethod = require('./_array-methods');\nvar $has = require('./_has');\nvar validate = require('./_validate-collection');\nvar arrayFind = createArrayMethod(5);\nvar arrayFindIndex = createArrayMethod(6);\nvar id = 0;\n\n// fallback for uncaught frozen keys\nvar uncaughtFrozenStore = function (that) {\n return that._l || (that._l = new UncaughtFrozenStore());\n};\nvar UncaughtFrozenStore = function () {\n this.a = [];\n};\nvar findUncaughtFrozen = function (store, key) {\n return arrayFind(store.a, function (it) {\n return it[0] === key;\n });\n};\nUncaughtFrozenStore.prototype = {\n get: function (key) {\n var entry = findUncaughtFrozen(this, key);\n if (entry) return entry[1];\n },\n has: function (key) {\n return !!findUncaughtFrozen(this, key);\n },\n set: function (key, value) {\n var entry = findUncaughtFrozen(this, key);\n if (entry) entry[1] = value;\n else this.a.push([key, value]);\n },\n 'delete': function (key) {\n var index = arrayFindIndex(this.a, function (it) {\n return it[0] === key;\n });\n if (~index) this.a.splice(index, 1);\n return !!~index;\n }\n};\n\nmodule.exports = {\n getConstructor: function (wrapper, NAME, IS_MAP, ADDER) {\n var C = wrapper(function (that, iterable) {\n anInstance(that, C, NAME, '_i');\n that._t = NAME; // collection type\n that._i = id++; // collection id\n that._l = undefined; // leak store for uncaught frozen objects\n if (iterable != undefined) forOf(iterable, IS_MAP, that[ADDER], that);\n });\n redefineAll(C.prototype, {\n // 23.3.3.2 WeakMap.prototype.delete(key)\n // 23.4.3.3 WeakSet.prototype.delete(value)\n 'delete': function (key) {\n if (!isObject(key)) return false;\n var data = getWeak(key);\n if (data === true) return uncaughtFrozenStore(validate(this, NAME))['delete'](key);\n return data && $has(data, this._i) && delete data[this._i];\n },\n // 23.3.3.4 WeakMap.prototype.has(key)\n // 23.4.3.4 WeakSet.prototype.has(value)\n has: function has(key) {\n if (!isObject(key)) return false;\n var data = getWeak(key);\n if (data === true) return uncaughtFrozenStore(validate(this, NAME)).has(key);\n return data && $has(data, this._i);\n }\n });\n return C;\n },\n def: function (that, key, value) {\n var data = getWeak(anObject(key), true);\n if (data === true) uncaughtFrozenStore(that).set(key, value);\n else data[that._i] = value;\n return that;\n },\n ufstore: uncaughtFrozenStore\n};\n","// https://tc39.github.io/ecma262/#sec-toindex\nvar toInteger = require('./_to-integer');\nvar toLength = require('./_to-length');\nmodule.exports = function (it) {\n if (it === undefined) return 0;\n var number = toInteger(it);\n var length = toLength(number);\n if (number !== length) throw RangeError('Wrong length!');\n return length;\n};\n","// all object keys, includes non-enumerable and symbols\nvar gOPN = require('./_object-gopn');\nvar gOPS = require('./_object-gops');\nvar anObject = require('./_an-object');\nvar Reflect = require('./_global').Reflect;\nmodule.exports = Reflect && Reflect.ownKeys || function ownKeys(it) {\n var keys = gOPN.f(anObject(it));\n var getSymbols = gOPS.f;\n return getSymbols ? keys.concat(getSymbols(it)) : keys;\n};\n","// https://github.com/tc39/proposal-string-pad-start-end\nvar toLength = require('./_to-length');\nvar repeat = require('./_string-repeat');\nvar defined = require('./_defined');\n\nmodule.exports = function (that, maxLength, fillString, left) {\n var S = String(defined(that));\n var stringLength = S.length;\n var fillStr = fillString === undefined ? ' ' : String(fillString);\n var intMaxLength = toLength(maxLength);\n if (intMaxLength <= stringLength || fillStr == '') return S;\n var fillLen = intMaxLength - stringLength;\n var stringFiller = repeat.call(fillStr, Math.ceil(fillLen / fillStr.length));\n if (stringFiller.length > fillLen) stringFiller = stringFiller.slice(0, fillLen);\n return left ? stringFiller + S : S + stringFiller;\n};\n","var DESCRIPTORS = require('./_descriptors');\nvar getKeys = require('./_object-keys');\nvar toIObject = require('./_to-iobject');\nvar isEnum = require('./_object-pie').f;\nmodule.exports = function (isEntries) {\n return function (it) {\n var O = toIObject(it);\n var keys = getKeys(O);\n var length = keys.length;\n var i = 0;\n var result = [];\n var key;\n while (length > i) {\n key = keys[i++];\n if (!DESCRIPTORS || isEnum.call(O, key)) {\n result.push(isEntries ? [key, O[key]] : O[key]);\n }\n }\n return result;\n };\n};\n","var core = module.exports = { version: '2.6.9' };\nif (typeof __e == 'number') __e = core; // eslint-disable-line no-undef\n","module.exports = function (exec) {\n try {\n return !!exec();\n } catch (e) {\n return true;\n }\n};\n","module.exports = function(module) {\n\tif (!module.webpackPolyfill) {\n\t\tmodule.deprecate = function() {};\n\t\tmodule.paths = [];\n\t\t// module.parent = undefined by default\n\t\tif (!module.children) module.children = [];\n\t\tObject.defineProperty(module, \"loaded\", {\n\t\t\tenumerable: true,\n\t\t\tget: function() {\n\t\t\t\treturn module.l;\n\t\t\t}\n\t\t});\n\t\tObject.defineProperty(module, \"id\", {\n\t\t\tenumerable: true,\n\t\t\tget: function() {\n\t\t\t\treturn module.i;\n\t\t\t}\n\t\t});\n\t\tmodule.webpackPolyfill = 1;\n\t}\n\treturn module;\n};\n","var toString = {}.toString;\n\nmodule.exports = Array.isArray || function (arr) {\n return toString.call(arr) == '[object Array]';\n};\n","var scope = (typeof global !== \"undefined\" && global) ||\n (typeof self !== \"undefined\" && self) ||\n window;\nvar apply = Function.prototype.apply;\n\n// DOM APIs, for completeness\n\nexports.setTimeout = function() {\n return new Timeout(apply.call(setTimeout, scope, arguments), clearTimeout);\n};\nexports.setInterval = function() {\n return new Timeout(apply.call(setInterval, scope, arguments), clearInterval);\n};\nexports.clearTimeout =\nexports.clearInterval = function(timeout) {\n if (timeout) {\n timeout.close();\n }\n};\n\nfunction Timeout(id, clearFn) {\n this._id = id;\n this._clearFn = clearFn;\n}\nTimeout.prototype.unref = Timeout.prototype.ref = function() {};\nTimeout.prototype.close = function() {\n this._clearFn.call(scope, this._id);\n};\n\n// Does not start the time, just sets up the members needed.\nexports.enroll = function(item, msecs) {\n clearTimeout(item._idleTimeoutId);\n item._idleTimeout = msecs;\n};\n\nexports.unenroll = function(item) {\n clearTimeout(item._idleTimeoutId);\n item._idleTimeout = -1;\n};\n\nexports._unrefActive = exports.active = function(item) {\n clearTimeout(item._idleTimeoutId);\n\n var msecs = item._idleTimeout;\n if (msecs >= 0) {\n item._idleTimeoutId = setTimeout(function onTimeout() {\n if (item._onTimeout)\n item._onTimeout();\n }, msecs);\n }\n};\n\n// setimmediate attaches itself to the global object\nrequire(\"setimmediate\");\n// On some exotic environments, it's not clear which object `setimmediate` was\n// able to install onto. Search each possibility in the same order as the\n// `setimmediate` library.\nexports.setImmediate = (typeof self !== \"undefined\" && self.setImmediate) ||\n (typeof global !== \"undefined\" && global.setImmediate) ||\n (this && this.setImmediate);\nexports.clearImmediate = (typeof self !== \"undefined\" && self.clearImmediate) ||\n (typeof global !== \"undefined\" && global.clearImmediate) ||\n (this && this.clearImmediate);\n","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\nmodule.exports = Stream;\n\nvar EE = require('events').EventEmitter;\nvar inherits = require('inherits');\n\ninherits(Stream, EE);\nStream.Readable = require('readable-stream/readable.js');\nStream.Writable = require('readable-stream/writable.js');\nStream.Duplex = require('readable-stream/duplex.js');\nStream.Transform = require('readable-stream/transform.js');\nStream.PassThrough = require('readable-stream/passthrough.js');\n\n// Backwards-compat with node 0.4.x\nStream.Stream = Stream;\n\n\n\n// old-style streams. Note that the pipe method (the only relevant\n// part of this class) is overridden in the Readable class.\n\nfunction Stream() {\n EE.call(this);\n}\n\nStream.prototype.pipe = function(dest, options) {\n var source = this;\n\n function ondata(chunk) {\n if (dest.writable) {\n if (false === dest.write(chunk) && source.pause) {\n source.pause();\n }\n }\n }\n\n source.on('data', ondata);\n\n function ondrain() {\n if (source.readable && source.resume) {\n source.resume();\n }\n }\n\n dest.on('drain', ondrain);\n\n // If the 'end' option is not supplied, dest.end() will be called when\n // source gets the 'end' or 'close' events. Only dest.end() once.\n if (!dest._isStdio && (!options || options.end !== false)) {\n source.on('end', onend);\n source.on('close', onclose);\n }\n\n var didOnEnd = false;\n function onend() {\n if (didOnEnd) return;\n didOnEnd = true;\n\n dest.end();\n }\n\n\n function onclose() {\n if (didOnEnd) return;\n didOnEnd = true;\n\n if (typeof dest.destroy === 'function') dest.destroy();\n }\n\n // don't leave dangling pipes when there are errors.\n function onerror(er) {\n cleanup();\n if (EE.listenerCount(this, 'error') === 0) {\n throw er; // Unhandled stream error in pipe.\n }\n }\n\n source.on('error', onerror);\n dest.on('error', onerror);\n\n // remove all the event listeners that were added.\n function cleanup() {\n source.removeListener('data', ondata);\n dest.removeListener('drain', ondrain);\n\n source.removeListener('end', onend);\n source.removeListener('close', onclose);\n\n source.removeListener('error', onerror);\n dest.removeListener('error', onerror);\n\n source.removeListener('end', cleanup);\n source.removeListener('close', cleanup);\n\n dest.removeListener('close', cleanup);\n }\n\n source.on('end', cleanup);\n source.on('close', cleanup);\n\n dest.on('close', cleanup);\n\n dest.emit('pipe', source);\n\n // Allow for unix-like usage: A.pipe(B).pipe(C)\n return dest;\n};\n","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n'use strict';\n\n/*<replacement>*/\n\nvar pna = require('process-nextick-args');\n/*</replacement>*/\n\nmodule.exports = Readable;\n\n/*<replacement>*/\nvar isArray = require('isarray');\n/*</replacement>*/\n\n/*<replacement>*/\nvar Duplex;\n/*</replacement>*/\n\nReadable.ReadableState = ReadableState;\n\n/*<replacement>*/\nvar EE = require('events').EventEmitter;\n\nvar EElistenerCount = function (emitter, type) {\n return emitter.listeners(type).length;\n};\n/*</replacement>*/\n\n/*<replacement>*/\nvar Stream = require('./internal/streams/stream');\n/*</replacement>*/\n\n/*<replacement>*/\n\nvar Buffer = require('safe-buffer').Buffer;\nvar OurUint8Array = global.Uint8Array || function () {};\nfunction _uint8ArrayToBuffer(chunk) {\n return Buffer.from(chunk);\n}\nfunction _isUint8Array(obj) {\n return Buffer.isBuffer(obj) || obj instanceof OurUint8Array;\n}\n\n/*</replacement>*/\n\n/*<replacement>*/\nvar util = require('core-util-is');\nutil.inherits = require('inherits');\n/*</replacement>*/\n\n/*<replacement>*/\nvar debugUtil = require('util');\nvar debug = void 0;\nif (debugUtil && debugUtil.debuglog) {\n debug = debugUtil.debuglog('stream');\n} else {\n debug = function () {};\n}\n/*</replacement>*/\n\nvar BufferList = require('./internal/streams/BufferList');\nvar destroyImpl = require('./internal/streams/destroy');\nvar StringDecoder;\n\nutil.inherits(Readable, Stream);\n\nvar kProxyEvents = ['error', 'close', 'destroy', 'pause', 'resume'];\n\nfunction prependListener(emitter, event, fn) {\n // Sadly this is not cacheable as some libraries bundle their own\n // event emitter implementation with them.\n if (typeof emitter.prependListener === 'function') return emitter.prependListener(event, fn);\n\n // This is a hack to make sure that our error handler is attached before any\n // userland ones. NEVER DO THIS. This is here only because this code needs\n // to continue to work with older versions of Node.js that do not include\n // the prependListener() method. The goal is to eventually remove this hack.\n if (!emitter._events || !emitter._events[event]) emitter.on(event, fn);else if (isArray(emitter._events[event])) emitter._events[event].unshift(fn);else emitter._events[event] = [fn, emitter._events[event]];\n}\n\nfunction ReadableState(options, stream) {\n Duplex = Duplex || require('./_stream_duplex');\n\n options = options || {};\n\n // Duplex streams are both readable and writable, but share\n // the same options object.\n // However, some cases require setting options to different\n // values for the readable and the writable sides of the duplex stream.\n // These options can be provided separately as readableXXX and writableXXX.\n var isDuplex = stream instanceof Duplex;\n\n // object stream flag. Used to make read(n) ignore n and to\n // make all the buffer merging and length checks go away\n this.objectMode = !!options.objectMode;\n\n if (isDuplex) this.objectMode = this.objectMode || !!options.readableObjectMode;\n\n // the point at which it stops calling _read() to fill the buffer\n // Note: 0 is a valid value, means \"don't call _read preemptively ever\"\n var hwm = options.highWaterMark;\n var readableHwm = options.readableHighWaterMark;\n var defaultHwm = this.objectMode ? 16 : 16 * 1024;\n\n if (hwm || hwm === 0) this.highWaterMark = hwm;else if (isDuplex && (readableHwm || readableHwm === 0)) this.highWaterMark = readableHwm;else this.highWaterMark = defaultHwm;\n\n // cast to ints.\n this.highWaterMark = Math.floor(this.highWaterMark);\n\n // A linked list is used to store data chunks instead of an array because the\n // linked list can remove elements from the beginning faster than\n // array.shift()\n this.buffer = new BufferList();\n this.length = 0;\n this.pipes = null;\n this.pipesCount = 0;\n this.flowing = null;\n this.ended = false;\n this.endEmitted = false;\n this.reading = false;\n\n // a flag to be able to tell if the event 'readable'/'data' is emitted\n // immediately, or on a later tick. We set this to true at first, because\n // any actions that shouldn't happen until \"later\" should generally also\n // not happen before the first read call.\n this.sync = true;\n\n // whenever we return null, then we set a flag to say\n // that we're awaiting a 'readable' event emission.\n this.needReadable = false;\n this.emittedReadable = false;\n this.readableListening = false;\n this.resumeScheduled = false;\n\n // has it been destroyed\n this.destroyed = false;\n\n // Crypto is kind of old and crusty. Historically, its default string\n // encoding is 'binary' so we have to make this configurable.\n // Everything else in the universe uses 'utf8', though.\n this.defaultEncoding = options.defaultEncoding || 'utf8';\n\n // the number of writers that are awaiting a drain event in .pipe()s\n this.awaitDrain = 0;\n\n // if true, a maybeReadMore has been scheduled\n this.readingMore = false;\n\n this.decoder = null;\n this.encoding = null;\n if (options.encoding) {\n if (!StringDecoder) StringDecoder = require('string_decoder/').StringDecoder;\n this.decoder = new StringDecoder(options.encoding);\n this.encoding = options.encoding;\n }\n}\n\nfunction Readable(options) {\n Duplex = Duplex || require('./_stream_duplex');\n\n if (!(this instanceof Readable)) return new Readable(options);\n\n this._readableState = new ReadableState(options, this);\n\n // legacy\n this.readable = true;\n\n if (options) {\n if (typeof options.read === 'function') this._read = options.read;\n\n if (typeof options.destroy === 'function') this._destroy = options.destroy;\n }\n\n Stream.call(this);\n}\n\nObject.defineProperty(Readable.prototype, 'destroyed', {\n get: function () {\n if (this._readableState === undefined) {\n return false;\n }\n return this._readableState.destroyed;\n },\n set: function (value) {\n // we ignore the value if the stream\n // has not been initialized yet\n if (!this._readableState) {\n return;\n }\n\n // backward compatibility, the user is explicitly\n // managing destroyed\n this._readableState.destroyed = value;\n }\n});\n\nReadable.prototype.destroy = destroyImpl.destroy;\nReadable.prototype._undestroy = destroyImpl.undestroy;\nReadable.prototype._destroy = function (err, cb) {\n this.push(null);\n cb(err);\n};\n\n// Manually shove something into the read() buffer.\n// This returns true if the highWaterMark has not been hit yet,\n// similar to how Writable.write() returns true if you should\n// write() some more.\nReadable.prototype.push = function (chunk, encoding) {\n var state = this._readableState;\n var skipChunkCheck;\n\n if (!state.objectMode) {\n if (typeof chunk === 'string') {\n encoding = encoding || state.defaultEncoding;\n if (encoding !== state.encoding) {\n chunk = Buffer.from(chunk, encoding);\n encoding = '';\n }\n skipChunkCheck = true;\n }\n } else {\n skipChunkCheck = true;\n }\n\n return readableAddChunk(this, chunk, encoding, false, skipChunkCheck);\n};\n\n// Unshift should *always* be something directly out of read()\nReadable.prototype.unshift = function (chunk) {\n return readableAddChunk(this, chunk, null, true, false);\n};\n\nfunction readableAddChunk(stream, chunk, encoding, addToFront, skipChunkCheck) {\n var state = stream._readableState;\n if (chunk === null) {\n state.reading = false;\n onEofChunk(stream, state);\n } else {\n var er;\n if (!skipChunkCheck) er = chunkInvalid(state, chunk);\n if (er) {\n stream.emit('error', er);\n } else if (state.objectMode || chunk && chunk.length > 0) {\n if (typeof chunk !== 'string' && !state.objectMode && Object.getPrototypeOf(chunk) !== Buffer.prototype) {\n chunk = _uint8ArrayToBuffer(chunk);\n }\n\n if (addToFront) {\n if (state.endEmitted) stream.emit('error', new Error('stream.unshift() after end event'));else addChunk(stream, state, chunk, true);\n } else if (state.ended) {\n stream.emit('error', new Error('stream.push() after EOF'));\n } else {\n state.reading = false;\n if (state.decoder && !encoding) {\n chunk = state.decoder.write(chunk);\n if (state.objectMode || chunk.length !== 0) addChunk(stream, state, chunk, false);else maybeReadMore(stream, state);\n } else {\n addChunk(stream, state, chunk, false);\n }\n }\n } else if (!addToFront) {\n state.reading = false;\n }\n }\n\n return needMoreData(state);\n}\n\nfunction addChunk(stream, state, chunk, addToFront) {\n if (state.flowing && state.length === 0 && !state.sync) {\n stream.emit('data', chunk);\n stream.read(0);\n } else {\n // update the buffer info.\n state.length += state.objectMode ? 1 : chunk.length;\n if (addToFront) state.buffer.unshift(chunk);else state.buffer.push(chunk);\n\n if (state.needReadable) emitReadable(stream);\n }\n maybeReadMore(stream, state);\n}\n\nfunction chunkInvalid(state, chunk) {\n var er;\n if (!_isUint8Array(chunk) && typeof chunk !== 'string' && chunk !== undefined && !state.objectMode) {\n er = new TypeError('Invalid non-string/buffer chunk');\n }\n return er;\n}\n\n// if it's past the high water mark, we can push in some more.\n// Also, if we have no data yet, we can stand some\n// more bytes. This is to work around cases where hwm=0,\n// such as the repl. Also, if the push() triggered a\n// readable event, and the user called read(largeNumber) such that\n// needReadable was set, then we ought to push more, so that another\n// 'readable' event will be triggered.\nfunction needMoreData(state) {\n return !state.ended && (state.needReadable || state.length < state.highWaterMark || state.length === 0);\n}\n\nReadable.prototype.isPaused = function () {\n return this._readableState.flowing === false;\n};\n\n// backwards compatibility.\nReadable.prototype.setEncoding = function (enc) {\n if (!StringDecoder) StringDecoder = require('string_decoder/').StringDecoder;\n this._readableState.decoder = new StringDecoder(enc);\n this._readableState.encoding = enc;\n return this;\n};\n\n// Don't raise the hwm > 8MB\nvar MAX_HWM = 0x800000;\nfunction computeNewHighWaterMark(n) {\n if (n >= MAX_HWM) {\n n = MAX_HWM;\n } else {\n // Get the next highest power of 2 to prevent increasing hwm excessively in\n // tiny amounts\n n--;\n n |= n >>> 1;\n n |= n >>> 2;\n n |= n >>> 4;\n n |= n >>> 8;\n n |= n >>> 16;\n n++;\n }\n return n;\n}\n\n// This function is designed to be inlinable, so please take care when making\n// changes to the function body.\nfunction howMuchToRead(n, state) {\n if (n <= 0 || state.length === 0 && state.ended) return 0;\n if (state.objectMode) return 1;\n if (n !== n) {\n // Only flow one buffer at a time\n if (state.flowing && state.length) return state.buffer.head.data.length;else return state.length;\n }\n // If we're asking for more than the current hwm, then raise the hwm.\n if (n > state.highWaterMark) state.highWaterMark = computeNewHighWaterMark(n);\n if (n <= state.length) return n;\n // Don't have enough\n if (!state.ended) {\n state.needReadable = true;\n return 0;\n }\n return state.length;\n}\n\n// you can override either this method, or the async _read(n) below.\nReadable.prototype.read = function (n) {\n debug('read', n);\n n = parseInt(n, 10);\n var state = this._readableState;\n var nOrig = n;\n\n if (n !== 0) state.emittedReadable = false;\n\n // if we're doing read(0) to trigger a readable event, but we\n // already have a bunch of data in the buffer, then just trigger\n // the 'readable' event and move on.\n if (n === 0 && state.needReadable && (state.length >= state.highWaterMark || state.ended)) {\n debug('read: emitReadable', state.length, state.ended);\n if (state.length === 0 && state.ended) endReadable(this);else emitReadable(this);\n return null;\n }\n\n n = howMuchToRead(n, state);\n\n // if we've ended, and we're now clear, then finish it up.\n if (n === 0 && state.ended) {\n if (state.length === 0) endReadable(this);\n return null;\n }\n\n // All the actual chunk generation logic needs to be\n // *below* the call to _read. The reason is that in certain\n // synthetic stream cases, such as passthrough streams, _read\n // may be a completely synchronous operation which may change\n // the state of the read buffer, providing enough data when\n // before there was *not* enough.\n //\n // So, the steps are:\n // 1. Figure out what the state of things will be after we do\n // a read from the buffer.\n //\n // 2. If that resulting state will trigger a _read, then call _read.\n // Note that this may be asynchronous, or synchronous. Yes, it is\n // deeply ugly to write APIs this way, but that still doesn't mean\n // that the Readable class should behave improperly, as streams are\n // designed to be sync/async agnostic.\n // Take note if the _read call is sync or async (ie, if the read call\n // has returned yet), so that we know whether or not it's safe to emit\n // 'readable' etc.\n //\n // 3. Actually pull the requested chunks out of the buffer and return.\n\n // if we need a readable event, then we need to do some reading.\n var doRead = state.needReadable;\n debug('need readable', doRead);\n\n // if we currently have less than the highWaterMark, then also read some\n if (state.length === 0 || state.length - n < state.highWaterMark) {\n doRead = true;\n debug('length less than watermark', doRead);\n }\n\n // however, if we've ended, then there's no point, and if we're already\n // reading, then it's unnecessary.\n if (state.ended || state.reading) {\n doRead = false;\n debug('reading or ended', doRead);\n } else if (doRead) {\n debug('do read');\n state.reading = true;\n state.sync = true;\n // if the length is currently zero, then we *need* a readable event.\n if (state.length === 0) state.needReadable = true;\n // call internal read method\n this._read(state.highWaterMark);\n state.sync = false;\n // If _read pushed data synchronously, then `reading` will be false,\n // and we need to re-evaluate how much data we can return to the user.\n if (!state.reading) n = howMuchToRead(nOrig, state);\n }\n\n var ret;\n if (n > 0) ret = fromList(n, state);else ret = null;\n\n if (ret === null) {\n state.needReadable = true;\n n = 0;\n } else {\n state.length -= n;\n }\n\n if (state.length === 0) {\n // If we have nothing in the buffer, then we want to know\n // as soon as we *do* get something into the buffer.\n if (!state.ended) state.needReadable = true;\n\n // If we tried to read() past the EOF, then emit end on the next tick.\n if (nOrig !== n && state.ended) endReadable(this);\n }\n\n if (ret !== null) this.emit('data', ret);\n\n return ret;\n};\n\nfunction onEofChunk(stream, state) {\n if (state.ended) return;\n if (state.decoder) {\n var chunk = state.decoder.end();\n if (chunk && chunk.length) {\n state.buffer.push(chunk);\n state.length += state.objectMode ? 1 : chunk.length;\n }\n }\n state.ended = true;\n\n // emit 'readable' now to make sure it gets picked up.\n emitReadable(stream);\n}\n\n// Don't emit readable right away in sync mode, because this can trigger\n// another read() call => stack overflow. This way, it might trigger\n// a nextTick recursion warning, but that's not so bad.\nfunction emitReadable(stream) {\n var state = stream._readableState;\n state.needReadable = false;\n if (!state.emittedReadable) {\n debug('emitReadable', state.flowing);\n state.emittedReadable = true;\n if (state.sync) pna.nextTick(emitReadable_, stream);else emitReadable_(stream);\n }\n}\n\nfunction emitReadable_(stream) {\n debug('emit readable');\n stream.emit('readable');\n flow(stream);\n}\n\n// at this point, the user has presumably seen the 'readable' event,\n// and called read() to consume some data. that may have triggered\n// in turn another _read(n) call, in which case reading = true if\n// it's in progress.\n// However, if we're not ended, or reading, and the length < hwm,\n// then go ahead and try to read some more preemptively.\nfunction maybeReadMore(stream, state) {\n if (!state.readingMore) {\n state.readingMore = true;\n pna.nextTick(maybeReadMore_, stream, state);\n }\n}\n\nfunction maybeReadMore_(stream, state) {\n var len = state.length;\n while (!state.reading && !state.flowing && !state.ended && state.length < state.highWaterMark) {\n debug('maybeReadMore read 0');\n stream.read(0);\n if (len === state.length)\n // didn't get any data, stop spinning.\n break;else len = state.length;\n }\n state.readingMore = false;\n}\n\n// abstract method. to be overridden in specific implementation classes.\n// call cb(er, data) where data is <= n in length.\n// for virtual (non-string, non-buffer) streams, \"length\" is somewhat\n// arbitrary, and perhaps not very meaningful.\nReadable.prototype._read = function (n) {\n this.emit('error', new Error('_read() is not implemented'));\n};\n\nReadable.prototype.pipe = function (dest, pipeOpts) {\n var src = this;\n var state = this._readableState;\n\n switch (state.pipesCount) {\n case 0:\n state.pipes = dest;\n break;\n case 1:\n state.pipes = [state.pipes, dest];\n break;\n default:\n state.pipes.push(dest);\n break;\n }\n state.pipesCount += 1;\n debug('pipe count=%d opts=%j', state.pipesCount, pipeOpts);\n\n var doEnd = (!pipeOpts || pipeOpts.end !== false) && dest !== process.stdout && dest !== process.stderr;\n\n var endFn = doEnd ? onend : unpipe;\n if (state.endEmitted) pna.nextTick(endFn);else src.once('end', endFn);\n\n dest.on('unpipe', onunpipe);\n function onunpipe(readable, unpipeInfo) {\n debug('onunpipe');\n if (readable === src) {\n if (unpipeInfo && unpipeInfo.hasUnpiped === false) {\n unpipeInfo.hasUnpiped = true;\n cleanup();\n }\n }\n }\n\n function onend() {\n debug('onend');\n dest.end();\n }\n\n // when the dest drains, it reduces the awaitDrain counter\n // on the source. This would be more elegant with a .once()\n // handler in flow(), but adding and removing repeatedly is\n // too slow.\n var ondrain = pipeOnDrain(src);\n dest.on('drain', ondrain);\n\n var cleanedUp = false;\n function cleanup() {\n debug('cleanup');\n // cleanup event handlers once the pipe is broken\n dest.removeListener('close', onclose);\n dest.removeListener('finish', onfinish);\n dest.removeListener('drain', ondrain);\n dest.removeListener('error', onerror);\n dest.removeListener('unpipe', onunpipe);\n src.removeListener('end', onend);\n src.removeListener('end', unpipe);\n src.removeListener('data', ondata);\n\n cleanedUp = true;\n\n // if the reader is waiting for a drain event from this\n // specific writer, then it would cause it to never start\n // flowing again.\n // So, if this is awaiting a drain, then we just call it now.\n // If we don't know, then assume that we are waiting for one.\n if (state.awaitDrain && (!dest._writableState || dest._writableState.needDrain)) ondrain();\n }\n\n // If the user pushes more data while we're writing to dest then we'll end up\n // in ondata again. However, we only want to increase awaitDrain once because\n // dest will only emit one 'drain' event for the multiple writes.\n // => Introduce a guard on increasing awaitDrain.\n var increasedAwaitDrain = false;\n src.on('data', ondata);\n function ondata(chunk) {\n debug('ondata');\n increasedAwaitDrain = false;\n var ret = dest.write(chunk);\n if (false === ret && !increasedAwaitDrain) {\n // If the user unpiped during `dest.write()`, it is possible\n // to get stuck in a permanently paused state if that write\n // also returned false.\n // => Check whether `dest` is still a piping destination.\n if ((state.pipesCount === 1 && state.pipes === dest || state.pipesCount > 1 && indexOf(state.pipes, dest) !== -1) && !cleanedUp) {\n debug('false write response, pause', src._readableState.awaitDrain);\n src._readableState.awaitDrain++;\n increasedAwaitDrain = true;\n }\n src.pause();\n }\n }\n\n // if the dest has an error, then stop piping into it.\n // however, don't suppress the throwing behavior for this.\n function onerror(er) {\n debug('onerror', er);\n unpipe();\n dest.removeListener('error', onerror);\n if (EElistenerCount(dest, 'error') === 0) dest.emit('error', er);\n }\n\n // Make sure our error handler is attached before userland ones.\n prependListener(dest, 'error', onerror);\n\n // Both close and finish should trigger unpipe, but only once.\n function onclose() {\n dest.removeListener('finish', onfinish);\n unpipe();\n }\n dest.once('close', onclose);\n function onfinish() {\n debug('onfinish');\n dest.removeListener('close', onclose);\n unpipe();\n }\n dest.once('finish', onfinish);\n\n function unpipe() {\n debug('unpipe');\n src.unpipe(dest);\n }\n\n // tell the dest that it's being piped to\n dest.emit('pipe', src);\n\n // start the flow if it hasn't been started already.\n if (!state.flowing) {\n debug('pipe resume');\n src.resume();\n }\n\n return dest;\n};\n\nfunction pipeOnDrain(src) {\n return function () {\n var state = src._readableState;\n debug('pipeOnDrain', state.awaitDrain);\n if (state.awaitDrain) state.awaitDrain--;\n if (state.awaitDrain === 0 && EElistenerCount(src, 'data')) {\n state.flowing = true;\n flow(src);\n }\n };\n}\n\nReadable.prototype.unpipe = function (dest) {\n var state = this._readableState;\n var unpipeInfo = { hasUnpiped: false };\n\n // if we're not piping anywhere, then do nothing.\n if (state.pipesCount === 0) return this;\n\n // just one destination. most common case.\n if (state.pipesCount === 1) {\n // passed in one, but it's not the right one.\n if (dest && dest !== state.pipes) return this;\n\n if (!dest) dest = state.pipes;\n\n // got a match.\n state.pipes = null;\n state.pipesCount = 0;\n state.flowing = false;\n if (dest) dest.emit('unpipe', this, unpipeInfo);\n return this;\n }\n\n // slow case. multiple pipe destinations.\n\n if (!dest) {\n // remove all.\n var dests = state.pipes;\n var len = state.pipesCount;\n state.pipes = null;\n state.pipesCount = 0;\n state.flowing = false;\n\n for (var i = 0; i < len; i++) {\n dests[i].emit('unpipe', this, unpipeInfo);\n }return this;\n }\n\n // try to find the right one.\n var index = indexOf(state.pipes, dest);\n if (index === -1) return this;\n\n state.pipes.splice(index, 1);\n state.pipesCount -= 1;\n if (state.pipesCount === 1) state.pipes = state.pipes[0];\n\n dest.emit('unpipe', this, unpipeInfo);\n\n return this;\n};\n\n// set up data events if they are asked for\n// Ensure readable listeners eventually get something\nReadable.prototype.on = function (ev, fn) {\n var res = Stream.prototype.on.call(this, ev, fn);\n\n if (ev === 'data') {\n // Start flowing on next tick if stream isn't explicitly paused\n if (this._readableState.flowing !== false) this.resume();\n } else if (ev === 'readable') {\n var state = this._readableState;\n if (!state.endEmitted && !state.readableListening) {\n state.readableListening = state.needReadable = true;\n state.emittedReadable = false;\n if (!state.reading) {\n pna.nextTick(nReadingNextTick, this);\n } else if (state.length) {\n emitReadable(this);\n }\n }\n }\n\n return res;\n};\nReadable.prototype.addListener = Readable.prototype.on;\n\nfunction nReadingNextTick(self) {\n debug('readable nexttick read 0');\n self.read(0);\n}\n\n// pause() and resume() are remnants of the legacy readable stream API\n// If the user uses them, then switch into old mode.\nReadable.prototype.resume = function () {\n var state = this._readableState;\n if (!state.flowing) {\n debug('resume');\n state.flowing = true;\n resume(this, state);\n }\n return this;\n};\n\nfunction resume(stream, state) {\n if (!state.resumeScheduled) {\n state.resumeScheduled = true;\n pna.nextTick(resume_, stream, state);\n }\n}\n\nfunction resume_(stream, state) {\n if (!state.reading) {\n debug('resume read 0');\n stream.read(0);\n }\n\n state.resumeScheduled = false;\n state.awaitDrain = 0;\n stream.emit('resume');\n flow(stream);\n if (state.flowing && !state.reading) stream.read(0);\n}\n\nReadable.prototype.pause = function () {\n debug('call pause flowing=%j', this._readableState.flowing);\n if (false !== this._readableState.flowing) {\n debug('pause');\n this._readableState.flowing = false;\n this.emit('pause');\n }\n return this;\n};\n\nfunction flow(stream) {\n var state = stream._readableState;\n debug('flow', state.flowing);\n while (state.flowing && stream.read() !== null) {}\n}\n\n// wrap an old-style stream as the async data source.\n// This is *not* part of the readable stream interface.\n// It is an ugly unfortunate mess of history.\nReadable.prototype.wrap = function (stream) {\n var _this = this;\n\n var state = this._readableState;\n var paused = false;\n\n stream.on('end', function () {\n debug('wrapped end');\n if (state.decoder && !state.ended) {\n var chunk = state.decoder.end();\n if (chunk && chunk.length) _this.push(chunk);\n }\n\n _this.push(null);\n });\n\n stream.on('data', function (chunk) {\n debug('wrapped data');\n if (state.decoder) chunk = state.decoder.write(chunk);\n\n // don't skip over falsy values in objectMode\n if (state.objectMode && (chunk === null || chunk === undefined)) return;else if (!state.objectMode && (!chunk || !chunk.length)) return;\n\n var ret = _this.push(chunk);\n if (!ret) {\n paused = true;\n stream.pause();\n }\n });\n\n // proxy all the other methods.\n // important when wrapping filters and duplexes.\n for (var i in stream) {\n if (this[i] === undefined && typeof stream[i] === 'function') {\n this[i] = function (method) {\n return function () {\n return stream[method].apply(stream, arguments);\n };\n }(i);\n }\n }\n\n // proxy certain important events.\n for (var n = 0; n < kProxyEvents.length; n++) {\n stream.on(kProxyEvents[n], this.emit.bind(this, kProxyEvents[n]));\n }\n\n // when we try to consume some more bytes, simply unpause the\n // underlying stream.\n this._read = function (n) {\n debug('wrapped _read', n);\n if (paused) {\n paused = false;\n stream.resume();\n }\n };\n\n return this;\n};\n\nObject.defineProperty(Readable.prototype, 'readableHighWaterMark', {\n // making it explicit this property is not enumerable\n // because otherwise some prototype manipulation in\n // userland will fail\n enumerable: false,\n get: function () {\n return this._readableState.highWaterMark;\n }\n});\n\n// exposed for testing purposes only.\nReadable._fromList = fromList;\n\n// Pluck off n bytes from an array of buffers.\n// Length is the combined lengths of all the buffers in the list.\n// This function is designed to be inlinable, so please take care when making\n// changes to the function body.\nfunction fromList(n, state) {\n // nothing buffered\n if (state.length === 0) return null;\n\n var ret;\n if (state.objectMode) ret = state.buffer.shift();else if (!n || n >= state.length) {\n // read it all, truncate the list\n if (state.decoder) ret = state.buffer.join('');else if (state.buffer.length === 1) ret = state.buffer.head.data;else ret = state.buffer.concat(state.length);\n state.buffer.clear();\n } else {\n // read part of list\n ret = fromListPartial(n, state.buffer, state.decoder);\n }\n\n return ret;\n}\n\n// Extracts only enough buffered data to satisfy the amount requested.\n// This function is designed to be inlinable, so please take care when making\n// changes to the function body.\nfunction fromListPartial(n, list, hasStrings) {\n var ret;\n if (n < list.head.data.length) {\n // slice is the same for buffers and strings\n ret = list.head.data.slice(0, n);\n list.head.data = list.head.data.slice(n);\n } else if (n === list.head.data.length) {\n // first chunk is a perfect match\n ret = list.shift();\n } else {\n // result spans more than one buffer\n ret = hasStrings ? copyFromBufferString(n, list) : copyFromBuffer(n, list);\n }\n return ret;\n}\n\n// Copies a specified amount of characters from the list of buffered data\n// chunks.\n// This function is designed to be inlinable, so please take care when making\n// changes to the function body.\nfunction copyFromBufferString(n, list) {\n var p = list.head;\n var c = 1;\n var ret = p.data;\n n -= ret.length;\n while (p = p.next) {\n var str = p.data;\n var nb = n > str.length ? str.length : n;\n if (nb === str.length) ret += str;else ret += str.slice(0, n);\n n -= nb;\n if (n === 0) {\n if (nb === str.length) {\n ++c;\n if (p.next) list.head = p.next;else list.head = list.tail = null;\n } else {\n list.head = p;\n p.data = str.slice(nb);\n }\n break;\n }\n ++c;\n }\n list.length -= c;\n return ret;\n}\n\n// Copies a specified amount of bytes from the list of buffered data chunks.\n// This function is designed to be inlinable, so please take care when making\n// changes to the function body.\nfunction copyFromBuffer(n, list) {\n var ret = Buffer.allocUnsafe(n);\n var p = list.head;\n var c = 1;\n p.data.copy(ret);\n n -= p.data.length;\n while (p = p.next) {\n var buf = p.data;\n var nb = n > buf.length ? buf.length : n;\n buf.copy(ret, ret.length - n, 0, nb);\n n -= nb;\n if (n === 0) {\n if (nb === buf.length) {\n ++c;\n if (p.next) list.head = p.next;else list.head = list.tail = null;\n } else {\n list.head = p;\n p.data = buf.slice(nb);\n }\n break;\n }\n ++c;\n }\n list.length -= c;\n return ret;\n}\n\nfunction endReadable(stream) {\n var state = stream._readableState;\n\n // If we get here before consuming all the bytes, then that is a\n // bug in node. Should never happen.\n if (state.length > 0) throw new Error('\"endReadable()\" called on non-empty stream');\n\n if (!state.endEmitted) {\n state.ended = true;\n pna.nextTick(endReadableNT, state, stream);\n }\n}\n\nfunction endReadableNT(state, stream) {\n // Check that we didn't get one last unshift.\n if (!state.endEmitted && state.length === 0) {\n state.endEmitted = true;\n stream.readable = false;\n stream.emit('end');\n }\n}\n\nfunction indexOf(xs, x) {\n for (var i = 0, l = xs.length; i < l; i++) {\n if (xs[i] === x) return i;\n }\n return -1;\n}","module.exports = require('events').EventEmitter;\n","'use strict';\n\n/*<replacement>*/\n\nvar pna = require('process-nextick-args');\n/*</replacement>*/\n\n// undocumented cb() API, needed for core, not for public API\nfunction destroy(err, cb) {\n var _this = this;\n\n var readableDestroyed = this._readableState && this._readableState.destroyed;\n var writableDestroyed = this._writableState && this._writableState.destroyed;\n\n if (readableDestroyed || writableDestroyed) {\n if (cb) {\n cb(err);\n } else if (err && (!this._writableState || !this._writableState.errorEmitted)) {\n pna.nextTick(emitErrorNT, this, err);\n }\n return this;\n }\n\n // we set destroyed to true before firing error callbacks in order\n // to make it re-entrance safe in case destroy() is called within callbacks\n\n if (this._readableState) {\n this._readableState.destroyed = true;\n }\n\n // if this is a duplex stream mark the writable part as destroyed as well\n if (this._writableState) {\n this._writableState.destroyed = true;\n }\n\n this._destroy(err || null, function (err) {\n if (!cb && err) {\n pna.nextTick(emitErrorNT, _this, err);\n if (_this._writableState) {\n _this._writableState.errorEmitted = true;\n }\n } else if (cb) {\n cb(err);\n }\n });\n\n return this;\n}\n\nfunction undestroy() {\n if (this._readableState) {\n this._readableState.destroyed = false;\n this._readableState.reading = false;\n this._readableState.ended = false;\n this._readableState.endEmitted = false;\n }\n\n if (this._writableState) {\n this._writableState.destroyed = false;\n this._writableState.ended = false;\n this._writableState.ending = false;\n this._writableState.finished = false;\n this._writableState.errorEmitted = false;\n }\n}\n\nfunction emitErrorNT(self, err) {\n self.emit('error', err);\n}\n\nmodule.exports = {\n destroy: destroy,\n undestroy: undestroy\n};","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n'use strict';\n\n/*<replacement>*/\n\nvar Buffer = require('safe-buffer').Buffer;\n/*</replacement>*/\n\nvar isEncoding = Buffer.isEncoding || function (encoding) {\n encoding = '' + encoding;\n switch (encoding && encoding.toLowerCase()) {\n case 'hex':case 'utf8':case 'utf-8':case 'ascii':case 'binary':case 'base64':case 'ucs2':case 'ucs-2':case 'utf16le':case 'utf-16le':case 'raw':\n return true;\n default:\n return false;\n }\n};\n\nfunction _normalizeEncoding(enc) {\n if (!enc) return 'utf8';\n var retried;\n while (true) {\n switch (enc) {\n case 'utf8':\n case 'utf-8':\n return 'utf8';\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return 'utf16le';\n case 'latin1':\n case 'binary':\n return 'latin1';\n case 'base64':\n case 'ascii':\n case 'hex':\n return enc;\n default:\n if (retried) return; // undefined\n enc = ('' + enc).toLowerCase();\n retried = true;\n }\n }\n};\n\n// Do not cache `Buffer.isEncoding` when checking encoding names as some\n// modules monkey-patch it to support additional encodings\nfunction normalizeEncoding(enc) {\n var nenc = _normalizeEncoding(enc);\n if (typeof nenc !== 'string' && (Buffer.isEncoding === isEncoding || !isEncoding(enc))) throw new Error('Unknown encoding: ' + enc);\n return nenc || enc;\n}\n\n// StringDecoder provides an interface for efficiently splitting a series of\n// buffers into a series of JS strings without breaking apart multi-byte\n// characters.\nexports.StringDecoder = StringDecoder;\nfunction StringDecoder(encoding) {\n this.encoding = normalizeEncoding(encoding);\n var nb;\n switch (this.encoding) {\n case 'utf16le':\n this.text = utf16Text;\n this.end = utf16End;\n nb = 4;\n break;\n case 'utf8':\n this.fillLast = utf8FillLast;\n nb = 4;\n break;\n case 'base64':\n this.text = base64Text;\n this.end = base64End;\n nb = 3;\n break;\n default:\n this.write = simpleWrite;\n this.end = simpleEnd;\n return;\n }\n this.lastNeed = 0;\n this.lastTotal = 0;\n this.lastChar = Buffer.allocUnsafe(nb);\n}\n\nStringDecoder.prototype.write = function (buf) {\n if (buf.length === 0) return '';\n var r;\n var i;\n if (this.lastNeed) {\n r = this.fillLast(buf);\n if (r === undefined) return '';\n i = this.lastNeed;\n this.lastNeed = 0;\n } else {\n i = 0;\n }\n if (i < buf.length) return r ? r + this.text(buf, i) : this.text(buf, i);\n return r || '';\n};\n\nStringDecoder.prototype.end = utf8End;\n\n// Returns only complete characters in a Buffer\nStringDecoder.prototype.text = utf8Text;\n\n// Attempts to complete a partial non-UTF-8 character using bytes from a Buffer\nStringDecoder.prototype.fillLast = function (buf) {\n if (this.lastNeed <= buf.length) {\n buf.copy(this.lastChar, this.lastTotal - this.lastNeed, 0, this.lastNeed);\n return this.lastChar.toString(this.encoding, 0, this.lastTotal);\n }\n buf.copy(this.lastChar, this.lastTotal - this.lastNeed, 0, buf.length);\n this.lastNeed -= buf.length;\n};\n\n// Checks the type of a UTF-8 byte, whether it's ASCII, a leading byte, or a\n// continuation byte. If an invalid byte is detected, -2 is returned.\nfunction utf8CheckByte(byte) {\n if (byte <= 0x7F) return 0;else if (byte >> 5 === 0x06) return 2;else if (byte >> 4 === 0x0E) return 3;else if (byte >> 3 === 0x1E) return 4;\n return byte >> 6 === 0x02 ? -1 : -2;\n}\n\n// Checks at most 3 bytes at the end of a Buffer in order to detect an\n// incomplete multi-byte UTF-8 character. The total number of bytes (2, 3, or 4)\n// needed to complete the UTF-8 character (if applicable) are returned.\nfunction utf8CheckIncomplete(self, buf, i) {\n var j = buf.length - 1;\n if (j < i) return 0;\n var nb = utf8CheckByte(buf[j]);\n if (nb >= 0) {\n if (nb > 0) self.lastNeed = nb - 1;\n return nb;\n }\n if (--j < i || nb === -2) return 0;\n nb = utf8CheckByte(buf[j]);\n if (nb >= 0) {\n if (nb > 0) self.lastNeed = nb - 2;\n return nb;\n }\n if (--j < i || nb === -2) return 0;\n nb = utf8CheckByte(buf[j]);\n if (nb >= 0) {\n if (nb > 0) {\n if (nb === 2) nb = 0;else self.lastNeed = nb - 3;\n }\n return nb;\n }\n return 0;\n}\n\n// Validates as many continuation bytes for a multi-byte UTF-8 character as\n// needed or are available. If we see a non-continuation byte where we expect\n// one, we \"replace\" the validated continuation bytes we've seen so far with\n// a single UTF-8 replacement character ('\\ufffd'), to match v8's UTF-8 decoding\n// behavior. The continuation byte check is included three times in the case\n// where all of the continuation bytes for a character exist in the same buffer.\n// It is also done this way as a slight performance increase instead of using a\n// loop.\nfunction utf8CheckExtraBytes(self, buf, p) {\n if ((buf[0] & 0xC0) !== 0x80) {\n self.lastNeed = 0;\n return '\\ufffd';\n }\n if (self.lastNeed > 1 && buf.length > 1) {\n if ((buf[1] & 0xC0) !== 0x80) {\n self.lastNeed = 1;\n return '\\ufffd';\n }\n if (self.lastNeed > 2 && buf.length > 2) {\n if ((buf[2] & 0xC0) !== 0x80) {\n self.lastNeed = 2;\n return '\\ufffd';\n }\n }\n }\n}\n\n// Attempts to complete a multi-byte UTF-8 character using bytes from a Buffer.\nfunction utf8FillLast(buf) {\n var p = this.lastTotal - this.lastNeed;\n var r = utf8CheckExtraBytes(this, buf, p);\n if (r !== undefined) return r;\n if (this.lastNeed <= buf.length) {\n buf.copy(this.lastChar, p, 0, this.lastNeed);\n return this.lastChar.toString(this.encoding, 0, this.lastTotal);\n }\n buf.copy(this.lastChar, p, 0, buf.length);\n this.lastNeed -= buf.length;\n}\n\n// Returns all complete UTF-8 characters in a Buffer. If the Buffer ended on a\n// partial character, the character's bytes are buffered until the required\n// number of bytes are available.\nfunction utf8Text(buf, i) {\n var total = utf8CheckIncomplete(this, buf, i);\n if (!this.lastNeed) return buf.toString('utf8', i);\n this.lastTotal = total;\n var end = buf.length - (total - this.lastNeed);\n buf.copy(this.lastChar, 0, end);\n return buf.toString('utf8', i, end);\n}\n\n// For UTF-8, a replacement character is added when ending on a partial\n// character.\nfunction utf8End(buf) {\n var r = buf && buf.length ? this.write(buf) : '';\n if (this.lastNeed) return r + '\\ufffd';\n return r;\n}\n\n// UTF-16LE typically needs two bytes per character, but even if we have an even\n// number of bytes available, we need to check if we end on a leading/high\n// surrogate. In that case, we need to wait for the next two bytes in order to\n// decode the last character properly.\nfunction utf16Text(buf, i) {\n if ((buf.length - i) % 2 === 0) {\n var r = buf.toString('utf16le', i);\n if (r) {\n var c = r.charCodeAt(r.length - 1);\n if (c >= 0xD800 && c <= 0xDBFF) {\n this.lastNeed = 2;\n this.lastTotal = 4;\n this.lastChar[0] = buf[buf.length - 2];\n this.lastChar[1] = buf[buf.length - 1];\n return r.slice(0, -1);\n }\n }\n return r;\n }\n this.lastNeed = 1;\n this.lastTotal = 2;\n this.lastChar[0] = buf[buf.length - 1];\n return buf.toString('utf16le', i, buf.length - 1);\n}\n\n// For UTF-16LE we do not explicitly append special replacement characters if we\n// end on a partial character, we simply let v8 handle that.\nfunction utf16End(buf) {\n var r = buf && buf.length ? this.write(buf) : '';\n if (this.lastNeed) {\n var end = this.lastTotal - this.lastNeed;\n return r + this.lastChar.toString('utf16le', 0, end);\n }\n return r;\n}\n\nfunction base64Text(buf, i) {\n var n = (buf.length - i) % 3;\n if (n === 0) return buf.toString('base64', i);\n this.lastNeed = 3 - n;\n this.lastTotal = 3;\n if (n === 1) {\n this.lastChar[0] = buf[buf.length - 1];\n } else {\n this.lastChar[0] = buf[buf.length - 2];\n this.lastChar[1] = buf[buf.length - 1];\n }\n return buf.toString('base64', i, buf.length - n);\n}\n\nfunction base64End(buf) {\n var r = buf && buf.length ? this.write(buf) : '';\n if (this.lastNeed) return r + this.lastChar.toString('base64', 0, 3 - this.lastNeed);\n return r;\n}\n\n// Pass bytes on through for single-byte encodings (e.g. ascii, latin1, hex)\nfunction simpleWrite(buf) {\n return buf.toString(this.encoding);\n}\n\nfunction simpleEnd(buf) {\n return buf && buf.length ? this.write(buf) : '';\n}","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n// a transform stream is a readable/writable stream where you do\n// something with the data. Sometimes it's called a \"filter\",\n// but that's not a great name for it, since that implies a thing where\n// some bits pass through, and others are simply ignored. (That would\n// be a valid example of a transform, of course.)\n//\n// While the output is causally related to the input, it's not a\n// necessarily symmetric or synchronous transformation. For example,\n// a zlib stream might take multiple plain-text writes(), and then\n// emit a single compressed chunk some time in the future.\n//\n// Here's how this works:\n//\n// The Transform stream has all the aspects of the readable and writable\n// stream classes. When you write(chunk), that calls _write(chunk,cb)\n// internally, and returns false if there's a lot of pending writes\n// buffered up. When you call read(), that calls _read(n) until\n// there's enough pending readable data buffered up.\n//\n// In a transform stream, the written data is placed in a buffer. When\n// _read(n) is called, it transforms the queued up data, calling the\n// buffered _write cb's as it consumes chunks. If consuming a single\n// written chunk would result in multiple output chunks, then the first\n// outputted bit calls the readcb, and subsequent chunks just go into\n// the read buffer, and will cause it to emit 'readable' if necessary.\n//\n// This way, back-pressure is actually determined by the reading side,\n// since _read has to be called to start processing a new chunk. However,\n// a pathological inflate type of transform can cause excessive buffering\n// here. For example, imagine a stream where every byte of input is\n// interpreted as an integer from 0-255, and then results in that many\n// bytes of output. Writing the 4 bytes {ff,ff,ff,ff} would result in\n// 1kb of data being output. In this case, you could write a very small\n// amount of input, and end up with a very large amount of output. In\n// such a pathological inflating mechanism, there'd be no way to tell\n// the system to stop doing the transform. A single 4MB write could\n// cause the system to run out of memory.\n//\n// However, even in such a pathological case, only a single written chunk\n// would be consumed, and then the rest would wait (un-transformed) until\n// the results of the previous transformed chunk were consumed.\n\n'use strict';\n\nmodule.exports = Transform;\n\nvar Duplex = require('./_stream_duplex');\n\n/*<replacement>*/\nvar util = require('core-util-is');\nutil.inherits = require('inherits');\n/*</replacement>*/\n\nutil.inherits(Transform, Duplex);\n\nfunction afterTransform(er, data) {\n var ts = this._transformState;\n ts.transforming = false;\n\n var cb = ts.writecb;\n\n if (!cb) {\n return this.emit('error', new Error('write callback called multiple times'));\n }\n\n ts.writechunk = null;\n ts.writecb = null;\n\n if (data != null) // single equals check for both `null` and `undefined`\n this.push(data);\n\n cb(er);\n\n var rs = this._readableState;\n rs.reading = false;\n if (rs.needReadable || rs.length < rs.highWaterMark) {\n this._read(rs.highWaterMark);\n }\n}\n\nfunction Transform(options) {\n if (!(this instanceof Transform)) return new Transform(options);\n\n Duplex.call(this, options);\n\n this._transformState = {\n afterTransform: afterTransform.bind(this),\n needTransform: false,\n transforming: false,\n writecb: null,\n writechunk: null,\n writeencoding: null\n };\n\n // start out asking for a readable event once data is transformed.\n this._readableState.needReadable = true;\n\n // we have implemented the _read method, and done the other things\n // that Readable wants before the first _read call, so unset the\n // sync guard flag.\n this._readableState.sync = false;\n\n if (options) {\n if (typeof options.transform === 'function') this._transform = options.transform;\n\n if (typeof options.flush === 'function') this._flush = options.flush;\n }\n\n // When the writable side finishes, then flush out anything remaining.\n this.on('prefinish', prefinish);\n}\n\nfunction prefinish() {\n var _this = this;\n\n if (typeof this._flush === 'function') {\n this._flush(function (er, data) {\n done(_this, er, data);\n });\n } else {\n done(this, null, null);\n }\n}\n\nTransform.prototype.push = function (chunk, encoding) {\n this._transformState.needTransform = false;\n return Duplex.prototype.push.call(this, chunk, encoding);\n};\n\n// This is the part where you do stuff!\n// override this function in implementation classes.\n// 'chunk' is an input chunk.\n//\n// Call `push(newChunk)` to pass along transformed output\n// to the readable side. You may call 'push' zero or more times.\n//\n// Call `cb(err)` when you are done with this chunk. If you pass\n// an error, then that'll put the hurt on the whole operation. If you\n// never call cb(), then you'll never get another chunk.\nTransform.prototype._transform = function (chunk, encoding, cb) {\n throw new Error('_transform() is not implemented');\n};\n\nTransform.prototype._write = function (chunk, encoding, cb) {\n var ts = this._transformState;\n ts.writecb = cb;\n ts.writechunk = chunk;\n ts.writeencoding = encoding;\n if (!ts.transforming) {\n var rs = this._readableState;\n if (ts.needTransform || rs.needReadable || rs.length < rs.highWaterMark) this._read(rs.highWaterMark);\n }\n};\n\n// Doesn't matter what the args are here.\n// _transform does all the work.\n// That we got here means that the readable side wants more data.\nTransform.prototype._read = function (n) {\n var ts = this._transformState;\n\n if (ts.writechunk !== null && ts.writecb && !ts.transforming) {\n ts.transforming = true;\n this._transform(ts.writechunk, ts.writeencoding, ts.afterTransform);\n } else {\n // mark that we need a transform, so that any data that comes in\n // will get processed, now that we've asked for it.\n ts.needTransform = true;\n }\n};\n\nTransform.prototype._destroy = function (err, cb) {\n var _this2 = this;\n\n Duplex.prototype._destroy.call(this, err, function (err2) {\n cb(err2);\n _this2.emit('close');\n });\n};\n\nfunction done(stream, er, data) {\n if (er) return stream.emit('error', er);\n\n if (data != null) // single equals check for both `null` and `undefined`\n stream.push(data);\n\n // if there's nothing in the write buffer, then that means\n // that nothing more will ever be provided\n if (stream._writableState.length) throw new Error('Calling transform done when ws.length != 0');\n\n if (stream._transformState.transforming) throw new Error('Calling transform done when still transforming');\n\n return stream.push(null);\n}","var isNodejs = require('./utils/isNodejs');\n\nlog.logify_input = logify_input;\n\nmodule.exports = log;\n\nvar project_name = 'Reassert';\nvar stringification_name = '(Reassert-stringification)';\n\nfunction log() {\n for(var i in arguments) {\n var input = arguments[i];\n var str = logify_input(input);\n console.log(str);\n }\n}\n\nfunction logify_input(input) {\n var str = get_str(input);\n\n // We cap huge strings to make scrolling not impossible\n var LIMIT = 10000;\n if( str && str.length > LIMIT ) {\n return str.slice(0, LIMIT)+'[CROPPED-BY-REASSERT]';\n }\n\n return str;\n}\n\nfunction get_str(input) {\n if( ! input ) {\n return input;\n }\n\n if( input.constructor === Array ) {\n return stringify_object(input);\n }\n\n var PREFIX_UGLY = '[object ';\n var input_str = toStr(input);\n if( input_str.slice(0, PREFIX_UGLY.length) === PREFIX_UGLY ) {\n return stringify_object(input);\n }\n return input_str;\n}\n\nfunction stringify_object(obj) {\n var obj_copy = get_prettier_copy(obj);\n try {\n return JSON.stringify(obj_copy, null, 2);\n } catch(e) {\n if( isNodejs() ) {\n var util = require('util');\n return util.inspect(obj);\n }\n return toStr(obj_copy)+'['+e+'][Error]'+stringification_name;\n }\n}\n\nfunction get_prettier_copy(el, parent_objects=[]) {\n if( ! (el instanceof Object) ) {\n return el;\n }\n\n if( el instanceof RegExp ) {\n if( ! el.toJSON ) {\n el.toJSON = function() {\n var str = '[RegExp: '+toStr(el)+']';\n return str;\n };\n }\n return el;\n }\n if( el instanceof Function ) {\n if( ! el.toJSON ) {\n el.toJSON = function() {\n var str = (\n ! el.name ? (\n '[Function]'\n ) : (\n '[Function: '+el.name+']'\n )\n );\n return str;\n };\n }\n return el;\n }\n\n if( el.constructor !== Object && el.constructor !== Array ) {\n return el;\n }\n\n if( parent_objects.includes(el) ) {\n return '[ALREADY_PRINTED_COPY]';\n }\n parent_objects = [el, ...parent_objects];\n\n var el_copy = new (el.constructor);\n for(var key in el) {\n el_copy[key] = get_prettier_copy(el[key], parent_objects);\n }\n return el_copy;\n}\n\nfunction toStr(thing) {\n if( typeof thing === \"object\" && !thing.toString ) {\n return '[object Object]';\n }\n return (''+thing);\n}\n","module.exports = isNodejs;\n\nfunction isNodejs() {\n return typeof \"process\" !== \"undefined\" && process && process.versions && process.versions.node;\n}\n","module.exports = {tableFormat, titleFormat};\n\nfunction tableFormat(rows, {padding=2, indent=' '}={}) {\n const columnWidths = [];\n\n rows.forEach(cells => {\n cells.forEach((cell, columnNumber) => {\n columnWidths[columnNumber] = (\n Math.max(\n getStringWidth(cell),\n columnWidths[columnNumber]||0\n )\n );\n });\n });\n\n const lines = [];\n\n rows.forEach(cells => {\n let line = indent;\n cells.forEach((cell, columnNumber) => {\n const colWidth = columnWidths[columnNumber];\n const isLastColumn = columnNumber===cells.length-1;\n const paddingRight = (\n isLastColumn ? (\n ''\n ) : (\n getBar(colWidth+padding, ' ').slice(getStringWidth(cell))\n )\n );\n line += cell + paddingRight;\n });\n lines.push(line);\n });\n\n return lines.join('\\n');\n}\n\nfunction titleFormat(title, {padding=3}={}) {\n // resolve cyclic dependency reassert => @brillout/format-text => reassert\n const assert_warning = require('reassert/warning');\n\n const min_bar_length = 40;\n title = ' '+title+' ';\n const titleWidth = getStringWidth(title);\n const barWidth = Math.max(min_bar_length, titleWidth+padding*2);\n const stringWidth = require('string-width');\n const leftWidth = Math.floor((barWidth - titleWidth) / 2);\n const bar = getBar(barWidth);\n const title_bar = getBar(leftWidth) + title + getBar(barWidth - leftWidth - titleWidth);\n assert_warning(getStringWidth(bar)===getStringWidth(title_bar));\n return (\n [\n bar,\n title_bar,\n bar,\n ].join('\\n')\n );\n}\nfunction getStringWidth(str) {\n if( ! isNodejs() ) {\n return str.length;\n }\n const stringWidth = eval('require')('string-width');\n return stringWidth(str);\n}\nfunction isNodejs() {\n return typeof process !== \"undefined\" && typeof window === \"undefined\";\n}\n\nfunction getBar(barWidth, filler='*') {\n return new Array(barWidth).fill(filler).join('');\n}\n","module.exports = isNodejs;\n\nfunction isNodejs() {\n return typeof \"process\" !== \"undefined\" && process && process.versions && process.versions.node;\n}\n","/* global localStorage */\nimport EventEmitter from './EventEmitter'\nimport DataObject from './DataObject'\nimport Filter from './Filter'\nimport LZString from 'lz-string'\nimport { merge, get, set } from 'lodash'\nimport Delayer from './Delayer'\nimport LocalStorageMap from './LocalStorageMap'\n\n/**\n * Base class for a region.\n *\n * @event updated When any data in the region changes. This also indicates that there is no longer an error.\n * @event object.updated When a data object changes. Called with the ID of the changed object.\n * @event object.removed When a data object is removed. Called with the ID of the removed object.\n * @event error When an error occurs.\n * @event closed When the inventory is closed. eg. When the user is logged out\n */\nexport default class Region extends EventEmitter {\n /** @private Subclasses should use this to update and start monitoring the region */\n constructor (dataPool) {\n super()\n\n /** If true, this region will not be cached to disk. */\n this.noCache = false\n\n /** Store reference to the data pool */\n this.dataPool = dataPool\n\n /** True if data in this region is entirely in sync with the backend */\n this.synchronized = false\n\n /** If there's an error, this contains the current error. */\n this.error = null\n\n // Try to make region stable immediately\n this._syncPromise = null\n Delayer.run(e => this.synchronize())\n }\n\n /** Lazy load the objects database */\n get objects() {\n\n // Check if loaded already\n if (this._objects)\n return this._objects\n\n // Create DB\n this._objects = new LocalStorageMap(this.stateKey, this.noCache)\n return this._objects\n\n }\n\n /**\n * Re-synchronizes the region by manually fetching everything from the server again.\n */\n forceSynchronize () {\n this.synchronized = false\n return this.synchronize()\n }\n\n /**\n * This will try to make the region stable by querying the backend for all data.\n *\n * @private Called by the Region superclass.\n * @returns {Promise} Resolves once the region is in sync with the backend.\n */\n synchronize () {\n // Stop if already running\n if (this._syncPromise) { return this._syncPromise }\n\n // Remove pending error\n this.error = null\n this.emit('updated')\n\n // Stop if already in sync\n if (this.synchronized) { return Promise.resolve() }\n\n // Do the sync\n this._syncPromise = this._synchronize().catch(err => {\n // Error handling, notify listeners of an error\n this._syncPromise = null\n this.error = err\n console.error(err)\n this.emit('error', err)\n })\n\n // Return promise\n return this._syncPromise\n\n }\n\n async _synchronize() {\n\n // Sync start\n console.log(`[DataPool > Region] Starting synchronization for region ${this.stateKey}`)\n\n // Create and load the database\n await this.objects.load()\n this.emit('updated')\n\n // Allow plugin to start loading content\n let loadedIDs = await this.load()\n\n // If the subclass load() returned an array of IDs, we can remove everything which is not in that list.\n if (loadedIDs && typeof loadedIDs.length === 'number') {\n\n let keysToRemove = []\n for (let id of this.objects.keys()) {\n\n // Skip 'extra' keys used internally for sync state vars\n if (id.startsWith('extra:')) continue\n\n // Check if it's in our list\n if (!loadedIDs.includes(id)) { keysToRemove.push(id) }\n\n }\n\n // Remove vatoms\n this.removeObjects(keysToRemove)\n \n }\n\n // All data is up to date!\n this.synchronized = true\n this._syncPromise = null\n this.emit('updated')\n console.log(`[DataPool > Region] Region '${this.stateKey}' is now in sync!`)\n \n }\n\n /**\n * A key which is unique for this exact region. This is used when saving/restoring state to disk.\n *\n * @abstract Subclasses should override this.\n * @returns {String} The state key.\n */\n get stateKey () {\n throw new Error(`Subclasses must override 'get stateKey()' in order to correctly handle saving/restoring state to disk.`)\n }\n\n /**\n * Start initial load. This should resolve once the region is up to date.\n *\n * @private Called by the Region superclass.\n * @abstract Subclasses should override this.\n * @returns {Promise<>} Once this promise resolves, the region should be stable.\n */\n async load () {\n throw new Error(`Subclasses must override Region.load()`)\n }\n\n /**\n * Stop and destroy this region.\n *\n * @abstract Subclasses should override this, but call super.close()\n */\n close () {\n // Notify data pool we have closed\n this.dataPool.removeRegion(this)\n this.emit('closed')\n }\n\n /**\n * Checks if the specified query matches our region. This is used to identify if a region request\n * can be satisfied by this region, or if a new region should be created.\n *\n * @private Called by DataPool.\n * @abstract Subclasses should override this.\n * @param {string} id The region plugin ID\n * @param {*} descriptor The region-specific filter data.\n */\n matches (id, descriptor) {\n throw new Error('Subclasses must override Region.matches()')\n }\n\n /**\n * Stores a collection of data objects which have been added to the pool.\n *\n * @private Called by subclasses.\n * @param {DataObject[]} objects List of new data objects added to the pool.\n */\n addObjects (objects) {\n\n // Go through each object\n for (let obj of objects) {\n\n // Check if object exists already\n let existingObject = this.objects.get(obj.id)\n if (existingObject) {\n\n // Notify\n this.willUpdateFields(existingObject, obj.data)\n\n // It exists already, update the object\n existingObject.data = obj.data\n existingObject.cached = null\n\n // Update database copy\n this.objects.set(obj.id, obj)\n\n } else {\n\n // Notify\n this.willAdd(obj)\n\n // It does not exist, add it\n this.objects.set(obj.id, obj)\n\n }\n\n // Emit event, on next run loop so all objects are added first\n Delayer.run(e => this.emit('object.updated', obj.id))\n\n }\n\n // Notify updated\n if (objects.length > 0) \n this.emit('updated')\n\n }\n\n /**\n * Updates data objects within our pool.\n *\n * @private Called by subclasses\n * @param {Object[]} objects An array of changes. Each object contains an `id` string and a `new_data` sparse object containing the changed fields.\n */\n updateObjects (objects) {\n // Go through each object\n let didUpdate = false\n for (let obj of objects) {\n // Fetch existing object\n let existingObject = this.objects.get(obj.id)\n if (!existingObject) { continue }\n\n // Stop if existing object doesn't have the full data\n if (!existingObject.data) { continue }\n\n // Notify\n this.willUpdateFields(existingObject, obj.new_data)\n\n // Update fields\n merge(existingObject.data, obj.new_data)\n\n // Clear cached values\n existingObject.cached = null\n\n // Emit event, on next run loop so all objects are updated first\n Delayer.run(e => this.emit('object.updated', obj.id))\n didUpdate = true\n }\n\n // Notify updated\n if (didUpdate) { this.emit('updated') }\n }\n\n /**\n * Removes the specified objects from our pool.\n *\n * @private Called by subclasses.\n * @param {String[]} ids An array of object IDs to remove.\n */\n removeObjects (ids) {\n // Remove all data objects with the specified IDs\n let didUpdate = false\n for (let id of ids) {\n // Notify\n this.willRemove(id)\n\n // Remove it\n if (this.objects.delete(id)) {\n // Emit event, on next run loop so all objects are updated first\n Delayer.run(e => this.emit('object.removed', id))\n didUpdate = true\n }\n }\n\n // Notify updated\n if (didUpdate) { this.emit('updated') }\n }\n\n /**\n * If a region plugin depends on the session data, it may override this method and `this.close()` itself if needed.\n *\n * @private Called by DataPool.\n * @abstract Subclasses can override this if they want.\n * @param {*} info The new session info.\n */\n onSessionInfoChanged (info) {}\n\n /**\n * If the plugin wants, it can map DataObjects to another type. This takes in a DataObject and returns a new type.\n * If you return null, the specified data object will not be returned.\n *\n * The default implementation simply returns the DataObject.\n *\n * @param {DataObject} object The input raw object\n * @returns {*} The output object.\n */\n map (object) {\n return object\n }\n\n /**\n * Iterate over each object in this region. Return `false` from the callback to stop. This does not wait\n * for the region to synchronize. This is a synchronous function.\n *\n * @param {Function(*)} callback Gets called once for each objbect in the region.\n */\n forEach (callback) {\n // Go through all data objects\n for (let object of this.objects.values()) {\n // Check for cached object\n let mapped = object.cached\n\n // Check if no cached object\n if (!mapped) {\n // Map to the plugin's intended type\n object.cached = mapped = this.map(object)\n }\n\n // Stop if no mapped object\n if (!mapped) { continue }\n\n // Call callback, stop if they returned false\n if (callback(mapped) === false) { break }\n }\n }\n\n /**\n * Returns all the objects within this region.\n *\n * @param {Boolean} waitUntilStable If true, will wait until all data objects have been retrieved. If false, will return immediately with current data.\n * @returns {Promise<Object[]>} An array of objects in this region. If `waitUntilStable` is false, returns the array immediately (without the promise).\n */\n get (waitUntilStable = true) {\n // Synchronize now\n if (waitUntilStable) {\n return this.synchronize().then(e => this.get(false))\n }\n\n // Create an array of all data objects\n let items = []\n for (let object of this.objects.values()) {\n // Check for cached object\n if (object.cached) {\n items.push(object.cached)\n continue\n }\n\n // Map to the plugin's intended type\n let mapped = this.map(object)\n if (!mapped) {\n continue\n }\n\n // Cache it\n object.cached = mapped\n\n // Add to list\n items.push(mapped)\n }\n\n // Done\n return items\n }\n\n /**\n * Returns an object within this region by it's ID.\n *\n * @param {Boolean} waitUntilStable If true, will wait until all data objects have been retrieved. If false, will return immediately with current data.\n * @returns {Promise<Object>} An object in this region. If `waitUntilStable` is false, returns immediately (without the promise).\n */\n getItem (id, waitUntilStable = true) {\n // Synchronize now\n if (waitUntilStable) {\n return this.synchronize().then(e => this.getItem(id, false))\n }\n\n // Get object\n let object = this.objects.get(id)\n if (!object) {\n return null\n }\n\n // Check for cached object\n if (object.cached) { return object.cached }\n\n // Map to the plugin's intended type\n let mapped = this.map(object)\n if (!mapped) { return null }\n\n // Cache it\n object.cached = mapped\n\n // Done\n return mapped\n }\n\n /**\n * Returns true if the object with the specified ID exists in the cache.\n *\n * @param {*} id The object's ID\n * @returns {boolean} True if the object exists.\n */\n has (id) {\n return this.objects.has(id)\n }\n\n /**\n * Change a field, and return a function which can be called to undo the change.\n *\n * @param {String} id Object ID\n * @param {String} keyPath The key to change\n * @param {*} value The new value\n * @returns {Function} An undo function\n */\n preemptiveChange (id, keyPath, value) {\n // Get object. If it doesn't exist, do nothing and return an undo function which does nothing.\n let object = this.objects.get(id)\n if (!object) { return function () {} }\n\n // Get current value\n let oldValue = get(object.data, keyPath)\n\n // Notify\n this.willUpdateField(object, keyPath, oldValue, value)\n\n // Update to new value\n set(object.data, keyPath, value)\n object.cached = null\n this.emit('object.updated', id)\n this.emit('updated')\n\n // Notify database of change\n this.objects.set(id, object)\n\n // Return undo function\n return e => {\n // Notify\n this.willUpdateField(object, keyPath, value, oldValue)\n\n // Revert\n set(object.data, keyPath, oldValue)\n object.cached = null\n this.emit('object.updated', id)\n this.emit('updated')\n\n // Notify database of change\n this.objects.set(id, object)\n }\n }\n\n /**\n * Remove an object, and return an undo function.\n *\n * @param {String} id The ID of the object to remove.\n * @returns {Function} An undo function\n */\n preemptiveRemove (id) {\n // Get object. If it doesn't exist, do nothing and return an undo function which does nothing.\n let object = this.objects.get(id)\n if (!object) { return function () {} }\n\n // Notify\n this.willRemove(object)\n\n // Remove object\n this.objects.delete(id)\n this.emit('updated')\n\n // Return undo function\n return e => {\n // Check that a new object wasn't added in the mean time\n if (this.objects.has(id)) { return }\n\n // Notify\n this.willAdd(object)\n\n // Revert\n this.addObjects([object])\n }\n }\n\n /**\n * Create a filter\n *\n * @param {String} keyPath The data path to check\n * @param {*} value The value to check for\n * @returns {Filter} The filtered region\n */\n filter (keyPath, value) {\n return new Filter(this, keyPath, value)\n }\n\n /**\n * Called when an object is about to be added.\n *\n * @private\n * @abstract Can be overridden by subclasses which need to get these events.\n * @param {DataObject} object The object which will be added.\n */\n willAdd (object) {}\n\n /**\n * Called when an object is about to be updated.\n *\n * @private\n * @abstract Can be overridden by subclasses which need to get these events.\n * @param {DataObject} object The object which will be updated.\n * @param {Object} newData The sparse object containing the changed fields\n */\n willUpdateFields (object, newData) {}\n\n /**\n * Called when an object is about to be updated.\n *\n * @private\n * @abstract Can be overridden by subclasses which need to get these events.\n * @param {DataObject} object The object which will be updated.\n * @param {String} keyPath The field which will be changed.\n * @param {*} oldValue The current field value.\n * @param {*} newValue The new field value.\n */\n willUpdateField (object, keyPath, oldValue, newValue) {}\n\n /**\n * Called when an object is about to be removed.\n *\n * @private\n * @abstract Can be overridden by subclasses which need to get these events.\n * @param {DataObject|String} objectOrID The object (or ID) which will be updated.\n */\n willRemove (objectOrID) {}\n}\n","\r\nimport { get } from 'lodash'\r\n\r\n/**\r\n * A Filter exposes the same functions as a Region, except the returned data is filtered by the specified key.\r\n */\r\nexport default class Filter {\r\n\r\n /** Constructor */\r\n constructor(region, keyPath, value) {\r\n\r\n // Store values\r\n this.region = region\r\n this.keyPath = keyPath\r\n this.value = value\r\n\r\n }\r\n\r\n /** Passthrough */\r\n get objects() {\r\n return this.region.objects\r\n }\r\n\r\n /** Passthrough */\r\n synchronize() {\r\n return this.region.synchronize()\r\n }\r\n\r\n /** Passthrough */\r\n getItem(id, waitUntilStable = true) {\r\n return this.region.getItem(id, waitUntilStable)\r\n }\r\n\r\n /** Passthrough */\r\n map(object) {\r\n return this.region.map(object)\r\n }\r\n\r\n /**\r\n * Returns all the objects within this region, filtered by this filter.\r\n * \r\n * @param {Boolean} waitUntilStable If true, will wait until all data objects have been retrieved. If false, will return immediately with current data.\r\n * @returns {Promise<Object[]>} An array of objects in this region. If `waitUntilStable` is false, returns the array immediately (without the promise).\r\n */\r\n get(waitUntilStable = true) {\r\n\r\n // Synchronize now\r\n if (waitUntilStable)\r\n return this.synchronize().then(e => this.get(false))\r\n\r\n // Create an array of all data objects\r\n let items = []\r\n for (let object of this.objects.values()) {\r\n\r\n // Check filtered value\r\n let value = get(object.data, this.keyPath)\r\n if (value != this.value)\r\n continue\r\n\r\n // Check for cached object\r\n if (object.cached) {\r\n items.push(object.cached)\r\n continue\r\n }\r\n\r\n // Map to the plugin's intended type\r\n let mapped = this.map(object)\r\n if (!mapped)\r\n continue\r\n\r\n // Cache it\r\n object.cached = mapped\r\n\r\n // Add to list\r\n items.push(mapped)\r\n\r\n }\r\n\r\n // Done\r\n return items\r\n\r\n }\r\n\r\n /** \r\n * Create a filter.\r\n * \r\n * @param {String} keyPath The data path to check\r\n * @param {*} value The value to check for\r\n * @returns {Filter} The filtered region\r\n */\r\n // TODO: Implement subfiltering\r\n // filter(keyPath, value) {\r\n // return new Filter(this, keyPath, value)\r\n // }\r\n\r\n}","import DataObject from './DataObject'\r\nimport LZUTF8 from 'lzutf8'\r\nimport LZUTF8WorkerScript from './LZUTF8WorkerScript.js'\r\n\r\n/** \r\n * A version of the built-in Map class, but which synchronizes to localStorage for offline access. Key must be a string,\r\n * and value must be a DataObject.\r\n */\r\nexport default class Database {\r\n\r\n constructor(id, noStore) {\r\n\r\n // Store ID\r\n this.id = id\r\n this.noStore = noStore\r\n\r\n // Local cache of objects\r\n this.cache = new Map()\r\n\r\n }\r\n\r\n /** Load documents from storage. This must be called before the map can be used correctly. */\r\n async load() {\r\n \r\n // Only do once\r\n if (this.loaded) return\r\n this.loaded = true\r\n\r\n try {\r\n\r\n // Stop if no store\r\n if (this.noStore)\r\n return\r\n\r\n // Fetch compressed data\r\n let compressed = localStorage['sync.' + this.id]\r\n if (!compressed)\r\n return\r\n\r\n // Apply worker script if possible\r\n if (window.Blob && window.URL && window.Worker) {\r\n\r\n // Worker available\r\n let blob = new Blob([atob(LZUTF8WorkerScript)])\r\n let url = URL.createObjectURL(blob)\r\n LZUTF8.WebWorker.scriptURI = url\r\n\r\n } else {\r\n\r\n // Worker not available\r\n console.warn(`[DataPool > LocalStorageMap] Web worker unavailable, app performance may suffer while saving or loading.`)\r\n\r\n }\r\n\r\n // Decompress it\r\n // TODO: Ensure it's using a worker\r\n let startTime = Date.now()\r\n let uncompressed = await new Promise((resolve, reject) => {\r\n LZUTF8.decompressAsync(compressed, { inputEncoding: \"StorageBinaryString\" }, (result, error) => {\r\n if (error) reject(error)\r\n else resolve(result)\r\n })\r\n })\r\n\r\n // Store each item in the memory cache\r\n let rows = JSON.parse(uncompressed)\r\n for (let row of rows) {\r\n\r\n // Create and cache the DataObject\r\n let obj = new DataObject(row.type, row.id, row.data)\r\n this.cache.set(row.id, obj)\r\n\r\n }\r\n\r\n // Done!\r\n console.debug(`[DataPool > LocalStorageMap] Loaded ${rows.length} items from ${Math.floor(uncompressed.length / 1024)} KB of data (from ${Math.floor(compressed.length / 1024)} KB compressed) in ${Date.now() - startTime} ms`)\r\n\r\n } catch (err) {\r\n\r\n // Failed to load cached items\r\n console.warn(`[DataPool > LocalStorageMap] Unable to load cached items: ${err.message}`)\r\n\r\n }\r\n\r\n }\r\n\r\n /** Passthrough getter functions, these don't modify the database */\r\n get size() { return this.cache.size }\r\n entries() { return this.cache.entries() }\r\n forEach(callback, thisValue) { return this.cache.forEach(callback, thisValue) }\r\n get(key) { return this.cache.get(key) }\r\n has(key) { return this.cache.has(key) }\r\n keys() { return this.cache.keys() }\r\n values() { return this.cache.values() }\r\n [Symbol.iterator]() { return this.cache[Symbol.iterator]() }\r\n\r\n clear() {\r\n\r\n // Clear the array\r\n this.cache.clear()\r\n\r\n // Save soon\r\n this.saveSoon()\r\n\r\n }\r\n\r\n delete(key) {\r\n\r\n // Delete item\r\n let found = this.cache.delete(key)\r\n\r\n // Save soon\r\n if (found)\r\n this.saveSoon()\r\n\r\n // Done\r\n return found\r\n\r\n }\r\n\r\n /** Set a value. `value` must be a DataObject. */\r\n set(key, value) {\r\n\r\n // Set it in the memory cache\r\n this.cache.set(key, value)\r\n\r\n // Save soon\r\n this.saveSoon()\r\n\r\n }\r\n\r\n /** Get a string extra value */\r\n getExtra(key) {\r\n\r\n // Get item\r\n let itm = this.get('extra:' + key)\r\n if (itm)\r\n return itm.data\r\n else\r\n return null\r\n\r\n }\r\n\r\n /** Set a string extra */\r\n setExtra(key, value) {\r\n\r\n // Set item if it's changed\r\n if (this.getExtra(key) != value)\r\n this.set('extra:' + key, { type: '_extra', data: value })\r\n\r\n }\r\n\r\n /** @private Save changes soon */\r\n saveSoon() {\r\n\r\n // If web workers are supported, save as quick as possible. If not, add a delay to prevent freezing the browser main thread.\r\n let saveInterval = window.Worker ? 100 : 2000\r\n\r\n // Start a timer to save soon, unless one exists already\r\n if (!this.saveTimer) {\r\n\r\n // Create save timer\r\n this.saveTimer = setTimeout(this.save.bind(this), saveInterval)\r\n\r\n } else {\r\n\r\n // Changes still occurring, schedule another save\r\n this.changesStillOccurring = true\r\n\r\n }\r\n\r\n }\r\n\r\n /** @private Save to local storage now */\r\n async save() {\r\n\r\n // Stop if changes are still occurring\r\n if (this.changesStillOccurring) {\r\n\r\n // Wait until it stops\r\n this.saveTimer = null\r\n this.saveSoon()\r\n this.changesStillOccurring = false\r\n return\r\n\r\n }\r\n\r\n // Catch errors\r\n try {\r\n\r\n // Stop if no store\r\n if (this.noStore)\r\n return\r\n\r\n // Serialize data\r\n let startedAt = Date.now()\r\n let items = []\r\n this.cache.forEach((obj, id) => {\r\n items.push({ id, type: obj.type, data: obj.data })\r\n })\r\n let uncompressed = JSON.stringify(items)\r\n\r\n // Compress it\r\n let compressed = await new Promise((resolve, reject) => {\r\n LZUTF8.compressAsync(uncompressed, { outputEncoding: \"StorageBinaryString\" }, (result, error) => {\r\n if (error) reject(error)\r\n else resolve(result)\r\n })\r\n })\r\n\r\n // Save to storage\r\n localStorage['sync.' + this.id] = compressed\r\n\r\n // Done!\r\n console.debug(`[DataPool > LocalStorageMap] Saved ${items.length} items, using ${Math.floor(compressed.length / 1024)} KB of data (${Math.floor(uncompressed.length / 1024)} KB uncompressed) in ${Date.now() - startedAt} ms`)\r\n\r\n } catch (err) {\r\n\r\n // Failed!\r\n console.warn(`[DataPool > LocalStorageMap] Failed to save! ${err.message}`)\r\n\r\n }\r\n\r\n // Remove save timer\r\n this.saveTimer = null\r\n\r\n // If changes occurred during the save, save again\r\n if (this.changesStillOccurring) {\r\n this.changesStillOccurring = false\r\n this.saveSoon()\r\n }\r\n\r\n }\r\n\r\n}","export default `dmFyIExaVVRGODtpZighZnVuY3Rpb24obil7bi5ydW5uaW5nSW5Ob2RlSlM9ZnVuY3Rpb24oKXtyZXR1cm4ib2JqZWN0Ij09dHlwZW9mIHByb2Nlc3MmJiJvYmplY3QiPT10eXBlb2YgcHJvY2Vzcy52ZXJzaW9ucyYmInN0cmluZyI9PXR5cGVvZiBwcm9jZXNzLnZlcnNpb25zLm5vZGV9LG4ucnVubmluZ0luTWFpbk5vZGVKU01vZHVsZT1mdW5jdGlvbigpe3JldHVybiBuLnJ1bm5pbmdJbk5vZGVKUygpJiZyZXF1aXJlLm1haW49PT1tb2R1bGV9LG4uY29tbW9uSlNBdmFpbGFibGU9ZnVuY3Rpb24oKXtyZXR1cm4ib2JqZWN0Ij09dHlwZW9mIG1vZHVsZSYmIm9iamVjdCI9PXR5cGVvZiBtb2R1bGUuZXhwb3J0c30sbi5ydW5uaW5nSW5XZWJXb3JrZXI9ZnVuY3Rpb24oKXtyZXR1cm4idW5kZWZpbmVkIj09dHlwZW9mIHdpbmRvdyYmIm9iamVjdCI9PXR5cGVvZiBzZWxmJiYiZnVuY3Rpb24iPT10eXBlb2Ygc2VsZi5hZGRFdmVudExpc3RlbmVyJiYiZnVuY3Rpb24iPT10eXBlb2Ygc2VsZi5jbG9zZX0sbi5ydW5uaW5nSW5Ob2RlQ2hpbGRQcm9jZXNzPWZ1bmN0aW9uKCl7cmV0dXJuIG4ucnVubmluZ0luTm9kZUpTKCkmJiJmdW5jdGlvbiI9PXR5cGVvZiBwcm9jZXNzLnNlbmR9LG4ucnVubmluZ0luTnVsbE9yaWdpbj1mdW5jdGlvbigpe3JldHVybiJvYmplY3QiPT10eXBlb2Ygd2luZG93JiYib2JqZWN0Ij09dHlwZW9mIHdpbmRvdy5sb2NhdGlvbiYmKCJodHRwOiIhPT1kb2N1bWVudC5sb2NhdGlvbi5wcm90b2NvbCYmImh0dHBzOiIhPT1kb2N1bWVudC5sb2NhdGlvbi5wcm90b2NvbCl9LG4ud2ViV29ya2Vyc0F2YWlsYWJsZT1mdW5jdGlvbigpe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiBXb3JrZXImJiFuLnJ1bm5pbmdJbk51bGxPcmlnaW4oKSYmKCFuLnJ1bm5pbmdJbk5vZGVKUygpJiYhKG5hdmlnYXRvciYmbmF2aWdhdG9yLnVzZXJBZ2VudCYmMDw9bmF2aWdhdG9yLnVzZXJBZ2VudC5pbmRleE9mKCJBbmRyb2lkIDQuMyIpKSl9LG4ubG9nPWZ1bmN0aW9uKGUsdCl7dm9pZCAwPT09dCYmKHQ9ITEpLCJvYmplY3QiPT10eXBlb2YgY29uc29sZSYmKGNvbnNvbGUubG9nKGUpLHQmJiJvYmplY3QiPT10eXBlb2YgZG9jdW1lbnQmJihkb2N1bWVudC5ib2R5LmlubmVySFRNTCs9ZSsiPGJyLz4iKSl9LG4uY3JlYXRlRXJyb3JNZXNzYWdlPWZ1bmN0aW9uKGUsdCl7aWYodm9pZCAwPT09dCYmKHQ9IlVuaGFuZGxlZCBleGNlcHRpb24iKSxudWxsPT1lKXJldHVybiB0O2lmKHQrPSI6ICIsIm9iamVjdCIhPXR5cGVvZiBlLmNvbnRlbnQpcmV0dXJuInN0cmluZyI9PXR5cGVvZiBlLmNvbnRlbnQ/dCtlLmNvbnRlbnQ6dCtlO2lmKG4ucnVubmluZ0luTm9kZUpTKCkpcmV0dXJuIHQrZS5jb250ZW50LnN0YWNrO3ZhciByPUpTT04uc3RyaW5naWZ5KGUuY29udGVudCk7cmV0dXJuInt9IiE9PXI/dCtyOnQrZS5jb250ZW50fSxuLnByaW50RXhjZXB0aW9uQW5kU3RhY2tUcmFjZVRvQ29uc29sZT1mdW5jdGlvbihlLHQpe3ZvaWQgMD09PXQmJih0PSJVbmhhbmRsZWQgZXhjZXB0aW9uIiksbi5sb2cobi5jcmVhdGVFcnJvck1lc3NhZ2UoZSx0KSl9LG4uZ2V0R2xvYmFsT2JqZWN0PWZ1bmN0aW9uKCl7cmV0dXJuIm9iamVjdCI9PXR5cGVvZiBnbG9iYWw/Z2xvYmFsOiJvYmplY3QiPT10eXBlb2Ygd2luZG93P3dpbmRvdzoib2JqZWN0Ij09dHlwZW9mIHNlbGY/c2VsZjp7fX0sbi50b1N0cmluZz1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLG4uY29tbW9uSlNBdmFpbGFibGUoKSYmKG1vZHVsZS5leHBvcnRzPW4pfShMWlVURjg9TFpVVEY4fHx7fSksImZ1bmN0aW9uIj09dHlwZW9mIFVpbnQ4QXJyYXkmJjAhPT1uZXcgVWludDhBcnJheSgxKS5zdWJhcnJheSgxKS5ieXRlTGVuZ3RoKXt2YXIgc3ViYXJyYXk9ZnVuY3Rpb24oZSx0KXtmdW5jdGlvbiByKGUsdCxyKXtyZXR1cm4gZTx0P3Q6cjxlP3I6ZX1lfD0wLHR8PTAsYXJndW1lbnRzLmxlbmd0aDwxJiYoZT0wKSxhcmd1bWVudHMubGVuZ3RoPDImJih0PXRoaXMubGVuZ3RoKSxlPDAmJihlPXRoaXMubGVuZ3RoK2UpLHQ8MCYmKHQ9dGhpcy5sZW5ndGgrdCksZT1yKGUsMCx0aGlzLmxlbmd0aCk7dmFyIG49KHQ9cih0LDAsdGhpcy5sZW5ndGgpKS1lO3JldHVybiBuPDAmJihuPTApLG5ldyB0aGlzLmNvbnN0cnVjdG9yKHRoaXMuYnVmZmVyLHRoaXMuYnl0ZU9mZnNldCtlKnRoaXMuQllURVNfUEVSX0VMRU1FTlQsbil9LHR5cGVzPVsiSW50OEFycmF5IiwiVWludDhBcnJheSIsIlVpbnQ4Q2xhbXBlZEFycmF5IiwiSW50MTZBcnJheSIsIlVpbnQxNkFycmF5IiwiSW50MzJBcnJheSIsIlVpbnQzMkFycmF5IiwiRmxvYXQzMkFycmF5IiwiRmxvYXQ2NEFycmF5Il0sZ2xvYmFsT2JqZWN0PXZvaWQgMDtpZigib2JqZWN0Ij09dHlwZW9mIHdpbmRvdz9nbG9iYWxPYmplY3Q9d2luZG93OiJvYmplY3QiPT10eXBlb2Ygc2VsZiYmKGdsb2JhbE9iamVjdD1zZWxmKSx2b2lkIDAhPT1nbG9iYWxPYmplY3QpZm9yKHZhciBpPTA7aTx0eXBlcy5sZW5ndGg7aSsrKWdsb2JhbE9iamVjdFt0eXBlc1tpXV0mJihnbG9iYWxPYmplY3RbdHlwZXNbaV1dLnByb3RvdHlwZS5zdWJhcnJheT1zdWJhcnJheSl9IWZ1bmN0aW9uKGYpe3ZhciBlPSh0LmNvbXByZXNzQXN5bmM9ZnVuY3Rpb24oZSxuLG8pe3ZhciBpPW5ldyBmLlRpbWVyLHU9bmV3IGYuQ29tcHJlc3NvcjtpZighbyl0aHJvdyBuZXcgVHlwZUVycm9yKCJjb21wcmVzc0FzeW5jOiBObyBjYWxsYmFjayBhcmd1bWVudCBnaXZlbiIpO2lmKCJzdHJpbmciPT10eXBlb2YgZSllPWYuZW5jb2RlVVRGOChlKTtlbHNlIGlmKG51bGw9PWV8fCEoZSBpbnN0YW5jZW9mIFVpbnQ4QXJyYXkpKXJldHVybiB2b2lkIG8odm9pZCAwLG5ldyBUeXBlRXJyb3IoImNvbXByZXNzQXN5bmM6IEludmFsaWQgaW5wdXQgYXJndW1lbnQsIG9ubHkgJ3N0cmluZycgYW5kICdVaW50OEFycmF5JyBhcmUgc3VwcG9ydGVkIikpO3ZhciBzPWYuQXJyYXlUb29scy5zcGxpdEJ5dGVBcnJheShlLG4uYmxvY2tTaXplKSxhPVtdLGM9ZnVuY3Rpb24oZSl7aWYoZTxzLmxlbmd0aCl7dmFyIHQ9dm9pZCAwO3RyeXt0PXUuY29tcHJlc3NCbG9jayhzW2VdKX1jYXRjaChlKXtyZXR1cm4gdm9pZCBvKHZvaWQgMCxlKX1hLnB1c2godCksaS5nZXRFbGFwc2VkVGltZSgpPD0yMD9jKGUrMSk6KGYuZW5xdWV1ZUltbWVkaWF0ZShmdW5jdGlvbigpe3JldHVybiBjKGUrMSl9KSxpLnJlc3RhcnQoKSl9ZWxzZXt2YXIgcj1mLkFycmF5VG9vbHMuY29uY2F0VWludDhBcnJheXMoYSk7Zi5lbnF1ZXVlSW1tZWRpYXRlKGZ1bmN0aW9uKCl7dmFyIGU7dHJ5e2U9Zi5Db21wcmVzc2lvbkNvbW1vbi5lbmNvZGVDb21wcmVzc2VkQnl0ZXMocixuLm91dHB1dEVuY29kaW5nKX1jYXRjaChlKXtyZXR1cm4gdm9pZCBvKHZvaWQgMCxlKX1mLmVucXVldWVJbW1lZGlhdGUoZnVuY3Rpb24oKXtyZXR1cm4gbyhlKX0pfSl9fTtmLmVucXVldWVJbW1lZGlhdGUoZnVuY3Rpb24oKXtyZXR1cm4gYygwKX0pfSx0LmNyZWF0ZUNvbXByZXNzaW9uU3RyZWFtPWZ1bmN0aW9uKCl7dmFyIG89bmV3IGYuQ29tcHJlc3NvcixpPW5ldyhyZXF1aXJlKCJzdHJlYW0iKS5UcmFuc2Zvcm0pKHtkZWNvZGVTdHJpbmdzOiEwLGhpZ2hXYXRlck1hcms6NjU1MzZ9KTtyZXR1cm4gaS5fdHJhbnNmb3JtPWZ1bmN0aW9uKGUsdCxyKXt2YXIgbjt0cnl7bj1mLkJ1ZmZlclRvb2xzLnVpbnQ4QXJyYXlUb0J1ZmZlcihvLmNvbXByZXNzQmxvY2soZi5CdWZmZXJUb29scy5idWZmZXJUb1VpbnQ4QXJyYXkoZSkpKX1jYXRjaChlKXtyZXR1cm4gdm9pZCBpLmVtaXQoImVycm9yIixlKX1pLnB1c2gobikscigpfSxpfSx0KTtmdW5jdGlvbiB0KCl7fWYuQXN5bmNDb21wcmVzc29yPWV9KExaVVRGOD1MWlVURjh8fHt9KSxmdW5jdGlvbihmKXt2YXIgZT0odC5kZWNvbXByZXNzQXN5bmM9ZnVuY3Rpb24oZSxuLG8pe2lmKCFvKXRocm93IG5ldyBUeXBlRXJyb3IoImRlY29tcHJlc3NBc3luYzogTm8gY2FsbGJhY2sgYXJndW1lbnQgZ2l2ZW4iKTt2YXIgaT1uZXcgZi5UaW1lcjt0cnl7ZT1mLkNvbXByZXNzaW9uQ29tbW9uLmRlY29kZUNvbXByZXNzZWRCeXRlcyhlLG4uaW5wdXRFbmNvZGluZyl9Y2F0Y2goZSl7cmV0dXJuIHZvaWQgbyh2b2lkIDAsZSl9dmFyIHU9bmV3IGYuRGVjb21wcmVzc29yLHM9Zi5BcnJheVRvb2xzLnNwbGl0Qnl0ZUFycmF5KGUsbi5ibG9ja1NpemUpLGE9W10sYz1mdW5jdGlvbihlKXtpZihlPHMubGVuZ3RoKXt2YXIgdD12b2lkIDA7dHJ5e3Q9dS5kZWNvbXByZXNzQmxvY2soc1tlXSl9Y2F0Y2goZSl7cmV0dXJuIHZvaWQgbyh2b2lkIDAsZSl9YS5wdXNoKHQpLGkuZ2V0RWxhcHNlZFRpbWUoKTw9MjA/YyhlKzEpOihmLmVucXVldWVJbW1lZGlhdGUoZnVuY3Rpb24oKXtyZXR1cm4gYyhlKzEpfSksaS5yZXN0YXJ0KCkpfWVsc2V7dmFyIHI9Zi5BcnJheVRvb2xzLmNvbmNhdFVpbnQ4QXJyYXlzKGEpO2YuZW5xdWV1ZUltbWVkaWF0ZShmdW5jdGlvbigpe3ZhciBlO3RyeXtlPWYuQ29tcHJlc3Npb25Db21tb24uZW5jb2RlRGVjb21wcmVzc2VkQnl0ZXMocixuLm91dHB1dEVuY29kaW5nKX1jYXRjaChlKXtyZXR1cm4gdm9pZCBvKHZvaWQgMCxlKX1mLmVucXVldWVJbW1lZGlhdGUoZnVuY3Rpb24oKXtyZXR1cm4gbyhlKX0pfSl9fTtmLmVucXVldWVJbW1lZGlhdGUoZnVuY3Rpb24oKXtyZXR1cm4gYygwKX0pfSx0LmNyZWF0ZURlY29tcHJlc3Npb25TdHJlYW09ZnVuY3Rpb24oKXt2YXIgbz1uZXcgZi5EZWNvbXByZXNzb3IsaT1uZXcocmVxdWlyZSgic3RyZWFtIikuVHJhbnNmb3JtKSh7ZGVjb2RlU3RyaW5nczohMCxoaWdoV2F0ZXJNYXJrOjY1NTM2fSk7cmV0dXJuIGkuX3RyYW5zZm9ybT1mdW5jdGlvbihlLHQscil7dmFyIG47dHJ5e249Zi5CdWZmZXJUb29scy51aW50OEFycmF5VG9CdWZmZXIoby5kZWNvbXByZXNzQmxvY2soZi5CdWZmZXJUb29scy5idWZmZXJUb1VpbnQ4QXJyYXkoZSkpKX1jYXRjaChlKXtyZXR1cm4gdm9pZCBpLmVtaXQoImVycm9yIixlKX1pLnB1c2gobikscigpfSxpfSx0KTtmdW5jdGlvbiB0KCl7fWYuQXN5bmNEZWNvbXByZXNzb3I9ZX0oTFpVVEY4PUxaVVRGOHx8e30pLGZ1bmN0aW9uKGkpe3ZhciBlLHU7KHU9ZT1pLldlYldvcmtlcnx8KGkuV2ViV29ya2VyPXt9KSkuY29tcHJlc3NBc3luYz1mdW5jdGlvbihlLHQscil7aWYoIkJ5dGVBcnJheSIhPXQuaW5wdXRFbmNvZGluZ3x8ZSBpbnN0YW5jZW9mIFVpbnQ4QXJyYXkpe3ZhciBuPXt0b2tlbjpNYXRoLnJhbmRvbSgpLnRvU3RyaW5nKCksdHlwZToiY29tcHJlc3MiLGRhdGE6ZSxpbnB1dEVuY29kaW5nOnQuaW5wdXRFbmNvZGluZyxvdXRwdXRFbmNvZGluZzp0Lm91dHB1dEVuY29kaW5nfSxvPWZ1bmN0aW9uKGUpe3ZhciB0PWUuZGF0YTt0JiZ0LnRva2VuPT1uLnRva2VuJiYodS5nbG9iYWxXb3JrZXIucmVtb3ZlRXZlbnRMaXN0ZW5lcigibWVzc2FnZSIsbyksImVycm9yIj09dC50eXBlP3Iodm9pZCAwLG5ldyBFcnJvcih0LmVycm9yKSk6cih0LmRhdGEpKX07dS5nbG9iYWxXb3JrZXIuYWRkRXZlbnRMaXN0ZW5lcigibWVzc2FnZSIsbyksdS5nbG9iYWxXb3JrZXIucG9zdE1lc3NhZ2UobixbXSl9ZWxzZSByKHZvaWQgMCxuZXcgVHlwZUVycm9yKCJjb21wcmVzc0FzeW5jOiBpbnB1dCBpcyBub3QgYSBVaW50OEFycmF5IikpfSx1LmRlY29tcHJlc3NBc3luYz1mdW5jdGlvbihlLHQscil7dmFyIG49e3Rva2VuOk1hdGgucmFuZG9tKCkudG9TdHJpbmcoKSx0eXBlOiJkZWNvbXByZXNzIixkYXRhOmUsaW5wdXRFbmNvZGluZzp0LmlucHV0RW5jb2Rpbmcsb3V0cHV0RW5jb2Rpbmc6dC5vdXRwdXRFbmNvZGluZ30sbz1mdW5jdGlvbihlKXt2YXIgdD1lLmRhdGE7dCYmdC50b2tlbj09bi50b2tlbiYmKHUuZ2xvYmFsV29ya2VyLnJlbW92ZUV2ZW50TGlzdGVuZXIoIm1lc3NhZ2UiLG8pLCJlcnJvciI9PXQudHlwZT9yKHZvaWQgMCxuZXcgRXJyb3IodC5lcnJvcikpOnIodC5kYXRhKSl9O3UuZ2xvYmFsV29ya2VyLmFkZEV2ZW50TGlzdGVuZXIoIm1lc3NhZ2UiLG8pLHUuZ2xvYmFsV29ya2VyLnBvc3RNZXNzYWdlKG4sW10pfSx1Lmluc3RhbGxXZWJXb3JrZXJJZk5lZWRlZD1mdW5jdGlvbigpeyJvYmplY3QiPT10eXBlb2Ygc2VsZiYmdm9pZCAwPT09c2VsZi5kb2N1bWVudCYmbnVsbCE9c2VsZi5hZGRFdmVudExpc3RlbmVyJiYoc2VsZi5hZGRFdmVudExpc3RlbmVyKCJtZXNzYWdlIixmdW5jdGlvbihlKXt2YXIgdD1lLmRhdGE7aWYoImNvbXByZXNzIj09dC50eXBlKXt2YXIgcj12b2lkIDA7dHJ5e3I9aS5jb21wcmVzcyh0LmRhdGEse291dHB1dEVuY29kaW5nOnQub3V0cHV0RW5jb2Rpbmd9KX1jYXRjaChlKXtyZXR1cm4gdm9pZCBzZWxmLnBvc3RNZXNzYWdlKHt0b2tlbjp0LnRva2VuLHR5cGU6ImVycm9yIixlcnJvcjppLmNyZWF0ZUVycm9yTWVzc2FnZShlKX0sW10pfShuPXt0b2tlbjp0LnRva2VuLHR5cGU6ImNvbXByZXNzaW9uUmVzdWx0IixkYXRhOnIsZW5jb2Rpbmc6dC5vdXRwdXRFbmNvZGluZ30pLmRhdGEgaW5zdGFuY2VvZiBVaW50OEFycmF5JiYtMT09PW5hdmlnYXRvci5hcHBWZXJzaW9uLmluZGV4T2YoIk1TSUUgMTAiKT9zZWxmLnBvc3RNZXNzYWdlKG4sW24uZGF0YS5idWZmZXJdKTpzZWxmLnBvc3RNZXNzYWdlKG4sW10pfWVsc2UgaWYoImRlY29tcHJlc3MiPT10LnR5cGUpe3ZhciBuLG89dm9pZCAwO3RyeXtvPWkuZGVjb21wcmVzcyh0LmRhdGEse2lucHV0RW5jb2Rpbmc6dC5pbnB1dEVuY29kaW5nLG91dHB1dEVuY29kaW5nOnQub3V0cHV0RW5jb2Rpbmd9KX1jYXRjaChlKXtyZXR1cm4gdm9pZCBzZWxmLnBvc3RNZXNzYWdlKHt0b2tlbjp0LnRva2VuLHR5cGU6ImVycm9yIixlcnJvcjppLmNyZWF0ZUVycm9yTWVzc2FnZShlKX0sW10pfShuPXt0b2tlbjp0LnRva2VuLHR5cGU6ImRlY29tcHJlc3Npb25SZXN1bHQiLGRhdGE6byxlbmNvZGluZzp0Lm91dHB1dEVuY29kaW5nfSkuZGF0YSBpbnN0YW5jZW9mIFVpbnQ4QXJyYXkmJi0xPT09bmF2aWdhdG9yLmFwcFZlcnNpb24uaW5kZXhPZigiTVNJRSAxMCIpP3NlbGYucG9zdE1lc3NhZ2Uobixbbi5kYXRhLmJ1ZmZlcl0pOnNlbGYucG9zdE1lc3NhZ2UobixbXSl9fSksc2VsZi5hZGRFdmVudExpc3RlbmVyKCJlcnJvciIsZnVuY3Rpb24oZSl7aS5sb2coaS5jcmVhdGVFcnJvck1lc3NhZ2UoZS5lcnJvciwiVW5leHBlY3RlZCBMWlVURjggV2ViV29ya2VyIGV4Y2VwdGlvbiIpKX0pKX0sdS5jcmVhdGVHbG9iYWxXb3JrZXJJZk5lZWRlZD1mdW5jdGlvbigpe2lmKHUuZ2xvYmFsV29ya2VyKXJldHVybiEwO2lmKCFpLndlYldvcmtlcnNBdmFpbGFibGUoKSlyZXR1cm4hMTtpZighdS5zY3JpcHRVUkkmJiJvYmplY3QiPT10eXBlb2YgZG9jdW1lbnQpe3ZhciBlPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJsenV0ZjgiKTtudWxsIT1lJiYodS5zY3JpcHRVUkk9ZS5nZXRBdHRyaWJ1dGUoInNyYyIpfHx2b2lkIDApfXJldHVybiEhdS5zY3JpcHRVUkkmJih1Lmdsb2JhbFdvcmtlcj1uZXcgV29ya2VyKHUuc2NyaXB0VVJJKSwhMCl9LHUudGVybWluYXRlPWZ1bmN0aW9uKCl7dS5nbG9iYWxXb3JrZXImJih1Lmdsb2JhbFdvcmtlci50ZXJtaW5hdGUoKSx1Lmdsb2JhbFdvcmtlcj12b2lkIDApfSxlLmluc3RhbGxXZWJXb3JrZXJJZk5lZWRlZCgpfShMWlVURjg9TFpVVEY4fHx7fSksZnVuY3Rpb24oZSl7dmFyIHQ9KHIucHJvdG90eXBlLmdldD1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5jb250YWluZXJbdGhpcy5zdGFydFBvc2l0aW9uK2VdfSxyLnByb3RvdHlwZS5nZXRJblJldmVyc2VkT3JkZXI9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuY29udGFpbmVyW3RoaXMuc3RhcnRQb3NpdGlvbit0aGlzLmxlbmd0aC0xLWVdfSxyLnByb3RvdHlwZS5zZXQ9ZnVuY3Rpb24oZSx0KXt0aGlzLmNvbnRhaW5lclt0aGlzLnN0YXJ0UG9zaXRpb24rZV09dH0scik7ZnVuY3Rpb24gcihlLHQscil7dGhpcy5jb250YWluZXI9ZSx0aGlzLnN0YXJ0UG9zaXRpb249dCx0aGlzLmxlbmd0aD1yfWUuQXJyYXlTZWdtZW50PXR9KExaVVRGOD1MWlVURjh8fHt9KSxmdW5jdGlvbihlKXt2YXIgdDsodD1lLkFycmF5VG9vbHN8fChlLkFycmF5VG9vbHM9e30pKS5jb3B5RWxlbWVudHM9ZnVuY3Rpb24oZSx0LHIsbixvKXtmb3IoO28tLTspcltuKytdPWVbdCsrXX0sdC56ZXJvRWxlbWVudHM9ZnVuY3Rpb24oZSx0LHIpe2Zvcig7ci0tOyllW3QrK109MH0sdC5jb3VudE5vbnplcm9WYWx1ZXNJbkFycmF5PWZ1bmN0aW9uKGUpe2Zvcih2YXIgdD0wLHI9MDtyPGUubGVuZ3RoO3IrKyllW3JdJiZ0Kys7cmV0dXJuIHR9LHQudHJ1bmNhdGVTdGFydGluZ0VsZW1lbnRzPWZ1bmN0aW9uKGUsdCl7aWYoZS5sZW5ndGg8PXQpdGhyb3cgbmV3IFJhbmdlRXJyb3IoInRydW5jYXRlU3RhcnRpbmdFbGVtZW50czogUmVxdWVzdGVkIGxlbmd0aCBzaG91bGQgYmUgc21hbGxlciB0aGFuIGFycmF5IGxlbmd0aCIpO2Zvcih2YXIgcj1lLmxlbmd0aC10LG49MDtuPHQ7bisrKWVbbl09ZVtyK25dO2UubGVuZ3RoPXR9LHQuZG91YmxlQnl0ZUFycmF5Q2FwYWNpdHk9ZnVuY3Rpb24oZSl7dmFyIHQ9bmV3IFVpbnQ4QXJyYXkoMiplLmxlbmd0aCk7cmV0dXJuIHQuc2V0KGUpLHR9LHQuY29uY2F0VWludDhBcnJheXM9ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PTAscj0wLG49ZTtyPG4ubGVuZ3RoO3IrKyl7dCs9KGE9bltyXSkubGVuZ3RofWZvcih2YXIgbz1uZXcgVWludDhBcnJheSh0KSxpPTAsdT0wLHM9ZTt1PHMubGVuZ3RoO3UrKyl7dmFyIGE9c1t1XTtvLnNldChhLGkpLGkrPWEubGVuZ3RofXJldHVybiBvfSx0LnNwbGl0Qnl0ZUFycmF5PWZ1bmN0aW9uKGUsdCl7Zm9yKHZhciByPVtdLG49MDtuPGUubGVuZ3RoOyl7dmFyIG89TWF0aC5taW4odCxlLmxlbmd0aC1uKTtyLnB1c2goZS5zdWJhcnJheShuLG4rbykpLG4rPW99cmV0dXJuIHJ9fShMWlVURjg9TFpVVEY4fHx7fSksZnVuY3Rpb24oZSl7dmFyIHQ7KHQ9ZS5CdWZmZXJUb29sc3x8KGUuQnVmZmVyVG9vbHM9e30pKS5jb252ZXJ0VG9VaW50OEFycmF5SWZOZWVkZWQ9ZnVuY3Rpb24oZSl7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIEJ1ZmZlciYmQnVmZmVyLmlzQnVmZmVyKGUpP3QuYnVmZmVyVG9VaW50OEFycmF5KGUpOmV9LHQudWludDhBcnJheVRvQnVmZmVyPWZ1bmN0aW9uKGUpe2lmKEJ1ZmZlci5wcm90b3R5cGUgaW5zdGFuY2VvZiBVaW50OEFycmF5KXt2YXIgdD1uZXcgVWludDhBcnJheShlLmJ1ZmZlcixlLmJ5dGVPZmZzZXQsZS5ieXRlTGVuZ3RoKTtyZXR1cm4gT2JqZWN0LnNldFByb3RvdHlwZU9mKHQsQnVmZmVyLnByb3RvdHlwZSksdH1mb3IodmFyIHI9ZS5sZW5ndGgsbj1uZXcgQnVmZmVyKHIpLG89MDtvPHI7bysrKW5bb109ZVtvXTtyZXR1cm4gbn0sdC5idWZmZXJUb1VpbnQ4QXJyYXk9ZnVuY3Rpb24oZSl7aWYoQnVmZmVyLnByb3RvdHlwZSBpbnN0YW5jZW9mIFVpbnQ4QXJyYXkpcmV0dXJuIG5ldyBVaW50OEFycmF5KGUuYnVmZmVyLGUuYnl0ZU9mZnNldCxlLmJ5dGVMZW5ndGgpO2Zvcih2YXIgdD1lLmxlbmd0aCxyPW5ldyBVaW50OEFycmF5KHQpLG49MDtuPHQ7bisrKXJbbl09ZVtuXTtyZXR1cm4gcn19KExaVVRGOD1MWlVURjh8fHt9KSxmdW5jdGlvbihvKXt2YXIgZTsoZT1vLkNvbXByZXNzaW9uQ29tbW9ufHwoby5Db21wcmVzc2lvbkNvbW1vbj17fSkpLmdldENyb3BwZWRCdWZmZXI9ZnVuY3Rpb24oZSx0LHIsbil7dm9pZCAwPT09biYmKG49MCk7dmFyIG89bmV3IFVpbnQ4QXJyYXkocituKTtyZXR1cm4gby5zZXQoZS5zdWJhcnJheSh0LHQrcikpLG99LGUuZ2V0Q3JvcHBlZEFuZEFwcGVuZGVkQnl0ZUFycmF5PWZ1bmN0aW9uKGUsdCxyLG4pe3JldHVybiBvLkFycmF5VG9vbHMuY29uY2F0VWludDhBcnJheXMoW2Uuc3ViYXJyYXkodCx0K3IpLG5dKX0sZS5kZXRlY3RDb21wcmVzc2lvblNvdXJjZUVuY29kaW5nPWZ1bmN0aW9uKGUpe2lmKG51bGw9PWUpdGhyb3cgbmV3IFR5cGVFcnJvcigiZGV0ZWN0Q29tcHJlc3Npb25Tb3VyY2VFbmNvZGluZzogaW5wdXQgaXMgbnVsbCBvciB1bmRlZmluZWQiKTtpZigic3RyaW5nIj09dHlwZW9mIGUpcmV0dXJuIlN0cmluZyI7aWYoZSBpbnN0YW5jZW9mIFVpbnQ4QXJyYXl8fCJmdW5jdGlvbiI9PXR5cGVvZiBCdWZmZXImJkJ1ZmZlci5pc0J1ZmZlcihlKSlyZXR1cm4iQnl0ZUFycmF5Ijt0aHJvdyBuZXcgVHlwZUVycm9yKCJkZXRlY3RDb21wcmVzc2lvblNvdXJjZUVuY29kaW5nOiBpbnB1dCBtdXN0IGJlIG9mIHR5cGUgJ3N0cmluZycsICdVaW50OEFycmF5JyBvciAnQnVmZmVyJyIpfSxlLmVuY29kZUNvbXByZXNzZWRCeXRlcz1mdW5jdGlvbihlLHQpe3N3aXRjaCh0KXtjYXNlIkJ5dGVBcnJheSI6cmV0dXJuIGU7Y2FzZSJCdWZmZXIiOnJldHVybiBvLkJ1ZmZlclRvb2xzLnVpbnQ4QXJyYXlUb0J1ZmZlcihlKTtjYXNlIkJhc2U2NCI6cmV0dXJuIG8uZW5jb2RlQmFzZTY0KGUpO2Nhc2UiQmluYXJ5U3RyaW5nIjpyZXR1cm4gby5lbmNvZGVCaW5hcnlTdHJpbmcoZSk7Y2FzZSJTdG9yYWdlQmluYXJ5U3RyaW5nIjpyZXR1cm4gby5lbmNvZGVTdG9yYWdlQmluYXJ5U3RyaW5nKGUpO2RlZmF1bHQ6dGhyb3cgbmV3IFR5cGVFcnJvcigiZW5jb2RlQ29tcHJlc3NlZEJ5dGVzOiBpbnZhbGlkIG91dHB1dCBlbmNvZGluZyByZXF1ZXN0ZWQiKX19LGUuZGVjb2RlQ29tcHJlc3NlZEJ5dGVzPWZ1bmN0aW9uKGUsdCl7aWYobnVsbD09dCl0aHJvdyBuZXcgVHlwZUVycm9yKCJkZWNvZGVDb21wcmVzc2VkRGF0YTogSW5wdXQgaXMgbnVsbCBvciB1bmRlZmluZWQiKTtzd2l0Y2godCl7Y2FzZSJCeXRlQXJyYXkiOmNhc2UiQnVmZmVyIjp2YXIgcj1vLkJ1ZmZlclRvb2xzLmNvbnZlcnRUb1VpbnQ4QXJyYXlJZk5lZWRlZChlKTtpZighKHIgaW5zdGFuY2VvZiBVaW50OEFycmF5KSl0aHJvdyBuZXcgVHlwZUVycm9yKCJkZWNvZGVDb21wcmVzc2VkRGF0YTogJ0J5dGVBcnJheScgb3IgJ0J1ZmZlcicgaW5wdXQgdHlwZSB3YXMgc3BlY2lmaWVkIGJ1dCBpbnB1dCBpcyBub3QgYSBVaW50OEFycmF5IG9yIEJ1ZmZlciIpO3JldHVybiByO2Nhc2UiQmFzZTY0IjppZigic3RyaW5nIiE9dHlwZW9mIGUpdGhyb3cgbmV3IFR5cGVFcnJvcigiZGVjb2RlQ29tcHJlc3NlZERhdGE6ICdCYXNlNjQnIGlucHV0IHR5cGUgd2FzIHNwZWNpZmllZCBidXQgaW5wdXQgaXMgbm90IGEgc3RyaW5nIik7cmV0dXJuIG8uZGVjb2RlQmFzZTY0KGUpO2Nhc2UiQmluYXJ5U3RyaW5nIjppZigic3RyaW5nIiE9dHlwZW9mIGUpdGhyb3cgbmV3IFR5cGVFcnJvcigiZGVjb2RlQ29tcHJlc3NlZERhdGE6ICdCaW5hcnlTdHJpbmcnIGlucHV0IHR5cGUgd2FzIHNwZWNpZmllZCBidXQgaW5wdXQgaXMgbm90IGEgc3RyaW5nIik7cmV0dXJuIG8uZGVjb2RlQmluYXJ5U3RyaW5nKGUpO2Nhc2UiU3RvcmFnZUJpbmFyeVN0cmluZyI6aWYoInN0cmluZyIhPXR5cGVvZiBlKXRocm93IG5ldyBUeXBlRXJyb3IoImRlY29kZUNvbXByZXNzZWREYXRhOiAnU3RvcmFnZUJpbmFyeVN0cmluZycgaW5wdXQgdHlwZSB3YXMgc3BlY2lmaWVkIGJ1dCBpbnB1dCBpcyBub3QgYSBzdHJpbmciKTtyZXR1cm4gby5kZWNvZGVTdG9yYWdlQmluYXJ5U3RyaW5nKGUpO2RlZmF1bHQ6dGhyb3cgbmV3IFR5cGVFcnJvcigiZGVjb2RlQ29tcHJlc3NlZERhdGE6IGludmFsaWQgaW5wdXQgZW5jb2RpbmcgcmVxdWVzdGVkOiAnIit0KyInIil9fSxlLmVuY29kZURlY29tcHJlc3NlZEJ5dGVzPWZ1bmN0aW9uKGUsdCl7c3dpdGNoKHQpe2Nhc2UiU3RyaW5nIjpyZXR1cm4gby5kZWNvZGVVVEY4KGUpO2Nhc2UiQnl0ZUFycmF5IjpyZXR1cm4gZTtjYXNlIkJ1ZmZlciI6aWYoImZ1bmN0aW9uIiE9dHlwZW9mIEJ1ZmZlcil0aHJvdyBuZXcgVHlwZUVycm9yKCJlbmNvZGVEZWNvbXByZXNzZWRCeXRlczogYSAnQnVmZmVyJyB0eXBlIHdhcyBzcGVjaWZpZWQgYnV0IGlzIG5vdCBzdXBwb3J0ZWQgYXQgdGhlIGN1cnJlbnQgZW52aXJubWVudCIpO3JldHVybiBvLkJ1ZmZlclRvb2xzLnVpbnQ4QXJyYXlUb0J1ZmZlcihlKTtkZWZhdWx0OnRocm93IG5ldyBUeXBlRXJyb3IoImVuY29kZURlY29tcHJlc3NlZEJ5dGVzOiBpbnZhbGlkIG91dHB1dCBlbmNvZGluZyByZXF1ZXN0ZWQiKX19fShMWlVURjg9TFpVVEY4fHx7fSksZnVuY3Rpb24obyl7dmFyIHQsZSxpLHU7ZT10PW8uRXZlbnRMb29wfHwoby5FdmVudExvb3A9e30pLHU9W10sZS5lbnF1ZXVlSW1tZWRpYXRlPWZ1bmN0aW9uKGUpe3UucHVzaChlKSwxPT09dS5sZW5ndGgmJmkoKX0sZS5pbml0aWFsaXplU2NoZWR1bGVyPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCgpe2Zvcih2YXIgZT0wLHQ9dTtlPHQubGVuZ3RoO2UrKyl7dmFyIHI9dFtlXTt0cnl7ci5jYWxsKHZvaWQgMCl9Y2F0Y2goZSl7by5wcmludEV4Y2VwdGlvbkFuZFN0YWNrVHJhY2VUb0NvbnNvbGUoZSwiZW5xdWV1ZUltbWVkaWF0ZSBleGNlcHRpb24iKX19dS5sZW5ndGg9MH1pZihvLnJ1bm5pbmdJbk5vZGVKUygpJiYoaT1mdW5jdGlvbigpe3JldHVybiBzZXRJbW1lZGlhdGUoZnVuY3Rpb24oKXtyZXR1cm4gdCgpfSl9KSwib2JqZWN0Ij09dHlwZW9mIHdpbmRvdyYmImZ1bmN0aW9uIj09dHlwZW9mIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyJiYiZnVuY3Rpb24iPT10eXBlb2Ygd2luZG93LnBvc3RNZXNzYWdlKXt2YXIgZSxyPSJlbnF1ZXVlSW1tZWRpYXRlLSIrTWF0aC5yYW5kb20oKS50b1N0cmluZygpO3dpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJtZXNzYWdlIixmdW5jdGlvbihlKXtlLmRhdGE9PT1yJiZ0KCl9KSxlPW8ucnVubmluZ0luTnVsbE9yaWdpbigpPyIqIjp3aW5kb3cubG9jYXRpb24uaHJlZixpPWZ1bmN0aW9uKCl7cmV0dXJuIHdpbmRvdy5wb3N0TWVzc2FnZShyLGUpfX1lbHNlIGlmKCJmdW5jdGlvbiI9PXR5cGVvZiBNZXNzYWdlQ2hhbm5lbCYmImZ1bmN0aW9uIj09dHlwZW9mIE1lc3NhZ2VQb3J0KXt2YXIgbj1uZXcgTWVzc2FnZUNoYW5uZWw7bi5wb3J0MS5vbm1lc3NhZ2U9ZnVuY3Rpb24oKXtyZXR1cm4gdCgpfSxpPWZ1bmN0aW9uKCl7cmV0dXJuIG4ucG9ydDIucG9zdE1lc3NhZ2UoMCl9fWVsc2UgaT1mdW5jdGlvbigpe3JldHVybiBzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7cmV0dXJuIHQoKX0sMCl9fSxlLmluaXRpYWxpemVTY2hlZHVsZXIoKSxvLmVucXVldWVJbW1lZGlhdGU9ZnVuY3Rpb24oZSl7cmV0dXJuIHQuZW5xdWV1ZUltbWVkaWF0ZShlKX19KExaVVRGOD1MWlVURjh8fHt9KSxmdW5jdGlvbihlKXt2YXIgcjsocj1lLk9iamVjdFRvb2xzfHwoZS5PYmplY3RUb29scz17fSkpLm92ZXJyaWRlPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHIuZXh0ZW5kKGUsdCl9LHIuZXh0ZW5kPWZ1bmN0aW9uKGUsdCl7aWYobnVsbD09ZSl0aHJvdyBuZXcgVHlwZUVycm9yKCJvYmogaXMgbnVsbCBvciB1bmRlZmluZWQiKTtpZigib2JqZWN0IiE9dHlwZW9mIGUpdGhyb3cgbmV3IFR5cGVFcnJvcigib2JqIGlzIG5vdCBhbiBvYmplY3QiKTtpZihudWxsPT10JiYodD17fSksIm9iamVjdCIhPXR5cGVvZiB0KXRocm93IG5ldyBUeXBlRXJyb3IoIm5ld1Byb3BlcnRpZXMgaXMgbm90IGFuIG9iamVjdCIpO2lmKG51bGwhPXQpZm9yKHZhciByIGluIHQpZVtyXT10W3JdO3JldHVybiBlfX0oTFpVVEY4PUxaVVRGOHx8e30pLGZ1bmN0aW9uKG8pe28uZ2V0UmFuZG9tSW50ZWdlckluUmFuZ2U9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZStNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkqKHQtZSkpfSxvLmdldFJhbmRvbVVURjE2U3RyaW5nT2ZMZW5ndGg9ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PSIiLHI9MDtyPGU7cisrKXtmb3IodmFyIG49dm9pZCAwOzU1Mjk2PD0obj1vLmdldFJhbmRvbUludGVnZXJJblJhbmdlKDAsMTExNDExMikpJiZuPD01NzM0MzspO3QrPW8uRW5jb2RpbmcuQ29kZVBvaW50LmRlY29kZVRvU3RyaW5nKG4pfXJldHVybiB0fX0oTFpVVEY4PUxaVVRGOHx8e30pLGZ1bmN0aW9uKGUpe3ZhciB0PShyLnByb3RvdHlwZS5hcHBlbmRDaGFyQ29kZT1mdW5jdGlvbihlKXt0aGlzLm91dHB1dEJ1ZmZlclt0aGlzLm91dHB1dFBvc2l0aW9uKytdPWUsdGhpcy5vdXRwdXRQb3NpdGlvbj09PXRoaXMub3V0cHV0QnVmZmVyQ2FwYWNpdHkmJnRoaXMuZmx1c2hCdWZmZXJUb091dHB1dFN0cmluZygpfSxyLnByb3RvdHlwZS5hcHBlbmRDaGFyQ29kZXM9ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PTAscj1lLmxlbmd0aDt0PHI7dCsrKXRoaXMuYXBwZW5kQ2hhckNvZGUoZVt0XSl9LHIucHJvdG90eXBlLmFwcGVuZFN0cmluZz1mdW5jdGlvbihlKXtmb3IodmFyIHQ9MCxyPWUubGVuZ3RoO3Q8cjt0KyspdGhpcy5hcHBlbmRDaGFyQ29kZShlLmNoYXJDb2RlQXQodCkpfSxyLnByb3RvdHlwZS5hcHBlbmRDb2RlUG9pbnQ9ZnVuY3Rpb24oZSl7aWYoZTw9NjU1MzUpdGhpcy5hcHBlbmRDaGFyQ29kZShlKTtlbHNle2lmKCEoZTw9MTExNDExMSkpdGhyb3cgbmV3IEVycm9yKCJhcHBlbmRDb2RlUG9pbnQ6IEEgY29kZSBwb2ludCBvZiAiK2UrIiBjYW5ub3QgYmUgZW5jb2RlZCBpbiBVVEYtMTYiKTt0aGlzLmFwcGVuZENoYXJDb2RlKDU1Mjk2KyhlLTY1NTM2Pj4+MTApKSx0aGlzLmFwcGVuZENoYXJDb2RlKDU2MzIwKyhlLTY1NTM2JjEwMjMpKX19LHIucHJvdG90eXBlLmdldE91dHB1dFN0cmluZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmZsdXNoQnVmZmVyVG9PdXRwdXRTdHJpbmcoKSx0aGlzLm91dHB1dFN0cmluZ30sci5wcm90b3R5cGUuZmx1c2hCdWZmZXJUb091dHB1dFN0cmluZz1mdW5jdGlvbigpe3RoaXMub3V0cHV0UG9zaXRpb249PT10aGlzLm91dHB1dEJ1ZmZlckNhcGFjaXR5P3RoaXMub3V0cHV0U3RyaW5nKz1TdHJpbmcuZnJvbUNoYXJDb2RlLmFwcGx5KG51bGwsdGhpcy5vdXRwdXRCdWZmZXIpOnRoaXMub3V0cHV0U3RyaW5nKz1TdHJpbmcuZnJvbUNoYXJDb2RlLmFwcGx5KG51bGwsdGhpcy5vdXRwdXRCdWZmZXIuc3ViYXJyYXkoMCx0aGlzLm91dHB1dFBvc2l0aW9uKSksdGhpcy5vdXRwdXRQb3NpdGlvbj0wfSxyKTtmdW5jdGlvbiByKGUpe3ZvaWQgMD09PWUmJihlPTEwMjQpLHRoaXMub3V0cHV0QnVmZmVyQ2FwYWNpdHk9ZSx0aGlzLm91dHB1dFBvc2l0aW9uPTAsdGhpcy5vdXRwdXRTdHJpbmc9IiIsdGhpcy5vdXRwdXRCdWZmZXI9bmV3IFVpbnQxNkFycmF5KHRoaXMub3V0cHV0QnVmZmVyQ2FwYWNpdHkpfWUuU3RyaW5nQnVpbGRlcj10fShMWlVURjg9TFpVVEY4fHx7fSksZnVuY3Rpb24obyl7dmFyIGU9KHQucHJvdG90eXBlLnJlc3RhcnQ9ZnVuY3Rpb24oKXt0aGlzLnN0YXJ0VGltZT10LmdldFRpbWVzdGFtcCgpfSx0LnByb3RvdHlwZS5nZXRFbGFwc2VkVGltZT1mdW5jdGlvbigpe3JldHVybiB0LmdldFRpbWVzdGFtcCgpLXRoaXMuc3RhcnRUaW1lfSx0LnByb3RvdHlwZS5nZXRFbGFwc2VkVGltZUFuZFJlc3RhcnQ9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLmdldEVsYXBzZWRUaW1lKCk7cmV0dXJuIHRoaXMucmVzdGFydCgpLGV9LHQucHJvdG90eXBlLmxvZ0FuZFJlc3RhcnQ9ZnVuY3Rpb24oZSx0KXt2b2lkIDA9PT10JiYodD0hMCk7dmFyIHI9dGhpcy5nZXRFbGFwc2VkVGltZSgpLG49ZSsiOiAiK3IudG9GaXhlZCgzKSsibXMiO3JldHVybiBvLmxvZyhuLHQpLHRoaXMucmVzdGFydCgpLHJ9LHQuZ2V0VGltZXN0YW1wPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudGltZXN0YW1wRnVuY3x8dGhpcy5jcmVhdGVHbG9iYWxUaW1lc3RhbXBGdW5jdGlvbigpLHRoaXMudGltZXN0YW1wRnVuYygpfSx0LmdldE1pY3Jvc2Vjb25kVGltZXN0YW1wPWZ1bmN0aW9uKCl7cmV0dXJuIE1hdGguZmxvb3IoMWUzKnQuZ2V0VGltZXN0YW1wKCkpfSx0LmNyZWF0ZUdsb2JhbFRpbWVzdGFtcEZ1bmN0aW9uPWZ1bmN0aW9uKCl7aWYoIm9iamVjdCI9PXR5cGVvZiBwcm9jZXNzJiYiZnVuY3Rpb24iPT10eXBlb2YgcHJvY2Vzcy5ocnRpbWUpe3ZhciByPTA7dGhpcy50aW1lc3RhbXBGdW5jPWZ1bmN0aW9uKCl7dmFyIGU9cHJvY2Vzcy5ocnRpbWUoKSx0PTFlMyplWzBdK2VbMV0vMWU2O3JldHVybiByK3R9LHI9RGF0ZS5ub3coKS10aGlzLnRpbWVzdGFtcEZ1bmMoKX1lbHNlIGlmKCJvYmplY3QiPT10eXBlb2YgY2hyb21lJiZjaHJvbWUuSW50ZXJ2YWwpe3ZhciBlPURhdGUubm93KCksdD1uZXcgY2hyb21lLkludGVydmFsO3Quc3RhcnQoKSx0aGlzLnRpbWVzdGFtcEZ1bmM9ZnVuY3Rpb24oKXtyZXR1cm4gZSt0Lm1pY3Jvc2Vjb25kcygpLzFlM319ZWxzZSBpZigib2JqZWN0Ij09dHlwZW9mIHBlcmZvcm1hbmNlJiZwZXJmb3JtYW5jZS5ub3cpe3ZhciBuPURhdGUubm93KCktcGVyZm9ybWFuY2Uubm93KCk7dGhpcy50aW1lc3RhbXBGdW5jPWZ1bmN0aW9uKCl7cmV0dXJuIG4rcGVyZm9ybWFuY2Uubm93KCl9fWVsc2UgRGF0ZS5ub3c/dGhpcy50aW1lc3RhbXBGdW5jPWZ1bmN0aW9uKCl7cmV0dXJuIERhdGUubm93KCl9OnRoaXMudGltZXN0YW1wRnVuYz1mdW5jdGlvbigpe3JldHVybihuZXcgRGF0ZSkuZ2V0VGltZSgpfX0sdCk7ZnVuY3Rpb24gdCgpe3RoaXMucmVzdGFydCgpfW8uVGltZXI9ZX0oTFpVVEY4PUxaVVRGOHx8e30pLGZ1bmN0aW9uKG4pe3ZhciBlPSh0LnByb3RvdHlwZS5jb21wcmVzc0Jsb2NrPWZ1bmN0aW9uKGUpe2lmKG51bGw9PWUpdGhyb3cgbmV3IFR5cGVFcnJvcigiY29tcHJlc3NCbG9jazogdW5kZWZpbmVkIG9yIG51bGwgaW5wdXQgcmVjZWl2ZWQiKTtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIGUmJihlPW4uZW5jb2RlVVRGOChlKSksZT1uLkJ1ZmZlclRvb2xzLmNvbnZlcnRUb1VpbnQ4QXJyYXlJZk5lZWRlZChlKSx0aGlzLmNvbXByZXNzVXRmOEJsb2NrKGUpfSx0LnByb3RvdHlwZS5jb21wcmVzc1V0ZjhCbG9jaz1mdW5jdGlvbihlKXtpZighZXx8MD09ZS5sZW5ndGgpcmV0dXJuIG5ldyBVaW50OEFycmF5KDApO3ZhciB0PXRoaXMuY3JvcEFuZEFkZE5ld0J5dGVzVG9JbnB1dEJ1ZmZlcihlKSxyPXRoaXMuaW5wdXRCdWZmZXIsbj10aGlzLmlucHV0QnVmZmVyLmxlbmd0aDt0aGlzLm91dHB1dEJ1ZmZlcj1uZXcgVWludDhBcnJheShlLmxlbmd0aCk7Zm9yKHZhciBvPXRoaXMub3V0cHV0QnVmZmVyUG9zaXRpb249MCxpPXQ7aTxuO2krKyl7dmFyIHU9cltpXSxzPWk8bztpZihpPm4tdGhpcy5NaW5pbXVtU2VxdWVuY2VMZW5ndGgpc3x8dGhpcy5vdXRwdXRSYXdCeXRlKHUpO2Vsc2V7dmFyIGE9dGhpcy5nZXRCdWNrZXRJbmRleEZvclByZWZpeChpKTtpZighcyl7dmFyIGM9dGhpcy5maW5kTG9uZ2VzdE1hdGNoKGksYSk7bnVsbCE9YyYmKHRoaXMub3V0cHV0UG9pbnRlckJ5dGVzKGMubGVuZ3RoLGMuZGlzdGFuY2UpLG89aStjLmxlbmd0aCxzPSEwKX1zfHx0aGlzLm91dHB1dFJhd0J5dGUodSk7dmFyIGY9dGhpcy5pbnB1dEJ1ZmZlclN0cmVhbU9mZnNldCtpO3RoaXMucHJlZml4SGFzaFRhYmxlLmFkZFZhbHVlVG9CdWNrZXQoYSxmKX19cmV0dXJuIHRoaXMub3V0cHV0QnVmZmVyLnN1YmFycmF5KDAsdGhpcy5vdXRwdXRCdWZmZXJQb3NpdGlvbil9LHQucHJvdG90eXBlLmZpbmRMb25nZXN0TWF0Y2g9ZnVuY3Rpb24oZSx0KXt2YXIgcj10aGlzLnByZWZpeEhhc2hUYWJsZS5nZXRBcnJheVNlZ21lbnRGb3JCdWNrZXRJbmRleCh0LHRoaXMucmV1c2FibGVBcnJheVNlZ21lbnRPYmplY3QpO2lmKG51bGw9PXIpcmV0dXJuIG51bGw7Zm9yKHZhciBuLG89dGhpcy5pbnB1dEJ1ZmZlcixpPTAsdT0wO3U8ci5sZW5ndGg7dSsrKXt2YXIgcz1yLmdldEluUmV2ZXJzZWRPcmRlcih1KS10aGlzLmlucHV0QnVmZmVyU3RyZWFtT2Zmc2V0LGE9ZS1zLGM9dm9pZCAwO2lmKGM9dm9pZCAwPT09bj90aGlzLk1pbmltdW1TZXF1ZW5jZUxlbmd0aC0xOm48MTI4JiYxMjg8PWE/aSsoaT4+PjEpOmksYT50aGlzLk1heGltdW1NYXRjaERpc3RhbmNlfHxjPj10aGlzLk1heGltdW1TZXF1ZW5jZUxlbmd0aHx8ZStjPj1vLmxlbmd0aClicmVhaztpZihvW3MrY109PT1vW2UrY10pZm9yKHZhciBmPTA7O2YrKyl7aWYoZStmPT09by5sZW5ndGh8fG9bcytmXSE9PW9bZStmXSl7YzxmJiYobj1hLGk9Zik7YnJlYWt9aWYoZj09PXRoaXMuTWF4aW11bVNlcXVlbmNlTGVuZ3RoKXJldHVybntkaXN0YW5jZTphLGxlbmd0aDp0aGlzLk1heGltdW1TZXF1ZW5jZUxlbmd0aH19fXJldHVybiB2b2lkIDAhPT1uP3tkaXN0YW5jZTpuLGxlbmd0aDppfTpudWxsfSx0LnByb3RvdHlwZS5nZXRCdWNrZXRJbmRleEZvclByZWZpeD1mdW5jdGlvbihlKXtyZXR1cm4oNzg4MDU5OSp0aGlzLmlucHV0QnVmZmVyW2VdKzM5NjAxKnRoaXMuaW5wdXRCdWZmZXJbZSsxXSsxOTkqdGhpcy5pbnB1dEJ1ZmZlcltlKzJdK3RoaXMuaW5wdXRCdWZmZXJbZSszXSkldGhpcy5QcmVmaXhIYXNoVGFibGVTaXplfSx0LnByb3RvdHlwZS5vdXRwdXRQb2ludGVyQnl0ZXM9ZnVuY3Rpb24oZSx0KXt0PDEyOD8odGhpcy5vdXRwdXRSYXdCeXRlKDE5MnxlKSx0aGlzLm91dHB1dFJhd0J5dGUodCkpOih0aGlzLm91dHB1dFJhd0J5dGUoMjI0fGUpLHRoaXMub3V0cHV0UmF3Qnl0ZSh0Pj4+OCksdGhpcy5vdXRwdXRSYXdCeXRlKDI1NSZ0KSl9LHQucHJvdG90eXBlLm91dHB1dFJhd0J5dGU9ZnVuY3Rpb24oZSl7dGhpcy5vdXRwdXRCdWZmZXJbdGhpcy5vdXRwdXRCdWZmZXJQb3NpdGlvbisrXT1lfSx0LnByb3RvdHlwZS5jcm9wQW5kQWRkTmV3Qnl0ZXNUb0lucHV0QnVmZmVyPWZ1bmN0aW9uKGUpe2lmKHZvaWQgMD09PXRoaXMuaW5wdXRCdWZmZXIpcmV0dXJuIHRoaXMuaW5wdXRCdWZmZXI9ZSwwO3ZhciB0PU1hdGgubWluKHRoaXMuaW5wdXRCdWZmZXIubGVuZ3RoLHRoaXMuTWF4aW11bU1hdGNoRGlzdGFuY2UpLHI9dGhpcy5pbnB1dEJ1ZmZlci5sZW5ndGgtdDtyZXR1cm4gdGhpcy5pbnB1dEJ1ZmZlcj1uLkNvbXByZXNzaW9uQ29tbW9uLmdldENyb3BwZWRBbmRBcHBlbmRlZEJ5dGVBcnJheSh0aGlzLmlucHV0QnVmZmVyLHIsdCxlKSx0aGlzLmlucHV0QnVmZmVyU3RyZWFtT2Zmc2V0Kz1yLHR9LHQpO2Z1bmN0aW9uIHQoZSl7dm9pZCAwPT09ZSYmKGU9ITApLHRoaXMuTWluaW11bVNlcXVlbmNlTGVuZ3RoPTQsdGhpcy5NYXhpbXVtU2VxdWVuY2VMZW5ndGg9MzEsdGhpcy5NYXhpbXVtTWF0Y2hEaXN0YW5jZT0zMjc2Nyx0aGlzLlByZWZpeEhhc2hUYWJsZVNpemU9NjU1MzcsdGhpcy5pbnB1dEJ1ZmZlclN0cmVhbU9mZnNldD0xLGUmJiJmdW5jdGlvbiI9PXR5cGVvZiBVaW50MzJBcnJheT90aGlzLnByZWZpeEhhc2hUYWJsZT1uZXcgbi5Db21wcmVzc29yQ3VzdG9tSGFzaFRhYmxlKHRoaXMuUHJlZml4SGFzaFRhYmxlU2l6ZSk6dGhpcy5wcmVmaXhIYXNoVGFibGU9bmV3IG4uQ29tcHJlc3NvclNpbXBsZUhhc2hUYWJsZSh0aGlzLlByZWZpeEhhc2hUYWJsZVNpemUpfW4uQ29tcHJlc3Nvcj1lfShMWlVURjg9TFpVVEY4fHx7fSksZnVuY3Rpb24ocyl7dmFyIGU9KHQucHJvdG90eXBlLmFkZFZhbHVlVG9CdWNrZXQ9ZnVuY3Rpb24oZSx0KXtlPDw9MSx0aGlzLnN0b3JhZ2VJbmRleD49dGhpcy5zdG9yYWdlLmxlbmd0aD4+PjEmJnRoaXMuY29tcGFjdCgpO3ZhciByLG49dGhpcy5idWNrZXRMb2NhdG9yc1tlXTtpZigwPT09biluPXRoaXMuc3RvcmFnZUluZGV4LHI9MSx0aGlzLnN0b3JhZ2VbdGhpcy5zdG9yYWdlSW5kZXhdPXQsdGhpcy5zdG9yYWdlSW5kZXgrPXRoaXMubWluaW11bUJ1Y2tldENhcGFjaXR5O2Vsc2V7KHI9dGhpcy5idWNrZXRMb2NhdG9yc1tlKzFdKT09PXRoaXMubWF4aW11bUJ1Y2tldENhcGFjaXR5LTEmJihyPXRoaXMudHJ1bmNhdGVCdWNrZXRUb05ld2VyRWxlbWVudHMobixyLHRoaXMubWF4aW11bUJ1Y2tldENhcGFjaXR5LzIpKTt2YXIgbz1uK3I7MD09PXRoaXMuc3RvcmFnZVtvXT8odGhpcy5zdG9yYWdlW29dPXQsbz09PXRoaXMuc3RvcmFnZUluZGV4JiYodGhpcy5zdG9yYWdlSW5kZXgrPXIpKToocy5BcnJheVRvb2xzLmNvcHlFbGVtZW50cyh0aGlzLnN0b3JhZ2Usbix0aGlzLnN0b3JhZ2UsdGhpcy5zdG9yYWdlSW5kZXgsciksbj10aGlzLnN0b3JhZ2VJbmRleCx0aGlzLnN0b3JhZ2VJbmRleCs9cix0aGlzLnN0b3JhZ2VbdGhpcy5zdG9yYWdlSW5kZXgrK109dCx0aGlzLnN0b3JhZ2VJbmRleCs9cikscisrfXRoaXMuYnVja2V0TG9jYXRvcnNbZV09bix0aGlzLmJ1Y2tldExvY2F0b3JzW2UrMV09cn0sdC5wcm90b3R5cGUudHJ1bmNhdGVCdWNrZXRUb05ld2VyRWxlbWVudHM9ZnVuY3Rpb24oZSx0LHIpe3ZhciBuPWUrdC1yO3JldHVybiBzLkFycmF5VG9vbHMuY29weUVsZW1lbnRzKHRoaXMuc3RvcmFnZSxuLHRoaXMuc3RvcmFnZSxlLHIpLHMuQXJyYXlUb29scy56ZXJvRWxlbWVudHModGhpcy5zdG9yYWdlLGUrcix0LXIpLHJ9LHQucHJvdG90eXBlLmNvbXBhY3Q9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLmJ1Y2tldExvY2F0b3JzLHQ9dGhpcy5zdG9yYWdlO3RoaXMuYnVja2V0TG9jYXRvcnM9bmV3IFVpbnQzMkFycmF5KHRoaXMuYnVja2V0TG9jYXRvcnMubGVuZ3RoKSx0aGlzLnN0b3JhZ2VJbmRleD0xO2Zvcih2YXIgcj0wO3I8ZS5sZW5ndGg7cis9Mil7dmFyIG49ZVtyKzFdOzAhPT1uJiYodGhpcy5idWNrZXRMb2NhdG9yc1tyXT10aGlzLnN0b3JhZ2VJbmRleCx0aGlzLmJ1Y2tldExvY2F0b3JzW3IrMV09bix0aGlzLnN0b3JhZ2VJbmRleCs9TWF0aC5tYXgoTWF0aC5taW4oMipuLHRoaXMubWF4aW11bUJ1Y2tldENhcGFjaXR5KSx0aGlzLm1pbmltdW1CdWNrZXRDYXBhY2l0eSkpfWZvcih0aGlzLnN0b3JhZ2U9bmV3IFVpbnQzMkFycmF5KDgqdGhpcy5zdG9yYWdlSW5kZXgpLHI9MDtyPGUubGVuZ3RoO3IrPTIpe3ZhciBvPWVbcl07aWYoMCE9PW8pe3ZhciBpPXRoaXMuYnVja2V0TG9jYXRvcnNbcl0sdT10aGlzLmJ1Y2tldExvY2F0b3JzW3IrMV07cy5BcnJheVRvb2xzLmNvcHlFbGVtZW50cyh0LG8sdGhpcy5zdG9yYWdlLGksdSl9fX0sdC5wcm90b3R5cGUuZ2V0QXJyYXlTZWdtZW50Rm9yQnVja2V0SW5kZXg9ZnVuY3Rpb24oZSx0KXtlPDw9MTt2YXIgcj10aGlzLmJ1Y2tldExvY2F0b3JzW2VdO3JldHVybiAwPT09cj9udWxsOih2b2lkIDA9PT10JiYodD1uZXcgcy5BcnJheVNlZ21lbnQodGhpcy5zdG9yYWdlLHIsdGhpcy5idWNrZXRMb2NhdG9yc1tlKzFdKSksdCl9LHQucHJvdG90eXBlLmdldFVzZWRCdWNrZXRDb3VudD1mdW5jdGlvbigpe3JldHVybiBNYXRoLmZsb29yKHMuQXJyYXlUb29scy5jb3VudE5vbnplcm9WYWx1ZXNJbkFycmF5KHRoaXMuYnVja2V0TG9jYXRvcnMpLzIpfSx0LnByb3RvdHlwZS5nZXRUb3RhbEVsZW1lbnRDb3VudD1mdW5jdGlvbigpe2Zvcih2YXIgZT0wLHQ9MDt0PHRoaXMuYnVja2V0TG9jYXRvcnMubGVuZ3RoO3QrPTIpZSs9dGhpcy5idWNrZXRMb2NhdG9yc1t0KzFdO3JldHVybiBlfSx0KTtmdW5jdGlvbiB0KGUpe3RoaXMubWluaW11bUJ1Y2tldENhcGFjaXR5PTQsdGhpcy5tYXhpbXVtQnVja2V0Q2FwYWNpdHk9NjQsdGhpcy5idWNrZXRMb2NhdG9ycz1uZXcgVWludDMyQXJyYXkoMiplKSx0aGlzLnN0b3JhZ2U9bmV3IFVpbnQzMkFycmF5KDIqZSksdGhpcy5zdG9yYWdlSW5kZXg9MX1zLkNvbXByZXNzb3JDdXN0b21IYXNoVGFibGU9ZX0oTFpVVEY4PUxaVVRGOHx8e30pLGZ1bmN0aW9uKG4pe3ZhciBlPSh0LnByb3RvdHlwZS5hZGRWYWx1ZVRvQnVja2V0PWZ1bmN0aW9uKGUsdCl7dmFyIHI9dGhpcy5idWNrZXRzW2VdO3ZvaWQgMD09PXI/dGhpcy5idWNrZXRzW2VdPVt0XTooci5sZW5ndGg9PT10aGlzLm1heGltdW1CdWNrZXRDYXBhY2l0eS0xJiZuLkFycmF5VG9vbHMudHJ1bmNhdGVTdGFydGluZ0VsZW1lbnRzKHIsdGhpcy5tYXhpbXVtQnVja2V0Q2FwYWNpdHkvMiksci5wdXNoKHQpKX0sdC5wcm90b3R5cGUuZ2V0QXJyYXlTZWdtZW50Rm9yQnVja2V0SW5kZXg9ZnVuY3Rpb24oZSx0KXt2YXIgcj10aGlzLmJ1Y2tldHNbZV07cmV0dXJuIHZvaWQgMD09PXI/bnVsbDoodm9pZCAwPT09dCYmKHQ9bmV3IG4uQXJyYXlTZWdtZW50KHIsMCxyLmxlbmd0aCkpLHQpfSx0LnByb3RvdHlwZS5nZXRVc2VkQnVja2V0Q291bnQ9ZnVuY3Rpb24oKXtyZXR1cm4gbi5BcnJheVRvb2xzLmNvdW50Tm9uemVyb1ZhbHVlc0luQXJyYXkodGhpcy5idWNrZXRzKX0sdC5wcm90b3R5cGUuZ2V0VG90YWxFbGVtZW50Q291bnQ9ZnVuY3Rpb24oKXtmb3IodmFyIGU9MCx0PTA7dDx0aGlzLmJ1Y2tldHMubGVuZ3RoO3QrKyl2b2lkIDAhPT10aGlzLmJ1Y2tldHNbdF0mJihlKz10aGlzLmJ1Y2tldHNbdF0ubGVuZ3RoKTtyZXR1cm4gZX0sdCk7ZnVuY3Rpb24gdChlKXt0aGlzLm1heGltdW1CdWNrZXRDYXBhY2l0eT02NCx0aGlzLmJ1Y2tldHM9bmV3IEFycmF5KGUpfW4uQ29tcHJlc3NvclNpbXBsZUhhc2hUYWJsZT1lfShMWlVURjg9TFpVVEY4fHx7fSksZnVuY3Rpb24oZil7dmFyIGU9KHQucHJvdG90eXBlLmRlY29tcHJlc3NCbG9ja1RvU3RyaW5nPWZ1bmN0aW9uKGUpe3JldHVybiBlPWYuQnVmZmVyVG9vbHMuY29udmVydFRvVWludDhBcnJheUlmTmVlZGVkKGUpLGYuZGVjb2RlVVRGOCh0aGlzLmRlY29tcHJlc3NCbG9jayhlKSl9LHQucHJvdG90eXBlLmRlY29tcHJlc3NCbG9jaz1mdW5jdGlvbihlKXt0aGlzLmlucHV0QnVmZmVyUmVtYWluZGVyJiYoZT1mLkFycmF5VG9vbHMuY29uY2F0VWludDhBcnJheXMoW3RoaXMuaW5wdXRCdWZmZXJSZW1haW5kZXIsZV0pLHRoaXMuaW5wdXRCdWZmZXJSZW1haW5kZXI9dm9pZCAwKTtmb3IodmFyIHQ9dGhpcy5jcm9wT3V0cHV0QnVmZmVyVG9XaW5kb3dBbmRJbml0aWFsaXplKE1hdGgubWF4KDQqZS5sZW5ndGgsMTAyNCkpLHI9MCxuPWUubGVuZ3RoO3I8bjtyKyspe3ZhciBvPWVbcl07aWYobz4+PjY9PTMpe3ZhciBpPW8+Pj41O2lmKHI9PW4tMXx8cj09bi0yJiY3PT1pKXt0aGlzLmlucHV0QnVmZmVyUmVtYWluZGVyPWUuc3ViYXJyYXkocik7YnJlYWt9aWYoZVtyKzFdPj4+Nz09MSl0aGlzLm91dHB1dEJ5dGUobyk7ZWxzZXt2YXIgdT0zMSZvLHM9dm9pZCAwOzY9PWk/KHM9ZVtyKzFdLHIrPTEpOihzPWVbcisxXTw8OHxlW3IrMl0scis9Mik7Zm9yKHZhciBhPXRoaXMub3V0cHV0UG9zaXRpb24tcyxjPTA7Yzx1O2MrKyl0aGlzLm91dHB1dEJ5dGUodGhpcy5vdXRwdXRCdWZmZXJbYStjXSl9fWVsc2UgdGhpcy5vdXRwdXRCeXRlKG8pfXJldHVybiB0aGlzLnJvbGxCYWNrSWZPdXRwdXRCdWZmZXJFbmRzV2l0aEFUcnVuY2F0ZWRNdWx0aWJ5dGVTZXF1ZW5jZSgpLGYuQ29tcHJlc3Npb25Db21tb24uZ2V0Q3JvcHBlZEJ1ZmZlcih0aGlzLm91dHB1dEJ1ZmZlcix0LHRoaXMub3V0cHV0UG9zaXRpb24tdCl9LHQucHJvdG90eXBlLm91dHB1dEJ5dGU9ZnVuY3Rpb24oZSl7dGhpcy5vdXRwdXRQb3NpdGlvbj09PXRoaXMub3V0cHV0QnVmZmVyLmxlbmd0aCYmKHRoaXMub3V0cHV0QnVmZmVyPWYuQXJyYXlUb29scy5kb3VibGVCeXRlQXJyYXlDYXBhY2l0eSh0aGlzLm91dHB1dEJ1ZmZlcikpLHRoaXMub3V0cHV0QnVmZmVyW3RoaXMub3V0cHV0UG9zaXRpb24rK109ZX0sdC5wcm90b3R5cGUuY3JvcE91dHB1dEJ1ZmZlclRvV2luZG93QW5kSW5pdGlhbGl6ZT1mdW5jdGlvbihlKXtpZighdGhpcy5vdXRwdXRCdWZmZXIpcmV0dXJuIHRoaXMub3V0cHV0QnVmZmVyPW5ldyBVaW50OEFycmF5KGUpLDA7dmFyIHQ9TWF0aC5taW4odGhpcy5vdXRwdXRQb3NpdGlvbix0aGlzLk1heGltdW1NYXRjaERpc3RhbmNlKTtpZih0aGlzLm91dHB1dEJ1ZmZlcj1mLkNvbXByZXNzaW9uQ29tbW9uLmdldENyb3BwZWRCdWZmZXIodGhpcy5vdXRwdXRCdWZmZXIsdGhpcy5vdXRwdXRQb3NpdGlvbi10LHQsZSksdGhpcy5vdXRwdXRQb3NpdGlvbj10LHRoaXMub3V0cHV0QnVmZmVyUmVtYWluZGVyKXtmb3IodmFyIHI9MDtyPHRoaXMub3V0cHV0QnVmZmVyUmVtYWluZGVyLmxlbmd0aDtyKyspdGhpcy5vdXRwdXRCeXRlKHRoaXMub3V0cHV0QnVmZmVyUmVtYWluZGVyW3JdKTt0aGlzLm91dHB1dEJ1ZmZlclJlbWFpbmRlcj12b2lkIDB9cmV0dXJuIHR9LHQucHJvdG90eXBlLnJvbGxCYWNrSWZPdXRwdXRCdWZmZXJFbmRzV2l0aEFUcnVuY2F0ZWRNdWx0aWJ5dGVTZXF1ZW5jZT1mdW5jdGlvbigpe2Zvcih2YXIgZT0xO2U8PTQmJjA8PXRoaXMub3V0cHV0UG9zaXRpb24tZTtlKyspe3ZhciB0PXRoaXMub3V0cHV0QnVmZmVyW3RoaXMub3V0cHV0UG9zaXRpb24tZV07aWYoZTw0JiZ0Pj4+Mz09MzB8fGU8MyYmdD4+PjQ9PTE0fHxlPDImJnQ+Pj41PT02KXJldHVybiB0aGlzLm91dHB1dEJ1ZmZlclJlbWFpbmRlcj10aGlzLm91dHB1dEJ1ZmZlci5zdWJhcnJheSh0aGlzLm91dHB1dFBvc2l0aW9uLWUsdGhpcy5vdXRwdXRQb3NpdGlvbiksdm9pZCh0aGlzLm91dHB1dFBvc2l0aW9uLT1lKX19LHQpO2Z1bmN0aW9uIHQoKXt0aGlzLk1heGltdW1NYXRjaERpc3RhbmNlPTMyNzY3LHRoaXMub3V0cHV0UG9zaXRpb249MH1mLkRlY29tcHJlc3Nvcj1lfShMWlVURjg9TFpVVEY4fHx7fSksZnVuY3Rpb24ocyl7dmFyIGUsdCxhLGM7ZT1zLkVuY29kaW5nfHwocy5FbmNvZGluZz17fSksdD1lLkJhc2U2NHx8KGUuQmFzZTY0PXt9KSxhPW5ldyBVaW50OEFycmF5KFs2NSw2Niw2Nyw2OCw2OSw3MCw3MSw3Miw3Myw3NCw3NSw3Niw3Nyw3OCw3OSw4MCw4MSw4Miw4Myw4NCw4NSw4Niw4Nyw4OCw4OSw5MCw5Nyw5OCw5OSwxMDAsMTAxLDEwMiwxMDMsMTA0LDEwNSwxMDYsMTA3LDEwOCwxMDksMTEwLDExMSwxMTIsMTEzLDExNCwxMTUsMTE2LDExNywxMTgsMTE5LDEyMCwxMjEsMTIyLDQ4LDQ5LDUwLDUxLDUyLDUzLDU0LDU1LDU2LDU3LDQzLDQ3XSksYz1uZXcgVWludDhBcnJheShbMjU1LDI1NSwyNTUsMjU1LDI1NSwyNTUsMjU1LDI1NSwyNTUsMjU1LDI1NSwyNTUsMjU1LDI1NSwyNTUsMjU1LDI1NSwyNTUsMjU1LDI1NSwyNTUsMjU1LDI1NSwyNTUsMjU1LDI1NSwyNTUsMjU1LDI1NSwyNTUsMjU1LDI1NSwyNTUsMjU1LDI1NSwyNTUsMjU1LDI1NSwyNTUsMjU1LDI1NSwyNTUsMjU1LDYyLDI1NSwyNTUsMjU1LDYzLDUyLDUzLDU0LDU1LDU2LDU3LDU4LDU5LDYwLDYxLDI1NSwyNTUsMjU1LDAsMjU1LDI1NSwyNTUsMCwxLDIsMyw0LDUsNiw3LDgsOSwxMCwxMSwxMiwxMywxNCwxNSwxNiwxNywxOCwxOSwyMCwyMSwyMiwyMywyNCwyNSwyNTUsMjU1LDI1NSwyNTUsMjU1LDI1NSwyNiwyNywyOCwyOSwzMCwzMSwzMiwzMywzNCwzNSwzNiwzNywzOCwzOSw0MCw0MSw0Miw0Myw0NCw0NSw0Niw0Nyw0OCw0OSw1MCw1MSwyNTUsMjU1LDI1NSwyNTVdKSx0LmVuY29kZT1mdW5jdGlvbihlKXtyZXR1cm4gZSYmMCE9ZS5sZW5ndGg/cy5ydW5uaW5nSW5Ob2RlSlMoKT9zLkJ1ZmZlclRvb2xzLnVpbnQ4QXJyYXlUb0J1ZmZlcihlKS50b1N0cmluZygiYmFzZTY0Iik6dC5lbmNvZGVXaXRoSlMoZSk6IiJ9LHQuZGVjb2RlPWZ1bmN0aW9uKGUpe3JldHVybiBlP3MucnVubmluZ0luTm9kZUpTKCk/cy5CdWZmZXJUb29scy5idWZmZXJUb1VpbnQ4QXJyYXkobmV3IEJ1ZmZlcihlLCJiYXNlNjQiKSk6dC5kZWNvZGVXaXRoSlMoZSk6bmV3IFVpbnQ4QXJyYXkoMCl9LHQuZW5jb2RlV2l0aEpTPWZ1bmN0aW9uKGUsdCl7aWYodm9pZCAwPT09dCYmKHQ9ITApLCFlfHwwPT1lLmxlbmd0aClyZXR1cm4iIjtmb3IodmFyIHIsbj1hLG89bmV3IHMuU3RyaW5nQnVpbGRlcixpPTAsdT1lLmxlbmd0aDtpPHU7aSs9MylpPD11LTM/KHI9ZVtpXTw8MTZ8ZVtpKzFdPDw4fGVbaSsyXSxvLmFwcGVuZENoYXJDb2RlKG5bcj4+PjE4JjYzXSksby5hcHBlbmRDaGFyQ29kZShuW3I+Pj4xMiY2M10pLG8uYXBwZW5kQ2hhckNvZGUobltyPj4+NiY2M10pLG8uYXBwZW5kQ2hhckNvZGUobls2MyZyXSkscj0wKTppPT09dS0yPyhyPWVbaV08PDE2fGVbaSsxXTw8OCxvLmFwcGVuZENoYXJDb2RlKG5bcj4+PjE4JjYzXSksby5hcHBlbmRDaGFyQ29kZShuW3I+Pj4xMiY2M10pLG8uYXBwZW5kQ2hhckNvZGUobltyPj4+NiY2M10pLHQmJm8uYXBwZW5kQ2hhckNvZGUoNjEpKTppPT09dS0xJiYocj1lW2ldPDwxNixvLmFwcGVuZENoYXJDb2RlKG5bcj4+PjE4JjYzXSksby5hcHBlbmRDaGFyQ29kZShuW3I+Pj4xMiY2M10pLHQmJihvLmFwcGVuZENoYXJDb2RlKDYxKSxvLmFwcGVuZENoYXJDb2RlKDYxKSkpO3JldHVybiBvLmdldE91dHB1dFN0cmluZygpfSx0LmRlY29kZVdpdGhKUz1mdW5jdGlvbihlLHQpe2lmKCFlfHwwPT1lLmxlbmd0aClyZXR1cm4gbmV3IFVpbnQ4QXJyYXkoMCk7dmFyIHI9ZS5sZW5ndGglNDtpZigxPT1yKXRocm93IG5ldyBFcnJvcigiSW52YWxpZCBCYXNlNjQgc3RyaW5nOiBsZW5ndGggJSA0ID09IDEiKTsyPT1yP2UrPSI9PSI6Mz09ciYmKGUrPSI9IiksdD10fHxuZXcgVWludDhBcnJheShlLmxlbmd0aCk7Zm9yKHZhciBuPTAsbz1lLmxlbmd0aCxpPTA7aTxvO2krPTQpe3ZhciB1PWNbZS5jaGFyQ29kZUF0KGkpXTw8MTh8Y1tlLmNoYXJDb2RlQXQoaSsxKV08PDEyfGNbZS5jaGFyQ29kZUF0KGkrMildPDw2fGNbZS5jaGFyQ29kZUF0KGkrMyldO3RbbisrXT11Pj4+MTYmMjU1LHRbbisrXT11Pj4+OCYyNTUsdFtuKytdPTI1NSZ1fXJldHVybiA2MT09ZS5jaGFyQ29kZUF0KG8tMSkmJm4tLSw2MT09ZS5jaGFyQ29kZUF0KG8tMikmJm4tLSx0LnN1YmFycmF5KDAsbil9fShMWlVURjg9TFpVVEY4fHx7fSksZnVuY3Rpb24ocyl7dmFyIGUsdDtlPXMuRW5jb2Rpbmd8fChzLkVuY29kaW5nPXt9KSwodD1lLkJpbmFyeVN0cmluZ3x8KGUuQmluYXJ5U3RyaW5nPXt9KSkuZW5jb2RlPWZ1bmN0aW9uKGUpe2lmKG51bGw9PWUpdGhyb3cgbmV3IFR5cGVFcnJvcigiQmluYXJ5U3RyaW5nLmVuY29kZTogdW5kZWZpbmVkIG9yIG51bGwgaW5wdXQgcmVjZWl2ZWQiKTtpZigwPT09ZS5sZW5ndGgpcmV0dXJuIiI7Zm9yKHZhciB0PWUubGVuZ3RoLHI9bmV3IHMuU3RyaW5nQnVpbGRlcixuPTAsbz0xLGk9MDtpPHQ7aSs9Mil7dmFyIHU9dm9pZCAwO3U9aT09dC0xP2VbaV08PDg6ZVtpXTw8OHxlW2krMV0sci5hcHBlbmRDaGFyQ29kZShuPDwxNi1vfHU+Pj5vKSxuPXUmKDE8PG8pLTEsMTU9PT1vPyhyLmFwcGVuZENoYXJDb2RlKG4pLG49MCxvPTEpOm8rPTEsdC0yPD1pJiZyLmFwcGVuZENoYXJDb2RlKG48PDE2LW8pfXJldHVybiByLmFwcGVuZENoYXJDb2RlKDMyNzY4fHQlMiksci5nZXRPdXRwdXRTdHJpbmcoKX0sdC5kZWNvZGU9ZnVuY3Rpb24oZSl7aWYoInN0cmluZyIhPXR5cGVvZiBlKXRocm93IG5ldyBUeXBlRXJyb3IoIkJpbmFyeVN0cmluZy5kZWNvZGU6IGludmFsaWQgaW5wdXQgdHlwZSIpO2lmKCIiPT1lKXJldHVybiBuZXcgVWludDhBcnJheSgwKTtmb3IodmFyIHQscj1uZXcgVWludDhBcnJheSgzKmUubGVuZ3RoKSxuPTAsbz0wLGk9MCx1PTA7dTxlLmxlbmd0aDt1Kyspe3ZhciBzPWUuY2hhckNvZGVBdCh1KTszMjc2ODw9cz8oMzI3Njk9PXMmJm4tLSxpPTApOihvPTA9PWk/czoodD1vPDxpfHM+Pj4xNS1pLHJbbisrXT10Pj4+OCxyW24rK109MjU1JnQscyYoMTw8MTUtaSktMSksMTU9PWk/aT0wOmkrPTEpfXJldHVybiByLnN1YmFycmF5KDAsbil9fShMWlVURjg9TFpVVEY4fHx7fSksZnVuY3Rpb24oZSl7dmFyIHQscjt0PWUuRW5jb2Rpbmd8fChlLkVuY29kaW5nPXt9KSwocj10LkNvZGVQb2ludHx8KHQuQ29kZVBvaW50PXt9KSkuZW5jb2RlRnJvbVN0cmluZz1mdW5jdGlvbihlLHQpe3ZhciByPWUuY2hhckNvZGVBdCh0KTtpZihyPDU1Mjk2fHw1NjMxOTxyKXJldHVybiByO3ZhciBuPWUuY2hhckNvZGVBdCh0KzEpO2lmKDU2MzIwPD1uJiZuPD01NzM0MylyZXR1cm4gbi01NjMyMCsoci01NTI5Njw8MTApKzY1NTM2O3Rocm93IG5ldyBFcnJvcigiZ2V0VW5pY29kZUNvZGVQb2ludDogUmVjZWl2ZWQgYSBsZWFkIHN1cnJvZ2F0ZSBjaGFyYWN0ZXIsIGNoYXIgY29kZSAiK3IrIiwgZm9sbG93ZWQgYnkgIituKyIsIHdoaWNoIGlzIG5vdCBhIHRyYWlsaW5nIHN1cnJvZ2F0ZSBjaGFyYWN0ZXIgY29kZS4iKX0sci5kZWNvZGVUb1N0cmluZz1mdW5jdGlvbihlKXtpZihlPD02NTUzNSlyZXR1cm4gU3RyaW5nLmZyb21DaGFyQ29kZShlKTtpZihlPD0xMTE0MTExKXJldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlKDU1Mjk2KyhlLTY1NTM2Pj4+MTApLDU2MzIwKyhlLTY1NTM2JjEwMjMpKTt0aHJvdyBuZXcgRXJyb3IoImdldFN0cmluZ0Zyb21Vbmljb2RlQ29kZVBvaW50OiBBIGNvZGUgcG9pbnQgb2YgIitlKyIgY2Fubm90IGJlIGVuY29kZWQgaW4gVVRGLTE2Iil9fShMWlVURjg9TFpVVEY4fHx7fSksZnVuY3Rpb24oZSl7dmFyIHQscixuO3Q9ZS5FbmNvZGluZ3x8KGUuRW5jb2Rpbmc9e30pLHI9dC5EZWNpbWFsU3RyaW5nfHwodC5EZWNpbWFsU3RyaW5nPXt9KSxuPVsiMDAwIiwiMDAxIiwiMDAyIiwiMDAzIiwiMDA0IiwiMDA1IiwiMDA2IiwiMDA3IiwiMDA4IiwiMDA5IiwiMDEwIiwiMDExIiwiMDEyIiwiMDEzIiwiMDE0IiwiMDE1IiwiMDE2IiwiMDE3IiwiMDE4IiwiMDE5IiwiMDIwIiwiMDIxIiwiMDIyIiwiMDIzIiwiMDI0IiwiMDI1IiwiMDI2IiwiMDI3IiwiMDI4IiwiMDI5IiwiMDMwIiwiMDMxIiwiMDMyIiwiMDMzIiwiMDM0IiwiMDM1IiwiMDM2IiwiMDM3IiwiMDM4IiwiMDM5IiwiMDQwIiwiMDQxIiwiMDQyIiwiMDQzIiwiMDQ0IiwiMDQ1IiwiMDQ2IiwiMDQ3IiwiMDQ4IiwiMDQ5IiwiMDUwIiwiMDUxIiwiMDUyIiwiMDUzIiwiMDU0IiwiMDU1IiwiMDU2IiwiMDU3IiwiMDU4IiwiMDU5IiwiMDYwIiwiMDYxIiwiMDYyIiwiMDYzIiwiMDY0IiwiMDY1IiwiMDY2IiwiMDY3IiwiMDY4IiwiMDY5IiwiMDcwIiwiMDcxIiwiMDcyIiwiMDczIiwiMDc0IiwiMDc1IiwiMDc2IiwiMDc3IiwiMDc4IiwiMDc5IiwiMDgwIiwiMDgxIiwiMDgyIiwiMDgzIiwiMDg0IiwiMDg1IiwiMDg2IiwiMDg3IiwiMDg4IiwiMDg5IiwiMDkwIiwiMDkxIiwiMDkyIiwiMDkzIiwiMDk0IiwiMDk1IiwiMDk2IiwiMDk3IiwiMDk4IiwiMDk5IiwiMTAwIiwiMTAxIiwiMTAyIiwiMTAzIiwiMTA0IiwiMTA1IiwiMTA2IiwiMTA3IiwiMTA4IiwiMTA5IiwiMTEwIiwiMTExIiwiMTEyIiwiMTEzIiwiMTE0IiwiMTE1IiwiMTE2IiwiMTE3IiwiMTE4IiwiMTE5IiwiMTIwIiwiMTIxIiwiMTIyIiwiMTIzIiwiMTI0IiwiMTI1IiwiMTI2IiwiMTI3IiwiMTI4IiwiMTI5IiwiMTMwIiwiMTMxIiwiMTMyIiwiMTMzIiwiMTM0IiwiMTM1IiwiMTM2IiwiMTM3IiwiMTM4IiwiMTM5IiwiMTQwIiwiMTQxIiwiMTQyIiwiMTQzIiwiMTQ0IiwiMTQ1IiwiMTQ2IiwiMTQ3IiwiMTQ4IiwiMTQ5IiwiMTUwIiwiMTUxIiwiMTUyIiwiMTUzIiwiMTU0IiwiMTU1IiwiMTU2IiwiMTU3IiwiMTU4IiwiMTU5IiwiMTYwIiwiMTYxIiwiMTYyIiwiMTYzIiwiMTY0IiwiMTY1IiwiMTY2IiwiMTY3IiwiMTY4IiwiMTY5IiwiMTcwIiwiMTcxIiwiMTcyIiwiMTczIiwiMTc0IiwiMTc1IiwiMTc2IiwiMTc3IiwiMTc4IiwiMTc5IiwiMTgwIiwiMTgxIiwiMTgyIiwiMTgzIiwiMTg0IiwiMTg1IiwiMTg2IiwiMTg3IiwiMTg4IiwiMTg5IiwiMTkwIiwiMTkxIiwiMTkyIiwiMTkzIiwiMTk0IiwiMTk1IiwiMTk2IiwiMTk3IiwiMTk4IiwiMTk5IiwiMjAwIiwiMjAxIiwiMjAyIiwiMjAzIiwiMjA0IiwiMjA1IiwiMjA2IiwiMjA3IiwiMjA4IiwiMjA5IiwiMjEwIiwiMjExIiwiMjEyIiwiMjEzIiwiMjE0IiwiMjE1IiwiMjE2IiwiMjE3IiwiMjE4IiwiMjE5IiwiMjIwIiwiMjIxIiwiMjIyIiwiMjIzIiwiMjI0IiwiMjI1IiwiMjI2IiwiMjI3IiwiMjI4IiwiMjI5IiwiMjMwIiwiMjMxIiwiMjMyIiwiMjMzIiwiMjM0IiwiMjM1IiwiMjM2IiwiMjM3IiwiMjM4IiwiMjM5IiwiMjQwIiwiMjQxIiwiMjQyIiwiMjQzIiwiMjQ0IiwiMjQ1IiwiMjQ2IiwiMjQ3IiwiMjQ4IiwiMjQ5IiwiMjUwIiwiMjUxIiwiMjUyIiwiMjUzIiwiMjU0IiwiMjU1Il0sci5lbmNvZGU9ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PVtdLHI9MDtyPGUubGVuZ3RoO3IrKyl0LnB1c2gobltlW3JdXSk7cmV0dXJuIHQuam9pbigiICIpfX0oTFpVVEY4PUxaVVRGOHx8e30pLGZ1bmN0aW9uKGUpe3ZhciB0LHI7dD1lLkVuY29kaW5nfHwoZS5FbmNvZGluZz17fSksKHI9dC5TdG9yYWdlQmluYXJ5U3RyaW5nfHwodC5TdG9yYWdlQmluYXJ5U3RyaW5nPXt9KSkuZW5jb2RlPWZ1bmN0aW9uKGUpe3JldHVybiB0LkJpbmFyeVN0cmluZy5lbmNvZGUoZSkucmVwbGFjZSgvXDAvZywi6ICCIil9LHIuZGVjb2RlPWZ1bmN0aW9uKGUpe3JldHVybiB0LkJpbmFyeVN0cmluZy5kZWNvZGUoZS5yZXBsYWNlKC9cdTgwMDIvZywiXDAiKSl9fShMWlVURjg9TFpVVEY4fHx7fSksZnVuY3Rpb24oYSl7dmFyIGksdCxyLG47aT1hLkVuY29kaW5nfHwoYS5FbmNvZGluZz17fSksKHQ9aS5VVEY4fHwoaS5VVEY4PXt9KSkuZW5jb2RlPWZ1bmN0aW9uKGUpe3JldHVybiBlJiYwIT1lLmxlbmd0aD9hLnJ1bm5pbmdJbk5vZGVKUygpP2EuQnVmZmVyVG9vbHMuYnVmZmVyVG9VaW50OEFycmF5KG5ldyBCdWZmZXIoZSwidXRmOCIpKTp0LmNyZWF0ZU5hdGl2ZVRleHRFbmNvZGVyQW5kRGVjb2RlcklmQXZhaWxhYmxlKCk/ci5lbmNvZGUoZSk6dC5lbmNvZGVXaXRoSlMoZSk6bmV3IFVpbnQ4QXJyYXkoMCl9LHQuZGVjb2RlPWZ1bmN0aW9uKGUpe3JldHVybiBlJiYwIT1lLmxlbmd0aD9hLnJ1bm5pbmdJbk5vZGVKUygpP2EuQnVmZmVyVG9vbHMudWludDhBcnJheVRvQnVmZmVyKGUpLnRvU3RyaW5nKCJ1dGY4Iik6dC5jcmVhdGVOYXRpdmVUZXh0RW5jb2RlckFuZERlY29kZXJJZkF2YWlsYWJsZSgpP24uZGVjb2RlKGUpOnQuZGVjb2RlV2l0aEpTKGUpOiIifSx0LmVuY29kZVdpdGhKUz1mdW5jdGlvbihlLHQpe2lmKCFlfHwwPT1lLmxlbmd0aClyZXR1cm4gbmV3IFVpbnQ4QXJyYXkoMCk7dD10fHxuZXcgVWludDhBcnJheSg0KmUubGVuZ3RoKTtmb3IodmFyIHI9MCxuPTA7bjxlLmxlbmd0aDtuKyspe3ZhciBvPWkuQ29kZVBvaW50LmVuY29kZUZyb21TdHJpbmcoZSxuKTtpZihvPD0xMjcpdFtyKytdPW87ZWxzZSBpZihvPD0yMDQ3KXRbcisrXT0xOTJ8bz4+PjYsdFtyKytdPTEyOHw2MyZvO2Vsc2UgaWYobzw9NjU1MzUpdFtyKytdPTIyNHxvPj4+MTIsdFtyKytdPTEyOHxvPj4+NiY2Myx0W3IrK109MTI4fDYzJm87ZWxzZXtpZighKG88PTExMTQxMTEpKXRocm93IG5ldyBFcnJvcigiSW52YWxpZCBVVEYtMTYgc3RyaW5nOiBFbmNvdW50ZXJlZCBhIGNoYXJhY3RlciB1bnN1cHBvcnRlZCBieSBVVEYtOC8xNiAoUkZDIDM2MjkpIik7dFtyKytdPTI0MHxvPj4+MTgsdFtyKytdPTEyOHxvPj4+MTImNjMsdFtyKytdPTEyOHxvPj4+NiY2Myx0W3IrK109MTI4fDYzJm8sbisrfX1yZXR1cm4gdC5zdWJhcnJheSgwLHIpfSx0LmRlY29kZVdpdGhKUz1mdW5jdGlvbihlLHQscil7aWYodm9pZCAwPT09dCYmKHQ9MCksIWV8fDA9PWUubGVuZ3RoKXJldHVybiIiO3ZvaWQgMD09PXImJihyPWUubGVuZ3RoKTtmb3IodmFyIG4sbyxpPW5ldyBhLlN0cmluZ0J1aWxkZXIsdT10LHM9cjt1PHM7KXtpZigobz1lW3VdKT4+Pjc9PTApbj1vLHUrPTE7ZWxzZSBpZihvPj4+NT09Nil7aWYocjw9dSsxKXRocm93IG5ldyBFcnJvcigiSW52YWxpZCBVVEYtOCBzdHJlYW06IFRydW5jYXRlZCBjb2RlcG9pbnQgc2VxdWVuY2UgZW5jb3VudGVyZWQgYXQgcG9zaXRpb24gIit1KTtuPSgzMSZvKTw8Nnw2MyZlW3UrMV0sdSs9Mn1lbHNlIGlmKG8+Pj40PT0xNCl7aWYocjw9dSsyKXRocm93IG5ldyBFcnJvcigiSW52YWxpZCBVVEYtOCBzdHJlYW06IFRydW5jYXRlZCBjb2RlcG9pbnQgc2VxdWVuY2UgZW5jb3VudGVyZWQgYXQgcG9zaXRpb24gIit1KTtuPSgxNSZvKTw8MTJ8KDYzJmVbdSsxXSk8PDZ8NjMmZVt1KzJdLHUrPTN9ZWxzZXtpZihvPj4+MyE9MzApdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIFVURi04IHN0cmVhbTogQW4gaW52YWxpZCBsZWFkIGJ5dGUgdmFsdWUgZW5jb3VudGVyZWQgYXQgcG9zaXRpb24gIit1KTtpZihyPD11KzMpdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIFVURi04IHN0cmVhbTogVHJ1bmNhdGVkIGNvZGVwb2ludCBzZXF1ZW5jZSBlbmNvdW50ZXJlZCBhdCBwb3NpdGlvbiAiK3UpO249KDcmbyk8PDE4fCg2MyZlW3UrMV0pPDwxMnwoNjMmZVt1KzJdKTw8Nnw2MyZlW3UrM10sdSs9NH1pLmFwcGVuZENvZGVQb2ludChuKX1yZXR1cm4gaS5nZXRPdXRwdXRTdHJpbmcoKX0sdC5jcmVhdGVOYXRpdmVUZXh0RW5jb2RlckFuZERlY29kZXJJZkF2YWlsYWJsZT1mdW5jdGlvbigpe3JldHVybiEhcnx8ImZ1bmN0aW9uIj09dHlwZW9mIFRleHRFbmNvZGVyJiYocj1uZXcgVGV4dEVuY29kZXIoInV0Zi04Iiksbj1uZXcgVGV4dERlY29kZXIoInV0Zi04IiksITApfX0oTFpVVEY4PUxaVVRGOHx8e30pLGZ1bmN0aW9uKG8pe28uY29tcHJlc3M9ZnVuY3Rpb24oZSx0KXtpZih2b2lkIDA9PT10JiYodD17fSksbnVsbD09ZSl0aHJvdyBuZXcgVHlwZUVycm9yKCJjb21wcmVzczogdW5kZWZpbmVkIG9yIG51bGwgaW5wdXQgcmVjZWl2ZWQiKTt2YXIgcj1vLkNvbXByZXNzaW9uQ29tbW9uLmRldGVjdENvbXByZXNzaW9uU291cmNlRW5jb2RpbmcoZSk7dD1vLk9iamVjdFRvb2xzLm92ZXJyaWRlKHtpbnB1dEVuY29kaW5nOnIsb3V0cHV0RW5jb2Rpbmc6IkJ5dGVBcnJheSJ9LHQpO3ZhciBuPShuZXcgby5Db21wcmVzc29yKS5jb21wcmVzc0Jsb2NrKGUpO3JldHVybiBvLkNvbXByZXNzaW9uQ29tbW9uLmVuY29kZUNvbXByZXNzZWRCeXRlcyhuLHQub3V0cHV0RW5jb2RpbmcpfSxvLmRlY29tcHJlc3M9ZnVuY3Rpb24oZSx0KXtpZih2b2lkIDA9PT10JiYodD17fSksbnVsbD09ZSl0aHJvdyBuZXcgVHlwZUVycm9yKCJkZWNvbXByZXNzOiB1bmRlZmluZWQgb3IgbnVsbCBpbnB1dCByZWNlaXZlZCIpO3Q9by5PYmplY3RUb29scy5vdmVycmlkZSh7aW5wdXRFbmNvZGluZzoiQnl0ZUFycmF5IixvdXRwdXRFbmNvZGluZzoiU3RyaW5nIn0sdCk7dmFyIHI9by5Db21wcmVzc2lvbkNvbW1vbi5kZWNvZGVDb21wcmVzc2VkQnl0ZXMoZSx0LmlucHV0RW5jb2RpbmcpLG49KG5ldyBvLkRlY29tcHJlc3NvcikuZGVjb21wcmVzc0Jsb2NrKHIpO3JldHVybiBvLkNvbXByZXNzaW9uQ29tbW9uLmVuY29kZURlY29tcHJlc3NlZEJ5dGVzKG4sdC5vdXRwdXRFbmNvZGluZyl9LG8uY29tcHJlc3NBc3luYz1mdW5jdGlvbihlLHQscil7dmFyIG47bnVsbD09ciYmKHI9ZnVuY3Rpb24oKXt9KTt0cnl7bj1vLkNvbXByZXNzaW9uQ29tbW9uLmRldGVjdENvbXByZXNzaW9uU291cmNlRW5jb2RpbmcoZSl9Y2F0Y2goZSl7cmV0dXJuIHZvaWQgcih2b2lkIDAsZSl9dD1vLk9iamVjdFRvb2xzLm92ZXJyaWRlKHtpbnB1dEVuY29kaW5nOm4sb3V0cHV0RW5jb2Rpbmc6IkJ5dGVBcnJheSIsdXNlV2ViV29ya2VyOiEwLGJsb2NrU2l6ZTo2NTUzNn0sdCksby5lbnF1ZXVlSW1tZWRpYXRlKGZ1bmN0aW9uKCl7dC51c2VXZWJXb3JrZXImJm8uV2ViV29ya2VyLmNyZWF0ZUdsb2JhbFdvcmtlcklmTmVlZGVkKCk/by5XZWJXb3JrZXIuY29tcHJlc3NBc3luYyhlLHQscik6by5Bc3luY0NvbXByZXNzb3IuY29tcHJlc3NBc3luYyhlLHQscil9KX0sby5kZWNvbXByZXNzQXN5bmM9ZnVuY3Rpb24oZSx0LHIpe2lmKG51bGw9PXImJihyPWZ1bmN0aW9uKCl7fSksbnVsbCE9ZSl7dD1vLk9iamVjdFRvb2xzLm92ZXJyaWRlKHtpbnB1dEVuY29kaW5nOiJCeXRlQXJyYXkiLG91dHB1dEVuY29kaW5nOiJTdHJpbmciLHVzZVdlYldvcmtlcjohMCxibG9ja1NpemU6NjU1MzZ9LHQpO3ZhciBuPW8uQnVmZmVyVG9vbHMuY29udmVydFRvVWludDhBcnJheUlmTmVlZGVkKGUpO28uRXZlbnRMb29wLmVucXVldWVJbW1lZGlhdGUoZnVuY3Rpb24oKXt0LnVzZVdlYldvcmtlciYmby5XZWJXb3JrZXIuY3JlYXRlR2xvYmFsV29ya2VySWZOZWVkZWQoKT9vLldlYldvcmtlci5kZWNvbXByZXNzQXN5bmMobix0LHIpOm8uQXN5bmNEZWNvbXByZXNzb3IuZGVjb21wcmVzc0FzeW5jKGUsdCxyKX0pfWVsc2Ugcih2b2lkIDAsbmV3IFR5cGVFcnJvcigiZGVjb21wcmVzc0FzeW5jOiB1bmRlZmluZWQgb3IgbnVsbCBpbnB1dCByZWNlaXZlZCIpKX0sby5jcmVhdGVDb21wcmVzc2lvblN0cmVhbT1mdW5jdGlvbigpe3JldHVybiBvLkFzeW5jQ29tcHJlc3Nvci5jcmVhdGVDb21wcmVzc2lvblN0cmVhbSgpfSxvLmNyZWF0ZURlY29tcHJlc3Npb25TdHJlYW09ZnVuY3Rpb24oKXtyZXR1cm4gby5Bc3luY0RlY29tcHJlc3Nvci5jcmVhdGVEZWNvbXByZXNzaW9uU3RyZWFtKCl9LG8uZW5jb2RlVVRGOD1mdW5jdGlvbihlKXtyZXR1cm4gby5FbmNvZGluZy5VVEY4LmVuY29kZShlKX0sby5kZWNvZGVVVEY4PWZ1bmN0aW9uKGUpe3JldHVybiBvLkVuY29kaW5nLlVURjguZGVjb2RlKGUpfSxvLmVuY29kZUJhc2U2ND1mdW5jdGlvbihlKXtyZXR1cm4gby5FbmNvZGluZy5CYXNlNjQuZW5jb2RlKGUpfSxvLmRlY29kZUJhc2U2ND1mdW5jdGlvbihlKXtyZXR1cm4gby5FbmNvZGluZy5CYXNlNjQuZGVjb2RlKGUpfSxvLmVuY29kZUJpbmFyeVN0cmluZz1mdW5jdGlvbihlKXtyZXR1cm4gby5FbmNvZGluZy5CaW5hcnlTdHJpbmcuZW5jb2RlKGUpfSxvLmRlY29kZUJpbmFyeVN0cmluZz1mdW5jdGlvbihlKXtyZXR1cm4gby5FbmNvZGluZy5CaW5hcnlTdHJpbmcuZGVjb2RlKGUpfSxvLmVuY29kZVN0b3JhZ2VCaW5hcnlTdHJpbmc9ZnVuY3Rpb24oZSl7cmV0dXJuIG8uRW5jb2RpbmcuU3RvcmFnZUJpbmFyeVN0cmluZy5lbmNvZGUoZSl9LG8uZGVjb2RlU3RvcmFnZUJpbmFyeVN0cmluZz1mdW5jdGlvbihlKXtyZXR1cm4gby5FbmNvZGluZy5TdG9yYWdlQmluYXJ5U3RyaW5nLmRlY29kZShlKX19KExaVVRGOD1MWlVURjh8fHt9KTs=`","//\r\n// BlockV AG. Copyright (c) 2018, all rights reserved.\r\n//\r\n// Licensed under the BlockV SDK License (the \"License\"); you may not use this file or\r\n// the BlockV SDK except in compliance with the License accompanying it. Unless\r\n// required by applicable law or agreed to in writing, the BlockV SDK distributed under\r\n// the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF\r\n// ANY KIND, either express or implied. See the License for the specific language\r\n// governing permissions and limitations under the License.\r\n//\r\n\r\nimport jwtDecode from 'jwt-decode'\r\n\r\nexport default class Store {\r\n constructor (prefix) {\r\n this.prefix = prefix\r\n }\r\n\r\n get server () {\r\n return this.serverAddress\r\n }\r\n\r\n set server (address) {\r\n this.serverAddress = address\r\n }\r\n\r\n set userID (userid) {\r\n // this.USERID = userid\r\n }\r\n\r\n get userID () {\r\n try {\r\n let dCode = jwtDecode(this.refreshToken)\r\n return dCode.user_id\r\n } catch (err) {\r\n console.warn(\"Decoding failed!\")\r\n }\r\n\r\n }\r\n\r\n get appID () {\r\n return this.APPID\r\n }\r\n\r\n set appID (appid) {\r\n this.APPID = appid\r\n }\r\n\r\n get websocketAddress () {\r\n return this.wssocketAddress\r\n }\r\n\r\n set websocketAddress (websocAddress) {\r\n this.wssocketAddress = websocAddress\r\n }\r\n\r\n set token (token) {\r\n this.accessToken = token\r\n }\r\n\r\n get token () {\r\n return this.accessToken\r\n }\r\n\r\n set refreshToken (refresh) {\r\n this.token = ''\r\n this.privateRefreshToken = refresh\r\n if (typeof localStorage !== 'undefined') {\r\n // eslint-disable-next-line no-undef\r\n localStorage.setItem(`${this.prefix}_refresh`, refresh)\r\n }\r\n }\r\n\r\n get refreshToken () {\r\n if (this.privateRefreshToken) {\r\n return this.privateRefreshToken\r\n }\r\n if (typeof localStorage !== 'undefined') {\r\n // eslint-disable-next-line no-undef\r\n const rT = localStorage.getItem(`${this.prefix}_refresh`)\r\n if (rT) {\r\n return rT\r\n }\r\n }\r\n return null\r\n }\r\n\r\n set assetProvider (provider) {\r\n this.privateAssetProvider = provider\r\n if (typeof localStorage !== 'undefined') {\r\n // eslint-disable-next-line no-undef\r\n localStorage.setItem(`${this.prefix}_asset_provider`, JSON.stringify(provider))\r\n }\r\n }\r\n\r\n get assetProvider () {\r\n if (this.privateAssetProvider) {\r\n return this.privateAssetProvider\r\n }\r\n if (typeof localStorage !== 'undefined') {\r\n // eslint-disable-next-line no-undef\r\n try {\r\n return JSON.parse(localStorage.getItem(`${this.prefix}_asset_provider`))\r\n } catch (err) {\r\n console.warn('Unable to parse JSON payload ', err)\r\n }\r\n }\r\n return null\r\n }\r\n}\r\n","//\r\n// BlockV AG. Copyright (c) 2018, all rights reserved.\r\n//\r\n// Licensed under the BlockV SDK License (the \"License\"); you may not use this file or\r\n// the BlockV SDK except in compliance with the License accompanying it. Unless\r\n// required by applicable law or agreed to in writing, the BlockV SDK distributed under\r\n// the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF\r\n// ANY KIND, either express or implied. See the License for the specific language\r\n// governing permissions and limitations under the License.\r\n//\r\n\r\nimport urlParse from 'url-parse'\r\nimport User from '../../../../model/User'\r\n\r\nexport default class UserApi {\r\n constructor (bv) {\r\n this.Blockv = bv\r\n this.client = bv.client\r\n this.store = bv.store\r\n this.dataPool = bv.dataPool\r\n }\r\n\r\n /**\r\n * Registers a user on the Blockv platform.\r\n *\r\n * @param registration contains properties of the user.\r\n * Only the properties to be registered should be set.\r\n * @return new Observable<User> instance\r\n */\r\n\r\n getAccessToken () {\r\n return this.store.token\r\n }\r\n\r\n setAccessToken (token) {\r\n this.store.token = ''\r\n this.store.token = token\r\n }\r\n\r\n getRefreshToken () {\r\n return this.store.refreshToken\r\n }\r\n\r\n setRefreshToken (token) {\r\n this.store.token = ''\r\n this.store.refreshToken = token\r\n }\r\n\r\n register (registration) {\r\n return this.client.request('POST', '/v1/users', registration, false)\r\n .then(\r\n (data) => {\r\n this.store.token = data.access_token.token\r\n this.store.refreshToken = data.refresh_token.token\r\n this.store.assetProvider = data.asset_provider\r\n this.store.userID = data.user.id\r\n this.dataPool.setSessionInfo({\r\n userID: data.user.id\r\n })\r\n return data\r\n }\r\n ).then(data => new User(data.user))\r\n }\r\n\r\n /**\r\n * Logs a user into the Blockv platform. Accepts a user token (phone or email).\r\n *\r\n * @param token the user's phone(E.164) or email\r\n * @param tokenType the type of the token (phone or email)\r\n * @param password the user's password.\r\n * @return JSON Object\r\n */\r\n\r\n login (token, tokenType, password) {\r\n const payload = {\r\n token,\r\n token_type: tokenType,\r\n auth_data: {\r\n password\r\n }\r\n }\r\n\r\n return this.client.request('POST', '/v1/user/login', payload, false).then(\r\n (data) => {\r\n if (!password) {\r\n const error = new Error('Login Failed, Password Reset')\r\n error.code = 'PASSWORD_RESET'\r\n throw error\r\n } else {\r\n this.store.token = data.access_token.token\r\n this.store.refreshToken = data.refresh_token.token\r\n this.store.assetProvider = data.asset_provider\r\n this.store.userID = data.user.id\r\n this.dataPool.setSessionInfo({\r\n userID: data.user.id,\r\n client: this.client\r\n })\r\n return data\r\n }\r\n }\r\n ).then(data => new User(data.user))\r\n }\r\n\r\n /**\r\n * Logs a user into the Blockv platform. Accepts a guest id\r\n *\r\n * @param guestId the user's guest id.\r\n * @return JSON Object\r\n */\r\n loginGuest (guestId) {\r\n const payload = {\r\n token: guestId,\r\n token_type: 'guest_id'\r\n }\r\n return this.client.request('POST', '/v1/user/login', payload, false).then(\r\n (data) => {\r\n this.store.token = data.access_token.token\r\n this.store.refreshToken = data.refresh_token.token\r\n this.store.assetProvider = data.asset_provider\r\n this.dataPool.setSessionInfo({\r\n userID: data.user.id\r\n })\r\n return data\r\n }\r\n ).then(data => new User(data.user))\r\n }\r\n\r\n uploadAvatar (request) {\r\n // get file\r\n // change to formData\r\n return this.client.request('POST', '/v1/user/avatar', request, true)\r\n }\r\n\r\n /**\r\n * Fetches the current user's profile information from the Blockv platform.\r\n *\r\n * @return JSON Object\r\n */\r\n\r\n getCurrentUser (payload) {\r\n // get the current authenticated in user\r\n return this.client.request('GET', '/v1/user', payload, true).then(data => new User(data))\r\n }\r\n\r\n /**\r\n * Updates the current user's profile on the Blockv platform.\r\n * @param update holds the properties of the user, e.g. their first name.\r\n * Only the properties to be updated should be set.\r\n * @return JSON Object\r\n */\r\n updateUser (update) {\r\n return this.client.request('PATCH', '/v1/user', update, true)\r\n }\r\n\r\n /**\r\n * Gets a list of the current users tokens\r\n * @return JSON Object\r\n */\r\n\r\n getUserTokens () {\r\n return this.client.request('GET', '/v1/user/tokens', '', true)\r\n }\r\n\r\n /**\r\n * Verifies ownership of a token by submitting the verification code to the Blockv platform.\r\n * @param token the user's phone(E.164) or email\r\n * @param tokenType the type of the token (phone or email)\r\n * @param code the verification code send to the user's token (phone or email).\r\n * @return JSON Object\r\n */\r\n verifyUserToken (verification) {\r\n return this.client.request('POST', '/v1/user/verify_token', verification, true)\r\n }\r\n\r\n /**\r\n * Sends a One-Time-Pin (OTP) to the user's token (phone or email).\r\n * This OTP may be used in place of a password to login.\r\n * @param token the user's phone(E.164) or email\r\n * @param tokenType the type of the token (phone or email)\r\n * @return JSON Object\r\n */\r\n resetPassword (token, tokenType) {\r\n const payload = {\r\n token,\r\n token_type: tokenType\r\n }\r\n return this.client.request('POST', '/v1/user/reset_token', payload, false)\r\n }\r\n\r\n /**\r\n * Sends a verification code to the user's token (phone or email).\r\n * This verification code should be used to verifiy the user's ownership\r\n * of the token (phone or email).\r\n * @param token the user's phone(E.164) or email\r\n * @param tokenType the type of the token (phone or email)\r\n * @return JSON Object\r\n */\r\n sendTokenVerification (token, tokenType) {\r\n const payload = {\r\n token,\r\n token_type: tokenType\r\n }\r\n return this.client.request('POST', '/v1/user/reset_token_verification', payload, false)\r\n }\r\n\r\n /**\r\n * Returns a server generated guest id\r\n * @return Object payload containing a guest user generated by the server\r\n */\r\n\r\n getGuestToken () {\r\n return this.client.request('POST', '/v1/user/guest', '', false).then(data => data.properties.guest_id)\r\n }\r\n\r\n /**\r\n * Log out the current user.\r\n * The current user will not longer be authorized to perform user\r\n * scoped requests on the Blockv platfrom.\r\n * @return new JSON\r\n */\r\n logout (noRequest = false) {\r\n this.Blockv.emit('logout')\r\n this.Blockv.WebSockets.close()\r\n console.log('trying to logout')\r\n if (noRequest) {\r\n this.store.token = ''\r\n this.store.refreshToken = ''\r\n this.dataPool.setSessionInfo(null)\r\n } else {\r\n return this.client.request('POST', '/v1/user/logout', {}, true).then(() => {\r\n this.store.token = ''\r\n this.store.refreshToken = ''\r\n this.dataPool.setSessionInfo(null)\r\n }).catch((err) => {\r\n console.warn(err)\r\n this.store.token = ''\r\n this.store.refreshToken = ''\r\n this.dataPool.setSessionInfo(null)\r\n throw err\r\n })\r\n }\r\n \r\n }\r\n\r\n static mapString (o) {\r\n return Object.keys(o).map(key => `${key}=${o[key]}`).join('&')\r\n }\r\n\r\n encodeAssetProvider (url) {\r\n const aP = this.store.assetProvider\r\n const aPlen = aP.length\r\n const compare = urlParse(url)\r\n for (let i = 0; i < aPlen; i += 1) {\r\n const comparethis = urlParse(aP[i].uri)\r\n if (compare.hostname === comparethis.hostname) {\r\n // same uri so get the policy signature and key and append\r\n const queryString = UserApi.mapString(aP[i].descriptor)\r\n return `${url}?${queryString}`\r\n }\r\n }\r\n return url\r\n }\r\n\r\n addUserToken (payload) {\r\n /**\r\n * payload is\r\n * {\r\n * \"token\": \"another.email@domain.com\",\r\n * \"token_type\": \"email\",\r\n * \"is_primary\": false\r\n * }\r\n */\r\n return this.client.request('POST', '/v1/user/tokens', payload, true)\r\n }\r\n\r\n setDefaultToken (tokenId) {\r\n return this.client.request('PUT', `/v1/user/tokens/${tokenId}/default`, null, true)\r\n }\r\n\r\n /**\r\n * Deletes a Users Token\r\n * @param {String} tokenId\r\n * @return {Promise<Object>} returns a success\r\n */\r\n deleteUserToken (tokenId) {\r\n return this.client.request('DELETE', `/v1/user/tokens/${tokenId}`, null, true)\r\n }\r\n\r\n /**\r\n * Adds a redeemable the users account\r\n * @param {Object} payload Object containing the redeemable information\r\n * @return {Promise<Object>} returns a Object containing the new redeemable\r\n */\r\n async addRedeemable (payload) {\r\n const { userID } = this.store\r\n return this.client.request('POST', `/v1/users/${userID}/redeemables`, payload, true)\r\n }\r\n\r\n async getPublicUserProfile (userID) {\r\n return this.client.request('GET', `/v1/users/${userID}`, '', true)\r\n }\r\n\r\n /**\r\n * Logs the user in via OAuth in a browser popup window.\r\n * NOTE: This is a private method, subject to change once more OAuth flows have been fully implemented on the backend.\r\n * @private\r\n * @returns {Promise<boolean>} `true` if login completed, or `false` if login was cancelled by the user.\r\n */\r\n async loginOAuthPopup () {\r\n // Ensure SDK has been initialized\r\n if (!this.store.appID) throw new Error('Please initialize the SDK and set your App ID first.')\r\n\r\n // Generate random state ID\r\n const stateID = Math.random().toString(36).substr(2)\r\n\r\n // Generate the oauth URL\r\n const redirectURI = 'https://login.blockv.io/send-event.html'\r\n const uri = `https://login.blockv.io/?response_type=code&client_id=${this.store.appID}&redirect_uri=${encodeURIComponent(redirectURI)}&scope=all&state=${stateID}`\r\n\r\n // Create popup window\r\n const newWindow = window.open(uri, '_blank', 'left=200,top=200,width=360,height=480,chrome,centerscreen')\r\n if (!newWindow) {\r\n throw new Error('Unable to login, popups have been blocked')\r\n }\r\n // Create pending promise\r\n let promiseResolved = false\r\n let promiseSuccess = null\r\n let promiseFail = null\r\n const promise = new Promise((resolve, reject) => {\r\n promiseSuccess = resolve\r\n promiseFail = reject\r\n })\r\n\r\n // Create window close checker\r\n const closeChecker = setInterval(() => {\r\n // Check if window was closed\r\n if (!newWindow.closed) return false\r\n\r\n // It was, cancel timer\r\n clearInterval(closeChecker)\r\n\r\n // If promise was never resolved, the user must have closed the popup before logging in. Resolve the promise.\r\n if (!promiseResolved) promiseSuccess(false)\r\n }, 250)\r\n\r\n // Create message listener\r\n const messageListener = async (e) => {\r\n // Ensure it's from the correct origin\r\n if (e.origin !== 'https://login.blockv.io') return false\r\n\r\n // Ensure the state matches\r\n if (e.data.state !== stateID) return false\r\n\r\n // Ensure the action matches\r\n if (e.data.action !== 'oauth-response') return false\r\n console.log(e.data)\r\n // Check response type\r\n if (e.data.code) {\r\n let oauthObj = {\r\n 'grant_type': 'authorization_code',\r\n 'client_id': this.Blockv.store.appID,\r\n 'code': e.data.code,\r\n 'redirect_uri': redirectURI\r\n }\r\n let oa = await this.Blockv.client.request('POST', '/v1/oauth/token', oauthObj, false)\r\n // We have our user data, store it\r\n this.setRefreshToken(oa.refresh_token.token)\r\n this.store.token = oa.access_token.token\r\n\r\n // Get user info and set the store properties\r\n const profile = await this.getCurrentUser()\r\n this.store.userID = profile.id\r\n\r\n // Get asset provider info and store it\r\n const assetProviders = await this.client.request('GET', '/v1/user/asset_providers', null, true)\r\n this.store.assetProvider = assetProviders.asset_provider\r\n\r\n // Inform data pool that the current user changed\r\n this.dataPool.setSessionInfo({\r\n userID: profile.id\r\n })\r\n\r\n // Done\r\n promiseResolved = true\r\n promiseSuccess(true)\r\n } else {\r\n // Login failed, return error\r\n const err = new Error(e.data.error_text || 'Unable to login.')\r\n err.code = e.data.error\r\n promiseResolved = true\r\n promiseFail(err)\r\n }\r\n\r\n // Cleanup, remove event listener\r\n newWindow.close()\r\n window.removeEventListener('message', messageListener)\r\n clearInterval(closeChecker)\r\n return true\r\n }\r\n\r\n // Attach message listener\r\n window.addEventListener('message', messageListener)\r\n\r\n // Done, return promise\r\n return promise\r\n }\r\n\r\n // Used for manual OAuth Login flow\r\n async loginOauthCode (redirectURI, code) {\r\n let oauthObj = {\r\n 'grant_type': 'authorization_code',\r\n 'client_id': this.store.appID,\r\n 'code': code,\r\n 'redirect_uri': redirectURI\r\n }\r\n let oa = await this.Blockv.client.request('POST', '/v1/oauth/token', oauthObj, false)\r\n // We have our user data, store it\r\n this.setRefreshToken(oa.refresh_token.token)\r\n this.store.token = oa.access_token.token\r\n\r\n // Get user info and set the store properties\r\n const profile = await this.getCurrentUser()\r\n this.store.userID = profile.id\r\n\r\n // Get asset provider info and store it\r\n const assetProviders = await this.client.request('GET', '/v1/user/asset_providers', null, true)\r\n this.store.assetProvider = assetProviders.asset_provider\r\n\r\n // Inform data pool that the current user changed\r\n this.dataPool.setSessionInfo({\r\n userID: profile.id\r\n })\r\n }\r\n}\r\n","//\n// BlockV AG. Copyright (c) 2018, all rights reserved.\n//\n// Licensed under the BlockV SDK License (the \"License\"); you may not use this file or\n// the BlockV SDK except in compliance with the License accompanying it. Unless\n// required by applicable law or agreed to in writing, the BlockV SDK distributed under\n// the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF\n// ANY KIND, either express or implied. See the License for the specific language\n// governing permissions and limitations under the License.\n//\nimport fetch from '@brillout/fetch'\nimport jwtDecode from 'jwt-decode'\nimport EventEmitter from '../EventEmitter'\n\n/* global FormData */\n\n/** List of known error messages to replace the server-supplied ones */\nconst ErrorCodes = {\n 2: 'Blank App ID',\n 17: 'Invalid App ID',\n 401: 'Token has Expired',\n 516: 'Invalid Payload',\n 517: 'Invalid Payload',\n 521: 'Token Unavailable',\n 527: 'Invalid Date Format',\n 1004: 'Invalid Request Payload',\n 1701: 'vAtom Unrecognized',\n 1708: 'vAtom Unvailable',\n 2030: 'No user found, Please register an account first.',\n 2031: 'Authentication Failed',\n 2032: 'Login Failed, Please try again',\n 2034: 'Invalid Token',\n 2037: 'Upload Avatar Failed',\n 2049: 'Refresh Token Expired / Not Whitelisted',\n 2051: 'Too many login attempts, Please try again later.',\n 2552: 'Unable To Retrieve Token',\n 2553: 'Token ID Invalid',\n 2562: 'Cannot Delete Primary Token',\n 2563: 'Token Already Confirmed',\n 2564: 'Invalid Verification Code',\n 2566: 'Token Already Confirmed',\n 2567: 'Invalid Verification Code',\n 2569: 'Invalid Token Type',\n 2571: 'Invalid Email',\n 2572: 'Invalid Phone Number'\n}\n\nexport default class Client extends EventEmitter {\n /** @private */\n constructor (bv) {\n super()\n this.Blockv = bv\n this.store = bv.store\n }\n\n /**\n * Sends a request to the backend.\n * @param {string} method The HTTP method, ie. \"GET\", \"POST\"\n * @param {string} endpoint The backend API endpoint, ie. \"/v1/user\"\n * @param {string|object|FormData} payload The request body. Can be null.\n * @param {boolean} auth `true` if this request should contain the current user's access token.\n * @param {object} headers Optional extra HTTP headers to add to the request.\n * @returns {Promise<object>} The server's response payload.\n */\n async request (method, endpoint, payload, auth, headers) {\n // Ensure our access token is up to date, if this is an authenticated request\n if (auth) await this.checkToken()\n\n // Attach headers\n if (!headers) headers = {}\n headers['App-Id'] = this.store.appID\n if (auth) headers['Authorization'] = `Bearer ${this.store.token}`\n\n // Send request\n return this.authRequest(method, endpoint, payload, headers)\n }\n\n /** @private */\n async authRequest (method, endpoint, payload, headers) {\n \n // Send request start event\n let t0 = performance.now();\n let statekey = Math.random().toString(36).substr(2)\n this.emit('requestTimerStart', {\n url: this.store.server + endpoint,\n method,\n event: 'start',\n statekey,\n time: t0\n })\n\n // Check payload type\n let body = null\n if (!payload) {\n // If no body, make it undefined so that fetch() doesn't complain about having a payload on GET requests\n body = undefined\n } else if (typeof FormData !== 'undefined' && payload instanceof FormData) {\n // Don't add Content-Type header, fetch() adds it's own, which is required because it specifies the form data boundary\n body = payload\n } else if (typeof body === 'object') {\n // Convert to JSON\n body = JSON.stringify(payload)\n headers['Content-Type'] = 'application/json'\n } else {\n // Unknown payload type, assume application/json content type, unless specified in extra headers\n body = payload\n if (!extraHeaders['Content-Type']) headers['Content-Type'] = 'application/json'\n }\n \n // try get a response\n let response = null\n let json = null\n try {\n\n // Send request\n response = await fetch(this.store.server + endpoint, { method, body, headers })\n\n // Decode JSON\n json = await response.json()\n\n // Send timing event\n var t1 = performance.now();\n this.emit('requestTimerEnd', {\n url: this.store.server + endpoint,\n method,\n milliseconds: t1 - t0,\n statekey,\n event: 'end'\n })\n\n } catch (err) {\n\n // Request failed, send timing event\n var t1 = performance.now();\n this.emit('requestTimerEnd', {\n url: this.store.server + endpoint,\n method,\n milliseconds: t1 - t0,\n statekey,\n event: 'end'\n })\n\n throw err\n\n }\n \n \n // Check for server error\n if (json.payload === undefined && json.error === 2051) {\n\n // Check for the special login locked error\n // We need to pull the timestamp that is in the reponse.message to show when they\n // can login agin\n\n // HACK: Pull time from original server error string\n const dateString = /\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}Z/g.exec(response.message)\n let lockedUntil = new Date(dateString)\n\n // Throw error\n const error = new Error(`Too many login attempts, try again at ${lockedUntil}`)\n error.code = json.error || response.status || 0\n error.httpStatus = response.status\n error.requestID = json.request_id\n error.serverMessage = json.message\n error.lockedUntil = lockedUntil\n throw error\n\n } else if (json && json.payload === undefined && response.status == 200) {\n\n // Sometimes, just sometimes, the backend will send a response outside of the usual `payload` param.\n // In this case, just wrap it.\n json = {\n payload: json\n }\n \n } else if (json.payload === undefined) {\n\n // Throw the error returned by the server\n const error = new Error(ErrorCodes[response.error] || json.message || 'An unknown server error has occurred')\n error.code = json.error || response.status || 0\n error.httpStatus = response.status\n error.requestID = json.request_id\n error.serverMessage = json.message\n throw error\n \n }\n\n // Check for main reactor error payload\n if (json.payload && json.payload.main && json.payload.main.error) {\n // Reactor error\n var err = json.payload.main.error.Code || response.status || 0\n const error = new Error(ErrorCodes[err] || json.payload.main.error.Msg || 'An unknown server error occurred.')\n error.code = err\n error.serverMessage = json.payload.main.error.Msg || ''\n error.httpStatus = response.status\n error.requestID = json.request_id\n throw error\n }\n \n // No error, continue\n return json.payload\n }\n\n /**\n * Uses the refresh token to fetch and store a new access token from the backend.\n * @private\n */\n refreshToken () {\n\n // Check if currently fetching an access token\n if (this.tokenFetchPromise)\n return this.tokenFetchPromise\n\n // Start fetching\n this.tokenFetchPromise = this.request('POST', '/v1/access_token', '', false, {\n Authorization: `Bearer ${this.store.refreshToken}`\n }).then(data => {\n\n // Store it\n this.store.token = data.access_token.token\n this.tokenFetchPromise = null\n\n }).catch(err => {\n\n // Failed to fetch the token! Keep throwing the error up the chain\n console.warn('Failed to fetch a fresh access token from the backend.', err)\n this.tokenFetchPromise = null\n if (err.code == '2049' || err.message.includes('Bad token')) {\n this.Blockv.UserManager.logout(true)\n }\n throw err\n\n })\n\n // Return promise\n return this.tokenFetchPromise\n\n }\n\n /**\n * Checks if the current access token is still valid and has not expired yet. If it is, it will fetch a new one.\n * @private\n * @returns {Promise} Resolves when the access token is valid.\n */\n async checkToken () {\n // define our vars\n let decodedToken\n let nowDate\n let expirationTime\n\n // Catch errors with decoding the current access token\n try {\n decodedToken = jwtDecode(this.store.token)\n expirationTime = (decodedToken.exp * 1000)\n nowDate = Date.now()\n\n // quick calc to determine if the token has expired\n if ((nowDate + 5000) > expirationTime) throw new Error('Token expired.')\n } catch (e) {\n // There was an error with the access token. Fetch a new one.\n return this.refreshToken()\n }\n\n // Done\n return true\n }\n}\n","\"use strict\";\n\nvar assert = require('@brillout/assert');\n\nvar fetch;\n\nif( isBrowser() ) {\n assert.usage(\n window.fetch!==undefined,\n [\n \"This browser doesn't support `fetch` (`window.fetch===undefined`).\",\n \"Is this running in Internet Explorer?\",\n \"Note that the `@brillout/fetch` library doesn't support IE. If you want to support IE then use another fetch library.\"\n ].join('\\n')\n );\n fetch = window.fetch.bind(window);\n} else {\n // We use `eval('require')` instead of `require` to\n // make sure that webpack doesn't bundle `node-fetch`.\n fetch = eval('require')('node-fetch');\n}\n\nmodule.exports = fetch;\n\nfunction isBrowser() {\n return typeof window !== \"undefined\";\n}\n","//\r\n// BlockV AG. Copyright (c) 2018, all rights reserved.\r\n//\r\n// Licensed under the BlockV SDK License (the \"License\"); you may not use this file or\r\n// the BlockV SDK except in compliance with the License accompanying it. Unless\r\n// required by applicable law or agreed to in writing, the BlockV SDK distributed under\r\n// the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF\r\n// ANY KIND, either express or implied. See the License for the specific language\r\n// governing permissions and limitations under the License.\r\n//\r\n\r\nimport EventEmitter from '../../internal/EventEmitter'\r\n\r\nexport default class WebSockets extends EventEmitter {\r\n constructor (store, client, address) {\r\n super()\r\n this.store = store\r\n this.client = client\r\n this.address = address\r\n\r\n /** The WebSocket connection */\r\n this.socket = null\r\n\r\n /** Time until the next retry */\r\n this.delayTime = 1000\r\n\r\n /** If true, the websocket will continue to retry the connection if it fails */\r\n this.shouldRetry = false\r\n }\r\n\r\n /** This will be true if the connection is ready to send and receive messages */\r\n get isOpen () {\r\n return this.socket && this.socket.readyState === 1\r\n }\r\n\r\n /**\r\n * The connect function establishes a connection to the WebSocket.\r\n * @public\r\n * @return {Promise<WebSockets>}\r\n */\r\n async connect () {\r\n // Stay connected after this point\r\n this.shouldRetry = true\r\n\r\n // if the websocket is connected or connecting already, then stop\r\n if (this.socket) {\r\n return this\r\n }\r\n\r\n // before we connect, make sure the token is valid, or else retry again soon\r\n try {\r\n await this.client.checkToken()\r\n } catch (err) {\r\n console.warn('WebSocket unable to get client token! Will retry soon...')\r\n this.retryConnection()\r\n return this\r\n }\r\n\r\n // if the websocket is connected or connecting already, then stop\r\n if (this.socket) {\r\n return this\r\n }\r\n\r\n // Create the websocket\r\n const url = `${this.address}/ws?app_id=${encodeURIComponent(this.store.appID)}&token=${encodeURIComponent(this.store.token)}`\r\n this.socket = new WebSocket(url)\r\n this.socket.addEventListener('open', this.handleConnected.bind(this))\r\n this.socket.addEventListener('message', this.handleMessage.bind(this))\r\n this.socket.addEventListener('error', this.handleError.bind(this))\r\n this.socket.addEventListener('close', this.handleClose.bind(this))\r\n\r\n // Done\r\n return this\r\n }\r\n\r\n /**\r\n * This sends a message through the web socket\r\n * @param {*} cmd\r\n */\r\n sendMessage (cmd) {\r\n if (this.socket && this.socket.readyState === 1) {\r\n this.socket.send(JSON.stringify(cmd))\r\n } else {\r\n console.warn('WebSocket: Attempted to send message up, but the socket is not ready.')\r\n }\r\n }\r\n\r\n /**\r\n * The handleMessage function allows the different types of messages to be returned:\r\n * stateUpdate, inventory, activity, and, info.\r\n * @private\r\n * @param {JSON<Object>} e A JSON Object that is passed into the function from connect()\r\n * @return {JSON<Object>} A JSON Object is returned containing the list of chosen message types\r\n */\r\n handleMessage (e) {\r\n const ed = JSON.parse(e.data)\r\n this.trigger('websocket.raw', ed)\r\n\r\n // if the message is a RPC message\r\n if (ed.msg_type === 'rpc') {\r\n this.trigger('websocket.rpc', ed)\r\n }\r\n // if the user only wants state updates\r\n if (ed.msg_type === 'state_update') {\r\n this.trigger('stateUpdate', ed)\r\n }\r\n\r\n // if the user only wants inventory updates\r\n if (ed.msg_type === 'inventory') {\r\n this.trigger('inventory', ed)\r\n }\r\n\r\n // if the user only wants activity updates\r\n if (ed.msg_type === 'my_events') {\r\n this.trigger('activity', ed)\r\n }\r\n\r\n // if the user only wants info updates\r\n if (ed.msg_type === 'info') {\r\n this.trigger('info', ed)\r\n }\r\n\r\n if (ed) {\r\n this.trigger('all', ed)\r\n }\r\n }\r\n\r\n /**\r\n * Lets the User know that the connection is connected\r\n * @private\r\n * @param {Event<SocketStatus>} e no need for inputting the parameter\r\n * @return {Function<connected>} triggers the connected function\r\n */\r\n handleConnected (e) {\r\n this.delayTime = 1000\r\n this.trigger('connected', e)\r\n }\r\n\r\n /**\r\n * When the connection drops or the Websocket is closed.\r\n * This function will auto-retry connection until successfully connected\r\n * @private\r\n * @return {Promise<WebSockets>} returns the connection function\r\n */\r\n retryConnection () {\r\n // Clear previous retry timer\r\n if (this.retryTimer) {\r\n clearTimeout(this.retryTimer)\r\n }\r\n\r\n // Create a new retry timer\r\n this.retryTimer = setTimeout(() => {\r\n // Clear timer\r\n this.retryTimer = null\r\n\r\n // Check if we want to be connected\r\n if (!this.shouldRetry) {\r\n return\r\n }\r\n\r\n // Increase retry delay for next time\r\n if (this.delayTime < 8000) {\r\n this.delayTime *= 2\r\n }\r\n\r\n // connect again\r\n this.connect()\r\n }, this.delayTime)\r\n }\r\n\r\n /**\r\n * Handles the Web socket error event. We don't need to retry, because handleClose is also called on errors.\r\n * @private\r\n * @param {Error} err The error that happened\r\n */\r\n handleError (err) {\r\n this.socket = null\r\n console.warn('[WebSocket] Connection failed: ' + err.message)\r\n }\r\n\r\n /**\r\n * Handles the Web socket close event\r\n * @private\r\n * @param {Event} e no need for inputting, It is a Websocket Event\r\n */\r\n handleClose () {\r\n this.socket = null\r\n this.retryConnection()\r\n }\r\n\r\n /**\r\n * @public\r\n * Forcefully closes the Web socket.\r\n Note: Socket will be set to null. Auto connect will be disabled.\r\n */\r\n close () {\r\n // Prevent retrying\r\n this.shouldRetry = false\r\n\r\n // Cancel retry timer if there is one\r\n if (this.retryTimer) {\r\n clearTimeout(this.retryTimer)\r\n this.retryTimer = null\r\n }\r\n\r\n // Close socket if it's open\r\n if (this.socket) {\r\n this.socket.close()\r\n this.socket = null\r\n }\r\n }\r\n}\r\n","//\n// BlockV AG. Copyright (c) 2018, all rights reserved.\n//\n// Licensed under the BlockV SDK License (the \"License\"); you may not use this file or\n// the BlockV SDK except in compliance with the License accompanying it. Unless\n// required by applicable law or agreed to in writing, the BlockV SDK distributed under\n// the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF\n// ANY KIND, either express or implied. See the License for the specific language\n// governing permissions and limitations under the License.\n//\n/* eslint-disable no-underscore-dangle */\n/* eslint-disable prefer-const */\n/* eslint-disable no-console */\nimport FaceSelection from './FaceSelection'\nimport ProgressImage from './faces/ProgressImage'\nimport ImageFace from './faces/ImageFace'\nimport ImagePolicy from './faces/ImagePolicy'\nimport LayeredImage from './faces/LayeredImage'\nimport BaseWebFace from './faces/WebFace/BaseWebFace'\n\n// list registered faces\nlet registeredFace = {\n 'native://image': ImageFace,\n 'native://progress-image-overlay': ProgressImage,\n 'native://image-policy': ImagePolicy,\n 'native://layered-image': LayeredImage\n}\n\nexport default class VatomView {\n constructor (bv, vAtom, FSP, config) {\n this.blockv = bv\n this.vatomObj = vAtom\n this.fsp = FSP || FaceSelection.Icon\n this.config = config || {}\n // eslint-disable-next-line\n this._currentFace = null\n this.onVatomUpdated = this.onVatomUpdated.bind(this)\n this.region = this.blockv.dataPool.region('inventory')\n this.region.addEventListener('object.updated', this.onVatomUpdated)\n // create a default view with a div container\n // eslint-disable-next-line\n this.element = document.createElement('div')\n this.element.style.position = 'relative'\n this.element.style.width = this.config.width || '64px'\n this.element.style.height = this.config.height || '64px'\n\n // create loader\n this.createLoader = this.config.loader || function () {\n let css = '.spinner {margin: 0px auto;width: 70px;text-align: center; margin-top: -50%;}'\n css += '.spinner > div {width: 12px;height: 12px;margin: 0px 3px;border-radius: 100%;display: inline-block;-webkit-animation: sk-bouncedelay 1.4s infinite ease-in-out both;animation: sk-bouncedelay 1.4s infinite ease-in-out both;}'\n css += '.spinner .bounce1 {-webkit-animation-delay: -0.32s;animation-delay: -0.32s;}'\n css += '.spinner .bounce2 {-webkit-animation-delay: -0.16s;animation-delay: -0.16s;}'\n css += '@-webkit-keyframes sk-bouncedelay {0%, 80%, 100% { -webkit-transform: scale(0) }40% { -webkit-transform: scale(1.0) }}'\n css += '@keyframes sk-bouncedelay {0%, 80%, 100% {-webkit-transform: scale(0);transform: scale(0);} 40% {-webkit-transform: scale(1.0);transform: scale(1.0);}}'\n\n let head = document.head || document.getElementsByTagName('head')[0]\n let style = document.createElement('style')\n head.appendChild(style)\n\n style.type = 'text/css'\n if (style.styleSheet) {\n // This is required for IE8 and below.\n style.styleSheet.cssText = css\n } else {\n style.appendChild(document.createTextNode(css))\n }\n\n let loader = document.createElement('div')\n\n loader.innerHTML = '<div class=\"spinner\"><div class=\"bounce1\" style=\"background-color: #333;\"></div><div class=\"bounce2\" style=\"background-color: #333;\"></div><div class=\"bounce3\" style=\"background-color: #333;\"></div></div>'\n return loader\n }\n\n this.createErrorView = this.config.errorView || function (bvi, v, err) {\n let con = document.createElement('div')\n const rs = v.properties.resources.find(r => r.name === 'ActivatedImage')\n const du = rs && bvi.UserManager.encodeAssetProvider(rs.value.value)\n con.style.backgroundSize = 'contain'\n con.style.backgroundPosition = 'center'\n con.style.backgroundRepeat = 'no-repeat'\n con.style.backgroundImage = `url('${du}')`\n con.style.width = '100%'\n con.style.height = '100%'\n\n let errorView = document.createElement('div')\n errorView.style.cssText = 'position: absolute; top: 0px; right: 0px; padding-right: 5px; padding-top: 5px;'\n errorView.innerHTML = '<img width=\"20\" height=\"20\" src=\"data:image/svg+xml;utf8;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iaXNvLTg4NTktMSI/Pgo8IS0tIEdlbmVyYXRvcjogQWRvYmUgSWxsdXN0cmF0b3IgMTkuMC4wLCBTVkcgRXhwb3J0IFBsdWctSW4gLiBTVkcgVmVyc2lvbjogNi4wMCBCdWlsZCAwKSAgLS0+CjxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgdmVyc2lvbj0iMS4xIiBpZD0iQ2FwYV8xIiB4PSIwcHgiIHk9IjBweCIgdmlld0JveD0iMCAwIDQ5Ny40NzIgNDk3LjQ3MiIgc3R5bGU9ImVuYWJsZS1iYWNrZ3JvdW5kOm5ldyAwIDAgNDk3LjQ3MiA0OTcuNDcyOyIgeG1sOnNwYWNlPSJwcmVzZXJ2ZSIgd2lkdGg9IjUxMnB4IiBoZWlnaHQ9IjUxMnB4Ij4KPGcgdHJhbnNmb3JtPSJtYXRyaXgoMS4yNSAwIDAgLTEuMjUgMCA0NSkiPgoJPGc+CgkJPGc+CgkJCTxwYXRoIHN0eWxlPSJmaWxsOiNGRkNDNEQ7IiBkPSJNMjQuMzc0LTM1Ny44NTdjLTIwLjk1OCwwLTMwLjE5NywxNS4yMjMtMjAuNTQ4LDMzLjgyNkwxODEuNDIxLDE3LjkyOCAgICAgYzkuNjQ4LDE4LjYwMywyNS40NjMsMTguNjAzLDM1LjEyMywwTDM5NC4xNC0zMjQuMDMxYzkuNjcxLTE4LjYwMywwLjQyMS0zMy44MjYtMjAuNTQ4LTMzLjgyNkgyNC4zNzR6Ii8+CgkJCTxwYXRoIHN0eWxlPSJmaWxsOiMyMzFGMjA7IiBkPSJNMTczLjYwNS04MC45MjJjMCwxNC44MTQsMTAuOTM0LDIzLjk4NCwyNS4zOTUsMjMuOTg0YzE0LjEyLDAsMjUuNDA3LTkuNTEyLDI1LjQwNy0yMy45ODQgICAgIFYtMjE2Ljc1YzAtMTQuNDYxLTExLjI4Ny0yMy45ODQtMjUuNDA3LTIzLjk4NGMtMTQuNDYxLDAtMjUuMzk1LDkuMTgyLTI1LjM5NSwyMy45ODRWLTgwLjkyMnogTTE3MS40ODktMjg5LjA1NiAgICAgYzAsMTUuMTY3LDEyLjM0NSwyNy41MTEsMjcuNTExLDI3LjUxMWMxNS4xNjcsMCwyNy41MjMtMTIuMzQ1LDI3LjUyMy0yNy41MTFjMC0xNS4xNzgtMTIuMzU2LTI3LjUyMy0yNy41MjMtMjcuNTIzICAgICBDMTgzLjgzNC0zMTYuNTc5LDE3MS40ODktMzA0LjIzNCwxNzEuNDg5LTI4OS4wNTYiLz4KCQk8L2c+Cgk8L2c+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPGc+CjwvZz4KPC9zdmc+Cg==\" />'\n errorView.addEventListener('click', e => alert(err.message), false)\n\n con.appendChild(errorView)\n return con\n }\n\n this.update()\n }\n\n update () {\n\n // Check if ready to be displayed\n if (!this.vatomObj)\n return console.warn('No vAtom supplied')\n\n // Notify current face it's being unloaded\n if (this._currentFace && this._currentFace.onUnload) this._currentFace.onUnload()\n this._currentFace = null\n\n // Remove all views from our element\n const view = this.element\n while (view.firstChild) {\n view.removeChild(view.firstChild)\n }\n\n // Load again\n this.load()\n\n }\n\n load () {\n // reset errorview and loader\n if (this.loader && this.loader.parentNode) {\n this.loader.parentNode.removeChild(this.loader)\n }\n if (this.errorView && this.errorView.parentNode) {\n this.errorView.parentNode.removeChild(this.errorView)\n }\n this.loader = null\n this.errorView = null\n\n let rFace = null\n Promise.resolve(() => null).then(() => {\n // start the face selection procedure\n const st = this.fsp(this.vatomObj)\n if (!st)\n throw new Error('No face found for this view mode.')\n let FaceClass = null\n // check if face is registered\n const du = st.properties.display_url.toLowerCase()\n let excludedFaces = this.config.excludedFaces\n\n if (excludedFaces.includes(du)) {\n throw new Error('This face is not allowed to run in this view mode. [excluded : ' + du + ']')\n } else {\n FaceClass = registeredFace[du]\n }\n // if there is no face registered in the array but we have a http link, show the web face\n if (FaceClass === undefined && du.indexOf('http') !== -1) {\n FaceClass = BaseWebFace\n } else if (FaceClass === undefined) {\n throw new Error('No Face Registered')\n }\n // create a new instance of the chosen face class and pass through the information\n rFace = new FaceClass(this, this.vatomObj, st)\n this._currentFace = rFace\n // make rface opaque\n rFace.element.style.opacity = 0\n\n // add face to element\n this.element.appendChild(rFace.element)\n\n // add the loader\n this.element.appendChild(this.loader = this.createLoader())\n\n // check for error\n\n // call rface.onload , wait for promise\n return rFace.onLoad()\n }).then(() => {\n if (this.loader) {\n this.element.removeChild(this.loader)\n rFace.element.style.opacity = 1\n }\n }).catch((err) => {\n console.warn('Error from catch', err)\n // remove current face\n this.element.appendChild(this.errorView = this.createErrorView(this.blockv, this.vatom, err))\n if (rFace && rFace.element && rFace.element.parentNode) {\n this.element.removeChild(rFace.element)\n }\n if (this.loader && this.loader.parentNode) {\n this.element.removeChild(this.loader)\n }\n })\n }\n\n set vatom (vAtom) {\n if (vAtom && vAtom.id === this.vatomObj.id) {\n this.vatomObj.payload = vAtom.payload\n if (this._currentFace) {\n this._currentFace.onVatomUpdated()\n }\n } else if (vAtom) {\n this.vatomObj = vAtom\n this.update()\n }\n }\n\n get vatom () {\n return this.vatomObj\n }\n\n free () {\n\n // Remove event listener\n this.region.removeEventListener('object.updated', this.onVatomUpdated)\n\n // Notify current face it's being unloaded\n if (this._currentFace && this._currentFace.onUnload) this._currentFace.onUnload()\n this._currentFace = null\n\n // Remove all views from our element\n const view = this.element\n while (view.firstChild) {\n view.removeChild(view.firstChild)\n }\n\n }\n\n onVatomUpdated (id) {\n // Stop if not our vatom\n if (id !== this.vatomObj.id) {\n return\n }\n\n // Fetch latest vatom from data pool\n var vatom = this.region.getItem(id, false)\n if (!vatom)\n return console.warn('DataPool indicated that an updated vatom was available, but we were unable to fetch it.')\n\n // Store new vatom and notify face\n this.vatom = vatom\n }\n\n // register our own face\n static registerFace (faceClass) {\n registeredFace[faceClass.url.toLowerCase()] = faceClass\n }\n\n /** Send a custom request to the face */\n async sendRequest(name, data) {\n\n // Pass on to the face code, if supported\n if (!this._currentFace) throw new Error('No face loaded.')\n if (!this._currentFace.sendRequest) throw new Error('Request not supported for this face.')\n return this._currentFace.sendRequest(name, data)\n\n }\n\n}\n","//\r\n// BlockV AG. Copyright (c) 2018, all rights reserved.\r\n//\r\n// Licensed under the BlockV SDK License (the \"License\"); you may not use this file or\r\n// the BlockV SDK except in compliance with the License accompanying it. Unless\r\n// required by applicable law or agreed to in writing, the BlockV SDK distributed under\r\n// the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF\r\n// ANY KIND, either express or implied. See the License for the specific language\r\n// governing permissions and limitations under the License.\r\n//\r\n\r\nimport BaseFace from './BaseFace'\r\n\r\nexport default class ProgressImage extends BaseFace {\r\n onLoad () {\r\n // Set our element style\r\n this.element.style.overflow = 'hidden'\r\n\r\n // Create base image\r\n this.base = document.createElement('div')\r\n this.base.style.cssText = 'position: absolute; top: 0px; left: 0px; width: 100%; height: 100%; background-position: center; background-size: contain; background-repeat: no-repeat; '\r\n this.element.appendChild(this.base)\r\n\r\n // Create fill container element\r\n this.fillContainer = document.createElement('div')\r\n this.fillContainer.style.cssText = 'position: absolute; top: 0px; left: 0px; width: 100%; height: 100%; overflow: hidden;'\r\n this.element.appendChild(this.fillContainer)\r\n\r\n // Create fill image\r\n this.fill = document.createElement('div')\r\n this.fill.style.cssText = 'position: absolute; top: 0px; left: 0px; width: 100%; height: 100%; background-position: center; background-size: contain; background-repeat: no-repeat;'\r\n this.fillContainer.appendChild(this.fill)\r\n\r\n // Create Image Percent Container\r\n this.percentContainer = document.createElement('div')\r\n this.percentContainer.style.cssText = 'position:absolute; top: 0px; right: 0px; width:auto; height:auto; padding:5px; font-size:9px; color: rgba(0,0,0,0.5)';\r\n this.element.appendChild(this.percentContainer)\r\n\r\n // Reload images\r\n return this.refresh()\r\n }\r\n\r\n onVatomUpdated () {\r\n return this.refresh()\r\n }\r\n\r\n static calculateAspectRatioFit (srcWidth, srcHeight, maxWidth, maxHeight) {\r\n let ratio = Math.min(maxWidth / srcWidth, maxHeight / srcHeight)\r\n return { width: srcWidth * ratio, height: srcHeight * ratio }\r\n }\r\n\r\n /** Refresh the face position and images. @returns Promise */\r\n refresh () {\r\n // Apply base image\r\n const baseImg = (this.face.properties.config && this.face.properties.config.empty_image && this.vatom.properties.resources.find(r => r.name === this.face.properties.config.empty_image)) || this.vatom.properties.resources.find(r => r.name === 'BaseImage')\r\n if (!baseImg) return Promise.reject(new Error('No BaseImage found.'))\r\n this.base.style.backgroundImage = `url(${this.vatomView.blockv.UserManager.encodeAssetProvider(baseImg.value.value)})`\r\n\r\n // Apply fill image\r\n const activatedImg = (this.face.properties.config && this.face.properties.config.full_image && this.vatom.properties.resources.find(r => r.name === this.face.properties.config.full_image)) || this.vatom.properties.resources.find(r => r.name === 'ActivatedImage')\r\n if (!activatedImg) return Promise.reject(new Error('No ActivatedImage found.'))\r\n this.fill.style.backgroundImage = `url(${this.vatomView.blockv.UserManager.encodeAssetProvider(activatedImg.value.value)})`\r\n\r\n // Load images\r\n return Promise.all([\r\n ProgressImage.waitForImage(this.vatomView.blockv.UserManager.encodeAssetProvider(baseImg.value.value)),\r\n ProgressImage.waitForImage(this.vatomView.blockv.UserManager.encodeAssetProvider(activatedImg.value.value))\r\n ]).then((imgs) => {\r\n // Get info\r\n const score = Math.min(1, Math.max(0, parseFloat(this.vatom.properties.cloning_score) || 0)) * 100\r\n let paddingStart = parseFloat((this.face.properties.config && this.face.properties.config.padding_start) || this.vatom.private.padding_start) || 0\r\n let paddingEnd = parseFloat((this.face.properties.config && this.face.properties.config.padding_end) || this.vatom.private.padding_end) || 0\r\n const direction = ((this.face.properties.config && this.face.properties.config.direction) || this.vatom.private.direction || '').toLowerCase()\r\n\r\n // Adjust padding to be percents instead of pixels of base image\r\n if (direction === 'up' || direction === 'down') {\r\n paddingStart = paddingStart / imgs[0].height * 100\r\n paddingEnd = paddingEnd / imgs[0].height * 100\r\n } else {\r\n paddingStart = paddingStart / imgs[0].width * 100\r\n paddingEnd = paddingEnd / imgs[0].width * 100\r\n }\r\n\r\n // Apply padding\r\n const range = 100 - paddingStart - paddingEnd\r\n const paddedScore = Math.floor(score / 100 * range + paddingStart)\r\n\r\n // Apply styles to make it fill up\r\n const invertedScore = 100 - paddedScore\r\n if (direction === 'up') {\r\n // Filling from the bottom up\r\n this.fillContainer.style.top = `${invertedScore}%`\r\n this.fill.style.top = `${(-1 * invertedScore)}%`\r\n } else if (direction === 'down') {\r\n // Filling from the top down\r\n this.fillContainer.style.top = `${(-1 * invertedScore)}%`\r\n this.fill.style.top = `${invertedScore}%`\r\n } else if (direction === 'left') {\r\n // Filling from the left to the right\r\n this.fillContainer.style.left = `${(-1 * invertedScore)}%`\r\n this.fill.style.left = `${invertedScore}%`\r\n } else {\r\n // Filling from the right to the left\r\n this.fillContainer.style.left = `${invertedScore}%`\r\n this.fill.style.left = `${(-1 * invertedScore)}%`\r\n }\r\n })\r\n }\r\n\r\n /** This returns a promise which resolves when the specified\r\n * image URL has been downloaded by the browser. */\r\n static waitForImage (url) {\r\n return new Promise((resolve, reject) => {\r\n // Create new image tag to do the loading. Browsers cache requests together, so by\r\n // creating a new image tag and loading the same image in it, we can track the load\r\n // event of the background-image in the div above.\r\n const img = document.createElement('img')\r\n img.src = url\r\n\r\n // Add event handlers\r\n img.onerror = reject\r\n img.onload = () => resolve(img)\r\n })\r\n }\r\n}\r\n","//\r\n// BlockV AG. Copyright (c) 2018, all rights reserved.\r\n//\r\n// Licensed under the BlockV SDK License (the \"License\"); you may not use this file or\r\n// the BlockV SDK except in compliance with the License accompanying it. Unless\r\n// required by applicable law or agreed to in writing, the BlockV SDK distributed under\r\n// the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF\r\n// ANY KIND, either express or implied. See the License for the specific language\r\n// governing permissions and limitations under the License.\r\n//\r\nimport BaseFace from './BaseFace'\r\n\r\nexport default class ImageFace extends BaseFace {\r\n onLoad () {\r\n // eslint-disable-next-line\r\n return this.updateImage();\r\n }\r\n\r\n updateImage () {\r\n // Set image display options\r\n this.element.style.backgroundSize = this.face.properties.constraints.view_mode === 'card' ? 'cover' : 'contain'\r\n this.element.style.backgroundPosition = 'center'\r\n this.element.style.backgroundRepeat = 'no-repeat'\r\n\r\n\r\n // If face config specifies the scale mode, set it now\r\n if (this.face.properties.config && this.face.properties.config.scale === 'fill') {\r\n this.element.style.backgroundSize = 'cover'\r\n } else if (this.face.properties.config && this.face.properties.config.scale === 'fit') {\r\n this.element.style.backgroundSize = 'contain'\r\n }\r\n\r\n // Get resource name\r\n const resourceName = (this.face.properties.config && this.face.properties.config.image) || (this.face.properties.resources && this.face.properties.resources[0]) || 'ActivatedImage'\r\n\r\n // Get resource\r\n const resource = this.vatom.properties.resources.find(r => r.name === resourceName)\r\n // TODO: Show warning if no resource found\r\n if (!resource) {\r\n return Promise.reject(new Error('No image found to display.'))\r\n }\r\n // Display URL\r\n const iurl = this.vatomView.blockv.UserManager.encodeAssetProvider(resource.value.value)\r\n this.element.style.backgroundImage = `url('${iurl}')`\r\n\r\n // Return promise\r\n return this.showImage(iurl)\r\n }\r\n // eslint-disable-next-line\r\n showImage(url) {\r\n return new Promise((resolve, reject) => {\r\n const img = document.createElement('img')\r\n img.src = url\r\n img.onload = resolve\r\n img.onerror = e => reject(new Error(\"Couldn't load image\"))\r\n })\r\n }\r\n\r\n static get url () {\r\n return 'native://image'\r\n }\r\n}\r\n","//\n// BlockV AG. Copyright (c) 2018, all rights reserved.\n//\n// Licensed under the BlockV SDK License (the \"License\"); you may not use this file or\n// the BlockV SDK except in compliance with the License accompanying it. Unless\n// required by applicable law or agreed to in writing, the BlockV SDK distributed under\n// the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF\n// ANY KIND, either express or implied. See the License for the specific language\n// governing permissions and limitations under the License.\n//\n\nimport BaseFace from './BaseFace'\n\n/** This face displays an image depending on the policy defined in the vatom's properties. */\nexport default class ImagePolicy extends BaseFace {\n/** @override On load, refresh image */\n onLoad () {\n return this.refreshImage()\n }\n\n /** @override On vatom properties changed, refresh image */\n onVatomUpdated () {\n this.refreshImage()\n }\n\n /** Refresh the image displayed */\n refreshImage () {\n\n // Set image display options\n this.element.style.backgroundSize = (this.face.properties.config && this.face.properties.config.image_mode) || this.vatomView.vatom.properties['image_mode'] || 'contain'\n this.element.style.backgroundPosition = 'center'\n this.element.style.backgroundRepeat = 'no-repeat'\n\n // Fetch URI\n let uri = ImagePolicy.imageURL(this.vatomView.blockv, this.vatom, this.face)\n if (!uri) {\n throw new Error('No policy found, and no ActivatedImage resource available.')\n }\n\n uri = this.vatomView.blockv.UserManager.encodeAssetProvider(uri)\n\n // Display URL\n this.element.style.backgroundImage = `url(${uri})`\n this.element.style.backgroundSize = 'contain'\n\n // Return promise\n return ImagePolicy.waitForImage(uri)\n \n }\n\n /** Returns the URL to the image to use for this vatom in it's current state.*/\n static imageURL(blockv, vatom, face) {\n\n // Fetch vatom children\n var children = blockv.dataPool.region('inventory').get(false).filter(v => v.properties.parent_id == vatom.id)\n \n // Fetch policy\n let policies = (face.properties.config && face.properties.config.image_policy) || vatom.private['image_policy'] || vatom.properties['icon_stages'] || []\n \n // Find matching policy\n for (let policy of policies) {\n\n // Check policy type\n if (typeof policy.count_max !== 'undefined') {\n\n // Child count policy, check if count matches\n if (children.length > policy.count_max) {\n continue\n }\n\n } else if (policy.field) {\n\n // Field value policy, get key path\n let keyPath = policy.field.split(/\\.(?=(?:[^\\\"]*\\\"[^\\\"]*\\\")*[^\\\"]*$)/).map(k => k.replace(/\"/g, ''))\n\n // Follow key path and get the value\n let keyValue = vatom.payload\n while (keyPath.length > 0) {\n keyValue = keyValue[keyPath[0]]\n keyPath.splice(0, 1)\n if (!keyValue) {\n break\n }\n }\n\n // Check if value matches\n if (policy.value !== keyValue) {\n continue\n }\n\n }\n\n // Found a match, get resource\n var res = vatom.properties.resources.find(r => r.name === policy.resource)\n if (res)\n return res.value.value\n\n }\n\n // None found! Use the ActivatedImage\n // Found a match, get resource\n console.warn('Image policy face: No policy matched, resorting to the ActivatedImage.')\n var resource = vatom.properties.resources.find(r => r.name === 'ActivatedImage')\n return resource && resource.value.value\n\n }\n\n /** This returns a promise which resolves when the specified image URL has been downloaded by the browser. */\n static waitForImage (url) {\n return new Promise((resolve, reject) => {\n // Create new image tag to do the loading. Browsers cache requests together, so by\n // creating a new image tag and loading the same image in it, we can track the load\n // event of the background-image in the div above.\n var img = document.createElement('img')\n img.src = url\n\n // Add event handlers\n img.onerror = reject\n img.onload = resolve\n })\n }\n}\n","//\r\n// BlockV AG. Copyright (c) 2018, all rights reserved.\r\n//\r\n// Licensed under the BlockV SDK License (the \"License\"); you may not use this file or\r\n// the BlockV SDK except in compliance with the License accompanying it. Unless\r\n// required by applicable law or agreed to in writing, the BlockV SDK distributed under\r\n// the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF\r\n// ANY KIND, either express or implied. See the License for the specific language\r\n// governing permissions and limitations under the License.\r\n//\r\nimport BaseFace from './BaseFace'\r\n\r\nexport default class LayeredImage extends BaseFace {\r\n /** @private @override Called on startup */\r\n onLoad () {\r\n // Reload images\r\n return this.reloadImages()\r\n }\r\n\r\n encodeUrl (vatom, name) {\r\n let res = vatom.properties.resources.find(r => r.name === name)\r\n if (!res) {\r\n return null\r\n }\r\n // url is not null\r\n return this.vatomView.blockv.UserManager.encodeAssetProvider(res.value.value)\r\n }\r\n\r\n /** @override On vatom properties changed, refresh images */\r\n onVatomUpdated () {\r\n return this.reloadImages()\r\n }\r\n\r\n /** @private Gets the image resource to use for the specified vAtom */\r\n getLayerImage (vatom) {\r\n // Find vatom's layered image face\r\n // Check for the image config field\r\n return this.encodeUrl(vatom, this.face.properties.config && this.face.properties.config.layerImage) || this.encodeUrl(vatom, 'LayeredImage') || this.encodeUrl(vatom, 'ActivatedImage')\r\n }\r\n\r\n /** @private Recreates the layered images */\r\n reloadImages () {\r\n // Get resource\r\n var resource = this.getLayerImage(this.vatom)\r\n\r\n // Create base image\r\n var img = this.createImageNode(resource)\r\n var newImages = [img]\r\n\r\n // Load image promises\r\n var imagePromises = [LayeredImage.waitForImage(resource)]\r\n\r\n // Fetch vatom children\r\n var children = this.vatomView.blockv.dataPool.region('inventory').get(false).filter(v => v.properties.parent_id == this.vatom.id)\r\n\r\n // Go through each child vatom\r\n for (let child of children) {\r\n // Get activated image resource\r\n let res = this.getLayerImage(child)\r\n if (!res) {\r\n continue\r\n }\r\n // Create new image layer\r\n newImages.push(this.createImageNode(res))\r\n\r\n // Add to image loader array\r\n imagePromises.push(LayeredImage.waitForImage(res))\r\n }\r\n\r\n // All done, remove old images\r\n for (let img of this.images || []) {\r\n img.parentNode.removeChild(img)\r\n }\r\n // Add new images\r\n this.images = newImages\r\n for (let imgs of newImages) {\r\n this.element.appendChild(imgs)\r\n }\r\n \r\n // Wait for all images to load\r\n return Promise.all(imagePromises)\r\n }\r\n\r\n /** Creates the dom node to display an image */\r\n createImageNode (url) {\r\n // Create it\r\n let div = document.createElement('div')\r\n div.style.cssText = 'position: absolute; top: 0px; left: 0px; width: 100%; height: 100%; background-position: center; background-size: contain; background-repeat: no-repeat; '\r\n div.style.backgroundImage = `url(${url})`\r\n return div\r\n }\r\n\r\n /** This returns a promise which resolves when the specified image URL has been downloaded by the browser. */\r\n static waitForImage (url) {\r\n return new Promise((resolve, reject) => {\r\n // Create new image tag to do the loading. Browsers cache requests together, so by\r\n // creating a new image tag and loading the same image in it, we can track the load\r\n // event of the background-image in the div above.\r\n let img = document.createElement('img')\r\n img.src = url\r\n\r\n // Add event handlers\r\n img.onerror = reject\r\n img.onload = resolve\r\n })\r\n }\r\n}\r\n","//\r\n// BlockV AG. Copyright (c) 2018, all rights reserved.\r\n//\r\n// Licensed under the BlockV SDK License (the \"License\"); you may not use this file or\r\n// the BlockV SDK except in compliance with the License accompanying it. Unless\r\n// required by applicable law or agreed to in writing, the BlockV SDK distributed under\r\n// the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF\r\n// ANY KIND, either express or implied. See the License for the specific language\r\n// governing permissions and limitations under the License.\r\n//\r\nimport BaseFace from '../BaseFace'\r\nimport BridgeV1 from './BridgeV1'\r\nimport BridgeV2 from './BridgeV2'\r\n\r\nexport default class BaseWebFace extends BaseFace {\r\n /** @private Called on startup */\r\n onLoad () {\r\n\r\n // Pending requests\r\n this.pendingRequests = {}\r\n\r\n // Create iframe\r\n this.iframe = document.createElement('iframe')\r\n this.iframe.style.cssText = 'display: block; position: absolute; top: 0px; left: 0px; width: 100%; height: 100%; overflow: hidden; border: none; background: none; outline: none; z-index:0;'\r\n this.iframe.setAttribute('src', this.face.properties.display_url)\r\n this.element.appendChild(this.iframe)\r\n this.owner = this.vatomView.vatom.properties.owner\r\n this.user = this.vatomView.blockv.UserManager.getPublicUserProfile(this.owner)\r\n this.version = null\r\n this.BridgeV1 = new BridgeV1(this.vatomView.blockv, this.vatom, this.face)\r\n this.BridgeV2 = new BridgeV2(this.vatomView.blockv, this.vatom, this.face)\r\n this.observeListenerSet = false\r\n this.listChildren = []\r\n\r\n // Bind functions\r\n this.onIncomingBridgeMessage = this.onIncomingBridgeMessage.bind(this)\r\n\r\n // Add bridge message listener\r\n window.addEventListener('message', this.onIncomingBridgeMessage)\r\n\r\n // Done\r\n return Promise.resolve()\r\n }\r\n\r\n /** @private Called when the view is unloaded */\r\n onUnload () {\r\n // Remove iframe\r\n this.element.removeChild(this.iframe)\r\n this.iframe.onload = null\r\n this.iframe = null\r\n\r\n // Remove bridge message listener\r\n window.removeEventListener('message', this.onIncomingBridgeMessage)\r\n if (this.observeListenerSet) {\r\n this.vatomView.blockv.dataPool.region('inventory').removeEventListener('object.updated', this.observeChildren)\r\n }\r\n }\r\n\r\n processIncomingBridgeMessage (name, payload) {\r\n switch (name) {\r\n case 'vatom.init':\r\n this.version = 1\r\n return this.BridgeV1.init(payload)\r\n case 'vatom.children.get':\r\n return this.BridgeV1.getChildren(payload)\r\n case 'vatom.rpc.call':\r\n return this.BridgeV1.rpc()\r\n case 'vatom.performAction':\r\n return this.BridgeV1.performAction(payload)\r\n case 'user.profile.fetch':\r\n return this.BridgeV1.getUser()\r\n case 'user.avatar.fetch':\r\n return this.BridgeV1.getUser()\r\n case 'vatom.patch':\r\n return this.BridgeV1.patchVatom(payload)\r\n case 'vatom.get':\r\n return this.BridgeV1.getVatom(payload)\r\n case 'core.init':\r\n this.version = 2\r\n return this.BridgeV2.init(payload)\r\n case 'core.user.get':\r\n return this.BridgeV2.getUserProfile(payload)\r\n case 'core.user.current.get':\r\n return this.BridgeV2.getCurrentUser(payload)\r\n case 'core.vatom.get':\r\n return this.BridgeV2.getVatom()\r\n case 'core.vatom.children.get':\r\n return this.BridgeV2.getVatomChildren(payload)\r\n case 'core.vatom.parent.set':\r\n return this.BridgeV2.vatomParentSet(payload)\r\n case 'core.vatom.children.observe':\r\n if (!this.observeListenerSet) {\r\n this.observeChildren = this.observeChildren.bind(this)\r\n this.vatomView.blockv.dataPool.region('inventory').addEventListener('object.updated', this.observeChildren)\r\n this.observeListenerSet = true\r\n }\r\n return this.observeChildren(payload.id)\r\n case 'core.action.perform':\r\n return this.BridgeV2.performAction(payload)\r\n case 'core.resource.encode':\r\n return this.BridgeV2.encodeResource(payload)\r\n default:\r\n // Unknown event. Pass on to VatomView listener\r\n if (this.vatomView && this.vatomView.onMessage) {\r\n return this.vatomView.onMessage(name, payload)\r\n }\r\n // No listener, this is an error\r\n return Promise.reject(new Error('Bridge message not implemented.'))\r\n }\r\n }\r\n\r\n onIncomingBridgeMessage (event) {\r\n // Get payload\r\n let payload = event.data\r\n // Check source is from this face's iframe\r\n if (!payload || !this.iframe || event.source !== this.iframe.contentWindow) {\r\n return\r\n }\r\n\r\n // V1: Check if there's a response ID, if so the web face is expecting a reply with that ID\r\n let responseID = null\r\n if (payload.responseID) {\r\n responseID = payload.responseID\r\n }\r\n\r\n // V2: Check if this is a response to one of our requests\r\n if (payload.response_id && this.pendingRequests[payload.response_id]) {\r\n\r\n // Complete the promise. Check for error or success\r\n if (payload.error_message) {\r\n\r\n // Failed\r\n let err = new Error(payload.error_message)\r\n err.code = payload.error_code || 'unknown_error'\r\n this.pendingRequests[payload.response_id].reject(err)\r\n delete this.pendingRequests[payload.response_id]\r\n return\r\n\r\n } else {\r\n\r\n // Success\r\n this.pendingRequests[payload.response_id].resolve(payload.payload)\r\n delete this.pendingRequests[payload.response_id]\r\n return\r\n\r\n }\r\n\r\n }\r\n\r\n // Process it, get response\r\n Promise.resolve(this.processIncomingBridgeMessage(payload.name, payload.data || payload.payload)).then(resp => {\r\n // Done, send response back\r\n if (payload.version === '2.0.0') {\r\n this.sendV2Message(payload.request_id, payload.name, resp)\r\n } else {\r\n this.sendv1Message(responseID || resp._responseName, resp)\r\n }\r\n }).catch(err => {\r\n\r\n if (payload.version === '2.0.0') {\r\n this.sendV2Message(payload.request_id, payload.name,{\r\n error_code: err.code || 'unknown_error',\r\n error_message: err.message\r\n }, false)\r\n } else { \r\n // Failed, send error response\r\n this.sendv1Message(responseID, {\r\n errorCode: err.code,\r\n errorText: err.message\r\n })\r\n }\r\n\r\n \r\n\r\n })\r\n }\r\n\r\n sendv1Message (name, data) {\r\n // Check if iframe is setup\r\n if (!this.iframe || !this.iframe.contentWindow) {\r\n return\r\n }\r\n\r\n // Send payload\r\n this.iframe.contentWindow.postMessage({\r\n source: 'VatomicSDK',\r\n name: name,\r\n data: data\r\n }, '*')\r\n }\r\n\r\n sendV2Message (id, name, data, isRequest) {\r\n // Check if iframe is setup\r\n if (!this.iframe || !this.iframe.contentWindow) {\r\n return\r\n }\r\n\r\n // Send payload\r\n this.iframe.contentWindow.postMessage({\r\n [ isRequest ? 'request_id' : 'response_id' ]: id,\r\n source: 'BLOCKv SDK',\r\n name: name,\r\n payload: data,\r\n version: '2.0.0'\r\n }, '*')\r\n }\r\n\r\n /** Called when the viewer wants to send a request to the face. Only supported with the V2 bridge. */\r\n sendRequest(name, data) {\r\n\r\n // Send it\r\n let id = Math.random().toString(36).substr(2)\r\n this.sendV2Message(id, name, data, true)\r\n\r\n // Store response promise\r\n return new Promise((resolve, reject) => {\r\n this.pendingRequests[id] = { resolve, reject }\r\n })\r\n\r\n }\r\n\r\n vatomStateChanged (vatom) {\r\n if (this.version === 1) {\r\n if (vatom.id === this.vatom.id && this.face) {\r\n var resources = {}\r\n for (var resource of this.vatomView.vatom.properties.resources) {\r\n resources[resource.name] = resource.value.value\r\n }\r\n\r\n var data = {\r\n vatomInfo: {\r\n id: this.vatomView.vatom.id,\r\n properties: this.vatomView.vatom.properties,\r\n resources: resources,\r\n faceProperties: this.face.properties\r\n }\r\n }\r\n this.sendv1Message('vatom.updated', data)\r\n }\r\n } else {\r\n if (vatom.id === this.vatom.id && this.face) {\r\n this.sendV2Message('res_1', 'core.vatom.update', { vatom: this.BridgeV2.encodeVatom(vatom) }, true)\r\n }\r\n }\r\n }\r\n\r\n async observeChildren (payload) {\r\n console.log('payload from observe', payload)\r\n \r\n if (this.vatom.id === payload) {\r\n let children = this.vatomView.blockv.dataPool.region('inventory').get(false).filter(v => v.properties.parent_id === payload).map(this.mapVatom)\r\n this.sendV2Message(Math.random(), 'core.vatom.children.update', { id: payload, vatoms: children }, true)\r\n }\r\n \r\n }\r\n\r\n onVatomUpdated () {\r\n this.vatomStateChanged(this.vatom)\r\n }\r\n /**\r\n * pass in vatom model recieve out packaged vatom for bridge\r\n * @param {*} vatom \r\n */\r\n mapVatom (vatom) {\r\n return Object.assign({actions: vatom.actions, faces: vatom.faces}, vatom.payload)\r\n }\r\n}\r\n","//\r\n// BlockV AG. Copyright (c) 2018, all rights reserved.\r\n//\r\n// Licensed under the BlockV SDK License (the \"License\"); you may not use this file or\r\n// the BlockV SDK except in compliance with the License accompanying it. Unless\r\n// required by applicable law or agreed to in writing, the BlockV SDK distributed under\r\n// the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF\r\n// ANY KIND, either express or implied. See the License for the specific language\r\n// governing permissions and limitations under the License.\r\n//\r\nimport _ from 'lodash'\r\nexport default class BridgeV1 {\r\n constructor (bv, vatom, face) {\r\n this.blockv = bv\r\n this.vatom = vatom\r\n this.face = face\r\n this.version = 1\r\n }\r\n\r\n init () {\r\n let data = this.encodeVatom(this.vatom)\r\n data.vatomInfo.faceProperties = this.face.properties || {}\r\n\r\n if (this.blockv.store.userID != null) {\r\n this.blockv.UserManager.getCurrentUser().then(uv => {\r\n data['user'] = this.encodeUser(uv)\r\n })\r\n }\r\n // This response has a special message name\r\n data._responseName = 'vatom.init-complete'\r\n \r\n // Done, return payload\r\n return data\r\n }\r\n\r\n getChildren (payload) {\r\n return this.blockv.Vatoms.getVatomChildren(payload.id).then(children => {\r\n let vatomInfos = []\r\n for (let vatom of children) {\r\n vatomInfos.push(this.encodeVatom(vatom))\r\n }\r\n return {\r\n 'items': vatomInfos,\r\n _responseName: 'vatom.children.get-response'\r\n }\r\n })\r\n }\r\n\r\n rpc (payload) {\r\n // sends on payload to all faces\r\n Events.callEvent('websocket.rpc', payload)\r\n return {}\r\n }\r\n\r\n performAction (payload) {\r\n // Perform vAtom action\r\n return this.blockv.Vatoms.performAction(payload.actionData['this.id'], payload.actionName, payload.actionData)\r\n }\r\n\r\n getProfile (payload) {\r\n // Get user details\r\n return this.vatomView.blockv.UserManager.getCurrentUser().then(user => {\r\n // Got it, send response\r\n return {\r\n firstName: user.firstName,\r\n lastName: user.lastName,\r\n avatarURL: this.blockv.UserManager.encodeAssetProvider(user.avatarURL)\r\n }\r\n })\r\n }\r\n\r\n patchVatom (payload) {\r\n // Perform patch operation\r\n return this.blockv.request('PATCH', '/vatoms', payload, true)\r\n }\r\n\r\n getVatom (payload) {\r\n // Get details from a vatom ID\r\n return this.blockv.Vatoms.getUserVatoms([payload.id]).then(vatom => this.encodeVatom(vatom[0]))\r\n }\r\n\r\n async getUser () {\r\n let us = this.vatom.properties.owner\r\n\r\n return this.blockv.UserManager.getPublicUserProfile(us).then(pu => {\r\n return this.encodeUser(pu)\r\n })\r\n }\r\n\r\n encodeVatom (vatom) {\r\n // Create resource list\r\n var resources = {}\r\n for (let i = 0; i < vatom.properties.resources.length; i++) {\r\n resources[vatom.properties.resources[i].name] = this.blockv.UserManager.encodeAssetProvider(vatom.properties.resources[i].value.value)\r\n }\r\n if (vatom.private && vatom.private.resources) {\r\n for (let p = 0; p < vatom.private.resources.length; p++) {\r\n resources[vatom.private.resources[p].name] = this.blockv.UserManager.encodeAssetProvider(vatom.private.resources[p].value.value)\r\n }\r\n }\r\n // Create payload\r\n return {\r\n 'vatomInfo': {\r\n 'id': vatom.id,\r\n 'properties': _.merge({}, vatom.properties, vatom.private),\r\n 'resources': resources\r\n }\r\n }\r\n }\r\n\r\n encodeUser (user) {\r\n return {\r\n id: user.id,\r\n firstName: user.firstName,\r\n lastName: user.lastName,\r\n avatarURL: this.blockv.UserManager.encodeAssetProvider(user.avatarURI)\r\n }\r\n }\r\n}\r\n","//\r\n// BlockV AG. Copyright (c) 2018, all rights reserved.\r\n//\r\n// Licensed under the BlockV SDK License (the \"License\"); you may not use this file or\r\n// the BlockV SDK except in compliance with the License accompanying it. Unless\r\n// required by applicable law or agreed to in writing, the BlockV SDK distributed under\r\n// the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF\r\n// ANY KIND, either express or implied. See the License for the specific language\r\n// governing permissions and limitations under the License.\r\n//\r\nimport _ from 'lodash'\r\n\r\nexport default class BridgeV2 {\r\n constructor (bv, vatom, face) {\r\n this.blockv = bv\r\n this.vatom = this.encodeVatom(vatom)\r\n this.face = face\r\n this.version = 2\r\n }\r\n\r\n init () {\r\n return {\r\n vatom: this.vatom,\r\n face: this.face\r\n }\r\n }\r\n\r\n getVatom () {\r\n return this.blockv.Vatoms.getUserVatoms([this.vatom.id]).then(v => {\r\n return {\r\n vatom: this.encodeVatom(v[0])\r\n }\r\n })\r\n }\r\n\r\n getVatomChildren () {\r\n return this.blockv.Vatoms.getVatomChildren(this.vatom.id).then(v => {\r\n return {\r\n vatoms: v.map(vatom => Object.assign({actions: vatom.actions, faces: vatom.faces}, vatom.payload))\r\n }\r\n })\r\n }\r\n\r\n vatomParentSet (payload) {\r\n return this.blockv.Vatoms.setParent(payload).then(pId => {\r\n return {\r\n new_parent_id: pId\r\n }\r\n })\r\n }\r\n\r\n observeChildren (payload) {\r\n let vId = payload\r\n return this.blockv.Vatoms.observeChildren(payload.id).then(v => {\r\n return {\r\n id: vId,\r\n vatoms: v\r\n }\r\n })\r\n }\r\n\r\n performAction (payload) { \r\n if (this.vatom.id === payload.payload['this.id']) {\r\n return this.blockv.Vatoms.performAction(payload.payload['this.id'], payload.action_name, payload.payload)\r\n }\r\n }\r\n\r\n getUserProfile (payload) {\r\n return this.blockv.UserManager.getPublicUserProfile(this.vatom['vAtom::vAtomType'].owner).then(u => {\r\n return this.encodeUser(u)\r\n })\r\n }\r\n\r\n getCurrentUser (payload) {\r\n let user = {}\r\n return Promise.all([\r\n this.blockv.UserManager.getPublicUserProfile(this.vatom['vAtom::vAtomType'].owner),\r\n this.blockv.UserManager.getCurrentUserTokens()\r\n ]).then(data => {\r\n let user = data[0]\r\n let tokens = data[1]\r\n return {\r\n user : {\r\n id: user.id,\r\n properties: {\r\n avatar_uri: user.properties.avatar_uri,\r\n first_name: user.properties.first_name,\r\n last_name: user.properties.last_name,\r\n is_guest: user.properties.guest_id ? true : false\r\n },\r\n tokens: {\r\n has_email: tokens.some(t => t.properties.token_type == 'email'),\r\n has_phone: tokens.some(t => t.properties.token_type == 'phone_number'),\r\n has_verified_email: tokens.some(t => t.properties.confirmed && t.properties.token_type == 'email'),\r\n has_verified_phone: tokens.some(t => t.properties.confirmed && t.properties.token_type == 'phone_number')\r\n }\r\n },\r\n }\r\n })\r\n }\r\n\r\n encodeResource (res) {\r\n let encodedUrls = []\r\n for (let u of res.urls) {\r\n let eur = this.blockv.UserManager.encodeAssetProvider(u)\r\n encodedUrls.push(eur)\r\n }\r\n\r\n return {\r\n urls: encodedUrls\r\n }\r\n }\r\n\r\n updateVatom (vatom) {\r\n this.vatom = vatom\r\n }\r\n\r\n customMessage (payload) {\r\n return payload\r\n }\r\n\r\n encodeVatom (vatom) {\r\n return Object.assign({}, vatom.payload, { faces: vatom.faces }, { actions: vatom.actions })\r\n }\r\n\r\n encodeUser (user) {\r\n return {\r\n user: {\r\n id: user.id,\r\n properties: {\r\n avatar_uri: user.properties.avatar_uri,\r\n first_name: user.properties.first_name,\r\n last_name: user.properties.last_name\r\n }\r\n }\r\n }\r\n }\r\n\r\n}\r\n","\"use strict\";\n\nrequire(\"./noConflict\");\n\nvar _global = _interopRequireDefault(require(\"core-js/library/fn/global\"));\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { \"default\": obj }; }\n\nif (_global[\"default\"]._babelPolyfill && typeof console !== \"undefined\" && console.warn) {\n console.warn(\"@babel/polyfill is loaded more than once on this page. This is probably not desirable/intended \" + \"and may have consequences if different versions of the polyfills are applied sequentially. \" + \"If you do need to load the polyfill more than once, use @babel/polyfill/noConflict \" + \"instead to bypass the warning.\");\n}\n\n_global[\"default\"]._babelPolyfill = true;","module.exports = function isBuffer(arg) {\n return arg && typeof arg === 'object'\n && typeof arg.copy === 'function'\n && typeof arg.fill === 'function'\n && typeof arg.readUInt8 === 'function';\n}","if (typeof Object.create === 'function') {\n // implementation from standard node.js 'util' module\n module.exports = function inherits(ctor, superCtor) {\n ctor.super_ = superCtor\n ctor.prototype = Object.create(superCtor.prototype, {\n constructor: {\n value: ctor,\n enumerable: false,\n writable: true,\n configurable: true\n }\n });\n };\n} else {\n // old school shim for old browsers\n module.exports = function inherits(ctor, superCtor) {\n ctor.super_ = superCtor\n var TempCtor = function () {}\n TempCtor.prototype = superCtor.prototype\n ctor.prototype = new TempCtor()\n ctor.prototype.constructor = ctor\n }\n}\n","'use strict';\n\nvar objectAssign = require('object-assign');\n\n// compare and isBuffer taken from https://github.com/feross/buffer/blob/680e9e5e488f22aac27599a57dc844a6315928dd/index.js\n// original notice:\n\n/*!\n * The buffer module from node.js, for the browser.\n *\n * @author Feross Aboukhadijeh <feross@feross.org> <http://feross.org>\n * @license MIT\n */\nfunction compare(a, b) {\n if (a === b) {\n return 0;\n }\n\n var x = a.length;\n var y = b.length;\n\n for (var i = 0, len = Math.min(x, y); i < len; ++i) {\n if (a[i] !== b[i]) {\n x = a[i];\n y = b[i];\n break;\n }\n }\n\n if (x < y) {\n return -1;\n }\n if (y < x) {\n return 1;\n }\n return 0;\n}\nfunction isBuffer(b) {\n if (global.Buffer && typeof global.Buffer.isBuffer === 'function') {\n return global.Buffer.isBuffer(b);\n }\n return !!(b != null && b._isBuffer);\n}\n\n// based on node assert, original notice:\n// NB: The URL to the CommonJS spec is kept just for tradition.\n// node-assert has evolved a lot since then, both in API and behavior.\n\n// http://wiki.commonjs.org/wiki/Unit_Testing/1.0\n//\n// THIS IS NOT TESTED NOR LIKELY TO WORK OUTSIDE V8!\n//\n// Originally from narwhal.js (http://narwhaljs.org)\n// Copyright (c) 2009 Thomas Robinson <280north.com>\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the 'Software'), to\n// deal in the Software without restriction, including without limitation the\n// rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n// sell copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN\n// ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION\n// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n\nvar util = require('util/');\nvar hasOwn = Object.prototype.hasOwnProperty;\nvar pSlice = Array.prototype.slice;\nvar functionsHaveNames = (function () {\n return function foo() {}.name === 'foo';\n}());\nfunction pToString (obj) {\n return Object.prototype.toString.call(obj);\n}\nfunction isView(arrbuf) {\n if (isBuffer(arrbuf)) {\n return false;\n }\n if (typeof global.ArrayBuffer !== 'function') {\n return false;\n }\n if (typeof ArrayBuffer.isView === 'function') {\n return ArrayBuffer.isView(arrbuf);\n }\n if (!arrbuf) {\n return false;\n }\n if (arrbuf instanceof DataView) {\n return true;\n }\n if (arrbuf.buffer && arrbuf.buffer instanceof ArrayBuffer) {\n return true;\n }\n return false;\n}\n// 1. The assert module provides functions that throw\n// AssertionError's when particular conditions are not met. The\n// assert module must conform to the following interface.\n\nvar assert = module.exports = ok;\n\n// 2. The AssertionError is defined in assert.\n// new assert.AssertionError({ message: message,\n// actual: actual,\n// expected: expected })\n\nvar regex = /\\s*function\\s+([^\\(\\s]*)\\s*/;\n// based on https://github.com/ljharb/function.prototype.name/blob/adeeeec8bfcc6068b187d7d9fb3d5bb1d3a30899/implementation.js\nfunction getName(func) {\n if (!util.isFunction(func)) {\n return;\n }\n if (functionsHaveNames) {\n return func.name;\n }\n var str = func.toString();\n var match = str.match(regex);\n return match && match[1];\n}\nassert.AssertionError = function AssertionError(options) {\n this.name = 'AssertionError';\n this.actual = options.actual;\n this.expected = options.expected;\n this.operator = options.operator;\n if (options.message) {\n this.message = options.message;\n this.generatedMessage = false;\n } else {\n this.message = getMessage(this);\n this.generatedMessage = true;\n }\n var stackStartFunction = options.stackStartFunction || fail;\n if (Error.captureStackTrace) {\n Error.captureStackTrace(this, stackStartFunction);\n } else {\n // non v8 browsers so we can have a stacktrace\n var err = new Error();\n if (err.stack) {\n var out = err.stack;\n\n // try to strip useless frames\n var fn_name = getName(stackStartFunction);\n var idx = out.indexOf('\\n' + fn_name);\n if (idx >= 0) {\n // once we have located the function frame\n // we need to strip out everything before it (and its line)\n var next_line = out.indexOf('\\n', idx + 1);\n out = out.substring(next_line + 1);\n }\n\n this.stack = out;\n }\n }\n};\n\n// assert.AssertionError instanceof Error\nutil.inherits(assert.AssertionError, Error);\n\nfunction truncate(s, n) {\n if (typeof s === 'string') {\n return s.length < n ? s : s.slice(0, n);\n } else {\n return s;\n }\n}\nfunction inspect(something) {\n if (functionsHaveNames || !util.isFunction(something)) {\n return util.inspect(something);\n }\n var rawname = getName(something);\n var name = rawname ? ': ' + rawname : '';\n return '[Function' + name + ']';\n}\nfunction getMessage(self) {\n return truncate(inspect(self.actual), 128) + ' ' +\n self.operator + ' ' +\n truncate(inspect(self.expected), 128);\n}\n\n// At present only the three keys mentioned above are used and\n// understood by the spec. Implementations or sub modules can pass\n// other keys to the AssertionError's constructor - they will be\n// ignored.\n\n// 3. All of the following functions must throw an AssertionError\n// when a corresponding condition is not met, with a message that\n// may be undefined if not provided. All assertion methods provide\n// both the actual and expected values to the assertion error for\n// display purposes.\n\nfunction fail(actual, expected, message, operator, stackStartFunction) {\n throw new assert.AssertionError({\n message: message,\n actual: actual,\n expected: expected,\n operator: operator,\n stackStartFunction: stackStartFunction\n });\n}\n\n// EXTENSION! allows for well behaved errors defined elsewhere.\nassert.fail = fail;\n\n// 4. Pure assertion tests whether a value is truthy, as determined\n// by !!guard.\n// assert.ok(guard, message_opt);\n// This statement is equivalent to assert.equal(true, !!guard,\n// message_opt);. To test strictly for the value true, use\n// assert.strictEqual(true, guard, message_opt);.\n\nfunction ok(value, message) {\n if (!value) fail(value, true, message, '==', assert.ok);\n}\nassert.ok = ok;\n\n// 5. The equality assertion tests shallow, coercive equality with\n// ==.\n// assert.equal(actual, expected, message_opt);\n\nassert.equal = function equal(actual, expected, message) {\n if (actual != expected) fail(actual, expected, message, '==', assert.equal);\n};\n\n// 6. The non-equality assertion tests for whether two objects are not equal\n// with != assert.notEqual(actual, expected, message_opt);\n\nassert.notEqual = function notEqual(actual, expected, message) {\n if (actual == expected) {\n fail(actual, expected, message, '!=', assert.notEqual);\n }\n};\n\n// 7. The equivalence assertion tests a deep equality relation.\n// assert.deepEqual(actual, expected, message_opt);\n\nassert.deepEqual = function deepEqual(actual, expected, message) {\n if (!_deepEqual(actual, expected, false)) {\n fail(actual, expected, message, 'deepEqual', assert.deepEqual);\n }\n};\n\nassert.deepStrictEqual = function deepStrictEqual(actual, expected, message) {\n if (!_deepEqual(actual, expected, true)) {\n fail(actual, expected, message, 'deepStrictEqual', assert.deepStrictEqual);\n }\n};\n\nfunction _deepEqual(actual, expected, strict, memos) {\n // 7.1. All identical values are equivalent, as determined by ===.\n if (actual === expected) {\n return true;\n } else if (isBuffer(actual) && isBuffer(expected)) {\n return compare(actual, expected) === 0;\n\n // 7.2. If the expected value is a Date object, the actual value is\n // equivalent if it is also a Date object that refers to the same time.\n } else if (util.isDate(actual) && util.isDate(expected)) {\n return actual.getTime() === expected.getTime();\n\n // 7.3 If the expected value is a RegExp object, the actual value is\n // equivalent if it is also a RegExp object with the same source and\n // properties (`global`, `multiline`, `lastIndex`, `ignoreCase`).\n } else if (util.isRegExp(actual) && util.isRegExp(expected)) {\n return actual.source === expected.source &&\n actual.global === expected.global &&\n actual.multiline === expected.multiline &&\n actual.lastIndex === expected.lastIndex &&\n actual.ignoreCase === expected.ignoreCase;\n\n // 7.4. Other pairs that do not both pass typeof value == 'object',\n // equivalence is determined by ==.\n } else if ((actual === null || typeof actual !== 'object') &&\n (expected === null || typeof expected !== 'object')) {\n return strict ? actual === expected : actual == expected;\n\n // If both values are instances of typed arrays, wrap their underlying\n // ArrayBuffers in a Buffer each to increase performance\n // This optimization requires the arrays to have the same type as checked by\n // Object.prototype.toString (aka pToString). Never perform binary\n // comparisons for Float*Arrays, though, since e.g. +0 === -0 but their\n // bit patterns are not identical.\n } else if (isView(actual) && isView(expected) &&\n pToString(actual) === pToString(expected) &&\n !(actual instanceof Float32Array ||\n actual instanceof Float64Array)) {\n return compare(new Uint8Array(actual.buffer),\n new Uint8Array(expected.buffer)) === 0;\n\n // 7.5 For all other Object pairs, including Array objects, equivalence is\n // determined by having the same number of owned properties (as verified\n // with Object.prototype.hasOwnProperty.call), the same set of keys\n // (although not necessarily the same order), equivalent values for every\n // corresponding key, and an identical 'prototype' property. Note: this\n // accounts for both named and indexed properties on Arrays.\n } else if (isBuffer(actual) !== isBuffer(expected)) {\n return false;\n } else {\n memos = memos || {actual: [], expected: []};\n\n var actualIndex = memos.actual.indexOf(actual);\n if (actualIndex !== -1) {\n if (actualIndex === memos.expected.indexOf(expected)) {\n return true;\n }\n }\n\n memos.actual.push(actual);\n memos.expected.push(expected);\n\n return objEquiv(actual, expected, strict, memos);\n }\n}\n\nfunction isArguments(object) {\n return Object.prototype.toString.call(object) == '[object Arguments]';\n}\n\nfunction objEquiv(a, b, strict, actualVisitedObjects) {\n if (a === null || a === undefined || b === null || b === undefined)\n return false;\n // if one is a primitive, the other must be same\n if (util.isPrimitive(a) || util.isPrimitive(b))\n return a === b;\n if (strict && Object.getPrototypeOf(a) !== Object.getPrototypeOf(b))\n return false;\n var aIsArgs = isArguments(a);\n var bIsArgs = isArguments(b);\n if ((aIsArgs && !bIsArgs) || (!aIsArgs && bIsArgs))\n return false;\n if (aIsArgs) {\n a = pSlice.call(a);\n b = pSlice.call(b);\n return _deepEqual(a, b, strict);\n }\n var ka = objectKeys(a);\n var kb = objectKeys(b);\n var key, i;\n // having the same number of owned properties (keys incorporates\n // hasOwnProperty)\n if (ka.length !== kb.length)\n return false;\n //the same set of keys (although not necessarily the same order),\n ka.sort();\n kb.sort();\n //~~~cheap key test\n for (i = ka.length - 1; i >= 0; i--) {\n if (ka[i] !== kb[i])\n return false;\n }\n //equivalent values for every corresponding key, and\n //~~~possibly expensive deep test\n for (i = ka.length - 1; i >= 0; i--) {\n key = ka[i];\n if (!_deepEqual(a[key], b[key], strict, actualVisitedObjects))\n return false;\n }\n return true;\n}\n\n// 8. The non-equivalence assertion tests for any deep inequality.\n// assert.notDeepEqual(actual, expected, message_opt);\n\nassert.notDeepEqual = function notDeepEqual(actual, expected, message) {\n if (_deepEqual(actual, expected, false)) {\n fail(actual, expected, message, 'notDeepEqual', assert.notDeepEqual);\n }\n};\n\nassert.notDeepStrictEqual = notDeepStrictEqual;\nfunction notDeepStrictEqual(actual, expected, message) {\n if (_deepEqual(actual, expected, true)) {\n fail(actual, expected, message, 'notDeepStrictEqual', notDeepStrictEqual);\n }\n}\n\n\n// 9. The strict equality assertion tests strict equality, as determined by ===.\n// assert.strictEqual(actual, expected, message_opt);\n\nassert.strictEqual = function strictEqual(actual, expected, message) {\n if (actual !== expected) {\n fail(actual, expected, message, '===', assert.strictEqual);\n }\n};\n\n// 10. The strict non-equality assertion tests for strict inequality, as\n// determined by !==. assert.notStrictEqual(actual, expected, message_opt);\n\nassert.notStrictEqual = function notStrictEqual(actual, expected, message) {\n if (actual === expected) {\n fail(actual, expected, message, '!==', assert.notStrictEqual);\n }\n};\n\nfunction expectedException(actual, expected) {\n if (!actual || !expected) {\n return false;\n }\n\n if (Object.prototype.toString.call(expected) == '[object RegExp]') {\n return expected.test(actual);\n }\n\n try {\n if (actual instanceof expected) {\n return true;\n }\n } catch (e) {\n // Ignore. The instanceof check doesn't work for arrow functions.\n }\n\n if (Error.isPrototypeOf(expected)) {\n return false;\n }\n\n return expected.call({}, actual) === true;\n}\n\nfunction _tryBlock(block) {\n var error;\n try {\n block();\n } catch (e) {\n error = e;\n }\n return error;\n}\n\nfunction _throws(shouldThrow, block, expected, message) {\n var actual;\n\n if (typeof block !== 'function') {\n throw new TypeError('\"block\" argument must be a function');\n }\n\n if (typeof expected === 'string') {\n message = expected;\n expected = null;\n }\n\n actual = _tryBlock(block);\n\n message = (expected && expected.name ? ' (' + expected.name + ').' : '.') +\n (message ? ' ' + message : '.');\n\n if (shouldThrow && !actual) {\n fail(actual, expected, 'Missing expected exception' + message);\n }\n\n var userProvidedMessage = typeof message === 'string';\n var isUnwantedException = !shouldThrow && util.isError(actual);\n var isUnexpectedException = !shouldThrow && actual && !expected;\n\n if ((isUnwantedException &&\n userProvidedMessage &&\n expectedException(actual, expected)) ||\n isUnexpectedException) {\n fail(actual, expected, 'Got unwanted exception' + message);\n }\n\n if ((shouldThrow && actual && expected &&\n !expectedException(actual, expected)) || (!shouldThrow && actual)) {\n throw actual;\n }\n}\n\n// 11. Expected to throw an error:\n// assert.throws(block, Error_opt, message_opt);\n\nassert.throws = function(block, /*optional*/error, /*optional*/message) {\n _throws(true, block, error, message);\n};\n\n// EXTENSION! This is annoying to write outside this module.\nassert.doesNotThrow = function(block, /*optional*/error, /*optional*/message) {\n _throws(false, block, error, message);\n};\n\nassert.ifError = function(err) { if (err) throw err; };\n\n// Expose a strict only variant of assert\nfunction strict(value, message) {\n if (!value) fail(value, true, message, '==', strict);\n}\nassert.strict = objectAssign(strict, assert, {\n equal: assert.strictEqual,\n deepEqual: assert.deepStrictEqual,\n notEqual: assert.notStrictEqual,\n notDeepEqual: assert.notDeepStrictEqual\n});\nassert.strict.strict = assert.strict;\n\nvar objectKeys = Object.keys || function (obj) {\n var keys = [];\n for (var key in obj) {\n if (hasOwn.call(obj, key)) keys.push(key);\n }\n return keys;\n};\n","/*\nobject-assign\n(c) Sindre Sorhus\n@license MIT\n*/\n\n'use strict';\n/* eslint-disable no-unused-vars */\nvar getOwnPropertySymbols = Object.getOwnPropertySymbols;\nvar hasOwnProperty = Object.prototype.hasOwnProperty;\nvar propIsEnumerable = Object.prototype.propertyIsEnumerable;\n\nfunction toObject(val) {\n\tif (val === null || val === undefined) {\n\t\tthrow new TypeError('Object.assign cannot be called with null or undefined');\n\t}\n\n\treturn Object(val);\n}\n\nfunction shouldUseNative() {\n\ttry {\n\t\tif (!Object.assign) {\n\t\t\treturn false;\n\t\t}\n\n\t\t// Detect buggy property enumeration order in older V8 versions.\n\n\t\t// https://bugs.chromium.org/p/v8/issues/detail?id=4118\n\t\tvar test1 = new String('abc'); // eslint-disable-line no-new-wrappers\n\t\ttest1[5] = 'de';\n\t\tif (Object.getOwnPropertyNames(test1)[0] === '5') {\n\t\t\treturn false;\n\t\t}\n\n\t\t// https://bugs.chromium.org/p/v8/issues/detail?id=3056\n\t\tvar test2 = {};\n\t\tfor (var i = 0; i < 10; i++) {\n\t\t\ttest2['_' + String.fromCharCode(i)] = i;\n\t\t}\n\t\tvar order2 = Object.getOwnPropertyNames(test2).map(function (n) {\n\t\t\treturn test2[n];\n\t\t});\n\t\tif (order2.join('') !== '0123456789') {\n\t\t\treturn false;\n\t\t}\n\n\t\t// https://bugs.chromium.org/p/v8/issues/detail?id=3056\n\t\tvar test3 = {};\n\t\t'abcdefghijklmnopqrst'.split('').forEach(function (letter) {\n\t\t\ttest3[letter] = letter;\n\t\t});\n\t\tif (Object.keys(Object.assign({}, test3)).join('') !==\n\t\t\t\t'abcdefghijklmnopqrst') {\n\t\t\treturn false;\n\t\t}\n\n\t\treturn true;\n\t} catch (err) {\n\t\t// We don't expect any of the above to throw, but better to be safe.\n\t\treturn false;\n\t}\n}\n\nmodule.exports = shouldUseNative() ? Object.assign : function (target, source) {\n\tvar from;\n\tvar to = toObject(target);\n\tvar symbols;\n\n\tfor (var s = 1; s < arguments.length; s++) {\n\t\tfrom = Object(arguments[s]);\n\n\t\tfor (var key in from) {\n\t\t\tif (hasOwnProperty.call(from, key)) {\n\t\t\t\tto[key] = from[key];\n\t\t\t}\n\t\t}\n\n\t\tif (getOwnPropertySymbols) {\n\t\t\tsymbols = getOwnPropertySymbols(from);\n\t\t\tfor (var i = 0; i < symbols.length; i++) {\n\t\t\t\tif (propIsEnumerable.call(from, symbols[i])) {\n\t\t\t\t\tto[symbols[i]] = from[symbols[i]];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn to;\n};\n","module.exports = now\n\nfunction now() {\n return new Date().getTime()\n}\n","\"use strict\";\n\nrequire(\"core-js/es6\");\n\nrequire(\"core-js/fn/array/includes\");\n\nrequire(\"core-js/fn/array/flat-map\");\n\nrequire(\"core-js/fn/string/pad-start\");\n\nrequire(\"core-js/fn/string/pad-end\");\n\nrequire(\"core-js/fn/string/trim-start\");\n\nrequire(\"core-js/fn/string/trim-end\");\n\nrequire(\"core-js/fn/symbol/async-iterator\");\n\nrequire(\"core-js/fn/object/get-own-property-descriptors\");\n\nrequire(\"core-js/fn/object/values\");\n\nrequire(\"core-js/fn/object/entries\");\n\nrequire(\"core-js/fn/promise/finally\");\n\nrequire(\"core-js/web\");\n\nrequire(\"regenerator-runtime/runtime\");","require('../modules/es6.symbol');\nrequire('../modules/es6.object.create');\nrequire('../modules/es6.object.define-property');\nrequire('../modules/es6.object.define-properties');\nrequire('../modules/es6.object.get-own-property-descriptor');\nrequire('../modules/es6.object.get-prototype-of');\nrequire('../modules/es6.object.keys');\nrequire('../modules/es6.object.get-own-property-names');\nrequire('../modules/es6.object.freeze');\nrequire('../modules/es6.object.seal');\nrequire('../modules/es6.object.prevent-extensions');\nrequire('../modules/es6.object.is-frozen');\nrequire('../modules/es6.object.is-sealed');\nrequire('../modules/es6.object.is-extensible');\nrequire('../modules/es6.object.assign');\nrequire('../modules/es6.object.is');\nrequire('../modules/es6.object.set-prototype-of');\nrequire('../modules/es6.object.to-string');\nrequire('../modules/es6.function.bind');\nrequire('../modules/es6.function.name');\nrequire('../modules/es6.function.has-instance');\nrequire('../modules/es6.parse-int');\nrequire('../modules/es6.parse-float');\nrequire('../modules/es6.number.constructor');\nrequire('../modules/es6.number.to-fixed');\nrequire('../modules/es6.number.to-precision');\nrequire('../modules/es6.number.epsilon');\nrequire('../modules/es6.number.is-finite');\nrequire('../modules/es6.number.is-integer');\nrequire('../modules/es6.number.is-nan');\nrequire('../modules/es6.number.is-safe-integer');\nrequire('../modules/es6.number.max-safe-integer');\nrequire('../modules/es6.number.min-safe-integer');\nrequire('../modules/es6.number.parse-float');\nrequire('../modules/es6.number.parse-int');\nrequire('../modules/es6.math.acosh');\nrequire('../modules/es6.math.asinh');\nrequire('../modules/es6.math.atanh');\nrequire('../modules/es6.math.cbrt');\nrequire('../modules/es6.math.clz32');\nrequire('../modules/es6.math.cosh');\nrequire('../modules/es6.math.expm1');\nrequire('../modules/es6.math.fround');\nrequire('../modules/es6.math.hypot');\nrequire('../modules/es6.math.imul');\nrequire('../modules/es6.math.log10');\nrequire('../modules/es6.math.log1p');\nrequire('../modules/es6.math.log2');\nrequire('../modules/es6.math.sign');\nrequire('../modules/es6.math.sinh');\nrequire('../modules/es6.math.tanh');\nrequire('../modules/es6.math.trunc');\nrequire('../modules/es6.string.from-code-point');\nrequire('../modules/es6.string.raw');\nrequire('../modules/es6.string.trim');\nrequire('../modules/es6.string.iterator');\nrequire('../modules/es6.string.code-point-at');\nrequire('../modules/es6.string.ends-with');\nrequire('../modules/es6.string.includes');\nrequire('../modules/es6.string.repeat');\nrequire('../modules/es6.string.starts-with');\nrequire('../modules/es6.string.anchor');\nrequire('../modules/es6.string.big');\nrequire('../modules/es6.string.blink');\nrequire('../modules/es6.string.bold');\nrequire('../modules/es6.string.fixed');\nrequire('../modules/es6.string.fontcolor');\nrequire('../modules/es6.string.fontsize');\nrequire('../modules/es6.string.italics');\nrequire('../modules/es6.string.link');\nrequire('../modules/es6.string.small');\nrequire('../modules/es6.string.strike');\nrequire('../modules/es6.string.sub');\nrequire('../modules/es6.string.sup');\nrequire('../modules/es6.date.now');\nrequire('../modules/es6.date.to-json');\nrequire('../modules/es6.date.to-iso-string');\nrequire('../modules/es6.date.to-string');\nrequire('../modules/es6.date.to-primitive');\nrequire('../modules/es6.array.is-array');\nrequire('../modules/es6.array.from');\nrequire('../modules/es6.array.of');\nrequire('../modules/es6.array.join');\nrequire('../modules/es6.array.slice');\nrequire('../modules/es6.array.sort');\nrequire('../modules/es6.array.for-each');\nrequire('../modules/es6.array.map');\nrequire('../modules/es6.array.filter');\nrequire('../modules/es6.array.some');\nrequire('../modules/es6.array.every');\nrequire('../modules/es6.array.reduce');\nrequire('../modules/es6.array.reduce-right');\nrequire('../modules/es6.array.index-of');\nrequire('../modules/es6.array.last-index-of');\nrequire('../modules/es6.array.copy-within');\nrequire('../modules/es6.array.fill');\nrequire('../modules/es6.array.find');\nrequire('../modules/es6.array.find-index');\nrequire('../modules/es6.array.species');\nrequire('../modules/es6.array.iterator');\nrequire('../modules/es6.regexp.constructor');\nrequire('../modules/es6.regexp.exec');\nrequire('../modules/es6.regexp.to-string');\nrequire('../modules/es6.regexp.flags');\nrequire('../modules/es6.regexp.match');\nrequire('../modules/es6.regexp.replace');\nrequire('../modules/es6.regexp.search');\nrequire('../modules/es6.regexp.split');\nrequire('../modules/es6.promise');\nrequire('../modules/es6.map');\nrequire('../modules/es6.set');\nrequire('../modules/es6.weak-map');\nrequire('../modules/es6.weak-set');\nrequire('../modules/es6.typed.array-buffer');\nrequire('../modules/es6.typed.data-view');\nrequire('../modules/es6.typed.int8-array');\nrequire('../modules/es6.typed.uint8-array');\nrequire('../modules/es6.typed.uint8-clamped-array');\nrequire('../modules/es6.typed.int16-array');\nrequire('../modules/es6.typed.uint16-array');\nrequire('../modules/es6.typed.int32-array');\nrequire('../modules/es6.typed.uint32-array');\nrequire('../modules/es6.typed.float32-array');\nrequire('../modules/es6.typed.float64-array');\nrequire('../modules/es6.reflect.apply');\nrequire('../modules/es6.reflect.construct');\nrequire('../modules/es6.reflect.define-property');\nrequire('../modules/es6.reflect.delete-property');\nrequire('../modules/es6.reflect.enumerate');\nrequire('../modules/es6.reflect.get');\nrequire('../modules/es6.reflect.get-own-property-descriptor');\nrequire('../modules/es6.reflect.get-prototype-of');\nrequire('../modules/es6.reflect.has');\nrequire('../modules/es6.reflect.is-extensible');\nrequire('../modules/es6.reflect.own-keys');\nrequire('../modules/es6.reflect.prevent-extensions');\nrequire('../modules/es6.reflect.set');\nrequire('../modules/es6.reflect.set-prototype-of');\nmodule.exports = require('../modules/_core');\n","'use strict';\n// ECMAScript 6 symbols shim\nvar global = require('./_global');\nvar has = require('./_has');\nvar DESCRIPTORS = require('./_descriptors');\nvar $export = require('./_export');\nvar redefine = require('./_redefine');\nvar META = require('./_meta').KEY;\nvar $fails = require('./_fails');\nvar shared = require('./_shared');\nvar setToStringTag = require('./_set-to-string-tag');\nvar uid = require('./_uid');\nvar wks = require('./_wks');\nvar wksExt = require('./_wks-ext');\nvar wksDefine = require('./_wks-define');\nvar enumKeys = require('./_enum-keys');\nvar isArray = require('./_is-array');\nvar anObject = require('./_an-object');\nvar isObject = require('./_is-object');\nvar toObject = require('./_to-object');\nvar toIObject = require('./_to-iobject');\nvar toPrimitive = require('./_to-primitive');\nvar createDesc = require('./_property-desc');\nvar _create = require('./_object-create');\nvar gOPNExt = require('./_object-gopn-ext');\nvar $GOPD = require('./_object-gopd');\nvar $GOPS = require('./_object-gops');\nvar $DP = require('./_object-dp');\nvar $keys = require('./_object-keys');\nvar gOPD = $GOPD.f;\nvar dP = $DP.f;\nvar gOPN = gOPNExt.f;\nvar $Symbol = global.Symbol;\nvar $JSON = global.JSON;\nvar _stringify = $JSON && $JSON.stringify;\nvar PROTOTYPE = 'prototype';\nvar HIDDEN = wks('_hidden');\nvar TO_PRIMITIVE = wks('toPrimitive');\nvar isEnum = {}.propertyIsEnumerable;\nvar SymbolRegistry = shared('symbol-registry');\nvar AllSymbols = shared('symbols');\nvar OPSymbols = shared('op-symbols');\nvar ObjectProto = Object[PROTOTYPE];\nvar USE_NATIVE = typeof $Symbol == 'function' && !!$GOPS.f;\nvar QObject = global.QObject;\n// Don't use setters in Qt Script, https://github.com/zloirock/core-js/issues/173\nvar setter = !QObject || !QObject[PROTOTYPE] || !QObject[PROTOTYPE].findChild;\n\n// fallback for old Android, https://code.google.com/p/v8/issues/detail?id=687\nvar setSymbolDesc = DESCRIPTORS && $fails(function () {\n return _create(dP({}, 'a', {\n get: function () { return dP(this, 'a', { value: 7 }).a; }\n })).a != 7;\n}) ? function (it, key, D) {\n var protoDesc = gOPD(ObjectProto, key);\n if (protoDesc) delete ObjectProto[key];\n dP(it, key, D);\n if (protoDesc && it !== ObjectProto) dP(ObjectProto, key, protoDesc);\n} : dP;\n\nvar wrap = function (tag) {\n var sym = AllSymbols[tag] = _create($Symbol[PROTOTYPE]);\n sym._k = tag;\n return sym;\n};\n\nvar isSymbol = USE_NATIVE && typeof $Symbol.iterator == 'symbol' ? function (it) {\n return typeof it == 'symbol';\n} : function (it) {\n return it instanceof $Symbol;\n};\n\nvar $defineProperty = function defineProperty(it, key, D) {\n if (it === ObjectProto) $defineProperty(OPSymbols, key, D);\n anObject(it);\n key = toPrimitive(key, true);\n anObject(D);\n if (has(AllSymbols, key)) {\n if (!D.enumerable) {\n if (!has(it, HIDDEN)) dP(it, HIDDEN, createDesc(1, {}));\n it[HIDDEN][key] = true;\n } else {\n if (has(it, HIDDEN) && it[HIDDEN][key]) it[HIDDEN][key] = false;\n D = _create(D, { enumerable: createDesc(0, false) });\n } return setSymbolDesc(it, key, D);\n } return dP(it, key, D);\n};\nvar $defineProperties = function defineProperties(it, P) {\n anObject(it);\n var keys = enumKeys(P = toIObject(P));\n var i = 0;\n var l = keys.length;\n var key;\n while (l > i) $defineProperty(it, key = keys[i++], P[key]);\n return it;\n};\nvar $create = function create(it, P) {\n return P === undefined ? _create(it) : $defineProperties(_create(it), P);\n};\nvar $propertyIsEnumerable = function propertyIsEnumerable(key) {\n var E = isEnum.call(this, key = toPrimitive(key, true));\n if (this === ObjectProto && has(AllSymbols, key) && !has(OPSymbols, key)) return false;\n return E || !has(this, key) || !has(AllSymbols, key) || has(this, HIDDEN) && this[HIDDEN][key] ? E : true;\n};\nvar $getOwnPropertyDescriptor = function getOwnPropertyDescriptor(it, key) {\n it = toIObject(it);\n key = toPrimitive(key, true);\n if (it === ObjectProto && has(AllSymbols, key) && !has(OPSymbols, key)) return;\n var D = gOPD(it, key);\n if (D && has(AllSymbols, key) && !(has(it, HIDDEN) && it[HIDDEN][key])) D.enumerable = true;\n return D;\n};\nvar $getOwnPropertyNames = function getOwnPropertyNames(it) {\n var names = gOPN(toIObject(it));\n var result = [];\n var i = 0;\n var key;\n while (names.length > i) {\n if (!has(AllSymbols, key = names[i++]) && key != HIDDEN && key != META) result.push(key);\n } return result;\n};\nvar $getOwnPropertySymbols = function getOwnPropertySymbols(it) {\n var IS_OP = it === ObjectProto;\n var names = gOPN(IS_OP ? OPSymbols : toIObject(it));\n var result = [];\n var i = 0;\n var key;\n while (names.length > i) {\n if (has(AllSymbols, key = names[i++]) && (IS_OP ? has(ObjectProto, key) : true)) result.push(AllSymbols[key]);\n } return result;\n};\n\n// 19.4.1.1 Symbol([description])\nif (!USE_NATIVE) {\n $Symbol = function Symbol() {\n if (this instanceof $Symbol) throw TypeError('Symbol is not a constructor!');\n var tag = uid(arguments.length > 0 ? arguments[0] : undefined);\n var $set = function (value) {\n if (this === ObjectProto) $set.call(OPSymbols, value);\n if (has(this, HIDDEN) && has(this[HIDDEN], tag)) this[HIDDEN][tag] = false;\n setSymbolDesc(this, tag, createDesc(1, value));\n };\n if (DESCRIPTORS && setter) setSymbolDesc(ObjectProto, tag, { configurable: true, set: $set });\n return wrap(tag);\n };\n redefine($Symbol[PROTOTYPE], 'toString', function toString() {\n return this._k;\n });\n\n $GOPD.f = $getOwnPropertyDescriptor;\n $DP.f = $defineProperty;\n require('./_object-gopn').f = gOPNExt.f = $getOwnPropertyNames;\n require('./_object-pie').f = $propertyIsEnumerable;\n $GOPS.f = $getOwnPropertySymbols;\n\n if (DESCRIPTORS && !require('./_library')) {\n redefine(ObjectProto, 'propertyIsEnumerable', $propertyIsEnumerable, true);\n }\n\n wksExt.f = function (name) {\n return wrap(wks(name));\n };\n}\n\n$export($export.G + $export.W + $export.F * !USE_NATIVE, { Symbol: $Symbol });\n\nfor (var es6Symbols = (\n // 19.4.2.2, 19.4.2.3, 19.4.2.4, 19.4.2.6, 19.4.2.8, 19.4.2.9, 19.4.2.10, 19.4.2.11, 19.4.2.12, 19.4.2.13, 19.4.2.14\n 'hasInstance,isConcatSpreadable,iterator,match,replace,search,species,split,toPrimitive,toStringTag,unscopables'\n).split(','), j = 0; es6Symbols.length > j;)wks(es6Symbols[j++]);\n\nfor (var wellKnownSymbols = $keys(wks.store), k = 0; wellKnownSymbols.length > k;) wksDefine(wellKnownSymbols[k++]);\n\n$export($export.S + $export.F * !USE_NATIVE, 'Symbol', {\n // 19.4.2.1 Symbol.for(key)\n 'for': function (key) {\n return has(SymbolRegistry, key += '')\n ? SymbolRegistry[key]\n : SymbolRegistry[key] = $Symbol(key);\n },\n // 19.4.2.5 Symbol.keyFor(sym)\n keyFor: function keyFor(sym) {\n if (!isSymbol(sym)) throw TypeError(sym + ' is not a symbol!');\n for (var key in SymbolRegistry) if (SymbolRegistry[key] === sym) return key;\n },\n useSetter: function () { setter = true; },\n useSimple: function () { setter = false; }\n});\n\n$export($export.S + $export.F * !USE_NATIVE, 'Object', {\n // 19.1.2.2 Object.create(O [, Properties])\n create: $create,\n // 19.1.2.4 Object.defineProperty(O, P, Attributes)\n defineProperty: $defineProperty,\n // 19.1.2.3 Object.defineProperties(O, Properties)\n defineProperties: $defineProperties,\n // 19.1.2.6 Object.getOwnPropertyDescriptor(O, P)\n getOwnPropertyDescriptor: $getOwnPropertyDescriptor,\n // 19.1.2.7 Object.getOwnPropertyNames(O)\n getOwnPropertyNames: $getOwnPropertyNames,\n // 19.1.2.8 Object.getOwnPropertySymbols(O)\n getOwnPropertySymbols: $getOwnPropertySymbols\n});\n\n// Chrome 38 and 39 `Object.getOwnPropertySymbols` fails on primitives\n// https://bugs.chromium.org/p/v8/issues/detail?id=3443\nvar FAILS_ON_PRIMITIVES = $fails(function () { $GOPS.f(1); });\n\n$export($export.S + $export.F * FAILS_ON_PRIMITIVES, 'Object', {\n getOwnPropertySymbols: function getOwnPropertySymbols(it) {\n return $GOPS.f(toObject(it));\n }\n});\n\n// 24.3.2 JSON.stringify(value [, replacer [, space]])\n$JSON && $export($export.S + $export.F * (!USE_NATIVE || $fails(function () {\n var S = $Symbol();\n // MS Edge converts symbol values to JSON as {}\n // WebKit converts symbol values to JSON as null\n // V8 throws on boxed symbols\n return _stringify([S]) != '[null]' || _stringify({ a: S }) != '{}' || _stringify(Object(S)) != '{}';\n})), 'JSON', {\n stringify: function stringify(it) {\n var args = [it];\n var i = 1;\n var replacer, $replacer;\n while (arguments.length > i) args.push(arguments[i++]);\n $replacer = replacer = args[1];\n if (!isObject(replacer) && it === undefined || isSymbol(it)) return; // IE8 returns string on undefined\n if (!isArray(replacer)) replacer = function (key, value) {\n if (typeof $replacer == 'function') value = $replacer.call(this, key, value);\n if (!isSymbol(value)) return value;\n };\n args[1] = replacer;\n return _stringify.apply($JSON, args);\n }\n});\n\n// 19.4.3.4 Symbol.prototype[@@toPrimitive](hint)\n$Symbol[PROTOTYPE][TO_PRIMITIVE] || require('./_hide')($Symbol[PROTOTYPE], TO_PRIMITIVE, $Symbol[PROTOTYPE].valueOf);\n// 19.4.3.5 Symbol.prototype[@@toStringTag]\nsetToStringTag($Symbol, 'Symbol');\n// 20.2.1.9 Math[@@toStringTag]\nsetToStringTag(Math, 'Math', true);\n// 24.3.3 JSON[@@toStringTag]\nsetToStringTag(global.JSON, 'JSON', true);\n","module.exports = require('./_shared')('native-function-to-string', Function.toString);\n","// all enumerable object keys, includes symbols\nvar getKeys = require('./_object-keys');\nvar gOPS = require('./_object-gops');\nvar pIE = require('./_object-pie');\nmodule.exports = function (it) {\n var result = getKeys(it);\n var getSymbols = gOPS.f;\n if (getSymbols) {\n var symbols = getSymbols(it);\n var isEnum = pIE.f;\n var i = 0;\n var key;\n while (symbols.length > i) if (isEnum.call(it, key = symbols[i++])) result.push(key);\n } return result;\n};\n","var $export = require('./_export');\n// 19.1.2.2 / 15.2.3.5 Object.create(O [, Properties])\n$export($export.S, 'Object', { create: require('./_object-create') });\n","var $export = require('./_export');\n// 19.1.2.4 / 15.2.3.6 Object.defineProperty(O, P, Attributes)\n$export($export.S + $export.F * !require('./_descriptors'), 'Object', { defineProperty: require('./_object-dp').f });\n","var $export = require('./_export');\n// 19.1.2.3 / 15.2.3.7 Object.defineProperties(O, Properties)\n$export($export.S + $export.F * !require('./_descriptors'), 'Object', { defineProperties: require('./_object-dps') });\n","// 19.1.2.6 Object.getOwnPropertyDescriptor(O, P)\nvar toIObject = require('./_to-iobject');\nvar $getOwnPropertyDescriptor = require('./_object-gopd').f;\n\nrequire('./_object-sap')('getOwnPropertyDescriptor', function () {\n return function getOwnPropertyDescriptor(it, key) {\n return $getOwnPropertyDescriptor(toIObject(it), key);\n };\n});\n","// 19.1.2.9 Object.getPrototypeOf(O)\nvar toObject = require('./_to-object');\nvar $getPrototypeOf = require('./_object-gpo');\n\nrequire('./_object-sap')('getPrototypeOf', function () {\n return function getPrototypeOf(it) {\n return $getPrototypeOf(toObject(it));\n };\n});\n","// 19.1.2.14 Object.keys(O)\nvar toObject = require('./_to-object');\nvar $keys = require('./_object-keys');\n\nrequire('./_object-sap')('keys', function () {\n return function keys(it) {\n return $keys(toObject(it));\n };\n});\n","// 19.1.2.7 Object.getOwnPropertyNames(O)\nrequire('./_object-sap')('getOwnPropertyNames', function () {\n return require('./_object-gopn-ext').f;\n});\n","// 19.1.2.5 Object.freeze(O)\nvar isObject = require('./_is-object');\nvar meta = require('./_meta').onFreeze;\n\nrequire('./_object-sap')('freeze', function ($freeze) {\n return function freeze(it) {\n return $freeze && isObject(it) ? $freeze(meta(it)) : it;\n };\n});\n","// 19.1.2.17 Object.seal(O)\nvar isObject = require('./_is-object');\nvar meta = require('./_meta').onFreeze;\n\nrequire('./_object-sap')('seal', function ($seal) {\n return function seal(it) {\n return $seal && isObject(it) ? $seal(meta(it)) : it;\n };\n});\n","// 19.1.2.15 Object.preventExtensions(O)\nvar isObject = require('./_is-object');\nvar meta = require('./_meta').onFreeze;\n\nrequire('./_object-sap')('preventExtensions', function ($preventExtensions) {\n return function preventExtensions(it) {\n return $preventExtensions && isObject(it) ? $preventExtensions(meta(it)) : it;\n };\n});\n","// 19.1.2.12 Object.isFrozen(O)\nvar isObject = require('./_is-object');\n\nrequire('./_object-sap')('isFrozen', function ($isFrozen) {\n return function isFrozen(it) {\n return isObject(it) ? $isFrozen ? $isFrozen(it) : false : true;\n };\n});\n","// 19.1.2.13 Object.isSealed(O)\nvar isObject = require('./_is-object');\n\nrequire('./_object-sap')('isSealed', function ($isSealed) {\n return function isSealed(it) {\n return isObject(it) ? $isSealed ? $isSealed(it) : false : true;\n };\n});\n","// 19.1.2.11 Object.isExtensible(O)\nvar isObject = require('./_is-object');\n\nrequire('./_object-sap')('isExtensible', function ($isExtensible) {\n return function isExtensible(it) {\n return isObject(it) ? $isExtensible ? $isExtensible(it) : true : false;\n };\n});\n","// 19.1.3.1 Object.assign(target, source)\nvar $export = require('./_export');\n\n$export($export.S + $export.F, 'Object', { assign: require('./_object-assign') });\n","// 19.1.3.10 Object.is(value1, value2)\nvar $export = require('./_export');\n$export($export.S, 'Object', { is: require('./_same-value') });\n","// 19.1.3.19 Object.setPrototypeOf(O, proto)\nvar $export = require('./_export');\n$export($export.S, 'Object', { setPrototypeOf: require('./_set-proto').set });\n","'use strict';\n// 19.1.3.6 Object.prototype.toString()\nvar classof = require('./_classof');\nvar test = {};\ntest[require('./_wks')('toStringTag')] = 'z';\nif (test + '' != '[object z]') {\n require('./_redefine')(Object.prototype, 'toString', function toString() {\n return '[object ' + classof(this) + ']';\n }, true);\n}\n","// 19.2.3.2 / 15.3.4.5 Function.prototype.bind(thisArg, args...)\nvar $export = require('./_export');\n\n$export($export.P, 'Function', { bind: require('./_bind') });\n","var dP = require('./_object-dp').f;\nvar FProto = Function.prototype;\nvar nameRE = /^\\s*function ([^ (]*)/;\nvar NAME = 'name';\n\n// 19.2.4.2 name\nNAME in FProto || require('./_descriptors') && dP(FProto, NAME, {\n configurable: true,\n get: function () {\n try {\n return ('' + this).match(nameRE)[1];\n } catch (e) {\n return '';\n }\n }\n});\n","'use strict';\nvar isObject = require('./_is-object');\nvar getPrototypeOf = require('./_object-gpo');\nvar HAS_INSTANCE = require('./_wks')('hasInstance');\nvar FunctionProto = Function.prototype;\n// 19.2.3.6 Function.prototype[@@hasInstance](V)\nif (!(HAS_INSTANCE in FunctionProto)) require('./_object-dp').f(FunctionProto, HAS_INSTANCE, { value: function (O) {\n if (typeof this != 'function' || !isObject(O)) return false;\n if (!isObject(this.prototype)) return O instanceof this;\n // for environment w/o native `@@hasInstance` logic enough `instanceof`, but add this:\n while (O = getPrototypeOf(O)) if (this.prototype === O) return true;\n return false;\n} });\n","var $export = require('./_export');\nvar $parseInt = require('./_parse-int');\n// 18.2.5 parseInt(string, radix)\n$export($export.G + $export.F * (parseInt != $parseInt), { parseInt: $parseInt });\n","var $export = require('./_export');\nvar $parseFloat = require('./_parse-float');\n// 18.2.4 parseFloat(string)\n$export($export.G + $export.F * (parseFloat != $parseFloat), { parseFloat: $parseFloat });\n","'use strict';\nvar global = require('./_global');\nvar has = require('./_has');\nvar cof = require('./_cof');\nvar inheritIfRequired = require('./_inherit-if-required');\nvar toPrimitive = require('./_to-primitive');\nvar fails = require('./_fails');\nvar gOPN = require('./_object-gopn').f;\nvar gOPD = require('./_object-gopd').f;\nvar dP = require('./_object-dp').f;\nvar $trim = require('./_string-trim').trim;\nvar NUMBER = 'Number';\nvar $Number = global[NUMBER];\nvar Base = $Number;\nvar proto = $Number.prototype;\n// Opera ~12 has broken Object#toString\nvar BROKEN_COF = cof(require('./_object-create')(proto)) == NUMBER;\nvar TRIM = 'trim' in String.prototype;\n\n// 7.1.3 ToNumber(argument)\nvar toNumber = function (argument) {\n var it = toPrimitive(argument, false);\n if (typeof it == 'string' && it.length > 2) {\n it = TRIM ? it.trim() : $trim(it, 3);\n var first = it.charCodeAt(0);\n var third, radix, maxCode;\n if (first === 43 || first === 45) {\n third = it.charCodeAt(2);\n if (third === 88 || third === 120) return NaN; // Number('+0x1') should be NaN, old V8 fix\n } else if (first === 48) {\n switch (it.charCodeAt(1)) {\n case 66: case 98: radix = 2; maxCode = 49; break; // fast equal /^0b[01]+$/i\n case 79: case 111: radix = 8; maxCode = 55; break; // fast equal /^0o[0-7]+$/i\n default: return +it;\n }\n for (var digits = it.slice(2), i = 0, l = digits.length, code; i < l; i++) {\n code = digits.charCodeAt(i);\n // parseInt parses a string to a first unavailable symbol\n // but ToNumber should return NaN if a string contains unavailable symbols\n if (code < 48 || code > maxCode) return NaN;\n } return parseInt(digits, radix);\n }\n } return +it;\n};\n\nif (!$Number(' 0o1') || !$Number('0b1') || $Number('+0x1')) {\n $Number = function Number(value) {\n var it = arguments.length < 1 ? 0 : value;\n var that = this;\n return that instanceof $Number\n // check on 1..constructor(foo) case\n && (BROKEN_COF ? fails(function () { proto.valueOf.call(that); }) : cof(that) != NUMBER)\n ? inheritIfRequired(new Base(toNumber(it)), that, $Number) : toNumber(it);\n };\n for (var keys = require('./_descriptors') ? gOPN(Base) : (\n // ES3:\n 'MAX_VALUE,MIN_VALUE,NaN,NEGATIVE_INFINITY,POSITIVE_INFINITY,' +\n // ES6 (in case, if modules with ES6 Number statics required before):\n 'EPSILON,isFinite,isInteger,isNaN,isSafeInteger,MAX_SAFE_INTEGER,' +\n 'MIN_SAFE_INTEGER,parseFloat,parseInt,isInteger'\n ).split(','), j = 0, key; keys.length > j; j++) {\n if (has(Base, key = keys[j]) && !has($Number, key)) {\n dP($Number, key, gOPD(Base, key));\n }\n }\n $Number.prototype = proto;\n proto.constructor = $Number;\n require('./_redefine')(global, NUMBER, $Number);\n}\n","'use strict';\nvar $export = require('./_export');\nvar toInteger = require('./_to-integer');\nvar aNumberValue = require('./_a-number-value');\nvar repeat = require('./_string-repeat');\nvar $toFixed = 1.0.toFixed;\nvar floor = Math.floor;\nvar data = [0, 0, 0, 0, 0, 0];\nvar ERROR = 'Number.toFixed: incorrect invocation!';\nvar ZERO = '0';\n\nvar multiply = function (n, c) {\n var i = -1;\n var c2 = c;\n while (++i < 6) {\n c2 += n * data[i];\n data[i] = c2 % 1e7;\n c2 = floor(c2 / 1e7);\n }\n};\nvar divide = function (n) {\n var i = 6;\n var c = 0;\n while (--i >= 0) {\n c += data[i];\n data[i] = floor(c / n);\n c = (c % n) * 1e7;\n }\n};\nvar numToString = function () {\n var i = 6;\n var s = '';\n while (--i >= 0) {\n if (s !== '' || i === 0 || data[i] !== 0) {\n var t = String(data[i]);\n s = s === '' ? t : s + repeat.call(ZERO, 7 - t.length) + t;\n }\n } return s;\n};\nvar pow = function (x, n, acc) {\n return n === 0 ? acc : n % 2 === 1 ? pow(x, n - 1, acc * x) : pow(x * x, n / 2, acc);\n};\nvar log = function (x) {\n var n = 0;\n var x2 = x;\n while (x2 >= 4096) {\n n += 12;\n x2 /= 4096;\n }\n while (x2 >= 2) {\n n += 1;\n x2 /= 2;\n } return n;\n};\n\n$export($export.P + $export.F * (!!$toFixed && (\n 0.00008.toFixed(3) !== '0.000' ||\n 0.9.toFixed(0) !== '1' ||\n 1.255.toFixed(2) !== '1.25' ||\n 1000000000000000128.0.toFixed(0) !== '1000000000000000128'\n) || !require('./_fails')(function () {\n // V8 ~ Android 4.3-\n $toFixed.call({});\n})), 'Number', {\n toFixed: function toFixed(fractionDigits) {\n var x = aNumberValue(this, ERROR);\n var f = toInteger(fractionDigits);\n var s = '';\n var m = ZERO;\n var e, z, j, k;\n if (f < 0 || f > 20) throw RangeError(ERROR);\n // eslint-disable-next-line no-self-compare\n if (x != x) return 'NaN';\n if (x <= -1e21 || x >= 1e21) return String(x);\n if (x < 0) {\n s = '-';\n x = -x;\n }\n if (x > 1e-21) {\n e = log(x * pow(2, 69, 1)) - 69;\n z = e < 0 ? x * pow(2, -e, 1) : x / pow(2, e, 1);\n z *= 0x10000000000000;\n e = 52 - e;\n if (e > 0) {\n multiply(0, z);\n j = f;\n while (j >= 7) {\n multiply(1e7, 0);\n j -= 7;\n }\n multiply(pow(10, j, 1), 0);\n j = e - 1;\n while (j >= 23) {\n divide(1 << 23);\n j -= 23;\n }\n divide(1 << j);\n multiply(1, 1);\n divide(2);\n m = numToString();\n } else {\n multiply(0, z);\n multiply(1 << -e, 0);\n m = numToString() + repeat.call(ZERO, f);\n }\n }\n if (f > 0) {\n k = m.length;\n m = s + (k <= f ? '0.' + repeat.call(ZERO, f - k) + m : m.slice(0, k - f) + '.' + m.slice(k - f));\n } else {\n m = s + m;\n } return m;\n }\n});\n","'use strict';\nvar $export = require('./_export');\nvar $fails = require('./_fails');\nvar aNumberValue = require('./_a-number-value');\nvar $toPrecision = 1.0.toPrecision;\n\n$export($export.P + $export.F * ($fails(function () {\n // IE7-\n return $toPrecision.call(1, undefined) !== '1';\n}) || !$fails(function () {\n // V8 ~ Android 4.3-\n $toPrecision.call({});\n})), 'Number', {\n toPrecision: function toPrecision(precision) {\n var that = aNumberValue(this, 'Number#toPrecision: incorrect invocation!');\n return precision === undefined ? $toPrecision.call(that) : $toPrecision.call(that, precision);\n }\n});\n","// 20.1.2.1 Number.EPSILON\nvar $export = require('./_export');\n\n$export($export.S, 'Number', { EPSILON: Math.pow(2, -52) });\n","// 20.1.2.2 Number.isFinite(number)\nvar $export = require('./_export');\nvar _isFinite = require('./_global').isFinite;\n\n$export($export.S, 'Number', {\n isFinite: function isFinite(it) {\n return typeof it == 'number' && _isFinite(it);\n }\n});\n","// 20.1.2.3 Number.isInteger(number)\nvar $export = require('./_export');\n\n$export($export.S, 'Number', { isInteger: require('./_is-integer') });\n","// 20.1.2.4 Number.isNaN(number)\nvar $export = require('./_export');\n\n$export($export.S, 'Number', {\n isNaN: function isNaN(number) {\n // eslint-disable-next-line no-self-compare\n return number != number;\n }\n});\n","// 20.1.2.5 Number.isSafeInteger(number)\nvar $export = require('./_export');\nvar isInteger = require('./_is-integer');\nvar abs = Math.abs;\n\n$export($export.S, 'Number', {\n isSafeInteger: function isSafeInteger(number) {\n return isInteger(number) && abs(number) <= 0x1fffffffffffff;\n }\n});\n","// 20.1.2.6 Number.MAX_SAFE_INTEGER\nvar $export = require('./_export');\n\n$export($export.S, 'Number', { MAX_SAFE_INTEGER: 0x1fffffffffffff });\n","// 20.1.2.10 Number.MIN_SAFE_INTEGER\nvar $export = require('./_export');\n\n$export($export.S, 'Number', { MIN_SAFE_INTEGER: -0x1fffffffffffff });\n","var $export = require('./_export');\nvar $parseFloat = require('./_parse-float');\n// 20.1.2.12 Number.parseFloat(string)\n$export($export.S + $export.F * (Number.parseFloat != $parseFloat), 'Number', { parseFloat: $parseFloat });\n","var $export = require('./_export');\nvar $parseInt = require('./_parse-int');\n// 20.1.2.13 Number.parseInt(string, radix)\n$export($export.S + $export.F * (Number.parseInt != $parseInt), 'Number', { parseInt: $parseInt });\n","// 20.2.2.3 Math.acosh(x)\nvar $export = require('./_export');\nvar log1p = require('./_math-log1p');\nvar sqrt = Math.sqrt;\nvar $acosh = Math.acosh;\n\n$export($export.S + $export.F * !($acosh\n // V8 bug: https://code.google.com/p/v8/issues/detail?id=3509\n && Math.floor($acosh(Number.MAX_VALUE)) == 710\n // Tor Browser bug: Math.acosh(Infinity) -> NaN\n && $acosh(Infinity) == Infinity\n), 'Math', {\n acosh: function acosh(x) {\n return (x = +x) < 1 ? NaN : x > 94906265.62425156\n ? Math.log(x) + Math.LN2\n : log1p(x - 1 + sqrt(x - 1) * sqrt(x + 1));\n }\n});\n","// 20.2.2.5 Math.asinh(x)\nvar $export = require('./_export');\nvar $asinh = Math.asinh;\n\nfunction asinh(x) {\n return !isFinite(x = +x) || x == 0 ? x : x < 0 ? -asinh(-x) : Math.log(x + Math.sqrt(x * x + 1));\n}\n\n// Tor Browser bug: Math.asinh(0) -> -0\n$export($export.S + $export.F * !($asinh && 1 / $asinh(0) > 0), 'Math', { asinh: asinh });\n","// 20.2.2.7 Math.atanh(x)\nvar $export = require('./_export');\nvar $atanh = Math.atanh;\n\n// Tor Browser bug: Math.atanh(-0) -> 0\n$export($export.S + $export.F * !($atanh && 1 / $atanh(-0) < 0), 'Math', {\n atanh: function atanh(x) {\n return (x = +x) == 0 ? x : Math.log((1 + x) / (1 - x)) / 2;\n }\n});\n","// 20.2.2.9 Math.cbrt(x)\nvar $export = require('./_export');\nvar sign = require('./_math-sign');\n\n$export($export.S, 'Math', {\n cbrt: function cbrt(x) {\n return sign(x = +x) * Math.pow(Math.abs(x), 1 / 3);\n }\n});\n","// 20.2.2.11 Math.clz32(x)\nvar $export = require('./_export');\n\n$export($export.S, 'Math', {\n clz32: function clz32(x) {\n return (x >>>= 0) ? 31 - Math.floor(Math.log(x + 0.5) * Math.LOG2E) : 32;\n }\n});\n","// 20.2.2.12 Math.cosh(x)\nvar $export = require('./_export');\nvar exp = Math.exp;\n\n$export($export.S, 'Math', {\n cosh: function cosh(x) {\n return (exp(x = +x) + exp(-x)) / 2;\n }\n});\n","// 20.2.2.14 Math.expm1(x)\nvar $export = require('./_export');\nvar $expm1 = require('./_math-expm1');\n\n$export($export.S + $export.F * ($expm1 != Math.expm1), 'Math', { expm1: $expm1 });\n","// 20.2.2.16 Math.fround(x)\nvar $export = require('./_export');\n\n$export($export.S, 'Math', { fround: require('./_math-fround') });\n","// 20.2.2.16 Math.fround(x)\nvar sign = require('./_math-sign');\nvar pow = Math.pow;\nvar EPSILON = pow(2, -52);\nvar EPSILON32 = pow(2, -23);\nvar MAX32 = pow(2, 127) * (2 - EPSILON32);\nvar MIN32 = pow(2, -126);\n\nvar roundTiesToEven = function (n) {\n return n + 1 / EPSILON - 1 / EPSILON;\n};\n\nmodule.exports = Math.fround || function fround(x) {\n var $abs = Math.abs(x);\n var $sign = sign(x);\n var a, result;\n if ($abs < MIN32) return $sign * roundTiesToEven($abs / MIN32 / EPSILON32) * MIN32 * EPSILON32;\n a = (1 + EPSILON32 / EPSILON) * $abs;\n result = a - (a - $abs);\n // eslint-disable-next-line no-self-compare\n if (result > MAX32 || result != result) return $sign * Infinity;\n return $sign * result;\n};\n","// 20.2.2.17 Math.hypot([value1[, value2[, … ]]])\nvar $export = require('./_export');\nvar abs = Math.abs;\n\n$export($export.S, 'Math', {\n hypot: function hypot(value1, value2) { // eslint-disable-line no-unused-vars\n var sum = 0;\n var i = 0;\n var aLen = arguments.length;\n var larg = 0;\n var arg, div;\n while (i < aLen) {\n arg = abs(arguments[i++]);\n if (larg < arg) {\n div = larg / arg;\n sum = sum * div * div + 1;\n larg = arg;\n } else if (arg > 0) {\n div = arg / larg;\n sum += div * div;\n } else sum += arg;\n }\n return larg === Infinity ? Infinity : larg * Math.sqrt(sum);\n }\n});\n","// 20.2.2.18 Math.imul(x, y)\nvar $export = require('./_export');\nvar $imul = Math.imul;\n\n// some WebKit versions fails with big numbers, some has wrong arity\n$export($export.S + $export.F * require('./_fails')(function () {\n return $imul(0xffffffff, 5) != -5 || $imul.length != 2;\n}), 'Math', {\n imul: function imul(x, y) {\n var UINT16 = 0xffff;\n var xn = +x;\n var yn = +y;\n var xl = UINT16 & xn;\n var yl = UINT16 & yn;\n return 0 | xl * yl + ((UINT16 & xn >>> 16) * yl + xl * (UINT16 & yn >>> 16) << 16 >>> 0);\n }\n});\n","// 20.2.2.21 Math.log10(x)\nvar $export = require('./_export');\n\n$export($export.S, 'Math', {\n log10: function log10(x) {\n return Math.log(x) * Math.LOG10E;\n }\n});\n","// 20.2.2.20 Math.log1p(x)\nvar $export = require('./_export');\n\n$export($export.S, 'Math', { log1p: require('./_math-log1p') });\n","// 20.2.2.22 Math.log2(x)\nvar $export = require('./_export');\n\n$export($export.S, 'Math', {\n log2: function log2(x) {\n return Math.log(x) / Math.LN2;\n }\n});\n","// 20.2.2.28 Math.sign(x)\nvar $export = require('./_export');\n\n$export($export.S, 'Math', { sign: require('./_math-sign') });\n","// 20.2.2.30 Math.sinh(x)\nvar $export = require('./_export');\nvar expm1 = require('./_math-expm1');\nvar exp = Math.exp;\n\n// V8 near Chromium 38 has a problem with very small numbers\n$export($export.S + $export.F * require('./_fails')(function () {\n return !Math.sinh(-2e-17) != -2e-17;\n}), 'Math', {\n sinh: function sinh(x) {\n return Math.abs(x = +x) < 1\n ? (expm1(x) - expm1(-x)) / 2\n : (exp(x - 1) - exp(-x - 1)) * (Math.E / 2);\n }\n});\n","// 20.2.2.33 Math.tanh(x)\nvar $export = require('./_export');\nvar expm1 = require('./_math-expm1');\nvar exp = Math.exp;\n\n$export($export.S, 'Math', {\n tanh: function tanh(x) {\n var a = expm1(x = +x);\n var b = expm1(-x);\n return a == Infinity ? 1 : b == Infinity ? -1 : (a - b) / (exp(x) + exp(-x));\n }\n});\n","// 20.2.2.34 Math.trunc(x)\nvar $export = require('./_export');\n\n$export($export.S, 'Math', {\n trunc: function trunc(it) {\n return (it > 0 ? Math.floor : Math.ceil)(it);\n }\n});\n","var $export = require('./_export');\nvar toAbsoluteIndex = require('./_to-absolute-index');\nvar fromCharCode = String.fromCharCode;\nvar $fromCodePoint = String.fromCodePoint;\n\n// length should be 1, old FF problem\n$export($export.S + $export.F * (!!$fromCodePoint && $fromCodePoint.length != 1), 'String', {\n // 21.1.2.2 String.fromCodePoint(...codePoints)\n fromCodePoint: function fromCodePoint(x) { // eslint-disable-line no-unused-vars\n var res = [];\n var aLen = arguments.length;\n var i = 0;\n var code;\n while (aLen > i) {\n code = +arguments[i++];\n if (toAbsoluteIndex(code, 0x10ffff) !== code) throw RangeError(code + ' is not a valid code point');\n res.push(code < 0x10000\n ? fromCharCode(code)\n : fromCharCode(((code -= 0x10000) >> 10) + 0xd800, code % 0x400 + 0xdc00)\n );\n } return res.join('');\n }\n});\n","var $export = require('./_export');\nvar toIObject = require('./_to-iobject');\nvar toLength = require('./_to-length');\n\n$export($export.S, 'String', {\n // 21.1.2.4 String.raw(callSite, ...substitutions)\n raw: function raw(callSite) {\n var tpl = toIObject(callSite.raw);\n var len = toLength(tpl.length);\n var aLen = arguments.length;\n var res = [];\n var i = 0;\n while (len > i) {\n res.push(String(tpl[i++]));\n if (i < aLen) res.push(String(arguments[i]));\n } return res.join('');\n }\n});\n","'use strict';\n// 21.1.3.25 String.prototype.trim()\nrequire('./_string-trim')('trim', function ($trim) {\n return function trim() {\n return $trim(this, 3);\n };\n});\n","'use strict';\nvar $at = require('./_string-at')(true);\n\n// 21.1.3.27 String.prototype[@@iterator]()\nrequire('./_iter-define')(String, 'String', function (iterated) {\n this._t = String(iterated); // target\n this._i = 0; // next index\n// 21.1.5.2.1 %StringIteratorPrototype%.next()\n}, function () {\n var O = this._t;\n var index = this._i;\n var point;\n if (index >= O.length) return { value: undefined, done: true };\n point = $at(O, index);\n this._i += point.length;\n return { value: point, done: false };\n});\n","'use strict';\nvar $export = require('./_export');\nvar $at = require('./_string-at')(false);\n$export($export.P, 'String', {\n // 21.1.3.3 String.prototype.codePointAt(pos)\n codePointAt: function codePointAt(pos) {\n return $at(this, pos);\n }\n});\n","// 21.1.3.6 String.prototype.endsWith(searchString [, endPosition])\n'use strict';\nvar $export = require('./_export');\nvar toLength = require('./_to-length');\nvar context = require('./_string-context');\nvar ENDS_WITH = 'endsWith';\nvar $endsWith = ''[ENDS_WITH];\n\n$export($export.P + $export.F * require('./_fails-is-regexp')(ENDS_WITH), 'String', {\n endsWith: function endsWith(searchString /* , endPosition = @length */) {\n var that = context(this, searchString, ENDS_WITH);\n var endPosition = arguments.length > 1 ? arguments[1] : undefined;\n var len = toLength(that.length);\n var end = endPosition === undefined ? len : Math.min(toLength(endPosition), len);\n var search = String(searchString);\n return $endsWith\n ? $endsWith.call(that, search, end)\n : that.slice(end - search.length, end) === search;\n }\n});\n","// 21.1.3.7 String.prototype.includes(searchString, position = 0)\n'use strict';\nvar $export = require('./_export');\nvar context = require('./_string-context');\nvar INCLUDES = 'includes';\n\n$export($export.P + $export.F * require('./_fails-is-regexp')(INCLUDES), 'String', {\n includes: function includes(searchString /* , position = 0 */) {\n return !!~context(this, searchString, INCLUDES)\n .indexOf(searchString, arguments.length > 1 ? arguments[1] : undefined);\n }\n});\n","var $export = require('./_export');\n\n$export($export.P, 'String', {\n // 21.1.3.13 String.prototype.repeat(count)\n repeat: require('./_string-repeat')\n});\n","// 21.1.3.18 String.prototype.startsWith(searchString [, position ])\n'use strict';\nvar $export = require('./_export');\nvar toLength = require('./_to-length');\nvar context = require('./_string-context');\nvar STARTS_WITH = 'startsWith';\nvar $startsWith = ''[STARTS_WITH];\n\n$export($export.P + $export.F * require('./_fails-is-regexp')(STARTS_WITH), 'String', {\n startsWith: function startsWith(searchString /* , position = 0 */) {\n var that = context(this, searchString, STARTS_WITH);\n var index = toLength(Math.min(arguments.length > 1 ? arguments[1] : undefined, that.length));\n var search = String(searchString);\n return $startsWith\n ? $startsWith.call(that, search, index)\n : that.slice(index, index + search.length) === search;\n }\n});\n","'use strict';\n// B.2.3.2 String.prototype.anchor(name)\nrequire('./_string-html')('anchor', function (createHTML) {\n return function anchor(name) {\n return createHTML(this, 'a', 'name', name);\n };\n});\n","'use strict';\n// B.2.3.3 String.prototype.big()\nrequire('./_string-html')('big', function (createHTML) {\n return function big() {\n return createHTML(this, 'big', '', '');\n };\n});\n","'use strict';\n// B.2.3.4 String.prototype.blink()\nrequire('./_string-html')('blink', function (createHTML) {\n return function blink() {\n return createHTML(this, 'blink', '', '');\n };\n});\n","'use strict';\n// B.2.3.5 String.prototype.bold()\nrequire('./_string-html')('bold', function (createHTML) {\n return function bold() {\n return createHTML(this, 'b', '', '');\n };\n});\n","'use strict';\n// B.2.3.6 String.prototype.fixed()\nrequire('./_string-html')('fixed', function (createHTML) {\n return function fixed() {\n return createHTML(this, 'tt', '', '');\n };\n});\n","'use strict';\n// B.2.3.7 String.prototype.fontcolor(color)\nrequire('./_string-html')('fontcolor', function (createHTML) {\n return function fontcolor(color) {\n return createHTML(this, 'font', 'color', color);\n };\n});\n","'use strict';\n// B.2.3.8 String.prototype.fontsize(size)\nrequire('./_string-html')('fontsize', function (createHTML) {\n return function fontsize(size) {\n return createHTML(this, 'font', 'size', size);\n };\n});\n","'use strict';\n// B.2.3.9 String.prototype.italics()\nrequire('./_string-html')('italics', function (createHTML) {\n return function italics() {\n return createHTML(this, 'i', '', '');\n };\n});\n","'use strict';\n// B.2.3.10 String.prototype.link(url)\nrequire('./_string-html')('link', function (createHTML) {\n return function link(url) {\n return createHTML(this, 'a', 'href', url);\n };\n});\n","'use strict';\n// B.2.3.11 String.prototype.small()\nrequire('./_string-html')('small', function (createHTML) {\n return function small() {\n return createHTML(this, 'small', '', '');\n };\n});\n","'use strict';\n// B.2.3.12 String.prototype.strike()\nrequire('./_string-html')('strike', function (createHTML) {\n return function strike() {\n return createHTML(this, 'strike', '', '');\n };\n});\n","'use strict';\n// B.2.3.13 String.prototype.sub()\nrequire('./_string-html')('sub', function (createHTML) {\n return function sub() {\n return createHTML(this, 'sub', '', '');\n };\n});\n","'use strict';\n// B.2.3.14 String.prototype.sup()\nrequire('./_string-html')('sup', function (createHTML) {\n return function sup() {\n return createHTML(this, 'sup', '', '');\n };\n});\n","// 20.3.3.1 / 15.9.4.4 Date.now()\nvar $export = require('./_export');\n\n$export($export.S, 'Date', { now: function () { return new Date().getTime(); } });\n","'use strict';\nvar $export = require('./_export');\nvar toObject = require('./_to-object');\nvar toPrimitive = require('./_to-primitive');\n\n$export($export.P + $export.F * require('./_fails')(function () {\n return new Date(NaN).toJSON() !== null\n || Date.prototype.toJSON.call({ toISOString: function () { return 1; } }) !== 1;\n}), 'Date', {\n // eslint-disable-next-line no-unused-vars\n toJSON: function toJSON(key) {\n var O = toObject(this);\n var pv = toPrimitive(O);\n return typeof pv == 'number' && !isFinite(pv) ? null : O.toISOString();\n }\n});\n","// 20.3.4.36 / 15.9.5.43 Date.prototype.toISOString()\nvar $export = require('./_export');\nvar toISOString = require('./_date-to-iso-string');\n\n// PhantomJS / old WebKit has a broken implementations\n$export($export.P + $export.F * (Date.prototype.toISOString !== toISOString), 'Date', {\n toISOString: toISOString\n});\n","'use strict';\n// 20.3.4.36 / 15.9.5.43 Date.prototype.toISOString()\nvar fails = require('./_fails');\nvar getTime = Date.prototype.getTime;\nvar $toISOString = Date.prototype.toISOString;\n\nvar lz = function (num) {\n return num > 9 ? num : '0' + num;\n};\n\n// PhantomJS / old WebKit has a broken implementations\nmodule.exports = (fails(function () {\n return $toISOString.call(new Date(-5e13 - 1)) != '0385-07-25T07:06:39.999Z';\n}) || !fails(function () {\n $toISOString.call(new Date(NaN));\n})) ? function toISOString() {\n if (!isFinite(getTime.call(this))) throw RangeError('Invalid time value');\n var d = this;\n var y = d.getUTCFullYear();\n var m = d.getUTCMilliseconds();\n var s = y < 0 ? '-' : y > 9999 ? '+' : '';\n return s + ('00000' + Math.abs(y)).slice(s ? -6 : -4) +\n '-' + lz(d.getUTCMonth() + 1) + '-' + lz(d.getUTCDate()) +\n 'T' + lz(d.getUTCHours()) + ':' + lz(d.getUTCMinutes()) +\n ':' + lz(d.getUTCSeconds()) + '.' + (m > 99 ? m : '0' + lz(m)) + 'Z';\n} : $toISOString;\n","var DateProto = Date.prototype;\nvar INVALID_DATE = 'Invalid Date';\nvar TO_STRING = 'toString';\nvar $toString = DateProto[TO_STRING];\nvar getTime = DateProto.getTime;\nif (new Date(NaN) + '' != INVALID_DATE) {\n require('./_redefine')(DateProto, TO_STRING, function toString() {\n var value = getTime.call(this);\n // eslint-disable-next-line no-self-compare\n return value === value ? $toString.call(this) : INVALID_DATE;\n });\n}\n","var TO_PRIMITIVE = require('./_wks')('toPrimitive');\nvar proto = Date.prototype;\n\nif (!(TO_PRIMITIVE in proto)) require('./_hide')(proto, TO_PRIMITIVE, require('./_date-to-primitive'));\n","'use strict';\nvar anObject = require('./_an-object');\nvar toPrimitive = require('./_to-primitive');\nvar NUMBER = 'number';\n\nmodule.exports = function (hint) {\n if (hint !== 'string' && hint !== NUMBER && hint !== 'default') throw TypeError('Incorrect hint');\n return toPrimitive(anObject(this), hint != NUMBER);\n};\n","// 22.1.2.2 / 15.4.3.2 Array.isArray(arg)\nvar $export = require('./_export');\n\n$export($export.S, 'Array', { isArray: require('./_is-array') });\n","'use strict';\nvar ctx = require('./_ctx');\nvar $export = require('./_export');\nvar toObject = require('./_to-object');\nvar call = require('./_iter-call');\nvar isArrayIter = require('./_is-array-iter');\nvar toLength = require('./_to-length');\nvar createProperty = require('./_create-property');\nvar getIterFn = require('./core.get-iterator-method');\n\n$export($export.S + $export.F * !require('./_iter-detect')(function (iter) { Array.from(iter); }), 'Array', {\n // 22.1.2.1 Array.from(arrayLike, mapfn = undefined, thisArg = undefined)\n from: function from(arrayLike /* , mapfn = undefined, thisArg = undefined */) {\n var O = toObject(arrayLike);\n var C = typeof this == 'function' ? this : Array;\n var aLen = arguments.length;\n var mapfn = aLen > 1 ? arguments[1] : undefined;\n var mapping = mapfn !== undefined;\n var index = 0;\n var iterFn = getIterFn(O);\n var length, result, step, iterator;\n if (mapping) mapfn = ctx(mapfn, aLen > 2 ? arguments[2] : undefined, 2);\n // if object isn't iterable or it's array with default iterator - use simple case\n if (iterFn != undefined && !(C == Array && isArrayIter(iterFn))) {\n for (iterator = iterFn.call(O), result = new C(); !(step = iterator.next()).done; index++) {\n createProperty(result, index, mapping ? call(iterator, mapfn, [step.value, index], true) : step.value);\n }\n } else {\n length = toLength(O.length);\n for (result = new C(length); length > index; index++) {\n createProperty(result, index, mapping ? mapfn(O[index], index) : O[index]);\n }\n }\n result.length = index;\n return result;\n }\n});\n","'use strict';\nvar $export = require('./_export');\nvar createProperty = require('./_create-property');\n\n// WebKit Array.of isn't generic\n$export($export.S + $export.F * require('./_fails')(function () {\n function F() { /* empty */ }\n return !(Array.of.call(F) instanceof F);\n}), 'Array', {\n // 22.1.2.3 Array.of( ...items)\n of: function of(/* ...args */) {\n var index = 0;\n var aLen = arguments.length;\n var result = new (typeof this == 'function' ? this : Array)(aLen);\n while (aLen > index) createProperty(result, index, arguments[index++]);\n result.length = aLen;\n return result;\n }\n});\n","'use strict';\n// 22.1.3.13 Array.prototype.join(separator)\nvar $export = require('./_export');\nvar toIObject = require('./_to-iobject');\nvar arrayJoin = [].join;\n\n// fallback for not array-like strings\n$export($export.P + $export.F * (require('./_iobject') != Object || !require('./_strict-method')(arrayJoin)), 'Array', {\n join: function join(separator) {\n return arrayJoin.call(toIObject(this), separator === undefined ? ',' : separator);\n }\n});\n","'use strict';\nvar $export = require('./_export');\nvar html = require('./_html');\nvar cof = require('./_cof');\nvar toAbsoluteIndex = require('./_to-absolute-index');\nvar toLength = require('./_to-length');\nvar arraySlice = [].slice;\n\n// fallback for not array-like ES3 strings and DOM objects\n$export($export.P + $export.F * require('./_fails')(function () {\n if (html) arraySlice.call(html);\n}), 'Array', {\n slice: function slice(begin, end) {\n var len = toLength(this.length);\n var klass = cof(this);\n end = end === undefined ? len : end;\n if (klass == 'Array') return arraySlice.call(this, begin, end);\n var start = toAbsoluteIndex(begin, len);\n var upTo = toAbsoluteIndex(end, len);\n var size = toLength(upTo - start);\n var cloned = new Array(size);\n var i = 0;\n for (; i < size; i++) cloned[i] = klass == 'String'\n ? this.charAt(start + i)\n : this[start + i];\n return cloned;\n }\n});\n","'use strict';\nvar $export = require('./_export');\nvar aFunction = require('./_a-function');\nvar toObject = require('./_to-object');\nvar fails = require('./_fails');\nvar $sort = [].sort;\nvar test = [1, 2, 3];\n\n$export($export.P + $export.F * (fails(function () {\n // IE8-\n test.sort(undefined);\n}) || !fails(function () {\n // V8 bug\n test.sort(null);\n // Old WebKit\n}) || !require('./_strict-method')($sort)), 'Array', {\n // 22.1.3.25 Array.prototype.sort(comparefn)\n sort: function sort(comparefn) {\n return comparefn === undefined\n ? $sort.call(toObject(this))\n : $sort.call(toObject(this), aFunction(comparefn));\n }\n});\n","'use strict';\nvar $export = require('./_export');\nvar $forEach = require('./_array-methods')(0);\nvar STRICT = require('./_strict-method')([].forEach, true);\n\n$export($export.P + $export.F * !STRICT, 'Array', {\n // 22.1.3.10 / 15.4.4.18 Array.prototype.forEach(callbackfn [, thisArg])\n forEach: function forEach(callbackfn /* , thisArg */) {\n return $forEach(this, callbackfn, arguments[1]);\n }\n});\n","var isObject = require('./_is-object');\nvar isArray = require('./_is-array');\nvar SPECIES = require('./_wks')('species');\n\nmodule.exports = function (original) {\n var C;\n if (isArray(original)) {\n C = original.constructor;\n // cross-realm fallback\n if (typeof C == 'function' && (C === Array || isArray(C.prototype))) C = undefined;\n if (isObject(C)) {\n C = C[SPECIES];\n if (C === null) C = undefined;\n }\n } return C === undefined ? Array : C;\n};\n","'use strict';\nvar $export = require('./_export');\nvar $map = require('./_array-methods')(1);\n\n$export($export.P + $export.F * !require('./_strict-method')([].map, true), 'Array', {\n // 22.1.3.15 / 15.4.4.19 Array.prototype.map(callbackfn [, thisArg])\n map: function map(callbackfn /* , thisArg */) {\n return $map(this, callbackfn, arguments[1]);\n }\n});\n","'use strict';\nvar $export = require('./_export');\nvar $filter = require('./_array-methods')(2);\n\n$export($export.P + $export.F * !require('./_strict-method')([].filter, true), 'Array', {\n // 22.1.3.7 / 15.4.4.20 Array.prototype.filter(callbackfn [, thisArg])\n filter: function filter(callbackfn /* , thisArg */) {\n return $filter(this, callbackfn, arguments[1]);\n }\n});\n","'use strict';\nvar $export = require('./_export');\nvar $some = require('./_array-methods')(3);\n\n$export($export.P + $export.F * !require('./_strict-method')([].some, true), 'Array', {\n // 22.1.3.23 / 15.4.4.17 Array.prototype.some(callbackfn [, thisArg])\n some: function some(callbackfn /* , thisArg */) {\n return $some(this, callbackfn, arguments[1]);\n }\n});\n","'use strict';\nvar $export = require('./_export');\nvar $every = require('./_array-methods')(4);\n\n$export($export.P + $export.F * !require('./_strict-method')([].every, true), 'Array', {\n // 22.1.3.5 / 15.4.4.16 Array.prototype.every(callbackfn [, thisArg])\n every: function every(callbackfn /* , thisArg */) {\n return $every(this, callbackfn, arguments[1]);\n }\n});\n","'use strict';\nvar $export = require('./_export');\nvar $reduce = require('./_array-reduce');\n\n$export($export.P + $export.F * !require('./_strict-method')([].reduce, true), 'Array', {\n // 22.1.3.18 / 15.4.4.21 Array.prototype.reduce(callbackfn [, initialValue])\n reduce: function reduce(callbackfn /* , initialValue */) {\n return $reduce(this, callbackfn, arguments.length, arguments[1], false);\n }\n});\n","'use strict';\nvar $export = require('./_export');\nvar $reduce = require('./_array-reduce');\n\n$export($export.P + $export.F * !require('./_strict-method')([].reduceRight, true), 'Array', {\n // 22.1.3.19 / 15.4.4.22 Array.prototype.reduceRight(callbackfn [, initialValue])\n reduceRight: function reduceRight(callbackfn /* , initialValue */) {\n return $reduce(this, callbackfn, arguments.length, arguments[1], true);\n }\n});\n","'use strict';\nvar $export = require('./_export');\nvar $indexOf = require('./_array-includes')(false);\nvar $native = [].indexOf;\nvar NEGATIVE_ZERO = !!$native && 1 / [1].indexOf(1, -0) < 0;\n\n$export($export.P + $export.F * (NEGATIVE_ZERO || !require('./_strict-method')($native)), 'Array', {\n // 22.1.3.11 / 15.4.4.14 Array.prototype.indexOf(searchElement [, fromIndex])\n indexOf: function indexOf(searchElement /* , fromIndex = 0 */) {\n return NEGATIVE_ZERO\n // convert -0 to +0\n ? $native.apply(this, arguments) || 0\n : $indexOf(this, searchElement, arguments[1]);\n }\n});\n","'use strict';\nvar $export = require('./_export');\nvar toIObject = require('./_to-iobject');\nvar toInteger = require('./_to-integer');\nvar toLength = require('./_to-length');\nvar $native = [].lastIndexOf;\nvar NEGATIVE_ZERO = !!$native && 1 / [1].lastIndexOf(1, -0) < 0;\n\n$export($export.P + $export.F * (NEGATIVE_ZERO || !require('./_strict-method')($native)), 'Array', {\n // 22.1.3.14 / 15.4.4.15 Array.prototype.lastIndexOf(searchElement [, fromIndex])\n lastIndexOf: function lastIndexOf(searchElement /* , fromIndex = @[*-1] */) {\n // convert -0 to +0\n if (NEGATIVE_ZERO) return $native.apply(this, arguments) || 0;\n var O = toIObject(this);\n var length = toLength(O.length);\n var index = length - 1;\n if (arguments.length > 1) index = Math.min(index, toInteger(arguments[1]));\n if (index < 0) index = length + index;\n for (;index >= 0; index--) if (index in O) if (O[index] === searchElement) return index || 0;\n return -1;\n }\n});\n","// 22.1.3.3 Array.prototype.copyWithin(target, start, end = this.length)\nvar $export = require('./_export');\n\n$export($export.P, 'Array', { copyWithin: require('./_array-copy-within') });\n\nrequire('./_add-to-unscopables')('copyWithin');\n","// 22.1.3.6 Array.prototype.fill(value, start = 0, end = this.length)\nvar $export = require('./_export');\n\n$export($export.P, 'Array', { fill: require('./_array-fill') });\n\nrequire('./_add-to-unscopables')('fill');\n","'use strict';\n// 22.1.3.8 Array.prototype.find(predicate, thisArg = undefined)\nvar $export = require('./_export');\nvar $find = require('./_array-methods')(5);\nvar KEY = 'find';\nvar forced = true;\n// Shouldn't skip holes\nif (KEY in []) Array(1)[KEY](function () { forced = false; });\n$export($export.P + $export.F * forced, 'Array', {\n find: function find(callbackfn /* , that = undefined */) {\n return $find(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n }\n});\nrequire('./_add-to-unscopables')(KEY);\n","'use strict';\n// 22.1.3.9 Array.prototype.findIndex(predicate, thisArg = undefined)\nvar $export = require('./_export');\nvar $find = require('./_array-methods')(6);\nvar KEY = 'findIndex';\nvar forced = true;\n// Shouldn't skip holes\nif (KEY in []) Array(1)[KEY](function () { forced = false; });\n$export($export.P + $export.F * forced, 'Array', {\n findIndex: function findIndex(callbackfn /* , that = undefined */) {\n return $find(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined);\n }\n});\nrequire('./_add-to-unscopables')(KEY);\n","require('./_set-species')('Array');\n","var global = require('./_global');\nvar inheritIfRequired = require('./_inherit-if-required');\nvar dP = require('./_object-dp').f;\nvar gOPN = require('./_object-gopn').f;\nvar isRegExp = require('./_is-regexp');\nvar $flags = require('./_flags');\nvar $RegExp = global.RegExp;\nvar Base = $RegExp;\nvar proto = $RegExp.prototype;\nvar re1 = /a/g;\nvar re2 = /a/g;\n// \"new\" creates a new object, old webkit buggy here\nvar CORRECT_NEW = new $RegExp(re1) !== re1;\n\nif (require('./_descriptors') && (!CORRECT_NEW || require('./_fails')(function () {\n re2[require('./_wks')('match')] = false;\n // RegExp constructor can alter flags and IsRegExp works correct with @@match\n return $RegExp(re1) != re1 || $RegExp(re2) == re2 || $RegExp(re1, 'i') != '/a/i';\n}))) {\n $RegExp = function RegExp(p, f) {\n var tiRE = this instanceof $RegExp;\n var piRE = isRegExp(p);\n var fiU = f === undefined;\n return !tiRE && piRE && p.constructor === $RegExp && fiU ? p\n : inheritIfRequired(CORRECT_NEW\n ? new Base(piRE && !fiU ? p.source : p, f)\n : Base((piRE = p instanceof $RegExp) ? p.source : p, piRE && fiU ? $flags.call(p) : f)\n , tiRE ? this : proto, $RegExp);\n };\n var proxy = function (key) {\n key in $RegExp || dP($RegExp, key, {\n configurable: true,\n get: function () { return Base[key]; },\n set: function (it) { Base[key] = it; }\n });\n };\n for (var keys = gOPN(Base), i = 0; keys.length > i;) proxy(keys[i++]);\n proto.constructor = $RegExp;\n $RegExp.prototype = proto;\n require('./_redefine')(global, 'RegExp', $RegExp);\n}\n\nrequire('./_set-species')('RegExp');\n","'use strict';\nrequire('./es6.regexp.flags');\nvar anObject = require('./_an-object');\nvar $flags = require('./_flags');\nvar DESCRIPTORS = require('./_descriptors');\nvar TO_STRING = 'toString';\nvar $toString = /./[TO_STRING];\n\nvar define = function (fn) {\n require('./_redefine')(RegExp.prototype, TO_STRING, fn, true);\n};\n\n// 21.2.5.14 RegExp.prototype.toString()\nif (require('./_fails')(function () { return $toString.call({ source: 'a', flags: 'b' }) != '/a/b'; })) {\n define(function toString() {\n var R = anObject(this);\n return '/'.concat(R.source, '/',\n 'flags' in R ? R.flags : !DESCRIPTORS && R instanceof RegExp ? $flags.call(R) : undefined);\n });\n// FF44- RegExp#toString has a wrong name\n} else if ($toString.name != TO_STRING) {\n define(function toString() {\n return $toString.call(this);\n });\n}\n","'use strict';\n\nvar anObject = require('./_an-object');\nvar toLength = require('./_to-length');\nvar advanceStringIndex = require('./_advance-string-index');\nvar regExpExec = require('./_regexp-exec-abstract');\n\n// @@match logic\nrequire('./_fix-re-wks')('match', 1, function (defined, MATCH, $match, maybeCallNative) {\n return [\n // `String.prototype.match` method\n // https://tc39.github.io/ecma262/#sec-string.prototype.match\n function match(regexp) {\n var O = defined(this);\n var fn = regexp == undefined ? undefined : regexp[MATCH];\n return fn !== undefined ? fn.call(regexp, O) : new RegExp(regexp)[MATCH](String(O));\n },\n // `RegExp.prototype[@@match]` method\n // https://tc39.github.io/ecma262/#sec-regexp.prototype-@@match\n function (regexp) {\n var res = maybeCallNative($match, regexp, this);\n if (res.done) return res.value;\n var rx = anObject(regexp);\n var S = String(this);\n if (!rx.global) return regExpExec(rx, S);\n var fullUnicode = rx.unicode;\n rx.lastIndex = 0;\n var A = [];\n var n = 0;\n var result;\n while ((result = regExpExec(rx, S)) !== null) {\n var matchStr = String(result[0]);\n A[n] = matchStr;\n if (matchStr === '') rx.lastIndex = advanceStringIndex(S, toLength(rx.lastIndex), fullUnicode);\n n++;\n }\n return n === 0 ? null : A;\n }\n ];\n});\n","'use strict';\n\nvar anObject = require('./_an-object');\nvar toObject = require('./_to-object');\nvar toLength = require('./_to-length');\nvar toInteger = require('./_to-integer');\nvar advanceStringIndex = require('./_advance-string-index');\nvar regExpExec = require('./_regexp-exec-abstract');\nvar max = Math.max;\nvar min = Math.min;\nvar floor = Math.floor;\nvar SUBSTITUTION_SYMBOLS = /\\$([$&`']|\\d\\d?|<[^>]*>)/g;\nvar SUBSTITUTION_SYMBOLS_NO_NAMED = /\\$([$&`']|\\d\\d?)/g;\n\nvar maybeToString = function (it) {\n return it === undefined ? it : String(it);\n};\n\n// @@replace logic\nrequire('./_fix-re-wks')('replace', 2, function (defined, REPLACE, $replace, maybeCallNative) {\n return [\n // `String.prototype.replace` method\n // https://tc39.github.io/ecma262/#sec-string.prototype.replace\n function replace(searchValue, replaceValue) {\n var O = defined(this);\n var fn = searchValue == undefined ? undefined : searchValue[REPLACE];\n return fn !== undefined\n ? fn.call(searchValue, O, replaceValue)\n : $replace.call(String(O), searchValue, replaceValue);\n },\n // `RegExp.prototype[@@replace]` method\n // https://tc39.github.io/ecma262/#sec-regexp.prototype-@@replace\n function (regexp, replaceValue) {\n var res = maybeCallNative($replace, regexp, this, replaceValue);\n if (res.done) return res.value;\n\n var rx = anObject(regexp);\n var S = String(this);\n var functionalReplace = typeof replaceValue === 'function';\n if (!functionalReplace) replaceValue = String(replaceValue);\n var global = rx.global;\n if (global) {\n var fullUnicode = rx.unicode;\n rx.lastIndex = 0;\n }\n var results = [];\n while (true) {\n var result = regExpExec(rx, S);\n if (result === null) break;\n results.push(result);\n if (!global) break;\n var matchStr = String(result[0]);\n if (matchStr === '') rx.lastIndex = advanceStringIndex(S, toLength(rx.lastIndex), fullUnicode);\n }\n var accumulatedResult = '';\n var nextSourcePosition = 0;\n for (var i = 0; i < results.length; i++) {\n result = results[i];\n var matched = String(result[0]);\n var position = max(min(toInteger(result.index), S.length), 0);\n var captures = [];\n // NOTE: This is equivalent to\n // captures = result.slice(1).map(maybeToString)\n // but for some reason `nativeSlice.call(result, 1, result.length)` (called in\n // the slice polyfill when slicing native arrays) \"doesn't work\" in safari 9 and\n // causes a crash (https://pastebin.com/N21QzeQA) when trying to debug it.\n for (var j = 1; j < result.length; j++) captures.push(maybeToString(result[j]));\n var namedCaptures = result.groups;\n if (functionalReplace) {\n var replacerArgs = [matched].concat(captures, position, S);\n if (namedCaptures !== undefined) replacerArgs.push(namedCaptures);\n var replacement = String(replaceValue.apply(undefined, replacerArgs));\n } else {\n replacement = getSubstitution(matched, S, position, captures, namedCaptures, replaceValue);\n }\n if (position >= nextSourcePosition) {\n accumulatedResult += S.slice(nextSourcePosition, position) + replacement;\n nextSourcePosition = position + matched.length;\n }\n }\n return accumulatedResult + S.slice(nextSourcePosition);\n }\n ];\n\n // https://tc39.github.io/ecma262/#sec-getsubstitution\n function getSubstitution(matched, str, position, captures, namedCaptures, replacement) {\n var tailPos = position + matched.length;\n var m = captures.length;\n var symbols = SUBSTITUTION_SYMBOLS_NO_NAMED;\n if (namedCaptures !== undefined) {\n namedCaptures = toObject(namedCaptures);\n symbols = SUBSTITUTION_SYMBOLS;\n }\n return $replace.call(replacement, symbols, function (match, ch) {\n var capture;\n switch (ch.charAt(0)) {\n case '$': return '$';\n case '&': return matched;\n case '`': return str.slice(0, position);\n case \"'\": return str.slice(tailPos);\n case '<':\n capture = namedCaptures[ch.slice(1, -1)];\n break;\n default: // \\d\\d?\n var n = +ch;\n if (n === 0) return match;\n if (n > m) {\n var f = floor(n / 10);\n if (f === 0) return match;\n if (f <= m) return captures[f - 1] === undefined ? ch.charAt(1) : captures[f - 1] + ch.charAt(1);\n return match;\n }\n capture = captures[n - 1];\n }\n return capture === undefined ? '' : capture;\n });\n }\n});\n","'use strict';\n\nvar anObject = require('./_an-object');\nvar sameValue = require('./_same-value');\nvar regExpExec = require('./_regexp-exec-abstract');\n\n// @@search logic\nrequire('./_fix-re-wks')('search', 1, function (defined, SEARCH, $search, maybeCallNative) {\n return [\n // `String.prototype.search` method\n // https://tc39.github.io/ecma262/#sec-string.prototype.search\n function search(regexp) {\n var O = defined(this);\n var fn = regexp == undefined ? undefined : regexp[SEARCH];\n return fn !== undefined ? fn.call(regexp, O) : new RegExp(regexp)[SEARCH](String(O));\n },\n // `RegExp.prototype[@@search]` method\n // https://tc39.github.io/ecma262/#sec-regexp.prototype-@@search\n function (regexp) {\n var res = maybeCallNative($search, regexp, this);\n if (res.done) return res.value;\n var rx = anObject(regexp);\n var S = String(this);\n var previousLastIndex = rx.lastIndex;\n if (!sameValue(previousLastIndex, 0)) rx.lastIndex = 0;\n var result = regExpExec(rx, S);\n if (!sameValue(rx.lastIndex, previousLastIndex)) rx.lastIndex = previousLastIndex;\n return result === null ? -1 : result.index;\n }\n ];\n});\n","'use strict';\n\nvar isRegExp = require('./_is-regexp');\nvar anObject = require('./_an-object');\nvar speciesConstructor = require('./_species-constructor');\nvar advanceStringIndex = require('./_advance-string-index');\nvar toLength = require('./_to-length');\nvar callRegExpExec = require('./_regexp-exec-abstract');\nvar regexpExec = require('./_regexp-exec');\nvar fails = require('./_fails');\nvar $min = Math.min;\nvar $push = [].push;\nvar $SPLIT = 'split';\nvar LENGTH = 'length';\nvar LAST_INDEX = 'lastIndex';\nvar MAX_UINT32 = 0xffffffff;\n\n// babel-minify transpiles RegExp('x', 'y') -> /x/y and it causes SyntaxError\nvar SUPPORTS_Y = !fails(function () { RegExp(MAX_UINT32, 'y'); });\n\n// @@split logic\nrequire('./_fix-re-wks')('split', 2, function (defined, SPLIT, $split, maybeCallNative) {\n var internalSplit;\n if (\n 'abbc'[$SPLIT](/(b)*/)[1] == 'c' ||\n 'test'[$SPLIT](/(?:)/, -1)[LENGTH] != 4 ||\n 'ab'[$SPLIT](/(?:ab)*/)[LENGTH] != 2 ||\n '.'[$SPLIT](/(.?)(.?)/)[LENGTH] != 4 ||\n '.'[$SPLIT](/()()/)[LENGTH] > 1 ||\n ''[$SPLIT](/.?/)[LENGTH]\n ) {\n // based on es5-shim implementation, need to rework it\n internalSplit = function (separator, limit) {\n var string = String(this);\n if (separator === undefined && limit === 0) return [];\n // If `separator` is not a regex, use native split\n if (!isRegExp(separator)) return $split.call(string, separator, limit);\n var output = [];\n var flags = (separator.ignoreCase ? 'i' : '') +\n (separator.multiline ? 'm' : '') +\n (separator.unicode ? 'u' : '') +\n (separator.sticky ? 'y' : '');\n var lastLastIndex = 0;\n var splitLimit = limit === undefined ? MAX_UINT32 : limit >>> 0;\n // Make `global` and avoid `lastIndex` issues by working with a copy\n var separatorCopy = new RegExp(separator.source, flags + 'g');\n var match, lastIndex, lastLength;\n while (match = regexpExec.call(separatorCopy, string)) {\n lastIndex = separatorCopy[LAST_INDEX];\n if (lastIndex > lastLastIndex) {\n output.push(string.slice(lastLastIndex, match.index));\n if (match[LENGTH] > 1 && match.index < string[LENGTH]) $push.apply(output, match.slice(1));\n lastLength = match[0][LENGTH];\n lastLastIndex = lastIndex;\n if (output[LENGTH] >= splitLimit) break;\n }\n if (separatorCopy[LAST_INDEX] === match.index) separatorCopy[LAST_INDEX]++; // Avoid an infinite loop\n }\n if (lastLastIndex === string[LENGTH]) {\n if (lastLength || !separatorCopy.test('')) output.push('');\n } else output.push(string.slice(lastLastIndex));\n return output[LENGTH] > splitLimit ? output.slice(0, splitLimit) : output;\n };\n // Chakra, V8\n } else if ('0'[$SPLIT](undefined, 0)[LENGTH]) {\n internalSplit = function (separator, limit) {\n return separator === undefined && limit === 0 ? [] : $split.call(this, separator, limit);\n };\n } else {\n internalSplit = $split;\n }\n\n return [\n // `String.prototype.split` method\n // https://tc39.github.io/ecma262/#sec-string.prototype.split\n function split(separator, limit) {\n var O = defined(this);\n var splitter = separator == undefined ? undefined : separator[SPLIT];\n return splitter !== undefined\n ? splitter.call(separator, O, limit)\n : internalSplit.call(String(O), separator, limit);\n },\n // `RegExp.prototype[@@split]` method\n // https://tc39.github.io/ecma262/#sec-regexp.prototype-@@split\n //\n // NOTE: This cannot be properly polyfilled in engines that don't support\n // the 'y' flag.\n function (regexp, limit) {\n var res = maybeCallNative(internalSplit, regexp, this, limit, internalSplit !== $split);\n if (res.done) return res.value;\n\n var rx = anObject(regexp);\n var S = String(this);\n var C = speciesConstructor(rx, RegExp);\n\n var unicodeMatching = rx.unicode;\n var flags = (rx.ignoreCase ? 'i' : '') +\n (rx.multiline ? 'm' : '') +\n (rx.unicode ? 'u' : '') +\n (SUPPORTS_Y ? 'y' : 'g');\n\n // ^(? + rx + ) is needed, in combination with some S slicing, to\n // simulate the 'y' flag.\n var splitter = new C(SUPPORTS_Y ? rx : '^(?:' + rx.source + ')', flags);\n var lim = limit === undefined ? MAX_UINT32 : limit >>> 0;\n if (lim === 0) return [];\n if (S.length === 0) return callRegExpExec(splitter, S) === null ? [S] : [];\n var p = 0;\n var q = 0;\n var A = [];\n while (q < S.length) {\n splitter.lastIndex = SUPPORTS_Y ? q : 0;\n var z = callRegExpExec(splitter, SUPPORTS_Y ? S : S.slice(q));\n var e;\n if (\n z === null ||\n (e = $min(toLength(splitter.lastIndex + (SUPPORTS_Y ? 0 : q)), S.length)) === p\n ) {\n q = advanceStringIndex(S, q, unicodeMatching);\n } else {\n A.push(S.slice(p, q));\n if (A.length === lim) return A;\n for (var i = 1; i <= z.length - 1; i++) {\n A.push(z[i]);\n if (A.length === lim) return A;\n }\n q = p = e;\n }\n }\n A.push(S.slice(p));\n return A;\n }\n ];\n});\n","var global = require('./_global');\nvar macrotask = require('./_task').set;\nvar Observer = global.MutationObserver || global.WebKitMutationObserver;\nvar process = global.process;\nvar Promise = global.Promise;\nvar isNode = require('./_cof')(process) == 'process';\n\nmodule.exports = function () {\n var head, last, notify;\n\n var flush = function () {\n var parent, fn;\n if (isNode && (parent = process.domain)) parent.exit();\n while (head) {\n fn = head.fn;\n head = head.next;\n try {\n fn();\n } catch (e) {\n if (head) notify();\n else last = undefined;\n throw e;\n }\n } last = undefined;\n if (parent) parent.enter();\n };\n\n // Node.js\n if (isNode) {\n notify = function () {\n process.nextTick(flush);\n };\n // browsers with MutationObserver, except iOS Safari - https://github.com/zloirock/core-js/issues/339\n } else if (Observer && !(global.navigator && global.navigator.standalone)) {\n var toggle = true;\n var node = document.createTextNode('');\n new Observer(flush).observe(node, { characterData: true }); // eslint-disable-line no-new\n notify = function () {\n node.data = toggle = !toggle;\n };\n // environments with maybe non-completely correct, but existent Promise\n } else if (Promise && Promise.resolve) {\n // Promise.resolve without an argument throws an error in LG WebOS 2\n var promise = Promise.resolve(undefined);\n notify = function () {\n promise.then(flush);\n };\n // for other environments - macrotask based on:\n // - setImmediate\n // - MessageChannel\n // - window.postMessag\n // - onreadystatechange\n // - setTimeout\n } else {\n notify = function () {\n // strange IE + webpack dev server bug - use .call(global)\n macrotask.call(global, flush);\n };\n }\n\n return function (fn) {\n var task = { fn: fn, next: undefined };\n if (last) last.next = task;\n if (!head) {\n head = task;\n notify();\n } last = task;\n };\n};\n","module.exports = function (exec) {\n try {\n return { e: false, v: exec() };\n } catch (e) {\n return { e: true, v: e };\n }\n};\n","'use strict';\nvar strong = require('./_collection-strong');\nvar validate = require('./_validate-collection');\nvar MAP = 'Map';\n\n// 23.1 Map Objects\nmodule.exports = require('./_collection')(MAP, function (get) {\n return function Map() { return get(this, arguments.length > 0 ? arguments[0] : undefined); };\n}, {\n // 23.1.3.6 Map.prototype.get(key)\n get: function get(key) {\n var entry = strong.getEntry(validate(this, MAP), key);\n return entry && entry.v;\n },\n // 23.1.3.9 Map.prototype.set(key, value)\n set: function set(key, value) {\n return strong.def(validate(this, MAP), key === 0 ? 0 : key, value);\n }\n}, strong, true);\n","'use strict';\nvar strong = require('./_collection-strong');\nvar validate = require('./_validate-collection');\nvar SET = 'Set';\n\n// 23.2 Set Objects\nmodule.exports = require('./_collection')(SET, function (get) {\n return function Set() { return get(this, arguments.length > 0 ? arguments[0] : undefined); };\n}, {\n // 23.2.3.1 Set.prototype.add(value)\n add: function add(value) {\n return strong.def(validate(this, SET), value = value === 0 ? 0 : value, value);\n }\n}, strong);\n","'use strict';\nvar global = require('./_global');\nvar each = require('./_array-methods')(0);\nvar redefine = require('./_redefine');\nvar meta = require('./_meta');\nvar assign = require('./_object-assign');\nvar weak = require('./_collection-weak');\nvar isObject = require('./_is-object');\nvar validate = require('./_validate-collection');\nvar NATIVE_WEAK_MAP = require('./_validate-collection');\nvar IS_IE11 = !global.ActiveXObject && 'ActiveXObject' in global;\nvar WEAK_MAP = 'WeakMap';\nvar getWeak = meta.getWeak;\nvar isExtensible = Object.isExtensible;\nvar uncaughtFrozenStore = weak.ufstore;\nvar InternalMap;\n\nvar wrapper = function (get) {\n return function WeakMap() {\n return get(this, arguments.length > 0 ? arguments[0] : undefined);\n };\n};\n\nvar methods = {\n // 23.3.3.3 WeakMap.prototype.get(key)\n get: function get(key) {\n if (isObject(key)) {\n var data = getWeak(key);\n if (data === true) return uncaughtFrozenStore(validate(this, WEAK_MAP)).get(key);\n return data ? data[this._i] : undefined;\n }\n },\n // 23.3.3.5 WeakMap.prototype.set(key, value)\n set: function set(key, value) {\n return weak.def(validate(this, WEAK_MAP), key, value);\n }\n};\n\n// 23.3 WeakMap Objects\nvar $WeakMap = module.exports = require('./_collection')(WEAK_MAP, wrapper, methods, weak, true, true);\n\n// IE11 WeakMap frozen keys fix\nif (NATIVE_WEAK_MAP && IS_IE11) {\n InternalMap = weak.getConstructor(wrapper, WEAK_MAP);\n assign(InternalMap.prototype, methods);\n meta.NEED = true;\n each(['delete', 'has', 'get', 'set'], function (key) {\n var proto = $WeakMap.prototype;\n var method = proto[key];\n redefine(proto, key, function (a, b) {\n // store frozen objects on internal weakmap shim\n if (isObject(a) && !isExtensible(a)) {\n if (!this._f) this._f = new InternalMap();\n var result = this._f[key](a, b);\n return key == 'set' ? this : result;\n // store all the rest on native weakmap\n } return method.call(this, a, b);\n });\n });\n}\n","'use strict';\nvar weak = require('./_collection-weak');\nvar validate = require('./_validate-collection');\nvar WEAK_SET = 'WeakSet';\n\n// 23.4 WeakSet Objects\nrequire('./_collection')(WEAK_SET, function (get) {\n return function WeakSet() { return get(this, arguments.length > 0 ? arguments[0] : undefined); };\n}, {\n // 23.4.3.1 WeakSet.prototype.add(value)\n add: function add(value) {\n return weak.def(validate(this, WEAK_SET), value, true);\n }\n}, weak, false, true);\n","'use strict';\nvar $export = require('./_export');\nvar $typed = require('./_typed');\nvar buffer = require('./_typed-buffer');\nvar anObject = require('./_an-object');\nvar toAbsoluteIndex = require('./_to-absolute-index');\nvar toLength = require('./_to-length');\nvar isObject = require('./_is-object');\nvar ArrayBuffer = require('./_global').ArrayBuffer;\nvar speciesConstructor = require('./_species-constructor');\nvar $ArrayBuffer = buffer.ArrayBuffer;\nvar $DataView = buffer.DataView;\nvar $isView = $typed.ABV && ArrayBuffer.isView;\nvar $slice = $ArrayBuffer.prototype.slice;\nvar VIEW = $typed.VIEW;\nvar ARRAY_BUFFER = 'ArrayBuffer';\n\n$export($export.G + $export.W + $export.F * (ArrayBuffer !== $ArrayBuffer), { ArrayBuffer: $ArrayBuffer });\n\n$export($export.S + $export.F * !$typed.CONSTR, ARRAY_BUFFER, {\n // 24.1.3.1 ArrayBuffer.isView(arg)\n isView: function isView(it) {\n return $isView && $isView(it) || isObject(it) && VIEW in it;\n }\n});\n\n$export($export.P + $export.U + $export.F * require('./_fails')(function () {\n return !new $ArrayBuffer(2).slice(1, undefined).byteLength;\n}), ARRAY_BUFFER, {\n // 24.1.4.3 ArrayBuffer.prototype.slice(start, end)\n slice: function slice(start, end) {\n if ($slice !== undefined && end === undefined) return $slice.call(anObject(this), start); // FF fix\n var len = anObject(this).byteLength;\n var first = toAbsoluteIndex(start, len);\n var fin = toAbsoluteIndex(end === undefined ? len : end, len);\n var result = new (speciesConstructor(this, $ArrayBuffer))(toLength(fin - first));\n var viewS = new $DataView(this);\n var viewT = new $DataView(result);\n var index = 0;\n while (first < fin) {\n viewT.setUint8(index++, viewS.getUint8(first++));\n } return result;\n }\n});\n\nrequire('./_set-species')(ARRAY_BUFFER);\n","var $export = require('./_export');\n$export($export.G + $export.W + $export.F * !require('./_typed').ABV, {\n DataView: require('./_typed-buffer').DataView\n});\n","require('./_typed-array')('Int8', 1, function (init) {\n return function Int8Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n","require('./_typed-array')('Uint8', 1, function (init) {\n return function Uint8Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n","require('./_typed-array')('Uint8', 1, function (init) {\n return function Uint8ClampedArray(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n}, true);\n","require('./_typed-array')('Int16', 2, function (init) {\n return function Int16Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n","require('./_typed-array')('Uint16', 2, function (init) {\n return function Uint16Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n","require('./_typed-array')('Int32', 4, function (init) {\n return function Int32Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n","require('./_typed-array')('Uint32', 4, function (init) {\n return function Uint32Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n","require('./_typed-array')('Float32', 4, function (init) {\n return function Float32Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n","require('./_typed-array')('Float64', 8, function (init) {\n return function Float64Array(data, byteOffset, length) {\n return init(this, data, byteOffset, length);\n };\n});\n","// 26.1.1 Reflect.apply(target, thisArgument, argumentsList)\nvar $export = require('./_export');\nvar aFunction = require('./_a-function');\nvar anObject = require('./_an-object');\nvar rApply = (require('./_global').Reflect || {}).apply;\nvar fApply = Function.apply;\n// MS Edge argumentsList argument is optional\n$export($export.S + $export.F * !require('./_fails')(function () {\n rApply(function () { /* empty */ });\n}), 'Reflect', {\n apply: function apply(target, thisArgument, argumentsList) {\n var T = aFunction(target);\n var L = anObject(argumentsList);\n return rApply ? rApply(T, thisArgument, L) : fApply.call(T, thisArgument, L);\n }\n});\n","// 26.1.2 Reflect.construct(target, argumentsList [, newTarget])\nvar $export = require('./_export');\nvar create = require('./_object-create');\nvar aFunction = require('./_a-function');\nvar anObject = require('./_an-object');\nvar isObject = require('./_is-object');\nvar fails = require('./_fails');\nvar bind = require('./_bind');\nvar rConstruct = (require('./_global').Reflect || {}).construct;\n\n// MS Edge supports only 2 arguments and argumentsList argument is optional\n// FF Nightly sets third argument as `new.target`, but does not create `this` from it\nvar NEW_TARGET_BUG = fails(function () {\n function F() { /* empty */ }\n return !(rConstruct(function () { /* empty */ }, [], F) instanceof F);\n});\nvar ARGS_BUG = !fails(function () {\n rConstruct(function () { /* empty */ });\n});\n\n$export($export.S + $export.F * (NEW_TARGET_BUG || ARGS_BUG), 'Reflect', {\n construct: function construct(Target, args /* , newTarget */) {\n aFunction(Target);\n anObject(args);\n var newTarget = arguments.length < 3 ? Target : aFunction(arguments[2]);\n if (ARGS_BUG && !NEW_TARGET_BUG) return rConstruct(Target, args, newTarget);\n if (Target == newTarget) {\n // w/o altered newTarget, optimization for 0-4 arguments\n switch (args.length) {\n case 0: return new Target();\n case 1: return new Target(args[0]);\n case 2: return new Target(args[0], args[1]);\n case 3: return new Target(args[0], args[1], args[2]);\n case 4: return new Target(args[0], args[1], args[2], args[3]);\n }\n // w/o altered newTarget, lot of arguments case\n var $args = [null];\n $args.push.apply($args, args);\n return new (bind.apply(Target, $args))();\n }\n // with altered newTarget, not support built-in constructors\n var proto = newTarget.prototype;\n var instance = create(isObject(proto) ? proto : Object.prototype);\n var result = Function.apply.call(Target, instance, args);\n return isObject(result) ? result : instance;\n }\n});\n","// 26.1.3 Reflect.defineProperty(target, propertyKey, attributes)\nvar dP = require('./_object-dp');\nvar $export = require('./_export');\nvar anObject = require('./_an-object');\nvar toPrimitive = require('./_to-primitive');\n\n// MS Edge has broken Reflect.defineProperty - throwing instead of returning false\n$export($export.S + $export.F * require('./_fails')(function () {\n // eslint-disable-next-line no-undef\n Reflect.defineProperty(dP.f({}, 1, { value: 1 }), 1, { value: 2 });\n}), 'Reflect', {\n defineProperty: function defineProperty(target, propertyKey, attributes) {\n anObject(target);\n propertyKey = toPrimitive(propertyKey, true);\n anObject(attributes);\n try {\n dP.f(target, propertyKey, attributes);\n return true;\n } catch (e) {\n return false;\n }\n }\n});\n","// 26.1.4 Reflect.deleteProperty(target, propertyKey)\nvar $export = require('./_export');\nvar gOPD = require('./_object-gopd').f;\nvar anObject = require('./_an-object');\n\n$export($export.S, 'Reflect', {\n deleteProperty: function deleteProperty(target, propertyKey) {\n var desc = gOPD(anObject(target), propertyKey);\n return desc && !desc.configurable ? false : delete target[propertyKey];\n }\n});\n","'use strict';\n// 26.1.5 Reflect.enumerate(target)\nvar $export = require('./_export');\nvar anObject = require('./_an-object');\nvar Enumerate = function (iterated) {\n this._t = anObject(iterated); // target\n this._i = 0; // next index\n var keys = this._k = []; // keys\n var key;\n for (key in iterated) keys.push(key);\n};\nrequire('./_iter-create')(Enumerate, 'Object', function () {\n var that = this;\n var keys = that._k;\n var key;\n do {\n if (that._i >= keys.length) return { value: undefined, done: true };\n } while (!((key = keys[that._i++]) in that._t));\n return { value: key, done: false };\n});\n\n$export($export.S, 'Reflect', {\n enumerate: function enumerate(target) {\n return new Enumerate(target);\n }\n});\n","// 26.1.6 Reflect.get(target, propertyKey [, receiver])\nvar gOPD = require('./_object-gopd');\nvar getPrototypeOf = require('./_object-gpo');\nvar has = require('./_has');\nvar $export = require('./_export');\nvar isObject = require('./_is-object');\nvar anObject = require('./_an-object');\n\nfunction get(target, propertyKey /* , receiver */) {\n var receiver = arguments.length < 3 ? target : arguments[2];\n var desc, proto;\n if (anObject(target) === receiver) return target[propertyKey];\n if (desc = gOPD.f(target, propertyKey)) return has(desc, 'value')\n ? desc.value\n : desc.get !== undefined\n ? desc.get.call(receiver)\n : undefined;\n if (isObject(proto = getPrototypeOf(target))) return get(proto, propertyKey, receiver);\n}\n\n$export($export.S, 'Reflect', { get: get });\n","// 26.1.7 Reflect.getOwnPropertyDescriptor(target, propertyKey)\nvar gOPD = require('./_object-gopd');\nvar $export = require('./_export');\nvar anObject = require('./_an-object');\n\n$export($export.S, 'Reflect', {\n getOwnPropertyDescriptor: function getOwnPropertyDescriptor(target, propertyKey) {\n return gOPD.f(anObject(target), propertyKey);\n }\n});\n","// 26.1.8 Reflect.getPrototypeOf(target)\nvar $export = require('./_export');\nvar getProto = require('./_object-gpo');\nvar anObject = require('./_an-object');\n\n$export($export.S, 'Reflect', {\n getPrototypeOf: function getPrototypeOf(target) {\n return getProto(anObject(target));\n }\n});\n","// 26.1.9 Reflect.has(target, propertyKey)\nvar $export = require('./_export');\n\n$export($export.S, 'Reflect', {\n has: function has(target, propertyKey) {\n return propertyKey in target;\n }\n});\n","// 26.1.10 Reflect.isExtensible(target)\nvar $export = require('./_export');\nvar anObject = require('./_an-object');\nvar $isExtensible = Object.isExtensible;\n\n$export($export.S, 'Reflect', {\n isExtensible: function isExtensible(target) {\n anObject(target);\n return $isExtensible ? $isExtensible(target) : true;\n }\n});\n","// 26.1.11 Reflect.ownKeys(target)\nvar $export = require('./_export');\n\n$export($export.S, 'Reflect', { ownKeys: require('./_own-keys') });\n","// 26.1.12 Reflect.preventExtensions(target)\nvar $export = require('./_export');\nvar anObject = require('./_an-object');\nvar $preventExtensions = Object.preventExtensions;\n\n$export($export.S, 'Reflect', {\n preventExtensions: function preventExtensions(target) {\n anObject(target);\n try {\n if ($preventExtensions) $preventExtensions(target);\n return true;\n } catch (e) {\n return false;\n }\n }\n});\n","// 26.1.13 Reflect.set(target, propertyKey, V [, receiver])\nvar dP = require('./_object-dp');\nvar gOPD = require('./_object-gopd');\nvar getPrototypeOf = require('./_object-gpo');\nvar has = require('./_has');\nvar $export = require('./_export');\nvar createDesc = require('./_property-desc');\nvar anObject = require('./_an-object');\nvar isObject = require('./_is-object');\n\nfunction set(target, propertyKey, V /* , receiver */) {\n var receiver = arguments.length < 4 ? target : arguments[3];\n var ownDesc = gOPD.f(anObject(target), propertyKey);\n var existingDescriptor, proto;\n if (!ownDesc) {\n if (isObject(proto = getPrototypeOf(target))) {\n return set(proto, propertyKey, V, receiver);\n }\n ownDesc = createDesc(0);\n }\n if (has(ownDesc, 'value')) {\n if (ownDesc.writable === false || !isObject(receiver)) return false;\n if (existingDescriptor = gOPD.f(receiver, propertyKey)) {\n if (existingDescriptor.get || existingDescriptor.set || existingDescriptor.writable === false) return false;\n existingDescriptor.value = V;\n dP.f(receiver, propertyKey, existingDescriptor);\n } else dP.f(receiver, propertyKey, createDesc(0, V));\n return true;\n }\n return ownDesc.set === undefined ? false : (ownDesc.set.call(receiver, V), true);\n}\n\n$export($export.S, 'Reflect', { set: set });\n","// 26.1.14 Reflect.setPrototypeOf(target, proto)\nvar $export = require('./_export');\nvar setProto = require('./_set-proto');\n\nif (setProto) $export($export.S, 'Reflect', {\n setPrototypeOf: function setPrototypeOf(target, proto) {\n setProto.check(target, proto);\n try {\n setProto.set(target, proto);\n return true;\n } catch (e) {\n return false;\n }\n }\n});\n","require('../../modules/es7.array.includes');\nmodule.exports = require('../../modules/_core').Array.includes;\n","'use strict';\n// https://github.com/tc39/Array.prototype.includes\nvar $export = require('./_export');\nvar $includes = require('./_array-includes')(true);\n\n$export($export.P, 'Array', {\n includes: function includes(el /* , fromIndex = 0 */) {\n return $includes(this, el, arguments.length > 1 ? arguments[1] : undefined);\n }\n});\n\nrequire('./_add-to-unscopables')('includes');\n","require('../../modules/es7.array.flat-map');\nmodule.exports = require('../../modules/_core').Array.flatMap;\n","'use strict';\n// https://tc39.github.io/proposal-flatMap/#sec-Array.prototype.flatMap\nvar $export = require('./_export');\nvar flattenIntoArray = require('./_flatten-into-array');\nvar toObject = require('./_to-object');\nvar toLength = require('./_to-length');\nvar aFunction = require('./_a-function');\nvar arraySpeciesCreate = require('./_array-species-create');\n\n$export($export.P, 'Array', {\n flatMap: function flatMap(callbackfn /* , thisArg */) {\n var O = toObject(this);\n var sourceLen, A;\n aFunction(callbackfn);\n sourceLen = toLength(O.length);\n A = arraySpeciesCreate(O, 0);\n flattenIntoArray(A, O, O, sourceLen, 0, 1, callbackfn, arguments[1]);\n return A;\n }\n});\n\nrequire('./_add-to-unscopables')('flatMap');\n","'use strict';\n// https://tc39.github.io/proposal-flatMap/#sec-FlattenIntoArray\nvar isArray = require('./_is-array');\nvar isObject = require('./_is-object');\nvar toLength = require('./_to-length');\nvar ctx = require('./_ctx');\nvar IS_CONCAT_SPREADABLE = require('./_wks')('isConcatSpreadable');\n\nfunction flattenIntoArray(target, original, source, sourceLen, start, depth, mapper, thisArg) {\n var targetIndex = start;\n var sourceIndex = 0;\n var mapFn = mapper ? ctx(mapper, thisArg, 3) : false;\n var element, spreadable;\n\n while (sourceIndex < sourceLen) {\n if (sourceIndex in source) {\n element = mapFn ? mapFn(source[sourceIndex], sourceIndex, original) : source[sourceIndex];\n\n spreadable = false;\n if (isObject(element)) {\n spreadable = element[IS_CONCAT_SPREADABLE];\n spreadable = spreadable !== undefined ? !!spreadable : isArray(element);\n }\n\n if (spreadable && depth > 0) {\n targetIndex = flattenIntoArray(target, original, element, toLength(element.length), targetIndex, depth - 1) - 1;\n } else {\n if (targetIndex >= 0x1fffffffffffff) throw TypeError();\n target[targetIndex] = element;\n }\n\n targetIndex++;\n }\n sourceIndex++;\n }\n return targetIndex;\n}\n\nmodule.exports = flattenIntoArray;\n","require('../../modules/es7.string.pad-start');\nmodule.exports = require('../../modules/_core').String.padStart;\n","'use strict';\n// https://github.com/tc39/proposal-string-pad-start-end\nvar $export = require('./_export');\nvar $pad = require('./_string-pad');\nvar userAgent = require('./_user-agent');\n\n// https://github.com/zloirock/core-js/issues/280\nvar WEBKIT_BUG = /Version\\/10\\.\\d+(\\.\\d+)?( Mobile\\/\\w+)? Safari\\//.test(userAgent);\n\n$export($export.P + $export.F * WEBKIT_BUG, 'String', {\n padStart: function padStart(maxLength /* , fillString = ' ' */) {\n return $pad(this, maxLength, arguments.length > 1 ? arguments[1] : undefined, true);\n }\n});\n","require('../../modules/es7.string.pad-end');\nmodule.exports = require('../../modules/_core').String.padEnd;\n","'use strict';\n// https://github.com/tc39/proposal-string-pad-start-end\nvar $export = require('./_export');\nvar $pad = require('./_string-pad');\nvar userAgent = require('./_user-agent');\n\n// https://github.com/zloirock/core-js/issues/280\nvar WEBKIT_BUG = /Version\\/10\\.\\d+(\\.\\d+)?( Mobile\\/\\w+)? Safari\\//.test(userAgent);\n\n$export($export.P + $export.F * WEBKIT_BUG, 'String', {\n padEnd: function padEnd(maxLength /* , fillString = ' ' */) {\n return $pad(this, maxLength, arguments.length > 1 ? arguments[1] : undefined, false);\n }\n});\n","require('../../modules/es7.string.trim-left');\nmodule.exports = require('../../modules/_core').String.trimLeft;\n","'use strict';\n// https://github.com/sebmarkbage/ecmascript-string-left-right-trim\nrequire('./_string-trim')('trimLeft', function ($trim) {\n return function trimLeft() {\n return $trim(this, 1);\n };\n}, 'trimStart');\n","require('../../modules/es7.string.trim-right');\nmodule.exports = require('../../modules/_core').String.trimRight;\n","'use strict';\n// https://github.com/sebmarkbage/ecmascript-string-left-right-trim\nrequire('./_string-trim')('trimRight', function ($trim) {\n return function trimRight() {\n return $trim(this, 2);\n };\n}, 'trimEnd');\n","require('../../modules/es7.symbol.async-iterator');\nmodule.exports = require('../../modules/_wks-ext').f('asyncIterator');\n","require('./_wks-define')('asyncIterator');\n","require('../../modules/es7.object.get-own-property-descriptors');\nmodule.exports = require('../../modules/_core').Object.getOwnPropertyDescriptors;\n","// https://github.com/tc39/proposal-object-getownpropertydescriptors\nvar $export = require('./_export');\nvar ownKeys = require('./_own-keys');\nvar toIObject = require('./_to-iobject');\nvar gOPD = require('./_object-gopd');\nvar createProperty = require('./_create-property');\n\n$export($export.S, 'Object', {\n getOwnPropertyDescriptors: function getOwnPropertyDescriptors(object) {\n var O = toIObject(object);\n var getDesc = gOPD.f;\n var keys = ownKeys(O);\n var result = {};\n var i = 0;\n var key, desc;\n while (keys.length > i) {\n desc = getDesc(O, key = keys[i++]);\n if (desc !== undefined) createProperty(result, key, desc);\n }\n return result;\n }\n});\n","require('../../modules/es7.object.values');\nmodule.exports = require('../../modules/_core').Object.values;\n","// https://github.com/tc39/proposal-object-values-entries\nvar $export = require('./_export');\nvar $values = require('./_object-to-array')(false);\n\n$export($export.S, 'Object', {\n values: function values(it) {\n return $values(it);\n }\n});\n","require('../../modules/es7.object.entries');\nmodule.exports = require('../../modules/_core').Object.entries;\n","// https://github.com/tc39/proposal-object-values-entries\nvar $export = require('./_export');\nvar $entries = require('./_object-to-array')(true);\n\n$export($export.S, 'Object', {\n entries: function entries(it) {\n return $entries(it);\n }\n});\n","'use strict';\nrequire('../../modules/es6.promise');\nrequire('../../modules/es7.promise.finally');\nmodule.exports = require('../../modules/_core').Promise['finally'];\n","// https://github.com/tc39/proposal-promise-finally\n'use strict';\nvar $export = require('./_export');\nvar core = require('./_core');\nvar global = require('./_global');\nvar speciesConstructor = require('./_species-constructor');\nvar promiseResolve = require('./_promise-resolve');\n\n$export($export.P + $export.R, 'Promise', { 'finally': function (onFinally) {\n var C = speciesConstructor(this, core.Promise || global.Promise);\n var isFunction = typeof onFinally == 'function';\n return this.then(\n isFunction ? function (x) {\n return promiseResolve(C, onFinally()).then(function () { return x; });\n } : onFinally,\n isFunction ? function (e) {\n return promiseResolve(C, onFinally()).then(function () { throw e; });\n } : onFinally\n );\n} });\n","require('../modules/web.timers');\nrequire('../modules/web.immediate');\nrequire('../modules/web.dom.iterable');\nmodule.exports = require('../modules/_core');\n","// ie9- setTimeout & setInterval additional parameters fix\nvar global = require('./_global');\nvar $export = require('./_export');\nvar userAgent = require('./_user-agent');\nvar slice = [].slice;\nvar MSIE = /MSIE .\\./.test(userAgent); // <- dirty ie9- check\nvar wrap = function (set) {\n return function (fn, time /* , ...args */) {\n var boundArgs = arguments.length > 2;\n var args = boundArgs ? slice.call(arguments, 2) : false;\n return set(boundArgs ? function () {\n // eslint-disable-next-line no-new-func\n (typeof fn == 'function' ? fn : Function(fn)).apply(this, args);\n } : fn, time);\n };\n};\n$export($export.G + $export.B + $export.F * MSIE, {\n setTimeout: wrap(global.setTimeout),\n setInterval: wrap(global.setInterval)\n});\n","var $export = require('./_export');\nvar $task = require('./_task');\n$export($export.G + $export.B, {\n setImmediate: $task.set,\n clearImmediate: $task.clear\n});\n","var $iterators = require('./es6.array.iterator');\nvar getKeys = require('./_object-keys');\nvar redefine = require('./_redefine');\nvar global = require('./_global');\nvar hide = require('./_hide');\nvar Iterators = require('./_iterators');\nvar wks = require('./_wks');\nvar ITERATOR = wks('iterator');\nvar TO_STRING_TAG = wks('toStringTag');\nvar ArrayValues = Iterators.Array;\n\nvar DOMIterables = {\n CSSRuleList: true, // TODO: Not spec compliant, should be false.\n CSSStyleDeclaration: false,\n CSSValueList: false,\n ClientRectList: false,\n DOMRectList: false,\n DOMStringList: false,\n DOMTokenList: true,\n DataTransferItemList: false,\n FileList: false,\n HTMLAllCollection: false,\n HTMLCollection: false,\n HTMLFormElement: false,\n HTMLSelectElement: false,\n MediaList: true, // TODO: Not spec compliant, should be false.\n MimeTypeArray: false,\n NamedNodeMap: false,\n NodeList: true,\n PaintRequestList: false,\n Plugin: false,\n PluginArray: false,\n SVGLengthList: false,\n SVGNumberList: false,\n SVGPathSegList: false,\n SVGPointList: false,\n SVGStringList: false,\n SVGTransformList: false,\n SourceBufferList: false,\n StyleSheetList: true, // TODO: Not spec compliant, should be false.\n TextTrackCueList: false,\n TextTrackList: false,\n TouchList: false\n};\n\nfor (var collections = getKeys(DOMIterables), i = 0; i < collections.length; i++) {\n var NAME = collections[i];\n var explicit = DOMIterables[NAME];\n var Collection = global[NAME];\n var proto = Collection && Collection.prototype;\n var key;\n if (proto) {\n if (!proto[ITERATOR]) hide(proto, ITERATOR, ArrayValues);\n if (!proto[TO_STRING_TAG]) hide(proto, TO_STRING_TAG, NAME);\n Iterators[NAME] = ArrayValues;\n if (explicit) for (key in $iterators) if (!proto[key]) redefine(proto, key, $iterators[key], true);\n }\n}\n","/**\n * Copyright (c) 2014-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\nvar runtime = (function (exports) {\n \"use strict\";\n\n var Op = Object.prototype;\n var hasOwn = Op.hasOwnProperty;\n var undefined; // More compressible than void 0.\n var $Symbol = typeof Symbol === \"function\" ? Symbol : {};\n var iteratorSymbol = $Symbol.iterator || \"@@iterator\";\n var asyncIteratorSymbol = $Symbol.asyncIterator || \"@@asyncIterator\";\n var toStringTagSymbol = $Symbol.toStringTag || \"@@toStringTag\";\n\n function wrap(innerFn, outerFn, self, tryLocsList) {\n // If outerFn provided and outerFn.prototype is a Generator, then outerFn.prototype instanceof Generator.\n var protoGenerator = outerFn && outerFn.prototype instanceof Generator ? outerFn : Generator;\n var generator = Object.create(protoGenerator.prototype);\n var context = new Context(tryLocsList || []);\n\n // The ._invoke method unifies the implementations of the .next,\n // .throw, and .return methods.\n generator._invoke = makeInvokeMethod(innerFn, self, context);\n\n return generator;\n }\n exports.wrap = wrap;\n\n // Try/catch helper to minimize deoptimizations. Returns a completion\n // record like context.tryEntries[i].completion. This interface could\n // have been (and was previously) designed to take a closure to be\n // invoked without arguments, but in all the cases we care about we\n // already have an existing method we want to call, so there's no need\n // to create a new function object. We can even get away with assuming\n // the method takes exactly one argument, since that happens to be true\n // in every case, so we don't have to touch the arguments object. The\n // only additional allocation required is the completion record, which\n // has a stable shape and so hopefully should be cheap to allocate.\n function tryCatch(fn, obj, arg) {\n try {\n return { type: \"normal\", arg: fn.call(obj, arg) };\n } catch (err) {\n return { type: \"throw\", arg: err };\n }\n }\n\n var GenStateSuspendedStart = \"suspendedStart\";\n var GenStateSuspendedYield = \"suspendedYield\";\n var GenStateExecuting = \"executing\";\n var GenStateCompleted = \"completed\";\n\n // Returning this object from the innerFn has the same effect as\n // breaking out of the dispatch switch statement.\n var ContinueSentinel = {};\n\n // Dummy constructor functions that we use as the .constructor and\n // .constructor.prototype properties for functions that return Generator\n // objects. For full spec compliance, you may wish to configure your\n // minifier not to mangle the names of these two functions.\n function Generator() {}\n function GeneratorFunction() {}\n function GeneratorFunctionPrototype() {}\n\n // This is a polyfill for %IteratorPrototype% for environments that\n // don't natively support it.\n var IteratorPrototype = {};\n IteratorPrototype[iteratorSymbol] = function () {\n return this;\n };\n\n var getProto = Object.getPrototypeOf;\n var NativeIteratorPrototype = getProto && getProto(getProto(values([])));\n if (NativeIteratorPrototype &&\n NativeIteratorPrototype !== Op &&\n hasOwn.call(NativeIteratorPrototype, iteratorSymbol)) {\n // This environment has a native %IteratorPrototype%; use it instead\n // of the polyfill.\n IteratorPrototype = NativeIteratorPrototype;\n }\n\n var Gp = GeneratorFunctionPrototype.prototype =\n Generator.prototype = Object.create(IteratorPrototype);\n GeneratorFunction.prototype = Gp.constructor = GeneratorFunctionPrototype;\n GeneratorFunctionPrototype.constructor = GeneratorFunction;\n GeneratorFunctionPrototype[toStringTagSymbol] =\n GeneratorFunction.displayName = \"GeneratorFunction\";\n\n // Helper for defining the .next, .throw, and .return methods of the\n // Iterator interface in terms of a single ._invoke method.\n function defineIteratorMethods(prototype) {\n [\"next\", \"throw\", \"return\"].forEach(function(method) {\n prototype[method] = function(arg) {\n return this._invoke(method, arg);\n };\n });\n }\n\n exports.isGeneratorFunction = function(genFun) {\n var ctor = typeof genFun === \"function\" && genFun.constructor;\n return ctor\n ? ctor === GeneratorFunction ||\n // For the native GeneratorFunction constructor, the best we can\n // do is to check its .name property.\n (ctor.displayName || ctor.name) === \"GeneratorFunction\"\n : false;\n };\n\n exports.mark = function(genFun) {\n if (Object.setPrototypeOf) {\n Object.setPrototypeOf(genFun, GeneratorFunctionPrototype);\n } else {\n genFun.__proto__ = GeneratorFunctionPrototype;\n if (!(toStringTagSymbol in genFun)) {\n genFun[toStringTagSymbol] = \"GeneratorFunction\";\n }\n }\n genFun.prototype = Object.create(Gp);\n return genFun;\n };\n\n // Within the body of any async function, `await x` is transformed to\n // `yield regeneratorRuntime.awrap(x)`, so that the runtime can test\n // `hasOwn.call(value, \"__await\")` to determine if the yielded value is\n // meant to be awaited.\n exports.awrap = function(arg) {\n return { __await: arg };\n };\n\n function AsyncIterator(generator) {\n function invoke(method, arg, resolve, reject) {\n var record = tryCatch(generator[method], generator, arg);\n if (record.type === \"throw\") {\n reject(record.arg);\n } else {\n var result = record.arg;\n var value = result.value;\n if (value &&\n typeof value === \"object\" &&\n hasOwn.call(value, \"__await\")) {\n return Promise.resolve(value.__await).then(function(value) {\n invoke(\"next\", value, resolve, reject);\n }, function(err) {\n invoke(\"throw\", err, resolve, reject);\n });\n }\n\n return Promise.resolve(value).then(function(unwrapped) {\n // When a yielded Promise is resolved, its final value becomes\n // the .value of the Promise<{value,done}> result for the\n // current iteration.\n result.value = unwrapped;\n resolve(result);\n }, function(error) {\n // If a rejected Promise was yielded, throw the rejection back\n // into the async generator function so it can be handled there.\n return invoke(\"throw\", error, resolve, reject);\n });\n }\n }\n\n var previousPromise;\n\n function enqueue(method, arg) {\n function callInvokeWithMethodAndArg() {\n return new Promise(function(resolve, reject) {\n invoke(method, arg, resolve, reject);\n });\n }\n\n return previousPromise =\n // If enqueue has been called before, then we want to wait until\n // all previous Promises have been resolved before calling invoke,\n // so that results are always delivered in the correct order. If\n // enqueue has not been called before, then it is important to\n // call invoke immediately, without waiting on a callback to fire,\n // so that the async generator function has the opportunity to do\n // any necessary setup in a predictable way. This predictability\n // is why the Promise constructor synchronously invokes its\n // executor callback, and why async functions synchronously\n // execute code before the first await. Since we implement simple\n // async functions in terms of async generators, it is especially\n // important to get this right, even though it requires care.\n previousPromise ? previousPromise.then(\n callInvokeWithMethodAndArg,\n // Avoid propagating failures to Promises returned by later\n // invocations of the iterator.\n callInvokeWithMethodAndArg\n ) : callInvokeWithMethodAndArg();\n }\n\n // Define the unified helper method that is used to implement .next,\n // .throw, and .return (see defineIteratorMethods).\n this._invoke = enqueue;\n }\n\n defineIteratorMethods(AsyncIterator.prototype);\n AsyncIterator.prototype[asyncIteratorSymbol] = function () {\n return this;\n };\n exports.AsyncIterator = AsyncIterator;\n\n // Note that simple async functions are implemented on top of\n // AsyncIterator objects; they just return a Promise for the value of\n // the final result produced by the iterator.\n exports.async = function(innerFn, outerFn, self, tryLocsList) {\n var iter = new AsyncIterator(\n wrap(innerFn, outerFn, self, tryLocsList)\n );\n\n return exports.isGeneratorFunction(outerFn)\n ? iter // If outerFn is a generator, return the full iterator.\n : iter.next().then(function(result) {\n return result.done ? result.value : iter.next();\n });\n };\n\n function makeInvokeMethod(innerFn, self, context) {\n var state = GenStateSuspendedStart;\n\n return function invoke(method, arg) {\n if (state === GenStateExecuting) {\n throw new Error(\"Generator is already running\");\n }\n\n if (state === GenStateCompleted) {\n if (method === \"throw\") {\n throw arg;\n }\n\n // Be forgiving, per 25.3.3.3.3 of the spec:\n // https://people.mozilla.org/~jorendorff/es6-draft.html#sec-generatorresume\n return doneResult();\n }\n\n context.method = method;\n context.arg = arg;\n\n while (true) {\n var delegate = context.delegate;\n if (delegate) {\n var delegateResult = maybeInvokeDelegate(delegate, context);\n if (delegateResult) {\n if (delegateResult === ContinueSentinel) continue;\n return delegateResult;\n }\n }\n\n if (context.method === \"next\") {\n // Setting context._sent for legacy support of Babel's\n // function.sent implementation.\n context.sent = context._sent = context.arg;\n\n } else if (context.method === \"throw\") {\n if (state === GenStateSuspendedStart) {\n state = GenStateCompleted;\n throw context.arg;\n }\n\n context.dispatchException(context.arg);\n\n } else if (context.method === \"return\") {\n context.abrupt(\"return\", context.arg);\n }\n\n state = GenStateExecuting;\n\n var record = tryCatch(innerFn, self, context);\n if (record.type === \"normal\") {\n // If an exception is thrown from innerFn, we leave state ===\n // GenStateExecuting and loop back for another invocation.\n state = context.done\n ? GenStateCompleted\n : GenStateSuspendedYield;\n\n if (record.arg === ContinueSentinel) {\n continue;\n }\n\n return {\n value: record.arg,\n done: context.done\n };\n\n } else if (record.type === \"throw\") {\n state = GenStateCompleted;\n // Dispatch the exception by looping back around to the\n // context.dispatchException(context.arg) call above.\n context.method = \"throw\";\n context.arg = record.arg;\n }\n }\n };\n }\n\n // Call delegate.iterator[context.method](context.arg) and handle the\n // result, either by returning a { value, done } result from the\n // delegate iterator, or by modifying context.method and context.arg,\n // setting context.delegate to null, and returning the ContinueSentinel.\n function maybeInvokeDelegate(delegate, context) {\n var method = delegate.iterator[context.method];\n if (method === undefined) {\n // A .throw or .return when the delegate iterator has no .throw\n // method always terminates the yield* loop.\n context.delegate = null;\n\n if (context.method === \"throw\") {\n // Note: [\"return\"] must be used for ES3 parsing compatibility.\n if (delegate.iterator[\"return\"]) {\n // If the delegate iterator has a return method, give it a\n // chance to clean up.\n context.method = \"return\";\n context.arg = undefined;\n maybeInvokeDelegate(delegate, context);\n\n if (context.method === \"throw\") {\n // If maybeInvokeDelegate(context) changed context.method from\n // \"return\" to \"throw\", let that override the TypeError below.\n return ContinueSentinel;\n }\n }\n\n context.method = \"throw\";\n context.arg = new TypeError(\n \"The iterator does not provide a 'throw' method\");\n }\n\n return ContinueSentinel;\n }\n\n var record = tryCatch(method, delegate.iterator, context.arg);\n\n if (record.type === \"throw\") {\n context.method = \"throw\";\n context.arg = record.arg;\n context.delegate = null;\n return ContinueSentinel;\n }\n\n var info = record.arg;\n\n if (! info) {\n context.method = \"throw\";\n context.arg = new TypeError(\"iterator result is not an object\");\n context.delegate = null;\n return ContinueSentinel;\n }\n\n if (info.done) {\n // Assign the result of the finished delegate to the temporary\n // variable specified by delegate.resultName (see delegateYield).\n context[delegate.resultName] = info.value;\n\n // Resume execution at the desired location (see delegateYield).\n context.next = delegate.nextLoc;\n\n // If context.method was \"throw\" but the delegate handled the\n // exception, let the outer generator proceed normally. If\n // context.method was \"next\", forget context.arg since it has been\n // \"consumed\" by the delegate iterator. If context.method was\n // \"return\", allow the original .return call to continue in the\n // outer generator.\n if (context.method !== \"return\") {\n context.method = \"next\";\n context.arg = undefined;\n }\n\n } else {\n // Re-yield the result returned by the delegate method.\n return info;\n }\n\n // The delegate iterator is finished, so forget it and continue with\n // the outer generator.\n context.delegate = null;\n return ContinueSentinel;\n }\n\n // Define Generator.prototype.{next,throw,return} in terms of the\n // unified ._invoke helper method.\n defineIteratorMethods(Gp);\n\n Gp[toStringTagSymbol] = \"Generator\";\n\n // A Generator should always return itself as the iterator object when the\n // @@iterator function is called on it. Some browsers' implementations of the\n // iterator prototype chain incorrectly implement this, causing the Generator\n // object to not be returned from this call. This ensures that doesn't happen.\n // See https://github.com/facebook/regenerator/issues/274 for more details.\n Gp[iteratorSymbol] = function() {\n return this;\n };\n\n Gp.toString = function() {\n return \"[object Generator]\";\n };\n\n function pushTryEntry(locs) {\n var entry = { tryLoc: locs[0] };\n\n if (1 in locs) {\n entry.catchLoc = locs[1];\n }\n\n if (2 in locs) {\n entry.finallyLoc = locs[2];\n entry.afterLoc = locs[3];\n }\n\n this.tryEntries.push(entry);\n }\n\n function resetTryEntry(entry) {\n var record = entry.completion || {};\n record.type = \"normal\";\n delete record.arg;\n entry.completion = record;\n }\n\n function Context(tryLocsList) {\n // The root entry object (effectively a try statement without a catch\n // or a finally block) gives us a place to store values thrown from\n // locations where there is no enclosing try statement.\n this.tryEntries = [{ tryLoc: \"root\" }];\n tryLocsList.forEach(pushTryEntry, this);\n this.reset(true);\n }\n\n exports.keys = function(object) {\n var keys = [];\n for (var key in object) {\n keys.push(key);\n }\n keys.reverse();\n\n // Rather than returning an object with a next method, we keep\n // things simple and return the next function itself.\n return function next() {\n while (keys.length) {\n var key = keys.pop();\n if (key in object) {\n next.value = key;\n next.done = false;\n return next;\n }\n }\n\n // To avoid creating an additional object, we just hang the .value\n // and .done properties off the next function object itself. This\n // also ensures that the minifier will not anonymize the function.\n next.done = true;\n return next;\n };\n };\n\n function values(iterable) {\n if (iterable) {\n var iteratorMethod = iterable[iteratorSymbol];\n if (iteratorMethod) {\n return iteratorMethod.call(iterable);\n }\n\n if (typeof iterable.next === \"function\") {\n return iterable;\n }\n\n if (!isNaN(iterable.length)) {\n var i = -1, next = function next() {\n while (++i < iterable.length) {\n if (hasOwn.call(iterable, i)) {\n next.value = iterable[i];\n next.done = false;\n return next;\n }\n }\n\n next.value = undefined;\n next.done = true;\n\n return next;\n };\n\n return next.next = next;\n }\n }\n\n // Return an iterator with no values.\n return { next: doneResult };\n }\n exports.values = values;\n\n function doneResult() {\n return { value: undefined, done: true };\n }\n\n Context.prototype = {\n constructor: Context,\n\n reset: function(skipTempReset) {\n this.prev = 0;\n this.next = 0;\n // Resetting context._sent for legacy support of Babel's\n // function.sent implementation.\n this.sent = this._sent = undefined;\n this.done = false;\n this.delegate = null;\n\n this.method = \"next\";\n this.arg = undefined;\n\n this.tryEntries.forEach(resetTryEntry);\n\n if (!skipTempReset) {\n for (var name in this) {\n // Not sure about the optimal order of these conditions:\n if (name.charAt(0) === \"t\" &&\n hasOwn.call(this, name) &&\n !isNaN(+name.slice(1))) {\n this[name] = undefined;\n }\n }\n }\n },\n\n stop: function() {\n this.done = true;\n\n var rootEntry = this.tryEntries[0];\n var rootRecord = rootEntry.completion;\n if (rootRecord.type === \"throw\") {\n throw rootRecord.arg;\n }\n\n return this.rval;\n },\n\n dispatchException: function(exception) {\n if (this.done) {\n throw exception;\n }\n\n var context = this;\n function handle(loc, caught) {\n record.type = \"throw\";\n record.arg = exception;\n context.next = loc;\n\n if (caught) {\n // If the dispatched exception was caught by a catch block,\n // then let that catch block handle the exception normally.\n context.method = \"next\";\n context.arg = undefined;\n }\n\n return !! caught;\n }\n\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n var record = entry.completion;\n\n if (entry.tryLoc === \"root\") {\n // Exception thrown outside of any try block that could handle\n // it, so set the completion value of the entire function to\n // throw the exception.\n return handle(\"end\");\n }\n\n if (entry.tryLoc <= this.prev) {\n var hasCatch = hasOwn.call(entry, \"catchLoc\");\n var hasFinally = hasOwn.call(entry, \"finallyLoc\");\n\n if (hasCatch && hasFinally) {\n if (this.prev < entry.catchLoc) {\n return handle(entry.catchLoc, true);\n } else if (this.prev < entry.finallyLoc) {\n return handle(entry.finallyLoc);\n }\n\n } else if (hasCatch) {\n if (this.prev < entry.catchLoc) {\n return handle(entry.catchLoc, true);\n }\n\n } else if (hasFinally) {\n if (this.prev < entry.finallyLoc) {\n return handle(entry.finallyLoc);\n }\n\n } else {\n throw new Error(\"try statement without catch or finally\");\n }\n }\n }\n },\n\n abrupt: function(type, arg) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.tryLoc <= this.prev &&\n hasOwn.call(entry, \"finallyLoc\") &&\n this.prev < entry.finallyLoc) {\n var finallyEntry = entry;\n break;\n }\n }\n\n if (finallyEntry &&\n (type === \"break\" ||\n type === \"continue\") &&\n finallyEntry.tryLoc <= arg &&\n arg <= finallyEntry.finallyLoc) {\n // Ignore the finally entry if control is not jumping to a\n // location outside the try/catch block.\n finallyEntry = null;\n }\n\n var record = finallyEntry ? finallyEntry.completion : {};\n record.type = type;\n record.arg = arg;\n\n if (finallyEntry) {\n this.method = \"next\";\n this.next = finallyEntry.finallyLoc;\n return ContinueSentinel;\n }\n\n return this.complete(record);\n },\n\n complete: function(record, afterLoc) {\n if (record.type === \"throw\") {\n throw record.arg;\n }\n\n if (record.type === \"break\" ||\n record.type === \"continue\") {\n this.next = record.arg;\n } else if (record.type === \"return\") {\n this.rval = this.arg = record.arg;\n this.method = \"return\";\n this.next = \"end\";\n } else if (record.type === \"normal\" && afterLoc) {\n this.next = afterLoc;\n }\n\n return ContinueSentinel;\n },\n\n finish: function(finallyLoc) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.finallyLoc === finallyLoc) {\n this.complete(entry.completion, entry.afterLoc);\n resetTryEntry(entry);\n return ContinueSentinel;\n }\n }\n },\n\n \"catch\": function(tryLoc) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.tryLoc === tryLoc) {\n var record = entry.completion;\n if (record.type === \"throw\") {\n var thrown = record.arg;\n resetTryEntry(entry);\n }\n return thrown;\n }\n }\n\n // The context.catch method must only be called with a location\n // argument that corresponds to a known catch block.\n throw new Error(\"illegal catch attempt\");\n },\n\n delegateYield: function(iterable, resultName, nextLoc) {\n this.delegate = {\n iterator: values(iterable),\n resultName: resultName,\n nextLoc: nextLoc\n };\n\n if (this.method === \"next\") {\n // Deliberately forget the last sent value so that we don't\n // accidentally pass it on to the delegate.\n this.arg = undefined;\n }\n\n return ContinueSentinel;\n }\n };\n\n // Regardless of whether this script is executing as a CommonJS module\n // or not, return the runtime object so that we can declare the variable\n // regeneratorRuntime in the outer scope, which allows this module to be\n // injected easily by `bin/regenerator --include-runtime script.js`.\n return exports;\n\n}(\n // If this script is executing as a CommonJS module, use module.exports\n // as the regeneratorRuntime namespace. Otherwise create a new empty\n // object. Either way, the resulting object will be used to initialize\n // the regeneratorRuntime variable at the top of this file.\n typeof module === \"object\" ? module.exports : {}\n));\n\ntry {\n regeneratorRuntime = runtime;\n} catch (accidentalStrictMode) {\n // This module should not be running in strict mode, so the above\n // assignment should always work unless something is misconfigured. Just\n // in case runtime.js accidentally runs in strict mode, we can escape\n // strict mode using a global Function call. This could conceivably fail\n // if a Content Security Policy forbids using Function, but in that case\n // the proper solution is to fix the accidental strict mode problem. If\n // you've misconfigured your bundler to force strict mode and applied a\n // CSP to forbid Function, and you're not willing to fix either of those\n // problems, please detail your unique predicament in a GitHub issue.\n Function(\"r\", \"regeneratorRuntime = r\")(runtime);\n}\n","require('../modules/es7.global');\nmodule.exports = require('../modules/_core').global;\n","// https://github.com/tc39/proposal-global\nvar $export = require('./_export');\n\n$export($export.G, { global: require('./_global') });\n","var global = require('./_global');\nvar core = require('./_core');\nvar ctx = require('./_ctx');\nvar hide = require('./_hide');\nvar has = require('./_has');\nvar PROTOTYPE = 'prototype';\n\nvar $export = function (type, name, source) {\n var IS_FORCED = type & $export.F;\n var IS_GLOBAL = type & $export.G;\n var IS_STATIC = type & $export.S;\n var IS_PROTO = type & $export.P;\n var IS_BIND = type & $export.B;\n var IS_WRAP = type & $export.W;\n var exports = IS_GLOBAL ? core : core[name] || (core[name] = {});\n var expProto = exports[PROTOTYPE];\n var target = IS_GLOBAL ? global : IS_STATIC ? global[name] : (global[name] || {})[PROTOTYPE];\n var key, own, out;\n if (IS_GLOBAL) source = name;\n for (key in source) {\n // contains in native\n own = !IS_FORCED && target && target[key] !== undefined;\n if (own && has(exports, key)) continue;\n // export native or passed\n out = own ? target[key] : source[key];\n // prevent global pollution for namespaces\n exports[key] = IS_GLOBAL && typeof target[key] != 'function' ? source[key]\n // bind timers to global for call from export context\n : IS_BIND && own ? ctx(out, global)\n // wrap global constructors for prevent change them in library\n : IS_WRAP && target[key] == out ? (function (C) {\n var F = function (a, b, c) {\n if (this instanceof C) {\n switch (arguments.length) {\n case 0: return new C();\n case 1: return new C(a);\n case 2: return new C(a, b);\n } return new C(a, b, c);\n } return C.apply(this, arguments);\n };\n F[PROTOTYPE] = C[PROTOTYPE];\n return F;\n // make static versions for prototype methods\n })(out) : IS_PROTO && typeof out == 'function' ? ctx(Function.call, out) : out;\n // export proto methods to core.%CONSTRUCTOR%.methods.%NAME%\n if (IS_PROTO) {\n (exports.virtual || (exports.virtual = {}))[key] = out;\n // export proto methods to core.%CONSTRUCTOR%.prototype.%NAME%\n if (type & $export.R && expProto && !expProto[key]) hide(expProto, key, out);\n }\n }\n};\n// type bitmap\n$export.F = 1; // forced\n$export.G = 2; // global\n$export.S = 4; // static\n$export.P = 8; // proto\n$export.B = 16; // bind\n$export.W = 32; // wrap\n$export.U = 64; // safe\n$export.R = 128; // real proto method for `library`\nmodule.exports = $export;\n","// optional / simple context binding\nvar aFunction = require('./_a-function');\nmodule.exports = function (fn, that, length) {\n aFunction(fn);\n if (that === undefined) return fn;\n switch (length) {\n case 1: return function (a) {\n return fn.call(that, a);\n };\n case 2: return function (a, b) {\n return fn.call(that, a, b);\n };\n case 3: return function (a, b, c) {\n return fn.call(that, a, b, c);\n };\n }\n return function (/* ...args */) {\n return fn.apply(that, arguments);\n };\n};\n","module.exports = function (it) {\n if (typeof it != 'function') throw TypeError(it + ' is not a function!');\n return it;\n};\n","var dP = require('./_object-dp');\nvar createDesc = require('./_property-desc');\nmodule.exports = require('./_descriptors') ? function (object, key, value) {\n return dP.f(object, key, createDesc(1, value));\n} : function (object, key, value) {\n object[key] = value;\n return object;\n};\n","var anObject = require('./_an-object');\nvar IE8_DOM_DEFINE = require('./_ie8-dom-define');\nvar toPrimitive = require('./_to-primitive');\nvar dP = Object.defineProperty;\n\nexports.f = require('./_descriptors') ? Object.defineProperty : function defineProperty(O, P, Attributes) {\n anObject(O);\n P = toPrimitive(P, true);\n anObject(Attributes);\n if (IE8_DOM_DEFINE) try {\n return dP(O, P, Attributes);\n } catch (e) { /* empty */ }\n if ('get' in Attributes || 'set' in Attributes) throw TypeError('Accessors not supported!');\n if ('value' in Attributes) O[P] = Attributes.value;\n return O;\n};\n","var isObject = require('./_is-object');\nmodule.exports = function (it) {\n if (!isObject(it)) throw TypeError(it + ' is not an object!');\n return it;\n};\n","module.exports = !require('./_descriptors') && !require('./_fails')(function () {\n return Object.defineProperty(require('./_dom-create')('div'), 'a', { get: function () { return 7; } }).a != 7;\n});\n","var isObject = require('./_is-object');\nvar document = require('./_global').document;\n// typeof document.createElement is 'object' in old IE\nvar is = isObject(document) && isObject(document.createElement);\nmodule.exports = function (it) {\n return is ? document.createElement(it) : {};\n};\n","// 7.1.1 ToPrimitive(input [, PreferredType])\nvar isObject = require('./_is-object');\n// instead of the ES6 spec version, we didn't implement @@toPrimitive case\n// and the second argument - flag - preferred type is a string\nmodule.exports = function (it, S) {\n if (!isObject(it)) return it;\n var fn, val;\n if (S && typeof (fn = it.toString) == 'function' && !isObject(val = fn.call(it))) return val;\n if (typeof (fn = it.valueOf) == 'function' && !isObject(val = fn.call(it))) return val;\n if (!S && typeof (fn = it.toString) == 'function' && !isObject(val = fn.call(it))) return val;\n throw TypeError(\"Can't convert object to primitive value\");\n};\n","module.exports = function (bitmap, value) {\n return {\n enumerable: !(bitmap & 1),\n configurable: !(bitmap & 2),\n writable: !(bitmap & 4),\n value: value\n };\n};\n","var hasOwnProperty = {}.hasOwnProperty;\nmodule.exports = function (it, key) {\n return hasOwnProperty.call(it, key);\n};\n","\nimport BLOCKvRegion from './BLOCKvRegion'\nimport DataObject from '../DataObject'\n/**\n * This region plugin provides access to the current user's inventory.\n *\n * To get an instance, call `DataPool.region('inventory')`\n */\nexport default class InventoryRegion extends BLOCKvRegion {\n /** Plugin ID */\n static get id () { return 'inventory' }\n\n /** Constructor */\n constructor (dataPool) {\n super(dataPool)\n // Make sure we have a valid current user\n if (!this.dataPool.sessionInfo || !this.dataPool.sessionInfo.userID) {\n throw new Error('You cannot query the inventory region without being logged in.')\n }\n // Store current user ID\n this.currentUserID = this.dataPool.sessionInfo.userID\n }\n\n /** Our state key is the current user's ID */\n get stateKey () {\n return 'inventory:' + this.currentUserID\n }\n\n /** There should only be one inventory region */\n matches (id, descriptor) {\n return id === 'inventory'\n }\n\n /** Shut down this region if the current user changes */\n onSessionInfoChanged () {\n this.close()\n }\n\n /** \n * Load current state from the server. The process is as follows:\n * \n * 1. Call /hash API to get the current inventory hash, if it matches our local copy then stop.\n * 2. Call /sync API to fetch all vatom sync numbers\n * 3. For all vatoms in our db which is not returned by /sync, remove\n * 4. For all vatoms which are not in our dbb, or whose sync number is different, fetch via individual GET (batched)\n * \n * If at any point the above process throws an error, fall back to the v1 approach:\n * \n * 1. Fetch all vatoms from the /inventory API\n * 2. For any vatoms in our db not returned by /inventory, remove\n * \n */\n async load () {\n\n // Pause websocket events\n this.pauseMessages()\n\n let ids = null\n try {\n\n // Load via new method\n await this.loadV2()\n\n // Synchronize faces and actions\n await this.loadV2FacesActions()\n\n } catch (err) {\n\n // Failed! Try via the v1 method\n console.warn('[DataPool > InventoryRegion] Unable to sync via the new method! Attempting the old method now. Reason:', err)\n ids = await this.loadV1()\n\n }\n\n // Resume websocket events\n this.resumeMessages()\n return ids\n\n }\n\n /** Fetches changed faces and actions since the last vatom was modified. */\n async loadV2FacesActions() {\n\n // Get details\n let templateIDs = []\n let lastStableSync = this.objects.getExtra('last-stable-sync')\n for (let vatom of this.get(false))\n if (!templateIDs.includes(vatom.properties.template))\n templateIDs.push(vatom.properties.template)\n\n console.debug(`[DataPool > InventoryRegion] Synchronizing faces using v2 method... Starting from date ${new Date(lastStableSync).toLocaleString()} and using ${templateIDs.length} templates.`)\n\n // Server only supports a few at a time, so batch these.\n // Convert the server's data to an array of:\n //\n // { \n // operation: \"create\" | \"update\" | \"delete\",\n // type: \"face\" | \"action\",\n // id: \"...\",\n // template: \"...\",\n // data: {...}\n // }\n // \n let maxPerRequest = 100\n let allChanges = []\n for (let i = 0 ; i < templateIDs.length ; i += maxPerRequest) {\n\n // Load next page\n let data = await this.dataPool.Blockv.client.request('POST', '/v1/vatom/actions/changes', {\n templates: templateIDs.slice(i, Math.min(i + maxPerRequest, templateIDs.length)),\n since: lastStableSync\n }, true)\n\n // Add changes for each key\n for (let templateID in data.actions_changes)\n for (let change of data.actions_changes[templateID])\n allChanges.push({ operation: change.operation, template: templateID, id: change.action.name, type: \"action\", data: change.action })\n\n console.debug(`[DataPool > InventoryRegion] Fetched action changes for templates ${i} to ${Math.min(i + maxPerRequest, templateIDs.length)}`)\n\n }\n \n for (let i = 0 ; i < templateIDs.length ; i += maxPerRequest) {\n\n // Load next page\n let data = await this.dataPool.Blockv.client.request('POST', '/v1/vatom/faces/changes', {\n templates: templateIDs.slice(i, Math.min(i + maxPerRequest, templateIDs.length)),\n since: lastStableSync\n }, true)\n\n // Add changes for each key\n for (let templateID in data.faces_changes)\n for (let change of data.faces_changes[templateID])\n allChanges.push({ operation: change.operation, template: templateID, id: change.face.id, type: \"face\", data: change.face })\n\n console.debug(`[DataPool > InventoryRegion] Fetched face changes for templates ${i} to ${Math.min(i + maxPerRequest, templateIDs.length)}`)\n\n }\n\n // Apply changes\n console.debug(`[DataPool > InventoryRegion] Applying ${allChanges.length} face/action changes`)\n let clearCacheForTemplates = []\n for (let change of allChanges) {\n\n // Check if delete or update\n if (change.operation == 'delete') {\n\n // Remove it\n console.log('Removing ' + change.id)\n this.removeObjects([change.id])\n\n } else {\n\n // Create or update it\n console.log('Creating or updating ' + change.id)\n this.addObjects([new DataObject(change.type, change.id, change.data)])\n\n }\n\n // Add template\n if (!clearCacheForTemplates.includes(change.template))\n clearCacheForTemplates.push(change.template)\n\n }\n\n // Clear cache for all affected vatoms\n for (let object of this.objects.values()) {\n\n // Skip if not modified\n let objectTemplate = object.data && object.data['vAtom::vAtomType'] && object.data['vAtom::vAtomType'].template\n if (!clearCacheForTemplates.includes(objectTemplate))\n continue\n\n // Stop if no cached vatom\n if (!object.cached)\n continue\n \n // Remove cached vatom and notify\n object.cached = null\n this.emit('object.updated', object.id)\n\n }\n\n // Notify region updated, if there were changes\n if (clearCacheForTemplates.length > 0) {\n this.emit('updated')\n }\n \n // Store latest sync date\n this.objects.setExtra('last-stable-sync', Date.now())\n\n }\n\n /** Synchronize inventory using the v2 sync method, ie checking the hash, using sync numbers, etc. */\n async loadV2() {\n\n // Check SDK config to see if the new sync method is disabled\n if (this.dataPool.disableSyncV2)\n throw new Error('V2 synchronization algorithm is disabled in the config.')\n\n // Stop if no vatoms\n if (!Array.from(this.objects.values()).find(obj => obj.type == 'vatom'))\n throw new Error(`V2 synchronization is disabled if the inventory is empty, since it's faster to use the old method for initial sync.`)\n\n // Stop if faces and actions sync date has not bee set\n let lastStableSync = this.objects.getExtra('last-stable-sync')\n if (!lastStableSync)\n throw new Error(`V2 synchronization is disabled, since we don't know when the last stable sync was.`)\n\n // Get current inventory hash and compare with server's\n let currentHash = this.objects.getExtra('hash')\n let serverHashReq = await this.dataPool.Blockv.client.request('GET', '/v1/user/vatom/inventory/hash', null, true)\n if (!serverHashReq.hash)\n throw new Error('The server did not return a hash for our current inventory.')\n if (currentHash && currentHash == serverHashReq.hash)\n return console.log('[DataPool > InventoryRegion] Sync complete, our hash matches the server, no changes needed.')\n \n // We are not in sync with the server. Fetch all vatom IDs and their sync numbers\n var allSyncs = []\n var page = 0\n var nextToken = null\n while (true) {\n\n // Fetch next page of IDs\n page += 1\n console.log(`[DataPool > InventoryRegion] Fetching page ${page} of sync statuses...`)\n let res = await this.dataPool.Blockv.client.request('GET', '/v1/user/vatom/inventory/index?limit=1000' + (nextToken ? `&next_token=${nextToken}` : ''), null, true)\n\n // Add to array\n allSyncs = allSyncs.concat(res.vatoms || [])\n\n // Get next token\n nextToken = res.next_token\n if (!nextToken)\n break\n\n }\n\n // Remove vatoms which are no longer here\n let keysToRemove = Array.from(this.objects.values()).filter(obj => obj.type == 'vatom' && !allSyncs.find(sync => sync.id == obj.id)).map(obj => obj.id)\n this.removeObjects(keysToRemove)\n if (keysToRemove.length > 0)\n console.log(`DataPool > InventoryRegion] Removed ${keysToRemove.length} vatoms which are no longer in the inventory`)\n\n // Check which vatoms are out of sync\n var idsToFetch = []\n for (let syncInfo of allSyncs) {\n\n // Get local vatom\n let vatom = this.getItem(syncInfo.id, false)\n if (!vatom || vatom.sync != syncInfo.sync)\n idsToFetch.push(syncInfo.id)\n\n }\n\n // Fetch vatoms in bulk\n let VatomsPerPage = 100\n let remainingIds = idsToFetch\n while (remainingIds.length > 0) {\n\n // Fetch next 100 vatoms\n let ids = remainingIds.slice(0, VatomsPerPage)\n remainingIds = remainingIds.slice(VatomsPerPage)\n console.log(`[DataPool > InventoryRegion] Fetching ${ids.length} updates, ${remainingIds.length} vatoms left...`)\n let response = await this.dataPool.Blockv.client.request('POST', '/v1/user/vatom/get', { ids }, true)\n\n // Create list of new objects\n let newObjects = []\n\n // Add vatoms to the list\n for (let v of response.vatoms)\n newObjects.push(new DataObject('vatom', v.id, v))\n\n // Add faces to the list\n for (let f of response.faces)\n newObjects.push(new DataObject('face', f.id, f))\n\n // Add actions to the list\n for (let a of response.actions)\n newObjects.push(new DataObject('action', a.name, a))\n\n // Update the pool\n this.addObjects(newObjects)\n\n }\n\n // Done! Store the inventory hash for next sync\n this.objects.setExtra('hash', serverHashReq.hash)\n console.log(`[DataPool > InventoryRegion] Sync complete! We fetched ${idsToFetch.length} vatoms, and removed ${keysToRemove.length} vatoms.`)\n\n }\n\n /** Synchronize inventory using the v1 method, ie fetching everything using /user/vatom/inventory. */\n async loadV1() {\n\n // Go through all pages on the server, we want _everything_\n let pageCount = 1\n let loadedIDs = []\n while (true) {\n \n // Fetch all vatoms the user owns, via a Discover call\n console.debug(`[DataPool > InventoryRegion] Fetching owned vatoms, page ${pageCount}...`)\n let response = await this.dataPool.Blockv.client.request('POST', '/v1/user/vatom/inventory', { \n parent_id: \"*\",\n limit: 1000,\n page: pageCount\n }, true)\n\n // Create list of new objects\n let newObjects = []\n\n // Add vatoms to the list\n for (let v of response.vatoms) {\n loadedIDs.push(v.id)\n newObjects.push(new DataObject('vatom', v.id, v))\n }\n\n // Add faces to the list\n for (let f of response.faces) {\n loadedIDs.push(f.id)\n newObjects.push(new DataObject('face', f.id, f))\n }\n\n // Add actions to the list\n for (let a of response.actions) {\n loadedIDs.push(a.name)\n newObjects.push(new DataObject('action', a.name, a))\n }\n // Update the pool\n this.addObjects(newObjects)\n\n // Increase page index for next iteration\n pageCount += 1\n\n // Stop if no items were returned\n if (newObjects.length === 0) {\n break\n }\n }\n\n // We have completed a full sync! Store this date.\n this.objects.setExtra('last-stable-sync', Date.now())\n\n // Return array of all items\n return loadedIDs\n\n }\n\n /** @override Called on WebSocket message. */\n async processMessage (msg) {\n // Call super\n super.processMessage(msg)\n // We only handle inventory update messages after this.\n if (msg.msg_type !== 'inventory') {\n return\n }\n\n // Get vatom ID\n let vatomID = msg.payload && msg.payload.id\n if (!vatomID) {\n return console.warn(`[DataPool > BVWebSocketRegion] Got websocket message with no vatom ID in it: `, msg)\n }\n // Check if this is an incoming or outgoing vatom\n if (msg.payload.old_owner === this.currentUserID && msg.payload.new_owner !== this.currentUserID) {\n // Vatom is no longer owned by us\n this.removeObjects([vatomID])\n } else if (msg.payload.old_owner !== this.currentUserID && msg.payload.new_owner === this.currentUserID) {\n\n // Vatom is now our inventory! Fetch vatom payload\n let response = await this.dataPool.Blockv.client.request('POST', '/v1/user/vatom/get', { ids: [vatomID] }, true)\n \n // Add vatom to new objects list\n let objects = []\n response.vatoms.map(v => new DataObject('vatom', v.id, v)).forEach(v => objects.push(v))\n\n // Add faces to new objects list\n response.faces.map(f => new DataObject('face', f.id, f)).forEach(f => objects.push(f))\n\n // Add actions to new objects list\n response.actions.map(a => new DataObject('action', a.name, a)).forEach(a => objects.push(a))\n // Add new objects\n this.addObjects(objects)\n } else {\n // Logic error, old owner and new owner cannot be the same\n console.warn(`[DataPool > BVWebSocketRegion] Logic error in WebSocket message, old_owner and new_owner shouldn't be the same: ${vatomRef.id}`)\n }\n }\n\n /** \n * Override the get() function to not return vatoms with a different owner. This can happen during a preemptive transfer,\n * where the vatom is given a new owner ID but not removed entirely from this region. The host app should still see it as removed though.\n */\n get(waitUntilStable = true) {\n\n // Pass on if we should wait\n if (waitUntilStable)\n return super.get(true)\n\n // Filter array of vatoms\n return super.get(false).filter(v => v.properties.owner == this.currentUserID)\n\n }\n\n // When a preemptive change occurs, clear our stored hash so that the next inventory refresh will query with the server.\n // Normally this should not be needed since the hash on the server should change as well, but sometimes if an action fails\n // and we fail to rollback the DB we'll be stuck with an outdated vatom.\n willAdd (object) {\n super.willAdd(object)\n this.onObjectPreemptivelyChanged(object) \n }\n \n willUpdateFields (object, newData) {\n super.willUpdateFields(object, newData)\n this.onObjectPreemptivelyChanged(object) \n }\n\n willUpdateField (object, keyPath, oldValue, newValue) {\n super.willUpdateField(object, keyPath, oldValue, newValue)\n this.onObjectPreemptivelyChanged(object)\n }\n \n willRemove (objectOrID) {\n super.willRemove(objectOrID)\n this.objects.setExtra('hash', '')\n }\n \n onObjectPreemptivelyChanged(object) {\n\n // Update object's sync # so that on the next refresh we fetch it's state from the server.\n object.data.sync = -1\n\n // Clear our hash\n this.objects.setExtra('hash', '')\n\n }\n\n}\n","// Copyright (c) 2013 Pieroxy <pieroxy@pieroxy.net>\n// This work is free. You can redistribute it and/or modify it\n// under the terms of the WTFPL, Version 2\n// For more information see LICENSE.txt or http://www.wtfpl.net/\n//\n// For more information, the home page:\n// http://pieroxy.net/blog/pages/lz-string/testing.html\n//\n// LZ-based compression algorithm, version 1.4.4\nvar LZString = (function() {\n\n// private property\nvar f = String.fromCharCode;\nvar keyStrBase64 = \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=\";\nvar keyStrUriSafe = \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+-$\";\nvar baseReverseDic = {};\n\nfunction getBaseValue(alphabet, character) {\n if (!baseReverseDic[alphabet]) {\n baseReverseDic[alphabet] = {};\n for (var i=0 ; i<alphabet.length ; i++) {\n baseReverseDic[alphabet][alphabet.charAt(i)] = i;\n }\n }\n return baseReverseDic[alphabet][character];\n}\n\nvar LZString = {\n compressToBase64 : function (input) {\n if (input == null) return \"\";\n var res = LZString._compress(input, 6, function(a){return keyStrBase64.charAt(a);});\n switch (res.length % 4) { // To produce valid Base64\n default: // When could this happen ?\n case 0 : return res;\n case 1 : return res+\"===\";\n case 2 : return res+\"==\";\n case 3 : return res+\"=\";\n }\n },\n\n decompressFromBase64 : function (input) {\n if (input == null) return \"\";\n if (input == \"\") return null;\n return LZString._decompress(input.length, 32, function(index) { return getBaseValue(keyStrBase64, input.charAt(index)); });\n },\n\n compressToUTF16 : function (input) {\n if (input == null) return \"\";\n return LZString._compress(input, 15, function(a){return f(a+32);}) + \" \";\n },\n\n decompressFromUTF16: function (compressed) {\n if (compressed == null) return \"\";\n if (compressed == \"\") return null;\n return LZString._decompress(compressed.length, 16384, function(index) { return compressed.charCodeAt(index) - 32; });\n },\n\n //compress into uint8array (UCS-2 big endian format)\n compressToUint8Array: function (uncompressed) {\n var compressed = LZString.compress(uncompressed);\n var buf=new Uint8Array(compressed.length*2); // 2 bytes per character\n\n for (var i=0, TotalLen=compressed.length; i<TotalLen; i++) {\n var current_value = compressed.charCodeAt(i);\n buf[i*2] = current_value >>> 8;\n buf[i*2+1] = current_value % 256;\n }\n return buf;\n },\n\n //decompress from uint8array (UCS-2 big endian format)\n decompressFromUint8Array:function (compressed) {\n if (compressed===null || compressed===undefined){\n return LZString.decompress(compressed);\n } else {\n var buf=new Array(compressed.length/2); // 2 bytes per character\n for (var i=0, TotalLen=buf.length; i<TotalLen; i++) {\n buf[i]=compressed[i*2]*256+compressed[i*2+1];\n }\n\n var result = [];\n buf.forEach(function (c) {\n result.push(f(c));\n });\n return LZString.decompress(result.join(''));\n\n }\n\n },\n\n\n //compress into a string that is already URI encoded\n compressToEncodedURIComponent: function (input) {\n if (input == null) return \"\";\n return LZString._compress(input, 6, function(a){return keyStrUriSafe.charAt(a);});\n },\n\n //decompress from an output of compressToEncodedURIComponent\n decompressFromEncodedURIComponent:function (input) {\n if (input == null) return \"\";\n if (input == \"\") return null;\n input = input.replace(/ /g, \"+\");\n return LZString._decompress(input.length, 32, function(index) { return getBaseValue(keyStrUriSafe, input.charAt(index)); });\n },\n\n compress: function (uncompressed) {\n return LZString._compress(uncompressed, 16, function(a){return f(a);});\n },\n _compress: function (uncompressed, bitsPerChar, getCharFromInt) {\n if (uncompressed == null) return \"\";\n var i, value,\n context_dictionary= {},\n context_dictionaryToCreate= {},\n context_c=\"\",\n context_wc=\"\",\n context_w=\"\",\n context_enlargeIn= 2, // Compensate for the first entry which should not count\n context_dictSize= 3,\n context_numBits= 2,\n context_data=[],\n context_data_val=0,\n context_data_position=0,\n ii;\n\n for (ii = 0; ii < uncompressed.length; ii += 1) {\n context_c = uncompressed.charAt(ii);\n if (!Object.prototype.hasOwnProperty.call(context_dictionary,context_c)) {\n context_dictionary[context_c] = context_dictSize++;\n context_dictionaryToCreate[context_c] = true;\n }\n\n context_wc = context_w + context_c;\n if (Object.prototype.hasOwnProperty.call(context_dictionary,context_wc)) {\n context_w = context_wc;\n } else {\n if (Object.prototype.hasOwnProperty.call(context_dictionaryToCreate,context_w)) {\n if (context_w.charCodeAt(0)<256) {\n for (i=0 ; i<context_numBits ; i++) {\n context_data_val = (context_data_val << 1);\n if (context_data_position == bitsPerChar-1) {\n context_data_position = 0;\n context_data.push(getCharFromInt(context_data_val));\n context_data_val = 0;\n } else {\n context_data_position++;\n }\n }\n value = context_w.charCodeAt(0);\n for (i=0 ; i<8 ; i++) {\n context_data_val = (context_data_val << 1) | (value&1);\n if (context_data_position == bitsPerChar-1) {\n context_data_position = 0;\n context_data.push(getCharFromInt(context_data_val));\n context_data_val = 0;\n } else {\n context_data_position++;\n }\n value = value >> 1;\n }\n } else {\n value = 1;\n for (i=0 ; i<context_numBits ; i++) {\n context_data_val = (context_data_val << 1) | value;\n if (context_data_position ==bitsPerChar-1) {\n context_data_position = 0;\n context_data.push(getCharFromInt(context_data_val));\n context_data_val = 0;\n } else {\n context_data_position++;\n }\n value = 0;\n }\n value = context_w.charCodeAt(0);\n for (i=0 ; i<16 ; i++) {\n context_data_val = (context_data_val << 1) | (value&1);\n if (context_data_position == bitsPerChar-1) {\n context_data_position = 0;\n context_data.push(getCharFromInt(context_data_val));\n context_data_val = 0;\n } else {\n context_data_position++;\n }\n value = value >> 1;\n }\n }\n context_enlargeIn--;\n if (context_enlargeIn == 0) {\n context_enlargeIn = Math.pow(2, context_numBits);\n context_numBits++;\n }\n delete context_dictionaryToCreate[context_w];\n } else {\n value = context_dictionary[context_w];\n for (i=0 ; i<context_numBits ; i++) {\n context_data_val = (context_data_val << 1) | (value&1);\n if (context_data_position == bitsPerChar-1) {\n context_data_position = 0;\n context_data.push(getCharFromInt(context_data_val));\n context_data_val = 0;\n } else {\n context_data_position++;\n }\n value = value >> 1;\n }\n\n\n }\n context_enlargeIn--;\n if (context_enlargeIn == 0) {\n context_enlargeIn = Math.pow(2, context_numBits);\n context_numBits++;\n }\n // Add wc to the dictionary.\n context_dictionary[context_wc] = context_dictSize++;\n context_w = String(context_c);\n }\n }\n\n // Output the code for w.\n if (context_w !== \"\") {\n if (Object.prototype.hasOwnProperty.call(context_dictionaryToCreate,context_w)) {\n if (context_w.charCodeAt(0)<256) {\n for (i=0 ; i<context_numBits ; i++) {\n context_data_val = (context_data_val << 1);\n if (context_data_position == bitsPerChar-1) {\n context_data_position = 0;\n context_data.push(getCharFromInt(context_data_val));\n context_data_val = 0;\n } else {\n context_data_position++;\n }\n }\n value = context_w.charCodeAt(0);\n for (i=0 ; i<8 ; i++) {\n context_data_val = (context_data_val << 1) | (value&1);\n if (context_data_position == bitsPerChar-1) {\n context_data_position = 0;\n context_data.push(getCharFromInt(context_data_val));\n context_data_val = 0;\n } else {\n context_data_position++;\n }\n value = value >> 1;\n }\n } else {\n value = 1;\n for (i=0 ; i<context_numBits ; i++) {\n context_data_val = (context_data_val << 1) | value;\n if (context_data_position == bitsPerChar-1) {\n context_data_position = 0;\n context_data.push(getCharFromInt(context_data_val));\n context_data_val = 0;\n } else {\n context_data_position++;\n }\n value = 0;\n }\n value = context_w.charCodeAt(0);\n for (i=0 ; i<16 ; i++) {\n context_data_val = (context_data_val << 1) | (value&1);\n if (context_data_position == bitsPerChar-1) {\n context_data_position = 0;\n context_data.push(getCharFromInt(context_data_val));\n context_data_val = 0;\n } else {\n context_data_position++;\n }\n value = value >> 1;\n }\n }\n context_enlargeIn--;\n if (context_enlargeIn == 0) {\n context_enlargeIn = Math.pow(2, context_numBits);\n context_numBits++;\n }\n delete context_dictionaryToCreate[context_w];\n } else {\n value = context_dictionary[context_w];\n for (i=0 ; i<context_numBits ; i++) {\n context_data_val = (context_data_val << 1) | (value&1);\n if (context_data_position == bitsPerChar-1) {\n context_data_position = 0;\n context_data.push(getCharFromInt(context_data_val));\n context_data_val = 0;\n } else {\n context_data_position++;\n }\n value = value >> 1;\n }\n\n\n }\n context_enlargeIn--;\n if (context_enlargeIn == 0) {\n context_enlargeIn = Math.pow(2, context_numBits);\n context_numBits++;\n }\n }\n\n // Mark the end of the stream\n value = 2;\n for (i=0 ; i<context_numBits ; i++) {\n context_data_val = (context_data_val << 1) | (value&1);\n if (context_data_position == bitsPerChar-1) {\n context_data_position = 0;\n context_data.push(getCharFromInt(context_data_val));\n context_data_val = 0;\n } else {\n context_data_position++;\n }\n value = value >> 1;\n }\n\n // Flush the last char\n while (true) {\n context_data_val = (context_data_val << 1);\n if (context_data_position == bitsPerChar-1) {\n context_data.push(getCharFromInt(context_data_val));\n break;\n }\n else context_data_position++;\n }\n return context_data.join('');\n },\n\n decompress: function (compressed) {\n if (compressed == null) return \"\";\n if (compressed == \"\") return null;\n return LZString._decompress(compressed.length, 32768, function(index) { return compressed.charCodeAt(index); });\n },\n\n _decompress: function (length, resetValue, getNextValue) {\n var dictionary = [],\n next,\n enlargeIn = 4,\n dictSize = 4,\n numBits = 3,\n entry = \"\",\n result = [],\n i,\n w,\n bits, resb, maxpower, power,\n c,\n data = {val:getNextValue(0), position:resetValue, index:1};\n\n for (i = 0; i < 3; i += 1) {\n dictionary[i] = i;\n }\n\n bits = 0;\n maxpower = Math.pow(2,2);\n power=1;\n while (power!=maxpower) {\n resb = data.val & data.position;\n data.position >>= 1;\n if (data.position == 0) {\n data.position = resetValue;\n data.val = getNextValue(data.index++);\n }\n bits |= (resb>0 ? 1 : 0) * power;\n power <<= 1;\n }\n\n switch (next = bits) {\n case 0:\n bits = 0;\n maxpower = Math.pow(2,8);\n power=1;\n while (power!=maxpower) {\n resb = data.val & data.position;\n data.position >>= 1;\n if (data.position == 0) {\n data.position = resetValue;\n data.val = getNextValue(data.index++);\n }\n bits |= (resb>0 ? 1 : 0) * power;\n power <<= 1;\n }\n c = f(bits);\n break;\n case 1:\n bits = 0;\n maxpower = Math.pow(2,16);\n power=1;\n while (power!=maxpower) {\n resb = data.val & data.position;\n data.position >>= 1;\n if (data.position == 0) {\n data.position = resetValue;\n data.val = getNextValue(data.index++);\n }\n bits |= (resb>0 ? 1 : 0) * power;\n power <<= 1;\n }\n c = f(bits);\n break;\n case 2:\n return \"\";\n }\n dictionary[3] = c;\n w = c;\n result.push(c);\n while (true) {\n if (data.index > length) {\n return \"\";\n }\n\n bits = 0;\n maxpower = Math.pow(2,numBits);\n power=1;\n while (power!=maxpower) {\n resb = data.val & data.position;\n data.position >>= 1;\n if (data.position == 0) {\n data.position = resetValue;\n data.val = getNextValue(data.index++);\n }\n bits |= (resb>0 ? 1 : 0) * power;\n power <<= 1;\n }\n\n switch (c = bits) {\n case 0:\n bits = 0;\n maxpower = Math.pow(2,8);\n power=1;\n while (power!=maxpower) {\n resb = data.val & data.position;\n data.position >>= 1;\n if (data.position == 0) {\n data.position = resetValue;\n data.val = getNextValue(data.index++);\n }\n bits |= (resb>0 ? 1 : 0) * power;\n power <<= 1;\n }\n\n dictionary[dictSize++] = f(bits);\n c = dictSize-1;\n enlargeIn--;\n break;\n case 1:\n bits = 0;\n maxpower = Math.pow(2,16);\n power=1;\n while (power!=maxpower) {\n resb = data.val & data.position;\n data.position >>= 1;\n if (data.position == 0) {\n data.position = resetValue;\n data.val = getNextValue(data.index++);\n }\n bits |= (resb>0 ? 1 : 0) * power;\n power <<= 1;\n }\n dictionary[dictSize++] = f(bits);\n c = dictSize-1;\n enlargeIn--;\n break;\n case 2:\n return result.join('');\n }\n\n if (enlargeIn == 0) {\n enlargeIn = Math.pow(2, numBits);\n numBits++;\n }\n\n if (dictionary[c]) {\n entry = dictionary[c];\n } else {\n if (c === dictSize) {\n entry = w + w.charAt(0);\n } else {\n return null;\n }\n }\n result.push(entry);\n\n // Add w+entry[0] to the dictionary.\n dictionary[dictSize++] = w + entry.charAt(0);\n enlargeIn--;\n\n w = entry;\n\n if (enlargeIn == 0) {\n enlargeIn = Math.pow(2, numBits);\n numBits++;\n }\n\n }\n }\n};\n return LZString;\n})();\n\nif (typeof define === 'function' && define.amd) {\n define(function () { return LZString; });\n} else if( typeof module !== 'undefined' && module != null ) {\n module.exports = LZString\n}\n","'use strict'\n\nexports.byteLength = byteLength\nexports.toByteArray = toByteArray\nexports.fromByteArray = fromByteArray\n\nvar lookup = []\nvar revLookup = []\nvar Arr = typeof Uint8Array !== 'undefined' ? Uint8Array : Array\n\nvar code = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'\nfor (var i = 0, len = code.length; i < len; ++i) {\n lookup[i] = code[i]\n revLookup[code.charCodeAt(i)] = i\n}\n\n// Support decoding URL-safe base64 strings, as Node.js does.\n// See: https://en.wikipedia.org/wiki/Base64#URL_applications\nrevLookup['-'.charCodeAt(0)] = 62\nrevLookup['_'.charCodeAt(0)] = 63\n\nfunction getLens (b64) {\n var len = b64.length\n\n if (len % 4 > 0) {\n throw new Error('Invalid string. Length must be a multiple of 4')\n }\n\n // Trim off extra bytes after placeholder bytes are found\n // See: https://github.com/beatgammit/base64-js/issues/42\n var validLen = b64.indexOf('=')\n if (validLen === -1) validLen = len\n\n var placeHoldersLen = validLen === len\n ? 0\n : 4 - (validLen % 4)\n\n return [validLen, placeHoldersLen]\n}\n\n// base64 is 4/3 + up to two characters of the original data\nfunction byteLength (b64) {\n var lens = getLens(b64)\n var validLen = lens[0]\n var placeHoldersLen = lens[1]\n return ((validLen + placeHoldersLen) * 3 / 4) - placeHoldersLen\n}\n\nfunction _byteLength (b64, validLen, placeHoldersLen) {\n return ((validLen + placeHoldersLen) * 3 / 4) - placeHoldersLen\n}\n\nfunction toByteArray (b64) {\n var tmp\n var lens = getLens(b64)\n var validLen = lens[0]\n var placeHoldersLen = lens[1]\n\n var arr = new Arr(_byteLength(b64, validLen, placeHoldersLen))\n\n var curByte = 0\n\n // if there are placeholders, only get up to the last complete 4 chars\n var len = placeHoldersLen > 0\n ? validLen - 4\n : validLen\n\n for (var i = 0; i < len; i += 4) {\n tmp =\n (revLookup[b64.charCodeAt(i)] << 18) |\n (revLookup[b64.charCodeAt(i + 1)] << 12) |\n (revLookup[b64.charCodeAt(i + 2)] << 6) |\n revLookup[b64.charCodeAt(i + 3)]\n arr[curByte++] = (tmp >> 16) & 0xFF\n arr[curByte++] = (tmp >> 8) & 0xFF\n arr[curByte++] = tmp & 0xFF\n }\n\n if (placeHoldersLen === 2) {\n tmp =\n (revLookup[b64.charCodeAt(i)] << 2) |\n (revLookup[b64.charCodeAt(i + 1)] >> 4)\n arr[curByte++] = tmp & 0xFF\n }\n\n if (placeHoldersLen === 1) {\n tmp =\n (revLookup[b64.charCodeAt(i)] << 10) |\n (revLookup[b64.charCodeAt(i + 1)] << 4) |\n (revLookup[b64.charCodeAt(i + 2)] >> 2)\n arr[curByte++] = (tmp >> 8) & 0xFF\n arr[curByte++] = tmp & 0xFF\n }\n\n return arr\n}\n\nfunction tripletToBase64 (num) {\n return lookup[num >> 18 & 0x3F] +\n lookup[num >> 12 & 0x3F] +\n lookup[num >> 6 & 0x3F] +\n lookup[num & 0x3F]\n}\n\nfunction encodeChunk (uint8, start, end) {\n var tmp\n var output = []\n for (var i = start; i < end; i += 3) {\n tmp =\n ((uint8[i] << 16) & 0xFF0000) +\n ((uint8[i + 1] << 8) & 0xFF00) +\n (uint8[i + 2] & 0xFF)\n output.push(tripletToBase64(tmp))\n }\n return output.join('')\n}\n\nfunction fromByteArray (uint8) {\n var tmp\n var len = uint8.length\n var extraBytes = len % 3 // if we have 1 byte left, pad 2 bytes\n var parts = []\n var maxChunkLength = 16383 // must be multiple of 3\n\n // go through the array every three bytes, we'll deal with trailing stuff later\n for (var i = 0, len2 = len - extraBytes; i < len2; i += maxChunkLength) {\n parts.push(encodeChunk(\n uint8, i, (i + maxChunkLength) > len2 ? len2 : (i + maxChunkLength)\n ))\n }\n\n // pad the end with zeros, but make sure to not forget the extra bytes\n if (extraBytes === 1) {\n tmp = uint8[len - 1]\n parts.push(\n lookup[tmp >> 2] +\n lookup[(tmp << 4) & 0x3F] +\n '=='\n )\n } else if (extraBytes === 2) {\n tmp = (uint8[len - 2] << 8) + uint8[len - 1]\n parts.push(\n lookup[tmp >> 10] +\n lookup[(tmp >> 4) & 0x3F] +\n lookup[(tmp << 2) & 0x3F] +\n '='\n )\n }\n\n return parts.join('')\n}\n","exports.read = function (buffer, offset, isLE, mLen, nBytes) {\n var e, m\n var eLen = (nBytes * 8) - mLen - 1\n var eMax = (1 << eLen) - 1\n var eBias = eMax >> 1\n var nBits = -7\n var i = isLE ? (nBytes - 1) : 0\n var d = isLE ? -1 : 1\n var s = buffer[offset + i]\n\n i += d\n\n e = s & ((1 << (-nBits)) - 1)\n s >>= (-nBits)\n nBits += eLen\n for (; nBits > 0; e = (e * 256) + buffer[offset + i], i += d, nBits -= 8) {}\n\n m = e & ((1 << (-nBits)) - 1)\n e >>= (-nBits)\n nBits += mLen\n for (; nBits > 0; m = (m * 256) + buffer[offset + i], i += d, nBits -= 8) {}\n\n if (e === 0) {\n e = 1 - eBias\n } else if (e === eMax) {\n return m ? NaN : ((s ? -1 : 1) * Infinity)\n } else {\n m = m + Math.pow(2, mLen)\n e = e - eBias\n }\n return (s ? -1 : 1) * m * Math.pow(2, e - mLen)\n}\n\nexports.write = function (buffer, value, offset, isLE, mLen, nBytes) {\n var e, m, c\n var eLen = (nBytes * 8) - mLen - 1\n var eMax = (1 << eLen) - 1\n var eBias = eMax >> 1\n var rt = (mLen === 23 ? Math.pow(2, -24) - Math.pow(2, -77) : 0)\n var i = isLE ? 0 : (nBytes - 1)\n var d = isLE ? 1 : -1\n var s = value < 0 || (value === 0 && 1 / value < 0) ? 1 : 0\n\n value = Math.abs(value)\n\n if (isNaN(value) || value === Infinity) {\n m = isNaN(value) ? 1 : 0\n e = eMax\n } else {\n e = Math.floor(Math.log(value) / Math.LN2)\n if (value * (c = Math.pow(2, -e)) < 1) {\n e--\n c *= 2\n }\n if (e + eBias >= 1) {\n value += rt / c\n } else {\n value += rt * Math.pow(2, 1 - eBias)\n }\n if (value * c >= 2) {\n e++\n c /= 2\n }\n\n if (e + eBias >= eMax) {\n m = 0\n e = eMax\n } else if (e + eBias >= 1) {\n m = ((value * c) - 1) * Math.pow(2, mLen)\n e = e + eBias\n } else {\n m = value * Math.pow(2, eBias - 1) * Math.pow(2, mLen)\n e = 0\n }\n }\n\n for (; mLen >= 8; buffer[offset + i] = m & 0xff, i += d, m /= 256, mLen -= 8) {}\n\n e = (e << mLen) | m\n eLen += mLen\n for (; eLen > 0; buffer[offset + i] = e & 0xff, i += d, e /= 256, eLen -= 8) {}\n\n buffer[offset + i - d] |= s * 128\n}\n","(function (global, undefined) {\n \"use strict\";\n\n if (global.setImmediate) {\n return;\n }\n\n var nextHandle = 1; // Spec says greater than zero\n var tasksByHandle = {};\n var currentlyRunningATask = false;\n var doc = global.document;\n var registerImmediate;\n\n function setImmediate(callback) {\n // Callback can either be a function or a string\n if (typeof callback !== \"function\") {\n callback = new Function(\"\" + callback);\n }\n // Copy function arguments\n var args = new Array(arguments.length - 1);\n for (var i = 0; i < args.length; i++) {\n args[i] = arguments[i + 1];\n }\n // Store and register the task\n var task = { callback: callback, args: args };\n tasksByHandle[nextHandle] = task;\n registerImmediate(nextHandle);\n return nextHandle++;\n }\n\n function clearImmediate(handle) {\n delete tasksByHandle[handle];\n }\n\n function run(task) {\n var callback = task.callback;\n var args = task.args;\n switch (args.length) {\n case 0:\n callback();\n break;\n case 1:\n callback(args[0]);\n break;\n case 2:\n callback(args[0], args[1]);\n break;\n case 3:\n callback(args[0], args[1], args[2]);\n break;\n default:\n callback.apply(undefined, args);\n break;\n }\n }\n\n function runIfPresent(handle) {\n // From the spec: \"Wait until any invocations of this algorithm started before this one have completed.\"\n // So if we're currently running a task, we'll need to delay this invocation.\n if (currentlyRunningATask) {\n // Delay by doing a setTimeout. setImmediate was tried instead, but in Firefox 7 it generated a\n // \"too much recursion\" error.\n setTimeout(runIfPresent, 0, handle);\n } else {\n var task = tasksByHandle[handle];\n if (task) {\n currentlyRunningATask = true;\n try {\n run(task);\n } finally {\n clearImmediate(handle);\n currentlyRunningATask = false;\n }\n }\n }\n }\n\n function installNextTickImplementation() {\n registerImmediate = function(handle) {\n process.nextTick(function () { runIfPresent(handle); });\n };\n }\n\n function canUsePostMessage() {\n // The test against `importScripts` prevents this implementation from being installed inside a web worker,\n // where `global.postMessage` means something completely different and can't be used for this purpose.\n if (global.postMessage && !global.importScripts) {\n var postMessageIsAsynchronous = true;\n var oldOnMessage = global.onmessage;\n global.onmessage = function() {\n postMessageIsAsynchronous = false;\n };\n global.postMessage(\"\", \"*\");\n global.onmessage = oldOnMessage;\n return postMessageIsAsynchronous;\n }\n }\n\n function installPostMessageImplementation() {\n // Installs an event handler on `global` for the `message` event: see\n // * https://developer.mozilla.org/en/DOM/window.postMessage\n // * http://www.whatwg.org/specs/web-apps/current-work/multipage/comms.html#crossDocumentMessages\n\n var messagePrefix = \"setImmediate$\" + Math.random() + \"$\";\n var onGlobalMessage = function(event) {\n if (event.source === global &&\n typeof event.data === \"string\" &&\n event.data.indexOf(messagePrefix) === 0) {\n runIfPresent(+event.data.slice(messagePrefix.length));\n }\n };\n\n if (global.addEventListener) {\n global.addEventListener(\"message\", onGlobalMessage, false);\n } else {\n global.attachEvent(\"onmessage\", onGlobalMessage);\n }\n\n registerImmediate = function(handle) {\n global.postMessage(messagePrefix + handle, \"*\");\n };\n }\n\n function installMessageChannelImplementation() {\n var channel = new MessageChannel();\n channel.port1.onmessage = function(event) {\n var handle = event.data;\n runIfPresent(handle);\n };\n\n registerImmediate = function(handle) {\n channel.port2.postMessage(handle);\n };\n }\n\n function installReadyStateChangeImplementation() {\n var html = doc.documentElement;\n registerImmediate = function(handle) {\n // Create a <script> element; its readystatechange event will be fired asynchronously once it is inserted\n // into the document. Do so, thus queuing up the task. Remember to clean up once it's been called.\n var script = doc.createElement(\"script\");\n script.onreadystatechange = function () {\n runIfPresent(handle);\n script.onreadystatechange = null;\n html.removeChild(script);\n script = null;\n };\n html.appendChild(script);\n };\n }\n\n function installSetTimeoutImplementation() {\n registerImmediate = function(handle) {\n setTimeout(runIfPresent, 0, handle);\n };\n }\n\n // If supported, we should attach to the prototype of global, since that is where setTimeout et al. live.\n var attachTo = Object.getPrototypeOf && Object.getPrototypeOf(global);\n attachTo = attachTo && attachTo.setTimeout ? attachTo : global;\n\n // Don't get fooled by e.g. browserify environments.\n if ({}.toString.call(global.process) === \"[object process]\") {\n // For Node.js before 0.9\n installNextTickImplementation();\n\n } else if (canUsePostMessage()) {\n // For non-IE10 modern browsers\n installPostMessageImplementation();\n\n } else if (global.MessageChannel) {\n // For web workers, where supported\n installMessageChannelImplementation();\n\n } else if (doc && \"onreadystatechange\" in doc.createElement(\"script\")) {\n // For IE 6–8\n installReadyStateChangeImplementation();\n\n } else {\n // For older browsers\n installSetTimeoutImplementation();\n }\n\n attachTo.setImmediate = setImmediate;\n attachTo.clearImmediate = clearImmediate;\n}(typeof self === \"undefined\" ? typeof global === \"undefined\" ? this : global : self));\n","'use strict';\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar Buffer = require('safe-buffer').Buffer;\nvar util = require('util');\n\nfunction copyBuffer(src, target, offset) {\n src.copy(target, offset);\n}\n\nmodule.exports = function () {\n function BufferList() {\n _classCallCheck(this, BufferList);\n\n this.head = null;\n this.tail = null;\n this.length = 0;\n }\n\n BufferList.prototype.push = function push(v) {\n var entry = { data: v, next: null };\n if (this.length > 0) this.tail.next = entry;else this.head = entry;\n this.tail = entry;\n ++this.length;\n };\n\n BufferList.prototype.unshift = function unshift(v) {\n var entry = { data: v, next: this.head };\n if (this.length === 0) this.tail = entry;\n this.head = entry;\n ++this.length;\n };\n\n BufferList.prototype.shift = function shift() {\n if (this.length === 0) return;\n var ret = this.head.data;\n if (this.length === 1) this.head = this.tail = null;else this.head = this.head.next;\n --this.length;\n return ret;\n };\n\n BufferList.prototype.clear = function clear() {\n this.head = this.tail = null;\n this.length = 0;\n };\n\n BufferList.prototype.join = function join(s) {\n if (this.length === 0) return '';\n var p = this.head;\n var ret = '' + p.data;\n while (p = p.next) {\n ret += s + p.data;\n }return ret;\n };\n\n BufferList.prototype.concat = function concat(n) {\n if (this.length === 0) return Buffer.alloc(0);\n if (this.length === 1) return this.head.data;\n var ret = Buffer.allocUnsafe(n >>> 0);\n var p = this.head;\n var i = 0;\n while (p) {\n copyBuffer(p.data, ret, i);\n i += p.data.length;\n p = p.next;\n }\n return ret;\n };\n\n return BufferList;\n}();\n\nif (util && util.inspect && util.inspect.custom) {\n module.exports.prototype[util.inspect.custom] = function () {\n var obj = util.inspect({ length: this.length });\n return this.constructor.name + ' ' + obj;\n };\n}","\n/**\n * Module exports.\n */\n\nmodule.exports = deprecate;\n\n/**\n * Mark that a method should not be used.\n * Returns a modified function which warns once by default.\n *\n * If `localStorage.noDeprecation = true` is set, then it is a no-op.\n *\n * If `localStorage.throwDeprecation = true` is set, then deprecated functions\n * will throw an Error when invoked.\n *\n * If `localStorage.traceDeprecation = true` is set, then deprecated functions\n * will invoke `console.trace()` instead of `console.error()`.\n *\n * @param {Function} fn - the function to deprecate\n * @param {String} msg - the string to print to the console when `fn` is invoked\n * @returns {Function} a new \"deprecated\" version of `fn`\n * @api public\n */\n\nfunction deprecate (fn, msg) {\n if (config('noDeprecation')) {\n return fn;\n }\n\n var warned = false;\n function deprecated() {\n if (!warned) {\n if (config('throwDeprecation')) {\n throw new Error(msg);\n } else if (config('traceDeprecation')) {\n console.trace(msg);\n } else {\n console.warn(msg);\n }\n warned = true;\n }\n return fn.apply(this, arguments);\n }\n\n return deprecated;\n}\n\n/**\n * Checks `localStorage` for boolean values for the given `name`.\n *\n * @param {String} name\n * @returns {Boolean}\n * @api private\n */\n\nfunction config (name) {\n // accessing global.localStorage can trigger a DOMException in sandboxed iframes\n try {\n if (!global.localStorage) return false;\n } catch (_) {\n return false;\n }\n var val = global.localStorage[name];\n if (null == val) return false;\n return String(val).toLowerCase() === 'true';\n}\n","/* eslint-disable node/no-deprecated-api */\nvar buffer = require('buffer')\nvar Buffer = buffer.Buffer\n\n// alternative to using Object.keys for old browsers\nfunction copyProps (src, dst) {\n for (var key in src) {\n dst[key] = src[key]\n }\n}\nif (Buffer.from && Buffer.alloc && Buffer.allocUnsafe && Buffer.allocUnsafeSlow) {\n module.exports = buffer\n} else {\n // Copy properties from require('buffer')\n copyProps(buffer, exports)\n exports.Buffer = SafeBuffer\n}\n\nfunction SafeBuffer (arg, encodingOrOffset, length) {\n return Buffer(arg, encodingOrOffset, length)\n}\n\n// Copy static methods from Buffer\ncopyProps(Buffer, SafeBuffer)\n\nSafeBuffer.from = function (arg, encodingOrOffset, length) {\n if (typeof arg === 'number') {\n throw new TypeError('Argument must not be a number')\n }\n return Buffer(arg, encodingOrOffset, length)\n}\n\nSafeBuffer.alloc = function (size, fill, encoding) {\n if (typeof size !== 'number') {\n throw new TypeError('Argument must be a number')\n }\n var buf = Buffer(size)\n if (fill !== undefined) {\n if (typeof encoding === 'string') {\n buf.fill(fill, encoding)\n } else {\n buf.fill(fill)\n }\n } else {\n buf.fill(0)\n }\n return buf\n}\n\nSafeBuffer.allocUnsafe = function (size) {\n if (typeof size !== 'number') {\n throw new TypeError('Argument must be a number')\n }\n return Buffer(size)\n}\n\nSafeBuffer.allocUnsafeSlow = function (size) {\n if (typeof size !== 'number') {\n throw new TypeError('Argument must be a number')\n }\n return buffer.SlowBuffer(size)\n}\n","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n// a passthrough stream.\n// basically just the most minimal sort of Transform stream.\n// Every written chunk gets output as-is.\n\n'use strict';\n\nmodule.exports = PassThrough;\n\nvar Transform = require('./_stream_transform');\n\n/*<replacement>*/\nvar util = require('core-util-is');\nutil.inherits = require('inherits');\n/*</replacement>*/\n\nutil.inherits(PassThrough, Transform);\n\nfunction PassThrough(options) {\n if (!(this instanceof PassThrough)) return new PassThrough(options);\n\n Transform.call(this, options);\n}\n\nPassThrough.prototype._transform = function (chunk, encoding, cb) {\n cb(null, chunk);\n};","module.exports = require('./lib/_stream_writable.js');\n","module.exports = require('./lib/_stream_duplex.js');\n","module.exports = require('./readable').Transform\n","module.exports = require('./readable').PassThrough\n","'use strict';\n\n/**\n * Check if we're required to add a port number.\n *\n * @see https://url.spec.whatwg.org/#default-port\n * @param {Number|String} port Port number we need to check\n * @param {String} protocol Protocol we need to check against.\n * @returns {Boolean} Is it a default port for the given protocol\n * @api private\n */\nmodule.exports = function required(port, protocol) {\n protocol = protocol.split(':')[0];\n port = +port;\n\n if (!port) return false;\n\n switch (protocol) {\n case 'http':\n case 'ws':\n return port !== 80;\n\n case 'https':\n case 'wss':\n return port !== 443;\n\n case 'ftp':\n return port !== 21;\n\n case 'gopher':\n return port !== 70;\n\n case 'file':\n return false;\n }\n\n return port !== 0;\n};\n","'use strict';\n\nvar has = Object.prototype.hasOwnProperty\n , undef;\n\n/**\n * Decode a URI encoded string.\n *\n * @param {String} input The URI encoded string.\n * @returns {String|Null} The decoded string.\n * @api private\n */\nfunction decode(input) {\n try {\n return decodeURIComponent(input.replace(/\\+/g, ' '));\n } catch (e) {\n return null;\n }\n}\n\n/**\n * Attempts to encode a given input.\n *\n * @param {String} input The string that needs to be encoded.\n * @returns {String|Null} The encoded string.\n * @api private\n */\nfunction encode(input) {\n try {\n return encodeURIComponent(input);\n } catch (e) {\n return null;\n }\n}\n\n/**\n * Simple query string parser.\n *\n * @param {String} query The query string that needs to be parsed.\n * @returns {Object}\n * @api public\n */\nfunction querystring(query) {\n var parser = /([^=?&]+)=?([^&]*)/g\n , result = {}\n , part;\n\n while (part = parser.exec(query)) {\n var key = decode(part[1])\n , value = decode(part[2]);\n\n //\n // Prevent overriding of existing properties. This ensures that build-in\n // methods like `toString` or __proto__ are not overriden by malicious\n // querystrings.\n //\n // In the case if failed decoding, we want to omit the key/value pairs\n // from the result.\n //\n if (key === null || value === null || key in result) continue;\n result[key] = value;\n }\n\n return result;\n}\n\n/**\n * Transform a query string to an object.\n *\n * @param {Object} obj Object that should be transformed.\n * @param {String} prefix Optional prefix.\n * @returns {String}\n * @api public\n */\nfunction querystringify(obj, prefix) {\n prefix = prefix || '';\n\n var pairs = []\n , value\n , key;\n\n //\n // Optionally prefix with a '?' if needed\n //\n if ('string' !== typeof prefix) prefix = '?';\n\n for (key in obj) {\n if (has.call(obj, key)) {\n value = obj[key];\n\n //\n // Edge cases where we actually want to encode the value to an empty\n // string instead of the stringified value.\n //\n if (!value && (value === null || value === undef || isNaN(value))) {\n value = '';\n }\n\n key = encodeURIComponent(key);\n value = encodeURIComponent(value);\n\n //\n // If we failed to encode the strings, we should bail out as we don't\n // want to add invalid strings to the query.\n //\n if (key === null || value === null) continue;\n pairs.push(key +'='+ value);\n }\n }\n\n return pairs.length ? prefix + pairs.join('&') : '';\n}\n\n//\n// Expose the module.\n//\nexports.stringify = querystringify;\nexports.parse = querystring;\n","\r\nimport BLOCKvRegion from './BLOCKvRegion'\r\nimport DataObject from '../DataObject'\r\n\r\n/**\r\n * This region plugin provides access to a collection of vatoms identified by their IDs.\r\n * The 'inventory' region is much mor reliable, so if you know that your vatoms are owned bby the current user,\r\n * use the inventory region with a filter rather.\r\n *\r\n * TODO: Retry a few times\r\n *\r\n * To get an instance, call `DataPool.region('ids', [\"id1\", \"id2\"])`\r\n */\r\nexport default class VatomIDRegion extends BLOCKvRegion {\r\n /** Plugin ID */\r\n static get id () { return 'ids' }\r\n\r\n /** Constructor */\r\n constructor (dataPool, ids) {\r\n super(dataPool)\r\n \r\n // Don't cache this content\r\n this.noCache = true\r\n\r\n // Store IDs. Sort them to keep our stateKey in check.\r\n this.ids = ids.sort()\r\n }\r\n\r\n /** Our state key is the list of IDs */\r\n get stateKey () {\r\n return 'ids:' + this.ids.join(',')\r\n }\r\n\r\n /** Check if a region request matches our region */\r\n matches (id, descriptor) {\r\n // Check all filters match\r\n if (id !== 'ids') return false\r\n if (!descriptor || descriptor.length !== this.ids.length) return false\r\n for (let i = 0; i < this.ids.length; i++) {\r\n if (descriptor[i] !== this.ids[i]) {\r\n return false\r\n }\r\n }\r\n\r\n // Yes they do\r\n return true\r\n }\r\n\r\n /** Load current state from the server */\r\n async load () {\r\n // Pause websocket events\r\n this.pauseMessages()\r\n\r\n // Fetch data\r\n let response = await this.dataPool.Blockv.client.request('POST', '/v1/user/vatom/get', { ids: this.ids }, true)\r\n\r\n // Add vatom to new objects list\r\n let objects = []\r\n response.vatoms.map(v => new DataObject('vatom', v.id, v)).forEach(f => objects.push(f))\r\n\r\n // Add faces to new objects list\r\n response.faces.map(f => new DataObject('face', f.id, f)).forEach(f => objects.push(f))\r\n\r\n // Add actions to new objects list\r\n response.actions.map(a => new DataObject('action', a.name, a)).forEach(a => objects.push(a))\r\n\r\n // Add new objects\r\n this.addObjects(objects)\r\n\r\n // Resume websocket messages\r\n this.resumeMessages()\r\n\r\n // Return array of IDs\r\n return objects.map(o => o.id)\r\n }\r\n}\r\n","\r\nimport BLOCKvRegion from './BLOCKvRegion'\r\nimport Discover from '../../../client/Discover'\r\nimport DataObject from '../DataObject'\r\n\r\n/**\r\n * This region plugin provides access to a collection of vatoms that are children of another vatom.\r\n * The 'inventory' region is much mor reliable, so if you know that your vatoms are owned by the current user,\r\n * use the inventory region with a filter rather.\r\n *\r\n * To get an instance, call `DataPool.region('children', \"parent-id\")`\r\n */\r\nexport default class VatomChildrenRegion extends BLOCKvRegion {\r\n /** Plugin ID */\r\n static get id () { return 'children' }\r\n\r\n /** Constructor */\r\n constructor (dataPool, parentID) {\r\n super(dataPool)\r\n \r\n // Don't cache this content\r\n this.noCache = true\r\n\r\n // Store ID\r\n this.parentID = parentID\r\n }\r\n\r\n /** Our state key is the list of IDs */\r\n get stateKey () {\r\n return 'children:' + this.parentID\r\n }\r\n\r\n /** Check if a region request matches our region */\r\n matches (id, descriptor) {\r\n return id === 'children' && descriptor === this.parentID\r\n }\r\n\r\n /** Load current state from the server */\r\n async load () {\r\n // Pause websocket events\r\n this.pauseMessages()\r\n\r\n // Fetch data\r\n let payload = new Discover().setScope(Discover.FieldParentID, this.parentID).getPayload()\r\n let response = await this.dataPool.Blockv.client.request('POST', '/vatom/discover', payload, true)\r\n\r\n // Add vatom to new objects list\r\n let objects = []\r\n response.results.map(v => new DataObject('vatom', v.id, v)).forEach(f => objects.push(f))\r\n\r\n // Add faces to new objects list\r\n response.faces.map(f => new DataObject('face', f.id, f)).forEach(f => objects.push(f))\r\n\r\n // Add actions to new objects list\r\n response.actions.map(a => new DataObject('action', a.name, a)).forEach(a => objects.push(a))\r\n\r\n // Add new objects\r\n this.addObjects(objects)\r\n\r\n // Resume websocket messages\r\n this.resumeMessages()\r\n\r\n // Return array of IDs\r\n return objects.map(o => o.id)\r\n }\r\n}\r\n","var atob = require('./atob');\n\nfunction b64DecodeUnicode(str) {\n return decodeURIComponent(atob(str).replace(/(.)/g, function (m, p) {\n var code = p.charCodeAt(0).toString(16).toUpperCase();\n if (code.length < 2) {\n code = '0' + code;\n }\n return '%' + code;\n }));\n}\n\nmodule.exports = function(str) {\n var output = str.replace(/-/g, \"+\").replace(/_/g, \"/\");\n switch (output.length % 4) {\n case 0:\n break;\n case 2:\n output += \"==\";\n break;\n case 3:\n output += \"=\";\n break;\n default:\n throw \"Illegal base64url string!\";\n }\n\n try{\n return b64DecodeUnicode(output);\n } catch (err) {\n return atob(output);\n }\n};\n","/**\n * The code was extracted from:\n * https://github.com/davidchambers/Base64.js\n */\n\nvar chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=';\n\nfunction InvalidCharacterError(message) {\n this.message = message;\n}\n\nInvalidCharacterError.prototype = new Error();\nInvalidCharacterError.prototype.name = 'InvalidCharacterError';\n\nfunction polyfill (input) {\n var str = String(input).replace(/=+$/, '');\n if (str.length % 4 == 1) {\n throw new InvalidCharacterError(\"'atob' failed: The string to be decoded is not correctly encoded.\");\n }\n for (\n // initialize result and counters\n var bc = 0, bs, buffer, idx = 0, output = '';\n // get next character\n buffer = str.charAt(idx++);\n // character found in table? initialize bit storage and add its ascii value;\n ~buffer && (bs = bc % 4 ? bs * 64 + buffer : buffer,\n // and if not first of each 4 characters,\n // convert the first 8 bits to one ascii character\n bc++ % 4) ? output += String.fromCharCode(255 & bs >> (-2 * bc & 6)) : 0\n ) {\n // try to find character in table (0-63, not found => -1)\n buffer = chars.indexOf(buffer);\n }\n return output;\n}\n\n\nmodule.exports = typeof window !== 'undefined' && window.atob && window.atob.bind(window) || polyfill;\n","const assert = require('./assert');\nconst assert_internal = require('./internal');\nconst assert_usage = require('./usage');\nconst assert_warning = require('./warning');\nconst log = require('./log');\n\nmodule.exports = assert;\nmodule.exports.internal = assert_internal;\nmodule.exports.usage = assert_usage;\nmodule.exports.warning = assert_warning;\nmodule.exports.log = log;\n","var assert = require('./assert');\n\nmodule.exports = function() {\n var args = [].slice.call(arguments);\n args.push({\n IS_REASSERT_OPTS: true,\n is_warning: true,\n });\n return assert.apply(this, args);\n};\n","var logify_input = require('./log').logify_input;\nvar titleFormat = require('@brillout/format-text').titleFormat;\nvar isNodejs = require('./utils/isNodejs');\n\nvar option_keys = {\n is_warning: 'is_warning',\n is_usage: 'is_usage',\n is_internal: 'is_internal',\n details: 'details',\n};\n\nmodule.exports = reassert;\n\nfunction reassert(condition) {\n // assert\n if( condition ) {\n return condition;\n }\n\n // parse arguments\n var parsed = parseArguments([].slice.call(arguments, 1));\n var msgs = parsed.msgs;\n var opts = parsed.opts;\n\n var callStack = getCallStack();\n\n // build error message\n var message = getErrorMessage(condition, msgs, opts, callStack);\n\n // throw logic\n throwError(message, opts, callStack);\n\n // convenience to write code like `if( ! require('reassert/soft')(condition) ) return;`\n return condition;\n}\n\nfunction parseArguments(args) {\n var msgs = [];\n var opts = {};\n for(var i in args) {\n var arg = args[i];\n var is_option_arg = arg && arg.IS_REASSERT_OPTS;\n if( is_option_arg ) {\n for(var j in arg) {\n if( !option_keys[j] && j!=='IS_REASSERT_OPTS' ) {\n var msg = 'Unkonwn option `'+j+'`';\n throw new Error('Reassert: [Internal Error]: '+msg);\n }\n opts[j] = arg[j];\n }\n } else {\n msgs.push(arg);\n }\n }\n\n return {msgs: msgs, opts: opts};\n}\n\nfunction getErrorMessage(condition, msgs, opts, callStack) {\n var message = [];\n\n message = message.concat(getErrorDetailsMessage(opts));\n\n if( ! is_browser() ) {\n message = message.concat(getStackMessage(opts, msgs, callStack));\n message.push('\\n');\n }\n\n message = message.concat(getErrorSummaryMessage(condition, msgs, opts));\n\n return message;\n}\nfunction getErrorSummaryMessage(condition, msgs, opts) {\n let message = [];\n\n var title = (\n opts[option_keys.is_warning] && 'Warning' ||\n opts[option_keys.is_usage] && 'Wrong Usage' ||\n opts[option_keys.is_internal] && 'Internal Error' ||\n 'Assertion Fail'\n );\n\n message.push(titleFormat(title));\n\n if( msgs.length===0 ) {\n message.push('Failed assertion condition: `'+condition+' != true`');\n }\n\n for(var i in msgs) {\n var msg = msgs[i];\n var str = logify_input(msg);\n\n message.push(str);\n }\n\n if( opts.details ) {\n message.push('');\n message.push('See \"Error Details\" above for more information.');\n }\n\n return message;\n}\nfunction getStackMessage(opts, msgs, callStack) {\n if( opts[option_keys.is_warning] && msgs.length>0 ) {\n return [];\n }\n\n /*\n // Without this Node.js adds a `[` and a `]` to the error string\n var niceFormattingPrefix = 'Error\\n at:';\n */\n\n return [\n // niceFormattingPrefix,\n titleFormat('Stack Trace'),\n callStack.join('\\n')\n ];\n}\nfunction getErrorDetailsMessage(opts) {\n if( ! opts.details ) {\n return [];\n }\n\n var message = [\n titleFormat('Error Details')\n ];\n\n for(var i in opts.details) {\n message.push(logify_input(opts.details[i]));\n }\n\n message.push('\\n');\n\n return message;\n}\n\nfunction throwError(message, opts, callStack) {\n var interupt_execution = !opts[option_keys.is_warning];\n\n if( isNodejs() ) {\n if( interupt_execution ) {\n var err = new Error();\n err.stack = message.join('\\n');\n throw err;\n } else {\n for(var i in message) console.error(message[i]);\n }\n }\n\n if( is_browser() ) {\n if( interupt_execution ) {\n throw__browser(message);\n } else {\n setTimeout(function() {\n throw__browser(message);\n }, 0);\n }\n }\n}\n\nfunction throw__browser(message) {\n for(var i in message) console.error(message[i]);\n Error.stackTraceLimit = Infinity;\n throw new Error();\n}\n\nfunction getCallStack() {\n var stackTraceLimit__original = Error.stackTraceLimit;\n Error.stackTraceLimit = Infinity;\n var callStackString = new Error().stack;\n Error.stackTraceLimit = stackTraceLimit__original;\n\n var lines = callStackString.split('\\n');\n\n var lines__filtered = [];\n for(var i in lines) {\n var line = lines[i];\n if( line === 'Error' ) {\n continue;\n }\n if( line.indexOf('/node_modules/reassert/') !== -1 ) {\n continue;\n }\n if( line.indexOf(' (internal/') !== -1 ) {\n continue;\n }\n // line = line.replace(/^ */, '');\n // line = line.replace(/^at */, ' ');\n lines__filtered.push(line);\n }\n\n var callStack = lines__filtered;\n return callStack;\n}\n\n/* TODO - reimplement soft errors\n\n // determine whether we are in production\n var prod = is_prod();\n\n var message = 'Assertion-Error'+(prod?'[prod]':'[dev]')+': '+condition+'!=true';\n var interupt_execution = (!prod || opts[option_keys.is_hard]) && !opts[option_keys.is_soft];\n\nfunction is_prod() {\n var prod_browser = is_browser() && window.location.hostname !== 'localhost';\n var prod_nodejs = isNodejs() && process.env['NODE_ENV'] === 'production';\n return prod_browser || prod_nodejs;\n}\n*/\n\nfunction is_browser() {\n return typeof window !== \"undefined\";\n}\n","var isNodejs = require('./utils/isNodejs');\n\nlog.logify_input = logify_input;\n\nmodule.exports = log;\n\nvar project_name = 'Reassert';\nvar stringification_name = '(Reassert-stringification)';\n\nfunction log() {\n for(var i in arguments) {\n var input = arguments[i];\n var str = logify_input(input);\n console.log(str);\n }\n}\n\nfunction logify_input(input) {\n var str = get_str(input);\n\n // We cap huge strings to make scrolling not impossible\n var LIMIT = 10000;\n if( str && str.length > LIMIT ) {\n return str.slice(0, LIMIT)+'[CROPPED-BY-REASSERT]';\n }\n\n return str;\n}\n\nfunction get_str(input) {\n if( ! input ) {\n return input;\n }\n\n if( input.constructor === Array ) {\n return stringify_object(input);\n }\n\n var PREFIX_UGLY = '[object ';\n var input_str = toStr(input);\n if( input_str.slice(0, PREFIX_UGLY.length) === PREFIX_UGLY ) {\n return stringify_object(input);\n }\n return input_str;\n}\n\nfunction stringify_object(obj) {\n var obj_copy = get_prettier_copy(obj);\n try {\n return JSON.stringify(obj_copy, null, 2);\n } catch(e) {\n if( isNodejs() ) {\n var util = require('util');\n return util.inspect(obj);\n }\n return toStr(obj_copy)+'['+e+'][Error]'+stringification_name;\n }\n}\n\nfunction get_prettier_copy(el, parent_objects=[]) {\n if( ! (el instanceof Object) ) {\n return el;\n }\n\n if( el instanceof RegExp ) {\n if( ! el.toJSON ) {\n el.toJSON = function() {\n var str = '[RegExp: '+toStr(el)+']';\n return str;\n };\n }\n return el;\n }\n if( el instanceof Function ) {\n if( ! el.toJSON ) {\n el.toJSON = function() {\n var str = (\n ! el.name ? (\n '[Function]'\n ) : (\n '[Function: '+el.name+']'\n )\n );\n return str;\n };\n }\n return el;\n }\n\n if( el.constructor !== Object && el.constructor !== Array ) {\n return el;\n }\n\n if( parent_objects.includes(el) ) {\n return '[ALREADY_PRINTED_COPY]';\n }\n parent_objects = [el, ...parent_objects];\n\n var el_copy = new (el.constructor);\n for(var key in el) {\n el_copy[key] = get_prettier_copy(el[key], parent_objects);\n }\n return el_copy;\n}\n\nfunction toStr(thing) {\n if( typeof thing === \"object\" && !thing.toString ) {\n return '[object Object]';\n }\n return (''+thing);\n}\n","'use strict';\nconst stripAnsi = require('strip-ansi');\nconst isFullwidthCodePoint = require('is-fullwidth-code-point');\n\nmodule.exports = str => {\n\tif (typeof str !== 'string' || str.length === 0) {\n\t\treturn 0;\n\t}\n\n\tstr = stripAnsi(str);\n\n\tlet width = 0;\n\n\tfor (let i = 0; i < str.length; i++) {\n\t\tconst code = str.codePointAt(i);\n\n\t\t// Ignore control characters\n\t\tif (code <= 0x1F || (code >= 0x7F && code <= 0x9F)) {\n\t\t\tcontinue;\n\t\t}\n\n\t\t// Ignore combining characters\n\t\tif (code >= 0x300 && code <= 0x36F) {\n\t\t\tcontinue;\n\t\t}\n\n\t\t// Surrogates\n\t\tif (code > 0xFFFF) {\n\t\t\ti++;\n\t\t}\n\n\t\twidth += isFullwidthCodePoint(code) ? 2 : 1;\n\t}\n\n\treturn width;\n};\n","'use strict';\nconst ansiRegex = require('ansi-regex');\n\nmodule.exports = input => typeof input === 'string' ? input.replace(ansiRegex(), '') : input;\n","'use strict';\n\nmodule.exports = () => {\n\tconst pattern = [\n\t\t'[\\\\u001B\\\\u009B][[\\\\]()#;?]*(?:(?:(?:[a-zA-Z\\\\d]*(?:;[a-zA-Z\\\\d]*)*)?\\\\u0007)',\n\t\t'(?:(?:\\\\d{1,4}(?:;\\\\d{0,4})*)?[\\\\dA-PRZcf-ntqry=><~]))'\n\t].join('|');\n\n\treturn new RegExp(pattern, 'g');\n};\n","'use strict';\n/* eslint-disable yoda */\nmodule.exports = x => {\n\tif (Number.isNaN(x)) {\n\t\treturn false;\n\t}\n\n\t// code points are derived from:\n\t// http://www.unix.org/Public/UNIDATA/EastAsianWidth.txt\n\tif (\n\t\tx >= 0x1100 && (\n\t\t\tx <= 0x115f || // Hangul Jamo\n\t\t\tx === 0x2329 || // LEFT-POINTING ANGLE BRACKET\n\t\t\tx === 0x232a || // RIGHT-POINTING ANGLE BRACKET\n\t\t\t// CJK Radicals Supplement .. Enclosed CJK Letters and Months\n\t\t\t(0x2e80 <= x && x <= 0x3247 && x !== 0x303f) ||\n\t\t\t// Enclosed CJK Letters and Months .. CJK Unified Ideographs Extension A\n\t\t\t(0x3250 <= x && x <= 0x4dbf) ||\n\t\t\t// CJK Unified Ideographs .. Yi Radicals\n\t\t\t(0x4e00 <= x && x <= 0xa4c6) ||\n\t\t\t// Hangul Jamo Extended-A\n\t\t\t(0xa960 <= x && x <= 0xa97c) ||\n\t\t\t// Hangul Syllables\n\t\t\t(0xac00 <= x && x <= 0xd7a3) ||\n\t\t\t// CJK Compatibility Ideographs\n\t\t\t(0xf900 <= x && x <= 0xfaff) ||\n\t\t\t// Vertical Forms\n\t\t\t(0xfe10 <= x && x <= 0xfe19) ||\n\t\t\t// CJK Compatibility Forms .. Small Form Variants\n\t\t\t(0xfe30 <= x && x <= 0xfe6b) ||\n\t\t\t// Halfwidth and Fullwidth Forms\n\t\t\t(0xff01 <= x && x <= 0xff60) ||\n\t\t\t(0xffe0 <= x && x <= 0xffe6) ||\n\t\t\t// Kana Supplement\n\t\t\t(0x1b000 <= x && x <= 0x1b001) ||\n\t\t\t// Enclosed Ideographic Supplement\n\t\t\t(0x1f200 <= x && x <= 0x1f251) ||\n\t\t\t// CJK Unified Ideographs Extension B .. Tertiary Ideographic Plane\n\t\t\t(0x20000 <= x && x <= 0x3fffd)\n\t\t)\n\t) {\n\t\treturn true;\n\t}\n\n\treturn false;\n};\n","var assert = require('./assert');\n\nmodule.exports = function() {\n var args = [].slice.call(arguments);\n args.push({\n IS_REASSERT_OPTS: true,\n is_internal: true,\n });\n return assert.apply(this, args);\n};\n","var assert = require('./assert');\n\nmodule.exports = function() {\n var args = [].slice.call(arguments);\n args.push({\n IS_REASSERT_OPTS: true,\n is_usage: true,\n });\n return assert.apply(this, args);\n};\n","var assert = require('./assert');\n\nmodule.exports = function() {\n var args = [].slice.call(arguments);\n args.push({\n IS_REASSERT_OPTS: true,\n is_warning: true,\n });\n return assert.apply(this, args);\n};\n","\n/**\n * This is Version 2 of the Mempool. This version supports region monitoring, as well as timed updates.\n * Once this class is generic enough and the Data Pool Protocol is implemented, we can split this out into it's own npm module.\n *\n * This aims to follow what is described in https://github.com/BLOCKvIO/Data-Pool-Protocol/blob/master/Data%20Pool%20Protocol.md\n *\n */\nexport default class DataPool {\n constructor () {\n // Region plugins\n this.plugins = [\n require('./plugins/InventoryRegion').default,\n require('./plugins/VatomIDRegion').default,\n require('./plugins/VatomChildrenRegion').default,\n require('./plugins/GeoPosRegion').default\n ]\n\n // Currently active regions\n this.regions = []\n\n // Session information\n this.sessionInfo = {}\n }\n\n /**\n * Fetches or creates a vatom region.\n *\n * @param {string} id The plugin ID.\n * @param {*} descriptor Region-specific filtering information. See plugins for more info.\n */\n region (id, descriptor) {\n // Find existing region\n let region = this.regions.find(r => r.matches(id, descriptor))\n if (region) {\n return region\n }\n // We need to create a new region. Find region plugin\n let Region = this.plugins.find(p => p.id === id)\n if (!Region) {\n throw new Error(`Region with ID '${id}' not found.`)\n }\n // Create and store region\n region = new Region(this, descriptor)\n this.regions.push(region)\n\n // Return new region\n return region\n }\n\n /** Removes the specified region */\n removeRegion (region) {\n for (let i = 0; i < this.regions.length; i++) {\n if (this.regions[i] === region) {\n return this.regions.splice(i, 1)\n }\n }\n }\n\n /**\n * Update session-specific information used by plugins.\n */\n setSessionInfo (info) {\n // Store it\n this.sessionInfo = info\n\n // Notify regions\n for (let r of this.regions) {\n r.onSessionInfoChanged(info)\n }\n }\n\n /** Retrieve information about storage etc */\n stats() {\n\n // Calculate size of local storage\n let sizeBytes = 0\n for (let key in localStorage)\n if (key.startsWith('sync.'))\n sizeBytes += localStorage[key].length\n\n // Done\n return {\n estimatedSize: sizeBytes\n }\n\n }\n\n /** Clear cached items */\n clearCache() {\n\n // Remove local storage cached items\n for (let key in localStorage)\n if (key.startsWith('sync.'))\n localStorage.removeItem(key)\n\n }\n\n}\n","//\r\n// BlockV AG. Copyright (c) 2018, all rights reserved.\r\n//\r\n// Licensed under the BlockV SDK License (the \"License\"); you may not use this file or\r\n// the BlockV SDK except in compliance with the License accompanying it. Unless\r\n// required by applicable law or agreed to in writing, the BlockV SDK distributed under\r\n// the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF\r\n// ANY KIND, either express or implied. See the License for the specific language\r\n// governing permissions and limitations under the License.\r\n//\r\nimport jwtDecode from 'jwt-decode'\r\n\r\n/* global window */\r\n\r\nexport default class UserManager {\r\n constructor (UserApi, store) {\r\n this.UserApi = UserApi\r\n this.store = store\r\n }\r\n\r\n /**\r\n * An Alternate version of the register function\r\n * @param {Object} registration An Object containing all the information to register a user.\r\n * @return {Promise<Object>} returns a success Object containing user specific information\r\n */\r\n register (registration) {\r\n return this.UserApi.register(registration)\r\n }\r\n\r\n /**\r\n * Allows the user to login to the platform\r\n * @param {String} token Email / Phone Number of the user\r\n * @param {String} tokenType Description of the token : ie. \"phone_number\" or \"email\"\r\n * @param {String} password The password that the user has set\r\n * @return {Promise<Object>} returns a object containing the user that has logged in.\r\n */\r\n login (token, tokenType, password) {\r\n return this.UserApi.login(token, tokenType, password)\r\n }\r\n\r\n /**\r\n * Login with an Account without registering. A unique login string is generated by the server.\r\n * @param {String} guestId A String generated by the server used to login.\r\n * A Guest account can be made into a registered account by patching\r\n * @return {Promise<Object>} A Object that contains the guest user that was logged in.\r\n */\r\n loginGuest (guestId) {\r\n return this.UserApi.loginGuest(guestId)\r\n }\r\n\r\n /**\r\n * Logs out the currently logged in user.\r\n * @return {Promise<Object>} Logout success message\r\n */\r\n logout (noRequest = false) {\r\n return this.UserApi.logout(noRequest)\r\n }\r\n\r\n /**\r\n * Logs the user in via OAuth in a browser popup window.\r\n * NOTE: This is a private method, subject to change once more OAuth flows have been fully implemented on the backend.\r\n * @private\r\n * @returns {Promise<boolean>} `true` if login completed, or `false` if login was cancelled by the user.\r\n */\r\n loginOAuthPopup() {\r\n return this.UserApi.loginOAuthPopup()\r\n }\r\n\r\n /**\r\n * Gets information about the currently logged in user.\r\n * @return {Promise<Object>} Contains the users information such as ID, Avatar, Name etc.\r\n */\r\n getCurrentUser () {\r\n return this.UserApi.getCurrentUser()\r\n }\r\n\r\n /**\r\n * Returns a list of user tokens\r\n * @return {Promise<Object>} An Object containing a list of Email Address's and Phone Number's.\r\n */\r\n getCurrentUserTokens () {\r\n return this.UserApi.getUserTokens()\r\n }\r\n\r\n /**\r\n * Allows the uploading of a new avatar for the user.\r\n * @param {FormData} formData Uploads the FormData containing the new avatar for the user\r\n * @return {Promise<Object>} An Object containing a upload success message\r\n */\r\n uploadAvatar (formData) {\r\n return this.UserApi.uploadAvatar(formData)\r\n }\r\n\r\n /**\r\n * Allows the user to be edited\r\n * @param {Object} payload A payload containg the fields to be changed for the user.\r\n * @return {Promise<Object>} returns a user Object containing the updated users info.\r\n */\r\n updateUser (payload) {\r\n return this.UserApi.updateUser(payload)\r\n }\r\n\r\n /**\r\n * Returns the Access Token\r\n * @return {Promise<Object>} Returns a Object containing the Access Token String.\r\n */\r\n getAccessToken () {\r\n return this.UserApi.getAccessToken()\r\n }\r\n\r\n /**\r\n * Automatically Encodes the Asset Provides URI's\r\n * @param {String} url The URL that needs to be encoded\r\n */\r\n encodeAssetProvider (url) {\r\n return this.UserApi.encodeAssetProvider(url)\r\n }\r\n\r\n /**\r\n * Sends a Verification Token to verify the token is valid\r\n * @param {String} token Phone Number / Email Address\r\n * @param {String} token_type Description of the Token above ie. \"phone_number\" / \"email\"\r\n * @return {} An Email / SMS will be sent to the token with a verification code.\r\n */\r\n sendTokenVerification (token, tokenType) {\r\n return this.UserApi.sendTokenVerification(token, tokenType)\r\n }\r\n\r\n getRefreshToken () {\r\n return this.UserApi.getRefreshToken()\r\n }\r\n\r\n setRefreshToken (token) {\r\n return this.UserApi.setRefreshToken(token)\r\n }\r\n\r\n /**\r\n * Verify a users Token\r\n * @param {Object} verify An Object containing the token, token_type and the verification code.\r\n * {\"token\" : \"someone@blockv.org\", \"token_type\" : \"email\", \"verify_code\" : \"00000\" }\r\n * @return {Promise<Object>} An Object containing the outcome of the verification of the token.\r\n */\r\n verifyUserToken (verify) {\r\n return this.UserApi.verifyUserToken(verify)\r\n }\r\n\r\n /**\r\n * Allows additional tokens to be added to the user\r\n * @param {Object} payload An Object containing the tokens that need to be added to the user.\r\n * @return {Promise<Object>} An Object with the updated user profile.\r\n */\r\n addUserToken (payload) {\r\n return this.UserApi.addUserToken(payload)\r\n }\r\n\r\n /**\r\n * Sets the token to be the primary option\r\n * @param {[type]} tokenID id of the token that needs to be set as the defualt\r\n */\r\n setDefaultToken (tokenID) {\r\n return this.UserApi.setDefaultToken(tokenID)\r\n }\r\n\r\n /**\r\n * Removes a Token from the user's profile.\r\n * @param {String} tokenId ID of the token that needs to be deleted\r\n * @return {Promise<Object>} A Success / Faile object with the outcome of the deletion.\r\n */\r\n deleteUserToken (tokenId) {\r\n return this.UserApi.deleteUserToken(tokenId)\r\n }\r\n\r\n getGuestToken () {\r\n return this.UserApi.getGuestToken()\r\n }\r\n\r\n /**\r\n * Sends a verification token to the token that was supplied.\r\n * NB! this will reset the current password.\r\n * @param {String} token The Token that needs to be reset (Phone Number / Email Address)\r\n * @param {String} token_type Description of the Token to be reset\r\n */\r\n resetPassword (token, tokenType) {\r\n return this.UserApi.resetPassword(token, tokenType)\r\n }\r\n\r\n /**\r\n * Returns a Public User Profile\r\n * @param {String} userID Public User ID\r\n * @return {Promise<Object>} Returns a Public User Object\r\n */\r\n getPublicUserProfile (userID) {\r\n return this.UserApi.getPublicUserProfile(userID)\r\n }\r\n\r\n addRedeemable (payload) {\r\n return this.UserApi.addRedeemable(payload)\r\n }\r\n\r\n /**\r\n * Checked to see if the refresh token is valid\r\n * @return {Boolean} returns True / False if the refresh token is valid\r\n */\r\n get isLoggedIn () {\r\n // stop if no access provider credentials exist\r\n if (!this.store.assetProvider)\r\n return false\r\n // define our vars\r\n let decodedToken\r\n let nowDate\r\n let expirationTime\r\n const { refreshToken } = this.store\r\n // if no refreshToken\r\n if (!refreshToken) {\r\n return false\r\n }\r\n try {\r\n // decode token\r\n decodedToken = jwtDecode(refreshToken)\r\n expirationTime = (decodedToken.exp * 1000)\r\n nowDate = Date.now()\r\n // quick calc to determine if the token has expired\r\n return nowDate < (expirationTime - 30000)\r\n } catch (e) {\r\n // decoding fails\r\n return false\r\n }\r\n }\r\n}\r\n","//\r\n// BlockV AG. Copyright (c) 2018, all rights reserved.\r\n//\r\n// Licensed under the BlockV SDK License (the \"License\"); you may not use this file or\r\n// the BlockV SDK except in compliance with the License accompanying it. Unless\r\n// required by applicable law or agreed to in writing, the BlockV SDK distributed under\r\n// the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF\r\n// ANY KIND, either express or implied. See the License for the specific language\r\n// governing permissions and limitations under the License.\r\n\r\nimport Vatom from '../../../../model/Vatom'\r\n\r\nexport default class VatomApi {\r\n constructor (client) {\r\n this.client = client\r\n }\r\n\r\n getActions (templateID) {\r\n return this.client.request('GET', `/v1/user/actions/${templateID}`, {}, true)\r\n .then((data) => {\r\n const len = data.length\r\n const actions = []\r\n for (let i = 0; i < len;) {\r\n const action = data[i].name.split('::Action::')\r\n actions.push(\r\n {\r\n template_id: action[0],\r\n action: action[1]\r\n }\r\n )\r\n i += 1\r\n }\r\n return actions\r\n })\r\n }\r\n\r\n performAction (action, payload) {\r\n return this.client.request('POST', `/v1/user/vatom/action/${action}`, payload, true).then(data => data.main.output)\r\n }\r\n\r\n getUserInventory (payload) {\r\n return this.client.request('POST', '/v1/user/vatom/inventory', payload, true).then((data) => {\r\n const { actions, faces, vatoms } = data\r\n\r\n const actionsArray = []\r\n const facesArray = []\r\n const vatomsArray = []\r\n // eslint-disable-next-line\r\n for (let a of actions) {\r\n const aName = a.name.split('::Action::')\r\n const aKey = aName[0]\r\n actionsArray.push({\r\n template: aKey,\r\n action: aName[1],\r\n meta: a.meta,\r\n properties: a.properties\r\n })\r\n }\r\n // eslint-disable-next-line\r\n for (let f of faces) {\r\n facesArray.push({\r\n template: f.template,\r\n id: f.id,\r\n meta: f.meta,\r\n properties: f.properties\r\n })\r\n }\r\n // eslint-disable-next-line\r\n for (let v of vatoms) {\r\n const { template } = v['vAtom::vAtomType']\r\n if (template !== 'vatomic::v1::vAtom::Avatar') {\r\n const obj = new Vatom(v, facesArray.filter(f => f.template === template), actionsArray.filter(a => a.template === template))\r\n vatomsArray.push(obj)\r\n }\r\n }\r\n return vatomsArray\r\n })\r\n }\r\n\r\n getUserVatoms (payload) {\r\n return this.client.request('POST', '/v1/user/vatom/get', payload, true).then((data) => {\r\n const { actions, faces, vatoms } = data\r\n\r\n const actionsArray = []\r\n const facesArray = []\r\n const vatomsArray = []\r\n // eslint-disable-next-line\r\n for (let a of actions) {\r\n const aName = a.name.split('::Action::')\r\n const aKey = aName[0]\r\n actionsArray.push({\r\n template: aKey,\r\n action: aName[1],\r\n meta: a.meta,\r\n properties: a.properties\r\n })\r\n }\r\n // eslint-disable-next-line\r\n for (let f of faces) {\r\n facesArray.push({\r\n template: f.template,\r\n id: f.id,\r\n meta: f.meta,\r\n properties: f.properties\r\n })\r\n }\r\n // eslint-disable-next-line\r\n for (let v of vatoms) {\r\n const { template } = v['vAtom::vAtomType']\r\n const obj = new Vatom(v, facesArray.filter(f => f.template === template), actionsArray.filter(a => a.template === template))\r\n vatomsArray.push(obj)\r\n }\r\n return vatomsArray\r\n })\r\n }\r\n\r\n geoDiscover (payload) {\r\n return this.client.request('POST', '/v1/vatom/geodiscover', payload, true).then((data) => {\r\n const { actions, faces, vatoms } = data\r\n\r\n const actionsArray = []\r\n const facesArray = []\r\n const vatomsArray = []\r\n // eslint-disable-next-line\r\n for (let a of actions) {\r\n const aName = a.name.split('::Action::')\r\n const aKey = aName[0]\r\n actionsArray.push({\r\n template: aKey,\r\n action: aName[1],\r\n meta: a.meta,\r\n properties: a.properties\r\n })\r\n }\r\n // eslint-disable-next-line\r\n for (let f of faces) {\r\n facesArray.push({\r\n template: f.template,\r\n id: f.id,\r\n meta: f.meta,\r\n properties: f.properties\r\n })\r\n }\r\n // eslint-disable-next-line\r\n for (let v of vatoms) {\r\n const { template } = v['vAtom::vAtomType']\r\n const obj = new Vatom(v, facesArray.filter(f => f.template === template), actionsArray.filter(a => a.template === template))\r\n vatomsArray.push(obj)\r\n }\r\n return vatomsArray\r\n })\r\n }\r\n\r\n geoDiscoverGroups (payload) {\r\n return this.client.request('POST', '/v1/vatom/geodiscovergroups', payload, true).then(data => data)\r\n }\r\n\r\n getVatomChildren (parentID) {\r\n return this.client.request('POST', '/v1/vatom/discover', { \r\n scope: {\r\n key: \"vAtom::vAtomType.parent_id\" ,\r\n value: parentID\r\n },\r\n return: {\r\n type: \"*\",\r\n fields: []\r\n }\r\n }, true).then(data => {\r\n const { actions, faces, results } = data\r\n const vatoms = results\r\n\r\n const actionsArray = []\r\n const facesArray = []\r\n const vatomsArray = []\r\n // eslint-disable-next-line\r\n for (let a of actions) {\r\n const aName = a.name.split('::Action::')\r\n const aKey = aName[0]\r\n actionsArray.push({\r\n template: aKey,\r\n action: aName[1],\r\n meta: a.meta,\r\n properties: a.properties\r\n })\r\n }\r\n // eslint-disable-next-line\r\n for (let f of faces) {\r\n facesArray.push({\r\n template: f.template,\r\n id: f.id,\r\n meta: f.meta,\r\n properties: f.properties\r\n })\r\n }\r\n // eslint-disable-next-line\r\n for (let v of vatoms) {\r\n const { template } = v['vAtom::vAtomType']\r\n const obj = new Vatom(v, facesArray.filter(f => f.template === template), actionsArray.filter(a => a.template === template))\r\n vatomsArray.push(obj)\r\n }\r\n return vatomsArray\r\n })\r\n }\r\n\r\n setParent (payload) {\r\n return this.client.request('PATCH', '/v1/vatoms', payload, true).then(data => data)\r\n }\r\n\r\n trashVatom (vatomID) {\r\n const payload = {\r\n 'this.id': vatomID\r\n }\r\n return this.client.request('POST', '/v1/user/vatom/trash', payload, true).then(data => data)\r\n }\r\n}\r\n","//\n// BlockV AG. Copyright (c) 2018, all rights reserved.\n//\n// Licensed under the BlockV SDK License (the \"License\"); you may not use this file or\n// the BlockV SDK except in compliance with the License accompanying it. Unless\n// required by applicable law or agreed to in writing, the BlockV SDK distributed under\n// the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF\n// ANY KIND, either express or implied. See the License for the specific language\n// governing permissions and limitations under the License.\n//\n\nimport VatomApi from '../../internal/net/rest/api/VatomApi'\nimport GeoPosRegion from '../../internal/DataPool/plugins/GeoPosRegion'\nexport default class Vatoms {\n constructor (blockv) {\n this.Blockv = blockv\n this.vatomApi = new VatomApi(blockv.client)\n }\n\n /**\n * Returns a list of actions that can be performed on a template\n * @param {[String]} templateID Template ID is the vAtom template iD\n * @return {[Promise<Object>]} returns a object containing a list of available actions\n */\n\n getActions (templateID) {\n return this.vatomApi.getActions(templateID)\n }\n\n /**\n * [performAction description]\n * @param {String} vatomId id of the vatom to perform action\n * @param {String} action can be either of the following : Drop, Pickup , Transfer , Require\n * @param {Object} payload contains geo-coordianates or anything else sent along with vatomid\n * @return {Promise<Object>} json payload nested\n */\n\n transferTo (user, actionName = 'Transfer', vatomId) {\n // Check if user is a VatomUser\n var payload = {}\n if (typeof user === 'string') {\n // Check if string is email or phone number\n if (/^0x[a-fA-F0-9]{40}$/.test(user)) {\n // HACK: Sending to an Ethereum address, append \"Eth\" to the action name\n if (!actionName.startsWith('Eth')) {\n actionName = 'Eth' + actionName\n }\n\n // Use this address\n payload['new.owner.eth_address'] = user\n } else if (user.indexOf('@') !== -1) {\n payload['new.owner.email'] = user\n } else if (user.indexOf('+') === 0) {\n payload['new.owner.phone_number'] = user\n } else {\n payload['new.owner.id'] = user\n }\n } else {\n // This must be a VatomUser, fetch the identifying property\n if (user.userID) {\n payload['new.owner.id'] = user.userID\n } else if (user.phoneNumber) {\n payload['new.owner.phone_number'] = user.phoneNumber\n } else if (user.email) {\n payload['new.owner.email'] = user.email\n } else {\n return Promise.reject({ code: 'INVALID_PARAMETER', message: `The user object supplied didn't have any identifying fields. It must have either a userID, an email, or a phoneNumber.` })\n }\n }\n\n // Send request\n return this.performAction(vatomId, actionName, payload)\n }\n\n performAction (vatomId, action, payload) {\n\n // Create pre-emptive action in DataPool for known actions\n let undos = []\n switch (action) {\n case 'Transfer':\n undos.push(this.Blockv.dataPool.region('inventory').preemptiveChange(vatomId, 'vAtom::vAtomType.owner', '.'))\n break\n\n case 'Drop':\n undos.push(this.Blockv.dataPool.region('inventory').preemptiveChange(vatomId, 'vAtom::vAtomType.geo_pos', payload))\n undos.push(this.Blockv.dataPool.region('inventory').preemptiveChange(vatomId, 'vAtom::vAtomType.dropped', true))\n break\n\n case 'Pickup':\n undos.push(this.Blockv.dataPool.region('inventory').preemptiveChange(vatomId, 'vAtom::vAtomType.dropped', false))\n break\n\n case 'Redeem':\n undos.push(this.Blockv.dataPool.region('inventory').preemptiveChange(vatomId, 'vAtom::vAtomType.owner', '.'))\n break\n\n default:\n break\n }\n\n // Perform the action\n return this.vatomApi.performAction(action, Object.assign({ 'this.id': vatomId }, payload)).catch(err => {\n\n // An error occurred, undo preemptive actions\n undos.map(u => u())\n\n // Workaround: If error was an attempt to pick up a vatom but the vatom is already picked up, it's possible\n // that the GeoPos region missed an update. Notify all GeoPos regions that this vatom is no longer available.\n if (err.code == 1645)\n this.Blockv.dataPool.regions.filter(r => r instanceof GeoPosRegion).forEach(r => r.preemptiveChange(vatomId, 'vAtom::vAtomType.dropped', false))\n\n // Pass on the error\n throw err\n\n })\n\n }\n\n /** Called to combine the specified vatom into this one. Note that some faces override the Combine action,\n * so in order to get those actions as well you should use `combineWith()` on `VatomView` instead. */\n combineWith (vatom, otherVatom) {\n // Pre-emptively set the parent ID\n let undo = this.Blockv.dataPool.region('inventory').preemptiveChange(otherVatom.id, 'vAtom::vAtomType.parent_id', vatom.id)\n // Set parent\n return this.Blockv.client.request('PATCH', '/v1/vatoms', { ids: [otherVatom.id], parent_id: vatom.id }, true).catch(err => {\n // Failed, reset vatom reference\n undo()\n throw err\n })\n }\n\n /** Called to remove all child vatoms from this vatom */\n split (vatom) {\n // Get vatom's parent ID\n let newParentID = vatom.properties.parent_id || '.'\n // Get all children\n return this.getVatomChildren(vatom.id).then(children => {\n // Remove parent IDs\n return Promise.all(children.map(child => {\n // Pre-emptively update parent ID\n let undo = this.Blockv.dataPool.region('inventory').preemptiveChange(child.id, 'vAtom::vAtomType.parent_id', newParentID)\n // Do patch\n return this.Blockv.client.request('PATCH', '/v1/vatoms', { ids: [child.id], parent_id: newParentID }, true).catch(err => {\n // Failed, reset vatom reference\n undo()\n throw err\n })\n }))\n })\n }\n\n /**\n * Gets the current users vAtom inventory\n * @return {Promise<Array<Object>>} return a list of JSON Objects that contain the users inventory\n * No parameters are required for this call\n */\n\n getUserInventory () {\n return this.Blockv.dataPool.region('inventory').get()\n }\n\n /**\n * Gets a vAtom based on the vAtom ID\n * @param {[String]} vatomId ID of the vAtom that is being searched for\n * @return {[Promise<Object>} returns a JSON Object containing the vAtom.\n */\n\n async getUserVatoms (vatomIds) {\n // Make sure it's an array\n if (typeof vatomIds === 'string') {\n vatomIds = [vatomIds]\n }\n\n // Load all from inventory\n let vatoms = []\n for (let id of vatomIds) {\n let vatom = await this.Blockv.dataPool.region('inventory').getItem(id)\n if (vatom) {\n vatoms.push(vatom)\n } else {\n break\n }\n }\n // If all found, stop\n if (vatoms.length === vatomIds.length) {\n return vatoms\n }\n\n // Not all the vatoms were in the inventory, create a new region\n return this.Blockv.dataPool.region('ids', vatomIds).get()\n }\n\n /**\n * Gets a list of vAtoms based on the coordinates.\n * @param {[Object]} bottomLeft containing a \"lat\" and \"lon\" coordinate\n * @param {[Object]} topRight containing a \"lat\" and \"lon\" coordinate\n * @param {[String]} filter defaults to \"all\"\n * @return {[Promise<Object>} returns a list of vAtoms, faces and actions\n */\n geoDiscover (bottomLeft, topRight, filter = 'vatoms') {\n const payload = {\n bottom_left: {\n lat: bottomLeft.lat,\n lon: bottomLeft.lon\n },\n top_right: {\n lat: topRight.lat,\n lon: topRight.lon\n },\n filter\n }\n\n return this.vatomApi.geoDiscover(payload)\n }\n\n /**\n * Discover groups of vAtoms with Keys\n * @param {Object} bottomLeft contains a lat and lon coordinate.\n * Coordinate must be integers and not string\n * @param {Object} topRight contains a lat and lon coordinate.\n * Coordinate must be integers and not strings\n * @param {Integer} precision 1 - 12 defines the accuracy of the combination.\n * @param {String} filter defaults to all\n * @return {Promise<Object>} Returns a list of groups\n */\n geoDiscoverGroups (bottomLeft, topRight, precision = 2, filter = 'all') {\n const payload = {\n bottom_left: {\n lat: bottomLeft.lat,\n lon: bottomLeft.lon\n },\n top_right: {\n lat: topRight.lat,\n lon: topRight.lon\n },\n precision,\n filter\n }\n\n return this.vatomApi.geoDiscoverGroups(payload)\n }\n\n /**\n *\n * @param {String} parentID ID of the vatom that you would like to list the children\n * @returns {Promise<Vatom[]>} Array of vatoms\n */\n getVatomChildren (parentID) {\n\n // Check if vatom is in the inventory\n if (this.Blockv.dataPool.region('inventory').has(parentID)) {\n\n // It is, read children from inventory region\n return this.Blockv.dataPool.region('inventory').get().then(children => {\n return children.filter(v => v.properties.parent_id === parentID)\n })\n\n }\n\n // Not in inventory region, read from API\n return this.vatomApi.getVatomChildren(parentID)\n \n }\n\n setParentID(childID, newParentID) {\n\n // Pre-emptively update parent ID\n let undo = this.Blockv.dataPool.region('inventory').preemptiveChange(childID, 'vAtom::vAtomType.parent_id', newParentID)\n\n // Do patch\n return this.Blockv.client.request('PATCH', '/v1/vatoms', { ids: [childID], parent_id: newParentID }, true).catch(err => {\n\n // Failed, reset vatom reference\n undo()\n throw err\n\n })\n\n }\n\n /**\n * \n * @param {*} vatomIds Array of vatoms that will be changed \n * @param {*} parentId ID or . to set the children to\n */\n setParent (payload) {\n let parentPayload = {\n ids: [payload.id],\n parent_id: payload.parent_id\n }\n return this.vatomApi.setParent(parentPayload)\n }\n\n /**\n * Removes the specified vAtom from the current user's inventory\n * @param {String} vatomID Id of the vAtom you want to remove\n * @return {Promise<Object>} An object containing a success message\n */\n trashVatom (vatomID) {\n let undos = []\n undos.push(this.Blockv.dataPool.region('inventory').preemptiveChange(vatomID, 'vAtom::vAtomType.owner', '.'))\n return this.vatomApi.trashVatom(vatomID).catch(err => {\n undos.map(u => u())\n throw err\n })\n }\n}\n","//\r\n// BlockV AG. Copyright (c) 2018, all rights reserved.\r\n//\r\n// Licensed under the BlockV SDK License (the \"License\"); you may not use this file or\r\n// the BlockV SDK except in compliance with the License accompanying it. Unless\r\n// required by applicable law or agreed to in writing, the BlockV SDK distributed under\r\n// the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF\r\n// ANY KIND, either express or implied. See the License for the specific language\r\n// governing permissions and limitations under the License.\r\n//\r\n\r\nexport default class Activity {\r\n constructor (activityApi) {\r\n this.activityApi = activityApi\r\n }\r\n\r\n /**\r\n * Returns a list of messages of activity\r\n * @return {Promise<Object>} JSON array containing all the activity from the user.\r\n */\r\n myThreads () {\r\n return this.activityApi.threads()\r\n }\r\n\r\n /**\r\n * Returns a single activity message thread\r\n * @param {String} name Unique identifier from the myThreads response\r\n * @return {Promise<Object>} returns a detailed object containing the thread\r\n */\r\n myThreadMessages (name) {\r\n return this.activityApi.threadMessages(name)\r\n }\r\n\r\n /**\r\n * Send a message to a user that appears in the \"activity\" tab\r\n * @param {String} id id of the user that is going to receive the message\r\n * @param {String} message Message that will get sent to the user\r\n * @return {Promise<Object>} Success Object\r\n */\r\n sendMessage (id, message) {\r\n return this.activityApi.sendMessage(id, message)\r\n }\r\n}\r\n","//\r\n// BlockV AG. Copyright (c) 2018, all rights reserved.\r\n//\r\n// Licensed under the BlockV SDK License (the \"License\"); you may not use this file or\r\n// the BlockV SDK except in compliance with the License accompanying it. Unless\r\n// required by applicable law or agreed to in writing, the BlockV SDK distributed under\r\n// the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF\r\n// ANY KIND, either express or implied. See the License for the specific language\r\n// governing permissions and limitations under the License.\r\n\r\nexport default class ActivityApi {\r\n constructor (client) {\r\n this.client = client\r\n }\r\n\r\n threads () {\r\n return this.client.request('POST', '/v1/activity/mythreads', {}, true).then(data => data.threads)\r\n }\r\n\r\n threadMessages (name) {\r\n const payload = {\r\n name,\r\n cursor: '',\r\n count: 100\r\n }\r\n return this.client.request('POST', '/v1/activity/mythreadmessages', payload, true).then(data => data)\r\n }\r\n\r\n sendMessage (id, message) {\r\n const payload = {\r\n message,\r\n id\r\n }\r\n return this.client.request('POST', '/v1/user/message', payload, true).then(data => data)\r\n }\r\n}\r\n","//\r\n\r\nimport EventEmitter from '../../internal/EventEmitter'\r\nimport WebSockets from './WebSockets'\r\n\r\n// This is a wrapper around the WebSockets class, which allows for multiple sockets to be active at once.\r\n// It matches the API of that class exactly.\r\nexport default class MultiWebSockets extends EventEmitter {\r\n\r\n constructor (store, client) {\r\n super()\r\n\r\n this.store = store\r\n this.client = client\r\n this.sockets = []\r\n\r\n }\r\n\r\n /** This will be true if the connection is ready to send and receive messages */\r\n get isOpen () {\r\n\r\n // Return true if any of the websockets are open\r\n return !!this.sockets.find(s => s.isOpen)\r\n\r\n }\r\n\r\n /**\r\n * The connect function establishes a connection to the WebSocket.\r\n * @public\r\n * @return {Promise<MultiWebSockets>}\r\n */\r\n connect() {\r\n\r\n // Create sockets if needed\r\n if (this.sockets.length == 0) {\r\n\r\n // Get array of socket addresses\r\n let addresses = this.store.websocketAddress\r\n if (typeof addresses == 'string')\r\n addresses = [addresses]\r\n\r\n // Create sockets\r\n for (let address of addresses)\r\n this.sockets.push(new WebSockets(this.store, this.client, address))\r\n\r\n // Override the newly created socket's trigger() and emit() to instead trigger and emit on us\r\n for (let socket of this.sockets) {\r\n socket.trigger = this.trigger.bind(this)\r\n socket.triggerEvent = this.triggerEvent.bind(this)\r\n socket.emit = this.emit.bind(this)\r\n }\r\n\r\n }\r\n\r\n // Connect them all\r\n return Promise.all(this.sockets.map(s => s.connect())).then(e => this)\r\n\r\n }\r\n\r\n /**\r\n * This sends a message through the web socket\r\n * @param {*} cmd\r\n */\r\n sendMessage (cmd) {\r\n \r\n // Send message to all sockets\r\n for (let socket of this.sockets)\r\n socket.sendMessage(cmd)\r\n\r\n }\r\n\r\n /**\r\n * @public\r\n * Forcefully closes the Web socket.\r\n * Note: Socket will be set to null. Auto connect will be disabled.\r\n */\r\n close () {\r\n \r\n // Close all sockets\r\n for (let socket of this.sockets) socket.close()\r\n this.sockets = []\r\n \r\n }\r\n\r\n}","//\r\n// BlockV AG. Copyright (c) 2018, all rights reserved.\r\n//\r\n// Licensed under the BlockV SDK License (the \"License\"); you may not use this file or\r\n// the BlockV SDK except in compliance with the License accompanying it. Unless\r\n// required by applicable law or agreed to in writing, the BlockV SDK distributed under\r\n// the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF\r\n// ANY KIND, either express or implied. See the License for the specific language\r\n// governing permissions and limitations under the License.\r\n//\r\nimport DataPool from '../internal/DataPool'\r\nimport Store from '../internal/repo/Store'\r\nimport UserManager from './manager/UserManager'\r\nimport UserApi from '../internal/net/rest/api/UserApi'\r\nimport Vatoms from './manager/Vatoms'\r\nimport Activity from './manager/Activity'\r\nimport ActivityApi from '../internal/net/rest/api/ActivityApi'\r\nimport Client from '../internal/net/Client'\r\nimport MultiWebSockets from './manager/MultiWebSockets'\r\nimport EventEmitter from '../internal/EventEmitter';\r\n\r\nexport default class Blockv extends EventEmitter {\r\n constructor (payload) {\r\n super()\r\n const prefix = payload.prefix || payload.appID\r\n\r\n this.store = new Store(prefix)\r\n this.store.appID = payload.appID\r\n this.store.server = payload.server || 'https://api.blockv.io'\r\n this.store.websocketAddress = payload.websocketAddress || 'wss://newws.blockv.io'\r\n\r\n this.dataPool = new DataPool(this)\r\n this.dataPool.Blockv = this\r\n this.dataPool.disableSyncV2 = payload.disableSyncV2\r\n this.client = new Client(this)\r\n\r\n const userApi = new UserApi(this)\r\n const activityApi = new ActivityApi(this.client)\r\n\r\n this.Activity = new Activity(activityApi)\r\n this.WebSockets = new MultiWebSockets(this.store, this.client)\r\n this.UserManager = new UserManager(userApi, this.store)\r\n this.Vatoms = new Vatoms(this)\r\n\r\n if (this.UserManager.isLoggedIn) {\r\n this.dataPool.setSessionInfo({ userID: this.store.userID, client: this.client })\r\n }\r\n }\r\n}\r\n","//\r\n// BlockV AG. Copyright (c) 2018, all rights reserved.\r\n//\r\n// Licensed under the BlockV SDK License (the \"License\"); you may not use this file or\r\n// the BlockV SDK except in compliance with the License accompanying it. Unless\r\n// required by applicable law or agreed to in writing, the BlockV SDK distributed under\r\n// the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF\r\n// ANY KIND, either express or implied. See the License for the specific language\r\n// governing permissions and limitations under the License.\r\n//\r\n\r\n// This file is used as the entry point when compiling a minified build to be imported via a <script> tag.\r\n// It exposes all classes as global objects.\r\n\r\nimport Blockv from '../src/client/Blockv'\r\nimport Discover from '../src/client/Discover'\r\nimport VatomView from './VatomView'\r\nimport FaceSelection from './FaceSelection'\r\nimport BaseFace from './faces/BaseFace'\r\n\r\nwindow.Blockv = Blockv\r\nwindow.Discover = Discover\r\nwindow.VatomView = VatomView\r\nwindow.FaceSelection = FaceSelection\r\nwindow.BaseFace = BaseFace\r\n"],"sourceRoot":""}
\No newline at end of file