diff --git a/build/build.js b/build/build.js index 0f6755db1..d26e5893a 100644 --- a/build/build.js +++ b/build/build.js @@ -1,4 +1,4 @@ -!function(e){var t=this.webpackHotUpdate;this.webpackHotUpdate=function(e,a){!function(e,t){if(!w[e]||!A[e])return;for(var a in A[e]=!1,t)Object.prototype.hasOwnProperty.call(t,a)&&(f[a]=t[a]);0==--y&&0===g&&k()}(e,a),t&&t(e,a)};var a,s=!0,n="31f819ec7507aac36aee",r={},o=[],i=[];function c(e){var t=P[e];if(!t)return j;var s=function(s){return t.hot.active?(P[s]?-1===P[s].parents.indexOf(e)&&P[s].parents.push(e):(o=[e],a=s),-1===t.children.indexOf(s)&&t.children.push(s)):(console.warn("[HMR] unexpected require("+s+") from disposed module "+e),o=[]),j(s)},n=function(e){return{configurable:!0,enumerable:!0,get:function(){return j[e]},set:function(t){j[e]=t}}};for(var r in j)Object.prototype.hasOwnProperty.call(j,r)&&"e"!==r&&"t"!==r&&Object.defineProperty(s,r,n(r));return s.e=function(e){return"ready"===u&&h("prepare"),g++,j.e(e).then(t,(function(e){throw t(),e}));function t(){g--,"prepare"===u&&(v[e]||T(e),0===g&&0===y&&k())}},s.t=function(e,t){return 1&t&&(e=s(e)),j.t(e,-2&t)},s}function d(t){var s={_acceptedDependencies:{},_declinedDependencies:{},_selfAccepted:!1,_selfDeclined:!1,_selfInvalidated:!1,_disposeHandlers:[],_main:a!==t,active:!0,accept:function(e,t){if(void 0===e)s._selfAccepted=!0;else if("function"==typeof e)s._selfAccepted=e;else if("object"==typeof e)for(var a=0;a=0&&s._disposeHandlers.splice(t,1)},invalidate:function(){switch(this._selfInvalidated=!0,u){case"idle":(f={})[t]=e[t],h("ready");break;case"ready":x(t);break;case"prepare":case"check":case"dispose":case"apply":(b=b||[]).push(t)}},check:E,apply:R,status:function(e){if(!e)return u;l.push(e)},addStatusHandler:function(e){l.push(e)},removeStatusHandler:function(e){var t=l.indexOf(e);t>=0&&l.splice(t,1)},data:r[t]};return a=void 0,s}var l=[],u="idle";function h(e){u=e;for(var t=0;t0;){var n=s.pop(),r=n.id,o=n.chain;if((l=P[r])&&(!l.hot._selfAccepted||l.hot._selfInvalidated)){if(l.hot._selfDeclined)return{type:"self-declined",chain:o,moduleId:r};if(l.hot._main)return{type:"unaccepted",chain:o,moduleId:r};for(var i=0;i ")),k.type){case"self-declined":s.onDeclined&&s.onDeclined(k),s.ignoreDeclined||(R=new Error("Aborted because of self decline: "+k.moduleId+M));break;case"declined":s.onDeclined&&s.onDeclined(k),s.ignoreDeclined||(R=new Error("Aborted because of declined dependency: "+k.moduleId+" in "+k.parentId+M));break;case"unaccepted":s.onUnaccepted&&s.onUnaccepted(k),s.ignoreUnaccepted||(R=new Error("Aborted because "+u+" is not accepted"+M));break;case"accepted":s.onAccepted&&s.onAccepted(k),x=!0;break;case"disposed":s.onDisposed&&s.onDisposed(k),L=!0;break;default:throw new Error("Unexception type "+k.type)}if(R)return h("abort"),Promise.reject(R);if(x)for(u in A[u]=f[u],y(v,k.outdatedModules),k.outdatedDependencies)Object.prototype.hasOwnProperty.call(k.outdatedDependencies,u)&&(g[u]||(g[u]=[]),y(g[u],k.outdatedDependencies[u]));L&&(y(v,[k.moduleId]),A[u]=E)}var _,D=[];for(c=0;c0;)if(u=Z.pop(),l=P[u]){var C={},U=l.hot._disposeHandlers;for(d=0;d=0&&F.parents.splice(_,1))}}for(u in g)if(Object.prototype.hasOwnProperty.call(g,u)&&(l=P[u]))for(O=g[u],d=0;d=0&&l.children.splice(_,1);h("apply"),void 0!==p&&(n=p,p=void 0);for(u in f=void 0,A)Object.prototype.hasOwnProperty.call(A,u)&&(e[u]=A[u]);var q=null;for(u in g)if(Object.prototype.hasOwnProperty.call(g,u)&&(l=P[u])){O=g[u];var H=[];for(c=0;c1)for(var a=1;a=0&&s._disposeHandlers.splice(t,1)},invalidate:function(){switch(this._selfInvalidated=!0,u){case"idle":(f={})[t]=e[t],h("ready");break;case"ready":x(t);break;case"prepare":case"check":case"dispose":case"apply":(b=b||[]).push(t)}},check:E,apply:R,status:function(e){if(!e)return u;l.push(e)},addStatusHandler:function(e){l.push(e)},removeStatusHandler:function(e){var t=l.indexOf(e);t>=0&&l.splice(t,1)},data:r[t]};return a=void 0,s}var l=[],u="idle";function h(e){u=e;for(var t=0;t0;){var n=s.pop(),r=n.id,o=n.chain;if((l=P[r])&&(!l.hot._selfAccepted||l.hot._selfInvalidated)){if(l.hot._selfDeclined)return{type:"self-declined",chain:o,moduleId:r};if(l.hot._main)return{type:"unaccepted",chain:o,moduleId:r};for(var i=0;i ")),k.type){case"self-declined":s.onDeclined&&s.onDeclined(k),s.ignoreDeclined||(R=new Error("Aborted because of self decline: "+k.moduleId+M));break;case"declined":s.onDeclined&&s.onDeclined(k),s.ignoreDeclined||(R=new Error("Aborted because of declined dependency: "+k.moduleId+" in "+k.parentId+M));break;case"unaccepted":s.onUnaccepted&&s.onUnaccepted(k),s.ignoreUnaccepted||(R=new Error("Aborted because "+u+" is not accepted"+M));break;case"accepted":s.onAccepted&&s.onAccepted(k),x=!0;break;case"disposed":s.onDisposed&&s.onDisposed(k),L=!0;break;default:throw new Error("Unexception type "+k.type)}if(R)return h("abort"),Promise.reject(R);if(x)for(u in A[u]=f[u],y(v,k.outdatedModules),k.outdatedDependencies)Object.prototype.hasOwnProperty.call(k.outdatedDependencies,u)&&(g[u]||(g[u]=[]),y(g[u],k.outdatedDependencies[u]));L&&(y(v,[k.moduleId]),A[u]=E)}var _,D=[];for(c=0;c0;)if(u=Z.pop(),l=P[u]){var C={},U=l.hot._disposeHandlers;for(d=0;d=0&&F.parents.splice(_,1))}}for(u in g)if(Object.prototype.hasOwnProperty.call(g,u)&&(l=P[u]))for(O=g[u],d=0;d=0&&l.children.splice(_,1);h("apply"),void 0!==p&&(n=p,p=void 0);for(u in f=void 0,A)Object.prototype.hasOwnProperty.call(A,u)&&(e[u]=A[u]);var q=null;for(u in g)if(Object.prototype.hasOwnProperty.call(g,u)&&(l=P[u])){O=g[u];var H=[];for(c=0;c1)for(var a=1;a=(null!=s?s:t.logLevel)&&e({level:r[a].toLowerCase(),message:i,args:n,type:t.name})}},s=0,n=o;s{},console.timeEnd=()=>{},a(41),a(42),a(43),a(44),a(45),a(46),a(48),a(49),AFRAME.log=()=>{},a(51),a(53),a(54),a(55),a(56),a(57),s(a(58)),s(a(191)),a(195),a(202),e.hot.accept(),document.addEventListener("DOMContentLoaded",()=>{!function(){const e=document.querySelector("form");if(!e)return;if(localStorage.getItem("subscribeClosed")){const t=e.parentNode;return void t.parentNode.removeChild(t)}document.getElementById("subscribeClose").addEventListener("click",()=>{const t=e.parentNode;t.parentNode.removeChild(t),localStorage.setItem("subscribeClosed",!0)});const t=e.querySelector(".submit"),a=e.querySelector('input[type="email"]'),s=document.querySelector("#subscribeForm > h2");let n="";s&&(n=s.innerHTML);e.addEventListener("submit",e=>{e.preventDefault();const a=new XMLHttpRequest;let n="http://localhost:5000/mail/subscribe";return n="https://supermedium.com/mail/subscribe",a.open("POST",n),a.addEventListener("load",()=>{200!==parseInt(a.status,10)&&(window.location.href="https://supermedium/subscribe/"),t&&(t.disabled=!0,t.innerHTML="Subscribed!"),s&&(s.innerHTML="Successfully subscribed, thank you!")}),a.setRequestHeader("Content-Type","application/json;charset=UTF-8"),a.send(JSON.stringify({email:document.querySelector('[name="email"]').value,source:"moonrider"})),!1}),t&&a.addEventListener("keydown",()=>{t.hasAttribute("disabled")&&(t.innerHTML="Subscribe",t.removeAttribute("disabled")),s&&n&&(s.innerHTML=n)})}()}),"http:"!==window.location.protocol||window.location.host.startsWith("localhost")||window.location.replace("https:"+location.href.substring(location.protocol.length))},function(e,t){THREE.BufferGeometryUtils={computeTangents:function(e){var t=e.index,a=e.attributes;if(null!==t&&void 0!==a.position&&void 0!==a.normal&&void 0!==a.uv){var s=t.array,n=a.position.array,r=a.normal.array,o=a.uv.array,i=n.length/3;void 0===a.tangent&&e.addAttribute("tangent",new THREE.BufferAttribute(new Float32Array(4*i),4));for(var c=a.tangent.array,d=[],l=[],u=0;u0){p=p.clone();for(var b=0;b=s.x&&this.boxMin.y<=n.y&&this.boxMax.y>=s.y&&this.boxMin.z<=n.z&&this.boxMax.z>=s.z}}(),setDirty:function(){this.dirty=!0},refreshObjects:function(){const e=this.data;this.objectEls=e.objects?this.el.sceneEl.querySelectorAll(e.objects):this.el.sceneEl.children,this.dirty=!1}})},function(e,t){var a=[new THREE.Vector2,new THREE.Vector2,new THREE.Vector2,new THREE.Vector2];function s(e,t,s,n){const r=1/n,o=1/s;return a[0].set(r*t,o*e+o),a[1].set(r*t,o*e),a[2].set(r*t+r,o*e),a[3].set(r*t+r,o*e+o),a}AFRAME.registerComponent("atlas-uvs",{dependencies:["geometry"],schema:{totalColumns:{type:"int",default:1},totalRows:{type:"int",default:1},column:{type:"int",default:1},row:{type:"int",default:1}},update:function(){const e=this.data,t=s(e.row-1,e.column-1,e.totalRows,e.totalColumns),a=this.el.getObject3D("mesh").geometry;a.faceVertexUvs[0][0][0].copy(t[0]),a.faceVertexUvs[0][0][1].copy(t[1]),a.faceVertexUvs[0][0][2].copy(t[3]),a.faceVertexUvs[0][1][0].copy(t[1]),a.faceVertexUvs[0][1][1].copy(t[2]),a.faceVertexUvs[0][1][2].copy(t[3]),a.uvsNeedUpdate=!0}}),AFRAME.registerComponent("dynamic-texture-atlas",{schema:{canvasId:{default:"dynamicAtlas"},canvasHeight:{default:1024},canvasWidth:{default:1024},debug:{default:!1},numColumns:{default:8},numRows:{default:8}},multiple:!0,init:function(){const e=this.canvas=document.createElement("canvas");e.id=this.data.canvasId,e.height=this.data.canvasHeight,e.width=this.data.canvasWidth,this.ctx=e.getContext("2d"),document.body.appendChild(e),this.data.debug&&(e.style.left=0,e.style.top=0,e.style.position="fixed",e.style.zIndex=9999999999)},drawTexture:function(e,t,a,n,r){const o=this.canvas,i=this.data;e.complete||(e.onload=()=>{this.drawTexture(e,t,a)});const c=r||o.height/i.numRows,d=n||o.width/i.numColumns;return this.ctx.drawImage(e,d*t,d*a,d,c),s(t,a,i.numRows,i.numColumns)}}),e.exports.getGridUvs=s},function(e,t){if("undefined"==typeof AFRAME)throw new Error("Component attempted to register before AFRAME was available.");var a={};AFRAME.registerComponent("audioanalyser",{schema:{buffer:{default:!1},beatDetectionDecay:{default:.99},beatDetectionMinVolume:{default:15},beatDetectionThrottle:{default:250},cache:{default:!1},enabled:{default:!0},enableBeatDetection:{default:!0},enableLevels:{default:!0},enableWaveform:{default:!0},enableVolume:{default:!0},fftSize:{default:2048},smoothingTimeConstant:{default:.8},src:{parse:function(e){return e.constructor!==String?e:e.startsWith("#")||e.startsWith(".")?document.querySelector(e):e}},unique:{default:!1}},init:function(){this.audioEl=null,this.levels=null,this.waveform=null,this.volume=0,this.xhr=null,this.initContext()},update:function(e){var t=this.analyser,a=this.data;e.fftSize===a.fftSize&&e.smoothingTimeConstant===a.smoothingTimeConstant||(t.fftSize=a.fftSize,t.smoothingTimeConstant=a.smoothingTimeConstant,this.levels=new Uint8Array(t.frequencyBinCount),this.waveform=new Uint8Array(t.fftSize)),a.src&&this.refreshSource()},tick:function(e,t){var a,s=this.data;if(s.enabled){if((s.enableLevels||s.enableVolume)&&this.analyser.getByteFrequencyData(this.levels),s.enableWaveform&&this.analyser.getByteTimeDomainData(this.waveform),s.enableVolume||s.enableBeatDetection){for(var n=0,r=0;rthis.beatCutOff&&a>this.data.beatDetectionMinVolume?(this.el.emit("audioanalyserbeat",null,!1),this.beatCutOff=1.5*a,this.beatTime=0):this.beatTime<=this.data.beatDetectionThrottle?this.beatTime+=t:(this.beatCutOff*=this.data.beatDetectionDecay,this.beatCutOff=Math.max(this.beatCutOff,this.data.beatDetectionMinVolume)))}},initContext:function(){var e,t=this.data;this.context=new(window.webkitAudioContext||window.AudioContext),e=this.analyser=this.context.createAnalyser(),(this.gainNode=this.context.createGain()).connect(e),e.connect(this.context.destination),e.fftSize=t.fftSize,e.smoothingTimeConstant=t.smoothingTimeConstant,this.levels=new Uint8Array(e.frequencyBinCount),this.waveform=new Uint8Array(e.fftSize)},refreshSource:function(){this.analyser;var e=this.data;e.buffer&&e.src.constructor===String?this.getBufferSource().then(e=>{this.source=e,this.source.connect(this.gainNode)}):(this.source=this.getMediaSource(),this.source.connect(this.gainNode))},suspendContext:function(){this.context.suspend()},resumeContext:function(){this.context.resume()},fetchAudioBuffer:function(e){return a[e]?a[e].constructor===Promise?a[e]:Promise.resolve(a[e]):(this.data.cache||Object.keys(a).forEach((function(e){delete a[e]})),a[e]=new Promise(t=>{const s=this.xhr=new XMLHttpRequest;s.open("GET",e),s.responseType="arraybuffer",s.addEventListener("load",()=>{function n(s){a[e]=s,t(s)}const r=this.context.decodeAudioData(s.response,n);r&&r.constructor===Promise&&r.then(n).catch(console.error)}),s.send()}),a[e])},getBufferSource:function(){var e=this.data;return this.fetchAudioBuffer(e.src).then(()=>{var t;return(t=this.context.createBufferSource()).buffer=a[e.src],this.el.emit("audioanalyserbuffersource",t,!1),t}).catch(console.error)},getMediaSource:function(){const e={};return function(){const t=this.data.src.constructor===String?this.data.src:this.data.src.src;if(e[t])return e[t];this.data.src.constructor===String?(this.audio=document.createElement("audio"),this.audio.crossOrigin="anonymous",this.audio.setAttribute("src",this.data.src)):this.audio=this.data.src;const a=this.context.createMediaElementSource(this.audio);return e[t]=a,a}}()})},function(e,t){var a=AFRAME.utils.styleParser;if("undefined"==typeof AFRAME)throw new Error("Component attempted to register before AFRAME was available.");AFRAME.registerComponent("event-set",{schema:{default:"",parse:function(e){return a.parse(e)}},multiple:!0,init:function(){this.eventHandler=null,this.eventName=null},update:function(e){this.removeEventListener(),this.updateEventListener(),this.addEventListener()},remove:function(){this.removeEventListener()},pause:function(){this.removeEventListener()},play:function(){this.addEventListener()},updateEventListener:function(){var e,t,a,s=this.data,n=this.el;e=s._event||this.id,t=s._target,a=t?n.sceneEl.querySelector(t):n,this.eventName=e;const r=()=>{var e;for(e in s)"_event"!==e&&"_target"!==e&&AFRAME.utils.entity.setComponentProperty.call(this,a,e,s[e])};isNaN(s._delay)?this.eventHandler=r:this.eventHandler=()=>{setTimeout(r,parseFloat(s._delay))}},addEventListener:function(){this.el.addEventListener(this.eventName,this.eventHandler)},removeEventListener:function(){this.el.removeEventListener(this.eventName,this.eventHandler)}})},function(e,t,a){THREE.BufferGeometryUtils||a(47),AFRAME.registerComponent("geometry-merger",{schema:{preserveOriginal:{default:!1}},init:function(){var e=this;this.geometry=new THREE.Geometry,this.mesh=new THREE.Mesh(this.geometry),this.el.setObject3D("mesh",this.mesh),this.faceIndex={},this.vertexIndex={},this.el.object3D.traverse((function(t){"Mesh"===t.type&&t!==e.mesh&&(e.faceIndex[t.parent.uuid]=[e.geometry.faces.length,e.geometry.faces.length+t.geometry.faces.length-1],e.vertexIndex[t.parent.uuid]=[e.geometry.vertices.length,e.geometry.vertices.length+t.geometry.vertices.length-1],t.parent.updateMatrix(),e.geometry.merge(t.geometry,t.parent.matrix),e.data.preserveOriginal||t.parent.remove(t))}))}}),AFRAME.registerComponent("buffer-geometry-merger",{schema:{preserveOriginal:{default:!1}},init:function(){var e=[];this.el.sceneEl.object3D.updateMatrixWorld(),this.el.object3D.traverse((function(t){"Mesh"===t.type&&t.el!==self.el&&(t.geometry.applyMatrix(t.matrixWorld),e.push(t.geometry.clone()),t.parent.remove(t))}));const t=THREE.BufferGeometryUtils.mergeBufferGeometries(e);this.mesh=new THREE.Mesh(t),this.el.setObject3D("mesh",this.mesh)}})},function(e,t){THREE.BufferGeometryUtils={computeTangents:function(e){var t=e.index,a=e.attributes;if(null!==t&&void 0!==a.position&&void 0!==a.normal&&void 0!==a.uv){var s=t.array,n=a.position.array,r=a.normal.array,o=a.uv.array,i=n.length/3;void 0===a.tangent&&e.addAttribute("tangent",new THREE.BufferAttribute(new Float32Array(4*i),4));for(var c=a.tangent.array,d=[],l=[],u=0;ua.max&&this.logs.shift(),this.el.setAttribute("text",{value:this.logs.join("\n")}))},remove:function(){this.el.removeAttribute("text"),this.system.unregisterLogger(this)}})},function(e,t,a){a(52),AFRAME.registerComponent("orbit-controls",{dependencies:["camera"],schema:{autoRotate:{type:"boolean"},autoRotateSpeed:{default:2},dampingFactor:{default:.1},enabled:{default:!0},enableDamping:{default:!0},enableKeys:{default:!0},enablePan:{default:!0},enableRotate:{default:!0},enableZoom:{default:!0},initialPosition:{type:"vec3"},keyPanSpeed:{default:7},minAzimuthAngle:{type:"number",default:1/0},maxAzimuthAngle:{type:"number",default:1/0},maxDistance:{default:1e3},maxPolarAngle:{default:AFRAME.utils.device.isMobile()?90:120},minDistance:{default:1},minPolarAngle:{default:0},minZoom:{default:0},panSpeed:{default:1},rotateSpeed:{default:.05},screenSpacePanning:{default:!1},target:{type:"vec3"},zoomSpeed:{default:.5}},init:function(){var e,t=this.el;this.controls=new THREE.OrbitControls(t.getObject3D("camera"),t.sceneEl.renderer.domElement),e=new THREE.Vector3,t.sceneEl.addEventListener("enter-vr",()=>{(AFRAME.utils.device.checkHeadsetConnected()||AFRAME.utils.device.isMobile())&&(this.controls.enabled=!1,t.hasAttribute("look-controls")&&(t.setAttribute("look-controls","enabled",!0),e.copy(t.getObject3D("camera").position),t.getObject3D("camera").position.set(0,0,0)))}),t.sceneEl.addEventListener("exit-vr",()=>{(AFRAME.utils.device.checkHeadsetConnected()||AFRAME.utils.device.isMobile())&&(this.controls.enabled=!0,t.getObject3D("camera").position.copy(e),t.hasAttribute("look-controls")&&t.setAttribute("look-controls","enabled",!1))}),document.body.style.cursor="grab",document.addEventListener("mousedown",()=>{document.body.style.cursor="grabbing"}),document.addEventListener("mouseup",()=>{document.body.style.cursor="grab"}),this.target=new THREE.Vector3,t.getObject3D("camera").position.copy(this.data.initialPosition)},update:function(e){var t=this.controls,a=this.data;t.target=this.target.copy(a.target),t.autoRotate=a.autoRotate,t.autoRotateSpeed=a.autoRotateSpeed,t.dampingFactor=a.dampingFactor,t.enabled=a.enabled,t.enableDamping=a.enableDamping,t.enableKeys=a.enableKeys,t.enablePan=a.enablePan,t.enableRotate=a.enableRotate,t.enableZoom=a.enableZoom,t.keyPanSpeed=a.keyPanSpeed,t.maxPolarAngle=THREE.Math.degToRad(a.maxPolarAngle),t.maxDistance=a.maxDistance,t.minDistance=a.minDistance,t.minPolarAngle=THREE.Math.degToRad(a.minPolarAngle),t.minZoom=a.minZoom,t.panSpeed=a.panSpeed,t.rotateSpeed=a.rotateSpeed,t.screenSpacePanning=a.screenSpacePanning,t.zoomSpeed=a.zoomSpeed},tick:function(){var e=this.controls;this.data.enabled&&e.enabled&&(e.enableDamping||e.autoRotate)&&this.controls.update()}})},function(e,t){THREE.OrbitControls=function(e,t){var a,s,n,r,o;this.object=e,this.domElement=void 0!==t?t:document,this.enabled=!0,this.target=new THREE.Vector3,this.minDistance=0,this.maxDistance=1/0,this.minZoom=0,this.maxZoom=1/0,this.minPolarAngle=0,this.maxPolarAngle=Math.PI,this.minAzimuthAngle=-1/0,this.maxAzimuthAngle=1/0,this.enableDamping=!1,this.dampingFactor=.25,this.enableZoom=!0,this.zoomSpeed=1,this.enableRotate=!0,this.rotateSpeed=1,this.enablePan=!0,this.keyPanSpeed=7,this.autoRotate=!1,this.autoRotateSpeed=2,this.enableKeys=!0,this.keys={LEFT:37,UP:38,RIGHT:39,BOTTOM:40},this.mouseButtons={ORBIT:THREE.MOUSE.LEFT,ZOOM:THREE.MOUSE.MIDDLE,PAN:THREE.MOUSE.RIGHT},this.target0=this.target.clone(),this.position0=this.object.position.clone(),this.zoom0=this.object.zoom,this.getPolarAngle=function(){return f.phi},this.getAzimuthalAngle=function(){return f.theta},this.saveState=function(){i.target0.copy(i.target),i.position0.copy(i.object.position),i.zoom0=i.object.zoom},this.reset=function(){i.target.copy(i.target0),i.object.position.copy(i.position0),i.object.zoom=i.zoom0,i.object.updateProjectionMatrix(),i.dispatchEvent(c),i.update(),h=u.NONE},this.update=(a=new THREE.Vector3,s=(new THREE.Quaternion).setFromUnitVectors(e.up,new THREE.Vector3(0,1,0)),n=s.clone().inverse(),r=new THREE.Vector3,o=new THREE.Quaternion,function(){var e=i.object.position;return a.copy(e).sub(i.target),a.applyQuaternion(s),f.setFromVector3(a),i.autoRotate&&h===u.NONE&&P(2*Math.PI/60/60*i.autoRotateSpeed),f.theta+=p.theta,f.phi+=p.phi,f.theta=Math.max(i.minAzimuthAngle,Math.min(i.maxAzimuthAngle,f.theta)),f.phi=Math.max(i.minPolarAngle,Math.min(i.maxPolarAngle,f.phi)),f.makeSafe(),f.radius*=b,f.radius=Math.max(i.minDistance,Math.min(i.maxDistance,f.radius)),i.target.add(y),a.setFromSpherical(f),a.applyQuaternion(n),e.copy(i.target).add(a),i.object.lookAt(i.target),!0===i.enableDamping?(p.theta*=1-i.dampingFactor,p.phi*=1-i.dampingFactor):p.set(0,0,0),b=1,y.set(0,0,0),!!(g||r.distanceToSquared(i.object.position)>m||8*(1-o.dot(i.object.quaternion))>m)&&(i.dispatchEvent(c),r.copy(i.object.position),o.copy(i.object.quaternion),g=!1,!0)}),this.dispose=function(){i.domElement.removeEventListener("contextmenu",V,!1),i.domElement.removeEventListener("mousedown",Z,!1),i.domElement.removeEventListener("wheel",F,!1),i.domElement.removeEventListener("touchstart",H,!1),i.domElement.removeEventListener("touchend",z,!1),i.domElement.removeEventListener("touchmove",B,!1),document.removeEventListener("mousemove",C,!1),document.removeEventListener("mouseup",U,!1),window.removeEventListener("keydown",q,!1)};var i=this,c={type:"change"},d={type:"start"},l={type:"end"},u={NONE:-1,ROTATE:0,DOLLY:1,PAN:2,TOUCH_ROTATE:3,TOUCH_DOLLY:4,TOUCH_PAN:5},h=u.NONE,m=1e-6,f=new THREE.Spherical,p=new THREE.Spherical,b=1,y=new THREE.Vector3,g=!1,v=new THREE.Vector2,A=new THREE.Vector2,w=new THREE.Vector2,S=new THREE.Vector2,E=new THREE.Vector2,T=new THREE.Vector2,k=new THREE.Vector2,R=new THREE.Vector2,N=new THREE.Vector2;function x(){return Math.pow(.95,i.zoomSpeed)}function P(e){p.theta-=e}function j(e){p.phi-=e}var L,M=(L=new THREE.Vector3,function(e,t){L.setFromMatrixColumn(t,0),L.multiplyScalar(-e),y.add(L)}),_=function(){var e=new THREE.Vector3;return function(t,a){e.setFromMatrixColumn(a,1),e.multiplyScalar(t),y.add(e)}}(),D=function(){var e=new THREE.Vector3;return function(t,a){var s=i.domElement===document?i.domElement.body:i.domElement;if(i.object.isPerspectiveCamera){var n=i.object.position;e.copy(n).sub(i.target);var r=e.length();r*=Math.tan(i.object.fov/2*Math.PI/180),M(2*t*r/s.clientHeight,i.object.matrix),_(2*a*r/s.clientHeight,i.object.matrix)}else i.object.isOrthographicCamera?(M(t*(i.object.right-i.object.left)/i.object.zoom/s.clientWidth,i.object.matrix),_(a*(i.object.top-i.object.bottom)/i.object.zoom/s.clientHeight,i.object.matrix)):(console.warn("WARNING: OrbitControls.js encountered an unknown camera type - pan disabled."),i.enablePan=!1)}}();function I(e){i.object.isPerspectiveCamera?b/=e:i.object.isOrthographicCamera?(i.object.zoom=Math.max(i.minZoom,Math.min(i.maxZoom,i.object.zoom*e)),i.object.updateProjectionMatrix(),g=!0):(console.warn("WARNING: OrbitControls.js encountered an unknown camera type - dolly/zoom disabled."),i.enableZoom=!1)}function O(e){i.object.isPerspectiveCamera?b*=e:i.object.isOrthographicCamera?(i.object.zoom=Math.max(i.minZoom,Math.min(i.maxZoom,i.object.zoom/e)),i.object.updateProjectionMatrix(),g=!0):(console.warn("WARNING: OrbitControls.js encountered an unknown camera type - dolly/zoom disabled."),i.enableZoom=!1)}function Z(e){if(!1!==i.enabled){switch(e.preventDefault(),e.button){case i.mouseButtons.ORBIT:if(!1===i.enableRotate)return;!function(e){v.set(e.clientX,e.clientY)}(e),h=u.ROTATE;break;case i.mouseButtons.ZOOM:if(!1===i.enableZoom)return;!function(e){k.set(e.clientX,e.clientY)}(e),h=u.DOLLY;break;case i.mouseButtons.PAN:if(!1===i.enablePan)return;!function(e){S.set(e.clientX,e.clientY)}(e),h=u.PAN}h!==u.NONE&&(document.addEventListener("mousemove",C,!1),document.addEventListener("mouseup",U,!1),i.dispatchEvent(d))}}function C(e){if(!1!==i.enabled)switch(e.preventDefault(),h){case u.ROTATE:if(!1===i.enableRotate)return;!function(e){A.set(e.clientX,e.clientY),w.subVectors(A,v);var t=i.domElement===document?i.domElement.body:i.domElement;P(2*Math.PI*w.x/t.clientWidth*i.rotateSpeed),j(2*Math.PI*w.y/t.clientHeight*i.rotateSpeed),v.copy(A),i.update()}(e);break;case u.DOLLY:if(!1===i.enableZoom)return;!function(e){R.set(e.clientX,e.clientY),N.subVectors(R,k),N.y>0?I(x()):N.y<0&&O(x()),k.copy(R),i.update()}(e);break;case u.PAN:if(!1===i.enablePan)return;!function(e){E.set(e.clientX,e.clientY),T.subVectors(E,S),D(T.x,T.y),S.copy(E),i.update()}(e)}}function U(e){!1!==i.enabled&&(document.removeEventListener("mousemove",C,!1),document.removeEventListener("mouseup",U,!1),i.dispatchEvent(l),h=u.NONE)}function F(e){!1===i.enabled||!1===i.enableZoom||h!==u.NONE&&h!==u.ROTATE||(e.preventDefault(),e.stopPropagation(),i.dispatchEvent(d),function(e){e.deltaY<0?O(x()):e.deltaY>0&&I(x()),i.update()}(e),i.dispatchEvent(l))}function q(e){!1!==i.enabled&&!1!==i.enableKeys&&!1!==i.enablePan&&function(e){switch(e.keyCode){case i.keys.UP:D(0,i.keyPanSpeed),i.update();break;case i.keys.BOTTOM:D(0,-i.keyPanSpeed),i.update();break;case i.keys.LEFT:D(i.keyPanSpeed,0),i.update();break;case i.keys.RIGHT:D(-i.keyPanSpeed,0),i.update()}}(e)}function H(e){if(!1!==i.enabled){switch(e.touches.length){case 1:if(!1===i.enableRotate)return;!function(e){v.set(e.touches[0].pageX,e.touches[0].pageY)}(e),h=u.TOUCH_ROTATE;break;case 2:if(!1===i.enableZoom)return;!function(e){var t=e.touches[0].pageX-e.touches[1].pageX,a=e.touches[0].pageY-e.touches[1].pageY,s=Math.sqrt(t*t+a*a);k.set(0,s)}(e),h=u.TOUCH_DOLLY;break;case 3:if(!1===i.enablePan)return;!function(e){S.set(e.touches[0].pageX,e.touches[0].pageY)}(e),h=u.TOUCH_PAN;break;default:h=u.NONE}h!==u.NONE&&i.dispatchEvent(d)}}function B(e){if(!1!==i.enabled)switch(e.preventDefault(),e.stopPropagation(),e.touches.length){case 1:if(!1===i.enableRotate)return;if(h!==u.TOUCH_ROTATE)return;!function(e){A.set(e.touches[0].pageX,e.touches[0].pageY),w.subVectors(A,v);var t=i.domElement===document?i.domElement.body:i.domElement;P(2*Math.PI*w.x/t.clientWidth*i.rotateSpeed),j(2*Math.PI*w.y/t.clientHeight*i.rotateSpeed),v.copy(A),i.update()}(e);break;case 2:if(!1===i.enableZoom)return;if(h!==u.TOUCH_DOLLY)return;!function(e){var t=e.touches[0].pageX-e.touches[1].pageX,a=e.touches[0].pageY-e.touches[1].pageY,s=Math.sqrt(t*t+a*a);R.set(0,s),N.subVectors(R,k),N.y>0?O(x()):N.y<0&&I(x()),k.copy(R),i.update()}(e);break;case 3:if(!1===i.enablePan)return;if(h!==u.TOUCH_PAN)return;!function(e){E.set(e.touches[0].pageX,e.touches[0].pageY),T.subVectors(E,S),D(T.x,T.y),S.copy(E),i.update()}(e);break;default:h=u.NONE}}function z(e){!1!==i.enabled&&(i.dispatchEvent(l),h=u.NONE)}function V(e){!1!==i.enabled&&e.preventDefault()}i.domElement.addEventListener("contextmenu",V,!1),i.domElement.addEventListener("mousedown",Z,!1),i.domElement.addEventListener("wheel",F,!1),i.domElement.addEventListener("touchstart",H,!1),i.domElement.addEventListener("touchend",z,!1),i.domElement.addEventListener("touchmove",B,!1),window.addEventListener("keydown",q,!1),this.update()},THREE.OrbitControls.prototype=Object.create(THREE.EventDispatcher.prototype),THREE.OrbitControls.prototype.constructor=THREE.OrbitControls,Object.defineProperties(THREE.OrbitControls.prototype,{center:{get:function(){return console.warn("THREE.OrbitControls: .center has been renamed to .target"),this.target}},noZoom:{get:function(){return console.warn("THREE.OrbitControls: .noZoom has been deprecated. Use .enableZoom instead."),!this.enableZoom},set:function(e){console.warn("THREE.OrbitControls: .noZoom has been deprecated. Use .enableZoom instead."),this.enableZoom=!e}},noRotate:{get:function(){return console.warn("THREE.OrbitControls: .noRotate has been deprecated. Use .enableRotate instead."),!this.enableRotate},set:function(e){console.warn("THREE.OrbitControls: .noRotate has been deprecated. Use .enableRotate instead."),this.enableRotate=!e}},noPan:{get:function(){return console.warn("THREE.OrbitControls: .noPan has been deprecated. Use .enablePan instead."),!this.enablePan},set:function(e){console.warn("THREE.OrbitControls: .noPan has been deprecated. Use .enablePan instead."),this.enablePan=!e}},noKeys:{get:function(){return console.warn("THREE.OrbitControls: .noKeys has been deprecated. Use .enableKeys instead."),!this.enableKeys},set:function(e){console.warn("THREE.OrbitControls: .noKeys has been deprecated. Use .enableKeys instead."),this.enableKeys=!e}},staticMoving:{get:function(){return console.warn("THREE.OrbitControls: .staticMoving has been deprecated. Use .enableDamping instead."),!this.enableDamping},set:function(e){console.warn("THREE.OrbitControls: .staticMoving has been deprecated. Use .enableDamping instead."),this.enableDamping=!e}},dynamicDampingFactor:{get:function(){return console.warn("THREE.OrbitControls: .dynamicDampingFactor has been renamed. Use .dampingFactor instead."),this.dampingFactor},set:function(e){console.warn("THREE.OrbitControls: .dynamicDampingFactor has been renamed. Use .dampingFactor instead."),this.dampingFactor=e}}})},function(e,t){AFRAME.registerComponent("proxy-event",{schema:{captureBubbles:{default:!1},enabled:{default:!0},event:{type:"string"},from:{type:"string"},to:{type:"string"},as:{type:"string"},bubbles:{default:!1}},multiple:!0,init:function(){var e,t,a,s=this.data,n=this.el,r=this;if(s.from?e="PARENT"===s.from?[n.parentNode]:document.querySelectorAll(s.from):a="CHILDREN"===s.to?n.querySelectorAll("*"):"SELF"===s.to?[n]:document.querySelectorAll(s.to),s.from)for(t=0;t{"nonrecursive"!==this.id&&e.detail.object.traverse(this.set)})},update:function(){"nonrecursive"===this.id?this.set(this.el.object3D):this.el.object3D.traverse(this.set)},set:function(e){isNaN(this.data)?e.renderOrder=this.system.order[this.data]:e.renderOrder=parseFloat(this.data)}}),AFRAME.registerComponent("render-order-recursive",{init:function(){this.el.addEventListener("child-attached",e=>{e.detail.el.setAttribute("render-order",this.el.getAttribute("render-order"))})}})},function(e,t,a){var s;"undefined"!=typeof self&&self,s=function(){return function(e){var t={};function a(s){if(t[s])return t[s].exports;var n=t[s]={i:s,l:!1,exports:{}};return e[s].call(n.exports,n,n.exports,a),n.l=!0,n.exports}return a.m=e,a.c=t,a.d=function(e,t,s){a.o(e,t)||Object.defineProperty(e,t,{configurable:!1,enumerable:!0,get:s})},a.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return a.d(t,"a",t),t},a.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},a.p="",a(a.s=1)}([function(e,t,a){"use strict";var s={};e.exports.select=function(e,t,a){return s[t]||(s[t]=new Function("state","item","return "+c(t)+";")),s[t](e,a)};var n=/\.([A-Za-z][\w_-]*)/g,r=/([=&|!?:+-])(\s*)([\(]?)([A-Za-z][\w_-]*)/g,o=/^([\(]?)([A-Za-z][\w_-]*)/g,i=/state\["item"\]/g;function c(e){return e=(e=(e=(e=e.replace(n,'["$1"]')).replace(o,'$1state["$2"]')).replace(r,'$1$2$3state["$4"]')).replace(i,"item")}function d(){var e=arguments;return function(){var t;for(t=0;t","<","<=",">="],u=/\s+/,h=/\(|\)|\!/g;function m(e){return-1===(e=function(e){return 0===e.indexOf("!!")?e.replace("!!",""):0===e.indexOf("!")?e.replace("!",""):e}(e.trim())).indexOf(".")?e:e.substring(0,e.indexOf("."))}e.exports.parseKeysToWatch=function(e,t,a){var s,n;for(n=p(t,u),s=0;s [data-bind-for-active="false"]'))(s=o.querySelector('[data-bind-for-active="false"]')).setAttribute("data-bind-for-key",c),s.setAttribute("data-bind-for-value",d),s.object3D.visible=!0,s.play(),s.setAttribute("data-bind-for-active","true"),s.emit("bindforupdateinplace",i,!1);else{var l=this.generateFromTemplate(i,a);l.addEventListener("loaded",(function(){l.emit("bindforupdateinplace",i,!1)})),o.appendChild(l)}this.renderedKeys.push(d)}else-1!==t.indexOf(d)&&(e.length&&e[0].constructor===String?(s=o.querySelector('[data-bind-for-value="'+d+'"]')).setAttribute("data-bind-for-key",a):s=o.querySelector('[data-bind-for-key="'+c+'"]'),s.emit("bindforupdateinplace",i,!1));e[a+1]&&(this.data.delay?setTimeout((function(){n.renderItemsInPlace(e,t,a+1)}),this.data.delay):this.renderItemsInPlace(e,t,a+1))},generateFromTemplate:function(e,t){var a=this.data;this.el.appendChild(this.system.renderTemplate(this.template,e));var s=this.el.children[this.el.children.length-1];if(!e)return s.setAttribute("data-bind-for-key",""),s.setAttribute("data-bind-for-active","false"),s;var n=this.getBindForKey(e,t);return s.setAttribute("data-bind-for-key",n),a.key||s.setAttribute("data-bind-for-value",e),s.setAttribute("data-bind-for-active","true"),s},getElsToRemove:(s=[],function(e,t){var a=this.data,n=this.el;s.length=0;for(var r=0;r{n[e]={},n[e].START="thumb"+e+"start",n[e].END="thumb"+e+"end"});AFRAME.registerComponent("thumb-controls",{schema:{thresholdAngle:{default:89.5},thresholdPad:{default:.05},thresholdStick:{default:.75}},init:function(){var e=this.el;this.onTrackpadDown=this.onTrackpadDown.bind(this),this.onTrackpadUp=this.onTrackpadUp.bind(this),this.directionStick="",this.directionTrackpad="",e.components["tracked-controls"]&&(this.axis=e.components["tracked-controls"].axis),this.type="STICK",e.addEventListener("controllerconnected",t=>{this.axis=e.components["tracked-controls"].axis,"oculus-touch-controls"!==t.detail.name&&"windows-motion-controls"!==t.detail.name?this.type="PAD":this.type="STICK"})},play:function(){var e=this.el;e.addEventListener("trackpaddown",this.onTrackpadDown),e.addEventListener("trackpadup",this.onTrackpadUp),e.addEventListener("touchpaddown",this.onTrackpadDown),e.addEventListener("touchpadup",this.onTrackpadUp)},pause:function(){var e=this.el;e.removeEventListener("trackpaddown",this.onTrackpadDown),e.removeEventListener("trackpadup",this.onTrackpadUp),e.removeEventListener("touchpaddown",this.onTrackpadDown),e.removeEventListener("touchpadup",this.onTrackpadUp)},onTrackpadDown:function(){var e,t=this.el;this.getDistance()this.data.thresholdStick){if(!(e=this.getDirection()))return;return this.directionStick=e,t.emit(n.NULL.START,null,!1),void t.emit(n[this.directionStick].START,null,!1)}this.directionStick&&this.getDistance()360&&(o-=360),(t=a[n]-r)<0&&(e>=360+t&&e<=360||e>=0&&e<=o))return s[n];if(e>=t&&e<=o)return s[n]}},getAngle:function(){var e,t=this.axis;return this.axis?((e="PAD"===this.type?Math.atan2(-t[1],t[0]):Math.atan2(-t[3],t[2]))<0&&(e=2*Math.PI+e),THREE.Math.radToDeg(e)):0}}),AFRAME.registerComponent("thumb-controls-debug",{dependencies:["thumb-controls"],schema:{controllerType:{type:"string"},hand:{type:"string"},enabled:{default:!1}},init:function(){var e,t,a,s,n=this.el;if(this.data.enabled||AFRAME.utils.getUrlParameter("debug-thumb")){console.log("%c debug-thumb","background: #111; color: red");var r=function(){n.components["tracked-controls"].handleAxes=()=>{},a={axis:t=[0,0,0]},n.components["tracked-controls"].axis=t,n.components["thumb-controls"].axis=t};n.components["tracked-controls"]?r():this.el.addEventListener("controllerconnected",(function(){r()})),(s=this.createCanvas()).addEventListener("click",s=>{"vive-controls"===this.data.controllerType?e?n.emit("trackpadup"):n.emit("trackpaddown"):e&&(t[0]=0,t[1]=0,n.emit("axismove",a,!1)),e=!e}),s.addEventListener("mousemove",r=>{var o;e&&(o=s.getBoundingClientRect(),t[0]=(r.clientX-o.left)/240*2-1,t[1]=(r.clientY-o.top)/240*2-1,n.emit("axismove",a,!1))}),s.addEventListener("mouseleave",s=>{e&&(t[0]=0,t[1]=0,n.emit("axismove",a,!1))})}},createCanvas:function(){var e,t;return(e=document.createElement("canvas")).classList.add("debugThumb"),e.height=240,e.width=240,e.style.bottom=0,e.style.borderRadius="250px",e.style.opacity=.5,e.style.position="fixed",e.style.zIndex=999999999,"left"===this.data.hand?e.style.left=0:e.style.right=0,(t=e.getContext("2d")).fillStyle="#333",t.fillRect(0,0,240,240),document.body.appendChild(e),e}})},function(e,t,a){var s={"./active-item.js":59,"./beat-cut-fx.js":60,"./beat-generator.js":15,"./beat-hit-sound.js":61,"./beat.js":21,"./blade.js":62,"./check-vr.js":63,"./console-shortcuts.js":64,"./controller.js":65,"./copy-texture.js":66,"./cursor-laser.js":67,"./cursor-mesh.js":68,"./curve-follow-rig-reset.js":69,"./cutfx-shader.js":70,"./debug-beat-generator.js":73,"./debug-beat-positioning.js":74,"./debug-controller.js":75,"./debug-cursor.js":76,"./debug-intro.js":77,"./debug-song-time.js":78,"./debug-state.js":79,"./delayed-proxy-event.js":80,"./difficulty-background.js":81,"./difficulty-filter.js":82,"./difficulty-text.js":83,"./follow-position.js":84,"./follow-z.js":85,"./gameover.js":86,"./gpu-preloader.js":87,"./gradient-shader.js":88,"./hand-swapper.js":90,"./handstar-shader.js":91,"./haptics-wall.js":94,"./haptics-weapon.js":95,"./headfist.js":96,"./history.js":97,"./intro-song.js":98,"./keyboard-raycastable.js":99,"./leaderboard.js":100,"./materials.js":107,"./menu-controls.js":122,"./menu-difficulty-select.js":123,"./menu-genre.js":124,"./menu-midsection.js":125,"./menu-mode.js":126,"./menu-playlist-button.js":127,"./menu-playlist.js":128,"./menu-selected-challenge-image.js":129,"./menu-slide-animation.js":130,"./multiplier-ring.js":131,"./no-frustum-cull.js":132,"./panel-shader.js":133,"./pause.js":136,"./pauser.js":137,"./play-sound.js":138,"./player-height.js":140,"./plume.js":141,"./punch.js":142,"./raycaster-target.js":143,"./recenter.js":144,"./ring.js":145,"./score-texts.js":148,"./search-thumbnail-atlas.js":149,"./search.js":150,"./song-info-positioner.js":153,"./song-preview.js":154,"./song-progress-info.js":155,"./song.js":156,"./stage-colors.js":157,"./stage-lasers.js":158,"./stars.js":159,"./stats-param.js":160,"./stepback.js":161,"./sub-object.js":162,"./super-keyboard.js":163,"./supercurve-color.js":164,"./supercurve-shader.js":165,"./supercurve.js":168,"./supercutfx-shader.js":171,"./supercutfx.js":172,"./tail.js":173,"./text-counter.js":174,"./text-geometry.js":175,"./text-truncate.js":176,"./text-uppercase.js":177,"./toggle-pause-play.js":178,"./trail.js":179,"./tunnels.js":180,"./vertex-colors-buffer.js":181,"./victory-accuracy-ring.js":182,"./victory-rank.js":183,"./visible-raycastable.js":184,"./wall-shader.js":185,"./wall.js":188,"./weapon-particles.js":189,"./zip-loader.js":190};function n(e){var t=r(e);return a(t)}function r(e){if(!a.o(s,e)){var t=new Error("Cannot find module '"+e+"'");throw t.code="MODULE_NOT_FOUND",t}return s[e]}n.keys=function(){return Object.keys(s)},n.resolve=r,e.exports=n,n.id=58},function(e,t,a){if(AFRAME.registerComponent("active-item",{dependencies:["material"],schema:{active:{default:!1},opacity:{default:1}},init:function(){this.defaultOpacity=this.el.getAttribute("material").opacity,this.materialObj={opacity:this.data.opacity}},update:function(){var e=this.el;this.data.active?(e.setAttribute("material",this.materialObj),e.object3D.visible=!0):(e.setAttribute("material","opacity",this.defaultOpacity),e.components.animation__mouseleave&&setTimeout(()=>{e.emit("mouseleave",null,!1)}))}}),AFRAME.registerComponent("active-text-color",{dependencies:["text"],schema:{active:{default:!1},color:{default:"#333"}},init:function(){this.defaultColor=this.el.getAttribute("text").color},update:function(){var e=this.el;this.data.active?e.setAttribute("text","color",this.data.color):e.setAttribute("text","color",this.defaultColor)}}),window.AFRAME){const t=["active-item","active-text-color"],a=[],s=[];if(e.hot.dispose(e=>{e.needsReplace=!0,t.forEach(e=>{delete AFRAME.components[e];const t=AFRAME.scenes[0].querySelectorAll(`[${e}]`);for(let a=0;a{delete AFRAME.shaders[e];const t=AFRAME.scenes[0].querySelectorAll("[material]");for(let a=0;a{delete AFRAME.systems[e],delete AFRAME.scenes[0].systems[e]})}),e.hot.data&&e.hot.data.needsReplace){t.forEach(e=>{const t="data-__hot-"+e,a=document.querySelectorAll(`[${t}]`);for(let s=0;sMath.abs(t.y)?"right":"down"),t.z*=.01,s.copy(t).multiplyScalar(-.0025).clampLength(0,.01);for(let t=0;t{e.needsReplace=!0,t.forEach(e=>{delete AFRAME.components[e];const t=AFRAME.scenes[0].querySelectorAll(`[${e}]`);for(let a=0;a{delete AFRAME.shaders[e];const t=AFRAME.scenes[0].querySelectorAll("[material]");for(let a=0;a{delete AFRAME.systems[e],delete AFRAME.scenes[0].systems[e]})}),e.hot.data&&e.hot.data.needsReplace){t.forEach(e=>{const t="data-__hot-"+e,a=document.querySelectorAll(`[${t}]`);for(let s=0;s{e.needsReplace=!0,t.forEach(e=>{delete AFRAME.components[e];const t=AFRAME.scenes[0].querySelectorAll(`[${e}]`);for(let a=0;a{delete AFRAME.shaders[e];const t=AFRAME.scenes[0].querySelectorAll("[material]");for(let a=0;a{delete AFRAME.systems[e],delete AFRAME.scenes[0].systems[e]})}),e.hot.data&&e.hot.data.needsReplace){t.forEach(e=>{const t="data-__hot-"+e,a=document.querySelectorAll(`[${t}]`);for(let s=0;s{e.needsReplace=!0,t.forEach(e=>{delete AFRAME.components[e];const t=AFRAME.scenes[0].querySelectorAll(`[${e}]`);for(let a=0;a{delete AFRAME.shaders[e];const t=AFRAME.scenes[0].querySelectorAll("[material]");for(let a=0;a{delete AFRAME.systems[e],delete AFRAME.scenes[0].systems[e]})}),e.hot.data&&e.hot.data.needsReplace){t.forEach(e=>{const t="data-__hot-"+e,a=document.querySelectorAll(`[${t}]`);for(let s=0;s{AFRAME.utils.device.checkHeadsetConnected()&&this.el.emit("displayconnected")},250)}}),window.AFRAME){const t=[],a=[],s=["check-vr"];if(e.hot.dispose(e=>{e.needsReplace=!0,t.forEach(e=>{delete AFRAME.components[e];const t=AFRAME.scenes[0].querySelectorAll(`[${e}]`);for(let a=0;a{delete AFRAME.shaders[e];const t=AFRAME.scenes[0].querySelectorAll("[material]");for(let a=0;a{delete AFRAME.systems[e],delete AFRAME.scenes[0].systems[e]})}),e.hot.data&&e.hot.data.needsReplace){t.forEach(e=>{const t="data-__hot-"+e,a=document.querySelectorAll(`[${t}]`);for(let s=0;sdocument.querySelector(e),window.$$=e=>document.querySelectorAll(e),window.$$$=e=>document.querySelector(`[${e}]`).getAttribute(e),window.$$$$=e=>document.querySelector(`[${e}]`).components[e],window.scene=this.el,window.state=this.el.systems.state.state}}),window.AFRAME){const t=["console-shortcuts"],a=[],s=[];if(e.hot.dispose(e=>{e.needsReplace=!0,t.forEach(e=>{delete AFRAME.components[e];const t=AFRAME.scenes[0].querySelectorAll(`[${e}]`);for(let a=0;a{delete AFRAME.shaders[e];const t=AFRAME.scenes[0].querySelectorAll("[material]");for(let a=0;a{delete AFRAME.systems[e],delete AFRAME.scenes[0].systems[e]})}),e.hot.data&&e.hot.data.needsReplace){t.forEach(e=>{const t="data-__hot-"+e,a=document.querySelectorAll(`[${t}]`);for(let s=0;s{this.controllerType=e.detail.name,this.el.setAttribute("cursor",this.config[this.controllerType].cursor||{})});const a={hand:t.hand,model:!1};e.setAttribute("daydream-controls",a),e.setAttribute("oculus-go-controls",a),e.setAttribute("oculus-touch-controls",{hand:t.hand,model:!1,orientationOffset:{x:0,y:0,z:0}}),e.setAttribute("vive-controls",a),e.setAttribute("vive-focus-controls",a),e.setAttribute("windows-motion-controls",a),e.setAttribute("generic-tracked-controller-controls",a)},config:{"daydream-controls":{cursor:{downEvents:["trackpaddown","triggerdown"],upEvents:["trackpadup","triggerup"]}},"oculus-go-controls":{cursor:{downEvents:["trackpaddown","triggerdown"],upEvents:["trackpadup","triggerup"]}},"oculus-touch-controls":{cursor:{downEvents:["triggerdown","gripdown","abuttondown","bbuttondown","xbuttondown","ybuttondown"],upEvents:["triggerup","gripup","abuttonup","bbuttonup","xbuttonup","ybuttonup"]}},"vive-controls":{cursor:{downEvents:["trackpaddown","triggerdown","gripdown"],upEvents:["trackpadup","triggerup","gripup"]}},"vive-focus-controls":{cursor:{downEvents:["trackpaddown","triggerdown","gripdown"],upEvents:["trackpadup","triggerup","gripup"]}},"windows-motion-controls":{cursor:{downEvents:["trackpaddown","triggerdown","gripdown"],upEvents:["trackpadup","triggerup","gripup"]}},"generic-tracked-controller-controls":{cursor:{downEvents:["triggerdown"],upEvents:["triggerup"]}}}}),window.AFRAME){const t=["controller"],a=[],s=[];if(e.hot.dispose(e=>{e.needsReplace=!0,t.forEach(e=>{delete AFRAME.components[e];const t=AFRAME.scenes[0].querySelectorAll(`[${e}]`);for(let a=0;a{delete AFRAME.shaders[e];const t=AFRAME.scenes[0].querySelectorAll("[material]");for(let a=0;a{delete AFRAME.systems[e],delete AFRAME.scenes[0].systems[e]})}),e.hot.data&&e.hot.data.needsReplace){t.forEach(e=>{const t="data-__hot-"+e,a=document.querySelectorAll(`[${t}]`);for(let s=0;s{this.copyTexture()}),this.copyTexture()},copyTexture:function(){const e=this.el,t=this.data.from,a=e.getObject3D("mesh").material;t.getObject3D("mesh")&&(a.map=t.getObject3D("mesh").material.map,a.map&&(a.map.needsUpdate=!0,a.needsUpdate=!0))}}),window.AFRAME){const t=["copy-texture"],a=[],s=[];if(e.hot.dispose(e=>{e.needsReplace=!0,t.forEach(e=>{delete AFRAME.components[e];const t=AFRAME.scenes[0].querySelectorAll(`[${e}]`);for(let a=0;a{delete AFRAME.shaders[e];const t=AFRAME.scenes[0].querySelectorAll("[material]");for(let a=0;a{delete AFRAME.systems[e],delete AFRAME.scenes[0].systems[e]})}),e.hot.data&&e.hot.data.needsReplace){t.forEach(e=>{const t="data-__hot-"+e,a=document.querySelectorAll(`[${t}]`);for(let s=0;s{e.needsReplace=!0,t.forEach(e=>{delete AFRAME.components[e];const t=AFRAME.scenes[0].querySelectorAll(`[${e}]`);for(let a=0;a{delete AFRAME.shaders[e];const t=AFRAME.scenes[0].querySelectorAll("[material]");for(let a=0;a{delete AFRAME.systems[e],delete AFRAME.scenes[0].systems[e]})}),e.hot.data&&e.hot.data.needsReplace){t.forEach(e=>{const t="data-__hot-"+e,a=document.querySelectorAll(`[${t}]`);for(let s=0;s{e.needsReplace=!0,t.forEach(e=>{delete AFRAME.components[e];const t=AFRAME.scenes[0].querySelectorAll(`[${e}]`);for(let a=0;a{delete AFRAME.shaders[e];const t=AFRAME.scenes[0].querySelectorAll("[material]");for(let a=0;a{delete AFRAME.systems[e],delete AFRAME.scenes[0].systems[e]})}),e.hot.data&&e.hot.data.needsReplace){t.forEach(e=>{const t="data-__hot-"+e,a=document.querySelectorAll(`[${t}]`);for(let s=0;s{this.reset()})},update:function(e){const t=this.data;this.el;!e.isVictory&&t.isVictory&&this.reset()},reset:function(){this.el.components["supercurve-follow"].curveProgress=0,this.el.object3D.position.set(0,0,0),this.el.object3D.rotation.set(0,0,0)}}),window.AFRAME){const t=["curve-follow-rig-reset"],a=[],s=[];if(e.hot.dispose(e=>{e.needsReplace=!0,t.forEach(e=>{delete AFRAME.components[e];const t=AFRAME.scenes[0].querySelectorAll(`[${e}]`);for(let a=0;a{delete AFRAME.shaders[e];const t=AFRAME.scenes[0].querySelectorAll("[material]");for(let a=0;a{delete AFRAME.systems[e],delete AFRAME.scenes[0].systems[e]})}),e.hot.data&&e.hot.data.needsReplace){t.forEach(e=>{const t="data-__hot-"+e,a=document.querySelectorAll(`[${t}]`);for(let s=0;s{e.needsReplace=!0,t.forEach(e=>{delete AFRAME.components[e];const t=AFRAME.scenes[0].querySelectorAll(`[${e}]`);for(let a=0;a{delete AFRAME.shaders[e];const t=AFRAME.scenes[0].querySelectorAll("[material]");for(let a=0;a{delete AFRAME.systems[e],delete AFRAME.scenes[0].systems[e]})}),e.hot.data&&e.hot.data.needsReplace){t.forEach(e=>{const t="data-__hot-"+e,a=document.querySelectorAll(`[${t}]`);for(let s=0;s{t.spawn()});r.style.width="460px",r.style.bottomMargin="10px"}()},addDebugStageControls:function(){var e=0;const t=(t,a,s)=>{const n=document.createElement("div");n.style.position="absolute",n.id="stagecontrol"+t,n.style.width="100px",n.style.height="30px",n.style.top="element"===s?"20px":"70px",n.style.background="#000",n.style.color="#fff",n.style.zIndex=999999999,n.style.padding="5px",n.style.font="14px sans-serif",n.style.textAlign="center",n.style.cursor="pointer",n.style.left=20+120*t+"px",n.innerHTML=a,"element"===s?n.addEventListener("click",()=>{document.getElementById("stagecontrol"+e).style.background="#000",n.style.background="#66f",e=t}):n.addEventListener("click",()=>{this.beatLoader.generateEvent({_type:e,_value:t})}),document.body.appendChild(n)};["sky","tunnelNeon","leftStageLasers","rightStageLasers","floor"].forEach((e,a)=>{t(a,e,"element")}),["off","blue","blue","bluefade","","red","red","redfade"].forEach((e,a)=>{t(a,e,"value")})}}),window.AFRAME){const t=["debug-beat-generator"],a=[],s=[];if(e.hot.dispose(e=>{e.needsReplace=!0,t.forEach(e=>{delete AFRAME.components[e];const t=AFRAME.scenes[0].querySelectorAll(`[${e}]`);for(let a=0;a{delete AFRAME.shaders[e];const t=AFRAME.scenes[0].querySelectorAll("[material]");for(let a=0;a{delete AFRAME.systems[e],delete AFRAME.scenes[0].systems[e]})}),e.hot.data&&e.hot.data.needsReplace){t.forEach(e=>{const t="data-__hot-"+e,a=document.querySelectorAll(`[${t}]`);for(let s=0;s{const t=this.el.sceneEl.components["beat-generator"];t.data.gameMode=e,scene.components["beat-system"].data.gameMode=e,scene.components["beat-system"].updateBeatPositioning(),s.forEach(a=>{n.forEach(s=>{let n=t.requestBeat("punch"===e?"dot":"arrow","red"),r=Math.random()<.5?"left":"right";n.components.beat.onGenerate(.001,a,s,r),n.object3D.renderOrder=9999,n.play(),n=t.requestBeat("dot","blue"),r=Math.random()<.5?"down":"up",n.components.beat.onGenerate(.0015,a,s,r),n.object3D.renderOrder=9999,n.play()})});const a=scene.components.pool__wall.requestEntity();a.components.wall.onGenerate(.0015,"left",4,4,!0),a.play(),document.getElementById("beatContainer").removeAttribute("bind__visible"),document.getElementById("beatContainer").object3D.visible=!0},500))}}),window.AFRAME){const t=["debug-beat-positioning"],a=[],s=[];if(e.hot.dispose(e=>{e.needsReplace=!0,t.forEach(e=>{delete AFRAME.components[e];const t=AFRAME.scenes[0].querySelectorAll(`[${e}]`);for(let a=0;a{delete AFRAME.shaders[e];const t=AFRAME.scenes[0].querySelectorAll("[material]");for(let a=0;a{delete AFRAME.systems[e],delete AFRAME.scenes[0].systems[e]})}),e.hot.data&&e.hot.data.needsReplace){t.forEach(e=>{const t="data-__hot-"+e,a=document.querySelectorAll(`[${t}]`);for(let s=0;s{t.isTrusted&&(e.emit("triggerdown"),e.emit("triggerup"))}),"oculus"===AFRAME.utils.getUrlParameter("debug")?(e.emit("controllerconnected",{name:"oculus-touch-controls"}),t.emit("controllerconnected",{name:"oculus-touch-controls"}),e.setAttribute("controller","controllerType","oculus-touch-controls"),t.setAttribute("controller","controllerType","oculus-touch-controls")):(e.emit("controllerconnected",{name:"vive-controls"}),t.emit("controllerconnected",{name:"vive-controls"}),e.setAttribute("controller","controllerType","vive-controls"),t.setAttribute("controller","controllerType","vive-controls")),this.el.emit("enter-vr",null,!1),document.addEventListener("keydown",a=>{var s,n,r,o;a.shiftKey&&(32!==a.keyCode?81!==a.keyCode?(78===a.keyCode&&(this.secondaryGripDown?(t.emit("gripup"),this.secondaryGripDown=!1):(t.emit("gripdown"),this.secondaryGripDown=!0)),77===a.keyCode&&(this.primaryGripDown?(e.emit("gripup"),this.primaryGripDown=!1):(e.emit("gripdown"),this.primaryGripDown=!0)),49===a.keyCode&&t.emit("menudown"),a.ctrlKey?(r=t.getAttribute("position"),72===a.keyCode&&(r.x-=.02),74===a.keyCode&&(r.y-=.02),75===a.keyCode&&(r.y+=.02),76===a.keyCode&&(r.x+=.02),59!==a.keyCode&&186!==a.keyCode||(r.z-=.01),222===a.keyCode&&(r.z+=.01),t.setAttribute("position",AFRAME.utils.clone(r))):(s=e.getAttribute("position"),72===a.keyCode&&(s.x-=.02),74===a.keyCode&&(s.y-=.02),75===a.keyCode&&(s.y+=.02),76===a.keyCode&&(s.x+=.02),59!==a.keyCode&&186!==a.keyCode||(s.z-=.02),222===a.keyCode&&(s.z+=.02),e.setAttribute("position",AFRAME.utils.clone(s))),a.ctrlKey?(o=t.getAttribute("rotation"),89===a.keyCode&&(o.x-=10),79===a.keyCode&&(o.x+=10),85===a.keyCode&&(o.y-=10),73===a.keyCode&&(o.y+=10),t.setAttribute("rotation",AFRAME.utils.clone(o))):(n=e.getAttribute("rotation"),89===a.keyCode&&(n.x-=10),79===a.keyCode&&(n.x+=10),85===a.keyCode&&(n.y-=10),73===a.keyCode&&(n.y+=10),e.setAttribute("rotation",AFRAME.utils.clone(n)))):this.isSecondaryTriggerDown?(t.emit("triggerup"),this.isSecondaryTriggerDown=!1):(t.emit("triggerdown"),this.isSecondaryTriggerDown=!0):this.isTriggerDown?(e.emit("triggerup"),this.isTriggerDown=!1):(e.emit("triggerdown"),this.isTriggerDown=!0))})))},play:function(){var e,t;if(this.bounds=document.body.getBoundingClientRect(),!AFRAME.utils.getUrlParameter("debug"))return;if(AFRAME.utils.getUrlParameter("headfist"))return;e=document.getElementById("rightHand"),(t=document.getElementById("leftHand")).object3D.position.set(-.2,1.5,-.5),e.object3D.position.set(.2,1.5,-.5),t.setAttribute("rotation",{x:35,y:0,z:0});const a=AFRAME.utils.getUrlParameter("type");[e,t].forEach(e=>{e.querySelector(".laser").object3D.visible=!1,"classic"===a?(e.querySelector(".bladeContainer").removeAttribute("bind__visible"),e.querySelector(".bladeContainer").object3D.visible=!0,e.querySelector(".bladeContainer").object3D.scale.set(1,1,1)):"punch"===a?(e.querySelector(".punch").removeAttribute("bind__visible"),e.querySelector(".punch").object3D.visible=!0,e.querySelector(".punch").object3D.visible=!0,e.querySelector(".bladeHandle").object3D.visible=!1):"ride"===a&&(e.querySelector(".handStar").removeAttribute("bind__visible"),e.querySelector(".handStar").object3D.visible=!0,e.querySelector(".bladeHandle").object3D.visible=!1)})},onMouseMove:function(){const e=new THREE.Vector3,t=new THREE.Vector2,a=new THREE.Vector3;return function(s){const n=this.bounds,r=this.el.sceneEl.camera,o=s.clientX-n.left,i=s.clientY-n.top;t.x=o/n.width*2-1,t.y=-i/n.height*2-1,document.getElementById("camera").object3D.getWorldPosition(a),e.set(t.x,t.y,.5).unproject(r).sub(a).normalize();const c=document.getElementById("rightHand").object3D.position,d=-a.z/e.z;r.getWorldPosition(c).add(e.multiplyScalar(d)),c.y+=.8}}()}),window.AFRAME){const t=["debug-controller"],a=[],s=[];if(e.hot.dispose(e=>{e.needsReplace=!0,t.forEach(e=>{delete AFRAME.components[e];const t=AFRAME.scenes[0].querySelectorAll(`[${e}]`);for(let a=0;a{delete AFRAME.shaders[e];const t=AFRAME.scenes[0].querySelectorAll("[material]");for(let a=0;a{delete AFRAME.systems[e],delete AFRAME.scenes[0].systems[e]})}),e.hot.data&&e.hot.data.needsReplace){t.forEach(e=>{const t="data-__hot-"+e,a=document.querySelectorAll(`[${t}]`);for(let s=0;s{e.needsReplace=!0,t.forEach(e=>{delete AFRAME.components[e];const t=AFRAME.scenes[0].querySelectorAll(`[${e}]`);for(let a=0;a{delete AFRAME.shaders[e];const t=AFRAME.scenes[0].querySelectorAll("[material]");for(let a=0;a{delete AFRAME.systems[e],delete AFRAME.scenes[0].systems[e]})}),e.hot.data&&e.hot.data.needsReplace){t.forEach(e=>{const t="data-__hot-"+e,a=document.querySelectorAll(`[${t}]`);for(let s=0;s{e.needsReplace=!0,t.forEach(e=>{delete AFRAME.components[e];const t=AFRAME.scenes[0].querySelectorAll(`[${e}]`);for(let a=0;a{delete AFRAME.shaders[e];const t=AFRAME.scenes[0].querySelectorAll("[material]");for(let a=0;a{delete AFRAME.systems[e],delete AFRAME.scenes[0].systems[e]})}),e.hot.data&&e.hot.data.needsReplace){t.forEach(e=>{const t="data-__hot-"+e,a=document.querySelectorAll(`[${t}]`);for(let s=0;s{console.log(this.el.components.song.getCurrentTime())},250)}}),window.AFRAME){const t=["debug-song-time"],a=[],s=[];if(e.hot.dispose(e=>{e.needsReplace=!0,t.forEach(e=>{delete AFRAME.components[e];const t=AFRAME.scenes[0].querySelectorAll(`[${e}]`);for(let a=0;a{delete AFRAME.shaders[e];const t=AFRAME.scenes[0].querySelectorAll("[material]");for(let a=0;a{delete AFRAME.systems[e],delete AFRAME.scenes[0].systems[e]})}),e.hot.data&&e.hot.data.needsReplace){t.forEach(e=>{const t="data-__hot-"+e,a=document.querySelectorAll(`[${t}]`);for(let s=0;s{e.split(",").forEach(e=>{this.el.sceneEl.emit("debug"+e.trim(),null,!1)})},500)}}),window.AFRAME){const t=["debug-state"],a=[],s=[];if(e.hot.dispose(e=>{e.needsReplace=!0,t.forEach(e=>{delete AFRAME.components[e];const t=AFRAME.scenes[0].querySelectorAll(`[${e}]`);for(let a=0;a{delete AFRAME.shaders[e];const t=AFRAME.scenes[0].querySelectorAll("[material]");for(let a=0;a{delete AFRAME.systems[e],delete AFRAME.scenes[0].systems[e]})}),e.hot.data&&e.hot.data.needsReplace){t.forEach(e=>{const t="data-__hot-"+e,a=document.querySelectorAll(`[${t}]`);for(let s=0;s{var s=r.data;if(s.enabled&&(s.captureBubbles||e.target===n))for(t=0;t{var t=a.data;t.enabled&&(t.captureBubbles||s.target===e)&&a.el.emit(t.as||t.event,s.detail?s.detail:null,!1)},t.delay)}))}}),window.AFRAME){const t=["delayed-proxy-event"],a=[],s=[];if(e.hot.dispose(e=>{e.needsReplace=!0,t.forEach(e=>{delete AFRAME.components[e];const t=AFRAME.scenes[0].querySelectorAll(`[${e}]`);for(let a=0;a{delete AFRAME.shaders[e];const t=AFRAME.scenes[0].querySelectorAll("[material]");for(let a=0;a{delete AFRAME.systems[e],delete AFRAME.scenes[0].systems[e]})}),e.hot.data&&e.hot.data.needsReplace){t.forEach(e=>{const t="data-__hot-"+e,a=document.querySelectorAll(`[${t}]`);for(let s=0;s{e.needsReplace=!0,t.forEach(e=>{delete AFRAME.components[e];const t=AFRAME.scenes[0].querySelectorAll(`[${e}]`);for(let a=0;a{delete AFRAME.shaders[e];const t=AFRAME.scenes[0].querySelectorAll("[material]");for(let a=0;a{delete AFRAME.systems[e],delete AFRAME.scenes[0].systems[e]})}),e.hot.data&&e.hot.data.needsReplace){t.forEach(e=>{const t="data-__hot-"+e,a=document.querySelectorAll(`[${t}]`);for(let s=0;s{e.needsReplace=!0,t.forEach(e=>{delete AFRAME.components[e];const t=AFRAME.scenes[0].querySelectorAll(`[${e}]`);for(let a=0;a{delete AFRAME.shaders[e];const t=AFRAME.scenes[0].querySelectorAll("[material]");for(let a=0;a{delete AFRAME.systems[e],delete AFRAME.scenes[0].systems[e]})}),e.hot.data&&e.hot.data.needsReplace){t.forEach(e=>{const t="data-__hot-"+e,a=document.querySelectorAll(`[${t}]`);for(let s=0;s{e.needsReplace=!0,t.forEach(e=>{delete AFRAME.components[e];const t=AFRAME.scenes[0].querySelectorAll(`[${e}]`);for(let a=0;a{delete AFRAME.shaders[e];const t=AFRAME.scenes[0].querySelectorAll("[material]");for(let a=0;a{delete AFRAME.systems[e],delete AFRAME.scenes[0].systems[e]})}),e.hot.data&&e.hot.data.needsReplace){t.forEach(e=>{const t="data-__hot-"+e,a=document.querySelectorAll(`[${t}]`);for(let s=0;s{e.needsReplace=!0,t.forEach(e=>{delete AFRAME.components[e];const t=AFRAME.scenes[0].querySelectorAll(`[${e}]`);for(let a=0;a{delete AFRAME.shaders[e];const t=AFRAME.scenes[0].querySelectorAll("[material]");for(let a=0;a{delete AFRAME.systems[e],delete AFRAME.scenes[0].systems[e]})}),e.hot.data&&e.hot.data.needsReplace){t.forEach(e=>{const t="data-__hot-"+e,a=document.querySelectorAll(`[${t}]`);for(let s=0;s{e.needsReplace=!0,t.forEach(e=>{delete AFRAME.components[e];const t=AFRAME.scenes[0].querySelectorAll(`[${e}]`);for(let a=0;a{delete AFRAME.shaders[e];const t=AFRAME.scenes[0].querySelectorAll("[material]");for(let a=0;a{delete AFRAME.systems[e],delete AFRAME.scenes[0].systems[e]})}),e.hot.data&&e.hot.data.needsReplace){t.forEach(e=>{const t="data-__hot-"+e,a=document.querySelectorAll(`[${t}]`);for(let s=0;s=0&&(this.beatContainer.object3D.position.z=1.5*-Math.pow(1-this.countDown,2),this.countDown-=t/1e3)},reset:function(){this.beatContainer.object3D.position.z=0,this.el.sceneEl.setAttribute("stage-colors","color","blue")},triggerAnimations:function(){for(let e=0;e{e.needsReplace=!0,t.forEach(e=>{delete AFRAME.components[e];const t=AFRAME.scenes[0].querySelectorAll(`[${e}]`);for(let a=0;a{delete AFRAME.shaders[e];const t=AFRAME.scenes[0].querySelectorAll("[material]");for(let a=0;a{delete AFRAME.systems[e],delete AFRAME.scenes[0].systems[e]})}),e.hot.data&&e.hot.data.needsReplace){t.forEach(e=>{const t="data-__hot-"+e,a=document.querySelectorAll(`[${t}]`);for(let s=0;s{this.preloadFromSelector("#mainLogo"),this.preloadFromSelector("#prevArrow"),this.preloadFromSelector("#stepback"),this.preloadFromSelector(".difficultyBackground"),this.preloadFromSelector(".genreIcon"),this.preloadFromSelector(".merkababloom"),this.preloadFromSelector(".searchResultBackground"),this.preloadMaterialsComponentTextures(),this.preloadKeyboard(),this.preloadSlice(),this.preloadEnvMap(),this.preloadFXs()},1e3)},preloadFromSelector:function(e){const t=document.querySelector(e);this.preloadTexture(t.getObject3D("mesh").material.map)},preloadMaterialsComponentTextures:function(){const e=this.el.systems.materials.textureList;for(var t=0;t{e.needsReplace=!0,t.forEach(e=>{delete AFRAME.components[e];const t=AFRAME.scenes[0].querySelectorAll(`[${e}]`);for(let a=0;a{delete AFRAME.shaders[e];const t=AFRAME.scenes[0].querySelectorAll("[material]");for(let a=0;a{delete AFRAME.systems[e],delete AFRAME.scenes[0].systems[e]})}),e.hot.data&&e.hot.data.needsReplace){t.forEach(e=>{const t="data-__hot-"+e,a=document.querySelectorAll(`[${t}]`);for(let s=0;s{e.needsReplace=!0,t.forEach(e=>{delete AFRAME.components[e];const t=AFRAME.scenes[0].querySelectorAll(`[${e}]`);for(let a=0;a{delete AFRAME.shaders[e];const t=AFRAME.scenes[0].querySelectorAll("[material]");for(let a=0;a{delete AFRAME.systems[e],delete AFRAME.scenes[0].systems[e]})}),e.hot.data&&e.hot.data.needsReplace){t.forEach(e=>{const t="data-__hot-"+e,a=document.querySelectorAll(`[${t}]`);for(let s=0;s{this.el.addEventListener(e,this.swapHand)})},swapHand:function(){this.data.enabled&&this.el.sceneEl.emit("activehandswap",null,!1)}}),window.AFRAME){const t=["hand-swapper"],a=[],s=[];if(e.hot.dispose(e=>{e.needsReplace=!0,t.forEach(e=>{delete AFRAME.components[e];const t=AFRAME.scenes[0].querySelectorAll(`[${e}]`);for(let a=0;a{delete AFRAME.shaders[e];const t=AFRAME.scenes[0].querySelectorAll("[material]");for(let a=0;a{delete AFRAME.systems[e],delete AFRAME.scenes[0].systems[e]})}),e.hot.data&&e.hot.data.needsReplace){t.forEach(e=>{const t="data-__hot-"+e,a=document.querySelectorAll(`[${t}]`);for(let s=0;s{e.needsReplace=!0,t.forEach(e=>{delete AFRAME.components[e];const t=AFRAME.scenes[0].querySelectorAll(`[${e}]`);for(let a=0;a{delete AFRAME.shaders[e];const t=AFRAME.scenes[0].querySelectorAll("[material]");for(let a=0;a{delete AFRAME.systems[e],delete AFRAME.scenes[0].systems[e]})}),e.hot.data&&e.hot.data.needsReplace){t.forEach(e=>{const t="data-__hot-"+e,a=document.querySelectorAll(`[${t}]`);for(let s=0;s{e.needsReplace=!0,t.forEach(e=>{delete AFRAME.components[e];const t=AFRAME.scenes[0].querySelectorAll(`[${e}]`);for(let a=0;a{delete AFRAME.shaders[e];const t=AFRAME.scenes[0].querySelectorAll("[material]");for(let a=0;a{delete AFRAME.systems[e],delete AFRAME.scenes[0].systems[e]})}),e.hot.data&&e.hot.data.needsReplace){t.forEach(e=>{const t="data-__hot-"+e,a=document.querySelectorAll(`[${t}]`);for(let s=0;s{if(!t.detail||!t.detail.intersectedEl||!this.data.enabled)return;const a=t.detail.intersectedEl;a.classList.contains("blade")&&a!==e?(this.isColliding=!0,this.el.components.haptics__weapon.pulse()):this.isColliding=!1}),e.addEventListener("mouseleave",e=>{this.isColliding=!1})},tick:function(){this.isColliding&&this.data.enabled&&this.el.components.haptics__weapon.pulse()}}),window.AFRAME){const t=["haptics-weapons"],a=[],s=[];if(e.hot.dispose(e=>{e.needsReplace=!0,t.forEach(e=>{delete AFRAME.components[e];const t=AFRAME.scenes[0].querySelectorAll(`[${e}]`);for(let a=0;a{delete AFRAME.shaders[e];const t=AFRAME.scenes[0].querySelectorAll("[material]");for(let a=0;a{delete AFRAME.systems[e],delete AFRAME.scenes[0].systems[e]})}),e.hot.data&&e.hot.data.needsReplace){t.forEach(e=>{const t="data-__hot-"+e,a=document.querySelectorAll(`[${t}]`);for(let s=0;s{e.needsReplace=!0,t.forEach(e=>{delete AFRAME.components[e];const t=AFRAME.scenes[0].querySelectorAll(`[${e}]`);for(let a=0;a{delete AFRAME.shaders[e];const t=AFRAME.scenes[0].querySelectorAll("[material]");for(let a=0;a{delete AFRAME.systems[e],delete AFRAME.scenes[0].systems[e]})}),e.hot.data&&e.hot.data.needsReplace){t.forEach(e=>{const t="data-__hot-"+e,a=document.querySelectorAll(`[${t}]`);for(let s=0;s{e.needsReplace=!0,t.forEach(e=>{delete AFRAME.components[e];const t=AFRAME.scenes[0].querySelectorAll(`[${e}]`);for(let a=0;a{delete AFRAME.shaders[e];const t=AFRAME.scenes[0].querySelectorAll("[material]");for(let a=0;a{delete AFRAME.systems[e],delete AFRAME.scenes[0].systems[e]})}),e.hot.data&&e.hot.data.needsReplace){t.forEach(e=>{const t="data-__hot-"+e,a=document.querySelectorAll(`[${t}]`);for(let s=0;s{e.needsReplace=!0,t.forEach(e=>{delete AFRAME.components[e];const t=AFRAME.scenes[0].querySelectorAll(`[${e}]`);for(let a=0;a{delete AFRAME.shaders[e];const t=AFRAME.scenes[0].querySelectorAll("[material]");for(let a=0;a{delete AFRAME.systems[e],delete AFRAME.scenes[0].systems[e]})}),e.hot.data&&e.hot.data.needsReplace){t.forEach(e=>{const t="data-__hot-"+e,a=document.querySelectorAll(`[${t}]`);for(let s=0;s{e.needsReplace=!0,t.forEach(e=>{delete AFRAME.components[e];const t=AFRAME.scenes[0].querySelectorAll(`[${e}]`);for(let a=0;a{delete AFRAME.shaders[e];const t=AFRAME.scenes[0].querySelectorAll("[material]");for(let a=0;a{delete AFRAME.systems[e],delete AFRAME.scenes[0].systems[e]})}),e.hot.data&&e.hot.data.needsReplace){t.forEach(e=>{const t="data-__hot-"+e,a=document.querySelectorAll(`[${t}]`);for(let s=0;s{this.username=e.detail.value,localStorage.setItem("moonriderusername",this.username)}),this.el.addEventListener("leaderboardsubmit",this.addScore.bind(this))},update:function(e){!s.apps.length&&this.data.apiKey&&(s.initializeApp({apiKey:this.data.apiKey,authDomain:this.data.authDomain,databaseURL:this.data.databaseURL,projectId:this.data.projectId,storageBucket:this.data.storageBucket,messagingSenderId:this.data.messagingSenderId}),this.firestore=s.firestore(),this.firestore.settings({}),this.db=this.firestore.collection("scores")),!e.isVictory&&this.data.isVictory&&this.checkLeaderboardQualify(),this.data.difficulty&&e.difficulty!==this.data.difficulty||this.data.menuSelectedChallengeId&&e.menuSelectedChallengeId!==this.data.menuSelectedChallengeId?this.fetchScores(this.data.menuSelectedChallengeId):this.data.challengeId&&e.challengeId!==this.data.challengeId&&this.fetchScores(this.data.challengeId)},addScore:function(){const e=this.el.sceneEl.systems.state.state;if(!e.isVictory||!e.inVR)return;const t={accuracy:e.score.accuracy,challengeId:e.challenge.id,gameMode:this.data.gameMode,score:e.score.score,username:this.username,difficulty:this.data.difficulty||e.challenge.difficulty,time:new Date};n.includes(this.username.toLowerCase())||this.username.match(r)||this.db.add(t),this.addEventDetail.scoreData=t,this.el.emit("leaderboardscoreadded",this.addEventDetail,!1)},fetchScores:function(e){if("ride"===this.data.gameMode)return;const t=this.el.sceneEl.systems.state.state;this.db.where("challengeId","==",e).where("difficulty","==",t.menuSelectedChallenge.id?t.menuSelectedChallenge.difficulty:t.challenge.difficulty).where("gameMode","==",this.data.gameMode).orderBy("score","desc").orderBy("time","asc").limit(10).get().then(t=>{this.eventDetail.challengeId=e,this.scores.length=0,t.empty||t.forEach(e=>this.scores.push(e.data())),this.el.sceneEl.emit("leaderboard",this.eventDetail,!1)}).catch(e=>{console.error("[firestore]",e)})},checkLeaderboardQualify:function(){const e=this.el.sceneEl.systems.state.state.score.score;if(!AFRAME.utils.getUrlParameter("dot")){if(this.scores.length<10)return this.qualifyingIndex=this.scores.length,void this.el.sceneEl.emit("leaderboardqualify",this.scores.length,!1);for(let t=0;tthis.scores[t].score)return this.qualifyingIndex=t,void this.el.sceneEl.emit("leaderboardqualify",t,!1)}}}),window.AFRAME){const t=["leaderboard"],a=[],s=[];if(e.hot.dispose(e=>{e.needsReplace=!0,t.forEach(e=>{delete AFRAME.components[e];const t=AFRAME.scenes[0].querySelectorAll(`[${e}]`);for(let a=0;a{delete AFRAME.shaders[e];const t=AFRAME.scenes[0].querySelectorAll("[material]");for(let a=0;a{delete AFRAME.systems[e],delete AFRAME.scenes[0].systems[e]})}),e.hot.data&&e.hot.data.needsReplace){t.forEach(e=>{const t="data-__hot-"+e,a=document.querySelectorAll(`[${t}]`);for(let s=0;s=(null!=s?s:t.logLevel)&&e({level:r[a].toLowerCase(),message:i,args:n,type:t.name})}},s=0,n=o;s{},console.timeEnd=()=>{},a(41),a(42),a(43),a(44),a(45),a(46),a(48),a(49),AFRAME.log=()=>{},a(51),a(53),a(54),a(55),a(56),a(57),s(a(58)),s(a(191)),a(195),a(202),e.hot.accept(),document.addEventListener("DOMContentLoaded",()=>{!function(){const e=document.querySelector("form");if(!e)return;if(localStorage.getItem("subscribeClosed")){const t=e.parentNode;return void t.parentNode.removeChild(t)}document.getElementById("subscribeClose").addEventListener("click",()=>{const t=e.parentNode;t.parentNode.removeChild(t),localStorage.setItem("subscribeClosed",!0)});const t=e.querySelector(".submit"),a=e.querySelector('input[type="email"]'),s=document.querySelector("#subscribeForm > h2");let n="";s&&(n=s.innerHTML);e.addEventListener("submit",e=>{e.preventDefault();const a=new XMLHttpRequest;let n="http://localhost:5000/mail/subscribe";return n="https://supermedium.com/mail/subscribe",a.open("POST",n),a.addEventListener("load",()=>{200!==parseInt(a.status,10)&&(window.location.href="https://supermedium/subscribe/"),t&&(t.disabled=!0,t.innerHTML="Subscribed!"),s&&(s.innerHTML="Successfully subscribed, thank you!")}),a.setRequestHeader("Content-Type","application/json;charset=UTF-8"),a.send(JSON.stringify({email:document.querySelector('[name="email"]').value,source:"moonrider"})),!1}),t&&a.addEventListener("keydown",()=>{t.hasAttribute("disabled")&&(t.innerHTML="Subscribe",t.removeAttribute("disabled")),s&&n&&(s.innerHTML=n)})}()}),"http:"!==window.location.protocol||window.location.host.startsWith("localhost")||window.location.replace("https:"+location.href.substring(location.protocol.length))},function(e,t){THREE.BufferGeometryUtils={computeTangents:function(e){var t=e.index,a=e.attributes;if(null!==t&&void 0!==a.position&&void 0!==a.normal&&void 0!==a.uv){var s=t.array,n=a.position.array,r=a.normal.array,o=a.uv.array,i=n.length/3;void 0===a.tangent&&e.addAttribute("tangent",new THREE.BufferAttribute(new Float32Array(4*i),4));for(var c=a.tangent.array,d=[],l=[],u=0;u0){p=p.clone();for(var b=0;b=s.x&&this.boxMin.y<=n.y&&this.boxMax.y>=s.y&&this.boxMin.z<=n.z&&this.boxMax.z>=s.z}}(),setDirty:function(){this.dirty=!0},refreshObjects:function(){const e=this.data;this.objectEls=e.objects?this.el.sceneEl.querySelectorAll(e.objects):this.el.sceneEl.children,this.dirty=!1}})},function(e,t){var a=[new THREE.Vector2,new THREE.Vector2,new THREE.Vector2,new THREE.Vector2];function s(e,t,s,n){const r=1/n,o=1/s;return a[0].set(r*t,o*e+o),a[1].set(r*t,o*e),a[2].set(r*t+r,o*e),a[3].set(r*t+r,o*e+o),a}AFRAME.registerComponent("atlas-uvs",{dependencies:["geometry"],schema:{totalColumns:{type:"int",default:1},totalRows:{type:"int",default:1},column:{type:"int",default:1},row:{type:"int",default:1}},update:function(){const e=this.data,t=s(e.row-1,e.column-1,e.totalRows,e.totalColumns),a=this.el.getObject3D("mesh").geometry;var n=new Float32Array([t[0].x,t[0].y,t[3].x,t[3].y,t[1].x,t[1].y,t[2].x,t[2].y]);a.setAttribute("uv",new THREE.BufferAttribute(n,2)),a.uvsNeedUpdate=!0}}),AFRAME.registerComponent("dynamic-texture-atlas",{schema:{canvasId:{default:"dynamicAtlas"},canvasHeight:{default:1024},canvasWidth:{default:1024},debug:{default:!1},numColumns:{default:8},numRows:{default:8}},multiple:!0,init:function(){const e=this.canvas=document.createElement("canvas");e.id=this.data.canvasId,e.height=this.data.canvasHeight,e.width=this.data.canvasWidth,this.ctx=e.getContext("2d"),document.body.appendChild(e),this.data.debug&&(e.style.left=0,e.style.top=0,e.style.position="fixed",e.style.zIndex=9999999999)},drawTexture:function(e,t,a,n,r){const o=this.canvas,i=this.data;e.complete||(e.onload=()=>{this.drawTexture(e,t,a)});const c=r||o.height/i.numRows,d=n||o.width/i.numColumns;return this.ctx.drawImage(e,d*t,d*a,d,c),s(t,a,i.numRows,i.numColumns)}}),e.exports.getGridUvs=s},function(e,t){if("undefined"==typeof AFRAME)throw new Error("Component attempted to register before AFRAME was available.");var a={};AFRAME.registerComponent("audioanalyser",{schema:{buffer:{default:!1},beatDetectionDecay:{default:.99},beatDetectionMinVolume:{default:15},beatDetectionThrottle:{default:250},cache:{default:!1},enabled:{default:!0},enableBeatDetection:{default:!0},enableLevels:{default:!0},enableWaveform:{default:!0},enableVolume:{default:!0},fftSize:{default:2048},smoothingTimeConstant:{default:.8},src:{parse:function(e){return e.constructor!==String?e:e.startsWith("#")||e.startsWith(".")?document.querySelector(e):e}},unique:{default:!1}},init:function(){this.audioEl=null,this.levels=null,this.waveform=null,this.volume=0,this.xhr=null,this.initContext()},update:function(e){var t=this.analyser,a=this.data;e.fftSize===a.fftSize&&e.smoothingTimeConstant===a.smoothingTimeConstant||(t.fftSize=a.fftSize,t.smoothingTimeConstant=a.smoothingTimeConstant,this.levels=new Uint8Array(t.frequencyBinCount),this.waveform=new Uint8Array(t.fftSize)),a.src&&this.refreshSource()},tick:function(e,t){var a,s=this.data;if(s.enabled){if((s.enableLevels||s.enableVolume)&&this.analyser.getByteFrequencyData(this.levels),s.enableWaveform&&this.analyser.getByteTimeDomainData(this.waveform),s.enableVolume||s.enableBeatDetection){for(var n=0,r=0;rthis.beatCutOff&&a>this.data.beatDetectionMinVolume?(this.el.emit("audioanalyserbeat",null,!1),this.beatCutOff=1.5*a,this.beatTime=0):this.beatTime<=this.data.beatDetectionThrottle?this.beatTime+=t:(this.beatCutOff*=this.data.beatDetectionDecay,this.beatCutOff=Math.max(this.beatCutOff,this.data.beatDetectionMinVolume)))}},initContext:function(){var e,t=this.data;this.context=new(window.webkitAudioContext||window.AudioContext),e=this.analyser=this.context.createAnalyser(),(this.gainNode=this.context.createGain()).connect(e),e.connect(this.context.destination),e.fftSize=t.fftSize,e.smoothingTimeConstant=t.smoothingTimeConstant,this.levels=new Uint8Array(e.frequencyBinCount),this.waveform=new Uint8Array(e.fftSize)},refreshSource:function(){this.analyser;var e=this.data;e.buffer&&e.src.constructor===String?this.getBufferSource().then(e=>{this.source=e,this.source.connect(this.gainNode)}):(this.source=this.getMediaSource(),this.source.connect(this.gainNode))},suspendContext:function(){this.context.suspend()},resumeContext:function(){this.context.resume()},fetchAudioBuffer:function(e){return a[e]?a[e].constructor===Promise?a[e]:Promise.resolve(a[e]):(this.data.cache||Object.keys(a).forEach((function(e){delete a[e]})),a[e]=new Promise(t=>{const s=this.xhr=new XMLHttpRequest;s.open("GET",e),s.responseType="arraybuffer",s.addEventListener("load",()=>{function n(s){a[e]=s,t(s)}const r=this.context.decodeAudioData(s.response,n);r&&r.constructor===Promise&&r.then(n).catch(console.error)}),s.send()}),a[e])},getBufferSource:function(){var e=this.data;return this.fetchAudioBuffer(e.src).then(()=>{var t;return(t=this.context.createBufferSource()).buffer=a[e.src],this.el.emit("audioanalyserbuffersource",t,!1),t}).catch(console.error)},getMediaSource:function(){const e={};return function(){const t=this.data.src.constructor===String?this.data.src:this.data.src.src;if(e[t])return e[t];this.data.src.constructor===String?(this.audio=document.createElement("audio"),this.audio.crossOrigin="anonymous",this.audio.setAttribute("src",this.data.src)):this.audio=this.data.src;const a=this.context.createMediaElementSource(this.audio);return e[t]=a,a}}()})},function(e,t){var a=AFRAME.utils.styleParser;if("undefined"==typeof AFRAME)throw new Error("Component attempted to register before AFRAME was available.");AFRAME.registerComponent("event-set",{schema:{default:"",parse:function(e){return a.parse(e)}},multiple:!0,init:function(){this.eventHandler=null,this.eventName=null},update:function(e){this.removeEventListener(),this.updateEventListener(),this.addEventListener()},remove:function(){this.removeEventListener()},pause:function(){this.removeEventListener()},play:function(){this.addEventListener()},updateEventListener:function(){var e,t,a,s=this.data,n=this.el;e=s._event||this.id,t=s._target,a=t?n.sceneEl.querySelector(t):n,this.eventName=e;const r=()=>{var e;for(e in s)"_event"!==e&&"_target"!==e&&AFRAME.utils.entity.setComponentProperty.call(this,a,e,s[e])};isNaN(s._delay)?this.eventHandler=r:this.eventHandler=()=>{setTimeout(r,parseFloat(s._delay))}},addEventListener:function(){this.el.addEventListener(this.eventName,this.eventHandler)},removeEventListener:function(){this.el.removeEventListener(this.eventName,this.eventHandler)}})},function(e,t,a){THREE.BufferGeometryUtils||a(47),AFRAME.registerComponent("geometry-merger",{schema:{preserveOriginal:{default:!1}},init:function(){var e=this;this.geometry=new THREE.Geometry,this.mesh=new THREE.Mesh(this.geometry),this.el.setObject3D("mesh",this.mesh),this.faceIndex={},this.vertexIndex={},this.el.object3D.traverse((function(t){"Mesh"===t.type&&t!==e.mesh&&(e.faceIndex[t.parent.uuid]=[e.geometry.faces.length,e.geometry.faces.length+t.geometry.faces.length-1],e.vertexIndex[t.parent.uuid]=[e.geometry.vertices.length,e.geometry.vertices.length+t.geometry.vertices.length-1],t.parent.updateMatrix(),e.geometry.merge(t.geometry,t.parent.matrix),e.data.preserveOriginal||t.parent.remove(t))}))}}),AFRAME.registerComponent("buffer-geometry-merger",{schema:{preserveOriginal:{default:!1}},init:function(){var e=[];this.el.sceneEl.object3D.updateMatrixWorld(),this.el.object3D.traverse((function(t){"Mesh"===t.type&&t.el!==self.el&&(t.geometry.applyMatrix(t.matrixWorld),e.push(t.geometry.clone()),t.parent.remove(t))}));const t=THREE.BufferGeometryUtils.mergeBufferGeometries(e);this.mesh=new THREE.Mesh(t),this.el.setObject3D("mesh",this.mesh)}})},function(e,t){THREE.BufferGeometryUtils={computeTangents:function(e){var t=e.index,a=e.attributes;if(null!==t&&void 0!==a.position&&void 0!==a.normal&&void 0!==a.uv){var s=t.array,n=a.position.array,r=a.normal.array,o=a.uv.array,i=n.length/3;void 0===a.tangent&&e.addAttribute("tangent",new THREE.BufferAttribute(new Float32Array(4*i),4));for(var c=a.tangent.array,d=[],l=[],u=0;ua.max&&this.logs.shift(),this.el.setAttribute("text",{value:this.logs.join("\n")}))},remove:function(){this.el.removeAttribute("text"),this.system.unregisterLogger(this)}})},function(e,t,a){a(52),AFRAME.registerComponent("orbit-controls",{dependencies:["camera"],schema:{autoRotate:{type:"boolean"},autoRotateSpeed:{default:2},dampingFactor:{default:.1},enabled:{default:!0},enableDamping:{default:!0},enableKeys:{default:!0},enablePan:{default:!0},enableRotate:{default:!0},enableZoom:{default:!0},initialPosition:{type:"vec3"},keyPanSpeed:{default:7},minAzimuthAngle:{type:"number",default:1/0},maxAzimuthAngle:{type:"number",default:1/0},maxDistance:{default:1e3},maxPolarAngle:{default:AFRAME.utils.device.isMobile()?90:120},minDistance:{default:1},minPolarAngle:{default:0},minZoom:{default:0},panSpeed:{default:1},rotateSpeed:{default:.05},screenSpacePanning:{default:!1},target:{type:"vec3"},zoomSpeed:{default:.5}},init:function(){var e,t=this.el;this.controls=new THREE.OrbitControls(t.getObject3D("camera"),t.sceneEl.renderer.domElement),e=new THREE.Vector3,t.sceneEl.addEventListener("enter-vr",()=>{(AFRAME.utils.device.checkHeadsetConnected()||AFRAME.utils.device.isMobile())&&(this.controls.enabled=!1,t.hasAttribute("look-controls")&&(t.setAttribute("look-controls","enabled",!0),e.copy(t.getObject3D("camera").position),t.getObject3D("camera").position.set(0,0,0)))}),t.sceneEl.addEventListener("exit-vr",()=>{(AFRAME.utils.device.checkHeadsetConnected()||AFRAME.utils.device.isMobile())&&(this.controls.enabled=!0,t.getObject3D("camera").position.copy(e),t.hasAttribute("look-controls")&&t.setAttribute("look-controls","enabled",!1))}),document.body.style.cursor="grab",document.addEventListener("mousedown",()=>{document.body.style.cursor="grabbing"}),document.addEventListener("mouseup",()=>{document.body.style.cursor="grab"}),this.target=new THREE.Vector3,t.getObject3D("camera").position.copy(this.data.initialPosition)},update:function(e){var t=this.controls,a=this.data;t.target=this.target.copy(a.target),t.autoRotate=a.autoRotate,t.autoRotateSpeed=a.autoRotateSpeed,t.dampingFactor=a.dampingFactor,t.enabled=a.enabled,t.enableDamping=a.enableDamping,t.enableKeys=a.enableKeys,t.enablePan=a.enablePan,t.enableRotate=a.enableRotate,t.enableZoom=a.enableZoom,t.keyPanSpeed=a.keyPanSpeed,t.maxPolarAngle=THREE.Math.degToRad(a.maxPolarAngle),t.maxDistance=a.maxDistance,t.minDistance=a.minDistance,t.minPolarAngle=THREE.Math.degToRad(a.minPolarAngle),t.minZoom=a.minZoom,t.panSpeed=a.panSpeed,t.rotateSpeed=a.rotateSpeed,t.screenSpacePanning=a.screenSpacePanning,t.zoomSpeed=a.zoomSpeed},tick:function(){var e=this.controls;this.data.enabled&&e.enabled&&(e.enableDamping||e.autoRotate)&&this.controls.update()}})},function(e,t){THREE.OrbitControls=function(e,t){var a,s,n,r,o;this.object=e,this.domElement=void 0!==t?t:document,this.enabled=!0,this.target=new THREE.Vector3,this.minDistance=0,this.maxDistance=1/0,this.minZoom=0,this.maxZoom=1/0,this.minPolarAngle=0,this.maxPolarAngle=Math.PI,this.minAzimuthAngle=-1/0,this.maxAzimuthAngle=1/0,this.enableDamping=!1,this.dampingFactor=.25,this.enableZoom=!0,this.zoomSpeed=1,this.enableRotate=!0,this.rotateSpeed=1,this.enablePan=!0,this.keyPanSpeed=7,this.autoRotate=!1,this.autoRotateSpeed=2,this.enableKeys=!0,this.keys={LEFT:37,UP:38,RIGHT:39,BOTTOM:40},this.mouseButtons={ORBIT:THREE.MOUSE.LEFT,ZOOM:THREE.MOUSE.MIDDLE,PAN:THREE.MOUSE.RIGHT},this.target0=this.target.clone(),this.position0=this.object.position.clone(),this.zoom0=this.object.zoom,this.getPolarAngle=function(){return f.phi},this.getAzimuthalAngle=function(){return f.theta},this.saveState=function(){i.target0.copy(i.target),i.position0.copy(i.object.position),i.zoom0=i.object.zoom},this.reset=function(){i.target.copy(i.target0),i.object.position.copy(i.position0),i.object.zoom=i.zoom0,i.object.updateProjectionMatrix(),i.dispatchEvent(c),i.update(),h=u.NONE},this.update=(a=new THREE.Vector3,s=(new THREE.Quaternion).setFromUnitVectors(e.up,new THREE.Vector3(0,1,0)),n=s.clone().inverse(),r=new THREE.Vector3,o=new THREE.Quaternion,function(){var e=i.object.position;return a.copy(e).sub(i.target),a.applyQuaternion(s),f.setFromVector3(a),i.autoRotate&&h===u.NONE&&P(2*Math.PI/60/60*i.autoRotateSpeed),f.theta+=p.theta,f.phi+=p.phi,f.theta=Math.max(i.minAzimuthAngle,Math.min(i.maxAzimuthAngle,f.theta)),f.phi=Math.max(i.minPolarAngle,Math.min(i.maxPolarAngle,f.phi)),f.makeSafe(),f.radius*=b,f.radius=Math.max(i.minDistance,Math.min(i.maxDistance,f.radius)),i.target.add(y),a.setFromSpherical(f),a.applyQuaternion(n),e.copy(i.target).add(a),i.object.lookAt(i.target),!0===i.enableDamping?(p.theta*=1-i.dampingFactor,p.phi*=1-i.dampingFactor):p.set(0,0,0),b=1,y.set(0,0,0),!!(g||r.distanceToSquared(i.object.position)>m||8*(1-o.dot(i.object.quaternion))>m)&&(i.dispatchEvent(c),r.copy(i.object.position),o.copy(i.object.quaternion),g=!1,!0)}),this.dispose=function(){i.domElement.removeEventListener("contextmenu",V,!1),i.domElement.removeEventListener("mousedown",Z,!1),i.domElement.removeEventListener("wheel",F,!1),i.domElement.removeEventListener("touchstart",H,!1),i.domElement.removeEventListener("touchend",z,!1),i.domElement.removeEventListener("touchmove",B,!1),document.removeEventListener("mousemove",C,!1),document.removeEventListener("mouseup",U,!1),window.removeEventListener("keydown",q,!1)};var i=this,c={type:"change"},d={type:"start"},l={type:"end"},u={NONE:-1,ROTATE:0,DOLLY:1,PAN:2,TOUCH_ROTATE:3,TOUCH_DOLLY:4,TOUCH_PAN:5},h=u.NONE,m=1e-6,f=new THREE.Spherical,p=new THREE.Spherical,b=1,y=new THREE.Vector3,g=!1,v=new THREE.Vector2,A=new THREE.Vector2,w=new THREE.Vector2,S=new THREE.Vector2,E=new THREE.Vector2,T=new THREE.Vector2,k=new THREE.Vector2,R=new THREE.Vector2,N=new THREE.Vector2;function x(){return Math.pow(.95,i.zoomSpeed)}function P(e){p.theta-=e}function j(e){p.phi-=e}var L,M=(L=new THREE.Vector3,function(e,t){L.setFromMatrixColumn(t,0),L.multiplyScalar(-e),y.add(L)}),_=function(){var e=new THREE.Vector3;return function(t,a){e.setFromMatrixColumn(a,1),e.multiplyScalar(t),y.add(e)}}(),D=function(){var e=new THREE.Vector3;return function(t,a){var s=i.domElement===document?i.domElement.body:i.domElement;if(i.object.isPerspectiveCamera){var n=i.object.position;e.copy(n).sub(i.target);var r=e.length();r*=Math.tan(i.object.fov/2*Math.PI/180),M(2*t*r/s.clientHeight,i.object.matrix),_(2*a*r/s.clientHeight,i.object.matrix)}else i.object.isOrthographicCamera?(M(t*(i.object.right-i.object.left)/i.object.zoom/s.clientWidth,i.object.matrix),_(a*(i.object.top-i.object.bottom)/i.object.zoom/s.clientHeight,i.object.matrix)):(console.warn("WARNING: OrbitControls.js encountered an unknown camera type - pan disabled."),i.enablePan=!1)}}();function I(e){i.object.isPerspectiveCamera?b/=e:i.object.isOrthographicCamera?(i.object.zoom=Math.max(i.minZoom,Math.min(i.maxZoom,i.object.zoom*e)),i.object.updateProjectionMatrix(),g=!0):(console.warn("WARNING: OrbitControls.js encountered an unknown camera type - dolly/zoom disabled."),i.enableZoom=!1)}function O(e){i.object.isPerspectiveCamera?b*=e:i.object.isOrthographicCamera?(i.object.zoom=Math.max(i.minZoom,Math.min(i.maxZoom,i.object.zoom/e)),i.object.updateProjectionMatrix(),g=!0):(console.warn("WARNING: OrbitControls.js encountered an unknown camera type - dolly/zoom disabled."),i.enableZoom=!1)}function Z(e){if(!1!==i.enabled){switch(e.preventDefault(),e.button){case i.mouseButtons.ORBIT:if(!1===i.enableRotate)return;!function(e){v.set(e.clientX,e.clientY)}(e),h=u.ROTATE;break;case i.mouseButtons.ZOOM:if(!1===i.enableZoom)return;!function(e){k.set(e.clientX,e.clientY)}(e),h=u.DOLLY;break;case i.mouseButtons.PAN:if(!1===i.enablePan)return;!function(e){S.set(e.clientX,e.clientY)}(e),h=u.PAN}h!==u.NONE&&(document.addEventListener("mousemove",C,!1),document.addEventListener("mouseup",U,!1),i.dispatchEvent(d))}}function C(e){if(!1!==i.enabled)switch(e.preventDefault(),h){case u.ROTATE:if(!1===i.enableRotate)return;!function(e){A.set(e.clientX,e.clientY),w.subVectors(A,v);var t=i.domElement===document?i.domElement.body:i.domElement;P(2*Math.PI*w.x/t.clientWidth*i.rotateSpeed),j(2*Math.PI*w.y/t.clientHeight*i.rotateSpeed),v.copy(A),i.update()}(e);break;case u.DOLLY:if(!1===i.enableZoom)return;!function(e){R.set(e.clientX,e.clientY),N.subVectors(R,k),N.y>0?I(x()):N.y<0&&O(x()),k.copy(R),i.update()}(e);break;case u.PAN:if(!1===i.enablePan)return;!function(e){E.set(e.clientX,e.clientY),T.subVectors(E,S),D(T.x,T.y),S.copy(E),i.update()}(e)}}function U(e){!1!==i.enabled&&(document.removeEventListener("mousemove",C,!1),document.removeEventListener("mouseup",U,!1),i.dispatchEvent(l),h=u.NONE)}function F(e){!1===i.enabled||!1===i.enableZoom||h!==u.NONE&&h!==u.ROTATE||(e.preventDefault(),e.stopPropagation(),i.dispatchEvent(d),function(e){e.deltaY<0?O(x()):e.deltaY>0&&I(x()),i.update()}(e),i.dispatchEvent(l))}function q(e){!1!==i.enabled&&!1!==i.enableKeys&&!1!==i.enablePan&&function(e){switch(e.keyCode){case i.keys.UP:D(0,i.keyPanSpeed),i.update();break;case i.keys.BOTTOM:D(0,-i.keyPanSpeed),i.update();break;case i.keys.LEFT:D(i.keyPanSpeed,0),i.update();break;case i.keys.RIGHT:D(-i.keyPanSpeed,0),i.update()}}(e)}function H(e){if(!1!==i.enabled){switch(e.touches.length){case 1:if(!1===i.enableRotate)return;!function(e){v.set(e.touches[0].pageX,e.touches[0].pageY)}(e),h=u.TOUCH_ROTATE;break;case 2:if(!1===i.enableZoom)return;!function(e){var t=e.touches[0].pageX-e.touches[1].pageX,a=e.touches[0].pageY-e.touches[1].pageY,s=Math.sqrt(t*t+a*a);k.set(0,s)}(e),h=u.TOUCH_DOLLY;break;case 3:if(!1===i.enablePan)return;!function(e){S.set(e.touches[0].pageX,e.touches[0].pageY)}(e),h=u.TOUCH_PAN;break;default:h=u.NONE}h!==u.NONE&&i.dispatchEvent(d)}}function B(e){if(!1!==i.enabled)switch(e.preventDefault(),e.stopPropagation(),e.touches.length){case 1:if(!1===i.enableRotate)return;if(h!==u.TOUCH_ROTATE)return;!function(e){A.set(e.touches[0].pageX,e.touches[0].pageY),w.subVectors(A,v);var t=i.domElement===document?i.domElement.body:i.domElement;P(2*Math.PI*w.x/t.clientWidth*i.rotateSpeed),j(2*Math.PI*w.y/t.clientHeight*i.rotateSpeed),v.copy(A),i.update()}(e);break;case 2:if(!1===i.enableZoom)return;if(h!==u.TOUCH_DOLLY)return;!function(e){var t=e.touches[0].pageX-e.touches[1].pageX,a=e.touches[0].pageY-e.touches[1].pageY,s=Math.sqrt(t*t+a*a);R.set(0,s),N.subVectors(R,k),N.y>0?O(x()):N.y<0&&I(x()),k.copy(R),i.update()}(e);break;case 3:if(!1===i.enablePan)return;if(h!==u.TOUCH_PAN)return;!function(e){E.set(e.touches[0].pageX,e.touches[0].pageY),T.subVectors(E,S),D(T.x,T.y),S.copy(E),i.update()}(e);break;default:h=u.NONE}}function z(e){!1!==i.enabled&&(i.dispatchEvent(l),h=u.NONE)}function V(e){!1!==i.enabled&&e.preventDefault()}i.domElement.addEventListener("contextmenu",V,!1),i.domElement.addEventListener("mousedown",Z,!1),i.domElement.addEventListener("wheel",F,!1),i.domElement.addEventListener("touchstart",H,!1),i.domElement.addEventListener("touchend",z,!1),i.domElement.addEventListener("touchmove",B,!1),window.addEventListener("keydown",q,!1),this.update()},THREE.OrbitControls.prototype=Object.create(THREE.EventDispatcher.prototype),THREE.OrbitControls.prototype.constructor=THREE.OrbitControls,Object.defineProperties(THREE.OrbitControls.prototype,{center:{get:function(){return console.warn("THREE.OrbitControls: .center has been renamed to .target"),this.target}},noZoom:{get:function(){return console.warn("THREE.OrbitControls: .noZoom has been deprecated. Use .enableZoom instead."),!this.enableZoom},set:function(e){console.warn("THREE.OrbitControls: .noZoom has been deprecated. Use .enableZoom instead."),this.enableZoom=!e}},noRotate:{get:function(){return console.warn("THREE.OrbitControls: .noRotate has been deprecated. Use .enableRotate instead."),!this.enableRotate},set:function(e){console.warn("THREE.OrbitControls: .noRotate has been deprecated. Use .enableRotate instead."),this.enableRotate=!e}},noPan:{get:function(){return console.warn("THREE.OrbitControls: .noPan has been deprecated. Use .enablePan instead."),!this.enablePan},set:function(e){console.warn("THREE.OrbitControls: .noPan has been deprecated. Use .enablePan instead."),this.enablePan=!e}},noKeys:{get:function(){return console.warn("THREE.OrbitControls: .noKeys has been deprecated. Use .enableKeys instead."),!this.enableKeys},set:function(e){console.warn("THREE.OrbitControls: .noKeys has been deprecated. Use .enableKeys instead."),this.enableKeys=!e}},staticMoving:{get:function(){return console.warn("THREE.OrbitControls: .staticMoving has been deprecated. Use .enableDamping instead."),!this.enableDamping},set:function(e){console.warn("THREE.OrbitControls: .staticMoving has been deprecated. Use .enableDamping instead."),this.enableDamping=!e}},dynamicDampingFactor:{get:function(){return console.warn("THREE.OrbitControls: .dynamicDampingFactor has been renamed. Use .dampingFactor instead."),this.dampingFactor},set:function(e){console.warn("THREE.OrbitControls: .dynamicDampingFactor has been renamed. Use .dampingFactor instead."),this.dampingFactor=e}}})},function(e,t){AFRAME.registerComponent("proxy-event",{schema:{captureBubbles:{default:!1},enabled:{default:!0},event:{type:"string"},from:{type:"string"},to:{type:"string"},as:{type:"string"},bubbles:{default:!1}},multiple:!0,init:function(){var e,t,a,s=this.data,n=this.el,r=this;if(s.from?e="PARENT"===s.from?[n.parentNode]:document.querySelectorAll(s.from):a="CHILDREN"===s.to?n.querySelectorAll("*"):"SELF"===s.to?[n]:document.querySelectorAll(s.to),s.from)for(t=0;t{"nonrecursive"!==this.id&&e.detail.object.traverse(this.set)})},update:function(){"nonrecursive"===this.id?this.set(this.el.object3D):this.el.object3D.traverse(this.set)},set:function(e){isNaN(this.data)?e.renderOrder=this.system.order[this.data]:e.renderOrder=parseFloat(this.data)}}),AFRAME.registerComponent("render-order-recursive",{init:function(){this.el.addEventListener("child-attached",e=>{e.detail.el.setAttribute("render-order",this.el.getAttribute("render-order"))})}})},function(e,t,a){var s;"undefined"!=typeof self&&self,s=function(){return function(e){var t={};function a(s){if(t[s])return t[s].exports;var n=t[s]={i:s,l:!1,exports:{}};return e[s].call(n.exports,n,n.exports,a),n.l=!0,n.exports}return a.m=e,a.c=t,a.d=function(e,t,s){a.o(e,t)||Object.defineProperty(e,t,{configurable:!1,enumerable:!0,get:s})},a.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return a.d(t,"a",t),t},a.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},a.p="",a(a.s=1)}([function(e,t,a){"use strict";var s={};e.exports.select=function(e,t,a){return s[t]||(s[t]=new Function("state","item","return "+c(t)+";")),s[t](e,a)};var n=/\.([A-Za-z][\w_-]*)/g,r=/([=&|!?:+-])(\s*)([\(]?)([A-Za-z][\w_-]*)/g,o=/^([\(]?)([A-Za-z][\w_-]*)/g,i=/state\["item"\]/g;function c(e){return e=(e=(e=(e=e.replace(n,'["$1"]')).replace(o,'$1state["$2"]')).replace(r,'$1$2$3state["$4"]')).replace(i,"item")}function d(){var e=arguments;return function(){var t;for(t=0;t","<","<=",">="],u=/\s+/,h=/\(|\)|\!/g;function m(e){return-1===(e=function(e){return 0===e.indexOf("!!")?e.replace("!!",""):0===e.indexOf("!")?e.replace("!",""):e}(e.trim())).indexOf(".")?e:e.substring(0,e.indexOf("."))}e.exports.parseKeysToWatch=function(e,t,a){var s,n;for(n=p(t,u),s=0;s [data-bind-for-active="false"]'))(s=o.querySelector('[data-bind-for-active="false"]')).setAttribute("data-bind-for-key",c),s.setAttribute("data-bind-for-value",d),s.object3D.visible=!0,s.play(),s.setAttribute("data-bind-for-active","true"),s.emit("bindforupdateinplace",i,!1);else{var l=this.generateFromTemplate(i,a);l.addEventListener("loaded",(function(){l.emit("bindforupdateinplace",i,!1)})),o.appendChild(l)}this.renderedKeys.push(d)}else-1!==t.indexOf(d)&&(e.length&&e[0].constructor===String?(s=o.querySelector('[data-bind-for-value="'+d+'"]')).setAttribute("data-bind-for-key",a):s=o.querySelector('[data-bind-for-key="'+c+'"]'),s.emit("bindforupdateinplace",i,!1));e[a+1]&&(this.data.delay?setTimeout((function(){n.renderItemsInPlace(e,t,a+1)}),this.data.delay):this.renderItemsInPlace(e,t,a+1))},generateFromTemplate:function(e,t){var a=this.data;this.el.appendChild(this.system.renderTemplate(this.template,e));var s=this.el.children[this.el.children.length-1];if(!e)return s.setAttribute("data-bind-for-key",""),s.setAttribute("data-bind-for-active","false"),s;var n=this.getBindForKey(e,t);return s.setAttribute("data-bind-for-key",n),a.key||s.setAttribute("data-bind-for-value",e),s.setAttribute("data-bind-for-active","true"),s},getElsToRemove:(s=[],function(e,t){var a=this.data,n=this.el;s.length=0;for(var r=0;r{n[e]={},n[e].START="thumb"+e+"start",n[e].END="thumb"+e+"end"});AFRAME.registerComponent("thumb-controls",{schema:{thresholdAngle:{default:89.5},thresholdPad:{default:.05},thresholdStick:{default:.75}},init:function(){var e=this.el;this.onTrackpadDown=this.onTrackpadDown.bind(this),this.onTrackpadUp=this.onTrackpadUp.bind(this),this.directionStick="",this.directionTrackpad="",e.components["tracked-controls"]&&(this.axis=e.components["tracked-controls"].axis),this.type="STICK",e.addEventListener("controllerconnected",t=>{this.axis=e.components["tracked-controls"].axis,"oculus-touch-controls"!==t.detail.name&&"windows-motion-controls"!==t.detail.name?this.type="PAD":this.type="STICK"})},play:function(){var e=this.el;e.addEventListener("trackpaddown",this.onTrackpadDown),e.addEventListener("trackpadup",this.onTrackpadUp),e.addEventListener("touchpaddown",this.onTrackpadDown),e.addEventListener("touchpadup",this.onTrackpadUp)},pause:function(){var e=this.el;e.removeEventListener("trackpaddown",this.onTrackpadDown),e.removeEventListener("trackpadup",this.onTrackpadUp),e.removeEventListener("touchpaddown",this.onTrackpadDown),e.removeEventListener("touchpadup",this.onTrackpadUp)},onTrackpadDown:function(){var e,t=this.el;this.getDistance()this.data.thresholdStick){if(!(e=this.getDirection()))return;return this.directionStick=e,t.emit(n.NULL.START,null,!1),void t.emit(n[this.directionStick].START,null,!1)}this.directionStick&&this.getDistance()360&&(o-=360),(t=a[n]-r)<0&&(e>=360+t&&e<=360||e>=0&&e<=o))return s[n];if(e>=t&&e<=o)return s[n]}},getAngle:function(){var e,t=this.axis;return this.axis?((e="PAD"===this.type?Math.atan2(-t[1],t[0]):Math.atan2(-t[3],t[2]))<0&&(e=2*Math.PI+e),THREE.Math.radToDeg(e)):0}}),AFRAME.registerComponent("thumb-controls-debug",{dependencies:["thumb-controls"],schema:{controllerType:{type:"string"},hand:{type:"string"},enabled:{default:!1}},init:function(){var e,t,a,s,n=this.el;if(this.data.enabled||AFRAME.utils.getUrlParameter("debug-thumb")){console.log("%c debug-thumb","background: #111; color: red");var r=function(){n.components["tracked-controls"].handleAxes=()=>{},a={axis:t=[0,0,0]},n.components["tracked-controls"].axis=t,n.components["thumb-controls"].axis=t};n.components["tracked-controls"]?r():this.el.addEventListener("controllerconnected",(function(){r()})),(s=this.createCanvas()).addEventListener("click",s=>{"vive-controls"===this.data.controllerType?e?n.emit("trackpadup"):n.emit("trackpaddown"):e&&(t[0]=0,t[1]=0,n.emit("axismove",a,!1)),e=!e}),s.addEventListener("mousemove",r=>{var o;e&&(o=s.getBoundingClientRect(),t[0]=(r.clientX-o.left)/240*2-1,t[1]=(r.clientY-o.top)/240*2-1,n.emit("axismove",a,!1))}),s.addEventListener("mouseleave",s=>{e&&(t[0]=0,t[1]=0,n.emit("axismove",a,!1))})}},createCanvas:function(){var e,t;return(e=document.createElement("canvas")).classList.add("debugThumb"),e.height=240,e.width=240,e.style.bottom=0,e.style.borderRadius="250px",e.style.opacity=.5,e.style.position="fixed",e.style.zIndex=999999999,"left"===this.data.hand?e.style.left=0:e.style.right=0,(t=e.getContext("2d")).fillStyle="#333",t.fillRect(0,0,240,240),document.body.appendChild(e),e}})},function(e,t,a){var s={"./active-item.js":59,"./beat-cut-fx.js":60,"./beat-generator.js":15,"./beat-hit-sound.js":61,"./beat.js":21,"./blade.js":62,"./check-vr.js":63,"./console-shortcuts.js":64,"./controller.js":65,"./copy-texture.js":66,"./cursor-laser.js":67,"./cursor-mesh.js":68,"./curve-follow-rig-reset.js":69,"./cutfx-shader.js":70,"./debug-beat-generator.js":73,"./debug-beat-positioning.js":74,"./debug-controller.js":75,"./debug-cursor.js":76,"./debug-intro.js":77,"./debug-song-time.js":78,"./debug-state.js":79,"./delayed-proxy-event.js":80,"./difficulty-background.js":81,"./difficulty-filter.js":82,"./difficulty-text.js":83,"./follow-position.js":84,"./follow-z.js":85,"./gameover.js":86,"./gpu-preloader.js":87,"./gradient-shader.js":88,"./hand-swapper.js":90,"./handstar-shader.js":91,"./haptics-wall.js":94,"./haptics-weapon.js":95,"./headfist.js":96,"./history.js":97,"./intro-song.js":98,"./keyboard-raycastable.js":99,"./leaderboard.js":100,"./materials.js":107,"./menu-controls.js":122,"./menu-difficulty-select.js":123,"./menu-genre.js":124,"./menu-midsection.js":125,"./menu-mode.js":126,"./menu-playlist-button.js":127,"./menu-playlist.js":128,"./menu-selected-challenge-image.js":129,"./menu-slide-animation.js":130,"./multiplier-ring.js":131,"./no-frustum-cull.js":132,"./panel-shader.js":133,"./pause.js":136,"./pauser.js":137,"./play-sound.js":138,"./player-height.js":140,"./plume.js":141,"./punch.js":142,"./raycaster-target.js":143,"./recenter.js":144,"./ring.js":145,"./score-texts.js":148,"./search-thumbnail-atlas.js":149,"./search.js":150,"./song-info-positioner.js":153,"./song-preview.js":154,"./song-progress-info.js":155,"./song.js":156,"./stage-colors.js":157,"./stage-lasers.js":158,"./stars.js":159,"./stats-param.js":160,"./stepback.js":161,"./sub-object.js":162,"./super-keyboard.js":163,"./supercurve-color.js":164,"./supercurve-shader.js":165,"./supercurve.js":168,"./supercutfx-shader.js":171,"./supercutfx.js":172,"./tail.js":173,"./text-counter.js":174,"./text-geometry.js":175,"./text-truncate.js":176,"./text-uppercase.js":177,"./toggle-pause-play.js":178,"./trail.js":179,"./tunnels.js":180,"./vertex-colors-buffer.js":181,"./victory-accuracy-ring.js":182,"./victory-rank.js":183,"./visible-raycastable.js":184,"./wall-shader.js":185,"./wall.js":188,"./weapon-particles.js":189,"./zip-loader.js":190};function n(e){var t=r(e);return a(t)}function r(e){if(!a.o(s,e)){var t=new Error("Cannot find module '"+e+"'");throw t.code="MODULE_NOT_FOUND",t}return s[e]}n.keys=function(){return Object.keys(s)},n.resolve=r,e.exports=n,n.id=58},function(e,t,a){if(AFRAME.registerComponent("active-item",{dependencies:["material"],schema:{active:{default:!1},opacity:{default:1}},init:function(){this.defaultOpacity=this.el.getAttribute("material").opacity,this.materialObj={opacity:this.data.opacity}},update:function(){var e=this.el;this.data.active?(e.setAttribute("material",this.materialObj),e.object3D.visible=!0):(e.setAttribute("material","opacity",this.defaultOpacity),e.components.animation__mouseleave&&setTimeout(()=>{e.emit("mouseleave",null,!1)}))}}),AFRAME.registerComponent("active-text-color",{dependencies:["text"],schema:{active:{default:!1},color:{default:"#333"}},init:function(){this.defaultColor=this.el.getAttribute("text").color},update:function(){var e=this.el;this.data.active?e.setAttribute("text","color",this.data.color):e.setAttribute("text","color",this.defaultColor)}}),window.AFRAME){const t=["active-item","active-text-color"],a=[],s=[];if(e.hot.dispose(e=>{e.needsReplace=!0,t.forEach(e=>{delete AFRAME.components[e];const t=AFRAME.scenes[0].querySelectorAll(`[${e}]`);for(let a=0;a{delete AFRAME.shaders[e];const t=AFRAME.scenes[0].querySelectorAll("[material]");for(let a=0;a{delete AFRAME.systems[e],delete AFRAME.scenes[0].systems[e]})}),e.hot.data&&e.hot.data.needsReplace){t.forEach(e=>{const t="data-__hot-"+e,a=document.querySelectorAll(`[${t}]`);for(let s=0;sMath.abs(t.y)?"right":"down"),t.z*=.01,s.copy(t).multiplyScalar(-.0025).clampLength(0,.01);for(let t=0;t{e.needsReplace=!0,t.forEach(e=>{delete AFRAME.components[e];const t=AFRAME.scenes[0].querySelectorAll(`[${e}]`);for(let a=0;a{delete AFRAME.shaders[e];const t=AFRAME.scenes[0].querySelectorAll("[material]");for(let a=0;a{delete AFRAME.systems[e],delete AFRAME.scenes[0].systems[e]})}),e.hot.data&&e.hot.data.needsReplace){t.forEach(e=>{const t="data-__hot-"+e,a=document.querySelectorAll(`[${t}]`);for(let s=0;s{e.needsReplace=!0,t.forEach(e=>{delete AFRAME.components[e];const t=AFRAME.scenes[0].querySelectorAll(`[${e}]`);for(let a=0;a{delete AFRAME.shaders[e];const t=AFRAME.scenes[0].querySelectorAll("[material]");for(let a=0;a{delete AFRAME.systems[e],delete AFRAME.scenes[0].systems[e]})}),e.hot.data&&e.hot.data.needsReplace){t.forEach(e=>{const t="data-__hot-"+e,a=document.querySelectorAll(`[${t}]`);for(let s=0;s{e.needsReplace=!0,t.forEach(e=>{delete AFRAME.components[e];const t=AFRAME.scenes[0].querySelectorAll(`[${e}]`);for(let a=0;a{delete AFRAME.shaders[e];const t=AFRAME.scenes[0].querySelectorAll("[material]");for(let a=0;a{delete AFRAME.systems[e],delete AFRAME.scenes[0].systems[e]})}),e.hot.data&&e.hot.data.needsReplace){t.forEach(e=>{const t="data-__hot-"+e,a=document.querySelectorAll(`[${t}]`);for(let s=0;s{AFRAME.utils.device.checkHeadsetConnected()&&this.el.emit("displayconnected")},250)}}),window.AFRAME){const t=[],a=[],s=["check-vr"];if(e.hot.dispose(e=>{e.needsReplace=!0,t.forEach(e=>{delete AFRAME.components[e];const t=AFRAME.scenes[0].querySelectorAll(`[${e}]`);for(let a=0;a{delete AFRAME.shaders[e];const t=AFRAME.scenes[0].querySelectorAll("[material]");for(let a=0;a{delete AFRAME.systems[e],delete AFRAME.scenes[0].systems[e]})}),e.hot.data&&e.hot.data.needsReplace){t.forEach(e=>{const t="data-__hot-"+e,a=document.querySelectorAll(`[${t}]`);for(let s=0;sdocument.querySelector(e),window.$$=e=>document.querySelectorAll(e),window.$$$=e=>document.querySelector(`[${e}]`).getAttribute(e),window.$$$$=e=>document.querySelector(`[${e}]`).components[e],window.scene=this.el,window.state=this.el.systems.state.state}}),window.AFRAME){const t=["console-shortcuts"],a=[],s=[];if(e.hot.dispose(e=>{e.needsReplace=!0,t.forEach(e=>{delete AFRAME.components[e];const t=AFRAME.scenes[0].querySelectorAll(`[${e}]`);for(let a=0;a{delete AFRAME.shaders[e];const t=AFRAME.scenes[0].querySelectorAll("[material]");for(let a=0;a{delete AFRAME.systems[e],delete AFRAME.scenes[0].systems[e]})}),e.hot.data&&e.hot.data.needsReplace){t.forEach(e=>{const t="data-__hot-"+e,a=document.querySelectorAll(`[${t}]`);for(let s=0;s{this.controllerType=e.detail.name,this.el.setAttribute("cursor",this.config[this.controllerType].cursor||{})});const a={hand:t.hand,model:!1};e.setAttribute("daydream-controls",a),e.setAttribute("oculus-go-controls",a),e.setAttribute("oculus-touch-controls",{hand:t.hand,model:!1,orientationOffset:{x:0,y:0,z:0}}),e.setAttribute("vive-controls",a),e.setAttribute("vive-focus-controls",a),e.setAttribute("windows-motion-controls",a),e.setAttribute("generic-tracked-controller-controls",a)},config:{"daydream-controls":{cursor:{downEvents:["trackpaddown","triggerdown"],upEvents:["trackpadup","triggerup"]}},"oculus-go-controls":{cursor:{downEvents:["trackpaddown","triggerdown"],upEvents:["trackpadup","triggerup"]}},"oculus-touch-controls":{cursor:{downEvents:["triggerdown","gripdown","abuttondown","bbuttondown","xbuttondown","ybuttondown"],upEvents:["triggerup","gripup","abuttonup","bbuttonup","xbuttonup","ybuttonup"]}},"vive-controls":{cursor:{downEvents:["trackpaddown","triggerdown","gripdown"],upEvents:["trackpadup","triggerup","gripup"]}},"vive-focus-controls":{cursor:{downEvents:["trackpaddown","triggerdown","gripdown"],upEvents:["trackpadup","triggerup","gripup"]}},"windows-motion-controls":{cursor:{downEvents:["trackpaddown","triggerdown","gripdown"],upEvents:["trackpadup","triggerup","gripup"]}},"generic-tracked-controller-controls":{cursor:{downEvents:["triggerdown"],upEvents:["triggerup"]}}}}),window.AFRAME){const t=["controller"],a=[],s=[];if(e.hot.dispose(e=>{e.needsReplace=!0,t.forEach(e=>{delete AFRAME.components[e];const t=AFRAME.scenes[0].querySelectorAll(`[${e}]`);for(let a=0;a{delete AFRAME.shaders[e];const t=AFRAME.scenes[0].querySelectorAll("[material]");for(let a=0;a{delete AFRAME.systems[e],delete AFRAME.scenes[0].systems[e]})}),e.hot.data&&e.hot.data.needsReplace){t.forEach(e=>{const t="data-__hot-"+e,a=document.querySelectorAll(`[${t}]`);for(let s=0;s{this.copyTexture()}),this.copyTexture()},copyTexture:function(){const e=this.el,t=this.data.from,a=e.getObject3D("mesh").material;t.getObject3D("mesh")&&(a.map=t.getObject3D("mesh").material.map,a.map&&(a.map.needsUpdate=!0,a.needsUpdate=!0))}}),window.AFRAME){const t=["copy-texture"],a=[],s=[];if(e.hot.dispose(e=>{e.needsReplace=!0,t.forEach(e=>{delete AFRAME.components[e];const t=AFRAME.scenes[0].querySelectorAll(`[${e}]`);for(let a=0;a{delete AFRAME.shaders[e];const t=AFRAME.scenes[0].querySelectorAll("[material]");for(let a=0;a{delete AFRAME.systems[e],delete AFRAME.scenes[0].systems[e]})}),e.hot.data&&e.hot.data.needsReplace){t.forEach(e=>{const t="data-__hot-"+e,a=document.querySelectorAll(`[${t}]`);for(let s=0;s{e.needsReplace=!0,t.forEach(e=>{delete AFRAME.components[e];const t=AFRAME.scenes[0].querySelectorAll(`[${e}]`);for(let a=0;a{delete AFRAME.shaders[e];const t=AFRAME.scenes[0].querySelectorAll("[material]");for(let a=0;a{delete AFRAME.systems[e],delete AFRAME.scenes[0].systems[e]})}),e.hot.data&&e.hot.data.needsReplace){t.forEach(e=>{const t="data-__hot-"+e,a=document.querySelectorAll(`[${t}]`);for(let s=0;s{e.needsReplace=!0,t.forEach(e=>{delete AFRAME.components[e];const t=AFRAME.scenes[0].querySelectorAll(`[${e}]`);for(let a=0;a{delete AFRAME.shaders[e];const t=AFRAME.scenes[0].querySelectorAll("[material]");for(let a=0;a{delete AFRAME.systems[e],delete AFRAME.scenes[0].systems[e]})}),e.hot.data&&e.hot.data.needsReplace){t.forEach(e=>{const t="data-__hot-"+e,a=document.querySelectorAll(`[${t}]`);for(let s=0;s{this.reset()})},update:function(e){const t=this.data;this.el;!e.isVictory&&t.isVictory&&this.reset()},reset:function(){this.el.components["supercurve-follow"].curveProgress=0,this.el.object3D.position.set(0,0,0),this.el.object3D.rotation.set(0,0,0)}}),window.AFRAME){const t=["curve-follow-rig-reset"],a=[],s=[];if(e.hot.dispose(e=>{e.needsReplace=!0,t.forEach(e=>{delete AFRAME.components[e];const t=AFRAME.scenes[0].querySelectorAll(`[${e}]`);for(let a=0;a{delete AFRAME.shaders[e];const t=AFRAME.scenes[0].querySelectorAll("[material]");for(let a=0;a{delete AFRAME.systems[e],delete AFRAME.scenes[0].systems[e]})}),e.hot.data&&e.hot.data.needsReplace){t.forEach(e=>{const t="data-__hot-"+e,a=document.querySelectorAll(`[${t}]`);for(let s=0;s{e.needsReplace=!0,t.forEach(e=>{delete AFRAME.components[e];const t=AFRAME.scenes[0].querySelectorAll(`[${e}]`);for(let a=0;a{delete AFRAME.shaders[e];const t=AFRAME.scenes[0].querySelectorAll("[material]");for(let a=0;a{delete AFRAME.systems[e],delete AFRAME.scenes[0].systems[e]})}),e.hot.data&&e.hot.data.needsReplace){t.forEach(e=>{const t="data-__hot-"+e,a=document.querySelectorAll(`[${t}]`);for(let s=0;s{t.spawn()});r.style.width="460px",r.style.bottomMargin="10px"}()},addDebugStageControls:function(){var e=0;const t=(t,a,s)=>{const n=document.createElement("div");n.style.position="absolute",n.id="stagecontrol"+t,n.style.width="100px",n.style.height="30px",n.style.top="element"===s?"20px":"70px",n.style.background="#000",n.style.color="#fff",n.style.zIndex=999999999,n.style.padding="5px",n.style.font="14px sans-serif",n.style.textAlign="center",n.style.cursor="pointer",n.style.left=20+120*t+"px",n.innerHTML=a,"element"===s?n.addEventListener("click",()=>{document.getElementById("stagecontrol"+e).style.background="#000",n.style.background="#66f",e=t}):n.addEventListener("click",()=>{this.beatLoader.generateEvent({_type:e,_value:t})}),document.body.appendChild(n)};["sky","tunnelNeon","leftStageLasers","rightStageLasers","floor"].forEach((e,a)=>{t(a,e,"element")}),["off","blue","blue","bluefade","","red","red","redfade"].forEach((e,a)=>{t(a,e,"value")})}}),window.AFRAME){const t=["debug-beat-generator"],a=[],s=[];if(e.hot.dispose(e=>{e.needsReplace=!0,t.forEach(e=>{delete AFRAME.components[e];const t=AFRAME.scenes[0].querySelectorAll(`[${e}]`);for(let a=0;a{delete AFRAME.shaders[e];const t=AFRAME.scenes[0].querySelectorAll("[material]");for(let a=0;a{delete AFRAME.systems[e],delete AFRAME.scenes[0].systems[e]})}),e.hot.data&&e.hot.data.needsReplace){t.forEach(e=>{const t="data-__hot-"+e,a=document.querySelectorAll(`[${t}]`);for(let s=0;s{const t=this.el.sceneEl.components["beat-generator"];t.data.gameMode=e,scene.components["beat-system"].data.gameMode=e,scene.components["beat-system"].updateBeatPositioning(),s.forEach(a=>{n.forEach(s=>{let n=t.requestBeat("punch"===e?"dot":"arrow","red"),r=Math.random()<.5?"left":"right";n.components.beat.onGenerate(.001,a,s,r),n.object3D.renderOrder=9999,n.play(),n=t.requestBeat("dot","blue"),r=Math.random()<.5?"down":"up",n.components.beat.onGenerate(.0015,a,s,r),n.object3D.renderOrder=9999,n.play()})});const a=scene.components.pool__wall.requestEntity();a.components.wall.onGenerate(.0015,"left",4,4,!0),a.play(),document.getElementById("beatContainer").removeAttribute("bind__visible"),document.getElementById("beatContainer").object3D.visible=!0},500))}}),window.AFRAME){const t=["debug-beat-positioning"],a=[],s=[];if(e.hot.dispose(e=>{e.needsReplace=!0,t.forEach(e=>{delete AFRAME.components[e];const t=AFRAME.scenes[0].querySelectorAll(`[${e}]`);for(let a=0;a{delete AFRAME.shaders[e];const t=AFRAME.scenes[0].querySelectorAll("[material]");for(let a=0;a{delete AFRAME.systems[e],delete AFRAME.scenes[0].systems[e]})}),e.hot.data&&e.hot.data.needsReplace){t.forEach(e=>{const t="data-__hot-"+e,a=document.querySelectorAll(`[${t}]`);for(let s=0;s{t.isTrusted&&(e.emit("triggerdown"),e.emit("triggerup"))}),"oculus"===AFRAME.utils.getUrlParameter("debug")?(e.emit("controllerconnected",{name:"oculus-touch-controls"}),t.emit("controllerconnected",{name:"oculus-touch-controls"}),e.setAttribute("controller","controllerType","oculus-touch-controls"),t.setAttribute("controller","controllerType","oculus-touch-controls")):(e.emit("controllerconnected",{name:"vive-controls"}),t.emit("controllerconnected",{name:"vive-controls"}),e.setAttribute("controller","controllerType","vive-controls"),t.setAttribute("controller","controllerType","vive-controls")),this.el.emit("enter-vr",null,!1),document.addEventListener("keydown",a=>{var s,n,r,o;a.shiftKey&&(32!==a.keyCode?81!==a.keyCode?(78===a.keyCode&&(this.secondaryGripDown?(t.emit("gripup"),this.secondaryGripDown=!1):(t.emit("gripdown"),this.secondaryGripDown=!0)),77===a.keyCode&&(this.primaryGripDown?(e.emit("gripup"),this.primaryGripDown=!1):(e.emit("gripdown"),this.primaryGripDown=!0)),49===a.keyCode&&t.emit("menudown"),a.ctrlKey?(r=t.getAttribute("position"),72===a.keyCode&&(r.x-=.02),74===a.keyCode&&(r.y-=.02),75===a.keyCode&&(r.y+=.02),76===a.keyCode&&(r.x+=.02),59!==a.keyCode&&186!==a.keyCode||(r.z-=.01),222===a.keyCode&&(r.z+=.01),t.setAttribute("position",AFRAME.utils.clone(r))):(s=e.getAttribute("position"),72===a.keyCode&&(s.x-=.02),74===a.keyCode&&(s.y-=.02),75===a.keyCode&&(s.y+=.02),76===a.keyCode&&(s.x+=.02),59!==a.keyCode&&186!==a.keyCode||(s.z-=.02),222===a.keyCode&&(s.z+=.02),e.setAttribute("position",AFRAME.utils.clone(s))),a.ctrlKey?(o=t.getAttribute("rotation"),89===a.keyCode&&(o.x-=10),79===a.keyCode&&(o.x+=10),85===a.keyCode&&(o.y-=10),73===a.keyCode&&(o.y+=10),t.setAttribute("rotation",AFRAME.utils.clone(o))):(n=e.getAttribute("rotation"),89===a.keyCode&&(n.x-=10),79===a.keyCode&&(n.x+=10),85===a.keyCode&&(n.y-=10),73===a.keyCode&&(n.y+=10),e.setAttribute("rotation",AFRAME.utils.clone(n)))):this.isSecondaryTriggerDown?(t.emit("triggerup"),this.isSecondaryTriggerDown=!1):(t.emit("triggerdown"),this.isSecondaryTriggerDown=!0):this.isTriggerDown?(e.emit("triggerup"),this.isTriggerDown=!1):(e.emit("triggerdown"),this.isTriggerDown=!0))})))},play:function(){var e,t;if(this.bounds=document.body.getBoundingClientRect(),!AFRAME.utils.getUrlParameter("debug"))return;if(AFRAME.utils.getUrlParameter("headfist"))return;e=document.getElementById("rightHand"),(t=document.getElementById("leftHand")).object3D.position.set(-.2,1.5,-.5),e.object3D.position.set(.2,1.5,-.5),t.setAttribute("rotation",{x:35,y:0,z:0});const a=AFRAME.utils.getUrlParameter("type");[e,t].forEach(e=>{e.querySelector(".laser").object3D.visible=!1,"classic"===a?(e.querySelector(".bladeContainer").removeAttribute("bind__visible"),e.querySelector(".bladeContainer").object3D.visible=!0,e.querySelector(".bladeContainer").object3D.scale.set(1,1,1)):"punch"===a?(e.querySelector(".punch").removeAttribute("bind__visible"),e.querySelector(".punch").object3D.visible=!0,e.querySelector(".punch").object3D.visible=!0,e.querySelector(".bladeHandle").object3D.visible=!1):"ride"===a&&(e.querySelector(".handStar").removeAttribute("bind__visible"),e.querySelector(".handStar").object3D.visible=!0,e.querySelector(".bladeHandle").object3D.visible=!1)})},onMouseMove:function(){const e=new THREE.Vector3,t=new THREE.Vector2,a=new THREE.Vector3;return function(s){const n=this.bounds,r=this.el.sceneEl.camera,o=s.clientX-n.left,i=s.clientY-n.top;t.x=o/n.width*2-1,t.y=-i/n.height*2-1,document.getElementById("camera").object3D.getWorldPosition(a),e.set(t.x,t.y,.5).unproject(r).sub(a).normalize();const c=document.getElementById("rightHand").object3D.position,d=-a.z/e.z;r.getWorldPosition(c).add(e.multiplyScalar(d)),c.y+=.8}}()}),window.AFRAME){const t=["debug-controller"],a=[],s=[];if(e.hot.dispose(e=>{e.needsReplace=!0,t.forEach(e=>{delete AFRAME.components[e];const t=AFRAME.scenes[0].querySelectorAll(`[${e}]`);for(let a=0;a{delete AFRAME.shaders[e];const t=AFRAME.scenes[0].querySelectorAll("[material]");for(let a=0;a{delete AFRAME.systems[e],delete AFRAME.scenes[0].systems[e]})}),e.hot.data&&e.hot.data.needsReplace){t.forEach(e=>{const t="data-__hot-"+e,a=document.querySelectorAll(`[${t}]`);for(let s=0;s{e.needsReplace=!0,t.forEach(e=>{delete AFRAME.components[e];const t=AFRAME.scenes[0].querySelectorAll(`[${e}]`);for(let a=0;a{delete AFRAME.shaders[e];const t=AFRAME.scenes[0].querySelectorAll("[material]");for(let a=0;a{delete AFRAME.systems[e],delete AFRAME.scenes[0].systems[e]})}),e.hot.data&&e.hot.data.needsReplace){t.forEach(e=>{const t="data-__hot-"+e,a=document.querySelectorAll(`[${t}]`);for(let s=0;s{e.needsReplace=!0,t.forEach(e=>{delete AFRAME.components[e];const t=AFRAME.scenes[0].querySelectorAll(`[${e}]`);for(let a=0;a{delete AFRAME.shaders[e];const t=AFRAME.scenes[0].querySelectorAll("[material]");for(let a=0;a{delete AFRAME.systems[e],delete AFRAME.scenes[0].systems[e]})}),e.hot.data&&e.hot.data.needsReplace){t.forEach(e=>{const t="data-__hot-"+e,a=document.querySelectorAll(`[${t}]`);for(let s=0;s{console.log(this.el.components.song.getCurrentTime())},250)}}),window.AFRAME){const t=["debug-song-time"],a=[],s=[];if(e.hot.dispose(e=>{e.needsReplace=!0,t.forEach(e=>{delete AFRAME.components[e];const t=AFRAME.scenes[0].querySelectorAll(`[${e}]`);for(let a=0;a{delete AFRAME.shaders[e];const t=AFRAME.scenes[0].querySelectorAll("[material]");for(let a=0;a{delete AFRAME.systems[e],delete AFRAME.scenes[0].systems[e]})}),e.hot.data&&e.hot.data.needsReplace){t.forEach(e=>{const t="data-__hot-"+e,a=document.querySelectorAll(`[${t}]`);for(let s=0;s{e.split(",").forEach(e=>{this.el.sceneEl.emit("debug"+e.trim(),null,!1)})},500)}}),window.AFRAME){const t=["debug-state"],a=[],s=[];if(e.hot.dispose(e=>{e.needsReplace=!0,t.forEach(e=>{delete AFRAME.components[e];const t=AFRAME.scenes[0].querySelectorAll(`[${e}]`);for(let a=0;a{delete AFRAME.shaders[e];const t=AFRAME.scenes[0].querySelectorAll("[material]");for(let a=0;a{delete AFRAME.systems[e],delete AFRAME.scenes[0].systems[e]})}),e.hot.data&&e.hot.data.needsReplace){t.forEach(e=>{const t="data-__hot-"+e,a=document.querySelectorAll(`[${t}]`);for(let s=0;s{var s=r.data;if(s.enabled&&(s.captureBubbles||e.target===n))for(t=0;t{var t=a.data;t.enabled&&(t.captureBubbles||s.target===e)&&a.el.emit(t.as||t.event,s.detail?s.detail:null,!1)},t.delay)}))}}),window.AFRAME){const t=["delayed-proxy-event"],a=[],s=[];if(e.hot.dispose(e=>{e.needsReplace=!0,t.forEach(e=>{delete AFRAME.components[e];const t=AFRAME.scenes[0].querySelectorAll(`[${e}]`);for(let a=0;a{delete AFRAME.shaders[e];const t=AFRAME.scenes[0].querySelectorAll("[material]");for(let a=0;a{delete AFRAME.systems[e],delete AFRAME.scenes[0].systems[e]})}),e.hot.data&&e.hot.data.needsReplace){t.forEach(e=>{const t="data-__hot-"+e,a=document.querySelectorAll(`[${t}]`);for(let s=0;s{e.needsReplace=!0,t.forEach(e=>{delete AFRAME.components[e];const t=AFRAME.scenes[0].querySelectorAll(`[${e}]`);for(let a=0;a{delete AFRAME.shaders[e];const t=AFRAME.scenes[0].querySelectorAll("[material]");for(let a=0;a{delete AFRAME.systems[e],delete AFRAME.scenes[0].systems[e]})}),e.hot.data&&e.hot.data.needsReplace){t.forEach(e=>{const t="data-__hot-"+e,a=document.querySelectorAll(`[${t}]`);for(let s=0;s{e.needsReplace=!0,t.forEach(e=>{delete AFRAME.components[e];const t=AFRAME.scenes[0].querySelectorAll(`[${e}]`);for(let a=0;a{delete AFRAME.shaders[e];const t=AFRAME.scenes[0].querySelectorAll("[material]");for(let a=0;a{delete AFRAME.systems[e],delete AFRAME.scenes[0].systems[e]})}),e.hot.data&&e.hot.data.needsReplace){t.forEach(e=>{const t="data-__hot-"+e,a=document.querySelectorAll(`[${t}]`);for(let s=0;s{e.needsReplace=!0,t.forEach(e=>{delete AFRAME.components[e];const t=AFRAME.scenes[0].querySelectorAll(`[${e}]`);for(let a=0;a{delete AFRAME.shaders[e];const t=AFRAME.scenes[0].querySelectorAll("[material]");for(let a=0;a{delete AFRAME.systems[e],delete AFRAME.scenes[0].systems[e]})}),e.hot.data&&e.hot.data.needsReplace){t.forEach(e=>{const t="data-__hot-"+e,a=document.querySelectorAll(`[${t}]`);for(let s=0;s{e.needsReplace=!0,t.forEach(e=>{delete AFRAME.components[e];const t=AFRAME.scenes[0].querySelectorAll(`[${e}]`);for(let a=0;a{delete AFRAME.shaders[e];const t=AFRAME.scenes[0].querySelectorAll("[material]");for(let a=0;a{delete AFRAME.systems[e],delete AFRAME.scenes[0].systems[e]})}),e.hot.data&&e.hot.data.needsReplace){t.forEach(e=>{const t="data-__hot-"+e,a=document.querySelectorAll(`[${t}]`);for(let s=0;s{e.needsReplace=!0,t.forEach(e=>{delete AFRAME.components[e];const t=AFRAME.scenes[0].querySelectorAll(`[${e}]`);for(let a=0;a{delete AFRAME.shaders[e];const t=AFRAME.scenes[0].querySelectorAll("[material]");for(let a=0;a{delete AFRAME.systems[e],delete AFRAME.scenes[0].systems[e]})}),e.hot.data&&e.hot.data.needsReplace){t.forEach(e=>{const t="data-__hot-"+e,a=document.querySelectorAll(`[${t}]`);for(let s=0;s=0&&(this.beatContainer.object3D.position.z=1.5*-Math.pow(1-this.countDown,2),this.countDown-=t/1e3)},reset:function(){this.beatContainer.object3D.position.z=0,this.el.sceneEl.setAttribute("stage-colors","color","blue")},triggerAnimations:function(){for(let e=0;e{e.needsReplace=!0,t.forEach(e=>{delete AFRAME.components[e];const t=AFRAME.scenes[0].querySelectorAll(`[${e}]`);for(let a=0;a{delete AFRAME.shaders[e];const t=AFRAME.scenes[0].querySelectorAll("[material]");for(let a=0;a{delete AFRAME.systems[e],delete AFRAME.scenes[0].systems[e]})}),e.hot.data&&e.hot.data.needsReplace){t.forEach(e=>{const t="data-__hot-"+e,a=document.querySelectorAll(`[${t}]`);for(let s=0;s{this.preloadFromSelector("#mainLogo"),this.preloadFromSelector("#prevArrow"),this.preloadFromSelector("#stepback"),this.preloadFromSelector(".difficultyBackground"),this.preloadFromSelector(".genreIcon"),this.preloadFromSelector(".merkababloom"),this.preloadFromSelector(".searchResultBackground"),this.preloadMaterialsComponentTextures(),this.preloadKeyboard(),this.preloadSlice(),this.preloadEnvMap(),this.preloadFXs()},1e3)},preloadFromSelector:function(e){const t=document.querySelector(e);this.preloadTexture(t.getObject3D("mesh").material.map)},preloadMaterialsComponentTextures:function(){const e=this.el.systems.materials.textureList;for(var t=0;t{e.needsReplace=!0,t.forEach(e=>{delete AFRAME.components[e];const t=AFRAME.scenes[0].querySelectorAll(`[${e}]`);for(let a=0;a{delete AFRAME.shaders[e];const t=AFRAME.scenes[0].querySelectorAll("[material]");for(let a=0;a{delete AFRAME.systems[e],delete AFRAME.scenes[0].systems[e]})}),e.hot.data&&e.hot.data.needsReplace){t.forEach(e=>{const t="data-__hot-"+e,a=document.querySelectorAll(`[${t}]`);for(let s=0;s{e.needsReplace=!0,t.forEach(e=>{delete AFRAME.components[e];const t=AFRAME.scenes[0].querySelectorAll(`[${e}]`);for(let a=0;a{delete AFRAME.shaders[e];const t=AFRAME.scenes[0].querySelectorAll("[material]");for(let a=0;a{delete AFRAME.systems[e],delete AFRAME.scenes[0].systems[e]})}),e.hot.data&&e.hot.data.needsReplace){t.forEach(e=>{const t="data-__hot-"+e,a=document.querySelectorAll(`[${t}]`);for(let s=0;s{this.el.addEventListener(e,this.swapHand)})},swapHand:function(){this.data.enabled&&this.el.sceneEl.emit("activehandswap",null,!1)}}),window.AFRAME){const t=["hand-swapper"],a=[],s=[];if(e.hot.dispose(e=>{e.needsReplace=!0,t.forEach(e=>{delete AFRAME.components[e];const t=AFRAME.scenes[0].querySelectorAll(`[${e}]`);for(let a=0;a{delete AFRAME.shaders[e];const t=AFRAME.scenes[0].querySelectorAll("[material]");for(let a=0;a{delete AFRAME.systems[e],delete AFRAME.scenes[0].systems[e]})}),e.hot.data&&e.hot.data.needsReplace){t.forEach(e=>{const t="data-__hot-"+e,a=document.querySelectorAll(`[${t}]`);for(let s=0;s{e.needsReplace=!0,t.forEach(e=>{delete AFRAME.components[e];const t=AFRAME.scenes[0].querySelectorAll(`[${e}]`);for(let a=0;a{delete AFRAME.shaders[e];const t=AFRAME.scenes[0].querySelectorAll("[material]");for(let a=0;a{delete AFRAME.systems[e],delete AFRAME.scenes[0].systems[e]})}),e.hot.data&&e.hot.data.needsReplace){t.forEach(e=>{const t="data-__hot-"+e,a=document.querySelectorAll(`[${t}]`);for(let s=0;s{e.needsReplace=!0,t.forEach(e=>{delete AFRAME.components[e];const t=AFRAME.scenes[0].querySelectorAll(`[${e}]`);for(let a=0;a{delete AFRAME.shaders[e];const t=AFRAME.scenes[0].querySelectorAll("[material]");for(let a=0;a{delete AFRAME.systems[e],delete AFRAME.scenes[0].systems[e]})}),e.hot.data&&e.hot.data.needsReplace){t.forEach(e=>{const t="data-__hot-"+e,a=document.querySelectorAll(`[${t}]`);for(let s=0;s{if(!t.detail||!t.detail.intersectedEl||!this.data.enabled)return;const a=t.detail.intersectedEl;a.classList.contains("blade")&&a!==e?(this.isColliding=!0,this.el.components.haptics__weapon.pulse()):this.isColliding=!1}),e.addEventListener("mouseleave",e=>{this.isColliding=!1})},tick:function(){this.isColliding&&this.data.enabled&&this.el.components.haptics__weapon.pulse()}}),window.AFRAME){const t=["haptics-weapons"],a=[],s=[];if(e.hot.dispose(e=>{e.needsReplace=!0,t.forEach(e=>{delete AFRAME.components[e];const t=AFRAME.scenes[0].querySelectorAll(`[${e}]`);for(let a=0;a{delete AFRAME.shaders[e];const t=AFRAME.scenes[0].querySelectorAll("[material]");for(let a=0;a{delete AFRAME.systems[e],delete AFRAME.scenes[0].systems[e]})}),e.hot.data&&e.hot.data.needsReplace){t.forEach(e=>{const t="data-__hot-"+e,a=document.querySelectorAll(`[${t}]`);for(let s=0;s{e.needsReplace=!0,t.forEach(e=>{delete AFRAME.components[e];const t=AFRAME.scenes[0].querySelectorAll(`[${e}]`);for(let a=0;a{delete AFRAME.shaders[e];const t=AFRAME.scenes[0].querySelectorAll("[material]");for(let a=0;a{delete AFRAME.systems[e],delete AFRAME.scenes[0].systems[e]})}),e.hot.data&&e.hot.data.needsReplace){t.forEach(e=>{const t="data-__hot-"+e,a=document.querySelectorAll(`[${t}]`);for(let s=0;s{e.needsReplace=!0,t.forEach(e=>{delete AFRAME.components[e];const t=AFRAME.scenes[0].querySelectorAll(`[${e}]`);for(let a=0;a{delete AFRAME.shaders[e];const t=AFRAME.scenes[0].querySelectorAll("[material]");for(let a=0;a{delete AFRAME.systems[e],delete AFRAME.scenes[0].systems[e]})}),e.hot.data&&e.hot.data.needsReplace){t.forEach(e=>{const t="data-__hot-"+e,a=document.querySelectorAll(`[${t}]`);for(let s=0;s{e.needsReplace=!0,t.forEach(e=>{delete AFRAME.components[e];const t=AFRAME.scenes[0].querySelectorAll(`[${e}]`);for(let a=0;a{delete AFRAME.shaders[e];const t=AFRAME.scenes[0].querySelectorAll("[material]");for(let a=0;a{delete AFRAME.systems[e],delete AFRAME.scenes[0].systems[e]})}),e.hot.data&&e.hot.data.needsReplace){t.forEach(e=>{const t="data-__hot-"+e,a=document.querySelectorAll(`[${t}]`);for(let s=0;s{e.needsReplace=!0,t.forEach(e=>{delete AFRAME.components[e];const t=AFRAME.scenes[0].querySelectorAll(`[${e}]`);for(let a=0;a{delete AFRAME.shaders[e];const t=AFRAME.scenes[0].querySelectorAll("[material]");for(let a=0;a{delete AFRAME.systems[e],delete AFRAME.scenes[0].systems[e]})}),e.hot.data&&e.hot.data.needsReplace){t.forEach(e=>{const t="data-__hot-"+e,a=document.querySelectorAll(`[${t}]`);for(let s=0;s{this.username=e.detail.value,localStorage.setItem("moonriderusername",this.username)}),this.el.addEventListener("leaderboardsubmit",this.addScore.bind(this))},update:function(e){!s.apps.length&&this.data.apiKey&&(s.initializeApp({apiKey:this.data.apiKey,authDomain:this.data.authDomain,databaseURL:this.data.databaseURL,projectId:this.data.projectId,storageBucket:this.data.storageBucket,messagingSenderId:this.data.messagingSenderId}),this.firestore=s.firestore(),this.firestore.settings({}),this.db=this.firestore.collection("scores")),!e.isVictory&&this.data.isVictory&&this.checkLeaderboardQualify(),this.data.difficulty&&e.difficulty!==this.data.difficulty||this.data.menuSelectedChallengeId&&e.menuSelectedChallengeId!==this.data.menuSelectedChallengeId?this.fetchScores(this.data.menuSelectedChallengeId):this.data.challengeId&&e.challengeId!==this.data.challengeId&&this.fetchScores(this.data.challengeId)},addScore:function(){const e=this.el.sceneEl.systems.state.state;if(!e.isVictory||!e.inVR)return;const t={accuracy:e.score.accuracy,challengeId:e.challenge.id,gameMode:this.data.gameMode,score:e.score.score,username:this.username,difficulty:this.data.difficulty||e.challenge.difficulty,time:new Date};n.includes(this.username.toLowerCase())||this.username.match(r)||this.db.add(t),this.addEventDetail.scoreData=t,this.el.emit("leaderboardscoreadded",this.addEventDetail,!1)},fetchScores:function(e){if("ride"===this.data.gameMode)return;const t=this.el.sceneEl.systems.state.state;this.db.where("challengeId","==",e).where("difficulty","==",t.menuSelectedChallenge.id?t.menuSelectedChallenge.difficulty:t.challenge.difficulty).where("gameMode","==",this.data.gameMode).orderBy("score","desc").orderBy("time","asc").limit(10).get().then(t=>{this.eventDetail.challengeId=e,this.scores.length=0,t.empty||t.forEach(e=>this.scores.push(e.data())),this.el.sceneEl.emit("leaderboard",this.eventDetail,!1)}).catch(e=>{console.error("[firestore]",e)})},checkLeaderboardQualify:function(){const e=this.el.sceneEl.systems.state.state.score.score;if(!AFRAME.utils.getUrlParameter("dot")){if(this.scores.length<10)return this.qualifyingIndex=this.scores.length,void this.el.sceneEl.emit("leaderboardqualify",this.scores.length,!1);for(let t=0;tthis.scores[t].score)return this.qualifyingIndex=t,void this.el.sceneEl.emit("leaderboardqualify",t,!1)}}}),window.AFRAME){const t=["leaderboard"],a=[],s=[];if(e.hot.dispose(e=>{e.needsReplace=!0,t.forEach(e=>{delete AFRAME.components[e];const t=AFRAME.scenes[0].querySelectorAll(`[${e}]`);for(let a=0;a{delete AFRAME.shaders[e];const t=AFRAME.scenes[0].querySelectorAll("[material]");for(let a=0;a{delete AFRAME.systems[e],delete AFRAME.scenes[0].systems[e]})}),e.hot.data&&e.hot.data.needsReplace){t.forEach(e=>{const t="data-__hot-"+e,a=document.querySelectorAll(`[${t}]`);for(let s=0;s=e.length&&(e=void 0),{value:e&&e[s++],done:!e}}};throw new TypeError(t?"Object is not iterable.":"Symbol.iterator is not defined.")}var r,o="undefined"!=typeof globalThis?globalThis:"undefined"!=typeof window?window:void 0!==e?e:"undefined"!=typeof self?self:{},i=i||{},c=o||self;function d(){}function l(e){var t=typeof e;return"object"!=t?t:e?Array.isArray(e)?"array":t:"null"}function u(e){var t=l(e);return"array"==t||"object"==t&&"number"==typeof e.length}function h(e){var t=typeof e;return"object"==t&&null!=e||"function"==t}var m="closure_uid_"+(1e9*Math.random()>>>0),f=0;function p(e,t,a){return e.call.apply(e.bind,arguments)}function b(e,t,a){if(!e)throw Error();if(2t?1:0}e:{var L=c.navigator;if(L){var M=L.userAgent;if(M){N=M;break e}}N=""}function _(e,t,a){for(var s in e)t.call(a,e[s],s,e)}function D(e){var t={};for(var a in e)t[a]=e[a];return t}var I="constructor hasOwnProperty isPrototypeOf propertyIsEnumerable toLocaleString toString valueOf".split(" ");function O(e,t){for(var a,s,n=1;nparseFloat(G)){C=String(K);break e}}C=G}var Y,X={};function Q(e){return function(e,t){var a=X;return Object.prototype.hasOwnProperty.call(a,e)?a[e]:a[e]=t(e)}(e,(function(){for(var t=0,a=x(String(C)).split("."),s=x(String(e)).split("."),n=Math.max(a.length,s.length),r=0;0==t&&r=e.keyCode)&&(e.keyCode=-1)}catch(e){}};var ie="closure_listenable_"+(1e6*Math.random()|0),ce=0;function de(e,t,a,s,n){this.listener=e,this.proxy=null,this.src=t,this.type=a,this.capture=!!s,this.ca=n,this.key=++ce,this.Y=this.Z=!1}function le(e){e.Y=!0,e.listener=null,e.proxy=null,e.src=null,e.ca=null}function ue(e){this.src=e,this.a={},this.b=0}function he(e,t){var a=t.type;if(a in e.a){var s,n=e.a[a],r=S(n,t);(s=0<=r)&&Array.prototype.splice.call(n,r,1),s&&(le(t),0==e.a[a].length&&(delete e.a[a],e.b--))}}function me(e,t,a,s){for(var n=0;n>>0);function Te(e){return"function"==l(e)?e:(e[Ee]||(e[Ee]=function(t){return e.handleEvent(t)}),e[Ee])}function ke(){w.call(this),this.c=new ue(this),this.J=this,this.C=null}function Re(e,t,a,s){if(!(t=e.c.a[String(t)]))return!0;t=t.concat();for(var n=!0,r=0;rs.length)){var n=s[1];if(Array.isArray(n)&&!(1>n.length)){var r=n[0];if("noop"!=r&&"stop"!=r&&"close"!=r)for(var o=1;ot.length?bt:(t=t.substr(s,a),e.D=s+a,t))}function wt(e){e.U=v()+e.P,St(e,e.P)}function St(e,t){if(null!=e.o)throw Error("WatchDog timer not null");e.o=at(y(e.Ua,e),t)}function Et(e){e.o&&(c.clearTimeout(e.o),e.o=null)}function Tt(e){0==e.g.v||e.A||qa(e.g,e)}function kt(e){Et(e);var t=e.F;t&&"function"==typeof t.ja&&t.ja(),e.F=null,Ue(e.R),Je(e.J),e.a&&(t=e.a,e.a=null,t.abort(),t.ja())}function Rt(e,t){try{var a=e.g;if(0!=a.v&&(a.a==e||ra(a.b,e)))if(a.I=e.N,!e.C&&ra(a.b,e)&&3==a.v){try{var s=a.ka.a.parse(t)}catch(e){s=null}if(Array.isArray(s)&&3==s.length){var n=s;if(0==n[0]){e:if(!a.j){if(a.a){if(!(a.a.u+3e3n[2]&&a.H&&0==a.o&&!a.m&&(a.m=at(y(a.Ra,a),6e3));if(1>=na(a.b)&&a.ea){try{a.ea()}catch(e){}a.ea=void 0}}else Ba(a,11)}else if((e.C||a.a==e)&&Fa(a),!R(t))for(t=s=a.ka.a.parse(t),s=0;st||3==t&&!B&&!this.a.$())){this.A||4!=t||7==a||Qe(8==a||0>=s?3:2),Et(this);var n=this.a.X();this.N=n;var r=this.a.$();if(this.b=200==n,function(e,t,a,s,n,r,o){e.info((function(){return"XMLHTTP RESP ("+s+") [ attempt "+n+"]: "+t+"\n"+a+"\n"+r+" "+o}))}(this.c,this.m,this.l,this.f,this.T,t,n),this.b){if(this.V&&!this.C){t:{if(this.a){var o,i=this.a;if((o=i.a?i.a.getResponseHeader("X-HTTP-Initial-Response"):null)&&!R(o)){var c=o;break t}}c=null}if(!c){this.b=!1,this.h=3,et(12),kt(this),Tt(this);break e}We(this.c,this.f,c,"Initial handshake response via X-HTTP-Initial-Response"),this.C=!0,Rt(this,c)}this.I?(vt(this,t,r),B&&this.b&&3==t&&(Ve(this.J,this.R,"tick",this.Va),this.R.start())):(We(this.c,this.f,r,null),Rt(this,r)),4==t&&kt(this),this.b&&!this.A&&(4==t?qa(this.g,this):(this.b=!1,wt(this)))}else 400==n&&0t)throw Error("Bad port number "+t);e.h=t}else e.h=null}function Zt(e,t,a){t instanceof Wt?(e.b=t,function(e,t){t&&!e.f&&(Kt(e),e.c=null,e.a.forEach((function(e,t){var a=t.toLowerCase();t!=a&&(Yt(this,t),Qt(this,a,e))}),e)),e.f=t}(e.b,e.a)):(a||(t=qt(t,Jt)),e.b=new Wt(t,e.a))}function Ct(e,t,a){e.b.set(t,a)}function Ut(e){return Ct(e,"zx",Math.floor(2147483648*Math.random()).toString(36)+Math.abs(Math.floor(2147483648*Math.random())^v()).toString(36)),e}function Ft(e,t){return e?t?decodeURI(e.replace(/%25/g,"%2525")):decodeURIComponent(e):""}function qt(e,t,a){return"string"==typeof e?(e=encodeURI(e).replace(t,Ht),a&&(e=e.replace(/%25([0-9a-fA-F]{2})/g,"%$1")),e):null}function Ht(e){return"%"+((e=e.charCodeAt(0))>>4&15).toString(16)+(15&e).toString(16)}Mt.prototype.toString=function(){var e=[],t=this.f;t&&e.push(qt(t,Bt,!0),":");var a=this.c;return(a||"file"==t)&&(e.push("//"),(t=this.j)&&e.push(qt(t,Bt,!0),"@"),e.push(encodeURIComponent(String(a)).replace(/%25([0-9a-fA-F]{2})/g,"%$1")),null!=(a=this.h)&&e.push(":",String(a))),(a=this.g)&&(this.c&&"/"!=a.charAt(0)&&e.push("/"),e.push(qt(a,"/"==a.charAt(0)?Vt:zt,!0))),(a=this.b.toString())&&e.push("?",a),(a=this.i)&&e.push("#",qt(a,Gt)),e.join("")};var Bt=/[#\/\?@]/g,zt=/[#\?:]/g,Vt=/[#\?]/g,Jt=/[#\?@]/g,Gt=/#/g;function Wt(e,t){this.b=this.a=null,this.c=e||null,this.f=!!t}function Kt(e){e.a||(e.a=new xt,e.b=0,e.c&&function(e,t){if(e){e=e.split("&");for(var a=0;a2*e.c&&Pt(e)))}function Xt(e,t){return Kt(e),t=$t(e,t),jt(e.a.b,t)}function Qt(e,t,a){Yt(e,t),0=e.f}function na(e){return e.b?1:e.a?e.a.size:0}function ra(e,t){return e.b?e.b==t:!!e.a&&e.a.has(t)}function oa(e,t){e.a?e.a.add(t):e.b=t}function ia(e,t){e.b&&e.b==t?e.b=null:e.a&&e.a.has(t)&&e.a.delete(t)}function ca(e){var t,a;if(null!=e.b)return e.c.concat(e.b.s);if(null!=e.a&&0!==e.a.size){var s=e.c;try{for(var r=n(e.a.values()),o=r.next();!o.done;o=r.next()){var i=o.value;s=s.concat(i.s)}}catch(e){t={error:e}}finally{try{o&&!o.done&&(a=r.return)&&a.call(r)}finally{if(t)throw t.error}}return s}return k(e.c)}function da(){}function la(){this.a=new da}function ua(e,t,a){var s=a||"";try{Nt(e,(function(e,a){var n=e;h(e)&&(n=Ne(e)),t.push(s+a+"="+encodeURIComponent(n))}))}catch(e){throw t.push(s+"type="+encodeURIComponent("_badmap")),e}}function ha(e,t,a,s,n){try{t.onload=null,t.onerror=null,t.onabort=null,t.ontimeout=null,n(s)}catch(e){}}ta.prototype.cancel=function(){var e,t;if(this.c=ca(this),this.b)this.b.cancel(),this.b=null;else if(this.a&&0!==this.a.size){try{for(var a=n(this.a.values()),s=a.next();!s.done;s=a.next()){s.value.cancel()}}catch(t){e={error:t}}finally{try{s&&!s.done&&(t=a.return)&&t.call(a)}finally{if(e)throw e.error}}this.a.clear()}},da.prototype.stringify=function(e){return c.JSON.stringify(e,void 0)},da.prototype.parse=function(e){return c.JSON.parse(e,void 0)};var ma=c.JSON.parse;function fa(e){ke.call(this),this.headers=new xt,this.H=e||null,this.b=!1,this.s=this.a=null,this.B="",this.h=0,this.f="",this.g=this.A=this.l=this.u=!1,this.o=0,this.m=null,this.I=pa,this.D=this.F=!1}A(fa,ke);var pa="",ba=/^https?$/i,ya=["POST","PUT"];function ga(e){return"content-type"==e.toLowerCase()}function va(e,t){e.b=!1,e.a&&(e.g=!0,e.a.abort(),e.g=!1),e.f=t,e.h=5,Aa(e),Sa(e)}function Aa(e){e.u||(e.u=!0,e.dispatchEvent("complete"),e.dispatchEvent("error"))}function wa(e){if(e.b&&void 0!==i&&(!e.s[1]||4!=Ta(e)||2!=e.X()))if(e.l&&4==Ta(e))Fe(e.za,0,e);else if(e.dispatchEvent("readystatechange"),4==Ta(e)){e.b=!1;try{var t,a=e.X();e:switch(a){case 200:case 201:case 202:case 204:case 206:case 304:case 1223:var s=!0;break e;default:s=!1}if(!(t=s)){var n;if(n=0===a){var r=String(e.B).match(Lt)[1]||null;if(!r&&c.self&&c.self.location){var o=c.self.location.protocol;r=o.substr(0,o.length-1)}n=!ba.test(r?r.toLowerCase():"")}t=n}if(t)e.dispatchEvent("complete"),e.dispatchEvent("success");else{e.h=6;try{var d=2(d-=r))r=Math.max(0,n[c].b-100),i=!1;else try{ua(l,o,"req"+d+"_")}catch(e){s&&s(l)}}if(i){s=o.join("&");break e}}return e=e.g.splice(0,a),t.s=e,s}function Oa(e){e.a||e.j||(e.U=1,De(e.Aa,e),e.o=0)}function Za(e){return!(e.a||e.j||3<=e.o)&&(e.U++,e.j=at(y(e.Aa,e),Ha(e,e.o)),e.o++,!0)}function Ca(e){null!=e.s&&(c.clearTimeout(e.s),e.s=null)}function Ua(e){e.a=new mt(e,e.c,"rpc",e.U),null===e.i&&(e.a.B=e.l),e.a.O=0;var t=_t(e.la);Ct(t,"RID","rpc"),Ct(t,"SID",e.J),Ct(t,"CI",e.H?"0":"1"),Ct(t,"AID",e.P),Da(e,t),Ct(t,"TYPE","xmlhttp"),e.i&&e.l&&ka(t,e.i,e.l),e.D&&e.a.setTimeout(e.D);var a=e.a;e=e.ga,a.H=1,a.i=Ut(_t(t)),a.j=null,a.I=!0,gt(a,e)}function Fa(e){null!=e.m&&(c.clearTimeout(e.m),e.m=null)}function qa(e,t){var a=null;if(e.a==t){Fa(e),Ca(e),e.a=null;var s=2}else{if(!ra(e.b,t))return;a=t.s,ia(e.b,t),s=1}if(e.I=t.N,0!=e.v)if(t.b)if(1==s){a=t.j?t.j.length:0,t=v()-t.u;var n=e.u;(s=Ye()).dispatchEvent(new tt(s,a,t,n)),Ma(e)}else Oa(e);else if(3==(n=t.h)||0==n&&0=e.b.f-(e.h?1:0))&&(e.h?(e.g=t.s.concat(e.g),!0):!(1==e.v||2==e.v||e.u>=(e.Ia?0:e.Ja))&&(e.h=at(y(e.Ba,e,t),Ha(e,e.u)),e.u++,!0))}(e,t)||2==s&&Za(e)))switch(a&&0t?null:"string"==typeof e?e.charAt(t):e[t]}(n.L()),a=c.FormData&&e instanceof c.FormData,!(0<=S(ya,t))||s||a||n.set("Content-Type","application/x-www-form-urlencoded;charset=utf-8"),n.forEach((function(e,t){this.a.setRequestHeader(t,e)}),this),this.I&&(this.a.responseType=this.I),"withCredentials"in this.a&&this.a.withCredentials!==this.F&&(this.a.withCredentials=this.F);try{Ea(this),0=this.N)){var e=2*this.N;this.c.info("BP detection timer enabled: "+e),this.s=at(y(this.Sa,this),e)}},r.Sa=function(){this.s&&(this.s=null,this.c.info("BP detection timeout reached."),this.c.info("Buffering proxy detected and switch to long-polling!"),this.H=!1,this.F=!0,Pa(this),Ua(this))},r.Ra=function(){null!=this.m&&(this.m=null,Pa(this),Za(this),et(19))},r.Xa=function(e){e?(this.c.info("Successfully pinged google.com"),et(2)):(this.c.info("Failed to ping google.com"),et(1))},(r=Ga.prototype).ta=function(){},r.sa=function(){},r.ra=function(){},r.qa=function(){},r.Ha=function(){},Wa.prototype.a=function(e,t){return new Ka(e,t)},A(Ka,ke),(r=Ka.prototype).addEventListener=function(e,t,a,s){Ka.S.addEventListener.call(this,e,t,a,s)},r.removeEventListener=function(e,t,a,s){Ka.S.removeEventListener.call(this,e,t,a,s)},r.Oa=function(){this.a.f=this.f,this.h&&(this.a.C=!0);var e=this.a,t=this.l,a=this.b||void 0;et(0),e.fa=t,e.W=a||{},e.H=e.T,e.B=Va(e,null,e.fa),Ma(e)},r.close=function(){xa(this.a)},r.Pa=function(e){if("string"==typeof e){var t={};t.__data__=e,La(this.a,t)}else this.g?((t={}).__data__=Ne(e),La(this.a,t)):La(this.a,e)},r.G=function(){this.a.f=null,delete this.f,xa(this.a),delete this.a,Ka.S.G.call(this)},A(Ya,lt),A(Xa,ut),A(Qa,Ga),Qa.prototype.ta=function(){this.a.dispatchEvent("a")},Qa.prototype.sa=function(e){this.a.dispatchEvent(new Ya(e))},Qa.prototype.ra=function(e){this.a.dispatchEvent(new Xa(e))},Qa.prototype.qa=function(){this.a.dispatchEvent("b")},Wa.prototype.createWebChannel=Wa.prototype.a,Ka.prototype.send=Ka.prototype.Pa,Ka.prototype.open=Ka.prototype.Oa,Ka.prototype.close=Ka.prototype.close,st.NO_ERROR=0,st.TIMEOUT=8,st.HTTP_ERROR=6,nt.COMPLETE="complete",it.EventType=dt,dt.OPEN="a",dt.CLOSE="b",dt.ERROR="c",dt.MESSAGE="d",ke.prototype.listen=ke.prototype.va,fa.prototype.listenOnce=fa.prototype.wa,fa.prototype.getLastError=fa.prototype.Qa,fa.prototype.getLastErrorCode=fa.prototype.ua,fa.prototype.getStatus=fa.prototype.X,fa.prototype.getResponseJson=fa.prototype.Na,fa.prototype.getResponseText=fa.prototype.$,fa.prototype.send=fa.prototype.ba;var $a={createWebChannelTransport:function(){return new Wa},ErrorCode:st,EventType:nt,WebChannel:it,XhrIo:fa},es=$a.createWebChannelTransport,ts=$a.ErrorCode,as=$a.EventType,ss=$a.WebChannel,ns=$a.XhrIo;t.default=$a}.call(this,a(1))},function(e,t,a){const s=a(0),n=new THREE.Color;function r(e,t,a){n.set(a),e.uniforms?(e.uniforms[t].value.x=n.r,e.uniforms[t].value.y=n.g,e.uniforms[t].value.z=n.b):e[t].set(a)}function o(e,t,a,s,n,r){e.fillStyle=t,e.fillRect(a,s,n,r)}function i(e,t,a,s,n,r,o){let i;i=r>o?e.createLinearGradient(0,0,r,0):e.createLinearGradient(0,0,0,o),i.addColorStop(0,t),i.addColorStop(1,a),e.fillStyle=i,e.fillRect(s,n,r,o)}if(AFRAME.registerSystem("materials",{schema:{},init:function(){this.curve=null,this.panelMaterials=[];const e=localStorage.getItem("colorScheme")||"default";this.scheme=s.schemes[e],this.textureList=[],this.beatsCanvas=document.createElement("canvas"),this.beatsTexture=new THREE.CanvasTexture(this.beatsCanvas),this.generateBeatsTexture(),this.textureList.push(this.beatsTexture),this.envmapCanvas=document.createElement("canvas"),this.envmapTexture=new THREE.CanvasTexture(this.envmapCanvas),this.generateEnvmapTexture(),this.textureList.push(this.envmapTexture),this.fistsCanvas=document.createElement("canvas"),this.fistsTexture=new THREE.CanvasTexture(this.fistsCanvas),this.generateFistsTexture(),this.textureList.push(this.fistsTexture),"loading"===document.readyState?document.addEventListener("DOMContentLoaded",()=>{this.createMaterials()}):this.createMaterials()},play:function(){this.setColorScheme()},tick:function(e,t){this.aurora.uniforms.time.value=e,this.home.animate&&(this.home.uniforms.time.value=e),this.leftFistWeapon.uniforms.time.value=e,this.leftWeapon.uniforms.time.value=e,this.rightFistWeapon.uniforms.time.value=e,this.rightWeapon.uniforms.time.value=e,this.rings.uniforms.time.value=e,this.tube.uniforms.time.value=e},createMaterials:function(){const e=this.scheme;this.tunnel=new THREE.ShaderMaterial({vertexShader:a(108),fragmentShader:a(109),uniforms:{fogColor:{value:new THREE.Color(e.primary)},color1:{value:new THREE.Color(e.primary)},color2:{value:new THREE.Color(e.secondary)},color3:{value:new THREE.Color(e.tertiary)},scale:{value:1}},transparent:!0}),this.merkaba=new THREE.MeshBasicMaterial({color:new THREE.Color(e.primary)}),this.backglow=new THREE.MeshBasicMaterial({transparent:!0,map:(new THREE.TextureLoader).load(document.getElementById("backGlowImg").src),color:new THREE.Color(e.primary)}),this.textureList.push(this.backglow.map),this.aurora=new THREE.ShaderMaterial({vertexShader:a(110),fragmentShader:a(111),uniforms:{colorPrimary:{value:new THREE.Color(e.primary)},colorSecondary:{value:new THREE.Color(e.secondary)},time:{value:0}},transparent:!0}),this.rings=new THREE.ShaderMaterial({vertexShader:a(112),fragmentShader:a(113),uniforms:{colorPrimary:{value:new THREE.Color(e.primary)},colorSecondary:{value:new THREE.Color(e.secondary)},colorTertiary:{value:new THREE.Color(e.tertiary)},time:{value:0}},transparent:!0,depthWrite:!1}),this.moon=new THREE.ShaderMaterial({vertexShader:a(114),fragmentShader:a(115),uniforms:{map:{value:(new THREE.TextureLoader).load(document.getElementById("moonImg").src)},tint:{value:new THREE.Color(e.secondarybright)}},transparent:!0}),this.textureList.push(this.moon.uniforms.map.value),this.home=new THREE.ShaderMaterial({vertexShader:a(116),fragmentShader:a(117),uniforms:{color1:{value:new THREE.Color(e.primary)},color2:{value:new THREE.Color(e.secondary)},color3:{value:new THREE.Color(e.tertiary)},src:{value:(new THREE.TextureLoader).load(document.getElementById("homeShadowImg").src)},time:{value:0}},transparent:!0}),this.textureList.push(this.home.uniforms.src.value);const t=(new THREE.TextureLoader).load(document.getElementById("weaponImg").src);t.wrapS=THREE.RepeatWrapping,t.wrapT=THREE.RepeatWrapping,t.repeat.set(2,2),t.magFilter=THREE.NearestFilter,this.textureList.push(t),this.rightWeapon=new THREE.ShaderMaterial({vertexShader:a(25),fragmentShader:a(26),uniforms:{src:{value:t},color:{value:new THREE.Color(e.secondary)},thickness:{value:1.6},time:{value:0}},transparent:!0,blending:THREE.AdditiveBlending}),this.leftWeapon=new THREE.ShaderMaterial({vertexShader:a(25),fragmentShader:a(26),uniforms:{src:{value:t},color:{value:new THREE.Color(e.primary)},thickness:{value:1.6},time:{value:0}},transparent:!0,blending:THREE.AdditiveBlending}),this.leftFistWeapon=new THREE.ShaderMaterial({vertexShader:a(16),fragmentShader:a(27),uniforms:{src:{value:t},color:{value:new THREE.Color(e.primary)},time:{value:0}},side:THREE.DoubleSide,transparent:!0,blending:THREE.AdditiveBlending}),this.rightFistWeapon=new THREE.ShaderMaterial({vertexShader:a(16),fragmentShader:a(27),uniforms:{src:{value:t},color:{value:new THREE.Color(e.secondary)},time:{value:0}},side:THREE.DoubleSide,transparent:!0,blending:THREE.AdditiveBlending});const n=(new THREE.TextureLoader).load(document.getElementById("weaponImg").src),r=(new THREE.TextureLoader).load(document.getElementById("weaponHandleImg").src);n.mapping=THREE.SphericalReflectionMapping,this.textureList.push(n),this.textureList.push(r),this.leftWeaponHandle=new THREE.MeshStandardMaterial({roughness:.4,metalness:.5,color:new THREE.Color(e.primary),map:r,envMap:n}),this.rightWeaponHandle=new THREE.MeshStandardMaterial({roughness:.4,metalness:.5,color:new THREE.Color(e.secondary),map:r,envMap:n});const o=(new THREE.TextureLoader).load(document.getElementById("weapon2Img").src);o.mapping=THREE.SphericalReflectionMapping,this.leftFist=new THREE.MeshStandardMaterial({roughness:.3,metalness:.8,map:this.fistsTexture,envMap:o,transparent:!0}),this.rightFist=new THREE.MeshStandardMaterial({roughness:.3,metalness:.8,map:this.fistsTexture,envMap:o,transparent:!0}),this.beat=new THREE.MeshLambertMaterial({map:this.beatsTexture,transparent:!0}),this.blueBeatPieces=new THREE.MeshLambertMaterial({map:this.beatsTexture,color:e.secondary,emissive:e.secondary,emissiveIntensity:.2}),this.redBeatPieces=new THREE.MeshLambertMaterial({map:this.beatsTexture,color:e.primary,emissive:e.primary,emissiveIntensity:.2}),this.minePieces=new THREE.MeshLambertMaterial({color:e.tertiary,emissive:e.tertiary,emissiveIntensity:.2});const i=(new THREE.TextureLoader).load(document.getElementById("backGlowImg").src);this.redBeatGlow=new THREE.MeshBasicMaterial({color:e.primary,map:i,blending:THREE.AdditiveBlending,transparent:!0}),this.blueBeatGlow=new THREE.MeshBasicMaterial({color:e.secondary,map:i,blending:THREE.AdditiveBlending,transparent:!0}),this.textureList.push(i),this.stars=new THREE.PointsMaterial({size:1,map:(new THREE.TextureLoader).load(document.getElementById("starImg").src),blending:THREE.AdditiveBlending,transparent:!0,color:new THREE.Color(e.secondary)}),this.textureList.push(this.stars.map);const c=(new THREE.TextureLoader).load(document.getElementById("sideglowImg").src);this.textureList.push(c),this.leftsideglow=new THREE.MeshBasicMaterial({map:c,transparent:!0,blending:THREE.AdditiveBlending,depthTest:!1,side:THREE.BackSide,color:new THREE.Color(s.OFF)}),this.rightsideglow=new THREE.MeshBasicMaterial({map:c,transparent:!0,blending:THREE.AdditiveBlending,depthTest:!1,color:new THREE.Color(s.OFF)});const d=(new THREE.TextureLoader).load(document.getElementById("plumeImg").src);d.minFilter=THREE.LinearFilter,this.arrowBluePlume=new THREE.ShaderMaterial({vertexShader:a(7),fragmentShader:a(8),uniforms:{color:{value:new THREE.Color(e.secondary)},src:{value:d}},transparent:!0,depthTest:!1}),this.arrowRedPlume=new THREE.ShaderMaterial({vertexShader:a(7),fragmentShader:a(8),uniforms:{color:{value:new THREE.Color(e.primary)},src:{value:d}},transparent:!0,depthTest:!1}),this.dotBluePlume=new THREE.ShaderMaterial({vertexShader:a(7),fragmentShader:a(8),uniforms:{color:{value:new THREE.Color(e.secondary)},src:{value:d}},transparent:!0,depthTest:!1}),this.dotRedPlume=new THREE.ShaderMaterial({vertexShader:a(7),fragmentShader:a(8),uniforms:{color:{value:new THREE.Color(e.primary)},src:{value:d}},transparent:!0,depthTest:!1}),this.minePlume=new THREE.ShaderMaterial({vertexShader:a(7),fragmentShader:a(8),uniforms:{color:{value:new THREE.Color(e.tertiary)},src:{value:d}},transparent:!0,depthTest:!1});const l=(new THREE.TextureLoader).load(document.getElementById("tubeImg").src),u=(new THREE.TextureLoader).load(document.getElementById("tubeColorImg").src);l.generateMipmaps=!1,l.minFilter=THREE.LinearFilter,u.generateMipmaps=!1,u.minFilter=THREE.LinearFilter,this.tube=new THREE.ShaderMaterial({vertexShader:a(118),fragmentShader:a(119),uniforms:{time:{value:0},opacity:{value:0},src:{value:l},color:{value:u}},transparent:!0,depthTest:!1,side:THREE.BackSide});const h=(new THREE.TextureLoader).load(document.getElementById("handStarTrailImg").src);h.generateMipmaps=!1,h.minFilter=THREE.LinearFilter,this.handStarTrail=new THREE.ShaderMaterial({vertexShader:a(120),fragmentShader:a(121),uniforms:{colorPrimary:{value:new THREE.Color(e.primary)},colorSecondary:{value:new THREE.Color(e.secondary)},colorTertiary:{value:new THREE.Color(e.tertiary)},pulse:{value:0},src:{value:h}},transparent:!0,depthTest:!1,blending:THREE.AdditiveBlending,side:THREE.DoubleSide})},setColorScheme:function(e){this.el.sceneEl;const t=this.scheme=s.schemes[e]||s.schemes.default;r(this.arrowBluePlume,"color",t.secondary),r(this.arrowRedPlume,"color",t.primary),r(this.aurora,"colorPrimary",t.primary),r(this.aurora,"colorSecondary",t.secondary),r(this.backglow,"color",t.primary),r(this.blueBeatGlow,"color",t.secondary),r(this.blueBeatGlow,"color",t.secondary),r(this.blueBeatPieces,"color",t.secondary),r(this.blueBeatPieces,"emissive",t.secondary),r(this.dotBluePlume,"color",t.secondary),r(this.dotRedPlume,"color",t.primary),r(this.handStarTrail,"colorPrimary",t.primary),r(this.handStarTrail,"colorSecondary",t.secondary),r(this.handStarTrail,"colorTertiary",t.tertiary),r(this.home,"color1",t.primary),r(this.home,"color2",t.secondary),r(this.home,"color3",t.tertiary),r(this.leftFist,"color",t.primarybright),r(this.leftFistWeapon,"color",t.primary),r(this.leftWeapon,"color",t.primary),r(this.leftWeaponHandle,"color",t.primary),r(this.merkaba,"color",t.primary),r(this.minePieces,"color",t.tertiary),r(this.minePieces,"emissive",t.tertiary),r(this.minePlume,"color",t.tertiary),r(this.moon,"tint",t.secondarybright),r(this.redBeatGlow,"color",t.primary),r(this.redBeatGlow,"color",t.primary),r(this.redBeatPieces,"color",t.primary),r(this.redBeatPieces,"emissive",t.primary),r(this.rightFist,"color",t.secondarybright),r(this.rightWeapon,"color",t.secondary),r(this.rightFistWeapon,"color",t.secondary),r(this.rightWeaponHandle,"color",t.secondary),r(this.rings,"colorPrimary",t.primary),r(this.rings,"colorSecondary",t.secondary),r(this.rings,"colorTertiary",t.tertiary),r(this.stars,"color",t.secondary),r(this.tunnel,"fogColor",t.primary),r(this.tunnel,"color1",t.primary),r(this.tunnel,"color2",t.secondary),r(this.tunnel,"color3",t.tertiary),this.generateBeatsTexture(),this.generateEnvmapTexture(),this.generateFistsTexture(),document.querySelectorAll("a-entity[wall]").forEach(e=>{r(e.getObject3D("mesh").material,"colorTertiary",t.tertiary)}),this.panelMaterials.forEach(e=>{r(e,"colorPrimary",t.primary),r(e,"colorSecondary",t.secondary)}),r(this.curve,"fogColor",t.primary),r(this.curve,"color1",t.primary),r(this.curve,"color2",t.secondary)},generateBeatsTexture:function(){const e=this.scheme,t=new THREE.Color(e.primary),a=new THREE.Color(e.secondary),s=new THREE.Color(e.tertiary),n=this.beatsCanvas,r=n.getContext("2d");n.width=512,n.height=32,o(r,s.getStyle(),0,0,128,6),o(r,"#000",128,0,128,6),o(r,a.getStyle(),256,0,128,6),o(r,t.getStyle(),384,0,105,6),o(r,"#FFF",489,0,23,6),i(r,"#000000",a.getStyle(),0,6,512,4),i(r,"#000",t.getStyle(),0,10,512,5),i(r,"#000",s.getStyle(),0,15,512,4),i(r,`rgba(${a.r}, ${a.g}, ${a.b}, 0)`,a.getStyle(),0,19,512,5),i(r,`rgba(${t.r}, ${t.g}, ${t.b}, 0)`,t.getStyle(),0,24,512,4),i(r,`rgba(${s.r}, ${s.g}, ${s.b}, 0)`,s.getStyle(),0,28,512,4);const c=this.beatsTexture;return c.generateMipmaps=!1,c.magFilter=THREE.LinearFilter,c.minFilter=THREE.LinearFilter,c.needsUpdate=!0,c},generateFistsTexture:function(){const e=this.scheme,t=new THREE.Color(e.primarybright),a=new THREE.Color(e.secondarybright),s=this.fistsCanvas,n=s.getContext("2d");return s.width=8,s.height=128,i(n,t.getStyle(),`rgba(${t.r}, ${t.g}, ${t.b}, 0)`,0,0,4,128),i(n,a.getStyle(),`rgba(${a.r}, ${a.g}, ${a.b}, 0)`,4,0,4,128),this.fistsTexture.needsUpdate=!0,this.fistsTexture},generateEnvmapTexture:function(){const e=this.scheme,t=new THREE.Color(e.primary),a=new THREE.Color(e.secondary),s=document.getElementById("envmapTemplateImg");s.addEventListener("load",()=>{const e=s.width,n=s.height,r=this.envmapCanvas;r.width=e,r.height=n;const o=r.getContext("2d");o.drawImage(s,0,0);const i=o.getImageData(0,0,e,n),c=i.data;let d,l;for(let e=0;e{"mesh"===t.detail.type&&(e=this.el.getObject3D("mesh"),e&&this.applyMaterial(e))}),this.material.animate=this.data.animate},applyMaterial:function(e){e.detail&&(e=e.detail.model),this.data.recursive?e.traverse(e=>{"Mesh"===e.type&&(e.material=this.material)}):e.material=this.material}}),AFRAME.registerComponent("materials-color-menu",{play:function(){this.text=document.getElementById("colorName")},events:{mouseenter:function(e){this.text.setAttribute("text","value",e.target.dataset.colorName)},mouseleave:function(e){this.text.setAttribute("text","value","")},click:function(e){this.el.sceneEl.systems.materials.setColorScheme(e.target.dataset.colorScheme),this.el.sceneEl.emit("colorschemechange",e.target.dataset.colorScheme,!1)}}}),window.AFRAME){const t=["materials","materials-color-menu"],a=[],s=["materials"];if(e.hot.dispose(e=>{e.needsReplace=!0,t.forEach(e=>{delete AFRAME.components[e];const t=AFRAME.scenes[0].querySelectorAll(`[${e}]`);for(let a=0;a{delete AFRAME.shaders[e];const t=AFRAME.scenes[0].querySelectorAll("[material]");for(let a=0;a{delete AFRAME.systems[e],delete AFRAME.scenes[0].systems[e]})}),e.hot.data&&e.hot.data.needsReplace){t.forEach(e=>{const t="data-__hot-"+e,a=document.querySelectorAll(`[${t}]`);for(let s=0;s{e.needsReplace=!0,t.forEach(e=>{delete AFRAME.components[e];const t=AFRAME.scenes[0].querySelectorAll(`[${e}]`);for(let a=0;a{delete AFRAME.shaders[e];const t=AFRAME.scenes[0].querySelectorAll("[material]");for(let a=0;a{delete AFRAME.systems[e],delete AFRAME.scenes[0].systems[e]})}),e.hot.data&&e.hot.data.needsReplace){t.forEach(e=>{const t="data-__hot-"+e,a=document.querySelectorAll(`[${t}]`);for(let s=0;s{this.el.object3D.visible=!1,setTimeout(()=>{this.el.components.layout.update(),this.el.object3D.visible=!0},150)})},events:{click:function(e){this.el.sceneEl.emit("menudifficultyselect",e.target.closest(".difficultyOption").dataset.difficulty,!1)}}}),window.AFRAME){const t=["menu-difficulty-select"],a=[],s=[];if(e.hot.dispose(e=>{e.needsReplace=!0,t.forEach(e=>{delete AFRAME.components[e];const t=AFRAME.scenes[0].querySelectorAll(`[${e}]`);for(let a=0;a{delete AFRAME.shaders[e];const t=AFRAME.scenes[0].querySelectorAll("[material]");for(let a=0;a{delete AFRAME.systems[e],delete AFRAME.scenes[0].systems[e]})}),e.hot.data&&e.hot.data.needsReplace){t.forEach(e=>{const t="data-__hot-"+e,a=document.querySelectorAll(`[${t}]`);for(let s=0;s{this.el.sceneEl.emit("genreselect",e.target.closest(".genre").dataset.bindForKey)})}}),window.AFRAME){const t=["menu-genre"],a=[],s=[];if(e.hot.dispose(e=>{e.needsReplace=!0,t.forEach(e=>{delete AFRAME.components[e];const t=AFRAME.scenes[0].querySelectorAll(`[${e}]`);for(let a=0;a{delete AFRAME.shaders[e];const t=AFRAME.scenes[0].querySelectorAll("[material]");for(let a=0;a{delete AFRAME.systems[e],delete AFRAME.scenes[0].systems[e]})}),e.hot.data&&e.hot.data.needsReplace){t.forEach(e=>{const t="data-__hot-"+e,a=document.querySelectorAll(`[${t}]`);for(let s=0;s{e.needsReplace=!0,t.forEach(e=>{delete AFRAME.components[e];const t=AFRAME.scenes[0].querySelectorAll(`[${e}]`);for(let a=0;a{delete AFRAME.shaders[e];const t=AFRAME.scenes[0].querySelectorAll("[material]");for(let a=0;a{delete AFRAME.systems[e],delete AFRAME.scenes[0].systems[e]})}),e.hot.data&&e.hot.data.needsReplace){t.forEach(e=>{const t="data-__hot-"+e,a=document.querySelectorAll(`[${t}]`);for(let s=0;s{const t=e.target.closest("[data-mode]"),a=t.dataset.mode,s=t.dataset.name;this.el.sceneEl.emit("gamemode",a,!1),this.data.hasVR&&localStorage.setItem("gameMode",s),this.setModeOption(s)})},update:function(){this.data.hasVR?(this.setModeOption(localStorage.getItem("gameMode")||"punchvr"),this.el.sceneEl.emit("gamemode",r[localStorage.getItem("gameMode")||"punchvr"])):this.setModeOption("ride2d")},setModeOption:function(e){const t=this.el.querySelectorAll(".modeItem");document.getElementById("modeIcon").object3D.position.y=n[e];for(let a=0;a{e.needsReplace=!0,t.forEach(e=>{delete AFRAME.components[e];const t=AFRAME.scenes[0].querySelectorAll(`[${e}]`);for(let a=0;a{delete AFRAME.shaders[e];const t=AFRAME.scenes[0].querySelectorAll("[material]");for(let a=0;a{delete AFRAME.systems[e],delete AFRAME.scenes[0].systems[e]})}),e.hot.data&&e.hot.data.needsReplace){t.forEach(e=>{const t="data-__hot-"+e,a=document.querySelectorAll(`[${t}]`);for(let s=0;s{this.el.components.animation__scaledown.beginAnimation(),this.el.object3D.position.z=0},800))}}),window.AFRAME){const t=["menu-playlist-button"],a=[],s=[];if(e.hot.dispose(e=>{e.needsReplace=!0,t.forEach(e=>{delete AFRAME.components[e];const t=AFRAME.scenes[0].querySelectorAll(`[${e}]`);for(let a=0;a{delete AFRAME.shaders[e];const t=AFRAME.scenes[0].querySelectorAll("[material]");for(let a=0;a{delete AFRAME.systems[e],delete AFRAME.scenes[0].systems[e]})}),e.hot.data&&e.hot.data.needsReplace){t.forEach(e=>{const t="data-__hot-"+e,a=document.querySelectorAll(`[${t}]`);for(let s=0;s{const t=e.target.closest(".playlist");this.eventDetail.id=t.dataset.playlist,this.eventDetail.title=t.dataset.title,this.el.sceneEl.emit("playlistselect",this.eventDetail)})}}),window.AFRAME){const t=["menu-playlist"],a=[],s=[];if(e.hot.dispose(e=>{e.needsReplace=!0,t.forEach(e=>{delete AFRAME.components[e];const t=AFRAME.scenes[0].querySelectorAll(`[${e}]`);for(let a=0;a{delete AFRAME.shaders[e];const t=AFRAME.scenes[0].querySelectorAll("[material]");for(let a=0;a{delete AFRAME.systems[e],delete AFRAME.scenes[0].systems[e]})}),e.hot.data&&e.hot.data.needsReplace){t.forEach(e=>{const t="data-__hot-"+e,a=document.querySelectorAll(`[${t}]`);for(let s=0;s{e.needsReplace=!0,t.forEach(e=>{delete AFRAME.components[e];const t=AFRAME.scenes[0].querySelectorAll(`[${e}]`);for(let a=0;a{delete AFRAME.shaders[e];const t=AFRAME.scenes[0].querySelectorAll("[material]");for(let a=0;a{delete AFRAME.systems[e],delete AFRAME.scenes[0].systems[e]})}),e.hot.data&&e.hot.data.needsReplace){t.forEach(e=>{const t="data-__hot-"+e,a=document.querySelectorAll(`[${t}]`);for(let s=0;s{e.needsReplace=!0,t.forEach(e=>{delete AFRAME.components[e];const t=AFRAME.scenes[0].querySelectorAll(`[${e}]`);for(let a=0;a{delete AFRAME.shaders[e];const t=AFRAME.scenes[0].querySelectorAll("[material]");for(let a=0;a{delete AFRAME.systems[e],delete AFRAME.scenes[0].systems[e]})}),e.hot.data&&e.hot.data.needsReplace){t.forEach(e=>{const t="data-__hot-"+e,a=document.querySelectorAll(`[${t}]`);for(let s=0;s{e.needsReplace=!0,t.forEach(e=>{delete AFRAME.components[e];const t=AFRAME.scenes[0].querySelectorAll(`[${e}]`);for(let a=0;a{delete AFRAME.shaders[e];const t=AFRAME.scenes[0].querySelectorAll("[material]");for(let a=0;a{delete AFRAME.systems[e],delete AFRAME.scenes[0].systems[e]})}),e.hot.data&&e.hot.data.needsReplace){t.forEach(e=>{const t="data-__hot-"+e,a=document.querySelectorAll(`[${t}]`);for(let s=0;s{e.needsReplace=!0,t.forEach(e=>{delete AFRAME.components[e];const t=AFRAME.scenes[0].querySelectorAll(`[${e}]`);for(let a=0;a{delete AFRAME.shaders[e];const t=AFRAME.scenes[0].querySelectorAll("[material]");for(let a=0;a{delete AFRAME.systems[e],delete AFRAME.scenes[0].systems[e]})}),e.hot.data&&e.hot.data.needsReplace){t.forEach(e=>{const t="data-__hot-"+e,a=document.querySelectorAll(`[${t}]`);for(let s=0;s{e.needsReplace=!0,t.forEach(e=>{delete AFRAME.components[e];const t=AFRAME.scenes[0].querySelectorAll(`[${e}]`);for(let a=0;a{delete AFRAME.shaders[e];const t=AFRAME.scenes[0].querySelectorAll("[material]");for(let a=0;a{delete AFRAME.systems[e],delete AFRAME.scenes[0].systems[e]})}),e.hot.data&&e.hot.data.needsReplace){t.forEach(e=>{const t="data-__hot-"+e,a=document.querySelectorAll(`[${t}]`);for(let s=0;s{e.needsReplace=!0,t.forEach(e=>{delete AFRAME.components[e];const t=AFRAME.scenes[0].querySelectorAll(`[${e}]`);for(let a=0;a{delete AFRAME.shaders[e];const t=AFRAME.scenes[0].querySelectorAll("[material]");for(let a=0;a{delete AFRAME.systems[e],delete AFRAME.scenes[0].systems[e]})}),e.hot.data&&e.hot.data.needsReplace){t.forEach(e=>{const t="data-__hot-"+e,a=document.querySelectorAll(`[${t}]`);for(let s=0;s{27===e.keyCode&&this.pauseGame()}),this.el.sceneEl.addEventListener("controllerconnected",e=>{"vive-controls"===e.detail.name?this.el.addEventListener("menudown",this.pauseGame):(this.el.addEventListener("thumbstickdown",this.pauseGame),this.el.addEventListener("trackpaddown",this.pauseGame))}),document.addEventListener("visibilitychange",()=>{"hidden"===document.visibilityState&&this.pauseGame()})},pauseGame:function(){this.data.enabled&&this.el.sceneEl.emit("pausegame",null,!1)}}),window.AFRAME){const t=["pauser"],a=[],s=[];if(e.hot.dispose(e=>{e.needsReplace=!0,t.forEach(e=>{delete AFRAME.components[e];const t=AFRAME.scenes[0].querySelectorAll(`[${e}]`);for(let a=0;a{delete AFRAME.shaders[e];const t=AFRAME.scenes[0].querySelectorAll("[material]");for(let a=0;a{delete AFRAME.systems[e],delete AFRAME.scenes[0].systems[e]})}),e.hot.data&&e.hot.data.needsReplace){t.forEach(e=>{const t="data-__hot-"+e,a=document.querySelectorAll(`[${t}]`);for(let s=0;s{this.data.enabled&&this.system.playSound(this.src,this.data.volume)})},update:function(){this.src=this.data.sound,this.data.sound.startsWith("#")&&(this.src=document.querySelector(this.data.sound).getAttribute("src"))}}),window.AFRAME){const t=["play-sound"],a=[],s=["play-sound"];if(e.hot.dispose(e=>{e.needsReplace=!0,t.forEach(e=>{delete AFRAME.components[e];const t=AFRAME.scenes[0].querySelectorAll(`[${e}]`);for(let a=0;a{delete AFRAME.shaders[e];const t=AFRAME.scenes[0].querySelectorAll("[material]");for(let a=0;a{delete AFRAME.systems[e],delete AFRAME.scenes[0].systems[e]})}),e.hot.data&&e.hot.data.needsReplace){t.forEach(e=>{const t="data-__hot-"+e,a=document.querySelectorAll(`[${t}]`);for(let s=0;s3&&e.shift(),e.push(this.el.object3D.position.y),this.height=function(e){e.sort(s);const t=e.length/2;return t%1?e[t-.5]:(e[t-1]+e[t])/2}(e);const t=(a=this.height,n=1.6,r=2.2,Math.min(Math.max(a,n),r));var a,n,r,o,i;this.beatOffset=(i=0)+(.2-i)*(t-(o=1.6))/(2.2-o)}}),window.AFRAME){const t=["player-height"],a=[],s=[];if(e.hot.dispose(e=>{e.needsReplace=!0,t.forEach(e=>{delete AFRAME.components[e];const t=AFRAME.scenes[0].querySelectorAll(`[${e}]`);for(let a=0;a{delete AFRAME.shaders[e];const t=AFRAME.scenes[0].querySelectorAll("[material]");for(let a=0;a{delete AFRAME.systems[e],delete AFRAME.scenes[0].systems[e]})}),e.hot.data&&e.hot.data.needsReplace){t.forEach(e=>{const t="data-__hot-"+e,a=document.querySelectorAll(`[${t}]`);for(let s=0;sthis.curveFollowRig.object3D.position.z+10)this.returnToPool();else for(let e=0;e{e.needsReplace=!0,t.forEach(e=>{delete AFRAME.components[e];const t=AFRAME.scenes[0].querySelectorAll(`[${e}]`);for(let a=0;a{delete AFRAME.shaders[e];const t=AFRAME.scenes[0].querySelectorAll("[material]");for(let a=0;a{delete AFRAME.systems[e],delete AFRAME.scenes[0].systems[e]})}),e.hot.data&&e.hot.data.needsReplace){t.forEach(e=>{const t="data-__hot-"+e,a=document.querySelectorAll(`[${t}]`);for(let s=0;s{e.needsReplace=!0,t.forEach(e=>{delete AFRAME.components[e];const t=AFRAME.scenes[0].querySelectorAll(`[${e}]`);for(let a=0;a{delete AFRAME.shaders[e];const t=AFRAME.scenes[0].querySelectorAll("[material]");for(let a=0;a{delete AFRAME.systems[e],delete AFRAME.scenes[0].systems[e]})}),e.hot.data&&e.hot.data.needsReplace){t.forEach(e=>{const t="data-__hot-"+e,a=document.querySelectorAll(`[${t}]`);for(let s=0;s{e.needsReplace=!0,t.forEach(e=>{delete AFRAME.components[e];const t=AFRAME.scenes[0].querySelectorAll(`[${e}]`);for(let a=0;a{delete AFRAME.shaders[e];const t=AFRAME.scenes[0].querySelectorAll("[material]");for(let a=0;a{delete AFRAME.systems[e],delete AFRAME.scenes[0].systems[e]})}),e.hot.data&&e.hot.data.needsReplace){t.forEach(e=>{const t="data-__hot-"+e,a=document.querySelectorAll(`[${t}]`);for(let s=0;s{e.addEventListener("menudown",this.recenter),e.addEventListener("thumbstickdown",this.recenter)}),this.el.addEventListener("recenter",this.recenter)},recenter:(s=new THREE.Euler,n=new THREE.Matrix4,r=new THREE.Matrix4,o=new THREE.Matrix4,function(){const e=this.el;if(!this.data.enabled)return;const t=e.sceneEl.camera.el.object3D;n.identity(),s.set(0,-1*t.rotation.y,0),r.makeRotationFromEuler(s),o.makeTranslation(-1*t.position.x,0,-1*t.position.z),n.multiply(r).multiply(o),n.decompose(e.object3D.position,e.object3D.quaternion,e.object3D.scale),e.object3D.updateMatrixWorld(!0),e.emit("recentered",null,!1)})}),window.AFRAME){const t=["recenter"],a=[],s=[];if(e.hot.dispose(e=>{e.needsReplace=!0,t.forEach(e=>{delete AFRAME.components[e];const t=AFRAME.scenes[0].querySelectorAll(`[${e}]`);for(let a=0;a{delete AFRAME.shaders[e];const t=AFRAME.scenes[0].querySelectorAll("[material]");for(let a=0;a{delete AFRAME.systems[e],delete AFRAME.scenes[0].systems[e]})}),e.hot.data&&e.hot.data.needsReplace){t.forEach(e=>{const t="data-__hot-"+e,a=document.querySelectorAll(`[${t}]`);for(let s=0;s{e.needsReplace=!0,t.forEach(e=>{delete AFRAME.components[e];const t=AFRAME.scenes[0].querySelectorAll(`[${e}]`);for(let a=0;a{delete AFRAME.shaders[e];const t=AFRAME.scenes[0].querySelectorAll("[material]");for(let a=0;a{delete AFRAME.systems[e],delete AFRAME.scenes[0].systems[e]})}),e.hot.data&&e.hot.data.needsReplace){t.forEach(e=>{const t="data-__hot-"+e,a=document.querySelectorAll(`[${t}]`);for(let s=0;s{e.needsReplace=!0,t.forEach(e=>{delete AFRAME.components[e];const t=AFRAME.scenes[0].querySelectorAll(`[${e}]`);for(let a=0;a{delete AFRAME.shaders[e];const t=AFRAME.scenes[0].querySelectorAll("[material]");for(let a=0;a{delete AFRAME.systems[e],delete AFRAME.scenes[0].systems[e]})}),e.hot.data&&e.hot.data.needsReplace){t.forEach(e=>{const t="data-__hot-"+e,a=document.querySelectorAll(`[${t}]`);for(let s=0;s{this.draw(a,t)}}e.length!==this.lastNumResults&&this.updateAlphaMap(e.length),this.lastNumResults=e.length},draw:function(e,t){this.ctx.drawImage(e,0,t*(512/384*64),64,512/384*64),this.el.getObject3D("mesh").material.map.needsUpdate=!0},clearCanvas:function(){const e=this.canvas;this.ctx.fillStyle="#111",this.ctx.fillRect(0,0,e.width,e.height)},updateAlphaMap:function(e){const t=this.alphaCanvas,a=this.alphaCtx;a.fillStyle="#FFF",a.fillRect(0,0,t.width,t.height),a.fillStyle="#000",a.fillRect(0,e*(512/384*64),t.width,t.height-e*(512/384*64)),this.el.getObject3D("mesh").material.alphaMap.needsUpdate=!0,this.el.getObject3D("mesh").material.needsUpdate=!0}}),window.AFRAME){const t=["search-thumbnail-atlas"],a=[],s=[];if(e.hot.dispose(e=>{e.needsReplace=!0,t.forEach(e=>{delete AFRAME.components[e];const t=AFRAME.scenes[0].querySelectorAll(`[${e}]`);for(let a=0;a{delete AFRAME.shaders[e];const t=AFRAME.scenes[0].querySelectorAll("[material]");for(let a=0;a{delete AFRAME.systems[e],delete AFRAME.scenes[0].systems[e]})}),e.hot.data&&e.hot.data.needsReplace){t.forEach(e=>{const t="data-__hot-"+e,a=document.querySelectorAll(`[${t}]`);for(let s=0;s0;t--){const a=Math.floor(Math.random()*(t+1));[e[t],e[a]]=[e[a],e[t]]}}(this.popularHits),this.queryObject={hitsPerPage:0,query:""},this.el.sceneEl.addEventListener("searchclear",()=>{this.search("")})},update:function(e){this.popularHits&&(this.search(this.data.query),e.query&&!this.data.query&&(this.keyboardEl.components["super-keyboard"].data.value="",this.keyboardEl.components["super-keyboard"].updateTextInput("")),this.debouncedSearch=s(this.search.bind(this),1e3))},play:function(){this.el.sceneEl.emit("searchresults",this.eventDetail),this.search("")},events:{superkeyboardchange:function(e){e.target===this.el&&this.debouncedSearch(e.detail.value)}},search:function(e){if(!e&&"All"===this.data.difficultyFilter&&!this.data.genre&&!this.data.playlist&&this.popularHits)return this.eventDetail.results=this.popularHits,this.eventDetail.query="",void this.el.sceneEl.emit("searchresults",this.eventDetail);if(this.eventDetail.query=e,this.queryObject.query=e,this.queryObject.hitsPerPage=e?30:150,"favorites"===this.data.playlist)return this.eventDetail.results=JSON.parse(localStorage.getItem("favorites-v2")),void this.el.sceneEl.emit("searchresults",this.eventDetail);let t="https://beatsaver.com/api/search/text/CURRENT_PAGE_INDEX?sortOrder=Rating&automapper=true&q="+encodeURIComponent(e);if(this.data.playlist)t=`https://api.beatsaver.com/playlists/id/${this.data.playlist}/CURRENT_PAGE_INDEX`;else if(this.data.genre){const e={Pop:"pop","R&B":"rb",Rap:"hip-hop-rap",Rock:"rock",Soundtrack:"tv-movie-soundtrack","Video Games":"video-game-soundtrack",Electronic:"electronic","Hip Hop":"hip-hop-rap",House:"house","J-Pop":"j-pop","K-Pop":"k-pop",Meme:"comedy-meme",Alternative:"alternative",Anime:"anime",Comedy:"comedy-meme",Dubstep:"dubstep",Dance:"dance"}[this.data.genre];t="https://beatsaver.com/api/search/text/CURRENT_PAGE_INDEX?sortOrder=Rating&automapper=true&tags="+encodeURIComponent(e)}else if(e&&e.length<3)return;fetch(t.replaceAll("CURRENT_PAGE_INDEX",0)).then(e=>e.json()).then(e=>{var a=(e.docs||e.maps).map(n);this.eventDetail.results=a,this.eventDetail.url=t,this.eventDetail.urlPage=0,this.el.sceneEl.emit("searchresults",this.eventDetail)})}}),AFRAME.registerComponent("search-result-list",{init:function(){new MutationObserver(e=>{for(let t=0;t{e.needsReplace=!0,t.forEach(e=>{delete AFRAME.components[e];const t=AFRAME.scenes[0].querySelectorAll(`[${e}]`);for(let a=0;a{delete AFRAME.shaders[e];const t=AFRAME.scenes[0].querySelectorAll("[material]");for(let a=0;a{delete AFRAME.systems[e],delete AFRAME.scenes[0].systems[e]})}),e.hot.data&&e.hot.data.needsReplace){t.forEach(e=>{const t="data-__hot-"+e,a=document.querySelectorAll(`[${t}]`);for(let s=0;s=t||a<0||b&&e-d>=r}function w(){var e=m();if(A(e))return S(e);i=setTimeout(w,function(e){var a=t-(e-c);return b?h(a,r-(e-d)):a}(e))}function S(e){return i=void 0,y&&s?g(e):(s=n=void 0,o)}function E(){var e=m(),a=A(e);if(s=arguments,n=this,c=e,a){if(void 0===i)return v(c);if(b)return i=setTimeout(w,t),g(c)}return void 0===i&&(i=setTimeout(w,t)),o}return t=p(t)||0,f(a)&&(l=!!a.leading,r=(b="maxWait"in a)?u(p(a.maxWait)||0,t):r,y="trailing"in a?!!a.trailing:y),E.cancel=function(){void 0!==i&&clearTimeout(i),d=0,s=c=n=i=void 0},E.flush=function(){return void 0===i?o:S(m())},E}}).call(this,a(1))},function(e,t){e.exports=[{id:"2144",name:"Shut Up and Dance - WALK THE MOON",description:"Difficulties: Expert+ (Added 11/15), Expert, Hard, Normal\r\nYouTube Preview: https://youtu.be/x9hJbTlPQUY",uploader:{id:30311,name:"bennydabeast",uniqueSet:!0,hash:"5cff0b7298cc5a672c84e98d",avatar:"https://cdn.beatsaver.com/avatar/30311.jpg",type:"SIMPLE"},metadata:{bpm:128,duration:200,songName:"Shut Up and Dance",songSubName:"WALK THE MOON",songAuthorName:"BennyDaBeast",levelAuthorName:"bennydabeast"},stats:{plays:0,downloads:47856,upvotes:15705,downvotes:243,score:.9584},uploaded:"2018-11-21T01:27:00Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"89cf8bb07afb3c59ae7b5ac00337d62261c36fb4",key:"2144",state:"Published",createdAt:"2018-11-21T01:27:00Z",sageScore:3,diffs:[{njs:10,offset:0,notes:301,bombs:4,obstacles:24,nps:1.578,length:407,characteristic:"Standard",difficulty:"Normal",events:380,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:190.781,paritySummary:{errors:64,warns:19,resets:0}},{njs:10,offset:0,notes:486,bombs:4,obstacles:24,nps:2.547,length:407,characteristic:"Standard",difficulty:"Hard",events:380,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:190.781,paritySummary:{errors:76,warns:34,resets:0}},{njs:10,offset:0,notes:620,bombs:4,obstacles:24,nps:3.246,length:407.5,characteristic:"Standard",difficulty:"Expert",events:380,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:191.016,paritySummary:{errors:88,warns:68,resets:0}},{njs:12,offset:0,notes:894,bombs:0,obstacles:0,nps:4.68,length:407.5,characteristic:"Standard",difficulty:"ExpertPlus",events:380,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:191.016,paritySummary:{errors:99,warns:120,resets:0}}],downloadURL:"https://cdn.beatsaver.com/89cf8bb07afb3c59ae7b5ac00337d62261c36fb4.zip",coverURL:"https://cdn.beatsaver.com/89cf8bb07afb3c59ae7b5ac00337d62261c36fb4.jpg",previewURL:"https://cdn.beatsaver.com/89cf8bb07afb3c59ae7b5ac00337d62261c36fb4.mp3"}],createdAt:"2018-11-21T01:27:00Z",updatedAt:"2018-11-21T01:27:00Z",lastPublishedAt:"2018-11-21T01:27:00Z"},{id:"66e6",name:"League of Legends - Legends never die (ft. Against The Current)",description:"A special request from Prima1URGE",uploader:{id:4285107,name:"kikaeaeon",uniqueSet:!0,hash:"5cff0b7498cc5a672c85109b",avatar:"https://cdn.beatsaver.com/avatar/103715469822816256.png",type:"DISCORD"},metadata:{bpm:140,duration:236,songName:"Legends Never Die",songSubName:"",songAuthorName:"League of Legends & Against The Current",levelAuthorName:"KikaeAeon"},stats:{plays:0,downloads:30647,upvotes:10346,downvotes:160,score:.9549},uploaded:"2019-09-30T10:19:45.606Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"732bd4072b89d4b3bf0e63db812a7ffc3096e837",key:"66e6",state:"Published",createdAt:"2019-09-30T10:19:45.606Z",sageScore:6,diffs:[{njs:12,offset:0,notes:705,bombs:0,obstacles:10,nps:3.041,length:541,characteristic:"Standard",difficulty:"Expert",events:1693,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:231.857,paritySummary:{errors:4,warns:2,resets:0}},{njs:16,offset:0,notes:876,bombs:0,obstacles:10,nps:3.778,length:541,characteristic:"Standard",difficulty:"ExpertPlus",events:1693,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:231.857,paritySummary:{errors:3,warns:2,resets:0}}],downloadURL:"https://cdn.beatsaver.com/732bd4072b89d4b3bf0e63db812a7ffc3096e837.zip",coverURL:"https://cdn.beatsaver.com/732bd4072b89d4b3bf0e63db812a7ffc3096e837.jpg",previewURL:"https://cdn.beatsaver.com/732bd4072b89d4b3bf0e63db812a7ffc3096e837.mp3"}],createdAt:"2019-09-30T10:19:45.606Z",updatedAt:"2019-09-30T10:19:45.606Z",lastPublishedAt:"2019-09-30T10:19:45.606Z"},{id:"570",name:"Mr. Blue Sky | Electric Light Orchestra",description:"Channel your inner Baby Groot. Normal, Hard, Expert\r\nSpecial thanks to BennydaBeast for his help on this track!",uploader:{id:41378,name:"greatyazer",uniqueSet:!0,hash:"5cff0b7298cc5a672c84ea71",avatar:"https://www.gravatar.com/avatar/5cff0b7298cc5a672c84ea71?d=retro",type:"SIMPLE"},metadata:{bpm:174,duration:222,songName:"Mr. Blue Sky",songSubName:"Electric Light Orchestra",songAuthorName:"GreatYazer",levelAuthorName:"greatyazer"},stats:{plays:0,downloads:53449,upvotes:29661,downvotes:731,score:.9547},uploaded:"2018-06-16T16:53:34Z",automapper:!1,ranked:!0,qualified:!1,versions:[{hash:"236173d5ba7dc379d480b9cb5fb6b4fa5abe77da",key:"570",state:"Published",createdAt:"2018-06-16T16:53:34Z",sageScore:5,diffs:[{njs:10,offset:0,notes:462,bombs:0,obstacles:25,nps:2.228,length:601.313,characteristic:"Standard",difficulty:"Normal",events:816,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:207.349,paritySummary:{errors:132,warns:16,resets:0},stars:1.46},{njs:10,offset:0,notes:639,bombs:0,obstacles:40,nps:3.082,length:601.313,characteristic:"Standard",difficulty:"Hard",events:816,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:207.349,paritySummary:{errors:109,warns:27,resets:0}},{njs:10,offset:0,notes:825,bombs:0,obstacles:40,nps:3.979,length:601.313,characteristic:"Standard",difficulty:"Expert",events:816,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:207.349,paritySummary:{errors:119,warns:57,resets:0}}],downloadURL:"https://cdn.beatsaver.com/236173d5ba7dc379d480b9cb5fb6b4fa5abe77da.zip",coverURL:"https://cdn.beatsaver.com/236173d5ba7dc379d480b9cb5fb6b4fa5abe77da.jpg",previewURL:"https://cdn.beatsaver.com/236173d5ba7dc379d480b9cb5fb6b4fa5abe77da.mp3"}],createdAt:"2018-06-16T16:53:34Z",updatedAt:"2018-06-16T16:53:34Z",lastPublishedAt:"2018-06-16T16:53:34Z"},{id:"3cf5",name:"Caramelldansen",description:"Preview: https://youtu.be/V5p0HOzunY0\n\n\nTwitter: https://twitter.com/Dack731",uploader:{id:4285250,name:"dack",uniqueSet:!0,hash:"5cff0b7598cc5a672c852c6f",avatar:"https://cdn.beatsaver.com/avatar/297344689798119424.png",type:"DISCORD"},metadata:{bpm:165,duration:178,songName:"Caramelldansen (Speedcake Remix)",songSubName:"Caramell",songAuthorName:"Dack",levelAuthorName:"Dack"},stats:{plays:0,downloads:30551,upvotes:19321,downvotes:422,score:.9543},uploaded:"2019-03-09T22:54:54Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"cf5e32d6b7f30095f7198da5894139c92336cad7",key:"3cf5",state:"Published",createdAt:"2019-03-09T22:54:54Z",sageScore:4,diffs:[{njs:14,offset:0,notes:722,bombs:52,obstacles:28,nps:4.254,length:466.75,characteristic:"Standard",difficulty:"Expert",events:597,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:169.727,paritySummary:{errors:37,warns:23,resets:0}}],downloadURL:"https://cdn.beatsaver.com/cf5e32d6b7f30095f7198da5894139c92336cad7.zip",coverURL:"https://cdn.beatsaver.com/cf5e32d6b7f30095f7198da5894139c92336cad7.jpg",previewURL:"https://cdn.beatsaver.com/cf5e32d6b7f30095f7198da5894139c92336cad7.mp3"}],createdAt:"2019-03-09T22:54:54Z",updatedAt:"2019-03-09T22:54:54Z",lastPublishedAt:"2019-03-09T22:54:54Z"},{id:"133b",name:"Daddy - PSY",description:"Insanely fun dance map! Enjoy!\nSee the map in action (Expert): https://www.youtube.com/watch?v=7jOIdfo0j4Q\n\nThank you to my playtesters:\nDuoVR (https://www.twitch.tv/duovr)\nSourgurl (https://www.twitch.tv/sourgurl)\nRexxxzi (https://www.twitch.tv/rexxxzi)\nAshleyriott (https://www.twitch.tv/ashleyriott)",uploader:{id:38202,name:"fafurion",uniqueSet:!1,hash:"5cff0b7398cc5a672c84f945",avatar:"https://www.gravatar.com/avatar/5cff0b7398cc5a672c84f945?d=retro",type:"SIMPLE"},metadata:{bpm:132,duration:232,songName:"Daddy",songSubName:"PSY",songAuthorName:"Fafurion",levelAuthorName:"fafurion"},stats:{plays:0,downloads:21881,upvotes:11227,downvotes:192,score:.9542},uploaded:"2018-09-02T23:43:45Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"dc489921185f92dfecb9cb07b84fc556123bd134",key:"133b",state:"Published",createdAt:"2018-09-02T23:43:45Z",sageScore:5,diffs:[{njs:10,offset:0,notes:671,bombs:0,obstacles:16,nps:3.012,length:490.125,characteristic:"Standard",difficulty:"Hard",events:1586,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:222.784,paritySummary:{errors:38,warns:39,resets:0}},{njs:10,offset:0,notes:831,bombs:0,obstacles:16,nps:3.73,length:490.125,characteristic:"Standard",difficulty:"Expert",events:1587,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:222.784,paritySummary:{errors:44,warns:40,resets:0}}],downloadURL:"https://cdn.beatsaver.com/dc489921185f92dfecb9cb07b84fc556123bd134.zip",coverURL:"https://cdn.beatsaver.com/dc489921185f92dfecb9cb07b84fc556123bd134.jpg",previewURL:"https://cdn.beatsaver.com/dc489921185f92dfecb9cb07b84fc556123bd134.mp3"}],createdAt:"2018-09-02T23:43:45Z",updatedAt:"2018-09-02T23:43:45Z",lastPublishedAt:"2018-09-02T23:43:45Z"},{id:"121f",name:"Skillet - Feel Invincible",description:"Expert / Hard\r\nhttps://www.youtube.com/watch?v=nq-Qul4XxbE",uploader:{id:12996,name:"rustic",uniqueSet:!0,hash:"5cff0b7298cc5a672c84e8c4",avatar:"https://www.gravatar.com/avatar/5cff0b7298cc5a672c84e8c4?d=retro",type:"SIMPLE"},metadata:{bpm:126,duration:227,songName:"Feel Invincible",songSubName:"Skillet",songAuthorName:"Rustic",levelAuthorName:"rustic"},stats:{plays:0,downloads:24093,upvotes:9596,downvotes:150,score:.9541},uploaded:"2018-08-27T16:47:05Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"2e9ab6e1fb8055649e241cade98b018926cc93a8",key:"121f",state:"Published",createdAt:"2018-08-27T16:47:05Z",sageScore:6,diffs:[{njs:10,offset:0,notes:620,bombs:0,obstacles:10,nps:2.764,length:471,characteristic:"Standard",difficulty:"Hard",events:1654,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:224.286,paritySummary:{errors:15,warns:58,resets:0}},{njs:12,offset:0,notes:738,bombs:0,obstacles:11,nps:3.29,length:471,characteristic:"Standard",difficulty:"Expert",events:1654,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:224.286,paritySummary:{errors:21,warns:72,resets:0}}],downloadURL:"https://cdn.beatsaver.com/2e9ab6e1fb8055649e241cade98b018926cc93a8.zip",coverURL:"https://cdn.beatsaver.com/2e9ab6e1fb8055649e241cade98b018926cc93a8.jpg",previewURL:"https://cdn.beatsaver.com/2e9ab6e1fb8055649e241cade98b018926cc93a8.mp3"}],createdAt:"2018-08-27T16:47:05Z",updatedAt:"2018-08-27T16:47:05Z",lastPublishedAt:"2018-08-27T16:47:05Z"},{id:"4e6f",name:"Kero Kero Bonito - Flamingo",description:"edited: NJS was a tad slow my b\r\nfuramingo \r\noh oh ooh oh\r\nthis needed to be remapped\r\n \r\nPlease check out Kero Kero Bonito and the rest of their songs\r\nI'll be mappin more of em soon\r\n\r\nBPM 178\r\nFlamingo (Expert)\r\nShrimp (Hard)\r\n\r\nhave fun \r\n\r\ngimme feedback on Discord\r\nETAN#8341",uploader:{id:4235140,name:"etan",uniqueSet:!0,hash:"5cff0b7798cc5a672c855775",avatar:"https://cdn.beatsaver.com/avatar/136373107559497728.png",type:"DISCORD"},metadata:{bpm:178,duration:197,songName:"Flamingo",songSubName:"Kero Kero Bonito",songAuthorName:"ETAN",levelAuthorName:"ETAN"},stats:{plays:0,downloads:22969,upvotes:10417,downvotes:173,score:.954},uploaded:"2019-05-22T00:46:47Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"585ee25e654ebf5db5aa0ec02c3bcecbaccf3e0b",key:"4e6f",state:"Published",createdAt:"2019-05-22T00:46:47Z",sageScore:5,diffs:[{njs:13,offset:0,notes:519,bombs:8,obstacles:86,nps:2.692,length:572,characteristic:"Standard",difficulty:"Hard",events:2271,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:192.809,paritySummary:{errors:43,warns:43,resets:2}},{njs:16,offset:0,notes:679,bombs:10,obstacles:86,nps:3.522,length:572,characteristic:"Standard",difficulty:"Expert",events:2271,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:192.809,paritySummary:{errors:35,warns:24,resets:4}}],downloadURL:"https://cdn.beatsaver.com/585ee25e654ebf5db5aa0ec02c3bcecbaccf3e0b.zip",coverURL:"https://cdn.beatsaver.com/585ee25e654ebf5db5aa0ec02c3bcecbaccf3e0b.jpg",previewURL:"https://cdn.beatsaver.com/585ee25e654ebf5db5aa0ec02c3bcecbaccf3e0b.mp3"}],createdAt:"2019-05-22T00:46:47Z",updatedAt:"2019-05-22T00:46:47Z",lastPublishedAt:"2019-05-22T00:46:47Z"},{id:"1fef",name:"Imagine Dragons - Believer (100k ver.) | 100k Contest",description:"This is one of the 22 maps that were mapped for the 100k Contest where you can win over $7,000 in prizes. Go to https://bsaber.com/100k-contest/ to register!",uploader:{id:12996,name:"rustic",uniqueSet:!0,hash:"5cff0b7298cc5a672c84e8c4",avatar:"https://www.gravatar.com/avatar/5cff0b7298cc5a672c84e8c4?d=retro",type:"SIMPLE"},metadata:{bpm:125,duration:205,songName:"Believer (100k ver.)",songSubName:"Imagine Dragons",songAuthorName:"Rustic",levelAuthorName:"rustic"},stats:{plays:0,downloads:39471,upvotes:16897,downvotes:378,score:.9528},uploaded:"2018-11-12T17:53:58Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"9a7a5beadfdd1c7c0f137ecba6e5f6ff377eb390",key:"1fef",state:"Published",createdAt:"2018-11-12T17:53:58Z",sageScore:6,diffs:[{njs:10,offset:0,notes:216,bombs:0,obstacles:0,nps:1.09,length:413,characteristic:"Standard",difficulty:"Easy",events:3418,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:198.24,paritySummary:{errors:42,warns:14,resets:0}},{njs:10,offset:0,notes:388,bombs:0,obstacles:8,nps:1.957,length:413,characteristic:"Standard",difficulty:"Normal",events:3418,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:198.24,paritySummary:{errors:18,warns:21,resets:0}},{njs:11,offset:0,notes:514,bombs:0,obstacles:10,nps:2.593,length:413,characteristic:"Standard",difficulty:"Hard",events:3418,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:198.24,paritySummary:{errors:57,warns:59,resets:0}},{njs:12,offset:0,notes:560,bombs:0,obstacles:12,nps:2.825,length:413,characteristic:"Standard",difficulty:"Expert",events:3430,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:198.24,paritySummary:{errors:102,warns:70,resets:0}}],downloadURL:"https://cdn.beatsaver.com/9a7a5beadfdd1c7c0f137ecba6e5f6ff377eb390.zip",coverURL:"https://cdn.beatsaver.com/9a7a5beadfdd1c7c0f137ecba6e5f6ff377eb390.jpg",previewURL:"https://cdn.beatsaver.com/9a7a5beadfdd1c7c0f137ecba6e5f6ff377eb390.mp3"}],createdAt:"2018-11-12T17:53:58Z",updatedAt:"2018-11-12T17:53:58Z",lastPublishedAt:"2018-11-12T17:53:58Z"},{id:"4c6",name:"Muse - Uprising",description:"Expert / Hard\r\nhttps://youtu.be/WpFUt3UNp7c",uploader:{id:12996,name:"rustic",uniqueSet:!0,hash:"5cff0b7298cc5a672c84e8c4",avatar:"https://www.gravatar.com/avatar/5cff0b7298cc5a672c84e8c4?d=retro",type:"SIMPLE"},metadata:{bpm:128,duration:251,songName:"Uprising",songSubName:"Muse",songAuthorName:"Rustic",levelAuthorName:"rustic"},stats:{plays:0,downloads:31460,upvotes:12140,downvotes:243,score:.9522},uploaded:"2018-06-11T21:47:41Z",automapper:!1,ranked:!0,qualified:!1,versions:[{hash:"00e5671e594a6fe621c3605fcc5a0e4466ba6478",key:"4c6",state:"Published",createdAt:"2018-06-11T21:47:41Z",sageScore:6,diffs:[{njs:10,offset:0,notes:633,bombs:0,obstacles:13,nps:2.599,length:519.625,characteristic:"Standard",difficulty:"Hard",events:1975,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:243.574,paritySummary:{errors:122,warns:57,resets:0},stars:1.45},{njs:12,offset:0,notes:880,bombs:0,obstacles:19,nps:3.613,length:519.625,characteristic:"Standard",difficulty:"Expert",events:1975,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:243.574,paritySummary:{errors:104,warns:75,resets:0},stars:2.19}],downloadURL:"https://cdn.beatsaver.com/00e5671e594a6fe621c3605fcc5a0e4466ba6478.zip",coverURL:"https://cdn.beatsaver.com/00e5671e594a6fe621c3605fcc5a0e4466ba6478.jpg",previewURL:"https://cdn.beatsaver.com/00e5671e594a6fe621c3605fcc5a0e4466ba6478.mp3"}],createdAt:"2018-06-11T21:47:41Z",updatedAt:"2018-06-11T21:47:41Z",lastPublishedAt:"2018-06-11T21:47:41Z"},{id:"da60",name:"[Extra Sensory] Dirty Androids - Midnight Lady",description:'Enjoy the ride.\n\nMassive thanks to Nyri0 and Checkthepan for helping with scripts and some math!!\n\n\nThis map was released as a part of the "Extra Sensory" event.\n\nVideo showcase thingy: https://youtu.be/pE_s9bvntA0 (watch tougeVR\'s instead tho)',uploader:{id:4235136,name:"reaxt",uniqueSet:!0,hash:"5cff0b7298cc5a672c84e8ab",avatar:"https://cdn.beatsaver.com/avatar/163052863038291970.png",type:"DISCORD"},metadata:{bpm:128,duration:127,songName:"Midnight Lady",songSubName:"",songAuthorName:"Dirty Androids",levelAuthorName:"Reaxt"},stats:{plays:0,downloads:17800,upvotes:6632,downvotes:93,score:.9519},uploaded:"2020-08-20T16:48:21.705Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"ee501d7348223470c16ca88eac4a946e41cd11a9",key:"da60",state:"Published",createdAt:"2020-08-20T16:48:21.705Z",sageScore:2,diffs:[{njs:18,offset:0,notes:748,bombs:0,obstacles:4878,nps:6.233,length:256,characteristic:"Standard",difficulty:"ExpertPlus",events:767,chroma:!0,me:!1,ne:!0,cinema:!1,seconds:120,paritySummary:{errors:7,warns:0,resets:0}}],downloadURL:"https://cdn.beatsaver.com/ee501d7348223470c16ca88eac4a946e41cd11a9.zip",coverURL:"https://cdn.beatsaver.com/ee501d7348223470c16ca88eac4a946e41cd11a9.jpg",previewURL:"https://cdn.beatsaver.com/ee501d7348223470c16ca88eac4a946e41cd11a9.mp3"}],createdAt:"2020-08-20T16:48:21.705Z",updatedAt:"2020-08-20T16:48:21.705Z",lastPublishedAt:"2020-08-20T16:48:21.705Z"},{id:"2087",name:"Panic at the disco - The Greatest Show reimagined | (100K Contest)",description:"Here is a bonus map for the 100K contest! Playing any difficulty will give you 4x the normal chance of winning up to $12000 in prizes!!\r\nBig thank you to the beat saber mapping group for helping me out with a few things, you guys are great!\r\n\r\nTo enter, you need to go to the following website and download the mod installer: https://bsaber.com/100k-contest/\r\n\r\nThe competition is now over, but the maps remain!\r\nVideo Preview: https://www.youtube.com/watch?v=E929e6puEQA",uploader:{id:4785,name:"stumi",uniqueSet:!1,hash:"5cff0b7398cc5a672c84f720",avatar:"https://www.gravatar.com/avatar/5cff0b7398cc5a672c84f720?d=retro",type:"SIMPLE"},metadata:{bpm:77,duration:174,songName:"The greatest show reimagined",songSubName:"Panic at the disco",songAuthorName:"Stumi",levelAuthorName:"stumi"},stats:{plays:0,downloads:26198,upvotes:9073,downvotes:160,score:.9518},uploaded:"2018-11-16T17:57:55Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"afc2a905079d1fcdc9d82fa50e83c842d4d42118",key:"2087",state:"Published",createdAt:"2018-11-16T17:57:55Z",sageScore:5,diffs:[{njs:10,offset:0,notes:252,bombs:0,obstacles:6,nps:1.542,length:209.75,characteristic:"Standard",difficulty:"Easy",events:1328,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:163.442,paritySummary:{errors:35,warns:26,resets:0}},{njs:10,offset:0,notes:342,bombs:0,obstacles:5,nps:2.092,length:209.75,characteristic:"Standard",difficulty:"Normal",events:1327,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:163.442,paritySummary:{errors:37,warns:36,resets:0}},{njs:11,offset:0,notes:472,bombs:0,obstacles:5,nps:2.888,length:209.75,characteristic:"Standard",difficulty:"Hard",events:1326,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:163.442,paritySummary:{errors:37,warns:41,resets:0}},{njs:12,offset:0,notes:565,bombs:0,obstacles:5,nps:3.457,length:209.75,characteristic:"Standard",difficulty:"Expert",events:1329,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:163.442,paritySummary:{errors:39,warns:30,resets:0}}],downloadURL:"https://cdn.beatsaver.com/afc2a905079d1fcdc9d82fa50e83c842d4d42118.zip",coverURL:"https://cdn.beatsaver.com/afc2a905079d1fcdc9d82fa50e83c842d4d42118.jpg",previewURL:"https://cdn.beatsaver.com/afc2a905079d1fcdc9d82fa50e83c842d4d42118.mp3"}],createdAt:"2018-11-16T17:57:55Z",updatedAt:"2018-11-16T17:57:55Z",lastPublishedAt:"2018-11-16T17:57:55Z"},{id:"747",name:"Technologic - Daft Punk (Update)",description:"Expert / Hard / Normal",uploader:{id:44595,name:"awfulnaut",uniqueSet:!0,hash:"5cff0b7398cc5a672c84edac",avatar:"https://www.gravatar.com/avatar/5cff0b7398cc5a672c84edac?d=retro",type:"SIMPLE"},metadata:{bpm:127,duration:169,songName:"Technologic",songSubName:"Daft Punk",songAuthorName:"Awfulnaut",levelAuthorName:"awfulnaut"},stats:{plays:0,downloads:26292,upvotes:10662,downvotes:205,score:.9518},uploaded:"2018-06-30T18:30:38Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"831247d7d02e948e5d03622748bb130b5057023d",key:"747",state:"Published",createdAt:"2018-06-30T18:30:38Z",sageScore:6,diffs:[{njs:10,offset:0,notes:375,bombs:334,obstacles:9,nps:2.276,length:350.021,characteristic:"Standard",difficulty:"Normal",events:1321,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:165.364,paritySummary:{errors:62,warns:48,resets:110}},{njs:10,offset:0,notes:480,bombs:306,obstacles:3,nps:2.913,length:350,characteristic:"Standard",difficulty:"Hard",events:1321,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:165.354,paritySummary:{errors:31,warns:59,resets:96}},{njs:10,offset:0,notes:662,bombs:138,obstacles:3,nps:4.018,length:350,characteristic:"Standard",difficulty:"Expert",events:1327,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:165.354,paritySummary:{errors:42,warns:68,resets:43}}],downloadURL:"https://cdn.beatsaver.com/831247d7d02e948e5d03622748bb130b5057023d.zip",coverURL:"https://cdn.beatsaver.com/831247d7d02e948e5d03622748bb130b5057023d.jpg",previewURL:"https://cdn.beatsaver.com/831247d7d02e948e5d03622748bb130b5057023d.mp3"}],createdAt:"2018-06-30T18:30:38Z",updatedAt:"2018-06-30T18:30:38Z",lastPublishedAt:"2018-06-30T18:30:38Z"},{id:"1023",name:"I Wanna Be Like You (Sim Gretina Remix)",description:"Who doesn't love The Jungle Book? \r\nPreview: https://youtu.be/DXdo1-FlxSk",uploader:{id:4285668,name:"connorjc",uniqueSet:!0,hash:"5cff0b7398cc5a672c84fb89",avatar:"https://cdn.beatsaver.com/avatar/99724057217355776.png",type:"DISCORD"},metadata:{bpm:110,duration:172,songName:"I Wanna Be Like You (Sim Gretina Remix)",songSubName:"Jungle Book",songAuthorName:"ConnorJC",levelAuthorName:"ConnorJC"},stats:{plays:0,downloads:15215,upvotes:7020,downvotes:108,score:.9513},uploaded:"2018-08-16T13:41:07Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"638cf20187a122490b4662555e9072cd8073146b",key:"1023",state:"Published",createdAt:"2018-08-16T13:41:07Z",sageScore:4,diffs:[{njs:10,offset:0,notes:512,bombs:0,obstacles:52,nps:3.276,length:286.5,characteristic:"Standard",difficulty:"Expert",events:486,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:156.273,paritySummary:{errors:81,warns:50,resets:0}}],downloadURL:"https://cdn.beatsaver.com/638cf20187a122490b4662555e9072cd8073146b.zip",coverURL:"https://cdn.beatsaver.com/638cf20187a122490b4662555e9072cd8073146b.jpg",previewURL:"https://cdn.beatsaver.com/638cf20187a122490b4662555e9072cd8073146b.mp3"}],createdAt:"2018-08-16T13:41:07Z",updatedAt:"2018-08-16T13:41:07Z",lastPublishedAt:"2018-08-16T13:41:07Z"},{id:"18cc",name:"Du Hast by Rammstein (Kole Edit)",description:"Many has been asking, many have been waiting patiently, many have been confused as to why this hasn't been done before, but now it's here and now you can have it too; here's Du Hast by Rammstein now in Beat Saber!\r\n\r\nSong has been edited (shortened) to be tighter and not too repetitive.\r\n\r\nPreview:\r\nhttps://youtu.be/3i1mf2EGSjc\r\n\r\nBPM: 125.09\r\nDuration: 2:57\r\nEasy, Normal, Hard and Expert difficulties.\r\n\r\nEasy: 251, 0 obstacles, 0 mines\r\nNormal: 444 notes, 0 obstacles, 0 mines\r\nHard: 581 notes, 0 obstacles, 0 mines\r\nExpert: 437 notes, 0 obstacles, 0 mines\r\n\r\nThanks to VenclaireVR, Redmagi, Horseman, Saut and elliotttate for playtesting!\r\n\r\nDownload the One Saber version of this map here:\r\nhttps://beatsaver.com/browse/detail/6784-6436\r\n\r\nEnjoy!",uploader:{id:4285318,name:"kolezan",uniqueSet:!0,hash:"5cff0b7398cc5a672c84fcbb",avatar:"https://cdn.beatsaver.com/avatar/220513618763055106.png",type:"DISCORD"},metadata:{bpm:125,duration:177,songName:"Du Hast",songSubName:"Rammstein",songAuthorName:"Level by Kolezan",levelAuthorName:"Kolezan"},stats:{plays:0,downloads:19197,upvotes:9801,downvotes:188,score:.9511},uploaded:"2018-10-05T06:17:10Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"6df961680ead49e2d92de1a95b789e0ce4a026db",key:"18cc",state:"Published",createdAt:"2018-10-05T06:17:10Z",sageScore:4,diffs:[{njs:10,offset:0,notes:251,bombs:0,obstacles:0,nps:1.487,length:352,characteristic:"Standard",difficulty:"Easy",events:581,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:168.96,paritySummary:{errors:65,warns:24,resets:0}},{njs:11,offset:0,notes:444,bombs:0,obstacles:0,nps:2.63,length:352,characteristic:"Standard",difficulty:"Normal",events:581,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:168.96,paritySummary:{errors:74,warns:35,resets:0}},{njs:12,offset:0,notes:581,bombs:0,obstacles:0,nps:3.441,length:352,characteristic:"Standard",difficulty:"Hard",events:581,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:168.96,paritySummary:{errors:83,warns:44,resets:0}},{njs:12,offset:0,notes:723,bombs:0,obstacles:0,nps:4.282,length:352,characteristic:"Standard",difficulty:"Expert",events:581,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:168.96,paritySummary:{errors:57,warns:57,resets:0}}],downloadURL:"https://cdn.beatsaver.com/6df961680ead49e2d92de1a95b789e0ce4a026db.zip",coverURL:"https://cdn.beatsaver.com/6df961680ead49e2d92de1a95b789e0ce4a026db.jpg",previewURL:"https://cdn.beatsaver.com/6df961680ead49e2d92de1a95b789e0ce4a026db.mp3"}],createdAt:"2018-10-05T06:17:10Z",updatedAt:"2018-10-05T06:17:10Z",lastPublishedAt:"2018-10-05T06:17:10Z"},{id:"23c3",name:"Without Me (ILLENIUM Remix) - Halsey",description:"All 5 Difficulties\r\nBPM: 136\r\nNote Jumps Speed from E+to Easy: 14, 12, 11, 10, 10\r\n\r\nLemme know what you think!",uploader:{id:30754,name:"styngme",uniqueSet:!1,hash:"5cff0b7298cc5a672c84e9cd",avatar:"https://www.gravatar.com/avatar/5cff0b7298cc5a672c84e9cd?d=retro",type:"SIMPLE"},metadata:{bpm:136,duration:247,songName:"Without Me - ILLENIUM Remix",songSubName:"Halsey, ILLENIUM",songAuthorName:"StyngMe",levelAuthorName:"styngme"},stats:{plays:0,downloads:23662,upvotes:8757,downvotes:162,score:.9507},uploaded:"2018-12-04T15:46:54Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"a684cee0d634b9bb59eef234665fd28ef27876ac",key:"23c3",state:"Published",createdAt:"2018-12-04T15:46:54Z",sageScore:7,diffs:[{njs:10,offset:0,notes:571,bombs:0,obstacles:78,nps:2.652,length:488,characteristic:"Standard",difficulty:"Easy",events:2901,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:215.294,paritySummary:{errors:5,warns:2,resets:0}},{njs:10,offset:0,notes:747,bombs:0,obstacles:78,nps:3.47,length:488,characteristic:"Standard",difficulty:"Normal",events:2901,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:215.294,paritySummary:{errors:51,warns:40,resets:0}},{njs:11,offset:0,notes:788,bombs:0,obstacles:78,nps:3.66,length:488,characteristic:"Standard",difficulty:"Hard",events:2901,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:215.294,paritySummary:{errors:58,warns:40,resets:0}},{njs:12,offset:0,notes:850,bombs:0,obstacles:78,nps:3.948,length:488,characteristic:"Standard",difficulty:"Expert",events:2901,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:215.294,paritySummary:{errors:72,warns:69,resets:0}},{njs:14,offset:0,notes:872,bombs:0,obstacles:78,nps:4.05,length:488,characteristic:"Standard",difficulty:"ExpertPlus",events:2901,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:215.294,paritySummary:{errors:67,warns:70,resets:0}}],downloadURL:"https://cdn.beatsaver.com/a684cee0d634b9bb59eef234665fd28ef27876ac.zip",coverURL:"https://cdn.beatsaver.com/a684cee0d634b9bb59eef234665fd28ef27876ac.jpg",previewURL:"https://cdn.beatsaver.com/a684cee0d634b9bb59eef234665fd28ef27876ac.mp3"}],createdAt:"2018-12-04T15:46:54Z",updatedAt:"2018-12-04T15:46:54Z",lastPublishedAt:"2018-12-04T15:46:54Z"},{id:"38ff",name:"Ievan Polkka",description:"",uploader:{id:30164,name:"fraktar",uniqueSet:!0,hash:"5cff0b7698cc5a672c8551b0",avatar:"https://www.gravatar.com/avatar/5cff0b7698cc5a672c8551b0?d=retro",type:"SIMPLE"},metadata:{bpm:119,duration:147,songName:"Ievan Polkka",songSubName:"Hatsune Miku",songAuthorName:"Fraktar",levelAuthorName:"Fraktar"},stats:{plays:0,downloads:17204,upvotes:8751,downvotes:167,score:.9501},uploaded:"2019-02-23T15:58:08Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"72bf749f5df632cd103fccd734c9fd5cc7596caa",key:"38ff",state:"Published",createdAt:"2019-02-23T15:58:08Z",sageScore:5,diffs:[{njs:12,offset:0,notes:734,bombs:0,obstacles:16,nps:5.09,length:286,characteristic:"Standard",difficulty:"Expert",events:1360,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:144.202,paritySummary:{errors:70,warns:39,resets:0}}],downloadURL:"https://cdn.beatsaver.com/72bf749f5df632cd103fccd734c9fd5cc7596caa.zip",coverURL:"https://cdn.beatsaver.com/72bf749f5df632cd103fccd734c9fd5cc7596caa.jpg",previewURL:"https://cdn.beatsaver.com/72bf749f5df632cd103fccd734c9fd5cc7596caa.mp3"}],createdAt:"2019-02-23T15:58:08Z",updatedAt:"2019-02-23T15:58:08Z",lastPublishedAt:"2019-02-23T15:58:08Z"},{id:"8553",name:"Blinding Lights - The Weeknd",description:"This map was supposed to release last year and have a 90 degree difficulty but it got cut because life ¯\\_(ツ)_/¯ Fantastic song though.\n\nExpert Playthrough : https://youtu.be/GonnTYPmDVY",uploader:{id:13320,name:"novashaft",uniqueSet:!0,hash:"5cff0b7398cc5a672c84ee55",avatar:"https://www.gravatar.com/avatar/5cff0b7398cc5a672c84ee55?d=retro",type:"SIMPLE"},metadata:{bpm:171,duration:199,songName:"Blinding Lights",songSubName:"",songAuthorName:"The Weeknd",levelAuthorName:"NovaShaft"},stats:{plays:0,downloads:34508,upvotes:11999,downvotes:269,score:.95},uploaded:"2020-02-08T17:26:23.499Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"17d298f2bf78b453cd66474ce268ae9dac9fab46",key:"8553",state:"Published",createdAt:"2020-02-08T17:26:23.499Z",sageScore:7,diffs:[{njs:10,offset:0,notes:271,bombs:0,obstacles:15,nps:1.482,length:521,characteristic:"Standard",difficulty:"Easy",events:3071,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:182.807,paritySummary:{errors:71,warns:4,resets:0}},{njs:13,offset:1,notes:457,bombs:16,obstacles:25,nps:2.5,length:521,characteristic:"Standard",difficulty:"Hard",events:3071,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:182.807,paritySummary:{errors:6,warns:7,resets:1}},{njs:17,offset:.5,notes:594,bombs:44,obstacles:33,nps:3.249,length:521,characteristic:"Standard",difficulty:"Expert",events:3146,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:182.807,paritySummary:{errors:14,warns:13,resets:0}}],downloadURL:"https://cdn.beatsaver.com/17d298f2bf78b453cd66474ce268ae9dac9fab46.zip",coverURL:"https://cdn.beatsaver.com/17d298f2bf78b453cd66474ce268ae9dac9fab46.jpg",previewURL:"https://cdn.beatsaver.com/17d298f2bf78b453cd66474ce268ae9dac9fab46.mp3"}],createdAt:"2020-02-08T17:26:23.499Z",updatedAt:"2020-02-08T17:26:23.499Z",lastPublishedAt:"2020-02-08T17:26:23.499Z"},{id:"2e9e",name:"YoiYoi Kokon - REOL",description:"Put on your yukata; lets travel back in time and enjoy ourselves! Here's REOL's probably most popular song mapped by me, YoiYoi Kokon (宵々古今)!\r\n\r\nThe audio version of the song is that of the music video (slightly edited by me) as I love the addition of the fireworks in the last part of the song. Together with the crowd in the intro this makes it feel like you're attending a festival.\r\n\r\nExpert+ is basically Expert but with no pauses and with the melody followed instead of the shouts.\r\n\r\nPreview:\r\nhttps://youtu.be/G61m6Au2foM\r\n\r\nBPM: 150\r\nDuration: 4:16\r\nEasy, Normal, Hard, Expert and Expert+ difficulties.\r\n\r\nEasy: 332, 12 obstacles, 0 mines\r\nNormal: 471 notes, 17 obstacles, 0 mines\r\nHard: 679 notes, 17 obstacles, 0 mines\r\nExpert: 954 notes, 17 obstacles, 0 mines\r\nExpert+: 1086 notes, 1 obstacles, 0 mines\r\n\r\nThanks to Redmagi, Aithke, aggrogahu, Don and Emperor of the Internet for playtesting!\r\n\r\nEnjoy!",uploader:{id:4285318,name:"kolezan",uniqueSet:!0,hash:"5cff0b7398cc5a672c84fcbb",avatar:"https://cdn.beatsaver.com/avatar/220513618763055106.png",type:"DISCORD"},metadata:{bpm:150,duration:256,songName:"YoiYoi Kokon",songSubName:"REOL",songAuthorName:"Kolezan",levelAuthorName:"Kolezan"},stats:{plays:0,downloads:13836,upvotes:6975,downvotes:118,score:.9499},uploaded:"2019-01-18T09:22:30Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"766a222b102b6522cd5d31e82ec7adc7c5ff011e",key:"2e9e",state:"Published",createdAt:"2019-01-18T09:22:30Z",sageScore:7,diffs:[{njs:9,offset:0,notes:332,bombs:0,obstacles:12,nps:1.349,length:615.203,characteristic:"Standard",difficulty:"Easy",events:2115,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:246.081,paritySummary:{errors:48,warns:24,resets:0}},{njs:10,offset:0,notes:471,bombs:0,obstacles:17,nps:1.914,length:615.203,characteristic:"Standard",difficulty:"Normal",events:2115,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:246.081,paritySummary:{errors:67,warns:38,resets:0}},{njs:11,offset:0,notes:679,bombs:0,obstacles:17,nps:2.759,length:615.203,characteristic:"Standard",difficulty:"Hard",events:2115,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:246.081,paritySummary:{errors:79,warns:71,resets:0}},{njs:12.5,offset:0,notes:954,bombs:0,obstacles:17,nps:3.877,length:615.203,characteristic:"Standard",difficulty:"Expert",events:2115,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:246.081,paritySummary:{errors:104,warns:144,resets:0}},{njs:12.5,offset:0,notes:1086,bombs:0,obstacles:1,nps:4.413,length:615.203,characteristic:"Standard",difficulty:"ExpertPlus",events:2115,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:246.081,paritySummary:{errors:102,warns:152,resets:0}}],downloadURL:"https://cdn.beatsaver.com/766a222b102b6522cd5d31e82ec7adc7c5ff011e.zip",coverURL:"https://cdn.beatsaver.com/766a222b102b6522cd5d31e82ec7adc7c5ff011e.jpg",previewURL:"https://cdn.beatsaver.com/766a222b102b6522cd5d31e82ec7adc7c5ff011e.mp3"}],createdAt:"2019-01-18T09:22:30Z",updatedAt:"2019-01-18T09:22:30Z",lastPublishedAt:"2019-01-18T09:22:30Z"},{id:"30fd",name:"Love The Way You Lie (ft. Rihanna) - Eminem, Rihanna | Charted by StyngMe",description:"I hope you enjoy!\r\nBPM: 87\r\nDifficulties: ALL\r\nNote Jump Speed for E+ through Easy: 16, 14, 12, 12, 11",uploader:{id:30754,name:"styngme",uniqueSet:!1,hash:"5cff0b7298cc5a672c84e9cd",avatar:"https://www.gravatar.com/avatar/5cff0b7298cc5a672c84e9cd?d=retro",type:"SIMPLE"},metadata:{bpm:87,duration:265,songName:"Love The Way You Lie (ft. Rihanna)",songSubName:"Eminem, Rihanna",songAuthorName:"StyngMe",levelAuthorName:"styngme"},stats:{plays:0,downloads:24461,upvotes:7923,downvotes:147,score:.9497},uploaded:"2019-01-25T15:48:22Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"8161daf97cab8c95aea0556549b4b8cfb29a13d3",key:"30fd",state:"Published",createdAt:"2019-01-25T15:48:22Z",sageScore:7,diffs:[{njs:11,offset:0,notes:387,bombs:0,obstacles:18,nps:1.661,length:337.75,characteristic:"Standard",difficulty:"Easy",events:2082,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:232.931,paritySummary:{errors:28,warns:28,resets:0}},{njs:12,offset:0,notes:503,bombs:0,obstacles:6,nps:2.159,length:337.75,characteristic:"Standard",difficulty:"Normal",events:2082,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:232.931,paritySummary:{errors:21,warns:36,resets:0}},{njs:12,offset:0,notes:617,bombs:0,obstacles:0,nps:2.649,length:337.75,characteristic:"Standard",difficulty:"Hard",events:2082,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:232.931,paritySummary:{errors:37,warns:38,resets:0}},{njs:14,offset:0,notes:1006,bombs:0,obstacles:0,nps:4.319,length:337.75,characteristic:"Standard",difficulty:"Expert",events:2082,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:232.931,paritySummary:{errors:24,warns:55,resets:0}},{njs:16,offset:0,notes:1207,bombs:0,obstacles:0,nps:5.182,length:337.75,characteristic:"Standard",difficulty:"ExpertPlus",events:2085,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:232.931,paritySummary:{errors:39,warns:76,resets:0}}],downloadURL:"https://cdn.beatsaver.com/8161daf97cab8c95aea0556549b4b8cfb29a13d3.zip",coverURL:"https://cdn.beatsaver.com/8161daf97cab8c95aea0556549b4b8cfb29a13d3.jpg",previewURL:"https://cdn.beatsaver.com/8161daf97cab8c95aea0556549b4b8cfb29a13d3.mp3"}],createdAt:"2019-01-25T15:48:22Z",updatedAt:"2019-01-25T15:48:22Z",lastPublishedAt:"2019-01-25T15:48:22Z"},{id:"26f6",name:"IGNITE (Ranked Version) [Sword Art Online Season 2 Opening] - Aoi Eir",description:"Trying to get this version ranked! New version with changes according to the ranking criteria: Double directional notes fixed, flow improvements, removed fast dodge walls on bridge section.",uploader:{id:58338,name:"Joetastic",uniqueSet:!0,hash:"5cff0b7498cc5a672c85050e",avatar:"https://cdn.beatsaver.com/avatar/227767566402191360.png",type:"DISCORD"},metadata:{bpm:171,duration:244,songName:"IGNITE",songSubName:"Aoi Eir",songAuthorName:"Joetastic",levelAuthorName:"Joetastic"},stats:{plays:0,downloads:23842,upvotes:11061,downvotes:245,score:.9495},uploaded:"2018-12-20T01:21:47Z",automapper:!1,ranked:!0,qualified:!1,versions:[{hash:"125b07ebcc06fe9667e83fc2d6b9ae5ecbc72e8c",key:"26f6",state:"Published",createdAt:"2018-12-20T01:21:47Z",sageScore:6,diffs:[{njs:14,offset:0,notes:1093,bombs:16,obstacles:16,nps:4.594,length:678,characteristic:"Standard",difficulty:"Expert",events:1642,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:237.895,paritySummary:{errors:77,warns:79,resets:0},stars:3.21}],downloadURL:"https://cdn.beatsaver.com/125b07ebcc06fe9667e83fc2d6b9ae5ecbc72e8c.zip",coverURL:"https://cdn.beatsaver.com/125b07ebcc06fe9667e83fc2d6b9ae5ecbc72e8c.jpg",previewURL:"https://cdn.beatsaver.com/125b07ebcc06fe9667e83fc2d6b9ae5ecbc72e8c.mp3"}],createdAt:"2018-12-20T01:21:47Z",updatedAt:"2018-12-20T01:21:47Z",lastPublishedAt:"2018-12-20T01:21:47Z"},{id:"6b55",name:"ABIS & Signal & Tasha Baxter - The Wall (Buunshin Remix)",description:"https://youtu.be/xEowRTlHvuI",uploader:{id:12996,name:"rustic",uniqueSet:!0,hash:"5cff0b7298cc5a672c84e8c4",avatar:"https://www.gravatar.com/avatar/5cff0b7298cc5a672c84e8c4?d=retro",type:"SIMPLE"},metadata:{bpm:172,duration:271,songName:"The Wall",songSubName:"(Buunshin Remix)",songAuthorName:"ABIS & Signal & Tasha Baxter",levelAuthorName:"Rustic"},stats:{plays:0,downloads:8045,upvotes:4697,downvotes:61,score:.9491},uploaded:"2019-10-21T13:30:47.405Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"e855d1a7b17904322aa3ebaf3bb002421bce568a",key:"6b55",state:"Published",createdAt:"2019-10-21T13:30:47.405Z",sageScore:6,diffs:[{njs:20,offset:0,notes:449,bombs:0,obstacles:9581,nps:1.828,length:704,characteristic:"Standard",difficulty:"Hard",events:7859,chroma:!1,me:!0,ne:!1,cinema:!1,seconds:245.581,paritySummary:{errors:0,warns:0,resets:0}},{njs:20,offset:0,notes:606,bombs:0,obstacles:9589,nps:2.468,length:704,characteristic:"Standard",difficulty:"Expert",events:7808,chroma:!1,me:!0,ne:!1,cinema:!1,seconds:245.581,paritySummary:{errors:0,warns:0,resets:0}}],downloadURL:"https://cdn.beatsaver.com/e855d1a7b17904322aa3ebaf3bb002421bce568a.zip",coverURL:"https://cdn.beatsaver.com/e855d1a7b17904322aa3ebaf3bb002421bce568a.jpg",previewURL:"https://cdn.beatsaver.com/e855d1a7b17904322aa3ebaf3bb002421bce568a.mp3"}],createdAt:"2019-10-21T13:30:47.405Z",updatedAt:"2019-10-21T13:30:47.405Z",lastPublishedAt:"2019-10-21T13:30:47.405Z"},{id:"5e81",name:"Stressed Out - Twenty One Pilots",description:'"Stressed Out" is a song by American musical duo Twenty One Pilots, for their fourth studio album, Blurryface. Written by Tyler Joseph and produced by Mike Elizondo, the lyrics discuss the harsh end of adolescence and the transition to adulthood.',uploader:{id:58338,name:"Joetastic",uniqueSet:!0,hash:"5cff0b7498cc5a672c85050e",avatar:"https://cdn.beatsaver.com/avatar/227767566402191360.png",type:"DISCORD"},metadata:{bpm:170,duration:203,songName:"Stressed Out",songSubName:"",songAuthorName:"Twenty One Pilots",levelAuthorName:"Joetastic"},stats:{plays:0,downloads:18746,upvotes:6062,downvotes:98,score:.9491},uploaded:"2019-08-22T14:20:38.731Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"068a80d89857a6a2221f54e8a5d374584b2db77e",key:"5e81",state:"Published",createdAt:"2019-08-22T14:20:38.731Z",sageScore:6,diffs:[{njs:14,offset:0,notes:651,bombs:0,obstacles:42,nps:3.282,length:562,characteristic:"Standard",difficulty:"Expert",events:1670,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:198.353,paritySummary:{errors:69,warns:69,resets:0}}],downloadURL:"https://cdn.beatsaver.com/068a80d89857a6a2221f54e8a5d374584b2db77e.zip",coverURL:"https://cdn.beatsaver.com/068a80d89857a6a2221f54e8a5d374584b2db77e.jpg",previewURL:"https://cdn.beatsaver.com/068a80d89857a6a2221f54e8a5d374584b2db77e.mp3"}],createdAt:"2019-08-22T14:20:38.731Z",updatedAt:"2019-08-22T14:20:38.731Z",lastPublishedAt:"2019-08-22T14:20:38.731Z"},{id:"5552",name:"It's Tricky - Run DMC",description:"\"It's Tricky\" is the fourth and final single released from Run-DMC's third album, Raising Hell which was released early in 1987. \n\nThis is one of favorite workout songs, can't believe I haven't mapped it yet :P",uploader:{id:58338,name:"Joetastic",uniqueSet:!0,hash:"5cff0b7498cc5a672c85050e",avatar:"https://cdn.beatsaver.com/avatar/227767566402191360.png",type:"DISCORD"},metadata:{bpm:128,duration:184,songName:"It's Tricky",songSubName:"",songAuthorName:"Run DMC",levelAuthorName:"Joetastic"},stats:{plays:0,downloads:13372,upvotes:4472,downvotes:56,score:.9489},uploaded:"2019-07-02T17:23:10.798Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"9027d4274febf8722078a5f70b51da58cf433322",key:"5552",state:"Published",createdAt:"2019-07-02T17:23:10.798Z",sageScore:6,diffs:[{njs:14,offset:0,notes:721,bombs:0,obstacles:8,nps:3.998,length:384.688,characteristic:"Standard",difficulty:"Expert",events:3029,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:180.322,paritySummary:{errors:34,warns:36,resets:0}}],downloadURL:"https://cdn.beatsaver.com/9027d4274febf8722078a5f70b51da58cf433322.zip",coverURL:"https://cdn.beatsaver.com/9027d4274febf8722078a5f70b51da58cf433322.jpg",previewURL:"https://cdn.beatsaver.com/9027d4274febf8722078a5f70b51da58cf433322.mp3"}],createdAt:"2019-07-02T17:23:10.798Z",updatedAt:"2019-07-02T17:23:10.798Z",lastPublishedAt:"2019-07-02T17:23:10.798Z"},{id:"3038",name:"Moves Like Jagger - Maroon 5 ft. Christina Aguilera",description:"See it in Action: https://www.youtube.com/watch?v=buZypCnR1r8",uploader:{id:38202,name:"fafurion",uniqueSet:!1,hash:"5cff0b7398cc5a672c84f945",avatar:"https://www.gravatar.com/avatar/5cff0b7398cc5a672c84f945?d=retro",type:"SIMPLE"},metadata:{bpm:128,duration:204,songName:"Moves Like Jagger",songSubName:"Maroon 5 ft. Christina Aguilera",songAuthorName:"Fafurion",levelAuthorName:"fafurion"},stats:{plays:0,downloads:24035,upvotes:7173,downvotes:137,score:.9482},uploaded:"2019-01-23T00:01:22Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"6f5e229b8ec73c9e448c00a680548b0ce25918ee",key:"3038",state:"Published",createdAt:"2019-01-23T00:01:22Z",sageScore:5,diffs:[{njs:10,offset:0,notes:297,bombs:0,obstacles:88,nps:1.547,length:409.5,characteristic:"Standard",difficulty:"Easy",events:2966,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:191.953,paritySummary:{errors:21,warns:30,resets:0}},{njs:10,offset:0,notes:343,bombs:0,obstacles:88,nps:1.787,length:409.5,characteristic:"Standard",difficulty:"Normal",events:2966,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:191.953,paritySummary:{errors:29,warns:33,resets:0}},{njs:12,offset:0,notes:524,bombs:0,obstacles:125,nps:2.73,length:409.5,characteristic:"Standard",difficulty:"Hard",events:2966,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:191.953,paritySummary:{errors:40,warns:62,resets:0}},{njs:12,offset:0,notes:695,bombs:0,obstacles:100,nps:3.621,length:409.5,characteristic:"Standard",difficulty:"Expert",events:2966,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:191.953,paritySummary:{errors:81,warns:108,resets:0}}],downloadURL:"https://cdn.beatsaver.com/6f5e229b8ec73c9e448c00a680548b0ce25918ee.zip",coverURL:"https://cdn.beatsaver.com/6f5e229b8ec73c9e448c00a680548b0ce25918ee.jpg",previewURL:"https://cdn.beatsaver.com/6f5e229b8ec73c9e448c00a680548b0ce25918ee.mp3"}],createdAt:"2019-01-23T00:01:22Z",updatedAt:"2019-01-23T00:01:22Z",lastPublishedAt:"2019-01-23T00:01:22Z"},{id:"bd3",name:"New Rules - Dua Lipa",description:"Difficulties: Expert+, Expert, Hard, Normal\r\nYouTube Preview: https://youtu.be/Ohq6cA_1NAE\r\nLighting by Heisenberg: https://beatsaver.com/index.php/browse/byuser/1089",uploader:{id:30311,name:"bennydabeast",uniqueSet:!0,hash:"5cff0b7298cc5a672c84e98d",avatar:"https://cdn.beatsaver.com/avatar/30311.jpg",type:"SIMPLE"},metadata:{bpm:116,duration:211,songName:"New Rules",songSubName:"Dua Lipa",songAuthorName:"BennyDaBeast (Lighting: Heisenberg)",levelAuthorName:"bennydabeast"},stats:{plays:0,downloads:18879,upvotes:7509,downvotes:149,score:.948},uploaded:"2018-07-25T20:53:52Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"674b1b540ac5851c92c8cde7dd456698f5a733c4",key:"bd3",state:"Published",createdAt:"2018-07-25T20:53:52Z",sageScore:4,diffs:[{njs:10,offset:0,notes:423,bombs:0,obstacles:7,nps:2.055,length:398,characteristic:"Standard",difficulty:"Normal",events:2753,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:205.862,paritySummary:{errors:81,warns:58,resets:0}},{njs:10,offset:0,notes:507,bombs:0,obstacles:32,nps:2.463,length:398,characteristic:"Standard",difficulty:"Hard",events:2753,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:205.862,paritySummary:{errors:73,warns:67,resets:0}},{njs:10,offset:0,notes:771,bombs:0,obstacles:32,nps:3.745,length:398.003,characteristic:"Standard",difficulty:"Expert",events:2753,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:205.863,paritySummary:{errors:95,warns:124,resets:0}},{njs:10,offset:0,notes:873,bombs:0,obstacles:32,nps:4.241,length:398,characteristic:"Standard",difficulty:"ExpertPlus",events:2753,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:205.862,paritySummary:{errors:103,warns:146,resets:0}}],downloadURL:"https://cdn.beatsaver.com/674b1b540ac5851c92c8cde7dd456698f5a733c4.zip",coverURL:"https://cdn.beatsaver.com/674b1b540ac5851c92c8cde7dd456698f5a733c4.jpg",previewURL:"https://cdn.beatsaver.com/674b1b540ac5851c92c8cde7dd456698f5a733c4.mp3"}],createdAt:"2018-07-25T20:53:52Z",updatedAt:"2018-07-25T20:53:52Z",lastPublishedAt:"2018-07-25T20:53:52Z"},{id:"6d96",name:"League of Legends - Phoenix (ft. Cailin Russo and Chrissy Costanza)",description:"The Worlds 2019 theme for League of Legends.\nVideo: https://youtu.be/aUTcwyZ9LmI\nExpert+ Video: https://www.youtube.com/watch?v=-uh4WOhZmQs\n\nEasy: Notes: 245 NPS: 1.23 NJS: 12\nNormal: Notes: 307 NPS: 1.54 NJS: 14\nHard: Notes: 428 NPS: 2.15 NJS: 16\nExpert: Notes: 504 NPS: 2.53 NJS: 16\nExpert+: Notes: 664 NPS: 3.33 NJS: 17\n\nCheck out my lightshows here: https://www.youtube.com/playlist?list=PLwl6dYq72JOYu1BnKl5WATa4Dh__ZJmuN",uploader:{id:14808,name:"halcyon12",uniqueSet:!0,hash:"5cff0b7698cc5a672c8547ad",avatar:"https://www.gravatar.com/avatar/5cff0b7698cc5a672c8547ad?d=retro",type:"SIMPLE"},metadata:{bpm:168,duration:199,songName:"Phoenix",songSubName:"ft. Cailin Russo and Chrissy Costanza",songAuthorName:"League of Legends",levelAuthorName:"Halcyon12"},stats:{plays:0,downloads:15278,upvotes:6407,downvotes:122,score:.9471},uploaded:"2019-11-02T00:52:14.279Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"1fd9078f4b357143390a8d24664736f78b4224a9",key:"6d96",state:"Published",createdAt:"2019-11-02T00:52:14.279Z",sageScore:6,diffs:[{njs:12,offset:0,notes:245,bombs:0,obstacles:20,nps:1.376,length:498.5,characteristic:"Standard",difficulty:"Easy",events:2347,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:178.036,paritySummary:{errors:11,warns:1,resets:0}},{njs:14,offset:1.25,notes:307,bombs:0,obstacles:21,nps:1.724,length:498.5,characteristic:"Standard",difficulty:"Normal",events:2347,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:178.036,paritySummary:{errors:7,warns:0,resets:0}},{njs:16,offset:.75,notes:428,bombs:0,obstacles:25,nps:2.404,length:498.5,characteristic:"Standard",difficulty:"Hard",events:2347,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:178.036,paritySummary:{errors:2,warns:0,resets:0}},{njs:16,offset:.25,notes:504,bombs:0,obstacles:20,nps:2.828,length:499,characteristic:"Standard",difficulty:"Expert",events:2347,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:178.214,paritySummary:{errors:1,warns:1,resets:0}},{njs:17,offset:0,notes:664,bombs:0,obstacles:92,nps:3.525,length:527.5,characteristic:"Standard",difficulty:"ExpertPlus",events:2347,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:188.393,paritySummary:{errors:0,warns:0,resets:0}},{njs:12,offset:0,notes:0,bombs:0,obstacles:0,nps:0,length:0,characteristic:"Lightshow",difficulty:"ExpertPlus",events:2347,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:0,paritySummary:{errors:0,warns:0,resets:0}}],downloadURL:"https://cdn.beatsaver.com/1fd9078f4b357143390a8d24664736f78b4224a9.zip",coverURL:"https://cdn.beatsaver.com/1fd9078f4b357143390a8d24664736f78b4224a9.jpg",previewURL:"https://cdn.beatsaver.com/1fd9078f4b357143390a8d24664736f78b4224a9.mp3"}],createdAt:"2019-11-02T00:52:14.279Z",updatedAt:"2019-11-02T00:52:14.279Z",lastPublishedAt:"2019-11-02T00:52:14.279Z"},{id:"6366",name:"Star Sky - Two Steps From Hell",description:"68\nNormal wall --- 43 walls\nHyper wall --- 6631 walls\n\ndoodle :)",uploader:{id:4285521,name:"ejiejidayo",uniqueSet:!0,hash:"5cff0b7398cc5a672c84fc58",avatar:"https://cdn.beatsaver.com/avatar/224894241279574016.png",type:"DISCORD"},metadata:{bpm:130,duration:330,songName:"Star Sky Two Steps From Hell",songSubName:"",songAuthorName:".",levelAuthorName:"ejiejidayo"},stats:{plays:0,downloads:9471,upvotes:3452,downvotes:43,score:.9459},uploaded:"2019-09-14T19:59:45.575Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"323975ef9eaec337c8208dc864e766289e3d5ef1",key:"6366",state:"Published",createdAt:"2019-09-14T19:59:45.575Z",sageScore:5,diffs:[{njs:16,offset:0,notes:1218,bombs:0,obstacles:43,nps:3.754,length:703,characteristic:"Standard",difficulty:"Hard",events:1044,chroma:!1,me:!0,ne:!1,cinema:!1,seconds:324.462,paritySummary:{errors:0,warns:0,resets:0}},{njs:16,offset:0,notes:1218,bombs:0,obstacles:6631,nps:3.754,length:703,characteristic:"Standard",difficulty:"Expert",events:1044,chroma:!1,me:!0,ne:!1,cinema:!1,seconds:324.462,paritySummary:{errors:0,warns:0,resets:0}}],downloadURL:"https://cdn.beatsaver.com/323975ef9eaec337c8208dc864e766289e3d5ef1.zip",coverURL:"https://cdn.beatsaver.com/323975ef9eaec337c8208dc864e766289e3d5ef1.jpg",previewURL:"https://cdn.beatsaver.com/323975ef9eaec337c8208dc864e766289e3d5ef1.mp3"}],createdAt:"2019-09-14T19:59:45.575Z",updatedAt:"2019-09-14T19:59:45.575Z",lastPublishedAt:"2019-09-14T19:59:45.575Z"},{id:"2005",name:"New Divide - Linkin Park - 100k Contest",description:"This is one of the 22 maps that were mapped for the 100k Contest where you can win over $7,000 in prizes. Go to https://bsaber.com/100k-contest/ to register!\nhttps://www.youtube.com/watch?v=deWMNAw03QI&t=28s\n\nhttps://twitter.com/TheDownyCat\nhttps://www.twitch.tv/downycat\nhttps://streamlabs.com/downycat/tip",uploader:{id:4285982,name:"downycat",uniqueSet:!0,hash:"5cff0b7398cc5a672c84ede5",avatar:"https://cdn.beatsaver.com/avatar/173538829888782336.png",type:"DISCORD"},metadata:{bpm:118,duration:268,songName:"New Divide",songSubName:"Linkin Park",songAuthorName:"DownyCat",levelAuthorName:"downycat"},stats:{plays:0,downloads:16063,upvotes:4873,downvotes:83,score:.9459},uploaded:"2018-11-13T00:58:32Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"be4a33ad1b1caef9f1f42b680ca1a9087db19ffe",key:"2005",state:"Published",createdAt:"2018-11-13T00:58:32Z",sageScore:6,diffs:[{njs:13,offset:0,notes:353,bombs:0,obstacles:78,nps:1.363,length:509.5,characteristic:"Standard",difficulty:"Easy",events:2605,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:259.068,paritySummary:{errors:29,warns:1,resets:0}},{njs:13,offset:0,notes:589,bombs:0,obstacles:18,nps:2.269,length:510.5,characteristic:"Standard",difficulty:"Normal",events:2605,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:259.576,paritySummary:{errors:12,warns:6,resets:0}},{njs:13,offset:0,notes:893,bombs:0,obstacles:13,nps:3.44,length:510.5,characteristic:"Standard",difficulty:"Hard",events:2605,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:259.576,paritySummary:{errors:16,warns:24,resets:0}},{njs:13,offset:0,notes:1167,bombs:0,obstacles:25,nps:4.496,length:510.5,characteristic:"Standard",difficulty:"Expert",events:2605,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:259.576,paritySummary:{errors:38,warns:48,resets:0}}],downloadURL:"https://cdn.beatsaver.com/be4a33ad1b1caef9f1f42b680ca1a9087db19ffe.zip",coverURL:"https://cdn.beatsaver.com/be4a33ad1b1caef9f1f42b680ca1a9087db19ffe.jpg",previewURL:"https://cdn.beatsaver.com/be4a33ad1b1caef9f1f42b680ca1a9087db19ffe.mp3"}],createdAt:"2018-11-13T00:58:32Z",updatedAt:"2018-11-13T00:58:32Z",lastPublishedAt:"2018-11-13T00:58:32Z"},{id:"d7fa",name:"Geoxor - Gloom [Wallmap]",description:"REUPLOAD due to last minute mapping error\n\nSpecial thanks to:\nNyri0 - For providing scripts that were crucial to making this map possible, and for helping me along the way.\nLayanmeta - For giving me so much encouragement throughout the final stages and making a brilliant YouTube video on this map.\nBSMG discord - For the continued support throughout the development process\nAll you people/birds - For playing my map :D\n\nBRIAN HAS BECOME SENTIENT. ALL HAIL BRIAN",uploader:{id:18761,name:"minething",uniqueSet:!0,hash:"5e9b4ead16c9680006287387",avatar:"https://www.gravatar.com/avatar/5e9b4ead16c9680006287387?d=retro",type:"SIMPLE"},metadata:{bpm:93,duration:167,songName:"Gloom",songSubName:"",songAuthorName:"Geoxor",levelAuthorName:"Mine Thing"},stats:{plays:0,downloads:8341,upvotes:2314,downvotes:15,score:.9457},uploaded:"2020-08-16T19:13:40.774Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"823b4e880baac024728ae96a7c20e28026c4585d",key:"d7fa",state:"Published",createdAt:"2020-08-16T19:13:40.774Z",sageScore:3,diffs:[{njs:12,offset:6,notes:0,bombs:0,obstacles:15605,nps:0,length:0,characteristic:"Standard",difficulty:"Easy",events:144,chroma:!0,me:!1,ne:!0,cinema:!1,seconds:0,paritySummary:{errors:0,warns:0,resets:0}},{njs:12,offset:6,notes:202,bombs:0,obstacles:15605,nps:1.309,length:239.125,characteristic:"Standard",difficulty:"Hard",events:144,chroma:!0,me:!1,ne:!0,cinema:!1,seconds:154.274,paritySummary:{errors:48,warns:6,resets:0}},{njs:12,offset:6,notes:411,bombs:4,obstacles:15605,nps:2.665,length:239,characteristic:"Standard",difficulty:"Expert",events:144,chroma:!0,me:!1,ne:!0,cinema:!1,seconds:154.194,paritySummary:{errors:0,warns:0,resets:1}},{njs:12,offset:3,notes:411,bombs:4,obstacles:12340,nps:2.665,length:239,characteristic:"Standard",difficulty:"ExpertPlus",events:144,chroma:!0,me:!1,ne:!0,cinema:!1,seconds:154.194,paritySummary:{errors:0,warns:0,resets:1}}],downloadURL:"https://cdn.beatsaver.com/823b4e880baac024728ae96a7c20e28026c4585d.zip",coverURL:"https://cdn.beatsaver.com/823b4e880baac024728ae96a7c20e28026c4585d.jpg",previewURL:"https://cdn.beatsaver.com/823b4e880baac024728ae96a7c20e28026c4585d.mp3"}],createdAt:"2020-08-16T19:13:40.774Z",updatedAt:"2020-08-16T19:13:40.774Z",lastPublishedAt:"2020-08-16T19:13:40.774Z"},{id:"116b0",name:"Sakuzyo - Lost Memory[Wall Map]",description:"https://www.youtube.com/watch?v=Ha0199UiDUQ\nMy first noodle extensions map\nMay cause performance issue :)\nRequirements:Noodle Extensions,Chroma",uploader:{id:4289114,name:"waika",uniqueSet:!0,hash:"5cff0b7698cc5a672c85464f",avatar:"https://cdn.beatsaver.com/avatar/530663167244894220.png",type:"DISCORD"},metadata:{bpm:95,duration:255,songName:"Lost Memory",songSubName:"",songAuthorName:"Sakuzyo",levelAuthorName:"waika"},stats:{plays:0,downloads:9091,upvotes:3250,downvotes:39,score:.9455},uploaded:"2020-11-28T11:08:12.961Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"1a88eee7cb1962157cc2439741fb06f7f78180d4",key:"116b0",state:"Published",createdAt:"2020-11-28T11:08:12.961Z",sageScore:3,diffs:[{njs:17,offset:.5,notes:0,bombs:0,obstacles:57070,nps:0,length:0,characteristic:"Standard",difficulty:"Normal",events:230,chroma:!0,me:!1,ne:!0,cinema:!1,seconds:0,paritySummary:{errors:0,warns:0,resets:0}},{njs:17,offset:.5,notes:506,bombs:0,obstacles:57070,nps:2.36,length:339.5,characteristic:"Standard",difficulty:"Expert",events:230,chroma:!0,me:!1,ne:!0,cinema:!1,seconds:214.421,paritySummary:{errors:0,warns:0,resets:0}}],downloadURL:"https://cdn.beatsaver.com/1a88eee7cb1962157cc2439741fb06f7f78180d4.zip",coverURL:"https://cdn.beatsaver.com/1a88eee7cb1962157cc2439741fb06f7f78180d4.jpg",previewURL:"https://cdn.beatsaver.com/1a88eee7cb1962157cc2439741fb06f7f78180d4.mp3"}],createdAt:"2020-11-28T11:08:12.961Z",updatedAt:"2020-11-28T11:08:12.961Z",lastPublishedAt:"2020-11-28T11:08:12.961Z"},{id:"9a0c",name:"Thnks fr th Mmrs - Fall Out Boy",description:"Thnks fr th Mmrs (or Thanks for the Memories) from Fall Out Boy.\nSo far the map that I have put the most work into (and which probably made me age by 3 years). Hope you enjoy it!\n\nThe map has Chroma lighting but can also be played without the Chroma mod.\nExpert+ contains single saber sections and polyrhythm parts. Just so you are warned ;)\n\nBig thanks to Sorukun for playtesting this map and especially to Timeweaver for pointing out all issues it had during its creation!",uploader:{id:21367,name:"hamsta",uniqueSet:!0,hash:"5de27451fffaa600066f2842",avatar:"https://www.gravatar.com/avatar/5de27451fffaa600066f2842?d=retro",type:"SIMPLE"},metadata:{bpm:155,duration:197,songName:"Thnks fr th Mmrs",songSubName:"",songAuthorName:"Fall Out Boy",levelAuthorName:"Hamsta"},stats:{plays:0,downloads:14444,upvotes:4054,downvotes:62,score:.9453},uploaded:"2020-04-12T09:50:46.516Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"0e8ef3006db854c67f04fe72322bccea410f69ee",key:"9a0c",state:"Published",createdAt:"2020-04-12T09:50:46.516Z",sageScore:5,diffs:[{njs:14,offset:0,notes:580,bombs:0,obstacles:51,nps:3.092,length:484,characteristic:"Standard",difficulty:"Hard",events:2597,chroma:!0,me:!1,ne:!1,cinema:!1,seconds:187.355,paritySummary:{errors:0,warns:0,resets:0}},{njs:14,offset:0,notes:637,bombs:0,obstacles:51,nps:3.395,length:484,characteristic:"Standard",difficulty:"Expert",events:2597,chroma:!0,me:!1,ne:!1,cinema:!1,seconds:187.355,paritySummary:{errors:0,warns:0,resets:0}},{njs:16,offset:0,notes:844,bombs:0,obstacles:39,nps:4.499,length:484,characteristic:"Standard",difficulty:"ExpertPlus",events:2597,chroma:!0,me:!1,ne:!1,cinema:!1,seconds:187.355,paritySummary:{errors:1,warns:2,resets:0}}],downloadURL:"https://cdn.beatsaver.com/0e8ef3006db854c67f04fe72322bccea410f69ee.zip",coverURL:"https://cdn.beatsaver.com/0e8ef3006db854c67f04fe72322bccea410f69ee.jpg",previewURL:"https://cdn.beatsaver.com/0e8ef3006db854c67f04fe72322bccea410f69ee.mp3"}],createdAt:"2020-04-12T09:50:46.516Z",updatedAt:"2020-04-12T09:50:46.516Z",lastPublishedAt:"2020-04-12T09:50:46.516Z"},{id:"4980",name:"Paradise - Coldplay",description:"\"Paradise\" is a song by the British rock band Coldplay. The song was released on 12 September 2011. I kinda like this song for relaxing on long car rides and I don't know how it will feel as a beat saber map but I'ma try mapping it anyways. So here it is :)",uploader:{id:58338,name:"Joetastic",uniqueSet:!0,hash:"5cff0b7498cc5a672c85050e",avatar:"https://cdn.beatsaver.com/avatar/227767566402191360.png",type:"DISCORD"},metadata:{bpm:70,duration:278,songName:"Paradise",songSubName:"Coldplay",songAuthorName:"Joetastic",levelAuthorName:"Joetastic"},stats:{plays:0,downloads:12627,upvotes:2893,downvotes:31,score:.9451},uploaded:"2019-04-30T05:45:51Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"b14639af36673a43fe32bc7563619deff438d438",key:"4980",state:"Published",createdAt:"2019-04-30T05:45:51Z",sageScore:6,diffs:[{njs:13,offset:0,notes:1023,bombs:0,obstacles:35,nps:3.816,length:312.75,characteristic:"Standard",difficulty:"Expert",events:4651,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:268.071,paritySummary:{errors:28,warns:29,resets:0}}],downloadURL:"https://cdn.beatsaver.com/b14639af36673a43fe32bc7563619deff438d438.zip",coverURL:"https://cdn.beatsaver.com/b14639af36673a43fe32bc7563619deff438d438.jpg",previewURL:"https://cdn.beatsaver.com/b14639af36673a43fe32bc7563619deff438d438.mp3"}],createdAt:"2019-04-30T05:45:51Z",updatedAt:"2019-04-30T05:45:51Z",lastPublishedAt:"2019-04-30T05:45:51Z"},{id:"efe",name:"Some Nights - Fun.",description:"Difficulties: Expert+, Expert, Hard, Normal\r\nYouTube Preview: https://youtu.be/X4R7VIZPffk",uploader:{id:30311,name:"bennydabeast",uniqueSet:!0,hash:"5cff0b7298cc5a672c84e98d",avatar:"https://cdn.beatsaver.com/avatar/30311.jpg",type:"SIMPLE"},metadata:{bpm:108,duration:255,songName:"Some Nights",songSubName:"Fun.",songAuthorName:"BennyDaBeast",levelAuthorName:"bennydabeast"},stats:{plays:0,downloads:15367,upvotes:7399,downvotes:170,score:.9451},uploaded:"2018-08-10T20:34:09Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"e64d6b7c5527d36005ae1801268798dd21ccf605",key:"efe",state:"Published",createdAt:"2018-08-10T20:34:09Z",sageScore:4,diffs:[{njs:10,offset:0,notes:321,bombs:0,obstacles:14,nps:1.382,length:418,characteristic:"Standard",difficulty:"Normal",events:1864,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:232.222,paritySummary:{errors:73,warns:36,resets:0}},{njs:10,offset:0,notes:432,bombs:0,obstacles:14,nps:1.86,length:418,characteristic:"Standard",difficulty:"Hard",events:1864,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:232.222,paritySummary:{errors:82,warns:51,resets:0}},{njs:10,offset:0,notes:680,bombs:0,obstacles:14,nps:2.928,length:418,characteristic:"Standard",difficulty:"Expert",events:1864,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:232.222,paritySummary:{errors:86,warns:82,resets:0}},{njs:10,offset:0,notes:810,bombs:0,obstacles:14,nps:3.488,length:418,characteristic:"Standard",difficulty:"ExpertPlus",events:1864,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:232.222,paritySummary:{errors:108,warns:106,resets:0}}],downloadURL:"https://cdn.beatsaver.com/e64d6b7c5527d36005ae1801268798dd21ccf605.zip",coverURL:"https://cdn.beatsaver.com/e64d6b7c5527d36005ae1801268798dd21ccf605.jpg",previewURL:"https://cdn.beatsaver.com/e64d6b7c5527d36005ae1801268798dd21ccf605.mp3"}],createdAt:"2018-08-10T20:34:09Z",updatedAt:"2018-08-10T20:34:09Z",lastPublishedAt:"2018-08-10T20:34:09Z"},{id:"14d64",name:"Try - MitiS Feat. RORY",description:"Twenty-Sixth Upload\n\nThis map means the whole world to me, so I hope everyone enjoys this map. My father passed away on Jan. 23, 2021, in the middle of making this map. I am dedicating this map for him because of how much this songs means to me now. \nPouring my heart and soul into this map took a lot out of me, making it as perfect to my little abilities I have for mapping.\n\nBig shout outs to Lonely and Jamman for lighting this beautiful song and for agreeing to light it, it means the world to me.\nBig shout outs to thelightdesigner for making such amazing and beautiful walls. Thank you for taking the time to make this, it means the world to me.\nBig shout outs to Mawntee for giving me advice on how to make this map feel and shout outs to thelitlewiseowl for modding it, showing me what I can improve in this map. \nBiggest shout outs to everyone that play tested it multiple times. I am sorry for bugging them for multiple play test. \n\nAnd Biggest shoutout to my favorite chillstep/melodic dubstep artist, MitiS and Rory for making this beautiful song. \nYou have no idea how much this song means to me, I thank you so much. Keep up the good work MitiS.\n\n**NOODLES AND CHROMA REQUIRED**\n\nI hope this map can show you the feeling in this song, as well as what it portrays. I tried my best, I hope it turns out great and everyone enjoys it. \nThank you everyone for taking the time to download and play this map. I appreciate it everyone.\n\nFeedback is always welcome!",uploader:{id:4285346,name:"remie",uniqueSet:!0,hash:"5f6efd989824150006d740ac",avatar:"https://cdn.beatsaver.com/avatar/144275927466115073.png",type:"DISCORD"},metadata:{bpm:132,duration:273,songName:"Try",songSubName:"",songAuthorName:"MitiS Feat. RORY",levelAuthorName:"Remie & Lone"},stats:{plays:0,downloads:7511,upvotes:2884,downvotes:31,score:.945},uploaded:"2021-03-01T13:29:26.471Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"6db3d9da217b41607d250aa7a28c5dc26a082188",key:"14d64",state:"Published",createdAt:"2021-03-01T13:29:26.471Z",sageScore:3,diffs:[{njs:17,offset:-.7,notes:1447,bombs:21,obstacles:17451,nps:6.217,length:512.083,characteristic:"Standard",difficulty:"ExpertPlus",events:36825,chroma:!0,me:!1,ne:!0,cinema:!1,seconds:232.765,paritySummary:{errors:0,warns:0,resets:2}}],downloadURL:"https://cdn.beatsaver.com/6db3d9da217b41607d250aa7a28c5dc26a082188.zip",coverURL:"https://cdn.beatsaver.com/6db3d9da217b41607d250aa7a28c5dc26a082188.jpg",previewURL:"https://cdn.beatsaver.com/6db3d9da217b41607d250aa7a28c5dc26a082188.mp3"}],createdAt:"2021-03-01T13:29:26.471Z",updatedAt:"2021-03-01T13:29:26.471Z",lastPublishedAt:"2021-03-01T13:29:26.471Z"},{id:"3b84",name:"Revenge [DJ Got Us Fallin In Love Minecraft Parody] - CaptainSparklez ft. TryHardNinja",description:"Revenge is a Minecraft parody song of DJ Got Us Fallin In Love by CaptainSparklez featuring vocals from TryHardNinja. Slight remap of DJ Got Us Fallin In Love.\r\n\r\nDamn, this song brings me back memories of the golden age of Minecraft.",uploader:{id:58338,name:"Joetastic",uniqueSet:!0,hash:"5cff0b7498cc5a672c85050e",avatar:"https://cdn.beatsaver.com/avatar/227767566402191360.png",type:"DISCORD"},metadata:{bpm:120,duration:222,songName:"Revenge",songSubName:"CaptainSparklez ft. TryHardNinja",songAuthorName:"Joetastic",levelAuthorName:"Joetastic"},stats:{plays:0,downloads:13421,upvotes:7001,downvotes:157,score:.945},uploaded:"2019-03-04T17:01:53Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"7ac4d99cee16e8d0437d7e8feecdb12488cc27d3",key:"3b84",state:"Published",createdAt:"2019-03-04T17:01:53Z",sageScore:5,diffs:[{njs:14,offset:0,notes:858,bombs:0,obstacles:1,nps:3.972,length:432,characteristic:"Standard",difficulty:"Expert",events:1675,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:216,paritySummary:{errors:80,warns:85,resets:0}}],downloadURL:"https://cdn.beatsaver.com/7ac4d99cee16e8d0437d7e8feecdb12488cc27d3.zip",coverURL:"https://cdn.beatsaver.com/7ac4d99cee16e8d0437d7e8feecdb12488cc27d3.jpg",previewURL:"https://cdn.beatsaver.com/7ac4d99cee16e8d0437d7e8feecdb12488cc27d3.mp3"}],createdAt:"2019-03-04T17:01:53Z",updatedAt:"2019-03-04T17:01:53Z",lastPublishedAt:"2019-03-04T17:01:53Z"},{id:"b7aa",name:"Powerwolf - Venom of Venus",description:"Back to my more regular style, Powerwolf is a power-metal band that perform around the themes of werewolves and religion, a strange but interesting mixture.\r\n\r\nEx+ has a no-colours mode for those who wish to play without the custom block colours, but unfortunately I can't fit such an option for all difficulties.\r\n\r\nNormal 1.85 NPS\r\nHard 3.15 NPS\r\nExpert 4.43 NPS\r\nExpert+ 5.11 NPS\r\n\r\nThere is no easy difficulty, as that I needed the slot for the no-colour mode.",uploader:{id:4285369,name:"Cyrix",uniqueSet:!0,hash:"5eb6eb9a7abb000006c85add",avatar:"https://cdn.beatsaver.com/avatar/167730807929044992.png",type:"DISCORD"},metadata:{bpm:164,duration:210,songName:"Venom of Venus",songSubName:"",songAuthorName:"Powerwolf",levelAuthorName:"Cyrix"},stats:{plays:0,downloads:8465,upvotes:2864,downvotes:31,score:.9449},uploaded:"2020-06-29T18:24:10.081Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"f88b43c770dcd85a4ba18368853fbf062d41a09c",key:"b7aa",state:"Published",createdAt:"2020-06-29T18:24:10.081Z",sageScore:7,diffs:[{njs:12,offset:.5,notes:392,bombs:0,obstacles:63,nps:1.948,length:549.938,characteristic:"Standard",difficulty:"Easy",events:4188,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:201.197,paritySummary:{errors:44,warns:15,resets:0}},{njs:13,offset:1,notes:666,bombs:8,obstacles:36,nps:3.31,length:549.938,characteristic:"Standard",difficulty:"Normal",events:4188,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:201.197,paritySummary:{errors:1,warns:0,resets:1}},{njs:17,offset:0,notes:934,bombs:9,obstacles:7,nps:4.642,length:549.938,characteristic:"Standard",difficulty:"Hard",events:4188,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:201.197,paritySummary:{errors:0,warns:0,resets:2}},{njs:20,offset:-.25,notes:1079,bombs:4,obstacles:7,nps:5.353,length:551,characteristic:"Standard",difficulty:"Expert",events:4192,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:201.585,paritySummary:{errors:1,warns:0,resets:2}},{njs:20,offset:-.25,notes:1079,bombs:4,obstacles:7,nps:5.353,length:551,characteristic:"Standard",difficulty:"ExpertPlus",events:4192,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:201.585,paritySummary:{errors:1,warns:0,resets:2}}],downloadURL:"https://cdn.beatsaver.com/f88b43c770dcd85a4ba18368853fbf062d41a09c.zip",coverURL:"https://cdn.beatsaver.com/f88b43c770dcd85a4ba18368853fbf062d41a09c.jpg",previewURL:"https://cdn.beatsaver.com/f88b43c770dcd85a4ba18368853fbf062d41a09c.mp3"}],createdAt:"2020-06-29T18:24:10.081Z",updatedAt:"2020-06-29T18:24:10.081Z",lastPublishedAt:"2020-06-29T18:24:10.081Z"},{id:"fd",name:"Rasputin - Boney M",description:"Expert\r\n127 bpm",uploader:{id:48512,name:"jobas",uniqueSet:!1,hash:"5cff0b7298cc5a672c84e9a2",avatar:"https://www.gravatar.com/avatar/5cff0b7298cc5a672c84e9a2?d=retro",type:"SIMPLE"},metadata:{bpm:127,duration:266,songName:"Rasputin-Boney M",songSubName:"",songAuthorName:"Jobas",levelAuthorName:"jobas"},stats:{plays:0,downloads:22705,upvotes:8696,downvotes:218,score:.9448},uploaded:"2018-05-18T23:27:59Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"bf2f5afaeae0767c9bd6944ce74a23f6b24f4098",key:"fd",state:"Published",createdAt:"2018-05-18T23:27:59Z",sageScore:4,diffs:[{njs:10,offset:0,notes:701,bombs:0,obstacles:124,nps:2.699,length:549.844,characteristic:"Standard",difficulty:"Hard",events:0,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:259.769,paritySummary:{errors:29,warns:158,resets:0}}],downloadURL:"https://cdn.beatsaver.com/bf2f5afaeae0767c9bd6944ce74a23f6b24f4098.zip",coverURL:"https://cdn.beatsaver.com/bf2f5afaeae0767c9bd6944ce74a23f6b24f4098.jpg",previewURL:"https://cdn.beatsaver.com/bf2f5afaeae0767c9bd6944ce74a23f6b24f4098.mp3"}],createdAt:"2018-05-18T23:27:59Z",updatedAt:"2018-05-18T23:27:59Z",lastPublishedAt:"2018-05-18T23:27:59Z"},{id:"74d5",name:"What's New, Scooby-Doo? - Simple Plan",description:"Just practicing my mapping with this song\n\nalso, my childhood nostalgia\nEDIT: forgot to set NJS",uploader:{id:58338,name:"Joetastic",uniqueSet:!0,hash:"5cff0b7498cc5a672c85050e",avatar:"https://cdn.beatsaver.com/avatar/227767566402191360.png",type:"DISCORD"},metadata:{bpm:158.03,duration:67,songName:"What's New, Scooby-Doo?",songSubName:"",songAuthorName:"Simple Plan",levelAuthorName:"Joetastic"},stats:{plays:0,downloads:10991,upvotes:3468,downvotes:48,score:.9447},uploaded:"2019-12-08T18:41:10.652Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"e004f84ffebded94e761d667db6aaa44f000a8a8",key:"74d5",state:"Published",createdAt:"2019-12-08T18:41:10.652Z",sageScore:2,diffs:[{njs:15,offset:0,notes:330,bombs:2,obstacles:0,nps:5.226,length:166.313,characteristic:"Standard",difficulty:"Expert",events:382,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:63.145,paritySummary:{errors:9,warns:7,resets:0}}],downloadURL:"https://cdn.beatsaver.com/e004f84ffebded94e761d667db6aaa44f000a8a8.zip",coverURL:"https://cdn.beatsaver.com/e004f84ffebded94e761d667db6aaa44f000a8a8.jpg",previewURL:"https://cdn.beatsaver.com/e004f84ffebded94e761d667db6aaa44f000a8a8.mp3"}],createdAt:"2019-12-08T18:41:10.652Z",updatedAt:"2019-12-08T18:41:10.652Z",lastPublishedAt:"2019-12-08T18:41:10.652Z"},{id:"a438",name:"Wait - M83 (wall map)",description:"I wanted to do something special for this great song, and also see the potential of Noodle Extensions. A few tips for a better experience:\r\n- disable the mirror effect in the game settings\r\n- turn the SFX volume down in the player settings\r\n- hide the HUD in the player settings\r\n\r\nVideo: https://youtu.be/oe6ThhijPy0\r\n\r\nThe map has a lot of walls, so you might not be able to run it on the lower-end hardware. I've included a version with less walls in case it helps.",uploader:{id:4288814,name:"nyri0",uniqueSet:!0,hash:"5e792df416c9680006086a78",avatar:"https://cdn.beatsaver.com/avatar/396715033125584907.png",type:"DISCORD"},metadata:{bpm:148,duration:336,songName:"Wait",songSubName:"",songAuthorName:"M83",levelAuthorName:"nyri0"},stats:{plays:0,downloads:6655,upvotes:2103,downvotes:14,score:.9442},uploaded:"2020-05-08T23:53:02.030Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"0d8921ef06a889cbd9db13afcc43f09a1619b173",key:"a438",state:"Published",createdAt:"2020-05-08T23:53:02.030Z",sageScore:6,diffs:[{njs:8,offset:6,notes:735,bombs:0,obstacles:6684,nps:2.225,length:815,characteristic:"Standard",difficulty:"Easy",events:5,chroma:!1,me:!1,ne:!0,cinema:!1,seconds:330.405,paritySummary:{errors:94,warns:27,resets:0}},{njs:8,offset:6,notes:735,bombs:0,obstacles:10499,nps:2.225,length:815,characteristic:"Standard",difficulty:"Hard",events:5,chroma:!1,me:!1,ne:!0,cinema:!1,seconds:330.405,paritySummary:{errors:94,warns:27,resets:0}}],downloadURL:"https://cdn.beatsaver.com/0d8921ef06a889cbd9db13afcc43f09a1619b173.zip",coverURL:"https://cdn.beatsaver.com/0d8921ef06a889cbd9db13afcc43f09a1619b173.jpg",previewURL:"https://cdn.beatsaver.com/0d8921ef06a889cbd9db13afcc43f09a1619b173.mp3"}],createdAt:"2020-05-08T23:53:02.030Z",updatedAt:"2020-05-08T23:53:02.030Z",lastPublishedAt:"2020-05-08T23:53:02.030Z"},{id:"4a35",name:"[Anniversary] Animals (Radio Edit) - Martin Garrix [Joetastic & StyngMe]",description:"Part of the Anniversary Song Pack",uploader:{id:37070,name:"anniversaryteam",uniqueSet:!0,hash:"5cff0b7798cc5a672c8565a3",avatar:"https://www.gravatar.com/avatar/5cff0b7798cc5a672c8565a3?d=retro",type:"SIMPLE"},metadata:{bpm:128,duration:176,songName:"Animals (Radio Edit)",songSubName:"Martin Garrix",songAuthorName:"Joetastic & StyngMe",levelAuthorName:"AnniversaryTeam"},stats:{plays:0,downloads:14718,upvotes:7734,downvotes:189,score:.9442},uploaded:"2019-05-03T14:08:02Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"1a1737caba0f049a69369e328622e06b2a32b634",key:"4a35",state:"Published",createdAt:"2019-05-03T14:08:02Z",sageScore:8,diffs:[{njs:10,offset:0,notes:272,bombs:0,obstacles:19,nps:1.612,length:360,characteristic:"Standard",difficulty:"Easy",events:2074,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:168.75,paritySummary:{errors:32,warns:22,resets:0}},{njs:12,offset:0,notes:350,bombs:0,obstacles:22,nps:2.08,length:359,characteristic:"Standard",difficulty:"Normal",events:2074,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:168.281,paritySummary:{errors:34,warns:27,resets:0}},{njs:14,offset:0,notes:436,bombs:6,obstacles:22,nps:2.584,length:360,characteristic:"Standard",difficulty:"Hard",events:2074,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:168.75,paritySummary:{errors:29,warns:31,resets:4}},{njs:15,offset:0,notes:675,bombs:4,obstacles:22,nps:4,length:360,characteristic:"Standard",difficulty:"Expert",events:2074,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:168.75,paritySummary:{errors:26,warns:34,resets:1}},{njs:16,offset:0,notes:738,bombs:0,obstacles:21,nps:4.373,length:360,characteristic:"Standard",difficulty:"ExpertPlus",events:2038,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:168.75,paritySummary:{errors:46,warns:40,resets:0}}],downloadURL:"https://cdn.beatsaver.com/1a1737caba0f049a69369e328622e06b2a32b634.zip",coverURL:"https://cdn.beatsaver.com/1a1737caba0f049a69369e328622e06b2a32b634.jpg",previewURL:"https://cdn.beatsaver.com/1a1737caba0f049a69369e328622e06b2a32b634.mp3"}],createdAt:"2019-05-03T14:08:02Z",updatedAt:"2019-05-03T14:08:02Z",lastPublishedAt:"2019-05-03T14:08:02Z"},{id:"5038",name:"Uptown Funk - Mark Ronson",description:"5/31: This version now works for the Oculus Quest.\r\n\r\nDifficulties: Expert and Hard\r\nYouTube Link: https://youtu.be/6TYji_Klr9I",uploader:{id:30311,name:"bennydabeast",uniqueSet:!0,hash:"5cff0b7298cc5a672c84e98d",avatar:"https://cdn.beatsaver.com/avatar/30311.jpg",type:"SIMPLE"},metadata:{bpm:115,duration:271,songName:"Uptown Funk",songSubName:"Mark Ronson",songAuthorName:"BennyDaBeast",levelAuthorName:"bennydabeast"},stats:{plays:0,downloads:21925,upvotes:9390,downvotes:251,score:.944},uploaded:"2019-05-31T17:58:39Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"d110e413fb7fb462b692f1f17b835cf8b7280884",key:"5038",state:"Published",createdAt:"2019-05-31T17:58:39Z",sageScore:5,diffs:[{njs:10,offset:0,notes:639,bombs:0,obstacles:24,nps:2.397,length:511,characteristic:"Standard",difficulty:"Hard",events:786,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:266.609,paritySummary:{errors:115,warns:89,resets:0}},{njs:10,offset:0,notes:776,bombs:0,obstacles:24,nps:2.911,length:511,characteristic:"Standard",difficulty:"Expert",events:786,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:266.609,paritySummary:{errors:98,warns:111,resets:0}}],downloadURL:"https://cdn.beatsaver.com/d110e413fb7fb462b692f1f17b835cf8b7280884.zip",coverURL:"https://cdn.beatsaver.com/d110e413fb7fb462b692f1f17b835cf8b7280884.jpg",previewURL:"https://cdn.beatsaver.com/d110e413fb7fb462b692f1f17b835cf8b7280884.mp3"}],createdAt:"2019-05-31T17:58:39Z",updatedAt:"2019-05-31T17:58:39Z",lastPublishedAt:"2019-05-31T17:58:39Z"},{id:"1c1",name:"Shia LaBeouf (Rob Cantor)",description:"Shia LaBeouf - Rob Cantor\r\nFinished Lighting\r\nDifficulties: Expert, Hard, Normal, Easy\r\nBPM: 96",uploader:{id:53184,name:"kleid",uniqueSet:!0,hash:"5cff0b7398cc5a672c84ecd9",avatar:"https://www.gravatar.com/avatar/5cff0b7398cc5a672c84ecd9?d=retro",type:"SIMPLE"},metadata:{bpm:96,duration:154,songName:"Shia LaBeouf",songSubName:"Rob Cantor",songAuthorName:"Kleid",levelAuthorName:"kleid"},stats:{plays:0,downloads:12103,upvotes:6574,downvotes:151,score:.9439},uploaded:"2018-05-23T00:42:28Z",automapper:!1,ranked:!0,qualified:!1,versions:[{hash:"1279a3fcaff31e767e5dd7d7c016ec08733cf566",key:"1c1",state:"Published",createdAt:"2018-05-23T00:42:28Z",sageScore:5,diffs:[{njs:10,offset:0,notes:266,bombs:0,obstacles:39,nps:1.891,length:225,characteristic:"Standard",difficulty:"Easy",events:379,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:140.625,paritySummary:{errors:36,warns:49,resets:0},stars:1.36},{njs:10,offset:0,notes:323,bombs:0,obstacles:44,nps:2.296,length:225,characteristic:"Standard",difficulty:"Normal",events:379,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:140.625,paritySummary:{errors:59,warns:46,resets:0},stars:1.65},{njs:10,offset:0,notes:344,bombs:24,obstacles:44,nps:2.445,length:225,characteristic:"Standard",difficulty:"Hard",events:379,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:140.625,paritySummary:{errors:61,warns:48,resets:3},stars:1.73},{njs:10,offset:0,notes:378,bombs:28,obstacles:64,nps:2.687,length:225,characteristic:"Standard",difficulty:"Expert",events:379,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:140.625,paritySummary:{errors:69,warns:54,resets:3}}],downloadURL:"https://cdn.beatsaver.com/1279a3fcaff31e767e5dd7d7c016ec08733cf566.zip",coverURL:"https://cdn.beatsaver.com/1279a3fcaff31e767e5dd7d7c016ec08733cf566.jpg",previewURL:"https://cdn.beatsaver.com/1279a3fcaff31e767e5dd7d7c016ec08733cf566.mp3"}],createdAt:"2018-05-23T00:42:28Z",updatedAt:"2018-05-23T00:42:28Z",lastPublishedAt:"2018-05-23T00:42:28Z"},{id:"7a64",name:"Joey Batey - Toss A Coin To Your Witcher",description:"Expert+ Preview https://www.youtube.com/watch?v=AjfABhvswrI\n\nToss a Coin to Beat Saber!\n\nNetflix's The Witcher OST.\nOriginal Music by Sonya Belousova & Giona Ostinelli.\nLyrics by Jenny Klein, Sonya Belousova & Giona Ostinelli.\nPerformed by Joey Batey.\n\nThanks Sorukun for playtesting.",uploader:{id:4286200,name:"holair",uniqueSet:!0,hash:"5cff0b7698cc5a672c853af4",avatar:"https://cdn.beatsaver.com/avatar/176034748571844608.png",type:"DISCORD"},metadata:{bpm:105,duration:180,songName:"Toss A Coin To Your Witcher",songSubName:"Netflix's The Witcher",songAuthorName:"Joey Batey",levelAuthorName:"Holair"},stats:{plays:0,downloads:16196,upvotes:9958,downvotes:275,score:.9438},uploaded:"2019-12-28T20:11:35.767Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"19a733cf9202ef25725966d78f465bf87b26254d",key:"7a64",state:"Published",createdAt:"2019-12-28T20:11:35.767Z",sageScore:7,diffs:[{njs:10,offset:0,notes:175,bombs:0,obstacles:1,nps:1.008,length:303.743,characteristic:"Standard",difficulty:"Easy",events:814,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:173.567,paritySummary:{errors:55,warns:12,resets:0}},{njs:10,offset:0,notes:322,bombs:0,obstacles:2,nps:1.855,length:303.743,characteristic:"Standard",difficulty:"Normal",events:814,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:173.567,paritySummary:{errors:37,warns:21,resets:0}},{njs:12,offset:0,notes:459,bombs:0,obstacles:10,nps:2.645,length:303.743,characteristic:"Standard",difficulty:"Hard",events:814,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:173.567,paritySummary:{errors:38,warns:16,resets:0}},{njs:14,offset:0,notes:578,bombs:0,obstacles:15,nps:3.33,length:303.743,characteristic:"Standard",difficulty:"Expert",events:1310,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:173.567,paritySummary:{errors:37,warns:40,resets:0}},{njs:14,offset:0,notes:580,bombs:0,obstacles:14,nps:3.342,length:303.74,characteristic:"Standard",difficulty:"ExpertPlus",events:1310,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:173.566,paritySummary:{errors:41,warns:34,resets:0}}],downloadURL:"https://cdn.beatsaver.com/19a733cf9202ef25725966d78f465bf87b26254d.zip",coverURL:"https://cdn.beatsaver.com/19a733cf9202ef25725966d78f465bf87b26254d.jpg",previewURL:"https://cdn.beatsaver.com/19a733cf9202ef25725966d78f465bf87b26254d.mp3"}],createdAt:"2019-12-28T20:11:35.767Z",updatedAt:"2019-12-28T20:11:35.767Z",lastPublishedAt:"2019-12-28T20:11:35.767Z"},{id:"49f2",name:"It's My Life - Bon Jovi",description:"I might be a huge weeb but I still enjoy listening to 80s band: Bon Jovi. Here's one of their more modern songs from the 2000s: It's My Life! Mapping on this isn't too difficult, it's an slow rock song so not much I can map to anyways",uploader:{id:58338,name:"Joetastic",uniqueSet:!0,hash:"5cff0b7498cc5a672c85050e",avatar:"https://cdn.beatsaver.com/avatar/227767566402191360.png",type:"DISCORD"},metadata:{bpm:120,duration:226,songName:"It's My Life",songSubName:"Bon Jovi",songAuthorName:"Joetastic",levelAuthorName:"Joetastic"},stats:{plays:0,downloads:11924,upvotes:3179,downvotes:44,score:.9436},uploaded:"2019-05-02T14:08:00Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"172b9d6d206a3fb679426b2934daad3191b10ec7",key:"49f2",state:"Published",createdAt:"2019-05-02T14:08:00Z",sageScore:5,diffs:[{njs:12,offset:0,notes:684,bombs:0,obstacles:4,nps:3.081,length:444,characteristic:"Standard",difficulty:"Hard",events:1968,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:222,paritySummary:{errors:13,warns:15,resets:0}}],downloadURL:"https://cdn.beatsaver.com/172b9d6d206a3fb679426b2934daad3191b10ec7.zip",coverURL:"https://cdn.beatsaver.com/172b9d6d206a3fb679426b2934daad3191b10ec7.jpg",previewURL:"https://cdn.beatsaver.com/172b9d6d206a3fb679426b2934daad3191b10ec7.mp3"}],createdAt:"2019-05-02T14:08:00Z",updatedAt:"2019-05-02T14:08:00Z",lastPublishedAt:"2019-05-02T14:08:00Z"},{id:"5616",name:"Sanctuary - Joji (All Difficulties, Single Saber, & No Arrows)",description:"A tribute to our boy Joji. Lots of love for him in this, 10 difficulties for players of all skill to enjoy.\n\n168 BPM - 2:56 Runtime\nEasy - 268 Notes\nNormal - 327 Notes\nHard - 409 Notes\nExpert - 465 Notes\nExpert+ - 542 Notes\n\nHard (Single Saber) - 306 Notes\nExpert (Single Saber) - 375 Notes\nExpert+ (Single Saber) - 444 Notes\n\nSincerity Difficulty (Reversed No Arrow) - 465 Notes\nSanctuary Difficulty (Reversed No Arrow) - 542 Notes\n\nGameplay:  https://youtu.be/u2AYPs94t7o\n\n**Little easter egg. Wall counts on maps correspond to milestones for George Miller. 162 videos on FilthyFrank YT channel, 105 videos on TooDamnFilthy YT channel, 95 videos on Dizastamusic YT channel, 38 songs on Pink Guy album, 35 songs on Pink Season album.",uploader:{id:4284981,name:"skylerwallace",uniqueSet:!0,hash:"5cff0b7298cc5a672c84ea67",avatar:"https://cdn.beatsaver.com/avatar/398344856868487168.png",type:"DISCORD"},metadata:{bpm:168,duration:176,songName:"Sanctuary",songSubName:"",songAuthorName:"Joji",levelAuthorName:"Skyler Wallace"},stats:{plays:0,downloads:12792,upvotes:3919,downvotes:67,score:.9434},uploaded:"2019-07-09T02:56:20.454Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"76bc9c795600df8c663dea4927f470d0a7700ab3",key:"5616",state:"Published",createdAt:"2019-07-09T02:56:20.454Z",sageScore:8,diffs:[{njs:10,offset:0,notes:268,bombs:0,obstacles:35,nps:1.737,length:432,characteristic:"Standard",difficulty:"Easy",events:3623,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:154.286,paritySummary:{errors:94,warns:18,resets:0}},{njs:10,offset:0,notes:327,bombs:0,obstacles:38,nps:2.119,length:432,characteristic:"Standard",difficulty:"Normal",events:3623,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:154.286,paritySummary:{errors:61,warns:12,resets:0}},{njs:12,offset:0,notes:409,bombs:0,obstacles:92,nps:2.651,length:432,characteristic:"Standard",difficulty:"Hard",events:3623,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:154.286,paritySummary:{errors:29,warns:10,resets:0}},{njs:14,offset:1,notes:465,bombs:0,obstacles:105,nps:3.014,length:432,characteristic:"Standard",difficulty:"Expert",events:3623,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:154.286,paritySummary:{errors:37,warns:26,resets:0}},{njs:14,offset:1,notes:542,bombs:0,obstacles:162,nps:3.513,length:432,characteristic:"Standard",difficulty:"ExpertPlus",events:3623,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:154.286,paritySummary:{errors:24,warns:29,resets:0}},{njs:12,offset:0,notes:306,bombs:0,obstacles:92,nps:1.983,length:432,characteristic:"OneSaber",difficulty:"Hard",events:3623,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:154.286,paritySummary:{errors:23,warns:28,resets:0}},{njs:14,offset:1,notes:375,bombs:0,obstacles:105,nps:2.431,length:432,characteristic:"OneSaber",difficulty:"Expert",events:3623,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:154.286,paritySummary:{errors:26,warns:29,resets:0}},{njs:14,offset:1,notes:444,bombs:0,obstacles:162,nps:2.878,length:432,characteristic:"OneSaber",difficulty:"ExpertPlus",events:3623,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:154.286,paritySummary:{errors:25,warns:57,resets:0}},{njs:-14,offset:1,notes:465,bombs:0,obstacles:105,nps:3.014,length:432,characteristic:"NoArrows",difficulty:"Expert",events:3623,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:154.286,paritySummary:{errors:0,warns:0,resets:0}},{njs:-14,offset:1,notes:542,bombs:0,obstacles:162,nps:3.513,length:432,characteristic:"NoArrows",difficulty:"ExpertPlus",events:3623,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:154.286,paritySummary:{errors:0,warns:0,resets:0}}],downloadURL:"https://cdn.beatsaver.com/76bc9c795600df8c663dea4927f470d0a7700ab3.zip",coverURL:"https://cdn.beatsaver.com/76bc9c795600df8c663dea4927f470d0a7700ab3.jpg",previewURL:"https://cdn.beatsaver.com/76bc9c795600df8c663dea4927f470d0a7700ab3.mp3"}],createdAt:"2019-07-09T02:56:20.454Z",updatedAt:"2019-07-09T02:56:20.454Z",lastPublishedAt:"2019-07-09T02:56:20.454Z"},{id:"9b35",name:"Ready To [BNA: Brand New Animal Opening]",description:'use CHROMA mod for some cool ring prop effects\n\nTrigger greatness with a fire opening\nI\'m not a furry\nI think\n\n"Ready To" was sung by main girl, Michiru Kagemori (CV: Sumire Morohoshi)\n\nBPM 147 |\nExpert+\nExpert\nHard\nNormal\nEasy\n\ntyhf\n\npreview: https://www.youtube.com/watch?v=x6Q0y8Y8g0U\n\nDM any feedback on Discord\nETAN#8341',uploader:{id:4235140,name:"etan",uniqueSet:!0,hash:"5cff0b7798cc5a672c855775",avatar:"https://cdn.beatsaver.com/avatar/136373107559497728.png",type:"DISCORD"},metadata:{bpm:147,duration:199,songName:"Ready To",songSubName:"",songAuthorName:"Michiru (CV: Sumire Morohoshi)",levelAuthorName:"ETAN"},stats:{plays:0,downloads:12461,upvotes:4254,downvotes:78,score:.9432},uploaded:"2020-04-15T05:30:10.784Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"c5de287d4406906d4ad3ddebc18e18446bb3a578",key:"9b35",state:"Published",createdAt:"2020-04-15T05:30:10.784Z",sageScore:7,diffs:[{njs:11,offset:0,notes:264,bombs:0,obstacles:2,nps:1.356,length:477,characteristic:"Standard",difficulty:"Easy",events:11962,chroma:!0,me:!1,ne:!1,cinema:!1,seconds:194.694,paritySummary:{errors:2,warns:4,resets:0}},{njs:11,offset:0,notes:336,bombs:0,obstacles:2,nps:1.726,length:477,characteristic:"Standard",difficulty:"Normal",events:11962,chroma:!0,me:!1,ne:!1,cinema:!1,seconds:194.694,paritySummary:{errors:0,warns:0,resets:0}},{njs:13,offset:1,notes:500,bombs:32,obstacles:2,nps:2.568,length:477,characteristic:"Standard",difficulty:"Hard",events:11962,chroma:!0,me:!1,ne:!1,cinema:!1,seconds:194.694,paritySummary:{errors:0,warns:0,resets:0}},{njs:16,offset:.3,notes:734,bombs:32,obstacles:2,nps:3.77,length:477,characteristic:"Standard",difficulty:"Expert",events:11962,chroma:!0,me:!1,ne:!1,cinema:!1,seconds:194.694,paritySummary:{errors:0,warns:0,resets:0}},{njs:21,offset:-.3,notes:900,bombs:32,obstacles:2,nps:4.623,length:477,characteristic:"Standard",difficulty:"ExpertPlus",events:11962,chroma:!0,me:!1,ne:!1,cinema:!1,seconds:194.694,paritySummary:{errors:0,warns:0,resets:0}},{njs:16,offset:0,notes:0,bombs:0,obstacles:0,nps:0,length:0,characteristic:"Lightshow",difficulty:"Easy",events:11962,chroma:!0,me:!1,ne:!1,cinema:!1,seconds:0,paritySummary:{errors:0,warns:0,resets:0}}],downloadURL:"https://cdn.beatsaver.com/c5de287d4406906d4ad3ddebc18e18446bb3a578.zip",coverURL:"https://cdn.beatsaver.com/c5de287d4406906d4ad3ddebc18e18446bb3a578.jpg",previewURL:"https://cdn.beatsaver.com/c5de287d4406906d4ad3ddebc18e18446bb3a578.mp3"}],createdAt:"2020-04-15T05:30:10.784Z",updatedAt:"2020-04-15T05:30:10.784Z",lastPublishedAt:"2020-04-15T05:30:10.784Z"},{id:"56cb",name:"Onegai Muscle [Dumbbell Nan Kilo Moteru? Opening]",description:"SAIDO CHESTO\n\nSung by \nHibiki Sakura (CV: Ai Fairouz)\nNaruzou Machio (CV: Kaito Ishikawa)\n\nBPM 132 | Length 1:32\nMuscle!+ (Expert+)\nExpert\nHard\n\nThanks to Helen Carnate and Kival Evan for playtesting\n\ntyhf\n\ndm me on discord with feedback\nETAN#8341",uploader:{id:4235140,name:"etan",uniqueSet:!0,hash:"5cff0b7798cc5a672c855775",avatar:"https://cdn.beatsaver.com/avatar/136373107559497728.png",type:"DISCORD"},metadata:{bpm:132,duration:92,songName:"Onegai Muscle",songSubName:"",songAuthorName:"Ai Fairouz, Kaito Ishikawa",levelAuthorName:"ETAN"},stats:{plays:0,downloads:12485,upvotes:5772,downvotes:131,score:.9428},uploaded:"2019-07-13T16:48:46.669Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"7aa8bd16a692b8c8769d96cf96b9b259bea2e862",key:"56cb",state:"Published",createdAt:"2019-07-13T16:48:46.669Z",sageScore:5,diffs:[{njs:13,offset:0,notes:223,bombs:32,obstacles:37,nps:2.544,length:192.875,characteristic:"Standard",difficulty:"Hard",events:5023,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:87.67,paritySummary:{errors:4,warns:5,resets:0}},{njs:16,offset:0,notes:304,bombs:32,obstacles:37,nps:3.468,length:192.875,characteristic:"Standard",difficulty:"Expert",events:5023,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:87.67,paritySummary:{errors:8,warns:4,resets:0}},{njs:19,offset:0,notes:402,bombs:32,obstacles:38,nps:4.585,length:192.875,characteristic:"Standard",difficulty:"ExpertPlus",events:5023,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:87.67,paritySummary:{errors:12,warns:6,resets:0}}],downloadURL:"https://cdn.beatsaver.com/7aa8bd16a692b8c8769d96cf96b9b259bea2e862.zip",coverURL:"https://cdn.beatsaver.com/7aa8bd16a692b8c8769d96cf96b9b259bea2e862.jpg",previewURL:"https://cdn.beatsaver.com/7aa8bd16a692b8c8769d96cf96b9b259bea2e862.mp3"}],createdAt:"2019-07-13T16:48:46.669Z",updatedAt:"2019-07-13T16:48:46.669Z",lastPublishedAt:"2019-07-13T16:48:46.669Z"},{id:"3b76",name:"Caravan Palace - Miracle",description:"==================================================\r\nSong: Caravan Palace - Miracle\r\nBPM: 120\r\nNote jump speed: 10 - 16\r\nVersions: Expert+, Expert, Hard, Normal\r\n=============================\r\nLove this new track from Caravan Palace",uploader:{id:4287543,name:"therealzeroz",uniqueSet:!0,hash:"5cff0b7498cc5a672c85037b",avatar:"https://cdn.beatsaver.com/avatar/182672808961114112.png",type:"DISCORD"},metadata:{bpm:100,duration:221,songName:"Caravan Palace - Miracle",songSubName:"",songAuthorName:"TheRealZeroz",levelAuthorName:"TheRealZeroz"},stats:{plays:0,downloads:8954,upvotes:5074,downvotes:107,score:.9428},uploaded:"2019-03-04T12:15:10Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"29e5877ec735378b8ba3751dc8896bf63a43c525",key:"3b76",state:"Published",createdAt:"2019-03-04T12:15:10Z",sageScore:3,diffs:[{njs:10,offset:0,notes:326,bombs:0,obstacles:4,nps:1.793,length:303,characteristic:"Standard",difficulty:"Normal",events:4399,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:181.8,paritySummary:{errors:38,warns:2,resets:0}},{njs:13,offset:0,notes:562,bombs:0,obstacles:0,nps:3.081,length:304,characteristic:"Standard",difficulty:"Hard",events:4399,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:182.4,paritySummary:{errors:12,warns:13,resets:0}},{njs:14,offset:0,notes:1034,bombs:0,obstacles:8,nps:5.669,length:304,characteristic:"Standard",difficulty:"Expert",events:4399,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:182.4,paritySummary:{errors:20,warns:2,resets:0}},{njs:16,offset:0,notes:1156,bombs:0,obstacles:9,nps:6.348,length:303.5,characteristic:"Standard",difficulty:"ExpertPlus",events:4399,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:182.1,paritySummary:{errors:36,warns:13,resets:0}}],downloadURL:"https://cdn.beatsaver.com/29e5877ec735378b8ba3751dc8896bf63a43c525.zip",coverURL:"https://cdn.beatsaver.com/29e5877ec735378b8ba3751dc8896bf63a43c525.jpg",previewURL:"https://cdn.beatsaver.com/29e5877ec735378b8ba3751dc8896bf63a43c525.mp3"}],createdAt:"2019-03-04T12:15:10Z",updatedAt:"2019-03-04T12:15:10Z",lastPublishedAt:"2019-03-04T12:15:10Z"},{id:"5062",name:"Witchcraft - Pendulum",description:"I have been working on this chart for a while now, finally able to finish it off. :) Enjoy!\r\nhttps://www.youtube.com/watch?v=mlaH4Dqjv1U",uploader:{id:4285982,name:"downycat",uniqueSet:!0,hash:"5cff0b7398cc5a672c84ede5",avatar:"https://cdn.beatsaver.com/avatar/173538829888782336.png",type:"DISCORD"},metadata:{bpm:174,duration:254,songName:"Witchcraft",songSubName:"Pendulum",songAuthorName:"DownyCat",levelAuthorName:"downycat"},stats:{plays:0,downloads:9888,upvotes:4287,downvotes:83,score:.9424},uploaded:"2019-06-01T07:59:40Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"015170851544c832ee4ac858ca6b3425677b1696",key:"5062",state:"Published",createdAt:"2019-06-01T07:59:40Z",sageScore:4,diffs:[{njs:10,offset:0,notes:372,bombs:0,obstacles:33,nps:1.515,length:712,characteristic:"Standard",difficulty:"Normal",events:8298,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:245.517,paritySummary:{errors:13,warns:21,resets:0}},{njs:12,offset:0,notes:750,bombs:0,obstacles:53,nps:3.055,length:712,characteristic:"Standard",difficulty:"Hard",events:8298,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:245.517,paritySummary:{errors:8,warns:7,resets:0}},{njs:14,offset:0,notes:1213,bombs:0,obstacles:36,nps:4.941,length:712,characteristic:"Standard",difficulty:"Expert",events:8298,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:245.517,paritySummary:{errors:10,warns:5,resets:0}},{njs:18,offset:0,notes:1401,bombs:0,obstacles:28,nps:5.706,length:712,characteristic:"Standard",difficulty:"ExpertPlus",events:8298,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:245.517,paritySummary:{errors:7,warns:8,resets:0}}],downloadURL:"https://cdn.beatsaver.com/015170851544c832ee4ac858ca6b3425677b1696.zip",coverURL:"https://cdn.beatsaver.com/015170851544c832ee4ac858ca6b3425677b1696.jpg",previewURL:"https://cdn.beatsaver.com/015170851544c832ee4ac858ca6b3425677b1696.mp3"}],createdAt:"2019-06-01T07:59:40Z",updatedAt:"2019-06-01T07:59:40Z",lastPublishedAt:"2019-06-01T07:59:40Z"},{id:"6891",name:"Panic! At The Disco - I Write Sins Not Tragedies",description:"PepeJamJam \nAll Difficulties",uploader:{id:4285107,name:"kikaeaeon",uniqueSet:!0,hash:"5cff0b7498cc5a672c85109b",avatar:"https://cdn.beatsaver.com/avatar/103715469822816256.png",type:"DISCORD"},metadata:{bpm:170,duration:188,songName:"I Write Sins Not Tragedies",songSubName:"",songAuthorName:"Panic! At the Disco",levelAuthorName:"KikaeAeon"},stats:{plays:0,downloads:17370,upvotes:5712,downvotes:132,score:.9423},uploaded:"2019-10-08T04:14:47.579Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"7ec6ee195a2d577d5b924dad8b1a25b881aa2d27",key:"6891",state:"Published",createdAt:"2019-10-08T04:14:47.579Z",sageScore:8,diffs:[{njs:10,offset:0,notes:271,bombs:0,obstacles:21,nps:1.519,length:505.5,characteristic:"Standard",difficulty:"Easy",events:1193,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:178.412,paritySummary:{errors:15,warns:9,resets:0}},{njs:10,offset:0,notes:312,bombs:0,obstacles:21,nps:1.749,length:505.5,characteristic:"Standard",difficulty:"Normal",events:1193,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:178.412,paritySummary:{errors:18,warns:10,resets:0}},{njs:10,offset:0,notes:487,bombs:0,obstacles:41,nps:2.73,length:505.5,characteristic:"Standard",difficulty:"Hard",events:1193,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:178.412,paritySummary:{errors:32,warns:34,resets:0}},{njs:12,offset:0,notes:690,bombs:80,obstacles:29,nps:3.867,length:505.5,characteristic:"Standard",difficulty:"Expert",events:1193,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:178.412,paritySummary:{errors:11,warns:6,resets:2}},{njs:15,offset:0,notes:969,bombs:0,obstacles:17,nps:5.431,length:505.5,characteristic:"Standard",difficulty:"ExpertPlus",events:1193,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:178.412,paritySummary:{errors:9,warns:20,resets:0}}],downloadURL:"https://cdn.beatsaver.com/7ec6ee195a2d577d5b924dad8b1a25b881aa2d27.zip",coverURL:"https://cdn.beatsaver.com/7ec6ee195a2d577d5b924dad8b1a25b881aa2d27.jpg",previewURL:"https://cdn.beatsaver.com/7ec6ee195a2d577d5b924dad8b1a25b881aa2d27.mp3"}],createdAt:"2019-10-08T04:14:47.579Z",updatedAt:"2019-10-08T04:14:47.579Z",lastPublishedAt:"2019-10-08T04:14:47.579Z"},{id:"1eb2",name:"Pumped Up Kicks - Foster the People",description:"128 BPM / 3:27 Runtime\r\nNormal / 381 Notes\r\nHard / 492 Notes\r\nExpert / 714 Notes\r\n\r\nGameplay:\r\nhttps://youtu.be/oo1EgLAOB1s\r\n\r\nListen to the song:\r\nhttps://www.youtube.com/watch?v=SDTZ7iX4vTQ",uploader:{id:4284981,name:"skylerwallace",uniqueSet:!0,hash:"5cff0b7298cc5a672c84ea67",avatar:"https://cdn.beatsaver.com/avatar/398344856868487168.png",type:"DISCORD"},metadata:{bpm:128,duration:207,songName:"Pumped Up Kicks",songSubName:"Foster The People",songAuthorName:"Skyler Wallace",levelAuthorName:"skylerwallace"},stats:{plays:0,downloads:17347,upvotes:6240,downvotes:151,score:.9423},uploaded:"2018-11-07T04:34:04Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"b0f6224a2717b97a4538790a32eb618acae1f57a",key:"1eb2",state:"Published",createdAt:"2018-11-07T04:34:04Z",sageScore:6,diffs:[{njs:10,offset:0,notes:381,bombs:0,obstacles:41,nps:1.926,length:422,characteristic:"Standard",difficulty:"Normal",events:1994,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:197.813,paritySummary:{errors:82,warns:64,resets:0}},{njs:10,offset:0,notes:492,bombs:23,obstacles:16,nps:2.481,length:423,characteristic:"Standard",difficulty:"Hard",events:1994,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:198.281,paritySummary:{errors:58,warns:62,resets:4}},{njs:12,offset:0,notes:714,bombs:8,obstacles:34,nps:3.601,length:423,characteristic:"Standard",difficulty:"Expert",events:1994,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:198.281,paritySummary:{errors:69,warns:63,resets:1}}],downloadURL:"https://cdn.beatsaver.com/b0f6224a2717b97a4538790a32eb618acae1f57a.zip",coverURL:"https://cdn.beatsaver.com/b0f6224a2717b97a4538790a32eb618acae1f57a.jpg",previewURL:"https://cdn.beatsaver.com/b0f6224a2717b97a4538790a32eb618acae1f57a.mp3"}],createdAt:"2018-11-07T04:34:04Z",updatedAt:"2018-11-07T04:34:04Z",lastPublishedAt:"2018-11-07T04:34:04Z"},{id:"368c",name:"Harajuku Iyahoi - Kyary Pamyu Pamyu",description:"All difficulties relatively close to OST standards.\n\nThanks to n3tman, Sehria, OmniOmega, CyanSnow, Aeroluna, and Expo for their help.\n\nhttps://youtu.be/YqptqS0vIIA\nFollow me on Twitter u won't\nhttps://twitter.com/aggrogahu",uploader:{id:4284613,name:"aggrogahu",uniqueSet:!0,hash:"5cff0b7398cc5a672c84fdad",avatar:"https://cdn.beatsaver.com/avatar/158363872649150464.png",type:"DISCORD"},metadata:{bpm:128,duration:218,songName:"Harajuku Iyahoi",songSubName:"Kyary Pamyu Pamyu",songAuthorName:"aggrogahu",levelAuthorName:"aggrogahu"},stats:{plays:0,downloads:4783,upvotes:2027,downvotes:17,score:.9421},uploaded:"2019-02-15T23:55:37Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"8c392c31aeadb55eebeb978c09fa79857380f15c",key:"368c",state:"Published",createdAt:"2019-02-15T23:55:37Z",sageScore:4,diffs:[{njs:9,offset:0,notes:214,bombs:0,obstacles:15,nps:1.057,length:432,characteristic:"Standard",difficulty:"Easy",events:969,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:202.5,paritySummary:{errors:59,warns:16,resets:0}},{njs:9,offset:0,notes:306,bombs:0,obstacles:15,nps:1.511,length:432,characteristic:"Standard",difficulty:"Normal",events:969,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:202.5,paritySummary:{errors:68,warns:44,resets:0}},{njs:11,offset:0,notes:469,bombs:0,obstacles:21,nps:2.316,length:432,characteristic:"Standard",difficulty:"Hard",events:969,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:202.5,paritySummary:{errors:68,warns:98,resets:0}},{njs:12,offset:0,notes:685,bombs:6,obstacles:25,nps:3.383,length:432,characteristic:"Standard",difficulty:"Expert",events:969,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:202.5,paritySummary:{errors:85,warns:76,resets:2}}],downloadURL:"https://cdn.beatsaver.com/8c392c31aeadb55eebeb978c09fa79857380f15c.zip",coverURL:"https://cdn.beatsaver.com/8c392c31aeadb55eebeb978c09fa79857380f15c.jpg",previewURL:"https://cdn.beatsaver.com/8c392c31aeadb55eebeb978c09fa79857380f15c.mp3"}],createdAt:"2019-02-15T23:55:37Z",updatedAt:"2019-02-15T23:55:37Z",lastPublishedAt:"2019-02-15T23:55:37Z"},{id:"141",name:"GANGNAM STYLE",description:"Expert, Hard, and Normal tracks. I tried my best to setup the chorus charts to allow you to mimic the classic dance moves. I think it matches up quite nicely. I hope you have as much fun playing as I did making this! Enjoy!",uploader:{id:41378,name:"greatyazer",uniqueSet:!0,hash:"5cff0b7298cc5a672c84ea71",avatar:"https://www.gravatar.com/avatar/5cff0b7298cc5a672c84ea71?d=retro",type:"SIMPLE"},metadata:{bpm:132,duration:219,songName:"Gangnam Style",songSubName:"PSY",songAuthorName:"GreatYazer",levelAuthorName:"greatyazer"},stats:{plays:0,downloads:35740,upvotes:21669,downvotes:788,score:.9421},uploaded:"2018-05-20T09:59:02Z",automapper:!1,ranked:!0,qualified:!1,versions:[{hash:"8e7e553099436af31564adf1977a5ec42a61cfff",key:"141",state:"Published",createdAt:"2018-05-20T09:59:02Z",sageScore:5,diffs:[{njs:10,offset:0,notes:415,bombs:4,obstacles:42,nps:2.02,length:452,characteristic:"Standard",difficulty:"Normal",events:735,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:205.455,paritySummary:{errors:191,warns:17,resets:0},stars:1.15},{njs:10,offset:0,notes:695,bombs:40,obstacles:94,nps:3.383,length:452,characteristic:"Standard",difficulty:"Hard",events:735,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:205.455,paritySummary:{errors:275,warns:23,resets:0}},{njs:10,offset:0,notes:932,bombs:50,obstacles:103,nps:4.536,length:452,characteristic:"Standard",difficulty:"Expert",events:735,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:205.455,paritySummary:{errors:332,warns:34,resets:0}}],downloadURL:"https://cdn.beatsaver.com/8e7e553099436af31564adf1977a5ec42a61cfff.zip",coverURL:"https://cdn.beatsaver.com/8e7e553099436af31564adf1977a5ec42a61cfff.jpg",previewURL:"https://cdn.beatsaver.com/8e7e553099436af31564adf1977a5ec42a61cfff.mp3"}],createdAt:"2018-05-20T09:59:02Z",updatedAt:"2018-05-20T09:59:02Z",lastPublishedAt:"2018-05-20T09:59:02Z"},{id:"319f",name:"Fall Out Boy - My songs know what you did in the dark (Light 'em up)",description:"Had a bit of time off lately so I went and made a other map. This time it's Fall Out Boy!\r\nI realise a map had been made for this track already, but I thought I'd give my take on it too seeing as its such a good song ;)\r\nAll difficulties are included from Easy to Expert so enjoy! :)\r\n\r\nUpdate: \r\nDecided to bite the bullet here and do an update. Big thanks for Heisenbergirl for pointing out the NJS felt off. Playing around with it I've now raised it to 13 (from 12) and learnt a valuable skill when it comes to mapping. Basically the NJS spaces out the notes a bit more so makes it easier to read.\r\nI also adjusted a couple of the opening notes on Hard because I didn't really like the way that they flowed.\r\nFinally just want to apologise to everyone who's worked hard on a score or left a review. It sucks to have to reset it like this but it did need the update.\r\n\r\nVideo: https://www.youtube.com/watch?v=iZMvCvyarYA",uploader:{id:4785,name:"stumi",uniqueSet:!1,hash:"5cff0b7398cc5a672c84f720",avatar:"https://www.gravatar.com/avatar/5cff0b7398cc5a672c84f720?d=retro",type:"SIMPLE"},metadata:{bpm:152,duration:188,songName:"My songs know what you did in the dark",songSubName:"Fall Out Boy",songAuthorName:"Stumi",levelAuthorName:"stumi"},stats:{plays:0,downloads:15797,upvotes:5260,downvotes:119,score:.9419},uploaded:"2019-01-27T13:00:05Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"5b53a3bede4fd8ee0950d0c5ba2dbbff73b6d127",key:"319f",state:"Published",createdAt:"2019-01-27T13:00:05Z",sageScore:6,diffs:[{njs:10,offset:0,notes:243,bombs:4,obstacles:93,nps:1.362,length:452,characteristic:"Standard",difficulty:"Easy",events:1723,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:178.421,paritySummary:{errors:23,warns:13,resets:0}},{njs:10,offset:0,notes:328,bombs:4,obstacles:95,nps:1.838,length:452,characteristic:"Standard",difficulty:"Normal",events:1723,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:178.421,paritySummary:{errors:28,warns:28,resets:2}},{njs:11,offset:0,notes:514,bombs:4,obstacles:75,nps:2.881,length:452,characteristic:"Standard",difficulty:"Hard",events:1725,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:178.421,paritySummary:{errors:25,warns:18,resets:1}},{njs:13,offset:0,notes:693,bombs:8,obstacles:58,nps:3.884,length:452,characteristic:"Standard",difficulty:"Expert",events:1726,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:178.421,paritySummary:{errors:27,warns:21,resets:4}}],downloadURL:"https://cdn.beatsaver.com/5b53a3bede4fd8ee0950d0c5ba2dbbff73b6d127.zip",coverURL:"https://cdn.beatsaver.com/5b53a3bede4fd8ee0950d0c5ba2dbbff73b6d127.jpg",previewURL:"https://cdn.beatsaver.com/5b53a3bede4fd8ee0950d0c5ba2dbbff73b6d127.mp3"}],createdAt:"2019-01-27T13:00:05Z",updatedAt:"2019-01-27T13:00:05Z",lastPublishedAt:"2019-01-27T13:00:05Z"},{id:"ac0a",name:"Hornet (Hollow Knight OST)",description:'This song really loses something without Hornet\'s war cries of "SHAA" and "HEGAALE" every three seconds. It also really gains something, because without that you can actually hear the music for once.',uploader:{id:4285065,name:"skaiamechanic",uniqueSet:!0,hash:"5e455654470a8200067c9bf9",avatar:"https://cdn.beatsaver.com/avatar/274999097361170432.png",type:"DISCORD"},metadata:{bpm:145,duration:168,songName:"Hornet",songSubName:"Hollow Knight",songAuthorName:"Christopher Larkin",levelAuthorName:"SkaiaMechanic"},stats:{plays:0,downloads:6639,upvotes:2339,downvotes:26,score:.9418},uploaded:"2020-05-29T18:41:14.740Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"48f5d0ddc8c6a006b5633c828039912744393877",key:"ac0a",state:"Published",createdAt:"2020-05-29T18:41:14.740Z",sageScore:5,diffs:[{njs:15,offset:0,notes:695,bombs:0,obstacles:12,nps:4.266,length:393.75,characteristic:"Standard",difficulty:"Hard",events:2513,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:162.931,paritySummary:{errors:43,warns:55,resets:0}},{njs:18,offset:0,notes:720,bombs:0,obstacles:33,nps:4.419,length:393.75,characteristic:"Standard",difficulty:"Expert",events:2513,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:162.931,paritySummary:{errors:27,warns:35,resets:0}}],downloadURL:"https://cdn.beatsaver.com/48f5d0ddc8c6a006b5633c828039912744393877.zip",coverURL:"https://cdn.beatsaver.com/48f5d0ddc8c6a006b5633c828039912744393877.jpg",previewURL:"https://cdn.beatsaver.com/48f5d0ddc8c6a006b5633c828039912744393877.mp3"}],createdAt:"2020-05-29T18:41:14.740Z",updatedAt:"2020-05-29T18:41:14.740Z",lastPublishedAt:"2020-05-29T18:41:14.740Z"},{id:"176c",name:"24K Magic - Bruno Mars",description:"We're taking it back old school... It's time to DANCE, baby!\r\nDifficulties: Expert, Hard, Normal\r\nYouTube Preview: https://youtu.be/IA4W-Z7KXSo",uploader:{id:30311,name:"bennydabeast",uniqueSet:!0,hash:"5cff0b7298cc5a672c84e98d",avatar:"https://cdn.beatsaver.com/avatar/30311.jpg",type:"SIMPLE"},metadata:{bpm:107,duration:228,songName:"24K Magic",songSubName:"Bruno Mars",songAuthorName:"BennyDaBeast",levelAuthorName:"bennydabeast"},stats:{plays:0,downloads:13810,upvotes:6648,downvotes:174,score:.9412},uploaded:"2018-09-27T01:05:07Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"b9e05baa59f3ea5c97c5ae82766783d895249c61",key:"176c",state:"Published",createdAt:"2018-09-27T01:05:07Z",sageScore:6,diffs:[{njs:10,offset:0,notes:215,bombs:0,obstacles:38,nps:1.08,length:355,characteristic:"Standard",difficulty:"Normal",events:1484,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:199.065,paritySummary:{errors:49,warns:40,resets:0}},{njs:10,offset:0,notes:439,bombs:0,obstacles:40,nps:2.205,length:355,characteristic:"Standard",difficulty:"Hard",events:1480,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:199.065,paritySummary:{errors:44,warns:84,resets:0}},{njs:10,offset:0,notes:592,bombs:0,obstacles:52,nps:2.974,length:355,characteristic:"Standard",difficulty:"Expert",events:1480,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:199.065,paritySummary:{errors:70,warns:116,resets:0}}],downloadURL:"https://cdn.beatsaver.com/b9e05baa59f3ea5c97c5ae82766783d895249c61.zip",coverURL:"https://cdn.beatsaver.com/b9e05baa59f3ea5c97c5ae82766783d895249c61.jpg",previewURL:"https://cdn.beatsaver.com/b9e05baa59f3ea5c97c5ae82766783d895249c61.mp3"}],createdAt:"2018-09-27T01:05:07Z",updatedAt:"2018-09-27T01:05:07Z",lastPublishedAt:"2018-09-27T01:05:07Z"},{id:"6ea9",name:"Down Under - Men At Work",description:"Here's another great 80's anthem - Down Under, by Men At Work. I really enjoyed mapping this song. So much so, that I decided to do a full spread from Expert Plus to Easy. This is a really fun map to play whatever your skill level. I hope you enjoy it as much as I do!\n\nhttps://youtu.be/G0gTegU32ng",uploader:{id:78593,name:"techbutterfly",uniqueSet:!0,hash:"5cff0b7798cc5a672c8566f7",avatar:"https://cdn.beatsaver.com/avatar/527111497617506304.png",type:"DISCORD"},metadata:{bpm:107,duration:210,songName:"Down Under",songSubName:"",songAuthorName:"Men At Work",levelAuthorName:"TechButterfly"},stats:{plays:0,downloads:12452,upvotes:3609,downvotes:67,score:.9411},uploaded:"2019-11-07T20:34:53.687Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"c9ceaf7a8a7cea8381d08618c66110abbc4844f9",key:"6ea9",state:"Published",createdAt:"2019-11-07T20:34:53.687Z",sageScore:6,diffs:[{njs:12,offset:0,notes:249,bombs:0,obstacles:0,nps:1.22,length:364,characteristic:"Standard",difficulty:"Easy",events:1970,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:204.112,paritySummary:{errors:59,warns:52,resets:0}},{njs:12,offset:0,notes:416,bombs:0,obstacles:0,nps:2.038,length:364,characteristic:"Standard",difficulty:"Normal",events:1970,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:204.112,paritySummary:{errors:85,warns:84,resets:0}},{njs:15,offset:0,notes:613,bombs:0,obstacles:0,nps:3.003,length:364,characteristic:"Standard",difficulty:"Hard",events:1970,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:204.112,paritySummary:{errors:54,warns:97,resets:0}},{njs:16,offset:0,notes:753,bombs:0,obstacles:0,nps:3.689,length:364,characteristic:"Standard",difficulty:"Expert",events:1970,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:204.112,paritySummary:{errors:47,warns:56,resets:0}},{njs:17,offset:.8,notes:938,bombs:0,obstacles:0,nps:4.596,length:364,characteristic:"Standard",difficulty:"ExpertPlus",events:1970,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:204.112,paritySummary:{errors:60,warns:36,resets:0}}],downloadURL:"https://cdn.beatsaver.com/c9ceaf7a8a7cea8381d08618c66110abbc4844f9.zip",coverURL:"https://cdn.beatsaver.com/c9ceaf7a8a7cea8381d08618c66110abbc4844f9.jpg",previewURL:"https://cdn.beatsaver.com/c9ceaf7a8a7cea8381d08618c66110abbc4844f9.mp3"}],createdAt:"2019-11-07T20:34:53.687Z",updatedAt:"2019-11-07T20:34:53.687Z",lastPublishedAt:"2019-11-07T20:34:53.687Z"},{id:"195f",name:"Under The Sea (Little Mermaid) - Samuel E. Wright",description:'"What do they got? A lot of sand. We got a hot crustacean band! Each little clam here know how to jam here, under the sea!"\r\nDifficulties: Expert+, Expert, Hard, Normal\r\nYouTube Preview: https://youtu.be/h6eMPlGUZsw',uploader:{id:30311,name:"bennydabeast",uniqueSet:!0,hash:"5cff0b7298cc5a672c84e98d",avatar:"https://cdn.beatsaver.com/avatar/30311.jpg",type:"SIMPLE"},metadata:{bpm:200,duration:194,songName:"Under The Sea",songSubName:"Samuel E. Wright",songAuthorName:"BennyDaBeast",levelAuthorName:"bennydabeast"},stats:{plays:0,downloads:15120,upvotes:6093,downvotes:156,score:.9408},uploaded:"2018-10-08T23:44:34Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"f745bac45c618fa2c49a0ee0c383f2a6cb356a78",key:"195f",state:"Published",createdAt:"2018-10-08T23:44:34Z",sageScore:4,diffs:[{njs:10,offset:0,notes:277,bombs:0,obstacles:9,nps:1.464,length:630,characteristic:"Standard",difficulty:"Normal",events:1406,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:189,paritySummary:{errors:31,warns:31,resets:0}},{njs:10,offset:0,notes:317,bombs:0,obstacles:9,nps:1.673,length:631,characteristic:"Standard",difficulty:"Hard",events:1406,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:189.3,paritySummary:{errors:47,warns:28,resets:0}},{njs:10,offset:0,notes:541,bombs:0,obstacles:9,nps:2.855,length:631,characteristic:"Standard",difficulty:"Expert",events:1406,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:189.3,paritySummary:{errors:61,warns:89,resets:0}},{njs:10,offset:0,notes:848,bombs:0,obstacles:9,nps:4.475,length:631,characteristic:"Standard",difficulty:"ExpertPlus",events:1406,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:189.3,paritySummary:{errors:86,warns:112,resets:0}}],downloadURL:"https://cdn.beatsaver.com/f745bac45c618fa2c49a0ee0c383f2a6cb356a78.zip",coverURL:"https://cdn.beatsaver.com/f745bac45c618fa2c49a0ee0c383f2a6cb356a78.jpg",previewURL:"https://cdn.beatsaver.com/f745bac45c618fa2c49a0ee0c383f2a6cb356a78.mp3"}],createdAt:"2018-10-08T23:44:34Z",updatedAt:"2018-10-08T23:44:34Z",lastPublishedAt:"2018-10-08T23:44:34Z"},{id:"849a",name:"Darude Sandstorm",description:"du du du du du\nI originally mapped this back in May 2018, and then again in June 2018. The Beatsaver site migration yeeted the map, so I've restored the two original maps as well as 5 new standard difficulties, 5 one saber difficulties, and one 360 level. Fun Fact: Freeek originally got the idea to create Lightmap because he hated the lighting in the original Sandstorm map...so I created a new version of Lightmap and used that to light the new difficulties.\n\nStandard\nEasy - 307 notes (1.37 NPS)\nNormal - 505 notes (2.25 NPS)\nHard - 756 notes (3.38 NPS)\nExpert - 1120 notes (5.00 NPS)\nExpert+ - 1358 notes (6.06 NPS)\n\nOne Saber\nEasy - 192 notes (0.86 NPS)\nNormal - 302 notes (1.35 NPS)\nHard - 508 notes (2.27 NPS)\nExpert - 734 notes (3.28 NPS)\nExpert+ - 1112 notes (4.96 NPS)\n\nNo Arrows\nOriginal Expert - 1151 notes (5.14 NPS)\nOriginal Expert+ - 1141 notes (5.09 NPS)\n\n360\nExpert+ - 1359 notes (6.07 NPS)\n\nGameplay: Coming Soon\nSong: https://youtu.be/y6120QOlsfU",uploader:{id:4284981,name:"skylerwallace",uniqueSet:!0,hash:"5cff0b7298cc5a672c84ea67",avatar:"https://cdn.beatsaver.com/avatar/398344856868487168.png",type:"DISCORD"},metadata:{bpm:136,duration:224,songName:"Sandstorm",songSubName:"",songAuthorName:"Darude",levelAuthorName:"Skyler Wallace"},stats:{plays:0,downloads:29265,upvotes:10584,downvotes:337,score:.9406},uploaded:"2020-02-06T04:55:40.715Z",automapper:!1,ranked:!0,qualified:!1,versions:[{hash:"580eb7d1614a35d192722f748400c9896ac9527d",key:"849a",state:"Published",createdAt:"2020-02-06T04:55:40.715Z",sageScore:6,diffs:[{njs:10,offset:-1,notes:307,bombs:0,obstacles:15,nps:1.407,length:496,characteristic:"Standard",difficulty:"Easy",events:13998,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:218.824,paritySummary:{errors:154,warns:44,resets:0},stars:.89},{njs:10,offset:-1,notes:505,bombs:0,obstacles:15,nps:2.314,length:496,characteristic:"Standard",difficulty:"Normal",events:13998,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:218.824,paritySummary:{errors:143,warns:46,resets:0},stars:1.42},{njs:12,offset:.5,notes:756,bombs:0,obstacles:27,nps:3.464,length:496,characteristic:"Standard",difficulty:"Hard",events:13998,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:218.824,paritySummary:{errors:26,warns:18,resets:0},stars:2.01},{njs:15,offset:0,notes:1120,bombs:0,obstacles:43,nps:5.133,length:496,characteristic:"Standard",difficulty:"Expert",events:13998,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:218.824,paritySummary:{errors:12,warns:6,resets:0},stars:4.2},{njs:17,offset:-.25,notes:1358,bombs:18,obstacles:23,nps:6.223,length:496,characteristic:"Standard",difficulty:"ExpertPlus",events:13969,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:218.824,paritySummary:{errors:4,warns:6,resets:0},stars:5.95},{njs:10,offset:-1,notes:192,bombs:0,obstacles:13,nps:.88,length:496,characteristic:"OneSaber",difficulty:"Easy",events:13998,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:218.824,paritySummary:{errors:88,warns:26,resets:0}},{njs:10,offset:-1,notes:302,bombs:0,obstacles:15,nps:1.384,length:496,characteristic:"OneSaber",difficulty:"Normal",events:13998,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:218.824,paritySummary:{errors:65,warns:74,resets:0}},{njs:12,offset:.5,notes:508,bombs:0,obstacles:15,nps:2.328,length:496,characteristic:"OneSaber",difficulty:"Hard",events:13998,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:218.824,paritySummary:{errors:53,warns:64,resets:0}},{njs:15,offset:0,notes:734,bombs:0,obstacles:24,nps:3.364,length:496,characteristic:"OneSaber",difficulty:"Expert",events:13998,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:218.824,paritySummary:{errors:4,warns:5,resets:0}},{njs:17,offset:-.25,notes:1112,bombs:0,obstacles:41,nps:5.096,length:496,characteristic:"OneSaber",difficulty:"ExpertPlus",events:13998,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:218.824,paritySummary:{errors:5,warns:9,resets:0}},{njs:12,offset:.5,notes:1151,bombs:0,obstacles:19,nps:4.089,length:639.75,characteristic:"NoArrows",difficulty:"Expert",events:1080,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:282.243,paritySummary:{errors:87,warns:41,resets:0}},{njs:15,offset:0,notes:1141,bombs:0,obstacles:31,nps:4.054,length:639.75,characteristic:"NoArrows",difficulty:"ExpertPlus",events:2315,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:282.243,paritySummary:{errors:129,warns:34,resets:0}},{njs:17,offset:0,notes:1359,bombs:0,obstacles:27,nps:6.228,length:496,characteristic:"360Degree",difficulty:"ExpertPlus",events:14547,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:218.824,paritySummary:{errors:4,warns:6,resets:0}}],downloadURL:"https://cdn.beatsaver.com/580eb7d1614a35d192722f748400c9896ac9527d.zip",coverURL:"https://cdn.beatsaver.com/580eb7d1614a35d192722f748400c9896ac9527d.jpg",previewURL:"https://cdn.beatsaver.com/580eb7d1614a35d192722f748400c9896ac9527d.mp3"}],createdAt:"2020-02-06T04:55:40.715Z",updatedAt:"2020-02-06T04:55:40.715Z",lastPublishedAt:"2020-02-06T04:55:40.715Z"},{id:"4858",name:"Papercut - Linkin Park",description:"YouTube:\r\nhttps://www.youtube.com/watch?v=vjVkXlxsO8Q",uploader:{id:27983,name:"heisenbergirl",uniqueSet:!0,hash:"5cff0b7298cc5a672c84ec30",avatar:"https://www.gravatar.com/avatar/5cff0b7298cc5a672c84ec30?d=retro",type:"SIMPLE"},metadata:{bpm:150,duration:187,songName:"Papercut",songSubName:"Linkin Park",songAuthorName:"Heisenberg",levelAuthorName:"heisenbergirl"},stats:{plays:0,downloads:9559,upvotes:4539,downvotes:101,score:.9406},uploaded:"2019-04-25T17:52:09Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"431ffaa53a1e45ffab6c81a895e456f6aad1e038",key:"4858",state:"Published",createdAt:"2019-04-25T17:52:09Z",sageScore:6,diffs:[{njs:12,offset:0,notes:634,bombs:0,obstacles:96,nps:3.534,length:449,characteristic:"Standard",difficulty:"Hard",events:2316,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:179.6,paritySummary:{errors:40,warns:45,resets:0}},{njs:15,offset:0,notes:842,bombs:0,obstacles:90,nps:4.694,length:449,characteristic:"Standard",difficulty:"Expert",events:2316,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:179.6,paritySummary:{errors:16,warns:22,resets:0}},{njs:18,offset:0,notes:993,bombs:0,obstacles:66,nps:5.535,length:449,characteristic:"Standard",difficulty:"ExpertPlus",events:2327,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:179.6,paritySummary:{errors:31,warns:63,resets:0}}],downloadURL:"https://cdn.beatsaver.com/431ffaa53a1e45ffab6c81a895e456f6aad1e038.zip",coverURL:"https://cdn.beatsaver.com/431ffaa53a1e45ffab6c81a895e456f6aad1e038.jpg",previewURL:"https://cdn.beatsaver.com/431ffaa53a1e45ffab6c81a895e456f6aad1e038.mp3"}],createdAt:"2019-04-25T17:52:09Z",updatedAt:"2019-04-25T17:52:09Z",lastPublishedAt:"2019-04-25T17:52:09Z"},{id:"5d8d",name:"New Game - Nitro Fun",description:"Dancey E+, not very challenging.\n\nSee it in action: https://www.youtube.com/watch?v=IddrPmb4poA\n\nThank you to my playtesters:\n\nQTpop (https://www.twitch.tv/qtpop)\nTheRainbowGamerGirl (https://www.twitch.tv/therainbowgamergirl)",uploader:{id:38202,name:"fafurion",uniqueSet:!1,hash:"5cff0b7398cc5a672c84f945",avatar:"https://www.gravatar.com/avatar/5cff0b7398cc5a672c84f945?d=retro",type:"SIMPLE"},metadata:{bpm:128,duration:261,songName:"New Game",songSubName:"",songAuthorName:"Nitro Fun",levelAuthorName:"Fafurion"},stats:{plays:0,downloads:4880,upvotes:2873,downvotes:46,score:.9404},uploaded:"2019-08-17T15:26:08.685Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"310694f2ff8d129d4e64192251653caffdc65b62",key:"5d8d",state:"Published",createdAt:"2019-08-17T15:26:08.685Z",sageScore:5,diffs:[{njs:16,offset:0,notes:1229,bombs:0,obstacles:37,nps:4.824,length:543.5,characteristic:"Standard",difficulty:"ExpertPlus",events:7711,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:254.766,paritySummary:{errors:45,warns:81,resets:0}}],downloadURL:"https://cdn.beatsaver.com/310694f2ff8d129d4e64192251653caffdc65b62.zip",coverURL:"https://cdn.beatsaver.com/310694f2ff8d129d4e64192251653caffdc65b62.jpg",previewURL:"https://cdn.beatsaver.com/310694f2ff8d129d4e64192251653caffdc65b62.mp3"}],createdAt:"2019-08-17T15:26:08.685Z",updatedAt:"2019-08-17T15:26:08.685Z",lastPublishedAt:"2019-08-17T15:26:08.685Z"},{id:"2b1a",name:"Fallen Kingdom [Viva la Vida Minecraft Parody] - CaptainSparklez ft. TryHardNinja",description:"As requested by @ScrewBedtime and @Anonymous_Food: Fallen Kingdom, CaptainSparklez's minecraft parody of Viva la Vida. The parody's song arrangement is slightly different than the original so I had to remap some parts. This map goes out to all the 12 year olds that will listen to this instead of the original all because it has Minecraft lol. For the full experience play this with a minecraft saber and platform.",uploader:{id:58338,name:"Joetastic",uniqueSet:!0,hash:"5cff0b7498cc5a672c85050e",avatar:"https://cdn.beatsaver.com/avatar/227767566402191360.png",type:"DISCORD"},metadata:{bpm:138,duration:255,songName:"Fallen Kingdom",songSubName:"CaptainSparklez ft. TryHardNinja",songAuthorName:"Joetastic",levelAuthorName:"Joetastic"},stats:{plays:0,downloads:8390,upvotes:4332,downvotes:95,score:.9403},uploaded:"2019-01-05T10:20:33Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"06150c7c34af95f53f5ed8fac5659c70649a07f0",key:"2b1a",state:"Published",createdAt:"2019-01-05T10:20:33Z",sageScore:4,diffs:[{njs:14,offset:0,notes:925,bombs:0,obstacles:43,nps:4.037,length:527,characteristic:"Standard",difficulty:"Hard",events:727,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:229.13,paritySummary:{errors:40,warns:37,resets:0}}],downloadURL:"https://cdn.beatsaver.com/06150c7c34af95f53f5ed8fac5659c70649a07f0.zip",coverURL:"https://cdn.beatsaver.com/06150c7c34af95f53f5ed8fac5659c70649a07f0.jpg",previewURL:"https://cdn.beatsaver.com/06150c7c34af95f53f5ed8fac5659c70649a07f0.mp3"}],createdAt:"2019-01-05T10:20:33Z",updatedAt:"2019-01-05T10:20:33Z",lastPublishedAt:"2019-01-05T10:20:33Z"},{id:"4adb",name:"Deja Vu - Dave Rodgers (Initial D)",description:"Was requested to get this Ranked, so some minor changes to fit updates in Ranking criteria!\r\n\r\nNotes Per Second:\r\nEasy / 1.6\r\nNormal / 2\r\nHard / 2.6\r\nExpert / 3.6\r\nExpert+ / 4.2\r\n\r\nExpert+ Playthrough:\r\nhttps://streamable.com/pk918",uploader:{id:11373,name:"redmagi",uniqueSet:!0,hash:"5cff0b7298cc5a672c84e9d2",avatar:"https://www.gravatar.com/avatar/5cff0b7298cc5a672c84e9d2?d=retro",type:"SIMPLE"},metadata:{bpm:154,duration:105,songName:"Deja Vu (Short Ver.)",songSubName:"Dave Rodgers",songAuthorName:"Redmagi",levelAuthorName:"redmagi"},stats:{plays:0,downloads:24353,upvotes:10971,downvotes:358,score:.9402},uploaded:"2019-05-05T18:37:01Z",automapper:!1,ranked:!0,qualified:!1,versions:[{hash:"c9c15d3f3109a8f732b41b299ce84556bebf73ac",key:"4adb",state:"Published",createdAt:"2019-05-05T18:37:01Z",sageScore:8,diffs:[{njs:10,offset:1,notes:171,bombs:0,obstacles:11,nps:1.669,length:263,characteristic:"Standard",difficulty:"Easy",events:1439,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:102.468,paritySummary:{errors:9,warns:6,resets:0},stars:.95},{njs:12,offset:1,notes:211,bombs:45,obstacles:8,nps:2.059,length:263,characteristic:"Standard",difficulty:"Normal",events:1439,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:102.468,paritySummary:{errors:27,warns:26,resets:2},stars:1.29},{njs:14,offset:1,notes:281,bombs:56,obstacles:8,nps:2.742,length:263,characteristic:"Standard",difficulty:"Hard",events:1439,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:102.468,paritySummary:{errors:18,warns:28,resets:6},stars:1.92},{njs:15,offset:1,notes:382,bombs:24,obstacles:0,nps:3.728,length:263,characteristic:"Standard",difficulty:"Expert",events:1439,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:102.468,paritySummary:{errors:19,warns:36,resets:4},stars:2.68},{njs:18,offset:0,notes:446,bombs:32,obstacles:0,nps:4.353,length:263,characteristic:"Standard",difficulty:"ExpertPlus",events:1439,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:102.468,paritySummary:{errors:19,warns:56,resets:0},stars:4.46}],downloadURL:"https://cdn.beatsaver.com/c9c15d3f3109a8f732b41b299ce84556bebf73ac.zip",coverURL:"https://cdn.beatsaver.com/c9c15d3f3109a8f732b41b299ce84556bebf73ac.jpg",previewURL:"https://cdn.beatsaver.com/c9c15d3f3109a8f732b41b299ce84556bebf73ac.mp3"}],createdAt:"2019-05-05T18:37:01Z",updatedAt:"2019-05-05T18:37:01Z",lastPublishedAt:"2019-05-05T18:37:01Z"},{id:"4a47",name:"[Anniversary] Supernova - Laszlo [DownyCat]",description:"Part of the Anniversary Song Pack",uploader:{id:37070,name:"anniversaryteam",uniqueSet:!0,hash:"5cff0b7798cc5a672c8565a3",avatar:"https://www.gravatar.com/avatar/5cff0b7798cc5a672c8565a3?d=retro",type:"SIMPLE"},metadata:{bpm:128,duration:196,songName:"Supernova",songSubName:"Laszlo",songAuthorName:"DownyCat",levelAuthorName:"AnniversaryTeam"},stats:{plays:0,downloads:7974,upvotes:4371,downvotes:97,score:.9402},uploaded:"2019-05-03T14:10:59Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"17ad188a8dea7cff81f5f7c6720099a1e395b168",key:"4a47",state:"Published",createdAt:"2019-05-03T14:10:59Z",sageScore:8,diffs:[{njs:12,offset:0,notes:260,bombs:0,obstacles:18,nps:1.387,length:400,characteristic:"Standard",difficulty:"Easy",events:4926,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:187.5,paritySummary:{errors:21,warns:17,resets:0}},{njs:12,offset:0,notes:375,bombs:0,obstacles:22,nps:2,length:400,characteristic:"Standard",difficulty:"Normal",events:4926,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:187.5,paritySummary:{errors:18,warns:14,resets:0}},{njs:12,offset:0,notes:491,bombs:0,obstacles:22,nps:2.619,length:400,characteristic:"Standard",difficulty:"Hard",events:4926,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:187.5,paritySummary:{errors:16,warns:19,resets:0}},{njs:16,offset:0,notes:832,bombs:0,obstacles:22,nps:4.437,length:400,characteristic:"Standard",difficulty:"Expert",events:4926,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:187.5,paritySummary:{errors:12,warns:8,resets:0}},{njs:18,offset:0,notes:959,bombs:0,obstacles:22,nps:5.115,length:400,characteristic:"Standard",difficulty:"ExpertPlus",events:4926,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:187.5,paritySummary:{errors:18,warns:15,resets:0}}],downloadURL:"https://cdn.beatsaver.com/17ad188a8dea7cff81f5f7c6720099a1e395b168.zip",coverURL:"https://cdn.beatsaver.com/17ad188a8dea7cff81f5f7c6720099a1e395b168.jpg",previewURL:"https://cdn.beatsaver.com/17ad188a8dea7cff81f5f7c6720099a1e395b168.mp3"}],createdAt:"2019-05-03T14:10:59Z",updatedAt:"2019-05-03T14:10:59Z",lastPublishedAt:"2019-05-03T14:10:59Z"},{id:"36d5",name:"TheFatRat - MAYDAY feat. Laura Brehm",description:"reuploaded for ranked\n",uploader:{id:4284400,name:"oddloop",uniqueSet:!0,hash:"5cff0b7398cc5a672c84fd45",avatar:"https://cdn.beatsaver.com/avatar/173241614192476161.png",type:"DISCORD"},metadata:{bpm:150,duration:247,songName:"MAYDAY",songSubName:"TheFatRat & Laura Brehm",songAuthorName:"Oddloop",levelAuthorName:"oddloop"},stats:{plays:0,downloads:12226,upvotes:4840,downvotes:114,score:.9402},uploaded:"2019-02-16T21:37:31Z",automapper:!1,ranked:!0,qualified:!1,versions:[{hash:"6a9042eb11d4da0938bbdaa0f584131def762f4a",key:"36d5",state:"Published",createdAt:"2019-02-16T21:37:31Z",sageScore:6,diffs:[{njs:16,offset:0,notes:887,bombs:0,obstacles:20,nps:3.807,length:582.5,characteristic:"Standard",difficulty:"Expert",events:1307,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:233,paritySummary:{errors:23,warns:24,resets:0},stars:2.85}],downloadURL:"https://cdn.beatsaver.com/6a9042eb11d4da0938bbdaa0f584131def762f4a.zip",coverURL:"https://cdn.beatsaver.com/6a9042eb11d4da0938bbdaa0f584131def762f4a.jpg",previewURL:"https://cdn.beatsaver.com/6a9042eb11d4da0938bbdaa0f584131def762f4a.mp3"}],createdAt:"2019-02-16T21:37:31Z",updatedAt:"2019-02-16T21:37:31Z",lastPublishedAt:"2019-02-16T21:37:31Z"},{id:"49ae",name:"Lindsey Stirling - Shatter Me",description:"Feedback on Discord: nitronik.exe#7974\nNote: if you dont like flashy lights, turn on static lights! (also epilepsy warning lol)\npreview: https://www.youtube.com/watch?v=0JGEh4lPVpA\n\nEasy (lightshow): 0 notes, 0 nps, 0 bombs, 0 walls, njs 10\nNormal: 692 notes, 2.37 nps, 0 bombs, 25 walls, njs 10\nHard: 912 notes, 3.13 nps, 8 bombs, 29 walls, njs 13\nExpert: 1166 notes, 4 nps, 38 bombs, 29 walls, njs 16\nExpertPlus: 1462 Notes, 5.02 nps, 64 bombs, 33 walls, njs 19",uploader:{id:4284201,name:"nitronikexe",uniqueSet:!0,hash:"5cff0b7798cc5a672c855d84",avatar:"https://cdn.beatsaver.com/avatar/428230049704181760.png",type:"DISCORD"},metadata:{bpm:145,duration:291,songName:"Shatter Me",songSubName:"Lindsey Stirling",songAuthorName:"nitronik.exe",levelAuthorName:"nitronikexe"},stats:{plays:0,downloads:10457,upvotes:5571,downvotes:144,score:.9397},uploaded:"2019-05-01T10:07:45Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"0c02558f26e46d94c33728885a10ea8a4e2a9fd5",key:"49ae",state:"Published",createdAt:"2019-05-01T10:07:45Z",sageScore:8,diffs:[{njs:10,offset:0,notes:0,bombs:0,obstacles:0,nps:0,length:0,characteristic:"Standard",difficulty:"Easy",events:7862,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:0,paritySummary:{errors:0,warns:0,resets:0}},{njs:10,offset:0,notes:692,bombs:0,obstacles:25,nps:2.57,length:650.667,characteristic:"Standard",difficulty:"Normal",events:7862,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:269.241,paritySummary:{errors:0,warns:18,resets:0}},{njs:13,offset:0,notes:912,bombs:8,obstacles:29,nps:3.386,length:651,characteristic:"Standard",difficulty:"Hard",events:7862,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:269.379,paritySummary:{errors:0,warns:0,resets:0}},{njs:16,offset:0,notes:1166,bombs:38,obstacles:29,nps:4.305,length:654.5,characteristic:"Standard",difficulty:"Expert",events:7862,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:270.828,paritySummary:{errors:0,warns:0,resets:0}},{njs:19,offset:0,notes:1462,bombs:64,obstacles:33,nps:5.427,length:651,characteristic:"Standard",difficulty:"ExpertPlus",events:7862,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:269.379,paritySummary:{errors:8,warns:4,resets:20}}],downloadURL:"https://cdn.beatsaver.com/0c02558f26e46d94c33728885a10ea8a4e2a9fd5.zip",coverURL:"https://cdn.beatsaver.com/0c02558f26e46d94c33728885a10ea8a4e2a9fd5.jpg",previewURL:"https://cdn.beatsaver.com/0c02558f26e46d94c33728885a10ea8a4e2a9fd5.mp3"}],createdAt:"2019-05-01T10:07:45Z",updatedAt:"2019-05-01T10:07:45Z",lastPublishedAt:"2019-05-01T10:07:45Z"},{id:"45e",name:"CAN'T STOP THE FEELING! - Justin Timberlake",description:"Difficulties: Expert Only Lighting by GreatYazer\r\nWatch Me on Twitch: http://www.twitch.tv/bennydabeastlive\r\n\r\nIf you like this, check out my other beat maps:\r\nMidnight City by M83: https://beatsaver.com/details.php?id=542\r\nKids by MGMT: https://beatsaver.com/details.php?id=421\r\nWhat You Know by Two Door Cinema Club: https://beatsaver.com/details.php?id=1107\r\nPolish Girl by Neon Indian: https://beatsaver.com/details.php?id=694",uploader:{id:30311,name:"bennydabeast",uniqueSet:!0,hash:"5cff0b7298cc5a672c84e98d",avatar:"https://cdn.beatsaver.com/avatar/30311.jpg",type:"SIMPLE"},metadata:{bpm:113,duration:238,songName:"CAN'T STOP THE FEELING!",songSubName:"Justin Timberlake",songAuthorName:"BennyDaBeast",levelAuthorName:"bennydabeast"},stats:{plays:0,downloads:18524,upvotes:6933,downvotes:197,score:.9397},uploaded:"2018-06-08T21:44:40Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"91ba25c089d50e93154e2c7920c46d4730f22569",key:"45e",state:"Published",createdAt:"2018-06-08T21:44:40Z",sageScore:5,diffs:[{njs:10,offset:0,notes:579,bombs:0,obstacles:38,nps:2.507,length:435,characteristic:"Standard",difficulty:"Expert",events:709,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:230.973,paritySummary:{errors:110,warns:65,resets:0}}],downloadURL:"https://cdn.beatsaver.com/91ba25c089d50e93154e2c7920c46d4730f22569.zip",coverURL:"https://cdn.beatsaver.com/91ba25c089d50e93154e2c7920c46d4730f22569.jpg",previewURL:"https://cdn.beatsaver.com/91ba25c089d50e93154e2c7920c46d4730f22569.mp3"}],createdAt:"2018-06-08T21:44:40Z",updatedAt:"2018-06-08T21:44:40Z",lastPublishedAt:"2018-06-08T21:44:40Z"},{id:"80da",name:"chelmico - Easy Breezy [Keep Your Hands Off Eizouken! Opening]",description:"stan sayaka\n\nAlso please check out chelmico's other songs. I've just recently become addicted to their songs\n\nBPM 186 |\nExpert+\nExpert\nHard\nBreezy (Normal)\nEasy\n\nthanks as always\n\nDM any feedback on Discord\nETAN#8341",uploader:{id:4235140,name:"etan",uniqueSet:!0,hash:"5cff0b7798cc5a672c855775",avatar:"https://cdn.beatsaver.com/avatar/136373107559497728.png",type:"DISCORD"},metadata:{bpm:186,duration:109,songName:"Easy Breezy",songSubName:"",songAuthorName:"chelmico",levelAuthorName:"ETAN"},stats:{plays:0,downloads:7380,upvotes:2370,downvotes:33,score:.9396},uploaded:"2020-01-24T11:15:41.867Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"070007ff180423aa0abf3f2ba5584b0846788ee8",key:"80da",state:"Published",createdAt:"2020-01-24T11:15:41.867Z",sageScore:6,diffs:[{njs:10,offset:.5,notes:117,bombs:8,obstacles:11,nps:1.242,length:292,characteristic:"Standard",difficulty:"Easy",events:4738,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:94.194,paritySummary:{errors:7,warns:7,resets:2}},{njs:12,offset:0,notes:181,bombs:17,obstacles:11,nps:1.909,length:294,characteristic:"Standard",difficulty:"Normal",events:4738,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:94.839,paritySummary:{errors:1,warns:1,resets:2}},{njs:13,offset:0,notes:272,bombs:17,obstacles:11,nps:2.858,length:295,characteristic:"Standard",difficulty:"Hard",events:4738,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:95.161,paritySummary:{errors:0,warns:0,resets:0}},{njs:14,offset:1,notes:368,bombs:17,obstacles:11,nps:3.765,length:303,characteristic:"Standard",difficulty:"Expert",events:4738,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:97.742,paritySummary:{errors:0,warns:0,resets:2}},{njs:21,offset:0,notes:467,bombs:17,obstacles:11,nps:4.778,length:303,characteristic:"Standard",difficulty:"ExpertPlus",events:4687,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:97.742,paritySummary:{errors:0,warns:0,resets:2}},{njs:10,offset:0,notes:0,bombs:0,obstacles:0,nps:0,length:0,characteristic:"Lightshow",difficulty:"Easy",events:4687,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:0,paritySummary:{errors:0,warns:0,resets:0}}],downloadURL:"https://cdn.beatsaver.com/070007ff180423aa0abf3f2ba5584b0846788ee8.zip",coverURL:"https://cdn.beatsaver.com/070007ff180423aa0abf3f2ba5584b0846788ee8.jpg",previewURL:"https://cdn.beatsaver.com/070007ff180423aa0abf3f2ba5584b0846788ee8.mp3"}],createdAt:"2020-01-24T11:15:41.867Z",updatedAt:"2020-01-24T11:15:41.867Z",lastPublishedAt:"2020-01-24T11:15:41.867Z"},{id:"68f4",name:"Ehrling - Palm Trees",description:"Expert / Hard / Normal\r\nMade for HeyFalcon",uploader:{id:12996,name:"rustic",uniqueSet:!0,hash:"5cff0b7298cc5a672c84e8c4",avatar:"https://www.gravatar.com/avatar/5cff0b7298cc5a672c84e8c4?d=retro",type:"SIMPLE"},metadata:{bpm:122,duration:167,songName:"Palm Trees",songSubName:"",songAuthorName:"Ehrling",levelAuthorName:"Rustic"},stats:{plays:0,downloads:3862,upvotes:2336,downvotes:32,score:.9396},uploaded:"2019-10-10T18:18:18.093Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"6eef9850cfeb43d14c66323cfbae50d8532c9c43",key:"68f4",state:"Published",createdAt:"2019-10-10T18:18:18.093Z",sageScore:6,diffs:[{njs:12,offset:0,notes:257,bombs:0,obstacles:4876,nps:1.574,length:332,characteristic:"Standard",difficulty:"Normal",events:1638,chroma:!1,me:!0,ne:!1,cinema:!1,seconds:163.279,paritySummary:{errors:0,warns:0,resets:0}},{njs:14,offset:0,notes:336,bombs:0,obstacles:4876,nps:2.058,length:332,characteristic:"Standard",difficulty:"Hard",events:1638,chroma:!1,me:!0,ne:!1,cinema:!1,seconds:163.279,paritySummary:{errors:0,warns:0,resets:0}},{njs:17,offset:0,notes:337,bombs:0,obstacles:4876,nps:2.064,length:332,characteristic:"Standard",difficulty:"Expert",events:1694,chroma:!1,me:!0,ne:!1,cinema:!1,seconds:163.279,paritySummary:{errors:0,warns:0,resets:0}}],downloadURL:"https://cdn.beatsaver.com/6eef9850cfeb43d14c66323cfbae50d8532c9c43.zip",coverURL:"https://cdn.beatsaver.com/6eef9850cfeb43d14c66323cfbae50d8532c9c43.jpg",previewURL:"https://cdn.beatsaver.com/6eef9850cfeb43d14c66323cfbae50d8532c9c43.mp3"}],createdAt:"2019-10-10T18:18:18.093Z",updatedAt:"2019-10-10T18:18:18.093Z",lastPublishedAt:"2019-10-10T18:18:18.093Z"},{id:"1311",name:"Restart",description:"Finally!\r\n\r\nAnother map for you all to enjoy!\r\n\r\nThis cheerful song will get anyones spirits up! \r\nAnd with the song being part dancey part flow your gonna wish you played it!\r\n\r\nExpert+ is HyperSpeed mode for those who want to play fast!\r\n\r\nAll lighting was done by me!\r\nI do say that ive got a talent for lighting hmm? ;P",uploader:{id:4289111,name:"blackblazon",uniqueSet:!0,hash:"5cff0b7398cc5a672c84ef34",avatar:"https://cdn.beatsaver.com/avatar/127162370538733568.png",type:"DISCORD"},metadata:{bpm:155,duration:252,songName:"Restart",songSubName:"Subtact",songAuthorName:"BlackBlazon",levelAuthorName:"blackblazon"},stats:{plays:0,downloads:5574,upvotes:2795,downvotes:46,score:.9396},uploaded:"2018-09-02T01:56:36Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"c7a915c5315591f5a0e31f89dbbad4e69992f353",key:"1311",state:"Published",createdAt:"2018-09-02T01:56:36Z",sageScore:5,diffs:[{njs:12,offset:0,notes:1116,bombs:0,obstacles:0,nps:4.512,length:639,characteristic:"Standard",difficulty:"Expert",events:1785,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:247.355,paritySummary:{errors:66,warns:23,resets:0}},{njs:15,offset:0,notes:1116,bombs:0,obstacles:0,nps:4.512,length:639,characteristic:"Standard",difficulty:"ExpertPlus",events:1785,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:247.355,paritySummary:{errors:66,warns:23,resets:0}}],downloadURL:"https://cdn.beatsaver.com/c7a915c5315591f5a0e31f89dbbad4e69992f353.zip",coverURL:"https://cdn.beatsaver.com/c7a915c5315591f5a0e31f89dbbad4e69992f353.jpg",previewURL:"https://cdn.beatsaver.com/c7a915c5315591f5a0e31f89dbbad4e69992f353.mp3"}],createdAt:"2018-09-02T01:56:36Z",updatedAt:"2018-09-02T01:56:36Z",lastPublishedAt:"2018-09-02T01:56:36Z"},{id:"3fd3",name:"Cowboy Bebop - Tank! (Ben Briggs Remix)",description:"New lights, Expert now E+, an actual Expert added.",uploader:{id:4285169,name:"ryger",uniqueSet:!0,hash:"5cff0b7798cc5a672c855a42",avatar:"https://cdn.beatsaver.com/avatar/169266024502263808.png",type:"DISCORD"},metadata:{bpm:128,duration:173,songName:"Tank! (Ben Briggs Remix)",songSubName:"Cowboy Bebop",songAuthorName:"Ryger",levelAuthorName:"Ryger"},stats:{plays:0,downloads:10556,upvotes:4579,downvotes:108,score:.9395},uploaded:"2019-03-22T19:27:47Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"8a19fa1812254b7b610e667039af155cee68606a",key:"3fd3",state:"Published",createdAt:"2019-03-22T19:27:47Z",sageScore:6,diffs:[{njs:14,offset:0,notes:703,bombs:0,obstacles:5,nps:4.173,length:359.375,characteristic:"Standard",difficulty:"Expert",events:3940,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:168.457,paritySummary:{errors:41,warns:24,resets:0}},{njs:14,offset:0,notes:780,bombs:0,obstacles:5,nps:4.63,length:359.375,characteristic:"Standard",difficulty:"ExpertPlus",events:3940,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:168.457,paritySummary:{errors:68,warns:46,resets:0}}],downloadURL:"https://cdn.beatsaver.com/8a19fa1812254b7b610e667039af155cee68606a.zip",coverURL:"https://cdn.beatsaver.com/8a19fa1812254b7b610e667039af155cee68606a.jpg",previewURL:"https://cdn.beatsaver.com/8a19fa1812254b7b610e667039af155cee68606a.mp3"}],createdAt:"2019-03-22T19:27:47Z",updatedAt:"2019-03-22T19:27:47Z",lastPublishedAt:"2019-03-22T19:27:47Z"},{id:"6484",name:"Poison - Nightcore",description:"Youtube Preview: https://youtu.be/dzbdbXJWKMQ",uploader:{id:23751,name:"monteblanco",uniqueSet:!0,hash:"5cff0b7798cc5a672c855ef5",avatar:"https://www.gravatar.com/avatar/5cff0b7798cc5a672c855ef5?d=retro",type:"SIMPLE"},metadata:{bpm:169,duration:150,songName:"Poison - Nightcore",songSubName:"",songAuthorName:"Groove Coverage",levelAuthorName:"Monteblanco"},stats:{plays:0,downloads:6746,upvotes:3401,downvotes:67,score:.9394},uploaded:"2019-09-19T13:15:08.715Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"e570d226c15ad3f5c4b84cfffe3542e61facc502",key:"6484",state:"Published",createdAt:"2019-09-19T13:15:08.715Z",sageScore:5,diffs:[{njs:15,offset:0,notes:504,bombs:4,obstacles:24,nps:3.518,length:403.5,characteristic:"Standard",difficulty:"Expert",events:616,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:143.254,paritySummary:{errors:0,warns:0,resets:2}}],downloadURL:"https://cdn.beatsaver.com/e570d226c15ad3f5c4b84cfffe3542e61facc502.zip",coverURL:"https://cdn.beatsaver.com/e570d226c15ad3f5c4b84cfffe3542e61facc502.jpg",previewURL:"https://cdn.beatsaver.com/e570d226c15ad3f5c4b84cfffe3542e61facc502.mp3"}],createdAt:"2019-09-19T13:15:08.715Z",updatedAt:"2019-09-19T13:15:08.715Z",lastPublishedAt:"2019-09-19T13:15:08.715Z"},{id:"2c4f",name:"POP/STARS vs MEGALOVANIA - Dj CUTMAN",description:"As requested by @Gravemind1. POP/STARS vs MEGALOVANIA by Dj CUTMAN! I had fun mapping this (especially since it gives me a reason to lightmap the KDA environment!) and I hope you'll have fun playing it too! \r\n\r\nAll credit goes to Dj CUTMAN for the mashup: https://www.youtube.com/watch?v=Wan2REH1x9g",uploader:{id:58338,name:"Joetastic",uniqueSet:!0,hash:"5cff0b7498cc5a672c85050e",avatar:"https://cdn.beatsaver.com/avatar/227767566402191360.png",type:"DISCORD"},metadata:{bpm:185,duration:176,songName:"POP/STARS vs MEGALOVANIA",songSubName:"Dj CUTMAN",songAuthorName:"Joetastic",levelAuthorName:"Joetastic"},stats:{plays:0,downloads:9567,upvotes:4373,downvotes:101,score:.9394},uploaded:"2019-01-09T15:56:43Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"5ede52db98f5cde3a4d54b4f96d7f9b6fe227fe7",key:"2c4f",state:"Published",createdAt:"2019-01-09T15:56:43Z",sageScore:5,diffs:[{njs:15,offset:0,notes:995,bombs:0,obstacles:27,nps:5.821,length:527,characteristic:"Standard",difficulty:"ExpertPlus",events:3164,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:170.919,paritySummary:{errors:43,warns:50,resets:0}}],downloadURL:"https://cdn.beatsaver.com/5ede52db98f5cde3a4d54b4f96d7f9b6fe227fe7.zip",coverURL:"https://cdn.beatsaver.com/5ede52db98f5cde3a4d54b4f96d7f9b6fe227fe7.jpg",previewURL:"https://cdn.beatsaver.com/5ede52db98f5cde3a4d54b4f96d7f9b6fe227fe7.mp3"}],createdAt:"2019-01-09T15:56:43Z",updatedAt:"2019-01-09T15:56:43Z",lastPublishedAt:"2019-01-09T15:56:43Z"},{id:"3694",name:"Centipede",description:"A full remake of the original Centipede map!\r\n\r\nEnjoy at your hearts content!\r\n\r\np.s i lied about the hiatus",uploader:{id:4289111,name:"blackblazon",uniqueSet:!0,hash:"5cff0b7398cc5a672c84ef34",avatar:"https://cdn.beatsaver.com/avatar/127162370538733568.png",type:"DISCORD"},metadata:{bpm:140,duration:249,songName:"Centipede",songSubName:"Knife Party",songAuthorName:"BlackBlazon & EpicEwok",levelAuthorName:"blackblazon"},stats:{plays:0,downloads:8169,upvotes:4979,downvotes:125,score:.9391},uploaded:"2019-02-16T00:35:23Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"e59f717e08b56c8693b14f42a94832cacd4bbca4",key:"3694",state:"Published",createdAt:"2019-02-16T00:35:23Z",sageScore:5,diffs:[{njs:14,offset:0,notes:1004,bombs:56,obstacles:25,nps:4.371,length:536,characteristic:"Standard",difficulty:"Expert",events:11574,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:229.714,paritySummary:{errors:22,warns:22,resets:0}},{njs:18,offset:0,notes:1004,bombs:56,obstacles:25,nps:4.371,length:536,characteristic:"Standard",difficulty:"ExpertPlus",events:11574,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:229.714,paritySummary:{errors:22,warns:22,resets:0}}],downloadURL:"https://cdn.beatsaver.com/e59f717e08b56c8693b14f42a94832cacd4bbca4.zip",coverURL:"https://cdn.beatsaver.com/e59f717e08b56c8693b14f42a94832cacd4bbca4.jpg",previewURL:"https://cdn.beatsaver.com/e59f717e08b56c8693b14f42a94832cacd4bbca4.mp3"}],createdAt:"2019-02-16T00:35:23Z",updatedAt:"2019-02-16T00:35:23Z",lastPublishedAt:"2019-02-16T00:35:23Z"},{id:"1716",name:"Empty Threat - CHVRCHES",description:"Difficulties: Expert+, Expert, Hard, Normal\r\nYouTube Preview: https://youtu.be/5fp_4qs7RvA",uploader:{id:30311,name:"bennydabeast",uniqueSet:!0,hash:"5cff0b7298cc5a672c84e98d",avatar:"https://cdn.beatsaver.com/avatar/30311.jpg",type:"SIMPLE"},metadata:{bpm:132,duration:246,songName:"Empty Threat",songSubName:"CHVRCHES",songAuthorName:"Benny",levelAuthorName:"bennydabeast"},stats:{plays:0,downloads:7003,upvotes:3875,downvotes:85,score:.939},uploaded:"2018-09-25T02:11:16Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"f08cad7d3b663caa6f8c23aa04664273f532f74a",key:"1716",state:"Published",createdAt:"2018-09-25T02:11:16Z",sageScore:4,diffs:[{njs:10,offset:0,notes:405,bombs:0,obstacles:16,nps:1.697,length:527,characteristic:"Standard",difficulty:"Normal",events:1241,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:239.545,paritySummary:{errors:55,warns:38,resets:0}},{njs:10,offset:0,notes:621,bombs:0,obstacles:24,nps:2.6,length:527.5,characteristic:"Standard",difficulty:"Hard",events:1241,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:239.773,paritySummary:{errors:70,warns:69,resets:0}},{njs:10,offset:0,notes:930,bombs:0,obstacles:24,nps:3.893,length:527.5,characteristic:"Standard",difficulty:"Expert",events:1241,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:239.773,paritySummary:{errors:97,warns:109,resets:0}},{njs:11,offset:0,notes:1255,bombs:0,obstacles:22,nps:5.251,length:527.75,characteristic:"Standard",difficulty:"ExpertPlus",events:1241,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:239.886,paritySummary:{errors:116,warns:208,resets:0}}],downloadURL:"https://cdn.beatsaver.com/f08cad7d3b663caa6f8c23aa04664273f532f74a.zip",coverURL:"https://cdn.beatsaver.com/f08cad7d3b663caa6f8c23aa04664273f532f74a.jpg",previewURL:"https://cdn.beatsaver.com/f08cad7d3b663caa6f8c23aa04664273f532f74a.mp3"}],createdAt:"2018-09-25T02:11:16Z",updatedAt:"2018-09-25T02:11:16Z",lastPublishedAt:"2018-09-25T02:11:16Z"},{id:"9d7",name:"Back in Black - AC/DC",description:"CAUSE I'M BACK IN BLAAAAAAACK! All difficulties, full lights.\r\n\r\nWas charted form start to finish on my twitch, come watch me stream other chart creations!!!! https://www.twitch.tv/freeek\r\n\r\nExpert FC Video: https://www.youtube.com/watch?v=ZxLxbSfSEPA",uploader:{id:47581,name:"freeek",uniqueSet:!0,hash:"5cff0b7298cc5a672c84e8ad",avatar:"https://www.gravatar.com/avatar/5cff0b7298cc5a672c84e8ad?d=retro",type:"SIMPLE"},metadata:{bpm:95,duration:241,songName:"Back in Black",songSubName:"AC/DC",songAuthorName:"Freeek",levelAuthorName:"freeek"},stats:{plays:0,downloads:20588,upvotes:8804,downvotes:280,score:.939},uploaded:"2018-07-16T11:58:36Z",automapper:!1,ranked:!0,qualified:!1,versions:[{hash:"8af82a87167070a08ec63dba0459c829c2954067",key:"9d7",state:"Published",createdAt:"2018-07-16T11:58:36Z",sageScore:5,diffs:[{njs:10,offset:0,notes:450,bombs:0,obstacles:31,nps:1.947,length:366,characteristic:"Standard",difficulty:"Easy",events:1258,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:231.158,paritySummary:{errors:19,warns:2,resets:0},stars:.51},{njs:10,offset:0,notes:563,bombs:0,obstacles:47,nps:2.436,length:366,characteristic:"Standard",difficulty:"Normal",events:1258,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:231.158,paritySummary:{errors:87,warns:21,resets:0},stars:1.12},{njs:10,offset:0,notes:683,bombs:0,obstacles:47,nps:2.955,length:366,characteristic:"Standard",difficulty:"Hard",events:1258,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:231.158,paritySummary:{errors:81,warns:89,resets:0},stars:1.73},{njs:10,offset:0,notes:824,bombs:0,obstacles:47,nps:3.565,length:366,characteristic:"Standard",difficulty:"Expert",events:1258,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:231.158,paritySummary:{errors:79,warns:95,resets:0}}],downloadURL:"https://cdn.beatsaver.com/8af82a87167070a08ec63dba0459c829c2954067.zip",coverURL:"https://cdn.beatsaver.com/8af82a87167070a08ec63dba0459c829c2954067.jpg",previewURL:"https://cdn.beatsaver.com/8af82a87167070a08ec63dba0459c829c2954067.mp3"}],createdAt:"2018-07-16T11:58:36Z",updatedAt:"2018-07-16T11:58:36Z",lastPublishedAt:"2018-07-16T11:58:36Z"},{id:"198f3",name:"Spider Dance - Toby Fox (Undertale modchart)",description:"There are countless Undertale maps on Beat Saber, but what if you could actually experience a real boss fight? It's now possible thanks to Noodle Extensions, and I'm proud to present to you the first Undertale modchart: Spider Dance, where you will confront Muffet.\r\n\r\nTips for a better experience:\r\n- Don't use static lights; there shouldn't be any lights\r\n- Hide the HUD in player settings\r\n- Enable \"bloom post-processing\"\r\n- Enable \"screen distortion effects\"\r\n\r\nInstallation instructions:\r\n- You will need Noodle Extensions and Chroma and their dependencies. All are now available on ModAssistant.\r\n- If you read this in a future where the update broke the mods and they haven't been approved on ModAssistant yet, install the basic mods from ModAssistant and get the latest releases of Noodle Extensions, Heck, and Chroma from Aeroluna's GitHub: https://github.com/Aeroluna\r\n\r\nVideo: https://youtu.be/fy8KmUor6fI\r\n\r\nI started this a while ago before Ghost Choir and then abandoned the project. But I finally decided to finish the work, so I hope you'll enjoy it :)\r\nThanks to Reaxt and Cyansnow, who testplayed and made detailed suggestions that helped me improve the quality of this map. I really appreciate it.\r\n\r\nMy social media links (please follow/subscribe): https://linktr.ee/nyri0",uploader:{id:4288814,name:"nyri0",uniqueSet:!0,hash:"5e792df416c9680006086a78",avatar:"https://cdn.beatsaver.com/avatar/396715033125584907.png",type:"DISCORD"},metadata:{bpm:115,duration:114,songName:"Spider Dance",songSubName:"",songAuthorName:"Toby Fox",levelAuthorName:"nyri0"},stats:{plays:0,downloads:15821,upvotes:1257,downvotes:4,score:.9389},uploaded:"2021-06-25T17:47:40.296Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"09246637fa63ac55aa518718fd1eb4b876960480",key:"198f3",state:"Published",createdAt:"2021-06-25T17:47:40.296Z",sageScore:2,diffs:[{njs:16,offset:0,notes:434,bombs:88,obstacles:1153,nps:4.377,length:190.063,characteristic:"Standard",difficulty:"ExpertPlus",events:5,chroma:!0,me:!1,ne:!0,cinema:!1,seconds:99.163,paritySummary:{errors:13,warns:13,resets:0}}],downloadURL:"https://cdn.beatsaver.com/09246637fa63ac55aa518718fd1eb4b876960480.zip",coverURL:"https://cdn.beatsaver.com/09246637fa63ac55aa518718fd1eb4b876960480.jpg",previewURL:"https://cdn.beatsaver.com/09246637fa63ac55aa518718fd1eb4b876960480.mp3"}],createdAt:"2021-06-25T17:47:40.296Z",updatedAt:"2021-06-25T17:47:40.296Z",lastPublishedAt:"2021-06-25T17:47:40.296Z"},{id:"860",name:"Wake Me Up When September Ends - Green Day",description:"Expert - Hard - Normal Charts\nCustom Lighting\nhttps://www.youtube.com/watch?v=QPiD-n4W6s0\n\nhttps://twitter.com/TheDownyCat\nhttps://www.twitch.tv/downycat\nhttps://streamlabs.com/downycat/tip",uploader:{id:4285982,name:"downycat",uniqueSet:!0,hash:"5cff0b7398cc5a672c84ede5",avatar:"https://cdn.beatsaver.com/avatar/173538829888782336.png",type:"DISCORD"},metadata:{bpm:105,duration:271,songName:"Wake Me Up When September Ends",songSubName:"Green Day",songAuthorName:"DownyCat",levelAuthorName:"downycat"},stats:{plays:0,downloads:11787,upvotes:3264,downvotes:64,score:.9389},uploaded:"2018-07-07T14:38:17Z",automapper:!1,ranked:!0,qualified:!1,versions:[{hash:"d0457c1dee4a78f5496c3b282f8b834ec45f75a8",key:"860",state:"Published",createdAt:"2018-07-07T14:38:17Z",sageScore:5,diffs:[{njs:10,offset:0,notes:461,bombs:34,obstacles:97,nps:1.801,length:448,characteristic:"Standard",difficulty:"Normal",events:1579,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:256,paritySummary:{errors:59,warns:13,resets:2},stars:.95},{njs:10,offset:0,notes:862,bombs:0,obstacles:85,nps:3.367,length:448,characteristic:"Standard",difficulty:"Hard",events:1579,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:256,paritySummary:{errors:52,warns:1,resets:0}},{njs:10,offset:0,notes:1179,bombs:0,obstacles:86,nps:4.605,length:448,characteristic:"Standard",difficulty:"Expert",events:1579,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:256,paritySummary:{errors:19,warns:20,resets:0}}],downloadURL:"https://cdn.beatsaver.com/d0457c1dee4a78f5496c3b282f8b834ec45f75a8.zip",coverURL:"https://cdn.beatsaver.com/d0457c1dee4a78f5496c3b282f8b834ec45f75a8.jpg",previewURL:"https://cdn.beatsaver.com/d0457c1dee4a78f5496c3b282f8b834ec45f75a8.mp3"}],createdAt:"2018-07-07T14:38:17Z",updatedAt:"2018-07-07T14:38:17Z",lastPublishedAt:"2018-07-07T14:38:17Z"},{id:"3fc",name:"The White Stripes - Seven Nation Army",description:"UPDATED! @BlueASIS#4095 on Discord let me know what you think",uploader:{id:52648,name:"blueasis",uniqueSet:!1,hash:"5cff0b7298cc5a672c84eb5d",avatar:"https://www.gravatar.com/avatar/5cff0b7298cc5a672c84eb5d?d=retro",type:"SIMPLE"},metadata:{bpm:124,duration:232,songName:"Seven Nation Army",songSubName:"The White Stripes",songAuthorName:"BlueASIS",levelAuthorName:"blueasis"},stats:{plays:0,downloads:20649,upvotes:14458,downvotes:530,score:.9389},uploaded:"2018-06-06T18:51:03Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"0b0ad0f34b2d0687a9794bcf5019100fda06971e",key:"3fc",state:"Published",createdAt:"2018-06-06T18:51:03Z",sageScore:4,diffs:[{njs:10,offset:0,notes:399,bombs:0,obstacles:0,nps:1.817,length:453.875,characteristic:"Standard",difficulty:"Normal",events:812,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:219.617,paritySummary:{errors:90,warns:6,resets:0}},{njs:10,offset:0,notes:496,bombs:0,obstacles:0,nps:2.258,length:453.875,characteristic:"Standard",difficulty:"Hard",events:812,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:219.617,paritySummary:{errors:113,warns:12,resets:0}}],downloadURL:"https://cdn.beatsaver.com/0b0ad0f34b2d0687a9794bcf5019100fda06971e.zip",coverURL:"https://cdn.beatsaver.com/0b0ad0f34b2d0687a9794bcf5019100fda06971e.jpg",previewURL:"https://cdn.beatsaver.com/0b0ad0f34b2d0687a9794bcf5019100fda06971e.mp3"}],createdAt:"2018-06-06T18:51:03Z",updatedAt:"2018-06-06T18:51:03Z",lastPublishedAt:"2018-06-06T18:51:03Z"},{id:"5925",name:'Hardware Store - "Weird Al" Yankovic',description:'Hardware Store is a song by "Weird Al" Yankovic. "Hardware Store", which, as the title suggests, is about a new neighborhood hardware store and the things that can be purchased therein. The song was originally supposed to be a style parody of another (unspecified) artist, but it eventually evolved into its own, original composition.\n\nThere\'s a rapid-fire list of 61 products that he sings at the bridge of the song so prepare for that :P',uploader:{id:58338,name:"Joetastic",uniqueSet:!0,hash:"5cff0b7498cc5a672c85050e",avatar:"https://cdn.beatsaver.com/avatar/227767566402191360.png",type:"DISCORD"},metadata:{bpm:126.14,duration:226,songName:"Hardware Store",songSubName:"",songAuthorName:'"Weird Al" Yankovic',levelAuthorName:"Joetastic"},stats:{plays:0,downloads:3028,upvotes:1490,downvotes:10,score:.9388},uploaded:"2019-07-27T16:27:18.223Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"2c677458db9ca04a7d0b64f47b443661d0e487d8",key:"5925",state:"Published",createdAt:"2019-07-27T16:27:18.223Z",sageScore:6,diffs:[{njs:15,offset:0,notes:1223,bombs:0,obstacles:24,nps:5.529,length:465.063,characteristic:"Standard",difficulty:"ExpertPlus",events:1571,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:221.213,paritySummary:{errors:45,warns:36,resets:0}}],downloadURL:"https://cdn.beatsaver.com/2c677458db9ca04a7d0b64f47b443661d0e487d8.zip",coverURL:"https://cdn.beatsaver.com/2c677458db9ca04a7d0b64f47b443661d0e487d8.jpg",previewURL:"https://cdn.beatsaver.com/2c677458db9ca04a7d0b64f47b443661d0e487d8.mp3"}],createdAt:"2019-07-27T16:27:18.223Z",updatedAt:"2019-07-27T16:27:18.223Z",lastPublishedAt:"2019-07-27T16:27:18.223Z"},{id:"3e4",name:"I'll Make A Man Out Of You - Mulan",description:"Expert+/Expert/Hard/Normal all with Lighting Events\r\n114 BMP\r\nSee reddit for video of Expert+ (https://www.reddit.com/r/beatsaber/comments/8owz4t/ill_make_a_man_out_of_you_mulan_expert_video/?ref=share&ref_source=link)",uploader:{id:52670,name:"glacialdrift",uniqueSet:!1,hash:"5cff0b7398cc5a672c84f176",avatar:"https://www.gravatar.com/avatar/5cff0b7398cc5a672c84f176?d=retro",type:"SIMPLE"},metadata:{bpm:114,duration:202,songName:"I'll Make A Man Out Of You",songSubName:"Mulan",songAuthorName:"Glacial Drift",levelAuthorName:"glacialdrift"},stats:{plays:0,downloads:7958,upvotes:4393,downvotes:106,score:.9386},uploaded:"2018-06-06T01:30:06Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"d8088b0ab3d9e5b3e62a2daf7cdc8204e0c67256",key:"3e4",state:"Published",createdAt:"2018-06-06T01:30:06Z",sageScore:3,diffs:[{njs:10,offset:0,notes:285,bombs:0,obstacles:2,nps:1.47,length:368.9,characteristic:"Standard",difficulty:"Normal",events:898,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:194.158,paritySummary:{errors:109,warns:26,resets:0}},{njs:10,offset:0,notes:449,bombs:0,obstacles:2,nps:2.317,length:368.9,characteristic:"Standard",difficulty:"Hard",events:898,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:194.158,paritySummary:{errors:99,warns:49,resets:0}},{njs:10,offset:0,notes:607,bombs:0,obstacles:2,nps:3.132,length:368.9,characteristic:"Standard",difficulty:"Expert",events:1025,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:194.158,paritySummary:{errors:91,warns:74,resets:0}},{njs:10,offset:0,notes:712,bombs:0,obstacles:2,nps:3.674,length:368.9,characteristic:"Standard",difficulty:"ExpertPlus",events:1025,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:194.158,paritySummary:{errors:87,warns:86,resets:0}}],downloadURL:"https://cdn.beatsaver.com/d8088b0ab3d9e5b3e62a2daf7cdc8204e0c67256.zip",coverURL:"https://cdn.beatsaver.com/d8088b0ab3d9e5b3e62a2daf7cdc8204e0c67256.jpg",previewURL:"https://cdn.beatsaver.com/d8088b0ab3d9e5b3e62a2daf7cdc8204e0c67256.mp3"}],createdAt:"2018-06-06T01:30:06Z",updatedAt:"2018-06-06T01:30:06Z",lastPublishedAt:"2018-06-06T01:30:06Z"},{id:"11cf8",name:"Up & Down",description:"I had fun. Liked the song.\nThis map uses Noodle Extensions by the way.\nAlso, please disable any custom note models you might have, and don’t use the BTS environment.\n\nMap video: https://youtu.be/vueyLFN6Azg\n\n-= NOT MY AUDIO =-\n\nOriginal: https://youtu.be/oJa7Kr7_9dw\n\nNotes: 522\nNPS: 3.18\nNJS: 17\nBPM: 138\nBombs: 0\nWalls: 8\nLights: 2,790\nErrors: 5\n\nThanks to:\n@JohnnyDee\n@DefDoof\nfor testing!\n\nThis map does not work for the Quest/Quest 2",uploader:{id:4284638,name:"thegoodboi",uniqueSet:!0,hash:"5cff0b7698cc5a672c85433c",avatar:"https://cdn.beatsaver.com/avatar/515025828736794654.png",type:"DISCORD"},metadata:{bpm:138,duration:164,songName:"Up & Down",songSubName:"",songAuthorName:"Marnik",levelAuthorName:"The Good Boi"},stats:{plays:0,downloads:12995,upvotes:5828,downvotes:162,score:.9385},uploaded:"2020-12-20T21:25:04.106Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"2aa85aad10e124eb674d18d49251bc94ee1a4283",key:"11cf8",state:"Published",createdAt:"2020-12-20T21:25:04.106Z",sageScore:7,diffs:[{njs:17,offset:0,notes:535,bombs:0,obstacles:8,nps:3.418,length:360,characteristic:"Standard",difficulty:"ExpertPlus",events:2790,chroma:!0,me:!1,ne:!0,cinema:!1,seconds:156.522,paritySummary:{errors:27,warns:14,resets:0}},{njs:17,offset:0,notes:535,bombs:0,obstacles:8,nps:3.418,length:360,characteristic:"Lawless",difficulty:"ExpertPlus",events:2790,chroma:!0,me:!1,ne:!0,cinema:!1,seconds:156.522,paritySummary:{errors:26,warns:13,resets:0}}],downloadURL:"https://cdn.beatsaver.com/2aa85aad10e124eb674d18d49251bc94ee1a4283.zip",coverURL:"https://cdn.beatsaver.com/2aa85aad10e124eb674d18d49251bc94ee1a4283.jpg",previewURL:"https://cdn.beatsaver.com/2aa85aad10e124eb674d18d49251bc94ee1a4283.mp3"}],createdAt:"2020-12-20T21:25:04.106Z",updatedAt:"2020-12-20T21:25:04.106Z",lastPublishedAt:"2020-12-20T21:25:04.106Z"},{id:"47f3",name:"TWICE - FANCY",description:"Aggrogahu: Lights, Hard, and Normal.\r\n Here are his awesome maps that you should download: https://beatsaver.com/browse/byuser/5760\r\n\r\nKikae: Expert/Expert+",uploader:{id:4285107,name:"kikaeaeon",uniqueSet:!0,hash:"5cff0b7498cc5a672c85109b",avatar:"https://cdn.beatsaver.com/avatar/103715469822816256.png",type:"DISCORD"},metadata:{bpm:132,duration:218,songName:"FANCY",songSubName:"TWICE",songAuthorName:"KikaeAeon & Aggrogahu",levelAuthorName:"kikaeaeon"},stats:{plays:0,downloads:11038,upvotes:2829,downvotes:52,score:.9381},uploaded:"2019-04-23T09:46:04Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"c63d899018f131d3aed03816c5074350aaa700a7",key:"47f3",state:"Published",createdAt:"2019-04-23T09:46:04Z",sageScore:4,diffs:[{njs:9,offset:0,notes:380,bombs:12,obstacles:12,nps:1.802,length:464,characteristic:"Standard",difficulty:"Normal",events:1003,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:210.909,paritySummary:{errors:41,warns:61,resets:18}},{njs:10,offset:0,notes:587,bombs:6,obstacles:14,nps:2.777,length:465,characteristic:"Standard",difficulty:"Hard",events:972,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:211.364,paritySummary:{errors:54,warns:54,resets:3}},{njs:12,offset:0,notes:817,bombs:0,obstacles:5,nps:3.865,length:465,characteristic:"Standard",difficulty:"Expert",events:1001,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:211.364,paritySummary:{errors:11,warns:1,resets:0}},{njs:15,offset:0,notes:1048,bombs:0,obstacles:5,nps:4.958,length:465,characteristic:"Standard",difficulty:"ExpertPlus",events:1003,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:211.364,paritySummary:{errors:12,warns:14,resets:0}}],downloadURL:"https://cdn.beatsaver.com/c63d899018f131d3aed03816c5074350aaa700a7.zip",coverURL:"https://cdn.beatsaver.com/c63d899018f131d3aed03816c5074350aaa700a7.jpg",previewURL:"https://cdn.beatsaver.com/c63d899018f131d3aed03816c5074350aaa700a7.mp3"}],createdAt:"2019-04-23T09:46:04Z",updatedAt:"2019-04-23T09:46:04Z",lastPublishedAt:"2019-04-23T09:46:04Z"},{id:"1421c",name:"Look At The Sky - Porter Robinson",description:"MAKE SURE TO HAVE BLOOM POST PROCESS ON AND SCREEN DISTORTION EFFECTS ON!!!!\n\n\nThis was super fun to work on! And its finally out! Please enjoy!\nPlease make sure to have noodle extensions and chroma,\nSpecial thanks to MakeUMove, and Dack!\n\nIf you cant play it, heres the video! https://youtu.be/VWSubdP0WcQ",uploader:{id:4235136,name:"reaxt",uniqueSet:!0,hash:"5cff0b7298cc5a672c84e8ab",avatar:"https://cdn.beatsaver.com/avatar/163052863038291970.png",type:"DISCORD"},metadata:{bpm:115,duration:164,songName:"look at the sky",songSubName:"",songAuthorName:"porter robinson",levelAuthorName:"Reaxt & CyanSnow"},stats:{plays:0,downloads:5472,upvotes:1623,downvotes:15,score:.938},uploaded:"2021-02-16T19:10:35.911Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"825dbd980eadceaba54c8e9d8e68f93a1b4cb029",key:"1421c",state:"Published",createdAt:"2021-02-16T19:10:35.911Z",sageScore:2,diffs:[{njs:14,offset:0,notes:505,bombs:0,obstacles:5343,nps:3.552,length:272.5,characteristic:"Lawless",difficulty:"ExpertPlus",events:1247,chroma:!0,me:!1,ne:!0,cinema:!1,seconds:142.174,paritySummary:{errors:2,warns:1,resets:0}}],downloadURL:"https://cdn.beatsaver.com/825dbd980eadceaba54c8e9d8e68f93a1b4cb029.zip",coverURL:"https://cdn.beatsaver.com/825dbd980eadceaba54c8e9d8e68f93a1b4cb029.jpg",previewURL:"https://cdn.beatsaver.com/825dbd980eadceaba54c8e9d8e68f93a1b4cb029.mp3"}],createdAt:"2021-02-16T19:10:35.911Z",updatedAt:"2021-02-16T19:10:35.911Z",lastPublishedAt:"2021-02-16T19:10:35.911Z"},{id:"2da4",name:"Ghosts n Stuff (feat. Rob Swire) - deadmau5",description:"128 BPM / 3:17 Runtime\r\nEasy / 208 Notes\r\nNormal / 345 Notes\r\nHard / 458 Notes\r\nExpert / 595 Notes\r\n\r\nThis one comes with custom colors similar to the KDA Popstars OST track.\r\n\r\nGameplay:\r\nhttps://youtu.be/vxqyTGuO910",uploader:{id:4284981,name:"skylerwallace",uniqueSet:!0,hash:"5cff0b7298cc5a672c84ea67",avatar:"https://cdn.beatsaver.com/avatar/398344856868487168.png",type:"DISCORD"},metadata:{bpm:128,duration:197,songName:"Ghosts n Stuff (feat. Rob Swire)",songSubName:"deadmau5",songAuthorName:"Skyler Wallace",levelAuthorName:"skylerwallace"},stats:{plays:0,downloads:13432,upvotes:6655,downvotes:199,score:.938},uploaded:"2019-01-14T13:48:11Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"712ee0801ae2e65e4cd7ea5377bcf272981b57c6",key:"2da4",state:"Published",createdAt:"2019-01-14T13:48:11Z",sageScore:6,diffs:[{njs:10,offset:1,notes:208,bombs:0,obstacles:16,nps:1.072,length:414,characteristic:"Standard",difficulty:"Easy",events:1827,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:194.063,paritySummary:{errors:46,warns:21,resets:0}},{njs:10,offset:1,notes:345,bombs:0,obstacles:19,nps:1.773,length:415,characteristic:"Standard",difficulty:"Normal",events:1827,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:194.531,paritySummary:{errors:37,warns:12,resets:0}},{njs:12,offset:1,notes:458,bombs:0,obstacles:15,nps:2.352,length:415.5,characteristic:"Standard",difficulty:"Hard",events:1827,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:194.766,paritySummary:{errors:32,warns:19,resets:0}},{njs:14,offset:0,notes:595,bombs:22,obstacles:29,nps:3.055,length:415.5,characteristic:"Standard",difficulty:"Expert",events:1827,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:194.766,paritySummary:{errors:41,warns:34,resets:1}}],downloadURL:"https://cdn.beatsaver.com/712ee0801ae2e65e4cd7ea5377bcf272981b57c6.zip",coverURL:"https://cdn.beatsaver.com/712ee0801ae2e65e4cd7ea5377bcf272981b57c6.jpg",previewURL:"https://cdn.beatsaver.com/712ee0801ae2e65e4cd7ea5377bcf272981b57c6.mp3"}],createdAt:"2019-01-14T13:48:11Z",updatedAt:"2019-01-14T13:48:11Z",lastPublishedAt:"2019-01-14T13:48:11Z"},{id:"49fc",name:"You Give Love A Bad Name - Bon Jovi",description:"Another classic from Bon Jovi :D This one has more beats than it’s my life so it's slightly harder too. Thus the expert difficulty, but it's still on the easy side of expert. Also Gotta love 80s songs lol, no computer mastering means BPM was inconsistent and there are over 20 bpm changes lol",uploader:{id:58338,name:"Joetastic",uniqueSet:!0,hash:"5cff0b7498cc5a672c85050e",avatar:"https://cdn.beatsaver.com/avatar/227767566402191360.png",type:"DISCORD"},metadata:{bpm:123,duration:220,songName:"You Give Love A Bad Name",songSubName:"Bon Jovi",songAuthorName:"Joetastic",levelAuthorName:"Joetastic"},stats:{plays:0,downloads:8360,upvotes:2027,downvotes:27,score:.9379},uploaded:"2019-05-02T18:03:13Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"9465922b3962dca2b4c6d3b312fe61bec255c1e4",key:"49fc",state:"Published",createdAt:"2019-05-02T18:03:13Z",sageScore:6,diffs:[{njs:13,offset:0,notes:731,bombs:2,obstacles:3,nps:3.551,length:422,characteristic:"Standard",difficulty:"Expert",events:2246,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:205.854,paritySummary:{errors:28,warns:38,resets:0}}],downloadURL:"https://cdn.beatsaver.com/9465922b3962dca2b4c6d3b312fe61bec255c1e4.zip",coverURL:"https://cdn.beatsaver.com/9465922b3962dca2b4c6d3b312fe61bec255c1e4.jpg",previewURL:"https://cdn.beatsaver.com/9465922b3962dca2b4c6d3b312fe61bec255c1e4.mp3"}],createdAt:"2019-05-02T18:03:13Z",updatedAt:"2019-05-02T18:03:13Z",lastPublishedAt:"2019-05-02T18:03:13Z"},{id:"b514",name:"[[Wall Show + Chroma]] GAS GAS GAS | Manuel",description:"This wall map is a bit more intense than my others, you will need a very hefty pc to run and record this. Have Fun!\n\nHere's a playthrough: https://www.youtube.com/watch?v=hlS6r-Usnro\nHere's a playthrough by Nico (HQ Version): https://youtu.be/F_3qRxDdQc0\n\nREQUIREMENTS: \n -Noodle Extensions\n -Chroma/ChromaLite\n(fixed formatting + removed stupid metadata ;)",uploader:{id:73008,name:"thelightdesigner",uniqueSet:!0,hash:"5cff0b7798cc5a672c85627a",avatar:"https://cdn.beatsaver.com/avatar/480555157952659489.png",type:"DISCORD"},metadata:{bpm:154,duration:108,songName:"GAS GAS GAS",songSubName:"(Short Ver.)",songAuthorName:"Manuel",levelAuthorName:"KyleT"},stats:{plays:0,downloads:9291,upvotes:2453,downvotes:41,score:.9377},uploaded:"2020-06-22T20:02:06.271Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"95e11f39b2898a38e3b5e61d2156ef5f5835f40f",key:"b514",state:"Published",createdAt:"2020-06-22T20:02:06.271Z",sageScore:3,diffs:[{njs:16.5,offset:0,notes:390,bombs:13,obstacles:13898,nps:3.832,length:261.25,characteristic:"Standard",difficulty:"Expert",events:1462,chroma:!0,me:!1,ne:!0,cinema:!1,seconds:101.786,paritySummary:{errors:0,warns:0,resets:2}}],downloadURL:"https://cdn.beatsaver.com/95e11f39b2898a38e3b5e61d2156ef5f5835f40f.zip",coverURL:"https://cdn.beatsaver.com/95e11f39b2898a38e3b5e61d2156ef5f5835f40f.jpg",previewURL:"https://cdn.beatsaver.com/95e11f39b2898a38e3b5e61d2156ef5f5835f40f.mp3"}],createdAt:"2020-06-22T20:02:06.271Z",updatedAt:"2020-06-22T20:02:06.271Z",lastPublishedAt:"2020-06-22T20:02:06.271Z"},{id:"774e",name:"Sad Machine - Porter Robinson",description:"77",uploader:{id:4285521,name:"ejiejidayo",uniqueSet:!0,hash:"5cff0b7398cc5a672c84fc58",avatar:"https://cdn.beatsaver.com/avatar/224894241279574016.png",type:"DISCORD"},metadata:{bpm:89,duration:257,songName:"Sad Machine",songSubName:"",songAuthorName:"Porter Robinson",levelAuthorName:"ejiejidayo"},stats:{plays:0,downloads:7096,upvotes:2724,downvotes:50,score:.9377},uploaded:"2019-12-18T21:56:31.549Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"7f6ab5de98ac1970e734ea6e26a539fa11cc4f66",key:"774e",state:"Published",createdAt:"2019-12-18T21:56:31.549Z",sageScore:4,diffs:[{njs:10,offset:-.4,notes:647,bombs:0,obstacles:237,nps:2.583,length:369.5,characteristic:"Standard",difficulty:"Hard",events:1973,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:249.101,paritySummary:{errors:1,warns:2,resets:0}},{njs:12,offset:-.6,notes:1025,bombs:0,obstacles:237,nps:4.092,length:369.5,characteristic:"Standard",difficulty:"Expert",events:1973,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:249.101,paritySummary:{errors:22,warns:20,resets:0}}],downloadURL:"https://cdn.beatsaver.com/7f6ab5de98ac1970e734ea6e26a539fa11cc4f66.zip",coverURL:"https://cdn.beatsaver.com/7f6ab5de98ac1970e734ea6e26a539fa11cc4f66.jpg",previewURL:"https://cdn.beatsaver.com/7f6ab5de98ac1970e734ea6e26a539fa11cc4f66.mp3"}],createdAt:"2019-12-18T21:56:31.549Z",updatedAt:"2019-12-18T21:56:31.549Z",lastPublishedAt:"2019-12-18T21:56:31.549Z"},{id:"1fe5",name:"I Just Can't Wait To Be King - Lion King OST - 100k Contest",description:'Unleash your inner beast with the song "I Just Can\'t Wait to be King" from the official Lion King Soundtrack! This map has difficulties from Easy to Expert, for everyone to enjoy! \r\nThis is one of the 22 maps that were mapped for the 100k Contest where you can win over $7,000 in prizes. Go to https://bsaber.com/100k-contest/ to register!\r\n\r\nPreview: https://youtu.be/YDAkqZR9Hs0',uploader:{id:47059,name:"rocket",uniqueSet:!0,hash:"5cff0b7398cc5a672c84f1c0",avatar:"https://www.gravatar.com/avatar/5cff0b7398cc5a672c84f1c0?d=retro",type:"SIMPLE"},metadata:{bpm:99,duration:168,songName:"I Just Can't Wait To Be King",songSubName:"Rowan Atkinson, Jason Weaver, Laura Williams",songAuthorName:"Rocket",levelAuthorName:"rocket"},stats:{plays:0,downloads:11682,upvotes:3499,downvotes:77,score:.9377},uploaded:"2018-11-12T16:50:07Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"1a3237630cd17aaa2af3f728621dcfdcce38edf1",key:"1fe5",state:"Published",createdAt:"2018-11-12T16:50:07Z",sageScore:5,diffs:[{njs:11,offset:0,notes:144,bombs:0,obstacles:16,nps:.91,length:261,characteristic:"Standard",difficulty:"Easy",events:466,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:158.182,paritySummary:{errors:44,warns:9,resets:0}},{njs:11,offset:0,notes:309,bombs:0,obstacles:16,nps:1.953,length:261,characteristic:"Standard",difficulty:"Normal",events:466,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:158.182,paritySummary:{errors:33,warns:18,resets:0}},{njs:11,offset:0,notes:452,bombs:0,obstacles:20,nps:2.857,length:261,characteristic:"Standard",difficulty:"Hard",events:466,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:158.182,paritySummary:{errors:46,warns:56,resets:0}},{njs:11,offset:0,notes:512,bombs:0,obstacles:20,nps:3.237,length:261,characteristic:"Standard",difficulty:"Expert",events:466,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:158.182,paritySummary:{errors:52,warns:70,resets:0}}],downloadURL:"https://cdn.beatsaver.com/1a3237630cd17aaa2af3f728621dcfdcce38edf1.zip",coverURL:"https://cdn.beatsaver.com/1a3237630cd17aaa2af3f728621dcfdcce38edf1.jpg",previewURL:"https://cdn.beatsaver.com/1a3237630cd17aaa2af3f728621dcfdcce38edf1.mp3"}],createdAt:"2018-11-12T16:50:07Z",updatedAt:"2018-11-12T16:50:07Z",lastPublishedAt:"2018-11-12T16:50:07Z"},{id:"ae0e",name:"Alan Walker - Spectre",description:'"Spectre", Alan Walker\'s second most popular NoCopyrightSounds track.\r\nThis is a remap of my very first map. Since a lot of people still like this track and want a proper map of it in Beat Saber, I decided to remap this track following the latest mapping standards. \r\n\r\nEasy : NPS 1.23 | NJS 10\r\nNormal : NPS 2.00 | NJS 10\r\nHard : NPS 3.28 | NJS 13\r\nExpert : NPS 4.44 | NJS 16\r\nExpert+ : NPS 5.41 | NJS 19\r\n\r\nShowcase:\r\nhttps://www.youtube.com/watch?v=Xq7_-0HPThA\r\n\r\nShout out to the following play-testers who play-tested my map:\r\n*lapras\r\n*officialMECH\r\n*Escapee\r\n\r\nFeel free to make your own map for this track.\r\n\r\nOriginal map: https://beatsaver.com/beatmap/155a\r\n\r\nIf you enjoy my work and wish to donate, the option is here :)\r\nPaypal: https://www.paypal.me/WeldonWen',uploader:{id:4286890,name:"weldonwen",uniqueSet:!0,hash:"5cff0b7498cc5a672c850433",avatar:"https://cdn.beatsaver.com/avatar/571472512924254229.png",type:"DISCORD"},metadata:{bpm:128,duration:231,songName:"Spectre ",songSubName:"",songAuthorName:"Alan Walker",levelAuthorName:"WeldonWen"},stats:{plays:0,downloads:11498,upvotes:2715,downvotes:50,score:.9376},uploaded:"2020-06-03T23:05:28.787Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"3c6f02ecbef50e2019d5938871a8f3fcdb7b07a2",key:"ae0e",state:"Published",createdAt:"2020-06-03T23:05:28.787Z",sageScore:7,diffs:[{njs:10,offset:1.04,notes:285,bombs:44,obstacles:40,nps:1.315,length:462.5,characteristic:"Standard",difficulty:"Easy",events:3884,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:216.797,paritySummary:{errors:81,warns:36,resets:0}},{njs:10,offset:.99,notes:464,bombs:51,obstacles:58,nps:2.136,length:463.5,characteristic:"Standard",difficulty:"Normal",events:3884,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:217.266,paritySummary:{errors:70,warns:10,resets:0}},{njs:13,offset:.259,notes:760,bombs:56,obstacles:42,nps:3.498,length:463.5,characteristic:"Standard",difficulty:"Hard",events:3883,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:217.266,paritySummary:{errors:2,warns:6,resets:0}},{njs:16,offset:-.2,notes:1029,bombs:45,obstacles:55,nps:4.736,length:463.5,characteristic:"Standard",difficulty:"Expert",events:3885,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:217.266,paritySummary:{errors:2,warns:0,resets:2}},{njs:19,offset:-.5,notes:1255,bombs:21,obstacles:46,nps:5.776,length:463.5,characteristic:"Standard",difficulty:"ExpertPlus",events:3963,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:217.266,paritySummary:{errors:1,warns:0,resets:1}}],downloadURL:"https://cdn.beatsaver.com/3c6f02ecbef50e2019d5938871a8f3fcdb7b07a2.zip",coverURL:"https://cdn.beatsaver.com/3c6f02ecbef50e2019d5938871a8f3fcdb7b07a2.jpg",previewURL:"https://cdn.beatsaver.com/3c6f02ecbef50e2019d5938871a8f3fcdb7b07a2.mp3"}],createdAt:"2020-06-03T23:05:28.787Z",updatedAt:"2020-06-03T23:05:28.787Z",lastPublishedAt:"2020-06-03T23:05:28.787Z"},{id:"7c05",name:"[Bloq Busters Vol. 2] The Sirens - Seven Lions & Jason Ross",description:"Part of Bloq Busters Vol 2 - Melodic Dubstep\r\n\r\nThis eerie but beautiful and powerful journey composed by Seven Lions and Jason Ross will take you on a trip!\r\n\r\nFeatures Chroma Lights and all difficulties from Normal to Expert++.",uploader:{id:4284569,name:"checkthepan",uniqueSet:!0,hash:"5cff0b7398cc5a672c84f3d5",avatar:"https://cdn.beatsaver.com/avatar/184355369189900290.png",type:"DISCORD"},metadata:{bpm:145,duration:237,songName:"The Sirens",songSubName:"",songAuthorName:"Seven Lions & Jason Ross",levelAuthorName:"Checkthepan"},stats:{plays:0,downloads:7774,upvotes:1475,downvotes:12,score:.9374},uploaded:"2020-01-03T22:46:03.484Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"0dadd6ab18e3ca0011459f16366e41ecffa5029e",key:"7c05",state:"Published",createdAt:"2020-01-03T22:46:03.484Z",sageScore:6,diffs:[{njs:10,offset:0,notes:383,bombs:0,obstacles:256,nps:1.78,length:520,characteristic:"Standard",difficulty:"Easy",events:11028,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:215.172,paritySummary:{errors:73,warns:6,resets:0}},{njs:13,offset:0,notes:624,bombs:32,obstacles:253,nps:2.9,length:520,characteristic:"Standard",difficulty:"Normal",events:11028,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:215.172,paritySummary:{errors:1,warns:0,resets:0}},{njs:15,offset:0,notes:927,bombs:263,obstacles:259,nps:4.308,length:520,characteristic:"Standard",difficulty:"Hard",events:11028,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:215.172,paritySummary:{errors:3,warns:0,resets:7}},{njs:17,offset:0,notes:1072,bombs:47,obstacles:256,nps:4.982,length:520,characteristic:"Standard",difficulty:"Expert",events:11028,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:215.172,paritySummary:{errors:2,warns:0,resets:2}},{njs:19,offset:-.25,notes:1256,bombs:134,obstacles:257,nps:5.837,length:520,characteristic:"Standard",difficulty:"ExpertPlus",events:11097,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:215.172,paritySummary:{errors:2,warns:2,resets:4}},{njs:19,offset:0,notes:0,bombs:0,obstacles:0,nps:0,length:0,characteristic:"Lightshow",difficulty:"Easy",events:11097,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:0,paritySummary:{errors:0,warns:0,resets:0}}],downloadURL:"https://cdn.beatsaver.com/0dadd6ab18e3ca0011459f16366e41ecffa5029e.zip",coverURL:"https://cdn.beatsaver.com/0dadd6ab18e3ca0011459f16366e41ecffa5029e.jpg",previewURL:"https://cdn.beatsaver.com/0dadd6ab18e3ca0011459f16366e41ecffa5029e.mp3"}],createdAt:"2020-01-03T22:46:03.484Z",updatedAt:"2020-01-03T22:46:03.484Z",lastPublishedAt:"2020-01-03T22:46:03.484Z"},{id:"7b68",name:"First of the Year (Equinox) - Skrillex",description:"First of the Year (Equinox) - Skrillex\n\nThis is my first map of 2020, and a huge throwback to when I first started listening to Skrillex. As well as it being a collaboration between myself, Checkthepan, Haclyon12, and CyanSnow.\n\nThanks to Checkthepan for making the 360 & 90-degree levels, Halcyon12 for the awesome chroma lights and CyanSnow for getting the files release ready. \n\nalso was originally trying to be the first map uploaded for 2020 but beatsaver had a stroke and now it's like the 5th or something\n",uploader:{id:4284904,name:"xscaramouche",uniqueSet:!0,hash:"5cff0b7798cc5a672c8558ed",avatar:"https://cdn.beatsaver.com/avatar/227538798387527680.png",type:"DISCORD"},metadata:{bpm:145,duration:257,songName:"First of the Year",songSubName:"(Equinox)",songAuthorName:"Skrillex",levelAuthorName:"xScaramouche & Checkthepan & Halcyon12"},stats:{plays:0,downloads:18265,upvotes:4286,downvotes:108,score:.9374},uploaded:"2020-01-01T04:28:55.040Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"2feafef61cad57ea2d6608eb54c39f139abb48c1",key:"7b68",state:"Published",createdAt:"2020-01-01T04:28:55.040Z",sageScore:7,diffs:[{njs:12,offset:1,notes:387,bombs:0,obstacles:183,nps:1.538,length:608,characteristic:"Standard",difficulty:"Easy",events:27335,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:251.586,paritySummary:{errors:183,warns:0,resets:0}},{njs:12,offset:1,notes:476,bombs:0,obstacles:182,nps:1.892,length:607.998,characteristic:"Standard",difficulty:"Normal",events:27335,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:251.585,paritySummary:{errors:124,warns:0,resets:0}},{njs:14,offset:.5,notes:658,bombs:9,obstacles:192,nps:2.615,length:608,characteristic:"Standard",difficulty:"Hard",events:27335,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:251.586,paritySummary:{errors:0,warns:0,resets:0}},{njs:16,offset:0,notes:1017,bombs:9,obstacles:180,nps:4.042,length:608,characteristic:"Standard",difficulty:"Expert",events:27335,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:251.586,paritySummary:{errors:0,warns:0,resets:0}},{njs:18,offset:-.35,notes:1359,bombs:39,obstacles:186,nps:5.402,length:608,characteristic:"Standard",difficulty:"ExpertPlus",events:27335,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:251.586,paritySummary:{errors:1,warns:0,resets:0}},{njs:17,offset:0,notes:1554,bombs:232,obstacles:45,nps:6.177,length:608,characteristic:"90Degree",difficulty:"ExpertPlus",events:27854,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:251.586,paritySummary:{errors:21,warns:0,resets:15}},{njs:17,offset:0,notes:1555,bombs:232,obstacles:44,nps:6.181,length:608,characteristic:"360Degree",difficulty:"ExpertPlus",events:27904,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:251.586,paritySummary:{errors:20,warns:0,resets:15}},{njs:69,offset:0,notes:0,bombs:0,obstacles:0,nps:0,length:0,characteristic:"Lightshow",difficulty:"Easy",events:27335,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:0,paritySummary:{errors:0,warns:0,resets:0}}],downloadURL:"https://cdn.beatsaver.com/2feafef61cad57ea2d6608eb54c39f139abb48c1.zip",coverURL:"https://cdn.beatsaver.com/2feafef61cad57ea2d6608eb54c39f139abb48c1.jpg",previewURL:"https://cdn.beatsaver.com/2feafef61cad57ea2d6608eb54c39f139abb48c1.mp3"}],createdAt:"2020-01-01T04:28:55.040Z",updatedAt:"2020-01-01T04:28:55.040Z",lastPublishedAt:"2020-01-01T04:28:55.040Z"},{id:"480",name:"Earth, Wind & Fire - September",description:"Expert | Hard | Normal\r\n\r\nBPM - 126\r\nDuration - 2:21\r\n\r\nPreview: https://youtu.be/FOob1xit17Y",uploader:{id:45732,name:"calijor",uniqueSet:!1,hash:"5cff0b7298cc5a672c84ebb1",avatar:"https://www.gravatar.com/avatar/5cff0b7298cc5a672c84ebb1?d=retro",type:"SIMPLE"},metadata:{bpm:126,duration:142,songName:"September",songSubName:"",songAuthorName:"Earth, Wind & Fire",levelAuthorName:"calijor"},stats:{plays:0,downloads:18722,upvotes:10791,downvotes:385,score:.9374},uploaded:"2018-06-09T18:27:58Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"aa2f7bf0df25cd57dddac159fa7c159f732e0553",key:"480",state:"Published",createdAt:"2018-06-09T18:27:58Z",sageScore:4,diffs:[{njs:10,offset:0,notes:291,bombs:0,obstacles:8,nps:2.171,length:281.469,characteristic:"Standard",difficulty:"Normal",events:832,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:134.033,paritySummary:{errors:61,warns:39,resets:0}},{njs:10,offset:0,notes:367,bombs:0,obstacles:8,nps:2.738,length:281.469,characteristic:"Standard",difficulty:"Hard",events:832,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:134.033,paritySummary:{errors:67,warns:65,resets:0}},{njs:10,offset:0,notes:409,bombs:0,obstacles:8,nps:3.051,length:281.469,characteristic:"Standard",difficulty:"Expert",events:832,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:134.033,paritySummary:{errors:75,warns:73,resets:0}}],downloadURL:"https://cdn.beatsaver.com/aa2f7bf0df25cd57dddac159fa7c159f732e0553.zip",coverURL:"https://cdn.beatsaver.com/aa2f7bf0df25cd57dddac159fa7c159f732e0553.jpg",previewURL:"https://cdn.beatsaver.com/aa2f7bf0df25cd57dddac159fa7c159f732e0553.mp3"}],createdAt:"2018-06-09T18:27:58Z",updatedAt:"2018-06-09T18:27:58Z",lastPublishedAt:"2018-06-09T18:27:58Z"},{id:"1181f",name:"Royal & the Serpent - Overwhelmed",description:"Feeling that finals crunch? Worried about the pandemic? General anxiety with the news, and just feeling overwhelmed? Don't forget to take a step back and take a breath. Maybe by dancing along to this song that perfectly captures all of those feelings! Complete with overwhelming Chroma 2.0 lights! And now the extra details:\n\nBPM: 87\nNPS: Ez - 1.71; N - 2.09; H - 2.75; Ex - 3.19; Ex+ - 4.11\nNotes: Ez - 277; N - 338; H - 444; Ex - 516; Ex+ - 664\nBombs: Ez - 0; N - 0; H - 4; Ex - 4; Ex+ - 4\nWalls: Ez - 136; N - 134; H - 144; Ex - 109; Ex+ - 109\n\nSpecial thanks to qwasyx, Smay, and Cyrix for playtesting!",uploader:{id:4285188,name:"fruhead",uniqueSet:!0,hash:"5cff0b7598cc5a672c852683",avatar:"https://cdn.beatsaver.com/avatar/174000100413145090.png",type:"DISCORD"},metadata:{bpm:87,duration:161,songName:"Overwhelmed",songSubName:"",songAuthorName:"Royal & the Serpent",levelAuthorName:"fruhead"},stats:{plays:0,downloads:8427,upvotes:1704,downvotes:19,score:.9371},uploaded:"2020-11-29T23:09:47.309Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"b748894960a346f1568b9f4876643f1358cfa897",key:"1181f",state:"Published",createdAt:"2020-11-29T23:09:47.309Z",sageScore:6,diffs:[{njs:10,offset:0,notes:277,bombs:0,obstacles:136,nps:1.793,length:224,characteristic:"Standard",difficulty:"Easy",events:7200,chroma:!0,me:!1,ne:!1,cinema:!1,seconds:154.483,paritySummary:{errors:43,warns:9,resets:0}},{njs:12,offset:-.3,notes:338,bombs:0,obstacles:134,nps:2.188,length:224,characteristic:"Standard",difficulty:"Normal",events:7200,chroma:!0,me:!1,ne:!1,cinema:!1,seconds:154.483,paritySummary:{errors:22,warns:11,resets:0}},{njs:14,offset:.4,notes:444,bombs:4,obstacles:144,nps:2.874,length:224,characteristic:"Standard",difficulty:"Hard",events:7200,chroma:!0,me:!1,ne:!1,cinema:!1,seconds:154.483,paritySummary:{errors:14,warns:4,resets:4}},{njs:16,offset:.25,notes:516,bombs:4,obstacles:109,nps:3.34,length:224,characteristic:"Standard",difficulty:"Expert",events:7200,chroma:!0,me:!1,ne:!1,cinema:!1,seconds:154.483,paritySummary:{errors:0,warns:0,resets:2}},{njs:18,offset:.1,notes:664,bombs:4,obstacles:109,nps:4.298,length:224,characteristic:"Standard",difficulty:"ExpertPlus",events:7200,chroma:!0,me:!1,ne:!1,cinema:!1,seconds:154.483,paritySummary:{errors:0,warns:0,resets:2}},{njs:16,offset:0,notes:0,bombs:0,obstacles:0,nps:0,length:0,characteristic:"Lightshow",difficulty:"Expert",events:7200,chroma:!0,me:!1,ne:!1,cinema:!1,seconds:0,paritySummary:{errors:0,warns:0,resets:0}}],downloadURL:"https://cdn.beatsaver.com/b748894960a346f1568b9f4876643f1358cfa897.zip",coverURL:"https://cdn.beatsaver.com/b748894960a346f1568b9f4876643f1358cfa897.jpg",previewURL:"https://cdn.beatsaver.com/b748894960a346f1568b9f4876643f1358cfa897.mp3"}],createdAt:"2020-11-29T23:09:47.309Z",updatedAt:"2020-11-29T23:09:47.309Z",lastPublishedAt:"2020-11-29T23:09:47.309Z"},{id:"3b31",name:"Wolfgang Lohr ft. Maskarade - Hit the Road Jack (Electro Swing)",description:"I realise this is the third time that this song has been made over the last month, so sorry for that. But If your not a fan of my version then please check out the other maps linked below.\r\nThis song happened because someone requested I do an electroswing map. This was not the one they asked for, but his request inspired me to do one of the same genre anyway. I'm happy with the way that expert turned out, but the other difficulties are perhaps a bit rushed on this one. I've left easy out again as the play rates are so low. But If this is a problem for anyone, please give me a message and I'll see about adding one in. Other than that, happy dancing!\r\n\r\nVideo Preview: https://www.youtube.com/watch?v=sg_hCGmoPNg\r\nTime spent mapping: 7:58\r\n\r\nAlternative versions:\r\nFrom SilverScythePC: https://beatsaver.com/browse/detail/12538-13416\r\nFrom Salvay: https://beatsaver.com/browse/detail/12752-13664",uploader:{id:4785,name:"stumi",uniqueSet:!1,hash:"5cff0b7398cc5a672c84f720",avatar:"https://www.gravatar.com/avatar/5cff0b7398cc5a672c84f720?d=retro",type:"SIMPLE"},metadata:{bpm:124,duration:159,songName:"Hit the Road Jack (Electro Swing)",songSubName:"Wolfgang Lohr and Maskerade",songAuthorName:"Stumi",levelAuthorName:"stumi"},stats:{plays:0,downloads:7058,upvotes:3315,downvotes:73,score:.937},uploaded:"2019-03-03T13:06:00Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"46afff5698b59795c5e88f0b610b8321fb9b1791",key:"3b31",state:"Published",createdAt:"2019-03-03T13:06:00Z",sageScore:6,diffs:[{njs:10,offset:0,notes:261,bombs:4,obstacles:38,nps:1.702,length:317,characteristic:"Standard",difficulty:"Normal",events:1419,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:153.387,paritySummary:{errors:21,warns:18,resets:2}},{njs:12,offset:0,notes:473,bombs:7,obstacles:33,nps:3.084,length:317,characteristic:"Standard",difficulty:"Hard",events:1419,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:153.387,paritySummary:{errors:45,warns:22,resets:1}},{njs:16,offset:0,notes:656,bombs:7,obstacles:32,nps:4.267,length:317.75,characteristic:"Standard",difficulty:"Expert",events:1419,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:153.75,paritySummary:{errors:42,warns:22,resets:1}}],downloadURL:"https://cdn.beatsaver.com/46afff5698b59795c5e88f0b610b8321fb9b1791.zip",coverURL:"https://cdn.beatsaver.com/46afff5698b59795c5e88f0b610b8321fb9b1791.jpg",previewURL:"https://cdn.beatsaver.com/46afff5698b59795c5e88f0b610b8321fb9b1791.mp3"}],createdAt:"2019-03-03T13:06:00Z",updatedAt:"2019-03-03T13:06:00Z",lastPublishedAt:"2019-03-03T13:06:00Z"},{id:"13e9",name:"dark cat - BUBBLE TEA",description:"--------------------------------\r\ndark cat - BUBBLE TEA (feat. juu & cinders)\r\nTime: 4:01\r\nExpert: 1087 Notes\r\nHard: 969 Notes\r\n--------------------------------\r\nHi guys, I'm a bit busy with school right now\r\nso my upload rate is going to slow down for a while..\r\n ^-^",uploader:{id:4288141,name:"roeek",uniqueSet:!0,hash:"5cff0b7398cc5a672c84f787",avatar:"https://cdn.beatsaver.com/avatar/321652344196694016.png",type:"DISCORD"},metadata:{bpm:160,duration:241,songName:"BUBBLE TEA",songSubName:"dark cat",songAuthorName:"Mapped by roeek",levelAuthorName:"roeek"},stats:{plays:0,downloads:12107,upvotes:8979,downvotes:310,score:.9368},uploaded:"2018-09-06T18:59:42Z",automapper:!1,ranked:!0,qualified:!1,versions:[{hash:"f83edec86d3faf683711ecb0a9df6bd65d2d0ce0",key:"13e9",state:"Published",createdAt:"2018-09-06T18:59:42Z",sageScore:6,diffs:[{njs:12,offset:0,notes:969,bombs:0,obstacles:12,nps:4.303,length:600.5,characteristic:"Standard",difficulty:"Hard",events:1043,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:225.188,paritySummary:{errors:26,warns:32,resets:0}},{njs:13,offset:0,notes:1087,bombs:0,obstacles:12,nps:4.827,length:600.5,characteristic:"Standard",difficulty:"Expert",events:1047,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:225.188,paritySummary:{errors:35,warns:36,resets:0},stars:3.65}],downloadURL:"https://cdn.beatsaver.com/f83edec86d3faf683711ecb0a9df6bd65d2d0ce0.zip",coverURL:"https://cdn.beatsaver.com/f83edec86d3faf683711ecb0a9df6bd65d2d0ce0.jpg",previewURL:"https://cdn.beatsaver.com/f83edec86d3faf683711ecb0a9df6bd65d2d0ce0.mp3"}],createdAt:"2018-09-06T18:59:42Z",updatedAt:"2018-09-06T18:59:42Z",lastPublishedAt:"2018-09-06T18:59:42Z"},{id:"46be",name:"Kill This Love - BLACKPINK",description:"Thanks to n3tman, snaccy, Helen Carnate, PandaCat, and SimplyMarvelous for their help.\n\nAfter a thousand years, BLACKPINK has finally come out with new songs. Hopefully this map will absolve me from what I did with my last BLACKPINK map (though I still snuck in some choreography to this map when it fit).\n\nExpert+ preview: https://youtu.be/7_epIbqHD3U (footage is of pre-release version)\n\nPreview video uses custom blackpink light sabers, which you can find in the kpop beat saber discord here\nhttps://discord.gg/c9uHGYP\nFollow me on Twitter u won't\nhttps://twitter.com/aggrogahu",uploader:{id:4284613,name:"aggrogahu",uniqueSet:!0,hash:"5cff0b7398cc5a672c84fdad",avatar:"https://cdn.beatsaver.com/avatar/158363872649150464.png",type:"DISCORD"},metadata:{bpm:132,duration:188,songName:"Kill This Love",songSubName:"BLACKPINK",songAuthorName:"aggrogahu",levelAuthorName:"aggrogahu"},stats:{plays:0,downloads:15888,upvotes:4507,downvotes:120,score:.9367},uploaded:"2019-04-18T03:00:19Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"8255fef3ce60e6a9ca404491b6d6fdfec158581e",key:"46be",state:"Published",createdAt:"2019-04-18T03:00:19Z",sageScore:3,diffs:[{njs:9,offset:0,notes:278,bombs:13,obstacles:15,nps:1.529,length:400,characteristic:"Standard",difficulty:"Normal",events:1344,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:181.818,paritySummary:{errors:57,warns:36,resets:6}},{njs:10,offset:0,notes:448,bombs:11,obstacles:18,nps:2.464,length:400,characteristic:"Standard",difficulty:"Hard",events:1344,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:181.818,paritySummary:{errors:47,warns:28,resets:6}},{njs:12,offset:0,notes:665,bombs:26,obstacles:19,nps:3.658,length:400,characteristic:"Standard",difficulty:"Expert",events:1344,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:181.818,paritySummary:{errors:39,warns:37,resets:3}},{njs:14,offset:0,notes:779,bombs:36,obstacles:19,nps:4.285,length:400,characteristic:"Standard",difficulty:"ExpertPlus",events:1344,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:181.818,paritySummary:{errors:55,warns:56,resets:7}}],downloadURL:"https://cdn.beatsaver.com/8255fef3ce60e6a9ca404491b6d6fdfec158581e.zip",coverURL:"https://cdn.beatsaver.com/8255fef3ce60e6a9ca404491b6d6fdfec158581e.jpg",previewURL:"https://cdn.beatsaver.com/8255fef3ce60e6a9ca404491b6d6fdfec158581e.mp3"}],createdAt:"2019-04-18T03:00:19Z",updatedAt:"2019-04-18T03:00:19Z",lastPublishedAt:"2019-04-18T03:00:19Z"},{id:"ce0",name:"South Park - Kyle's Mom's a Bitch",description:"Preview:\r\nhttps://www.youtube.com/watch?v=OjHoHbbZYDE\r\n\r\nKyle's mom's a bitch, she's a big fat bitch\r\nShe's the biggest bitch in the whole wide world",uploader:{id:4286278,name:"ruckus",uniqueSet:!0,hash:"5cff0b7398cc5a672c84f1d8",avatar:"https://cdn.beatsaver.com/avatar/239082462083284992.png",type:"DISCORD"},metadata:{bpm:156,duration:95,songName:"Kyle's Mom's a Bitch",songSubName:"South Park",songAuthorName:"Ruckus",levelAuthorName:"ruckus"},stats:{plays:0,downloads:6595,upvotes:3276,downvotes:73,score:.9367},uploaded:"2018-07-30T23:36:18Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"7fda5a2459b48226cc7dbaedf9c31f5fd7aff488",key:"ce0",state:"Published",createdAt:"2018-07-30T23:36:18Z",sageScore:4,diffs:[{njs:12,offset:0,notes:474,bombs:0,obstacles:0,nps:5.911,length:208.5,characteristic:"Standard",difficulty:"ExpertPlus",events:655,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:80.192,paritySummary:{errors:42,warns:23,resets:0}}],downloadURL:"https://cdn.beatsaver.com/7fda5a2459b48226cc7dbaedf9c31f5fd7aff488.zip",coverURL:"https://cdn.beatsaver.com/7fda5a2459b48226cc7dbaedf9c31f5fd7aff488.jpg",previewURL:"https://cdn.beatsaver.com/7fda5a2459b48226cc7dbaedf9c31f5fd7aff488.mp3"}],createdAt:"2018-07-30T23:36:18Z",updatedAt:"2018-07-30T23:36:18Z",lastPublishedAt:"2018-07-30T23:36:18Z"},{id:"a909",name:"[TheFatRat Pack] Time Lapse - TheFatRat",description:'Here it is! The unofficial "TheFatRat" Music Pack in Beat Saber - with all beatmaps being singlehandedly made by me!\n\nAll songs included in TheFatRat Music Pack:\nMonody (ft. Laura Brehm) \nUnity \nWindfall \nXenogenesis \nTime Lapse \n\nGet the full song pack here: https://bsaber.com/thefatrat-music-pack/\n(Or you should just be able to find all the other ones on my beatsaver profile as well. Heres a link to my profile: https://beatsaver.com/uploader/5d47d586c5301900060b2f6c)\n\nSongcore mod is recommended (for custom colours)\nPlays best on Origins Environment\n\nTime Lapse Stats:\nExpert+ - 782 Notes | 4.29 NPS\nExpert - 615 Notes | 3.37 NPS\n(One Saber) Expert - 496 Notes | 2.72 NPS\nHard - 493 Notes | 2.70 NPS\nNormal - 305 Notes | 1.67 NPS\nEasy - 180 Notes | 0.99 NPS\n\nRoughly 7-8 Hours of work\nGameplay: https://youtu.be/aYwKN3LnEZA\n\nObviously - A huge thanks to TheFatRat himself, for not only producing the songs in the first place (and allowing free access to use them for big and small content creators), but also being a huge inspiration to lots of artists out there and for making music that everyone can jam out to! We love you, TheFatRat!',uploader:{id:4284197,name:"timeweaver",uniqueSet:!0,hash:"5d47d586c5301900060b2f6c",avatar:"https://cdn.beatsaver.com/avatar/607399708121366529.png",type:"DISCORD"},metadata:{bpm:127,duration:182,songName:"Time Lapse",songSubName:"",songAuthorName:"TheFatRat",levelAuthorName:"Timeweaver"},stats:{plays:0,downloads:8459,upvotes:2334,downvotes:40,score:.9366},uploaded:"2020-05-22T13:28:32.918Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"a03cb0a107993be5cded1e91dc31e8a7b048f02a",key:"a909",state:"Published",createdAt:"2020-05-22T13:28:32.918Z",sageScore:6,diffs:[{njs:9,offset:0,notes:180,bombs:0,obstacles:33,nps:1.035,length:368,characteristic:"Standard",difficulty:"Easy",events:3139,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:173.858,paritySummary:{errors:40,warns:1,resets:0}},{njs:11,offset:1,notes:305,bombs:0,obstacles:41,nps:1.735,length:372,characteristic:"Standard",difficulty:"Normal",events:3139,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:175.748,paritySummary:{errors:24,warns:24,resets:0}},{njs:12,offset:1,notes:493,bombs:0,obstacles:36,nps:2.783,length:375,characteristic:"Standard",difficulty:"Hard",events:3139,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:177.165,paritySummary:{errors:3,warns:0,resets:0}},{njs:15,offset:.1,notes:614,bombs:1,obstacles:67,nps:3.429,length:379,characteristic:"Standard",difficulty:"Expert",events:3139,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:179.055,paritySummary:{errors:2,warns:0,resets:0}},{njs:19,offset:-.4,notes:782,bombs:0,obstacles:84,nps:4.402,length:376,characteristic:"Standard",difficulty:"ExpertPlus",events:3139,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:177.638,paritySummary:{errors:1,warns:0,resets:0}},{njs:16,offset:0,notes:496,bombs:0,obstacles:119,nps:2.792,length:376,characteristic:"OneSaber",difficulty:"Expert",events:3139,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:177.638,paritySummary:{errors:0,warns:0,resets:0}}],downloadURL:"https://cdn.beatsaver.com/a03cb0a107993be5cded1e91dc31e8a7b048f02a.zip",coverURL:"https://cdn.beatsaver.com/a03cb0a107993be5cded1e91dc31e8a7b048f02a.jpg",previewURL:"https://cdn.beatsaver.com/a03cb0a107993be5cded1e91dc31e8a7b048f02a.mp3"}],createdAt:"2020-05-22T13:28:32.918Z",updatedAt:"2020-05-22T13:28:32.918Z",lastPublishedAt:"2020-05-22T13:28:32.918Z"},{id:"8d49",name:"Dreamcatcher - Scream",description:"Expert+ by noxn and simplymarvellous\nExpert and Lighting by aggrogahu\n\nMap preview by aggrogahu: https://www.youtube.com/watch?v=Yv908yUt9O0\n\nExtra thanks to simplymarvellous for fixing all of my sync issues and creating some pog patterns while he was at it! And special thanks to Bloodcloak for some great changes and ideas!\n\nThis was my first collab map. I've really enjoyed playing it and working with people to make a great finished product!\n\nJoin us in the KPOP Beat Saber discord here: https://discord.gg/c9uHGYP\n\nAnd finally, my survey link <3: https://forms.gle/8nJVPiriTWPx9irT6",uploader:{id:4289789,name:"noxn",uniqueSet:!0,hash:"5daab87cc216d40006bef803",avatar:"https://cdn.beatsaver.com/avatar/132315398287785985.png",type:"DISCORD"},metadata:{bpm:138,duration:206,songName:"Scream",songSubName:"",songAuthorName:"Dreamcatcher",levelAuthorName:"noxn; simplymarvellous; aggrogahu"},stats:{plays:0,downloads:9907,upvotes:1737,downvotes:21,score:.9366},uploaded:"2020-03-04T23:07:51.556Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"94e31eda51f8afd9e59c9895972b80775556cf6a",key:"8d49",state:"Published",createdAt:"2020-03-04T23:07:51.556Z",sageScore:5,diffs:[{njs:16,offset:.2,notes:717,bombs:48,obstacles:36,nps:3.616,length:456,characteristic:"Standard",difficulty:"Expert",events:2568,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:198.261,paritySummary:{errors:19,warns:24,resets:9}},{njs:18,offset:-.5,notes:1068,bombs:52,obstacles:47,nps:5.387,length:456,characteristic:"Standard",difficulty:"ExpertPlus",events:2568,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:198.261,paritySummary:{errors:11,warns:15,resets:2}}],downloadURL:"https://cdn.beatsaver.com/94e31eda51f8afd9e59c9895972b80775556cf6a.zip",coverURL:"https://cdn.beatsaver.com/94e31eda51f8afd9e59c9895972b80775556cf6a.jpg",previewURL:"https://cdn.beatsaver.com/94e31eda51f8afd9e59c9895972b80775556cf6a.mp3"}],createdAt:"2020-03-04T23:07:51.556Z",updatedAt:"2020-03-04T23:07:51.556Z",lastPublishedAt:"2020-03-04T23:07:51.556Z"},{id:"129bf",name:"LeaF - Mope Mope(Noodle Extensions, Chroma)",description:"Preview:\nhttps://www.youtube.com/watch?v=p9U5Y2iFoRQ&t=11s\nWarnings:\n--Fast Flashing Images\n--Disturbing Contents\n--This Level is NOT for Children--\nRequirements:\nNoodle Extensions, Chroma\nLeft-Handed and Custom Notes will cause some bugs\nSome of the bombs are fake:)\nThank you Moe ChiaKi for testing the map OwO",uploader:{id:4289114,name:"waika",uniqueSet:!0,hash:"5cff0b7698cc5a672c85464f",avatar:"https://cdn.beatsaver.com/avatar/530663167244894220.png",type:"DISCORD"},metadata:{bpm:200,duration:111,songName:"Mope Mope",songSubName:"",songAuthorName:"LeaF",levelAuthorName:"waika"},stats:{plays:0,downloads:9472,upvotes:3722,downvotes:90,score:.9366},uploaded:"2021-01-12T07:11:32.915Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"6c9d463c1cf556246cf60bfaef75fc4f8ea3053f",key:"129bf",state:"Published",createdAt:"2021-01-12T07:11:32.915Z",sageScore:5,diffs:[{njs:16,offset:2,notes:968,bombs:4092,obstacles:303,nps:9.089,length:355,characteristic:"Standard",difficulty:"ExpertPlus",events:5812,chroma:!0,me:!1,ne:!0,cinema:!1,seconds:106.5,paritySummary:{errors:0,warns:0,resets:0}}],downloadURL:"https://cdn.beatsaver.com/6c9d463c1cf556246cf60bfaef75fc4f8ea3053f.zip",coverURL:"https://cdn.beatsaver.com/6c9d463c1cf556246cf60bfaef75fc4f8ea3053f.jpg",previewURL:"https://cdn.beatsaver.com/6c9d463c1cf556246cf60bfaef75fc4f8ea3053f.mp3"}],createdAt:"2021-01-12T07:11:32.915Z",updatedAt:"2021-01-12T07:11:32.915Z",lastPublishedAt:"2021-01-12T07:11:32.915Z"},{id:"12d9",name:"Snail's House - Pixel Galaxy",description:"Hard/Expert | BPM: 150 | Length: 3:46 | Notes: 493/787\r\n\r\nIt's a really nice song. Not much else to say\r\nA lot of manual lighting too :D\r\n\r\n10th Map.\r\n\r\nPreview:\r\nhttps://www.youtube.com/watch?v=5xvJlMob-ok\r\nSong:\r\nhttps://www.youtube.com/watch?v=3nlSDxvt6JU",uploader:{id:4285825,name:"fefeland",uniqueSet:!0,hash:"5cff0b7398cc5a672c84f3bb",avatar:"https://cdn.beatsaver.com/avatar/119360573191225344.png",type:"DISCORD"},metadata:{bpm:150,duration:227,songName:"Pixel Galaxy",songSubName:"Snail's House",songAuthorName:"FEFELAND",levelAuthorName:"fefeland"},stats:{plays:0,downloads:6468,upvotes:2912,downvotes:60,score:.9366},uploaded:"2018-08-31T22:56:17Z",automapper:!1,ranked:!0,qualified:!1,versions:[{hash:"848b35a0028465bc4d76fd3cafb5acc4b2c70d5a",key:"12d9",state:"Published",createdAt:"2018-08-31T22:56:17Z",sageScore:6,diffs:[{njs:9,offset:0,notes:493,bombs:0,obstacles:0,nps:2.268,length:543.5,characteristic:"Standard",difficulty:"Hard",events:1741,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:217.4,paritySummary:{errors:47,warns:20,resets:0},stars:1.49},{njs:12,offset:0,notes:787,bombs:0,obstacles:0,nps:3.62,length:543.5,characteristic:"Standard",difficulty:"Expert",events:1741,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:217.4,paritySummary:{errors:41,warns:28,resets:0}}],downloadURL:"https://cdn.beatsaver.com/848b35a0028465bc4d76fd3cafb5acc4b2c70d5a.zip",coverURL:"https://cdn.beatsaver.com/848b35a0028465bc4d76fd3cafb5acc4b2c70d5a.jpg",previewURL:"https://cdn.beatsaver.com/848b35a0028465bc4d76fd3cafb5acc4b2c70d5a.mp3"}],createdAt:"2018-08-31T22:56:17Z",updatedAt:"2018-08-31T22:56:17Z",lastPublishedAt:"2018-08-31T22:56:17Z"},{id:"124",name:"Rasputin (Funk Overload)",description:"Hard\r\nBpm 147\r\nspeed up version of rasputin Original",uploader:{id:48512,name:"jobas",uniqueSet:!1,hash:"5cff0b7298cc5a672c84e9a2",avatar:"https://www.gravatar.com/avatar/5cff0b7298cc5a672c84e9a2?d=retro",type:"SIMPLE"},metadata:{bpm:149,duration:239,songName:"Rasputin (Funk Overload)",songSubName:"",songAuthorName:"Jobas",levelAuthorName:"jobas"},stats:{plays:0,downloads:20546,upvotes:20981,downvotes:890,score:.9366},uploaded:"2018-05-19T16:36:34Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"9a1d001995cc0a2014352aa7148cbcbf2e489d89",key:"124",state:"Published",createdAt:"2018-05-19T16:36:34Z",sageScore:5,diffs:[{njs:10,offset:0,notes:768,bombs:0,obstacles:154,nps:3.329,length:586.013,characteristic:"Standard",difficulty:"Hard",events:1109,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:235.978,paritySummary:{errors:58,warns:141,resets:0}}],downloadURL:"https://cdn.beatsaver.com/9a1d001995cc0a2014352aa7148cbcbf2e489d89.zip",coverURL:"https://cdn.beatsaver.com/9a1d001995cc0a2014352aa7148cbcbf2e489d89.jpg",previewURL:"https://cdn.beatsaver.com/9a1d001995cc0a2014352aa7148cbcbf2e489d89.mp3"}],createdAt:"2018-05-19T16:36:34Z",updatedAt:"2018-05-19T16:36:34Z",lastPublishedAt:"2018-05-19T16:36:34Z"},{id:"12ad1",name:"Minnesota - Colors (ft. Jackie Rain) | Chroma RGB",description:"Chroma 2.0 HIGHLY RECOMMENDED!\n\nHad this map sitting in my project folder for some months and finally got to finish it! \nIt features a Chroma RGB lightshow AND Rainbow notes, for the full COLOR experience :)\n\nPreview: https://www.youtube.com/watch?v=8Omzd7IdJt0",uploader:{id:4284201,name:"nitronikexe",uniqueSet:!0,hash:"5cff0b7798cc5a672c855d84",avatar:"https://cdn.beatsaver.com/avatar/428230049704181760.png",type:"DISCORD"},metadata:{bpm:140,duration:202,songName:"Colors",songSubName:"(ft. Jackie Rain)",songAuthorName:"Minnesota",levelAuthorName:"nitronik.exe"},stats:{plays:0,downloads:3903,upvotes:1230,downvotes:7,score:.9364},uploaded:"2021-01-13T15:55:44.846Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"03fcb98091e50600d9d777251d765c53384c2735",key:"12ad1",state:"Published",createdAt:"2021-01-13T15:55:44.846Z",sageScore:4,diffs:[{njs:13,offset:.5,notes:395,bombs:0,obstacles:221,nps:2.057,length:448,characteristic:"Standard",difficulty:"Hard",events:16569,chroma:!0,me:!1,ne:!1,cinema:!1,seconds:192,paritySummary:{errors:0,warns:0,resets:0}},{njs:16,offset:0,notes:601,bombs:0,obstacles:113,nps:3.13,length:448,characteristic:"Standard",difficulty:"Expert",events:16569,chroma:!0,me:!1,ne:!1,cinema:!1,seconds:192,paritySummary:{errors:0,warns:0,resets:0}},{njs:19,offset:-.5,notes:911,bombs:0,obstacles:120,nps:4.745,length:448,characteristic:"Standard",difficulty:"ExpertPlus",events:16569,chroma:!0,me:!1,ne:!1,cinema:!1,seconds:192,paritySummary:{errors:0,warns:0,resets:0}}],downloadURL:"https://cdn.beatsaver.com/03fcb98091e50600d9d777251d765c53384c2735.zip",coverURL:"https://cdn.beatsaver.com/03fcb98091e50600d9d777251d765c53384c2735.jpg",previewURL:"https://cdn.beatsaver.com/03fcb98091e50600d9d777251d765c53384c2735.mp3"}],createdAt:"2021-01-13T15:55:44.846Z",updatedAt:"2021-01-13T15:55:44.846Z",lastPublishedAt:"2021-01-13T15:55:44.846Z"},{id:"6094",name:"Legend - The Score",description:"https://www.youtube.com/watch?v=M5oxJRVwwCY",uploader:{id:4285982,name:"downycat",uniqueSet:!0,hash:"5cff0b7398cc5a672c84ede5",avatar:"https://cdn.beatsaver.com/avatar/173538829888782336.png",type:"DISCORD"},metadata:{bpm:82,duration:190,songName:"Legend",songSubName:"",songAuthorName:"The Score",levelAuthorName:"DownyCat"},stats:{plays:0,downloads:5059,upvotes:1752,downvotes:22,score:.9363},uploaded:"2019-09-01T13:23:40.596Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"f1c24c4b08a1126017ba8a96da4828d2d949f46b",key:"6094",state:"Published",createdAt:"2019-09-01T13:23:40.596Z",sageScore:6,diffs:[{njs:12,offset:0,notes:357,bombs:0,obstacles:37,nps:2.006,length:243.25,characteristic:"Standard",difficulty:"Normal",events:3490,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:177.988,paritySummary:{errors:5,warns:0,resets:0}},{njs:12,offset:0,notes:537,bombs:0,obstacles:47,nps:3.017,length:243.25,characteristic:"Standard",difficulty:"Hard",events:3490,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:177.988,paritySummary:{errors:3,warns:0,resets:0}},{njs:16,offset:0,notes:728,bombs:0,obstacles:42,nps:4.09,length:243.25,characteristic:"Standard",difficulty:"Expert",events:3490,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:177.988,paritySummary:{errors:5,warns:3,resets:0}}],downloadURL:"https://cdn.beatsaver.com/f1c24c4b08a1126017ba8a96da4828d2d949f46b.zip",coverURL:"https://cdn.beatsaver.com/f1c24c4b08a1126017ba8a96da4828d2d949f46b.jpg",previewURL:"https://cdn.beatsaver.com/f1c24c4b08a1126017ba8a96da4828d2d949f46b.mp3"}],createdAt:"2019-09-01T13:23:40.596Z",updatedAt:"2019-09-01T13:23:40.596Z",lastPublishedAt:"2019-09-01T13:23:40.596Z"},{id:"d4a5",name:"[FUTURE FUNK PACK] Shiawase No Monosashi (VANTAGE // Short Ver.)",description:'FUTURE FUNK MAP PACK\n2 songs uploaded everyday through August 10th - 14th!\n\n"Shiawase No Monosashi" is performed by Mariya Takeuchi. This version of the song is a short edit I made from VANTAGE //\'s edit. The original length of the song is 5 minutes long\n\nPlease look forward to the upcoming maps!\n\nDM any feedback on Discord\nETAN#8341',uploader:{id:4235140,name:"etan",uniqueSet:!0,hash:"5cff0b7798cc5a672c855775",avatar:"https://cdn.beatsaver.com/avatar/136373107559497728.png",type:"DISCORD"},metadata:{bpm:128,duration:171,songName:"Shiawase No Monosashi",songSubName:"(VANTAGE // Short Ver.)",songAuthorName:"Mariya Takeuchi",levelAuthorName:"ETAN"},stats:{plays:0,downloads:6944,upvotes:1542,downvotes:16,score:.9362},uploaded:"2020-08-12T18:17:44.285Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"d7cb32f23041dec272de3da0ac141dd8f91478ca",key:"d4a5",state:"Published",createdAt:"2020-08-12T18:17:44.285Z",sageScore:7,diffs:[{njs:10,offset:1,notes:168,bombs:16,obstacles:1,nps:1.029,length:348.25,characteristic:"Standard",difficulty:"Easy",events:7775,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:163.242,paritySummary:{errors:0,warns:0,resets:0}},{njs:11,offset:1,notes:255,bombs:16,obstacles:1,nps:1.562,length:348.25,characteristic:"Standard",difficulty:"Normal",events:7775,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:163.242,paritySummary:{errors:1,warns:1,resets:0}},{njs:12,offset:1,notes:358,bombs:16,obstacles:1,nps:2.193,length:348.25,characteristic:"Standard",difficulty:"Hard",events:7775,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:163.242,paritySummary:{errors:0,warns:0,resets:0}},{njs:15,offset:0,notes:557,bombs:16,obstacles:1,nps:3.335,length:356.25,characteristic:"Standard",difficulty:"Expert",events:7775,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:166.992,paritySummary:{errors:0,warns:0,resets:0}},{njs:19,offset:-.5,notes:778,bombs:16,obstacles:1,nps:4.659,length:356.25,characteristic:"Standard",difficulty:"ExpertPlus",events:7775,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:166.992,paritySummary:{errors:0,warns:0,resets:0}}],downloadURL:"https://cdn.beatsaver.com/d7cb32f23041dec272de3da0ac141dd8f91478ca.zip",coverURL:"https://cdn.beatsaver.com/d7cb32f23041dec272de3da0ac141dd8f91478ca.jpg",previewURL:"https://cdn.beatsaver.com/d7cb32f23041dec272de3da0ac141dd8f91478ca.mp3"}],createdAt:"2020-08-12T18:17:44.285Z",updatedAt:"2020-08-12T18:17:44.285Z",lastPublishedAt:"2020-08-12T18:17:44.285Z"},{id:"75a8",name:"Silhouette [Naruto Shippuden 16th Opening] - KANA-BOON",description:"This map was converted from one of my old maps.\n\nFeel free to DM me on discord @Joetastic#2501",uploader:{id:58338,name:"Joetastic",uniqueSet:!0,hash:"5cff0b7498cc5a672c85050e",avatar:"https://cdn.beatsaver.com/avatar/227767566402191360.png",type:"DISCORD"},metadata:{bpm:183,duration:127,songName:"Silhouette (TV Size)",songSubName:"",songAuthorName:"KANA-BOON",levelAuthorName:"Joetastic"},stats:{plays:0,downloads:10318,upvotes:2707,downvotes:54,score:.9362},uploaded:"2019-12-11T07:31:02.566Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"ba8d44529d21da1128bc70034ee608b6e8a19a63",key:"75a8",state:"Published",createdAt:"2019-12-11T07:31:02.566Z",sageScore:4,diffs:[{njs:12,offset:0,notes:412,bombs:0,obstacles:0,nps:3.383,length:371.5,characteristic:"Standard",difficulty:"Hard",events:2826,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:121.803,paritySummary:{errors:20,warns:20,resets:0}},{njs:14,offset:0,notes:520,bombs:0,obstacles:0,nps:4.269,length:371.5,characteristic:"Standard",difficulty:"Expert",events:2826,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:121.803,paritySummary:{errors:42,warns:24,resets:0}},{njs:16,offset:0,notes:710,bombs:0,obstacles:0,nps:5.829,length:371.5,characteristic:"Standard",difficulty:"ExpertPlus",events:3013,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:121.803,paritySummary:{errors:51,warns:65,resets:0}}],downloadURL:"https://cdn.beatsaver.com/ba8d44529d21da1128bc70034ee608b6e8a19a63.zip",coverURL:"https://cdn.beatsaver.com/ba8d44529d21da1128bc70034ee608b6e8a19a63.jpg",previewURL:"https://cdn.beatsaver.com/ba8d44529d21da1128bc70034ee608b6e8a19a63.mp3"}],createdAt:"2019-12-11T07:31:02.566Z",updatedAt:"2019-12-11T07:31:02.566Z",lastPublishedAt:"2019-12-11T07:31:02.566Z"},{id:"5e44",name:"Wolf In Sheep's Clothing - Set It Off",description:"“Wolf In Sheep’s Clothing” is a song by American pop punk band Set It Off. The song appears on their album Duality.",uploader:{id:58338,name:"Joetastic",uniqueSet:!0,hash:"5cff0b7498cc5a672c85050e",avatar:"https://cdn.beatsaver.com/avatar/227767566402191360.png",type:"DISCORD"},metadata:{bpm:165,duration:189,songName:"Wolf In Sheep's Clothing",songSubName:"",songAuthorName:"Set It Off",levelAuthorName:"Joetastic"},stats:{plays:0,downloads:3557,upvotes:1766,downvotes:23,score:.936},uploaded:"2019-08-21T14:32:59.705Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"71498322889259738dfbd9fdae23fc94bc382793",key:"5e44",state:"Published",createdAt:"2019-08-21T14:32:59.705Z",sageScore:6,diffs:[{njs:15,offset:0,notes:710,bombs:12,obstacles:2,nps:3.844,length:508,characteristic:"Standard",difficulty:"Expert",events:2219,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:184.727,paritySummary:{errors:45,warns:50,resets:0}}],downloadURL:"https://cdn.beatsaver.com/71498322889259738dfbd9fdae23fc94bc382793.zip",coverURL:"https://cdn.beatsaver.com/71498322889259738dfbd9fdae23fc94bc382793.jpg",previewURL:"https://cdn.beatsaver.com/71498322889259738dfbd9fdae23fc94bc382793.mp3"}],createdAt:"2019-08-21T14:32:59.705Z",updatedAt:"2019-08-21T14:32:59.705Z",lastPublishedAt:"2019-08-21T14:32:59.705Z"},{id:"2db0",name:"RESISTER [Sword Art Online: Alicization 2nd Opening] - ASCA",description:"As requested by @Shoko84 & @Sotarks: RESISTER, the second opening to Sword Art Online: Alicization by ASCA!\r\n\r\n(Originally came in only expert plus but poor Sotarks couldn't do it so thank him for making me include an expert and hard xP)",uploader:{id:58338,name:"Joetastic",uniqueSet:!0,hash:"5cff0b7498cc5a672c85050e",avatar:"https://cdn.beatsaver.com/avatar/227767566402191360.png",type:"DISCORD"},metadata:{bpm:183,duration:226,songName:"RESISTER",songSubName:"ASCA",songAuthorName:"Joetastic",levelAuthorName:"Joetastic"},stats:{plays:0,downloads:6798,upvotes:3257,downvotes:75,score:.9359},uploaded:"2019-01-14T18:07:01Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"eb52dc76edd0eeee542ca6d339127f88dce9a5f4",key:"2db0",state:"Published",createdAt:"2019-01-14T18:07:01Z",sageScore:6,diffs:[{njs:11,offset:0,notes:852,bombs:0,obstacles:45,nps:3.85,length:675,characteristic:"Standard",difficulty:"Hard",events:4117,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:221.311,paritySummary:{errors:39,warns:22,resets:0}},{njs:13,offset:0,notes:970,bombs:0,obstacles:45,nps:4.383,length:675,characteristic:"Standard",difficulty:"Expert",events:4117,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:221.311,paritySummary:{errors:47,warns:56,resets:0}},{njs:15,offset:0,notes:1162,bombs:0,obstacles:51,nps:5.251,length:675,characteristic:"Standard",difficulty:"ExpertPlus",events:4117,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:221.311,paritySummary:{errors:36,warns:43,resets:0}}],downloadURL:"https://cdn.beatsaver.com/eb52dc76edd0eeee542ca6d339127f88dce9a5f4.zip",coverURL:"https://cdn.beatsaver.com/eb52dc76edd0eeee542ca6d339127f88dce9a5f4.jpg",previewURL:"https://cdn.beatsaver.com/eb52dc76edd0eeee542ca6d339127f88dce9a5f4.mp3"}],createdAt:"2019-01-14T18:07:01Z",updatedAt:"2019-01-14T18:07:01Z",lastPublishedAt:"2019-01-14T18:07:01Z"},{id:"2475",name:"Bring It On - Giga-P",description:"Probably Giga-P's most famous song, Bring It On / 劣等上等 (Rettou Joutou / Inferiority Superiority), made for the 10th anniversary of the Vocaloids Rin and Len. This song has quickly entered the Hall of Fame and rightly so as it is one of everyone's (or at least, mine) favorite Vocaloid songs. because of that I knew I had to make a good map out of it. I had a lot of fun making this one and I hope it shows!\r\n\r\nAudio edits: extended intro and slight enhancements to the mix has been made since I had access to the vocals and karaoke tracks, to make the audio fit better in Beat Saber.\r\n\r\nPreview video:\r\nhttps://youtu.be/16oSzYCTD3A\r\n\r\nBPM: 160\r\nDuration: 3:56\r\nEasy, Normal, Hard and Expert difficulties.\r\n\r\nEasy: 335, 7 obstacles, 4 mines\r\nNormal: 469 notes, 10 obstacles, 8 mines\r\nHard: 665 notes, 14 obstacles, 24 mines\r\nExpert: 845 notes, 15 obstacles, 28 mines\r\n\r\nMap includes three different audio versions:\r\n* Full vocal version; the standard version of the song.\r\n* Karaoke version; you can sing along with backing vocals!\r\n* Instrumental version; If you don't want any backing or main vocals this is the version to use.\r\nTo change between these search for \"GigaP_Bring_It_On.ogg\" in your CustomSongs folder and open the folder where that file resides. Change the name of GigaP_Bring_It_On.ogg to GigaP_Bring_It_On_Standard.ogg and rename any of the other two versions to GigaP_Bring_It_On.ogg. Start the game and enjoy!\r\n\r\nThanks to AaltopahWi, RedMagi and ManDynasty for playtesting!\r\n\r\nEnjoy!",uploader:{id:4285318,name:"kolezan",uniqueSet:!0,hash:"5cff0b7398cc5a672c84fcbb",avatar:"https://cdn.beatsaver.com/avatar/220513618763055106.png",type:"DISCORD"},metadata:{bpm:160,duration:236,songName:"Bring It On",songSubName:"Giga-P",songAuthorName:"Kolezan",levelAuthorName:"Kolezan"},stats:{plays:0,downloads:9117,upvotes:3878,downvotes:99,score:.9359},uploaded:"2018-12-07T21:36:14Z",automapper:!1,ranked:!0,qualified:!1,versions:[{hash:"4cb323a4340177d7b7ca74f67f6b920ed320ee5e",key:"2475",state:"Published",createdAt:"2018-12-07T21:36:14Z",sageScore:5,diffs:[{njs:10,offset:0,notes:335,bombs:4,obstacles:7,nps:1.462,length:611,characteristic:"Standard",difficulty:"Easy",events:2906,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:229.125,paritySummary:{errors:63,warns:28,resets:0},stars:1.02},{njs:11,offset:0,notes:469,bombs:8,obstacles:10,nps:2.047,length:611,characteristic:"Standard",difficulty:"Normal",events:2906,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:229.125,paritySummary:{errors:69,warns:52,resets:4},stars:1.36},{njs:12,offset:0,notes:665,bombs:24,obstacles:14,nps:2.902,length:611,characteristic:"Standard",difficulty:"Hard",events:2906,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:229.125,paritySummary:{errors:74,warns:79,resets:7},stars:1.95},{njs:13,offset:0,notes:845,bombs:28,obstacles:15,nps:3.688,length:611,characteristic:"Standard",difficulty:"Expert",events:3259,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:229.125,paritySummary:{errors:91,warns:115,resets:12},stars:2.64}],downloadURL:"https://cdn.beatsaver.com/4cb323a4340177d7b7ca74f67f6b920ed320ee5e.zip",coverURL:"https://cdn.beatsaver.com/4cb323a4340177d7b7ca74f67f6b920ed320ee5e.jpg",previewURL:"https://cdn.beatsaver.com/4cb323a4340177d7b7ca74f67f6b920ed320ee5e.mp3"}],createdAt:"2018-12-07T21:36:14Z",updatedAt:"2018-12-07T21:36:14Z",lastPublishedAt:"2018-12-07T21:36:14Z"},{id:"19d5",name:"BABY GOT BACK - Sir Mix A Lot (Mapped by GreatYazer)",description:"Oh, my, God Becky, look at her butt",uploader:{id:41378,name:"greatyazer",uniqueSet:!0,hash:"5cff0b7298cc5a672c84ea71",avatar:"https://www.gravatar.com/avatar/5cff0b7298cc5a672c84ea71?d=retro",type:"SIMPLE"},metadata:{bpm:128,duration:265,songName:"Baby Got Back",songSubName:"Sir Mix A Lot",songAuthorName:"GreatYazer",levelAuthorName:"greatyazer"},stats:{plays:0,downloads:9264,upvotes:3382,downvotes:80,score:.9359},uploaded:"2018-10-12T12:34:15Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"9d5dbcb878623f3396395cec0e6e8e07d48d2256",key:"19d5",state:"Published",createdAt:"2018-10-12T12:34:15Z",sageScore:5,diffs:[{njs:10,offset:0,notes:254,bombs:0,obstacles:0,nps:1.044,length:519,characteristic:"Standard",difficulty:"Easy",events:2124,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:243.281,paritySummary:{errors:61,warns:19,resets:0}},{njs:10,offset:0,notes:394,bombs:0,obstacles:1,nps:1.62,length:519,characteristic:"Standard",difficulty:"Normal",events:2124,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:243.281,paritySummary:{errors:100,warns:34,resets:0}},{njs:10,offset:0,notes:603,bombs:0,obstacles:9,nps:2.479,length:519,characteristic:"Standard",difficulty:"Hard",events:2124,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:243.281,paritySummary:{errors:79,warns:48,resets:0}},{njs:10,offset:0,notes:889,bombs:0,obstacles:14,nps:3.654,length:519,characteristic:"Standard",difficulty:"Expert",events:2124,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:243.281,paritySummary:{errors:107,warns:66,resets:0}}],downloadURL:"https://cdn.beatsaver.com/9d5dbcb878623f3396395cec0e6e8e07d48d2256.zip",coverURL:"https://cdn.beatsaver.com/9d5dbcb878623f3396395cec0e6e8e07d48d2256.jpg",previewURL:"https://cdn.beatsaver.com/9d5dbcb878623f3396395cec0e6e8e07d48d2256.mp3"}],createdAt:"2018-10-12T12:34:15Z",updatedAt:"2018-10-12T12:34:15Z",lastPublishedAt:"2018-10-12T12:34:15Z"},{id:"d00c",name:"[Extra Sensory] Hayako - Analys",description:'WE ARE BACK\n\nMassive thanks to these people for making all of this possible!!\nAeroluna- For making Noodle Extensions and updating Chroma\nCyan- For spending almost a full day starting at effects with and for me and also helping with making sure the mapping wasnt horrible\nArti- CusomJsonData and helping make this whole project happen initially at all!!\nFMS_Cat- Map heavily inspired and made from his original, https://youtu.be/eqZE60HanCM . The we are back text was also modeled after that in his chart\n\nAnd anyone else who helped me out while I was being dumb with this whole thing\n\nThis map was released as a part of the "Extra Sensory" event.\n\nVideo: https://youtu.be/sYkW_AWUEL8',uploader:{id:4235136,name:"reaxt",uniqueSet:!0,hash:"5cff0b7298cc5a672c84e8ab",avatar:"https://cdn.beatsaver.com/avatar/163052863038291970.png",type:"DISCORD"},metadata:{bpm:170,duration:129,songName:"ANALYS",songSubName:"",songAuthorName:"HAYAKO",levelAuthorName:"Reaxt"},stats:{plays:0,downloads:6832,upvotes:4995,downvotes:145,score:.9358},uploaded:"2020-08-06T16:52:58.027Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"f6dbd83b699872e2e42c2fc90337ef0ac2ab8f30",key:"d00c",state:"Published",createdAt:"2020-08-06T16:52:58.027Z",sageScore:3,diffs:[{njs:19,offset:0,notes:2390,bombs:100,obstacles:502,nps:19.238,length:352,characteristic:"Standard",difficulty:"ExpertPlus",events:2478,chroma:!0,me:!1,ne:!0,cinema:!1,seconds:124.235,paritySummary:{errors:149,warns:3,resets:0}}],downloadURL:"https://cdn.beatsaver.com/f6dbd83b699872e2e42c2fc90337ef0ac2ab8f30.zip",coverURL:"https://cdn.beatsaver.com/f6dbd83b699872e2e42c2fc90337ef0ac2ab8f30.jpg",previewURL:"https://cdn.beatsaver.com/f6dbd83b699872e2e42c2fc90337ef0ac2ab8f30.mp3"}],createdAt:"2020-08-06T16:52:58.027Z",updatedAt:"2020-08-06T16:52:58.027Z",lastPublishedAt:"2020-08-06T16:52:58.027Z"},{id:"85b",name:"Take Me Home, Country Road - Fallout 76 Version",description:"Easy to beat, but a blast to play through. Enjoy!",uploader:{id:50560,name:"npcinnkeeper",uniqueSet:!0,hash:"5cff0b7398cc5a672c84f8e7",avatar:"https://www.gravatar.com/avatar/5cff0b7398cc5a672c84f8e7?d=retro",type:"SIMPLE"},metadata:{bpm:160,duration:178,songName:"Take Me Home, Country Roads",songSubName:"Fallout 76",songAuthorName:"NPC Innkeeper",levelAuthorName:"npcinnkeeper"},stats:{plays:0,downloads:12534,upvotes:5946,downvotes:185,score:.9358},uploaded:"2018-07-07T14:08:33Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"9ed3b706b2306c00c2ad70a287c784277dbb5d74",key:"85b",state:"Published",createdAt:"2018-07-07T14:08:33Z",sageScore:4,diffs:[{njs:10,offset:0,notes:536,bombs:14,obstacles:13,nps:3.131,length:456.5,characteristic:"Standard",difficulty:"Hard",events:954,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:171.188,paritySummary:{errors:141,warns:29,resets:0}}],downloadURL:"https://cdn.beatsaver.com/9ed3b706b2306c00c2ad70a287c784277dbb5d74.zip",coverURL:"https://cdn.beatsaver.com/9ed3b706b2306c00c2ad70a287c784277dbb5d74.jpg",previewURL:"https://cdn.beatsaver.com/9ed3b706b2306c00c2ad70a287c784277dbb5d74.mp3"}],createdAt:"2018-07-07T14:08:33Z",updatedAt:"2018-07-07T14:08:33Z",lastPublishedAt:"2018-07-07T14:08:33Z"},{id:"4d62",name:"Skrillex - Bangarang",description:"Feedback on Discord: nitronik.exe#7974\n\nNOTE: There are two expert+ difficulties and so there is no easy mode!\nanyways, hope you enjoy!\npreview: https://www.youtube.com/watch?v=p0Z6U8x9fb4",uploader:{id:4284201,name:"nitronikexe",uniqueSet:!0,hash:"5cff0b7798cc5a672c855d84",avatar:"https://cdn.beatsaver.com/avatar/428230049704181760.png",type:"DISCORD"},metadata:{bpm:110,duration:219,songName:"Bangarang",songSubName:"Skrillex",songAuthorName:"nitronik.exe",levelAuthorName:"nitronikexe"},stats:{plays:0,downloads:12246,upvotes:5033,downvotes:147,score:.9357},uploaded:"2019-05-17T11:28:44Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"137e76fcfb08e99695f481f7133cef173fd7fa8e",key:"4d62",state:"Published",createdAt:"2019-05-17T11:28:44Z",sageScore:8,diffs:[{njs:10,offset:0,notes:631,bombs:0,obstacles:6,nps:3.152,length:367,characteristic:"Standard",difficulty:"Easy",events:7633,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:200.182,paritySummary:{errors:129,warns:0,resets:0}},{njs:10,offset:0,notes:708,bombs:0,obstacles:14,nps:3.527,length:368,characteristic:"Standard",difficulty:"Normal",events:7633,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:200.727,paritySummary:{errors:26,warns:25,resets:0}},{njs:13,offset:0,notes:881,bombs:0,obstacles:14,nps:4.389,length:368,characteristic:"Standard",difficulty:"Hard",events:7633,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:200.727,paritySummary:{errors:3,warns:3,resets:0}},{njs:16,offset:0,notes:1032,bombs:108,obstacles:29,nps:5.141,length:368,characteristic:"Standard",difficulty:"Expert",events:7633,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:200.727,paritySummary:{errors:2,warns:0,resets:4}},{njs:17,offset:0,notes:1088,bombs:0,obstacles:26,nps:5.42,length:368,characteristic:"Standard",difficulty:"ExpertPlus",events:7633,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:200.727,paritySummary:{errors:54,warns:42,resets:0}}],downloadURL:"https://cdn.beatsaver.com/137e76fcfb08e99695f481f7133cef173fd7fa8e.zip",coverURL:"https://cdn.beatsaver.com/137e76fcfb08e99695f481f7133cef173fd7fa8e.jpg",previewURL:"https://cdn.beatsaver.com/137e76fcfb08e99695f481f7133cef173fd7fa8e.mp3"}],createdAt:"2019-05-17T11:28:44Z",updatedAt:"2019-05-17T11:28:44Z",lastPublishedAt:"2019-05-17T11:28:44Z"},{id:"97ac",name:"Mick Gordon - Unholy Crusade",description:"Rip and tear\r\n\r\n\r\nExtra super huge thank you to the following people for making this possible\r\nAeroluna- For making Noodle Extensions and updating Chroma\r\nSpooky Ghost- For making Beatwalls\r\nArti- For making the core mod that allowed Noodle Extensions and Chroma to support the new values\r\n\r\nAnd thank you for putting up with my shit during this :)\r\n\r\nVideo: https://www.youtube.com/watch?v=zhIIh3nccNQ",uploader:{id:4235138,name:"CyanSnow",uniqueSet:!0,hash:"5cff0b7698cc5a672c8543ac",avatar:"https://cdn.beatsaver.com/avatar/154341137694326784.png",type:"DISCORD"},metadata:{bpm:150,duration:167,songName:"Unholy Crusade",songSubName:"",songAuthorName:"Mick Gordon",levelAuthorName:"CyanSnow"},stats:{plays:0,downloads:6492,upvotes:2903,downvotes:63,score:.9356},uploaded:"2020-04-05T15:44:13.116Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"abc41236f324093fbf711abce8c18c2a47debe20",key:"97ac",state:"Published",createdAt:"2020-04-05T15:44:13.116Z",sageScore:4,diffs:[{njs:19,offset:-.3,notes:650,bombs:0,obstacles:21376,nps:4.331,length:375.23,characteristic:"Lawless",difficulty:"ExpertPlus",events:3853,chroma:!0,me:!1,ne:!0,cinema:!1,seconds:150.092,paritySummary:{errors:0,warns:0,resets:0}}],downloadURL:"https://cdn.beatsaver.com/abc41236f324093fbf711abce8c18c2a47debe20.zip",coverURL:"https://cdn.beatsaver.com/abc41236f324093fbf711abce8c18c2a47debe20.jpg",previewURL:"https://cdn.beatsaver.com/abc41236f324093fbf711abce8c18c2a47debe20.mp3"}],createdAt:"2020-04-05T15:44:13.116Z",updatedAt:"2020-04-05T15:44:13.116Z",lastPublishedAt:"2020-04-05T15:44:13.116Z"},{id:"462",name:"The Nights - Avicii",description:"The Nights By Avicii.\r\nThis is my first beatmap, feedback would be greatly appreciated :)",uploader:{id:47059,name:"rocket",uniqueSet:!0,hash:"5cff0b7398cc5a672c84f1c0",avatar:"https://www.gravatar.com/avatar/5cff0b7398cc5a672c84f1c0?d=retro",type:"SIMPLE"},metadata:{bpm:126,duration:173,songName:"The Nights",songSubName:"",songAuthorName:"Avicii",levelAuthorName:"rocket"},stats:{plays:0,downloads:22239,upvotes:11170,downvotes:426,score:.9356},uploaded:"2018-06-08T23:20:50Z",automapper:!1,ranked:!0,qualified:!1,versions:[{hash:"2c002d2874e029db43f3c7cf9bb271ae0d769b74",key:"462",state:"Published",createdAt:"2018-06-08T23:20:50Z",sageScore:5,diffs:[{njs:10,offset:0,notes:200,bombs:4,obstacles:14,nps:1.207,length:348,characteristic:"Standard",difficulty:"Normal",events:704,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:165.714,paritySummary:{errors:45,warns:19,resets:0},stars:.92},{njs:10,offset:0,notes:402,bombs:6,obstacles:14,nps:2.426,length:348,characteristic:"Standard",difficulty:"Hard",events:704,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:165.714,paritySummary:{errors:88,warns:44,resets:0}},{njs:10,offset:0,notes:702,bombs:10,obstacles:14,nps:4.236,length:348,characteristic:"Standard",difficulty:"Expert",events:705,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:165.714,paritySummary:{errors:119,warns:72,resets:0}}],downloadURL:"https://cdn.beatsaver.com/2c002d2874e029db43f3c7cf9bb271ae0d769b74.zip",coverURL:"https://cdn.beatsaver.com/2c002d2874e029db43f3c7cf9bb271ae0d769b74.jpg",previewURL:"https://cdn.beatsaver.com/2c002d2874e029db43f3c7cf9bb271ae0d769b74.mp3"}],createdAt:"2018-06-08T23:20:50Z",updatedAt:"2018-06-08T23:20:50Z",lastPublishedAt:"2018-06-08T23:20:50Z"},{id:"9c54",name:"Yunomi - 惑星ラビット (feat. TORIENA)/Wakusei Rabbit[Wall Map]",description:'seventh map! [Noodle Extensions & Chroma] map!\nYunomi - Wakusei Rabbit (feat. TORIENA) Planet Rabbit\n \n!! This map requires!!\nNoodle Extensions , Chroma\n\nNoodle Extensions と Chromaが古いバージョンの時代に作ったので、最新バージョンだと壁のY軸(高さ)が破綻します。。\n昔と違い、RequirementsにMapping Extensionsが記載されていると干渉してしまうようなので、\n\n壁を正常に表示するには、以下の修正をお願い致します。\n1. info.datをテキストエディタ等で開く。\n2.「,"Mapping Extensions"」を検索し削除(3か所) コンマも含めますご注意ください。\n\n--(English)\nUnlike in the past, it seems to interfere with the Mapping Extensions listed in Requirements.\nIn order to display the wall properly, please make the following modifications.\n1. Open info.dat with a text editor.\n2. Search for [ , "Mapping Extensions"] and delete it (in three places), including commas.\n--\n\nMy Twitter : https://twitter.com/kamy_0811\n\n[Song info]\nSong name : Wakusei Rabbit\nAlbum : Oedo Controller\nMusic & Lyrics : Yunomi \nVocal : TORIENA\nArtwork : Kiato \nSoundCloud : https://soundcloud.com/tkrism/wakuseirabbit\nPlay movie : https://youtu.be/6WXJqlHQ4To',uploader:{id:4285148,name:"kamy",uniqueSet:!0,hash:"5e42a3f4d523400006369ea0",avatar:"https://cdn.beatsaver.com/avatar/415431418663927810.png",type:"DISCORD"},metadata:{bpm:174,duration:204,songName:"Wakusei_Rabbit",songSubName:"feat. TORIENA",songAuthorName:"Yunomi",levelAuthorName:"kamy"},stats:{plays:0,downloads:6028,upvotes:1794,downvotes:25,score:.9355},uploaded:"2020-04-18T14:46:30.487Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"3b680d87cbba69bda48081e97dc925464116f41f",key:"9c54",state:"Published",createdAt:"2020-04-18T14:46:30.487Z",sageScore:7,diffs:[{njs:14,offset:0,notes:0,bombs:0,obstacles:27053,nps:0,length:0,characteristic:"Standard",difficulty:"Easy",events:2845,chroma:!0,me:!0,ne:!0,cinema:!1,seconds:0,paritySummary:{errors:0,warns:0,resets:0}},{njs:14,offset:0,notes:762,bombs:0,obstacles:27053,nps:3.867,length:571.5,characteristic:"Standard",difficulty:"Hard",events:2848,chroma:!0,me:!0,ne:!0,cinema:!1,seconds:197.069,paritySummary:{errors:0,warns:2,resets:0}},{njs:17,offset:0,notes:1246,bombs:0,obstacles:27053,nps:6.323,length:571.5,characteristic:"Standard",difficulty:"ExpertPlus",events:2845,chroma:!0,me:!0,ne:!0,cinema:!1,seconds:197.069,paritySummary:{errors:0,warns:0,resets:0}}],downloadURL:"https://cdn.beatsaver.com/3b680d87cbba69bda48081e97dc925464116f41f.zip",coverURL:"https://cdn.beatsaver.com/3b680d87cbba69bda48081e97dc925464116f41f.jpg",previewURL:"https://cdn.beatsaver.com/3b680d87cbba69bda48081e97dc925464116f41f.mp3"}],createdAt:"2020-04-18T14:46:30.487Z",updatedAt:"2020-04-18T14:46:30.487Z",lastPublishedAt:"2020-04-18T14:46:30.487Z"},{id:"1f42",name:"Field of Hopes and Dreams (Deltarune) - Toby Fox",description:"Song by Toby Fox\r\nVideo: https://youtu.be/2V7IFAKTIp4\r\n\r\n Expert, Hard, Normal\r\nBPM:120\r\nObstacles: 0\r\n\r\n-Expert-\r\nNotes: 513\r\nNotes per second: 3.12\r\nJump Speed: 13\r\n\r\n-Hard-\r\nNotes: 325\r\nNotes per second: 1.97\r\nJump Speed: 11\r\n\r\n-Expert-\r\nNotes: 212\r\nNotes per second: 1.29\r\nJump Speed: 10\r\n\r\nShoutout to testers:\r\nRedmagi\r\nManDynasty\r\nAaltopahWi\r\nAggrogahu",uploader:{id:39365,name:"todokete",uniqueSet:!0,hash:"5cff0b7398cc5a672c84ee70",avatar:"https://www.gravatar.com/avatar/5cff0b7398cc5a672c84ee70?d=retro",type:"SIMPLE"},metadata:{bpm:125,duration:164,songName:"Field of Hopes and Dreams",songSubName:"Toby Fox",songAuthorName:"Todokete",levelAuthorName:"todokete"},stats:{plays:0,downloads:6294,upvotes:3219,downvotes:76,score:.9353},uploaded:"2018-11-09T19:54:30Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"c62d53bd22e3aa7d6a2ef04472ee7a22ceed74f6",key:"1f42",state:"Published",createdAt:"2018-11-09T19:54:30Z",sageScore:5,diffs:[{njs:10,offset:0,notes:212,bombs:0,obstacles:0,nps:1.33,length:332,characteristic:"Standard",difficulty:"Normal",events:888,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:159.36,paritySummary:{errors:44,warns:21,resets:0}},{njs:11,offset:0,notes:325,bombs:0,obstacles:0,nps:2.039,length:332,characteristic:"Standard",difficulty:"Hard",events:888,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:159.36,paritySummary:{errors:57,warns:15,resets:0}},{njs:13,offset:0,notes:513,bombs:0,obstacles:0,nps:3.219,length:332,characteristic:"Standard",difficulty:"Expert",events:888,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:159.36,paritySummary:{errors:68,warns:69,resets:0}}],downloadURL:"https://cdn.beatsaver.com/c62d53bd22e3aa7d6a2ef04472ee7a22ceed74f6.zip",coverURL:"https://cdn.beatsaver.com/c62d53bd22e3aa7d6a2ef04472ee7a22ceed74f6.jpg",previewURL:"https://cdn.beatsaver.com/c62d53bd22e3aa7d6a2ef04472ee7a22ceed74f6.mp3"}],createdAt:"2018-11-09T19:54:30Z",updatedAt:"2018-11-09T19:54:30Z",lastPublishedAt:"2018-11-09T19:54:30Z"},{id:"1970",name:"Still Into You - Paramore",description:"Expert Playthrough : https://youtu.be/CUBqLk35vbE",uploader:{id:13320,name:"novashaft",uniqueSet:!0,hash:"5cff0b7398cc5a672c84ee55",avatar:"https://www.gravatar.com/avatar/5cff0b7398cc5a672c84ee55?d=retro",type:"SIMPLE"},metadata:{bpm:136,duration:216,songName:"Still Into You",songSubName:"Paramore",songAuthorName:"NovaShaft",levelAuthorName:"novashaft"},stats:{plays:0,downloads:8223,upvotes:2078,downvotes:35,score:.9352},uploaded:"2018-10-09T15:34:41Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"fdd3fd8a25a79c114184cef10633fe6a57c7eb4c",key:"1970",state:"Published",createdAt:"2018-10-09T15:34:41Z",sageScore:4,diffs:[{njs:10,offset:0,notes:713,bombs:0,obstacles:21,nps:3.536,length:457,characteristic:"Standard",difficulty:"Hard",events:738,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:201.618,paritySummary:{errors:25,warns:25,resets:0}},{njs:11,offset:0,notes:848,bombs:0,obstacles:21,nps:4.206,length:457,characteristic:"Standard",difficulty:"Expert",events:738,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:201.618,paritySummary:{errors:50,warns:72,resets:0}}],downloadURL:"https://cdn.beatsaver.com/fdd3fd8a25a79c114184cef10633fe6a57c7eb4c.zip",coverURL:"https://cdn.beatsaver.com/fdd3fd8a25a79c114184cef10633fe6a57c7eb4c.jpg",previewURL:"https://cdn.beatsaver.com/fdd3fd8a25a79c114184cef10633fe6a57c7eb4c.mp3"}],createdAt:"2018-10-09T15:34:41Z",updatedAt:"2018-10-09T15:34:41Z",lastPublishedAt:"2018-10-09T15:34:41Z"},{id:"8790",name:"Satellite - Rise Against",description:'"Satellite" is a song by American rock band Rise Against, featured on their sixth studio album Endgame (2011). \n\nWritten by lead vocalist Tim McIlrath, "Satellite" expresses the idea that the band stood by their social and political beliefs, and that they would not conform to mainstream media.',uploader:{id:58338,name:"Joetastic",uniqueSet:!0,hash:"5cff0b7498cc5a672c85050e",avatar:"https://cdn.beatsaver.com/avatar/227767566402191360.png",type:"DISCORD"},metadata:{bpm:136,duration:237,songName:"Satellite",songSubName:"",songAuthorName:"Rise Against",levelAuthorName:"Joetastic"},stats:{plays:0,downloads:4055,upvotes:1641,downvotes:21,score:.9351},uploaded:"2020-02-16T09:32:52.155Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"2a3c743f85bd235cd9d658fe728f9db79f3b9dc5",key:"8790",state:"Published",createdAt:"2020-02-16T09:32:52.155Z",sageScore:7,diffs:[{njs:15,offset:0,notes:982,bombs:26,obstacles:10,nps:4.306,length:516.975,characteristic:"Standard",difficulty:"ExpertPlus",events:7595,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:228.077,paritySummary:{errors:9,warns:6,resets:1}}],downloadURL:"https://cdn.beatsaver.com/2a3c743f85bd235cd9d658fe728f9db79f3b9dc5.zip",coverURL:"https://cdn.beatsaver.com/2a3c743f85bd235cd9d658fe728f9db79f3b9dc5.jpg",previewURL:"https://cdn.beatsaver.com/2a3c743f85bd235cd9d658fe728f9db79f3b9dc5.mp3"}],createdAt:"2020-02-16T09:32:52.155Z",updatedAt:"2020-02-16T09:32:52.155Z",lastPublishedAt:"2020-02-16T09:32:52.155Z"},{id:"689b",name:"DuckTales Opening ",description:"Opening by Felicia Barton\nJust a simple but fun map of this song from childhood!\n:D \nFC: https://www.youtube.com/watch?v=QCOHyHKy6SI&feature=youtu.be",uploader:{id:35241,name:"4strofan",uniqueSet:!0,hash:"5cff0b7598cc5a672c851d18",avatar:"https://www.gravatar.com/avatar/5cff0b7598cc5a672c851d18?d=retro",type:"SIMPLE"},metadata:{bpm:91.51,duration:121,songName:"DuckTales",songSubName:"Opening Song",songAuthorName:"Felicia Barton",levelAuthorName:"Strofan"},stats:{plays:0,downloads:4253,upvotes:2276,downvotes:42,score:.9351},uploaded:"2019-10-08T13:14:56.729Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"2e687b4e357c8fb14d1cba11b3d4029070ed51f7",key:"689b",state:"Published",createdAt:"2019-10-08T13:14:56.729Z",sageScore:5,diffs:[{njs:14,offset:0,notes:460,bombs:0,obstacles:0,nps:4.091,length:171.5,characteristic:"Standard",difficulty:"Expert",events:1106,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:112.447,paritySummary:{errors:15,warns:6,resets:0}}],downloadURL:"https://cdn.beatsaver.com/2e687b4e357c8fb14d1cba11b3d4029070ed51f7.zip",coverURL:"https://cdn.beatsaver.com/2e687b4e357c8fb14d1cba11b3d4029070ed51f7.jpg",previewURL:"https://cdn.beatsaver.com/2e687b4e357c8fb14d1cba11b3d4029070ed51f7.mp3"}],createdAt:"2019-10-08T13:14:56.729Z",updatedAt:"2019-10-08T13:14:56.729Z",lastPublishedAt:"2019-10-08T13:14:56.729Z"},{id:"67ba",name:"Air - Mr.FijiWiji Remix | AMV by SliceOfLife",description:'Videolink:\nhttps://youtu.be/V-KFAdSjeKo\n\n====================================================\n\nIf you are making a video to the level I would be happy if my video is linked in the description, but is not a must.\n\n====================================================\n\nIn order to play the level properly, the following plugins are required !!!\n== MappingExtension is required! ==\n== ChromaLite is recommended ==\n== SongCore is recommended ==\n\nAll plugins can be downloaded by ModAssistant\nhttps://github.com/Assistant/ModAssistant\n\nChromaLite and SongCore are only for the aesthetics! This includes light events and colors. If you don\'t want to use the preset colors, set the "Allow Color Override" option under "SongCore" to off.\n\n====================================================\n\nDifficulty: Expert\nNotes: 146\nWalls: 4135\nBombs: 900\n\n====================================================\n\nThis level CAN cause performance issues to your PC, especially on lower end VR PCs. ',uploader:{id:37230,name:"gevarred",uniqueSet:!0,hash:"5d971075e6a6760006266826",avatar:"https://www.gravatar.com/avatar/5d971075e6a6760006266826?d=retro",type:"SIMPLE"},metadata:{bpm:126,duration:172,songName:"Air",songSubName:"Shortened by SliceOfLife",songAuthorName:"Mr. FijiWiji Remix",levelAuthorName:"Gevarred"},stats:{plays:0,downloads:4245,upvotes:4022,downvotes:109,score:.935},uploaded:"2019-10-04T10:05:15.873Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"65c0c3e82499281f2c9b1d09d7eb3e60bcacd57d",key:"67ba",state:"Published",createdAt:"2019-10-04T10:05:15.873Z",sageScore:5,diffs:[{njs:8,offset:0,notes:146,bombs:900,obstacles:4135,nps:1.065,length:287.781,characteristic:"Standard",difficulty:"ExpertPlus",events:1015,chroma:!0,me:!0,ne:!1,cinema:!1,seconds:137.039,paritySummary:{errors:0,warns:0,resets:0}}],downloadURL:"https://cdn.beatsaver.com/65c0c3e82499281f2c9b1d09d7eb3e60bcacd57d.zip",coverURL:"https://cdn.beatsaver.com/65c0c3e82499281f2c9b1d09d7eb3e60bcacd57d.jpg",previewURL:"https://cdn.beatsaver.com/65c0c3e82499281f2c9b1d09d7eb3e60bcacd57d.mp3"}],createdAt:"2019-10-04T10:05:15.873Z",updatedAt:"2019-10-04T10:05:15.873Z",lastPublishedAt:"2019-10-04T10:05:15.873Z"},{id:"38eb",name:"The Rockafeller Skank - Fatboy Slim - BT90",description:'This map is part of a 90s songpack. Search "BT90" to find all the songs in the songpack.\r\nMap is created by Heisenberg_IRL. Check out https://www.twitch.tv/heisenberg_irl',uploader:{id:27983,name:"heisenbergirl",uniqueSet:!0,hash:"5cff0b7298cc5a672c84ec30",avatar:"https://www.gravatar.com/avatar/5cff0b7298cc5a672c84ec30?d=retro",type:"SIMPLE"},metadata:{bpm:153,duration:236,songName:"The Rockafeller Skank",songSubName:"Fatboy Slim [BT90]",songAuthorName:"Heisenberg",levelAuthorName:"heisenbergirl"},stats:{plays:0,downloads:5545,upvotes:2421,downvotes:48,score:.9348},uploaded:"2019-02-23T13:17:40Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"5ad1cb4a7317ddc5d54d497c8d35eda5dd9d44b9",key:"38eb",state:"Published",createdAt:"2019-02-23T13:17:40Z",sageScore:6,diffs:[{njs:12,offset:0,notes:775,bombs:884,obstacles:43,nps:3.384,length:584,characteristic:"Standard",difficulty:"Expert",events:5820,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:229.02,paritySummary:{errors:43,warns:44,resets:15}},{njs:18,offset:0,notes:1014,bombs:907,obstacles:41,nps:4.371,length:591.5,characteristic:"Standard",difficulty:"ExpertPlus",events:5820,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:231.961,paritySummary:{errors:48,warns:98,resets:18}}],downloadURL:"https://cdn.beatsaver.com/5ad1cb4a7317ddc5d54d497c8d35eda5dd9d44b9.zip",coverURL:"https://cdn.beatsaver.com/5ad1cb4a7317ddc5d54d497c8d35eda5dd9d44b9.jpg",previewURL:"https://cdn.beatsaver.com/5ad1cb4a7317ddc5d54d497c8d35eda5dd9d44b9.mp3"}],createdAt:"2019-02-23T13:17:40Z",updatedAt:"2019-02-23T13:17:40Z",lastPublishedAt:"2019-02-23T13:17:40Z"},{id:"445f",name:"Kazuma Kiryu - Baka Mitai [Yakuza OST]",description:"Dame da ne \r\nDame yo\r\nDame na no yo ( ͒˃̩̩⌂˂̩̩ ͒)\r\n\r\nPlay Yakuza, especially the karaoke mini-games\r\nFun fact: it is impossible to listen to this song without crying (100% guaranteed) \r\n\r\n74 BPM\r\nExpert\r\n\r\n:)\r\n\r\ncontact me on discord\r\nETAN#8341",uploader:{id:4235140,name:"etan",uniqueSet:!0,hash:"5cff0b7798cc5a672c855775",avatar:"https://cdn.beatsaver.com/avatar/136373107559497728.png",type:"DISCORD"},metadata:{bpm:74,duration:119,songName:"Baka Mitai",songSubName:"Kazuma Kiryu",songAuthorName:"ETAN",levelAuthorName:"ETAN"},stats:{plays:0,downloads:5251,upvotes:1681,downvotes:23,score:.9347},uploaded:"2019-04-08T17:08:08Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"c39c719a17a081d0bd0806052bd39ba4ee39b6b0",key:"445f",state:"Published",createdAt:"2019-04-08T17:08:08Z",sageScore:4,diffs:[{njs:13.5,offset:0,notes:272,bombs:0,obstacles:21,nps:2.546,length:263.5,characteristic:"Standard",difficulty:"Expert",events:553,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:213.649,paritySummary:{errors:9,warns:11,resets:0}}],downloadURL:"https://cdn.beatsaver.com/c39c719a17a081d0bd0806052bd39ba4ee39b6b0.zip",coverURL:"https://cdn.beatsaver.com/c39c719a17a081d0bd0806052bd39ba4ee39b6b0.jpg",previewURL:"https://cdn.beatsaver.com/c39c719a17a081d0bd0806052bd39ba4ee39b6b0.mp3"}],createdAt:"2019-04-08T17:08:08Z",updatedAt:"2019-04-08T17:08:08Z",lastPublishedAt:"2019-04-08T17:08:08Z"},{id:"bdc7",name:"That's Life - Frank Sinatra",description:"Here is an honest-to-goodness human-mapped version of Frank Sinatra's 1966 hit, That's Life. This song is way too good to just have a crappy beat sage map.\n\nNormal and Hard Standard levels, and Expert Standard, 90, and 360 levels. Note that the expert levels are all essentially the same, just with varying degrees of wobbles.\n\nThanks to Maybeemae for the playtests!\n\nhttps://youtu.be/QXjj2-fgK8U",uploader:{id:78593,name:"techbutterfly",uniqueSet:!0,hash:"5cff0b7798cc5a672c8566f7",avatar:"https://cdn.beatsaver.com/avatar/527111497617506304.png",type:"DISCORD"},metadata:{bpm:77,duration:186,songName:"That's Life",songSubName:"",songAuthorName:"Frank Sinatra",levelAuthorName:"TechButterfly"},stats:{plays:0,downloads:4965,upvotes:1172,downvotes:8,score:.9346},uploaded:"2020-07-11T22:35:42.033Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"7cca8c1afecd782cfd74f158c312201b780043d8",key:"bdc7",state:"Published",createdAt:"2020-07-11T22:35:42.033Z",sageScore:4,diffs:[{njs:10,offset:-.3,notes:321,bombs:0,obstacles:6,nps:1.768,length:233,characteristic:"Standard",difficulty:"Normal",events:1086,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:181.558,paritySummary:{errors:30,warns:41,resets:0}},{njs:12,offset:.3,notes:418,bombs:0,obstacles:8,nps:2.302,length:233,characteristic:"Standard",difficulty:"Hard",events:1086,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:181.558,paritySummary:{errors:24,warns:38,resets:0}},{njs:13,offset:.1,notes:492,bombs:0,obstacles:8,nps:2.71,length:233,characteristic:"Standard",difficulty:"Expert",events:1086,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:181.558,paritySummary:{errors:24,warns:26,resets:0}},{njs:13,offset:.3,notes:489,bombs:0,obstacles:8,nps:2.693,length:233,characteristic:"90Degree",difficulty:"Expert",events:1192,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:181.558,paritySummary:{errors:25,warns:27,resets:0}},{njs:13,offset:.3,notes:489,bombs:0,obstacles:8,nps:2.693,length:233,characteristic:"360Degree",difficulty:"Expert",events:1166,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:181.558,paritySummary:{errors:25,warns:26,resets:0}}],downloadURL:"https://cdn.beatsaver.com/7cca8c1afecd782cfd74f158c312201b780043d8.zip",coverURL:"https://cdn.beatsaver.com/7cca8c1afecd782cfd74f158c312201b780043d8.jpg",previewURL:"https://cdn.beatsaver.com/7cca8c1afecd782cfd74f158c312201b780043d8.mp3"}],createdAt:"2020-07-11T22:35:42.033Z",updatedAt:"2020-07-11T22:35:42.033Z",lastPublishedAt:"2020-07-11T22:35:42.033Z"},{id:"194c",name:"Better When I'm Dancin' - Meghan Trainor",description:'"We can do this together... I bet you feel better when you\'re dancing, yeah, yeah..."\r\nDifficulties: Expert, Hard, Normal',uploader:{id:30311,name:"bennydabeast",uniqueSet:!0,hash:"5cff0b7298cc5a672c84e98d",avatar:"https://cdn.beatsaver.com/avatar/30311.jpg",type:"SIMPLE"},metadata:{bpm:128,duration:178,songName:"Better When I'm Dancin'",songSubName:"Meghan Trainor",songAuthorName:"BennyDaBeast",levelAuthorName:"bennydabeast"},stats:{plays:0,downloads:5411,upvotes:1790,downvotes:27,score:.9345},uploaded:"2018-10-08T12:10:29Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"9bd5e0efe697a38fe0da28f252a8bfb870da630a",key:"194c",state:"Published",createdAt:"2018-10-08T12:10:29Z",sageScore:5,diffs:[{njs:10,offset:0,notes:271,bombs:0,obstacles:16,nps:1.571,length:368,characteristic:"Standard",difficulty:"Normal",events:940,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:172.5,paritySummary:{errors:31,warns:26,resets:0}},{njs:10,offset:0,notes:474,bombs:0,obstacles:16,nps:2.748,length:368,characteristic:"Standard",difficulty:"Hard",events:940,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:172.5,paritySummary:{errors:87,warns:57,resets:0}},{njs:10,offset:0,notes:643,bombs:0,obstacles:16,nps:3.733,length:367.5,characteristic:"Standard",difficulty:"Expert",events:940,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:172.266,paritySummary:{errors:82,warns:71,resets:0}}],downloadURL:"https://cdn.beatsaver.com/9bd5e0efe697a38fe0da28f252a8bfb870da630a.zip",coverURL:"https://cdn.beatsaver.com/9bd5e0efe697a38fe0da28f252a8bfb870da630a.jpg",previewURL:"https://cdn.beatsaver.com/9bd5e0efe697a38fe0da28f252a8bfb870da630a.mp3"}],createdAt:"2018-10-08T12:10:29Z",updatedAt:"2018-10-08T12:10:29Z",lastPublishedAt:"2018-10-08T12:10:29Z"},{id:"a908",name:"[TheFatRat Pack] Unity - TheFatRat",description:'Here it is! The unofficial "TheFatRat" Music Pack in Beat Saber - with all beatmaps being singlehandedly made by me!\n\nAll songs included in TheFatRat Music Pack:\nMonody (ft. Laura Brehm) \nUnity \nWindfall \nXenogenesis \nTime Lapse \n\nGet the full song pack here: https://bsaber.com/thefatrat-music-pack/\n(Or you should just be able to find all the other ones on my beatsaver profile as well. Heres a link to my profile: https://beatsaver.com/uploader/5d47d586c5301900060b2f6c)\n\nSongcore mod is recommended (for custom colours)\nPlays best on Origins Environment\n\nUnity Stats:\nExpert+ - 1013 Notes | 4.74 NPS\nExpert - 869 Notes | 4.07 NPS\nHard - 608 Notes | 2.85 NPS\nNormal - 373 Notes | 1.75 NPS\nEasy - 264 Notes | 1.24 NPS\n\nRoughly 8-9 Hours of work\nGameplay: https://youtu.be/8lIoHcrm3wQ\n\nObviously - A huge thanks to TheFatRat himself, for not only producing the songs in the first place (and allowing free access to use them for big and small content creators), but also being a huge inspiration to lots of artists out there and for making music that everyone can jam out to! We love you, TheFatRat!',uploader:{id:4284197,name:"timeweaver",uniqueSet:!0,hash:"5d47d586c5301900060b2f6c",avatar:"https://cdn.beatsaver.com/avatar/607399708121366529.png",type:"DISCORD"},metadata:{bpm:105,duration:213,songName:"Unity",songSubName:"",songAuthorName:"TheFatRat",levelAuthorName:"Timeweaver"},stats:{plays:0,downloads:11605,upvotes:3186,downvotes:78,score:.9344},uploaded:"2020-05-22T13:28:31.075Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"296946437e2194823129d88e7c457202e4c7f281",key:"a908",state:"Published",createdAt:"2020-05-22T13:28:31.075Z",sageScore:5,diffs:[{njs:10,offset:1,notes:264,bombs:0,obstacles:17,nps:1.262,length:366,characteristic:"Standard",difficulty:"Easy",events:3460,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:209.143,paritySummary:{errors:48,warns:26,resets:0}},{njs:10,offset:1,notes:373,bombs:0,obstacles:16,nps:1.783,length:366,characteristic:"Standard",difficulty:"Normal",events:3460,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:209.143,paritySummary:{errors:55,warns:24,resets:0}},{njs:12.5,offset:0,notes:608,bombs:0,obstacles:19,nps:2.907,length:366,characteristic:"Standard",difficulty:"Hard",events:3460,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:209.143,paritySummary:{errors:22,warns:8,resets:0}},{njs:15,offset:-.25,notes:869,bombs:0,obstacles:17,nps:4.155,length:366,characteristic:"Standard",difficulty:"Expert",events:3460,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:209.143,paritySummary:{errors:3,warns:0,resets:0}},{njs:16,offset:.5,notes:1013,bombs:0,obstacles:24,nps:4.844,length:366,characteristic:"Standard",difficulty:"ExpertPlus",events:3460,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:209.143,paritySummary:{errors:0,warns:0,resets:0}}],downloadURL:"https://cdn.beatsaver.com/296946437e2194823129d88e7c457202e4c7f281.zip",coverURL:"https://cdn.beatsaver.com/296946437e2194823129d88e7c457202e4c7f281.jpg",previewURL:"https://cdn.beatsaver.com/296946437e2194823129d88e7c457202e4c7f281.mp3"}],createdAt:"2020-05-22T13:28:31.075Z",updatedAt:"2020-05-22T13:28:31.075Z",lastPublishedAt:"2020-05-22T13:28:31.075Z"},{id:"a465",name:"The Chain - Fleetwood Mac",description:"Today (May 9) is my mapperversary! I released my first map - Comfort Eagle - a year ago today. Since then, I've released another 50 maps - almost one a week for a year! And of course, one of those is Little Shop, which is really 13 songs in one monster map. Help me celebrate my mapperversary by playing this map of Fleetwood Mac's 1977 classic, The Chain. Normal and Expert Standard, and Expert Plus 360 levels.\n\nThanks Beat Saber community for a really fun year of mapping and having fun with y’all! Thanks to the Beat Saber Modding Group for helping me get started in the beginning - especially CyanSnow and HelenCarnate - you guys were a great help to me at the beginning, despite being new mappers yourselves! Thanks to the Ramen Noodle crew for letting this old guy hang out and pretend he’s one of the cool mappers. Thanks to Darkuni and Maybeemae for being awesome friends! Extra special thanks to my mapping buddy, MajorPickle – you da man! Here’s to many more years to come!\n\nMy initial post for this map mentioned that any videos would be insta-blocked on youtube, because mine was. Since then, several people have posted videos of it without problem, so apparently it's okay.\n\nhttps://bittube.tv/post/0d3e4790-7a77-498b-9223-3d70c3ac9234",uploader:{id:78593,name:"techbutterfly",uniqueSet:!0,hash:"5cff0b7798cc5a672c8566f7",avatar:"https://cdn.beatsaver.com/avatar/527111497617506304.png",type:"DISCORD"},metadata:{bpm:152,duration:252,songName:"The Chain",songSubName:"",songAuthorName:"Fleetwood Mac",levelAuthorName:"TechButterfly"},stats:{plays:0,downloads:7216,upvotes:1873,downvotes:30,score:.9344},uploaded:"2020-05-09T11:53:28.520Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"4db96dd119b51d7f7124b6055db2ee1131452667",key:"a465",state:"Published",createdAt:"2020-05-09T11:53:28.520Z",sageScore:3,diffs:[{njs:10,offset:0,notes:469,bombs:0,obstacles:135,nps:1.883,length:631,characteristic:"Standard",difficulty:"Normal",events:555,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:249.079,paritySummary:{errors:57,warns:51,resets:0}},{njs:13,offset:.3,notes:851,bombs:68,obstacles:113,nps:3.417,length:631,characteristic:"Standard",difficulty:"Expert",events:554,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:249.079,paritySummary:{errors:36,warns:33,resets:9}},{njs:13,offset:.5,notes:851,bombs:63,obstacles:116,nps:3.417,length:631,characteristic:"360Degree",difficulty:"ExpertPlus",events:766,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:249.079,paritySummary:{errors:36,warns:33,resets:9}}],downloadURL:"https://cdn.beatsaver.com/4db96dd119b51d7f7124b6055db2ee1131452667.zip",coverURL:"https://cdn.beatsaver.com/4db96dd119b51d7f7124b6055db2ee1131452667.jpg",previewURL:"https://cdn.beatsaver.com/4db96dd119b51d7f7124b6055db2ee1131452667.mp3"}],createdAt:"2020-05-09T11:53:28.520Z",updatedAt:"2020-05-09T11:53:28.520Z",lastPublishedAt:"2020-05-09T11:53:28.520Z"},{id:"6100",name:"Keina Suda - veil [Fire Force Ending]",description:"Fire Force is rad\nBoth the op and ed are also rad\n\nBPM 150 | Length 1:30\nExpert+\nExpert\nHard\nNormal\n\nplease enjoy\n\nDM any feedback on Discord\nETAN#8341",uploader:{id:4235140,name:"etan",uniqueSet:!0,hash:"5cff0b7798cc5a672c855775",avatar:"https://cdn.beatsaver.com/avatar/136373107559497728.png",type:"DISCORD"},metadata:{bpm:150,duration:91,songName:"veil",songSubName:"",songAuthorName:"Keina Suda",levelAuthorName:"ETAN"},stats:{plays:0,downloads:5151,upvotes:1646,downvotes:23,score:.9341},uploaded:"2019-09-03T00:05:16.685Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"f8bd8b3b1fecc3834a6ea88da39a055c98013823",key:"6100",state:"Published",createdAt:"2019-09-03T00:05:16.685Z",sageScore:3,diffs:[{njs:11,offset:0,notes:155,bombs:0,obstacles:6,nps:1.872,length:207,characteristic:"Standard",difficulty:"Normal",events:2814,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:82.8,paritySummary:{errors:0,warns:0,resets:0}},{njs:12,offset:0,notes:203,bombs:0,obstacles:6,nps:2.452,length:207,characteristic:"Standard",difficulty:"Hard",events:2814,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:82.8,paritySummary:{errors:0,warns:0,resets:0}},{njs:14,offset:0,notes:280,bombs:0,obstacles:6,nps:3.373,length:207.5,characteristic:"Standard",difficulty:"Expert",events:2814,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:83,paritySummary:{errors:7,warns:6,resets:0}},{njs:18,offset:0,notes:366,bombs:5,obstacles:6,nps:4.41,length:207.5,characteristic:"Standard",difficulty:"ExpertPlus",events:2822,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:83,paritySummary:{errors:8,warns:9,resets:0}}],downloadURL:"https://cdn.beatsaver.com/f8bd8b3b1fecc3834a6ea88da39a055c98013823.zip",coverURL:"https://cdn.beatsaver.com/f8bd8b3b1fecc3834a6ea88da39a055c98013823.jpg",previewURL:"https://cdn.beatsaver.com/f8bd8b3b1fecc3834a6ea88da39a055c98013823.mp3"}],createdAt:"2019-09-03T00:05:16.685Z",updatedAt:"2019-09-03T00:05:16.685Z",lastPublishedAt:"2019-09-03T00:05:16.685Z"},{id:"b",name:"Imagine Dragons - Believer",description:"Currently expert only. Events included.",uploader:{id:12996,name:"rustic",uniqueSet:!0,hash:"5cff0b7298cc5a672c84e8c4",avatar:"https://www.gravatar.com/avatar/5cff0b7298cc5a672c84e8c4?d=retro",type:"SIMPLE"},metadata:{bpm:125,duration:205,songName:"Believer",songSubName:"Imagine Dragons",songAuthorName:"Rustic",levelAuthorName:"rustic"},stats:{plays:0,downloads:19970,upvotes:11803,downvotes:476,score:.9341},uploaded:"2018-05-08T18:56:36Z",automapper:!1,ranked:!0,qualified:!1,versions:[{hash:"19f2879d11a91b51a5c090d63471c3e8d9b7aee3",key:"b",state:"Published",createdAt:"2018-05-08T18:56:36Z",sageScore:5,diffs:[{njs:10,offset:0,notes:546,bombs:0,obstacles:10,nps:2.754,length:413,characteristic:"Standard",difficulty:"Expert",events:551,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:198.24,paritySummary:{errors:130,warns:49,resets:0},stars:1.44}],downloadURL:"https://cdn.beatsaver.com/19f2879d11a91b51a5c090d63471c3e8d9b7aee3.zip",coverURL:"https://cdn.beatsaver.com/19f2879d11a91b51a5c090d63471c3e8d9b7aee3.jpg",previewURL:"https://cdn.beatsaver.com/19f2879d11a91b51a5c090d63471c3e8d9b7aee3.mp3"}],createdAt:"2018-05-08T18:56:36Z",updatedAt:"2018-05-08T18:56:36Z",lastPublishedAt:"2018-05-08T18:56:36Z"},{id:"8115",name:"Los! Los! Los! (German Ver.) [Youjo Senki Ending] - Selphius",description:"German cover of Los! Los! Los! performed by Selphius. It was originally performed by Aoi Yuuki, the voice actress of Tanya Degurechaff. \n\nHearing this song in German just feels so right! The original song was also has German lyrics but it was sung by a Japanese so it really didn't fit.",uploader:{id:58338,name:"Joetastic",uniqueSet:!0,hash:"5cff0b7498cc5a672c85050e",avatar:"https://cdn.beatsaver.com/avatar/227767566402191360.png",type:"DISCORD"},metadata:{bpm:119,duration:215,songName:"Los! Los! Los! (German Ver.)",songSubName:"",songAuthorName:"Selphius",levelAuthorName:"Joetastic"},stats:{plays:0,downloads:10730,upvotes:1513,downvotes:19,score:.934},uploaded:"2020-01-25T01:56:05.274Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"cdfd561127d3a71c02af0996c215242fcb789f79",key:"8115",state:"Published",createdAt:"2020-01-25T01:56:05.274Z",sageScore:5,diffs:[{njs:12,offset:0,notes:723,bombs:26,obstacles:13,nps:3.468,length:413.5,characteristic:"Standard",difficulty:"Hard",events:4753,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:208.487,paritySummary:{errors:27,warns:29,resets:4}},{njs:16,offset:0,notes:974,bombs:16,obstacles:25,nps:4.672,length:413.5,characteristic:"Standard",difficulty:"Expert",events:4753,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:208.487,paritySummary:{errors:21,warns:12,resets:4}},{njs:20,offset:.5,notes:1098,bombs:16,obstacles:14,nps:5.267,length:413.5,characteristic:"Standard",difficulty:"ExpertPlus",events:4753,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:208.487,paritySummary:{errors:20,warns:13,resets:2}}],downloadURL:"https://cdn.beatsaver.com/cdfd561127d3a71c02af0996c215242fcb789f79.zip",coverURL:"https://cdn.beatsaver.com/cdfd561127d3a71c02af0996c215242fcb789f79.jpg",previewURL:"https://cdn.beatsaver.com/cdfd561127d3a71c02af0996c215242fcb789f79.mp3"}],createdAt:"2020-01-25T01:56:05.274Z",updatedAt:"2020-01-25T01:56:05.274Z",lastPublishedAt:"2020-01-25T01:56:05.274Z"},{id:"31fa",name:"Joji - SLOW DANCING IN THE DARK",description:"89 BPM / 3:31 Runtime\r\nEasy / 223 Notes\r\nNormal / 327 Notes\r\nHard / 441 Notes\r\nExpert / 631 Notes\r\nExpert+ / ???\r\n\r\nIf this lags your computer, I'm sorry! I tried the best I could to add the walls while also optimizing for performance. Try playing with No Obstacles, that will fix the issue. Should be fine for most people.\r\n\r\nGameplay: https://youtu.be/Pweso54qcwk",uploader:{id:4284981,name:"skylerwallace",uniqueSet:!0,hash:"5cff0b7298cc5a672c84ea67",avatar:"https://cdn.beatsaver.com/avatar/398344856868487168.png",type:"DISCORD"},metadata:{bpm:89,duration:212,songName:"SLOW DANCING IN THE DARK",songSubName:"Joji",songAuthorName:"Skyler Wallace",levelAuthorName:"skylerwallace"},stats:{plays:0,downloads:7575,upvotes:2691,downvotes:61,score:.9338},uploaded:"2019-01-28T22:17:59Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"c983fa1786f03be4965b2319daa86f74ce0be831",key:"31fa",state:"Published",createdAt:"2019-01-28T22:17:59Z",sageScore:6,diffs:[{njs:12,offset:0,notes:223,bombs:0,obstacles:55,nps:1.095,length:302,characteristic:"Standard",difficulty:"Easy",events:2312,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:203.596,paritySummary:{errors:75,warns:8,resets:0}},{njs:10,offset:0,notes:327,bombs:0,obstacles:55,nps:1.601,length:303,characteristic:"Standard",difficulty:"Normal",events:2312,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:204.27,paritySummary:{errors:79,warns:25,resets:0}},{njs:12,offset:0,notes:441,bombs:0,obstacles:165,nps:2.159,length:303,characteristic:"Standard",difficulty:"Hard",events:2312,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:204.27,paritySummary:{errors:55,warns:38,resets:0}},{njs:12,offset:0,notes:631,bombs:16,obstacles:258,nps:3.099,length:302,characteristic:"Standard",difficulty:"Expert",events:2312,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:203.596,paritySummary:{errors:49,warns:46,resets:4}}],downloadURL:"https://cdn.beatsaver.com/c983fa1786f03be4965b2319daa86f74ce0be831.zip",coverURL:"https://cdn.beatsaver.com/c983fa1786f03be4965b2319daa86f74ce0be831.jpg",previewURL:"https://cdn.beatsaver.com/c983fa1786f03be4965b2319daa86f74ce0be831.mp3"}],createdAt:"2019-01-28T22:17:59Z",updatedAt:"2019-01-28T22:17:59Z",lastPublishedAt:"2019-01-28T22:17:59Z"},{id:"32d4",name:"MariannE (Lanota Edit) - Yooh",description:"Lanota Edit (2:43)\r\nNotes per Second / Video Play-through (All Full Combo):\r\nEasy: 1.4 / https://streamable.com/6y473\r\nNormal: 1.5 / https://streamable.com/ctc6c\r\nHard: 2.6 / https://streamable.com/ot9ws\r\nExpert: 3.8 / https://streamable.com/4gsdz\r\nExpert+: 6.1 / https://streamable.com/rizv3 (1st Person) \r\n\r\nThe jump in difficulty from Expert to Expert+ is substantial, so watch out!\r\nAll difficulties as always!",uploader:{id:11373,name:"redmagi",uniqueSet:!0,hash:"5cff0b7298cc5a672c84e9d2",avatar:"https://www.gravatar.com/avatar/5cff0b7298cc5a672c84e9d2?d=retro",type:"SIMPLE"},metadata:{bpm:191,duration:164,songName:"MariannE (Lanota Edit)",songSubName:"Yooh",songAuthorName:"Redmagi",levelAuthorName:"redmagi"},stats:{plays:0,downloads:7763,upvotes:5249,downvotes:168,score:.9337},uploaded:"2019-02-01T16:17:26Z",automapper:!1,ranked:!0,qualified:!1,versions:[{hash:"afb47d1abb417a76a4293d29a725d6dd74d76782",key:"32d4",state:"Published",createdAt:"2019-02-01T16:17:26Z",sageScore:8,diffs:[{njs:10,offset:1,notes:235,bombs:0,obstacles:2,nps:1.508,length:496,characteristic:"Standard",difficulty:"Easy",events:8433,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:155.812,paritySummary:{errors:19,warns:19,resets:0},stars:.94},{njs:12,offset:1,notes:246,bombs:32,obstacles:6,nps:1.579,length:496,characteristic:"Standard",difficulty:"Normal",events:8433,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:155.812,paritySummary:{errors:19,warns:24,resets:5},stars:1.08},{njs:14,offset:1,notes:435,bombs:48,obstacles:4,nps:2.792,length:496,characteristic:"Standard",difficulty:"Hard",events:8435,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:155.812,paritySummary:{errors:23,warns:37,resets:10},stars:1.65},{njs:16,offset:1,notes:622,bombs:86,obstacles:4,nps:3.992,length:496,characteristic:"Standard",difficulty:"Expert",events:8433,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:155.812,paritySummary:{errors:43,warns:39,resets:5},stars:2.64},{njs:18,offset:0,notes:1011,bombs:0,obstacles:0,nps:6.489,length:496,characteristic:"Standard",difficulty:"ExpertPlus",events:8431,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:155.812,paritySummary:{errors:44,warns:71,resets:0},stars:5.71}],downloadURL:"https://cdn.beatsaver.com/afb47d1abb417a76a4293d29a725d6dd74d76782.zip",coverURL:"https://cdn.beatsaver.com/afb47d1abb417a76a4293d29a725d6dd74d76782.jpg",previewURL:"https://cdn.beatsaver.com/afb47d1abb417a76a4293d29a725d6dd74d76782.mp3"}],createdAt:"2019-02-01T16:17:26Z",updatedAt:"2019-02-01T16:17:26Z",lastPublishedAt:"2019-02-01T16:17:26Z"},{id:"a68b",name:"[Noodle Touhou] Masayoshi Minoshima - Bad Apple!! (Nhato Remix)",description:"Expert+ Preview: https://www.youtube.com/watch?v=CpfdPKtiYXs\n\nThis song makes me nostalgic to my first exposure to Touhou. I hope this brings back that nostalgia in a new light before we all fade to black.\n\nThis map is part of the first Touhou map pack brought to you by the Ramen Noodle mapper group! It contains all sorts of covers, arrangements and remix of the original Touhou soundtrack. We hope you enjoy it a lot!\nCheckout the playlist here: https://bsaber.com/noodle-touhou/\n\nComments? Like it? Hate it? Let me know on Discord @Bloodcloak#5725 !",uploader:{id:71661,name:"bloodcloak",uniqueSet:!0,hash:"5cff0b7698cc5a672c8551d3",avatar:"https://cdn.beatsaver.com/avatar/205707707187986442.png",type:"DISCORD"},metadata:{bpm:138,duration:369,songName:"Bad Apple!!",songSubName:"ft. nomico (Nhato Remix)",songAuthorName:"Masayoshi Minoshima",levelAuthorName:"Bloodcloak"},stats:{plays:0,downloads:6326,upvotes:2755,downvotes:64,score:.9336},uploaded:"2020-05-15T18:01:27.405Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"3b86d374847b41800d8b3aebb2043138db06ad64",key:"a68b",state:"Published",createdAt:"2020-05-15T18:01:27.405Z",sageScore:4,diffs:[{njs:12,offset:.7,notes:1161,bombs:0,obstacles:307,nps:3.21,length:832,characteristic:"Standard",difficulty:"Hard",events:6683,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:361.739,paritySummary:{errors:6,warns:6,resets:0}},{njs:16,offset:0,notes:1341,bombs:0,obstacles:281,nps:3.707,length:832,characteristic:"Standard",difficulty:"Expert",events:6683,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:361.739,paritySummary:{errors:7,warns:9,resets:0}},{njs:20,offset:-.4,notes:1560,bombs:0,obstacles:239,nps:4.312,length:832.063,characteristic:"Standard",difficulty:"ExpertPlus",events:6683,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:361.766,paritySummary:{errors:16,warns:24,resets:0}}],downloadURL:"https://cdn.beatsaver.com/3b86d374847b41800d8b3aebb2043138db06ad64.zip",coverURL:"https://cdn.beatsaver.com/3b86d374847b41800d8b3aebb2043138db06ad64.jpg",previewURL:"https://cdn.beatsaver.com/3b86d374847b41800d8b3aebb2043138db06ad64.mp3"}],createdAt:"2020-05-15T18:01:27.405Z",updatedAt:"2020-05-15T18:01:27.405Z",lastPublishedAt:"2020-05-15T18:01:27.405Z"},{id:"1ff4",name:"Sheppard - Geronimo (100K Contest)",description:"This community is amazing, in just 6 months we've reached 100,000 members with no signs of slowing down. To celebrate, this map was created with 21 others to bring you the 100K contest! Here, you can win over $7000 in prizes!!\r\n\r\nTo enter, you need to go to the following website and download the mod installer: https://bsaber.com/100k-contest/\r\n\r\nThe competition is now over, but the maps remain!\r\nVideo Preview: https://www.youtube.com/watch?v=k4nEgDrI0vU",uploader:{id:4785,name:"stumi",uniqueSet:!1,hash:"5cff0b7398cc5a672c84f720",avatar:"https://www.gravatar.com/avatar/5cff0b7398cc5a672c84f720?d=retro",type:"SIMPLE"},metadata:{bpm:142,duration:219,songName:"Geronimo",songSubName:"Sheppard",songAuthorName:"Stumi",levelAuthorName:"stumi"},stats:{plays:0,downloads:6998,upvotes:2775,downvotes:65,score:.9336},uploaded:"2018-11-12T18:28:10Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"41a84fc21bdbfea8ca03021237662596d798f662",key:"1ff4",state:"Published",createdAt:"2018-11-12T18:28:10Z",sageScore:5,diffs:[{njs:10,offset:0,notes:293,bombs:20,obstacles:21,nps:1.421,length:488,characteristic:"Standard",difficulty:"Easy",events:1188,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:206.197,paritySummary:{errors:29,warns:16,resets:0}},{njs:10,offset:0,notes:338,bombs:20,obstacles:21,nps:1.639,length:488,characteristic:"Standard",difficulty:"Normal",events:1188,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:206.197,paritySummary:{errors:32,warns:26,resets:0}},{njs:10,offset:0,notes:570,bombs:20,obstacles:21,nps:2.764,length:488,characteristic:"Standard",difficulty:"Hard",events:1190,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:206.197,paritySummary:{errors:33,warns:30,resets:0}},{njs:12,offset:0,notes:707,bombs:20,obstacles:21,nps:3.429,length:488,characteristic:"Standard",difficulty:"Expert",events:1192,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:206.197,paritySummary:{errors:55,warns:50,resets:0}}],downloadURL:"https://cdn.beatsaver.com/41a84fc21bdbfea8ca03021237662596d798f662.zip",coverURL:"https://cdn.beatsaver.com/41a84fc21bdbfea8ca03021237662596d798f662.jpg",previewURL:"https://cdn.beatsaver.com/41a84fc21bdbfea8ca03021237662596d798f662.mp3"}],createdAt:"2018-11-12T18:28:10Z",updatedAt:"2018-11-12T18:28:10Z",lastPublishedAt:"2018-11-12T18:28:10Z"},{id:"4e86",name:"Zero to Hero - Hercules",description:"E+ FC: https://www.youtube.com/watch?v=SVzMwvrsQa0",uploader:{id:4285169,name:"ryger",uniqueSet:!0,hash:"5cff0b7798cc5a672c855a42",avatar:"https://cdn.beatsaver.com/avatar/169266024502263808.png",type:"DISCORD"},metadata:{bpm:120,duration:140,songName:"Zero to Hero",songSubName:"Hercules",songAuthorName:"Ryger",levelAuthorName:"Ryger"},stats:{plays:0,downloads:5259,upvotes:2235,downvotes:45,score:.9334},uploaded:"2019-05-22T16:18:18Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"0b4cda7dd0b19972b9965f7c39ad3a04ceb9f110",key:"4e86",state:"Published",createdAt:"2019-05-22T16:18:18Z",sageScore:2,diffs:[{njs:12,offset:0,notes:477,bombs:0,obstacles:0,nps:3.529,length:376.19,characteristic:"Standard",difficulty:"Hard",events:2354,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:188.095,paritySummary:{errors:26,warns:16,resets:0}},{njs:14,offset:0,notes:604,bombs:0,obstacles:0,nps:4.469,length:376.19,characteristic:"Standard",difficulty:"Expert",events:2354,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:188.095,paritySummary:{errors:30,warns:19,resets:0}},{njs:15,offset:0,notes:644,bombs:0,obstacles:0,nps:4.752,length:377.206,characteristic:"Standard",difficulty:"ExpertPlus",events:2354,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:188.603,paritySummary:{errors:30,warns:32,resets:0}}],downloadURL:"https://cdn.beatsaver.com/0b4cda7dd0b19972b9965f7c39ad3a04ceb9f110.zip",coverURL:"https://cdn.beatsaver.com/0b4cda7dd0b19972b9965f7c39ad3a04ceb9f110.jpg",previewURL:"https://cdn.beatsaver.com/0b4cda7dd0b19972b9965f7c39ad3a04ceb9f110.mp3"}],createdAt:"2019-05-22T16:18:18Z",updatedAt:"2019-05-22T16:18:18Z",lastPublishedAt:"2019-05-22T16:18:18Z"},{id:"3700",name:"U Got That",description:"",uploader:{id:27874,name:"serenity",uniqueSet:!0,hash:"5cff0b7798cc5a672c855426",avatar:"https://www.gravatar.com/avatar/5cff0b7798cc5a672c855426?d=retro",type:"SIMPLE"},metadata:{bpm:124,duration:190,songName:"U Got That",songSubName:"Halogen",songAuthorName:"Serenity",levelAuthorName:"Serenity"},stats:{plays:0,downloads:6766,upvotes:7958,downvotes:296,score:.9334},uploaded:"2019-02-17T05:53:20Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"b671c2401d1b8af29efe71e448f586223e6ca70a",key:"3700",state:"Published",createdAt:"2019-02-17T05:53:20Z",sageScore:5,diffs:[{njs:10,offset:0,notes:732,bombs:24,obstacles:55,nps:3.96,length:382,characteristic:"Standard",difficulty:"Expert",events:1040,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:184.839,paritySummary:{errors:108,warns:73,resets:0}}],downloadURL:"https://cdn.beatsaver.com/b671c2401d1b8af29efe71e448f586223e6ca70a.zip",coverURL:"https://cdn.beatsaver.com/b671c2401d1b8af29efe71e448f586223e6ca70a.jpg",previewURL:"https://cdn.beatsaver.com/b671c2401d1b8af29efe71e448f586223e6ca70a.mp3"}],createdAt:"2019-02-17T05:53:20Z",updatedAt:"2019-02-17T05:53:20Z",lastPublishedAt:"2019-02-17T05:53:20Z"},{id:"77e9",name:"Jingo Jungle [Saga of Tanya the Evil Opening] - AmaLee",description:'AmaLee\'s English cover of "Jingo Jungle", the opening from Saga of Tanya the Evil (Youjo Senki). Original song by MYTH & ROID.',uploader:{id:58338,name:"Joetastic",uniqueSet:!0,hash:"5cff0b7498cc5a672c85050e",avatar:"https://cdn.beatsaver.com/avatar/227767566402191360.png",type:"DISCORD"},metadata:{bpm:130,duration:225,songName:"Jingo Jungle",songSubName:"",songAuthorName:"AmaLee",levelAuthorName:"Joetastic"},stats:{plays:0,downloads:2875,upvotes:1595,downvotes:23,score:.9333},uploaded:"2019-12-21T02:44:34.295Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"f90a2e4f8ee7b1f33543cddccb8baea660253d4a",key:"77e9",state:"Published",createdAt:"2019-12-21T02:44:34.295Z",sageScore:5,diffs:[{njs:12,offset:0,notes:581,bombs:104,obstacles:28,nps:2.647,length:475.5,characteristic:"Standard",difficulty:"Hard",events:5987,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:219.462,paritySummary:{errors:35,warns:15,resets:10}},{njs:15,offset:0,notes:950,bombs:78,obstacles:14,nps:4.329,length:475.5,characteristic:"Standard",difficulty:"Expert",events:5987,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:219.462,paritySummary:{errors:42,warns:48,resets:8}},{njs:17,offset:0,notes:1184,bombs:105,obstacles:17,nps:5.395,length:475.5,characteristic:"Standard",difficulty:"ExpertPlus",events:5987,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:219.462,paritySummary:{errors:32,warns:43,resets:16}}],downloadURL:"https://cdn.beatsaver.com/f90a2e4f8ee7b1f33543cddccb8baea660253d4a.zip",coverURL:"https://cdn.beatsaver.com/f90a2e4f8ee7b1f33543cddccb8baea660253d4a.jpg",previewURL:"https://cdn.beatsaver.com/f90a2e4f8ee7b1f33543cddccb8baea660253d4a.mp3"}],createdAt:"2019-12-21T02:44:34.295Z",updatedAt:"2019-12-21T02:44:34.295Z",lastPublishedAt:"2019-12-21T02:44:34.295Z"},{id:"16ff",name:"Little Swing - AronChupa",description:"Preview: https://youtu.be/_IERvrKBKB0\r\nI wasn't happy with all the other versions of this song, so I made my own.",uploader:{id:4285668,name:"connorjc",uniqueSet:!0,hash:"5cff0b7398cc5a672c84fb89",avatar:"https://cdn.beatsaver.com/avatar/99724057217355776.png",type:"DISCORD"},metadata:{bpm:126,duration:165,songName:"Little Swing",songSubName:"AronChupa feat. Little Sis Nora",songAuthorName:"ConnorJC",levelAuthorName:"ConnorJC"},stats:{plays:0,downloads:4721,upvotes:2877,downvotes:70,score:.9333},uploaded:"2018-09-24T14:51:17Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"235336f468a6290c87d724616e9b1d952ae3b8f2",key:"16ff",state:"Published",createdAt:"2018-09-24T14:51:17Z",sageScore:4,diffs:[{njs:12,offset:0,notes:669,bombs:0,obstacles:28,nps:4.216,length:333.25,characteristic:"Standard",difficulty:"Expert",events:460,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:158.69,paritySummary:{errors:37,warns:55,resets:0}}],downloadURL:"https://cdn.beatsaver.com/235336f468a6290c87d724616e9b1d952ae3b8f2.zip",coverURL:"https://cdn.beatsaver.com/235336f468a6290c87d724616e9b1d952ae3b8f2.jpg",previewURL:"https://cdn.beatsaver.com/235336f468a6290c87d724616e9b1d952ae3b8f2.mp3"}],createdAt:"2018-09-24T14:51:17Z",updatedAt:"2018-09-24T14:51:17Z",lastPublishedAt:"2018-09-24T14:51:17Z"},{id:"1230",name:"Hymn for the Weekend - Coldplay",description:"Hymn for the weekend by Coldplay\r\nBPM: 90 (AHH SLOW)\r\nRuntime: 4m3s\r\nDifficulties: Easy, Normal, Hard, Expert\r\n\r\nDemo : https://vimeo.com/286997137",uploader:{id:47059,name:"rocket",uniqueSet:!0,hash:"5cff0b7398cc5a672c84f1c0",avatar:"https://www.gravatar.com/avatar/5cff0b7398cc5a672c84f1c0?d=retro",type:"SIMPLE"},metadata:{bpm:90,duration:244,songName:"Hymn For The Weekend",songSubName:"Coldplay",songAuthorName:"Rocket",levelAuthorName:"rocket"},stats:{plays:0,downloads:9700,upvotes:3156,downvotes:81,score:.9333},uploaded:"2018-08-28T01:41:15Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"f050cd142882f102226efb614cca3a1ac1368fff",key:"1230",state:"Published",createdAt:"2018-08-28T01:41:15Z",sageScore:5,diffs:[{njs:12,offset:0,notes:202,bombs:0,obstacles:8,nps:.935,length:324,characteristic:"Standard",difficulty:"Easy",events:892,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:216,paritySummary:{errors:35,warns:7,resets:0}},{njs:12,offset:0,notes:377,bombs:0,obstacles:8,nps:1.745,length:324,characteristic:"Standard",difficulty:"Normal",events:895,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:216,paritySummary:{errors:49,warns:39,resets:0}},{njs:12,offset:0,notes:573,bombs:0,obstacles:8,nps:2.617,length:328.375,characteristic:"Standard",difficulty:"Hard",events:893,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:218.917,paritySummary:{errors:50,warns:56,resets:0}},{njs:12,offset:0,notes:729,bombs:0,obstacles:8,nps:3.33,length:328.375,characteristic:"Standard",difficulty:"Expert",events:893,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:218.917,paritySummary:{errors:78,warns:87,resets:0}}],downloadURL:"https://cdn.beatsaver.com/f050cd142882f102226efb614cca3a1ac1368fff.zip",coverURL:"https://cdn.beatsaver.com/f050cd142882f102226efb614cca3a1ac1368fff.jpg",previewURL:"https://cdn.beatsaver.com/f050cd142882f102226efb614cca3a1ac1368fff.mp3"}],createdAt:"2018-08-28T01:41:15Z",updatedAt:"2018-08-28T01:41:15Z",lastPublishedAt:"2018-08-28T01:41:15Z"},{id:"276a",name:"Ain't Nothin' like a Funky Beat - Hideki Naganuma",description:"BAH BAH BAAAH BAH\r\nBAHBAH BUBAH BAH BAH BAAAAH BAH\r\nAint nothin like a funky beat\r\nMy Camera plus mod wasnt working :(\r\n\r\nDifficulties - Expert, Hard, Normal, , Easy\r\nBPM - 142\r\nPreview: https://youtu.be/92pCsIPxv10",uploader:{id:47059,name:"rocket",uniqueSet:!0,hash:"5cff0b7398cc5a672c84f1c0",avatar:"https://www.gravatar.com/avatar/5cff0b7398cc5a672c84f1c0?d=retro",type:"SIMPLE"},metadata:{bpm:142,duration:205,songName:"AIN'T NOTHIN' LIKE A FUNKY BEAT",songSubName:"Hideki Naganuma",songAuthorName:"Rocket",levelAuthorName:"rocket"},stats:{plays:0,downloads:5635,upvotes:2795,downvotes:67,score:.9332},uploaded:"2018-12-22T17:07:11Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"a2c21a3a478f14422185f77cc8f9030f638fcf06",key:"276a",state:"Published",createdAt:"2018-12-22T17:07:11Z",sageScore:6,diffs:[{njs:15,offset:0,notes:237,bombs:0,obstacles:14,nps:1.214,length:462,characteristic:"Standard",difficulty:"Easy",events:1171,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:195.211,paritySummary:{errors:30,warns:16,resets:0}},{njs:15,offset:0,notes:441,bombs:0,obstacles:14,nps:2.239,length:466.25,characteristic:"Standard",difficulty:"Normal",events:1171,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:197.007,paritySummary:{errors:75,warns:40,resets:0}},{njs:15,offset:0,notes:684,bombs:0,obstacles:14,nps:3.472,length:466.25,characteristic:"Standard",difficulty:"Hard",events:1171,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:197.007,paritySummary:{errors:70,warns:95,resets:0}},{njs:15,offset:0,notes:838,bombs:0,obstacles:14,nps:4.254,length:466.25,characteristic:"Standard",difficulty:"Expert",events:1171,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:197.007,paritySummary:{errors:66,warns:76,resets:0}}],downloadURL:"https://cdn.beatsaver.com/a2c21a3a478f14422185f77cc8f9030f638fcf06.zip",coverURL:"https://cdn.beatsaver.com/a2c21a3a478f14422185f77cc8f9030f638fcf06.jpg",previewURL:"https://cdn.beatsaver.com/a2c21a3a478f14422185f77cc8f9030f638fcf06.mp3"}],createdAt:"2018-12-22T17:07:11Z",updatedAt:"2018-12-22T17:07:11Z",lastPublishedAt:"2018-12-22T17:07:11Z"},{id:"46d4",name:"Rap God - Eminem",description:"",uploader:{id:4285169,name:"ryger",uniqueSet:!0,hash:"5cff0b7798cc5a672c855a42",avatar:"https://cdn.beatsaver.com/avatar/169266024502263808.png",type:"DISCORD"},metadata:{bpm:148,duration:366,songName:"Rap God",songSubName:"Eminem",songAuthorName:"Ryger",levelAuthorName:"Ryger"},stats:{plays:0,downloads:17173,upvotes:8866,downvotes:344,score:.933},uploaded:"2019-04-18T16:38:34Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"a38fd8581eb892cc7090f78bfe61e9c256478cf3",key:"46d4",state:"Published",createdAt:"2019-04-18T16:38:34Z",sageScore:6,diffs:[{njs:15,offset:0,notes:2060,bombs:6,obstacles:2,nps:5.724,length:887.75,characteristic:"Standard",difficulty:"Expert",events:9351,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:359.899,paritySummary:{errors:80,warns:66,resets:0}},{njs:15,offset:0,notes:2060,bombs:6,obstacles:2,nps:5.724,length:887.75,characteristic:"Standard",difficulty:"ExpertPlus",events:9351,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:359.899,paritySummary:{errors:80,warns:70,resets:0}}],downloadURL:"https://cdn.beatsaver.com/a38fd8581eb892cc7090f78bfe61e9c256478cf3.zip",coverURL:"https://cdn.beatsaver.com/a38fd8581eb892cc7090f78bfe61e9c256478cf3.jpg",previewURL:"https://cdn.beatsaver.com/a38fd8581eb892cc7090f78bfe61e9c256478cf3.mp3"}],createdAt:"2019-04-18T16:38:34Z",updatedAt:"2019-04-18T16:38:34Z",lastPublishedAt:"2019-04-18T16:38:34Z"},{id:"1188e",name:"Fox Stevenson - All Eyes On Me",description:"Man I love Stan, had a lot of fun making this :p\n\nhas Chroma lights",uploader:{id:4284201,name:"nitronikexe",uniqueSet:!0,hash:"5cff0b7798cc5a672c855d84",avatar:"https://cdn.beatsaver.com/avatar/428230049704181760.png",type:"DISCORD"},metadata:{bpm:172,duration:181,songName:"All Eyes On Me",songSubName:"",songAuthorName:"Fox Stevenson",levelAuthorName:"nitronik.exe"},stats:{plays:0,downloads:7649,upvotes:1891,downvotes:34,score:.9328},uploaded:"2020-11-30T15:14:16.512Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"77300a040e85107d5a745f2f9f2e5ced43205f4a",key:"1188e",state:"Published",createdAt:"2020-11-30T15:14:16.512Z",sageScore:5,diffs:[{njs:14,offset:1,notes:491,bombs:12,obstacles:66,nps:2.779,length:506.5,characteristic:"Standard",difficulty:"Hard",events:4370,chroma:!0,me:!1,ne:!1,cinema:!1,seconds:176.686,paritySummary:{errors:0,warns:0,resets:6}},{njs:17,offset:.2,notes:748,bombs:0,obstacles:27,nps:4.213,length:509,characteristic:"Standard",difficulty:"Expert",events:4370,chroma:!0,me:!1,ne:!1,cinema:!1,seconds:177.558,paritySummary:{errors:0,warns:0,resets:0}},{njs:21,offset:-.3,notes:951,bombs:0,obstacles:27,nps:5.382,length:506.5,characteristic:"Standard",difficulty:"ExpertPlus",events:4370,chroma:!0,me:!1,ne:!1,cinema:!1,seconds:176.686,paritySummary:{errors:0,warns:0,resets:0}}],downloadURL:"https://cdn.beatsaver.com/77300a040e85107d5a745f2f9f2e5ced43205f4a.zip",coverURL:"https://cdn.beatsaver.com/77300a040e85107d5a745f2f9f2e5ced43205f4a.jpg",previewURL:"https://cdn.beatsaver.com/77300a040e85107d5a745f2f9f2e5ced43205f4a.mp3"}],createdAt:"2020-11-30T15:14:16.512Z",updatedAt:"2020-11-30T15:14:16.512Z",lastPublishedAt:"2020-11-30T15:14:16.512Z"},{id:"2c3",name:"Koto - Clozee",description:"Here it is finally, Koto - Clozee from LIV's announcement featuring their depth camera so you don't have to have a green screen! https://twitter.com/LIV/status/1001490921295417345\r\n\r\nIf you love my maps and want to support me, heres my patreon!\r\nhttps://www.patreon.com/purphorosVR",uploader:{id:49373,name:"purphoros",uniqueSet:!0,hash:"5cff0b7298cc5a672c84ea98",avatar:"https://www.gravatar.com/avatar/5cff0b7298cc5a672c84ea98?d=retro",type:"SIMPLE"},metadata:{bpm:100,duration:253,songName:"Koto",songSubName:"CloZee",songAuthorName:"Purphoros",levelAuthorName:"purphoros"},stats:{plays:0,downloads:5247,upvotes:3689,downvotes:105,score:.9328},uploaded:"2018-05-29T17:19:09Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"c1638525606ecb7aea6d6a71d124aa79296ab842",key:"2c3",state:"Published",createdAt:"2018-05-29T17:19:09Z",sageScore:4,diffs:[{njs:10,offset:0,notes:858,bombs:0,obstacles:12,nps:3.575,length:400,characteristic:"Standard",difficulty:"Expert",events:72,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:240,paritySummary:{errors:108,warns:55,resets:0}}],downloadURL:"https://cdn.beatsaver.com/c1638525606ecb7aea6d6a71d124aa79296ab842.zip",coverURL:"https://cdn.beatsaver.com/c1638525606ecb7aea6d6a71d124aa79296ab842.jpg",previewURL:"https://cdn.beatsaver.com/c1638525606ecb7aea6d6a71d124aa79296ab842.mp3"}],createdAt:"2018-05-29T17:19:09Z",updatedAt:"2018-05-29T17:19:09Z",lastPublishedAt:"2018-05-29T17:19:09Z"},{id:"15b16",name:"Codly - Lucy, The God Of Time [Wall Map]",description:"This map has 2 diffs Expert and ExpertPlus\nExpert - Reddek\nExpertPlus - shan_man\n\nLink to preview: https://youtu.be/_LUXKlcpue4\n\nLink to original song: https://youtu.be/kyCXzxmebB4\nSong By: Codly and Sakuzyo\n\nOkay, I put way to much time into this...\n\nHuge thanks to Shan_Man for making a diff in this\n\nAlso thank you Reaxt for your help with the last drop\n\nMade with \n-Demo.js script\n-ScuffedWalls\n\nshan_man: https://beatsaver.com/uploader/5ec5aaa616c9680006500e0a\n\nWould love some feedback in the dms!:\nReddek#5864\nshan_man#7777",uploader:{id:4233941,name:"reddek",uniqueSet:!0,hash:"5dbfb4426dea0b0006bd328d",avatar:"https://cdn.beatsaver.com/avatar/177436487086768129.png",type:"DISCORD"},metadata:{bpm:170,duration:267,songName:"Lucy, The God of Time",songSubName:"",songAuthorName:"Codly",levelAuthorName:"Shan_Man & Reddek"},stats:{plays:0,downloads:3574,upvotes:1185,downvotes:11,score:.9327},uploaded:"2021-03-21T02:47:31.861Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"dd4a025f814b8570f2726939b1c5b000ed210ecf",key:"15b16",state:"Published",createdAt:"2021-03-21T02:47:31.861Z",sageScore:3,diffs:[{njs:20,offset:-.4,notes:873,bombs:117,obstacles:4342,nps:3.654,length:677,characteristic:"Standard",difficulty:"Expert",events:31216,chroma:!0,me:!1,ne:!0,cinema:!1,seconds:238.941,paritySummary:{errors:0,warns:0,resets:3}},{njs:20,offset:-.4,notes:1353,bombs:44,obstacles:4342,nps:5.662,length:677,characteristic:"Standard",difficulty:"ExpertPlus",events:31217,chroma:!0,me:!1,ne:!0,cinema:!1,seconds:238.941,paritySummary:{errors:0,warns:0,resets:3}}],downloadURL:"https://cdn.beatsaver.com/dd4a025f814b8570f2726939b1c5b000ed210ecf.zip",coverURL:"https://cdn.beatsaver.com/dd4a025f814b8570f2726939b1c5b000ed210ecf.jpg",previewURL:"https://cdn.beatsaver.com/dd4a025f814b8570f2726939b1c5b000ed210ecf.mp3"}],createdAt:"2021-03-21T02:47:31.861Z",updatedAt:"2021-03-21T02:47:31.861Z",lastPublishedAt:"2021-03-21T02:47:31.861Z"},{id:"2c3e",name:"Pump It - Black Eyed Peas",description:"Map #9. This was a special request by RedMagi, and he certainly deserves it for tirelessly testing all the other garbage we throw at him. Baxter with the funky patterns, RedMagi with some challenging streams in Expert+, and ALSO the amazing lighting effects! (Oh and of course a heck of a lot of play testing and feedback for fine tuning.) Hope you enjoy it as much as we do.\r\n\r\nAlso a big thank you to all our playtesters for the useful feedback: ManDynasty, Trolav, Crankor, Scrappy, and TurtleSquared\r\n\r\nhttps://youtu.be/YJnL0gq1z7s (Easy)\r\nhttps://youtu.be/U0DIjo4_ZE0 (Normal)\r\nhttps://youtu.be/zks4TgpfoR4 (Hard)\r\nhttps://youtu.be/rRq_fHRSCoI (Expert 3rd person)\r\nhttps://youtu.be/9ThPg99Xm9A (Expert 1st person)\r\nhttps://youtu.be/NPOPWH8bb10 (Expert+)",uploader:{id:27595,name:"baxter395",uniqueSet:!0,hash:"5cff0b7598cc5a672c852f7b",avatar:"https://www.gravatar.com/avatar/5cff0b7598cc5a672c852f7b?d=retro",type:"SIMPLE"},metadata:{bpm:154,duration:215,songName:"Pump It",songSubName:"Black Eyed Peas",songAuthorName:"baxter395 (M) RedMagi (M, L)",levelAuthorName:"baxter395"},stats:{plays:0,downloads:12322,upvotes:4839,downvotes:156,score:.9327},uploaded:"2019-01-09T05:13:56Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"2884021451135e751d3c442ae92243697744b349",key:"2c3e",state:"Published",createdAt:"2019-01-09T05:13:56Z",sageScore:4,diffs:[{njs:10,offset:0,notes:306,bombs:0,obstacles:15,nps:1.144,length:686.679,characteristic:"Standard",difficulty:"Easy",events:9156,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:267.537,paritySummary:{errors:72,warns:22,resets:0}},{njs:11,offset:0,notes:393,bombs:0,obstacles:22,nps:1.877,length:537.407,characteristic:"Standard",difficulty:"Normal",events:9156,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:209.38,paritySummary:{errors:77,warns:43,resets:0}},{njs:12,offset:0,notes:583,bombs:0,obstacles:16,nps:2.779,length:538.36,characteristic:"Standard",difficulty:"Hard",events:9156,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:209.751,paritySummary:{errors:63,warns:68,resets:0}},{njs:16,offset:0,notes:890,bombs:40,obstacles:59,nps:4.243,length:538.36,characteristic:"Standard",difficulty:"Expert",events:9156,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:209.751,paritySummary:{errors:88,warns:125,resets:7}},{njs:18,offset:0,notes:1048,bombs:24,obstacles:63,nps:4.996,length:538.392,characteristic:"Standard",difficulty:"ExpertPlus",events:9156,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:209.763,paritySummary:{errors:93,warns:104,resets:2}}],downloadURL:"https://cdn.beatsaver.com/2884021451135e751d3c442ae92243697744b349.zip",coverURL:"https://cdn.beatsaver.com/2884021451135e751d3c442ae92243697744b349.jpg",previewURL:"https://cdn.beatsaver.com/2884021451135e751d3c442ae92243697744b349.mp3"}],createdAt:"2019-01-09T05:13:56Z",updatedAt:"2019-01-09T05:13:56Z",lastPublishedAt:"2019-01-09T05:13:56Z"},{id:"3f38",name:"Sk8er Boi - Avril Lavigne",description:'"Sk8er Boi" (pronounced "skater boy") is a song by Canadian singer-songwriter Avril Lavigne.\r\n\r\nThis song was on my list of songs to map and I was excited when I saw someone had made one today, and after playing it I decided to make my own map of it.',uploader:{id:58338,name:"Joetastic",uniqueSet:!0,hash:"5cff0b7498cc5a672c85050e",avatar:"https://cdn.beatsaver.com/avatar/227767566402191360.png",type:"DISCORD"},metadata:{bpm:150,duration:206,songName:"Sk8er Boi",songSubName:"Avril Lavigne",songAuthorName:"Joetastic",levelAuthorName:"Joetastic"},stats:{plays:0,downloads:8202,upvotes:2443,downvotes:55,score:.9326},uploaded:"2019-03-20T18:01:26Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"1078f8128effc0b79f19adf2b7aeed613afabac6",key:"3f38",state:"Published",createdAt:"2019-03-20T18:01:26Z",sageScore:6,diffs:[{njs:15,offset:0,notes:893,bombs:0,obstacles:0,nps:4.71,length:474,characteristic:"Standard",difficulty:"Expert",events:1410,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:189.6,paritySummary:{errors:41,warns:34,resets:0}}],downloadURL:"https://cdn.beatsaver.com/1078f8128effc0b79f19adf2b7aeed613afabac6.zip",coverURL:"https://cdn.beatsaver.com/1078f8128effc0b79f19adf2b7aeed613afabac6.jpg",previewURL:"https://cdn.beatsaver.com/1078f8128effc0b79f19adf2b7aeed613afabac6.mp3"}],createdAt:"2019-03-20T18:01:26Z",updatedAt:"2019-03-20T18:01:26Z",lastPublishedAt:"2019-03-20T18:01:26Z"},{id:"19f3",name:"PONPONPON - Kyary Pamyu Pamyu",description:"Everyday PON\nEvery time is PON\n\nExpert is relatively easy, pretty close to OST standards\nHard is pretty close to OST as well\nNormal -- first time doing Normal, give any feedback on bsaber dot com\n\nExpert Preview: https://youtu.be/4AMzxcWDqPM\nFollow me on Twitter u won't\nhttps://twitter.com/aggrogahu\n\nShoutout to Geb and RedMagi for playtesting",uploader:{id:4284613,name:"aggrogahu",uniqueSet:!0,hash:"5cff0b7398cc5a672c84fdad",avatar:"https://cdn.beatsaver.com/avatar/158363872649150464.png",type:"DISCORD"},metadata:{bpm:128,duration:247,songName:"PONPONPON",songSubName:"Kyary Pamyu Pamyu",songAuthorName:"aggrogahu",levelAuthorName:"aggrogahu"},stats:{plays:0,downloads:4544,upvotes:2285,downvotes:49,score:.9326},uploaded:"2018-10-12T23:21:38Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"c1b08e5c05c9e6dad4096f3ff04d1e0497a0a339",key:"19f3",state:"Published",createdAt:"2018-10-12T23:21:38Z",sageScore:4,diffs:[{njs:10,offset:0,notes:432,bombs:2,obstacles:38,nps:1.832,length:503,characteristic:"Standard",difficulty:"Normal",events:636,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:235.781,paritySummary:{errors:101,warns:37,resets:1}},{njs:10,offset:0,notes:541,bombs:1,obstacles:38,nps:2.29,length:504,characteristic:"Standard",difficulty:"Hard",events:636,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:236.25,paritySummary:{errors:133,warns:61,resets:0}},{njs:10,offset:0,notes:714,bombs:2,obstacles:48,nps:3.022,length:504,characteristic:"Standard",difficulty:"Expert",events:636,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:236.25,paritySummary:{errors:120,warns:84,resets:0}}],downloadURL:"https://cdn.beatsaver.com/c1b08e5c05c9e6dad4096f3ff04d1e0497a0a339.zip",coverURL:"https://cdn.beatsaver.com/c1b08e5c05c9e6dad4096f3ff04d1e0497a0a339.jpg",previewURL:"https://cdn.beatsaver.com/c1b08e5c05c9e6dad4096f3ff04d1e0497a0a339.mp3"}],createdAt:"2018-10-12T23:21:38Z",updatedAt:"2018-10-12T23:21:38Z",lastPublishedAt:"2018-10-12T23:21:38Z"},{id:"11b7a",name:"Still Alive - Portal",description:"I've wanted to map this song for a while now. And since this one's probably the last Portal song I'll map, I gave it my best. \r\n\r\nP.S. - I'm so glad to be back mapping this month. I had to take a break due to overwhelming stress, but now I'm feeling ready again.\r\nI hope you enjoy.\r\n\r\nPortal on Steam:\r\nhttps://store.steampowered.com/app/400/Portal/",uploader:{id:4284694,name:"jokidum",uniqueSet:!0,hash:"5e15518d47f1600006e912cc",avatar:"https://cdn.beatsaver.com/avatar/494282373094047745.png",type:"DISCORD"},metadata:{bpm:120,duration:176,songName:"Still Alive",songSubName:"- Portal",songAuthorName:"Jonathan Coulton",levelAuthorName:"Jokidum"},stats:{plays:0,downloads:5965,upvotes:1927,downvotes:36,score:.9325},uploaded:"2020-12-04T20:30:44.132Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"8c03b43484b0dd1fc7d8a3104a82f0992a001c6c",key:"11b7a",state:"Published",createdAt:"2020-12-04T20:30:44.132Z",sageScore:4,diffs:[{njs:12,offset:0,notes:490,bombs:0,obstacles:13,nps:2.853,length:343.5,characteristic:"Standard",difficulty:"Expert",events:1060,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:171.75,paritySummary:{errors:0,warns:0,resets:0}},{njs:16,offset:0,notes:0,bombs:0,obstacles:0,nps:0,length:0,characteristic:"Lightshow",difficulty:"Easy",events:1060,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:0,paritySummary:{errors:0,warns:0,resets:0}}],downloadURL:"https://cdn.beatsaver.com/8c03b43484b0dd1fc7d8a3104a82f0992a001c6c.zip",coverURL:"https://cdn.beatsaver.com/8c03b43484b0dd1fc7d8a3104a82f0992a001c6c.jpg",previewURL:"https://cdn.beatsaver.com/8c03b43484b0dd1fc7d8a3104a82f0992a001c6c.mp3"}],createdAt:"2020-12-04T20:30:44.132Z",updatedAt:"2020-12-04T20:30:44.132Z",lastPublishedAt:"2020-12-04T20:30:44.132Z"},{id:"1ff9",name:"Thaehan - Circus | - 100k Contest",description:"This is one of the 22 maps that were mapped for the 100k Contest where you can win over $7,000 in prizes. Go to https://bsaber.com/100k-contest/ to register!\r\n\r\nI have changed some parts of the map since\r\n\r\nPreview: https://www.youtube.com/watch?v=e4stySCsNIM",uploader:{id:4286278,name:"ruckus",uniqueSet:!0,hash:"5cff0b7398cc5a672c84f1d8",avatar:"https://cdn.beatsaver.com/avatar/239082462083284992.png",type:"DISCORD"},metadata:{bpm:196,duration:148,songName:"Circus",songSubName:"Thaehan",songAuthorName:"Ruckus",levelAuthorName:"ruckus"},stats:{plays:0,downloads:4649,upvotes:2448,downvotes:56,score:.9324},uploaded:"2018-11-12T20:35:47Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"e2934fbc194a51aa3579613bd88dc47503016c8a",key:"1ff9",state:"Published",createdAt:"2018-11-12T20:35:47Z",sageScore:7,diffs:[{njs:11,offset:0,notes:251,bombs:0,obstacles:12,nps:1.83,length:448,characteristic:"Standard",difficulty:"Easy",events:2733,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:137.143,paritySummary:{errors:0,warns:0,resets:0}},{njs:11,offset:0,notes:462,bombs:0,obstacles:0,nps:3.369,length:448,characteristic:"Standard",difficulty:"Normal",events:2735,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:137.143,paritySummary:{errors:29,warns:27,resets:0}},{njs:12,offset:0,notes:513,bombs:0,obstacles:0,nps:3.741,length:448,characteristic:"Standard",difficulty:"Hard",events:2735,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:137.143,paritySummary:{errors:62,warns:42,resets:0}},{njs:14,offset:0,notes:719,bombs:0,obstacles:0,nps:5.24,length:448.273,characteristic:"Standard",difficulty:"Expert",events:2736,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:137.226,paritySummary:{errors:60,warns:73,resets:0}},{njs:17,offset:0,notes:739,bombs:0,obstacles:0,nps:5.386,length:448.25,characteristic:"Standard",difficulty:"ExpertPlus",events:3278,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:137.219,paritySummary:{errors:58,warns:79,resets:0}}],downloadURL:"https://cdn.beatsaver.com/e2934fbc194a51aa3579613bd88dc47503016c8a.zip",coverURL:"https://cdn.beatsaver.com/e2934fbc194a51aa3579613bd88dc47503016c8a.jpg",previewURL:"https://cdn.beatsaver.com/e2934fbc194a51aa3579613bd88dc47503016c8a.mp3"}],createdAt:"2018-11-12T20:35:47Z",updatedAt:"2018-11-12T20:35:47Z",lastPublishedAt:"2018-11-12T20:35:47Z"},{id:"943e",name:"The Only Thing They Fear is You - Mick Gordon DOOM OST",description:"THE 360 MAP REQUIRES THE MAPPING EXTENSIONS MOD FOR BEAT SABER v1.8.0 OR GREATER (the Timbaland Update). OLDER VERSIONS OF MAPPING EXTENSIONS WILL NOT WORK.\n\nEpilepsy warning. Play with Static Lights or dim Custom Colors if prone to epileptic attacks.\nLightshow nerfed on Hard, Expert, and 360 difficulties.\n\nThis map’s Custom Colors are enabled via SongCore. To disable them, go to Mod Settings > SongCore from the ingame Main Menu.\n\n103 BPM / 3:20 Duration\n\nStandard (No Mapping Extensions)\nI'm too young to die - 482 notes (2.41 NPS)\nHurt me plenty - 603 notes (3.02 NPS)\nUltra-Violence - 713 notes (3.57 NPS)\n\n360 (Mapping Extensions)\nNightmare - 713 notes (3.57 NPS) ~6k rotations\n\nLightshow (No Mapping Extensions / SongCore required)\nLightshow - 20359 events\n\nTougeVR's Mixed Reality Playthrough: https://youtu.be/8arRphzeiDE\nMapping Extensions for pre-v1.8.0: https://drive.google.com/file/d/1-59-n3OLqNk4LOZ7MHo9AJ87-2__tEFo/view?usp=sharing",uploader:{id:4284981,name:"skylerwallace",uniqueSet:!0,hash:"5cff0b7298cc5a672c84ea67",avatar:"https://cdn.beatsaver.com/avatar/398344856868487168.png",type:"DISCORD"},metadata:{bpm:103,duration:200,songName:"The Only Thing They Fear is You",songSubName:"",songAuthorName:"Mick Gordon",levelAuthorName:"Skyler Wallace"},stats:{plays:0,downloads:13590,upvotes:4650,downvotes:150,score:.9322},uploaded:"2020-03-27T08:59:46.875Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"ac3976bd01d289aaacf03423706010e843a824d5",key:"943e",state:"Published",createdAt:"2020-03-27T08:59:46.875Z",sageScore:6,diffs:[{njs:13,offset:-.25,notes:482,bombs:370,obstacles:376,nps:2.556,length:323.688,characteristic:"Standard",difficulty:"Hard",events:17272,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:188.556,paritySummary:{errors:25,warns:33,resets:0}},{njs:16,offset:.5,notes:603,bombs:721,obstacles:375,nps:3.193,length:324.187,characteristic:"Standard",difficulty:"Expert",events:17272,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:188.847,paritySummary:{errors:3,warns:10,resets:97}},{njs:19,offset:.25,notes:713,bombs:769,obstacles:379,nps:3.635,length:336.689,characteristic:"Standard",difficulty:"ExpertPlus",events:20359,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:196.13,paritySummary:{errors:10,warns:52,resets:95}},{njs:19,offset:.25,notes:713,bombs:7824,obstacles:9601,nps:3.623,length:337.843,characteristic:"360Degree",difficulty:"ExpertPlus",events:25883,chroma:!1,me:!0,ne:!1,cinema:!1,seconds:196.802,paritySummary:{errors:0,warns:0,resets:0}},{njs:10,offset:0,notes:0,bombs:0,obstacles:0,nps:0,length:0,characteristic:"Lightshow",difficulty:"Easy",events:20359,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:0,paritySummary:{errors:0,warns:0,resets:0}}],downloadURL:"https://cdn.beatsaver.com/ac3976bd01d289aaacf03423706010e843a824d5.zip",coverURL:"https://cdn.beatsaver.com/ac3976bd01d289aaacf03423706010e843a824d5.jpg",previewURL:"https://cdn.beatsaver.com/ac3976bd01d289aaacf03423706010e843a824d5.mp3"}],createdAt:"2020-03-27T08:59:46.875Z",updatedAt:"2020-03-27T08:59:46.875Z",lastPublishedAt:"2020-03-27T08:59:46.875Z"},{id:"4274",name:"Flesh - Nightcore (RubyChan)",description:"BPM: 152.674\r\nNPS: N: 1.92 H: 2.91 E: 3.71 E+: 4.26\r\nNotes: N: 425 H: 644 E: 819 E+: 942\r\nWalls: N: 80 H:82 E:96 E+: 85\r\nBombs: N: 20 H:34 E: 50 E+: 60\r\n\r\nNormal/Hard tend to follow the beat, while Expert/Expert+ tend to follow the vocals. Thanks to Redmagi and helencarnate for play testing!",uploader:{id:4285188,name:"fruhead",uniqueSet:!0,hash:"5cff0b7598cc5a672c852683",avatar:"https://cdn.beatsaver.com/avatar/174000100413145090.png",type:"DISCORD"},metadata:{bpm:153,duration:221,songName:"Flesh",songSubName:"Nighctore (RubyChan)",songAuthorName:"fruhead",levelAuthorName:"fruhead"},stats:{plays:0,downloads:3291,upvotes:1693,downvotes:29,score:.9319},uploaded:"2019-03-31T18:25:07Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"0acc713b47e8228b242fb42c0db29959014f8124",key:"4274",state:"Published",createdAt:"2019-03-31T18:25:07Z",sageScore:3,diffs:[{njs:12,offset:0,notes:425,bombs:20,obstacles:80,nps:2.116,length:511,characteristic:"Standard",difficulty:"Normal",events:7207,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:200.392,paritySummary:{errors:13,warns:0,resets:10}},{njs:14,offset:0,notes:644,bombs:34,obstacles:82,nps:3.207,length:511,characteristic:"Standard",difficulty:"Hard",events:7207,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:200.392,paritySummary:{errors:14,warns:14,resets:18}},{njs:16,offset:0,notes:819,bombs:50,obstacles:96,nps:4.078,length:511,characteristic:"Standard",difficulty:"Expert",events:7207,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:200.392,paritySummary:{errors:32,warns:56,resets:19}},{njs:16,offset:0,notes:942,bombs:60,obstacles:85,nps:4.691,length:511,characteristic:"Standard",difficulty:"ExpertPlus",events:7207,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:200.392,paritySummary:{errors:23,warns:66,resets:23}}],downloadURL:"https://cdn.beatsaver.com/0acc713b47e8228b242fb42c0db29959014f8124.zip",coverURL:"https://cdn.beatsaver.com/0acc713b47e8228b242fb42c0db29959014f8124.jpg",previewURL:"https://cdn.beatsaver.com/0acc713b47e8228b242fb42c0db29959014f8124.mp3"}],createdAt:"2019-03-31T18:25:07Z",updatedAt:"2019-03-31T18:25:07Z",lastPublishedAt:"2019-03-31T18:25:07Z"},{id:"5fda",name:"Mr. Blue Sky",description:"After a certain streamer asked for this to be re-made I put it on my list, needed a break from the current harder maps I'm working on so made this feel-good classic. Hope you enjoy :D\n\nSpecial thanks to those who tested, especially Sehria for her suggestions, and thanks to my little sister for testing Hard diff :P",uploader:{id:4285633,name:"edmard",uniqueSet:!0,hash:"5cff0b7798cc5a672c856604",avatar:"https://cdn.beatsaver.com/avatar/157188812462620672.png",type:"DISCORD"},metadata:{bpm:174,duration:222,songName:"Mr. Blue Sky",songSubName:"",songAuthorName:"Electric Light Orchestra",levelAuthorName:"Edmard"},stats:{plays:0,downloads:4883,upvotes:2486,downvotes:59,score:.9318},uploaded:"2019-08-28T15:45:05.788Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"0039a0c02e9e0ac1761445caadefdfdd989f5316",key:"5fda",state:"Published",createdAt:"2019-08-28T15:45:05.788Z",sageScore:5,diffs:[{njs:14,offset:0,notes:742,bombs:0,obstacles:24,nps:3.579,length:601.25,characteristic:"Standard",difficulty:"Hard",events:816,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:207.328,paritySummary:{errors:2,warns:2,resets:0}},{njs:16,offset:0,notes:772,bombs:0,obstacles:28,nps:3.724,length:601.25,characteristic:"Standard",difficulty:"Expert",events:816,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:207.328,paritySummary:{errors:2,warns:2,resets:0}}],downloadURL:"https://cdn.beatsaver.com/0039a0c02e9e0ac1761445caadefdfdd989f5316.zip",coverURL:"https://cdn.beatsaver.com/0039a0c02e9e0ac1761445caadefdfdd989f5316.jpg",previewURL:"https://cdn.beatsaver.com/0039a0c02e9e0ac1761445caadefdfdd989f5316.mp3"}],createdAt:"2019-08-28T15:45:05.788Z",updatedAt:"2019-08-28T15:45:05.788Z",lastPublishedAt:"2019-08-28T15:45:05.788Z"},{id:"57c2",name:"Rockefeller Street (Nightcore) - Getter Jaani",description:"Hey this is reuploaded since it broke before\nhave fun",uploader:{id:16388,name:"rinkusenpai",uniqueSet:!0,hash:"5cff0b7398cc5a672c84f6cc",avatar:"https://www.gravatar.com/avatar/5cff0b7398cc5a672c84f6cc?d=retro",type:"SIMPLE"},metadata:{bpm:162.5,duration:145,songName:"Rockefeller Street (Nightcore)",songSubName:"",songAuthorName:"Getter Jaani",levelAuthorName:"RinkuSenpai"},stats:{plays:0,downloads:10267,upvotes:7867,downvotes:306,score:.9318},uploaded:"2019-07-18T21:40:09.204Z",automapper:!1,ranked:!0,qualified:!1,versions:[{hash:"b8c98ffc598703aadb4a3cb921d2830d270b57a5",key:"57c2",state:"Published",createdAt:"2019-07-18T21:40:09.204Z",sageScore:6,diffs:[{njs:13,offset:0,notes:545,bombs:0,obstacles:8,nps:3.884,length:380,characteristic:"Standard",difficulty:"Hard",events:2247,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:140.308,paritySummary:{errors:73,warns:61,resets:0},stars:3.06},{njs:17,offset:0,notes:709,bombs:0,obstacles:6,nps:5.053,length:380,characteristic:"Standard",difficulty:"Expert",events:2247,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:140.308,paritySummary:{errors:87,warns:75,resets:0},stars:4.39}],downloadURL:"https://cdn.beatsaver.com/b8c98ffc598703aadb4a3cb921d2830d270b57a5.zip",coverURL:"https://cdn.beatsaver.com/b8c98ffc598703aadb4a3cb921d2830d270b57a5.jpg",previewURL:"https://cdn.beatsaver.com/b8c98ffc598703aadb4a3cb921d2830d270b57a5.mp3"}],createdAt:"2019-07-18T21:40:09.204Z",updatedAt:"2019-07-18T21:40:09.204Z",lastPublishedAt:"2019-07-18T21:40:09.204Z"},{id:"2693",name:"I Want You - DJMAX",description:"I love this song.",uploader:{id:4285521,name:"ejiejidayo",uniqueSet:!0,hash:"5cff0b7398cc5a672c84fc58",avatar:"https://cdn.beatsaver.com/avatar/224894241279574016.png",type:"DISCORD"},metadata:{bpm:140,duration:109,songName:"I Want You",songSubName:"DJMAX",songAuthorName:"ejiejidayo",levelAuthorName:"ejiejidayo"},stats:{plays:0,downloads:6675,upvotes:2356,downvotes:54,score:.9318},uploaded:"2018-12-18T12:09:51Z",automapper:!1,ranked:!0,qualified:!1,versions:[{hash:"bb9de13539a2ab9a21f7ff68a2669f7887011456",key:"2693",state:"Published",createdAt:"2018-12-18T12:09:51Z",sageScore:4,diffs:[{njs:11,offset:0,notes:115,bombs:0,obstacles:25,nps:1.209,length:222,characteristic:"Standard",difficulty:"Easy",events:108,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:95.143,paritySummary:{errors:23,warns:12,resets:0},stars:1.08},{njs:12,offset:0,notes:173,bombs:0,obstacles:24,nps:1.786,length:226.031,characteristic:"Standard",difficulty:"Normal",events:108,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:96.871,paritySummary:{errors:13,warns:18,resets:0},stars:1.26},{njs:13,offset:0,notes:225,bombs:2,obstacles:42,nps:2.292,length:229.031,characteristic:"Standard",difficulty:"Hard",events:108,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:98.156,paritySummary:{errors:15,warns:24,resets:0},stars:1.71},{njs:14,offset:0,notes:405,bombs:2,obstacles:32,nps:4.126,length:229.031,characteristic:"Standard",difficulty:"Expert",events:106,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:98.156,paritySummary:{errors:33,warns:80,resets:0},stars:2.85}],downloadURL:"https://cdn.beatsaver.com/bb9de13539a2ab9a21f7ff68a2669f7887011456.zip",coverURL:"https://cdn.beatsaver.com/bb9de13539a2ab9a21f7ff68a2669f7887011456.jpg",previewURL:"https://cdn.beatsaver.com/bb9de13539a2ab9a21f7ff68a2669f7887011456.mp3"}],createdAt:"2018-12-18T12:09:51Z",updatedAt:"2018-12-18T12:09:51Z",lastPublishedAt:"2018-12-18T12:09:51Z"},{id:"a907",name:"[TheFatRat Pack] Monody (ft. Laura Brehm) - TheFatRat",description:'Here it is! The unofficial "TheFatRat" Music Pack in Beat Saber - with all beatmaps being singlehandedly made by me!\n\nAll songs included in TheFatRat Music Pack:\nMonody (ft. Laura Brehm) \nUnity \nWindfall \nXenogenesis \nTime Lapse \n\nGet the full song pack here: https://bsaber.com/thefatrat-music-pack/\n(Or you should just be able to find all the other ones on my beatsaver profile as well. Heres a link to my profile: https://beatsaver.com/uploader/5d47d586c5301900060b2f6c)\n\nSongcore mod is recommended (for custom colours)\nPlays best on Origins Environment\n\nMonody Stats:\nExpert+ - 1058 Notes | 3.73 NPS\nExpert - 907 Notes | 3.19 NPS\nHard - 677 Notes | 2.38 NPS\nNormal - 421 Notes | 1.48 NPS\nEasy - 283 Notes | 1.00 NPS\n\nRoughly 11-12 Hours of work\nGameplay: https://youtu.be/5LvJXf4Co4w\n\nObviously - A huge thanks to TheFatRat himself, for not only producing the songs in the first place (and allowing free access to use them for big and small content creators), but also being a huge inspiration to lots of artists out there and for making music that everyone can jam out to! We love you, TheFatRat!',uploader:{id:4284197,name:"timeweaver",uniqueSet:!0,hash:"5d47d586c5301900060b2f6c",avatar:"https://cdn.beatsaver.com/avatar/607399708121366529.png",type:"DISCORD"},metadata:{bpm:107,duration:283,songName:"Monody",songSubName:"ft. Laura Brehm",songAuthorName:"TheFatRat",levelAuthorName:"Timeweaver"},stats:{plays:0,downloads:9449,upvotes:2084,downvotes:44,score:.9316},uploaded:"2020-05-22T13:28:13.182Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"8e82872941abe8c99e9ac86d9c063fc5aee57d52",key:"a907",state:"Published",createdAt:"2020-05-22T13:28:13.182Z",sageScore:7,diffs:[{njs:10,offset:1,notes:283,bombs:0,obstacles:63,nps:1.048,length:481.689,characteristic:"Standard",difficulty:"Easy",events:3844,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:270.106,paritySummary:{errors:43,warns:21,resets:0}},{njs:10,offset:1,notes:421,bombs:0,obstacles:62,nps:1.559,length:481.689,characteristic:"Standard",difficulty:"Normal",events:3844,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:270.106,paritySummary:{errors:33,warns:16,resets:0}},{njs:12,offset:.25,notes:677,bombs:0,obstacles:61,nps:2.507,length:481.656,characteristic:"Standard",difficulty:"Hard",events:3844,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:270.087,paritySummary:{errors:8,warns:6,resets:0}},{njs:15,offset:-.3,notes:907,bombs:0,obstacles:58,nps:3.358,length:481.689,characteristic:"Standard",difficulty:"Expert",events:3844,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:270.106,paritySummary:{errors:5,warns:3,resets:0}},{njs:18,offset:.4,notes:1058,bombs:0,obstacles:59,nps:3.917,length:481.689,characteristic:"Standard",difficulty:"ExpertPlus",events:3844,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:270.106,paritySummary:{errors:0,warns:0,resets:0}}],downloadURL:"https://cdn.beatsaver.com/8e82872941abe8c99e9ac86d9c063fc5aee57d52.zip",coverURL:"https://cdn.beatsaver.com/8e82872941abe8c99e9ac86d9c063fc5aee57d52.jpg",previewURL:"https://cdn.beatsaver.com/8e82872941abe8c99e9ac86d9c063fc5aee57d52.mp3"}],createdAt:"2020-05-22T13:28:13.182Z",updatedAt:"2020-05-22T13:28:13.182Z",lastPublishedAt:"2020-05-22T13:28:13.182Z"},{id:"9cd2",name:"Grant - Are We Still Young",description:"i can't get enough grant in my life, send help\r\n\r\nif you don't like dodge walls, check the lawless diff @whipstickgostop",uploader:{id:4284569,name:"checkthepan",uniqueSet:!0,hash:"5cff0b7398cc5a672c84f3d5",avatar:"https://cdn.beatsaver.com/avatar/184355369189900290.png",type:"DISCORD"},metadata:{bpm:110,duration:216,songName:"Are We Still Young",songSubName:"",songAuthorName:"grant",levelAuthorName:"Checkthepan"},stats:{plays:0,downloads:6474,upvotes:1642,downvotes:28,score:.9315},uploaded:"2020-04-19T21:24:40.430Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"d03086c064a4546e4c5bfe6ef79545850fd1ac98",key:"9cd2",state:"Published",createdAt:"2020-04-19T21:24:40.430Z",sageScore:7,diffs:[{njs:10,offset:0,notes:270,bombs:0,obstacles:14,nps:1.292,length:383,characteristic:"Standard",difficulty:"Easy",events:8571,chroma:!0,me:!1,ne:!1,cinema:!1,seconds:208.909,paritySummary:{errors:88,warns:19,resets:0}},{njs:10,offset:0,notes:407,bombs:0,obstacles:13,nps:1.948,length:383,characteristic:"Standard",difficulty:"Normal",events:8571,chroma:!0,me:!1,ne:!1,cinema:!1,seconds:208.909,paritySummary:{errors:51,warns:15,resets:0}},{njs:12,offset:0,notes:576,bombs:0,obstacles:140,nps:2.746,length:384.5,characteristic:"Standard",difficulty:"Hard",events:8571,chroma:!0,me:!1,ne:!1,cinema:!1,seconds:209.727,paritySummary:{errors:4,warns:3,resets:0}},{njs:15,offset:-.25,notes:721,bombs:16,obstacles:138,nps:3.442,length:384,characteristic:"Standard",difficulty:"Expert",events:8571,chroma:!0,me:!1,ne:!1,cinema:!1,seconds:209.455,paritySummary:{errors:0,warns:0,resets:3}},{njs:17,offset:.2,notes:928,bombs:46,obstacles:186,nps:4.431,length:384,characteristic:"Standard",difficulty:"ExpertPlus",events:8571,chroma:!0,me:!1,ne:!1,cinema:!1,seconds:209.455,paritySummary:{errors:0,warns:0,resets:5}},{njs:10,offset:0,notes:0,bombs:0,obstacles:0,nps:0,length:0,characteristic:"Lightshow",difficulty:"Easy",events:8571,chroma:!0,me:!1,ne:!1,cinema:!1,seconds:0,paritySummary:{errors:0,warns:0,resets:0}},{njs:17,offset:.2,notes:928,bombs:46,obstacles:145,nps:4.431,length:384,characteristic:"Lawless",difficulty:"ExpertPlus",events:8571,chroma:!0,me:!1,ne:!1,cinema:!1,seconds:209.455,paritySummary:{errors:0,warns:0,resets:5}}],downloadURL:"https://cdn.beatsaver.com/d03086c064a4546e4c5bfe6ef79545850fd1ac98.zip",coverURL:"https://cdn.beatsaver.com/d03086c064a4546e4c5bfe6ef79545850fd1ac98.jpg",previewURL:"https://cdn.beatsaver.com/d03086c064a4546e4c5bfe6ef79545850fd1ac98.mp3"}],createdAt:"2020-04-19T21:24:40.430Z",updatedAt:"2020-04-19T21:24:40.430Z",lastPublishedAt:"2020-04-19T21:24:40.430Z"},{id:"6d63",name:"Take on Me - a-ha",description:"This song may be older than I am, but it still rocks even to this date. This made me compelled in making a map worthy of it for modern times. Mapped in a similar dancy style as some of my other maps.\n\nAudio: The album version is used but with the music video ending/outro.\n\nPreview Video:\nhttps://youtu.be/ouhgRepxZMk\n\nBPM: 168-169\nDuration: 3:39\nEasy, Normal, Hard and Expert difficulties:\n\nEasy:\n277 notes, 29 obstacles, 0 mines\n\nNormal:\n359 notes, 26 obstacles, 0 mines\n\nHard:\n549 notes, 26 obstacles, 0 mines\n\nExpert:\n852 notes, 23 obstacles, 0 mines\n\nThanks to Jessi81, Thomas, Kival Evan, Redmagi and Storm Knight for playtesting!\n\nEnjoy!",uploader:{id:4285318,name:"kolezan",uniqueSet:!0,hash:"5cff0b7398cc5a672c84fcbb",avatar:"https://cdn.beatsaver.com/avatar/220513618763055106.png",type:"DISCORD"},metadata:{bpm:168.868,duration:219,songName:"Take On Me",songSubName:"",songAuthorName:"A-ha",levelAuthorName:"Kolezan"},stats:{plays:0,downloads:15253,upvotes:3615,downvotes:108,score:.9314},uploaded:"2019-11-01T07:20:59.352Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"ac7d867dccb85bd28eea0787eda92c25f849dcef",key:"6d63",state:"Published",createdAt:"2019-11-01T07:20:59.352Z",sageScore:6,diffs:[{njs:10,offset:1,notes:277,bombs:0,obstacles:29,nps:1.325,length:588.521,characteristic:"Standard",difficulty:"Easy",events:2868,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:209.106,paritySummary:{errors:63,warns:26,resets:0}},{njs:12,offset:1,notes:359,bombs:0,obstacles:26,nps:1.711,length:590.521,characteristic:"Standard",difficulty:"Normal",events:2868,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:209.816,paritySummary:{errors:63,warns:61,resets:0}},{njs:15,offset:1,notes:549,bombs:0,obstacles:26,nps:2.617,length:590.521,characteristic:"Standard",difficulty:"Hard",events:2868,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:209.816,paritySummary:{errors:62,warns:70,resets:0}},{njs:18,offset:1,notes:852,bombs:0,obstacles:23,nps:4.061,length:590.521,characteristic:"Standard",difficulty:"Expert",events:2868,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:209.816,paritySummary:{errors:30,warns:67,resets:0}}],downloadURL:"https://cdn.beatsaver.com/ac7d867dccb85bd28eea0787eda92c25f849dcef.zip",coverURL:"https://cdn.beatsaver.com/ac7d867dccb85bd28eea0787eda92c25f849dcef.jpg",previewURL:"https://cdn.beatsaver.com/ac7d867dccb85bd28eea0787eda92c25f849dcef.mp3"}],createdAt:"2019-11-01T07:20:59.352Z",updatedAt:"2019-11-01T07:20:59.352Z",lastPublishedAt:"2019-11-01T07:20:59.352Z"},{id:"9956",name:"Or3o - Help Me",description:"Help Me, by Or3o\nThis was really fun to map but took a little longer than expected.\nAnother full diff spread map. Hope you enjoy!\nThanks to the testplayers: Sorukun, Wolfb34, and Johnny Dee",uploader:{id:15650,name:"alzaraf",uniqueSet:!0,hash:"5cff0b7798cc5a672c855ce3",avatar:"https://www.gravatar.com/avatar/5cff0b7798cc5a672c855ce3?d=retro",type:"SIMPLE"},metadata:{bpm:110,duration:188,songName:"Help Me",songSubName:"",songAuthorName:"Or3o",levelAuthorName:"Alzaraf"},stats:{plays:0,downloads:2316,upvotes:1519,downvotes:24,score:.9313},uploaded:"2020-04-10T16:34:49.265Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"c56040e307335a3e7116de76e4f07d472cfe28d3",key:"9956",state:"Published",createdAt:"2020-04-10T16:34:49.265Z",sageScore:7,diffs:[{njs:10,offset:0,notes:216,bombs:0,obstacles:0,nps:1.189,length:333,characteristic:"Standard",difficulty:"Easy",events:2212,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:181.636,paritySummary:{errors:56,warns:2,resets:0}},{njs:12,offset:0,notes:283,bombs:0,obstacles:0,nps:1.558,length:333,characteristic:"Standard",difficulty:"Normal",events:2212,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:181.636,paritySummary:{errors:61,warns:0,resets:0}},{njs:14,offset:0,notes:497,bombs:0,obstacles:0,nps:2.72,length:335,characteristic:"Standard",difficulty:"Hard",events:2212,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:182.727,paritySummary:{errors:28,warns:0,resets:0}},{njs:16,offset:0,notes:729,bombs:0,obstacles:0,nps:3.984,length:335.5,characteristic:"Standard",difficulty:"Expert",events:2212,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:183,paritySummary:{errors:0,warns:0,resets:0}},{njs:19,offset:.3,notes:816,bombs:0,obstacles:0,nps:4.459,length:335.5,characteristic:"Standard",difficulty:"ExpertPlus",events:2212,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:183,paritySummary:{errors:0,warns:0,resets:0}}],downloadURL:"https://cdn.beatsaver.com/c56040e307335a3e7116de76e4f07d472cfe28d3.zip",coverURL:"https://cdn.beatsaver.com/c56040e307335a3e7116de76e4f07d472cfe28d3.jpg",previewURL:"https://cdn.beatsaver.com/c56040e307335a3e7116de76e4f07d472cfe28d3.mp3"}],createdAt:"2020-04-10T16:34:49.265Z",updatedAt:"2020-04-10T16:34:49.265Z",lastPublishedAt:"2020-04-10T16:34:49.265Z"},{id:"6360",name:"Shirobon - Into the Zone",description:"",uploader:{id:12996,name:"rustic",uniqueSet:!0,hash:"5cff0b7298cc5a672c84e8c4",avatar:"https://www.gravatar.com/avatar/5cff0b7298cc5a672c84e8c4?d=retro",type:"SIMPLE"},metadata:{bpm:122,duration:180,songName:"Into the Zone",songSubName:"",songAuthorName:"Shirobon",levelAuthorName:"Rustic"},stats:{plays:0,downloads:2366,upvotes:1312,downvotes:17,score:.9313},uploaded:"2019-09-14T17:32:19.835Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"c22b89db9dfef084c62412def48cdace57226f5e",key:"6360",state:"Published",createdAt:"2019-09-14T17:32:19.835Z",sageScore:6,diffs:[{njs:18,offset:0,notes:428,bombs:0,obstacles:615,nps:2.67,length:326,characteristic:"Standard",difficulty:"Expert",events:5077,chroma:!1,me:!0,ne:!1,cinema:!1,seconds:160.328,paritySummary:{errors:0,warns:0,resets:0}}],downloadURL:"https://cdn.beatsaver.com/c22b89db9dfef084c62412def48cdace57226f5e.zip",coverURL:"https://cdn.beatsaver.com/c22b89db9dfef084c62412def48cdace57226f5e.jpg",previewURL:"https://cdn.beatsaver.com/c22b89db9dfef084c62412def48cdace57226f5e.mp3"}],createdAt:"2019-09-14T17:32:19.835Z",updatedAt:"2019-09-14T17:32:19.835Z",lastPublishedAt:"2019-09-14T17:32:19.835Z"},{id:"7de1",name:"Emergency (Nightcore Mix) - Kim Leoni",description:"78",uploader:{id:4285521,name:"ejiejidayo",uniqueSet:!0,hash:"5cff0b7398cc5a672c84fc58",avatar:"https://cdn.beatsaver.com/avatar/224894241279574016.png",type:"DISCORD"},metadata:{bpm:174,duration:148,songName:"Emergency (Nightcore Mix)",songSubName:"",songAuthorName:"Kim Leoni",levelAuthorName:"ejiejidayo"},stats:{plays:0,downloads:7439,upvotes:2274,downvotes:52,score:.9313},uploaded:"2020-01-12T09:33:57.766Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"c28ac0c2eac67c79b893ba3a1f432a27dd3a368b",key:"7de1",state:"Published",createdAt:"2020-01-12T09:33:57.766Z",sageScore:4,diffs:[{njs:14,offset:.6,notes:542,bombs:58,obstacles:187,nps:3.806,length:413,characteristic:"Standard",difficulty:"Easy",events:1749,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:142.414,paritySummary:{errors:67,warns:79,resets:23}},{njs:13,offset:0,notes:428,bombs:0,obstacles:126,nps:3.005,length:413,characteristic:"Standard",difficulty:"Hard",events:1749,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:142.414,paritySummary:{errors:2,warns:2,resets:0}},{njs:16,offset:.1,notes:599,bombs:0,obstacles:126,nps:4.196,length:414,characteristic:"Standard",difficulty:"Expert",events:1749,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:142.759,paritySummary:{errors:14,warns:44,resets:0}},{njs:17,offset:0,notes:805,bombs:0,obstacles:126,nps:5.639,length:414,characteristic:"Standard",difficulty:"ExpertPlus",events:1749,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:142.759,paritySummary:{errors:18,warns:27,resets:0}}],downloadURL:"https://cdn.beatsaver.com/c28ac0c2eac67c79b893ba3a1f432a27dd3a368b.zip",coverURL:"https://cdn.beatsaver.com/c28ac0c2eac67c79b893ba3a1f432a27dd3a368b.jpg",previewURL:"https://cdn.beatsaver.com/c28ac0c2eac67c79b893ba3a1f432a27dd3a368b.mp3"}],createdAt:"2020-01-12T09:33:57.766Z",updatedAt:"2020-01-12T09:33:57.766Z",lastPublishedAt:"2020-01-12T09:33:57.766Z"},{id:"557f",name:"Enormous Penis - Da Vinci's Notebook",description:"This is my first time working on a A Capella song! which means no instruments and mapping to lyrics or lip noises. which means its usually not following the bpm closely (some parts are 1/8 faster or slower). I did like the challenge though and it was a nice change of pace! Thanks Austin for giving me a reason to try mapping A Capella.\n\n“Enormous Penis” is an A Capella song performed by the group Da Vinci’s Notebook for their album Brontosaurus, which was released in 2002. ",uploader:{id:58338,name:"Joetastic",uniqueSet:!0,hash:"5cff0b7498cc5a672c85050e",avatar:"https://cdn.beatsaver.com/avatar/227767566402191360.png",type:"DISCORD"},metadata:{bpm:119,duration:164,songName:"Enormous Penis",songSubName:"",songAuthorName:"Da Vinci's Notebook",levelAuthorName:"Joetastic"},stats:{plays:0,downloads:2614,upvotes:1367,downvotes:19,score:.9312},uploaded:"2019-07-04T13:21:52.797Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"2b61e7bd12379b9c1c193de7e28d1e816942c948",key:"557f",state:"Published",createdAt:"2019-07-04T13:21:52.797Z",sageScore:5,diffs:[{njs:12,offset:0,notes:518,bombs:55,obstacles:36,nps:3.252,length:315.875,characteristic:"Standard",difficulty:"Hard",events:714,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:159.265,paritySummary:{errors:29,warns:25,resets:10}}],downloadURL:"https://cdn.beatsaver.com/2b61e7bd12379b9c1c193de7e28d1e816942c948.zip",coverURL:"https://cdn.beatsaver.com/2b61e7bd12379b9c1c193de7e28d1e816942c948.jpg",previewURL:"https://cdn.beatsaver.com/2b61e7bd12379b9c1c193de7e28d1e816942c948.mp3"}],createdAt:"2019-07-04T13:21:52.797Z",updatedAt:"2019-07-04T13:21:52.797Z",lastPublishedAt:"2019-07-04T13:21:52.797Z"},{id:"5373",name:"Chito (CV: Minase Inori), Yuuri (CV: Kubo Yurika) - Ugoku, Ugoku",description:"A nice, chill map of the opening to one of my favorite animes to let you know that I haven't stopped mapping yet. I have quite a few maps I've been slowly making progress on and they should be coming out sometime soon!\n\nIn case you need a way to contact me or let me know of any issues: discord.gg/EVU9At2",uploader:{id:4288620,name:"hexagonial",uniqueSet:!0,hash:"5cff0b7398cc5a672c84f2fb",avatar:"https://cdn.beatsaver.com/avatar/221442943045599232.png",type:"DISCORD"},metadata:{bpm:128,duration:91,songName:"Ugoku, Ugoku",songSubName:"",songAuthorName:"Chito (CV: Minase Inori), Yuuri (CV: Kubo Yurika)",levelAuthorName:"Hexagonial"},stats:{plays:0,downloads:3196,upvotes:1684,downvotes:30,score:.9312},uploaded:"2019-06-19T01:42:05.315Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"7ac2bd85723acb7d4fd9957e62a7769700755c04",key:"5373",state:"Published",createdAt:"2019-06-19T01:42:05.315Z",sageScore:7,diffs:[{njs:10,offset:0,notes:95,bombs:8,obstacles:45,nps:1.081,length:187.5,characteristic:"Standard",difficulty:"Easy",events:1220,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:87.891,paritySummary:{errors:0,warns:0,resets:0}},{njs:10,offset:0,notes:152,bombs:8,obstacles:45,nps:1.729,length:187.5,characteristic:"Standard",difficulty:"Normal",events:1220,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:87.891,paritySummary:{errors:14,warns:0,resets:0}},{njs:13,offset:0,notes:243,bombs:4,obstacles:43,nps:2.765,length:187.5,characteristic:"Standard",difficulty:"Hard",events:1220,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:87.891,paritySummary:{errors:8,warns:0,resets:0}},{njs:15,offset:0,notes:326,bombs:0,obstacles:36,nps:3.709,length:187.5,characteristic:"Standard",difficulty:"Expert",events:1220,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:87.891,paritySummary:{errors:0,warns:0,resets:0}},{njs:16,offset:0,notes:393,bombs:0,obstacles:39,nps:4.471,length:187.5,characteristic:"Standard",difficulty:"ExpertPlus",events:1220,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:87.891,paritySummary:{errors:1,warns:9,resets:0}}],downloadURL:"https://cdn.beatsaver.com/7ac2bd85723acb7d4fd9957e62a7769700755c04.zip",coverURL:"https://cdn.beatsaver.com/7ac2bd85723acb7d4fd9957e62a7769700755c04.jpg",previewURL:"https://cdn.beatsaver.com/7ac2bd85723acb7d4fd9957e62a7769700755c04.mp3"}],createdAt:"2019-06-19T01:42:05.315Z",updatedAt:"2019-06-19T01:42:05.315Z",lastPublishedAt:"2019-06-19T01:42:05.315Z"},{id:"10dcc",name:"The Chonk Chart™",description:"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n(account definitely isn't a Mawntee alt account no sir)",uploader:{id:1602,name:"chief-queef",uniqueSet:!0,hash:"5f9a4d2a030219000627c2bf",avatar:"https://cdn.beatsaver.com/avatar/1602.jpg",type:"SIMPLE"},metadata:{bpm:69,duration:23,songName:"Chonk Chart",songSubName:"",songAuthorName:"Gyan Ko",levelAuthorName:"Chief Queef"},stats:{plays:0,downloads:3653,upvotes:1784,downvotes:34,score:.9311},uploaded:"2020-11-12T09:20:18.282Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"b966edcba3f8187dacd633dabbf05e128e57d21b",key:"10dcc",state:"Published",createdAt:"2020-11-12T09:20:18.282Z",sageScore:4,diffs:[{njs:6.9,offset:6.9,notes:7,bombs:0,obstacles:0,nps:.447,length:18,characteristic:"Standard",difficulty:"Easy",events:312,chroma:!0,me:!1,ne:!0,cinema:!1,seconds:15.652,paritySummary:{errors:6,warns:0,resets:0}}],downloadURL:"https://cdn.beatsaver.com/b966edcba3f8187dacd633dabbf05e128e57d21b.zip",coverURL:"https://cdn.beatsaver.com/b966edcba3f8187dacd633dabbf05e128e57d21b.jpg",previewURL:"https://cdn.beatsaver.com/b966edcba3f8187dacd633dabbf05e128e57d21b.mp3"}],createdAt:"2020-11-12T09:20:18.282Z",updatedAt:"2020-11-12T09:20:18.282Z",lastPublishedAt:"2020-11-12T09:20:18.282Z"},{id:"6b8c",name:"TheFatRat - MAYDAY feat. Laura Brehm",description:"--- PLEASE HAVE CHROMALITE INSTALLED FOR THE LIGHTSHOW AND LIGHTING EVENTS ---\n\nExpert+ (M A Y D A Y): Oddloop\nEasy - Expert: RedMagi\nLights: Aaltopahwi",uploader:{id:4284400,name:"oddloop",uniqueSet:!0,hash:"5cff0b7398cc5a672c84fd45",avatar:"https://cdn.beatsaver.com/avatar/173241614192476161.png",type:"DISCORD"},metadata:{bpm:150,duration:249,songName:"MAYDAY",songSubName:"feat. Laura Brehm",songAuthorName:"TheFatRat",levelAuthorName:"Oddloop, RedMagi & AaltopahWi"},stats:{plays:0,downloads:8888,upvotes:4606,downvotes:154,score:.9311},uploaded:"2019-10-22T19:11:34.707Z",automapper:!1,ranked:!0,qualified:!1,versions:[{hash:"58e760690ffb379864d76b06505f4056e84fbe84",key:"6b8c",state:"Published",createdAt:"2019-10-22T19:11:34.707Z",sageScore:8,diffs:[{njs:10,offset:1,notes:251,bombs:0,obstacles:0,nps:1.077,length:582.5,characteristic:"Standard",difficulty:"Easy",events:20350,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:233,paritySummary:{errors:7,warns:6,resets:0},stars:.8},{njs:12,offset:1,notes:434,bombs:0,obstacles:0,nps:1.863,length:582.5,characteristic:"Standard",difficulty:"Normal",events:20350,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:233,paritySummary:{errors:11,warns:10,resets:0},stars:1.16},{njs:14,offset:1,notes:541,bombs:16,obstacles:0,nps:2.322,length:582.5,characteristic:"Standard",difficulty:"Hard",events:20350,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:233,paritySummary:{errors:7,warns:8,resets:1},stars:1.53},{njs:16,offset:.5,notes:769,bombs:12,obstacles:0,nps:3.204,length:600,characteristic:"Standard",difficulty:"Expert",events:20350,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:240,paritySummary:{errors:10,warns:9,resets:1},stars:2.17},{njs:23,offset:.5,notes:1655,bombs:0,obstacles:49,nps:6.896,length:600,characteristic:"Standard",difficulty:"ExpertPlus",events:20314,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:240,paritySummary:{errors:2,warns:0,resets:0},stars:5.3},{njs:10,offset:0,notes:0,bombs:0,obstacles:0,nps:0,length:0,characteristic:"Lightshow",difficulty:"Easy",events:20350,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:0,paritySummary:{errors:0,warns:0,resets:0}}],downloadURL:"https://cdn.beatsaver.com/58e760690ffb379864d76b06505f4056e84fbe84.zip",coverURL:"https://cdn.beatsaver.com/58e760690ffb379864d76b06505f4056e84fbe84.jpg",previewURL:"https://cdn.beatsaver.com/58e760690ffb379864d76b06505f4056e84fbe84.mp3"}],createdAt:"2019-10-22T19:11:34.707Z",updatedAt:"2019-10-22T19:11:34.707Z",lastPublishedAt:"2019-10-22T19:11:34.707Z"},{id:"1ff0",name:"Flux Pavilion - I can't stop | 100k Contest",description:"This is one of the 22 maps that were mapped for the 100k Contest where you can win over $7,000 in prizes. Go to https://bsaber.com/100k-contest/ to register!",uploader:{id:12996,name:"rustic",uniqueSet:!0,hash:"5cff0b7298cc5a672c84e8c4",avatar:"https://www.gravatar.com/avatar/5cff0b7298cc5a672c84e8c4?d=retro",type:"SIMPLE"},metadata:{bpm:140,duration:148,songName:"I can't stop",songSubName:"Flux Pavilion",songAuthorName:"Rustic",levelAuthorName:"rustic"},stats:{plays:0,downloads:11299,upvotes:4364,downvotes:143,score:.9311},uploaded:"2018-11-12T17:55:03Z",automapper:!1,ranked:!0,qualified:!1,versions:[{hash:"8d9df176c94ecf5c7725457525b6f959f5ef9296",key:"1ff0",state:"Published",createdAt:"2018-11-12T17:55:03Z",sageScore:6,diffs:[{njs:10,offset:0,notes:145,bombs:0,obstacles:0,nps:1.057,length:320,characteristic:"Standard",difficulty:"Easy",events:1045,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:137.143,paritySummary:{errors:52,warns:3,resets:0},stars:.69},{njs:10,offset:0,notes:212,bombs:0,obstacles:0,nps:1.546,length:320,characteristic:"Standard",difficulty:"Normal",events:0,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:137.143,paritySummary:{errors:8,warns:17,resets:0},stars:.92},{njs:12,offset:0,notes:342,bombs:0,obstacles:0,nps:2.509,length:318,characteristic:"Standard",difficulty:"Hard",events:2634,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:136.286,paritySummary:{errors:5,warns:29,resets:0},stars:1.78},{njs:14,offset:0,notes:372,bombs:0,obstacles:15,nps:2.73,length:318,characteristic:"Standard",difficulty:"Expert",events:2634,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:136.286,paritySummary:{errors:17,warns:34,resets:0},stars:1.78}],downloadURL:"https://cdn.beatsaver.com/8d9df176c94ecf5c7725457525b6f959f5ef9296.zip",coverURL:"https://cdn.beatsaver.com/8d9df176c94ecf5c7725457525b6f959f5ef9296.jpg",previewURL:"https://cdn.beatsaver.com/8d9df176c94ecf5c7725457525b6f959f5ef9296.mp3"}],createdAt:"2018-11-12T17:55:03Z",updatedAt:"2018-11-12T17:55:03Z",lastPublishedAt:"2018-11-12T17:55:03Z"},{id:"e01a",name:"The Spectre - Wallmap",description:"Have you ever seen a call of duty montage from the early 2010's? maybe Russian guy playing a piano in public? \n \nIf you've ever heard of the name Alan Walker then you've heard of \"The Spectre\" so thanks to some help from a friend I'm here to bring you my newest masterpiece. A song with decently placed blocks... wow you'd think by now id actually do a new song but no. I'm here to fix The Spectre and give it the attention it deserves.\n\nOfficial Release Video:\nhttps://youtu.be/ljxO7plPgpA\n\nLight did a little play-through here if you curious\nhttps://www.youtube.com/watch?v=l4qjiqE-hqQ&t=12s",uploader:{id:3449,name:"rizthesnuggie",uniqueSet:!0,hash:"5f051045c51ba90006d92da9",avatar:"https://www.gravatar.com/avatar/5f051045c51ba90006d92da9?d=retro",type:"SIMPLE"},metadata:{bpm:128,duration:190,songName:"The Spectre",songSubName:"[Non NCS]",songAuthorName:"Alan Walker",levelAuthorName:"Riz and KyleT"},stats:{plays:0,downloads:2423,upvotes:1381,downvotes:20,score:.9309},uploaded:"2020-08-29T19:50:28.236Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"f11409e4e08f2463be65c0e56dfc6f6b00e25aeb",key:"e01a",state:"Published",createdAt:"2020-08-29T19:50:28.236Z",sageScore:1,diffs:[{njs:16,offset:-.5,notes:749,bombs:25,obstacles:34105,nps:4.048,length:394.75,characteristic:"Standard",difficulty:"Expert",events:1,chroma:!0,me:!1,ne:!0,cinema:!1,seconds:185.039,paritySummary:{errors:0,warns:0,resets:0}},{njs:16,offset:-.5,notes:0,bombs:0,obstacles:34105,nps:0,length:0,characteristic:"Lightshow",difficulty:"Expert",events:1,chroma:!0,me:!1,ne:!0,cinema:!1,seconds:0,paritySummary:{errors:0,warns:0,resets:0}}],downloadURL:"https://cdn.beatsaver.com/f11409e4e08f2463be65c0e56dfc6f6b00e25aeb.zip",coverURL:"https://cdn.beatsaver.com/f11409e4e08f2463be65c0e56dfc6f6b00e25aeb.jpg",previewURL:"https://cdn.beatsaver.com/f11409e4e08f2463be65c0e56dfc6f6b00e25aeb.mp3"}],createdAt:"2020-08-29T19:50:28.236Z",updatedAt:"2020-08-29T19:50:28.236Z",lastPublishedAt:"2020-08-29T19:50:28.236Z"},{id:"67a8",name:"world.execute(me); - Mili (Fixed)",description:"71",uploader:{id:4285521,name:"ejiejidayo",uniqueSet:!0,hash:"5cff0b7398cc5a672c84fc58",avatar:"https://cdn.beatsaver.com/avatar/224894241279574016.png",type:"DISCORD"},metadata:{bpm:130,duration:209,songName:"world.execute (me) ;",songSubName:"",songAuthorName:"Mili",levelAuthorName:"ejiejidayo"},stats:{plays:0,downloads:4119,upvotes:1832,downvotes:36,score:.9309},uploaded:"2019-10-03T22:51:56.567Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"cfc9d5013d12adb3ca5e0a4a31d8a06f2081dbe6",key:"67a8",state:"Published",createdAt:"2019-10-03T22:51:56.567Z",sageScore:5,diffs:[{njs:15,offset:0,notes:462,bombs:0,obstacles:610,nps:2.239,length:447,characteristic:"Standard",difficulty:"Hard",events:1025,chroma:!1,me:!0,ne:!1,cinema:!1,seconds:206.308,paritySummary:{errors:0,warns:0,resets:0}},{njs:16,offset:0,notes:984,bombs:0,obstacles:610,nps:4.764,length:447.5,characteristic:"Standard",difficulty:"Expert",events:1025,chroma:!1,me:!0,ne:!1,cinema:!1,seconds:206.538,paritySummary:{errors:0,warns:0,resets:0}}],downloadURL:"https://cdn.beatsaver.com/cfc9d5013d12adb3ca5e0a4a31d8a06f2081dbe6.zip",coverURL:"https://cdn.beatsaver.com/cfc9d5013d12adb3ca5e0a4a31d8a06f2081dbe6.jpg",previewURL:"https://cdn.beatsaver.com/cfc9d5013d12adb3ca5e0a4a31d8a06f2081dbe6.mp3"}],createdAt:"2019-10-03T22:51:56.567Z",updatedAt:"2019-10-03T22:51:56.567Z",lastPublishedAt:"2019-10-03T22:51:56.567Z"},{id:"36bf",name:"Daft Punk - Aerodynamic",description:"An essential classic. You might want to stretch first...\r\nExpert+ and Hard.\r\n\r\nPreview: https://youtu.be/1dAwipwIgDg\r\n\r\nCheck out my other maps, too! If you like them, consider subscribing on YouTube to find out when new maps go live.\r\n\r\nThanks for playing!\r\n\r\nhttps://www.twitch.tv/syntheseizure",uploader:{id:31265,name:"syntheseizure",uniqueSet:!0,hash:"5cff0b7698cc5a672c8546bd",avatar:"https://www.gravatar.com/avatar/5cff0b7698cc5a672c8546bd?d=retro",type:"SIMPLE"},metadata:{bpm:123,duration:214,songName:"Aerodynamic",songSubName:"Daft Punk",songAuthorName:"Syntheseizure",levelAuthorName:"Syntheseizure"},stats:{plays:0,downloads:5893,upvotes:2763,downvotes:73,score:.9309},uploaded:"2019-02-16T17:49:39Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"092840ca9a391f34c6af32ac1d6475498de74407",key:"36bf",state:"Published",createdAt:"2019-02-16T17:49:39Z",sageScore:5,diffs:[{njs:12,offset:0,notes:650,bombs:0,obstacles:48,nps:3.2,length:416,characteristic:"Standard",difficulty:"Hard",events:2022,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:202.927,paritySummary:{errors:32,warns:11,resets:0}},{njs:14,offset:0,notes:1022,bombs:0,obstacles:48,nps:5.031,length:416,characteristic:"Standard",difficulty:"ExpertPlus",events:2022,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:202.927,paritySummary:{errors:48,warns:27,resets:0}}],downloadURL:"https://cdn.beatsaver.com/092840ca9a391f34c6af32ac1d6475498de74407.zip",coverURL:"https://cdn.beatsaver.com/092840ca9a391f34c6af32ac1d6475498de74407.jpg",previewURL:"https://cdn.beatsaver.com/092840ca9a391f34c6af32ac1d6475498de74407.mp3"}],createdAt:"2019-02-16T17:49:39Z",updatedAt:"2019-02-16T17:49:39Z",lastPublishedAt:"2019-02-16T17:49:39Z"},{id:"381a",name:"Deep in Abyss [Made in Abyss Opening] - Riko (CV: Miyu Tomita), Reg (CV: Ise Mariya)",description:"Deep in Abyss is the opening song for Made in Abyss and is sung by Riko voiced by Miyu Tomita and Reg voiced by Ise Mariya.\r\n\r\nCheckout the map preview: https://www.youtube.com/watch?v=ZMQz-z57kKo",uploader:{id:58338,name:"Joetastic",uniqueSet:!0,hash:"5cff0b7498cc5a672c85050e",avatar:"https://cdn.beatsaver.com/avatar/227767566402191360.png",type:"DISCORD"},metadata:{bpm:135,duration:221,songName:"Deep in Abyss",songSubName:"Riko (CV: Miyu Tomita), Reg (CV: Ise Mariya)",songAuthorName:"Joetastic",levelAuthorName:"Joetastic"},stats:{plays:0,downloads:3012,upvotes:1850,downvotes:37,score:.9308},uploaded:"2019-02-21T01:04:41Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"c586288044251cc2b2e1d6ac3817214a9ea02302",key:"381a",state:"Published",createdAt:"2019-02-21T01:04:41Z",sageScore:6,diffs:[{njs:15,offset:0,notes:1013,bombs:0,obstacles:33,nps:4.685,length:486.5,characteristic:"Standard",difficulty:"Expert",events:2230,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:216.222,paritySummary:{errors:41,warns:46,resets:0}}],downloadURL:"https://cdn.beatsaver.com/c586288044251cc2b2e1d6ac3817214a9ea02302.zip",coverURL:"https://cdn.beatsaver.com/c586288044251cc2b2e1d6ac3817214a9ea02302.jpg",previewURL:"https://cdn.beatsaver.com/c586288044251cc2b2e1d6ac3817214a9ea02302.mp3"}],createdAt:"2019-02-21T01:04:41Z",updatedAt:"2019-02-21T01:04:41Z",lastPublishedAt:"2019-02-21T01:04:41Z"},{id:"a168",name:"Yunomi - Oedo Controller/大江戸コントローラー feat. TORIENA【Wall Map】",description:"【requires】 Noodle Extensions Chroma\nhttps://youtu.be/5D1WTufQ5dM ",uploader:{id:4285467,name:"fefy",uniqueSet:!0,hash:"5cff0b7798cc5a672c856908",avatar:"https://cdn.beatsaver.com/avatar/380656936460484620.png",type:"DISCORD"},metadata:{bpm:115,duration:257,songName:"Oedo Controller",songSubName:"feat. TORIENA",songAuthorName:"Yunomi",levelAuthorName:"Fefy"},stats:{plays:0,downloads:2659,upvotes:1344,downvotes:19,score:.9307},uploaded:"2020-05-02T09:37:24.020Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"cc3e7aefe1e878057f83d9018eaf977d9f69a1bb",key:"a168",state:"Published",createdAt:"2020-05-02T09:37:24.020Z",sageScore:7,diffs:[{njs:15,offset:0,notes:0,bombs:0,obstacles:55472,nps:0,length:0,characteristic:"Standard",difficulty:"Easy",events:2395,chroma:!0,me:!1,ne:!0,cinema:!1,seconds:0,paritySummary:{errors:0,warns:0,resets:0}},{njs:15,offset:0,notes:816,bombs:0,obstacles:55472,nps:3.265,length:479,characteristic:"Standard",difficulty:"Expert",events:2395,chroma:!0,me:!1,ne:!0,cinema:!1,seconds:249.913,paritySummary:{errors:20,warns:12,resets:0}}],downloadURL:"https://cdn.beatsaver.com/cc3e7aefe1e878057f83d9018eaf977d9f69a1bb.zip",coverURL:"https://cdn.beatsaver.com/cc3e7aefe1e878057f83d9018eaf977d9f69a1bb.jpg",previewURL:"https://cdn.beatsaver.com/cc3e7aefe1e878057f83d9018eaf977d9f69a1bb.mp3"}],createdAt:"2020-05-02T09:37:24.020Z",updatedAt:"2020-05-02T09:37:24.020Z",lastPublishedAt:"2020-05-02T09:37:24.020Z"},{id:"6adc",name:"Rasputin (Funk Overload)",description:"Huge thanks to Whipstickgostop for remastering the audio of this funky beat!",uploader:{id:4285169,name:"ryger",uniqueSet:!0,hash:"5cff0b7798cc5a672c855a42",avatar:"https://cdn.beatsaver.com/avatar/169266024502263808.png",type:"DISCORD"},metadata:{bpm:152,duration:225,songName:"Rasputin (Funk Overload)",songSubName:"",songAuthorName:"Boney M",levelAuthorName:"Ryger"},stats:{plays:0,downloads:10264,upvotes:4935,downvotes:173,score:.9305},uploaded:"2019-10-19T23:00:58.938Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"e979073ecfbb283675d03453af39109957819f35",key:"6adc",state:"Published",createdAt:"2019-10-19T23:00:58.938Z",sageScore:5,diffs:[{njs:16,offset:0,notes:988,bombs:0,obstacles:0,nps:4.542,length:551.125,characteristic:"Standard",difficulty:"Hard",events:4202,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:217.549,paritySummary:{errors:15,warns:14,resets:0}},{njs:16,offset:0,notes:1080,bombs:0,obstacles:0,nps:4.964,length:551.125,characteristic:"Standard",difficulty:"Expert",events:4202,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:217.549,paritySummary:{errors:25,warns:21,resets:0}},{njs:18,offset:0,notes:1164,bombs:0,obstacles:0,nps:5.351,length:551.125,characteristic:"Standard",difficulty:"ExpertPlus",events:4196,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:217.549,paritySummary:{errors:21,warns:27,resets:0}}],downloadURL:"https://cdn.beatsaver.com/e979073ecfbb283675d03453af39109957819f35.zip",coverURL:"https://cdn.beatsaver.com/e979073ecfbb283675d03453af39109957819f35.jpg",previewURL:"https://cdn.beatsaver.com/e979073ecfbb283675d03453af39109957819f35.mp3"}],createdAt:"2019-10-19T23:00:58.938Z",updatedAt:"2019-10-19T23:00:58.938Z",lastPublishedAt:"2019-10-19T23:00:58.938Z"},{id:"3ae2",name:"I Don't Wanna Be In Love (Dance Floor Anthem) - Good Charlotte",description:"I Dont Wanna Be In Love (Dance Floor Anthem) - Good Charlotte\r\nhttps://www.youtube.com/watch?v=pbpeMN_vFRM",uploader:{id:4285982,name:"downycat",uniqueSet:!0,hash:"5cff0b7398cc5a672c84ede5",avatar:"https://cdn.beatsaver.com/avatar/173538829888782336.png",type:"DISCORD"},metadata:{bpm:125,duration:243,songName:"I Don't Wanna Be In Love (Dance Floor Anthem)",songSubName:"Good Charlotte",songAuthorName:"DownyCat",levelAuthorName:"downycat"},stats:{plays:0,downloads:4672,upvotes:991,downvotes:8,score:.9305},uploaded:"2019-03-02T17:41:39Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"f0bef11ce8866052770c42ed855e5d21e935614c",key:"3ae2",state:"Published",createdAt:"2019-03-02T17:41:39Z",sageScore:6,diffs:[{njs:10,offset:0,notes:372,bombs:0,obstacles:29,nps:1.563,length:496,characteristic:"Standard",difficulty:"Normal",events:5639,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:238.08,paritySummary:{errors:19,warns:7,resets:0}},{njs:12,offset:0,notes:796,bombs:0,obstacles:20,nps:3.343,length:496,characteristic:"Standard",difficulty:"Hard",events:5639,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:238.08,paritySummary:{errors:18,warns:26,resets:0}},{njs:14,offset:0,notes:1174,bombs:0,obstacles:10,nps:4.931,length:496,characteristic:"Standard",difficulty:"Expert",events:5639,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:238.08,paritySummary:{errors:27,warns:36,resets:0}}],downloadURL:"https://cdn.beatsaver.com/f0bef11ce8866052770c42ed855e5d21e935614c.zip",coverURL:"https://cdn.beatsaver.com/f0bef11ce8866052770c42ed855e5d21e935614c.jpg",previewURL:"https://cdn.beatsaver.com/f0bef11ce8866052770c42ed855e5d21e935614c.mp3"}],createdAt:"2019-03-02T17:41:39Z",updatedAt:"2019-03-02T17:41:39Z",lastPublishedAt:"2019-03-02T17:41:39Z"},{id:"706b",name:"Guren No Yumiya (TV Size) [Attack On Titan Opening] - Linked Horizon",description:"This map was converted from one of my old maps.\n\nFeel free to DM me on discord @Joetastic#2501",uploader:{id:58338,name:"Joetastic",uniqueSet:!0,hash:"5cff0b7498cc5a672c85050e",avatar:"https://cdn.beatsaver.com/avatar/227767566402191360.png",type:"DISCORD"},metadata:{bpm:180.676,duration:93,songName:"Guren no Yumiya (TV Size)",songSubName:"",songAuthorName:"Linked Horizon",levelAuthorName:"Joetastic"},stats:{plays:0,downloads:8096,upvotes:2435,downvotes:61,score:.9304},uploaded:"2019-11-17T07:01:53.007Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"c00412845c48fb65fc30f16d902af542ca2c88ac",key:"706b",state:"Published",createdAt:"2019-11-17T07:01:53.007Z",sageScore:4,diffs:[{njs:11,offset:0,notes:299,bombs:0,obstacles:0,nps:3.545,length:253.998,characteristic:"Standard",difficulty:"Hard",events:2393,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:84.349,paritySummary:{errors:10,warns:7,resets:0}},{njs:13,offset:0,notes:375,bombs:0,obstacles:0,nps:4.446,length:253.998,characteristic:"Standard",difficulty:"Expert",events:2472,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:84.349,paritySummary:{errors:21,warns:20,resets:0}},{njs:15,offset:0,notes:460,bombs:0,obstacles:0,nps:5.454,length:253.998,characteristic:"Standard",difficulty:"ExpertPlus",events:2472,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:84.349,paritySummary:{errors:22,warns:20,resets:0}}],downloadURL:"https://cdn.beatsaver.com/c00412845c48fb65fc30f16d902af542ca2c88ac.zip",coverURL:"https://cdn.beatsaver.com/c00412845c48fb65fc30f16d902af542ca2c88ac.jpg",previewURL:"https://cdn.beatsaver.com/c00412845c48fb65fc30f16d902af542ca2c88ac.mp3"}],createdAt:"2019-11-17T07:01:53.007Z",updatedAt:"2019-11-17T07:01:53.007Z",lastPublishedAt:"2019-11-17T07:01:53.007Z"},{id:"88bd",name:"Pornhub Intro",description:"182nd Map\nCollab with Monteblanco, Neko, shuuxruri, Suzuki.dll, Zoinkai & Kalmer\n\nYoutube Preview : https://www.youtube.com/watch?v=7V8go6p4P2E",uploader:{id:4284588,name:"rigid",uniqueSet:!0,hash:"5cff0b7598cc5a672c852224",avatar:"https://cdn.beatsaver.com/avatar/295613108947386368.png",type:"DISCORD"},metadata:{bpm:120,duration:5,songName:"Pornhub Intro",songSubName:"",songAuthorName:"Yes",levelAuthorName:"Rigid, Monteblanco, Neko, shuuxruri, Suzuki.dll, Zoinkai & Kalmer"},stats:{plays:0,downloads:3144,upvotes:2182,downvotes:51,score:.9303},uploaded:"2020-02-19T21:36:55.060Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"3ff5c30044bc8d0dfe5aae6b9c665a6367732242",key:"88bd",state:"Published",createdAt:"2020-02-19T21:36:55.060Z",sageScore:3,diffs:[{njs:14,offset:0,notes:10,bombs:0,obstacles:0,nps:4.706,length:4.25,characteristic:"Standard",difficulty:"ExpertPlus",events:93,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:2.125,paritySummary:{errors:0,warns:0,resets:0}}],downloadURL:"https://cdn.beatsaver.com/3ff5c30044bc8d0dfe5aae6b9c665a6367732242.zip",coverURL:"https://cdn.beatsaver.com/3ff5c30044bc8d0dfe5aae6b9c665a6367732242.jpg",previewURL:"https://cdn.beatsaver.com/3ff5c30044bc8d0dfe5aae6b9c665a6367732242.mp3"}],createdAt:"2020-02-19T21:36:55.060Z",updatedAt:"2020-02-19T21:36:55.060Z",lastPublishedAt:"2020-02-19T21:36:55.060Z"},{id:"3f79",name:"Here With Me (feat. CHVRCHES) - Marshmello",description:"Expert Playthrough : https://youtu.be/okOkJ55es8A",uploader:{id:13320,name:"novashaft",uniqueSet:!0,hash:"5cff0b7398cc5a672c84ee55",avatar:"https://www.gravatar.com/avatar/5cff0b7398cc5a672c84ee55?d=retro",type:"SIMPLE"},metadata:{bpm:100,duration:158,songName:"Here With Me (feat. CHVRCHES)",songSubName:"Marshmello",songAuthorName:"NovaShaft",levelAuthorName:"novashaft"},stats:{plays:0,downloads:6739,upvotes:2077,downvotes:47,score:.9303},uploaded:"2019-03-21T15:12:40Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"bae9f42e64c14c8b1740c5bedc0e1c1db8c33c7d",key:"3f79",state:"Published",createdAt:"2019-03-21T15:12:40Z",sageScore:5,diffs:[{njs:11,offset:0,notes:253,bombs:0,obstacles:35,nps:1.67,length:252.5,characteristic:"Standard",difficulty:"Normal",events:626,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:151.5,paritySummary:{errors:27,warns:6,resets:0}},{njs:12,offset:0,notes:306,bombs:0,obstacles:35,nps:2.02,length:252.5,characteristic:"Standard",difficulty:"Hard",events:627,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:151.5,paritySummary:{errors:13,warns:8,resets:0}},{njs:14,offset:0,notes:450,bombs:0,obstacles:35,nps:2.97,length:252.5,characteristic:"Standard",difficulty:"Expert",events:627,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:151.5,paritySummary:{errors:28,warns:24,resets:0}}],downloadURL:"https://cdn.beatsaver.com/bae9f42e64c14c8b1740c5bedc0e1c1db8c33c7d.zip",coverURL:"https://cdn.beatsaver.com/bae9f42e64c14c8b1740c5bedc0e1c1db8c33c7d.jpg",previewURL:"https://cdn.beatsaver.com/bae9f42e64c14c8b1740c5bedc0e1c1db8c33c7d.mp3"}],createdAt:"2019-03-21T15:12:40Z",updatedAt:"2019-03-21T15:12:40Z",lastPublishedAt:"2019-03-21T15:12:40Z"},{id:"238a",name:"Dance of the Sugar Plum Fairy - Lindsey Stirling",description:"EDIT: Thanks to everyone who voted for this map in the Christmas contest!\n\nTheme from the nutcracker.\n\nExpert+ preview: https://youtu.be/naaei24FZAY\nFollow me on Twitter u won't\nhttps://twitter.com/aggrogahu\n\nHard and Normal are kinda close to OST standards, so might be easier for custom standards.\n\nThanks to Redmagi, baxter395, AaltopahWi, and Kolezan for their help and feedback.",uploader:{id:4284613,name:"aggrogahu",uniqueSet:!0,hash:"5cff0b7398cc5a672c84fdad",avatar:"https://cdn.beatsaver.com/avatar/158363872649150464.png",type:"DISCORD"},metadata:{bpm:140,duration:158,songName:"Dance of the Sugar Plum Fairy",songSubName:"Lindsey Stirling",songAuthorName:"aggrogahu",levelAuthorName:"aggrogahu"},stats:{plays:0,downloads:4103,upvotes:1711,downvotes:33,score:.9302},uploaded:"2018-12-03T09:40:02Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"6b901c30686a9fa2935271177fc1b57dd072aae8",key:"238a",state:"Published",createdAt:"2018-12-03T09:40:02Z",sageScore:4,diffs:[{njs:10,offset:0,notes:219,bombs:2,obstacles:29,nps:1.494,length:342,characteristic:"Standard",difficulty:"Normal",events:547,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:146.571,paritySummary:{errors:89,warns:12,resets:0}},{njs:10,offset:0,notes:373,bombs:2,obstacles:16,nps:2.545,length:342,characteristic:"Standard",difficulty:"Hard",events:547,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:146.571,paritySummary:{errors:54,warns:10,resets:0}},{njs:15,offset:0,notes:721,bombs:4,obstacles:32,nps:4.919,length:342,characteristic:"Standard",difficulty:"ExpertPlus",events:547,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:146.571,paritySummary:{errors:51,warns:67,resets:1}}],downloadURL:"https://cdn.beatsaver.com/6b901c30686a9fa2935271177fc1b57dd072aae8.zip",coverURL:"https://cdn.beatsaver.com/6b901c30686a9fa2935271177fc1b57dd072aae8.jpg",previewURL:"https://cdn.beatsaver.com/6b901c30686a9fa2935271177fc1b57dd072aae8.mp3"}],createdAt:"2018-12-03T09:40:02Z",updatedAt:"2018-12-03T09:40:02Z",lastPublishedAt:"2018-12-03T09:40:02Z"},{id:"ebb",name:"Do I Wanna Know? - Arctic Monkeys",description:"X/H/N/E difficulties, full manual lighting.\r\n\r\nExpert Playthrough: https://www.youtube.com/watch?v=ejmDJxe1Vzg\r\n\r\nCreated on twitch in one sitting during a tutorial stream.\r\nFollow us and come say hi on twitch! https://www.twitch.tv/freeek\r\n\r\nHave fun :)\r\n\r\nFreeek!",uploader:{id:47581,name:"freeek",uniqueSet:!0,hash:"5cff0b7298cc5a672c84e8ad",avatar:"https://www.gravatar.com/avatar/5cff0b7298cc5a672c84e8ad?d=retro",type:"SIMPLE"},metadata:{bpm:85,duration:273,songName:"Do I Wanna Know?",songSubName:"Arctic Monkeys",songAuthorName:"Freeek",levelAuthorName:"freeek"},stats:{plays:0,downloads:6011,upvotes:2491,downvotes:64,score:.9302},uploaded:"2018-08-09T18:05:46Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"0fa854bb295e56d8c77da226a3ca41c0070cc793",key:"ebb",state:"Published",createdAt:"2018-08-09T18:05:46Z",sageScore:6,diffs:[{njs:10,offset:0,notes:372,bombs:0,obstacles:71,nps:1.387,length:380,characteristic:"Standard",difficulty:"Easy",events:1154,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:268.235,paritySummary:{errors:84,warns:10,resets:0}},{njs:10,offset:0,notes:522,bombs:0,obstacles:72,nps:1.946,length:380,characteristic:"Standard",difficulty:"Normal",events:1154,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:268.235,paritySummary:{errors:53,warns:54,resets:0}},{njs:10,offset:0,notes:708,bombs:0,obstacles:72,nps:2.639,length:380,characteristic:"Standard",difficulty:"Hard",events:1154,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:268.235,paritySummary:{errors:56,warns:74,resets:0}},{njs:10,offset:0,notes:863,bombs:0,obstacles:75,nps:3.217,length:380,characteristic:"Standard",difficulty:"Expert",events:1154,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:268.235,paritySummary:{errors:79,warns:105,resets:0}}],downloadURL:"https://cdn.beatsaver.com/0fa854bb295e56d8c77da226a3ca41c0070cc793.zip",coverURL:"https://cdn.beatsaver.com/0fa854bb295e56d8c77da226a3ca41c0070cc793.jpg",previewURL:"https://cdn.beatsaver.com/0fa854bb295e56d8c77da226a3ca41c0070cc793.mp3"}],createdAt:"2018-08-09T18:05:46Z",updatedAt:"2018-08-09T18:05:46Z",lastPublishedAt:"2018-08-09T18:05:46Z"},{id:"80fb",name:"[Noodlegames] Lifelight (Camellia's Hardstyle Bootleg)",description:"The Ramen Noodle group is here to bring you a map pack full of our favorite video game soundtracks and game-inspired music!\r\n\r\nCamellia + Iconic Song = PepeJam\r\nHas RGB lights (use chromalite pls, you'll make me cry if you don't)\r\n\r\nStandard mapped by +1 Rabbit\r\nLots of love provided by CyanSnow\r\nOne Saber and Lights mapped by Aeroluna\r\n\r\n150 BPM / 3:47 Duration\r\n\r\n[Standard]:\r\nEasy - 284 notes (1.16 NPS)\r\nNormal - 355 notes (1.56 NPS)\r\nHard - 661 notes (2.91 NPS)\r\nExpert - 899 notes (3.96 NPS)\r\nExpert+ - 1036 notes (4.56 NPS)\r\n\r\n[One Saber]:\r\nExpert - 622 notes (2.73 NPS)\r\nExpert+ - 692 notes (3.05 NPS)\r\n\r\nLights preview: https://youtu.be/qk06uZpgr7E",uploader:{id:4284266,name:"aeroluna",uniqueSet:!0,hash:"5cff0b7698cc5a672c854907",avatar:"https://cdn.beatsaver.com/avatar/193636171497209856.png",type:"DISCORD"},metadata:{bpm:150,duration:227,songName:"Lifelight",songSubName:"(Camellia's Hardstyle Bootleg)",songAuthorName:"Camellia",levelAuthorName:"+1 Rabbit & Aeroluna"},stats:{plays:0,downloads:4528,upvotes:1540,downvotes:27,score:.9301},uploaded:"2020-01-24T23:00:27.676Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"bb2bd82208d452badc4acaf877dc2c4abd0fab15",key:"80fb",state:"Published",createdAt:"2020-01-24T23:00:27.676Z",sageScore:4,diffs:[{njs:12,offset:0,notes:264,bombs:0,obstacles:8,nps:1.231,length:536,characteristic:"Standard",difficulty:"Easy",events:27741,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:214.4,paritySummary:{errors:116,warns:8,resets:0}},{njs:12,offset:0,notes:355,bombs:0,obstacles:55,nps:1.656,length:536,characteristic:"Standard",difficulty:"Normal",events:27741,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:214.4,paritySummary:{errors:77,warns:24,resets:0}},{njs:14,offset:0,notes:661,bombs:0,obstacles:99,nps:3.083,length:536,characteristic:"Standard",difficulty:"Hard",events:27741,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:214.4,paritySummary:{errors:39,warns:29,resets:0}},{njs:16,offset:.25,notes:899,bombs:0,obstacles:103,nps:4.193,length:536,characteristic:"Standard",difficulty:"Expert",events:27741,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:214.4,paritySummary:{errors:2,warns:0,resets:0}},{njs:19,offset:-.2,notes:1036,bombs:0,obstacles:46,nps:4.832,length:536,characteristic:"Standard",difficulty:"ExpertPlus",events:27741,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:214.4,paritySummary:{errors:0,warns:0,resets:0}},{njs:16,offset:0,notes:622,bombs:0,obstacles:0,nps:2.777,length:560,characteristic:"OneSaber",difficulty:"Expert",events:27741,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:224,paritySummary:{errors:7,warns:1,resets:0}},{njs:18,offset:0,notes:692,bombs:0,obstacles:0,nps:3.089,length:560,characteristic:"OneSaber",difficulty:"ExpertPlus",events:27741,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:224,paritySummary:{errors:3,warns:0,resets:0}}],downloadURL:"https://cdn.beatsaver.com/bb2bd82208d452badc4acaf877dc2c4abd0fab15.zip",coverURL:"https://cdn.beatsaver.com/bb2bd82208d452badc4acaf877dc2c4abd0fab15.jpg",previewURL:"https://cdn.beatsaver.com/bb2bd82208d452badc4acaf877dc2c4abd0fab15.mp3"}],createdAt:"2020-01-24T23:00:27.676Z",updatedAt:"2020-01-24T23:00:27.676Z",lastPublishedAt:"2020-01-24T23:00:27.676Z"},{id:"d410",name:"[FUTURE FUNK PACK] Disco Lady - Nanidato",description:'FUTURE FUNK MAP PACK\n2 songs uploaded everyday through August 10th - 14th!\n\n"Disco Lady" by Nanidato was sampled from Tomato n\' Pine\'s "Wanna Dance!" \n\nPlease look forward to the upcoming maps!\n\nDM any feedback on Discord\nETAN#8341',uploader:{id:4235140,name:"etan",uniqueSet:!0,hash:"5cff0b7798cc5a672c855775",avatar:"https://cdn.beatsaver.com/avatar/136373107559497728.png",type:"DISCORD"},metadata:{bpm:120,duration:189,songName:"Disco Lady",songSubName:"",songAuthorName:"Nanidato",levelAuthorName:"ETAN"},stats:{plays:0,downloads:4750,upvotes:1097,downvotes:12,score:.9299},uploaded:"2020-08-11T17:46:48.109Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"601f29bdee0f10a29f1ad1520bd296930c7ad3d4",key:"d410",state:"Published",createdAt:"2020-08-11T17:46:48.109Z",sageScore:6,diffs:[{njs:10,offset:1,notes:191,bombs:0,obstacles:1,nps:1.051,length:363.5,characteristic:"Standard",difficulty:"Easy",events:7333,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:181.75,paritySummary:{errors:8,warns:6,resets:0}},{njs:10,offset:1,notes:321,bombs:0,obstacles:1,nps:1.733,length:370.5,characteristic:"Standard",difficulty:"Normal",events:7333,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:185.25,paritySummary:{errors:2,warns:0,resets:0}},{njs:12,offset:.3,notes:494,bombs:0,obstacles:1,nps:2.667,length:370.5,characteristic:"Standard",difficulty:"Hard",events:7333,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:185.25,paritySummary:{errors:0,warns:0,resets:0}},{njs:14,offset:0,notes:661,bombs:0,obstacles:1,nps:3.568,length:370.5,characteristic:"Standard",difficulty:"Expert",events:7333,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:185.25,paritySummary:{errors:0,warns:0,resets:0}},{njs:17,offset:-.5,notes:924,bombs:0,obstacles:1,nps:4.988,length:370.5,characteristic:"Standard",difficulty:"ExpertPlus",events:7333,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:185.25,paritySummary:{errors:0,warns:0,resets:0}}],downloadURL:"https://cdn.beatsaver.com/601f29bdee0f10a29f1ad1520bd296930c7ad3d4.zip",coverURL:"https://cdn.beatsaver.com/601f29bdee0f10a29f1ad1520bd296930c7ad3d4.jpg",previewURL:"https://cdn.beatsaver.com/601f29bdee0f10a29f1ad1520bd296930c7ad3d4.mp3"}],createdAt:"2020-08-11T17:46:48.109Z",updatedAt:"2020-08-11T17:46:48.109Z",lastPublishedAt:"2020-08-11T17:46:48.109Z"},{id:"130e6",name:"Geoxor - Faerie [wall map]",description:"Wall map collab with Reddek lets go!!\nThis turned out so much better than I thought it would, I hope you enjoy it as much as I do\n\nMap preview: https://youtu.be/uOdpWjTdGCU \n\nFeedback welcome at shan_man#7777 and Reddek#5864",uploader:{id:75261,name:"shan_man",uniqueSet:!0,hash:"5ec5aaa616c9680006500e0a",avatar:"https://cdn.beatsaver.com/avatar/345431512658739200.png",type:"DISCORD"},metadata:{bpm:150,duration:244,songName:"Faerie",songSubName:"",songAuthorName:"Geoxor",levelAuthorName:"Reddek & Shan_Man"},stats:{plays:0,downloads:2988,upvotes:1092,downvotes:12,score:.9298},uploaded:"2021-01-23T05:09:19.779Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"57c96c82897a73c495758fa494875dce6bdab869",key:"130e6",state:"Published",createdAt:"2021-01-23T05:09:19.779Z",sageScore:5,diffs:[{njs:20,offset:-.5,notes:1269,bombs:42,obstacles:0,nps:5.513,length:575.5,characteristic:"Standard",difficulty:"Expert",events:9327,chroma:!0,me:!1,ne:!1,cinema:!1,seconds:230.2,paritySummary:{errors:0,warns:0,resets:15}},{njs:20,offset:-.5,notes:1650,bombs:42,obstacles:3239,nps:7.118,length:579.5,characteristic:"Standard",difficulty:"ExpertPlus",events:9327,chroma:!0,me:!1,ne:!0,cinema:!1,seconds:231.8,paritySummary:{errors:37,warns:1,resets:15}}],downloadURL:"https://cdn.beatsaver.com/57c96c82897a73c495758fa494875dce6bdab869.zip",coverURL:"https://cdn.beatsaver.com/57c96c82897a73c495758fa494875dce6bdab869.jpg",previewURL:"https://cdn.beatsaver.com/57c96c82897a73c495758fa494875dce6bdab869.mp3"}],createdAt:"2021-01-23T05:09:19.779Z",updatedAt:"2021-01-23T05:09:19.779Z",lastPublishedAt:"2021-01-23T05:09:19.779Z"},{id:"4a36",name:"[Anniversary] Backbone (ft. Nevve) - Droeloe [Fafurion & Skyler Wallace]",description:"Part of the Anniversary Song Pack",uploader:{id:37070,name:"anniversaryteam",uniqueSet:!0,hash:"5cff0b7798cc5a672c8565a3",avatar:"https://www.gravatar.com/avatar/5cff0b7798cc5a672c8565a3?d=retro",type:"SIMPLE"},metadata:{bpm:151,duration:171,songName:"Backbone",songSubName:"Droeloe",songAuthorName:"Fafurion & Skyler Wallace",levelAuthorName:"AnniversaryTeam"},stats:{plays:0,downloads:3767,upvotes:2308,downvotes:58,score:.9296},uploaded:"2019-05-03T14:08:11Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"376abe290620e443e9451366accb30e5095edbce",key:"4a36",state:"Published",createdAt:"2019-05-03T14:08:11Z",sageScore:7,diffs:[{njs:10,offset:0,notes:190,bombs:0,obstacles:4,nps:1.248,length:383,characteristic:"Standard",difficulty:"Easy",events:909,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:152.185,paritySummary:{errors:36,warns:31,resets:0}},{njs:12,offset:0,notes:265,bombs:0,obstacles:7,nps:1.746,length:382,characteristic:"Standard",difficulty:"Normal",events:909,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:151.788,paritySummary:{errors:43,warns:49,resets:0}},{njs:12,offset:0,notes:417,bombs:0,obstacles:12,nps:2.747,length:382,characteristic:"Standard",difficulty:"Hard",events:909,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:151.788,paritySummary:{errors:65,warns:40,resets:0}},{njs:12,offset:1,notes:552,bombs:0,obstacles:1,nps:3.632,length:382.5,characteristic:"Standard",difficulty:"Expert",events:909,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:151.987,paritySummary:{errors:36,warns:42,resets:0}},{njs:14,offset:1,notes:592,bombs:0,obstacles:3,nps:3.895,length:382.5,characteristic:"Standard",difficulty:"ExpertPlus",events:909,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:151.987,paritySummary:{errors:45,warns:59,resets:0}}],downloadURL:"https://cdn.beatsaver.com/376abe290620e443e9451366accb30e5095edbce.zip",coverURL:"https://cdn.beatsaver.com/376abe290620e443e9451366accb30e5095edbce.jpg",previewURL:"https://cdn.beatsaver.com/376abe290620e443e9451366accb30e5095edbce.mp3"}],createdAt:"2019-05-03T14:08:11Z",updatedAt:"2019-05-03T14:08:11Z",lastPublishedAt:"2019-05-03T14:08:11Z"},{id:"75ba",name:"Savior - Rise Against",description:'"Savior" is punk rock song by American rock band Rise Against, featured on their fifth studio album Appeal to Reason (2008). In contrast to the social and political topics normally discussed in Rise Against songs, "Savior" is about forgiveness and broken relationships.',uploader:{id:58338,name:"Joetastic",uniqueSet:!0,hash:"5cff0b7498cc5a672c85050e",avatar:"https://cdn.beatsaver.com/avatar/227767566402191360.png",type:"DISCORD"},metadata:{bpm:169,duration:244,songName:"Savior",songSubName:"",songAuthorName:"Rise Against",levelAuthorName:"Joetastic"},stats:{plays:0,downloads:3854,upvotes:1458,downvotes:25,score:.9295},uploaded:"2019-12-11T15:27:50.619Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"20527803675e3a3d7721c0b8d05a1439a02a580d",key:"75ba",state:"Published",createdAt:"2019-12-11T15:27:50.619Z",sageScore:5,diffs:[{njs:15,offset:0,notes:925,bombs:30,obstacles:6,nps:3.912,length:664.996,characteristic:"Standard",difficulty:"Expert",events:3686,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:236.093,paritySummary:{errors:20,warns:13,resets:0}}],downloadURL:"https://cdn.beatsaver.com/20527803675e3a3d7721c0b8d05a1439a02a580d.zip",coverURL:"https://cdn.beatsaver.com/20527803675e3a3d7721c0b8d05a1439a02a580d.jpg",previewURL:"https://cdn.beatsaver.com/20527803675e3a3d7721c0b8d05a1439a02a580d.mp3"}],createdAt:"2019-12-11T15:27:50.619Z",updatedAt:"2019-12-11T15:27:50.619Z",lastPublishedAt:"2019-12-11T15:27:50.619Z"},{id:"affa",name:"Zomboy - Endgame [NE/CHROMA]",description:"Can you survive?\r\n\r\nPreview: https://youtu.be/t4bk8ym3fIQ",uploader:{id:26361,name:"spookyghost",uniqueSet:!0,hash:"5cff0b7798cc5a672c8561a5",avatar:"https://www.gravatar.com/avatar/5cff0b7798cc5a672c8561a5?d=retro",type:"SIMPLE"},metadata:{bpm:200,duration:310,songName:"End Game",songSubName:"Rott n' Roll",songAuthorName:"Zomboy",levelAuthorName:"Spooky Ghost & Exce"},stats:{plays:0,downloads:2617,upvotes:2099,downvotes:50,score:.9294},uploaded:"2020-06-08T17:04:09.275Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"c28ffc53acd2c89329b5a7ff3d57a2b32bca416e",key:"affa",state:"Published",createdAt:"2020-06-08T17:04:09.275Z",sageScore:4,diffs:[{njs:22,offset:0,notes:1493,bombs:5376,obstacles:5e4,nps:5.068,length:982,characteristic:"Standard",difficulty:"ExpertPlus",events:12193,chroma:!0,me:!1,ne:!0,cinema:!1,seconds:294.6,paritySummary:{errors:0,warns:0,resets:0}}],downloadURL:"https://cdn.beatsaver.com/c28ffc53acd2c89329b5a7ff3d57a2b32bca416e.zip",coverURL:"https://cdn.beatsaver.com/c28ffc53acd2c89329b5a7ff3d57a2b32bca416e.jpg",previewURL:"https://cdn.beatsaver.com/c28ffc53acd2c89329b5a7ff3d57a2b32bca416e.mp3"}],createdAt:"2020-06-08T17:04:09.275Z",updatedAt:"2020-06-08T17:04:09.275Z",lastPublishedAt:"2020-06-08T17:04:09.275Z"},{id:"475",name:"Ride - Twenty One Pilots",description:"Expert and Normal Charts\nLighting Events\n\nhttps://twitter.com/TheDownyCat\nhttps://www.twitch.tv/downycat\nhttps://streamlabs.com/downycat/tip",uploader:{id:4285982,name:"downycat",uniqueSet:!0,hash:"5cff0b7398cc5a672c84ede5",avatar:"https://cdn.beatsaver.com/avatar/173538829888782336.png",type:"DISCORD"},metadata:{bpm:150,duration:213,songName:"Ride",songSubName:"Twenty One Pilots",songAuthorName:"DownyCat",levelAuthorName:"downycat"},stats:{plays:0,downloads:5957,upvotes:2990,downvotes:88,score:.9294},uploaded:"2018-06-09T11:24:50Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"05c4b1fc955756d2672ce322417ad2fadb416af6",key:"475",state:"Published",createdAt:"2018-06-09T11:24:50Z",sageScore:4,diffs:[{njs:10,offset:0,notes:377,bombs:0,obstacles:32,nps:1.844,length:511,characteristic:"Standard",difficulty:"Normal",events:859,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:204.4,paritySummary:{errors:109,warns:26,resets:0}},{njs:10,offset:0,notes:674,bombs:0,obstacles:32,nps:3.297,length:511,characteristic:"Standard",difficulty:"Expert",events:859,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:204.4,paritySummary:{errors:96,warns:102,resets:0}}],downloadURL:"https://cdn.beatsaver.com/05c4b1fc955756d2672ce322417ad2fadb416af6.zip",coverURL:"https://cdn.beatsaver.com/05c4b1fc955756d2672ce322417ad2fadb416af6.jpg",previewURL:"https://cdn.beatsaver.com/05c4b1fc955756d2672ce322417ad2fadb416af6.mp3"}],createdAt:"2018-06-09T11:24:50Z",updatedAt:"2018-06-09T11:24:50Z",lastPublishedAt:"2018-06-09T11:24:50Z"},{id:"5725",name:"Livin' La Vida Loca - Ricky Martin",description:"\"Livin' la Vida Loca\" (Livin' A Crazy Life) is the number-one hit song performed by Ricky Martin. It was released on March 23, 1999, from Martin's self-titled debut English-language album.\n\nI actually heard this song first from Eddie Murphy and Antonio Banderas at the end of Shrek 2 lol. Gotta say, its pretty catchy.\n\nEDIT: Fixed one mismapped note on chorus section and added two more notes at the very start of the song",uploader:{id:58338,name:"Joetastic",uniqueSet:!0,hash:"5cff0b7498cc5a672c85050e",avatar:"https://cdn.beatsaver.com/avatar/227767566402191360.png",type:"DISCORD"},metadata:{bpm:178,duration:242,songName:"Livin' La Vida Loca",songSubName:"",songAuthorName:"Ricky Martin",levelAuthorName:"Joetastic"},stats:{plays:0,downloads:7458,upvotes:2396,downvotes:63,score:.9292},uploaded:"2019-07-15T07:01:36.333Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"13d4f57a62f8725b39e607914637625e1edaf58d",key:"5725",state:"Published",createdAt:"2019-07-15T07:01:36.333Z",sageScore:6,diffs:[{njs:14,offset:0,notes:932,bombs:0,obstacles:20,nps:3.908,length:707.5,characteristic:"Standard",difficulty:"Expert",events:2683,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:238.483,paritySummary:{errors:87,warns:58,resets:0}}],downloadURL:"https://cdn.beatsaver.com/13d4f57a62f8725b39e607914637625e1edaf58d.zip",coverURL:"https://cdn.beatsaver.com/13d4f57a62f8725b39e607914637625e1edaf58d.jpg",previewURL:"https://cdn.beatsaver.com/13d4f57a62f8725b39e607914637625e1edaf58d.mp3"}],createdAt:"2019-07-15T07:01:36.333Z",updatedAt:"2019-07-15T07:01:36.333Z",lastPublishedAt:"2019-07-15T07:01:36.333Z"},{id:"5efe",name:"Welcome to the Club - Nightcore (Manian)",description:"Been a while since I released, but I'm back with a brand new map! Welcome to the club everyone! We've got it goin on, til the break of dawn, so put the record on!\n\nBPM: 182.39\nNPS: N - 2.46 ; H - 2.91 ; Ex - 4.03 ; Ex+ - 4.51\nNotes: N - 396 ; H - 468 ; Ex - 648 ; Ex+ - 725\nWalls: N - 131 ; H - 48 ; Ex - 27 ; Ex+ - 31\nBombs: N - 24 ; H - 0 ; Ex - 0 ; Ex+ - 0\n\nThanks to Redmagi, Kival Evan, helencarnate, and redhq for testing, and to Skeelie and Ryger (RaynArch) for helping with timing!",uploader:{id:4285188,name:"fruhead",uniqueSet:!0,hash:"5cff0b7598cc5a672c852683",avatar:"https://cdn.beatsaver.com/avatar/174000100413145090.png",type:"DISCORD"},metadata:{bpm:182.39,duration:161,songName:"Welcome to the Club",songSubName:"",songAuthorName:"Nightcore",levelAuthorName:"fruhead"},stats:{plays:0,downloads:3613,upvotes:2226,downvotes:56,score:.9291},uploaded:"2019-08-25T06:45:04.972Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"f42e4fb7ea9a439bdf295ee1cf4459e52d15b520",key:"5efe",state:"Published",createdAt:"2019-08-25T06:45:04.972Z",sageScore:4,diffs:[{njs:12,offset:0,notes:396,bombs:24,obstacles:131,nps:2.556,length:471,characteristic:"Standard",difficulty:"Normal",events:5134,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:154.943,paritySummary:{errors:42,warns:4,resets:4}},{njs:14,offset:.5,notes:468,bombs:0,obstacles:48,nps:3.018,length:471.375,characteristic:"Standard",difficulty:"Hard",events:5134,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:155.066,paritySummary:{errors:14,warns:1,resets:0}},{njs:17,offset:.5,notes:648,bombs:0,obstacles:27,nps:4.179,length:471.375,characteristic:"Standard",difficulty:"Expert",events:5134,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:155.066,paritySummary:{errors:18,warns:2,resets:0}},{njs:18,offset:.5,notes:725,bombs:0,obstacles:31,nps:4.675,length:471.375,characteristic:"Standard",difficulty:"ExpertPlus",events:5134,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:155.066,paritySummary:{errors:27,warns:3,resets:0}}],downloadURL:"https://cdn.beatsaver.com/f42e4fb7ea9a439bdf295ee1cf4459e52d15b520.zip",coverURL:"https://cdn.beatsaver.com/f42e4fb7ea9a439bdf295ee1cf4459e52d15b520.jpg",previewURL:"https://cdn.beatsaver.com/f42e4fb7ea9a439bdf295ee1cf4459e52d15b520.mp3"}],createdAt:"2019-08-25T06:45:04.972Z",updatedAt:"2019-08-25T06:45:04.972Z",lastPublishedAt:"2019-08-25T06:45:04.972Z"},{id:"58b7",name:"The Twist - Chubby Checker",description:"Do the Twist!\n\nThere's a twist to this map ;) it has zero down slash notes (I always wanted to try making a map with no down slashes and I think I found the perfect song to try that)",uploader:{id:58338,name:"Joetastic",uniqueSet:!0,hash:"5cff0b7498cc5a672c85050e",avatar:"https://cdn.beatsaver.com/avatar/227767566402191360.png",type:"DISCORD"},metadata:{bpm:155,duration:158,songName:"The Twist",songSubName:"",songAuthorName:"Chubby Checker",levelAuthorName:"Joetastic"},stats:{plays:0,downloads:2345,upvotes:998,downvotes:10,score:.929},uploaded:"2019-07-24T18:00:19.429Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"1c2af7c45bb55bfb19401ac619bded30c4cf01c6",key:"58b7",state:"Published",createdAt:"2019-07-24T18:00:19.429Z",sageScore:6,diffs:[{njs:14,offset:0,notes:591,bombs:0,obstacles:4,nps:3.834,length:398.188,characteristic:"Standard",difficulty:"Expert",events:2280,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:154.137,paritySummary:{errors:15,warns:93,resets:0}}],downloadURL:"https://cdn.beatsaver.com/1c2af7c45bb55bfb19401ac619bded30c4cf01c6.zip",coverURL:"https://cdn.beatsaver.com/1c2af7c45bb55bfb19401ac619bded30c4cf01c6.jpg",previewURL:"https://cdn.beatsaver.com/1c2af7c45bb55bfb19401ac619bded30c4cf01c6.mp3"}],createdAt:"2019-07-24T18:00:19.429Z",updatedAt:"2019-07-24T18:00:19.429Z",lastPublishedAt:"2019-07-24T18:00:19.429Z"},{id:"11e9c",name:"Tsuki No Waltz (Standard and FeetSaber)",description:"*****Attention!!*****\nThis map will take SO LONG to finish loading, since it has 2 standard and 3 FeetSaber difficulties which are all wallmaps... Please be patient.\n読み込みがものすごく長いです。2刀譜面2つ、足譜面3つ、すべて壁譜面なので…。\n*********************\n\nRequirements :\nNoodle Extensions\nChroma\nFeet Saber (NalulunaModifier)\n\nBig thanks to Rinka Michibiki for making standard difficulties.\n2刀譜面を提供していただいた導祈りんか様に、心からの感謝を。\n\nFeetmap and wall: henomohesan @henomohesan\nStandard difficulty: Rinka Michibiki @rinka_michibiki\n\nDemo :\n(Standard) https://youtu.be/4Q_PJ7tg3LA\n(Feet Saber) https://youtu.be/PngIJAleFTQ\n\nYou can download NalulunaModifier from official page :\nhttps://youtu.be/QtLNweiiQPU\n\nSpecial Thanks:\nMapping Club JP Discord by kamy @kamy_0811\nChromapper JP manual by 姚明 @gensouyou_39\nBeatwall JP manual by Kamy @kamy_0811 and FaZPi @FaZ_Pi",uploader:{id:4285472,name:"henomohesan",uniqueSet:!0,hash:"5ece0766d87e5800060a4635",avatar:"https://cdn.beatsaver.com/avatar/483262661245796352.png",type:"DISCORD"},metadata:{bpm:173,duration:183,songName:"Tsuki No Waltz (Standard and FeetSaber)",songSubName:"",songAuthorName:"Mio Isayama",levelAuthorName:"henomohesan"},stats:{plays:0,downloads:2241,upvotes:723,downvotes:2,score:.9288},uploaded:"2020-12-22T07:56:06.804Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"c967a5862a8602ebacebe44b6ac5c2422c3e90bb",key:"11e9c",state:"Published",createdAt:"2020-12-22T07:56:06.804Z",sageScore:4,diffs:[{njs:10,offset:.7,notes:218,bombs:0,obstacles:13839,nps:1.318,length:477,characteristic:"Standard",difficulty:"Normal",events:6,chroma:!0,me:!1,ne:!0,cinema:!1,seconds:165.434,paritySummary:{errors:6,warns:0,resets:0}},{njs:11,offset:-.5,notes:398,bombs:0,obstacles:13839,nps:2.406,length:477,characteristic:"Standard",difficulty:"Hard",events:6,chroma:!0,me:!1,ne:!0,cinema:!1,seconds:165.434,paritySummary:{errors:3,warns:7,resets:0}},{njs:8,offset:0,notes:206,bombs:0,obstacles:13859,nps:1.245,length:477,characteristic:"NoArrows",difficulty:"Easy",events:6,chroma:!0,me:!1,ne:!0,cinema:!1,seconds:165.434,paritySummary:{errors:0,warns:0,resets:0}},{njs:10,offset:0,notes:333,bombs:0,obstacles:13839,nps:2.013,length:477,characteristic:"NoArrows",difficulty:"Normal",events:6,chroma:!0,me:!1,ne:!0,cinema:!1,seconds:165.434,paritySummary:{errors:0,warns:0,resets:0}},{njs:10,offset:0,notes:408,bombs:0,obstacles:13839,nps:2.466,length:477,characteristic:"NoArrows",difficulty:"Expert",events:6,chroma:!0,me:!1,ne:!0,cinema:!1,seconds:165.434,paritySummary:{errors:0,warns:0,resets:0}}],downloadURL:"https://cdn.beatsaver.com/c967a5862a8602ebacebe44b6ac5c2422c3e90bb.zip",coverURL:"https://cdn.beatsaver.com/c967a5862a8602ebacebe44b6ac5c2422c3e90bb.jpg",previewURL:"https://cdn.beatsaver.com/c967a5862a8602ebacebe44b6ac5c2422c3e90bb.mp3"}],createdAt:"2020-12-22T07:56:06.804Z",updatedAt:"2020-12-22T07:56:06.804Z",lastPublishedAt:"2020-12-22T07:56:06.804Z"},{id:"44f6",name:"Blumenkranz - Cyua & Hiroyuki Sawano [Kill la Kill OST]",description:"Smol fix in Exp.\r\n\r\nExp+ Gameplay: https://youtu.be/lAi_xIWoQsc\r\n\r\nVocals by Cyua.\r\nMusic by Hiroyuki Sawano.\r\nLyrics by Rie Sawano.\r\nCheck out Kill la Kill, it's awesome! And has more awesome music!\r\nhttps://myanimelist.net/anime/18679/Kill_la_Kill\r\n\r\nCover from the Kill la Kill OST.",uploader:{id:4286005,name:"mandynasty",uniqueSet:!0,hash:"5cff0b7398cc5a672c84ffaa",avatar:"https://cdn.beatsaver.com/avatar/307589087030673408.png",type:"DISCORD"},metadata:{bpm:160,duration:259,songName:"Blumenkranz",songSubName:"Cyua & Hiroyuki Sawano",songAuthorName:"ManDynasty",levelAuthorName:"ManDynasty"},stats:{plays:0,downloads:2635,upvotes:1171,downvotes:16,score:.9288},uploaded:"2019-04-11T19:30:09Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"01f7b442e2f206d1611fe45e297c216fe07da78e",key:"44f6",state:"Published",createdAt:"2019-04-11T19:30:09Z",sageScore:4,diffs:[{njs:10,offset:0,notes:462,bombs:52,obstacles:94,nps:1.839,length:670,characteristic:"Standard",difficulty:"Normal",events:4169,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:251.25,paritySummary:{errors:23,warns:15,resets:1}},{njs:14,offset:1,notes:633,bombs:101,obstacles:89,nps:2.519,length:670,characteristic:"Standard",difficulty:"Hard",events:4169,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:251.25,paritySummary:{errors:44,warns:53,resets:1}},{njs:15,offset:1,notes:947,bombs:66,obstacles:77,nps:3.764,length:671,characteristic:"Standard",difficulty:"Expert",events:4169,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:251.625,paritySummary:{errors:85,warns:116,resets:2}},{njs:16,offset:0,notes:1054,bombs:66,obstacles:83,nps:4.189,length:671,characteristic:"Standard",difficulty:"ExpertPlus",events:4169,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:251.625,paritySummary:{errors:80,warns:108,resets:2}}],downloadURL:"https://cdn.beatsaver.com/01f7b442e2f206d1611fe45e297c216fe07da78e.zip",coverURL:"https://cdn.beatsaver.com/01f7b442e2f206d1611fe45e297c216fe07da78e.jpg",previewURL:"https://cdn.beatsaver.com/01f7b442e2f206d1611fe45e297c216fe07da78e.mp3"}],createdAt:"2019-04-11T19:30:09Z",updatedAt:"2019-04-11T19:30:09Z",lastPublishedAt:"2019-04-11T19:30:09Z"},{id:"4377",name:"The Greatest - Sia",description:"YouTube Preview: https://youtu.be/huUMotlFpig",uploader:{id:30311,name:"bennydabeast",uniqueSet:!0,hash:"5cff0b7298cc5a672c84e98d",avatar:"https://cdn.beatsaver.com/avatar/30311.jpg",type:"SIMPLE"},metadata:{bpm:192,duration:191,songName:"The Greatest (ft. Kendrick Lamar)",songSubName:"Sia",songAuthorName:"BennyDaBeast",levelAuthorName:"bennydabeast"},stats:{plays:0,downloads:6436,upvotes:2325,downvotes:61,score:.9288},uploaded:"2019-04-04T21:20:03Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"58cd8ddf99600d967bca61285e9e0c429138009d",key:"4377",state:"Published",createdAt:"2019-04-04T21:20:03Z",sageScore:6,diffs:[{njs:12,offset:0,notes:822,bombs:16,obstacles:20,nps:4.355,length:604,characteristic:"Standard",difficulty:"ExpertPlus",events:3165,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:188.75,paritySummary:{errors:91,warns:108,resets:0}}],downloadURL:"https://cdn.beatsaver.com/58cd8ddf99600d967bca61285e9e0c429138009d.zip",coverURL:"https://cdn.beatsaver.com/58cd8ddf99600d967bca61285e9e0c429138009d.jpg",previewURL:"https://cdn.beatsaver.com/58cd8ddf99600d967bca61285e9e0c429138009d.mp3"}],createdAt:"2019-04-04T21:20:03Z",updatedAt:"2019-04-04T21:20:03Z",lastPublishedAt:"2019-04-04T21:20:03Z"},{id:"110ac",name:"Madeon - The Prince",description:'*CHROMA RECOMMENDED*\n\nThis map was originally going to have autolights. Imagine.\n\nDg: "When I began lighting this map, I did it with the intention of copying the colors and vibe of the official visualizer by Madeon, with my own twists to bring it up to Beat Saber level. The amount of time and effort that went into literally lighting thermal cam... unreal."\n\nYou can check out the visualizer here:https://www.youtube.com/watch?v=AOhFzDN3eMI\n\nBearly#5259\nDGRJ4Life#6510',uploader:{id:2381,name:"bearly",uniqueSet:!0,hash:"5ea9efbf16c968000636dba4",avatar:"https://www.gravatar.com/avatar/5ea9efbf16c968000636dba4?d=retro",type:"SIMPLE"},metadata:{bpm:95,duration:223,songName:"The Prince",songSubName:"",songAuthorName:"Madeon",levelAuthorName:"Bearly & dgrj4life"},stats:{plays:0,downloads:8424,upvotes:1707,downvotes:36,score:.9287},uploaded:"2020-11-16T23:34:00.851Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"cf3243d6fc63c77a3b864414314ca4fb36f69e77",key:"110ac",state:"Published",createdAt:"2020-11-16T23:34:00.851Z",sageScore:5,diffs:[{njs:17,offset:.15,notes:917,bombs:8,obstacles:30,nps:4.27,length:340,characteristic:"Standard",difficulty:"Expert",events:33893,chroma:!0,me:!1,ne:!1,cinema:!1,seconds:214.737,paritySummary:{errors:0,warns:0,resets:3}},{njs:18.5,offset:-.2,notes:990,bombs:3,obstacles:21,nps:4.61,length:340,characteristic:"Standard",difficulty:"ExpertPlus",events:33893,chroma:!0,me:!1,ne:!1,cinema:!1,seconds:214.737,paritySummary:{errors:0,warns:0,resets:1}},{njs:16,offset:0,notes:0,bombs:0,obstacles:0,nps:0,length:0,characteristic:"Lightshow",difficulty:"Easy",events:33893,chroma:!0,me:!1,ne:!1,cinema:!1,seconds:0,paritySummary:{errors:0,warns:0,resets:0}}],downloadURL:"https://cdn.beatsaver.com/cf3243d6fc63c77a3b864414314ca4fb36f69e77.zip",coverURL:"https://cdn.beatsaver.com/cf3243d6fc63c77a3b864414314ca4fb36f69e77.jpg",previewURL:"https://cdn.beatsaver.com/cf3243d6fc63c77a3b864414314ca4fb36f69e77.mp3"}],createdAt:"2020-11-16T23:34:00.851Z",updatedAt:"2020-11-16T23:34:00.851Z",lastPublishedAt:"2020-11-16T23:34:00.851Z"},{id:"b18a",name:"[Bloq Busters Vol. 4] Eric Johnson - Cliffs of Dover",description:"Thanks to SkylerWallace for warping the audio to make this actually mappable! I loved this song from Guitar Hero, and wanted it to have a spot here in Beat Saber. Enjoy!",uploader:{id:4284569,name:"checkthepan",uniqueSet:!0,hash:"5cff0b7398cc5a672c84f3d5",avatar:"https://cdn.beatsaver.com/avatar/184355369189900290.png",type:"DISCORD"},metadata:{bpm:95,duration:254,songName:"Cliffs of Dover",songSubName:"",songAuthorName:"Eric Johnson",levelAuthorName:"Checkthepan"},stats:{plays:0,downloads:5733,upvotes:1467,downvotes:27,score:.9286},uploaded:"2020-06-12T22:01:10.949Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"9f9f5c00b449549b1c276209148551c38abf495a",key:"b18a",state:"Published",createdAt:"2020-06-12T22:01:10.949Z",sageScore:6,diffs:[{njs:14,offset:-.25,notes:835,bombs:0,obstacles:2,nps:3.389,length:390.063,characteristic:"Standard",difficulty:"Hard",events:8195,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:246.355,paritySummary:{errors:9,warns:7,resets:0}},{njs:16,offset:.25,notes:1327,bombs:89,obstacles:20,nps:5.387,length:390.063,characteristic:"Standard",difficulty:"Expert",events:8195,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:246.355,paritySummary:{errors:0,warns:0,resets:0}},{njs:20,offset:0,notes:1417,bombs:178,obstacles:10,nps:5.752,length:390.063,characteristic:"Standard",difficulty:"ExpertPlus",events:8195,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:246.355,paritySummary:{errors:3,warns:1,resets:7}}],downloadURL:"https://cdn.beatsaver.com/9f9f5c00b449549b1c276209148551c38abf495a.zip",coverURL:"https://cdn.beatsaver.com/9f9f5c00b449549b1c276209148551c38abf495a.jpg",previewURL:"https://cdn.beatsaver.com/9f9f5c00b449549b1c276209148551c38abf495a.mp3"}],createdAt:"2020-06-12T22:01:10.949Z",updatedAt:"2020-06-12T22:01:10.949Z",lastPublishedAt:"2020-06-12T22:01:10.949Z"},{id:"21b8",name:"Senpai Notice Me",description:"I need therapy.\r\nFinally getting it ranked! Let's go!",uploader:{id:28684,name:"jackodej",uniqueSet:!0,hash:"5cff0b7498cc5a672c850120",avatar:"https://www.gravatar.com/avatar/5cff0b7498cc5a672c850120?d=retro",type:"SIMPLE"},metadata:{bpm:155,duration:278,songName:"Senpai Notice Me",songSubName:"Camellia ft. Nanahira",songAuthorName:"JackoDEJ",levelAuthorName:"JackoDEJ"},stats:{plays:0,downloads:5405,upvotes:5203,downvotes:197,score:.9286},uploaded:"2018-11-23T14:11:31Z",automapper:!1,ranked:!0,qualified:!1,versions:[{hash:"e3ef6cab44ff2222c09b399e8e5a62a095233621",key:"21b8",state:"Published",createdAt:"2018-11-23T14:11:31Z",sageScore:6,diffs:[{njs:16,offset:0,notes:1730,bombs:0,obstacles:5,nps:6.357,length:703,characteristic:"Standard",difficulty:"ExpertPlus",events:1758,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:272.129,paritySummary:{errors:58,warns:61,resets:0},stars:5.91}],downloadURL:"https://cdn.beatsaver.com/e3ef6cab44ff2222c09b399e8e5a62a095233621.zip",coverURL:"https://cdn.beatsaver.com/e3ef6cab44ff2222c09b399e8e5a62a095233621.jpg",previewURL:"https://cdn.beatsaver.com/e3ef6cab44ff2222c09b399e8e5a62a095233621.mp3"}],createdAt:"2018-11-23T14:11:31Z",updatedAt:"2018-11-23T14:11:31Z",lastPublishedAt:"2018-11-23T14:11:31Z"},{id:"42",name:"Icarus - Madeon - HARD",description:"Icarus by Madeon,\r\n\r\nMostly an experiment in the 3D editor events... editor...\r\n\r\nFully evented, 3:33 length\r\n\r\nHard difficulty only.\r\n\r\nYoutube playthrough: https://www.youtube.com/watch?v=VvEkluZHkY4",uploader:{id:53534,name:"gompasta",uniqueSet:!1,hash:"5cff0b7298cc5a672c84e8de",avatar:"https://www.gravatar.com/avatar/5cff0b7298cc5a672c84e8de?d=retro",type:"SIMPLE"},metadata:{bpm:126,duration:213,songName:"Icarus",songSubName:"",songAuthorName:"Madeon",levelAuthorName:"gompasta"},stats:{plays:0,downloads:6994,upvotes:3007,downvotes:92,score:.9285},uploaded:"2018-05-12T00:35:40Z",automapper:!1,ranked:!0,qualified:!1,versions:[{hash:"be1a39b41f2089cad9aa8d775f55e8707447b5ca",key:"42",state:"Published",createdAt:"2018-05-12T00:35:40Z",sageScore:5,diffs:[{njs:10,offset:0,notes:420,bombs:16,obstacles:6,nps:2.035,length:433.5,characteristic:"Standard",difficulty:"Hard",events:859,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:206.429,paritySummary:{errors:59,warns:63,resets:4},stars:1.56}],downloadURL:"https://cdn.beatsaver.com/be1a39b41f2089cad9aa8d775f55e8707447b5ca.zip",coverURL:"https://cdn.beatsaver.com/be1a39b41f2089cad9aa8d775f55e8707447b5ca.jpg",previewURL:"https://cdn.beatsaver.com/be1a39b41f2089cad9aa8d775f55e8707447b5ca.mp3"}],createdAt:"2018-05-12T00:35:40Z",updatedAt:"2018-05-12T00:35:40Z",lastPublishedAt:"2018-05-12T00:35:40Z"},{id:"8fc3",name:"Katy Perry - Dark Horse (feat. Juicy J) [Z-ANESaber]",description:"Yo\r\nI´m open for song requests so if you have any ideas let me know in the comments or on Discord:\r\nNiqu#9221\r\n\r\nThis song was requested by: SaberTribe\r\nHave fun!\r\n\r\nPlaythrough: https://www.youtube.com/watch?v=Qs8xfj_EQYs&feature=youtu.be\r\n\r\nSong: https://www.youtube.com/watch?v=0KSOMA3QBU0\r\n\r\nBye",uploader:{id:4284220,name:"z-anesaber",uniqueSet:!0,hash:"5dfbafac9921260006527fa4",avatar:"https://cdn.beatsaver.com/avatar/324954940885958658.png",type:"DISCORD"},metadata:{bpm:132,duration:212,songName:"Dark Horse [Z-ANESaber]",songSubName:"(feat. Juicy J)",songAuthorName:"Katy Perry",levelAuthorName:"Z-ANESaber"},stats:{plays:0,downloads:4654,upvotes:1239,downvotes:19,score:.9283},uploaded:"2020-03-13T21:40:12.962Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"e53f2a91acfca398d1770e3972861ce15f56b123",key:"8fc3",state:"Published",createdAt:"2020-03-13T21:40:12.962Z",sageScore:3,diffs:[{njs:13.3,offset:0,notes:802,bombs:12,obstacles:9,nps:3.811,length:463,characteristic:"Standard",difficulty:"Expert",events:1851,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:210.455,paritySummary:{errors:6,warns:4,resets:0}}],downloadURL:"https://cdn.beatsaver.com/e53f2a91acfca398d1770e3972861ce15f56b123.zip",coverURL:"https://cdn.beatsaver.com/e53f2a91acfca398d1770e3972861ce15f56b123.jpg",previewURL:"https://cdn.beatsaver.com/e53f2a91acfca398d1770e3972861ce15f56b123.mp3"}],createdAt:"2020-03-13T21:40:12.962Z",updatedAt:"2020-03-13T21:40:12.962Z",lastPublishedAt:"2020-03-13T21:40:12.962Z"},{id:"89be",name:"More One Night [Girl's Last Tour Ending]",description:"Sung by \nChito (CV: Inori Minase)\nYuuri (CV: Yurika Kubo)\n\nCute girls doing post-apocalyptic things\n\nI have fancy lighting on this one so make sure you got chroma or chromalite to see it! Unfortunately I couldn't get ring prop to work, I think i just mapped it wrong LOL. I learn soon enough\n\nBPM 123 | \nExpert+\nExpert\nHard\nLightshow\n\nty Qwasyx for playtesting\n\npreview: https://www.youtube.com/watch?v=bsqZWXBMQwQ\n\nDM any feedback on Discord\nETAN#8341",uploader:{id:4235140,name:"etan",uniqueSet:!0,hash:"5cff0b7798cc5a672c855775",avatar:"https://cdn.beatsaver.com/avatar/136373107559497728.png",type:"DISCORD"},metadata:{bpm:123,duration:214,songName:"More One Night",songSubName:"",songAuthorName:"Inori Minase, Yurika Kubo",levelAuthorName:"ETAN"},stats:{plays:0,downloads:2748,upvotes:1179,downvotes:17,score:.9283},uploaded:"2020-02-22T21:17:09.228Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"bf43cba8026db57a2dda154ae4fa24621cc3a232",key:"89be",state:"Published",createdAt:"2020-02-22T21:17:09.228Z",sageScore:7,diffs:[{njs:13,offset:.4,notes:583,bombs:0,obstacles:21,nps:2.786,length:429,characteristic:"Standard",difficulty:"Hard",events:16009,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:209.268,paritySummary:{errors:0,warns:0,resets:0}},{njs:15,offset:0,notes:833,bombs:0,obstacles:21,nps:3.981,length:429,characteristic:"Standard",difficulty:"Expert",events:16009,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:209.268,paritySummary:{errors:0,warns:0,resets:0}},{njs:20,offset:.5,notes:1e3,bombs:0,obstacles:21,nps:4.779,length:429,characteristic:"Standard",difficulty:"ExpertPlus",events:16009,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:209.268,paritySummary:{errors:12,warns:9,resets:0}},{njs:10,offset:0,notes:0,bombs:0,obstacles:0,nps:0,length:0,characteristic:"Lightshow",difficulty:"Easy",events:16009,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:0,paritySummary:{errors:0,warns:0,resets:0}}],downloadURL:"https://cdn.beatsaver.com/bf43cba8026db57a2dda154ae4fa24621cc3a232.zip",coverURL:"https://cdn.beatsaver.com/bf43cba8026db57a2dda154ae4fa24621cc3a232.jpg",previewURL:"https://cdn.beatsaver.com/bf43cba8026db57a2dda154ae4fa24621cc3a232.mp3"}],createdAt:"2020-02-22T21:17:09.228Z",updatedAt:"2020-02-22T21:17:09.228Z",lastPublishedAt:"2020-02-22T21:17:09.228Z"},{id:"72de",name:"GRiZ - Can't Hold Me Down",description:"Easy, normal, hard, expert (maulable), expert+\r\n\r\nThis is a remap, first had major issues. Maul players seem to like the original, so a modified version is included in the expert slot. Also now has a full spread and hand lights are replacing the trash from light map.\r\n\r\nSpecial thanks to Adeza for the original suggestion. \r\n\r\nVideo: https://www.youtube.com/watch?v=c1_ziuz5hrA",uploader:{id:4235138,name:"CyanSnow",uniqueSet:!0,hash:"5cff0b7698cc5a672c8543ac",avatar:"https://cdn.beatsaver.com/avatar/154341137694326784.png",type:"DISCORD"},metadata:{bpm:180,duration:208,songName:"Can't Hold Me Down",songSubName:"",songAuthorName:"GRiZ",levelAuthorName:"CyanSnow"},stats:{plays:0,downloads:4104,upvotes:1886,downvotes:44,score:.9283},uploaded:"2019-11-30T21:07:56.418Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"a0ebf4980fcb1f29871582dbeca8e3a8d5511f1c",key:"72de",state:"Published",createdAt:"2019-11-30T21:07:56.418Z",sageScore:7,diffs:[{njs:12,offset:.25,notes:303,bombs:0,obstacles:0,nps:1.524,length:596.5,characteristic:"Standard",difficulty:"Easy",events:11378,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:198.833,paritySummary:{errors:94,warns:26,resets:0}},{njs:12,offset:.25,notes:380,bombs:0,obstacles:0,nps:1.911,length:596.5,characteristic:"Standard",difficulty:"Normal",events:11378,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:198.833,paritySummary:{errors:49,warns:17,resets:0}},{njs:14,offset:1,notes:420,bombs:0,obstacles:20,nps:2.112,length:596.5,characteristic:"Standard",difficulty:"Hard",events:11378,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:198.833,paritySummary:{errors:12,warns:7,resets:0}},{njs:16,offset:.5,notes:749,bombs:0,obstacles:190,nps:3.767,length:596.5,characteristic:"Standard",difficulty:"Expert",events:11378,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:198.833,paritySummary:{errors:7,warns:2,resets:0}},{njs:18,offset:.25,notes:1029,bombs:139,obstacles:18,nps:5.175,length:596.5,characteristic:"Standard",difficulty:"ExpertPlus",events:11378,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:198.833,paritySummary:{errors:6,warns:0,resets:0}}],downloadURL:"https://cdn.beatsaver.com/a0ebf4980fcb1f29871582dbeca8e3a8d5511f1c.zip",coverURL:"https://cdn.beatsaver.com/a0ebf4980fcb1f29871582dbeca8e3a8d5511f1c.jpg",previewURL:"https://cdn.beatsaver.com/a0ebf4980fcb1f29871582dbeca8e3a8d5511f1c.mp3"}],createdAt:"2019-11-30T21:07:56.418Z",updatedAt:"2019-11-30T21:07:56.418Z",lastPublishedAt:"2019-11-30T21:07:56.418Z"},{id:"11de5",name:"Kaibutsu (TV Size) [Beastars Season 2 Opening] - YOASOBI",description:"Kaibutsu / 怪物 is the seventh single by Yoasobi. It is used as the opening theme song to the second season of Beastars.\n\nThis map was a special request by ScrewBedtime#5490\n\nKeep up to date on my maps: https://twitter.com/Joetastic_\nMy mapper's profile: https://bsaber.com/members/joetastic/\nContact me on discord: @Joetastic#2501",uploader:{id:58338,name:"Joetastic",uniqueSet:!0,hash:"5cff0b7498cc5a672c85050e",avatar:"https://cdn.beatsaver.com/avatar/227767566402191360.png",type:"DISCORD"},metadata:{bpm:170,duration:88,songName:"Kaibutsu (TV Size)",songSubName:"",songAuthorName:"YOASOBI",levelAuthorName:"Joetastic"},stats:{plays:0,downloads:16414,upvotes:1604,downvotes:33,score:.9281},uploaded:"2020-12-21T17:50:41.969Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"08d9a92c273f6d06baa30c5b70f182c902349578",key:"11de5",state:"Published",createdAt:"2020-12-21T17:50:41.969Z",sageScore:3,diffs:[{njs:15,offset:.5,notes:327,bombs:6,obstacles:28,nps:3.829,length:242,characteristic:"Standard",difficulty:"Hard",events:2248,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:85.412,paritySummary:{errors:7,warns:0,resets:0}},{njs:17,offset:.2,notes:426,bombs:6,obstacles:44,nps:4.988,length:242,characteristic:"Standard",difficulty:"Expert",events:2248,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:85.412,paritySummary:{errors:1,warns:0,resets:0}},{njs:19,offset:0,notes:475,bombs:6,obstacles:43,nps:5.561,length:242,characteristic:"Standard",difficulty:"ExpertPlus",events:2248,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:85.412,paritySummary:{errors:1,warns:0,resets:0}}],downloadURL:"https://cdn.beatsaver.com/08d9a92c273f6d06baa30c5b70f182c902349578.zip",coverURL:"https://cdn.beatsaver.com/08d9a92c273f6d06baa30c5b70f182c902349578.jpg",previewURL:"https://cdn.beatsaver.com/08d9a92c273f6d06baa30c5b70f182c902349578.mp3"}],createdAt:"2020-12-21T17:50:41.969Z",updatedAt:"2020-12-21T17:50:41.969Z",lastPublishedAt:"2020-12-21T17:50:41.969Z"},{id:"ae3c",name:"Fox Stevenson - Bruises",description:"I GOT.\r\nBRUISES.\r\n\r\nMade for my fiancee, and cause this song rocks enough to deserve a 360 and 90 degree map.\r\n\r\n2nd Reupload to fix a big oops in the 360 and 90 degree map ;_;",uploader:{id:4284569,name:"checkthepan",uniqueSet:!0,hash:"5cff0b7398cc5a672c84f3d5",avatar:"https://cdn.beatsaver.com/avatar/184355369189900290.png",type:"DISCORD"},metadata:{bpm:174,duration:224,songName:"Bruises",songSubName:"",songAuthorName:"Fox Stevenson",levelAuthorName:"Checkthepan"},stats:{plays:0,downloads:3027,upvotes:1258,downvotes:20,score:.9281},uploaded:"2020-06-04T12:46:11.099Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"71eff19ed6d32fd0a446e1a32303c77aa7f646f2",key:"ae3c",state:"Published",createdAt:"2020-06-04T12:46:11.099Z",sageScore:7,diffs:[{njs:10,offset:0,notes:335,bombs:0,obstacles:65,nps:1.52,length:639,characteristic:"Standard",difficulty:"Easy",events:13393,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:220.345,paritySummary:{errors:86,warns:21,resets:0}},{njs:10,offset:0,notes:446,bombs:12,obstacles:64,nps:2.024,length:639,characteristic:"Standard",difficulty:"Normal",events:13393,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:220.345,paritySummary:{errors:87,warns:1,resets:1}},{njs:12,offset:0,notes:692,bombs:12,obstacles:66,nps:3.141,length:639,characteristic:"Standard",difficulty:"Hard",events:13393,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:220.345,paritySummary:{errors:8,warns:4,resets:3}},{njs:15,offset:.5,notes:1023,bombs:18,obstacles:52,nps:4.643,length:639,characteristic:"Standard",difficulty:"Expert",events:13393,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:220.345,paritySummary:{errors:4,warns:2,resets:1}},{njs:19,offset:0,notes:1476,bombs:76,obstacles:0,nps:6.693,length:639.562,characteristic:"Standard",difficulty:"ExpertPlus",events:13394,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:220.539,paritySummary:{errors:6,warns:0,resets:15}},{njs:19,offset:.25,notes:1462,bombs:130,obstacles:70,nps:6.627,length:639.75,characteristic:"90Degree",difficulty:"ExpertPlus",events:13958,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:220.603,paritySummary:{errors:4,warns:1,resets:15}},{njs:19,offset:.25,notes:1462,bombs:130,obstacles:74,nps:6.627,length:639.75,characteristic:"360Degree",difficulty:"ExpertPlus",events:13974,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:220.603,paritySummary:{errors:4,warns:1,resets:15}}],downloadURL:"https://cdn.beatsaver.com/71eff19ed6d32fd0a446e1a32303c77aa7f646f2.zip",coverURL:"https://cdn.beatsaver.com/71eff19ed6d32fd0a446e1a32303c77aa7f646f2.jpg",previewURL:"https://cdn.beatsaver.com/71eff19ed6d32fd0a446e1a32303c77aa7f646f2.mp3"}],createdAt:"2020-06-04T12:46:11.099Z",updatedAt:"2020-06-04T12:46:11.099Z",lastPublishedAt:"2020-06-04T12:46:11.099Z"},{id:"6909",name:"Feuer Frei! - Rammstein",description:"Had fun making his one, and also made some One Saber difficulties for it since it fit pretty well. Enjoy!\n\nIncludes Standard (2 saber) Expert through Easy and One Saber Expert through Normal, and is a bit harder than normal since it's a faster song.\n\nNo preview (yet).\n\nBPM: 180.18\nDuration: 3:08\n\nStandard (2 Sabers):\nEasy, Normal, Hard and Expert difficulties:\n\nEasy:\n280 notes, 16 obstacles, 4 mines\n\nNormal:\n337 notes, 16 obstacles, 4 mines\n\nHard:\n459 notes, 15 obstacles, 4 mines\n\nExpert:\n773 notes, 16 obstacles, 2 mines\n\n\nOne Saber:\nNormal, Hard and Expert difficulties:\n\nNormal:\n216 notes, 17 obstacles, 0 mines\n\nHard:\n315 notes, 16 obstacles, 0 mines\n\nExpert:\n472 notes, 16 obstacles, 2 mines",uploader:{id:4285318,name:"kolezan",uniqueSet:!0,hash:"5cff0b7398cc5a672c84fcbb",avatar:"https://cdn.beatsaver.com/avatar/220513618763055106.png",type:"DISCORD"},metadata:{bpm:190.18,duration:188,songName:"Feuer Frei!",songSubName:"",songAuthorName:"Rammstein",levelAuthorName:"Kolezan"},stats:{plays:0,downloads:6179,upvotes:2018,downvotes:50,score:.928},uploaded:"2019-10-11T06:11:24.477Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"a14d4f258c4a8012e110b599d725be7b20a5470a",key:"6909",state:"Published",createdAt:"2019-10-11T06:11:24.477Z",sageScore:5,diffs:[{njs:10,offset:0,notes:280,bombs:4,obstacles:16,nps:1.592,length:557.313,characteristic:"Standard",difficulty:"Easy",events:2306,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:175.827,paritySummary:{errors:60,warns:13,resets:0}},{njs:12,offset:.5,notes:337,bombs:4,obstacles:16,nps:1.917,length:557.313,characteristic:"Standard",difficulty:"Normal",events:2306,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:175.827,paritySummary:{errors:23,warns:19,resets:0}},{njs:16,offset:1,notes:459,bombs:4,obstacles:15,nps:2.611,length:557.313,characteristic:"Standard",difficulty:"Hard",events:2306,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:175.827,paritySummary:{errors:29,warns:24,resets:0}},{njs:19,offset:1,notes:773,bombs:2,obstacles:16,nps:4.396,length:557.313,characteristic:"Standard",difficulty:"Expert",events:2306,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:175.827,paritySummary:{errors:31,warns:48,resets:0}},{njs:12,offset:.5,notes:216,bombs:0,obstacles:17,nps:1.228,length:557.313,characteristic:"OneSaber",difficulty:"Normal",events:2306,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:175.827,paritySummary:{errors:15,warns:34,resets:0}},{njs:16,offset:1,notes:315,bombs:0,obstacles:16,nps:1.792,length:557.313,characteristic:"OneSaber",difficulty:"Hard",events:2306,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:175.827,paritySummary:{errors:12,warns:14,resets:0}},{njs:19,offset:1,notes:472,bombs:2,obstacles:16,nps:2.684,length:557.313,characteristic:"OneSaber",difficulty:"Expert",events:2306,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:175.827,paritySummary:{errors:18,warns:14,resets:0}}],downloadURL:"https://cdn.beatsaver.com/a14d4f258c4a8012e110b599d725be7b20a5470a.zip",coverURL:"https://cdn.beatsaver.com/a14d4f258c4a8012e110b599d725be7b20a5470a.jpg",previewURL:"https://cdn.beatsaver.com/a14d4f258c4a8012e110b599d725be7b20a5470a.mp3"}],createdAt:"2019-10-11T06:11:24.477Z",updatedAt:"2019-10-11T06:11:24.477Z",lastPublishedAt:"2019-10-11T06:11:24.477Z"},{id:"42ea",name:"DEUTSCHLAND - Rammstein",description:"Expert+ and expert are fairly similar where expert has some nerfed versions of expert+ some places. NJS18 on E+ and 15 on Expert",uploader:{id:27983,name:"heisenbergirl",uniqueSet:!0,hash:"5cff0b7298cc5a672c84ec30",avatar:"https://www.gravatar.com/avatar/5cff0b7298cc5a672c84ec30?d=retro",type:"SIMPLE"},metadata:{bpm:120,duration:323,songName:"DEUTSCHLAND",songSubName:"Rammstein",songAuthorName:"Heisenberg",levelAuthorName:"heisenbergirl"},stats:{plays:0,downloads:3694,upvotes:2773,downvotes:83,score:.928},uploaded:"2019-04-02T03:59:23Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"414169f2f791443d9f6278009dd91ebe369bc9b6",key:"42ea",state:"Published",createdAt:"2019-04-02T03:59:23Z",sageScore:4,diffs:[{njs:15,offset:0,notes:915,bombs:0,obstacles:6,nps:3.091,length:592,characteristic:"Standard",difficulty:"Expert",events:2754,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:296,paritySummary:{errors:39,warns:52,resets:0}},{njs:18,offset:0,notes:1063,bombs:0,obstacles:6,nps:3.591,length:592,characteristic:"Standard",difficulty:"ExpertPlus",events:2756,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:296,paritySummary:{errors:42,warns:53,resets:0}}],downloadURL:"https://cdn.beatsaver.com/414169f2f791443d9f6278009dd91ebe369bc9b6.zip",coverURL:"https://cdn.beatsaver.com/414169f2f791443d9f6278009dd91ebe369bc9b6.jpg",previewURL:"https://cdn.beatsaver.com/414169f2f791443d9f6278009dd91ebe369bc9b6.mp3"}],createdAt:"2019-04-02T03:59:23Z",updatedAt:"2019-04-02T03:59:23Z",lastPublishedAt:"2019-04-02T03:59:23Z"},{id:"1ffd",name:"Senbonzakura (Short Ver.) by Kradness + Giga-P",description:"You like it fast? You like Senbonzakura? You want both? Then you've come to the right map! I knew I wanted to map Senbonzakura but I didn't quite like the original version, but as soon as I heard Kradness and Giga-P's version I knew I had found my own Senbonzakura.\r\n\r\nThis is one of the 22 maps that were mapped for the 100k Contest where you can win over $7,000 in prizes by just playing Beat Saber! Go to https://bsaber.com/100k-contest/ for more info.\r\n\r\nSong has been edited; custom intro and shortened from full length.\r\n\r\nPreview:\r\nhttps://youtu.be/BLTaG3z9jOY\r\n\r\nBPM: 175\r\nDuration: 2:35\r\nEasy, Normal, Hard, Expert and Expert+ difficulties.\r\n\r\nEasy: 273, 8 obstacles, 0 mines\r\nNormal: 349 notes, 33 obstacles, 0 mines\r\nHard: 524 notes, 33 obstacles, 0 mines\r\nExpert: 755 notes, 33 obstacles, 0 mines\r\nExpert+: 880 notes, 33 obstacles, 0 mines\r\n\r\nThanks to Edzo, Redmagi, AaltoPaWi and Saut for playtesting! Special thanks to Redmagi for the stream ideas!\r\n\r\nEnjoy!",uploader:{id:4285318,name:"kolezan",uniqueSet:!0,hash:"5cff0b7398cc5a672c84fcbb",avatar:"https://cdn.beatsaver.com/avatar/220513618763055106.png",type:"DISCORD"},metadata:{bpm:175,duration:156,songName:"Senbonzakura (Short Ver.)",songSubName:"Kradness + Giga-P",songAuthorName:"Kolezan",levelAuthorName:"Kolezan"},stats:{plays:0,downloads:9333,upvotes:5842,downvotes:234,score:.928},uploaded:"2018-11-12T22:10:22Z",automapper:!1,ranked:!0,qualified:!1,versions:[{hash:"eb28a79e2dbc80948d0ea09631e83557ea6b6735",key:"1ffd",state:"Published",createdAt:"2018-11-12T22:10:22Z",sageScore:7,diffs:[{njs:12,offset:0,notes:273,bombs:0,obstacles:33,nps:1.818,length:438,characteristic:"Standard",difficulty:"Easy",events:1285,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:150.171,paritySummary:{errors:57,warns:23,resets:0},stars:1.24},{njs:13,offset:0,notes:349,bombs:0,obstacles:33,nps:2.319,length:439,characteristic:"Standard",difficulty:"Normal",events:1285,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:150.514,paritySummary:{errors:61,warns:53,resets:0},stars:1.59},{njs:14,offset:0,notes:524,bombs:0,obstacles:33,nps:3.481,length:439,characteristic:"Standard",difficulty:"Hard",events:1285,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:150.514,paritySummary:{errors:70,warns:55,resets:0},stars:2.42},{njs:15,offset:0,notes:755,bombs:0,obstacles:33,nps:5.016,length:439,characteristic:"Standard",difficulty:"Expert",events:1285,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:150.514,paritySummary:{errors:121,warns:136,resets:0},stars:3.52},{njs:15,offset:0,notes:880,bombs:0,obstacles:33,nps:5.847,length:439,characteristic:"Standard",difficulty:"ExpertPlus",events:1285,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:150.514,paritySummary:{errors:108,warns:161,resets:0},stars:4.33}],downloadURL:"https://cdn.beatsaver.com/eb28a79e2dbc80948d0ea09631e83557ea6b6735.zip",coverURL:"https://cdn.beatsaver.com/eb28a79e2dbc80948d0ea09631e83557ea6b6735.jpg",previewURL:"https://cdn.beatsaver.com/eb28a79e2dbc80948d0ea09631e83557ea6b6735.mp3"}],createdAt:"2018-11-12T22:10:22Z",updatedAt:"2018-11-12T22:10:22Z",lastPublishedAt:"2018-11-12T22:10:22Z"},{id:"aa73",name:"twenty one pilots - Level of Concern",description:"'Level of Concern' is a new single released by twenty one pilots during the COVID-19 pandemic. \n\nI meant to get this finished a couple of weeks ago, but hey, better late than never! I hope you enjoy. \n\nMapped by: Pyrowarfare#1032",uploader:{id:1096,name:"pyrowarfare",uniqueSet:!0,hash:"5e99c7df3f476a0006596cdf",avatar:"https://www.gravatar.com/avatar/5e99c7df3f476a0006596cdf?d=retro",type:"SIMPLE"},metadata:{bpm:122,duration:222,songName:"Level of Concern",songSubName:"",songAuthorName:"twenty one pilots",levelAuthorName:"Pyrowarfare"},stats:{plays:0,downloads:4749,upvotes:1220,downvotes:19,score:.9279},uploaded:"2020-05-26T00:39:21.533Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"1b9278797fa6d85d0201d1a261101f8cb9ac7dde",key:"aa73",state:"Published",createdAt:"2020-05-26T00:39:21.533Z",sageScore:5,diffs:[{njs:10,offset:0,notes:233,bombs:0,obstacles:14,nps:1.062,length:446,characteristic:"Standard",difficulty:"Easy",events:2220,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:219.344,paritySummary:{errors:89,warns:9,resets:0}},{njs:10,offset:0,notes:461,bombs:0,obstacles:14,nps:2.102,length:446,characteristic:"Standard",difficulty:"Normal",events:2220,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:219.344,paritySummary:{errors:18,warns:19,resets:0}},{njs:12,offset:0,notes:663,bombs:4,obstacles:32,nps:3.023,length:446,characteristic:"Standard",difficulty:"Hard",events:2220,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:219.344,paritySummary:{errors:2,warns:0,resets:1}},{njs:14,offset:0,notes:692,bombs:4,obstacles:44,nps:3.155,length:446,characteristic:"Standard",difficulty:"Expert",events:2220,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:219.344,paritySummary:{errors:2,warns:0,resets:0}}],downloadURL:"https://cdn.beatsaver.com/1b9278797fa6d85d0201d1a261101f8cb9ac7dde.zip",coverURL:"https://cdn.beatsaver.com/1b9278797fa6d85d0201d1a261101f8cb9ac7dde.jpg",previewURL:"https://cdn.beatsaver.com/1b9278797fa6d85d0201d1a261101f8cb9ac7dde.mp3"}],createdAt:"2020-05-26T00:39:21.533Z",updatedAt:"2020-05-26T00:39:21.533Z",lastPublishedAt:"2020-05-26T00:39:21.533Z"},{id:"96fc",name:"JINGO JUNGLE [Youjo Senki Opening] - MYTH & ROID",description:"JINGO JUNGLE is the fifth single release of MYTH & ROID for their 1st Album『eYe's』and the opening song for the Youjo Senki anime. It is performed by the Japanese singer Mayu and was released on February 8th, 2017.\n\nMap was converted from my original AmaLee version as requested.\n\nEDIT: Expert Difficulty Fixed and added preview start time",uploader:{id:58338,name:"Joetastic",uniqueSet:!0,hash:"5cff0b7498cc5a672c85050e",avatar:"https://cdn.beatsaver.com/avatar/227767566402191360.png",type:"DISCORD"},metadata:{bpm:130,duration:226,songName:"JINGO JUNGLE",songSubName:"",songAuthorName:"MYTH & ROID",levelAuthorName:"Joetastic"},stats:{plays:0,downloads:9872,upvotes:1077,downvotes:14,score:.9279},uploaded:"2020-04-03T15:39:48.414Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"f4555835fccad370eda615cbeff120afe9c4ab13",key:"96fc",state:"Published",createdAt:"2020-04-03T15:39:48.414Z",sageScore:4,diffs:[{njs:13,offset:0,notes:581,bombs:104,obstacles:28,nps:2.647,length:475.5,characteristic:"Standard",difficulty:"Hard",events:5921,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:219.462,paritySummary:{errors:35,warns:15,resets:10}},{njs:15,offset:0,notes:950,bombs:78,obstacles:14,nps:4.329,length:475.5,characteristic:"Standard",difficulty:"Expert",events:5921,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:219.462,paritySummary:{errors:42,warns:48,resets:8}},{njs:17,offset:0,notes:1184,bombs:105,obstacles:17,nps:5.395,length:475.5,characteristic:"Standard",difficulty:"ExpertPlus",events:5921,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:219.462,paritySummary:{errors:32,warns:43,resets:16}}],downloadURL:"https://cdn.beatsaver.com/f4555835fccad370eda615cbeff120afe9c4ab13.zip",coverURL:"https://cdn.beatsaver.com/f4555835fccad370eda615cbeff120afe9c4ab13.jpg",previewURL:"https://cdn.beatsaver.com/f4555835fccad370eda615cbeff120afe9c4ab13.mp3"}],createdAt:"2020-04-03T15:39:48.414Z",updatedAt:"2020-04-03T15:39:48.414Z",lastPublishedAt:"2020-04-03T15:39:48.414Z"},{id:"4611",name:"BTS (feat. Halsey) - Boy With Luv",description:"I wouldn't say this was rushed but that I spent a lot of time on it in a couple of days, either way I really like the song and I think the map is pretty fun too.\r\nFeel free to join our K-Pop Beat Saber Discord https://discord.gg/c9uHGYP @SimplyMarvellous#0290 if you'd like to contact me at all\r\nhttps://youtu.be/Wfhj4fjugcg\r\n\r\n\r\n\r\nDownvote if the map is bad, not because you couldn't pass it :)",uploader:{id:4285134,name:"simplymarvellous",uniqueSet:!0,hash:"5cff0b7398cc5a672c84f7a8",avatar:"https://cdn.beatsaver.com/avatar/189618441429319680.png",type:"DISCORD"},metadata:{bpm:120,duration:232,songName:"Boy With Luv",songSubName:"BTS (ft. Halsey)",songAuthorName:"SimplyMarvellous",levelAuthorName:"simplymarvellous"},stats:{plays:0,downloads:5564,upvotes:2055,downvotes:52,score:.9279},uploaded:"2019-04-15T06:34:34Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"c0e3706463c5c9b993ba5d05c2166fb0b512e695",key:"4611",state:"Published",createdAt:"2019-04-15T06:34:34Z",sageScore:5,diffs:[{njs:12,offset:0,notes:792,bombs:0,obstacles:21,nps:3.03,length:522.833,characteristic:"Standard",difficulty:"Hard",events:1832,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:261.417,paritySummary:{errors:81,warns:38,resets:0}},{njs:15,offset:0,notes:976,bombs:0,obstacles:21,nps:3.734,length:522.833,characteristic:"Standard",difficulty:"ExpertPlus",events:1832,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:261.417,paritySummary:{errors:64,warns:42,resets:0}}],downloadURL:"https://cdn.beatsaver.com/c0e3706463c5c9b993ba5d05c2166fb0b512e695.zip",coverURL:"https://cdn.beatsaver.com/c0e3706463c5c9b993ba5d05c2166fb0b512e695.jpg",previewURL:"https://cdn.beatsaver.com/c0e3706463c5c9b993ba5d05c2166fb0b512e695.mp3"}],createdAt:"2019-04-15T06:34:34Z",updatedAt:"2019-04-15T06:34:34Z",lastPublishedAt:"2019-04-15T06:34:34Z"},{id:"1fff",name:"Chiru Chiru by REOL",description:"The 4th most played song during the 100k Contest, I present to you a dance-able map of Chiru Chiru by REOL!\r\n\r\nThis is one of the 22 maps that were mapped for the 100k Contest where you can win over $7,000 in prizes by just playing Beat Saber! Go to https://bsaber.com/100k-contest/ for more info.\r\n\r\nFull length song. I've added/edited a custom countdown to the intro.\r\n\r\nPreview:\r\nhttps://youtu.be/jcx6g6NS8_4\r\n\r\nBPM: 128\r\nDuration: 3:18\r\nEasy, Normal, Hard and Expert difficulties.\r\n\r\nEasy: 253, 31 obstacles, 6 mines\r\nNormal: 356 notes, 31 obstacles, 6 mines\r\nHard: 478 notes, 31 obstacles, 18 mines\r\nExpert: 675 notes, 31 obstacles, 18 mines\r\n\r\nThanks to Kizuflux, VenclaireVR, squeaksies, Crankor, NekiCoule, Redmagi, aggrogahu and Saut for playtesting!\r\n\r\nEnjoy!",uploader:{id:4285318,name:"kolezan",uniqueSet:!0,hash:"5cff0b7398cc5a672c84fcbb",avatar:"https://cdn.beatsaver.com/avatar/220513618763055106.png",type:"DISCORD"},metadata:{bpm:128,duration:199,songName:"Chiru Chiru",songSubName:"REOL",songAuthorName:"Kolezan",levelAuthorName:"Kolezan"},stats:{plays:0,downloads:6874,upvotes:4133,downvotes:148,score:.9279},uploaded:"2018-11-12T22:29:15Z",automapper:!1,ranked:!0,qualified:!1,versions:[{hash:"9993d9f5b03472efa5b8b31d3dc4156301145d97",key:"1fff",state:"Published",createdAt:"2018-11-12T22:29:15Z",sageScore:4,diffs:[{njs:10,offset:0,notes:258,bombs:6,obstacles:31,nps:1.339,length:411,characteristic:"Standard",difficulty:"Easy",events:955,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:192.656,paritySummary:{errors:62,warns:27,resets:3},stars:1.1},{njs:10,offset:0,notes:356,bombs:6,obstacles:31,nps:1.846,length:411.5,characteristic:"Standard",difficulty:"Normal",events:955,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:192.891,paritySummary:{errors:64,warns:44,resets:3},stars:1.37},{njs:11,offset:0,notes:478,bombs:18,obstacles:31,nps:2.472,length:412.5,characteristic:"Standard",difficulty:"Hard",events:955,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:193.359,paritySummary:{errors:70,warns:85,resets:4},stars:1.82},{njs:11,offset:0,notes:669,bombs:18,obstacles:31,nps:3.46,length:412.5,characteristic:"Standard",difficulty:"Expert",events:956,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:193.359,paritySummary:{errors:96,warns:89,resets:5},stars:2.28}],downloadURL:"https://cdn.beatsaver.com/9993d9f5b03472efa5b8b31d3dc4156301145d97.zip",coverURL:"https://cdn.beatsaver.com/9993d9f5b03472efa5b8b31d3dc4156301145d97.jpg",previewURL:"https://cdn.beatsaver.com/9993d9f5b03472efa5b8b31d3dc4156301145d97.mp3"}],createdAt:"2018-11-12T22:29:15Z",updatedAt:"2018-11-12T22:29:15Z",lastPublishedAt:"2018-11-12T22:29:15Z"},{id:"6ac",name:"Pompeii - Bastille",description:"Hard only - Manageable but active. Events included.",uploader:{id:51831,name:"dietmoxie",uniqueSet:!0,hash:"5cff0b7298cc5a672c84ec3a",avatar:"https://www.gravatar.com/avatar/5cff0b7298cc5a672c84ec3a?d=retro",type:"SIMPLE"},metadata:{bpm:127,duration:214,songName:"Pompeii",songSubName:"",songAuthorName:"Bastille",levelAuthorName:"dietmoxie"},stats:{plays:0,downloads:10306,upvotes:5098,downvotes:196,score:.9279},uploaded:"2018-06-26T00:59:17Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"9753e45020fe1c5681fcd74f5a41efcf3c143282",key:"6ac",state:"Published",createdAt:"2018-06-26T00:59:17Z",sageScore:4,diffs:[{njs:10,offset:0,notes:698,bombs:0,obstacles:31,nps:3.348,length:443,characteristic:"Standard",difficulty:"Hard",events:665,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:209.291,paritySummary:{errors:134,warns:133,resets:0}}],downloadURL:"https://cdn.beatsaver.com/9753e45020fe1c5681fcd74f5a41efcf3c143282.zip",coverURL:"https://cdn.beatsaver.com/9753e45020fe1c5681fcd74f5a41efcf3c143282.jpg",previewURL:"https://cdn.beatsaver.com/9753e45020fe1c5681fcd74f5a41efcf3c143282.mp3"}],createdAt:"2018-06-26T00:59:17Z",updatedAt:"2018-06-26T00:59:17Z",lastPublishedAt:"2018-06-26T00:59:17Z"},{id:"54bb",name:"Bodies - Drowning Pool",description:'Fun fact: My first time hearing this song was on some random YouTube video in the 2000s, almost all YouTube videos back then used this song for some reason.\n\nWhen I reheard the song I immediately knew I have to put duck walls every time the lyrics went "HIT THE FLOOR". Also I wanted to use 1, 2, 3, 4 notes on a section of lyrics that said ONE TWO THREE FOUR.\n\nWarning: Please don\'t actually let your body hit the floor while playing this map. Smashing head first into the floor with a VR headset can be an expensive mistake.\n\n"Bodies" (often incorrectly called "Let the Bodies Hit the Floor") is a song by the American rock band Drowning Pool and also is the lead single from their debut album Sinner. It was also the theme song for the 2001 WWF SummerSlam pay-per-view event, as well as that of the ECW brand in 2006 to early 2008',uploader:{id:58338,name:"Joetastic",uniqueSet:!0,hash:"5cff0b7498cc5a672c85050e",avatar:"https://cdn.beatsaver.com/avatar/227767566402191360.png",type:"DISCORD"},metadata:{bpm:130,duration:202,songName:"Bodies",songSubName:"",songAuthorName:"Drowning Pool",levelAuthorName:"Joetastic"},stats:{plays:0,downloads:4168,upvotes:1980,downvotes:49,score:.9278},uploaded:"2019-06-27T18:32:03.310Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"8818e19d544a6ca8b1a05e7324731fee2f38b58f",key:"54bb",state:"Published",createdAt:"2019-06-27T18:32:03.310Z",sageScore:2,diffs:[{njs:14,offset:0,notes:805,bombs:0,obstacles:19,nps:4.211,length:414.144,characteristic:"Standard",difficulty:"Expert",events:5298,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:191.144,paritySummary:{errors:29,warns:33,resets:0}}],downloadURL:"https://cdn.beatsaver.com/8818e19d544a6ca8b1a05e7324731fee2f38b58f.zip",coverURL:"https://cdn.beatsaver.com/8818e19d544a6ca8b1a05e7324731fee2f38b58f.jpg",previewURL:"https://cdn.beatsaver.com/8818e19d544a6ca8b1a05e7324731fee2f38b58f.mp3"}],createdAt:"2019-06-27T18:32:03.310Z",updatedAt:"2019-06-27T18:32:03.310Z",lastPublishedAt:"2019-06-27T18:32:03.310Z"},{id:"5352",name:"1999 - Charli XCX & Troye Sivan",description:"It started as a meme in #mapping-discussion and expanded to a full blown project. I really like how it turned out. Hope you enjoy it :)\n\nLength: 3:11\nBPM: 124\nNJS: 17 (Expert+), 15 (Expert), 13 (Hard)\n\nEasy slot is the lightshow as always.\n\nThanks to my playtesters CyanSnow (2x) and Redmagi, show them some love! :)\n\nDM me your feedback on discord: Teuflum#5982",uploader:{id:68740,name:"Teuflum",uniqueSet:!0,hash:"5cff0b7498cc5a672c851a6b",avatar:"https://cdn.beatsaver.com/avatar/114706869460664326.png",type:"DISCORD"},metadata:{bpm:124,duration:192,songName:"1999",songSubName:"",songAuthorName:"Charli XCX & Troye Sivan",levelAuthorName:"Teuflum"},stats:{plays:0,downloads:2205,upvotes:1273,downvotes:21,score:.9278},uploaded:"2019-06-17T15:29:13.123Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"d68bd4d997726249406bce748b83bf5464da99e7",key:"5352",state:"Published",createdAt:"2019-06-17T15:29:13.123Z",sageScore:7,diffs:[{njs:13,offset:0,notes:555,bombs:56,obstacles:37,nps:2.968,length:386.5,characteristic:"Standard",difficulty:"Hard",events:6185,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:187.016,paritySummary:{errors:23,warns:8,resets:4}},{njs:15,offset:0,notes:668,bombs:56,obstacles:41,nps:3.572,length:386.5,characteristic:"Standard",difficulty:"Expert",events:6185,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:187.016,paritySummary:{errors:20,warns:16,resets:4}},{njs:17,offset:0,notes:812,bombs:8,obstacles:39,nps:4.342,length:386.5,characteristic:"Standard",difficulty:"ExpertPlus",events:6185,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:187.016,paritySummary:{errors:33,warns:48,resets:2}},{njs:10,offset:0,notes:0,bombs:0,obstacles:0,nps:0,length:0,characteristic:"Lightshow",difficulty:"Easy",events:6185,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:0,paritySummary:{errors:0,warns:0,resets:0}}],downloadURL:"https://cdn.beatsaver.com/d68bd4d997726249406bce748b83bf5464da99e7.zip",coverURL:"https://cdn.beatsaver.com/d68bd4d997726249406bce748b83bf5464da99e7.jpg",previewURL:"https://cdn.beatsaver.com/d68bd4d997726249406bce748b83bf5464da99e7.mp3"}],createdAt:"2019-06-17T15:29:13.123Z",updatedAt:"2019-06-17T15:29:13.123Z",lastPublishedAt:"2019-06-17T15:29:13.123Z"},{id:"a934",name:"Sabaton - Seven Pillars of Wisdom",description:"Sabaton is a Power-metal band that sings almost exclusively about historical events. This song is about Lawrence of Arabia, and is named after his autobiography.\r\n\r\nThe map is fully lit, and available in multiple difficulties. Thanks to the BSMG discord for helping test the map before release.\r\n\r\nNormal: 2.2 NPS - 10 NJS\r\nHard: 3.89 NPS - 13 NJS\r\nExpert: 5.24 NPS - 17 NJS",uploader:{id:4285369,name:"Cyrix",uniqueSet:!0,hash:"5eb6eb9a7abb000006c85add",avatar:"https://cdn.beatsaver.com/avatar/167730807929044992.png",type:"DISCORD"},metadata:{bpm:152,duration:178,songName:"Seven Pillars of Wisdom",songSubName:"",songAuthorName:"Sabaton",levelAuthorName:"Cyrix"},stats:{plays:0,downloads:2699,upvotes:824,downvotes:6,score:.9276},uploaded:"2020-05-22T21:19:05.343Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"16732f8edc59bd358278c14055cde1cd9ecb47aa",key:"a934",state:"Published",createdAt:"2020-05-22T21:19:05.343Z",sageScore:5,diffs:[{njs:10,offset:0,notes:393,bombs:0,obstacles:24,nps:2.299,length:433,characteristic:"Standard",difficulty:"Normal",events:1826,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:170.921,paritySummary:{errors:18,warns:4,resets:0}},{njs:13,offset:.25,notes:696,bombs:20,obstacles:16,nps:4.044,length:436,characteristic:"Standard",difficulty:"Hard",events:1826,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:172.105,paritySummary:{errors:0,warns:2,resets:3}},{njs:17,offset:.3,notes:937,bombs:16,obstacles:14,nps:5.444,length:436,characteristic:"Standard",difficulty:"Expert",events:1826,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:172.105,paritySummary:{errors:0,warns:5,resets:5}}],downloadURL:"https://cdn.beatsaver.com/16732f8edc59bd358278c14055cde1cd9ecb47aa.zip",coverURL:"https://cdn.beatsaver.com/16732f8edc59bd358278c14055cde1cd9ecb47aa.jpg",previewURL:"https://cdn.beatsaver.com/16732f8edc59bd358278c14055cde1cd9ecb47aa.mp3"}],createdAt:"2020-05-22T21:19:05.343Z",updatedAt:"2020-05-22T21:19:05.343Z",lastPublishedAt:"2020-05-22T21:19:05.343Z"},{id:"51be",name:"Prayer Of The Refugee - Rise Against",description:'"Prayer of the Refugee" is a song by American rock band Rise Against. The lyrics were written by lead vocalist Tim McIlrath, and deal with the themes of forced displacement and the societal issues surrounding refugees. Thanks to @Scrappy for helping me find the variable BPM in this song',uploader:{id:58338,name:"Joetastic",uniqueSet:!0,hash:"5cff0b7498cc5a672c85050e",avatar:"https://cdn.beatsaver.com/avatar/227767566402191360.png",type:"DISCORD"},metadata:{bpm:150,duration:200,songName:"Prayer Of The Refugee",songSubName:"Rise Against",songAuthorName:"Joetastic",levelAuthorName:"Joetastic"},stats:{plays:0,downloads:3598,upvotes:1630,downvotes:35,score:.9276},uploaded:"2019-06-06T05:53:57Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"9c7e5ae537bb4871513330da180c6647cd8cffff",key:"51be",state:"Published",createdAt:"2019-06-06T05:53:57Z",sageScore:6,diffs:[{njs:13.5,offset:0,notes:860,bombs:0,obstacles:23,nps:4.503,length:479.103,characteristic:"Standard",difficulty:"Expert",events:3414,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:191.641,paritySummary:{errors:37,warns:24,resets:0}},{njs:15,offset:0,notes:936,bombs:0,obstacles:23,nps:4.9,length:479.103,characteristic:"Standard",difficulty:"ExpertPlus",events:3414,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:191.641,paritySummary:{errors:33,warns:20,resets:0}}],downloadURL:"https://cdn.beatsaver.com/9c7e5ae537bb4871513330da180c6647cd8cffff.zip",coverURL:"https://cdn.beatsaver.com/9c7e5ae537bb4871513330da180c6647cd8cffff.jpg",previewURL:"https://cdn.beatsaver.com/9c7e5ae537bb4871513330da180c6647cd8cffff.mp3"}],createdAt:"2019-06-06T05:53:57Z",updatedAt:"2019-06-06T05:53:57Z",lastPublishedAt:"2019-06-06T05:53:57Z"},{id:"226e",name:"Crawling - Linkin Park",description:"Another Linkin Park map! This time it is Crawling. \nPreview: https://www.youtube.com/watch?v=Pkr9Vm1dPv8\n\nhttps://twitter.com/TheDownyCat\nhttps://www.twitch.tv/downycat\nhttps://streamlabs.com/downycat/tip",uploader:{id:4285982,name:"downycat",uniqueSet:!0,hash:"5cff0b7398cc5a672c84ede5",avatar:"https://cdn.beatsaver.com/avatar/173538829888782336.png",type:"DISCORD"},metadata:{bpm:105,duration:208,songName:"Crawling",songSubName:"Linkin Park",songAuthorName:"DownyCat",levelAuthorName:"downycat"},stats:{plays:0,downloads:5610,upvotes:2388,downvotes:67,score:.9276},uploaded:"2018-11-26T14:10:51Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"691b382b6ca6e69b9b908e41d439f9b7b9403fb6",key:"226e",state:"Published",createdAt:"2018-11-26T14:10:51Z",sageScore:5,diffs:[{njs:10,offset:0,notes:455,bombs:0,obstacles:64,nps:2.317,length:344,characteristic:"Standard",difficulty:"Normal",events:2399,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:196.571,paritySummary:{errors:29,warns:28,resets:0}},{njs:12,offset:0,notes:666,bombs:0,obstacles:71,nps:3.386,length:344.5,characteristic:"Standard",difficulty:"Hard",events:2399,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:196.857,paritySummary:{errors:24,warns:19,resets:0}},{njs:14,offset:0,notes:862,bombs:0,obstacles:75,nps:4.383,length:344.5,characteristic:"Standard",difficulty:"Expert",events:2399,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:196.857,paritySummary:{errors:18,warns:39,resets:0}}],downloadURL:"https://cdn.beatsaver.com/691b382b6ca6e69b9b908e41d439f9b7b9403fb6.zip",coverURL:"https://cdn.beatsaver.com/691b382b6ca6e69b9b908e41d439f9b7b9403fb6.jpg",previewURL:"https://cdn.beatsaver.com/691b382b6ca6e69b9b908e41d439f9b7b9403fb6.mp3"}],createdAt:"2018-11-26T14:10:51Z",updatedAt:"2018-11-26T14:10:51Z",lastPublishedAt:"2018-11-26T14:10:51Z"},{id:"6cf7",name:"[Noodleween] AronChupa, Little Sis Nora - Rave in the Grave",description:"2nd Place winner in the BSMG Halloween map competition! :D\n\nThis map is part of the Noodleween song pack, brought to you by the Noodle mapper group. We hope you enjoy this as much as we enjoyed making it.\n\nThis song already had a map, but I thought it could use some love and revamping. Hope you guys enjoy the full difficulty spread!\n\nExpert+ Playthrough: https://www.youtube.com/watch?v=ufEQ4L2y694&feature=youtu.be\n\nHappy Halloween! :D 👻",uploader:{id:17131,name:"tranquillizeme",uniqueSet:!0,hash:"5cff0b7798cc5a672c85609e",avatar:"https://www.gravatar.com/avatar/5cff0b7798cc5a672c85609e?d=retro",type:"SIMPLE"},metadata:{bpm:132,duration:154,songName:"Rave In The Grave",songSubName:"",songAuthorName:"AronChupa, Little Sis Nora",levelAuthorName:"TranquillizeMe"},stats:{plays:0,downloads:2987,upvotes:1394,downvotes:26,score:.9275},uploaded:"2019-10-29T23:00:07.667Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"b288ce94ed8feff67af04fd75e23acafad66b9f8",key:"6cf7",state:"Published",createdAt:"2019-10-29T23:00:07.667Z",sageScore:6,diffs:[{njs:12,offset:1.5,notes:212,bombs:0,obstacles:36,nps:1.418,length:329,characteristic:"Standard",difficulty:"Easy",events:7067,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:149.545,paritySummary:{errors:49,warns:7,resets:0}},{njs:13,offset:1,notes:286,bombs:12,obstacles:43,nps:1.912,length:329,characteristic:"Standard",difficulty:"Normal",events:7067,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:149.545,paritySummary:{errors:42,warns:12,resets:0}},{njs:14,offset:1,notes:447,bombs:12,obstacles:37,nps:2.989,length:329,characteristic:"Standard",difficulty:"Hard",events:7067,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:149.545,paritySummary:{errors:9,warns:2,resets:0}},{njs:15,offset:.5,notes:514,bombs:8,obstacles:47,nps:3.437,length:329,characteristic:"Standard",difficulty:"Expert",events:7067,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:149.545,paritySummary:{errors:7,warns:2,resets:0}},{njs:19,offset:0,notes:610,bombs:24,obstacles:44,nps:4.079,length:329,characteristic:"Standard",difficulty:"ExpertPlus",events:7067,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:149.545,paritySummary:{errors:8,warns:3,resets:0}}],downloadURL:"https://cdn.beatsaver.com/b288ce94ed8feff67af04fd75e23acafad66b9f8.zip",coverURL:"https://cdn.beatsaver.com/b288ce94ed8feff67af04fd75e23acafad66b9f8.jpg",previewURL:"https://cdn.beatsaver.com/b288ce94ed8feff67af04fd75e23acafad66b9f8.mp3"}],createdAt:"2019-10-29T23:00:07.667Z",updatedAt:"2019-10-29T23:00:07.667Z",lastPublishedAt:"2019-10-29T23:00:07.667Z"},{id:"53fc",name:"Sabaton - Shiroyama",description:"Second map!!! I hope you all enjoy the new map with added difficulties!! Feel free to message me on discord if you liked the map, have feedback, or have any suggestions for some more maps!!!\nMax●The●Whale#8744",uploader:{id:40212,name:"maximusthewhale",uniqueSet:!0,hash:"5cff0b7898cc5a672c856ed4",avatar:"https://www.gravatar.com/avatar/5cff0b7898cc5a672c856ed4?d=retro",type:"SIMPLE"},metadata:{bpm:171,duration:212,songName:"Shiroyama",songSubName:"",songAuthorName:"Sabaton",levelAuthorName:"Maximus"},stats:{plays:0,downloads:2704,upvotes:1798,downvotes:42,score:.9275},uploaded:"2019-06-22T09:34:40.930Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"1340476c96b9052adfff5e63993b7ffa03229c39",key:"53fc",state:"Published",createdAt:"2019-06-22T09:34:40.930Z",sageScore:5,diffs:[{njs:13,offset:0,notes:736,bombs:0,obstacles:5,nps:3.648,length:575,characteristic:"Standard",difficulty:"Hard",events:1038,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:201.754,paritySummary:{errors:12,warns:0,resets:0}},{njs:15,offset:0,notes:889,bombs:0,obstacles:16,nps:4.406,length:575,characteristic:"Standard",difficulty:"Expert",events:3144,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:201.754,paritySummary:{errors:22,warns:22,resets:0}},{njs:18,offset:0,notes:1353,bombs:0,obstacles:16,nps:6.706,length:575,characteristic:"Standard",difficulty:"ExpertPlus",events:3216,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:201.754,paritySummary:{errors:29,warns:27,resets:0}}],downloadURL:"https://cdn.beatsaver.com/1340476c96b9052adfff5e63993b7ffa03229c39.zip",coverURL:"https://cdn.beatsaver.com/1340476c96b9052adfff5e63993b7ffa03229c39.jpg",previewURL:"https://cdn.beatsaver.com/1340476c96b9052adfff5e63993b7ffa03229c39.mp3"}],createdAt:"2019-06-22T09:34:40.930Z",updatedAt:"2019-06-22T09:34:40.930Z",lastPublishedAt:"2019-06-22T09:34:40.930Z"},{id:"5389",name:"On Top of the World - Imagine Dragons",description:"Re-upload of an earlier Beatmap that was lost to the update.",uploader:{id:30311,name:"bennydabeast",uniqueSet:!0,hash:"5cff0b7298cc5a672c84e98d",avatar:"https://cdn.beatsaver.com/avatar/30311.jpg",type:"SIMPLE"},metadata:{bpm:100,duration:192,songName:"On Top of the World",songSubName:"",songAuthorName:"Imagine Dragons",levelAuthorName:"BennyDaBeast"},stats:{plays:0,downloads:12331,upvotes:3114,downvotes:101,score:.9274},uploaded:"2019-06-19T17:02:53.084Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"88314981432a8002f62e464562c0c41f06393ab5",key:"5389",state:"Published",createdAt:"2019-06-19T17:02:53.084Z",sageScore:2,diffs:[{njs:10,offset:0,notes:269,bombs:0,obstacles:18,nps:1.423,length:315,characteristic:"Standard",difficulty:"Normal",events:781,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:189,paritySummary:{errors:48,warns:37,resets:0}},{njs:10,offset:0,notes:374,bombs:0,obstacles:18,nps:1.976,length:315.5,characteristic:"Standard",difficulty:"Hard",events:781,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:189.3,paritySummary:{errors:54,warns:52,resets:0}},{njs:10,offset:0,notes:551,bombs:0,obstacles:27,nps:2.911,length:315.5,characteristic:"Standard",difficulty:"Expert",events:781,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:189.3,paritySummary:{errors:81,warns:91,resets:0}},{njs:10,offset:0,notes:720,bombs:4,obstacles:27,nps:3.803,length:315.5,characteristic:"Standard",difficulty:"ExpertPlus",events:781,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:189.3,paritySummary:{errors:54,warns:71,resets:4}}],downloadURL:"https://cdn.beatsaver.com/88314981432a8002f62e464562c0c41f06393ab5.zip",coverURL:"https://cdn.beatsaver.com/88314981432a8002f62e464562c0c41f06393ab5.jpg",previewURL:"https://cdn.beatsaver.com/88314981432a8002f62e464562c0c41f06393ab5.mp3"}],createdAt:"2019-06-19T17:02:53.084Z",updatedAt:"2019-06-19T17:02:53.084Z",lastPublishedAt:"2019-06-19T17:02:53.084Z"},{id:"4a3d",name:"[Anniversary] Fractures (ft. Nevve) - Illenium [BennyDaBeast]",description:"Part of the Anniversary Song Pack",uploader:{id:37070,name:"anniversaryteam",uniqueSet:!0,hash:"5cff0b7798cc5a672c8565a3",avatar:"https://www.gravatar.com/avatar/5cff0b7798cc5a672c8565a3?d=retro",type:"SIMPLE"},metadata:{bpm:160,duration:246,songName:"Fractures (ft. Nevve)",songSubName:"Illenium",songAuthorName:"BennyDaBeast",levelAuthorName:"AnniversaryTeam"},stats:{plays:0,downloads:3049,upvotes:2328,downvotes:65,score:.9274},uploaded:"2019-05-03T14:09:37Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"440945a4fe86b5e3ee7f03b98c636c881930072f",key:"4a3d",state:"Published",createdAt:"2019-05-03T14:09:37Z",sageScore:5,diffs:[{njs:12,offset:0,notes:805,bombs:0,obstacles:41,nps:3.363,length:638.25,characteristic:"Standard",difficulty:"Hard",events:2214,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:239.344,paritySummary:{errors:98,warns:99,resets:0}},{njs:12,offset:0,notes:1048,bombs:0,obstacles:41,nps:4.379,length:638.25,characteristic:"Standard",difficulty:"Expert",events:2214,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:239.344,paritySummary:{errors:145,warns:163,resets:0}},{njs:15,offset:0,notes:1060,bombs:0,obstacles:41,nps:4.429,length:638.25,characteristic:"Standard",difficulty:"ExpertPlus",events:2214,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:239.344,paritySummary:{errors:137,warns:160,resets:0}}],downloadURL:"https://cdn.beatsaver.com/440945a4fe86b5e3ee7f03b98c636c881930072f.zip",coverURL:"https://cdn.beatsaver.com/440945a4fe86b5e3ee7f03b98c636c881930072f.jpg",previewURL:"https://cdn.beatsaver.com/440945a4fe86b5e3ee7f03b98c636c881930072f.mp3"}],createdAt:"2019-05-03T14:09:37Z",updatedAt:"2019-05-03T14:09:37Z",lastPublishedAt:"2019-05-03T14:09:37Z"},{id:"41a8",name:"fhana - Aozora no Rhapsody [Miss Kobayashi's Dragon Maid Opening]",description:"edited: Reworking E+, second guessing its patterns\r\nCGDCT is the best genre of anime. Dragon maid op is fire\r\nPlease check out fhána and their other music\r\n\r\nBPM 135 \r\nExpert\r\nHard\r\nNormal\r\nEasy\r\n\r\nhas fun\r\n\r\ncontact me on discord\r\nETAN#8341",uploader:{id:4235140,name:"etan",uniqueSet:!0,hash:"5cff0b7798cc5a672c855775",avatar:"https://cdn.beatsaver.com/avatar/136373107559497728.png",type:"DISCORD"},metadata:{bpm:135,duration:96,songName:"Aozora no Rhapsody",songSubName:"fhna",songAuthorName:"ETAN",levelAuthorName:"ETAN"},stats:{plays:0,downloads:7116,upvotes:2214,downvotes:60,score:.9274},uploaded:"2019-03-29T05:34:40Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"cdd469b733ade02a7996d1055082f3e1bc14ca8a",key:"41a8",state:"Published",createdAt:"2019-03-29T05:34:40Z",sageScore:4,diffs:[{njs:10,offset:0,notes:180,bombs:0,obstacles:7,nps:2.045,length:198,characteristic:"Standard",difficulty:"Easy",events:704,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:88,paritySummary:{errors:11,warns:1,resets:0}},{njs:12,offset:0,notes:274,bombs:0,obstacles:3,nps:3.114,length:198,characteristic:"Standard",difficulty:"Normal",events:704,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:88,paritySummary:{errors:12,warns:0,resets:0}},{njs:14,offset:0,notes:379,bombs:0,obstacles:3,nps:4.307,length:198,characteristic:"Standard",difficulty:"Hard",events:704,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:88,paritySummary:{errors:16,warns:4,resets:0}},{njs:15,offset:0,notes:461,bombs:0,obstacles:2,nps:5.239,length:198,characteristic:"Standard",difficulty:"Expert",events:704,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:88,paritySummary:{errors:7,warns:6,resets:0}}],downloadURL:"https://cdn.beatsaver.com/cdd469b733ade02a7996d1055082f3e1bc14ca8a.zip",coverURL:"https://cdn.beatsaver.com/cdd469b733ade02a7996d1055082f3e1bc14ca8a.jpg",previewURL:"https://cdn.beatsaver.com/cdd469b733ade02a7996d1055082f3e1bc14ca8a.mp3"}],createdAt:"2019-03-29T05:34:40Z",updatedAt:"2019-03-29T05:34:40Z",lastPublishedAt:"2019-03-29T05:34:40Z"},{id:"84b4",name:"Nightcore - Everytime We Touch | Cascada",description:"174th Map\n\nYoutube Preview : https://youtu.be/i6so3ZhTtGQ",uploader:{id:4284588,name:"rigid",uniqueSet:!0,hash:"5cff0b7598cc5a672c852224",avatar:"https://cdn.beatsaver.com/avatar/295613108947386368.png",type:"DISCORD"},metadata:{bpm:186,duration:152,songName:"Nightcore - Everytime We Touch",songSubName:"",songAuthorName:"Cascada",levelAuthorName:"Rigid"},stats:{plays:0,downloads:4362,upvotes:1614,downvotes:35,score:.9273},uploaded:"2020-02-06T17:16:32.579Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"31979b560a0ea958f9f0d92df8dcc12f6b8f567c",key:"84b4",state:"Published",createdAt:"2020-02-06T17:16:32.579Z",sageScore:4,diffs:[{njs:15,offset:.5,notes:608,bombs:2,obstacles:77,nps:4.158,length:453.265,characteristic:"Standard",difficulty:"Expert",events:730,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:146.214,paritySummary:{errors:9,warns:8,resets:1}}],downloadURL:"https://cdn.beatsaver.com/31979b560a0ea958f9f0d92df8dcc12f6b8f567c.zip",coverURL:"https://cdn.beatsaver.com/31979b560a0ea958f9f0d92df8dcc12f6b8f567c.jpg",previewURL:"https://cdn.beatsaver.com/31979b560a0ea958f9f0d92df8dcc12f6b8f567c.mp3"}],createdAt:"2020-02-06T17:16:32.579Z",updatedAt:"2020-02-06T17:16:32.579Z",lastPublishedAt:"2020-02-06T17:16:32.579Z"},{id:"8149",name:"Great Days [JoJo's Bizarre Adventure: Diamond is Unbreakable 3rd Opening] - Karen Aoki & Daisuke Hasegawa",description:"\"Great Days\" is the third opening of JoJo's Bizarre Adventure: Diamond is Unbreakable and the seventh overall opening of the JoJo's Bizarre Adventure anime. The song is performed by the jazz vocalist Karen Aoki and Daisuke Hasegawa and composed by Yugo Kanno. The single was released on October 19, 2016.",uploader:{id:58338,name:"Joetastic",uniqueSet:!0,hash:"5cff0b7498cc5a672c85050e",avatar:"https://cdn.beatsaver.com/avatar/227767566402191360.png",type:"DISCORD"},metadata:{bpm:170,duration:239,songName:"Great Days",songSubName:"",songAuthorName:"Daisuke Hasegawa & Karen Aoki",levelAuthorName:"Joetastic"},stats:{plays:0,downloads:6431,upvotes:1376,downvotes:26,score:.9271},uploaded:"2020-01-25T14:01:38.069Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"3d3effcb84f2bf4aadcd7f6ba7f89eb37226a3c3",key:"8149",state:"Published",createdAt:"2020-01-25T14:01:38.069Z",sageScore:4,diffs:[{njs:16,offset:0,notes:1005,bombs:10,obstacles:54,nps:4.237,length:672,characteristic:"Standard",difficulty:"Expert",events:2987,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:237.176,paritySummary:{errors:43,warns:45,resets:0}}],downloadURL:"https://cdn.beatsaver.com/3d3effcb84f2bf4aadcd7f6ba7f89eb37226a3c3.zip",coverURL:"https://cdn.beatsaver.com/3d3effcb84f2bf4aadcd7f6ba7f89eb37226a3c3.jpg",previewURL:"https://cdn.beatsaver.com/3d3effcb84f2bf4aadcd7f6ba7f89eb37226a3c3.mp3"}],createdAt:"2020-01-25T14:01:38.069Z",updatedAt:"2020-01-25T14:01:38.069Z",lastPublishedAt:"2020-01-25T14:01:38.069Z"},{id:"8ac5",name:"Overthinker - INZO",description:"Thanks Rexxz for all your patience and lighting skillz <3",uploader:{id:4285169,name:"ryger",uniqueSet:!0,hash:"5cff0b7798cc5a672c855a42",avatar:"https://cdn.beatsaver.com/avatar/169266024502263808.png",type:"DISCORD"},metadata:{bpm:108,duration:222,songName:"Overthinker",songSubName:"",songAuthorName:"INZO",levelAuthorName:"Ryger"},stats:{plays:0,downloads:2384,upvotes:1616,downvotes:36,score:.9268},uploaded:"2020-02-26T02:39:13.425Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"e09394d9d641b6739e80553ce56dcd68fa27bdf3",key:"8ac5",state:"Published",createdAt:"2020-02-26T02:39:13.425Z",sageScore:4,diffs:[{njs:20,offset:.25,notes:0,bombs:0,obstacles:2405,nps:0,length:0,characteristic:"Standard",difficulty:"Expert",events:6835,chroma:!1,me:!0,ne:!1,cinema:!1,seconds:0,paritySummary:{errors:0,warns:0,resets:0}},{njs:20,offset:.25,notes:984,bombs:0,obstacles:2405,nps:4.893,length:362,characteristic:"Standard",difficulty:"ExpertPlus",events:6836,chroma:!1,me:!0,ne:!1,cinema:!1,seconds:201.111,paritySummary:{errors:0,warns:0,resets:0}}],downloadURL:"https://cdn.beatsaver.com/e09394d9d641b6739e80553ce56dcd68fa27bdf3.zip",coverURL:"https://cdn.beatsaver.com/e09394d9d641b6739e80553ce56dcd68fa27bdf3.jpg",previewURL:"https://cdn.beatsaver.com/e09394d9d641b6739e80553ce56dcd68fa27bdf3.mp3"}],createdAt:"2020-02-26T02:39:13.425Z",updatedAt:"2020-02-26T02:39:13.425Z",lastPublishedAt:"2020-02-26T02:39:13.425Z"},{id:"1ff6",name:"Don't Let Me Down (Illenium Remix) - The Chainsmokers feat. Daya (100k Contest)",description:"This is one of the 22 maps that were mapped for the 100k Contest where you can win over $7,000 in prizes. Go to https://bsaber.com/100k-contest/ to register!\r\nDifficulties: Expert+, Expert, Hard, Normal",uploader:{id:30311,name:"bennydabeast",uniqueSet:!0,hash:"5cff0b7298cc5a672c84e98d",avatar:"https://cdn.beatsaver.com/avatar/30311.jpg",type:"SIMPLE"},metadata:{bpm:160,duration:220,songName:"Don't Let Me Down (Illenium Remix)",songSubName:"The Chainsmokers feat. Daya",songAuthorName:"BennyDaBeast",levelAuthorName:"bennydabeast"},stats:{plays:0,downloads:10044,upvotes:4381,downvotes:166,score:.9268},uploaded:"2018-11-12T18:48:50Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"5639a12cccf90238055116ec53e5297aa004627e",key:"1ff6",state:"Published",createdAt:"2018-11-12T18:48:50Z",sageScore:8,diffs:[{njs:10,offset:0,notes:280,bombs:0,obstacles:26,nps:1.511,length:494,characteristic:"Standard",difficulty:"Easy",events:1714,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:185.25,paritySummary:{errors:68,warns:14,resets:0}},{njs:10,offset:0,notes:360,bombs:0,obstacles:26,nps:1.943,length:494,characteristic:"Standard",difficulty:"Normal",events:1714,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:185.25,paritySummary:{errors:68,warns:32,resets:0}},{njs:12,offset:0,notes:521,bombs:0,obstacles:154,nps:2.801,length:496,characteristic:"Standard",difficulty:"Hard",events:1714,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:186,paritySummary:{errors:77,warns:49,resets:0}},{njs:12,offset:0,notes:746,bombs:0,obstacles:155,nps:4.011,length:496,characteristic:"Standard",difficulty:"Expert",events:1714,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:186,paritySummary:{errors:76,warns:100,resets:0}},{njs:14,offset:0,notes:1225,bombs:0,obstacles:207,nps:6.481,length:504,characteristic:"Standard",difficulty:"ExpertPlus",events:1714,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:189,paritySummary:{errors:101,warns:114,resets:0}}],downloadURL:"https://cdn.beatsaver.com/5639a12cccf90238055116ec53e5297aa004627e.zip",coverURL:"https://cdn.beatsaver.com/5639a12cccf90238055116ec53e5297aa004627e.jpg",previewURL:"https://cdn.beatsaver.com/5639a12cccf90238055116ec53e5297aa004627e.mp3"}],createdAt:"2018-11-12T18:48:50Z",updatedAt:"2018-11-12T18:48:50Z",lastPublishedAt:"2018-11-12T18:48:50Z"},{id:"393",name:"O-Zone - Dragostea Din Tei",description:"numa numa numa yey\r\n\r\nhard only for now, but i'll add more difficulties later\r\n\r\nfull events/lighting",uploader:{id:52747,name:"esspee39",uniqueSet:!1,hash:"5cff0b7398cc5a672c84f198",avatar:"https://www.gravatar.com/avatar/5cff0b7398cc5a672c84f198?d=retro",type:"SIMPLE"},metadata:{bpm:130,duration:214,songName:"Dragostei Din Tei",songSubName:"O-Zone",songAuthorName:"esspee",levelAuthorName:"esspee39"},stats:{plays:0,downloads:5541,upvotes:3046,downvotes:100,score:.9268},uploaded:"2018-06-04T00:27:54Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"b0fd4145a269f1fc8f78afccb4a310a36f2f873c",key:"393",state:"Published",createdAt:"2018-06-04T00:27:54Z",sageScore:5,diffs:[{njs:10,offset:0,notes:676,bombs:69,obstacles:16,nps:3.266,length:448.5,characteristic:"Standard",difficulty:"Hard",events:1136,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:207,paritySummary:{errors:47,warns:131,resets:9}}],downloadURL:"https://cdn.beatsaver.com/b0fd4145a269f1fc8f78afccb4a310a36f2f873c.zip",coverURL:"https://cdn.beatsaver.com/b0fd4145a269f1fc8f78afccb4a310a36f2f873c.jpg",previewURL:"https://cdn.beatsaver.com/b0fd4145a269f1fc8f78afccb4a310a36f2f873c.mp3"}],createdAt:"2018-06-04T00:27:54Z",updatedAt:"2018-06-04T00:27:54Z",lastPublishedAt:"2018-06-04T00:27:54Z"},{id:"484d",name:"Sosageyo | Shinzou wo sasageyo | Attack on Titan OP 3 - Linked Horizon",description:"Huge thanks to Skeelie for lighting this map!\r\n\r\nThis map overrides the default red-blue colors to a blue-white color, matching the Survey Corps' Wings of Freedom.\r\nEasy, Hard, Expert, and Expert+ are all available.\r\nEasy is a bit spicy, Expert is very spicy.",uploader:{id:15368,name:"theab",uniqueSet:!0,hash:"5cff0b7698cc5a672c853a14",avatar:"https://www.gravatar.com/avatar/5cff0b7698cc5a672c853a14?d=retro",type:"SIMPLE"},metadata:{bpm:160,duration:90,songName:"Shinzou wo Sasageyo",songSubName:"Linked Horizon",songAuthorName:"Ab & Skeelie",levelAuthorName:"TheAb"},stats:{plays:0,downloads:8967,upvotes:2595,downvotes:79,score:.9267},uploaded:"2019-04-25T10:29:55Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"713da9a9a0737f402ca75819ea9dc19ec3723329",key:"484d",state:"Published",createdAt:"2019-04-25T10:29:55Z",sageScore:5,diffs:[{njs:12,offset:0,notes:123,bombs:4,obstacles:5,nps:1.439,length:228,characteristic:"Standard",difficulty:"Easy",events:5254,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:85.5,paritySummary:{errors:30,warns:3,resets:2}},{njs:12,offset:0,notes:229,bombs:0,obstacles:5,nps:2.678,length:228,characteristic:"Standard",difficulty:"Hard",events:5215,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:85.5,paritySummary:{errors:21,warns:18,resets:0}},{njs:15,offset:0,notes:372,bombs:0,obstacles:4,nps:4.351,length:228,characteristic:"Standard",difficulty:"Expert",events:5215,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:85.5,paritySummary:{errors:33,warns:29,resets:0}},{njs:18,offset:0,notes:548,bombs:0,obstacles:3,nps:6.627,length:220.5,characteristic:"Standard",difficulty:"ExpertPlus",events:5215,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:82.688,paritySummary:{errors:27,warns:48,resets:0}}],downloadURL:"https://cdn.beatsaver.com/713da9a9a0737f402ca75819ea9dc19ec3723329.zip",coverURL:"https://cdn.beatsaver.com/713da9a9a0737f402ca75819ea9dc19ec3723329.jpg",previewURL:"https://cdn.beatsaver.com/713da9a9a0737f402ca75819ea9dc19ec3723329.mp3"}],createdAt:"2019-04-25T10:29:55Z",updatedAt:"2019-04-25T10:29:55Z",lastPublishedAt:"2019-04-25T10:29:55Z"},{id:"21d9",name:"GAY FROGS",description:"I DON'T LIKE EM PUTTING CHEMICALS IN THE WATER THAT TURN THE FRIGGIN FROGS GAY!",uploader:{id:408,name:"nuketime",uniqueSet:!0,hash:"5cff0b7498cc5a672c8507f7",avatar:"https://cdn.beatsaver.com/avatar/175811186007343104.png",type:"DISCORD"},metadata:{bpm:143,duration:58,songName:"Gay Frogs",songSubName:"",songAuthorName:"Nuketime",levelAuthorName:"Nuketime"},stats:{plays:0,downloads:2129,upvotes:1147,downvotes:18,score:.9267},uploaded:"2018-11-24T03:47:04Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"c7bdbfea113219f8b372ca6107540995c2e81997",key:"21d9",state:"Published",createdAt:"2018-11-24T03:47:04Z",sageScore:3,diffs:[{njs:15,offset:0,notes:278,bombs:0,obstacles:2,nps:5.066,length:109.75,characteristic:"Standard",difficulty:"ExpertPlus",events:280,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:46.049,paritySummary:{errors:52,warns:17,resets:0}}],downloadURL:"https://cdn.beatsaver.com/c7bdbfea113219f8b372ca6107540995c2e81997.zip",coverURL:"https://cdn.beatsaver.com/c7bdbfea113219f8b372ca6107540995c2e81997.jpg",previewURL:"https://cdn.beatsaver.com/c7bdbfea113219f8b372ca6107540995c2e81997.mp3"}],createdAt:"2018-11-24T03:47:04Z",updatedAt:"2018-11-24T03:47:04Z",lastPublishedAt:"2018-11-24T03:47:04Z"},{id:"a76b",name:"BB 2020 | PSYQUI feat. Marpril - Girly Cupid | 18 | Submission #47",description:"This is a submission for the Building Blocks 2020 mapping contest!\n\nAll submissions are anonymous and will be uploaded by the BuildingBlocks account from May 3rd-May 17th 2020.\n\nInterested in checking out more map submissions or entering yourself? Join our discord here: https://discord.gg/3VAPcdg\n\nRequired Plugins:\nNoodle Extension\nChroma",uploader:{id:27741,name:"buildingblocks",uniqueSet:!0,hash:"5eac7bb67abb000006beca92",avatar:"https://www.gravatar.com/avatar/5eac7bb67abb000006beca92?d=retro",type:"SIMPLE"},metadata:{bpm:133,duration:244,songName:"Girly Cupid",songSubName:"feat. Marpril",songAuthorName:"PSYQUI",levelAuthorName:"Building Blocks 2020"},stats:{plays:0,downloads:1140,upvotes:1003,downvotes:13,score:.9266},uploaded:"2020-05-17T20:45:31.509Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"55cd8d585f6e63fb9b06d7c7358bda53f821fa81",key:"a76b",state:"Published",createdAt:"2020-05-17T20:45:31.509Z",sageScore:3,diffs:[{njs:18,offset:-.2,notes:764,bombs:0,obstacles:36331,nps:3.232,length:524,characteristic:"Standard",difficulty:"Expert",events:3539,chroma:!0,me:!1,ne:!0,cinema:!1,seconds:236.391,paritySummary:{errors:28,warns:16,resets:0}}],downloadURL:"https://cdn.beatsaver.com/55cd8d585f6e63fb9b06d7c7358bda53f821fa81.zip",coverURL:"https://cdn.beatsaver.com/55cd8d585f6e63fb9b06d7c7358bda53f821fa81.jpg",previewURL:"https://cdn.beatsaver.com/55cd8d585f6e63fb9b06d7c7358bda53f821fa81.mp3"}],createdAt:"2020-05-17T20:45:31.509Z",updatedAt:"2020-05-17T20:45:31.509Z",lastPublishedAt:"2020-05-17T20:45:31.509Z"},{id:"6368",name:"Mimimi - Nightcore",description:"Youtube Preview: https://youtu.be/vqVK85T72hs",uploader:{id:23751,name:"monteblanco",uniqueSet:!0,hash:"5cff0b7798cc5a672c855ef5",avatar:"https://www.gravatar.com/avatar/5cff0b7798cc5a672c855ef5?d=retro",type:"SIMPLE"},metadata:{bpm:144.6,duration:167,songName:"Mi Mi Mi - Nightcore",songSubName:"",songAuthorName:"NightcoreZodiac",levelAuthorName:"Monteblanco"},stats:{plays:0,downloads:2275,upvotes:1677,downvotes:39,score:.9266},uploaded:"2019-09-14T22:08:05.659Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"448f6e65098a9b0d2de0c5b87a53300a61795eb3",key:"6368",state:"Published",createdAt:"2019-09-14T22:08:05.659Z",sageScore:4,diffs:[{njs:16,offset:0,notes:755,bombs:0,obstacles:2,nps:4.648,length:391.5,characteristic:"Standard",difficulty:"Expert",events:859,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:162.448,paritySummary:{errors:0,warns:0,resets:0}}],downloadURL:"https://cdn.beatsaver.com/448f6e65098a9b0d2de0c5b87a53300a61795eb3.zip",coverURL:"https://cdn.beatsaver.com/448f6e65098a9b0d2de0c5b87a53300a61795eb3.jpg",previewURL:"https://cdn.beatsaver.com/448f6e65098a9b0d2de0c5b87a53300a61795eb3.mp3"}],createdAt:"2019-09-14T22:08:05.659Z",updatedAt:"2019-09-14T22:08:05.659Z",lastPublishedAt:"2019-09-14T22:08:05.659Z"},{id:"51fd",name:"BLOODY STREAM",description:"For the Jojo Fans",uploader:{id:4284704,name:"epg7ens",uniqueSet:!0,hash:"5cff0b7798cc5a672c855bb6",avatar:"https://cdn.beatsaver.com/avatar/174643589618466816.png",type:"DISCORD"},metadata:{bpm:132,duration:259,songName:"BLOODY STREAM",songSubName:"Coda",songAuthorName:"EPG7ENS",levelAuthorName:"EPG7ENS"},stats:{plays:0,downloads:3172,upvotes:2054,downvotes:55,score:.9266},uploaded:"2019-06-07T06:27:36Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"7d5038dd8aae109cbe537ecbc6c38ec458c820f8",key:"51fd",state:"Published",createdAt:"2019-06-07T06:27:36Z",sageScore:5,diffs:[{njs:17,offset:0,notes:1448,bombs:0,obstacles:0,nps:5.648,length:564,characteristic:"Standard",difficulty:"ExpertPlus",events:2746,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:256.364,paritySummary:{errors:2,warns:3,resets:0}}],downloadURL:"https://cdn.beatsaver.com/7d5038dd8aae109cbe537ecbc6c38ec458c820f8.zip",coverURL:"https://cdn.beatsaver.com/7d5038dd8aae109cbe537ecbc6c38ec458c820f8.jpg",previewURL:"https://cdn.beatsaver.com/7d5038dd8aae109cbe537ecbc6c38ec458c820f8.mp3"}],createdAt:"2019-06-07T06:27:36Z",updatedAt:"2019-06-07T06:27:36Z",lastPublishedAt:"2019-06-07T06:27:36Z"},{id:"4b20",name:"[Anniversary] Booty Bounce - Tujamo & Taio Cruz [Fafurion]",description:"Part of the Anniversary Song Pack\r\nExpert+ must be unlocked via the Anniversary Campaign\r\nEdit: Fixed notes placed after song is finished",uploader:{id:37070,name:"anniversaryteam",uniqueSet:!0,hash:"5cff0b7798cc5a672c8565a3",avatar:"https://www.gravatar.com/avatar/5cff0b7798cc5a672c8565a3?d=retro",type:"SIMPLE"},metadata:{bpm:128,duration:198,songName:"Booty Bounce",songSubName:"Tujamo & Taio Cruz",songAuthorName:"Fafurion",levelAuthorName:"AnniversaryTeam"},stats:{plays:0,downloads:4060,upvotes:1819,downvotes:45,score:.9266},uploaded:"2019-05-07T03:38:08Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"d106db545bccd0bba2432b71d94bb7f94fd1f9a2",key:"4b20",state:"Published",createdAt:"2019-05-07T03:38:08Z",sageScore:7,diffs:[{njs:13,offset:0,notes:366,bombs:0,obstacles:0,nps:1.881,length:415,characteristic:"Standard",difficulty:"Easy",events:6151,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:194.531,paritySummary:{errors:6,warns:0,resets:0}},{njs:13,offset:0,notes:550,bombs:0,obstacles:0,nps:2.824,length:415.5,characteristic:"Standard",difficulty:"Normal",events:6151,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:194.766,paritySummary:{errors:6,warns:0,resets:0}},{njs:13,offset:0,notes:732,bombs:0,obstacles:0,nps:3.756,length:415.75,characteristic:"Standard",difficulty:"Hard",events:6151,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:194.883,paritySummary:{errors:20,warns:16,resets:0}},{njs:15,offset:0,notes:874,bombs:0,obstacles:0,nps:4.485,length:415.75,characteristic:"Standard",difficulty:"Expert",events:6151,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:194.883,paritySummary:{errors:28,warns:34,resets:0}},{njs:15,offset:0,notes:938,bombs:0,obstacles:0,nps:4.813,length:415.75,characteristic:"Standard",difficulty:"ExpertPlus",events:6151,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:194.883,paritySummary:{errors:32,warns:34,resets:0}}],downloadURL:"https://cdn.beatsaver.com/d106db545bccd0bba2432b71d94bb7f94fd1f9a2.zip",coverURL:"https://cdn.beatsaver.com/d106db545bccd0bba2432b71d94bb7f94fd1f9a2.jpg",previewURL:"https://cdn.beatsaver.com/d106db545bccd0bba2432b71d94bb7f94fd1f9a2.mp3"}],createdAt:"2019-05-07T03:38:08Z",updatedAt:"2019-05-07T03:38:08Z",lastPublishedAt:"2019-05-07T03:38:08Z"},{id:"672f",name:"Kyouran Hey Kids!! [TV Size] - THE ORAL CIGARETTES (Noragami Aragoto Opening)",description:"Added a more comfortable diff which is more similar to my usual mapping style. If you don't like Ex+, play 'Shinki' for more comfort :) Also included a Hard diff for new players to enjoy this amazing song!\n\nPreview(Shinki) by Monteblanco: https://www.youtube.com/watch?v=9g9k1PomJGc\n\nHard: 369 Notes\nExpert+: 582 Notes\nShinki: 484 Notes\nLighting: 2243 Events",uploader:{id:4285130,name:"zoinkai__",uniqueSet:!0,hash:"5d465581f9bbae00060f3215",avatar:"https://cdn.beatsaver.com/avatar/146677763347185665.png",type:"DISCORD"},metadata:{bpm:142,duration:91,songName:"Kyouran Hey Kids!! (TV Size)",songSubName:"Noragami Aragoto Opening (V2)",songAuthorName:"THE ORAL CIGARETTES",levelAuthorName:"Zoinkai"},stats:{plays:0,downloads:3439,upvotes:1294,downvotes:24,score:.9264},uploaded:"2019-10-01T14:49:19.005Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"ad82ca6317e82318db8281f8902952f9d6175d3e",key:"672f",state:"Published",createdAt:"2019-10-01T14:49:19.005Z",sageScore:6,diffs:[{njs:12,offset:0,notes:369,bombs:0,obstacles:21,nps:4.456,length:196,characteristic:"Standard",difficulty:"Hard",events:2243,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:82.817,paritySummary:{errors:0,warns:0,resets:0}},{njs:18,offset:0,notes:582,bombs:7,obstacles:33,nps:6.622,length:208,characteristic:"Standard",difficulty:"Expert",events:2243,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:87.887,paritySummary:{errors:6,warns:10,resets:1}},{njs:18,offset:0,notes:484,bombs:13,obstacles:34,nps:5.507,length:208,characteristic:"Standard",difficulty:"ExpertPlus",events:2243,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:87.887,paritySummary:{errors:5,warns:13,resets:2}}],downloadURL:"https://cdn.beatsaver.com/ad82ca6317e82318db8281f8902952f9d6175d3e.zip",coverURL:"https://cdn.beatsaver.com/ad82ca6317e82318db8281f8902952f9d6175d3e.jpg",previewURL:"https://cdn.beatsaver.com/ad82ca6317e82318db8281f8902952f9d6175d3e.mp3"}],createdAt:"2019-10-01T14:49:19.005Z",updatedAt:"2019-10-01T14:49:19.005Z",lastPublishedAt:"2019-10-01T14:49:19.005Z"},{id:"5d26",name:"[Anniversary] Dancin (Krono Remix) - Aaron Smith [Skyler Wallace & Rexxz]",description:"Part of the Anniversary Song Pack",uploader:{id:37070,name:"anniversaryteam",uniqueSet:!0,hash:"5cff0b7798cc5a672c8565a3",avatar:"https://www.gravatar.com/avatar/5cff0b7798cc5a672c8565a3?d=retro",type:"SIMPLE"},metadata:{bpm:120,duration:198,songName:"Dancin",songSubName:"Krono Remix",songAuthorName:"Aaron Smith",levelAuthorName:"Skyler Wallace & Rexxz"},stats:{plays:0,downloads:7081,upvotes:2783,downvotes:89,score:.9263},uploaded:"2019-08-16T01:48:15.139Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"52cf3774ef1705f2830a85ad3147be9c52c795af",key:"5d26",state:"Published",createdAt:"2019-08-16T01:48:15.139Z",sageScore:7,diffs:[{njs:10,offset:1,notes:232,bombs:0,obstacles:8,nps:1.215,length:382,characteristic:"Standard",difficulty:"Easy",events:7824,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:191,paritySummary:{errors:57,warns:26,resets:0}},{njs:10,offset:1,notes:280,bombs:0,obstacles:0,nps:1.458,length:384,characteristic:"Standard",difficulty:"Normal",events:7824,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:192,paritySummary:{errors:71,warns:47,resets:0}},{njs:10,offset:1,notes:386,bombs:0,obstacles:4,nps:2.01,length:384,characteristic:"Standard",difficulty:"Hard",events:7824,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:192,paritySummary:{errors:68,warns:47,resets:0}},{njs:14,offset:0,notes:594,bombs:0,obstacles:0,nps:3.094,length:384,characteristic:"Standard",difficulty:"Expert",events:7824,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:192,paritySummary:{errors:52,warns:59,resets:0}},{njs:14,offset:0,notes:793,bombs:0,obstacles:30,nps:4.13,length:384,characteristic:"Standard",difficulty:"ExpertPlus",events:7824,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:192,paritySummary:{errors:81,warns:81,resets:0}}],downloadURL:"https://cdn.beatsaver.com/52cf3774ef1705f2830a85ad3147be9c52c795af.zip",coverURL:"https://cdn.beatsaver.com/52cf3774ef1705f2830a85ad3147be9c52c795af.jpg",previewURL:"https://cdn.beatsaver.com/52cf3774ef1705f2830a85ad3147be9c52c795af.mp3"}],createdAt:"2019-08-16T01:48:15.139Z",updatedAt:"2019-08-16T01:48:15.139Z",lastPublishedAt:"2019-08-16T01:48:15.139Z"},{id:"32e",name:"Daft Punk - Harder Better Faster Stronger",description:"Expert & Hard | 600+ Blocks | Full Song 3:44 | Includes Lighting. Request to: @themakertales",uploader:{id:51740,name:"runrockgame",uniqueSet:!1,hash:"5cff0b7398cc5a672c84f04e",avatar:"https://www.gravatar.com/avatar/5cff0b7398cc5a672c84f04e?d=retro",type:"SIMPLE"},metadata:{bpm:123,duration:224,songName:"Harder Better Faster Stronger",songSubName:"Daft Punk",songAuthorName:"RunRockGame",levelAuthorName:"runrockgame"},stats:{plays:0,downloads:14652,upvotes:15728,downvotes:820,score:.9263},uploaded:"2018-06-01T18:01:45Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"7c7f38d467bb43fe11a142581e63e324622ecc71",key:"32e",state:"Published",createdAt:"2018-06-01T18:01:45Z",sageScore:6,diffs:[{njs:10,offset:0,notes:423,bombs:57,obstacles:33,nps:1.381,length:630.5,characteristic:"Standard",difficulty:"Hard",events:1618,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:307.561,paritySummary:{errors:95,warns:38,resets:16}},{njs:10,offset:0,notes:616,bombs:68,obstacles:33,nps:2.011,length:630.5,characteristic:"Standard",difficulty:"Expert",events:1618,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:307.561,paritySummary:{errors:60,warns:83,resets:14}}],downloadURL:"https://cdn.beatsaver.com/7c7f38d467bb43fe11a142581e63e324622ecc71.zip",coverURL:"https://cdn.beatsaver.com/7c7f38d467bb43fe11a142581e63e324622ecc71.jpg",previewURL:"https://cdn.beatsaver.com/7c7f38d467bb43fe11a142581e63e324622ecc71.mp3"}],createdAt:"2018-06-01T18:01:45Z",updatedAt:"2018-06-01T18:01:45Z",lastPublishedAt:"2018-06-01T18:01:45Z"},{id:"636",name:"Burn - Ellie Goulding",description:"Difficulties: Expert, Hard, Normal\r\nCome Hang Out on Twitch! http://www.twitch.tv/bennydabeastlive\r\nYouTube Link: https://youtu.be/KOdvSdrnaeE\r\n\r\nIf you like this, check out my other beat maps:\r\nUptown Funk: https://beatsaver.com/details.php?id=1962\r\nCAN'T STOP THE FEELING by Justin Timberlake: https://beatsaver.com/details.php?id=1587\r\nMidnight City by M83: https://beatsaver.com/details.php?id=542\r\nKids by MGMT: https://beatsaver.com/details.php?id=421\r\nWhat You Know by Two Door Cinema Club: https://beatsaver.com/details.php?id=1107\r\nPolish Girl by Neon Indian: https://beatsaver.com/details.php?id=694",uploader:{id:30311,name:"bennydabeast",uniqueSet:!0,hash:"5cff0b7298cc5a672c84e98d",avatar:"https://cdn.beatsaver.com/avatar/30311.jpg",type:"SIMPLE"},metadata:{bpm:174,duration:233,songName:"Burn",songSubName:"Ellie Goulding",songAuthorName:"BennyDaBeast",levelAuthorName:"bennydabeast"},stats:{plays:0,downloads:14492,upvotes:7023,downvotes:311,score:.9262},uploaded:"2018-06-22T20:31:34Z",automapper:!1,ranked:!0,qualified:!1,versions:[{hash:"9d31d3aab3d58ab540df63caed06d62ff1cfefdd",key:"636",state:"Published",createdAt:"2018-06-22T20:31:34Z",sageScore:7,diffs:[{njs:10,offset:0,notes:438,bombs:12,obstacles:8,nps:1.58,length:804,characteristic:"Standard",difficulty:"Easy",events:396,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:277.241,paritySummary:{errors:107,warns:62,resets:0}},{njs:10,offset:0,notes:519,bombs:12,obstacles:8,nps:1.872,length:804,characteristic:"Standard",difficulty:"Hard",events:396,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:277.241,paritySummary:{errors:67,warns:109,resets:0}},{njs:10,offset:0,notes:686,bombs:12,obstacles:8,nps:3.251,length:612,characteristic:"Standard",difficulty:"Expert",events:396,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:211.034,paritySummary:{errors:120,warns:168,resets:0},stars:2.37}],downloadURL:"https://cdn.beatsaver.com/9d31d3aab3d58ab540df63caed06d62ff1cfefdd.zip",coverURL:"https://cdn.beatsaver.com/9d31d3aab3d58ab540df63caed06d62ff1cfefdd.jpg",previewURL:"https://cdn.beatsaver.com/9d31d3aab3d58ab540df63caed06d62ff1cfefdd.mp3"}],createdAt:"2018-06-22T20:31:34Z",updatedAt:"2018-06-22T20:31:34Z",lastPublishedAt:"2018-06-22T20:31:34Z"},{id:"b662",name:"PREPARING THE KRABBY PATTY",description:"Just a funny little map I made a couple weeks ago. I thought you might enjoy it so I'm releasing it now.\r\nI hope you enjoy.\r\n\r\nThe song is from the SpongeBob episode, Krusty Krab Training Video.\r\nEpisode Info: https://spongebob.fandom.com/wiki/Krusty_Krab_Training_Video",uploader:{id:4284694,name:"jokidum",uniqueSet:!0,hash:"5e15518d47f1600006e912cc",avatar:"https://cdn.beatsaver.com/avatar/494282373094047745.png",type:"DISCORD"},metadata:{bpm:145,duration:37,songName:"PREPARING THE KRABBY PATTY",songSubName:"",songAuthorName:"SpongeBob SquarePants",levelAuthorName:"Jokidum"},stats:{plays:0,downloads:2731,upvotes:1125,downvotes:18,score:.9261},uploaded:"2020-06-26T20:00:17.824Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"f931e1d23e0fad3b1ac22d86c55ab17718470b6d",key:"b662",state:"Published",createdAt:"2020-06-26T20:00:17.824Z",sageScore:-2,diffs:[{njs:12,offset:0,notes:165,bombs:0,obstacles:2,nps:5.75,length:69.344,characteristic:"Standard",difficulty:"ExpertPlus",events:628,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:28.694,paritySummary:{errors:0,warns:0,resets:0}}],downloadURL:"https://cdn.beatsaver.com/f931e1d23e0fad3b1ac22d86c55ab17718470b6d.zip",coverURL:"https://cdn.beatsaver.com/f931e1d23e0fad3b1ac22d86c55ab17718470b6d.jpg",previewURL:"https://cdn.beatsaver.com/f931e1d23e0fad3b1ac22d86c55ab17718470b6d.mp3"}],createdAt:"2020-06-26T20:00:17.824Z",updatedAt:"2020-06-26T20:00:17.824Z",lastPublishedAt:"2020-06-26T20:00:17.824Z"},{id:"6381",name:"Caravan Palace - Moonshine",description:"Easy, Normal, Hard, Expert, ExpertPlus\n\nE+: https://www.youtube.com/watch?v=pQFgyOkFdgM\n\nRequested by laser",uploader:{id:4235138,name:"CyanSnow",uniqueSet:!0,hash:"5cff0b7698cc5a672c8543ac",avatar:"https://cdn.beatsaver.com/avatar/154341137694326784.png",type:"DISCORD"},metadata:{bpm:117,duration:215,songName:"Moonshine",songSubName:"",songAuthorName:"Caravan Palace",levelAuthorName:"CyanSnow"},stats:{plays:0,downloads:3301,upvotes:1700,downvotes:41,score:.9261},uploaded:"2019-09-15T02:18:33.112Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"fd8d96de2a21cd4c56c6657214bb88e1b127b471",key:"6381",state:"Published",createdAt:"2019-09-15T02:18:33.112Z",sageScore:8,diffs:[{njs:12,offset:.5,notes:260,bombs:0,obstacles:23,nps:1.24,length:409,characteristic:"Standard",difficulty:"Easy",events:3302,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:209.744,paritySummary:{errors:96,warns:14,resets:0}},{njs:12,offset:.5,notes:376,bombs:0,obstacles:23,nps:1.793,length:409,characteristic:"Standard",difficulty:"Normal",events:3302,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:209.744,paritySummary:{errors:38,warns:19,resets:0}},{njs:13,offset:.25,notes:596,bombs:0,obstacles:10,nps:2.856,length:407,characteristic:"Standard",difficulty:"Hard",events:3302,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:208.718,paritySummary:{errors:7,warns:7,resets:0}},{njs:15,offset:0,notes:691,bombs:0,obstacles:9,nps:3.311,length:407,characteristic:"Standard",difficulty:"Expert",events:3302,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:208.718,paritySummary:{errors:7,warns:11,resets:0}},{njs:17,offset:-.25,notes:1302,bombs:0,obstacles:8,nps:6.2,length:409.5,characteristic:"Standard",difficulty:"ExpertPlus",events:3299,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:210,paritySummary:{errors:3,warns:3,resets:0}}],downloadURL:"https://cdn.beatsaver.com/fd8d96de2a21cd4c56c6657214bb88e1b127b471.zip",coverURL:"https://cdn.beatsaver.com/fd8d96de2a21cd4c56c6657214bb88e1b127b471.jpg",previewURL:"https://cdn.beatsaver.com/fd8d96de2a21cd4c56c6657214bb88e1b127b471.mp3"}],createdAt:"2019-09-15T02:18:33.112Z",updatedAt:"2019-09-15T02:18:33.112Z",lastPublishedAt:"2019-09-15T02:18:33.112Z"},{id:"8570",name:"Dua Lipa - Physical",description:"Physical - The first difficulty is Hard but is mislabeled as Expert. I have no way to update this sorry! The second difficulty is Expert.",uploader:{id:4285261,name:"yomama",uniqueSet:!0,hash:"5e23f0a1054bbd0007bc1ed4",avatar:"https://cdn.beatsaver.com/avatar/153595294792155137.png",type:"DISCORD"},metadata:{bpm:147,duration:195,songName:"Physical",songSubName:"",songAuthorName:"Dua Lipa",levelAuthorName:"yomama"},stats:{plays:0,downloads:4086,upvotes:1554,downvotes:35,score:.926},uploaded:"2020-02-09T03:16:30.433Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"ab7c911471a652de2ba74bd6df2a4cbbc5d45fee",key:"8570",state:"Published",createdAt:"2020-02-09T03:16:30.433Z",sageScore:4,diffs:[{njs:10,offset:0,notes:767,bombs:0,obstacles:33,nps:4.059,length:463,characteristic:"Standard",difficulty:"Hard",events:2281,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:188.98,paritySummary:{errors:105,warns:24,resets:0}},{njs:14,offset:0,notes:841,bombs:0,obstacles:33,nps:4.45,length:463,characteristic:"Standard",difficulty:"Expert",events:1397,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:188.98,paritySummary:{errors:101,warns:44,resets:0}}],downloadURL:"https://cdn.beatsaver.com/ab7c911471a652de2ba74bd6df2a4cbbc5d45fee.zip",coverURL:"https://cdn.beatsaver.com/ab7c911471a652de2ba74bd6df2a4cbbc5d45fee.jpg",previewURL:"https://cdn.beatsaver.com/ab7c911471a652de2ba74bd6df2a4cbbc5d45fee.mp3"}],createdAt:"2020-02-09T03:16:30.433Z",updatedAt:"2020-02-09T03:16:30.433Z",lastPublishedAt:"2020-02-09T03:16:30.433Z"},{id:"6f60",name:"True Damage - GIANTS",description:"PepeJamJam ",uploader:{id:4285107,name:"kikaeaeon",uniqueSet:!0,hash:"5cff0b7498cc5a672c85109b",avatar:"https://cdn.beatsaver.com/avatar/103715469822816256.png",type:"DISCORD"},metadata:{bpm:155,duration:193,songName:"GIANTS",songSubName:"",songAuthorName:"True Damage",levelAuthorName:"KikaeAeon"},stats:{plays:0,downloads:7189,upvotes:2503,downvotes:77,score:.926},uploaded:"2019-11-11T08:43:31.658Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"7fba5d716708d625428985bbead477321c419240",key:"6f60",state:"Published",createdAt:"2019-11-11T08:43:31.658Z",sageScore:7,diffs:[{njs:10,offset:0,notes:418,bombs:0,obstacles:68,nps:2.279,length:473.72,characteristic:"Standard",difficulty:"Hard",events:1150,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:183.376,paritySummary:{errors:21,warns:7,resets:0}},{njs:12,offset:0,notes:633,bombs:0,obstacles:54,nps:3.452,length:473.72,characteristic:"Standard",difficulty:"Expert",events:1150,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:183.376,paritySummary:{errors:12,warns:14,resets:0}},{njs:16,offset:0,notes:863,bombs:0,obstacles:59,nps:4.705,length:473.84,characteristic:"Standard",difficulty:"ExpertPlus",events:1150,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:183.422,paritySummary:{errors:30,warns:55,resets:0}}],downloadURL:"https://cdn.beatsaver.com/7fba5d716708d625428985bbead477321c419240.zip",coverURL:"https://cdn.beatsaver.com/7fba5d716708d625428985bbead477321c419240.jpg",previewURL:"https://cdn.beatsaver.com/7fba5d716708d625428985bbead477321c419240.mp3"}],createdAt:"2019-11-11T08:43:31.658Z",updatedAt:"2019-11-11T08:43:31.658Z",lastPublishedAt:"2019-11-11T08:43:31.658Z"},{id:"c208",name:"[Alphabeat - Pegboard Nerds Pack] Pegboard Nerds - Disconnected",description:"Part of the Pegboard Nerds Music Pack - Presented by the Alphabeat Mapping Group.\n\nAlphabeat is a mapping group that currently consists of 6 members, 4 of which have made this pack. This Pegboard Nerds pack is brought to you by Timeweaver, Rayman9515, KuritsaDBS & FireStrike!\n\nThis map uses a custom platform made by Rayman! Download it here: https://modelsaber.com/Platforms/?id=1594988870\n\nAll songs included in this pack:\n- Gunslinga (Mapped by Rayman)\n- Coffins (Mapped by Rayman)\n- Superstar (Mapped by Timeweaver & Firestrike)\n- Razor Sharp (Mapped by Firestrike)\n- Luigi’s Mansion (Mapped by Rayman)\n- Try This (Mapped by Timeweaver & Firestrike)\n- Swamp Thing (Mapped by Rayman & KuritsaDVR)\n- Exterminate (Mapped by Timeweaver)\n- Disconnected (Mapped by Timeweaver & Firestrike)\n- Here it Comes (Mapped by KuritsaDVR & Timeweaver)\nGet the playlist here: Coming Soon\n\nCheck everyone out:\nRayman: https://beatsaver.com/uploader/5dc6edac6dea0b0006c18486\nFirestrike: https://beatsaver.com/uploader/5cff0b7498cc5a672c85055a\nKuritsaDBS: https://beatsaver.com/uploader/5cff0b7698cc5a672c8537ef\n\nIncludes\n- 5 Standard Difficulties\n- 1 One Saber Difficulty",uploader:{id:4284197,name:"timeweaver",uniqueSet:!0,hash:"5d47d586c5301900060b2f6c",avatar:"https://cdn.beatsaver.com/avatar/607399708121366529.png",type:"DISCORD"},metadata:{bpm:128,duration:212,songName:"Disconnected",songSubName:"",songAuthorName:"Pegboard Nerds",levelAuthorName:"FireStrike & Timeweaver"},stats:{plays:0,downloads:4098,upvotes:1198,downvotes:21,score:.9259},uploaded:"2020-07-17T13:00:44.293Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"423bd0a80440bcc9dda9dbe20a72ed235dfc3e84",key:"c208",state:"Published",createdAt:"2020-07-17T13:00:44.293Z",sageScore:7,diffs:[{njs:9,offset:0,notes:274,bombs:0,obstacles:43,nps:1.319,length:443,characteristic:"Standard",difficulty:"Easy",events:4547,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:207.656,paritySummary:{errors:82,warns:16,resets:0}},{njs:10,offset:1,notes:374,bombs:0,obstacles:58,nps:1.799,length:443.5,characteristic:"Standard",difficulty:"Normal",events:4547,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:207.891,paritySummary:{errors:62,warns:42,resets:0}},{njs:12,offset:.5,notes:567,bombs:0,obstacles:60,nps:2.727,length:443.5,characteristic:"Standard",difficulty:"Hard",events:4547,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:207.891,paritySummary:{errors:31,warns:22,resets:0}},{njs:15,offset:0,notes:777,bombs:0,obstacles:73,nps:3.738,length:443.5,characteristic:"Standard",difficulty:"Expert",events:4547,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:207.891,paritySummary:{errors:2,warns:0,resets:0}},{njs:17,offset:-.25,notes:957,bombs:114,obstacles:56,nps:4.603,length:443.5,characteristic:"Standard",difficulty:"ExpertPlus",events:4547,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:207.891,paritySummary:{errors:0,warns:2,resets:0}},{njs:15,offset:0,notes:611,bombs:0,obstacles:85,nps:2.939,length:443.5,characteristic:"OneSaber",difficulty:"Expert",events:4548,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:207.891,paritySummary:{errors:0,warns:1,resets:0}}],downloadURL:"https://cdn.beatsaver.com/423bd0a80440bcc9dda9dbe20a72ed235dfc3e84.zip",coverURL:"https://cdn.beatsaver.com/423bd0a80440bcc9dda9dbe20a72ed235dfc3e84.jpg",previewURL:"https://cdn.beatsaver.com/423bd0a80440bcc9dda9dbe20a72ed235dfc3e84.mp3"}],createdAt:"2020-07-17T13:00:44.293Z",updatedAt:"2020-07-17T13:00:44.293Z",lastPublishedAt:"2020-07-17T13:00:44.293Z"},{id:"1fed",name:"Change The World - Fox Blanco - 100k Contest",description:"This is one of the 22 maps that were mapped for the 100k Contest where you can win over $7,000 in prizes. Go to https://bsaber.com/100k-contest/ to register!",uploader:{id:13320,name:"novashaft",uniqueSet:!0,hash:"5cff0b7398cc5a672c84ee55",avatar:"https://www.gravatar.com/avatar/5cff0b7398cc5a672c84ee55?d=retro",type:"SIMPLE"},metadata:{bpm:126,duration:179,songName:"Change The World",songSubName:"Fox Blanco",songAuthorName:"NovaShaft",levelAuthorName:"novashaft"},stats:{plays:0,downloads:4075,upvotes:1249,downvotes:23,score:.9259},uploaded:"2018-11-12T17:42:26Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"fcc70ede2fcbd648a25a954e6928a14985f1fbe8",key:"1fed",state:"Published",createdAt:"2018-11-12T17:42:26Z",sageScore:5,diffs:[{njs:10,offset:0,notes:245,bombs:0,obstacles:18,nps:1.4,length:367.5,characteristic:"Standard",difficulty:"Easy",events:889,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:175,paritySummary:{errors:25,warns:4,resets:0}},{njs:10,offset:0,notes:321,bombs:0,obstacles:19,nps:1.834,length:367.5,characteristic:"Standard",difficulty:"Normal",events:889,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:175,paritySummary:{errors:35,warns:6,resets:0}},{njs:10,offset:0,notes:443,bombs:0,obstacles:19,nps:2.531,length:367.5,characteristic:"Standard",difficulty:"Hard",events:889,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:175,paritySummary:{errors:26,warns:9,resets:0}},{njs:12,offset:0,notes:531,bombs:0,obstacles:19,nps:3.034,length:367.5,characteristic:"Standard",difficulty:"Expert",events:889,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:175,paritySummary:{errors:40,warns:34,resets:0}}],downloadURL:"https://cdn.beatsaver.com/fcc70ede2fcbd648a25a954e6928a14985f1fbe8.zip",coverURL:"https://cdn.beatsaver.com/fcc70ede2fcbd648a25a954e6928a14985f1fbe8.jpg",previewURL:"https://cdn.beatsaver.com/fcc70ede2fcbd648a25a954e6928a14985f1fbe8.mp3"}],createdAt:"2018-11-12T17:42:26Z",updatedAt:"2018-11-12T17:42:26Z",lastPublishedAt:"2018-11-12T17:42:26Z"},{id:"3023",name:"Houdini - Foster The People",description:"Expert Playthrough : https://youtu.be/6Fk164IwVyU",uploader:{id:13320,name:"novashaft",uniqueSet:!0,hash:"5cff0b7398cc5a672c84ee55",avatar:"https://www.gravatar.com/avatar/5cff0b7398cc5a672c84ee55?d=retro",type:"SIMPLE"},metadata:{bpm:110,duration:204,songName:"Houdini",songSubName:"Foster The People",songAuthorName:"NovaShaft",levelAuthorName:"novashaft"},stats:{plays:0,downloads:3836,upvotes:1087,downvotes:17,score:.9258},uploaded:"2019-01-22T19:02:49Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"c50641c7f73470e5368ab6957bedca3b2e620edc",key:"3023",state:"Published",createdAt:"2019-01-22T19:02:49Z",sageScore:6,diffs:[{njs:10,offset:0,notes:367,bombs:0,obstacles:27,nps:1.838,length:366,characteristic:"Standard",difficulty:"Normal",events:1163,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:199.636,paritySummary:{errors:30,warns:20,resets:0}},{njs:11,offset:0,notes:522,bombs:0,obstacles:27,nps:2.615,length:366,characteristic:"Standard",difficulty:"Hard",events:1163,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:199.636,paritySummary:{errors:38,warns:29,resets:0}},{njs:12,offset:0,notes:829,bombs:0,obstacles:27,nps:4.153,length:366,characteristic:"Standard",difficulty:"Expert",events:1163,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:199.636,paritySummary:{errors:41,warns:33,resets:0}}],downloadURL:"https://cdn.beatsaver.com/c50641c7f73470e5368ab6957bedca3b2e620edc.zip",coverURL:"https://cdn.beatsaver.com/c50641c7f73470e5368ab6957bedca3b2e620edc.jpg",previewURL:"https://cdn.beatsaver.com/c50641c7f73470e5368ab6957bedca3b2e620edc.mp3"}],createdAt:"2019-01-22T19:02:49Z",updatedAt:"2019-01-22T19:02:49Z",lastPublishedAt:"2019-01-22T19:02:49Z"},{id:"849c",name:"Nightcore - Sweet but Psycho",description:"Youtube Preview: https://youtu.be/7u9Z8z-25ro",uploader:{id:23751,name:"monteblanco",uniqueSet:!0,hash:"5cff0b7798cc5a672c855ef5",avatar:"https://www.gravatar.com/avatar/5cff0b7798cc5a672c855ef5?d=retro",type:"SIMPLE"},metadata:{bpm:148,duration:167,songName:"Nightcore - Sweet but Psycho",songSubName:"",songAuthorName:"Syrex",levelAuthorName:"Monteblanco"},stats:{plays:0,downloads:2955,upvotes:1088,downvotes:17,score:.9258},uploaded:"2020-02-06T05:37:47.858Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"908f95d354d9a3861f94055772983d54cd12bdcd",key:"849c",state:"Published",createdAt:"2020-02-06T05:37:47.858Z",sageScore:2,diffs:[{njs:18,offset:0,notes:672,bombs:0,obstacles:0,nps:4.134,length:400,characteristic:"Standard",difficulty:"ExpertPlus",events:778,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:162.162,paritySummary:{errors:0,warns:0,resets:0}}],downloadURL:"https://cdn.beatsaver.com/908f95d354d9a3861f94055772983d54cd12bdcd.zip",coverURL:"https://cdn.beatsaver.com/908f95d354d9a3861f94055772983d54cd12bdcd.jpg",previewURL:"https://cdn.beatsaver.com/908f95d354d9a3861f94055772983d54cd12bdcd.mp3"}],createdAt:"2020-02-06T05:37:47.858Z",updatedAt:"2020-02-06T05:37:47.858Z",lastPublishedAt:"2020-02-06T05:37:47.858Z"},{id:"6cc2",name:"Tones And I - Dance Monkey",description:"Dance. :3",uploader:{id:4289959,name:"pinus-sp",uniqueSet:!0,hash:"5d9cd7b2e6a67600062ab0a9",avatar:"https://cdn.beatsaver.com/avatar/188777396441186304.png",type:"DISCORD"},metadata:{bpm:196,duration:211,songName:"Dance Monkey",songSubName:"",songAuthorName:"Tones and I",levelAuthorName:"Pinus Sp"},stats:{plays:0,downloads:7505,upvotes:5655,downvotes:239,score:.9258},uploaded:"2019-10-28T20:20:40.691Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"46bbda664ab28c94639d8991d924726c0803b023",key:"6cc2",state:"Published",createdAt:"2019-10-28T20:20:40.691Z",sageScore:5,diffs:[{njs:12,offset:0,notes:256,bombs:0,obstacles:76,nps:1.253,length:667.25,characteristic:"Standard",difficulty:"Normal",events:1140,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:204.26,paritySummary:{errors:133,warns:0,resets:0}},{njs:12,offset:0,notes:462,bombs:0,obstacles:88,nps:2.262,length:667.25,characteristic:"Standard",difficulty:"Hard",events:1140,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:204.26,paritySummary:{errors:265,warns:3,resets:0}},{njs:12,offset:0,notes:826,bombs:0,obstacles:88,nps:4.044,length:667.25,characteristic:"Standard",difficulty:"Expert",events:1140,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:204.26,paritySummary:{errors:132,warns:93,resets:0}}],downloadURL:"https://cdn.beatsaver.com/46bbda664ab28c94639d8991d924726c0803b023.zip",coverURL:"https://cdn.beatsaver.com/46bbda664ab28c94639d8991d924726c0803b023.jpg",previewURL:"https://cdn.beatsaver.com/46bbda664ab28c94639d8991d924726c0803b023.mp3"}],createdAt:"2019-10-28T20:20:40.691Z",updatedAt:"2019-10-28T20:20:40.691Z",lastPublishedAt:"2019-10-28T20:20:40.691Z"},{id:"5dbb",name:"Siames - The Wolf",description:"Video Preview: https://youtu.be/I68zZeXioyc\n\nDifficulty: Expert\nBPM: 96.1\nNotes: 632\nNJS: 12\nNPS: 3.32\nSong Duration: 3:10",uploader:{id:34679,name:"lukemortora",uniqueSet:!0,hash:"5cff0b7798cc5a672c855c16",avatar:"https://www.gravatar.com/avatar/5cff0b7798cc5a672c855c16?d=retro",type:"SIMPLE"},metadata:{bpm:96.1,duration:190,songName:"The Wolf",songSubName:"",songAuthorName:"Siames",levelAuthorName:"LukeMortora"},stats:{plays:0,downloads:1765,upvotes:1108,downvotes:18,score:.9257},uploaded:"2019-08-18T13:54:38.297Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"88ef5d6f1ce10e3cc85637b095cd46ee68f125ac",key:"5dbb",state:"Published",createdAt:"2019-08-18T13:54:38.297Z",sageScore:6,diffs:[{njs:13,offset:0,notes:632,bombs:60,obstacles:19,nps:3.467,length:292,characteristic:"Standard",difficulty:"Expert",events:1152,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:182.31,paritySummary:{errors:51,warns:53,resets:22}}],downloadURL:"https://cdn.beatsaver.com/88ef5d6f1ce10e3cc85637b095cd46ee68f125ac.zip",coverURL:"https://cdn.beatsaver.com/88ef5d6f1ce10e3cc85637b095cd46ee68f125ac.jpg",previewURL:"https://cdn.beatsaver.com/88ef5d6f1ce10e3cc85637b095cd46ee68f125ac.mp3"}],createdAt:"2019-08-18T13:54:38.297Z",updatedAt:"2019-08-18T13:54:38.297Z",lastPublishedAt:"2019-08-18T13:54:38.297Z"},{id:"8e98",name:"2WEI feat. Edda Hayes - Warriors",description:"Bit late on this one to be honest.\nOfficial Imagine Dragons cover from League of Legends season 2020 cinematic.\n\nvideo: https://youtu.be/Wl-GfMwC3i8\n\nEasy: Notes: 159 NPS: 0.91 NJS: 12\nNormal: Notes: 221 NPS: 1.26 NJS: 12\nHard: Notes: 288 NPS: 1.64 NJS: 15\nExpert: Notes: 373 NPS: 1.98 NJS: 17\nExpert+: Notes: 442 NPS: 2.35 NJS: 19\n\nCheck out my lightshows here: https://www.youtube.com/playlist?list=PLwl6dYq72JOYu1BnKl5WATa4Dh__ZJmuN",uploader:{id:14808,name:"halcyon12",uniqueSet:!0,hash:"5cff0b7698cc5a672c8547ad",avatar:"https://www.gravatar.com/avatar/5cff0b7698cc5a672c8547ad?d=retro",type:"SIMPLE"},metadata:{bpm:123,duration:204,songName:"Warriors",songSubName:"(feat. Edda Hayes)",songAuthorName:"2WEI, League of Legends",levelAuthorName:"Halcyon12"},stats:{plays:0,downloads:10351,upvotes:2900,downvotes:97,score:.9256},uploaded:"2020-03-09T01:22:45.508Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"3a49f1b40044ba90eb27963c29121537cec28a44",key:"8e98",state:"Published",createdAt:"2020-03-09T01:22:45.508Z",sageScore:8,diffs:[{njs:12,offset:1,notes:159,bombs:0,obstacles:21,nps:.91,length:358.292,characteristic:"Standard",difficulty:"Easy",events:3343,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:174.777,paritySummary:{errors:13,warns:2,resets:0}},{njs:14,offset:.5,notes:221,bombs:0,obstacles:35,nps:1.259,length:359.904,characteristic:"Standard",difficulty:"Normal",events:3343,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:175.563,paritySummary:{errors:9,warns:4,resets:0}},{njs:15,offset:0,notes:288,bombs:0,obstacles:54,nps:1.64,length:359.904,characteristic:"Standard",difficulty:"Hard",events:3343,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:175.563,paritySummary:{errors:0,warns:0,resets:0}},{njs:17,offset:-.25,notes:373,bombs:0,obstacles:34,nps:1.98,length:386.268,characteristic:"Standard",difficulty:"Expert",events:3343,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:188.424,paritySummary:{errors:0,warns:0,resets:0}},{njs:19,offset:.5,notes:442,bombs:0,obstacles:178,nps:2.346,length:386.268,characteristic:"Standard",difficulty:"ExpertPlus",events:3343,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:188.424,paritySummary:{errors:1,warns:0,resets:0}},{njs:12,offset:0,notes:0,bombs:0,obstacles:0,nps:0,length:0,characteristic:"Lightshow",difficulty:"ExpertPlus",events:3343,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:0,paritySummary:{errors:0,warns:0,resets:0}}],downloadURL:"https://cdn.beatsaver.com/3a49f1b40044ba90eb27963c29121537cec28a44.zip",coverURL:"https://cdn.beatsaver.com/3a49f1b40044ba90eb27963c29121537cec28a44.jpg",previewURL:"https://cdn.beatsaver.com/3a49f1b40044ba90eb27963c29121537cec28a44.mp3"}],createdAt:"2020-03-09T01:22:45.508Z",updatedAt:"2020-03-09T01:22:45.508Z",lastPublishedAt:"2020-03-09T01:22:45.508Z"},{id:"4fc3",name:"Doubt - twenty one pilots",description:"Nice relaxing and laid-back experience, even on Expert/Expert+. In-game voting is fixed too, so don't forget to update your mods!\r\n\r\nBPM: 123\r\n\r\nNotes: N - 409 ; H - 487 ; Ex - 668 ; Ex+ - 720\r\nWalls: N - 68 ; H - 42 ; Ex - 41 ; Ex+ - 40\r\nBombs: None!\r\n\r\nThanks to helencarnate and Qwasyx for playtesting!",uploader:{id:4285188,name:"fruhead",uniqueSet:!0,hash:"5cff0b7598cc5a672c852683",avatar:"https://cdn.beatsaver.com/avatar/174000100413145090.png",type:"DISCORD"},metadata:{bpm:123,duration:191,songName:"Doubt",songSubName:"twenty one pilots",songAuthorName:"fruhead",levelAuthorName:"fruhead"},stats:{plays:0,downloads:6089,upvotes:1160,downvotes:20,score:.9256},uploaded:"2019-05-29T18:36:45Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"bf166123a88a801f41aed10cff6c36f9f11f4cf3",key:"4fc3",state:"Published",createdAt:"2019-05-29T18:36:45Z",sageScore:4,diffs:[{njs:12,offset:0,notes:409,bombs:0,obstacles:68,nps:2.285,length:367,characteristic:"Standard",difficulty:"Normal",events:5750,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:179.024,paritySummary:{errors:13,warns:4,resets:0}},{njs:12,offset:0,notes:487,bombs:0,obstacles:42,nps:2.72,length:367,characteristic:"Standard",difficulty:"Hard",events:5750,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:179.024,paritySummary:{errors:11,warns:12,resets:0}},{njs:14,offset:0,notes:668,bombs:0,obstacles:41,nps:3.731,length:367,characteristic:"Standard",difficulty:"Expert",events:5750,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:179.024,paritySummary:{errors:20,warns:19,resets:0}},{njs:16,offset:0,notes:720,bombs:0,obstacles:41,nps:4.022,length:367,characteristic:"Standard",difficulty:"ExpertPlus",events:5750,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:179.024,paritySummary:{errors:18,warns:18,resets:0}}],downloadURL:"https://cdn.beatsaver.com/bf166123a88a801f41aed10cff6c36f9f11f4cf3.zip",coverURL:"https://cdn.beatsaver.com/bf166123a88a801f41aed10cff6c36f9f11f4cf3.jpg",previewURL:"https://cdn.beatsaver.com/bf166123a88a801f41aed10cff6c36f9f11f4cf3.mp3"}],createdAt:"2019-05-29T18:36:45Z",updatedAt:"2019-05-29T18:36:45Z",lastPublishedAt:"2019-05-29T18:36:45Z"},{id:"1362d",name:"Ghost Choir - Louie Zong (modchart)",description:"This is a relaxing modchart and a technical proof of concept. If you haven't played my modchart Dondante yet, please check it out: https://beatsaver.com/beatmap/123b5\r\n\r\nThe map requires the mods Noodle Extensions and Chroma. If Noodle Extensions is not available yet on ModAssistant, you can get the latest release at https://github.com/Aeroluna/NoodleExtensions/releases/tag/v1.3.5\r\n\r\nTips for a better experience:\r\n- Disable static lights; there are no lights anyway\r\n- Hide the HUD\r\n- Turn the SFX volume down (0 or low value like 0.2)\r\n- Enable bloom post-processing\r\n\r\nPreview: https://youtu.be/XC7RY9C_EHs\r\n\r\nI adapted this from Louie Zong's original animation: https://youtu.be/kXF3VYYa5TI\r\n\r\n",uploader:{id:4288814,name:"nyri0",uniqueSet:!0,hash:"5e792df416c9680006086a78",avatar:"https://cdn.beatsaver.com/avatar/396715033125584907.png",type:"DISCORD"},metadata:{bpm:67,duration:90,songName:"Ghost Choir",songSubName:"",songAuthorName:"Louie Zong",levelAuthorName:"nyri0"},stats:{plays:0,downloads:1938,upvotes:663,downvotes:3,score:.9255},uploaded:"2021-01-30T12:31:29.825Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"1d373506c0b2b82867411f18696a1ad53d4ea01d",key:"1362d",state:"Published",createdAt:"2021-01-30T12:31:29.825Z",sageScore:2,diffs:[{njs:14,offset:0,notes:138,bombs:0,obstacles:1460,nps:1.684,length:91.5,characteristic:"Standard",difficulty:"Hard",events:5,chroma:!0,me:!1,ne:!0,cinema:!1,seconds:81.94,paritySummary:{errors:4,warns:3,resets:0}}],downloadURL:"https://cdn.beatsaver.com/1d373506c0b2b82867411f18696a1ad53d4ea01d.zip",coverURL:"https://cdn.beatsaver.com/1d373506c0b2b82867411f18696a1ad53d4ea01d.jpg",previewURL:"https://cdn.beatsaver.com/1d373506c0b2b82867411f18696a1ad53d4ea01d.mp3"}],createdAt:"2021-01-30T12:31:29.825Z",updatedAt:"2021-01-30T12:31:29.825Z",lastPublishedAt:"2021-01-30T12:31:29.825Z"},{id:"f91e",name:"Who's Laughing Now - Ava Max",description:"Surprise, it's a slow pop song and it doesn't have sliders!\nGoing back to my roots with this one just because I love the song and I wanted to rank a pop song in quite a while anyways.\n\nThank you for the mod Trolav!\n\nAs always, I'm open to feedback on discord @Teuflum#5982.",uploader:{id:68740,name:"Teuflum",uniqueSet:!0,hash:"5cff0b7498cc5a672c851a6b",avatar:"https://cdn.beatsaver.com/avatar/114706869460664326.png",type:"DISCORD"},metadata:{bpm:92,duration:181,songName:"Who's Laughing Now",songSubName:"",songAuthorName:"Ava Max",levelAuthorName:"Teuflum"},stats:{plays:0,downloads:11683,upvotes:1652,downvotes:40,score:.9255},uploaded:"2020-10-04T11:45:39.424Z",automapper:!1,ranked:!0,qualified:!1,versions:[{hash:"559113d5c4247438c6ecad852c61d03d79396af1",key:"f91e",state:"Published",createdAt:"2020-10-04T11:45:39.424Z",sageScore:7,diffs:[{njs:12,offset:0,notes:286,bombs:19,obstacles:139,nps:1.636,length:268,characteristic:"Standard",difficulty:"Easy",events:2852,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:174.783,paritySummary:{errors:3,warns:0,resets:1},stars:.96},{njs:13,offset:-.25,notes:344,bombs:19,obstacles:139,nps:1.968,length:268,characteristic:"Standard",difficulty:"Normal",events:2852,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:174.783,paritySummary:{errors:0,warns:0,resets:2},stars:1.32},{njs:14,offset:.5,notes:545,bombs:20,obstacles:126,nps:3.118,length:268,characteristic:"Standard",difficulty:"Hard",events:2852,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:174.783,paritySummary:{errors:0,warns:0,resets:2},stars:1.96},{njs:15,offset:.25,notes:703,bombs:20,obstacles:93,nps:4.022,length:268,characteristic:"Standard",difficulty:"Expert",events:2852,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:174.783,paritySummary:{errors:0,warns:0,resets:0},stars:2.83},{njs:17,offset:.1,notes:727,bombs:20,obstacles:93,nps:4.159,length:268,characteristic:"Standard",difficulty:"ExpertPlus",events:2852,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:174.783,paritySummary:{errors:0,warns:0,resets:0},stars:4.02}],downloadURL:"https://cdn.beatsaver.com/559113d5c4247438c6ecad852c61d03d79396af1.zip",coverURL:"https://cdn.beatsaver.com/559113d5c4247438c6ecad852c61d03d79396af1.jpg",previewURL:"https://cdn.beatsaver.com/559113d5c4247438c6ecad852c61d03d79396af1.mp3"}],createdAt:"2020-10-04T11:45:39.424Z",updatedAt:"2021-09-20T15:00:35.623946Z",lastPublishedAt:"2020-10-04T11:45:39.424Z"},{id:"4fba",name:"Mirror Mirror [One Saber] (RWBY: Volume 1 Soundtrack) - Jeff Williams ft. Casey Lee Williams",description:"My first one saber map! Can't believe it took me 250 maps before I started making even 1 one saber map. Trying out one saber mapping with the first RWBY song that I mapped. No promises, but I might do more one saber RWBY maps if this takes off. Map comes with custom Atlas Blue and Snow White colors",uploader:{id:58338,name:"Joetastic",uniqueSet:!0,hash:"5cff0b7498cc5a672c85050e",avatar:"https://cdn.beatsaver.com/avatar/227767566402191360.png",type:"DISCORD"},metadata:{bpm:146,duration:175,songName:"Mirror Mirror (One Saber)",songSubName:"Jeff Williams ft. Casey Lee Williams",songAuthorName:"Joetastic",levelAuthorName:"Joetastic"},stats:{plays:0,downloads:3363,upvotes:760,downvotes:6,score:.9255},uploaded:"2019-05-29T13:04:18Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"4cb8bba2e14169819d61a4ccb69adba7b59d7f7a",key:"4fba",state:"Published",createdAt:"2019-05-29T13:04:18Z",sageScore:5,diffs:[{njs:12,offset:0,notes:352,bombs:0,obstacles:8,nps:2.185,length:391.993,characteristic:"OneSaber",difficulty:"Expert",events:581,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:161.093,paritySummary:{errors:15,warns:22,resets:0}}],downloadURL:"https://cdn.beatsaver.com/4cb8bba2e14169819d61a4ccb69adba7b59d7f7a.zip",coverURL:"https://cdn.beatsaver.com/4cb8bba2e14169819d61a4ccb69adba7b59d7f7a.jpg",previewURL:"https://cdn.beatsaver.com/4cb8bba2e14169819d61a4ccb69adba7b59d7f7a.mp3"}],createdAt:"2019-05-29T13:04:18Z",updatedAt:"2019-05-29T13:04:18Z",lastPublishedAt:"2019-05-29T13:04:18Z"},{id:"447a",name:"AIAIAI",description:"Twitter: https://twitter.com/Dack731",uploader:{id:4285250,name:"dack",uniqueSet:!0,hash:"5cff0b7598cc5a672c852c6f",avatar:"https://cdn.beatsaver.com/avatar/297344689798119424.png",type:"DISCORD"},metadata:{bpm:128,duration:192,songName:"AIAIAI (feat. Yasutaka Nakata)",songSubName:"Kizuna AI",songAuthorName:"Dack",levelAuthorName:"Dack"},stats:{plays:0,downloads:1261,upvotes:1434,downvotes:31,score:.9255},uploaded:"2019-04-09T11:00:10Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"174dbef7bfdd791378582d4e7b46f9d652ba44d8",key:"447a",state:"Published",createdAt:"2019-04-09T11:00:10Z",sageScore:4,diffs:[{njs:14,offset:0,notes:466,bombs:8,obstacles:15,nps:2.556,length:389,characteristic:"Standard",difficulty:"Expert",events:715,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:182.344,paritySummary:{errors:35,warns:29,resets:1}}],downloadURL:"https://cdn.beatsaver.com/174dbef7bfdd791378582d4e7b46f9d652ba44d8.zip",coverURL:"https://cdn.beatsaver.com/174dbef7bfdd791378582d4e7b46f9d652ba44d8.jpg",previewURL:"https://cdn.beatsaver.com/174dbef7bfdd791378582d4e7b46f9d652ba44d8.mp3"}],createdAt:"2019-04-09T11:00:10Z",updatedAt:"2019-04-09T11:00:10Z",lastPublishedAt:"2019-04-09T11:00:10Z"},{id:"d35a",name:"[FUTURE FUNK PACK] Windy Summer (Night Tempo 100% Pure Remastered)",description:"FUTURE FUNK MAP PACK\n2 songs uploaded everyday through August 10th - 14th!\n\nThese first two songs are originally sung by Anri, one of my favorite City Pop artist. \n\nPlease look forward to the upcoming maps!\n\nDM any feedback on Discord\nETAN#8341",uploader:{id:4235140,name:"etan",uniqueSet:!0,hash:"5cff0b7798cc5a672c855775",avatar:"https://cdn.beatsaver.com/avatar/136373107559497728.png",type:"DISCORD"},metadata:{bpm:120,duration:190,songName:"Windy Summer",songSubName:"(Night Tempo 100% Pure Remastered)",songAuthorName:"Anri",levelAuthorName:"ETAN"},stats:{plays:0,downloads:4185,upvotes:753,downvotes:6,score:.9253},uploaded:"2020-08-10T17:48:34.173Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"dc259cc74cc52a6103c0c3f44b04549e9f555425",key:"d35a",state:"Published",createdAt:"2020-08-10T17:48:34.173Z",sageScore:6,diffs:[{njs:10,offset:1,notes:177,bombs:0,obstacles:30,nps:.982,length:360.5,characteristic:"Standard",difficulty:"Easy",events:11459,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:180.25,paritySummary:{errors:25,warns:8,resets:0}},{njs:11,offset:1,notes:302,bombs:0,obstacles:29,nps:1.675,length:360.5,characteristic:"Standard",difficulty:"Normal",events:11459,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:180.25,paritySummary:{errors:0,warns:0,resets:0}},{njs:12,offset:.5,notes:422,bombs:0,obstacles:29,nps:2.335,length:361.5,characteristic:"Standard",difficulty:"Hard",events:11459,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:180.75,paritySummary:{errors:0,warns:0,resets:0}},{njs:14,offset:0,notes:668,bombs:0,obstacles:27,nps:3.696,length:361.5,characteristic:"Standard",difficulty:"Expert",events:11459,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:180.75,paritySummary:{errors:0,warns:0,resets:0}},{njs:17,offset:-.5,notes:877,bombs:0,obstacles:28,nps:4.852,length:361.5,characteristic:"Standard",difficulty:"ExpertPlus",events:11459,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:180.75,paritySummary:{errors:0,warns:0,resets:0}}],downloadURL:"https://cdn.beatsaver.com/dc259cc74cc52a6103c0c3f44b04549e9f555425.zip",coverURL:"https://cdn.beatsaver.com/dc259cc74cc52a6103c0c3f44b04549e9f555425.jpg",previewURL:"https://cdn.beatsaver.com/dc259cc74cc52a6103c0c3f44b04549e9f555425.mp3"}],createdAt:"2020-08-10T17:48:34.173Z",updatedAt:"2020-08-10T17:48:34.173Z",lastPublishedAt:"2020-08-10T17:48:34.173Z"},{id:"3969",name:"Lukas Graham - 7 Years",description:"Trying out something new here and seeing how well a slower song performs in beat saber. I decided not to map an easy for this one due to the songs length and naturally slow pacing. I'm interested to know what you think though. Do you think slow songs are good for beat saber? Should I do more? etc...\r\n\r\nTime spent mapping: 13:52\r\nVideo Preview: https://www.youtube.com/watch?v=2JB4fn1npwQ",uploader:{id:4785,name:"stumi",uniqueSet:!1,hash:"5cff0b7398cc5a672c84f720",avatar:"https://www.gravatar.com/avatar/5cff0b7398cc5a672c84f720?d=retro",type:"SIMPLE"},metadata:{bpm:120,duration:235,songName:"7 Years",songSubName:"Lukas Graham",songAuthorName:"Stumi",levelAuthorName:"stumi"},stats:{plays:0,downloads:4425,upvotes:2415,downvotes:75,score:.9253},uploaded:"2019-02-24T17:19:02Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"11621a2effc185bf6ae4c7526c9db8cf435fd9b2",key:"3969",state:"Published",createdAt:"2019-02-24T17:19:02Z",sageScore:5,diffs:[{njs:10,offset:0,notes:374,bombs:0,obstacles:36,nps:1.645,length:454.75,characteristic:"Standard",difficulty:"Normal",events:1566,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:227.375,paritySummary:{errors:30,warns:19,resets:0}},{njs:11,offset:0,notes:626,bombs:0,obstacles:23,nps:2.753,length:454.75,characteristic:"Standard",difficulty:"Hard",events:1566,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:227.375,paritySummary:{errors:41,warns:49,resets:0}},{njs:14,offset:0,notes:756,bombs:0,obstacles:23,nps:3.325,length:454.75,characteristic:"Standard",difficulty:"Expert",events:1566,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:227.375,paritySummary:{errors:42,warns:55,resets:0}}],downloadURL:"https://cdn.beatsaver.com/11621a2effc185bf6ae4c7526c9db8cf435fd9b2.zip",coverURL:"https://cdn.beatsaver.com/11621a2effc185bf6ae4c7526c9db8cf435fd9b2.jpg",previewURL:"https://cdn.beatsaver.com/11621a2effc185bf6ae4c7526c9db8cf435fd9b2.mp3"}],createdAt:"2019-02-24T17:19:02Z",updatedAt:"2019-02-24T17:19:02Z",lastPublishedAt:"2019-02-24T17:19:02Z"},{id:"157",name:"Seagulls!(Stop it Now)",description:"Normal/Hard/Expert (though overall they should all be fairly easy) Thought this would be a fun, lighthearted song to do. Song by Bad Lip Reading. (as sung by Yoda Luke and R2...kind of)",uploader:{id:53109,name:"paynter3d",uniqueSet:!0,hash:"5cff0b7298cc5a672c84eb80",avatar:"https://www.gravatar.com/avatar/5cff0b7298cc5a672c84eb80?d=retro",type:"SIMPLE"},metadata:{bpm:120,duration:192,songName:"Seagulls!",songSubName:"(Stop It Now)",songAuthorName:"Bad Lip Reading",levelAuthorName:"paynter3d"},stats:{plays:0,downloads:2917,upvotes:1985,downvotes:55,score:.9253},uploaded:"2018-05-20T20:57:46Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"055e8f8f8fabefcf12bbb6c50e2f78d666d619bf",key:"157",state:"Published",createdAt:"2018-05-20T20:57:46Z",sageScore:3,diffs:[{njs:10,offset:0,notes:383,bombs:0,obstacles:37,nps:2.037,length:376,characteristic:"Standard",difficulty:"Normal",events:622,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:188,paritySummary:{errors:95,warns:61,resets:0}},{njs:10,offset:0,notes:460,bombs:0,obstacles:37,nps:2.447,length:376,characteristic:"Standard",difficulty:"Hard",events:622,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:188,paritySummary:{errors:116,warns:58,resets:0}},{njs:10,offset:0,notes:628,bombs:64,obstacles:37,nps:3.34,length:376,characteristic:"Standard",difficulty:"Expert",events:626,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:188,paritySummary:{errors:86,warns:105,resets:0}}],downloadURL:"https://cdn.beatsaver.com/055e8f8f8fabefcf12bbb6c50e2f78d666d619bf.zip",coverURL:"https://cdn.beatsaver.com/055e8f8f8fabefcf12bbb6c50e2f78d666d619bf.jpg",previewURL:"https://cdn.beatsaver.com/055e8f8f8fabefcf12bbb6c50e2f78d666d619bf.mp3"}],createdAt:"2018-05-20T20:57:46Z",updatedAt:"2018-05-20T20:57:46Z",lastPublishedAt:"2018-05-20T20:57:46Z"},{id:"1a0b9",name:"[Electro Swing Pack] Caravan Palace - Lone Digger",description:"Nixie Presents: Electro Swing Pack!\n\n10 electro swing songs with expert and expert+ diffs to make your booty swing!\n\nGet The Pack: \nhttps://bsaber.com/electro-swing-pack/\n\nMap Gameplay:\nhttps://youtu.be/DF_ZrKY3LfY\n\nComplete Pack Playthrough:\nhttps://youtu.be/yj9rw4MEh7s\n\nHeyya! After looking for some dancey electro swing maps, I noticed that there barely are any!\nSo I took matters into my own hands, learning mapping basically from scratch,\nscrapping my first failed attempts and then finally making a map that was good.\nI found it so fun that I ended up making 9 more maps,\nand fine tuned them with the help of the testplayers in BSMG,\nas well as the lovely curators from the bsaber discord.\n\nHuge thanks in particular to:\nMonstor, Bearly, Noxn, Bullet, Vaser888, Tocxx, Jafdy, Storm Knight and Pixelguy!\n\nIf you want to talk to me, here is my Discord:\nNixie.Korten#6944",uploader:{id:4286374,name:"nixiekorten",uniqueSet:!0,hash:"6096752e12772e0006e2f7e6",avatar:"https://cdn.beatsaver.com/avatar/840550221690699776.png",type:"DISCORD"},metadata:{bpm:124,duration:171,songName:"Lone Digger",songSubName:"",songAuthorName:"Caravan Palace",levelAuthorName:"Nixie.Korten"},stats:{plays:0,downloads:19552,upvotes:1165,downvotes:21,score:.925},uploaded:"2021-07-08T15:25:28.524Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"f89d7a02f16dbbe3c957fd56e35844ab7f23f532",key:"1a0b9",state:"Published",createdAt:"2021-07-08T15:25:28.524Z",sageScore:5,diffs:[{njs:16,offset:-.25,notes:434,bombs:0,obstacles:0,nps:2.611,length:343.5,characteristic:"Standard",difficulty:"Expert",events:1448,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:166.21,paritySummary:{errors:0,warns:0,resets:0}},{njs:19,offset:.25,notes:891,bombs:0,obstacles:4,nps:5.299,length:347.5,characteristic:"Standard",difficulty:"ExpertPlus",events:1448,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:168.145,paritySummary:{errors:0,warns:0,resets:0}}],downloadURL:"https://cdn.beatsaver.com/f89d7a02f16dbbe3c957fd56e35844ab7f23f532.zip",coverURL:"https://cdn.beatsaver.com/f89d7a02f16dbbe3c957fd56e35844ab7f23f532.jpg",previewURL:"https://cdn.beatsaver.com/f89d7a02f16dbbe3c957fd56e35844ab7f23f532.mp3"}],createdAt:"2021-07-08T15:25:28.524Z",updatedAt:"2021-07-08T15:25:28.524Z",lastPublishedAt:"2021-07-08T15:25:28.524Z"},{id:"5d24",name:"[Anniversary] Face My Fears - Hikaru Utadu & Skrillex [BennyDaBeast]",description:"Part of the Anniversary Song Pack",uploader:{id:37070,name:"anniversaryteam",uniqueSet:!0,hash:"5cff0b7798cc5a672c8565a3",avatar:"https://www.gravatar.com/avatar/5cff0b7798cc5a672c8565a3?d=retro",type:"SIMPLE"},metadata:{bpm:160,duration:212,songName:"Face My Fears",songSubName:"",songAuthorName:"Hikaru Utada & Skrillex",levelAuthorName:"BennyDaBeast"},stats:{plays:0,downloads:4932,upvotes:2031,downvotes:58,score:.925},uploaded:"2019-08-16T01:48:04.848Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"460fcbe6916bd64eb31ff65a03e4d46d4773e31c",key:"5d24",state:"Published",createdAt:"2019-08-16T01:48:04.848Z",sageScore:8,diffs:[{njs:10,offset:0,notes:390,bombs:0,obstacles:0,nps:1.912,length:544,characteristic:"Standard",difficulty:"Easy",events:2297,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:204,paritySummary:{errors:85,warns:29,resets:0}},{njs:10,offset:0,notes:455,bombs:0,obstacles:0,nps:2.23,length:544,characteristic:"Standard",difficulty:"Normal",events:2297,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:204,paritySummary:{errors:80,warns:29,resets:0}},{njs:12,offset:-1,notes:567,bombs:0,obstacles:0,nps:2.779,length:544,characteristic:"Standard",difficulty:"Hard",events:2298,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:204,paritySummary:{errors:88,warns:36,resets:0}},{njs:12,offset:-1,notes:776,bombs:0,obstacles:0,nps:3.804,length:544,characteristic:"Standard",difficulty:"Expert",events:2297,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:204,paritySummary:{errors:105,warns:60,resets:0}},{njs:15,offset:.4,notes:921,bombs:0,obstacles:0,nps:4.515,length:544,characteristic:"Standard",difficulty:"ExpertPlus",events:2297,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:204,paritySummary:{errors:102,warns:83,resets:0}}],downloadURL:"https://cdn.beatsaver.com/460fcbe6916bd64eb31ff65a03e4d46d4773e31c.zip",coverURL:"https://cdn.beatsaver.com/460fcbe6916bd64eb31ff65a03e4d46d4773e31c.jpg",previewURL:"https://cdn.beatsaver.com/460fcbe6916bd64eb31ff65a03e4d46d4773e31c.mp3"}],createdAt:"2019-08-16T01:48:04.848Z",updatedAt:"2019-08-16T01:48:04.848Z",lastPublishedAt:"2019-08-16T01:48:04.848Z"},{id:"269f",name:"Amusement Park - Keigo Hoashi [NieR: Automata]",description:"Expert Gameplay: https://www.youtube.com/watch?v=gOeGoxKR7fI&feature=youtu.be\r\nExpert and Expert+ are very similar, though Expert+ is a tad harder.\r\n\r\nSong by Keigo Hoashi as NieR:Automata OST",uploader:{id:4286005,name:"mandynasty",uniqueSet:!0,hash:"5cff0b7398cc5a672c84ffaa",avatar:"https://cdn.beatsaver.com/avatar/307589087030673408.png",type:"DISCORD"},metadata:{bpm:120,duration:266,songName:"Amusement Park",songSubName:"Keigo Hoashi",songAuthorName:"ManDynasty",levelAuthorName:"ManDynasty"},stats:{plays:0,downloads:3394,upvotes:1832,downvotes:49,score:.925},uploaded:"2018-12-18T15:57:22Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"00151f9ef33d55245bb7cfc9756e223b7183ff65",key:"269f",state:"Published",createdAt:"2018-12-18T15:57:22Z",sageScore:2,diffs:[{njs:9,offset:0,notes:396,bombs:0,obstacles:242,nps:1.571,length:504,characteristic:"Standard",difficulty:"Normal",events:1606,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:252,paritySummary:{errors:74,warns:23,resets:0}},{njs:10,offset:0,notes:528,bombs:0,obstacles:272,nps:2.095,length:504,characteristic:"Standard",difficulty:"Hard",events:1606,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:252,paritySummary:{errors:42,warns:49,resets:0}},{njs:14,offset:0,notes:888,bombs:0,obstacles:102,nps:3.524,length:504,characteristic:"Standard",difficulty:"Expert",events:1606,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:252,paritySummary:{errors:86,warns:77,resets:0}},{njs:14,offset:0,notes:931,bombs:0,obstacles:118,nps:3.588,length:519,characteristic:"Standard",difficulty:"ExpertPlus",events:1606,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:259.5,paritySummary:{errors:69,warns:56,resets:0}}],downloadURL:"https://cdn.beatsaver.com/00151f9ef33d55245bb7cfc9756e223b7183ff65.zip",coverURL:"https://cdn.beatsaver.com/00151f9ef33d55245bb7cfc9756e223b7183ff65.jpg",previewURL:"https://cdn.beatsaver.com/00151f9ef33d55245bb7cfc9756e223b7183ff65.mp3"}],createdAt:"2018-12-18T15:57:22Z",updatedAt:"2018-12-18T15:57:22Z",lastPublishedAt:"2018-12-18T15:57:22Z"},{id:"6ace",name:"Flower Dance - DJ Okawari",description:"There it is!!!! Hope you all enjoy this <3 \nCollabed with kuritsadbs on this map as he worked on the lights and he did amazing job on them! \nI might make 1 saber mode later on if i see that many liked this one :D\nCheck the map here: https://www.youtube.com/watch?v=vTPssZ0rKyI&feature=youtu.be",uploader:{id:1708,name:"layanmeta",uniqueSet:!0,hash:"5cff0b7698cc5a672c8539a1",avatar:"https://www.gravatar.com/avatar/5cff0b7698cc5a672c8539a1?d=retro",type:"SIMPLE"},metadata:{bpm:200,duration:238,songName:" Flower Dance",songSubName:"",songAuthorName:"DJ Okawari",levelAuthorName:"Layanmeta w/ KuritsaDBS"},stats:{plays:0,downloads:2467,upvotes:1257,downvotes:25,score:.9248},uploaded:"2019-10-19T17:05:33.835Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"5d4b7dfbc7370400f54f02b76568bacd8497b3e9",key:"6ace",state:"Published",createdAt:"2019-10-19T17:05:33.835Z",sageScore:8,diffs:[{njs:12,offset:0,notes:0,bombs:0,obstacles:0,nps:0,length:0,characteristic:"Standard",difficulty:"Easy",events:2030,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:0,paritySummary:{errors:0,warns:0,resets:0}},{njs:15,offset:.4,notes:1225,bombs:0,obstacles:70,nps:5.206,length:784.375,characteristic:"Standard",difficulty:"ExpertPlus",events:2030,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:235.313,paritySummary:{errors:12,warns:0,resets:0}}],downloadURL:"https://cdn.beatsaver.com/5d4b7dfbc7370400f54f02b76568bacd8497b3e9.zip",coverURL:"https://cdn.beatsaver.com/5d4b7dfbc7370400f54f02b76568bacd8497b3e9.jpg",previewURL:"https://cdn.beatsaver.com/5d4b7dfbc7370400f54f02b76568bacd8497b3e9.mp3"}],createdAt:"2019-10-19T17:05:33.835Z",updatedAt:"2019-10-19T17:05:33.835Z",lastPublishedAt:"2019-10-19T17:05:33.835Z"},{id:"e7cd",name:"[NoodleGames Vol.2] Last Surprise - Persona 5",description:"The Ramen Noodle group is back again to bring you a map pack full of our favorite video game soundtracks and game-inspired music!\n\nHere's one of my 4 Persona maps for the pack! Hope you enjoy.",uploader:{id:15368,name:"theab",uniqueSet:!0,hash:"5cff0b7698cc5a672c853a14",avatar:"https://www.gravatar.com/avatar/5cff0b7698cc5a672c853a14?d=retro",type:"SIMPLE"},metadata:{bpm:123,duration:210,songName:"Last Surprise",songSubName:"",songAuthorName:"Shoji Meguro",levelAuthorName:"Ab"},stats:{plays:0,downloads:5978,upvotes:1048,downvotes:17,score:.9247},uploaded:"2020-09-10T19:19:34.152Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"b5e4c4a65fa8c55a4c5a2b1d7681c31f301d5449",key:"e7cd",state:"Published",createdAt:"2020-09-10T19:19:34.152Z",sageScore:2,diffs:[{njs:13,offset:0,notes:650,bombs:0,obstacles:2,nps:3.173,length:420,characteristic:"Standard",difficulty:"Hard",events:3292,chroma:!0,me:!1,ne:!1,cinema:!1,seconds:204.878,paritySummary:{errors:12,warns:8,resets:0}},{njs:17,offset:-.2,notes:861,bombs:0,obstacles:0,nps:4.203,length:420,characteristic:"Standard",difficulty:"Expert",events:3292,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:204.878,paritySummary:{errors:8,warns:9,resets:0}},{njs:18,offset:-.2,notes:983,bombs:0,obstacles:7,nps:4.798,length:420,characteristic:"Standard",difficulty:"ExpertPlus",events:3250,chroma:!0,me:!1,ne:!1,cinema:!1,seconds:204.878,paritySummary:{errors:8,warns:8,resets:0}},{njs:16,offset:0,notes:0,bombs:0,obstacles:0,nps:0,length:0,characteristic:"Lightshow",difficulty:"ExpertPlus",events:3249,chroma:!0,me:!1,ne:!1,cinema:!1,seconds:0,paritySummary:{errors:0,warns:0,resets:0}}],downloadURL:"https://cdn.beatsaver.com/b5e4c4a65fa8c55a4c5a2b1d7681c31f301d5449.zip",coverURL:"https://cdn.beatsaver.com/b5e4c4a65fa8c55a4c5a2b1d7681c31f301d5449.jpg",previewURL:"https://cdn.beatsaver.com/b5e4c4a65fa8c55a4c5a2b1d7681c31f301d5449.mp3"}],createdAt:"2020-09-10T19:19:34.152Z",updatedAt:"2020-09-10T19:19:34.152Z",lastPublishedAt:"2020-09-10T19:19:34.152Z"},{id:"1a0b8",name:"[Electro Swing Pack] Wolfgang Lohr & The Swinghoppers - Party Like It's 1920",description:"Nixie Presents: Electro Swing Pack!\n\n10 electro swing songs with expert and expert+ diffs to make your booty swing!\n\nGet The Pack: \nhttps://bsaber.com/electro-swing-pack/\n\nMap Gameplay:\nhttps://youtu.be/ye22W_xrXnk\n\nComplete Pack Playthrough:\nhttps://youtu.be/yj9rw4MEh7s\n\nHeyya! After looking for some dancey electro swing maps, I noticed that there barely are any!\nSo I took matters into my own hands, learning mapping basically from scratch,\nscrapping my first failed attempts and then finally making a map that was good.\nI found it so fun that I ended up making 9 more maps,\nand fine tuned them with the help of the testplayers in BSMG,\nas well as the lovely curators from the bsaber discord.\n\nHuge thanks in particular to:\nMonstor, Bearly, Noxn, Bullet, Vaser888, Tocxx, Jafdy, Storm Knight and Pixelguy!\n\nIf you want to talk to me, here is my Discord:\nNixie.Korten#6944",uploader:{id:4286374,name:"nixiekorten",uniqueSet:!0,hash:"6096752e12772e0006e2f7e6",avatar:"https://cdn.beatsaver.com/avatar/840550221690699776.png",type:"DISCORD"},metadata:{bpm:120,duration:187,songName:"Party Like It's 1920",songSubName:"",songAuthorName:"The Swinghoppers & Wolfgang Lohr",levelAuthorName:"Nixie.Korten"},stats:{plays:0,downloads:13163,upvotes:670,downvotes:4,score:.9246},uploaded:"2021-07-08T15:25:28.451Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"973bab980b568e41b0a17a772e61377b01ef85ec",key:"1a0b8",state:"Published",createdAt:"2021-07-08T15:25:28.451Z",sageScore:4,diffs:[{njs:16,offset:-.5,notes:556,bombs:0,obstacles:0,nps:3.063,length:363,characteristic:"Standard",difficulty:"Expert",events:2057,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:181.5,paritySummary:{errors:0,warns:0,resets:0}},{njs:19,offset:.25,notes:850,bombs:0,obstacles:0,nps:4.683,length:363,characteristic:"Standard",difficulty:"ExpertPlus",events:2057,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:181.5,paritySummary:{errors:0,warns:0,resets:0}}],downloadURL:"https://cdn.beatsaver.com/973bab980b568e41b0a17a772e61377b01ef85ec.zip",coverURL:"https://cdn.beatsaver.com/973bab980b568e41b0a17a772e61377b01ef85ec.jpg",previewURL:"https://cdn.beatsaver.com/973bab980b568e41b0a17a772e61377b01ef85ec.mp3"}],createdAt:"2021-07-08T15:25:28.451Z",updatedAt:"2021-07-08T15:25:28.451Z",lastPublishedAt:"2021-07-08T15:25:28.451Z"},{id:"d60d",name:"[FUTURE FUNK PACK] Tokyo Chopp ft. Shiki​(​TMNS​)​ (Moe Shop Remix)",description:'FUTURE FUNK MAP PACK\n2 songs uploaded everyday through August 10th - 14th!\n\nThese last two Moe Shop songs brings a fresh spin on the Future Funk genre! This song is a Moe Shop remix of Hentai Dude\'s "Tokyo Chopp" and Tomoko Aran\'s "Midnight Pretenders" (1983.)\n\nThank you for playing! I hope you enjoyed the map pack!\n\nDM any feedback on Discord\nETAN#8341',uploader:{id:4235140,name:"etan",uniqueSet:!0,hash:"5cff0b7798cc5a672c855775",avatar:"https://cdn.beatsaver.com/avatar/136373107559497728.png",type:"DISCORD"},metadata:{bpm:117,duration:188,songName:"Tokyo Chopp ft. Shiki​(​TMNS​)​",songSubName:"(Moe Shop Remix)",songAuthorName:"Hentai Dude",levelAuthorName:"ETAN"},stats:{plays:0,downloads:6396,upvotes:1072,downvotes:18,score:.9246},uploaded:"2020-08-14T18:31:11.526Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"c82dfb89e2e5beb11c57c1d311e801f7d5dac978",key:"d60d",state:"Published",createdAt:"2020-08-14T18:31:11.526Z",sageScore:7,diffs:[{njs:10,offset:1.5,notes:155,bombs:0,obstacles:8,nps:.856,length:353,characteristic:"Standard",difficulty:"Easy",events:7757,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:181.026,paritySummary:{errors:29,warns:0,resets:0}},{njs:10,offset:1,notes:291,bombs:0,obstacles:8,nps:1.608,length:353,characteristic:"Standard",difficulty:"Normal",events:7757,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:181.026,paritySummary:{errors:3,warns:0,resets:0}},{njs:12,offset:.5,notes:377,bombs:0,obstacles:7,nps:2.056,length:357.5,characteristic:"Standard",difficulty:"Hard",events:7757,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:183.333,paritySummary:{errors:0,warns:0,resets:0}},{njs:14,offset:0,notes:565,bombs:0,obstacles:7,nps:3.082,length:357.5,characteristic:"Standard",difficulty:"Expert",events:7757,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:183.333,paritySummary:{errors:1,warns:0,resets:0}},{njs:17,offset:-.5,notes:765,bombs:0,obstacles:7,nps:4.173,length:357.5,characteristic:"Standard",difficulty:"ExpertPlus",events:7757,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:183.333,paritySummary:{errors:0,warns:0,resets:0}}],downloadURL:"https://cdn.beatsaver.com/c82dfb89e2e5beb11c57c1d311e801f7d5dac978.zip",coverURL:"https://cdn.beatsaver.com/c82dfb89e2e5beb11c57c1d311e801f7d5dac978.jpg",previewURL:"https://cdn.beatsaver.com/c82dfb89e2e5beb11c57c1d311e801f7d5dac978.mp3"}],createdAt:"2020-08-14T18:31:11.526Z",updatedAt:"2020-08-14T18:31:11.526Z",lastPublishedAt:"2020-08-14T18:31:11.526Z"},{id:"41e4",name:"Meant to Live - Switchfoot",description:"Easy, Normal, and Hard are all relatively easy, even for OST standards. Expert might have some tricky patterns, but the NPS is still well within OST standards so should still be manageable.\n\nhttps://youtu.be/zEK_j3aqn4g\n\nSo for my first song with fully English vocals, here's a classic from the early 2000's that you completely forgot about. I was actually sitting on this map for a while but decided to release it because I wanted a bit of variety.\n\nFollow me on Twitter u won't\nhttps://twitter.com/aggrogahu",uploader:{id:4284613,name:"aggrogahu",uniqueSet:!0,hash:"5cff0b7398cc5a672c84fdad",avatar:"https://cdn.beatsaver.com/avatar/158363872649150464.png",type:"DISCORD"},metadata:{bpm:150,duration:200,songName:"Meant to Live",songSubName:"Switchfoot",songAuthorName:"aggrogahu",levelAuthorName:"aggrogahu"},stats:{plays:0,downloads:3605,upvotes:937,downvotes:13,score:.9246},uploaded:"2019-03-30T02:30:46Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"d6675f644e47f84789a0376a746a2514e8e7b7ff",key:"41e4",state:"Published",createdAt:"2019-03-30T02:30:46Z",diffs:[{njs:10,offset:0,notes:155,bombs:0,obstacles:11,nps:.859,length:451.3,characteristic:"Standard",difficulty:"Easy",events:576,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:180.52,paritySummary:{errors:45,warns:4,resets:0}},{njs:11,offset:0,notes:262,bombs:0,obstacles:11,nps:1.451,length:451.3,characteristic:"Standard",difficulty:"Normal",events:576,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:180.52,paritySummary:{errors:60,warns:13,resets:0}},{njs:10,offset:0,notes:408,bombs:0,obstacles:46,nps:2.26,length:451.3,characteristic:"Standard",difficulty:"Hard",events:576,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:180.52,paritySummary:{errors:50,warns:29,resets:0}},{njs:12,offset:0,notes:630,bombs:0,obstacles:53,nps:3.49,length:451.3,characteristic:"Standard",difficulty:"Expert",events:576,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:180.52,paritySummary:{errors:41,warns:29,resets:0}}],downloadURL:"https://cdn.beatsaver.com/d6675f644e47f84789a0376a746a2514e8e7b7ff.zip",coverURL:"https://cdn.beatsaver.com/d6675f644e47f84789a0376a746a2514e8e7b7ff.jpg",previewURL:"https://cdn.beatsaver.com/d6675f644e47f84789a0376a746a2514e8e7b7ff.mp3"}],createdAt:"2019-03-30T02:30:46Z",updatedAt:"2019-03-30T02:30:46Z",lastPublishedAt:"2019-03-30T02:30:46Z"},{id:"7c0b",name:"[Bloq Busters Vol. 2] Au5 & Fractal - Smoke",description:"Expert+ Preview: https://www.youtube.com/watch?v=_mJXl15vv1c\n\nA sick song from their Secret Weapon EP! I hope I did it justice with this mapping.\n\nThis map is part of the Bloq Busters Vol. 2: Melodic Dubstep map pack comprised of maps from several mappers featuring artists such as Seven Lions, Jason Ross, Au5, Warriyo, and more! Grab it here: https://bsaber.com/bloq-busters-vol-2-melodic-dubstep/\n\nComments? Like it? Hate it? Let me know on Discord @Bloodcloak#5725!",uploader:{id:71661,name:"bloodcloak",uniqueSet:!0,hash:"5cff0b7698cc5a672c8551d3",avatar:"https://cdn.beatsaver.com/avatar/205707707187986442.png",type:"DISCORD"},metadata:{bpm:128,duration:302,songName:"Smoke",songSubName:"",songAuthorName:"Au5 & Fractal",levelAuthorName:"Bloodcloak"},stats:{plays:0,downloads:2132,upvotes:701,downvotes:5,score:.9245},uploaded:"2020-01-03T22:50:59.278Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"0bc6562a0bde3a933d656a514c67eeec88a315df",key:"7c0b",state:"Published",createdAt:"2020-01-03T22:50:59.278Z",sageScore:4,diffs:[{njs:12,offset:.6,notes:687,bombs:0,obstacles:245,nps:2.351,length:623.5,characteristic:"Standard",difficulty:"Hard",events:4233,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:292.266,paritySummary:{errors:2,warns:2,resets:0}},{njs:16,offset:-.1,notes:1074,bombs:0,obstacles:135,nps:3.675,length:623.5,characteristic:"Standard",difficulty:"Expert",events:4233,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:292.266,paritySummary:{errors:3,warns:3,resets:0}},{njs:20,offset:.6,notes:1188,bombs:0,obstacles:122,nps:4.065,length:623.5,characteristic:"Standard",difficulty:"ExpertPlus",events:4227,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:292.266,paritySummary:{errors:1,warns:1,resets:0}}],downloadURL:"https://cdn.beatsaver.com/0bc6562a0bde3a933d656a514c67eeec88a315df.zip",coverURL:"https://cdn.beatsaver.com/0bc6562a0bde3a933d656a514c67eeec88a315df.jpg",previewURL:"https://cdn.beatsaver.com/0bc6562a0bde3a933d656a514c67eeec88a315df.mp3"}],createdAt:"2020-01-03T22:50:59.278Z",updatedAt:"2020-01-03T22:50:59.278Z",lastPublishedAt:"2020-01-03T22:50:59.278Z"},{id:"5e05",name:"Dire Straits - Money For Nothing",description:"",uploader:{id:4285018,name:"majorpickle",uniqueSet:!0,hash:"5cff0b7398cc5a672c84f792",avatar:"https://cdn.beatsaver.com/avatar/450358937657671680.png",type:"DISCORD"},metadata:{bpm:136,duration:243,songName:"Money For Nothing",songSubName:"",songAuthorName:"Dire Straits",levelAuthorName:"Majorpickle"},stats:{plays:0,downloads:2691,upvotes:1068,downvotes:18,score:.9245},uploaded:"2019-08-20T03:07:14.232Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"b81b682921b291b731111f9a29d7bf9353ff1365",key:"5e05",state:"Published",createdAt:"2019-08-20T03:07:14.232Z",sageScore:6,diffs:[{njs:12,offset:0,notes:851,bombs:0,obstacles:60,nps:3.8,length:507.656,characteristic:"Standard",difficulty:"Expert",events:2256,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:223.966,paritySummary:{errors:39,warns:30,resets:0}}],downloadURL:"https://cdn.beatsaver.com/b81b682921b291b731111f9a29d7bf9353ff1365.zip",coverURL:"https://cdn.beatsaver.com/b81b682921b291b731111f9a29d7bf9353ff1365.jpg",previewURL:"https://cdn.beatsaver.com/b81b682921b291b731111f9a29d7bf9353ff1365.mp3"}],createdAt:"2019-08-20T03:07:14.232Z",updatedAt:"2019-08-20T03:07:14.232Z",lastPublishedAt:"2019-08-20T03:07:14.232Z"},{id:"a83b",name:"BAD APPLE!! [Punk Goes Pop Vol.2] - RichaadEB ft. Cristina Vee",description:"BAD APPLE!! is a metal cover by RichaadEB featuring voice actor and singer, Cristina Vee. This song was originally composed by Jun'ya Ota & Masayoshi Minoshima with vocals by Nomico.",uploader:{id:58338,name:"Joetastic",uniqueSet:!0,hash:"5cff0b7498cc5a672c85050e",avatar:"https://cdn.beatsaver.com/avatar/227767566402191360.png",type:"DISCORD"},metadata:{bpm:138,duration:301,songName:"BAD APPLE!!",songSubName:"ft. Cristina Vee",songAuthorName:"RichaadEB",levelAuthorName:"Joetastic"},stats:{plays:0,downloads:5636,upvotes:1476,downvotes:35,score:.9242},uploaded:"2020-05-20T07:20:11.426Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"57d1004ac047bd554080c5bfdd6908743ebb9fd2",key:"a83b",state:"Published",createdAt:"2020-05-20T07:20:11.426Z",sageScore:3,diffs:[{njs:16,offset:0,notes:1649,bombs:0,obstacles:78,nps:5.644,length:672,characteristic:"Standard",difficulty:"ExpertPlus",events:9915,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:292.174,paritySummary:{errors:8,warns:13,resets:0}}],downloadURL:"https://cdn.beatsaver.com/57d1004ac047bd554080c5bfdd6908743ebb9fd2.zip",coverURL:"https://cdn.beatsaver.com/57d1004ac047bd554080c5bfdd6908743ebb9fd2.jpg",previewURL:"https://cdn.beatsaver.com/57d1004ac047bd554080c5bfdd6908743ebb9fd2.mp3"}],createdAt:"2020-05-20T07:20:11.426Z",updatedAt:"2020-05-20T07:20:11.426Z",lastPublishedAt:"2020-05-20T07:20:11.426Z"},{id:"8b81",name:"Stonebank - To The Top",description:"https://www.youtube.com/watch?v=2DwhNw_pGrg",uploader:{id:12996,name:"rustic",uniqueSet:!0,hash:"5cff0b7298cc5a672c84e8c4",avatar:"https://www.gravatar.com/avatar/5cff0b7298cc5a672c84e8c4?d=retro",type:"SIMPLE"},metadata:{bpm:128,duration:187,songName:"To The Top",songSubName:"",songAuthorName:"Stonebank",levelAuthorName:"Rustic"},stats:{plays:0,downloads:1287,upvotes:897,downvotes:12,score:.9242},uploaded:"2020-02-28T15:53:21.930Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"7afc56e020bb12f1e91dc99b1107df830299cc98",key:"8b81",state:"Published",createdAt:"2020-02-28T15:53:21.930Z",sageScore:5,diffs:[{njs:20,offset:1,notes:491,bombs:0,obstacles:2922,nps:2.942,length:356,characteristic:"Standard",difficulty:"Expert",events:5581,chroma:!1,me:!0,ne:!1,cinema:!1,seconds:166.875,paritySummary:{errors:0,warns:0,resets:0}}],downloadURL:"https://cdn.beatsaver.com/7afc56e020bb12f1e91dc99b1107df830299cc98.zip",coverURL:"https://cdn.beatsaver.com/7afc56e020bb12f1e91dc99b1107df830299cc98.jpg",previewURL:"https://cdn.beatsaver.com/7afc56e020bb12f1e91dc99b1107df830299cc98.mp3"}],createdAt:"2020-02-28T15:53:21.930Z",updatedAt:"2020-02-28T15:53:21.930Z",lastPublishedAt:"2020-02-28T15:53:21.930Z"},{id:"1c00",name:"Chop Suey - System of a Down",description:"4th map. Special thanks to Kolezan for doing the lighting and helping me out with the audio on this one. He did a great job. Also thanks to Crankor, TurtleSquared, and all my other play testers for multiple play tests and a lot of good feedback. Also this map would not have been possible without squeaksies' MediocreMapper!\nTIPS:\n\n(Expert/Expert+) In the final flow pattern in the last slow section of the song, the corner crouch is meant to make you do a sort of side lunge with that lunging side's saber swinging out wide behind you for balance. I have found that to be the smoothest flow, though it's not technically necessary.\n\n(Expert+ only) The \"climax\" point of each pattern in the ending flow is made to be an optional behind-the-back cross slash. You'll know it by the dotted cubes in that section. The backslash hand hits the dotted cubes. This move is fun but may take some practice to get down. (Hint: keep your eye on the top diagonal cube.)\n\nSwing those arms for the big hits.\n\nhttps://youtu.be/6NJh98lDJVo",uploader:{id:27595,name:"baxter395",uniqueSet:!0,hash:"5cff0b7598cc5a672c852f7b",avatar:"https://www.gravatar.com/avatar/5cff0b7598cc5a672c852f7b?d=retro",type:"SIMPLE"},metadata:{bpm:127,duration:204,songName:"Chop Suey",songSubName:"System of a Down",songAuthorName:"baxter395",levelAuthorName:"baxter395"},stats:{plays:0,downloads:12175,upvotes:8010,downvotes:385,score:.9242},uploaded:"2018-10-25T00:30:35Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"1b6f9e844d81ff0f6ee6feed62331a3d229be2e8",key:"1c00",state:"Published",createdAt:"2018-10-25T00:30:35Z",sageScore:-2,diffs:[{njs:10,offset:0,notes:497,bombs:0,obstacles:11,nps:2.601,length:404.463,characteristic:"Standard",difficulty:"Normal",events:1156,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:191.085,paritySummary:{errors:75,warns:56,resets:0}},{njs:11,offset:0,notes:687,bombs:0,obstacles:34,nps:3.595,length:404.463,characteristic:"Standard",difficulty:"Hard",events:1156,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:191.085,paritySummary:{errors:57,warns:89,resets:0}},{njs:12,offset:0,notes:804,bombs:0,obstacles:62,nps:4.208,length:404.463,characteristic:"Standard",difficulty:"Expert",events:1156,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:191.085,paritySummary:{errors:64,warns:100,resets:0}},{njs:13,offset:0,notes:842,bombs:0,obstacles:54,nps:4.406,length:404.463,characteristic:"Standard",difficulty:"ExpertPlus",events:1156,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:191.085,paritySummary:{errors:58,warns:110,resets:0}}],downloadURL:"https://cdn.beatsaver.com/1b6f9e844d81ff0f6ee6feed62331a3d229be2e8.zip",coverURL:"https://cdn.beatsaver.com/1b6f9e844d81ff0f6ee6feed62331a3d229be2e8.jpg",previewURL:"https://cdn.beatsaver.com/1b6f9e844d81ff0f6ee6feed62331a3d229be2e8.mp3"}],createdAt:"2018-10-25T00:30:35Z",updatedAt:"2018-10-25T00:30:35Z",lastPublishedAt:"2018-10-25T00:30:35Z"},{id:"b724",name:"Falling - Dropgun x Asketa & Natan Chaim",description:"reupload #1 - improved the difficulty spread to not have an extreme jump between the Expert and Expert+ slot\n\nOnly some of the lower diffs changed on here, the E+ slot (Rising) is still the same as I got very positive feedback on that diff which I'm very happy about <3\nThe diff spread should be better now, so it is hopefully more enjoyable for all skill levels whenever it gets ranked.\n\noriginal description:\nhaha lyrics go brrrr\njust a little bit though\n\nalso I lighted manually which I haven't done for an eternity, hope you don't go blind or something\n\nbig thank you to Skeelie for modding this :)\n\nTeuflum#5982 for any feedback on discord.",uploader:{id:68740,name:"Teuflum",uniqueSet:!0,hash:"5cff0b7498cc5a672c851a6b",avatar:"https://cdn.beatsaver.com/avatar/114706869460664326.png",type:"DISCORD"},metadata:{bpm:126,duration:194,songName:"Falling",songSubName:"",songAuthorName:"Dropgun x Asketa & Natan Chaim",levelAuthorName:"Teuflum"},stats:{plays:0,downloads:8962,upvotes:3035,downvotes:109,score:.9241},uploaded:"2020-06-28T11:22:49.373Z",automapper:!1,ranked:!0,qualified:!1,versions:[{hash:"2dddd6672560cb2c1d4c689ff31b5ea58ef1641e",key:"b724",state:"Published",createdAt:"2020-06-28T11:22:49.373Z",sageScore:7,diffs:[{njs:12,offset:.5,notes:454,bombs:0,obstacles:65,nps:2.432,length:392,characteristic:"Standard",difficulty:"Easy",events:9228,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:186.667,paritySummary:{errors:12,warns:2,resets:0},stars:1.35},{njs:14,offset:0,notes:672,bombs:12,obstacles:65,nps:3.6,length:392,characteristic:"Standard",difficulty:"Normal",events:9228,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:186.667,paritySummary:{errors:0,warns:0,resets:4},stars:2.28},{njs:17,offset:-.4,notes:973,bombs:20,obstacles:65,nps:5.213,length:392,characteristic:"Standard",difficulty:"Hard",events:9228,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:186.667,paritySummary:{errors:0,warns:0,resets:2},stars:4.51},{njs:20,offset:.325,notes:1297,bombs:16,obstacles:39,nps:6.948,length:392,characteristic:"Standard",difficulty:"Expert",events:9228,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:186.667,paritySummary:{errors:0,warns:0,resets:2},stars:5.65},{njs:22,offset:.1,notes:1483,bombs:16,obstacles:39,nps:7.945,length:392,characteristic:"Standard",difficulty:"ExpertPlus",events:9228,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:186.667,paritySummary:{errors:2,warns:0,resets:4},stars:7.83},{njs:69,offset:0,notes:0,bombs:0,obstacles:0,nps:0,length:0,characteristic:"Lightshow",difficulty:"Easy",events:9228,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:0,paritySummary:{errors:0,warns:0,resets:0}}],downloadURL:"https://cdn.beatsaver.com/2dddd6672560cb2c1d4c689ff31b5ea58ef1641e.zip",coverURL:"https://cdn.beatsaver.com/2dddd6672560cb2c1d4c689ff31b5ea58ef1641e.jpg",previewURL:"https://cdn.beatsaver.com/2dddd6672560cb2c1d4c689ff31b5ea58ef1641e.mp3"}],createdAt:"2020-06-28T11:22:49.373Z",updatedAt:"2021-09-20T15:01:27.178739Z",lastPublishedAt:"2020-06-28T11:22:49.373Z"},{id:"7e92",name:"Adventure of a Lifetime - Coldplay",description:"This song is one that i really love. Even though its different from most of the maps i posted so far, i still mapped it anyway because i like it.\n\nAll difficulties included, Expert+ is sort of on the lower end of expert+ maps.\n\nThanks to Helen Carnate, Sorukun, and Kolezan for helping me playtest the map! \n\nHave fun going on the Adventure of a Lifetime!",uploader:{id:4284197,name:"timeweaver",uniqueSet:!0,hash:"5d47d586c5301900060b2f6c",avatar:"https://cdn.beatsaver.com/avatar/607399708121366529.png",type:"DISCORD"},metadata:{bpm:112,duration:264,songName:"Adventure of a Lifetime",songSubName:"",songAuthorName:"Coldplay",levelAuthorName:"Timeweaver"},stats:{plays:0,downloads:4599,upvotes:1352,downvotes:30,score:.9241},uploaded:"2020-01-15T05:33:28.055Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"cbfe28de7f63634096dd8ef34648753147f3f65d",key:"7e92",state:"Published",createdAt:"2020-01-15T05:33:28.055Z",sageScore:6,diffs:[{njs:10,offset:1,notes:301,bombs:0,obstacles:45,nps:1.232,length:456,characteristic:"Standard",difficulty:"Easy",events:4100,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:244.286,paritySummary:{errors:61,warns:34,resets:0}},{njs:10,offset:1,notes:467,bombs:0,obstacles:48,nps:1.91,length:456.5,characteristic:"Standard",difficulty:"Normal",events:4100,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:244.554,paritySummary:{errors:65,warns:20,resets:0}},{njs:12,offset:.5,notes:691,bombs:0,obstacles:41,nps:2.826,length:456.5,characteristic:"Standard",difficulty:"Hard",events:4100,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:244.554,paritySummary:{errors:14,warns:10,resets:0}},{njs:15,offset:0,notes:1069,bombs:0,obstacles:42,nps:4.241,length:470.5,characteristic:"Standard",difficulty:"Expert",events:4100,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:252.054,paritySummary:{errors:4,warns:4,resets:0}},{njs:16,offset:-.25,notes:1199,bombs:0,obstacles:18,nps:4.752,length:471,characteristic:"Standard",difficulty:"ExpertPlus",events:4100,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:252.321,paritySummary:{errors:5,warns:0,resets:0}}],downloadURL:"https://cdn.beatsaver.com/cbfe28de7f63634096dd8ef34648753147f3f65d.zip",coverURL:"https://cdn.beatsaver.com/cbfe28de7f63634096dd8ef34648753147f3f65d.jpg",previewURL:"https://cdn.beatsaver.com/cbfe28de7f63634096dd8ef34648753147f3f65d.mp3"}],createdAt:"2020-01-15T05:33:28.055Z",updatedAt:"2020-01-15T05:33:28.055Z",lastPublishedAt:"2020-01-15T05:33:28.055Z"},{id:"6ed4",name:"Sayuri - Koukai no Uta [Boku no Hero Academia Ending 6]",description:"sayuri slaps\nmainstream anime mapper AYAYA\n\nBPM 180 | Length 1:54\nExpert+\nExpert\nHard\n\nThanks Monteblanco for testplaying\n\nhf\n\nDM any feedback on Discord\nETAN#8341",uploader:{id:4235140,name:"etan",uniqueSet:!0,hash:"5cff0b7798cc5a672c855775",avatar:"https://cdn.beatsaver.com/avatar/136373107559497728.png",type:"DISCORD"},metadata:{bpm:180,duration:115,songName:"Koukai no Uta",songSubName:"",songAuthorName:"Sayuri",levelAuthorName:"ETAN"},stats:{plays:0,downloads:11086,upvotes:1208,downvotes:24,score:.9241},uploaded:"2019-11-08T22:57:13.632Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"108f939f6a5a2c2f02e4e1e7c9a9bf46345681a4",key:"6ed4",state:"Published",createdAt:"2019-11-08T22:57:13.632Z",sageScore:5,diffs:[{njs:13,offset:0,notes:250,bombs:0,obstacles:0,nps:2.262,length:331.5,characteristic:"Standard",difficulty:"Hard",events:5351,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:110.5,paritySummary:{errors:0,warns:0,resets:0}},{njs:15,offset:.5,notes:365,bombs:0,obstacles:0,nps:3.303,length:331.5,characteristic:"Standard",difficulty:"Expert",events:5351,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:110.5,paritySummary:{errors:0,warns:0,resets:0}},{njs:18,offset:.25,notes:518,bombs:0,obstacles:0,nps:4.688,length:331.5,characteristic:"Standard",difficulty:"ExpertPlus",events:5351,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:110.5,paritySummary:{errors:0,warns:0,resets:0}}],downloadURL:"https://cdn.beatsaver.com/108f939f6a5a2c2f02e4e1e7c9a9bf46345681a4.zip",coverURL:"https://cdn.beatsaver.com/108f939f6a5a2c2f02e4e1e7c9a9bf46345681a4.jpg",previewURL:"https://cdn.beatsaver.com/108f939f6a5a2c2f02e4e1e7c9a9bf46345681a4.mp3"}],createdAt:"2019-11-08T22:57:13.632Z",updatedAt:"2019-11-08T22:57:13.632Z",lastPublishedAt:"2019-11-08T22:57:13.632Z"},{id:"587c",name:"Cracks (Flux Pavilion Remix)",description:"*reuploaded due to an error with the Lightshow Difficulty and Beatsaver*\n\nAnother collab! This one is meant to be more geared towards playability, (and possibly even rankability) so I hope you like it.\n\nIt also has Chroma lighting courtesy of Aeroluna. He's awesome for doing the lights, go check out his stuff too!\n\nCracks (Flux Pavilion Remix) - Belle Humble, Freestylers | 140 BPM | Hard, Expert, Expert+ | Fully Mapped with Chroma Lighting by Aeroluna\n\nHere's a video of the lights with Chroma on: https://youtu.be/iwFcR5YmYwg",uploader:{id:17131,name:"tranquillizeme",uniqueSet:!0,hash:"5cff0b7798cc5a672c85609e",avatar:"https://www.gravatar.com/avatar/5cff0b7798cc5a672c85609e?d=retro",type:"SIMPLE"},metadata:{bpm:140,duration:143,songName:"Cracks",songSubName:"(Flux Pavilion Remix)",songAuthorName:"Various Artists",levelAuthorName:"TranquillizeMe"},stats:{plays:0,downloads:1454,upvotes:1082,downvotes:19,score:.9241},uploaded:"2019-07-23T01:37:18.104Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"51835f468381d630b48c36da70d2c2ce700bb274",key:"587c",state:"Published",createdAt:"2019-07-23T01:37:18.104Z",sageScore:6,diffs:[{njs:13,offset:1,notes:364,bombs:224,obstacles:30,nps:2.705,length:314,characteristic:"Standard",difficulty:"Hard",events:11202,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:134.571,paritySummary:{errors:18,warns:16,resets:0}},{njs:16,offset:0,notes:506,bombs:228,obstacles:14,nps:3.76,length:314,characteristic:"Standard",difficulty:"Expert",events:11202,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:134.571,paritySummary:{errors:9,warns:8,resets:2}},{njs:18,offset:0,notes:778,bombs:52,obstacles:18,nps:5.781,length:314,characteristic:"Standard",difficulty:"ExpertPlus",events:11202,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:134.571,paritySummary:{errors:2,warns:0,resets:13}}],downloadURL:"https://cdn.beatsaver.com/51835f468381d630b48c36da70d2c2ce700bb274.zip",coverURL:"https://cdn.beatsaver.com/51835f468381d630b48c36da70d2c2ce700bb274.jpg",previewURL:"https://cdn.beatsaver.com/51835f468381d630b48c36da70d2c2ce700bb274.mp3"}],createdAt:"2019-07-23T01:37:18.104Z",updatedAt:"2019-07-23T01:37:18.104Z",lastPublishedAt:"2019-07-23T01:37:18.104Z"},{id:"d35b",name:"[FUTURE FUNK PACK] Remember Summer Days (MACROSS 82-99 Short Ver.)",description:"FUTURE FUNK MAP PACK\n2 songs uploaded everyday through August 10th - 14th!\n\nThese first two songs are originally sung by Anri, one of my favorite City Pop artist. \n\nThis version of Remember Summer Days is a short edit I made from MACROSS 82-99's bootleg version. The original song is waaay longer\n\nPlease look forward to the upcoming maps!\n\nDM any feedback on Discord\nETAN#8341",uploader:{id:4235140,name:"etan",uniqueSet:!0,hash:"5cff0b7798cc5a672c855775",avatar:"https://cdn.beatsaver.com/avatar/136373107559497728.png",type:"DISCORD"},metadata:{bpm:110,duration:171,songName:"Remember Summer Days",songSubName:"(MACROSS 82-99 Short Ver.)",songAuthorName:"Anri",levelAuthorName:"ETAN"},stats:{plays:0,downloads:4497,upvotes:775,downvotes:8,score:.9239},uploaded:"2020-08-10T17:48:45.792Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"bb49a02cd1760f45d8c5104fc8881e61ab00b29f",key:"d35b",state:"Published",createdAt:"2020-08-10T17:48:45.792Z",sageScore:8,diffs:[{njs:10,offset:1,notes:154,bombs:0,obstacles:11,nps:.941,length:300.062,characteristic:"Standard",difficulty:"Easy",events:3539,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:163.67,paritySummary:{errors:32,warns:2,resets:0}},{njs:10,offset:1,notes:220,bombs:0,obstacles:11,nps:1.344,length:300.062,characteristic:"Standard",difficulty:"Normal",events:3539,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:163.67,paritySummary:{errors:2,warns:4,resets:0}},{njs:12,offset:.5,notes:417,bombs:0,obstacles:10,nps:2.506,length:305.125,characteristic:"Standard",difficulty:"Hard",events:3539,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:166.432,paritySummary:{errors:0,warns:0,resets:0}},{njs:14,offset:0,notes:593,bombs:0,obstacles:10,nps:3.563,length:305.125,characteristic:"Standard",difficulty:"Expert",events:3539,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:166.432,paritySummary:{errors:0,warns:0,resets:0}},{njs:17,offset:.5,notes:752,bombs:0,obstacles:10,nps:4.518,length:305.125,characteristic:"Standard",difficulty:"ExpertPlus",events:3539,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:166.432,paritySummary:{errors:0,warns:1,resets:0}}],downloadURL:"https://cdn.beatsaver.com/bb49a02cd1760f45d8c5104fc8881e61ab00b29f.zip",coverURL:"https://cdn.beatsaver.com/bb49a02cd1760f45d8c5104fc8881e61ab00b29f.jpg",previewURL:"https://cdn.beatsaver.com/bb49a02cd1760f45d8c5104fc8881e61ab00b29f.mp3"}],createdAt:"2020-08-10T17:48:45.792Z",updatedAt:"2020-08-10T17:48:45.792Z",lastPublishedAt:"2020-08-10T17:48:45.792Z"},{id:"5d1f",name:"Weight of the World (JVNA Remix) - NieR: Automata",description:"145 BPM - 4:27 Runtime\n\nStandard\nHard - 675 Notes\nExpert - 885 Notes\nExpert+ - 1169 Notes\n\nOne Saber\nExpert - 644 Notes\nExpert+ - 847 Notes\n\nLawless\nEnding E (unnerfed) - 2109 Walls\nEnding E - 1500 Walls\n\nGameplay: Coming soon",uploader:{id:4284981,name:"skylerwallace",uniqueSet:!0,hash:"5cff0b7298cc5a672c84ea67",avatar:"https://cdn.beatsaver.com/avatar/398344856868487168.png",type:"DISCORD"},metadata:{bpm:145,duration:268,songName:"Weight of the World",songSubName:"NieR:Automata",songAuthorName:"JVNA",levelAuthorName:"Skyler Wallace & Excession"},stats:{plays:0,downloads:4937,upvotes:2801,downvotes:98,score:.9239},uploaded:"2019-08-15T23:12:42.493Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"6b4e0f6a698973ca55754d057b40463063ae59d8",key:"5d1f",state:"Published",createdAt:"2019-08-15T23:12:42.493Z",sageScore:6,diffs:[{njs:13,offset:1,notes:675,bombs:6,obstacles:45,nps:2.559,length:637.5,characteristic:"Standard",difficulty:"Hard",events:12404,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:263.793,paritySummary:{errors:115,warns:44,resets:3}},{njs:15,offset:.25,notes:885,bombs:6,obstacles:49,nps:3.355,length:637.5,characteristic:"Standard",difficulty:"Expert",events:12404,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:263.793,paritySummary:{errors:67,warns:39,resets:5}},{njs:17,offset:0,notes:1169,bombs:5,obstacles:58,nps:4.432,length:637.5,characteristic:"Standard",difficulty:"ExpertPlus",events:12404,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:263.793,paritySummary:{errors:89,warns:78,resets:1}},{njs:13,offset:1,notes:644,bombs:6,obstacles:45,nps:2.441,length:637.5,characteristic:"OneSaber",difficulty:"Expert",events:12404,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:263.793,paritySummary:{errors:41,warns:47,resets:3}},{njs:15,offset:.25,notes:847,bombs:6,obstacles:49,nps:3.211,length:637.5,characteristic:"OneSaber",difficulty:"ExpertPlus",events:12404,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:263.793,paritySummary:{errors:59,warns:71,resets:0}},{njs:17,offset:0,notes:1169,bombs:5,obstacles:2108,nps:4.432,length:637.5,characteristic:"Lawless",difficulty:"Expert",events:12404,chroma:!1,me:!0,ne:!1,cinema:!1,seconds:263.793,paritySummary:{errors:89,warns:78,resets:1}},{njs:17,offset:0,notes:1169,bombs:5,obstacles:1500,nps:4.432,length:637.5,characteristic:"Lawless",difficulty:"ExpertPlus",events:12404,chroma:!1,me:!0,ne:!1,cinema:!1,seconds:263.793,paritySummary:{errors:89,warns:78,resets:1}}],downloadURL:"https://cdn.beatsaver.com/6b4e0f6a698973ca55754d057b40463063ae59d8.zip",coverURL:"https://cdn.beatsaver.com/6b4e0f6a698973ca55754d057b40463063ae59d8.jpg",previewURL:"https://cdn.beatsaver.com/6b4e0f6a698973ca55754d057b40463063ae59d8.mp3"}],createdAt:"2019-08-15T23:12:42.493Z",updatedAt:"2019-08-15T23:12:42.493Z",lastPublishedAt:"2019-08-15T23:12:42.493Z"},{id:"14aa",name:"Dummy! - Undertale OST (Toby Fox)",description:"Decided to make an Undertale map, original song by Toby Fox.",uploader:{id:14891,name:"elijoria",uniqueSet:!0,hash:"5cff0b7398cc5a672c84fbf5",avatar:"https://www.gravatar.com/avatar/5cff0b7398cc5a672c84fbf5?d=retro",type:"SIMPLE"},metadata:{bpm:125,duration:146,songName:"Dummy!",songSubName:"Undertale OST",songAuthorName:"Toby Fox (Mapped By Elijoria)",levelAuthorName:"Elijoria"},stats:{plays:0,downloads:3830,upvotes:2082,downvotes:63,score:.9239},uploaded:"2018-09-11T23:43:18Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"b9d323fb01bfdd9ece0702256416b44ce1026ec6",key:"14aa",state:"Published",createdAt:"2018-09-11T23:43:18Z",sageScore:4,diffs:[{njs:10,offset:0,notes:374,bombs:0,obstacles:49,nps:2.589,length:301,characteristic:"Standard",difficulty:"Normal",events:684,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:144.48,paritySummary:{errors:102,warns:50,resets:0}},{njs:10,offset:0,notes:515,bombs:0,obstacles:53,nps:3.565,length:301,characteristic:"Standard",difficulty:"Hard",events:684,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:144.48,paritySummary:{errors:89,warns:64,resets:0}},{njs:10,offset:0,notes:610,bombs:26,obstacles:53,nps:4.223,length:301,characteristic:"Standard",difficulty:"Expert",events:684,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:144.48,paritySummary:{errors:88,warns:67,resets:4}}],downloadURL:"https://cdn.beatsaver.com/b9d323fb01bfdd9ece0702256416b44ce1026ec6.zip",coverURL:"https://cdn.beatsaver.com/b9d323fb01bfdd9ece0702256416b44ce1026ec6.jpg",previewURL:"https://cdn.beatsaver.com/b9d323fb01bfdd9ece0702256416b44ce1026ec6.mp3"}],createdAt:"2018-09-11T23:43:18Z",updatedAt:"2018-09-11T23:43:18Z",lastPublishedAt:"2018-09-11T23:43:18Z"},{id:"acf",name:"EC2 - Prototyperaptor - Still Waiting",description:"Expert / Hard\r\nPart of the Electric City 2 song pack\r\nhttps://youtu.be/uCekFFk_nWA?t=4m29s",uploader:{id:12996,name:"rustic",uniqueSet:!0,hash:"5cff0b7298cc5a672c84e8c4",avatar:"https://www.gravatar.com/avatar/5cff0b7298cc5a672c84e8c4?d=retro",type:"SIMPLE"},metadata:{bpm:125,duration:286,songName:"EC2 - Still Waiting",songSubName:"Prototyperaptor",songAuthorName:"Rustic",levelAuthorName:"rustic"},stats:{plays:0,downloads:4651,upvotes:1935,downvotes:56,score:.9239},uploaded:"2018-07-20T22:07:52Z",automapper:!1,ranked:!0,qualified:!1,versions:[{hash:"32ae684f553e7fa90d1e5325bd54581c0afd37fa",key:"acf",state:"Published",createdAt:"2018-07-20T22:07:52Z",sageScore:5,diffs:[{njs:10,offset:0,notes:604,bombs:0,obstacles:19,nps:2.192,length:572,characteristic:"Standard",difficulty:"Hard",events:2545,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:274.56,paritySummary:{errors:7,warns:33,resets:0},stars:1.18},{njs:11,offset:0,notes:902,bombs:0,obstacles:35,nps:3.274,length:572,characteristic:"Standard",difficulty:"Expert",events:2545,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:274.56,paritySummary:{errors:19,warns:65,resets:0},stars:1.99}],downloadURL:"https://cdn.beatsaver.com/32ae684f553e7fa90d1e5325bd54581c0afd37fa.zip",coverURL:"https://cdn.beatsaver.com/32ae684f553e7fa90d1e5325bd54581c0afd37fa.jpg",previewURL:"https://cdn.beatsaver.com/32ae684f553e7fa90d1e5325bd54581c0afd37fa.mp3"}],createdAt:"2018-07-20T22:07:52Z",updatedAt:"2018-07-20T22:07:52Z",lastPublishedAt:"2018-07-20T22:07:52Z"},{id:"10842",name:"Technicolor - Madeon",description:"4th map by Canadian_Dragon in collaboration with Kry\r\nThis map is a friendly gift for a good friend of ours and has been map to their liking. Hope everyone else enjoys it aswell.\r\n\r\nRequires Chroma & Noodle Extension [Wall Map]",uploader:{id:4013,name:"canadian_dragon",uniqueSet:!0,hash:"5e0bb55364f9aa0006d6d0fa",avatar:"https://cdn.beatsaver.com/avatar/4013.jpg",type:"SIMPLE"},metadata:{bpm:127,duration:385,songName:"Technicolor",songSubName:"",songAuthorName:"Madeon",levelAuthorName:"Canadian_Dragon & Kry"},stats:{plays:0,downloads:1998,upvotes:682,downvotes:5,score:.9238},uploaded:"2020-11-02T01:52:46.653Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"0488692d1d2fa080fe429ee15efc84da40bc78d2",key:"10842",state:"Published",createdAt:"2020-11-02T01:52:46.653Z",sageScore:4,diffs:[{njs:19,offset:0,notes:1382,bombs:0,obstacles:38787,nps:3.75,length:780,characteristic:"Standard",difficulty:"ExpertPlus",events:8054,chroma:!0,me:!1,ne:!0,cinema:!1,seconds:368.504,paritySummary:{errors:0,warns:0,resets:0}}],downloadURL:"https://cdn.beatsaver.com/0488692d1d2fa080fe429ee15efc84da40bc78d2.zip",coverURL:"https://cdn.beatsaver.com/0488692d1d2fa080fe429ee15efc84da40bc78d2.jpg",previewURL:"https://cdn.beatsaver.com/0488692d1d2fa080fe429ee15efc84da40bc78d2.mp3"}],createdAt:"2020-11-02T01:52:46.653Z",updatedAt:"2020-11-02T01:52:46.653Z",lastPublishedAt:"2020-11-02T01:52:46.653Z"},{id:"142e8",name:"K/DA - MORE (ft. Madison Beer, (G)I-DLE, Lexie Liu, Jaira Burns, Seraphine)",description:"From the unofficial music pack (K/DA ALL OUT) on BSaber.com\nPack: https://bsaber.com/kda-all-out/\nTrailer: https://youtu.be/e1ry_H86zqg\nPreview (Expert+): https://youtu.be/C86ebbseC34\nLightshow: https://youtu.be/lxbch_lAEA8\n__________\nCredits🤍\nMapper: Sotarks\nLighter: Sotarks\nCurators: Pixelguy, JohnnyDee & joey\nSpecial Thanks: eliotttate & Belaya\nTrailer: Tuffiii\n__________\nCheck out K/DA🤍\nhttps://twitter.com/kda_music\nhttps://linktr.ee/kda_music\nProduced by Riot Games",uploader:{id:2523,name:"sotarks",uniqueSet:!0,hash:"5cff0b7698cc5a672c8541fd",avatar:"https://www.gravatar.com/avatar/5cff0b7698cc5a672c8541fd?d=retro",type:"SIMPLE"},metadata:{bpm:142,duration:219,songName:"MORE",songSubName:"",songAuthorName:"K/DA",levelAuthorName:"Sotarks"},stats:{plays:0,downloads:11653,upvotes:1408,downvotes:33,score:.9237},uploaded:"2021-02-17T18:04:39.306Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"8c5be566e218b8cc59c21e947bc39c1ce1f98908",key:"142e8",state:"Published",createdAt:"2021-02-17T18:04:39.306Z",sageScore:7,diffs:[{njs:10,offset:-1.2813157,notes:245,bombs:0,obstacles:19,nps:1.191,length:487,characteristic:"Standard",difficulty:"Easy",events:2819,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:205.775,paritySummary:{errors:21,warns:0,resets:0}},{njs:12,offset:.274958,notes:363,bombs:2,obstacles:13,nps:1.764,length:487,characteristic:"Standard",difficulty:"Normal",events:2819,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:205.775,paritySummary:{errors:3,warns:0,resets:0}},{njs:14,offset:-.06,notes:618,bombs:13,obstacles:13,nps:3.003,length:487,characteristic:"Standard",difficulty:"Hard",events:2819,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:205.775,paritySummary:{errors:0,warns:0,resets:4}},{njs:16,offset:-.3,notes:863,bombs:12,obstacles:106,nps:4.194,length:487,characteristic:"Standard",difficulty:"Expert",events:2819,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:205.775,paritySummary:{errors:0,warns:0,resets:2}},{njs:18,offset:-.5,notes:1041,bombs:31,obstacles:271,nps:5.059,length:487,characteristic:"Standard",difficulty:"ExpertPlus",events:2821,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:205.775,paritySummary:{errors:1,warns:4,resets:5}}],downloadURL:"https://cdn.beatsaver.com/8c5be566e218b8cc59c21e947bc39c1ce1f98908.zip",coverURL:"https://cdn.beatsaver.com/8c5be566e218b8cc59c21e947bc39c1ce1f98908.jpg",previewURL:"https://cdn.beatsaver.com/8c5be566e218b8cc59c21e947bc39c1ce1f98908.mp3"}],createdAt:"2021-02-17T18:04:39.306Z",updatedAt:"2021-02-17T18:04:39.306Z",lastPublishedAt:"2021-02-17T18:04:39.306Z"},{id:"90c3",name:"Centuries - Fallout Boy (2020) [Mapped by Ab and Qwasyx]",description:"Phew, that took a while.\nHuge thanks to Qwasyx for lighting this map as well as making all the One Saber difficulties!\nAnother thanks to Fruhead for testing.\n\nI take requests! My Discord is Ab#8582.",uploader:{id:15368,name:"theab",uniqueSet:!0,hash:"5cff0b7698cc5a672c853a14",avatar:"https://www.gravatar.com/avatar/5cff0b7698cc5a672c853a14?d=retro",type:"SIMPLE"},metadata:{bpm:176,duration:227,songName:"Centuries",songSubName:"",songAuthorName:"Fallout Boy",levelAuthorName:"Ab & Qwasyx"},stats:{plays:0,downloads:8958,upvotes:2447,downvotes:81,score:.9237},uploaded:"2020-03-16T21:06:46.074Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"e3bb02f9ecd08e4c3472fea92e604bc415338f2a",key:"90c3",state:"Published",createdAt:"2020-03-16T21:06:46.074Z",sageScore:6,diffs:[{njs:10,offset:0,notes:231,bombs:0,obstacles:46,nps:1.065,length:636,characteristic:"Standard",difficulty:"Easy",events:14169,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:216.818,paritySummary:{errors:84,warns:0,resets:0}},{njs:13,offset:-.6,notes:329,bombs:0,obstacles:4,nps:1.517,length:636,characteristic:"Standard",difficulty:"Normal",events:14169,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:216.818,paritySummary:{errors:26,warns:8,resets:0}},{njs:14,offset:.8,notes:514,bombs:92,obstacles:82,nps:2.371,length:636,characteristic:"Standard",difficulty:"Hard",events:14169,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:216.818,paritySummary:{errors:0,warns:0,resets:2}},{njs:16,offset:.4,notes:667,bombs:182,obstacles:11,nps:3.076,length:636,characteristic:"Standard",difficulty:"Expert",events:14167,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:216.818,paritySummary:{errors:1,warns:1,resets:8}},{njs:20,offset:-.2,notes:862,bombs:164,obstacles:2,nps:3.976,length:636,characteristic:"Standard",difficulty:"ExpertPlus",events:14169,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:216.818,paritySummary:{errors:1,warns:1,resets:5}},{njs:10,offset:0,notes:146,bombs:64,obstacles:4,nps:.671,length:638,characteristic:"OneSaber",difficulty:"Easy",events:14169,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:217.5,paritySummary:{errors:21,warns:15,resets:1}},{njs:13,offset:-.6,notes:276,bombs:144,obstacles:68,nps:1.269,length:638,characteristic:"OneSaber",difficulty:"Normal",events:14169,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:217.5,paritySummary:{errors:4,warns:22,resets:2}},{njs:14,offset:.8,notes:529,bombs:8,obstacles:0,nps:2.43,length:638.5,characteristic:"OneSaber",difficulty:"Hard",events:14169,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:217.67,paritySummary:{errors:8,warns:6,resets:1}},{njs:16,offset:.4,notes:548,bombs:96,obstacles:0,nps:2.522,length:637.5,characteristic:"OneSaber",difficulty:"Expert",events:14169,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:217.33,paritySummary:{errors:2,warns:0,resets:5}},{njs:20,offset:-.2,notes:830,bombs:153,obstacles:0,nps:3.807,length:639.5,characteristic:"OneSaber",difficulty:"ExpertPlus",events:14169,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:218.011,paritySummary:{errors:0,warns:2,resets:13}},{njs:20,offset:-.2,notes:0,bombs:0,obstacles:0,nps:0,length:0,characteristic:"Lightshow",difficulty:"ExpertPlus",events:14169,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:0,paritySummary:{errors:0,warns:0,resets:0}}],downloadURL:"https://cdn.beatsaver.com/e3bb02f9ecd08e4c3472fea92e604bc415338f2a.zip",coverURL:"https://cdn.beatsaver.com/e3bb02f9ecd08e4c3472fea92e604bc415338f2a.jpg",previewURL:"https://cdn.beatsaver.com/e3bb02f9ecd08e4c3472fea92e604bc415338f2a.mp3"}],createdAt:"2020-03-16T21:06:46.074Z",updatedAt:"2020-03-16T21:06:46.074Z",lastPublishedAt:"2020-03-16T21:06:46.074Z"},{id:"63ea",name:"Sabaton - Primo Victoria",description:"Old but great song by Sabaton. Hard to Expert+ are mapped.\n\nGenre: Power metal\nBPM: 124.175\nNPS: 5.51 / 3.87 / 3.06\nNJS: 16 / 13 / 11\n\nExpert+ playthrough: https://youtu.be/Z92uPY3met4",uploader:{id:1207,name:"wyxi",uniqueSet:!0,hash:"5d0abf96b8c469000699075f",avatar:"https://www.gravatar.com/avatar/5d0abf96b8c469000699075f?d=retro",type:"SIMPLE"},metadata:{bpm:124.175,duration:251,songName:"Primo Victoria",songSubName:"",songAuthorName:"Sabaton",levelAuthorName:"Wyxi"},stats:{plays:0,downloads:2832,upvotes:1838,downvotes:52,score:.9237},uploaded:"2019-09-16T19:33:52.506Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"d18d33e15faab989cc67b7a1ce0b03950295764f",key:"63ea",state:"Published",createdAt:"2019-09-16T19:33:52.506Z",sageScore:6,diffs:[{njs:11,offset:1,notes:769,bombs:4,obstacles:13,nps:3.18,length:500.5,characteristic:"Standard",difficulty:"Hard",events:2822,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:241.836,paritySummary:{errors:10,warns:2,resets:2}},{njs:13,offset:.5,notes:972,bombs:8,obstacles:12,nps:4.019,length:500.5,characteristic:"Standard",difficulty:"Expert",events:2823,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:241.836,paritySummary:{errors:15,warns:11,resets:4}},{njs:16,offset:0,notes:1385,bombs:8,obstacles:11,nps:5.727,length:500.5,characteristic:"Standard",difficulty:"ExpertPlus",events:2824,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:241.836,paritySummary:{errors:20,warns:18,resets:4}}],downloadURL:"https://cdn.beatsaver.com/d18d33e15faab989cc67b7a1ce0b03950295764f.zip",coverURL:"https://cdn.beatsaver.com/d18d33e15faab989cc67b7a1ce0b03950295764f.jpg",previewURL:"https://cdn.beatsaver.com/d18d33e15faab989cc67b7a1ce0b03950295764f.mp3"}],createdAt:"2019-09-16T19:33:52.506Z",updatedAt:"2019-09-16T19:33:52.506Z",lastPublishedAt:"2019-09-16T19:33:52.506Z"},{id:"45eb",name:"Fun Tonight - MACROSS 82-99",description:'Future funk has a special place in my heart, Beat Saber could use some more of this genre.\r\nDifficulties: Expert, Expert+ (Both on the easier end of the spectrum)\r\n\r\n"DDR/Mystikmol" Difficulty Rating:\r\nE+ -- 12\r\nExpert -- 10',uploader:{id:4284569,name:"checkthepan",uniqueSet:!0,hash:"5cff0b7398cc5a672c84f3d5",avatar:"https://cdn.beatsaver.com/avatar/184355369189900290.png",type:"DISCORD"},metadata:{bpm:130,duration:164,songName:"Fun Tonight",songSubName:"MACROSS 82-99",songAuthorName:"Checkthepan",levelAuthorName:"checkthepan"},stats:{plays:0,downloads:1300,upvotes:710,downvotes:6,score:.9237},uploaded:"2019-04-14T19:22:02Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"608bf3c4cd341a7b70199f26d44aaff71550078d",key:"45eb",state:"Published",createdAt:"2019-04-14T19:22:02Z",sageScore:7,diffs:[{njs:12,offset:0,notes:0,bombs:0,obstacles:0,nps:0,length:0,characteristic:"Standard",difficulty:"Easy",events:1545,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:0,paritySummary:{errors:0,warns:0,resets:0}},{njs:14,offset:0,notes:613,bombs:0,obstacles:30,nps:3.795,length:350,characteristic:"Standard",difficulty:"Expert",events:1545,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:161.538,paritySummary:{errors:14,warns:19,resets:0}},{njs:16,offset:0,notes:693,bombs:0,obstacles:31,nps:4.29,length:350,characteristic:"Standard",difficulty:"ExpertPlus",events:1545,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:161.538,paritySummary:{errors:12,warns:28,resets:0}}],downloadURL:"https://cdn.beatsaver.com/608bf3c4cd341a7b70199f26d44aaff71550078d.zip",coverURL:"https://cdn.beatsaver.com/608bf3c4cd341a7b70199f26d44aaff71550078d.jpg",previewURL:"https://cdn.beatsaver.com/608bf3c4cd341a7b70199f26d44aaff71550078d.mp3"}],createdAt:"2019-04-14T19:22:02Z",updatedAt:"2019-04-14T19:22:02Z",lastPublishedAt:"2019-04-14T19:22:02Z"},{id:"443d",name:"PUSSY - Rammstein",description:"Another one!\r\n\r\nMaybe don't let your kids play this one until they are a bit older....",uploader:{id:27983,name:"heisenbergirl",uniqueSet:!0,hash:"5cff0b7298cc5a672c84ec30",avatar:"https://www.gravatar.com/avatar/5cff0b7298cc5a672c84ec30?d=retro",type:"SIMPLE"},metadata:{bpm:135,duration:240,songName:"PUSSY",songSubName:"Rammstein",songAuthorName:"Heisenberg",levelAuthorName:"heisenbergirl"},stats:{plays:0,downloads:1710,upvotes:1218,downvotes:25,score:.9237},uploaded:"2019-04-08T04:27:04Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"54f6e76446b3a96cc4707fb2d2aa8bd1efd0baf3",key:"443d",state:"Published",createdAt:"2019-04-08T04:27:04Z",sageScore:6,diffs:[{njs:14,offset:0,notes:711,bombs:0,obstacles:1,nps:3.1,length:516,characteristic:"Standard",difficulty:"Expert",events:12824,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:229.333,paritySummary:{errors:13,warns:24,resets:0}},{njs:16,offset:0,notes:967,bombs:12,obstacles:7,nps:4.217,length:516,characteristic:"Standard",difficulty:"ExpertPlus",events:12824,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:229.333,paritySummary:{errors:40,warns:52,resets:7}}],downloadURL:"https://cdn.beatsaver.com/54f6e76446b3a96cc4707fb2d2aa8bd1efd0baf3.zip",coverURL:"https://cdn.beatsaver.com/54f6e76446b3a96cc4707fb2d2aa8bd1efd0baf3.jpg",previewURL:"https://cdn.beatsaver.com/54f6e76446b3a96cc4707fb2d2aa8bd1efd0baf3.mp3"}],createdAt:"2019-04-08T04:27:04Z",updatedAt:"2019-04-08T04:27:04Z",lastPublishedAt:"2019-04-08T04:27:04Z"},{id:"1ad55",name:"Porter Robinson & Madeon - Shelter (Modchart)",description:"This is a modchart that i wanted to do for a long time, i saved this song becuase I love it.\r\nAnd today I'm proud to show you my new modchart!\r\nI made this map in a week and i really enjoyed the process!\r\n\r\nShowcase: https://www.youtube.com/watch?v=a4zSCDYRwAQ\r\n\r\nIf you have any feedback dont be shy and tell me on discord:\r\nTzurS11#1111",uploader:{id:4284455,name:"TzurS11",uniqueSet:!0,hash:"6040a8135ab13d0006093512",avatar:"https://cdn.beatsaver.com/avatar/474645781786263552.png",type:"DISCORD"},metadata:{bpm:200,duration:219,songName:"Shelter",songSubName:"",songAuthorName:"Porter Robinson & Madeon",levelAuthorName:"TzurS11"},stats:{plays:0,downloads:12349,upvotes:737,downvotes:7,score:.9236},uploaded:"2021-08-01T20:31:30.562Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"740c5f5d7b730285c8d13fad1107be4659eb2839",key:"1ad55",state:"Published",createdAt:"2021-08-01T20:31:30.562Z",sageScore:3,diffs:[{njs:19,offset:-.05,notes:623,bombs:4,obstacles:0,nps:3.146,length:660,characteristic:"Standard",difficulty:"Expert",events:81591,chroma:!0,me:!1,ne:!1,cinema:!1,seconds:198,paritySummary:{errors:0,warns:0,resets:1}},{njs:19,offset:-.05,notes:623,bombs:4,obstacles:24892,nps:3.146,length:660,characteristic:"Standard",difficulty:"ExpertPlus",events:81591,chroma:!0,me:!1,ne:!0,cinema:!1,seconds:198,paritySummary:{errors:0,warns:0,resets:1}}],downloadURL:"https://cdn.beatsaver.com/740c5f5d7b730285c8d13fad1107be4659eb2839.zip",coverURL:"https://cdn.beatsaver.com/740c5f5d7b730285c8d13fad1107be4659eb2839.jpg",previewURL:"https://cdn.beatsaver.com/740c5f5d7b730285c8d13fad1107be4659eb2839.mp3"}],createdAt:"2021-08-01T20:31:30.562Z",updatedAt:"2021-08-01T20:31:30.562Z",lastPublishedAt:"2021-08-01T20:31:30.562Z"},{id:"7326",name:"The Greatest Show - Mapped by TheAb",description:"This is the most time I've ever put into a map. Almost 14 hours have been put into it, and I really appreciate the light-show I've done. Truly hope you enjoy!\n\nExpert+: 4.55NPS\nExpert: 3.49NPS\nHard: 2.57NPS\nNormal: 1.61NPS\n12,601 Lighting events.\n\nOriginal Song: https://www.youtube.com/watch?v=NyVYXRD1Ans\n\nTwitter: https://twitter.com/TheAb03 / Discord: Ab#8582\nI take requests! DM Ab#8582 on Discord for more info.",uploader:{id:15368,name:"theab",uniqueSet:!0,hash:"5cff0b7698cc5a672c853a14",avatar:"https://www.gravatar.com/avatar/5cff0b7698cc5a672c853a14?d=retro",type:"SIMPLE"},metadata:{bpm:158,duration:301,songName:"The Greatest Show",songSubName:"",songAuthorName:"Hugh Jackman, Keala Settle, Zac Efron, Zendaya & The Greatest Showman Ensemble",levelAuthorName:"Ab"},stats:{plays:0,downloads:3783,upvotes:1160,downvotes:23,score:.9235},uploaded:"2019-12-01T19:39:02.667Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"f621c70d06e8f5405ffa428f7b742b123208a656",key:"7326",state:"Published",createdAt:"2019-12-01T19:39:02.667Z",sageScore:5,diffs:[{njs:10,offset:0,notes:489,bombs:36,obstacles:75,nps:1.672,length:770.149,characteristic:"Standard",difficulty:"Normal",events:12599,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:292.462,paritySummary:{errors:43,warns:13,resets:6}},{njs:12,offset:.5,notes:777,bombs:31,obstacles:96,nps:2.657,length:770.149,characteristic:"Standard",difficulty:"Hard",events:12599,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:292.462,paritySummary:{errors:1,warns:0,resets:8}},{njs:15,offset:.3,notes:1056,bombs:48,obstacles:100,nps:3.611,length:770.149,characteristic:"Standard",difficulty:"Expert",events:12986,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:292.462,paritySummary:{errors:3,warns:1,resets:9}},{njs:19,offset:0,notes:1376,bombs:34,obstacles:97,nps:4.705,length:770.149,characteristic:"Standard",difficulty:"ExpertPlus",events:12595,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:292.462,paritySummary:{errors:0,warns:0,resets:6}},{njs:19,offset:0,notes:1,bombs:0,obstacles:0,nps:0,length:0,characteristic:"Lightshow",difficulty:"Easy",events:12568,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:0,paritySummary:{errors:1,warns:0,resets:0}}],downloadURL:"https://cdn.beatsaver.com/f621c70d06e8f5405ffa428f7b742b123208a656.zip",coverURL:"https://cdn.beatsaver.com/f621c70d06e8f5405ffa428f7b742b123208a656.jpg",previewURL:"https://cdn.beatsaver.com/f621c70d06e8f5405ffa428f7b742b123208a656.mp3"}],createdAt:"2019-12-01T19:39:02.667Z",updatedAt:"2019-12-01T19:39:02.667Z",lastPublishedAt:"2019-12-01T19:39:02.667Z"},{id:"56c2",name:"On The Floor (ft. Pitbull) - Jennifer Lopez",description:"You can most certainly dance to this song, I hope you like it!\nSend me your thoughts on Discord: Teuflum#5982\n\nExpert+ preview: https://www.youtube.com/watch?v=TPU4mCQngNQ\n\nMany thanks to my playtesters Redmagi, techbutterfly and Helen Carnate!\n\nDM me your feedback on discord: Teuflum#5982",uploader:{id:68740,name:"Teuflum",uniqueSet:!0,hash:"5cff0b7498cc5a672c851a6b",avatar:"https://cdn.beatsaver.com/avatar/114706869460664326.png",type:"DISCORD"},metadata:{bpm:130,duration:231,songName:"On The Floor",songSubName:"(ft. Pitbull)",songAuthorName:"Jennifer Lopez",levelAuthorName:"Teuflum"},stats:{plays:0,downloads:8646,upvotes:1696,downvotes:46,score:.9235},uploaded:"2019-07-13T12:11:30.889Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"56d18c176906a23b15702d3eb33f8669322ee312",key:"56c2",state:"Published",createdAt:"2019-07-13T12:11:30.889Z",sageScore:7,diffs:[{njs:10,offset:1,notes:307,bombs:0,obstacles:28,nps:1.415,length:470,characteristic:"Standard",difficulty:"Easy",events:3081,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:216.923,paritySummary:{errors:87,warns:4,resets:0}},{njs:12,offset:1,notes:383,bombs:0,obstacles:30,nps:1.766,length:470,characteristic:"Standard",difficulty:"Normal",events:3081,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:216.923,paritySummary:{errors:75,warns:13,resets:0}},{njs:14,offset:1,notes:638,bombs:0,obstacles:32,nps:2.941,length:470,characteristic:"Standard",difficulty:"Hard",events:3081,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:216.923,paritySummary:{errors:29,warns:23,resets:0}},{njs:16,offset:.5,notes:838,bombs:0,obstacles:26,nps:3.863,length:470,characteristic:"Standard",difficulty:"Expert",events:3081,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:216.923,paritySummary:{errors:30,warns:36,resets:0}},{njs:17,offset:0,notes:949,bombs:0,obstacles:23,nps:4.375,length:470,characteristic:"Standard",difficulty:"ExpertPlus",events:3081,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:216.923,paritySummary:{errors:33,warns:43,resets:0}}],downloadURL:"https://cdn.beatsaver.com/56d18c176906a23b15702d3eb33f8669322ee312.zip",coverURL:"https://cdn.beatsaver.com/56d18c176906a23b15702d3eb33f8669322ee312.jpg",previewURL:"https://cdn.beatsaver.com/56d18c176906a23b15702d3eb33f8669322ee312.mp3"}],createdAt:"2019-07-13T12:11:30.889Z",updatedAt:"2019-07-13T12:11:30.889Z",lastPublishedAt:"2019-07-13T12:11:30.889Z"},{id:"492e",name:"[OLD] Centuries - Fallout Boy | 2019 version | Mapped and Lighted by Ab",description:"Alright! Another one.\nNormal is pretty much top-Easy, couldn't decide.\nAb#4940 if you're interested in collabs\n\nAlso lights could get laggy",uploader:{id:15368,name:"theab",uniqueSet:!0,hash:"5cff0b7698cc5a672c853a14",avatar:"https://www.gravatar.com/avatar/5cff0b7698cc5a672c853a14?d=retro",type:"SIMPLE"},metadata:{bpm:176,duration:227,songName:"Centuries",songSubName:"Fallout Boy",songAuthorName:"Ab",levelAuthorName:"TheAb"},stats:{plays:0,downloads:4393,upvotes:2252,downvotes:72,score:.9235},uploaded:"2019-04-28T22:58:20Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"158e65b2e9861c626344049ec4a069d1523ad060",key:"492e",state:"Published",createdAt:"2019-04-28T22:58:20Z",sageScore:4,diffs:[{njs:11,offset:0,notes:289,bombs:42,obstacles:4,nps:1.333,length:635.75,characteristic:"Standard",difficulty:"Normal",events:22890,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:216.733,paritySummary:{errors:79,warns:35,resets:2}},{njs:12,offset:0,notes:527,bombs:85,obstacles:5,nps:2.425,length:637.5,characteristic:"Standard",difficulty:"Hard",events:1,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:217.33,paritySummary:{errors:62,warns:51,resets:9}},{njs:12,offset:0,notes:762,bombs:158,obstacles:7,nps:3.506,length:637.5,characteristic:"Standard",difficulty:"Expert",events:22890,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:217.33,paritySummary:{errors:54,warns:44,resets:5}},{njs:18,offset:0,notes:1145,bombs:186,obstacles:0,nps:5.267,length:637.625,characteristic:"Standard",difficulty:"ExpertPlus",events:22890,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:217.372,paritySummary:{errors:68,warns:90,resets:6}}],downloadURL:"https://cdn.beatsaver.com/158e65b2e9861c626344049ec4a069d1523ad060.zip",coverURL:"https://cdn.beatsaver.com/158e65b2e9861c626344049ec4a069d1523ad060.jpg",previewURL:"https://cdn.beatsaver.com/158e65b2e9861c626344049ec4a069d1523ad060.mp3"}],createdAt:"2019-04-28T22:58:20Z",updatedAt:"2019-04-28T22:58:20Z",lastPublishedAt:"2019-04-28T22:58:20Z"},{id:"8215",name:"David Guetta, Brooks & Loote - Better When You're Gone",description:"First map of my Future House pack. I remember that I started this a long time ago, even before I had my VR; about 5 months ago going into September.\n\nVideo: https://youtu.be/NDDn7-Lzrlo\n\nEasy: Notes: 130 NPS: 1.22 NJS: 10\nNormal: Notes: 164 NPS: 1.65 NJS: 12\nHard: Notes: 267 NPS: 2.64 NJS: 14\nExpert: Notes: 398 NPS: 3.94 NJS: 16\nExpert+: Notes: 483 NPS: 4.76 NJS: 18\n\nCheck out my lightshows here: https://www.youtube.com/playlist?list=PLwl6dYq72JOYu1BnKl5WATa4Dh__ZJmuN",uploader:{id:14808,name:"halcyon12",uniqueSet:!0,hash:"5cff0b7698cc5a672c8547ad",avatar:"https://www.gravatar.com/avatar/5cff0b7698cc5a672c8547ad?d=retro",type:"SIMPLE"},metadata:{bpm:128,duration:106,songName:"Better When You're Gone",songSubName:"(Ft. Loote)",songAuthorName:"David Guetta, Brooks",levelAuthorName:"Halcyon12"},stats:{plays:0,downloads:2743,upvotes:977,downvotes:16,score:.9233},uploaded:"2020-01-27T23:27:20.606Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"048b444b7011388e63e4b7bab1e8f96b4b51fa3d",key:"8215",state:"Published",createdAt:"2020-01-27T23:27:20.606Z",sageScore:6,diffs:[{njs:10,offset:1,notes:130,bombs:0,obstacles:0,nps:1.29,length:215,characteristic:"Standard",difficulty:"Easy",events:2063,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:100.781,paritySummary:{errors:54,warns:2,resets:0}},{njs:12,offset:.5,notes:164,bombs:0,obstacles:7,nps:1.652,length:211.75,characteristic:"Standard",difficulty:"Normal",events:2063,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:99.258,paritySummary:{errors:16,warns:6,resets:0}},{njs:14,offset:0,notes:267,bombs:0,obstacles:6,nps:2.643,length:215.5,characteristic:"Standard",difficulty:"Hard",events:2063,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:101.016,paritySummary:{errors:2,warns:2,resets:0}},{njs:16,offset:-.25,notes:398,bombs:0,obstacles:5,nps:3.94,length:215.5,characteristic:"Standard",difficulty:"Expert",events:2060,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:101.016,paritySummary:{errors:1,warns:0,resets:0}},{njs:18,offset:-.5,notes:483,bombs:4,obstacles:6,nps:4.765,length:216.25,characteristic:"Standard",difficulty:"ExpertPlus",events:2063,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:101.367,paritySummary:{errors:13,warns:18,resets:6}}],downloadURL:"https://cdn.beatsaver.com/048b444b7011388e63e4b7bab1e8f96b4b51fa3d.zip",coverURL:"https://cdn.beatsaver.com/048b444b7011388e63e4b7bab1e8f96b4b51fa3d.jpg",previewURL:"https://cdn.beatsaver.com/048b444b7011388e63e4b7bab1e8f96b4b51fa3d.mp3"}],createdAt:"2020-01-27T23:27:20.606Z",updatedAt:"2020-01-27T23:27:20.606Z",lastPublishedAt:"2020-01-27T23:27:20.606Z"},{id:"6352",name:"Paladin - EnV",description:'Map creators:\r\nYume - Notes / Walls\r\nRexxxzi - Lights\r\n\r\nThis is "High Tier Expert" difficulty\r\nWe hope you\'ll enjoy the map!',uploader:{id:37025,name:"yume",uniqueSet:!0,hash:"5cff0b7698cc5a672c853e8a",avatar:"https://www.gravatar.com/avatar/5cff0b7698cc5a672c853e8a?d=retro",type:"SIMPLE"},metadata:{bpm:130,duration:242,songName:"Paladin",songSubName:"",songAuthorName:"EnV",levelAuthorName:"Yume ft. Rexxz Lights"},stats:{plays:0,downloads:1187,upvotes:1079,downvotes:20,score:.9233},uploaded:"2019-09-14T12:32:01.763Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"583598b60c0ef891738d3b07c564cadff6500c63",key:"6352",state:"Published",createdAt:"2019-09-14T12:32:01.763Z",sageScore:7,diffs:[{njs:12,offset:0,notes:0,bombs:0,obstacles:0,nps:0,length:0,characteristic:"Standard",difficulty:"Easy",events:9642,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:0,paritySummary:{errors:0,warns:0,resets:0}},{njs:16,offset:0,notes:1065,bombs:0,obstacles:7902,nps:4.615,length:500,characteristic:"Standard",difficulty:"Expert",events:9524,chroma:!1,me:!0,ne:!1,cinema:!1,seconds:230.769,paritySummary:{errors:0,warns:0,resets:0}},{njs:16,offset:0,notes:1065,bombs:0,obstacles:7923,nps:4.615,length:500,characteristic:"Standard",difficulty:"ExpertPlus",events:9524,chroma:!1,me:!0,ne:!1,cinema:!1,seconds:230.769,paritySummary:{errors:0,warns:0,resets:0}}],downloadURL:"https://cdn.beatsaver.com/583598b60c0ef891738d3b07c564cadff6500c63.zip",coverURL:"https://cdn.beatsaver.com/583598b60c0ef891738d3b07c564cadff6500c63.jpg",previewURL:"https://cdn.beatsaver.com/583598b60c0ef891738d3b07c564cadff6500c63.mp3"}],createdAt:"2019-09-14T12:32:01.763Z",updatedAt:"2019-09-14T12:32:01.763Z",lastPublishedAt:"2019-09-14T12:32:01.763Z"},{id:"2c14",name:"CHVRCHES - The Mother We Share",description:"I noticed CHVRCHES' most popular song didn't have a map, so I gave it a shot. Check out my other maps, too!\r\n\r\nPreview: https://youtu.be/bGnUqfGrglY\r\nNormal / Hard / Expert\r\n\r\nhttps://www.twitch.tv/Syntheseizure",uploader:{id:31265,name:"syntheseizure",uniqueSet:!0,hash:"5cff0b7698cc5a672c8546bd",avatar:"https://www.gravatar.com/avatar/5cff0b7698cc5a672c8546bd?d=retro",type:"SIMPLE"},metadata:{bpm:87,duration:192,songName:"The Mother We Share",songSubName:"CHVRCHES",songAuthorName:"Syntheseizure",levelAuthorName:"Syntheseizure"},stats:{plays:0,downloads:1880,upvotes:1056,downvotes:19,score:.9233},uploaded:"2019-01-08T20:34:12Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"4f96ae058a970508dad582e0ea60d5e6ad9d38b5",key:"2c14",state:"Published",createdAt:"2019-01-08T20:34:12Z",sageScore:4,diffs:[{njs:10,offset:0,notes:373,bombs:0,obstacles:2,nps:2.053,length:263.5,characteristic:"Standard",difficulty:"Normal",events:710,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:181.724,paritySummary:{errors:36,warns:7,resets:0}},{njs:10,offset:0,notes:480,bombs:0,obstacles:6,nps:2.641,length:263.5,characteristic:"Standard",difficulty:"Hard",events:710,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:181.724,paritySummary:{errors:20,warns:12,resets:0}},{njs:10,offset:0,notes:683,bombs:0,obstacles:12,nps:3.758,length:263.5,characteristic:"Standard",difficulty:"Expert",events:708,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:181.724,paritySummary:{errors:21,warns:7,resets:0}}],downloadURL:"https://cdn.beatsaver.com/4f96ae058a970508dad582e0ea60d5e6ad9d38b5.zip",coverURL:"https://cdn.beatsaver.com/4f96ae058a970508dad582e0ea60d5e6ad9d38b5.jpg",previewURL:"https://cdn.beatsaver.com/4f96ae058a970508dad582e0ea60d5e6ad9d38b5.mp3"}],createdAt:"2019-01-08T20:34:12Z",updatedAt:"2019-01-08T20:34:12Z",lastPublishedAt:"2019-01-08T20:34:12Z"},{id:"2293",name:"My Soul,Your Beats",description:"Over 10 hours of work went into this to make it as good as it could be\r\nI consider this a new beginning, all previous maps of mine pale in comparison",uploader:{id:47724,name:"dafrandle",uniqueSet:!0,hash:"5cff0b7598cc5a672c8527e9",avatar:"https://www.gravatar.com/avatar/5cff0b7598cc5a672c8527e9?d=retro",type:"SIMPLE"},metadata:{bpm:145,duration:276,songName:"My Soul,Your Beats",songSubName:"Lia",songAuthorName:"dafrandle",levelAuthorName:"dafrandle"},stats:{plays:0,downloads:3582,upvotes:1440,downvotes:35,score:.9233},uploaded:"2018-11-27T23:47:18Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"abc11caed9ca86fda3dacc12dd0bcca51041ebe0",key:"2293",state:"Published",createdAt:"2018-11-27T23:47:18Z",sageScore:6,diffs:[{njs:9,offset:0,notes:505,bombs:0,obstacles:3,nps:1.9,length:642.375,characteristic:"Standard",difficulty:"Normal",events:3955,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:265.81,paritySummary:{errors:77,warns:13,resets:0}},{njs:10,offset:0,notes:768,bombs:0,obstacles:26,nps:2.889,length:642.375,characteristic:"Standard",difficulty:"Hard",events:3955,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:265.81,paritySummary:{errors:64,warns:24,resets:0}},{njs:11,offset:0,notes:1120,bombs:62,obstacles:29,nps:4.214,length:642.375,characteristic:"Standard",difficulty:"Expert",events:3955,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:265.81,paritySummary:{errors:89,warns:40,resets:5}}],downloadURL:"https://cdn.beatsaver.com/abc11caed9ca86fda3dacc12dd0bcca51041ebe0.zip",coverURL:"https://cdn.beatsaver.com/abc11caed9ca86fda3dacc12dd0bcca51041ebe0.jpg",previewURL:"https://cdn.beatsaver.com/abc11caed9ca86fda3dacc12dd0bcca51041ebe0.mp3"}],createdAt:"2018-11-27T23:47:18Z",updatedAt:"2018-11-27T23:47:18Z",lastPublishedAt:"2018-11-27T23:47:18Z"},{id:"1a0ba",name:"[Electro Swing Pack] Wolfgang Lohr & Maskarade - Hit The Road Jack",description:"Nixie Presents: Electro Swing Pack!\n\n10 electro swing songs with expert and expert+ diffs to make your booty swing!\n\nGet The Pack: \nhttps://bsaber.com/electro-swing-pack/\n\nMap Gameplay:\nhttps://youtu.be/0ObNR9n_dDs\n\nComplete Pack Playthrough:\nhttps://youtu.be/yj9rw4MEh7s\n\nHeyya! After looking for some dancey electro swing maps, I noticed that there barely are any!\nSo I took matters into my own hands, learning mapping basically from scratch,\nscrapping my first failed attempts and then finally making a map that was good.\nI found it so fun that I ended up making 9 more maps,\nand fine tuned them with the help of the testplayers in BSMG,\nas well as the lovely curators from the bsaber discord.\n\nHuge thanks in particular to:\nMonstor, Bearly, Noxn, Bullet, Vaser888, Tocxx, Jafdy, Storm Knight and Pixelguy!\n\nIf you want to talk to me, here is my Discord:\nNixie.Korten#6944",uploader:{id:4286374,name:"nixiekorten",uniqueSet:!0,hash:"6096752e12772e0006e2f7e6",avatar:"https://cdn.beatsaver.com/avatar/840550221690699776.png",type:"DISCORD"},metadata:{bpm:124,duration:159,songName:"Hit The Road Jack",songSubName:"",songAuthorName:"Wolfgang Lohr & Maskarade",levelAuthorName:"Nixie.Korten"},stats:{plays:0,downloads:14063,upvotes:841,downvotes:11,score:.9232},uploaded:"2021-07-08T15:26:18.072Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"75f10751d58f6f1ab0bc36e94039a144256adccb",key:"1a0ba",state:"Published",createdAt:"2021-07-08T15:26:18.072Z",sageScore:4,diffs:[{njs:16,offset:-.25,notes:475,bombs:0,obstacles:0,nps:3.089,length:317.75,characteristic:"Standard",difficulty:"Expert",events:1846,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:153.75,paritySummary:{errors:0,warns:0,resets:0}},{njs:19,offset:.25,notes:750,bombs:0,obstacles:0,nps:4.878,length:317.75,characteristic:"Standard",difficulty:"ExpertPlus",events:1846,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:153.75,paritySummary:{errors:0,warns:0,resets:0}}],downloadURL:"https://cdn.beatsaver.com/75f10751d58f6f1ab0bc36e94039a144256adccb.zip",coverURL:"https://cdn.beatsaver.com/75f10751d58f6f1ab0bc36e94039a144256adccb.jpg",previewURL:"https://cdn.beatsaver.com/75f10751d58f6f1ab0bc36e94039a144256adccb.mp3"}],createdAt:"2021-07-08T15:26:18.072Z",updatedAt:"2021-07-08T15:26:18.072Z",lastPublishedAt:"2021-07-08T15:26:18.072Z"},{id:"924a",name:'JoJo ~Sono Chi no Sadame~ [JoJo\'s Bizarre Adventure Opening] - Hiroaki "TOMMY" Tominaga',description:'Not many people know this but my full name is actually Joetastic Joestar ;)\n\n"JoJo ~Sono Chi no Sadame~" is the first opening of JoJo\'s Bizarre Adventure: Phantom Blood by Hiroaki "TOMMY" Tominaga.\n\nMap Preview: https://youtu.be/WPprA9AS35A',uploader:{id:58338,name:"Joetastic",uniqueSet:!0,hash:"5cff0b7498cc5a672c85050e",avatar:"https://cdn.beatsaver.com/avatar/227767566402191360.png",type:"DISCORD"},metadata:{bpm:146,duration:263,songName:"JoJo ~Sono Chi no Sadame~",songSubName:"",songAuthorName:'Hiroaki "TOMMY" Tominaga',levelAuthorName:"Joetastic"},stats:{plays:0,downloads:6854,upvotes:1594,downvotes:42,score:.9232},uploaded:"2020-03-21T18:09:50.603Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"eb2b28402e27f784a64f99d338696a2bdd59fe2c",key:"924a",state:"Published",createdAt:"2020-03-21T18:09:50.603Z",sageScore:5,diffs:[{njs:16,offset:0,notes:1305,bombs:0,obstacles:16,nps:5.053,length:628.5,characteristic:"Standard",difficulty:"ExpertPlus",events:4918,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:258.288,paritySummary:{errors:30,warns:38,resets:0}}],downloadURL:"https://cdn.beatsaver.com/eb2b28402e27f784a64f99d338696a2bdd59fe2c.zip",coverURL:"https://cdn.beatsaver.com/eb2b28402e27f784a64f99d338696a2bdd59fe2c.jpg",previewURL:"https://cdn.beatsaver.com/eb2b28402e27f784a64f99d338696a2bdd59fe2c.mp3"}],createdAt:"2020-03-21T18:09:50.603Z",updatedAt:"2020-03-21T18:09:50.603Z",lastPublishedAt:"2020-03-21T18:09:50.603Z"},{id:"aa5c",name:"MOMOLAND - BAAM (Remaster)",description:"Expert+ Preview: https://www.youtube.com/watch?v=5PUSZT6jUaY\n\nMan, I have been doing this for a year now. I feel old. Well enjoy this remake of the first map I uploaded!\n\nComments? Like it? Hate it? Let me know on Discord @Bloodcloak#5725 ! Or drop by the Kpop discord at: https://discord.gg/c9uHGYP",uploader:{id:71661,name:"bloodcloak",uniqueSet:!0,hash:"5cff0b7698cc5a672c8551d3",avatar:"https://cdn.beatsaver.com/avatar/205707707187986442.png",type:"DISCORD"},metadata:{bpm:127,duration:209,songName:"BAAM",songSubName:"Remastered Map",songAuthorName:"MOMOLAND",levelAuthorName:"Bloodcloak"},stats:{plays:0,downloads:8638,upvotes:1222,downvotes:26,score:.9231},uploaded:"2020-05-25T19:34:51.367Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"72746e0a89246d11a8fe7f3a23113f4605980a09",key:"aa5c",state:"Published",createdAt:"2020-05-25T19:34:51.367Z",sageScore:5,diffs:[{njs:12,offset:.4,notes:551,bombs:0,obstacles:148,nps:2.706,length:431,characteristic:"Standard",difficulty:"Hard",events:2998,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:203.622,paritySummary:{errors:4,warns:0,resets:0}},{njs:16,offset:-.2,notes:823,bombs:0,obstacles:120,nps:4.041,length:431.063,characteristic:"Standard",difficulty:"Expert",events:2998,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:203.652,paritySummary:{errors:6,warns:2,resets:0}},{njs:18,offset:-.4,notes:885,bombs:0,obstacles:111,nps:4.346,length:431,characteristic:"Standard",difficulty:"ExpertPlus",events:2998,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:203.622,paritySummary:{errors:3,warns:7,resets:0}}],downloadURL:"https://cdn.beatsaver.com/72746e0a89246d11a8fe7f3a23113f4605980a09.zip",coverURL:"https://cdn.beatsaver.com/72746e0a89246d11a8fe7f3a23113f4605980a09.jpg",previewURL:"https://cdn.beatsaver.com/72746e0a89246d11a8fe7f3a23113f4605980a09.mp3"}],createdAt:"2020-05-25T19:34:51.367Z",updatedAt:"2020-05-25T19:34:51.367Z",lastPublishedAt:"2020-05-25T19:34:51.367Z"},{id:"33dc",name:"CeeLo Green ft. Jack Black - Kung Fu Fighting",description:"I only realised this yesterday, but I've managed to make a map of this Chinese inspired classic just in time for the Lunar new year. So happy Chinese new year everybody and I hope you enjoy it!\r\nTime spent mapping: 8:49\r\n\r\nVideo Preview: https://www.youtube.com/watch?v=73jUl1rH0Fo\r\nBeastSaber: https://bsaber.com/members/stumi/",uploader:{id:4785,name:"stumi",uniqueSet:!1,hash:"5cff0b7398cc5a672c84f720",avatar:"https://www.gravatar.com/avatar/5cff0b7398cc5a672c84f720?d=retro",type:"SIMPLE"},metadata:{bpm:110,duration:140,songName:"Kung Fu Fighting",songSubName:"CeeLo Green ft.Jack Black",songAuthorName:"Stumi",levelAuthorName:"stumi"},stats:{plays:0,downloads:7920,upvotes:1959,downvotes:59,score:.9231},uploaded:"2019-02-05T21:06:09Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"b653e83bdae8028e77e84f751d23d619bc55f6f7",key:"33dc",state:"Published",createdAt:"2019-02-05T21:06:09Z",sageScore:6,diffs:[{njs:10,offset:0,notes:154,bombs:0,obstacles:26,nps:1.26,length:224,characteristic:"Standard",difficulty:"Easy",events:1344,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:122.182,paritySummary:{errors:16,warns:18,resets:0}},{njs:10,offset:0,notes:197,bombs:0,obstacles:24,nps:1.612,length:224,characteristic:"Standard",difficulty:"Normal",events:1344,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:122.182,paritySummary:{errors:17,warns:32,resets:0}},{njs:11,offset:0,notes:351,bombs:0,obstacles:13,nps:2.873,length:224,characteristic:"Standard",difficulty:"Hard",events:1344,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:122.182,paritySummary:{errors:29,warns:29,resets:0}},{njs:14,offset:0,notes:502,bombs:0,obstacles:17,nps:4.109,length:224,characteristic:"Standard",difficulty:"Expert",events:1346,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:122.182,paritySummary:{errors:32,warns:40,resets:0}}],downloadURL:"https://cdn.beatsaver.com/b653e83bdae8028e77e84f751d23d619bc55f6f7.zip",coverURL:"https://cdn.beatsaver.com/b653e83bdae8028e77e84f751d23d619bc55f6f7.jpg",previewURL:"https://cdn.beatsaver.com/b653e83bdae8028e77e84f751d23d619bc55f6f7.mp3"}],createdAt:"2019-02-05T21:06:09Z",updatedAt:"2019-02-05T21:06:09Z",lastPublishedAt:"2019-02-05T21:06:09Z"},{id:"24e",name:"Maculate - Get Schwifty (Andromulus Remix)",description:"Finished version! This track has 4 difficulties: Easy, Normal, Hard and Expert. So everyone can now get schwifty, regardless of skill level. \r\n\r\nThis is my first finished track, all feedback is welcome!",uploader:{id:53049,name:"enclose",uniqueSet:!1,hash:"5cff0b7398cc5a672c84ed3b",avatar:"https://www.gravatar.com/avatar/5cff0b7398cc5a672c84ed3b?d=retro",type:"SIMPLE"},metadata:{bpm:200,duration:279,songName:"Get Schwifty (Andromulus Remix)",songSubName:"",songAuthorName:"Maculate",levelAuthorName:"enclose"},stats:{plays:0,downloads:5744,upvotes:4485,downvotes:191,score:.9231},uploaded:"2018-05-26T15:22:35Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"33d5c4fff97822eef1f02fc53bb0561f23489efe",key:"24e",state:"Published",createdAt:"2018-05-26T15:22:35Z",sageScore:6,diffs:[{njs:10,offset:0,notes:411,bombs:0,obstacles:77,nps:1.527,length:897,characteristic:"Standard",difficulty:"Easy",events:1673,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:269.1,paritySummary:{errors:120,warns:53,resets:0}},{njs:10,offset:0,notes:518,bombs:0,obstacles:120,nps:1.925,length:897,characteristic:"Standard",difficulty:"Normal",events:1754,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:269.1,paritySummary:{errors:123,warns:64,resets:0}},{njs:10,offset:0,notes:629,bombs:0,obstacles:131,nps:2.337,length:897,characteristic:"Standard",difficulty:"Hard",events:1890,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:269.1,paritySummary:{errors:119,warns:77,resets:0}},{njs:10,offset:0,notes:684,bombs:0,obstacles:220,nps:2.542,length:897,characteristic:"Standard",difficulty:"Expert",events:1905,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:269.1,paritySummary:{errors:112,warns:75,resets:0}}],downloadURL:"https://cdn.beatsaver.com/33d5c4fff97822eef1f02fc53bb0561f23489efe.zip",coverURL:"https://cdn.beatsaver.com/33d5c4fff97822eef1f02fc53bb0561f23489efe.jpg",previewURL:"https://cdn.beatsaver.com/33d5c4fff97822eef1f02fc53bb0561f23489efe.mp3"}],createdAt:"2018-05-26T15:22:35Z",updatedAt:"2018-05-26T15:22:35Z",lastPublishedAt:"2018-05-26T15:22:35Z"},{id:"13bea",name:"The Wall - (Buunshin Remix) [WALL MAP + CHROMA]",description:"Just wanna say that Rustic has inspired me, and has made me want to start mapping a while back, and with that, it has brought me many opportunities, and many friends.\n\nPrograms used\nScuffedWalls: https://github.com/thelightdesigner/ScuffedWalls\nbeatwalls: https://github.com/spookyGh0st/beatwalls\n\nNoodleExtensions: https://github.com/Aeroluna/NoodleExtensions/releases\n\nPreview: https://youtu.be/lFxGmGO2kww",uploader:{id:4284667,name:"tall_chilis_boi",uniqueSet:!0,hash:"5dec6d85fffaa6000679dc23",avatar:"https://cdn.beatsaver.com/avatar/427307106970894336.png",type:"DISCORD"},metadata:{bpm:172,duration:270,songName:"The Wall",songSubName:"(Buunshin Remix)",songAuthorName:"ABIS & Signal & Tasha Baxter",levelAuthorName:"Tall_Chilis_Boi"},stats:{plays:0,downloads:2353,upvotes:1376,downvotes:33,score:.9229},uploaded:"2021-02-08T08:27:12.773Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"9192703d277e652e3dc367bc87c68107967c6898",key:"13bea",state:"Published",createdAt:"2021-02-08T08:27:12.773Z",sageScore:4,diffs:[{njs:20,offset:-.5,notes:768,bombs:0,obstacles:14814,nps:2.991,length:736,characteristic:"Standard",difficulty:"Expert",events:15872,chroma:!0,me:!1,ne:!0,cinema:!1,seconds:256.744,paritySummary:{errors:0,warns:0,resets:0}}],downloadURL:"https://cdn.beatsaver.com/9192703d277e652e3dc367bc87c68107967c6898.zip",coverURL:"https://cdn.beatsaver.com/9192703d277e652e3dc367bc87c68107967c6898.jpg",previewURL:"https://cdn.beatsaver.com/9192703d277e652e3dc367bc87c68107967c6898.mp3"}],createdAt:"2021-02-08T08:27:12.773Z",updatedAt:"2021-02-08T08:27:12.773Z",lastPublishedAt:"2021-02-08T08:27:12.773Z"},{id:"9b89",name:"Stronger",description:"A wall map for this masterpiece of a song.\n----------------------------------------------\nPlease give feedback @Reddek#5864\nAnd thanks for playing!",uploader:{id:4233941,name:"reddek",uniqueSet:!0,hash:"5dbfb4426dea0b0006bd328d",avatar:"https://cdn.beatsaver.com/avatar/177436487086768129.png",type:"DISCORD"},metadata:{bpm:160,duration:207,songName:"Stronger",songSubName:"",songAuthorName:"TheFatRat, Slaydit & Anjulie",levelAuthorName:"Reddek"},stats:{plays:0,downloads:1299,upvotes:938,downvotes:15,score:.9229},uploaded:"2020-04-16T06:37:29.656Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"e48afe3d1a2b94f5396f63e32972651495caf034",key:"9b89",state:"Published",createdAt:"2020-04-16T06:37:29.656Z",sageScore:4,diffs:[{njs:18,offset:0,notes:892,bombs:168,obstacles:2648,nps:4.471,length:532,characteristic:"Standard",difficulty:"ExpertPlus",events:3423,chroma:!1,me:!0,ne:!1,cinema:!1,seconds:199.5,paritySummary:{errors:0,warns:0,resets:0}}],downloadURL:"https://cdn.beatsaver.com/e48afe3d1a2b94f5396f63e32972651495caf034.zip",coverURL:"https://cdn.beatsaver.com/e48afe3d1a2b94f5396f63e32972651495caf034.jpg",previewURL:"https://cdn.beatsaver.com/e48afe3d1a2b94f5396f63e32972651495caf034.mp3"}],createdAt:"2020-04-16T06:37:29.656Z",updatedAt:"2020-04-16T06:37:29.656Z",lastPublishedAt:"2020-04-16T06:37:29.656Z"},{id:"613b",name:"Seraphim On The Ring - Mitchie M ft. Hatsune Miku, Kagamine Rin, KAITO",description:'"Seraphim On The Ring" is a song by Mitchie M about pro wrestling match which Miku and Rin play against Meiko and Luka. The ringside commentator is KAITO and the referee is Len.',uploader:{id:58338,name:"Joetastic",uniqueSet:!0,hash:"5cff0b7498cc5a672c85050e",avatar:"https://cdn.beatsaver.com/avatar/227767566402191360.png",type:"DISCORD"},metadata:{bpm:175,duration:223,songName:"Seraphim On The Ring",songSubName:"",songAuthorName:"Mitchie M ft. Hatsune Miku, Kagamine Rin, KAITO",levelAuthorName:"Joetastic"},stats:{plays:0,downloads:2013,upvotes:992,downvotes:17,score:.9229},uploaded:"2019-09-04T09:20:18.405Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"605da022c1e9688e122688e3abf3ddc8321299a8",key:"613b",state:"Published",createdAt:"2019-09-04T09:20:18.405Z",sageScore:5,diffs:[{njs:12,offset:0,notes:679,bombs:0,obstacles:33,nps:3.215,length:616,characteristic:"Standard",difficulty:"Hard",events:5807,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:211.2,paritySummary:{errors:54,warns:41,resets:0}},{njs:14,offset:0,notes:913,bombs:0,obstacles:27,nps:4.323,length:616,characteristic:"Standard",difficulty:"Expert",events:5807,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:211.2,paritySummary:{errors:20,warns:21,resets:0}},{njs:16,offset:0,notes:1038,bombs:0,obstacles:30,nps:4.915,length:616,characteristic:"Standard",difficulty:"ExpertPlus",events:5807,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:211.2,paritySummary:{errors:33,warns:43,resets:0}}],downloadURL:"https://cdn.beatsaver.com/605da022c1e9688e122688e3abf3ddc8321299a8.zip",coverURL:"https://cdn.beatsaver.com/605da022c1e9688e122688e3abf3ddc8321299a8.jpg",previewURL:"https://cdn.beatsaver.com/605da022c1e9688e122688e3abf3ddc8321299a8.mp3"}],createdAt:"2019-09-04T09:20:18.405Z",updatedAt:"2019-09-04T09:20:18.405Z",lastPublishedAt:"2019-09-04T09:20:18.405Z"},{id:"199e",name:"Super Mario 64 - Dire, Dire Docks (Wisp X Remix)",description:'Normal/Expert/Expert+ | BPM: 130 | Length: 3:23 | Notes: 376/688/1020\r\n\r\nI was just wondering how "Dire, Dire Docks" would look like in Beat Saber..\r\nThis is the result!\r\n\r\nLighting done with "Lightmap V2"\r\n\r\n12th Map.\r\n\r\nPreview:\r\nhttps://www.youtube.com/watch?v=dRprfDRvJJY\r\nSong:\r\nhttps://www.youtube.com/watch?v=56eIZKyhM6c',uploader:{id:4285825,name:"fefeland",uniqueSet:!0,hash:"5cff0b7398cc5a672c84f3bb",avatar:"https://cdn.beatsaver.com/avatar/119360573191225344.png",type:"DISCORD"},metadata:{bpm:130,duration:203,songName:"Dire, Dire Docks (Wisp X Remix)",songSubName:"Super Mario 64",songAuthorName:"FEFELAND",levelAuthorName:"fefeland"},stats:{plays:0,downloads:2005,upvotes:1351,downvotes:32,score:.9228},uploaded:"2018-10-10T20:02:06Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"b8d647a30f15e33d77808f9a143f02e3af6016b4",key:"199e",state:"Published",createdAt:"2018-10-10T20:02:06Z",sageScore:5,diffs:[{njs:8,offset:0,notes:376,bombs:0,obstacles:50,nps:1.958,length:416,characteristic:"Standard",difficulty:"Normal",events:831,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:192,paritySummary:{errors:72,warns:22,resets:0}},{njs:12,offset:0,notes:688,bombs:0,obstacles:51,nps:3.583,length:416,characteristic:"Standard",difficulty:"Expert",events:831,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:192,paritySummary:{errors:46,warns:44,resets:0}},{njs:15,offset:0,notes:1020,bombs:0,obstacles:48,nps:5.313,length:416,characteristic:"Standard",difficulty:"ExpertPlus",events:831,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:192,paritySummary:{errors:36,warns:32,resets:0}}],downloadURL:"https://cdn.beatsaver.com/b8d647a30f15e33d77808f9a143f02e3af6016b4.zip",coverURL:"https://cdn.beatsaver.com/b8d647a30f15e33d77808f9a143f02e3af6016b4.jpg",previewURL:"https://cdn.beatsaver.com/b8d647a30f15e33d77808f9a143f02e3af6016b4.mp3"}],createdAt:"2018-10-10T20:02:06Z",updatedAt:"2018-10-10T20:02:06Z",lastPublishedAt:"2018-10-10T20:02:06Z"},{id:"65bb",name:"TWICE - Feel Special",description:"New Twice map by Aggrogahu and myself. I hope you enjoy it!\n\nKikaeaeon: Expert/Expert+\nAggrogahu: Hard/Normal",uploader:{id:4285107,name:"kikaeaeon",uniqueSet:!0,hash:"5cff0b7498cc5a672c85109b",avatar:"https://cdn.beatsaver.com/avatar/103715469822816256.png",type:"DISCORD"},metadata:{bpm:129,duration:208,songName:"Feel Special",songSubName:"",songAuthorName:"TWICE",levelAuthorName:"KikaeAeon & Aggrogahu"},stats:{plays:0,downloads:5121,upvotes:1156,downvotes:24,score:.9226},uploaded:"2019-09-25T05:14:20.078Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"4644faf2fbb084c248d7e0f8d3592829ec7e19d0",key:"65bb",state:"Published",createdAt:"2019-09-25T05:14:20.078Z",sageScore:4,diffs:[{njs:10,offset:1,notes:351,bombs:0,obstacles:17,nps:1.747,length:432,characteristic:"Standard",difficulty:"Normal",events:1268,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:200.93,paritySummary:{errors:58,warns:30,resets:0}},{njs:10,offset:1,notes:552,bombs:0,obstacles:17,nps:2.747,length:432,characteristic:"Standard",difficulty:"Hard",events:1268,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:200.93,paritySummary:{errors:51,warns:36,resets:0}},{njs:12,offset:0,notes:762,bombs:0,obstacles:16,nps:3.792,length:432,characteristic:"Standard",difficulty:"Expert",events:1266,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:200.93,paritySummary:{errors:16,warns:18,resets:0}},{njs:16,offset:0,notes:952,bombs:0,obstacles:36,nps:4.738,length:432,characteristic:"Standard",difficulty:"ExpertPlus",events:1266,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:200.93,paritySummary:{errors:9,warns:9,resets:0}}],downloadURL:"https://cdn.beatsaver.com/4644faf2fbb084c248d7e0f8d3592829ec7e19d0.zip",coverURL:"https://cdn.beatsaver.com/4644faf2fbb084c248d7e0f8d3592829ec7e19d0.jpg",previewURL:"https://cdn.beatsaver.com/4644faf2fbb084c248d7e0f8d3592829ec7e19d0.mp3"}],createdAt:"2019-09-25T05:14:20.078Z",updatedAt:"2019-09-25T05:14:20.078Z",lastPublishedAt:"2019-09-25T05:14:20.078Z"},{id:"48ff",name:"Sewayaki Kisune no Senko-san OP - Koyoi MofuMofu!!",description:"Twitter: https://twitter.com/Dack731",uploader:{id:4285250,name:"dack",uniqueSet:!0,hash:"5cff0b7598cc5a672c852c6f",avatar:"https://cdn.beatsaver.com/avatar/297344689798119424.png",type:"DISCORD"},metadata:{bpm:103,duration:91,songName:"Koyoi MofuMofu",songSubName:"Agasa.K",songAuthorName:"Dack",levelAuthorName:"Dack"},stats:{plays:0,downloads:2294,upvotes:1317,downvotes:31,score:.9225},uploaded:"2019-04-28T12:14:58Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"52cba6c4432bca35081296a7e98be638f3f69c65",key:"48ff",state:"Published",createdAt:"2019-04-28T12:14:58Z",sageScore:2,diffs:[{njs:12,offset:0,notes:177,bombs:0,obstacles:0,nps:2.074,length:146.5,characteristic:"Standard",difficulty:"Normal",events:146,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:85.34,paritySummary:{errors:10,warns:5,resets:0}},{njs:13,offset:0,notes:256,bombs:0,obstacles:0,nps:3,length:146.5,characteristic:"Standard",difficulty:"Hard",events:146,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:85.34,paritySummary:{errors:13,warns:13,resets:0}},{njs:14,offset:0,notes:300,bombs:0,obstacles:0,nps:3.515,length:146.5,characteristic:"Standard",difficulty:"Expert",events:146,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:85.34,paritySummary:{errors:6,warns:7,resets:0}},{njs:15,offset:0,notes:315,bombs:0,obstacles:0,nps:3.691,length:146.5,characteristic:"Standard",difficulty:"ExpertPlus",events:146,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:85.34,paritySummary:{errors:7,warns:8,resets:0}}],downloadURL:"https://cdn.beatsaver.com/52cba6c4432bca35081296a7e98be638f3f69c65.zip",coverURL:"https://cdn.beatsaver.com/52cba6c4432bca35081296a7e98be638f3f69c65.jpg",previewURL:"https://cdn.beatsaver.com/52cba6c4432bca35081296a7e98be638f3f69c65.mp3"}],createdAt:"2019-04-28T12:14:58Z",updatedAt:"2019-04-28T12:14:58Z",lastPublishedAt:"2019-04-28T12:14:58Z"},{id:"27f6",name:'We All Lift Together - Keith Power (From "Warframe")',description:"Welcome to Fortuna. Explore the frigid landscape of Venus populated with new Corpus threats, subterranean mysteries and an ecosystem on the brink of destruction.\r\nPlaying movie (Hard) : https://youtu.be/M1s6G4ib5Ew",uploader:{id:43083,name:"trgsonic",uniqueSet:!0,hash:"5cff0b7598cc5a672c852c78",avatar:"https://www.gravatar.com/avatar/5cff0b7598cc5a672c852c78?d=retro",type:"SIMPLE"},metadata:{bpm:134,duration:155,songName:"We All Lift Together",songSubName:"",songAuthorName:"Keith Power",levelAuthorName:"TRGsonic"},stats:{plays:0,downloads:1436,upvotes:736,downvotes:8,score:.9224},uploaded:"2018-12-25T14:00:28Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"050d447ebe73685cdb5515867dd7f065e0001fb7",key:"27f6",state:"Published",createdAt:"2018-12-25T14:00:28Z",sageScore:6,diffs:[{njs:10,offset:0,notes:197,bombs:0,obstacles:24,nps:1.375,length:320,characteristic:"Standard",difficulty:"Easy",events:144,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:143.284,paritySummary:{errors:37,warns:23,resets:0}},{njs:10.01,offset:0,notes:304,bombs:6,obstacles:23,nps:2.122,length:320,characteristic:"Standard",difficulty:"Normal",events:144,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:143.284,paritySummary:{errors:30,warns:21,resets:0}},{njs:10.05,offset:0,notes:360,bombs:8,obstacles:24,nps:2.513,length:320,characteristic:"Standard",difficulty:"Hard",events:144,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:143.284,paritySummary:{errors:34,warns:29,resets:0}}],downloadURL:"https://cdn.beatsaver.com/050d447ebe73685cdb5515867dd7f065e0001fb7.zip",coverURL:"https://cdn.beatsaver.com/050d447ebe73685cdb5515867dd7f065e0001fb7.jpg",previewURL:"https://cdn.beatsaver.com/050d447ebe73685cdb5515867dd7f065e0001fb7.mp3"}],createdAt:"2018-12-25T14:00:28Z",updatedAt:"2018-12-25T14:00:28Z",lastPublishedAt:"2018-12-25T14:00:28Z"},{id:"7b5f",name:"My Stick! - Bad Lip Reading (Standard, 90 degree)",description:"Happy New Year 2020! I am a huge fan of the Bad Lip Reading Star Wars songs. I probably account for half of the 100s of millions of views they have received on youtube! If you're not familiar with them, go check them out! This newest one - My Stick! - just came out a few days ago and as soon as I heard it, I wanted to map it. So here it is - Easy, Normal, Hard, Expert, and Expert 90 degree difficulties available. \n\nBig thanks to my playtesters Maybeemae, MajorPickle, and Brentastic! You guys really help put the polish on these maps!\n\nhttps://www.youtube.com/watch?v=372GmcbFwCI",uploader:{id:78593,name:"techbutterfly",uniqueSet:!0,hash:"5cff0b7798cc5a672c8566f7",avatar:"https://cdn.beatsaver.com/avatar/527111497617506304.png",type:"DISCORD"},metadata:{bpm:126,duration:205,songName:"My Stick",songSubName:"",songAuthorName:"Bad Lip Reading",levelAuthorName:"TechButterfly"},stats:{plays:0,downloads:2769,upvotes:1048,downvotes:20,score:.9223},uploaded:"2020-01-01T01:33:52.347Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"4837ebdf91168a5e26eb5beebda03ebef31e6841",key:"7b5f",state:"Published",createdAt:"2020-01-01T01:33:52.347Z",sageScore:4,diffs:[{njs:8,offset:0,notes:173,bombs:14,obstacles:38,nps:.881,length:412.5,characteristic:"Standard",difficulty:"Easy",events:795,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:196.429,paritySummary:{errors:47,warns:21,resets:5}},{njs:10,offset:0,notes:292,bombs:22,obstacles:38,nps:1.458,length:420.5,characteristic:"Standard",difficulty:"Normal",events:795,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:200.238,paritySummary:{errors:48,warns:72,resets:10}},{njs:13,offset:0,notes:572,bombs:22,obstacles:38,nps:2.857,length:420.5,characteristic:"Standard",difficulty:"Hard",events:795,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:200.238,paritySummary:{errors:33,warns:84,resets:10}},{njs:13,offset:0,notes:683,bombs:22,obstacles:38,nps:3.411,length:420.5,characteristic:"Standard",difficulty:"Expert",events:795,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:200.238,paritySummary:{errors:31,warns:31,resets:9}},{njs:13,offset:0,notes:577,bombs:22,obstacles:7,nps:2.882,length:420.5,characteristic:"90Degree",difficulty:"Expert",events:1050,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:200.238,paritySummary:{errors:34,warns:85,resets:10}}],downloadURL:"https://cdn.beatsaver.com/4837ebdf91168a5e26eb5beebda03ebef31e6841.zip",coverURL:"https://cdn.beatsaver.com/4837ebdf91168a5e26eb5beebda03ebef31e6841.jpg",previewURL:"https://cdn.beatsaver.com/4837ebdf91168a5e26eb5beebda03ebef31e6841.mp3"}],createdAt:"2020-01-01T01:33:52.347Z",updatedAt:"2020-01-01T01:33:52.347Z",lastPublishedAt:"2020-01-01T01:33:52.347Z"},{id:"9137",name:"Uno - Little Big",description:"https://www.youtube.com/watch?v=8hiHXbvsT8o",uploader:{id:4285760,name:"okdisplay",uniqueSet:!0,hash:"5cff0b7398cc5a672c84eda2",avatar:"https://cdn.beatsaver.com/avatar/404020982676717570.png",type:"DISCORD"},metadata:{bpm:142,duration:163,songName:"UNO",songSubName:"",songAuthorName:"Little Big",levelAuthorName:"OkDisplay"},stats:{plays:0,downloads:1734,upvotes:997,downvotes:18,score:.9223},uploaded:"2020-03-18T02:49:03.418Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"359433e3d701cc06b47ac0d7fbb9b077cd970c01",key:"9137",state:"Published",createdAt:"2020-03-18T02:49:03.418Z",sageScore:4,diffs:[{njs:15,offset:0,notes:706,bombs:0,obstacles:0,nps:4.54,length:368,characteristic:"Standard",difficulty:"Expert",events:1500,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:155.493,paritySummary:{errors:13,warns:14,resets:0}},{njs:17,offset:0,notes:705,bombs:9,obstacles:23,nps:4.534,length:368,characteristic:"Standard",difficulty:"ExpertPlus",events:1464,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:155.493,paritySummary:{errors:11,warns:8,resets:0}}],downloadURL:"https://cdn.beatsaver.com/359433e3d701cc06b47ac0d7fbb9b077cd970c01.zip",coverURL:"https://cdn.beatsaver.com/359433e3d701cc06b47ac0d7fbb9b077cd970c01.jpg",previewURL:"https://cdn.beatsaver.com/359433e3d701cc06b47ac0d7fbb9b077cd970c01.mp3"}],createdAt:"2020-03-18T02:49:03.418Z",updatedAt:"2020-03-18T02:49:03.418Z",lastPublishedAt:"2020-03-18T02:49:03.418Z"},{id:"7310",name:"The Struts - Body Talks ft. Kesha",description:"There is a significant lack of The Struts maps out there, so figured I'd get the ball rolling with this one. \n\nThe expert+ map was made by the incredible ConnorJC. He has a great mapping style and regularly uploads charts in the expert to expert+ range. You can check him out here:\nhttps://www.youtube.com/channel/UC_XqKPpfBiWEYZ-dhcKRPBw\nhttps://bsaber.com/members/connorjc/\n\nAll other difficulties are included as well\n\nEnjoy!",uploader:{id:4785,name:"stumi",uniqueSet:!1,hash:"5cff0b7398cc5a672c84f720",avatar:"https://www.gravatar.com/avatar/5cff0b7398cc5a672c84f720?d=retro",type:"SIMPLE"},metadata:{bpm:186,duration:176,songName:"Body Talks",songSubName:"Ft. Kesha",songAuthorName:"The Struts",levelAuthorName:"Stumi & ConnorJC"},stats:{plays:0,downloads:1554,upvotes:760,downvotes:9,score:.9223},uploaded:"2019-12-01T13:43:45.996Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"ed72bd798a0d05592ff63a5ad844cdff01a76800",key:"7310",state:"Published",createdAt:"2019-12-01T13:43:45.996Z",sageScore:6,diffs:[{njs:12,offset:0,notes:130,bombs:0,obstacles:54,nps:.766,length:526,characteristic:"Standard",difficulty:"Easy",events:2193,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:169.677,paritySummary:{errors:26,warns:14,resets:0}},{njs:12,offset:0,notes:218,bombs:4,obstacles:60,nps:1.285,length:526,characteristic:"Standard",difficulty:"Normal",events:2193,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:169.677,paritySummary:{errors:37,warns:26,resets:0}},{njs:14,offset:.8,notes:446,bombs:7,obstacles:65,nps:2.614,length:529,characteristic:"Standard",difficulty:"Hard",events:2193,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:170.645,paritySummary:{errors:20,warns:10,resets:5}},{njs:16,offset:.4,notes:704,bombs:22,obstacles:67,nps:4.115,length:530.333,characteristic:"Standard",difficulty:"Expert",events:2193,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:171.075,paritySummary:{errors:5,warns:7,resets:1}},{njs:19,offset:.25,notes:777,bombs:6,obstacles:25,nps:4.566,length:527.5,characteristic:"Standard",difficulty:"ExpertPlus",events:2193,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:170.161,paritySummary:{errors:7,warns:8,resets:2}}],downloadURL:"https://cdn.beatsaver.com/ed72bd798a0d05592ff63a5ad844cdff01a76800.zip",coverURL:"https://cdn.beatsaver.com/ed72bd798a0d05592ff63a5ad844cdff01a76800.jpg",previewURL:"https://cdn.beatsaver.com/ed72bd798a0d05592ff63a5ad844cdff01a76800.mp3"}],createdAt:"2019-12-01T13:43:45.996Z",updatedAt:"2019-12-01T13:43:45.996Z",lastPublishedAt:"2019-12-01T13:43:45.996Z"},{id:"38ec",name:"The Bad Touch - Bloodhound Gang - BT90",description:'This map is part of a 90s songpack. Search "BT90" to find all the songs in the songpack.\r\nMap is created by Heisenberg_IRL. Check out https://www.twitch.tv/heisenberg_irl\r\nLights are made by XypherOrion. Check out https://www.twitch.tv/xypherorion\r\n\r\nSpecial thanks to Fafurion for feedback and playtesting',uploader:{id:27983,name:"heisenbergirl",uniqueSet:!0,hash:"5cff0b7298cc5a672c84ec30",avatar:"https://www.gravatar.com/avatar/5cff0b7298cc5a672c84ec30?d=retro",type:"SIMPLE"},metadata:{bpm:123,duration:234,songName:"The Bad Touch",songSubName:"Bloodhound Gang [BT90]",songAuthorName:"Heisenberg & XypherOrion",levelAuthorName:"heisenbergirl"},stats:{plays:0,downloads:5177,upvotes:2043,downvotes:65,score:.9223},uploaded:"2019-02-23T13:21:25Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"d5e0ebff74ee79f517bbb580f3c55e389b09bfa0",key:"38ec",state:"Published",createdAt:"2019-02-23T13:21:25Z",sageScore:6,diffs:[{njs:14,offset:0,notes:809,bombs:0,obstacles:12,nps:3.694,length:449,characteristic:"Standard",difficulty:"Expert",events:2108,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:219.024,paritySummary:{errors:55,warns:110,resets:0}},{njs:16,offset:0,notes:1062,bombs:2,obstacles:0,nps:4.849,length:449,characteristic:"Standard",difficulty:"ExpertPlus",events:2108,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:219.024,paritySummary:{errors:113,warns:137,resets:2}}],downloadURL:"https://cdn.beatsaver.com/d5e0ebff74ee79f517bbb580f3c55e389b09bfa0.zip",coverURL:"https://cdn.beatsaver.com/d5e0ebff74ee79f517bbb580f3c55e389b09bfa0.jpg",previewURL:"https://cdn.beatsaver.com/d5e0ebff74ee79f517bbb580f3c55e389b09bfa0.mp3"}],createdAt:"2019-02-23T13:21:25Z",updatedAt:"2019-02-23T13:21:25Z",lastPublishedAt:"2019-02-23T13:21:25Z"},{id:"abbf",name:"PSYQUI feat. Marpril - Girly Cupid [Noodle Extensions]",description:"Expert Preview: https://www.youtube.com/watch?v=oD8JbrtlhZc\n\nSubmission #47 | 2nd place in the Building Blocks 2020 mapping contest. I hope you enjoy my first dive into Noodle Extensions and Chroma. This was a blast to make!\n\nComments? Like it? Hate it? Let me know on Discord @Bloodcloak#5725 !",uploader:{id:71661,name:"bloodcloak",uniqueSet:!0,hash:"5cff0b7698cc5a672c8551d3",avatar:"https://cdn.beatsaver.com/avatar/205707707187986442.png",type:"DISCORD"},metadata:{bpm:133,duration:244,songName:"Girly Cupid",songSubName:"feat. Marpril",songAuthorName:"PSYQUI",levelAuthorName:"Bloodcloak"},stats:{plays:0,downloads:4637,upvotes:1327,downvotes:32,score:.9222},uploaded:"2020-05-29T01:13:29.257Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"09083ec4540755cac095737c4af6af2910c4e856",key:"abbf",state:"Published",createdAt:"2020-05-29T01:13:29.257Z",sageScore:3,diffs:[{njs:18,offset:-.2,notes:764,bombs:0,obstacles:36331,nps:3.232,length:524,characteristic:"Standard",difficulty:"Expert",events:3539,chroma:!0,me:!1,ne:!0,cinema:!1,seconds:236.391,paritySummary:{errors:28,warns:16,resets:0}}],downloadURL:"https://cdn.beatsaver.com/09083ec4540755cac095737c4af6af2910c4e856.zip",coverURL:"https://cdn.beatsaver.com/09083ec4540755cac095737c4af6af2910c4e856.jpg",previewURL:"https://cdn.beatsaver.com/09083ec4540755cac095737c4af6af2910c4e856.mp3"}],createdAt:"2020-05-29T01:13:29.257Z",updatedAt:"2020-05-29T01:13:29.257Z",lastPublishedAt:"2020-05-29T01:13:29.257Z"},{id:"1f90",name:"RIOT - Overkill",description:"",uploader:{id:408,name:"nuketime",uniqueSet:!0,hash:"5cff0b7498cc5a672c8507f7",avatar:"https://cdn.beatsaver.com/avatar/175811186007343104.png",type:"DISCORD"},metadata:{bpm:174,duration:308,songName:"Overkill",songSubName:"RIOT",songAuthorName:"Nuketime",levelAuthorName:"Nuketime"},stats:{plays:0,downloads:7566,upvotes:8186,downvotes:415,score:.9222},uploaded:"2018-11-10T20:57:38Z",automapper:!1,ranked:!0,qualified:!1,versions:[{hash:"2fddb136bda7f9e29b4cb6621d6d8e0f8a43b126",key:"1f90",state:"Published",createdAt:"2018-11-10T20:57:38Z",sageScore:5,diffs:[{njs:17,offset:0,notes:1812,bombs:108,obstacles:132,nps:6.121,length:858.5,characteristic:"Standard",difficulty:"ExpertPlus",events:3602,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:296.034,paritySummary:{errors:85,warns:90,resets:0},stars:7.32}],downloadURL:"https://cdn.beatsaver.com/2fddb136bda7f9e29b4cb6621d6d8e0f8a43b126.zip",coverURL:"https://cdn.beatsaver.com/2fddb136bda7f9e29b4cb6621d6d8e0f8a43b126.jpg",previewURL:"https://cdn.beatsaver.com/2fddb136bda7f9e29b4cb6621d6d8e0f8a43b126.mp3"}],createdAt:"2018-11-10T20:57:38Z",updatedAt:"2018-11-10T20:57:38Z",lastPublishedAt:"2018-11-10T20:57:38Z"},{id:"58e",name:"History Maker - Dean Fujioka",description:"Expert / Hard / Normal | Get your Beat Saber -- on ICE!!! The lighting for this is top notch ;)\r\n\r\nVideo: https://youtu.be/ZS8YwPvKLgw\r\n\r\nThis map is best practice compliant: https://bit.ly/2LjbURw",uploader:{id:44595,name:"awfulnaut",uniqueSet:!0,hash:"5cff0b7398cc5a672c84edac",avatar:"https://www.gravatar.com/avatar/5cff0b7398cc5a672c84edac?d=retro",type:"SIMPLE"},metadata:{bpm:201,duration:187,songName:"History Maker",songSubName:"Dean Fujioka",songAuthorName:"Awfulnaut",levelAuthorName:"awfulnaut"},stats:{plays:0,downloads:2623,upvotes:1327,downvotes:32,score:.9222},uploaded:"2018-06-17T19:41:50Z",automapper:!1,ranked:!0,qualified:!1,versions:[{hash:"998f9b0a3e8b85ad697e8a7aa2c8b7d1f70936ce",key:"58e",state:"Published",createdAt:"2018-06-17T19:41:50Z",sageScore:6,diffs:[{njs:10,offset:0,notes:513,bombs:12,obstacles:27,nps:2.836,length:606,characteristic:"Standard",difficulty:"Normal",events:1153,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:180.896,paritySummary:{errors:86,warns:4,resets:0},stars:1.77},{njs:10,offset:0,notes:566,bombs:0,obstacles:27,nps:3.129,length:606,characteristic:"Standard",difficulty:"Hard",events:1153,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:180.896,paritySummary:{errors:47,warns:48,resets:0}},{njs:10,offset:0,notes:566,bombs:0,obstacles:27,nps:3.129,length:606,characteristic:"Standard",difficulty:"Expert",events:1153,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:180.896,paritySummary:{errors:43,warns:35,resets:0}}],downloadURL:"https://cdn.beatsaver.com/998f9b0a3e8b85ad697e8a7aa2c8b7d1f70936ce.zip",coverURL:"https://cdn.beatsaver.com/998f9b0a3e8b85ad697e8a7aa2c8b7d1f70936ce.jpg",previewURL:"https://cdn.beatsaver.com/998f9b0a3e8b85ad697e8a7aa2c8b7d1f70936ce.mp3"}],createdAt:"2018-06-17T19:41:50Z",updatedAt:"2018-06-17T19:41:50Z",lastPublishedAt:"2018-06-17T19:41:50Z"},{id:"14bd",name:"Starship - We Built This City",description:"Collab map between BennyDaBeast, Rustic and GreatYazer\r\nExper / Hard / Normal\r\nhttps://www.youtube.com/watch?v=KnLnUBIbfbM\r\nhttps://streamable.com/s8xvc",uploader:{id:12996,name:"rustic",uniqueSet:!0,hash:"5cff0b7298cc5a672c84e8c4",avatar:"https://www.gravatar.com/avatar/5cff0b7298cc5a672c84e8c4?d=retro",type:"SIMPLE"},metadata:{bpm:143,duration:298,songName:"We Built this City",songSubName:"Starship",songAuthorName:"GreatYazer, Rustic, BennyDaBeast",levelAuthorName:"rustic"},stats:{plays:0,downloads:9482,upvotes:3568,downvotes:145,score:.9221},uploaded:"2018-09-12T19:05:18Z",automapper:!1,ranked:!0,qualified:!1,versions:[{hash:"477fac9561e8931c7efaf49faa065611348f159d",key:"14bd",state:"Published",createdAt:"2018-09-12T19:05:18Z",sageScore:5,diffs:[{njs:10,offset:0,notes:472,bombs:26,obstacles:32,nps:1.64,length:686,characteristic:"Standard",difficulty:"Normal",events:1843,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:287.832,paritySummary:{errors:64,warns:56,resets:0},stars:1.03},{njs:10,offset:0,notes:759,bombs:26,obstacles:34,nps:2.633,length:687,characteristic:"Standard",difficulty:"Hard",events:1843,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:288.252,paritySummary:{errors:69,warns:90,resets:0},stars:1.66},{njs:11,offset:0,notes:967,bombs:26,obstacles:36,nps:3.355,length:687,characteristic:"Standard",difficulty:"Expert",events:1843,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:288.252,paritySummary:{errors:71,warns:126,resets:0}}],downloadURL:"https://cdn.beatsaver.com/477fac9561e8931c7efaf49faa065611348f159d.zip",coverURL:"https://cdn.beatsaver.com/477fac9561e8931c7efaf49faa065611348f159d.jpg",previewURL:"https://cdn.beatsaver.com/477fac9561e8931c7efaf49faa065611348f159d.mp3"}],createdAt:"2018-09-12T19:05:18Z",updatedAt:"2018-09-12T19:05:18Z",lastPublishedAt:"2018-09-12T19:05:18Z"},{id:"10e6",name:"We Wont Be Alone",description:"And here it is! \r\n\r\nAnother highly requested map!\r\n\r\nEnjoy to your hearts content!\r\n\r\n(P.s Thanks to everyone who supports me in my mapping endeavors and appreciate my work! it means a lot to me!)",uploader:{id:4289111,name:"blackblazon",uniqueSet:!0,hash:"5cff0b7398cc5a672c84ef34",avatar:"https://cdn.beatsaver.com/avatar/127162370538733568.png",type:"DISCORD"},metadata:{bpm:175,duration:236,songName:"We Wont Be Alone",songSubName:"Feint",songAuthorName:"BlackBlazon",levelAuthorName:"blackblazon"},stats:{plays:0,downloads:1611,upvotes:1677,downvotes:48,score:.9221},uploaded:"2018-08-20T13:09:23Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"fdb563492b79e57464424f73aa95ccc719f44576",key:"10e6",state:"Published",createdAt:"2018-08-20T13:09:23Z",sageScore:5,diffs:[{njs:10,offset:0,notes:1017,bombs:0,obstacles:0,nps:4.461,length:665,characteristic:"Standard",difficulty:"Expert",events:1043,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:228,paritySummary:{errors:15,warns:5,resets:0}},{njs:15,offset:0,notes:1017,bombs:0,obstacles:0,nps:4.461,length:665,characteristic:"Standard",difficulty:"ExpertPlus",events:1043,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:228,paritySummary:{errors:15,warns:5,resets:0}}],downloadURL:"https://cdn.beatsaver.com/fdb563492b79e57464424f73aa95ccc719f44576.zip",coverURL:"https://cdn.beatsaver.com/fdb563492b79e57464424f73aa95ccc719f44576.jpg",previewURL:"https://cdn.beatsaver.com/fdb563492b79e57464424f73aa95ccc719f44576.mp3"}],createdAt:"2018-08-20T13:09:23Z",updatedAt:"2018-08-20T13:09:23Z",lastPublishedAt:"2018-08-20T13:09:23Z"},{id:"1a0b6",name:"[Electro Swing Pack] The Electric Swing Circus - Empires",description:"Nixie Presents: Electro Swing Pack!\n\n10 electro swing songs with expert and expert+ diffs to make your booty swing!\n\nGet The Pack: \nhttps://bsaber.com/electro-swing-pack/\n\nMap Gameplay:\nhttps://youtu.be/WJy6_2cTPYg\n\nComplete Pack Playthrough:\nhttps://youtu.be/yj9rw4MEh7s\n\nHeyya! After looking for some dancey electro swing maps, I noticed that there barely are any!\nSo I took matters into my own hands, learning mapping basically from scratch,\nscrapping my first failed attempts and then finally making a map that was good.\nI found it so fun that I ended up making 9 more maps,\nand fine tuned them with the help of the testplayers in BSMG,\nas well as the lovely curators from the bsaber discord.\n\nHuge thanks in particular to:\nMonstor, Bearly, Noxn, Bullet, Vaser888, Tocxx, Jafdy, Storm Knight and Pixelguy!\n\nIf you want to talk to me, here is my Discord:\nNixie.Korten#6944",uploader:{id:4286374,name:"nixiekorten",uniqueSet:!0,hash:"6096752e12772e0006e2f7e6",avatar:"https://cdn.beatsaver.com/avatar/840550221690699776.png",type:"DISCORD"},metadata:{bpm:120,duration:173,songName:"Empires",songSubName:"",songAuthorName:"The Electric Swing Circus",levelAuthorName:"Nixie.Korten"},stats:{plays:0,downloads:12715,upvotes:577,downvotes:3,score:.922},uploaded:"2021-07-08T15:24:55.769Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"cecc89118b3a75ea7d65ceff5949b3ef19fea716",key:"1a0b6",state:"Published",createdAt:"2021-07-08T15:24:55.769Z",sageScore:4,diffs:[{njs:16,offset:-.5,notes:522,bombs:0,obstacles:24,nps:3.173,length:329,characteristic:"Standard",difficulty:"Expert",events:2051,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:164.5,paritySummary:{errors:0,warns:0,resets:0}},{njs:19,offset:.25,notes:823,bombs:0,obstacles:0,nps:5.003,length:329,characteristic:"Standard",difficulty:"ExpertPlus",events:2051,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:164.5,paritySummary:{errors:0,warns:0,resets:0}}],downloadURL:"https://cdn.beatsaver.com/cecc89118b3a75ea7d65ceff5949b3ef19fea716.zip",coverURL:"https://cdn.beatsaver.com/cecc89118b3a75ea7d65ceff5949b3ef19fea716.jpg",previewURL:"https://cdn.beatsaver.com/cecc89118b3a75ea7d65ceff5949b3ef19fea716.mp3"}],createdAt:"2021-07-08T15:24:55.769Z",updatedAt:"2021-07-08T15:24:55.769Z",lastPublishedAt:"2021-07-08T15:24:55.769Z"},{id:"97ec",name:"TheFatRat ft. Laura Brehm - MAYDAY (Nightcore Mix)",description:"#214\n\nYoutube Preview : https://youtu.be/YuAvugqwLiA",uploader:{id:4284588,name:"rigid",uniqueSet:!0,hash:"5cff0b7598cc5a672c852224",avatar:"https://cdn.beatsaver.com/avatar/295613108947386368.png",type:"DISCORD"},metadata:{bpm:173,duration:217,songName:"MAYDAY (Nightcore Mix)",songSubName:"",songAuthorName:"TheFatRat ft. Laura Brehm",levelAuthorName:"Rigid"},stats:{plays:0,downloads:1384,upvotes:782,downvotes:10,score:.922},uploaded:"2020-04-06T03:03:12.881Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"596010af1d16182372e2145d3b1687ecfed46387",key:"97ec",state:"Published",createdAt:"2020-04-06T03:03:12.881Z",sageScore:4,diffs:[{njs:16,offset:0,notes:751,bombs:30,obstacles:128,nps:3.599,length:600,characteristic:"Standard",difficulty:"Expert",events:2311,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:208.092,paritySummary:{errors:0,warns:0,resets:5}}],downloadURL:"https://cdn.beatsaver.com/596010af1d16182372e2145d3b1687ecfed46387.zip",coverURL:"https://cdn.beatsaver.com/596010af1d16182372e2145d3b1687ecfed46387.jpg",previewURL:"https://cdn.beatsaver.com/596010af1d16182372e2145d3b1687ecfed46387.mp3"}],createdAt:"2020-04-06T03:03:12.881Z",updatedAt:"2020-04-06T03:03:12.881Z",lastPublishedAt:"2020-04-06T03:03:12.881Z"},{id:"33c2",name:"Drive By - Train",description:'Another non weeb song, "Drive by" by Train, one of my favorite songs from the early days. Brought it from Itunes a long time ago so it\'s the highest quality file you can get :)',uploader:{id:58338,name:"Joetastic",uniqueSet:!0,hash:"5cff0b7498cc5a672c85050e",avatar:"https://cdn.beatsaver.com/avatar/227767566402191360.png",type:"DISCORD"},metadata:{bpm:122,duration:196,songName:"Drive By",songSubName:"Train",songAuthorName:"Joetastic",levelAuthorName:"Joetastic"},stats:{plays:0,downloads:3897,upvotes:1087,downvotes:22,score:.922},uploaded:"2019-02-05T09:08:27Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"5d3f6821934945c581882c067ef44d7e8c086423",key:"33c2",state:"Published",createdAt:"2019-02-05T09:08:27Z",sageScore:6,diffs:[{njs:15,offset:0,notes:895,bombs:0,obstacles:6,nps:4.795,length:379.5,characteristic:"Standard",difficulty:"Expert",events:1734,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:186.639,paritySummary:{errors:67,warns:85,resets:0}}],downloadURL:"https://cdn.beatsaver.com/5d3f6821934945c581882c067ef44d7e8c086423.zip",coverURL:"https://cdn.beatsaver.com/5d3f6821934945c581882c067ef44d7e8c086423.jpg",previewURL:"https://cdn.beatsaver.com/5d3f6821934945c581882c067ef44d7e8c086423.mp3"}],createdAt:"2019-02-05T09:08:27Z",updatedAt:"2019-02-05T09:08:27Z",lastPublishedAt:"2019-02-05T09:08:27Z"},{id:"edf",name:"VORACITY",description:"enjoy :)",uploader:{id:4285521,name:"ejiejidayo",uniqueSet:!0,hash:"5cff0b7398cc5a672c84fc58",avatar:"https://cdn.beatsaver.com/avatar/224894241279574016.png",type:"DISCORD"},metadata:{bpm:200,duration:221,songName:"VORACITY",songSubName:"OVERLOAD III OP",songAuthorName:"ejiejidayo",levelAuthorName:"ejiejidayo"},stats:{plays:0,downloads:4278,upvotes:3077,downvotes:119,score:.922},uploaded:"2018-08-10T09:36:58Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"7e096457e053dc0ee70fb5d08ed10332e5d5b75b",key:"edf",state:"Published",createdAt:"2018-08-10T09:36:58Z",sageScore:4,diffs:[{njs:10,offset:0,notes:778,bombs:37,obstacles:10,nps:3.723,length:696.5,characteristic:"Standard",difficulty:"Expert",events:827,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:208.95,paritySummary:{errors:117,warns:85,resets:3}}],downloadURL:"https://cdn.beatsaver.com/7e096457e053dc0ee70fb5d08ed10332e5d5b75b.zip",coverURL:"https://cdn.beatsaver.com/7e096457e053dc0ee70fb5d08ed10332e5d5b75b.jpg",previewURL:"https://cdn.beatsaver.com/7e096457e053dc0ee70fb5d08ed10332e5d5b75b.mp3"}],createdAt:"2018-08-10T09:36:58Z",updatedAt:"2018-08-10T09:36:58Z",lastPublishedAt:"2018-08-10T09:36:58Z"},{id:"4f55",name:"Setting Sail, Coming Home (Bastion OST) - Darren Korb",description:"I remade my first map. Now with 75% less mid notes, and 300% more difficulty options! Disclaimer: Easy difficulty is actually Normal.\nSetting Sail, Coming Home is the credits theme for the game Bastion by Supergiant Games. It features vocals by Ashley Barrett and Darren Korb, who sing the verses of Zia and Zulf, respectively. As there are two vocalists in this song, I made two Normal difficulties, which each follow a different vocalist. The Hard and Expert difficulties follow both at the same time. Expert is mostly just a bit more fleshed out Hard, it's not too much more difficult.\nDefinitely check out this game if you haven't played it already.\nThanks to the playtesters Fruhead and CyanSnow on the modding Discord for testing this one.\nSee it played here:\nZia: https://youtu.be/WCcH3Sd6n-Y\nZulf: https://youtu.be/vcu_FX3c3t0\nHard: https://youtu.be/zUvWu9XglNA\nExpert: https://youtu.be/s2E2uvX5lJ4",uploader:{id:12233,name:"wolfb",uniqueSet:!0,hash:"5cff0b7698cc5a672c854e4f",avatar:"https://www.gravatar.com/avatar/5cff0b7698cc5a672c854e4f?d=retro",type:"SIMPLE"},metadata:{bpm:120,duration:164,songName:"Setting Sail, Coming Home",songSubName:"Darren Korb",songAuthorName:"Wolfb",levelAuthorName:"wolfb"},stats:{plays:0,downloads:1272,upvotes:666,downvotes:6,score:.9219},uploaded:"2019-05-27T11:55:36Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"df2178c8d5cfa459861c263934e6a598b15a5452",key:"4f55",state:"Published",createdAt:"2019-05-27T11:55:36Z",sageScore:5,diffs:[{njs:10,offset:0,notes:251,bombs:0,obstacles:11,nps:1.569,length:320,characteristic:"Standard",difficulty:"Easy",events:1099,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:160,paritySummary:{errors:27,warns:5,resets:0}},{njs:10,offset:0,notes:242,bombs:0,obstacles:11,nps:1.513,length:320,characteristic:"Standard",difficulty:"Normal",events:1099,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:160,paritySummary:{errors:26,warns:7,resets:0}},{njs:12,offset:0,notes:368,bombs:0,obstacles:11,nps:2.3,length:320,characteristic:"Standard",difficulty:"Hard",events:1102,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:160,paritySummary:{errors:27,warns:36,resets:0}},{njs:14,offset:0,notes:444,bombs:0,obstacles:11,nps:2.775,length:320,characteristic:"Standard",difficulty:"Expert",events:1104,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:160,paritySummary:{errors:17,warns:37,resets:0}}],downloadURL:"https://cdn.beatsaver.com/df2178c8d5cfa459861c263934e6a598b15a5452.zip",coverURL:"https://cdn.beatsaver.com/df2178c8d5cfa459861c263934e6a598b15a5452.jpg",previewURL:"https://cdn.beatsaver.com/df2178c8d5cfa459861c263934e6a598b15a5452.mp3"}],createdAt:"2019-05-27T11:55:36Z",updatedAt:"2019-05-27T11:55:36Z",lastPublishedAt:"2019-05-27T11:55:36Z"},{id:"1f03",name:"Monster - Skillet (Kole Edit)",description:"2018-11-08: Reupload because of ranking! Scoreboards are unaffected.\r\n\r\nMonster by hard rock band Skillet was a request I got and I found it worthy and fun to make into a Beat Saber map, so here it is!\r\nSong has been edited and re-arranged to be tighter and not too repetitive.\r\n\r\nPreview:\r\nhttps://youtu.be/avTEevEonOA\r\n\r\nBPM: 135\r\nDuration: 1:52\r\nEasy, Normal, Hard and Expert difficulties.\r\n\r\nEasy: 247, 8 obstacles, 4 mines\r\nNormal: 300 notes, 8 obstacles, 8 mines\r\nHard: 423 notes, 8 obstacles, 8 mines\r\nExpert: 437 notes, 8 obstacles, 8 mines\r\n\r\nThanks to Edzo, RaZn, VenclaireVR, squeaksies and Todokete for playtesting!\r\n\r\nEnjoy!",uploader:{id:4285318,name:"kolezan",uniqueSet:!0,hash:"5cff0b7398cc5a672c84fcbb",avatar:"https://cdn.beatsaver.com/avatar/220513618763055106.png",type:"DISCORD"},metadata:{bpm:135,duration:112,songName:"Monster",songSubName:"Skillet",songAuthorName:"Kolezan",levelAuthorName:"Kolezan"},stats:{plays:0,downloads:8892,upvotes:4266,downvotes:185,score:.9219},uploaded:"2018-11-08T21:27:23Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"5730ecc93a6bc9147bda83f7975791a03ba5b90b",key:"1f03",state:"Published",createdAt:"2018-11-08T21:27:23Z",sageScore:4,diffs:[{njs:10.5,offset:0,notes:247,bombs:4,obstacles:8,nps:2.365,length:235,characteristic:"Standard",difficulty:"Easy",events:627,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:104.444,paritySummary:{errors:47,warns:7,resets:2}},{njs:10.5,offset:0,notes:300,bombs:8,obstacles:8,nps:2.872,length:235,characteristic:"Standard",difficulty:"Normal",events:627,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:104.444,paritySummary:{errors:32,warns:20,resets:0}},{njs:11,offset:0,notes:423,bombs:8,obstacles:8,nps:4.05,length:235,characteristic:"Standard",difficulty:"Hard",events:627,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:104.444,paritySummary:{errors:77,warns:51,resets:0}},{njs:11,offset:0,notes:437,bombs:8,obstacles:8,nps:4.184,length:235,characteristic:"Standard",difficulty:"Expert",events:627,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:104.444,paritySummary:{errors:71,warns:71,resets:0}}],downloadURL:"https://cdn.beatsaver.com/5730ecc93a6bc9147bda83f7975791a03ba5b90b.zip",coverURL:"https://cdn.beatsaver.com/5730ecc93a6bc9147bda83f7975791a03ba5b90b.jpg",previewURL:"https://cdn.beatsaver.com/5730ecc93a6bc9147bda83f7975791a03ba5b90b.mp3"}],createdAt:"2018-11-08T21:27:23Z",updatedAt:"2018-11-08T21:27:23Z",lastPublishedAt:"2018-11-08T21:27:23Z"},{id:"15c6",name:"Ghostbusters - Ray Parker Jr",description:"",uploader:{id:4285018,name:"majorpickle",uniqueSet:!0,hash:"5cff0b7398cc5a672c84f792",avatar:"https://cdn.beatsaver.com/avatar/450358937657671680.png",type:"DISCORD"},metadata:{bpm:115.22,duration:246,songName:"Ghostbusters",songSubName:"",songAuthorName:"Ray Parker Jr.",levelAuthorName:"Majorpickle"},stats:{plays:0,downloads:7046,upvotes:1877,downvotes:58,score:.9219},uploaded:"2018-09-19T02:38:07Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"cc424123372e316bd2fc9439bf0972aded811d04",state:"Published",createdAt:"2021-08-27T12:04:43.371828Z",sageScore:5,diffs:[{njs:10,offset:0,notes:651,bombs:15,obstacles:80,nps:2.828,length:442,characteristic:"Standard",difficulty:"Normal",events:3704,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:230.168,paritySummary:{errors:25,warns:25,resets:4}},{njs:11,offset:0,notes:933,bombs:15,obstacles:80,nps:4.035,length:444.031,characteristic:"Standard",difficulty:"Hard",events:3704,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:231.226,paritySummary:{errors:54,warns:62,resets:4}},{njs:15,offset:0,notes:933,bombs:15,obstacles:80,nps:4.035,length:444.031,characteristic:"Standard",difficulty:"Expert",events:3704,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:231.226,paritySummary:{errors:54,warns:62,resets:4}},{njs:13,offset:0,notes:921,bombs:15,obstacles:72,nps:3.983,length:444.031,characteristic:"360Degree",difficulty:"Expert",events:2719,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:231.226,paritySummary:{errors:51,warns:50,resets:6}}],downloadURL:"https://cdn.beatsaver.com/cc424123372e316bd2fc9439bf0972aded811d04.zip",coverURL:"https://cdn.beatsaver.com/cc424123372e316bd2fc9439bf0972aded811d04.jpg",previewURL:"https://cdn.beatsaver.com/cc424123372e316bd2fc9439bf0972aded811d04.mp3"}],createdAt:"2018-09-19T02:38:07Z",updatedAt:"2021-08-27T12:05:13.876602Z",lastPublishedAt:"2021-08-27T12:04:50.582582Z"},{id:"19e23",name:"Home Free - Sea Shanty Medley",description:"Home Free medleys are amazing. This one was kind of a chat request. Cinema included.",uploader:{id:4287802,name:"origintt",uniqueSet:!0,hash:"5ef66418cb25920006b50ff3",avatar:"https://cdn.beatsaver.com/avatar/414156328072773632.png",type:"DISCORD"},metadata:{bpm:99,duration:236,songName:"Sea Shanty Medley",songSubName:"",songAuthorName:"Home Free",levelAuthorName:"OriginTT"},stats:{plays:0,downloads:6705,upvotes:603,downvotes:4,score:.9218},uploaded:"2021-07-04T19:18:25.991Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"1fb8f1cd4a7e05c0a2463e36522298f0b24353ad",key:"19e23",state:"Published",createdAt:"2021-07-04T19:18:25.991Z",sageScore:5,diffs:[{njs:19,offset:0,notes:990,bombs:0,obstacles:20,nps:4.341,length:376.316,characteristic:"Standard",difficulty:"ExpertPlus",events:1464,chroma:!1,me:!1,ne:!1,cinema:!0,seconds:228.07,paritySummary:{errors:5,warns:8,resets:0}}],downloadURL:"https://cdn.beatsaver.com/1fb8f1cd4a7e05c0a2463e36522298f0b24353ad.zip",coverURL:"https://cdn.beatsaver.com/1fb8f1cd4a7e05c0a2463e36522298f0b24353ad.jpg",previewURL:"https://cdn.beatsaver.com/1fb8f1cd4a7e05c0a2463e36522298f0b24353ad.mp3"}],createdAt:"2021-07-04T19:18:25.991Z",updatedAt:"2021-07-04T19:18:25.991Z",lastPublishedAt:"2021-07-04T19:18:25.991Z"},{id:"744f",name:"Fantastic Dreamer (TV Size) [Konosuba! Opening] - Machico",description:"This map was converted from one of my old maps.\n\nFeel free to DM me on discord @Joetastic#2501",uploader:{id:58338,name:"Joetastic",uniqueSet:!0,hash:"5cff0b7498cc5a672c85050e",avatar:"https://cdn.beatsaver.com/avatar/227767566402191360.png",type:"DISCORD"},metadata:{bpm:185,duration:91,songName:"Fantastic Dreamer (TV Size)",songSubName:"",songAuthorName:"Machico",levelAuthorName:"Joetastic"},stats:{plays:0,downloads:4444,upvotes:1290,downvotes:31,score:.9218},uploaded:"2019-12-07T07:21:35.291Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"c86360baf99485e61e18a80d48470c38f0faf4d3",key:"744f",state:"Published",createdAt:"2019-12-07T07:21:35.291Z",sageScore:3,diffs:[{njs:11,offset:0,notes:256,bombs:0,obstacles:0,nps:2.99,length:264,characteristic:"Standard",difficulty:"Hard",events:1956,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:85.622,paritySummary:{errors:20,warns:16,resets:0}},{njs:13,offset:0,notes:371,bombs:0,obstacles:2,nps:4.333,length:264,characteristic:"Standard",difficulty:"Expert",events:1956,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:85.622,paritySummary:{errors:15,warns:25,resets:0}},{njs:15,offset:0,notes:490,bombs:0,obstacles:4,nps:5.723,length:264,characteristic:"Standard",difficulty:"ExpertPlus",events:1956,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:85.622,paritySummary:{errors:20,warns:24,resets:0}}],downloadURL:"https://cdn.beatsaver.com/c86360baf99485e61e18a80d48470c38f0faf4d3.zip",coverURL:"https://cdn.beatsaver.com/c86360baf99485e61e18a80d48470c38f0faf4d3.jpg",previewURL:"https://cdn.beatsaver.com/c86360baf99485e61e18a80d48470c38f0faf4d3.mp3"}],createdAt:"2019-12-07T07:21:35.291Z",updatedAt:"2019-12-07T07:21:35.291Z",lastPublishedAt:"2019-12-07T07:21:35.291Z"},{id:"4a3f",name:"[Anniversary] I Remember - Tristam [Heisenberg]",description:"Part of the Anniversary Song Pack",uploader:{id:37070,name:"anniversaryteam",uniqueSet:!0,hash:"5cff0b7798cc5a672c8565a3",avatar:"https://www.gravatar.com/avatar/5cff0b7798cc5a672c8565a3?d=retro",type:"SIMPLE"},metadata:{bpm:110,duration:231,songName:"I Remember",songSubName:"Tristam",songAuthorName:"Heisenberg",levelAuthorName:"AnniversaryTeam"},stats:{plays:0,downloads:3832,upvotes:2835,downvotes:107,score:.9218},uploaded:"2019-05-03T14:09:51Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"349ef04192948a8404ab7942d2813be3e37cd8fd",key:"4a3f",state:"Published",createdAt:"2019-05-03T14:09:51Z",sageScore:8,diffs:[{njs:11,offset:0,notes:237,bombs:0,obstacles:4,nps:1.137,length:382,characteristic:"Standard",difficulty:"Easy",events:8143,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:208.364,paritySummary:{errors:13,warns:24,resets:0}},{njs:12,offset:0,notes:362,bombs:0,obstacles:6,nps:1.737,length:382,characteristic:"Standard",difficulty:"Normal",events:8143,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:208.364,paritySummary:{errors:50,warns:35,resets:0}},{njs:13,offset:0,notes:465,bombs:0,obstacles:6,nps:2.232,length:382,characteristic:"Standard",difficulty:"Hard",events:8143,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:208.364,paritySummary:{errors:24,warns:36,resets:0}},{njs:14,offset:0,notes:627,bombs:0,obstacles:16,nps:3.009,length:382,characteristic:"Standard",difficulty:"Expert",events:8143,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:208.364,paritySummary:{errors:15,warns:26,resets:0}},{njs:16,offset:0,notes:853,bombs:0,obstacles:17,nps:4.094,length:382,characteristic:"Standard",difficulty:"ExpertPlus",events:8153,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:208.364,paritySummary:{errors:43,warns:111,resets:0}}],downloadURL:"https://cdn.beatsaver.com/349ef04192948a8404ab7942d2813be3e37cd8fd.zip",coverURL:"https://cdn.beatsaver.com/349ef04192948a8404ab7942d2813be3e37cd8fd.jpg",previewURL:"https://cdn.beatsaver.com/349ef04192948a8404ab7942d2813be3e37cd8fd.mp3"}],createdAt:"2019-05-03T14:09:51Z",updatedAt:"2019-05-03T14:09:51Z",lastPublishedAt:"2019-05-03T14:09:51Z"},{id:"17ac",name:"Holiday - Green Day",description:"Preview: https://www.youtube.com/watch?v=3eya5H-dYCc\nAlways enjoy making green day songs! We need more of them on beat saber!\nExpert - Hard - Normal\n\nhttps://twitter.com/TheDownyCat\nhttps://www.twitch.tv/downycat\nhttps://streamlabs.com/downycat/tip",uploader:{id:4285982,name:"downycat",uniqueSet:!0,hash:"5cff0b7398cc5a672c84ede5",avatar:"https://cdn.beatsaver.com/avatar/173538829888782336.png",type:"DISCORD"},metadata:{bpm:146,duration:233,songName:"Holiday",songSubName:"Green Day",songAuthorName:"DownyCat",levelAuthorName:"downycat"},stats:{plays:0,downloads:4708,upvotes:2355,downvotes:82,score:.9218},uploaded:"2018-09-28T14:34:41Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"403efd4b7ec08f129f45f0859323f2d0ee052b34",key:"17ac",state:"Published",createdAt:"2018-09-28T14:34:41Z",sageScore:5,diffs:[{njs:10,offset:0,notes:477,bombs:0,obstacles:42,nps:2.161,length:539,characteristic:"Standard",difficulty:"Normal",events:1703,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:221.507,paritySummary:{errors:45,warns:16,resets:0}},{njs:10,offset:0,notes:857,bombs:0,obstacles:2,nps:3.872,length:540.313,characteristic:"Standard",difficulty:"Hard",events:1703,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:222.046,paritySummary:{errors:40,warns:78,resets:0}},{njs:10,offset:0,notes:1075,bombs:14,obstacles:2,nps:4.747,length:552.875,characteristic:"Standard",difficulty:"Expert",events:1703,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:227.209,paritySummary:{errors:44,warns:69,resets:0}}],downloadURL:"https://cdn.beatsaver.com/403efd4b7ec08f129f45f0859323f2d0ee052b34.zip",coverURL:"https://cdn.beatsaver.com/403efd4b7ec08f129f45f0859323f2d0ee052b34.jpg",previewURL:"https://cdn.beatsaver.com/403efd4b7ec08f129f45f0859323f2d0ee052b34.mp3"}],createdAt:"2018-09-28T14:34:41Z",updatedAt:"2018-09-28T14:34:41Z",lastPublishedAt:"2018-09-28T14:34:41Z"},{id:"5c83",name:"The Kids Arent Alright - The Offspring",description:"Shoutouts to twitch.tv/bearlyj and twitch.tv/whipstickgostop for playtesting!",uploader:{id:4285077,name:"ris",uniqueSet:!0,hash:"5cff0b7598cc5a672c8535df",avatar:"https://cdn.beatsaver.com/avatar/191597992061435904.png",type:"DISCORD"},metadata:{bpm:194,duration:183,songName:"The Kids Arent Alright",songSubName:"",songAuthorName:"The Offspring",levelAuthorName:"Ris"},stats:{plays:0,downloads:5715,upvotes:2235,downvotes:76,score:.9217},uploaded:"2019-08-12T23:40:01.490Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"20986d8f9b32820de9a1953bf11db91abd27db27",key:"5c83",state:"Published",createdAt:"2019-08-12T23:40:01.490Z",sageScore:4,diffs:[{njs:10,offset:1,notes:328,bombs:2,obstacles:3,nps:1.848,length:573.809,characteristic:"Standard",difficulty:"Normal",events:396,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:177.467,paritySummary:{errors:44,warns:50,resets:0}},{njs:12,offset:1,notes:553,bombs:8,obstacles:3,nps:3.116,length:573.809,characteristic:"Standard",difficulty:"Hard",events:396,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:177.467,paritySummary:{errors:70,warns:70,resets:0}},{njs:16,offset:1,notes:909,bombs:8,obstacles:3,nps:5.122,length:573.809,characteristic:"Standard",difficulty:"Expert",events:396,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:177.467,paritySummary:{errors:61,warns:70,resets:0}}],downloadURL:"https://cdn.beatsaver.com/20986d8f9b32820de9a1953bf11db91abd27db27.zip",coverURL:"https://cdn.beatsaver.com/20986d8f9b32820de9a1953bf11db91abd27db27.jpg",previewURL:"https://cdn.beatsaver.com/20986d8f9b32820de9a1953bf11db91abd27db27.mp3"}],createdAt:"2019-08-12T23:40:01.490Z",updatedAt:"2019-08-12T23:40:01.490Z",lastPublishedAt:"2019-08-12T23:40:01.490Z"},{id:"4a45",name:"[Anniversary] Nothing Stopping Me (ft. Kat Nestel) - Vicetone [BennyDaBeast]",description:"Part of the Anniversary Song Pack",uploader:{id:37070,name:"anniversaryteam",uniqueSet:!0,hash:"5cff0b7798cc5a672c8565a3",avatar:"https://www.gravatar.com/avatar/5cff0b7798cc5a672c8565a3?d=retro",type:"SIMPLE"},metadata:{bpm:127,duration:223,songName:"Nothing Stopping Me (ft. Kat Nestel)",songSubName:"Vicetone",songAuthorName:"BennyDaBeast",levelAuthorName:"AnniversaryTeam"},stats:{plays:0,downloads:3386,upvotes:2390,downvotes:84,score:.9217},uploaded:"2019-05-03T14:10:40Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"01e9554069556f1756cbfcf9ac233b68d98b19c8",key:"4a45",state:"Published",createdAt:"2019-05-03T14:10:40Z",sageScore:7,diffs:[{njs:10,offset:0,notes:403,bombs:104,obstacles:22,nps:1.568,length:544,characteristic:"Standard",difficulty:"Easy",events:2514,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:257.008,paritySummary:{errors:61,warns:32,resets:16}},{njs:10,offset:0,notes:481,bombs:104,obstacles:22,nps:1.872,length:544,characteristic:"Standard",difficulty:"Normal",events:2514,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:257.008,paritySummary:{errors:71,warns:49,resets:20}},{njs:12,offset:0,notes:647,bombs:104,obstacles:22,nps:2.517,length:544,characteristic:"Standard",difficulty:"Hard",events:2514,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:257.008,paritySummary:{errors:105,warns:80,resets:18}},{njs:12,offset:0,notes:693,bombs:104,obstacles:22,nps:3.274,length:448,characteristic:"Standard",difficulty:"Expert",events:2514,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:211.654,paritySummary:{errors:65,warns:109,resets:20}},{njs:15,offset:0,notes:914,bombs:96,obstacles:34,nps:4.318,length:448,characteristic:"Standard",difficulty:"ExpertPlus",events:2514,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:211.654,paritySummary:{errors:94,warns:128,resets:20}}],downloadURL:"https://cdn.beatsaver.com/01e9554069556f1756cbfcf9ac233b68d98b19c8.zip",coverURL:"https://cdn.beatsaver.com/01e9554069556f1756cbfcf9ac233b68d98b19c8.jpg",previewURL:"https://cdn.beatsaver.com/01e9554069556f1756cbfcf9ac233b68d98b19c8.mp3"}],createdAt:"2019-05-03T14:10:40Z",updatedAt:"2019-05-03T14:10:40Z",lastPublishedAt:"2019-05-03T14:10:40Z"},{id:"485a",name:"Lost in the Rhythm - Jamie Berry ft. Octavia Rose",description:"Got me twistin' and turnin' around in my Jimmy Choos\r\n\r\nOnce again get a variety of maps from the Funrankable team: Lighting and Ex+ by LittleAsi, Ex+ by Ryger, with Ex+, Expert, and Normal by baxter395. Enjoy each difficulty for a variety of novel styles.\r\n\r\nIf you enjoy our maps, please support the Funrankable Collective by contributing to our Patreon:\r\nhttps://www.patreon.com/funrankable\r\n\r\nThanks to these hip cats for playtesting and feedback: RedMagi, Qwasix",uploader:{id:37517,name:"funrankable",uniqueSet:!0,hash:"5cff0b7798cc5a672c8561ac",avatar:"https://www.gravatar.com/avatar/5cff0b7798cc5a672c8561ac?d=retro",type:"SIMPLE"},metadata:{bpm:121,duration:185,songName:"Lost in the Rhythm",songSubName:"Jamie Berry ft. Octavia Rose",songAuthorName:"Funrankable",levelAuthorName:"Funrankable"},stats:{plays:0,downloads:2942,upvotes:2309,downvotes:80,score:.9217},uploaded:"2019-04-25T19:03:46Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"f819a2f44993ed7ea1630e103a106b2d1f7808ac",key:"485a",state:"Published",createdAt:"2019-04-25T19:03:46Z",sageScore:7,diffs:[{njs:11,offset:1,notes:350,bombs:0,obstacles:12,nps:2.028,length:348,characteristic:"Standard",difficulty:"Easy",events:7779,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:172.562,paritySummary:{errors:48,warns:44,resets:0}},{njs:12,offset:1,notes:673,bombs:32,obstacles:6,nps:3.9,length:348,characteristic:"Standard",difficulty:"Normal",events:7779,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:172.562,paritySummary:{errors:39,warns:20,resets:9}},{njs:14,offset:0,notes:785,bombs:207,obstacles:10,nps:4.549,length:348,characteristic:"Standard",difficulty:"Hard",events:7779,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:172.562,paritySummary:{errors:37,warns:22,resets:11}},{njs:14,offset:0,notes:899,bombs:0,obstacles:4,nps:5.008,length:362,characteristic:"Standard",difficulty:"Expert",events:7794,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:179.504,paritySummary:{errors:38,warns:35,resets:0}},{njs:16,offset:0,notes:786,bombs:5,obstacles:79,nps:4.355,length:364,characteristic:"Standard",difficulty:"ExpertPlus",events:7779,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:180.496,paritySummary:{errors:63,warns:97,resets:4}},{njs:12,offset:0,notes:0,bombs:0,obstacles:0,nps:0,length:0,characteristic:"Lightshow",difficulty:"Easy",events:7779,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:0,paritySummary:{errors:0,warns:0,resets:0}}],downloadURL:"https://cdn.beatsaver.com/f819a2f44993ed7ea1630e103a106b2d1f7808ac.zip",coverURL:"https://cdn.beatsaver.com/f819a2f44993ed7ea1630e103a106b2d1f7808ac.jpg",previewURL:"https://cdn.beatsaver.com/f819a2f44993ed7ea1630e103a106b2d1f7808ac.mp3"}],createdAt:"2019-04-25T19:03:46Z",updatedAt:"2019-04-25T19:03:46Z",lastPublishedAt:"2019-04-25T19:03:46Z"},{id:"19ca",name:"Bubble Pop - Hyuna",description:"Made for Nichole!\r\nCheck her out on twitch: https://www.twitch.tv/lovingwaifuu\r\n\r\nSee it in action: https://www.youtube.com/watch?v=U2-JYSybh9Y\r\n\r\nThank you to my playtesters:\r\n\r\nQTpop (https://www.twitch.tv/qtpop)\r\nDuovr (https://www.twitch.tv/duovr)\r\nXypherorion (https://www.twitch.tv/Xypherorion)\r\n\r\nI stream playing and making maps for beat saber: https://www.twitch.tv/fafurion",uploader:{id:38202,name:"fafurion",uniqueSet:!1,hash:"5cff0b7398cc5a672c84f945",avatar:"https://www.gravatar.com/avatar/5cff0b7398cc5a672c84f945?d=retro",type:"SIMPLE"},metadata:{bpm:146,duration:214,songName:"Bubble Pop",songSubName:"Hyuna",songAuthorName:"Fafurion",levelAuthorName:"fafurion"},stats:{plays:0,downloads:8139,upvotes:2698,downvotes:100,score:.9217},uploaded:"2018-10-12T03:28:19Z",automapper:!1,ranked:!0,qualified:!1,versions:[{hash:"e8ed13a78cd1e566f754d0cb47d4b5cde8918abe",key:"19ca",state:"Published",createdAt:"2018-10-12T03:28:19Z",sageScore:6,diffs:[{njs:10,offset:0,notes:355,bombs:0,obstacles:2,nps:1.695,length:509.719,characteristic:"Standard",difficulty:"Easy",events:1211,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:209.473,paritySummary:{errors:15,warns:2,resets:0},stars:.91},{njs:10,offset:0,notes:497,bombs:0,obstacles:2,nps:2.373,length:509.719,characteristic:"Standard",difficulty:"Normal",events:1211,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:209.473,paritySummary:{errors:28,warns:3,resets:0}},{njs:10,offset:0,notes:677,bombs:0,obstacles:87,nps:3.232,length:509.719,characteristic:"Standard",difficulty:"Hard",events:1211,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:209.473,paritySummary:{errors:51,warns:47,resets:0},stars:2.17},{njs:13,offset:0,notes:791,bombs:0,obstacles:118,nps:3.776,length:509.719,characteristic:"Standard",difficulty:"Expert",events:1211,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:209.473,paritySummary:{errors:70,warns:64,resets:0},stars:2.8}],downloadURL:"https://cdn.beatsaver.com/e8ed13a78cd1e566f754d0cb47d4b5cde8918abe.zip",coverURL:"https://cdn.beatsaver.com/e8ed13a78cd1e566f754d0cb47d4b5cde8918abe.jpg",previewURL:"https://cdn.beatsaver.com/e8ed13a78cd1e566f754d0cb47d4b5cde8918abe.mp3"}],createdAt:"2018-10-12T03:28:19Z",updatedAt:"2018-10-12T03:28:19Z",lastPublishedAt:"2018-10-12T03:28:19Z"},{id:"3a4",name:"Boulevard of Broken Dreams - Green Day",description:"Expert - Hard - Normal\n1000+ Notes on Expert\nLighting Events\n\nhttps://twitter.com/TheDownyCat\nhttps://www.twitch.tv/downycat\nhttps://streamlabs.com/downycat/tip",uploader:{id:4285982,name:"downycat",uniqueSet:!0,hash:"5cff0b7398cc5a672c84ede5",avatar:"https://cdn.beatsaver.com/avatar/173538829888782336.png",type:"DISCORD"},metadata:{bpm:167,duration:266,songName:"Boulevard of Broken Dreams",songSubName:"Green Day",songAuthorName:"DownyCat",levelAuthorName:"downycat"},stats:{plays:0,downloads:6999,upvotes:6552,downvotes:321,score:.9216},uploaded:"2018-06-04T08:30:49Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"fa36428f6eed2648dade2fe320156adfaabe07b5",key:"3a4",state:"Published",createdAt:"2018-06-04T08:30:49Z",sageScore:5,diffs:[{njs:10,offset:0,notes:474,bombs:0,obstacles:0,nps:1.932,length:683,characteristic:"Standard",difficulty:"Normal",events:1076,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:245.389,paritySummary:{errors:182,warns:9,resets:0}},{njs:10,offset:0,notes:747,bombs:0,obstacles:0,nps:3.044,length:683,characteristic:"Standard",difficulty:"Hard",events:1076,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:245.389,paritySummary:{errors:97,warns:30,resets:0}},{njs:10,offset:0,notes:1049,bombs:0,obstacles:0,nps:4.275,length:683,characteristic:"Standard",difficulty:"Expert",events:1076,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:245.389,paritySummary:{errors:91,warns:73,resets:0}}],downloadURL:"https://cdn.beatsaver.com/fa36428f6eed2648dade2fe320156adfaabe07b5.zip",coverURL:"https://cdn.beatsaver.com/fa36428f6eed2648dade2fe320156adfaabe07b5.jpg",previewURL:"https://cdn.beatsaver.com/fa36428f6eed2648dade2fe320156adfaabe07b5.mp3"}],createdAt:"2018-06-04T08:30:49Z",updatedAt:"2018-06-04T08:30:49Z",lastPublishedAt:"2018-06-04T08:30:49Z"},{id:"10fe4",name:"We Like To Party (on the train tracks)",description:"Don't play on the tracks.\n\n\n\n\n\n\n\n\n\n\n\n\n(account definitely isn't a Mawntee alt account no sir)",uploader:{id:1602,name:"chief-queef",uniqueSet:!0,hash:"5f9a4d2a030219000627c2bf",avatar:"https://cdn.beatsaver.com/avatar/1602.jpg",type:"SIMPLE"},metadata:{bpm:136,duration:34,songName:"We Like To Party",songSubName:"",songAuthorName:"CHURCH OF LEL",levelAuthorName:"Chief Queef"},stats:{plays:0,downloads:2345,upvotes:1022,downvotes:20,score:.9215},uploaded:"2020-11-15T18:12:41.227Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"d004ad1ee631ae38ba7f0d336a039da8beb0b552",key:"10fe4",state:"Published",createdAt:"2020-11-15T18:12:41.227Z",sageScore:5,diffs:[{njs:69,offset:0,notes:781,bombs:0,obstacles:0,nps:23.922,length:73.984,characteristic:"Lawless",difficulty:"Easy",events:939,chroma:!0,me:!1,ne:!0,cinema:!1,seconds:32.64,paritySummary:{errors:0,warns:0,resets:0}}],downloadURL:"https://cdn.beatsaver.com/d004ad1ee631ae38ba7f0d336a039da8beb0b552.zip",coverURL:"https://cdn.beatsaver.com/d004ad1ee631ae38ba7f0d336a039da8beb0b552.jpg",previewURL:"https://cdn.beatsaver.com/d004ad1ee631ae38ba7f0d336a039da8beb0b552.mp3"}],createdAt:"2020-11-15T18:12:41.227Z",updatedAt:"2020-11-15T18:12:41.227Z",lastPublishedAt:"2020-11-15T18:12:41.227Z"},{id:"a72f",name:"The World of Tune - Onoken feat. GaQdan",description:"88-2",uploader:{id:4285521,name:"ejiejidayo",uniqueSet:!0,hash:"5cff0b7398cc5a672c84fc58",avatar:"https://cdn.beatsaver.com/avatar/224894241279574016.png",type:"DISCORD"},metadata:{bpm:108,duration:217,songName:"The World of Tune",songSubName:"Tones and Souls",songAuthorName:"Onoken feat. GaQdan",levelAuthorName:"ejiejidayo"},stats:{plays:0,downloads:814,upvotes:597,downvotes:4,score:.9215},uploaded:"2020-05-17T11:49:56.405Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"750910ebc1b4e958ed2266ba31786ba52569c6a5",key:"a72f",state:"Published",createdAt:"2020-05-17T11:49:56.405Z",sageScore:6,diffs:[{njs:13,offset:-.3,notes:400,bombs:0,obstacles:65,nps:1.893,length:380.393,characteristic:"Standard",difficulty:"Hard",events:1813,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:211.329,paritySummary:{errors:0,warns:0,resets:0}},{njs:15,offset:-.6,notes:761,bombs:0,obstacles:56,nps:3.601,length:380.393,characteristic:"Standard",difficulty:"Expert",events:1813,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:211.329,paritySummary:{errors:5,warns:5,resets:0}},{njs:17,offset:.2,notes:948,bombs:0,obstacles:57,nps:4.486,length:380.393,characteristic:"Standard",difficulty:"ExpertPlus",events:1813,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:211.329,paritySummary:{errors:3,warns:3,resets:0}}],downloadURL:"https://cdn.beatsaver.com/750910ebc1b4e958ed2266ba31786ba52569c6a5.zip",coverURL:"https://cdn.beatsaver.com/750910ebc1b4e958ed2266ba31786ba52569c6a5.jpg",previewURL:"https://cdn.beatsaver.com/750910ebc1b4e958ed2266ba31786ba52569c6a5.mp3"}],createdAt:"2020-05-17T11:49:56.405Z",updatedAt:"2020-05-17T11:49:56.405Z",lastPublishedAt:"2020-05-17T11:49:56.405Z"},{id:"3b6c",name:"Happatai - YATTA!",description:"edited: fixed a mistake in the Hard mode\r\n\r\nG-R-EE-N LEAVES! Japanese YMCA tbh\r\nIf you know this song, you a legend\r\n\r\nYoutube Preview: coming soon\r\n\r\nBPM 133\r\nHard, Expert\r\n\r\nHave fun!\r\n\r\ncontact me on discord\r\nDiscord: ETAN#8341",uploader:{id:4235140,name:"etan",uniqueSet:!0,hash:"5cff0b7798cc5a672c855775",avatar:"https://cdn.beatsaver.com/avatar/136373107559497728.png",type:"DISCORD"},metadata:{bpm:133,duration:237,songName:"YATTA!",songSubName:"Happatai",songAuthorName:"ETAN",levelAuthorName:"ETAN"},stats:{plays:0,downloads:1630,upvotes:874,downvotes:14,score:.9215},uploaded:"2019-03-04T07:04:15Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"9a7a73b32c7ffbc48a352963eb7298a918269458",key:"3b6c",state:"Published",createdAt:"2019-03-04T07:04:15Z",sageScore:6,diffs:[{njs:12,offset:0,notes:729,bombs:14,obstacles:8,nps:3.192,length:506.25,characteristic:"Standard",difficulty:"Hard",events:1354,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:228.383,paritySummary:{errors:83,warns:23,resets:2}},{njs:12,offset:0,notes:833,bombs:14,obstacles:8,nps:3.647,length:506.25,characteristic:"Standard",difficulty:"Expert",events:1354,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:228.383,paritySummary:{errors:75,warns:27,resets:2}}],downloadURL:"https://cdn.beatsaver.com/9a7a73b32c7ffbc48a352963eb7298a918269458.zip",coverURL:"https://cdn.beatsaver.com/9a7a73b32c7ffbc48a352963eb7298a918269458.jpg",previewURL:"https://cdn.beatsaver.com/9a7a73b32c7ffbc48a352963eb7298a918269458.mp3"}],createdAt:"2019-03-04T07:04:15Z",updatedAt:"2019-03-04T07:04:15Z",lastPublishedAt:"2019-03-04T07:04:15Z"},{id:"d411",name:"[FUTURE FUNK PACK] SUPER RISER! (Short Ver.) - Nanidato",description:'FUTURE FUNK MAP PACK\n2 songs uploaded everyday through August 10th - 14th!\n\n"SUPER RISER!" by Nanidato was sampled from Chieri Ito\'s "Merry Christmas" \n\nThis version of "SUPER RISER!" is a short edit I made to reduce the repetitive sections of the song near the end\n\nPlease look forward to the upcoming maps!\n\nDM any feedback on Discord\nETAN#8341',uploader:{id:4235140,name:"etan",uniqueSet:!0,hash:"5cff0b7798cc5a672c855775",avatar:"https://cdn.beatsaver.com/avatar/136373107559497728.png",type:"DISCORD"},metadata:{bpm:141,duration:155,songName:"SUPER RISER!",songSubName:"(Short Ver.)",songAuthorName:"Nanidato",levelAuthorName:"ETAN"},stats:{plays:0,downloads:3828,upvotes:766,downvotes:10,score:.9214},uploaded:"2020-08-11T17:47:02.338Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"c6b7136536ef5647374198769b3211b2b2e4ee17",key:"d411",state:"Published",createdAt:"2020-08-11T17:47:02.338Z",sageScore:7,diffs:[{njs:10,offset:0,notes:158,bombs:0,obstacles:14,nps:1.066,length:347.5,characteristic:"Standard",difficulty:"Easy",events:8420,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:147.872,paritySummary:{errors:57,warns:10,resets:0}},{njs:11,offset:1,notes:218,bombs:0,obstacles:14,nps:1.454,length:351.5,characteristic:"Standard",difficulty:"Normal",events:8420,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:149.574,paritySummary:{errors:14,warns:2,resets:0}},{njs:13,offset:1,notes:398,bombs:0,obstacles:16,nps:2.654,length:351.5,characteristic:"Standard",difficulty:"Hard",events:8420,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:149.574,paritySummary:{errors:0,warns:0,resets:0}},{njs:16,offset:.1,notes:578,bombs:0,obstacles:16,nps:3.854,length:351.5,characteristic:"Standard",difficulty:"Expert",events:8420,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:149.574,paritySummary:{errors:0,warns:0,resets:0}},{njs:19,offset:-.4,notes:781,bombs:0,obstacles:15,nps:5.207,length:351.5,characteristic:"Standard",difficulty:"ExpertPlus",events:8420,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:149.574,paritySummary:{errors:0,warns:0,resets:0}}],downloadURL:"https://cdn.beatsaver.com/c6b7136536ef5647374198769b3211b2b2e4ee17.zip",coverURL:"https://cdn.beatsaver.com/c6b7136536ef5647374198769b3211b2b2e4ee17.jpg",previewURL:"https://cdn.beatsaver.com/c6b7136536ef5647374198769b3211b2b2e4ee17.mp3"}],createdAt:"2020-08-11T17:47:02.338Z",updatedAt:"2020-08-11T17:47:02.338Z",lastPublishedAt:"2020-08-11T17:47:02.338Z"},{id:"6e6e",name:"The Pretender - Foo Fighters",description:"Shoutout to twitch.tv/whipstickgostop for playtesting!",uploader:{id:4285077,name:"ris",uniqueSet:!0,hash:"5cff0b7598cc5a672c8535df",avatar:"https://cdn.beatsaver.com/avatar/191597992061435904.png",type:"DISCORD"},metadata:{bpm:173,duration:271,songName:"The Pretender",songSubName:"",songAuthorName:"Foo Fighters",levelAuthorName:"Ris"},stats:{plays:0,downloads:6031,upvotes:2032,downvotes:67,score:.9213},uploaded:"2019-11-05T23:48:37.168Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"aa64d183dbdfd111f578e3ab80beeca2f61d13eb",key:"6e6e",state:"Published",createdAt:"2019-11-05T23:48:37.168Z",sageScore:2,diffs:[{njs:10,offset:0,notes:427,bombs:0,obstacles:6,nps:1.612,length:764,characteristic:"Standard",difficulty:"Normal",events:471,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:264.971,paritySummary:{errors:70,warns:44,resets:0}},{njs:12,offset:0,notes:641,bombs:0,obstacles:6,nps:2.418,length:764.5,characteristic:"Standard",difficulty:"Hard",events:471,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:265.145,paritySummary:{errors:78,warns:64,resets:0}},{njs:16,offset:.7,notes:958,bombs:4,obstacles:6,nps:3.613,length:764.5,characteristic:"Standard",difficulty:"Expert",events:471,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:265.145,paritySummary:{errors:64,warns:63,resets:2}}],downloadURL:"https://cdn.beatsaver.com/aa64d183dbdfd111f578e3ab80beeca2f61d13eb.zip",coverURL:"https://cdn.beatsaver.com/aa64d183dbdfd111f578e3ab80beeca2f61d13eb.jpg",previewURL:"https://cdn.beatsaver.com/aa64d183dbdfd111f578e3ab80beeca2f61d13eb.mp3"}],createdAt:"2019-11-05T23:48:37.168Z",updatedAt:"2019-11-05T23:48:37.168Z",lastPublishedAt:"2019-11-05T23:48:37.168Z"},{id:"68c5",name:"Sky Fracture VIP (ft. Miss Lina) - Getsix",description:"Ever wondered how one song would look like when mapped by several different mappers in their own mapping style? Then this map is for you! A big collaboration project started by Sykes19, it features a total of 17 maps and 6 unique lightshows, made by 15 mappers and 5 lighters. Special thanks to Getsix for making a Beat Saber edit of his song Sky Fracture VIP ft. Miss Lina!\n\nMapping Extensions mod required for some difficulties (see below).\nChromaLite mod highly recommended for Chroma colored lights.\nSongCore mod highly recommended for custom colors.\n\nStandard:\n1. techbutterfly (794 notes)\n2. Helen Carnate (833 notes)\n3. Bloodcloak (845 notes)\n4. Teuflum (1327 notes)\n5. Skyler Wallace (1329 notes)\n6. Raxan (1444 notes [found in No Arrows])\n7. LEh4nnes (1725 notes [found in No Arrows])\n\nLawless:\n1. Aeroluna (1355 notes)\n2. EncodeRed (1390 notes)\n3. xScaramouche (1585 notes)\n4. CyanSnow (1361 notes [Mapping Extensions])\n5. spooky ghost & Skyler Wallace (633 notes [Mapping Extensions])\n\nOne Saber:\n1. Skyler Wallace (775 notes)\n2. Kolezan (793 notes)\n3. 219278 (968 notes)\n4. 219278 (1104 notes)\n5. thelitlewiseowl (1347 notes)\n\nLightshows:\n1. Halcyon12 (17,993 lighting events)\n2. 219278 - (23,157 lighting events)\n3. Skeelie (26,500 lighting events)\n4. Aeroluna (29,982 lighting events)\n5. spooky ghost (27,387 lighting events, 26,047 walls [Mapping Extensions])\n6. 125K Lightshow (125,038 lighting events [found in No Arrows])",uploader:{id:37070,name:"anniversaryteam",uniqueSet:!0,hash:"5cff0b7798cc5a672c8565a3",avatar:"https://www.gravatar.com/avatar/5cff0b7798cc5a672c8565a3?d=retro",type:"SIMPLE"},metadata:{bpm:176,duration:219,songName:"Sky Fracture VIP",songSubName:"ft. Miss Lina",songAuthorName:"Getsix",levelAuthorName:"Various Mappers"},stats:{plays:0,downloads:4504,upvotes:2272,downvotes:79,score:.9213},uploaded:"2019-10-09T06:45:54.603Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"499e94f2ffb162dba02d4e499163a9cde3b925e5",key:"68c5",state:"Published",createdAt:"2019-10-09T06:45:54.603Z",sageScore:7,diffs:[{njs:16,offset:1,notes:794,bombs:0,obstacles:122,nps:2.019,length:1153.797,characteristic:"Standard",difficulty:"Easy",events:23157,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:393.34,paritySummary:{errors:49,warns:43,resets:0}},{njs:15,offset:1,notes:833,bombs:34,obstacles:10,nps:3.858,length:633.356,characteristic:"Standard",difficulty:"Normal",events:29982,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:215.917,paritySummary:{errors:62,warns:52,resets:2}},{njs:16,offset:.75,notes:845,bombs:24,obstacles:64,nps:3.913,length:633.419,characteristic:"Standard",difficulty:"Hard",events:26500,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:215.938,paritySummary:{errors:12,warns:4,resets:8}},{njs:19,offset:0,notes:1327,bombs:84,obstacles:74,nps:6.146,length:633.356,characteristic:"Standard",difficulty:"Expert",events:17993,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:215.917,paritySummary:{errors:18,warns:19,resets:11}},{njs:20,offset:0,notes:1329,bombs:29,obstacles:153,nps:6.155,length:633.356,characteristic:"Standard",difficulty:"ExpertPlus",events:27387,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:215.917,paritySummary:{errors:90,warns:100,resets:10}},{njs:16,offset:.75,notes:775,bombs:25,obstacles:215,nps:3.589,length:633.356,characteristic:"OneSaber",difficulty:"Easy",events:17993,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:215.917,paritySummary:{errors:37,warns:62,resets:2}},{njs:16,offset:.75,notes:793,bombs:72,obstacles:54,nps:3.673,length:633.356,characteristic:"OneSaber",difficulty:"Normal",events:26500,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:215.917,paritySummary:{errors:32,warns:94,resets:3}},{njs:17,offset:.25,notes:968,bombs:0,obstacles:58,nps:4.483,length:633.356,characteristic:"OneSaber",difficulty:"Hard",events:23157,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:215.917,paritySummary:{errors:8,warns:4,resets:0}},{njs:17,offset:.25,notes:1104,bombs:0,obstacles:58,nps:5.113,length:633.356,characteristic:"OneSaber",difficulty:"Expert",events:23157,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:215.917,paritySummary:{errors:27,warns:23,resets:0}},{njs:19,offset:.125,notes:1347,bombs:26,obstacles:22,nps:6.236,length:633.656,characteristic:"OneSaber",difficulty:"ExpertPlus",events:27387,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:216.019,paritySummary:{errors:38,warns:85,resets:3}},{njs:22,offset:0,notes:1444,bombs:0,obstacles:37,nps:6.688,length:633.356,characteristic:"NoArrows",difficulty:"Hard",events:29982,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:215.917,paritySummary:{errors:9,warns:20,resets:0}},{njs:22,offset:0,notes:1725,bombs:118,obstacles:104,nps:7.989,length:633.356,characteristic:"NoArrows",difficulty:"Expert",events:17993,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:215.917,paritySummary:{errors:10,warns:4,resets:13}},{njs:100,offset:0,notes:0,bombs:0,obstacles:0,nps:0,length:0,characteristic:"NoArrows",difficulty:"ExpertPlus",events:125018,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:0,paritySummary:{errors:0,warns:0,resets:0}},{njs:10,offset:0,notes:0,bombs:0,obstacles:0,nps:0,length:0,characteristic:"Lightshow",difficulty:"Easy",events:17993,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:0,paritySummary:{errors:0,warns:0,resets:0}},{njs:10,offset:0,notes:0,bombs:0,obstacles:0,nps:0,length:0,characteristic:"Lightshow",difficulty:"Normal",events:23157,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:0,paritySummary:{errors:0,warns:0,resets:0}},{njs:10,offset:0,notes:0,bombs:0,obstacles:0,nps:0,length:0,characteristic:"Lightshow",difficulty:"Hard",events:26500,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:0,paritySummary:{errors:0,warns:0,resets:0}},{njs:10,offset:0,notes:0,bombs:0,obstacles:0,nps:0,length:0,characteristic:"Lightshow",difficulty:"Expert",events:29982,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:0,paritySummary:{errors:0,warns:0,resets:0}},{njs:20,offset:0,notes:0,bombs:0,obstacles:26047,nps:0,length:0,characteristic:"Lightshow",difficulty:"ExpertPlus",events:27387,chroma:!1,me:!0,ne:!1,cinema:!1,seconds:0,paritySummary:{errors:0,warns:0,resets:0}},{njs:20,offset:0,notes:1355,bombs:18,obstacles:0,nps:6.276,length:633.356,characteristic:"Lawless",difficulty:"Easy",events:29982,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:215.917,paritySummary:{errors:26,warns:28,resets:0}},{njs:17,offset:1,notes:1390,bombs:46,obstacles:65,nps:6.437,length:633.419,characteristic:"Lawless",difficulty:"Normal",events:23157,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:215.938,paritySummary:{errors:32,warns:18,resets:0}},{njs:19,offset:0,notes:1585,bombs:46,obstacles:25,nps:7.341,length:633.356,characteristic:"Lawless",difficulty:"Hard",events:17993,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:215.917,paritySummary:{errors:16,warns:14,resets:0}},{njs:21,offset:0,notes:1361,bombs:46,obstacles:1,nps:6.303,length:633.356,characteristic:"Lawless",difficulty:"Expert",events:26083,chroma:!1,me:!0,ne:!1,cinema:!1,seconds:215.917,paritySummary:{errors:0,warns:0,resets:0}},{njs:20,offset:0,notes:633,bombs:0,obstacles:26047,nps:3.077,length:603.356,characteristic:"Lawless",difficulty:"ExpertPlus",events:27387,chroma:!1,me:!0,ne:!1,cinema:!1,seconds:205.69,paritySummary:{errors:64,warns:39,resets:0}}],downloadURL:"https://cdn.beatsaver.com/499e94f2ffb162dba02d4e499163a9cde3b925e5.zip",coverURL:"https://cdn.beatsaver.com/499e94f2ffb162dba02d4e499163a9cde3b925e5.jpg",previewURL:"https://cdn.beatsaver.com/499e94f2ffb162dba02d4e499163a9cde3b925e5.mp3"}],createdAt:"2019-10-09T06:45:54.603Z",updatedAt:"2019-10-09T06:45:54.603Z",lastPublishedAt:"2019-10-09T06:45:54.603Z"},{id:"612d",name:"[Anniversary] Overkill - RIOT [Heisenberg & Skyler Wallace]",description:"Part of the Anniversary Song Pack",uploader:{id:37070,name:"anniversaryteam",uniqueSet:!0,hash:"5cff0b7798cc5a672c8565a3",avatar:"https://www.gravatar.com/avatar/5cff0b7798cc5a672c8565a3?d=retro",type:"SIMPLE"},metadata:{bpm:174,duration:310,songName:"Overkill",songSubName:"",songAuthorName:"RIOT",levelAuthorName:"Heisenberg & Skyler Wallace"},stats:{plays:0,downloads:2777,upvotes:1933,downvotes:62,score:.9213},uploaded:"2019-09-04T02:20:01.432Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"8af36a369b051a4a82348dccd2051ee64530d12d",key:"612d",state:"Published",createdAt:"2019-09-04T02:20:01.432Z",sageScore:6,diffs:[{njs:15,offset:.75,notes:826,bombs:664,obstacles:25,nps:2.79,length:858.5,characteristic:"Standard",difficulty:"Hard",events:12607,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:296.035,paritySummary:{errors:58,warns:88,resets:16}},{njs:17,offset:.25,notes:1114,bombs:668,obstacles:27,nps:3.763,length:858.5,characteristic:"Standard",difficulty:"Expert",events:12190,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:296.034,paritySummary:{errors:60,warns:107,resets:16}},{njs:19,offset:.25,notes:1925,bombs:462,obstacles:1e3,nps:6.503,length:858.5,characteristic:"Standard",difficulty:"ExpertPlus",events:12513,chroma:!1,me:!0,ne:!1,cinema:!1,seconds:296.035,paritySummary:{errors:0,warns:0,resets:0}}],downloadURL:"https://cdn.beatsaver.com/8af36a369b051a4a82348dccd2051ee64530d12d.zip",coverURL:"https://cdn.beatsaver.com/8af36a369b051a4a82348dccd2051ee64530d12d.jpg",previewURL:"https://cdn.beatsaver.com/8af36a369b051a4a82348dccd2051ee64530d12d.mp3"}],createdAt:"2019-09-04T02:20:01.432Z",updatedAt:"2019-09-04T02:20:01.432Z",lastPublishedAt:"2019-09-04T02:20:01.432Z"},{id:"5222",name:"To see the future [Sword Art Online Alternative: Gun Gale Online Ending]",description:"Preview:\r\nhttps://www.youtube.com/watch?v=DEp-eEgl1_w\r\n\r\nMAPPING EXTENSIONS REQUIRED for walls and such\r\nThis took forever but it was SOOO worth it\r\n\r\nThanks to Sehria_K for playtesting!\r\n\r\nSAO Alternative: GGO ED by LLENN (Tomori Kusunoki)\r\n\r\nPlease enjoy\r\ngimme feedback on Discord\r\nETAN#8341",uploader:{id:4235140,name:"etan",uniqueSet:!0,hash:"5cff0b7798cc5a672c855775",avatar:"https://cdn.beatsaver.com/avatar/136373107559497728.png",type:"DISCORD"},metadata:{bpm:137,duration:256,songName:"To see the future",songSubName:"Tomori Kusunoki",songAuthorName:"ETAN",levelAuthorName:"ETAN"},stats:{plays:0,downloads:3227,upvotes:940,downvotes:17,score:.9212},uploaded:"2019-06-07T21:47:12Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"7e33f5491f94b5b3590864629579ed59f3f8fc90",key:"5222",state:"Published",createdAt:"2019-06-07T21:47:12Z",sageScore:6,diffs:[{njs:13,offset:0,notes:622,bombs:111,obstacles:692,nps:2.479,length:573,characteristic:"Standard",difficulty:"Hard",events:3793,chroma:!1,me:!0,ne:!1,cinema:!1,seconds:250.949,paritySummary:{errors:0,warns:0,resets:0}},{njs:18,offset:0,notes:924,bombs:92,obstacles:692,nps:3.68,length:573.25,characteristic:"Standard",difficulty:"Expert",events:3793,chroma:!1,me:!0,ne:!1,cinema:!1,seconds:251.058,paritySummary:{errors:0,warns:0,resets:0}}],downloadURL:"https://cdn.beatsaver.com/7e33f5491f94b5b3590864629579ed59f3f8fc90.zip",coverURL:"https://cdn.beatsaver.com/7e33f5491f94b5b3590864629579ed59f3f8fc90.jpg",previewURL:"https://cdn.beatsaver.com/7e33f5491f94b5b3590864629579ed59f3f8fc90.mp3"}],createdAt:"2019-06-07T21:47:12Z",updatedAt:"2019-06-07T21:47:12Z",lastPublishedAt:"2019-06-07T21:47:12Z"},{id:"2ece",name:"#CookieJar - Red Velvet",description:"I love Nichole (LovingWaifuu) I made this chart for her\r\nFollow her twitch: https://www.twitch.tv/lovingwaifuu\r\nAlso follow me on twitch: https://www.twitch.tv/rinkusenpai\r\nThank you Redmagi and Don for the testplays!\r\nEdit: I fixed some weird stuff that happened with copy/paste and my stupidity, sorry about leaderboards",uploader:{id:16388,name:"rinkusenpai",uniqueSet:!0,hash:"5cff0b7398cc5a672c84f6cc",avatar:"https://www.gravatar.com/avatar/5cff0b7398cc5a672c84f6cc?d=retro",type:"SIMPLE"},metadata:{bpm:159,duration:214,songName:"#Cookie Jar",songSubName:"Red Velvet",songAuthorName:"RinkuSenpai",levelAuthorName:"rinkusenpai"},stats:{plays:0,downloads:2705,upvotes:1202,downvotes:28,score:.9212},uploaded:"2019-01-19T01:42:07Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"ae11541d849b9126469c79f5ab61b088def692c1",key:"2ece",state:"Published",createdAt:"2019-01-19T01:42:07Z",sageScore:5,diffs:[{njs:12,offset:0,notes:821,bombs:0,obstacles:20,nps:4.029,length:540,characteristic:"Standard",difficulty:"Expert",events:2173,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:203.774,paritySummary:{errors:43,warns:50,resets:0}}],downloadURL:"https://cdn.beatsaver.com/ae11541d849b9126469c79f5ab61b088def692c1.zip",coverURL:"https://cdn.beatsaver.com/ae11541d849b9126469c79f5ab61b088def692c1.jpg",previewURL:"https://cdn.beatsaver.com/ae11541d849b9126469c79f5ab61b088def692c1.mp3"}],createdAt:"2019-01-19T01:42:07Z",updatedAt:"2019-01-19T01:42:07Z",lastPublishedAt:"2019-01-19T01:42:07Z"},{id:"83b",name:"Otter Pop (feat. Hollis) - Shawn Wasabi",description:"Difficulties: Expert+ Only\r\nMore Benny Originals: https://beatsaver.com/searchhtml.php?q=bennydabeast",uploader:{id:30311,name:"bennydabeast",uniqueSet:!0,hash:"5cff0b7298cc5a672c84e98d",avatar:"https://cdn.beatsaver.com/avatar/30311.jpg",type:"SIMPLE"},metadata:{bpm:93,duration:170,songName:"Otter Pop (feat. Hollis)",songSubName:"Shawn Wasabi",songAuthorName:"BennyDaBeast",levelAuthorName:"bennydabeast"},stats:{plays:0,downloads:3164,upvotes:2048,downvotes:68,score:.9212},uploaded:"2018-07-06T21:44:56Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"c7e15a9eaeaae0fe9dd8e4ad62cfd849e3cc6cc7",key:"83b",state:"Published",createdAt:"2018-07-06T21:44:56Z",sageScore:5,diffs:[{njs:10,offset:0,notes:706,bombs:2,obstacles:36,nps:4.275,length:256,characteristic:"Standard",difficulty:"ExpertPlus",events:235,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:165.161,paritySummary:{errors:89,warns:89,resets:1}}],downloadURL:"https://cdn.beatsaver.com/c7e15a9eaeaae0fe9dd8e4ad62cfd849e3cc6cc7.zip",coverURL:"https://cdn.beatsaver.com/c7e15a9eaeaae0fe9dd8e4ad62cfd849e3cc6cc7.jpg",previewURL:"https://cdn.beatsaver.com/c7e15a9eaeaae0fe9dd8e4ad62cfd849e3cc6cc7.mp3"}],createdAt:"2018-07-06T21:44:56Z",updatedAt:"2018-07-06T21:44:56Z",lastPublishedAt:"2018-07-06T21:44:56Z"},{id:"dd1d",name:"yasuoP - Electric Angel/えれくとりっく・えんじぇぅ - Kagamine Rin Kagamine Ren - ArrangeCover 【Wall Map】(Fixed)",description:"Fixed\n\n【Preview】\nhttps://youtu.be/RI2jxRwj6WY",uploader:{id:4285467,name:"fefy",uniqueSet:!0,hash:"5cff0b7798cc5a672c856908",avatar:"https://cdn.beatsaver.com/avatar/380656936460484620.png",type:"DISCORD"},metadata:{bpm:150,duration:192,songName:"えれくとりっく・えんじぇぅ",songSubName:"鏡音リン・鏡音レンアレンジカバー",songAuthorName:"ヤスオ",levelAuthorName:"Fefy〈ふぇふぃー〉"},stats:{plays:0,downloads:1627,upvotes:963,downvotes:18,score:.9211},uploaded:"2020-08-24T09:58:50.214Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"bba2b6d3af3dc614c65c4b87b6a50f118ed181a8",key:"dd1d",state:"Published",createdAt:"2020-08-24T09:58:50.214Z",sageScore:3,diffs:[{njs:16,offset:0,notes:639,bombs:0,obstacles:39988,nps:3.41,length:468.5,characteristic:"Standard",difficulty:"Hard",events:5,chroma:!0,me:!1,ne:!0,cinema:!1,seconds:187.4,paritySummary:{errors:14,warns:15,resets:0}}],downloadURL:"https://cdn.beatsaver.com/bba2b6d3af3dc614c65c4b87b6a50f118ed181a8.zip",coverURL:"https://cdn.beatsaver.com/bba2b6d3af3dc614c65c4b87b6a50f118ed181a8.jpg",previewURL:"https://cdn.beatsaver.com/bba2b6d3af3dc614c65c4b87b6a50f118ed181a8.mp3"}],createdAt:"2020-08-24T09:58:50.214Z",updatedAt:"2020-08-24T09:58:50.214Z",lastPublishedAt:"2020-08-24T09:58:50.214Z"},{id:"86e9",name:"Best Day Of My Life - American Authors",description:'"Best Day of My Life" is a song by American pop rock band American Authors. The song was written by band members Zac Barnett, Dave Rublin, Matt Sanchez, and James Adam Shelley, along with producers Aaron Accetta and Shep Goodman. "Best Day of My Life" was originally recorded for release as a single by Mercury Records and Island Records on March 19, 2013.',uploader:{id:58338,name:"Joetastic",uniqueSet:!0,hash:"5cff0b7498cc5a672c85050e",avatar:"https://cdn.beatsaver.com/avatar/227767566402191360.png",type:"DISCORD"},metadata:{bpm:100,duration:194,songName:"Best Day Of My Life",songSubName:"",songAuthorName:"American Authors",levelAuthorName:"Joetastic"},stats:{plays:0,downloads:2731,upvotes:863,downvotes:14,score:.9211},uploaded:"2020-02-14T16:59:24.776Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"6b253cbb5a2a81c2575e0778614bf009d7954834",key:"86e9",state:"Published",createdAt:"2020-02-14T16:59:24.776Z",sageScore:9,diffs:[{njs:8,offset:.4,notes:194,bombs:0,obstacles:4,nps:1.017,length:318,characteristic:"Standard",difficulty:"Easy",events:3091,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:190.8,paritySummary:{errors:28,warns:5,resets:0}},{njs:10,offset:.2,notes:399,bombs:0,obstacles:4,nps:2.091,length:318,characteristic:"Standard",difficulty:"Normal",events:3091,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:190.8,paritySummary:{errors:25,warns:24,resets:0}},{njs:12,offset:0,notes:634,bombs:0,obstacles:4,nps:3.323,length:318,characteristic:"Standard",difficulty:"Hard",events:3091,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:190.8,paritySummary:{errors:4,warns:5,resets:0}},{njs:14,offset:0,notes:837,bombs:0,obstacles:11,nps:4.387,length:318,characteristic:"Standard",difficulty:"Expert",events:3091,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:190.8,paritySummary:{errors:20,warns:20,resets:0}},{njs:16,offset:.4,notes:948,bombs:0,obstacles:11,nps:4.969,length:318,characteristic:"Standard",difficulty:"ExpertPlus",events:3095,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:190.8,paritySummary:{errors:15,warns:15,resets:0}}],downloadURL:"https://cdn.beatsaver.com/6b253cbb5a2a81c2575e0778614bf009d7954834.zip",coverURL:"https://cdn.beatsaver.com/6b253cbb5a2a81c2575e0778614bf009d7954834.jpg",previewURL:"https://cdn.beatsaver.com/6b253cbb5a2a81c2575e0778614bf009d7954834.mp3"}],createdAt:"2020-02-14T16:59:24.776Z",updatedAt:"2020-02-14T16:59:24.776Z",lastPublishedAt:"2020-02-14T16:59:24.776Z"},{id:"5335",name:"David Guetta, Martin Garrix & Brooks - Like I Do",description:"This map - trust me - is sensational..\nCheck out my lightshows here: https://www.youtube.com/playlist?list=PLwl6dYq72JOYu1BnKl5WATa4Dh__ZJmuN",uploader:{id:14808,name:"halcyon12",uniqueSet:!0,hash:"5cff0b7698cc5a672c8547ad",avatar:"https://www.gravatar.com/avatar/5cff0b7698cc5a672c8547ad?d=retro",type:"SIMPLE"},metadata:{bpm:128,duration:99,songName:"Like I Do",songSubName:"",songAuthorName:"David Guetta, Martin Garrix, Brooks",levelAuthorName:"Halcyon12"},stats:{plays:0,downloads:2486,upvotes:1153,downvotes:26,score:.9211},uploaded:"2019-06-16T19:05:31.814Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"59e1b8fa392e26bbcc528dcea08b80699efdbeb6",key:"5335",state:"Published",createdAt:"2019-06-16T19:05:31.814Z",sageScore:3,diffs:[{njs:11,offset:1,notes:171,bombs:0,obstacles:1,nps:1.91,length:191,characteristic:"Standard",difficulty:"Normal",events:4711,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:89.531,paritySummary:{errors:16,warns:3,resets:0}},{njs:13,offset:1,notes:234,bombs:0,obstacles:3,nps:2.6,length:192,characteristic:"Standard",difficulty:"Hard",events:4711,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:90,paritySummary:{errors:7,warns:0,resets:0}},{njs:15,offset:0,notes:305,bombs:4,obstacles:7,nps:3.407,length:191,characteristic:"Standard",difficulty:"Expert",events:4711,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:89.531,paritySummary:{errors:9,warns:6,resets:0}},{njs:17,offset:0,notes:397,bombs:12,obstacles:10,nps:4.411,length:192,characteristic:"Standard",difficulty:"ExpertPlus",events:4764,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:90,paritySummary:{errors:3,warns:2,resets:3}}],downloadURL:"https://cdn.beatsaver.com/59e1b8fa392e26bbcc528dcea08b80699efdbeb6.zip",coverURL:"https://cdn.beatsaver.com/59e1b8fa392e26bbcc528dcea08b80699efdbeb6.jpg",previewURL:"https://cdn.beatsaver.com/59e1b8fa392e26bbcc528dcea08b80699efdbeb6.mp3"}],createdAt:"2019-06-16T19:05:31.814Z",updatedAt:"2019-06-16T19:05:31.814Z",lastPublishedAt:"2019-06-16T19:05:31.814Z"},{id:"e44",name:"Big Girl (You Are Beautiful) - MIKA",description:"Prepare yourself for some big moves!\r\nPlaythrough : https://youtu.be/hzGaITR-648",uploader:{id:13320,name:"novashaft",uniqueSet:!0,hash:"5cff0b7398cc5a672c84ee55",avatar:"https://www.gravatar.com/avatar/5cff0b7398cc5a672c84ee55?d=retro",type:"SIMPLE"},metadata:{bpm:116,duration:241,songName:"Big Girl (You Are Beatiful)",songSubName:"MIKA",songAuthorName:"NovaShaft",levelAuthorName:"novashaft"},stats:{plays:0,downloads:3095,upvotes:1222,downvotes:29,score:.9211},uploaded:"2018-08-07T12:02:28Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"6c4f86a126cd7465ec536837f3e73874e07068ef",key:"e44",state:"Published",createdAt:"2018-08-07T12:02:28Z",sageScore:5,diffs:[{njs:10,offset:0,notes:855,bombs:0,obstacles:18,nps:3.723,length:444,characteristic:"Standard",difficulty:"Expert",events:645,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:229.655,paritySummary:{errors:56,warns:63,resets:0}}],downloadURL:"https://cdn.beatsaver.com/6c4f86a126cd7465ec536837f3e73874e07068ef.zip",coverURL:"https://cdn.beatsaver.com/6c4f86a126cd7465ec536837f3e73874e07068ef.jpg",previewURL:"https://cdn.beatsaver.com/6c4f86a126cd7465ec536837f3e73874e07068ef.mp3"}],createdAt:"2018-08-07T12:02:28Z",updatedAt:"2018-08-07T12:02:28Z",lastPublishedAt:"2018-08-07T12:02:28Z"},{id:"6bfa",name:"Approaching Nirvana - Alone",description:"https://www.youtube.com/watch?v=lZvGn7RUC7c",uploader:{id:12996,name:"rustic",uniqueSet:!0,hash:"5cff0b7298cc5a672c84e8c4",avatar:"https://www.gravatar.com/avatar/5cff0b7298cc5a672c84e8c4?d=retro",type:"SIMPLE"},metadata:{bpm:128,duration:170,songName:"Alone",songSubName:"",songAuthorName:"Approaching Nirvana",levelAuthorName:"Rustic"},stats:{plays:0,downloads:1796,upvotes:1032,downvotes:21,score:.921},uploaded:"2019-10-24T19:54:05.671Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"ccf70e940a4ec45c70a8f3ae7be18a2ea771461d",key:"6bfa",state:"Published",createdAt:"2019-10-24T19:54:05.671Z",sageScore:6,diffs:[{njs:18,offset:0,notes:416,bombs:0,obstacles:1689,nps:2.558,length:347,characteristic:"Standard",difficulty:"Expert",events:3383,chroma:!1,me:!0,ne:!1,cinema:!1,seconds:162.656,paritySummary:{errors:0,warns:0,resets:0}}],downloadURL:"https://cdn.beatsaver.com/ccf70e940a4ec45c70a8f3ae7be18a2ea771461d.zip",coverURL:"https://cdn.beatsaver.com/ccf70e940a4ec45c70a8f3ae7be18a2ea771461d.jpg",previewURL:"https://cdn.beatsaver.com/ccf70e940a4ec45c70a8f3ae7be18a2ea771461d.mp3"}],createdAt:"2019-10-24T19:54:05.671Z",updatedAt:"2019-10-24T19:54:05.671Z",lastPublishedAt:"2019-10-24T19:54:05.671Z"},{id:"6330",name:"dj-Jo - The Legend of Zelda Ocarina of Time Title Theme Remix",description:"Ocarina of Time is one of my favorites games for the N64. Hope you guys enjoy it as much as I did",uploader:{id:4285107,name:"kikaeaeon",uniqueSet:!0,hash:"5cff0b7498cc5a672c85109b",avatar:"https://cdn.beatsaver.com/avatar/103715469822816256.png",type:"DISCORD"},metadata:{bpm:165,duration:249,songName:"The Legend of Zelda Ocarina of Time Title Theme Remix",songSubName:"",songAuthorName:"dj-Jo",levelAuthorName:"KikaeAeon"},stats:{plays:0,downloads:2252,upvotes:670,downvotes:7,score:.9209},uploaded:"2019-09-13T19:15:16.984Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"35dffa3cbcaca2261d3bdd7306df9503fd9adc0f",key:"6330",state:"Published",createdAt:"2019-09-13T19:15:16.984Z",sageScore:6,diffs:[{njs:14,offset:0,notes:745,bombs:0,obstacles:28,nps:3.242,length:632,characteristic:"Standard",difficulty:"Expert",events:890,chroma:!1,me:!0,ne:!1,cinema:!1,seconds:229.818,paritySummary:{errors:18,warns:7,resets:0}},{njs:16,offset:0,notes:955,bombs:0,obstacles:30,nps:4.155,length:632,characteristic:"Standard",difficulty:"ExpertPlus",events:1030,chroma:!1,me:!0,ne:!1,cinema:!1,seconds:229.818,paritySummary:{errors:21,warns:17,resets:0}}],downloadURL:"https://cdn.beatsaver.com/35dffa3cbcaca2261d3bdd7306df9503fd9adc0f.zip",coverURL:"https://cdn.beatsaver.com/35dffa3cbcaca2261d3bdd7306df9503fd9adc0f.jpg",previewURL:"https://cdn.beatsaver.com/35dffa3cbcaca2261d3bdd7306df9503fd9adc0f.mp3"}],createdAt:"2019-09-13T19:15:16.984Z",updatedAt:"2019-09-13T19:15:16.984Z",lastPublishedAt:"2019-09-13T19:15:16.984Z"},{id:"217",name:"Beat it - Michael Jackson",description:"Easy/Normal/Hard/Expert - Obstacles and mines purely for dance moves! 100% Expert Playthrough: https://bit.ly/2IKzCp3\r\n\r\n- Freeek =)",uploader:{id:47581,name:"freeek",uniqueSet:!0,hash:"5cff0b7298cc5a672c84e8ad",avatar:"https://www.gravatar.com/avatar/5cff0b7298cc5a672c84e8ad?d=retro",type:"SIMPLE"},metadata:{bpm:139,duration:143,songName:"Beat it",songSubName:"Michael Jackson",songAuthorName:"Freeek",levelAuthorName:"freeek"},stats:{plays:0,downloads:19417,upvotes:15233,downvotes:887,score:.9209},uploaded:"2018-05-25T14:20:19Z",automapper:!1,ranked:!0,qualified:!1,versions:[{hash:"4b2da842b687ec4cfbc948c583c21c79d4120de0",key:"217",state:"Published",createdAt:"2018-05-25T14:20:19Z",sageScore:5,diffs:[{njs:10,offset:0,notes:188,bombs:0,obstacles:84,nps:1.431,length:303.875,characteristic:"Standard",difficulty:"Easy",events:878,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:131.169,paritySummary:{errors:0,warns:0,resets:0},stars:.39},{njs:10,offset:0,notes:219,bombs:40,obstacles:70,nps:1.667,length:304,characteristic:"Standard",difficulty:"Normal",events:878,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:131.223,paritySummary:{errors:29,warns:8,resets:1},stars:.64},{njs:10,offset:0,notes:386,bombs:42,obstacles:72,nps:2.937,length:304,characteristic:"Standard",difficulty:"Hard",events:878,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:131.223,paritySummary:{errors:80,warns:49,resets:4},stars:1.7},{njs:10,offset:0,notes:623,bombs:46,obstacles:69,nps:4.741,length:304,characteristic:"Standard",difficulty:"Expert",events:878,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:131.223,paritySummary:{errors:87,warns:31,resets:2}}],downloadURL:"https://cdn.beatsaver.com/4b2da842b687ec4cfbc948c583c21c79d4120de0.zip",coverURL:"https://cdn.beatsaver.com/4b2da842b687ec4cfbc948c583c21c79d4120de0.jpg",previewURL:"https://cdn.beatsaver.com/4b2da842b687ec4cfbc948c583c21c79d4120de0.mp3"}],createdAt:"2018-05-25T14:20:19Z",updatedAt:"2018-05-25T14:20:19Z",lastPublishedAt:"2018-05-25T14:20:19Z"},{id:"bb4",name:"Octopath Traveler Main Theme - Yasunori Nishiki",description:"SS Full Combo: https://www.youtube.com/watch?v=zhwpW6ZfBqo",uploader:{id:41168,name:"edzo",uniqueSet:!0,hash:"5cff0b7398cc5a672c84f56a",avatar:"https://www.gravatar.com/avatar/5cff0b7398cc5a672c84f56a?d=retro",type:"SIMPLE"},metadata:{bpm:264,duration:150,songName:"Octopath Traveler Main Theme",songSubName:"Yasunori Nishiki",songAuthorName:"Edzo",levelAuthorName:"edzo"},stats:{plays:0,downloads:1163,upvotes:518,downvotes:2,score:.9207},uploaded:"2018-07-25T01:41:47Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"4ba6575e63038cc8bb747f7c1e56bf2202d551be",key:"bb4",state:"Published",createdAt:"2018-07-25T01:41:47Z",sageScore:4,diffs:[{njs:10,offset:0,notes:505,bombs:0,obstacles:5,nps:3.45,length:644,characteristic:"Standard",difficulty:"Expert",events:666,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:146.364,paritySummary:{errors:46,warns:29,resets:0}}],downloadURL:"https://cdn.beatsaver.com/4ba6575e63038cc8bb747f7c1e56bf2202d551be.zip",coverURL:"https://cdn.beatsaver.com/4ba6575e63038cc8bb747f7c1e56bf2202d551be.jpg",previewURL:"https://cdn.beatsaver.com/4ba6575e63038cc8bb747f7c1e56bf2202d551be.mp3"}],createdAt:"2018-07-25T01:41:47Z",updatedAt:"2018-07-25T01:41:47Z",lastPublishedAt:"2018-07-25T01:41:47Z"},{id:"94cb",name:"Buttercup | By Jack Stauber | Charted By StyngMe |",description:"Difficulties: Hard\nEnjoy! <3",uploader:{id:30754,name:"styngme",uniqueSet:!1,hash:"5cff0b7298cc5a672c84e9cd",avatar:"https://www.gravatar.com/avatar/5cff0b7298cc5a672c84e9cd?d=retro",type:"SIMPLE"},metadata:{bpm:120,duration:202,songName:"Buttercup",songSubName:"",songAuthorName:"Jack Stauber",levelAuthorName:"StyngMe"},stats:{plays:0,downloads:1776,upvotes:692,downvotes:8,score:.9206},uploaded:"2020-03-29T01:21:28.921Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"eb750f2dcec62ac3a816583854dbdee4514d8581",key:"94cb",state:"Published",createdAt:"2020-03-29T01:21:28.921Z",sageScore:2,diffs:[{njs:14,offset:0,notes:441,bombs:112,obstacles:41,nps:2.297,length:384,characteristic:"Standard",difficulty:"Hard",events:658,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:192,paritySummary:{errors:32,warns:19,resets:8}}],downloadURL:"https://cdn.beatsaver.com/eb750f2dcec62ac3a816583854dbdee4514d8581.zip",coverURL:"https://cdn.beatsaver.com/eb750f2dcec62ac3a816583854dbdee4514d8581.jpg",previewURL:"https://cdn.beatsaver.com/eb750f2dcec62ac3a816583854dbdee4514d8581.mp3"}],createdAt:"2020-03-29T01:21:28.921Z",updatedAt:"2020-03-29T01:21:28.921Z",lastPublishedAt:"2020-03-29T01:21:28.921Z"},{id:"a3a",name:"Platinum Disco - Yuka Iguchi",description:"One of the OPs in Nisemonogatari\r\nI know its a bit easy for an expert map. tried to keep it's flow mostly.\r\nBPM : 117, Duration 4:14\r\nDifficulties: Easy, Normal, Hard, Expert\r\n\r\nDemo : https://youtu.be/EV07KuV_DrA",uploader:{id:47059,name:"rocket",uniqueSet:!0,hash:"5cff0b7398cc5a672c84f1c0",avatar:"https://www.gravatar.com/avatar/5cff0b7398cc5a672c84f1c0?d=retro",type:"SIMPLE"},metadata:{bpm:117,duration:254,songName:"Platinum Disco",songSubName:"Yuka Iguchi",songAuthorName:"Rocket",levelAuthorName:"rocket"},stats:{plays:0,downloads:3105,upvotes:1914,downvotes:63,score:.9205},uploaded:"2018-07-18T00:14:28Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"a372fee60c26b5e35861c71d9c38b4ef60974e93",key:"a3a",state:"Published",createdAt:"2018-07-18T00:14:28Z",sageScore:5,diffs:[{njs:10,offset:0,notes:264,bombs:0,obstacles:27,nps:1.059,length:486,characteristic:"Standard",difficulty:"Easy",events:605,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:249.231,paritySummary:{errors:73,warns:54,resets:0}},{njs:10,offset:0,notes:483,bombs:0,obstacles:27,nps:1.938,length:486,characteristic:"Standard",difficulty:"Normal",events:605,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:249.231,paritySummary:{errors:82,warns:100,resets:0}},{njs:10,offset:0,notes:738,bombs:0,obstacles:27,nps:2.961,length:486,characteristic:"Standard",difficulty:"Hard",events:605,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:249.231,paritySummary:{errors:107,warns:118,resets:0}},{njs:10,offset:0,notes:845,bombs:0,obstacles:27,nps:3.39,length:486,characteristic:"Standard",difficulty:"Expert",events:604,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:249.231,paritySummary:{errors:128,warns:111,resets:0}}],downloadURL:"https://cdn.beatsaver.com/a372fee60c26b5e35861c71d9c38b4ef60974e93.zip",coverURL:"https://cdn.beatsaver.com/a372fee60c26b5e35861c71d9c38b4ef60974e93.jpg",previewURL:"https://cdn.beatsaver.com/a372fee60c26b5e35861c71d9c38b4ef60974e93.mp3"}],createdAt:"2018-07-18T00:14:28Z",updatedAt:"2018-07-18T00:14:28Z",lastPublishedAt:"2018-07-18T00:14:28Z"},{id:"b8d7",name:"Contradiction [The God of High School Opening] - KSUKE ft. Tyler Carter",description:'Everyone step to the left. Wait, wrong song xD but it does have walls that make you go left right down up.\n\n"Contradiction" is KSUKE\'s latest Single featuring American singer Tyler Carter. It is used as the opening song in the upcoming Crunchyroll anime adaption of The God of High School.',uploader:{id:58338,name:"Joetastic",uniqueSet:!0,hash:"5cff0b7498cc5a672c85050e",avatar:"https://cdn.beatsaver.com/avatar/227767566402191360.png",type:"DISCORD"},metadata:{bpm:130,duration:200,songName:"Contradiction",songSubName:"ft. Tyler Carter",songAuthorName:"KSUKE",levelAuthorName:"Joetastic"},stats:{plays:0,downloads:9869,upvotes:1479,downvotes:42,score:.9204},uploaded:"2020-07-03T04:53:48.515Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"980cf4979240c9d2b1107a24d6143dd9b85f8098",key:"b8d7",state:"Published",createdAt:"2020-07-03T04:53:48.515Z",sageScore:4,diffs:[{njs:10,offset:0,notes:0,bombs:0,obstacles:0,nps:0,length:0,characteristic:"Standard",difficulty:"Easy",events:13893,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:0,paritySummary:{errors:0,warns:0,resets:0}},{njs:12,offset:.35,notes:711,bombs:0,obstacles:70,nps:3.633,length:424,characteristic:"Standard",difficulty:"Hard",events:13893,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:195.692,paritySummary:{errors:4,warns:2,resets:0}},{njs:16,offset:-.25,notes:1075,bombs:0,obstacles:110,nps:5.493,length:424,characteristic:"Standard",difficulty:"Expert",events:13893,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:195.692,paritySummary:{errors:3,warns:4,resets:0}},{njs:20,offset:.4,notes:1219,bombs:0,obstacles:102,nps:6.229,length:424,characteristic:"Standard",difficulty:"ExpertPlus",events:13893,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:195.692,paritySummary:{errors:0,warns:10,resets:0}}],downloadURL:"https://cdn.beatsaver.com/980cf4979240c9d2b1107a24d6143dd9b85f8098.zip",coverURL:"https://cdn.beatsaver.com/980cf4979240c9d2b1107a24d6143dd9b85f8098.jpg",previewURL:"https://cdn.beatsaver.com/980cf4979240c9d2b1107a24d6143dd9b85f8098.mp3"}],createdAt:"2020-07-03T04:53:48.515Z",updatedAt:"2020-07-03T04:53:48.515Z",lastPublishedAt:"2020-07-03T04:53:48.515Z"},{id:"d565",name:"[FUTURE FUNK PACK] Idolstep Dreaming - Mikazuki BIGWAVE",description:'FUTURE FUNK MAP PACK\n2 songs uploaded everyday through August 10th - 14th!\n\n"Idolstep 夢見" by ミカヅキBIGWAVE was sampled from Hidemi Ishikawa\'s "めざめ" (Mezame). \n\nPlease look forward to the upcoming maps!\n\nDM any feedback on Discord\nETAN#8341',uploader:{id:4235140,name:"etan",uniqueSet:!0,hash:"5cff0b7798cc5a672c855775",avatar:"https://cdn.beatsaver.com/avatar/136373107559497728.png",type:"DISCORD"},metadata:{bpm:105,duration:178,songName:"Idolstep Dreaming",songSubName:"",songAuthorName:"Mikazuki BIGWAVE",levelAuthorName:"ETAN"},stats:{plays:0,downloads:3733,upvotes:816,downvotes:13,score:.9203},uploaded:"2020-08-13T18:37:52.866Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"44bd3be82800591c926b63f16b02f34c85730130",key:"d565",state:"Published",createdAt:"2020-08-13T18:37:52.866Z",sageScore:6,diffs:[{njs:10,offset:1,notes:192,bombs:21,obstacles:37,nps:1.135,length:296,characteristic:"Standard",difficulty:"Easy",events:7255,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:169.143,paritySummary:{errors:4,warns:2,resets:2}},{njs:12,offset:.5,notes:224,bombs:21,obstacles:37,nps:1.324,length:296,characteristic:"Standard",difficulty:"Normal",events:7255,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:169.143,paritySummary:{errors:1,warns:0,resets:3}},{njs:12,offset:0,notes:361,bombs:19,obstacles:38,nps:2.134,length:296,characteristic:"Standard",difficulty:"Hard",events:7255,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:169.143,paritySummary:{errors:0,warns:0,resets:1}},{njs:14,offset:-.2,notes:570,bombs:19,obstacles:38,nps:3.347,length:298,characteristic:"Standard",difficulty:"Expert",events:7255,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:170.286,paritySummary:{errors:0,warns:0,resets:1}},{njs:16,offset:.5,notes:695,bombs:17,obstacles:34,nps:4.081,length:298,characteristic:"Standard",difficulty:"ExpertPlus",events:7255,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:170.286,paritySummary:{errors:0,warns:0,resets:0}}],downloadURL:"https://cdn.beatsaver.com/44bd3be82800591c926b63f16b02f34c85730130.zip",coverURL:"https://cdn.beatsaver.com/44bd3be82800591c926b63f16b02f34c85730130.jpg",previewURL:"https://cdn.beatsaver.com/44bd3be82800591c926b63f16b02f34c85730130.mp3"}],createdAt:"2020-08-13T18:37:52.866Z",updatedAt:"2020-08-13T18:37:52.866Z",lastPublishedAt:"2020-08-13T18:37:52.866Z"},{id:"7b9a",name:"League of Legends - RISE (ft. The Glitch Mob, Mako, and The Word Alive)",description:"Prove yourself and RISE! Normal to Expert, custom lighting.\n\nExpert - 719 notes | 15 NJS | 0 bombs | 6 walls\nHard - 575 notes | 12 NJS | 0 bombs | 6 walls\nNormal - 411 notes | 10 NJS | 0 bombs | 6 walls",uploader:{id:30,name:"cookiesaber",uniqueSet:!0,hash:"5d1356c9f8b4040007dcb9fd",avatar:"https://www.gravatar.com/avatar/5d1356c9f8b4040007dcb9fd?d=retro",type:"SIMPLE"},metadata:{bpm:177,duration:194,songName:"RISE (ft. The Glitch Mob, Mako, and The Word Alive)",songSubName:"",songAuthorName:"League Of Legends",levelAuthorName:"cookie"},stats:{plays:0,downloads:4858,upvotes:1257,downvotes:32,score:.9202},uploaded:"2020-01-01T19:07:55.492Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"0c296f8b51f4d7669987117f7b3fa68a1fd7d6b1",key:"7b9a",state:"Published",createdAt:"2020-01-01T19:07:55.492Z",sageScore:3,diffs:[{njs:10,offset:0,notes:411,bombs:0,obstacles:9,nps:2.323,length:522,characteristic:"Standard",difficulty:"Normal",events:874,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:176.949,paritySummary:{errors:14,warns:7,resets:0}},{njs:12,offset:0,notes:575,bombs:0,obstacles:6,nps:3.225,length:526,characteristic:"Standard",difficulty:"Hard",events:874,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:178.305,paritySummary:{errors:6,warns:6,resets:0}},{njs:15,offset:1,notes:719,bombs:0,obstacles:6,nps:4.032,length:526,characteristic:"Standard",difficulty:"Expert",events:875,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:178.305,paritySummary:{errors:19,warns:23,resets:0}}],downloadURL:"https://cdn.beatsaver.com/0c296f8b51f4d7669987117f7b3fa68a1fd7d6b1.zip",coverURL:"https://cdn.beatsaver.com/0c296f8b51f4d7669987117f7b3fa68a1fd7d6b1.jpg",previewURL:"https://cdn.beatsaver.com/0c296f8b51f4d7669987117f7b3fa68a1fd7d6b1.mp3"}],createdAt:"2020-01-01T19:07:55.492Z",updatedAt:"2020-01-01T19:07:55.492Z",lastPublishedAt:"2020-01-01T19:07:55.492Z"},{id:"65e6",name:"Kamado Tanjiro no Uta - Kimetsu no Yaiba EP 19 ED",description:"Video https://youtu.be/szYb7faqnkQ\nVideo by Monteblanco: https://www.youtube.com/watch?v=aI7nCWuC-dc\nVideo by Rigid (PogU): https://youtu.be/pnETOIkHv-o",uploader:{id:14262,name:"suzuki.dll",uniqueSet:!0,hash:"5d664fb90a981e00064ede12",avatar:"https://cdn.beatsaver.com/avatar/14262.jpg",type:"SIMPLE"},metadata:{bpm:152,duration:329,songName:"Kamado Tanjiro no Uta",songSubName:"ft. Nami Nakagawa",songAuthorName:"Go Shiina",levelAuthorName:"Suzuki.DLL"},stats:{plays:0,downloads:2575,upvotes:1259,downvotes:32,score:.9202},uploaded:"2019-09-26T02:31:39.964Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"746847c0026657a7235d845b7d014335c47972da",key:"65e6",state:"Published",createdAt:"2019-09-26T02:31:39.964Z",sageScore:5,diffs:[{njs:12,offset:.5,notes:561,bombs:0,obstacles:173,nps:1.752,length:811,characteristic:"Standard",difficulty:"Hard",events:806,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:320.132,paritySummary:{errors:45,warns:34,resets:0}}],downloadURL:"https://cdn.beatsaver.com/746847c0026657a7235d845b7d014335c47972da.zip",coverURL:"https://cdn.beatsaver.com/746847c0026657a7235d845b7d014335c47972da.jpg",previewURL:"https://cdn.beatsaver.com/746847c0026657a7235d845b7d014335c47972da.mp3"}],createdAt:"2019-09-26T02:31:39.964Z",updatedAt:"2019-09-26T02:31:39.964Z",lastPublishedAt:"2019-09-26T02:31:39.964Z"},{id:"56b3",name:"Caravan Palace - Wonderland",description:"Easy, Normal, Hard, Expert, Expert+",uploader:{id:4235138,name:"CyanSnow",uniqueSet:!0,hash:"5cff0b7698cc5a672c8543ac",avatar:"https://cdn.beatsaver.com/avatar/154341137694326784.png",type:"DISCORD"},metadata:{bpm:104,duration:175,songName:"Wonderland",songSubName:"",songAuthorName:"Caravan Palace",levelAuthorName:"CyanSnow"},stats:{plays:0,downloads:4852,upvotes:2516,downvotes:95,score:.9202},uploaded:"2019-07-13T05:01:13.826Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"5bdd8ddebcce1e19bcd10ca8921b0d1ab7624506",key:"56b3",state:"Published",createdAt:"2019-07-13T05:01:13.826Z",sageScore:7,diffs:[{njs:12,offset:1,notes:182,bombs:0,obstacles:0,nps:1.088,length:290,characteristic:"Standard",difficulty:"Easy",events:219,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:167.308,paritySummary:{errors:56,warns:7,resets:0}},{njs:12,offset:1,notes:255,bombs:0,obstacles:0,nps:1.524,length:290,characteristic:"Standard",difficulty:"Normal",events:292,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:167.308,paritySummary:{errors:29,warns:17,resets:0}},{njs:14,offset:0,notes:450,bombs:0,obstacles:0,nps:2.685,length:290.5,characteristic:"Standard",difficulty:"Hard",events:499,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:167.596,paritySummary:{errors:5,warns:4,resets:0}},{njs:15,offset:0,notes:487,bombs:0,obstacles:0,nps:2.906,length:290.5,characteristic:"Standard",difficulty:"Expert",events:525,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:167.596,paritySummary:{errors:4,warns:4,resets:0}},{njs:17,offset:.5,notes:713,bombs:5,obstacles:0,nps:4.243,length:291.25,characteristic:"Standard",difficulty:"ExpertPlus",events:797,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:168.029,paritySummary:{errors:8,warns:5,resets:0}}],downloadURL:"https://cdn.beatsaver.com/5bdd8ddebcce1e19bcd10ca8921b0d1ab7624506.zip",coverURL:"https://cdn.beatsaver.com/5bdd8ddebcce1e19bcd10ca8921b0d1ab7624506.jpg",previewURL:"https://cdn.beatsaver.com/5bdd8ddebcce1e19bcd10ca8921b0d1ab7624506.mp3"}],createdAt:"2019-07-13T05:01:13.826Z",updatedAt:"2019-07-13T05:01:13.826Z",lastPublishedAt:"2019-07-13T05:01:13.826Z"},{id:"4131",name:"Nevada feat. Cozi Zuehlsdorff - Vicetone",description:"YouTube Preview: https://youtu.be/3gb2gH8eueI",uploader:{id:30311,name:"bennydabeast",uniqueSet:!0,hash:"5cff0b7298cc5a672c84e98d",avatar:"https://cdn.beatsaver.com/avatar/30311.jpg",type:"SIMPLE"},metadata:{bpm:124,duration:209,songName:"Nevada (feat. Cozi Zuehlsdorff)",songSubName:"Vicetone",songAuthorName:"BennyDaBeast",levelAuthorName:"bennydabeast"},stats:{plays:0,downloads:2091,upvotes:1257,downvotes:32,score:.9202},uploaded:"2019-03-27T18:42:01Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"5e847d92de6e01dfd5ce3491969b3939b4374699",key:"4131",state:"Published",createdAt:"2019-03-27T18:42:01Z",sageScore:6,diffs:[{njs:10,offset:0,notes:387,bombs:0,obstacles:54,nps:1.932,length:414,characteristic:"Standard",difficulty:"Hard",events:1208,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:200.323,paritySummary:{errors:70,warns:23,resets:0}},{njs:12,offset:0,notes:616,bombs:0,obstacles:54,nps:3.075,length:414,characteristic:"Standard",difficulty:"Expert",events:1208,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:200.323,paritySummary:{errors:84,warns:55,resets:0}},{njs:14,offset:0,notes:868,bombs:0,obstacles:57,nps:4.333,length:414,characteristic:"Standard",difficulty:"ExpertPlus",events:1208,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:200.323,paritySummary:{errors:74,warns:61,resets:0}}],downloadURL:"https://cdn.beatsaver.com/5e847d92de6e01dfd5ce3491969b3939b4374699.zip",coverURL:"https://cdn.beatsaver.com/5e847d92de6e01dfd5ce3491969b3939b4374699.jpg",previewURL:"https://cdn.beatsaver.com/5e847d92de6e01dfd5ce3491969b3939b4374699.mp3"}],createdAt:"2019-03-27T18:42:01Z",updatedAt:"2019-03-27T18:42:01Z",lastPublishedAt:"2019-03-27T18:42:01Z"},{id:"8b21",name:"Invaders Must Die - Prodigy",description:"It's time to get ready for some pumping beats and dancy moves with a beat map for a Prodigy song. With the full spread of skill levels, get ready to move and in the swing of the rhythm of this great track.\n\nThanks to Kival Evan and Sorukun for testing.",uploader:{id:32141,name:"amstradhero",uniqueSet:!0,hash:"5cff0b7698cc5a672c8551be",avatar:"https://www.gravatar.com/avatar/5cff0b7698cc5a672c8551be?d=retro",type:"SIMPLE"},metadata:{bpm:140,duration:266,songName:"Invaders Must Die",songSubName:"",songAuthorName:"Prodigy",levelAuthorName:"AmstradHero"},stats:{plays:0,downloads:3044,upvotes:1276,downvotes:33,score:.9201},uploaded:"2020-02-27T09:40:25.643Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"eaa2d06cfed4d6cd5b9e0b89d5860c88c7ca8be5",key:"8b21",state:"Published",createdAt:"2020-02-27T09:40:25.643Z",sageScore:7,diffs:[{njs:10,offset:0,notes:326,bombs:16,obstacles:28,nps:1.248,length:609.5,characteristic:"Standard",difficulty:"Easy",events:8086,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:261.214,paritySummary:{errors:17,warns:18,resets:7}},{njs:12,offset:1.35,notes:468,bombs:16,obstacles:31,nps:1.792,length:609.5,characteristic:"Standard",difficulty:"Normal",events:8084,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:261.214,paritySummary:{errors:26,warns:20,resets:8}},{njs:13,offset:1.125,notes:660,bombs:12,obstacles:31,nps:2.527,length:609.5,characteristic:"Standard",difficulty:"Hard",events:8084,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:261.214,paritySummary:{errors:36,warns:45,resets:5}},{njs:14,offset:1,notes:1102,bombs:8,obstacles:15,nps:4.219,length:609.5,characteristic:"Standard",difficulty:"Expert",events:8084,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:261.214,paritySummary:{errors:44,warns:69,resets:4}},{njs:16,offset:.5,notes:1141,bombs:4,obstacles:15,nps:4.368,length:609.5,characteristic:"Standard",difficulty:"ExpertPlus",events:8084,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:261.214,paritySummary:{errors:35,warns:57,resets:2}}],downloadURL:"https://cdn.beatsaver.com/eaa2d06cfed4d6cd5b9e0b89d5860c88c7ca8be5.zip",coverURL:"https://cdn.beatsaver.com/eaa2d06cfed4d6cd5b9e0b89d5860c88c7ca8be5.jpg",previewURL:"https://cdn.beatsaver.com/eaa2d06cfed4d6cd5b9e0b89d5860c88c7ca8be5.mp3"}],createdAt:"2020-02-27T09:40:25.643Z",updatedAt:"2020-02-27T09:40:25.643Z",lastPublishedAt:"2020-02-27T09:40:25.643Z"},{id:"57f1",name:"Impossible Geometry - The Stupendium ft. Chi-chi",description:"Watch the video here: https://www.youtube.com/watch?v=PnKxhbRqqx0",uploader:{id:58338,name:"Joetastic",uniqueSet:!0,hash:"5cff0b7498cc5a672c85050e",avatar:"https://cdn.beatsaver.com/avatar/227767566402191360.png",type:"DISCORD"},metadata:{bpm:150,duration:211,songName:"Impossible Geometry",songSubName:"",songAuthorName:"The Stupendium ft. Chi-chi",levelAuthorName:"Joetastic"},stats:{plays:0,downloads:1475,upvotes:1166,downvotes:28,score:.9201},uploaded:"2019-07-19T18:24:56.241Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"84b16b7e9fe6e3b8f356be4f2dc0edc0a4178228",key:"57f1",state:"Published",createdAt:"2019-07-19T18:24:56.241Z",sageScore:5,diffs:[{njs:14,offset:0,notes:628,bombs:12,obstacles:42,nps:3.244,length:484,characteristic:"Standard",difficulty:"Expert",events:5545,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:193.6,paritySummary:{errors:53,warns:61,resets:0}}],downloadURL:"https://cdn.beatsaver.com/84b16b7e9fe6e3b8f356be4f2dc0edc0a4178228.zip",coverURL:"https://cdn.beatsaver.com/84b16b7e9fe6e3b8f356be4f2dc0edc0a4178228.jpg",previewURL:"https://cdn.beatsaver.com/84b16b7e9fe6e3b8f356be4f2dc0edc0a4178228.mp3"}],createdAt:"2019-07-19T18:24:56.241Z",updatedAt:"2019-07-19T18:24:56.241Z",lastPublishedAt:"2019-07-19T18:24:56.241Z"},{id:"53f0",name:"Panini - Lil Nas X",description:"“Panini” is the second single from Lil Nas X’s debut EP, 7, following his hit song, “Old Town Road. In this song, Lil Nas talks about his old fanbase and compares them to Panini, a character from the popular TV Series Chowder.",uploader:{id:58338,name:"Joetastic",uniqueSet:!0,hash:"5cff0b7498cc5a672c85050e",avatar:"https://cdn.beatsaver.com/avatar/227767566402191360.png",type:"DISCORD"},metadata:{bpm:77,duration:116,songName:"Panini",songSubName:"",songAuthorName:"Lil Nas X",levelAuthorName:"Joetastic"},stats:{plays:0,downloads:3360,upvotes:1212,downvotes:30,score:.9201},uploaded:"2019-06-22T05:07:06.657Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"6bb8e702d51055767fbc89df9ec81517e1d0e74c",key:"53f0",state:"Published",createdAt:"2019-06-22T05:07:06.657Z",sageScore:6,diffs:[{njs:14,offset:0,notes:388,bombs:0,obstacles:0,nps:3.482,length:143,characteristic:"Standard",difficulty:"Expert",events:1247,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:111.429,paritySummary:{errors:17,warns:21,resets:0}}],downloadURL:"https://cdn.beatsaver.com/6bb8e702d51055767fbc89df9ec81517e1d0e74c.zip",coverURL:"https://cdn.beatsaver.com/6bb8e702d51055767fbc89df9ec81517e1d0e74c.jpg",previewURL:"https://cdn.beatsaver.com/6bb8e702d51055767fbc89df9ec81517e1d0e74c.mp3"}],createdAt:"2019-06-22T05:07:06.657Z",updatedAt:"2019-06-22T05:07:06.657Z",lastPublishedAt:"2019-06-22T05:07:06.657Z"},{id:"1060",name:"X Gon' Give It To Ya Maybe",description:"Preview: \r\nhttps://www.youtube.com/watch?v=Q71NI5ohXhI\r\n\r\nOriginal mashup: https://www.youtube.com/watch?v=Fegs-XVKgnM",uploader:{id:4286278,name:"ruckus",uniqueSet:!0,hash:"5cff0b7398cc5a672c84f1d8",avatar:"https://cdn.beatsaver.com/avatar/239082462083284992.png",type:"DISCORD"},metadata:{bpm:120,duration:205,songName:"X Gon' Give It To Ya Maybe",songSubName:"oneboredjeu, Carly Rae Jepsen, DMX",songAuthorName:"Ruckus",levelAuthorName:"ruckus"},stats:{plays:0,downloads:4370,upvotes:2151,downvotes:76,score:.9201},uploaded:"2018-08-18T01:59:54Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"b86e27ad9149c123b3a4f90b2bce62f656083b01",key:"1060",state:"Published",createdAt:"2018-08-18T01:59:54Z",sageScore:4,diffs:[{njs:14,offset:0,notes:815,bombs:0,obstacles:0,nps:4.163,length:391.5,characteristic:"Standard",difficulty:"Expert",events:1511,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:195.75,paritySummary:{errors:91,warns:118,resets:0}}],downloadURL:"https://cdn.beatsaver.com/b86e27ad9149c123b3a4f90b2bce62f656083b01.zip",coverURL:"https://cdn.beatsaver.com/b86e27ad9149c123b3a4f90b2bce62f656083b01.jpg",previewURL:"https://cdn.beatsaver.com/b86e27ad9149c123b3a4f90b2bce62f656083b01.mp3"}],createdAt:"2018-08-18T01:59:54Z",updatedAt:"2018-08-18T01:59:54Z",lastPublishedAt:"2018-08-18T01:59:54Z"},{id:"5fc",name:"Waiting For Love - Avicii",description:"Avicii Waiting for love\r\nEasy, Normal, Hard, Expert\r\nRun Time : 3m 50s\r\nBPM 128.15\r\n\r\nFeedback would be greatly appreciated :)",uploader:{id:47059,name:"rocket",uniqueSet:!0,hash:"5cff0b7398cc5a672c84f1c0",avatar:"https://www.gravatar.com/avatar/5cff0b7398cc5a672c84f1c0?d=retro",type:"SIMPLE"},metadata:{bpm:128,duration:230,songName:"Waiting For Love",songSubName:"Avicii",songAuthorName:"Rocket",levelAuthorName:"rocket"},stats:{plays:0,downloads:12913,upvotes:5636,downvotes:276,score:.9201},uploaded:"2018-06-20T23:44:52Z",automapper:!1,ranked:!0,qualified:!1,versions:[{hash:"4b7cdfcf558f66acc4b7a506c2dd50fbd9a76354",key:"5fc",state:"Published",createdAt:"2018-06-20T23:44:52Z",sageScore:6,diffs:[{njs:10,offset:0,notes:266,bombs:8,obstacles:8,nps:1.184,length:480,characteristic:"Standard",difficulty:"Easy",events:1179,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:225,paritySummary:{errors:62,warns:23,resets:0},stars:1.1},{njs:10,offset:0,notes:485,bombs:6,obstacles:8,nps:2.158,length:480,characteristic:"Standard",difficulty:"Normal",events:1181,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:225,paritySummary:{errors:121,warns:51,resets:0},stars:1.54},{njs:10,offset:0,notes:742,bombs:14,obstacles:8,nps:3.302,length:479.966,characteristic:"Standard",difficulty:"Hard",events:1177,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:224.984,paritySummary:{errors:130,warns:53,resets:0}},{njs:10,offset:0,notes:875,bombs:11,obstacles:8,nps:3.893,length:480,characteristic:"Standard",difficulty:"Expert",events:1190,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:225,paritySummary:{errors:125,warns:100,resets:0}}],downloadURL:"https://cdn.beatsaver.com/4b7cdfcf558f66acc4b7a506c2dd50fbd9a76354.zip",coverURL:"https://cdn.beatsaver.com/4b7cdfcf558f66acc4b7a506c2dd50fbd9a76354.jpg",previewURL:"https://cdn.beatsaver.com/4b7cdfcf558f66acc4b7a506c2dd50fbd9a76354.mp3"}],createdAt:"2018-06-20T23:44:52Z",updatedAt:"2018-06-20T23:44:52Z",lastPublishedAt:"2018-06-20T23:44:52Z"},{id:"a233",name:"[NoodleJams Vol.1] 5 Seconds of Summer - Teeth",description:"Coming down with the isolation blues? Why not check out my new release! This one includes my first time playing around with Chroma lighting, so make sure you download Chroma 2.0 from Mod Assistant! The lights were inspired by the music video for this track, including re-creating some of the effects shown in the video. A Lightshow is included if you'd like to just check them out separately.\n\nThanks to qwasyx, Dat360NoScope, Sorukun, helencarnate, Shutforever, Pyrowarfare, and ethan_mp4 for playtesting.\n\nAnd a special thanks to AaltopahWi for advice on using Chroma, Aeroluna for Chroma 2.0, and CyanSnow for Chroma conversion help!\n\nAnd now some song details:\nBPM: 139\nNotes: Ez - 401 ; N - 514 ; H - 630 ; Ex - 868 ; Ex+ - 946\nNPS: Ez - 1.93 ; N - 2.48 ; H - 3.04 ; Ex - 4.18 ; Ex+ - 4.56\nBombs: None!\nWalls: Ez - 55 ; N - 44 ; H - 34 ; Ex - 22 ; Ex+ - 28",uploader:{id:4285188,name:"fruhead",uniqueSet:!0,hash:"5cff0b7598cc5a672c852683",avatar:"https://cdn.beatsaver.com/avatar/174000100413145090.png",type:"DISCORD"},metadata:{bpm:139,duration:207,songName:"Teeth",songSubName:"",songAuthorName:"5 Seconds of Summer",levelAuthorName:"fruhead"},stats:{plays:0,downloads:4256,upvotes:884,downvotes:16,score:.92},uploaded:"2020-05-04T04:13:11.364Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"0986c659b17b62f13098ff3598d781942eac9092",key:"a233",state:"Published",createdAt:"2020-05-04T04:13:11.364Z",sageScore:7,diffs:[{njs:10,offset:-.5,notes:401,bombs:0,obstacles:55,nps:2.002,length:464,characteristic:"Standard",difficulty:"Easy",events:8266,chroma:!0,me:!1,ne:!1,cinema:!1,seconds:200.288,paritySummary:{errors:49,warns:8,resets:0}},{njs:12,offset:.7,notes:514,bombs:0,obstacles:44,nps:2.566,length:464,characteristic:"Standard",difficulty:"Normal",events:8266,chroma:!0,me:!1,ne:!1,cinema:!1,seconds:200.288,paritySummary:{errors:8,warns:4,resets:0}},{njs:14,offset:.3,notes:630,bombs:0,obstacles:34,nps:3.145,length:464,characteristic:"Standard",difficulty:"Hard",events:8266,chroma:!0,me:!1,ne:!1,cinema:!1,seconds:200.288,paritySummary:{errors:5,warns:4,resets:0}},{njs:15,offset:.2,notes:868,bombs:0,obstacles:24,nps:4.334,length:464,characteristic:"Standard",difficulty:"Expert",events:8266,chroma:!0,me:!1,ne:!1,cinema:!1,seconds:200.288,paritySummary:{errors:4,warns:2,resets:0}},{njs:17,offset:0,notes:946,bombs:0,obstacles:28,nps:4.723,length:464.063,characteristic:"Standard",difficulty:"ExpertPlus",events:8266,chroma:!0,me:!1,ne:!1,cinema:!1,seconds:200.315,paritySummary:{errors:4,warns:2,resets:0}},{njs:12,offset:0,notes:0,bombs:0,obstacles:0,nps:0,length:0,characteristic:"Lightshow",difficulty:"Easy",events:8266,chroma:!0,me:!1,ne:!1,cinema:!1,seconds:0,paritySummary:{errors:0,warns:0,resets:0}}],downloadURL:"https://cdn.beatsaver.com/0986c659b17b62f13098ff3598d781942eac9092.zip",coverURL:"https://cdn.beatsaver.com/0986c659b17b62f13098ff3598d781942eac9092.jpg",previewURL:"https://cdn.beatsaver.com/0986c659b17b62f13098ff3598d781942eac9092.mp3"}],createdAt:"2020-05-04T04:13:11.364Z",updatedAt:"2020-05-04T04:13:11.364Z",lastPublishedAt:"2020-05-04T04:13:11.364Z"},{id:"cb19",name:"[Extra Sensory] Mick Gordon - At DOOM's Gate",description:'Rip and tear\n\n\nExtra super huge thank you to the following people for making this possible\nAeroluna- For making Noodle Extensions and updating Chroma\nReaxt- For helping with making the scripts used to create this map and for inspiring us to continue through with this project.\nArti- For making the core mod that allowed Noodle Extensions and Chroma to support the new values\n\nAnd thank you for putting up with my shit during this (again) :)\n\nThis map was released as a part of the "Extra Sensory" event.\n\nVideo: https://www.youtube.com/watch?v=21JWpIWhqjg',uploader:{id:4235138,name:"CyanSnow",uniqueSet:!0,hash:"5cff0b7698cc5a672c8543ac",avatar:"https://cdn.beatsaver.com/avatar/154341137694326784.png",type:"DISCORD"},metadata:{bpm:161,duration:72,songName:"At DOOM's Gate",songSubName:"",songAuthorName:"Mick Gordon",levelAuthorName:"CyanSnow"},stats:{plays:0,downloads:7731,upvotes:2500,downvotes:95,score:.9199},uploaded:"2020-07-31T01:44:50.965Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"b0ea07691e483e7f5b2d9a2daf6774b512a68855",key:"cb19",state:"Published",createdAt:"2020-07-31T01:44:50.965Z",sageScore:3,diffs:[{njs:19,offset:0,notes:342,bombs:0,obstacles:4190,nps:5.305,length:173,characteristic:"Standard",difficulty:"ExpertPlus",events:261,chroma:!0,me:!1,ne:!0,cinema:!1,seconds:64.472,paritySummary:{errors:0,warns:0,resets:0}}],downloadURL:"https://cdn.beatsaver.com/b0ea07691e483e7f5b2d9a2daf6774b512a68855.zip",coverURL:"https://cdn.beatsaver.com/b0ea07691e483e7f5b2d9a2daf6774b512a68855.jpg",previewURL:"https://cdn.beatsaver.com/b0ea07691e483e7f5b2d9a2daf6774b512a68855.mp3"}],createdAt:"2020-07-31T01:44:50.965Z",updatedAt:"2020-07-31T01:44:50.965Z",lastPublishedAt:"2020-07-31T01:44:50.965Z"},{id:"570d",name:"Duel of the Fates (Techno Remix) - Star Wars",description:'|-o-| *Mapping Extensions Required* |-o-|\n"Fear is the path to the dark side. Fear leads to anger. Anger leads to hate. Hate leads to suffering."\nA Collab Between myself and EpicEwok. Audio Edit by Kolezan <3\nNotes Per Second:\nEasy / 1.2\nNormal / 1.5\nHard / 2.6\nExpert / 3.3\nExpert+ / 4.7\nSingle Saber (Expert) / 3.0\nFor Quest Users, we have a version without the walls for you here: https://beatsaver.com/beatmap/570c\nExpert+ Playthrough: https://streamable.com/3sftt\n',uploader:{id:11373,name:"redmagi",uniqueSet:!0,hash:"5cff0b7298cc5a672c84e9d2",avatar:"https://www.gravatar.com/avatar/5cff0b7298cc5a672c84e9d2?d=retro",type:"SIMPLE"},metadata:{bpm:140,duration:252,songName:"Duel of the Fates ",songSubName:"",songAuthorName:"Techno Remix",levelAuthorName:"Sha3dy D3stiny"},stats:{plays:0,downloads:9452,upvotes:2313,downvotes:85,score:.9199},uploaded:"2019-07-14T20:18:06.134Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"65c578117df8bae1c83c98b43e4218b23a8de3f3",key:"570d",state:"Published",createdAt:"2019-07-14T20:18:06.134Z",sageScore:7,diffs:[{njs:12,offset:0,notes:307,bombs:0,obstacles:190,nps:1.282,length:558.755,characteristic:"Standard",difficulty:"Easy",events:6138,chroma:!1,me:!0,ne:!1,cinema:!1,seconds:239.466,paritySummary:{errors:32,warns:6,resets:0}},{njs:12,offset:0,notes:376,bombs:0,obstacles:190,nps:1.571,length:558.63,characteristic:"Standard",difficulty:"Normal",events:1272,chroma:!1,me:!0,ne:!1,cinema:!1,seconds:239.413,paritySummary:{errors:14,warns:10,resets:0}},{njs:14,offset:0,notes:669,bombs:0,obstacles:190,nps:2.794,length:558.797,characteristic:"Standard",difficulty:"Hard",events:1272,chroma:!1,me:!0,ne:!1,cinema:!1,seconds:239.484,paritySummary:{errors:15,warns:21,resets:0}},{njs:15,offset:0,notes:832,bombs:0,obstacles:190,nps:3.474,length:558.792,characteristic:"Standard",difficulty:"Expert",events:6138,chroma:!1,me:!0,ne:!1,cinema:!1,seconds:239.482,paritySummary:{errors:33,warns:39,resets:0}},{njs:16,offset:0,notes:1191,bombs:0,obstacles:190,nps:4.97,length:559.125,characteristic:"Standard",difficulty:"ExpertPlus",events:6138,chroma:!1,me:!0,ne:!1,cinema:!1,seconds:239.625,paritySummary:{errors:49,warns:67,resets:0}},{njs:15,offset:0,notes:750,bombs:0,obstacles:190,nps:3.131,length:558.917,characteristic:"OneSaber",difficulty:"Expert",events:6138,chroma:!1,me:!0,ne:!1,cinema:!1,seconds:239.536,paritySummary:{errors:48,warns:70,resets:0}}],downloadURL:"https://cdn.beatsaver.com/65c578117df8bae1c83c98b43e4218b23a8de3f3.zip",coverURL:"https://cdn.beatsaver.com/65c578117df8bae1c83c98b43e4218b23a8de3f3.jpg",previewURL:"https://cdn.beatsaver.com/65c578117df8bae1c83c98b43e4218b23a8de3f3.mp3"}],createdAt:"2019-07-14T20:18:06.134Z",updatedAt:"2019-07-14T20:18:06.134Z",lastPublishedAt:"2019-07-14T20:18:06.134Z"},{id:"4fe8",name:"Red Like Roses [One Saber] (RWBY: Volume 1 Soundtrack) - Jeff Williams ft. Casey Lee Williams",description:"Red like roses in one saber! Finally y'all can play this with a custom crescent rose saber and not look weird holding two! Further improved the sync on this from the original v2 of red like roses. Not all beats were mapped because its hard to hit consistent non stop 1/4s with only one saber but the ending section is still pretty tiring so prepare your arm :P. Map comes in two shades of Crescent Red.",uploader:{id:58338,name:"Joetastic",uniqueSet:!0,hash:"5cff0b7498cc5a672c85050e",avatar:"https://cdn.beatsaver.com/avatar/227767566402191360.png",type:"DISCORD"},metadata:{bpm:200,duration:194,songName:"Red Like Roses (One Saber)",songSubName:"Jeff Williams ft. Casey Lee Williams",songAuthorName:"Joetastic",levelAuthorName:"Joetastic"},stats:{plays:0,downloads:3763,upvotes:648,downvotes:7,score:.9199},uploaded:"2019-05-30T13:34:51Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"0fdfb6fb8788f52b78c981c85cf9f316e4b6f232",key:"4fe8",state:"Published",createdAt:"2019-05-30T13:34:51Z",sageScore:5,diffs:[{njs:14,offset:0,notes:463,bombs:2,obstacles:22,nps:2.47,length:627.987,characteristic:"OneSaber",difficulty:"Expert",events:641,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:188.396,paritySummary:{errors:18,warns:18,resets:1}}],downloadURL:"https://cdn.beatsaver.com/0fdfb6fb8788f52b78c981c85cf9f316e4b6f232.zip",coverURL:"https://cdn.beatsaver.com/0fdfb6fb8788f52b78c981c85cf9f316e4b6f232.jpg",previewURL:"https://cdn.beatsaver.com/0fdfb6fb8788f52b78c981c85cf9f316e4b6f232.mp3"}],createdAt:"2019-05-30T13:34:51Z",updatedAt:"2019-05-30T13:34:51Z",lastPublishedAt:"2019-05-30T13:34:51Z"},{id:"1bf",name:"Caravan Palace - Lone Digger",description:"Caravan Palace - Lone Digger\r\nEasy | Normal | Hard | Expert\r\nThis is a re-upload of my previous map, with improvements for hard, and a new, harder expert difficulty mapped by Squeaksies, as well as lower difficulties as iterations on my original map.\r\n\r\nBPM: 124\r\nDuration: 2:49\r\nNotes (Hard): 730\r\nNotes (Expert): 735\r\nPreview (Hard): https://youtu.be/NExvLUyeBUU\r\nPreview (Expert): https://youtu.be/NYmExXlpB0k",uploader:{id:45732,name:"calijor",uniqueSet:!1,hash:"5cff0b7298cc5a672c84ebb1",avatar:"https://www.gravatar.com/avatar/5cff0b7298cc5a672c84ebb1?d=retro",type:"SIMPLE"},metadata:{bpm:124,duration:170,songName:"Lone Digger",songSubName:"",songAuthorName:"Caravan Palace",levelAuthorName:"calijor"},stats:{plays:0,downloads:13174,upvotes:16427,downvotes:987,score:.9199},uploaded:"2018-05-23T00:15:19Z",automapper:!1,ranked:!0,qualified:!1,versions:[{hash:"906160fd1f808e2f34f33c2ca5920118855c065d",key:"1bf",state:"Published",createdAt:"2018-05-23T00:15:19Z",sageScore:5,diffs:[{njs:10,offset:0,notes:313,bombs:0,obstacles:27,nps:1.931,length:334.938,characteristic:"Standard",difficulty:"Easy",events:1208,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:162.067,paritySummary:{errors:80,warns:32,resets:0},stars:1.2},{njs:10,offset:0,notes:480,bombs:0,obstacles:27,nps:2.953,length:335.938,characteristic:"Standard",difficulty:"Normal",events:1208,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:162.55,paritySummary:{errors:56,warns:112,resets:0}},{njs:10,offset:0,notes:730,bombs:0,obstacles:27,nps:4.491,length:335.938,characteristic:"Standard",difficulty:"Hard",events:1208,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:162.55,paritySummary:{errors:157,warns:122,resets:0}},{njs:10,offset:0,notes:735,bombs:11,obstacles:2,nps:4.555,length:333.5,characteristic:"Standard",difficulty:"Expert",events:1198,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:161.371,paritySummary:{errors:163,warns:131,resets:5}}],downloadURL:"https://cdn.beatsaver.com/906160fd1f808e2f34f33c2ca5920118855c065d.zip",coverURL:"https://cdn.beatsaver.com/906160fd1f808e2f34f33c2ca5920118855c065d.jpg",previewURL:"https://cdn.beatsaver.com/906160fd1f808e2f34f33c2ca5920118855c065d.mp3"}],createdAt:"2018-05-23T00:15:19Z",updatedAt:"2018-05-23T00:15:19Z",lastPublishedAt:"2018-05-23T00:15:19Z"},{id:"17195",name:"Ayunda Risu - KING",description:"There's a lotta covers of KING, but Risu's definitely takes the cake\n\nThis was a special request from a good friend of mine\n\nDifficulties |\nExpert+\nExpert\nHard\nNormal\nEasy\n\nThank you for playing\n\nDM any feedback on Discord\nETAN#8341",uploader:{id:4235140,name:"etan",uniqueSet:!0,hash:"5cff0b7798cc5a672c855775",avatar:"https://cdn.beatsaver.com/avatar/136373107559497728.png",type:"DISCORD"},metadata:{bpm:166,duration:137,songName:"KING",songSubName:"",songAuthorName:"Ayunda Risu",levelAuthorName:"ETAN"},stats:{plays:0,downloads:3066,upvotes:829,downvotes:14,score:.9198},uploaded:"2021-04-24T01:55:50.843Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"0d191cd2dfe9404e4f58b5520bbc9b7b9cafa8c7",key:"17195",state:"Published",createdAt:"2021-04-24T01:55:50.843Z",sageScore:6,diffs:[{njs:10,offset:0,notes:158,bombs:0,obstacles:11,nps:1.228,length:356,characteristic:"Standard",difficulty:"Easy",events:5937,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:128.675,paritySummary:{errors:16,warns:2,resets:0}},{njs:12,offset:0,notes:206,bombs:0,obstacles:11,nps:1.601,length:356,characteristic:"Standard",difficulty:"Normal",events:5937,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:128.675,paritySummary:{errors:26,warns:0,resets:0}},{njs:13,offset:.75,notes:397,bombs:0,obstacles:11,nps:3.06,length:359,characteristic:"Standard",difficulty:"Hard",events:5937,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:129.759,paritySummary:{errors:0,warns:0,resets:0}},{njs:15,offset:.2,notes:528,bombs:0,obstacles:11,nps:3.98,length:367,characteristic:"Standard",difficulty:"Expert",events:5937,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:132.651,paritySummary:{errors:0,warns:0,resets:0}},{njs:17,offset:-.2,notes:716,bombs:0,obstacles:11,nps:5.398,length:367,characteristic:"Standard",difficulty:"ExpertPlus",events:5937,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:132.651,paritySummary:{errors:0,warns:3,resets:0}}],downloadURL:"https://cdn.beatsaver.com/0d191cd2dfe9404e4f58b5520bbc9b7b9cafa8c7.zip",coverURL:"https://cdn.beatsaver.com/0d191cd2dfe9404e4f58b5520bbc9b7b9cafa8c7.jpg",previewURL:"https://cdn.beatsaver.com/0d191cd2dfe9404e4f58b5520bbc9b7b9cafa8c7.mp3"}],createdAt:"2021-04-24T01:55:50.843Z",updatedAt:"2021-04-24T01:55:50.843Z",lastPublishedAt:"2021-04-24T01:55:50.843Z"},{id:"142ea",name:"K/DA - VILLAIN (ft. Madison Beer, Kim Petras)",description:"From the unofficial music pack (K/DA ALL OUT) on BSaber.com\nPack: https://bsaber.com/kda-all-out/\nTrailer: https://youtu.be/e1ry_H86zqg\nPreview (Expert+): https://youtu.be/hrNAqEg6XPo\nLightshow: https://youtu.be/ZIqbGM4GjPc\n__________\nCredits🤍\nMapper: Sotarks\nLighter: Sotarks\nCurators: Pixelguy, JohnnyDee & joey\nSpecial Thanks: eliotttate & Belaya\nTrailer: Tuffiii\n__________\nCheck out K/DA🤍\nhttps://twitter.com/kda_music\nhttps://linktr.ee/kda_music\nProduced by Riot Games",uploader:{id:2523,name:"sotarks",uniqueSet:!0,hash:"5cff0b7698cc5a672c8541fd",avatar:"https://www.gravatar.com/avatar/5cff0b7698cc5a672c8541fd?d=retro",type:"SIMPLE"},metadata:{bpm:160,duration:201,songName:"VILLAIN",songSubName:"",songAuthorName:"K/DA",levelAuthorName:"Sotarks"},stats:{plays:0,downloads:12713,upvotes:1439,downvotes:41,score:.9198},uploaded:"2021-02-17T18:04:42.442Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"d0c3395e0cce21f1e03ea9352543e4aaef74b902",key:"142ea",state:"Published",createdAt:"2021-02-17T18:04:42.442Z",sageScore:7,diffs:[{njs:12,offset:-1.4371349,notes:225,bombs:0,obstacles:179,nps:1.174,length:511,characteristic:"Standard",difficulty:"Easy",events:2930,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:191.625,paritySummary:{errors:39,warns:1,resets:0}},{njs:12,offset:-1.4361658,notes:303,bombs:0,obstacles:139,nps:1.581,length:511,characteristic:"Standard",difficulty:"Normal",events:2930,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:191.625,paritySummary:{errors:3,warns:0,resets:0}},{njs:14,offset:.19046581,notes:526,bombs:0,obstacles:170,nps:2.667,length:526,characteristic:"Standard",difficulty:"Hard",events:2930,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:197.25,paritySummary:{errors:5,warns:0,resets:0}},{njs:16,offset:-.0027478295,notes:738,bombs:4,obstacles:177,nps:3.741,length:526,characteristic:"Standard",difficulty:"Expert",events:2930,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:197.25,paritySummary:{errors:2,warns:0,resets:1}},{njs:18,offset:-.3,notes:900,bombs:156,obstacles:121,nps:4.563,length:526,characteristic:"Standard",difficulty:"ExpertPlus",events:2985,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:197.25,paritySummary:{errors:2,warns:11,resets:9}}],downloadURL:"https://cdn.beatsaver.com/d0c3395e0cce21f1e03ea9352543e4aaef74b902.zip",coverURL:"https://cdn.beatsaver.com/d0c3395e0cce21f1e03ea9352543e4aaef74b902.jpg",previewURL:"https://cdn.beatsaver.com/d0c3395e0cce21f1e03ea9352543e4aaef74b902.mp3"}],createdAt:"2021-02-17T18:04:42.442Z",updatedAt:"2021-02-17T18:04:42.442Z",lastPublishedAt:"2021-02-17T18:04:42.442Z"},{id:"850a",name:"Ellie Goulding - Lights",description:"Wanted to map this for a little while, really fun song that I know should make for a fun map (hopefully I was able to deliver that)\n\nThanks to Sorukun and Eku for feedback and testing\n\nEnjoy!",uploader:{id:4286161,name:"amuga",uniqueSet:!0,hash:"5e0a61e546a0710006590f49",avatar:"https://cdn.beatsaver.com/avatar/92425939555713024.png",type:"DISCORD"},metadata:{bpm:120,duration:213,songName:"Lights",songSubName:"",songAuthorName:"Ellie Goulding",levelAuthorName:"Amuga"},stats:{plays:0,downloads:2383,upvotes:752,downvotes:11,score:.9198},uploaded:"2020-02-08T00:21:39.641Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"3b3ef5f5438e7928fdb747004308e8a8d6a23dc8",key:"850a",state:"Published",createdAt:"2020-02-08T00:21:39.641Z",sageScore:4,diffs:[{njs:16,offset:-.25,notes:921,bombs:0,obstacles:13,nps:4.433,length:415.5,characteristic:"Standard",difficulty:"ExpertPlus",events:2299,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:207.75,paritySummary:{errors:1,warns:1,resets:0}}],downloadURL:"https://cdn.beatsaver.com/3b3ef5f5438e7928fdb747004308e8a8d6a23dc8.zip",coverURL:"https://cdn.beatsaver.com/3b3ef5f5438e7928fdb747004308e8a8d6a23dc8.jpg",previewURL:"https://cdn.beatsaver.com/3b3ef5f5438e7928fdb747004308e8a8d6a23dc8.mp3"}],createdAt:"2020-02-08T00:21:39.641Z",updatedAt:"2020-02-08T00:21:39.641Z",lastPublishedAt:"2020-02-08T00:21:39.641Z"},{id:"332f",name:"Spin Me Around (Spin Edition) - Dead or Alive",description:'*DISCLAIMER*\r\nThere are optional Dot "Freestyle" Sections in this one! Be careful when attempting spins!\r\n*YOU HAVE BEEN WARNED!*\r\n\r\nExpert+ has a few 1/4 beat hits, but is otherwise the same as Expert. Both Expert and Expert+ have the Dot Freestyle sections.\r\n\r\nNotes per Second / Video Play-through:\r\nEasy: 1.7 / https://streamable.com/t95t1\r\nNormal: 2 / https://streamable.com/al3de\r\nHard: 2.5 / https://streamable.com/5z1h5\r\nExpert: 3.9 / https://streamable.com/lq07e\r\nExpert+: 4.2 / https://streamable.com/dfygc (With FREESTYLE Moves!)\r\n\r\nMany Thanks to Aggro for the inspiration for this VERY SILLY spin move and Fromen for letting me use his map as a baseline for this!',uploader:{id:11373,name:"redmagi",uniqueSet:!0,hash:"5cff0b7298cc5a672c84e9d2",avatar:"https://www.gravatar.com/avatar/5cff0b7298cc5a672c84e9d2?d=retro",type:"SIMPLE"},metadata:{bpm:128,duration:188,songName:"Spin Me Round (Spin Edition)",songSubName:"Dead or Alive",songAuthorName:"Redmagi",levelAuthorName:"redmagi"},stats:{plays:0,downloads:4271,upvotes:1418,downvotes:40,score:.9198},uploaded:"2019-02-03T02:19:40Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"1274bb0c32bb9e5bdb677ca7eca18a45d454aaf7",key:"332f",state:"Published",createdAt:"2019-02-03T02:19:40Z",sageScore:7,diffs:[{njs:10,offset:0,notes:318,bombs:0,obstacles:0,nps:1.732,length:392,characteristic:"Standard",difficulty:"Easy",events:11030,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:183.75,paritySummary:{errors:38,warns:25,resets:0}},{njs:10,offset:0,notes:370,bombs:0,obstacles:2,nps:2.016,length:392,characteristic:"Standard",difficulty:"Normal",events:11030,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:183.75,paritySummary:{errors:30,warns:15,resets:0}},{njs:10,offset:0,notes:479,bombs:0,obstacles:1,nps:2.609,length:392,characteristic:"Standard",difficulty:"Hard",events:11030,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:183.75,paritySummary:{errors:43,warns:89,resets:0}},{njs:12,offset:0,notes:743,bombs:0,obstacles:0,nps:4.047,length:392,characteristic:"Standard",difficulty:"Expert",events:11030,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:183.75,paritySummary:{errors:32,warns:56,resets:0}},{njs:14,offset:0,notes:792,bombs:0,obstacles:0,nps:4.314,length:392,characteristic:"Standard",difficulty:"ExpertPlus",events:11030,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:183.75,paritySummary:{errors:35,warns:70,resets:0}}],downloadURL:"https://cdn.beatsaver.com/1274bb0c32bb9e5bdb677ca7eca18a45d454aaf7.zip",coverURL:"https://cdn.beatsaver.com/1274bb0c32bb9e5bdb677ca7eca18a45d454aaf7.jpg",previewURL:"https://cdn.beatsaver.com/1274bb0c32bb9e5bdb677ca7eca18a45d454aaf7.mp3"}],createdAt:"2019-02-03T02:19:40Z",updatedAt:"2019-02-03T02:19:40Z",lastPublishedAt:"2019-02-03T02:19:40Z"},{id:"9bdb",name:"Everything Black (feat. Mike Taylor) - Unlike Pluto",description:"This song is special to me :) Hope you enjoy!\n\nMaul-map by Trolav. Check out his other fantastic maps here -> https://beatsaver.com/uploader/5cff0b7598cc5a672c85368e\nExpert by Checkthepan. Check out his other awesome maps here -> https://beatsaver.com/uploader/5cff0b7398cc5a672c84f3d5\nExpert+ by me.\n\nPreviews:\n\nExpert+: https://youtu.be/gO2pLki8Hic\n\nExpert: https://youtu.be/oTF1tW2AKtg\n\nWann give some feedback? Hit me up on discord -> JohnnyDee#0002",uploader:{id:1991,name:"johnnydee",uniqueSet:!0,hash:"5d3e1593130e0e00069019f7",avatar:"https://www.gravatar.com/avatar/5d3e1593130e0e00069019f7?d=retro",type:"SIMPLE"},metadata:{bpm:98,duration:230,songName:"Everything Black",songSubName:"(feat. Mike Taylor)",songAuthorName:"Unlike Pluto",levelAuthorName:"Ramen Noodle"},stats:{plays:0,downloads:1934,upvotes:1017,downvotes:22,score:.9197},uploaded:"2020-04-17T07:02:17.945Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"0d005c0ae0b1e3ff7c43aef0dbc7d40fdb02d8fb",key:"9bdb",state:"Published",createdAt:"2020-04-17T07:02:17.945Z",sageScore:5,diffs:[{njs:15,offset:.4,notes:714,bombs:0,obstacles:6,nps:3.167,length:368.188,characteristic:"Standard",difficulty:"Expert",events:2661,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:225.421,paritySummary:{errors:1,warns:1,resets:0}},{njs:17,offset:.4,notes:767,bombs:0,obstacles:122,nps:3.403,length:368.094,characteristic:"Standard",difficulty:"ExpertPlus",events:2250,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:225.364,paritySummary:{errors:0,warns:0,resets:0}},{njs:18,offset:.2,notes:717,bombs:0,obstacles:122,nps:3.182,length:368,characteristic:"NoArrows",difficulty:"Expert",events:2248,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:225.306,paritySummary:{errors:0,warns:0,resets:0}}],downloadURL:"https://cdn.beatsaver.com/0d005c0ae0b1e3ff7c43aef0dbc7d40fdb02d8fb.zip",coverURL:"https://cdn.beatsaver.com/0d005c0ae0b1e3ff7c43aef0dbc7d40fdb02d8fb.jpg",previewURL:"https://cdn.beatsaver.com/0d005c0ae0b1e3ff7c43aef0dbc7d40fdb02d8fb.mp3"}],createdAt:"2020-04-17T07:02:17.945Z",updatedAt:"2020-04-17T07:02:17.945Z",lastPublishedAt:"2020-04-17T07:02:17.945Z"},{id:"fc05",name:"EVERGLOW - LA DI DA",description:"This is a map, there's 3 difficulties which are respectively pretty hard for what they should be. \nExpert+ Preview: https://youtu.be/W8JN3NSaX9A\nRequests or complaints - Discord: SimplyMarvellous#0290 ",uploader:{id:4285134,name:"simplymarvellous",uniqueSet:!0,hash:"5cff0b7398cc5a672c84f7a8",avatar:"https://cdn.beatsaver.com/avatar/189618441429319680.png",type:"DISCORD"},metadata:{bpm:164,duration:213,songName:"LA DI DA",songSubName:"",songAuthorName:"EVERGLOW",levelAuthorName:"simplymarvellous"},stats:{plays:0,downloads:7650,upvotes:825,downvotes:14,score:.9196},uploaded:"2020-10-09T07:03:45.316Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"000fbcb46c41cd0c363a80ae389333f7625e0921",key:"fc05",state:"Published",createdAt:"2020-10-09T07:03:45.316Z",sageScore:4,diffs:[{njs:14,offset:.4,notes:651,bombs:36,obstacles:166,nps:3.138,length:567,characteristic:"Standard",difficulty:"Hard",events:9456,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:207.439,paritySummary:{errors:1,warns:0,resets:12}},{njs:16,offset:0,notes:811,bombs:36,obstacles:172,nps:3.91,length:567,characteristic:"Standard",difficulty:"Expert",events:9456,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:207.439,paritySummary:{errors:0,warns:0,resets:9}},{njs:18,offset:-.4,notes:934,bombs:26,obstacles:172,nps:4.503,length:567,characteristic:"Standard",difficulty:"ExpertPlus",events:9456,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:207.439,paritySummary:{errors:0,warns:4,resets:6}}],downloadURL:"https://cdn.beatsaver.com/000fbcb46c41cd0c363a80ae389333f7625e0921.zip",coverURL:"https://cdn.beatsaver.com/000fbcb46c41cd0c363a80ae389333f7625e0921.jpg",previewURL:"https://cdn.beatsaver.com/000fbcb46c41cd0c363a80ae389333f7625e0921.mp3"}],createdAt:"2020-10-09T07:03:45.316Z",updatedAt:"2020-10-09T07:03:45.316Z",lastPublishedAt:"2020-10-09T07:03:45.316Z"},{id:"2b13",name:"Viva La Vida - Coldplay",description:"Love Viva La Vida, was one of my favorite childhood songs from Coldplay. 9 Years later, this song ages like fine wine. Just like Grenade, I brought this song off itunes so its the highest quality file you can get :)",uploader:{id:58338,name:"Joetastic",uniqueSet:!0,hash:"5cff0b7498cc5a672c85050e",avatar:"https://cdn.beatsaver.com/avatar/227767566402191360.png",type:"DISCORD"},metadata:{bpm:138,duration:243,songName:"Viva La Vida",songSubName:"Coldplay",songAuthorName:"Joetastic",levelAuthorName:"Joetastic"},stats:{plays:0,downloads:5911,upvotes:1934,downvotes:66,score:.9196},uploaded:"2019-01-05T06:02:16Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"023f19dd2ae57e43b99d62c837d1c708020f635d",key:"2b13",state:"Published",createdAt:"2019-01-05T06:02:16Z",sageScore:5,diffs:[{njs:14,offset:0,notes:919,bombs:0,obstacles:41,nps:4.136,length:511,characteristic:"Standard",difficulty:"Hard",events:714,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:222.174,paritySummary:{errors:41,warns:35,resets:0}}],downloadURL:"https://cdn.beatsaver.com/023f19dd2ae57e43b99d62c837d1c708020f635d.zip",coverURL:"https://cdn.beatsaver.com/023f19dd2ae57e43b99d62c837d1c708020f635d.jpg",previewURL:"https://cdn.beatsaver.com/023f19dd2ae57e43b99d62c837d1c708020f635d.mp3"}],createdAt:"2019-01-05T06:02:16Z",updatedAt:"2019-01-05T06:02:16Z",lastPublishedAt:"2019-01-05T06:02:16Z"},{id:"21",name:"REOL feat. nqrse - LUVORATORRRRRY!",description:"Hard (353 notes) / Hard+ (455 notes) / Expert (526 notes) / 15 Obstacles / Video Demonstration: https://streamable.com/23ayv / Part 1 of the J-EDM Graduation series! Use this song pack to level up your game!",uploader:{id:48853,name:"datkami",uniqueSet:!0,hash:"5cff0b7298cc5a672c84e8a3",avatar:"https://www.gravatar.com/avatar/5cff0b7298cc5a672c84e8a3?d=retro",type:"SIMPLE"},metadata:{bpm:128,duration:139,songName:"LUVORATORRRRRY!",songSubName:"feat.nqrse",songAuthorName:"Reol",levelAuthorName:"datkami"},stats:{plays:0,downloads:4483,upvotes:4237,downvotes:195,score:.9196},uploaded:"2018-05-10T02:24:36Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"c807689fefdae82aa79ba9c7f861118fb426b4cc",key:"21",state:"Published",createdAt:"2018-05-10T02:24:36Z",sageScore:5,diffs:[{njs:10,offset:0,notes:353,bombs:4,obstacles:15,nps:2.624,length:287,characteristic:"Standard",difficulty:"Normal",events:6e3,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:134.531,paritySummary:{errors:61,warns:33,resets:0}},{njs:10,offset:0,notes:455,bombs:4,obstacles:15,nps:3.382,length:287,characteristic:"Standard",difficulty:"Hard",events:6e3,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:134.531,paritySummary:{errors:75,warns:74,resets:0}},{njs:10,offset:0,notes:526,bombs:10,obstacles:15,nps:3.91,length:287,characteristic:"Standard",difficulty:"Expert",events:1e3,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:134.531,paritySummary:{errors:72,warns:78,resets:0}}],downloadURL:"https://cdn.beatsaver.com/c807689fefdae82aa79ba9c7f861118fb426b4cc.zip",coverURL:"https://cdn.beatsaver.com/c807689fefdae82aa79ba9c7f861118fb426b4cc.jpg",previewURL:"https://cdn.beatsaver.com/c807689fefdae82aa79ba9c7f861118fb426b4cc.mp3"}],createdAt:"2018-05-10T02:24:36Z",updatedAt:"2018-05-10T02:24:36Z",lastPublishedAt:"2018-05-10T02:24:36Z"},{id:"6a14",name:"Sweet But Psycho - Ava Max",description:"Mapped by Drunkdwarf. Fun upbeat tune that's great for dancing. Any feedback is appreciated ",uploader:{id:36873,name:"drunkdwarf",uniqueSet:!0,hash:"5d9eea1e048dff0006e87333",avatar:"https://www.gravatar.com/avatar/5d9eea1e048dff0006e87333?d=retro",type:"SIMPLE"},metadata:{bpm:133,duration:189,songName:"Sweet But Psycho",songSubName:"",songAuthorName:"Ava Max",levelAuthorName:"Drunkdwarf"},stats:{plays:0,downloads:1850,upvotes:746,downvotes:11,score:.9195},uploaded:"2019-10-16T05:39:20.052Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"eed9239c036bce71b6d23cf90a3886fc88adb6ee",key:"6a14",state:"Published",createdAt:"2019-10-16T05:39:20.052Z",sageScore:4,diffs:[{njs:14,offset:0,notes:661,bombs:0,obstacles:23,nps:3.672,length:399,characteristic:"Standard",difficulty:"Expert",events:952,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:180,paritySummary:{errors:55,warns:49,resets:0}}],downloadURL:"https://cdn.beatsaver.com/eed9239c036bce71b6d23cf90a3886fc88adb6ee.zip",coverURL:"https://cdn.beatsaver.com/eed9239c036bce71b6d23cf90a3886fc88adb6ee.jpg",previewURL:"https://cdn.beatsaver.com/eed9239c036bce71b6d23cf90a3886fc88adb6ee.mp3"}],createdAt:"2019-10-16T05:39:20.052Z",updatedAt:"2019-10-16T05:39:20.052Z",lastPublishedAt:"2019-10-16T05:39:20.052Z"},{id:"11b01",name:"Merry Go Round of Life - Howl's Moving Castle (Joe Hisaishi)",description:"#302\n\nYoutube Preview : https://www.youtube.com/watch?v=q45z-XvFGeI\n\nDiscord Server : https://discord.gg/3ZSWSTh\nTwitch: https://www.twitch.tv/rigiiid\nTwitter: https://twitter.com/Rigid_bs\nYoutube : https://www.youtube.com/channel/UC36LRBThDdVFjCr-ZXOj-Uw",uploader:{id:4284588,name:"rigid",uniqueSet:!0,hash:"5cff0b7598cc5a672c852224",avatar:"https://cdn.beatsaver.com/avatar/295613108947386368.png",type:"DISCORD"},metadata:{bpm:165,duration:309,songName:"Merry-Go Round Of Life",songSubName:"",songAuthorName:"Joe Hisaishi",levelAuthorName:"Rigid"},stats:{plays:0,downloads:2060,upvotes:818,downvotes:14,score:.9194},uploaded:"2020-12-03T23:32:31.283Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"d93e9ef74098ff490d0cd05e492f20c2be750ce2",key:"11b01",state:"Published",createdAt:"2020-12-03T23:32:31.283Z",sageScore:1,diffs:[{njs:17,offset:-.2,notes:1020,bombs:41,obstacles:18,nps:3.42,length:820.105,characteristic:"Standard",difficulty:"ExpertPlus",events:3102,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:298.22,paritySummary:{errors:1,warns:0,resets:3}}],downloadURL:"https://cdn.beatsaver.com/d93e9ef74098ff490d0cd05e492f20c2be750ce2.zip",coverURL:"https://cdn.beatsaver.com/d93e9ef74098ff490d0cd05e492f20c2be750ce2.jpg",previewURL:"https://cdn.beatsaver.com/d93e9ef74098ff490d0cd05e492f20c2be750ce2.mp3"}],createdAt:"2020-12-03T23:32:31.283Z",updatedAt:"2020-12-03T23:32:31.283Z",lastPublishedAt:"2020-12-03T23:32:31.283Z"},{id:"618a",name:"Teminite - Party Time",description:"Expert only\r\n",uploader:{id:12996,name:"rustic",uniqueSet:!0,hash:"5cff0b7298cc5a672c84e8c4",avatar:"https://www.gravatar.com/avatar/5cff0b7298cc5a672c84e8c4?d=retro",type:"SIMPLE"},metadata:{bpm:125,duration:271,songName:"Party Time",songSubName:"",songAuthorName:"Teminite",levelAuthorName:"Rustic"},stats:{plays:0,downloads:1898,upvotes:1056,downvotes:24,score:.9194},uploaded:"2019-09-05T20:33:35.424Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"05aa128214d1adc3ca599a0475b6c422debc08e0",key:"618a",state:"Published",createdAt:"2019-09-05T20:33:35.424Z",sageScore:6,diffs:[{njs:18,offset:0,notes:953,bombs:112,obstacles:1389,nps:3.65,length:544,characteristic:"Standard",difficulty:"Expert",events:7206,chroma:!1,me:!0,ne:!1,cinema:!1,seconds:261.12,paritySummary:{errors:0,warns:0,resets:0}}],downloadURL:"https://cdn.beatsaver.com/05aa128214d1adc3ca599a0475b6c422debc08e0.zip",coverURL:"https://cdn.beatsaver.com/05aa128214d1adc3ca599a0475b6c422debc08e0.jpg",previewURL:"https://cdn.beatsaver.com/05aa128214d1adc3ca599a0475b6c422debc08e0.mp3"}],createdAt:"2019-09-05T20:33:35.424Z",updatedAt:"2019-09-05T20:33:35.424Z",lastPublishedAt:"2019-09-05T20:33:35.424Z"},{id:"3b82",name:"DJ Got Us Fallin In Love - Usher ft. Pitbull",description:'"DJ Got Us Fallin\' in Love" is a song by American R&B recording artist Usher featuring guest vocals from American rapper Pitbull.\r\n\r\nSong is brought from iTunes for the highest quality sound file :)',uploader:{id:58338,name:"Joetastic",uniqueSet:!0,hash:"5cff0b7498cc5a672c85050e",avatar:"https://cdn.beatsaver.com/avatar/227767566402191360.png",type:"DISCORD"},metadata:{bpm:120,duration:222,songName:"DJ Got Us Fallin In Love",songSubName:"Usher ft. Pitbull",songAuthorName:"Joetastic",levelAuthorName:"Joetastic"},stats:{plays:0,downloads:2910,upvotes:819,downvotes:14,score:.9194},uploaded:"2019-03-04T16:58:43Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"96b8df29da4271f56c6777f11e69cd06669055fe",key:"3b82",state:"Published",createdAt:"2019-03-04T16:58:43Z",sageScore:5,diffs:[{njs:14,offset:0,notes:856,bombs:0,obstacles:5,nps:3.963,length:432,characteristic:"Standard",difficulty:"Expert",events:2006,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:216,paritySummary:{errors:82,warns:85,resets:0}}],downloadURL:"https://cdn.beatsaver.com/96b8df29da4271f56c6777f11e69cd06669055fe.zip",coverURL:"https://cdn.beatsaver.com/96b8df29da4271f56c6777f11e69cd06669055fe.jpg",previewURL:"https://cdn.beatsaver.com/96b8df29da4271f56c6777f11e69cd06669055fe.mp3"}],createdAt:"2019-03-04T16:58:43Z",updatedAt:"2019-03-04T16:58:43Z",lastPublishedAt:"2019-03-04T16:58:43Z"},{id:"2649",name:"[Aurora Theory] Erik McClure - Soar",description:"The first map of the start of a new project for me :)\r\n\r\nA peaceful and comfy map, not intended to be super hard at all (unlike most of my other maps) but might be on the harder side of Expert.\r\nPeople need to give Erik McClure more recognition!\r\n\r\nDiscord: discord.gg/EVU9At2 (For updates regarding my maps, notifications for my streams, and a way to contact me)",uploader:{id:4288620,name:"hexagonial",uniqueSet:!0,hash:"5cff0b7398cc5a672c84f2fb",avatar:"https://cdn.beatsaver.com/avatar/221442943045599232.png",type:"DISCORD"},metadata:{bpm:160,duration:350,songName:"Soar",songSubName:"Erik McClure",songAuthorName:"Hexagonial",levelAuthorName:"hexagonial"},stats:{plays:0,downloads:1468,upvotes:1099,downvotes:26,score:.9194},uploaded:"2018-12-16T21:04:48Z",automapper:!1,ranked:!0,qualified:!1,versions:[{hash:"087cedeab4b9e4c3a4b9c594c97bee6f446f0a77",key:"2649",state:"Published",createdAt:"2018-12-16T21:04:48Z",sageScore:6,diffs:[{njs:15,offset:0,notes:1337,bombs:0,obstacles:71,nps:3.961,length:900,characteristic:"Standard",difficulty:"Expert",events:3056,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:337.5,paritySummary:{errors:26,warns:7,resets:0},stars:3.3}],downloadURL:"https://cdn.beatsaver.com/087cedeab4b9e4c3a4b9c594c97bee6f446f0a77.zip",coverURL:"https://cdn.beatsaver.com/087cedeab4b9e4c3a4b9c594c97bee6f446f0a77.jpg",previewURL:"https://cdn.beatsaver.com/087cedeab4b9e4c3a4b9c594c97bee6f446f0a77.mp3"}],createdAt:"2018-12-16T21:04:48Z",updatedAt:"2018-12-16T21:04:48Z",lastPublishedAt:"2018-12-16T21:04:48Z"},{id:"dfc3",name:"K/DA - THE BADDEST ft. (G)I-DLE, Bea Miller, Wolftyla",description:"Collab with ConnorJC. check out his maps! He did the 360 map",uploader:{id:4285107,name:"kikaeaeon",uniqueSet:!0,hash:"5cff0b7498cc5a672c85109b",avatar:"https://cdn.beatsaver.com/avatar/103715469822816256.png",type:"DISCORD"},metadata:{bpm:150,duration:162,songName:"Baddest",songSubName:"",songAuthorName:"KDA",levelAuthorName:"KikaeAeon & ConnorJC"},stats:{plays:0,downloads:4890,upvotes:2449,downvotes:94,score:.9193},uploaded:"2020-08-29T05:50:22.494Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"c2a6c6aa907994353fef68370ebbda4da4ea4cc8",key:"dfc3",state:"Published",createdAt:"2020-08-29T05:50:22.494Z",sageScore:5,diffs:[{njs:10,offset:0,notes:274,bombs:0,obstacles:54,nps:1.713,length:400,characteristic:"Standard",difficulty:"Easy",events:901,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:160,paritySummary:{errors:11,warns:2,resets:0}},{njs:10,offset:0,notes:321,bombs:0,obstacles:54,nps:2.006,length:400,characteristic:"Standard",difficulty:"Normal",events:1004,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:160,paritySummary:{errors:3,warns:0,resets:0}},{njs:12,offset:0,notes:464,bombs:0,obstacles:61,nps:2.9,length:400,characteristic:"Standard",difficulty:"Hard",events:1347,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:160,paritySummary:{errors:13,warns:13,resets:0}},{njs:14,offset:0,notes:608,bombs:0,obstacles:65,nps:3.8,length:400,characteristic:"Standard",difficulty:"Expert",events:1614,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:160,paritySummary:{errors:17,warns:23,resets:0}},{njs:16,offset:0,notes:851,bombs:0,obstacles:96,nps:5.319,length:400,characteristic:"Standard",difficulty:"ExpertPlus",events:2480,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:160,paritySummary:{errors:19,warns:41,resets:0}},{njs:19,offset:0,notes:944,bombs:6,obstacles:305,nps:5.9,length:400,characteristic:"360Degree",difficulty:"ExpertPlus",events:3408,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:160,paritySummary:{errors:0,warns:0,resets:0}}],downloadURL:"https://cdn.beatsaver.com/c2a6c6aa907994353fef68370ebbda4da4ea4cc8.zip",coverURL:"https://cdn.beatsaver.com/c2a6c6aa907994353fef68370ebbda4da4ea4cc8.jpg",previewURL:"https://cdn.beatsaver.com/c2a6c6aa907994353fef68370ebbda4da4ea4cc8.mp3"}],createdAt:"2020-08-29T05:50:22.494Z",updatedAt:"2020-08-29T05:50:22.494Z",lastPublishedAt:"2020-08-29T05:50:22.494Z"},{id:"5893",name:"Crypt of the NecroDancer - King Conga",description:"Hope you like this remap :) \n\n- ORYGINAL",uploader:{id:34774,name:"oryginal",uniqueSet:!0,hash:"5cff0b7698cc5a672c8551e0",avatar:"https://www.gravatar.com/avatar/5cff0b7698cc5a672c8551e0?d=retro",type:"SIMPLE"},metadata:{bpm:120,duration:107,songName:"King Conga",songSubName:"",songAuthorName:"Danny Baranowsky",levelAuthorName:"ORYGINAL"},stats:{plays:0,downloads:1592,upvotes:741,downvotes:11,score:.9193},uploaded:"2019-07-23T14:43:05.570Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"d0b4c5fcc3522f5b58d1ff2da7cfdd8086651078",key:"5893",state:"Published",createdAt:"2019-07-23T14:43:05.570Z",sageScore:4,diffs:[{njs:12,offset:0,notes:311,bombs:104,obstacles:30,nps:3.019,length:206,characteristic:"Standard",difficulty:"Hard",events:1160,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:103,paritySummary:{errors:15,warns:21,resets:4}},{njs:12,offset:0,notes:387,bombs:118,obstacles:23,nps:3.757,length:206,characteristic:"Standard",difficulty:"Expert",events:1160,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:103,paritySummary:{errors:9,warns:19,resets:4}}],downloadURL:"https://cdn.beatsaver.com/d0b4c5fcc3522f5b58d1ff2da7cfdd8086651078.zip",coverURL:"https://cdn.beatsaver.com/d0b4c5fcc3522f5b58d1ff2da7cfdd8086651078.jpg",previewURL:"https://cdn.beatsaver.com/d0b4c5fcc3522f5b58d1ff2da7cfdd8086651078.mp3"}],createdAt:"2019-07-23T14:43:05.570Z",updatedAt:"2019-07-23T14:43:05.570Z",lastPublishedAt:"2019-07-23T14:43:05.570Z"},{id:"3821",name:"Le Perv - Carpenter Brut (Hotline Miami 2 Soundtrack)",description:"Shoutouts to twitch.tv/lexington64 and twitch.tv/whipstickgostop for playtesting!",uploader:{id:4285077,name:"ris",uniqueSet:!0,hash:"5cff0b7598cc5a672c8535df",avatar:"https://cdn.beatsaver.com/avatar/191597992061435904.png",type:"DISCORD"},metadata:{bpm:120,duration:259,songName:"Le Perv",songSubName:"Carpenter Brut",songAuthorName:"Ris",levelAuthorName:"Ris"},stats:{plays:0,downloads:1655,upvotes:983,downvotes:21,score:.9193},uploaded:"2019-02-21T02:57:32Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"57ad431c662057d428e920a8cd225bae5ab3d2c3",key:"3821",state:"Published",createdAt:"2019-02-21T02:57:32Z",sageScore:3,diffs:[{njs:10,offset:0,notes:488,bombs:0,obstacles:0,nps:1.91,length:511,characteristic:"Standard",difficulty:"Normal",events:369,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:255.5,paritySummary:{errors:109,warns:46,resets:0}},{njs:10,offset:0,notes:922,bombs:0,obstacles:0,nps:3.609,length:511,characteristic:"Standard",difficulty:"Hard",events:369,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:255.5,paritySummary:{errors:99,warns:85,resets:0}},{njs:12,offset:0,notes:1176,bombs:0,obstacles:0,nps:4.603,length:511,characteristic:"Standard",difficulty:"Expert",events:369,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:255.5,paritySummary:{errors:104,warns:99,resets:0}}],downloadURL:"https://cdn.beatsaver.com/57ad431c662057d428e920a8cd225bae5ab3d2c3.zip",coverURL:"https://cdn.beatsaver.com/57ad431c662057d428e920a8cd225bae5ab3d2c3.jpg",previewURL:"https://cdn.beatsaver.com/57ad431c662057d428e920a8cd225bae5ab3d2c3.mp3"}],createdAt:"2019-02-21T02:57:32Z",updatedAt:"2019-02-21T02:57:32Z",lastPublishedAt:"2019-02-21T02:57:32Z"},{id:"623c",name:"Lil Tecca - Ransom",description:"",uploader:{id:4285107,name:"kikaeaeon",uniqueSet:!0,hash:"5cff0b7498cc5a672c85109b",avatar:"https://cdn.beatsaver.com/avatar/103715469822816256.png",type:"DISCORD"},metadata:{bpm:180,duration:133,songName:"Ransom",songSubName:"",songAuthorName:"Lil Tecca",levelAuthorName:"KikaeAeon"},stats:{plays:0,downloads:2213,upvotes:1476,downvotes:44,score:.9192},uploaded:"2019-09-08T17:05:01.320Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"ebdaaafecece7859d28ee1d80a94fa8b2b9992a3",key:"623c",state:"Published",createdAt:"2019-09-08T17:05:01.320Z",sageScore:5,diffs:[{njs:12,offset:0,notes:358,bombs:0,obstacles:31,nps:2.834,length:379,characteristic:"Standard",difficulty:"Expert",events:914,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:126.333,paritySummary:{errors:11,warns:13,resets:0}},{njs:16,offset:0,notes:571,bombs:0,obstacles:24,nps:4.52,length:379,characteristic:"Standard",difficulty:"ExpertPlus",events:684,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:126.333,paritySummary:{errors:12,warns:8,resets:0}}],downloadURL:"https://cdn.beatsaver.com/ebdaaafecece7859d28ee1d80a94fa8b2b9992a3.zip",coverURL:"https://cdn.beatsaver.com/ebdaaafecece7859d28ee1d80a94fa8b2b9992a3.jpg",previewURL:"https://cdn.beatsaver.com/ebdaaafecece7859d28ee1d80a94fa8b2b9992a3.mp3"}],createdAt:"2019-09-08T17:05:01.320Z",updatedAt:"2019-09-08T17:05:01.320Z",lastPublishedAt:"2019-09-08T17:05:01.320Z"},{id:"2b56",name:"Pitbull Ft. Ke$ha - Timber",description:"Happy New Year! Here is a song I've been working on for a long time (With A LOT of procrastination). It didn't quite feel right with the notes being on beat so I extended them 1/16th off beat and it sounded a little better. Enjoy!\r\n\r\nVideo Preview of expert: https://youtu.be/ntGqRvV5hX4",uploader:{id:1974,name:"scottie2pottie",uniqueSet:!0,hash:"5cff0b7598cc5a672c85329f",avatar:"https://www.gravatar.com/avatar/5cff0b7598cc5a672c85329f?d=retro",type:"SIMPLE"},metadata:{bpm:130,duration:204,songName:"Timber",songSubName:"Pitbull",songAuthorName:"Scottie2Pottie",levelAuthorName:"scottie2pottie"},stats:{plays:0,downloads:4086,upvotes:1223,downvotes:32,score:.9191},uploaded:"2019-01-06T03:24:10Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"ca709a09209760e19d9b63952aa208efc4663aef",key:"2b56",state:"Published",createdAt:"2019-01-06T03:24:10Z",sageScore:5,diffs:[{njs:10,offset:0,notes:721,bombs:4,obstacles:0,nps:3.616,length:432,characteristic:"Standard",difficulty:"Hard",events:1003,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:199.385,paritySummary:{errors:34,warns:15,resets:0}},{njs:10,offset:0,notes:932,bombs:4,obstacles:0,nps:4.674,length:432,characteristic:"Standard",difficulty:"Expert",events:1124,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:199.385,paritySummary:{errors:29,warns:31,resets:0}}],downloadURL:"https://cdn.beatsaver.com/ca709a09209760e19d9b63952aa208efc4663aef.zip",coverURL:"https://cdn.beatsaver.com/ca709a09209760e19d9b63952aa208efc4663aef.jpg",previewURL:"https://cdn.beatsaver.com/ca709a09209760e19d9b63952aa208efc4663aef.mp3"}],createdAt:"2019-01-06T03:24:10Z",updatedAt:"2019-01-06T03:24:10Z",lastPublishedAt:"2019-01-06T03:24:10Z"},{id:"12db3",name:"Lindsey Sterling - Artemis ",description:"Made this a couple of months ago and totally didn't forget to upload it.\n\nThis was a special request by--I don't even know. I forgot. It's that old.",uploader:{id:15368,name:"theab",uniqueSet:!0,hash:"5cff0b7698cc5a672c853a14",avatar:"https://www.gravatar.com/avatar/5cff0b7698cc5a672c853a14?d=retro",type:"SIMPLE"},metadata:{bpm:190,duration:228,songName:"Artemis",songSubName:"",songAuthorName:"Lindsey Stirling",levelAuthorName:"Ab"},stats:{plays:0,downloads:1518,upvotes:602,downvotes:6,score:.919},uploaded:"2021-01-18T06:05:51.386Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"a8df2df28d239a14b18f40855045eaca88a0c8e5",key:"12db3",state:"Published",createdAt:"2021-01-18T06:05:51.386Z",sageScore:3,diffs:[{njs:21,offset:0,notes:975,bombs:0,obstacles:2,nps:4.358,length:708.5,characteristic:"Standard",difficulty:"ExpertPlus",events:1159,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:223.737,paritySummary:{errors:6,warns:5,resets:0}}],downloadURL:"https://cdn.beatsaver.com/a8df2df28d239a14b18f40855045eaca88a0c8e5.zip",coverURL:"https://cdn.beatsaver.com/a8df2df28d239a14b18f40855045eaca88a0c8e5.jpg",previewURL:"https://cdn.beatsaver.com/a8df2df28d239a14b18f40855045eaca88a0c8e5.mp3"}],createdAt:"2021-01-18T06:05:51.386Z",updatedAt:"2021-01-18T06:05:51.386Z",lastPublishedAt:"2021-01-18T06:05:51.386Z"},{id:"2db1",name:"Huey Lewis - The Power of Love",description:"Here is my first map of 2019 covering 'The power of love' by Huey Lewis!\r\nAll difficulties are included from easy to expert, enjoy ;)\r\n\r\nBeastsaber: https://bsaber.com/members/stumi/\r\nVideo: https://www.youtube.com/watch?v=7aHevt6DVkc",uploader:{id:4785,name:"stumi",uniqueSet:!1,hash:"5cff0b7398cc5a672c84f720",avatar:"https://www.gravatar.com/avatar/5cff0b7398cc5a672c84f720?d=retro",type:"SIMPLE"},metadata:{bpm:119,duration:226,songName:"The power of love",songSubName:"Huey Lewis",songAuthorName:"Stumi",levelAuthorName:"stumi"},stats:{plays:0,downloads:6882,upvotes:1088,downvotes:26,score:.919},uploaded:"2019-01-14T18:26:26Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"bf261b573d7c649150ea1c23ec504130904b6aa2",key:"2db1",state:"Published",createdAt:"2019-01-14T18:26:26Z",sageScore:6,diffs:[{njs:10,offset:0,notes:311,bombs:0,obstacles:17,nps:1.449,length:425,characteristic:"Standard",difficulty:"Easy",events:1830,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:214.286,paritySummary:{errors:29,warns:22,resets:0}},{njs:10,offset:0,notes:489,bombs:0,obstacles:20,nps:2.278,length:425,characteristic:"Standard",difficulty:"Normal",events:1830,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:214.286,paritySummary:{errors:37,warns:55,resets:0}},{njs:11,offset:0,notes:697,bombs:0,obstacles:1,nps:3.247,length:425,characteristic:"Standard",difficulty:"Hard",events:1831,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:214.286,paritySummary:{errors:41,warns:40,resets:0}},{njs:12,offset:0,notes:920,bombs:0,obstacles:0,nps:4.287,length:424.875,characteristic:"Standard",difficulty:"Expert",events:1831,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:214.223,paritySummary:{errors:59,warns:68,resets:0}}],downloadURL:"https://cdn.beatsaver.com/bf261b573d7c649150ea1c23ec504130904b6aa2.zip",coverURL:"https://cdn.beatsaver.com/bf261b573d7c649150ea1c23ec504130904b6aa2.jpg",previewURL:"https://cdn.beatsaver.com/bf261b573d7c649150ea1c23ec504130904b6aa2.mp3"}],createdAt:"2019-01-14T18:26:26Z",updatedAt:"2019-01-14T18:26:26Z",lastPublishedAt:"2019-01-14T18:26:26Z"},{id:"10377",name:"Marnik - Hocus Pocus (Original Mix)",description:"use CHROMA mod for\n - PanicEnvironment environment removal\n - Cool lights\n - to gain superpowers\n\nHappy Halloween!\n\nBPM | 130\nExpert+\nExpert\nHard\nNormal\nEasy\n\npreview: https://www.youtube.com/watch?v=DfzD_Ca4fp4\n\nDM any feedback on Discord\nETAN#8341",uploader:{id:4235140,name:"etan",uniqueSet:!0,hash:"5cff0b7798cc5a672c855775",avatar:"https://cdn.beatsaver.com/avatar/136373107559497728.png",type:"DISCORD"},metadata:{bpm:130,duration:242,songName:"Hocus Pocus",songSubName:"(Original Mix)",songAuthorName:"Marnik",levelAuthorName:"ETAN"},stats:{plays:0,downloads:7135,upvotes:1324,downvotes:37,score:.919},uploaded:"2020-10-25T22:28:11.819Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"4e37c7070b9049ebbbf11ceab644d4ec4a01ca13",key:"10377",state:"Published",createdAt:"2020-10-25T22:28:11.819Z",sageScore:6,diffs:[{njs:9,offset:0,notes:232,bombs:0,obstacles:34,nps:.99,length:508,characteristic:"Standard",difficulty:"Easy",events:21660,chroma:!0,me:!1,ne:!1,cinema:!1,seconds:234.462,paritySummary:{errors:40,warns:0,resets:0}},{njs:11,offset:1,notes:493,bombs:0,obstacles:34,nps:2.103,length:508,characteristic:"Standard",difficulty:"Normal",events:21660,chroma:!0,me:!1,ne:!1,cinema:!1,seconds:234.462,paritySummary:{errors:0,warns:0,resets:0}},{njs:13,offset:.5,notes:693,bombs:0,obstacles:34,nps:2.956,length:508,characteristic:"Standard",difficulty:"Hard",events:21660,chroma:!0,me:!1,ne:!1,cinema:!1,seconds:234.462,paritySummary:{errors:0,warns:0,resets:0}},{njs:16,offset:0,notes:966,bombs:0,obstacles:34,nps:4.12,length:508,characteristic:"Standard",difficulty:"Expert",events:21660,chroma:!0,me:!1,ne:!1,cinema:!1,seconds:234.462,paritySummary:{errors:0,warns:0,resets:0}},{njs:21,offset:.4,notes:1172,bombs:80,obstacles:34,nps:4.999,length:508,characteristic:"Standard",difficulty:"ExpertPlus",events:21661,chroma:!0,me:!1,ne:!1,cinema:!1,seconds:234.462,paritySummary:{errors:6,warns:3,resets:34}}],downloadURL:"https://cdn.beatsaver.com/4e37c7070b9049ebbbf11ceab644d4ec4a01ca13.zip",coverURL:"https://cdn.beatsaver.com/4e37c7070b9049ebbbf11ceab644d4ec4a01ca13.jpg",previewURL:"https://cdn.beatsaver.com/4e37c7070b9049ebbbf11ceab644d4ec4a01ca13.mp3"}],createdAt:"2020-10-25T22:28:11.819Z",updatedAt:"2020-10-25T22:28:11.819Z",lastPublishedAt:"2020-10-25T22:28:11.819Z"},{id:"8367",name:"Martin Garrix & Dua Lipa - Scared To Be Lonely (Brooks Remix)",description:"Brooks does amazing remixes and this is probably one of my favourite ones\n\nVideo: https://youtu.be/OgmhqC5e9m8\n\nEasy: Notes: 132 NPS: 1.47 NJS: 10\nNormal: Notes: 164 NPS: 1.8 NJS: 12\nHard: Notes: 256 NPS: 2.82 NJS: 14\nExpert: Notes: 351 NPS: 3.86 NJS: 16\nExpert+: Notes: 417 NPS: 4.59 NJS: 18\n\nCheck out my lightshows here: https://www.youtube.com/playlist?list=PLwl6dYq72JOYu1BnKl5WATa4Dh__ZJmuN",uploader:{id:14808,name:"halcyon12",uniqueSet:!0,hash:"5cff0b7698cc5a672c8547ad",avatar:"https://www.gravatar.com/avatar/5cff0b7698cc5a672c8547ad?d=retro",type:"SIMPLE"},metadata:{bpm:128,duration:104,songName:"Scared To Be Lonely",songSubName:"Brooks Remix",songAuthorName:"Martin Garrix ft. Dua Lipa",levelAuthorName:"Halcyon12"},stats:{plays:0,downloads:3240,upvotes:1111,downvotes:27,score:.919},uploaded:"2020-02-02T01:20:18.328Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"60dac314035b8f9da649286c587aa6377abf1f16",key:"8367",state:"Published",createdAt:"2020-02-02T01:20:18.328Z",sageScore:7,diffs:[{njs:10,offset:1,notes:132,bombs:0,obstacles:2,nps:1.467,length:192,characteristic:"Standard",difficulty:"Easy",events:2499,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:90,paritySummary:{errors:8,warns:0,resets:0}},{njs:12,offset:.5,notes:164,bombs:0,obstacles:2,nps:1.803,length:194,characteristic:"Standard",difficulty:"Normal",events:2499,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:90.938,paritySummary:{errors:10,warns:2,resets:0}},{njs:14,offset:0,notes:256,bombs:0,obstacles:8,nps:2.815,length:194,characteristic:"Standard",difficulty:"Hard",events:2499,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:90.938,paritySummary:{errors:1,warns:1,resets:0}},{njs:16,offset:-.25,notes:351,bombs:0,obstacles:16,nps:3.86,length:194,characteristic:"Standard",difficulty:"Expert",events:2499,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:90.938,paritySummary:{errors:0,warns:0,resets:0}},{njs:18,offset:-.5,notes:417,bombs:0,obstacles:34,nps:4.586,length:194,characteristic:"Standard",difficulty:"ExpertPlus",events:2498,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:90.938,paritySummary:{errors:0,warns:0,resets:0}}],downloadURL:"https://cdn.beatsaver.com/60dac314035b8f9da649286c587aa6377abf1f16.zip",coverURL:"https://cdn.beatsaver.com/60dac314035b8f9da649286c587aa6377abf1f16.jpg",previewURL:"https://cdn.beatsaver.com/60dac314035b8f9da649286c587aa6377abf1f16.mp3"}],createdAt:"2020-02-02T01:20:18.328Z",updatedAt:"2020-02-02T01:20:18.328Z",lastPublishedAt:"2020-02-02T01:20:18.328Z"},{id:"a90b",name:"[TheFatRat Pack] Xenogenesis - TheFatRat",description:'Here it is! The unofficial "TheFatRat" Music Pack in Beat Saber - with all beatmaps being singlehandedly made by me!\n\nAll songs included in TheFatRat Music Pack:\nMonody (ft. Laura Brehm) \nUnity \nWindfall \nXenogenesis \nTime Lapse \n\nGet the full song pack here: https://bsaber.com/thefatrat-music-pack/\n(Or you should just be able to find all the other ones on my beatsaver profile as well. Heres a link to my profile: https://beatsaver.com/uploader/5d47d586c5301900060b2f6c)\n\nSongcore mod is recommended (for custom colours)\nPlays best on Origins Environment\n\nXenogenesis Stats:\nExpert+ - 955 Notes | 4.17 NPS\nExpert - 863 Notes | 3.77 NPS\nHard - 649 Notes | 2.84 NPS\nNormal - 439 Notes | 1.92 NPS\nEasy - 347 Notes | 1.52 NPS\n\nRoughly 7-8 Hours of work\nGameplay: https://youtu.be/YA0zBFQcLnc\n\nObviously - A huge thanks to TheFatRat himself, for not only producing the songs in the first place (and allowing free access to use them for big and small content creators), but also being a huge inspiration to lots of artists out there and for making music that everyone can jam out to! We love you, TheFatRat!',uploader:{id:4284197,name:"timeweaver",uniqueSet:!0,hash:"5d47d586c5301900060b2f6c",avatar:"https://cdn.beatsaver.com/avatar/607399708121366529.png",type:"DISCORD"},metadata:{bpm:145,duration:228,songName:"Xenogenesis",songSubName:"",songAuthorName:"TheFatRat",levelAuthorName:"Timeweaver"},stats:{plays:0,downloads:4735,upvotes:1216,downvotes:32,score:.9189},uploaded:"2020-05-22T13:28:50.525Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"15ab8f50a6b1a7ff95955ba236426ab4edf9cb15",key:"a90b",state:"Published",createdAt:"2020-05-22T13:28:50.525Z",sageScore:5,diffs:[{njs:10,offset:0,notes:347,bombs:0,obstacles:53,nps:1.55,length:541,characteristic:"Standard",difficulty:"Easy",events:5971,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:223.862,paritySummary:{errors:54,warns:35,resets:0}},{njs:10,offset:0,notes:439,bombs:0,obstacles:97,nps:1.961,length:541,characteristic:"Standard",difficulty:"Normal",events:5971,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:223.862,paritySummary:{errors:30,warns:12,resets:0}},{njs:12.5,offset:1,notes:649,bombs:0,obstacles:121,nps:2.899,length:541,characteristic:"Standard",difficulty:"Hard",events:5971,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:223.862,paritySummary:{errors:6,warns:4,resets:0}},{njs:15,offset:.5,notes:863,bombs:0,obstacles:137,nps:3.855,length:541,characteristic:"Standard",difficulty:"Expert",events:6162,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:223.862,paritySummary:{errors:2,warns:1,resets:0}},{njs:17,offset:0,notes:955,bombs:0,obstacles:169,nps:4.266,length:541,characteristic:"Standard",difficulty:"ExpertPlus",events:6160,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:223.862,paritySummary:{errors:4,warns:0,resets:0}}],downloadURL:"https://cdn.beatsaver.com/15ab8f50a6b1a7ff95955ba236426ab4edf9cb15.zip",coverURL:"https://cdn.beatsaver.com/15ab8f50a6b1a7ff95955ba236426ab4edf9cb15.jpg",previewURL:"https://cdn.beatsaver.com/15ab8f50a6b1a7ff95955ba236426ab4edf9cb15.mp3"}],createdAt:"2020-05-22T13:28:50.525Z",updatedAt:"2020-05-22T13:28:50.525Z",lastPublishedAt:"2020-05-22T13:28:50.525Z"},{id:"9b41",name:"Diving In Too Deep - NerdOut",description:"Diving In Too Deep, a Subnautica song created by NerdOut! All I can say is expect W A L L S ! ! !\n(Mapping Extensions required)",uploader:{id:23150,name:"kuritsadbs",uniqueSet:!0,hash:"5cff0b7698cc5a672c8537ef",avatar:"https://www.gravatar.com/avatar/5cff0b7698cc5a672c8537ef?d=retro",type:"SIMPLE"},metadata:{bpm:135,duration:195,songName:"Diving In Too Deep",songSubName:"",songAuthorName:"NerdOut",levelAuthorName:"KuritsaDBS"},stats:{plays:0,downloads:779,upvotes:512,downvotes:3,score:.9188},uploaded:"2020-04-15T11:53:14.568Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"fe10d96acbb9a6416e1e7710270e12032b642288",key:"9b41",state:"Published",createdAt:"2020-04-15T11:53:14.568Z",sageScore:4,diffs:[{njs:16,offset:0,notes:481,bombs:0,obstacles:1919,nps:2.736,length:395.5,characteristic:"Standard",difficulty:"Expert",events:7541,chroma:!1,me:!0,ne:!1,cinema:!1,seconds:175.778,paritySummary:{errors:0,warns:0,resets:0}}],downloadURL:"https://cdn.beatsaver.com/fe10d96acbb9a6416e1e7710270e12032b642288.zip",coverURL:"https://cdn.beatsaver.com/fe10d96acbb9a6416e1e7710270e12032b642288.jpg",previewURL:"https://cdn.beatsaver.com/fe10d96acbb9a6416e1e7710270e12032b642288.mp3"}],createdAt:"2020-04-15T11:53:14.568Z",updatedAt:"2020-04-15T11:53:14.568Z",lastPublishedAt:"2020-04-15T11:53:14.568Z"},{id:"7ba4",name:"Say So - Doja Cat",description:"Based on the Tik Tok dance meme song, Say So by Doja Cat.",uploader:{id:34446,name:"cartwheels",uniqueSet:!0,hash:"5e0cf5fbbe3a060006a86875",avatar:"https://www.gravatar.com/avatar/5e0cf5fbbe3a060006a86875?d=retro",type:"SIMPLE"},metadata:{bpm:111,duration:238,songName:"Say So",songSubName:"",songAuthorName:"Doja Cat",levelAuthorName:"mikey f"},stats:{plays:0,downloads:5177,upvotes:1523,downvotes:47,score:.9188},uploaded:"2020-01-02T00:07:45.673Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"e931eac117453cea276351917c1af2b5f0a1c7df",key:"7ba4",state:"Published",createdAt:"2020-01-02T00:07:45.673Z",sageScore:5,diffs:[{njs:12,offset:0,notes:464,bombs:54,obstacles:11,nps:2.07,length:414.75,characteristic:"Standard",difficulty:"Normal",events:1366,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:224.189,paritySummary:{errors:49,warns:69,resets:0}}],downloadURL:"https://cdn.beatsaver.com/e931eac117453cea276351917c1af2b5f0a1c7df.zip",coverURL:"https://cdn.beatsaver.com/e931eac117453cea276351917c1af2b5f0a1c7df.jpg",previewURL:"https://cdn.beatsaver.com/e931eac117453cea276351917c1af2b5f0a1c7df.mp3"}],createdAt:"2020-01-02T00:07:45.673Z",updatedAt:"2020-01-02T00:07:45.673Z",lastPublishedAt:"2020-01-02T00:07:45.673Z"},{id:"500d",name:"Thunder - Imagine Dragons",description:"168 BPM / 3:00 Runtime\r\nEasy / 202 Notes\r\nNormal / 270 Notes\r\nHard / 400 Notes\r\nExpert / 505 Notes\r\nExpert+ / 660 Notes\r\n\r\nGameplay: Coming Soon",uploader:{id:4284981,name:"skylerwallace",uniqueSet:!0,hash:"5cff0b7298cc5a672c84ea67",avatar:"https://cdn.beatsaver.com/avatar/398344856868487168.png",type:"DISCORD"},metadata:{bpm:168,duration:180,songName:"Thunder",songSubName:"Imagine Dragons",songAuthorName:"Skyler Wallace",levelAuthorName:"skylerwallace"},stats:{plays:0,downloads:8953,upvotes:3133,downvotes:134,score:.9188},uploaded:"2019-05-31T04:43:45Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"1374613734d2d110f06783c7b7c32579e7a2808f",key:"500d",state:"Published",createdAt:"2019-05-31T04:43:45Z",sageScore:8,diffs:[{njs:10,offset:0,notes:202,bombs:0,obstacles:5,nps:1.178,length:480,characteristic:"Standard",difficulty:"Easy",events:4955,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:171.429,paritySummary:{errors:38,warns:28,resets:0}},{njs:10,offset:0,notes:270,bombs:0,obstacles:7,nps:1.575,length:480,characteristic:"Standard",difficulty:"Normal",events:4955,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:171.429,paritySummary:{errors:33,warns:31,resets:0}},{njs:10,offset:0,notes:400,bombs:0,obstacles:10,nps:2.333,length:480,characteristic:"Standard",difficulty:"Hard",events:4955,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:171.429,paritySummary:{errors:55,warns:81,resets:0}},{njs:12,offset:0,notes:505,bombs:0,obstacles:13,nps:2.946,length:480,characteristic:"Standard",difficulty:"Expert",events:4955,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:171.429,paritySummary:{errors:47,warns:64,resets:0}},{njs:14,offset:1,notes:660,bombs:4,obstacles:14,nps:3.85,length:480,characteristic:"Standard",difficulty:"ExpertPlus",events:4955,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:171.429,paritySummary:{errors:39,warns:64,resets:0}}],downloadURL:"https://cdn.beatsaver.com/1374613734d2d110f06783c7b7c32579e7a2808f.zip",coverURL:"https://cdn.beatsaver.com/1374613734d2d110f06783c7b7c32579e7a2808f.jpg",previewURL:"https://cdn.beatsaver.com/1374613734d2d110f06783c7b7c32579e7a2808f.mp3"}],createdAt:"2019-05-31T04:43:45Z",updatedAt:"2019-05-31T04:43:45Z",lastPublishedAt:"2019-05-31T04:43:45Z"},{id:"4211",name:"Overkill - RIOT",description:"Thank you Everyone for the massive amount of support on this map. I'm very happy to release this as a V2 and hopefully you can all get some enjoyment like the first one did but with some very large QOL updates to the map as well that'll make the map in turn play much smoother and a ton of pattern changes that gives the map some more life! :D\r\n\r\nBig Thanks to RedMagi and Saut for modding and playtesting! :D",uploader:{id:408,name:"nuketime",uniqueSet:!0,hash:"5cff0b7498cc5a672c8507f7",avatar:"https://cdn.beatsaver.com/avatar/175811186007343104.png",type:"DISCORD"},metadata:{bpm:174,duration:308,songName:"Overkill",songSubName:"RIOT",songAuthorName:"Nuketime",levelAuthorName:"Nuketime"},stats:{plays:0,downloads:1444,upvotes:1211,downvotes:32,score:.9187},uploaded:"2019-03-30T19:12:13Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"aa94aeef877eecea90e4cf3795a84799056042e3",key:"4211",state:"Published",createdAt:"2019-03-30T19:12:13Z",sageScore:5,diffs:[{njs:19,offset:0,notes:1914,bombs:108,obstacles:368,nps:6.465,length:858.5,characteristic:"Standard",difficulty:"ExpertPlus",events:3602,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:296.035,paritySummary:{errors:56,warns:53,resets:0}}],downloadURL:"https://cdn.beatsaver.com/aa94aeef877eecea90e4cf3795a84799056042e3.zip",coverURL:"https://cdn.beatsaver.com/aa94aeef877eecea90e4cf3795a84799056042e3.jpg",previewURL:"https://cdn.beatsaver.com/aa94aeef877eecea90e4cf3795a84799056042e3.mp3"}],createdAt:"2019-03-30T19:12:13Z",updatedAt:"2019-03-30T19:12:13Z",lastPublishedAt:"2019-03-30T19:12:13Z"},{id:"827d",name:"Robin Hustin x TobiMorrow - Light It Up (feat. Jex)",description:"Brings me back to when I made lights for this a long time ago. \n\nVideo: https://youtu.be/ttzkzmB39Bs\n\nEasy: Notes: 117 NPS: 1.31 NJS: 10\nNormal: Notes: 169 NPS: 1.9 NJS: 12\nHard: Notes: 237 NPS: 2.66 NJS: 14\nExpert: Notes: 325 NPS: 3.61 NJS: 16\nExpert+: Notes: 452 NPS: 5.02 NJS: 18\n\nCheck out my lightshows here: https://www.youtube.com/playlist?list=PLwl6dYq72JOYu1BnKl5WATa4Dh__ZJmuN",uploader:{id:14808,name:"halcyon12",uniqueSet:!0,hash:"5cff0b7698cc5a672c8547ad",avatar:"https://www.gravatar.com/avatar/5cff0b7698cc5a672c8547ad?d=retro",type:"SIMPLE"},metadata:{bpm:128,duration:102,songName:"Light It Up",songSubName:"ft. Jex",songAuthorName:"Robin Hustin, TobiMorrow",levelAuthorName:"Halcyon12"},stats:{plays:0,downloads:5922,upvotes:1375,downvotes:40,score:.9186},uploaded:"2020-01-29T22:25:19.574Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"22da796f08f777c437d4996d52ea1778e8e762ae",key:"827d",state:"Published",createdAt:"2020-01-29T22:25:19.574Z",sageScore:7,diffs:[{njs:10,offset:1,notes:117,bombs:0,obstacles:9,nps:1.312,length:190.25,characteristic:"Standard",difficulty:"Easy",events:3837,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:89.18,paritySummary:{errors:2,warns:2,resets:0}},{njs:12,offset:.5,notes:169,bombs:0,obstacles:8,nps:1.895,length:190.25,characteristic:"Standard",difficulty:"Normal",events:3837,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:89.18,paritySummary:{errors:4,warns:1,resets:0}},{njs:14,offset:0,notes:237,bombs:0,obstacles:17,nps:2.658,length:190.25,characteristic:"Standard",difficulty:"Hard",events:3837,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:89.18,paritySummary:{errors:1,warns:0,resets:0}},{njs:16,offset:-.25,notes:325,bombs:0,obstacles:6,nps:3.611,length:192,characteristic:"Standard",difficulty:"Expert",events:3837,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:90,paritySummary:{errors:0,warns:0,resets:0}},{njs:18,offset:-.5,notes:452,bombs:0,obstacles:16,nps:5.022,length:192,characteristic:"Standard",difficulty:"ExpertPlus",events:3837,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:90,paritySummary:{errors:0,warns:0,resets:0}},{njs:12,offset:0,notes:0,bombs:0,obstacles:0,nps:0,length:0,characteristic:"Lightshow",difficulty:"ExpertPlus",events:3837,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:0,paritySummary:{errors:0,warns:0,resets:0}}],downloadURL:"https://cdn.beatsaver.com/22da796f08f777c437d4996d52ea1778e8e762ae.zip",coverURL:"https://cdn.beatsaver.com/22da796f08f777c437d4996d52ea1778e8e762ae.jpg",previewURL:"https://cdn.beatsaver.com/22da796f08f777c437d4996d52ea1778e8e762ae.mp3"}],createdAt:"2020-01-29T22:25:19.574Z",updatedAt:"2020-01-29T22:25:19.574Z",lastPublishedAt:"2020-01-29T22:25:19.574Z"},{id:"105f5",name:"Porter Robinson & Madeon - Shelter",description:"A map that doesnt mess with chroma, but with boost lights\n\nBPM 100\nWonder (Expert)\n\nThis map was a special request from Lukken\n\npreview: https://www.youtube.com/watch?v=T1NscB2M4zI\n\nPlease enjoy\n\nDM any feedback on Discord\nETAN#8341",uploader:{id:4235140,name:"etan",uniqueSet:!0,hash:"5cff0b7798cc5a672c855775",avatar:"https://cdn.beatsaver.com/avatar/136373107559497728.png",type:"DISCORD"},metadata:{bpm:100,duration:221,songName:"Shelter",songSubName:"",songAuthorName:"Porter Robinson & Madeon",levelAuthorName:"ETAN"},stats:{plays:0,downloads:6551,upvotes:893,downvotes:18,score:.9185},uploaded:"2020-10-29T23:59:50.753Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"1b3a2fa722e093cae37b52ba5d412496b3a20b82",key:"105f5",state:"Published",createdAt:"2020-10-29T23:59:50.753Z",sageScore:5,diffs:[{njs:16,offset:.4,notes:707,bombs:46,obstacles:13,nps:3.272,length:360.078,characteristic:"Standard",difficulty:"Expert",events:6858,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:216.047,paritySummary:{errors:0,warns:0,resets:0}}],downloadURL:"https://cdn.beatsaver.com/1b3a2fa722e093cae37b52ba5d412496b3a20b82.zip",coverURL:"https://cdn.beatsaver.com/1b3a2fa722e093cae37b52ba5d412496b3a20b82.jpg",previewURL:"https://cdn.beatsaver.com/1b3a2fa722e093cae37b52ba5d412496b3a20b82.mp3"}],createdAt:"2020-10-29T23:59:50.753Z",updatedAt:"2020-10-29T23:59:50.753Z",lastPublishedAt:"2020-10-29T23:59:50.753Z"},{id:"8b48",name:"Doja Cat - Boss Bitch",description:"This is my first Beat Saber map. Thank you to CheckThePan, PlusOneRabbit, CyanSnow, Aeroluna and everyone in Noodle for helping me get started. You are all great wonderful people I am honored to call friends. <3\nDuration: 2:14\nBPM: 126\nMapped NPS: 2.96\nNotes: 371",uploader:{id:4543,name:"dat360noscope",uniqueSet:!0,hash:"5e58387f521acf00068f9ad4",avatar:"https://www.gravatar.com/avatar/5e58387f521acf00068f9ad4?d=retro",type:"SIMPLE"},metadata:{bpm:126,duration:134,songName:"Boss Bitch",songSubName:"",songAuthorName:"Doja Cat",levelAuthorName:"Dat360NoScope"},stats:{plays:0,downloads:2843,upvotes:868,downvotes:17,score:.9185},uploaded:"2020-02-27T21:53:18.919Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"2105facb044e1289ce1b84a9377bdd2a982f73e1",key:"8b48",state:"Published",createdAt:"2020-02-27T21:53:18.919Z",sageScore:4,diffs:[{njs:12,offset:0,notes:371,bombs:0,obstacles:87,nps:2.957,length:263.5,characteristic:"Standard",difficulty:"Hard",events:901,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:125.476,paritySummary:{errors:7,warns:1,resets:0}}],downloadURL:"https://cdn.beatsaver.com/2105facb044e1289ce1b84a9377bdd2a982f73e1.zip",coverURL:"https://cdn.beatsaver.com/2105facb044e1289ce1b84a9377bdd2a982f73e1.jpg",previewURL:"https://cdn.beatsaver.com/2105facb044e1289ce1b84a9377bdd2a982f73e1.mp3"}],createdAt:"2020-02-27T21:53:18.919Z",updatedAt:"2020-02-27T21:53:18.919Z",lastPublishedAt:"2020-02-27T21:53:18.919Z"},{id:"7067",name:"Sorairo Days (TV Size) [Gurren Lagann Opening] - Shoko Nakagawa",description:"This map was converted from one of my old maps.\n\nFeel free to DM me on discord @Joetastic#2501",uploader:{id:58338,name:"Joetastic",uniqueSet:!0,hash:"5cff0b7498cc5a672c85050e",avatar:"https://cdn.beatsaver.com/avatar/227767566402191360.png",type:"DISCORD"},metadata:{bpm:174,duration:93,songName:"Sorairo Days (TV Size)",songSubName:"",songAuthorName:"Shoko Nakagawa",levelAuthorName:"Joetastic"},stats:{plays:0,downloads:2600,upvotes:940,downvotes:20,score:.9185},uploaded:"2019-11-17T06:13:49.456Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"5a5f6a419abfcc998262b28f1fe4e3baa7d3d1bc",key:"7067",state:"Published",createdAt:"2019-11-17T06:13:49.456Z",sageScore:2,diffs:[{njs:10,offset:0,notes:212,bombs:0,obstacles:0,nps:2.726,length:225.5,characteristic:"Standard",difficulty:"Normal",events:1518,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:77.759,paritySummary:{errors:22,warns:13,resets:0}},{njs:11,offset:0,notes:290,bombs:0,obstacles:0,nps:3.729,length:225.5,characteristic:"Standard",difficulty:"Hard",events:1518,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:77.759,paritySummary:{errors:16,warns:7,resets:0}},{njs:13,offset:0,notes:332,bombs:0,obstacles:0,nps:4.27,length:225.5,characteristic:"Standard",difficulty:"Expert",events:1518,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:77.759,paritySummary:{errors:9,warns:11,resets:0}},{njs:15,offset:0,notes:469,bombs:0,obstacles:0,nps:5.978,length:227.5,characteristic:"Standard",difficulty:"ExpertPlus",events:1543,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:78.448,paritySummary:{errors:22,warns:33,resets:0}}],downloadURL:"https://cdn.beatsaver.com/5a5f6a419abfcc998262b28f1fe4e3baa7d3d1bc.zip",coverURL:"https://cdn.beatsaver.com/5a5f6a419abfcc998262b28f1fe4e3baa7d3d1bc.jpg",previewURL:"https://cdn.beatsaver.com/5a5f6a419abfcc998262b28f1fe4e3baa7d3d1bc.mp3"}],createdAt:"2019-11-17T06:13:49.456Z",updatedAt:"2019-11-17T06:13:49.456Z",lastPublishedAt:"2019-11-17T06:13:49.456Z"},{id:"19a",name:"NSP - Cool Patrol",description:"Normal, Hard, and Expert difficulties available. Relatively close to vanilla balancing.\r\n\r\nPreview: https://youtu.be/e5W5EhEE0V4\r\n\r\nBPM: 130\r\nNotes: 651 (Expert)\r\nDuration: 3:09",uploader:{id:45732,name:"calijor",uniqueSet:!1,hash:"5cff0b7298cc5a672c84ebb1",avatar:"https://www.gravatar.com/avatar/5cff0b7298cc5a672c84ebb1?d=retro",type:"SIMPLE"},metadata:{bpm:130,duration:189,songName:"Cool Patrol",songSubName:"",songAuthorName:"Ninja Sex Party",levelAuthorName:"calijor"},stats:{plays:0,downloads:1119,upvotes:1325,downvotes:38,score:.9184},uploaded:"2018-05-22T04:53:18Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"c87de9a5e4e8aa91d57403bde711033770b3c4a8",key:"19a",state:"Published",createdAt:"2018-05-22T04:53:18Z",sageScore:5,diffs:[{njs:10,offset:0,notes:434,bombs:0,obstacles:6,nps:2.351,length:399.938,characteristic:"Standard",difficulty:"Normal",events:1533,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:184.587,paritySummary:{errors:79,warns:32,resets:0}},{njs:10,offset:0,notes:560,bombs:0,obstacles:6,nps:3.034,length:399.938,characteristic:"Standard",difficulty:"Hard",events:1533,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:184.587,paritySummary:{errors:145,warns:31,resets:0}},{njs:10,offset:0,notes:651,bombs:0,obstacles:8,nps:3.527,length:399.938,characteristic:"Standard",difficulty:"Expert",events:1533,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:184.587,paritySummary:{errors:136,warns:48,resets:0}}],downloadURL:"https://cdn.beatsaver.com/c87de9a5e4e8aa91d57403bde711033770b3c4a8.zip",coverURL:"https://cdn.beatsaver.com/c87de9a5e4e8aa91d57403bde711033770b3c4a8.jpg",previewURL:"https://cdn.beatsaver.com/c87de9a5e4e8aa91d57403bde711033770b3c4a8.mp3"}],createdAt:"2018-05-22T04:53:18Z",updatedAt:"2018-05-22T04:53:18Z",lastPublishedAt:"2018-05-22T04:53:18Z"},{id:"3c89",name:"99.9 // Mob Choir feat. Sajou no Hana",description:"99.9, the OP Mob Psycho 100 Season 2\r\nBy Mob Choir feat. Sajou no Hana\r\nVideo: https://youtu.be/Qbk-0-p60WY\r\n\r\nShoutout to Testers:\r\nRedMagi\r\nTrolav",uploader:{id:39365,name:"todokete",uniqueSet:!0,hash:"5cff0b7398cc5a672c84ee70",avatar:"https://www.gravatar.com/avatar/5cff0b7398cc5a672c84ee70?d=retro",type:"SIMPLE"},metadata:{bpm:168,duration:98,songName:"99.9",songSubName:"MOB CHOIR feat. sajou no hana",songAuthorName:"Todokete",levelAuthorName:"todokete"},stats:{plays:0,downloads:3540,upvotes:1704,downvotes:57,score:.9183},uploaded:"2019-03-08T16:51:17Z",automapper:!1,ranked:!0,qualified:!1,versions:[{hash:"15ba13d183c824f46d2fc68ff5d6ba52ced1fad5",key:"3c89",state:"Published",createdAt:"2019-03-08T16:51:17Z",sageScore:3,diffs:[{njs:10,offset:0,notes:175,bombs:0,obstacles:0,nps:1.976,length:248,characteristic:"Standard",difficulty:"Normal",events:3251,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:88.571,paritySummary:{errors:17,warns:14,resets:0},stars:1.03},{njs:11,offset:0,notes:274,bombs:0,obstacles:0,nps:3.094,length:248,characteristic:"Standard",difficulty:"Hard",events:3251,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:88.571,paritySummary:{errors:17,warns:5,resets:0},stars:1.73},{njs:13,offset:0,notes:376,bombs:0,obstacles:0,nps:4.245,length:248,characteristic:"Standard",difficulty:"Expert",events:3251,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:88.571,paritySummary:{errors:22,warns:35,resets:0}},{njs:16,offset:0,notes:482,bombs:0,obstacles:0,nps:5.442,length:248,characteristic:"Standard",difficulty:"ExpertPlus",events:3251,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:88.571,paritySummary:{errors:20,warns:35,resets:0}}],downloadURL:"https://cdn.beatsaver.com/15ba13d183c824f46d2fc68ff5d6ba52ced1fad5.zip",coverURL:"https://cdn.beatsaver.com/15ba13d183c824f46d2fc68ff5d6ba52ced1fad5.jpg",previewURL:"https://cdn.beatsaver.com/15ba13d183c824f46d2fc68ff5d6ba52ced1fad5.mp3"}],createdAt:"2019-03-08T16:51:17Z",updatedAt:"2019-03-08T16:51:17Z",lastPublishedAt:"2019-03-08T16:51:17Z"},{id:"1a0b7",name:"[Electro Swing Pack] Jamie Berry - Lost In The Rhythm (ft. Octavia Rose)",description:"Nixie Presents: Electro Swing Pack!\n\n10 electro swing songs with expert and expert+ diffs to make your booty swing!\n\nGet The Pack: \nhttps://bsaber.com/electro-swing-pack/\n\nMap Gameplay:\nhttps://youtu.be/4O8l7rq4eHI\n\nComplete Pack Playthrough:\nhttps://youtu.be/yj9rw4MEh7s\n\nHeyya! After looking for some dancey electro swing maps, I noticed that there barely are any!\nSo I took matters into my own hands, learning mapping basically from scratch,\nscrapping my first failed attempts and then finally making a map that was good.\nI found it so fun that I ended up making 9 more maps,\nand fine tuned them with the help of the testplayers in BSMG,\nas well as the lovely curators from the bsaber discord.\n\nHuge thanks in particular to:\nMonstor, Bearly, Noxn, Bullet, Vaser888, Tocxx, Jafdy, Storm Knight and Pixelguy!\n\nIf you want to talk to me, here is my Discord:\nNixie.Korten#6944",uploader:{id:4286374,name:"nixiekorten",uniqueSet:!0,hash:"6096752e12772e0006e2f7e6",avatar:"https://cdn.beatsaver.com/avatar/840550221690699776.png",type:"DISCORD"},metadata:{bpm:121,duration:186,songName:"Lost In The Rhythm",songSubName:"(ft. Octavia Rose)",songAuthorName:"Jamie Berry",levelAuthorName:"Nixie.Korten"},stats:{plays:0,downloads:13219,upvotes:666,downvotes:9,score:.9182},uploaded:"2021-07-08T15:24:57.679Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"6d006d47880a45a134844f3787f3c184881d4673",key:"1a0b7",state:"Published",createdAt:"2021-07-08T15:24:57.679Z",sageScore:5,diffs:[{njs:16,offset:-.25,notes:591,bombs:0,obstacles:8,nps:3.274,length:364,characteristic:"Standard",difficulty:"Expert",events:3271,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:180.496,paritySummary:{errors:0,warns:0,resets:0}},{njs:19,offset:.25,notes:821,bombs:0,obstacles:8,nps:4.549,length:364,characteristic:"Standard",difficulty:"ExpertPlus",events:3271,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:180.496,paritySummary:{errors:0,warns:0,resets:0}}],downloadURL:"https://cdn.beatsaver.com/6d006d47880a45a134844f3787f3c184881d4673.zip",coverURL:"https://cdn.beatsaver.com/6d006d47880a45a134844f3787f3c184881d4673.jpg",previewURL:"https://cdn.beatsaver.com/6d006d47880a45a134844f3787f3c184881d4673.mp3"}],createdAt:"2021-07-08T15:24:57.679Z",updatedAt:"2021-07-08T15:24:57.679Z",lastPublishedAt:"2021-07-08T15:24:57.679Z"},{id:"84d6",name:"drop pop candy - Reol ft. Giga-P (+ Luka & Rin) [Std, 360 & 90]",description:"Another song by the amazing duo Reol and Giga-P, drop pop candy entered Hall of Fame just seven days after release!\n\nExpert+ guest difficulty by AaltopahWi! Everything else (Expert-Easy, 360, 90 and lighting) by me, Kolezan.\n\nThe Vocaloid song version with Megurine Luka and Kagamine Rin is also included!\nTo use this version do a file search in your Beat Saber_data/CustomLevels folder for “Reol_drop_pop_candy.egg”, open the folder which that file resides in, then rename “Reol_drop_pop_candy.egg” to “Reol_drop_pop_candy_Reol_and_Giga.egg”, and then rename “Reol_drop_pop_candy_Luka_and_Rin.egg” to “Reol_drop_pop_candy.egg”. Done!\n\nThanks to Maralade for pushing me to map this song sooner than later!\n\nMap is a tad harder than average, mostly to keep up with all the interesting points in the song. Map also contains custom map colors based on the music video.\n\nNo map video preview.\n\nBPM: 130\nDuration: 3:44\n\n== Standard mode: ==\nEasy:\nNPS 1.36, 306 notes, 50 walls, 0 bombs\n\nNormal:\nNPS 2.10, 470 notes, 16 walls, 0 bombs\n\nHard:\nNPS 2.86, 641 notes, 5 walls, 0 bombs\n\nExpert:\nNPS 3.85, 863 notes, 5 walls, 0 bombs\n\nExpert+ (by AaltopahWi):\nNPS 4.61, 1035 notes, 7 walls, 0 bombs\n\n== 360 degree mode: ==\nExpert:\nNPS 3.89, 873 notes, 39 walls, 0 bombs\n\n== 90 degree mode: ==\nExpert:\nNPS 3.89, 873 notes, 38 walls, 0 bombs\n\nThanks to Sorukun, fruhead, Checkthepan and Helen Carnate for playtesting!\n\nEnjoy!",uploader:{id:4285318,name:"kolezan",uniqueSet:!0,hash:"5cff0b7398cc5a672c84fcbb",avatar:"https://cdn.beatsaver.com/avatar/220513618763055106.png",type:"DISCORD"},metadata:{bpm:130,duration:224,songName:"drop pop candy",songSubName:"ft. GigaP",songAuthorName:"Reol",levelAuthorName:"Kolezan (E+ by AaltopahWi)"},stats:{plays:0,downloads:2815,upvotes:1257,downvotes:35,score:.9182},uploaded:"2020-02-07T07:19:14.938Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"50e4c2101cc079a98f88e80aa7091e60bb6d1d31",key:"84d6",state:"Published",createdAt:"2020-02-07T07:19:14.938Z",sageScore:6,diffs:[{njs:9,offset:0,notes:306,bombs:0,obstacles:50,nps:1.42,length:467,characteristic:"Standard",difficulty:"Easy",events:2147,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:215.538,paritySummary:{errors:80,warns:21,resets:0}},{njs:11,offset:1,notes:470,bombs:0,obstacles:16,nps:2.164,length:470.5,characteristic:"Standard",difficulty:"Normal",events:2147,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:217.154,paritySummary:{errors:67,warns:51,resets:0}},{njs:14,offset:.5,notes:641,bombs:0,obstacles:5,nps:2.927,length:474.5,characteristic:"Standard",difficulty:"Hard",events:2147,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:219,paritySummary:{errors:33,warns:21,resets:0}},{njs:17,offset:.125,notes:863,bombs:0,obstacles:5,nps:3.941,length:474.5,characteristic:"Standard",difficulty:"Expert",events:2147,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:219,paritySummary:{errors:21,warns:36,resets:0}},{njs:19,offset:-.25,notes:1035,bombs:0,obstacles:7,nps:4.726,length:474.5,characteristic:"Standard",difficulty:"ExpertPlus",events:2147,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:219,paritySummary:{errors:3,warns:6,resets:0}},{njs:15,offset:.25,notes:873,bombs:0,obstacles:38,nps:3.986,length:474.5,characteristic:"90Degree",difficulty:"Expert",events:2464,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:219,paritySummary:{errors:26,warns:37,resets:0}},{njs:15,offset:.25,notes:873,bombs:0,obstacles:39,nps:3.986,length:474.5,characteristic:"360Degree",difficulty:"Expert",events:2467,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:219,paritySummary:{errors:26,warns:37,resets:0}}],downloadURL:"https://cdn.beatsaver.com/50e4c2101cc079a98f88e80aa7091e60bb6d1d31.zip",coverURL:"https://cdn.beatsaver.com/50e4c2101cc079a98f88e80aa7091e60bb6d1d31.jpg",previewURL:"https://cdn.beatsaver.com/50e4c2101cc079a98f88e80aa7091e60bb6d1d31.mp3"}],createdAt:"2020-02-07T07:19:14.938Z",updatedAt:"2020-02-07T07:19:14.938Z",lastPublishedAt:"2020-02-07T07:19:14.938Z"},{id:"68bb",name:"FREEDOM DiVE (ZipperKim Remix)",description:"Remixer: https://youtu.be/IQ7KvbSrm7M\n\nPreview: https://youtu.be/L2cs_elU7rE\n\n\nTwitter: https://twitter.com/Dack731",uploader:{id:4285250,name:"dack",uniqueSet:!0,hash:"5cff0b7598cc5a672c852c6f",avatar:"https://cdn.beatsaver.com/avatar/297344689798119424.png",type:"DISCORD"},metadata:{bpm:140,duration:160,songName:"FREEDOM DiVE",songSubName:"(ZipperKim Remix)",songAuthorName:"xi",levelAuthorName:"Dack"},stats:{plays:0,downloads:4015,upvotes:1940,downvotes:70,score:.9181},uploaded:"2019-10-08T23:40:00.119Z",automapper:!1,ranked:!0,qualified:!1,versions:[{hash:"f1591bf3f2d821a48bb86214c9da47d8cff24046",key:"68bb",state:"Published",createdAt:"2019-10-08T23:40:00.119Z",sageScore:6,diffs:[{njs:14.5,offset:0,notes:529,bombs:4,obstacles:2,nps:3.547,length:348,characteristic:"Standard",difficulty:"Hard",events:3703,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:149.143,paritySummary:{errors:0,warns:0,resets:1},stars:2.14},{njs:16,offset:0,notes:643,bombs:4,obstacles:0,nps:4.311,length:348,characteristic:"Standard",difficulty:"Expert",events:3703,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:149.143,paritySummary:{errors:7,warns:4,resets:1},stars:2.84},{njs:18,offset:0,notes:752,bombs:4,obstacles:0,nps:5.042,length:348,characteristic:"Standard",difficulty:"ExpertPlus",events:3703,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:149.143,paritySummary:{errors:9,warns:11,resets:1},stars:4.16}],downloadURL:"https://cdn.beatsaver.com/f1591bf3f2d821a48bb86214c9da47d8cff24046.zip",coverURL:"https://cdn.beatsaver.com/f1591bf3f2d821a48bb86214c9da47d8cff24046.jpg",previewURL:"https://cdn.beatsaver.com/f1591bf3f2d821a48bb86214c9da47d8cff24046.mp3"}],createdAt:"2019-10-08T23:40:00.119Z",updatedAt:"2019-10-08T23:40:00.119Z",lastPublishedAt:"2019-10-08T23:40:00.119Z"},{id:"456d",name:"Wiz Khalifa - Black and Yellow",description:"Yeah, uh huh, you know what it is! It's a new map! Black and Yellow by Wiz Khalifa. The colors? Black and yellow, black and yellow, black and yellow, black and yellow.\r\nI think it's a fun map, so I hope you enjoy as well!\r\n\r\nAs always, you can give me feedback on Beast Saber or in Discord @Maarten#9596.\r\n\r\nPreview video: https://www.youtube.com/watch?v=fla0VfHh3WE",uploader:{id:57657,name:"pixelguymm",uniqueSet:!0,hash:"5cff0b7698cc5a672c8541a8",avatar:"https://cdn.beatsaver.com/avatar/434386941547511818.png",type:"DISCORD"},metadata:{bpm:164,duration:102,songName:"Black and Yellow",songSubName:"Wiz Khalifa",songAuthorName:"Pixelguy",levelAuthorName:"pixelguymm"},stats:{plays:0,downloads:2927,upvotes:1171,downvotes:31,score:.9181},uploaded:"2019-04-13T08:58:48Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"b03042e8647cca08cdc5b80e23ed569ef3dbc201",key:"456d",state:"Published",createdAt:"2019-04-13T08:58:48Z",sageScore:6,diffs:[{njs:12,offset:0,notes:144,bombs:0,obstacles:0,nps:1.55,length:254,characteristic:"Standard",difficulty:"Easy",events:1062,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:92.927,paritySummary:{errors:7,warns:0,resets:0}},{njs:12,offset:0,notes:208,bombs:0,obstacles:0,nps:2.23,length:255,characteristic:"Standard",difficulty:"Normal",events:1062,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:93.293,paritySummary:{errors:8,warns:8,resets:0}},{njs:14,offset:0,notes:293,bombs:16,obstacles:0,nps:3.135,length:255.5,characteristic:"Standard",difficulty:"Hard",events:1062,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:93.476,paritySummary:{errors:18,warns:14,resets:3}},{njs:16,offset:0,notes:402,bombs:20,obstacles:0,nps:4.301,length:255.5,characteristic:"Standard",difficulty:"Expert",events:1062,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:93.476,paritySummary:{errors:18,warns:16,resets:8}}],downloadURL:"https://cdn.beatsaver.com/b03042e8647cca08cdc5b80e23ed569ef3dbc201.zip",coverURL:"https://cdn.beatsaver.com/b03042e8647cca08cdc5b80e23ed569ef3dbc201.jpg",previewURL:"https://cdn.beatsaver.com/b03042e8647cca08cdc5b80e23ed569ef3dbc201.mp3"}],createdAt:"2019-04-13T08:58:48Z",updatedAt:"2019-04-13T08:58:48Z",lastPublishedAt:"2019-04-13T08:58:48Z"},{id:"6554",name:"Windows Down - Nightcore",description:"Youtube Preview: https://youtu.be/z-Iaze8Ac60",uploader:{id:23751,name:"monteblanco",uniqueSet:!0,hash:"5cff0b7798cc5a672c855ef5",avatar:"https://www.gravatar.com/avatar/5cff0b7798cc5a672c855ef5?d=retro",type:"SIMPLE"},metadata:{bpm:159,duration:159,songName:"Windows Down - Nightcore",songSubName:"",songAuthorName:"Nightcore Reality",levelAuthorName:"Monteblanco"},stats:{plays:0,downloads:697,upvotes:786,downvotes:14,score:.918},uploaded:"2019-09-23T01:31:55.127Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"4bec5881a2090ab3e655fecdec1eed5324703c94",key:"6554",state:"Published",createdAt:"2019-09-23T01:31:55.127Z",sageScore:4,diffs:[{njs:15,offset:0,notes:518,bombs:20,obstacles:27,nps:3.348,length:410,characteristic:"Standard",difficulty:"Expert",events:646,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:154.717,paritySummary:{errors:0,warns:0,resets:6}}],downloadURL:"https://cdn.beatsaver.com/4bec5881a2090ab3e655fecdec1eed5324703c94.zip",coverURL:"https://cdn.beatsaver.com/4bec5881a2090ab3e655fecdec1eed5324703c94.jpg",previewURL:"https://cdn.beatsaver.com/4bec5881a2090ab3e655fecdec1eed5324703c94.mp3"}],createdAt:"2019-09-23T01:31:55.127Z",updatedAt:"2019-09-23T01:31:55.127Z",lastPublishedAt:"2019-09-23T01:31:55.127Z"},{id:"2bb7",name:"Join Us for a Bite (FNAF Sister Location) - JT Music feat. Andrea Storm Kaden",description:"BPM: 86 (172 at points)\r\nNotes: Hard - 628 , Expert - 745\r\nWalls: 14\r\n\r\nThanks to Redmagi for playtesting, and AaltopahWi for lighting advice.",uploader:{id:4285188,name:"fruhead",uniqueSet:!0,hash:"5cff0b7598cc5a672c852683",avatar:"https://cdn.beatsaver.com/avatar/174000100413145090.png",type:"DISCORD"},metadata:{bpm:86,duration:225,songName:"Join Us for a Bite (FNAF Sister Location)",songSubName:"JT Music feat. Andrea Storm Kaden",songAuthorName:"fruhead",levelAuthorName:"fruhead"},stats:{plays:0,downloads:1667,upvotes:993,downvotes:23,score:.918},uploaded:"2019-01-07T06:04:31Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"7974c174533415ccc43dcd75678aedd1aec44f96",key:"2bb7",state:"Published",createdAt:"2019-01-07T06:04:31Z",sageScore:6,diffs:[{njs:12,offset:0,notes:628,bombs:0,obstacles:14,nps:2.867,length:314,characteristic:"Standard",difficulty:"Hard",events:1759,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:219.07,paritySummary:{errors:43,warns:22,resets:0}},{njs:13,offset:0,notes:745,bombs:0,obstacles:14,nps:3.401,length:314,characteristic:"Standard",difficulty:"Expert",events:1760,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:219.07,paritySummary:{errors:30,warns:24,resets:0}}],downloadURL:"https://cdn.beatsaver.com/7974c174533415ccc43dcd75678aedd1aec44f96.zip",coverURL:"https://cdn.beatsaver.com/7974c174533415ccc43dcd75678aedd1aec44f96.jpg",previewURL:"https://cdn.beatsaver.com/7974c174533415ccc43dcd75678aedd1aec44f96.mp3"}],createdAt:"2019-01-07T06:04:31Z",updatedAt:"2019-01-07T06:04:31Z",lastPublishedAt:"2019-01-07T06:04:31Z"},{id:"e4",name:"Every Time We Touch - Cascada",description:"Expert Only\r\nTime - 3:19\r\nBPM - 142\r\nNotes- 564",uploader:{id:49373,name:"purphoros",uniqueSet:!0,hash:"5cff0b7298cc5a672c84ea98",avatar:"https://www.gravatar.com/avatar/5cff0b7298cc5a672c84ea98?d=retro",type:"SIMPLE"},metadata:{bpm:142,duration:199,songName:"Every Time We Touch",songSubName:"",songAuthorName:"Cascada",levelAuthorName:"purphoros"},stats:{plays:0,downloads:15282,upvotes:10721,downvotes:627,score:.918},uploaded:"2018-05-18T03:51:03Z",automapper:!1,ranked:!0,qualified:!1,versions:[{hash:"bc6c7ef1385db4c11c59736d2b32eacf48c95bd9",key:"e4",state:"Published",createdAt:"2018-05-18T03:51:03Z",sageScore:4,diffs:[{njs:10,offset:0,notes:564,bombs:0,obstacles:0,nps:3.178,length:420,characteristic:"Standard",difficulty:"Expert",events:10,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:177.465,paritySummary:{errors:108,warns:44,resets:0},stars:2.13}],downloadURL:"https://cdn.beatsaver.com/bc6c7ef1385db4c11c59736d2b32eacf48c95bd9.zip",coverURL:"https://cdn.beatsaver.com/bc6c7ef1385db4c11c59736d2b32eacf48c95bd9.jpg",previewURL:"https://cdn.beatsaver.com/bc6c7ef1385db4c11c59736d2b32eacf48c95bd9.mp3"}],createdAt:"2018-05-18T03:51:03Z",updatedAt:"2018-05-18T03:51:03Z",lastPublishedAt:"2018-05-18T03:51:03Z"},{id:"3519",name:"Happier Sunflower - Marshmello, Post Malone, Swae Lee, Bastille [Mashup by Dj Pyromania]",description:"Preview:\r\nhttps://www.youtube.com/watch?v=eRwvvhMrkcQ",uploader:{id:4286278,name:"ruckus",uniqueSet:!0,hash:"5cff0b7398cc5a672c84f1d8",avatar:"https://cdn.beatsaver.com/avatar/239082462083284992.png",type:"DISCORD"},metadata:{bpm:100,duration:205,songName:"Happier Sunflower",songSubName:"Dj Pyromania, Marshmello, Post Malone, Bastille, Swae Lee",songAuthorName:"Ruckus",levelAuthorName:"ruckus"},stats:{plays:0,downloads:5342,upvotes:1788,downvotes:62,score:.918},uploaded:"2019-02-10T18:46:16Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"ec8dc26331e1eff4d4fabeed45b927c49a61f8ca",key:"3519",state:"Published",createdAt:"2019-02-10T18:46:16Z",sageScore:5,diffs:[{njs:14,offset:0,notes:348,bombs:0,obstacles:24,nps:1.747,length:332,characteristic:"Standard",difficulty:"Normal",events:2700,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:199.2,paritySummary:{errors:24,warns:16,resets:0}},{njs:14,offset:0,notes:718,bombs:0,obstacles:31,nps:3.604,length:332.063,characteristic:"Standard",difficulty:"Expert",events:2700,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:199.238,paritySummary:{errors:47,warns:69,resets:0}}],downloadURL:"https://cdn.beatsaver.com/ec8dc26331e1eff4d4fabeed45b927c49a61f8ca.zip",coverURL:"https://cdn.beatsaver.com/ec8dc26331e1eff4d4fabeed45b927c49a61f8ca.jpg",previewURL:"https://cdn.beatsaver.com/ec8dc26331e1eff4d4fabeed45b927c49a61f8ca.mp3"}],createdAt:"2019-02-10T18:46:16Z",updatedAt:"2019-02-10T18:46:16Z",lastPublishedAt:"2019-02-10T18:46:16Z"},{id:"c767",name:"We'll Meet Again",description:"Decided to wall map this beautiful song, hope you all love it!\n---------------------------------------------\n\nQuestions? Feedback? Map not working? \nmessage me on discord: Reddek#5864",uploader:{id:4233941,name:"reddek",uniqueSet:!0,hash:"5dbfb4426dea0b0006bd328d",avatar:"https://cdn.beatsaver.com/avatar/177436487086768129.png",type:"DISCORD"},metadata:{bpm:192,duration:196,songName:"We'll Meet Again",songSubName:"",songAuthorName:"TheFatRat & Laura Brehm",levelAuthorName:"Reddek"},stats:{plays:0,downloads:1398,upvotes:758,downvotes:13,score:.9179},uploaded:"2020-07-25T12:21:48.657Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"4e3bc64c9aca00a925848905caccd27b5f390573",key:"c767",state:"Published",createdAt:"2020-07-25T12:21:48.657Z",sageScore:3,diffs:[{njs:18,offset:0,notes:721,bombs:34,obstacles:17842,nps:4.006,length:576,characteristic:"Standard",difficulty:"ExpertPlus",events:2009,chroma:!0,me:!1,ne:!0,cinema:!1,seconds:180,paritySummary:{errors:0,warns:0,resets:2}}],downloadURL:"https://cdn.beatsaver.com/4e3bc64c9aca00a925848905caccd27b5f390573.zip",coverURL:"https://cdn.beatsaver.com/4e3bc64c9aca00a925848905caccd27b5f390573.jpg",previewURL:"https://cdn.beatsaver.com/4e3bc64c9aca00a925848905caccd27b5f390573.mp3"}],createdAt:"2020-07-25T12:21:48.657Z",updatedAt:"2020-07-25T12:21:48.657Z",lastPublishedAt:"2020-07-25T12:21:48.657Z"},{id:"b99e",name:"How You Like That - Blackpink",description:"All difficulties available.\n\nExpert+ preview (pre-release version): https://youtu.be/seIKt_PR7hg\n\nSpecial thanks to lilqbunny for setting up the audio.\n\nFollow me on Twitter u won't: https://twitter.com/aggrogahu\nCatch me live on Twitch: https://www.twitch.tv/aggrogahu\nJoin the KPOP Beat Saber discord: https://discord.gg/c9uHGYP",uploader:{id:4284613,name:"aggrogahu",uniqueSet:!0,hash:"5cff0b7398cc5a672c84fdad",avatar:"https://cdn.beatsaver.com/avatar/158363872649150464.png",type:"DISCORD"},metadata:{bpm:130,duration:181,songName:"How You Like That",songSubName:"",songAuthorName:"Blackpink",levelAuthorName:"aggrogahu"},stats:{plays:0,downloads:11418,upvotes:1451,downvotes:45,score:.9179},uploaded:"2020-07-05T06:16:58.371Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"54f993f61f0ea48ddbb764f13936cc78799046a5",key:"b99e",state:"Published",createdAt:"2020-07-05T06:16:58.371Z",sageScore:7,diffs:[{njs:10,offset:1,notes:216,bombs:6,obstacles:16,nps:1.286,length:364,characteristic:"Standard",difficulty:"Easy",events:1462,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:168,paritySummary:{errors:37,warns:12,resets:4}},{njs:10,offset:1,notes:276,bombs:14,obstacles:19,nps:1.643,length:364,characteristic:"Standard",difficulty:"Normal",events:1462,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:168,paritySummary:{errors:38,warns:26,resets:7}},{njs:12,offset:1,notes:430,bombs:32,obstacles:19,nps:2.56,length:364,characteristic:"Standard",difficulty:"Hard",events:1462,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:168,paritySummary:{errors:34,warns:46,resets:9}},{njs:14,offset:.7,notes:631,bombs:30,obstacles:21,nps:3.749,length:364.667,characteristic:"Standard",difficulty:"Expert",events:1462,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:168.308,paritySummary:{errors:18,warns:28,resets:8}},{njs:19,offset:-.3,notes:692,bombs:30,obstacles:30,nps:4.112,length:364.667,characteristic:"Standard",difficulty:"ExpertPlus",events:1462,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:168.308,paritySummary:{errors:16,warns:22,resets:8}}],downloadURL:"https://cdn.beatsaver.com/54f993f61f0ea48ddbb764f13936cc78799046a5.zip",coverURL:"https://cdn.beatsaver.com/54f993f61f0ea48ddbb764f13936cc78799046a5.jpg",previewURL:"https://cdn.beatsaver.com/54f993f61f0ea48ddbb764f13936cc78799046a5.mp3"}],createdAt:"2020-07-05T06:16:58.371Z",updatedAt:"2020-07-05T06:16:58.371Z",lastPublishedAt:"2020-07-05T06:16:58.371Z"},{id:"8647",name:"Pursuing My True Self - Persona 4",description:"80",uploader:{id:4285521,name:"ejiejidayo",uniqueSet:!0,hash:"5cff0b7398cc5a672c84fc58",avatar:"https://cdn.beatsaver.com/avatar/224894241279574016.png",type:"DISCORD"},metadata:{bpm:119,duration:183,songName:"Pursuing My True Self",songSubName:"",songAuthorName:"Persona 4",levelAuthorName:"ejiejidayo"},stats:{plays:0,downloads:5195,upvotes:1185,downvotes:32,score:.9179},uploaded:"2020-02-12T11:59:55.125Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"990f576d9b1045bc6aa4f7ab7a2231a1bd05e6fe",key:"8647",state:"Published",createdAt:"2020-02-12T11:59:55.125Z",sageScore:4,diffs:[{njs:12,offset:0,notes:605,bombs:0,obstacles:59,nps:3.354,length:357.75,characteristic:"Standard",difficulty:"Hard",events:1318,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:180.378,paritySummary:{errors:11,warns:12,resets:0}},{njs:15,offset:-.4,notes:812,bombs:0,obstacles:47,nps:4.499,length:358,characteristic:"Standard",difficulty:"Expert",events:1318,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:180.504,paritySummary:{errors:9,warns:23,resets:0}},{njs:17,offset:-.6,notes:921,bombs:0,obstacles:81,nps:5.102,length:358,characteristic:"Standard",difficulty:"ExpertPlus",events:1318,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:180.504,paritySummary:{errors:49,warns:77,resets:0}}],downloadURL:"https://cdn.beatsaver.com/990f576d9b1045bc6aa4f7ab7a2231a1bd05e6fe.zip",coverURL:"https://cdn.beatsaver.com/990f576d9b1045bc6aa4f7ab7a2231a1bd05e6fe.jpg",previewURL:"https://cdn.beatsaver.com/990f576d9b1045bc6aa4f7ab7a2231a1bd05e6fe.mp3"}],createdAt:"2020-02-12T11:59:55.125Z",updatedAt:"2020-02-12T11:59:55.125Z",lastPublishedAt:"2020-02-12T11:59:55.125Z"},{id:"5911",name:"Stars Tonight - Zeds Dead x DROELOE (collab w/ Rexxz & StyngMe)",description:"155 BPM - 2:47 Runtime\n\nStandard:\nEasy - 245 Notes\nNormal - 369 Notes\nHard - 442 Notes\nExpert - 535 Notes\nExpert+ - 700 Notes\n\nSingle Saber:\nHard - 346 Notes\nExpert - 415 Notes\nExpert+ - 556 Notes\n\nSkyler Wallace: Expert+, Easy - Hard, Single Saber\nStyngMe: Expert+\nRexxz: Lighting",uploader:{id:4284981,name:"skylerwallace",uniqueSet:!0,hash:"5cff0b7298cc5a672c84ea67",avatar:"https://cdn.beatsaver.com/avatar/398344856868487168.png",type:"DISCORD"},metadata:{bpm:155,duration:167,songName:"Stars Tonight",songSubName:"",songAuthorName:"Zeds Dead x Droeloe",levelAuthorName:"Skyler, StyngMe, & Rexxz"},stats:{plays:0,downloads:2895,upvotes:1490,downvotes:47,score:.9179},uploaded:"2019-07-27T04:11:18.419Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"e9fe30a5d1c3d1f1ed1d1d0af33e83f52a22c2cb",key:"5911",state:"Published",createdAt:"2019-07-27T04:11:18.419Z",sageScore:8,diffs:[{njs:10,offset:0,notes:245,bombs:0,obstacles:14,nps:1.582,length:400,characteristic:"Standard",difficulty:"Easy",events:6285,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:154.839,paritySummary:{errors:89,warns:16,resets:0}},{njs:10,offset:0,notes:369,bombs:0,obstacles:14,nps:2.383,length:400,characteristic:"Standard",difficulty:"Normal",events:6285,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:154.839,paritySummary:{errors:97,warns:22,resets:0}},{njs:12,offset:1,notes:442,bombs:2,obstacles:16,nps:2.855,length:400,characteristic:"Standard",difficulty:"Hard",events:6285,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:154.839,paritySummary:{errors:65,warns:28,resets:3}},{njs:14,offset:1,notes:535,bombs:6,obstacles:16,nps:3.455,length:400,characteristic:"Standard",difficulty:"Expert",events:6285,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:154.839,paritySummary:{errors:22,warns:16,resets:5}},{njs:18,offset:.1,notes:700,bombs:6,obstacles:43,nps:4.521,length:400,characteristic:"Standard",difficulty:"ExpertPlus",events:6285,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:154.839,paritySummary:{errors:39,warns:65,resets:0}},{njs:12,offset:1,notes:346,bombs:0,obstacles:14,nps:2.235,length:400,characteristic:"OneSaber",difficulty:"Hard",events:6285,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:154.839,paritySummary:{errors:44,warns:16,resets:0}},{njs:14,offset:1,notes:415,bombs:2,obstacles:16,nps:2.68,length:400,characteristic:"OneSaber",difficulty:"Expert",events:6285,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:154.839,paritySummary:{errors:31,warns:24,resets:2}},{njs:16,offset:.25,notes:556,bombs:6,obstacles:16,nps:3.591,length:400,characteristic:"OneSaber",difficulty:"ExpertPlus",events:6285,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:154.839,paritySummary:{errors:34,warns:108,resets:1}}],downloadURL:"https://cdn.beatsaver.com/e9fe30a5d1c3d1f1ed1d1d0af33e83f52a22c2cb.zip",coverURL:"https://cdn.beatsaver.com/e9fe30a5d1c3d1f1ed1d1d0af33e83f52a22c2cb.jpg",previewURL:"https://cdn.beatsaver.com/e9fe30a5d1c3d1f1ed1d1d0af33e83f52a22c2cb.mp3"}],createdAt:"2019-07-27T04:11:18.419Z",updatedAt:"2019-07-27T04:11:18.419Z",lastPublishedAt:"2019-07-27T04:11:18.419Z"},{id:"5395",name:"Alestorm - Mexico",description:"My first map, this song felt good to map because it's structurally simple and catchy. Beat Saber needs more metal and I want to make more maps so any feedback is appreciated :). \n\nExpert and Hard are mapped to be significantly easier than Expert+, so that more people can enjoy it. Here's a video of Expert+ playthrough: https://youtu.be/Y-0cYyZwxIY",uploader:{id:1207,name:"wyxi",uniqueSet:!0,hash:"5d0abf96b8c469000699075f",avatar:"https://www.gravatar.com/avatar/5d0abf96b8c469000699075f?d=retro",type:"SIMPLE"},metadata:{bpm:128,duration:192,songName:"Mexico",songSubName:"",songAuthorName:"Alestorm",levelAuthorName:"Wyxi"},stats:{plays:0,downloads:1445,upvotes:873,downvotes:18,score:.9177},uploaded:"2019-06-19T23:52:29.181Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"fb5cda4446fdd4dd02cfb5510d00244842e4c392",key:"5395",state:"Published",createdAt:"2019-06-19T23:52:29.181Z",sageScore:6,diffs:[{njs:11,offset:1,notes:435,bombs:70,obstacles:23,nps:2.376,length:390.5,characteristic:"Standard",difficulty:"Hard",events:1282,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:183.047,paritySummary:{errors:76,warns:16,resets:0}},{njs:13,offset:1,notes:560,bombs:70,obstacles:23,nps:3.059,length:390.5,characteristic:"Standard",difficulty:"Expert",events:1282,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:183.047,paritySummary:{errors:55,warns:15,resets:0}},{njs:15,offset:0,notes:975,bombs:76,obstacles:23,nps:5.327,length:390.5,characteristic:"Standard",difficulty:"ExpertPlus",events:1280,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:183.047,paritySummary:{errors:65,warns:64,resets:1}}],downloadURL:"https://cdn.beatsaver.com/fb5cda4446fdd4dd02cfb5510d00244842e4c392.zip",coverURL:"https://cdn.beatsaver.com/fb5cda4446fdd4dd02cfb5510d00244842e4c392.jpg",previewURL:"https://cdn.beatsaver.com/fb5cda4446fdd4dd02cfb5510d00244842e4c392.mp3"}],createdAt:"2019-06-19T23:52:29.181Z",updatedAt:"2019-06-19T23:52:29.181Z",lastPublishedAt:"2019-06-19T23:52:29.181Z"},{id:"4e8d",name:"Centipede (Visual Representation) - Knife Party",description:"Make sure you have SFX turned off and NoFail turned on!\r\nThis map is not intended to be passed, just sit back and enjoy the show! :)",uploader:{id:11127,name:"nicetomeetyou",uniqueSet:!0,hash:"5cff0b7398cc5a672c84f5d1",avatar:"https://www.gravatar.com/avatar/5cff0b7398cc5a672c84f5d1?d=retro",type:"SIMPLE"},metadata:{bpm:280,duration:145,songName:"Centipede (VISUAL)",songSubName:"Knife Party",songAuthorName:"NiceToMeetYou",levelAuthorName:"nicetomeetyou"},stats:{plays:0,downloads:2652,upvotes:1363,downvotes:41,score:.9177},uploaded:"2019-05-22T21:23:54Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"8061055d363292dda7b055eefc1c5dbebb13e616",key:"4e8d",state:"Published",createdAt:"2019-05-22T21:23:54Z",sageScore:5,diffs:[{njs:23,offset:0,notes:9189,bombs:0,obstacles:0,nps:95.719,length:448,characteristic:"Standard",difficulty:"ExpertPlus",events:2178,chroma:!1,me:!0,ne:!1,cinema:!1,seconds:96,paritySummary:{errors:0,warns:0,resets:0}}],downloadURL:"https://cdn.beatsaver.com/8061055d363292dda7b055eefc1c5dbebb13e616.zip",coverURL:"https://cdn.beatsaver.com/8061055d363292dda7b055eefc1c5dbebb13e616.jpg",previewURL:"https://cdn.beatsaver.com/8061055d363292dda7b055eefc1c5dbebb13e616.mp3"}],createdAt:"2019-05-22T21:23:54Z",updatedAt:"2019-05-22T21:23:54Z",lastPublishedAt:"2019-05-22T21:23:54Z"},{id:"4445",name:"Runaway Baby - Bruno Mars (V2)",description:"45\r\nremap https://beatsaver.com/browse/detail/2208-1528",uploader:{id:4285521,name:"ejiejidayo",uniqueSet:!0,hash:"5cff0b7398cc5a672c84fc58",avatar:"https://cdn.beatsaver.com/avatar/224894241279574016.png",type:"DISCORD"},metadata:{bpm:164,duration:149,songName:"Runaway Baby V2",songSubName:"Bruno Mars",songAuthorName:"ejiejidayo",levelAuthorName:"ejiejidayo"},stats:{plays:0,downloads:3375,upvotes:1030,downvotes:25,score:.9177},uploaded:"2019-04-08T07:32:15Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"6ae2ff433fb5a570eeb0801f30a01b446bde2c15",key:"4445",state:"Published",createdAt:"2019-04-08T07:32:15Z",sageScore:5,diffs:[{njs:11,offset:0,notes:614,bombs:0,obstacles:50,nps:4.463,length:376,characteristic:"Standard",difficulty:"Expert",events:1e3,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:137.561,paritySummary:{errors:60,warns:17,resets:0}}],downloadURL:"https://cdn.beatsaver.com/6ae2ff433fb5a570eeb0801f30a01b446bde2c15.zip",coverURL:"https://cdn.beatsaver.com/6ae2ff433fb5a570eeb0801f30a01b446bde2c15.jpg",previewURL:"https://cdn.beatsaver.com/6ae2ff433fb5a570eeb0801f30a01b446bde2c15.mp3"}],createdAt:"2019-04-08T07:32:15Z",updatedAt:"2019-04-08T07:32:15Z",lastPublishedAt:"2019-04-08T07:32:15Z"},{id:"46b1",name:"Bad Guy - Billie Eilish",description:"Lighting done by Rexxz",uploader:{id:21050,name:"dgrj4life",uniqueSet:!0,hash:"5cff0b7298cc5a672c84eaa1",avatar:"https://www.gravatar.com/avatar/5cff0b7298cc5a672c84eaa1?d=retro",type:"SIMPLE"},metadata:{bpm:135,duration:194,songName:"Bad Guy",songSubName:"Billie Eilish",songAuthorName:"DGRJ 4 Life & Rexxz",levelAuthorName:"dgrj4life"},stats:{plays:0,downloads:6662,upvotes:5055,downvotes:256,score:.9176},uploaded:"2019-04-17T23:25:17Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"a6a8f5c9146321b609645eefb109197e301bfe71",key:"46b1",state:"Published",createdAt:"2019-04-17T23:25:17Z",sageScore:5,diffs:[{njs:14,offset:0,notes:761,bombs:8,obstacles:36,nps:4.003,length:427.766,characteristic:"Standard",difficulty:"Expert",events:7645,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:190.118,paritySummary:{errors:33,warns:49,resets:0}},{njs:16,offset:0,notes:918,bombs:8,obstacles:36,nps:4.829,length:427.766,characteristic:"Standard",difficulty:"ExpertPlus",events:7645,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:190.118,paritySummary:{errors:32,warns:67,resets:0}}],downloadURL:"https://cdn.beatsaver.com/a6a8f5c9146321b609645eefb109197e301bfe71.zip",coverURL:"https://cdn.beatsaver.com/a6a8f5c9146321b609645eefb109197e301bfe71.jpg",previewURL:"https://cdn.beatsaver.com/a6a8f5c9146321b609645eefb109197e301bfe71.mp3"}],createdAt:"2019-04-17T23:25:17Z",updatedAt:"2019-04-17T23:25:17Z",lastPublishedAt:"2019-04-17T23:25:17Z"},{id:"431d",name:"PewDiePie - Congratulations",description:"UPDATED OFFSET PROBLEMS\r\n\r\nIt's time to 'slice' T-Series! Presenting PewDiePie's latest diss track \"Congratulations\" featuring David Paul Brown and Joel Gustaf “Roomie” Berghult. I hope you enjoy!\r\n\r\nPewDiePie's original video: https://www.youtube.com/watch?v=PHgc8Q6qTjc",uploader:{id:42921,name:"pianoluigi",uniqueSet:!0,hash:"5cff0b7698cc5a672c854076",avatar:"https://www.gravatar.com/avatar/5cff0b7698cc5a672c854076?d=retro",type:"SIMPLE"},metadata:{bpm:136,duration:252,songName:"Congratulations",songSubName:"PewDiePie",songAuthorName:"PianoLuigi",levelAuthorName:"PianoLuigi"},stats:{plays:0,downloads:1157,upvotes:937,downvotes:21,score:.9176},uploaded:"2019-04-03T09:04:34Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"768776b15afc801f67a2244439938740349cbc74",key:"431d",state:"Published",createdAt:"2019-04-03T09:04:34Z",sageScore:5,diffs:[{njs:16,offset:0,notes:1099,bombs:32,obstacles:64,nps:4.488,length:555,characteristic:"Standard",difficulty:"ExpertPlus",events:2728,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:244.853,paritySummary:{errors:40,warns:33,resets:16}}],downloadURL:"https://cdn.beatsaver.com/768776b15afc801f67a2244439938740349cbc74.zip",coverURL:"https://cdn.beatsaver.com/768776b15afc801f67a2244439938740349cbc74.jpg",previewURL:"https://cdn.beatsaver.com/768776b15afc801f67a2244439938740349cbc74.mp3"}],createdAt:"2019-04-03T09:04:34Z",updatedAt:"2019-04-03T09:04:34Z",lastPublishedAt:"2019-04-03T09:04:34Z"},{id:"b7f8",name:"Sabaton - Swedish Pagans",description:"Nice song by Sabaton. Mapped Expert+, Expert, Hard.\n\nGenre: Power metal\nBPM: 135\nNPS: 4.41 / 3.63 / 2.78\nExpert+ playthrough: https://youtu.be/Yx3WPwvZ8wE\n\nCome root for Sweden in the beat saber world cup! :D\n\nSpecial thanks to SatanClaus for playtesting\n\nFeedback/complaints/anything: Wyxi#5211 on discord.\n\n\n",uploader:{id:1207,name:"wyxi",uniqueSet:!0,hash:"5d0abf96b8c469000699075f",avatar:"https://www.gravatar.com/avatar/5d0abf96b8c469000699075f?d=retro",type:"SIMPLE"},metadata:{bpm:135,duration:246,songName:"Swedish Pagans",songSubName:"",songAuthorName:"Sabaton",levelAuthorName:"Wyxi"},stats:{plays:0,downloads:1342,upvotes:572,downvotes:6,score:.9175},uploaded:"2020-06-30T14:44:54.069Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"6e0fb56882443e1fc41c79dde364d4456828b328",key:"b7f8",state:"Published",createdAt:"2020-06-30T14:44:54.069Z",sageScore:4,diffs:[{njs:13,offset:.5,notes:685,bombs:0,obstacles:4,nps:2.97,length:519,characteristic:"Standard",difficulty:"Hard",events:2174,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:230.667,paritySummary:{errors:15,warns:17,resets:0}},{njs:16,offset:0,notes:894,bombs:0,obstacles:4,nps:3.876,length:519,characteristic:"Standard",difficulty:"Expert",events:2174,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:230.667,paritySummary:{errors:0,warns:0,resets:0}},{njs:17,offset:-.25,notes:1086,bombs:0,obstacles:4,nps:4.708,length:519,characteristic:"Standard",difficulty:"ExpertPlus",events:2174,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:230.667,paritySummary:{errors:0,warns:0,resets:0}}],downloadURL:"https://cdn.beatsaver.com/6e0fb56882443e1fc41c79dde364d4456828b328.zip",coverURL:"https://cdn.beatsaver.com/6e0fb56882443e1fc41c79dde364d4456828b328.jpg",previewURL:"https://cdn.beatsaver.com/6e0fb56882443e1fc41c79dde364d4456828b328.mp3"}],createdAt:"2020-06-30T14:44:54.069Z",updatedAt:"2020-06-30T14:44:54.069Z",lastPublishedAt:"2020-06-30T14:44:54.069Z"},{id:"6713",name:"A Bloody Beginning",description:"Get down with some Castlevania vibes with the first Halloween themed map to be released 1 day before October!\r\n\r\nLots of trial and edits have been done to make this map as perfect as possible for release! So we all hope you enjoy the Walls and the Lighting alongside the notes!\r\n\r\nCredits for such wonderful creations:\r\n\r\nYume - New Wall Mapper that's been sweeping the scene!\r\n\r\nKnowledge - A heavy hitting experienced light mapper\r\n\r\n219278 - Yeah i have no idea why their name is like this but they helped light the map so it doesn't matter!",uploader:{id:4289111,name:"blackblazon",uniqueSet:!0,hash:"5cff0b7398cc5a672c84ef34",avatar:"https://cdn.beatsaver.com/avatar/127162370538733568.png",type:"DISCORD"},metadata:{bpm:126,duration:215,songName:"A Bloody Beginning",songSubName:"",songAuthorName:"Nokbient & bLiNd",levelAuthorName:"BlackBlazon"},stats:{plays:0,downloads:1748,upvotes:1023,downvotes:25,score:.9175},uploaded:"2019-09-30T23:49:36.638Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"fc182c48abfc4750046eaed4dd6fe57ac8dd99fc",key:"6713",state:"Published",createdAt:"2019-09-30T23:49:36.638Z",sageScore:5,diffs:[{njs:18,offset:0,notes:959,bombs:0,obstacles:4567,nps:4.658,length:432.313,characteristic:"Standard",difficulty:"ExpertPlus",events:9945,chroma:!1,me:!0,ne:!1,cinema:!1,seconds:205.863,paritySummary:{errors:0,warns:0,resets:0}}],downloadURL:"https://cdn.beatsaver.com/fc182c48abfc4750046eaed4dd6fe57ac8dd99fc.zip",coverURL:"https://cdn.beatsaver.com/fc182c48abfc4750046eaed4dd6fe57ac8dd99fc.jpg",previewURL:"https://cdn.beatsaver.com/fc182c48abfc4750046eaed4dd6fe57ac8dd99fc.mp3"}],createdAt:"2019-09-30T23:49:36.638Z",updatedAt:"2019-09-30T23:49:36.638Z",lastPublishedAt:"2019-09-30T23:49:36.638Z"},{id:"5223",name:"Gloryhammer - Rise Of The Chaos Wizards",description:"I said it once, I'll say it again: Beat Saber needs more Metal \\m/\r\nTherefore - again with *all* difficulties - I present to you:\r\n\r\nExpertPlus-Playthrough: https://vimeo.com/341011795",uploader:{id:40721,name:"dunklerturm",uniqueSet:!0,hash:"5cff0b7398cc5a672c84fd7c",avatar:"https://www.gravatar.com/avatar/5cff0b7398cc5a672c84fd7c?d=retro",type:"SIMPLE"},metadata:{bpm:180,duration:235,songName:"Rise Of The Chaos Wizards",songSubName:"Gloryhammer",songAuthorName:"DunklerTurm",levelAuthorName:"DunklerTurm"},stats:{plays:0,downloads:1469,upvotes:844,downvotes:17,score:.9175},uploaded:"2019-06-07T22:14:16Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"8e46e96da31b6224ae62b6d9eb9434ff93f791da",key:"5223",state:"Published",createdAt:"2019-06-07T22:14:16Z",sageScore:7,diffs:[{njs:12,offset:0,notes:211,bombs:4,obstacles:152,nps:.961,length:659,characteristic:"Standard",difficulty:"Easy",events:2944,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:219.667,paritySummary:{errors:31,warns:8,resets:0}},{njs:12,offset:0,notes:309,bombs:41,obstacles:136,nps:1.373,length:675,characteristic:"Standard",difficulty:"Normal",events:2944,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:225,paritySummary:{errors:59,warns:28,resets:3}},{njs:12,offset:0,notes:545,bombs:32,obstacles:84,nps:2.422,length:675,characteristic:"Standard",difficulty:"Hard",events:2944,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:225,paritySummary:{errors:56,warns:71,resets:0}},{njs:14,offset:0,notes:782,bombs:86,obstacles:84,nps:3.476,length:675,characteristic:"Standard",difficulty:"Expert",events:2944,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:225,paritySummary:{errors:55,warns:54,resets:0}},{njs:18,offset:0,notes:1106,bombs:95,obstacles:84,nps:4.916,length:675,characteristic:"Standard",difficulty:"ExpertPlus",events:5435,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:225,paritySummary:{errors:70,warns:75,resets:1}}],downloadURL:"https://cdn.beatsaver.com/8e46e96da31b6224ae62b6d9eb9434ff93f791da.zip",coverURL:"https://cdn.beatsaver.com/8e46e96da31b6224ae62b6d9eb9434ff93f791da.jpg",previewURL:"https://cdn.beatsaver.com/8e46e96da31b6224ae62b6d9eb9434ff93f791da.mp3"}],createdAt:"2019-06-07T22:14:16Z",updatedAt:"2019-06-07T22:14:16Z",lastPublishedAt:"2019-06-07T22:14:16Z"},{id:"dc68",name:"Fallguys - Survive the fall",description:"f change BPM",uploader:{id:4284894,name:"emir",uniqueSet:!0,hash:"5d3dac6586729100069260cc",avatar:"https://cdn.beatsaver.com/avatar/331480642699395073.png",type:"DISCORD"},metadata:{bpm:165,duration:205,songName:"Fallguys - Survive the fall",songSubName:"",songAuthorName:"Fallguys",levelAuthorName:"Emir"},stats:{plays:0,downloads:1078,upvotes:889,downvotes:19,score:.9174},uploaded:"2020-08-23T10:11:49.857Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"0c9598eefeed825dd9a6d9012d842d473ffb9b38",key:"dc68",state:"Published",createdAt:"2020-08-23T10:11:49.857Z",sageScore:6,diffs:[{njs:12,offset:0,notes:693,bombs:0,obstacles:17,nps:3.458,length:551.192,characteristic:"Standard",difficulty:"Hard",events:1367,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:200.433,paritySummary:{errors:0,warns:0,resets:0}},{njs:15,offset:0,notes:884,bombs:0,obstacles:374,nps:4.41,length:551.192,characteristic:"Standard",difficulty:"Expert",events:1367,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:200.433,paritySummary:{errors:0,warns:0,resets:0}},{njs:18,offset:-.3,notes:1175,bombs:24,obstacles:10,nps:5.862,length:551.192,characteristic:"Standard",difficulty:"ExpertPlus",events:1367,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:200.433,paritySummary:{errors:0,warns:0,resets:12}}],downloadURL:"https://cdn.beatsaver.com/0c9598eefeed825dd9a6d9012d842d473ffb9b38.zip",coverURL:"https://cdn.beatsaver.com/0c9598eefeed825dd9a6d9012d842d473ffb9b38.jpg",previewURL:"https://cdn.beatsaver.com/0c9598eefeed825dd9a6d9012d842d473ffb9b38.mp3"}],createdAt:"2020-08-23T10:11:49.857Z",updatedAt:"2020-08-23T10:11:49.857Z",lastPublishedAt:"2020-08-23T10:11:49.857Z"},{id:"b7b1",name:"No Rain - Blind Melon",description:"I still think of this song as recent, even though - wait for it - it's 28 years old this year. It's Blind Melon's 1992 hit, No Rain! I love the jazzy beat and dramatic moments in this song!\n\nNormal, Hard, Expert, ExpertPlus 360 and Expert 90 as well.\n\nBig thanks to my playtesters, MajorPickle, Maybeemae, and Brentastic! Couldn't do it without you guys - well, I could, just not as well!\n\n\nhttps://youtu.be/ZuLsxtvooCM",uploader:{id:78593,name:"techbutterfly",uniqueSet:!0,hash:"5cff0b7798cc5a672c8566f7",avatar:"https://cdn.beatsaver.com/avatar/527111497617506304.png",type:"DISCORD"},metadata:{bpm:149,duration:216,songName:"No Rain",songSubName:"",songAuthorName:"Blind Melon",levelAuthorName:"TechButterfly"},stats:{plays:0,downloads:3758,upvotes:624,downvotes:8,score:.9174},uploaded:"2020-06-29T19:22:10.964Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"c222e31735f0c61b7781c8f41864b8033e054d40",key:"b7b1",state:"Published",createdAt:"2020-06-29T19:22:10.964Z",sageScore:3,diffs:[{njs:10,offset:-.5,notes:333,bombs:0,obstacles:32,nps:1.613,length:511,characteristic:"Standard",difficulty:"Normal",events:529,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:205.772,paritySummary:{errors:31,warns:41,resets:0}},{njs:13,offset:.3,notes:601,bombs:0,obstacles:32,nps:2.905,length:512,characteristic:"Standard",difficulty:"Hard",events:529,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:206.175,paritySummary:{errors:19,warns:34,resets:0}},{njs:14,offset:.2,notes:704,bombs:0,obstacles:32,nps:3.403,length:512,characteristic:"Standard",difficulty:"Expert",events:529,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:206.175,paritySummary:{errors:40,warns:37,resets:0}},{njs:13,offset:.3,notes:601,bombs:0,obstacles:30,nps:2.905,length:512.001,characteristic:"90Degree",difficulty:"Expert",events:689,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:206.175,paritySummary:{errors:19,warns:34,resets:0}},{njs:13,offset:.3,notes:704,bombs:0,obstacles:32,nps:3.403,length:512.001,characteristic:"360Degree",difficulty:"ExpertPlus",events:708,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:206.175,paritySummary:{errors:40,warns:37,resets:0}}],downloadURL:"https://cdn.beatsaver.com/c222e31735f0c61b7781c8f41864b8033e054d40.zip",coverURL:"https://cdn.beatsaver.com/c222e31735f0c61b7781c8f41864b8033e054d40.jpg",previewURL:"https://cdn.beatsaver.com/c222e31735f0c61b7781c8f41864b8033e054d40.mp3"}],createdAt:"2020-06-29T19:22:10.964Z",updatedAt:"2020-06-29T19:22:10.964Z",lastPublishedAt:"2020-06-29T19:22:10.964Z"},{id:"3c10",name:"Sword Art Online Opening Compilation",description:'So what do you do when you\'ve mapped every single SAO opening? You make a compilation of them of course! I originally wanted to combine the full version of all the songs which would result in a 40+ minute map but since Beat Saver has a size limit I decided to combine the TV edit versions of them instead.\r\n\r\nSongs are ordered in released date:\r\n\r\n1. "crossing field" by LiSA\r\n2. "INNOCENCE" by Aoi Eir\r\n3. "IGNITE" by Eir Aoi\r\n4. "courage" by Haruka Tomatsu \r\n5. "Catch the Moment" by LiSA\r\n6. "Thrill, Risk, Heartless" by LiSA\r\n7. "Ryuusei" by Aoi EiR\r\n8. "ADAMAS" by LiSA\r\n9. "RESISTER" by ASCA\r\n\r\nWhile most of the patterns are recycled from my own maps, I did remap/resync some of the older ones so they are on the same quality as my newer maps.\r\n\r\nMostly expert level but has some streams and technical sections which combined with the song\'s length I decided to put this as expert plus just to be safe.',uploader:{id:58338,name:"Joetastic",uniqueSet:!0,hash:"5cff0b7498cc5a672c85050e",avatar:"https://cdn.beatsaver.com/avatar/227767566402191360.png",type:"DISCORD"},metadata:{bpm:120,duration:841,songName:"Sword Art Online Opening Compilation",songSubName:"Various Artists",songAuthorName:"Joetastic",levelAuthorName:"Joetastic"},stats:{plays:0,downloads:4936,upvotes:1986,downvotes:74,score:.9174},uploaded:"2019-03-06T11:49:32Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"e7ff277fbad063337af1e18bb273b0eb6fc03557",key:"3c10",state:"Published",createdAt:"2019-03-06T11:49:32Z",sageScore:1,diffs:[{njs:15,offset:0,notes:3814,bombs:44,obstacles:37,nps:4.553,length:1675.338,characteristic:"Standard",difficulty:"ExpertPlus",events:3960,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:837.669,paritySummary:{errors:327,warns:301,resets:0}}],downloadURL:"https://cdn.beatsaver.com/e7ff277fbad063337af1e18bb273b0eb6fc03557.zip",coverURL:"https://cdn.beatsaver.com/e7ff277fbad063337af1e18bb273b0eb6fc03557.jpg",previewURL:"https://cdn.beatsaver.com/e7ff277fbad063337af1e18bb273b0eb6fc03557.mp3"}],createdAt:"2019-03-06T11:49:32Z",updatedAt:"2019-03-06T11:49:32Z",lastPublishedAt:"2019-03-06T11:49:32Z"},{id:"34a5",name:"Check Yes, Juliet - We The Kings",description:"Run Baby Run! Check Yes, Juliet by We The Kings, song is brought from Itunes so it's the highest quality sound file you can get.",uploader:{id:58338,name:"Joetastic",uniqueSet:!0,hash:"5cff0b7498cc5a672c85050e",avatar:"https://cdn.beatsaver.com/avatar/227767566402191360.png",type:"DISCORD"},metadata:{bpm:167,duration:217,songName:"Check Yes, Juliet",songSubName:"We The Kings",songAuthorName:"Joetastic",levelAuthorName:"Joetastic"},stats:{plays:0,downloads:1453,upvotes:597,downvotes:7,score:.9174},uploaded:"2019-02-09T08:16:38Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"a6fff4353d6c0657fb6a3de381dd48458c563dcf",key:"34a5",state:"Published",createdAt:"2019-02-09T08:16:38Z",sageScore:6,diffs:[{njs:15,offset:0,notes:905,bombs:0,obstacles:0,nps:4.443,length:566.959,characteristic:"Standard",difficulty:"Expert",events:3427,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:203.698,paritySummary:{errors:61,warns:71,resets:0}}],downloadURL:"https://cdn.beatsaver.com/a6fff4353d6c0657fb6a3de381dd48458c563dcf.zip",coverURL:"https://cdn.beatsaver.com/a6fff4353d6c0657fb6a3de381dd48458c563dcf.jpg",previewURL:"https://cdn.beatsaver.com/a6fff4353d6c0657fb6a3de381dd48458c563dcf.mp3"}],createdAt:"2019-02-09T08:16:38Z",updatedAt:"2019-02-09T08:16:38Z",lastPublishedAt:"2019-02-09T08:16:38Z"},{id:"78e",name:"Numb - Linkin Park",description:"Expert - Hard - Normal Charts\nCustom Lighting\n\nhttps://twitter.com/TheDownyCat\nhttps://www.twitch.tv/downycat\nhttps://streamlabs.com/downycat/tip",uploader:{id:4285982,name:"downycat",uniqueSet:!0,hash:"5cff0b7398cc5a672c84ede5",avatar:"https://cdn.beatsaver.com/avatar/173538829888782336.png",type:"DISCORD"},metadata:{bpm:110,duration:188,songName:"Numb",songSubName:"Linkin Park",songAuthorName:"DownyCat",levelAuthorName:"downycat"},stats:{plays:0,downloads:11541,upvotes:7092,downvotes:389,score:.9174},uploaded:"2018-07-02T13:44:43Z",automapper:!1,ranked:!0,qualified:!1,versions:[{hash:"2e6f858088c6d67e930e1bb357bd7455101b6626",key:"78e",state:"Published",createdAt:"2018-07-02T13:44:43Z",sageScore:6,diffs:[{njs:10,offset:0,notes:367,bombs:0,obstacles:39,nps:2.049,length:328.5,characteristic:"Standard",difficulty:"Normal",events:1134,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:179.182,paritySummary:{errors:45,warns:26,resets:0},stars:.93},{njs:10,offset:0,notes:653,bombs:0,obstacles:50,nps:3.602,length:332.499,characteristic:"Standard",difficulty:"Hard",events:1134,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:181.363,paritySummary:{errors:57,warns:43,resets:0},stars:1.86},{njs:10,offset:0,notes:899,bombs:0,obstacles:50,nps:4.958,length:332.5,characteristic:"Standard",difficulty:"Expert",events:1134,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:181.364,paritySummary:{errors:58,warns:58,resets:0},stars:2.59}],downloadURL:"https://cdn.beatsaver.com/2e6f858088c6d67e930e1bb357bd7455101b6626.zip",coverURL:"https://cdn.beatsaver.com/2e6f858088c6d67e930e1bb357bd7455101b6626.jpg",previewURL:"https://cdn.beatsaver.com/2e6f858088c6d67e930e1bb357bd7455101b6626.mp3"}],createdAt:"2018-07-02T13:44:43Z",updatedAt:"2018-07-02T13:44:43Z",lastPublishedAt:"2018-07-02T13:44:43Z"},{id:"13b20",name:"Pika Girl - S3RL",description:'did a slightly more "dancey" style of mapping with this one\n\nMap Preview: https://youtu.be/_lrXOS7a7Cs\n\nDifficulties: \nExpert+(6.53 NPS),\nExpert(4.5 NPS),\nHard(3.7 NPS). \n\nCustom lights, I used lolighter for the chorus, hand lit everything else. \n\nThanks to eZconfirmed and nuggie for playtesting! \n\nAny and all feedback appreciated:\nMeezoNugget#8186\n\nEnjoy! :)\n',uploader:{id:57121,name:"meezonugget",uniqueSet:!0,hash:"5e6b793f7abb0000068073d7",avatar:"https://cdn.beatsaver.com/avatar/146287428875976704.png",type:"DISCORD"},metadata:{bpm:175,duration:226,songName:"Pika Girl",songSubName:"",songAuthorName:"S3RL",levelAuthorName:"MeezoNugget"},stats:{plays:0,downloads:3445,upvotes:1105,downvotes:29,score:.9173},uploaded:"2021-02-07T00:20:32.184Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"a30818f752cce3c87664570826bbf7b12b848a30",key:"13b20",state:"Published",createdAt:"2021-02-07T00:20:32.184Z",sageScore:4,diffs:[{njs:18,offset:.1,notes:837,bombs:0,obstacles:56,nps:3.817,length:639.5,characteristic:"Standard",difficulty:"Hard",events:5273,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:219.257,paritySummary:{errors:0,warns:0,resets:0}},{njs:20,offset:-.1,notes:1021,bombs:0,obstacles:54,nps:4.657,length:639.5,characteristic:"Standard",difficulty:"Expert",events:5273,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:219.257,paritySummary:{errors:0,warns:0,resets:0}},{njs:22,offset:-.3,notes:1482,bombs:7,obstacles:78,nps:6.759,length:639.5,characteristic:"Standard",difficulty:"ExpertPlus",events:5273,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:219.257,paritySummary:{errors:0,warns:0,resets:2}}],downloadURL:"https://cdn.beatsaver.com/a30818f752cce3c87664570826bbf7b12b848a30.zip",coverURL:"https://cdn.beatsaver.com/a30818f752cce3c87664570826bbf7b12b848a30.jpg",previewURL:"https://cdn.beatsaver.com/a30818f752cce3c87664570826bbf7b12b848a30.mp3"}],createdAt:"2021-02-07T00:20:32.184Z",updatedAt:"2021-02-07T00:20:32.184Z",lastPublishedAt:"2021-02-07T00:20:32.184Z"},{id:"7288",name:"Megalovania - Camellia Remix (Kole Edit) [One saber]",description:"I don’t know much about Undertale nor Camellia, but when making this shorter edit of Camellia’s remix of Megalovania by Toby Fox I felt like mapping it, and as with any popular song I’m gonna make it in One Saber instead since there can never be enough One Saber. I also asked Skeelie if he wanted to make some fancy lighting, just like he did for Overkill, and he did! So here it is, Megalovania Remix by Camellia, as One Saber!\n\nChromaLite mod recommended for best lighting effects.\n\nNo map preview video. (Yet?)\n\nLighting (by Skeelie) preview:\nhttps://youtu.be/6b88SRuQaSQ\n\nBPM: 259\nDuration: 4:27\nEasy, Normal, Hard, Expert and Expert+ difficulties:\n\nEasy:\nNPS 1.32, 356 notes, 26 walls, 0 bombs\n\nNormal:\nNPS 1.66, 446 notes, 29 walls, 17 bombs\n\nHard:\nNPS 2.12, 568 notes, 30 walls, 53 bombs\n\nExpert:\nNPS 3.34, 895 notes, 25 walls, 51 bombs\n\nExpert+:\nNPS 4.65, 1247 notes, 20 walls, 48 bombs\n\nThanks to Redmagi and Skeelie for playtesting!\n\nEnjoy!",uploader:{id:4285318,name:"kolezan",uniqueSet:!0,hash:"5cff0b7398cc5a672c84fcbb",avatar:"https://cdn.beatsaver.com/avatar/220513618763055106.png",type:"DISCORD"},metadata:{bpm:242,duration:267,songName:"Megalovania",songSubName:"Remix (Kole Edit)",songAuthorName:"Camellia",levelAuthorName:"Kolezan (Lighting by Skeelie)"},stats:{plays:0,downloads:6279,upvotes:1738,downvotes:61,score:.9173},uploaded:"2019-11-29T07:42:50.058Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"ac6eb8bb6ce09461d164dcfe2ae24606bbdfa967",key:"7288",state:"Published",createdAt:"2019-11-29T07:42:50.058Z",sageScore:6,diffs:[{njs:11,offset:1,notes:356,bombs:0,obstacles:26,nps:1.392,length:1031.5,characteristic:"OneSaber",difficulty:"Easy",events:34390,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:255.744,paritySummary:{errors:37,warns:45,resets:0}},{njs:13,offset:1,notes:446,bombs:17,obstacles:29,nps:1.744,length:1031.5,characteristic:"OneSaber",difficulty:"Normal",events:34390,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:255.744,paritySummary:{errors:42,warns:49,resets:0}},{njs:15,offset:.7,notes:568,bombs:53,obstacles:30,nps:2.221,length:1031.5,characteristic:"OneSaber",difficulty:"Hard",events:34390,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:255.744,paritySummary:{errors:34,warns:75,resets:10}},{njs:18,offset:0,notes:895,bombs:51,obstacles:25,nps:3.5,length:1031.5,characteristic:"OneSaber",difficulty:"Expert",events:34390,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:255.744,paritySummary:{errors:28,warns:84,resets:3}},{njs:20,offset:1.2,notes:1247,bombs:48,obstacles:20,nps:4.857,length:1035.5,characteristic:"OneSaber",difficulty:"ExpertPlus",events:34390,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:256.736,paritySummary:{errors:27,warns:61,resets:5}},{njs:10,offset:0,notes:0,bombs:0,obstacles:0,nps:0,length:0,characteristic:"Lightshow",difficulty:"Easy",events:34390,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:0,paritySummary:{errors:0,warns:0,resets:0}}],downloadURL:"https://cdn.beatsaver.com/ac6eb8bb6ce09461d164dcfe2ae24606bbdfa967.zip",coverURL:"https://cdn.beatsaver.com/ac6eb8bb6ce09461d164dcfe2ae24606bbdfa967.jpg",previewURL:"https://cdn.beatsaver.com/ac6eb8bb6ce09461d164dcfe2ae24606bbdfa967.mp3"}],createdAt:"2019-11-29T07:42:50.058Z",updatedAt:"2019-11-29T07:42:50.058Z",lastPublishedAt:"2019-11-29T07:42:50.058Z"},{id:"709",name:"Weak - AJR",description:"Expert only but not really that hard. My third beat map.",uploader:{id:51936,name:"ryuk845",uniqueSet:!1,hash:"5cff0b7398cc5a672c84f1fe",avatar:"https://www.gravatar.com/avatar/5cff0b7398cc5a672c84f1fe?d=retro",type:"SIMPLE"},metadata:{bpm:124,duration:205,songName:"Weak - AJR",songSubName:"",songAuthorName:"Arcanthia",levelAuthorName:"ryuk845"},stats:{plays:0,downloads:4258,upvotes:1997,downvotes:75,score:.9173},uploaded:"2018-06-29T00:27:10Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"e4e6311258b1caae45341d87470d0c0145ce3910",key:"709",state:"Published",createdAt:"2018-06-29T00:27:10Z",sageScore:4,diffs:[{njs:10,offset:0,notes:540,bombs:0,obstacles:5,nps:2.742,length:407,characteristic:"Standard",difficulty:"Expert",events:471,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:196.935,paritySummary:{errors:101,warns:65,resets:0}}],downloadURL:"https://cdn.beatsaver.com/e4e6311258b1caae45341d87470d0c0145ce3910.zip",coverURL:"https://cdn.beatsaver.com/e4e6311258b1caae45341d87470d0c0145ce3910.jpg",previewURL:"https://cdn.beatsaver.com/e4e6311258b1caae45341d87470d0c0145ce3910.mp3"}],createdAt:"2018-06-29T00:27:10Z",updatedAt:"2018-06-29T00:27:10Z",lastPublishedAt:"2018-06-29T00:27:10Z"},{id:"8266",name:"Domino's Pizza Fresh Hack",description:"I dont know why I made this lol\n\nVideo links:\nhttps://www.youtube.com/watch?v=2-ifY2LPX_0&feature=youtu.be\nhttps://twitter.com/Dont_Shoot_MEE/status/1222536916601577472",uploader:{id:26973,name:"dontshootme",uniqueSet:!0,hash:"5dc4d17566e48d0006f882fc",avatar:"https://www.gravatar.com/avatar/5dc4d17566e48d0006f882fc?d=retro",type:"SIMPLE"},metadata:{bpm:107,duration:112,songName:"Domino's Pizza Fresh Hack",songSubName:"",songAuthorName:"Danny Fresh",levelAuthorName:"Dont-Shoot-ME"},stats:{plays:0,downloads:815,upvotes:882,downvotes:19,score:.9172},uploaded:"2020-01-29T15:07:20.809Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"cb3069aeef3d13478f2ee5321a18e35e673c9691",key:"8266",state:"Published",createdAt:"2020-01-29T15:07:20.809Z",sageScore:1,diffs:[{njs:20,offset:0,notes:759,bombs:72,obstacles:4,nps:6.896,length:196.281,characteristic:"Standard",difficulty:"ExpertPlus",events:1569,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:110.064,paritySummary:{errors:4,warns:0,resets:5}}],downloadURL:"https://cdn.beatsaver.com/cb3069aeef3d13478f2ee5321a18e35e673c9691.zip",coverURL:"https://cdn.beatsaver.com/cb3069aeef3d13478f2ee5321a18e35e673c9691.jpg",previewURL:"https://cdn.beatsaver.com/cb3069aeef3d13478f2ee5321a18e35e673c9691.mp3"}],createdAt:"2020-01-29T15:07:20.809Z",updatedAt:"2020-01-29T15:07:20.809Z",lastPublishedAt:"2020-01-29T15:07:20.809Z"},{id:"653f",name:"Wolf In Sheep's Clothing [Nightcore] - Set It Off",description:"I actually like this song better in Nightcore. Plus it's quite a popular nightcore song on youtube with over 16 million views https://www.youtube.com/watch?v=Jvl2e6X6PA4",uploader:{id:58338,name:"Joetastic",uniqueSet:!0,hash:"5cff0b7498cc5a672c85050e",avatar:"https://cdn.beatsaver.com/avatar/227767566402191360.png",type:"DISCORD"},metadata:{bpm:192.059,duration:163,songName:"Wolf In Sheep's Clothing (Nightcore)",songSubName:"",songAuthorName:"Set It Off",levelAuthorName:"Joetastic"},stats:{plays:0,downloads:1291,upvotes:884,downvotes:19,score:.9172},uploaded:"2019-09-22T18:58:41.682Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"410712794d58df7bc6249fed7fef50cf5e4391d6",key:"653f",state:"Published",createdAt:"2019-09-22T18:58:41.682Z",sageScore:5,diffs:[{njs:19,offset:0,notes:710,bombs:12,obstacles:2,nps:4.474,length:508,characteristic:"Standard",difficulty:"ExpertPlus",events:2207,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:158.701,paritySummary:{errors:45,warns:50,resets:0}}],downloadURL:"https://cdn.beatsaver.com/410712794d58df7bc6249fed7fef50cf5e4391d6.zip",coverURL:"https://cdn.beatsaver.com/410712794d58df7bc6249fed7fef50cf5e4391d6.jpg",previewURL:"https://cdn.beatsaver.com/410712794d58df7bc6249fed7fef50cf5e4391d6.mp3"}],createdAt:"2019-09-22T18:58:41.682Z",updatedAt:"2019-09-22T18:58:41.682Z",lastPublishedAt:"2019-09-22T18:58:41.682Z"},{id:"6078",name:"Youngblood - 5 Seconds of Summer",description:"Just an Expert level.",uploader:{id:30311,name:"bennydabeast",uniqueSet:!0,hash:"5cff0b7298cc5a672c84e98d",avatar:"https://cdn.beatsaver.com/avatar/30311.jpg",type:"SIMPLE"},metadata:{bpm:120,duration:204,songName:"Youngblood",songSubName:"",songAuthorName:"5 Seconds of Summer",levelAuthorName:"BennyDabeast"},stats:{plays:0,downloads:2815,upvotes:991,downvotes:24,score:.9171},uploaded:"2019-08-31T21:49:30.872Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"182e88e0e80450dd02bdcd6ac4924e3cc00d8673",key:"6078",state:"Published",createdAt:"2019-08-31T21:49:30.872Z",sageScore:4,diffs:[{njs:12,offset:1,notes:609,bombs:8,obstacles:41,nps:3.045,length:400,characteristic:"Standard",difficulty:"Hard",events:726,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:200,paritySummary:{errors:86,warns:74,resets:3}},{njs:12,offset:0,notes:614,bombs:8,obstacles:41,nps:3.07,length:400,characteristic:"Standard",difficulty:"Expert",events:726,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:200,paritySummary:{errors:91,warns:74,resets:3}}],downloadURL:"https://cdn.beatsaver.com/182e88e0e80450dd02bdcd6ac4924e3cc00d8673.zip",coverURL:"https://cdn.beatsaver.com/182e88e0e80450dd02bdcd6ac4924e3cc00d8673.jpg",previewURL:"https://cdn.beatsaver.com/182e88e0e80450dd02bdcd6ac4924e3cc00d8673.mp3"}],createdAt:"2019-08-31T21:49:30.872Z",updatedAt:"2019-08-31T21:49:30.872Z",lastPublishedAt:"2019-08-31T21:49:30.872Z"},{id:"318f",name:"Awaken [League of Legends Season 2019 Soundtrack] - Valerie Broussard",description:"Made 4 versions of this map each with a different time signature but I think have I found the one I'm happy with. Awaken featuring Valerie Broussard, the soundtrack for League of Legends' 2019 Season Cinematic. Difficulty is a really easy expert but complex enough to not be put in hard. I brought the song off iTunes so it's the highest quality file you can get ;)",uploader:{id:58338,name:"Joetastic",uniqueSet:!0,hash:"5cff0b7498cc5a672c85050e",avatar:"https://cdn.beatsaver.com/avatar/227767566402191360.png",type:"DISCORD"},metadata:{bpm:160,duration:194,songName:"Awaken",songSubName:"Valerie Broussard",songAuthorName:"Joetastic",levelAuthorName:"Joetastic"},stats:{plays:0,downloads:1940,upvotes:1731,downvotes:61,score:.9171},uploaded:"2019-01-27T08:19:46Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"f2481180576b33bdc23e4f4f1a26eaf4e0e09aec",key:"318f",state:"Published",createdAt:"2019-01-27T08:19:46Z",sageScore:5,diffs:[{njs:15,offset:0,notes:519,bombs:30,obstacles:2,nps:2.836,length:488.09,characteristic:"Standard",difficulty:"Expert",events:872,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:183.034,paritySummary:{errors:40,warns:38,resets:2}}],downloadURL:"https://cdn.beatsaver.com/f2481180576b33bdc23e4f4f1a26eaf4e0e09aec.zip",coverURL:"https://cdn.beatsaver.com/f2481180576b33bdc23e4f4f1a26eaf4e0e09aec.jpg",previewURL:"https://cdn.beatsaver.com/f2481180576b33bdc23e4f4f1a26eaf4e0e09aec.mp3"}],createdAt:"2019-01-27T08:19:46Z",updatedAt:"2019-01-27T08:19:46Z",lastPublishedAt:"2019-01-27T08:19:46Z"},{id:"248e",name:"Dance, Dance - Fall Out Boy",description:"114.5 BPM / 3:01 Runtime\r\nEasy / 233 Notes\r\nNormal / 370 Notes\r\nHard / 495 Notes\r\nExpert / 726 Notes\r\n\r\nGameplay:\r\nhttps://youtu.be/fyj_fjaGpd8\r\nSong:\r\nhttps://www.youtube.com/watch?v=C6MOKXm8x50",uploader:{id:4284981,name:"skylerwallace",uniqueSet:!0,hash:"5cff0b7298cc5a672c84ea67",avatar:"https://cdn.beatsaver.com/avatar/398344856868487168.png",type:"DISCORD"},metadata:{bpm:114,duration:182,songName:"Dance, Dance",songSubName:"Fall Out Boy",songAuthorName:"Skyler Wallace",levelAuthorName:"skylerwallace"},stats:{plays:0,downloads:5632,upvotes:2351,downvotes:95,score:.9171},uploaded:"2018-12-08T06:20:28Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"142d2cc083037d25dce744ef747eb3eb0f30ab72",key:"248e",state:"Published",createdAt:"2018-12-08T06:20:28Z",sageScore:5,diffs:[{njs:10,offset:0,notes:233,bombs:2,obstacles:15,nps:1.312,length:339,characteristic:"Standard",difficulty:"Easy",events:0,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:178.421,paritySummary:{errors:49,warns:18,resets:2}},{njs:10,offset:0,notes:370,bombs:8,obstacles:19,nps:2.083,length:339,characteristic:"Standard",difficulty:"Normal",events:3172,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:178.421,paritySummary:{errors:58,warns:16,resets:0}},{njs:10,offset:0,notes:495,bombs:0,obstacles:8,nps:2.787,length:339,characteristic:"Standard",difficulty:"Hard",events:3172,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:178.421,paritySummary:{errors:57,warns:32,resets:0}},{njs:12,offset:0,notes:726,bombs:34,obstacles:0,nps:4.087,length:339,characteristic:"Standard",difficulty:"Expert",events:3180,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:178.421,paritySummary:{errors:40,warns:27,resets:4}}],downloadURL:"https://cdn.beatsaver.com/142d2cc083037d25dce744ef747eb3eb0f30ab72.zip",coverURL:"https://cdn.beatsaver.com/142d2cc083037d25dce744ef747eb3eb0f30ab72.jpg",previewURL:"https://cdn.beatsaver.com/142d2cc083037d25dce744ef747eb3eb0f30ab72.mp3"}],createdAt:"2018-12-08T06:20:28Z",updatedAt:"2018-12-08T06:20:28Z",lastPublishedAt:"2018-12-08T06:20:28Z"},{id:"177e8",name:"{Modchart} Duumu & Slyleaf - Illuminate",description:"## IMPORTANT: This map will most likely be broken if you just hop into it. Please take the time to configure your game properly if you want to see it how it was intended. I know, it's super annoying, but there's nothing I can do about it. There's no better system. Basically if the intro to the map is white for like more than a second, you see the BTS logo, or if your walls look +'s than it's broken.\n\n!! WARNINGS !!\n- Use the newest versions of Chroma and NE (Available on ModAssistant), they'll allow for you to actually use the new environment enhancements. New NE will also SIGNIFICANTLY increase performance. I have not tested if this is playable on previous versions of NE.\n- Use all effects on lights. Remember this is expert not E+ so you need to adjust the \"Environment Effects\" setting. This map is by no means intense, but no flickering wasn't built for chroma and will break the lighting.\n- Turn off shockwave, as there's a bug where it cuts off distortion effects on walls that are under you\n- Turn on bloom, Beat Saber tries to make baked lighting on walls and they break on Noodle walls. You can ignore this if you have the mod that fixes this, although I don't know how the look will change.\n- Please disable NJSFixer, as this completely breaks the walls :(\n\nI've spent equal, if not, MORE time on this than Homesick. This map utilizes the new Chroma environment enhancements. I really went all out with it. I think this map is really unique and there are few, if not NO other maps so far that offer the experience this map gives right now. \n\nThis song means a lot to me. I've had this song added since summer 2019, it came up in my recommended and I fell in love with it. It's such an incredible vibe and it makes me feel super comfy. Duumu or Slyleaf, if you're reading this, you're incredible. I am yet to find any other song that makes me feel like this. I really hope you enjoy seeing what I imagine when listening to it.\n\nEnjoy.\n\nVideo: https://youtu.be/lFL3Gjy15oc",uploader:{id:4284246,name:"swifter1243",uniqueSet:!0,hash:"5dcf3af29eccad0006a0b45f",avatar:"https://cdn.beatsaver.com/avatar/166644275793100801.png",type:"DISCORD"},metadata:{bpm:100,duration:240,songName:"Illuminate",songSubName:"",songAuthorName:"Duumu, Slyleaf",levelAuthorName:"Swifter1243"},stats:{plays:0,downloads:1794,upvotes:900,downvotes:20,score:.917},uploaded:"2021-05-03T15:44:55.957Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"f5f56ebdee279caae376daf1a6a703576aa08bcd",key:"177e8",state:"Published",createdAt:"2021-05-03T15:44:55.957Z",sageScore:3,diffs:[{njs:18,offset:-.4,notes:581,bombs:8,obstacles:0,nps:2.591,length:373.75,characteristic:"Standard",difficulty:"Hard",events:1367,chroma:!0,me:!1,ne:!1,cinema:!1,seconds:224.25,paritySummary:{errors:0,warns:0,resets:3}},{njs:16,offset:1,notes:581,bombs:8,obstacles:8102,nps:2.591,length:373.75,characteristic:"Standard",difficulty:"Expert",events:2183,chroma:!0,me:!1,ne:!0,cinema:!1,seconds:224.25,paritySummary:{errors:0,warns:0,resets:3}}],downloadURL:"https://cdn.beatsaver.com/f5f56ebdee279caae376daf1a6a703576aa08bcd.zip",coverURL:"https://cdn.beatsaver.com/f5f56ebdee279caae376daf1a6a703576aa08bcd.jpg",previewURL:"https://cdn.beatsaver.com/f5f56ebdee279caae376daf1a6a703576aa08bcd.mp3"}],createdAt:"2021-05-03T15:44:55.957Z",updatedAt:"2021-05-03T15:44:55.957Z",lastPublishedAt:"2021-05-03T15:44:55.957Z"},{id:"907f",name:"Alan Walker - Faded",description:"This will likely be my final map.\n\nThanks to the people who played my maps and thanks to the mapping community for the support.\n\nadieu.",uploader:{id:31355,name:"wonderfulsnowball",uniqueSet:!0,hash:"5d5be38aa959f6000650d725",avatar:"https://www.gravatar.com/avatar/5d5be38aa959f6000650d725?d=retro",type:"SIMPLE"},metadata:{bpm:90,duration:113,songName:"Faded",songSubName:"(Short Ver.)",songAuthorName:"Alan Walker",levelAuthorName:"WonderfulSnowball"},stats:{plays:0,downloads:6805,upvotes:2077,downvotes:80,score:.917},uploaded:"2020-03-15T23:33:05.468Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"72808dcf1d5e2f3b4d08ba98cec32d39d696ba91",key:"907f",state:"Published",createdAt:"2020-03-15T23:33:05.468Z",sageScore:7,diffs:[{njs:12,offset:0,notes:139,bombs:0,obstacles:0,nps:1.313,length:158.75,characteristic:"Standard",difficulty:"Easy",events:3151,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:105.833,paritySummary:{errors:2,warns:2,resets:0}},{njs:12,offset:-.25,notes:212,bombs:0,obstacles:0,nps:2.003,length:158.75,characteristic:"Standard",difficulty:"Normal",events:3151,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:105.833,paritySummary:{errors:2,warns:0,resets:0}},{njs:13,offset:-.5,notes:281,bombs:0,obstacles:2,nps:2.655,length:158.75,characteristic:"Standard",difficulty:"Hard",events:3151,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:105.833,paritySummary:{errors:0,warns:0,resets:0}},{njs:15,offset:.25,notes:347,bombs:0,obstacles:2,nps:3.279,length:158.75,characteristic:"Standard",difficulty:"Expert",events:3151,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:105.833,paritySummary:{errors:0,warns:0,resets:0}},{njs:18,offset:.25,notes:367,bombs:0,obstacles:3,nps:3.468,length:158.75,characteristic:"Standard",difficulty:"ExpertPlus",events:3151,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:105.833,paritySummary:{errors:0,warns:0,resets:0}}],downloadURL:"https://cdn.beatsaver.com/72808dcf1d5e2f3b4d08ba98cec32d39d696ba91.zip",coverURL:"https://cdn.beatsaver.com/72808dcf1d5e2f3b4d08ba98cec32d39d696ba91.jpg",previewURL:"https://cdn.beatsaver.com/72808dcf1d5e2f3b4d08ba98cec32d39d696ba91.mp3"}],createdAt:"2020-03-15T23:33:05.468Z",updatedAt:"2020-03-15T23:33:05.468Z",lastPublishedAt:"2020-03-15T23:33:05.468Z"},{id:"6666",name:"Mick Gordon - Cyberdemon",description:"Rip and tear\r\n\r\nVideo: https://www.youtube.com/watch?v=pcqmDzUobEc",uploader:{id:4235138,name:"CyanSnow",uniqueSet:!0,hash:"5cff0b7698cc5a672c8543ac",avatar:"https://cdn.beatsaver.com/avatar/154341137694326784.png",type:"DISCORD"},metadata:{bpm:179.921,duration:224,songName:"Cyberdemon",songSubName:"",songAuthorName:"Mick Gordon",levelAuthorName:"CyanSnow"},stats:{plays:0,downloads:5676,upvotes:3668,downvotes:173,score:.917},uploaded:"2019-09-28T15:49:27.681Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"aaaa68fdb4e7ddb5634ee3afd80cb0b5dda2260c",key:"6666",state:"Published",createdAt:"2019-09-28T15:49:27.681Z",sageScore:6,diffs:[{njs:19,offset:.5,notes:1494,bombs:666,obstacles:3666,nps:6.829,length:656,characteristic:"Lawless",difficulty:"ExpertPlus",events:33666,chroma:!1,me:!0,ne:!1,cinema:!1,seconds:218.763,paritySummary:{errors:0,warns:0,resets:0}}],downloadURL:"https://cdn.beatsaver.com/aaaa68fdb4e7ddb5634ee3afd80cb0b5dda2260c.zip",coverURL:"https://cdn.beatsaver.com/aaaa68fdb4e7ddb5634ee3afd80cb0b5dda2260c.jpg",previewURL:"https://cdn.beatsaver.com/aaaa68fdb4e7ddb5634ee3afd80cb0b5dda2260c.mp3"}],createdAt:"2019-09-28T15:49:27.681Z",updatedAt:"2019-09-28T15:49:27.681Z",lastPublishedAt:"2019-09-28T15:49:27.681Z"},{id:"fb0f",name:"Michael Jackson - Thriller (James Egbert Dubstep Remix)",description:"Yet another great and dancy Dubstep mix of an MJ song.\nYou can follow me on twitch for more awesomeness at https://www.twitch.tv/pkdan\nVideo preview of the map: https://www.youtube.com/watch?v=ZuHcfSSPtig\n\nLength: 3:15\nNotes: 668 (Expert) / 991 (Expert+)\nNJS: 16 (Expert) / 20 (Expert+)\nBPM: 128",uploader:{id:4284639,name:"pkdan",uniqueSet:!0,hash:"5e6d07927abb00000681e8ee",avatar:"https://cdn.beatsaver.com/avatar/315553265091739650.png",type:"DISCORD"},metadata:{bpm:128,duration:195,songName:"Thriller (James Egbert Dubstep Remix)",songSubName:"",songAuthorName:"Michael Jackson",levelAuthorName:"pkdan"},stats:{plays:0,downloads:6967,upvotes:850,downvotes:18,score:.9168},uploaded:"2020-10-07T15:04:12.225Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"5d5df852651bb568012635ff3a356efdd9372b80",key:"fb0f",state:"Published",createdAt:"2020-10-07T15:04:12.225Z",sageScore:4,diffs:[{njs:16,offset:-.2,notes:668,bombs:33,obstacles:8,nps:3.591,length:396.875,characteristic:"Standard",difficulty:"Expert",events:2296,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:186.035,paritySummary:{errors:0,warns:0,resets:0}},{njs:20,offset:.3,notes:991,bombs:33,obstacles:8,nps:5.327,length:396.875,characteristic:"Standard",difficulty:"ExpertPlus",events:2296,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:186.035,paritySummary:{errors:0,warns:0,resets:0}}],downloadURL:"https://cdn.beatsaver.com/5d5df852651bb568012635ff3a356efdd9372b80.zip",coverURL:"https://cdn.beatsaver.com/5d5df852651bb568012635ff3a356efdd9372b80.jpg",previewURL:"https://cdn.beatsaver.com/5d5df852651bb568012635ff3a356efdd9372b80.mp3"}],createdAt:"2020-10-07T15:04:12.225Z",updatedAt:"2020-10-07T15:04:12.225Z",lastPublishedAt:"2020-10-07T15:04:12.225Z"},{id:"ed2a",name:"NULCTRL (Meiso FLIP)",description:"POTENTIAL SEIZURE WARNING\n\nANTI-QUEST REUPLOAD\n\nIT IS HIGHLY RECCOMENDED TO PLAY WITH THE FOLLOWING ADVANCED GRAPHICS SETTINGS SET AS SUCH\n-BLOOM ON\n-DISTORTION ON\n-0 MAX SHOCKWAVE PARTICLES\n\nVideo: https://youtu.be/xGICwOKNa9Y\n\nSpecial thanks to https://i.imgur.com/VbKV9AX.jpg for feedback to make sure things weɹe actually good.\n\n",uploader:{id:4235136,name:"reaxt",uniqueSet:!0,hash:"5cff0b7298cc5a672c84e8ab",avatar:"https://cdn.beatsaver.com/avatar/163052863038291970.png",type:"DISCORD"},metadata:{bpm:200,duration:215,songName:"NULCTRL MEISO FLIP",songSubName:"",songAuthorName:"Meiso",levelAuthorName:"Reaxt"},stats:{plays:0,downloads:1769,upvotes:1941,downvotes:73,score:.9168},uploaded:"2020-09-17T21:26:11.811Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"89b1de26baad93c63a6bdb3d9dbae7dc4972897b",key:"ed2a",state:"Published",createdAt:"2020-09-17T21:26:11.811Z",sageScore:3,diffs:[{njs:19,offset:.37,notes:2984,bombs:0,obstacles:1570,nps:14.22,length:699.5,characteristic:"Lawless",difficulty:"ExpertPlus",events:3557,chroma:!0,me:!1,ne:!0,cinema:!1,seconds:209.85,paritySummary:{errors:0,warns:0,resets:0}}],downloadURL:"https://cdn.beatsaver.com/89b1de26baad93c63a6bdb3d9dbae7dc4972897b.zip",coverURL:"https://cdn.beatsaver.com/89b1de26baad93c63a6bdb3d9dbae7dc4972897b.jpg",previewURL:"https://cdn.beatsaver.com/89b1de26baad93c63a6bdb3d9dbae7dc4972897b.mp3"}],createdAt:"2020-09-17T21:26:11.811Z",updatedAt:"2020-09-17T21:26:11.811Z",lastPublishedAt:"2020-09-17T21:26:11.811Z"},{id:"658e",name:"Take Back the Night - CaptainSparklez ft. TryHardNinja",description:"Take Back the Night, Written and Performed by TryHardNinja, Original Animation Produced and Directed by CaptainSparklez.\n\nCheck out the gameplay video here! https://www.youtube.com/watch?v=47Fnh08AEy4",uploader:{id:58338,name:"Joetastic",uniqueSet:!0,hash:"5cff0b7498cc5a672c85050e",avatar:"https://cdn.beatsaver.com/avatar/227767566402191360.png",type:"DISCORD"},metadata:{bpm:126,duration:317,songName:"Take Back the Night",songSubName:"",songAuthorName:"CaptainSparklez ft. TryHardNinja",levelAuthorName:"Joetastic"},stats:{plays:0,downloads:1693,upvotes:611,downvotes:8,score:.9168},uploaded:"2019-09-24T02:56:43.768Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"0361c056cd4247d639eda648bf21e4eae4454f3e",key:"658e",state:"Published",createdAt:"2019-09-24T02:56:43.768Z",sageScore:6,diffs:[{njs:12,offset:0,notes:652,bombs:0,obstacles:62,nps:2.126,length:644,characteristic:"Standard",difficulty:"Hard",events:4659,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:306.667,paritySummary:{errors:56,warns:49,resets:0}},{njs:14,offset:0,notes:923,bombs:0,obstacles:85,nps:3.01,length:644,characteristic:"Standard",difficulty:"Expert",events:4659,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:306.667,paritySummary:{errors:52,warns:29,resets:0}},{njs:16,offset:0,notes:1051,bombs:0,obstacles:87,nps:3.427,length:644,characteristic:"Standard",difficulty:"ExpertPlus",events:4669,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:306.667,paritySummary:{errors:45,warns:43,resets:0}}],downloadURL:"https://cdn.beatsaver.com/0361c056cd4247d639eda648bf21e4eae4454f3e.zip",coverURL:"https://cdn.beatsaver.com/0361c056cd4247d639eda648bf21e4eae4454f3e.jpg",previewURL:"https://cdn.beatsaver.com/0361c056cd4247d639eda648bf21e4eae4454f3e.mp3"}],createdAt:"2019-09-24T02:56:43.768Z",updatedAt:"2019-09-24T02:56:43.768Z",lastPublishedAt:"2019-09-24T02:56:43.768Z"},{id:"64c9",name:"You Don't Want Me (Crystal Skies Remix)",description:"My first wall map! On top of having walls, it also has Chroma lights!\n\nYou have a few options for playing, you can view the lightshow with or without walls, and you can play the map with or without walls. \n\nHere's a video of the walls and the lights :D https://www.youtube.com/watch?v=DkRDF8bbNjQ\n\nI did the whole map myself, but of course, I had some help from the lovely people on the BSMG. Thanks Kival Evan, Dni0, JENNAexe, Aeroluna and necrospook_ for the testplays! And also, another thanks to Aeroluna for helping me fix any bugs with the metadata for my map :)\n\nPS.: Beatcore, one of the song's artists, also released a new EP today that is really good! He's super unknown so go check it out on YouTube and Spotify if you get a chance. He's really talented :D\n\nYou Don't Want Me (Crystal Skies Remix) - Beatcore, Ashley Apollodor | 130 BPM | Expert+ Only (With and without walls) along with Lightshow and Lightshow/Wallshow | Fully mapped with custom lights and walls\n\n<3\n\n",uploader:{id:17131,name:"tranquillizeme",uniqueSet:!0,hash:"5cff0b7798cc5a672c85609e",avatar:"https://www.gravatar.com/avatar/5cff0b7798cc5a672c85609e?d=retro",type:"SIMPLE"},metadata:{bpm:130,duration:233,songName:"You Don't Want Me",songSubName:"Crystal Skies Remix",songAuthorName:"Beatcore, Ashley Apollodor, Crystal Skies",levelAuthorName:"TranquillizeMe"},stats:{plays:0,downloads:1743,upvotes:851,downvotes:18,score:.9168},uploaded:"2019-09-20T22:30:43.842Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"fbf6f4775ff824facf83ad4a27f48d220466f21e",key:"64c9",state:"Published",createdAt:"2019-09-20T22:30:43.842Z",sageScore:8,diffs:[{njs:18,offset:0,notes:782,bombs:22,obstacles:0,nps:3.597,length:471,characteristic:"Standard",difficulty:"Expert",events:16275,chroma:!1,me:!0,ne:!1,cinema:!1,seconds:217.385,paritySummary:{errors:0,warns:0,resets:0}},{njs:18,offset:0,notes:782,bombs:22,obstacles:5003,nps:3.597,length:471,characteristic:"Standard",difficulty:"ExpertPlus",events:16275,chroma:!1,me:!0,ne:!1,cinema:!1,seconds:217.385,paritySummary:{errors:0,warns:0,resets:0}},{njs:18,offset:0,notes:0,bombs:0,obstacles:0,nps:0,length:0,characteristic:"Lightshow",difficulty:"Easy",events:16275,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:0,paritySummary:{errors:0,warns:0,resets:0}},{njs:18,offset:0,notes:0,bombs:0,obstacles:5003,nps:0,length:0,characteristic:"Lightshow",difficulty:"Normal",events:16275,chroma:!1,me:!0,ne:!1,cinema:!1,seconds:0,paritySummary:{errors:0,warns:0,resets:0}}],downloadURL:"https://cdn.beatsaver.com/fbf6f4775ff824facf83ad4a27f48d220466f21e.zip",coverURL:"https://cdn.beatsaver.com/fbf6f4775ff824facf83ad4a27f48d220466f21e.jpg",previewURL:"https://cdn.beatsaver.com/fbf6f4775ff824facf83ad4a27f48d220466f21e.mp3"}],createdAt:"2019-09-20T22:30:43.842Z",updatedAt:"2019-09-20T22:30:43.842Z",lastPublishedAt:"2019-09-20T22:30:43.842Z"},{id:"431c",name:"Shine (RWBY: Volume 2 Soundtrack) - Jeff Williams ft. Casey Lee Williams",description:'"Shine" is a single that was featured prominently in the episode: "Dance Dance Infiltration", where Team JNPR performed a synchronized dance routine to the song.',uploader:{id:58338,name:"Joetastic",uniqueSet:!0,hash:"5cff0b7498cc5a672c85050e",avatar:"https://cdn.beatsaver.com/avatar/227767566402191360.png",type:"DISCORD"},metadata:{bpm:122,duration:260,songName:"Shine",songSubName:"Jeff Williams ft. Casey Lee Williams",songAuthorName:"Joetastic",levelAuthorName:"Joetastic"},stats:{plays:0,downloads:2411,upvotes:661,downvotes:10,score:.9168},uploaded:"2019-04-03T08:52:47Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"f95bfca25401b117bd9bec202c741bd75f44141b",key:"431c",state:"Published",createdAt:"2019-04-03T08:52:47Z",sageScore:6,diffs:[{njs:14,offset:0,notes:969,bombs:0,obstacles:7,nps:3.818,length:516,characteristic:"Standard",difficulty:"Expert",events:1070,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:253.77,paritySummary:{errors:28,warns:33,resets:0}}],downloadURL:"https://cdn.beatsaver.com/f95bfca25401b117bd9bec202c741bd75f44141b.zip",coverURL:"https://cdn.beatsaver.com/f95bfca25401b117bd9bec202c741bd75f44141b.jpg",previewURL:"https://cdn.beatsaver.com/f95bfca25401b117bd9bec202c741bd75f44141b.mp3"}],createdAt:"2019-04-03T08:52:47Z",updatedAt:"2019-04-03T08:52:47Z",lastPublishedAt:"2019-04-03T08:52:47Z"},{id:"3436",name:"Christopher Tin - Baba Yetu",description:"This song was recommended to me. Baba Yetu is theme song Civilization IV.",uploader:{id:4285018,name:"majorpickle",uniqueSet:!0,hash:"5cff0b7398cc5a672c84f792",avatar:"https://cdn.beatsaver.com/avatar/450358937657671680.png",type:"DISCORD"},metadata:{bpm:92,duration:210,songName:"Baba Yetu",songSubName:"Christopher Tin",songAuthorName:"Majorpickle",levelAuthorName:"majorpickle"},stats:{plays:0,downloads:2763,upvotes:1090,downvotes:29,score:.9168},uploaded:"2019-02-07T03:44:18Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"60c7f5c08d38ad3664ad42874b874675a03da14a",key:"3436",state:"Published",createdAt:"2019-02-07T03:44:18Z",sageScore:4,diffs:[{njs:10,offset:0,notes:681,bombs:0,obstacles:86,nps:3.638,length:287,characteristic:"Standard",difficulty:"Expert",events:535,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:187.174,paritySummary:{errors:33,warns:19,resets:0}}],downloadURL:"https://cdn.beatsaver.com/60c7f5c08d38ad3664ad42874b874675a03da14a.zip",coverURL:"https://cdn.beatsaver.com/60c7f5c08d38ad3664ad42874b874675a03da14a.jpg",previewURL:"https://cdn.beatsaver.com/60c7f5c08d38ad3664ad42874b874675a03da14a.mp3"}],createdAt:"2019-02-07T03:44:18Z",updatedAt:"2019-02-07T03:44:18Z",lastPublishedAt:"2019-02-07T03:44:18Z"},{id:"2c5d",name:"Stay Frosty Royal Milk Tea - Fall Out Boy",description:"Expert Playthrough : https://youtu.be/mzmD9PYtW3I",uploader:{id:13320,name:"novashaft",uniqueSet:!0,hash:"5cff0b7398cc5a672c84ee55",avatar:"https://www.gravatar.com/avatar/5cff0b7398cc5a672c84ee55?d=retro",type:"SIMPLE"},metadata:{bpm:146,duration:174,songName:"Stay Frosty Royal Milk Tea",songSubName:"Fall Out Boy",songAuthorName:"NovaShaft",levelAuthorName:"novashaft"},stats:{plays:0,downloads:1134,upvotes:447,downvotes:2,score:.9168},uploaded:"2019-01-09T20:30:52Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"c5b540769ac513b9ebf2f59f465823a9b73f6032",key:"2c5d",state:"Published",createdAt:"2019-01-09T20:30:52Z",sageScore:5,diffs:[{njs:10,offset:0,notes:296,bombs:6,obstacles:13,nps:1.801,length:400,characteristic:"Standard",difficulty:"Normal",events:855,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:164.384,paritySummary:{errors:38,warns:22,resets:0}},{njs:11,offset:0,notes:401,bombs:6,obstacles:13,nps:2.439,length:400,characteristic:"Standard",difficulty:"Hard",events:855,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:164.384,paritySummary:{errors:43,warns:31,resets:0}},{njs:13,offset:0,notes:512,bombs:8,obstacles:13,nps:3.115,length:400,characteristic:"Standard",difficulty:"Expert",events:855,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:164.384,paritySummary:{errors:46,warns:75,resets:0}}],downloadURL:"https://cdn.beatsaver.com/c5b540769ac513b9ebf2f59f465823a9b73f6032.zip",coverURL:"https://cdn.beatsaver.com/c5b540769ac513b9ebf2f59f465823a9b73f6032.jpg",previewURL:"https://cdn.beatsaver.com/c5b540769ac513b9ebf2f59f465823a9b73f6032.mp3"}],createdAt:"2019-01-09T20:30:52Z",updatedAt:"2019-01-09T20:30:52Z",lastPublishedAt:"2019-01-09T20:30:52Z"},{id:"446",name:"Simple and Clean - PLANITb Remix - Kingdom Hearts",description:"Normal / Hard / Expert\r\nLight show\r\n\r\nhttps://youtu.be/rYrIFjxeY0k",uploader:{id:52578,name:"xroninbladex",uniqueSet:!0,hash:"5cff0b7298cc5a672c84ea58",avatar:"https://www.gravatar.com/avatar/5cff0b7298cc5a672c84ea58?d=retro",type:"SIMPLE"},metadata:{bpm:130,duration:131,songName:"Simple and Clean",songSubName:"-PLANITb Remix-",songAuthorName:"xroninbladex",levelAuthorName:"xroninbladex"},stats:{plays:0,downloads:2370,upvotes:1567,downvotes:53,score:.9168},uploaded:"2018-06-08T14:55:59Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"8390e3f33ef12a395602c4ae12df9250a730a629",key:"446",state:"Published",createdAt:"2018-06-08T14:55:59Z",sageScore:5,diffs:[{njs:10,offset:0,notes:198,bombs:2,obstacles:1,nps:1.89,length:227,characteristic:"Standard",difficulty:"Normal",events:525,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:104.769,paritySummary:{errors:11,warns:28,resets:0}},{njs:10,offset:0,notes:310,bombs:2,obstacles:1,nps:2.959,length:227,characteristic:"Standard",difficulty:"Hard",events:525,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:104.769,paritySummary:{errors:33,warns:74,resets:0}},{njs:10,offset:0,notes:376,bombs:2,obstacles:1,nps:3.589,length:227,characteristic:"Standard",difficulty:"Expert",events:525,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:104.769,paritySummary:{errors:49,warns:56,resets:0}}],downloadURL:"https://cdn.beatsaver.com/8390e3f33ef12a395602c4ae12df9250a730a629.zip",coverURL:"https://cdn.beatsaver.com/8390e3f33ef12a395602c4ae12df9250a730a629.jpg",previewURL:"https://cdn.beatsaver.com/8390e3f33ef12a395602c4ae12df9250a730a629.mp3"}],createdAt:"2018-06-08T14:55:59Z",updatedAt:"2018-06-08T14:55:59Z",lastPublishedAt:"2018-06-08T14:55:59Z"},{id:"41b",name:"30 Seconds to Mars | Dangerous Night",description:"Normal/Hard/Expert\r\nExpert map is not that tough. Its a fairly slower song that flows nicely.",uploader:{id:41378,name:"greatyazer",uniqueSet:!0,hash:"5cff0b7298cc5a672c84ea71",avatar:"https://www.gravatar.com/avatar/5cff0b7298cc5a672c84ea71?d=retro",type:"SIMPLE"},metadata:{bpm:132,duration:200,songName:"Dangerous Night",songSubName:"30 Seconds to Mars",songAuthorName:"GreatYazer",levelAuthorName:"greatyazer"},stats:{plays:0,downloads:9071,upvotes:2404,downvotes:99,score:.9168},uploaded:"2018-06-07T17:49:47Z",automapper:!1,ranked:!0,qualified:!1,versions:[{hash:"85a675da674fb13e576f2ac9b61a5adc767b060a",key:"41b",state:"Published",createdAt:"2018-06-07T17:49:47Z",sageScore:5,diffs:[{njs:10,offset:0,notes:227,bombs:0,obstacles:53,nps:1.202,length:415.5,characteristic:"Standard",difficulty:"Normal",events:463,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:188.864,paritySummary:{errors:130,warns:10,resets:0},stars:.78},{njs:10,offset:0,notes:365,bombs:0,obstacles:59,nps:1.933,length:415.5,characteristic:"Standard",difficulty:"Hard",events:463,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:188.864,paritySummary:{errors:81,warns:31,resets:0},stars:1.2},{njs:10,offset:0,notes:520,bombs:0,obstacles:60,nps:2.753,length:415.5,characteristic:"Standard",difficulty:"Expert",events:463,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:188.864,paritySummary:{errors:60,warns:53,resets:0},stars:1.7}],downloadURL:"https://cdn.beatsaver.com/85a675da674fb13e576f2ac9b61a5adc767b060a.zip",coverURL:"https://cdn.beatsaver.com/85a675da674fb13e576f2ac9b61a5adc767b060a.jpg",previewURL:"https://cdn.beatsaver.com/85a675da674fb13e576f2ac9b61a5adc767b060a.mp3"}],createdAt:"2018-06-07T17:49:47Z",updatedAt:"2018-06-07T17:49:47Z",lastPublishedAt:"2018-06-07T17:49:47Z"},{id:"4f0f",name:"MOMOLAND - BAAM",description:'Whoot whoot, first map! Please enjoy and have fun!\nExpert+ is named "Alternate Expert" in game and is largely the same as Expert. The differences are at 1:05-1:24, 2:20-2:39, and 2:54-3:09 with Alt Expert being a little more intense and fun in my opinion. Still I found myself playing both Experts interchangeably so think of it as a little experimentation as I continue to learn.\n\nNEW! Expert Preview Video: https://www.youtube.com/watch?v=qA1811Z-uVo\nMirror: https://streamable.com/p634s\n\n1 Year Mapping Anniversary Remaster: https://beatsaver.com/beatmap/aa5c',uploader:{id:71661,name:"bloodcloak",uniqueSet:!0,hash:"5cff0b7698cc5a672c8551d3",avatar:"https://cdn.beatsaver.com/avatar/205707707187986442.png",type:"DISCORD"},metadata:{bpm:127,duration:208,songName:"BAAM",songSubName:"MOMOLAND",songAuthorName:"Bloodcloak",levelAuthorName:"Bloodcloak"},stats:{plays:0,downloads:2222,upvotes:709,downvotes:12,score:.9167},uploaded:"2019-05-26T01:22:06Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"d54ad194fe09598964d1c065887e52f2c4248b30",key:"4f0f",state:"Published",createdAt:"2019-05-26T01:22:06Z",sageScore:5,diffs:[{njs:10,offset:0,notes:576,bombs:0,obstacles:68,nps:2.91,length:419,characteristic:"Standard",difficulty:"Hard",events:1357,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:197.953,paritySummary:{errors:64,warns:46,resets:0}},{njs:12,offset:0,notes:783,bombs:0,obstacles:61,nps:3.955,length:419,characteristic:"Standard",difficulty:"Expert",events:1350,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:197.953,paritySummary:{errors:83,warns:69,resets:0}},{njs:12,offset:0,notes:819,bombs:0,obstacles:67,nps:4.137,length:419,characteristic:"Standard",difficulty:"ExpertPlus",events:1350,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:197.953,paritySummary:{errors:89,warns:52,resets:0}}],downloadURL:"https://cdn.beatsaver.com/d54ad194fe09598964d1c065887e52f2c4248b30.zip",coverURL:"https://cdn.beatsaver.com/d54ad194fe09598964d1c065887e52f2c4248b30.jpg",previewURL:"https://cdn.beatsaver.com/d54ad194fe09598964d1c065887e52f2c4248b30.mp3"}],createdAt:"2019-05-26T01:22:06Z",updatedAt:"2019-05-26T01:22:06Z",lastPublishedAt:"2019-05-26T01:22:06Z"},{id:"3714",name:"To The Stars - Braken (Monstercat Release)",description:"https://www.youtube.com/watch?v=105NIrAR4a4\r\nExpert+ only",uploader:{id:4285982,name:"downycat",uniqueSet:!0,hash:"5cff0b7398cc5a672c84ede5",avatar:"https://cdn.beatsaver.com/avatar/173538829888782336.png",type:"DISCORD"},metadata:{bpm:175,duration:202,songName:"To The Stars",songSubName:"Braken",songAuthorName:"DownyCat",levelAuthorName:"downycat"},stats:{plays:0,downloads:2451,upvotes:958,downvotes:23,score:.9167},uploaded:"2019-02-17T12:03:07Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"58fd2a28e6c3d6862084da1ec1b92c99090c5cd5",key:"3714",state:"Published",createdAt:"2019-02-17T12:03:07Z",sageScore:5,diffs:[{njs:14,offset:0,notes:996,bombs:0,obstacles:33,nps:5.34,length:544,characteristic:"Standard",difficulty:"ExpertPlus",events:2145,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:186.514,paritySummary:{errors:16,warns:23,resets:0}}],downloadURL:"https://cdn.beatsaver.com/58fd2a28e6c3d6862084da1ec1b92c99090c5cd5.zip",coverURL:"https://cdn.beatsaver.com/58fd2a28e6c3d6862084da1ec1b92c99090c5cd5.jpg",previewURL:"https://cdn.beatsaver.com/58fd2a28e6c3d6862084da1ec1b92c99090c5cd5.mp3"}],createdAt:"2019-02-17T12:03:07Z",updatedAt:"2019-02-17T12:03:07Z",lastPublishedAt:"2019-02-17T12:03:07Z"},{id:"645a",name:"1788-L - A B Y S S",description:"",uploader:{id:12996,name:"rustic",uniqueSet:!0,hash:"5cff0b7298cc5a672c84e8c4",avatar:"https://www.gravatar.com/avatar/5cff0b7298cc5a672c84e8c4?d=retro",type:"SIMPLE"},metadata:{bpm:177,duration:179,songName:"A B Y S S",songSubName:"",songAuthorName:"1788-L",levelAuthorName:"Rustic"},stats:{plays:0,downloads:1417,upvotes:981,downvotes:24,score:.9167},uploaded:"2019-09-18T18:07:03.444Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"5f85d131f63c7415967ba4414abef741686ece9c",key:"645a",state:"Published",createdAt:"2019-09-18T18:07:03.444Z",sageScore:6,diffs:[{njs:20,offset:0,notes:553,bombs:0,obstacles:3106,nps:3.224,length:506,characteristic:"Standard",difficulty:"ExpertPlus",events:9089,chroma:!1,me:!0,ne:!1,cinema:!1,seconds:171.525,paritySummary:{errors:0,warns:0,resets:0}}],downloadURL:"https://cdn.beatsaver.com/5f85d131f63c7415967ba4414abef741686ece9c.zip",coverURL:"https://cdn.beatsaver.com/5f85d131f63c7415967ba4414abef741686ece9c.jpg",previewURL:"https://cdn.beatsaver.com/5f85d131f63c7415967ba4414abef741686ece9c.mp3"}],createdAt:"2019-09-18T18:07:03.444Z",updatedAt:"2019-09-18T18:07:03.444Z",lastPublishedAt:"2019-09-18T18:07:03.444Z"},{id:"5bc1",name:"Propaganda - Muse",description:"Please note that this track will get blocked automatically on YouTube.\n\nExpert Playthrough : https://vimeo.com/353093204",uploader:{id:13320,name:"novashaft",uniqueSet:!0,hash:"5cff0b7398cc5a672c84ee55",avatar:"https://www.gravatar.com/avatar/5cff0b7398cc5a672c84ee55?d=retro",type:"SIMPLE"},metadata:{bpm:190,duration:182,songName:"Propaganda",songSubName:"",songAuthorName:"Muse",levelAuthorName:"NovaShaft"},stats:{plays:0,downloads:1728,upvotes:660,downvotes:10,score:.9167},uploaded:"2019-08-10T12:59:56.399Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"99738852493b819152a7651583f40b63bba70188",key:"5bc1",state:"Published",createdAt:"2019-08-10T12:59:56.399Z",sageScore:5,diffs:[{njs:11,offset:0,notes:366,bombs:0,obstacles:23,nps:2.093,length:553.75,characteristic:"Standard",difficulty:"Normal",events:900,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:174.868,paritySummary:{errors:32,warns:6,resets:0}},{njs:12,offset:0,notes:492,bombs:0,obstacles:24,nps:2.814,length:553.75,characteristic:"Standard",difficulty:"Hard",events:900,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:174.868,paritySummary:{errors:15,warns:8,resets:0}},{njs:14,offset:0,notes:620,bombs:0,obstacles:26,nps:3.546,length:553.75,characteristic:"Standard",difficulty:"Expert",events:900,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:174.868,paritySummary:{errors:19,warns:13,resets:0}}],downloadURL:"https://cdn.beatsaver.com/99738852493b819152a7651583f40b63bba70188.zip",coverURL:"https://cdn.beatsaver.com/99738852493b819152a7651583f40b63bba70188.jpg",previewURL:"https://cdn.beatsaver.com/99738852493b819152a7651583f40b63bba70188.mp3"}],createdAt:"2019-08-10T12:59:56.399Z",updatedAt:"2019-08-10T12:59:56.399Z",lastPublishedAt:"2019-08-10T12:59:56.399Z"},{id:"f003",name:"Calliope Mori - Excuse My Rudeness, But Could You Please RIP?",description:"Expert+ Preview: https://www.youtube.com/watch?v=XCZMtdvz91g\n\nYo, fellow Dead Beats, this has been stuck in my head ever since it came out. The original songs by Calliope are absolute fire. The others in HoloMyth as well as the rest of Hololive are amazing and you should expect more maps from this realm. \n\nI totally did not fall into the rabbit hole... If you have any issues with that then, 失礼しますが、RIP♡\n\nComments? Like it? Hate it? Let me know on Discord @Bloodcloak#5725 !",uploader:{id:71661,name:"bloodcloak",uniqueSet:!0,hash:"5cff0b7698cc5a672c8551d3",avatar:"https://cdn.beatsaver.com/avatar/205707707187986442.png",type:"DISCORD"},metadata:{bpm:124,duration:186,songName:"Excuse My Rudeness, But Could You Please RIP?",songSubName:"",songAuthorName:"Calliope Mori",levelAuthorName:"Bloodcloak"},stats:{plays:0,downloads:6752,upvotes:1803,downvotes:66,score:.9166},uploaded:"2020-09-21T22:48:02.152Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"4b2a227ddb923ce3e6a3060530037014966037e2",key:"f003",state:"Published",createdAt:"2020-09-21T22:48:02.152Z",sageScore:2,diffs:[{njs:12,offset:.4,notes:361,bombs:0,obstacles:139,nps:1.992,length:374.5,characteristic:"Standard",difficulty:"Normal",events:2716,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:181.21,paritySummary:{errors:3,warns:0,resets:0}},{njs:12,offset:.4,notes:652,bombs:0,obstacles:105,nps:3.598,length:374.5,characteristic:"Standard",difficulty:"Hard",events:2716,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:181.21,paritySummary:{errors:0,warns:0,resets:0}},{njs:16,offset:-.2,notes:948,bombs:0,obstacles:72,nps:5.232,length:374.5,characteristic:"Standard",difficulty:"Expert",events:2716,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:181.21,paritySummary:{errors:0,warns:0,resets:0}},{njs:18,offset:-.4,notes:1105,bombs:0,obstacles:60,nps:6.098,length:374.5,characteristic:"Standard",difficulty:"ExpertPlus",events:2716,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:181.21,paritySummary:{errors:0,warns:0,resets:0}}],downloadURL:"https://cdn.beatsaver.com/4b2a227ddb923ce3e6a3060530037014966037e2.zip",coverURL:"https://cdn.beatsaver.com/4b2a227ddb923ce3e6a3060530037014966037e2.jpg",previewURL:"https://cdn.beatsaver.com/4b2a227ddb923ce3e6a3060530037014966037e2.mp3"}],createdAt:"2020-09-21T22:48:02.152Z",updatedAt:"2020-09-21T22:48:02.152Z",lastPublishedAt:"2020-09-21T22:48:02.152Z"},{id:"a90a",name:"[TheFatRat Pack] Windfall - TheFatRat",description:'Here it is! The unofficial "TheFatRat" Music Pack in Beat Saber - with all beatmaps being singlehandedly made by me!\n\nAll songs included in TheFatRat Music Pack:\nMonody (ft. Laura Brehm) \nUnity \nWindfall \nXenogenesis \nTime Lapse \n\nGet the full song pack here: https://bsaber.com/thefatrat-music-pack/\n(Or you should just be able to find all the other ones on my beatsaver profile as well. Heres a link to my profile: https://beatsaver.com/uploader/5d47d586c5301900060b2f6c)\n\nSongcore mod is recommended (for custom colours)\nPlays best on Origins Environment\n\nWindfall Stats:\nExpert+ - 1031 Notes | 4.53 NPS\nExpert - 826 Notes | 3.63 NPS\nHard - 683 Notes | 3.00 NPS\nNormal - 421 Notes | 1.85 NPS\nEasy - 277 Notes | 1.22 NPS\n\nRoughly 9 Hours of work\nGameplay: https://youtu.be/RW5Y6GifdDA\n\nObviously - A huge thanks to TheFatRat himself, for not only producing the songs in the first place (and allowing free access to use them for big and small content creators), but also being a huge inspiration to lots of artists out there and for making music that everyone can jam out to! We love you, TheFatRat!',uploader:{id:4284197,name:"timeweaver",uniqueSet:!0,hash:"5d47d586c5301900060b2f6c",avatar:"https://cdn.beatsaver.com/avatar/607399708121366529.png",type:"DISCORD"},metadata:{bpm:102,duration:227,songName:"Windfall",songSubName:"",songAuthorName:"TheFatRat",levelAuthorName:"Timeweaver"},stats:{plays:0,downloads:4210,upvotes:1147,downvotes:32,score:.9166},uploaded:"2020-05-22T13:28:49.981Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"29677eb4f5cb04e2698b16923eee804abce90f76",key:"a90a",state:"Published",createdAt:"2020-05-22T13:28:49.981Z",sageScore:5,diffs:[{njs:10,offset:1,notes:277,bombs:0,obstacles:39,nps:1.28,length:368,characteristic:"Standard",difficulty:"Easy",events:4238,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:216.471,paritySummary:{errors:40,warns:28,resets:0}},{njs:10,offset:1,notes:421,bombs:0,obstacles:41,nps:1.945,length:368,characteristic:"Standard",difficulty:"Normal",events:4238,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:216.471,paritySummary:{errors:59,warns:27,resets:0}},{njs:12,offset:.25,notes:683,bombs:0,obstacles:66,nps:3.096,length:375,characteristic:"Standard",difficulty:"Hard",events:4238,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:220.588,paritySummary:{errors:3,warns:0,resets:0}},{njs:14,offset:-.25,notes:826,bombs:0,obstacles:67,nps:3.735,length:376,characteristic:"Standard",difficulty:"Expert",events:4240,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:221.176,paritySummary:{errors:2,warns:0,resets:0}},{njs:18,offset:.325,notes:1031,bombs:0,obstacles:65,nps:4.618,length:379.5,characteristic:"Standard",difficulty:"ExpertPlus",events:4238,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:223.235,paritySummary:{errors:0,warns:1,resets:0}}],downloadURL:"https://cdn.beatsaver.com/29677eb4f5cb04e2698b16923eee804abce90f76.zip",coverURL:"https://cdn.beatsaver.com/29677eb4f5cb04e2698b16923eee804abce90f76.jpg",previewURL:"https://cdn.beatsaver.com/29677eb4f5cb04e2698b16923eee804abce90f76.mp3"}],createdAt:"2020-05-22T13:28:49.981Z",updatedAt:"2020-05-22T13:28:49.981Z",lastPublishedAt:"2020-05-22T13:28:49.981Z"},{id:"5270",name:"Gurenge - LiSA",description:"Kimetsuno Yaiba OP\r\n\r\nPreview : https://youtu.be/6AznmNIg68Y\r\nNJS : 14(Expert), 13(Hard)",uploader:{id:31044,name:"digiracko",uniqueSet:!0,hash:"5cff0b7398cc5a672c84ed32",avatar:"https://www.gravatar.com/avatar/5cff0b7398cc5a672c84ed32?d=retro",type:"SIMPLE"},metadata:{bpm:135,duration:238,songName:"Gurenge",songSubName:"LiSA",songAuthorName:"DigiRacko",levelAuthorName:"digiracko"},stats:{plays:0,downloads:5415,upvotes:3174,downvotes:145,score:.9166},uploaded:"2019-06-09T00:26:20Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"9c71e86622967891482bf18c536ff3d03eb5af3f",key:"5270",state:"Published",createdAt:"2019-06-09T00:26:20Z",sageScore:4,diffs:[{njs:13,offset:1,notes:703,bombs:0,obstacles:0,nps:3.045,length:519.5,characteristic:"Standard",difficulty:"Hard",events:592,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:230.889,paritySummary:{errors:43,warns:33,resets:0}},{njs:14,offset:1,notes:974,bombs:0,obstacles:0,nps:4.218,length:519.5,characteristic:"Standard",difficulty:"Expert",events:593,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:230.889,paritySummary:{errors:79,warns:66,resets:0}}],downloadURL:"https://cdn.beatsaver.com/9c71e86622967891482bf18c536ff3d03eb5af3f.zip",coverURL:"https://cdn.beatsaver.com/9c71e86622967891482bf18c536ff3d03eb5af3f.jpg",previewURL:"https://cdn.beatsaver.com/9c71e86622967891482bf18c536ff3d03eb5af3f.mp3"}],createdAt:"2019-06-09T00:26:20Z",updatedAt:"2019-06-09T00:26:20Z",lastPublishedAt:"2019-06-09T00:26:20Z"},{id:"2394",name:"Are You Gonna Be My Girl? - Jet",description:"All 5 difficulties. Had a lot of fun with this one :)\r\nAll charts down to normal are uniquely built.\r\n\r\nExpert+ Playthrough: https://youtu.be/5FhrP79pfVc",uploader:{id:47581,name:"freeek",uniqueSet:!0,hash:"5cff0b7298cc5a672c84e8ad",avatar:"https://www.gravatar.com/avatar/5cff0b7298cc5a672c84e8ad?d=retro",type:"SIMPLE"},metadata:{bpm:105,duration:218,songName:"Are you gonna be my Girl",songSubName:"Jet",songAuthorName:"Freeek",levelAuthorName:"freeek"},stats:{plays:0,downloads:5652,upvotes:2217,downvotes:89,score:.9166},uploaded:"2018-12-03T18:23:49Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"399b2bd6630fe3dcc7631f89ae391e6684fd6a07",key:"2394",state:"Published",createdAt:"2018-12-03T18:23:49Z",sageScore:7,diffs:[{njs:10,offset:0,notes:286,bombs:0,obstacles:36,nps:1.472,length:340,characteristic:"Standard",difficulty:"Easy",events:1906,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:194.286,paritySummary:{errors:10,warns:1,resets:0}},{njs:10,offset:0,notes:369,bombs:0,obstacles:29,nps:1.899,length:340,characteristic:"Standard",difficulty:"Normal",events:1906,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:194.286,paritySummary:{errors:36,warns:31,resets:0}},{njs:10,offset:0,notes:510,bombs:0,obstacles:25,nps:2.625,length:340,characteristic:"Standard",difficulty:"Hard",events:1906,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:194.286,paritySummary:{errors:45,warns:49,resets:0}},{njs:12,offset:0,notes:757,bombs:0,obstacles:17,nps:3.896,length:340,characteristic:"Standard",difficulty:"Expert",events:1906,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:194.286,paritySummary:{errors:37,warns:43,resets:0}},{njs:15,offset:0,notes:927,bombs:0,obstacles:13,nps:4.771,length:340,characteristic:"Standard",difficulty:"ExpertPlus",events:1906,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:194.286,paritySummary:{errors:42,warns:65,resets:0}}],downloadURL:"https://cdn.beatsaver.com/399b2bd6630fe3dcc7631f89ae391e6684fd6a07.zip",coverURL:"https://cdn.beatsaver.com/399b2bd6630fe3dcc7631f89ae391e6684fd6a07.jpg",previewURL:"https://cdn.beatsaver.com/399b2bd6630fe3dcc7631f89ae391e6684fd6a07.mp3"}],createdAt:"2018-12-03T18:23:49Z",updatedAt:"2018-12-03T18:23:49Z",lastPublishedAt:"2018-12-03T18:23:49Z"},{id:"451b",name:"Orion - Getsix",description:"Get your hunting instinct ready; let’s hunt some bloqs to this dynamic and emotional trip of a track. Think you have what it takes to keep up?\r\n\r\nHUGE thanks to Getsix for taking the time to make a new specific edit and mix of the song for this map! The edits include shortened intro, shorter synth lead parts and louder tribal drums, all for a better Beat Saber experience.\r\n\r\nPreview video:\r\nhttps://youtu.be/s6st6WoBd7k\r\n\r\nBPM: 130\r\nDuration: 3:58\r\nEasy, Normal, Hard, Expert and Expert+ difficulties.\r\n\r\nEasy: 253, 1 obstacles, 2 mines\r\nNormal: 365 notes, 1 obstacles, 4 mines\r\nHard: 556 notes, 1 obstacles, 8 mines\r\nExpert: 979 notes, 1 obstacles, 8 mines\r\nExpert+: 1048 notes, 1 obstacles, 8 mines\r\n\r\nThanks to Redmagi, Malakite and Helencarnate for playtesting!\r\n\r\nEnjoy!",uploader:{id:4285318,name:"kolezan",uniqueSet:!0,hash:"5cff0b7398cc5a672c84fcbb",avatar:"https://cdn.beatsaver.com/avatar/220513618763055106.png",type:"DISCORD"},metadata:{bpm:130,duration:231,songName:"Orion (Beat Saber Edit)",songSubName:"Getsix",songAuthorName:"Kolezan",levelAuthorName:"Kolezan"},stats:{plays:0,downloads:3346,upvotes:1205,downvotes:35,score:.9165},uploaded:"2019-04-12T05:54:28Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"c86e3d35feeb08e4569dabe2389558ba40fa5bf7",key:"451b",state:"Published",createdAt:"2019-04-12T05:54:28Z",sageScore:7,diffs:[{njs:9,offset:0,notes:253,bombs:2,obstacles:1,nps:1.133,length:484,characteristic:"Standard",difficulty:"Easy",events:2353,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:223.385,paritySummary:{errors:80,warns:17,resets:0}},{njs:10,offset:1,notes:365,bombs:4,obstacles:1,nps:1.634,length:484,characteristic:"Standard",difficulty:"Normal",events:2353,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:223.385,paritySummary:{errors:74,warns:41,resets:0}},{njs:14,offset:0,notes:556,bombs:8,obstacles:1,nps:2.494,length:483,characteristic:"Standard",difficulty:"Hard",events:2353,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:222.923,paritySummary:{errors:75,warns:61,resets:4}},{njs:17,offset:0,notes:979,bombs:8,obstacles:1,nps:4.392,length:483,characteristic:"Standard",difficulty:"Expert",events:2353,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:222.923,paritySummary:{errors:76,warns:108,resets:2}},{njs:19,offset:0,notes:1048,bombs:8,obstacles:1,nps:4.701,length:483,characteristic:"Standard",difficulty:"ExpertPlus",events:2353,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:222.923,paritySummary:{errors:97,warns:112,resets:2}}],downloadURL:"https://cdn.beatsaver.com/c86e3d35feeb08e4569dabe2389558ba40fa5bf7.zip",coverURL:"https://cdn.beatsaver.com/c86e3d35feeb08e4569dabe2389558ba40fa5bf7.jpg",previewURL:"https://cdn.beatsaver.com/c86e3d35feeb08e4569dabe2389558ba40fa5bf7.mp3"}],createdAt:"2019-04-12T05:54:28Z",updatedAt:"2019-04-12T05:54:28Z",lastPublishedAt:"2019-04-12T05:54:28Z"},{id:"c209",name:"[Alphabeat - Pegboard Nerds Pack] Pegboard Nerds - Luigi's Mansion",description:"Part of the Pegboard Nerds Music Pack - Presented by the Alphabeat Mapping Group.\n\nAlphabeat is a mapping group that currently consists of 6 members, 4 of which have made this pack. This Pegboard Nerds pack is brought to you by Timeweaver, Rayman, KuritsaDVR & FireStrike!\n\nCheck out the other mappers' profiles here:\nTimeweaver - https://beatsaver.com/uploader/5d47d586c5301900060b2f6c\nFirestrike - https://beatsaver.com/uploader/5cff0b7698cc5a672c85479f\nKuritsaDVR - https://beatsaver.com/uploader/5cff0b7698cc5a672c8537ef\n\nThis map uses a custom platform made by Rayman (me!)! Download it here: https://modelsaber.com/Platforms/?id=1594988870\n\nAll songs included in this pack:\n- Gunslinga (Mapped by Rayman)\n- Coffins (Mapped by Rayman)\n- Superstar (Mapped by Timeweaver & Firestrike)\n- Razor Sharp (Mapped by Firestrike)\n- Luigi’s Mansion (Mapped by Rayman)\n- Try This (Mapped by Timeweaver & Firestrike)\n- Swamp Thing (Mapped by Rayman & KuritsaDVR)\n- Exterminate (Mapped by Timeweaver)\n- Disconnected (Mapped by Timeweaver & Firestrike)\n- Here it Comes (Mapped by KuritsaDVR & Timeweaver)\n\nGet the playlist here:\nhttps://bsaber.com/pegboard-nerds-pack/\n\nView the trailer here:\nhttps://youtu.be/b0fU5Rv_Zf0\n\nIncludes\n- 5 Standard Difficulties\n- 1 One Saber Difficulty\n- 1 360 Degree Difficulty\n- 1 90 Degree Difficulty",uploader:{id:4284994,name:"rayman9515",uniqueSet:!0,hash:"5dc6edac6dea0b0006c18486",avatar:"https://cdn.beatsaver.com/avatar/439017353892724736.png",type:"DISCORD"},metadata:{bpm:99,duration:229,songName:"Luigi's Mansion",songSubName:"",songAuthorName:"Pegboard Nerds",levelAuthorName:"Rayman9515"},stats:{plays:0,downloads:2446,upvotes:797,downvotes:16,score:.9164},uploaded:"2020-07-17T13:00:46.645Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"e7cdcc86e136da49cce9747233131e819cabe951",key:"c209",state:"Published",createdAt:"2020-07-17T13:00:46.645Z",sageScore:4,diffs:[{njs:11,offset:.2,notes:332,bombs:0,obstacles:45,nps:1.491,length:365.803,characteristic:"Standard",difficulty:"Easy",events:3635,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:221.699,paritySummary:{errors:10,warns:1,resets:0}},{njs:11,offset:.2,notes:471,bombs:0,obstacles:68,nps:2.115,length:365.803,characteristic:"Standard",difficulty:"Normal",events:3635,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:221.699,paritySummary:{errors:20,warns:2,resets:0}},{njs:13,offset:0,notes:682,bombs:4,obstacles:67,nps:3.063,length:365.803,characteristic:"Standard",difficulty:"Hard",events:3635,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:221.699,paritySummary:{errors:6,warns:0,resets:0}},{njs:16,offset:.5,notes:877,bombs:0,obstacles:71,nps:3.939,length:365.803,characteristic:"Standard",difficulty:"Expert",events:3635,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:221.699,paritySummary:{errors:0,warns:0,resets:0}},{njs:19,offset:.25,notes:1184,bombs:0,obstacles:111,nps:5.318,length:365.803,characteristic:"Standard",difficulty:"ExpertPlus",events:3637,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:221.699,paritySummary:{errors:0,warns:0,resets:0}},{njs:19,offset:.25,notes:825,bombs:35,obstacles:136,nps:3.705,length:365.803,characteristic:"OneSaber",difficulty:"ExpertPlus",events:3635,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:221.699,paritySummary:{errors:2,warns:24,resets:0}},{njs:11,offset:.2,notes:471,bombs:0,obstacles:63,nps:2.115,length:365.803,characteristic:"90Degree",difficulty:"Normal",events:3875,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:221.699,paritySummary:{errors:20,warns:2,resets:0}},{njs:11,offset:.2,notes:471,bombs:0,obstacles:63,nps:2.115,length:365.803,characteristic:"360Degree",difficulty:"Normal",events:3875,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:221.699,paritySummary:{errors:20,warns:2,resets:0}}],downloadURL:"https://cdn.beatsaver.com/e7cdcc86e136da49cce9747233131e819cabe951.zip",coverURL:"https://cdn.beatsaver.com/e7cdcc86e136da49cce9747233131e819cabe951.jpg",previewURL:"https://cdn.beatsaver.com/e7cdcc86e136da49cce9747233131e819cabe951.mp3"}],createdAt:"2020-07-17T13:00:46.645Z",updatedAt:"2020-07-17T13:00:46.645Z",lastPublishedAt:"2020-07-17T13:00:46.645Z"},{id:"d8",name:"Undertale - Megalovania (Cement City Remix) v.2",description:"I uploaded this song earlier today, but unfortunately not realizing an issue that I had made with the placement of 2 blocks that were near impossible to hit. Fixed and re-uploaded!\r\n\r\nDue to issues with EditSaber, I was unable to create any difficulties beyond Expert, as any changes made on one difficulty would carry over to the others.\r\n\r\nAlso this is my first beat map. Go easy. ;)",uploader:{id:48522,name:"kryptikos",uniqueSet:!0,hash:"5cff0b7298cc5a672c84eab4",avatar:"https://www.gravatar.com/avatar/5cff0b7298cc5a672c84eab4?d=retro",type:"SIMPLE"},metadata:{bpm:126,duration:164,songName:"Megalovania (Cement City Remix)",songSubName:"Undertale",songAuthorName:"Kryptikos",levelAuthorName:"kryptikos"},stats:{plays:0,downloads:4306,upvotes:3e3,downvotes:135,score:.9164},uploaded:"2018-05-17T21:38:37Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"2ee2deee264648432035f4abefa69b9dac86bd95",key:"d8",state:"Published",createdAt:"2018-05-17T21:38:37Z",sageScore:5,diffs:[{njs:10,offset:0,notes:566,bombs:32,obstacles:167,nps:3.631,length:327.313,characteristic:"Standard",difficulty:"Expert",events:1864,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:155.863,paritySummary:{errors:82,warns:57,resets:2}}],downloadURL:"https://cdn.beatsaver.com/2ee2deee264648432035f4abefa69b9dac86bd95.zip",coverURL:"https://cdn.beatsaver.com/2ee2deee264648432035f4abefa69b9dac86bd95.jpg",previewURL:"https://cdn.beatsaver.com/2ee2deee264648432035f4abefa69b9dac86bd95.mp3"}],createdAt:"2018-05-17T21:38:37Z",updatedAt:"2018-05-17T21:38:37Z",lastPublishedAt:"2018-05-17T21:38:37Z"},{id:"1a0be",name:"[Electro Swing Pack] Caravan Palace - Wonderland",description:"Nixie Presents: Electro Swing Pack!\n\n10 electro swing songs with expert and expert+ diffs to make your booty swing!\n\nGet The Pack: \nhttps://bsaber.com/electro-swing-pack/\n\nMap Gameplay:\nhttps://youtu.be/uFiLQLooDpQ\n\nComplete Pack Playthrough:\nhttps://youtu.be/yj9rw4MEh7s\n\nHeyya! After looking for some dancey electro swing maps, I noticed that there barely are any!\nSo I took matters into my own hands, learning mapping basically from scratch,\nscrapping my first failed attempts and then finally making a map that was good.\nI found it so fun that I ended up making 9 more maps,\nand fine tuned them with the help of the testplayers in BSMG,\nas well as the lovely curators from the bsaber discord.\n\nHuge thanks in particular to:\nMonstor, Bearly, Noxn, Bullet, Vaser888, Tocxx, Jafdy, Storm Knight and Pixelguy!\n\nIf you want to talk to me, here is my Discord:\nNixie.Korten#6944",uploader:{id:4286374,name:"nixiekorten",uniqueSet:!0,hash:"6096752e12772e0006e2f7e6",avatar:"https://cdn.beatsaver.com/avatar/840550221690699776.png",type:"DISCORD"},metadata:{bpm:104,duration:188,songName:"Wonderland",songSubName:"",songAuthorName:"Caravan Palace",levelAuthorName:"Nixie.Korten"},stats:{plays:0,downloads:14872,upvotes:794,downvotes:16,score:.9163},uploaded:"2021-07-08T15:26:38.489Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"9752f2de4dd434c589ced6d89358b1fda6902d3f",key:"1a0be",state:"Published",createdAt:"2021-07-08T15:26:38.489Z",sageScore:3,diffs:[{njs:16,offset:.25,notes:671,bombs:0,obstacles:0,nps:3.779,length:307.75,characteristic:"Standard",difficulty:"Expert",events:1588,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:177.548,paritySummary:{errors:0,warns:0,resets:0}},{njs:21,offset:0,notes:837,bombs:0,obstacles:10,nps:4.714,length:307.75,characteristic:"Standard",difficulty:"ExpertPlus",events:1588,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:177.548,paritySummary:{errors:0,warns:0,resets:0}}],downloadURL:"https://cdn.beatsaver.com/9752f2de4dd434c589ced6d89358b1fda6902d3f.zip",coverURL:"https://cdn.beatsaver.com/9752f2de4dd434c589ced6d89358b1fda6902d3f.jpg",previewURL:"https://cdn.beatsaver.com/9752f2de4dd434c589ced6d89358b1fda6902d3f.mp3"}],createdAt:"2021-07-08T15:26:38.489Z",updatedAt:"2021-07-08T15:26:38.489Z",lastPublishedAt:"2021-07-08T15:26:38.489Z"},{id:"d191",name:"Seven Lions - Silent Skies (ft. Karra) | [Chroma RGB]",description:"Was only a lightshow at first but felt like mapping it too. \nSo here is Hard, Expert and Expert+ with my best lightshow so far (imo).\nhope you like it.\n\ntalk shit on discord: nitronik.exe#7974\n\nlightshow preview: https://www.youtube.com/watch?v=vpi-VG_nZg8&t=19s",uploader:{id:4284201,name:"nitronikexe",uniqueSet:!0,hash:"5cff0b7798cc5a672c855d84",avatar:"https://cdn.beatsaver.com/avatar/428230049704181760.png",type:"DISCORD"},metadata:{bpm:140,duration:234,songName:"Silent Skies",songSubName:"(ft. Karra)",songAuthorName:"Seven Lions",levelAuthorName:"nitronik.exe"},stats:{plays:0,downloads:4892,upvotes:725,downvotes:13,score:.9163},uploaded:"2020-08-08T18:33:55.424Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"8434f521be275ae476b82c00201570ece88b395f",key:"d191",state:"Published",createdAt:"2020-08-08T18:33:55.424Z",sageScore:7,diffs:[{njs:12,offset:1,notes:491,bombs:6,obstacles:59,nps:2.238,length:512,characteristic:"Standard",difficulty:"Hard",events:8199,chroma:!0,me:!1,ne:!1,cinema:!1,seconds:219.429,paritySummary:{errors:0,warns:0,resets:2}},{njs:16,offset:0,notes:813,bombs:6,obstacles:33,nps:3.704,length:512.083,characteristic:"Standard",difficulty:"Expert",events:8199,chroma:!0,me:!1,ne:!1,cinema:!1,seconds:219.464,paritySummary:{errors:0,warns:0,resets:2}},{njs:20,offset:-.5,notes:1113,bombs:6,obstacles:32,nps:5.071,length:512.125,characteristic:"Standard",difficulty:"ExpertPlus",events:8199,chroma:!0,me:!1,ne:!1,cinema:!1,seconds:219.482,paritySummary:{errors:0,warns:0,resets:2}},{njs:16,offset:0,notes:0,bombs:0,obstacles:0,nps:0,length:0,characteristic:"Lightshow",difficulty:"Easy",events:8199,chroma:!0,me:!1,ne:!1,cinema:!1,seconds:0,paritySummary:{errors:0,warns:0,resets:0}}],downloadURL:"https://cdn.beatsaver.com/8434f521be275ae476b82c00201570ece88b395f.zip",coverURL:"https://cdn.beatsaver.com/8434f521be275ae476b82c00201570ece88b395f.jpg",previewURL:"https://cdn.beatsaver.com/8434f521be275ae476b82c00201570ece88b395f.mp3"}],createdAt:"2020-08-08T18:33:55.424Z",updatedAt:"2020-08-08T18:33:55.424Z",lastPublishedAt:"2020-08-08T18:33:55.424Z"},{id:"6b96",name:"COALAMODE. - Nanairo Symphony [Your Lie in April Opening 2]",description:"You think it reached her?\n\nBPM 155 | Length 2:01\nExpert\nHard\nNormal\n\nplease enjoy\n\nDM any feedback on Discord\nETAN#8341",uploader:{id:4235140,name:"etan",uniqueSet:!0,hash:"5cff0b7798cc5a672c855775",avatar:"https://cdn.beatsaver.com/avatar/136373107559497728.png",type:"DISCORD"},metadata:{bpm:155,duration:122,songName:"Nanairo Symphony",songSubName:"",songAuthorName:"COALAMODE.",levelAuthorName:"ETAN"},stats:{plays:0,downloads:2462,upvotes:602,downvotes:8,score:.9163},uploaded:"2019-10-22T23:22:04.194Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"cc3b824dcb605eb76fce944623758578094cd77d",key:"6b96",state:"Published",createdAt:"2019-10-22T23:22:04.194Z",sageScore:6,diffs:[{njs:11,offset:0,notes:207,bombs:0,obstacles:1,nps:1.857,length:288,characteristic:"Standard",difficulty:"Normal",events:3796,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:111.484,paritySummary:{errors:2,warns:2,resets:0}},{njs:12,offset:1,notes:282,bombs:0,obstacles:1,nps:2.53,length:288,characteristic:"Standard",difficulty:"Hard",events:3796,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:111.484,paritySummary:{errors:0,warns:1,resets:0}},{njs:16,offset:.5,notes:411,bombs:0,obstacles:1,nps:3.687,length:288,characteristic:"Standard",difficulty:"Expert",events:3796,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:111.484,paritySummary:{errors:4,warns:3,resets:0}}],downloadURL:"https://cdn.beatsaver.com/cc3b824dcb605eb76fce944623758578094cd77d.zip",coverURL:"https://cdn.beatsaver.com/cc3b824dcb605eb76fce944623758578094cd77d.jpg",previewURL:"https://cdn.beatsaver.com/cc3b824dcb605eb76fce944623758578094cd77d.mp3"}],createdAt:"2019-10-22T23:22:04.194Z",updatedAt:"2019-10-22T23:22:04.194Z",lastPublishedAt:"2019-10-22T23:22:04.194Z"},{id:"42de",name:"Kamikaze - WALK THE MOON",description:"An older map that I have no idea why I never published. So here it is!",uploader:{id:30311,name:"bennydabeast",uniqueSet:!0,hash:"5cff0b7298cc5a672c84e98d",avatar:"https://cdn.beatsaver.com/avatar/30311.jpg",type:"SIMPLE"},metadata:{bpm:155,duration:198,songName:"Kamikaze",songSubName:"WALK THE MOON",songAuthorName:"BennyDaBeast",levelAuthorName:"bennydabeast"},stats:{plays:0,downloads:3218,upvotes:950,downvotes:23,score:.9163},uploaded:"2019-04-01T22:12:10Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"63d2d5920e6676f63bf997ae606b6d1590cd8c8d",key:"42de",state:"Published",createdAt:"2019-04-01T22:12:10Z",sageScore:5,diffs:[{njs:10,offset:0,notes:231,bombs:0,obstacles:8,nps:1.203,length:496,characteristic:"Standard",difficulty:"Easy",events:266,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:192,paritySummary:{errors:71,warns:20,resets:0}},{njs:10,offset:0,notes:259,bombs:0,obstacles:8,nps:1.349,length:496,characteristic:"Standard",difficulty:"Normal",events:266,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:192,paritySummary:{errors:39,warns:23,resets:0}},{njs:10,offset:0,notes:442,bombs:0,obstacles:8,nps:2.302,length:496,characteristic:"Standard",difficulty:"Hard",events:266,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:192,paritySummary:{errors:84,warns:55,resets:0}},{njs:12,offset:0,notes:487,bombs:0,obstacles:8,nps:2.536,length:496,characteristic:"Standard",difficulty:"Expert",events:266,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:192,paritySummary:{errors:87,warns:68,resets:0}}],downloadURL:"https://cdn.beatsaver.com/63d2d5920e6676f63bf997ae606b6d1590cd8c8d.zip",coverURL:"https://cdn.beatsaver.com/63d2d5920e6676f63bf997ae606b6d1590cd8c8d.jpg",previewURL:"https://cdn.beatsaver.com/63d2d5920e6676f63bf997ae606b6d1590cd8c8d.mp3"}],createdAt:"2019-04-01T22:12:10Z",updatedAt:"2019-04-01T22:12:10Z",lastPublishedAt:"2019-04-01T22:12:10Z"},{id:"18a6",name:"DJ Fresh - Louder (Doctor P & Flux Pavilion Remix)",description:"Expert / Hard / Normal\r\nhttps://www.youtube.com/watch?v=rfR4cbnB7T8",uploader:{id:12996,name:"rustic",uniqueSet:!0,hash:"5cff0b7298cc5a672c84e8c4",avatar:"https://www.gravatar.com/avatar/5cff0b7298cc5a672c84e8c4?d=retro",type:"SIMPLE"},metadata:{bpm:140,duration:128,songName:"Louder (Doctor P & Flux Pavilion Remix)",songSubName:"DJ Fresh",songAuthorName:"Rustic",levelAuthorName:"rustic"},stats:{plays:0,downloads:2475,upvotes:1159,downvotes:33,score:.9163},uploaded:"2018-10-04T12:37:14Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"6b2cdc3638c97881753d83308c13eda1a490f0b2",key:"18a6",state:"Published",createdAt:"2018-10-04T12:37:14Z",sageScore:6,diffs:[{njs:10,offset:0,notes:249,bombs:0,obstacles:1,nps:2.06,length:282,characteristic:"Standard",difficulty:"Normal",events:2076,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:120.857,paritySummary:{errors:10,warns:27,resets:0}},{njs:12,offset:0,notes:305,bombs:0,obstacles:2,nps:2.524,length:282,characteristic:"Standard",difficulty:"Hard",events:2076,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:120.857,paritySummary:{errors:10,warns:39,resets:0}},{njs:14,offset:0,notes:380,bombs:0,obstacles:14,nps:3.144,length:282,characteristic:"Standard",difficulty:"Expert",events:2364,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:120.857,paritySummary:{errors:11,warns:43,resets:0}}],downloadURL:"https://cdn.beatsaver.com/6b2cdc3638c97881753d83308c13eda1a490f0b2.zip",coverURL:"https://cdn.beatsaver.com/6b2cdc3638c97881753d83308c13eda1a490f0b2.jpg",previewURL:"https://cdn.beatsaver.com/6b2cdc3638c97881753d83308c13eda1a490f0b2.mp3"}],createdAt:"2018-10-04T12:37:14Z",updatedAt:"2018-10-04T12:37:14Z",lastPublishedAt:"2018-10-04T12:37:14Z"},{id:"2529",name:"Back From The Dead - Skillet",description:"Song: Back From The Dead - Skillet\r\nMapper: KuritsaDBS\r\nAvailable difficulties: Expert\r\nPreview: Not available",uploader:{id:23150,name:"kuritsadbs",uniqueSet:!0,hash:"5cff0b7698cc5a672c8537ef",avatar:"https://www.gravatar.com/avatar/5cff0b7698cc5a672c8537ef?d=retro",type:"SIMPLE"},metadata:{bpm:162,duration:215,songName:"Back From The Dead",songSubName:"Skillet",songAuthorName:"KuritsaDBS",levelAuthorName:"KuritsaDBS"},stats:{plays:0,downloads:844,upvotes:601,downvotes:8,score:.9162},uploaded:"2018-12-11T14:24:33Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"baa01d357ac94cdca55972aa6c925709e4595850",key:"2529",state:"Published",createdAt:"2018-12-11T14:24:33Z",sageScore:4,diffs:[{njs:14,offset:0,notes:593,bombs:44,obstacles:107,nps:2.911,length:550,characteristic:"Standard",difficulty:"Expert",events:754,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:203.704,paritySummary:{errors:33,warns:51,resets:0}}],downloadURL:"https://cdn.beatsaver.com/baa01d357ac94cdca55972aa6c925709e4595850.zip",coverURL:"https://cdn.beatsaver.com/baa01d357ac94cdca55972aa6c925709e4595850.jpg",previewURL:"https://cdn.beatsaver.com/baa01d357ac94cdca55972aa6c925709e4595850.mp3"}],createdAt:"2018-12-11T14:24:33Z",updatedAt:"2018-12-11T14:24:33Z",lastPublishedAt:"2018-12-11T14:24:33Z"},{id:"1897",name:"Song of the Ancients / Fate - NieR Gestalt & Replicant Original Soundtrack",description:"\"It's like I just found something special. Something very special.\"\r\n\r\n128BPM / 4:52 Runtime\r\nHard / 758 Notes\r\nExpert / 994 Notes\r\nExpert+ / 1108 Notes\r\n\r\nGameplay:\r\nhttps://youtu.be/0r-UkakLCwU\r\nListen to the song:\r\nhttps://www.youtube.com/watch?v=ady--PNMsfI\r\n\r\nI thought the amazing game, NieR Gestalt/Replicant, needed an amazing beat map to go with it. This song was a perfect fit :)\r\n[UPDATE]\r\nSomebody pointed out there was a mapping error during the acoustic guitar section. It's fixed.",uploader:{id:4284981,name:"skylerwallace",uniqueSet:!0,hash:"5cff0b7298cc5a672c84ea67",avatar:"https://cdn.beatsaver.com/avatar/398344856868487168.png",type:"DISCORD"},metadata:{bpm:128,duration:292,songName:"Song of the Ancients / Fate",songSubName:"NieR OST",songAuthorName:"Skyler Wallace",levelAuthorName:"skylerwallace"},stats:{plays:0,downloads:1672,upvotes:860,downvotes:19,score:.9162},uploaded:"2018-10-04T00:33:41Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"4638d271b9974ec5bb851bb8629976078e781c97",key:"1897",state:"Published",createdAt:"2018-10-04T00:33:41Z",sageScore:6,diffs:[{njs:10,offset:0,notes:758,bombs:0,obstacles:16,nps:2.622,length:616,characteristic:"Standard",difficulty:"Hard",events:3742,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:288.75,paritySummary:{errors:81,warns:73,resets:0}},{njs:12,offset:0,notes:994,bombs:8,obstacles:32,nps:3.439,length:616,characteristic:"Standard",difficulty:"Expert",events:3742,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:288.75,paritySummary:{errors:55,warns:40,resets:0}},{njs:12,offset:0,notes:1108,bombs:8,obstacles:32,nps:3.833,length:616,characteristic:"Standard",difficulty:"ExpertPlus",events:3742,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:288.75,paritySummary:{errors:65,warns:47,resets:0}}],downloadURL:"https://cdn.beatsaver.com/4638d271b9974ec5bb851bb8629976078e781c97.zip",coverURL:"https://cdn.beatsaver.com/4638d271b9974ec5bb851bb8629976078e781c97.jpg",previewURL:"https://cdn.beatsaver.com/4638d271b9974ec5bb851bb8629976078e781c97.mp3"}],createdAt:"2018-10-04T00:33:41Z",updatedAt:"2018-10-04T00:33:41Z",lastPublishedAt:"2018-10-04T00:33:41Z"},{id:"9a36",name:"[Tokyo Machine Pack] Tokyo Machine - PLAY",description:"4/6\nPart of the Tokyo Machine Pack, a collab between Firestrike, Cyansnow and I.\nMap by me, lights by FireStrike.\n\nFireStrike's account: https://beatsaver.com/uploader/5cff0b7698cc5a672c85479f\nCyanSnow's account: https://beatsaver.com/uploader/5cff0b7698cc5a672c8543ac\n\nPlaylist: https://bsaber.com/tokyo-machine-pack/\n\nCheck out the trailer for the pack here: https://www.youtube.com/watch?v=lStPUnecsD8",uploader:{id:57657,name:"pixelguymm",uniqueSet:!0,hash:"5cff0b7698cc5a672c8541a8",avatar:"https://cdn.beatsaver.com/avatar/434386941547511818.png",type:"DISCORD"},metadata:{bpm:128,duration:185,songName:"PLAY",songSubName:"",songAuthorName:"Tokyo Machine",levelAuthorName:"FireStrike & Pixel"},stats:{plays:0,downloads:1813,upvotes:598,downvotes:8,score:.9161},uploaded:"2020-04-12T18:07:52.070Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"a9e447b8ea158c2b68f546935f704b270277f7f8",key:"9a36",state:"Published",createdAt:"2020-04-12T18:07:52.070Z",sageScore:5,diffs:[{njs:16,offset:-.3,notes:754,bombs:43,obstacles:0,nps:4.189,length:384,characteristic:"Standard",difficulty:"ExpertPlus",events:4444,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:180,paritySummary:{errors:0,warns:0,resets:0}}],downloadURL:"https://cdn.beatsaver.com/a9e447b8ea158c2b68f546935f704b270277f7f8.zip",coverURL:"https://cdn.beatsaver.com/a9e447b8ea158c2b68f546935f704b270277f7f8.jpg",previewURL:"https://cdn.beatsaver.com/a9e447b8ea158c2b68f546935f704b270277f7f8.mp3"}],createdAt:"2020-04-12T18:07:52.070Z",updatedAt:"2020-04-12T18:07:52.070Z",lastPublishedAt:"2020-04-12T18:07:52.070Z"},{id:"8108",name:"[Noodlegames] Ephixa - Wisdom (Zelda's Lullaby)",description:"The Ramen Noodle group is here to bring you a map pack full of our favorite video game soundtracks and game-inspired music! Ephixa's wonderful remix of Zelda's Lullaby is iconic, and a fantastic way to honor the beautiful rhythms in Ocarina of Time.",uploader:{id:4284569,name:"checkthepan",uniqueSet:!0,hash:"5cff0b7398cc5a672c84f3d5",avatar:"https://cdn.beatsaver.com/avatar/184355369189900290.png",type:"DISCORD"},metadata:{bpm:140,duration:241,songName:"Wisdom (Zelda's Lullaby Link to the Future) ",songSubName:"[feat. Will & Tim] [From Legend of Zelda: Ocarina of Time]",songAuthorName:"Ephixa",levelAuthorName:"Checkthepan"},stats:{plays:0,downloads:2384,upvotes:696,downvotes:12,score:.9161},uploaded:"2020-01-24T23:15:35.818Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"a603656eb8cdadcb6eda85ef408902c1f6125a8f",key:"8108",state:"Published",createdAt:"2020-01-24T23:15:35.818Z",sageScore:3,diffs:[{njs:11,offset:.25,notes:331,bombs:0,obstacles:28,nps:1.43,length:540.031,characteristic:"Standard",difficulty:"Normal",events:13016,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:231.442,paritySummary:{errors:77,warns:4,resets:0}},{njs:13,offset:.25,notes:560,bombs:16,obstacles:26,nps:2.42,length:540.031,characteristic:"Standard",difficulty:"Hard",events:13016,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:231.442,paritySummary:{errors:1,warns:1,resets:3}},{njs:16,offset:0,notes:769,bombs:24,obstacles:26,nps:3.323,length:540.031,characteristic:"Standard",difficulty:"Expert",events:13016,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:231.442,paritySummary:{errors:1,warns:0,resets:3}},{njs:19,offset:-.25,notes:930,bombs:65,obstacles:26,nps:4.018,length:540.031,characteristic:"Standard",difficulty:"ExpertPlus",events:13016,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:231.442,paritySummary:{errors:1,warns:0,resets:13}}],downloadURL:"https://cdn.beatsaver.com/a603656eb8cdadcb6eda85ef408902c1f6125a8f.zip",coverURL:"https://cdn.beatsaver.com/a603656eb8cdadcb6eda85ef408902c1f6125a8f.jpg",previewURL:"https://cdn.beatsaver.com/a603656eb8cdadcb6eda85ef408902c1f6125a8f.mp3"}],createdAt:"2020-01-24T23:15:35.818Z",updatedAt:"2020-01-24T23:15:35.818Z",lastPublishedAt:"2020-01-24T23:15:35.818Z"},{id:"4227",name:"Aladdin - A Whole New World",description:"This song makes me smile. Such a classic Disney song.\r\nAdded easy and normal difficulties. Hard is a bit slower now . Expert is the same speed as the previous upload.",uploader:{id:4285018,name:"majorpickle",uniqueSet:!0,hash:"5cff0b7398cc5a672c84f792",avatar:"https://cdn.beatsaver.com/avatar/450358937657671680.png",type:"DISCORD"},metadata:{bpm:123,duration:162,songName:"A Whole New World (From Disney's ''Aladdin'')",songSubName:"Lea Salonga & Brad Kane",songAuthorName:"Majorpickle",levelAuthorName:"majorpickle"},stats:{plays:0,downloads:5615,upvotes:1291,downvotes:40,score:.9161},uploaded:"2019-03-30T22:52:43Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"882f3fd9b97b4ce107c1e9e1f944c491b86c47fe",key:"4227",state:"Published",createdAt:"2019-03-30T22:52:43Z",sageScore:5,diffs:[{njs:10,offset:0,notes:236,bombs:0,obstacles:118,nps:1.591,length:304,characteristic:"Standard",difficulty:"Easy",events:540,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:148.293,paritySummary:{errors:0,warns:0,resets:0}},{njs:10,offset:0,notes:242,bombs:0,obstacles:117,nps:1.631,length:304,characteristic:"Standard",difficulty:"Normal",events:540,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:148.293,paritySummary:{errors:22,warns:0,resets:0}},{njs:10,offset:0,notes:420,bombs:0,obstacles:85,nps:2.83,length:304.125,characteristic:"Standard",difficulty:"Hard",events:539,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:148.354,paritySummary:{errors:12,warns:11,resets:0}},{njs:11,offset:0,notes:420,bombs:0,obstacles:85,nps:2.83,length:304.125,characteristic:"Standard",difficulty:"Expert",events:539,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:148.354,paritySummary:{errors:12,warns:11,resets:0}}],downloadURL:"https://cdn.beatsaver.com/882f3fd9b97b4ce107c1e9e1f944c491b86c47fe.zip",coverURL:"https://cdn.beatsaver.com/882f3fd9b97b4ce107c1e9e1f944c491b86c47fe.jpg",previewURL:"https://cdn.beatsaver.com/882f3fd9b97b4ce107c1e9e1f944c491b86c47fe.mp3"}],createdAt:"2019-03-30T22:52:43Z",updatedAt:"2019-03-30T22:52:43Z",lastPublishedAt:"2019-03-30T22:52:43Z"},{id:"2569",name:"Celtic Woman - Carol Of The Bells",description:"Hard/Expert | BPM: 190 | Length: 2:18 | Notes: 333/560\r\n\r\nMerry Christmas and Happy Holidays! \r\nHad fun charting this one, I hope you have fun playing it :D\r\n\r\n16th Map.\r\n\r\nPreview:\r\nhttps://www.youtube.com/watch?v=zh9-XC1D5aU",uploader:{id:4285825,name:"fefeland",uniqueSet:!0,hash:"5cff0b7398cc5a672c84f3bb",avatar:"https://cdn.beatsaver.com/avatar/119360573191225344.png",type:"DISCORD"},metadata:{bpm:190,duration:139,songName:"Carol Of The Bells",songSubName:"Celtic Woman",songAuthorName:"FEFELAND",levelAuthorName:"fefeland"},stats:{plays:0,downloads:1307,upvotes:598,downvotes:8,score:.9161},uploaded:"2018-12-13T02:40:05Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"1df1374196f03c9bba1aed018e3de2595f79dce1",key:"2569",state:"Published",createdAt:"2018-12-13T02:40:05Z",sageScore:5,diffs:[{njs:12,offset:0,notes:333,bombs:0,obstacles:101,nps:2.491,length:423.375,characteristic:"Standard",difficulty:"Hard",events:790,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:133.697,paritySummary:{errors:20,warns:18,resets:0}},{njs:15,offset:0,notes:560,bombs:0,obstacles:105,nps:4.189,length:423.375,characteristic:"Standard",difficulty:"Expert",events:790,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:133.697,paritySummary:{errors:15,warns:9,resets:0}}],downloadURL:"https://cdn.beatsaver.com/1df1374196f03c9bba1aed018e3de2595f79dce1.zip",coverURL:"https://cdn.beatsaver.com/1df1374196f03c9bba1aed018e3de2595f79dce1.jpg",previewURL:"https://cdn.beatsaver.com/1df1374196f03c9bba1aed018e3de2595f79dce1.mp3"}],createdAt:"2018-12-13T02:40:05Z",updatedAt:"2018-12-13T02:40:05Z",lastPublishedAt:"2018-12-13T02:40:05Z"},{id:"16894",name:"Joe Hisaishi - Merry-Go-Round (from 'Howl's Moving Castle')",description:"The popular theme from Studio Ghibli's 'Howl's Moving Castle'. Version from Joe Hisaishi's 'Dream Songs' album.\n\nThanks to Cyrix and vaser888 for early testplays, Timbo and Uninstaller for the excellent mods, and Qwasyx for further suggestions for improvement.\n\nZelazowa#3625",uploader:{id:4284834,name:"zelazowa",uniqueSet:!0,hash:"5ea5367d16c968000632663c",avatar:"https://cdn.beatsaver.com/avatar/94962140443578368.png",type:"DISCORD"},metadata:{bpm:160,duration:312,songName:"Merry-Go-Round",songSubName:"(from 'Howl's Moving Castle')",songAuthorName:"Joe Hisaishi",levelAuthorName:"Zelazowa"},stats:{plays:0,downloads:5833,upvotes:813,downvotes:17,score:.9161},uploaded:"2021-04-11T02:32:37.687Z",automapper:!1,ranked:!0,qualified:!1,versions:[{hash:"d30db93f2c3c5a152b84ca364a691ef10c4efdb9",key:"16894",state:"Published",createdAt:"2021-04-11T02:32:37.687Z",sageScore:5,diffs:[{njs:10,offset:0,notes:441,bombs:0,obstacles:94,nps:1.459,length:806.257,characteristic:"Standard",difficulty:"Easy",events:1833,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:302.346,paritySummary:{errors:169,warns:8,resets:0},stars:.91},{njs:12,offset:-.75,notes:594,bombs:0,obstacles:83,nps:1.964,length:806.324,characteristic:"Standard",difficulty:"Normal",events:1833,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:302.372,paritySummary:{errors:9,warns:4,resets:0},stars:1.22},{njs:14,offset:.75,notes:847,bombs:0,obstacles:34,nps:2.801,length:806.324,characteristic:"Standard",difficulty:"Hard",events:1834,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:302.372,paritySummary:{errors:0,warns:0,resets:0},stars:1.71},{njs:16,offset:.25,notes:1075,bombs:0,obstacles:30,nps:3.555,length:806.392,characteristic:"Standard",difficulty:"Expert",events:1834,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:302.397,paritySummary:{errors:0,warns:0,resets:0},stars:2.47},{njs:18,offset:-.1,notes:1236,bombs:0,obstacles:18,nps:4.088,length:806.257,characteristic:"Standard",difficulty:"ExpertPlus",events:1833,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:302.346,paritySummary:{errors:0,warns:0,resets:0},stars:5}],downloadURL:"https://cdn.beatsaver.com/d30db93f2c3c5a152b84ca364a691ef10c4efdb9.zip",coverURL:"https://cdn.beatsaver.com/d30db93f2c3c5a152b84ca364a691ef10c4efdb9.jpg",previewURL:"https://cdn.beatsaver.com/d30db93f2c3c5a152b84ca364a691ef10c4efdb9.mp3"}],createdAt:"2021-04-11T02:32:37.687Z",updatedAt:"2021-04-11T02:32:37.687Z",lastPublishedAt:"2021-04-11T02:32:37.687Z"},{id:"c213",name:"Pegboard Nerds - Rhythm Is A Dancer (ft. Tia Simone)",description:"The Pegboard Nerds Pack was planned months before I joined AlphaBeat, so obviously I wasn't planned in for it. \n\nI still felt like mapping a Pegboard Nerds song and the new track from the Monstercat Anniversary seemed like a good fit. You could see this as some kind of bonus map for the Pack, but it wont be included in the Playlist, because having 11 songs instead of 10 feels weird. \n\nIt's not as fleshed out as the maps in the Pack because I only joined a few days ago and wanted to release this around the same time the Pack comes out.\n\nI hope you enjoy it nevertheless!\n\nPreview: https://youtu.be/HEr8pkcDM7M\n\nFeedback on Discord: nitronik.exe#7974",uploader:{id:4284201,name:"nitronikexe",uniqueSet:!0,hash:"5cff0b7798cc5a672c855d84",avatar:"https://cdn.beatsaver.com/avatar/428230049704181760.png",type:"DISCORD"},metadata:{bpm:128,duration:225,songName:"Rhythm Is A Dancer",songSubName:"(ft. Tia Simone)",songAuthorName:"Pegboard Nerds",levelAuthorName:"nitronik.exe"},stats:{plays:0,downloads:2515,upvotes:942,downvotes:23,score:.916},uploaded:"2020-07-17T14:05:23.854Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"3255f65dd6a7d4dd3c9c1cb800e854d58f5d2e88",key:"c213",state:"Published",createdAt:"2020-07-17T14:05:23.854Z",sageScore:6,diffs:[{njs:10,offset:1,notes:185,bombs:0,obstacles:0,nps:.851,length:464,characteristic:"Standard",difficulty:"Easy",events:3954,chroma:!0,me:!1,ne:!1,cinema:!1,seconds:217.5,paritySummary:{errors:69,warns:10,resets:0}},{njs:12,offset:.5,notes:328,bombs:0,obstacles:0,nps:1.508,length:464,characteristic:"Standard",difficulty:"Normal",events:3954,chroma:!0,me:!1,ne:!1,cinema:!1,seconds:217.5,paritySummary:{errors:6,warns:0,resets:0}},{njs:14,offset:0,notes:561,bombs:0,obstacles:0,nps:2.561,length:467.25,characteristic:"Standard",difficulty:"Hard",events:3954,chroma:!0,me:!1,ne:!1,cinema:!1,seconds:219.023,paritySummary:{errors:4,warns:0,resets:0}},{njs:16,offset:0,notes:812,bombs:0,obstacles:0,nps:3.707,length:467.25,characteristic:"Standard",difficulty:"Expert",events:3954,chroma:!0,me:!1,ne:!1,cinema:!1,seconds:219.023,paritySummary:{errors:0,warns:0,resets:0}},{njs:19,offset:-.5,notes:1150,bombs:0,obstacles:2,nps:5.251,length:467.25,characteristic:"Standard",difficulty:"ExpertPlus",events:3954,chroma:!0,me:!1,ne:!1,cinema:!1,seconds:219.023,paritySummary:{errors:0,warns:0,resets:0}}],downloadURL:"https://cdn.beatsaver.com/3255f65dd6a7d4dd3c9c1cb800e854d58f5d2e88.zip",coverURL:"https://cdn.beatsaver.com/3255f65dd6a7d4dd3c9c1cb800e854d58f5d2e88.jpg",previewURL:"https://cdn.beatsaver.com/3255f65dd6a7d4dd3c9c1cb800e854d58f5d2e88.mp3"}],createdAt:"2020-07-17T14:05:23.854Z",updatedAt:"2020-07-17T14:05:23.854Z",lastPublishedAt:"2020-07-17T14:05:23.854Z"},{id:"6e1f",name:"Good Times Roll - GRiZ x Big Gigantic",description:"Huge thanks to Awfulnaut for letting me use his existing Good Times Roll map to create this updated version. <3",uploader:{id:4285169,name:"ryger",uniqueSet:!0,hash:"5cff0b7798cc5a672c855a42",avatar:"https://cdn.beatsaver.com/avatar/169266024502263808.png",type:"DISCORD"},metadata:{bpm:200,duration:146,songName:"Good Times Roll",songSubName:"",songAuthorName:"Griz x Big Gigantic",levelAuthorName:"Awfulnaut, Ryger"},stats:{plays:0,downloads:639,upvotes:434,downvotes:2,score:.916},uploaded:"2019-11-04T02:30:11.352Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"6cb7b184a496b917739bc59a9012029ebb9e340c",key:"6e1f",state:"Published",createdAt:"2019-11-04T02:30:11.352Z",sageScore:4,diffs:[{njs:10,offset:0,notes:354,bombs:0,obstacles:11,nps:2.551,length:462.5,characteristic:"Standard",difficulty:"Hard",events:1208,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:138.75,paritySummary:{errors:13,warns:6,resets:0}},{njs:14,offset:0,notes:518,bombs:0,obstacles:12,nps:3.733,length:462.5,characteristic:"Standard",difficulty:"Expert",events:1208,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:138.75,paritySummary:{errors:10,warns:21,resets:0}},{njs:15,offset:.5,notes:652,bombs:0,obstacles:10,nps:4.679,length:464.5,characteristic:"Standard",difficulty:"ExpertPlus",events:1208,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:139.35,paritySummary:{errors:33,warns:19,resets:0}}],downloadURL:"https://cdn.beatsaver.com/6cb7b184a496b917739bc59a9012029ebb9e340c.zip",coverURL:"https://cdn.beatsaver.com/6cb7b184a496b917739bc59a9012029ebb9e340c.jpg",previewURL:"https://cdn.beatsaver.com/6cb7b184a496b917739bc59a9012029ebb9e340c.mp3"}],createdAt:"2019-11-04T02:30:11.352Z",updatedAt:"2019-11-04T02:30:11.352Z",lastPublishedAt:"2019-11-04T02:30:11.352Z"},{id:"5b95",name:"The Living Tombstone - I Can't Fix You",description:"This is probably on the easier end of Expert+ so it should be enjoyable for those looking to step up from Expert after a little practice. This song has officially been tested to oblivion, but I am happy to hear any feedback.\n\nDifficulty: Expert+\nBPM: 174\nNotes: 1212\nNJS: 15\nNPS: 4.65\nSong Duration: 4:21\n\nPreview video can be found here: https://youtu.be/EkcKRlikwMY\n\nSpecial Thanks to Kival Evan for their playtesting and feedback!",uploader:{id:34679,name:"lukemortora",uniqueSet:!0,hash:"5cff0b7798cc5a672c855c16",avatar:"https://www.gravatar.com/avatar/5cff0b7798cc5a672c855c16?d=retro",type:"SIMPLE"},metadata:{bpm:174,duration:261,songName:"I Can't Fix You",songSubName:"",songAuthorName:"The Living Tombstone",levelAuthorName:"LukeMortora"},stats:{plays:0,downloads:1353,upvotes:1043,downvotes:28,score:.9159},uploaded:"2019-08-09T15:10:13.751Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"d074bc64340208a777eea440ba5e5a24f9d65d54",key:"5b95",state:"Published",createdAt:"2019-08-09T15:10:13.751Z",sageScore:6,diffs:[{njs:15,offset:0,notes:1212,bombs:117,obstacles:26,nps:4.971,length:707,characteristic:"Standard",difficulty:"ExpertPlus",events:2214,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:243.793,paritySummary:{errors:114,warns:78,resets:11}}],downloadURL:"https://cdn.beatsaver.com/d074bc64340208a777eea440ba5e5a24f9d65d54.zip",coverURL:"https://cdn.beatsaver.com/d074bc64340208a777eea440ba5e5a24f9d65d54.jpg",previewURL:"https://cdn.beatsaver.com/d074bc64340208a777eea440ba5e5a24f9d65d54.mp3"}],createdAt:"2019-08-09T15:10:13.751Z",updatedAt:"2019-08-09T15:10:13.751Z",lastPublishedAt:"2019-08-09T15:10:13.751Z"},{id:"3c1d",name:"Sound of an Orchestra - MIKA",description:"Expert Playthrough : https://youtu.be/Ql0bAjfNQ5M",uploader:{id:13320,name:"novashaft",uniqueSet:!0,hash:"5cff0b7398cc5a672c84ee55",avatar:"https://www.gravatar.com/avatar/5cff0b7398cc5a672c84ee55?d=retro",type:"SIMPLE"},metadata:{bpm:127,duration:180,songName:"Sound Of An Orchestra",songSubName:"MIKA",songAuthorName:"NovaShaft",levelAuthorName:"novashaft"},stats:{plays:0,downloads:2681,upvotes:693,downvotes:12,score:.9159},uploaded:"2019-03-06T16:56:54Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"ab5ec7d8c0976c8acb1ed48889fce51666fabf45",key:"3c1d",state:"Published",createdAt:"2019-03-06T16:56:54Z",sageScore:5,diffs:[{njs:11,offset:0,notes:325,bombs:0,obstacles:24,nps:1.869,length:368,characteristic:"Standard",difficulty:"Normal",events:869,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:173.858,paritySummary:{errors:18,warns:7,resets:0}},{njs:13,offset:0,notes:386,bombs:0,obstacles:24,nps:2.22,length:368,characteristic:"Standard",difficulty:"Hard",events:869,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:173.858,paritySummary:{errors:36,warns:32,resets:0}},{njs:15,offset:0,notes:482,bombs:0,obstacles:24,nps:2.772,length:368,characteristic:"Standard",difficulty:"Expert",events:869,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:173.858,paritySummary:{errors:40,warns:45,resets:0}}],downloadURL:"https://cdn.beatsaver.com/ab5ec7d8c0976c8acb1ed48889fce51666fabf45.zip",coverURL:"https://cdn.beatsaver.com/ab5ec7d8c0976c8acb1ed48889fce51666fabf45.jpg",previewURL:"https://cdn.beatsaver.com/ab5ec7d8c0976c8acb1ed48889fce51666fabf45.mp3"}],createdAt:"2019-03-06T16:56:54Z",updatedAt:"2019-03-06T16:56:54Z",lastPublishedAt:"2019-03-06T16:56:54Z"},{id:"ae9d",name:"A Cruel Angel's Thesis [22/7 Soundtrack] - Sakura Fujima",description:"A Cruel Angel's Thesis (Zankoku na Tenshi no Thesis) as covered by Sakura Fujima (CV: Sally Amaki.) from 22/7. It was originally sung by Takahashi Yoko as the opening of the anime Neon Genesis Evangelion. ",uploader:{id:58338,name:"Joetastic",uniqueSet:!0,hash:"5cff0b7498cc5a672c85050e",avatar:"https://cdn.beatsaver.com/avatar/227767566402191360.png",type:"DISCORD"},metadata:{bpm:128,duration:92,songName:"A Cruel Angel's Thesis",songSubName:"",songAuthorName:"Sakura Fujima",levelAuthorName:"Joetastic"},stats:{plays:0,downloads:4289,upvotes:1204,downvotes:36,score:.9158},uploaded:"2020-06-05T07:07:17.017Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"40e47564d01e50840b0aa9a3191ff09a2e5b56a1",key:"ae9d",state:"Published",createdAt:"2020-06-05T07:07:17.017Z",sageScore:4,diffs:[{njs:12,offset:0,notes:222,bombs:0,obstacles:32,nps:2.536,length:186.75,characteristic:"Standard",difficulty:"Hard",events:2286,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:87.539,paritySummary:{errors:2,warns:2,resets:0}},{njs:14,offset:0,notes:347,bombs:0,obstacles:32,nps:3.932,length:188.25,characteristic:"Standard",difficulty:"Expert",events:2286,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:88.242,paritySummary:{errors:0,warns:2,resets:0}},{njs:16,offset:-.2,notes:413,bombs:0,obstacles:22,nps:4.68,length:188.25,characteristic:"Standard",difficulty:"ExpertPlus",events:2280,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:88.242,paritySummary:{errors:0,warns:3,resets:0}}],downloadURL:"https://cdn.beatsaver.com/40e47564d01e50840b0aa9a3191ff09a2e5b56a1.zip",coverURL:"https://cdn.beatsaver.com/40e47564d01e50840b0aa9a3191ff09a2e5b56a1.jpg",previewURL:"https://cdn.beatsaver.com/40e47564d01e50840b0aa9a3191ff09a2e5b56a1.mp3"}],createdAt:"2020-06-05T07:07:17.017Z",updatedAt:"2020-06-05T07:07:17.017Z",lastPublishedAt:"2020-06-05T07:07:17.017Z"},{id:"65b7",name:"My First Kiss - Nightcore",description:"Youtube Preview: https://youtu.be/KxdCEgDG-AI",uploader:{id:23751,name:"monteblanco",uniqueSet:!0,hash:"5cff0b7798cc5a672c855ef5",avatar:"https://www.gravatar.com/avatar/5cff0b7798cc5a672c855ef5?d=retro",type:"SIMPLE"},metadata:{bpm:174.803,duration:156,songName:"My First Kiss - Nightcore",songSubName:"",songAuthorName:"Nightcore",levelAuthorName:"Monteblanco"},stats:{plays:0,downloads:709,upvotes:713,downvotes:13,score:.9158},uploaded:"2019-09-25T01:39:37.237Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"5723e29f0a39dcec76926c1fa8baf6e9a32c185b",key:"65b7",state:"Published",createdAt:"2019-09-25T01:39:37.237Z",sageScore:4,diffs:[{njs:15,offset:0,notes:623,bombs:4,obstacles:48,nps:4.134,length:439,characteristic:"Standard",difficulty:"Expert",events:743,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:150.684,paritySummary:{errors:0,warns:0,resets:1}}],downloadURL:"https://cdn.beatsaver.com/5723e29f0a39dcec76926c1fa8baf6e9a32c185b.zip",coverURL:"https://cdn.beatsaver.com/5723e29f0a39dcec76926c1fa8baf6e9a32c185b.jpg",previewURL:"https://cdn.beatsaver.com/5723e29f0a39dcec76926c1fa8baf6e9a32c185b.mp3"}],createdAt:"2019-09-25T01:39:37.237Z",updatedAt:"2019-09-25T01:39:37.237Z",lastPublishedAt:"2019-09-25T01:39:37.237Z"},{id:"4a4c",name:"[Anniversary] The Thrill - Nero, Porter Robinson [Ruckus]",description:"Part of the Anniversary Song Pack",uploader:{id:37070,name:"anniversaryteam",uniqueSet:!0,hash:"5cff0b7798cc5a672c8565a3",avatar:"https://www.gravatar.com/avatar/5cff0b7798cc5a672c8565a3?d=retro",type:"SIMPLE"},metadata:{bpm:160,duration:204,songName:"The Thrill (Porter Robinson Remix)",songSubName:"NERO, Porter Robinson",songAuthorName:"Ruckus",levelAuthorName:"AnniversaryTeam"},stats:{plays:0,downloads:2144,upvotes:1321,downvotes:42,score:.9158},uploaded:"2019-05-03T14:13:21Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"68496811309fe62303edde686eb160f8e45aa9ce",key:"4a4c",state:"Published",createdAt:"2019-05-03T14:13:21Z",sageScore:7,diffs:[{njs:10,offset:0,notes:232,bombs:0,obstacles:70,nps:1.197,length:516.688,characteristic:"Standard",difficulty:"Easy",events:9122,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:193.758,paritySummary:{errors:17,warns:7,resets:0}},{njs:12,offset:0,notes:489,bombs:0,obstacles:60,nps:2.524,length:516.692,characteristic:"Standard",difficulty:"Normal",events:9127,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:193.76,paritySummary:{errors:29,warns:20,resets:0}},{njs:13,offset:0,notes:635,bombs:0,obstacles:64,nps:3.274,length:517.188,characteristic:"Standard",difficulty:"Hard",events:9117,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:193.945,paritySummary:{errors:34,warns:35,resets:0}},{njs:18,offset:0,notes:1128,bombs:0,obstacles:36,nps:5.816,length:517.188,characteristic:"Standard",difficulty:"Expert",events:9117,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:193.945,paritySummary:{errors:36,warns:35,resets:0}},{njs:20,offset:0,notes:1115,bombs:0,obstacles:46,nps:5.749,length:517.188,characteristic:"Standard",difficulty:"ExpertPlus",events:9117,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:193.945,paritySummary:{errors:49,warns:73,resets:0}}],downloadURL:"https://cdn.beatsaver.com/68496811309fe62303edde686eb160f8e45aa9ce.zip",coverURL:"https://cdn.beatsaver.com/68496811309fe62303edde686eb160f8e45aa9ce.jpg",previewURL:"https://cdn.beatsaver.com/68496811309fe62303edde686eb160f8e45aa9ce.mp3"}],createdAt:"2019-05-03T14:13:21Z",updatedAt:"2019-05-03T14:13:21Z",lastPublishedAt:"2019-05-03T14:13:21Z"},{id:"a692",name:"[Noodle Touhou] Tare - VOLUPTE",description:"Easy, normal, hard, expert, expert+\r\n\r\nThis map is part of the first Touhou map pack brought to you by the Ramen Noodle mapper group! It contains all sorts of covers, arrangements and remix of the original Touhou soundtrack. We hope you enjoy it a lot!",uploader:{id:4235138,name:"CyanSnow",uniqueSet:!0,hash:"5cff0b7698cc5a672c8543ac",avatar:"https://cdn.beatsaver.com/avatar/154341137694326784.png",type:"DISCORD"},metadata:{bpm:128,duration:184,songName:"VOLUPTE",songSubName:"",songAuthorName:"Tare",levelAuthorName:"Aeroluna & CyanSnow"},stats:{plays:0,downloads:2792,upvotes:638,downvotes:10,score:.9156},uploaded:"2020-05-15T18:20:58.233Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"01ce5a3adc19e360ba0ffd8347f91b5dc974eb7c",key:"a692",state:"Published",createdAt:"2020-05-15T18:20:58.233Z",sageScore:6,diffs:[{njs:12,offset:.5,notes:254,bombs:0,obstacles:0,nps:1.411,length:384,characteristic:"Standard",difficulty:"Easy",events:13825,chroma:!0,me:!1,ne:!1,cinema:!1,seconds:180,paritySummary:{errors:6,warns:0,resets:0}},{njs:12,offset:.5,notes:404,bombs:0,obstacles:0,nps:2.244,length:384,characteristic:"Standard",difficulty:"Normal",events:13825,chroma:!0,me:!1,ne:!1,cinema:!1,seconds:180,paritySummary:{errors:1,warns:0,resets:0}},{njs:13,offset:.25,notes:541,bombs:0,obstacles:0,nps:3.006,length:384,characteristic:"Standard",difficulty:"Hard",events:13825,chroma:!0,me:!1,ne:!1,cinema:!1,seconds:180,paritySummary:{errors:0,warns:0,resets:0}},{njs:16,offset:-.25,notes:763,bombs:0,obstacles:0,nps:4.236,length:384.25,characteristic:"Standard",difficulty:"Expert",events:13825,chroma:!0,me:!1,ne:!1,cinema:!1,seconds:180.117,paritySummary:{errors:0,warns:0,resets:0}},{njs:18,offset:-.5,notes:1009,bombs:0,obstacles:0,nps:5.602,length:384.25,characteristic:"Standard",difficulty:"ExpertPlus",events:13825,chroma:!0,me:!1,ne:!1,cinema:!1,seconds:180.117,paritySummary:{errors:0,warns:0,resets:0}}],downloadURL:"https://cdn.beatsaver.com/01ce5a3adc19e360ba0ffd8347f91b5dc974eb7c.zip",coverURL:"https://cdn.beatsaver.com/01ce5a3adc19e360ba0ffd8347f91b5dc974eb7c.jpg",previewURL:"https://cdn.beatsaver.com/01ce5a3adc19e360ba0ffd8347f91b5dc974eb7c.mp3"}],createdAt:"2020-05-15T18:20:58.233Z",updatedAt:"2020-05-15T18:20:58.233Z",lastPublishedAt:"2020-05-15T18:20:58.233Z"},{id:"9fab",name:"Doom Crossing: Eternal Horizons",description:"3 Difficulties Included! \n\nAnother side release of mine! This song's chorus is so catchy, it got stuck in my head for days! Also I've been playing a ton of Animal Crossing ^^ \n\nDoom Crossing: Eternal Horizons by The Chalkeaters ft. Natalia Natchan\n\nBPM: 160\n\nLights by Loloppe's autolighter, Lolighter! With some manual touch ups!",uploader:{id:4289037,name:"mystikmol",uniqueSet:!0,hash:"5cff0b7298cc5a672c84eb52",avatar:"https://cdn.beatsaver.com/avatar/67941140636114944.png",type:"DISCORD"},metadata:{bpm:160,duration:83,songName:"Doom Crossing: Eternal Horizons",songSubName:"Short ver.",songAuthorName:"The Chalkeaters ft. Natalia Natchan",levelAuthorName:"Mystikmol"},stats:{plays:0,downloads:3574,upvotes:1563,downvotes:55,score:.9156},uploaded:"2020-04-27T15:22:22.520Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"f8b391a5fd0922062f7e3c10ccc1967f91da20a2",key:"9fab",state:"Published",createdAt:"2020-04-27T15:22:22.520Z",sageScore:3,diffs:[{njs:12,offset:0,notes:153,bombs:0,obstacles:0,nps:2.082,length:196,characteristic:"Standard",difficulty:"Normal",events:1926,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:73.5,paritySummary:{errors:0,warns:0,resets:0}},{njs:15,offset:0,notes:261,bombs:0,obstacles:1,nps:3.551,length:196,characteristic:"Standard",difficulty:"Hard",events:1926,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:73.5,paritySummary:{errors:0,warns:0,resets:0}},{njs:20,offset:0,notes:491,bombs:0,obstacles:0,nps:6.68,length:196,characteristic:"Standard",difficulty:"ExpertPlus",events:1927,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:73.5,paritySummary:{errors:0,warns:0,resets:0}}],downloadURL:"https://cdn.beatsaver.com/f8b391a5fd0922062f7e3c10ccc1967f91da20a2.zip",coverURL:"https://cdn.beatsaver.com/f8b391a5fd0922062f7e3c10ccc1967f91da20a2.jpg",previewURL:"https://cdn.beatsaver.com/f8b391a5fd0922062f7e3c10ccc1967f91da20a2.mp3"}],createdAt:"2020-04-27T15:22:22.520Z",updatedAt:"2020-04-27T15:22:22.520Z",lastPublishedAt:"2020-04-27T15:22:22.520Z"},{id:"12377",name:"Sangatsu no Phantasia - Pastel Rain",description:"use CHROMA mod for\n- cool lights\n- if you dont have chroma it'll just be greyed out PepeLaugh\n\nHappy New Years\n\nBPM | 135\nExpert+\nExpert\nHard\n\nThanks JohnnyDee for the playtest, what a qt\n\npreview: https://www.youtube.com/watch?v=hGq0EEsqgQQ\n\nthank you for playing\n\nDM any feedback on Discord\nETAN#8341",uploader:{id:4235140,name:"etan",uniqueSet:!0,hash:"5cff0b7798cc5a672c855775",avatar:"https://cdn.beatsaver.com/avatar/136373107559497728.png",type:"DISCORD"},metadata:{bpm:135,duration:212,songName:"Pastel Rain",songSubName:"",songAuthorName:"Sangatsu no Phantasia",levelAuthorName:"ETAN"},stats:{plays:0,downloads:4912,upvotes:776,downvotes:16,score:.9155},uploaded:"2021-01-03T08:08:53.577Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"2c01774fdb9c4bcc53df1707ade85cea6f043477",key:"12377",state:"Published",createdAt:"2021-01-03T08:08:53.577Z",sageScore:5,diffs:[{njs:12,offset:.5,notes:576,bombs:0,obstacles:58,nps:2.775,length:467,characteristic:"Standard",difficulty:"Hard",events:16659,chroma:!0,me:!1,ne:!1,cinema:!1,seconds:207.556,paritySummary:{errors:0,warns:0,resets:0}},{njs:15,offset:0,notes:882,bombs:0,obstacles:58,nps:4.249,length:467,characteristic:"Standard",difficulty:"Expert",events:16659,chroma:!0,me:!1,ne:!1,cinema:!1,seconds:207.556,paritySummary:{errors:0,warns:1,resets:0}},{njs:19,offset:-.5,notes:1180,bombs:0,obstacles:57,nps:5.685,length:467,characteristic:"Standard",difficulty:"ExpertPlus",events:16659,chroma:!0,me:!1,ne:!1,cinema:!1,seconds:207.556,paritySummary:{errors:0,warns:0,resets:0}}],downloadURL:"https://cdn.beatsaver.com/2c01774fdb9c4bcc53df1707ade85cea6f043477.zip",coverURL:"https://cdn.beatsaver.com/2c01774fdb9c4bcc53df1707ade85cea6f043477.jpg",previewURL:"https://cdn.beatsaver.com/2c01774fdb9c4bcc53df1707ade85cea6f043477.mp3"}],createdAt:"2021-01-03T08:08:53.577Z",updatedAt:"2021-01-03T08:08:53.577Z",lastPublishedAt:"2021-01-03T08:08:53.577Z"},{id:"1814",name:"Ghost",description:"???? ???? ? ????? ???? ?????????~\r\n\r\nEDIT: Fixed a double-down note.",uploader:{id:10509,name:"krydar",uniqueSet:!0,hash:"5cff0b7398cc5a672c84fe84",avatar:"https://www.gravatar.com/avatar/5cff0b7398cc5a672c84fe84?d=retro",type:"SIMPLE"},metadata:{bpm:120,duration:262,songName:"Ghost",songSubName:"Mystery Skulls",songAuthorName:"Kry",levelAuthorName:"Krydar"},stats:{plays:0,downloads:509,upvotes:1012,downvotes:27,score:.9155},uploaded:"2018-09-30T15:03:57Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"9430ecb46ce581ac51481d3a61e6fe3356dd4e61",key:"1814",state:"Published",createdAt:"2018-09-30T15:03:57Z",sageScore:5,diffs:[{njs:14,offset:0,notes:847,bombs:0,obstacles:138,nps:3.785,length:447.5,characteristic:"Standard",difficulty:"ExpertPlus",events:2331,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:223.75,paritySummary:{errors:35,warns:17,resets:0}}],downloadURL:"https://cdn.beatsaver.com/9430ecb46ce581ac51481d3a61e6fe3356dd4e61.zip",coverURL:"https://cdn.beatsaver.com/9430ecb46ce581ac51481d3a61e6fe3356dd4e61.jpg",previewURL:"https://cdn.beatsaver.com/9430ecb46ce581ac51481d3a61e6fe3356dd4e61.mp3"}],createdAt:"2018-09-30T15:03:57Z",updatedAt:"2018-09-30T15:03:57Z",lastPublishedAt:"2018-09-30T15:03:57Z"},{id:"6773",name:"Survive Said The Prophet - MUKANJYO - Vinland Saga OP song",description:"Youtube Preview: https://youtu.be/EHrf40IwTR8",uploader:{id:23751,name:"monteblanco",uniqueSet:!0,hash:"5cff0b7798cc5a672c855ef5",avatar:"https://www.gravatar.com/avatar/5cff0b7798cc5a672c855ef5?d=retro",type:"SIMPLE"},metadata:{bpm:190,duration:188,songName:"Survive Said The Prophet",songSubName:"",songAuthorName:"MUKANJYO",levelAuthorName:"Monteblanco"},stats:{plays:0,downloads:924,upvotes:561,downvotes:7,score:.9154},uploaded:"2019-10-03T00:15:52.884Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"cee8a59f1ec8c8cd4672c5428dda6999777870ff",key:"6773",state:"Published",createdAt:"2019-10-03T00:15:52.884Z",sageScore:5,diffs:[{njs:16,offset:0,notes:975,bombs:8,obstacles:6,nps:5.305,length:582,characteristic:"Standard",difficulty:"ExpertPlus",events:1135,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:183.789,paritySummary:{errors:0,warns:0,resets:1}}],downloadURL:"https://cdn.beatsaver.com/cee8a59f1ec8c8cd4672c5428dda6999777870ff.zip",coverURL:"https://cdn.beatsaver.com/cee8a59f1ec8c8cd4672c5428dda6999777870ff.jpg",previewURL:"https://cdn.beatsaver.com/cee8a59f1ec8c8cd4672c5428dda6999777870ff.mp3"}],createdAt:"2019-10-03T00:15:52.884Z",updatedAt:"2019-10-03T00:15:52.884Z",lastPublishedAt:"2019-10-03T00:15:52.884Z"},{id:"5281",name:"TheFatRat & Phaera - Sunlight",description:"Aww Yeah, it's glitch-hop baby! Colors of the map are Orange(ish) and Dark Blue (similar to the cover image). I had a lot of fun making this map and I hope you enjoy as well!\r\n\r\nPreview: https://www.youtube.com/watch?v=MLAjVcqpBlY",uploader:{id:57657,name:"pixelguymm",uniqueSet:!0,hash:"5cff0b7698cc5a672c8541a8",avatar:"https://cdn.beatsaver.com/avatar/434386941547511818.png",type:"DISCORD"},metadata:{bpm:106,duration:171,songName:"Sunlight",songSubName:"TheFatRat & Phaera",songAuthorName:"Pixelguy",levelAuthorName:"pixelguymm"},stats:{plays:0,downloads:701,upvotes:586,downvotes:8,score:.9154},uploaded:"2019-06-09T06:35:30Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"2d0ba779b5c8217f06a4c1267e8d872d4b46a4bb",key:"5281",state:"Published",createdAt:"2019-06-09T06:35:30Z",sageScore:4,diffs:[{njs:14,offset:0,notes:644,bombs:8,obstacles:36,nps:3.954,length:287.75,characteristic:"Standard",difficulty:"Expert",events:814,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:162.877,paritySummary:{errors:2,warns:2,resets:4}}],downloadURL:"https://cdn.beatsaver.com/2d0ba779b5c8217f06a4c1267e8d872d4b46a4bb.zip",coverURL:"https://cdn.beatsaver.com/2d0ba779b5c8217f06a4c1267e8d872d4b46a4bb.jpg",previewURL:"https://cdn.beatsaver.com/2d0ba779b5c8217f06a4c1267e8d872d4b46a4bb.mp3"}],createdAt:"2019-06-09T06:35:30Z",updatedAt:"2019-06-09T06:35:30Z",lastPublishedAt:"2019-06-09T06:35:30Z"},{id:"553e",name:"Happy Together (V2)",description:"Old map was borked since the last update, so here is a remade version, some patterns changed for more smooth, hard difficulty added.\n\nLights will feel old compare to what I do now",uploader:{id:4235153,name:"skeelie",uniqueSet:!0,hash:"5cff0b7698cc5a672c85507f",avatar:"https://cdn.beatsaver.com/avatar/119467937928052748.png",type:"DISCORD"},metadata:{bpm:121.2,duration:173,songName:"Happy Together",songSubName:"",songAuthorName:"The Turtles",levelAuthorName:"Skeelie"},stats:{plays:0,downloads:3463,upvotes:656,downvotes:11,score:.9153},uploaded:"2019-07-01T16:58:53.827Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"99d1d214dde61f736d5efd47da936476a5bd1e4e",key:"553e",state:"Published",createdAt:"2019-07-01T16:58:53.827Z",sageScore:3,diffs:[{njs:11,offset:0,notes:412,bombs:0,obstacles:0,nps:2.515,length:330.966,characteristic:"Standard",difficulty:"Hard",events:2137,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:163.845,paritySummary:{errors:32,warns:17,resets:0}},{njs:13,offset:0,notes:580,bombs:0,obstacles:0,nps:3.54,length:330.966,characteristic:"Standard",difficulty:"Expert",events:2137,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:163.845,paritySummary:{errors:52,warns:26,resets:0}}],downloadURL:"https://cdn.beatsaver.com/99d1d214dde61f736d5efd47da936476a5bd1e4e.zip",coverURL:"https://cdn.beatsaver.com/99d1d214dde61f736d5efd47da936476a5bd1e4e.jpg",previewURL:"https://cdn.beatsaver.com/99d1d214dde61f736d5efd47da936476a5bd1e4e.mp3"}],createdAt:"2019-07-01T16:58:53.827Z",updatedAt:"2019-07-01T16:58:53.827Z",lastPublishedAt:"2019-07-01T16:58:53.827Z"},{id:"540b",name:"Keep The Rave Alive - Jauz x Laser Laser Laser (collab w/Heisenberg)",description:"Requires Mapping Extensions Mod. Do not use Left-Handed/Mirror mode!\n\n128 BPM / 5:00 Runtime\nHard - 488 Notes\nExpert - 794 Notes\nExpert+ - 1157 Notes\n\nGameplay: https://youtu.be/lxfCwV_NZCA",uploader:{id:4284981,name:"skylerwallace",uniqueSet:!0,hash:"5cff0b7298cc5a672c84ea67",avatar:"https://cdn.beatsaver.com/avatar/398344856868487168.png",type:"DISCORD"},metadata:{bpm:128,duration:300,songName:"Keep The Rave Alive",songSubName:"Lazer Lazer Lazer",songAuthorName:"Jauz",levelAuthorName:"Skyler Wallace & Heisenberg"},stats:{plays:0,downloads:2589,upvotes:1571,downvotes:56,score:.9153},uploaded:"2019-06-22T18:12:49.515Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"511bfb7e192faa0615691c4e4e8d21bc162a84cf",key:"540b",state:"Published",createdAt:"2019-06-22T18:12:49.515Z",sageScore:8,diffs:[{njs:12,offset:1,notes:488,bombs:0,obstacles:1105,nps:1.712,length:608,characteristic:"Standard",difficulty:"Hard",events:16325,chroma:!1,me:!0,ne:!1,cinema:!1,seconds:285,paritySummary:{errors:74,warns:77,resets:0}},{njs:16,offset:0,notes:794,bombs:8,obstacles:1105,nps:2.786,length:608,characteristic:"Standard",difficulty:"Expert",events:16325,chroma:!1,me:!0,ne:!1,cinema:!1,seconds:285,paritySummary:{errors:51,warns:62,resets:4}},{njs:16,offset:0,notes:1157,bombs:0,obstacles:1105,nps:4.06,length:608,characteristic:"Standard",difficulty:"ExpertPlus",events:16325,chroma:!1,me:!0,ne:!1,cinema:!1,seconds:285,paritySummary:{errors:0,warns:0,resets:0}},{njs:19,offset:0,notes:0,bombs:0,obstacles:0,nps:0,length:0,characteristic:"Lightshow",difficulty:"Easy",events:16325,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:0,paritySummary:{errors:0,warns:0,resets:0}},{njs:19,offset:0,notes:0,bombs:0,obstacles:1105,nps:0,length:0,characteristic:"Lightshow",difficulty:"Normal",events:16325,chroma:!1,me:!0,ne:!1,cinema:!1,seconds:0,paritySummary:{errors:0,warns:0,resets:0}}],downloadURL:"https://cdn.beatsaver.com/511bfb7e192faa0615691c4e4e8d21bc162a84cf.zip",coverURL:"https://cdn.beatsaver.com/511bfb7e192faa0615691c4e4e8d21bc162a84cf.jpg",previewURL:"https://cdn.beatsaver.com/511bfb7e192faa0615691c4e4e8d21bc162a84cf.mp3"}],createdAt:"2019-06-22T18:12:49.515Z",updatedAt:"2019-06-22T18:12:49.515Z",lastPublishedAt:"2019-06-22T18:12:49.515Z"},{id:"321d",name:"Black Bullet [Black Bullet Opening] - fripSide",description:"Black Bullet, the opening song for the anime of the same name by Fripside!",uploader:{id:58338,name:"Joetastic",uniqueSet:!0,hash:"5cff0b7498cc5a672c85050e",avatar:"https://cdn.beatsaver.com/avatar/227767566402191360.png",type:"DISCORD"},metadata:{bpm:155,duration:262,songName:"Black Bullet",songSubName:"FripSide",songAuthorName:"Joetastic",levelAuthorName:"Joetastic"},stats:{plays:0,downloads:1907,upvotes:880,downvotes:21,score:.9152},uploaded:"2019-01-29T15:26:42Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"9e25062d995e1e0958b4eba4e7ba56f053e00b2c",key:"321d",state:"Published",createdAt:"2019-01-29T15:26:42Z",sageScore:6,diffs:[{njs:15,offset:0,notes:1252,bombs:0,obstacles:44,nps:4.878,length:663,characteristic:"Standard",difficulty:"Expert",events:3992,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:256.645,paritySummary:{errors:80,warns:87,resets:0}}],downloadURL:"https://cdn.beatsaver.com/9e25062d995e1e0958b4eba4e7ba56f053e00b2c.zip",coverURL:"https://cdn.beatsaver.com/9e25062d995e1e0958b4eba4e7ba56f053e00b2c.jpg",previewURL:"https://cdn.beatsaver.com/9e25062d995e1e0958b4eba4e7ba56f053e00b2c.mp3"}],createdAt:"2019-01-29T15:26:42Z",updatedAt:"2019-01-29T15:26:42Z",lastPublishedAt:"2019-01-29T15:26:42Z"},{id:"1e9b",name:"Du Hast by Rammstein (Kole Edit) [One Saber]",description:"UPDATED 6th november 2018: There were some misdirected notes and some minor flow issues that has now been corrected.You should now be able to get Full Combo much more intuitively! Please download again if you've played the map before as the scoreboards are reset. Sorry for the trouble!\r\n\r\nCan't have enough of Du Hast by Rammstein? Good! Cause here is a One Saber version of that song! If you play the regular (Dual Saber) version of this map then you'll find it familiar to that version.\r\n\r\nSong has been edited (shortened) to be tighter and not too repetitive.\r\n\r\n!! ONE SABER MODE MAP, start it from the ONE SABER MENU for best experience! !!\r\n\r\nPreview:\r\nhttps://youtu.be/wTAUDviTUcQ\r\n\r\nBPM: 125.09\r\nDuration: 2:57\r\nHard, Expert and Expert+ difficulties.\r\n\r\nHard: 331 notes, 0 obstacles, 0 mines\r\nExpert: 502 notes, 0 obstacles, 0 mines\r\nExpert+: 646 notes, 0 obstacles, 0 mines\r\n\r\nThanks to Hen Tie, ManDynasty, Red Magi and Civ for playtesting!\r\n\r\nRegular (Dual Saber) version here:\r\nhttps://beatsaver.com/browse/detail/6707-6348\r\n\r\nEnjoy!",uploader:{id:4285318,name:"kolezan",uniqueSet:!0,hash:"5cff0b7398cc5a672c84fcbb",avatar:"https://cdn.beatsaver.com/avatar/220513618763055106.png",type:"DISCORD"},metadata:{bpm:125,duration:177,songName:"Du Hast (One Saber)",songSubName:"Rammstein",songAuthorName:"Level by Kolezan",levelAuthorName:"Kolezan"},stats:{plays:0,downloads:2751,upvotes:879,downvotes:21,score:.9152},uploaded:"2018-11-06T21:46:57Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"e6cb01196d2256586c805df1baf910f8036005a7",key:"1e9b",state:"Published",createdAt:"2018-11-06T21:46:57Z",sageScore:4,diffs:[{njs:12,offset:0,notes:331,bombs:0,obstacles:0,nps:1.96,length:352,characteristic:"OneSaber",difficulty:"Hard",events:581,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:168.96,paritySummary:{errors:40,warns:38,resets:0}},{njs:12,offset:0,notes:501,bombs:0,obstacles:0,nps:2.967,length:352,characteristic:"OneSaber",difficulty:"Expert",events:581,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:168.96,paritySummary:{errors:42,warns:50,resets:0}},{njs:12,offset:0,notes:643,bombs:0,obstacles:0,nps:3.808,length:352,characteristic:"OneSaber",difficulty:"ExpertPlus",events:581,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:168.96,paritySummary:{errors:47,warns:51,resets:0}}],downloadURL:"https://cdn.beatsaver.com/e6cb01196d2256586c805df1baf910f8036005a7.zip",coverURL:"https://cdn.beatsaver.com/e6cb01196d2256586c805df1baf910f8036005a7.jpg",previewURL:"https://cdn.beatsaver.com/e6cb01196d2256586c805df1baf910f8036005a7.mp3"}],createdAt:"2018-11-06T21:46:57Z",updatedAt:"2018-11-06T21:46:57Z",lastPublishedAt:"2018-11-06T21:46:57Z"},{id:"68a4",name:"Paramore - Misery Business",description:"A true story about the hardships of young love, from one of the leading pioneers of alternative rock. The patterns aim to capture the same fiery energy and jumpiness from its prime. Cheers!\n\nINFO:\nBPM: 173.01\nLength: 3:19\nAll Standard Difficulties\n\nCONTRIBUTORS:\nKival Evan - Tester (Expert+)\nHelenCarnate - Tester (Expert)\nCyanSnow - Tester (Expert+)\nLaser Wrath - Tester (All Standard Difficulties)",uploader:{id:4284238,name:"officialMECH",uniqueSet:!0,hash:"5d51c536c53019000612f266",avatar:"https://cdn.beatsaver.com/avatar/386290335401246721.png",type:"DISCORD"},metadata:{bpm:173.01,duration:200,songName:"Misery Business",songSubName:"",songAuthorName:"Paramore",levelAuthorName:"officialMECH"},stats:{plays:0,downloads:5443,upvotes:1673,downvotes:62,score:.9151},uploaded:"2019-10-08T16:59:29.069Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"a46e07bb84c22dd1f371df0876fd828195b2c8ef",key:"68a4",state:"Published",createdAt:"2019-10-08T16:59:29.069Z",sageScore:8,diffs:[{njs:11,offset:0,notes:272,bombs:0,obstacles:38,nps:1.406,length:558,characteristic:"Standard",difficulty:"Easy",events:5e3,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:193.515,paritySummary:{errors:20,warns:13,resets:0}},{njs:11,offset:0,notes:360,bombs:0,obstacles:38,nps:1.86,length:558,characteristic:"Standard",difficulty:"Normal",events:5e3,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:193.515,paritySummary:{errors:54,warns:45,resets:0}},{njs:12,offset:0,notes:572,bombs:0,obstacles:38,nps:2.956,length:558,characteristic:"Standard",difficulty:"Hard",events:5e3,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:193.515,paritySummary:{errors:12,warns:8,resets:0}},{njs:15,offset:1,notes:946,bombs:2,obstacles:38,nps:4.889,length:558,characteristic:"Standard",difficulty:"Expert",events:5e3,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:193.515,paritySummary:{errors:6,warns:0,resets:0}},{njs:18,offset:.5,notes:1240,bombs:4,obstacles:38,nps:6.408,length:558,characteristic:"Standard",difficulty:"ExpertPlus",events:5e3,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:193.515,paritySummary:{errors:2,warns:0,resets:0}}],downloadURL:"https://cdn.beatsaver.com/a46e07bb84c22dd1f371df0876fd828195b2c8ef.zip",coverURL:"https://cdn.beatsaver.com/a46e07bb84c22dd1f371df0876fd828195b2c8ef.jpg",previewURL:"https://cdn.beatsaver.com/a46e07bb84c22dd1f371df0876fd828195b2c8ef.mp3"}],createdAt:"2019-10-08T16:59:29.069Z",updatedAt:"2019-10-08T16:59:29.069Z",lastPublishedAt:"2019-10-08T16:59:29.069Z"},{id:"225",name:"Clint Eastwood - Gorillaz",description:"Easy/Normal/Hard/Expert - Audio is as loud without clipping I swear! 100% Expert Playthrough: https://bit.ly/2LuFcxq\r\n\r\nHave fun! =D\r\n\r\n- Freeek =)",uploader:{id:47581,name:"freeek",uniqueSet:!0,hash:"5cff0b7298cc5a672c84e8ad",avatar:"https://www.gravatar.com/avatar/5cff0b7298cc5a672c84e8ad?d=retro",type:"SIMPLE"},metadata:{bpm:84,duration:200,songName:"Clint Eastwood",songSubName:"Gorillaz",songAuthorName:"unknow",levelAuthorName:"freeek"},stats:{plays:0,downloads:7585,upvotes:7017,downvotes:404,score:.9151},uploaded:"2018-05-25T20:58:36Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"507f0e09326d37e09dca08e3c2597f027dbe1940",key:"225",state:"Published",createdAt:"2018-05-25T20:58:36Z",sageScore:6,diffs:[{njs:10,offset:0,notes:297,bombs:0,obstacles:57,nps:1.575,length:264,characteristic:"Standard",difficulty:"Easy",events:1281,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:188.571,paritySummary:{errors:0,warns:0,resets:0}},{njs:10,offset:0,notes:358,bombs:0,obstacles:62,nps:1.906,length:263,characteristic:"Standard",difficulty:"Normal",events:1281,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:187.857,paritySummary:{errors:37,warns:18,resets:0}},{njs:10,offset:0,notes:514,bombs:0,obstacles:67,nps:2.721,length:264.5,characteristic:"Standard",difficulty:"Hard",events:1281,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:188.929,paritySummary:{errors:65,warns:85,resets:0}},{njs:10,offset:0,notes:681,bombs:0,obstacles:67,nps:3.473,length:274.5,characteristic:"Standard",difficulty:"Expert",events:1281,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:196.071,paritySummary:{errors:97,warns:102,resets:0}}],downloadURL:"https://cdn.beatsaver.com/507f0e09326d37e09dca08e3c2597f027dbe1940.zip",coverURL:"https://cdn.beatsaver.com/507f0e09326d37e09dca08e3c2597f027dbe1940.jpg",previewURL:"https://cdn.beatsaver.com/507f0e09326d37e09dca08e3c2597f027dbe1940.mp3"}],createdAt:"2018-05-25T20:58:36Z",updatedAt:"2018-05-25T20:58:36Z",lastPublishedAt:"2018-05-25T20:58:36Z"},{id:"3dd6",name:"Saeed - Infected Mushroom",description:"Collab between Bomb, Heisenberg, Rexxz and Ruckus\r\nBomb: 0 - 1:32\r\nHeisenberg: 1:32 - 3:03\r\nRexxz: 3:03 - 5:22\r\nRuckus: 5:22 ->",uploader:{id:4284846,name:"rexxz",uniqueSet:!0,hash:"5cff0b7598cc5a672c85311e",avatar:"https://cdn.beatsaver.com/avatar/101849894876106752.png",type:"DISCORD"},metadata:{bpm:145,duration:397,songName:"Saeed",songSubName:"Infected Mushroom",songAuthorName:"Bomb, Heisenberg, Rexxz, Ruckus",levelAuthorName:"Rexxz"},stats:{plays:0,downloads:1406,upvotes:1143,downvotes:34,score:.9151},uploaded:"2019-03-13T20:51:03Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"3f3d4ad451b3671e881776c88a67148326ccc9c5",key:"3dd6",state:"Published",createdAt:"2019-03-13T20:51:03Z",sageScore:6,diffs:[{njs:14,offset:0,notes:821,bombs:0,obstacles:76,nps:2.176,length:912,characteristic:"Standard",difficulty:"Normal",events:22078,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:377.379,paritySummary:{errors:80,warns:20,resets:0}},{njs:15,offset:0,notes:1316,bombs:209,obstacles:43,nps:3.427,length:928,characteristic:"Standard",difficulty:"Expert",events:22039,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:384,paritySummary:{errors:57,warns:88,resets:2}},{njs:18,offset:0,notes:2169,bombs:470,obstacles:61,nps:5.57,length:941,characteristic:"Standard",difficulty:"ExpertPlus",events:22077,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:389.379,paritySummary:{errors:70,warns:68,resets:8}}],downloadURL:"https://cdn.beatsaver.com/3f3d4ad451b3671e881776c88a67148326ccc9c5.zip",coverURL:"https://cdn.beatsaver.com/3f3d4ad451b3671e881776c88a67148326ccc9c5.jpg",previewURL:"https://cdn.beatsaver.com/3f3d4ad451b3671e881776c88a67148326ccc9c5.mp3"}],createdAt:"2019-03-13T20:51:03Z",updatedAt:"2019-03-13T20:51:03Z",lastPublishedAt:"2019-03-13T20:51:03Z"},{id:"e4ae",name:"[Alphabeat - Marshmello Pack] Anne-Marie & Marshmello - FRIENDS",description:"Part of the Marshmello Music Pack - Presented by the Alphabeat Mapping Group.\n\nAlphabeat is back once again! This time, we bring a Marshmello Music Pack - mapped by 3 members of the group over 6 different songs (with a bonus Expert+ only song)!\n\nPreview:\nhttps://www.youtube.com/watch?v=bW00nvk7JgU\n\nTimeweaver: https://beatsaver.com/uploader/5d47d586c5301900060b2f6c\nNitronik.exe: https://beatsaver.com/uploader/5cff0b7798cc5a672c855d84\nFirestrike: https://beatsaver.com/uploader/5cff0b7698cc5a672c85479f\n\nWatch the Marshmello Music Pack Trailer, created by Pixelguy: \nhttps://youtu.be/pzNkJ7tFcHM\n\nAll songs included in this pack:\n- Be Kind (Firestrike)\n- Wolves (Timeweaver)\n- Summer (Firestrike)\n- FRIENDS (Nitronik.exe)\n- Falling To Pieces (Nitronik.exe)\n- Rescue Me (Nitronik.exe)\n- [Bonus Song] Chasing Colors (Timeweaver)\n\nChroma is recommended for the best experience.\nDon't forget to grab the Mello Notes created alongside this pack, by Nitronik.exe: https://modelsaber.com/Bloqs/?id=1599384157&pc\nGet the playlist here: https://bsaber.com/marshmello-pack/",uploader:{id:4284201,name:"nitronikexe",uniqueSet:!0,hash:"5cff0b7798cc5a672c855d84",avatar:"https://cdn.beatsaver.com/avatar/428230049704181760.png",type:"DISCORD"},metadata:{bpm:190,duration:204,songName:"FRIENDS",songSubName:"(ft. Anne Marie)",songAuthorName:"Marshmello",levelAuthorName:"nitronik.exe"},stats:{plays:0,downloads:4733,upvotes:874,downvotes:21,score:.915},uploaded:"2020-09-06T11:06:01.474Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"6afef6c5baaf7348d0bb4107c78dc4e59ca511e2",key:"e4ae",state:"Published",createdAt:"2020-09-06T11:06:01.474Z",sageScore:7,diffs:[{njs:10,offset:.5,notes:171,bombs:0,obstacles:0,nps:.849,length:638,characteristic:"Standard",difficulty:"Easy",events:12015,chroma:!0,me:!1,ne:!1,cinema:!1,seconds:201.474,paritySummary:{errors:169,warns:0,resets:0}},{njs:12,offset:0,notes:345,bombs:0,obstacles:0,nps:1.712,length:638,characteristic:"Standard",difficulty:"Normal",events:12015,chroma:!0,me:!1,ne:!1,cinema:!1,seconds:201.474,paritySummary:{errors:0,warns:0,resets:0}},{njs:14,offset:-.5,notes:526,bombs:0,obstacles:0,nps:2.611,length:638,characteristic:"Standard",difficulty:"Hard",events:12015,chroma:!0,me:!1,ne:!1,cinema:!1,seconds:201.474,paritySummary:{errors:0,warns:0,resets:0}},{njs:16,offset:.75,notes:710,bombs:0,obstacles:0,nps:3.516,length:639.5,characteristic:"Standard",difficulty:"Expert",events:12016,chroma:!0,me:!1,ne:!1,cinema:!1,seconds:201.947,paritySummary:{errors:0,warns:0,resets:0}},{njs:18,offset:.25,notes:930,bombs:12,obstacles:16,nps:4.605,length:639.5,characteristic:"Standard",difficulty:"ExpertPlus",events:12015,chroma:!0,me:!1,ne:!1,cinema:!1,seconds:201.947,paritySummary:{errors:0,warns:3,resets:2}}],downloadURL:"https://cdn.beatsaver.com/6afef6c5baaf7348d0bb4107c78dc4e59ca511e2.zip",coverURL:"https://cdn.beatsaver.com/6afef6c5baaf7348d0bb4107c78dc4e59ca511e2.jpg",previewURL:"https://cdn.beatsaver.com/6afef6c5baaf7348d0bb4107c78dc4e59ca511e2.mp3"}],createdAt:"2020-09-06T11:06:01.474Z",updatedAt:"2020-09-06T11:06:01.474Z",lastPublishedAt:"2020-09-06T11:06:01.474Z"},{id:"ca40",name:"Kings & Queens - Ava Max",description:"A map requested by my sister so she can play it when she borrows my Quest for extended periods of time to practice her Beat Saber skills. ^_^\nShe helped me decide on some of the mapping decisions on this and helped me with play testing so some credit does go to her :D\n\nIf you have any suggestions about the map and would like to get in touch my discord is Edmard#5334\nNuff luv peeps!",uploader:{id:4285633,name:"edmard",uniqueSet:!0,hash:"5cff0b7798cc5a672c856604",avatar:"https://cdn.beatsaver.com/avatar/157188812462620672.png",type:"DISCORD"},metadata:{bpm:130,duration:162,songName:"Kings & Queens",songSubName:"",songAuthorName:"Ava Max",levelAuthorName:"Edmard"},stats:{plays:0,downloads:5634,upvotes:1649,downvotes:61,score:.915},uploaded:"2020-07-29T22:38:29.144Z",automapper:!1,ranked:!0,qualified:!1,versions:[{hash:"41d7c7b621d397db0723b55f75ab2ef6be1891e8",key:"ca40",state:"Published",createdAt:"2020-07-29T22:38:29.144Z",sageScore:3,diffs:[{njs:14,offset:0,notes:424,bombs:0,obstacles:29,nps:2.857,length:321.5,characteristic:"Standard",difficulty:"Hard",events:2338,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:148.385,paritySummary:{errors:0,warns:0,resets:0},stars:1.71},{njs:15,offset:0,notes:606,bombs:0,obstacles:25,nps:4.084,length:321.5,characteristic:"Standard",difficulty:"Expert",events:2338,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:148.385,paritySummary:{errors:0,warns:0,resets:0},stars:2.6},{njs:15,offset:-.3,notes:661,bombs:0,obstacles:22,nps:4.455,length:321.5,characteristic:"Standard",difficulty:"ExpertPlus",events:2338,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:148.385,paritySummary:{errors:0,warns:2,resets:0},stars:5.85}],downloadURL:"https://cdn.beatsaver.com/41d7c7b621d397db0723b55f75ab2ef6be1891e8.zip",coverURL:"https://cdn.beatsaver.com/41d7c7b621d397db0723b55f75ab2ef6be1891e8.jpg",previewURL:"https://cdn.beatsaver.com/41d7c7b621d397db0723b55f75ab2ef6be1891e8.mp3"}],createdAt:"2020-07-29T22:38:29.144Z",updatedAt:"2020-07-29T22:38:29.144Z",lastPublishedAt:"2020-07-29T22:38:29.144Z"},{id:"9a35",name:"[Tokyo Machine Pack] Tokyo Machine - PIXEL",description:"3/6\nPart of the Tokyo Machine Pack, a collab between Firestrike, Cyansnow and I.\nMap by me, lights by FireStrike.\n\nFireStrike's account: https://beatsaver.com/uploader/5cff0b7698cc5a672c85479f\nCyanSnow's account: https://beatsaver.com/uploader/5cff0b7698cc5a672c8543ac\n\nPlaylist: https://bsaber.com/tokyo-machine-pack/\n\nCheck out the trailer for the pack here: https://www.youtube.com/watch?v=lStPUnecsD8",uploader:{id:57657,name:"pixelguymm",uniqueSet:!0,hash:"5cff0b7698cc5a672c8541a8",avatar:"https://cdn.beatsaver.com/avatar/434386941547511818.png",type:"DISCORD"},metadata:{bpm:128,duration:201,songName:"PIXEL",songSubName:"",songAuthorName:"Tokyo Machine",levelAuthorName:"FireStrike & Pixel"},stats:{plays:0,downloads:1838,upvotes:650,downvotes:11,score:.915},uploaded:"2020-04-12T18:07:43.267Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"b5d3d5f97d34fc85c0a2cf694631bdf125229304",key:"9a35",state:"Published",createdAt:"2020-04-12T18:07:43.267Z",sageScore:4,diffs:[{njs:18,offset:-.3,notes:1172,bombs:54,obstacles:4,nps:6.016,length:415.625,characteristic:"Standard",difficulty:"ExpertPlus",events:4372,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:194.824,paritySummary:{errors:0,warns:0,resets:0}}],downloadURL:"https://cdn.beatsaver.com/b5d3d5f97d34fc85c0a2cf694631bdf125229304.zip",coverURL:"https://cdn.beatsaver.com/b5d3d5f97d34fc85c0a2cf694631bdf125229304.jpg",previewURL:"https://cdn.beatsaver.com/b5d3d5f97d34fc85c0a2cf694631bdf125229304.mp3"}],createdAt:"2020-04-12T18:07:43.267Z",updatedAt:"2020-04-12T18:07:43.267Z",lastPublishedAt:"2020-04-12T18:07:43.267Z"},{id:"c1d",name:"Good Times Roll",description:"Be sure to check out the other difficulties! There were certain patterns that I loved that only worked for some of the difficulties, and they're all super fun! Anyone playing Easy will find that Normal teaches you how to play harder maps while being very forgiving.\r\n\r\nAlso, I'm going on hiatus! This will be my last map for a good while since I'm back in school and also working full time. I'll still play here and there and maybe try to map a bit, but I likely won't release anything for several months. Hopefully this map will keep people satisfied for a while ;)\r\n\r\nhttps://youtu.be/vCbgECLTxpU",uploader:{id:44595,name:"awfulnaut",uniqueSet:!0,hash:"5cff0b7398cc5a672c84edac",avatar:"https://www.gravatar.com/avatar/5cff0b7398cc5a672c84edac?d=retro",type:"SIMPLE"},metadata:{bpm:200,duration:146,songName:"Good Times Roll",songSubName:"Griz x Big Gigantic",songAuthorName:"Awfulnaut",levelAuthorName:"awfulnaut"},stats:{plays:0,downloads:6704,upvotes:3141,downvotes:149,score:.915},uploaded:"2018-07-27T15:47:05Z",automapper:!1,ranked:!0,qualified:!1,versions:[{hash:"f22061809c798178786ca1b6e61b10ccbcbe8d28",key:"c1d",state:"Published",createdAt:"2018-07-27T15:47:05Z",sageScore:4,diffs:[{njs:10,offset:0,notes:356,bombs:8,obstacles:11,nps:2.566,length:462.5,characteristic:"Standard",difficulty:"Normal",events:1208,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:138.75,paritySummary:{errors:95,warns:15,resets:4},stars:1.45},{njs:10,offset:0,notes:469,bombs:8,obstacles:11,nps:3.38,length:462.5,characteristic:"Standard",difficulty:"Hard",events:1208,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:138.75,paritySummary:{errors:44,warns:29,resets:1},stars:1.88},{njs:10,offset:0,notes:519,bombs:0,obstacles:12,nps:3.741,length:462.5,characteristic:"Standard",difficulty:"Expert",events:1208,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:138.75,paritySummary:{errors:24,warns:41,resets:0},stars:2.25},{njs:10,offset:0,notes:634,bombs:0,obstacles:12,nps:4.569,length:462.5,characteristic:"Standard",difficulty:"ExpertPlus",events:1208,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:138.75,paritySummary:{errors:34,warns:48,resets:0},stars:2.74}],downloadURL:"https://cdn.beatsaver.com/f22061809c798178786ca1b6e61b10ccbcbe8d28.zip",coverURL:"https://cdn.beatsaver.com/f22061809c798178786ca1b6e61b10ccbcbe8d28.jpg",previewURL:"https://cdn.beatsaver.com/f22061809c798178786ca1b6e61b10ccbcbe8d28.mp3"}],createdAt:"2018-07-27T15:47:05Z",updatedAt:"2018-07-27T15:47:05Z",lastPublishedAt:"2018-07-27T15:47:05Z"},{id:"e7ce",name:"[NoodleGames Vol.2] Rivers in the Desert - Persona 5",description:"The Ramen Noodle group is back again to bring you a map pack full of our favorite video game soundtracks and game-inspired music!\n\nHere's one of my 4 Persona maps for the pack! Hope you enjoy.",uploader:{id:15368,name:"theab",uniqueSet:!0,hash:"5cff0b7698cc5a672c853a14",avatar:"https://www.gravatar.com/avatar/5cff0b7698cc5a672c853a14?d=retro",type:"SIMPLE"},metadata:{bpm:130,duration:224,songName:"Rivers In the Desert",songSubName:"(Short Ver.)",songAuthorName:"Shoji Meguro",levelAuthorName:"Ab"},stats:{plays:0,downloads:3270,upvotes:741,downvotes:15,score:.9149},uploaded:"2020-09-10T19:20:12.870Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"6dd531f3920735b2b1b64f39442fcb753b4a52a7",key:"e7ce",state:"Published",createdAt:"2020-09-10T19:20:12.870Z",sageScore:4,diffs:[{njs:16,offset:-.25,notes:760,bombs:0,obstacles:0,nps:3.441,length:478.5,characteristic:"Standard",difficulty:"Expert",events:941,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:220.846,paritySummary:{errors:2,warns:2,resets:0}},{njs:17,offset:-.35,notes:824,bombs:0,obstacles:0,nps:3.731,length:478.5,characteristic:"Standard",difficulty:"ExpertPlus",events:946,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:220.846,paritySummary:{errors:2,warns:0,resets:0}}],downloadURL:"https://cdn.beatsaver.com/6dd531f3920735b2b1b64f39442fcb753b4a52a7.zip",coverURL:"https://cdn.beatsaver.com/6dd531f3920735b2b1b64f39442fcb753b4a52a7.jpg",previewURL:"https://cdn.beatsaver.com/6dd531f3920735b2b1b64f39442fcb753b4a52a7.mp3"}],createdAt:"2020-09-10T19:20:12.870Z",updatedAt:"2020-09-10T19:20:12.870Z",lastPublishedAt:"2020-09-10T19:20:12.870Z"},{id:"d0be",name:"Bohemian Rhapsody - Queen",description:"Honestly, I never really liked that other version. And I'm sure some people would agree, so since it seemed like no one else was going fix it, I went and mapped it myself.\r\nEnjoy.\r\n\r\nP.S. - If kingpeuche ever plays this, good job man. Bohemian Rhapsody isn't an easy song to map, so I have some genuine respect for you.\r\n\r\nPlay kingpeuche's version(s) here: \r\nhttps://beatsaver.com/beatmap/4a6\r\nhttps://beatsaver.com/beatmap/77c\r\n\r\nSong Info:\r\nhttps://en.wikipedia.org/wiki/Bohemian_Rhapsody",uploader:{id:4284694,name:"jokidum",uniqueSet:!0,hash:"5e15518d47f1600006e912cc",avatar:"https://cdn.beatsaver.com/avatar/494282373094047745.png",type:"DISCORD"},metadata:{bpm:120,duration:356,songName:"Bohemian Rhapsody",songSubName:"- Queen",songAuthorName:"Queen",levelAuthorName:"Jokidum"},stats:{plays:0,downloads:8506,upvotes:1666,downvotes:62,score:.9149},uploaded:"2020-08-07T20:00:07.052Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"d19b4abf7d83d2882a5bf1f2bdc3b03491ef3eaf",key:"d0be",state:"Published",createdAt:"2020-08-07T20:00:07.052Z",sageScore:2,diffs:[{njs:12,offset:0,notes:1100,bombs:0,obstacles:0,nps:3.303,length:666,characteristic:"Standard",difficulty:"Expert",events:2875,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:333,paritySummary:{errors:4,warns:2,resets:0}},{njs:16,offset:0,notes:0,bombs:0,obstacles:0,nps:0,length:0,characteristic:"Lightshow",difficulty:"Easy",events:2875,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:0,paritySummary:{errors:0,warns:0,resets:0}}],downloadURL:"https://cdn.beatsaver.com/d19b4abf7d83d2882a5bf1f2bdc3b03491ef3eaf.zip",coverURL:"https://cdn.beatsaver.com/d19b4abf7d83d2882a5bf1f2bdc3b03491ef3eaf.jpg",previewURL:"https://cdn.beatsaver.com/d19b4abf7d83d2882a5bf1f2bdc3b03491ef3eaf.mp3"}],createdAt:"2020-08-07T20:00:07.052Z",updatedAt:"2020-08-07T20:00:07.052Z",lastPublishedAt:"2020-08-07T20:00:07.052Z"},{id:"96ff",name:"Imagine Dragons - Warriors (2020 ReMap)",description:"Two years ago on the 24th July 2018 I released my first beat saber map of Warriors by Imagine Dragons. Well now its back! and its BIGGER, LOUDER and more EPIC than ever! \n\nThe map was completely remade from the ground up, so new audio, new lights and completely new difficulties. Don't worry though, the old warriors will still remain on beatsaver just in case anyone prefers playing it.\n\nThanks to Strofan and Layanmeta for playtesting :P\n\nMap preview: https://youtu.be/pdb5F0Q1cwo",uploader:{id:4785,name:"stumi",uniqueSet:!1,hash:"5cff0b7398cc5a672c84f720",avatar:"https://www.gravatar.com/avatar/5cff0b7398cc5a672c84f720?d=retro",type:"SIMPLE"},metadata:{bpm:78,duration:172,songName:"Warriors (2020 ReMap)",songSubName:"",songAuthorName:"Imagine Dragons",levelAuthorName:"Stumi"},stats:{plays:0,downloads:7111,upvotes:1861,downvotes:73,score:.9149},uploaded:"2020-04-03T16:29:45.360Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"8ee2cc6242db4d138e620a347e3a2904f2a5b902",key:"96ff",state:"Published",createdAt:"2020-04-03T16:29:45.360Z",sageScore:5,diffs:[{njs:10,offset:0,notes:169,bombs:0,obstacles:67,nps:1.036,length:212,characteristic:"Standard",difficulty:"Easy",events:2808,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:163.077,paritySummary:{errors:32,warns:9,resets:0}},{njs:11,offset:0,notes:317,bombs:0,obstacles:82,nps:1.944,length:212,characteristic:"Standard",difficulty:"Normal",events:2808,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:163.077,paritySummary:{errors:52,warns:18,resets:0}},{njs:12,offset:.4,notes:506,bombs:4,obstacles:97,nps:3.103,length:212,characteristic:"Standard",difficulty:"Hard",events:2807,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:163.077,paritySummary:{errors:29,warns:11,resets:0}},{njs:16,offset:.2,notes:673,bombs:64,obstacles:130,nps:4.127,length:212,characteristic:"Standard",difficulty:"Expert",events:2808,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:163.077,paritySummary:{errors:20,warns:40,resets:11}}],downloadURL:"https://cdn.beatsaver.com/8ee2cc6242db4d138e620a347e3a2904f2a5b902.zip",coverURL:"https://cdn.beatsaver.com/8ee2cc6242db4d138e620a347e3a2904f2a5b902.jpg",previewURL:"https://cdn.beatsaver.com/8ee2cc6242db4d138e620a347e3a2904f2a5b902.mp3"}],createdAt:"2020-04-03T16:29:45.360Z",updatedAt:"2020-04-03T16:29:45.360Z",lastPublishedAt:"2020-04-03T16:29:45.360Z"},{id:"8f65",name:"Jump in the Line - Harry Belafonte",description:"My parents were big Harry Belafonte fans, and I grew up listening to this 1961 hit, Jump in the Line. In 1988, this song was a major part of the 1988 Michael Keaton classic, Beetlejuice. Who can forget Winona Ryder dancing in the air? Now you can dance along with her while slicing flying blocks!\n\nFully mapped Easy, Normal, Hard, Expert, Expert Plus Standard, and Expert Plus 360.\n\nThis song is part of my new song pack collaboration with MajorPickle: PickleTech Goes to the Movies - The 1980s.\n\nhttps://youtu.be/cbLl1ofeBZY",uploader:{id:78593,name:"techbutterfly",uniqueSet:!0,hash:"5cff0b7798cc5a672c8566f7",avatar:"https://cdn.beatsaver.com/avatar/527111497617506304.png",type:"DISCORD"},metadata:{bpm:115,duration:223,songName:"Jump in the Line",songSubName:"",songAuthorName:"Harry Belafonte",levelAuthorName:"TechButterfly"},stats:{plays:0,downloads:2510,upvotes:830,downvotes:19,score:.9149},uploaded:"2020-03-13T04:10:43.592Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"ba3e5d8bca161ef9e9f70383b6c33f83ecf8998a",key:"8f65",state:"Published",createdAt:"2020-03-13T04:10:43.592Z",sageScore:5,diffs:[{njs:8,offset:0,notes:274,bombs:0,obstacles:2,nps:1.256,length:418,characteristic:"Standard",difficulty:"Easy",events:919,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:218.087,paritySummary:{errors:67,warns:33,resets:0}},{njs:10,offset:0,notes:407,bombs:0,obstacles:2,nps:1.864,length:418.5,characteristic:"Standard",difficulty:"Normal",events:919,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:218.348,paritySummary:{errors:71,warns:55,resets:0}},{njs:12,offset:.5,notes:634,bombs:5,obstacles:2,nps:2.904,length:418.5,characteristic:"Standard",difficulty:"Hard",events:919,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:218.348,paritySummary:{errors:47,warns:51,resets:2}},{njs:12,offset:.5,notes:793,bombs:0,obstacles:2,nps:3.632,length:418.5,characteristic:"Standard",difficulty:"Expert",events:919,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:218.348,paritySummary:{errors:35,warns:46,resets:0}},{njs:13,offset:.5,notes:920,bombs:0,obstacles:2,nps:4.213,length:418.5,characteristic:"Standard",difficulty:"ExpertPlus",events:920,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:218.348,paritySummary:{errors:69,warns:77,resets:0}},{njs:13,offset:.5,notes:793,bombs:0,obstacles:2,nps:3.632,length:418.5,characteristic:"360Degree",difficulty:"ExpertPlus",events:1125,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:218.348,paritySummary:{errors:35,warns:46,resets:0}}],downloadURL:"https://cdn.beatsaver.com/ba3e5d8bca161ef9e9f70383b6c33f83ecf8998a.zip",coverURL:"https://cdn.beatsaver.com/ba3e5d8bca161ef9e9f70383b6c33f83ecf8998a.jpg",previewURL:"https://cdn.beatsaver.com/ba3e5d8bca161ef9e9f70383b6c33f83ecf8998a.mp3"}],createdAt:"2020-03-13T04:10:43.592Z",updatedAt:"2020-03-13T04:10:43.592Z",lastPublishedAt:"2020-03-13T04:10:43.592Z"},{id:"8e35",name:"Beat It [Punk Goes Pop Vol.2] - Fall Out Boy ft. John Mayer",description:"The first song in my up and coming Punk Goes Pop Volume 2 playlist! A punk rock cover of Beat It as covered by Fall Out Boy featuring John Mayer. Original song by Michael Jackson.",uploader:{id:58338,name:"Joetastic",uniqueSet:!0,hash:"5cff0b7498cc5a672c85050e",avatar:"https://cdn.beatsaver.com/avatar/227767566402191360.png",type:"DISCORD"},metadata:{bpm:150,duration:227,songName:"Beat It",songSubName:"ft. John Mayer",songAuthorName:"Fall Out Boy",levelAuthorName:"Joetastic"},stats:{plays:0,downloads:4056,upvotes:935,downvotes:24,score:.9149},uploaded:"2020-03-08T05:50:10.166Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"88474a324602552647553aa9533596c7cd882c60",key:"8e35",state:"Published",createdAt:"2020-03-08T05:50:10.166Z",sageScore:5,diffs:[{njs:10,offset:0,notes:396,bombs:0,obstacles:8,nps:1.827,length:542,characteristic:"Standard",difficulty:"Easy",events:7559,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:216.8,paritySummary:{errors:44,warns:39,resets:0}},{njs:12,offset:0,notes:531,bombs:0,obstacles:8,nps:2.405,length:552,characteristic:"Standard",difficulty:"Normal",events:7559,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:220.8,paritySummary:{errors:43,warns:55,resets:0}},{njs:13.5,offset:0,notes:863,bombs:0,obstacles:6,nps:3.909,length:552,characteristic:"Standard",difficulty:"Hard",events:7559,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:220.8,paritySummary:{errors:50,warns:49,resets:0}},{njs:15,offset:0,notes:878,bombs:0,obstacles:6,nps:3.976,length:552,characteristic:"Standard",difficulty:"Expert",events:7559,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:220.8,paritySummary:{errors:47,warns:54,resets:0}}],downloadURL:"https://cdn.beatsaver.com/88474a324602552647553aa9533596c7cd882c60.zip",coverURL:"https://cdn.beatsaver.com/88474a324602552647553aa9533596c7cd882c60.jpg",previewURL:"https://cdn.beatsaver.com/88474a324602552647553aa9533596c7cd882c60.mp3"}],createdAt:"2020-03-08T05:50:10.166Z",updatedAt:"2020-03-08T05:50:10.166Z",lastPublishedAt:"2020-03-08T05:50:10.166Z"},{id:"7395",name:"Bruh Sound Effect #2",description:"tried to get it ranked\nthey said common sense to me\nquite a bruh moment\n\nhaiku written by yours truly (its a true story btw)",uploader:{id:4285820,name:"ezconfirmed",uniqueSet:!0,hash:"5d6444b8589aee0006ff76ad",avatar:"https://cdn.beatsaver.com/avatar/343415744324960256.png",type:"DISCORD"},metadata:{bpm:120,duration:4,songName:"Bruh Sound Effect #2",songSubName:"",songAuthorName:"Jame Benedict",levelAuthorName:"eZconfirmed"},stats:{plays:0,downloads:908,upvotes:807,downvotes:18,score:.9149},uploaded:"2019-12-03T19:19:01.005Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"1c30514852ae45a9651d476fe748d2c9926facfc",key:"7395",state:"Published",createdAt:"2019-12-03T19:19:01.005Z",sageScore:1,diffs:[{njs:16,offset:0,notes:4,bombs:0,obstacles:0,nps:0,length:0,characteristic:"Standard",difficulty:"Normal",events:10,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:0,paritySummary:{errors:0,warns:0,resets:0}}],downloadURL:"https://cdn.beatsaver.com/1c30514852ae45a9651d476fe748d2c9926facfc.zip",coverURL:"https://cdn.beatsaver.com/1c30514852ae45a9651d476fe748d2c9926facfc.jpg",previewURL:"https://cdn.beatsaver.com/1c30514852ae45a9651d476fe748d2c9926facfc.mp3"}],createdAt:"2019-12-03T19:19:01.005Z",updatedAt:"2019-12-03T19:19:01.005Z",lastPublishedAt:"2019-12-03T19:19:01.005Z"},{id:"6361",name:"Choke - I DONT KNOW HOW BUT THEY FOUND ME",description:"Here's another fun and bouncy song! The lyrics are a bit...darker than the music would have you suggest though. So bite your tongue, and choke yourself to sleep.\n\nBPM: 120\nNPS: N - 2.45; H - 3.14; Ex - 3.96\nNotes: N - 482; H - 617; Ex - 778\nWalls: N - 28; H - 20; Ex - 17\nBombs: None!\n\nThanks to helencarnate and Checkthepan for testplaying!",uploader:{id:4285188,name:"fruhead",uniqueSet:!0,hash:"5cff0b7598cc5a672c852683",avatar:"https://cdn.beatsaver.com/avatar/174000100413145090.png",type:"DISCORD"},metadata:{bpm:120.251,duration:196,songName:"Choke",songSubName:"",songAuthorName:"I DONT KNOW HOW BUT THEY FOUND ME",levelAuthorName:"fruhead"},stats:{plays:0,downloads:1052,upvotes:388,downvotes:1,score:.9149},uploaded:"2019-09-14T17:56:33.555Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"ea073ec1320fd83c3b9c5e5be5fe2cb58e846b3f",key:"6361",state:"Published",createdAt:"2019-09-14T17:56:33.555Z",sageScore:6,diffs:[{njs:12,offset:0,notes:482,bombs:0,obstacles:28,nps:2.518,length:383.667,characteristic:"Standard",difficulty:"Normal",events:4223,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:191.433,paritySummary:{errors:8,warns:0,resets:0}},{njs:14,offset:0,notes:617,bombs:0,obstacles:20,nps:3.223,length:383.667,characteristic:"Standard",difficulty:"Hard",events:4223,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:191.433,paritySummary:{errors:3,warns:0,resets:0}},{njs:16,offset:0,notes:778,bombs:0,obstacles:17,nps:4.064,length:383.667,characteristic:"Standard",difficulty:"Expert",events:4223,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:191.433,paritySummary:{errors:4,warns:0,resets:0}}],downloadURL:"https://cdn.beatsaver.com/ea073ec1320fd83c3b9c5e5be5fe2cb58e846b3f.zip",coverURL:"https://cdn.beatsaver.com/ea073ec1320fd83c3b9c5e5be5fe2cb58e846b3f.jpg",previewURL:"https://cdn.beatsaver.com/ea073ec1320fd83c3b9c5e5be5fe2cb58e846b3f.mp3"}],createdAt:"2019-09-14T17:56:33.555Z",updatedAt:"2019-09-14T17:56:33.555Z",lastPublishedAt:"2019-09-14T17:56:33.555Z"},{id:"8600",name:"Tom Sawyer - Rush",description:"My tribute to Rush.",uploader:{id:4285077,name:"ris",uniqueSet:!0,hash:"5cff0b7598cc5a672c8535df",avatar:"https://cdn.beatsaver.com/avatar/191597992061435904.png",type:"DISCORD"},metadata:{bpm:88,duration:273,songName:"Tom Sawyer",songSubName:"",songAuthorName:"Rush",levelAuthorName:"Ris"},stats:{plays:0,downloads:2010,upvotes:806,downvotes:18,score:.9148},uploaded:"2020-02-11T03:37:38.994Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"1b39e3091cda17c7d35db7707e1f673a5e8ceb66",key:"8600",state:"Published",createdAt:"2020-02-11T03:37:38.994Z",sageScore:5,diffs:[{njs:10,offset:.5,notes:386,bombs:0,obstacles:0,nps:1.456,length:388.702,characteristic:"Standard",difficulty:"Normal",events:662,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:265.024,paritySummary:{errors:50,warns:42,resets:0}},{njs:12,offset:0,notes:748,bombs:0,obstacles:0,nps:2.822,length:388.702,characteristic:"Standard",difficulty:"Hard",events:662,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:265.024,paritySummary:{errors:74,warns:89,resets:0}},{njs:16,offset:.25,notes:1055,bombs:30,obstacles:0,nps:3.981,length:388.702,characteristic:"Standard",difficulty:"Expert",events:662,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:265.024,paritySummary:{errors:75,warns:86,resets:0}}],downloadURL:"https://cdn.beatsaver.com/1b39e3091cda17c7d35db7707e1f673a5e8ceb66.zip",coverURL:"https://cdn.beatsaver.com/1b39e3091cda17c7d35db7707e1f673a5e8ceb66.jpg",previewURL:"https://cdn.beatsaver.com/1b39e3091cda17c7d35db7707e1f673a5e8ceb66.mp3"}],createdAt:"2020-02-11T03:37:38.994Z",updatedAt:"2020-02-11T03:37:38.994Z",lastPublishedAt:"2020-02-11T03:37:38.994Z"},{id:"55d1",name:"Short Skirt Long Jacket - Cake",description:"Swing along with Cake's 2001 hit, Short Skirt Long Jacket. Even if you're not a Cake fan, you might remember this as the theme song for the TV show Chuck.\n\nFully mapped Easy, Normal, Hard, and Expert. Quest friendly!\n\nhttps://www.youtube.com/watch?v=1RKRbWus-qM",uploader:{id:78593,name:"techbutterfly",uniqueSet:!0,hash:"5cff0b7798cc5a672c8566f7",avatar:"https://cdn.beatsaver.com/avatar/527111497617506304.png",type:"DISCORD"},metadata:{bpm:120,duration:203,songName:"Short Skirt Long Jacket",songSubName:"",songAuthorName:"Cake",levelAuthorName:"TechButterfly"},stats:{plays:0,downloads:1700,upvotes:671,downvotes:12,score:.9148},uploaded:"2019-07-07T01:49:57.642Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"20b9326bd71db4454aba08df06b035ea536322a9",key:"55d1",state:"Published",createdAt:"2019-07-07T01:49:57.642Z",sageScore:5,diffs:[{njs:12,offset:0,notes:234,bombs:0,obstacles:4,nps:1.188,length:394,characteristic:"Standard",difficulty:"Easy",events:6191,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:197,paritySummary:{errors:69,warns:25,resets:0}},{njs:13,offset:0,notes:358,bombs:0,obstacles:4,nps:1.815,length:394.5,characteristic:"Standard",difficulty:"Normal",events:6191,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:197.25,paritySummary:{errors:90,warns:48,resets:0}},{njs:15,offset:0,notes:562,bombs:0,obstacles:44,nps:2.849,length:394.5,characteristic:"Standard",difficulty:"Hard",events:6191,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:197.25,paritySummary:{errors:31,warns:49,resets:0}},{njs:17,offset:0,notes:669,bombs:0,obstacles:32,nps:3.392,length:394.5,characteristic:"Standard",difficulty:"Expert",events:6195,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:197.25,paritySummary:{errors:45,warns:69,resets:0}}],downloadURL:"https://cdn.beatsaver.com/20b9326bd71db4454aba08df06b035ea536322a9.zip",coverURL:"https://cdn.beatsaver.com/20b9326bd71db4454aba08df06b035ea536322a9.jpg",previewURL:"https://cdn.beatsaver.com/20b9326bd71db4454aba08df06b035ea536322a9.mp3"}],createdAt:"2019-07-07T01:49:57.642Z",updatedAt:"2019-07-07T01:49:57.642Z",lastPublishedAt:"2019-07-07T01:49:57.642Z"},{id:"4a08",name:"Attack on Titan OP 5 | Shoukei to Shikabane no Michi | Shingeki no Kyojin OP 5| Mapped by Ab",description:"I offer all difficulties except Easy here. But Normal is pretty easy.\r\nSeizure warning I guess.",uploader:{id:15368,name:"theab",uniqueSet:!0,hash:"5cff0b7698cc5a672c853a14",avatar:"https://www.gravatar.com/avatar/5cff0b7698cc5a672c853a14?d=retro",type:"SIMPLE"},metadata:{bpm:178,duration:89,songName:"Attack on Titan OP5 (Shoukei to Shikabane no Michi)",songSubName:"Linked Horizon",songAuthorName:"Ab",levelAuthorName:"TheAb"},stats:{plays:0,downloads:2844,upvotes:891,downvotes:22,score:.9148},uploaded:"2019-05-02T20:07:56Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"922afca4bfe670e6ebff75c18245035744193d22",key:"4a08",state:"Published",createdAt:"2019-05-02T20:07:56Z",sageScore:3,diffs:[{njs:10,offset:0,notes:146,bombs:5,obstacles:5,nps:1.685,length:257,characteristic:"Standard",difficulty:"Normal",events:5631,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:86.629,paritySummary:{errors:62,warns:1,resets:2}},{njs:13,offset:0,notes:238,bombs:12,obstacles:7,nps:2.747,length:257,characteristic:"Standard",difficulty:"Hard",events:5631,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:86.629,paritySummary:{errors:30,warns:9,resets:2}},{njs:15,offset:1,notes:373,bombs:4,obstacles:6,nps:4.306,length:257,characteristic:"Standard",difficulty:"Expert",events:5631,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:86.629,paritySummary:{errors:19,warns:20,resets:2}},{njs:18,offset:0,notes:555,bombs:1,obstacles:3,nps:6.599,length:249.5,characteristic:"Standard",difficulty:"ExpertPlus",events:5634,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:84.101,paritySummary:{errors:29,warns:39,resets:0}}],downloadURL:"https://cdn.beatsaver.com/922afca4bfe670e6ebff75c18245035744193d22.zip",coverURL:"https://cdn.beatsaver.com/922afca4bfe670e6ebff75c18245035744193d22.jpg",previewURL:"https://cdn.beatsaver.com/922afca4bfe670e6ebff75c18245035744193d22.mp3"}],createdAt:"2019-05-02T20:07:56Z",updatedAt:"2019-05-02T20:07:56Z",lastPublishedAt:"2019-05-02T20:07:56Z"},{id:"487c",name:"Don't Stop Me Now - Queen",description:"Huge thanks to WhipStickGoStop for the full combo vid!\r\nhttps://www.youtube.com/watch?v=RPDvDY2HT58\r\n\r\nPlaytesters <3 WhipStickGoStop, XORoseGold, MozzVR, Izzake",uploader:{id:4285169,name:"ryger",uniqueSet:!0,hash:"5cff0b7798cc5a672c855a42",avatar:"https://cdn.beatsaver.com/avatar/169266024502263808.png",type:"DISCORD"},metadata:{bpm:120,duration:214,songName:"Don't Stop Me Now",songSubName:"Queen",songAuthorName:"Ryger",levelAuthorName:"Ryger"},stats:{plays:0,downloads:5041,upvotes:1291,downvotes:42,score:.9148},uploaded:"2019-04-26T16:28:36Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"9db67df13260c4715d33068e3982071ca6e3e815",key:"487c",state:"Published",createdAt:"2019-04-26T16:28:36Z",sageScore:6,diffs:[{njs:12,offset:0,notes:734,bombs:0,obstacles:1,nps:3.677,length:519.002,characteristic:"Standard",difficulty:"ExpertPlus",events:3998,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:259.501,paritySummary:{errors:71,warns:56,resets:0}}],downloadURL:"https://cdn.beatsaver.com/9db67df13260c4715d33068e3982071ca6e3e815.zip",coverURL:"https://cdn.beatsaver.com/9db67df13260c4715d33068e3982071ca6e3e815.jpg",previewURL:"https://cdn.beatsaver.com/9db67df13260c4715d33068e3982071ca6e3e815.mp3"}],createdAt:"2019-04-26T16:28:36Z",updatedAt:"2019-04-26T16:28:36Z",lastPublishedAt:"2019-04-26T16:28:36Z"},{id:"243c",name:"Ocarina of Time Medley [Smash Bros Map Pack]",description:"by Michiko Naruke\r\n\r\nPart of the Smash Bros map pack!\r\n\r\nVideo: https://youtu.be/lw7EN7Xu-9c",uploader:{id:39365,name:"todokete",uniqueSet:!0,hash:"5cff0b7398cc5a672c84ee70",avatar:"https://www.gravatar.com/avatar/5cff0b7398cc5a672c84ee70?d=retro",type:"SIMPLE"},metadata:{bpm:145,duration:114,songName:"Ocarina of Time Medley",songSubName:"Michiko Naruke",songAuthorName:"Todokete",levelAuthorName:"todokete"},stats:{plays:0,downloads:4995,upvotes:2238,downvotes:95,score:.9148},uploaded:"2018-12-07T00:16:02Z",automapper:!1,ranked:!0,qualified:!1,versions:[{hash:"00b539e86ea3f0b1e966544a297fb4942e499e6f",key:"243c",state:"Published",createdAt:"2018-12-07T00:16:02Z",sageScore:5,diffs:[{njs:11,offset:0,notes:239,bombs:0,obstacles:0,nps:2.179,length:265,characteristic:"Standard",difficulty:"Hard",events:882,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:109.655,paritySummary:{errors:34,warns:8,resets:0},stars:1.33},{njs:14,offset:0,notes:330,bombs:0,obstacles:0,nps:3.008,length:265,characteristic:"Standard",difficulty:"Expert",events:882,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:109.655,paritySummary:{errors:37,warns:37,resets:0},stars:2.97}],downloadURL:"https://cdn.beatsaver.com/00b539e86ea3f0b1e966544a297fb4942e499e6f.zip",coverURL:"https://cdn.beatsaver.com/00b539e86ea3f0b1e966544a297fb4942e499e6f.jpg",previewURL:"https://cdn.beatsaver.com/00b539e86ea3f0b1e966544a297fb4942e499e6f.mp3"}],createdAt:"2018-12-07T00:16:02Z",updatedAt:"2018-12-07T00:16:02Z",lastPublishedAt:"2018-12-07T00:16:02Z"},{id:"115c2",name:"[Wall Map] Alan Walker - Darkside (feat. Au/Ra and Tomine Harket)",description:"-FALL INTO THE DARKSIDE-\n\nMy first big wall map to feature ne 1.2 pogger, be prepared for a long load time and possible lag spikes.\nThanks to Rizthesnuggie and Liams2005 for contributing their maps and for putting up with my shit throughout this :)\nThanks to Krueger for answering all my programming questions.\n\nKrueger's Beatsaber Vids: https://www.youtube.com/watch?v=Q0hNfhk4Ngs&t=142s\nPlaythrough: https://www.youtube.com/watch?v=9BqzyBwFPE4\n\nmy ne tool: https://github.com/thelightdesigner/ScuffedWalls/releases/tag/v0.5.0-beta\n\nRequirements:\nNoodle Extensions\nChroma\nCustom JSON Data",uploader:{id:73008,name:"thelightdesigner",uniqueSet:!0,hash:"5cff0b7798cc5a672c85627a",avatar:"https://cdn.beatsaver.com/avatar/480555157952659489.png",type:"DISCORD"},metadata:{bpm:170,duration:178,songName:"Darkside",songSubName:"(ft. Au/Ra & Tomine Harket)",songAuthorName:"Alan Walker",levelAuthorName:"Liam, Riz & KyleT"},stats:{plays:0,downloads:3946,upvotes:1365,downvotes:46,score:.9147},uploaded:"2020-11-27T05:08:50.986Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"713e301fc4f774edf4ea1001a19dd5bf7e3f4ce6",key:"115c2",state:"Published",createdAt:"2020-11-27T05:08:50.986Z",sageScore:1,diffs:[{njs:16,offset:0,notes:500,bombs:24,obstacles:65952,nps:2.905,length:487.667,characteristic:"Standard",difficulty:"Hard",events:1,chroma:!0,me:!1,ne:!0,cinema:!1,seconds:172.118,paritySummary:{errors:0,warns:0,resets:0}},{njs:17,offset:0,notes:610,bombs:36,obstacles:65952,nps:3.571,length:484,characteristic:"Standard",difficulty:"Expert",events:1,chroma:!0,me:!1,ne:!0,cinema:!1,seconds:170.824,paritySummary:{errors:1,warns:0,resets:12}},{njs:18,offset:0,notes:866,bombs:0,obstacles:65952,nps:5.07,length:484,characteristic:"Standard",difficulty:"ExpertPlus",events:1,chroma:!0,me:!1,ne:!0,cinema:!1,seconds:170.824,paritySummary:{errors:0,warns:0,resets:0}}],downloadURL:"https://cdn.beatsaver.com/713e301fc4f774edf4ea1001a19dd5bf7e3f4ce6.zip",coverURL:"https://cdn.beatsaver.com/713e301fc4f774edf4ea1001a19dd5bf7e3f4ce6.jpg",previewURL:"https://cdn.beatsaver.com/713e301fc4f774edf4ea1001a19dd5bf7e3f4ce6.mp3"}],createdAt:"2020-11-27T05:08:50.986Z",updatedAt:"2020-11-27T05:08:50.986Z",lastPublishedAt:"2020-11-27T05:08:50.986Z"},{id:"57cb",name:"CAN CAN WORLD",description:"Twitter: https://twitter.com/Dack731",uploader:{id:4285250,name:"dack",uniqueSet:!0,hash:"5cff0b7598cc5a672c852c6f",avatar:"https://cdn.beatsaver.com/avatar/297344689798119424.png",type:"DISCORD"},metadata:{bpm:158,duration:297,songName:"CAN CAN WORLD",songSubName:"",songAuthorName:"MAKKERONI",levelAuthorName:"Dack"},stats:{plays:0,downloads:813,upvotes:523,downvotes:6,score:.9147},uploaded:"2019-07-18T23:50:08.241Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"d2dab61784b612b9b807e127260a81ed974315af",key:"57cb",state:"Published",createdAt:"2019-07-18T23:50:08.241Z",sageScore:3,diffs:[{njs:12,offset:0,notes:531,bombs:0,obstacles:114,nps:1.828,length:765,characteristic:"Standard",difficulty:"Normal",events:1776,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:290.506,paritySummary:{errors:14,warns:18,resets:0}},{njs:13,offset:0,notes:806,bombs:0,obstacles:114,nps:2.774,length:765,characteristic:"Standard",difficulty:"Hard",events:1776,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:290.506,paritySummary:{errors:12,warns:11,resets:0}},{njs:14,offset:0,notes:1150,bombs:0,obstacles:110,nps:3.959,length:765,characteristic:"Standard",difficulty:"Expert",events:1776,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:290.506,paritySummary:{errors:5,warns:9,resets:0}},{njs:17,offset:0,notes:1399,bombs:8,obstacles:114,nps:4.816,length:765,characteristic:"Standard",difficulty:"ExpertPlus",events:1784,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:290.506,paritySummary:{errors:31,warns:28,resets:2}}],downloadURL:"https://cdn.beatsaver.com/d2dab61784b612b9b807e127260a81ed974315af.zip",coverURL:"https://cdn.beatsaver.com/d2dab61784b612b9b807e127260a81ed974315af.jpg",previewURL:"https://cdn.beatsaver.com/d2dab61784b612b9b807e127260a81ed974315af.mp3"}],createdAt:"2019-07-18T23:50:08.241Z",updatedAt:"2019-07-18T23:50:08.241Z",lastPublishedAt:"2019-07-18T23:50:08.241Z"},{id:"66f",name:"This Is Gospel - Panic! At The Disco",description:"Expert - Hard - Normal Charts\nLighting Events\n\nhttps://twitter.com/TheDownyCat\nhttps://www.twitch.tv/downycat\nhttps://streamlabs.com/downycat/tip",uploader:{id:4285982,name:"downycat",uniqueSet:!0,hash:"5cff0b7398cc5a672c84ede5",avatar:"https://cdn.beatsaver.com/avatar/173538829888782336.png",type:"DISCORD"},metadata:{bpm:156,duration:180,songName:"This Is Gospel",songSubName:"Panic! At The Disco",songAuthorName:"DownyCat",levelAuthorName:"downycat"},stats:{plays:0,downloads:2221,upvotes:1421,downvotes:49,score:.9147},uploaded:"2018-06-24T10:25:39Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"e14ecfe4def439051ae404353aae6aabc7d1e05f",key:"66f",state:"Published",createdAt:"2018-06-24T10:25:39Z",sageScore:4,diffs:[{njs:10,offset:0,notes:382,bombs:0,obstacles:14,nps:2.178,length:455.999,characteristic:"Standard",difficulty:"Normal",events:970,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:175.384,paritySummary:{errors:47,warns:12,resets:0}},{njs:10,offset:0,notes:619,bombs:0,obstacles:14,nps:3.529,length:456,characteristic:"Standard",difficulty:"Hard",events:970,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:175.385,paritySummary:{errors:77,warns:55,resets:0}},{njs:10,offset:0,notes:733,bombs:0,obstacles:14,nps:4.179,length:456,characteristic:"Standard",difficulty:"Expert",events:970,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:175.385,paritySummary:{errors:33,warns:25,resets:0}}],downloadURL:"https://cdn.beatsaver.com/e14ecfe4def439051ae404353aae6aabc7d1e05f.zip",coverURL:"https://cdn.beatsaver.com/e14ecfe4def439051ae404353aae6aabc7d1e05f.jpg",previewURL:"https://cdn.beatsaver.com/e14ecfe4def439051ae404353aae6aabc7d1e05f.mp3"}],createdAt:"2018-06-24T10:25:39Z",updatedAt:"2018-06-24T10:25:39Z",lastPublishedAt:"2018-06-24T10:25:39Z"},{id:"4739",name:"Paramore - Decode",description:"Twilight = Hard\r\nParamore = Expert",uploader:{id:4285107,name:"kikaeaeon",uniqueSet:!0,hash:"5cff0b7498cc5a672c85109b",avatar:"https://cdn.beatsaver.com/avatar/103715469822816256.png",type:"DISCORD"},metadata:{bpm:164,duration:262,songName:"Decode",songSubName:"Paramore",songAuthorName:"KikaeAeon",levelAuthorName:"kikaeaeon"},stats:{plays:0,downloads:1976,upvotes:950,downvotes:25,score:.9146},uploaded:"2019-04-20T06:10:32Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"964d8f8c41aaf56aa2cfc06072eff70f599d6a3f",key:"4739",state:"Published",createdAt:"2019-04-20T06:10:32Z",sageScore:6,diffs:[{njs:10,offset:0,notes:616,bombs:0,obstacles:16,nps:2.556,length:658.75,characteristic:"Standard",difficulty:"Hard",events:798,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:241.006,paritySummary:{errors:20,warns:8,resets:0}},{njs:15,offset:0,notes:983,bombs:0,obstacles:16,nps:4.079,length:658.75,characteristic:"Standard",difficulty:"Expert",events:1165,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:241.006,paritySummary:{errors:28,warns:23,resets:0}}],downloadURL:"https://cdn.beatsaver.com/964d8f8c41aaf56aa2cfc06072eff70f599d6a3f.zip",coverURL:"https://cdn.beatsaver.com/964d8f8c41aaf56aa2cfc06072eff70f599d6a3f.jpg",previewURL:"https://cdn.beatsaver.com/964d8f8c41aaf56aa2cfc06072eff70f599d6a3f.mp3"}],createdAt:"2019-04-20T06:10:32Z",updatedAt:"2019-04-20T06:10:32Z",lastPublishedAt:"2019-04-20T06:10:32Z"},{id:"9a3f",name:"[Tokyo Machine Pack] Tokyo Machine - BUBBLES",description:"2/3\nPart of the Tokyo Machine Pack, a collab between Pixelguy, CyanSnow and I.\nMap and lights both by me.\n\nCyanSnow's account: https://beatsaver.com/uploader/5cff0b7698cc5a672c8543ac\nPixelguymm's account: https://beatsaver.com/uploader/5cff0b7698cc5a672c8541a8\n\nCheck out the trailer for the pack here: https://www.youtube.com/watch?v=lStPUnecsD8",uploader:{id:3376,name:"firestrikecm",uniqueSet:!0,hash:"5cff0b7698cc5a672c85479f",avatar:"https://cdn.beatsaver.com/avatar/3376.jpg",type:"SIMPLE"},metadata:{bpm:128,duration:232,songName:"BUBBLES",songSubName:"",songAuthorName:"Tokyo Machine",levelAuthorName:"FireStrike"},stats:{plays:0,downloads:2141,upvotes:926,downvotes:24,score:.9145},uploaded:"2020-04-12T18:21:41.920Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"d4b087ffab62b7994ce433969c21ef6b29462163",key:"9a3f",state:"Published",createdAt:"2020-04-12T18:21:41.920Z",sageScore:5,diffs:[{njs:20,offset:.7,notes:883,bombs:0,obstacles:10,nps:3.868,length:487,characteristic:"Standard",difficulty:"ExpertPlus",events:3192,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:228.281,paritySummary:{errors:3,warns:0,resets:0}}],downloadURL:"https://cdn.beatsaver.com/d4b087ffab62b7994ce433969c21ef6b29462163.zip",coverURL:"https://cdn.beatsaver.com/d4b087ffab62b7994ce433969c21ef6b29462163.jpg",previewURL:"https://cdn.beatsaver.com/d4b087ffab62b7994ce433969c21ef6b29462163.mp3"}],createdAt:"2020-04-12T18:21:41.920Z",updatedAt:"2020-04-12T18:21:41.920Z",lastPublishedAt:"2020-04-12T18:21:41.920Z"},{id:"7578",name:"Shape of You [Punk Goes Pop Vol.1] - Our Last Night",description:'A rock cover of "Shape of You" by rock band, Our Last Night. Original song by Ed Sheeran.\n\nEDIT: Fixed one missing note mismap',uploader:{id:58338,name:"Joetastic",uniqueSet:!0,hash:"5cff0b7498cc5a672c85050e",avatar:"https://cdn.beatsaver.com/avatar/227767566402191360.png",type:"DISCORD"},metadata:{bpm:192,duration:240,songName:"Shape of You (Rock Cover)",songSubName:"",songAuthorName:"Our Last Night",levelAuthorName:"Joetastic"},stats:{plays:0,downloads:2427,upvotes:618,downvotes:10,score:.9145},uploaded:"2019-12-10T17:53:07.422Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"dfff04c4d50466e5a6c9b72466af5e72aee623c3",key:"7578",state:"Published",createdAt:"2019-12-10T17:53:07.422Z",sageScore:4,diffs:[{njs:16,offset:0,notes:1039,bombs:0,obstacles:6,nps:4.421,length:752,characteristic:"Standard",difficulty:"ExpertPlus",events:2377,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:235,paritySummary:{errors:59,warns:56,resets:0}}],downloadURL:"https://cdn.beatsaver.com/dfff04c4d50466e5a6c9b72466af5e72aee623c3.zip",coverURL:"https://cdn.beatsaver.com/dfff04c4d50466e5a6c9b72466af5e72aee623c3.jpg",previewURL:"https://cdn.beatsaver.com/dfff04c4d50466e5a6c9b72466af5e72aee623c3.mp3"}],createdAt:"2019-12-10T17:53:07.422Z",updatedAt:"2019-12-10T17:53:07.422Z",lastPublishedAt:"2019-12-10T17:53:07.422Z"},{id:"7375",name:"Martin O' Donnell - Tip of the Spear (Halo Reach)",description:"#16\nAnyone else hyped for Halo Reach tomorrow? I know I am, probably my favorite FPS franchise. Time to grind back to where I was (even though leveling is different). Anyway, here's one of the songs from the game.\n\nN/S:\nEasy: 0.84\nNormal: 1.22\nHard (Heroic): 2.12\nExpert (Legendary): 2.61\nLights: 666 (998 on expert/legendary somehow)",uploader:{id:4284294,name:"eop-glacier",uniqueSet:!0,hash:"5d50e360adb1a20006305ca0",avatar:"https://cdn.beatsaver.com/avatar/459209214376804363.png",type:"DISCORD"},metadata:{bpm:126,duration:186,songName:"Tip of the Spear",songSubName:"",songAuthorName:"Martin O' Donnell",levelAuthorName:"EOP Glacier"},stats:{plays:0,downloads:2106,upvotes:688,downvotes:13,score:.9145},uploaded:"2019-12-03T04:18:47.641Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"16e10bdc52ee5a515fab9661df0efffcaa3712d3",key:"7375",state:"Published",createdAt:"2019-12-03T04:18:47.641Z",sageScore:4,diffs:[{njs:11,offset:0,notes:158,bombs:0,obstacles:7,nps:1.009,length:329,characteristic:"Standard",difficulty:"Easy",events:663,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:156.667,paritySummary:{errors:6,warns:0,resets:0}},{njs:13,offset:0,notes:229,bombs:0,obstacles:10,nps:1.462,length:329,characteristic:"Standard",difficulty:"Normal",events:663,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:156.667,paritySummary:{errors:1,warns:0,resets:0}},{njs:15.5,offset:0,notes:397,bombs:0,obstacles:9,nps:2.533,length:329.075,characteristic:"Standard",difficulty:"Hard",events:663,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:156.702,paritySummary:{errors:2,warns:0,resets:0}},{njs:18,offset:.2,notes:489,bombs:0,obstacles:25,nps:3.121,length:329,characteristic:"Standard",difficulty:"Expert",events:995,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:156.667,paritySummary:{errors:0,warns:0,resets:0}}],downloadURL:"https://cdn.beatsaver.com/16e10bdc52ee5a515fab9661df0efffcaa3712d3.zip",coverURL:"https://cdn.beatsaver.com/16e10bdc52ee5a515fab9661df0efffcaa3712d3.jpg",previewURL:"https://cdn.beatsaver.com/16e10bdc52ee5a515fab9661df0efffcaa3712d3.mp3"}],createdAt:"2019-12-03T04:18:47.641Z",updatedAt:"2019-12-03T04:18:47.641Z",lastPublishedAt:"2019-12-03T04:18:47.641Z"},{id:"5a7c",name:"Bon Jovi - Livin' on a Prayer",description:"Its been waay too long since I last released a map. Been on a break from Beatsaber lately but now that I'm back I hope I can carry on getting out monthly maps like I used to.\nThis song is victim to some pretty nasty variable BPM, but hopefully if I've done it right you wont be able to notice any timing issues ;) Regardless, Hopefully you can give it a go and let me know what you think!\nVideo preview: https://www.youtube.com/watch?v=eYKJrkcHj0I",uploader:{id:4785,name:"stumi",uniqueSet:!1,hash:"5cff0b7398cc5a672c84f720",avatar:"https://www.gravatar.com/avatar/5cff0b7398cc5a672c84f720?d=retro",type:"SIMPLE"},metadata:{bpm:121.8,duration:248,songName:"Livin' on a Prayer",songSubName:"",songAuthorName:"Bon Jovi",levelAuthorName:"Stumi"},stats:{plays:0,downloads:8093,upvotes:1356,downvotes:46,score:.9145},uploaded:"2019-08-03T20:42:08.797Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"8e4e798189ddecb9f49f624d6aa6a0648dd2650b",key:"5a7c",state:"Published",createdAt:"2019-08-03T20:42:08.797Z",sageScore:2,diffs:[{njs:10,offset:0,notes:253,bombs:4,obstacles:48,nps:1.12,length:458.614,characteristic:"Standard",difficulty:"Easy",events:1973,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:225.918,paritySummary:{errors:59,warns:11,resets:2}},{njs:11,offset:0,notes:432,bombs:0,obstacles:90,nps:1.914,length:458.125,characteristic:"Standard",difficulty:"Normal",events:1974,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:225.677,paritySummary:{errors:58,warns:20,resets:0}},{njs:13,offset:0,notes:755,bombs:0,obstacles:79,nps:3.345,length:458.125,characteristic:"Standard",difficulty:"Hard",events:1973,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:225.677,paritySummary:{errors:45,warns:58,resets:0}},{njs:15,offset:0,notes:920,bombs:0,obstacles:86,nps:4.077,length:458.125,characteristic:"Standard",difficulty:"Expert",events:1973,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:225.677,paritySummary:{errors:43,warns:47,resets:0}}],downloadURL:"https://cdn.beatsaver.com/8e4e798189ddecb9f49f624d6aa6a0648dd2650b.zip",coverURL:"https://cdn.beatsaver.com/8e4e798189ddecb9f49f624d6aa6a0648dd2650b.jpg",previewURL:"https://cdn.beatsaver.com/8e4e798189ddecb9f49f624d6aa6a0648dd2650b.mp3"}],createdAt:"2019-08-03T20:42:08.797Z",updatedAt:"2019-08-03T20:42:08.797Z",lastPublishedAt:"2019-08-03T20:42:08.797Z"},{id:"1fee",name:"Wavin' Flag (100k Contest)",description:"This is one of the 22 maps that were mapped for the 100k Contest where you can win over $7,000 in prizes. Go to https://bsaber.com/100k-contest/ to register!",uploader:{id:2521,name:"darkgrisen",uniqueSet:!0,hash:"5cff0b7398cc5a672c84fe44",avatar:"https://www.gravatar.com/avatar/5cff0b7398cc5a672c84fe44?d=retro",type:"SIMPLE"},metadata:{bpm:152,duration:215,songName:"Wavin' Flag (100k Contest)",songSubName:"K'NAAN",songAuthorName:"DarkGrisen",levelAuthorName:"DarkGrisen"},stats:{plays:0,downloads:4479,upvotes:1244,downvotes:40,score:.9145},uploaded:"2018-11-12T17:47:43Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"de9c89b59023a9e30e2c4dfc9b63dd30807b68cb",key:"1fee",state:"Published",createdAt:"2018-11-12T17:47:43Z",sageScore:6,diffs:[{njs:9,offset:0,notes:157,bombs:0,obstacles:2,nps:.765,length:520,characteristic:"Standard",difficulty:"Easy",events:528,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:205.263,paritySummary:{errors:18,warns:14,resets:0}},{njs:9,offset:0,notes:360,bombs:0,obstacles:2,nps:1.754,length:520,characteristic:"Standard",difficulty:"Normal",events:528,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:205.263,paritySummary:{errors:54,warns:25,resets:0}},{njs:10,offset:0,notes:496,bombs:0,obstacles:2,nps:2.416,length:520,characteristic:"Standard",difficulty:"Hard",events:528,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:205.263,paritySummary:{errors:46,warns:40,resets:0}},{njs:11,offset:0,notes:676,bombs:0,obstacles:2,nps:3.293,length:520,characteristic:"Standard",difficulty:"Expert",events:528,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:205.263,paritySummary:{errors:58,warns:79,resets:0}},{njs:12,offset:0,notes:869,bombs:0,obstacles:2,nps:4.234,length:520,characteristic:"Standard",difficulty:"ExpertPlus",events:528,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:205.263,paritySummary:{errors:47,warns:72,resets:0}}],downloadURL:"https://cdn.beatsaver.com/de9c89b59023a9e30e2c4dfc9b63dd30807b68cb.zip",coverURL:"https://cdn.beatsaver.com/de9c89b59023a9e30e2c4dfc9b63dd30807b68cb.jpg",previewURL:"https://cdn.beatsaver.com/de9c89b59023a9e30e2c4dfc9b63dd30807b68cb.mp3"}],createdAt:"2018-11-12T17:47:43Z",updatedAt:"2018-11-12T17:47:43Z",lastPublishedAt:"2018-11-12T17:47:43Z"},{id:"b741",name:"Eskimo Callboy - Hypa Hypa",description:"Genre: Post-Hardcore / Metalcore / Electronic\n\nIf you don't want to see flying words or don't have MappingExtensions, just play \"No Lyrics\" difficult.\n\nPreview by Kira Argenta: https://www.youtube.com/watch?v=pFSpAzmNbJo\nPreview by Superritchman: https://www.youtube.com/watch?v=XwGZQNPI08c\n\nFeedback (Discord): ExistenceExpire#9858\nFeedback and support: https://ko-fi.com/existenceexpire",uploader:{id:69683,name:"existenceexpire",uniqueSet:!0,hash:"5e9e16bb2a34090006a1aed5",avatar:"https://cdn.beatsaver.com/avatar/226078773517352960.png",type:"DISCORD"},metadata:{bpm:152,duration:210,songName:"Hypa Hypa",songSubName:"",songAuthorName:"Eskimo Callboy",levelAuthorName:"ExistenceExpire"},stats:{plays:0,downloads:1477,upvotes:662,downvotes:12,score:.9144},uploaded:"2020-06-28T18:04:59.590Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"b39e9d698422517226f24666ebd7ae3d7aaf244a",key:"b741",state:"Published",createdAt:"2020-06-28T18:04:59.590Z",sageScore:5,diffs:[{njs:18,offset:.15301132,notes:912,bombs:59,obstacles:0,nps:4.499,length:513.5,characteristic:"Standard",difficulty:"Expert",events:3501,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:202.697,paritySummary:{errors:6,warns:16,resets:8}},{njs:18,offset:.15301132,notes:912,bombs:59,obstacles:12486,nps:4.499,length:513.5,characteristic:"Standard",difficulty:"ExpertPlus",events:3501,chroma:!1,me:!0,ne:!1,cinema:!1,seconds:202.697,paritySummary:{errors:6,warns:16,resets:8}}],downloadURL:"https://cdn.beatsaver.com/b39e9d698422517226f24666ebd7ae3d7aaf244a.zip",coverURL:"https://cdn.beatsaver.com/b39e9d698422517226f24666ebd7ae3d7aaf244a.jpg",previewURL:"https://cdn.beatsaver.com/b39e9d698422517226f24666ebd7ae3d7aaf244a.mp3"}],createdAt:"2020-06-28T18:04:59.590Z",updatedAt:"2020-06-28T18:04:59.590Z",lastPublishedAt:"2020-06-28T18:04:59.590Z"},{id:"5e06",name:"I Will Not Bow - Breaking Benjamin",description:"Shoutouts to twitch.tv/whipstickgostop and twitch.tv/xorosegold for playtesting!",uploader:{id:4285077,name:"ris",uniqueSet:!0,hash:"5cff0b7598cc5a672c8535df",avatar:"https://cdn.beatsaver.com/avatar/191597992061435904.png",type:"DISCORD"},metadata:{bpm:108,duration:218,songName:"I Will Not Bow",songSubName:"",songAuthorName:"Breaking Benjamin",levelAuthorName:"Ris"},stats:{plays:0,downloads:2375,upvotes:819,downvotes:19,score:.9144},uploaded:"2019-08-20T03:22:59.663Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"29c0a39db6a53375d2359f4a2a492a0ea784d04f",key:"5e06",state:"Published",createdAt:"2019-08-20T03:22:59.663Z",sageScore:4,diffs:[{njs:10,offset:1,notes:310,bombs:6,obstacles:4,nps:1.516,length:368,characteristic:"Standard",difficulty:"Normal",events:318,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:204.444,paritySummary:{errors:60,warns:40,resets:0}},{njs:12,offset:1,notes:619,bombs:73,obstacles:4,nps:2.936,length:379.5,characteristic:"Standard",difficulty:"Hard",events:318,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:210.833,paritySummary:{errors:59,warns:67,resets:0}},{njs:16,offset:0,notes:942,bombs:73,obstacles:4,nps:4.468,length:379.5,characteristic:"Standard",difficulty:"Expert",events:318,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:210.833,paritySummary:{errors:59,warns:69,resets:0}}],downloadURL:"https://cdn.beatsaver.com/29c0a39db6a53375d2359f4a2a492a0ea784d04f.zip",coverURL:"https://cdn.beatsaver.com/29c0a39db6a53375d2359f4a2a492a0ea784d04f.jpg",previewURL:"https://cdn.beatsaver.com/29c0a39db6a53375d2359f4a2a492a0ea784d04f.mp3"}],createdAt:"2019-08-20T03:22:59.663Z",updatedAt:"2019-08-20T03:22:59.663Z",lastPublishedAt:"2019-08-20T03:22:59.663Z"},{id:"29f8",name:"Camila Cabello - Havana (Remapped)",description:"Update: Added Hard Difficulty :)\r\n\r\nI know there's a map for Havana already, but I decided to make another version of it.\r\nPlaythrough:\r\nhttps://www.youtube.com/watch?v=d7KNm2BzcqA\r\n\r\nEnjoy!\r\n\r\n- ORYGINAL (aka guachitonico)",uploader:{id:45130,name:"guachitonico",uniqueSet:!0,hash:"5cff0b7698cc5a672c854035",avatar:"https://www.gravatar.com/avatar/5cff0b7698cc5a672c854035?d=retro",type:"SIMPLE"},metadata:{bpm:105,duration:220,songName:"Havana",songSubName:"Camila Cabello",songAuthorName:"Remapped by ORYGINAL",levelAuthorName:"guachitonico"},stats:{plays:0,downloads:2862,upvotes:1259,downvotes:41,score:.9144},uploaded:"2019-01-01T22:14:06Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"5d8e56195df0a9735b4c6db2884d3ee6a2f5acef",key:"29f8",state:"Published",createdAt:"2019-01-01T22:14:06Z",sageScore:6,diffs:[{njs:10,offset:0,notes:489,bombs:0,obstacles:9,nps:2.325,length:368,characteristic:"Standard",difficulty:"Hard",events:1019,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:210.286,paritySummary:{errors:68,warns:18,resets:0}},{njs:12,offset:0,notes:777,bombs:0,obstacles:9,nps:3.695,length:368,characteristic:"Standard",difficulty:"Expert",events:1019,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:210.286,paritySummary:{errors:45,warns:16,resets:0}}],downloadURL:"https://cdn.beatsaver.com/5d8e56195df0a9735b4c6db2884d3ee6a2f5acef.zip",coverURL:"https://cdn.beatsaver.com/5d8e56195df0a9735b4c6db2884d3ee6a2f5acef.jpg",previewURL:"https://cdn.beatsaver.com/5d8e56195df0a9735b4c6db2884d3ee6a2f5acef.mp3"}],createdAt:"2019-01-01T22:14:06Z",updatedAt:"2019-01-01T22:14:06Z",lastPublishedAt:"2019-01-01T22:14:06Z"},{id:"22bf",name:"Hold Me Down - Halsey",description:"YouTube Playthrough: https://www.youtube.com/channel/UCeG7cXNLr6dKSYBKqoUvcbQ\r\nDifficulties: Expert+, Expert, Hard, Normal, Easy\r\nNote Jump Speeds From E+ to Easy: 15, 13, 11, 10, 10\r\nLighting & Events: Yes\r\nBPM: 146",uploader:{id:30754,name:"styngme",uniqueSet:!1,hash:"5cff0b7298cc5a672c84e9cd",avatar:"https://www.gravatar.com/avatar/5cff0b7298cc5a672c84e9cd?d=retro",type:"SIMPLE"},metadata:{bpm:146,duration:208,songName:"Hold Me Down",songSubName:"Halsey",songAuthorName:"StyngMe",levelAuthorName:"styngme"},stats:{plays:0,downloads:4092,upvotes:1204,downvotes:38,score:.9144},uploaded:"2018-11-29T03:58:10Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"a6cced35a0ac357cc16d5e4328be59e52339a157",key:"22bf",state:"Published",createdAt:"2018-11-29T03:58:10Z",sageScore:7,diffs:[{njs:10,offset:0,notes:483,bombs:0,obstacles:59,nps:2.449,length:480,characteristic:"Standard",difficulty:"Easy",events:1826,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:197.26,paritySummary:{errors:19,warns:15,resets:0}},{njs:10,offset:0,notes:588,bombs:0,obstacles:62,nps:2.981,length:480,characteristic:"Standard",difficulty:"Normal",events:1826,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:197.26,paritySummary:{errors:40,warns:36,resets:0}},{njs:11,offset:0,notes:674,bombs:0,obstacles:65,nps:3.417,length:480,characteristic:"Standard",difficulty:"Hard",events:1826,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:197.26,paritySummary:{errors:46,warns:53,resets:0}},{njs:13,offset:0,notes:697,bombs:0,obstacles:97,nps:3.533,length:480,characteristic:"Standard",difficulty:"Expert",events:1826,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:197.26,paritySummary:{errors:53,warns:80,resets:0}},{njs:15,offset:0,notes:814,bombs:0,obstacles:114,nps:4.127,length:480,characteristic:"Standard",difficulty:"ExpertPlus",events:1826,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:197.26,paritySummary:{errors:50,warns:75,resets:0}}],downloadURL:"https://cdn.beatsaver.com/a6cced35a0ac357cc16d5e4328be59e52339a157.zip",coverURL:"https://cdn.beatsaver.com/a6cced35a0ac357cc16d5e4328be59e52339a157.jpg",previewURL:"https://cdn.beatsaver.com/a6cced35a0ac357cc16d5e4328be59e52339a157.mp3"}],createdAt:"2018-11-29T03:58:10Z",updatedAt:"2018-11-29T03:58:10Z",lastPublishedAt:"2018-11-29T03:58:10Z"},{id:"198ba",name:"Hades - The Unseen Ones",description:'One of the many great game OSTs from the game Hades !\nThis time however.......we are talking rock and roll, the epic guitars by Masahiro Aoki and Daisuke Kurosawa directed by Darren Korb !\nSome of you that played the game may not of heard of this OST.....you will need to keep on playing to encounter it !\n\nWARNING : THE DESCRIPTION MAY CONTAIN SPOILERS, PLEASE TAKE NOTE !\n. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . \nIf you wish to take a lore dive with the OST based on my understanding of the story the characters POV, keep reading :D !\n...................................................................................................................................\nNarrator : Prince Zagreus, son of Hades - God of the Dead and ruler of the Underworld, has embarked on a mission to escape the Underworld to the surface.\nWhat started as a personal affair with his father and a personal will to breath fresh air from the surface turned into a dedicated mission as he discovered that his very own mother was alive and living on the surface !\nAfter the first initial escape in which Zagreus met up with her, he suddenly started to understand many circles in his life that were still very much opened thus far.\n\nUnfortunately.......each time Zagreus manages to escape and meet his mother for a chat, the Styx grant him only but a moment to exchange a few words with his mother on her cabin before he gets engulfed and taken aback to the underworld.\n\nDetermined to keep visiting his mother despite the ordeal and in order to understand why she was missing from his life, he keeps on going.\n\nHades, being unpleased by his sons rampage, decides to punish him by a "Pact of Punisment" in which Zagreus will need to sign in order to grow stronger on his expedition.\n\nOnce came a time where Zagreus pact option became increasingly intense that he had to resort to..... other punishment options that he did not know the consequences of.....\nMeanwhile, Zagreus is preparing for yet another escape attempt.\n\nZagreus : "Hmm.....which pact should I choose this time.......what\'s this? Extreme Measures?"\nNarrator : reading through the pact, Zagreus understood it meant that each underworld boss will be significantly stronger with new weapons at thier disposal.........including the last one that so happens to be his very own father !\nZagreus : "How hard can it be? let\'s go ! "\n\nNarrator: And thus Zagreus began yet another escape attempt, with the thought of the pact in his mind......\n\n.......Time goes by..............\n\nAfter fighting the Fury sisters, vanquishing the Hydra, beating Theseus and Asterius and braving through the Satyr tunnels, he finally arrives to his final showdown.....\nOpening the gates to the surface, Zagreus Green and Red eyes spot a figure in Golden-Red armor, this figure was also the final obstacle to his mothers cabin....\n\nThus the two begin a dialog :\nZagrues : "Think you can beat me this time, Father?"\nHades : "I was reviewing the terms of the Pact of Punishment to which you are bound.\nEven when my servants resort to extreme measures, they were still unable to surpass you then.\nSo now.....it is my turn !"\nZagrues : "Caught you unprepared, did I? After Theseus and his Macedonian, I half-expected to see you thundering around by some golden chariot of your own, drawn by sable steeds, that sort of thing\nBut......it\'s just you....."\nHades : "It is just me indeed.\nHowever...that should be more than necassary here.\nNo holding back this time Zagrues, are you ready?"\nZagrues : "Let\'s go !!" \n\nThus the two begin yet another brawl of darkness and blood.\nAfter exchanging countless blows, Zagrues manages to down his father twice but not before suffering a few himself, as Hades falls for the second time, Zagrues expects him to vanish back to the underwrold as would normally happen, however.......\n\nHades : " Urgh....no.......I am not......finished......with you........yet!!!"\nNarrator : and thus to Zagrues complete surprise, his father once again regains his balance and is fired with a fighting spirit he has never yet seen.\nHades : "I can still fight !!"\nZagrues : "Are you serious?!"\n\nHades : "DARKNESS !"\nNarrator : Hades vanishes once more and engulfes the entire region in darkness, which hinders Zagrues abillity to see and regains his whereabouts..........\nJust then, Zagrues remembered that he carried his father\'s keepsake sigil, one which allowed him to use his father\'s powers himself !\nZagrues : "Two can play at that game.........DARKNESS ! "\n\nAnd thus, both Hades and Zagrues vanished from the view of the naked eye, off to the final and decisive showdown of Blood and Darkness..........such is the familly......of The Unseen Ones.\n . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .\nAt long last I am happy to present you all one of the most pumping OSTs from the Hades soundtrack !\nTo make it more convenient, this map includes two mods to spice up the things !\nIn standard mode, you will be playing from Zagrues POV !\nHelp him beat and survive his fathers endless blows so he might see his mother once more !\nOr.....if you wish to take a different approach.\nIn One Saber mode you will infuse you sword with the power of darkness and take on the POV of no less than Hades himself !\nShow your son you can still best him in combat !\n.........................................................................................................................................\nMany thanks to monster, steg universe, Kaltern and the BSMG for providing the much needed feedback which helped forge this map and help get it to where it is now ! :)\n\nHope you enjoy ! :)\n\nMap preview by Javierattor - https://www.youtube.com/watch?v=namzq2MNvJ4\n',uploader:{id:4285616,name:"sp234",uniqueSet:!0,hash:"5f352ca7530c8e00061b14fe",avatar:"https://cdn.beatsaver.com/avatar/215418254980677643.png",type:"DISCORD"},metadata:{bpm:118,duration:248,songName:"Hades - The Unseen Ones",songSubName:"Game OST",songAuthorName:"Darren Korb",levelAuthorName:"Sp234"},stats:{plays:0,downloads:6435,upvotes:637,downvotes:11,score:.9143},uploaded:"2021-06-25T08:04:00.236Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"d93d094ae17f25dedaee7796f7ca9fc078dc5060",key:"198ba",state:"Published",createdAt:"2021-06-25T08:04:00.236Z",sageScore:5,diffs:[{njs:10,offset:.6,notes:554,bombs:0,obstacles:65,nps:2.269,length:480.25,characteristic:"Standard",difficulty:"Normal",events:5589,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:244.195,paritySummary:{errors:4,warns:0,resets:0}},{njs:13,offset:-.1,notes:812,bombs:4,obstacles:135,nps:3.325,length:480.25,characteristic:"Standard",difficulty:"Hard",events:5589,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:244.195,paritySummary:{errors:0,warns:0,resets:0}},{njs:16,offset:-.55,notes:1238,bombs:0,obstacles:160,nps:5.069,length:480.292,characteristic:"Standard",difficulty:"Expert",events:5591,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:244.216,paritySummary:{errors:0,warns:0,resets:0}},{njs:16,offset:-.55,notes:878,bombs:0,obstacles:113,nps:3.595,length:480.333,characteristic:"OneSaber",difficulty:"Expert",events:5589,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:244.237,paritySummary:{errors:0,warns:0,resets:0}}],downloadURL:"https://cdn.beatsaver.com/d93d094ae17f25dedaee7796f7ca9fc078dc5060.zip",coverURL:"https://cdn.beatsaver.com/d93d094ae17f25dedaee7796f7ca9fc078dc5060.jpg",previewURL:"https://cdn.beatsaver.com/d93d094ae17f25dedaee7796f7ca9fc078dc5060.mp3"}],createdAt:"2021-06-25T08:04:00.236Z",updatedAt:"2021-06-25T08:04:00.236Z",lastPublishedAt:"2021-06-25T08:04:00.236Z"},{id:"9725",name:"Dua Lipa - Break My Heart",description:"Dua Lipa - Break My Heart\nThis is my second Dua Lipa map and it was super fun to make and test! I hope you enjoy it. \nSpecial thanks to Treetrain1YT for testing this many times on both Steam and Quest.\n\nNormal - 2.09 NPS, 470 Notes, 10 NJS\nHard - 2.92 NPS, 655 Notes, 12 NJS\nExpert - 3.63 NPS, 814 Notes, 16 NJS",uploader:{id:4285261,name:"yomama",uniqueSet:!0,hash:"5e23f0a1054bbd0007bc1ed4",avatar:"https://cdn.beatsaver.com/avatar/153595294792155137.png",type:"DISCORD"},metadata:{bpm:113,duration:223,songName:"Break My Heart",songSubName:"",songAuthorName:"Dua Lipa",levelAuthorName:"yomama"},stats:{plays:0,downloads:2890,upvotes:942,downvotes:25,score:.9143},uploaded:"2020-04-04T03:17:06.970Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"e97457ce049dbd486326861e16125fac4bb24800",key:"9725",state:"Published",createdAt:"2020-04-04T03:17:06.970Z",sageScore:4,diffs:[{njs:10,offset:0,notes:470,bombs:0,obstacles:86,nps:2.15,length:411.75,characteristic:"Standard",difficulty:"Normal",events:872,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:218.628,paritySummary:{errors:31,warns:25,resets:0}},{njs:12,offset:0,notes:655,bombs:0,obstacles:96,nps:2.998,length:411.5,characteristic:"Standard",difficulty:"Hard",events:1619,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:218.496,paritySummary:{errors:76,warns:34,resets:0}},{njs:16,offset:.25,notes:814,bombs:0,obstacles:89,nps:3.725,length:411.5,characteristic:"Standard",difficulty:"Expert",events:2719,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:218.496,paritySummary:{errors:91,warns:58,resets:0}}],downloadURL:"https://cdn.beatsaver.com/e97457ce049dbd486326861e16125fac4bb24800.zip",coverURL:"https://cdn.beatsaver.com/e97457ce049dbd486326861e16125fac4bb24800.jpg",previewURL:"https://cdn.beatsaver.com/e97457ce049dbd486326861e16125fac4bb24800.mp3"}],createdAt:"2020-04-04T03:17:06.970Z",updatedAt:"2020-04-04T03:17:06.970Z",lastPublishedAt:"2020-04-04T03:17:06.970Z"},{id:"3342",name:"No More Sorrow - Linkin Park",description:"133 BPM / 3:42 Runtime\r\nEasy / 288 Notes\r\nNormal / 394 Notes\r\nHard / 549 Notes\r\nExpert / 799 Notes\r\nExpert+ / 1032 Notes\r\n\r\nI was watching early Beat Saber gameplay and noticed how the player frequently put their sabers in the walls. It gave me an idea for the Expert+ map.\r\n\r\nGameplay: https://youtu.be/Wkng-fpz78w",uploader:{id:4284981,name:"skylerwallace",uniqueSet:!0,hash:"5cff0b7298cc5a672c84ea67",avatar:"https://cdn.beatsaver.com/avatar/398344856868487168.png",type:"DISCORD"},metadata:{bpm:133,duration:222,songName:"No More Sorrow",songSubName:"Linkin Park",songAuthorName:"Skyler Wallace",levelAuthorName:"skylerwallace"},stats:{plays:0,downloads:2978,upvotes:1002,downvotes:28,score:.9143},uploaded:"2019-02-03T07:55:09Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"e80f867f37808cd7cf1450327a4b445d2d0d8f02",key:"3342",state:"Published",createdAt:"2019-02-03T07:55:09Z",sageScore:8,diffs:[{njs:10,offset:1,notes:288,bombs:7,obstacles:7,nps:1.321,length:482,characteristic:"Standard",difficulty:"Easy",events:5629,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:217.444,paritySummary:{errors:117,warns:6,resets:5}},{njs:10,offset:1,notes:394,bombs:5,obstacles:10,nps:1.807,length:482,characteristic:"Standard",difficulty:"Normal",events:5628,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:217.444,paritySummary:{errors:88,warns:17,resets:0}},{njs:10,offset:1,notes:549,bombs:4,obstacles:11,nps:2.518,length:482,characteristic:"Standard",difficulty:"Hard",events:5629,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:217.444,paritySummary:{errors:41,warns:20,resets:4}},{njs:12,offset:1,notes:799,bombs:4,obstacles:17,nps:3.664,length:482,characteristic:"Standard",difficulty:"Expert",events:5629,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:217.444,paritySummary:{errors:33,warns:35,resets:0}},{njs:14,offset:0,notes:1032,bombs:31,obstacles:73,nps:4.733,length:482,characteristic:"Standard",difficulty:"ExpertPlus",events:5629,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:217.444,paritySummary:{errors:45,warns:66,resets:10}}],downloadURL:"https://cdn.beatsaver.com/e80f867f37808cd7cf1450327a4b445d2d0d8f02.zip",coverURL:"https://cdn.beatsaver.com/e80f867f37808cd7cf1450327a4b445d2d0d8f02.jpg",previewURL:"https://cdn.beatsaver.com/e80f867f37808cd7cf1450327a4b445d2d0d8f02.mp3"}],createdAt:"2019-02-03T07:55:09Z",updatedAt:"2019-02-03T07:55:09Z",lastPublishedAt:"2019-02-03T07:55:09Z"},{id:"10674",name:"Spooky Scary Skeletons (Kasger DnB Remix)",description:"A nice Drum and Bass remix on theme with Halloween.\nYou can follow me on twitch for more awesomeness at https://www.twitch.tv/pkdan\nVideo preview of the map: https://www.youtube.com/watch?v=m3pFxj2jFHs&ab_channel=PKDan\n\nLength: 3:49\nNotes: 789 (Hard) / 1092 (Expert) / 1492 (Expert+)\nNJS: 14 (Hard) / 16 (Expert) / 20 (Expert+)\nBPM: 174",uploader:{id:4284639,name:"pkdan",uniqueSet:!0,hash:"5e6d07927abb00000681e8ee",avatar:"https://cdn.beatsaver.com/avatar/315553265091739650.png",type:"DISCORD"},metadata:{bpm:174,duration:229,songName:"Spooky Scary Skeletons (Kasger Remix)",songSubName:"",songAuthorName:"Andrew Gold",levelAuthorName:"pkdan"},stats:{plays:0,downloads:4006,upvotes:682,downvotes:13,score:.9142},uploaded:"2020-10-30T19:19:27.266Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"20341d92a0871dfdf2f8d39633274fdaa67a70ed",key:"10674",state:"Published",createdAt:"2020-10-30T19:19:27.266Z",sageScore:5,diffs:[{njs:14,offset:.3,notes:789,bombs:0,obstacles:2,nps:3.575,length:640,characteristic:"Standard",difficulty:"Hard",events:4093,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:220.69,paritySummary:{errors:0,warns:0,resets:0}},{njs:16,offset:0,notes:1092,bombs:0,obstacles:2,nps:4.948,length:640,characteristic:"Standard",difficulty:"Expert",events:4093,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:220.69,paritySummary:{errors:0,warns:0,resets:0}},{njs:20,offset:-.3,notes:1492,bombs:0,obstacles:2,nps:6.761,length:640,characteristic:"Standard",difficulty:"ExpertPlus",events:4093,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:220.69,paritySummary:{errors:0,warns:0,resets:0}}],downloadURL:"https://cdn.beatsaver.com/20341d92a0871dfdf2f8d39633274fdaa67a70ed.zip",coverURL:"https://cdn.beatsaver.com/20341d92a0871dfdf2f8d39633274fdaa67a70ed.jpg",previewURL:"https://cdn.beatsaver.com/20341d92a0871dfdf2f8d39633274fdaa67a70ed.mp3"}],createdAt:"2020-10-30T19:19:27.266Z",updatedAt:"2020-10-30T19:19:27.266Z",lastPublishedAt:"2020-10-30T19:19:27.266Z"},{id:"4e81",name:"Katy Perry - Firework",description:"Thank you Joetastic for the lossless file",uploader:{id:4285107,name:"kikaeaeon",uniqueSet:!0,hash:"5cff0b7498cc5a672c85109b",avatar:"https://cdn.beatsaver.com/avatar/103715469822816256.png",type:"DISCORD"},metadata:{bpm:124,duration:229,songName:"Firework",songSubName:"Katy Perry",songAuthorName:"KikaeAeon",levelAuthorName:"kikaeaeon"},stats:{plays:0,downloads:3779,upvotes:1331,downvotes:45,score:.9142},uploaded:"2019-05-22T14:18:50Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"410a4f5ae778f9072b9136f0df5e151156cd81e3",key:"4e81",state:"Published",createdAt:"2019-05-22T14:18:50Z",sageScore:5,diffs:[{njs:10,offset:0,notes:563,bombs:0,obstacles:17,nps:2.51,length:463.5,characteristic:"Standard",difficulty:"Hard",events:682,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:224.274,paritySummary:{errors:33,warns:7,resets:0}},{njs:15,offset:0,notes:927,bombs:0,obstacles:26,nps:4.133,length:463.5,characteristic:"Standard",difficulty:"ExpertPlus",events:988,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:224.274,paritySummary:{errors:25,warns:17,resets:0}}],downloadURL:"https://cdn.beatsaver.com/410a4f5ae778f9072b9136f0df5e151156cd81e3.zip",coverURL:"https://cdn.beatsaver.com/410a4f5ae778f9072b9136f0df5e151156cd81e3.jpg",previewURL:"https://cdn.beatsaver.com/410a4f5ae778f9072b9136f0df5e151156cd81e3.mp3"}],createdAt:"2019-05-22T14:18:50Z",updatedAt:"2019-05-22T14:18:50Z",lastPublishedAt:"2019-05-22T14:18:50Z"},{id:"1622c",name:"Gurenge (TV Size) [Demon Slayer: Kimetsu no Yaiba Opening] - LiSA",description:"",uploader:{id:58338,name:"Joetastic",uniqueSet:!0,hash:"5cff0b7498cc5a672c85050e",avatar:"https://cdn.beatsaver.com/avatar/227767566402191360.png",type:"DISCORD"},metadata:{bpm:135,duration:90,songName:"Gurenge (TV Size)",songSubName:"",songAuthorName:"LiSA",levelAuthorName:"Joetastic"},stats:{plays:0,downloads:16462,upvotes:896,downvotes:23,score:.9141},uploaded:"2021-04-01T08:54:27.557Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"62a63aa11f61623fdd69411bf73ab1082d4558d6",key:"1622c",state:"Published",createdAt:"2021-04-01T08:54:27.557Z",sageScore:5,diffs:[{njs:13,offset:0,notes:294,bombs:0,obstacles:10,nps:3.375,length:196,characteristic:"Standard",difficulty:"Hard",events:12271,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:87.111,paritySummary:{errors:0,warns:0,resets:0}},{njs:15,offset:-.2,notes:399,bombs:0,obstacles:10,nps:4.58,length:196,characteristic:"Standard",difficulty:"Expert",events:12271,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:87.111,paritySummary:{errors:2,warns:2,resets:0}},{njs:18,offset:-.5,notes:482,bombs:0,obstacles:18,nps:5.533,length:196,characteristic:"Standard",difficulty:"ExpertPlus",events:12268,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:87.111,paritySummary:{errors:3,warns:5,resets:0}}],downloadURL:"https://cdn.beatsaver.com/62a63aa11f61623fdd69411bf73ab1082d4558d6.zip",coverURL:"https://cdn.beatsaver.com/62a63aa11f61623fdd69411bf73ab1082d4558d6.jpg",previewURL:"https://cdn.beatsaver.com/62a63aa11f61623fdd69411bf73ab1082d4558d6.mp3"}],createdAt:"2021-04-01T08:54:27.557Z",updatedAt:"2021-04-01T08:54:27.557Z",lastPublishedAt:"2021-04-01T08:54:27.557Z"},{id:"6888",name:"The Glory Days - Tia",description:"Expert and Hard diff companion to https://beatsaver.com/beatmap/56d0\nKikis lights, diffs by me. Modded by Fraies and Redmagi.",uploader:{id:4284577,name:"uninstaller",uniqueSet:!0,hash:"5cff0b7598cc5a672c85248e",avatar:"https://cdn.beatsaver.com/avatar/84840552935194624.png",type:"DISCORD"},metadata:{bpm:184,duration:254,songName:"The Glory Days",songSubName:"",songAuthorName:"Tia",levelAuthorName:"Kikis & Uninstaller"},stats:{plays:0,downloads:2754,upvotes:1511,downvotes:55,score:.9141},uploaded:"2019-10-08T01:17:01.471Z",automapper:!1,ranked:!0,qualified:!1,versions:[{hash:"a6ccabb105d0f2c24fe9f1dd6e4445782bc55616",key:"6888",state:"Published",createdAt:"2019-10-08T01:17:01.471Z",sageScore:6,diffs:[{njs:13,offset:0,notes:781,bombs:30,obstacles:11,nps:3.243,length:738.5,characteristic:"Standard",difficulty:"Hard",events:3865,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:240.815,paritySummary:{errors:1,warns:1,resets:1},stars:2.04},{njs:15,offset:0,notes:1177,bombs:32,obstacles:11,nps:4.888,length:738.5,characteristic:"Standard",difficulty:"Expert",events:3865,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:240.815,paritySummary:{errors:0,warns:0,resets:3},stars:3.31}],downloadURL:"https://cdn.beatsaver.com/a6ccabb105d0f2c24fe9f1dd6e4445782bc55616.zip",coverURL:"https://cdn.beatsaver.com/a6ccabb105d0f2c24fe9f1dd6e4445782bc55616.jpg",previewURL:"https://cdn.beatsaver.com/a6ccabb105d0f2c24fe9f1dd6e4445782bc55616.mp3"}],createdAt:"2019-10-08T01:17:01.471Z",updatedAt:"2019-10-08T01:17:01.471Z",lastPublishedAt:"2019-10-08T01:17:01.471Z"},{id:"5c92",name:"Caravan Palace - Lone Digger",description:"\nBPM: 124 | 3 Difficulties (Expert+, Expert, Hard) | Lighting done by me\n---------------------------------------------------------------------------------------------\n[Expert+]\nNJS: 19\nNotes: 1255\n---------------------------------------------------------------------------------------------\n[Expert]\nNotes: 986\nNJS: 18\n---------------------------------------------------------------------------------------------\n[Hard]\nNotes: 652\nNJS: 17\n---------------------------------------------------------------------------------------------\n\nMy Discord if you want to give feedback or just talk to me: Yun0#1355",uploader:{id:18845,name:"yun0",uniqueSet:!0,hash:"5cff0b7398cc5a672c84f6ca",avatar:"https://cdn.beatsaver.com/avatar/18845.jpg",type:"SIMPLE"},metadata:{bpm:124,duration:231,songName:"Lone Digger",songSubName:"",songAuthorName:"Caravan Palace",levelAuthorName:"Yun0"},stats:{plays:0,downloads:2362,upvotes:1174,downvotes:37,score:.9141},uploaded:"2019-08-13T03:30:08.712Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"928da96d4e5fcfeb87ac1cc6fcf6287b2f4c5e2d",key:"5c92",state:"Published",createdAt:"2019-08-13T03:30:08.712Z",sageScore:6,diffs:[{njs:17,offset:0,notes:652,bombs:0,obstacles:4,nps:2.932,length:459.5,characteristic:"Standard",difficulty:"Hard",events:3826,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:222.339,paritySummary:{errors:0,warns:0,resets:0}},{njs:18,offset:-.25,notes:986,bombs:0,obstacles:6,nps:4.435,length:459.5,characteristic:"Standard",difficulty:"Expert",events:3826,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:222.339,paritySummary:{errors:3,warns:0,resets:0}},{njs:19,offset:.3,notes:1255,bombs:4,obstacles:49,nps:5.596,length:463.5,characteristic:"Standard",difficulty:"ExpertPlus",events:3826,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:224.274,paritySummary:{errors:9,warns:6,resets:2}}],downloadURL:"https://cdn.beatsaver.com/928da96d4e5fcfeb87ac1cc6fcf6287b2f4c5e2d.zip",coverURL:"https://cdn.beatsaver.com/928da96d4e5fcfeb87ac1cc6fcf6287b2f4c5e2d.jpg",previewURL:"https://cdn.beatsaver.com/928da96d4e5fcfeb87ac1cc6fcf6287b2f4c5e2d.mp3"}],createdAt:"2019-08-13T03:30:08.712Z",updatedAt:"2019-08-13T03:30:08.712Z",lastPublishedAt:"2019-08-13T03:30:08.712Z"},{id:"1bc4",name:"Without Me (Nurko & Miles Away Remix) - Halsey",description:"Difficulties: Expert+ Only",uploader:{id:30311,name:"bennydabeast",uniqueSet:!0,hash:"5cff0b7298cc5a672c84e98d",avatar:"https://cdn.beatsaver.com/avatar/30311.jpg",type:"SIMPLE"},metadata:{bpm:140,duration:257,songName:"Without Me (Nurko & Miles Away Remix)",songSubName:"Halsey",songAuthorName:"BennyDaBeast",levelAuthorName:"bennydabeast"},stats:{plays:0,downloads:1240,upvotes:681,downvotes:13,score:.9141},uploaded:"2018-10-23T03:10:41Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"e447ac77708869ac151546110aecda97acac2cab",key:"1bc4",state:"Published",createdAt:"2018-10-23T03:10:41Z",sageScore:5,diffs:[{njs:15,offset:0,notes:1206,bombs:0,obstacles:1,nps:4.885,length:576,characteristic:"Standard",difficulty:"ExpertPlus",events:1646,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:246.857,paritySummary:{errors:102,warns:151,resets:0}}],downloadURL:"https://cdn.beatsaver.com/e447ac77708869ac151546110aecda97acac2cab.zip",coverURL:"https://cdn.beatsaver.com/e447ac77708869ac151546110aecda97acac2cab.jpg",previewURL:"https://cdn.beatsaver.com/e447ac77708869ac151546110aecda97acac2cab.mp3"}],createdAt:"2018-10-23T03:10:41Z",updatedAt:"2018-10-23T03:10:41Z",lastPublishedAt:"2018-10-23T03:10:41Z"},{id:"900",name:"Limbo - Daddy Yankee",description:"If you don't at least try to limbo, you didn't really finish the map.",uploader:{id:50121,name:"ayewyn",uniqueSet:!1,hash:"5cff0b7398cc5a672c84f7ef",avatar:"https://www.gravatar.com/avatar/5cff0b7398cc5a672c84f7ef?d=retro",type:"SIMPLE"},metadata:{bpm:125,duration:225,songName:"Limbo",songSubName:"Daddy Yankee",songAuthorName:"Ayewyn",levelAuthorName:"ayewyn"},stats:{plays:0,downloads:6900,upvotes:2388,downvotes:106,score:.9141},uploaded:"2018-07-12T13:34:01Z",automapper:!1,ranked:!0,qualified:!1,versions:[{hash:"2738e2374b821b6aa9839f128a70caae8333cb1c",key:"900",state:"Published",createdAt:"2018-07-12T13:34:01Z",sageScore:5,diffs:[{njs:10,offset:0,notes:232,bombs:0,obstacles:24,nps:1.073,length:450.5,characteristic:"Standard",difficulty:"Easy",events:853,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:216.24,paritySummary:{errors:33,warns:76,resets:0},stars:.95},{njs:10,offset:0,notes:464,bombs:0,obstacles:12,nps:2.146,length:450.5,characteristic:"Standard",difficulty:"Normal",events:853,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:216.24,paritySummary:{errors:35,warns:141,resets:0}},{njs:10,offset:0,notes:637,bombs:0,obstacles:12,nps:2.943,length:451,characteristic:"Standard",difficulty:"Hard",events:853,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:216.48,paritySummary:{errors:34,warns:190,resets:0}},{njs:10,offset:0,notes:689,bombs:0,obstacles:12,nps:3.181,length:451.25,characteristic:"Standard",difficulty:"Expert",events:853,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:216.6,paritySummary:{errors:44,warns:187,resets:0}}],downloadURL:"https://cdn.beatsaver.com/2738e2374b821b6aa9839f128a70caae8333cb1c.zip",coverURL:"https://cdn.beatsaver.com/2738e2374b821b6aa9839f128a70caae8333cb1c.jpg",previewURL:"https://cdn.beatsaver.com/2738e2374b821b6aa9839f128a70caae8333cb1c.mp3"}],createdAt:"2018-07-12T13:34:01Z",updatedAt:"2018-07-12T13:34:01Z",lastPublishedAt:"2018-07-12T13:34:01Z"}]},function(e,t,a){if(AFRAME.registerComponent("song-info-positioner",{schema:{victory:{default:!1}},update:function(){this.data.victory?this.el.object3D.position.y=-1.2:this.el.object3D.position.y=-1}}),window.AFRAME){const t=["song-info-positioner"],a=[],s=[];if(e.hot.dispose(e=>{e.needsReplace=!0,t.forEach(e=>{delete AFRAME.components[e];const t=AFRAME.scenes[0].querySelectorAll(`[${e}]`);for(let a=0;a{delete AFRAME.shaders[e];const t=AFRAME.scenes[0].querySelectorAll("[material]");for(let a=0;a{delete AFRAME.systems[e],delete AFRAME.scenes[0].systems[e]})}),e.hot.data&&e.hot.data.needsReplace){t.forEach(e=>{const t="data-__hot-"+e,a=document.querySelectorAll(`[${t}]`);for(let s=0;s{e.needsReplace=!0,t.forEach(e=>{delete AFRAME.components[e];const t=AFRAME.scenes[0].querySelectorAll(`[${e}]`);for(let a=0;a{delete AFRAME.shaders[e];const t=AFRAME.scenes[0].querySelectorAll("[material]");for(let a=0;a{delete AFRAME.systems[e],delete AFRAME.scenes[0].systems[e]})}),e.hot.data&&e.hot.data.needsReplace){t.forEach(e=>{const t="data-__hot-"+e,a=document.querySelectorAll(`[${t}]`);for(let s=0;s{this.progress.scale.x=1e-4})},update:function(e){this.progress.scale.x=1e-4},updateInfo:function(){const e=this.el.sceneEl.components.song.source;if(!e||!e.buffer)return;const t=this.el.sceneEl.components.song.getCurrentTime()/e.buffer.duration;t&&(this.progress.scale.x=t)},tick:function(){this.data.enabled&&this.updateInfo()}}),window.AFRAME){const t=["song-progress-info"],a=[],s=[];if(e.hot.dispose(e=>{e.needsReplace=!0,t.forEach(e=>{delete AFRAME.components[e];const t=AFRAME.scenes[0].querySelectorAll(`[${e}]`);for(let a=0;a{delete AFRAME.shaders[e];const t=AFRAME.scenes[0].querySelectorAll("[material]");for(let a=0;a{delete AFRAME.systems[e],delete AFRAME.scenes[0].systems[e]})}),e.hot.data&&e.hot.data.needsReplace){t.forEach(e=>{const t="data-__hot-"+e,a=document.querySelectorAll(`[${t}]`);for(let s=0;s{this.audioAnalyser.resumeContext();const t=this.audioAnalyser.gainNode.gain;t.cancelScheduledValues(0),t.setValueAtTime(.05,0),this.source=e.detail,this.source.start(),this.el.emit("victory")},s),void this.audioAnalyser.refreshSource();!e.isBeatsPreloaded&&this.data.isBeatsPreloaded&&this.source&&this.startAudio(),!e.challengeId||t.challengeId?(e.isPlaying&&!t.isPlaying&&(this.audioAnalyser.suspendContext(),this.isAudioPlaying=!1),!e.isPlaying&&t.isPlaying&&this.source&&(this.audioAnalyser.resumeContext(),this.isAudioPlaying=!0)):this.stopAudio()}else this.onGameOver()},processAudio:function(){this.el.sceneEl.emit("songprocessstart",null,!1),this.getAudio().then(e=>{this.el.sceneEl.emit("songprocessfinish",null,!1)}).catch(console.error)},getAudio:function(){const e=this.data;return this.source&&this.stopAudio(),this.isAudioPlaying=!1,new Promise(t=>{e.analyserEl.addEventListener("audioanalyserbuffersource",e=>{this.source=e.detail,t(this.source)},s),this.analyserSetter.src=this.data.audio,e.analyserEl.setAttribute("audioanalyser",this.analyserSetter)})},stopAudio:function(){this.source?(this.source.onended=null,this.isAudioPlaying&&this.source.stop(),this.source.disconnect(),this.source=null,this.isAudioPlaying=!1):console.warn("[song] Tried to stopAudio, but not playing.")},onSongComplete:function(){this.data.isPlaying&&this.el.emit("songcomplete")},onGameOver:function(){this.isAudioPlaying=!1;const e=this.source.playbackRate;e.setValueAtTime(e.value,this.context.currentTime),e.linearRampToValueAtTime(0,this.context.currentTime+3.5);const t=this.audioAnalyser.gainNode.gain;t.setValueAtTime(t.value,this.context.currentTime),t.linearRampToValueAtTime(0,this.context.currentTime+3.5),setTimeout(()=>{this.data.isGameOver&&this.stopAudio()},3500)},onRestart:function(){this.isAudioPlaying=!1,this.source&&this.source.disconnect();this.audioAnalyser.gainNode.gain.cancelScheduledValues(0),this.data.analyserEl.addEventListener("audioanalyserbuffersource",e=>{this.source=e.detail,this.el.sceneEl.emit("songloadfinish",null,!1)},s),this.audioAnalyser.refreshSource()},onWallHitStart:function(){this.audioAnalyser.gainNode.gain.linearRampToValueAtTime(.1,this.context.currentTime+.1)},onWallHitEnd:function(){this.audioAnalyser.gainNode.gain.linearRampToValueAtTime(.5,this.context.currentTime+.1)},startAudio:function(){this.audioAnalyser.gainNode.gain.setValueAtTime(.5,this.context.currentTime),this.songStartTime=this.context.currentTime,this.source.onended=this.onSongComplete,this.source.start(0,n||0),this.isAudioPlaying=!0},getCurrentTime:function(){return this.context.currentTime-this.songStartTime}}),window.AFRAME){const t=["song"],a=[],s=[];if(e.hot.dispose(e=>{e.needsReplace=!0,t.forEach(e=>{delete AFRAME.components[e];const t=AFRAME.scenes[0].querySelectorAll(`[${e}]`);for(let a=0;a{delete AFRAME.shaders[e];const t=AFRAME.scenes[0].querySelectorAll("[material]");for(let a=0;a{delete AFRAME.systems[e],delete AFRAME.scenes[0].systems[e]})}),e.hot.data&&e.hot.data.needsReplace){t.forEach(e=>{const t="data-__hot-"+e,a=document.querySelectorAll(`[${t}]`);for(let s=0;s{e.needsReplace=!0,t.forEach(e=>{delete AFRAME.components[e];const t=AFRAME.scenes[0].querySelectorAll(`[${e}]`);for(let a=0;a{delete AFRAME.shaders[e];const t=AFRAME.scenes[0].querySelectorAll("[material]");for(let a=0;a{delete AFRAME.systems[e],delete AFRAME.scenes[0].systems[e]})}),e.hot.data&&e.hot.data.needsReplace){t.forEach(e=>{const t="data-__hot-"+e,a=document.querySelectorAll(`[${t}]`);for(let s=0;s{e.needsReplace=!0,t.forEach(e=>{delete AFRAME.components[e];const t=AFRAME.scenes[0].querySelectorAll(`[${e}]`);for(let a=0;a{delete AFRAME.shaders[e];const t=AFRAME.scenes[0].querySelectorAll("[material]");for(let a=0;a{delete AFRAME.systems[e],delete AFRAME.scenes[0].systems[e]})}),e.hot.data&&e.hot.data.needsReplace){t.forEach(e=>{const t="data-__hot-"+e,a=document.querySelectorAll(`[${t}]`);for(let s=0;s(Math.random()-.5)*this.data.radius*2,t=new THREE.BufferGeometry;this.material=this.el.sceneEl.systems.materials.stars;const a=[];for(let t=0;t{e.needsReplace=!0,t.forEach(e=>{delete AFRAME.components[e];const t=AFRAME.scenes[0].querySelectorAll(`[${e}]`);for(let a=0;a{delete AFRAME.shaders[e];const t=AFRAME.scenes[0].querySelectorAll("[material]");for(let a=0;a{delete AFRAME.systems[e],delete AFRAME.scenes[0].systems[e]})}),e.hot.data&&e.hot.data.needsReplace){t.forEach(e=>{const t="data-__hot-"+e,a=document.querySelectorAll(`[${t}]`);for(let s=0;s{e.needsReplace=!0,t.forEach(e=>{delete AFRAME.components[e];const t=AFRAME.scenes[0].querySelectorAll(`[${e}]`);for(let a=0;a{delete AFRAME.shaders[e];const t=AFRAME.scenes[0].querySelectorAll("[material]");for(let a=0;a{delete AFRAME.systems[e],delete AFRAME.scenes[0].systems[e]})}),e.hot.data&&e.hot.data.needsReplace){t.forEach(e=>{const t="data-__hot-"+e,a=document.querySelectorAll(`[${t}]`);for(let s=0;s{e.needsReplace=!0,t.forEach(e=>{delete AFRAME.components[e];const t=AFRAME.scenes[0].querySelectorAll(`[${e}]`);for(let a=0;a{delete AFRAME.shaders[e];const t=AFRAME.scenes[0].querySelectorAll("[material]");for(let a=0;a{delete AFRAME.systems[e],delete AFRAME.scenes[0].systems[e]})}),e.hot.data&&e.hot.data.needsReplace){t.forEach(e=>{const t="data-__hot-"+e,a=document.querySelectorAll(`[${t}]`);for(let s=0;s{const s=a.detail.model.getObjectByName(t.name);e.setObject3D("mesh",s.clone()),e.setAttribute("material","shader","flat"),e.emit("subobjectloaded",null,!1)})}}),window.AFRAME){const t=["sub-object"],a=[],s=[];if(e.hot.dispose(e=>{e.needsReplace=!0,t.forEach(e=>{delete AFRAME.components[e];const t=AFRAME.scenes[0].querySelectorAll(`[${e}]`);for(let a=0;a{delete AFRAME.shaders[e];const t=AFRAME.scenes[0].querySelectorAll("[material]");for(let a=0;a{delete AFRAME.systems[e],delete AFRAME.scenes[0].systems[e]})}),e.hot.data&&e.hot.data.needsReplace){t.forEach(e=>{const t="data-__hot-"+e,a=document.querySelectorAll(`[${t}]`);for(let s=0;so.x&&a.xo.y&&1-a.y [raycaster]"].join(",")),this.hand){if(!this.hand.hasLoaded)return void this.hand.addEventListener("loaded",this.setupHand.bind(this));var e=this.hand.components.raycaster,t={};if(e){if(this.hand.ownRaycaster=!1,this.data.injectToRaycasterObjects){var a=e.data.objects.split(",");-1===a.indexOf(".keyboardRaycastable")&&a.push(".keyboardRaycastable"),t.objects=a.join(",").replace(/^,/,""),this.hand.setAttribute("raycaster",t)}}else this.hand.ownRaycaster=!0,t.showLine=this.data.show,t.enabled=this.data.show,this.data.injectToRaycasterObjects&&(t.objects=".keyboardRaycastable"),this.hand.setAttribute("raycaster",t);this.raycaster=this.hand.components.raycaster}else console.error('super-keyboard: no controller found. Add with controller or specify with super-keyboard="hand: #selectorToController".')},filter:function(e){if(""===e)return"";for(var t=0;t0?e.substr(0,this.data.maxLength):e},click:function(e){if(this.keyHover){switch(this.keyHover.key){case"Enter":this.accept();break;case"Insert":return;case"Delete":this.rawValue=this.rawValue.substr(0,this.rawValue.length-1);var t=this.filter(this.rawValue);this.el.setAttribute("super-keyboard","value",t),this.updateTextInput(t),this.changeEventDetail.value=t,this.el.emit("superkeyboardchange",this.changeEventDetail);break;case"Shift":this.shift=!this.shift,this.keyHover.el.setAttribute("material","color",this.shift?this.data.keyHoverColor:this.data.keyBgColor);break;case"Escape":this.dismiss();break;default:if(this.data.maxLength>0&&this.rawValue.length>this.data.maxLength)break;this.rawValue+=this.shift?this.keyHover.key.toUpperCase():this.keyHover.key;t=this.filter(this.rawValue);this.el.setAttribute("super-keyboard","value",t),this.updateTextInput(t),this.changeEventDetail.value=t,this.el.emit("superkeyboardchange",this.changeEventDetail)}this.updateKeyColorPlane(this.keyHover.key,this.keyPressColor);var a=this;setTimeout((function(){a.updateKeyColorPlane(a.keyHover.key,a.keyHoverColor)}),100),this.updateCursorPosition()}},open:function(){this.el.object3D.visible=!0,this.hand&&this.hand.ownRaycaster&&this.hand.setAttribute("raycaster",{showLine:!0,enabled:!0})},close:function(){this.el.object3D.visible=!1,this.hand&&this.hand.ownRaycaster&&this.hand.setAttribute("raycaster",{showLine:!1,enabled:!1})},accept:function(){this.el.object3D.visible=!1,this.hand&&this.hand.ownRaycaster&&this.hand.setAttribute("raycaster",{showLine:!1,enabled:!1}),this.el.emit("superkeyboardinput",{value:this.data.value}),this.data.show=!1},dismiss:function(){this.data.value=this.defaultValue,this.updateTextInput(),this.el.object3D.visible=!1,this.hand&&this.hand.ownRaycaster&&this.hand.setAttribute("raycaster",{showLine:!1,enabled:!1}),this.el.emit("superkeyboarddismiss"),this.data.show=!1},blur:function(){this.focused=!1,this.keyHover&&"Shift"!==this.keyHover.key&&(this.keyColorPlane.object3D.visible=!1),this.keyHover=null},hover:function(e){this.focused=!0},startBlinking:function(){this.stopBlinking(),this.intervalId=window.setInterval(this.blink.bind(this),this.data.blinkingSpeed)},stopBlinking:function(){window.clearInterval(this.intervalId),this.intervalId=0},blink:function(){this.cursor.object3D.visible=!this.cursor.object3D.visible},setCustomFilter:function(e){this.userFilterFunc=e},addCustomModel:function(e,t){e&&(s[e]=t)},updateCursorPosition:function(){var e=this.textInput.components.text.currentFont;if(!e){var t=this;return this.cursor.object3D.visible=!1,void window.setTimeout((function(){t.updateCursorPosition(),t.startBlinking()}),700)}var a=this.data.width,o=s[this.data.model],i=-this.inputRect.h/2*a/2.4+o.inputOffsetY*a,c=this.data.width/this.textInput.components.text.data.wrapCount,d=0,l=n[this.textInput.components.text.data.font];void 0===l&&(l=20);for(var u=0;u=t)return"..."+e.substring(e.length-t,e.length);return e}(e||this.data.value,12))}}),window.AFRAME){const t=["super-keyboard"],a=[],s=[];if(e.hot.dispose(e=>{e.needsReplace=!0,t.forEach(e=>{delete AFRAME.components[e];const t=AFRAME.scenes[0].querySelectorAll(`[${e}]`);for(let a=0;a{delete AFRAME.shaders[e];const t=AFRAME.scenes[0].querySelectorAll("[material]");for(let a=0;a{delete AFRAME.systems[e],delete AFRAME.scenes[0].systems[e]})}),e.hot.data&&e.hot.data.needsReplace){t.forEach(e=>{const t="data-__hot-"+e,a=document.querySelectorAll(`[${t}]`);for(let s=0;s{e.detail&&"off"!==e.detail?this.setColor("color1",e.detail):this.setColor("color1","primary")}),e.sceneEl.addEventListener("curveoddstageeventcolor",e=>{e.detail&&"off"!==e.detail?this.setColor("color2",e.detail):this.setColor("color2","secondary")})},setColor:function(e,t){const a=this.el.components.material.material.uniforms[e].value,n=this.el.sceneEl.systems.materials.scheme[t];s.set(n),a.x=s.r,a.y=s.g,a.z=s.b}}),window.AFRAME){const t=["supercurve-color"],a=[],s=[];if(e.hot.dispose(e=>{e.needsReplace=!0,t.forEach(e=>{delete AFRAME.components[e];const t=AFRAME.scenes[0].querySelectorAll(`[${e}]`);for(let a=0;a{delete AFRAME.shaders[e];const t=AFRAME.scenes[0].querySelectorAll("[material]");for(let a=0;a{delete AFRAME.systems[e],delete AFRAME.scenes[0].systems[e]})}),e.hot.data&&e.hot.data.needsReplace){t.forEach(e=>{const t="data-__hot-"+e,a=document.querySelectorAll(`[${t}]`);for(let s=0;s{e.needsReplace=!0,t.forEach(e=>{delete AFRAME.components[e];const t=AFRAME.scenes[0].querySelectorAll(`[${e}]`);for(let a=0;a{delete AFRAME.shaders[e];const t=AFRAME.scenes[0].querySelectorAll("[material]");for(let a=0;a{delete AFRAME.systems[e],delete AFRAME.scenes[0].systems[e]})}),e.hot.data&&e.hot.data.needsReplace){t.forEach(e=>{const t="data-__hot-"+e,a=document.querySelectorAll(`[${t}]`);for(let s=0;s=1)return;const s=this.supercurve,n=s.curve;if(!n)return;this.curveProgress=this.curveProgress||0;const r=a.speed*(t/1e3);if(this.curveProgress+=r/this.supercurve.fullLength,this.data.target.components.material.material.uniforms.cameraPercent.value=this.curveProgress,this.curveProgress>=1)return this.curveProgress=1,void(this.data.target.components.material.material.uniforms.cameraPercent.value=this.curveProgress);n.getPointAt(this.curveProgress,this.el.object3D.position),this.songProgress=s.curveProgressToSongProgress(this.curveProgress),s.alignToCurve(this.songProgress,this.el.object3D)}}()}),window.AFRAME){const t=["supercurve","supercurve-follow"],a=[],s=[];if(e.hot.dispose(e=>{e.needsReplace=!0,t.forEach(e=>{delete AFRAME.components[e];const t=AFRAME.scenes[0].querySelectorAll(`[${e}]`);for(let a=0;a{delete AFRAME.shaders[e];const t=AFRAME.scenes[0].querySelectorAll("[material]");for(let a=0;a{delete AFRAME.systems[e],delete AFRAME.scenes[0].systems[e]})}),e.hot.data&&e.hot.data.needsReplace){t.forEach(e=>{const t="data-__hot-"+e,a=document.querySelectorAll(`[${t}]`);for(let s=0;s0)){c=n;break}c=n-1}if(s[n=c]===a)return n/(r-1);var d=s[n];return(n+(a-d)/(s[n+1]-d))/(r-1)},getTangent:(o=new THREE.Vector3,i=new THREE.Vector3,function(e,t){var a,s=e-1e-4,n=e+1e-4;return s<0&&(s=0),n>1&&(n=1),this.getPoint(s,o),this.getPoint(n,i),t?(a=t).copy(i).sub(o):a=i.clone().sub(o),a.normalize()}),getTangentAt:function(e,t){var a=this.getUtoTmapping(e);return this.getTangent(a,t)},computeFrenetFrames:function(e,t){var r,o,i,c=new s,d=[],l=[],u=[],h=new s,m=new n;for(r=0;r<=e;r++)o=r/e,d[r]=this.getTangentAt(o),d[r].normalize();l[0]=new s,u[0]=new s;var f=Number.MAX_VALUE,p=Math.abs(d[0].x),b=Math.abs(d[0].y),y=Math.abs(d[0].z);for(p<=f&&(f=p,c.set(1,0,0)),b<=f&&(f=b,c.set(0,1,0)),y<=f&&c.set(0,0,1),h.crossVectors(d[0],c).normalize(),l[0].crossVectors(d[0],h),u[0].crossVectors(d[0],l[0]),r=1;r<=e;r++)l[r]=l[r-1].clone(),u[r]=u[r-1].clone(),h.crossVectors(d[r-1],d[r]),h.length()>Number.EPSILON&&(h.normalize(),i=Math.acos(a.clamp(d[r-1].dot(d[r]),-1,1)),l[r].applyMatrix4(m.makeRotationAxis(h,i))),u[r].crossVectors(d[r],l[r]);if(!0===t)for(i=Math.acos(a.clamp(l[0].dot(l[e]),-1,1)),i/=e,d[0].dot(h.crossVectors(l[0],l[e]))>0&&(i=-i),r=1;r<=e;r++)l[r].applyMatrix4(m.makeRotationAxis(d[r],i*r)),u[r].crossVectors(d[r],l[r]);return{tangents:d,normals:l,binormals:u}},clone:function(){return(new this.constructor).copy(this)},copy:function(e){return this.arcLengthDivisions=e.arcLengthDivisions,this},toJSON:function(){var e={metadata:{version:4.5,type:"Curve",generator:"Curve.toJSON"}};return e.arcLengthDivisions=this.arcLengthDivisions,e.type=this.type,e},fromJSON:function(e){return this.arcLengthDivisions=e.arcLengthDivisions,this}}),THREE.Curve=r},function(e,t){const a=THREE.Vector3,s=THREE.Curve;function n(){var e=0,t=0,a=0,s=0;function n(n,r,o,i){e=n,t=o,a=-3*n+3*r-2*o-i,s=2*n-2*r+o+i}return{initCatmullRom:function(e,t,a,s,r){n(t,a,r*(a-e),r*(s-t))},initNonuniformCatmullRom:function(e,t,a,s,r,o,i){var c=(t-e)/r-(a-e)/(r+o)+(a-t)/o,d=(a-t)/o-(s-t)/(o+i)+(s-a)/i;n(t,a,c*=o,d*=o)},calc:function(n){var r=n*n;return e+t*n+a*r+s*(r*n)}}}var r=new a,o=new n,i=new n,c=new n;function d(e,t,a,n){s.call(this),this.type="CatmullRomCurve3",this.points=e||[],this.closed=t||!1,this.curveType=a||"centripetal",this.tension=n||.5}d.prototype=Object.create(s.prototype),d.prototype.constructor=d,d.prototype.isCatmullRomCurve3=!0,d.prototype.getPoint=function(e,t){var s,n,d,l,u=t||new a,h=this.points,m=h.length,f=(m-(this.closed?0:1))*e,p=Math.floor(f),b=f-p;if(this.closed?p+=p>0?0:(Math.floor(Math.abs(p)/m)+1)*m:0===b&&p===m-1&&(p=m-2,b=1),this.closed||p>0?s=h[(p-1)%m]:(r.subVectors(h[0],h[1]).add(h[0]),s=r),n=h[p%m],d=h[(p+1)%m],this.closed||p+2{e.needsReplace=!0,t.forEach(e=>{delete AFRAME.components[e];const t=AFRAME.scenes[0].querySelectorAll(`[${e}]`);for(let a=0;a{delete AFRAME.shaders[e];const t=AFRAME.scenes[0].querySelectorAll("[material]");for(let a=0;a{delete AFRAME.systems[e],delete AFRAME.scenes[0].systems[e]})}),e.hot.data&&e.hot.data.needsReplace){t.forEach(e=>{const t="data-__hot-"+e,a=document.querySelectorAll(`[${t}]`);for(let s=0;sthis.startTime+1e3&&(this.el.object3D.visible=!1,this.el.pause())}}),window.AFRAME){const t=["supercutfx"],a=[],s=[];if(e.hot.dispose(e=>{e.needsReplace=!0,t.forEach(e=>{delete AFRAME.components[e];const t=AFRAME.scenes[0].querySelectorAll(`[${e}]`);for(let a=0;a{delete AFRAME.shaders[e];const t=AFRAME.scenes[0].querySelectorAll("[material]");for(let a=0;a{delete AFRAME.systems[e],delete AFRAME.scenes[0].systems[e]})}),e.hot.data&&e.hot.data.needsReplace){t.forEach(e=>{const t="data-__hot-"+e,a=document.querySelectorAll(`[${t}]`);for(let s=0;s0;e--)n=3*e,a[n]=a[n-3],a[n+1]=a[n-2],a[n+2]=a[n-1],n+=r,a[n]=a[n-3],a[n+1]=a[n-2],a[n+2]=a[n-1];this.target.getWorldPosition(s),a[0]=s.x,a[1]=s.y+o,a[2]=s.z-.1,a[r+0]=s.x,a[r+1]=s.y-o,a[r+2]=s.z-.1,this.geometry.attributes.position.needsUpdate=!0}}),window.AFRAME){const t=["tail"],a=[],s=[];if(e.hot.dispose(e=>{e.needsReplace=!0,t.forEach(e=>{delete AFRAME.components[e];const t=AFRAME.scenes[0].querySelectorAll(`[${e}]`);for(let a=0;a{delete AFRAME.shaders[e];const t=AFRAME.scenes[0].querySelectorAll("[material]");for(let a=0;a{delete AFRAME.systems[e],delete AFRAME.scenes[0].systems[e]})}),e.hot.data&&e.hot.data.needsReplace){t.forEach(e=>{const t="data-__hot-"+e,a=document.querySelectorAll(`[${t}]`);for(let s=0;s=this.data.value&&(this.currentValue=this.data.value,this.data.emit&&this.el.emit("textcounterdone",null,!1),this.hasCompleted=!0),this.textValue.value=`${this.data.prefix}${this.decimals(this.currentValue)}${this.data.suffix}`,this.el.setAttribute("text",this.textValue))},decimals:function(e){var t=Math.pow(10,this.data.decimals);return(parseInt(e*t)/t).toFixed(this.data.decimals)}}),window.AFRAME){const t=["text-counter"],a=[],s=[];if(e.hot.dispose(e=>{e.needsReplace=!0,t.forEach(e=>{delete AFRAME.components[e];const t=AFRAME.scenes[0].querySelectorAll(`[${e}]`);for(let a=0;a{delete AFRAME.shaders[e];const t=AFRAME.scenes[0].querySelectorAll("[material]");for(let a=0;a{delete AFRAME.systems[e],delete AFRAME.scenes[0].systems[e]})}),e.hot.data&&e.hot.data.needsReplace){t.forEach(e=>{const t="data-__hot-"+e,a=document.querySelectorAll(`[${t}]`);for(let s=0;s{e.needsReplace=!0,t.forEach(e=>{delete AFRAME.components[e];const t=AFRAME.scenes[0].querySelectorAll(`[${e}]`);for(let a=0;a{delete AFRAME.shaders[e];const t=AFRAME.scenes[0].querySelectorAll("[material]");for(let a=0;a{delete AFRAME.systems[e],delete AFRAME.scenes[0].systems[e]})}),e.hot.data&&e.hot.data.needsReplace){t.forEach(e=>{const t="data-__hot-"+e,a=document.querySelectorAll(`[${t}]`);for(let s=0;s=t)return e.substring(0,t-3)+"...";return e}(this.data.value,this.data.length))}}),window.AFRAME){const t=["text-truncate"],a=[],s=[];if(e.hot.dispose(e=>{e.needsReplace=!0,t.forEach(e=>{delete AFRAME.components[e];const t=AFRAME.scenes[0].querySelectorAll(`[${e}]`);for(let a=0;a{delete AFRAME.shaders[e];const t=AFRAME.scenes[0].querySelectorAll("[material]");for(let a=0;a{delete AFRAME.systems[e],delete AFRAME.scenes[0].systems[e]})}),e.hot.data&&e.hot.data.needsReplace){t.forEach(e=>{const t="data-__hot-"+e,a=document.querySelectorAll(`[${t}]`);for(let s=0;s{e.needsReplace=!0,t.forEach(e=>{delete AFRAME.components[e];const t=AFRAME.scenes[0].querySelectorAll(`[${e}]`);for(let a=0;a{delete AFRAME.shaders[e];const t=AFRAME.scenes[0].querySelectorAll("[material]");for(let a=0;a{delete AFRAME.systems[e],delete AFRAME.scenes[0].systems[e]})}),e.hot.data&&e.hot.data.needsReplace){t.forEach(e=>{const t="data-__hot-"+e,a=document.querySelectorAll(`[${t}]`);for(let s=0;s{e.needsReplace=!0,t.forEach(e=>{delete AFRAME.components[e];const t=AFRAME.scenes[0].querySelectorAll(`[${e}]`);for(let a=0;a{delete AFRAME.shaders[e];const t=AFRAME.scenes[0].querySelectorAll("[material]");for(let a=0;a{delete AFRAME.systems[e],delete AFRAME.scenes[0].systems[e]})}),e.hot.data&&e.hot.data.needsReplace){t.forEach(e=>{const t="data-__hot-"+e,a=document.querySelectorAll(`[${t}]`);for(let s=0;sthis.enabledTime+250&&(this.mesh.visible=!0),this.mesh.material.uniforms.pulse.value*=.9,this.sampleBladePosition())},pulse:function(){this.mesh.material.uniforms.pulse.value=1},addLayer:function(e){const t=this.bladeColor,a=this.colors,s=this.segments,n=this.vertices;let r=2/s;this.layers>=this.maxLayers&&(this.layers=0);const o=this.layers*e;e=o+e;const i=this.layers*s*18,c=this.layers*s*24;for(let d=0;d{e.needsReplace=!0,t.forEach(e=>{delete AFRAME.components[e];const t=AFRAME.scenes[0].querySelectorAll(`[${e}]`);for(let a=0;a{delete AFRAME.shaders[e];const t=AFRAME.scenes[0].querySelectorAll("[material]");for(let a=0;a{delete AFRAME.systems[e],delete AFRAME.scenes[0].systems[e]})}),e.hot.data&&e.hot.data.needsReplace){t.forEach(e=>{const t="data-__hot-"+e,a=document.querySelectorAll(`[${t}]`);for(let s=0;s1&&(a=1),t.getPointAt(a,e.object3D.position),t.alignToCurve(a,e.object3D),e.play(),this.tunnels.push(e),this.requestTunnel()},clearTunnels:function(){this.timeout&&(clearTimeout(this.timeout),this.timeout=null);for(let e=0;ethis.curveFollowRig.object3D.position.z+5))return;{const t=this.tunnels.splice(e,1)[0];t.object3D.visible=!1,this.pool.returnEntity(t)}}}}),window.AFRAME){const t=["tunnels"],a=[],s=[];if(e.hot.dispose(e=>{e.needsReplace=!0,t.forEach(e=>{delete AFRAME.components[e];const t=AFRAME.scenes[0].querySelectorAll(`[${e}]`);for(let a=0;a{delete AFRAME.shaders[e];const t=AFRAME.scenes[0].querySelectorAll("[material]");for(let a=0;a{delete AFRAME.systems[e],delete AFRAME.scenes[0].systems[e]})}),e.hot.data&&e.hot.data.needsReplace){t.forEach(e=>{const t="data-__hot-"+e,a=document.querySelectorAll(`[${t}]`);for(let s=0;s{e.needsReplace=!0,t.forEach(e=>{delete AFRAME.components[e];const t=AFRAME.scenes[0].querySelectorAll(`[${e}]`);for(let a=0;a{delete AFRAME.shaders[e];const t=AFRAME.scenes[0].querySelectorAll("[material]");for(let a=0;a{delete AFRAME.systems[e],delete AFRAME.scenes[0].systems[e]})}),e.hot.data&&e.hot.data.needsReplace){t.forEach(e=>{const t="data-__hot-"+e,a=document.querySelectorAll(`[${t}]`);for(let s=0;s{e.needsReplace=!0,t.forEach(e=>{delete AFRAME.components[e];const t=AFRAME.scenes[0].querySelectorAll(`[${e}]`);for(let a=0;a{delete AFRAME.shaders[e];const t=AFRAME.scenes[0].querySelectorAll("[material]");for(let a=0;a{delete AFRAME.systems[e],delete AFRAME.scenes[0].systems[e]})}),e.hot.data&&e.hot.data.needsReplace){t.forEach(e=>{const t="data-__hot-"+e,a=document.querySelectorAll(`[${t}]`);for(let s=0;s{e.needsReplace=!0,t.forEach(e=>{delete AFRAME.components[e];const t=AFRAME.scenes[0].querySelectorAll(`[${e}]`);for(let a=0;a{delete AFRAME.shaders[e];const t=AFRAME.scenes[0].querySelectorAll("[material]");for(let a=0;a{delete AFRAME.systems[e],delete AFRAME.scenes[0].systems[e]})}),e.hot.data&&e.hot.data.needsReplace){t.forEach(e=>{const t="data-__hot-"+e,a=document.querySelectorAll(`[${t}]`);for(let s=0;s{e.needsReplace=!0,t.forEach(e=>{delete AFRAME.components[e];const t=AFRAME.scenes[0].querySelectorAll(`[${e}]`);for(let a=0;a{delete AFRAME.shaders[e];const t=AFRAME.scenes[0].querySelectorAll("[material]");for(let a=0;a{delete AFRAME.systems[e],delete AFRAME.scenes[0].systems[e]})}),e.hot.data&&e.hot.data.needsReplace){t.forEach(e=>{const t="data-__hot-"+e,a=document.querySelectorAll(`[${t}]`);for(let s=0;s{e.needsReplace=!0,t.forEach(e=>{delete AFRAME.components[e];const t=AFRAME.scenes[0].querySelectorAll(`[${e}]`);for(let a=0;a{delete AFRAME.shaders[e];const t=AFRAME.scenes[0].querySelectorAll("[material]");for(let a=0;a{delete AFRAME.systems[e],delete AFRAME.scenes[0].systems[e]})}),e.hot.data&&e.hot.data.needsReplace){t.forEach(e=>{const t="data-__hot-"+e,a=document.querySelectorAll(`[${t}]`);for(let s=0;s=this.songPosition&&(this.isRaycastable=!0,this.el.setAttribute("data-wall-active",""),this.isCeiling||(this.el.setAttribute("data-weapon-particles",""),this.el.setAttribute("raycastable-game",""))),a>=this.backPosition+.01&&this.returnToPool()},onGenerate:function(e,t,a,s,n,r){const o=this.el;this.isCeiling=n,this.backPosition=r,this.songPosition=e,this.setWallGeometry(e,t,a,s,n),o.getObject3D("mesh").material.uniforms.opacity.value=0,o.object3D.position.y=-5,o.components.animation__fadein.beginAnimation(),o.components.animation__scalein.beginAnimation()},setWallGeometry:function(){const e=new THREE.Vector3,t=new THREE.Vector3,a=new THREE.Vector3;return function(s,n,r,o,i){const c=this.el.sceneEl.components["beat-system"],d=this.curveEl.components.supercurve,l=s,u=s+o/d.length,h=i?1.5:2.5,m=-1*c.horizontalPositions[n]-r/2+.25;t.x=m-r/2,a.x=m+r/2;const f=(this.geometry=new THREE.BoxBufferGeometry(r,h,1,1,1,30)).attributes.position.array;for(let s=0;s{e.needsReplace=!0,t.forEach(e=>{delete AFRAME.components[e];const t=AFRAME.scenes[0].querySelectorAll(`[${e}]`);for(let a=0;a{delete AFRAME.shaders[e];const t=AFRAME.scenes[0].querySelectorAll("[material]");for(let a=0;a{delete AFRAME.systems[e],delete AFRAME.scenes[0].systems[e]})}),e.hot.data&&e.hot.data.needsReplace){t.forEach(e=>{const t="data-__hot-"+e,a=document.querySelectorAll(`[${t}]`);for(let s=0;s{e.needsReplace=!0,t.forEach(e=>{delete AFRAME.components[e];const t=AFRAME.scenes[0].querySelectorAll(`[${e}]`);for(let a=0;a{delete AFRAME.shaders[e];const t=AFRAME.scenes[0].querySelectorAll("[material]");for(let a=0;a{delete AFRAME.systems[e],delete AFRAME.scenes[0].systems[e]})}),e.hot.data&&e.hot.data.needsReplace){t.forEach(e=>{const t="data-__hot-"+e,a=document.querySelectorAll(`[${t}]`);for(let s=0;s{e.needsReplace=!0,t.forEach(e=>{delete AFRAME.components[e];const t=AFRAME.scenes[0].querySelectorAll(`[${e}]`);for(let a=0;a{delete AFRAME.shaders[e];const t=AFRAME.scenes[0].querySelectorAll("[material]");for(let a=0;a{delete AFRAME.systems[e],delete AFRAME.scenes[0].systems[e]})}),e.hot.data&&e.hot.data.needsReplace){t.forEach(e=>{const t="data-__hot-"+e,a=document.querySelectorAll(`[${t}]`);for(let s=0;s0,e.search.hasNext=e.search.page=t?e.substring(0,t-3)+"...":e:""}AFRAME.registerState({nonBindedStateKeys:["genres"],initialState:{activeHand:localStorage.getItem("hand")||"right",challenge:{audio:"",author:"",difficulty:"",beatmapCharacteristic:"",id:AFRAME.utils.getUrlParameter("challenge"),image:"",isBeatsPreloaded:!1,numBeats:void 0,songDuration:0,songName:"",songNameShort:"",songSubName:"",metadata:{}},colorPrimary:n.a.schemes[m].primary,colorScheme:m,colorSecondary:n.a.schemes[m].secondary,colorSecondaryBright:n.a.schemes[m].secondarybright,colorTertiary:n.a.schemes[m].tertiary,controllerType:"",damage:0,difficultyFilter:"All",difficultyFilterMenuOpen:!1,favorites:f,gameMode:"ride",genre:"",genres:a(193),genreMenuOpen:!1,has3DOFVR:!1,has6DOFVR:!1,hasSongLoadError:!1,hasVR:AFRAME.utils.device.checkHeadsetConnected()||"true"===AFRAME.utils.getUrlParameter("debugvr"),introActive:!h,inVR:"true"===AFRAME.utils.getUrlParameter("debugvr"),isIOS:AFRAME.utils.device.isIOS(),isGameOver:!1,isLoading:!1,isMenuOpening:!h,isPaused:!1,isPlaying:!1,isSearching:!1,isSongProcessing:!1,isVictory:!1,isZipFetching:!1,leaderboard:[],leaderboardFetched:!1,leaderboardQualified:!1,leaderboardNames:"",leaderboardScores:"",mainMenuActive:!1,menuActive:h,menuDifficulties:[],menuDifficultiesIds:[],menuSelectedChallenge:{author:"",difficulty:"",beatmapCharacteristic:"",downloads:"",downloadsText:"",genre:"",id:"",index:-1,image:"",isFavorited:!1,numBeats:void 0,songDuration:0,songInfoText:"",songLength:void 0,numBeats:void 0,songName:"",songSubName:"",version:"",metadata:{}},optionsMenuOpen:!1,playlist:"",playlists:a(194),playlistMenuOpen:!1,playlistTitle:"",score:{accuracy:100,accuracyScore:0,accuracyInt:100,activePanel:!1,beatsHit:0,beatsMissed:0,beatsText:"",combo:0,finalAccuracy:100,maxCombo:0,rank:"",score:0},search:{activePanel:!0,page:0,hasError:!1,hasNext:!1,hasPrev:!1,query:"",queryText:"",results:[],songNameTexts:"",songSubNameTexts:"",url:"",urlPage:0},searchResultsPage:[],speed:10},handlers:{activehandswap:e=>{e.activeHand="right"===e.activeHand?"left":"right",localStorage.setItem("activeHand",e.activeHand)},beathit:(e,t)=>{e.damage>.25&&(e.damage-=.25),e.score.beatsHit++,e.score.combo++,e.score.combo>e.score.maxCombo&&(e.score.maxCombo=e.score.combo),t.score=isNaN(t.score)?100:t.score,e.score.accuracyScore+=t.percent,e.score.score+=Math.floor(t.score),R(e)},beatmiss:e=>{e.score.beatsMissed++,A(e),R(e)},beatwrong:e=>{e.score.beatsMissed++,A(e),R(e)},beatloaderpreloadfinish:e=>{e.menuActive||(e.challenge.isBeatsPreloaded=!0)},colorschemechange:(e,t)=>{e.colorScheme=t,e.colorPrimary=n.a.schemes[t].primary,e.colorSecondary=n.a.schemes[t].secondary,e.colorSecondaryBright=n.a.schemes[t].secondarybright,e.colorTertiary=n.a.schemes[t].tertiary,localStorage.setItem("colorScheme",t)},controllerconnected:(e,t)=>{e.controllerType=t.name,e.has6DOFVR=-1!==["oculus-quest-controls","oculus-touch-controls","vive-controls","windows-motion-controls","generic-tracked-controller-controls"].indexOf(e.controllerType),e.has3DOFVR=-1!==["oculus-go-controls","daydream-controls"].indexOf(e.controllerType)},debugbeatpositioning:e=>{e.gameMode="classic",e.introActive=!1,e.menuActive=!1},debuggameplay:e=>{w(e),Object.assign(e.challenge,e.menuSelectedChallenge),e.menuActive=!1,e.menuSelectedChallenge.id="",e.isSearching=!1,e.isLoading=!1},debuggameover:e=>{e.isGameOver=!0,e.menuActive=!1},debugloading:e=>{u.id="-1",Object.assign(e.menuSelectedChallenge,u),Object.assign(e.challenge,u),e.menuActive=!1,e.isSongProcessing=!0},debugvictory:e=>{Object.assign(e.menuSelectedChallenge,u),Object.assign(e.challenge,u),e.isVictory=!0,e.leaderboardQualified=!0,e.menuActive=!1,e.score.accuracy=74.99,e.score.beatsHit=125,e.score.beatsMissed=125,e.score.maxCombo=123,e.score.rank="A",e.score.score=9001,e.introActive=!1,E(e)},difficultyfilter:(e,t)=>{e.difficultyFilter=t,e.difficultyFilterMenuOpen=!1,e.menuSelectedChallenge.id=""},difficultyfiltermenuclose:e=>{e.difficultyFilterMenuOpen=!1},difficultyfiltermenuopen:e=>{e.difficultyFilterMenuOpen=!0},displayconnected:e=>{if(e.hasVR=!0,!c)try{"getVRDisplays"in navigator&&navigator.getVRDisplays().then(e=>{e.length&&(c=!0)})}catch(e){}},favoritetoggle:e=>{const t=e.menuSelectedChallenge.id,a=o[t];if(a)if(e.menuSelectedChallenge.isFavorited){e.menuSelectedChallenge.isFavorited=!1;for(let a=0;ae.id===t).length)return;e.favorites.push(a),localStorage.setItem("favorites-v2",JSON.stringify(e.favorites))}},gamemenuresume:e=>{e.isPaused=!1},gamemenurestart:e=>{w(e),e.challenge.isBeatsPreloaded=!1,e.isGameOver=!1,e.isPaused=!1,e.isLoading=!0,e.isVictory=!1,e.leaderboardQualified=!1},gamemenuexit:e=>{w(e),e.challenge.isBeatsPreloaded=!1,e.isGameOver=!1,e.isPaused=!1,e.isVictory=!1,e.menuActive=!0,e.menuSelectedChallenge.id=e.challenge.id,e.menuSelectedChallenge.difficulty=e.challenge.difficulty,e.menuSelectedChallenge.beatmapCharacteristic=e.challenge.beatmapCharacteristic,e.menuSelectedChallenge.difficultyId=e.challenge.difficultyId,e.challenge.id="",e.leaderboardQualified=!1},gamemode:(e,t)=>{e.gameMode=t},genreclear:e=>{e.genre="",e.menuSelectedChallenge.id=""},genreselect:(e,t)=>{e.genre=t,e.genreMenuOpen=!1,e.menuSelectedChallenge.id="",e.playlist="",e.search.query=""},genremenuclose:e=>{e.genreMenuOpen=!1},genremenuopen:e=>{e.genreMenuOpen=!0},keyboardclose:e=>{e.isSearching=!1},keyboardopen:e=>{e.isSearching=!0,e.menuSelectedChallenge.id=""},leaderboard:(e,t)=>{e.leaderboard.length=0,e.leaderboardFetched=!0,e.leaderboardNames="",e.leaderboardScores="";for(let a=0;a{e.has6DOFVR&&(e.leaderboardQualified=!0)},leaderboardscoreadded:(e,t)=>{for(let a=0;a=e.leaderboard[a].score||a>=e.leaderboard.length-1){e.leaderboard.splice(a,0,t.scoreData);break}e.leaderboardNames="",e.leaderboardScores="";for(let t=0;t{e.leaderboardQualified=!1},menuback:e=>{e.difficultyFilterMenuOpen=!1,e.genreMenuOpen=!1,e.isSearching=!1,e.optionsMenuOpen=!1,e.playlistMenuOpen=!1},menuchallengeselect:(e,t)=>{let a=o[t];if(!a)return;Object.assign(e.menuSelectedChallenge,a),e.menuSelectedChallenge.songName=b(a.metadata.songName,24),e.menuDifficulties.length=0,e.menuDifficultiesIds.length=0;const s=JSON.parse(a.metadata.characteristics);for(const t of Object.keys(s))if(!["90Degree","360Degree"].includes(t))for(const a of Object.keys(s[t])){if(null===s[t][a])continue;let n=d[a],r=n;"Standard"!==t&&(r=t+"\n"+r),e.menuDifficulties.unshift({id:t+"-"+a,filename:a+t,difficultyName:n,renderName:r,beatmapCharacteristic:t,difficulty:a})}e.menuDifficulties.sort(v);for(const t of e.menuDifficulties)e.menuDifficultiesIds.push(t.id);const n=e.menuDifficulties[0];e.menuSelectedChallenge.difficulty=n.difficulty,e.menuSelectedChallenge.beatmapCharacteristic=n.beatmapCharacteristic,e.menuSelectedChallenge.difficultyId=n.id,e.menuSelectedChallenge.image=e.menuSelectedChallenge.coverURL,k(e,a),e.challenge.audio="",S(e),e.isSearching=!1;const r=!!e.favorites.filter(e=>e.id===t).length;e.menuSelectedChallenge.isFavorited=r,T(e),e.leaderboardLoading=!0,e.hasSongLoadError=!1,l[t]&&(e.hasSongLoadError=!0)},menuchallengeunselect:e=>{e.menuSelectedChallenge.id="",e.menuSelectedChallenge.difficultyId="",e.menuSelectedChallenge.difficulty="",e.menuSelectedChallenge.beatmapCharacteristic="",T(e)},menudifficultyselect:(e,t)=>{let a;for(const s of e.menuDifficulties)if(s.id===t){a=s;break}e.menuSelectedChallenge.difficultyId=t,e.menuSelectedChallenge.difficulty=a.difficulty,e.menuSelectedChallenge.beatmapCharacteristic=a.beatmapCharacteristic,k(e,e.menuSelectedChallenge),T(e),e.leaderboardLoading=!0},menuopeningend:e=>{e.isMenuOpening=!1},minehit:e=>{A(e)},optionsmenuopen:e=>{e.optionsMenuOpen=!0},pausegame:e=>{e.isPlaying&&(e.isPaused=!0)},playbuttonclick:e=>{if(""===e.menuSelectedChallenge.id)return;if(l[e.menuSelectedChallenge.id])return;let t="frontpage";e.playlist&&(t="playlist"),e.search.query&&(t="search"),e.genre&&(t="genre"),gtag("event","songsource",{event_label:t}),w(e),Object.assign(e.challenge,e.menuSelectedChallenge),gtag("event","difficulty",{event_label:e.challenge.difficulty}),e.menuActive=!1,e.menuSelectedChallenge.id="",e.menuSelectedChallenge.difficulty="",e.menuSelectedChallenge.beatmapCharacteristic="",e.isSearching=!1,e.isLoading=!0,e.loadingText="Loading...",gtag("event","colorscheme",{event_label:e.colorScheme})},playlistclear:(e,t)=>{e.menuSelectedChallenge.id="",e.playlist=""},playlistselect:(e,t)=>{e.genre="",e.menuSelectedChallenge.id="",e.playlist=t.id,e.playlistTitle=t.title,e.playlistMenuOpen=!1,e.search.query=""},playlistmenuclose:e=>{e.playlistMenuOpen=!1},playlistmenuopen:e=>{e.playlistMenuOpen=!0},searcherror:(e,t)=>{e.search.hasError=!0},searchprevpage:e=>{0!==e.search.page&&(e.search.page--,p(e))},searchnextpage:e=>{e.search.page>Math.floor(e.search.results.length/6)||(e.search.page++,p(e),void 0!==e.search.url&&e.search.page+3>Math.floor(e.search.results.length/6)&&(e.search.urlPage=e.search.urlPage+1,fetch(e.search.url.replaceAll("CURRENT_PAGE_INDEX",e.search.urlPage)).then(e=>e.json()).then(t=>{var a=(t.docs||t.maps).map(r);for(e.search.results.push(...a),i=0;i{var a;for(e.search.hasError=!1,e.search.page=0,e.search.url=t.url,e.search.urlPage=t.urlPage,e.search.query=t.query,e.search.queryText=b(t.query,10),e.search.results=t.results,a=0;a{if(gtag("event","songcomplete",{event_label:e.gameMode}),"ride"===e.gameMode||!e.inVR)return e.challenge.isBeatsPreloaded=!1,e.isVictory=!1,e.menuActive=!0,void(e.challenge.id="");e.isVictory=!0,e.score.score=isNaN(e.score.score)?0:e.score.score,R(e),e.score.finalAccuracy=e.score.accuracy;const t=parseFloat(e.score.accuracy);e.score.rank=t>=97?"S":t>=90?"A":t>=80?"B":t>=70?"C":t>=60?"D":"F",E(e)},songloadcancel:e=>{e.challenge.isBeatsPreloaded=!1,e.challenge.audio="",e.challenge.id="",e.challenge.version="",e.isZipFetching=!1,e.isLoading=!1,e.isSongProcessing=!1,e.menuActive=!0},songloaderror:e=>{l[e.menuSelectedChallenge.id||e.challenge.id]=!0,e.hasSongLoadError=!0,e.loadingText="Sorry! There was an error loading this song.\nPlease select another song.",e.challenge.id="",e.challenge.isBeatsPreloaded=!1,e.isSongProcessing=!1,e.isZipFetching=!1},songprocessfinish:e=>{e.isSongProcessing=!1,e.isLoading=!1},songprocessstart:e=>{e.isSongProcessing=!0,e.loadingText="Wrapping up..."},"enter-vr":e=>{e.inVR=AFRAME.utils.device.checkHeadsetConnected(),AFRAME.utils.device.isMobile()||(gtag("event","entervr",{}),AFRAME.utils.device.isOculusBrowser()&>ag("event","oculusbrowser",{}))},"exit-vr":e=>{e.inVR=!1,e.isPlaying&&(e.isPaused=!0)},startgame:e=>{e.introActive=!1,e.menuActive=!0},victoryfake:e=>{e.score.accuracy="74.99",e.score.rank="C"},wallhitstart:e=>{A(e)},ziploaderend:(e,t)=>{e.challenge.audio=t.audio,e.hasSongLoadError=!1,e.menuSelectedChallenge.version="",e.isZipFetching=!1},ziploaderstart:e=>{e.challenge.isBeatsPreloaded=!1,e.isZipFetching=!0}},computeState:e=>{e.isPlaying=!(e.menuActive||e.isLoading||e.isPaused||e.isVictory||e.isGameOver||e.isZipFetching||e.isSongProcessing||!e.challenge.id||e.introActive);const t=e.menuActive||e.isPaused||e.isVictory||e.isGameOver||e.isLoading||e.introActive;e.leftRaycasterActive=t&&"left"===e.activeHand&&e.inVR,e.rightRaycasterActive=t&&"right"===e.activeHand&&e.inVR,e.mainMenuActive=e.menuActive&&!e.genreMenuOpen&&!e.difficultyFilterMenuOpen&&!e.playlistMenuOpen&&!e.optionsMenuOpen&&!e.isSearching,e.score.active="ride"!==e.gameMode&&e.inVR&&(e.isPlaying||e.isPaused)}});const y=["easy","normal","hard","expert","expertPlus"],g=["Standard"];function v(e,t){const a=y.indexOf(e.difficulty),s=y.indexOf(t.difficulty);if(as)return 1;const n=g.indexOf(e.beatmapCharacteristic),r=g.indexOf(t.beatmapCharacteristic);return n>r?-1:n=0&&u.splice(t,1)}function y(e){var t=document.createElement("style");if(void 0===e.attrs.type&&(e.attrs.type="text/css"),void 0===e.attrs.nonce){var s=function(){0;return a.nc}();s&&(e.attrs.nonce=s)}return g(t,e.attrs),p(e,t),t}function g(e,t){Object.keys(t).forEach((function(a){e.setAttribute(a,t[a])}))}function v(e,t){var a,s,n,r;if(t.transform&&e.css){if(!(r="function"==typeof t.transform?t.transform(e.css):t.transform.default(e.css)))return function(){};e.css=r}if(t.singleton){var o=l++;a=d||(d=y(t)),s=S.bind(null,a,o,!1),n=S.bind(null,a,o,!0)}else e.sourceMap&&"function"==typeof URL&&"function"==typeof URL.createObjectURL&&"function"==typeof URL.revokeObjectURL&&"function"==typeof Blob&&"function"==typeof btoa?(a=function(e){var t=document.createElement("link");return void 0===e.attrs.type&&(e.attrs.type="text/css"),e.attrs.rel="stylesheet",g(t,e.attrs),p(e,t),t}(t),s=T.bind(null,a,t),n=function(){b(a),a.href&&URL.revokeObjectURL(a.href)}):(a=y(t),s=E.bind(null,a),n=function(){b(a)});return s(e),function(t){if(t){if(t.css===e.css&&t.media===e.media&&t.sourceMap===e.sourceMap)return;s(e=t)}else n()}}e.exports=function(e,t){if("undefined"!=typeof DEBUG&&DEBUG&&"object"!=typeof document)throw new Error("The style-loader cannot be used in a non-browser environment");(t=t||{}).attrs="object"==typeof t.attrs?t.attrs:{},t.singleton||"boolean"==typeof t.singleton||(t.singleton=o()),t.insertInto||(t.insertInto="head"),t.insertAt||(t.insertAt="bottom");var a=f(e,t);return m(a,t),function(e){for(var s=[],n=0;n\n\n \n\n \n\n \n \n\n \n \n\n \n \n \n \n\n\x3c!-- --\x3e\n \x3c!-- --\x3e\n\n\n\n \n\n \n\n \n\n \n\n \n\n \n\n \n\n \n\n \x3c!-- --\x3e\n --\x3e\n\n\x3c!-- --\x3e\n \x3c!-- --\x3e\n\x3c!-- Macro is a templating function. It is rendered into the HTML below with searchResults(). --\x3e\n\n\n\n\n\n\n\x3c!-- Menu container begins here. --\x3e\n\n\n \n\n \n \n\n \n\x3c!-- TODO: Sort the layout based on the IDs. --\x3e\n\n\n\n\x3c!-- All search result text merged and spaced out. --\x3e\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n \n\n\n \n\n \n\n \x3c!-- Top-aligned. --\x3e\n \x3c!-- Uses bind-for and bind-item to render difficulties. --\x3e\n \n \n \n \n \n \n\n \x3c!-- Selected challenge info. --\x3e\n \n \n\n \n\n \n \n \n \n \n \n \n\n \n \n \n \n\n \n \n\n \n \n \n\n \n\n \n \n\n \n \n \n\n \x3c!-- --\x3e\n\n \n\n\x3c!-- --\x3e\n \x3c!-- --\x3e\n\n\n\n\n\n \n \n \n \n \n \n\n \n \n \n \n \n \n\n \n \n \n \n \n \n\n \n \n \n \n \n \n\n \n \n \n \n \n \n\n \n \n \n \n \n \n\n \n\n\x3c!-- --\x3e\n \x3c!-- --\x3e\n\n\n \n\n \n \n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n\n \n \n\n\x3c!-- --\x3e\n \x3c!-- --\x3e\n\n \n\n\x3c!-- --\x3e\n\n\n\x3c!-- Search. --\x3e\n\n\n\n\n \n \n\n\n\x3c!-- Top menu buttons. --\x3e\n\n\n\n\n \x3c!-- Playlist menu toggle. --\x3e\n \n \n \n \n\n \n \n \n\n \n \n\n \x3c!-- Search toggle. --\x3e\n \n \n \n \n\n \n \n \n\n \n \n\n \x3c!-- Difficulty menu toggle. --\x3e\n \x3c!-- \n \n \n \n\n \n --\x3e\n\n \x3c!-- Genre menu toggle. --\x3e\n \n \n \n \n\n \n \n \n\n \n \n\n\n\x3c!-- Options menu toggle. --\x3e\n\n \n \n \n\x3c!-- --\x3e\n \x3c!-- --\x3e\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n \n \n\n\n \n \n \n \n\n\n \n\n\n \n \n \n \n\n\n \n\n \n \n\n\n \n \n \n \n\n\n \n\n\n \n \n \n \n\n\n \n\n\n \n \n \n \n\n\n \n\n \n\n \n\n \n \n\n\x3c!-- --\x3e\n \x3c!-- --\x3e\n\x3c!-- Victory. --\x3e\n\n\n \n\n \n\n \n\n \n\n \n\n \n\n \n \n \n \n\n \n \n \n \n\n\x3c!-- --\x3e\n \x3c!-- --\x3e\n\n\n \n\n \n\n \n\n \n\n \n\n \n\n \n \n\n \n \n \x3c!--slice9="width: 1.5; height: 0.24"--\x3e\n \n\n\x3c!-- --\x3e\n \x3c!-- --\x3e\n\n\n\n\n\n\n\n\n\n\n \n\n \n\n\n\n\n \n\n \n\n \n\n\x3c!-- --\x3e\n\n \n\n \n\n \n\n \n\n \n\n \n\n \x3c!-- --\x3e\n\n\n\n\n\n\n\n \n \n \n \n\n\n\n\n\n\x3c!-- --\x3e\n \x3c!-- --\x3e\n\n\n\n\n \n \n\n \n \n\n \n \n\n\x3c!-- --\x3e\n \x3c!-- --\x3e\n\n\n\n\n\x3c!-- Titles. --\x3e\n\n \n \n \n\n\n\n\n \x3c!-- Actions. --\x3e\n \n \n \n\n \n \n \n\n \n \n \n\n \x3c!-- Song info. --\x3e\n \n \n\n \n\n \n \n \n \n \n\n\x3c!-- --\x3e\n\n \x3c!-- Beat pieces, explosions, fx, and weapon trail. --\x3e\n \n\n \x3c!-- Supercut FX rings. --\x3e\n \n \n \n \n \n \n \n \n \n\n \x3c!-- Player. --\x3e\n \n \n \n \n\n \n \n\n \n \n \n \n \n\n \x3c!-- Blade. --\x3e\n \n \n \n \n \n \n\n \n \n \n \n\n \x3c!-- Punch. --\x3e\n \n \n \n \n \n\n \x3c!-- Ride. --\x3e\n \n \n \n \n\n \n \n \n \n \n \n \n\n \x3c!-- Blade. --\x3e\n \n \n \n \n \n \n\n \n \n \n \n\n \x3c!-- Punch. --\x3e\n \n \n \n \n \n\n \x3c!-- Ride. --\x3e\n \n \n \n \n\n \n \n \n\n \n \n\n \n \n\n \n \n\n';document.addEventListener("DOMContentLoaded",(function(){let e=document.getElementById("app");e||(e=document.createElement("div"),e.id="app",document.body.appendChild(e));e.innerHTML=s}));{const t=a(234).DiffDOM;if(e.hot.accept(),e.hot.data&&e.hot.data.oldHtml){const a=e.hot.data.oldHtml,n=new t,r=document.createElement("div");r.innerHTML=a;const o=document.createElement("div");o.innerHTML=s;const i=n.diff(r.querySelector("a-scene"),o.querySelector("a-scene"));n.apply(document.querySelector("a-scene"),i)}e.hot.dispose(e=>{e.oldHtml=s})}},,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,function(e,t,a){"use strict";function s(e,t,a){let n;return"#text"===e.nodeName?n=a.document.createTextNode(e.data):"#comment"===e.nodeName?n=a.document.createComment(e.data):("svg"===e.nodeName||t?(n=a.document.createElementNS("http://www.w3.org/2000/svg",e.nodeName),t=!0):n=a.document.createElement(e.nodeName),e.attributes&&Object.entries(e.attributes).forEach(([e,t])=>n.setAttribute(e,t)),e.childNodes&&e.childNodes.forEach(e=>n.appendChild(s(e,t,a))),a.valueDiffing&&(e.value&&(n.value=e.value),e.checked&&(n.checked=e.checked),e.selected&&(n.selected=e.selected))),n}function n(e,t){for(t=t.slice();t.length>0;){if(!e.childNodes)return!1;const a=t.splice(0,1)[0];e=e.childNodes[a]}return e}function r(e,t,a){let r,o,i,c,d,l=n(e,t[a._const.route]);const u={diff:t,node:l};if(a.preDiffApply(u))return!0;switch(t[a._const.action]){case a._const.addAttribute:if(!l||!l.setAttribute)return!1;l.setAttribute(t[a._const.name],t[a._const.value]);break;case a._const.modifyAttribute:if(!l||!l.setAttribute)return!1;l.setAttribute(t[a._const.name],t[a._const.newValue]),"INPUT"===l.nodeName&&"value"===t[a._const.name]&&(l.value=t[a._const.oldValue]);break;case a._const.removeAttribute:if(!l||!l.removeAttribute)return!1;l.removeAttribute(t[a._const.name]);break;case a._const.modifyTextElement:if(!l||3!==l.nodeType)return!1;a.textDiff(l,l.data,t[a._const.oldValue],t[a._const.newValue]);break;case a._const.modifyValue:if(!l||void 0===l.value)return!1;l.value=t[a._const.newValue];break;case a._const.modifyComment:if(!l||void 0===l.data)return!1;a.textDiff(l,l.data,t[a._const.oldValue],t[a._const.newValue]);break;case a._const.modifyChecked:if(!l||void 0===l.checked)return!1;l.checked=t[a._const.newValue];break;case a._const.modifySelected:if(!l||void 0===l.selected)return!1;l.selected=t[a._const.newValue];break;case a._const.replaceElement:l.parentNode.replaceChild(s(t[a._const.newValue],"http://www.w3.org/2000/svg"===l.namespaceURI,a),l);break;case a._const.relocateGroup:c=Array(...new Array(t.groupLength)).map(()=>l.removeChild(l.childNodes[t[a._const.from]])),c.forEach((e,s)=>{0===s&&(o=l.childNodes[t[a._const.to]]),l.insertBefore(e,o||null)});break;case a._const.removeElement:l.parentNode.removeChild(l);break;case a._const.addElement:i=t[a._const.route].slice(),d=i.splice(i.length-1,1)[0],l=n(e,i),l.insertBefore(s(t[a._const.element],"http://www.w3.org/2000/svg"===l.namespaceURI,a),l.childNodes[d]||null);break;case a._const.removeTextElement:if(!l||3!==l.nodeType)return!1;l.parentNode.removeChild(l);break;case a._const.addTextElement:if(i=t[a._const.route].slice(),d=i.splice(i.length-1,1)[0],r=a.document.createTextNode(t[a._const.value]),l=n(e,i),!l||!l.childNodes)return!1;l.insertBefore(r,l.childNodes[d]||null);break;default:console.log("unknown action")}return u.newNode=r,a.postDiffApply(u),!0}function o(e,t,a){const s=e[t];e[t]=e[a],e[a]=s}function i(e,t,a){t.length||(t=[t]),(t=t.slice()).reverse(),t.forEach(t=>{!function(e,t,a){switch(t[a._const.action]){case a._const.addAttribute:t[a._const.action]=a._const.removeAttribute,r(e,t,a);break;case a._const.modifyAttribute:o(t,a._const.oldValue,a._const.newValue),r(e,t,a);break;case a._const.removeAttribute:t[a._const.action]=a._const.addAttribute,r(e,t,a);break;case a._const.modifyTextElement:case a._const.modifyValue:case a._const.modifyComment:case a._const.modifyChecked:case a._const.modifySelected:case a._const.replaceElement:o(t,a._const.oldValue,a._const.newValue),r(e,t,a);break;case a._const.relocateGroup:o(t,a._const.from,a._const.to),r(e,t,a);break;case a._const.removeElement:t[a._const.action]=a._const.addElement,r(e,t,a);break;case a._const.addElement:t[a._const.action]=a._const.removeElement,r(e,t,a);break;case a._const.removeTextElement:t[a._const.action]=a._const.addTextElement,r(e,t,a);break;case a._const.addTextElement:t[a._const.action]=a._const.removeTextElement,r(e,t,a);break;default:console.log("unknown action")}}(e,t,a)})}a.r(t),a.d(t,"DiffDOM",(function(){return T})),a.d(t,"TraceLogger",(function(){return k}));class c{constructor(e={}){Object.entries(e).forEach(([e,t])=>this[e]=t)}toString(){return JSON.stringify(this)}setValue(e,t){return this[e]=t,this}}function d(e){const t=[];return"#text"!==e.nodeName&&"#comment"!==e.nodeName&&(t.push(e.nodeName),e.attributes&&(e.attributes.class&&t.push(`${e.nodeName}.${e.attributes.class.replace(/ /g,".")}`),e.attributes.id&&t.push(`${e.nodeName}#${e.attributes.id}`))),t}function l(e){const t={},a={};return e.forEach(e=>{d(e).forEach(e=>{const s=e in t;s||e in a?s&&(delete t[e],a[e]=!0):t[e]=!0})}),t}function u(e,t){const a=l(e),s=l(t),n={};return Object.keys(a).forEach(e=>{s[e]&&(n[e]=!0)}),n}function h(e){return delete e.outerDone,delete e.innerDone,delete e.valueDone,!e.childNodes||e.childNodes.every(h)}function m(e,t){if(!["nodeName","value","checked","selected","data"].every(a=>e[a]===t[a]))return!1;if(Boolean(e.attributes)!==Boolean(t.attributes))return!1;if(Boolean(e.childNodes)!==Boolean(t.childNodes))return!1;if(e.attributes){const a=Object.keys(e.attributes),s=Object.keys(t.attributes);if(a.length!==s.length)return!1;if(!a.every(a=>e.attributes[a]===t.attributes[a]))return!1}if(e.childNodes){if(e.childNodes.length!==t.childNodes.length)return!1;if(!e.childNodes.every((e,a)=>m(e,t.childNodes[a])))return!1}return!0}function f(e,t,a,s,n){if(!e||!t)return!1;if(e.nodeName!==t.nodeName)return!1;if("#text"===e.nodeName)return!!n||e.data===t.data;if(e.nodeName in a)return!0;if(e.attributes&&t.attributes){if(e.attributes.id){if(e.attributes.id!==t.attributes.id)return!1;if(`${e.nodeName}#${e.attributes.id}`in a)return!0}if(e.attributes.class&&e.attributes.class===t.attributes.class){if(`${e.nodeName}.${e.attributes.class.replace(/ /g,".")}`in a)return!0}}if(s)return!0;const r=e.childNodes?e.childNodes.slice().reverse():[],o=t.childNodes?t.childNodes.slice().reverse():[];if(r.length!==o.length)return!1;if(n)return r.every((e,t)=>e.nodeName===o[t].nodeName);{const e=u(r,o);return r.every((t,a)=>f(t,o[a],e,!0,!0))}}function p(e){return JSON.parse(JSON.stringify(e))}function b(e,t,a,s){let n=0,r=[];const o=e.length,i=t.length,c=Array(...new Array(o+1)).map(()=>[]),l=u(e,t);let h=o===i;h&&e.some((e,a)=>{const s=d(e),n=d(t[a]);return s.length!==n.length?(h=!1,!0):(s.some((e,t)=>{if(e!==n[t])return h=!1,!0}),!h||void 0)});for(let d=0;d=n&&(n=c[d+1][e+1],r=[d+1,e+1]))}}return 0!==n&&{oldValue:r[0]-n,newValue:r[1]-n,length:n}}function y(e,t){return Array(...new Array(e)).map(()=>t)}class g{constructor(){this.list=[]}add(e){this.list.push(...e)}forEach(e){this.list.forEach(t=>e(t))}}function v(e,t){let a,s,n=e;for(t=t.slice();t.length>0;){if(!n.childNodes)return!1;s=t.splice(0,1)[0],a=n,n=n.childNodes[s]}return{node:n,parentNode:a,nodeIndex:s}}function A(e,t,a){return t.forEach(t=>{!function(e,t,a){const s=v(e,t[a._const.route]);let n=s.node;const r=s.parentNode,o=s.nodeIndex,i=[],c={diff:t,node:n};if(a.preDiffApply(c))return!0;let d,l,u,h;switch(t[a._const.action]){case a._const.addAttribute:n.attributes||(n.attributes={}),n.attributes[t[a._const.name]]=t[a._const.value],"checked"===t[a._const.name]?n.checked=!0:"selected"===t[a._const.name]?n.selected=!0:"INPUT"===n.nodeName&&"value"===t[a._const.name]&&(n.value=t[a._const.value]);break;case a._const.modifyAttribute:n.attributes[t[a._const.name]]=t[a._const.newValue];break;case a._const.removeAttribute:delete n.attributes[t[a._const.name]],0===Object.keys(n.attributes).length&&delete n.attributes,"checked"===t[a._const.name]?n.checked=!1:"selected"===t[a._const.name]?delete n.selected:"INPUT"===n.nodeName&&"value"===t[a._const.name]&&delete n.value;break;case a._const.modifyTextElement:n.data=t[a._const.newValue];break;case a._const.modifyValue:n.value=t[a._const.newValue];break;case a._const.modifyComment:n.data=t[a._const.newValue];break;case a._const.modifyChecked:n.checked=t[a._const.newValue];break;case a._const.modifySelected:n.selected=t[a._const.newValue];break;case a._const.replaceElement:d=p(t[a._const.newValue]),d.outerDone=!0,d.innerDone=!0,d.valueDone=!0,r.childNodes[o]=d;break;case a._const.relocateGroup:l=n.childNodes.splice(t[a._const.from],t.groupLength).reverse(),l.forEach(e=>n.childNodes.splice(t[a._const.to],0,e)),n.subsets&&n.subsets.forEach(e=>{if(t[a._const.from]t[a._const.from]){e.oldValue-=t.groupLength;const s=e.oldValue+e.length-t[a._const.to];s>0&&(i.push({oldValue:t[a._const.to]+t.groupLength,newValue:e.newValue+e.length-s,length:s}),e.length-=s)}else if(t[a._const.from]>t[a._const.to]&&e.oldValue>t[a._const.to]&&e.oldValue0&&(i.push({oldValue:t[a._const.to]+t.groupLength,newValue:e.newValue+e.length-s,length:s}),e.length-=s)}else e.oldValue===t[a._const.from]&&(e.oldValue=t[a._const.to])});break;case a._const.removeElement:r.childNodes.splice(o,1),r.subsets&&r.subsets.forEach(e=>{e.oldValue>o?e.oldValue-=1:e.oldValue===o?e.delete=!0:e.oldValueo&&(e.oldValue+e.length-1===o?e.length--:(i.push({newValue:e.newValue+o-e.oldValue,oldValue:o,length:e.length-o+e.oldValue-1}),e.length=o-e.oldValue))}),n=r;break;case a._const.addElement:u=t[a._const.route].slice(),h=u.splice(u.length-1,1)[0],n=v(e,u).node,d=p(t[a._const.element]),d.outerDone=!0,d.innerDone=!0,d.valueDone=!0,n.childNodes||(n.childNodes=[]),h>=n.childNodes.length?n.childNodes.push(d):n.childNodes.splice(h,0,d),n.subsets&&n.subsets.forEach(e=>{if(e.oldValue>=h)e.oldValue+=1;else if(e.oldValueh){const t=e.oldValue+e.length-h;i.push({newValue:e.newValue+e.length-t,oldValue:h+1,length:t}),e.length-=t}});break;case a._const.removeTextElement:r.childNodes.splice(o,1),"TEXTAREA"===r.nodeName&&delete r.value,r.subsets&&r.subsets.forEach(e=>{e.oldValue>o?e.oldValue-=1:e.oldValue===o?e.delete=!0:e.oldValueo&&(e.oldValue+e.length-1===o?e.length--:(i.push({newValue:e.newValue+o-e.oldValue,oldValue:o,length:e.length-o+e.oldValue-1}),e.length=o-e.oldValue))}),n=r;break;case a._const.addTextElement:u=t[a._const.route].slice(),h=u.splice(u.length-1,1)[0],d={},d.nodeName="#text",d.data=t[a._const.value],n=v(e,u).node,n.childNodes||(n.childNodes=[]),h>=n.childNodes.length?n.childNodes.push(d):n.childNodes.splice(h,0,d),"TEXTAREA"===n.nodeName&&(n.value=t[a._const.newValue]),n.subsets&&n.subsets.forEach(e=>{if(e.oldValue>=h&&(e.oldValue+=1),e.oldValueh){const t=e.oldValue+e.length-h;i.push({newValue:e.newValue+e.length-t,oldValue:h+1,length:t}),e.length-=t}});break;default:console.log("unknown action")}n.subsets&&(n.subsets=n.subsets.filter(e=>!e.delete&&e.oldValue!==e.newValue),i.length&&(n.subsets=n.subsets.concat(i))),c.newNode=d,a.postDiffApply(c)}(e,t,a)}),!0}function w(e,t){const a={};if(a.nodeName=e.nodeName,"#text"===a.nodeName||"#comment"===a.nodeName)a.data=e.data;else{if(e.attributes&&e.attributes.length>0){a.attributes={};Array.prototype.slice.call(e.attributes).forEach(e=>a.attributes[e.name]=e.value)}if("TEXTAREA"===a.nodeName)a.value=e.value;else if(e.childNodes&&e.childNodes.length>0){a.childNodes=[];Array.prototype.slice.call(e.childNodes).forEach(e=>a.childNodes.push(w(e,t)))}t.valueDiffing&&(void 0!==e.checked&&e.type&&["radio","checkbox"].includes(e.type.toLowerCase())?a.checked=e.checked:void 0!==e.value&&(a.value=e.value),void 0!==e.selected&&(a.selected=e.selected))}return a}class S{constructor(e,t,a){this.options=a,this.t1=w(e,this.options),this.t2=w(t,this.options),this.diffcount=0,this.foundAll=!1,this.debug&&(this.t1Orig=w(e,this.options),this.t2Orig=w(t,this.options)),this.tracker=new g}init(){return this.findDiffs(this.t1,this.t2)}findDiffs(e,t){let a;do{if(this.options.debug&&(this.diffcount+=1,this.diffcount>this.options.diffcap))throw window.diffError=[this.t1Orig,this.t2Orig],new Error(`surpassed diffcap:${JSON.stringify(this.t1Orig)} -> ${JSON.stringify(this.t2Orig)}`);a=this.findNextDiff(e,t,[]),0===a.length&&(m(e,t)||(this.foundAll?(console.error("Could not find remaining diffs!"),console.log({t1:e,t2:t})):(this.foundAll=!0,h(e),a=this.findNextDiff(e,t,[])))),a.length>0&&(this.foundAll=!1,this.tracker.add(a),A(e,a,this.options))}while(a.length>0);return this.tracker.list}findNextDiff(e,t,a){let s,n;if(this.options.maxDepth&&a.length>this.options.maxDepth)return[];if(!e.outerDone){if(s=this.findOuterDiff(e,t,a),this.filterOuterDiff&&(n=this.filterOuterDiff(e,t,s),n&&(s=n)),s.length>0)return e.outerDone=!0,s;e.outerDone=!0}if(!e.innerDone){if(s=this.findInnerDiff(e,t,a),s.length>0)return s;e.innerDone=!0}if(this.options.valueDiffing&&!e.valueDone){if(s=this.findValueDiff(e,t,a),s.length>0)return e.valueDone=!0,s;e.valueDone=!0}return[]}findOuterDiff(e,t,a){const s=[];let n,r,o,i,d,l;if(e.nodeName!==t.nodeName)return[(new c).setValue(this.options._const.action,this.options._const.replaceElement).setValue(this.options._const.oldValue,p(e)).setValue(this.options._const.newValue,p(t)).setValue(this.options._const.route,a)];if(a.length&&this.options.maxChildCount&&e.childNodes&&t.childNodes&&e.childNodes.length>this.options.maxChildCount&&t.childNodes.length>this.options.maxChildCount){const s=e.childNodes.length{n[i.oldValue+e]=!0,r[i.newValue+e]=!0};for(;i;)if(i=b(a,s,n,r),i){o.push(i);Array(...new Array(i.length)).map(c).forEach(e=>d(e))}return e.subsets=o,e.subsetsAge=100,o}(e,t):[],n=e.childNodes?e.childNodes:[],r=t.childNodes?t.childNodes:[];let o,i=[],d=0;if(s.length>0&&(i=this.attemptGroupRelocation(e,t,s,a),i.length>0))return i;const l=Math.max(n.length,r.length);n.length!==r.length&&(o=!0);for(let e=0;e{const t=e.oldValue+e.length,a=e.newValue+e.length;for(let a=e.oldValue;am+1&&"#text"===e.childNodes[m+1].nodeName;)if(m+=1,t.childNodes[n].data===e.childNodes[m].data){h=!0;break}if(!h)return g.push((new c).setValue(this.options._const.action,this.options._const.modifyTextElement).setValue(this.options._const.route,s.concat(n)).setValue(this.options._const.oldValue,u.data).setValue(this.options._const.newValue,t.childNodes[n].data)),g}g.push((new c).setValue(this.options._const.action,this.options._const.removeTextElement).setValue(this.options._const.route,s.concat(n)).setValue(this.options._const.value,u.data)),r.splice(n,1),b=Math.min(r.length,o.length),n-=1}else g.push((new c).setValue(this.options._const.action,this.options._const.removeElement).setValue(this.options._const.route,s.concat(n)).setValue(this.options._const.element,p(u))),r.splice(n,1),b=Math.min(r.length,o.length),n-=1;else if(!0===o[n])u=t.childNodes[n],"#text"===u.nodeName?(g.push((new c).setValue(this.options._const.action,this.options._const.addTextElement).setValue(this.options._const.route,s.concat(n)).setValue(this.options._const.value,u.data)),r.splice(n,0,!0),b=Math.min(r.length,o.length),y-=1):(g.push((new c).setValue(this.options._const.action,this.options._const.addElement).setValue(this.options._const.route,s.concat(n)).setValue(this.options._const.element,p(u))),r.splice(n,0,!0),b=Math.min(r.length,o.length),y-=1);else if(r[n]!==o[n]){if(g.length>0)return g;if(l=a[r[n]],d=Math.min(l.newValue,e.childNodes.length-l.length),d!==l.oldValue){i=!1;for(let t=0;t{Object.prototype.hasOwnProperty.call(this.options,e)||(this.options[e]=t)}),!this.options._const){const e=["addAttribute","modifyAttribute","removeAttribute","modifyTextElement","relocateGroup","removeElement","addElement","removeTextElement","addTextElement","replaceElement","modifyValue","modifyChecked","modifySelected","modifyComment","action","route","oldValue","newValue","element","group","from","to","name","value","data","attributes","nodeName","childNodes","checked","selected"];this.options._const={},this.options.compress?e.forEach((e,t)=>this.options._const[e]=t):e.forEach(e=>this.options._const[e]=e)}this.DiffFinder=S}apply(e,t){return function(e,t,a){return t.every(t=>r(e,t,a))}(e,t,this.options)}undo(e,t){return i(e,t,this.options)}diff(e,t){return new this.DiffFinder(e,t,this.options).init()}}class k{constructor(e={}){this.pad="│ ",this.padding="",this.tick=1,this.messages=[];const t=(e,t)=>{const a=e[t];e[t]=(...s)=>{this.fin(t,Array.prototype.slice.call(s));const n=a.apply(e,s);return this.fout(t,n),n}};for(let a in e)"function"==typeof e[a]&&t(e,a);this.log("┌ TRACELOG START")}fin(e,t){this.padding+=this.pad,this.log("├─> entering "+e,t)}fout(e,t){this.log("│<──┘ generated return value",t),this.padding=this.padding.substring(0,this.padding.length-this.pad.length)}format(e,t){return`${function(e){for(e=""+e;e.length<4;)e="0"+e;return e}(t)}> ${this.padding}${e}`}log(){let e=Array.prototype.slice.call(arguments);const t=function(e){return e?"string"==typeof e?e:e instanceof HTMLElement?e.outerHTML||"":e instanceof Array?`[${e.map(t).join(",")}]`:e.toString()||e.valueOf()||"":""};e=e.map(t).join(", "),this.messages.push(this.format(e,this.tick++))}toString(){let e="└───";for(;e.length<=this.padding.length+this.pad.length;)e+="× ";let t=this.padding;return this.padding="",e=this.format(e,this.tick),this.padding=t,`${this.messages.join("\n")}\n${e}`}}}]); \ No newline at end of file +var s=function(e,t){return(s=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var a in t)t.hasOwnProperty(a)&&(e[a]=t[a])})(e,t)};function n(e){var t="function"==typeof Symbol&&Symbol.iterator,a=t&&e[t],s=0;if(a)return a.call(e);if(e&&"number"==typeof e.length)return{next:function(){return e&&s>=e.length&&(e=void 0),{value:e&&e[s++],done:!e}}};throw new TypeError(t?"Object is not iterable.":"Symbol.iterator is not defined.")}var r,o="undefined"!=typeof globalThis?globalThis:"undefined"!=typeof window?window:void 0!==e?e:"undefined"!=typeof self?self:{},i=i||{},c=o||self;function d(){}function l(e){var t=typeof e;return"object"!=t?t:e?Array.isArray(e)?"array":t:"null"}function u(e){var t=l(e);return"array"==t||"object"==t&&"number"==typeof e.length}function h(e){var t=typeof e;return"object"==t&&null!=e||"function"==t}var m="closure_uid_"+(1e9*Math.random()>>>0),f=0;function p(e,t,a){return e.call.apply(e.bind,arguments)}function b(e,t,a){if(!e)throw Error();if(2t?1:0}e:{var L=c.navigator;if(L){var M=L.userAgent;if(M){N=M;break e}}N=""}function _(e,t,a){for(var s in e)t.call(a,e[s],s,e)}function D(e){var t={};for(var a in e)t[a]=e[a];return t}var I="constructor hasOwnProperty isPrototypeOf propertyIsEnumerable toLocaleString toString valueOf".split(" ");function O(e,t){for(var a,s,n=1;nparseFloat(G)){C=String(K);break e}}C=G}var Y,X={};function Q(e){return function(e,t){var a=X;return Object.prototype.hasOwnProperty.call(a,e)?a[e]:a[e]=t(e)}(e,(function(){for(var t=0,a=x(String(C)).split("."),s=x(String(e)).split("."),n=Math.max(a.length,s.length),r=0;0==t&&r=e.keyCode)&&(e.keyCode=-1)}catch(e){}};var ie="closure_listenable_"+(1e6*Math.random()|0),ce=0;function de(e,t,a,s,n){this.listener=e,this.proxy=null,this.src=t,this.type=a,this.capture=!!s,this.ca=n,this.key=++ce,this.Y=this.Z=!1}function le(e){e.Y=!0,e.listener=null,e.proxy=null,e.src=null,e.ca=null}function ue(e){this.src=e,this.a={},this.b=0}function he(e,t){var a=t.type;if(a in e.a){var s,n=e.a[a],r=S(n,t);(s=0<=r)&&Array.prototype.splice.call(n,r,1),s&&(le(t),0==e.a[a].length&&(delete e.a[a],e.b--))}}function me(e,t,a,s){for(var n=0;n>>0);function Te(e){return"function"==l(e)?e:(e[Ee]||(e[Ee]=function(t){return e.handleEvent(t)}),e[Ee])}function ke(){w.call(this),this.c=new ue(this),this.J=this,this.C=null}function Re(e,t,a,s){if(!(t=e.c.a[String(t)]))return!0;t=t.concat();for(var n=!0,r=0;rs.length)){var n=s[1];if(Array.isArray(n)&&!(1>n.length)){var r=n[0];if("noop"!=r&&"stop"!=r&&"close"!=r)for(var o=1;ot.length?bt:(t=t.substr(s,a),e.D=s+a,t))}function wt(e){e.U=v()+e.P,St(e,e.P)}function St(e,t){if(null!=e.o)throw Error("WatchDog timer not null");e.o=at(y(e.Ua,e),t)}function Et(e){e.o&&(c.clearTimeout(e.o),e.o=null)}function Tt(e){0==e.g.v||e.A||qa(e.g,e)}function kt(e){Et(e);var t=e.F;t&&"function"==typeof t.ja&&t.ja(),e.F=null,Ue(e.R),Je(e.J),e.a&&(t=e.a,e.a=null,t.abort(),t.ja())}function Rt(e,t){try{var a=e.g;if(0!=a.v&&(a.a==e||ra(a.b,e)))if(a.I=e.N,!e.C&&ra(a.b,e)&&3==a.v){try{var s=a.ka.a.parse(t)}catch(e){s=null}if(Array.isArray(s)&&3==s.length){var n=s;if(0==n[0]){e:if(!a.j){if(a.a){if(!(a.a.u+3e3n[2]&&a.H&&0==a.o&&!a.m&&(a.m=at(y(a.Ra,a),6e3));if(1>=na(a.b)&&a.ea){try{a.ea()}catch(e){}a.ea=void 0}}else Ba(a,11)}else if((e.C||a.a==e)&&Fa(a),!R(t))for(t=s=a.ka.a.parse(t),s=0;st||3==t&&!B&&!this.a.$())){this.A||4!=t||7==a||Qe(8==a||0>=s?3:2),Et(this);var n=this.a.X();this.N=n;var r=this.a.$();if(this.b=200==n,function(e,t,a,s,n,r,o){e.info((function(){return"XMLHTTP RESP ("+s+") [ attempt "+n+"]: "+t+"\n"+a+"\n"+r+" "+o}))}(this.c,this.m,this.l,this.f,this.T,t,n),this.b){if(this.V&&!this.C){t:{if(this.a){var o,i=this.a;if((o=i.a?i.a.getResponseHeader("X-HTTP-Initial-Response"):null)&&!R(o)){var c=o;break t}}c=null}if(!c){this.b=!1,this.h=3,et(12),kt(this),Tt(this);break e}We(this.c,this.f,c,"Initial handshake response via X-HTTP-Initial-Response"),this.C=!0,Rt(this,c)}this.I?(vt(this,t,r),B&&this.b&&3==t&&(Ve(this.J,this.R,"tick",this.Va),this.R.start())):(We(this.c,this.f,r,null),Rt(this,r)),4==t&&kt(this),this.b&&!this.A&&(4==t?qa(this.g,this):(this.b=!1,wt(this)))}else 400==n&&0t)throw Error("Bad port number "+t);e.h=t}else e.h=null}function Zt(e,t,a){t instanceof Wt?(e.b=t,function(e,t){t&&!e.f&&(Kt(e),e.c=null,e.a.forEach((function(e,t){var a=t.toLowerCase();t!=a&&(Yt(this,t),Qt(this,a,e))}),e)),e.f=t}(e.b,e.a)):(a||(t=qt(t,Jt)),e.b=new Wt(t,e.a))}function Ct(e,t,a){e.b.set(t,a)}function Ut(e){return Ct(e,"zx",Math.floor(2147483648*Math.random()).toString(36)+Math.abs(Math.floor(2147483648*Math.random())^v()).toString(36)),e}function Ft(e,t){return e?t?decodeURI(e.replace(/%25/g,"%2525")):decodeURIComponent(e):""}function qt(e,t,a){return"string"==typeof e?(e=encodeURI(e).replace(t,Ht),a&&(e=e.replace(/%25([0-9a-fA-F]{2})/g,"%$1")),e):null}function Ht(e){return"%"+((e=e.charCodeAt(0))>>4&15).toString(16)+(15&e).toString(16)}Mt.prototype.toString=function(){var e=[],t=this.f;t&&e.push(qt(t,Bt,!0),":");var a=this.c;return(a||"file"==t)&&(e.push("//"),(t=this.j)&&e.push(qt(t,Bt,!0),"@"),e.push(encodeURIComponent(String(a)).replace(/%25([0-9a-fA-F]{2})/g,"%$1")),null!=(a=this.h)&&e.push(":",String(a))),(a=this.g)&&(this.c&&"/"!=a.charAt(0)&&e.push("/"),e.push(qt(a,"/"==a.charAt(0)?Vt:zt,!0))),(a=this.b.toString())&&e.push("?",a),(a=this.i)&&e.push("#",qt(a,Gt)),e.join("")};var Bt=/[#\/\?@]/g,zt=/[#\?:]/g,Vt=/[#\?]/g,Jt=/[#\?@]/g,Gt=/#/g;function Wt(e,t){this.b=this.a=null,this.c=e||null,this.f=!!t}function Kt(e){e.a||(e.a=new xt,e.b=0,e.c&&function(e,t){if(e){e=e.split("&");for(var a=0;a2*e.c&&Pt(e)))}function Xt(e,t){return Kt(e),t=$t(e,t),jt(e.a.b,t)}function Qt(e,t,a){Yt(e,t),0=e.f}function na(e){return e.b?1:e.a?e.a.size:0}function ra(e,t){return e.b?e.b==t:!!e.a&&e.a.has(t)}function oa(e,t){e.a?e.a.add(t):e.b=t}function ia(e,t){e.b&&e.b==t?e.b=null:e.a&&e.a.has(t)&&e.a.delete(t)}function ca(e){var t,a;if(null!=e.b)return e.c.concat(e.b.s);if(null!=e.a&&0!==e.a.size){var s=e.c;try{for(var r=n(e.a.values()),o=r.next();!o.done;o=r.next()){var i=o.value;s=s.concat(i.s)}}catch(e){t={error:e}}finally{try{o&&!o.done&&(a=r.return)&&a.call(r)}finally{if(t)throw t.error}}return s}return k(e.c)}function da(){}function la(){this.a=new da}function ua(e,t,a){var s=a||"";try{Nt(e,(function(e,a){var n=e;h(e)&&(n=Ne(e)),t.push(s+a+"="+encodeURIComponent(n))}))}catch(e){throw t.push(s+"type="+encodeURIComponent("_badmap")),e}}function ha(e,t,a,s,n){try{t.onload=null,t.onerror=null,t.onabort=null,t.ontimeout=null,n(s)}catch(e){}}ta.prototype.cancel=function(){var e,t;if(this.c=ca(this),this.b)this.b.cancel(),this.b=null;else if(this.a&&0!==this.a.size){try{for(var a=n(this.a.values()),s=a.next();!s.done;s=a.next()){s.value.cancel()}}catch(t){e={error:t}}finally{try{s&&!s.done&&(t=a.return)&&t.call(a)}finally{if(e)throw e.error}}this.a.clear()}},da.prototype.stringify=function(e){return c.JSON.stringify(e,void 0)},da.prototype.parse=function(e){return c.JSON.parse(e,void 0)};var ma=c.JSON.parse;function fa(e){ke.call(this),this.headers=new xt,this.H=e||null,this.b=!1,this.s=this.a=null,this.B="",this.h=0,this.f="",this.g=this.A=this.l=this.u=!1,this.o=0,this.m=null,this.I=pa,this.D=this.F=!1}A(fa,ke);var pa="",ba=/^https?$/i,ya=["POST","PUT"];function ga(e){return"content-type"==e.toLowerCase()}function va(e,t){e.b=!1,e.a&&(e.g=!0,e.a.abort(),e.g=!1),e.f=t,e.h=5,Aa(e),Sa(e)}function Aa(e){e.u||(e.u=!0,e.dispatchEvent("complete"),e.dispatchEvent("error"))}function wa(e){if(e.b&&void 0!==i&&(!e.s[1]||4!=Ta(e)||2!=e.X()))if(e.l&&4==Ta(e))Fe(e.za,0,e);else if(e.dispatchEvent("readystatechange"),4==Ta(e)){e.b=!1;try{var t,a=e.X();e:switch(a){case 200:case 201:case 202:case 204:case 206:case 304:case 1223:var s=!0;break e;default:s=!1}if(!(t=s)){var n;if(n=0===a){var r=String(e.B).match(Lt)[1]||null;if(!r&&c.self&&c.self.location){var o=c.self.location.protocol;r=o.substr(0,o.length-1)}n=!ba.test(r?r.toLowerCase():"")}t=n}if(t)e.dispatchEvent("complete"),e.dispatchEvent("success");else{e.h=6;try{var d=2(d-=r))r=Math.max(0,n[c].b-100),i=!1;else try{ua(l,o,"req"+d+"_")}catch(e){s&&s(l)}}if(i){s=o.join("&");break e}}return e=e.g.splice(0,a),t.s=e,s}function Oa(e){e.a||e.j||(e.U=1,De(e.Aa,e),e.o=0)}function Za(e){return!(e.a||e.j||3<=e.o)&&(e.U++,e.j=at(y(e.Aa,e),Ha(e,e.o)),e.o++,!0)}function Ca(e){null!=e.s&&(c.clearTimeout(e.s),e.s=null)}function Ua(e){e.a=new mt(e,e.c,"rpc",e.U),null===e.i&&(e.a.B=e.l),e.a.O=0;var t=_t(e.la);Ct(t,"RID","rpc"),Ct(t,"SID",e.J),Ct(t,"CI",e.H?"0":"1"),Ct(t,"AID",e.P),Da(e,t),Ct(t,"TYPE","xmlhttp"),e.i&&e.l&&ka(t,e.i,e.l),e.D&&e.a.setTimeout(e.D);var a=e.a;e=e.ga,a.H=1,a.i=Ut(_t(t)),a.j=null,a.I=!0,gt(a,e)}function Fa(e){null!=e.m&&(c.clearTimeout(e.m),e.m=null)}function qa(e,t){var a=null;if(e.a==t){Fa(e),Ca(e),e.a=null;var s=2}else{if(!ra(e.b,t))return;a=t.s,ia(e.b,t),s=1}if(e.I=t.N,0!=e.v)if(t.b)if(1==s){a=t.j?t.j.length:0,t=v()-t.u;var n=e.u;(s=Ye()).dispatchEvent(new tt(s,a,t,n)),Ma(e)}else Oa(e);else if(3==(n=t.h)||0==n&&0=e.b.f-(e.h?1:0))&&(e.h?(e.g=t.s.concat(e.g),!0):!(1==e.v||2==e.v||e.u>=(e.Ia?0:e.Ja))&&(e.h=at(y(e.Ba,e,t),Ha(e,e.u)),e.u++,!0))}(e,t)||2==s&&Za(e)))switch(a&&0t?null:"string"==typeof e?e.charAt(t):e[t]}(n.L()),a=c.FormData&&e instanceof c.FormData,!(0<=S(ya,t))||s||a||n.set("Content-Type","application/x-www-form-urlencoded;charset=utf-8"),n.forEach((function(e,t){this.a.setRequestHeader(t,e)}),this),this.I&&(this.a.responseType=this.I),"withCredentials"in this.a&&this.a.withCredentials!==this.F&&(this.a.withCredentials=this.F);try{Ea(this),0=this.N)){var e=2*this.N;this.c.info("BP detection timer enabled: "+e),this.s=at(y(this.Sa,this),e)}},r.Sa=function(){this.s&&(this.s=null,this.c.info("BP detection timeout reached."),this.c.info("Buffering proxy detected and switch to long-polling!"),this.H=!1,this.F=!0,Pa(this),Ua(this))},r.Ra=function(){null!=this.m&&(this.m=null,Pa(this),Za(this),et(19))},r.Xa=function(e){e?(this.c.info("Successfully pinged google.com"),et(2)):(this.c.info("Failed to ping google.com"),et(1))},(r=Ga.prototype).ta=function(){},r.sa=function(){},r.ra=function(){},r.qa=function(){},r.Ha=function(){},Wa.prototype.a=function(e,t){return new Ka(e,t)},A(Ka,ke),(r=Ka.prototype).addEventListener=function(e,t,a,s){Ka.S.addEventListener.call(this,e,t,a,s)},r.removeEventListener=function(e,t,a,s){Ka.S.removeEventListener.call(this,e,t,a,s)},r.Oa=function(){this.a.f=this.f,this.h&&(this.a.C=!0);var e=this.a,t=this.l,a=this.b||void 0;et(0),e.fa=t,e.W=a||{},e.H=e.T,e.B=Va(e,null,e.fa),Ma(e)},r.close=function(){xa(this.a)},r.Pa=function(e){if("string"==typeof e){var t={};t.__data__=e,La(this.a,t)}else this.g?((t={}).__data__=Ne(e),La(this.a,t)):La(this.a,e)},r.G=function(){this.a.f=null,delete this.f,xa(this.a),delete this.a,Ka.S.G.call(this)},A(Ya,lt),A(Xa,ut),A(Qa,Ga),Qa.prototype.ta=function(){this.a.dispatchEvent("a")},Qa.prototype.sa=function(e){this.a.dispatchEvent(new Ya(e))},Qa.prototype.ra=function(e){this.a.dispatchEvent(new Xa(e))},Qa.prototype.qa=function(){this.a.dispatchEvent("b")},Wa.prototype.createWebChannel=Wa.prototype.a,Ka.prototype.send=Ka.prototype.Pa,Ka.prototype.open=Ka.prototype.Oa,Ka.prototype.close=Ka.prototype.close,st.NO_ERROR=0,st.TIMEOUT=8,st.HTTP_ERROR=6,nt.COMPLETE="complete",it.EventType=dt,dt.OPEN="a",dt.CLOSE="b",dt.ERROR="c",dt.MESSAGE="d",ke.prototype.listen=ke.prototype.va,fa.prototype.listenOnce=fa.prototype.wa,fa.prototype.getLastError=fa.prototype.Qa,fa.prototype.getLastErrorCode=fa.prototype.ua,fa.prototype.getStatus=fa.prototype.X,fa.prototype.getResponseJson=fa.prototype.Na,fa.prototype.getResponseText=fa.prototype.$,fa.prototype.send=fa.prototype.ba;var $a={createWebChannelTransport:function(){return new Wa},ErrorCode:st,EventType:nt,WebChannel:it,XhrIo:fa},es=$a.createWebChannelTransport,ts=$a.ErrorCode,as=$a.EventType,ss=$a.WebChannel,ns=$a.XhrIo;t.default=$a}.call(this,a(1))},function(e,t,a){const s=a(0),n=new THREE.Color;function r(e,t,a){n.set(a),e.uniforms?(e.uniforms[t].value.x=n.r,e.uniforms[t].value.y=n.g,e.uniforms[t].value.z=n.b):e[t].set(a)}function o(e,t,a,s,n,r){e.fillStyle=t,e.fillRect(a,s,n,r)}function i(e,t,a,s,n,r,o){let i;i=r>o?e.createLinearGradient(0,0,r,0):e.createLinearGradient(0,0,0,o),i.addColorStop(0,t),i.addColorStop(1,a),e.fillStyle=i,e.fillRect(s,n,r,o)}if(AFRAME.registerSystem("materials",{schema:{},init:function(){this.curve=null,this.panelMaterials=[];const e=localStorage.getItem("colorScheme")||"default";this.scheme=s.schemes[e],this.textureList=[],this.beatsCanvas=document.createElement("canvas"),this.beatsTexture=new THREE.CanvasTexture(this.beatsCanvas),this.generateBeatsTexture(),this.textureList.push(this.beatsTexture),this.envmapCanvas=document.createElement("canvas"),this.envmapTexture=new THREE.CanvasTexture(this.envmapCanvas),this.generateEnvmapTexture(),this.textureList.push(this.envmapTexture),this.fistsCanvas=document.createElement("canvas"),this.fistsTexture=new THREE.CanvasTexture(this.fistsCanvas),this.generateFistsTexture(),this.textureList.push(this.fistsTexture),"loading"===document.readyState?document.addEventListener("DOMContentLoaded",()=>{this.createMaterials()}):this.createMaterials()},play:function(){this.setColorScheme()},tick:function(e,t){this.aurora.uniforms.time.value=e,this.home.animate&&(this.home.uniforms.time.value=e),this.leftFistWeapon.uniforms.time.value=e,this.leftWeapon.uniforms.time.value=e,this.rightFistWeapon.uniforms.time.value=e,this.rightWeapon.uniforms.time.value=e,this.rings.uniforms.time.value=e,this.tube.uniforms.time.value=e},createMaterials:function(){const e=this.scheme;this.tunnel=new THREE.ShaderMaterial({vertexShader:a(108),fragmentShader:a(109),uniforms:{fogColor:{value:new THREE.Color(e.primary)},color1:{value:new THREE.Color(e.primary)},color2:{value:new THREE.Color(e.secondary)},color3:{value:new THREE.Color(e.tertiary)},scale:{value:1}},transparent:!0}),this.merkaba=new THREE.MeshBasicMaterial({color:new THREE.Color(e.primary)}),this.backglow=new THREE.MeshBasicMaterial({transparent:!0,map:(new THREE.TextureLoader).load(document.getElementById("backGlowImg").src),color:new THREE.Color(e.primary)}),this.textureList.push(this.backglow.map),this.aurora=new THREE.ShaderMaterial({vertexShader:a(110),fragmentShader:a(111),uniforms:{colorPrimary:{value:new THREE.Color(e.primary)},colorSecondary:{value:new THREE.Color(e.secondary)},time:{value:0}},transparent:!0}),this.rings=new THREE.ShaderMaterial({vertexShader:a(112),fragmentShader:a(113),uniforms:{colorPrimary:{value:new THREE.Color(e.primary)},colorSecondary:{value:new THREE.Color(e.secondary)},colorTertiary:{value:new THREE.Color(e.tertiary)},time:{value:0}},transparent:!0,depthWrite:!1}),this.moon=new THREE.ShaderMaterial({vertexShader:a(114),fragmentShader:a(115),uniforms:{map:{value:(new THREE.TextureLoader).load(document.getElementById("moonImg").src)},tint:{value:new THREE.Color(e.secondarybright)}},transparent:!0}),this.textureList.push(this.moon.uniforms.map.value),this.home=new THREE.ShaderMaterial({vertexShader:a(116),fragmentShader:a(117),uniforms:{color1:{value:new THREE.Color(e.primary)},color2:{value:new THREE.Color(e.secondary)},color3:{value:new THREE.Color(e.tertiary)},src:{value:(new THREE.TextureLoader).load(document.getElementById("homeShadowImg").src)},time:{value:0}},transparent:!0}),this.textureList.push(this.home.uniforms.src.value);const t=(new THREE.TextureLoader).load(document.getElementById("weaponImg").src);t.wrapS=THREE.RepeatWrapping,t.wrapT=THREE.RepeatWrapping,t.repeat.set(2,2),t.magFilter=THREE.NearestFilter,this.textureList.push(t),this.rightWeapon=new THREE.ShaderMaterial({vertexShader:a(25),fragmentShader:a(26),uniforms:{src:{value:t},color:{value:new THREE.Color(e.secondary)},thickness:{value:1.6},time:{value:0}},transparent:!0,blending:THREE.AdditiveBlending}),this.leftWeapon=new THREE.ShaderMaterial({vertexShader:a(25),fragmentShader:a(26),uniforms:{src:{value:t},color:{value:new THREE.Color(e.primary)},thickness:{value:1.6},time:{value:0}},transparent:!0,blending:THREE.AdditiveBlending}),this.leftFistWeapon=new THREE.ShaderMaterial({vertexShader:a(16),fragmentShader:a(27),uniforms:{src:{value:t},color:{value:new THREE.Color(e.primary)},time:{value:0}},side:THREE.DoubleSide,transparent:!0,blending:THREE.AdditiveBlending}),this.rightFistWeapon=new THREE.ShaderMaterial({vertexShader:a(16),fragmentShader:a(27),uniforms:{src:{value:t},color:{value:new THREE.Color(e.secondary)},time:{value:0}},side:THREE.DoubleSide,transparent:!0,blending:THREE.AdditiveBlending});const n=(new THREE.TextureLoader).load(document.getElementById("weaponImg").src),r=(new THREE.TextureLoader).load(document.getElementById("weaponHandleImg").src);n.mapping=THREE.SphericalReflectionMapping,this.textureList.push(n),this.textureList.push(r),this.leftWeaponHandle=new THREE.MeshStandardMaterial({roughness:.4,metalness:.5,color:new THREE.Color(e.primary),map:r,envMap:n}),this.rightWeaponHandle=new THREE.MeshStandardMaterial({roughness:.4,metalness:.5,color:new THREE.Color(e.secondary),map:r,envMap:n});const o=(new THREE.TextureLoader).load(document.getElementById("weapon2Img").src);o.mapping=THREE.SphericalReflectionMapping,this.leftFist=new THREE.MeshStandardMaterial({roughness:.3,metalness:.8,map:this.fistsTexture,envMap:o,transparent:!0}),this.rightFist=new THREE.MeshStandardMaterial({roughness:.3,metalness:.8,map:this.fistsTexture,envMap:o,transparent:!0}),this.beat=new THREE.MeshLambertMaterial({map:this.beatsTexture,transparent:!0}),this.blueBeatPieces=new THREE.MeshLambertMaterial({map:this.beatsTexture,color:e.secondary,emissive:e.secondary,emissiveIntensity:.2}),this.redBeatPieces=new THREE.MeshLambertMaterial({map:this.beatsTexture,color:e.primary,emissive:e.primary,emissiveIntensity:.2}),this.minePieces=new THREE.MeshLambertMaterial({color:e.tertiary,emissive:e.tertiary,emissiveIntensity:.2});const i=(new THREE.TextureLoader).load(document.getElementById("backGlowImg").src);this.redBeatGlow=new THREE.MeshBasicMaterial({color:e.primary,map:i,blending:THREE.AdditiveBlending,transparent:!0}),this.blueBeatGlow=new THREE.MeshBasicMaterial({color:e.secondary,map:i,blending:THREE.AdditiveBlending,transparent:!0}),this.textureList.push(i),this.stars=new THREE.PointsMaterial({size:1,map:(new THREE.TextureLoader).load(document.getElementById("starImg").src),blending:THREE.AdditiveBlending,transparent:!0,color:new THREE.Color(e.secondary)}),this.textureList.push(this.stars.map);const c=(new THREE.TextureLoader).load(document.getElementById("sideglowImg").src);this.textureList.push(c),this.leftsideglow=new THREE.MeshBasicMaterial({map:c,transparent:!0,blending:THREE.AdditiveBlending,depthTest:!1,side:THREE.BackSide,color:new THREE.Color(s.OFF)}),this.rightsideglow=new THREE.MeshBasicMaterial({map:c,transparent:!0,blending:THREE.AdditiveBlending,depthTest:!1,color:new THREE.Color(s.OFF)});const d=(new THREE.TextureLoader).load(document.getElementById("plumeImg").src);d.minFilter=THREE.LinearFilter,this.arrowBluePlume=new THREE.ShaderMaterial({vertexShader:a(7),fragmentShader:a(8),uniforms:{color:{value:new THREE.Color(e.secondary)},src:{value:d}},transparent:!0,depthTest:!1}),this.arrowRedPlume=new THREE.ShaderMaterial({vertexShader:a(7),fragmentShader:a(8),uniforms:{color:{value:new THREE.Color(e.primary)},src:{value:d}},transparent:!0,depthTest:!1}),this.dotBluePlume=new THREE.ShaderMaterial({vertexShader:a(7),fragmentShader:a(8),uniforms:{color:{value:new THREE.Color(e.secondary)},src:{value:d}},transparent:!0,depthTest:!1}),this.dotRedPlume=new THREE.ShaderMaterial({vertexShader:a(7),fragmentShader:a(8),uniforms:{color:{value:new THREE.Color(e.primary)},src:{value:d}},transparent:!0,depthTest:!1}),this.minePlume=new THREE.ShaderMaterial({vertexShader:a(7),fragmentShader:a(8),uniforms:{color:{value:new THREE.Color(e.tertiary)},src:{value:d}},transparent:!0,depthTest:!1});const l=(new THREE.TextureLoader).load(document.getElementById("tubeImg").src),u=(new THREE.TextureLoader).load(document.getElementById("tubeColorImg").src);l.generateMipmaps=!1,l.minFilter=THREE.LinearFilter,u.generateMipmaps=!1,u.minFilter=THREE.LinearFilter,this.tube=new THREE.ShaderMaterial({vertexShader:a(118),fragmentShader:a(119),uniforms:{time:{value:0},opacity:{value:0},src:{value:l},color:{value:u}},transparent:!0,depthTest:!1,side:THREE.BackSide});const h=(new THREE.TextureLoader).load(document.getElementById("handStarTrailImg").src);h.generateMipmaps=!1,h.minFilter=THREE.LinearFilter,this.handStarTrail=new THREE.ShaderMaterial({vertexShader:a(120),fragmentShader:a(121),uniforms:{colorPrimary:{value:new THREE.Color(e.primary)},colorSecondary:{value:new THREE.Color(e.secondary)},colorTertiary:{value:new THREE.Color(e.tertiary)},pulse:{value:0},src:{value:h}},transparent:!0,depthTest:!1,blending:THREE.AdditiveBlending,side:THREE.DoubleSide})},setColorScheme:function(e){this.el.sceneEl;const t=this.scheme=s.schemes[e]||s.schemes.default;r(this.arrowBluePlume,"color",t.secondary),r(this.arrowRedPlume,"color",t.primary),r(this.aurora,"colorPrimary",t.primary),r(this.aurora,"colorSecondary",t.secondary),r(this.backglow,"color",t.primary),r(this.blueBeatGlow,"color",t.secondary),r(this.blueBeatGlow,"color",t.secondary),r(this.blueBeatPieces,"color",t.secondary),r(this.blueBeatPieces,"emissive",t.secondary),r(this.dotBluePlume,"color",t.secondary),r(this.dotRedPlume,"color",t.primary),r(this.handStarTrail,"colorPrimary",t.primary),r(this.handStarTrail,"colorSecondary",t.secondary),r(this.handStarTrail,"colorTertiary",t.tertiary),r(this.home,"color1",t.primary),r(this.home,"color2",t.secondary),r(this.home,"color3",t.tertiary),r(this.leftFist,"color",t.primarybright),r(this.leftFistWeapon,"color",t.primary),r(this.leftWeapon,"color",t.primary),r(this.leftWeaponHandle,"color",t.primary),r(this.merkaba,"color",t.primary),r(this.minePieces,"color",t.tertiary),r(this.minePieces,"emissive",t.tertiary),r(this.minePlume,"color",t.tertiary),r(this.moon,"tint",t.secondarybright),r(this.redBeatGlow,"color",t.primary),r(this.redBeatGlow,"color",t.primary),r(this.redBeatPieces,"color",t.primary),r(this.redBeatPieces,"emissive",t.primary),r(this.rightFist,"color",t.secondarybright),r(this.rightWeapon,"color",t.secondary),r(this.rightFistWeapon,"color",t.secondary),r(this.rightWeaponHandle,"color",t.secondary),r(this.rings,"colorPrimary",t.primary),r(this.rings,"colorSecondary",t.secondary),r(this.rings,"colorTertiary",t.tertiary),r(this.stars,"color",t.secondary),r(this.tunnel,"fogColor",t.primary),r(this.tunnel,"color1",t.primary),r(this.tunnel,"color2",t.secondary),r(this.tunnel,"color3",t.tertiary),this.generateBeatsTexture(),this.generateEnvmapTexture(),this.generateFistsTexture(),document.querySelectorAll("a-entity[wall]").forEach(e=>{r(e.getObject3D("mesh").material,"colorTertiary",t.tertiary)}),this.panelMaterials.forEach(e=>{r(e,"colorPrimary",t.primary),r(e,"colorSecondary",t.secondary)}),r(this.curve,"fogColor",t.primary),r(this.curve,"color1",t.primary),r(this.curve,"color2",t.secondary)},generateBeatsTexture:function(){const e=this.scheme,t=new THREE.Color(e.primary),a=new THREE.Color(e.secondary),s=new THREE.Color(e.tertiary),n=this.beatsCanvas,r=n.getContext("2d");n.width=512,n.height=32,o(r,s.getStyle(),0,0,128,6),o(r,"#000",128,0,128,6),o(r,a.getStyle(),256,0,128,6),o(r,t.getStyle(),384,0,105,6),o(r,"#FFF",489,0,23,6),i(r,"#000000",a.getStyle(),0,6,512,4),i(r,"#000",t.getStyle(),0,10,512,5),i(r,"#000",s.getStyle(),0,15,512,4),i(r,`rgba(${a.r}, ${a.g}, ${a.b}, 0)`,a.getStyle(),0,19,512,5),i(r,`rgba(${t.r}, ${t.g}, ${t.b}, 0)`,t.getStyle(),0,24,512,4),i(r,`rgba(${s.r}, ${s.g}, ${s.b}, 0)`,s.getStyle(),0,28,512,4);const c=this.beatsTexture;return c.generateMipmaps=!1,c.magFilter=THREE.LinearFilter,c.minFilter=THREE.LinearFilter,c.needsUpdate=!0,c},generateFistsTexture:function(){const e=this.scheme,t=new THREE.Color(e.primarybright),a=new THREE.Color(e.secondarybright),s=this.fistsCanvas,n=s.getContext("2d");return s.width=8,s.height=128,i(n,t.getStyle(),`rgba(${t.r}, ${t.g}, ${t.b}, 0)`,0,0,4,128),i(n,a.getStyle(),`rgba(${a.r}, ${a.g}, ${a.b}, 0)`,4,0,4,128),this.fistsTexture.needsUpdate=!0,this.fistsTexture},generateEnvmapTexture:function(){const e=this.scheme,t=new THREE.Color(e.primary),a=new THREE.Color(e.secondary),s=document.getElementById("envmapTemplateImg");s.addEventListener("load",()=>{const e=s.width,n=s.height,r=this.envmapCanvas;r.width=e,r.height=n;const o=r.getContext("2d");o.drawImage(s,0,0);const i=o.getImageData(0,0,e,n),c=i.data;let d,l;for(let e=0;e{"mesh"===t.detail.type&&(e=this.el.getObject3D("mesh"),e&&this.applyMaterial(e))}),this.material.animate=this.data.animate},applyMaterial:function(e){e.detail&&(e=e.detail.model),this.data.recursive?e.traverse(e=>{"Mesh"===e.type&&(e.material=this.material)}):e.material=this.material}}),AFRAME.registerComponent("materials-color-menu",{play:function(){this.text=document.getElementById("colorName")},events:{mouseenter:function(e){this.text.setAttribute("text","value",e.target.dataset.colorName)},mouseleave:function(e){this.text.setAttribute("text","value","")},click:function(e){this.el.sceneEl.systems.materials.setColorScheme(e.target.dataset.colorScheme),this.el.sceneEl.emit("colorschemechange",e.target.dataset.colorScheme,!1)}}}),window.AFRAME){const t=["materials","materials-color-menu"],a=[],s=["materials"];if(e.hot.dispose(e=>{e.needsReplace=!0,t.forEach(e=>{delete AFRAME.components[e];const t=AFRAME.scenes[0].querySelectorAll(`[${e}]`);for(let a=0;a{delete AFRAME.shaders[e];const t=AFRAME.scenes[0].querySelectorAll("[material]");for(let a=0;a{delete AFRAME.systems[e],delete AFRAME.scenes[0].systems[e]})}),e.hot.data&&e.hot.data.needsReplace){t.forEach(e=>{const t="data-__hot-"+e,a=document.querySelectorAll(`[${t}]`);for(let s=0;s{e.needsReplace=!0,t.forEach(e=>{delete AFRAME.components[e];const t=AFRAME.scenes[0].querySelectorAll(`[${e}]`);for(let a=0;a{delete AFRAME.shaders[e];const t=AFRAME.scenes[0].querySelectorAll("[material]");for(let a=0;a{delete AFRAME.systems[e],delete AFRAME.scenes[0].systems[e]})}),e.hot.data&&e.hot.data.needsReplace){t.forEach(e=>{const t="data-__hot-"+e,a=document.querySelectorAll(`[${t}]`);for(let s=0;s{this.el.object3D.visible=!1,setTimeout(()=>{this.el.components.layout.update(),this.el.object3D.visible=!0},150)})},events:{click:function(e){this.el.sceneEl.emit("menudifficultyselect",e.target.closest(".difficultyOption").dataset.difficulty,!1)}}}),window.AFRAME){const t=["menu-difficulty-select"],a=[],s=[];if(e.hot.dispose(e=>{e.needsReplace=!0,t.forEach(e=>{delete AFRAME.components[e];const t=AFRAME.scenes[0].querySelectorAll(`[${e}]`);for(let a=0;a{delete AFRAME.shaders[e];const t=AFRAME.scenes[0].querySelectorAll("[material]");for(let a=0;a{delete AFRAME.systems[e],delete AFRAME.scenes[0].systems[e]})}),e.hot.data&&e.hot.data.needsReplace){t.forEach(e=>{const t="data-__hot-"+e,a=document.querySelectorAll(`[${t}]`);for(let s=0;s{this.el.sceneEl.emit("genreselect",e.target.closest(".genre").dataset.bindForKey)})}}),window.AFRAME){const t=["menu-genre"],a=[],s=[];if(e.hot.dispose(e=>{e.needsReplace=!0,t.forEach(e=>{delete AFRAME.components[e];const t=AFRAME.scenes[0].querySelectorAll(`[${e}]`);for(let a=0;a{delete AFRAME.shaders[e];const t=AFRAME.scenes[0].querySelectorAll("[material]");for(let a=0;a{delete AFRAME.systems[e],delete AFRAME.scenes[0].systems[e]})}),e.hot.data&&e.hot.data.needsReplace){t.forEach(e=>{const t="data-__hot-"+e,a=document.querySelectorAll(`[${t}]`);for(let s=0;s{e.needsReplace=!0,t.forEach(e=>{delete AFRAME.components[e];const t=AFRAME.scenes[0].querySelectorAll(`[${e}]`);for(let a=0;a{delete AFRAME.shaders[e];const t=AFRAME.scenes[0].querySelectorAll("[material]");for(let a=0;a{delete AFRAME.systems[e],delete AFRAME.scenes[0].systems[e]})}),e.hot.data&&e.hot.data.needsReplace){t.forEach(e=>{const t="data-__hot-"+e,a=document.querySelectorAll(`[${t}]`);for(let s=0;s{const t=e.target.closest("[data-mode]"),a=t.dataset.mode,s=t.dataset.name;this.el.sceneEl.emit("gamemode",a,!1),this.data.hasVR&&localStorage.setItem("gameMode",s),this.setModeOption(s)})},update:function(){this.data.hasVR?(this.setModeOption(localStorage.getItem("gameMode")||"punchvr"),this.el.sceneEl.emit("gamemode",r[localStorage.getItem("gameMode")||"punchvr"])):this.setModeOption("ride2d")},setModeOption:function(e){const t=this.el.querySelectorAll(".modeItem");document.getElementById("modeIcon").object3D.position.y=n[e];for(let a=0;a{e.needsReplace=!0,t.forEach(e=>{delete AFRAME.components[e];const t=AFRAME.scenes[0].querySelectorAll(`[${e}]`);for(let a=0;a{delete AFRAME.shaders[e];const t=AFRAME.scenes[0].querySelectorAll("[material]");for(let a=0;a{delete AFRAME.systems[e],delete AFRAME.scenes[0].systems[e]})}),e.hot.data&&e.hot.data.needsReplace){t.forEach(e=>{const t="data-__hot-"+e,a=document.querySelectorAll(`[${t}]`);for(let s=0;s{this.el.components.animation__scaledown.beginAnimation(),this.el.object3D.position.z=0},800))}}),window.AFRAME){const t=["menu-playlist-button"],a=[],s=[];if(e.hot.dispose(e=>{e.needsReplace=!0,t.forEach(e=>{delete AFRAME.components[e];const t=AFRAME.scenes[0].querySelectorAll(`[${e}]`);for(let a=0;a{delete AFRAME.shaders[e];const t=AFRAME.scenes[0].querySelectorAll("[material]");for(let a=0;a{delete AFRAME.systems[e],delete AFRAME.scenes[0].systems[e]})}),e.hot.data&&e.hot.data.needsReplace){t.forEach(e=>{const t="data-__hot-"+e,a=document.querySelectorAll(`[${t}]`);for(let s=0;s{const t=e.target.closest(".playlist");this.eventDetail.id=t.dataset.playlist,this.eventDetail.title=t.dataset.title,this.el.sceneEl.emit("playlistselect",this.eventDetail)})}}),window.AFRAME){const t=["menu-playlist"],a=[],s=[];if(e.hot.dispose(e=>{e.needsReplace=!0,t.forEach(e=>{delete AFRAME.components[e];const t=AFRAME.scenes[0].querySelectorAll(`[${e}]`);for(let a=0;a{delete AFRAME.shaders[e];const t=AFRAME.scenes[0].querySelectorAll("[material]");for(let a=0;a{delete AFRAME.systems[e],delete AFRAME.scenes[0].systems[e]})}),e.hot.data&&e.hot.data.needsReplace){t.forEach(e=>{const t="data-__hot-"+e,a=document.querySelectorAll(`[${t}]`);for(let s=0;s{e.needsReplace=!0,t.forEach(e=>{delete AFRAME.components[e];const t=AFRAME.scenes[0].querySelectorAll(`[${e}]`);for(let a=0;a{delete AFRAME.shaders[e];const t=AFRAME.scenes[0].querySelectorAll("[material]");for(let a=0;a{delete AFRAME.systems[e],delete AFRAME.scenes[0].systems[e]})}),e.hot.data&&e.hot.data.needsReplace){t.forEach(e=>{const t="data-__hot-"+e,a=document.querySelectorAll(`[${t}]`);for(let s=0;s{e.needsReplace=!0,t.forEach(e=>{delete AFRAME.components[e];const t=AFRAME.scenes[0].querySelectorAll(`[${e}]`);for(let a=0;a{delete AFRAME.shaders[e];const t=AFRAME.scenes[0].querySelectorAll("[material]");for(let a=0;a{delete AFRAME.systems[e],delete AFRAME.scenes[0].systems[e]})}),e.hot.data&&e.hot.data.needsReplace){t.forEach(e=>{const t="data-__hot-"+e,a=document.querySelectorAll(`[${t}]`);for(let s=0;s{e.needsReplace=!0,t.forEach(e=>{delete AFRAME.components[e];const t=AFRAME.scenes[0].querySelectorAll(`[${e}]`);for(let a=0;a{delete AFRAME.shaders[e];const t=AFRAME.scenes[0].querySelectorAll("[material]");for(let a=0;a{delete AFRAME.systems[e],delete AFRAME.scenes[0].systems[e]})}),e.hot.data&&e.hot.data.needsReplace){t.forEach(e=>{const t="data-__hot-"+e,a=document.querySelectorAll(`[${t}]`);for(let s=0;s{e.needsReplace=!0,t.forEach(e=>{delete AFRAME.components[e];const t=AFRAME.scenes[0].querySelectorAll(`[${e}]`);for(let a=0;a{delete AFRAME.shaders[e];const t=AFRAME.scenes[0].querySelectorAll("[material]");for(let a=0;a{delete AFRAME.systems[e],delete AFRAME.scenes[0].systems[e]})}),e.hot.data&&e.hot.data.needsReplace){t.forEach(e=>{const t="data-__hot-"+e,a=document.querySelectorAll(`[${t}]`);for(let s=0;s{e.needsReplace=!0,t.forEach(e=>{delete AFRAME.components[e];const t=AFRAME.scenes[0].querySelectorAll(`[${e}]`);for(let a=0;a{delete AFRAME.shaders[e];const t=AFRAME.scenes[0].querySelectorAll("[material]");for(let a=0;a{delete AFRAME.systems[e],delete AFRAME.scenes[0].systems[e]})}),e.hot.data&&e.hot.data.needsReplace){t.forEach(e=>{const t="data-__hot-"+e,a=document.querySelectorAll(`[${t}]`);for(let s=0;s{e.needsReplace=!0,t.forEach(e=>{delete AFRAME.components[e];const t=AFRAME.scenes[0].querySelectorAll(`[${e}]`);for(let a=0;a{delete AFRAME.shaders[e];const t=AFRAME.scenes[0].querySelectorAll("[material]");for(let a=0;a{delete AFRAME.systems[e],delete AFRAME.scenes[0].systems[e]})}),e.hot.data&&e.hot.data.needsReplace){t.forEach(e=>{const t="data-__hot-"+e,a=document.querySelectorAll(`[${t}]`);for(let s=0;s{27===e.keyCode&&this.pauseGame()}),this.el.sceneEl.addEventListener("controllerconnected",e=>{"vive-controls"===e.detail.name?this.el.addEventListener("menudown",this.pauseGame):(this.el.addEventListener("thumbstickdown",this.pauseGame),this.el.addEventListener("trackpaddown",this.pauseGame))}),document.addEventListener("visibilitychange",()=>{"hidden"===document.visibilityState&&this.pauseGame()})},pauseGame:function(){this.data.enabled&&this.el.sceneEl.emit("pausegame",null,!1)}}),window.AFRAME){const t=["pauser"],a=[],s=[];if(e.hot.dispose(e=>{e.needsReplace=!0,t.forEach(e=>{delete AFRAME.components[e];const t=AFRAME.scenes[0].querySelectorAll(`[${e}]`);for(let a=0;a{delete AFRAME.shaders[e];const t=AFRAME.scenes[0].querySelectorAll("[material]");for(let a=0;a{delete AFRAME.systems[e],delete AFRAME.scenes[0].systems[e]})}),e.hot.data&&e.hot.data.needsReplace){t.forEach(e=>{const t="data-__hot-"+e,a=document.querySelectorAll(`[${t}]`);for(let s=0;s{this.data.enabled&&this.system.playSound(this.src,this.data.volume)})},update:function(){this.src=this.data.sound,this.data.sound.startsWith("#")&&(this.src=document.querySelector(this.data.sound).getAttribute("src"))}}),window.AFRAME){const t=["play-sound"],a=[],s=["play-sound"];if(e.hot.dispose(e=>{e.needsReplace=!0,t.forEach(e=>{delete AFRAME.components[e];const t=AFRAME.scenes[0].querySelectorAll(`[${e}]`);for(let a=0;a{delete AFRAME.shaders[e];const t=AFRAME.scenes[0].querySelectorAll("[material]");for(let a=0;a{delete AFRAME.systems[e],delete AFRAME.scenes[0].systems[e]})}),e.hot.data&&e.hot.data.needsReplace){t.forEach(e=>{const t="data-__hot-"+e,a=document.querySelectorAll(`[${t}]`);for(let s=0;s3&&e.shift(),e.push(this.el.object3D.position.y),this.height=function(e){e.sort(s);const t=e.length/2;return t%1?e[t-.5]:(e[t-1]+e[t])/2}(e);const t=(a=this.height,n=1.6,r=2.2,Math.min(Math.max(a,n),r));var a,n,r,o,i;this.beatOffset=(i=0)+(.2-i)*(t-(o=1.6))/(2.2-o)}}),window.AFRAME){const t=["player-height"],a=[],s=[];if(e.hot.dispose(e=>{e.needsReplace=!0,t.forEach(e=>{delete AFRAME.components[e];const t=AFRAME.scenes[0].querySelectorAll(`[${e}]`);for(let a=0;a{delete AFRAME.shaders[e];const t=AFRAME.scenes[0].querySelectorAll("[material]");for(let a=0;a{delete AFRAME.systems[e],delete AFRAME.scenes[0].systems[e]})}),e.hot.data&&e.hot.data.needsReplace){t.forEach(e=>{const t="data-__hot-"+e,a=document.querySelectorAll(`[${t}]`);for(let s=0;sthis.curveFollowRig.object3D.position.z+10)this.returnToPool();else for(let e=0;e{e.needsReplace=!0,t.forEach(e=>{delete AFRAME.components[e];const t=AFRAME.scenes[0].querySelectorAll(`[${e}]`);for(let a=0;a{delete AFRAME.shaders[e];const t=AFRAME.scenes[0].querySelectorAll("[material]");for(let a=0;a{delete AFRAME.systems[e],delete AFRAME.scenes[0].systems[e]})}),e.hot.data&&e.hot.data.needsReplace){t.forEach(e=>{const t="data-__hot-"+e,a=document.querySelectorAll(`[${t}]`);for(let s=0;s{e.needsReplace=!0,t.forEach(e=>{delete AFRAME.components[e];const t=AFRAME.scenes[0].querySelectorAll(`[${e}]`);for(let a=0;a{delete AFRAME.shaders[e];const t=AFRAME.scenes[0].querySelectorAll("[material]");for(let a=0;a{delete AFRAME.systems[e],delete AFRAME.scenes[0].systems[e]})}),e.hot.data&&e.hot.data.needsReplace){t.forEach(e=>{const t="data-__hot-"+e,a=document.querySelectorAll(`[${t}]`);for(let s=0;s{e.needsReplace=!0,t.forEach(e=>{delete AFRAME.components[e];const t=AFRAME.scenes[0].querySelectorAll(`[${e}]`);for(let a=0;a{delete AFRAME.shaders[e];const t=AFRAME.scenes[0].querySelectorAll("[material]");for(let a=0;a{delete AFRAME.systems[e],delete AFRAME.scenes[0].systems[e]})}),e.hot.data&&e.hot.data.needsReplace){t.forEach(e=>{const t="data-__hot-"+e,a=document.querySelectorAll(`[${t}]`);for(let s=0;s{e.addEventListener("menudown",this.recenter),e.addEventListener("thumbstickdown",this.recenter)}),this.el.addEventListener("recenter",this.recenter)},recenter:(s=new THREE.Euler,n=new THREE.Matrix4,r=new THREE.Matrix4,o=new THREE.Matrix4,function(){const e=this.el;if(!this.data.enabled)return;const t=e.sceneEl.camera.el.object3D;n.identity(),s.set(0,-1*t.rotation.y,0),r.makeRotationFromEuler(s),o.makeTranslation(-1*t.position.x,0,-1*t.position.z),n.multiply(r).multiply(o),n.decompose(e.object3D.position,e.object3D.quaternion,e.object3D.scale),e.object3D.updateMatrixWorld(!0),e.emit("recentered",null,!1)})}),window.AFRAME){const t=["recenter"],a=[],s=[];if(e.hot.dispose(e=>{e.needsReplace=!0,t.forEach(e=>{delete AFRAME.components[e];const t=AFRAME.scenes[0].querySelectorAll(`[${e}]`);for(let a=0;a{delete AFRAME.shaders[e];const t=AFRAME.scenes[0].querySelectorAll("[material]");for(let a=0;a{delete AFRAME.systems[e],delete AFRAME.scenes[0].systems[e]})}),e.hot.data&&e.hot.data.needsReplace){t.forEach(e=>{const t="data-__hot-"+e,a=document.querySelectorAll(`[${t}]`);for(let s=0;s{e.needsReplace=!0,t.forEach(e=>{delete AFRAME.components[e];const t=AFRAME.scenes[0].querySelectorAll(`[${e}]`);for(let a=0;a{delete AFRAME.shaders[e];const t=AFRAME.scenes[0].querySelectorAll("[material]");for(let a=0;a{delete AFRAME.systems[e],delete AFRAME.scenes[0].systems[e]})}),e.hot.data&&e.hot.data.needsReplace){t.forEach(e=>{const t="data-__hot-"+e,a=document.querySelectorAll(`[${t}]`);for(let s=0;s{e.needsReplace=!0,t.forEach(e=>{delete AFRAME.components[e];const t=AFRAME.scenes[0].querySelectorAll(`[${e}]`);for(let a=0;a{delete AFRAME.shaders[e];const t=AFRAME.scenes[0].querySelectorAll("[material]");for(let a=0;a{delete AFRAME.systems[e],delete AFRAME.scenes[0].systems[e]})}),e.hot.data&&e.hot.data.needsReplace){t.forEach(e=>{const t="data-__hot-"+e,a=document.querySelectorAll(`[${t}]`);for(let s=0;s{this.draw(a,t)}}e.length!==this.lastNumResults&&this.updateAlphaMap(e.length),this.lastNumResults=e.length},draw:function(e,t){this.ctx.drawImage(e,0,t*(512/384*64),64,512/384*64),this.el.getObject3D("mesh").material.map.needsUpdate=!0},clearCanvas:function(){const e=this.canvas;this.ctx.fillStyle="#111",this.ctx.fillRect(0,0,e.width,e.height)},updateAlphaMap:function(e){const t=this.alphaCanvas,a=this.alphaCtx;a.fillStyle="#FFF",a.fillRect(0,0,t.width,t.height),a.fillStyle="#000",a.fillRect(0,e*(512/384*64),t.width,t.height-e*(512/384*64)),this.el.getObject3D("mesh").material.alphaMap.needsUpdate=!0,this.el.getObject3D("mesh").material.needsUpdate=!0}}),window.AFRAME){const t=["search-thumbnail-atlas"],a=[],s=[];if(e.hot.dispose(e=>{e.needsReplace=!0,t.forEach(e=>{delete AFRAME.components[e];const t=AFRAME.scenes[0].querySelectorAll(`[${e}]`);for(let a=0;a{delete AFRAME.shaders[e];const t=AFRAME.scenes[0].querySelectorAll("[material]");for(let a=0;a{delete AFRAME.systems[e],delete AFRAME.scenes[0].systems[e]})}),e.hot.data&&e.hot.data.needsReplace){t.forEach(e=>{const t="data-__hot-"+e,a=document.querySelectorAll(`[${t}]`);for(let s=0;s0;t--){const a=Math.floor(Math.random()*(t+1));[e[t],e[a]]=[e[a],e[t]]}}(this.popularHits),this.queryObject={hitsPerPage:0,query:""},this.el.sceneEl.addEventListener("searchclear",()=>{this.search("")})},update:function(e){this.popularHits&&(this.search(this.data.query),e.query&&!this.data.query&&(this.keyboardEl.components["super-keyboard"].data.value="",this.keyboardEl.components["super-keyboard"].updateTextInput("")),this.debouncedSearch=s(this.search.bind(this),1e3))},play:function(){this.el.sceneEl.emit("searchresults",this.eventDetail),this.search("")},events:{superkeyboardchange:function(e){e.target===this.el&&this.debouncedSearch(e.detail.value)}},search:function(e){if(!e&&"All"===this.data.difficultyFilter&&!this.data.genre&&!this.data.playlist&&this.popularHits)return this.eventDetail.results=this.popularHits,this.eventDetail.query="",void this.el.sceneEl.emit("searchresults",this.eventDetail);if(this.eventDetail.query=e,this.queryObject.query=e,this.queryObject.hitsPerPage=e?30:150,"favorites"===this.data.playlist)return this.eventDetail.results=JSON.parse(localStorage.getItem("favorites-v2")),void this.el.sceneEl.emit("searchresults",this.eventDetail);let t="https://beatsaver.com/api/search/text/CURRENT_PAGE_INDEX?sortOrder=Rating&automapper=true&q="+encodeURIComponent(e);if(this.data.playlist)t=`https://api.beatsaver.com/playlists/id/${this.data.playlist}/CURRENT_PAGE_INDEX`;else if(this.data.genre){const e={Pop:"pop","R&B":"rb",Rap:"hip-hop-rap",Rock:"rock",Soundtrack:"tv-movie-soundtrack","Video Games":"video-game-soundtrack",Electronic:"electronic","Hip Hop":"hip-hop-rap",House:"house","J-Pop":"j-pop","K-Pop":"k-pop",Meme:"comedy-meme",Alternative:"alternative",Anime:"anime",Comedy:"comedy-meme",Dubstep:"dubstep",Dance:"dance"}[this.data.genre];t="https://beatsaver.com/api/search/text/CURRENT_PAGE_INDEX?sortOrder=Rating&automapper=true&tags="+encodeURIComponent(e)}else if(e&&e.length<3)return;fetch(t.replaceAll("CURRENT_PAGE_INDEX",0)).then(e=>e.json()).then(e=>{var a=(e.docs||e.maps).map(n);this.eventDetail.results=a,this.eventDetail.url=t,this.eventDetail.urlPage=0,this.el.sceneEl.emit("searchresults",this.eventDetail)})}}),AFRAME.registerComponent("search-result-list",{init:function(){new MutationObserver(e=>{for(let t=0;t{e.needsReplace=!0,t.forEach(e=>{delete AFRAME.components[e];const t=AFRAME.scenes[0].querySelectorAll(`[${e}]`);for(let a=0;a{delete AFRAME.shaders[e];const t=AFRAME.scenes[0].querySelectorAll("[material]");for(let a=0;a{delete AFRAME.systems[e],delete AFRAME.scenes[0].systems[e]})}),e.hot.data&&e.hot.data.needsReplace){t.forEach(e=>{const t="data-__hot-"+e,a=document.querySelectorAll(`[${t}]`);for(let s=0;s=t||a<0||b&&e-d>=r}function w(){var e=m();if(A(e))return S(e);i=setTimeout(w,function(e){var a=t-(e-c);return b?h(a,r-(e-d)):a}(e))}function S(e){return i=void 0,y&&s?g(e):(s=n=void 0,o)}function E(){var e=m(),a=A(e);if(s=arguments,n=this,c=e,a){if(void 0===i)return v(c);if(b)return i=setTimeout(w,t),g(c)}return void 0===i&&(i=setTimeout(w,t)),o}return t=p(t)||0,f(a)&&(l=!!a.leading,r=(b="maxWait"in a)?u(p(a.maxWait)||0,t):r,y="trailing"in a?!!a.trailing:y),E.cancel=function(){void 0!==i&&clearTimeout(i),d=0,s=c=n=i=void 0},E.flush=function(){return void 0===i?o:S(m())},E}}).call(this,a(1))},function(e,t){e.exports=[{id:"2144",name:"Shut Up and Dance - WALK THE MOON",description:"Difficulties: Expert+ (Added 11/15), Expert, Hard, Normal\r\nYouTube Preview: https://youtu.be/x9hJbTlPQUY",uploader:{id:30311,name:"bennydabeast",uniqueSet:!0,hash:"5cff0b7298cc5a672c84e98d",avatar:"https://cdn.beatsaver.com/avatar/30311.jpg",type:"SIMPLE"},metadata:{bpm:128,duration:200,songName:"Shut Up and Dance",songSubName:"WALK THE MOON",songAuthorName:"BennyDaBeast",levelAuthorName:"bennydabeast"},stats:{plays:0,downloads:47856,upvotes:15705,downvotes:243,score:.9584},uploaded:"2018-11-21T01:27:00Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"89cf8bb07afb3c59ae7b5ac00337d62261c36fb4",key:"2144",state:"Published",createdAt:"2018-11-21T01:27:00Z",sageScore:3,diffs:[{njs:10,offset:0,notes:301,bombs:4,obstacles:24,nps:1.578,length:407,characteristic:"Standard",difficulty:"Normal",events:380,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:190.781,paritySummary:{errors:64,warns:19,resets:0}},{njs:10,offset:0,notes:486,bombs:4,obstacles:24,nps:2.547,length:407,characteristic:"Standard",difficulty:"Hard",events:380,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:190.781,paritySummary:{errors:76,warns:34,resets:0}},{njs:10,offset:0,notes:620,bombs:4,obstacles:24,nps:3.246,length:407.5,characteristic:"Standard",difficulty:"Expert",events:380,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:191.016,paritySummary:{errors:88,warns:68,resets:0}},{njs:12,offset:0,notes:894,bombs:0,obstacles:0,nps:4.68,length:407.5,characteristic:"Standard",difficulty:"ExpertPlus",events:380,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:191.016,paritySummary:{errors:99,warns:120,resets:0}}],downloadURL:"https://cdn.beatsaver.com/89cf8bb07afb3c59ae7b5ac00337d62261c36fb4.zip",coverURL:"https://cdn.beatsaver.com/89cf8bb07afb3c59ae7b5ac00337d62261c36fb4.jpg",previewURL:"https://cdn.beatsaver.com/89cf8bb07afb3c59ae7b5ac00337d62261c36fb4.mp3"}],createdAt:"2018-11-21T01:27:00Z",updatedAt:"2018-11-21T01:27:00Z",lastPublishedAt:"2018-11-21T01:27:00Z"},{id:"66e6",name:"League of Legends - Legends never die (ft. Against The Current)",description:"A special request from Prima1URGE",uploader:{id:4285107,name:"kikaeaeon",uniqueSet:!0,hash:"5cff0b7498cc5a672c85109b",avatar:"https://cdn.beatsaver.com/avatar/103715469822816256.png",type:"DISCORD"},metadata:{bpm:140,duration:236,songName:"Legends Never Die",songSubName:"",songAuthorName:"League of Legends & Against The Current",levelAuthorName:"KikaeAeon"},stats:{plays:0,downloads:30647,upvotes:10346,downvotes:160,score:.9549},uploaded:"2019-09-30T10:19:45.606Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"732bd4072b89d4b3bf0e63db812a7ffc3096e837",key:"66e6",state:"Published",createdAt:"2019-09-30T10:19:45.606Z",sageScore:6,diffs:[{njs:12,offset:0,notes:705,bombs:0,obstacles:10,nps:3.041,length:541,characteristic:"Standard",difficulty:"Expert",events:1693,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:231.857,paritySummary:{errors:4,warns:2,resets:0}},{njs:16,offset:0,notes:876,bombs:0,obstacles:10,nps:3.778,length:541,characteristic:"Standard",difficulty:"ExpertPlus",events:1693,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:231.857,paritySummary:{errors:3,warns:2,resets:0}}],downloadURL:"https://cdn.beatsaver.com/732bd4072b89d4b3bf0e63db812a7ffc3096e837.zip",coverURL:"https://cdn.beatsaver.com/732bd4072b89d4b3bf0e63db812a7ffc3096e837.jpg",previewURL:"https://cdn.beatsaver.com/732bd4072b89d4b3bf0e63db812a7ffc3096e837.mp3"}],createdAt:"2019-09-30T10:19:45.606Z",updatedAt:"2019-09-30T10:19:45.606Z",lastPublishedAt:"2019-09-30T10:19:45.606Z"},{id:"570",name:"Mr. Blue Sky | Electric Light Orchestra",description:"Channel your inner Baby Groot. Normal, Hard, Expert\r\nSpecial thanks to BennydaBeast for his help on this track!",uploader:{id:41378,name:"greatyazer",uniqueSet:!0,hash:"5cff0b7298cc5a672c84ea71",avatar:"https://www.gravatar.com/avatar/5cff0b7298cc5a672c84ea71?d=retro",type:"SIMPLE"},metadata:{bpm:174,duration:222,songName:"Mr. Blue Sky",songSubName:"Electric Light Orchestra",songAuthorName:"GreatYazer",levelAuthorName:"greatyazer"},stats:{plays:0,downloads:53449,upvotes:29661,downvotes:731,score:.9547},uploaded:"2018-06-16T16:53:34Z",automapper:!1,ranked:!0,qualified:!1,versions:[{hash:"236173d5ba7dc379d480b9cb5fb6b4fa5abe77da",key:"570",state:"Published",createdAt:"2018-06-16T16:53:34Z",sageScore:5,diffs:[{njs:10,offset:0,notes:462,bombs:0,obstacles:25,nps:2.228,length:601.313,characteristic:"Standard",difficulty:"Normal",events:816,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:207.349,paritySummary:{errors:132,warns:16,resets:0},stars:1.46},{njs:10,offset:0,notes:639,bombs:0,obstacles:40,nps:3.082,length:601.313,characteristic:"Standard",difficulty:"Hard",events:816,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:207.349,paritySummary:{errors:109,warns:27,resets:0}},{njs:10,offset:0,notes:825,bombs:0,obstacles:40,nps:3.979,length:601.313,characteristic:"Standard",difficulty:"Expert",events:816,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:207.349,paritySummary:{errors:119,warns:57,resets:0}}],downloadURL:"https://cdn.beatsaver.com/236173d5ba7dc379d480b9cb5fb6b4fa5abe77da.zip",coverURL:"https://cdn.beatsaver.com/236173d5ba7dc379d480b9cb5fb6b4fa5abe77da.jpg",previewURL:"https://cdn.beatsaver.com/236173d5ba7dc379d480b9cb5fb6b4fa5abe77da.mp3"}],createdAt:"2018-06-16T16:53:34Z",updatedAt:"2018-06-16T16:53:34Z",lastPublishedAt:"2018-06-16T16:53:34Z"},{id:"3cf5",name:"Caramelldansen",description:"Preview: https://youtu.be/V5p0HOzunY0\n\n\nTwitter: https://twitter.com/Dack731",uploader:{id:4285250,name:"dack",uniqueSet:!0,hash:"5cff0b7598cc5a672c852c6f",avatar:"https://cdn.beatsaver.com/avatar/297344689798119424.png",type:"DISCORD"},metadata:{bpm:165,duration:178,songName:"Caramelldansen (Speedcake Remix)",songSubName:"Caramell",songAuthorName:"Dack",levelAuthorName:"Dack"},stats:{plays:0,downloads:30551,upvotes:19321,downvotes:422,score:.9543},uploaded:"2019-03-09T22:54:54Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"cf5e32d6b7f30095f7198da5894139c92336cad7",key:"3cf5",state:"Published",createdAt:"2019-03-09T22:54:54Z",sageScore:4,diffs:[{njs:14,offset:0,notes:722,bombs:52,obstacles:28,nps:4.254,length:466.75,characteristic:"Standard",difficulty:"Expert",events:597,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:169.727,paritySummary:{errors:37,warns:23,resets:0}}],downloadURL:"https://cdn.beatsaver.com/cf5e32d6b7f30095f7198da5894139c92336cad7.zip",coverURL:"https://cdn.beatsaver.com/cf5e32d6b7f30095f7198da5894139c92336cad7.jpg",previewURL:"https://cdn.beatsaver.com/cf5e32d6b7f30095f7198da5894139c92336cad7.mp3"}],createdAt:"2019-03-09T22:54:54Z",updatedAt:"2019-03-09T22:54:54Z",lastPublishedAt:"2019-03-09T22:54:54Z"},{id:"133b",name:"Daddy - PSY",description:"Insanely fun dance map! Enjoy!\nSee the map in action (Expert): https://www.youtube.com/watch?v=7jOIdfo0j4Q\n\nThank you to my playtesters:\nDuoVR (https://www.twitch.tv/duovr)\nSourgurl (https://www.twitch.tv/sourgurl)\nRexxxzi (https://www.twitch.tv/rexxxzi)\nAshleyriott (https://www.twitch.tv/ashleyriott)",uploader:{id:38202,name:"fafurion",uniqueSet:!1,hash:"5cff0b7398cc5a672c84f945",avatar:"https://www.gravatar.com/avatar/5cff0b7398cc5a672c84f945?d=retro",type:"SIMPLE"},metadata:{bpm:132,duration:232,songName:"Daddy",songSubName:"PSY",songAuthorName:"Fafurion",levelAuthorName:"fafurion"},stats:{plays:0,downloads:21881,upvotes:11227,downvotes:192,score:.9542},uploaded:"2018-09-02T23:43:45Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"dc489921185f92dfecb9cb07b84fc556123bd134",key:"133b",state:"Published",createdAt:"2018-09-02T23:43:45Z",sageScore:5,diffs:[{njs:10,offset:0,notes:671,bombs:0,obstacles:16,nps:3.012,length:490.125,characteristic:"Standard",difficulty:"Hard",events:1586,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:222.784,paritySummary:{errors:38,warns:39,resets:0}},{njs:10,offset:0,notes:831,bombs:0,obstacles:16,nps:3.73,length:490.125,characteristic:"Standard",difficulty:"Expert",events:1587,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:222.784,paritySummary:{errors:44,warns:40,resets:0}}],downloadURL:"https://cdn.beatsaver.com/dc489921185f92dfecb9cb07b84fc556123bd134.zip",coverURL:"https://cdn.beatsaver.com/dc489921185f92dfecb9cb07b84fc556123bd134.jpg",previewURL:"https://cdn.beatsaver.com/dc489921185f92dfecb9cb07b84fc556123bd134.mp3"}],createdAt:"2018-09-02T23:43:45Z",updatedAt:"2018-09-02T23:43:45Z",lastPublishedAt:"2018-09-02T23:43:45Z"},{id:"121f",name:"Skillet - Feel Invincible",description:"Expert / Hard\r\nhttps://www.youtube.com/watch?v=nq-Qul4XxbE",uploader:{id:12996,name:"rustic",uniqueSet:!0,hash:"5cff0b7298cc5a672c84e8c4",avatar:"https://www.gravatar.com/avatar/5cff0b7298cc5a672c84e8c4?d=retro",type:"SIMPLE"},metadata:{bpm:126,duration:227,songName:"Feel Invincible",songSubName:"Skillet",songAuthorName:"Rustic",levelAuthorName:"rustic"},stats:{plays:0,downloads:24093,upvotes:9596,downvotes:150,score:.9541},uploaded:"2018-08-27T16:47:05Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"2e9ab6e1fb8055649e241cade98b018926cc93a8",key:"121f",state:"Published",createdAt:"2018-08-27T16:47:05Z",sageScore:6,diffs:[{njs:10,offset:0,notes:620,bombs:0,obstacles:10,nps:2.764,length:471,characteristic:"Standard",difficulty:"Hard",events:1654,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:224.286,paritySummary:{errors:15,warns:58,resets:0}},{njs:12,offset:0,notes:738,bombs:0,obstacles:11,nps:3.29,length:471,characteristic:"Standard",difficulty:"Expert",events:1654,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:224.286,paritySummary:{errors:21,warns:72,resets:0}}],downloadURL:"https://cdn.beatsaver.com/2e9ab6e1fb8055649e241cade98b018926cc93a8.zip",coverURL:"https://cdn.beatsaver.com/2e9ab6e1fb8055649e241cade98b018926cc93a8.jpg",previewURL:"https://cdn.beatsaver.com/2e9ab6e1fb8055649e241cade98b018926cc93a8.mp3"}],createdAt:"2018-08-27T16:47:05Z",updatedAt:"2018-08-27T16:47:05Z",lastPublishedAt:"2018-08-27T16:47:05Z"},{id:"4e6f",name:"Kero Kero Bonito - Flamingo",description:"edited: NJS was a tad slow my b\r\nfuramingo \r\noh oh ooh oh\r\nthis needed to be remapped\r\n \r\nPlease check out Kero Kero Bonito and the rest of their songs\r\nI'll be mappin more of em soon\r\n\r\nBPM 178\r\nFlamingo (Expert)\r\nShrimp (Hard)\r\n\r\nhave fun \r\n\r\ngimme feedback on Discord\r\nETAN#8341",uploader:{id:4235140,name:"etan",uniqueSet:!0,hash:"5cff0b7798cc5a672c855775",avatar:"https://cdn.beatsaver.com/avatar/136373107559497728.png",type:"DISCORD"},metadata:{bpm:178,duration:197,songName:"Flamingo",songSubName:"Kero Kero Bonito",songAuthorName:"ETAN",levelAuthorName:"ETAN"},stats:{plays:0,downloads:22969,upvotes:10417,downvotes:173,score:.954},uploaded:"2019-05-22T00:46:47Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"585ee25e654ebf5db5aa0ec02c3bcecbaccf3e0b",key:"4e6f",state:"Published",createdAt:"2019-05-22T00:46:47Z",sageScore:5,diffs:[{njs:13,offset:0,notes:519,bombs:8,obstacles:86,nps:2.692,length:572,characteristic:"Standard",difficulty:"Hard",events:2271,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:192.809,paritySummary:{errors:43,warns:43,resets:2}},{njs:16,offset:0,notes:679,bombs:10,obstacles:86,nps:3.522,length:572,characteristic:"Standard",difficulty:"Expert",events:2271,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:192.809,paritySummary:{errors:35,warns:24,resets:4}}],downloadURL:"https://cdn.beatsaver.com/585ee25e654ebf5db5aa0ec02c3bcecbaccf3e0b.zip",coverURL:"https://cdn.beatsaver.com/585ee25e654ebf5db5aa0ec02c3bcecbaccf3e0b.jpg",previewURL:"https://cdn.beatsaver.com/585ee25e654ebf5db5aa0ec02c3bcecbaccf3e0b.mp3"}],createdAt:"2019-05-22T00:46:47Z",updatedAt:"2019-05-22T00:46:47Z",lastPublishedAt:"2019-05-22T00:46:47Z"},{id:"1fef",name:"Imagine Dragons - Believer (100k ver.) | 100k Contest",description:"This is one of the 22 maps that were mapped for the 100k Contest where you can win over $7,000 in prizes. Go to https://bsaber.com/100k-contest/ to register!",uploader:{id:12996,name:"rustic",uniqueSet:!0,hash:"5cff0b7298cc5a672c84e8c4",avatar:"https://www.gravatar.com/avatar/5cff0b7298cc5a672c84e8c4?d=retro",type:"SIMPLE"},metadata:{bpm:125,duration:205,songName:"Believer (100k ver.)",songSubName:"Imagine Dragons",songAuthorName:"Rustic",levelAuthorName:"rustic"},stats:{plays:0,downloads:39471,upvotes:16897,downvotes:378,score:.9528},uploaded:"2018-11-12T17:53:58Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"9a7a5beadfdd1c7c0f137ecba6e5f6ff377eb390",key:"1fef",state:"Published",createdAt:"2018-11-12T17:53:58Z",sageScore:6,diffs:[{njs:10,offset:0,notes:216,bombs:0,obstacles:0,nps:1.09,length:413,characteristic:"Standard",difficulty:"Easy",events:3418,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:198.24,paritySummary:{errors:42,warns:14,resets:0}},{njs:10,offset:0,notes:388,bombs:0,obstacles:8,nps:1.957,length:413,characteristic:"Standard",difficulty:"Normal",events:3418,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:198.24,paritySummary:{errors:18,warns:21,resets:0}},{njs:11,offset:0,notes:514,bombs:0,obstacles:10,nps:2.593,length:413,characteristic:"Standard",difficulty:"Hard",events:3418,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:198.24,paritySummary:{errors:57,warns:59,resets:0}},{njs:12,offset:0,notes:560,bombs:0,obstacles:12,nps:2.825,length:413,characteristic:"Standard",difficulty:"Expert",events:3430,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:198.24,paritySummary:{errors:102,warns:70,resets:0}}],downloadURL:"https://cdn.beatsaver.com/9a7a5beadfdd1c7c0f137ecba6e5f6ff377eb390.zip",coverURL:"https://cdn.beatsaver.com/9a7a5beadfdd1c7c0f137ecba6e5f6ff377eb390.jpg",previewURL:"https://cdn.beatsaver.com/9a7a5beadfdd1c7c0f137ecba6e5f6ff377eb390.mp3"}],createdAt:"2018-11-12T17:53:58Z",updatedAt:"2018-11-12T17:53:58Z",lastPublishedAt:"2018-11-12T17:53:58Z"},{id:"4c6",name:"Muse - Uprising",description:"Expert / Hard\r\nhttps://youtu.be/WpFUt3UNp7c",uploader:{id:12996,name:"rustic",uniqueSet:!0,hash:"5cff0b7298cc5a672c84e8c4",avatar:"https://www.gravatar.com/avatar/5cff0b7298cc5a672c84e8c4?d=retro",type:"SIMPLE"},metadata:{bpm:128,duration:251,songName:"Uprising",songSubName:"Muse",songAuthorName:"Rustic",levelAuthorName:"rustic"},stats:{plays:0,downloads:31460,upvotes:12140,downvotes:243,score:.9522},uploaded:"2018-06-11T21:47:41Z",automapper:!1,ranked:!0,qualified:!1,versions:[{hash:"00e5671e594a6fe621c3605fcc5a0e4466ba6478",key:"4c6",state:"Published",createdAt:"2018-06-11T21:47:41Z",sageScore:6,diffs:[{njs:10,offset:0,notes:633,bombs:0,obstacles:13,nps:2.599,length:519.625,characteristic:"Standard",difficulty:"Hard",events:1975,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:243.574,paritySummary:{errors:122,warns:57,resets:0},stars:1.45},{njs:12,offset:0,notes:880,bombs:0,obstacles:19,nps:3.613,length:519.625,characteristic:"Standard",difficulty:"Expert",events:1975,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:243.574,paritySummary:{errors:104,warns:75,resets:0},stars:2.19}],downloadURL:"https://cdn.beatsaver.com/00e5671e594a6fe621c3605fcc5a0e4466ba6478.zip",coverURL:"https://cdn.beatsaver.com/00e5671e594a6fe621c3605fcc5a0e4466ba6478.jpg",previewURL:"https://cdn.beatsaver.com/00e5671e594a6fe621c3605fcc5a0e4466ba6478.mp3"}],createdAt:"2018-06-11T21:47:41Z",updatedAt:"2018-06-11T21:47:41Z",lastPublishedAt:"2018-06-11T21:47:41Z"},{id:"da60",name:"[Extra Sensory] Dirty Androids - Midnight Lady",description:'Enjoy the ride.\n\nMassive thanks to Nyri0 and Checkthepan for helping with scripts and some math!!\n\n\nThis map was released as a part of the "Extra Sensory" event.\n\nVideo showcase thingy: https://youtu.be/pE_s9bvntA0 (watch tougeVR\'s instead tho)',uploader:{id:4235136,name:"reaxt",uniqueSet:!0,hash:"5cff0b7298cc5a672c84e8ab",avatar:"https://cdn.beatsaver.com/avatar/163052863038291970.png",type:"DISCORD"},metadata:{bpm:128,duration:127,songName:"Midnight Lady",songSubName:"",songAuthorName:"Dirty Androids",levelAuthorName:"Reaxt"},stats:{plays:0,downloads:17800,upvotes:6632,downvotes:93,score:.9519},uploaded:"2020-08-20T16:48:21.705Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"ee501d7348223470c16ca88eac4a946e41cd11a9",key:"da60",state:"Published",createdAt:"2020-08-20T16:48:21.705Z",sageScore:2,diffs:[{njs:18,offset:0,notes:748,bombs:0,obstacles:4878,nps:6.233,length:256,characteristic:"Standard",difficulty:"ExpertPlus",events:767,chroma:!0,me:!1,ne:!0,cinema:!1,seconds:120,paritySummary:{errors:7,warns:0,resets:0}}],downloadURL:"https://cdn.beatsaver.com/ee501d7348223470c16ca88eac4a946e41cd11a9.zip",coverURL:"https://cdn.beatsaver.com/ee501d7348223470c16ca88eac4a946e41cd11a9.jpg",previewURL:"https://cdn.beatsaver.com/ee501d7348223470c16ca88eac4a946e41cd11a9.mp3"}],createdAt:"2020-08-20T16:48:21.705Z",updatedAt:"2020-08-20T16:48:21.705Z",lastPublishedAt:"2020-08-20T16:48:21.705Z"},{id:"2087",name:"Panic at the disco - The Greatest Show reimagined | (100K Contest)",description:"Here is a bonus map for the 100K contest! Playing any difficulty will give you 4x the normal chance of winning up to $12000 in prizes!!\r\nBig thank you to the beat saber mapping group for helping me out with a few things, you guys are great!\r\n\r\nTo enter, you need to go to the following website and download the mod installer: https://bsaber.com/100k-contest/\r\n\r\nThe competition is now over, but the maps remain!\r\nVideo Preview: https://www.youtube.com/watch?v=E929e6puEQA",uploader:{id:4785,name:"stumi",uniqueSet:!1,hash:"5cff0b7398cc5a672c84f720",avatar:"https://www.gravatar.com/avatar/5cff0b7398cc5a672c84f720?d=retro",type:"SIMPLE"},metadata:{bpm:77,duration:174,songName:"The greatest show reimagined",songSubName:"Panic at the disco",songAuthorName:"Stumi",levelAuthorName:"stumi"},stats:{plays:0,downloads:26198,upvotes:9073,downvotes:160,score:.9518},uploaded:"2018-11-16T17:57:55Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"afc2a905079d1fcdc9d82fa50e83c842d4d42118",key:"2087",state:"Published",createdAt:"2018-11-16T17:57:55Z",sageScore:5,diffs:[{njs:10,offset:0,notes:252,bombs:0,obstacles:6,nps:1.542,length:209.75,characteristic:"Standard",difficulty:"Easy",events:1328,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:163.442,paritySummary:{errors:35,warns:26,resets:0}},{njs:10,offset:0,notes:342,bombs:0,obstacles:5,nps:2.092,length:209.75,characteristic:"Standard",difficulty:"Normal",events:1327,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:163.442,paritySummary:{errors:37,warns:36,resets:0}},{njs:11,offset:0,notes:472,bombs:0,obstacles:5,nps:2.888,length:209.75,characteristic:"Standard",difficulty:"Hard",events:1326,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:163.442,paritySummary:{errors:37,warns:41,resets:0}},{njs:12,offset:0,notes:565,bombs:0,obstacles:5,nps:3.457,length:209.75,characteristic:"Standard",difficulty:"Expert",events:1329,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:163.442,paritySummary:{errors:39,warns:30,resets:0}}],downloadURL:"https://cdn.beatsaver.com/afc2a905079d1fcdc9d82fa50e83c842d4d42118.zip",coverURL:"https://cdn.beatsaver.com/afc2a905079d1fcdc9d82fa50e83c842d4d42118.jpg",previewURL:"https://cdn.beatsaver.com/afc2a905079d1fcdc9d82fa50e83c842d4d42118.mp3"}],createdAt:"2018-11-16T17:57:55Z",updatedAt:"2018-11-16T17:57:55Z",lastPublishedAt:"2018-11-16T17:57:55Z"},{id:"747",name:"Technologic - Daft Punk (Update)",description:"Expert / Hard / Normal",uploader:{id:44595,name:"awfulnaut",uniqueSet:!0,hash:"5cff0b7398cc5a672c84edac",avatar:"https://www.gravatar.com/avatar/5cff0b7398cc5a672c84edac?d=retro",type:"SIMPLE"},metadata:{bpm:127,duration:169,songName:"Technologic",songSubName:"Daft Punk",songAuthorName:"Awfulnaut",levelAuthorName:"awfulnaut"},stats:{plays:0,downloads:26292,upvotes:10662,downvotes:205,score:.9518},uploaded:"2018-06-30T18:30:38Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"831247d7d02e948e5d03622748bb130b5057023d",key:"747",state:"Published",createdAt:"2018-06-30T18:30:38Z",sageScore:6,diffs:[{njs:10,offset:0,notes:375,bombs:334,obstacles:9,nps:2.276,length:350.021,characteristic:"Standard",difficulty:"Normal",events:1321,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:165.364,paritySummary:{errors:62,warns:48,resets:110}},{njs:10,offset:0,notes:480,bombs:306,obstacles:3,nps:2.913,length:350,characteristic:"Standard",difficulty:"Hard",events:1321,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:165.354,paritySummary:{errors:31,warns:59,resets:96}},{njs:10,offset:0,notes:662,bombs:138,obstacles:3,nps:4.018,length:350,characteristic:"Standard",difficulty:"Expert",events:1327,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:165.354,paritySummary:{errors:42,warns:68,resets:43}}],downloadURL:"https://cdn.beatsaver.com/831247d7d02e948e5d03622748bb130b5057023d.zip",coverURL:"https://cdn.beatsaver.com/831247d7d02e948e5d03622748bb130b5057023d.jpg",previewURL:"https://cdn.beatsaver.com/831247d7d02e948e5d03622748bb130b5057023d.mp3"}],createdAt:"2018-06-30T18:30:38Z",updatedAt:"2018-06-30T18:30:38Z",lastPublishedAt:"2018-06-30T18:30:38Z"},{id:"1023",name:"I Wanna Be Like You (Sim Gretina Remix)",description:"Who doesn't love The Jungle Book? \r\nPreview: https://youtu.be/DXdo1-FlxSk",uploader:{id:4285668,name:"connorjc",uniqueSet:!0,hash:"5cff0b7398cc5a672c84fb89",avatar:"https://cdn.beatsaver.com/avatar/99724057217355776.png",type:"DISCORD"},metadata:{bpm:110,duration:172,songName:"I Wanna Be Like You (Sim Gretina Remix)",songSubName:"Jungle Book",songAuthorName:"ConnorJC",levelAuthorName:"ConnorJC"},stats:{plays:0,downloads:15215,upvotes:7020,downvotes:108,score:.9513},uploaded:"2018-08-16T13:41:07Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"638cf20187a122490b4662555e9072cd8073146b",key:"1023",state:"Published",createdAt:"2018-08-16T13:41:07Z",sageScore:4,diffs:[{njs:10,offset:0,notes:512,bombs:0,obstacles:52,nps:3.276,length:286.5,characteristic:"Standard",difficulty:"Expert",events:486,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:156.273,paritySummary:{errors:81,warns:50,resets:0}}],downloadURL:"https://cdn.beatsaver.com/638cf20187a122490b4662555e9072cd8073146b.zip",coverURL:"https://cdn.beatsaver.com/638cf20187a122490b4662555e9072cd8073146b.jpg",previewURL:"https://cdn.beatsaver.com/638cf20187a122490b4662555e9072cd8073146b.mp3"}],createdAt:"2018-08-16T13:41:07Z",updatedAt:"2018-08-16T13:41:07Z",lastPublishedAt:"2018-08-16T13:41:07Z"},{id:"18cc",name:"Du Hast by Rammstein (Kole Edit)",description:"Many has been asking, many have been waiting patiently, many have been confused as to why this hasn't been done before, but now it's here and now you can have it too; here's Du Hast by Rammstein now in Beat Saber!\r\n\r\nSong has been edited (shortened) to be tighter and not too repetitive.\r\n\r\nPreview:\r\nhttps://youtu.be/3i1mf2EGSjc\r\n\r\nBPM: 125.09\r\nDuration: 2:57\r\nEasy, Normal, Hard and Expert difficulties.\r\n\r\nEasy: 251, 0 obstacles, 0 mines\r\nNormal: 444 notes, 0 obstacles, 0 mines\r\nHard: 581 notes, 0 obstacles, 0 mines\r\nExpert: 437 notes, 0 obstacles, 0 mines\r\n\r\nThanks to VenclaireVR, Redmagi, Horseman, Saut and elliotttate for playtesting!\r\n\r\nDownload the One Saber version of this map here:\r\nhttps://beatsaver.com/browse/detail/6784-6436\r\n\r\nEnjoy!",uploader:{id:4285318,name:"kolezan",uniqueSet:!0,hash:"5cff0b7398cc5a672c84fcbb",avatar:"https://cdn.beatsaver.com/avatar/220513618763055106.png",type:"DISCORD"},metadata:{bpm:125,duration:177,songName:"Du Hast",songSubName:"Rammstein",songAuthorName:"Level by Kolezan",levelAuthorName:"Kolezan"},stats:{plays:0,downloads:19197,upvotes:9801,downvotes:188,score:.9511},uploaded:"2018-10-05T06:17:10Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"6df961680ead49e2d92de1a95b789e0ce4a026db",key:"18cc",state:"Published",createdAt:"2018-10-05T06:17:10Z",sageScore:4,diffs:[{njs:10,offset:0,notes:251,bombs:0,obstacles:0,nps:1.487,length:352,characteristic:"Standard",difficulty:"Easy",events:581,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:168.96,paritySummary:{errors:65,warns:24,resets:0}},{njs:11,offset:0,notes:444,bombs:0,obstacles:0,nps:2.63,length:352,characteristic:"Standard",difficulty:"Normal",events:581,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:168.96,paritySummary:{errors:74,warns:35,resets:0}},{njs:12,offset:0,notes:581,bombs:0,obstacles:0,nps:3.441,length:352,characteristic:"Standard",difficulty:"Hard",events:581,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:168.96,paritySummary:{errors:83,warns:44,resets:0}},{njs:12,offset:0,notes:723,bombs:0,obstacles:0,nps:4.282,length:352,characteristic:"Standard",difficulty:"Expert",events:581,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:168.96,paritySummary:{errors:57,warns:57,resets:0}}],downloadURL:"https://cdn.beatsaver.com/6df961680ead49e2d92de1a95b789e0ce4a026db.zip",coverURL:"https://cdn.beatsaver.com/6df961680ead49e2d92de1a95b789e0ce4a026db.jpg",previewURL:"https://cdn.beatsaver.com/6df961680ead49e2d92de1a95b789e0ce4a026db.mp3"}],createdAt:"2018-10-05T06:17:10Z",updatedAt:"2018-10-05T06:17:10Z",lastPublishedAt:"2018-10-05T06:17:10Z"},{id:"23c3",name:"Without Me (ILLENIUM Remix) - Halsey",description:"All 5 Difficulties\r\nBPM: 136\r\nNote Jumps Speed from E+to Easy: 14, 12, 11, 10, 10\r\n\r\nLemme know what you think!",uploader:{id:30754,name:"styngme",uniqueSet:!1,hash:"5cff0b7298cc5a672c84e9cd",avatar:"https://www.gravatar.com/avatar/5cff0b7298cc5a672c84e9cd?d=retro",type:"SIMPLE"},metadata:{bpm:136,duration:247,songName:"Without Me - ILLENIUM Remix",songSubName:"Halsey, ILLENIUM",songAuthorName:"StyngMe",levelAuthorName:"styngme"},stats:{plays:0,downloads:23662,upvotes:8757,downvotes:162,score:.9507},uploaded:"2018-12-04T15:46:54Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"a684cee0d634b9bb59eef234665fd28ef27876ac",key:"23c3",state:"Published",createdAt:"2018-12-04T15:46:54Z",sageScore:7,diffs:[{njs:10,offset:0,notes:571,bombs:0,obstacles:78,nps:2.652,length:488,characteristic:"Standard",difficulty:"Easy",events:2901,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:215.294,paritySummary:{errors:5,warns:2,resets:0}},{njs:10,offset:0,notes:747,bombs:0,obstacles:78,nps:3.47,length:488,characteristic:"Standard",difficulty:"Normal",events:2901,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:215.294,paritySummary:{errors:51,warns:40,resets:0}},{njs:11,offset:0,notes:788,bombs:0,obstacles:78,nps:3.66,length:488,characteristic:"Standard",difficulty:"Hard",events:2901,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:215.294,paritySummary:{errors:58,warns:40,resets:0}},{njs:12,offset:0,notes:850,bombs:0,obstacles:78,nps:3.948,length:488,characteristic:"Standard",difficulty:"Expert",events:2901,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:215.294,paritySummary:{errors:72,warns:69,resets:0}},{njs:14,offset:0,notes:872,bombs:0,obstacles:78,nps:4.05,length:488,characteristic:"Standard",difficulty:"ExpertPlus",events:2901,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:215.294,paritySummary:{errors:67,warns:70,resets:0}}],downloadURL:"https://cdn.beatsaver.com/a684cee0d634b9bb59eef234665fd28ef27876ac.zip",coverURL:"https://cdn.beatsaver.com/a684cee0d634b9bb59eef234665fd28ef27876ac.jpg",previewURL:"https://cdn.beatsaver.com/a684cee0d634b9bb59eef234665fd28ef27876ac.mp3"}],createdAt:"2018-12-04T15:46:54Z",updatedAt:"2018-12-04T15:46:54Z",lastPublishedAt:"2018-12-04T15:46:54Z"},{id:"38ff",name:"Ievan Polkka",description:"",uploader:{id:30164,name:"fraktar",uniqueSet:!0,hash:"5cff0b7698cc5a672c8551b0",avatar:"https://www.gravatar.com/avatar/5cff0b7698cc5a672c8551b0?d=retro",type:"SIMPLE"},metadata:{bpm:119,duration:147,songName:"Ievan Polkka",songSubName:"Hatsune Miku",songAuthorName:"Fraktar",levelAuthorName:"Fraktar"},stats:{plays:0,downloads:17204,upvotes:8751,downvotes:167,score:.9501},uploaded:"2019-02-23T15:58:08Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"72bf749f5df632cd103fccd734c9fd5cc7596caa",key:"38ff",state:"Published",createdAt:"2019-02-23T15:58:08Z",sageScore:5,diffs:[{njs:12,offset:0,notes:734,bombs:0,obstacles:16,nps:5.09,length:286,characteristic:"Standard",difficulty:"Expert",events:1360,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:144.202,paritySummary:{errors:70,warns:39,resets:0}}],downloadURL:"https://cdn.beatsaver.com/72bf749f5df632cd103fccd734c9fd5cc7596caa.zip",coverURL:"https://cdn.beatsaver.com/72bf749f5df632cd103fccd734c9fd5cc7596caa.jpg",previewURL:"https://cdn.beatsaver.com/72bf749f5df632cd103fccd734c9fd5cc7596caa.mp3"}],createdAt:"2019-02-23T15:58:08Z",updatedAt:"2019-02-23T15:58:08Z",lastPublishedAt:"2019-02-23T15:58:08Z"},{id:"8553",name:"Blinding Lights - The Weeknd",description:"This map was supposed to release last year and have a 90 degree difficulty but it got cut because life ¯\\_(ツ)_/¯ Fantastic song though.\n\nExpert Playthrough : https://youtu.be/GonnTYPmDVY",uploader:{id:13320,name:"novashaft",uniqueSet:!0,hash:"5cff0b7398cc5a672c84ee55",avatar:"https://www.gravatar.com/avatar/5cff0b7398cc5a672c84ee55?d=retro",type:"SIMPLE"},metadata:{bpm:171,duration:199,songName:"Blinding Lights",songSubName:"",songAuthorName:"The Weeknd",levelAuthorName:"NovaShaft"},stats:{plays:0,downloads:34508,upvotes:11999,downvotes:269,score:.95},uploaded:"2020-02-08T17:26:23.499Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"17d298f2bf78b453cd66474ce268ae9dac9fab46",key:"8553",state:"Published",createdAt:"2020-02-08T17:26:23.499Z",sageScore:7,diffs:[{njs:10,offset:0,notes:271,bombs:0,obstacles:15,nps:1.482,length:521,characteristic:"Standard",difficulty:"Easy",events:3071,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:182.807,paritySummary:{errors:71,warns:4,resets:0}},{njs:13,offset:1,notes:457,bombs:16,obstacles:25,nps:2.5,length:521,characteristic:"Standard",difficulty:"Hard",events:3071,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:182.807,paritySummary:{errors:6,warns:7,resets:1}},{njs:17,offset:.5,notes:594,bombs:44,obstacles:33,nps:3.249,length:521,characteristic:"Standard",difficulty:"Expert",events:3146,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:182.807,paritySummary:{errors:14,warns:13,resets:0}}],downloadURL:"https://cdn.beatsaver.com/17d298f2bf78b453cd66474ce268ae9dac9fab46.zip",coverURL:"https://cdn.beatsaver.com/17d298f2bf78b453cd66474ce268ae9dac9fab46.jpg",previewURL:"https://cdn.beatsaver.com/17d298f2bf78b453cd66474ce268ae9dac9fab46.mp3"}],createdAt:"2020-02-08T17:26:23.499Z",updatedAt:"2020-02-08T17:26:23.499Z",lastPublishedAt:"2020-02-08T17:26:23.499Z"},{id:"2e9e",name:"YoiYoi Kokon - REOL",description:"Put on your yukata; lets travel back in time and enjoy ourselves! Here's REOL's probably most popular song mapped by me, YoiYoi Kokon (宵々古今)!\r\n\r\nThe audio version of the song is that of the music video (slightly edited by me) as I love the addition of the fireworks in the last part of the song. Together with the crowd in the intro this makes it feel like you're attending a festival.\r\n\r\nExpert+ is basically Expert but with no pauses and with the melody followed instead of the shouts.\r\n\r\nPreview:\r\nhttps://youtu.be/G61m6Au2foM\r\n\r\nBPM: 150\r\nDuration: 4:16\r\nEasy, Normal, Hard, Expert and Expert+ difficulties.\r\n\r\nEasy: 332, 12 obstacles, 0 mines\r\nNormal: 471 notes, 17 obstacles, 0 mines\r\nHard: 679 notes, 17 obstacles, 0 mines\r\nExpert: 954 notes, 17 obstacles, 0 mines\r\nExpert+: 1086 notes, 1 obstacles, 0 mines\r\n\r\nThanks to Redmagi, Aithke, aggrogahu, Don and Emperor of the Internet for playtesting!\r\n\r\nEnjoy!",uploader:{id:4285318,name:"kolezan",uniqueSet:!0,hash:"5cff0b7398cc5a672c84fcbb",avatar:"https://cdn.beatsaver.com/avatar/220513618763055106.png",type:"DISCORD"},metadata:{bpm:150,duration:256,songName:"YoiYoi Kokon",songSubName:"REOL",songAuthorName:"Kolezan",levelAuthorName:"Kolezan"},stats:{plays:0,downloads:13836,upvotes:6975,downvotes:118,score:.9499},uploaded:"2019-01-18T09:22:30Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"766a222b102b6522cd5d31e82ec7adc7c5ff011e",key:"2e9e",state:"Published",createdAt:"2019-01-18T09:22:30Z",sageScore:7,diffs:[{njs:9,offset:0,notes:332,bombs:0,obstacles:12,nps:1.349,length:615.203,characteristic:"Standard",difficulty:"Easy",events:2115,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:246.081,paritySummary:{errors:48,warns:24,resets:0}},{njs:10,offset:0,notes:471,bombs:0,obstacles:17,nps:1.914,length:615.203,characteristic:"Standard",difficulty:"Normal",events:2115,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:246.081,paritySummary:{errors:67,warns:38,resets:0}},{njs:11,offset:0,notes:679,bombs:0,obstacles:17,nps:2.759,length:615.203,characteristic:"Standard",difficulty:"Hard",events:2115,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:246.081,paritySummary:{errors:79,warns:71,resets:0}},{njs:12.5,offset:0,notes:954,bombs:0,obstacles:17,nps:3.877,length:615.203,characteristic:"Standard",difficulty:"Expert",events:2115,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:246.081,paritySummary:{errors:104,warns:144,resets:0}},{njs:12.5,offset:0,notes:1086,bombs:0,obstacles:1,nps:4.413,length:615.203,characteristic:"Standard",difficulty:"ExpertPlus",events:2115,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:246.081,paritySummary:{errors:102,warns:152,resets:0}}],downloadURL:"https://cdn.beatsaver.com/766a222b102b6522cd5d31e82ec7adc7c5ff011e.zip",coverURL:"https://cdn.beatsaver.com/766a222b102b6522cd5d31e82ec7adc7c5ff011e.jpg",previewURL:"https://cdn.beatsaver.com/766a222b102b6522cd5d31e82ec7adc7c5ff011e.mp3"}],createdAt:"2019-01-18T09:22:30Z",updatedAt:"2019-01-18T09:22:30Z",lastPublishedAt:"2019-01-18T09:22:30Z"},{id:"30fd",name:"Love The Way You Lie (ft. Rihanna) - Eminem, Rihanna | Charted by StyngMe",description:"I hope you enjoy!\r\nBPM: 87\r\nDifficulties: ALL\r\nNote Jump Speed for E+ through Easy: 16, 14, 12, 12, 11",uploader:{id:30754,name:"styngme",uniqueSet:!1,hash:"5cff0b7298cc5a672c84e9cd",avatar:"https://www.gravatar.com/avatar/5cff0b7298cc5a672c84e9cd?d=retro",type:"SIMPLE"},metadata:{bpm:87,duration:265,songName:"Love The Way You Lie (ft. Rihanna)",songSubName:"Eminem, Rihanna",songAuthorName:"StyngMe",levelAuthorName:"styngme"},stats:{plays:0,downloads:24461,upvotes:7923,downvotes:147,score:.9497},uploaded:"2019-01-25T15:48:22Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"8161daf97cab8c95aea0556549b4b8cfb29a13d3",key:"30fd",state:"Published",createdAt:"2019-01-25T15:48:22Z",sageScore:7,diffs:[{njs:11,offset:0,notes:387,bombs:0,obstacles:18,nps:1.661,length:337.75,characteristic:"Standard",difficulty:"Easy",events:2082,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:232.931,paritySummary:{errors:28,warns:28,resets:0}},{njs:12,offset:0,notes:503,bombs:0,obstacles:6,nps:2.159,length:337.75,characteristic:"Standard",difficulty:"Normal",events:2082,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:232.931,paritySummary:{errors:21,warns:36,resets:0}},{njs:12,offset:0,notes:617,bombs:0,obstacles:0,nps:2.649,length:337.75,characteristic:"Standard",difficulty:"Hard",events:2082,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:232.931,paritySummary:{errors:37,warns:38,resets:0}},{njs:14,offset:0,notes:1006,bombs:0,obstacles:0,nps:4.319,length:337.75,characteristic:"Standard",difficulty:"Expert",events:2082,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:232.931,paritySummary:{errors:24,warns:55,resets:0}},{njs:16,offset:0,notes:1207,bombs:0,obstacles:0,nps:5.182,length:337.75,characteristic:"Standard",difficulty:"ExpertPlus",events:2085,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:232.931,paritySummary:{errors:39,warns:76,resets:0}}],downloadURL:"https://cdn.beatsaver.com/8161daf97cab8c95aea0556549b4b8cfb29a13d3.zip",coverURL:"https://cdn.beatsaver.com/8161daf97cab8c95aea0556549b4b8cfb29a13d3.jpg",previewURL:"https://cdn.beatsaver.com/8161daf97cab8c95aea0556549b4b8cfb29a13d3.mp3"}],createdAt:"2019-01-25T15:48:22Z",updatedAt:"2019-01-25T15:48:22Z",lastPublishedAt:"2019-01-25T15:48:22Z"},{id:"26f6",name:"IGNITE (Ranked Version) [Sword Art Online Season 2 Opening] - Aoi Eir",description:"Trying to get this version ranked! New version with changes according to the ranking criteria: Double directional notes fixed, flow improvements, removed fast dodge walls on bridge section.",uploader:{id:58338,name:"Joetastic",uniqueSet:!0,hash:"5cff0b7498cc5a672c85050e",avatar:"https://cdn.beatsaver.com/avatar/227767566402191360.png",type:"DISCORD"},metadata:{bpm:171,duration:244,songName:"IGNITE",songSubName:"Aoi Eir",songAuthorName:"Joetastic",levelAuthorName:"Joetastic"},stats:{plays:0,downloads:23842,upvotes:11061,downvotes:245,score:.9495},uploaded:"2018-12-20T01:21:47Z",automapper:!1,ranked:!0,qualified:!1,versions:[{hash:"125b07ebcc06fe9667e83fc2d6b9ae5ecbc72e8c",key:"26f6",state:"Published",createdAt:"2018-12-20T01:21:47Z",sageScore:6,diffs:[{njs:14,offset:0,notes:1093,bombs:16,obstacles:16,nps:4.594,length:678,characteristic:"Standard",difficulty:"Expert",events:1642,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:237.895,paritySummary:{errors:77,warns:79,resets:0},stars:3.21}],downloadURL:"https://cdn.beatsaver.com/125b07ebcc06fe9667e83fc2d6b9ae5ecbc72e8c.zip",coverURL:"https://cdn.beatsaver.com/125b07ebcc06fe9667e83fc2d6b9ae5ecbc72e8c.jpg",previewURL:"https://cdn.beatsaver.com/125b07ebcc06fe9667e83fc2d6b9ae5ecbc72e8c.mp3"}],createdAt:"2018-12-20T01:21:47Z",updatedAt:"2018-12-20T01:21:47Z",lastPublishedAt:"2018-12-20T01:21:47Z"},{id:"6b55",name:"ABIS & Signal & Tasha Baxter - The Wall (Buunshin Remix)",description:"https://youtu.be/xEowRTlHvuI",uploader:{id:12996,name:"rustic",uniqueSet:!0,hash:"5cff0b7298cc5a672c84e8c4",avatar:"https://www.gravatar.com/avatar/5cff0b7298cc5a672c84e8c4?d=retro",type:"SIMPLE"},metadata:{bpm:172,duration:271,songName:"The Wall",songSubName:"(Buunshin Remix)",songAuthorName:"ABIS & Signal & Tasha Baxter",levelAuthorName:"Rustic"},stats:{plays:0,downloads:8045,upvotes:4697,downvotes:61,score:.9491},uploaded:"2019-10-21T13:30:47.405Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"e855d1a7b17904322aa3ebaf3bb002421bce568a",key:"6b55",state:"Published",createdAt:"2019-10-21T13:30:47.405Z",sageScore:6,diffs:[{njs:20,offset:0,notes:449,bombs:0,obstacles:9581,nps:1.828,length:704,characteristic:"Standard",difficulty:"Hard",events:7859,chroma:!1,me:!0,ne:!1,cinema:!1,seconds:245.581,paritySummary:{errors:0,warns:0,resets:0}},{njs:20,offset:0,notes:606,bombs:0,obstacles:9589,nps:2.468,length:704,characteristic:"Standard",difficulty:"Expert",events:7808,chroma:!1,me:!0,ne:!1,cinema:!1,seconds:245.581,paritySummary:{errors:0,warns:0,resets:0}}],downloadURL:"https://cdn.beatsaver.com/e855d1a7b17904322aa3ebaf3bb002421bce568a.zip",coverURL:"https://cdn.beatsaver.com/e855d1a7b17904322aa3ebaf3bb002421bce568a.jpg",previewURL:"https://cdn.beatsaver.com/e855d1a7b17904322aa3ebaf3bb002421bce568a.mp3"}],createdAt:"2019-10-21T13:30:47.405Z",updatedAt:"2019-10-21T13:30:47.405Z",lastPublishedAt:"2019-10-21T13:30:47.405Z"},{id:"5e81",name:"Stressed Out - Twenty One Pilots",description:'"Stressed Out" is a song by American musical duo Twenty One Pilots, for their fourth studio album, Blurryface. Written by Tyler Joseph and produced by Mike Elizondo, the lyrics discuss the harsh end of adolescence and the transition to adulthood.',uploader:{id:58338,name:"Joetastic",uniqueSet:!0,hash:"5cff0b7498cc5a672c85050e",avatar:"https://cdn.beatsaver.com/avatar/227767566402191360.png",type:"DISCORD"},metadata:{bpm:170,duration:203,songName:"Stressed Out",songSubName:"",songAuthorName:"Twenty One Pilots",levelAuthorName:"Joetastic"},stats:{plays:0,downloads:18746,upvotes:6062,downvotes:98,score:.9491},uploaded:"2019-08-22T14:20:38.731Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"068a80d89857a6a2221f54e8a5d374584b2db77e",key:"5e81",state:"Published",createdAt:"2019-08-22T14:20:38.731Z",sageScore:6,diffs:[{njs:14,offset:0,notes:651,bombs:0,obstacles:42,nps:3.282,length:562,characteristic:"Standard",difficulty:"Expert",events:1670,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:198.353,paritySummary:{errors:69,warns:69,resets:0}}],downloadURL:"https://cdn.beatsaver.com/068a80d89857a6a2221f54e8a5d374584b2db77e.zip",coverURL:"https://cdn.beatsaver.com/068a80d89857a6a2221f54e8a5d374584b2db77e.jpg",previewURL:"https://cdn.beatsaver.com/068a80d89857a6a2221f54e8a5d374584b2db77e.mp3"}],createdAt:"2019-08-22T14:20:38.731Z",updatedAt:"2019-08-22T14:20:38.731Z",lastPublishedAt:"2019-08-22T14:20:38.731Z"},{id:"5552",name:"It's Tricky - Run DMC",description:"\"It's Tricky\" is the fourth and final single released from Run-DMC's third album, Raising Hell which was released early in 1987. \n\nThis is one of favorite workout songs, can't believe I haven't mapped it yet :P",uploader:{id:58338,name:"Joetastic",uniqueSet:!0,hash:"5cff0b7498cc5a672c85050e",avatar:"https://cdn.beatsaver.com/avatar/227767566402191360.png",type:"DISCORD"},metadata:{bpm:128,duration:184,songName:"It's Tricky",songSubName:"",songAuthorName:"Run DMC",levelAuthorName:"Joetastic"},stats:{plays:0,downloads:13372,upvotes:4472,downvotes:56,score:.9489},uploaded:"2019-07-02T17:23:10.798Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"9027d4274febf8722078a5f70b51da58cf433322",key:"5552",state:"Published",createdAt:"2019-07-02T17:23:10.798Z",sageScore:6,diffs:[{njs:14,offset:0,notes:721,bombs:0,obstacles:8,nps:3.998,length:384.688,characteristic:"Standard",difficulty:"Expert",events:3029,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:180.322,paritySummary:{errors:34,warns:36,resets:0}}],downloadURL:"https://cdn.beatsaver.com/9027d4274febf8722078a5f70b51da58cf433322.zip",coverURL:"https://cdn.beatsaver.com/9027d4274febf8722078a5f70b51da58cf433322.jpg",previewURL:"https://cdn.beatsaver.com/9027d4274febf8722078a5f70b51da58cf433322.mp3"}],createdAt:"2019-07-02T17:23:10.798Z",updatedAt:"2019-07-02T17:23:10.798Z",lastPublishedAt:"2019-07-02T17:23:10.798Z"},{id:"3038",name:"Moves Like Jagger - Maroon 5 ft. Christina Aguilera",description:"See it in Action: https://www.youtube.com/watch?v=buZypCnR1r8",uploader:{id:38202,name:"fafurion",uniqueSet:!1,hash:"5cff0b7398cc5a672c84f945",avatar:"https://www.gravatar.com/avatar/5cff0b7398cc5a672c84f945?d=retro",type:"SIMPLE"},metadata:{bpm:128,duration:204,songName:"Moves Like Jagger",songSubName:"Maroon 5 ft. Christina Aguilera",songAuthorName:"Fafurion",levelAuthorName:"fafurion"},stats:{plays:0,downloads:24035,upvotes:7173,downvotes:137,score:.9482},uploaded:"2019-01-23T00:01:22Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"6f5e229b8ec73c9e448c00a680548b0ce25918ee",key:"3038",state:"Published",createdAt:"2019-01-23T00:01:22Z",sageScore:5,diffs:[{njs:10,offset:0,notes:297,bombs:0,obstacles:88,nps:1.547,length:409.5,characteristic:"Standard",difficulty:"Easy",events:2966,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:191.953,paritySummary:{errors:21,warns:30,resets:0}},{njs:10,offset:0,notes:343,bombs:0,obstacles:88,nps:1.787,length:409.5,characteristic:"Standard",difficulty:"Normal",events:2966,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:191.953,paritySummary:{errors:29,warns:33,resets:0}},{njs:12,offset:0,notes:524,bombs:0,obstacles:125,nps:2.73,length:409.5,characteristic:"Standard",difficulty:"Hard",events:2966,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:191.953,paritySummary:{errors:40,warns:62,resets:0}},{njs:12,offset:0,notes:695,bombs:0,obstacles:100,nps:3.621,length:409.5,characteristic:"Standard",difficulty:"Expert",events:2966,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:191.953,paritySummary:{errors:81,warns:108,resets:0}}],downloadURL:"https://cdn.beatsaver.com/6f5e229b8ec73c9e448c00a680548b0ce25918ee.zip",coverURL:"https://cdn.beatsaver.com/6f5e229b8ec73c9e448c00a680548b0ce25918ee.jpg",previewURL:"https://cdn.beatsaver.com/6f5e229b8ec73c9e448c00a680548b0ce25918ee.mp3"}],createdAt:"2019-01-23T00:01:22Z",updatedAt:"2019-01-23T00:01:22Z",lastPublishedAt:"2019-01-23T00:01:22Z"},{id:"bd3",name:"New Rules - Dua Lipa",description:"Difficulties: Expert+, Expert, Hard, Normal\r\nYouTube Preview: https://youtu.be/Ohq6cA_1NAE\r\nLighting by Heisenberg: https://beatsaver.com/index.php/browse/byuser/1089",uploader:{id:30311,name:"bennydabeast",uniqueSet:!0,hash:"5cff0b7298cc5a672c84e98d",avatar:"https://cdn.beatsaver.com/avatar/30311.jpg",type:"SIMPLE"},metadata:{bpm:116,duration:211,songName:"New Rules",songSubName:"Dua Lipa",songAuthorName:"BennyDaBeast (Lighting: Heisenberg)",levelAuthorName:"bennydabeast"},stats:{plays:0,downloads:18879,upvotes:7509,downvotes:149,score:.948},uploaded:"2018-07-25T20:53:52Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"674b1b540ac5851c92c8cde7dd456698f5a733c4",key:"bd3",state:"Published",createdAt:"2018-07-25T20:53:52Z",sageScore:4,diffs:[{njs:10,offset:0,notes:423,bombs:0,obstacles:7,nps:2.055,length:398,characteristic:"Standard",difficulty:"Normal",events:2753,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:205.862,paritySummary:{errors:81,warns:58,resets:0}},{njs:10,offset:0,notes:507,bombs:0,obstacles:32,nps:2.463,length:398,characteristic:"Standard",difficulty:"Hard",events:2753,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:205.862,paritySummary:{errors:73,warns:67,resets:0}},{njs:10,offset:0,notes:771,bombs:0,obstacles:32,nps:3.745,length:398.003,characteristic:"Standard",difficulty:"Expert",events:2753,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:205.863,paritySummary:{errors:95,warns:124,resets:0}},{njs:10,offset:0,notes:873,bombs:0,obstacles:32,nps:4.241,length:398,characteristic:"Standard",difficulty:"ExpertPlus",events:2753,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:205.862,paritySummary:{errors:103,warns:146,resets:0}}],downloadURL:"https://cdn.beatsaver.com/674b1b540ac5851c92c8cde7dd456698f5a733c4.zip",coverURL:"https://cdn.beatsaver.com/674b1b540ac5851c92c8cde7dd456698f5a733c4.jpg",previewURL:"https://cdn.beatsaver.com/674b1b540ac5851c92c8cde7dd456698f5a733c4.mp3"}],createdAt:"2018-07-25T20:53:52Z",updatedAt:"2018-07-25T20:53:52Z",lastPublishedAt:"2018-07-25T20:53:52Z"},{id:"6d96",name:"League of Legends - Phoenix (ft. Cailin Russo and Chrissy Costanza)",description:"The Worlds 2019 theme for League of Legends.\nVideo: https://youtu.be/aUTcwyZ9LmI\nExpert+ Video: https://www.youtube.com/watch?v=-uh4WOhZmQs\n\nEasy: Notes: 245 NPS: 1.23 NJS: 12\nNormal: Notes: 307 NPS: 1.54 NJS: 14\nHard: Notes: 428 NPS: 2.15 NJS: 16\nExpert: Notes: 504 NPS: 2.53 NJS: 16\nExpert+: Notes: 664 NPS: 3.33 NJS: 17\n\nCheck out my lightshows here: https://www.youtube.com/playlist?list=PLwl6dYq72JOYu1BnKl5WATa4Dh__ZJmuN",uploader:{id:14808,name:"halcyon12",uniqueSet:!0,hash:"5cff0b7698cc5a672c8547ad",avatar:"https://www.gravatar.com/avatar/5cff0b7698cc5a672c8547ad?d=retro",type:"SIMPLE"},metadata:{bpm:168,duration:199,songName:"Phoenix",songSubName:"ft. Cailin Russo and Chrissy Costanza",songAuthorName:"League of Legends",levelAuthorName:"Halcyon12"},stats:{plays:0,downloads:15278,upvotes:6407,downvotes:122,score:.9471},uploaded:"2019-11-02T00:52:14.279Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"1fd9078f4b357143390a8d24664736f78b4224a9",key:"6d96",state:"Published",createdAt:"2019-11-02T00:52:14.279Z",sageScore:6,diffs:[{njs:12,offset:0,notes:245,bombs:0,obstacles:20,nps:1.376,length:498.5,characteristic:"Standard",difficulty:"Easy",events:2347,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:178.036,paritySummary:{errors:11,warns:1,resets:0}},{njs:14,offset:1.25,notes:307,bombs:0,obstacles:21,nps:1.724,length:498.5,characteristic:"Standard",difficulty:"Normal",events:2347,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:178.036,paritySummary:{errors:7,warns:0,resets:0}},{njs:16,offset:.75,notes:428,bombs:0,obstacles:25,nps:2.404,length:498.5,characteristic:"Standard",difficulty:"Hard",events:2347,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:178.036,paritySummary:{errors:2,warns:0,resets:0}},{njs:16,offset:.25,notes:504,bombs:0,obstacles:20,nps:2.828,length:499,characteristic:"Standard",difficulty:"Expert",events:2347,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:178.214,paritySummary:{errors:1,warns:1,resets:0}},{njs:17,offset:0,notes:664,bombs:0,obstacles:92,nps:3.525,length:527.5,characteristic:"Standard",difficulty:"ExpertPlus",events:2347,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:188.393,paritySummary:{errors:0,warns:0,resets:0}},{njs:12,offset:0,notes:0,bombs:0,obstacles:0,nps:0,length:0,characteristic:"Lightshow",difficulty:"ExpertPlus",events:2347,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:0,paritySummary:{errors:0,warns:0,resets:0}}],downloadURL:"https://cdn.beatsaver.com/1fd9078f4b357143390a8d24664736f78b4224a9.zip",coverURL:"https://cdn.beatsaver.com/1fd9078f4b357143390a8d24664736f78b4224a9.jpg",previewURL:"https://cdn.beatsaver.com/1fd9078f4b357143390a8d24664736f78b4224a9.mp3"}],createdAt:"2019-11-02T00:52:14.279Z",updatedAt:"2019-11-02T00:52:14.279Z",lastPublishedAt:"2019-11-02T00:52:14.279Z"},{id:"6366",name:"Star Sky - Two Steps From Hell",description:"68\nNormal wall --- 43 walls\nHyper wall --- 6631 walls\n\ndoodle :)",uploader:{id:4285521,name:"ejiejidayo",uniqueSet:!0,hash:"5cff0b7398cc5a672c84fc58",avatar:"https://cdn.beatsaver.com/avatar/224894241279574016.png",type:"DISCORD"},metadata:{bpm:130,duration:330,songName:"Star Sky Two Steps From Hell",songSubName:"",songAuthorName:".",levelAuthorName:"ejiejidayo"},stats:{plays:0,downloads:9471,upvotes:3452,downvotes:43,score:.9459},uploaded:"2019-09-14T19:59:45.575Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"323975ef9eaec337c8208dc864e766289e3d5ef1",key:"6366",state:"Published",createdAt:"2019-09-14T19:59:45.575Z",sageScore:5,diffs:[{njs:16,offset:0,notes:1218,bombs:0,obstacles:43,nps:3.754,length:703,characteristic:"Standard",difficulty:"Hard",events:1044,chroma:!1,me:!0,ne:!1,cinema:!1,seconds:324.462,paritySummary:{errors:0,warns:0,resets:0}},{njs:16,offset:0,notes:1218,bombs:0,obstacles:6631,nps:3.754,length:703,characteristic:"Standard",difficulty:"Expert",events:1044,chroma:!1,me:!0,ne:!1,cinema:!1,seconds:324.462,paritySummary:{errors:0,warns:0,resets:0}}],downloadURL:"https://cdn.beatsaver.com/323975ef9eaec337c8208dc864e766289e3d5ef1.zip",coverURL:"https://cdn.beatsaver.com/323975ef9eaec337c8208dc864e766289e3d5ef1.jpg",previewURL:"https://cdn.beatsaver.com/323975ef9eaec337c8208dc864e766289e3d5ef1.mp3"}],createdAt:"2019-09-14T19:59:45.575Z",updatedAt:"2019-09-14T19:59:45.575Z",lastPublishedAt:"2019-09-14T19:59:45.575Z"},{id:"2005",name:"New Divide - Linkin Park - 100k Contest",description:"This is one of the 22 maps that were mapped for the 100k Contest where you can win over $7,000 in prizes. Go to https://bsaber.com/100k-contest/ to register!\nhttps://www.youtube.com/watch?v=deWMNAw03QI&t=28s\n\nhttps://twitter.com/TheDownyCat\nhttps://www.twitch.tv/downycat\nhttps://streamlabs.com/downycat/tip",uploader:{id:4285982,name:"downycat",uniqueSet:!0,hash:"5cff0b7398cc5a672c84ede5",avatar:"https://cdn.beatsaver.com/avatar/173538829888782336.png",type:"DISCORD"},metadata:{bpm:118,duration:268,songName:"New Divide",songSubName:"Linkin Park",songAuthorName:"DownyCat",levelAuthorName:"downycat"},stats:{plays:0,downloads:16063,upvotes:4873,downvotes:83,score:.9459},uploaded:"2018-11-13T00:58:32Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"be4a33ad1b1caef9f1f42b680ca1a9087db19ffe",key:"2005",state:"Published",createdAt:"2018-11-13T00:58:32Z",sageScore:6,diffs:[{njs:13,offset:0,notes:353,bombs:0,obstacles:78,nps:1.363,length:509.5,characteristic:"Standard",difficulty:"Easy",events:2605,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:259.068,paritySummary:{errors:29,warns:1,resets:0}},{njs:13,offset:0,notes:589,bombs:0,obstacles:18,nps:2.269,length:510.5,characteristic:"Standard",difficulty:"Normal",events:2605,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:259.576,paritySummary:{errors:12,warns:6,resets:0}},{njs:13,offset:0,notes:893,bombs:0,obstacles:13,nps:3.44,length:510.5,characteristic:"Standard",difficulty:"Hard",events:2605,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:259.576,paritySummary:{errors:16,warns:24,resets:0}},{njs:13,offset:0,notes:1167,bombs:0,obstacles:25,nps:4.496,length:510.5,characteristic:"Standard",difficulty:"Expert",events:2605,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:259.576,paritySummary:{errors:38,warns:48,resets:0}}],downloadURL:"https://cdn.beatsaver.com/be4a33ad1b1caef9f1f42b680ca1a9087db19ffe.zip",coverURL:"https://cdn.beatsaver.com/be4a33ad1b1caef9f1f42b680ca1a9087db19ffe.jpg",previewURL:"https://cdn.beatsaver.com/be4a33ad1b1caef9f1f42b680ca1a9087db19ffe.mp3"}],createdAt:"2018-11-13T00:58:32Z",updatedAt:"2018-11-13T00:58:32Z",lastPublishedAt:"2018-11-13T00:58:32Z"},{id:"d7fa",name:"Geoxor - Gloom [Wallmap]",description:"REUPLOAD due to last minute mapping error\n\nSpecial thanks to:\nNyri0 - For providing scripts that were crucial to making this map possible, and for helping me along the way.\nLayanmeta - For giving me so much encouragement throughout the final stages and making a brilliant YouTube video on this map.\nBSMG discord - For the continued support throughout the development process\nAll you people/birds - For playing my map :D\n\nBRIAN HAS BECOME SENTIENT. ALL HAIL BRIAN",uploader:{id:18761,name:"minething",uniqueSet:!0,hash:"5e9b4ead16c9680006287387",avatar:"https://www.gravatar.com/avatar/5e9b4ead16c9680006287387?d=retro",type:"SIMPLE"},metadata:{bpm:93,duration:167,songName:"Gloom",songSubName:"",songAuthorName:"Geoxor",levelAuthorName:"Mine Thing"},stats:{plays:0,downloads:8341,upvotes:2314,downvotes:15,score:.9457},uploaded:"2020-08-16T19:13:40.774Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"823b4e880baac024728ae96a7c20e28026c4585d",key:"d7fa",state:"Published",createdAt:"2020-08-16T19:13:40.774Z",sageScore:3,diffs:[{njs:12,offset:6,notes:0,bombs:0,obstacles:15605,nps:0,length:0,characteristic:"Standard",difficulty:"Easy",events:144,chroma:!0,me:!1,ne:!0,cinema:!1,seconds:0,paritySummary:{errors:0,warns:0,resets:0}},{njs:12,offset:6,notes:202,bombs:0,obstacles:15605,nps:1.309,length:239.125,characteristic:"Standard",difficulty:"Hard",events:144,chroma:!0,me:!1,ne:!0,cinema:!1,seconds:154.274,paritySummary:{errors:48,warns:6,resets:0}},{njs:12,offset:6,notes:411,bombs:4,obstacles:15605,nps:2.665,length:239,characteristic:"Standard",difficulty:"Expert",events:144,chroma:!0,me:!1,ne:!0,cinema:!1,seconds:154.194,paritySummary:{errors:0,warns:0,resets:1}},{njs:12,offset:3,notes:411,bombs:4,obstacles:12340,nps:2.665,length:239,characteristic:"Standard",difficulty:"ExpertPlus",events:144,chroma:!0,me:!1,ne:!0,cinema:!1,seconds:154.194,paritySummary:{errors:0,warns:0,resets:1}}],downloadURL:"https://cdn.beatsaver.com/823b4e880baac024728ae96a7c20e28026c4585d.zip",coverURL:"https://cdn.beatsaver.com/823b4e880baac024728ae96a7c20e28026c4585d.jpg",previewURL:"https://cdn.beatsaver.com/823b4e880baac024728ae96a7c20e28026c4585d.mp3"}],createdAt:"2020-08-16T19:13:40.774Z",updatedAt:"2020-08-16T19:13:40.774Z",lastPublishedAt:"2020-08-16T19:13:40.774Z"},{id:"116b0",name:"Sakuzyo - Lost Memory[Wall Map]",description:"https://www.youtube.com/watch?v=Ha0199UiDUQ\nMy first noodle extensions map\nMay cause performance issue :)\nRequirements:Noodle Extensions,Chroma",uploader:{id:4289114,name:"waika",uniqueSet:!0,hash:"5cff0b7698cc5a672c85464f",avatar:"https://cdn.beatsaver.com/avatar/530663167244894220.png",type:"DISCORD"},metadata:{bpm:95,duration:255,songName:"Lost Memory",songSubName:"",songAuthorName:"Sakuzyo",levelAuthorName:"waika"},stats:{plays:0,downloads:9091,upvotes:3250,downvotes:39,score:.9455},uploaded:"2020-11-28T11:08:12.961Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"1a88eee7cb1962157cc2439741fb06f7f78180d4",key:"116b0",state:"Published",createdAt:"2020-11-28T11:08:12.961Z",sageScore:3,diffs:[{njs:17,offset:.5,notes:0,bombs:0,obstacles:57070,nps:0,length:0,characteristic:"Standard",difficulty:"Normal",events:230,chroma:!0,me:!1,ne:!0,cinema:!1,seconds:0,paritySummary:{errors:0,warns:0,resets:0}},{njs:17,offset:.5,notes:506,bombs:0,obstacles:57070,nps:2.36,length:339.5,characteristic:"Standard",difficulty:"Expert",events:230,chroma:!0,me:!1,ne:!0,cinema:!1,seconds:214.421,paritySummary:{errors:0,warns:0,resets:0}}],downloadURL:"https://cdn.beatsaver.com/1a88eee7cb1962157cc2439741fb06f7f78180d4.zip",coverURL:"https://cdn.beatsaver.com/1a88eee7cb1962157cc2439741fb06f7f78180d4.jpg",previewURL:"https://cdn.beatsaver.com/1a88eee7cb1962157cc2439741fb06f7f78180d4.mp3"}],createdAt:"2020-11-28T11:08:12.961Z",updatedAt:"2020-11-28T11:08:12.961Z",lastPublishedAt:"2020-11-28T11:08:12.961Z"},{id:"9a0c",name:"Thnks fr th Mmrs - Fall Out Boy",description:"Thnks fr th Mmrs (or Thanks for the Memories) from Fall Out Boy.\nSo far the map that I have put the most work into (and which probably made me age by 3 years). Hope you enjoy it!\n\nThe map has Chroma lighting but can also be played without the Chroma mod.\nExpert+ contains single saber sections and polyrhythm parts. Just so you are warned ;)\n\nBig thanks to Sorukun for playtesting this map and especially to Timeweaver for pointing out all issues it had during its creation!",uploader:{id:21367,name:"hamsta",uniqueSet:!0,hash:"5de27451fffaa600066f2842",avatar:"https://www.gravatar.com/avatar/5de27451fffaa600066f2842?d=retro",type:"SIMPLE"},metadata:{bpm:155,duration:197,songName:"Thnks fr th Mmrs",songSubName:"",songAuthorName:"Fall Out Boy",levelAuthorName:"Hamsta"},stats:{plays:0,downloads:14444,upvotes:4054,downvotes:62,score:.9453},uploaded:"2020-04-12T09:50:46.516Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"0e8ef3006db854c67f04fe72322bccea410f69ee",key:"9a0c",state:"Published",createdAt:"2020-04-12T09:50:46.516Z",sageScore:5,diffs:[{njs:14,offset:0,notes:580,bombs:0,obstacles:51,nps:3.092,length:484,characteristic:"Standard",difficulty:"Hard",events:2597,chroma:!0,me:!1,ne:!1,cinema:!1,seconds:187.355,paritySummary:{errors:0,warns:0,resets:0}},{njs:14,offset:0,notes:637,bombs:0,obstacles:51,nps:3.395,length:484,characteristic:"Standard",difficulty:"Expert",events:2597,chroma:!0,me:!1,ne:!1,cinema:!1,seconds:187.355,paritySummary:{errors:0,warns:0,resets:0}},{njs:16,offset:0,notes:844,bombs:0,obstacles:39,nps:4.499,length:484,characteristic:"Standard",difficulty:"ExpertPlus",events:2597,chroma:!0,me:!1,ne:!1,cinema:!1,seconds:187.355,paritySummary:{errors:1,warns:2,resets:0}}],downloadURL:"https://cdn.beatsaver.com/0e8ef3006db854c67f04fe72322bccea410f69ee.zip",coverURL:"https://cdn.beatsaver.com/0e8ef3006db854c67f04fe72322bccea410f69ee.jpg",previewURL:"https://cdn.beatsaver.com/0e8ef3006db854c67f04fe72322bccea410f69ee.mp3"}],createdAt:"2020-04-12T09:50:46.516Z",updatedAt:"2020-04-12T09:50:46.516Z",lastPublishedAt:"2020-04-12T09:50:46.516Z"},{id:"4980",name:"Paradise - Coldplay",description:"\"Paradise\" is a song by the British rock band Coldplay. The song was released on 12 September 2011. I kinda like this song for relaxing on long car rides and I don't know how it will feel as a beat saber map but I'ma try mapping it anyways. So here it is :)",uploader:{id:58338,name:"Joetastic",uniqueSet:!0,hash:"5cff0b7498cc5a672c85050e",avatar:"https://cdn.beatsaver.com/avatar/227767566402191360.png",type:"DISCORD"},metadata:{bpm:70,duration:278,songName:"Paradise",songSubName:"Coldplay",songAuthorName:"Joetastic",levelAuthorName:"Joetastic"},stats:{plays:0,downloads:12627,upvotes:2893,downvotes:31,score:.9451},uploaded:"2019-04-30T05:45:51Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"b14639af36673a43fe32bc7563619deff438d438",key:"4980",state:"Published",createdAt:"2019-04-30T05:45:51Z",sageScore:6,diffs:[{njs:13,offset:0,notes:1023,bombs:0,obstacles:35,nps:3.816,length:312.75,characteristic:"Standard",difficulty:"Expert",events:4651,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:268.071,paritySummary:{errors:28,warns:29,resets:0}}],downloadURL:"https://cdn.beatsaver.com/b14639af36673a43fe32bc7563619deff438d438.zip",coverURL:"https://cdn.beatsaver.com/b14639af36673a43fe32bc7563619deff438d438.jpg",previewURL:"https://cdn.beatsaver.com/b14639af36673a43fe32bc7563619deff438d438.mp3"}],createdAt:"2019-04-30T05:45:51Z",updatedAt:"2019-04-30T05:45:51Z",lastPublishedAt:"2019-04-30T05:45:51Z"},{id:"efe",name:"Some Nights - Fun.",description:"Difficulties: Expert+, Expert, Hard, Normal\r\nYouTube Preview: https://youtu.be/X4R7VIZPffk",uploader:{id:30311,name:"bennydabeast",uniqueSet:!0,hash:"5cff0b7298cc5a672c84e98d",avatar:"https://cdn.beatsaver.com/avatar/30311.jpg",type:"SIMPLE"},metadata:{bpm:108,duration:255,songName:"Some Nights",songSubName:"Fun.",songAuthorName:"BennyDaBeast",levelAuthorName:"bennydabeast"},stats:{plays:0,downloads:15367,upvotes:7399,downvotes:170,score:.9451},uploaded:"2018-08-10T20:34:09Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"e64d6b7c5527d36005ae1801268798dd21ccf605",key:"efe",state:"Published",createdAt:"2018-08-10T20:34:09Z",sageScore:4,diffs:[{njs:10,offset:0,notes:321,bombs:0,obstacles:14,nps:1.382,length:418,characteristic:"Standard",difficulty:"Normal",events:1864,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:232.222,paritySummary:{errors:73,warns:36,resets:0}},{njs:10,offset:0,notes:432,bombs:0,obstacles:14,nps:1.86,length:418,characteristic:"Standard",difficulty:"Hard",events:1864,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:232.222,paritySummary:{errors:82,warns:51,resets:0}},{njs:10,offset:0,notes:680,bombs:0,obstacles:14,nps:2.928,length:418,characteristic:"Standard",difficulty:"Expert",events:1864,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:232.222,paritySummary:{errors:86,warns:82,resets:0}},{njs:10,offset:0,notes:810,bombs:0,obstacles:14,nps:3.488,length:418,characteristic:"Standard",difficulty:"ExpertPlus",events:1864,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:232.222,paritySummary:{errors:108,warns:106,resets:0}}],downloadURL:"https://cdn.beatsaver.com/e64d6b7c5527d36005ae1801268798dd21ccf605.zip",coverURL:"https://cdn.beatsaver.com/e64d6b7c5527d36005ae1801268798dd21ccf605.jpg",previewURL:"https://cdn.beatsaver.com/e64d6b7c5527d36005ae1801268798dd21ccf605.mp3"}],createdAt:"2018-08-10T20:34:09Z",updatedAt:"2018-08-10T20:34:09Z",lastPublishedAt:"2018-08-10T20:34:09Z"},{id:"14d64",name:"Try - MitiS Feat. RORY",description:"Twenty-Sixth Upload\n\nThis map means the whole world to me, so I hope everyone enjoys this map. My father passed away on Jan. 23, 2021, in the middle of making this map. I am dedicating this map for him because of how much this songs means to me now. \nPouring my heart and soul into this map took a lot out of me, making it as perfect to my little abilities I have for mapping.\n\nBig shout outs to Lonely and Jamman for lighting this beautiful song and for agreeing to light it, it means the world to me.\nBig shout outs to thelightdesigner for making such amazing and beautiful walls. Thank you for taking the time to make this, it means the world to me.\nBig shout outs to Mawntee for giving me advice on how to make this map feel and shout outs to thelitlewiseowl for modding it, showing me what I can improve in this map. \nBiggest shout outs to everyone that play tested it multiple times. I am sorry for bugging them for multiple play test. \n\nAnd Biggest shoutout to my favorite chillstep/melodic dubstep artist, MitiS and Rory for making this beautiful song. \nYou have no idea how much this song means to me, I thank you so much. Keep up the good work MitiS.\n\n**NOODLES AND CHROMA REQUIRED**\n\nI hope this map can show you the feeling in this song, as well as what it portrays. I tried my best, I hope it turns out great and everyone enjoys it. \nThank you everyone for taking the time to download and play this map. I appreciate it everyone.\n\nFeedback is always welcome!",uploader:{id:4285346,name:"remie",uniqueSet:!0,hash:"5f6efd989824150006d740ac",avatar:"https://cdn.beatsaver.com/avatar/144275927466115073.png",type:"DISCORD"},metadata:{bpm:132,duration:273,songName:"Try",songSubName:"",songAuthorName:"MitiS Feat. RORY",levelAuthorName:"Remie & Lone"},stats:{plays:0,downloads:7511,upvotes:2884,downvotes:31,score:.945},uploaded:"2021-03-01T13:29:26.471Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"6db3d9da217b41607d250aa7a28c5dc26a082188",key:"14d64",state:"Published",createdAt:"2021-03-01T13:29:26.471Z",sageScore:3,diffs:[{njs:17,offset:-.7,notes:1447,bombs:21,obstacles:17451,nps:6.217,length:512.083,characteristic:"Standard",difficulty:"ExpertPlus",events:36825,chroma:!0,me:!1,ne:!0,cinema:!1,seconds:232.765,paritySummary:{errors:0,warns:0,resets:2}}],downloadURL:"https://cdn.beatsaver.com/6db3d9da217b41607d250aa7a28c5dc26a082188.zip",coverURL:"https://cdn.beatsaver.com/6db3d9da217b41607d250aa7a28c5dc26a082188.jpg",previewURL:"https://cdn.beatsaver.com/6db3d9da217b41607d250aa7a28c5dc26a082188.mp3"}],createdAt:"2021-03-01T13:29:26.471Z",updatedAt:"2021-03-01T13:29:26.471Z",lastPublishedAt:"2021-03-01T13:29:26.471Z"},{id:"3b84",name:"Revenge [DJ Got Us Fallin In Love Minecraft Parody] - CaptainSparklez ft. TryHardNinja",description:"Revenge is a Minecraft parody song of DJ Got Us Fallin In Love by CaptainSparklez featuring vocals from TryHardNinja. Slight remap of DJ Got Us Fallin In Love.\r\n\r\nDamn, this song brings me back memories of the golden age of Minecraft.",uploader:{id:58338,name:"Joetastic",uniqueSet:!0,hash:"5cff0b7498cc5a672c85050e",avatar:"https://cdn.beatsaver.com/avatar/227767566402191360.png",type:"DISCORD"},metadata:{bpm:120,duration:222,songName:"Revenge",songSubName:"CaptainSparklez ft. TryHardNinja",songAuthorName:"Joetastic",levelAuthorName:"Joetastic"},stats:{plays:0,downloads:13421,upvotes:7001,downvotes:157,score:.945},uploaded:"2019-03-04T17:01:53Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"7ac4d99cee16e8d0437d7e8feecdb12488cc27d3",key:"3b84",state:"Published",createdAt:"2019-03-04T17:01:53Z",sageScore:5,diffs:[{njs:14,offset:0,notes:858,bombs:0,obstacles:1,nps:3.972,length:432,characteristic:"Standard",difficulty:"Expert",events:1675,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:216,paritySummary:{errors:80,warns:85,resets:0}}],downloadURL:"https://cdn.beatsaver.com/7ac4d99cee16e8d0437d7e8feecdb12488cc27d3.zip",coverURL:"https://cdn.beatsaver.com/7ac4d99cee16e8d0437d7e8feecdb12488cc27d3.jpg",previewURL:"https://cdn.beatsaver.com/7ac4d99cee16e8d0437d7e8feecdb12488cc27d3.mp3"}],createdAt:"2019-03-04T17:01:53Z",updatedAt:"2019-03-04T17:01:53Z",lastPublishedAt:"2019-03-04T17:01:53Z"},{id:"b7aa",name:"Powerwolf - Venom of Venus",description:"Back to my more regular style, Powerwolf is a power-metal band that perform around the themes of werewolves and religion, a strange but interesting mixture.\r\n\r\nEx+ has a no-colours mode for those who wish to play without the custom block colours, but unfortunately I can't fit such an option for all difficulties.\r\n\r\nNormal 1.85 NPS\r\nHard 3.15 NPS\r\nExpert 4.43 NPS\r\nExpert+ 5.11 NPS\r\n\r\nThere is no easy difficulty, as that I needed the slot for the no-colour mode.",uploader:{id:4285369,name:"Cyrix",uniqueSet:!0,hash:"5eb6eb9a7abb000006c85add",avatar:"https://cdn.beatsaver.com/avatar/167730807929044992.png",type:"DISCORD"},metadata:{bpm:164,duration:210,songName:"Venom of Venus",songSubName:"",songAuthorName:"Powerwolf",levelAuthorName:"Cyrix"},stats:{plays:0,downloads:8465,upvotes:2864,downvotes:31,score:.9449},uploaded:"2020-06-29T18:24:10.081Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"f88b43c770dcd85a4ba18368853fbf062d41a09c",key:"b7aa",state:"Published",createdAt:"2020-06-29T18:24:10.081Z",sageScore:7,diffs:[{njs:12,offset:.5,notes:392,bombs:0,obstacles:63,nps:1.948,length:549.938,characteristic:"Standard",difficulty:"Easy",events:4188,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:201.197,paritySummary:{errors:44,warns:15,resets:0}},{njs:13,offset:1,notes:666,bombs:8,obstacles:36,nps:3.31,length:549.938,characteristic:"Standard",difficulty:"Normal",events:4188,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:201.197,paritySummary:{errors:1,warns:0,resets:1}},{njs:17,offset:0,notes:934,bombs:9,obstacles:7,nps:4.642,length:549.938,characteristic:"Standard",difficulty:"Hard",events:4188,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:201.197,paritySummary:{errors:0,warns:0,resets:2}},{njs:20,offset:-.25,notes:1079,bombs:4,obstacles:7,nps:5.353,length:551,characteristic:"Standard",difficulty:"Expert",events:4192,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:201.585,paritySummary:{errors:1,warns:0,resets:2}},{njs:20,offset:-.25,notes:1079,bombs:4,obstacles:7,nps:5.353,length:551,characteristic:"Standard",difficulty:"ExpertPlus",events:4192,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:201.585,paritySummary:{errors:1,warns:0,resets:2}}],downloadURL:"https://cdn.beatsaver.com/f88b43c770dcd85a4ba18368853fbf062d41a09c.zip",coverURL:"https://cdn.beatsaver.com/f88b43c770dcd85a4ba18368853fbf062d41a09c.jpg",previewURL:"https://cdn.beatsaver.com/f88b43c770dcd85a4ba18368853fbf062d41a09c.mp3"}],createdAt:"2020-06-29T18:24:10.081Z",updatedAt:"2020-06-29T18:24:10.081Z",lastPublishedAt:"2020-06-29T18:24:10.081Z"},{id:"fd",name:"Rasputin - Boney M",description:"Expert\r\n127 bpm",uploader:{id:48512,name:"jobas",uniqueSet:!1,hash:"5cff0b7298cc5a672c84e9a2",avatar:"https://www.gravatar.com/avatar/5cff0b7298cc5a672c84e9a2?d=retro",type:"SIMPLE"},metadata:{bpm:127,duration:266,songName:"Rasputin-Boney M",songSubName:"",songAuthorName:"Jobas",levelAuthorName:"jobas"},stats:{plays:0,downloads:22705,upvotes:8696,downvotes:218,score:.9448},uploaded:"2018-05-18T23:27:59Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"bf2f5afaeae0767c9bd6944ce74a23f6b24f4098",key:"fd",state:"Published",createdAt:"2018-05-18T23:27:59Z",sageScore:4,diffs:[{njs:10,offset:0,notes:701,bombs:0,obstacles:124,nps:2.699,length:549.844,characteristic:"Standard",difficulty:"Hard",events:0,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:259.769,paritySummary:{errors:29,warns:158,resets:0}}],downloadURL:"https://cdn.beatsaver.com/bf2f5afaeae0767c9bd6944ce74a23f6b24f4098.zip",coverURL:"https://cdn.beatsaver.com/bf2f5afaeae0767c9bd6944ce74a23f6b24f4098.jpg",previewURL:"https://cdn.beatsaver.com/bf2f5afaeae0767c9bd6944ce74a23f6b24f4098.mp3"}],createdAt:"2018-05-18T23:27:59Z",updatedAt:"2018-05-18T23:27:59Z",lastPublishedAt:"2018-05-18T23:27:59Z"},{id:"74d5",name:"What's New, Scooby-Doo? - Simple Plan",description:"Just practicing my mapping with this song\n\nalso, my childhood nostalgia\nEDIT: forgot to set NJS",uploader:{id:58338,name:"Joetastic",uniqueSet:!0,hash:"5cff0b7498cc5a672c85050e",avatar:"https://cdn.beatsaver.com/avatar/227767566402191360.png",type:"DISCORD"},metadata:{bpm:158.03,duration:67,songName:"What's New, Scooby-Doo?",songSubName:"",songAuthorName:"Simple Plan",levelAuthorName:"Joetastic"},stats:{plays:0,downloads:10991,upvotes:3468,downvotes:48,score:.9447},uploaded:"2019-12-08T18:41:10.652Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"e004f84ffebded94e761d667db6aaa44f000a8a8",key:"74d5",state:"Published",createdAt:"2019-12-08T18:41:10.652Z",sageScore:2,diffs:[{njs:15,offset:0,notes:330,bombs:2,obstacles:0,nps:5.226,length:166.313,characteristic:"Standard",difficulty:"Expert",events:382,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:63.145,paritySummary:{errors:9,warns:7,resets:0}}],downloadURL:"https://cdn.beatsaver.com/e004f84ffebded94e761d667db6aaa44f000a8a8.zip",coverURL:"https://cdn.beatsaver.com/e004f84ffebded94e761d667db6aaa44f000a8a8.jpg",previewURL:"https://cdn.beatsaver.com/e004f84ffebded94e761d667db6aaa44f000a8a8.mp3"}],createdAt:"2019-12-08T18:41:10.652Z",updatedAt:"2019-12-08T18:41:10.652Z",lastPublishedAt:"2019-12-08T18:41:10.652Z"},{id:"a438",name:"Wait - M83 (wall map)",description:"I wanted to do something special for this great song, and also see the potential of Noodle Extensions. A few tips for a better experience:\r\n- disable the mirror effect in the game settings\r\n- turn the SFX volume down in the player settings\r\n- hide the HUD in the player settings\r\n\r\nVideo: https://youtu.be/oe6ThhijPy0\r\n\r\nThe map has a lot of walls, so you might not be able to run it on the lower-end hardware. I've included a version with less walls in case it helps.",uploader:{id:4288814,name:"nyri0",uniqueSet:!0,hash:"5e792df416c9680006086a78",avatar:"https://cdn.beatsaver.com/avatar/396715033125584907.png",type:"DISCORD"},metadata:{bpm:148,duration:336,songName:"Wait",songSubName:"",songAuthorName:"M83",levelAuthorName:"nyri0"},stats:{plays:0,downloads:6655,upvotes:2103,downvotes:14,score:.9442},uploaded:"2020-05-08T23:53:02.030Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"0d8921ef06a889cbd9db13afcc43f09a1619b173",key:"a438",state:"Published",createdAt:"2020-05-08T23:53:02.030Z",sageScore:6,diffs:[{njs:8,offset:6,notes:735,bombs:0,obstacles:6684,nps:2.225,length:815,characteristic:"Standard",difficulty:"Easy",events:5,chroma:!1,me:!1,ne:!0,cinema:!1,seconds:330.405,paritySummary:{errors:94,warns:27,resets:0}},{njs:8,offset:6,notes:735,bombs:0,obstacles:10499,nps:2.225,length:815,characteristic:"Standard",difficulty:"Hard",events:5,chroma:!1,me:!1,ne:!0,cinema:!1,seconds:330.405,paritySummary:{errors:94,warns:27,resets:0}}],downloadURL:"https://cdn.beatsaver.com/0d8921ef06a889cbd9db13afcc43f09a1619b173.zip",coverURL:"https://cdn.beatsaver.com/0d8921ef06a889cbd9db13afcc43f09a1619b173.jpg",previewURL:"https://cdn.beatsaver.com/0d8921ef06a889cbd9db13afcc43f09a1619b173.mp3"}],createdAt:"2020-05-08T23:53:02.030Z",updatedAt:"2020-05-08T23:53:02.030Z",lastPublishedAt:"2020-05-08T23:53:02.030Z"},{id:"4a35",name:"[Anniversary] Animals (Radio Edit) - Martin Garrix [Joetastic & StyngMe]",description:"Part of the Anniversary Song Pack",uploader:{id:37070,name:"anniversaryteam",uniqueSet:!0,hash:"5cff0b7798cc5a672c8565a3",avatar:"https://www.gravatar.com/avatar/5cff0b7798cc5a672c8565a3?d=retro",type:"SIMPLE"},metadata:{bpm:128,duration:176,songName:"Animals (Radio Edit)",songSubName:"Martin Garrix",songAuthorName:"Joetastic & StyngMe",levelAuthorName:"AnniversaryTeam"},stats:{plays:0,downloads:14718,upvotes:7734,downvotes:189,score:.9442},uploaded:"2019-05-03T14:08:02Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"1a1737caba0f049a69369e328622e06b2a32b634",key:"4a35",state:"Published",createdAt:"2019-05-03T14:08:02Z",sageScore:8,diffs:[{njs:10,offset:0,notes:272,bombs:0,obstacles:19,nps:1.612,length:360,characteristic:"Standard",difficulty:"Easy",events:2074,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:168.75,paritySummary:{errors:32,warns:22,resets:0}},{njs:12,offset:0,notes:350,bombs:0,obstacles:22,nps:2.08,length:359,characteristic:"Standard",difficulty:"Normal",events:2074,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:168.281,paritySummary:{errors:34,warns:27,resets:0}},{njs:14,offset:0,notes:436,bombs:6,obstacles:22,nps:2.584,length:360,characteristic:"Standard",difficulty:"Hard",events:2074,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:168.75,paritySummary:{errors:29,warns:31,resets:4}},{njs:15,offset:0,notes:675,bombs:4,obstacles:22,nps:4,length:360,characteristic:"Standard",difficulty:"Expert",events:2074,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:168.75,paritySummary:{errors:26,warns:34,resets:1}},{njs:16,offset:0,notes:738,bombs:0,obstacles:21,nps:4.373,length:360,characteristic:"Standard",difficulty:"ExpertPlus",events:2038,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:168.75,paritySummary:{errors:46,warns:40,resets:0}}],downloadURL:"https://cdn.beatsaver.com/1a1737caba0f049a69369e328622e06b2a32b634.zip",coverURL:"https://cdn.beatsaver.com/1a1737caba0f049a69369e328622e06b2a32b634.jpg",previewURL:"https://cdn.beatsaver.com/1a1737caba0f049a69369e328622e06b2a32b634.mp3"}],createdAt:"2019-05-03T14:08:02Z",updatedAt:"2019-05-03T14:08:02Z",lastPublishedAt:"2019-05-03T14:08:02Z"},{id:"5038",name:"Uptown Funk - Mark Ronson",description:"5/31: This version now works for the Oculus Quest.\r\n\r\nDifficulties: Expert and Hard\r\nYouTube Link: https://youtu.be/6TYji_Klr9I",uploader:{id:30311,name:"bennydabeast",uniqueSet:!0,hash:"5cff0b7298cc5a672c84e98d",avatar:"https://cdn.beatsaver.com/avatar/30311.jpg",type:"SIMPLE"},metadata:{bpm:115,duration:271,songName:"Uptown Funk",songSubName:"Mark Ronson",songAuthorName:"BennyDaBeast",levelAuthorName:"bennydabeast"},stats:{plays:0,downloads:21925,upvotes:9390,downvotes:251,score:.944},uploaded:"2019-05-31T17:58:39Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"d110e413fb7fb462b692f1f17b835cf8b7280884",key:"5038",state:"Published",createdAt:"2019-05-31T17:58:39Z",sageScore:5,diffs:[{njs:10,offset:0,notes:639,bombs:0,obstacles:24,nps:2.397,length:511,characteristic:"Standard",difficulty:"Hard",events:786,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:266.609,paritySummary:{errors:115,warns:89,resets:0}},{njs:10,offset:0,notes:776,bombs:0,obstacles:24,nps:2.911,length:511,characteristic:"Standard",difficulty:"Expert",events:786,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:266.609,paritySummary:{errors:98,warns:111,resets:0}}],downloadURL:"https://cdn.beatsaver.com/d110e413fb7fb462b692f1f17b835cf8b7280884.zip",coverURL:"https://cdn.beatsaver.com/d110e413fb7fb462b692f1f17b835cf8b7280884.jpg",previewURL:"https://cdn.beatsaver.com/d110e413fb7fb462b692f1f17b835cf8b7280884.mp3"}],createdAt:"2019-05-31T17:58:39Z",updatedAt:"2019-05-31T17:58:39Z",lastPublishedAt:"2019-05-31T17:58:39Z"},{id:"1c1",name:"Shia LaBeouf (Rob Cantor)",description:"Shia LaBeouf - Rob Cantor\r\nFinished Lighting\r\nDifficulties: Expert, Hard, Normal, Easy\r\nBPM: 96",uploader:{id:53184,name:"kleid",uniqueSet:!0,hash:"5cff0b7398cc5a672c84ecd9",avatar:"https://www.gravatar.com/avatar/5cff0b7398cc5a672c84ecd9?d=retro",type:"SIMPLE"},metadata:{bpm:96,duration:154,songName:"Shia LaBeouf",songSubName:"Rob Cantor",songAuthorName:"Kleid",levelAuthorName:"kleid"},stats:{plays:0,downloads:12103,upvotes:6574,downvotes:151,score:.9439},uploaded:"2018-05-23T00:42:28Z",automapper:!1,ranked:!0,qualified:!1,versions:[{hash:"1279a3fcaff31e767e5dd7d7c016ec08733cf566",key:"1c1",state:"Published",createdAt:"2018-05-23T00:42:28Z",sageScore:5,diffs:[{njs:10,offset:0,notes:266,bombs:0,obstacles:39,nps:1.891,length:225,characteristic:"Standard",difficulty:"Easy",events:379,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:140.625,paritySummary:{errors:36,warns:49,resets:0},stars:1.36},{njs:10,offset:0,notes:323,bombs:0,obstacles:44,nps:2.296,length:225,characteristic:"Standard",difficulty:"Normal",events:379,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:140.625,paritySummary:{errors:59,warns:46,resets:0},stars:1.65},{njs:10,offset:0,notes:344,bombs:24,obstacles:44,nps:2.445,length:225,characteristic:"Standard",difficulty:"Hard",events:379,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:140.625,paritySummary:{errors:61,warns:48,resets:3},stars:1.73},{njs:10,offset:0,notes:378,bombs:28,obstacles:64,nps:2.687,length:225,characteristic:"Standard",difficulty:"Expert",events:379,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:140.625,paritySummary:{errors:69,warns:54,resets:3}}],downloadURL:"https://cdn.beatsaver.com/1279a3fcaff31e767e5dd7d7c016ec08733cf566.zip",coverURL:"https://cdn.beatsaver.com/1279a3fcaff31e767e5dd7d7c016ec08733cf566.jpg",previewURL:"https://cdn.beatsaver.com/1279a3fcaff31e767e5dd7d7c016ec08733cf566.mp3"}],createdAt:"2018-05-23T00:42:28Z",updatedAt:"2018-05-23T00:42:28Z",lastPublishedAt:"2018-05-23T00:42:28Z"},{id:"7a64",name:"Joey Batey - Toss A Coin To Your Witcher",description:"Expert+ Preview https://www.youtube.com/watch?v=AjfABhvswrI\n\nToss a Coin to Beat Saber!\n\nNetflix's The Witcher OST.\nOriginal Music by Sonya Belousova & Giona Ostinelli.\nLyrics by Jenny Klein, Sonya Belousova & Giona Ostinelli.\nPerformed by Joey Batey.\n\nThanks Sorukun for playtesting.",uploader:{id:4286200,name:"holair",uniqueSet:!0,hash:"5cff0b7698cc5a672c853af4",avatar:"https://cdn.beatsaver.com/avatar/176034748571844608.png",type:"DISCORD"},metadata:{bpm:105,duration:180,songName:"Toss A Coin To Your Witcher",songSubName:"Netflix's The Witcher",songAuthorName:"Joey Batey",levelAuthorName:"Holair"},stats:{plays:0,downloads:16196,upvotes:9958,downvotes:275,score:.9438},uploaded:"2019-12-28T20:11:35.767Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"19a733cf9202ef25725966d78f465bf87b26254d",key:"7a64",state:"Published",createdAt:"2019-12-28T20:11:35.767Z",sageScore:7,diffs:[{njs:10,offset:0,notes:175,bombs:0,obstacles:1,nps:1.008,length:303.743,characteristic:"Standard",difficulty:"Easy",events:814,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:173.567,paritySummary:{errors:55,warns:12,resets:0}},{njs:10,offset:0,notes:322,bombs:0,obstacles:2,nps:1.855,length:303.743,characteristic:"Standard",difficulty:"Normal",events:814,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:173.567,paritySummary:{errors:37,warns:21,resets:0}},{njs:12,offset:0,notes:459,bombs:0,obstacles:10,nps:2.645,length:303.743,characteristic:"Standard",difficulty:"Hard",events:814,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:173.567,paritySummary:{errors:38,warns:16,resets:0}},{njs:14,offset:0,notes:578,bombs:0,obstacles:15,nps:3.33,length:303.743,characteristic:"Standard",difficulty:"Expert",events:1310,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:173.567,paritySummary:{errors:37,warns:40,resets:0}},{njs:14,offset:0,notes:580,bombs:0,obstacles:14,nps:3.342,length:303.74,characteristic:"Standard",difficulty:"ExpertPlus",events:1310,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:173.566,paritySummary:{errors:41,warns:34,resets:0}}],downloadURL:"https://cdn.beatsaver.com/19a733cf9202ef25725966d78f465bf87b26254d.zip",coverURL:"https://cdn.beatsaver.com/19a733cf9202ef25725966d78f465bf87b26254d.jpg",previewURL:"https://cdn.beatsaver.com/19a733cf9202ef25725966d78f465bf87b26254d.mp3"}],createdAt:"2019-12-28T20:11:35.767Z",updatedAt:"2019-12-28T20:11:35.767Z",lastPublishedAt:"2019-12-28T20:11:35.767Z"},{id:"49f2",name:"It's My Life - Bon Jovi",description:"I might be a huge weeb but I still enjoy listening to 80s band: Bon Jovi. Here's one of their more modern songs from the 2000s: It's My Life! Mapping on this isn't too difficult, it's an slow rock song so not much I can map to anyways",uploader:{id:58338,name:"Joetastic",uniqueSet:!0,hash:"5cff0b7498cc5a672c85050e",avatar:"https://cdn.beatsaver.com/avatar/227767566402191360.png",type:"DISCORD"},metadata:{bpm:120,duration:226,songName:"It's My Life",songSubName:"Bon Jovi",songAuthorName:"Joetastic",levelAuthorName:"Joetastic"},stats:{plays:0,downloads:11924,upvotes:3179,downvotes:44,score:.9436},uploaded:"2019-05-02T14:08:00Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"172b9d6d206a3fb679426b2934daad3191b10ec7",key:"49f2",state:"Published",createdAt:"2019-05-02T14:08:00Z",sageScore:5,diffs:[{njs:12,offset:0,notes:684,bombs:0,obstacles:4,nps:3.081,length:444,characteristic:"Standard",difficulty:"Hard",events:1968,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:222,paritySummary:{errors:13,warns:15,resets:0}}],downloadURL:"https://cdn.beatsaver.com/172b9d6d206a3fb679426b2934daad3191b10ec7.zip",coverURL:"https://cdn.beatsaver.com/172b9d6d206a3fb679426b2934daad3191b10ec7.jpg",previewURL:"https://cdn.beatsaver.com/172b9d6d206a3fb679426b2934daad3191b10ec7.mp3"}],createdAt:"2019-05-02T14:08:00Z",updatedAt:"2019-05-02T14:08:00Z",lastPublishedAt:"2019-05-02T14:08:00Z"},{id:"5616",name:"Sanctuary - Joji (All Difficulties, Single Saber, & No Arrows)",description:"A tribute to our boy Joji. Lots of love for him in this, 10 difficulties for players of all skill to enjoy.\n\n168 BPM - 2:56 Runtime\nEasy - 268 Notes\nNormal - 327 Notes\nHard - 409 Notes\nExpert - 465 Notes\nExpert+ - 542 Notes\n\nHard (Single Saber) - 306 Notes\nExpert (Single Saber) - 375 Notes\nExpert+ (Single Saber) - 444 Notes\n\nSincerity Difficulty (Reversed No Arrow) - 465 Notes\nSanctuary Difficulty (Reversed No Arrow) - 542 Notes\n\nGameplay:  https://youtu.be/u2AYPs94t7o\n\n**Little easter egg. Wall counts on maps correspond to milestones for George Miller. 162 videos on FilthyFrank YT channel, 105 videos on TooDamnFilthy YT channel, 95 videos on Dizastamusic YT channel, 38 songs on Pink Guy album, 35 songs on Pink Season album.",uploader:{id:4284981,name:"skylerwallace",uniqueSet:!0,hash:"5cff0b7298cc5a672c84ea67",avatar:"https://cdn.beatsaver.com/avatar/398344856868487168.png",type:"DISCORD"},metadata:{bpm:168,duration:176,songName:"Sanctuary",songSubName:"",songAuthorName:"Joji",levelAuthorName:"Skyler Wallace"},stats:{plays:0,downloads:12792,upvotes:3919,downvotes:67,score:.9434},uploaded:"2019-07-09T02:56:20.454Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"76bc9c795600df8c663dea4927f470d0a7700ab3",key:"5616",state:"Published",createdAt:"2019-07-09T02:56:20.454Z",sageScore:8,diffs:[{njs:10,offset:0,notes:268,bombs:0,obstacles:35,nps:1.737,length:432,characteristic:"Standard",difficulty:"Easy",events:3623,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:154.286,paritySummary:{errors:94,warns:18,resets:0}},{njs:10,offset:0,notes:327,bombs:0,obstacles:38,nps:2.119,length:432,characteristic:"Standard",difficulty:"Normal",events:3623,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:154.286,paritySummary:{errors:61,warns:12,resets:0}},{njs:12,offset:0,notes:409,bombs:0,obstacles:92,nps:2.651,length:432,characteristic:"Standard",difficulty:"Hard",events:3623,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:154.286,paritySummary:{errors:29,warns:10,resets:0}},{njs:14,offset:1,notes:465,bombs:0,obstacles:105,nps:3.014,length:432,characteristic:"Standard",difficulty:"Expert",events:3623,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:154.286,paritySummary:{errors:37,warns:26,resets:0}},{njs:14,offset:1,notes:542,bombs:0,obstacles:162,nps:3.513,length:432,characteristic:"Standard",difficulty:"ExpertPlus",events:3623,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:154.286,paritySummary:{errors:24,warns:29,resets:0}},{njs:12,offset:0,notes:306,bombs:0,obstacles:92,nps:1.983,length:432,characteristic:"OneSaber",difficulty:"Hard",events:3623,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:154.286,paritySummary:{errors:23,warns:28,resets:0}},{njs:14,offset:1,notes:375,bombs:0,obstacles:105,nps:2.431,length:432,characteristic:"OneSaber",difficulty:"Expert",events:3623,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:154.286,paritySummary:{errors:26,warns:29,resets:0}},{njs:14,offset:1,notes:444,bombs:0,obstacles:162,nps:2.878,length:432,characteristic:"OneSaber",difficulty:"ExpertPlus",events:3623,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:154.286,paritySummary:{errors:25,warns:57,resets:0}},{njs:-14,offset:1,notes:465,bombs:0,obstacles:105,nps:3.014,length:432,characteristic:"NoArrows",difficulty:"Expert",events:3623,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:154.286,paritySummary:{errors:0,warns:0,resets:0}},{njs:-14,offset:1,notes:542,bombs:0,obstacles:162,nps:3.513,length:432,characteristic:"NoArrows",difficulty:"ExpertPlus",events:3623,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:154.286,paritySummary:{errors:0,warns:0,resets:0}}],downloadURL:"https://cdn.beatsaver.com/76bc9c795600df8c663dea4927f470d0a7700ab3.zip",coverURL:"https://cdn.beatsaver.com/76bc9c795600df8c663dea4927f470d0a7700ab3.jpg",previewURL:"https://cdn.beatsaver.com/76bc9c795600df8c663dea4927f470d0a7700ab3.mp3"}],createdAt:"2019-07-09T02:56:20.454Z",updatedAt:"2019-07-09T02:56:20.454Z",lastPublishedAt:"2019-07-09T02:56:20.454Z"},{id:"9b35",name:"Ready To [BNA: Brand New Animal Opening]",description:'use CHROMA mod for some cool ring prop effects\n\nTrigger greatness with a fire opening\nI\'m not a furry\nI think\n\n"Ready To" was sung by main girl, Michiru Kagemori (CV: Sumire Morohoshi)\n\nBPM 147 |\nExpert+\nExpert\nHard\nNormal\nEasy\n\ntyhf\n\npreview: https://www.youtube.com/watch?v=x6Q0y8Y8g0U\n\nDM any feedback on Discord\nETAN#8341',uploader:{id:4235140,name:"etan",uniqueSet:!0,hash:"5cff0b7798cc5a672c855775",avatar:"https://cdn.beatsaver.com/avatar/136373107559497728.png",type:"DISCORD"},metadata:{bpm:147,duration:199,songName:"Ready To",songSubName:"",songAuthorName:"Michiru (CV: Sumire Morohoshi)",levelAuthorName:"ETAN"},stats:{plays:0,downloads:12461,upvotes:4254,downvotes:78,score:.9432},uploaded:"2020-04-15T05:30:10.784Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"c5de287d4406906d4ad3ddebc18e18446bb3a578",key:"9b35",state:"Published",createdAt:"2020-04-15T05:30:10.784Z",sageScore:7,diffs:[{njs:11,offset:0,notes:264,bombs:0,obstacles:2,nps:1.356,length:477,characteristic:"Standard",difficulty:"Easy",events:11962,chroma:!0,me:!1,ne:!1,cinema:!1,seconds:194.694,paritySummary:{errors:2,warns:4,resets:0}},{njs:11,offset:0,notes:336,bombs:0,obstacles:2,nps:1.726,length:477,characteristic:"Standard",difficulty:"Normal",events:11962,chroma:!0,me:!1,ne:!1,cinema:!1,seconds:194.694,paritySummary:{errors:0,warns:0,resets:0}},{njs:13,offset:1,notes:500,bombs:32,obstacles:2,nps:2.568,length:477,characteristic:"Standard",difficulty:"Hard",events:11962,chroma:!0,me:!1,ne:!1,cinema:!1,seconds:194.694,paritySummary:{errors:0,warns:0,resets:0}},{njs:16,offset:.3,notes:734,bombs:32,obstacles:2,nps:3.77,length:477,characteristic:"Standard",difficulty:"Expert",events:11962,chroma:!0,me:!1,ne:!1,cinema:!1,seconds:194.694,paritySummary:{errors:0,warns:0,resets:0}},{njs:21,offset:-.3,notes:900,bombs:32,obstacles:2,nps:4.623,length:477,characteristic:"Standard",difficulty:"ExpertPlus",events:11962,chroma:!0,me:!1,ne:!1,cinema:!1,seconds:194.694,paritySummary:{errors:0,warns:0,resets:0}},{njs:16,offset:0,notes:0,bombs:0,obstacles:0,nps:0,length:0,characteristic:"Lightshow",difficulty:"Easy",events:11962,chroma:!0,me:!1,ne:!1,cinema:!1,seconds:0,paritySummary:{errors:0,warns:0,resets:0}}],downloadURL:"https://cdn.beatsaver.com/c5de287d4406906d4ad3ddebc18e18446bb3a578.zip",coverURL:"https://cdn.beatsaver.com/c5de287d4406906d4ad3ddebc18e18446bb3a578.jpg",previewURL:"https://cdn.beatsaver.com/c5de287d4406906d4ad3ddebc18e18446bb3a578.mp3"}],createdAt:"2020-04-15T05:30:10.784Z",updatedAt:"2020-04-15T05:30:10.784Z",lastPublishedAt:"2020-04-15T05:30:10.784Z"},{id:"56cb",name:"Onegai Muscle [Dumbbell Nan Kilo Moteru? Opening]",description:"SAIDO CHESTO\n\nSung by \nHibiki Sakura (CV: Ai Fairouz)\nNaruzou Machio (CV: Kaito Ishikawa)\n\nBPM 132 | Length 1:32\nMuscle!+ (Expert+)\nExpert\nHard\n\nThanks to Helen Carnate and Kival Evan for playtesting\n\ntyhf\n\ndm me on discord with feedback\nETAN#8341",uploader:{id:4235140,name:"etan",uniqueSet:!0,hash:"5cff0b7798cc5a672c855775",avatar:"https://cdn.beatsaver.com/avatar/136373107559497728.png",type:"DISCORD"},metadata:{bpm:132,duration:92,songName:"Onegai Muscle",songSubName:"",songAuthorName:"Ai Fairouz, Kaito Ishikawa",levelAuthorName:"ETAN"},stats:{plays:0,downloads:12485,upvotes:5772,downvotes:131,score:.9428},uploaded:"2019-07-13T16:48:46.669Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"7aa8bd16a692b8c8769d96cf96b9b259bea2e862",key:"56cb",state:"Published",createdAt:"2019-07-13T16:48:46.669Z",sageScore:5,diffs:[{njs:13,offset:0,notes:223,bombs:32,obstacles:37,nps:2.544,length:192.875,characteristic:"Standard",difficulty:"Hard",events:5023,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:87.67,paritySummary:{errors:4,warns:5,resets:0}},{njs:16,offset:0,notes:304,bombs:32,obstacles:37,nps:3.468,length:192.875,characteristic:"Standard",difficulty:"Expert",events:5023,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:87.67,paritySummary:{errors:8,warns:4,resets:0}},{njs:19,offset:0,notes:402,bombs:32,obstacles:38,nps:4.585,length:192.875,characteristic:"Standard",difficulty:"ExpertPlus",events:5023,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:87.67,paritySummary:{errors:12,warns:6,resets:0}}],downloadURL:"https://cdn.beatsaver.com/7aa8bd16a692b8c8769d96cf96b9b259bea2e862.zip",coverURL:"https://cdn.beatsaver.com/7aa8bd16a692b8c8769d96cf96b9b259bea2e862.jpg",previewURL:"https://cdn.beatsaver.com/7aa8bd16a692b8c8769d96cf96b9b259bea2e862.mp3"}],createdAt:"2019-07-13T16:48:46.669Z",updatedAt:"2019-07-13T16:48:46.669Z",lastPublishedAt:"2019-07-13T16:48:46.669Z"},{id:"3b76",name:"Caravan Palace - Miracle",description:"==================================================\r\nSong: Caravan Palace - Miracle\r\nBPM: 120\r\nNote jump speed: 10 - 16\r\nVersions: Expert+, Expert, Hard, Normal\r\n=============================\r\nLove this new track from Caravan Palace",uploader:{id:4287543,name:"therealzeroz",uniqueSet:!0,hash:"5cff0b7498cc5a672c85037b",avatar:"https://cdn.beatsaver.com/avatar/182672808961114112.png",type:"DISCORD"},metadata:{bpm:100,duration:221,songName:"Caravan Palace - Miracle",songSubName:"",songAuthorName:"TheRealZeroz",levelAuthorName:"TheRealZeroz"},stats:{plays:0,downloads:8954,upvotes:5074,downvotes:107,score:.9428},uploaded:"2019-03-04T12:15:10Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"29e5877ec735378b8ba3751dc8896bf63a43c525",key:"3b76",state:"Published",createdAt:"2019-03-04T12:15:10Z",sageScore:3,diffs:[{njs:10,offset:0,notes:326,bombs:0,obstacles:4,nps:1.793,length:303,characteristic:"Standard",difficulty:"Normal",events:4399,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:181.8,paritySummary:{errors:38,warns:2,resets:0}},{njs:13,offset:0,notes:562,bombs:0,obstacles:0,nps:3.081,length:304,characteristic:"Standard",difficulty:"Hard",events:4399,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:182.4,paritySummary:{errors:12,warns:13,resets:0}},{njs:14,offset:0,notes:1034,bombs:0,obstacles:8,nps:5.669,length:304,characteristic:"Standard",difficulty:"Expert",events:4399,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:182.4,paritySummary:{errors:20,warns:2,resets:0}},{njs:16,offset:0,notes:1156,bombs:0,obstacles:9,nps:6.348,length:303.5,characteristic:"Standard",difficulty:"ExpertPlus",events:4399,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:182.1,paritySummary:{errors:36,warns:13,resets:0}}],downloadURL:"https://cdn.beatsaver.com/29e5877ec735378b8ba3751dc8896bf63a43c525.zip",coverURL:"https://cdn.beatsaver.com/29e5877ec735378b8ba3751dc8896bf63a43c525.jpg",previewURL:"https://cdn.beatsaver.com/29e5877ec735378b8ba3751dc8896bf63a43c525.mp3"}],createdAt:"2019-03-04T12:15:10Z",updatedAt:"2019-03-04T12:15:10Z",lastPublishedAt:"2019-03-04T12:15:10Z"},{id:"5062",name:"Witchcraft - Pendulum",description:"I have been working on this chart for a while now, finally able to finish it off. :) Enjoy!\r\nhttps://www.youtube.com/watch?v=mlaH4Dqjv1U",uploader:{id:4285982,name:"downycat",uniqueSet:!0,hash:"5cff0b7398cc5a672c84ede5",avatar:"https://cdn.beatsaver.com/avatar/173538829888782336.png",type:"DISCORD"},metadata:{bpm:174,duration:254,songName:"Witchcraft",songSubName:"Pendulum",songAuthorName:"DownyCat",levelAuthorName:"downycat"},stats:{plays:0,downloads:9888,upvotes:4287,downvotes:83,score:.9424},uploaded:"2019-06-01T07:59:40Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"015170851544c832ee4ac858ca6b3425677b1696",key:"5062",state:"Published",createdAt:"2019-06-01T07:59:40Z",sageScore:4,diffs:[{njs:10,offset:0,notes:372,bombs:0,obstacles:33,nps:1.515,length:712,characteristic:"Standard",difficulty:"Normal",events:8298,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:245.517,paritySummary:{errors:13,warns:21,resets:0}},{njs:12,offset:0,notes:750,bombs:0,obstacles:53,nps:3.055,length:712,characteristic:"Standard",difficulty:"Hard",events:8298,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:245.517,paritySummary:{errors:8,warns:7,resets:0}},{njs:14,offset:0,notes:1213,bombs:0,obstacles:36,nps:4.941,length:712,characteristic:"Standard",difficulty:"Expert",events:8298,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:245.517,paritySummary:{errors:10,warns:5,resets:0}},{njs:18,offset:0,notes:1401,bombs:0,obstacles:28,nps:5.706,length:712,characteristic:"Standard",difficulty:"ExpertPlus",events:8298,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:245.517,paritySummary:{errors:7,warns:8,resets:0}}],downloadURL:"https://cdn.beatsaver.com/015170851544c832ee4ac858ca6b3425677b1696.zip",coverURL:"https://cdn.beatsaver.com/015170851544c832ee4ac858ca6b3425677b1696.jpg",previewURL:"https://cdn.beatsaver.com/015170851544c832ee4ac858ca6b3425677b1696.mp3"}],createdAt:"2019-06-01T07:59:40Z",updatedAt:"2019-06-01T07:59:40Z",lastPublishedAt:"2019-06-01T07:59:40Z"},{id:"6891",name:"Panic! At The Disco - I Write Sins Not Tragedies",description:"PepeJamJam \nAll Difficulties",uploader:{id:4285107,name:"kikaeaeon",uniqueSet:!0,hash:"5cff0b7498cc5a672c85109b",avatar:"https://cdn.beatsaver.com/avatar/103715469822816256.png",type:"DISCORD"},metadata:{bpm:170,duration:188,songName:"I Write Sins Not Tragedies",songSubName:"",songAuthorName:"Panic! At the Disco",levelAuthorName:"KikaeAeon"},stats:{plays:0,downloads:17370,upvotes:5712,downvotes:132,score:.9423},uploaded:"2019-10-08T04:14:47.579Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"7ec6ee195a2d577d5b924dad8b1a25b881aa2d27",key:"6891",state:"Published",createdAt:"2019-10-08T04:14:47.579Z",sageScore:8,diffs:[{njs:10,offset:0,notes:271,bombs:0,obstacles:21,nps:1.519,length:505.5,characteristic:"Standard",difficulty:"Easy",events:1193,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:178.412,paritySummary:{errors:15,warns:9,resets:0}},{njs:10,offset:0,notes:312,bombs:0,obstacles:21,nps:1.749,length:505.5,characteristic:"Standard",difficulty:"Normal",events:1193,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:178.412,paritySummary:{errors:18,warns:10,resets:0}},{njs:10,offset:0,notes:487,bombs:0,obstacles:41,nps:2.73,length:505.5,characteristic:"Standard",difficulty:"Hard",events:1193,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:178.412,paritySummary:{errors:32,warns:34,resets:0}},{njs:12,offset:0,notes:690,bombs:80,obstacles:29,nps:3.867,length:505.5,characteristic:"Standard",difficulty:"Expert",events:1193,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:178.412,paritySummary:{errors:11,warns:6,resets:2}},{njs:15,offset:0,notes:969,bombs:0,obstacles:17,nps:5.431,length:505.5,characteristic:"Standard",difficulty:"ExpertPlus",events:1193,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:178.412,paritySummary:{errors:9,warns:20,resets:0}}],downloadURL:"https://cdn.beatsaver.com/7ec6ee195a2d577d5b924dad8b1a25b881aa2d27.zip",coverURL:"https://cdn.beatsaver.com/7ec6ee195a2d577d5b924dad8b1a25b881aa2d27.jpg",previewURL:"https://cdn.beatsaver.com/7ec6ee195a2d577d5b924dad8b1a25b881aa2d27.mp3"}],createdAt:"2019-10-08T04:14:47.579Z",updatedAt:"2019-10-08T04:14:47.579Z",lastPublishedAt:"2019-10-08T04:14:47.579Z"},{id:"1eb2",name:"Pumped Up Kicks - Foster the People",description:"128 BPM / 3:27 Runtime\r\nNormal / 381 Notes\r\nHard / 492 Notes\r\nExpert / 714 Notes\r\n\r\nGameplay:\r\nhttps://youtu.be/oo1EgLAOB1s\r\n\r\nListen to the song:\r\nhttps://www.youtube.com/watch?v=SDTZ7iX4vTQ",uploader:{id:4284981,name:"skylerwallace",uniqueSet:!0,hash:"5cff0b7298cc5a672c84ea67",avatar:"https://cdn.beatsaver.com/avatar/398344856868487168.png",type:"DISCORD"},metadata:{bpm:128,duration:207,songName:"Pumped Up Kicks",songSubName:"Foster The People",songAuthorName:"Skyler Wallace",levelAuthorName:"skylerwallace"},stats:{plays:0,downloads:17347,upvotes:6240,downvotes:151,score:.9423},uploaded:"2018-11-07T04:34:04Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"b0f6224a2717b97a4538790a32eb618acae1f57a",key:"1eb2",state:"Published",createdAt:"2018-11-07T04:34:04Z",sageScore:6,diffs:[{njs:10,offset:0,notes:381,bombs:0,obstacles:41,nps:1.926,length:422,characteristic:"Standard",difficulty:"Normal",events:1994,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:197.813,paritySummary:{errors:82,warns:64,resets:0}},{njs:10,offset:0,notes:492,bombs:23,obstacles:16,nps:2.481,length:423,characteristic:"Standard",difficulty:"Hard",events:1994,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:198.281,paritySummary:{errors:58,warns:62,resets:4}},{njs:12,offset:0,notes:714,bombs:8,obstacles:34,nps:3.601,length:423,characteristic:"Standard",difficulty:"Expert",events:1994,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:198.281,paritySummary:{errors:69,warns:63,resets:1}}],downloadURL:"https://cdn.beatsaver.com/b0f6224a2717b97a4538790a32eb618acae1f57a.zip",coverURL:"https://cdn.beatsaver.com/b0f6224a2717b97a4538790a32eb618acae1f57a.jpg",previewURL:"https://cdn.beatsaver.com/b0f6224a2717b97a4538790a32eb618acae1f57a.mp3"}],createdAt:"2018-11-07T04:34:04Z",updatedAt:"2018-11-07T04:34:04Z",lastPublishedAt:"2018-11-07T04:34:04Z"},{id:"368c",name:"Harajuku Iyahoi - Kyary Pamyu Pamyu",description:"All difficulties relatively close to OST standards.\n\nThanks to n3tman, Sehria, OmniOmega, CyanSnow, Aeroluna, and Expo for their help.\n\nhttps://youtu.be/YqptqS0vIIA\nFollow me on Twitter u won't\nhttps://twitter.com/aggrogahu",uploader:{id:4284613,name:"aggrogahu",uniqueSet:!0,hash:"5cff0b7398cc5a672c84fdad",avatar:"https://cdn.beatsaver.com/avatar/158363872649150464.png",type:"DISCORD"},metadata:{bpm:128,duration:218,songName:"Harajuku Iyahoi",songSubName:"Kyary Pamyu Pamyu",songAuthorName:"aggrogahu",levelAuthorName:"aggrogahu"},stats:{plays:0,downloads:4783,upvotes:2027,downvotes:17,score:.9421},uploaded:"2019-02-15T23:55:37Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"8c392c31aeadb55eebeb978c09fa79857380f15c",key:"368c",state:"Published",createdAt:"2019-02-15T23:55:37Z",sageScore:4,diffs:[{njs:9,offset:0,notes:214,bombs:0,obstacles:15,nps:1.057,length:432,characteristic:"Standard",difficulty:"Easy",events:969,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:202.5,paritySummary:{errors:59,warns:16,resets:0}},{njs:9,offset:0,notes:306,bombs:0,obstacles:15,nps:1.511,length:432,characteristic:"Standard",difficulty:"Normal",events:969,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:202.5,paritySummary:{errors:68,warns:44,resets:0}},{njs:11,offset:0,notes:469,bombs:0,obstacles:21,nps:2.316,length:432,characteristic:"Standard",difficulty:"Hard",events:969,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:202.5,paritySummary:{errors:68,warns:98,resets:0}},{njs:12,offset:0,notes:685,bombs:6,obstacles:25,nps:3.383,length:432,characteristic:"Standard",difficulty:"Expert",events:969,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:202.5,paritySummary:{errors:85,warns:76,resets:2}}],downloadURL:"https://cdn.beatsaver.com/8c392c31aeadb55eebeb978c09fa79857380f15c.zip",coverURL:"https://cdn.beatsaver.com/8c392c31aeadb55eebeb978c09fa79857380f15c.jpg",previewURL:"https://cdn.beatsaver.com/8c392c31aeadb55eebeb978c09fa79857380f15c.mp3"}],createdAt:"2019-02-15T23:55:37Z",updatedAt:"2019-02-15T23:55:37Z",lastPublishedAt:"2019-02-15T23:55:37Z"},{id:"141",name:"GANGNAM STYLE",description:"Expert, Hard, and Normal tracks. I tried my best to setup the chorus charts to allow you to mimic the classic dance moves. I think it matches up quite nicely. I hope you have as much fun playing as I did making this! Enjoy!",uploader:{id:41378,name:"greatyazer",uniqueSet:!0,hash:"5cff0b7298cc5a672c84ea71",avatar:"https://www.gravatar.com/avatar/5cff0b7298cc5a672c84ea71?d=retro",type:"SIMPLE"},metadata:{bpm:132,duration:219,songName:"Gangnam Style",songSubName:"PSY",songAuthorName:"GreatYazer",levelAuthorName:"greatyazer"},stats:{plays:0,downloads:35740,upvotes:21669,downvotes:788,score:.9421},uploaded:"2018-05-20T09:59:02Z",automapper:!1,ranked:!0,qualified:!1,versions:[{hash:"8e7e553099436af31564adf1977a5ec42a61cfff",key:"141",state:"Published",createdAt:"2018-05-20T09:59:02Z",sageScore:5,diffs:[{njs:10,offset:0,notes:415,bombs:4,obstacles:42,nps:2.02,length:452,characteristic:"Standard",difficulty:"Normal",events:735,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:205.455,paritySummary:{errors:191,warns:17,resets:0},stars:1.15},{njs:10,offset:0,notes:695,bombs:40,obstacles:94,nps:3.383,length:452,characteristic:"Standard",difficulty:"Hard",events:735,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:205.455,paritySummary:{errors:275,warns:23,resets:0}},{njs:10,offset:0,notes:932,bombs:50,obstacles:103,nps:4.536,length:452,characteristic:"Standard",difficulty:"Expert",events:735,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:205.455,paritySummary:{errors:332,warns:34,resets:0}}],downloadURL:"https://cdn.beatsaver.com/8e7e553099436af31564adf1977a5ec42a61cfff.zip",coverURL:"https://cdn.beatsaver.com/8e7e553099436af31564adf1977a5ec42a61cfff.jpg",previewURL:"https://cdn.beatsaver.com/8e7e553099436af31564adf1977a5ec42a61cfff.mp3"}],createdAt:"2018-05-20T09:59:02Z",updatedAt:"2018-05-20T09:59:02Z",lastPublishedAt:"2018-05-20T09:59:02Z"},{id:"319f",name:"Fall Out Boy - My songs know what you did in the dark (Light 'em up)",description:"Had a bit of time off lately so I went and made a other map. This time it's Fall Out Boy!\r\nI realise a map had been made for this track already, but I thought I'd give my take on it too seeing as its such a good song ;)\r\nAll difficulties are included from Easy to Expert so enjoy! :)\r\n\r\nUpdate: \r\nDecided to bite the bullet here and do an update. Big thanks for Heisenbergirl for pointing out the NJS felt off. Playing around with it I've now raised it to 13 (from 12) and learnt a valuable skill when it comes to mapping. Basically the NJS spaces out the notes a bit more so makes it easier to read.\r\nI also adjusted a couple of the opening notes on Hard because I didn't really like the way that they flowed.\r\nFinally just want to apologise to everyone who's worked hard on a score or left a review. It sucks to have to reset it like this but it did need the update.\r\n\r\nVideo: https://www.youtube.com/watch?v=iZMvCvyarYA",uploader:{id:4785,name:"stumi",uniqueSet:!1,hash:"5cff0b7398cc5a672c84f720",avatar:"https://www.gravatar.com/avatar/5cff0b7398cc5a672c84f720?d=retro",type:"SIMPLE"},metadata:{bpm:152,duration:188,songName:"My songs know what you did in the dark",songSubName:"Fall Out Boy",songAuthorName:"Stumi",levelAuthorName:"stumi"},stats:{plays:0,downloads:15797,upvotes:5260,downvotes:119,score:.9419},uploaded:"2019-01-27T13:00:05Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"5b53a3bede4fd8ee0950d0c5ba2dbbff73b6d127",key:"319f",state:"Published",createdAt:"2019-01-27T13:00:05Z",sageScore:6,diffs:[{njs:10,offset:0,notes:243,bombs:4,obstacles:93,nps:1.362,length:452,characteristic:"Standard",difficulty:"Easy",events:1723,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:178.421,paritySummary:{errors:23,warns:13,resets:0}},{njs:10,offset:0,notes:328,bombs:4,obstacles:95,nps:1.838,length:452,characteristic:"Standard",difficulty:"Normal",events:1723,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:178.421,paritySummary:{errors:28,warns:28,resets:2}},{njs:11,offset:0,notes:514,bombs:4,obstacles:75,nps:2.881,length:452,characteristic:"Standard",difficulty:"Hard",events:1725,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:178.421,paritySummary:{errors:25,warns:18,resets:1}},{njs:13,offset:0,notes:693,bombs:8,obstacles:58,nps:3.884,length:452,characteristic:"Standard",difficulty:"Expert",events:1726,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:178.421,paritySummary:{errors:27,warns:21,resets:4}}],downloadURL:"https://cdn.beatsaver.com/5b53a3bede4fd8ee0950d0c5ba2dbbff73b6d127.zip",coverURL:"https://cdn.beatsaver.com/5b53a3bede4fd8ee0950d0c5ba2dbbff73b6d127.jpg",previewURL:"https://cdn.beatsaver.com/5b53a3bede4fd8ee0950d0c5ba2dbbff73b6d127.mp3"}],createdAt:"2019-01-27T13:00:05Z",updatedAt:"2019-01-27T13:00:05Z",lastPublishedAt:"2019-01-27T13:00:05Z"},{id:"ac0a",name:"Hornet (Hollow Knight OST)",description:'This song really loses something without Hornet\'s war cries of "SHAA" and "HEGAALE" every three seconds. It also really gains something, because without that you can actually hear the music for once.',uploader:{id:4285065,name:"skaiamechanic",uniqueSet:!0,hash:"5e455654470a8200067c9bf9",avatar:"https://cdn.beatsaver.com/avatar/274999097361170432.png",type:"DISCORD"},metadata:{bpm:145,duration:168,songName:"Hornet",songSubName:"Hollow Knight",songAuthorName:"Christopher Larkin",levelAuthorName:"SkaiaMechanic"},stats:{plays:0,downloads:6639,upvotes:2339,downvotes:26,score:.9418},uploaded:"2020-05-29T18:41:14.740Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"48f5d0ddc8c6a006b5633c828039912744393877",key:"ac0a",state:"Published",createdAt:"2020-05-29T18:41:14.740Z",sageScore:5,diffs:[{njs:15,offset:0,notes:695,bombs:0,obstacles:12,nps:4.266,length:393.75,characteristic:"Standard",difficulty:"Hard",events:2513,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:162.931,paritySummary:{errors:43,warns:55,resets:0}},{njs:18,offset:0,notes:720,bombs:0,obstacles:33,nps:4.419,length:393.75,characteristic:"Standard",difficulty:"Expert",events:2513,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:162.931,paritySummary:{errors:27,warns:35,resets:0}}],downloadURL:"https://cdn.beatsaver.com/48f5d0ddc8c6a006b5633c828039912744393877.zip",coverURL:"https://cdn.beatsaver.com/48f5d0ddc8c6a006b5633c828039912744393877.jpg",previewURL:"https://cdn.beatsaver.com/48f5d0ddc8c6a006b5633c828039912744393877.mp3"}],createdAt:"2020-05-29T18:41:14.740Z",updatedAt:"2020-05-29T18:41:14.740Z",lastPublishedAt:"2020-05-29T18:41:14.740Z"},{id:"176c",name:"24K Magic - Bruno Mars",description:"We're taking it back old school... It's time to DANCE, baby!\r\nDifficulties: Expert, Hard, Normal\r\nYouTube Preview: https://youtu.be/IA4W-Z7KXSo",uploader:{id:30311,name:"bennydabeast",uniqueSet:!0,hash:"5cff0b7298cc5a672c84e98d",avatar:"https://cdn.beatsaver.com/avatar/30311.jpg",type:"SIMPLE"},metadata:{bpm:107,duration:228,songName:"24K Magic",songSubName:"Bruno Mars",songAuthorName:"BennyDaBeast",levelAuthorName:"bennydabeast"},stats:{plays:0,downloads:13810,upvotes:6648,downvotes:174,score:.9412},uploaded:"2018-09-27T01:05:07Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"b9e05baa59f3ea5c97c5ae82766783d895249c61",key:"176c",state:"Published",createdAt:"2018-09-27T01:05:07Z",sageScore:6,diffs:[{njs:10,offset:0,notes:215,bombs:0,obstacles:38,nps:1.08,length:355,characteristic:"Standard",difficulty:"Normal",events:1484,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:199.065,paritySummary:{errors:49,warns:40,resets:0}},{njs:10,offset:0,notes:439,bombs:0,obstacles:40,nps:2.205,length:355,characteristic:"Standard",difficulty:"Hard",events:1480,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:199.065,paritySummary:{errors:44,warns:84,resets:0}},{njs:10,offset:0,notes:592,bombs:0,obstacles:52,nps:2.974,length:355,characteristic:"Standard",difficulty:"Expert",events:1480,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:199.065,paritySummary:{errors:70,warns:116,resets:0}}],downloadURL:"https://cdn.beatsaver.com/b9e05baa59f3ea5c97c5ae82766783d895249c61.zip",coverURL:"https://cdn.beatsaver.com/b9e05baa59f3ea5c97c5ae82766783d895249c61.jpg",previewURL:"https://cdn.beatsaver.com/b9e05baa59f3ea5c97c5ae82766783d895249c61.mp3"}],createdAt:"2018-09-27T01:05:07Z",updatedAt:"2018-09-27T01:05:07Z",lastPublishedAt:"2018-09-27T01:05:07Z"},{id:"6ea9",name:"Down Under - Men At Work",description:"Here's another great 80's anthem - Down Under, by Men At Work. I really enjoyed mapping this song. So much so, that I decided to do a full spread from Expert Plus to Easy. This is a really fun map to play whatever your skill level. I hope you enjoy it as much as I do!\n\nhttps://youtu.be/G0gTegU32ng",uploader:{id:78593,name:"techbutterfly",uniqueSet:!0,hash:"5cff0b7798cc5a672c8566f7",avatar:"https://cdn.beatsaver.com/avatar/527111497617506304.png",type:"DISCORD"},metadata:{bpm:107,duration:210,songName:"Down Under",songSubName:"",songAuthorName:"Men At Work",levelAuthorName:"TechButterfly"},stats:{plays:0,downloads:12452,upvotes:3609,downvotes:67,score:.9411},uploaded:"2019-11-07T20:34:53.687Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"c9ceaf7a8a7cea8381d08618c66110abbc4844f9",key:"6ea9",state:"Published",createdAt:"2019-11-07T20:34:53.687Z",sageScore:6,diffs:[{njs:12,offset:0,notes:249,bombs:0,obstacles:0,nps:1.22,length:364,characteristic:"Standard",difficulty:"Easy",events:1970,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:204.112,paritySummary:{errors:59,warns:52,resets:0}},{njs:12,offset:0,notes:416,bombs:0,obstacles:0,nps:2.038,length:364,characteristic:"Standard",difficulty:"Normal",events:1970,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:204.112,paritySummary:{errors:85,warns:84,resets:0}},{njs:15,offset:0,notes:613,bombs:0,obstacles:0,nps:3.003,length:364,characteristic:"Standard",difficulty:"Hard",events:1970,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:204.112,paritySummary:{errors:54,warns:97,resets:0}},{njs:16,offset:0,notes:753,bombs:0,obstacles:0,nps:3.689,length:364,characteristic:"Standard",difficulty:"Expert",events:1970,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:204.112,paritySummary:{errors:47,warns:56,resets:0}},{njs:17,offset:.8,notes:938,bombs:0,obstacles:0,nps:4.596,length:364,characteristic:"Standard",difficulty:"ExpertPlus",events:1970,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:204.112,paritySummary:{errors:60,warns:36,resets:0}}],downloadURL:"https://cdn.beatsaver.com/c9ceaf7a8a7cea8381d08618c66110abbc4844f9.zip",coverURL:"https://cdn.beatsaver.com/c9ceaf7a8a7cea8381d08618c66110abbc4844f9.jpg",previewURL:"https://cdn.beatsaver.com/c9ceaf7a8a7cea8381d08618c66110abbc4844f9.mp3"}],createdAt:"2019-11-07T20:34:53.687Z",updatedAt:"2019-11-07T20:34:53.687Z",lastPublishedAt:"2019-11-07T20:34:53.687Z"},{id:"195f",name:"Under The Sea (Little Mermaid) - Samuel E. Wright",description:'"What do they got? A lot of sand. We got a hot crustacean band! Each little clam here know how to jam here, under the sea!"\r\nDifficulties: Expert+, Expert, Hard, Normal\r\nYouTube Preview: https://youtu.be/h6eMPlGUZsw',uploader:{id:30311,name:"bennydabeast",uniqueSet:!0,hash:"5cff0b7298cc5a672c84e98d",avatar:"https://cdn.beatsaver.com/avatar/30311.jpg",type:"SIMPLE"},metadata:{bpm:200,duration:194,songName:"Under The Sea",songSubName:"Samuel E. Wright",songAuthorName:"BennyDaBeast",levelAuthorName:"bennydabeast"},stats:{plays:0,downloads:15120,upvotes:6093,downvotes:156,score:.9408},uploaded:"2018-10-08T23:44:34Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"f745bac45c618fa2c49a0ee0c383f2a6cb356a78",key:"195f",state:"Published",createdAt:"2018-10-08T23:44:34Z",sageScore:4,diffs:[{njs:10,offset:0,notes:277,bombs:0,obstacles:9,nps:1.464,length:630,characteristic:"Standard",difficulty:"Normal",events:1406,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:189,paritySummary:{errors:31,warns:31,resets:0}},{njs:10,offset:0,notes:317,bombs:0,obstacles:9,nps:1.673,length:631,characteristic:"Standard",difficulty:"Hard",events:1406,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:189.3,paritySummary:{errors:47,warns:28,resets:0}},{njs:10,offset:0,notes:541,bombs:0,obstacles:9,nps:2.855,length:631,characteristic:"Standard",difficulty:"Expert",events:1406,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:189.3,paritySummary:{errors:61,warns:89,resets:0}},{njs:10,offset:0,notes:848,bombs:0,obstacles:9,nps:4.475,length:631,characteristic:"Standard",difficulty:"ExpertPlus",events:1406,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:189.3,paritySummary:{errors:86,warns:112,resets:0}}],downloadURL:"https://cdn.beatsaver.com/f745bac45c618fa2c49a0ee0c383f2a6cb356a78.zip",coverURL:"https://cdn.beatsaver.com/f745bac45c618fa2c49a0ee0c383f2a6cb356a78.jpg",previewURL:"https://cdn.beatsaver.com/f745bac45c618fa2c49a0ee0c383f2a6cb356a78.mp3"}],createdAt:"2018-10-08T23:44:34Z",updatedAt:"2018-10-08T23:44:34Z",lastPublishedAt:"2018-10-08T23:44:34Z"},{id:"849a",name:"Darude Sandstorm",description:"du du du du du\nI originally mapped this back in May 2018, and then again in June 2018. The Beatsaver site migration yeeted the map, so I've restored the two original maps as well as 5 new standard difficulties, 5 one saber difficulties, and one 360 level. Fun Fact: Freeek originally got the idea to create Lightmap because he hated the lighting in the original Sandstorm map...so I created a new version of Lightmap and used that to light the new difficulties.\n\nStandard\nEasy - 307 notes (1.37 NPS)\nNormal - 505 notes (2.25 NPS)\nHard - 756 notes (3.38 NPS)\nExpert - 1120 notes (5.00 NPS)\nExpert+ - 1358 notes (6.06 NPS)\n\nOne Saber\nEasy - 192 notes (0.86 NPS)\nNormal - 302 notes (1.35 NPS)\nHard - 508 notes (2.27 NPS)\nExpert - 734 notes (3.28 NPS)\nExpert+ - 1112 notes (4.96 NPS)\n\nNo Arrows\nOriginal Expert - 1151 notes (5.14 NPS)\nOriginal Expert+ - 1141 notes (5.09 NPS)\n\n360\nExpert+ - 1359 notes (6.07 NPS)\n\nGameplay: Coming Soon\nSong: https://youtu.be/y6120QOlsfU",uploader:{id:4284981,name:"skylerwallace",uniqueSet:!0,hash:"5cff0b7298cc5a672c84ea67",avatar:"https://cdn.beatsaver.com/avatar/398344856868487168.png",type:"DISCORD"},metadata:{bpm:136,duration:224,songName:"Sandstorm",songSubName:"",songAuthorName:"Darude",levelAuthorName:"Skyler Wallace"},stats:{plays:0,downloads:29265,upvotes:10584,downvotes:337,score:.9406},uploaded:"2020-02-06T04:55:40.715Z",automapper:!1,ranked:!0,qualified:!1,versions:[{hash:"580eb7d1614a35d192722f748400c9896ac9527d",key:"849a",state:"Published",createdAt:"2020-02-06T04:55:40.715Z",sageScore:6,diffs:[{njs:10,offset:-1,notes:307,bombs:0,obstacles:15,nps:1.407,length:496,characteristic:"Standard",difficulty:"Easy",events:13998,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:218.824,paritySummary:{errors:154,warns:44,resets:0},stars:.89},{njs:10,offset:-1,notes:505,bombs:0,obstacles:15,nps:2.314,length:496,characteristic:"Standard",difficulty:"Normal",events:13998,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:218.824,paritySummary:{errors:143,warns:46,resets:0},stars:1.42},{njs:12,offset:.5,notes:756,bombs:0,obstacles:27,nps:3.464,length:496,characteristic:"Standard",difficulty:"Hard",events:13998,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:218.824,paritySummary:{errors:26,warns:18,resets:0},stars:2.01},{njs:15,offset:0,notes:1120,bombs:0,obstacles:43,nps:5.133,length:496,characteristic:"Standard",difficulty:"Expert",events:13998,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:218.824,paritySummary:{errors:12,warns:6,resets:0},stars:4.2},{njs:17,offset:-.25,notes:1358,bombs:18,obstacles:23,nps:6.223,length:496,characteristic:"Standard",difficulty:"ExpertPlus",events:13969,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:218.824,paritySummary:{errors:4,warns:6,resets:0},stars:5.95},{njs:10,offset:-1,notes:192,bombs:0,obstacles:13,nps:.88,length:496,characteristic:"OneSaber",difficulty:"Easy",events:13998,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:218.824,paritySummary:{errors:88,warns:26,resets:0}},{njs:10,offset:-1,notes:302,bombs:0,obstacles:15,nps:1.384,length:496,characteristic:"OneSaber",difficulty:"Normal",events:13998,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:218.824,paritySummary:{errors:65,warns:74,resets:0}},{njs:12,offset:.5,notes:508,bombs:0,obstacles:15,nps:2.328,length:496,characteristic:"OneSaber",difficulty:"Hard",events:13998,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:218.824,paritySummary:{errors:53,warns:64,resets:0}},{njs:15,offset:0,notes:734,bombs:0,obstacles:24,nps:3.364,length:496,characteristic:"OneSaber",difficulty:"Expert",events:13998,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:218.824,paritySummary:{errors:4,warns:5,resets:0}},{njs:17,offset:-.25,notes:1112,bombs:0,obstacles:41,nps:5.096,length:496,characteristic:"OneSaber",difficulty:"ExpertPlus",events:13998,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:218.824,paritySummary:{errors:5,warns:9,resets:0}},{njs:12,offset:.5,notes:1151,bombs:0,obstacles:19,nps:4.089,length:639.75,characteristic:"NoArrows",difficulty:"Expert",events:1080,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:282.243,paritySummary:{errors:87,warns:41,resets:0}},{njs:15,offset:0,notes:1141,bombs:0,obstacles:31,nps:4.054,length:639.75,characteristic:"NoArrows",difficulty:"ExpertPlus",events:2315,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:282.243,paritySummary:{errors:129,warns:34,resets:0}},{njs:17,offset:0,notes:1359,bombs:0,obstacles:27,nps:6.228,length:496,characteristic:"360Degree",difficulty:"ExpertPlus",events:14547,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:218.824,paritySummary:{errors:4,warns:6,resets:0}}],downloadURL:"https://cdn.beatsaver.com/580eb7d1614a35d192722f748400c9896ac9527d.zip",coverURL:"https://cdn.beatsaver.com/580eb7d1614a35d192722f748400c9896ac9527d.jpg",previewURL:"https://cdn.beatsaver.com/580eb7d1614a35d192722f748400c9896ac9527d.mp3"}],createdAt:"2020-02-06T04:55:40.715Z",updatedAt:"2020-02-06T04:55:40.715Z",lastPublishedAt:"2020-02-06T04:55:40.715Z"},{id:"4858",name:"Papercut - Linkin Park",description:"YouTube:\r\nhttps://www.youtube.com/watch?v=vjVkXlxsO8Q",uploader:{id:27983,name:"heisenbergirl",uniqueSet:!0,hash:"5cff0b7298cc5a672c84ec30",avatar:"https://www.gravatar.com/avatar/5cff0b7298cc5a672c84ec30?d=retro",type:"SIMPLE"},metadata:{bpm:150,duration:187,songName:"Papercut",songSubName:"Linkin Park",songAuthorName:"Heisenberg",levelAuthorName:"heisenbergirl"},stats:{plays:0,downloads:9559,upvotes:4539,downvotes:101,score:.9406},uploaded:"2019-04-25T17:52:09Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"431ffaa53a1e45ffab6c81a895e456f6aad1e038",key:"4858",state:"Published",createdAt:"2019-04-25T17:52:09Z",sageScore:6,diffs:[{njs:12,offset:0,notes:634,bombs:0,obstacles:96,nps:3.534,length:449,characteristic:"Standard",difficulty:"Hard",events:2316,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:179.6,paritySummary:{errors:40,warns:45,resets:0}},{njs:15,offset:0,notes:842,bombs:0,obstacles:90,nps:4.694,length:449,characteristic:"Standard",difficulty:"Expert",events:2316,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:179.6,paritySummary:{errors:16,warns:22,resets:0}},{njs:18,offset:0,notes:993,bombs:0,obstacles:66,nps:5.535,length:449,characteristic:"Standard",difficulty:"ExpertPlus",events:2327,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:179.6,paritySummary:{errors:31,warns:63,resets:0}}],downloadURL:"https://cdn.beatsaver.com/431ffaa53a1e45ffab6c81a895e456f6aad1e038.zip",coverURL:"https://cdn.beatsaver.com/431ffaa53a1e45ffab6c81a895e456f6aad1e038.jpg",previewURL:"https://cdn.beatsaver.com/431ffaa53a1e45ffab6c81a895e456f6aad1e038.mp3"}],createdAt:"2019-04-25T17:52:09Z",updatedAt:"2019-04-25T17:52:09Z",lastPublishedAt:"2019-04-25T17:52:09Z"},{id:"5d8d",name:"New Game - Nitro Fun",description:"Dancey E+, not very challenging.\n\nSee it in action: https://www.youtube.com/watch?v=IddrPmb4poA\n\nThank you to my playtesters:\n\nQTpop (https://www.twitch.tv/qtpop)\nTheRainbowGamerGirl (https://www.twitch.tv/therainbowgamergirl)",uploader:{id:38202,name:"fafurion",uniqueSet:!1,hash:"5cff0b7398cc5a672c84f945",avatar:"https://www.gravatar.com/avatar/5cff0b7398cc5a672c84f945?d=retro",type:"SIMPLE"},metadata:{bpm:128,duration:261,songName:"New Game",songSubName:"",songAuthorName:"Nitro Fun",levelAuthorName:"Fafurion"},stats:{plays:0,downloads:4880,upvotes:2873,downvotes:46,score:.9404},uploaded:"2019-08-17T15:26:08.685Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"310694f2ff8d129d4e64192251653caffdc65b62",key:"5d8d",state:"Published",createdAt:"2019-08-17T15:26:08.685Z",sageScore:5,diffs:[{njs:16,offset:0,notes:1229,bombs:0,obstacles:37,nps:4.824,length:543.5,characteristic:"Standard",difficulty:"ExpertPlus",events:7711,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:254.766,paritySummary:{errors:45,warns:81,resets:0}}],downloadURL:"https://cdn.beatsaver.com/310694f2ff8d129d4e64192251653caffdc65b62.zip",coverURL:"https://cdn.beatsaver.com/310694f2ff8d129d4e64192251653caffdc65b62.jpg",previewURL:"https://cdn.beatsaver.com/310694f2ff8d129d4e64192251653caffdc65b62.mp3"}],createdAt:"2019-08-17T15:26:08.685Z",updatedAt:"2019-08-17T15:26:08.685Z",lastPublishedAt:"2019-08-17T15:26:08.685Z"},{id:"2b1a",name:"Fallen Kingdom [Viva la Vida Minecraft Parody] - CaptainSparklez ft. TryHardNinja",description:"As requested by @ScrewBedtime and @Anonymous_Food: Fallen Kingdom, CaptainSparklez's minecraft parody of Viva la Vida. The parody's song arrangement is slightly different than the original so I had to remap some parts. This map goes out to all the 12 year olds that will listen to this instead of the original all because it has Minecraft lol. For the full experience play this with a minecraft saber and platform.",uploader:{id:58338,name:"Joetastic",uniqueSet:!0,hash:"5cff0b7498cc5a672c85050e",avatar:"https://cdn.beatsaver.com/avatar/227767566402191360.png",type:"DISCORD"},metadata:{bpm:138,duration:255,songName:"Fallen Kingdom",songSubName:"CaptainSparklez ft. TryHardNinja",songAuthorName:"Joetastic",levelAuthorName:"Joetastic"},stats:{plays:0,downloads:8390,upvotes:4332,downvotes:95,score:.9403},uploaded:"2019-01-05T10:20:33Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"06150c7c34af95f53f5ed8fac5659c70649a07f0",key:"2b1a",state:"Published",createdAt:"2019-01-05T10:20:33Z",sageScore:4,diffs:[{njs:14,offset:0,notes:925,bombs:0,obstacles:43,nps:4.037,length:527,characteristic:"Standard",difficulty:"Hard",events:727,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:229.13,paritySummary:{errors:40,warns:37,resets:0}}],downloadURL:"https://cdn.beatsaver.com/06150c7c34af95f53f5ed8fac5659c70649a07f0.zip",coverURL:"https://cdn.beatsaver.com/06150c7c34af95f53f5ed8fac5659c70649a07f0.jpg",previewURL:"https://cdn.beatsaver.com/06150c7c34af95f53f5ed8fac5659c70649a07f0.mp3"}],createdAt:"2019-01-05T10:20:33Z",updatedAt:"2019-01-05T10:20:33Z",lastPublishedAt:"2019-01-05T10:20:33Z"},{id:"4adb",name:"Deja Vu - Dave Rodgers (Initial D)",description:"Was requested to get this Ranked, so some minor changes to fit updates in Ranking criteria!\r\n\r\nNotes Per Second:\r\nEasy / 1.6\r\nNormal / 2\r\nHard / 2.6\r\nExpert / 3.6\r\nExpert+ / 4.2\r\n\r\nExpert+ Playthrough:\r\nhttps://streamable.com/pk918",uploader:{id:11373,name:"redmagi",uniqueSet:!0,hash:"5cff0b7298cc5a672c84e9d2",avatar:"https://www.gravatar.com/avatar/5cff0b7298cc5a672c84e9d2?d=retro",type:"SIMPLE"},metadata:{bpm:154,duration:105,songName:"Deja Vu (Short Ver.)",songSubName:"Dave Rodgers",songAuthorName:"Redmagi",levelAuthorName:"redmagi"},stats:{plays:0,downloads:24353,upvotes:10971,downvotes:358,score:.9402},uploaded:"2019-05-05T18:37:01Z",automapper:!1,ranked:!0,qualified:!1,versions:[{hash:"c9c15d3f3109a8f732b41b299ce84556bebf73ac",key:"4adb",state:"Published",createdAt:"2019-05-05T18:37:01Z",sageScore:8,diffs:[{njs:10,offset:1,notes:171,bombs:0,obstacles:11,nps:1.669,length:263,characteristic:"Standard",difficulty:"Easy",events:1439,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:102.468,paritySummary:{errors:9,warns:6,resets:0},stars:.95},{njs:12,offset:1,notes:211,bombs:45,obstacles:8,nps:2.059,length:263,characteristic:"Standard",difficulty:"Normal",events:1439,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:102.468,paritySummary:{errors:27,warns:26,resets:2},stars:1.29},{njs:14,offset:1,notes:281,bombs:56,obstacles:8,nps:2.742,length:263,characteristic:"Standard",difficulty:"Hard",events:1439,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:102.468,paritySummary:{errors:18,warns:28,resets:6},stars:1.92},{njs:15,offset:1,notes:382,bombs:24,obstacles:0,nps:3.728,length:263,characteristic:"Standard",difficulty:"Expert",events:1439,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:102.468,paritySummary:{errors:19,warns:36,resets:4},stars:2.68},{njs:18,offset:0,notes:446,bombs:32,obstacles:0,nps:4.353,length:263,characteristic:"Standard",difficulty:"ExpertPlus",events:1439,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:102.468,paritySummary:{errors:19,warns:56,resets:0},stars:4.46}],downloadURL:"https://cdn.beatsaver.com/c9c15d3f3109a8f732b41b299ce84556bebf73ac.zip",coverURL:"https://cdn.beatsaver.com/c9c15d3f3109a8f732b41b299ce84556bebf73ac.jpg",previewURL:"https://cdn.beatsaver.com/c9c15d3f3109a8f732b41b299ce84556bebf73ac.mp3"}],createdAt:"2019-05-05T18:37:01Z",updatedAt:"2019-05-05T18:37:01Z",lastPublishedAt:"2019-05-05T18:37:01Z"},{id:"4a47",name:"[Anniversary] Supernova - Laszlo [DownyCat]",description:"Part of the Anniversary Song Pack",uploader:{id:37070,name:"anniversaryteam",uniqueSet:!0,hash:"5cff0b7798cc5a672c8565a3",avatar:"https://www.gravatar.com/avatar/5cff0b7798cc5a672c8565a3?d=retro",type:"SIMPLE"},metadata:{bpm:128,duration:196,songName:"Supernova",songSubName:"Laszlo",songAuthorName:"DownyCat",levelAuthorName:"AnniversaryTeam"},stats:{plays:0,downloads:7974,upvotes:4371,downvotes:97,score:.9402},uploaded:"2019-05-03T14:10:59Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"17ad188a8dea7cff81f5f7c6720099a1e395b168",key:"4a47",state:"Published",createdAt:"2019-05-03T14:10:59Z",sageScore:8,diffs:[{njs:12,offset:0,notes:260,bombs:0,obstacles:18,nps:1.387,length:400,characteristic:"Standard",difficulty:"Easy",events:4926,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:187.5,paritySummary:{errors:21,warns:17,resets:0}},{njs:12,offset:0,notes:375,bombs:0,obstacles:22,nps:2,length:400,characteristic:"Standard",difficulty:"Normal",events:4926,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:187.5,paritySummary:{errors:18,warns:14,resets:0}},{njs:12,offset:0,notes:491,bombs:0,obstacles:22,nps:2.619,length:400,characteristic:"Standard",difficulty:"Hard",events:4926,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:187.5,paritySummary:{errors:16,warns:19,resets:0}},{njs:16,offset:0,notes:832,bombs:0,obstacles:22,nps:4.437,length:400,characteristic:"Standard",difficulty:"Expert",events:4926,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:187.5,paritySummary:{errors:12,warns:8,resets:0}},{njs:18,offset:0,notes:959,bombs:0,obstacles:22,nps:5.115,length:400,characteristic:"Standard",difficulty:"ExpertPlus",events:4926,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:187.5,paritySummary:{errors:18,warns:15,resets:0}}],downloadURL:"https://cdn.beatsaver.com/17ad188a8dea7cff81f5f7c6720099a1e395b168.zip",coverURL:"https://cdn.beatsaver.com/17ad188a8dea7cff81f5f7c6720099a1e395b168.jpg",previewURL:"https://cdn.beatsaver.com/17ad188a8dea7cff81f5f7c6720099a1e395b168.mp3"}],createdAt:"2019-05-03T14:10:59Z",updatedAt:"2019-05-03T14:10:59Z",lastPublishedAt:"2019-05-03T14:10:59Z"},{id:"36d5",name:"TheFatRat - MAYDAY feat. Laura Brehm",description:"reuploaded for ranked\n",uploader:{id:4284400,name:"oddloop",uniqueSet:!0,hash:"5cff0b7398cc5a672c84fd45",avatar:"https://cdn.beatsaver.com/avatar/173241614192476161.png",type:"DISCORD"},metadata:{bpm:150,duration:247,songName:"MAYDAY",songSubName:"TheFatRat & Laura Brehm",songAuthorName:"Oddloop",levelAuthorName:"oddloop"},stats:{plays:0,downloads:12226,upvotes:4840,downvotes:114,score:.9402},uploaded:"2019-02-16T21:37:31Z",automapper:!1,ranked:!0,qualified:!1,versions:[{hash:"6a9042eb11d4da0938bbdaa0f584131def762f4a",key:"36d5",state:"Published",createdAt:"2019-02-16T21:37:31Z",sageScore:6,diffs:[{njs:16,offset:0,notes:887,bombs:0,obstacles:20,nps:3.807,length:582.5,characteristic:"Standard",difficulty:"Expert",events:1307,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:233,paritySummary:{errors:23,warns:24,resets:0},stars:2.85}],downloadURL:"https://cdn.beatsaver.com/6a9042eb11d4da0938bbdaa0f584131def762f4a.zip",coverURL:"https://cdn.beatsaver.com/6a9042eb11d4da0938bbdaa0f584131def762f4a.jpg",previewURL:"https://cdn.beatsaver.com/6a9042eb11d4da0938bbdaa0f584131def762f4a.mp3"}],createdAt:"2019-02-16T21:37:31Z",updatedAt:"2019-02-16T21:37:31Z",lastPublishedAt:"2019-02-16T21:37:31Z"},{id:"49ae",name:"Lindsey Stirling - Shatter Me",description:"Feedback on Discord: nitronik.exe#7974\nNote: if you dont like flashy lights, turn on static lights! (also epilepsy warning lol)\npreview: https://www.youtube.com/watch?v=0JGEh4lPVpA\n\nEasy (lightshow): 0 notes, 0 nps, 0 bombs, 0 walls, njs 10\nNormal: 692 notes, 2.37 nps, 0 bombs, 25 walls, njs 10\nHard: 912 notes, 3.13 nps, 8 bombs, 29 walls, njs 13\nExpert: 1166 notes, 4 nps, 38 bombs, 29 walls, njs 16\nExpertPlus: 1462 Notes, 5.02 nps, 64 bombs, 33 walls, njs 19",uploader:{id:4284201,name:"nitronikexe",uniqueSet:!0,hash:"5cff0b7798cc5a672c855d84",avatar:"https://cdn.beatsaver.com/avatar/428230049704181760.png",type:"DISCORD"},metadata:{bpm:145,duration:291,songName:"Shatter Me",songSubName:"Lindsey Stirling",songAuthorName:"nitronik.exe",levelAuthorName:"nitronikexe"},stats:{plays:0,downloads:10457,upvotes:5571,downvotes:144,score:.9397},uploaded:"2019-05-01T10:07:45Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"0c02558f26e46d94c33728885a10ea8a4e2a9fd5",key:"49ae",state:"Published",createdAt:"2019-05-01T10:07:45Z",sageScore:8,diffs:[{njs:10,offset:0,notes:0,bombs:0,obstacles:0,nps:0,length:0,characteristic:"Standard",difficulty:"Easy",events:7862,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:0,paritySummary:{errors:0,warns:0,resets:0}},{njs:10,offset:0,notes:692,bombs:0,obstacles:25,nps:2.57,length:650.667,characteristic:"Standard",difficulty:"Normal",events:7862,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:269.241,paritySummary:{errors:0,warns:18,resets:0}},{njs:13,offset:0,notes:912,bombs:8,obstacles:29,nps:3.386,length:651,characteristic:"Standard",difficulty:"Hard",events:7862,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:269.379,paritySummary:{errors:0,warns:0,resets:0}},{njs:16,offset:0,notes:1166,bombs:38,obstacles:29,nps:4.305,length:654.5,characteristic:"Standard",difficulty:"Expert",events:7862,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:270.828,paritySummary:{errors:0,warns:0,resets:0}},{njs:19,offset:0,notes:1462,bombs:64,obstacles:33,nps:5.427,length:651,characteristic:"Standard",difficulty:"ExpertPlus",events:7862,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:269.379,paritySummary:{errors:8,warns:4,resets:20}}],downloadURL:"https://cdn.beatsaver.com/0c02558f26e46d94c33728885a10ea8a4e2a9fd5.zip",coverURL:"https://cdn.beatsaver.com/0c02558f26e46d94c33728885a10ea8a4e2a9fd5.jpg",previewURL:"https://cdn.beatsaver.com/0c02558f26e46d94c33728885a10ea8a4e2a9fd5.mp3"}],createdAt:"2019-05-01T10:07:45Z",updatedAt:"2019-05-01T10:07:45Z",lastPublishedAt:"2019-05-01T10:07:45Z"},{id:"45e",name:"CAN'T STOP THE FEELING! - Justin Timberlake",description:"Difficulties: Expert Only Lighting by GreatYazer\r\nWatch Me on Twitch: http://www.twitch.tv/bennydabeastlive\r\n\r\nIf you like this, check out my other beat maps:\r\nMidnight City by M83: https://beatsaver.com/details.php?id=542\r\nKids by MGMT: https://beatsaver.com/details.php?id=421\r\nWhat You Know by Two Door Cinema Club: https://beatsaver.com/details.php?id=1107\r\nPolish Girl by Neon Indian: https://beatsaver.com/details.php?id=694",uploader:{id:30311,name:"bennydabeast",uniqueSet:!0,hash:"5cff0b7298cc5a672c84e98d",avatar:"https://cdn.beatsaver.com/avatar/30311.jpg",type:"SIMPLE"},metadata:{bpm:113,duration:238,songName:"CAN'T STOP THE FEELING!",songSubName:"Justin Timberlake",songAuthorName:"BennyDaBeast",levelAuthorName:"bennydabeast"},stats:{plays:0,downloads:18524,upvotes:6933,downvotes:197,score:.9397},uploaded:"2018-06-08T21:44:40Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"91ba25c089d50e93154e2c7920c46d4730f22569",key:"45e",state:"Published",createdAt:"2018-06-08T21:44:40Z",sageScore:5,diffs:[{njs:10,offset:0,notes:579,bombs:0,obstacles:38,nps:2.507,length:435,characteristic:"Standard",difficulty:"Expert",events:709,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:230.973,paritySummary:{errors:110,warns:65,resets:0}}],downloadURL:"https://cdn.beatsaver.com/91ba25c089d50e93154e2c7920c46d4730f22569.zip",coverURL:"https://cdn.beatsaver.com/91ba25c089d50e93154e2c7920c46d4730f22569.jpg",previewURL:"https://cdn.beatsaver.com/91ba25c089d50e93154e2c7920c46d4730f22569.mp3"}],createdAt:"2018-06-08T21:44:40Z",updatedAt:"2018-06-08T21:44:40Z",lastPublishedAt:"2018-06-08T21:44:40Z"},{id:"80da",name:"chelmico - Easy Breezy [Keep Your Hands Off Eizouken! Opening]",description:"stan sayaka\n\nAlso please check out chelmico's other songs. I've just recently become addicted to their songs\n\nBPM 186 |\nExpert+\nExpert\nHard\nBreezy (Normal)\nEasy\n\nthanks as always\n\nDM any feedback on Discord\nETAN#8341",uploader:{id:4235140,name:"etan",uniqueSet:!0,hash:"5cff0b7798cc5a672c855775",avatar:"https://cdn.beatsaver.com/avatar/136373107559497728.png",type:"DISCORD"},metadata:{bpm:186,duration:109,songName:"Easy Breezy",songSubName:"",songAuthorName:"chelmico",levelAuthorName:"ETAN"},stats:{plays:0,downloads:7380,upvotes:2370,downvotes:33,score:.9396},uploaded:"2020-01-24T11:15:41.867Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"070007ff180423aa0abf3f2ba5584b0846788ee8",key:"80da",state:"Published",createdAt:"2020-01-24T11:15:41.867Z",sageScore:6,diffs:[{njs:10,offset:.5,notes:117,bombs:8,obstacles:11,nps:1.242,length:292,characteristic:"Standard",difficulty:"Easy",events:4738,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:94.194,paritySummary:{errors:7,warns:7,resets:2}},{njs:12,offset:0,notes:181,bombs:17,obstacles:11,nps:1.909,length:294,characteristic:"Standard",difficulty:"Normal",events:4738,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:94.839,paritySummary:{errors:1,warns:1,resets:2}},{njs:13,offset:0,notes:272,bombs:17,obstacles:11,nps:2.858,length:295,characteristic:"Standard",difficulty:"Hard",events:4738,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:95.161,paritySummary:{errors:0,warns:0,resets:0}},{njs:14,offset:1,notes:368,bombs:17,obstacles:11,nps:3.765,length:303,characteristic:"Standard",difficulty:"Expert",events:4738,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:97.742,paritySummary:{errors:0,warns:0,resets:2}},{njs:21,offset:0,notes:467,bombs:17,obstacles:11,nps:4.778,length:303,characteristic:"Standard",difficulty:"ExpertPlus",events:4687,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:97.742,paritySummary:{errors:0,warns:0,resets:2}},{njs:10,offset:0,notes:0,bombs:0,obstacles:0,nps:0,length:0,characteristic:"Lightshow",difficulty:"Easy",events:4687,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:0,paritySummary:{errors:0,warns:0,resets:0}}],downloadURL:"https://cdn.beatsaver.com/070007ff180423aa0abf3f2ba5584b0846788ee8.zip",coverURL:"https://cdn.beatsaver.com/070007ff180423aa0abf3f2ba5584b0846788ee8.jpg",previewURL:"https://cdn.beatsaver.com/070007ff180423aa0abf3f2ba5584b0846788ee8.mp3"}],createdAt:"2020-01-24T11:15:41.867Z",updatedAt:"2020-01-24T11:15:41.867Z",lastPublishedAt:"2020-01-24T11:15:41.867Z"},{id:"68f4",name:"Ehrling - Palm Trees",description:"Expert / Hard / Normal\r\nMade for HeyFalcon",uploader:{id:12996,name:"rustic",uniqueSet:!0,hash:"5cff0b7298cc5a672c84e8c4",avatar:"https://www.gravatar.com/avatar/5cff0b7298cc5a672c84e8c4?d=retro",type:"SIMPLE"},metadata:{bpm:122,duration:167,songName:"Palm Trees",songSubName:"",songAuthorName:"Ehrling",levelAuthorName:"Rustic"},stats:{plays:0,downloads:3862,upvotes:2336,downvotes:32,score:.9396},uploaded:"2019-10-10T18:18:18.093Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"6eef9850cfeb43d14c66323cfbae50d8532c9c43",key:"68f4",state:"Published",createdAt:"2019-10-10T18:18:18.093Z",sageScore:6,diffs:[{njs:12,offset:0,notes:257,bombs:0,obstacles:4876,nps:1.574,length:332,characteristic:"Standard",difficulty:"Normal",events:1638,chroma:!1,me:!0,ne:!1,cinema:!1,seconds:163.279,paritySummary:{errors:0,warns:0,resets:0}},{njs:14,offset:0,notes:336,bombs:0,obstacles:4876,nps:2.058,length:332,characteristic:"Standard",difficulty:"Hard",events:1638,chroma:!1,me:!0,ne:!1,cinema:!1,seconds:163.279,paritySummary:{errors:0,warns:0,resets:0}},{njs:17,offset:0,notes:337,bombs:0,obstacles:4876,nps:2.064,length:332,characteristic:"Standard",difficulty:"Expert",events:1694,chroma:!1,me:!0,ne:!1,cinema:!1,seconds:163.279,paritySummary:{errors:0,warns:0,resets:0}}],downloadURL:"https://cdn.beatsaver.com/6eef9850cfeb43d14c66323cfbae50d8532c9c43.zip",coverURL:"https://cdn.beatsaver.com/6eef9850cfeb43d14c66323cfbae50d8532c9c43.jpg",previewURL:"https://cdn.beatsaver.com/6eef9850cfeb43d14c66323cfbae50d8532c9c43.mp3"}],createdAt:"2019-10-10T18:18:18.093Z",updatedAt:"2019-10-10T18:18:18.093Z",lastPublishedAt:"2019-10-10T18:18:18.093Z"},{id:"1311",name:"Restart",description:"Finally!\r\n\r\nAnother map for you all to enjoy!\r\n\r\nThis cheerful song will get anyones spirits up! \r\nAnd with the song being part dancey part flow your gonna wish you played it!\r\n\r\nExpert+ is HyperSpeed mode for those who want to play fast!\r\n\r\nAll lighting was done by me!\r\nI do say that ive got a talent for lighting hmm? ;P",uploader:{id:4289111,name:"blackblazon",uniqueSet:!0,hash:"5cff0b7398cc5a672c84ef34",avatar:"https://cdn.beatsaver.com/avatar/127162370538733568.png",type:"DISCORD"},metadata:{bpm:155,duration:252,songName:"Restart",songSubName:"Subtact",songAuthorName:"BlackBlazon",levelAuthorName:"blackblazon"},stats:{plays:0,downloads:5574,upvotes:2795,downvotes:46,score:.9396},uploaded:"2018-09-02T01:56:36Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"c7a915c5315591f5a0e31f89dbbad4e69992f353",key:"1311",state:"Published",createdAt:"2018-09-02T01:56:36Z",sageScore:5,diffs:[{njs:12,offset:0,notes:1116,bombs:0,obstacles:0,nps:4.512,length:639,characteristic:"Standard",difficulty:"Expert",events:1785,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:247.355,paritySummary:{errors:66,warns:23,resets:0}},{njs:15,offset:0,notes:1116,bombs:0,obstacles:0,nps:4.512,length:639,characteristic:"Standard",difficulty:"ExpertPlus",events:1785,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:247.355,paritySummary:{errors:66,warns:23,resets:0}}],downloadURL:"https://cdn.beatsaver.com/c7a915c5315591f5a0e31f89dbbad4e69992f353.zip",coverURL:"https://cdn.beatsaver.com/c7a915c5315591f5a0e31f89dbbad4e69992f353.jpg",previewURL:"https://cdn.beatsaver.com/c7a915c5315591f5a0e31f89dbbad4e69992f353.mp3"}],createdAt:"2018-09-02T01:56:36Z",updatedAt:"2018-09-02T01:56:36Z",lastPublishedAt:"2018-09-02T01:56:36Z"},{id:"3fd3",name:"Cowboy Bebop - Tank! (Ben Briggs Remix)",description:"New lights, Expert now E+, an actual Expert added.",uploader:{id:4285169,name:"ryger",uniqueSet:!0,hash:"5cff0b7798cc5a672c855a42",avatar:"https://cdn.beatsaver.com/avatar/169266024502263808.png",type:"DISCORD"},metadata:{bpm:128,duration:173,songName:"Tank! (Ben Briggs Remix)",songSubName:"Cowboy Bebop",songAuthorName:"Ryger",levelAuthorName:"Ryger"},stats:{plays:0,downloads:10556,upvotes:4579,downvotes:108,score:.9395},uploaded:"2019-03-22T19:27:47Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"8a19fa1812254b7b610e667039af155cee68606a",key:"3fd3",state:"Published",createdAt:"2019-03-22T19:27:47Z",sageScore:6,diffs:[{njs:14,offset:0,notes:703,bombs:0,obstacles:5,nps:4.173,length:359.375,characteristic:"Standard",difficulty:"Expert",events:3940,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:168.457,paritySummary:{errors:41,warns:24,resets:0}},{njs:14,offset:0,notes:780,bombs:0,obstacles:5,nps:4.63,length:359.375,characteristic:"Standard",difficulty:"ExpertPlus",events:3940,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:168.457,paritySummary:{errors:68,warns:46,resets:0}}],downloadURL:"https://cdn.beatsaver.com/8a19fa1812254b7b610e667039af155cee68606a.zip",coverURL:"https://cdn.beatsaver.com/8a19fa1812254b7b610e667039af155cee68606a.jpg",previewURL:"https://cdn.beatsaver.com/8a19fa1812254b7b610e667039af155cee68606a.mp3"}],createdAt:"2019-03-22T19:27:47Z",updatedAt:"2019-03-22T19:27:47Z",lastPublishedAt:"2019-03-22T19:27:47Z"},{id:"6484",name:"Poison - Nightcore",description:"Youtube Preview: https://youtu.be/dzbdbXJWKMQ",uploader:{id:23751,name:"monteblanco",uniqueSet:!0,hash:"5cff0b7798cc5a672c855ef5",avatar:"https://www.gravatar.com/avatar/5cff0b7798cc5a672c855ef5?d=retro",type:"SIMPLE"},metadata:{bpm:169,duration:150,songName:"Poison - Nightcore",songSubName:"",songAuthorName:"Groove Coverage",levelAuthorName:"Monteblanco"},stats:{plays:0,downloads:6746,upvotes:3401,downvotes:67,score:.9394},uploaded:"2019-09-19T13:15:08.715Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"e570d226c15ad3f5c4b84cfffe3542e61facc502",key:"6484",state:"Published",createdAt:"2019-09-19T13:15:08.715Z",sageScore:5,diffs:[{njs:15,offset:0,notes:504,bombs:4,obstacles:24,nps:3.518,length:403.5,characteristic:"Standard",difficulty:"Expert",events:616,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:143.254,paritySummary:{errors:0,warns:0,resets:2}}],downloadURL:"https://cdn.beatsaver.com/e570d226c15ad3f5c4b84cfffe3542e61facc502.zip",coverURL:"https://cdn.beatsaver.com/e570d226c15ad3f5c4b84cfffe3542e61facc502.jpg",previewURL:"https://cdn.beatsaver.com/e570d226c15ad3f5c4b84cfffe3542e61facc502.mp3"}],createdAt:"2019-09-19T13:15:08.715Z",updatedAt:"2019-09-19T13:15:08.715Z",lastPublishedAt:"2019-09-19T13:15:08.715Z"},{id:"2c4f",name:"POP/STARS vs MEGALOVANIA - Dj CUTMAN",description:"As requested by @Gravemind1. POP/STARS vs MEGALOVANIA by Dj CUTMAN! I had fun mapping this (especially since it gives me a reason to lightmap the KDA environment!) and I hope you'll have fun playing it too! \r\n\r\nAll credit goes to Dj CUTMAN for the mashup: https://www.youtube.com/watch?v=Wan2REH1x9g",uploader:{id:58338,name:"Joetastic",uniqueSet:!0,hash:"5cff0b7498cc5a672c85050e",avatar:"https://cdn.beatsaver.com/avatar/227767566402191360.png",type:"DISCORD"},metadata:{bpm:185,duration:176,songName:"POP/STARS vs MEGALOVANIA",songSubName:"Dj CUTMAN",songAuthorName:"Joetastic",levelAuthorName:"Joetastic"},stats:{plays:0,downloads:9567,upvotes:4373,downvotes:101,score:.9394},uploaded:"2019-01-09T15:56:43Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"5ede52db98f5cde3a4d54b4f96d7f9b6fe227fe7",key:"2c4f",state:"Published",createdAt:"2019-01-09T15:56:43Z",sageScore:5,diffs:[{njs:15,offset:0,notes:995,bombs:0,obstacles:27,nps:5.821,length:527,characteristic:"Standard",difficulty:"ExpertPlus",events:3164,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:170.919,paritySummary:{errors:43,warns:50,resets:0}}],downloadURL:"https://cdn.beatsaver.com/5ede52db98f5cde3a4d54b4f96d7f9b6fe227fe7.zip",coverURL:"https://cdn.beatsaver.com/5ede52db98f5cde3a4d54b4f96d7f9b6fe227fe7.jpg",previewURL:"https://cdn.beatsaver.com/5ede52db98f5cde3a4d54b4f96d7f9b6fe227fe7.mp3"}],createdAt:"2019-01-09T15:56:43Z",updatedAt:"2019-01-09T15:56:43Z",lastPublishedAt:"2019-01-09T15:56:43Z"},{id:"3694",name:"Centipede",description:"A full remake of the original Centipede map!\r\n\r\nEnjoy at your hearts content!\r\n\r\np.s i lied about the hiatus",uploader:{id:4289111,name:"blackblazon",uniqueSet:!0,hash:"5cff0b7398cc5a672c84ef34",avatar:"https://cdn.beatsaver.com/avatar/127162370538733568.png",type:"DISCORD"},metadata:{bpm:140,duration:249,songName:"Centipede",songSubName:"Knife Party",songAuthorName:"BlackBlazon & EpicEwok",levelAuthorName:"blackblazon"},stats:{plays:0,downloads:8169,upvotes:4979,downvotes:125,score:.9391},uploaded:"2019-02-16T00:35:23Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"e59f717e08b56c8693b14f42a94832cacd4bbca4",key:"3694",state:"Published",createdAt:"2019-02-16T00:35:23Z",sageScore:5,diffs:[{njs:14,offset:0,notes:1004,bombs:56,obstacles:25,nps:4.371,length:536,characteristic:"Standard",difficulty:"Expert",events:11574,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:229.714,paritySummary:{errors:22,warns:22,resets:0}},{njs:18,offset:0,notes:1004,bombs:56,obstacles:25,nps:4.371,length:536,characteristic:"Standard",difficulty:"ExpertPlus",events:11574,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:229.714,paritySummary:{errors:22,warns:22,resets:0}}],downloadURL:"https://cdn.beatsaver.com/e59f717e08b56c8693b14f42a94832cacd4bbca4.zip",coverURL:"https://cdn.beatsaver.com/e59f717e08b56c8693b14f42a94832cacd4bbca4.jpg",previewURL:"https://cdn.beatsaver.com/e59f717e08b56c8693b14f42a94832cacd4bbca4.mp3"}],createdAt:"2019-02-16T00:35:23Z",updatedAt:"2019-02-16T00:35:23Z",lastPublishedAt:"2019-02-16T00:35:23Z"},{id:"1716",name:"Empty Threat - CHVRCHES",description:"Difficulties: Expert+, Expert, Hard, Normal\r\nYouTube Preview: https://youtu.be/5fp_4qs7RvA",uploader:{id:30311,name:"bennydabeast",uniqueSet:!0,hash:"5cff0b7298cc5a672c84e98d",avatar:"https://cdn.beatsaver.com/avatar/30311.jpg",type:"SIMPLE"},metadata:{bpm:132,duration:246,songName:"Empty Threat",songSubName:"CHVRCHES",songAuthorName:"Benny",levelAuthorName:"bennydabeast"},stats:{plays:0,downloads:7003,upvotes:3875,downvotes:85,score:.939},uploaded:"2018-09-25T02:11:16Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"f08cad7d3b663caa6f8c23aa04664273f532f74a",key:"1716",state:"Published",createdAt:"2018-09-25T02:11:16Z",sageScore:4,diffs:[{njs:10,offset:0,notes:405,bombs:0,obstacles:16,nps:1.697,length:527,characteristic:"Standard",difficulty:"Normal",events:1241,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:239.545,paritySummary:{errors:55,warns:38,resets:0}},{njs:10,offset:0,notes:621,bombs:0,obstacles:24,nps:2.6,length:527.5,characteristic:"Standard",difficulty:"Hard",events:1241,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:239.773,paritySummary:{errors:70,warns:69,resets:0}},{njs:10,offset:0,notes:930,bombs:0,obstacles:24,nps:3.893,length:527.5,characteristic:"Standard",difficulty:"Expert",events:1241,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:239.773,paritySummary:{errors:97,warns:109,resets:0}},{njs:11,offset:0,notes:1255,bombs:0,obstacles:22,nps:5.251,length:527.75,characteristic:"Standard",difficulty:"ExpertPlus",events:1241,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:239.886,paritySummary:{errors:116,warns:208,resets:0}}],downloadURL:"https://cdn.beatsaver.com/f08cad7d3b663caa6f8c23aa04664273f532f74a.zip",coverURL:"https://cdn.beatsaver.com/f08cad7d3b663caa6f8c23aa04664273f532f74a.jpg",previewURL:"https://cdn.beatsaver.com/f08cad7d3b663caa6f8c23aa04664273f532f74a.mp3"}],createdAt:"2018-09-25T02:11:16Z",updatedAt:"2018-09-25T02:11:16Z",lastPublishedAt:"2018-09-25T02:11:16Z"},{id:"9d7",name:"Back in Black - AC/DC",description:"CAUSE I'M BACK IN BLAAAAAAACK! All difficulties, full lights.\r\n\r\nWas charted form start to finish on my twitch, come watch me stream other chart creations!!!! https://www.twitch.tv/freeek\r\n\r\nExpert FC Video: https://www.youtube.com/watch?v=ZxLxbSfSEPA",uploader:{id:47581,name:"freeek",uniqueSet:!0,hash:"5cff0b7298cc5a672c84e8ad",avatar:"https://www.gravatar.com/avatar/5cff0b7298cc5a672c84e8ad?d=retro",type:"SIMPLE"},metadata:{bpm:95,duration:241,songName:"Back in Black",songSubName:"AC/DC",songAuthorName:"Freeek",levelAuthorName:"freeek"},stats:{plays:0,downloads:20588,upvotes:8804,downvotes:280,score:.939},uploaded:"2018-07-16T11:58:36Z",automapper:!1,ranked:!0,qualified:!1,versions:[{hash:"8af82a87167070a08ec63dba0459c829c2954067",key:"9d7",state:"Published",createdAt:"2018-07-16T11:58:36Z",sageScore:5,diffs:[{njs:10,offset:0,notes:450,bombs:0,obstacles:31,nps:1.947,length:366,characteristic:"Standard",difficulty:"Easy",events:1258,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:231.158,paritySummary:{errors:19,warns:2,resets:0},stars:.51},{njs:10,offset:0,notes:563,bombs:0,obstacles:47,nps:2.436,length:366,characteristic:"Standard",difficulty:"Normal",events:1258,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:231.158,paritySummary:{errors:87,warns:21,resets:0},stars:1.12},{njs:10,offset:0,notes:683,bombs:0,obstacles:47,nps:2.955,length:366,characteristic:"Standard",difficulty:"Hard",events:1258,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:231.158,paritySummary:{errors:81,warns:89,resets:0},stars:1.73},{njs:10,offset:0,notes:824,bombs:0,obstacles:47,nps:3.565,length:366,characteristic:"Standard",difficulty:"Expert",events:1258,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:231.158,paritySummary:{errors:79,warns:95,resets:0}}],downloadURL:"https://cdn.beatsaver.com/8af82a87167070a08ec63dba0459c829c2954067.zip",coverURL:"https://cdn.beatsaver.com/8af82a87167070a08ec63dba0459c829c2954067.jpg",previewURL:"https://cdn.beatsaver.com/8af82a87167070a08ec63dba0459c829c2954067.mp3"}],createdAt:"2018-07-16T11:58:36Z",updatedAt:"2018-07-16T11:58:36Z",lastPublishedAt:"2018-07-16T11:58:36Z"},{id:"198f3",name:"Spider Dance - Toby Fox (Undertale modchart)",description:"There are countless Undertale maps on Beat Saber, but what if you could actually experience a real boss fight? It's now possible thanks to Noodle Extensions, and I'm proud to present to you the first Undertale modchart: Spider Dance, where you will confront Muffet.\r\n\r\nTips for a better experience:\r\n- Don't use static lights; there shouldn't be any lights\r\n- Hide the HUD in player settings\r\n- Enable \"bloom post-processing\"\r\n- Enable \"screen distortion effects\"\r\n\r\nInstallation instructions:\r\n- You will need Noodle Extensions and Chroma and their dependencies. All are now available on ModAssistant.\r\n- If you read this in a future where the update broke the mods and they haven't been approved on ModAssistant yet, install the basic mods from ModAssistant and get the latest releases of Noodle Extensions, Heck, and Chroma from Aeroluna's GitHub: https://github.com/Aeroluna\r\n\r\nVideo: https://youtu.be/fy8KmUor6fI\r\n\r\nI started this a while ago before Ghost Choir and then abandoned the project. But I finally decided to finish the work, so I hope you'll enjoy it :)\r\nThanks to Reaxt and Cyansnow, who testplayed and made detailed suggestions that helped me improve the quality of this map. I really appreciate it.\r\n\r\nMy social media links (please follow/subscribe): https://linktr.ee/nyri0",uploader:{id:4288814,name:"nyri0",uniqueSet:!0,hash:"5e792df416c9680006086a78",avatar:"https://cdn.beatsaver.com/avatar/396715033125584907.png",type:"DISCORD"},metadata:{bpm:115,duration:114,songName:"Spider Dance",songSubName:"",songAuthorName:"Toby Fox",levelAuthorName:"nyri0"},stats:{plays:0,downloads:15821,upvotes:1257,downvotes:4,score:.9389},uploaded:"2021-06-25T17:47:40.296Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"09246637fa63ac55aa518718fd1eb4b876960480",key:"198f3",state:"Published",createdAt:"2021-06-25T17:47:40.296Z",sageScore:2,diffs:[{njs:16,offset:0,notes:434,bombs:88,obstacles:1153,nps:4.377,length:190.063,characteristic:"Standard",difficulty:"ExpertPlus",events:5,chroma:!0,me:!1,ne:!0,cinema:!1,seconds:99.163,paritySummary:{errors:13,warns:13,resets:0}}],downloadURL:"https://cdn.beatsaver.com/09246637fa63ac55aa518718fd1eb4b876960480.zip",coverURL:"https://cdn.beatsaver.com/09246637fa63ac55aa518718fd1eb4b876960480.jpg",previewURL:"https://cdn.beatsaver.com/09246637fa63ac55aa518718fd1eb4b876960480.mp3"}],createdAt:"2021-06-25T17:47:40.296Z",updatedAt:"2021-06-25T17:47:40.296Z",lastPublishedAt:"2021-06-25T17:47:40.296Z"},{id:"860",name:"Wake Me Up When September Ends - Green Day",description:"Expert - Hard - Normal Charts\nCustom Lighting\nhttps://www.youtube.com/watch?v=QPiD-n4W6s0\n\nhttps://twitter.com/TheDownyCat\nhttps://www.twitch.tv/downycat\nhttps://streamlabs.com/downycat/tip",uploader:{id:4285982,name:"downycat",uniqueSet:!0,hash:"5cff0b7398cc5a672c84ede5",avatar:"https://cdn.beatsaver.com/avatar/173538829888782336.png",type:"DISCORD"},metadata:{bpm:105,duration:271,songName:"Wake Me Up When September Ends",songSubName:"Green Day",songAuthorName:"DownyCat",levelAuthorName:"downycat"},stats:{plays:0,downloads:11787,upvotes:3264,downvotes:64,score:.9389},uploaded:"2018-07-07T14:38:17Z",automapper:!1,ranked:!0,qualified:!1,versions:[{hash:"d0457c1dee4a78f5496c3b282f8b834ec45f75a8",key:"860",state:"Published",createdAt:"2018-07-07T14:38:17Z",sageScore:5,diffs:[{njs:10,offset:0,notes:461,bombs:34,obstacles:97,nps:1.801,length:448,characteristic:"Standard",difficulty:"Normal",events:1579,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:256,paritySummary:{errors:59,warns:13,resets:2},stars:.95},{njs:10,offset:0,notes:862,bombs:0,obstacles:85,nps:3.367,length:448,characteristic:"Standard",difficulty:"Hard",events:1579,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:256,paritySummary:{errors:52,warns:1,resets:0}},{njs:10,offset:0,notes:1179,bombs:0,obstacles:86,nps:4.605,length:448,characteristic:"Standard",difficulty:"Expert",events:1579,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:256,paritySummary:{errors:19,warns:20,resets:0}}],downloadURL:"https://cdn.beatsaver.com/d0457c1dee4a78f5496c3b282f8b834ec45f75a8.zip",coverURL:"https://cdn.beatsaver.com/d0457c1dee4a78f5496c3b282f8b834ec45f75a8.jpg",previewURL:"https://cdn.beatsaver.com/d0457c1dee4a78f5496c3b282f8b834ec45f75a8.mp3"}],createdAt:"2018-07-07T14:38:17Z",updatedAt:"2018-07-07T14:38:17Z",lastPublishedAt:"2018-07-07T14:38:17Z"},{id:"3fc",name:"The White Stripes - Seven Nation Army",description:"UPDATED! @BlueASIS#4095 on Discord let me know what you think",uploader:{id:52648,name:"blueasis",uniqueSet:!1,hash:"5cff0b7298cc5a672c84eb5d",avatar:"https://www.gravatar.com/avatar/5cff0b7298cc5a672c84eb5d?d=retro",type:"SIMPLE"},metadata:{bpm:124,duration:232,songName:"Seven Nation Army",songSubName:"The White Stripes",songAuthorName:"BlueASIS",levelAuthorName:"blueasis"},stats:{plays:0,downloads:20649,upvotes:14458,downvotes:530,score:.9389},uploaded:"2018-06-06T18:51:03Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"0b0ad0f34b2d0687a9794bcf5019100fda06971e",key:"3fc",state:"Published",createdAt:"2018-06-06T18:51:03Z",sageScore:4,diffs:[{njs:10,offset:0,notes:399,bombs:0,obstacles:0,nps:1.817,length:453.875,characteristic:"Standard",difficulty:"Normal",events:812,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:219.617,paritySummary:{errors:90,warns:6,resets:0}},{njs:10,offset:0,notes:496,bombs:0,obstacles:0,nps:2.258,length:453.875,characteristic:"Standard",difficulty:"Hard",events:812,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:219.617,paritySummary:{errors:113,warns:12,resets:0}}],downloadURL:"https://cdn.beatsaver.com/0b0ad0f34b2d0687a9794bcf5019100fda06971e.zip",coverURL:"https://cdn.beatsaver.com/0b0ad0f34b2d0687a9794bcf5019100fda06971e.jpg",previewURL:"https://cdn.beatsaver.com/0b0ad0f34b2d0687a9794bcf5019100fda06971e.mp3"}],createdAt:"2018-06-06T18:51:03Z",updatedAt:"2018-06-06T18:51:03Z",lastPublishedAt:"2018-06-06T18:51:03Z"},{id:"5925",name:'Hardware Store - "Weird Al" Yankovic',description:'Hardware Store is a song by "Weird Al" Yankovic. "Hardware Store", which, as the title suggests, is about a new neighborhood hardware store and the things that can be purchased therein. The song was originally supposed to be a style parody of another (unspecified) artist, but it eventually evolved into its own, original composition.\n\nThere\'s a rapid-fire list of 61 products that he sings at the bridge of the song so prepare for that :P',uploader:{id:58338,name:"Joetastic",uniqueSet:!0,hash:"5cff0b7498cc5a672c85050e",avatar:"https://cdn.beatsaver.com/avatar/227767566402191360.png",type:"DISCORD"},metadata:{bpm:126.14,duration:226,songName:"Hardware Store",songSubName:"",songAuthorName:'"Weird Al" Yankovic',levelAuthorName:"Joetastic"},stats:{plays:0,downloads:3028,upvotes:1490,downvotes:10,score:.9388},uploaded:"2019-07-27T16:27:18.223Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"2c677458db9ca04a7d0b64f47b443661d0e487d8",key:"5925",state:"Published",createdAt:"2019-07-27T16:27:18.223Z",sageScore:6,diffs:[{njs:15,offset:0,notes:1223,bombs:0,obstacles:24,nps:5.529,length:465.063,characteristic:"Standard",difficulty:"ExpertPlus",events:1571,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:221.213,paritySummary:{errors:45,warns:36,resets:0}}],downloadURL:"https://cdn.beatsaver.com/2c677458db9ca04a7d0b64f47b443661d0e487d8.zip",coverURL:"https://cdn.beatsaver.com/2c677458db9ca04a7d0b64f47b443661d0e487d8.jpg",previewURL:"https://cdn.beatsaver.com/2c677458db9ca04a7d0b64f47b443661d0e487d8.mp3"}],createdAt:"2019-07-27T16:27:18.223Z",updatedAt:"2019-07-27T16:27:18.223Z",lastPublishedAt:"2019-07-27T16:27:18.223Z"},{id:"3e4",name:"I'll Make A Man Out Of You - Mulan",description:"Expert+/Expert/Hard/Normal all with Lighting Events\r\n114 BMP\r\nSee reddit for video of Expert+ (https://www.reddit.com/r/beatsaber/comments/8owz4t/ill_make_a_man_out_of_you_mulan_expert_video/?ref=share&ref_source=link)",uploader:{id:52670,name:"glacialdrift",uniqueSet:!1,hash:"5cff0b7398cc5a672c84f176",avatar:"https://www.gravatar.com/avatar/5cff0b7398cc5a672c84f176?d=retro",type:"SIMPLE"},metadata:{bpm:114,duration:202,songName:"I'll Make A Man Out Of You",songSubName:"Mulan",songAuthorName:"Glacial Drift",levelAuthorName:"glacialdrift"},stats:{plays:0,downloads:7958,upvotes:4393,downvotes:106,score:.9386},uploaded:"2018-06-06T01:30:06Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"d8088b0ab3d9e5b3e62a2daf7cdc8204e0c67256",key:"3e4",state:"Published",createdAt:"2018-06-06T01:30:06Z",sageScore:3,diffs:[{njs:10,offset:0,notes:285,bombs:0,obstacles:2,nps:1.47,length:368.9,characteristic:"Standard",difficulty:"Normal",events:898,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:194.158,paritySummary:{errors:109,warns:26,resets:0}},{njs:10,offset:0,notes:449,bombs:0,obstacles:2,nps:2.317,length:368.9,characteristic:"Standard",difficulty:"Hard",events:898,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:194.158,paritySummary:{errors:99,warns:49,resets:0}},{njs:10,offset:0,notes:607,bombs:0,obstacles:2,nps:3.132,length:368.9,characteristic:"Standard",difficulty:"Expert",events:1025,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:194.158,paritySummary:{errors:91,warns:74,resets:0}},{njs:10,offset:0,notes:712,bombs:0,obstacles:2,nps:3.674,length:368.9,characteristic:"Standard",difficulty:"ExpertPlus",events:1025,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:194.158,paritySummary:{errors:87,warns:86,resets:0}}],downloadURL:"https://cdn.beatsaver.com/d8088b0ab3d9e5b3e62a2daf7cdc8204e0c67256.zip",coverURL:"https://cdn.beatsaver.com/d8088b0ab3d9e5b3e62a2daf7cdc8204e0c67256.jpg",previewURL:"https://cdn.beatsaver.com/d8088b0ab3d9e5b3e62a2daf7cdc8204e0c67256.mp3"}],createdAt:"2018-06-06T01:30:06Z",updatedAt:"2018-06-06T01:30:06Z",lastPublishedAt:"2018-06-06T01:30:06Z"},{id:"11cf8",name:"Up & Down",description:"I had fun. Liked the song.\nThis map uses Noodle Extensions by the way.\nAlso, please disable any custom note models you might have, and don’t use the BTS environment.\n\nMap video: https://youtu.be/vueyLFN6Azg\n\n-= NOT MY AUDIO =-\n\nOriginal: https://youtu.be/oJa7Kr7_9dw\n\nNotes: 522\nNPS: 3.18\nNJS: 17\nBPM: 138\nBombs: 0\nWalls: 8\nLights: 2,790\nErrors: 5\n\nThanks to:\n@JohnnyDee\n@DefDoof\nfor testing!\n\nThis map does not work for the Quest/Quest 2",uploader:{id:4284638,name:"thegoodboi",uniqueSet:!0,hash:"5cff0b7698cc5a672c85433c",avatar:"https://cdn.beatsaver.com/avatar/515025828736794654.png",type:"DISCORD"},metadata:{bpm:138,duration:164,songName:"Up & Down",songSubName:"",songAuthorName:"Marnik",levelAuthorName:"The Good Boi"},stats:{plays:0,downloads:12995,upvotes:5828,downvotes:162,score:.9385},uploaded:"2020-12-20T21:25:04.106Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"2aa85aad10e124eb674d18d49251bc94ee1a4283",key:"11cf8",state:"Published",createdAt:"2020-12-20T21:25:04.106Z",sageScore:7,diffs:[{njs:17,offset:0,notes:535,bombs:0,obstacles:8,nps:3.418,length:360,characteristic:"Standard",difficulty:"ExpertPlus",events:2790,chroma:!0,me:!1,ne:!0,cinema:!1,seconds:156.522,paritySummary:{errors:27,warns:14,resets:0}},{njs:17,offset:0,notes:535,bombs:0,obstacles:8,nps:3.418,length:360,characteristic:"Lawless",difficulty:"ExpertPlus",events:2790,chroma:!0,me:!1,ne:!0,cinema:!1,seconds:156.522,paritySummary:{errors:26,warns:13,resets:0}}],downloadURL:"https://cdn.beatsaver.com/2aa85aad10e124eb674d18d49251bc94ee1a4283.zip",coverURL:"https://cdn.beatsaver.com/2aa85aad10e124eb674d18d49251bc94ee1a4283.jpg",previewURL:"https://cdn.beatsaver.com/2aa85aad10e124eb674d18d49251bc94ee1a4283.mp3"}],createdAt:"2020-12-20T21:25:04.106Z",updatedAt:"2020-12-20T21:25:04.106Z",lastPublishedAt:"2020-12-20T21:25:04.106Z"},{id:"47f3",name:"TWICE - FANCY",description:"Aggrogahu: Lights, Hard, and Normal.\r\n Here are his awesome maps that you should download: https://beatsaver.com/browse/byuser/5760\r\n\r\nKikae: Expert/Expert+",uploader:{id:4285107,name:"kikaeaeon",uniqueSet:!0,hash:"5cff0b7498cc5a672c85109b",avatar:"https://cdn.beatsaver.com/avatar/103715469822816256.png",type:"DISCORD"},metadata:{bpm:132,duration:218,songName:"FANCY",songSubName:"TWICE",songAuthorName:"KikaeAeon & Aggrogahu",levelAuthorName:"kikaeaeon"},stats:{plays:0,downloads:11038,upvotes:2829,downvotes:52,score:.9381},uploaded:"2019-04-23T09:46:04Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"c63d899018f131d3aed03816c5074350aaa700a7",key:"47f3",state:"Published",createdAt:"2019-04-23T09:46:04Z",sageScore:4,diffs:[{njs:9,offset:0,notes:380,bombs:12,obstacles:12,nps:1.802,length:464,characteristic:"Standard",difficulty:"Normal",events:1003,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:210.909,paritySummary:{errors:41,warns:61,resets:18}},{njs:10,offset:0,notes:587,bombs:6,obstacles:14,nps:2.777,length:465,characteristic:"Standard",difficulty:"Hard",events:972,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:211.364,paritySummary:{errors:54,warns:54,resets:3}},{njs:12,offset:0,notes:817,bombs:0,obstacles:5,nps:3.865,length:465,characteristic:"Standard",difficulty:"Expert",events:1001,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:211.364,paritySummary:{errors:11,warns:1,resets:0}},{njs:15,offset:0,notes:1048,bombs:0,obstacles:5,nps:4.958,length:465,characteristic:"Standard",difficulty:"ExpertPlus",events:1003,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:211.364,paritySummary:{errors:12,warns:14,resets:0}}],downloadURL:"https://cdn.beatsaver.com/c63d899018f131d3aed03816c5074350aaa700a7.zip",coverURL:"https://cdn.beatsaver.com/c63d899018f131d3aed03816c5074350aaa700a7.jpg",previewURL:"https://cdn.beatsaver.com/c63d899018f131d3aed03816c5074350aaa700a7.mp3"}],createdAt:"2019-04-23T09:46:04Z",updatedAt:"2019-04-23T09:46:04Z",lastPublishedAt:"2019-04-23T09:46:04Z"},{id:"1421c",name:"Look At The Sky - Porter Robinson",description:"MAKE SURE TO HAVE BLOOM POST PROCESS ON AND SCREEN DISTORTION EFFECTS ON!!!!\n\n\nThis was super fun to work on! And its finally out! Please enjoy!\nPlease make sure to have noodle extensions and chroma,\nSpecial thanks to MakeUMove, and Dack!\n\nIf you cant play it, heres the video! https://youtu.be/VWSubdP0WcQ",uploader:{id:4235136,name:"reaxt",uniqueSet:!0,hash:"5cff0b7298cc5a672c84e8ab",avatar:"https://cdn.beatsaver.com/avatar/163052863038291970.png",type:"DISCORD"},metadata:{bpm:115,duration:164,songName:"look at the sky",songSubName:"",songAuthorName:"porter robinson",levelAuthorName:"Reaxt & CyanSnow"},stats:{plays:0,downloads:5472,upvotes:1623,downvotes:15,score:.938},uploaded:"2021-02-16T19:10:35.911Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"825dbd980eadceaba54c8e9d8e68f93a1b4cb029",key:"1421c",state:"Published",createdAt:"2021-02-16T19:10:35.911Z",sageScore:2,diffs:[{njs:14,offset:0,notes:505,bombs:0,obstacles:5343,nps:3.552,length:272.5,characteristic:"Lawless",difficulty:"ExpertPlus",events:1247,chroma:!0,me:!1,ne:!0,cinema:!1,seconds:142.174,paritySummary:{errors:2,warns:1,resets:0}}],downloadURL:"https://cdn.beatsaver.com/825dbd980eadceaba54c8e9d8e68f93a1b4cb029.zip",coverURL:"https://cdn.beatsaver.com/825dbd980eadceaba54c8e9d8e68f93a1b4cb029.jpg",previewURL:"https://cdn.beatsaver.com/825dbd980eadceaba54c8e9d8e68f93a1b4cb029.mp3"}],createdAt:"2021-02-16T19:10:35.911Z",updatedAt:"2021-02-16T19:10:35.911Z",lastPublishedAt:"2021-02-16T19:10:35.911Z"},{id:"2da4",name:"Ghosts n Stuff (feat. Rob Swire) - deadmau5",description:"128 BPM / 3:17 Runtime\r\nEasy / 208 Notes\r\nNormal / 345 Notes\r\nHard / 458 Notes\r\nExpert / 595 Notes\r\n\r\nThis one comes with custom colors similar to the KDA Popstars OST track.\r\n\r\nGameplay:\r\nhttps://youtu.be/vxqyTGuO910",uploader:{id:4284981,name:"skylerwallace",uniqueSet:!0,hash:"5cff0b7298cc5a672c84ea67",avatar:"https://cdn.beatsaver.com/avatar/398344856868487168.png",type:"DISCORD"},metadata:{bpm:128,duration:197,songName:"Ghosts n Stuff (feat. Rob Swire)",songSubName:"deadmau5",songAuthorName:"Skyler Wallace",levelAuthorName:"skylerwallace"},stats:{plays:0,downloads:13432,upvotes:6655,downvotes:199,score:.938},uploaded:"2019-01-14T13:48:11Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"712ee0801ae2e65e4cd7ea5377bcf272981b57c6",key:"2da4",state:"Published",createdAt:"2019-01-14T13:48:11Z",sageScore:6,diffs:[{njs:10,offset:1,notes:208,bombs:0,obstacles:16,nps:1.072,length:414,characteristic:"Standard",difficulty:"Easy",events:1827,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:194.063,paritySummary:{errors:46,warns:21,resets:0}},{njs:10,offset:1,notes:345,bombs:0,obstacles:19,nps:1.773,length:415,characteristic:"Standard",difficulty:"Normal",events:1827,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:194.531,paritySummary:{errors:37,warns:12,resets:0}},{njs:12,offset:1,notes:458,bombs:0,obstacles:15,nps:2.352,length:415.5,characteristic:"Standard",difficulty:"Hard",events:1827,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:194.766,paritySummary:{errors:32,warns:19,resets:0}},{njs:14,offset:0,notes:595,bombs:22,obstacles:29,nps:3.055,length:415.5,characteristic:"Standard",difficulty:"Expert",events:1827,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:194.766,paritySummary:{errors:41,warns:34,resets:1}}],downloadURL:"https://cdn.beatsaver.com/712ee0801ae2e65e4cd7ea5377bcf272981b57c6.zip",coverURL:"https://cdn.beatsaver.com/712ee0801ae2e65e4cd7ea5377bcf272981b57c6.jpg",previewURL:"https://cdn.beatsaver.com/712ee0801ae2e65e4cd7ea5377bcf272981b57c6.mp3"}],createdAt:"2019-01-14T13:48:11Z",updatedAt:"2019-01-14T13:48:11Z",lastPublishedAt:"2019-01-14T13:48:11Z"},{id:"49fc",name:"You Give Love A Bad Name - Bon Jovi",description:"Another classic from Bon Jovi :D This one has more beats than it’s my life so it's slightly harder too. Thus the expert difficulty, but it's still on the easy side of expert. Also Gotta love 80s songs lol, no computer mastering means BPM was inconsistent and there are over 20 bpm changes lol",uploader:{id:58338,name:"Joetastic",uniqueSet:!0,hash:"5cff0b7498cc5a672c85050e",avatar:"https://cdn.beatsaver.com/avatar/227767566402191360.png",type:"DISCORD"},metadata:{bpm:123,duration:220,songName:"You Give Love A Bad Name",songSubName:"Bon Jovi",songAuthorName:"Joetastic",levelAuthorName:"Joetastic"},stats:{plays:0,downloads:8360,upvotes:2027,downvotes:27,score:.9379},uploaded:"2019-05-02T18:03:13Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"9465922b3962dca2b4c6d3b312fe61bec255c1e4",key:"49fc",state:"Published",createdAt:"2019-05-02T18:03:13Z",sageScore:6,diffs:[{njs:13,offset:0,notes:731,bombs:2,obstacles:3,nps:3.551,length:422,characteristic:"Standard",difficulty:"Expert",events:2246,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:205.854,paritySummary:{errors:28,warns:38,resets:0}}],downloadURL:"https://cdn.beatsaver.com/9465922b3962dca2b4c6d3b312fe61bec255c1e4.zip",coverURL:"https://cdn.beatsaver.com/9465922b3962dca2b4c6d3b312fe61bec255c1e4.jpg",previewURL:"https://cdn.beatsaver.com/9465922b3962dca2b4c6d3b312fe61bec255c1e4.mp3"}],createdAt:"2019-05-02T18:03:13Z",updatedAt:"2019-05-02T18:03:13Z",lastPublishedAt:"2019-05-02T18:03:13Z"},{id:"b514",name:"[[Wall Show + Chroma]] GAS GAS GAS | Manuel",description:"This wall map is a bit more intense than my others, you will need a very hefty pc to run and record this. Have Fun!\n\nHere's a playthrough: https://www.youtube.com/watch?v=hlS6r-Usnro\nHere's a playthrough by Nico (HQ Version): https://youtu.be/F_3qRxDdQc0\n\nREQUIREMENTS: \n -Noodle Extensions\n -Chroma/ChromaLite\n(fixed formatting + removed stupid metadata ;)",uploader:{id:73008,name:"thelightdesigner",uniqueSet:!0,hash:"5cff0b7798cc5a672c85627a",avatar:"https://cdn.beatsaver.com/avatar/480555157952659489.png",type:"DISCORD"},metadata:{bpm:154,duration:108,songName:"GAS GAS GAS",songSubName:"(Short Ver.)",songAuthorName:"Manuel",levelAuthorName:"KyleT"},stats:{plays:0,downloads:9291,upvotes:2453,downvotes:41,score:.9377},uploaded:"2020-06-22T20:02:06.271Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"95e11f39b2898a38e3b5e61d2156ef5f5835f40f",key:"b514",state:"Published",createdAt:"2020-06-22T20:02:06.271Z",sageScore:3,diffs:[{njs:16.5,offset:0,notes:390,bombs:13,obstacles:13898,nps:3.832,length:261.25,characteristic:"Standard",difficulty:"Expert",events:1462,chroma:!0,me:!1,ne:!0,cinema:!1,seconds:101.786,paritySummary:{errors:0,warns:0,resets:2}}],downloadURL:"https://cdn.beatsaver.com/95e11f39b2898a38e3b5e61d2156ef5f5835f40f.zip",coverURL:"https://cdn.beatsaver.com/95e11f39b2898a38e3b5e61d2156ef5f5835f40f.jpg",previewURL:"https://cdn.beatsaver.com/95e11f39b2898a38e3b5e61d2156ef5f5835f40f.mp3"}],createdAt:"2020-06-22T20:02:06.271Z",updatedAt:"2020-06-22T20:02:06.271Z",lastPublishedAt:"2020-06-22T20:02:06.271Z"},{id:"774e",name:"Sad Machine - Porter Robinson",description:"77",uploader:{id:4285521,name:"ejiejidayo",uniqueSet:!0,hash:"5cff0b7398cc5a672c84fc58",avatar:"https://cdn.beatsaver.com/avatar/224894241279574016.png",type:"DISCORD"},metadata:{bpm:89,duration:257,songName:"Sad Machine",songSubName:"",songAuthorName:"Porter Robinson",levelAuthorName:"ejiejidayo"},stats:{plays:0,downloads:7096,upvotes:2724,downvotes:50,score:.9377},uploaded:"2019-12-18T21:56:31.549Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"7f6ab5de98ac1970e734ea6e26a539fa11cc4f66",key:"774e",state:"Published",createdAt:"2019-12-18T21:56:31.549Z",sageScore:4,diffs:[{njs:10,offset:-.4,notes:647,bombs:0,obstacles:237,nps:2.583,length:369.5,characteristic:"Standard",difficulty:"Hard",events:1973,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:249.101,paritySummary:{errors:1,warns:2,resets:0}},{njs:12,offset:-.6,notes:1025,bombs:0,obstacles:237,nps:4.092,length:369.5,characteristic:"Standard",difficulty:"Expert",events:1973,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:249.101,paritySummary:{errors:22,warns:20,resets:0}}],downloadURL:"https://cdn.beatsaver.com/7f6ab5de98ac1970e734ea6e26a539fa11cc4f66.zip",coverURL:"https://cdn.beatsaver.com/7f6ab5de98ac1970e734ea6e26a539fa11cc4f66.jpg",previewURL:"https://cdn.beatsaver.com/7f6ab5de98ac1970e734ea6e26a539fa11cc4f66.mp3"}],createdAt:"2019-12-18T21:56:31.549Z",updatedAt:"2019-12-18T21:56:31.549Z",lastPublishedAt:"2019-12-18T21:56:31.549Z"},{id:"1fe5",name:"I Just Can't Wait To Be King - Lion King OST - 100k Contest",description:'Unleash your inner beast with the song "I Just Can\'t Wait to be King" from the official Lion King Soundtrack! This map has difficulties from Easy to Expert, for everyone to enjoy! \r\nThis is one of the 22 maps that were mapped for the 100k Contest where you can win over $7,000 in prizes. Go to https://bsaber.com/100k-contest/ to register!\r\n\r\nPreview: https://youtu.be/YDAkqZR9Hs0',uploader:{id:47059,name:"rocket",uniqueSet:!0,hash:"5cff0b7398cc5a672c84f1c0",avatar:"https://www.gravatar.com/avatar/5cff0b7398cc5a672c84f1c0?d=retro",type:"SIMPLE"},metadata:{bpm:99,duration:168,songName:"I Just Can't Wait To Be King",songSubName:"Rowan Atkinson, Jason Weaver, Laura Williams",songAuthorName:"Rocket",levelAuthorName:"rocket"},stats:{plays:0,downloads:11682,upvotes:3499,downvotes:77,score:.9377},uploaded:"2018-11-12T16:50:07Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"1a3237630cd17aaa2af3f728621dcfdcce38edf1",key:"1fe5",state:"Published",createdAt:"2018-11-12T16:50:07Z",sageScore:5,diffs:[{njs:11,offset:0,notes:144,bombs:0,obstacles:16,nps:.91,length:261,characteristic:"Standard",difficulty:"Easy",events:466,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:158.182,paritySummary:{errors:44,warns:9,resets:0}},{njs:11,offset:0,notes:309,bombs:0,obstacles:16,nps:1.953,length:261,characteristic:"Standard",difficulty:"Normal",events:466,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:158.182,paritySummary:{errors:33,warns:18,resets:0}},{njs:11,offset:0,notes:452,bombs:0,obstacles:20,nps:2.857,length:261,characteristic:"Standard",difficulty:"Hard",events:466,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:158.182,paritySummary:{errors:46,warns:56,resets:0}},{njs:11,offset:0,notes:512,bombs:0,obstacles:20,nps:3.237,length:261,characteristic:"Standard",difficulty:"Expert",events:466,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:158.182,paritySummary:{errors:52,warns:70,resets:0}}],downloadURL:"https://cdn.beatsaver.com/1a3237630cd17aaa2af3f728621dcfdcce38edf1.zip",coverURL:"https://cdn.beatsaver.com/1a3237630cd17aaa2af3f728621dcfdcce38edf1.jpg",previewURL:"https://cdn.beatsaver.com/1a3237630cd17aaa2af3f728621dcfdcce38edf1.mp3"}],createdAt:"2018-11-12T16:50:07Z",updatedAt:"2018-11-12T16:50:07Z",lastPublishedAt:"2018-11-12T16:50:07Z"},{id:"ae0e",name:"Alan Walker - Spectre",description:'"Spectre", Alan Walker\'s second most popular NoCopyrightSounds track.\r\nThis is a remap of my very first map. Since a lot of people still like this track and want a proper map of it in Beat Saber, I decided to remap this track following the latest mapping standards. \r\n\r\nEasy : NPS 1.23 | NJS 10\r\nNormal : NPS 2.00 | NJS 10\r\nHard : NPS 3.28 | NJS 13\r\nExpert : NPS 4.44 | NJS 16\r\nExpert+ : NPS 5.41 | NJS 19\r\n\r\nShowcase:\r\nhttps://www.youtube.com/watch?v=Xq7_-0HPThA\r\n\r\nShout out to the following play-testers who play-tested my map:\r\n*lapras\r\n*officialMECH\r\n*Escapee\r\n\r\nFeel free to make your own map for this track.\r\n\r\nOriginal map: https://beatsaver.com/beatmap/155a\r\n\r\nIf you enjoy my work and wish to donate, the option is here :)\r\nPaypal: https://www.paypal.me/WeldonWen',uploader:{id:4286890,name:"weldonwen",uniqueSet:!0,hash:"5cff0b7498cc5a672c850433",avatar:"https://cdn.beatsaver.com/avatar/571472512924254229.png",type:"DISCORD"},metadata:{bpm:128,duration:231,songName:"Spectre ",songSubName:"",songAuthorName:"Alan Walker",levelAuthorName:"WeldonWen"},stats:{plays:0,downloads:11498,upvotes:2715,downvotes:50,score:.9376},uploaded:"2020-06-03T23:05:28.787Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"3c6f02ecbef50e2019d5938871a8f3fcdb7b07a2",key:"ae0e",state:"Published",createdAt:"2020-06-03T23:05:28.787Z",sageScore:7,diffs:[{njs:10,offset:1.04,notes:285,bombs:44,obstacles:40,nps:1.315,length:462.5,characteristic:"Standard",difficulty:"Easy",events:3884,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:216.797,paritySummary:{errors:81,warns:36,resets:0}},{njs:10,offset:.99,notes:464,bombs:51,obstacles:58,nps:2.136,length:463.5,characteristic:"Standard",difficulty:"Normal",events:3884,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:217.266,paritySummary:{errors:70,warns:10,resets:0}},{njs:13,offset:.259,notes:760,bombs:56,obstacles:42,nps:3.498,length:463.5,characteristic:"Standard",difficulty:"Hard",events:3883,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:217.266,paritySummary:{errors:2,warns:6,resets:0}},{njs:16,offset:-.2,notes:1029,bombs:45,obstacles:55,nps:4.736,length:463.5,characteristic:"Standard",difficulty:"Expert",events:3885,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:217.266,paritySummary:{errors:2,warns:0,resets:2}},{njs:19,offset:-.5,notes:1255,bombs:21,obstacles:46,nps:5.776,length:463.5,characteristic:"Standard",difficulty:"ExpertPlus",events:3963,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:217.266,paritySummary:{errors:1,warns:0,resets:1}}],downloadURL:"https://cdn.beatsaver.com/3c6f02ecbef50e2019d5938871a8f3fcdb7b07a2.zip",coverURL:"https://cdn.beatsaver.com/3c6f02ecbef50e2019d5938871a8f3fcdb7b07a2.jpg",previewURL:"https://cdn.beatsaver.com/3c6f02ecbef50e2019d5938871a8f3fcdb7b07a2.mp3"}],createdAt:"2020-06-03T23:05:28.787Z",updatedAt:"2020-06-03T23:05:28.787Z",lastPublishedAt:"2020-06-03T23:05:28.787Z"},{id:"7c05",name:"[Bloq Busters Vol. 2] The Sirens - Seven Lions & Jason Ross",description:"Part of Bloq Busters Vol 2 - Melodic Dubstep\r\n\r\nThis eerie but beautiful and powerful journey composed by Seven Lions and Jason Ross will take you on a trip!\r\n\r\nFeatures Chroma Lights and all difficulties from Normal to Expert++.",uploader:{id:4284569,name:"checkthepan",uniqueSet:!0,hash:"5cff0b7398cc5a672c84f3d5",avatar:"https://cdn.beatsaver.com/avatar/184355369189900290.png",type:"DISCORD"},metadata:{bpm:145,duration:237,songName:"The Sirens",songSubName:"",songAuthorName:"Seven Lions & Jason Ross",levelAuthorName:"Checkthepan"},stats:{plays:0,downloads:7774,upvotes:1475,downvotes:12,score:.9374},uploaded:"2020-01-03T22:46:03.484Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"0dadd6ab18e3ca0011459f16366e41ecffa5029e",key:"7c05",state:"Published",createdAt:"2020-01-03T22:46:03.484Z",sageScore:6,diffs:[{njs:10,offset:0,notes:383,bombs:0,obstacles:256,nps:1.78,length:520,characteristic:"Standard",difficulty:"Easy",events:11028,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:215.172,paritySummary:{errors:73,warns:6,resets:0}},{njs:13,offset:0,notes:624,bombs:32,obstacles:253,nps:2.9,length:520,characteristic:"Standard",difficulty:"Normal",events:11028,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:215.172,paritySummary:{errors:1,warns:0,resets:0}},{njs:15,offset:0,notes:927,bombs:263,obstacles:259,nps:4.308,length:520,characteristic:"Standard",difficulty:"Hard",events:11028,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:215.172,paritySummary:{errors:3,warns:0,resets:7}},{njs:17,offset:0,notes:1072,bombs:47,obstacles:256,nps:4.982,length:520,characteristic:"Standard",difficulty:"Expert",events:11028,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:215.172,paritySummary:{errors:2,warns:0,resets:2}},{njs:19,offset:-.25,notes:1256,bombs:134,obstacles:257,nps:5.837,length:520,characteristic:"Standard",difficulty:"ExpertPlus",events:11097,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:215.172,paritySummary:{errors:2,warns:2,resets:4}},{njs:19,offset:0,notes:0,bombs:0,obstacles:0,nps:0,length:0,characteristic:"Lightshow",difficulty:"Easy",events:11097,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:0,paritySummary:{errors:0,warns:0,resets:0}}],downloadURL:"https://cdn.beatsaver.com/0dadd6ab18e3ca0011459f16366e41ecffa5029e.zip",coverURL:"https://cdn.beatsaver.com/0dadd6ab18e3ca0011459f16366e41ecffa5029e.jpg",previewURL:"https://cdn.beatsaver.com/0dadd6ab18e3ca0011459f16366e41ecffa5029e.mp3"}],createdAt:"2020-01-03T22:46:03.484Z",updatedAt:"2020-01-03T22:46:03.484Z",lastPublishedAt:"2020-01-03T22:46:03.484Z"},{id:"7b68",name:"First of the Year (Equinox) - Skrillex",description:"First of the Year (Equinox) - Skrillex\n\nThis is my first map of 2020, and a huge throwback to when I first started listening to Skrillex. As well as it being a collaboration between myself, Checkthepan, Haclyon12, and CyanSnow.\n\nThanks to Checkthepan for making the 360 & 90-degree levels, Halcyon12 for the awesome chroma lights and CyanSnow for getting the files release ready. \n\nalso was originally trying to be the first map uploaded for 2020 but beatsaver had a stroke and now it's like the 5th or something\n",uploader:{id:4284904,name:"xscaramouche",uniqueSet:!0,hash:"5cff0b7798cc5a672c8558ed",avatar:"https://cdn.beatsaver.com/avatar/227538798387527680.png",type:"DISCORD"},metadata:{bpm:145,duration:257,songName:"First of the Year",songSubName:"(Equinox)",songAuthorName:"Skrillex",levelAuthorName:"xScaramouche & Checkthepan & Halcyon12"},stats:{plays:0,downloads:18265,upvotes:4286,downvotes:108,score:.9374},uploaded:"2020-01-01T04:28:55.040Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"2feafef61cad57ea2d6608eb54c39f139abb48c1",key:"7b68",state:"Published",createdAt:"2020-01-01T04:28:55.040Z",sageScore:7,diffs:[{njs:12,offset:1,notes:387,bombs:0,obstacles:183,nps:1.538,length:608,characteristic:"Standard",difficulty:"Easy",events:27335,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:251.586,paritySummary:{errors:183,warns:0,resets:0}},{njs:12,offset:1,notes:476,bombs:0,obstacles:182,nps:1.892,length:607.998,characteristic:"Standard",difficulty:"Normal",events:27335,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:251.585,paritySummary:{errors:124,warns:0,resets:0}},{njs:14,offset:.5,notes:658,bombs:9,obstacles:192,nps:2.615,length:608,characteristic:"Standard",difficulty:"Hard",events:27335,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:251.586,paritySummary:{errors:0,warns:0,resets:0}},{njs:16,offset:0,notes:1017,bombs:9,obstacles:180,nps:4.042,length:608,characteristic:"Standard",difficulty:"Expert",events:27335,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:251.586,paritySummary:{errors:0,warns:0,resets:0}},{njs:18,offset:-.35,notes:1359,bombs:39,obstacles:186,nps:5.402,length:608,characteristic:"Standard",difficulty:"ExpertPlus",events:27335,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:251.586,paritySummary:{errors:1,warns:0,resets:0}},{njs:17,offset:0,notes:1554,bombs:232,obstacles:45,nps:6.177,length:608,characteristic:"90Degree",difficulty:"ExpertPlus",events:27854,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:251.586,paritySummary:{errors:21,warns:0,resets:15}},{njs:17,offset:0,notes:1555,bombs:232,obstacles:44,nps:6.181,length:608,characteristic:"360Degree",difficulty:"ExpertPlus",events:27904,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:251.586,paritySummary:{errors:20,warns:0,resets:15}},{njs:69,offset:0,notes:0,bombs:0,obstacles:0,nps:0,length:0,characteristic:"Lightshow",difficulty:"Easy",events:27335,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:0,paritySummary:{errors:0,warns:0,resets:0}}],downloadURL:"https://cdn.beatsaver.com/2feafef61cad57ea2d6608eb54c39f139abb48c1.zip",coverURL:"https://cdn.beatsaver.com/2feafef61cad57ea2d6608eb54c39f139abb48c1.jpg",previewURL:"https://cdn.beatsaver.com/2feafef61cad57ea2d6608eb54c39f139abb48c1.mp3"}],createdAt:"2020-01-01T04:28:55.040Z",updatedAt:"2020-01-01T04:28:55.040Z",lastPublishedAt:"2020-01-01T04:28:55.040Z"},{id:"480",name:"Earth, Wind & Fire - September",description:"Expert | Hard | Normal\r\n\r\nBPM - 126\r\nDuration - 2:21\r\n\r\nPreview: https://youtu.be/FOob1xit17Y",uploader:{id:45732,name:"calijor",uniqueSet:!1,hash:"5cff0b7298cc5a672c84ebb1",avatar:"https://www.gravatar.com/avatar/5cff0b7298cc5a672c84ebb1?d=retro",type:"SIMPLE"},metadata:{bpm:126,duration:142,songName:"September",songSubName:"",songAuthorName:"Earth, Wind & Fire",levelAuthorName:"calijor"},stats:{plays:0,downloads:18722,upvotes:10791,downvotes:385,score:.9374},uploaded:"2018-06-09T18:27:58Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"aa2f7bf0df25cd57dddac159fa7c159f732e0553",key:"480",state:"Published",createdAt:"2018-06-09T18:27:58Z",sageScore:4,diffs:[{njs:10,offset:0,notes:291,bombs:0,obstacles:8,nps:2.171,length:281.469,characteristic:"Standard",difficulty:"Normal",events:832,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:134.033,paritySummary:{errors:61,warns:39,resets:0}},{njs:10,offset:0,notes:367,bombs:0,obstacles:8,nps:2.738,length:281.469,characteristic:"Standard",difficulty:"Hard",events:832,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:134.033,paritySummary:{errors:67,warns:65,resets:0}},{njs:10,offset:0,notes:409,bombs:0,obstacles:8,nps:3.051,length:281.469,characteristic:"Standard",difficulty:"Expert",events:832,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:134.033,paritySummary:{errors:75,warns:73,resets:0}}],downloadURL:"https://cdn.beatsaver.com/aa2f7bf0df25cd57dddac159fa7c159f732e0553.zip",coverURL:"https://cdn.beatsaver.com/aa2f7bf0df25cd57dddac159fa7c159f732e0553.jpg",previewURL:"https://cdn.beatsaver.com/aa2f7bf0df25cd57dddac159fa7c159f732e0553.mp3"}],createdAt:"2018-06-09T18:27:58Z",updatedAt:"2018-06-09T18:27:58Z",lastPublishedAt:"2018-06-09T18:27:58Z"},{id:"1181f",name:"Royal & the Serpent - Overwhelmed",description:"Feeling that finals crunch? Worried about the pandemic? General anxiety with the news, and just feeling overwhelmed? Don't forget to take a step back and take a breath. Maybe by dancing along to this song that perfectly captures all of those feelings! Complete with overwhelming Chroma 2.0 lights! And now the extra details:\n\nBPM: 87\nNPS: Ez - 1.71; N - 2.09; H - 2.75; Ex - 3.19; Ex+ - 4.11\nNotes: Ez - 277; N - 338; H - 444; Ex - 516; Ex+ - 664\nBombs: Ez - 0; N - 0; H - 4; Ex - 4; Ex+ - 4\nWalls: Ez - 136; N - 134; H - 144; Ex - 109; Ex+ - 109\n\nSpecial thanks to qwasyx, Smay, and Cyrix for playtesting!",uploader:{id:4285188,name:"fruhead",uniqueSet:!0,hash:"5cff0b7598cc5a672c852683",avatar:"https://cdn.beatsaver.com/avatar/174000100413145090.png",type:"DISCORD"},metadata:{bpm:87,duration:161,songName:"Overwhelmed",songSubName:"",songAuthorName:"Royal & the Serpent",levelAuthorName:"fruhead"},stats:{plays:0,downloads:8427,upvotes:1704,downvotes:19,score:.9371},uploaded:"2020-11-29T23:09:47.309Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"b748894960a346f1568b9f4876643f1358cfa897",key:"1181f",state:"Published",createdAt:"2020-11-29T23:09:47.309Z",sageScore:6,diffs:[{njs:10,offset:0,notes:277,bombs:0,obstacles:136,nps:1.793,length:224,characteristic:"Standard",difficulty:"Easy",events:7200,chroma:!0,me:!1,ne:!1,cinema:!1,seconds:154.483,paritySummary:{errors:43,warns:9,resets:0}},{njs:12,offset:-.3,notes:338,bombs:0,obstacles:134,nps:2.188,length:224,characteristic:"Standard",difficulty:"Normal",events:7200,chroma:!0,me:!1,ne:!1,cinema:!1,seconds:154.483,paritySummary:{errors:22,warns:11,resets:0}},{njs:14,offset:.4,notes:444,bombs:4,obstacles:144,nps:2.874,length:224,characteristic:"Standard",difficulty:"Hard",events:7200,chroma:!0,me:!1,ne:!1,cinema:!1,seconds:154.483,paritySummary:{errors:14,warns:4,resets:4}},{njs:16,offset:.25,notes:516,bombs:4,obstacles:109,nps:3.34,length:224,characteristic:"Standard",difficulty:"Expert",events:7200,chroma:!0,me:!1,ne:!1,cinema:!1,seconds:154.483,paritySummary:{errors:0,warns:0,resets:2}},{njs:18,offset:.1,notes:664,bombs:4,obstacles:109,nps:4.298,length:224,characteristic:"Standard",difficulty:"ExpertPlus",events:7200,chroma:!0,me:!1,ne:!1,cinema:!1,seconds:154.483,paritySummary:{errors:0,warns:0,resets:2}},{njs:16,offset:0,notes:0,bombs:0,obstacles:0,nps:0,length:0,characteristic:"Lightshow",difficulty:"Expert",events:7200,chroma:!0,me:!1,ne:!1,cinema:!1,seconds:0,paritySummary:{errors:0,warns:0,resets:0}}],downloadURL:"https://cdn.beatsaver.com/b748894960a346f1568b9f4876643f1358cfa897.zip",coverURL:"https://cdn.beatsaver.com/b748894960a346f1568b9f4876643f1358cfa897.jpg",previewURL:"https://cdn.beatsaver.com/b748894960a346f1568b9f4876643f1358cfa897.mp3"}],createdAt:"2020-11-29T23:09:47.309Z",updatedAt:"2020-11-29T23:09:47.309Z",lastPublishedAt:"2020-11-29T23:09:47.309Z"},{id:"3b31",name:"Wolfgang Lohr ft. Maskarade - Hit the Road Jack (Electro Swing)",description:"I realise this is the third time that this song has been made over the last month, so sorry for that. But If your not a fan of my version then please check out the other maps linked below.\r\nThis song happened because someone requested I do an electroswing map. This was not the one they asked for, but his request inspired me to do one of the same genre anyway. I'm happy with the way that expert turned out, but the other difficulties are perhaps a bit rushed on this one. I've left easy out again as the play rates are so low. But If this is a problem for anyone, please give me a message and I'll see about adding one in. Other than that, happy dancing!\r\n\r\nVideo Preview: https://www.youtube.com/watch?v=sg_hCGmoPNg\r\nTime spent mapping: 7:58\r\n\r\nAlternative versions:\r\nFrom SilverScythePC: https://beatsaver.com/browse/detail/12538-13416\r\nFrom Salvay: https://beatsaver.com/browse/detail/12752-13664",uploader:{id:4785,name:"stumi",uniqueSet:!1,hash:"5cff0b7398cc5a672c84f720",avatar:"https://www.gravatar.com/avatar/5cff0b7398cc5a672c84f720?d=retro",type:"SIMPLE"},metadata:{bpm:124,duration:159,songName:"Hit the Road Jack (Electro Swing)",songSubName:"Wolfgang Lohr and Maskerade",songAuthorName:"Stumi",levelAuthorName:"stumi"},stats:{plays:0,downloads:7058,upvotes:3315,downvotes:73,score:.937},uploaded:"2019-03-03T13:06:00Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"46afff5698b59795c5e88f0b610b8321fb9b1791",key:"3b31",state:"Published",createdAt:"2019-03-03T13:06:00Z",sageScore:6,diffs:[{njs:10,offset:0,notes:261,bombs:4,obstacles:38,nps:1.702,length:317,characteristic:"Standard",difficulty:"Normal",events:1419,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:153.387,paritySummary:{errors:21,warns:18,resets:2}},{njs:12,offset:0,notes:473,bombs:7,obstacles:33,nps:3.084,length:317,characteristic:"Standard",difficulty:"Hard",events:1419,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:153.387,paritySummary:{errors:45,warns:22,resets:1}},{njs:16,offset:0,notes:656,bombs:7,obstacles:32,nps:4.267,length:317.75,characteristic:"Standard",difficulty:"Expert",events:1419,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:153.75,paritySummary:{errors:42,warns:22,resets:1}}],downloadURL:"https://cdn.beatsaver.com/46afff5698b59795c5e88f0b610b8321fb9b1791.zip",coverURL:"https://cdn.beatsaver.com/46afff5698b59795c5e88f0b610b8321fb9b1791.jpg",previewURL:"https://cdn.beatsaver.com/46afff5698b59795c5e88f0b610b8321fb9b1791.mp3"}],createdAt:"2019-03-03T13:06:00Z",updatedAt:"2019-03-03T13:06:00Z",lastPublishedAt:"2019-03-03T13:06:00Z"},{id:"13e9",name:"dark cat - BUBBLE TEA",description:"--------------------------------\r\ndark cat - BUBBLE TEA (feat. juu & cinders)\r\nTime: 4:01\r\nExpert: 1087 Notes\r\nHard: 969 Notes\r\n--------------------------------\r\nHi guys, I'm a bit busy with school right now\r\nso my upload rate is going to slow down for a while..\r\n ^-^",uploader:{id:4288141,name:"roeek",uniqueSet:!0,hash:"5cff0b7398cc5a672c84f787",avatar:"https://cdn.beatsaver.com/avatar/321652344196694016.png",type:"DISCORD"},metadata:{bpm:160,duration:241,songName:"BUBBLE TEA",songSubName:"dark cat",songAuthorName:"Mapped by roeek",levelAuthorName:"roeek"},stats:{plays:0,downloads:12107,upvotes:8979,downvotes:310,score:.9368},uploaded:"2018-09-06T18:59:42Z",automapper:!1,ranked:!0,qualified:!1,versions:[{hash:"f83edec86d3faf683711ecb0a9df6bd65d2d0ce0",key:"13e9",state:"Published",createdAt:"2018-09-06T18:59:42Z",sageScore:6,diffs:[{njs:12,offset:0,notes:969,bombs:0,obstacles:12,nps:4.303,length:600.5,characteristic:"Standard",difficulty:"Hard",events:1043,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:225.188,paritySummary:{errors:26,warns:32,resets:0}},{njs:13,offset:0,notes:1087,bombs:0,obstacles:12,nps:4.827,length:600.5,characteristic:"Standard",difficulty:"Expert",events:1047,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:225.188,paritySummary:{errors:35,warns:36,resets:0},stars:3.65}],downloadURL:"https://cdn.beatsaver.com/f83edec86d3faf683711ecb0a9df6bd65d2d0ce0.zip",coverURL:"https://cdn.beatsaver.com/f83edec86d3faf683711ecb0a9df6bd65d2d0ce0.jpg",previewURL:"https://cdn.beatsaver.com/f83edec86d3faf683711ecb0a9df6bd65d2d0ce0.mp3"}],createdAt:"2018-09-06T18:59:42Z",updatedAt:"2018-09-06T18:59:42Z",lastPublishedAt:"2018-09-06T18:59:42Z"},{id:"46be",name:"Kill This Love - BLACKPINK",description:"Thanks to n3tman, snaccy, Helen Carnate, PandaCat, and SimplyMarvelous for their help.\n\nAfter a thousand years, BLACKPINK has finally come out with new songs. Hopefully this map will absolve me from what I did with my last BLACKPINK map (though I still snuck in some choreography to this map when it fit).\n\nExpert+ preview: https://youtu.be/7_epIbqHD3U (footage is of pre-release version)\n\nPreview video uses custom blackpink light sabers, which you can find in the kpop beat saber discord here\nhttps://discord.gg/c9uHGYP\nFollow me on Twitter u won't\nhttps://twitter.com/aggrogahu",uploader:{id:4284613,name:"aggrogahu",uniqueSet:!0,hash:"5cff0b7398cc5a672c84fdad",avatar:"https://cdn.beatsaver.com/avatar/158363872649150464.png",type:"DISCORD"},metadata:{bpm:132,duration:188,songName:"Kill This Love",songSubName:"BLACKPINK",songAuthorName:"aggrogahu",levelAuthorName:"aggrogahu"},stats:{plays:0,downloads:15888,upvotes:4507,downvotes:120,score:.9367},uploaded:"2019-04-18T03:00:19Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"8255fef3ce60e6a9ca404491b6d6fdfec158581e",key:"46be",state:"Published",createdAt:"2019-04-18T03:00:19Z",sageScore:3,diffs:[{njs:9,offset:0,notes:278,bombs:13,obstacles:15,nps:1.529,length:400,characteristic:"Standard",difficulty:"Normal",events:1344,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:181.818,paritySummary:{errors:57,warns:36,resets:6}},{njs:10,offset:0,notes:448,bombs:11,obstacles:18,nps:2.464,length:400,characteristic:"Standard",difficulty:"Hard",events:1344,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:181.818,paritySummary:{errors:47,warns:28,resets:6}},{njs:12,offset:0,notes:665,bombs:26,obstacles:19,nps:3.658,length:400,characteristic:"Standard",difficulty:"Expert",events:1344,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:181.818,paritySummary:{errors:39,warns:37,resets:3}},{njs:14,offset:0,notes:779,bombs:36,obstacles:19,nps:4.285,length:400,characteristic:"Standard",difficulty:"ExpertPlus",events:1344,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:181.818,paritySummary:{errors:55,warns:56,resets:7}}],downloadURL:"https://cdn.beatsaver.com/8255fef3ce60e6a9ca404491b6d6fdfec158581e.zip",coverURL:"https://cdn.beatsaver.com/8255fef3ce60e6a9ca404491b6d6fdfec158581e.jpg",previewURL:"https://cdn.beatsaver.com/8255fef3ce60e6a9ca404491b6d6fdfec158581e.mp3"}],createdAt:"2019-04-18T03:00:19Z",updatedAt:"2019-04-18T03:00:19Z",lastPublishedAt:"2019-04-18T03:00:19Z"},{id:"ce0",name:"South Park - Kyle's Mom's a Bitch",description:"Preview:\r\nhttps://www.youtube.com/watch?v=OjHoHbbZYDE\r\n\r\nKyle's mom's a bitch, she's a big fat bitch\r\nShe's the biggest bitch in the whole wide world",uploader:{id:4286278,name:"ruckus",uniqueSet:!0,hash:"5cff0b7398cc5a672c84f1d8",avatar:"https://cdn.beatsaver.com/avatar/239082462083284992.png",type:"DISCORD"},metadata:{bpm:156,duration:95,songName:"Kyle's Mom's a Bitch",songSubName:"South Park",songAuthorName:"Ruckus",levelAuthorName:"ruckus"},stats:{plays:0,downloads:6595,upvotes:3276,downvotes:73,score:.9367},uploaded:"2018-07-30T23:36:18Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"7fda5a2459b48226cc7dbaedf9c31f5fd7aff488",key:"ce0",state:"Published",createdAt:"2018-07-30T23:36:18Z",sageScore:4,diffs:[{njs:12,offset:0,notes:474,bombs:0,obstacles:0,nps:5.911,length:208.5,characteristic:"Standard",difficulty:"ExpertPlus",events:655,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:80.192,paritySummary:{errors:42,warns:23,resets:0}}],downloadURL:"https://cdn.beatsaver.com/7fda5a2459b48226cc7dbaedf9c31f5fd7aff488.zip",coverURL:"https://cdn.beatsaver.com/7fda5a2459b48226cc7dbaedf9c31f5fd7aff488.jpg",previewURL:"https://cdn.beatsaver.com/7fda5a2459b48226cc7dbaedf9c31f5fd7aff488.mp3"}],createdAt:"2018-07-30T23:36:18Z",updatedAt:"2018-07-30T23:36:18Z",lastPublishedAt:"2018-07-30T23:36:18Z"},{id:"a909",name:"[TheFatRat Pack] Time Lapse - TheFatRat",description:'Here it is! The unofficial "TheFatRat" Music Pack in Beat Saber - with all beatmaps being singlehandedly made by me!\n\nAll songs included in TheFatRat Music Pack:\nMonody (ft. Laura Brehm) \nUnity \nWindfall \nXenogenesis \nTime Lapse \n\nGet the full song pack here: https://bsaber.com/thefatrat-music-pack/\n(Or you should just be able to find all the other ones on my beatsaver profile as well. Heres a link to my profile: https://beatsaver.com/uploader/5d47d586c5301900060b2f6c)\n\nSongcore mod is recommended (for custom colours)\nPlays best on Origins Environment\n\nTime Lapse Stats:\nExpert+ - 782 Notes | 4.29 NPS\nExpert - 615 Notes | 3.37 NPS\n(One Saber) Expert - 496 Notes | 2.72 NPS\nHard - 493 Notes | 2.70 NPS\nNormal - 305 Notes | 1.67 NPS\nEasy - 180 Notes | 0.99 NPS\n\nRoughly 7-8 Hours of work\nGameplay: https://youtu.be/aYwKN3LnEZA\n\nObviously - A huge thanks to TheFatRat himself, for not only producing the songs in the first place (and allowing free access to use them for big and small content creators), but also being a huge inspiration to lots of artists out there and for making music that everyone can jam out to! We love you, TheFatRat!',uploader:{id:4284197,name:"timeweaver",uniqueSet:!0,hash:"5d47d586c5301900060b2f6c",avatar:"https://cdn.beatsaver.com/avatar/607399708121366529.png",type:"DISCORD"},metadata:{bpm:127,duration:182,songName:"Time Lapse",songSubName:"",songAuthorName:"TheFatRat",levelAuthorName:"Timeweaver"},stats:{plays:0,downloads:8459,upvotes:2334,downvotes:40,score:.9366},uploaded:"2020-05-22T13:28:32.918Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"a03cb0a107993be5cded1e91dc31e8a7b048f02a",key:"a909",state:"Published",createdAt:"2020-05-22T13:28:32.918Z",sageScore:6,diffs:[{njs:9,offset:0,notes:180,bombs:0,obstacles:33,nps:1.035,length:368,characteristic:"Standard",difficulty:"Easy",events:3139,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:173.858,paritySummary:{errors:40,warns:1,resets:0}},{njs:11,offset:1,notes:305,bombs:0,obstacles:41,nps:1.735,length:372,characteristic:"Standard",difficulty:"Normal",events:3139,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:175.748,paritySummary:{errors:24,warns:24,resets:0}},{njs:12,offset:1,notes:493,bombs:0,obstacles:36,nps:2.783,length:375,characteristic:"Standard",difficulty:"Hard",events:3139,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:177.165,paritySummary:{errors:3,warns:0,resets:0}},{njs:15,offset:.1,notes:614,bombs:1,obstacles:67,nps:3.429,length:379,characteristic:"Standard",difficulty:"Expert",events:3139,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:179.055,paritySummary:{errors:2,warns:0,resets:0}},{njs:19,offset:-.4,notes:782,bombs:0,obstacles:84,nps:4.402,length:376,characteristic:"Standard",difficulty:"ExpertPlus",events:3139,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:177.638,paritySummary:{errors:1,warns:0,resets:0}},{njs:16,offset:0,notes:496,bombs:0,obstacles:119,nps:2.792,length:376,characteristic:"OneSaber",difficulty:"Expert",events:3139,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:177.638,paritySummary:{errors:0,warns:0,resets:0}}],downloadURL:"https://cdn.beatsaver.com/a03cb0a107993be5cded1e91dc31e8a7b048f02a.zip",coverURL:"https://cdn.beatsaver.com/a03cb0a107993be5cded1e91dc31e8a7b048f02a.jpg",previewURL:"https://cdn.beatsaver.com/a03cb0a107993be5cded1e91dc31e8a7b048f02a.mp3"}],createdAt:"2020-05-22T13:28:32.918Z",updatedAt:"2020-05-22T13:28:32.918Z",lastPublishedAt:"2020-05-22T13:28:32.918Z"},{id:"8d49",name:"Dreamcatcher - Scream",description:"Expert+ by noxn and simplymarvellous\nExpert and Lighting by aggrogahu\n\nMap preview by aggrogahu: https://www.youtube.com/watch?v=Yv908yUt9O0\n\nExtra thanks to simplymarvellous for fixing all of my sync issues and creating some pog patterns while he was at it! And special thanks to Bloodcloak for some great changes and ideas!\n\nThis was my first collab map. I've really enjoyed playing it and working with people to make a great finished product!\n\nJoin us in the KPOP Beat Saber discord here: https://discord.gg/c9uHGYP\n\nAnd finally, my survey link <3: https://forms.gle/8nJVPiriTWPx9irT6",uploader:{id:4289789,name:"noxn",uniqueSet:!0,hash:"5daab87cc216d40006bef803",avatar:"https://cdn.beatsaver.com/avatar/132315398287785985.png",type:"DISCORD"},metadata:{bpm:138,duration:206,songName:"Scream",songSubName:"",songAuthorName:"Dreamcatcher",levelAuthorName:"noxn; simplymarvellous; aggrogahu"},stats:{plays:0,downloads:9907,upvotes:1737,downvotes:21,score:.9366},uploaded:"2020-03-04T23:07:51.556Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"94e31eda51f8afd9e59c9895972b80775556cf6a",key:"8d49",state:"Published",createdAt:"2020-03-04T23:07:51.556Z",sageScore:5,diffs:[{njs:16,offset:.2,notes:717,bombs:48,obstacles:36,nps:3.616,length:456,characteristic:"Standard",difficulty:"Expert",events:2568,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:198.261,paritySummary:{errors:19,warns:24,resets:9}},{njs:18,offset:-.5,notes:1068,bombs:52,obstacles:47,nps:5.387,length:456,characteristic:"Standard",difficulty:"ExpertPlus",events:2568,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:198.261,paritySummary:{errors:11,warns:15,resets:2}}],downloadURL:"https://cdn.beatsaver.com/94e31eda51f8afd9e59c9895972b80775556cf6a.zip",coverURL:"https://cdn.beatsaver.com/94e31eda51f8afd9e59c9895972b80775556cf6a.jpg",previewURL:"https://cdn.beatsaver.com/94e31eda51f8afd9e59c9895972b80775556cf6a.mp3"}],createdAt:"2020-03-04T23:07:51.556Z",updatedAt:"2020-03-04T23:07:51.556Z",lastPublishedAt:"2020-03-04T23:07:51.556Z"},{id:"129bf",name:"LeaF - Mope Mope(Noodle Extensions, Chroma)",description:"Preview:\nhttps://www.youtube.com/watch?v=p9U5Y2iFoRQ&t=11s\nWarnings:\n--Fast Flashing Images\n--Disturbing Contents\n--This Level is NOT for Children--\nRequirements:\nNoodle Extensions, Chroma\nLeft-Handed and Custom Notes will cause some bugs\nSome of the bombs are fake:)\nThank you Moe ChiaKi for testing the map OwO",uploader:{id:4289114,name:"waika",uniqueSet:!0,hash:"5cff0b7698cc5a672c85464f",avatar:"https://cdn.beatsaver.com/avatar/530663167244894220.png",type:"DISCORD"},metadata:{bpm:200,duration:111,songName:"Mope Mope",songSubName:"",songAuthorName:"LeaF",levelAuthorName:"waika"},stats:{plays:0,downloads:9472,upvotes:3722,downvotes:90,score:.9366},uploaded:"2021-01-12T07:11:32.915Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"6c9d463c1cf556246cf60bfaef75fc4f8ea3053f",key:"129bf",state:"Published",createdAt:"2021-01-12T07:11:32.915Z",sageScore:5,diffs:[{njs:16,offset:2,notes:968,bombs:4092,obstacles:303,nps:9.089,length:355,characteristic:"Standard",difficulty:"ExpertPlus",events:5812,chroma:!0,me:!1,ne:!0,cinema:!1,seconds:106.5,paritySummary:{errors:0,warns:0,resets:0}}],downloadURL:"https://cdn.beatsaver.com/6c9d463c1cf556246cf60bfaef75fc4f8ea3053f.zip",coverURL:"https://cdn.beatsaver.com/6c9d463c1cf556246cf60bfaef75fc4f8ea3053f.jpg",previewURL:"https://cdn.beatsaver.com/6c9d463c1cf556246cf60bfaef75fc4f8ea3053f.mp3"}],createdAt:"2021-01-12T07:11:32.915Z",updatedAt:"2021-01-12T07:11:32.915Z",lastPublishedAt:"2021-01-12T07:11:32.915Z"},{id:"12d9",name:"Snail's House - Pixel Galaxy",description:"Hard/Expert | BPM: 150 | Length: 3:46 | Notes: 493/787\r\n\r\nIt's a really nice song. Not much else to say\r\nA lot of manual lighting too :D\r\n\r\n10th Map.\r\n\r\nPreview:\r\nhttps://www.youtube.com/watch?v=5xvJlMob-ok\r\nSong:\r\nhttps://www.youtube.com/watch?v=3nlSDxvt6JU",uploader:{id:4285825,name:"fefeland",uniqueSet:!0,hash:"5cff0b7398cc5a672c84f3bb",avatar:"https://cdn.beatsaver.com/avatar/119360573191225344.png",type:"DISCORD"},metadata:{bpm:150,duration:227,songName:"Pixel Galaxy",songSubName:"Snail's House",songAuthorName:"FEFELAND",levelAuthorName:"fefeland"},stats:{plays:0,downloads:6468,upvotes:2912,downvotes:60,score:.9366},uploaded:"2018-08-31T22:56:17Z",automapper:!1,ranked:!0,qualified:!1,versions:[{hash:"848b35a0028465bc4d76fd3cafb5acc4b2c70d5a",key:"12d9",state:"Published",createdAt:"2018-08-31T22:56:17Z",sageScore:6,diffs:[{njs:9,offset:0,notes:493,bombs:0,obstacles:0,nps:2.268,length:543.5,characteristic:"Standard",difficulty:"Hard",events:1741,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:217.4,paritySummary:{errors:47,warns:20,resets:0},stars:1.49},{njs:12,offset:0,notes:787,bombs:0,obstacles:0,nps:3.62,length:543.5,characteristic:"Standard",difficulty:"Expert",events:1741,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:217.4,paritySummary:{errors:41,warns:28,resets:0}}],downloadURL:"https://cdn.beatsaver.com/848b35a0028465bc4d76fd3cafb5acc4b2c70d5a.zip",coverURL:"https://cdn.beatsaver.com/848b35a0028465bc4d76fd3cafb5acc4b2c70d5a.jpg",previewURL:"https://cdn.beatsaver.com/848b35a0028465bc4d76fd3cafb5acc4b2c70d5a.mp3"}],createdAt:"2018-08-31T22:56:17Z",updatedAt:"2018-08-31T22:56:17Z",lastPublishedAt:"2018-08-31T22:56:17Z"},{id:"124",name:"Rasputin (Funk Overload)",description:"Hard\r\nBpm 147\r\nspeed up version of rasputin Original",uploader:{id:48512,name:"jobas",uniqueSet:!1,hash:"5cff0b7298cc5a672c84e9a2",avatar:"https://www.gravatar.com/avatar/5cff0b7298cc5a672c84e9a2?d=retro",type:"SIMPLE"},metadata:{bpm:149,duration:239,songName:"Rasputin (Funk Overload)",songSubName:"",songAuthorName:"Jobas",levelAuthorName:"jobas"},stats:{plays:0,downloads:20546,upvotes:20981,downvotes:890,score:.9366},uploaded:"2018-05-19T16:36:34Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"9a1d001995cc0a2014352aa7148cbcbf2e489d89",key:"124",state:"Published",createdAt:"2018-05-19T16:36:34Z",sageScore:5,diffs:[{njs:10,offset:0,notes:768,bombs:0,obstacles:154,nps:3.329,length:586.013,characteristic:"Standard",difficulty:"Hard",events:1109,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:235.978,paritySummary:{errors:58,warns:141,resets:0}}],downloadURL:"https://cdn.beatsaver.com/9a1d001995cc0a2014352aa7148cbcbf2e489d89.zip",coverURL:"https://cdn.beatsaver.com/9a1d001995cc0a2014352aa7148cbcbf2e489d89.jpg",previewURL:"https://cdn.beatsaver.com/9a1d001995cc0a2014352aa7148cbcbf2e489d89.mp3"}],createdAt:"2018-05-19T16:36:34Z",updatedAt:"2018-05-19T16:36:34Z",lastPublishedAt:"2018-05-19T16:36:34Z"},{id:"12ad1",name:"Minnesota - Colors (ft. Jackie Rain) | Chroma RGB",description:"Chroma 2.0 HIGHLY RECOMMENDED!\n\nHad this map sitting in my project folder for some months and finally got to finish it! \nIt features a Chroma RGB lightshow AND Rainbow notes, for the full COLOR experience :)\n\nPreview: https://www.youtube.com/watch?v=8Omzd7IdJt0",uploader:{id:4284201,name:"nitronikexe",uniqueSet:!0,hash:"5cff0b7798cc5a672c855d84",avatar:"https://cdn.beatsaver.com/avatar/428230049704181760.png",type:"DISCORD"},metadata:{bpm:140,duration:202,songName:"Colors",songSubName:"(ft. Jackie Rain)",songAuthorName:"Minnesota",levelAuthorName:"nitronik.exe"},stats:{plays:0,downloads:3903,upvotes:1230,downvotes:7,score:.9364},uploaded:"2021-01-13T15:55:44.846Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"03fcb98091e50600d9d777251d765c53384c2735",key:"12ad1",state:"Published",createdAt:"2021-01-13T15:55:44.846Z",sageScore:4,diffs:[{njs:13,offset:.5,notes:395,bombs:0,obstacles:221,nps:2.057,length:448,characteristic:"Standard",difficulty:"Hard",events:16569,chroma:!0,me:!1,ne:!1,cinema:!1,seconds:192,paritySummary:{errors:0,warns:0,resets:0}},{njs:16,offset:0,notes:601,bombs:0,obstacles:113,nps:3.13,length:448,characteristic:"Standard",difficulty:"Expert",events:16569,chroma:!0,me:!1,ne:!1,cinema:!1,seconds:192,paritySummary:{errors:0,warns:0,resets:0}},{njs:19,offset:-.5,notes:911,bombs:0,obstacles:120,nps:4.745,length:448,characteristic:"Standard",difficulty:"ExpertPlus",events:16569,chroma:!0,me:!1,ne:!1,cinema:!1,seconds:192,paritySummary:{errors:0,warns:0,resets:0}}],downloadURL:"https://cdn.beatsaver.com/03fcb98091e50600d9d777251d765c53384c2735.zip",coverURL:"https://cdn.beatsaver.com/03fcb98091e50600d9d777251d765c53384c2735.jpg",previewURL:"https://cdn.beatsaver.com/03fcb98091e50600d9d777251d765c53384c2735.mp3"}],createdAt:"2021-01-13T15:55:44.846Z",updatedAt:"2021-01-13T15:55:44.846Z",lastPublishedAt:"2021-01-13T15:55:44.846Z"},{id:"6094",name:"Legend - The Score",description:"https://www.youtube.com/watch?v=M5oxJRVwwCY",uploader:{id:4285982,name:"downycat",uniqueSet:!0,hash:"5cff0b7398cc5a672c84ede5",avatar:"https://cdn.beatsaver.com/avatar/173538829888782336.png",type:"DISCORD"},metadata:{bpm:82,duration:190,songName:"Legend",songSubName:"",songAuthorName:"The Score",levelAuthorName:"DownyCat"},stats:{plays:0,downloads:5059,upvotes:1752,downvotes:22,score:.9363},uploaded:"2019-09-01T13:23:40.596Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"f1c24c4b08a1126017ba8a96da4828d2d949f46b",key:"6094",state:"Published",createdAt:"2019-09-01T13:23:40.596Z",sageScore:6,diffs:[{njs:12,offset:0,notes:357,bombs:0,obstacles:37,nps:2.006,length:243.25,characteristic:"Standard",difficulty:"Normal",events:3490,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:177.988,paritySummary:{errors:5,warns:0,resets:0}},{njs:12,offset:0,notes:537,bombs:0,obstacles:47,nps:3.017,length:243.25,characteristic:"Standard",difficulty:"Hard",events:3490,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:177.988,paritySummary:{errors:3,warns:0,resets:0}},{njs:16,offset:0,notes:728,bombs:0,obstacles:42,nps:4.09,length:243.25,characteristic:"Standard",difficulty:"Expert",events:3490,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:177.988,paritySummary:{errors:5,warns:3,resets:0}}],downloadURL:"https://cdn.beatsaver.com/f1c24c4b08a1126017ba8a96da4828d2d949f46b.zip",coverURL:"https://cdn.beatsaver.com/f1c24c4b08a1126017ba8a96da4828d2d949f46b.jpg",previewURL:"https://cdn.beatsaver.com/f1c24c4b08a1126017ba8a96da4828d2d949f46b.mp3"}],createdAt:"2019-09-01T13:23:40.596Z",updatedAt:"2019-09-01T13:23:40.596Z",lastPublishedAt:"2019-09-01T13:23:40.596Z"},{id:"d4a5",name:"[FUTURE FUNK PACK] Shiawase No Monosashi (VANTAGE // Short Ver.)",description:'FUTURE FUNK MAP PACK\n2 songs uploaded everyday through August 10th - 14th!\n\n"Shiawase No Monosashi" is performed by Mariya Takeuchi. This version of the song is a short edit I made from VANTAGE //\'s edit. The original length of the song is 5 minutes long\n\nPlease look forward to the upcoming maps!\n\nDM any feedback on Discord\nETAN#8341',uploader:{id:4235140,name:"etan",uniqueSet:!0,hash:"5cff0b7798cc5a672c855775",avatar:"https://cdn.beatsaver.com/avatar/136373107559497728.png",type:"DISCORD"},metadata:{bpm:128,duration:171,songName:"Shiawase No Monosashi",songSubName:"(VANTAGE // Short Ver.)",songAuthorName:"Mariya Takeuchi",levelAuthorName:"ETAN"},stats:{plays:0,downloads:6944,upvotes:1542,downvotes:16,score:.9362},uploaded:"2020-08-12T18:17:44.285Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"d7cb32f23041dec272de3da0ac141dd8f91478ca",key:"d4a5",state:"Published",createdAt:"2020-08-12T18:17:44.285Z",sageScore:7,diffs:[{njs:10,offset:1,notes:168,bombs:16,obstacles:1,nps:1.029,length:348.25,characteristic:"Standard",difficulty:"Easy",events:7775,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:163.242,paritySummary:{errors:0,warns:0,resets:0}},{njs:11,offset:1,notes:255,bombs:16,obstacles:1,nps:1.562,length:348.25,characteristic:"Standard",difficulty:"Normal",events:7775,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:163.242,paritySummary:{errors:1,warns:1,resets:0}},{njs:12,offset:1,notes:358,bombs:16,obstacles:1,nps:2.193,length:348.25,characteristic:"Standard",difficulty:"Hard",events:7775,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:163.242,paritySummary:{errors:0,warns:0,resets:0}},{njs:15,offset:0,notes:557,bombs:16,obstacles:1,nps:3.335,length:356.25,characteristic:"Standard",difficulty:"Expert",events:7775,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:166.992,paritySummary:{errors:0,warns:0,resets:0}},{njs:19,offset:-.5,notes:778,bombs:16,obstacles:1,nps:4.659,length:356.25,characteristic:"Standard",difficulty:"ExpertPlus",events:7775,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:166.992,paritySummary:{errors:0,warns:0,resets:0}}],downloadURL:"https://cdn.beatsaver.com/d7cb32f23041dec272de3da0ac141dd8f91478ca.zip",coverURL:"https://cdn.beatsaver.com/d7cb32f23041dec272de3da0ac141dd8f91478ca.jpg",previewURL:"https://cdn.beatsaver.com/d7cb32f23041dec272de3da0ac141dd8f91478ca.mp3"}],createdAt:"2020-08-12T18:17:44.285Z",updatedAt:"2020-08-12T18:17:44.285Z",lastPublishedAt:"2020-08-12T18:17:44.285Z"},{id:"75a8",name:"Silhouette [Naruto Shippuden 16th Opening] - KANA-BOON",description:"This map was converted from one of my old maps.\n\nFeel free to DM me on discord @Joetastic#2501",uploader:{id:58338,name:"Joetastic",uniqueSet:!0,hash:"5cff0b7498cc5a672c85050e",avatar:"https://cdn.beatsaver.com/avatar/227767566402191360.png",type:"DISCORD"},metadata:{bpm:183,duration:127,songName:"Silhouette (TV Size)",songSubName:"",songAuthorName:"KANA-BOON",levelAuthorName:"Joetastic"},stats:{plays:0,downloads:10318,upvotes:2707,downvotes:54,score:.9362},uploaded:"2019-12-11T07:31:02.566Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"ba8d44529d21da1128bc70034ee608b6e8a19a63",key:"75a8",state:"Published",createdAt:"2019-12-11T07:31:02.566Z",sageScore:4,diffs:[{njs:12,offset:0,notes:412,bombs:0,obstacles:0,nps:3.383,length:371.5,characteristic:"Standard",difficulty:"Hard",events:2826,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:121.803,paritySummary:{errors:20,warns:20,resets:0}},{njs:14,offset:0,notes:520,bombs:0,obstacles:0,nps:4.269,length:371.5,characteristic:"Standard",difficulty:"Expert",events:2826,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:121.803,paritySummary:{errors:42,warns:24,resets:0}},{njs:16,offset:0,notes:710,bombs:0,obstacles:0,nps:5.829,length:371.5,characteristic:"Standard",difficulty:"ExpertPlus",events:3013,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:121.803,paritySummary:{errors:51,warns:65,resets:0}}],downloadURL:"https://cdn.beatsaver.com/ba8d44529d21da1128bc70034ee608b6e8a19a63.zip",coverURL:"https://cdn.beatsaver.com/ba8d44529d21da1128bc70034ee608b6e8a19a63.jpg",previewURL:"https://cdn.beatsaver.com/ba8d44529d21da1128bc70034ee608b6e8a19a63.mp3"}],createdAt:"2019-12-11T07:31:02.566Z",updatedAt:"2019-12-11T07:31:02.566Z",lastPublishedAt:"2019-12-11T07:31:02.566Z"},{id:"5e44",name:"Wolf In Sheep's Clothing - Set It Off",description:"“Wolf In Sheep’s Clothing” is a song by American pop punk band Set It Off. The song appears on their album Duality.",uploader:{id:58338,name:"Joetastic",uniqueSet:!0,hash:"5cff0b7498cc5a672c85050e",avatar:"https://cdn.beatsaver.com/avatar/227767566402191360.png",type:"DISCORD"},metadata:{bpm:165,duration:189,songName:"Wolf In Sheep's Clothing",songSubName:"",songAuthorName:"Set It Off",levelAuthorName:"Joetastic"},stats:{plays:0,downloads:3557,upvotes:1766,downvotes:23,score:.936},uploaded:"2019-08-21T14:32:59.705Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"71498322889259738dfbd9fdae23fc94bc382793",key:"5e44",state:"Published",createdAt:"2019-08-21T14:32:59.705Z",sageScore:6,diffs:[{njs:15,offset:0,notes:710,bombs:12,obstacles:2,nps:3.844,length:508,characteristic:"Standard",difficulty:"Expert",events:2219,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:184.727,paritySummary:{errors:45,warns:50,resets:0}}],downloadURL:"https://cdn.beatsaver.com/71498322889259738dfbd9fdae23fc94bc382793.zip",coverURL:"https://cdn.beatsaver.com/71498322889259738dfbd9fdae23fc94bc382793.jpg",previewURL:"https://cdn.beatsaver.com/71498322889259738dfbd9fdae23fc94bc382793.mp3"}],createdAt:"2019-08-21T14:32:59.705Z",updatedAt:"2019-08-21T14:32:59.705Z",lastPublishedAt:"2019-08-21T14:32:59.705Z"},{id:"2db0",name:"RESISTER [Sword Art Online: Alicization 2nd Opening] - ASCA",description:"As requested by @Shoko84 & @Sotarks: RESISTER, the second opening to Sword Art Online: Alicization by ASCA!\r\n\r\n(Originally came in only expert plus but poor Sotarks couldn't do it so thank him for making me include an expert and hard xP)",uploader:{id:58338,name:"Joetastic",uniqueSet:!0,hash:"5cff0b7498cc5a672c85050e",avatar:"https://cdn.beatsaver.com/avatar/227767566402191360.png",type:"DISCORD"},metadata:{bpm:183,duration:226,songName:"RESISTER",songSubName:"ASCA",songAuthorName:"Joetastic",levelAuthorName:"Joetastic"},stats:{plays:0,downloads:6798,upvotes:3257,downvotes:75,score:.9359},uploaded:"2019-01-14T18:07:01Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"eb52dc76edd0eeee542ca6d339127f88dce9a5f4",key:"2db0",state:"Published",createdAt:"2019-01-14T18:07:01Z",sageScore:6,diffs:[{njs:11,offset:0,notes:852,bombs:0,obstacles:45,nps:3.85,length:675,characteristic:"Standard",difficulty:"Hard",events:4117,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:221.311,paritySummary:{errors:39,warns:22,resets:0}},{njs:13,offset:0,notes:970,bombs:0,obstacles:45,nps:4.383,length:675,characteristic:"Standard",difficulty:"Expert",events:4117,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:221.311,paritySummary:{errors:47,warns:56,resets:0}},{njs:15,offset:0,notes:1162,bombs:0,obstacles:51,nps:5.251,length:675,characteristic:"Standard",difficulty:"ExpertPlus",events:4117,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:221.311,paritySummary:{errors:36,warns:43,resets:0}}],downloadURL:"https://cdn.beatsaver.com/eb52dc76edd0eeee542ca6d339127f88dce9a5f4.zip",coverURL:"https://cdn.beatsaver.com/eb52dc76edd0eeee542ca6d339127f88dce9a5f4.jpg",previewURL:"https://cdn.beatsaver.com/eb52dc76edd0eeee542ca6d339127f88dce9a5f4.mp3"}],createdAt:"2019-01-14T18:07:01Z",updatedAt:"2019-01-14T18:07:01Z",lastPublishedAt:"2019-01-14T18:07:01Z"},{id:"2475",name:"Bring It On - Giga-P",description:"Probably Giga-P's most famous song, Bring It On / 劣等上等 (Rettou Joutou / Inferiority Superiority), made for the 10th anniversary of the Vocaloids Rin and Len. This song has quickly entered the Hall of Fame and rightly so as it is one of everyone's (or at least, mine) favorite Vocaloid songs. because of that I knew I had to make a good map out of it. I had a lot of fun making this one and I hope it shows!\r\n\r\nAudio edits: extended intro and slight enhancements to the mix has been made since I had access to the vocals and karaoke tracks, to make the audio fit better in Beat Saber.\r\n\r\nPreview video:\r\nhttps://youtu.be/16oSzYCTD3A\r\n\r\nBPM: 160\r\nDuration: 3:56\r\nEasy, Normal, Hard and Expert difficulties.\r\n\r\nEasy: 335, 7 obstacles, 4 mines\r\nNormal: 469 notes, 10 obstacles, 8 mines\r\nHard: 665 notes, 14 obstacles, 24 mines\r\nExpert: 845 notes, 15 obstacles, 28 mines\r\n\r\nMap includes three different audio versions:\r\n* Full vocal version; the standard version of the song.\r\n* Karaoke version; you can sing along with backing vocals!\r\n* Instrumental version; If you don't want any backing or main vocals this is the version to use.\r\nTo change between these search for \"GigaP_Bring_It_On.ogg\" in your CustomSongs folder and open the folder where that file resides. Change the name of GigaP_Bring_It_On.ogg to GigaP_Bring_It_On_Standard.ogg and rename any of the other two versions to GigaP_Bring_It_On.ogg. Start the game and enjoy!\r\n\r\nThanks to AaltopahWi, RedMagi and ManDynasty for playtesting!\r\n\r\nEnjoy!",uploader:{id:4285318,name:"kolezan",uniqueSet:!0,hash:"5cff0b7398cc5a672c84fcbb",avatar:"https://cdn.beatsaver.com/avatar/220513618763055106.png",type:"DISCORD"},metadata:{bpm:160,duration:236,songName:"Bring It On",songSubName:"Giga-P",songAuthorName:"Kolezan",levelAuthorName:"Kolezan"},stats:{plays:0,downloads:9117,upvotes:3878,downvotes:99,score:.9359},uploaded:"2018-12-07T21:36:14Z",automapper:!1,ranked:!0,qualified:!1,versions:[{hash:"4cb323a4340177d7b7ca74f67f6b920ed320ee5e",key:"2475",state:"Published",createdAt:"2018-12-07T21:36:14Z",sageScore:5,diffs:[{njs:10,offset:0,notes:335,bombs:4,obstacles:7,nps:1.462,length:611,characteristic:"Standard",difficulty:"Easy",events:2906,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:229.125,paritySummary:{errors:63,warns:28,resets:0},stars:1.02},{njs:11,offset:0,notes:469,bombs:8,obstacles:10,nps:2.047,length:611,characteristic:"Standard",difficulty:"Normal",events:2906,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:229.125,paritySummary:{errors:69,warns:52,resets:4},stars:1.36},{njs:12,offset:0,notes:665,bombs:24,obstacles:14,nps:2.902,length:611,characteristic:"Standard",difficulty:"Hard",events:2906,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:229.125,paritySummary:{errors:74,warns:79,resets:7},stars:1.95},{njs:13,offset:0,notes:845,bombs:28,obstacles:15,nps:3.688,length:611,characteristic:"Standard",difficulty:"Expert",events:3259,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:229.125,paritySummary:{errors:91,warns:115,resets:12},stars:2.64}],downloadURL:"https://cdn.beatsaver.com/4cb323a4340177d7b7ca74f67f6b920ed320ee5e.zip",coverURL:"https://cdn.beatsaver.com/4cb323a4340177d7b7ca74f67f6b920ed320ee5e.jpg",previewURL:"https://cdn.beatsaver.com/4cb323a4340177d7b7ca74f67f6b920ed320ee5e.mp3"}],createdAt:"2018-12-07T21:36:14Z",updatedAt:"2018-12-07T21:36:14Z",lastPublishedAt:"2018-12-07T21:36:14Z"},{id:"19d5",name:"BABY GOT BACK - Sir Mix A Lot (Mapped by GreatYazer)",description:"Oh, my, God Becky, look at her butt",uploader:{id:41378,name:"greatyazer",uniqueSet:!0,hash:"5cff0b7298cc5a672c84ea71",avatar:"https://www.gravatar.com/avatar/5cff0b7298cc5a672c84ea71?d=retro",type:"SIMPLE"},metadata:{bpm:128,duration:265,songName:"Baby Got Back",songSubName:"Sir Mix A Lot",songAuthorName:"GreatYazer",levelAuthorName:"greatyazer"},stats:{plays:0,downloads:9264,upvotes:3382,downvotes:80,score:.9359},uploaded:"2018-10-12T12:34:15Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"9d5dbcb878623f3396395cec0e6e8e07d48d2256",key:"19d5",state:"Published",createdAt:"2018-10-12T12:34:15Z",sageScore:5,diffs:[{njs:10,offset:0,notes:254,bombs:0,obstacles:0,nps:1.044,length:519,characteristic:"Standard",difficulty:"Easy",events:2124,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:243.281,paritySummary:{errors:61,warns:19,resets:0}},{njs:10,offset:0,notes:394,bombs:0,obstacles:1,nps:1.62,length:519,characteristic:"Standard",difficulty:"Normal",events:2124,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:243.281,paritySummary:{errors:100,warns:34,resets:0}},{njs:10,offset:0,notes:603,bombs:0,obstacles:9,nps:2.479,length:519,characteristic:"Standard",difficulty:"Hard",events:2124,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:243.281,paritySummary:{errors:79,warns:48,resets:0}},{njs:10,offset:0,notes:889,bombs:0,obstacles:14,nps:3.654,length:519,characteristic:"Standard",difficulty:"Expert",events:2124,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:243.281,paritySummary:{errors:107,warns:66,resets:0}}],downloadURL:"https://cdn.beatsaver.com/9d5dbcb878623f3396395cec0e6e8e07d48d2256.zip",coverURL:"https://cdn.beatsaver.com/9d5dbcb878623f3396395cec0e6e8e07d48d2256.jpg",previewURL:"https://cdn.beatsaver.com/9d5dbcb878623f3396395cec0e6e8e07d48d2256.mp3"}],createdAt:"2018-10-12T12:34:15Z",updatedAt:"2018-10-12T12:34:15Z",lastPublishedAt:"2018-10-12T12:34:15Z"},{id:"d00c",name:"[Extra Sensory] Hayako - Analys",description:'WE ARE BACK\n\nMassive thanks to these people for making all of this possible!!\nAeroluna- For making Noodle Extensions and updating Chroma\nCyan- For spending almost a full day starting at effects with and for me and also helping with making sure the mapping wasnt horrible\nArti- CusomJsonData and helping make this whole project happen initially at all!!\nFMS_Cat- Map heavily inspired and made from his original, https://youtu.be/eqZE60HanCM . The we are back text was also modeled after that in his chart\n\nAnd anyone else who helped me out while I was being dumb with this whole thing\n\nThis map was released as a part of the "Extra Sensory" event.\n\nVideo: https://youtu.be/sYkW_AWUEL8',uploader:{id:4235136,name:"reaxt",uniqueSet:!0,hash:"5cff0b7298cc5a672c84e8ab",avatar:"https://cdn.beatsaver.com/avatar/163052863038291970.png",type:"DISCORD"},metadata:{bpm:170,duration:129,songName:"ANALYS",songSubName:"",songAuthorName:"HAYAKO",levelAuthorName:"Reaxt"},stats:{plays:0,downloads:6832,upvotes:4995,downvotes:145,score:.9358},uploaded:"2020-08-06T16:52:58.027Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"f6dbd83b699872e2e42c2fc90337ef0ac2ab8f30",key:"d00c",state:"Published",createdAt:"2020-08-06T16:52:58.027Z",sageScore:3,diffs:[{njs:19,offset:0,notes:2390,bombs:100,obstacles:502,nps:19.238,length:352,characteristic:"Standard",difficulty:"ExpertPlus",events:2478,chroma:!0,me:!1,ne:!0,cinema:!1,seconds:124.235,paritySummary:{errors:149,warns:3,resets:0}}],downloadURL:"https://cdn.beatsaver.com/f6dbd83b699872e2e42c2fc90337ef0ac2ab8f30.zip",coverURL:"https://cdn.beatsaver.com/f6dbd83b699872e2e42c2fc90337ef0ac2ab8f30.jpg",previewURL:"https://cdn.beatsaver.com/f6dbd83b699872e2e42c2fc90337ef0ac2ab8f30.mp3"}],createdAt:"2020-08-06T16:52:58.027Z",updatedAt:"2020-08-06T16:52:58.027Z",lastPublishedAt:"2020-08-06T16:52:58.027Z"},{id:"85b",name:"Take Me Home, Country Road - Fallout 76 Version",description:"Easy to beat, but a blast to play through. Enjoy!",uploader:{id:50560,name:"npcinnkeeper",uniqueSet:!0,hash:"5cff0b7398cc5a672c84f8e7",avatar:"https://www.gravatar.com/avatar/5cff0b7398cc5a672c84f8e7?d=retro",type:"SIMPLE"},metadata:{bpm:160,duration:178,songName:"Take Me Home, Country Roads",songSubName:"Fallout 76",songAuthorName:"NPC Innkeeper",levelAuthorName:"npcinnkeeper"},stats:{plays:0,downloads:12534,upvotes:5946,downvotes:185,score:.9358},uploaded:"2018-07-07T14:08:33Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"9ed3b706b2306c00c2ad70a287c784277dbb5d74",key:"85b",state:"Published",createdAt:"2018-07-07T14:08:33Z",sageScore:4,diffs:[{njs:10,offset:0,notes:536,bombs:14,obstacles:13,nps:3.131,length:456.5,characteristic:"Standard",difficulty:"Hard",events:954,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:171.188,paritySummary:{errors:141,warns:29,resets:0}}],downloadURL:"https://cdn.beatsaver.com/9ed3b706b2306c00c2ad70a287c784277dbb5d74.zip",coverURL:"https://cdn.beatsaver.com/9ed3b706b2306c00c2ad70a287c784277dbb5d74.jpg",previewURL:"https://cdn.beatsaver.com/9ed3b706b2306c00c2ad70a287c784277dbb5d74.mp3"}],createdAt:"2018-07-07T14:08:33Z",updatedAt:"2018-07-07T14:08:33Z",lastPublishedAt:"2018-07-07T14:08:33Z"},{id:"4d62",name:"Skrillex - Bangarang",description:"Feedback on Discord: nitronik.exe#7974\n\nNOTE: There are two expert+ difficulties and so there is no easy mode!\nanyways, hope you enjoy!\npreview: https://www.youtube.com/watch?v=p0Z6U8x9fb4",uploader:{id:4284201,name:"nitronikexe",uniqueSet:!0,hash:"5cff0b7798cc5a672c855d84",avatar:"https://cdn.beatsaver.com/avatar/428230049704181760.png",type:"DISCORD"},metadata:{bpm:110,duration:219,songName:"Bangarang",songSubName:"Skrillex",songAuthorName:"nitronik.exe",levelAuthorName:"nitronikexe"},stats:{plays:0,downloads:12246,upvotes:5033,downvotes:147,score:.9357},uploaded:"2019-05-17T11:28:44Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"137e76fcfb08e99695f481f7133cef173fd7fa8e",key:"4d62",state:"Published",createdAt:"2019-05-17T11:28:44Z",sageScore:8,diffs:[{njs:10,offset:0,notes:631,bombs:0,obstacles:6,nps:3.152,length:367,characteristic:"Standard",difficulty:"Easy",events:7633,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:200.182,paritySummary:{errors:129,warns:0,resets:0}},{njs:10,offset:0,notes:708,bombs:0,obstacles:14,nps:3.527,length:368,characteristic:"Standard",difficulty:"Normal",events:7633,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:200.727,paritySummary:{errors:26,warns:25,resets:0}},{njs:13,offset:0,notes:881,bombs:0,obstacles:14,nps:4.389,length:368,characteristic:"Standard",difficulty:"Hard",events:7633,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:200.727,paritySummary:{errors:3,warns:3,resets:0}},{njs:16,offset:0,notes:1032,bombs:108,obstacles:29,nps:5.141,length:368,characteristic:"Standard",difficulty:"Expert",events:7633,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:200.727,paritySummary:{errors:2,warns:0,resets:4}},{njs:17,offset:0,notes:1088,bombs:0,obstacles:26,nps:5.42,length:368,characteristic:"Standard",difficulty:"ExpertPlus",events:7633,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:200.727,paritySummary:{errors:54,warns:42,resets:0}}],downloadURL:"https://cdn.beatsaver.com/137e76fcfb08e99695f481f7133cef173fd7fa8e.zip",coverURL:"https://cdn.beatsaver.com/137e76fcfb08e99695f481f7133cef173fd7fa8e.jpg",previewURL:"https://cdn.beatsaver.com/137e76fcfb08e99695f481f7133cef173fd7fa8e.mp3"}],createdAt:"2019-05-17T11:28:44Z",updatedAt:"2019-05-17T11:28:44Z",lastPublishedAt:"2019-05-17T11:28:44Z"},{id:"97ac",name:"Mick Gordon - Unholy Crusade",description:"Rip and tear\r\n\r\n\r\nExtra super huge thank you to the following people for making this possible\r\nAeroluna- For making Noodle Extensions and updating Chroma\r\nSpooky Ghost- For making Beatwalls\r\nArti- For making the core mod that allowed Noodle Extensions and Chroma to support the new values\r\n\r\nAnd thank you for putting up with my shit during this :)\r\n\r\nVideo: https://www.youtube.com/watch?v=zhIIh3nccNQ",uploader:{id:4235138,name:"CyanSnow",uniqueSet:!0,hash:"5cff0b7698cc5a672c8543ac",avatar:"https://cdn.beatsaver.com/avatar/154341137694326784.png",type:"DISCORD"},metadata:{bpm:150,duration:167,songName:"Unholy Crusade",songSubName:"",songAuthorName:"Mick Gordon",levelAuthorName:"CyanSnow"},stats:{plays:0,downloads:6492,upvotes:2903,downvotes:63,score:.9356},uploaded:"2020-04-05T15:44:13.116Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"abc41236f324093fbf711abce8c18c2a47debe20",key:"97ac",state:"Published",createdAt:"2020-04-05T15:44:13.116Z",sageScore:4,diffs:[{njs:19,offset:-.3,notes:650,bombs:0,obstacles:21376,nps:4.331,length:375.23,characteristic:"Lawless",difficulty:"ExpertPlus",events:3853,chroma:!0,me:!1,ne:!0,cinema:!1,seconds:150.092,paritySummary:{errors:0,warns:0,resets:0}}],downloadURL:"https://cdn.beatsaver.com/abc41236f324093fbf711abce8c18c2a47debe20.zip",coverURL:"https://cdn.beatsaver.com/abc41236f324093fbf711abce8c18c2a47debe20.jpg",previewURL:"https://cdn.beatsaver.com/abc41236f324093fbf711abce8c18c2a47debe20.mp3"}],createdAt:"2020-04-05T15:44:13.116Z",updatedAt:"2020-04-05T15:44:13.116Z",lastPublishedAt:"2020-04-05T15:44:13.116Z"},{id:"462",name:"The Nights - Avicii",description:"The Nights By Avicii.\r\nThis is my first beatmap, feedback would be greatly appreciated :)",uploader:{id:47059,name:"rocket",uniqueSet:!0,hash:"5cff0b7398cc5a672c84f1c0",avatar:"https://www.gravatar.com/avatar/5cff0b7398cc5a672c84f1c0?d=retro",type:"SIMPLE"},metadata:{bpm:126,duration:173,songName:"The Nights",songSubName:"",songAuthorName:"Avicii",levelAuthorName:"rocket"},stats:{plays:0,downloads:22239,upvotes:11170,downvotes:426,score:.9356},uploaded:"2018-06-08T23:20:50Z",automapper:!1,ranked:!0,qualified:!1,versions:[{hash:"2c002d2874e029db43f3c7cf9bb271ae0d769b74",key:"462",state:"Published",createdAt:"2018-06-08T23:20:50Z",sageScore:5,diffs:[{njs:10,offset:0,notes:200,bombs:4,obstacles:14,nps:1.207,length:348,characteristic:"Standard",difficulty:"Normal",events:704,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:165.714,paritySummary:{errors:45,warns:19,resets:0},stars:.92},{njs:10,offset:0,notes:402,bombs:6,obstacles:14,nps:2.426,length:348,characteristic:"Standard",difficulty:"Hard",events:704,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:165.714,paritySummary:{errors:88,warns:44,resets:0}},{njs:10,offset:0,notes:702,bombs:10,obstacles:14,nps:4.236,length:348,characteristic:"Standard",difficulty:"Expert",events:705,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:165.714,paritySummary:{errors:119,warns:72,resets:0}}],downloadURL:"https://cdn.beatsaver.com/2c002d2874e029db43f3c7cf9bb271ae0d769b74.zip",coverURL:"https://cdn.beatsaver.com/2c002d2874e029db43f3c7cf9bb271ae0d769b74.jpg",previewURL:"https://cdn.beatsaver.com/2c002d2874e029db43f3c7cf9bb271ae0d769b74.mp3"}],createdAt:"2018-06-08T23:20:50Z",updatedAt:"2018-06-08T23:20:50Z",lastPublishedAt:"2018-06-08T23:20:50Z"},{id:"9c54",name:"Yunomi - 惑星ラビット (feat. TORIENA)/Wakusei Rabbit[Wall Map]",description:'seventh map! [Noodle Extensions & Chroma] map!\nYunomi - Wakusei Rabbit (feat. TORIENA) Planet Rabbit\n \n!! This map requires!!\nNoodle Extensions , Chroma\n\nNoodle Extensions と Chromaが古いバージョンの時代に作ったので、最新バージョンだと壁のY軸(高さ)が破綻します。。\n昔と違い、RequirementsにMapping Extensionsが記載されていると干渉してしまうようなので、\n\n壁を正常に表示するには、以下の修正をお願い致します。\n1. info.datをテキストエディタ等で開く。\n2.「,"Mapping Extensions"」を検索し削除(3か所) コンマも含めますご注意ください。\n\n--(English)\nUnlike in the past, it seems to interfere with the Mapping Extensions listed in Requirements.\nIn order to display the wall properly, please make the following modifications.\n1. Open info.dat with a text editor.\n2. Search for [ , "Mapping Extensions"] and delete it (in three places), including commas.\n--\n\nMy Twitter : https://twitter.com/kamy_0811\n\n[Song info]\nSong name : Wakusei Rabbit\nAlbum : Oedo Controller\nMusic & Lyrics : Yunomi \nVocal : TORIENA\nArtwork : Kiato \nSoundCloud : https://soundcloud.com/tkrism/wakuseirabbit\nPlay movie : https://youtu.be/6WXJqlHQ4To',uploader:{id:4285148,name:"kamy",uniqueSet:!0,hash:"5e42a3f4d523400006369ea0",avatar:"https://cdn.beatsaver.com/avatar/415431418663927810.png",type:"DISCORD"},metadata:{bpm:174,duration:204,songName:"Wakusei_Rabbit",songSubName:"feat. TORIENA",songAuthorName:"Yunomi",levelAuthorName:"kamy"},stats:{plays:0,downloads:6028,upvotes:1794,downvotes:25,score:.9355},uploaded:"2020-04-18T14:46:30.487Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"3b680d87cbba69bda48081e97dc925464116f41f",key:"9c54",state:"Published",createdAt:"2020-04-18T14:46:30.487Z",sageScore:7,diffs:[{njs:14,offset:0,notes:0,bombs:0,obstacles:27053,nps:0,length:0,characteristic:"Standard",difficulty:"Easy",events:2845,chroma:!0,me:!0,ne:!0,cinema:!1,seconds:0,paritySummary:{errors:0,warns:0,resets:0}},{njs:14,offset:0,notes:762,bombs:0,obstacles:27053,nps:3.867,length:571.5,characteristic:"Standard",difficulty:"Hard",events:2848,chroma:!0,me:!0,ne:!0,cinema:!1,seconds:197.069,paritySummary:{errors:0,warns:2,resets:0}},{njs:17,offset:0,notes:1246,bombs:0,obstacles:27053,nps:6.323,length:571.5,characteristic:"Standard",difficulty:"ExpertPlus",events:2845,chroma:!0,me:!0,ne:!0,cinema:!1,seconds:197.069,paritySummary:{errors:0,warns:0,resets:0}}],downloadURL:"https://cdn.beatsaver.com/3b680d87cbba69bda48081e97dc925464116f41f.zip",coverURL:"https://cdn.beatsaver.com/3b680d87cbba69bda48081e97dc925464116f41f.jpg",previewURL:"https://cdn.beatsaver.com/3b680d87cbba69bda48081e97dc925464116f41f.mp3"}],createdAt:"2020-04-18T14:46:30.487Z",updatedAt:"2020-04-18T14:46:30.487Z",lastPublishedAt:"2020-04-18T14:46:30.487Z"},{id:"1f42",name:"Field of Hopes and Dreams (Deltarune) - Toby Fox",description:"Song by Toby Fox\r\nVideo: https://youtu.be/2V7IFAKTIp4\r\n\r\n Expert, Hard, Normal\r\nBPM:120\r\nObstacles: 0\r\n\r\n-Expert-\r\nNotes: 513\r\nNotes per second: 3.12\r\nJump Speed: 13\r\n\r\n-Hard-\r\nNotes: 325\r\nNotes per second: 1.97\r\nJump Speed: 11\r\n\r\n-Expert-\r\nNotes: 212\r\nNotes per second: 1.29\r\nJump Speed: 10\r\n\r\nShoutout to testers:\r\nRedmagi\r\nManDynasty\r\nAaltopahWi\r\nAggrogahu",uploader:{id:39365,name:"todokete",uniqueSet:!0,hash:"5cff0b7398cc5a672c84ee70",avatar:"https://www.gravatar.com/avatar/5cff0b7398cc5a672c84ee70?d=retro",type:"SIMPLE"},metadata:{bpm:125,duration:164,songName:"Field of Hopes and Dreams",songSubName:"Toby Fox",songAuthorName:"Todokete",levelAuthorName:"todokete"},stats:{plays:0,downloads:6294,upvotes:3219,downvotes:76,score:.9353},uploaded:"2018-11-09T19:54:30Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"c62d53bd22e3aa7d6a2ef04472ee7a22ceed74f6",key:"1f42",state:"Published",createdAt:"2018-11-09T19:54:30Z",sageScore:5,diffs:[{njs:10,offset:0,notes:212,bombs:0,obstacles:0,nps:1.33,length:332,characteristic:"Standard",difficulty:"Normal",events:888,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:159.36,paritySummary:{errors:44,warns:21,resets:0}},{njs:11,offset:0,notes:325,bombs:0,obstacles:0,nps:2.039,length:332,characteristic:"Standard",difficulty:"Hard",events:888,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:159.36,paritySummary:{errors:57,warns:15,resets:0}},{njs:13,offset:0,notes:513,bombs:0,obstacles:0,nps:3.219,length:332,characteristic:"Standard",difficulty:"Expert",events:888,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:159.36,paritySummary:{errors:68,warns:69,resets:0}}],downloadURL:"https://cdn.beatsaver.com/c62d53bd22e3aa7d6a2ef04472ee7a22ceed74f6.zip",coverURL:"https://cdn.beatsaver.com/c62d53bd22e3aa7d6a2ef04472ee7a22ceed74f6.jpg",previewURL:"https://cdn.beatsaver.com/c62d53bd22e3aa7d6a2ef04472ee7a22ceed74f6.mp3"}],createdAt:"2018-11-09T19:54:30Z",updatedAt:"2018-11-09T19:54:30Z",lastPublishedAt:"2018-11-09T19:54:30Z"},{id:"1970",name:"Still Into You - Paramore",description:"Expert Playthrough : https://youtu.be/CUBqLk35vbE",uploader:{id:13320,name:"novashaft",uniqueSet:!0,hash:"5cff0b7398cc5a672c84ee55",avatar:"https://www.gravatar.com/avatar/5cff0b7398cc5a672c84ee55?d=retro",type:"SIMPLE"},metadata:{bpm:136,duration:216,songName:"Still Into You",songSubName:"Paramore",songAuthorName:"NovaShaft",levelAuthorName:"novashaft"},stats:{plays:0,downloads:8223,upvotes:2078,downvotes:35,score:.9352},uploaded:"2018-10-09T15:34:41Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"fdd3fd8a25a79c114184cef10633fe6a57c7eb4c",key:"1970",state:"Published",createdAt:"2018-10-09T15:34:41Z",sageScore:4,diffs:[{njs:10,offset:0,notes:713,bombs:0,obstacles:21,nps:3.536,length:457,characteristic:"Standard",difficulty:"Hard",events:738,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:201.618,paritySummary:{errors:25,warns:25,resets:0}},{njs:11,offset:0,notes:848,bombs:0,obstacles:21,nps:4.206,length:457,characteristic:"Standard",difficulty:"Expert",events:738,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:201.618,paritySummary:{errors:50,warns:72,resets:0}}],downloadURL:"https://cdn.beatsaver.com/fdd3fd8a25a79c114184cef10633fe6a57c7eb4c.zip",coverURL:"https://cdn.beatsaver.com/fdd3fd8a25a79c114184cef10633fe6a57c7eb4c.jpg",previewURL:"https://cdn.beatsaver.com/fdd3fd8a25a79c114184cef10633fe6a57c7eb4c.mp3"}],createdAt:"2018-10-09T15:34:41Z",updatedAt:"2018-10-09T15:34:41Z",lastPublishedAt:"2018-10-09T15:34:41Z"},{id:"8790",name:"Satellite - Rise Against",description:'"Satellite" is a song by American rock band Rise Against, featured on their sixth studio album Endgame (2011). \n\nWritten by lead vocalist Tim McIlrath, "Satellite" expresses the idea that the band stood by their social and political beliefs, and that they would not conform to mainstream media.',uploader:{id:58338,name:"Joetastic",uniqueSet:!0,hash:"5cff0b7498cc5a672c85050e",avatar:"https://cdn.beatsaver.com/avatar/227767566402191360.png",type:"DISCORD"},metadata:{bpm:136,duration:237,songName:"Satellite",songSubName:"",songAuthorName:"Rise Against",levelAuthorName:"Joetastic"},stats:{plays:0,downloads:4055,upvotes:1641,downvotes:21,score:.9351},uploaded:"2020-02-16T09:32:52.155Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"2a3c743f85bd235cd9d658fe728f9db79f3b9dc5",key:"8790",state:"Published",createdAt:"2020-02-16T09:32:52.155Z",sageScore:7,diffs:[{njs:15,offset:0,notes:982,bombs:26,obstacles:10,nps:4.306,length:516.975,characteristic:"Standard",difficulty:"ExpertPlus",events:7595,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:228.077,paritySummary:{errors:9,warns:6,resets:1}}],downloadURL:"https://cdn.beatsaver.com/2a3c743f85bd235cd9d658fe728f9db79f3b9dc5.zip",coverURL:"https://cdn.beatsaver.com/2a3c743f85bd235cd9d658fe728f9db79f3b9dc5.jpg",previewURL:"https://cdn.beatsaver.com/2a3c743f85bd235cd9d658fe728f9db79f3b9dc5.mp3"}],createdAt:"2020-02-16T09:32:52.155Z",updatedAt:"2020-02-16T09:32:52.155Z",lastPublishedAt:"2020-02-16T09:32:52.155Z"},{id:"689b",name:"DuckTales Opening ",description:"Opening by Felicia Barton\nJust a simple but fun map of this song from childhood!\n:D \nFC: https://www.youtube.com/watch?v=QCOHyHKy6SI&feature=youtu.be",uploader:{id:35241,name:"4strofan",uniqueSet:!0,hash:"5cff0b7598cc5a672c851d18",avatar:"https://www.gravatar.com/avatar/5cff0b7598cc5a672c851d18?d=retro",type:"SIMPLE"},metadata:{bpm:91.51,duration:121,songName:"DuckTales",songSubName:"Opening Song",songAuthorName:"Felicia Barton",levelAuthorName:"Strofan"},stats:{plays:0,downloads:4253,upvotes:2276,downvotes:42,score:.9351},uploaded:"2019-10-08T13:14:56.729Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"2e687b4e357c8fb14d1cba11b3d4029070ed51f7",key:"689b",state:"Published",createdAt:"2019-10-08T13:14:56.729Z",sageScore:5,diffs:[{njs:14,offset:0,notes:460,bombs:0,obstacles:0,nps:4.091,length:171.5,characteristic:"Standard",difficulty:"Expert",events:1106,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:112.447,paritySummary:{errors:15,warns:6,resets:0}}],downloadURL:"https://cdn.beatsaver.com/2e687b4e357c8fb14d1cba11b3d4029070ed51f7.zip",coverURL:"https://cdn.beatsaver.com/2e687b4e357c8fb14d1cba11b3d4029070ed51f7.jpg",previewURL:"https://cdn.beatsaver.com/2e687b4e357c8fb14d1cba11b3d4029070ed51f7.mp3"}],createdAt:"2019-10-08T13:14:56.729Z",updatedAt:"2019-10-08T13:14:56.729Z",lastPublishedAt:"2019-10-08T13:14:56.729Z"},{id:"67ba",name:"Air - Mr.FijiWiji Remix | AMV by SliceOfLife",description:'Videolink:\nhttps://youtu.be/V-KFAdSjeKo\n\n====================================================\n\nIf you are making a video to the level I would be happy if my video is linked in the description, but is not a must.\n\n====================================================\n\nIn order to play the level properly, the following plugins are required !!!\n== MappingExtension is required! ==\n== ChromaLite is recommended ==\n== SongCore is recommended ==\n\nAll plugins can be downloaded by ModAssistant\nhttps://github.com/Assistant/ModAssistant\n\nChromaLite and SongCore are only for the aesthetics! This includes light events and colors. If you don\'t want to use the preset colors, set the "Allow Color Override" option under "SongCore" to off.\n\n====================================================\n\nDifficulty: Expert\nNotes: 146\nWalls: 4135\nBombs: 900\n\n====================================================\n\nThis level CAN cause performance issues to your PC, especially on lower end VR PCs. ',uploader:{id:37230,name:"gevarred",uniqueSet:!0,hash:"5d971075e6a6760006266826",avatar:"https://www.gravatar.com/avatar/5d971075e6a6760006266826?d=retro",type:"SIMPLE"},metadata:{bpm:126,duration:172,songName:"Air",songSubName:"Shortened by SliceOfLife",songAuthorName:"Mr. FijiWiji Remix",levelAuthorName:"Gevarred"},stats:{plays:0,downloads:4245,upvotes:4022,downvotes:109,score:.935},uploaded:"2019-10-04T10:05:15.873Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"65c0c3e82499281f2c9b1d09d7eb3e60bcacd57d",key:"67ba",state:"Published",createdAt:"2019-10-04T10:05:15.873Z",sageScore:5,diffs:[{njs:8,offset:0,notes:146,bombs:900,obstacles:4135,nps:1.065,length:287.781,characteristic:"Standard",difficulty:"ExpertPlus",events:1015,chroma:!0,me:!0,ne:!1,cinema:!1,seconds:137.039,paritySummary:{errors:0,warns:0,resets:0}}],downloadURL:"https://cdn.beatsaver.com/65c0c3e82499281f2c9b1d09d7eb3e60bcacd57d.zip",coverURL:"https://cdn.beatsaver.com/65c0c3e82499281f2c9b1d09d7eb3e60bcacd57d.jpg",previewURL:"https://cdn.beatsaver.com/65c0c3e82499281f2c9b1d09d7eb3e60bcacd57d.mp3"}],createdAt:"2019-10-04T10:05:15.873Z",updatedAt:"2019-10-04T10:05:15.873Z",lastPublishedAt:"2019-10-04T10:05:15.873Z"},{id:"38eb",name:"The Rockafeller Skank - Fatboy Slim - BT90",description:'This map is part of a 90s songpack. Search "BT90" to find all the songs in the songpack.\r\nMap is created by Heisenberg_IRL. Check out https://www.twitch.tv/heisenberg_irl',uploader:{id:27983,name:"heisenbergirl",uniqueSet:!0,hash:"5cff0b7298cc5a672c84ec30",avatar:"https://www.gravatar.com/avatar/5cff0b7298cc5a672c84ec30?d=retro",type:"SIMPLE"},metadata:{bpm:153,duration:236,songName:"The Rockafeller Skank",songSubName:"Fatboy Slim [BT90]",songAuthorName:"Heisenberg",levelAuthorName:"heisenbergirl"},stats:{plays:0,downloads:5545,upvotes:2421,downvotes:48,score:.9348},uploaded:"2019-02-23T13:17:40Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"5ad1cb4a7317ddc5d54d497c8d35eda5dd9d44b9",key:"38eb",state:"Published",createdAt:"2019-02-23T13:17:40Z",sageScore:6,diffs:[{njs:12,offset:0,notes:775,bombs:884,obstacles:43,nps:3.384,length:584,characteristic:"Standard",difficulty:"Expert",events:5820,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:229.02,paritySummary:{errors:43,warns:44,resets:15}},{njs:18,offset:0,notes:1014,bombs:907,obstacles:41,nps:4.371,length:591.5,characteristic:"Standard",difficulty:"ExpertPlus",events:5820,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:231.961,paritySummary:{errors:48,warns:98,resets:18}}],downloadURL:"https://cdn.beatsaver.com/5ad1cb4a7317ddc5d54d497c8d35eda5dd9d44b9.zip",coverURL:"https://cdn.beatsaver.com/5ad1cb4a7317ddc5d54d497c8d35eda5dd9d44b9.jpg",previewURL:"https://cdn.beatsaver.com/5ad1cb4a7317ddc5d54d497c8d35eda5dd9d44b9.mp3"}],createdAt:"2019-02-23T13:17:40Z",updatedAt:"2019-02-23T13:17:40Z",lastPublishedAt:"2019-02-23T13:17:40Z"},{id:"445f",name:"Kazuma Kiryu - Baka Mitai [Yakuza OST]",description:"Dame da ne \r\nDame yo\r\nDame na no yo ( ͒˃̩̩⌂˂̩̩ ͒)\r\n\r\nPlay Yakuza, especially the karaoke mini-games\r\nFun fact: it is impossible to listen to this song without crying (100% guaranteed) \r\n\r\n74 BPM\r\nExpert\r\n\r\n:)\r\n\r\ncontact me on discord\r\nETAN#8341",uploader:{id:4235140,name:"etan",uniqueSet:!0,hash:"5cff0b7798cc5a672c855775",avatar:"https://cdn.beatsaver.com/avatar/136373107559497728.png",type:"DISCORD"},metadata:{bpm:74,duration:119,songName:"Baka Mitai",songSubName:"Kazuma Kiryu",songAuthorName:"ETAN",levelAuthorName:"ETAN"},stats:{plays:0,downloads:5251,upvotes:1681,downvotes:23,score:.9347},uploaded:"2019-04-08T17:08:08Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"c39c719a17a081d0bd0806052bd39ba4ee39b6b0",key:"445f",state:"Published",createdAt:"2019-04-08T17:08:08Z",sageScore:4,diffs:[{njs:13.5,offset:0,notes:272,bombs:0,obstacles:21,nps:2.546,length:263.5,characteristic:"Standard",difficulty:"Expert",events:553,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:213.649,paritySummary:{errors:9,warns:11,resets:0}}],downloadURL:"https://cdn.beatsaver.com/c39c719a17a081d0bd0806052bd39ba4ee39b6b0.zip",coverURL:"https://cdn.beatsaver.com/c39c719a17a081d0bd0806052bd39ba4ee39b6b0.jpg",previewURL:"https://cdn.beatsaver.com/c39c719a17a081d0bd0806052bd39ba4ee39b6b0.mp3"}],createdAt:"2019-04-08T17:08:08Z",updatedAt:"2019-04-08T17:08:08Z",lastPublishedAt:"2019-04-08T17:08:08Z"},{id:"bdc7",name:"That's Life - Frank Sinatra",description:"Here is an honest-to-goodness human-mapped version of Frank Sinatra's 1966 hit, That's Life. This song is way too good to just have a crappy beat sage map.\n\nNormal and Hard Standard levels, and Expert Standard, 90, and 360 levels. Note that the expert levels are all essentially the same, just with varying degrees of wobbles.\n\nThanks to Maybeemae for the playtests!\n\nhttps://youtu.be/QXjj2-fgK8U",uploader:{id:78593,name:"techbutterfly",uniqueSet:!0,hash:"5cff0b7798cc5a672c8566f7",avatar:"https://cdn.beatsaver.com/avatar/527111497617506304.png",type:"DISCORD"},metadata:{bpm:77,duration:186,songName:"That's Life",songSubName:"",songAuthorName:"Frank Sinatra",levelAuthorName:"TechButterfly"},stats:{plays:0,downloads:4965,upvotes:1172,downvotes:8,score:.9346},uploaded:"2020-07-11T22:35:42.033Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"7cca8c1afecd782cfd74f158c312201b780043d8",key:"bdc7",state:"Published",createdAt:"2020-07-11T22:35:42.033Z",sageScore:4,diffs:[{njs:10,offset:-.3,notes:321,bombs:0,obstacles:6,nps:1.768,length:233,characteristic:"Standard",difficulty:"Normal",events:1086,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:181.558,paritySummary:{errors:30,warns:41,resets:0}},{njs:12,offset:.3,notes:418,bombs:0,obstacles:8,nps:2.302,length:233,characteristic:"Standard",difficulty:"Hard",events:1086,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:181.558,paritySummary:{errors:24,warns:38,resets:0}},{njs:13,offset:.1,notes:492,bombs:0,obstacles:8,nps:2.71,length:233,characteristic:"Standard",difficulty:"Expert",events:1086,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:181.558,paritySummary:{errors:24,warns:26,resets:0}},{njs:13,offset:.3,notes:489,bombs:0,obstacles:8,nps:2.693,length:233,characteristic:"90Degree",difficulty:"Expert",events:1192,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:181.558,paritySummary:{errors:25,warns:27,resets:0}},{njs:13,offset:.3,notes:489,bombs:0,obstacles:8,nps:2.693,length:233,characteristic:"360Degree",difficulty:"Expert",events:1166,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:181.558,paritySummary:{errors:25,warns:26,resets:0}}],downloadURL:"https://cdn.beatsaver.com/7cca8c1afecd782cfd74f158c312201b780043d8.zip",coverURL:"https://cdn.beatsaver.com/7cca8c1afecd782cfd74f158c312201b780043d8.jpg",previewURL:"https://cdn.beatsaver.com/7cca8c1afecd782cfd74f158c312201b780043d8.mp3"}],createdAt:"2020-07-11T22:35:42.033Z",updatedAt:"2020-07-11T22:35:42.033Z",lastPublishedAt:"2020-07-11T22:35:42.033Z"},{id:"194c",name:"Better When I'm Dancin' - Meghan Trainor",description:'"We can do this together... I bet you feel better when you\'re dancing, yeah, yeah..."\r\nDifficulties: Expert, Hard, Normal',uploader:{id:30311,name:"bennydabeast",uniqueSet:!0,hash:"5cff0b7298cc5a672c84e98d",avatar:"https://cdn.beatsaver.com/avatar/30311.jpg",type:"SIMPLE"},metadata:{bpm:128,duration:178,songName:"Better When I'm Dancin'",songSubName:"Meghan Trainor",songAuthorName:"BennyDaBeast",levelAuthorName:"bennydabeast"},stats:{plays:0,downloads:5411,upvotes:1790,downvotes:27,score:.9345},uploaded:"2018-10-08T12:10:29Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"9bd5e0efe697a38fe0da28f252a8bfb870da630a",key:"194c",state:"Published",createdAt:"2018-10-08T12:10:29Z",sageScore:5,diffs:[{njs:10,offset:0,notes:271,bombs:0,obstacles:16,nps:1.571,length:368,characteristic:"Standard",difficulty:"Normal",events:940,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:172.5,paritySummary:{errors:31,warns:26,resets:0}},{njs:10,offset:0,notes:474,bombs:0,obstacles:16,nps:2.748,length:368,characteristic:"Standard",difficulty:"Hard",events:940,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:172.5,paritySummary:{errors:87,warns:57,resets:0}},{njs:10,offset:0,notes:643,bombs:0,obstacles:16,nps:3.733,length:367.5,characteristic:"Standard",difficulty:"Expert",events:940,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:172.266,paritySummary:{errors:82,warns:71,resets:0}}],downloadURL:"https://cdn.beatsaver.com/9bd5e0efe697a38fe0da28f252a8bfb870da630a.zip",coverURL:"https://cdn.beatsaver.com/9bd5e0efe697a38fe0da28f252a8bfb870da630a.jpg",previewURL:"https://cdn.beatsaver.com/9bd5e0efe697a38fe0da28f252a8bfb870da630a.mp3"}],createdAt:"2018-10-08T12:10:29Z",updatedAt:"2018-10-08T12:10:29Z",lastPublishedAt:"2018-10-08T12:10:29Z"},{id:"a908",name:"[TheFatRat Pack] Unity - TheFatRat",description:'Here it is! The unofficial "TheFatRat" Music Pack in Beat Saber - with all beatmaps being singlehandedly made by me!\n\nAll songs included in TheFatRat Music Pack:\nMonody (ft. Laura Brehm) \nUnity \nWindfall \nXenogenesis \nTime Lapse \n\nGet the full song pack here: https://bsaber.com/thefatrat-music-pack/\n(Or you should just be able to find all the other ones on my beatsaver profile as well. Heres a link to my profile: https://beatsaver.com/uploader/5d47d586c5301900060b2f6c)\n\nSongcore mod is recommended (for custom colours)\nPlays best on Origins Environment\n\nUnity Stats:\nExpert+ - 1013 Notes | 4.74 NPS\nExpert - 869 Notes | 4.07 NPS\nHard - 608 Notes | 2.85 NPS\nNormal - 373 Notes | 1.75 NPS\nEasy - 264 Notes | 1.24 NPS\n\nRoughly 8-9 Hours of work\nGameplay: https://youtu.be/8lIoHcrm3wQ\n\nObviously - A huge thanks to TheFatRat himself, for not only producing the songs in the first place (and allowing free access to use them for big and small content creators), but also being a huge inspiration to lots of artists out there and for making music that everyone can jam out to! We love you, TheFatRat!',uploader:{id:4284197,name:"timeweaver",uniqueSet:!0,hash:"5d47d586c5301900060b2f6c",avatar:"https://cdn.beatsaver.com/avatar/607399708121366529.png",type:"DISCORD"},metadata:{bpm:105,duration:213,songName:"Unity",songSubName:"",songAuthorName:"TheFatRat",levelAuthorName:"Timeweaver"},stats:{plays:0,downloads:11605,upvotes:3186,downvotes:78,score:.9344},uploaded:"2020-05-22T13:28:31.075Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"296946437e2194823129d88e7c457202e4c7f281",key:"a908",state:"Published",createdAt:"2020-05-22T13:28:31.075Z",sageScore:5,diffs:[{njs:10,offset:1,notes:264,bombs:0,obstacles:17,nps:1.262,length:366,characteristic:"Standard",difficulty:"Easy",events:3460,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:209.143,paritySummary:{errors:48,warns:26,resets:0}},{njs:10,offset:1,notes:373,bombs:0,obstacles:16,nps:1.783,length:366,characteristic:"Standard",difficulty:"Normal",events:3460,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:209.143,paritySummary:{errors:55,warns:24,resets:0}},{njs:12.5,offset:0,notes:608,bombs:0,obstacles:19,nps:2.907,length:366,characteristic:"Standard",difficulty:"Hard",events:3460,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:209.143,paritySummary:{errors:22,warns:8,resets:0}},{njs:15,offset:-.25,notes:869,bombs:0,obstacles:17,nps:4.155,length:366,characteristic:"Standard",difficulty:"Expert",events:3460,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:209.143,paritySummary:{errors:3,warns:0,resets:0}},{njs:16,offset:.5,notes:1013,bombs:0,obstacles:24,nps:4.844,length:366,characteristic:"Standard",difficulty:"ExpertPlus",events:3460,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:209.143,paritySummary:{errors:0,warns:0,resets:0}}],downloadURL:"https://cdn.beatsaver.com/296946437e2194823129d88e7c457202e4c7f281.zip",coverURL:"https://cdn.beatsaver.com/296946437e2194823129d88e7c457202e4c7f281.jpg",previewURL:"https://cdn.beatsaver.com/296946437e2194823129d88e7c457202e4c7f281.mp3"}],createdAt:"2020-05-22T13:28:31.075Z",updatedAt:"2020-05-22T13:28:31.075Z",lastPublishedAt:"2020-05-22T13:28:31.075Z"},{id:"a465",name:"The Chain - Fleetwood Mac",description:"Today (May 9) is my mapperversary! I released my first map - Comfort Eagle - a year ago today. Since then, I've released another 50 maps - almost one a week for a year! And of course, one of those is Little Shop, which is really 13 songs in one monster map. Help me celebrate my mapperversary by playing this map of Fleetwood Mac's 1977 classic, The Chain. Normal and Expert Standard, and Expert Plus 360 levels.\n\nThanks Beat Saber community for a really fun year of mapping and having fun with y’all! Thanks to the Beat Saber Modding Group for helping me get started in the beginning - especially CyanSnow and HelenCarnate - you guys were a great help to me at the beginning, despite being new mappers yourselves! Thanks to the Ramen Noodle crew for letting this old guy hang out and pretend he’s one of the cool mappers. Thanks to Darkuni and Maybeemae for being awesome friends! Extra special thanks to my mapping buddy, MajorPickle – you da man! Here’s to many more years to come!\n\nMy initial post for this map mentioned that any videos would be insta-blocked on youtube, because mine was. Since then, several people have posted videos of it without problem, so apparently it's okay.\n\nhttps://bittube.tv/post/0d3e4790-7a77-498b-9223-3d70c3ac9234",uploader:{id:78593,name:"techbutterfly",uniqueSet:!0,hash:"5cff0b7798cc5a672c8566f7",avatar:"https://cdn.beatsaver.com/avatar/527111497617506304.png",type:"DISCORD"},metadata:{bpm:152,duration:252,songName:"The Chain",songSubName:"",songAuthorName:"Fleetwood Mac",levelAuthorName:"TechButterfly"},stats:{plays:0,downloads:7216,upvotes:1873,downvotes:30,score:.9344},uploaded:"2020-05-09T11:53:28.520Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"4db96dd119b51d7f7124b6055db2ee1131452667",key:"a465",state:"Published",createdAt:"2020-05-09T11:53:28.520Z",sageScore:3,diffs:[{njs:10,offset:0,notes:469,bombs:0,obstacles:135,nps:1.883,length:631,characteristic:"Standard",difficulty:"Normal",events:555,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:249.079,paritySummary:{errors:57,warns:51,resets:0}},{njs:13,offset:.3,notes:851,bombs:68,obstacles:113,nps:3.417,length:631,characteristic:"Standard",difficulty:"Expert",events:554,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:249.079,paritySummary:{errors:36,warns:33,resets:9}},{njs:13,offset:.5,notes:851,bombs:63,obstacles:116,nps:3.417,length:631,characteristic:"360Degree",difficulty:"ExpertPlus",events:766,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:249.079,paritySummary:{errors:36,warns:33,resets:9}}],downloadURL:"https://cdn.beatsaver.com/4db96dd119b51d7f7124b6055db2ee1131452667.zip",coverURL:"https://cdn.beatsaver.com/4db96dd119b51d7f7124b6055db2ee1131452667.jpg",previewURL:"https://cdn.beatsaver.com/4db96dd119b51d7f7124b6055db2ee1131452667.mp3"}],createdAt:"2020-05-09T11:53:28.520Z",updatedAt:"2020-05-09T11:53:28.520Z",lastPublishedAt:"2020-05-09T11:53:28.520Z"},{id:"6100",name:"Keina Suda - veil [Fire Force Ending]",description:"Fire Force is rad\nBoth the op and ed are also rad\n\nBPM 150 | Length 1:30\nExpert+\nExpert\nHard\nNormal\n\nplease enjoy\n\nDM any feedback on Discord\nETAN#8341",uploader:{id:4235140,name:"etan",uniqueSet:!0,hash:"5cff0b7798cc5a672c855775",avatar:"https://cdn.beatsaver.com/avatar/136373107559497728.png",type:"DISCORD"},metadata:{bpm:150,duration:91,songName:"veil",songSubName:"",songAuthorName:"Keina Suda",levelAuthorName:"ETAN"},stats:{plays:0,downloads:5151,upvotes:1646,downvotes:23,score:.9341},uploaded:"2019-09-03T00:05:16.685Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"f8bd8b3b1fecc3834a6ea88da39a055c98013823",key:"6100",state:"Published",createdAt:"2019-09-03T00:05:16.685Z",sageScore:3,diffs:[{njs:11,offset:0,notes:155,bombs:0,obstacles:6,nps:1.872,length:207,characteristic:"Standard",difficulty:"Normal",events:2814,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:82.8,paritySummary:{errors:0,warns:0,resets:0}},{njs:12,offset:0,notes:203,bombs:0,obstacles:6,nps:2.452,length:207,characteristic:"Standard",difficulty:"Hard",events:2814,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:82.8,paritySummary:{errors:0,warns:0,resets:0}},{njs:14,offset:0,notes:280,bombs:0,obstacles:6,nps:3.373,length:207.5,characteristic:"Standard",difficulty:"Expert",events:2814,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:83,paritySummary:{errors:7,warns:6,resets:0}},{njs:18,offset:0,notes:366,bombs:5,obstacles:6,nps:4.41,length:207.5,characteristic:"Standard",difficulty:"ExpertPlus",events:2822,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:83,paritySummary:{errors:8,warns:9,resets:0}}],downloadURL:"https://cdn.beatsaver.com/f8bd8b3b1fecc3834a6ea88da39a055c98013823.zip",coverURL:"https://cdn.beatsaver.com/f8bd8b3b1fecc3834a6ea88da39a055c98013823.jpg",previewURL:"https://cdn.beatsaver.com/f8bd8b3b1fecc3834a6ea88da39a055c98013823.mp3"}],createdAt:"2019-09-03T00:05:16.685Z",updatedAt:"2019-09-03T00:05:16.685Z",lastPublishedAt:"2019-09-03T00:05:16.685Z"},{id:"b",name:"Imagine Dragons - Believer",description:"Currently expert only. Events included.",uploader:{id:12996,name:"rustic",uniqueSet:!0,hash:"5cff0b7298cc5a672c84e8c4",avatar:"https://www.gravatar.com/avatar/5cff0b7298cc5a672c84e8c4?d=retro",type:"SIMPLE"},metadata:{bpm:125,duration:205,songName:"Believer",songSubName:"Imagine Dragons",songAuthorName:"Rustic",levelAuthorName:"rustic"},stats:{plays:0,downloads:19970,upvotes:11803,downvotes:476,score:.9341},uploaded:"2018-05-08T18:56:36Z",automapper:!1,ranked:!0,qualified:!1,versions:[{hash:"19f2879d11a91b51a5c090d63471c3e8d9b7aee3",key:"b",state:"Published",createdAt:"2018-05-08T18:56:36Z",sageScore:5,diffs:[{njs:10,offset:0,notes:546,bombs:0,obstacles:10,nps:2.754,length:413,characteristic:"Standard",difficulty:"Expert",events:551,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:198.24,paritySummary:{errors:130,warns:49,resets:0},stars:1.44}],downloadURL:"https://cdn.beatsaver.com/19f2879d11a91b51a5c090d63471c3e8d9b7aee3.zip",coverURL:"https://cdn.beatsaver.com/19f2879d11a91b51a5c090d63471c3e8d9b7aee3.jpg",previewURL:"https://cdn.beatsaver.com/19f2879d11a91b51a5c090d63471c3e8d9b7aee3.mp3"}],createdAt:"2018-05-08T18:56:36Z",updatedAt:"2018-05-08T18:56:36Z",lastPublishedAt:"2018-05-08T18:56:36Z"},{id:"8115",name:"Los! Los! Los! (German Ver.) [Youjo Senki Ending] - Selphius",description:"German cover of Los! Los! Los! performed by Selphius. It was originally performed by Aoi Yuuki, the voice actress of Tanya Degurechaff. \n\nHearing this song in German just feels so right! The original song was also has German lyrics but it was sung by a Japanese so it really didn't fit.",uploader:{id:58338,name:"Joetastic",uniqueSet:!0,hash:"5cff0b7498cc5a672c85050e",avatar:"https://cdn.beatsaver.com/avatar/227767566402191360.png",type:"DISCORD"},metadata:{bpm:119,duration:215,songName:"Los! Los! Los! (German Ver.)",songSubName:"",songAuthorName:"Selphius",levelAuthorName:"Joetastic"},stats:{plays:0,downloads:10730,upvotes:1513,downvotes:19,score:.934},uploaded:"2020-01-25T01:56:05.274Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"cdfd561127d3a71c02af0996c215242fcb789f79",key:"8115",state:"Published",createdAt:"2020-01-25T01:56:05.274Z",sageScore:5,diffs:[{njs:12,offset:0,notes:723,bombs:26,obstacles:13,nps:3.468,length:413.5,characteristic:"Standard",difficulty:"Hard",events:4753,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:208.487,paritySummary:{errors:27,warns:29,resets:4}},{njs:16,offset:0,notes:974,bombs:16,obstacles:25,nps:4.672,length:413.5,characteristic:"Standard",difficulty:"Expert",events:4753,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:208.487,paritySummary:{errors:21,warns:12,resets:4}},{njs:20,offset:.5,notes:1098,bombs:16,obstacles:14,nps:5.267,length:413.5,characteristic:"Standard",difficulty:"ExpertPlus",events:4753,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:208.487,paritySummary:{errors:20,warns:13,resets:2}}],downloadURL:"https://cdn.beatsaver.com/cdfd561127d3a71c02af0996c215242fcb789f79.zip",coverURL:"https://cdn.beatsaver.com/cdfd561127d3a71c02af0996c215242fcb789f79.jpg",previewURL:"https://cdn.beatsaver.com/cdfd561127d3a71c02af0996c215242fcb789f79.mp3"}],createdAt:"2020-01-25T01:56:05.274Z",updatedAt:"2020-01-25T01:56:05.274Z",lastPublishedAt:"2020-01-25T01:56:05.274Z"},{id:"31fa",name:"Joji - SLOW DANCING IN THE DARK",description:"89 BPM / 3:31 Runtime\r\nEasy / 223 Notes\r\nNormal / 327 Notes\r\nHard / 441 Notes\r\nExpert / 631 Notes\r\nExpert+ / ???\r\n\r\nIf this lags your computer, I'm sorry! I tried the best I could to add the walls while also optimizing for performance. Try playing with No Obstacles, that will fix the issue. Should be fine for most people.\r\n\r\nGameplay: https://youtu.be/Pweso54qcwk",uploader:{id:4284981,name:"skylerwallace",uniqueSet:!0,hash:"5cff0b7298cc5a672c84ea67",avatar:"https://cdn.beatsaver.com/avatar/398344856868487168.png",type:"DISCORD"},metadata:{bpm:89,duration:212,songName:"SLOW DANCING IN THE DARK",songSubName:"Joji",songAuthorName:"Skyler Wallace",levelAuthorName:"skylerwallace"},stats:{plays:0,downloads:7575,upvotes:2691,downvotes:61,score:.9338},uploaded:"2019-01-28T22:17:59Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"c983fa1786f03be4965b2319daa86f74ce0be831",key:"31fa",state:"Published",createdAt:"2019-01-28T22:17:59Z",sageScore:6,diffs:[{njs:12,offset:0,notes:223,bombs:0,obstacles:55,nps:1.095,length:302,characteristic:"Standard",difficulty:"Easy",events:2312,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:203.596,paritySummary:{errors:75,warns:8,resets:0}},{njs:10,offset:0,notes:327,bombs:0,obstacles:55,nps:1.601,length:303,characteristic:"Standard",difficulty:"Normal",events:2312,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:204.27,paritySummary:{errors:79,warns:25,resets:0}},{njs:12,offset:0,notes:441,bombs:0,obstacles:165,nps:2.159,length:303,characteristic:"Standard",difficulty:"Hard",events:2312,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:204.27,paritySummary:{errors:55,warns:38,resets:0}},{njs:12,offset:0,notes:631,bombs:16,obstacles:258,nps:3.099,length:302,characteristic:"Standard",difficulty:"Expert",events:2312,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:203.596,paritySummary:{errors:49,warns:46,resets:4}}],downloadURL:"https://cdn.beatsaver.com/c983fa1786f03be4965b2319daa86f74ce0be831.zip",coverURL:"https://cdn.beatsaver.com/c983fa1786f03be4965b2319daa86f74ce0be831.jpg",previewURL:"https://cdn.beatsaver.com/c983fa1786f03be4965b2319daa86f74ce0be831.mp3"}],createdAt:"2019-01-28T22:17:59Z",updatedAt:"2019-01-28T22:17:59Z",lastPublishedAt:"2019-01-28T22:17:59Z"},{id:"32d4",name:"MariannE (Lanota Edit) - Yooh",description:"Lanota Edit (2:43)\r\nNotes per Second / Video Play-through (All Full Combo):\r\nEasy: 1.4 / https://streamable.com/6y473\r\nNormal: 1.5 / https://streamable.com/ctc6c\r\nHard: 2.6 / https://streamable.com/ot9ws\r\nExpert: 3.8 / https://streamable.com/4gsdz\r\nExpert+: 6.1 / https://streamable.com/rizv3 (1st Person) \r\n\r\nThe jump in difficulty from Expert to Expert+ is substantial, so watch out!\r\nAll difficulties as always!",uploader:{id:11373,name:"redmagi",uniqueSet:!0,hash:"5cff0b7298cc5a672c84e9d2",avatar:"https://www.gravatar.com/avatar/5cff0b7298cc5a672c84e9d2?d=retro",type:"SIMPLE"},metadata:{bpm:191,duration:164,songName:"MariannE (Lanota Edit)",songSubName:"Yooh",songAuthorName:"Redmagi",levelAuthorName:"redmagi"},stats:{plays:0,downloads:7763,upvotes:5249,downvotes:168,score:.9337},uploaded:"2019-02-01T16:17:26Z",automapper:!1,ranked:!0,qualified:!1,versions:[{hash:"afb47d1abb417a76a4293d29a725d6dd74d76782",key:"32d4",state:"Published",createdAt:"2019-02-01T16:17:26Z",sageScore:8,diffs:[{njs:10,offset:1,notes:235,bombs:0,obstacles:2,nps:1.508,length:496,characteristic:"Standard",difficulty:"Easy",events:8433,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:155.812,paritySummary:{errors:19,warns:19,resets:0},stars:.94},{njs:12,offset:1,notes:246,bombs:32,obstacles:6,nps:1.579,length:496,characteristic:"Standard",difficulty:"Normal",events:8433,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:155.812,paritySummary:{errors:19,warns:24,resets:5},stars:1.08},{njs:14,offset:1,notes:435,bombs:48,obstacles:4,nps:2.792,length:496,characteristic:"Standard",difficulty:"Hard",events:8435,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:155.812,paritySummary:{errors:23,warns:37,resets:10},stars:1.65},{njs:16,offset:1,notes:622,bombs:86,obstacles:4,nps:3.992,length:496,characteristic:"Standard",difficulty:"Expert",events:8433,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:155.812,paritySummary:{errors:43,warns:39,resets:5},stars:2.64},{njs:18,offset:0,notes:1011,bombs:0,obstacles:0,nps:6.489,length:496,characteristic:"Standard",difficulty:"ExpertPlus",events:8431,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:155.812,paritySummary:{errors:44,warns:71,resets:0},stars:5.71}],downloadURL:"https://cdn.beatsaver.com/afb47d1abb417a76a4293d29a725d6dd74d76782.zip",coverURL:"https://cdn.beatsaver.com/afb47d1abb417a76a4293d29a725d6dd74d76782.jpg",previewURL:"https://cdn.beatsaver.com/afb47d1abb417a76a4293d29a725d6dd74d76782.mp3"}],createdAt:"2019-02-01T16:17:26Z",updatedAt:"2019-02-01T16:17:26Z",lastPublishedAt:"2019-02-01T16:17:26Z"},{id:"a68b",name:"[Noodle Touhou] Masayoshi Minoshima - Bad Apple!! (Nhato Remix)",description:"Expert+ Preview: https://www.youtube.com/watch?v=CpfdPKtiYXs\n\nThis song makes me nostalgic to my first exposure to Touhou. I hope this brings back that nostalgia in a new light before we all fade to black.\n\nThis map is part of the first Touhou map pack brought to you by the Ramen Noodle mapper group! It contains all sorts of covers, arrangements and remix of the original Touhou soundtrack. We hope you enjoy it a lot!\nCheckout the playlist here: https://bsaber.com/noodle-touhou/\n\nComments? Like it? Hate it? Let me know on Discord @Bloodcloak#5725 !",uploader:{id:71661,name:"bloodcloak",uniqueSet:!0,hash:"5cff0b7698cc5a672c8551d3",avatar:"https://cdn.beatsaver.com/avatar/205707707187986442.png",type:"DISCORD"},metadata:{bpm:138,duration:369,songName:"Bad Apple!!",songSubName:"ft. nomico (Nhato Remix)",songAuthorName:"Masayoshi Minoshima",levelAuthorName:"Bloodcloak"},stats:{plays:0,downloads:6326,upvotes:2755,downvotes:64,score:.9336},uploaded:"2020-05-15T18:01:27.405Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"3b86d374847b41800d8b3aebb2043138db06ad64",key:"a68b",state:"Published",createdAt:"2020-05-15T18:01:27.405Z",sageScore:4,diffs:[{njs:12,offset:.7,notes:1161,bombs:0,obstacles:307,nps:3.21,length:832,characteristic:"Standard",difficulty:"Hard",events:6683,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:361.739,paritySummary:{errors:6,warns:6,resets:0}},{njs:16,offset:0,notes:1341,bombs:0,obstacles:281,nps:3.707,length:832,characteristic:"Standard",difficulty:"Expert",events:6683,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:361.739,paritySummary:{errors:7,warns:9,resets:0}},{njs:20,offset:-.4,notes:1560,bombs:0,obstacles:239,nps:4.312,length:832.063,characteristic:"Standard",difficulty:"ExpertPlus",events:6683,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:361.766,paritySummary:{errors:16,warns:24,resets:0}}],downloadURL:"https://cdn.beatsaver.com/3b86d374847b41800d8b3aebb2043138db06ad64.zip",coverURL:"https://cdn.beatsaver.com/3b86d374847b41800d8b3aebb2043138db06ad64.jpg",previewURL:"https://cdn.beatsaver.com/3b86d374847b41800d8b3aebb2043138db06ad64.mp3"}],createdAt:"2020-05-15T18:01:27.405Z",updatedAt:"2020-05-15T18:01:27.405Z",lastPublishedAt:"2020-05-15T18:01:27.405Z"},{id:"1ff4",name:"Sheppard - Geronimo (100K Contest)",description:"This community is amazing, in just 6 months we've reached 100,000 members with no signs of slowing down. To celebrate, this map was created with 21 others to bring you the 100K contest! Here, you can win over $7000 in prizes!!\r\n\r\nTo enter, you need to go to the following website and download the mod installer: https://bsaber.com/100k-contest/\r\n\r\nThe competition is now over, but the maps remain!\r\nVideo Preview: https://www.youtube.com/watch?v=k4nEgDrI0vU",uploader:{id:4785,name:"stumi",uniqueSet:!1,hash:"5cff0b7398cc5a672c84f720",avatar:"https://www.gravatar.com/avatar/5cff0b7398cc5a672c84f720?d=retro",type:"SIMPLE"},metadata:{bpm:142,duration:219,songName:"Geronimo",songSubName:"Sheppard",songAuthorName:"Stumi",levelAuthorName:"stumi"},stats:{plays:0,downloads:6998,upvotes:2775,downvotes:65,score:.9336},uploaded:"2018-11-12T18:28:10Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"41a84fc21bdbfea8ca03021237662596d798f662",key:"1ff4",state:"Published",createdAt:"2018-11-12T18:28:10Z",sageScore:5,diffs:[{njs:10,offset:0,notes:293,bombs:20,obstacles:21,nps:1.421,length:488,characteristic:"Standard",difficulty:"Easy",events:1188,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:206.197,paritySummary:{errors:29,warns:16,resets:0}},{njs:10,offset:0,notes:338,bombs:20,obstacles:21,nps:1.639,length:488,characteristic:"Standard",difficulty:"Normal",events:1188,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:206.197,paritySummary:{errors:32,warns:26,resets:0}},{njs:10,offset:0,notes:570,bombs:20,obstacles:21,nps:2.764,length:488,characteristic:"Standard",difficulty:"Hard",events:1190,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:206.197,paritySummary:{errors:33,warns:30,resets:0}},{njs:12,offset:0,notes:707,bombs:20,obstacles:21,nps:3.429,length:488,characteristic:"Standard",difficulty:"Expert",events:1192,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:206.197,paritySummary:{errors:55,warns:50,resets:0}}],downloadURL:"https://cdn.beatsaver.com/41a84fc21bdbfea8ca03021237662596d798f662.zip",coverURL:"https://cdn.beatsaver.com/41a84fc21bdbfea8ca03021237662596d798f662.jpg",previewURL:"https://cdn.beatsaver.com/41a84fc21bdbfea8ca03021237662596d798f662.mp3"}],createdAt:"2018-11-12T18:28:10Z",updatedAt:"2018-11-12T18:28:10Z",lastPublishedAt:"2018-11-12T18:28:10Z"},{id:"4e86",name:"Zero to Hero - Hercules",description:"E+ FC: https://www.youtube.com/watch?v=SVzMwvrsQa0",uploader:{id:4285169,name:"ryger",uniqueSet:!0,hash:"5cff0b7798cc5a672c855a42",avatar:"https://cdn.beatsaver.com/avatar/169266024502263808.png",type:"DISCORD"},metadata:{bpm:120,duration:140,songName:"Zero to Hero",songSubName:"Hercules",songAuthorName:"Ryger",levelAuthorName:"Ryger"},stats:{plays:0,downloads:5259,upvotes:2235,downvotes:45,score:.9334},uploaded:"2019-05-22T16:18:18Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"0b4cda7dd0b19972b9965f7c39ad3a04ceb9f110",key:"4e86",state:"Published",createdAt:"2019-05-22T16:18:18Z",sageScore:2,diffs:[{njs:12,offset:0,notes:477,bombs:0,obstacles:0,nps:3.529,length:376.19,characteristic:"Standard",difficulty:"Hard",events:2354,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:188.095,paritySummary:{errors:26,warns:16,resets:0}},{njs:14,offset:0,notes:604,bombs:0,obstacles:0,nps:4.469,length:376.19,characteristic:"Standard",difficulty:"Expert",events:2354,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:188.095,paritySummary:{errors:30,warns:19,resets:0}},{njs:15,offset:0,notes:644,bombs:0,obstacles:0,nps:4.752,length:377.206,characteristic:"Standard",difficulty:"ExpertPlus",events:2354,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:188.603,paritySummary:{errors:30,warns:32,resets:0}}],downloadURL:"https://cdn.beatsaver.com/0b4cda7dd0b19972b9965f7c39ad3a04ceb9f110.zip",coverURL:"https://cdn.beatsaver.com/0b4cda7dd0b19972b9965f7c39ad3a04ceb9f110.jpg",previewURL:"https://cdn.beatsaver.com/0b4cda7dd0b19972b9965f7c39ad3a04ceb9f110.mp3"}],createdAt:"2019-05-22T16:18:18Z",updatedAt:"2019-05-22T16:18:18Z",lastPublishedAt:"2019-05-22T16:18:18Z"},{id:"3700",name:"U Got That",description:"",uploader:{id:27874,name:"serenity",uniqueSet:!0,hash:"5cff0b7798cc5a672c855426",avatar:"https://www.gravatar.com/avatar/5cff0b7798cc5a672c855426?d=retro",type:"SIMPLE"},metadata:{bpm:124,duration:190,songName:"U Got That",songSubName:"Halogen",songAuthorName:"Serenity",levelAuthorName:"Serenity"},stats:{plays:0,downloads:6766,upvotes:7958,downvotes:296,score:.9334},uploaded:"2019-02-17T05:53:20Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"b671c2401d1b8af29efe71e448f586223e6ca70a",key:"3700",state:"Published",createdAt:"2019-02-17T05:53:20Z",sageScore:5,diffs:[{njs:10,offset:0,notes:732,bombs:24,obstacles:55,nps:3.96,length:382,characteristic:"Standard",difficulty:"Expert",events:1040,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:184.839,paritySummary:{errors:108,warns:73,resets:0}}],downloadURL:"https://cdn.beatsaver.com/b671c2401d1b8af29efe71e448f586223e6ca70a.zip",coverURL:"https://cdn.beatsaver.com/b671c2401d1b8af29efe71e448f586223e6ca70a.jpg",previewURL:"https://cdn.beatsaver.com/b671c2401d1b8af29efe71e448f586223e6ca70a.mp3"}],createdAt:"2019-02-17T05:53:20Z",updatedAt:"2019-02-17T05:53:20Z",lastPublishedAt:"2019-02-17T05:53:20Z"},{id:"77e9",name:"Jingo Jungle [Saga of Tanya the Evil Opening] - AmaLee",description:'AmaLee\'s English cover of "Jingo Jungle", the opening from Saga of Tanya the Evil (Youjo Senki). Original song by MYTH & ROID.',uploader:{id:58338,name:"Joetastic",uniqueSet:!0,hash:"5cff0b7498cc5a672c85050e",avatar:"https://cdn.beatsaver.com/avatar/227767566402191360.png",type:"DISCORD"},metadata:{bpm:130,duration:225,songName:"Jingo Jungle",songSubName:"",songAuthorName:"AmaLee",levelAuthorName:"Joetastic"},stats:{plays:0,downloads:2875,upvotes:1595,downvotes:23,score:.9333},uploaded:"2019-12-21T02:44:34.295Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"f90a2e4f8ee7b1f33543cddccb8baea660253d4a",key:"77e9",state:"Published",createdAt:"2019-12-21T02:44:34.295Z",sageScore:5,diffs:[{njs:12,offset:0,notes:581,bombs:104,obstacles:28,nps:2.647,length:475.5,characteristic:"Standard",difficulty:"Hard",events:5987,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:219.462,paritySummary:{errors:35,warns:15,resets:10}},{njs:15,offset:0,notes:950,bombs:78,obstacles:14,nps:4.329,length:475.5,characteristic:"Standard",difficulty:"Expert",events:5987,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:219.462,paritySummary:{errors:42,warns:48,resets:8}},{njs:17,offset:0,notes:1184,bombs:105,obstacles:17,nps:5.395,length:475.5,characteristic:"Standard",difficulty:"ExpertPlus",events:5987,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:219.462,paritySummary:{errors:32,warns:43,resets:16}}],downloadURL:"https://cdn.beatsaver.com/f90a2e4f8ee7b1f33543cddccb8baea660253d4a.zip",coverURL:"https://cdn.beatsaver.com/f90a2e4f8ee7b1f33543cddccb8baea660253d4a.jpg",previewURL:"https://cdn.beatsaver.com/f90a2e4f8ee7b1f33543cddccb8baea660253d4a.mp3"}],createdAt:"2019-12-21T02:44:34.295Z",updatedAt:"2019-12-21T02:44:34.295Z",lastPublishedAt:"2019-12-21T02:44:34.295Z"},{id:"16ff",name:"Little Swing - AronChupa",description:"Preview: https://youtu.be/_IERvrKBKB0\r\nI wasn't happy with all the other versions of this song, so I made my own.",uploader:{id:4285668,name:"connorjc",uniqueSet:!0,hash:"5cff0b7398cc5a672c84fb89",avatar:"https://cdn.beatsaver.com/avatar/99724057217355776.png",type:"DISCORD"},metadata:{bpm:126,duration:165,songName:"Little Swing",songSubName:"AronChupa feat. Little Sis Nora",songAuthorName:"ConnorJC",levelAuthorName:"ConnorJC"},stats:{plays:0,downloads:4721,upvotes:2877,downvotes:70,score:.9333},uploaded:"2018-09-24T14:51:17Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"235336f468a6290c87d724616e9b1d952ae3b8f2",key:"16ff",state:"Published",createdAt:"2018-09-24T14:51:17Z",sageScore:4,diffs:[{njs:12,offset:0,notes:669,bombs:0,obstacles:28,nps:4.216,length:333.25,characteristic:"Standard",difficulty:"Expert",events:460,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:158.69,paritySummary:{errors:37,warns:55,resets:0}}],downloadURL:"https://cdn.beatsaver.com/235336f468a6290c87d724616e9b1d952ae3b8f2.zip",coverURL:"https://cdn.beatsaver.com/235336f468a6290c87d724616e9b1d952ae3b8f2.jpg",previewURL:"https://cdn.beatsaver.com/235336f468a6290c87d724616e9b1d952ae3b8f2.mp3"}],createdAt:"2018-09-24T14:51:17Z",updatedAt:"2018-09-24T14:51:17Z",lastPublishedAt:"2018-09-24T14:51:17Z"},{id:"1230",name:"Hymn for the Weekend - Coldplay",description:"Hymn for the weekend by Coldplay\r\nBPM: 90 (AHH SLOW)\r\nRuntime: 4m3s\r\nDifficulties: Easy, Normal, Hard, Expert\r\n\r\nDemo : https://vimeo.com/286997137",uploader:{id:47059,name:"rocket",uniqueSet:!0,hash:"5cff0b7398cc5a672c84f1c0",avatar:"https://www.gravatar.com/avatar/5cff0b7398cc5a672c84f1c0?d=retro",type:"SIMPLE"},metadata:{bpm:90,duration:244,songName:"Hymn For The Weekend",songSubName:"Coldplay",songAuthorName:"Rocket",levelAuthorName:"rocket"},stats:{plays:0,downloads:9700,upvotes:3156,downvotes:81,score:.9333},uploaded:"2018-08-28T01:41:15Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"f050cd142882f102226efb614cca3a1ac1368fff",key:"1230",state:"Published",createdAt:"2018-08-28T01:41:15Z",sageScore:5,diffs:[{njs:12,offset:0,notes:202,bombs:0,obstacles:8,nps:.935,length:324,characteristic:"Standard",difficulty:"Easy",events:892,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:216,paritySummary:{errors:35,warns:7,resets:0}},{njs:12,offset:0,notes:377,bombs:0,obstacles:8,nps:1.745,length:324,characteristic:"Standard",difficulty:"Normal",events:895,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:216,paritySummary:{errors:49,warns:39,resets:0}},{njs:12,offset:0,notes:573,bombs:0,obstacles:8,nps:2.617,length:328.375,characteristic:"Standard",difficulty:"Hard",events:893,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:218.917,paritySummary:{errors:50,warns:56,resets:0}},{njs:12,offset:0,notes:729,bombs:0,obstacles:8,nps:3.33,length:328.375,characteristic:"Standard",difficulty:"Expert",events:893,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:218.917,paritySummary:{errors:78,warns:87,resets:0}}],downloadURL:"https://cdn.beatsaver.com/f050cd142882f102226efb614cca3a1ac1368fff.zip",coverURL:"https://cdn.beatsaver.com/f050cd142882f102226efb614cca3a1ac1368fff.jpg",previewURL:"https://cdn.beatsaver.com/f050cd142882f102226efb614cca3a1ac1368fff.mp3"}],createdAt:"2018-08-28T01:41:15Z",updatedAt:"2018-08-28T01:41:15Z",lastPublishedAt:"2018-08-28T01:41:15Z"},{id:"276a",name:"Ain't Nothin' like a Funky Beat - Hideki Naganuma",description:"BAH BAH BAAAH BAH\r\nBAHBAH BUBAH BAH BAH BAAAAH BAH\r\nAint nothin like a funky beat\r\nMy Camera plus mod wasnt working :(\r\n\r\nDifficulties - Expert, Hard, Normal, , Easy\r\nBPM - 142\r\nPreview: https://youtu.be/92pCsIPxv10",uploader:{id:47059,name:"rocket",uniqueSet:!0,hash:"5cff0b7398cc5a672c84f1c0",avatar:"https://www.gravatar.com/avatar/5cff0b7398cc5a672c84f1c0?d=retro",type:"SIMPLE"},metadata:{bpm:142,duration:205,songName:"AIN'T NOTHIN' LIKE A FUNKY BEAT",songSubName:"Hideki Naganuma",songAuthorName:"Rocket",levelAuthorName:"rocket"},stats:{plays:0,downloads:5635,upvotes:2795,downvotes:67,score:.9332},uploaded:"2018-12-22T17:07:11Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"a2c21a3a478f14422185f77cc8f9030f638fcf06",key:"276a",state:"Published",createdAt:"2018-12-22T17:07:11Z",sageScore:6,diffs:[{njs:15,offset:0,notes:237,bombs:0,obstacles:14,nps:1.214,length:462,characteristic:"Standard",difficulty:"Easy",events:1171,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:195.211,paritySummary:{errors:30,warns:16,resets:0}},{njs:15,offset:0,notes:441,bombs:0,obstacles:14,nps:2.239,length:466.25,characteristic:"Standard",difficulty:"Normal",events:1171,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:197.007,paritySummary:{errors:75,warns:40,resets:0}},{njs:15,offset:0,notes:684,bombs:0,obstacles:14,nps:3.472,length:466.25,characteristic:"Standard",difficulty:"Hard",events:1171,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:197.007,paritySummary:{errors:70,warns:95,resets:0}},{njs:15,offset:0,notes:838,bombs:0,obstacles:14,nps:4.254,length:466.25,characteristic:"Standard",difficulty:"Expert",events:1171,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:197.007,paritySummary:{errors:66,warns:76,resets:0}}],downloadURL:"https://cdn.beatsaver.com/a2c21a3a478f14422185f77cc8f9030f638fcf06.zip",coverURL:"https://cdn.beatsaver.com/a2c21a3a478f14422185f77cc8f9030f638fcf06.jpg",previewURL:"https://cdn.beatsaver.com/a2c21a3a478f14422185f77cc8f9030f638fcf06.mp3"}],createdAt:"2018-12-22T17:07:11Z",updatedAt:"2018-12-22T17:07:11Z",lastPublishedAt:"2018-12-22T17:07:11Z"},{id:"46d4",name:"Rap God - Eminem",description:"",uploader:{id:4285169,name:"ryger",uniqueSet:!0,hash:"5cff0b7798cc5a672c855a42",avatar:"https://cdn.beatsaver.com/avatar/169266024502263808.png",type:"DISCORD"},metadata:{bpm:148,duration:366,songName:"Rap God",songSubName:"Eminem",songAuthorName:"Ryger",levelAuthorName:"Ryger"},stats:{plays:0,downloads:17173,upvotes:8866,downvotes:344,score:.933},uploaded:"2019-04-18T16:38:34Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"a38fd8581eb892cc7090f78bfe61e9c256478cf3",key:"46d4",state:"Published",createdAt:"2019-04-18T16:38:34Z",sageScore:6,diffs:[{njs:15,offset:0,notes:2060,bombs:6,obstacles:2,nps:5.724,length:887.75,characteristic:"Standard",difficulty:"Expert",events:9351,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:359.899,paritySummary:{errors:80,warns:66,resets:0}},{njs:15,offset:0,notes:2060,bombs:6,obstacles:2,nps:5.724,length:887.75,characteristic:"Standard",difficulty:"ExpertPlus",events:9351,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:359.899,paritySummary:{errors:80,warns:70,resets:0}}],downloadURL:"https://cdn.beatsaver.com/a38fd8581eb892cc7090f78bfe61e9c256478cf3.zip",coverURL:"https://cdn.beatsaver.com/a38fd8581eb892cc7090f78bfe61e9c256478cf3.jpg",previewURL:"https://cdn.beatsaver.com/a38fd8581eb892cc7090f78bfe61e9c256478cf3.mp3"}],createdAt:"2019-04-18T16:38:34Z",updatedAt:"2019-04-18T16:38:34Z",lastPublishedAt:"2019-04-18T16:38:34Z"},{id:"1188e",name:"Fox Stevenson - All Eyes On Me",description:"Man I love Stan, had a lot of fun making this :p\n\nhas Chroma lights",uploader:{id:4284201,name:"nitronikexe",uniqueSet:!0,hash:"5cff0b7798cc5a672c855d84",avatar:"https://cdn.beatsaver.com/avatar/428230049704181760.png",type:"DISCORD"},metadata:{bpm:172,duration:181,songName:"All Eyes On Me",songSubName:"",songAuthorName:"Fox Stevenson",levelAuthorName:"nitronik.exe"},stats:{plays:0,downloads:7649,upvotes:1891,downvotes:34,score:.9328},uploaded:"2020-11-30T15:14:16.512Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"77300a040e85107d5a745f2f9f2e5ced43205f4a",key:"1188e",state:"Published",createdAt:"2020-11-30T15:14:16.512Z",sageScore:5,diffs:[{njs:14,offset:1,notes:491,bombs:12,obstacles:66,nps:2.779,length:506.5,characteristic:"Standard",difficulty:"Hard",events:4370,chroma:!0,me:!1,ne:!1,cinema:!1,seconds:176.686,paritySummary:{errors:0,warns:0,resets:6}},{njs:17,offset:.2,notes:748,bombs:0,obstacles:27,nps:4.213,length:509,characteristic:"Standard",difficulty:"Expert",events:4370,chroma:!0,me:!1,ne:!1,cinema:!1,seconds:177.558,paritySummary:{errors:0,warns:0,resets:0}},{njs:21,offset:-.3,notes:951,bombs:0,obstacles:27,nps:5.382,length:506.5,characteristic:"Standard",difficulty:"ExpertPlus",events:4370,chroma:!0,me:!1,ne:!1,cinema:!1,seconds:176.686,paritySummary:{errors:0,warns:0,resets:0}}],downloadURL:"https://cdn.beatsaver.com/77300a040e85107d5a745f2f9f2e5ced43205f4a.zip",coverURL:"https://cdn.beatsaver.com/77300a040e85107d5a745f2f9f2e5ced43205f4a.jpg",previewURL:"https://cdn.beatsaver.com/77300a040e85107d5a745f2f9f2e5ced43205f4a.mp3"}],createdAt:"2020-11-30T15:14:16.512Z",updatedAt:"2020-11-30T15:14:16.512Z",lastPublishedAt:"2020-11-30T15:14:16.512Z"},{id:"2c3",name:"Koto - Clozee",description:"Here it is finally, Koto - Clozee from LIV's announcement featuring their depth camera so you don't have to have a green screen! https://twitter.com/LIV/status/1001490921295417345\r\n\r\nIf you love my maps and want to support me, heres my patreon!\r\nhttps://www.patreon.com/purphorosVR",uploader:{id:49373,name:"purphoros",uniqueSet:!0,hash:"5cff0b7298cc5a672c84ea98",avatar:"https://www.gravatar.com/avatar/5cff0b7298cc5a672c84ea98?d=retro",type:"SIMPLE"},metadata:{bpm:100,duration:253,songName:"Koto",songSubName:"CloZee",songAuthorName:"Purphoros",levelAuthorName:"purphoros"},stats:{plays:0,downloads:5247,upvotes:3689,downvotes:105,score:.9328},uploaded:"2018-05-29T17:19:09Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"c1638525606ecb7aea6d6a71d124aa79296ab842",key:"2c3",state:"Published",createdAt:"2018-05-29T17:19:09Z",sageScore:4,diffs:[{njs:10,offset:0,notes:858,bombs:0,obstacles:12,nps:3.575,length:400,characteristic:"Standard",difficulty:"Expert",events:72,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:240,paritySummary:{errors:108,warns:55,resets:0}}],downloadURL:"https://cdn.beatsaver.com/c1638525606ecb7aea6d6a71d124aa79296ab842.zip",coverURL:"https://cdn.beatsaver.com/c1638525606ecb7aea6d6a71d124aa79296ab842.jpg",previewURL:"https://cdn.beatsaver.com/c1638525606ecb7aea6d6a71d124aa79296ab842.mp3"}],createdAt:"2018-05-29T17:19:09Z",updatedAt:"2018-05-29T17:19:09Z",lastPublishedAt:"2018-05-29T17:19:09Z"},{id:"15b16",name:"Codly - Lucy, The God Of Time [Wall Map]",description:"This map has 2 diffs Expert and ExpertPlus\nExpert - Reddek\nExpertPlus - shan_man\n\nLink to preview: https://youtu.be/_LUXKlcpue4\n\nLink to original song: https://youtu.be/kyCXzxmebB4\nSong By: Codly and Sakuzyo\n\nOkay, I put way to much time into this...\n\nHuge thanks to Shan_Man for making a diff in this\n\nAlso thank you Reaxt for your help with the last drop\n\nMade with \n-Demo.js script\n-ScuffedWalls\n\nshan_man: https://beatsaver.com/uploader/5ec5aaa616c9680006500e0a\n\nWould love some feedback in the dms!:\nReddek#5864\nshan_man#7777",uploader:{id:4233941,name:"reddek",uniqueSet:!0,hash:"5dbfb4426dea0b0006bd328d",avatar:"https://cdn.beatsaver.com/avatar/177436487086768129.png",type:"DISCORD"},metadata:{bpm:170,duration:267,songName:"Lucy, The God of Time",songSubName:"",songAuthorName:"Codly",levelAuthorName:"Shan_Man & Reddek"},stats:{plays:0,downloads:3574,upvotes:1185,downvotes:11,score:.9327},uploaded:"2021-03-21T02:47:31.861Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"dd4a025f814b8570f2726939b1c5b000ed210ecf",key:"15b16",state:"Published",createdAt:"2021-03-21T02:47:31.861Z",sageScore:3,diffs:[{njs:20,offset:-.4,notes:873,bombs:117,obstacles:4342,nps:3.654,length:677,characteristic:"Standard",difficulty:"Expert",events:31216,chroma:!0,me:!1,ne:!0,cinema:!1,seconds:238.941,paritySummary:{errors:0,warns:0,resets:3}},{njs:20,offset:-.4,notes:1353,bombs:44,obstacles:4342,nps:5.662,length:677,characteristic:"Standard",difficulty:"ExpertPlus",events:31217,chroma:!0,me:!1,ne:!0,cinema:!1,seconds:238.941,paritySummary:{errors:0,warns:0,resets:3}}],downloadURL:"https://cdn.beatsaver.com/dd4a025f814b8570f2726939b1c5b000ed210ecf.zip",coverURL:"https://cdn.beatsaver.com/dd4a025f814b8570f2726939b1c5b000ed210ecf.jpg",previewURL:"https://cdn.beatsaver.com/dd4a025f814b8570f2726939b1c5b000ed210ecf.mp3"}],createdAt:"2021-03-21T02:47:31.861Z",updatedAt:"2021-03-21T02:47:31.861Z",lastPublishedAt:"2021-03-21T02:47:31.861Z"},{id:"2c3e",name:"Pump It - Black Eyed Peas",description:"Map #9. This was a special request by RedMagi, and he certainly deserves it for tirelessly testing all the other garbage we throw at him. Baxter with the funky patterns, RedMagi with some challenging streams in Expert+, and ALSO the amazing lighting effects! (Oh and of course a heck of a lot of play testing and feedback for fine tuning.) Hope you enjoy it as much as we do.\r\n\r\nAlso a big thank you to all our playtesters for the useful feedback: ManDynasty, Trolav, Crankor, Scrappy, and TurtleSquared\r\n\r\nhttps://youtu.be/YJnL0gq1z7s (Easy)\r\nhttps://youtu.be/U0DIjo4_ZE0 (Normal)\r\nhttps://youtu.be/zks4TgpfoR4 (Hard)\r\nhttps://youtu.be/rRq_fHRSCoI (Expert 3rd person)\r\nhttps://youtu.be/9ThPg99Xm9A (Expert 1st person)\r\nhttps://youtu.be/NPOPWH8bb10 (Expert+)",uploader:{id:27595,name:"baxter395",uniqueSet:!0,hash:"5cff0b7598cc5a672c852f7b",avatar:"https://www.gravatar.com/avatar/5cff0b7598cc5a672c852f7b?d=retro",type:"SIMPLE"},metadata:{bpm:154,duration:215,songName:"Pump It",songSubName:"Black Eyed Peas",songAuthorName:"baxter395 (M) RedMagi (M, L)",levelAuthorName:"baxter395"},stats:{plays:0,downloads:12322,upvotes:4839,downvotes:156,score:.9327},uploaded:"2019-01-09T05:13:56Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"2884021451135e751d3c442ae92243697744b349",key:"2c3e",state:"Published",createdAt:"2019-01-09T05:13:56Z",sageScore:4,diffs:[{njs:10,offset:0,notes:306,bombs:0,obstacles:15,nps:1.144,length:686.679,characteristic:"Standard",difficulty:"Easy",events:9156,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:267.537,paritySummary:{errors:72,warns:22,resets:0}},{njs:11,offset:0,notes:393,bombs:0,obstacles:22,nps:1.877,length:537.407,characteristic:"Standard",difficulty:"Normal",events:9156,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:209.38,paritySummary:{errors:77,warns:43,resets:0}},{njs:12,offset:0,notes:583,bombs:0,obstacles:16,nps:2.779,length:538.36,characteristic:"Standard",difficulty:"Hard",events:9156,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:209.751,paritySummary:{errors:63,warns:68,resets:0}},{njs:16,offset:0,notes:890,bombs:40,obstacles:59,nps:4.243,length:538.36,characteristic:"Standard",difficulty:"Expert",events:9156,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:209.751,paritySummary:{errors:88,warns:125,resets:7}},{njs:18,offset:0,notes:1048,bombs:24,obstacles:63,nps:4.996,length:538.392,characteristic:"Standard",difficulty:"ExpertPlus",events:9156,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:209.763,paritySummary:{errors:93,warns:104,resets:2}}],downloadURL:"https://cdn.beatsaver.com/2884021451135e751d3c442ae92243697744b349.zip",coverURL:"https://cdn.beatsaver.com/2884021451135e751d3c442ae92243697744b349.jpg",previewURL:"https://cdn.beatsaver.com/2884021451135e751d3c442ae92243697744b349.mp3"}],createdAt:"2019-01-09T05:13:56Z",updatedAt:"2019-01-09T05:13:56Z",lastPublishedAt:"2019-01-09T05:13:56Z"},{id:"3f38",name:"Sk8er Boi - Avril Lavigne",description:'"Sk8er Boi" (pronounced "skater boy") is a song by Canadian singer-songwriter Avril Lavigne.\r\n\r\nThis song was on my list of songs to map and I was excited when I saw someone had made one today, and after playing it I decided to make my own map of it.',uploader:{id:58338,name:"Joetastic",uniqueSet:!0,hash:"5cff0b7498cc5a672c85050e",avatar:"https://cdn.beatsaver.com/avatar/227767566402191360.png",type:"DISCORD"},metadata:{bpm:150,duration:206,songName:"Sk8er Boi",songSubName:"Avril Lavigne",songAuthorName:"Joetastic",levelAuthorName:"Joetastic"},stats:{plays:0,downloads:8202,upvotes:2443,downvotes:55,score:.9326},uploaded:"2019-03-20T18:01:26Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"1078f8128effc0b79f19adf2b7aeed613afabac6",key:"3f38",state:"Published",createdAt:"2019-03-20T18:01:26Z",sageScore:6,diffs:[{njs:15,offset:0,notes:893,bombs:0,obstacles:0,nps:4.71,length:474,characteristic:"Standard",difficulty:"Expert",events:1410,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:189.6,paritySummary:{errors:41,warns:34,resets:0}}],downloadURL:"https://cdn.beatsaver.com/1078f8128effc0b79f19adf2b7aeed613afabac6.zip",coverURL:"https://cdn.beatsaver.com/1078f8128effc0b79f19adf2b7aeed613afabac6.jpg",previewURL:"https://cdn.beatsaver.com/1078f8128effc0b79f19adf2b7aeed613afabac6.mp3"}],createdAt:"2019-03-20T18:01:26Z",updatedAt:"2019-03-20T18:01:26Z",lastPublishedAt:"2019-03-20T18:01:26Z"},{id:"19f3",name:"PONPONPON - Kyary Pamyu Pamyu",description:"Everyday PON\nEvery time is PON\n\nExpert is relatively easy, pretty close to OST standards\nHard is pretty close to OST as well\nNormal -- first time doing Normal, give any feedback on bsaber dot com\n\nExpert Preview: https://youtu.be/4AMzxcWDqPM\nFollow me on Twitter u won't\nhttps://twitter.com/aggrogahu\n\nShoutout to Geb and RedMagi for playtesting",uploader:{id:4284613,name:"aggrogahu",uniqueSet:!0,hash:"5cff0b7398cc5a672c84fdad",avatar:"https://cdn.beatsaver.com/avatar/158363872649150464.png",type:"DISCORD"},metadata:{bpm:128,duration:247,songName:"PONPONPON",songSubName:"Kyary Pamyu Pamyu",songAuthorName:"aggrogahu",levelAuthorName:"aggrogahu"},stats:{plays:0,downloads:4544,upvotes:2285,downvotes:49,score:.9326},uploaded:"2018-10-12T23:21:38Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"c1b08e5c05c9e6dad4096f3ff04d1e0497a0a339",key:"19f3",state:"Published",createdAt:"2018-10-12T23:21:38Z",sageScore:4,diffs:[{njs:10,offset:0,notes:432,bombs:2,obstacles:38,nps:1.832,length:503,characteristic:"Standard",difficulty:"Normal",events:636,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:235.781,paritySummary:{errors:101,warns:37,resets:1}},{njs:10,offset:0,notes:541,bombs:1,obstacles:38,nps:2.29,length:504,characteristic:"Standard",difficulty:"Hard",events:636,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:236.25,paritySummary:{errors:133,warns:61,resets:0}},{njs:10,offset:0,notes:714,bombs:2,obstacles:48,nps:3.022,length:504,characteristic:"Standard",difficulty:"Expert",events:636,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:236.25,paritySummary:{errors:120,warns:84,resets:0}}],downloadURL:"https://cdn.beatsaver.com/c1b08e5c05c9e6dad4096f3ff04d1e0497a0a339.zip",coverURL:"https://cdn.beatsaver.com/c1b08e5c05c9e6dad4096f3ff04d1e0497a0a339.jpg",previewURL:"https://cdn.beatsaver.com/c1b08e5c05c9e6dad4096f3ff04d1e0497a0a339.mp3"}],createdAt:"2018-10-12T23:21:38Z",updatedAt:"2018-10-12T23:21:38Z",lastPublishedAt:"2018-10-12T23:21:38Z"},{id:"11b7a",name:"Still Alive - Portal",description:"I've wanted to map this song for a while now. And since this one's probably the last Portal song I'll map, I gave it my best. \r\n\r\nP.S. - I'm so glad to be back mapping this month. I had to take a break due to overwhelming stress, but now I'm feeling ready again.\r\nI hope you enjoy.\r\n\r\nPortal on Steam:\r\nhttps://store.steampowered.com/app/400/Portal/",uploader:{id:4284694,name:"jokidum",uniqueSet:!0,hash:"5e15518d47f1600006e912cc",avatar:"https://cdn.beatsaver.com/avatar/494282373094047745.png",type:"DISCORD"},metadata:{bpm:120,duration:176,songName:"Still Alive",songSubName:"- Portal",songAuthorName:"Jonathan Coulton",levelAuthorName:"Jokidum"},stats:{plays:0,downloads:5965,upvotes:1927,downvotes:36,score:.9325},uploaded:"2020-12-04T20:30:44.132Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"8c03b43484b0dd1fc7d8a3104a82f0992a001c6c",key:"11b7a",state:"Published",createdAt:"2020-12-04T20:30:44.132Z",sageScore:4,diffs:[{njs:12,offset:0,notes:490,bombs:0,obstacles:13,nps:2.853,length:343.5,characteristic:"Standard",difficulty:"Expert",events:1060,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:171.75,paritySummary:{errors:0,warns:0,resets:0}},{njs:16,offset:0,notes:0,bombs:0,obstacles:0,nps:0,length:0,characteristic:"Lightshow",difficulty:"Easy",events:1060,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:0,paritySummary:{errors:0,warns:0,resets:0}}],downloadURL:"https://cdn.beatsaver.com/8c03b43484b0dd1fc7d8a3104a82f0992a001c6c.zip",coverURL:"https://cdn.beatsaver.com/8c03b43484b0dd1fc7d8a3104a82f0992a001c6c.jpg",previewURL:"https://cdn.beatsaver.com/8c03b43484b0dd1fc7d8a3104a82f0992a001c6c.mp3"}],createdAt:"2020-12-04T20:30:44.132Z",updatedAt:"2020-12-04T20:30:44.132Z",lastPublishedAt:"2020-12-04T20:30:44.132Z"},{id:"1ff9",name:"Thaehan - Circus | - 100k Contest",description:"This is one of the 22 maps that were mapped for the 100k Contest where you can win over $7,000 in prizes. Go to https://bsaber.com/100k-contest/ to register!\r\n\r\nI have changed some parts of the map since\r\n\r\nPreview: https://www.youtube.com/watch?v=e4stySCsNIM",uploader:{id:4286278,name:"ruckus",uniqueSet:!0,hash:"5cff0b7398cc5a672c84f1d8",avatar:"https://cdn.beatsaver.com/avatar/239082462083284992.png",type:"DISCORD"},metadata:{bpm:196,duration:148,songName:"Circus",songSubName:"Thaehan",songAuthorName:"Ruckus",levelAuthorName:"ruckus"},stats:{plays:0,downloads:4649,upvotes:2448,downvotes:56,score:.9324},uploaded:"2018-11-12T20:35:47Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"e2934fbc194a51aa3579613bd88dc47503016c8a",key:"1ff9",state:"Published",createdAt:"2018-11-12T20:35:47Z",sageScore:7,diffs:[{njs:11,offset:0,notes:251,bombs:0,obstacles:12,nps:1.83,length:448,characteristic:"Standard",difficulty:"Easy",events:2733,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:137.143,paritySummary:{errors:0,warns:0,resets:0}},{njs:11,offset:0,notes:462,bombs:0,obstacles:0,nps:3.369,length:448,characteristic:"Standard",difficulty:"Normal",events:2735,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:137.143,paritySummary:{errors:29,warns:27,resets:0}},{njs:12,offset:0,notes:513,bombs:0,obstacles:0,nps:3.741,length:448,characteristic:"Standard",difficulty:"Hard",events:2735,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:137.143,paritySummary:{errors:62,warns:42,resets:0}},{njs:14,offset:0,notes:719,bombs:0,obstacles:0,nps:5.24,length:448.273,characteristic:"Standard",difficulty:"Expert",events:2736,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:137.226,paritySummary:{errors:60,warns:73,resets:0}},{njs:17,offset:0,notes:739,bombs:0,obstacles:0,nps:5.386,length:448.25,characteristic:"Standard",difficulty:"ExpertPlus",events:3278,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:137.219,paritySummary:{errors:58,warns:79,resets:0}}],downloadURL:"https://cdn.beatsaver.com/e2934fbc194a51aa3579613bd88dc47503016c8a.zip",coverURL:"https://cdn.beatsaver.com/e2934fbc194a51aa3579613bd88dc47503016c8a.jpg",previewURL:"https://cdn.beatsaver.com/e2934fbc194a51aa3579613bd88dc47503016c8a.mp3"}],createdAt:"2018-11-12T20:35:47Z",updatedAt:"2018-11-12T20:35:47Z",lastPublishedAt:"2018-11-12T20:35:47Z"},{id:"943e",name:"The Only Thing They Fear is You - Mick Gordon DOOM OST",description:"THE 360 MAP REQUIRES THE MAPPING EXTENSIONS MOD FOR BEAT SABER v1.8.0 OR GREATER (the Timbaland Update). OLDER VERSIONS OF MAPPING EXTENSIONS WILL NOT WORK.\n\nEpilepsy warning. Play with Static Lights or dim Custom Colors if prone to epileptic attacks.\nLightshow nerfed on Hard, Expert, and 360 difficulties.\n\nThis map’s Custom Colors are enabled via SongCore. To disable them, go to Mod Settings > SongCore from the ingame Main Menu.\n\n103 BPM / 3:20 Duration\n\nStandard (No Mapping Extensions)\nI'm too young to die - 482 notes (2.41 NPS)\nHurt me plenty - 603 notes (3.02 NPS)\nUltra-Violence - 713 notes (3.57 NPS)\n\n360 (Mapping Extensions)\nNightmare - 713 notes (3.57 NPS) ~6k rotations\n\nLightshow (No Mapping Extensions / SongCore required)\nLightshow - 20359 events\n\nTougeVR's Mixed Reality Playthrough: https://youtu.be/8arRphzeiDE\nMapping Extensions for pre-v1.8.0: https://drive.google.com/file/d/1-59-n3OLqNk4LOZ7MHo9AJ87-2__tEFo/view?usp=sharing",uploader:{id:4284981,name:"skylerwallace",uniqueSet:!0,hash:"5cff0b7298cc5a672c84ea67",avatar:"https://cdn.beatsaver.com/avatar/398344856868487168.png",type:"DISCORD"},metadata:{bpm:103,duration:200,songName:"The Only Thing They Fear is You",songSubName:"",songAuthorName:"Mick Gordon",levelAuthorName:"Skyler Wallace"},stats:{plays:0,downloads:13590,upvotes:4650,downvotes:150,score:.9322},uploaded:"2020-03-27T08:59:46.875Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"ac3976bd01d289aaacf03423706010e843a824d5",key:"943e",state:"Published",createdAt:"2020-03-27T08:59:46.875Z",sageScore:6,diffs:[{njs:13,offset:-.25,notes:482,bombs:370,obstacles:376,nps:2.556,length:323.688,characteristic:"Standard",difficulty:"Hard",events:17272,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:188.556,paritySummary:{errors:25,warns:33,resets:0}},{njs:16,offset:.5,notes:603,bombs:721,obstacles:375,nps:3.193,length:324.187,characteristic:"Standard",difficulty:"Expert",events:17272,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:188.847,paritySummary:{errors:3,warns:10,resets:97}},{njs:19,offset:.25,notes:713,bombs:769,obstacles:379,nps:3.635,length:336.689,characteristic:"Standard",difficulty:"ExpertPlus",events:20359,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:196.13,paritySummary:{errors:10,warns:52,resets:95}},{njs:19,offset:.25,notes:713,bombs:7824,obstacles:9601,nps:3.623,length:337.843,characteristic:"360Degree",difficulty:"ExpertPlus",events:25883,chroma:!1,me:!0,ne:!1,cinema:!1,seconds:196.802,paritySummary:{errors:0,warns:0,resets:0}},{njs:10,offset:0,notes:0,bombs:0,obstacles:0,nps:0,length:0,characteristic:"Lightshow",difficulty:"Easy",events:20359,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:0,paritySummary:{errors:0,warns:0,resets:0}}],downloadURL:"https://cdn.beatsaver.com/ac3976bd01d289aaacf03423706010e843a824d5.zip",coverURL:"https://cdn.beatsaver.com/ac3976bd01d289aaacf03423706010e843a824d5.jpg",previewURL:"https://cdn.beatsaver.com/ac3976bd01d289aaacf03423706010e843a824d5.mp3"}],createdAt:"2020-03-27T08:59:46.875Z",updatedAt:"2020-03-27T08:59:46.875Z",lastPublishedAt:"2020-03-27T08:59:46.875Z"},{id:"4274",name:"Flesh - Nightcore (RubyChan)",description:"BPM: 152.674\r\nNPS: N: 1.92 H: 2.91 E: 3.71 E+: 4.26\r\nNotes: N: 425 H: 644 E: 819 E+: 942\r\nWalls: N: 80 H:82 E:96 E+: 85\r\nBombs: N: 20 H:34 E: 50 E+: 60\r\n\r\nNormal/Hard tend to follow the beat, while Expert/Expert+ tend to follow the vocals. Thanks to Redmagi and helencarnate for play testing!",uploader:{id:4285188,name:"fruhead",uniqueSet:!0,hash:"5cff0b7598cc5a672c852683",avatar:"https://cdn.beatsaver.com/avatar/174000100413145090.png",type:"DISCORD"},metadata:{bpm:153,duration:221,songName:"Flesh",songSubName:"Nighctore (RubyChan)",songAuthorName:"fruhead",levelAuthorName:"fruhead"},stats:{plays:0,downloads:3291,upvotes:1693,downvotes:29,score:.9319},uploaded:"2019-03-31T18:25:07Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"0acc713b47e8228b242fb42c0db29959014f8124",key:"4274",state:"Published",createdAt:"2019-03-31T18:25:07Z",sageScore:3,diffs:[{njs:12,offset:0,notes:425,bombs:20,obstacles:80,nps:2.116,length:511,characteristic:"Standard",difficulty:"Normal",events:7207,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:200.392,paritySummary:{errors:13,warns:0,resets:10}},{njs:14,offset:0,notes:644,bombs:34,obstacles:82,nps:3.207,length:511,characteristic:"Standard",difficulty:"Hard",events:7207,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:200.392,paritySummary:{errors:14,warns:14,resets:18}},{njs:16,offset:0,notes:819,bombs:50,obstacles:96,nps:4.078,length:511,characteristic:"Standard",difficulty:"Expert",events:7207,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:200.392,paritySummary:{errors:32,warns:56,resets:19}},{njs:16,offset:0,notes:942,bombs:60,obstacles:85,nps:4.691,length:511,characteristic:"Standard",difficulty:"ExpertPlus",events:7207,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:200.392,paritySummary:{errors:23,warns:66,resets:23}}],downloadURL:"https://cdn.beatsaver.com/0acc713b47e8228b242fb42c0db29959014f8124.zip",coverURL:"https://cdn.beatsaver.com/0acc713b47e8228b242fb42c0db29959014f8124.jpg",previewURL:"https://cdn.beatsaver.com/0acc713b47e8228b242fb42c0db29959014f8124.mp3"}],createdAt:"2019-03-31T18:25:07Z",updatedAt:"2019-03-31T18:25:07Z",lastPublishedAt:"2019-03-31T18:25:07Z"},{id:"5fda",name:"Mr. Blue Sky",description:"After a certain streamer asked for this to be re-made I put it on my list, needed a break from the current harder maps I'm working on so made this feel-good classic. Hope you enjoy :D\n\nSpecial thanks to those who tested, especially Sehria for her suggestions, and thanks to my little sister for testing Hard diff :P",uploader:{id:4285633,name:"edmard",uniqueSet:!0,hash:"5cff0b7798cc5a672c856604",avatar:"https://cdn.beatsaver.com/avatar/157188812462620672.png",type:"DISCORD"},metadata:{bpm:174,duration:222,songName:"Mr. Blue Sky",songSubName:"",songAuthorName:"Electric Light Orchestra",levelAuthorName:"Edmard"},stats:{plays:0,downloads:4883,upvotes:2486,downvotes:59,score:.9318},uploaded:"2019-08-28T15:45:05.788Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"0039a0c02e9e0ac1761445caadefdfdd989f5316",key:"5fda",state:"Published",createdAt:"2019-08-28T15:45:05.788Z",sageScore:5,diffs:[{njs:14,offset:0,notes:742,bombs:0,obstacles:24,nps:3.579,length:601.25,characteristic:"Standard",difficulty:"Hard",events:816,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:207.328,paritySummary:{errors:2,warns:2,resets:0}},{njs:16,offset:0,notes:772,bombs:0,obstacles:28,nps:3.724,length:601.25,characteristic:"Standard",difficulty:"Expert",events:816,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:207.328,paritySummary:{errors:2,warns:2,resets:0}}],downloadURL:"https://cdn.beatsaver.com/0039a0c02e9e0ac1761445caadefdfdd989f5316.zip",coverURL:"https://cdn.beatsaver.com/0039a0c02e9e0ac1761445caadefdfdd989f5316.jpg",previewURL:"https://cdn.beatsaver.com/0039a0c02e9e0ac1761445caadefdfdd989f5316.mp3"}],createdAt:"2019-08-28T15:45:05.788Z",updatedAt:"2019-08-28T15:45:05.788Z",lastPublishedAt:"2019-08-28T15:45:05.788Z"},{id:"57c2",name:"Rockefeller Street (Nightcore) - Getter Jaani",description:"Hey this is reuploaded since it broke before\nhave fun",uploader:{id:16388,name:"rinkusenpai",uniqueSet:!0,hash:"5cff0b7398cc5a672c84f6cc",avatar:"https://www.gravatar.com/avatar/5cff0b7398cc5a672c84f6cc?d=retro",type:"SIMPLE"},metadata:{bpm:162.5,duration:145,songName:"Rockefeller Street (Nightcore)",songSubName:"",songAuthorName:"Getter Jaani",levelAuthorName:"RinkuSenpai"},stats:{plays:0,downloads:10267,upvotes:7867,downvotes:306,score:.9318},uploaded:"2019-07-18T21:40:09.204Z",automapper:!1,ranked:!0,qualified:!1,versions:[{hash:"b8c98ffc598703aadb4a3cb921d2830d270b57a5",key:"57c2",state:"Published",createdAt:"2019-07-18T21:40:09.204Z",sageScore:6,diffs:[{njs:13,offset:0,notes:545,bombs:0,obstacles:8,nps:3.884,length:380,characteristic:"Standard",difficulty:"Hard",events:2247,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:140.308,paritySummary:{errors:73,warns:61,resets:0},stars:3.06},{njs:17,offset:0,notes:709,bombs:0,obstacles:6,nps:5.053,length:380,characteristic:"Standard",difficulty:"Expert",events:2247,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:140.308,paritySummary:{errors:87,warns:75,resets:0},stars:4.39}],downloadURL:"https://cdn.beatsaver.com/b8c98ffc598703aadb4a3cb921d2830d270b57a5.zip",coverURL:"https://cdn.beatsaver.com/b8c98ffc598703aadb4a3cb921d2830d270b57a5.jpg",previewURL:"https://cdn.beatsaver.com/b8c98ffc598703aadb4a3cb921d2830d270b57a5.mp3"}],createdAt:"2019-07-18T21:40:09.204Z",updatedAt:"2019-07-18T21:40:09.204Z",lastPublishedAt:"2019-07-18T21:40:09.204Z"},{id:"2693",name:"I Want You - DJMAX",description:"I love this song.",uploader:{id:4285521,name:"ejiejidayo",uniqueSet:!0,hash:"5cff0b7398cc5a672c84fc58",avatar:"https://cdn.beatsaver.com/avatar/224894241279574016.png",type:"DISCORD"},metadata:{bpm:140,duration:109,songName:"I Want You",songSubName:"DJMAX",songAuthorName:"ejiejidayo",levelAuthorName:"ejiejidayo"},stats:{plays:0,downloads:6675,upvotes:2356,downvotes:54,score:.9318},uploaded:"2018-12-18T12:09:51Z",automapper:!1,ranked:!0,qualified:!1,versions:[{hash:"bb9de13539a2ab9a21f7ff68a2669f7887011456",key:"2693",state:"Published",createdAt:"2018-12-18T12:09:51Z",sageScore:4,diffs:[{njs:11,offset:0,notes:115,bombs:0,obstacles:25,nps:1.209,length:222,characteristic:"Standard",difficulty:"Easy",events:108,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:95.143,paritySummary:{errors:23,warns:12,resets:0},stars:1.08},{njs:12,offset:0,notes:173,bombs:0,obstacles:24,nps:1.786,length:226.031,characteristic:"Standard",difficulty:"Normal",events:108,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:96.871,paritySummary:{errors:13,warns:18,resets:0},stars:1.26},{njs:13,offset:0,notes:225,bombs:2,obstacles:42,nps:2.292,length:229.031,characteristic:"Standard",difficulty:"Hard",events:108,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:98.156,paritySummary:{errors:15,warns:24,resets:0},stars:1.71},{njs:14,offset:0,notes:405,bombs:2,obstacles:32,nps:4.126,length:229.031,characteristic:"Standard",difficulty:"Expert",events:106,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:98.156,paritySummary:{errors:33,warns:80,resets:0},stars:2.85}],downloadURL:"https://cdn.beatsaver.com/bb9de13539a2ab9a21f7ff68a2669f7887011456.zip",coverURL:"https://cdn.beatsaver.com/bb9de13539a2ab9a21f7ff68a2669f7887011456.jpg",previewURL:"https://cdn.beatsaver.com/bb9de13539a2ab9a21f7ff68a2669f7887011456.mp3"}],createdAt:"2018-12-18T12:09:51Z",updatedAt:"2018-12-18T12:09:51Z",lastPublishedAt:"2018-12-18T12:09:51Z"},{id:"a907",name:"[TheFatRat Pack] Monody (ft. Laura Brehm) - TheFatRat",description:'Here it is! The unofficial "TheFatRat" Music Pack in Beat Saber - with all beatmaps being singlehandedly made by me!\n\nAll songs included in TheFatRat Music Pack:\nMonody (ft. Laura Brehm) \nUnity \nWindfall \nXenogenesis \nTime Lapse \n\nGet the full song pack here: https://bsaber.com/thefatrat-music-pack/\n(Or you should just be able to find all the other ones on my beatsaver profile as well. Heres a link to my profile: https://beatsaver.com/uploader/5d47d586c5301900060b2f6c)\n\nSongcore mod is recommended (for custom colours)\nPlays best on Origins Environment\n\nMonody Stats:\nExpert+ - 1058 Notes | 3.73 NPS\nExpert - 907 Notes | 3.19 NPS\nHard - 677 Notes | 2.38 NPS\nNormal - 421 Notes | 1.48 NPS\nEasy - 283 Notes | 1.00 NPS\n\nRoughly 11-12 Hours of work\nGameplay: https://youtu.be/5LvJXf4Co4w\n\nObviously - A huge thanks to TheFatRat himself, for not only producing the songs in the first place (and allowing free access to use them for big and small content creators), but also being a huge inspiration to lots of artists out there and for making music that everyone can jam out to! We love you, TheFatRat!',uploader:{id:4284197,name:"timeweaver",uniqueSet:!0,hash:"5d47d586c5301900060b2f6c",avatar:"https://cdn.beatsaver.com/avatar/607399708121366529.png",type:"DISCORD"},metadata:{bpm:107,duration:283,songName:"Monody",songSubName:"ft. Laura Brehm",songAuthorName:"TheFatRat",levelAuthorName:"Timeweaver"},stats:{plays:0,downloads:9449,upvotes:2084,downvotes:44,score:.9316},uploaded:"2020-05-22T13:28:13.182Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"8e82872941abe8c99e9ac86d9c063fc5aee57d52",key:"a907",state:"Published",createdAt:"2020-05-22T13:28:13.182Z",sageScore:7,diffs:[{njs:10,offset:1,notes:283,bombs:0,obstacles:63,nps:1.048,length:481.689,characteristic:"Standard",difficulty:"Easy",events:3844,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:270.106,paritySummary:{errors:43,warns:21,resets:0}},{njs:10,offset:1,notes:421,bombs:0,obstacles:62,nps:1.559,length:481.689,characteristic:"Standard",difficulty:"Normal",events:3844,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:270.106,paritySummary:{errors:33,warns:16,resets:0}},{njs:12,offset:.25,notes:677,bombs:0,obstacles:61,nps:2.507,length:481.656,characteristic:"Standard",difficulty:"Hard",events:3844,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:270.087,paritySummary:{errors:8,warns:6,resets:0}},{njs:15,offset:-.3,notes:907,bombs:0,obstacles:58,nps:3.358,length:481.689,characteristic:"Standard",difficulty:"Expert",events:3844,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:270.106,paritySummary:{errors:5,warns:3,resets:0}},{njs:18,offset:.4,notes:1058,bombs:0,obstacles:59,nps:3.917,length:481.689,characteristic:"Standard",difficulty:"ExpertPlus",events:3844,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:270.106,paritySummary:{errors:0,warns:0,resets:0}}],downloadURL:"https://cdn.beatsaver.com/8e82872941abe8c99e9ac86d9c063fc5aee57d52.zip",coverURL:"https://cdn.beatsaver.com/8e82872941abe8c99e9ac86d9c063fc5aee57d52.jpg",previewURL:"https://cdn.beatsaver.com/8e82872941abe8c99e9ac86d9c063fc5aee57d52.mp3"}],createdAt:"2020-05-22T13:28:13.182Z",updatedAt:"2020-05-22T13:28:13.182Z",lastPublishedAt:"2020-05-22T13:28:13.182Z"},{id:"9cd2",name:"Grant - Are We Still Young",description:"i can't get enough grant in my life, send help\r\n\r\nif you don't like dodge walls, check the lawless diff @whipstickgostop",uploader:{id:4284569,name:"checkthepan",uniqueSet:!0,hash:"5cff0b7398cc5a672c84f3d5",avatar:"https://cdn.beatsaver.com/avatar/184355369189900290.png",type:"DISCORD"},metadata:{bpm:110,duration:216,songName:"Are We Still Young",songSubName:"",songAuthorName:"grant",levelAuthorName:"Checkthepan"},stats:{plays:0,downloads:6474,upvotes:1642,downvotes:28,score:.9315},uploaded:"2020-04-19T21:24:40.430Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"d03086c064a4546e4c5bfe6ef79545850fd1ac98",key:"9cd2",state:"Published",createdAt:"2020-04-19T21:24:40.430Z",sageScore:7,diffs:[{njs:10,offset:0,notes:270,bombs:0,obstacles:14,nps:1.292,length:383,characteristic:"Standard",difficulty:"Easy",events:8571,chroma:!0,me:!1,ne:!1,cinema:!1,seconds:208.909,paritySummary:{errors:88,warns:19,resets:0}},{njs:10,offset:0,notes:407,bombs:0,obstacles:13,nps:1.948,length:383,characteristic:"Standard",difficulty:"Normal",events:8571,chroma:!0,me:!1,ne:!1,cinema:!1,seconds:208.909,paritySummary:{errors:51,warns:15,resets:0}},{njs:12,offset:0,notes:576,bombs:0,obstacles:140,nps:2.746,length:384.5,characteristic:"Standard",difficulty:"Hard",events:8571,chroma:!0,me:!1,ne:!1,cinema:!1,seconds:209.727,paritySummary:{errors:4,warns:3,resets:0}},{njs:15,offset:-.25,notes:721,bombs:16,obstacles:138,nps:3.442,length:384,characteristic:"Standard",difficulty:"Expert",events:8571,chroma:!0,me:!1,ne:!1,cinema:!1,seconds:209.455,paritySummary:{errors:0,warns:0,resets:3}},{njs:17,offset:.2,notes:928,bombs:46,obstacles:186,nps:4.431,length:384,characteristic:"Standard",difficulty:"ExpertPlus",events:8571,chroma:!0,me:!1,ne:!1,cinema:!1,seconds:209.455,paritySummary:{errors:0,warns:0,resets:5}},{njs:10,offset:0,notes:0,bombs:0,obstacles:0,nps:0,length:0,characteristic:"Lightshow",difficulty:"Easy",events:8571,chroma:!0,me:!1,ne:!1,cinema:!1,seconds:0,paritySummary:{errors:0,warns:0,resets:0}},{njs:17,offset:.2,notes:928,bombs:46,obstacles:145,nps:4.431,length:384,characteristic:"Lawless",difficulty:"ExpertPlus",events:8571,chroma:!0,me:!1,ne:!1,cinema:!1,seconds:209.455,paritySummary:{errors:0,warns:0,resets:5}}],downloadURL:"https://cdn.beatsaver.com/d03086c064a4546e4c5bfe6ef79545850fd1ac98.zip",coverURL:"https://cdn.beatsaver.com/d03086c064a4546e4c5bfe6ef79545850fd1ac98.jpg",previewURL:"https://cdn.beatsaver.com/d03086c064a4546e4c5bfe6ef79545850fd1ac98.mp3"}],createdAt:"2020-04-19T21:24:40.430Z",updatedAt:"2020-04-19T21:24:40.430Z",lastPublishedAt:"2020-04-19T21:24:40.430Z"},{id:"6d63",name:"Take on Me - a-ha",description:"This song may be older than I am, but it still rocks even to this date. This made me compelled in making a map worthy of it for modern times. Mapped in a similar dancy style as some of my other maps.\n\nAudio: The album version is used but with the music video ending/outro.\n\nPreview Video:\nhttps://youtu.be/ouhgRepxZMk\n\nBPM: 168-169\nDuration: 3:39\nEasy, Normal, Hard and Expert difficulties:\n\nEasy:\n277 notes, 29 obstacles, 0 mines\n\nNormal:\n359 notes, 26 obstacles, 0 mines\n\nHard:\n549 notes, 26 obstacles, 0 mines\n\nExpert:\n852 notes, 23 obstacles, 0 mines\n\nThanks to Jessi81, Thomas, Kival Evan, Redmagi and Storm Knight for playtesting!\n\nEnjoy!",uploader:{id:4285318,name:"kolezan",uniqueSet:!0,hash:"5cff0b7398cc5a672c84fcbb",avatar:"https://cdn.beatsaver.com/avatar/220513618763055106.png",type:"DISCORD"},metadata:{bpm:168.868,duration:219,songName:"Take On Me",songSubName:"",songAuthorName:"A-ha",levelAuthorName:"Kolezan"},stats:{plays:0,downloads:15253,upvotes:3615,downvotes:108,score:.9314},uploaded:"2019-11-01T07:20:59.352Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"ac7d867dccb85bd28eea0787eda92c25f849dcef",key:"6d63",state:"Published",createdAt:"2019-11-01T07:20:59.352Z",sageScore:6,diffs:[{njs:10,offset:1,notes:277,bombs:0,obstacles:29,nps:1.325,length:588.521,characteristic:"Standard",difficulty:"Easy",events:2868,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:209.106,paritySummary:{errors:63,warns:26,resets:0}},{njs:12,offset:1,notes:359,bombs:0,obstacles:26,nps:1.711,length:590.521,characteristic:"Standard",difficulty:"Normal",events:2868,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:209.816,paritySummary:{errors:63,warns:61,resets:0}},{njs:15,offset:1,notes:549,bombs:0,obstacles:26,nps:2.617,length:590.521,characteristic:"Standard",difficulty:"Hard",events:2868,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:209.816,paritySummary:{errors:62,warns:70,resets:0}},{njs:18,offset:1,notes:852,bombs:0,obstacles:23,nps:4.061,length:590.521,characteristic:"Standard",difficulty:"Expert",events:2868,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:209.816,paritySummary:{errors:30,warns:67,resets:0}}],downloadURL:"https://cdn.beatsaver.com/ac7d867dccb85bd28eea0787eda92c25f849dcef.zip",coverURL:"https://cdn.beatsaver.com/ac7d867dccb85bd28eea0787eda92c25f849dcef.jpg",previewURL:"https://cdn.beatsaver.com/ac7d867dccb85bd28eea0787eda92c25f849dcef.mp3"}],createdAt:"2019-11-01T07:20:59.352Z",updatedAt:"2019-11-01T07:20:59.352Z",lastPublishedAt:"2019-11-01T07:20:59.352Z"},{id:"9956",name:"Or3o - Help Me",description:"Help Me, by Or3o\nThis was really fun to map but took a little longer than expected.\nAnother full diff spread map. Hope you enjoy!\nThanks to the testplayers: Sorukun, Wolfb34, and Johnny Dee",uploader:{id:15650,name:"alzaraf",uniqueSet:!0,hash:"5cff0b7798cc5a672c855ce3",avatar:"https://www.gravatar.com/avatar/5cff0b7798cc5a672c855ce3?d=retro",type:"SIMPLE"},metadata:{bpm:110,duration:188,songName:"Help Me",songSubName:"",songAuthorName:"Or3o",levelAuthorName:"Alzaraf"},stats:{plays:0,downloads:2316,upvotes:1519,downvotes:24,score:.9313},uploaded:"2020-04-10T16:34:49.265Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"c56040e307335a3e7116de76e4f07d472cfe28d3",key:"9956",state:"Published",createdAt:"2020-04-10T16:34:49.265Z",sageScore:7,diffs:[{njs:10,offset:0,notes:216,bombs:0,obstacles:0,nps:1.189,length:333,characteristic:"Standard",difficulty:"Easy",events:2212,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:181.636,paritySummary:{errors:56,warns:2,resets:0}},{njs:12,offset:0,notes:283,bombs:0,obstacles:0,nps:1.558,length:333,characteristic:"Standard",difficulty:"Normal",events:2212,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:181.636,paritySummary:{errors:61,warns:0,resets:0}},{njs:14,offset:0,notes:497,bombs:0,obstacles:0,nps:2.72,length:335,characteristic:"Standard",difficulty:"Hard",events:2212,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:182.727,paritySummary:{errors:28,warns:0,resets:0}},{njs:16,offset:0,notes:729,bombs:0,obstacles:0,nps:3.984,length:335.5,characteristic:"Standard",difficulty:"Expert",events:2212,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:183,paritySummary:{errors:0,warns:0,resets:0}},{njs:19,offset:.3,notes:816,bombs:0,obstacles:0,nps:4.459,length:335.5,characteristic:"Standard",difficulty:"ExpertPlus",events:2212,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:183,paritySummary:{errors:0,warns:0,resets:0}}],downloadURL:"https://cdn.beatsaver.com/c56040e307335a3e7116de76e4f07d472cfe28d3.zip",coverURL:"https://cdn.beatsaver.com/c56040e307335a3e7116de76e4f07d472cfe28d3.jpg",previewURL:"https://cdn.beatsaver.com/c56040e307335a3e7116de76e4f07d472cfe28d3.mp3"}],createdAt:"2020-04-10T16:34:49.265Z",updatedAt:"2020-04-10T16:34:49.265Z",lastPublishedAt:"2020-04-10T16:34:49.265Z"},{id:"6360",name:"Shirobon - Into the Zone",description:"",uploader:{id:12996,name:"rustic",uniqueSet:!0,hash:"5cff0b7298cc5a672c84e8c4",avatar:"https://www.gravatar.com/avatar/5cff0b7298cc5a672c84e8c4?d=retro",type:"SIMPLE"},metadata:{bpm:122,duration:180,songName:"Into the Zone",songSubName:"",songAuthorName:"Shirobon",levelAuthorName:"Rustic"},stats:{plays:0,downloads:2366,upvotes:1312,downvotes:17,score:.9313},uploaded:"2019-09-14T17:32:19.835Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"c22b89db9dfef084c62412def48cdace57226f5e",key:"6360",state:"Published",createdAt:"2019-09-14T17:32:19.835Z",sageScore:6,diffs:[{njs:18,offset:0,notes:428,bombs:0,obstacles:615,nps:2.67,length:326,characteristic:"Standard",difficulty:"Expert",events:5077,chroma:!1,me:!0,ne:!1,cinema:!1,seconds:160.328,paritySummary:{errors:0,warns:0,resets:0}}],downloadURL:"https://cdn.beatsaver.com/c22b89db9dfef084c62412def48cdace57226f5e.zip",coverURL:"https://cdn.beatsaver.com/c22b89db9dfef084c62412def48cdace57226f5e.jpg",previewURL:"https://cdn.beatsaver.com/c22b89db9dfef084c62412def48cdace57226f5e.mp3"}],createdAt:"2019-09-14T17:32:19.835Z",updatedAt:"2019-09-14T17:32:19.835Z",lastPublishedAt:"2019-09-14T17:32:19.835Z"},{id:"7de1",name:"Emergency (Nightcore Mix) - Kim Leoni",description:"78",uploader:{id:4285521,name:"ejiejidayo",uniqueSet:!0,hash:"5cff0b7398cc5a672c84fc58",avatar:"https://cdn.beatsaver.com/avatar/224894241279574016.png",type:"DISCORD"},metadata:{bpm:174,duration:148,songName:"Emergency (Nightcore Mix)",songSubName:"",songAuthorName:"Kim Leoni",levelAuthorName:"ejiejidayo"},stats:{plays:0,downloads:7439,upvotes:2274,downvotes:52,score:.9313},uploaded:"2020-01-12T09:33:57.766Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"c28ac0c2eac67c79b893ba3a1f432a27dd3a368b",key:"7de1",state:"Published",createdAt:"2020-01-12T09:33:57.766Z",sageScore:4,diffs:[{njs:14,offset:.6,notes:542,bombs:58,obstacles:187,nps:3.806,length:413,characteristic:"Standard",difficulty:"Easy",events:1749,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:142.414,paritySummary:{errors:67,warns:79,resets:23}},{njs:13,offset:0,notes:428,bombs:0,obstacles:126,nps:3.005,length:413,characteristic:"Standard",difficulty:"Hard",events:1749,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:142.414,paritySummary:{errors:2,warns:2,resets:0}},{njs:16,offset:.1,notes:599,bombs:0,obstacles:126,nps:4.196,length:414,characteristic:"Standard",difficulty:"Expert",events:1749,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:142.759,paritySummary:{errors:14,warns:44,resets:0}},{njs:17,offset:0,notes:805,bombs:0,obstacles:126,nps:5.639,length:414,characteristic:"Standard",difficulty:"ExpertPlus",events:1749,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:142.759,paritySummary:{errors:18,warns:27,resets:0}}],downloadURL:"https://cdn.beatsaver.com/c28ac0c2eac67c79b893ba3a1f432a27dd3a368b.zip",coverURL:"https://cdn.beatsaver.com/c28ac0c2eac67c79b893ba3a1f432a27dd3a368b.jpg",previewURL:"https://cdn.beatsaver.com/c28ac0c2eac67c79b893ba3a1f432a27dd3a368b.mp3"}],createdAt:"2020-01-12T09:33:57.766Z",updatedAt:"2020-01-12T09:33:57.766Z",lastPublishedAt:"2020-01-12T09:33:57.766Z"},{id:"557f",name:"Enormous Penis - Da Vinci's Notebook",description:"This is my first time working on a A Capella song! which means no instruments and mapping to lyrics or lip noises. which means its usually not following the bpm closely (some parts are 1/8 faster or slower). I did like the challenge though and it was a nice change of pace! Thanks Austin for giving me a reason to try mapping A Capella.\n\n“Enormous Penis” is an A Capella song performed by the group Da Vinci’s Notebook for their album Brontosaurus, which was released in 2002. ",uploader:{id:58338,name:"Joetastic",uniqueSet:!0,hash:"5cff0b7498cc5a672c85050e",avatar:"https://cdn.beatsaver.com/avatar/227767566402191360.png",type:"DISCORD"},metadata:{bpm:119,duration:164,songName:"Enormous Penis",songSubName:"",songAuthorName:"Da Vinci's Notebook",levelAuthorName:"Joetastic"},stats:{plays:0,downloads:2614,upvotes:1367,downvotes:19,score:.9312},uploaded:"2019-07-04T13:21:52.797Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"2b61e7bd12379b9c1c193de7e28d1e816942c948",key:"557f",state:"Published",createdAt:"2019-07-04T13:21:52.797Z",sageScore:5,diffs:[{njs:12,offset:0,notes:518,bombs:55,obstacles:36,nps:3.252,length:315.875,characteristic:"Standard",difficulty:"Hard",events:714,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:159.265,paritySummary:{errors:29,warns:25,resets:10}}],downloadURL:"https://cdn.beatsaver.com/2b61e7bd12379b9c1c193de7e28d1e816942c948.zip",coverURL:"https://cdn.beatsaver.com/2b61e7bd12379b9c1c193de7e28d1e816942c948.jpg",previewURL:"https://cdn.beatsaver.com/2b61e7bd12379b9c1c193de7e28d1e816942c948.mp3"}],createdAt:"2019-07-04T13:21:52.797Z",updatedAt:"2019-07-04T13:21:52.797Z",lastPublishedAt:"2019-07-04T13:21:52.797Z"},{id:"5373",name:"Chito (CV: Minase Inori), Yuuri (CV: Kubo Yurika) - Ugoku, Ugoku",description:"A nice, chill map of the opening to one of my favorite animes to let you know that I haven't stopped mapping yet. I have quite a few maps I've been slowly making progress on and they should be coming out sometime soon!\n\nIn case you need a way to contact me or let me know of any issues: discord.gg/EVU9At2",uploader:{id:4288620,name:"hexagonial",uniqueSet:!0,hash:"5cff0b7398cc5a672c84f2fb",avatar:"https://cdn.beatsaver.com/avatar/221442943045599232.png",type:"DISCORD"},metadata:{bpm:128,duration:91,songName:"Ugoku, Ugoku",songSubName:"",songAuthorName:"Chito (CV: Minase Inori), Yuuri (CV: Kubo Yurika)",levelAuthorName:"Hexagonial"},stats:{plays:0,downloads:3196,upvotes:1684,downvotes:30,score:.9312},uploaded:"2019-06-19T01:42:05.315Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"7ac2bd85723acb7d4fd9957e62a7769700755c04",key:"5373",state:"Published",createdAt:"2019-06-19T01:42:05.315Z",sageScore:7,diffs:[{njs:10,offset:0,notes:95,bombs:8,obstacles:45,nps:1.081,length:187.5,characteristic:"Standard",difficulty:"Easy",events:1220,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:87.891,paritySummary:{errors:0,warns:0,resets:0}},{njs:10,offset:0,notes:152,bombs:8,obstacles:45,nps:1.729,length:187.5,characteristic:"Standard",difficulty:"Normal",events:1220,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:87.891,paritySummary:{errors:14,warns:0,resets:0}},{njs:13,offset:0,notes:243,bombs:4,obstacles:43,nps:2.765,length:187.5,characteristic:"Standard",difficulty:"Hard",events:1220,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:87.891,paritySummary:{errors:8,warns:0,resets:0}},{njs:15,offset:0,notes:326,bombs:0,obstacles:36,nps:3.709,length:187.5,characteristic:"Standard",difficulty:"Expert",events:1220,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:87.891,paritySummary:{errors:0,warns:0,resets:0}},{njs:16,offset:0,notes:393,bombs:0,obstacles:39,nps:4.471,length:187.5,characteristic:"Standard",difficulty:"ExpertPlus",events:1220,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:87.891,paritySummary:{errors:1,warns:9,resets:0}}],downloadURL:"https://cdn.beatsaver.com/7ac2bd85723acb7d4fd9957e62a7769700755c04.zip",coverURL:"https://cdn.beatsaver.com/7ac2bd85723acb7d4fd9957e62a7769700755c04.jpg",previewURL:"https://cdn.beatsaver.com/7ac2bd85723acb7d4fd9957e62a7769700755c04.mp3"}],createdAt:"2019-06-19T01:42:05.315Z",updatedAt:"2019-06-19T01:42:05.315Z",lastPublishedAt:"2019-06-19T01:42:05.315Z"},{id:"10dcc",name:"The Chonk Chart™",description:"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n(account definitely isn't a Mawntee alt account no sir)",uploader:{id:1602,name:"chief-queef",uniqueSet:!0,hash:"5f9a4d2a030219000627c2bf",avatar:"https://cdn.beatsaver.com/avatar/1602.jpg",type:"SIMPLE"},metadata:{bpm:69,duration:23,songName:"Chonk Chart",songSubName:"",songAuthorName:"Gyan Ko",levelAuthorName:"Chief Queef"},stats:{plays:0,downloads:3653,upvotes:1784,downvotes:34,score:.9311},uploaded:"2020-11-12T09:20:18.282Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"b966edcba3f8187dacd633dabbf05e128e57d21b",key:"10dcc",state:"Published",createdAt:"2020-11-12T09:20:18.282Z",sageScore:4,diffs:[{njs:6.9,offset:6.9,notes:7,bombs:0,obstacles:0,nps:.447,length:18,characteristic:"Standard",difficulty:"Easy",events:312,chroma:!0,me:!1,ne:!0,cinema:!1,seconds:15.652,paritySummary:{errors:6,warns:0,resets:0}}],downloadURL:"https://cdn.beatsaver.com/b966edcba3f8187dacd633dabbf05e128e57d21b.zip",coverURL:"https://cdn.beatsaver.com/b966edcba3f8187dacd633dabbf05e128e57d21b.jpg",previewURL:"https://cdn.beatsaver.com/b966edcba3f8187dacd633dabbf05e128e57d21b.mp3"}],createdAt:"2020-11-12T09:20:18.282Z",updatedAt:"2020-11-12T09:20:18.282Z",lastPublishedAt:"2020-11-12T09:20:18.282Z"},{id:"6b8c",name:"TheFatRat - MAYDAY feat. Laura Brehm",description:"--- PLEASE HAVE CHROMALITE INSTALLED FOR THE LIGHTSHOW AND LIGHTING EVENTS ---\n\nExpert+ (M A Y D A Y): Oddloop\nEasy - Expert: RedMagi\nLights: Aaltopahwi",uploader:{id:4284400,name:"oddloop",uniqueSet:!0,hash:"5cff0b7398cc5a672c84fd45",avatar:"https://cdn.beatsaver.com/avatar/173241614192476161.png",type:"DISCORD"},metadata:{bpm:150,duration:249,songName:"MAYDAY",songSubName:"feat. Laura Brehm",songAuthorName:"TheFatRat",levelAuthorName:"Oddloop, RedMagi & AaltopahWi"},stats:{plays:0,downloads:8888,upvotes:4606,downvotes:154,score:.9311},uploaded:"2019-10-22T19:11:34.707Z",automapper:!1,ranked:!0,qualified:!1,versions:[{hash:"58e760690ffb379864d76b06505f4056e84fbe84",key:"6b8c",state:"Published",createdAt:"2019-10-22T19:11:34.707Z",sageScore:8,diffs:[{njs:10,offset:1,notes:251,bombs:0,obstacles:0,nps:1.077,length:582.5,characteristic:"Standard",difficulty:"Easy",events:20350,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:233,paritySummary:{errors:7,warns:6,resets:0},stars:.8},{njs:12,offset:1,notes:434,bombs:0,obstacles:0,nps:1.863,length:582.5,characteristic:"Standard",difficulty:"Normal",events:20350,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:233,paritySummary:{errors:11,warns:10,resets:0},stars:1.16},{njs:14,offset:1,notes:541,bombs:16,obstacles:0,nps:2.322,length:582.5,characteristic:"Standard",difficulty:"Hard",events:20350,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:233,paritySummary:{errors:7,warns:8,resets:1},stars:1.53},{njs:16,offset:.5,notes:769,bombs:12,obstacles:0,nps:3.204,length:600,characteristic:"Standard",difficulty:"Expert",events:20350,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:240,paritySummary:{errors:10,warns:9,resets:1},stars:2.17},{njs:23,offset:.5,notes:1655,bombs:0,obstacles:49,nps:6.896,length:600,characteristic:"Standard",difficulty:"ExpertPlus",events:20314,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:240,paritySummary:{errors:2,warns:0,resets:0},stars:5.3},{njs:10,offset:0,notes:0,bombs:0,obstacles:0,nps:0,length:0,characteristic:"Lightshow",difficulty:"Easy",events:20350,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:0,paritySummary:{errors:0,warns:0,resets:0}}],downloadURL:"https://cdn.beatsaver.com/58e760690ffb379864d76b06505f4056e84fbe84.zip",coverURL:"https://cdn.beatsaver.com/58e760690ffb379864d76b06505f4056e84fbe84.jpg",previewURL:"https://cdn.beatsaver.com/58e760690ffb379864d76b06505f4056e84fbe84.mp3"}],createdAt:"2019-10-22T19:11:34.707Z",updatedAt:"2019-10-22T19:11:34.707Z",lastPublishedAt:"2019-10-22T19:11:34.707Z"},{id:"1ff0",name:"Flux Pavilion - I can't stop | 100k Contest",description:"This is one of the 22 maps that were mapped for the 100k Contest where you can win over $7,000 in prizes. Go to https://bsaber.com/100k-contest/ to register!",uploader:{id:12996,name:"rustic",uniqueSet:!0,hash:"5cff0b7298cc5a672c84e8c4",avatar:"https://www.gravatar.com/avatar/5cff0b7298cc5a672c84e8c4?d=retro",type:"SIMPLE"},metadata:{bpm:140,duration:148,songName:"I can't stop",songSubName:"Flux Pavilion",songAuthorName:"Rustic",levelAuthorName:"rustic"},stats:{plays:0,downloads:11299,upvotes:4364,downvotes:143,score:.9311},uploaded:"2018-11-12T17:55:03Z",automapper:!1,ranked:!0,qualified:!1,versions:[{hash:"8d9df176c94ecf5c7725457525b6f959f5ef9296",key:"1ff0",state:"Published",createdAt:"2018-11-12T17:55:03Z",sageScore:6,diffs:[{njs:10,offset:0,notes:145,bombs:0,obstacles:0,nps:1.057,length:320,characteristic:"Standard",difficulty:"Easy",events:1045,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:137.143,paritySummary:{errors:52,warns:3,resets:0},stars:.69},{njs:10,offset:0,notes:212,bombs:0,obstacles:0,nps:1.546,length:320,characteristic:"Standard",difficulty:"Normal",events:0,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:137.143,paritySummary:{errors:8,warns:17,resets:0},stars:.92},{njs:12,offset:0,notes:342,bombs:0,obstacles:0,nps:2.509,length:318,characteristic:"Standard",difficulty:"Hard",events:2634,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:136.286,paritySummary:{errors:5,warns:29,resets:0},stars:1.78},{njs:14,offset:0,notes:372,bombs:0,obstacles:15,nps:2.73,length:318,characteristic:"Standard",difficulty:"Expert",events:2634,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:136.286,paritySummary:{errors:17,warns:34,resets:0},stars:1.78}],downloadURL:"https://cdn.beatsaver.com/8d9df176c94ecf5c7725457525b6f959f5ef9296.zip",coverURL:"https://cdn.beatsaver.com/8d9df176c94ecf5c7725457525b6f959f5ef9296.jpg",previewURL:"https://cdn.beatsaver.com/8d9df176c94ecf5c7725457525b6f959f5ef9296.mp3"}],createdAt:"2018-11-12T17:55:03Z",updatedAt:"2018-11-12T17:55:03Z",lastPublishedAt:"2018-11-12T17:55:03Z"},{id:"e01a",name:"The Spectre - Wallmap",description:"Have you ever seen a call of duty montage from the early 2010's? maybe Russian guy playing a piano in public? \n \nIf you've ever heard of the name Alan Walker then you've heard of \"The Spectre\" so thanks to some help from a friend I'm here to bring you my newest masterpiece. A song with decently placed blocks... wow you'd think by now id actually do a new song but no. I'm here to fix The Spectre and give it the attention it deserves.\n\nOfficial Release Video:\nhttps://youtu.be/ljxO7plPgpA\n\nLight did a little play-through here if you curious\nhttps://www.youtube.com/watch?v=l4qjiqE-hqQ&t=12s",uploader:{id:3449,name:"rizthesnuggie",uniqueSet:!0,hash:"5f051045c51ba90006d92da9",avatar:"https://www.gravatar.com/avatar/5f051045c51ba90006d92da9?d=retro",type:"SIMPLE"},metadata:{bpm:128,duration:190,songName:"The Spectre",songSubName:"[Non NCS]",songAuthorName:"Alan Walker",levelAuthorName:"Riz and KyleT"},stats:{plays:0,downloads:2423,upvotes:1381,downvotes:20,score:.9309},uploaded:"2020-08-29T19:50:28.236Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"f11409e4e08f2463be65c0e56dfc6f6b00e25aeb",key:"e01a",state:"Published",createdAt:"2020-08-29T19:50:28.236Z",sageScore:1,diffs:[{njs:16,offset:-.5,notes:749,bombs:25,obstacles:34105,nps:4.048,length:394.75,characteristic:"Standard",difficulty:"Expert",events:1,chroma:!0,me:!1,ne:!0,cinema:!1,seconds:185.039,paritySummary:{errors:0,warns:0,resets:0}},{njs:16,offset:-.5,notes:0,bombs:0,obstacles:34105,nps:0,length:0,characteristic:"Lightshow",difficulty:"Expert",events:1,chroma:!0,me:!1,ne:!0,cinema:!1,seconds:0,paritySummary:{errors:0,warns:0,resets:0}}],downloadURL:"https://cdn.beatsaver.com/f11409e4e08f2463be65c0e56dfc6f6b00e25aeb.zip",coverURL:"https://cdn.beatsaver.com/f11409e4e08f2463be65c0e56dfc6f6b00e25aeb.jpg",previewURL:"https://cdn.beatsaver.com/f11409e4e08f2463be65c0e56dfc6f6b00e25aeb.mp3"}],createdAt:"2020-08-29T19:50:28.236Z",updatedAt:"2020-08-29T19:50:28.236Z",lastPublishedAt:"2020-08-29T19:50:28.236Z"},{id:"67a8",name:"world.execute(me); - Mili (Fixed)",description:"71",uploader:{id:4285521,name:"ejiejidayo",uniqueSet:!0,hash:"5cff0b7398cc5a672c84fc58",avatar:"https://cdn.beatsaver.com/avatar/224894241279574016.png",type:"DISCORD"},metadata:{bpm:130,duration:209,songName:"world.execute (me) ;",songSubName:"",songAuthorName:"Mili",levelAuthorName:"ejiejidayo"},stats:{plays:0,downloads:4119,upvotes:1832,downvotes:36,score:.9309},uploaded:"2019-10-03T22:51:56.567Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"cfc9d5013d12adb3ca5e0a4a31d8a06f2081dbe6",key:"67a8",state:"Published",createdAt:"2019-10-03T22:51:56.567Z",sageScore:5,diffs:[{njs:15,offset:0,notes:462,bombs:0,obstacles:610,nps:2.239,length:447,characteristic:"Standard",difficulty:"Hard",events:1025,chroma:!1,me:!0,ne:!1,cinema:!1,seconds:206.308,paritySummary:{errors:0,warns:0,resets:0}},{njs:16,offset:0,notes:984,bombs:0,obstacles:610,nps:4.764,length:447.5,characteristic:"Standard",difficulty:"Expert",events:1025,chroma:!1,me:!0,ne:!1,cinema:!1,seconds:206.538,paritySummary:{errors:0,warns:0,resets:0}}],downloadURL:"https://cdn.beatsaver.com/cfc9d5013d12adb3ca5e0a4a31d8a06f2081dbe6.zip",coverURL:"https://cdn.beatsaver.com/cfc9d5013d12adb3ca5e0a4a31d8a06f2081dbe6.jpg",previewURL:"https://cdn.beatsaver.com/cfc9d5013d12adb3ca5e0a4a31d8a06f2081dbe6.mp3"}],createdAt:"2019-10-03T22:51:56.567Z",updatedAt:"2019-10-03T22:51:56.567Z",lastPublishedAt:"2019-10-03T22:51:56.567Z"},{id:"36bf",name:"Daft Punk - Aerodynamic",description:"An essential classic. You might want to stretch first...\r\nExpert+ and Hard.\r\n\r\nPreview: https://youtu.be/1dAwipwIgDg\r\n\r\nCheck out my other maps, too! If you like them, consider subscribing on YouTube to find out when new maps go live.\r\n\r\nThanks for playing!\r\n\r\nhttps://www.twitch.tv/syntheseizure",uploader:{id:31265,name:"syntheseizure",uniqueSet:!0,hash:"5cff0b7698cc5a672c8546bd",avatar:"https://www.gravatar.com/avatar/5cff0b7698cc5a672c8546bd?d=retro",type:"SIMPLE"},metadata:{bpm:123,duration:214,songName:"Aerodynamic",songSubName:"Daft Punk",songAuthorName:"Syntheseizure",levelAuthorName:"Syntheseizure"},stats:{plays:0,downloads:5893,upvotes:2763,downvotes:73,score:.9309},uploaded:"2019-02-16T17:49:39Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"092840ca9a391f34c6af32ac1d6475498de74407",key:"36bf",state:"Published",createdAt:"2019-02-16T17:49:39Z",sageScore:5,diffs:[{njs:12,offset:0,notes:650,bombs:0,obstacles:48,nps:3.2,length:416,characteristic:"Standard",difficulty:"Hard",events:2022,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:202.927,paritySummary:{errors:32,warns:11,resets:0}},{njs:14,offset:0,notes:1022,bombs:0,obstacles:48,nps:5.031,length:416,characteristic:"Standard",difficulty:"ExpertPlus",events:2022,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:202.927,paritySummary:{errors:48,warns:27,resets:0}}],downloadURL:"https://cdn.beatsaver.com/092840ca9a391f34c6af32ac1d6475498de74407.zip",coverURL:"https://cdn.beatsaver.com/092840ca9a391f34c6af32ac1d6475498de74407.jpg",previewURL:"https://cdn.beatsaver.com/092840ca9a391f34c6af32ac1d6475498de74407.mp3"}],createdAt:"2019-02-16T17:49:39Z",updatedAt:"2019-02-16T17:49:39Z",lastPublishedAt:"2019-02-16T17:49:39Z"},{id:"381a",name:"Deep in Abyss [Made in Abyss Opening] - Riko (CV: Miyu Tomita), Reg (CV: Ise Mariya)",description:"Deep in Abyss is the opening song for Made in Abyss and is sung by Riko voiced by Miyu Tomita and Reg voiced by Ise Mariya.\r\n\r\nCheckout the map preview: https://www.youtube.com/watch?v=ZMQz-z57kKo",uploader:{id:58338,name:"Joetastic",uniqueSet:!0,hash:"5cff0b7498cc5a672c85050e",avatar:"https://cdn.beatsaver.com/avatar/227767566402191360.png",type:"DISCORD"},metadata:{bpm:135,duration:221,songName:"Deep in Abyss",songSubName:"Riko (CV: Miyu Tomita), Reg (CV: Ise Mariya)",songAuthorName:"Joetastic",levelAuthorName:"Joetastic"},stats:{plays:0,downloads:3012,upvotes:1850,downvotes:37,score:.9308},uploaded:"2019-02-21T01:04:41Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"c586288044251cc2b2e1d6ac3817214a9ea02302",key:"381a",state:"Published",createdAt:"2019-02-21T01:04:41Z",sageScore:6,diffs:[{njs:15,offset:0,notes:1013,bombs:0,obstacles:33,nps:4.685,length:486.5,characteristic:"Standard",difficulty:"Expert",events:2230,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:216.222,paritySummary:{errors:41,warns:46,resets:0}}],downloadURL:"https://cdn.beatsaver.com/c586288044251cc2b2e1d6ac3817214a9ea02302.zip",coverURL:"https://cdn.beatsaver.com/c586288044251cc2b2e1d6ac3817214a9ea02302.jpg",previewURL:"https://cdn.beatsaver.com/c586288044251cc2b2e1d6ac3817214a9ea02302.mp3"}],createdAt:"2019-02-21T01:04:41Z",updatedAt:"2019-02-21T01:04:41Z",lastPublishedAt:"2019-02-21T01:04:41Z"},{id:"a168",name:"Yunomi - Oedo Controller/大江戸コントローラー feat. TORIENA【Wall Map】",description:"【requires】 Noodle Extensions Chroma\nhttps://youtu.be/5D1WTufQ5dM ",uploader:{id:4285467,name:"fefy",uniqueSet:!0,hash:"5cff0b7798cc5a672c856908",avatar:"https://cdn.beatsaver.com/avatar/380656936460484620.png",type:"DISCORD"},metadata:{bpm:115,duration:257,songName:"Oedo Controller",songSubName:"feat. TORIENA",songAuthorName:"Yunomi",levelAuthorName:"Fefy"},stats:{plays:0,downloads:2659,upvotes:1344,downvotes:19,score:.9307},uploaded:"2020-05-02T09:37:24.020Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"cc3e7aefe1e878057f83d9018eaf977d9f69a1bb",key:"a168",state:"Published",createdAt:"2020-05-02T09:37:24.020Z",sageScore:7,diffs:[{njs:15,offset:0,notes:0,bombs:0,obstacles:55472,nps:0,length:0,characteristic:"Standard",difficulty:"Easy",events:2395,chroma:!0,me:!1,ne:!0,cinema:!1,seconds:0,paritySummary:{errors:0,warns:0,resets:0}},{njs:15,offset:0,notes:816,bombs:0,obstacles:55472,nps:3.265,length:479,characteristic:"Standard",difficulty:"Expert",events:2395,chroma:!0,me:!1,ne:!0,cinema:!1,seconds:249.913,paritySummary:{errors:20,warns:12,resets:0}}],downloadURL:"https://cdn.beatsaver.com/cc3e7aefe1e878057f83d9018eaf977d9f69a1bb.zip",coverURL:"https://cdn.beatsaver.com/cc3e7aefe1e878057f83d9018eaf977d9f69a1bb.jpg",previewURL:"https://cdn.beatsaver.com/cc3e7aefe1e878057f83d9018eaf977d9f69a1bb.mp3"}],createdAt:"2020-05-02T09:37:24.020Z",updatedAt:"2020-05-02T09:37:24.020Z",lastPublishedAt:"2020-05-02T09:37:24.020Z"},{id:"6adc",name:"Rasputin (Funk Overload)",description:"Huge thanks to Whipstickgostop for remastering the audio of this funky beat!",uploader:{id:4285169,name:"ryger",uniqueSet:!0,hash:"5cff0b7798cc5a672c855a42",avatar:"https://cdn.beatsaver.com/avatar/169266024502263808.png",type:"DISCORD"},metadata:{bpm:152,duration:225,songName:"Rasputin (Funk Overload)",songSubName:"",songAuthorName:"Boney M",levelAuthorName:"Ryger"},stats:{plays:0,downloads:10264,upvotes:4935,downvotes:173,score:.9305},uploaded:"2019-10-19T23:00:58.938Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"e979073ecfbb283675d03453af39109957819f35",key:"6adc",state:"Published",createdAt:"2019-10-19T23:00:58.938Z",sageScore:5,diffs:[{njs:16,offset:0,notes:988,bombs:0,obstacles:0,nps:4.542,length:551.125,characteristic:"Standard",difficulty:"Hard",events:4202,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:217.549,paritySummary:{errors:15,warns:14,resets:0}},{njs:16,offset:0,notes:1080,bombs:0,obstacles:0,nps:4.964,length:551.125,characteristic:"Standard",difficulty:"Expert",events:4202,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:217.549,paritySummary:{errors:25,warns:21,resets:0}},{njs:18,offset:0,notes:1164,bombs:0,obstacles:0,nps:5.351,length:551.125,characteristic:"Standard",difficulty:"ExpertPlus",events:4196,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:217.549,paritySummary:{errors:21,warns:27,resets:0}}],downloadURL:"https://cdn.beatsaver.com/e979073ecfbb283675d03453af39109957819f35.zip",coverURL:"https://cdn.beatsaver.com/e979073ecfbb283675d03453af39109957819f35.jpg",previewURL:"https://cdn.beatsaver.com/e979073ecfbb283675d03453af39109957819f35.mp3"}],createdAt:"2019-10-19T23:00:58.938Z",updatedAt:"2019-10-19T23:00:58.938Z",lastPublishedAt:"2019-10-19T23:00:58.938Z"},{id:"3ae2",name:"I Don't Wanna Be In Love (Dance Floor Anthem) - Good Charlotte",description:"I Dont Wanna Be In Love (Dance Floor Anthem) - Good Charlotte\r\nhttps://www.youtube.com/watch?v=pbpeMN_vFRM",uploader:{id:4285982,name:"downycat",uniqueSet:!0,hash:"5cff0b7398cc5a672c84ede5",avatar:"https://cdn.beatsaver.com/avatar/173538829888782336.png",type:"DISCORD"},metadata:{bpm:125,duration:243,songName:"I Don't Wanna Be In Love (Dance Floor Anthem)",songSubName:"Good Charlotte",songAuthorName:"DownyCat",levelAuthorName:"downycat"},stats:{plays:0,downloads:4672,upvotes:991,downvotes:8,score:.9305},uploaded:"2019-03-02T17:41:39Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"f0bef11ce8866052770c42ed855e5d21e935614c",key:"3ae2",state:"Published",createdAt:"2019-03-02T17:41:39Z",sageScore:6,diffs:[{njs:10,offset:0,notes:372,bombs:0,obstacles:29,nps:1.563,length:496,characteristic:"Standard",difficulty:"Normal",events:5639,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:238.08,paritySummary:{errors:19,warns:7,resets:0}},{njs:12,offset:0,notes:796,bombs:0,obstacles:20,nps:3.343,length:496,characteristic:"Standard",difficulty:"Hard",events:5639,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:238.08,paritySummary:{errors:18,warns:26,resets:0}},{njs:14,offset:0,notes:1174,bombs:0,obstacles:10,nps:4.931,length:496,characteristic:"Standard",difficulty:"Expert",events:5639,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:238.08,paritySummary:{errors:27,warns:36,resets:0}}],downloadURL:"https://cdn.beatsaver.com/f0bef11ce8866052770c42ed855e5d21e935614c.zip",coverURL:"https://cdn.beatsaver.com/f0bef11ce8866052770c42ed855e5d21e935614c.jpg",previewURL:"https://cdn.beatsaver.com/f0bef11ce8866052770c42ed855e5d21e935614c.mp3"}],createdAt:"2019-03-02T17:41:39Z",updatedAt:"2019-03-02T17:41:39Z",lastPublishedAt:"2019-03-02T17:41:39Z"},{id:"706b",name:"Guren No Yumiya (TV Size) [Attack On Titan Opening] - Linked Horizon",description:"This map was converted from one of my old maps.\n\nFeel free to DM me on discord @Joetastic#2501",uploader:{id:58338,name:"Joetastic",uniqueSet:!0,hash:"5cff0b7498cc5a672c85050e",avatar:"https://cdn.beatsaver.com/avatar/227767566402191360.png",type:"DISCORD"},metadata:{bpm:180.676,duration:93,songName:"Guren no Yumiya (TV Size)",songSubName:"",songAuthorName:"Linked Horizon",levelAuthorName:"Joetastic"},stats:{plays:0,downloads:8096,upvotes:2435,downvotes:61,score:.9304},uploaded:"2019-11-17T07:01:53.007Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"c00412845c48fb65fc30f16d902af542ca2c88ac",key:"706b",state:"Published",createdAt:"2019-11-17T07:01:53.007Z",sageScore:4,diffs:[{njs:11,offset:0,notes:299,bombs:0,obstacles:0,nps:3.545,length:253.998,characteristic:"Standard",difficulty:"Hard",events:2393,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:84.349,paritySummary:{errors:10,warns:7,resets:0}},{njs:13,offset:0,notes:375,bombs:0,obstacles:0,nps:4.446,length:253.998,characteristic:"Standard",difficulty:"Expert",events:2472,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:84.349,paritySummary:{errors:21,warns:20,resets:0}},{njs:15,offset:0,notes:460,bombs:0,obstacles:0,nps:5.454,length:253.998,characteristic:"Standard",difficulty:"ExpertPlus",events:2472,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:84.349,paritySummary:{errors:22,warns:20,resets:0}}],downloadURL:"https://cdn.beatsaver.com/c00412845c48fb65fc30f16d902af542ca2c88ac.zip",coverURL:"https://cdn.beatsaver.com/c00412845c48fb65fc30f16d902af542ca2c88ac.jpg",previewURL:"https://cdn.beatsaver.com/c00412845c48fb65fc30f16d902af542ca2c88ac.mp3"}],createdAt:"2019-11-17T07:01:53.007Z",updatedAt:"2019-11-17T07:01:53.007Z",lastPublishedAt:"2019-11-17T07:01:53.007Z"},{id:"88bd",name:"Pornhub Intro",description:"182nd Map\nCollab with Monteblanco, Neko, shuuxruri, Suzuki.dll, Zoinkai & Kalmer\n\nYoutube Preview : https://www.youtube.com/watch?v=7V8go6p4P2E",uploader:{id:4284588,name:"rigid",uniqueSet:!0,hash:"5cff0b7598cc5a672c852224",avatar:"https://cdn.beatsaver.com/avatar/295613108947386368.png",type:"DISCORD"},metadata:{bpm:120,duration:5,songName:"Pornhub Intro",songSubName:"",songAuthorName:"Yes",levelAuthorName:"Rigid, Monteblanco, Neko, shuuxruri, Suzuki.dll, Zoinkai & Kalmer"},stats:{plays:0,downloads:3144,upvotes:2182,downvotes:51,score:.9303},uploaded:"2020-02-19T21:36:55.060Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"3ff5c30044bc8d0dfe5aae6b9c665a6367732242",key:"88bd",state:"Published",createdAt:"2020-02-19T21:36:55.060Z",sageScore:3,diffs:[{njs:14,offset:0,notes:10,bombs:0,obstacles:0,nps:4.706,length:4.25,characteristic:"Standard",difficulty:"ExpertPlus",events:93,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:2.125,paritySummary:{errors:0,warns:0,resets:0}}],downloadURL:"https://cdn.beatsaver.com/3ff5c30044bc8d0dfe5aae6b9c665a6367732242.zip",coverURL:"https://cdn.beatsaver.com/3ff5c30044bc8d0dfe5aae6b9c665a6367732242.jpg",previewURL:"https://cdn.beatsaver.com/3ff5c30044bc8d0dfe5aae6b9c665a6367732242.mp3"}],createdAt:"2020-02-19T21:36:55.060Z",updatedAt:"2020-02-19T21:36:55.060Z",lastPublishedAt:"2020-02-19T21:36:55.060Z"},{id:"3f79",name:"Here With Me (feat. CHVRCHES) - Marshmello",description:"Expert Playthrough : https://youtu.be/okOkJ55es8A",uploader:{id:13320,name:"novashaft",uniqueSet:!0,hash:"5cff0b7398cc5a672c84ee55",avatar:"https://www.gravatar.com/avatar/5cff0b7398cc5a672c84ee55?d=retro",type:"SIMPLE"},metadata:{bpm:100,duration:158,songName:"Here With Me (feat. CHVRCHES)",songSubName:"Marshmello",songAuthorName:"NovaShaft",levelAuthorName:"novashaft"},stats:{plays:0,downloads:6739,upvotes:2077,downvotes:47,score:.9303},uploaded:"2019-03-21T15:12:40Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"bae9f42e64c14c8b1740c5bedc0e1c1db8c33c7d",key:"3f79",state:"Published",createdAt:"2019-03-21T15:12:40Z",sageScore:5,diffs:[{njs:11,offset:0,notes:253,bombs:0,obstacles:35,nps:1.67,length:252.5,characteristic:"Standard",difficulty:"Normal",events:626,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:151.5,paritySummary:{errors:27,warns:6,resets:0}},{njs:12,offset:0,notes:306,bombs:0,obstacles:35,nps:2.02,length:252.5,characteristic:"Standard",difficulty:"Hard",events:627,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:151.5,paritySummary:{errors:13,warns:8,resets:0}},{njs:14,offset:0,notes:450,bombs:0,obstacles:35,nps:2.97,length:252.5,characteristic:"Standard",difficulty:"Expert",events:627,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:151.5,paritySummary:{errors:28,warns:24,resets:0}}],downloadURL:"https://cdn.beatsaver.com/bae9f42e64c14c8b1740c5bedc0e1c1db8c33c7d.zip",coverURL:"https://cdn.beatsaver.com/bae9f42e64c14c8b1740c5bedc0e1c1db8c33c7d.jpg",previewURL:"https://cdn.beatsaver.com/bae9f42e64c14c8b1740c5bedc0e1c1db8c33c7d.mp3"}],createdAt:"2019-03-21T15:12:40Z",updatedAt:"2019-03-21T15:12:40Z",lastPublishedAt:"2019-03-21T15:12:40Z"},{id:"238a",name:"Dance of the Sugar Plum Fairy - Lindsey Stirling",description:"EDIT: Thanks to everyone who voted for this map in the Christmas contest!\n\nTheme from the nutcracker.\n\nExpert+ preview: https://youtu.be/naaei24FZAY\nFollow me on Twitter u won't\nhttps://twitter.com/aggrogahu\n\nHard and Normal are kinda close to OST standards, so might be easier for custom standards.\n\nThanks to Redmagi, baxter395, AaltopahWi, and Kolezan for their help and feedback.",uploader:{id:4284613,name:"aggrogahu",uniqueSet:!0,hash:"5cff0b7398cc5a672c84fdad",avatar:"https://cdn.beatsaver.com/avatar/158363872649150464.png",type:"DISCORD"},metadata:{bpm:140,duration:158,songName:"Dance of the Sugar Plum Fairy",songSubName:"Lindsey Stirling",songAuthorName:"aggrogahu",levelAuthorName:"aggrogahu"},stats:{plays:0,downloads:4103,upvotes:1711,downvotes:33,score:.9302},uploaded:"2018-12-03T09:40:02Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"6b901c30686a9fa2935271177fc1b57dd072aae8",key:"238a",state:"Published",createdAt:"2018-12-03T09:40:02Z",sageScore:4,diffs:[{njs:10,offset:0,notes:219,bombs:2,obstacles:29,nps:1.494,length:342,characteristic:"Standard",difficulty:"Normal",events:547,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:146.571,paritySummary:{errors:89,warns:12,resets:0}},{njs:10,offset:0,notes:373,bombs:2,obstacles:16,nps:2.545,length:342,characteristic:"Standard",difficulty:"Hard",events:547,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:146.571,paritySummary:{errors:54,warns:10,resets:0}},{njs:15,offset:0,notes:721,bombs:4,obstacles:32,nps:4.919,length:342,characteristic:"Standard",difficulty:"ExpertPlus",events:547,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:146.571,paritySummary:{errors:51,warns:67,resets:1}}],downloadURL:"https://cdn.beatsaver.com/6b901c30686a9fa2935271177fc1b57dd072aae8.zip",coverURL:"https://cdn.beatsaver.com/6b901c30686a9fa2935271177fc1b57dd072aae8.jpg",previewURL:"https://cdn.beatsaver.com/6b901c30686a9fa2935271177fc1b57dd072aae8.mp3"}],createdAt:"2018-12-03T09:40:02Z",updatedAt:"2018-12-03T09:40:02Z",lastPublishedAt:"2018-12-03T09:40:02Z"},{id:"ebb",name:"Do I Wanna Know? - Arctic Monkeys",description:"X/H/N/E difficulties, full manual lighting.\r\n\r\nExpert Playthrough: https://www.youtube.com/watch?v=ejmDJxe1Vzg\r\n\r\nCreated on twitch in one sitting during a tutorial stream.\r\nFollow us and come say hi on twitch! https://www.twitch.tv/freeek\r\n\r\nHave fun :)\r\n\r\nFreeek!",uploader:{id:47581,name:"freeek",uniqueSet:!0,hash:"5cff0b7298cc5a672c84e8ad",avatar:"https://www.gravatar.com/avatar/5cff0b7298cc5a672c84e8ad?d=retro",type:"SIMPLE"},metadata:{bpm:85,duration:273,songName:"Do I Wanna Know?",songSubName:"Arctic Monkeys",songAuthorName:"Freeek",levelAuthorName:"freeek"},stats:{plays:0,downloads:6011,upvotes:2491,downvotes:64,score:.9302},uploaded:"2018-08-09T18:05:46Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"0fa854bb295e56d8c77da226a3ca41c0070cc793",key:"ebb",state:"Published",createdAt:"2018-08-09T18:05:46Z",sageScore:6,diffs:[{njs:10,offset:0,notes:372,bombs:0,obstacles:71,nps:1.387,length:380,characteristic:"Standard",difficulty:"Easy",events:1154,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:268.235,paritySummary:{errors:84,warns:10,resets:0}},{njs:10,offset:0,notes:522,bombs:0,obstacles:72,nps:1.946,length:380,characteristic:"Standard",difficulty:"Normal",events:1154,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:268.235,paritySummary:{errors:53,warns:54,resets:0}},{njs:10,offset:0,notes:708,bombs:0,obstacles:72,nps:2.639,length:380,characteristic:"Standard",difficulty:"Hard",events:1154,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:268.235,paritySummary:{errors:56,warns:74,resets:0}},{njs:10,offset:0,notes:863,bombs:0,obstacles:75,nps:3.217,length:380,characteristic:"Standard",difficulty:"Expert",events:1154,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:268.235,paritySummary:{errors:79,warns:105,resets:0}}],downloadURL:"https://cdn.beatsaver.com/0fa854bb295e56d8c77da226a3ca41c0070cc793.zip",coverURL:"https://cdn.beatsaver.com/0fa854bb295e56d8c77da226a3ca41c0070cc793.jpg",previewURL:"https://cdn.beatsaver.com/0fa854bb295e56d8c77da226a3ca41c0070cc793.mp3"}],createdAt:"2018-08-09T18:05:46Z",updatedAt:"2018-08-09T18:05:46Z",lastPublishedAt:"2018-08-09T18:05:46Z"},{id:"80fb",name:"[Noodlegames] Lifelight (Camellia's Hardstyle Bootleg)",description:"The Ramen Noodle group is here to bring you a map pack full of our favorite video game soundtracks and game-inspired music!\r\n\r\nCamellia + Iconic Song = PepeJam\r\nHas RGB lights (use chromalite pls, you'll make me cry if you don't)\r\n\r\nStandard mapped by +1 Rabbit\r\nLots of love provided by CyanSnow\r\nOne Saber and Lights mapped by Aeroluna\r\n\r\n150 BPM / 3:47 Duration\r\n\r\n[Standard]:\r\nEasy - 284 notes (1.16 NPS)\r\nNormal - 355 notes (1.56 NPS)\r\nHard - 661 notes (2.91 NPS)\r\nExpert - 899 notes (3.96 NPS)\r\nExpert+ - 1036 notes (4.56 NPS)\r\n\r\n[One Saber]:\r\nExpert - 622 notes (2.73 NPS)\r\nExpert+ - 692 notes (3.05 NPS)\r\n\r\nLights preview: https://youtu.be/qk06uZpgr7E",uploader:{id:4284266,name:"aeroluna",uniqueSet:!0,hash:"5cff0b7698cc5a672c854907",avatar:"https://cdn.beatsaver.com/avatar/193636171497209856.png",type:"DISCORD"},metadata:{bpm:150,duration:227,songName:"Lifelight",songSubName:"(Camellia's Hardstyle Bootleg)",songAuthorName:"Camellia",levelAuthorName:"+1 Rabbit & Aeroluna"},stats:{plays:0,downloads:4528,upvotes:1540,downvotes:27,score:.9301},uploaded:"2020-01-24T23:00:27.676Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"bb2bd82208d452badc4acaf877dc2c4abd0fab15",key:"80fb",state:"Published",createdAt:"2020-01-24T23:00:27.676Z",sageScore:4,diffs:[{njs:12,offset:0,notes:264,bombs:0,obstacles:8,nps:1.231,length:536,characteristic:"Standard",difficulty:"Easy",events:27741,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:214.4,paritySummary:{errors:116,warns:8,resets:0}},{njs:12,offset:0,notes:355,bombs:0,obstacles:55,nps:1.656,length:536,characteristic:"Standard",difficulty:"Normal",events:27741,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:214.4,paritySummary:{errors:77,warns:24,resets:0}},{njs:14,offset:0,notes:661,bombs:0,obstacles:99,nps:3.083,length:536,characteristic:"Standard",difficulty:"Hard",events:27741,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:214.4,paritySummary:{errors:39,warns:29,resets:0}},{njs:16,offset:.25,notes:899,bombs:0,obstacles:103,nps:4.193,length:536,characteristic:"Standard",difficulty:"Expert",events:27741,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:214.4,paritySummary:{errors:2,warns:0,resets:0}},{njs:19,offset:-.2,notes:1036,bombs:0,obstacles:46,nps:4.832,length:536,characteristic:"Standard",difficulty:"ExpertPlus",events:27741,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:214.4,paritySummary:{errors:0,warns:0,resets:0}},{njs:16,offset:0,notes:622,bombs:0,obstacles:0,nps:2.777,length:560,characteristic:"OneSaber",difficulty:"Expert",events:27741,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:224,paritySummary:{errors:7,warns:1,resets:0}},{njs:18,offset:0,notes:692,bombs:0,obstacles:0,nps:3.089,length:560,characteristic:"OneSaber",difficulty:"ExpertPlus",events:27741,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:224,paritySummary:{errors:3,warns:0,resets:0}}],downloadURL:"https://cdn.beatsaver.com/bb2bd82208d452badc4acaf877dc2c4abd0fab15.zip",coverURL:"https://cdn.beatsaver.com/bb2bd82208d452badc4acaf877dc2c4abd0fab15.jpg",previewURL:"https://cdn.beatsaver.com/bb2bd82208d452badc4acaf877dc2c4abd0fab15.mp3"}],createdAt:"2020-01-24T23:00:27.676Z",updatedAt:"2020-01-24T23:00:27.676Z",lastPublishedAt:"2020-01-24T23:00:27.676Z"},{id:"d410",name:"[FUTURE FUNK PACK] Disco Lady - Nanidato",description:'FUTURE FUNK MAP PACK\n2 songs uploaded everyday through August 10th - 14th!\n\n"Disco Lady" by Nanidato was sampled from Tomato n\' Pine\'s "Wanna Dance!" \n\nPlease look forward to the upcoming maps!\n\nDM any feedback on Discord\nETAN#8341',uploader:{id:4235140,name:"etan",uniqueSet:!0,hash:"5cff0b7798cc5a672c855775",avatar:"https://cdn.beatsaver.com/avatar/136373107559497728.png",type:"DISCORD"},metadata:{bpm:120,duration:189,songName:"Disco Lady",songSubName:"",songAuthorName:"Nanidato",levelAuthorName:"ETAN"},stats:{plays:0,downloads:4750,upvotes:1097,downvotes:12,score:.9299},uploaded:"2020-08-11T17:46:48.109Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"601f29bdee0f10a29f1ad1520bd296930c7ad3d4",key:"d410",state:"Published",createdAt:"2020-08-11T17:46:48.109Z",sageScore:6,diffs:[{njs:10,offset:1,notes:191,bombs:0,obstacles:1,nps:1.051,length:363.5,characteristic:"Standard",difficulty:"Easy",events:7333,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:181.75,paritySummary:{errors:8,warns:6,resets:0}},{njs:10,offset:1,notes:321,bombs:0,obstacles:1,nps:1.733,length:370.5,characteristic:"Standard",difficulty:"Normal",events:7333,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:185.25,paritySummary:{errors:2,warns:0,resets:0}},{njs:12,offset:.3,notes:494,bombs:0,obstacles:1,nps:2.667,length:370.5,characteristic:"Standard",difficulty:"Hard",events:7333,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:185.25,paritySummary:{errors:0,warns:0,resets:0}},{njs:14,offset:0,notes:661,bombs:0,obstacles:1,nps:3.568,length:370.5,characteristic:"Standard",difficulty:"Expert",events:7333,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:185.25,paritySummary:{errors:0,warns:0,resets:0}},{njs:17,offset:-.5,notes:924,bombs:0,obstacles:1,nps:4.988,length:370.5,characteristic:"Standard",difficulty:"ExpertPlus",events:7333,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:185.25,paritySummary:{errors:0,warns:0,resets:0}}],downloadURL:"https://cdn.beatsaver.com/601f29bdee0f10a29f1ad1520bd296930c7ad3d4.zip",coverURL:"https://cdn.beatsaver.com/601f29bdee0f10a29f1ad1520bd296930c7ad3d4.jpg",previewURL:"https://cdn.beatsaver.com/601f29bdee0f10a29f1ad1520bd296930c7ad3d4.mp3"}],createdAt:"2020-08-11T17:46:48.109Z",updatedAt:"2020-08-11T17:46:48.109Z",lastPublishedAt:"2020-08-11T17:46:48.109Z"},{id:"130e6",name:"Geoxor - Faerie [wall map]",description:"Wall map collab with Reddek lets go!!\nThis turned out so much better than I thought it would, I hope you enjoy it as much as I do\n\nMap preview: https://youtu.be/uOdpWjTdGCU \n\nFeedback welcome at shan_man#7777 and Reddek#5864",uploader:{id:75261,name:"shan_man",uniqueSet:!0,hash:"5ec5aaa616c9680006500e0a",avatar:"https://cdn.beatsaver.com/avatar/345431512658739200.png",type:"DISCORD"},metadata:{bpm:150,duration:244,songName:"Faerie",songSubName:"",songAuthorName:"Geoxor",levelAuthorName:"Reddek & Shan_Man"},stats:{plays:0,downloads:2988,upvotes:1092,downvotes:12,score:.9298},uploaded:"2021-01-23T05:09:19.779Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"57c96c82897a73c495758fa494875dce6bdab869",key:"130e6",state:"Published",createdAt:"2021-01-23T05:09:19.779Z",sageScore:5,diffs:[{njs:20,offset:-.5,notes:1269,bombs:42,obstacles:0,nps:5.513,length:575.5,characteristic:"Standard",difficulty:"Expert",events:9327,chroma:!0,me:!1,ne:!1,cinema:!1,seconds:230.2,paritySummary:{errors:0,warns:0,resets:15}},{njs:20,offset:-.5,notes:1650,bombs:42,obstacles:3239,nps:7.118,length:579.5,characteristic:"Standard",difficulty:"ExpertPlus",events:9327,chroma:!0,me:!1,ne:!0,cinema:!1,seconds:231.8,paritySummary:{errors:37,warns:1,resets:15}}],downloadURL:"https://cdn.beatsaver.com/57c96c82897a73c495758fa494875dce6bdab869.zip",coverURL:"https://cdn.beatsaver.com/57c96c82897a73c495758fa494875dce6bdab869.jpg",previewURL:"https://cdn.beatsaver.com/57c96c82897a73c495758fa494875dce6bdab869.mp3"}],createdAt:"2021-01-23T05:09:19.779Z",updatedAt:"2021-01-23T05:09:19.779Z",lastPublishedAt:"2021-01-23T05:09:19.779Z"},{id:"4a36",name:"[Anniversary] Backbone (ft. Nevve) - Droeloe [Fafurion & Skyler Wallace]",description:"Part of the Anniversary Song Pack",uploader:{id:37070,name:"anniversaryteam",uniqueSet:!0,hash:"5cff0b7798cc5a672c8565a3",avatar:"https://www.gravatar.com/avatar/5cff0b7798cc5a672c8565a3?d=retro",type:"SIMPLE"},metadata:{bpm:151,duration:171,songName:"Backbone",songSubName:"Droeloe",songAuthorName:"Fafurion & Skyler Wallace",levelAuthorName:"AnniversaryTeam"},stats:{plays:0,downloads:3767,upvotes:2308,downvotes:58,score:.9296},uploaded:"2019-05-03T14:08:11Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"376abe290620e443e9451366accb30e5095edbce",key:"4a36",state:"Published",createdAt:"2019-05-03T14:08:11Z",sageScore:7,diffs:[{njs:10,offset:0,notes:190,bombs:0,obstacles:4,nps:1.248,length:383,characteristic:"Standard",difficulty:"Easy",events:909,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:152.185,paritySummary:{errors:36,warns:31,resets:0}},{njs:12,offset:0,notes:265,bombs:0,obstacles:7,nps:1.746,length:382,characteristic:"Standard",difficulty:"Normal",events:909,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:151.788,paritySummary:{errors:43,warns:49,resets:0}},{njs:12,offset:0,notes:417,bombs:0,obstacles:12,nps:2.747,length:382,characteristic:"Standard",difficulty:"Hard",events:909,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:151.788,paritySummary:{errors:65,warns:40,resets:0}},{njs:12,offset:1,notes:552,bombs:0,obstacles:1,nps:3.632,length:382.5,characteristic:"Standard",difficulty:"Expert",events:909,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:151.987,paritySummary:{errors:36,warns:42,resets:0}},{njs:14,offset:1,notes:592,bombs:0,obstacles:3,nps:3.895,length:382.5,characteristic:"Standard",difficulty:"ExpertPlus",events:909,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:151.987,paritySummary:{errors:45,warns:59,resets:0}}],downloadURL:"https://cdn.beatsaver.com/376abe290620e443e9451366accb30e5095edbce.zip",coverURL:"https://cdn.beatsaver.com/376abe290620e443e9451366accb30e5095edbce.jpg",previewURL:"https://cdn.beatsaver.com/376abe290620e443e9451366accb30e5095edbce.mp3"}],createdAt:"2019-05-03T14:08:11Z",updatedAt:"2019-05-03T14:08:11Z",lastPublishedAt:"2019-05-03T14:08:11Z"},{id:"75ba",name:"Savior - Rise Against",description:'"Savior" is punk rock song by American rock band Rise Against, featured on their fifth studio album Appeal to Reason (2008). In contrast to the social and political topics normally discussed in Rise Against songs, "Savior" is about forgiveness and broken relationships.',uploader:{id:58338,name:"Joetastic",uniqueSet:!0,hash:"5cff0b7498cc5a672c85050e",avatar:"https://cdn.beatsaver.com/avatar/227767566402191360.png",type:"DISCORD"},metadata:{bpm:169,duration:244,songName:"Savior",songSubName:"",songAuthorName:"Rise Against",levelAuthorName:"Joetastic"},stats:{plays:0,downloads:3854,upvotes:1458,downvotes:25,score:.9295},uploaded:"2019-12-11T15:27:50.619Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"20527803675e3a3d7721c0b8d05a1439a02a580d",key:"75ba",state:"Published",createdAt:"2019-12-11T15:27:50.619Z",sageScore:5,diffs:[{njs:15,offset:0,notes:925,bombs:30,obstacles:6,nps:3.912,length:664.996,characteristic:"Standard",difficulty:"Expert",events:3686,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:236.093,paritySummary:{errors:20,warns:13,resets:0}}],downloadURL:"https://cdn.beatsaver.com/20527803675e3a3d7721c0b8d05a1439a02a580d.zip",coverURL:"https://cdn.beatsaver.com/20527803675e3a3d7721c0b8d05a1439a02a580d.jpg",previewURL:"https://cdn.beatsaver.com/20527803675e3a3d7721c0b8d05a1439a02a580d.mp3"}],createdAt:"2019-12-11T15:27:50.619Z",updatedAt:"2019-12-11T15:27:50.619Z",lastPublishedAt:"2019-12-11T15:27:50.619Z"},{id:"affa",name:"Zomboy - Endgame [NE/CHROMA]",description:"Can you survive?\r\n\r\nPreview: https://youtu.be/t4bk8ym3fIQ",uploader:{id:26361,name:"spookyghost",uniqueSet:!0,hash:"5cff0b7798cc5a672c8561a5",avatar:"https://www.gravatar.com/avatar/5cff0b7798cc5a672c8561a5?d=retro",type:"SIMPLE"},metadata:{bpm:200,duration:310,songName:"End Game",songSubName:"Rott n' Roll",songAuthorName:"Zomboy",levelAuthorName:"Spooky Ghost & Exce"},stats:{plays:0,downloads:2617,upvotes:2099,downvotes:50,score:.9294},uploaded:"2020-06-08T17:04:09.275Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"c28ffc53acd2c89329b5a7ff3d57a2b32bca416e",key:"affa",state:"Published",createdAt:"2020-06-08T17:04:09.275Z",sageScore:4,diffs:[{njs:22,offset:0,notes:1493,bombs:5376,obstacles:5e4,nps:5.068,length:982,characteristic:"Standard",difficulty:"ExpertPlus",events:12193,chroma:!0,me:!1,ne:!0,cinema:!1,seconds:294.6,paritySummary:{errors:0,warns:0,resets:0}}],downloadURL:"https://cdn.beatsaver.com/c28ffc53acd2c89329b5a7ff3d57a2b32bca416e.zip",coverURL:"https://cdn.beatsaver.com/c28ffc53acd2c89329b5a7ff3d57a2b32bca416e.jpg",previewURL:"https://cdn.beatsaver.com/c28ffc53acd2c89329b5a7ff3d57a2b32bca416e.mp3"}],createdAt:"2020-06-08T17:04:09.275Z",updatedAt:"2020-06-08T17:04:09.275Z",lastPublishedAt:"2020-06-08T17:04:09.275Z"},{id:"475",name:"Ride - Twenty One Pilots",description:"Expert and Normal Charts\nLighting Events\n\nhttps://twitter.com/TheDownyCat\nhttps://www.twitch.tv/downycat\nhttps://streamlabs.com/downycat/tip",uploader:{id:4285982,name:"downycat",uniqueSet:!0,hash:"5cff0b7398cc5a672c84ede5",avatar:"https://cdn.beatsaver.com/avatar/173538829888782336.png",type:"DISCORD"},metadata:{bpm:150,duration:213,songName:"Ride",songSubName:"Twenty One Pilots",songAuthorName:"DownyCat",levelAuthorName:"downycat"},stats:{plays:0,downloads:5957,upvotes:2990,downvotes:88,score:.9294},uploaded:"2018-06-09T11:24:50Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"05c4b1fc955756d2672ce322417ad2fadb416af6",key:"475",state:"Published",createdAt:"2018-06-09T11:24:50Z",sageScore:4,diffs:[{njs:10,offset:0,notes:377,bombs:0,obstacles:32,nps:1.844,length:511,characteristic:"Standard",difficulty:"Normal",events:859,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:204.4,paritySummary:{errors:109,warns:26,resets:0}},{njs:10,offset:0,notes:674,bombs:0,obstacles:32,nps:3.297,length:511,characteristic:"Standard",difficulty:"Expert",events:859,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:204.4,paritySummary:{errors:96,warns:102,resets:0}}],downloadURL:"https://cdn.beatsaver.com/05c4b1fc955756d2672ce322417ad2fadb416af6.zip",coverURL:"https://cdn.beatsaver.com/05c4b1fc955756d2672ce322417ad2fadb416af6.jpg",previewURL:"https://cdn.beatsaver.com/05c4b1fc955756d2672ce322417ad2fadb416af6.mp3"}],createdAt:"2018-06-09T11:24:50Z",updatedAt:"2018-06-09T11:24:50Z",lastPublishedAt:"2018-06-09T11:24:50Z"},{id:"5725",name:"Livin' La Vida Loca - Ricky Martin",description:"\"Livin' la Vida Loca\" (Livin' A Crazy Life) is the number-one hit song performed by Ricky Martin. It was released on March 23, 1999, from Martin's self-titled debut English-language album.\n\nI actually heard this song first from Eddie Murphy and Antonio Banderas at the end of Shrek 2 lol. Gotta say, its pretty catchy.\n\nEDIT: Fixed one mismapped note on chorus section and added two more notes at the very start of the song",uploader:{id:58338,name:"Joetastic",uniqueSet:!0,hash:"5cff0b7498cc5a672c85050e",avatar:"https://cdn.beatsaver.com/avatar/227767566402191360.png",type:"DISCORD"},metadata:{bpm:178,duration:242,songName:"Livin' La Vida Loca",songSubName:"",songAuthorName:"Ricky Martin",levelAuthorName:"Joetastic"},stats:{plays:0,downloads:7458,upvotes:2396,downvotes:63,score:.9292},uploaded:"2019-07-15T07:01:36.333Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"13d4f57a62f8725b39e607914637625e1edaf58d",key:"5725",state:"Published",createdAt:"2019-07-15T07:01:36.333Z",sageScore:6,diffs:[{njs:14,offset:0,notes:932,bombs:0,obstacles:20,nps:3.908,length:707.5,characteristic:"Standard",difficulty:"Expert",events:2683,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:238.483,paritySummary:{errors:87,warns:58,resets:0}}],downloadURL:"https://cdn.beatsaver.com/13d4f57a62f8725b39e607914637625e1edaf58d.zip",coverURL:"https://cdn.beatsaver.com/13d4f57a62f8725b39e607914637625e1edaf58d.jpg",previewURL:"https://cdn.beatsaver.com/13d4f57a62f8725b39e607914637625e1edaf58d.mp3"}],createdAt:"2019-07-15T07:01:36.333Z",updatedAt:"2019-07-15T07:01:36.333Z",lastPublishedAt:"2019-07-15T07:01:36.333Z"},{id:"5efe",name:"Welcome to the Club - Nightcore (Manian)",description:"Been a while since I released, but I'm back with a brand new map! Welcome to the club everyone! We've got it goin on, til the break of dawn, so put the record on!\n\nBPM: 182.39\nNPS: N - 2.46 ; H - 2.91 ; Ex - 4.03 ; Ex+ - 4.51\nNotes: N - 396 ; H - 468 ; Ex - 648 ; Ex+ - 725\nWalls: N - 131 ; H - 48 ; Ex - 27 ; Ex+ - 31\nBombs: N - 24 ; H - 0 ; Ex - 0 ; Ex+ - 0\n\nThanks to Redmagi, Kival Evan, helencarnate, and redhq for testing, and to Skeelie and Ryger (RaynArch) for helping with timing!",uploader:{id:4285188,name:"fruhead",uniqueSet:!0,hash:"5cff0b7598cc5a672c852683",avatar:"https://cdn.beatsaver.com/avatar/174000100413145090.png",type:"DISCORD"},metadata:{bpm:182.39,duration:161,songName:"Welcome to the Club",songSubName:"",songAuthorName:"Nightcore",levelAuthorName:"fruhead"},stats:{plays:0,downloads:3613,upvotes:2226,downvotes:56,score:.9291},uploaded:"2019-08-25T06:45:04.972Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"f42e4fb7ea9a439bdf295ee1cf4459e52d15b520",key:"5efe",state:"Published",createdAt:"2019-08-25T06:45:04.972Z",sageScore:4,diffs:[{njs:12,offset:0,notes:396,bombs:24,obstacles:131,nps:2.556,length:471,characteristic:"Standard",difficulty:"Normal",events:5134,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:154.943,paritySummary:{errors:42,warns:4,resets:4}},{njs:14,offset:.5,notes:468,bombs:0,obstacles:48,nps:3.018,length:471.375,characteristic:"Standard",difficulty:"Hard",events:5134,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:155.066,paritySummary:{errors:14,warns:1,resets:0}},{njs:17,offset:.5,notes:648,bombs:0,obstacles:27,nps:4.179,length:471.375,characteristic:"Standard",difficulty:"Expert",events:5134,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:155.066,paritySummary:{errors:18,warns:2,resets:0}},{njs:18,offset:.5,notes:725,bombs:0,obstacles:31,nps:4.675,length:471.375,characteristic:"Standard",difficulty:"ExpertPlus",events:5134,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:155.066,paritySummary:{errors:27,warns:3,resets:0}}],downloadURL:"https://cdn.beatsaver.com/f42e4fb7ea9a439bdf295ee1cf4459e52d15b520.zip",coverURL:"https://cdn.beatsaver.com/f42e4fb7ea9a439bdf295ee1cf4459e52d15b520.jpg",previewURL:"https://cdn.beatsaver.com/f42e4fb7ea9a439bdf295ee1cf4459e52d15b520.mp3"}],createdAt:"2019-08-25T06:45:04.972Z",updatedAt:"2019-08-25T06:45:04.972Z",lastPublishedAt:"2019-08-25T06:45:04.972Z"},{id:"58b7",name:"The Twist - Chubby Checker",description:"Do the Twist!\n\nThere's a twist to this map ;) it has zero down slash notes (I always wanted to try making a map with no down slashes and I think I found the perfect song to try that)",uploader:{id:58338,name:"Joetastic",uniqueSet:!0,hash:"5cff0b7498cc5a672c85050e",avatar:"https://cdn.beatsaver.com/avatar/227767566402191360.png",type:"DISCORD"},metadata:{bpm:155,duration:158,songName:"The Twist",songSubName:"",songAuthorName:"Chubby Checker",levelAuthorName:"Joetastic"},stats:{plays:0,downloads:2345,upvotes:998,downvotes:10,score:.929},uploaded:"2019-07-24T18:00:19.429Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"1c2af7c45bb55bfb19401ac619bded30c4cf01c6",key:"58b7",state:"Published",createdAt:"2019-07-24T18:00:19.429Z",sageScore:6,diffs:[{njs:14,offset:0,notes:591,bombs:0,obstacles:4,nps:3.834,length:398.188,characteristic:"Standard",difficulty:"Expert",events:2280,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:154.137,paritySummary:{errors:15,warns:93,resets:0}}],downloadURL:"https://cdn.beatsaver.com/1c2af7c45bb55bfb19401ac619bded30c4cf01c6.zip",coverURL:"https://cdn.beatsaver.com/1c2af7c45bb55bfb19401ac619bded30c4cf01c6.jpg",previewURL:"https://cdn.beatsaver.com/1c2af7c45bb55bfb19401ac619bded30c4cf01c6.mp3"}],createdAt:"2019-07-24T18:00:19.429Z",updatedAt:"2019-07-24T18:00:19.429Z",lastPublishedAt:"2019-07-24T18:00:19.429Z"},{id:"11e9c",name:"Tsuki No Waltz (Standard and FeetSaber)",description:"*****Attention!!*****\nThis map will take SO LONG to finish loading, since it has 2 standard and 3 FeetSaber difficulties which are all wallmaps... Please be patient.\n読み込みがものすごく長いです。2刀譜面2つ、足譜面3つ、すべて壁譜面なので…。\n*********************\n\nRequirements :\nNoodle Extensions\nChroma\nFeet Saber (NalulunaModifier)\n\nBig thanks to Rinka Michibiki for making standard difficulties.\n2刀譜面を提供していただいた導祈りんか様に、心からの感謝を。\n\nFeetmap and wall: henomohesan @henomohesan\nStandard difficulty: Rinka Michibiki @rinka_michibiki\n\nDemo :\n(Standard) https://youtu.be/4Q_PJ7tg3LA\n(Feet Saber) https://youtu.be/PngIJAleFTQ\n\nYou can download NalulunaModifier from official page :\nhttps://youtu.be/QtLNweiiQPU\n\nSpecial Thanks:\nMapping Club JP Discord by kamy @kamy_0811\nChromapper JP manual by 姚明 @gensouyou_39\nBeatwall JP manual by Kamy @kamy_0811 and FaZPi @FaZ_Pi",uploader:{id:4285472,name:"henomohesan",uniqueSet:!0,hash:"5ece0766d87e5800060a4635",avatar:"https://cdn.beatsaver.com/avatar/483262661245796352.png",type:"DISCORD"},metadata:{bpm:173,duration:183,songName:"Tsuki No Waltz (Standard and FeetSaber)",songSubName:"",songAuthorName:"Mio Isayama",levelAuthorName:"henomohesan"},stats:{plays:0,downloads:2241,upvotes:723,downvotes:2,score:.9288},uploaded:"2020-12-22T07:56:06.804Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"c967a5862a8602ebacebe44b6ac5c2422c3e90bb",key:"11e9c",state:"Published",createdAt:"2020-12-22T07:56:06.804Z",sageScore:4,diffs:[{njs:10,offset:.7,notes:218,bombs:0,obstacles:13839,nps:1.318,length:477,characteristic:"Standard",difficulty:"Normal",events:6,chroma:!0,me:!1,ne:!0,cinema:!1,seconds:165.434,paritySummary:{errors:6,warns:0,resets:0}},{njs:11,offset:-.5,notes:398,bombs:0,obstacles:13839,nps:2.406,length:477,characteristic:"Standard",difficulty:"Hard",events:6,chroma:!0,me:!1,ne:!0,cinema:!1,seconds:165.434,paritySummary:{errors:3,warns:7,resets:0}},{njs:8,offset:0,notes:206,bombs:0,obstacles:13859,nps:1.245,length:477,characteristic:"NoArrows",difficulty:"Easy",events:6,chroma:!0,me:!1,ne:!0,cinema:!1,seconds:165.434,paritySummary:{errors:0,warns:0,resets:0}},{njs:10,offset:0,notes:333,bombs:0,obstacles:13839,nps:2.013,length:477,characteristic:"NoArrows",difficulty:"Normal",events:6,chroma:!0,me:!1,ne:!0,cinema:!1,seconds:165.434,paritySummary:{errors:0,warns:0,resets:0}},{njs:10,offset:0,notes:408,bombs:0,obstacles:13839,nps:2.466,length:477,characteristic:"NoArrows",difficulty:"Expert",events:6,chroma:!0,me:!1,ne:!0,cinema:!1,seconds:165.434,paritySummary:{errors:0,warns:0,resets:0}}],downloadURL:"https://cdn.beatsaver.com/c967a5862a8602ebacebe44b6ac5c2422c3e90bb.zip",coverURL:"https://cdn.beatsaver.com/c967a5862a8602ebacebe44b6ac5c2422c3e90bb.jpg",previewURL:"https://cdn.beatsaver.com/c967a5862a8602ebacebe44b6ac5c2422c3e90bb.mp3"}],createdAt:"2020-12-22T07:56:06.804Z",updatedAt:"2020-12-22T07:56:06.804Z",lastPublishedAt:"2020-12-22T07:56:06.804Z"},{id:"44f6",name:"Blumenkranz - Cyua & Hiroyuki Sawano [Kill la Kill OST]",description:"Smol fix in Exp.\r\n\r\nExp+ Gameplay: https://youtu.be/lAi_xIWoQsc\r\n\r\nVocals by Cyua.\r\nMusic by Hiroyuki Sawano.\r\nLyrics by Rie Sawano.\r\nCheck out Kill la Kill, it's awesome! And has more awesome music!\r\nhttps://myanimelist.net/anime/18679/Kill_la_Kill\r\n\r\nCover from the Kill la Kill OST.",uploader:{id:4286005,name:"mandynasty",uniqueSet:!0,hash:"5cff0b7398cc5a672c84ffaa",avatar:"https://cdn.beatsaver.com/avatar/307589087030673408.png",type:"DISCORD"},metadata:{bpm:160,duration:259,songName:"Blumenkranz",songSubName:"Cyua & Hiroyuki Sawano",songAuthorName:"ManDynasty",levelAuthorName:"ManDynasty"},stats:{plays:0,downloads:2635,upvotes:1171,downvotes:16,score:.9288},uploaded:"2019-04-11T19:30:09Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"01f7b442e2f206d1611fe45e297c216fe07da78e",key:"44f6",state:"Published",createdAt:"2019-04-11T19:30:09Z",sageScore:4,diffs:[{njs:10,offset:0,notes:462,bombs:52,obstacles:94,nps:1.839,length:670,characteristic:"Standard",difficulty:"Normal",events:4169,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:251.25,paritySummary:{errors:23,warns:15,resets:1}},{njs:14,offset:1,notes:633,bombs:101,obstacles:89,nps:2.519,length:670,characteristic:"Standard",difficulty:"Hard",events:4169,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:251.25,paritySummary:{errors:44,warns:53,resets:1}},{njs:15,offset:1,notes:947,bombs:66,obstacles:77,nps:3.764,length:671,characteristic:"Standard",difficulty:"Expert",events:4169,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:251.625,paritySummary:{errors:85,warns:116,resets:2}},{njs:16,offset:0,notes:1054,bombs:66,obstacles:83,nps:4.189,length:671,characteristic:"Standard",difficulty:"ExpertPlus",events:4169,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:251.625,paritySummary:{errors:80,warns:108,resets:2}}],downloadURL:"https://cdn.beatsaver.com/01f7b442e2f206d1611fe45e297c216fe07da78e.zip",coverURL:"https://cdn.beatsaver.com/01f7b442e2f206d1611fe45e297c216fe07da78e.jpg",previewURL:"https://cdn.beatsaver.com/01f7b442e2f206d1611fe45e297c216fe07da78e.mp3"}],createdAt:"2019-04-11T19:30:09Z",updatedAt:"2019-04-11T19:30:09Z",lastPublishedAt:"2019-04-11T19:30:09Z"},{id:"4377",name:"The Greatest - Sia",description:"YouTube Preview: https://youtu.be/huUMotlFpig",uploader:{id:30311,name:"bennydabeast",uniqueSet:!0,hash:"5cff0b7298cc5a672c84e98d",avatar:"https://cdn.beatsaver.com/avatar/30311.jpg",type:"SIMPLE"},metadata:{bpm:192,duration:191,songName:"The Greatest (ft. Kendrick Lamar)",songSubName:"Sia",songAuthorName:"BennyDaBeast",levelAuthorName:"bennydabeast"},stats:{plays:0,downloads:6436,upvotes:2325,downvotes:61,score:.9288},uploaded:"2019-04-04T21:20:03Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"58cd8ddf99600d967bca61285e9e0c429138009d",key:"4377",state:"Published",createdAt:"2019-04-04T21:20:03Z",sageScore:6,diffs:[{njs:12,offset:0,notes:822,bombs:16,obstacles:20,nps:4.355,length:604,characteristic:"Standard",difficulty:"ExpertPlus",events:3165,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:188.75,paritySummary:{errors:91,warns:108,resets:0}}],downloadURL:"https://cdn.beatsaver.com/58cd8ddf99600d967bca61285e9e0c429138009d.zip",coverURL:"https://cdn.beatsaver.com/58cd8ddf99600d967bca61285e9e0c429138009d.jpg",previewURL:"https://cdn.beatsaver.com/58cd8ddf99600d967bca61285e9e0c429138009d.mp3"}],createdAt:"2019-04-04T21:20:03Z",updatedAt:"2019-04-04T21:20:03Z",lastPublishedAt:"2019-04-04T21:20:03Z"},{id:"110ac",name:"Madeon - The Prince",description:'*CHROMA RECOMMENDED*\n\nThis map was originally going to have autolights. Imagine.\n\nDg: "When I began lighting this map, I did it with the intention of copying the colors and vibe of the official visualizer by Madeon, with my own twists to bring it up to Beat Saber level. The amount of time and effort that went into literally lighting thermal cam... unreal."\n\nYou can check out the visualizer here:https://www.youtube.com/watch?v=AOhFzDN3eMI\n\nBearly#5259\nDGRJ4Life#6510',uploader:{id:2381,name:"bearly",uniqueSet:!0,hash:"5ea9efbf16c968000636dba4",avatar:"https://www.gravatar.com/avatar/5ea9efbf16c968000636dba4?d=retro",type:"SIMPLE"},metadata:{bpm:95,duration:223,songName:"The Prince",songSubName:"",songAuthorName:"Madeon",levelAuthorName:"Bearly & dgrj4life"},stats:{plays:0,downloads:8424,upvotes:1707,downvotes:36,score:.9287},uploaded:"2020-11-16T23:34:00.851Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"cf3243d6fc63c77a3b864414314ca4fb36f69e77",key:"110ac",state:"Published",createdAt:"2020-11-16T23:34:00.851Z",sageScore:5,diffs:[{njs:17,offset:.15,notes:917,bombs:8,obstacles:30,nps:4.27,length:340,characteristic:"Standard",difficulty:"Expert",events:33893,chroma:!0,me:!1,ne:!1,cinema:!1,seconds:214.737,paritySummary:{errors:0,warns:0,resets:3}},{njs:18.5,offset:-.2,notes:990,bombs:3,obstacles:21,nps:4.61,length:340,characteristic:"Standard",difficulty:"ExpertPlus",events:33893,chroma:!0,me:!1,ne:!1,cinema:!1,seconds:214.737,paritySummary:{errors:0,warns:0,resets:1}},{njs:16,offset:0,notes:0,bombs:0,obstacles:0,nps:0,length:0,characteristic:"Lightshow",difficulty:"Easy",events:33893,chroma:!0,me:!1,ne:!1,cinema:!1,seconds:0,paritySummary:{errors:0,warns:0,resets:0}}],downloadURL:"https://cdn.beatsaver.com/cf3243d6fc63c77a3b864414314ca4fb36f69e77.zip",coverURL:"https://cdn.beatsaver.com/cf3243d6fc63c77a3b864414314ca4fb36f69e77.jpg",previewURL:"https://cdn.beatsaver.com/cf3243d6fc63c77a3b864414314ca4fb36f69e77.mp3"}],createdAt:"2020-11-16T23:34:00.851Z",updatedAt:"2020-11-16T23:34:00.851Z",lastPublishedAt:"2020-11-16T23:34:00.851Z"},{id:"b18a",name:"[Bloq Busters Vol. 4] Eric Johnson - Cliffs of Dover",description:"Thanks to SkylerWallace for warping the audio to make this actually mappable! I loved this song from Guitar Hero, and wanted it to have a spot here in Beat Saber. Enjoy!",uploader:{id:4284569,name:"checkthepan",uniqueSet:!0,hash:"5cff0b7398cc5a672c84f3d5",avatar:"https://cdn.beatsaver.com/avatar/184355369189900290.png",type:"DISCORD"},metadata:{bpm:95,duration:254,songName:"Cliffs of Dover",songSubName:"",songAuthorName:"Eric Johnson",levelAuthorName:"Checkthepan"},stats:{plays:0,downloads:5733,upvotes:1467,downvotes:27,score:.9286},uploaded:"2020-06-12T22:01:10.949Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"9f9f5c00b449549b1c276209148551c38abf495a",key:"b18a",state:"Published",createdAt:"2020-06-12T22:01:10.949Z",sageScore:6,diffs:[{njs:14,offset:-.25,notes:835,bombs:0,obstacles:2,nps:3.389,length:390.063,characteristic:"Standard",difficulty:"Hard",events:8195,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:246.355,paritySummary:{errors:9,warns:7,resets:0}},{njs:16,offset:.25,notes:1327,bombs:89,obstacles:20,nps:5.387,length:390.063,characteristic:"Standard",difficulty:"Expert",events:8195,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:246.355,paritySummary:{errors:0,warns:0,resets:0}},{njs:20,offset:0,notes:1417,bombs:178,obstacles:10,nps:5.752,length:390.063,characteristic:"Standard",difficulty:"ExpertPlus",events:8195,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:246.355,paritySummary:{errors:3,warns:1,resets:7}}],downloadURL:"https://cdn.beatsaver.com/9f9f5c00b449549b1c276209148551c38abf495a.zip",coverURL:"https://cdn.beatsaver.com/9f9f5c00b449549b1c276209148551c38abf495a.jpg",previewURL:"https://cdn.beatsaver.com/9f9f5c00b449549b1c276209148551c38abf495a.mp3"}],createdAt:"2020-06-12T22:01:10.949Z",updatedAt:"2020-06-12T22:01:10.949Z",lastPublishedAt:"2020-06-12T22:01:10.949Z"},{id:"21b8",name:"Senpai Notice Me",description:"I need therapy.\r\nFinally getting it ranked! Let's go!",uploader:{id:28684,name:"jackodej",uniqueSet:!0,hash:"5cff0b7498cc5a672c850120",avatar:"https://www.gravatar.com/avatar/5cff0b7498cc5a672c850120?d=retro",type:"SIMPLE"},metadata:{bpm:155,duration:278,songName:"Senpai Notice Me",songSubName:"Camellia ft. Nanahira",songAuthorName:"JackoDEJ",levelAuthorName:"JackoDEJ"},stats:{plays:0,downloads:5405,upvotes:5203,downvotes:197,score:.9286},uploaded:"2018-11-23T14:11:31Z",automapper:!1,ranked:!0,qualified:!1,versions:[{hash:"e3ef6cab44ff2222c09b399e8e5a62a095233621",key:"21b8",state:"Published",createdAt:"2018-11-23T14:11:31Z",sageScore:6,diffs:[{njs:16,offset:0,notes:1730,bombs:0,obstacles:5,nps:6.357,length:703,characteristic:"Standard",difficulty:"ExpertPlus",events:1758,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:272.129,paritySummary:{errors:58,warns:61,resets:0},stars:5.91}],downloadURL:"https://cdn.beatsaver.com/e3ef6cab44ff2222c09b399e8e5a62a095233621.zip",coverURL:"https://cdn.beatsaver.com/e3ef6cab44ff2222c09b399e8e5a62a095233621.jpg",previewURL:"https://cdn.beatsaver.com/e3ef6cab44ff2222c09b399e8e5a62a095233621.mp3"}],createdAt:"2018-11-23T14:11:31Z",updatedAt:"2018-11-23T14:11:31Z",lastPublishedAt:"2018-11-23T14:11:31Z"},{id:"42",name:"Icarus - Madeon - HARD",description:"Icarus by Madeon,\r\n\r\nMostly an experiment in the 3D editor events... editor...\r\n\r\nFully evented, 3:33 length\r\n\r\nHard difficulty only.\r\n\r\nYoutube playthrough: https://www.youtube.com/watch?v=VvEkluZHkY4",uploader:{id:53534,name:"gompasta",uniqueSet:!1,hash:"5cff0b7298cc5a672c84e8de",avatar:"https://www.gravatar.com/avatar/5cff0b7298cc5a672c84e8de?d=retro",type:"SIMPLE"},metadata:{bpm:126,duration:213,songName:"Icarus",songSubName:"",songAuthorName:"Madeon",levelAuthorName:"gompasta"},stats:{plays:0,downloads:6994,upvotes:3007,downvotes:92,score:.9285},uploaded:"2018-05-12T00:35:40Z",automapper:!1,ranked:!0,qualified:!1,versions:[{hash:"be1a39b41f2089cad9aa8d775f55e8707447b5ca",key:"42",state:"Published",createdAt:"2018-05-12T00:35:40Z",sageScore:5,diffs:[{njs:10,offset:0,notes:420,bombs:16,obstacles:6,nps:2.035,length:433.5,characteristic:"Standard",difficulty:"Hard",events:859,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:206.429,paritySummary:{errors:59,warns:63,resets:4},stars:1.56}],downloadURL:"https://cdn.beatsaver.com/be1a39b41f2089cad9aa8d775f55e8707447b5ca.zip",coverURL:"https://cdn.beatsaver.com/be1a39b41f2089cad9aa8d775f55e8707447b5ca.jpg",previewURL:"https://cdn.beatsaver.com/be1a39b41f2089cad9aa8d775f55e8707447b5ca.mp3"}],createdAt:"2018-05-12T00:35:40Z",updatedAt:"2018-05-12T00:35:40Z",lastPublishedAt:"2018-05-12T00:35:40Z"},{id:"8fc3",name:"Katy Perry - Dark Horse (feat. Juicy J) [Z-ANESaber]",description:"Yo\r\nI´m open for song requests so if you have any ideas let me know in the comments or on Discord:\r\nNiqu#9221\r\n\r\nThis song was requested by: SaberTribe\r\nHave fun!\r\n\r\nPlaythrough: https://www.youtube.com/watch?v=Qs8xfj_EQYs&feature=youtu.be\r\n\r\nSong: https://www.youtube.com/watch?v=0KSOMA3QBU0\r\n\r\nBye",uploader:{id:4284220,name:"z-anesaber",uniqueSet:!0,hash:"5dfbafac9921260006527fa4",avatar:"https://cdn.beatsaver.com/avatar/324954940885958658.png",type:"DISCORD"},metadata:{bpm:132,duration:212,songName:"Dark Horse [Z-ANESaber]",songSubName:"(feat. Juicy J)",songAuthorName:"Katy Perry",levelAuthorName:"Z-ANESaber"},stats:{plays:0,downloads:4654,upvotes:1239,downvotes:19,score:.9283},uploaded:"2020-03-13T21:40:12.962Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"e53f2a91acfca398d1770e3972861ce15f56b123",key:"8fc3",state:"Published",createdAt:"2020-03-13T21:40:12.962Z",sageScore:3,diffs:[{njs:13.3,offset:0,notes:802,bombs:12,obstacles:9,nps:3.811,length:463,characteristic:"Standard",difficulty:"Expert",events:1851,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:210.455,paritySummary:{errors:6,warns:4,resets:0}}],downloadURL:"https://cdn.beatsaver.com/e53f2a91acfca398d1770e3972861ce15f56b123.zip",coverURL:"https://cdn.beatsaver.com/e53f2a91acfca398d1770e3972861ce15f56b123.jpg",previewURL:"https://cdn.beatsaver.com/e53f2a91acfca398d1770e3972861ce15f56b123.mp3"}],createdAt:"2020-03-13T21:40:12.962Z",updatedAt:"2020-03-13T21:40:12.962Z",lastPublishedAt:"2020-03-13T21:40:12.962Z"},{id:"89be",name:"More One Night [Girl's Last Tour Ending]",description:"Sung by \nChito (CV: Inori Minase)\nYuuri (CV: Yurika Kubo)\n\nCute girls doing post-apocalyptic things\n\nI have fancy lighting on this one so make sure you got chroma or chromalite to see it! Unfortunately I couldn't get ring prop to work, I think i just mapped it wrong LOL. I learn soon enough\n\nBPM 123 | \nExpert+\nExpert\nHard\nLightshow\n\nty Qwasyx for playtesting\n\npreview: https://www.youtube.com/watch?v=bsqZWXBMQwQ\n\nDM any feedback on Discord\nETAN#8341",uploader:{id:4235140,name:"etan",uniqueSet:!0,hash:"5cff0b7798cc5a672c855775",avatar:"https://cdn.beatsaver.com/avatar/136373107559497728.png",type:"DISCORD"},metadata:{bpm:123,duration:214,songName:"More One Night",songSubName:"",songAuthorName:"Inori Minase, Yurika Kubo",levelAuthorName:"ETAN"},stats:{plays:0,downloads:2748,upvotes:1179,downvotes:17,score:.9283},uploaded:"2020-02-22T21:17:09.228Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"bf43cba8026db57a2dda154ae4fa24621cc3a232",key:"89be",state:"Published",createdAt:"2020-02-22T21:17:09.228Z",sageScore:7,diffs:[{njs:13,offset:.4,notes:583,bombs:0,obstacles:21,nps:2.786,length:429,characteristic:"Standard",difficulty:"Hard",events:16009,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:209.268,paritySummary:{errors:0,warns:0,resets:0}},{njs:15,offset:0,notes:833,bombs:0,obstacles:21,nps:3.981,length:429,characteristic:"Standard",difficulty:"Expert",events:16009,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:209.268,paritySummary:{errors:0,warns:0,resets:0}},{njs:20,offset:.5,notes:1e3,bombs:0,obstacles:21,nps:4.779,length:429,characteristic:"Standard",difficulty:"ExpertPlus",events:16009,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:209.268,paritySummary:{errors:12,warns:9,resets:0}},{njs:10,offset:0,notes:0,bombs:0,obstacles:0,nps:0,length:0,characteristic:"Lightshow",difficulty:"Easy",events:16009,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:0,paritySummary:{errors:0,warns:0,resets:0}}],downloadURL:"https://cdn.beatsaver.com/bf43cba8026db57a2dda154ae4fa24621cc3a232.zip",coverURL:"https://cdn.beatsaver.com/bf43cba8026db57a2dda154ae4fa24621cc3a232.jpg",previewURL:"https://cdn.beatsaver.com/bf43cba8026db57a2dda154ae4fa24621cc3a232.mp3"}],createdAt:"2020-02-22T21:17:09.228Z",updatedAt:"2020-02-22T21:17:09.228Z",lastPublishedAt:"2020-02-22T21:17:09.228Z"},{id:"72de",name:"GRiZ - Can't Hold Me Down",description:"Easy, normal, hard, expert (maulable), expert+\r\n\r\nThis is a remap, first had major issues. Maul players seem to like the original, so a modified version is included in the expert slot. Also now has a full spread and hand lights are replacing the trash from light map.\r\n\r\nSpecial thanks to Adeza for the original suggestion. \r\n\r\nVideo: https://www.youtube.com/watch?v=c1_ziuz5hrA",uploader:{id:4235138,name:"CyanSnow",uniqueSet:!0,hash:"5cff0b7698cc5a672c8543ac",avatar:"https://cdn.beatsaver.com/avatar/154341137694326784.png",type:"DISCORD"},metadata:{bpm:180,duration:208,songName:"Can't Hold Me Down",songSubName:"",songAuthorName:"GRiZ",levelAuthorName:"CyanSnow"},stats:{plays:0,downloads:4104,upvotes:1886,downvotes:44,score:.9283},uploaded:"2019-11-30T21:07:56.418Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"a0ebf4980fcb1f29871582dbeca8e3a8d5511f1c",key:"72de",state:"Published",createdAt:"2019-11-30T21:07:56.418Z",sageScore:7,diffs:[{njs:12,offset:.25,notes:303,bombs:0,obstacles:0,nps:1.524,length:596.5,characteristic:"Standard",difficulty:"Easy",events:11378,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:198.833,paritySummary:{errors:94,warns:26,resets:0}},{njs:12,offset:.25,notes:380,bombs:0,obstacles:0,nps:1.911,length:596.5,characteristic:"Standard",difficulty:"Normal",events:11378,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:198.833,paritySummary:{errors:49,warns:17,resets:0}},{njs:14,offset:1,notes:420,bombs:0,obstacles:20,nps:2.112,length:596.5,characteristic:"Standard",difficulty:"Hard",events:11378,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:198.833,paritySummary:{errors:12,warns:7,resets:0}},{njs:16,offset:.5,notes:749,bombs:0,obstacles:190,nps:3.767,length:596.5,characteristic:"Standard",difficulty:"Expert",events:11378,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:198.833,paritySummary:{errors:7,warns:2,resets:0}},{njs:18,offset:.25,notes:1029,bombs:139,obstacles:18,nps:5.175,length:596.5,characteristic:"Standard",difficulty:"ExpertPlus",events:11378,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:198.833,paritySummary:{errors:6,warns:0,resets:0}}],downloadURL:"https://cdn.beatsaver.com/a0ebf4980fcb1f29871582dbeca8e3a8d5511f1c.zip",coverURL:"https://cdn.beatsaver.com/a0ebf4980fcb1f29871582dbeca8e3a8d5511f1c.jpg",previewURL:"https://cdn.beatsaver.com/a0ebf4980fcb1f29871582dbeca8e3a8d5511f1c.mp3"}],createdAt:"2019-11-30T21:07:56.418Z",updatedAt:"2019-11-30T21:07:56.418Z",lastPublishedAt:"2019-11-30T21:07:56.418Z"},{id:"11de5",name:"Kaibutsu (TV Size) [Beastars Season 2 Opening] - YOASOBI",description:"Kaibutsu / 怪物 is the seventh single by Yoasobi. It is used as the opening theme song to the second season of Beastars.\n\nThis map was a special request by ScrewBedtime#5490\n\nKeep up to date on my maps: https://twitter.com/Joetastic_\nMy mapper's profile: https://bsaber.com/members/joetastic/\nContact me on discord: @Joetastic#2501",uploader:{id:58338,name:"Joetastic",uniqueSet:!0,hash:"5cff0b7498cc5a672c85050e",avatar:"https://cdn.beatsaver.com/avatar/227767566402191360.png",type:"DISCORD"},metadata:{bpm:170,duration:88,songName:"Kaibutsu (TV Size)",songSubName:"",songAuthorName:"YOASOBI",levelAuthorName:"Joetastic"},stats:{plays:0,downloads:16414,upvotes:1604,downvotes:33,score:.9281},uploaded:"2020-12-21T17:50:41.969Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"08d9a92c273f6d06baa30c5b70f182c902349578",key:"11de5",state:"Published",createdAt:"2020-12-21T17:50:41.969Z",sageScore:3,diffs:[{njs:15,offset:.5,notes:327,bombs:6,obstacles:28,nps:3.829,length:242,characteristic:"Standard",difficulty:"Hard",events:2248,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:85.412,paritySummary:{errors:7,warns:0,resets:0}},{njs:17,offset:.2,notes:426,bombs:6,obstacles:44,nps:4.988,length:242,characteristic:"Standard",difficulty:"Expert",events:2248,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:85.412,paritySummary:{errors:1,warns:0,resets:0}},{njs:19,offset:0,notes:475,bombs:6,obstacles:43,nps:5.561,length:242,characteristic:"Standard",difficulty:"ExpertPlus",events:2248,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:85.412,paritySummary:{errors:1,warns:0,resets:0}}],downloadURL:"https://cdn.beatsaver.com/08d9a92c273f6d06baa30c5b70f182c902349578.zip",coverURL:"https://cdn.beatsaver.com/08d9a92c273f6d06baa30c5b70f182c902349578.jpg",previewURL:"https://cdn.beatsaver.com/08d9a92c273f6d06baa30c5b70f182c902349578.mp3"}],createdAt:"2020-12-21T17:50:41.969Z",updatedAt:"2020-12-21T17:50:41.969Z",lastPublishedAt:"2020-12-21T17:50:41.969Z"},{id:"ae3c",name:"Fox Stevenson - Bruises",description:"I GOT.\r\nBRUISES.\r\n\r\nMade for my fiancee, and cause this song rocks enough to deserve a 360 and 90 degree map.\r\n\r\n2nd Reupload to fix a big oops in the 360 and 90 degree map ;_;",uploader:{id:4284569,name:"checkthepan",uniqueSet:!0,hash:"5cff0b7398cc5a672c84f3d5",avatar:"https://cdn.beatsaver.com/avatar/184355369189900290.png",type:"DISCORD"},metadata:{bpm:174,duration:224,songName:"Bruises",songSubName:"",songAuthorName:"Fox Stevenson",levelAuthorName:"Checkthepan"},stats:{plays:0,downloads:3027,upvotes:1258,downvotes:20,score:.9281},uploaded:"2020-06-04T12:46:11.099Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"71eff19ed6d32fd0a446e1a32303c77aa7f646f2",key:"ae3c",state:"Published",createdAt:"2020-06-04T12:46:11.099Z",sageScore:7,diffs:[{njs:10,offset:0,notes:335,bombs:0,obstacles:65,nps:1.52,length:639,characteristic:"Standard",difficulty:"Easy",events:13393,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:220.345,paritySummary:{errors:86,warns:21,resets:0}},{njs:10,offset:0,notes:446,bombs:12,obstacles:64,nps:2.024,length:639,characteristic:"Standard",difficulty:"Normal",events:13393,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:220.345,paritySummary:{errors:87,warns:1,resets:1}},{njs:12,offset:0,notes:692,bombs:12,obstacles:66,nps:3.141,length:639,characteristic:"Standard",difficulty:"Hard",events:13393,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:220.345,paritySummary:{errors:8,warns:4,resets:3}},{njs:15,offset:.5,notes:1023,bombs:18,obstacles:52,nps:4.643,length:639,characteristic:"Standard",difficulty:"Expert",events:13393,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:220.345,paritySummary:{errors:4,warns:2,resets:1}},{njs:19,offset:0,notes:1476,bombs:76,obstacles:0,nps:6.693,length:639.562,characteristic:"Standard",difficulty:"ExpertPlus",events:13394,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:220.539,paritySummary:{errors:6,warns:0,resets:15}},{njs:19,offset:.25,notes:1462,bombs:130,obstacles:70,nps:6.627,length:639.75,characteristic:"90Degree",difficulty:"ExpertPlus",events:13958,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:220.603,paritySummary:{errors:4,warns:1,resets:15}},{njs:19,offset:.25,notes:1462,bombs:130,obstacles:74,nps:6.627,length:639.75,characteristic:"360Degree",difficulty:"ExpertPlus",events:13974,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:220.603,paritySummary:{errors:4,warns:1,resets:15}}],downloadURL:"https://cdn.beatsaver.com/71eff19ed6d32fd0a446e1a32303c77aa7f646f2.zip",coverURL:"https://cdn.beatsaver.com/71eff19ed6d32fd0a446e1a32303c77aa7f646f2.jpg",previewURL:"https://cdn.beatsaver.com/71eff19ed6d32fd0a446e1a32303c77aa7f646f2.mp3"}],createdAt:"2020-06-04T12:46:11.099Z",updatedAt:"2020-06-04T12:46:11.099Z",lastPublishedAt:"2020-06-04T12:46:11.099Z"},{id:"6909",name:"Feuer Frei! - Rammstein",description:"Had fun making his one, and also made some One Saber difficulties for it since it fit pretty well. Enjoy!\n\nIncludes Standard (2 saber) Expert through Easy and One Saber Expert through Normal, and is a bit harder than normal since it's a faster song.\n\nNo preview (yet).\n\nBPM: 180.18\nDuration: 3:08\n\nStandard (2 Sabers):\nEasy, Normal, Hard and Expert difficulties:\n\nEasy:\n280 notes, 16 obstacles, 4 mines\n\nNormal:\n337 notes, 16 obstacles, 4 mines\n\nHard:\n459 notes, 15 obstacles, 4 mines\n\nExpert:\n773 notes, 16 obstacles, 2 mines\n\n\nOne Saber:\nNormal, Hard and Expert difficulties:\n\nNormal:\n216 notes, 17 obstacles, 0 mines\n\nHard:\n315 notes, 16 obstacles, 0 mines\n\nExpert:\n472 notes, 16 obstacles, 2 mines",uploader:{id:4285318,name:"kolezan",uniqueSet:!0,hash:"5cff0b7398cc5a672c84fcbb",avatar:"https://cdn.beatsaver.com/avatar/220513618763055106.png",type:"DISCORD"},metadata:{bpm:190.18,duration:188,songName:"Feuer Frei!",songSubName:"",songAuthorName:"Rammstein",levelAuthorName:"Kolezan"},stats:{plays:0,downloads:6179,upvotes:2018,downvotes:50,score:.928},uploaded:"2019-10-11T06:11:24.477Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"a14d4f258c4a8012e110b599d725be7b20a5470a",key:"6909",state:"Published",createdAt:"2019-10-11T06:11:24.477Z",sageScore:5,diffs:[{njs:10,offset:0,notes:280,bombs:4,obstacles:16,nps:1.592,length:557.313,characteristic:"Standard",difficulty:"Easy",events:2306,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:175.827,paritySummary:{errors:60,warns:13,resets:0}},{njs:12,offset:.5,notes:337,bombs:4,obstacles:16,nps:1.917,length:557.313,characteristic:"Standard",difficulty:"Normal",events:2306,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:175.827,paritySummary:{errors:23,warns:19,resets:0}},{njs:16,offset:1,notes:459,bombs:4,obstacles:15,nps:2.611,length:557.313,characteristic:"Standard",difficulty:"Hard",events:2306,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:175.827,paritySummary:{errors:29,warns:24,resets:0}},{njs:19,offset:1,notes:773,bombs:2,obstacles:16,nps:4.396,length:557.313,characteristic:"Standard",difficulty:"Expert",events:2306,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:175.827,paritySummary:{errors:31,warns:48,resets:0}},{njs:12,offset:.5,notes:216,bombs:0,obstacles:17,nps:1.228,length:557.313,characteristic:"OneSaber",difficulty:"Normal",events:2306,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:175.827,paritySummary:{errors:15,warns:34,resets:0}},{njs:16,offset:1,notes:315,bombs:0,obstacles:16,nps:1.792,length:557.313,characteristic:"OneSaber",difficulty:"Hard",events:2306,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:175.827,paritySummary:{errors:12,warns:14,resets:0}},{njs:19,offset:1,notes:472,bombs:2,obstacles:16,nps:2.684,length:557.313,characteristic:"OneSaber",difficulty:"Expert",events:2306,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:175.827,paritySummary:{errors:18,warns:14,resets:0}}],downloadURL:"https://cdn.beatsaver.com/a14d4f258c4a8012e110b599d725be7b20a5470a.zip",coverURL:"https://cdn.beatsaver.com/a14d4f258c4a8012e110b599d725be7b20a5470a.jpg",previewURL:"https://cdn.beatsaver.com/a14d4f258c4a8012e110b599d725be7b20a5470a.mp3"}],createdAt:"2019-10-11T06:11:24.477Z",updatedAt:"2019-10-11T06:11:24.477Z",lastPublishedAt:"2019-10-11T06:11:24.477Z"},{id:"42ea",name:"DEUTSCHLAND - Rammstein",description:"Expert+ and expert are fairly similar where expert has some nerfed versions of expert+ some places. NJS18 on E+ and 15 on Expert",uploader:{id:27983,name:"heisenbergirl",uniqueSet:!0,hash:"5cff0b7298cc5a672c84ec30",avatar:"https://www.gravatar.com/avatar/5cff0b7298cc5a672c84ec30?d=retro",type:"SIMPLE"},metadata:{bpm:120,duration:323,songName:"DEUTSCHLAND",songSubName:"Rammstein",songAuthorName:"Heisenberg",levelAuthorName:"heisenbergirl"},stats:{plays:0,downloads:3694,upvotes:2773,downvotes:83,score:.928},uploaded:"2019-04-02T03:59:23Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"414169f2f791443d9f6278009dd91ebe369bc9b6",key:"42ea",state:"Published",createdAt:"2019-04-02T03:59:23Z",sageScore:4,diffs:[{njs:15,offset:0,notes:915,bombs:0,obstacles:6,nps:3.091,length:592,characteristic:"Standard",difficulty:"Expert",events:2754,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:296,paritySummary:{errors:39,warns:52,resets:0}},{njs:18,offset:0,notes:1063,bombs:0,obstacles:6,nps:3.591,length:592,characteristic:"Standard",difficulty:"ExpertPlus",events:2756,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:296,paritySummary:{errors:42,warns:53,resets:0}}],downloadURL:"https://cdn.beatsaver.com/414169f2f791443d9f6278009dd91ebe369bc9b6.zip",coverURL:"https://cdn.beatsaver.com/414169f2f791443d9f6278009dd91ebe369bc9b6.jpg",previewURL:"https://cdn.beatsaver.com/414169f2f791443d9f6278009dd91ebe369bc9b6.mp3"}],createdAt:"2019-04-02T03:59:23Z",updatedAt:"2019-04-02T03:59:23Z",lastPublishedAt:"2019-04-02T03:59:23Z"},{id:"1ffd",name:"Senbonzakura (Short Ver.) by Kradness + Giga-P",description:"You like it fast? You like Senbonzakura? You want both? Then you've come to the right map! I knew I wanted to map Senbonzakura but I didn't quite like the original version, but as soon as I heard Kradness and Giga-P's version I knew I had found my own Senbonzakura.\r\n\r\nThis is one of the 22 maps that were mapped for the 100k Contest where you can win over $7,000 in prizes by just playing Beat Saber! Go to https://bsaber.com/100k-contest/ for more info.\r\n\r\nSong has been edited; custom intro and shortened from full length.\r\n\r\nPreview:\r\nhttps://youtu.be/BLTaG3z9jOY\r\n\r\nBPM: 175\r\nDuration: 2:35\r\nEasy, Normal, Hard, Expert and Expert+ difficulties.\r\n\r\nEasy: 273, 8 obstacles, 0 mines\r\nNormal: 349 notes, 33 obstacles, 0 mines\r\nHard: 524 notes, 33 obstacles, 0 mines\r\nExpert: 755 notes, 33 obstacles, 0 mines\r\nExpert+: 880 notes, 33 obstacles, 0 mines\r\n\r\nThanks to Edzo, Redmagi, AaltoPaWi and Saut for playtesting! Special thanks to Redmagi for the stream ideas!\r\n\r\nEnjoy!",uploader:{id:4285318,name:"kolezan",uniqueSet:!0,hash:"5cff0b7398cc5a672c84fcbb",avatar:"https://cdn.beatsaver.com/avatar/220513618763055106.png",type:"DISCORD"},metadata:{bpm:175,duration:156,songName:"Senbonzakura (Short Ver.)",songSubName:"Kradness + Giga-P",songAuthorName:"Kolezan",levelAuthorName:"Kolezan"},stats:{plays:0,downloads:9333,upvotes:5842,downvotes:234,score:.928},uploaded:"2018-11-12T22:10:22Z",automapper:!1,ranked:!0,qualified:!1,versions:[{hash:"eb28a79e2dbc80948d0ea09631e83557ea6b6735",key:"1ffd",state:"Published",createdAt:"2018-11-12T22:10:22Z",sageScore:7,diffs:[{njs:12,offset:0,notes:273,bombs:0,obstacles:33,nps:1.818,length:438,characteristic:"Standard",difficulty:"Easy",events:1285,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:150.171,paritySummary:{errors:57,warns:23,resets:0},stars:1.24},{njs:13,offset:0,notes:349,bombs:0,obstacles:33,nps:2.319,length:439,characteristic:"Standard",difficulty:"Normal",events:1285,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:150.514,paritySummary:{errors:61,warns:53,resets:0},stars:1.59},{njs:14,offset:0,notes:524,bombs:0,obstacles:33,nps:3.481,length:439,characteristic:"Standard",difficulty:"Hard",events:1285,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:150.514,paritySummary:{errors:70,warns:55,resets:0},stars:2.42},{njs:15,offset:0,notes:755,bombs:0,obstacles:33,nps:5.016,length:439,characteristic:"Standard",difficulty:"Expert",events:1285,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:150.514,paritySummary:{errors:121,warns:136,resets:0},stars:3.52},{njs:15,offset:0,notes:880,bombs:0,obstacles:33,nps:5.847,length:439,characteristic:"Standard",difficulty:"ExpertPlus",events:1285,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:150.514,paritySummary:{errors:108,warns:161,resets:0},stars:4.33}],downloadURL:"https://cdn.beatsaver.com/eb28a79e2dbc80948d0ea09631e83557ea6b6735.zip",coverURL:"https://cdn.beatsaver.com/eb28a79e2dbc80948d0ea09631e83557ea6b6735.jpg",previewURL:"https://cdn.beatsaver.com/eb28a79e2dbc80948d0ea09631e83557ea6b6735.mp3"}],createdAt:"2018-11-12T22:10:22Z",updatedAt:"2018-11-12T22:10:22Z",lastPublishedAt:"2018-11-12T22:10:22Z"},{id:"aa73",name:"twenty one pilots - Level of Concern",description:"'Level of Concern' is a new single released by twenty one pilots during the COVID-19 pandemic. \n\nI meant to get this finished a couple of weeks ago, but hey, better late than never! I hope you enjoy. \n\nMapped by: Pyrowarfare#1032",uploader:{id:1096,name:"pyrowarfare",uniqueSet:!0,hash:"5e99c7df3f476a0006596cdf",avatar:"https://www.gravatar.com/avatar/5e99c7df3f476a0006596cdf?d=retro",type:"SIMPLE"},metadata:{bpm:122,duration:222,songName:"Level of Concern",songSubName:"",songAuthorName:"twenty one pilots",levelAuthorName:"Pyrowarfare"},stats:{plays:0,downloads:4749,upvotes:1220,downvotes:19,score:.9279},uploaded:"2020-05-26T00:39:21.533Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"1b9278797fa6d85d0201d1a261101f8cb9ac7dde",key:"aa73",state:"Published",createdAt:"2020-05-26T00:39:21.533Z",sageScore:5,diffs:[{njs:10,offset:0,notes:233,bombs:0,obstacles:14,nps:1.062,length:446,characteristic:"Standard",difficulty:"Easy",events:2220,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:219.344,paritySummary:{errors:89,warns:9,resets:0}},{njs:10,offset:0,notes:461,bombs:0,obstacles:14,nps:2.102,length:446,characteristic:"Standard",difficulty:"Normal",events:2220,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:219.344,paritySummary:{errors:18,warns:19,resets:0}},{njs:12,offset:0,notes:663,bombs:4,obstacles:32,nps:3.023,length:446,characteristic:"Standard",difficulty:"Hard",events:2220,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:219.344,paritySummary:{errors:2,warns:0,resets:1}},{njs:14,offset:0,notes:692,bombs:4,obstacles:44,nps:3.155,length:446,characteristic:"Standard",difficulty:"Expert",events:2220,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:219.344,paritySummary:{errors:2,warns:0,resets:0}}],downloadURL:"https://cdn.beatsaver.com/1b9278797fa6d85d0201d1a261101f8cb9ac7dde.zip",coverURL:"https://cdn.beatsaver.com/1b9278797fa6d85d0201d1a261101f8cb9ac7dde.jpg",previewURL:"https://cdn.beatsaver.com/1b9278797fa6d85d0201d1a261101f8cb9ac7dde.mp3"}],createdAt:"2020-05-26T00:39:21.533Z",updatedAt:"2020-05-26T00:39:21.533Z",lastPublishedAt:"2020-05-26T00:39:21.533Z"},{id:"96fc",name:"JINGO JUNGLE [Youjo Senki Opening] - MYTH & ROID",description:"JINGO JUNGLE is the fifth single release of MYTH & ROID for their 1st Album『eYe's』and the opening song for the Youjo Senki anime. It is performed by the Japanese singer Mayu and was released on February 8th, 2017.\n\nMap was converted from my original AmaLee version as requested.\n\nEDIT: Expert Difficulty Fixed and added preview start time",uploader:{id:58338,name:"Joetastic",uniqueSet:!0,hash:"5cff0b7498cc5a672c85050e",avatar:"https://cdn.beatsaver.com/avatar/227767566402191360.png",type:"DISCORD"},metadata:{bpm:130,duration:226,songName:"JINGO JUNGLE",songSubName:"",songAuthorName:"MYTH & ROID",levelAuthorName:"Joetastic"},stats:{plays:0,downloads:9872,upvotes:1077,downvotes:14,score:.9279},uploaded:"2020-04-03T15:39:48.414Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"f4555835fccad370eda615cbeff120afe9c4ab13",key:"96fc",state:"Published",createdAt:"2020-04-03T15:39:48.414Z",sageScore:4,diffs:[{njs:13,offset:0,notes:581,bombs:104,obstacles:28,nps:2.647,length:475.5,characteristic:"Standard",difficulty:"Hard",events:5921,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:219.462,paritySummary:{errors:35,warns:15,resets:10}},{njs:15,offset:0,notes:950,bombs:78,obstacles:14,nps:4.329,length:475.5,characteristic:"Standard",difficulty:"Expert",events:5921,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:219.462,paritySummary:{errors:42,warns:48,resets:8}},{njs:17,offset:0,notes:1184,bombs:105,obstacles:17,nps:5.395,length:475.5,characteristic:"Standard",difficulty:"ExpertPlus",events:5921,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:219.462,paritySummary:{errors:32,warns:43,resets:16}}],downloadURL:"https://cdn.beatsaver.com/f4555835fccad370eda615cbeff120afe9c4ab13.zip",coverURL:"https://cdn.beatsaver.com/f4555835fccad370eda615cbeff120afe9c4ab13.jpg",previewURL:"https://cdn.beatsaver.com/f4555835fccad370eda615cbeff120afe9c4ab13.mp3"}],createdAt:"2020-04-03T15:39:48.414Z",updatedAt:"2020-04-03T15:39:48.414Z",lastPublishedAt:"2020-04-03T15:39:48.414Z"},{id:"4611",name:"BTS (feat. Halsey) - Boy With Luv",description:"I wouldn't say this was rushed but that I spent a lot of time on it in a couple of days, either way I really like the song and I think the map is pretty fun too.\r\nFeel free to join our K-Pop Beat Saber Discord https://discord.gg/c9uHGYP @SimplyMarvellous#0290 if you'd like to contact me at all\r\nhttps://youtu.be/Wfhj4fjugcg\r\n\r\n\r\n\r\nDownvote if the map is bad, not because you couldn't pass it :)",uploader:{id:4285134,name:"simplymarvellous",uniqueSet:!0,hash:"5cff0b7398cc5a672c84f7a8",avatar:"https://cdn.beatsaver.com/avatar/189618441429319680.png",type:"DISCORD"},metadata:{bpm:120,duration:232,songName:"Boy With Luv",songSubName:"BTS (ft. Halsey)",songAuthorName:"SimplyMarvellous",levelAuthorName:"simplymarvellous"},stats:{plays:0,downloads:5564,upvotes:2055,downvotes:52,score:.9279},uploaded:"2019-04-15T06:34:34Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"c0e3706463c5c9b993ba5d05c2166fb0b512e695",key:"4611",state:"Published",createdAt:"2019-04-15T06:34:34Z",sageScore:5,diffs:[{njs:12,offset:0,notes:792,bombs:0,obstacles:21,nps:3.03,length:522.833,characteristic:"Standard",difficulty:"Hard",events:1832,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:261.417,paritySummary:{errors:81,warns:38,resets:0}},{njs:15,offset:0,notes:976,bombs:0,obstacles:21,nps:3.734,length:522.833,characteristic:"Standard",difficulty:"ExpertPlus",events:1832,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:261.417,paritySummary:{errors:64,warns:42,resets:0}}],downloadURL:"https://cdn.beatsaver.com/c0e3706463c5c9b993ba5d05c2166fb0b512e695.zip",coverURL:"https://cdn.beatsaver.com/c0e3706463c5c9b993ba5d05c2166fb0b512e695.jpg",previewURL:"https://cdn.beatsaver.com/c0e3706463c5c9b993ba5d05c2166fb0b512e695.mp3"}],createdAt:"2019-04-15T06:34:34Z",updatedAt:"2019-04-15T06:34:34Z",lastPublishedAt:"2019-04-15T06:34:34Z"},{id:"1fff",name:"Chiru Chiru by REOL",description:"The 4th most played song during the 100k Contest, I present to you a dance-able map of Chiru Chiru by REOL!\r\n\r\nThis is one of the 22 maps that were mapped for the 100k Contest where you can win over $7,000 in prizes by just playing Beat Saber! Go to https://bsaber.com/100k-contest/ for more info.\r\n\r\nFull length song. I've added/edited a custom countdown to the intro.\r\n\r\nPreview:\r\nhttps://youtu.be/jcx6g6NS8_4\r\n\r\nBPM: 128\r\nDuration: 3:18\r\nEasy, Normal, Hard and Expert difficulties.\r\n\r\nEasy: 253, 31 obstacles, 6 mines\r\nNormal: 356 notes, 31 obstacles, 6 mines\r\nHard: 478 notes, 31 obstacles, 18 mines\r\nExpert: 675 notes, 31 obstacles, 18 mines\r\n\r\nThanks to Kizuflux, VenclaireVR, squeaksies, Crankor, NekiCoule, Redmagi, aggrogahu and Saut for playtesting!\r\n\r\nEnjoy!",uploader:{id:4285318,name:"kolezan",uniqueSet:!0,hash:"5cff0b7398cc5a672c84fcbb",avatar:"https://cdn.beatsaver.com/avatar/220513618763055106.png",type:"DISCORD"},metadata:{bpm:128,duration:199,songName:"Chiru Chiru",songSubName:"REOL",songAuthorName:"Kolezan",levelAuthorName:"Kolezan"},stats:{plays:0,downloads:6874,upvotes:4133,downvotes:148,score:.9279},uploaded:"2018-11-12T22:29:15Z",automapper:!1,ranked:!0,qualified:!1,versions:[{hash:"9993d9f5b03472efa5b8b31d3dc4156301145d97",key:"1fff",state:"Published",createdAt:"2018-11-12T22:29:15Z",sageScore:4,diffs:[{njs:10,offset:0,notes:258,bombs:6,obstacles:31,nps:1.339,length:411,characteristic:"Standard",difficulty:"Easy",events:955,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:192.656,paritySummary:{errors:62,warns:27,resets:3},stars:1.1},{njs:10,offset:0,notes:356,bombs:6,obstacles:31,nps:1.846,length:411.5,characteristic:"Standard",difficulty:"Normal",events:955,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:192.891,paritySummary:{errors:64,warns:44,resets:3},stars:1.37},{njs:11,offset:0,notes:478,bombs:18,obstacles:31,nps:2.472,length:412.5,characteristic:"Standard",difficulty:"Hard",events:955,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:193.359,paritySummary:{errors:70,warns:85,resets:4},stars:1.82},{njs:11,offset:0,notes:669,bombs:18,obstacles:31,nps:3.46,length:412.5,characteristic:"Standard",difficulty:"Expert",events:956,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:193.359,paritySummary:{errors:96,warns:89,resets:5},stars:2.28}],downloadURL:"https://cdn.beatsaver.com/9993d9f5b03472efa5b8b31d3dc4156301145d97.zip",coverURL:"https://cdn.beatsaver.com/9993d9f5b03472efa5b8b31d3dc4156301145d97.jpg",previewURL:"https://cdn.beatsaver.com/9993d9f5b03472efa5b8b31d3dc4156301145d97.mp3"}],createdAt:"2018-11-12T22:29:15Z",updatedAt:"2018-11-12T22:29:15Z",lastPublishedAt:"2018-11-12T22:29:15Z"},{id:"6ac",name:"Pompeii - Bastille",description:"Hard only - Manageable but active. Events included.",uploader:{id:51831,name:"dietmoxie",uniqueSet:!0,hash:"5cff0b7298cc5a672c84ec3a",avatar:"https://www.gravatar.com/avatar/5cff0b7298cc5a672c84ec3a?d=retro",type:"SIMPLE"},metadata:{bpm:127,duration:214,songName:"Pompeii",songSubName:"",songAuthorName:"Bastille",levelAuthorName:"dietmoxie"},stats:{plays:0,downloads:10306,upvotes:5098,downvotes:196,score:.9279},uploaded:"2018-06-26T00:59:17Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"9753e45020fe1c5681fcd74f5a41efcf3c143282",key:"6ac",state:"Published",createdAt:"2018-06-26T00:59:17Z",sageScore:4,diffs:[{njs:10,offset:0,notes:698,bombs:0,obstacles:31,nps:3.348,length:443,characteristic:"Standard",difficulty:"Hard",events:665,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:209.291,paritySummary:{errors:134,warns:133,resets:0}}],downloadURL:"https://cdn.beatsaver.com/9753e45020fe1c5681fcd74f5a41efcf3c143282.zip",coverURL:"https://cdn.beatsaver.com/9753e45020fe1c5681fcd74f5a41efcf3c143282.jpg",previewURL:"https://cdn.beatsaver.com/9753e45020fe1c5681fcd74f5a41efcf3c143282.mp3"}],createdAt:"2018-06-26T00:59:17Z",updatedAt:"2018-06-26T00:59:17Z",lastPublishedAt:"2018-06-26T00:59:17Z"},{id:"54bb",name:"Bodies - Drowning Pool",description:'Fun fact: My first time hearing this song was on some random YouTube video in the 2000s, almost all YouTube videos back then used this song for some reason.\n\nWhen I reheard the song I immediately knew I have to put duck walls every time the lyrics went "HIT THE FLOOR". Also I wanted to use 1, 2, 3, 4 notes on a section of lyrics that said ONE TWO THREE FOUR.\n\nWarning: Please don\'t actually let your body hit the floor while playing this map. Smashing head first into the floor with a VR headset can be an expensive mistake.\n\n"Bodies" (often incorrectly called "Let the Bodies Hit the Floor") is a song by the American rock band Drowning Pool and also is the lead single from their debut album Sinner. It was also the theme song for the 2001 WWF SummerSlam pay-per-view event, as well as that of the ECW brand in 2006 to early 2008',uploader:{id:58338,name:"Joetastic",uniqueSet:!0,hash:"5cff0b7498cc5a672c85050e",avatar:"https://cdn.beatsaver.com/avatar/227767566402191360.png",type:"DISCORD"},metadata:{bpm:130,duration:202,songName:"Bodies",songSubName:"",songAuthorName:"Drowning Pool",levelAuthorName:"Joetastic"},stats:{plays:0,downloads:4168,upvotes:1980,downvotes:49,score:.9278},uploaded:"2019-06-27T18:32:03.310Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"8818e19d544a6ca8b1a05e7324731fee2f38b58f",key:"54bb",state:"Published",createdAt:"2019-06-27T18:32:03.310Z",sageScore:2,diffs:[{njs:14,offset:0,notes:805,bombs:0,obstacles:19,nps:4.211,length:414.144,characteristic:"Standard",difficulty:"Expert",events:5298,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:191.144,paritySummary:{errors:29,warns:33,resets:0}}],downloadURL:"https://cdn.beatsaver.com/8818e19d544a6ca8b1a05e7324731fee2f38b58f.zip",coverURL:"https://cdn.beatsaver.com/8818e19d544a6ca8b1a05e7324731fee2f38b58f.jpg",previewURL:"https://cdn.beatsaver.com/8818e19d544a6ca8b1a05e7324731fee2f38b58f.mp3"}],createdAt:"2019-06-27T18:32:03.310Z",updatedAt:"2019-06-27T18:32:03.310Z",lastPublishedAt:"2019-06-27T18:32:03.310Z"},{id:"5352",name:"1999 - Charli XCX & Troye Sivan",description:"It started as a meme in #mapping-discussion and expanded to a full blown project. I really like how it turned out. Hope you enjoy it :)\n\nLength: 3:11\nBPM: 124\nNJS: 17 (Expert+), 15 (Expert), 13 (Hard)\n\nEasy slot is the lightshow as always.\n\nThanks to my playtesters CyanSnow (2x) and Redmagi, show them some love! :)\n\nDM me your feedback on discord: Teuflum#5982",uploader:{id:68740,name:"Teuflum",uniqueSet:!0,hash:"5cff0b7498cc5a672c851a6b",avatar:"https://cdn.beatsaver.com/avatar/114706869460664326.png",type:"DISCORD"},metadata:{bpm:124,duration:192,songName:"1999",songSubName:"",songAuthorName:"Charli XCX & Troye Sivan",levelAuthorName:"Teuflum"},stats:{plays:0,downloads:2205,upvotes:1273,downvotes:21,score:.9278},uploaded:"2019-06-17T15:29:13.123Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"d68bd4d997726249406bce748b83bf5464da99e7",key:"5352",state:"Published",createdAt:"2019-06-17T15:29:13.123Z",sageScore:7,diffs:[{njs:13,offset:0,notes:555,bombs:56,obstacles:37,nps:2.968,length:386.5,characteristic:"Standard",difficulty:"Hard",events:6185,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:187.016,paritySummary:{errors:23,warns:8,resets:4}},{njs:15,offset:0,notes:668,bombs:56,obstacles:41,nps:3.572,length:386.5,characteristic:"Standard",difficulty:"Expert",events:6185,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:187.016,paritySummary:{errors:20,warns:16,resets:4}},{njs:17,offset:0,notes:812,bombs:8,obstacles:39,nps:4.342,length:386.5,characteristic:"Standard",difficulty:"ExpertPlus",events:6185,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:187.016,paritySummary:{errors:33,warns:48,resets:2}},{njs:10,offset:0,notes:0,bombs:0,obstacles:0,nps:0,length:0,characteristic:"Lightshow",difficulty:"Easy",events:6185,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:0,paritySummary:{errors:0,warns:0,resets:0}}],downloadURL:"https://cdn.beatsaver.com/d68bd4d997726249406bce748b83bf5464da99e7.zip",coverURL:"https://cdn.beatsaver.com/d68bd4d997726249406bce748b83bf5464da99e7.jpg",previewURL:"https://cdn.beatsaver.com/d68bd4d997726249406bce748b83bf5464da99e7.mp3"}],createdAt:"2019-06-17T15:29:13.123Z",updatedAt:"2019-06-17T15:29:13.123Z",lastPublishedAt:"2019-06-17T15:29:13.123Z"},{id:"a934",name:"Sabaton - Seven Pillars of Wisdom",description:"Sabaton is a Power-metal band that sings almost exclusively about historical events. This song is about Lawrence of Arabia, and is named after his autobiography.\r\n\r\nThe map is fully lit, and available in multiple difficulties. Thanks to the BSMG discord for helping test the map before release.\r\n\r\nNormal: 2.2 NPS - 10 NJS\r\nHard: 3.89 NPS - 13 NJS\r\nExpert: 5.24 NPS - 17 NJS",uploader:{id:4285369,name:"Cyrix",uniqueSet:!0,hash:"5eb6eb9a7abb000006c85add",avatar:"https://cdn.beatsaver.com/avatar/167730807929044992.png",type:"DISCORD"},metadata:{bpm:152,duration:178,songName:"Seven Pillars of Wisdom",songSubName:"",songAuthorName:"Sabaton",levelAuthorName:"Cyrix"},stats:{plays:0,downloads:2699,upvotes:824,downvotes:6,score:.9276},uploaded:"2020-05-22T21:19:05.343Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"16732f8edc59bd358278c14055cde1cd9ecb47aa",key:"a934",state:"Published",createdAt:"2020-05-22T21:19:05.343Z",sageScore:5,diffs:[{njs:10,offset:0,notes:393,bombs:0,obstacles:24,nps:2.299,length:433,characteristic:"Standard",difficulty:"Normal",events:1826,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:170.921,paritySummary:{errors:18,warns:4,resets:0}},{njs:13,offset:.25,notes:696,bombs:20,obstacles:16,nps:4.044,length:436,characteristic:"Standard",difficulty:"Hard",events:1826,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:172.105,paritySummary:{errors:0,warns:2,resets:3}},{njs:17,offset:.3,notes:937,bombs:16,obstacles:14,nps:5.444,length:436,characteristic:"Standard",difficulty:"Expert",events:1826,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:172.105,paritySummary:{errors:0,warns:5,resets:5}}],downloadURL:"https://cdn.beatsaver.com/16732f8edc59bd358278c14055cde1cd9ecb47aa.zip",coverURL:"https://cdn.beatsaver.com/16732f8edc59bd358278c14055cde1cd9ecb47aa.jpg",previewURL:"https://cdn.beatsaver.com/16732f8edc59bd358278c14055cde1cd9ecb47aa.mp3"}],createdAt:"2020-05-22T21:19:05.343Z",updatedAt:"2020-05-22T21:19:05.343Z",lastPublishedAt:"2020-05-22T21:19:05.343Z"},{id:"51be",name:"Prayer Of The Refugee - Rise Against",description:'"Prayer of the Refugee" is a song by American rock band Rise Against. The lyrics were written by lead vocalist Tim McIlrath, and deal with the themes of forced displacement and the societal issues surrounding refugees. Thanks to @Scrappy for helping me find the variable BPM in this song',uploader:{id:58338,name:"Joetastic",uniqueSet:!0,hash:"5cff0b7498cc5a672c85050e",avatar:"https://cdn.beatsaver.com/avatar/227767566402191360.png",type:"DISCORD"},metadata:{bpm:150,duration:200,songName:"Prayer Of The Refugee",songSubName:"Rise Against",songAuthorName:"Joetastic",levelAuthorName:"Joetastic"},stats:{plays:0,downloads:3598,upvotes:1630,downvotes:35,score:.9276},uploaded:"2019-06-06T05:53:57Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"9c7e5ae537bb4871513330da180c6647cd8cffff",key:"51be",state:"Published",createdAt:"2019-06-06T05:53:57Z",sageScore:6,diffs:[{njs:13.5,offset:0,notes:860,bombs:0,obstacles:23,nps:4.503,length:479.103,characteristic:"Standard",difficulty:"Expert",events:3414,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:191.641,paritySummary:{errors:37,warns:24,resets:0}},{njs:15,offset:0,notes:936,bombs:0,obstacles:23,nps:4.9,length:479.103,characteristic:"Standard",difficulty:"ExpertPlus",events:3414,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:191.641,paritySummary:{errors:33,warns:20,resets:0}}],downloadURL:"https://cdn.beatsaver.com/9c7e5ae537bb4871513330da180c6647cd8cffff.zip",coverURL:"https://cdn.beatsaver.com/9c7e5ae537bb4871513330da180c6647cd8cffff.jpg",previewURL:"https://cdn.beatsaver.com/9c7e5ae537bb4871513330da180c6647cd8cffff.mp3"}],createdAt:"2019-06-06T05:53:57Z",updatedAt:"2019-06-06T05:53:57Z",lastPublishedAt:"2019-06-06T05:53:57Z"},{id:"226e",name:"Crawling - Linkin Park",description:"Another Linkin Park map! This time it is Crawling. \nPreview: https://www.youtube.com/watch?v=Pkr9Vm1dPv8\n\nhttps://twitter.com/TheDownyCat\nhttps://www.twitch.tv/downycat\nhttps://streamlabs.com/downycat/tip",uploader:{id:4285982,name:"downycat",uniqueSet:!0,hash:"5cff0b7398cc5a672c84ede5",avatar:"https://cdn.beatsaver.com/avatar/173538829888782336.png",type:"DISCORD"},metadata:{bpm:105,duration:208,songName:"Crawling",songSubName:"Linkin Park",songAuthorName:"DownyCat",levelAuthorName:"downycat"},stats:{plays:0,downloads:5610,upvotes:2388,downvotes:67,score:.9276},uploaded:"2018-11-26T14:10:51Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"691b382b6ca6e69b9b908e41d439f9b7b9403fb6",key:"226e",state:"Published",createdAt:"2018-11-26T14:10:51Z",sageScore:5,diffs:[{njs:10,offset:0,notes:455,bombs:0,obstacles:64,nps:2.317,length:344,characteristic:"Standard",difficulty:"Normal",events:2399,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:196.571,paritySummary:{errors:29,warns:28,resets:0}},{njs:12,offset:0,notes:666,bombs:0,obstacles:71,nps:3.386,length:344.5,characteristic:"Standard",difficulty:"Hard",events:2399,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:196.857,paritySummary:{errors:24,warns:19,resets:0}},{njs:14,offset:0,notes:862,bombs:0,obstacles:75,nps:4.383,length:344.5,characteristic:"Standard",difficulty:"Expert",events:2399,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:196.857,paritySummary:{errors:18,warns:39,resets:0}}],downloadURL:"https://cdn.beatsaver.com/691b382b6ca6e69b9b908e41d439f9b7b9403fb6.zip",coverURL:"https://cdn.beatsaver.com/691b382b6ca6e69b9b908e41d439f9b7b9403fb6.jpg",previewURL:"https://cdn.beatsaver.com/691b382b6ca6e69b9b908e41d439f9b7b9403fb6.mp3"}],createdAt:"2018-11-26T14:10:51Z",updatedAt:"2018-11-26T14:10:51Z",lastPublishedAt:"2018-11-26T14:10:51Z"},{id:"6cf7",name:"[Noodleween] AronChupa, Little Sis Nora - Rave in the Grave",description:"2nd Place winner in the BSMG Halloween map competition! :D\n\nThis map is part of the Noodleween song pack, brought to you by the Noodle mapper group. We hope you enjoy this as much as we enjoyed making it.\n\nThis song already had a map, but I thought it could use some love and revamping. Hope you guys enjoy the full difficulty spread!\n\nExpert+ Playthrough: https://www.youtube.com/watch?v=ufEQ4L2y694&feature=youtu.be\n\nHappy Halloween! :D 👻",uploader:{id:17131,name:"tranquillizeme",uniqueSet:!0,hash:"5cff0b7798cc5a672c85609e",avatar:"https://www.gravatar.com/avatar/5cff0b7798cc5a672c85609e?d=retro",type:"SIMPLE"},metadata:{bpm:132,duration:154,songName:"Rave In The Grave",songSubName:"",songAuthorName:"AronChupa, Little Sis Nora",levelAuthorName:"TranquillizeMe"},stats:{plays:0,downloads:2987,upvotes:1394,downvotes:26,score:.9275},uploaded:"2019-10-29T23:00:07.667Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"b288ce94ed8feff67af04fd75e23acafad66b9f8",key:"6cf7",state:"Published",createdAt:"2019-10-29T23:00:07.667Z",sageScore:6,diffs:[{njs:12,offset:1.5,notes:212,bombs:0,obstacles:36,nps:1.418,length:329,characteristic:"Standard",difficulty:"Easy",events:7067,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:149.545,paritySummary:{errors:49,warns:7,resets:0}},{njs:13,offset:1,notes:286,bombs:12,obstacles:43,nps:1.912,length:329,characteristic:"Standard",difficulty:"Normal",events:7067,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:149.545,paritySummary:{errors:42,warns:12,resets:0}},{njs:14,offset:1,notes:447,bombs:12,obstacles:37,nps:2.989,length:329,characteristic:"Standard",difficulty:"Hard",events:7067,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:149.545,paritySummary:{errors:9,warns:2,resets:0}},{njs:15,offset:.5,notes:514,bombs:8,obstacles:47,nps:3.437,length:329,characteristic:"Standard",difficulty:"Expert",events:7067,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:149.545,paritySummary:{errors:7,warns:2,resets:0}},{njs:19,offset:0,notes:610,bombs:24,obstacles:44,nps:4.079,length:329,characteristic:"Standard",difficulty:"ExpertPlus",events:7067,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:149.545,paritySummary:{errors:8,warns:3,resets:0}}],downloadURL:"https://cdn.beatsaver.com/b288ce94ed8feff67af04fd75e23acafad66b9f8.zip",coverURL:"https://cdn.beatsaver.com/b288ce94ed8feff67af04fd75e23acafad66b9f8.jpg",previewURL:"https://cdn.beatsaver.com/b288ce94ed8feff67af04fd75e23acafad66b9f8.mp3"}],createdAt:"2019-10-29T23:00:07.667Z",updatedAt:"2019-10-29T23:00:07.667Z",lastPublishedAt:"2019-10-29T23:00:07.667Z"},{id:"53fc",name:"Sabaton - Shiroyama",description:"Second map!!! I hope you all enjoy the new map with added difficulties!! Feel free to message me on discord if you liked the map, have feedback, or have any suggestions for some more maps!!!\nMax●The●Whale#8744",uploader:{id:40212,name:"maximusthewhale",uniqueSet:!0,hash:"5cff0b7898cc5a672c856ed4",avatar:"https://www.gravatar.com/avatar/5cff0b7898cc5a672c856ed4?d=retro",type:"SIMPLE"},metadata:{bpm:171,duration:212,songName:"Shiroyama",songSubName:"",songAuthorName:"Sabaton",levelAuthorName:"Maximus"},stats:{plays:0,downloads:2704,upvotes:1798,downvotes:42,score:.9275},uploaded:"2019-06-22T09:34:40.930Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"1340476c96b9052adfff5e63993b7ffa03229c39",key:"53fc",state:"Published",createdAt:"2019-06-22T09:34:40.930Z",sageScore:5,diffs:[{njs:13,offset:0,notes:736,bombs:0,obstacles:5,nps:3.648,length:575,characteristic:"Standard",difficulty:"Hard",events:1038,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:201.754,paritySummary:{errors:12,warns:0,resets:0}},{njs:15,offset:0,notes:889,bombs:0,obstacles:16,nps:4.406,length:575,characteristic:"Standard",difficulty:"Expert",events:3144,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:201.754,paritySummary:{errors:22,warns:22,resets:0}},{njs:18,offset:0,notes:1353,bombs:0,obstacles:16,nps:6.706,length:575,characteristic:"Standard",difficulty:"ExpertPlus",events:3216,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:201.754,paritySummary:{errors:29,warns:27,resets:0}}],downloadURL:"https://cdn.beatsaver.com/1340476c96b9052adfff5e63993b7ffa03229c39.zip",coverURL:"https://cdn.beatsaver.com/1340476c96b9052adfff5e63993b7ffa03229c39.jpg",previewURL:"https://cdn.beatsaver.com/1340476c96b9052adfff5e63993b7ffa03229c39.mp3"}],createdAt:"2019-06-22T09:34:40.930Z",updatedAt:"2019-06-22T09:34:40.930Z",lastPublishedAt:"2019-06-22T09:34:40.930Z"},{id:"5389",name:"On Top of the World - Imagine Dragons",description:"Re-upload of an earlier Beatmap that was lost to the update.",uploader:{id:30311,name:"bennydabeast",uniqueSet:!0,hash:"5cff0b7298cc5a672c84e98d",avatar:"https://cdn.beatsaver.com/avatar/30311.jpg",type:"SIMPLE"},metadata:{bpm:100,duration:192,songName:"On Top of the World",songSubName:"",songAuthorName:"Imagine Dragons",levelAuthorName:"BennyDaBeast"},stats:{plays:0,downloads:12331,upvotes:3114,downvotes:101,score:.9274},uploaded:"2019-06-19T17:02:53.084Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"88314981432a8002f62e464562c0c41f06393ab5",key:"5389",state:"Published",createdAt:"2019-06-19T17:02:53.084Z",sageScore:2,diffs:[{njs:10,offset:0,notes:269,bombs:0,obstacles:18,nps:1.423,length:315,characteristic:"Standard",difficulty:"Normal",events:781,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:189,paritySummary:{errors:48,warns:37,resets:0}},{njs:10,offset:0,notes:374,bombs:0,obstacles:18,nps:1.976,length:315.5,characteristic:"Standard",difficulty:"Hard",events:781,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:189.3,paritySummary:{errors:54,warns:52,resets:0}},{njs:10,offset:0,notes:551,bombs:0,obstacles:27,nps:2.911,length:315.5,characteristic:"Standard",difficulty:"Expert",events:781,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:189.3,paritySummary:{errors:81,warns:91,resets:0}},{njs:10,offset:0,notes:720,bombs:4,obstacles:27,nps:3.803,length:315.5,characteristic:"Standard",difficulty:"ExpertPlus",events:781,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:189.3,paritySummary:{errors:54,warns:71,resets:4}}],downloadURL:"https://cdn.beatsaver.com/88314981432a8002f62e464562c0c41f06393ab5.zip",coverURL:"https://cdn.beatsaver.com/88314981432a8002f62e464562c0c41f06393ab5.jpg",previewURL:"https://cdn.beatsaver.com/88314981432a8002f62e464562c0c41f06393ab5.mp3"}],createdAt:"2019-06-19T17:02:53.084Z",updatedAt:"2019-06-19T17:02:53.084Z",lastPublishedAt:"2019-06-19T17:02:53.084Z"},{id:"4a3d",name:"[Anniversary] Fractures (ft. Nevve) - Illenium [BennyDaBeast]",description:"Part of the Anniversary Song Pack",uploader:{id:37070,name:"anniversaryteam",uniqueSet:!0,hash:"5cff0b7798cc5a672c8565a3",avatar:"https://www.gravatar.com/avatar/5cff0b7798cc5a672c8565a3?d=retro",type:"SIMPLE"},metadata:{bpm:160,duration:246,songName:"Fractures (ft. Nevve)",songSubName:"Illenium",songAuthorName:"BennyDaBeast",levelAuthorName:"AnniversaryTeam"},stats:{plays:0,downloads:3049,upvotes:2328,downvotes:65,score:.9274},uploaded:"2019-05-03T14:09:37Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"440945a4fe86b5e3ee7f03b98c636c881930072f",key:"4a3d",state:"Published",createdAt:"2019-05-03T14:09:37Z",sageScore:5,diffs:[{njs:12,offset:0,notes:805,bombs:0,obstacles:41,nps:3.363,length:638.25,characteristic:"Standard",difficulty:"Hard",events:2214,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:239.344,paritySummary:{errors:98,warns:99,resets:0}},{njs:12,offset:0,notes:1048,bombs:0,obstacles:41,nps:4.379,length:638.25,characteristic:"Standard",difficulty:"Expert",events:2214,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:239.344,paritySummary:{errors:145,warns:163,resets:0}},{njs:15,offset:0,notes:1060,bombs:0,obstacles:41,nps:4.429,length:638.25,characteristic:"Standard",difficulty:"ExpertPlus",events:2214,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:239.344,paritySummary:{errors:137,warns:160,resets:0}}],downloadURL:"https://cdn.beatsaver.com/440945a4fe86b5e3ee7f03b98c636c881930072f.zip",coverURL:"https://cdn.beatsaver.com/440945a4fe86b5e3ee7f03b98c636c881930072f.jpg",previewURL:"https://cdn.beatsaver.com/440945a4fe86b5e3ee7f03b98c636c881930072f.mp3"}],createdAt:"2019-05-03T14:09:37Z",updatedAt:"2019-05-03T14:09:37Z",lastPublishedAt:"2019-05-03T14:09:37Z"},{id:"41a8",name:"fhana - Aozora no Rhapsody [Miss Kobayashi's Dragon Maid Opening]",description:"edited: Reworking E+, second guessing its patterns\r\nCGDCT is the best genre of anime. Dragon maid op is fire\r\nPlease check out fhána and their other music\r\n\r\nBPM 135 \r\nExpert\r\nHard\r\nNormal\r\nEasy\r\n\r\nhas fun\r\n\r\ncontact me on discord\r\nETAN#8341",uploader:{id:4235140,name:"etan",uniqueSet:!0,hash:"5cff0b7798cc5a672c855775",avatar:"https://cdn.beatsaver.com/avatar/136373107559497728.png",type:"DISCORD"},metadata:{bpm:135,duration:96,songName:"Aozora no Rhapsody",songSubName:"fhna",songAuthorName:"ETAN",levelAuthorName:"ETAN"},stats:{plays:0,downloads:7116,upvotes:2214,downvotes:60,score:.9274},uploaded:"2019-03-29T05:34:40Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"cdd469b733ade02a7996d1055082f3e1bc14ca8a",key:"41a8",state:"Published",createdAt:"2019-03-29T05:34:40Z",sageScore:4,diffs:[{njs:10,offset:0,notes:180,bombs:0,obstacles:7,nps:2.045,length:198,characteristic:"Standard",difficulty:"Easy",events:704,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:88,paritySummary:{errors:11,warns:1,resets:0}},{njs:12,offset:0,notes:274,bombs:0,obstacles:3,nps:3.114,length:198,characteristic:"Standard",difficulty:"Normal",events:704,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:88,paritySummary:{errors:12,warns:0,resets:0}},{njs:14,offset:0,notes:379,bombs:0,obstacles:3,nps:4.307,length:198,characteristic:"Standard",difficulty:"Hard",events:704,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:88,paritySummary:{errors:16,warns:4,resets:0}},{njs:15,offset:0,notes:461,bombs:0,obstacles:2,nps:5.239,length:198,characteristic:"Standard",difficulty:"Expert",events:704,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:88,paritySummary:{errors:7,warns:6,resets:0}}],downloadURL:"https://cdn.beatsaver.com/cdd469b733ade02a7996d1055082f3e1bc14ca8a.zip",coverURL:"https://cdn.beatsaver.com/cdd469b733ade02a7996d1055082f3e1bc14ca8a.jpg",previewURL:"https://cdn.beatsaver.com/cdd469b733ade02a7996d1055082f3e1bc14ca8a.mp3"}],createdAt:"2019-03-29T05:34:40Z",updatedAt:"2019-03-29T05:34:40Z",lastPublishedAt:"2019-03-29T05:34:40Z"},{id:"84b4",name:"Nightcore - Everytime We Touch | Cascada",description:"174th Map\n\nYoutube Preview : https://youtu.be/i6so3ZhTtGQ",uploader:{id:4284588,name:"rigid",uniqueSet:!0,hash:"5cff0b7598cc5a672c852224",avatar:"https://cdn.beatsaver.com/avatar/295613108947386368.png",type:"DISCORD"},metadata:{bpm:186,duration:152,songName:"Nightcore - Everytime We Touch",songSubName:"",songAuthorName:"Cascada",levelAuthorName:"Rigid"},stats:{plays:0,downloads:4362,upvotes:1614,downvotes:35,score:.9273},uploaded:"2020-02-06T17:16:32.579Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"31979b560a0ea958f9f0d92df8dcc12f6b8f567c",key:"84b4",state:"Published",createdAt:"2020-02-06T17:16:32.579Z",sageScore:4,diffs:[{njs:15,offset:.5,notes:608,bombs:2,obstacles:77,nps:4.158,length:453.265,characteristic:"Standard",difficulty:"Expert",events:730,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:146.214,paritySummary:{errors:9,warns:8,resets:1}}],downloadURL:"https://cdn.beatsaver.com/31979b560a0ea958f9f0d92df8dcc12f6b8f567c.zip",coverURL:"https://cdn.beatsaver.com/31979b560a0ea958f9f0d92df8dcc12f6b8f567c.jpg",previewURL:"https://cdn.beatsaver.com/31979b560a0ea958f9f0d92df8dcc12f6b8f567c.mp3"}],createdAt:"2020-02-06T17:16:32.579Z",updatedAt:"2020-02-06T17:16:32.579Z",lastPublishedAt:"2020-02-06T17:16:32.579Z"},{id:"8149",name:"Great Days [JoJo's Bizarre Adventure: Diamond is Unbreakable 3rd Opening] - Karen Aoki & Daisuke Hasegawa",description:"\"Great Days\" is the third opening of JoJo's Bizarre Adventure: Diamond is Unbreakable and the seventh overall opening of the JoJo's Bizarre Adventure anime. The song is performed by the jazz vocalist Karen Aoki and Daisuke Hasegawa and composed by Yugo Kanno. The single was released on October 19, 2016.",uploader:{id:58338,name:"Joetastic",uniqueSet:!0,hash:"5cff0b7498cc5a672c85050e",avatar:"https://cdn.beatsaver.com/avatar/227767566402191360.png",type:"DISCORD"},metadata:{bpm:170,duration:239,songName:"Great Days",songSubName:"",songAuthorName:"Daisuke Hasegawa & Karen Aoki",levelAuthorName:"Joetastic"},stats:{plays:0,downloads:6431,upvotes:1376,downvotes:26,score:.9271},uploaded:"2020-01-25T14:01:38.069Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"3d3effcb84f2bf4aadcd7f6ba7f89eb37226a3c3",key:"8149",state:"Published",createdAt:"2020-01-25T14:01:38.069Z",sageScore:4,diffs:[{njs:16,offset:0,notes:1005,bombs:10,obstacles:54,nps:4.237,length:672,characteristic:"Standard",difficulty:"Expert",events:2987,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:237.176,paritySummary:{errors:43,warns:45,resets:0}}],downloadURL:"https://cdn.beatsaver.com/3d3effcb84f2bf4aadcd7f6ba7f89eb37226a3c3.zip",coverURL:"https://cdn.beatsaver.com/3d3effcb84f2bf4aadcd7f6ba7f89eb37226a3c3.jpg",previewURL:"https://cdn.beatsaver.com/3d3effcb84f2bf4aadcd7f6ba7f89eb37226a3c3.mp3"}],createdAt:"2020-01-25T14:01:38.069Z",updatedAt:"2020-01-25T14:01:38.069Z",lastPublishedAt:"2020-01-25T14:01:38.069Z"},{id:"8ac5",name:"Overthinker - INZO",description:"Thanks Rexxz for all your patience and lighting skillz <3",uploader:{id:4285169,name:"ryger",uniqueSet:!0,hash:"5cff0b7798cc5a672c855a42",avatar:"https://cdn.beatsaver.com/avatar/169266024502263808.png",type:"DISCORD"},metadata:{bpm:108,duration:222,songName:"Overthinker",songSubName:"",songAuthorName:"INZO",levelAuthorName:"Ryger"},stats:{plays:0,downloads:2384,upvotes:1616,downvotes:36,score:.9268},uploaded:"2020-02-26T02:39:13.425Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"e09394d9d641b6739e80553ce56dcd68fa27bdf3",key:"8ac5",state:"Published",createdAt:"2020-02-26T02:39:13.425Z",sageScore:4,diffs:[{njs:20,offset:.25,notes:0,bombs:0,obstacles:2405,nps:0,length:0,characteristic:"Standard",difficulty:"Expert",events:6835,chroma:!1,me:!0,ne:!1,cinema:!1,seconds:0,paritySummary:{errors:0,warns:0,resets:0}},{njs:20,offset:.25,notes:984,bombs:0,obstacles:2405,nps:4.893,length:362,characteristic:"Standard",difficulty:"ExpertPlus",events:6836,chroma:!1,me:!0,ne:!1,cinema:!1,seconds:201.111,paritySummary:{errors:0,warns:0,resets:0}}],downloadURL:"https://cdn.beatsaver.com/e09394d9d641b6739e80553ce56dcd68fa27bdf3.zip",coverURL:"https://cdn.beatsaver.com/e09394d9d641b6739e80553ce56dcd68fa27bdf3.jpg",previewURL:"https://cdn.beatsaver.com/e09394d9d641b6739e80553ce56dcd68fa27bdf3.mp3"}],createdAt:"2020-02-26T02:39:13.425Z",updatedAt:"2020-02-26T02:39:13.425Z",lastPublishedAt:"2020-02-26T02:39:13.425Z"},{id:"1ff6",name:"Don't Let Me Down (Illenium Remix) - The Chainsmokers feat. Daya (100k Contest)",description:"This is one of the 22 maps that were mapped for the 100k Contest where you can win over $7,000 in prizes. Go to https://bsaber.com/100k-contest/ to register!\r\nDifficulties: Expert+, Expert, Hard, Normal",uploader:{id:30311,name:"bennydabeast",uniqueSet:!0,hash:"5cff0b7298cc5a672c84e98d",avatar:"https://cdn.beatsaver.com/avatar/30311.jpg",type:"SIMPLE"},metadata:{bpm:160,duration:220,songName:"Don't Let Me Down (Illenium Remix)",songSubName:"The Chainsmokers feat. Daya",songAuthorName:"BennyDaBeast",levelAuthorName:"bennydabeast"},stats:{plays:0,downloads:10044,upvotes:4381,downvotes:166,score:.9268},uploaded:"2018-11-12T18:48:50Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"5639a12cccf90238055116ec53e5297aa004627e",key:"1ff6",state:"Published",createdAt:"2018-11-12T18:48:50Z",sageScore:8,diffs:[{njs:10,offset:0,notes:280,bombs:0,obstacles:26,nps:1.511,length:494,characteristic:"Standard",difficulty:"Easy",events:1714,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:185.25,paritySummary:{errors:68,warns:14,resets:0}},{njs:10,offset:0,notes:360,bombs:0,obstacles:26,nps:1.943,length:494,characteristic:"Standard",difficulty:"Normal",events:1714,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:185.25,paritySummary:{errors:68,warns:32,resets:0}},{njs:12,offset:0,notes:521,bombs:0,obstacles:154,nps:2.801,length:496,characteristic:"Standard",difficulty:"Hard",events:1714,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:186,paritySummary:{errors:77,warns:49,resets:0}},{njs:12,offset:0,notes:746,bombs:0,obstacles:155,nps:4.011,length:496,characteristic:"Standard",difficulty:"Expert",events:1714,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:186,paritySummary:{errors:76,warns:100,resets:0}},{njs:14,offset:0,notes:1225,bombs:0,obstacles:207,nps:6.481,length:504,characteristic:"Standard",difficulty:"ExpertPlus",events:1714,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:189,paritySummary:{errors:101,warns:114,resets:0}}],downloadURL:"https://cdn.beatsaver.com/5639a12cccf90238055116ec53e5297aa004627e.zip",coverURL:"https://cdn.beatsaver.com/5639a12cccf90238055116ec53e5297aa004627e.jpg",previewURL:"https://cdn.beatsaver.com/5639a12cccf90238055116ec53e5297aa004627e.mp3"}],createdAt:"2018-11-12T18:48:50Z",updatedAt:"2018-11-12T18:48:50Z",lastPublishedAt:"2018-11-12T18:48:50Z"},{id:"393",name:"O-Zone - Dragostea Din Tei",description:"numa numa numa yey\r\n\r\nhard only for now, but i'll add more difficulties later\r\n\r\nfull events/lighting",uploader:{id:52747,name:"esspee39",uniqueSet:!1,hash:"5cff0b7398cc5a672c84f198",avatar:"https://www.gravatar.com/avatar/5cff0b7398cc5a672c84f198?d=retro",type:"SIMPLE"},metadata:{bpm:130,duration:214,songName:"Dragostei Din Tei",songSubName:"O-Zone",songAuthorName:"esspee",levelAuthorName:"esspee39"},stats:{plays:0,downloads:5541,upvotes:3046,downvotes:100,score:.9268},uploaded:"2018-06-04T00:27:54Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"b0fd4145a269f1fc8f78afccb4a310a36f2f873c",key:"393",state:"Published",createdAt:"2018-06-04T00:27:54Z",sageScore:5,diffs:[{njs:10,offset:0,notes:676,bombs:69,obstacles:16,nps:3.266,length:448.5,characteristic:"Standard",difficulty:"Hard",events:1136,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:207,paritySummary:{errors:47,warns:131,resets:9}}],downloadURL:"https://cdn.beatsaver.com/b0fd4145a269f1fc8f78afccb4a310a36f2f873c.zip",coverURL:"https://cdn.beatsaver.com/b0fd4145a269f1fc8f78afccb4a310a36f2f873c.jpg",previewURL:"https://cdn.beatsaver.com/b0fd4145a269f1fc8f78afccb4a310a36f2f873c.mp3"}],createdAt:"2018-06-04T00:27:54Z",updatedAt:"2018-06-04T00:27:54Z",lastPublishedAt:"2018-06-04T00:27:54Z"},{id:"484d",name:"Sosageyo | Shinzou wo sasageyo | Attack on Titan OP 3 - Linked Horizon",description:"Huge thanks to Skeelie for lighting this map!\r\n\r\nThis map overrides the default red-blue colors to a blue-white color, matching the Survey Corps' Wings of Freedom.\r\nEasy, Hard, Expert, and Expert+ are all available.\r\nEasy is a bit spicy, Expert is very spicy.",uploader:{id:15368,name:"theab",uniqueSet:!0,hash:"5cff0b7698cc5a672c853a14",avatar:"https://www.gravatar.com/avatar/5cff0b7698cc5a672c853a14?d=retro",type:"SIMPLE"},metadata:{bpm:160,duration:90,songName:"Shinzou wo Sasageyo",songSubName:"Linked Horizon",songAuthorName:"Ab & Skeelie",levelAuthorName:"TheAb"},stats:{plays:0,downloads:8967,upvotes:2595,downvotes:79,score:.9267},uploaded:"2019-04-25T10:29:55Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"713da9a9a0737f402ca75819ea9dc19ec3723329",key:"484d",state:"Published",createdAt:"2019-04-25T10:29:55Z",sageScore:5,diffs:[{njs:12,offset:0,notes:123,bombs:4,obstacles:5,nps:1.439,length:228,characteristic:"Standard",difficulty:"Easy",events:5254,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:85.5,paritySummary:{errors:30,warns:3,resets:2}},{njs:12,offset:0,notes:229,bombs:0,obstacles:5,nps:2.678,length:228,characteristic:"Standard",difficulty:"Hard",events:5215,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:85.5,paritySummary:{errors:21,warns:18,resets:0}},{njs:15,offset:0,notes:372,bombs:0,obstacles:4,nps:4.351,length:228,characteristic:"Standard",difficulty:"Expert",events:5215,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:85.5,paritySummary:{errors:33,warns:29,resets:0}},{njs:18,offset:0,notes:548,bombs:0,obstacles:3,nps:6.627,length:220.5,characteristic:"Standard",difficulty:"ExpertPlus",events:5215,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:82.688,paritySummary:{errors:27,warns:48,resets:0}}],downloadURL:"https://cdn.beatsaver.com/713da9a9a0737f402ca75819ea9dc19ec3723329.zip",coverURL:"https://cdn.beatsaver.com/713da9a9a0737f402ca75819ea9dc19ec3723329.jpg",previewURL:"https://cdn.beatsaver.com/713da9a9a0737f402ca75819ea9dc19ec3723329.mp3"}],createdAt:"2019-04-25T10:29:55Z",updatedAt:"2019-04-25T10:29:55Z",lastPublishedAt:"2019-04-25T10:29:55Z"},{id:"21d9",name:"GAY FROGS",description:"I DON'T LIKE EM PUTTING CHEMICALS IN THE WATER THAT TURN THE FRIGGIN FROGS GAY!",uploader:{id:408,name:"nuketime",uniqueSet:!0,hash:"5cff0b7498cc5a672c8507f7",avatar:"https://cdn.beatsaver.com/avatar/175811186007343104.png",type:"DISCORD"},metadata:{bpm:143,duration:58,songName:"Gay Frogs",songSubName:"",songAuthorName:"Nuketime",levelAuthorName:"Nuketime"},stats:{plays:0,downloads:2129,upvotes:1147,downvotes:18,score:.9267},uploaded:"2018-11-24T03:47:04Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"c7bdbfea113219f8b372ca6107540995c2e81997",key:"21d9",state:"Published",createdAt:"2018-11-24T03:47:04Z",sageScore:3,diffs:[{njs:15,offset:0,notes:278,bombs:0,obstacles:2,nps:5.066,length:109.75,characteristic:"Standard",difficulty:"ExpertPlus",events:280,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:46.049,paritySummary:{errors:52,warns:17,resets:0}}],downloadURL:"https://cdn.beatsaver.com/c7bdbfea113219f8b372ca6107540995c2e81997.zip",coverURL:"https://cdn.beatsaver.com/c7bdbfea113219f8b372ca6107540995c2e81997.jpg",previewURL:"https://cdn.beatsaver.com/c7bdbfea113219f8b372ca6107540995c2e81997.mp3"}],createdAt:"2018-11-24T03:47:04Z",updatedAt:"2018-11-24T03:47:04Z",lastPublishedAt:"2018-11-24T03:47:04Z"},{id:"a76b",name:"BB 2020 | PSYQUI feat. Marpril - Girly Cupid | 18 | Submission #47",description:"This is a submission for the Building Blocks 2020 mapping contest!\n\nAll submissions are anonymous and will be uploaded by the BuildingBlocks account from May 3rd-May 17th 2020.\n\nInterested in checking out more map submissions or entering yourself? Join our discord here: https://discord.gg/3VAPcdg\n\nRequired Plugins:\nNoodle Extension\nChroma",uploader:{id:27741,name:"buildingblocks",uniqueSet:!0,hash:"5eac7bb67abb000006beca92",avatar:"https://www.gravatar.com/avatar/5eac7bb67abb000006beca92?d=retro",type:"SIMPLE"},metadata:{bpm:133,duration:244,songName:"Girly Cupid",songSubName:"feat. Marpril",songAuthorName:"PSYQUI",levelAuthorName:"Building Blocks 2020"},stats:{plays:0,downloads:1140,upvotes:1003,downvotes:13,score:.9266},uploaded:"2020-05-17T20:45:31.509Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"55cd8d585f6e63fb9b06d7c7358bda53f821fa81",key:"a76b",state:"Published",createdAt:"2020-05-17T20:45:31.509Z",sageScore:3,diffs:[{njs:18,offset:-.2,notes:764,bombs:0,obstacles:36331,nps:3.232,length:524,characteristic:"Standard",difficulty:"Expert",events:3539,chroma:!0,me:!1,ne:!0,cinema:!1,seconds:236.391,paritySummary:{errors:28,warns:16,resets:0}}],downloadURL:"https://cdn.beatsaver.com/55cd8d585f6e63fb9b06d7c7358bda53f821fa81.zip",coverURL:"https://cdn.beatsaver.com/55cd8d585f6e63fb9b06d7c7358bda53f821fa81.jpg",previewURL:"https://cdn.beatsaver.com/55cd8d585f6e63fb9b06d7c7358bda53f821fa81.mp3"}],createdAt:"2020-05-17T20:45:31.509Z",updatedAt:"2020-05-17T20:45:31.509Z",lastPublishedAt:"2020-05-17T20:45:31.509Z"},{id:"6368",name:"Mimimi - Nightcore",description:"Youtube Preview: https://youtu.be/vqVK85T72hs",uploader:{id:23751,name:"monteblanco",uniqueSet:!0,hash:"5cff0b7798cc5a672c855ef5",avatar:"https://www.gravatar.com/avatar/5cff0b7798cc5a672c855ef5?d=retro",type:"SIMPLE"},metadata:{bpm:144.6,duration:167,songName:"Mi Mi Mi - Nightcore",songSubName:"",songAuthorName:"NightcoreZodiac",levelAuthorName:"Monteblanco"},stats:{plays:0,downloads:2275,upvotes:1677,downvotes:39,score:.9266},uploaded:"2019-09-14T22:08:05.659Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"448f6e65098a9b0d2de0c5b87a53300a61795eb3",key:"6368",state:"Published",createdAt:"2019-09-14T22:08:05.659Z",sageScore:4,diffs:[{njs:16,offset:0,notes:755,bombs:0,obstacles:2,nps:4.648,length:391.5,characteristic:"Standard",difficulty:"Expert",events:859,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:162.448,paritySummary:{errors:0,warns:0,resets:0}}],downloadURL:"https://cdn.beatsaver.com/448f6e65098a9b0d2de0c5b87a53300a61795eb3.zip",coverURL:"https://cdn.beatsaver.com/448f6e65098a9b0d2de0c5b87a53300a61795eb3.jpg",previewURL:"https://cdn.beatsaver.com/448f6e65098a9b0d2de0c5b87a53300a61795eb3.mp3"}],createdAt:"2019-09-14T22:08:05.659Z",updatedAt:"2019-09-14T22:08:05.659Z",lastPublishedAt:"2019-09-14T22:08:05.659Z"},{id:"51fd",name:"BLOODY STREAM",description:"For the Jojo Fans",uploader:{id:4284704,name:"epg7ens",uniqueSet:!0,hash:"5cff0b7798cc5a672c855bb6",avatar:"https://cdn.beatsaver.com/avatar/174643589618466816.png",type:"DISCORD"},metadata:{bpm:132,duration:259,songName:"BLOODY STREAM",songSubName:"Coda",songAuthorName:"EPG7ENS",levelAuthorName:"EPG7ENS"},stats:{plays:0,downloads:3172,upvotes:2054,downvotes:55,score:.9266},uploaded:"2019-06-07T06:27:36Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"7d5038dd8aae109cbe537ecbc6c38ec458c820f8",key:"51fd",state:"Published",createdAt:"2019-06-07T06:27:36Z",sageScore:5,diffs:[{njs:17,offset:0,notes:1448,bombs:0,obstacles:0,nps:5.648,length:564,characteristic:"Standard",difficulty:"ExpertPlus",events:2746,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:256.364,paritySummary:{errors:2,warns:3,resets:0}}],downloadURL:"https://cdn.beatsaver.com/7d5038dd8aae109cbe537ecbc6c38ec458c820f8.zip",coverURL:"https://cdn.beatsaver.com/7d5038dd8aae109cbe537ecbc6c38ec458c820f8.jpg",previewURL:"https://cdn.beatsaver.com/7d5038dd8aae109cbe537ecbc6c38ec458c820f8.mp3"}],createdAt:"2019-06-07T06:27:36Z",updatedAt:"2019-06-07T06:27:36Z",lastPublishedAt:"2019-06-07T06:27:36Z"},{id:"4b20",name:"[Anniversary] Booty Bounce - Tujamo & Taio Cruz [Fafurion]",description:"Part of the Anniversary Song Pack\r\nExpert+ must be unlocked via the Anniversary Campaign\r\nEdit: Fixed notes placed after song is finished",uploader:{id:37070,name:"anniversaryteam",uniqueSet:!0,hash:"5cff0b7798cc5a672c8565a3",avatar:"https://www.gravatar.com/avatar/5cff0b7798cc5a672c8565a3?d=retro",type:"SIMPLE"},metadata:{bpm:128,duration:198,songName:"Booty Bounce",songSubName:"Tujamo & Taio Cruz",songAuthorName:"Fafurion",levelAuthorName:"AnniversaryTeam"},stats:{plays:0,downloads:4060,upvotes:1819,downvotes:45,score:.9266},uploaded:"2019-05-07T03:38:08Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"d106db545bccd0bba2432b71d94bb7f94fd1f9a2",key:"4b20",state:"Published",createdAt:"2019-05-07T03:38:08Z",sageScore:7,diffs:[{njs:13,offset:0,notes:366,bombs:0,obstacles:0,nps:1.881,length:415,characteristic:"Standard",difficulty:"Easy",events:6151,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:194.531,paritySummary:{errors:6,warns:0,resets:0}},{njs:13,offset:0,notes:550,bombs:0,obstacles:0,nps:2.824,length:415.5,characteristic:"Standard",difficulty:"Normal",events:6151,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:194.766,paritySummary:{errors:6,warns:0,resets:0}},{njs:13,offset:0,notes:732,bombs:0,obstacles:0,nps:3.756,length:415.75,characteristic:"Standard",difficulty:"Hard",events:6151,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:194.883,paritySummary:{errors:20,warns:16,resets:0}},{njs:15,offset:0,notes:874,bombs:0,obstacles:0,nps:4.485,length:415.75,characteristic:"Standard",difficulty:"Expert",events:6151,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:194.883,paritySummary:{errors:28,warns:34,resets:0}},{njs:15,offset:0,notes:938,bombs:0,obstacles:0,nps:4.813,length:415.75,characteristic:"Standard",difficulty:"ExpertPlus",events:6151,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:194.883,paritySummary:{errors:32,warns:34,resets:0}}],downloadURL:"https://cdn.beatsaver.com/d106db545bccd0bba2432b71d94bb7f94fd1f9a2.zip",coverURL:"https://cdn.beatsaver.com/d106db545bccd0bba2432b71d94bb7f94fd1f9a2.jpg",previewURL:"https://cdn.beatsaver.com/d106db545bccd0bba2432b71d94bb7f94fd1f9a2.mp3"}],createdAt:"2019-05-07T03:38:08Z",updatedAt:"2019-05-07T03:38:08Z",lastPublishedAt:"2019-05-07T03:38:08Z"},{id:"672f",name:"Kyouran Hey Kids!! [TV Size] - THE ORAL CIGARETTES (Noragami Aragoto Opening)",description:"Added a more comfortable diff which is more similar to my usual mapping style. If you don't like Ex+, play 'Shinki' for more comfort :) Also included a Hard diff for new players to enjoy this amazing song!\n\nPreview(Shinki) by Monteblanco: https://www.youtube.com/watch?v=9g9k1PomJGc\n\nHard: 369 Notes\nExpert+: 582 Notes\nShinki: 484 Notes\nLighting: 2243 Events",uploader:{id:4285130,name:"zoinkai__",uniqueSet:!0,hash:"5d465581f9bbae00060f3215",avatar:"https://cdn.beatsaver.com/avatar/146677763347185665.png",type:"DISCORD"},metadata:{bpm:142,duration:91,songName:"Kyouran Hey Kids!! (TV Size)",songSubName:"Noragami Aragoto Opening (V2)",songAuthorName:"THE ORAL CIGARETTES",levelAuthorName:"Zoinkai"},stats:{plays:0,downloads:3439,upvotes:1294,downvotes:24,score:.9264},uploaded:"2019-10-01T14:49:19.005Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"ad82ca6317e82318db8281f8902952f9d6175d3e",key:"672f",state:"Published",createdAt:"2019-10-01T14:49:19.005Z",sageScore:6,diffs:[{njs:12,offset:0,notes:369,bombs:0,obstacles:21,nps:4.456,length:196,characteristic:"Standard",difficulty:"Hard",events:2243,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:82.817,paritySummary:{errors:0,warns:0,resets:0}},{njs:18,offset:0,notes:582,bombs:7,obstacles:33,nps:6.622,length:208,characteristic:"Standard",difficulty:"Expert",events:2243,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:87.887,paritySummary:{errors:6,warns:10,resets:1}},{njs:18,offset:0,notes:484,bombs:13,obstacles:34,nps:5.507,length:208,characteristic:"Standard",difficulty:"ExpertPlus",events:2243,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:87.887,paritySummary:{errors:5,warns:13,resets:2}}],downloadURL:"https://cdn.beatsaver.com/ad82ca6317e82318db8281f8902952f9d6175d3e.zip",coverURL:"https://cdn.beatsaver.com/ad82ca6317e82318db8281f8902952f9d6175d3e.jpg",previewURL:"https://cdn.beatsaver.com/ad82ca6317e82318db8281f8902952f9d6175d3e.mp3"}],createdAt:"2019-10-01T14:49:19.005Z",updatedAt:"2019-10-01T14:49:19.005Z",lastPublishedAt:"2019-10-01T14:49:19.005Z"},{id:"5d26",name:"[Anniversary] Dancin (Krono Remix) - Aaron Smith [Skyler Wallace & Rexxz]",description:"Part of the Anniversary Song Pack",uploader:{id:37070,name:"anniversaryteam",uniqueSet:!0,hash:"5cff0b7798cc5a672c8565a3",avatar:"https://www.gravatar.com/avatar/5cff0b7798cc5a672c8565a3?d=retro",type:"SIMPLE"},metadata:{bpm:120,duration:198,songName:"Dancin",songSubName:"Krono Remix",songAuthorName:"Aaron Smith",levelAuthorName:"Skyler Wallace & Rexxz"},stats:{plays:0,downloads:7081,upvotes:2783,downvotes:89,score:.9263},uploaded:"2019-08-16T01:48:15.139Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"52cf3774ef1705f2830a85ad3147be9c52c795af",key:"5d26",state:"Published",createdAt:"2019-08-16T01:48:15.139Z",sageScore:7,diffs:[{njs:10,offset:1,notes:232,bombs:0,obstacles:8,nps:1.215,length:382,characteristic:"Standard",difficulty:"Easy",events:7824,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:191,paritySummary:{errors:57,warns:26,resets:0}},{njs:10,offset:1,notes:280,bombs:0,obstacles:0,nps:1.458,length:384,characteristic:"Standard",difficulty:"Normal",events:7824,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:192,paritySummary:{errors:71,warns:47,resets:0}},{njs:10,offset:1,notes:386,bombs:0,obstacles:4,nps:2.01,length:384,characteristic:"Standard",difficulty:"Hard",events:7824,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:192,paritySummary:{errors:68,warns:47,resets:0}},{njs:14,offset:0,notes:594,bombs:0,obstacles:0,nps:3.094,length:384,characteristic:"Standard",difficulty:"Expert",events:7824,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:192,paritySummary:{errors:52,warns:59,resets:0}},{njs:14,offset:0,notes:793,bombs:0,obstacles:30,nps:4.13,length:384,characteristic:"Standard",difficulty:"ExpertPlus",events:7824,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:192,paritySummary:{errors:81,warns:81,resets:0}}],downloadURL:"https://cdn.beatsaver.com/52cf3774ef1705f2830a85ad3147be9c52c795af.zip",coverURL:"https://cdn.beatsaver.com/52cf3774ef1705f2830a85ad3147be9c52c795af.jpg",previewURL:"https://cdn.beatsaver.com/52cf3774ef1705f2830a85ad3147be9c52c795af.mp3"}],createdAt:"2019-08-16T01:48:15.139Z",updatedAt:"2019-08-16T01:48:15.139Z",lastPublishedAt:"2019-08-16T01:48:15.139Z"},{id:"32e",name:"Daft Punk - Harder Better Faster Stronger",description:"Expert & Hard | 600+ Blocks | Full Song 3:44 | Includes Lighting. Request to: @themakertales",uploader:{id:51740,name:"runrockgame",uniqueSet:!1,hash:"5cff0b7398cc5a672c84f04e",avatar:"https://www.gravatar.com/avatar/5cff0b7398cc5a672c84f04e?d=retro",type:"SIMPLE"},metadata:{bpm:123,duration:224,songName:"Harder Better Faster Stronger",songSubName:"Daft Punk",songAuthorName:"RunRockGame",levelAuthorName:"runrockgame"},stats:{plays:0,downloads:14652,upvotes:15728,downvotes:820,score:.9263},uploaded:"2018-06-01T18:01:45Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"7c7f38d467bb43fe11a142581e63e324622ecc71",key:"32e",state:"Published",createdAt:"2018-06-01T18:01:45Z",sageScore:6,diffs:[{njs:10,offset:0,notes:423,bombs:57,obstacles:33,nps:1.381,length:630.5,characteristic:"Standard",difficulty:"Hard",events:1618,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:307.561,paritySummary:{errors:95,warns:38,resets:16}},{njs:10,offset:0,notes:616,bombs:68,obstacles:33,nps:2.011,length:630.5,characteristic:"Standard",difficulty:"Expert",events:1618,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:307.561,paritySummary:{errors:60,warns:83,resets:14}}],downloadURL:"https://cdn.beatsaver.com/7c7f38d467bb43fe11a142581e63e324622ecc71.zip",coverURL:"https://cdn.beatsaver.com/7c7f38d467bb43fe11a142581e63e324622ecc71.jpg",previewURL:"https://cdn.beatsaver.com/7c7f38d467bb43fe11a142581e63e324622ecc71.mp3"}],createdAt:"2018-06-01T18:01:45Z",updatedAt:"2018-06-01T18:01:45Z",lastPublishedAt:"2018-06-01T18:01:45Z"},{id:"636",name:"Burn - Ellie Goulding",description:"Difficulties: Expert, Hard, Normal\r\nCome Hang Out on Twitch! http://www.twitch.tv/bennydabeastlive\r\nYouTube Link: https://youtu.be/KOdvSdrnaeE\r\n\r\nIf you like this, check out my other beat maps:\r\nUptown Funk: https://beatsaver.com/details.php?id=1962\r\nCAN'T STOP THE FEELING by Justin Timberlake: https://beatsaver.com/details.php?id=1587\r\nMidnight City by M83: https://beatsaver.com/details.php?id=542\r\nKids by MGMT: https://beatsaver.com/details.php?id=421\r\nWhat You Know by Two Door Cinema Club: https://beatsaver.com/details.php?id=1107\r\nPolish Girl by Neon Indian: https://beatsaver.com/details.php?id=694",uploader:{id:30311,name:"bennydabeast",uniqueSet:!0,hash:"5cff0b7298cc5a672c84e98d",avatar:"https://cdn.beatsaver.com/avatar/30311.jpg",type:"SIMPLE"},metadata:{bpm:174,duration:233,songName:"Burn",songSubName:"Ellie Goulding",songAuthorName:"BennyDaBeast",levelAuthorName:"bennydabeast"},stats:{plays:0,downloads:14492,upvotes:7023,downvotes:311,score:.9262},uploaded:"2018-06-22T20:31:34Z",automapper:!1,ranked:!0,qualified:!1,versions:[{hash:"9d31d3aab3d58ab540df63caed06d62ff1cfefdd",key:"636",state:"Published",createdAt:"2018-06-22T20:31:34Z",sageScore:7,diffs:[{njs:10,offset:0,notes:438,bombs:12,obstacles:8,nps:1.58,length:804,characteristic:"Standard",difficulty:"Easy",events:396,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:277.241,paritySummary:{errors:107,warns:62,resets:0}},{njs:10,offset:0,notes:519,bombs:12,obstacles:8,nps:1.872,length:804,characteristic:"Standard",difficulty:"Hard",events:396,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:277.241,paritySummary:{errors:67,warns:109,resets:0}},{njs:10,offset:0,notes:686,bombs:12,obstacles:8,nps:3.251,length:612,characteristic:"Standard",difficulty:"Expert",events:396,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:211.034,paritySummary:{errors:120,warns:168,resets:0},stars:2.37}],downloadURL:"https://cdn.beatsaver.com/9d31d3aab3d58ab540df63caed06d62ff1cfefdd.zip",coverURL:"https://cdn.beatsaver.com/9d31d3aab3d58ab540df63caed06d62ff1cfefdd.jpg",previewURL:"https://cdn.beatsaver.com/9d31d3aab3d58ab540df63caed06d62ff1cfefdd.mp3"}],createdAt:"2018-06-22T20:31:34Z",updatedAt:"2018-06-22T20:31:34Z",lastPublishedAt:"2018-06-22T20:31:34Z"},{id:"b662",name:"PREPARING THE KRABBY PATTY",description:"Just a funny little map I made a couple weeks ago. I thought you might enjoy it so I'm releasing it now.\r\nI hope you enjoy.\r\n\r\nThe song is from the SpongeBob episode, Krusty Krab Training Video.\r\nEpisode Info: https://spongebob.fandom.com/wiki/Krusty_Krab_Training_Video",uploader:{id:4284694,name:"jokidum",uniqueSet:!0,hash:"5e15518d47f1600006e912cc",avatar:"https://cdn.beatsaver.com/avatar/494282373094047745.png",type:"DISCORD"},metadata:{bpm:145,duration:37,songName:"PREPARING THE KRABBY PATTY",songSubName:"",songAuthorName:"SpongeBob SquarePants",levelAuthorName:"Jokidum"},stats:{plays:0,downloads:2731,upvotes:1125,downvotes:18,score:.9261},uploaded:"2020-06-26T20:00:17.824Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"f931e1d23e0fad3b1ac22d86c55ab17718470b6d",key:"b662",state:"Published",createdAt:"2020-06-26T20:00:17.824Z",sageScore:-2,diffs:[{njs:12,offset:0,notes:165,bombs:0,obstacles:2,nps:5.75,length:69.344,characteristic:"Standard",difficulty:"ExpertPlus",events:628,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:28.694,paritySummary:{errors:0,warns:0,resets:0}}],downloadURL:"https://cdn.beatsaver.com/f931e1d23e0fad3b1ac22d86c55ab17718470b6d.zip",coverURL:"https://cdn.beatsaver.com/f931e1d23e0fad3b1ac22d86c55ab17718470b6d.jpg",previewURL:"https://cdn.beatsaver.com/f931e1d23e0fad3b1ac22d86c55ab17718470b6d.mp3"}],createdAt:"2020-06-26T20:00:17.824Z",updatedAt:"2020-06-26T20:00:17.824Z",lastPublishedAt:"2020-06-26T20:00:17.824Z"},{id:"6381",name:"Caravan Palace - Moonshine",description:"Easy, Normal, Hard, Expert, ExpertPlus\n\nE+: https://www.youtube.com/watch?v=pQFgyOkFdgM\n\nRequested by laser",uploader:{id:4235138,name:"CyanSnow",uniqueSet:!0,hash:"5cff0b7698cc5a672c8543ac",avatar:"https://cdn.beatsaver.com/avatar/154341137694326784.png",type:"DISCORD"},metadata:{bpm:117,duration:215,songName:"Moonshine",songSubName:"",songAuthorName:"Caravan Palace",levelAuthorName:"CyanSnow"},stats:{plays:0,downloads:3301,upvotes:1700,downvotes:41,score:.9261},uploaded:"2019-09-15T02:18:33.112Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"fd8d96de2a21cd4c56c6657214bb88e1b127b471",key:"6381",state:"Published",createdAt:"2019-09-15T02:18:33.112Z",sageScore:8,diffs:[{njs:12,offset:.5,notes:260,bombs:0,obstacles:23,nps:1.24,length:409,characteristic:"Standard",difficulty:"Easy",events:3302,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:209.744,paritySummary:{errors:96,warns:14,resets:0}},{njs:12,offset:.5,notes:376,bombs:0,obstacles:23,nps:1.793,length:409,characteristic:"Standard",difficulty:"Normal",events:3302,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:209.744,paritySummary:{errors:38,warns:19,resets:0}},{njs:13,offset:.25,notes:596,bombs:0,obstacles:10,nps:2.856,length:407,characteristic:"Standard",difficulty:"Hard",events:3302,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:208.718,paritySummary:{errors:7,warns:7,resets:0}},{njs:15,offset:0,notes:691,bombs:0,obstacles:9,nps:3.311,length:407,characteristic:"Standard",difficulty:"Expert",events:3302,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:208.718,paritySummary:{errors:7,warns:11,resets:0}},{njs:17,offset:-.25,notes:1302,bombs:0,obstacles:8,nps:6.2,length:409.5,characteristic:"Standard",difficulty:"ExpertPlus",events:3299,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:210,paritySummary:{errors:3,warns:3,resets:0}}],downloadURL:"https://cdn.beatsaver.com/fd8d96de2a21cd4c56c6657214bb88e1b127b471.zip",coverURL:"https://cdn.beatsaver.com/fd8d96de2a21cd4c56c6657214bb88e1b127b471.jpg",previewURL:"https://cdn.beatsaver.com/fd8d96de2a21cd4c56c6657214bb88e1b127b471.mp3"}],createdAt:"2019-09-15T02:18:33.112Z",updatedAt:"2019-09-15T02:18:33.112Z",lastPublishedAt:"2019-09-15T02:18:33.112Z"},{id:"8570",name:"Dua Lipa - Physical",description:"Physical - The first difficulty is Hard but is mislabeled as Expert. I have no way to update this sorry! The second difficulty is Expert.",uploader:{id:4285261,name:"yomama",uniqueSet:!0,hash:"5e23f0a1054bbd0007bc1ed4",avatar:"https://cdn.beatsaver.com/avatar/153595294792155137.png",type:"DISCORD"},metadata:{bpm:147,duration:195,songName:"Physical",songSubName:"",songAuthorName:"Dua Lipa",levelAuthorName:"yomama"},stats:{plays:0,downloads:4086,upvotes:1554,downvotes:35,score:.926},uploaded:"2020-02-09T03:16:30.433Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"ab7c911471a652de2ba74bd6df2a4cbbc5d45fee",key:"8570",state:"Published",createdAt:"2020-02-09T03:16:30.433Z",sageScore:4,diffs:[{njs:10,offset:0,notes:767,bombs:0,obstacles:33,nps:4.059,length:463,characteristic:"Standard",difficulty:"Hard",events:2281,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:188.98,paritySummary:{errors:105,warns:24,resets:0}},{njs:14,offset:0,notes:841,bombs:0,obstacles:33,nps:4.45,length:463,characteristic:"Standard",difficulty:"Expert",events:1397,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:188.98,paritySummary:{errors:101,warns:44,resets:0}}],downloadURL:"https://cdn.beatsaver.com/ab7c911471a652de2ba74bd6df2a4cbbc5d45fee.zip",coverURL:"https://cdn.beatsaver.com/ab7c911471a652de2ba74bd6df2a4cbbc5d45fee.jpg",previewURL:"https://cdn.beatsaver.com/ab7c911471a652de2ba74bd6df2a4cbbc5d45fee.mp3"}],createdAt:"2020-02-09T03:16:30.433Z",updatedAt:"2020-02-09T03:16:30.433Z",lastPublishedAt:"2020-02-09T03:16:30.433Z"},{id:"6f60",name:"True Damage - GIANTS",description:"PepeJamJam ",uploader:{id:4285107,name:"kikaeaeon",uniqueSet:!0,hash:"5cff0b7498cc5a672c85109b",avatar:"https://cdn.beatsaver.com/avatar/103715469822816256.png",type:"DISCORD"},metadata:{bpm:155,duration:193,songName:"GIANTS",songSubName:"",songAuthorName:"True Damage",levelAuthorName:"KikaeAeon"},stats:{plays:0,downloads:7189,upvotes:2503,downvotes:77,score:.926},uploaded:"2019-11-11T08:43:31.658Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"7fba5d716708d625428985bbead477321c419240",key:"6f60",state:"Published",createdAt:"2019-11-11T08:43:31.658Z",sageScore:7,diffs:[{njs:10,offset:0,notes:418,bombs:0,obstacles:68,nps:2.279,length:473.72,characteristic:"Standard",difficulty:"Hard",events:1150,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:183.376,paritySummary:{errors:21,warns:7,resets:0}},{njs:12,offset:0,notes:633,bombs:0,obstacles:54,nps:3.452,length:473.72,characteristic:"Standard",difficulty:"Expert",events:1150,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:183.376,paritySummary:{errors:12,warns:14,resets:0}},{njs:16,offset:0,notes:863,bombs:0,obstacles:59,nps:4.705,length:473.84,characteristic:"Standard",difficulty:"ExpertPlus",events:1150,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:183.422,paritySummary:{errors:30,warns:55,resets:0}}],downloadURL:"https://cdn.beatsaver.com/7fba5d716708d625428985bbead477321c419240.zip",coverURL:"https://cdn.beatsaver.com/7fba5d716708d625428985bbead477321c419240.jpg",previewURL:"https://cdn.beatsaver.com/7fba5d716708d625428985bbead477321c419240.mp3"}],createdAt:"2019-11-11T08:43:31.658Z",updatedAt:"2019-11-11T08:43:31.658Z",lastPublishedAt:"2019-11-11T08:43:31.658Z"},{id:"c208",name:"[Alphabeat - Pegboard Nerds Pack] Pegboard Nerds - Disconnected",description:"Part of the Pegboard Nerds Music Pack - Presented by the Alphabeat Mapping Group.\n\nAlphabeat is a mapping group that currently consists of 6 members, 4 of which have made this pack. This Pegboard Nerds pack is brought to you by Timeweaver, Rayman9515, KuritsaDBS & FireStrike!\n\nThis map uses a custom platform made by Rayman! Download it here: https://modelsaber.com/Platforms/?id=1594988870\n\nAll songs included in this pack:\n- Gunslinga (Mapped by Rayman)\n- Coffins (Mapped by Rayman)\n- Superstar (Mapped by Timeweaver & Firestrike)\n- Razor Sharp (Mapped by Firestrike)\n- Luigi’s Mansion (Mapped by Rayman)\n- Try This (Mapped by Timeweaver & Firestrike)\n- Swamp Thing (Mapped by Rayman & KuritsaDVR)\n- Exterminate (Mapped by Timeweaver)\n- Disconnected (Mapped by Timeweaver & Firestrike)\n- Here it Comes (Mapped by KuritsaDVR & Timeweaver)\nGet the playlist here: Coming Soon\n\nCheck everyone out:\nRayman: https://beatsaver.com/uploader/5dc6edac6dea0b0006c18486\nFirestrike: https://beatsaver.com/uploader/5cff0b7498cc5a672c85055a\nKuritsaDBS: https://beatsaver.com/uploader/5cff0b7698cc5a672c8537ef\n\nIncludes\n- 5 Standard Difficulties\n- 1 One Saber Difficulty",uploader:{id:4284197,name:"timeweaver",uniqueSet:!0,hash:"5d47d586c5301900060b2f6c",avatar:"https://cdn.beatsaver.com/avatar/607399708121366529.png",type:"DISCORD"},metadata:{bpm:128,duration:212,songName:"Disconnected",songSubName:"",songAuthorName:"Pegboard Nerds",levelAuthorName:"FireStrike & Timeweaver"},stats:{plays:0,downloads:4098,upvotes:1198,downvotes:21,score:.9259},uploaded:"2020-07-17T13:00:44.293Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"423bd0a80440bcc9dda9dbe20a72ed235dfc3e84",key:"c208",state:"Published",createdAt:"2020-07-17T13:00:44.293Z",sageScore:7,diffs:[{njs:9,offset:0,notes:274,bombs:0,obstacles:43,nps:1.319,length:443,characteristic:"Standard",difficulty:"Easy",events:4547,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:207.656,paritySummary:{errors:82,warns:16,resets:0}},{njs:10,offset:1,notes:374,bombs:0,obstacles:58,nps:1.799,length:443.5,characteristic:"Standard",difficulty:"Normal",events:4547,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:207.891,paritySummary:{errors:62,warns:42,resets:0}},{njs:12,offset:.5,notes:567,bombs:0,obstacles:60,nps:2.727,length:443.5,characteristic:"Standard",difficulty:"Hard",events:4547,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:207.891,paritySummary:{errors:31,warns:22,resets:0}},{njs:15,offset:0,notes:777,bombs:0,obstacles:73,nps:3.738,length:443.5,characteristic:"Standard",difficulty:"Expert",events:4547,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:207.891,paritySummary:{errors:2,warns:0,resets:0}},{njs:17,offset:-.25,notes:957,bombs:114,obstacles:56,nps:4.603,length:443.5,characteristic:"Standard",difficulty:"ExpertPlus",events:4547,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:207.891,paritySummary:{errors:0,warns:2,resets:0}},{njs:15,offset:0,notes:611,bombs:0,obstacles:85,nps:2.939,length:443.5,characteristic:"OneSaber",difficulty:"Expert",events:4548,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:207.891,paritySummary:{errors:0,warns:1,resets:0}}],downloadURL:"https://cdn.beatsaver.com/423bd0a80440bcc9dda9dbe20a72ed235dfc3e84.zip",coverURL:"https://cdn.beatsaver.com/423bd0a80440bcc9dda9dbe20a72ed235dfc3e84.jpg",previewURL:"https://cdn.beatsaver.com/423bd0a80440bcc9dda9dbe20a72ed235dfc3e84.mp3"}],createdAt:"2020-07-17T13:00:44.293Z",updatedAt:"2020-07-17T13:00:44.293Z",lastPublishedAt:"2020-07-17T13:00:44.293Z"},{id:"1fed",name:"Change The World - Fox Blanco - 100k Contest",description:"This is one of the 22 maps that were mapped for the 100k Contest where you can win over $7,000 in prizes. Go to https://bsaber.com/100k-contest/ to register!",uploader:{id:13320,name:"novashaft",uniqueSet:!0,hash:"5cff0b7398cc5a672c84ee55",avatar:"https://www.gravatar.com/avatar/5cff0b7398cc5a672c84ee55?d=retro",type:"SIMPLE"},metadata:{bpm:126,duration:179,songName:"Change The World",songSubName:"Fox Blanco",songAuthorName:"NovaShaft",levelAuthorName:"novashaft"},stats:{plays:0,downloads:4075,upvotes:1249,downvotes:23,score:.9259},uploaded:"2018-11-12T17:42:26Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"fcc70ede2fcbd648a25a954e6928a14985f1fbe8",key:"1fed",state:"Published",createdAt:"2018-11-12T17:42:26Z",sageScore:5,diffs:[{njs:10,offset:0,notes:245,bombs:0,obstacles:18,nps:1.4,length:367.5,characteristic:"Standard",difficulty:"Easy",events:889,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:175,paritySummary:{errors:25,warns:4,resets:0}},{njs:10,offset:0,notes:321,bombs:0,obstacles:19,nps:1.834,length:367.5,characteristic:"Standard",difficulty:"Normal",events:889,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:175,paritySummary:{errors:35,warns:6,resets:0}},{njs:10,offset:0,notes:443,bombs:0,obstacles:19,nps:2.531,length:367.5,characteristic:"Standard",difficulty:"Hard",events:889,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:175,paritySummary:{errors:26,warns:9,resets:0}},{njs:12,offset:0,notes:531,bombs:0,obstacles:19,nps:3.034,length:367.5,characteristic:"Standard",difficulty:"Expert",events:889,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:175,paritySummary:{errors:40,warns:34,resets:0}}],downloadURL:"https://cdn.beatsaver.com/fcc70ede2fcbd648a25a954e6928a14985f1fbe8.zip",coverURL:"https://cdn.beatsaver.com/fcc70ede2fcbd648a25a954e6928a14985f1fbe8.jpg",previewURL:"https://cdn.beatsaver.com/fcc70ede2fcbd648a25a954e6928a14985f1fbe8.mp3"}],createdAt:"2018-11-12T17:42:26Z",updatedAt:"2018-11-12T17:42:26Z",lastPublishedAt:"2018-11-12T17:42:26Z"},{id:"3023",name:"Houdini - Foster The People",description:"Expert Playthrough : https://youtu.be/6Fk164IwVyU",uploader:{id:13320,name:"novashaft",uniqueSet:!0,hash:"5cff0b7398cc5a672c84ee55",avatar:"https://www.gravatar.com/avatar/5cff0b7398cc5a672c84ee55?d=retro",type:"SIMPLE"},metadata:{bpm:110,duration:204,songName:"Houdini",songSubName:"Foster The People",songAuthorName:"NovaShaft",levelAuthorName:"novashaft"},stats:{plays:0,downloads:3836,upvotes:1087,downvotes:17,score:.9258},uploaded:"2019-01-22T19:02:49Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"c50641c7f73470e5368ab6957bedca3b2e620edc",key:"3023",state:"Published",createdAt:"2019-01-22T19:02:49Z",sageScore:6,diffs:[{njs:10,offset:0,notes:367,bombs:0,obstacles:27,nps:1.838,length:366,characteristic:"Standard",difficulty:"Normal",events:1163,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:199.636,paritySummary:{errors:30,warns:20,resets:0}},{njs:11,offset:0,notes:522,bombs:0,obstacles:27,nps:2.615,length:366,characteristic:"Standard",difficulty:"Hard",events:1163,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:199.636,paritySummary:{errors:38,warns:29,resets:0}},{njs:12,offset:0,notes:829,bombs:0,obstacles:27,nps:4.153,length:366,characteristic:"Standard",difficulty:"Expert",events:1163,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:199.636,paritySummary:{errors:41,warns:33,resets:0}}],downloadURL:"https://cdn.beatsaver.com/c50641c7f73470e5368ab6957bedca3b2e620edc.zip",coverURL:"https://cdn.beatsaver.com/c50641c7f73470e5368ab6957bedca3b2e620edc.jpg",previewURL:"https://cdn.beatsaver.com/c50641c7f73470e5368ab6957bedca3b2e620edc.mp3"}],createdAt:"2019-01-22T19:02:49Z",updatedAt:"2019-01-22T19:02:49Z",lastPublishedAt:"2019-01-22T19:02:49Z"},{id:"849c",name:"Nightcore - Sweet but Psycho",description:"Youtube Preview: https://youtu.be/7u9Z8z-25ro",uploader:{id:23751,name:"monteblanco",uniqueSet:!0,hash:"5cff0b7798cc5a672c855ef5",avatar:"https://www.gravatar.com/avatar/5cff0b7798cc5a672c855ef5?d=retro",type:"SIMPLE"},metadata:{bpm:148,duration:167,songName:"Nightcore - Sweet but Psycho",songSubName:"",songAuthorName:"Syrex",levelAuthorName:"Monteblanco"},stats:{plays:0,downloads:2955,upvotes:1088,downvotes:17,score:.9258},uploaded:"2020-02-06T05:37:47.858Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"908f95d354d9a3861f94055772983d54cd12bdcd",key:"849c",state:"Published",createdAt:"2020-02-06T05:37:47.858Z",sageScore:2,diffs:[{njs:18,offset:0,notes:672,bombs:0,obstacles:0,nps:4.134,length:400,characteristic:"Standard",difficulty:"ExpertPlus",events:778,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:162.162,paritySummary:{errors:0,warns:0,resets:0}}],downloadURL:"https://cdn.beatsaver.com/908f95d354d9a3861f94055772983d54cd12bdcd.zip",coverURL:"https://cdn.beatsaver.com/908f95d354d9a3861f94055772983d54cd12bdcd.jpg",previewURL:"https://cdn.beatsaver.com/908f95d354d9a3861f94055772983d54cd12bdcd.mp3"}],createdAt:"2020-02-06T05:37:47.858Z",updatedAt:"2020-02-06T05:37:47.858Z",lastPublishedAt:"2020-02-06T05:37:47.858Z"},{id:"6cc2",name:"Tones And I - Dance Monkey",description:"Dance. :3",uploader:{id:4289959,name:"pinus-sp",uniqueSet:!0,hash:"5d9cd7b2e6a67600062ab0a9",avatar:"https://cdn.beatsaver.com/avatar/188777396441186304.png",type:"DISCORD"},metadata:{bpm:196,duration:211,songName:"Dance Monkey",songSubName:"",songAuthorName:"Tones and I",levelAuthorName:"Pinus Sp"},stats:{plays:0,downloads:7505,upvotes:5655,downvotes:239,score:.9258},uploaded:"2019-10-28T20:20:40.691Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"46bbda664ab28c94639d8991d924726c0803b023",key:"6cc2",state:"Published",createdAt:"2019-10-28T20:20:40.691Z",sageScore:5,diffs:[{njs:12,offset:0,notes:256,bombs:0,obstacles:76,nps:1.253,length:667.25,characteristic:"Standard",difficulty:"Normal",events:1140,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:204.26,paritySummary:{errors:133,warns:0,resets:0}},{njs:12,offset:0,notes:462,bombs:0,obstacles:88,nps:2.262,length:667.25,characteristic:"Standard",difficulty:"Hard",events:1140,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:204.26,paritySummary:{errors:265,warns:3,resets:0}},{njs:12,offset:0,notes:826,bombs:0,obstacles:88,nps:4.044,length:667.25,characteristic:"Standard",difficulty:"Expert",events:1140,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:204.26,paritySummary:{errors:132,warns:93,resets:0}}],downloadURL:"https://cdn.beatsaver.com/46bbda664ab28c94639d8991d924726c0803b023.zip",coverURL:"https://cdn.beatsaver.com/46bbda664ab28c94639d8991d924726c0803b023.jpg",previewURL:"https://cdn.beatsaver.com/46bbda664ab28c94639d8991d924726c0803b023.mp3"}],createdAt:"2019-10-28T20:20:40.691Z",updatedAt:"2019-10-28T20:20:40.691Z",lastPublishedAt:"2019-10-28T20:20:40.691Z"},{id:"5dbb",name:"Siames - The Wolf",description:"Video Preview: https://youtu.be/I68zZeXioyc\n\nDifficulty: Expert\nBPM: 96.1\nNotes: 632\nNJS: 12\nNPS: 3.32\nSong Duration: 3:10",uploader:{id:34679,name:"lukemortora",uniqueSet:!0,hash:"5cff0b7798cc5a672c855c16",avatar:"https://www.gravatar.com/avatar/5cff0b7798cc5a672c855c16?d=retro",type:"SIMPLE"},metadata:{bpm:96.1,duration:190,songName:"The Wolf",songSubName:"",songAuthorName:"Siames",levelAuthorName:"LukeMortora"},stats:{plays:0,downloads:1765,upvotes:1108,downvotes:18,score:.9257},uploaded:"2019-08-18T13:54:38.297Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"88ef5d6f1ce10e3cc85637b095cd46ee68f125ac",key:"5dbb",state:"Published",createdAt:"2019-08-18T13:54:38.297Z",sageScore:6,diffs:[{njs:13,offset:0,notes:632,bombs:60,obstacles:19,nps:3.467,length:292,characteristic:"Standard",difficulty:"Expert",events:1152,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:182.31,paritySummary:{errors:51,warns:53,resets:22}}],downloadURL:"https://cdn.beatsaver.com/88ef5d6f1ce10e3cc85637b095cd46ee68f125ac.zip",coverURL:"https://cdn.beatsaver.com/88ef5d6f1ce10e3cc85637b095cd46ee68f125ac.jpg",previewURL:"https://cdn.beatsaver.com/88ef5d6f1ce10e3cc85637b095cd46ee68f125ac.mp3"}],createdAt:"2019-08-18T13:54:38.297Z",updatedAt:"2019-08-18T13:54:38.297Z",lastPublishedAt:"2019-08-18T13:54:38.297Z"},{id:"8e98",name:"2WEI feat. Edda Hayes - Warriors",description:"Bit late on this one to be honest.\nOfficial Imagine Dragons cover from League of Legends season 2020 cinematic.\n\nvideo: https://youtu.be/Wl-GfMwC3i8\n\nEasy: Notes: 159 NPS: 0.91 NJS: 12\nNormal: Notes: 221 NPS: 1.26 NJS: 12\nHard: Notes: 288 NPS: 1.64 NJS: 15\nExpert: Notes: 373 NPS: 1.98 NJS: 17\nExpert+: Notes: 442 NPS: 2.35 NJS: 19\n\nCheck out my lightshows here: https://www.youtube.com/playlist?list=PLwl6dYq72JOYu1BnKl5WATa4Dh__ZJmuN",uploader:{id:14808,name:"halcyon12",uniqueSet:!0,hash:"5cff0b7698cc5a672c8547ad",avatar:"https://www.gravatar.com/avatar/5cff0b7698cc5a672c8547ad?d=retro",type:"SIMPLE"},metadata:{bpm:123,duration:204,songName:"Warriors",songSubName:"(feat. Edda Hayes)",songAuthorName:"2WEI, League of Legends",levelAuthorName:"Halcyon12"},stats:{plays:0,downloads:10351,upvotes:2900,downvotes:97,score:.9256},uploaded:"2020-03-09T01:22:45.508Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"3a49f1b40044ba90eb27963c29121537cec28a44",key:"8e98",state:"Published",createdAt:"2020-03-09T01:22:45.508Z",sageScore:8,diffs:[{njs:12,offset:1,notes:159,bombs:0,obstacles:21,nps:.91,length:358.292,characteristic:"Standard",difficulty:"Easy",events:3343,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:174.777,paritySummary:{errors:13,warns:2,resets:0}},{njs:14,offset:.5,notes:221,bombs:0,obstacles:35,nps:1.259,length:359.904,characteristic:"Standard",difficulty:"Normal",events:3343,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:175.563,paritySummary:{errors:9,warns:4,resets:0}},{njs:15,offset:0,notes:288,bombs:0,obstacles:54,nps:1.64,length:359.904,characteristic:"Standard",difficulty:"Hard",events:3343,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:175.563,paritySummary:{errors:0,warns:0,resets:0}},{njs:17,offset:-.25,notes:373,bombs:0,obstacles:34,nps:1.98,length:386.268,characteristic:"Standard",difficulty:"Expert",events:3343,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:188.424,paritySummary:{errors:0,warns:0,resets:0}},{njs:19,offset:.5,notes:442,bombs:0,obstacles:178,nps:2.346,length:386.268,characteristic:"Standard",difficulty:"ExpertPlus",events:3343,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:188.424,paritySummary:{errors:1,warns:0,resets:0}},{njs:12,offset:0,notes:0,bombs:0,obstacles:0,nps:0,length:0,characteristic:"Lightshow",difficulty:"ExpertPlus",events:3343,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:0,paritySummary:{errors:0,warns:0,resets:0}}],downloadURL:"https://cdn.beatsaver.com/3a49f1b40044ba90eb27963c29121537cec28a44.zip",coverURL:"https://cdn.beatsaver.com/3a49f1b40044ba90eb27963c29121537cec28a44.jpg",previewURL:"https://cdn.beatsaver.com/3a49f1b40044ba90eb27963c29121537cec28a44.mp3"}],createdAt:"2020-03-09T01:22:45.508Z",updatedAt:"2020-03-09T01:22:45.508Z",lastPublishedAt:"2020-03-09T01:22:45.508Z"},{id:"4fc3",name:"Doubt - twenty one pilots",description:"Nice relaxing and laid-back experience, even on Expert/Expert+. In-game voting is fixed too, so don't forget to update your mods!\r\n\r\nBPM: 123\r\n\r\nNotes: N - 409 ; H - 487 ; Ex - 668 ; Ex+ - 720\r\nWalls: N - 68 ; H - 42 ; Ex - 41 ; Ex+ - 40\r\nBombs: None!\r\n\r\nThanks to helencarnate and Qwasyx for playtesting!",uploader:{id:4285188,name:"fruhead",uniqueSet:!0,hash:"5cff0b7598cc5a672c852683",avatar:"https://cdn.beatsaver.com/avatar/174000100413145090.png",type:"DISCORD"},metadata:{bpm:123,duration:191,songName:"Doubt",songSubName:"twenty one pilots",songAuthorName:"fruhead",levelAuthorName:"fruhead"},stats:{plays:0,downloads:6089,upvotes:1160,downvotes:20,score:.9256},uploaded:"2019-05-29T18:36:45Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"bf166123a88a801f41aed10cff6c36f9f11f4cf3",key:"4fc3",state:"Published",createdAt:"2019-05-29T18:36:45Z",sageScore:4,diffs:[{njs:12,offset:0,notes:409,bombs:0,obstacles:68,nps:2.285,length:367,characteristic:"Standard",difficulty:"Normal",events:5750,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:179.024,paritySummary:{errors:13,warns:4,resets:0}},{njs:12,offset:0,notes:487,bombs:0,obstacles:42,nps:2.72,length:367,characteristic:"Standard",difficulty:"Hard",events:5750,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:179.024,paritySummary:{errors:11,warns:12,resets:0}},{njs:14,offset:0,notes:668,bombs:0,obstacles:41,nps:3.731,length:367,characteristic:"Standard",difficulty:"Expert",events:5750,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:179.024,paritySummary:{errors:20,warns:19,resets:0}},{njs:16,offset:0,notes:720,bombs:0,obstacles:41,nps:4.022,length:367,characteristic:"Standard",difficulty:"ExpertPlus",events:5750,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:179.024,paritySummary:{errors:18,warns:18,resets:0}}],downloadURL:"https://cdn.beatsaver.com/bf166123a88a801f41aed10cff6c36f9f11f4cf3.zip",coverURL:"https://cdn.beatsaver.com/bf166123a88a801f41aed10cff6c36f9f11f4cf3.jpg",previewURL:"https://cdn.beatsaver.com/bf166123a88a801f41aed10cff6c36f9f11f4cf3.mp3"}],createdAt:"2019-05-29T18:36:45Z",updatedAt:"2019-05-29T18:36:45Z",lastPublishedAt:"2019-05-29T18:36:45Z"},{id:"1362d",name:"Ghost Choir - Louie Zong (modchart)",description:"This is a relaxing modchart and a technical proof of concept. If you haven't played my modchart Dondante yet, please check it out: https://beatsaver.com/beatmap/123b5\r\n\r\nThe map requires the mods Noodle Extensions and Chroma. If Noodle Extensions is not available yet on ModAssistant, you can get the latest release at https://github.com/Aeroluna/NoodleExtensions/releases/tag/v1.3.5\r\n\r\nTips for a better experience:\r\n- Disable static lights; there are no lights anyway\r\n- Hide the HUD\r\n- Turn the SFX volume down (0 or low value like 0.2)\r\n- Enable bloom post-processing\r\n\r\nPreview: https://youtu.be/XC7RY9C_EHs\r\n\r\nI adapted this from Louie Zong's original animation: https://youtu.be/kXF3VYYa5TI\r\n\r\n",uploader:{id:4288814,name:"nyri0",uniqueSet:!0,hash:"5e792df416c9680006086a78",avatar:"https://cdn.beatsaver.com/avatar/396715033125584907.png",type:"DISCORD"},metadata:{bpm:67,duration:90,songName:"Ghost Choir",songSubName:"",songAuthorName:"Louie Zong",levelAuthorName:"nyri0"},stats:{plays:0,downloads:1938,upvotes:663,downvotes:3,score:.9255},uploaded:"2021-01-30T12:31:29.825Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"1d373506c0b2b82867411f18696a1ad53d4ea01d",key:"1362d",state:"Published",createdAt:"2021-01-30T12:31:29.825Z",sageScore:2,diffs:[{njs:14,offset:0,notes:138,bombs:0,obstacles:1460,nps:1.684,length:91.5,characteristic:"Standard",difficulty:"Hard",events:5,chroma:!0,me:!1,ne:!0,cinema:!1,seconds:81.94,paritySummary:{errors:4,warns:3,resets:0}}],downloadURL:"https://cdn.beatsaver.com/1d373506c0b2b82867411f18696a1ad53d4ea01d.zip",coverURL:"https://cdn.beatsaver.com/1d373506c0b2b82867411f18696a1ad53d4ea01d.jpg",previewURL:"https://cdn.beatsaver.com/1d373506c0b2b82867411f18696a1ad53d4ea01d.mp3"}],createdAt:"2021-01-30T12:31:29.825Z",updatedAt:"2021-01-30T12:31:29.825Z",lastPublishedAt:"2021-01-30T12:31:29.825Z"},{id:"f91e",name:"Who's Laughing Now - Ava Max",description:"Surprise, it's a slow pop song and it doesn't have sliders!\nGoing back to my roots with this one just because I love the song and I wanted to rank a pop song in quite a while anyways.\n\nThank you for the mod Trolav!\n\nAs always, I'm open to feedback on discord @Teuflum#5982.",uploader:{id:68740,name:"Teuflum",uniqueSet:!0,hash:"5cff0b7498cc5a672c851a6b",avatar:"https://cdn.beatsaver.com/avatar/114706869460664326.png",type:"DISCORD"},metadata:{bpm:92,duration:181,songName:"Who's Laughing Now",songSubName:"",songAuthorName:"Ava Max",levelAuthorName:"Teuflum"},stats:{plays:0,downloads:11683,upvotes:1652,downvotes:40,score:.9255},uploaded:"2020-10-04T11:45:39.424Z",automapper:!1,ranked:!0,qualified:!1,versions:[{hash:"559113d5c4247438c6ecad852c61d03d79396af1",key:"f91e",state:"Published",createdAt:"2020-10-04T11:45:39.424Z",sageScore:7,diffs:[{njs:12,offset:0,notes:286,bombs:19,obstacles:139,nps:1.636,length:268,characteristic:"Standard",difficulty:"Easy",events:2852,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:174.783,paritySummary:{errors:3,warns:0,resets:1},stars:.96},{njs:13,offset:-.25,notes:344,bombs:19,obstacles:139,nps:1.968,length:268,characteristic:"Standard",difficulty:"Normal",events:2852,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:174.783,paritySummary:{errors:0,warns:0,resets:2},stars:1.32},{njs:14,offset:.5,notes:545,bombs:20,obstacles:126,nps:3.118,length:268,characteristic:"Standard",difficulty:"Hard",events:2852,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:174.783,paritySummary:{errors:0,warns:0,resets:2},stars:1.96},{njs:15,offset:.25,notes:703,bombs:20,obstacles:93,nps:4.022,length:268,characteristic:"Standard",difficulty:"Expert",events:2852,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:174.783,paritySummary:{errors:0,warns:0,resets:0},stars:2.83},{njs:17,offset:.1,notes:727,bombs:20,obstacles:93,nps:4.159,length:268,characteristic:"Standard",difficulty:"ExpertPlus",events:2852,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:174.783,paritySummary:{errors:0,warns:0,resets:0},stars:4.02}],downloadURL:"https://cdn.beatsaver.com/559113d5c4247438c6ecad852c61d03d79396af1.zip",coverURL:"https://cdn.beatsaver.com/559113d5c4247438c6ecad852c61d03d79396af1.jpg",previewURL:"https://cdn.beatsaver.com/559113d5c4247438c6ecad852c61d03d79396af1.mp3"}],createdAt:"2020-10-04T11:45:39.424Z",updatedAt:"2021-09-20T15:00:35.623946Z",lastPublishedAt:"2020-10-04T11:45:39.424Z"},{id:"4fba",name:"Mirror Mirror [One Saber] (RWBY: Volume 1 Soundtrack) - Jeff Williams ft. Casey Lee Williams",description:"My first one saber map! Can't believe it took me 250 maps before I started making even 1 one saber map. Trying out one saber mapping with the first RWBY song that I mapped. No promises, but I might do more one saber RWBY maps if this takes off. Map comes with custom Atlas Blue and Snow White colors",uploader:{id:58338,name:"Joetastic",uniqueSet:!0,hash:"5cff0b7498cc5a672c85050e",avatar:"https://cdn.beatsaver.com/avatar/227767566402191360.png",type:"DISCORD"},metadata:{bpm:146,duration:175,songName:"Mirror Mirror (One Saber)",songSubName:"Jeff Williams ft. Casey Lee Williams",songAuthorName:"Joetastic",levelAuthorName:"Joetastic"},stats:{plays:0,downloads:3363,upvotes:760,downvotes:6,score:.9255},uploaded:"2019-05-29T13:04:18Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"4cb8bba2e14169819d61a4ccb69adba7b59d7f7a",key:"4fba",state:"Published",createdAt:"2019-05-29T13:04:18Z",sageScore:5,diffs:[{njs:12,offset:0,notes:352,bombs:0,obstacles:8,nps:2.185,length:391.993,characteristic:"OneSaber",difficulty:"Expert",events:581,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:161.093,paritySummary:{errors:15,warns:22,resets:0}}],downloadURL:"https://cdn.beatsaver.com/4cb8bba2e14169819d61a4ccb69adba7b59d7f7a.zip",coverURL:"https://cdn.beatsaver.com/4cb8bba2e14169819d61a4ccb69adba7b59d7f7a.jpg",previewURL:"https://cdn.beatsaver.com/4cb8bba2e14169819d61a4ccb69adba7b59d7f7a.mp3"}],createdAt:"2019-05-29T13:04:18Z",updatedAt:"2019-05-29T13:04:18Z",lastPublishedAt:"2019-05-29T13:04:18Z"},{id:"447a",name:"AIAIAI",description:"Twitter: https://twitter.com/Dack731",uploader:{id:4285250,name:"dack",uniqueSet:!0,hash:"5cff0b7598cc5a672c852c6f",avatar:"https://cdn.beatsaver.com/avatar/297344689798119424.png",type:"DISCORD"},metadata:{bpm:128,duration:192,songName:"AIAIAI (feat. Yasutaka Nakata)",songSubName:"Kizuna AI",songAuthorName:"Dack",levelAuthorName:"Dack"},stats:{plays:0,downloads:1261,upvotes:1434,downvotes:31,score:.9255},uploaded:"2019-04-09T11:00:10Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"174dbef7bfdd791378582d4e7b46f9d652ba44d8",key:"447a",state:"Published",createdAt:"2019-04-09T11:00:10Z",sageScore:4,diffs:[{njs:14,offset:0,notes:466,bombs:8,obstacles:15,nps:2.556,length:389,characteristic:"Standard",difficulty:"Expert",events:715,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:182.344,paritySummary:{errors:35,warns:29,resets:1}}],downloadURL:"https://cdn.beatsaver.com/174dbef7bfdd791378582d4e7b46f9d652ba44d8.zip",coverURL:"https://cdn.beatsaver.com/174dbef7bfdd791378582d4e7b46f9d652ba44d8.jpg",previewURL:"https://cdn.beatsaver.com/174dbef7bfdd791378582d4e7b46f9d652ba44d8.mp3"}],createdAt:"2019-04-09T11:00:10Z",updatedAt:"2019-04-09T11:00:10Z",lastPublishedAt:"2019-04-09T11:00:10Z"},{id:"d35a",name:"[FUTURE FUNK PACK] Windy Summer (Night Tempo 100% Pure Remastered)",description:"FUTURE FUNK MAP PACK\n2 songs uploaded everyday through August 10th - 14th!\n\nThese first two songs are originally sung by Anri, one of my favorite City Pop artist. \n\nPlease look forward to the upcoming maps!\n\nDM any feedback on Discord\nETAN#8341",uploader:{id:4235140,name:"etan",uniqueSet:!0,hash:"5cff0b7798cc5a672c855775",avatar:"https://cdn.beatsaver.com/avatar/136373107559497728.png",type:"DISCORD"},metadata:{bpm:120,duration:190,songName:"Windy Summer",songSubName:"(Night Tempo 100% Pure Remastered)",songAuthorName:"Anri",levelAuthorName:"ETAN"},stats:{plays:0,downloads:4185,upvotes:753,downvotes:6,score:.9253},uploaded:"2020-08-10T17:48:34.173Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"dc259cc74cc52a6103c0c3f44b04549e9f555425",key:"d35a",state:"Published",createdAt:"2020-08-10T17:48:34.173Z",sageScore:6,diffs:[{njs:10,offset:1,notes:177,bombs:0,obstacles:30,nps:.982,length:360.5,characteristic:"Standard",difficulty:"Easy",events:11459,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:180.25,paritySummary:{errors:25,warns:8,resets:0}},{njs:11,offset:1,notes:302,bombs:0,obstacles:29,nps:1.675,length:360.5,characteristic:"Standard",difficulty:"Normal",events:11459,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:180.25,paritySummary:{errors:0,warns:0,resets:0}},{njs:12,offset:.5,notes:422,bombs:0,obstacles:29,nps:2.335,length:361.5,characteristic:"Standard",difficulty:"Hard",events:11459,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:180.75,paritySummary:{errors:0,warns:0,resets:0}},{njs:14,offset:0,notes:668,bombs:0,obstacles:27,nps:3.696,length:361.5,characteristic:"Standard",difficulty:"Expert",events:11459,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:180.75,paritySummary:{errors:0,warns:0,resets:0}},{njs:17,offset:-.5,notes:877,bombs:0,obstacles:28,nps:4.852,length:361.5,characteristic:"Standard",difficulty:"ExpertPlus",events:11459,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:180.75,paritySummary:{errors:0,warns:0,resets:0}}],downloadURL:"https://cdn.beatsaver.com/dc259cc74cc52a6103c0c3f44b04549e9f555425.zip",coverURL:"https://cdn.beatsaver.com/dc259cc74cc52a6103c0c3f44b04549e9f555425.jpg",previewURL:"https://cdn.beatsaver.com/dc259cc74cc52a6103c0c3f44b04549e9f555425.mp3"}],createdAt:"2020-08-10T17:48:34.173Z",updatedAt:"2020-08-10T17:48:34.173Z",lastPublishedAt:"2020-08-10T17:48:34.173Z"},{id:"3969",name:"Lukas Graham - 7 Years",description:"Trying out something new here and seeing how well a slower song performs in beat saber. I decided not to map an easy for this one due to the songs length and naturally slow pacing. I'm interested to know what you think though. Do you think slow songs are good for beat saber? Should I do more? etc...\r\n\r\nTime spent mapping: 13:52\r\nVideo Preview: https://www.youtube.com/watch?v=2JB4fn1npwQ",uploader:{id:4785,name:"stumi",uniqueSet:!1,hash:"5cff0b7398cc5a672c84f720",avatar:"https://www.gravatar.com/avatar/5cff0b7398cc5a672c84f720?d=retro",type:"SIMPLE"},metadata:{bpm:120,duration:235,songName:"7 Years",songSubName:"Lukas Graham",songAuthorName:"Stumi",levelAuthorName:"stumi"},stats:{plays:0,downloads:4425,upvotes:2415,downvotes:75,score:.9253},uploaded:"2019-02-24T17:19:02Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"11621a2effc185bf6ae4c7526c9db8cf435fd9b2",key:"3969",state:"Published",createdAt:"2019-02-24T17:19:02Z",sageScore:5,diffs:[{njs:10,offset:0,notes:374,bombs:0,obstacles:36,nps:1.645,length:454.75,characteristic:"Standard",difficulty:"Normal",events:1566,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:227.375,paritySummary:{errors:30,warns:19,resets:0}},{njs:11,offset:0,notes:626,bombs:0,obstacles:23,nps:2.753,length:454.75,characteristic:"Standard",difficulty:"Hard",events:1566,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:227.375,paritySummary:{errors:41,warns:49,resets:0}},{njs:14,offset:0,notes:756,bombs:0,obstacles:23,nps:3.325,length:454.75,characteristic:"Standard",difficulty:"Expert",events:1566,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:227.375,paritySummary:{errors:42,warns:55,resets:0}}],downloadURL:"https://cdn.beatsaver.com/11621a2effc185bf6ae4c7526c9db8cf435fd9b2.zip",coverURL:"https://cdn.beatsaver.com/11621a2effc185bf6ae4c7526c9db8cf435fd9b2.jpg",previewURL:"https://cdn.beatsaver.com/11621a2effc185bf6ae4c7526c9db8cf435fd9b2.mp3"}],createdAt:"2019-02-24T17:19:02Z",updatedAt:"2019-02-24T17:19:02Z",lastPublishedAt:"2019-02-24T17:19:02Z"},{id:"157",name:"Seagulls!(Stop it Now)",description:"Normal/Hard/Expert (though overall they should all be fairly easy) Thought this would be a fun, lighthearted song to do. Song by Bad Lip Reading. (as sung by Yoda Luke and R2...kind of)",uploader:{id:53109,name:"paynter3d",uniqueSet:!0,hash:"5cff0b7298cc5a672c84eb80",avatar:"https://www.gravatar.com/avatar/5cff0b7298cc5a672c84eb80?d=retro",type:"SIMPLE"},metadata:{bpm:120,duration:192,songName:"Seagulls!",songSubName:"(Stop It Now)",songAuthorName:"Bad Lip Reading",levelAuthorName:"paynter3d"},stats:{plays:0,downloads:2917,upvotes:1985,downvotes:55,score:.9253},uploaded:"2018-05-20T20:57:46Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"055e8f8f8fabefcf12bbb6c50e2f78d666d619bf",key:"157",state:"Published",createdAt:"2018-05-20T20:57:46Z",sageScore:3,diffs:[{njs:10,offset:0,notes:383,bombs:0,obstacles:37,nps:2.037,length:376,characteristic:"Standard",difficulty:"Normal",events:622,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:188,paritySummary:{errors:95,warns:61,resets:0}},{njs:10,offset:0,notes:460,bombs:0,obstacles:37,nps:2.447,length:376,characteristic:"Standard",difficulty:"Hard",events:622,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:188,paritySummary:{errors:116,warns:58,resets:0}},{njs:10,offset:0,notes:628,bombs:64,obstacles:37,nps:3.34,length:376,characteristic:"Standard",difficulty:"Expert",events:626,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:188,paritySummary:{errors:86,warns:105,resets:0}}],downloadURL:"https://cdn.beatsaver.com/055e8f8f8fabefcf12bbb6c50e2f78d666d619bf.zip",coverURL:"https://cdn.beatsaver.com/055e8f8f8fabefcf12bbb6c50e2f78d666d619bf.jpg",previewURL:"https://cdn.beatsaver.com/055e8f8f8fabefcf12bbb6c50e2f78d666d619bf.mp3"}],createdAt:"2018-05-20T20:57:46Z",updatedAt:"2018-05-20T20:57:46Z",lastPublishedAt:"2018-05-20T20:57:46Z"},{id:"1a0b9",name:"[Electro Swing Pack] Caravan Palace - Lone Digger",description:"Nixie Presents: Electro Swing Pack!\n\n10 electro swing songs with expert and expert+ diffs to make your booty swing!\n\nGet The Pack: \nhttps://bsaber.com/electro-swing-pack/\n\nMap Gameplay:\nhttps://youtu.be/DF_ZrKY3LfY\n\nComplete Pack Playthrough:\nhttps://youtu.be/yj9rw4MEh7s\n\nHeyya! After looking for some dancey electro swing maps, I noticed that there barely are any!\nSo I took matters into my own hands, learning mapping basically from scratch,\nscrapping my first failed attempts and then finally making a map that was good.\nI found it so fun that I ended up making 9 more maps,\nand fine tuned them with the help of the testplayers in BSMG,\nas well as the lovely curators from the bsaber discord.\n\nHuge thanks in particular to:\nMonstor, Bearly, Noxn, Bullet, Vaser888, Tocxx, Jafdy, Storm Knight and Pixelguy!\n\nIf you want to talk to me, here is my Discord:\nNixie.Korten#6944",uploader:{id:4286374,name:"nixiekorten",uniqueSet:!0,hash:"6096752e12772e0006e2f7e6",avatar:"https://cdn.beatsaver.com/avatar/840550221690699776.png",type:"DISCORD"},metadata:{bpm:124,duration:171,songName:"Lone Digger",songSubName:"",songAuthorName:"Caravan Palace",levelAuthorName:"Nixie.Korten"},stats:{plays:0,downloads:19552,upvotes:1165,downvotes:21,score:.925},uploaded:"2021-07-08T15:25:28.524Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"f89d7a02f16dbbe3c957fd56e35844ab7f23f532",key:"1a0b9",state:"Published",createdAt:"2021-07-08T15:25:28.524Z",sageScore:5,diffs:[{njs:16,offset:-.25,notes:434,bombs:0,obstacles:0,nps:2.611,length:343.5,characteristic:"Standard",difficulty:"Expert",events:1448,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:166.21,paritySummary:{errors:0,warns:0,resets:0}},{njs:19,offset:.25,notes:891,bombs:0,obstacles:4,nps:5.299,length:347.5,characteristic:"Standard",difficulty:"ExpertPlus",events:1448,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:168.145,paritySummary:{errors:0,warns:0,resets:0}}],downloadURL:"https://cdn.beatsaver.com/f89d7a02f16dbbe3c957fd56e35844ab7f23f532.zip",coverURL:"https://cdn.beatsaver.com/f89d7a02f16dbbe3c957fd56e35844ab7f23f532.jpg",previewURL:"https://cdn.beatsaver.com/f89d7a02f16dbbe3c957fd56e35844ab7f23f532.mp3"}],createdAt:"2021-07-08T15:25:28.524Z",updatedAt:"2021-07-08T15:25:28.524Z",lastPublishedAt:"2021-07-08T15:25:28.524Z"},{id:"5d24",name:"[Anniversary] Face My Fears - Hikaru Utadu & Skrillex [BennyDaBeast]",description:"Part of the Anniversary Song Pack",uploader:{id:37070,name:"anniversaryteam",uniqueSet:!0,hash:"5cff0b7798cc5a672c8565a3",avatar:"https://www.gravatar.com/avatar/5cff0b7798cc5a672c8565a3?d=retro",type:"SIMPLE"},metadata:{bpm:160,duration:212,songName:"Face My Fears",songSubName:"",songAuthorName:"Hikaru Utada & Skrillex",levelAuthorName:"BennyDaBeast"},stats:{plays:0,downloads:4932,upvotes:2031,downvotes:58,score:.925},uploaded:"2019-08-16T01:48:04.848Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"460fcbe6916bd64eb31ff65a03e4d46d4773e31c",key:"5d24",state:"Published",createdAt:"2019-08-16T01:48:04.848Z",sageScore:8,diffs:[{njs:10,offset:0,notes:390,bombs:0,obstacles:0,nps:1.912,length:544,characteristic:"Standard",difficulty:"Easy",events:2297,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:204,paritySummary:{errors:85,warns:29,resets:0}},{njs:10,offset:0,notes:455,bombs:0,obstacles:0,nps:2.23,length:544,characteristic:"Standard",difficulty:"Normal",events:2297,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:204,paritySummary:{errors:80,warns:29,resets:0}},{njs:12,offset:-1,notes:567,bombs:0,obstacles:0,nps:2.779,length:544,characteristic:"Standard",difficulty:"Hard",events:2298,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:204,paritySummary:{errors:88,warns:36,resets:0}},{njs:12,offset:-1,notes:776,bombs:0,obstacles:0,nps:3.804,length:544,characteristic:"Standard",difficulty:"Expert",events:2297,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:204,paritySummary:{errors:105,warns:60,resets:0}},{njs:15,offset:.4,notes:921,bombs:0,obstacles:0,nps:4.515,length:544,characteristic:"Standard",difficulty:"ExpertPlus",events:2297,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:204,paritySummary:{errors:102,warns:83,resets:0}}],downloadURL:"https://cdn.beatsaver.com/460fcbe6916bd64eb31ff65a03e4d46d4773e31c.zip",coverURL:"https://cdn.beatsaver.com/460fcbe6916bd64eb31ff65a03e4d46d4773e31c.jpg",previewURL:"https://cdn.beatsaver.com/460fcbe6916bd64eb31ff65a03e4d46d4773e31c.mp3"}],createdAt:"2019-08-16T01:48:04.848Z",updatedAt:"2019-08-16T01:48:04.848Z",lastPublishedAt:"2019-08-16T01:48:04.848Z"},{id:"269f",name:"Amusement Park - Keigo Hoashi [NieR: Automata]",description:"Expert Gameplay: https://www.youtube.com/watch?v=gOeGoxKR7fI&feature=youtu.be\r\nExpert and Expert+ are very similar, though Expert+ is a tad harder.\r\n\r\nSong by Keigo Hoashi as NieR:Automata OST",uploader:{id:4286005,name:"mandynasty",uniqueSet:!0,hash:"5cff0b7398cc5a672c84ffaa",avatar:"https://cdn.beatsaver.com/avatar/307589087030673408.png",type:"DISCORD"},metadata:{bpm:120,duration:266,songName:"Amusement Park",songSubName:"Keigo Hoashi",songAuthorName:"ManDynasty",levelAuthorName:"ManDynasty"},stats:{plays:0,downloads:3394,upvotes:1832,downvotes:49,score:.925},uploaded:"2018-12-18T15:57:22Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"00151f9ef33d55245bb7cfc9756e223b7183ff65",key:"269f",state:"Published",createdAt:"2018-12-18T15:57:22Z",sageScore:2,diffs:[{njs:9,offset:0,notes:396,bombs:0,obstacles:242,nps:1.571,length:504,characteristic:"Standard",difficulty:"Normal",events:1606,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:252,paritySummary:{errors:74,warns:23,resets:0}},{njs:10,offset:0,notes:528,bombs:0,obstacles:272,nps:2.095,length:504,characteristic:"Standard",difficulty:"Hard",events:1606,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:252,paritySummary:{errors:42,warns:49,resets:0}},{njs:14,offset:0,notes:888,bombs:0,obstacles:102,nps:3.524,length:504,characteristic:"Standard",difficulty:"Expert",events:1606,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:252,paritySummary:{errors:86,warns:77,resets:0}},{njs:14,offset:0,notes:931,bombs:0,obstacles:118,nps:3.588,length:519,characteristic:"Standard",difficulty:"ExpertPlus",events:1606,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:259.5,paritySummary:{errors:69,warns:56,resets:0}}],downloadURL:"https://cdn.beatsaver.com/00151f9ef33d55245bb7cfc9756e223b7183ff65.zip",coverURL:"https://cdn.beatsaver.com/00151f9ef33d55245bb7cfc9756e223b7183ff65.jpg",previewURL:"https://cdn.beatsaver.com/00151f9ef33d55245bb7cfc9756e223b7183ff65.mp3"}],createdAt:"2018-12-18T15:57:22Z",updatedAt:"2018-12-18T15:57:22Z",lastPublishedAt:"2018-12-18T15:57:22Z"},{id:"6ace",name:"Flower Dance - DJ Okawari",description:"There it is!!!! Hope you all enjoy this <3 \nCollabed with kuritsadbs on this map as he worked on the lights and he did amazing job on them! \nI might make 1 saber mode later on if i see that many liked this one :D\nCheck the map here: https://www.youtube.com/watch?v=vTPssZ0rKyI&feature=youtu.be",uploader:{id:1708,name:"layanmeta",uniqueSet:!0,hash:"5cff0b7698cc5a672c8539a1",avatar:"https://www.gravatar.com/avatar/5cff0b7698cc5a672c8539a1?d=retro",type:"SIMPLE"},metadata:{bpm:200,duration:238,songName:" Flower Dance",songSubName:"",songAuthorName:"DJ Okawari",levelAuthorName:"Layanmeta w/ KuritsaDBS"},stats:{plays:0,downloads:2467,upvotes:1257,downvotes:25,score:.9248},uploaded:"2019-10-19T17:05:33.835Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"5d4b7dfbc7370400f54f02b76568bacd8497b3e9",key:"6ace",state:"Published",createdAt:"2019-10-19T17:05:33.835Z",sageScore:8,diffs:[{njs:12,offset:0,notes:0,bombs:0,obstacles:0,nps:0,length:0,characteristic:"Standard",difficulty:"Easy",events:2030,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:0,paritySummary:{errors:0,warns:0,resets:0}},{njs:15,offset:.4,notes:1225,bombs:0,obstacles:70,nps:5.206,length:784.375,characteristic:"Standard",difficulty:"ExpertPlus",events:2030,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:235.313,paritySummary:{errors:12,warns:0,resets:0}}],downloadURL:"https://cdn.beatsaver.com/5d4b7dfbc7370400f54f02b76568bacd8497b3e9.zip",coverURL:"https://cdn.beatsaver.com/5d4b7dfbc7370400f54f02b76568bacd8497b3e9.jpg",previewURL:"https://cdn.beatsaver.com/5d4b7dfbc7370400f54f02b76568bacd8497b3e9.mp3"}],createdAt:"2019-10-19T17:05:33.835Z",updatedAt:"2019-10-19T17:05:33.835Z",lastPublishedAt:"2019-10-19T17:05:33.835Z"},{id:"e7cd",name:"[NoodleGames Vol.2] Last Surprise - Persona 5",description:"The Ramen Noodle group is back again to bring you a map pack full of our favorite video game soundtracks and game-inspired music!\n\nHere's one of my 4 Persona maps for the pack! Hope you enjoy.",uploader:{id:15368,name:"theab",uniqueSet:!0,hash:"5cff0b7698cc5a672c853a14",avatar:"https://www.gravatar.com/avatar/5cff0b7698cc5a672c853a14?d=retro",type:"SIMPLE"},metadata:{bpm:123,duration:210,songName:"Last Surprise",songSubName:"",songAuthorName:"Shoji Meguro",levelAuthorName:"Ab"},stats:{plays:0,downloads:5978,upvotes:1048,downvotes:17,score:.9247},uploaded:"2020-09-10T19:19:34.152Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"b5e4c4a65fa8c55a4c5a2b1d7681c31f301d5449",key:"e7cd",state:"Published",createdAt:"2020-09-10T19:19:34.152Z",sageScore:2,diffs:[{njs:13,offset:0,notes:650,bombs:0,obstacles:2,nps:3.173,length:420,characteristic:"Standard",difficulty:"Hard",events:3292,chroma:!0,me:!1,ne:!1,cinema:!1,seconds:204.878,paritySummary:{errors:12,warns:8,resets:0}},{njs:17,offset:-.2,notes:861,bombs:0,obstacles:0,nps:4.203,length:420,characteristic:"Standard",difficulty:"Expert",events:3292,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:204.878,paritySummary:{errors:8,warns:9,resets:0}},{njs:18,offset:-.2,notes:983,bombs:0,obstacles:7,nps:4.798,length:420,characteristic:"Standard",difficulty:"ExpertPlus",events:3250,chroma:!0,me:!1,ne:!1,cinema:!1,seconds:204.878,paritySummary:{errors:8,warns:8,resets:0}},{njs:16,offset:0,notes:0,bombs:0,obstacles:0,nps:0,length:0,characteristic:"Lightshow",difficulty:"ExpertPlus",events:3249,chroma:!0,me:!1,ne:!1,cinema:!1,seconds:0,paritySummary:{errors:0,warns:0,resets:0}}],downloadURL:"https://cdn.beatsaver.com/b5e4c4a65fa8c55a4c5a2b1d7681c31f301d5449.zip",coverURL:"https://cdn.beatsaver.com/b5e4c4a65fa8c55a4c5a2b1d7681c31f301d5449.jpg",previewURL:"https://cdn.beatsaver.com/b5e4c4a65fa8c55a4c5a2b1d7681c31f301d5449.mp3"}],createdAt:"2020-09-10T19:19:34.152Z",updatedAt:"2020-09-10T19:19:34.152Z",lastPublishedAt:"2020-09-10T19:19:34.152Z"},{id:"1a0b8",name:"[Electro Swing Pack] Wolfgang Lohr & The Swinghoppers - Party Like It's 1920",description:"Nixie Presents: Electro Swing Pack!\n\n10 electro swing songs with expert and expert+ diffs to make your booty swing!\n\nGet The Pack: \nhttps://bsaber.com/electro-swing-pack/\n\nMap Gameplay:\nhttps://youtu.be/ye22W_xrXnk\n\nComplete Pack Playthrough:\nhttps://youtu.be/yj9rw4MEh7s\n\nHeyya! After looking for some dancey electro swing maps, I noticed that there barely are any!\nSo I took matters into my own hands, learning mapping basically from scratch,\nscrapping my first failed attempts and then finally making a map that was good.\nI found it so fun that I ended up making 9 more maps,\nand fine tuned them with the help of the testplayers in BSMG,\nas well as the lovely curators from the bsaber discord.\n\nHuge thanks in particular to:\nMonstor, Bearly, Noxn, Bullet, Vaser888, Tocxx, Jafdy, Storm Knight and Pixelguy!\n\nIf you want to talk to me, here is my Discord:\nNixie.Korten#6944",uploader:{id:4286374,name:"nixiekorten",uniqueSet:!0,hash:"6096752e12772e0006e2f7e6",avatar:"https://cdn.beatsaver.com/avatar/840550221690699776.png",type:"DISCORD"},metadata:{bpm:120,duration:187,songName:"Party Like It's 1920",songSubName:"",songAuthorName:"The Swinghoppers & Wolfgang Lohr",levelAuthorName:"Nixie.Korten"},stats:{plays:0,downloads:13163,upvotes:670,downvotes:4,score:.9246},uploaded:"2021-07-08T15:25:28.451Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"973bab980b568e41b0a17a772e61377b01ef85ec",key:"1a0b8",state:"Published",createdAt:"2021-07-08T15:25:28.451Z",sageScore:4,diffs:[{njs:16,offset:-.5,notes:556,bombs:0,obstacles:0,nps:3.063,length:363,characteristic:"Standard",difficulty:"Expert",events:2057,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:181.5,paritySummary:{errors:0,warns:0,resets:0}},{njs:19,offset:.25,notes:850,bombs:0,obstacles:0,nps:4.683,length:363,characteristic:"Standard",difficulty:"ExpertPlus",events:2057,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:181.5,paritySummary:{errors:0,warns:0,resets:0}}],downloadURL:"https://cdn.beatsaver.com/973bab980b568e41b0a17a772e61377b01ef85ec.zip",coverURL:"https://cdn.beatsaver.com/973bab980b568e41b0a17a772e61377b01ef85ec.jpg",previewURL:"https://cdn.beatsaver.com/973bab980b568e41b0a17a772e61377b01ef85ec.mp3"}],createdAt:"2021-07-08T15:25:28.451Z",updatedAt:"2021-07-08T15:25:28.451Z",lastPublishedAt:"2021-07-08T15:25:28.451Z"},{id:"d60d",name:"[FUTURE FUNK PACK] Tokyo Chopp ft. Shiki​(​TMNS​)​ (Moe Shop Remix)",description:'FUTURE FUNK MAP PACK\n2 songs uploaded everyday through August 10th - 14th!\n\nThese last two Moe Shop songs brings a fresh spin on the Future Funk genre! This song is a Moe Shop remix of Hentai Dude\'s "Tokyo Chopp" and Tomoko Aran\'s "Midnight Pretenders" (1983.)\n\nThank you for playing! I hope you enjoyed the map pack!\n\nDM any feedback on Discord\nETAN#8341',uploader:{id:4235140,name:"etan",uniqueSet:!0,hash:"5cff0b7798cc5a672c855775",avatar:"https://cdn.beatsaver.com/avatar/136373107559497728.png",type:"DISCORD"},metadata:{bpm:117,duration:188,songName:"Tokyo Chopp ft. Shiki​(​TMNS​)​",songSubName:"(Moe Shop Remix)",songAuthorName:"Hentai Dude",levelAuthorName:"ETAN"},stats:{plays:0,downloads:6396,upvotes:1072,downvotes:18,score:.9246},uploaded:"2020-08-14T18:31:11.526Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"c82dfb89e2e5beb11c57c1d311e801f7d5dac978",key:"d60d",state:"Published",createdAt:"2020-08-14T18:31:11.526Z",sageScore:7,diffs:[{njs:10,offset:1.5,notes:155,bombs:0,obstacles:8,nps:.856,length:353,characteristic:"Standard",difficulty:"Easy",events:7757,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:181.026,paritySummary:{errors:29,warns:0,resets:0}},{njs:10,offset:1,notes:291,bombs:0,obstacles:8,nps:1.608,length:353,characteristic:"Standard",difficulty:"Normal",events:7757,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:181.026,paritySummary:{errors:3,warns:0,resets:0}},{njs:12,offset:.5,notes:377,bombs:0,obstacles:7,nps:2.056,length:357.5,characteristic:"Standard",difficulty:"Hard",events:7757,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:183.333,paritySummary:{errors:0,warns:0,resets:0}},{njs:14,offset:0,notes:565,bombs:0,obstacles:7,nps:3.082,length:357.5,characteristic:"Standard",difficulty:"Expert",events:7757,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:183.333,paritySummary:{errors:1,warns:0,resets:0}},{njs:17,offset:-.5,notes:765,bombs:0,obstacles:7,nps:4.173,length:357.5,characteristic:"Standard",difficulty:"ExpertPlus",events:7757,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:183.333,paritySummary:{errors:0,warns:0,resets:0}}],downloadURL:"https://cdn.beatsaver.com/c82dfb89e2e5beb11c57c1d311e801f7d5dac978.zip",coverURL:"https://cdn.beatsaver.com/c82dfb89e2e5beb11c57c1d311e801f7d5dac978.jpg",previewURL:"https://cdn.beatsaver.com/c82dfb89e2e5beb11c57c1d311e801f7d5dac978.mp3"}],createdAt:"2020-08-14T18:31:11.526Z",updatedAt:"2020-08-14T18:31:11.526Z",lastPublishedAt:"2020-08-14T18:31:11.526Z"},{id:"41e4",name:"Meant to Live - Switchfoot",description:"Easy, Normal, and Hard are all relatively easy, even for OST standards. Expert might have some tricky patterns, but the NPS is still well within OST standards so should still be manageable.\n\nhttps://youtu.be/zEK_j3aqn4g\n\nSo for my first song with fully English vocals, here's a classic from the early 2000's that you completely forgot about. I was actually sitting on this map for a while but decided to release it because I wanted a bit of variety.\n\nFollow me on Twitter u won't\nhttps://twitter.com/aggrogahu",uploader:{id:4284613,name:"aggrogahu",uniqueSet:!0,hash:"5cff0b7398cc5a672c84fdad",avatar:"https://cdn.beatsaver.com/avatar/158363872649150464.png",type:"DISCORD"},metadata:{bpm:150,duration:200,songName:"Meant to Live",songSubName:"Switchfoot",songAuthorName:"aggrogahu",levelAuthorName:"aggrogahu"},stats:{plays:0,downloads:3605,upvotes:937,downvotes:13,score:.9246},uploaded:"2019-03-30T02:30:46Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"d6675f644e47f84789a0376a746a2514e8e7b7ff",key:"41e4",state:"Published",createdAt:"2019-03-30T02:30:46Z",diffs:[{njs:10,offset:0,notes:155,bombs:0,obstacles:11,nps:.859,length:451.3,characteristic:"Standard",difficulty:"Easy",events:576,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:180.52,paritySummary:{errors:45,warns:4,resets:0}},{njs:11,offset:0,notes:262,bombs:0,obstacles:11,nps:1.451,length:451.3,characteristic:"Standard",difficulty:"Normal",events:576,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:180.52,paritySummary:{errors:60,warns:13,resets:0}},{njs:10,offset:0,notes:408,bombs:0,obstacles:46,nps:2.26,length:451.3,characteristic:"Standard",difficulty:"Hard",events:576,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:180.52,paritySummary:{errors:50,warns:29,resets:0}},{njs:12,offset:0,notes:630,bombs:0,obstacles:53,nps:3.49,length:451.3,characteristic:"Standard",difficulty:"Expert",events:576,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:180.52,paritySummary:{errors:41,warns:29,resets:0}}],downloadURL:"https://cdn.beatsaver.com/d6675f644e47f84789a0376a746a2514e8e7b7ff.zip",coverURL:"https://cdn.beatsaver.com/d6675f644e47f84789a0376a746a2514e8e7b7ff.jpg",previewURL:"https://cdn.beatsaver.com/d6675f644e47f84789a0376a746a2514e8e7b7ff.mp3"}],createdAt:"2019-03-30T02:30:46Z",updatedAt:"2019-03-30T02:30:46Z",lastPublishedAt:"2019-03-30T02:30:46Z"},{id:"7c0b",name:"[Bloq Busters Vol. 2] Au5 & Fractal - Smoke",description:"Expert+ Preview: https://www.youtube.com/watch?v=_mJXl15vv1c\n\nA sick song from their Secret Weapon EP! I hope I did it justice with this mapping.\n\nThis map is part of the Bloq Busters Vol. 2: Melodic Dubstep map pack comprised of maps from several mappers featuring artists such as Seven Lions, Jason Ross, Au5, Warriyo, and more! Grab it here: https://bsaber.com/bloq-busters-vol-2-melodic-dubstep/\n\nComments? Like it? Hate it? Let me know on Discord @Bloodcloak#5725!",uploader:{id:71661,name:"bloodcloak",uniqueSet:!0,hash:"5cff0b7698cc5a672c8551d3",avatar:"https://cdn.beatsaver.com/avatar/205707707187986442.png",type:"DISCORD"},metadata:{bpm:128,duration:302,songName:"Smoke",songSubName:"",songAuthorName:"Au5 & Fractal",levelAuthorName:"Bloodcloak"},stats:{plays:0,downloads:2132,upvotes:701,downvotes:5,score:.9245},uploaded:"2020-01-03T22:50:59.278Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"0bc6562a0bde3a933d656a514c67eeec88a315df",key:"7c0b",state:"Published",createdAt:"2020-01-03T22:50:59.278Z",sageScore:4,diffs:[{njs:12,offset:.6,notes:687,bombs:0,obstacles:245,nps:2.351,length:623.5,characteristic:"Standard",difficulty:"Hard",events:4233,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:292.266,paritySummary:{errors:2,warns:2,resets:0}},{njs:16,offset:-.1,notes:1074,bombs:0,obstacles:135,nps:3.675,length:623.5,characteristic:"Standard",difficulty:"Expert",events:4233,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:292.266,paritySummary:{errors:3,warns:3,resets:0}},{njs:20,offset:.6,notes:1188,bombs:0,obstacles:122,nps:4.065,length:623.5,characteristic:"Standard",difficulty:"ExpertPlus",events:4227,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:292.266,paritySummary:{errors:1,warns:1,resets:0}}],downloadURL:"https://cdn.beatsaver.com/0bc6562a0bde3a933d656a514c67eeec88a315df.zip",coverURL:"https://cdn.beatsaver.com/0bc6562a0bde3a933d656a514c67eeec88a315df.jpg",previewURL:"https://cdn.beatsaver.com/0bc6562a0bde3a933d656a514c67eeec88a315df.mp3"}],createdAt:"2020-01-03T22:50:59.278Z",updatedAt:"2020-01-03T22:50:59.278Z",lastPublishedAt:"2020-01-03T22:50:59.278Z"},{id:"5e05",name:"Dire Straits - Money For Nothing",description:"",uploader:{id:4285018,name:"majorpickle",uniqueSet:!0,hash:"5cff0b7398cc5a672c84f792",avatar:"https://cdn.beatsaver.com/avatar/450358937657671680.png",type:"DISCORD"},metadata:{bpm:136,duration:243,songName:"Money For Nothing",songSubName:"",songAuthorName:"Dire Straits",levelAuthorName:"Majorpickle"},stats:{plays:0,downloads:2691,upvotes:1068,downvotes:18,score:.9245},uploaded:"2019-08-20T03:07:14.232Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"b81b682921b291b731111f9a29d7bf9353ff1365",key:"5e05",state:"Published",createdAt:"2019-08-20T03:07:14.232Z",sageScore:6,diffs:[{njs:12,offset:0,notes:851,bombs:0,obstacles:60,nps:3.8,length:507.656,characteristic:"Standard",difficulty:"Expert",events:2256,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:223.966,paritySummary:{errors:39,warns:30,resets:0}}],downloadURL:"https://cdn.beatsaver.com/b81b682921b291b731111f9a29d7bf9353ff1365.zip",coverURL:"https://cdn.beatsaver.com/b81b682921b291b731111f9a29d7bf9353ff1365.jpg",previewURL:"https://cdn.beatsaver.com/b81b682921b291b731111f9a29d7bf9353ff1365.mp3"}],createdAt:"2019-08-20T03:07:14.232Z",updatedAt:"2019-08-20T03:07:14.232Z",lastPublishedAt:"2019-08-20T03:07:14.232Z"},{id:"a83b",name:"BAD APPLE!! [Punk Goes Pop Vol.2] - RichaadEB ft. Cristina Vee",description:"BAD APPLE!! is a metal cover by RichaadEB featuring voice actor and singer, Cristina Vee. This song was originally composed by Jun'ya Ota & Masayoshi Minoshima with vocals by Nomico.",uploader:{id:58338,name:"Joetastic",uniqueSet:!0,hash:"5cff0b7498cc5a672c85050e",avatar:"https://cdn.beatsaver.com/avatar/227767566402191360.png",type:"DISCORD"},metadata:{bpm:138,duration:301,songName:"BAD APPLE!!",songSubName:"ft. Cristina Vee",songAuthorName:"RichaadEB",levelAuthorName:"Joetastic"},stats:{plays:0,downloads:5636,upvotes:1476,downvotes:35,score:.9242},uploaded:"2020-05-20T07:20:11.426Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"57d1004ac047bd554080c5bfdd6908743ebb9fd2",key:"a83b",state:"Published",createdAt:"2020-05-20T07:20:11.426Z",sageScore:3,diffs:[{njs:16,offset:0,notes:1649,bombs:0,obstacles:78,nps:5.644,length:672,characteristic:"Standard",difficulty:"ExpertPlus",events:9915,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:292.174,paritySummary:{errors:8,warns:13,resets:0}}],downloadURL:"https://cdn.beatsaver.com/57d1004ac047bd554080c5bfdd6908743ebb9fd2.zip",coverURL:"https://cdn.beatsaver.com/57d1004ac047bd554080c5bfdd6908743ebb9fd2.jpg",previewURL:"https://cdn.beatsaver.com/57d1004ac047bd554080c5bfdd6908743ebb9fd2.mp3"}],createdAt:"2020-05-20T07:20:11.426Z",updatedAt:"2020-05-20T07:20:11.426Z",lastPublishedAt:"2020-05-20T07:20:11.426Z"},{id:"8b81",name:"Stonebank - To The Top",description:"https://www.youtube.com/watch?v=2DwhNw_pGrg",uploader:{id:12996,name:"rustic",uniqueSet:!0,hash:"5cff0b7298cc5a672c84e8c4",avatar:"https://www.gravatar.com/avatar/5cff0b7298cc5a672c84e8c4?d=retro",type:"SIMPLE"},metadata:{bpm:128,duration:187,songName:"To The Top",songSubName:"",songAuthorName:"Stonebank",levelAuthorName:"Rustic"},stats:{plays:0,downloads:1287,upvotes:897,downvotes:12,score:.9242},uploaded:"2020-02-28T15:53:21.930Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"7afc56e020bb12f1e91dc99b1107df830299cc98",key:"8b81",state:"Published",createdAt:"2020-02-28T15:53:21.930Z",sageScore:5,diffs:[{njs:20,offset:1,notes:491,bombs:0,obstacles:2922,nps:2.942,length:356,characteristic:"Standard",difficulty:"Expert",events:5581,chroma:!1,me:!0,ne:!1,cinema:!1,seconds:166.875,paritySummary:{errors:0,warns:0,resets:0}}],downloadURL:"https://cdn.beatsaver.com/7afc56e020bb12f1e91dc99b1107df830299cc98.zip",coverURL:"https://cdn.beatsaver.com/7afc56e020bb12f1e91dc99b1107df830299cc98.jpg",previewURL:"https://cdn.beatsaver.com/7afc56e020bb12f1e91dc99b1107df830299cc98.mp3"}],createdAt:"2020-02-28T15:53:21.930Z",updatedAt:"2020-02-28T15:53:21.930Z",lastPublishedAt:"2020-02-28T15:53:21.930Z"},{id:"1c00",name:"Chop Suey - System of a Down",description:"4th map. Special thanks to Kolezan for doing the lighting and helping me out with the audio on this one. He did a great job. Also thanks to Crankor, TurtleSquared, and all my other play testers for multiple play tests and a lot of good feedback. Also this map would not have been possible without squeaksies' MediocreMapper!\nTIPS:\n\n(Expert/Expert+) In the final flow pattern in the last slow section of the song, the corner crouch is meant to make you do a sort of side lunge with that lunging side's saber swinging out wide behind you for balance. I have found that to be the smoothest flow, though it's not technically necessary.\n\n(Expert+ only) The \"climax\" point of each pattern in the ending flow is made to be an optional behind-the-back cross slash. You'll know it by the dotted cubes in that section. The backslash hand hits the dotted cubes. This move is fun but may take some practice to get down. (Hint: keep your eye on the top diagonal cube.)\n\nSwing those arms for the big hits.\n\nhttps://youtu.be/6NJh98lDJVo",uploader:{id:27595,name:"baxter395",uniqueSet:!0,hash:"5cff0b7598cc5a672c852f7b",avatar:"https://www.gravatar.com/avatar/5cff0b7598cc5a672c852f7b?d=retro",type:"SIMPLE"},metadata:{bpm:127,duration:204,songName:"Chop Suey",songSubName:"System of a Down",songAuthorName:"baxter395",levelAuthorName:"baxter395"},stats:{plays:0,downloads:12175,upvotes:8010,downvotes:385,score:.9242},uploaded:"2018-10-25T00:30:35Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"1b6f9e844d81ff0f6ee6feed62331a3d229be2e8",key:"1c00",state:"Published",createdAt:"2018-10-25T00:30:35Z",sageScore:-2,diffs:[{njs:10,offset:0,notes:497,bombs:0,obstacles:11,nps:2.601,length:404.463,characteristic:"Standard",difficulty:"Normal",events:1156,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:191.085,paritySummary:{errors:75,warns:56,resets:0}},{njs:11,offset:0,notes:687,bombs:0,obstacles:34,nps:3.595,length:404.463,characteristic:"Standard",difficulty:"Hard",events:1156,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:191.085,paritySummary:{errors:57,warns:89,resets:0}},{njs:12,offset:0,notes:804,bombs:0,obstacles:62,nps:4.208,length:404.463,characteristic:"Standard",difficulty:"Expert",events:1156,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:191.085,paritySummary:{errors:64,warns:100,resets:0}},{njs:13,offset:0,notes:842,bombs:0,obstacles:54,nps:4.406,length:404.463,characteristic:"Standard",difficulty:"ExpertPlus",events:1156,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:191.085,paritySummary:{errors:58,warns:110,resets:0}}],downloadURL:"https://cdn.beatsaver.com/1b6f9e844d81ff0f6ee6feed62331a3d229be2e8.zip",coverURL:"https://cdn.beatsaver.com/1b6f9e844d81ff0f6ee6feed62331a3d229be2e8.jpg",previewURL:"https://cdn.beatsaver.com/1b6f9e844d81ff0f6ee6feed62331a3d229be2e8.mp3"}],createdAt:"2018-10-25T00:30:35Z",updatedAt:"2018-10-25T00:30:35Z",lastPublishedAt:"2018-10-25T00:30:35Z"},{id:"b724",name:"Falling - Dropgun x Asketa & Natan Chaim",description:"reupload #1 - improved the difficulty spread to not have an extreme jump between the Expert and Expert+ slot\n\nOnly some of the lower diffs changed on here, the E+ slot (Rising) is still the same as I got very positive feedback on that diff which I'm very happy about <3\nThe diff spread should be better now, so it is hopefully more enjoyable for all skill levels whenever it gets ranked.\n\noriginal description:\nhaha lyrics go brrrr\njust a little bit though\n\nalso I lighted manually which I haven't done for an eternity, hope you don't go blind or something\n\nbig thank you to Skeelie for modding this :)\n\nTeuflum#5982 for any feedback on discord.",uploader:{id:68740,name:"Teuflum",uniqueSet:!0,hash:"5cff0b7498cc5a672c851a6b",avatar:"https://cdn.beatsaver.com/avatar/114706869460664326.png",type:"DISCORD"},metadata:{bpm:126,duration:194,songName:"Falling",songSubName:"",songAuthorName:"Dropgun x Asketa & Natan Chaim",levelAuthorName:"Teuflum"},stats:{plays:0,downloads:8962,upvotes:3035,downvotes:109,score:.9241},uploaded:"2020-06-28T11:22:49.373Z",automapper:!1,ranked:!0,qualified:!1,versions:[{hash:"2dddd6672560cb2c1d4c689ff31b5ea58ef1641e",key:"b724",state:"Published",createdAt:"2020-06-28T11:22:49.373Z",sageScore:7,diffs:[{njs:12,offset:.5,notes:454,bombs:0,obstacles:65,nps:2.432,length:392,characteristic:"Standard",difficulty:"Easy",events:9228,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:186.667,paritySummary:{errors:12,warns:2,resets:0},stars:1.35},{njs:14,offset:0,notes:672,bombs:12,obstacles:65,nps:3.6,length:392,characteristic:"Standard",difficulty:"Normal",events:9228,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:186.667,paritySummary:{errors:0,warns:0,resets:4},stars:2.28},{njs:17,offset:-.4,notes:973,bombs:20,obstacles:65,nps:5.213,length:392,characteristic:"Standard",difficulty:"Hard",events:9228,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:186.667,paritySummary:{errors:0,warns:0,resets:2},stars:4.51},{njs:20,offset:.325,notes:1297,bombs:16,obstacles:39,nps:6.948,length:392,characteristic:"Standard",difficulty:"Expert",events:9228,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:186.667,paritySummary:{errors:0,warns:0,resets:2},stars:5.65},{njs:22,offset:.1,notes:1483,bombs:16,obstacles:39,nps:7.945,length:392,characteristic:"Standard",difficulty:"ExpertPlus",events:9228,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:186.667,paritySummary:{errors:2,warns:0,resets:4},stars:7.83},{njs:69,offset:0,notes:0,bombs:0,obstacles:0,nps:0,length:0,characteristic:"Lightshow",difficulty:"Easy",events:9228,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:0,paritySummary:{errors:0,warns:0,resets:0}}],downloadURL:"https://cdn.beatsaver.com/2dddd6672560cb2c1d4c689ff31b5ea58ef1641e.zip",coverURL:"https://cdn.beatsaver.com/2dddd6672560cb2c1d4c689ff31b5ea58ef1641e.jpg",previewURL:"https://cdn.beatsaver.com/2dddd6672560cb2c1d4c689ff31b5ea58ef1641e.mp3"}],createdAt:"2020-06-28T11:22:49.373Z",updatedAt:"2021-09-20T15:01:27.178739Z",lastPublishedAt:"2020-06-28T11:22:49.373Z"},{id:"7e92",name:"Adventure of a Lifetime - Coldplay",description:"This song is one that i really love. Even though its different from most of the maps i posted so far, i still mapped it anyway because i like it.\n\nAll difficulties included, Expert+ is sort of on the lower end of expert+ maps.\n\nThanks to Helen Carnate, Sorukun, and Kolezan for helping me playtest the map! \n\nHave fun going on the Adventure of a Lifetime!",uploader:{id:4284197,name:"timeweaver",uniqueSet:!0,hash:"5d47d586c5301900060b2f6c",avatar:"https://cdn.beatsaver.com/avatar/607399708121366529.png",type:"DISCORD"},metadata:{bpm:112,duration:264,songName:"Adventure of a Lifetime",songSubName:"",songAuthorName:"Coldplay",levelAuthorName:"Timeweaver"},stats:{plays:0,downloads:4599,upvotes:1352,downvotes:30,score:.9241},uploaded:"2020-01-15T05:33:28.055Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"cbfe28de7f63634096dd8ef34648753147f3f65d",key:"7e92",state:"Published",createdAt:"2020-01-15T05:33:28.055Z",sageScore:6,diffs:[{njs:10,offset:1,notes:301,bombs:0,obstacles:45,nps:1.232,length:456,characteristic:"Standard",difficulty:"Easy",events:4100,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:244.286,paritySummary:{errors:61,warns:34,resets:0}},{njs:10,offset:1,notes:467,bombs:0,obstacles:48,nps:1.91,length:456.5,characteristic:"Standard",difficulty:"Normal",events:4100,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:244.554,paritySummary:{errors:65,warns:20,resets:0}},{njs:12,offset:.5,notes:691,bombs:0,obstacles:41,nps:2.826,length:456.5,characteristic:"Standard",difficulty:"Hard",events:4100,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:244.554,paritySummary:{errors:14,warns:10,resets:0}},{njs:15,offset:0,notes:1069,bombs:0,obstacles:42,nps:4.241,length:470.5,characteristic:"Standard",difficulty:"Expert",events:4100,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:252.054,paritySummary:{errors:4,warns:4,resets:0}},{njs:16,offset:-.25,notes:1199,bombs:0,obstacles:18,nps:4.752,length:471,characteristic:"Standard",difficulty:"ExpertPlus",events:4100,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:252.321,paritySummary:{errors:5,warns:0,resets:0}}],downloadURL:"https://cdn.beatsaver.com/cbfe28de7f63634096dd8ef34648753147f3f65d.zip",coverURL:"https://cdn.beatsaver.com/cbfe28de7f63634096dd8ef34648753147f3f65d.jpg",previewURL:"https://cdn.beatsaver.com/cbfe28de7f63634096dd8ef34648753147f3f65d.mp3"}],createdAt:"2020-01-15T05:33:28.055Z",updatedAt:"2020-01-15T05:33:28.055Z",lastPublishedAt:"2020-01-15T05:33:28.055Z"},{id:"6ed4",name:"Sayuri - Koukai no Uta [Boku no Hero Academia Ending 6]",description:"sayuri slaps\nmainstream anime mapper AYAYA\n\nBPM 180 | Length 1:54\nExpert+\nExpert\nHard\n\nThanks Monteblanco for testplaying\n\nhf\n\nDM any feedback on Discord\nETAN#8341",uploader:{id:4235140,name:"etan",uniqueSet:!0,hash:"5cff0b7798cc5a672c855775",avatar:"https://cdn.beatsaver.com/avatar/136373107559497728.png",type:"DISCORD"},metadata:{bpm:180,duration:115,songName:"Koukai no Uta",songSubName:"",songAuthorName:"Sayuri",levelAuthorName:"ETAN"},stats:{plays:0,downloads:11086,upvotes:1208,downvotes:24,score:.9241},uploaded:"2019-11-08T22:57:13.632Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"108f939f6a5a2c2f02e4e1e7c9a9bf46345681a4",key:"6ed4",state:"Published",createdAt:"2019-11-08T22:57:13.632Z",sageScore:5,diffs:[{njs:13,offset:0,notes:250,bombs:0,obstacles:0,nps:2.262,length:331.5,characteristic:"Standard",difficulty:"Hard",events:5351,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:110.5,paritySummary:{errors:0,warns:0,resets:0}},{njs:15,offset:.5,notes:365,bombs:0,obstacles:0,nps:3.303,length:331.5,characteristic:"Standard",difficulty:"Expert",events:5351,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:110.5,paritySummary:{errors:0,warns:0,resets:0}},{njs:18,offset:.25,notes:518,bombs:0,obstacles:0,nps:4.688,length:331.5,characteristic:"Standard",difficulty:"ExpertPlus",events:5351,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:110.5,paritySummary:{errors:0,warns:0,resets:0}}],downloadURL:"https://cdn.beatsaver.com/108f939f6a5a2c2f02e4e1e7c9a9bf46345681a4.zip",coverURL:"https://cdn.beatsaver.com/108f939f6a5a2c2f02e4e1e7c9a9bf46345681a4.jpg",previewURL:"https://cdn.beatsaver.com/108f939f6a5a2c2f02e4e1e7c9a9bf46345681a4.mp3"}],createdAt:"2019-11-08T22:57:13.632Z",updatedAt:"2019-11-08T22:57:13.632Z",lastPublishedAt:"2019-11-08T22:57:13.632Z"},{id:"587c",name:"Cracks (Flux Pavilion Remix)",description:"*reuploaded due to an error with the Lightshow Difficulty and Beatsaver*\n\nAnother collab! This one is meant to be more geared towards playability, (and possibly even rankability) so I hope you like it.\n\nIt also has Chroma lighting courtesy of Aeroluna. He's awesome for doing the lights, go check out his stuff too!\n\nCracks (Flux Pavilion Remix) - Belle Humble, Freestylers | 140 BPM | Hard, Expert, Expert+ | Fully Mapped with Chroma Lighting by Aeroluna\n\nHere's a video of the lights with Chroma on: https://youtu.be/iwFcR5YmYwg",uploader:{id:17131,name:"tranquillizeme",uniqueSet:!0,hash:"5cff0b7798cc5a672c85609e",avatar:"https://www.gravatar.com/avatar/5cff0b7798cc5a672c85609e?d=retro",type:"SIMPLE"},metadata:{bpm:140,duration:143,songName:"Cracks",songSubName:"(Flux Pavilion Remix)",songAuthorName:"Various Artists",levelAuthorName:"TranquillizeMe"},stats:{plays:0,downloads:1454,upvotes:1082,downvotes:19,score:.9241},uploaded:"2019-07-23T01:37:18.104Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"51835f468381d630b48c36da70d2c2ce700bb274",key:"587c",state:"Published",createdAt:"2019-07-23T01:37:18.104Z",sageScore:6,diffs:[{njs:13,offset:1,notes:364,bombs:224,obstacles:30,nps:2.705,length:314,characteristic:"Standard",difficulty:"Hard",events:11202,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:134.571,paritySummary:{errors:18,warns:16,resets:0}},{njs:16,offset:0,notes:506,bombs:228,obstacles:14,nps:3.76,length:314,characteristic:"Standard",difficulty:"Expert",events:11202,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:134.571,paritySummary:{errors:9,warns:8,resets:2}},{njs:18,offset:0,notes:778,bombs:52,obstacles:18,nps:5.781,length:314,characteristic:"Standard",difficulty:"ExpertPlus",events:11202,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:134.571,paritySummary:{errors:2,warns:0,resets:13}}],downloadURL:"https://cdn.beatsaver.com/51835f468381d630b48c36da70d2c2ce700bb274.zip",coverURL:"https://cdn.beatsaver.com/51835f468381d630b48c36da70d2c2ce700bb274.jpg",previewURL:"https://cdn.beatsaver.com/51835f468381d630b48c36da70d2c2ce700bb274.mp3"}],createdAt:"2019-07-23T01:37:18.104Z",updatedAt:"2019-07-23T01:37:18.104Z",lastPublishedAt:"2019-07-23T01:37:18.104Z"},{id:"d35b",name:"[FUTURE FUNK PACK] Remember Summer Days (MACROSS 82-99 Short Ver.)",description:"FUTURE FUNK MAP PACK\n2 songs uploaded everyday through August 10th - 14th!\n\nThese first two songs are originally sung by Anri, one of my favorite City Pop artist. \n\nThis version of Remember Summer Days is a short edit I made from MACROSS 82-99's bootleg version. The original song is waaay longer\n\nPlease look forward to the upcoming maps!\n\nDM any feedback on Discord\nETAN#8341",uploader:{id:4235140,name:"etan",uniqueSet:!0,hash:"5cff0b7798cc5a672c855775",avatar:"https://cdn.beatsaver.com/avatar/136373107559497728.png",type:"DISCORD"},metadata:{bpm:110,duration:171,songName:"Remember Summer Days",songSubName:"(MACROSS 82-99 Short Ver.)",songAuthorName:"Anri",levelAuthorName:"ETAN"},stats:{plays:0,downloads:4497,upvotes:775,downvotes:8,score:.9239},uploaded:"2020-08-10T17:48:45.792Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"bb49a02cd1760f45d8c5104fc8881e61ab00b29f",key:"d35b",state:"Published",createdAt:"2020-08-10T17:48:45.792Z",sageScore:8,diffs:[{njs:10,offset:1,notes:154,bombs:0,obstacles:11,nps:.941,length:300.062,characteristic:"Standard",difficulty:"Easy",events:3539,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:163.67,paritySummary:{errors:32,warns:2,resets:0}},{njs:10,offset:1,notes:220,bombs:0,obstacles:11,nps:1.344,length:300.062,characteristic:"Standard",difficulty:"Normal",events:3539,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:163.67,paritySummary:{errors:2,warns:4,resets:0}},{njs:12,offset:.5,notes:417,bombs:0,obstacles:10,nps:2.506,length:305.125,characteristic:"Standard",difficulty:"Hard",events:3539,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:166.432,paritySummary:{errors:0,warns:0,resets:0}},{njs:14,offset:0,notes:593,bombs:0,obstacles:10,nps:3.563,length:305.125,characteristic:"Standard",difficulty:"Expert",events:3539,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:166.432,paritySummary:{errors:0,warns:0,resets:0}},{njs:17,offset:.5,notes:752,bombs:0,obstacles:10,nps:4.518,length:305.125,characteristic:"Standard",difficulty:"ExpertPlus",events:3539,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:166.432,paritySummary:{errors:0,warns:1,resets:0}}],downloadURL:"https://cdn.beatsaver.com/bb49a02cd1760f45d8c5104fc8881e61ab00b29f.zip",coverURL:"https://cdn.beatsaver.com/bb49a02cd1760f45d8c5104fc8881e61ab00b29f.jpg",previewURL:"https://cdn.beatsaver.com/bb49a02cd1760f45d8c5104fc8881e61ab00b29f.mp3"}],createdAt:"2020-08-10T17:48:45.792Z",updatedAt:"2020-08-10T17:48:45.792Z",lastPublishedAt:"2020-08-10T17:48:45.792Z"},{id:"5d1f",name:"Weight of the World (JVNA Remix) - NieR: Automata",description:"145 BPM - 4:27 Runtime\n\nStandard\nHard - 675 Notes\nExpert - 885 Notes\nExpert+ - 1169 Notes\n\nOne Saber\nExpert - 644 Notes\nExpert+ - 847 Notes\n\nLawless\nEnding E (unnerfed) - 2109 Walls\nEnding E - 1500 Walls\n\nGameplay: Coming soon",uploader:{id:4284981,name:"skylerwallace",uniqueSet:!0,hash:"5cff0b7298cc5a672c84ea67",avatar:"https://cdn.beatsaver.com/avatar/398344856868487168.png",type:"DISCORD"},metadata:{bpm:145,duration:268,songName:"Weight of the World",songSubName:"NieR:Automata",songAuthorName:"JVNA",levelAuthorName:"Skyler Wallace & Excession"},stats:{plays:0,downloads:4937,upvotes:2801,downvotes:98,score:.9239},uploaded:"2019-08-15T23:12:42.493Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"6b4e0f6a698973ca55754d057b40463063ae59d8",key:"5d1f",state:"Published",createdAt:"2019-08-15T23:12:42.493Z",sageScore:6,diffs:[{njs:13,offset:1,notes:675,bombs:6,obstacles:45,nps:2.559,length:637.5,characteristic:"Standard",difficulty:"Hard",events:12404,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:263.793,paritySummary:{errors:115,warns:44,resets:3}},{njs:15,offset:.25,notes:885,bombs:6,obstacles:49,nps:3.355,length:637.5,characteristic:"Standard",difficulty:"Expert",events:12404,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:263.793,paritySummary:{errors:67,warns:39,resets:5}},{njs:17,offset:0,notes:1169,bombs:5,obstacles:58,nps:4.432,length:637.5,characteristic:"Standard",difficulty:"ExpertPlus",events:12404,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:263.793,paritySummary:{errors:89,warns:78,resets:1}},{njs:13,offset:1,notes:644,bombs:6,obstacles:45,nps:2.441,length:637.5,characteristic:"OneSaber",difficulty:"Expert",events:12404,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:263.793,paritySummary:{errors:41,warns:47,resets:3}},{njs:15,offset:.25,notes:847,bombs:6,obstacles:49,nps:3.211,length:637.5,characteristic:"OneSaber",difficulty:"ExpertPlus",events:12404,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:263.793,paritySummary:{errors:59,warns:71,resets:0}},{njs:17,offset:0,notes:1169,bombs:5,obstacles:2108,nps:4.432,length:637.5,characteristic:"Lawless",difficulty:"Expert",events:12404,chroma:!1,me:!0,ne:!1,cinema:!1,seconds:263.793,paritySummary:{errors:89,warns:78,resets:1}},{njs:17,offset:0,notes:1169,bombs:5,obstacles:1500,nps:4.432,length:637.5,characteristic:"Lawless",difficulty:"ExpertPlus",events:12404,chroma:!1,me:!0,ne:!1,cinema:!1,seconds:263.793,paritySummary:{errors:89,warns:78,resets:1}}],downloadURL:"https://cdn.beatsaver.com/6b4e0f6a698973ca55754d057b40463063ae59d8.zip",coverURL:"https://cdn.beatsaver.com/6b4e0f6a698973ca55754d057b40463063ae59d8.jpg",previewURL:"https://cdn.beatsaver.com/6b4e0f6a698973ca55754d057b40463063ae59d8.mp3"}],createdAt:"2019-08-15T23:12:42.493Z",updatedAt:"2019-08-15T23:12:42.493Z",lastPublishedAt:"2019-08-15T23:12:42.493Z"},{id:"14aa",name:"Dummy! - Undertale OST (Toby Fox)",description:"Decided to make an Undertale map, original song by Toby Fox.",uploader:{id:14891,name:"elijoria",uniqueSet:!0,hash:"5cff0b7398cc5a672c84fbf5",avatar:"https://www.gravatar.com/avatar/5cff0b7398cc5a672c84fbf5?d=retro",type:"SIMPLE"},metadata:{bpm:125,duration:146,songName:"Dummy!",songSubName:"Undertale OST",songAuthorName:"Toby Fox (Mapped By Elijoria)",levelAuthorName:"Elijoria"},stats:{plays:0,downloads:3830,upvotes:2082,downvotes:63,score:.9239},uploaded:"2018-09-11T23:43:18Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"b9d323fb01bfdd9ece0702256416b44ce1026ec6",key:"14aa",state:"Published",createdAt:"2018-09-11T23:43:18Z",sageScore:4,diffs:[{njs:10,offset:0,notes:374,bombs:0,obstacles:49,nps:2.589,length:301,characteristic:"Standard",difficulty:"Normal",events:684,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:144.48,paritySummary:{errors:102,warns:50,resets:0}},{njs:10,offset:0,notes:515,bombs:0,obstacles:53,nps:3.565,length:301,characteristic:"Standard",difficulty:"Hard",events:684,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:144.48,paritySummary:{errors:89,warns:64,resets:0}},{njs:10,offset:0,notes:610,bombs:26,obstacles:53,nps:4.223,length:301,characteristic:"Standard",difficulty:"Expert",events:684,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:144.48,paritySummary:{errors:88,warns:67,resets:4}}],downloadURL:"https://cdn.beatsaver.com/b9d323fb01bfdd9ece0702256416b44ce1026ec6.zip",coverURL:"https://cdn.beatsaver.com/b9d323fb01bfdd9ece0702256416b44ce1026ec6.jpg",previewURL:"https://cdn.beatsaver.com/b9d323fb01bfdd9ece0702256416b44ce1026ec6.mp3"}],createdAt:"2018-09-11T23:43:18Z",updatedAt:"2018-09-11T23:43:18Z",lastPublishedAt:"2018-09-11T23:43:18Z"},{id:"acf",name:"EC2 - Prototyperaptor - Still Waiting",description:"Expert / Hard\r\nPart of the Electric City 2 song pack\r\nhttps://youtu.be/uCekFFk_nWA?t=4m29s",uploader:{id:12996,name:"rustic",uniqueSet:!0,hash:"5cff0b7298cc5a672c84e8c4",avatar:"https://www.gravatar.com/avatar/5cff0b7298cc5a672c84e8c4?d=retro",type:"SIMPLE"},metadata:{bpm:125,duration:286,songName:"EC2 - Still Waiting",songSubName:"Prototyperaptor",songAuthorName:"Rustic",levelAuthorName:"rustic"},stats:{plays:0,downloads:4651,upvotes:1935,downvotes:56,score:.9239},uploaded:"2018-07-20T22:07:52Z",automapper:!1,ranked:!0,qualified:!1,versions:[{hash:"32ae684f553e7fa90d1e5325bd54581c0afd37fa",key:"acf",state:"Published",createdAt:"2018-07-20T22:07:52Z",sageScore:5,diffs:[{njs:10,offset:0,notes:604,bombs:0,obstacles:19,nps:2.192,length:572,characteristic:"Standard",difficulty:"Hard",events:2545,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:274.56,paritySummary:{errors:7,warns:33,resets:0},stars:1.18},{njs:11,offset:0,notes:902,bombs:0,obstacles:35,nps:3.274,length:572,characteristic:"Standard",difficulty:"Expert",events:2545,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:274.56,paritySummary:{errors:19,warns:65,resets:0},stars:1.99}],downloadURL:"https://cdn.beatsaver.com/32ae684f553e7fa90d1e5325bd54581c0afd37fa.zip",coverURL:"https://cdn.beatsaver.com/32ae684f553e7fa90d1e5325bd54581c0afd37fa.jpg",previewURL:"https://cdn.beatsaver.com/32ae684f553e7fa90d1e5325bd54581c0afd37fa.mp3"}],createdAt:"2018-07-20T22:07:52Z",updatedAt:"2018-07-20T22:07:52Z",lastPublishedAt:"2018-07-20T22:07:52Z"},{id:"10842",name:"Technicolor - Madeon",description:"4th map by Canadian_Dragon in collaboration with Kry\r\nThis map is a friendly gift for a good friend of ours and has been map to their liking. Hope everyone else enjoys it aswell.\r\n\r\nRequires Chroma & Noodle Extension [Wall Map]",uploader:{id:4013,name:"canadian_dragon",uniqueSet:!0,hash:"5e0bb55364f9aa0006d6d0fa",avatar:"https://cdn.beatsaver.com/avatar/4013.jpg",type:"SIMPLE"},metadata:{bpm:127,duration:385,songName:"Technicolor",songSubName:"",songAuthorName:"Madeon",levelAuthorName:"Canadian_Dragon & Kry"},stats:{plays:0,downloads:1998,upvotes:682,downvotes:5,score:.9238},uploaded:"2020-11-02T01:52:46.653Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"0488692d1d2fa080fe429ee15efc84da40bc78d2",key:"10842",state:"Published",createdAt:"2020-11-02T01:52:46.653Z",sageScore:4,diffs:[{njs:19,offset:0,notes:1382,bombs:0,obstacles:38787,nps:3.75,length:780,characteristic:"Standard",difficulty:"ExpertPlus",events:8054,chroma:!0,me:!1,ne:!0,cinema:!1,seconds:368.504,paritySummary:{errors:0,warns:0,resets:0}}],downloadURL:"https://cdn.beatsaver.com/0488692d1d2fa080fe429ee15efc84da40bc78d2.zip",coverURL:"https://cdn.beatsaver.com/0488692d1d2fa080fe429ee15efc84da40bc78d2.jpg",previewURL:"https://cdn.beatsaver.com/0488692d1d2fa080fe429ee15efc84da40bc78d2.mp3"}],createdAt:"2020-11-02T01:52:46.653Z",updatedAt:"2020-11-02T01:52:46.653Z",lastPublishedAt:"2020-11-02T01:52:46.653Z"},{id:"142e8",name:"K/DA - MORE (ft. Madison Beer, (G)I-DLE, Lexie Liu, Jaira Burns, Seraphine)",description:"From the unofficial music pack (K/DA ALL OUT) on BSaber.com\nPack: https://bsaber.com/kda-all-out/\nTrailer: https://youtu.be/e1ry_H86zqg\nPreview (Expert+): https://youtu.be/C86ebbseC34\nLightshow: https://youtu.be/lxbch_lAEA8\n__________\nCredits🤍\nMapper: Sotarks\nLighter: Sotarks\nCurators: Pixelguy, JohnnyDee & joey\nSpecial Thanks: eliotttate & Belaya\nTrailer: Tuffiii\n__________\nCheck out K/DA🤍\nhttps://twitter.com/kda_music\nhttps://linktr.ee/kda_music\nProduced by Riot Games",uploader:{id:2523,name:"sotarks",uniqueSet:!0,hash:"5cff0b7698cc5a672c8541fd",avatar:"https://www.gravatar.com/avatar/5cff0b7698cc5a672c8541fd?d=retro",type:"SIMPLE"},metadata:{bpm:142,duration:219,songName:"MORE",songSubName:"",songAuthorName:"K/DA",levelAuthorName:"Sotarks"},stats:{plays:0,downloads:11653,upvotes:1408,downvotes:33,score:.9237},uploaded:"2021-02-17T18:04:39.306Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"8c5be566e218b8cc59c21e947bc39c1ce1f98908",key:"142e8",state:"Published",createdAt:"2021-02-17T18:04:39.306Z",sageScore:7,diffs:[{njs:10,offset:-1.2813157,notes:245,bombs:0,obstacles:19,nps:1.191,length:487,characteristic:"Standard",difficulty:"Easy",events:2819,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:205.775,paritySummary:{errors:21,warns:0,resets:0}},{njs:12,offset:.274958,notes:363,bombs:2,obstacles:13,nps:1.764,length:487,characteristic:"Standard",difficulty:"Normal",events:2819,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:205.775,paritySummary:{errors:3,warns:0,resets:0}},{njs:14,offset:-.06,notes:618,bombs:13,obstacles:13,nps:3.003,length:487,characteristic:"Standard",difficulty:"Hard",events:2819,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:205.775,paritySummary:{errors:0,warns:0,resets:4}},{njs:16,offset:-.3,notes:863,bombs:12,obstacles:106,nps:4.194,length:487,characteristic:"Standard",difficulty:"Expert",events:2819,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:205.775,paritySummary:{errors:0,warns:0,resets:2}},{njs:18,offset:-.5,notes:1041,bombs:31,obstacles:271,nps:5.059,length:487,characteristic:"Standard",difficulty:"ExpertPlus",events:2821,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:205.775,paritySummary:{errors:1,warns:4,resets:5}}],downloadURL:"https://cdn.beatsaver.com/8c5be566e218b8cc59c21e947bc39c1ce1f98908.zip",coverURL:"https://cdn.beatsaver.com/8c5be566e218b8cc59c21e947bc39c1ce1f98908.jpg",previewURL:"https://cdn.beatsaver.com/8c5be566e218b8cc59c21e947bc39c1ce1f98908.mp3"}],createdAt:"2021-02-17T18:04:39.306Z",updatedAt:"2021-02-17T18:04:39.306Z",lastPublishedAt:"2021-02-17T18:04:39.306Z"},{id:"90c3",name:"Centuries - Fallout Boy (2020) [Mapped by Ab and Qwasyx]",description:"Phew, that took a while.\nHuge thanks to Qwasyx for lighting this map as well as making all the One Saber difficulties!\nAnother thanks to Fruhead for testing.\n\nI take requests! My Discord is Ab#8582.",uploader:{id:15368,name:"theab",uniqueSet:!0,hash:"5cff0b7698cc5a672c853a14",avatar:"https://www.gravatar.com/avatar/5cff0b7698cc5a672c853a14?d=retro",type:"SIMPLE"},metadata:{bpm:176,duration:227,songName:"Centuries",songSubName:"",songAuthorName:"Fallout Boy",levelAuthorName:"Ab & Qwasyx"},stats:{plays:0,downloads:8958,upvotes:2447,downvotes:81,score:.9237},uploaded:"2020-03-16T21:06:46.074Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"e3bb02f9ecd08e4c3472fea92e604bc415338f2a",key:"90c3",state:"Published",createdAt:"2020-03-16T21:06:46.074Z",sageScore:6,diffs:[{njs:10,offset:0,notes:231,bombs:0,obstacles:46,nps:1.065,length:636,characteristic:"Standard",difficulty:"Easy",events:14169,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:216.818,paritySummary:{errors:84,warns:0,resets:0}},{njs:13,offset:-.6,notes:329,bombs:0,obstacles:4,nps:1.517,length:636,characteristic:"Standard",difficulty:"Normal",events:14169,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:216.818,paritySummary:{errors:26,warns:8,resets:0}},{njs:14,offset:.8,notes:514,bombs:92,obstacles:82,nps:2.371,length:636,characteristic:"Standard",difficulty:"Hard",events:14169,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:216.818,paritySummary:{errors:0,warns:0,resets:2}},{njs:16,offset:.4,notes:667,bombs:182,obstacles:11,nps:3.076,length:636,characteristic:"Standard",difficulty:"Expert",events:14167,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:216.818,paritySummary:{errors:1,warns:1,resets:8}},{njs:20,offset:-.2,notes:862,bombs:164,obstacles:2,nps:3.976,length:636,characteristic:"Standard",difficulty:"ExpertPlus",events:14169,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:216.818,paritySummary:{errors:1,warns:1,resets:5}},{njs:10,offset:0,notes:146,bombs:64,obstacles:4,nps:.671,length:638,characteristic:"OneSaber",difficulty:"Easy",events:14169,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:217.5,paritySummary:{errors:21,warns:15,resets:1}},{njs:13,offset:-.6,notes:276,bombs:144,obstacles:68,nps:1.269,length:638,characteristic:"OneSaber",difficulty:"Normal",events:14169,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:217.5,paritySummary:{errors:4,warns:22,resets:2}},{njs:14,offset:.8,notes:529,bombs:8,obstacles:0,nps:2.43,length:638.5,characteristic:"OneSaber",difficulty:"Hard",events:14169,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:217.67,paritySummary:{errors:8,warns:6,resets:1}},{njs:16,offset:.4,notes:548,bombs:96,obstacles:0,nps:2.522,length:637.5,characteristic:"OneSaber",difficulty:"Expert",events:14169,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:217.33,paritySummary:{errors:2,warns:0,resets:5}},{njs:20,offset:-.2,notes:830,bombs:153,obstacles:0,nps:3.807,length:639.5,characteristic:"OneSaber",difficulty:"ExpertPlus",events:14169,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:218.011,paritySummary:{errors:0,warns:2,resets:13}},{njs:20,offset:-.2,notes:0,bombs:0,obstacles:0,nps:0,length:0,characteristic:"Lightshow",difficulty:"ExpertPlus",events:14169,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:0,paritySummary:{errors:0,warns:0,resets:0}}],downloadURL:"https://cdn.beatsaver.com/e3bb02f9ecd08e4c3472fea92e604bc415338f2a.zip",coverURL:"https://cdn.beatsaver.com/e3bb02f9ecd08e4c3472fea92e604bc415338f2a.jpg",previewURL:"https://cdn.beatsaver.com/e3bb02f9ecd08e4c3472fea92e604bc415338f2a.mp3"}],createdAt:"2020-03-16T21:06:46.074Z",updatedAt:"2020-03-16T21:06:46.074Z",lastPublishedAt:"2020-03-16T21:06:46.074Z"},{id:"63ea",name:"Sabaton - Primo Victoria",description:"Old but great song by Sabaton. Hard to Expert+ are mapped.\n\nGenre: Power metal\nBPM: 124.175\nNPS: 5.51 / 3.87 / 3.06\nNJS: 16 / 13 / 11\n\nExpert+ playthrough: https://youtu.be/Z92uPY3met4",uploader:{id:1207,name:"wyxi",uniqueSet:!0,hash:"5d0abf96b8c469000699075f",avatar:"https://www.gravatar.com/avatar/5d0abf96b8c469000699075f?d=retro",type:"SIMPLE"},metadata:{bpm:124.175,duration:251,songName:"Primo Victoria",songSubName:"",songAuthorName:"Sabaton",levelAuthorName:"Wyxi"},stats:{plays:0,downloads:2832,upvotes:1838,downvotes:52,score:.9237},uploaded:"2019-09-16T19:33:52.506Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"d18d33e15faab989cc67b7a1ce0b03950295764f",key:"63ea",state:"Published",createdAt:"2019-09-16T19:33:52.506Z",sageScore:6,diffs:[{njs:11,offset:1,notes:769,bombs:4,obstacles:13,nps:3.18,length:500.5,characteristic:"Standard",difficulty:"Hard",events:2822,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:241.836,paritySummary:{errors:10,warns:2,resets:2}},{njs:13,offset:.5,notes:972,bombs:8,obstacles:12,nps:4.019,length:500.5,characteristic:"Standard",difficulty:"Expert",events:2823,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:241.836,paritySummary:{errors:15,warns:11,resets:4}},{njs:16,offset:0,notes:1385,bombs:8,obstacles:11,nps:5.727,length:500.5,characteristic:"Standard",difficulty:"ExpertPlus",events:2824,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:241.836,paritySummary:{errors:20,warns:18,resets:4}}],downloadURL:"https://cdn.beatsaver.com/d18d33e15faab989cc67b7a1ce0b03950295764f.zip",coverURL:"https://cdn.beatsaver.com/d18d33e15faab989cc67b7a1ce0b03950295764f.jpg",previewURL:"https://cdn.beatsaver.com/d18d33e15faab989cc67b7a1ce0b03950295764f.mp3"}],createdAt:"2019-09-16T19:33:52.506Z",updatedAt:"2019-09-16T19:33:52.506Z",lastPublishedAt:"2019-09-16T19:33:52.506Z"},{id:"45eb",name:"Fun Tonight - MACROSS 82-99",description:'Future funk has a special place in my heart, Beat Saber could use some more of this genre.\r\nDifficulties: Expert, Expert+ (Both on the easier end of the spectrum)\r\n\r\n"DDR/Mystikmol" Difficulty Rating:\r\nE+ -- 12\r\nExpert -- 10',uploader:{id:4284569,name:"checkthepan",uniqueSet:!0,hash:"5cff0b7398cc5a672c84f3d5",avatar:"https://cdn.beatsaver.com/avatar/184355369189900290.png",type:"DISCORD"},metadata:{bpm:130,duration:164,songName:"Fun Tonight",songSubName:"MACROSS 82-99",songAuthorName:"Checkthepan",levelAuthorName:"checkthepan"},stats:{plays:0,downloads:1300,upvotes:710,downvotes:6,score:.9237},uploaded:"2019-04-14T19:22:02Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"608bf3c4cd341a7b70199f26d44aaff71550078d",key:"45eb",state:"Published",createdAt:"2019-04-14T19:22:02Z",sageScore:7,diffs:[{njs:12,offset:0,notes:0,bombs:0,obstacles:0,nps:0,length:0,characteristic:"Standard",difficulty:"Easy",events:1545,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:0,paritySummary:{errors:0,warns:0,resets:0}},{njs:14,offset:0,notes:613,bombs:0,obstacles:30,nps:3.795,length:350,characteristic:"Standard",difficulty:"Expert",events:1545,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:161.538,paritySummary:{errors:14,warns:19,resets:0}},{njs:16,offset:0,notes:693,bombs:0,obstacles:31,nps:4.29,length:350,characteristic:"Standard",difficulty:"ExpertPlus",events:1545,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:161.538,paritySummary:{errors:12,warns:28,resets:0}}],downloadURL:"https://cdn.beatsaver.com/608bf3c4cd341a7b70199f26d44aaff71550078d.zip",coverURL:"https://cdn.beatsaver.com/608bf3c4cd341a7b70199f26d44aaff71550078d.jpg",previewURL:"https://cdn.beatsaver.com/608bf3c4cd341a7b70199f26d44aaff71550078d.mp3"}],createdAt:"2019-04-14T19:22:02Z",updatedAt:"2019-04-14T19:22:02Z",lastPublishedAt:"2019-04-14T19:22:02Z"},{id:"443d",name:"PUSSY - Rammstein",description:"Another one!\r\n\r\nMaybe don't let your kids play this one until they are a bit older....",uploader:{id:27983,name:"heisenbergirl",uniqueSet:!0,hash:"5cff0b7298cc5a672c84ec30",avatar:"https://www.gravatar.com/avatar/5cff0b7298cc5a672c84ec30?d=retro",type:"SIMPLE"},metadata:{bpm:135,duration:240,songName:"PUSSY",songSubName:"Rammstein",songAuthorName:"Heisenberg",levelAuthorName:"heisenbergirl"},stats:{plays:0,downloads:1710,upvotes:1218,downvotes:25,score:.9237},uploaded:"2019-04-08T04:27:04Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"54f6e76446b3a96cc4707fb2d2aa8bd1efd0baf3",key:"443d",state:"Published",createdAt:"2019-04-08T04:27:04Z",sageScore:6,diffs:[{njs:14,offset:0,notes:711,bombs:0,obstacles:1,nps:3.1,length:516,characteristic:"Standard",difficulty:"Expert",events:12824,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:229.333,paritySummary:{errors:13,warns:24,resets:0}},{njs:16,offset:0,notes:967,bombs:12,obstacles:7,nps:4.217,length:516,characteristic:"Standard",difficulty:"ExpertPlus",events:12824,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:229.333,paritySummary:{errors:40,warns:52,resets:7}}],downloadURL:"https://cdn.beatsaver.com/54f6e76446b3a96cc4707fb2d2aa8bd1efd0baf3.zip",coverURL:"https://cdn.beatsaver.com/54f6e76446b3a96cc4707fb2d2aa8bd1efd0baf3.jpg",previewURL:"https://cdn.beatsaver.com/54f6e76446b3a96cc4707fb2d2aa8bd1efd0baf3.mp3"}],createdAt:"2019-04-08T04:27:04Z",updatedAt:"2019-04-08T04:27:04Z",lastPublishedAt:"2019-04-08T04:27:04Z"},{id:"1ad55",name:"Porter Robinson & Madeon - Shelter (Modchart)",description:"This is a modchart that i wanted to do for a long time, i saved this song becuase I love it.\r\nAnd today I'm proud to show you my new modchart!\r\nI made this map in a week and i really enjoyed the process!\r\n\r\nShowcase: https://www.youtube.com/watch?v=a4zSCDYRwAQ\r\n\r\nIf you have any feedback dont be shy and tell me on discord:\r\nTzurS11#1111",uploader:{id:4284455,name:"TzurS11",uniqueSet:!0,hash:"6040a8135ab13d0006093512",avatar:"https://cdn.beatsaver.com/avatar/474645781786263552.png",type:"DISCORD"},metadata:{bpm:200,duration:219,songName:"Shelter",songSubName:"",songAuthorName:"Porter Robinson & Madeon",levelAuthorName:"TzurS11"},stats:{plays:0,downloads:12349,upvotes:737,downvotes:7,score:.9236},uploaded:"2021-08-01T20:31:30.562Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"740c5f5d7b730285c8d13fad1107be4659eb2839",key:"1ad55",state:"Published",createdAt:"2021-08-01T20:31:30.562Z",sageScore:3,diffs:[{njs:19,offset:-.05,notes:623,bombs:4,obstacles:0,nps:3.146,length:660,characteristic:"Standard",difficulty:"Expert",events:81591,chroma:!0,me:!1,ne:!1,cinema:!1,seconds:198,paritySummary:{errors:0,warns:0,resets:1}},{njs:19,offset:-.05,notes:623,bombs:4,obstacles:24892,nps:3.146,length:660,characteristic:"Standard",difficulty:"ExpertPlus",events:81591,chroma:!0,me:!1,ne:!0,cinema:!1,seconds:198,paritySummary:{errors:0,warns:0,resets:1}}],downloadURL:"https://cdn.beatsaver.com/740c5f5d7b730285c8d13fad1107be4659eb2839.zip",coverURL:"https://cdn.beatsaver.com/740c5f5d7b730285c8d13fad1107be4659eb2839.jpg",previewURL:"https://cdn.beatsaver.com/740c5f5d7b730285c8d13fad1107be4659eb2839.mp3"}],createdAt:"2021-08-01T20:31:30.562Z",updatedAt:"2021-08-01T20:31:30.562Z",lastPublishedAt:"2021-08-01T20:31:30.562Z"},{id:"7326",name:"The Greatest Show - Mapped by TheAb",description:"This is the most time I've ever put into a map. Almost 14 hours have been put into it, and I really appreciate the light-show I've done. Truly hope you enjoy!\n\nExpert+: 4.55NPS\nExpert: 3.49NPS\nHard: 2.57NPS\nNormal: 1.61NPS\n12,601 Lighting events.\n\nOriginal Song: https://www.youtube.com/watch?v=NyVYXRD1Ans\n\nTwitter: https://twitter.com/TheAb03 / Discord: Ab#8582\nI take requests! DM Ab#8582 on Discord for more info.",uploader:{id:15368,name:"theab",uniqueSet:!0,hash:"5cff0b7698cc5a672c853a14",avatar:"https://www.gravatar.com/avatar/5cff0b7698cc5a672c853a14?d=retro",type:"SIMPLE"},metadata:{bpm:158,duration:301,songName:"The Greatest Show",songSubName:"",songAuthorName:"Hugh Jackman, Keala Settle, Zac Efron, Zendaya & The Greatest Showman Ensemble",levelAuthorName:"Ab"},stats:{plays:0,downloads:3783,upvotes:1160,downvotes:23,score:.9235},uploaded:"2019-12-01T19:39:02.667Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"f621c70d06e8f5405ffa428f7b742b123208a656",key:"7326",state:"Published",createdAt:"2019-12-01T19:39:02.667Z",sageScore:5,diffs:[{njs:10,offset:0,notes:489,bombs:36,obstacles:75,nps:1.672,length:770.149,characteristic:"Standard",difficulty:"Normal",events:12599,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:292.462,paritySummary:{errors:43,warns:13,resets:6}},{njs:12,offset:.5,notes:777,bombs:31,obstacles:96,nps:2.657,length:770.149,characteristic:"Standard",difficulty:"Hard",events:12599,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:292.462,paritySummary:{errors:1,warns:0,resets:8}},{njs:15,offset:.3,notes:1056,bombs:48,obstacles:100,nps:3.611,length:770.149,characteristic:"Standard",difficulty:"Expert",events:12986,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:292.462,paritySummary:{errors:3,warns:1,resets:9}},{njs:19,offset:0,notes:1376,bombs:34,obstacles:97,nps:4.705,length:770.149,characteristic:"Standard",difficulty:"ExpertPlus",events:12595,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:292.462,paritySummary:{errors:0,warns:0,resets:6}},{njs:19,offset:0,notes:1,bombs:0,obstacles:0,nps:0,length:0,characteristic:"Lightshow",difficulty:"Easy",events:12568,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:0,paritySummary:{errors:1,warns:0,resets:0}}],downloadURL:"https://cdn.beatsaver.com/f621c70d06e8f5405ffa428f7b742b123208a656.zip",coverURL:"https://cdn.beatsaver.com/f621c70d06e8f5405ffa428f7b742b123208a656.jpg",previewURL:"https://cdn.beatsaver.com/f621c70d06e8f5405ffa428f7b742b123208a656.mp3"}],createdAt:"2019-12-01T19:39:02.667Z",updatedAt:"2019-12-01T19:39:02.667Z",lastPublishedAt:"2019-12-01T19:39:02.667Z"},{id:"56c2",name:"On The Floor (ft. Pitbull) - Jennifer Lopez",description:"You can most certainly dance to this song, I hope you like it!\nSend me your thoughts on Discord: Teuflum#5982\n\nExpert+ preview: https://www.youtube.com/watch?v=TPU4mCQngNQ\n\nMany thanks to my playtesters Redmagi, techbutterfly and Helen Carnate!\n\nDM me your feedback on discord: Teuflum#5982",uploader:{id:68740,name:"Teuflum",uniqueSet:!0,hash:"5cff0b7498cc5a672c851a6b",avatar:"https://cdn.beatsaver.com/avatar/114706869460664326.png",type:"DISCORD"},metadata:{bpm:130,duration:231,songName:"On The Floor",songSubName:"(ft. Pitbull)",songAuthorName:"Jennifer Lopez",levelAuthorName:"Teuflum"},stats:{plays:0,downloads:8646,upvotes:1696,downvotes:46,score:.9235},uploaded:"2019-07-13T12:11:30.889Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"56d18c176906a23b15702d3eb33f8669322ee312",key:"56c2",state:"Published",createdAt:"2019-07-13T12:11:30.889Z",sageScore:7,diffs:[{njs:10,offset:1,notes:307,bombs:0,obstacles:28,nps:1.415,length:470,characteristic:"Standard",difficulty:"Easy",events:3081,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:216.923,paritySummary:{errors:87,warns:4,resets:0}},{njs:12,offset:1,notes:383,bombs:0,obstacles:30,nps:1.766,length:470,characteristic:"Standard",difficulty:"Normal",events:3081,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:216.923,paritySummary:{errors:75,warns:13,resets:0}},{njs:14,offset:1,notes:638,bombs:0,obstacles:32,nps:2.941,length:470,characteristic:"Standard",difficulty:"Hard",events:3081,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:216.923,paritySummary:{errors:29,warns:23,resets:0}},{njs:16,offset:.5,notes:838,bombs:0,obstacles:26,nps:3.863,length:470,characteristic:"Standard",difficulty:"Expert",events:3081,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:216.923,paritySummary:{errors:30,warns:36,resets:0}},{njs:17,offset:0,notes:949,bombs:0,obstacles:23,nps:4.375,length:470,characteristic:"Standard",difficulty:"ExpertPlus",events:3081,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:216.923,paritySummary:{errors:33,warns:43,resets:0}}],downloadURL:"https://cdn.beatsaver.com/56d18c176906a23b15702d3eb33f8669322ee312.zip",coverURL:"https://cdn.beatsaver.com/56d18c176906a23b15702d3eb33f8669322ee312.jpg",previewURL:"https://cdn.beatsaver.com/56d18c176906a23b15702d3eb33f8669322ee312.mp3"}],createdAt:"2019-07-13T12:11:30.889Z",updatedAt:"2019-07-13T12:11:30.889Z",lastPublishedAt:"2019-07-13T12:11:30.889Z"},{id:"492e",name:"[OLD] Centuries - Fallout Boy | 2019 version | Mapped and Lighted by Ab",description:"Alright! Another one.\nNormal is pretty much top-Easy, couldn't decide.\nAb#4940 if you're interested in collabs\n\nAlso lights could get laggy",uploader:{id:15368,name:"theab",uniqueSet:!0,hash:"5cff0b7698cc5a672c853a14",avatar:"https://www.gravatar.com/avatar/5cff0b7698cc5a672c853a14?d=retro",type:"SIMPLE"},metadata:{bpm:176,duration:227,songName:"Centuries",songSubName:"Fallout Boy",songAuthorName:"Ab",levelAuthorName:"TheAb"},stats:{plays:0,downloads:4393,upvotes:2252,downvotes:72,score:.9235},uploaded:"2019-04-28T22:58:20Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"158e65b2e9861c626344049ec4a069d1523ad060",key:"492e",state:"Published",createdAt:"2019-04-28T22:58:20Z",sageScore:4,diffs:[{njs:11,offset:0,notes:289,bombs:42,obstacles:4,nps:1.333,length:635.75,characteristic:"Standard",difficulty:"Normal",events:22890,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:216.733,paritySummary:{errors:79,warns:35,resets:2}},{njs:12,offset:0,notes:527,bombs:85,obstacles:5,nps:2.425,length:637.5,characteristic:"Standard",difficulty:"Hard",events:1,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:217.33,paritySummary:{errors:62,warns:51,resets:9}},{njs:12,offset:0,notes:762,bombs:158,obstacles:7,nps:3.506,length:637.5,characteristic:"Standard",difficulty:"Expert",events:22890,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:217.33,paritySummary:{errors:54,warns:44,resets:5}},{njs:18,offset:0,notes:1145,bombs:186,obstacles:0,nps:5.267,length:637.625,characteristic:"Standard",difficulty:"ExpertPlus",events:22890,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:217.372,paritySummary:{errors:68,warns:90,resets:6}}],downloadURL:"https://cdn.beatsaver.com/158e65b2e9861c626344049ec4a069d1523ad060.zip",coverURL:"https://cdn.beatsaver.com/158e65b2e9861c626344049ec4a069d1523ad060.jpg",previewURL:"https://cdn.beatsaver.com/158e65b2e9861c626344049ec4a069d1523ad060.mp3"}],createdAt:"2019-04-28T22:58:20Z",updatedAt:"2019-04-28T22:58:20Z",lastPublishedAt:"2019-04-28T22:58:20Z"},{id:"8215",name:"David Guetta, Brooks & Loote - Better When You're Gone",description:"First map of my Future House pack. I remember that I started this a long time ago, even before I had my VR; about 5 months ago going into September.\n\nVideo: https://youtu.be/NDDn7-Lzrlo\n\nEasy: Notes: 130 NPS: 1.22 NJS: 10\nNormal: Notes: 164 NPS: 1.65 NJS: 12\nHard: Notes: 267 NPS: 2.64 NJS: 14\nExpert: Notes: 398 NPS: 3.94 NJS: 16\nExpert+: Notes: 483 NPS: 4.76 NJS: 18\n\nCheck out my lightshows here: https://www.youtube.com/playlist?list=PLwl6dYq72JOYu1BnKl5WATa4Dh__ZJmuN",uploader:{id:14808,name:"halcyon12",uniqueSet:!0,hash:"5cff0b7698cc5a672c8547ad",avatar:"https://www.gravatar.com/avatar/5cff0b7698cc5a672c8547ad?d=retro",type:"SIMPLE"},metadata:{bpm:128,duration:106,songName:"Better When You're Gone",songSubName:"(Ft. Loote)",songAuthorName:"David Guetta, Brooks",levelAuthorName:"Halcyon12"},stats:{plays:0,downloads:2743,upvotes:977,downvotes:16,score:.9233},uploaded:"2020-01-27T23:27:20.606Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"048b444b7011388e63e4b7bab1e8f96b4b51fa3d",key:"8215",state:"Published",createdAt:"2020-01-27T23:27:20.606Z",sageScore:6,diffs:[{njs:10,offset:1,notes:130,bombs:0,obstacles:0,nps:1.29,length:215,characteristic:"Standard",difficulty:"Easy",events:2063,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:100.781,paritySummary:{errors:54,warns:2,resets:0}},{njs:12,offset:.5,notes:164,bombs:0,obstacles:7,nps:1.652,length:211.75,characteristic:"Standard",difficulty:"Normal",events:2063,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:99.258,paritySummary:{errors:16,warns:6,resets:0}},{njs:14,offset:0,notes:267,bombs:0,obstacles:6,nps:2.643,length:215.5,characteristic:"Standard",difficulty:"Hard",events:2063,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:101.016,paritySummary:{errors:2,warns:2,resets:0}},{njs:16,offset:-.25,notes:398,bombs:0,obstacles:5,nps:3.94,length:215.5,characteristic:"Standard",difficulty:"Expert",events:2060,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:101.016,paritySummary:{errors:1,warns:0,resets:0}},{njs:18,offset:-.5,notes:483,bombs:4,obstacles:6,nps:4.765,length:216.25,characteristic:"Standard",difficulty:"ExpertPlus",events:2063,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:101.367,paritySummary:{errors:13,warns:18,resets:6}}],downloadURL:"https://cdn.beatsaver.com/048b444b7011388e63e4b7bab1e8f96b4b51fa3d.zip",coverURL:"https://cdn.beatsaver.com/048b444b7011388e63e4b7bab1e8f96b4b51fa3d.jpg",previewURL:"https://cdn.beatsaver.com/048b444b7011388e63e4b7bab1e8f96b4b51fa3d.mp3"}],createdAt:"2020-01-27T23:27:20.606Z",updatedAt:"2020-01-27T23:27:20.606Z",lastPublishedAt:"2020-01-27T23:27:20.606Z"},{id:"6352",name:"Paladin - EnV",description:'Map creators:\r\nYume - Notes / Walls\r\nRexxxzi - Lights\r\n\r\nThis is "High Tier Expert" difficulty\r\nWe hope you\'ll enjoy the map!',uploader:{id:37025,name:"yume",uniqueSet:!0,hash:"5cff0b7698cc5a672c853e8a",avatar:"https://www.gravatar.com/avatar/5cff0b7698cc5a672c853e8a?d=retro",type:"SIMPLE"},metadata:{bpm:130,duration:242,songName:"Paladin",songSubName:"",songAuthorName:"EnV",levelAuthorName:"Yume ft. Rexxz Lights"},stats:{plays:0,downloads:1187,upvotes:1079,downvotes:20,score:.9233},uploaded:"2019-09-14T12:32:01.763Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"583598b60c0ef891738d3b07c564cadff6500c63",key:"6352",state:"Published",createdAt:"2019-09-14T12:32:01.763Z",sageScore:7,diffs:[{njs:12,offset:0,notes:0,bombs:0,obstacles:0,nps:0,length:0,characteristic:"Standard",difficulty:"Easy",events:9642,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:0,paritySummary:{errors:0,warns:0,resets:0}},{njs:16,offset:0,notes:1065,bombs:0,obstacles:7902,nps:4.615,length:500,characteristic:"Standard",difficulty:"Expert",events:9524,chroma:!1,me:!0,ne:!1,cinema:!1,seconds:230.769,paritySummary:{errors:0,warns:0,resets:0}},{njs:16,offset:0,notes:1065,bombs:0,obstacles:7923,nps:4.615,length:500,characteristic:"Standard",difficulty:"ExpertPlus",events:9524,chroma:!1,me:!0,ne:!1,cinema:!1,seconds:230.769,paritySummary:{errors:0,warns:0,resets:0}}],downloadURL:"https://cdn.beatsaver.com/583598b60c0ef891738d3b07c564cadff6500c63.zip",coverURL:"https://cdn.beatsaver.com/583598b60c0ef891738d3b07c564cadff6500c63.jpg",previewURL:"https://cdn.beatsaver.com/583598b60c0ef891738d3b07c564cadff6500c63.mp3"}],createdAt:"2019-09-14T12:32:01.763Z",updatedAt:"2019-09-14T12:32:01.763Z",lastPublishedAt:"2019-09-14T12:32:01.763Z"},{id:"2c14",name:"CHVRCHES - The Mother We Share",description:"I noticed CHVRCHES' most popular song didn't have a map, so I gave it a shot. Check out my other maps, too!\r\n\r\nPreview: https://youtu.be/bGnUqfGrglY\r\nNormal / Hard / Expert\r\n\r\nhttps://www.twitch.tv/Syntheseizure",uploader:{id:31265,name:"syntheseizure",uniqueSet:!0,hash:"5cff0b7698cc5a672c8546bd",avatar:"https://www.gravatar.com/avatar/5cff0b7698cc5a672c8546bd?d=retro",type:"SIMPLE"},metadata:{bpm:87,duration:192,songName:"The Mother We Share",songSubName:"CHVRCHES",songAuthorName:"Syntheseizure",levelAuthorName:"Syntheseizure"},stats:{plays:0,downloads:1880,upvotes:1056,downvotes:19,score:.9233},uploaded:"2019-01-08T20:34:12Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"4f96ae058a970508dad582e0ea60d5e6ad9d38b5",key:"2c14",state:"Published",createdAt:"2019-01-08T20:34:12Z",sageScore:4,diffs:[{njs:10,offset:0,notes:373,bombs:0,obstacles:2,nps:2.053,length:263.5,characteristic:"Standard",difficulty:"Normal",events:710,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:181.724,paritySummary:{errors:36,warns:7,resets:0}},{njs:10,offset:0,notes:480,bombs:0,obstacles:6,nps:2.641,length:263.5,characteristic:"Standard",difficulty:"Hard",events:710,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:181.724,paritySummary:{errors:20,warns:12,resets:0}},{njs:10,offset:0,notes:683,bombs:0,obstacles:12,nps:3.758,length:263.5,characteristic:"Standard",difficulty:"Expert",events:708,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:181.724,paritySummary:{errors:21,warns:7,resets:0}}],downloadURL:"https://cdn.beatsaver.com/4f96ae058a970508dad582e0ea60d5e6ad9d38b5.zip",coverURL:"https://cdn.beatsaver.com/4f96ae058a970508dad582e0ea60d5e6ad9d38b5.jpg",previewURL:"https://cdn.beatsaver.com/4f96ae058a970508dad582e0ea60d5e6ad9d38b5.mp3"}],createdAt:"2019-01-08T20:34:12Z",updatedAt:"2019-01-08T20:34:12Z",lastPublishedAt:"2019-01-08T20:34:12Z"},{id:"2293",name:"My Soul,Your Beats",description:"Over 10 hours of work went into this to make it as good as it could be\r\nI consider this a new beginning, all previous maps of mine pale in comparison",uploader:{id:47724,name:"dafrandle",uniqueSet:!0,hash:"5cff0b7598cc5a672c8527e9",avatar:"https://www.gravatar.com/avatar/5cff0b7598cc5a672c8527e9?d=retro",type:"SIMPLE"},metadata:{bpm:145,duration:276,songName:"My Soul,Your Beats",songSubName:"Lia",songAuthorName:"dafrandle",levelAuthorName:"dafrandle"},stats:{plays:0,downloads:3582,upvotes:1440,downvotes:35,score:.9233},uploaded:"2018-11-27T23:47:18Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"abc11caed9ca86fda3dacc12dd0bcca51041ebe0",key:"2293",state:"Published",createdAt:"2018-11-27T23:47:18Z",sageScore:6,diffs:[{njs:9,offset:0,notes:505,bombs:0,obstacles:3,nps:1.9,length:642.375,characteristic:"Standard",difficulty:"Normal",events:3955,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:265.81,paritySummary:{errors:77,warns:13,resets:0}},{njs:10,offset:0,notes:768,bombs:0,obstacles:26,nps:2.889,length:642.375,characteristic:"Standard",difficulty:"Hard",events:3955,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:265.81,paritySummary:{errors:64,warns:24,resets:0}},{njs:11,offset:0,notes:1120,bombs:62,obstacles:29,nps:4.214,length:642.375,characteristic:"Standard",difficulty:"Expert",events:3955,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:265.81,paritySummary:{errors:89,warns:40,resets:5}}],downloadURL:"https://cdn.beatsaver.com/abc11caed9ca86fda3dacc12dd0bcca51041ebe0.zip",coverURL:"https://cdn.beatsaver.com/abc11caed9ca86fda3dacc12dd0bcca51041ebe0.jpg",previewURL:"https://cdn.beatsaver.com/abc11caed9ca86fda3dacc12dd0bcca51041ebe0.mp3"}],createdAt:"2018-11-27T23:47:18Z",updatedAt:"2018-11-27T23:47:18Z",lastPublishedAt:"2018-11-27T23:47:18Z"},{id:"1a0ba",name:"[Electro Swing Pack] Wolfgang Lohr & Maskarade - Hit The Road Jack",description:"Nixie Presents: Electro Swing Pack!\n\n10 electro swing songs with expert and expert+ diffs to make your booty swing!\n\nGet The Pack: \nhttps://bsaber.com/electro-swing-pack/\n\nMap Gameplay:\nhttps://youtu.be/0ObNR9n_dDs\n\nComplete Pack Playthrough:\nhttps://youtu.be/yj9rw4MEh7s\n\nHeyya! After looking for some dancey electro swing maps, I noticed that there barely are any!\nSo I took matters into my own hands, learning mapping basically from scratch,\nscrapping my first failed attempts and then finally making a map that was good.\nI found it so fun that I ended up making 9 more maps,\nand fine tuned them with the help of the testplayers in BSMG,\nas well as the lovely curators from the bsaber discord.\n\nHuge thanks in particular to:\nMonstor, Bearly, Noxn, Bullet, Vaser888, Tocxx, Jafdy, Storm Knight and Pixelguy!\n\nIf you want to talk to me, here is my Discord:\nNixie.Korten#6944",uploader:{id:4286374,name:"nixiekorten",uniqueSet:!0,hash:"6096752e12772e0006e2f7e6",avatar:"https://cdn.beatsaver.com/avatar/840550221690699776.png",type:"DISCORD"},metadata:{bpm:124,duration:159,songName:"Hit The Road Jack",songSubName:"",songAuthorName:"Wolfgang Lohr & Maskarade",levelAuthorName:"Nixie.Korten"},stats:{plays:0,downloads:14063,upvotes:841,downvotes:11,score:.9232},uploaded:"2021-07-08T15:26:18.072Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"75f10751d58f6f1ab0bc36e94039a144256adccb",key:"1a0ba",state:"Published",createdAt:"2021-07-08T15:26:18.072Z",sageScore:4,diffs:[{njs:16,offset:-.25,notes:475,bombs:0,obstacles:0,nps:3.089,length:317.75,characteristic:"Standard",difficulty:"Expert",events:1846,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:153.75,paritySummary:{errors:0,warns:0,resets:0}},{njs:19,offset:.25,notes:750,bombs:0,obstacles:0,nps:4.878,length:317.75,characteristic:"Standard",difficulty:"ExpertPlus",events:1846,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:153.75,paritySummary:{errors:0,warns:0,resets:0}}],downloadURL:"https://cdn.beatsaver.com/75f10751d58f6f1ab0bc36e94039a144256adccb.zip",coverURL:"https://cdn.beatsaver.com/75f10751d58f6f1ab0bc36e94039a144256adccb.jpg",previewURL:"https://cdn.beatsaver.com/75f10751d58f6f1ab0bc36e94039a144256adccb.mp3"}],createdAt:"2021-07-08T15:26:18.072Z",updatedAt:"2021-07-08T15:26:18.072Z",lastPublishedAt:"2021-07-08T15:26:18.072Z"},{id:"924a",name:'JoJo ~Sono Chi no Sadame~ [JoJo\'s Bizarre Adventure Opening] - Hiroaki "TOMMY" Tominaga',description:'Not many people know this but my full name is actually Joetastic Joestar ;)\n\n"JoJo ~Sono Chi no Sadame~" is the first opening of JoJo\'s Bizarre Adventure: Phantom Blood by Hiroaki "TOMMY" Tominaga.\n\nMap Preview: https://youtu.be/WPprA9AS35A',uploader:{id:58338,name:"Joetastic",uniqueSet:!0,hash:"5cff0b7498cc5a672c85050e",avatar:"https://cdn.beatsaver.com/avatar/227767566402191360.png",type:"DISCORD"},metadata:{bpm:146,duration:263,songName:"JoJo ~Sono Chi no Sadame~",songSubName:"",songAuthorName:'Hiroaki "TOMMY" Tominaga',levelAuthorName:"Joetastic"},stats:{plays:0,downloads:6854,upvotes:1594,downvotes:42,score:.9232},uploaded:"2020-03-21T18:09:50.603Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"eb2b28402e27f784a64f99d338696a2bdd59fe2c",key:"924a",state:"Published",createdAt:"2020-03-21T18:09:50.603Z",sageScore:5,diffs:[{njs:16,offset:0,notes:1305,bombs:0,obstacles:16,nps:5.053,length:628.5,characteristic:"Standard",difficulty:"ExpertPlus",events:4918,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:258.288,paritySummary:{errors:30,warns:38,resets:0}}],downloadURL:"https://cdn.beatsaver.com/eb2b28402e27f784a64f99d338696a2bdd59fe2c.zip",coverURL:"https://cdn.beatsaver.com/eb2b28402e27f784a64f99d338696a2bdd59fe2c.jpg",previewURL:"https://cdn.beatsaver.com/eb2b28402e27f784a64f99d338696a2bdd59fe2c.mp3"}],createdAt:"2020-03-21T18:09:50.603Z",updatedAt:"2020-03-21T18:09:50.603Z",lastPublishedAt:"2020-03-21T18:09:50.603Z"},{id:"aa5c",name:"MOMOLAND - BAAM (Remaster)",description:"Expert+ Preview: https://www.youtube.com/watch?v=5PUSZT6jUaY\n\nMan, I have been doing this for a year now. I feel old. Well enjoy this remake of the first map I uploaded!\n\nComments? Like it? Hate it? Let me know on Discord @Bloodcloak#5725 ! Or drop by the Kpop discord at: https://discord.gg/c9uHGYP",uploader:{id:71661,name:"bloodcloak",uniqueSet:!0,hash:"5cff0b7698cc5a672c8551d3",avatar:"https://cdn.beatsaver.com/avatar/205707707187986442.png",type:"DISCORD"},metadata:{bpm:127,duration:209,songName:"BAAM",songSubName:"Remastered Map",songAuthorName:"MOMOLAND",levelAuthorName:"Bloodcloak"},stats:{plays:0,downloads:8638,upvotes:1222,downvotes:26,score:.9231},uploaded:"2020-05-25T19:34:51.367Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"72746e0a89246d11a8fe7f3a23113f4605980a09",key:"aa5c",state:"Published",createdAt:"2020-05-25T19:34:51.367Z",sageScore:5,diffs:[{njs:12,offset:.4,notes:551,bombs:0,obstacles:148,nps:2.706,length:431,characteristic:"Standard",difficulty:"Hard",events:2998,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:203.622,paritySummary:{errors:4,warns:0,resets:0}},{njs:16,offset:-.2,notes:823,bombs:0,obstacles:120,nps:4.041,length:431.063,characteristic:"Standard",difficulty:"Expert",events:2998,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:203.652,paritySummary:{errors:6,warns:2,resets:0}},{njs:18,offset:-.4,notes:885,bombs:0,obstacles:111,nps:4.346,length:431,characteristic:"Standard",difficulty:"ExpertPlus",events:2998,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:203.622,paritySummary:{errors:3,warns:7,resets:0}}],downloadURL:"https://cdn.beatsaver.com/72746e0a89246d11a8fe7f3a23113f4605980a09.zip",coverURL:"https://cdn.beatsaver.com/72746e0a89246d11a8fe7f3a23113f4605980a09.jpg",previewURL:"https://cdn.beatsaver.com/72746e0a89246d11a8fe7f3a23113f4605980a09.mp3"}],createdAt:"2020-05-25T19:34:51.367Z",updatedAt:"2020-05-25T19:34:51.367Z",lastPublishedAt:"2020-05-25T19:34:51.367Z"},{id:"33dc",name:"CeeLo Green ft. Jack Black - Kung Fu Fighting",description:"I only realised this yesterday, but I've managed to make a map of this Chinese inspired classic just in time for the Lunar new year. So happy Chinese new year everybody and I hope you enjoy it!\r\nTime spent mapping: 8:49\r\n\r\nVideo Preview: https://www.youtube.com/watch?v=73jUl1rH0Fo\r\nBeastSaber: https://bsaber.com/members/stumi/",uploader:{id:4785,name:"stumi",uniqueSet:!1,hash:"5cff0b7398cc5a672c84f720",avatar:"https://www.gravatar.com/avatar/5cff0b7398cc5a672c84f720?d=retro",type:"SIMPLE"},metadata:{bpm:110,duration:140,songName:"Kung Fu Fighting",songSubName:"CeeLo Green ft.Jack Black",songAuthorName:"Stumi",levelAuthorName:"stumi"},stats:{plays:0,downloads:7920,upvotes:1959,downvotes:59,score:.9231},uploaded:"2019-02-05T21:06:09Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"b653e83bdae8028e77e84f751d23d619bc55f6f7",key:"33dc",state:"Published",createdAt:"2019-02-05T21:06:09Z",sageScore:6,diffs:[{njs:10,offset:0,notes:154,bombs:0,obstacles:26,nps:1.26,length:224,characteristic:"Standard",difficulty:"Easy",events:1344,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:122.182,paritySummary:{errors:16,warns:18,resets:0}},{njs:10,offset:0,notes:197,bombs:0,obstacles:24,nps:1.612,length:224,characteristic:"Standard",difficulty:"Normal",events:1344,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:122.182,paritySummary:{errors:17,warns:32,resets:0}},{njs:11,offset:0,notes:351,bombs:0,obstacles:13,nps:2.873,length:224,characteristic:"Standard",difficulty:"Hard",events:1344,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:122.182,paritySummary:{errors:29,warns:29,resets:0}},{njs:14,offset:0,notes:502,bombs:0,obstacles:17,nps:4.109,length:224,characteristic:"Standard",difficulty:"Expert",events:1346,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:122.182,paritySummary:{errors:32,warns:40,resets:0}}],downloadURL:"https://cdn.beatsaver.com/b653e83bdae8028e77e84f751d23d619bc55f6f7.zip",coverURL:"https://cdn.beatsaver.com/b653e83bdae8028e77e84f751d23d619bc55f6f7.jpg",previewURL:"https://cdn.beatsaver.com/b653e83bdae8028e77e84f751d23d619bc55f6f7.mp3"}],createdAt:"2019-02-05T21:06:09Z",updatedAt:"2019-02-05T21:06:09Z",lastPublishedAt:"2019-02-05T21:06:09Z"},{id:"24e",name:"Maculate - Get Schwifty (Andromulus Remix)",description:"Finished version! This track has 4 difficulties: Easy, Normal, Hard and Expert. So everyone can now get schwifty, regardless of skill level. \r\n\r\nThis is my first finished track, all feedback is welcome!",uploader:{id:53049,name:"enclose",uniqueSet:!1,hash:"5cff0b7398cc5a672c84ed3b",avatar:"https://www.gravatar.com/avatar/5cff0b7398cc5a672c84ed3b?d=retro",type:"SIMPLE"},metadata:{bpm:200,duration:279,songName:"Get Schwifty (Andromulus Remix)",songSubName:"",songAuthorName:"Maculate",levelAuthorName:"enclose"},stats:{plays:0,downloads:5744,upvotes:4485,downvotes:191,score:.9231},uploaded:"2018-05-26T15:22:35Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"33d5c4fff97822eef1f02fc53bb0561f23489efe",key:"24e",state:"Published",createdAt:"2018-05-26T15:22:35Z",sageScore:6,diffs:[{njs:10,offset:0,notes:411,bombs:0,obstacles:77,nps:1.527,length:897,characteristic:"Standard",difficulty:"Easy",events:1673,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:269.1,paritySummary:{errors:120,warns:53,resets:0}},{njs:10,offset:0,notes:518,bombs:0,obstacles:120,nps:1.925,length:897,characteristic:"Standard",difficulty:"Normal",events:1754,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:269.1,paritySummary:{errors:123,warns:64,resets:0}},{njs:10,offset:0,notes:629,bombs:0,obstacles:131,nps:2.337,length:897,characteristic:"Standard",difficulty:"Hard",events:1890,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:269.1,paritySummary:{errors:119,warns:77,resets:0}},{njs:10,offset:0,notes:684,bombs:0,obstacles:220,nps:2.542,length:897,characteristic:"Standard",difficulty:"Expert",events:1905,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:269.1,paritySummary:{errors:112,warns:75,resets:0}}],downloadURL:"https://cdn.beatsaver.com/33d5c4fff97822eef1f02fc53bb0561f23489efe.zip",coverURL:"https://cdn.beatsaver.com/33d5c4fff97822eef1f02fc53bb0561f23489efe.jpg",previewURL:"https://cdn.beatsaver.com/33d5c4fff97822eef1f02fc53bb0561f23489efe.mp3"}],createdAt:"2018-05-26T15:22:35Z",updatedAt:"2018-05-26T15:22:35Z",lastPublishedAt:"2018-05-26T15:22:35Z"},{id:"13bea",name:"The Wall - (Buunshin Remix) [WALL MAP + CHROMA]",description:"Just wanna say that Rustic has inspired me, and has made me want to start mapping a while back, and with that, it has brought me many opportunities, and many friends.\n\nPrograms used\nScuffedWalls: https://github.com/thelightdesigner/ScuffedWalls\nbeatwalls: https://github.com/spookyGh0st/beatwalls\n\nNoodleExtensions: https://github.com/Aeroluna/NoodleExtensions/releases\n\nPreview: https://youtu.be/lFxGmGO2kww",uploader:{id:4284667,name:"tall_chilis_boi",uniqueSet:!0,hash:"5dec6d85fffaa6000679dc23",avatar:"https://cdn.beatsaver.com/avatar/427307106970894336.png",type:"DISCORD"},metadata:{bpm:172,duration:270,songName:"The Wall",songSubName:"(Buunshin Remix)",songAuthorName:"ABIS & Signal & Tasha Baxter",levelAuthorName:"Tall_Chilis_Boi"},stats:{plays:0,downloads:2353,upvotes:1376,downvotes:33,score:.9229},uploaded:"2021-02-08T08:27:12.773Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"9192703d277e652e3dc367bc87c68107967c6898",key:"13bea",state:"Published",createdAt:"2021-02-08T08:27:12.773Z",sageScore:4,diffs:[{njs:20,offset:-.5,notes:768,bombs:0,obstacles:14814,nps:2.991,length:736,characteristic:"Standard",difficulty:"Expert",events:15872,chroma:!0,me:!1,ne:!0,cinema:!1,seconds:256.744,paritySummary:{errors:0,warns:0,resets:0}}],downloadURL:"https://cdn.beatsaver.com/9192703d277e652e3dc367bc87c68107967c6898.zip",coverURL:"https://cdn.beatsaver.com/9192703d277e652e3dc367bc87c68107967c6898.jpg",previewURL:"https://cdn.beatsaver.com/9192703d277e652e3dc367bc87c68107967c6898.mp3"}],createdAt:"2021-02-08T08:27:12.773Z",updatedAt:"2021-02-08T08:27:12.773Z",lastPublishedAt:"2021-02-08T08:27:12.773Z"},{id:"9b89",name:"Stronger",description:"A wall map for this masterpiece of a song.\n----------------------------------------------\nPlease give feedback @Reddek#5864\nAnd thanks for playing!",uploader:{id:4233941,name:"reddek",uniqueSet:!0,hash:"5dbfb4426dea0b0006bd328d",avatar:"https://cdn.beatsaver.com/avatar/177436487086768129.png",type:"DISCORD"},metadata:{bpm:160,duration:207,songName:"Stronger",songSubName:"",songAuthorName:"TheFatRat, Slaydit & Anjulie",levelAuthorName:"Reddek"},stats:{plays:0,downloads:1299,upvotes:938,downvotes:15,score:.9229},uploaded:"2020-04-16T06:37:29.656Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"e48afe3d1a2b94f5396f63e32972651495caf034",key:"9b89",state:"Published",createdAt:"2020-04-16T06:37:29.656Z",sageScore:4,diffs:[{njs:18,offset:0,notes:892,bombs:168,obstacles:2648,nps:4.471,length:532,characteristic:"Standard",difficulty:"ExpertPlus",events:3423,chroma:!1,me:!0,ne:!1,cinema:!1,seconds:199.5,paritySummary:{errors:0,warns:0,resets:0}}],downloadURL:"https://cdn.beatsaver.com/e48afe3d1a2b94f5396f63e32972651495caf034.zip",coverURL:"https://cdn.beatsaver.com/e48afe3d1a2b94f5396f63e32972651495caf034.jpg",previewURL:"https://cdn.beatsaver.com/e48afe3d1a2b94f5396f63e32972651495caf034.mp3"}],createdAt:"2020-04-16T06:37:29.656Z",updatedAt:"2020-04-16T06:37:29.656Z",lastPublishedAt:"2020-04-16T06:37:29.656Z"},{id:"613b",name:"Seraphim On The Ring - Mitchie M ft. Hatsune Miku, Kagamine Rin, KAITO",description:'"Seraphim On The Ring" is a song by Mitchie M about pro wrestling match which Miku and Rin play against Meiko and Luka. The ringside commentator is KAITO and the referee is Len.',uploader:{id:58338,name:"Joetastic",uniqueSet:!0,hash:"5cff0b7498cc5a672c85050e",avatar:"https://cdn.beatsaver.com/avatar/227767566402191360.png",type:"DISCORD"},metadata:{bpm:175,duration:223,songName:"Seraphim On The Ring",songSubName:"",songAuthorName:"Mitchie M ft. Hatsune Miku, Kagamine Rin, KAITO",levelAuthorName:"Joetastic"},stats:{plays:0,downloads:2013,upvotes:992,downvotes:17,score:.9229},uploaded:"2019-09-04T09:20:18.405Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"605da022c1e9688e122688e3abf3ddc8321299a8",key:"613b",state:"Published",createdAt:"2019-09-04T09:20:18.405Z",sageScore:5,diffs:[{njs:12,offset:0,notes:679,bombs:0,obstacles:33,nps:3.215,length:616,characteristic:"Standard",difficulty:"Hard",events:5807,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:211.2,paritySummary:{errors:54,warns:41,resets:0}},{njs:14,offset:0,notes:913,bombs:0,obstacles:27,nps:4.323,length:616,characteristic:"Standard",difficulty:"Expert",events:5807,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:211.2,paritySummary:{errors:20,warns:21,resets:0}},{njs:16,offset:0,notes:1038,bombs:0,obstacles:30,nps:4.915,length:616,characteristic:"Standard",difficulty:"ExpertPlus",events:5807,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:211.2,paritySummary:{errors:33,warns:43,resets:0}}],downloadURL:"https://cdn.beatsaver.com/605da022c1e9688e122688e3abf3ddc8321299a8.zip",coverURL:"https://cdn.beatsaver.com/605da022c1e9688e122688e3abf3ddc8321299a8.jpg",previewURL:"https://cdn.beatsaver.com/605da022c1e9688e122688e3abf3ddc8321299a8.mp3"}],createdAt:"2019-09-04T09:20:18.405Z",updatedAt:"2019-09-04T09:20:18.405Z",lastPublishedAt:"2019-09-04T09:20:18.405Z"},{id:"199e",name:"Super Mario 64 - Dire, Dire Docks (Wisp X Remix)",description:'Normal/Expert/Expert+ | BPM: 130 | Length: 3:23 | Notes: 376/688/1020\r\n\r\nI was just wondering how "Dire, Dire Docks" would look like in Beat Saber..\r\nThis is the result!\r\n\r\nLighting done with "Lightmap V2"\r\n\r\n12th Map.\r\n\r\nPreview:\r\nhttps://www.youtube.com/watch?v=dRprfDRvJJY\r\nSong:\r\nhttps://www.youtube.com/watch?v=56eIZKyhM6c',uploader:{id:4285825,name:"fefeland",uniqueSet:!0,hash:"5cff0b7398cc5a672c84f3bb",avatar:"https://cdn.beatsaver.com/avatar/119360573191225344.png",type:"DISCORD"},metadata:{bpm:130,duration:203,songName:"Dire, Dire Docks (Wisp X Remix)",songSubName:"Super Mario 64",songAuthorName:"FEFELAND",levelAuthorName:"fefeland"},stats:{plays:0,downloads:2005,upvotes:1351,downvotes:32,score:.9228},uploaded:"2018-10-10T20:02:06Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"b8d647a30f15e33d77808f9a143f02e3af6016b4",key:"199e",state:"Published",createdAt:"2018-10-10T20:02:06Z",sageScore:5,diffs:[{njs:8,offset:0,notes:376,bombs:0,obstacles:50,nps:1.958,length:416,characteristic:"Standard",difficulty:"Normal",events:831,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:192,paritySummary:{errors:72,warns:22,resets:0}},{njs:12,offset:0,notes:688,bombs:0,obstacles:51,nps:3.583,length:416,characteristic:"Standard",difficulty:"Expert",events:831,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:192,paritySummary:{errors:46,warns:44,resets:0}},{njs:15,offset:0,notes:1020,bombs:0,obstacles:48,nps:5.313,length:416,characteristic:"Standard",difficulty:"ExpertPlus",events:831,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:192,paritySummary:{errors:36,warns:32,resets:0}}],downloadURL:"https://cdn.beatsaver.com/b8d647a30f15e33d77808f9a143f02e3af6016b4.zip",coverURL:"https://cdn.beatsaver.com/b8d647a30f15e33d77808f9a143f02e3af6016b4.jpg",previewURL:"https://cdn.beatsaver.com/b8d647a30f15e33d77808f9a143f02e3af6016b4.mp3"}],createdAt:"2018-10-10T20:02:06Z",updatedAt:"2018-10-10T20:02:06Z",lastPublishedAt:"2018-10-10T20:02:06Z"},{id:"65bb",name:"TWICE - Feel Special",description:"New Twice map by Aggrogahu and myself. I hope you enjoy it!\n\nKikaeaeon: Expert/Expert+\nAggrogahu: Hard/Normal",uploader:{id:4285107,name:"kikaeaeon",uniqueSet:!0,hash:"5cff0b7498cc5a672c85109b",avatar:"https://cdn.beatsaver.com/avatar/103715469822816256.png",type:"DISCORD"},metadata:{bpm:129,duration:208,songName:"Feel Special",songSubName:"",songAuthorName:"TWICE",levelAuthorName:"KikaeAeon & Aggrogahu"},stats:{plays:0,downloads:5121,upvotes:1156,downvotes:24,score:.9226},uploaded:"2019-09-25T05:14:20.078Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"4644faf2fbb084c248d7e0f8d3592829ec7e19d0",key:"65bb",state:"Published",createdAt:"2019-09-25T05:14:20.078Z",sageScore:4,diffs:[{njs:10,offset:1,notes:351,bombs:0,obstacles:17,nps:1.747,length:432,characteristic:"Standard",difficulty:"Normal",events:1268,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:200.93,paritySummary:{errors:58,warns:30,resets:0}},{njs:10,offset:1,notes:552,bombs:0,obstacles:17,nps:2.747,length:432,characteristic:"Standard",difficulty:"Hard",events:1268,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:200.93,paritySummary:{errors:51,warns:36,resets:0}},{njs:12,offset:0,notes:762,bombs:0,obstacles:16,nps:3.792,length:432,characteristic:"Standard",difficulty:"Expert",events:1266,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:200.93,paritySummary:{errors:16,warns:18,resets:0}},{njs:16,offset:0,notes:952,bombs:0,obstacles:36,nps:4.738,length:432,characteristic:"Standard",difficulty:"ExpertPlus",events:1266,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:200.93,paritySummary:{errors:9,warns:9,resets:0}}],downloadURL:"https://cdn.beatsaver.com/4644faf2fbb084c248d7e0f8d3592829ec7e19d0.zip",coverURL:"https://cdn.beatsaver.com/4644faf2fbb084c248d7e0f8d3592829ec7e19d0.jpg",previewURL:"https://cdn.beatsaver.com/4644faf2fbb084c248d7e0f8d3592829ec7e19d0.mp3"}],createdAt:"2019-09-25T05:14:20.078Z",updatedAt:"2019-09-25T05:14:20.078Z",lastPublishedAt:"2019-09-25T05:14:20.078Z"},{id:"48ff",name:"Sewayaki Kisune no Senko-san OP - Koyoi MofuMofu!!",description:"Twitter: https://twitter.com/Dack731",uploader:{id:4285250,name:"dack",uniqueSet:!0,hash:"5cff0b7598cc5a672c852c6f",avatar:"https://cdn.beatsaver.com/avatar/297344689798119424.png",type:"DISCORD"},metadata:{bpm:103,duration:91,songName:"Koyoi MofuMofu",songSubName:"Agasa.K",songAuthorName:"Dack",levelAuthorName:"Dack"},stats:{plays:0,downloads:2294,upvotes:1317,downvotes:31,score:.9225},uploaded:"2019-04-28T12:14:58Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"52cba6c4432bca35081296a7e98be638f3f69c65",key:"48ff",state:"Published",createdAt:"2019-04-28T12:14:58Z",sageScore:2,diffs:[{njs:12,offset:0,notes:177,bombs:0,obstacles:0,nps:2.074,length:146.5,characteristic:"Standard",difficulty:"Normal",events:146,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:85.34,paritySummary:{errors:10,warns:5,resets:0}},{njs:13,offset:0,notes:256,bombs:0,obstacles:0,nps:3,length:146.5,characteristic:"Standard",difficulty:"Hard",events:146,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:85.34,paritySummary:{errors:13,warns:13,resets:0}},{njs:14,offset:0,notes:300,bombs:0,obstacles:0,nps:3.515,length:146.5,characteristic:"Standard",difficulty:"Expert",events:146,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:85.34,paritySummary:{errors:6,warns:7,resets:0}},{njs:15,offset:0,notes:315,bombs:0,obstacles:0,nps:3.691,length:146.5,characteristic:"Standard",difficulty:"ExpertPlus",events:146,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:85.34,paritySummary:{errors:7,warns:8,resets:0}}],downloadURL:"https://cdn.beatsaver.com/52cba6c4432bca35081296a7e98be638f3f69c65.zip",coverURL:"https://cdn.beatsaver.com/52cba6c4432bca35081296a7e98be638f3f69c65.jpg",previewURL:"https://cdn.beatsaver.com/52cba6c4432bca35081296a7e98be638f3f69c65.mp3"}],createdAt:"2019-04-28T12:14:58Z",updatedAt:"2019-04-28T12:14:58Z",lastPublishedAt:"2019-04-28T12:14:58Z"},{id:"27f6",name:'We All Lift Together - Keith Power (From "Warframe")',description:"Welcome to Fortuna. Explore the frigid landscape of Venus populated with new Corpus threats, subterranean mysteries and an ecosystem on the brink of destruction.\r\nPlaying movie (Hard) : https://youtu.be/M1s6G4ib5Ew",uploader:{id:43083,name:"trgsonic",uniqueSet:!0,hash:"5cff0b7598cc5a672c852c78",avatar:"https://www.gravatar.com/avatar/5cff0b7598cc5a672c852c78?d=retro",type:"SIMPLE"},metadata:{bpm:134,duration:155,songName:"We All Lift Together",songSubName:"",songAuthorName:"Keith Power",levelAuthorName:"TRGsonic"},stats:{plays:0,downloads:1436,upvotes:736,downvotes:8,score:.9224},uploaded:"2018-12-25T14:00:28Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"050d447ebe73685cdb5515867dd7f065e0001fb7",key:"27f6",state:"Published",createdAt:"2018-12-25T14:00:28Z",sageScore:6,diffs:[{njs:10,offset:0,notes:197,bombs:0,obstacles:24,nps:1.375,length:320,characteristic:"Standard",difficulty:"Easy",events:144,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:143.284,paritySummary:{errors:37,warns:23,resets:0}},{njs:10.01,offset:0,notes:304,bombs:6,obstacles:23,nps:2.122,length:320,characteristic:"Standard",difficulty:"Normal",events:144,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:143.284,paritySummary:{errors:30,warns:21,resets:0}},{njs:10.05,offset:0,notes:360,bombs:8,obstacles:24,nps:2.513,length:320,characteristic:"Standard",difficulty:"Hard",events:144,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:143.284,paritySummary:{errors:34,warns:29,resets:0}}],downloadURL:"https://cdn.beatsaver.com/050d447ebe73685cdb5515867dd7f065e0001fb7.zip",coverURL:"https://cdn.beatsaver.com/050d447ebe73685cdb5515867dd7f065e0001fb7.jpg",previewURL:"https://cdn.beatsaver.com/050d447ebe73685cdb5515867dd7f065e0001fb7.mp3"}],createdAt:"2018-12-25T14:00:28Z",updatedAt:"2018-12-25T14:00:28Z",lastPublishedAt:"2018-12-25T14:00:28Z"},{id:"7b5f",name:"My Stick! - Bad Lip Reading (Standard, 90 degree)",description:"Happy New Year 2020! I am a huge fan of the Bad Lip Reading Star Wars songs. I probably account for half of the 100s of millions of views they have received on youtube! If you're not familiar with them, go check them out! This newest one - My Stick! - just came out a few days ago and as soon as I heard it, I wanted to map it. So here it is - Easy, Normal, Hard, Expert, and Expert 90 degree difficulties available. \n\nBig thanks to my playtesters Maybeemae, MajorPickle, and Brentastic! You guys really help put the polish on these maps!\n\nhttps://www.youtube.com/watch?v=372GmcbFwCI",uploader:{id:78593,name:"techbutterfly",uniqueSet:!0,hash:"5cff0b7798cc5a672c8566f7",avatar:"https://cdn.beatsaver.com/avatar/527111497617506304.png",type:"DISCORD"},metadata:{bpm:126,duration:205,songName:"My Stick",songSubName:"",songAuthorName:"Bad Lip Reading",levelAuthorName:"TechButterfly"},stats:{plays:0,downloads:2769,upvotes:1048,downvotes:20,score:.9223},uploaded:"2020-01-01T01:33:52.347Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"4837ebdf91168a5e26eb5beebda03ebef31e6841",key:"7b5f",state:"Published",createdAt:"2020-01-01T01:33:52.347Z",sageScore:4,diffs:[{njs:8,offset:0,notes:173,bombs:14,obstacles:38,nps:.881,length:412.5,characteristic:"Standard",difficulty:"Easy",events:795,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:196.429,paritySummary:{errors:47,warns:21,resets:5}},{njs:10,offset:0,notes:292,bombs:22,obstacles:38,nps:1.458,length:420.5,characteristic:"Standard",difficulty:"Normal",events:795,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:200.238,paritySummary:{errors:48,warns:72,resets:10}},{njs:13,offset:0,notes:572,bombs:22,obstacles:38,nps:2.857,length:420.5,characteristic:"Standard",difficulty:"Hard",events:795,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:200.238,paritySummary:{errors:33,warns:84,resets:10}},{njs:13,offset:0,notes:683,bombs:22,obstacles:38,nps:3.411,length:420.5,characteristic:"Standard",difficulty:"Expert",events:795,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:200.238,paritySummary:{errors:31,warns:31,resets:9}},{njs:13,offset:0,notes:577,bombs:22,obstacles:7,nps:2.882,length:420.5,characteristic:"90Degree",difficulty:"Expert",events:1050,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:200.238,paritySummary:{errors:34,warns:85,resets:10}}],downloadURL:"https://cdn.beatsaver.com/4837ebdf91168a5e26eb5beebda03ebef31e6841.zip",coverURL:"https://cdn.beatsaver.com/4837ebdf91168a5e26eb5beebda03ebef31e6841.jpg",previewURL:"https://cdn.beatsaver.com/4837ebdf91168a5e26eb5beebda03ebef31e6841.mp3"}],createdAt:"2020-01-01T01:33:52.347Z",updatedAt:"2020-01-01T01:33:52.347Z",lastPublishedAt:"2020-01-01T01:33:52.347Z"},{id:"9137",name:"Uno - Little Big",description:"https://www.youtube.com/watch?v=8hiHXbvsT8o",uploader:{id:4285760,name:"okdisplay",uniqueSet:!0,hash:"5cff0b7398cc5a672c84eda2",avatar:"https://cdn.beatsaver.com/avatar/404020982676717570.png",type:"DISCORD"},metadata:{bpm:142,duration:163,songName:"UNO",songSubName:"",songAuthorName:"Little Big",levelAuthorName:"OkDisplay"},stats:{plays:0,downloads:1734,upvotes:997,downvotes:18,score:.9223},uploaded:"2020-03-18T02:49:03.418Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"359433e3d701cc06b47ac0d7fbb9b077cd970c01",key:"9137",state:"Published",createdAt:"2020-03-18T02:49:03.418Z",sageScore:4,diffs:[{njs:15,offset:0,notes:706,bombs:0,obstacles:0,nps:4.54,length:368,characteristic:"Standard",difficulty:"Expert",events:1500,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:155.493,paritySummary:{errors:13,warns:14,resets:0}},{njs:17,offset:0,notes:705,bombs:9,obstacles:23,nps:4.534,length:368,characteristic:"Standard",difficulty:"ExpertPlus",events:1464,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:155.493,paritySummary:{errors:11,warns:8,resets:0}}],downloadURL:"https://cdn.beatsaver.com/359433e3d701cc06b47ac0d7fbb9b077cd970c01.zip",coverURL:"https://cdn.beatsaver.com/359433e3d701cc06b47ac0d7fbb9b077cd970c01.jpg",previewURL:"https://cdn.beatsaver.com/359433e3d701cc06b47ac0d7fbb9b077cd970c01.mp3"}],createdAt:"2020-03-18T02:49:03.418Z",updatedAt:"2020-03-18T02:49:03.418Z",lastPublishedAt:"2020-03-18T02:49:03.418Z"},{id:"7310",name:"The Struts - Body Talks ft. Kesha",description:"There is a significant lack of The Struts maps out there, so figured I'd get the ball rolling with this one. \n\nThe expert+ map was made by the incredible ConnorJC. He has a great mapping style and regularly uploads charts in the expert to expert+ range. You can check him out here:\nhttps://www.youtube.com/channel/UC_XqKPpfBiWEYZ-dhcKRPBw\nhttps://bsaber.com/members/connorjc/\n\nAll other difficulties are included as well\n\nEnjoy!",uploader:{id:4785,name:"stumi",uniqueSet:!1,hash:"5cff0b7398cc5a672c84f720",avatar:"https://www.gravatar.com/avatar/5cff0b7398cc5a672c84f720?d=retro",type:"SIMPLE"},metadata:{bpm:186,duration:176,songName:"Body Talks",songSubName:"Ft. Kesha",songAuthorName:"The Struts",levelAuthorName:"Stumi & ConnorJC"},stats:{plays:0,downloads:1554,upvotes:760,downvotes:9,score:.9223},uploaded:"2019-12-01T13:43:45.996Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"ed72bd798a0d05592ff63a5ad844cdff01a76800",key:"7310",state:"Published",createdAt:"2019-12-01T13:43:45.996Z",sageScore:6,diffs:[{njs:12,offset:0,notes:130,bombs:0,obstacles:54,nps:.766,length:526,characteristic:"Standard",difficulty:"Easy",events:2193,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:169.677,paritySummary:{errors:26,warns:14,resets:0}},{njs:12,offset:0,notes:218,bombs:4,obstacles:60,nps:1.285,length:526,characteristic:"Standard",difficulty:"Normal",events:2193,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:169.677,paritySummary:{errors:37,warns:26,resets:0}},{njs:14,offset:.8,notes:446,bombs:7,obstacles:65,nps:2.614,length:529,characteristic:"Standard",difficulty:"Hard",events:2193,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:170.645,paritySummary:{errors:20,warns:10,resets:5}},{njs:16,offset:.4,notes:704,bombs:22,obstacles:67,nps:4.115,length:530.333,characteristic:"Standard",difficulty:"Expert",events:2193,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:171.075,paritySummary:{errors:5,warns:7,resets:1}},{njs:19,offset:.25,notes:777,bombs:6,obstacles:25,nps:4.566,length:527.5,characteristic:"Standard",difficulty:"ExpertPlus",events:2193,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:170.161,paritySummary:{errors:7,warns:8,resets:2}}],downloadURL:"https://cdn.beatsaver.com/ed72bd798a0d05592ff63a5ad844cdff01a76800.zip",coverURL:"https://cdn.beatsaver.com/ed72bd798a0d05592ff63a5ad844cdff01a76800.jpg",previewURL:"https://cdn.beatsaver.com/ed72bd798a0d05592ff63a5ad844cdff01a76800.mp3"}],createdAt:"2019-12-01T13:43:45.996Z",updatedAt:"2019-12-01T13:43:45.996Z",lastPublishedAt:"2019-12-01T13:43:45.996Z"},{id:"38ec",name:"The Bad Touch - Bloodhound Gang - BT90",description:'This map is part of a 90s songpack. Search "BT90" to find all the songs in the songpack.\r\nMap is created by Heisenberg_IRL. Check out https://www.twitch.tv/heisenberg_irl\r\nLights are made by XypherOrion. Check out https://www.twitch.tv/xypherorion\r\n\r\nSpecial thanks to Fafurion for feedback and playtesting',uploader:{id:27983,name:"heisenbergirl",uniqueSet:!0,hash:"5cff0b7298cc5a672c84ec30",avatar:"https://www.gravatar.com/avatar/5cff0b7298cc5a672c84ec30?d=retro",type:"SIMPLE"},metadata:{bpm:123,duration:234,songName:"The Bad Touch",songSubName:"Bloodhound Gang [BT90]",songAuthorName:"Heisenberg & XypherOrion",levelAuthorName:"heisenbergirl"},stats:{plays:0,downloads:5177,upvotes:2043,downvotes:65,score:.9223},uploaded:"2019-02-23T13:21:25Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"d5e0ebff74ee79f517bbb580f3c55e389b09bfa0",key:"38ec",state:"Published",createdAt:"2019-02-23T13:21:25Z",sageScore:6,diffs:[{njs:14,offset:0,notes:809,bombs:0,obstacles:12,nps:3.694,length:449,characteristic:"Standard",difficulty:"Expert",events:2108,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:219.024,paritySummary:{errors:55,warns:110,resets:0}},{njs:16,offset:0,notes:1062,bombs:2,obstacles:0,nps:4.849,length:449,characteristic:"Standard",difficulty:"ExpertPlus",events:2108,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:219.024,paritySummary:{errors:113,warns:137,resets:2}}],downloadURL:"https://cdn.beatsaver.com/d5e0ebff74ee79f517bbb580f3c55e389b09bfa0.zip",coverURL:"https://cdn.beatsaver.com/d5e0ebff74ee79f517bbb580f3c55e389b09bfa0.jpg",previewURL:"https://cdn.beatsaver.com/d5e0ebff74ee79f517bbb580f3c55e389b09bfa0.mp3"}],createdAt:"2019-02-23T13:21:25Z",updatedAt:"2019-02-23T13:21:25Z",lastPublishedAt:"2019-02-23T13:21:25Z"},{id:"abbf",name:"PSYQUI feat. Marpril - Girly Cupid [Noodle Extensions]",description:"Expert Preview: https://www.youtube.com/watch?v=oD8JbrtlhZc\n\nSubmission #47 | 2nd place in the Building Blocks 2020 mapping contest. I hope you enjoy my first dive into Noodle Extensions and Chroma. This was a blast to make!\n\nComments? Like it? Hate it? Let me know on Discord @Bloodcloak#5725 !",uploader:{id:71661,name:"bloodcloak",uniqueSet:!0,hash:"5cff0b7698cc5a672c8551d3",avatar:"https://cdn.beatsaver.com/avatar/205707707187986442.png",type:"DISCORD"},metadata:{bpm:133,duration:244,songName:"Girly Cupid",songSubName:"feat. Marpril",songAuthorName:"PSYQUI",levelAuthorName:"Bloodcloak"},stats:{plays:0,downloads:4637,upvotes:1327,downvotes:32,score:.9222},uploaded:"2020-05-29T01:13:29.257Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"09083ec4540755cac095737c4af6af2910c4e856",key:"abbf",state:"Published",createdAt:"2020-05-29T01:13:29.257Z",sageScore:3,diffs:[{njs:18,offset:-.2,notes:764,bombs:0,obstacles:36331,nps:3.232,length:524,characteristic:"Standard",difficulty:"Expert",events:3539,chroma:!0,me:!1,ne:!0,cinema:!1,seconds:236.391,paritySummary:{errors:28,warns:16,resets:0}}],downloadURL:"https://cdn.beatsaver.com/09083ec4540755cac095737c4af6af2910c4e856.zip",coverURL:"https://cdn.beatsaver.com/09083ec4540755cac095737c4af6af2910c4e856.jpg",previewURL:"https://cdn.beatsaver.com/09083ec4540755cac095737c4af6af2910c4e856.mp3"}],createdAt:"2020-05-29T01:13:29.257Z",updatedAt:"2020-05-29T01:13:29.257Z",lastPublishedAt:"2020-05-29T01:13:29.257Z"},{id:"1f90",name:"RIOT - Overkill",description:"",uploader:{id:408,name:"nuketime",uniqueSet:!0,hash:"5cff0b7498cc5a672c8507f7",avatar:"https://cdn.beatsaver.com/avatar/175811186007343104.png",type:"DISCORD"},metadata:{bpm:174,duration:308,songName:"Overkill",songSubName:"RIOT",songAuthorName:"Nuketime",levelAuthorName:"Nuketime"},stats:{plays:0,downloads:7566,upvotes:8186,downvotes:415,score:.9222},uploaded:"2018-11-10T20:57:38Z",automapper:!1,ranked:!0,qualified:!1,versions:[{hash:"2fddb136bda7f9e29b4cb6621d6d8e0f8a43b126",key:"1f90",state:"Published",createdAt:"2018-11-10T20:57:38Z",sageScore:5,diffs:[{njs:17,offset:0,notes:1812,bombs:108,obstacles:132,nps:6.121,length:858.5,characteristic:"Standard",difficulty:"ExpertPlus",events:3602,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:296.034,paritySummary:{errors:85,warns:90,resets:0},stars:7.32}],downloadURL:"https://cdn.beatsaver.com/2fddb136bda7f9e29b4cb6621d6d8e0f8a43b126.zip",coverURL:"https://cdn.beatsaver.com/2fddb136bda7f9e29b4cb6621d6d8e0f8a43b126.jpg",previewURL:"https://cdn.beatsaver.com/2fddb136bda7f9e29b4cb6621d6d8e0f8a43b126.mp3"}],createdAt:"2018-11-10T20:57:38Z",updatedAt:"2018-11-10T20:57:38Z",lastPublishedAt:"2018-11-10T20:57:38Z"},{id:"58e",name:"History Maker - Dean Fujioka",description:"Expert / Hard / Normal | Get your Beat Saber -- on ICE!!! The lighting for this is top notch ;)\r\n\r\nVideo: https://youtu.be/ZS8YwPvKLgw\r\n\r\nThis map is best practice compliant: https://bit.ly/2LjbURw",uploader:{id:44595,name:"awfulnaut",uniqueSet:!0,hash:"5cff0b7398cc5a672c84edac",avatar:"https://www.gravatar.com/avatar/5cff0b7398cc5a672c84edac?d=retro",type:"SIMPLE"},metadata:{bpm:201,duration:187,songName:"History Maker",songSubName:"Dean Fujioka",songAuthorName:"Awfulnaut",levelAuthorName:"awfulnaut"},stats:{plays:0,downloads:2623,upvotes:1327,downvotes:32,score:.9222},uploaded:"2018-06-17T19:41:50Z",automapper:!1,ranked:!0,qualified:!1,versions:[{hash:"998f9b0a3e8b85ad697e8a7aa2c8b7d1f70936ce",key:"58e",state:"Published",createdAt:"2018-06-17T19:41:50Z",sageScore:6,diffs:[{njs:10,offset:0,notes:513,bombs:12,obstacles:27,nps:2.836,length:606,characteristic:"Standard",difficulty:"Normal",events:1153,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:180.896,paritySummary:{errors:86,warns:4,resets:0},stars:1.77},{njs:10,offset:0,notes:566,bombs:0,obstacles:27,nps:3.129,length:606,characteristic:"Standard",difficulty:"Hard",events:1153,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:180.896,paritySummary:{errors:47,warns:48,resets:0}},{njs:10,offset:0,notes:566,bombs:0,obstacles:27,nps:3.129,length:606,characteristic:"Standard",difficulty:"Expert",events:1153,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:180.896,paritySummary:{errors:43,warns:35,resets:0}}],downloadURL:"https://cdn.beatsaver.com/998f9b0a3e8b85ad697e8a7aa2c8b7d1f70936ce.zip",coverURL:"https://cdn.beatsaver.com/998f9b0a3e8b85ad697e8a7aa2c8b7d1f70936ce.jpg",previewURL:"https://cdn.beatsaver.com/998f9b0a3e8b85ad697e8a7aa2c8b7d1f70936ce.mp3"}],createdAt:"2018-06-17T19:41:50Z",updatedAt:"2018-06-17T19:41:50Z",lastPublishedAt:"2018-06-17T19:41:50Z"},{id:"14bd",name:"Starship - We Built This City",description:"Collab map between BennyDaBeast, Rustic and GreatYazer\r\nExper / Hard / Normal\r\nhttps://www.youtube.com/watch?v=KnLnUBIbfbM\r\nhttps://streamable.com/s8xvc",uploader:{id:12996,name:"rustic",uniqueSet:!0,hash:"5cff0b7298cc5a672c84e8c4",avatar:"https://www.gravatar.com/avatar/5cff0b7298cc5a672c84e8c4?d=retro",type:"SIMPLE"},metadata:{bpm:143,duration:298,songName:"We Built this City",songSubName:"Starship",songAuthorName:"GreatYazer, Rustic, BennyDaBeast",levelAuthorName:"rustic"},stats:{plays:0,downloads:9482,upvotes:3568,downvotes:145,score:.9221},uploaded:"2018-09-12T19:05:18Z",automapper:!1,ranked:!0,qualified:!1,versions:[{hash:"477fac9561e8931c7efaf49faa065611348f159d",key:"14bd",state:"Published",createdAt:"2018-09-12T19:05:18Z",sageScore:5,diffs:[{njs:10,offset:0,notes:472,bombs:26,obstacles:32,nps:1.64,length:686,characteristic:"Standard",difficulty:"Normal",events:1843,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:287.832,paritySummary:{errors:64,warns:56,resets:0},stars:1.03},{njs:10,offset:0,notes:759,bombs:26,obstacles:34,nps:2.633,length:687,characteristic:"Standard",difficulty:"Hard",events:1843,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:288.252,paritySummary:{errors:69,warns:90,resets:0},stars:1.66},{njs:11,offset:0,notes:967,bombs:26,obstacles:36,nps:3.355,length:687,characteristic:"Standard",difficulty:"Expert",events:1843,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:288.252,paritySummary:{errors:71,warns:126,resets:0}}],downloadURL:"https://cdn.beatsaver.com/477fac9561e8931c7efaf49faa065611348f159d.zip",coverURL:"https://cdn.beatsaver.com/477fac9561e8931c7efaf49faa065611348f159d.jpg",previewURL:"https://cdn.beatsaver.com/477fac9561e8931c7efaf49faa065611348f159d.mp3"}],createdAt:"2018-09-12T19:05:18Z",updatedAt:"2018-09-12T19:05:18Z",lastPublishedAt:"2018-09-12T19:05:18Z"},{id:"10e6",name:"We Wont Be Alone",description:"And here it is! \r\n\r\nAnother highly requested map!\r\n\r\nEnjoy to your hearts content!\r\n\r\n(P.s Thanks to everyone who supports me in my mapping endeavors and appreciate my work! it means a lot to me!)",uploader:{id:4289111,name:"blackblazon",uniqueSet:!0,hash:"5cff0b7398cc5a672c84ef34",avatar:"https://cdn.beatsaver.com/avatar/127162370538733568.png",type:"DISCORD"},metadata:{bpm:175,duration:236,songName:"We Wont Be Alone",songSubName:"Feint",songAuthorName:"BlackBlazon",levelAuthorName:"blackblazon"},stats:{plays:0,downloads:1611,upvotes:1677,downvotes:48,score:.9221},uploaded:"2018-08-20T13:09:23Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"fdb563492b79e57464424f73aa95ccc719f44576",key:"10e6",state:"Published",createdAt:"2018-08-20T13:09:23Z",sageScore:5,diffs:[{njs:10,offset:0,notes:1017,bombs:0,obstacles:0,nps:4.461,length:665,characteristic:"Standard",difficulty:"Expert",events:1043,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:228,paritySummary:{errors:15,warns:5,resets:0}},{njs:15,offset:0,notes:1017,bombs:0,obstacles:0,nps:4.461,length:665,characteristic:"Standard",difficulty:"ExpertPlus",events:1043,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:228,paritySummary:{errors:15,warns:5,resets:0}}],downloadURL:"https://cdn.beatsaver.com/fdb563492b79e57464424f73aa95ccc719f44576.zip",coverURL:"https://cdn.beatsaver.com/fdb563492b79e57464424f73aa95ccc719f44576.jpg",previewURL:"https://cdn.beatsaver.com/fdb563492b79e57464424f73aa95ccc719f44576.mp3"}],createdAt:"2018-08-20T13:09:23Z",updatedAt:"2018-08-20T13:09:23Z",lastPublishedAt:"2018-08-20T13:09:23Z"},{id:"1a0b6",name:"[Electro Swing Pack] The Electric Swing Circus - Empires",description:"Nixie Presents: Electro Swing Pack!\n\n10 electro swing songs with expert and expert+ diffs to make your booty swing!\n\nGet The Pack: \nhttps://bsaber.com/electro-swing-pack/\n\nMap Gameplay:\nhttps://youtu.be/WJy6_2cTPYg\n\nComplete Pack Playthrough:\nhttps://youtu.be/yj9rw4MEh7s\n\nHeyya! After looking for some dancey electro swing maps, I noticed that there barely are any!\nSo I took matters into my own hands, learning mapping basically from scratch,\nscrapping my first failed attempts and then finally making a map that was good.\nI found it so fun that I ended up making 9 more maps,\nand fine tuned them with the help of the testplayers in BSMG,\nas well as the lovely curators from the bsaber discord.\n\nHuge thanks in particular to:\nMonstor, Bearly, Noxn, Bullet, Vaser888, Tocxx, Jafdy, Storm Knight and Pixelguy!\n\nIf you want to talk to me, here is my Discord:\nNixie.Korten#6944",uploader:{id:4286374,name:"nixiekorten",uniqueSet:!0,hash:"6096752e12772e0006e2f7e6",avatar:"https://cdn.beatsaver.com/avatar/840550221690699776.png",type:"DISCORD"},metadata:{bpm:120,duration:173,songName:"Empires",songSubName:"",songAuthorName:"The Electric Swing Circus",levelAuthorName:"Nixie.Korten"},stats:{plays:0,downloads:12715,upvotes:577,downvotes:3,score:.922},uploaded:"2021-07-08T15:24:55.769Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"cecc89118b3a75ea7d65ceff5949b3ef19fea716",key:"1a0b6",state:"Published",createdAt:"2021-07-08T15:24:55.769Z",sageScore:4,diffs:[{njs:16,offset:-.5,notes:522,bombs:0,obstacles:24,nps:3.173,length:329,characteristic:"Standard",difficulty:"Expert",events:2051,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:164.5,paritySummary:{errors:0,warns:0,resets:0}},{njs:19,offset:.25,notes:823,bombs:0,obstacles:0,nps:5.003,length:329,characteristic:"Standard",difficulty:"ExpertPlus",events:2051,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:164.5,paritySummary:{errors:0,warns:0,resets:0}}],downloadURL:"https://cdn.beatsaver.com/cecc89118b3a75ea7d65ceff5949b3ef19fea716.zip",coverURL:"https://cdn.beatsaver.com/cecc89118b3a75ea7d65ceff5949b3ef19fea716.jpg",previewURL:"https://cdn.beatsaver.com/cecc89118b3a75ea7d65ceff5949b3ef19fea716.mp3"}],createdAt:"2021-07-08T15:24:55.769Z",updatedAt:"2021-07-08T15:24:55.769Z",lastPublishedAt:"2021-07-08T15:24:55.769Z"},{id:"97ec",name:"TheFatRat ft. Laura Brehm - MAYDAY (Nightcore Mix)",description:"#214\n\nYoutube Preview : https://youtu.be/YuAvugqwLiA",uploader:{id:4284588,name:"rigid",uniqueSet:!0,hash:"5cff0b7598cc5a672c852224",avatar:"https://cdn.beatsaver.com/avatar/295613108947386368.png",type:"DISCORD"},metadata:{bpm:173,duration:217,songName:"MAYDAY (Nightcore Mix)",songSubName:"",songAuthorName:"TheFatRat ft. Laura Brehm",levelAuthorName:"Rigid"},stats:{plays:0,downloads:1384,upvotes:782,downvotes:10,score:.922},uploaded:"2020-04-06T03:03:12.881Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"596010af1d16182372e2145d3b1687ecfed46387",key:"97ec",state:"Published",createdAt:"2020-04-06T03:03:12.881Z",sageScore:4,diffs:[{njs:16,offset:0,notes:751,bombs:30,obstacles:128,nps:3.599,length:600,characteristic:"Standard",difficulty:"Expert",events:2311,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:208.092,paritySummary:{errors:0,warns:0,resets:5}}],downloadURL:"https://cdn.beatsaver.com/596010af1d16182372e2145d3b1687ecfed46387.zip",coverURL:"https://cdn.beatsaver.com/596010af1d16182372e2145d3b1687ecfed46387.jpg",previewURL:"https://cdn.beatsaver.com/596010af1d16182372e2145d3b1687ecfed46387.mp3"}],createdAt:"2020-04-06T03:03:12.881Z",updatedAt:"2020-04-06T03:03:12.881Z",lastPublishedAt:"2020-04-06T03:03:12.881Z"},{id:"33c2",name:"Drive By - Train",description:'Another non weeb song, "Drive by" by Train, one of my favorite songs from the early days. Brought it from Itunes a long time ago so it\'s the highest quality file you can get :)',uploader:{id:58338,name:"Joetastic",uniqueSet:!0,hash:"5cff0b7498cc5a672c85050e",avatar:"https://cdn.beatsaver.com/avatar/227767566402191360.png",type:"DISCORD"},metadata:{bpm:122,duration:196,songName:"Drive By",songSubName:"Train",songAuthorName:"Joetastic",levelAuthorName:"Joetastic"},stats:{plays:0,downloads:3897,upvotes:1087,downvotes:22,score:.922},uploaded:"2019-02-05T09:08:27Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"5d3f6821934945c581882c067ef44d7e8c086423",key:"33c2",state:"Published",createdAt:"2019-02-05T09:08:27Z",sageScore:6,diffs:[{njs:15,offset:0,notes:895,bombs:0,obstacles:6,nps:4.795,length:379.5,characteristic:"Standard",difficulty:"Expert",events:1734,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:186.639,paritySummary:{errors:67,warns:85,resets:0}}],downloadURL:"https://cdn.beatsaver.com/5d3f6821934945c581882c067ef44d7e8c086423.zip",coverURL:"https://cdn.beatsaver.com/5d3f6821934945c581882c067ef44d7e8c086423.jpg",previewURL:"https://cdn.beatsaver.com/5d3f6821934945c581882c067ef44d7e8c086423.mp3"}],createdAt:"2019-02-05T09:08:27Z",updatedAt:"2019-02-05T09:08:27Z",lastPublishedAt:"2019-02-05T09:08:27Z"},{id:"edf",name:"VORACITY",description:"enjoy :)",uploader:{id:4285521,name:"ejiejidayo",uniqueSet:!0,hash:"5cff0b7398cc5a672c84fc58",avatar:"https://cdn.beatsaver.com/avatar/224894241279574016.png",type:"DISCORD"},metadata:{bpm:200,duration:221,songName:"VORACITY",songSubName:"OVERLOAD III OP",songAuthorName:"ejiejidayo",levelAuthorName:"ejiejidayo"},stats:{plays:0,downloads:4278,upvotes:3077,downvotes:119,score:.922},uploaded:"2018-08-10T09:36:58Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"7e096457e053dc0ee70fb5d08ed10332e5d5b75b",key:"edf",state:"Published",createdAt:"2018-08-10T09:36:58Z",sageScore:4,diffs:[{njs:10,offset:0,notes:778,bombs:37,obstacles:10,nps:3.723,length:696.5,characteristic:"Standard",difficulty:"Expert",events:827,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:208.95,paritySummary:{errors:117,warns:85,resets:3}}],downloadURL:"https://cdn.beatsaver.com/7e096457e053dc0ee70fb5d08ed10332e5d5b75b.zip",coverURL:"https://cdn.beatsaver.com/7e096457e053dc0ee70fb5d08ed10332e5d5b75b.jpg",previewURL:"https://cdn.beatsaver.com/7e096457e053dc0ee70fb5d08ed10332e5d5b75b.mp3"}],createdAt:"2018-08-10T09:36:58Z",updatedAt:"2018-08-10T09:36:58Z",lastPublishedAt:"2018-08-10T09:36:58Z"},{id:"4f55",name:"Setting Sail, Coming Home (Bastion OST) - Darren Korb",description:"I remade my first map. Now with 75% less mid notes, and 300% more difficulty options! Disclaimer: Easy difficulty is actually Normal.\nSetting Sail, Coming Home is the credits theme for the game Bastion by Supergiant Games. It features vocals by Ashley Barrett and Darren Korb, who sing the verses of Zia and Zulf, respectively. As there are two vocalists in this song, I made two Normal difficulties, which each follow a different vocalist. The Hard and Expert difficulties follow both at the same time. Expert is mostly just a bit more fleshed out Hard, it's not too much more difficult.\nDefinitely check out this game if you haven't played it already.\nThanks to the playtesters Fruhead and CyanSnow on the modding Discord for testing this one.\nSee it played here:\nZia: https://youtu.be/WCcH3Sd6n-Y\nZulf: https://youtu.be/vcu_FX3c3t0\nHard: https://youtu.be/zUvWu9XglNA\nExpert: https://youtu.be/s2E2uvX5lJ4",uploader:{id:12233,name:"wolfb",uniqueSet:!0,hash:"5cff0b7698cc5a672c854e4f",avatar:"https://www.gravatar.com/avatar/5cff0b7698cc5a672c854e4f?d=retro",type:"SIMPLE"},metadata:{bpm:120,duration:164,songName:"Setting Sail, Coming Home",songSubName:"Darren Korb",songAuthorName:"Wolfb",levelAuthorName:"wolfb"},stats:{plays:0,downloads:1272,upvotes:666,downvotes:6,score:.9219},uploaded:"2019-05-27T11:55:36Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"df2178c8d5cfa459861c263934e6a598b15a5452",key:"4f55",state:"Published",createdAt:"2019-05-27T11:55:36Z",sageScore:5,diffs:[{njs:10,offset:0,notes:251,bombs:0,obstacles:11,nps:1.569,length:320,characteristic:"Standard",difficulty:"Easy",events:1099,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:160,paritySummary:{errors:27,warns:5,resets:0}},{njs:10,offset:0,notes:242,bombs:0,obstacles:11,nps:1.513,length:320,characteristic:"Standard",difficulty:"Normal",events:1099,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:160,paritySummary:{errors:26,warns:7,resets:0}},{njs:12,offset:0,notes:368,bombs:0,obstacles:11,nps:2.3,length:320,characteristic:"Standard",difficulty:"Hard",events:1102,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:160,paritySummary:{errors:27,warns:36,resets:0}},{njs:14,offset:0,notes:444,bombs:0,obstacles:11,nps:2.775,length:320,characteristic:"Standard",difficulty:"Expert",events:1104,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:160,paritySummary:{errors:17,warns:37,resets:0}}],downloadURL:"https://cdn.beatsaver.com/df2178c8d5cfa459861c263934e6a598b15a5452.zip",coverURL:"https://cdn.beatsaver.com/df2178c8d5cfa459861c263934e6a598b15a5452.jpg",previewURL:"https://cdn.beatsaver.com/df2178c8d5cfa459861c263934e6a598b15a5452.mp3"}],createdAt:"2019-05-27T11:55:36Z",updatedAt:"2019-05-27T11:55:36Z",lastPublishedAt:"2019-05-27T11:55:36Z"},{id:"1f03",name:"Monster - Skillet (Kole Edit)",description:"2018-11-08: Reupload because of ranking! Scoreboards are unaffected.\r\n\r\nMonster by hard rock band Skillet was a request I got and I found it worthy and fun to make into a Beat Saber map, so here it is!\r\nSong has been edited and re-arranged to be tighter and not too repetitive.\r\n\r\nPreview:\r\nhttps://youtu.be/avTEevEonOA\r\n\r\nBPM: 135\r\nDuration: 1:52\r\nEasy, Normal, Hard and Expert difficulties.\r\n\r\nEasy: 247, 8 obstacles, 4 mines\r\nNormal: 300 notes, 8 obstacles, 8 mines\r\nHard: 423 notes, 8 obstacles, 8 mines\r\nExpert: 437 notes, 8 obstacles, 8 mines\r\n\r\nThanks to Edzo, RaZn, VenclaireVR, squeaksies and Todokete for playtesting!\r\n\r\nEnjoy!",uploader:{id:4285318,name:"kolezan",uniqueSet:!0,hash:"5cff0b7398cc5a672c84fcbb",avatar:"https://cdn.beatsaver.com/avatar/220513618763055106.png",type:"DISCORD"},metadata:{bpm:135,duration:112,songName:"Monster",songSubName:"Skillet",songAuthorName:"Kolezan",levelAuthorName:"Kolezan"},stats:{plays:0,downloads:8892,upvotes:4266,downvotes:185,score:.9219},uploaded:"2018-11-08T21:27:23Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"5730ecc93a6bc9147bda83f7975791a03ba5b90b",key:"1f03",state:"Published",createdAt:"2018-11-08T21:27:23Z",sageScore:4,diffs:[{njs:10.5,offset:0,notes:247,bombs:4,obstacles:8,nps:2.365,length:235,characteristic:"Standard",difficulty:"Easy",events:627,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:104.444,paritySummary:{errors:47,warns:7,resets:2}},{njs:10.5,offset:0,notes:300,bombs:8,obstacles:8,nps:2.872,length:235,characteristic:"Standard",difficulty:"Normal",events:627,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:104.444,paritySummary:{errors:32,warns:20,resets:0}},{njs:11,offset:0,notes:423,bombs:8,obstacles:8,nps:4.05,length:235,characteristic:"Standard",difficulty:"Hard",events:627,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:104.444,paritySummary:{errors:77,warns:51,resets:0}},{njs:11,offset:0,notes:437,bombs:8,obstacles:8,nps:4.184,length:235,characteristic:"Standard",difficulty:"Expert",events:627,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:104.444,paritySummary:{errors:71,warns:71,resets:0}}],downloadURL:"https://cdn.beatsaver.com/5730ecc93a6bc9147bda83f7975791a03ba5b90b.zip",coverURL:"https://cdn.beatsaver.com/5730ecc93a6bc9147bda83f7975791a03ba5b90b.jpg",previewURL:"https://cdn.beatsaver.com/5730ecc93a6bc9147bda83f7975791a03ba5b90b.mp3"}],createdAt:"2018-11-08T21:27:23Z",updatedAt:"2018-11-08T21:27:23Z",lastPublishedAt:"2018-11-08T21:27:23Z"},{id:"15c6",name:"Ghostbusters - Ray Parker Jr",description:"",uploader:{id:4285018,name:"majorpickle",uniqueSet:!0,hash:"5cff0b7398cc5a672c84f792",avatar:"https://cdn.beatsaver.com/avatar/450358937657671680.png",type:"DISCORD"},metadata:{bpm:115.22,duration:246,songName:"Ghostbusters",songSubName:"",songAuthorName:"Ray Parker Jr.",levelAuthorName:"Majorpickle"},stats:{plays:0,downloads:7046,upvotes:1877,downvotes:58,score:.9219},uploaded:"2018-09-19T02:38:07Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"cc424123372e316bd2fc9439bf0972aded811d04",state:"Published",createdAt:"2021-08-27T12:04:43.371828Z",sageScore:5,diffs:[{njs:10,offset:0,notes:651,bombs:15,obstacles:80,nps:2.828,length:442,characteristic:"Standard",difficulty:"Normal",events:3704,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:230.168,paritySummary:{errors:25,warns:25,resets:4}},{njs:11,offset:0,notes:933,bombs:15,obstacles:80,nps:4.035,length:444.031,characteristic:"Standard",difficulty:"Hard",events:3704,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:231.226,paritySummary:{errors:54,warns:62,resets:4}},{njs:15,offset:0,notes:933,bombs:15,obstacles:80,nps:4.035,length:444.031,characteristic:"Standard",difficulty:"Expert",events:3704,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:231.226,paritySummary:{errors:54,warns:62,resets:4}},{njs:13,offset:0,notes:921,bombs:15,obstacles:72,nps:3.983,length:444.031,characteristic:"360Degree",difficulty:"Expert",events:2719,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:231.226,paritySummary:{errors:51,warns:50,resets:6}}],downloadURL:"https://cdn.beatsaver.com/cc424123372e316bd2fc9439bf0972aded811d04.zip",coverURL:"https://cdn.beatsaver.com/cc424123372e316bd2fc9439bf0972aded811d04.jpg",previewURL:"https://cdn.beatsaver.com/cc424123372e316bd2fc9439bf0972aded811d04.mp3"}],createdAt:"2018-09-19T02:38:07Z",updatedAt:"2021-08-27T12:05:13.876602Z",lastPublishedAt:"2021-08-27T12:04:50.582582Z"},{id:"19e23",name:"Home Free - Sea Shanty Medley",description:"Home Free medleys are amazing. This one was kind of a chat request. Cinema included.",uploader:{id:4287802,name:"origintt",uniqueSet:!0,hash:"5ef66418cb25920006b50ff3",avatar:"https://cdn.beatsaver.com/avatar/414156328072773632.png",type:"DISCORD"},metadata:{bpm:99,duration:236,songName:"Sea Shanty Medley",songSubName:"",songAuthorName:"Home Free",levelAuthorName:"OriginTT"},stats:{plays:0,downloads:6705,upvotes:603,downvotes:4,score:.9218},uploaded:"2021-07-04T19:18:25.991Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"1fb8f1cd4a7e05c0a2463e36522298f0b24353ad",key:"19e23",state:"Published",createdAt:"2021-07-04T19:18:25.991Z",sageScore:5,diffs:[{njs:19,offset:0,notes:990,bombs:0,obstacles:20,nps:4.341,length:376.316,characteristic:"Standard",difficulty:"ExpertPlus",events:1464,chroma:!1,me:!1,ne:!1,cinema:!0,seconds:228.07,paritySummary:{errors:5,warns:8,resets:0}}],downloadURL:"https://cdn.beatsaver.com/1fb8f1cd4a7e05c0a2463e36522298f0b24353ad.zip",coverURL:"https://cdn.beatsaver.com/1fb8f1cd4a7e05c0a2463e36522298f0b24353ad.jpg",previewURL:"https://cdn.beatsaver.com/1fb8f1cd4a7e05c0a2463e36522298f0b24353ad.mp3"}],createdAt:"2021-07-04T19:18:25.991Z",updatedAt:"2021-07-04T19:18:25.991Z",lastPublishedAt:"2021-07-04T19:18:25.991Z"},{id:"744f",name:"Fantastic Dreamer (TV Size) [Konosuba! Opening] - Machico",description:"This map was converted from one of my old maps.\n\nFeel free to DM me on discord @Joetastic#2501",uploader:{id:58338,name:"Joetastic",uniqueSet:!0,hash:"5cff0b7498cc5a672c85050e",avatar:"https://cdn.beatsaver.com/avatar/227767566402191360.png",type:"DISCORD"},metadata:{bpm:185,duration:91,songName:"Fantastic Dreamer (TV Size)",songSubName:"",songAuthorName:"Machico",levelAuthorName:"Joetastic"},stats:{plays:0,downloads:4444,upvotes:1290,downvotes:31,score:.9218},uploaded:"2019-12-07T07:21:35.291Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"c86360baf99485e61e18a80d48470c38f0faf4d3",key:"744f",state:"Published",createdAt:"2019-12-07T07:21:35.291Z",sageScore:3,diffs:[{njs:11,offset:0,notes:256,bombs:0,obstacles:0,nps:2.99,length:264,characteristic:"Standard",difficulty:"Hard",events:1956,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:85.622,paritySummary:{errors:20,warns:16,resets:0}},{njs:13,offset:0,notes:371,bombs:0,obstacles:2,nps:4.333,length:264,characteristic:"Standard",difficulty:"Expert",events:1956,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:85.622,paritySummary:{errors:15,warns:25,resets:0}},{njs:15,offset:0,notes:490,bombs:0,obstacles:4,nps:5.723,length:264,characteristic:"Standard",difficulty:"ExpertPlus",events:1956,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:85.622,paritySummary:{errors:20,warns:24,resets:0}}],downloadURL:"https://cdn.beatsaver.com/c86360baf99485e61e18a80d48470c38f0faf4d3.zip",coverURL:"https://cdn.beatsaver.com/c86360baf99485e61e18a80d48470c38f0faf4d3.jpg",previewURL:"https://cdn.beatsaver.com/c86360baf99485e61e18a80d48470c38f0faf4d3.mp3"}],createdAt:"2019-12-07T07:21:35.291Z",updatedAt:"2019-12-07T07:21:35.291Z",lastPublishedAt:"2019-12-07T07:21:35.291Z"},{id:"4a3f",name:"[Anniversary] I Remember - Tristam [Heisenberg]",description:"Part of the Anniversary Song Pack",uploader:{id:37070,name:"anniversaryteam",uniqueSet:!0,hash:"5cff0b7798cc5a672c8565a3",avatar:"https://www.gravatar.com/avatar/5cff0b7798cc5a672c8565a3?d=retro",type:"SIMPLE"},metadata:{bpm:110,duration:231,songName:"I Remember",songSubName:"Tristam",songAuthorName:"Heisenberg",levelAuthorName:"AnniversaryTeam"},stats:{plays:0,downloads:3832,upvotes:2835,downvotes:107,score:.9218},uploaded:"2019-05-03T14:09:51Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"349ef04192948a8404ab7942d2813be3e37cd8fd",key:"4a3f",state:"Published",createdAt:"2019-05-03T14:09:51Z",sageScore:8,diffs:[{njs:11,offset:0,notes:237,bombs:0,obstacles:4,nps:1.137,length:382,characteristic:"Standard",difficulty:"Easy",events:8143,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:208.364,paritySummary:{errors:13,warns:24,resets:0}},{njs:12,offset:0,notes:362,bombs:0,obstacles:6,nps:1.737,length:382,characteristic:"Standard",difficulty:"Normal",events:8143,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:208.364,paritySummary:{errors:50,warns:35,resets:0}},{njs:13,offset:0,notes:465,bombs:0,obstacles:6,nps:2.232,length:382,characteristic:"Standard",difficulty:"Hard",events:8143,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:208.364,paritySummary:{errors:24,warns:36,resets:0}},{njs:14,offset:0,notes:627,bombs:0,obstacles:16,nps:3.009,length:382,characteristic:"Standard",difficulty:"Expert",events:8143,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:208.364,paritySummary:{errors:15,warns:26,resets:0}},{njs:16,offset:0,notes:853,bombs:0,obstacles:17,nps:4.094,length:382,characteristic:"Standard",difficulty:"ExpertPlus",events:8153,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:208.364,paritySummary:{errors:43,warns:111,resets:0}}],downloadURL:"https://cdn.beatsaver.com/349ef04192948a8404ab7942d2813be3e37cd8fd.zip",coverURL:"https://cdn.beatsaver.com/349ef04192948a8404ab7942d2813be3e37cd8fd.jpg",previewURL:"https://cdn.beatsaver.com/349ef04192948a8404ab7942d2813be3e37cd8fd.mp3"}],createdAt:"2019-05-03T14:09:51Z",updatedAt:"2019-05-03T14:09:51Z",lastPublishedAt:"2019-05-03T14:09:51Z"},{id:"17ac",name:"Holiday - Green Day",description:"Preview: https://www.youtube.com/watch?v=3eya5H-dYCc\nAlways enjoy making green day songs! We need more of them on beat saber!\nExpert - Hard - Normal\n\nhttps://twitter.com/TheDownyCat\nhttps://www.twitch.tv/downycat\nhttps://streamlabs.com/downycat/tip",uploader:{id:4285982,name:"downycat",uniqueSet:!0,hash:"5cff0b7398cc5a672c84ede5",avatar:"https://cdn.beatsaver.com/avatar/173538829888782336.png",type:"DISCORD"},metadata:{bpm:146,duration:233,songName:"Holiday",songSubName:"Green Day",songAuthorName:"DownyCat",levelAuthorName:"downycat"},stats:{plays:0,downloads:4708,upvotes:2355,downvotes:82,score:.9218},uploaded:"2018-09-28T14:34:41Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"403efd4b7ec08f129f45f0859323f2d0ee052b34",key:"17ac",state:"Published",createdAt:"2018-09-28T14:34:41Z",sageScore:5,diffs:[{njs:10,offset:0,notes:477,bombs:0,obstacles:42,nps:2.161,length:539,characteristic:"Standard",difficulty:"Normal",events:1703,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:221.507,paritySummary:{errors:45,warns:16,resets:0}},{njs:10,offset:0,notes:857,bombs:0,obstacles:2,nps:3.872,length:540.313,characteristic:"Standard",difficulty:"Hard",events:1703,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:222.046,paritySummary:{errors:40,warns:78,resets:0}},{njs:10,offset:0,notes:1075,bombs:14,obstacles:2,nps:4.747,length:552.875,characteristic:"Standard",difficulty:"Expert",events:1703,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:227.209,paritySummary:{errors:44,warns:69,resets:0}}],downloadURL:"https://cdn.beatsaver.com/403efd4b7ec08f129f45f0859323f2d0ee052b34.zip",coverURL:"https://cdn.beatsaver.com/403efd4b7ec08f129f45f0859323f2d0ee052b34.jpg",previewURL:"https://cdn.beatsaver.com/403efd4b7ec08f129f45f0859323f2d0ee052b34.mp3"}],createdAt:"2018-09-28T14:34:41Z",updatedAt:"2018-09-28T14:34:41Z",lastPublishedAt:"2018-09-28T14:34:41Z"},{id:"5c83",name:"The Kids Arent Alright - The Offspring",description:"Shoutouts to twitch.tv/bearlyj and twitch.tv/whipstickgostop for playtesting!",uploader:{id:4285077,name:"ris",uniqueSet:!0,hash:"5cff0b7598cc5a672c8535df",avatar:"https://cdn.beatsaver.com/avatar/191597992061435904.png",type:"DISCORD"},metadata:{bpm:194,duration:183,songName:"The Kids Arent Alright",songSubName:"",songAuthorName:"The Offspring",levelAuthorName:"Ris"},stats:{plays:0,downloads:5715,upvotes:2235,downvotes:76,score:.9217},uploaded:"2019-08-12T23:40:01.490Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"20986d8f9b32820de9a1953bf11db91abd27db27",key:"5c83",state:"Published",createdAt:"2019-08-12T23:40:01.490Z",sageScore:4,diffs:[{njs:10,offset:1,notes:328,bombs:2,obstacles:3,nps:1.848,length:573.809,characteristic:"Standard",difficulty:"Normal",events:396,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:177.467,paritySummary:{errors:44,warns:50,resets:0}},{njs:12,offset:1,notes:553,bombs:8,obstacles:3,nps:3.116,length:573.809,characteristic:"Standard",difficulty:"Hard",events:396,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:177.467,paritySummary:{errors:70,warns:70,resets:0}},{njs:16,offset:1,notes:909,bombs:8,obstacles:3,nps:5.122,length:573.809,characteristic:"Standard",difficulty:"Expert",events:396,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:177.467,paritySummary:{errors:61,warns:70,resets:0}}],downloadURL:"https://cdn.beatsaver.com/20986d8f9b32820de9a1953bf11db91abd27db27.zip",coverURL:"https://cdn.beatsaver.com/20986d8f9b32820de9a1953bf11db91abd27db27.jpg",previewURL:"https://cdn.beatsaver.com/20986d8f9b32820de9a1953bf11db91abd27db27.mp3"}],createdAt:"2019-08-12T23:40:01.490Z",updatedAt:"2019-08-12T23:40:01.490Z",lastPublishedAt:"2019-08-12T23:40:01.490Z"},{id:"4a45",name:"[Anniversary] Nothing Stopping Me (ft. Kat Nestel) - Vicetone [BennyDaBeast]",description:"Part of the Anniversary Song Pack",uploader:{id:37070,name:"anniversaryteam",uniqueSet:!0,hash:"5cff0b7798cc5a672c8565a3",avatar:"https://www.gravatar.com/avatar/5cff0b7798cc5a672c8565a3?d=retro",type:"SIMPLE"},metadata:{bpm:127,duration:223,songName:"Nothing Stopping Me (ft. Kat Nestel)",songSubName:"Vicetone",songAuthorName:"BennyDaBeast",levelAuthorName:"AnniversaryTeam"},stats:{plays:0,downloads:3386,upvotes:2390,downvotes:84,score:.9217},uploaded:"2019-05-03T14:10:40Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"01e9554069556f1756cbfcf9ac233b68d98b19c8",key:"4a45",state:"Published",createdAt:"2019-05-03T14:10:40Z",sageScore:7,diffs:[{njs:10,offset:0,notes:403,bombs:104,obstacles:22,nps:1.568,length:544,characteristic:"Standard",difficulty:"Easy",events:2514,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:257.008,paritySummary:{errors:61,warns:32,resets:16}},{njs:10,offset:0,notes:481,bombs:104,obstacles:22,nps:1.872,length:544,characteristic:"Standard",difficulty:"Normal",events:2514,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:257.008,paritySummary:{errors:71,warns:49,resets:20}},{njs:12,offset:0,notes:647,bombs:104,obstacles:22,nps:2.517,length:544,characteristic:"Standard",difficulty:"Hard",events:2514,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:257.008,paritySummary:{errors:105,warns:80,resets:18}},{njs:12,offset:0,notes:693,bombs:104,obstacles:22,nps:3.274,length:448,characteristic:"Standard",difficulty:"Expert",events:2514,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:211.654,paritySummary:{errors:65,warns:109,resets:20}},{njs:15,offset:0,notes:914,bombs:96,obstacles:34,nps:4.318,length:448,characteristic:"Standard",difficulty:"ExpertPlus",events:2514,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:211.654,paritySummary:{errors:94,warns:128,resets:20}}],downloadURL:"https://cdn.beatsaver.com/01e9554069556f1756cbfcf9ac233b68d98b19c8.zip",coverURL:"https://cdn.beatsaver.com/01e9554069556f1756cbfcf9ac233b68d98b19c8.jpg",previewURL:"https://cdn.beatsaver.com/01e9554069556f1756cbfcf9ac233b68d98b19c8.mp3"}],createdAt:"2019-05-03T14:10:40Z",updatedAt:"2019-05-03T14:10:40Z",lastPublishedAt:"2019-05-03T14:10:40Z"},{id:"485a",name:"Lost in the Rhythm - Jamie Berry ft. Octavia Rose",description:"Got me twistin' and turnin' around in my Jimmy Choos\r\n\r\nOnce again get a variety of maps from the Funrankable team: Lighting and Ex+ by LittleAsi, Ex+ by Ryger, with Ex+, Expert, and Normal by baxter395. Enjoy each difficulty for a variety of novel styles.\r\n\r\nIf you enjoy our maps, please support the Funrankable Collective by contributing to our Patreon:\r\nhttps://www.patreon.com/funrankable\r\n\r\nThanks to these hip cats for playtesting and feedback: RedMagi, Qwasix",uploader:{id:37517,name:"funrankable",uniqueSet:!0,hash:"5cff0b7798cc5a672c8561ac",avatar:"https://www.gravatar.com/avatar/5cff0b7798cc5a672c8561ac?d=retro",type:"SIMPLE"},metadata:{bpm:121,duration:185,songName:"Lost in the Rhythm",songSubName:"Jamie Berry ft. Octavia Rose",songAuthorName:"Funrankable",levelAuthorName:"Funrankable"},stats:{plays:0,downloads:2942,upvotes:2309,downvotes:80,score:.9217},uploaded:"2019-04-25T19:03:46Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"f819a2f44993ed7ea1630e103a106b2d1f7808ac",key:"485a",state:"Published",createdAt:"2019-04-25T19:03:46Z",sageScore:7,diffs:[{njs:11,offset:1,notes:350,bombs:0,obstacles:12,nps:2.028,length:348,characteristic:"Standard",difficulty:"Easy",events:7779,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:172.562,paritySummary:{errors:48,warns:44,resets:0}},{njs:12,offset:1,notes:673,bombs:32,obstacles:6,nps:3.9,length:348,characteristic:"Standard",difficulty:"Normal",events:7779,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:172.562,paritySummary:{errors:39,warns:20,resets:9}},{njs:14,offset:0,notes:785,bombs:207,obstacles:10,nps:4.549,length:348,characteristic:"Standard",difficulty:"Hard",events:7779,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:172.562,paritySummary:{errors:37,warns:22,resets:11}},{njs:14,offset:0,notes:899,bombs:0,obstacles:4,nps:5.008,length:362,characteristic:"Standard",difficulty:"Expert",events:7794,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:179.504,paritySummary:{errors:38,warns:35,resets:0}},{njs:16,offset:0,notes:786,bombs:5,obstacles:79,nps:4.355,length:364,characteristic:"Standard",difficulty:"ExpertPlus",events:7779,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:180.496,paritySummary:{errors:63,warns:97,resets:4}},{njs:12,offset:0,notes:0,bombs:0,obstacles:0,nps:0,length:0,characteristic:"Lightshow",difficulty:"Easy",events:7779,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:0,paritySummary:{errors:0,warns:0,resets:0}}],downloadURL:"https://cdn.beatsaver.com/f819a2f44993ed7ea1630e103a106b2d1f7808ac.zip",coverURL:"https://cdn.beatsaver.com/f819a2f44993ed7ea1630e103a106b2d1f7808ac.jpg",previewURL:"https://cdn.beatsaver.com/f819a2f44993ed7ea1630e103a106b2d1f7808ac.mp3"}],createdAt:"2019-04-25T19:03:46Z",updatedAt:"2019-04-25T19:03:46Z",lastPublishedAt:"2019-04-25T19:03:46Z"},{id:"19ca",name:"Bubble Pop - Hyuna",description:"Made for Nichole!\r\nCheck her out on twitch: https://www.twitch.tv/lovingwaifuu\r\n\r\nSee it in action: https://www.youtube.com/watch?v=U2-JYSybh9Y\r\n\r\nThank you to my playtesters:\r\n\r\nQTpop (https://www.twitch.tv/qtpop)\r\nDuovr (https://www.twitch.tv/duovr)\r\nXypherorion (https://www.twitch.tv/Xypherorion)\r\n\r\nI stream playing and making maps for beat saber: https://www.twitch.tv/fafurion",uploader:{id:38202,name:"fafurion",uniqueSet:!1,hash:"5cff0b7398cc5a672c84f945",avatar:"https://www.gravatar.com/avatar/5cff0b7398cc5a672c84f945?d=retro",type:"SIMPLE"},metadata:{bpm:146,duration:214,songName:"Bubble Pop",songSubName:"Hyuna",songAuthorName:"Fafurion",levelAuthorName:"fafurion"},stats:{plays:0,downloads:8139,upvotes:2698,downvotes:100,score:.9217},uploaded:"2018-10-12T03:28:19Z",automapper:!1,ranked:!0,qualified:!1,versions:[{hash:"e8ed13a78cd1e566f754d0cb47d4b5cde8918abe",key:"19ca",state:"Published",createdAt:"2018-10-12T03:28:19Z",sageScore:6,diffs:[{njs:10,offset:0,notes:355,bombs:0,obstacles:2,nps:1.695,length:509.719,characteristic:"Standard",difficulty:"Easy",events:1211,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:209.473,paritySummary:{errors:15,warns:2,resets:0},stars:.91},{njs:10,offset:0,notes:497,bombs:0,obstacles:2,nps:2.373,length:509.719,characteristic:"Standard",difficulty:"Normal",events:1211,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:209.473,paritySummary:{errors:28,warns:3,resets:0}},{njs:10,offset:0,notes:677,bombs:0,obstacles:87,nps:3.232,length:509.719,characteristic:"Standard",difficulty:"Hard",events:1211,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:209.473,paritySummary:{errors:51,warns:47,resets:0},stars:2.17},{njs:13,offset:0,notes:791,bombs:0,obstacles:118,nps:3.776,length:509.719,characteristic:"Standard",difficulty:"Expert",events:1211,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:209.473,paritySummary:{errors:70,warns:64,resets:0},stars:2.8}],downloadURL:"https://cdn.beatsaver.com/e8ed13a78cd1e566f754d0cb47d4b5cde8918abe.zip",coverURL:"https://cdn.beatsaver.com/e8ed13a78cd1e566f754d0cb47d4b5cde8918abe.jpg",previewURL:"https://cdn.beatsaver.com/e8ed13a78cd1e566f754d0cb47d4b5cde8918abe.mp3"}],createdAt:"2018-10-12T03:28:19Z",updatedAt:"2018-10-12T03:28:19Z",lastPublishedAt:"2018-10-12T03:28:19Z"},{id:"3a4",name:"Boulevard of Broken Dreams - Green Day",description:"Expert - Hard - Normal\n1000+ Notes on Expert\nLighting Events\n\nhttps://twitter.com/TheDownyCat\nhttps://www.twitch.tv/downycat\nhttps://streamlabs.com/downycat/tip",uploader:{id:4285982,name:"downycat",uniqueSet:!0,hash:"5cff0b7398cc5a672c84ede5",avatar:"https://cdn.beatsaver.com/avatar/173538829888782336.png",type:"DISCORD"},metadata:{bpm:167,duration:266,songName:"Boulevard of Broken Dreams",songSubName:"Green Day",songAuthorName:"DownyCat",levelAuthorName:"downycat"},stats:{plays:0,downloads:6999,upvotes:6552,downvotes:321,score:.9216},uploaded:"2018-06-04T08:30:49Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"fa36428f6eed2648dade2fe320156adfaabe07b5",key:"3a4",state:"Published",createdAt:"2018-06-04T08:30:49Z",sageScore:5,diffs:[{njs:10,offset:0,notes:474,bombs:0,obstacles:0,nps:1.932,length:683,characteristic:"Standard",difficulty:"Normal",events:1076,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:245.389,paritySummary:{errors:182,warns:9,resets:0}},{njs:10,offset:0,notes:747,bombs:0,obstacles:0,nps:3.044,length:683,characteristic:"Standard",difficulty:"Hard",events:1076,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:245.389,paritySummary:{errors:97,warns:30,resets:0}},{njs:10,offset:0,notes:1049,bombs:0,obstacles:0,nps:4.275,length:683,characteristic:"Standard",difficulty:"Expert",events:1076,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:245.389,paritySummary:{errors:91,warns:73,resets:0}}],downloadURL:"https://cdn.beatsaver.com/fa36428f6eed2648dade2fe320156adfaabe07b5.zip",coverURL:"https://cdn.beatsaver.com/fa36428f6eed2648dade2fe320156adfaabe07b5.jpg",previewURL:"https://cdn.beatsaver.com/fa36428f6eed2648dade2fe320156adfaabe07b5.mp3"}],createdAt:"2018-06-04T08:30:49Z",updatedAt:"2018-06-04T08:30:49Z",lastPublishedAt:"2018-06-04T08:30:49Z"},{id:"10fe4",name:"We Like To Party (on the train tracks)",description:"Don't play on the tracks.\n\n\n\n\n\n\n\n\n\n\n\n\n(account definitely isn't a Mawntee alt account no sir)",uploader:{id:1602,name:"chief-queef",uniqueSet:!0,hash:"5f9a4d2a030219000627c2bf",avatar:"https://cdn.beatsaver.com/avatar/1602.jpg",type:"SIMPLE"},metadata:{bpm:136,duration:34,songName:"We Like To Party",songSubName:"",songAuthorName:"CHURCH OF LEL",levelAuthorName:"Chief Queef"},stats:{plays:0,downloads:2345,upvotes:1022,downvotes:20,score:.9215},uploaded:"2020-11-15T18:12:41.227Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"d004ad1ee631ae38ba7f0d336a039da8beb0b552",key:"10fe4",state:"Published",createdAt:"2020-11-15T18:12:41.227Z",sageScore:5,diffs:[{njs:69,offset:0,notes:781,bombs:0,obstacles:0,nps:23.922,length:73.984,characteristic:"Lawless",difficulty:"Easy",events:939,chroma:!0,me:!1,ne:!0,cinema:!1,seconds:32.64,paritySummary:{errors:0,warns:0,resets:0}}],downloadURL:"https://cdn.beatsaver.com/d004ad1ee631ae38ba7f0d336a039da8beb0b552.zip",coverURL:"https://cdn.beatsaver.com/d004ad1ee631ae38ba7f0d336a039da8beb0b552.jpg",previewURL:"https://cdn.beatsaver.com/d004ad1ee631ae38ba7f0d336a039da8beb0b552.mp3"}],createdAt:"2020-11-15T18:12:41.227Z",updatedAt:"2020-11-15T18:12:41.227Z",lastPublishedAt:"2020-11-15T18:12:41.227Z"},{id:"a72f",name:"The World of Tune - Onoken feat. GaQdan",description:"88-2",uploader:{id:4285521,name:"ejiejidayo",uniqueSet:!0,hash:"5cff0b7398cc5a672c84fc58",avatar:"https://cdn.beatsaver.com/avatar/224894241279574016.png",type:"DISCORD"},metadata:{bpm:108,duration:217,songName:"The World of Tune",songSubName:"Tones and Souls",songAuthorName:"Onoken feat. GaQdan",levelAuthorName:"ejiejidayo"},stats:{plays:0,downloads:814,upvotes:597,downvotes:4,score:.9215},uploaded:"2020-05-17T11:49:56.405Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"750910ebc1b4e958ed2266ba31786ba52569c6a5",key:"a72f",state:"Published",createdAt:"2020-05-17T11:49:56.405Z",sageScore:6,diffs:[{njs:13,offset:-.3,notes:400,bombs:0,obstacles:65,nps:1.893,length:380.393,characteristic:"Standard",difficulty:"Hard",events:1813,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:211.329,paritySummary:{errors:0,warns:0,resets:0}},{njs:15,offset:-.6,notes:761,bombs:0,obstacles:56,nps:3.601,length:380.393,characteristic:"Standard",difficulty:"Expert",events:1813,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:211.329,paritySummary:{errors:5,warns:5,resets:0}},{njs:17,offset:.2,notes:948,bombs:0,obstacles:57,nps:4.486,length:380.393,characteristic:"Standard",difficulty:"ExpertPlus",events:1813,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:211.329,paritySummary:{errors:3,warns:3,resets:0}}],downloadURL:"https://cdn.beatsaver.com/750910ebc1b4e958ed2266ba31786ba52569c6a5.zip",coverURL:"https://cdn.beatsaver.com/750910ebc1b4e958ed2266ba31786ba52569c6a5.jpg",previewURL:"https://cdn.beatsaver.com/750910ebc1b4e958ed2266ba31786ba52569c6a5.mp3"}],createdAt:"2020-05-17T11:49:56.405Z",updatedAt:"2020-05-17T11:49:56.405Z",lastPublishedAt:"2020-05-17T11:49:56.405Z"},{id:"3b6c",name:"Happatai - YATTA!",description:"edited: fixed a mistake in the Hard mode\r\n\r\nG-R-EE-N LEAVES! Japanese YMCA tbh\r\nIf you know this song, you a legend\r\n\r\nYoutube Preview: coming soon\r\n\r\nBPM 133\r\nHard, Expert\r\n\r\nHave fun!\r\n\r\ncontact me on discord\r\nDiscord: ETAN#8341",uploader:{id:4235140,name:"etan",uniqueSet:!0,hash:"5cff0b7798cc5a672c855775",avatar:"https://cdn.beatsaver.com/avatar/136373107559497728.png",type:"DISCORD"},metadata:{bpm:133,duration:237,songName:"YATTA!",songSubName:"Happatai",songAuthorName:"ETAN",levelAuthorName:"ETAN"},stats:{plays:0,downloads:1630,upvotes:874,downvotes:14,score:.9215},uploaded:"2019-03-04T07:04:15Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"9a7a73b32c7ffbc48a352963eb7298a918269458",key:"3b6c",state:"Published",createdAt:"2019-03-04T07:04:15Z",sageScore:6,diffs:[{njs:12,offset:0,notes:729,bombs:14,obstacles:8,nps:3.192,length:506.25,characteristic:"Standard",difficulty:"Hard",events:1354,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:228.383,paritySummary:{errors:83,warns:23,resets:2}},{njs:12,offset:0,notes:833,bombs:14,obstacles:8,nps:3.647,length:506.25,characteristic:"Standard",difficulty:"Expert",events:1354,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:228.383,paritySummary:{errors:75,warns:27,resets:2}}],downloadURL:"https://cdn.beatsaver.com/9a7a73b32c7ffbc48a352963eb7298a918269458.zip",coverURL:"https://cdn.beatsaver.com/9a7a73b32c7ffbc48a352963eb7298a918269458.jpg",previewURL:"https://cdn.beatsaver.com/9a7a73b32c7ffbc48a352963eb7298a918269458.mp3"}],createdAt:"2019-03-04T07:04:15Z",updatedAt:"2019-03-04T07:04:15Z",lastPublishedAt:"2019-03-04T07:04:15Z"},{id:"d411",name:"[FUTURE FUNK PACK] SUPER RISER! (Short Ver.) - Nanidato",description:'FUTURE FUNK MAP PACK\n2 songs uploaded everyday through August 10th - 14th!\n\n"SUPER RISER!" by Nanidato was sampled from Chieri Ito\'s "Merry Christmas" \n\nThis version of "SUPER RISER!" is a short edit I made to reduce the repetitive sections of the song near the end\n\nPlease look forward to the upcoming maps!\n\nDM any feedback on Discord\nETAN#8341',uploader:{id:4235140,name:"etan",uniqueSet:!0,hash:"5cff0b7798cc5a672c855775",avatar:"https://cdn.beatsaver.com/avatar/136373107559497728.png",type:"DISCORD"},metadata:{bpm:141,duration:155,songName:"SUPER RISER!",songSubName:"(Short Ver.)",songAuthorName:"Nanidato",levelAuthorName:"ETAN"},stats:{plays:0,downloads:3828,upvotes:766,downvotes:10,score:.9214},uploaded:"2020-08-11T17:47:02.338Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"c6b7136536ef5647374198769b3211b2b2e4ee17",key:"d411",state:"Published",createdAt:"2020-08-11T17:47:02.338Z",sageScore:7,diffs:[{njs:10,offset:0,notes:158,bombs:0,obstacles:14,nps:1.066,length:347.5,characteristic:"Standard",difficulty:"Easy",events:8420,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:147.872,paritySummary:{errors:57,warns:10,resets:0}},{njs:11,offset:1,notes:218,bombs:0,obstacles:14,nps:1.454,length:351.5,characteristic:"Standard",difficulty:"Normal",events:8420,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:149.574,paritySummary:{errors:14,warns:2,resets:0}},{njs:13,offset:1,notes:398,bombs:0,obstacles:16,nps:2.654,length:351.5,characteristic:"Standard",difficulty:"Hard",events:8420,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:149.574,paritySummary:{errors:0,warns:0,resets:0}},{njs:16,offset:.1,notes:578,bombs:0,obstacles:16,nps:3.854,length:351.5,characteristic:"Standard",difficulty:"Expert",events:8420,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:149.574,paritySummary:{errors:0,warns:0,resets:0}},{njs:19,offset:-.4,notes:781,bombs:0,obstacles:15,nps:5.207,length:351.5,characteristic:"Standard",difficulty:"ExpertPlus",events:8420,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:149.574,paritySummary:{errors:0,warns:0,resets:0}}],downloadURL:"https://cdn.beatsaver.com/c6b7136536ef5647374198769b3211b2b2e4ee17.zip",coverURL:"https://cdn.beatsaver.com/c6b7136536ef5647374198769b3211b2b2e4ee17.jpg",previewURL:"https://cdn.beatsaver.com/c6b7136536ef5647374198769b3211b2b2e4ee17.mp3"}],createdAt:"2020-08-11T17:47:02.338Z",updatedAt:"2020-08-11T17:47:02.338Z",lastPublishedAt:"2020-08-11T17:47:02.338Z"},{id:"6e6e",name:"The Pretender - Foo Fighters",description:"Shoutout to twitch.tv/whipstickgostop for playtesting!",uploader:{id:4285077,name:"ris",uniqueSet:!0,hash:"5cff0b7598cc5a672c8535df",avatar:"https://cdn.beatsaver.com/avatar/191597992061435904.png",type:"DISCORD"},metadata:{bpm:173,duration:271,songName:"The Pretender",songSubName:"",songAuthorName:"Foo Fighters",levelAuthorName:"Ris"},stats:{plays:0,downloads:6031,upvotes:2032,downvotes:67,score:.9213},uploaded:"2019-11-05T23:48:37.168Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"aa64d183dbdfd111f578e3ab80beeca2f61d13eb",key:"6e6e",state:"Published",createdAt:"2019-11-05T23:48:37.168Z",sageScore:2,diffs:[{njs:10,offset:0,notes:427,bombs:0,obstacles:6,nps:1.612,length:764,characteristic:"Standard",difficulty:"Normal",events:471,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:264.971,paritySummary:{errors:70,warns:44,resets:0}},{njs:12,offset:0,notes:641,bombs:0,obstacles:6,nps:2.418,length:764.5,characteristic:"Standard",difficulty:"Hard",events:471,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:265.145,paritySummary:{errors:78,warns:64,resets:0}},{njs:16,offset:.7,notes:958,bombs:4,obstacles:6,nps:3.613,length:764.5,characteristic:"Standard",difficulty:"Expert",events:471,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:265.145,paritySummary:{errors:64,warns:63,resets:2}}],downloadURL:"https://cdn.beatsaver.com/aa64d183dbdfd111f578e3ab80beeca2f61d13eb.zip",coverURL:"https://cdn.beatsaver.com/aa64d183dbdfd111f578e3ab80beeca2f61d13eb.jpg",previewURL:"https://cdn.beatsaver.com/aa64d183dbdfd111f578e3ab80beeca2f61d13eb.mp3"}],createdAt:"2019-11-05T23:48:37.168Z",updatedAt:"2019-11-05T23:48:37.168Z",lastPublishedAt:"2019-11-05T23:48:37.168Z"},{id:"68c5",name:"Sky Fracture VIP (ft. Miss Lina) - Getsix",description:"Ever wondered how one song would look like when mapped by several different mappers in their own mapping style? Then this map is for you! A big collaboration project started by Sykes19, it features a total of 17 maps and 6 unique lightshows, made by 15 mappers and 5 lighters. Special thanks to Getsix for making a Beat Saber edit of his song Sky Fracture VIP ft. Miss Lina!\n\nMapping Extensions mod required for some difficulties (see below).\nChromaLite mod highly recommended for Chroma colored lights.\nSongCore mod highly recommended for custom colors.\n\nStandard:\n1. techbutterfly (794 notes)\n2. Helen Carnate (833 notes)\n3. Bloodcloak (845 notes)\n4. Teuflum (1327 notes)\n5. Skyler Wallace (1329 notes)\n6. Raxan (1444 notes [found in No Arrows])\n7. LEh4nnes (1725 notes [found in No Arrows])\n\nLawless:\n1. Aeroluna (1355 notes)\n2. EncodeRed (1390 notes)\n3. xScaramouche (1585 notes)\n4. CyanSnow (1361 notes [Mapping Extensions])\n5. spooky ghost & Skyler Wallace (633 notes [Mapping Extensions])\n\nOne Saber:\n1. Skyler Wallace (775 notes)\n2. Kolezan (793 notes)\n3. 219278 (968 notes)\n4. 219278 (1104 notes)\n5. thelitlewiseowl (1347 notes)\n\nLightshows:\n1. Halcyon12 (17,993 lighting events)\n2. 219278 - (23,157 lighting events)\n3. Skeelie (26,500 lighting events)\n4. Aeroluna (29,982 lighting events)\n5. spooky ghost (27,387 lighting events, 26,047 walls [Mapping Extensions])\n6. 125K Lightshow (125,038 lighting events [found in No Arrows])",uploader:{id:37070,name:"anniversaryteam",uniqueSet:!0,hash:"5cff0b7798cc5a672c8565a3",avatar:"https://www.gravatar.com/avatar/5cff0b7798cc5a672c8565a3?d=retro",type:"SIMPLE"},metadata:{bpm:176,duration:219,songName:"Sky Fracture VIP",songSubName:"ft. Miss Lina",songAuthorName:"Getsix",levelAuthorName:"Various Mappers"},stats:{plays:0,downloads:4504,upvotes:2272,downvotes:79,score:.9213},uploaded:"2019-10-09T06:45:54.603Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"499e94f2ffb162dba02d4e499163a9cde3b925e5",key:"68c5",state:"Published",createdAt:"2019-10-09T06:45:54.603Z",sageScore:7,diffs:[{njs:16,offset:1,notes:794,bombs:0,obstacles:122,nps:2.019,length:1153.797,characteristic:"Standard",difficulty:"Easy",events:23157,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:393.34,paritySummary:{errors:49,warns:43,resets:0}},{njs:15,offset:1,notes:833,bombs:34,obstacles:10,nps:3.858,length:633.356,characteristic:"Standard",difficulty:"Normal",events:29982,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:215.917,paritySummary:{errors:62,warns:52,resets:2}},{njs:16,offset:.75,notes:845,bombs:24,obstacles:64,nps:3.913,length:633.419,characteristic:"Standard",difficulty:"Hard",events:26500,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:215.938,paritySummary:{errors:12,warns:4,resets:8}},{njs:19,offset:0,notes:1327,bombs:84,obstacles:74,nps:6.146,length:633.356,characteristic:"Standard",difficulty:"Expert",events:17993,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:215.917,paritySummary:{errors:18,warns:19,resets:11}},{njs:20,offset:0,notes:1329,bombs:29,obstacles:153,nps:6.155,length:633.356,characteristic:"Standard",difficulty:"ExpertPlus",events:27387,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:215.917,paritySummary:{errors:90,warns:100,resets:10}},{njs:16,offset:.75,notes:775,bombs:25,obstacles:215,nps:3.589,length:633.356,characteristic:"OneSaber",difficulty:"Easy",events:17993,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:215.917,paritySummary:{errors:37,warns:62,resets:2}},{njs:16,offset:.75,notes:793,bombs:72,obstacles:54,nps:3.673,length:633.356,characteristic:"OneSaber",difficulty:"Normal",events:26500,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:215.917,paritySummary:{errors:32,warns:94,resets:3}},{njs:17,offset:.25,notes:968,bombs:0,obstacles:58,nps:4.483,length:633.356,characteristic:"OneSaber",difficulty:"Hard",events:23157,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:215.917,paritySummary:{errors:8,warns:4,resets:0}},{njs:17,offset:.25,notes:1104,bombs:0,obstacles:58,nps:5.113,length:633.356,characteristic:"OneSaber",difficulty:"Expert",events:23157,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:215.917,paritySummary:{errors:27,warns:23,resets:0}},{njs:19,offset:.125,notes:1347,bombs:26,obstacles:22,nps:6.236,length:633.656,characteristic:"OneSaber",difficulty:"ExpertPlus",events:27387,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:216.019,paritySummary:{errors:38,warns:85,resets:3}},{njs:22,offset:0,notes:1444,bombs:0,obstacles:37,nps:6.688,length:633.356,characteristic:"NoArrows",difficulty:"Hard",events:29982,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:215.917,paritySummary:{errors:9,warns:20,resets:0}},{njs:22,offset:0,notes:1725,bombs:118,obstacles:104,nps:7.989,length:633.356,characteristic:"NoArrows",difficulty:"Expert",events:17993,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:215.917,paritySummary:{errors:10,warns:4,resets:13}},{njs:100,offset:0,notes:0,bombs:0,obstacles:0,nps:0,length:0,characteristic:"NoArrows",difficulty:"ExpertPlus",events:125018,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:0,paritySummary:{errors:0,warns:0,resets:0}},{njs:10,offset:0,notes:0,bombs:0,obstacles:0,nps:0,length:0,characteristic:"Lightshow",difficulty:"Easy",events:17993,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:0,paritySummary:{errors:0,warns:0,resets:0}},{njs:10,offset:0,notes:0,bombs:0,obstacles:0,nps:0,length:0,characteristic:"Lightshow",difficulty:"Normal",events:23157,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:0,paritySummary:{errors:0,warns:0,resets:0}},{njs:10,offset:0,notes:0,bombs:0,obstacles:0,nps:0,length:0,characteristic:"Lightshow",difficulty:"Hard",events:26500,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:0,paritySummary:{errors:0,warns:0,resets:0}},{njs:10,offset:0,notes:0,bombs:0,obstacles:0,nps:0,length:0,characteristic:"Lightshow",difficulty:"Expert",events:29982,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:0,paritySummary:{errors:0,warns:0,resets:0}},{njs:20,offset:0,notes:0,bombs:0,obstacles:26047,nps:0,length:0,characteristic:"Lightshow",difficulty:"ExpertPlus",events:27387,chroma:!1,me:!0,ne:!1,cinema:!1,seconds:0,paritySummary:{errors:0,warns:0,resets:0}},{njs:20,offset:0,notes:1355,bombs:18,obstacles:0,nps:6.276,length:633.356,characteristic:"Lawless",difficulty:"Easy",events:29982,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:215.917,paritySummary:{errors:26,warns:28,resets:0}},{njs:17,offset:1,notes:1390,bombs:46,obstacles:65,nps:6.437,length:633.419,characteristic:"Lawless",difficulty:"Normal",events:23157,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:215.938,paritySummary:{errors:32,warns:18,resets:0}},{njs:19,offset:0,notes:1585,bombs:46,obstacles:25,nps:7.341,length:633.356,characteristic:"Lawless",difficulty:"Hard",events:17993,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:215.917,paritySummary:{errors:16,warns:14,resets:0}},{njs:21,offset:0,notes:1361,bombs:46,obstacles:1,nps:6.303,length:633.356,characteristic:"Lawless",difficulty:"Expert",events:26083,chroma:!1,me:!0,ne:!1,cinema:!1,seconds:215.917,paritySummary:{errors:0,warns:0,resets:0}},{njs:20,offset:0,notes:633,bombs:0,obstacles:26047,nps:3.077,length:603.356,characteristic:"Lawless",difficulty:"ExpertPlus",events:27387,chroma:!1,me:!0,ne:!1,cinema:!1,seconds:205.69,paritySummary:{errors:64,warns:39,resets:0}}],downloadURL:"https://cdn.beatsaver.com/499e94f2ffb162dba02d4e499163a9cde3b925e5.zip",coverURL:"https://cdn.beatsaver.com/499e94f2ffb162dba02d4e499163a9cde3b925e5.jpg",previewURL:"https://cdn.beatsaver.com/499e94f2ffb162dba02d4e499163a9cde3b925e5.mp3"}],createdAt:"2019-10-09T06:45:54.603Z",updatedAt:"2019-10-09T06:45:54.603Z",lastPublishedAt:"2019-10-09T06:45:54.603Z"},{id:"612d",name:"[Anniversary] Overkill - RIOT [Heisenberg & Skyler Wallace]",description:"Part of the Anniversary Song Pack",uploader:{id:37070,name:"anniversaryteam",uniqueSet:!0,hash:"5cff0b7798cc5a672c8565a3",avatar:"https://www.gravatar.com/avatar/5cff0b7798cc5a672c8565a3?d=retro",type:"SIMPLE"},metadata:{bpm:174,duration:310,songName:"Overkill",songSubName:"",songAuthorName:"RIOT",levelAuthorName:"Heisenberg & Skyler Wallace"},stats:{plays:0,downloads:2777,upvotes:1933,downvotes:62,score:.9213},uploaded:"2019-09-04T02:20:01.432Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"8af36a369b051a4a82348dccd2051ee64530d12d",key:"612d",state:"Published",createdAt:"2019-09-04T02:20:01.432Z",sageScore:6,diffs:[{njs:15,offset:.75,notes:826,bombs:664,obstacles:25,nps:2.79,length:858.5,characteristic:"Standard",difficulty:"Hard",events:12607,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:296.035,paritySummary:{errors:58,warns:88,resets:16}},{njs:17,offset:.25,notes:1114,bombs:668,obstacles:27,nps:3.763,length:858.5,characteristic:"Standard",difficulty:"Expert",events:12190,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:296.034,paritySummary:{errors:60,warns:107,resets:16}},{njs:19,offset:.25,notes:1925,bombs:462,obstacles:1e3,nps:6.503,length:858.5,characteristic:"Standard",difficulty:"ExpertPlus",events:12513,chroma:!1,me:!0,ne:!1,cinema:!1,seconds:296.035,paritySummary:{errors:0,warns:0,resets:0}}],downloadURL:"https://cdn.beatsaver.com/8af36a369b051a4a82348dccd2051ee64530d12d.zip",coverURL:"https://cdn.beatsaver.com/8af36a369b051a4a82348dccd2051ee64530d12d.jpg",previewURL:"https://cdn.beatsaver.com/8af36a369b051a4a82348dccd2051ee64530d12d.mp3"}],createdAt:"2019-09-04T02:20:01.432Z",updatedAt:"2019-09-04T02:20:01.432Z",lastPublishedAt:"2019-09-04T02:20:01.432Z"},{id:"5222",name:"To see the future [Sword Art Online Alternative: Gun Gale Online Ending]",description:"Preview:\r\nhttps://www.youtube.com/watch?v=DEp-eEgl1_w\r\n\r\nMAPPING EXTENSIONS REQUIRED for walls and such\r\nThis took forever but it was SOOO worth it\r\n\r\nThanks to Sehria_K for playtesting!\r\n\r\nSAO Alternative: GGO ED by LLENN (Tomori Kusunoki)\r\n\r\nPlease enjoy\r\ngimme feedback on Discord\r\nETAN#8341",uploader:{id:4235140,name:"etan",uniqueSet:!0,hash:"5cff0b7798cc5a672c855775",avatar:"https://cdn.beatsaver.com/avatar/136373107559497728.png",type:"DISCORD"},metadata:{bpm:137,duration:256,songName:"To see the future",songSubName:"Tomori Kusunoki",songAuthorName:"ETAN",levelAuthorName:"ETAN"},stats:{plays:0,downloads:3227,upvotes:940,downvotes:17,score:.9212},uploaded:"2019-06-07T21:47:12Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"7e33f5491f94b5b3590864629579ed59f3f8fc90",key:"5222",state:"Published",createdAt:"2019-06-07T21:47:12Z",sageScore:6,diffs:[{njs:13,offset:0,notes:622,bombs:111,obstacles:692,nps:2.479,length:573,characteristic:"Standard",difficulty:"Hard",events:3793,chroma:!1,me:!0,ne:!1,cinema:!1,seconds:250.949,paritySummary:{errors:0,warns:0,resets:0}},{njs:18,offset:0,notes:924,bombs:92,obstacles:692,nps:3.68,length:573.25,characteristic:"Standard",difficulty:"Expert",events:3793,chroma:!1,me:!0,ne:!1,cinema:!1,seconds:251.058,paritySummary:{errors:0,warns:0,resets:0}}],downloadURL:"https://cdn.beatsaver.com/7e33f5491f94b5b3590864629579ed59f3f8fc90.zip",coverURL:"https://cdn.beatsaver.com/7e33f5491f94b5b3590864629579ed59f3f8fc90.jpg",previewURL:"https://cdn.beatsaver.com/7e33f5491f94b5b3590864629579ed59f3f8fc90.mp3"}],createdAt:"2019-06-07T21:47:12Z",updatedAt:"2019-06-07T21:47:12Z",lastPublishedAt:"2019-06-07T21:47:12Z"},{id:"2ece",name:"#CookieJar - Red Velvet",description:"I love Nichole (LovingWaifuu) I made this chart for her\r\nFollow her twitch: https://www.twitch.tv/lovingwaifuu\r\nAlso follow me on twitch: https://www.twitch.tv/rinkusenpai\r\nThank you Redmagi and Don for the testplays!\r\nEdit: I fixed some weird stuff that happened with copy/paste and my stupidity, sorry about leaderboards",uploader:{id:16388,name:"rinkusenpai",uniqueSet:!0,hash:"5cff0b7398cc5a672c84f6cc",avatar:"https://www.gravatar.com/avatar/5cff0b7398cc5a672c84f6cc?d=retro",type:"SIMPLE"},metadata:{bpm:159,duration:214,songName:"#Cookie Jar",songSubName:"Red Velvet",songAuthorName:"RinkuSenpai",levelAuthorName:"rinkusenpai"},stats:{plays:0,downloads:2705,upvotes:1202,downvotes:28,score:.9212},uploaded:"2019-01-19T01:42:07Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"ae11541d849b9126469c79f5ab61b088def692c1",key:"2ece",state:"Published",createdAt:"2019-01-19T01:42:07Z",sageScore:5,diffs:[{njs:12,offset:0,notes:821,bombs:0,obstacles:20,nps:4.029,length:540,characteristic:"Standard",difficulty:"Expert",events:2173,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:203.774,paritySummary:{errors:43,warns:50,resets:0}}],downloadURL:"https://cdn.beatsaver.com/ae11541d849b9126469c79f5ab61b088def692c1.zip",coverURL:"https://cdn.beatsaver.com/ae11541d849b9126469c79f5ab61b088def692c1.jpg",previewURL:"https://cdn.beatsaver.com/ae11541d849b9126469c79f5ab61b088def692c1.mp3"}],createdAt:"2019-01-19T01:42:07Z",updatedAt:"2019-01-19T01:42:07Z",lastPublishedAt:"2019-01-19T01:42:07Z"},{id:"83b",name:"Otter Pop (feat. Hollis) - Shawn Wasabi",description:"Difficulties: Expert+ Only\r\nMore Benny Originals: https://beatsaver.com/searchhtml.php?q=bennydabeast",uploader:{id:30311,name:"bennydabeast",uniqueSet:!0,hash:"5cff0b7298cc5a672c84e98d",avatar:"https://cdn.beatsaver.com/avatar/30311.jpg",type:"SIMPLE"},metadata:{bpm:93,duration:170,songName:"Otter Pop (feat. Hollis)",songSubName:"Shawn Wasabi",songAuthorName:"BennyDaBeast",levelAuthorName:"bennydabeast"},stats:{plays:0,downloads:3164,upvotes:2048,downvotes:68,score:.9212},uploaded:"2018-07-06T21:44:56Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"c7e15a9eaeaae0fe9dd8e4ad62cfd849e3cc6cc7",key:"83b",state:"Published",createdAt:"2018-07-06T21:44:56Z",sageScore:5,diffs:[{njs:10,offset:0,notes:706,bombs:2,obstacles:36,nps:4.275,length:256,characteristic:"Standard",difficulty:"ExpertPlus",events:235,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:165.161,paritySummary:{errors:89,warns:89,resets:1}}],downloadURL:"https://cdn.beatsaver.com/c7e15a9eaeaae0fe9dd8e4ad62cfd849e3cc6cc7.zip",coverURL:"https://cdn.beatsaver.com/c7e15a9eaeaae0fe9dd8e4ad62cfd849e3cc6cc7.jpg",previewURL:"https://cdn.beatsaver.com/c7e15a9eaeaae0fe9dd8e4ad62cfd849e3cc6cc7.mp3"}],createdAt:"2018-07-06T21:44:56Z",updatedAt:"2018-07-06T21:44:56Z",lastPublishedAt:"2018-07-06T21:44:56Z"},{id:"dd1d",name:"yasuoP - Electric Angel/えれくとりっく・えんじぇぅ - Kagamine Rin Kagamine Ren - ArrangeCover 【Wall Map】(Fixed)",description:"Fixed\n\n【Preview】\nhttps://youtu.be/RI2jxRwj6WY",uploader:{id:4285467,name:"fefy",uniqueSet:!0,hash:"5cff0b7798cc5a672c856908",avatar:"https://cdn.beatsaver.com/avatar/380656936460484620.png",type:"DISCORD"},metadata:{bpm:150,duration:192,songName:"えれくとりっく・えんじぇぅ",songSubName:"鏡音リン・鏡音レンアレンジカバー",songAuthorName:"ヤスオ",levelAuthorName:"Fefy〈ふぇふぃー〉"},stats:{plays:0,downloads:1627,upvotes:963,downvotes:18,score:.9211},uploaded:"2020-08-24T09:58:50.214Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"bba2b6d3af3dc614c65c4b87b6a50f118ed181a8",key:"dd1d",state:"Published",createdAt:"2020-08-24T09:58:50.214Z",sageScore:3,diffs:[{njs:16,offset:0,notes:639,bombs:0,obstacles:39988,nps:3.41,length:468.5,characteristic:"Standard",difficulty:"Hard",events:5,chroma:!0,me:!1,ne:!0,cinema:!1,seconds:187.4,paritySummary:{errors:14,warns:15,resets:0}}],downloadURL:"https://cdn.beatsaver.com/bba2b6d3af3dc614c65c4b87b6a50f118ed181a8.zip",coverURL:"https://cdn.beatsaver.com/bba2b6d3af3dc614c65c4b87b6a50f118ed181a8.jpg",previewURL:"https://cdn.beatsaver.com/bba2b6d3af3dc614c65c4b87b6a50f118ed181a8.mp3"}],createdAt:"2020-08-24T09:58:50.214Z",updatedAt:"2020-08-24T09:58:50.214Z",lastPublishedAt:"2020-08-24T09:58:50.214Z"},{id:"86e9",name:"Best Day Of My Life - American Authors",description:'"Best Day of My Life" is a song by American pop rock band American Authors. The song was written by band members Zac Barnett, Dave Rublin, Matt Sanchez, and James Adam Shelley, along with producers Aaron Accetta and Shep Goodman. "Best Day of My Life" was originally recorded for release as a single by Mercury Records and Island Records on March 19, 2013.',uploader:{id:58338,name:"Joetastic",uniqueSet:!0,hash:"5cff0b7498cc5a672c85050e",avatar:"https://cdn.beatsaver.com/avatar/227767566402191360.png",type:"DISCORD"},metadata:{bpm:100,duration:194,songName:"Best Day Of My Life",songSubName:"",songAuthorName:"American Authors",levelAuthorName:"Joetastic"},stats:{plays:0,downloads:2731,upvotes:863,downvotes:14,score:.9211},uploaded:"2020-02-14T16:59:24.776Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"6b253cbb5a2a81c2575e0778614bf009d7954834",key:"86e9",state:"Published",createdAt:"2020-02-14T16:59:24.776Z",sageScore:9,diffs:[{njs:8,offset:.4,notes:194,bombs:0,obstacles:4,nps:1.017,length:318,characteristic:"Standard",difficulty:"Easy",events:3091,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:190.8,paritySummary:{errors:28,warns:5,resets:0}},{njs:10,offset:.2,notes:399,bombs:0,obstacles:4,nps:2.091,length:318,characteristic:"Standard",difficulty:"Normal",events:3091,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:190.8,paritySummary:{errors:25,warns:24,resets:0}},{njs:12,offset:0,notes:634,bombs:0,obstacles:4,nps:3.323,length:318,characteristic:"Standard",difficulty:"Hard",events:3091,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:190.8,paritySummary:{errors:4,warns:5,resets:0}},{njs:14,offset:0,notes:837,bombs:0,obstacles:11,nps:4.387,length:318,characteristic:"Standard",difficulty:"Expert",events:3091,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:190.8,paritySummary:{errors:20,warns:20,resets:0}},{njs:16,offset:.4,notes:948,bombs:0,obstacles:11,nps:4.969,length:318,characteristic:"Standard",difficulty:"ExpertPlus",events:3095,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:190.8,paritySummary:{errors:15,warns:15,resets:0}}],downloadURL:"https://cdn.beatsaver.com/6b253cbb5a2a81c2575e0778614bf009d7954834.zip",coverURL:"https://cdn.beatsaver.com/6b253cbb5a2a81c2575e0778614bf009d7954834.jpg",previewURL:"https://cdn.beatsaver.com/6b253cbb5a2a81c2575e0778614bf009d7954834.mp3"}],createdAt:"2020-02-14T16:59:24.776Z",updatedAt:"2020-02-14T16:59:24.776Z",lastPublishedAt:"2020-02-14T16:59:24.776Z"},{id:"5335",name:"David Guetta, Martin Garrix & Brooks - Like I Do",description:"This map - trust me - is sensational..\nCheck out my lightshows here: https://www.youtube.com/playlist?list=PLwl6dYq72JOYu1BnKl5WATa4Dh__ZJmuN",uploader:{id:14808,name:"halcyon12",uniqueSet:!0,hash:"5cff0b7698cc5a672c8547ad",avatar:"https://www.gravatar.com/avatar/5cff0b7698cc5a672c8547ad?d=retro",type:"SIMPLE"},metadata:{bpm:128,duration:99,songName:"Like I Do",songSubName:"",songAuthorName:"David Guetta, Martin Garrix, Brooks",levelAuthorName:"Halcyon12"},stats:{plays:0,downloads:2486,upvotes:1153,downvotes:26,score:.9211},uploaded:"2019-06-16T19:05:31.814Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"59e1b8fa392e26bbcc528dcea08b80699efdbeb6",key:"5335",state:"Published",createdAt:"2019-06-16T19:05:31.814Z",sageScore:3,diffs:[{njs:11,offset:1,notes:171,bombs:0,obstacles:1,nps:1.91,length:191,characteristic:"Standard",difficulty:"Normal",events:4711,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:89.531,paritySummary:{errors:16,warns:3,resets:0}},{njs:13,offset:1,notes:234,bombs:0,obstacles:3,nps:2.6,length:192,characteristic:"Standard",difficulty:"Hard",events:4711,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:90,paritySummary:{errors:7,warns:0,resets:0}},{njs:15,offset:0,notes:305,bombs:4,obstacles:7,nps:3.407,length:191,characteristic:"Standard",difficulty:"Expert",events:4711,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:89.531,paritySummary:{errors:9,warns:6,resets:0}},{njs:17,offset:0,notes:397,bombs:12,obstacles:10,nps:4.411,length:192,characteristic:"Standard",difficulty:"ExpertPlus",events:4764,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:90,paritySummary:{errors:3,warns:2,resets:3}}],downloadURL:"https://cdn.beatsaver.com/59e1b8fa392e26bbcc528dcea08b80699efdbeb6.zip",coverURL:"https://cdn.beatsaver.com/59e1b8fa392e26bbcc528dcea08b80699efdbeb6.jpg",previewURL:"https://cdn.beatsaver.com/59e1b8fa392e26bbcc528dcea08b80699efdbeb6.mp3"}],createdAt:"2019-06-16T19:05:31.814Z",updatedAt:"2019-06-16T19:05:31.814Z",lastPublishedAt:"2019-06-16T19:05:31.814Z"},{id:"e44",name:"Big Girl (You Are Beautiful) - MIKA",description:"Prepare yourself for some big moves!\r\nPlaythrough : https://youtu.be/hzGaITR-648",uploader:{id:13320,name:"novashaft",uniqueSet:!0,hash:"5cff0b7398cc5a672c84ee55",avatar:"https://www.gravatar.com/avatar/5cff0b7398cc5a672c84ee55?d=retro",type:"SIMPLE"},metadata:{bpm:116,duration:241,songName:"Big Girl (You Are Beatiful)",songSubName:"MIKA",songAuthorName:"NovaShaft",levelAuthorName:"novashaft"},stats:{plays:0,downloads:3095,upvotes:1222,downvotes:29,score:.9211},uploaded:"2018-08-07T12:02:28Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"6c4f86a126cd7465ec536837f3e73874e07068ef",key:"e44",state:"Published",createdAt:"2018-08-07T12:02:28Z",sageScore:5,diffs:[{njs:10,offset:0,notes:855,bombs:0,obstacles:18,nps:3.723,length:444,characteristic:"Standard",difficulty:"Expert",events:645,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:229.655,paritySummary:{errors:56,warns:63,resets:0}}],downloadURL:"https://cdn.beatsaver.com/6c4f86a126cd7465ec536837f3e73874e07068ef.zip",coverURL:"https://cdn.beatsaver.com/6c4f86a126cd7465ec536837f3e73874e07068ef.jpg",previewURL:"https://cdn.beatsaver.com/6c4f86a126cd7465ec536837f3e73874e07068ef.mp3"}],createdAt:"2018-08-07T12:02:28Z",updatedAt:"2018-08-07T12:02:28Z",lastPublishedAt:"2018-08-07T12:02:28Z"},{id:"6bfa",name:"Approaching Nirvana - Alone",description:"https://www.youtube.com/watch?v=lZvGn7RUC7c",uploader:{id:12996,name:"rustic",uniqueSet:!0,hash:"5cff0b7298cc5a672c84e8c4",avatar:"https://www.gravatar.com/avatar/5cff0b7298cc5a672c84e8c4?d=retro",type:"SIMPLE"},metadata:{bpm:128,duration:170,songName:"Alone",songSubName:"",songAuthorName:"Approaching Nirvana",levelAuthorName:"Rustic"},stats:{plays:0,downloads:1796,upvotes:1032,downvotes:21,score:.921},uploaded:"2019-10-24T19:54:05.671Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"ccf70e940a4ec45c70a8f3ae7be18a2ea771461d",key:"6bfa",state:"Published",createdAt:"2019-10-24T19:54:05.671Z",sageScore:6,diffs:[{njs:18,offset:0,notes:416,bombs:0,obstacles:1689,nps:2.558,length:347,characteristic:"Standard",difficulty:"Expert",events:3383,chroma:!1,me:!0,ne:!1,cinema:!1,seconds:162.656,paritySummary:{errors:0,warns:0,resets:0}}],downloadURL:"https://cdn.beatsaver.com/ccf70e940a4ec45c70a8f3ae7be18a2ea771461d.zip",coverURL:"https://cdn.beatsaver.com/ccf70e940a4ec45c70a8f3ae7be18a2ea771461d.jpg",previewURL:"https://cdn.beatsaver.com/ccf70e940a4ec45c70a8f3ae7be18a2ea771461d.mp3"}],createdAt:"2019-10-24T19:54:05.671Z",updatedAt:"2019-10-24T19:54:05.671Z",lastPublishedAt:"2019-10-24T19:54:05.671Z"},{id:"6330",name:"dj-Jo - The Legend of Zelda Ocarina of Time Title Theme Remix",description:"Ocarina of Time is one of my favorites games for the N64. Hope you guys enjoy it as much as I did",uploader:{id:4285107,name:"kikaeaeon",uniqueSet:!0,hash:"5cff0b7498cc5a672c85109b",avatar:"https://cdn.beatsaver.com/avatar/103715469822816256.png",type:"DISCORD"},metadata:{bpm:165,duration:249,songName:"The Legend of Zelda Ocarina of Time Title Theme Remix",songSubName:"",songAuthorName:"dj-Jo",levelAuthorName:"KikaeAeon"},stats:{plays:0,downloads:2252,upvotes:670,downvotes:7,score:.9209},uploaded:"2019-09-13T19:15:16.984Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"35dffa3cbcaca2261d3bdd7306df9503fd9adc0f",key:"6330",state:"Published",createdAt:"2019-09-13T19:15:16.984Z",sageScore:6,diffs:[{njs:14,offset:0,notes:745,bombs:0,obstacles:28,nps:3.242,length:632,characteristic:"Standard",difficulty:"Expert",events:890,chroma:!1,me:!0,ne:!1,cinema:!1,seconds:229.818,paritySummary:{errors:18,warns:7,resets:0}},{njs:16,offset:0,notes:955,bombs:0,obstacles:30,nps:4.155,length:632,characteristic:"Standard",difficulty:"ExpertPlus",events:1030,chroma:!1,me:!0,ne:!1,cinema:!1,seconds:229.818,paritySummary:{errors:21,warns:17,resets:0}}],downloadURL:"https://cdn.beatsaver.com/35dffa3cbcaca2261d3bdd7306df9503fd9adc0f.zip",coverURL:"https://cdn.beatsaver.com/35dffa3cbcaca2261d3bdd7306df9503fd9adc0f.jpg",previewURL:"https://cdn.beatsaver.com/35dffa3cbcaca2261d3bdd7306df9503fd9adc0f.mp3"}],createdAt:"2019-09-13T19:15:16.984Z",updatedAt:"2019-09-13T19:15:16.984Z",lastPublishedAt:"2019-09-13T19:15:16.984Z"},{id:"217",name:"Beat it - Michael Jackson",description:"Easy/Normal/Hard/Expert - Obstacles and mines purely for dance moves! 100% Expert Playthrough: https://bit.ly/2IKzCp3\r\n\r\n- Freeek =)",uploader:{id:47581,name:"freeek",uniqueSet:!0,hash:"5cff0b7298cc5a672c84e8ad",avatar:"https://www.gravatar.com/avatar/5cff0b7298cc5a672c84e8ad?d=retro",type:"SIMPLE"},metadata:{bpm:139,duration:143,songName:"Beat it",songSubName:"Michael Jackson",songAuthorName:"Freeek",levelAuthorName:"freeek"},stats:{plays:0,downloads:19417,upvotes:15233,downvotes:887,score:.9209},uploaded:"2018-05-25T14:20:19Z",automapper:!1,ranked:!0,qualified:!1,versions:[{hash:"4b2da842b687ec4cfbc948c583c21c79d4120de0",key:"217",state:"Published",createdAt:"2018-05-25T14:20:19Z",sageScore:5,diffs:[{njs:10,offset:0,notes:188,bombs:0,obstacles:84,nps:1.431,length:303.875,characteristic:"Standard",difficulty:"Easy",events:878,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:131.169,paritySummary:{errors:0,warns:0,resets:0},stars:.39},{njs:10,offset:0,notes:219,bombs:40,obstacles:70,nps:1.667,length:304,characteristic:"Standard",difficulty:"Normal",events:878,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:131.223,paritySummary:{errors:29,warns:8,resets:1},stars:.64},{njs:10,offset:0,notes:386,bombs:42,obstacles:72,nps:2.937,length:304,characteristic:"Standard",difficulty:"Hard",events:878,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:131.223,paritySummary:{errors:80,warns:49,resets:4},stars:1.7},{njs:10,offset:0,notes:623,bombs:46,obstacles:69,nps:4.741,length:304,characteristic:"Standard",difficulty:"Expert",events:878,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:131.223,paritySummary:{errors:87,warns:31,resets:2}}],downloadURL:"https://cdn.beatsaver.com/4b2da842b687ec4cfbc948c583c21c79d4120de0.zip",coverURL:"https://cdn.beatsaver.com/4b2da842b687ec4cfbc948c583c21c79d4120de0.jpg",previewURL:"https://cdn.beatsaver.com/4b2da842b687ec4cfbc948c583c21c79d4120de0.mp3"}],createdAt:"2018-05-25T14:20:19Z",updatedAt:"2018-05-25T14:20:19Z",lastPublishedAt:"2018-05-25T14:20:19Z"},{id:"bb4",name:"Octopath Traveler Main Theme - Yasunori Nishiki",description:"SS Full Combo: https://www.youtube.com/watch?v=zhwpW6ZfBqo",uploader:{id:41168,name:"edzo",uniqueSet:!0,hash:"5cff0b7398cc5a672c84f56a",avatar:"https://www.gravatar.com/avatar/5cff0b7398cc5a672c84f56a?d=retro",type:"SIMPLE"},metadata:{bpm:264,duration:150,songName:"Octopath Traveler Main Theme",songSubName:"Yasunori Nishiki",songAuthorName:"Edzo",levelAuthorName:"edzo"},stats:{plays:0,downloads:1163,upvotes:518,downvotes:2,score:.9207},uploaded:"2018-07-25T01:41:47Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"4ba6575e63038cc8bb747f7c1e56bf2202d551be",key:"bb4",state:"Published",createdAt:"2018-07-25T01:41:47Z",sageScore:4,diffs:[{njs:10,offset:0,notes:505,bombs:0,obstacles:5,nps:3.45,length:644,characteristic:"Standard",difficulty:"Expert",events:666,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:146.364,paritySummary:{errors:46,warns:29,resets:0}}],downloadURL:"https://cdn.beatsaver.com/4ba6575e63038cc8bb747f7c1e56bf2202d551be.zip",coverURL:"https://cdn.beatsaver.com/4ba6575e63038cc8bb747f7c1e56bf2202d551be.jpg",previewURL:"https://cdn.beatsaver.com/4ba6575e63038cc8bb747f7c1e56bf2202d551be.mp3"}],createdAt:"2018-07-25T01:41:47Z",updatedAt:"2018-07-25T01:41:47Z",lastPublishedAt:"2018-07-25T01:41:47Z"},{id:"94cb",name:"Buttercup | By Jack Stauber | Charted By StyngMe |",description:"Difficulties: Hard\nEnjoy! <3",uploader:{id:30754,name:"styngme",uniqueSet:!1,hash:"5cff0b7298cc5a672c84e9cd",avatar:"https://www.gravatar.com/avatar/5cff0b7298cc5a672c84e9cd?d=retro",type:"SIMPLE"},metadata:{bpm:120,duration:202,songName:"Buttercup",songSubName:"",songAuthorName:"Jack Stauber",levelAuthorName:"StyngMe"},stats:{plays:0,downloads:1776,upvotes:692,downvotes:8,score:.9206},uploaded:"2020-03-29T01:21:28.921Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"eb750f2dcec62ac3a816583854dbdee4514d8581",key:"94cb",state:"Published",createdAt:"2020-03-29T01:21:28.921Z",sageScore:2,diffs:[{njs:14,offset:0,notes:441,bombs:112,obstacles:41,nps:2.297,length:384,characteristic:"Standard",difficulty:"Hard",events:658,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:192,paritySummary:{errors:32,warns:19,resets:8}}],downloadURL:"https://cdn.beatsaver.com/eb750f2dcec62ac3a816583854dbdee4514d8581.zip",coverURL:"https://cdn.beatsaver.com/eb750f2dcec62ac3a816583854dbdee4514d8581.jpg",previewURL:"https://cdn.beatsaver.com/eb750f2dcec62ac3a816583854dbdee4514d8581.mp3"}],createdAt:"2020-03-29T01:21:28.921Z",updatedAt:"2020-03-29T01:21:28.921Z",lastPublishedAt:"2020-03-29T01:21:28.921Z"},{id:"a3a",name:"Platinum Disco - Yuka Iguchi",description:"One of the OPs in Nisemonogatari\r\nI know its a bit easy for an expert map. tried to keep it's flow mostly.\r\nBPM : 117, Duration 4:14\r\nDifficulties: Easy, Normal, Hard, Expert\r\n\r\nDemo : https://youtu.be/EV07KuV_DrA",uploader:{id:47059,name:"rocket",uniqueSet:!0,hash:"5cff0b7398cc5a672c84f1c0",avatar:"https://www.gravatar.com/avatar/5cff0b7398cc5a672c84f1c0?d=retro",type:"SIMPLE"},metadata:{bpm:117,duration:254,songName:"Platinum Disco",songSubName:"Yuka Iguchi",songAuthorName:"Rocket",levelAuthorName:"rocket"},stats:{plays:0,downloads:3105,upvotes:1914,downvotes:63,score:.9205},uploaded:"2018-07-18T00:14:28Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"a372fee60c26b5e35861c71d9c38b4ef60974e93",key:"a3a",state:"Published",createdAt:"2018-07-18T00:14:28Z",sageScore:5,diffs:[{njs:10,offset:0,notes:264,bombs:0,obstacles:27,nps:1.059,length:486,characteristic:"Standard",difficulty:"Easy",events:605,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:249.231,paritySummary:{errors:73,warns:54,resets:0}},{njs:10,offset:0,notes:483,bombs:0,obstacles:27,nps:1.938,length:486,characteristic:"Standard",difficulty:"Normal",events:605,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:249.231,paritySummary:{errors:82,warns:100,resets:0}},{njs:10,offset:0,notes:738,bombs:0,obstacles:27,nps:2.961,length:486,characteristic:"Standard",difficulty:"Hard",events:605,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:249.231,paritySummary:{errors:107,warns:118,resets:0}},{njs:10,offset:0,notes:845,bombs:0,obstacles:27,nps:3.39,length:486,characteristic:"Standard",difficulty:"Expert",events:604,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:249.231,paritySummary:{errors:128,warns:111,resets:0}}],downloadURL:"https://cdn.beatsaver.com/a372fee60c26b5e35861c71d9c38b4ef60974e93.zip",coverURL:"https://cdn.beatsaver.com/a372fee60c26b5e35861c71d9c38b4ef60974e93.jpg",previewURL:"https://cdn.beatsaver.com/a372fee60c26b5e35861c71d9c38b4ef60974e93.mp3"}],createdAt:"2018-07-18T00:14:28Z",updatedAt:"2018-07-18T00:14:28Z",lastPublishedAt:"2018-07-18T00:14:28Z"},{id:"b8d7",name:"Contradiction [The God of High School Opening] - KSUKE ft. Tyler Carter",description:'Everyone step to the left. Wait, wrong song xD but it does have walls that make you go left right down up.\n\n"Contradiction" is KSUKE\'s latest Single featuring American singer Tyler Carter. It is used as the opening song in the upcoming Crunchyroll anime adaption of The God of High School.',uploader:{id:58338,name:"Joetastic",uniqueSet:!0,hash:"5cff0b7498cc5a672c85050e",avatar:"https://cdn.beatsaver.com/avatar/227767566402191360.png",type:"DISCORD"},metadata:{bpm:130,duration:200,songName:"Contradiction",songSubName:"ft. Tyler Carter",songAuthorName:"KSUKE",levelAuthorName:"Joetastic"},stats:{plays:0,downloads:9869,upvotes:1479,downvotes:42,score:.9204},uploaded:"2020-07-03T04:53:48.515Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"980cf4979240c9d2b1107a24d6143dd9b85f8098",key:"b8d7",state:"Published",createdAt:"2020-07-03T04:53:48.515Z",sageScore:4,diffs:[{njs:10,offset:0,notes:0,bombs:0,obstacles:0,nps:0,length:0,characteristic:"Standard",difficulty:"Easy",events:13893,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:0,paritySummary:{errors:0,warns:0,resets:0}},{njs:12,offset:.35,notes:711,bombs:0,obstacles:70,nps:3.633,length:424,characteristic:"Standard",difficulty:"Hard",events:13893,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:195.692,paritySummary:{errors:4,warns:2,resets:0}},{njs:16,offset:-.25,notes:1075,bombs:0,obstacles:110,nps:5.493,length:424,characteristic:"Standard",difficulty:"Expert",events:13893,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:195.692,paritySummary:{errors:3,warns:4,resets:0}},{njs:20,offset:.4,notes:1219,bombs:0,obstacles:102,nps:6.229,length:424,characteristic:"Standard",difficulty:"ExpertPlus",events:13893,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:195.692,paritySummary:{errors:0,warns:10,resets:0}}],downloadURL:"https://cdn.beatsaver.com/980cf4979240c9d2b1107a24d6143dd9b85f8098.zip",coverURL:"https://cdn.beatsaver.com/980cf4979240c9d2b1107a24d6143dd9b85f8098.jpg",previewURL:"https://cdn.beatsaver.com/980cf4979240c9d2b1107a24d6143dd9b85f8098.mp3"}],createdAt:"2020-07-03T04:53:48.515Z",updatedAt:"2020-07-03T04:53:48.515Z",lastPublishedAt:"2020-07-03T04:53:48.515Z"},{id:"d565",name:"[FUTURE FUNK PACK] Idolstep Dreaming - Mikazuki BIGWAVE",description:'FUTURE FUNK MAP PACK\n2 songs uploaded everyday through August 10th - 14th!\n\n"Idolstep 夢見" by ミカヅキBIGWAVE was sampled from Hidemi Ishikawa\'s "めざめ" (Mezame). \n\nPlease look forward to the upcoming maps!\n\nDM any feedback on Discord\nETAN#8341',uploader:{id:4235140,name:"etan",uniqueSet:!0,hash:"5cff0b7798cc5a672c855775",avatar:"https://cdn.beatsaver.com/avatar/136373107559497728.png",type:"DISCORD"},metadata:{bpm:105,duration:178,songName:"Idolstep Dreaming",songSubName:"",songAuthorName:"Mikazuki BIGWAVE",levelAuthorName:"ETAN"},stats:{plays:0,downloads:3733,upvotes:816,downvotes:13,score:.9203},uploaded:"2020-08-13T18:37:52.866Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"44bd3be82800591c926b63f16b02f34c85730130",key:"d565",state:"Published",createdAt:"2020-08-13T18:37:52.866Z",sageScore:6,diffs:[{njs:10,offset:1,notes:192,bombs:21,obstacles:37,nps:1.135,length:296,characteristic:"Standard",difficulty:"Easy",events:7255,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:169.143,paritySummary:{errors:4,warns:2,resets:2}},{njs:12,offset:.5,notes:224,bombs:21,obstacles:37,nps:1.324,length:296,characteristic:"Standard",difficulty:"Normal",events:7255,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:169.143,paritySummary:{errors:1,warns:0,resets:3}},{njs:12,offset:0,notes:361,bombs:19,obstacles:38,nps:2.134,length:296,characteristic:"Standard",difficulty:"Hard",events:7255,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:169.143,paritySummary:{errors:0,warns:0,resets:1}},{njs:14,offset:-.2,notes:570,bombs:19,obstacles:38,nps:3.347,length:298,characteristic:"Standard",difficulty:"Expert",events:7255,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:170.286,paritySummary:{errors:0,warns:0,resets:1}},{njs:16,offset:.5,notes:695,bombs:17,obstacles:34,nps:4.081,length:298,characteristic:"Standard",difficulty:"ExpertPlus",events:7255,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:170.286,paritySummary:{errors:0,warns:0,resets:0}}],downloadURL:"https://cdn.beatsaver.com/44bd3be82800591c926b63f16b02f34c85730130.zip",coverURL:"https://cdn.beatsaver.com/44bd3be82800591c926b63f16b02f34c85730130.jpg",previewURL:"https://cdn.beatsaver.com/44bd3be82800591c926b63f16b02f34c85730130.mp3"}],createdAt:"2020-08-13T18:37:52.866Z",updatedAt:"2020-08-13T18:37:52.866Z",lastPublishedAt:"2020-08-13T18:37:52.866Z"},{id:"7b9a",name:"League of Legends - RISE (ft. The Glitch Mob, Mako, and The Word Alive)",description:"Prove yourself and RISE! Normal to Expert, custom lighting.\n\nExpert - 719 notes | 15 NJS | 0 bombs | 6 walls\nHard - 575 notes | 12 NJS | 0 bombs | 6 walls\nNormal - 411 notes | 10 NJS | 0 bombs | 6 walls",uploader:{id:30,name:"cookiesaber",uniqueSet:!0,hash:"5d1356c9f8b4040007dcb9fd",avatar:"https://www.gravatar.com/avatar/5d1356c9f8b4040007dcb9fd?d=retro",type:"SIMPLE"},metadata:{bpm:177,duration:194,songName:"RISE (ft. The Glitch Mob, Mako, and The Word Alive)",songSubName:"",songAuthorName:"League Of Legends",levelAuthorName:"cookie"},stats:{plays:0,downloads:4858,upvotes:1257,downvotes:32,score:.9202},uploaded:"2020-01-01T19:07:55.492Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"0c296f8b51f4d7669987117f7b3fa68a1fd7d6b1",key:"7b9a",state:"Published",createdAt:"2020-01-01T19:07:55.492Z",sageScore:3,diffs:[{njs:10,offset:0,notes:411,bombs:0,obstacles:9,nps:2.323,length:522,characteristic:"Standard",difficulty:"Normal",events:874,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:176.949,paritySummary:{errors:14,warns:7,resets:0}},{njs:12,offset:0,notes:575,bombs:0,obstacles:6,nps:3.225,length:526,characteristic:"Standard",difficulty:"Hard",events:874,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:178.305,paritySummary:{errors:6,warns:6,resets:0}},{njs:15,offset:1,notes:719,bombs:0,obstacles:6,nps:4.032,length:526,characteristic:"Standard",difficulty:"Expert",events:875,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:178.305,paritySummary:{errors:19,warns:23,resets:0}}],downloadURL:"https://cdn.beatsaver.com/0c296f8b51f4d7669987117f7b3fa68a1fd7d6b1.zip",coverURL:"https://cdn.beatsaver.com/0c296f8b51f4d7669987117f7b3fa68a1fd7d6b1.jpg",previewURL:"https://cdn.beatsaver.com/0c296f8b51f4d7669987117f7b3fa68a1fd7d6b1.mp3"}],createdAt:"2020-01-01T19:07:55.492Z",updatedAt:"2020-01-01T19:07:55.492Z",lastPublishedAt:"2020-01-01T19:07:55.492Z"},{id:"65e6",name:"Kamado Tanjiro no Uta - Kimetsu no Yaiba EP 19 ED",description:"Video https://youtu.be/szYb7faqnkQ\nVideo by Monteblanco: https://www.youtube.com/watch?v=aI7nCWuC-dc\nVideo by Rigid (PogU): https://youtu.be/pnETOIkHv-o",uploader:{id:14262,name:"suzuki.dll",uniqueSet:!0,hash:"5d664fb90a981e00064ede12",avatar:"https://cdn.beatsaver.com/avatar/14262.jpg",type:"SIMPLE"},metadata:{bpm:152,duration:329,songName:"Kamado Tanjiro no Uta",songSubName:"ft. Nami Nakagawa",songAuthorName:"Go Shiina",levelAuthorName:"Suzuki.DLL"},stats:{plays:0,downloads:2575,upvotes:1259,downvotes:32,score:.9202},uploaded:"2019-09-26T02:31:39.964Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"746847c0026657a7235d845b7d014335c47972da",key:"65e6",state:"Published",createdAt:"2019-09-26T02:31:39.964Z",sageScore:5,diffs:[{njs:12,offset:.5,notes:561,bombs:0,obstacles:173,nps:1.752,length:811,characteristic:"Standard",difficulty:"Hard",events:806,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:320.132,paritySummary:{errors:45,warns:34,resets:0}}],downloadURL:"https://cdn.beatsaver.com/746847c0026657a7235d845b7d014335c47972da.zip",coverURL:"https://cdn.beatsaver.com/746847c0026657a7235d845b7d014335c47972da.jpg",previewURL:"https://cdn.beatsaver.com/746847c0026657a7235d845b7d014335c47972da.mp3"}],createdAt:"2019-09-26T02:31:39.964Z",updatedAt:"2019-09-26T02:31:39.964Z",lastPublishedAt:"2019-09-26T02:31:39.964Z"},{id:"56b3",name:"Caravan Palace - Wonderland",description:"Easy, Normal, Hard, Expert, Expert+",uploader:{id:4235138,name:"CyanSnow",uniqueSet:!0,hash:"5cff0b7698cc5a672c8543ac",avatar:"https://cdn.beatsaver.com/avatar/154341137694326784.png",type:"DISCORD"},metadata:{bpm:104,duration:175,songName:"Wonderland",songSubName:"",songAuthorName:"Caravan Palace",levelAuthorName:"CyanSnow"},stats:{plays:0,downloads:4852,upvotes:2516,downvotes:95,score:.9202},uploaded:"2019-07-13T05:01:13.826Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"5bdd8ddebcce1e19bcd10ca8921b0d1ab7624506",key:"56b3",state:"Published",createdAt:"2019-07-13T05:01:13.826Z",sageScore:7,diffs:[{njs:12,offset:1,notes:182,bombs:0,obstacles:0,nps:1.088,length:290,characteristic:"Standard",difficulty:"Easy",events:219,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:167.308,paritySummary:{errors:56,warns:7,resets:0}},{njs:12,offset:1,notes:255,bombs:0,obstacles:0,nps:1.524,length:290,characteristic:"Standard",difficulty:"Normal",events:292,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:167.308,paritySummary:{errors:29,warns:17,resets:0}},{njs:14,offset:0,notes:450,bombs:0,obstacles:0,nps:2.685,length:290.5,characteristic:"Standard",difficulty:"Hard",events:499,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:167.596,paritySummary:{errors:5,warns:4,resets:0}},{njs:15,offset:0,notes:487,bombs:0,obstacles:0,nps:2.906,length:290.5,characteristic:"Standard",difficulty:"Expert",events:525,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:167.596,paritySummary:{errors:4,warns:4,resets:0}},{njs:17,offset:.5,notes:713,bombs:5,obstacles:0,nps:4.243,length:291.25,characteristic:"Standard",difficulty:"ExpertPlus",events:797,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:168.029,paritySummary:{errors:8,warns:5,resets:0}}],downloadURL:"https://cdn.beatsaver.com/5bdd8ddebcce1e19bcd10ca8921b0d1ab7624506.zip",coverURL:"https://cdn.beatsaver.com/5bdd8ddebcce1e19bcd10ca8921b0d1ab7624506.jpg",previewURL:"https://cdn.beatsaver.com/5bdd8ddebcce1e19bcd10ca8921b0d1ab7624506.mp3"}],createdAt:"2019-07-13T05:01:13.826Z",updatedAt:"2019-07-13T05:01:13.826Z",lastPublishedAt:"2019-07-13T05:01:13.826Z"},{id:"4131",name:"Nevada feat. Cozi Zuehlsdorff - Vicetone",description:"YouTube Preview: https://youtu.be/3gb2gH8eueI",uploader:{id:30311,name:"bennydabeast",uniqueSet:!0,hash:"5cff0b7298cc5a672c84e98d",avatar:"https://cdn.beatsaver.com/avatar/30311.jpg",type:"SIMPLE"},metadata:{bpm:124,duration:209,songName:"Nevada (feat. Cozi Zuehlsdorff)",songSubName:"Vicetone",songAuthorName:"BennyDaBeast",levelAuthorName:"bennydabeast"},stats:{plays:0,downloads:2091,upvotes:1257,downvotes:32,score:.9202},uploaded:"2019-03-27T18:42:01Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"5e847d92de6e01dfd5ce3491969b3939b4374699",key:"4131",state:"Published",createdAt:"2019-03-27T18:42:01Z",sageScore:6,diffs:[{njs:10,offset:0,notes:387,bombs:0,obstacles:54,nps:1.932,length:414,characteristic:"Standard",difficulty:"Hard",events:1208,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:200.323,paritySummary:{errors:70,warns:23,resets:0}},{njs:12,offset:0,notes:616,bombs:0,obstacles:54,nps:3.075,length:414,characteristic:"Standard",difficulty:"Expert",events:1208,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:200.323,paritySummary:{errors:84,warns:55,resets:0}},{njs:14,offset:0,notes:868,bombs:0,obstacles:57,nps:4.333,length:414,characteristic:"Standard",difficulty:"ExpertPlus",events:1208,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:200.323,paritySummary:{errors:74,warns:61,resets:0}}],downloadURL:"https://cdn.beatsaver.com/5e847d92de6e01dfd5ce3491969b3939b4374699.zip",coverURL:"https://cdn.beatsaver.com/5e847d92de6e01dfd5ce3491969b3939b4374699.jpg",previewURL:"https://cdn.beatsaver.com/5e847d92de6e01dfd5ce3491969b3939b4374699.mp3"}],createdAt:"2019-03-27T18:42:01Z",updatedAt:"2019-03-27T18:42:01Z",lastPublishedAt:"2019-03-27T18:42:01Z"},{id:"8b21",name:"Invaders Must Die - Prodigy",description:"It's time to get ready for some pumping beats and dancy moves with a beat map for a Prodigy song. With the full spread of skill levels, get ready to move and in the swing of the rhythm of this great track.\n\nThanks to Kival Evan and Sorukun for testing.",uploader:{id:32141,name:"amstradhero",uniqueSet:!0,hash:"5cff0b7698cc5a672c8551be",avatar:"https://www.gravatar.com/avatar/5cff0b7698cc5a672c8551be?d=retro",type:"SIMPLE"},metadata:{bpm:140,duration:266,songName:"Invaders Must Die",songSubName:"",songAuthorName:"Prodigy",levelAuthorName:"AmstradHero"},stats:{plays:0,downloads:3044,upvotes:1276,downvotes:33,score:.9201},uploaded:"2020-02-27T09:40:25.643Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"eaa2d06cfed4d6cd5b9e0b89d5860c88c7ca8be5",key:"8b21",state:"Published",createdAt:"2020-02-27T09:40:25.643Z",sageScore:7,diffs:[{njs:10,offset:0,notes:326,bombs:16,obstacles:28,nps:1.248,length:609.5,characteristic:"Standard",difficulty:"Easy",events:8086,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:261.214,paritySummary:{errors:17,warns:18,resets:7}},{njs:12,offset:1.35,notes:468,bombs:16,obstacles:31,nps:1.792,length:609.5,characteristic:"Standard",difficulty:"Normal",events:8084,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:261.214,paritySummary:{errors:26,warns:20,resets:8}},{njs:13,offset:1.125,notes:660,bombs:12,obstacles:31,nps:2.527,length:609.5,characteristic:"Standard",difficulty:"Hard",events:8084,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:261.214,paritySummary:{errors:36,warns:45,resets:5}},{njs:14,offset:1,notes:1102,bombs:8,obstacles:15,nps:4.219,length:609.5,characteristic:"Standard",difficulty:"Expert",events:8084,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:261.214,paritySummary:{errors:44,warns:69,resets:4}},{njs:16,offset:.5,notes:1141,bombs:4,obstacles:15,nps:4.368,length:609.5,characteristic:"Standard",difficulty:"ExpertPlus",events:8084,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:261.214,paritySummary:{errors:35,warns:57,resets:2}}],downloadURL:"https://cdn.beatsaver.com/eaa2d06cfed4d6cd5b9e0b89d5860c88c7ca8be5.zip",coverURL:"https://cdn.beatsaver.com/eaa2d06cfed4d6cd5b9e0b89d5860c88c7ca8be5.jpg",previewURL:"https://cdn.beatsaver.com/eaa2d06cfed4d6cd5b9e0b89d5860c88c7ca8be5.mp3"}],createdAt:"2020-02-27T09:40:25.643Z",updatedAt:"2020-02-27T09:40:25.643Z",lastPublishedAt:"2020-02-27T09:40:25.643Z"},{id:"57f1",name:"Impossible Geometry - The Stupendium ft. Chi-chi",description:"Watch the video here: https://www.youtube.com/watch?v=PnKxhbRqqx0",uploader:{id:58338,name:"Joetastic",uniqueSet:!0,hash:"5cff0b7498cc5a672c85050e",avatar:"https://cdn.beatsaver.com/avatar/227767566402191360.png",type:"DISCORD"},metadata:{bpm:150,duration:211,songName:"Impossible Geometry",songSubName:"",songAuthorName:"The Stupendium ft. Chi-chi",levelAuthorName:"Joetastic"},stats:{plays:0,downloads:1475,upvotes:1166,downvotes:28,score:.9201},uploaded:"2019-07-19T18:24:56.241Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"84b16b7e9fe6e3b8f356be4f2dc0edc0a4178228",key:"57f1",state:"Published",createdAt:"2019-07-19T18:24:56.241Z",sageScore:5,diffs:[{njs:14,offset:0,notes:628,bombs:12,obstacles:42,nps:3.244,length:484,characteristic:"Standard",difficulty:"Expert",events:5545,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:193.6,paritySummary:{errors:53,warns:61,resets:0}}],downloadURL:"https://cdn.beatsaver.com/84b16b7e9fe6e3b8f356be4f2dc0edc0a4178228.zip",coverURL:"https://cdn.beatsaver.com/84b16b7e9fe6e3b8f356be4f2dc0edc0a4178228.jpg",previewURL:"https://cdn.beatsaver.com/84b16b7e9fe6e3b8f356be4f2dc0edc0a4178228.mp3"}],createdAt:"2019-07-19T18:24:56.241Z",updatedAt:"2019-07-19T18:24:56.241Z",lastPublishedAt:"2019-07-19T18:24:56.241Z"},{id:"53f0",name:"Panini - Lil Nas X",description:"“Panini” is the second single from Lil Nas X’s debut EP, 7, following his hit song, “Old Town Road. In this song, Lil Nas talks about his old fanbase and compares them to Panini, a character from the popular TV Series Chowder.",uploader:{id:58338,name:"Joetastic",uniqueSet:!0,hash:"5cff0b7498cc5a672c85050e",avatar:"https://cdn.beatsaver.com/avatar/227767566402191360.png",type:"DISCORD"},metadata:{bpm:77,duration:116,songName:"Panini",songSubName:"",songAuthorName:"Lil Nas X",levelAuthorName:"Joetastic"},stats:{plays:0,downloads:3360,upvotes:1212,downvotes:30,score:.9201},uploaded:"2019-06-22T05:07:06.657Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"6bb8e702d51055767fbc89df9ec81517e1d0e74c",key:"53f0",state:"Published",createdAt:"2019-06-22T05:07:06.657Z",sageScore:6,diffs:[{njs:14,offset:0,notes:388,bombs:0,obstacles:0,nps:3.482,length:143,characteristic:"Standard",difficulty:"Expert",events:1247,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:111.429,paritySummary:{errors:17,warns:21,resets:0}}],downloadURL:"https://cdn.beatsaver.com/6bb8e702d51055767fbc89df9ec81517e1d0e74c.zip",coverURL:"https://cdn.beatsaver.com/6bb8e702d51055767fbc89df9ec81517e1d0e74c.jpg",previewURL:"https://cdn.beatsaver.com/6bb8e702d51055767fbc89df9ec81517e1d0e74c.mp3"}],createdAt:"2019-06-22T05:07:06.657Z",updatedAt:"2019-06-22T05:07:06.657Z",lastPublishedAt:"2019-06-22T05:07:06.657Z"},{id:"1060",name:"X Gon' Give It To Ya Maybe",description:"Preview: \r\nhttps://www.youtube.com/watch?v=Q71NI5ohXhI\r\n\r\nOriginal mashup: https://www.youtube.com/watch?v=Fegs-XVKgnM",uploader:{id:4286278,name:"ruckus",uniqueSet:!0,hash:"5cff0b7398cc5a672c84f1d8",avatar:"https://cdn.beatsaver.com/avatar/239082462083284992.png",type:"DISCORD"},metadata:{bpm:120,duration:205,songName:"X Gon' Give It To Ya Maybe",songSubName:"oneboredjeu, Carly Rae Jepsen, DMX",songAuthorName:"Ruckus",levelAuthorName:"ruckus"},stats:{plays:0,downloads:4370,upvotes:2151,downvotes:76,score:.9201},uploaded:"2018-08-18T01:59:54Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"b86e27ad9149c123b3a4f90b2bce62f656083b01",key:"1060",state:"Published",createdAt:"2018-08-18T01:59:54Z",sageScore:4,diffs:[{njs:14,offset:0,notes:815,bombs:0,obstacles:0,nps:4.163,length:391.5,characteristic:"Standard",difficulty:"Expert",events:1511,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:195.75,paritySummary:{errors:91,warns:118,resets:0}}],downloadURL:"https://cdn.beatsaver.com/b86e27ad9149c123b3a4f90b2bce62f656083b01.zip",coverURL:"https://cdn.beatsaver.com/b86e27ad9149c123b3a4f90b2bce62f656083b01.jpg",previewURL:"https://cdn.beatsaver.com/b86e27ad9149c123b3a4f90b2bce62f656083b01.mp3"}],createdAt:"2018-08-18T01:59:54Z",updatedAt:"2018-08-18T01:59:54Z",lastPublishedAt:"2018-08-18T01:59:54Z"},{id:"5fc",name:"Waiting For Love - Avicii",description:"Avicii Waiting for love\r\nEasy, Normal, Hard, Expert\r\nRun Time : 3m 50s\r\nBPM 128.15\r\n\r\nFeedback would be greatly appreciated :)",uploader:{id:47059,name:"rocket",uniqueSet:!0,hash:"5cff0b7398cc5a672c84f1c0",avatar:"https://www.gravatar.com/avatar/5cff0b7398cc5a672c84f1c0?d=retro",type:"SIMPLE"},metadata:{bpm:128,duration:230,songName:"Waiting For Love",songSubName:"Avicii",songAuthorName:"Rocket",levelAuthorName:"rocket"},stats:{plays:0,downloads:12913,upvotes:5636,downvotes:276,score:.9201},uploaded:"2018-06-20T23:44:52Z",automapper:!1,ranked:!0,qualified:!1,versions:[{hash:"4b7cdfcf558f66acc4b7a506c2dd50fbd9a76354",key:"5fc",state:"Published",createdAt:"2018-06-20T23:44:52Z",sageScore:6,diffs:[{njs:10,offset:0,notes:266,bombs:8,obstacles:8,nps:1.184,length:480,characteristic:"Standard",difficulty:"Easy",events:1179,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:225,paritySummary:{errors:62,warns:23,resets:0},stars:1.1},{njs:10,offset:0,notes:485,bombs:6,obstacles:8,nps:2.158,length:480,characteristic:"Standard",difficulty:"Normal",events:1181,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:225,paritySummary:{errors:121,warns:51,resets:0},stars:1.54},{njs:10,offset:0,notes:742,bombs:14,obstacles:8,nps:3.302,length:479.966,characteristic:"Standard",difficulty:"Hard",events:1177,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:224.984,paritySummary:{errors:130,warns:53,resets:0}},{njs:10,offset:0,notes:875,bombs:11,obstacles:8,nps:3.893,length:480,characteristic:"Standard",difficulty:"Expert",events:1190,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:225,paritySummary:{errors:125,warns:100,resets:0}}],downloadURL:"https://cdn.beatsaver.com/4b7cdfcf558f66acc4b7a506c2dd50fbd9a76354.zip",coverURL:"https://cdn.beatsaver.com/4b7cdfcf558f66acc4b7a506c2dd50fbd9a76354.jpg",previewURL:"https://cdn.beatsaver.com/4b7cdfcf558f66acc4b7a506c2dd50fbd9a76354.mp3"}],createdAt:"2018-06-20T23:44:52Z",updatedAt:"2018-06-20T23:44:52Z",lastPublishedAt:"2018-06-20T23:44:52Z"},{id:"a233",name:"[NoodleJams Vol.1] 5 Seconds of Summer - Teeth",description:"Coming down with the isolation blues? Why not check out my new release! This one includes my first time playing around with Chroma lighting, so make sure you download Chroma 2.0 from Mod Assistant! The lights were inspired by the music video for this track, including re-creating some of the effects shown in the video. A Lightshow is included if you'd like to just check them out separately.\n\nThanks to qwasyx, Dat360NoScope, Sorukun, helencarnate, Shutforever, Pyrowarfare, and ethan_mp4 for playtesting.\n\nAnd a special thanks to AaltopahWi for advice on using Chroma, Aeroluna for Chroma 2.0, and CyanSnow for Chroma conversion help!\n\nAnd now some song details:\nBPM: 139\nNotes: Ez - 401 ; N - 514 ; H - 630 ; Ex - 868 ; Ex+ - 946\nNPS: Ez - 1.93 ; N - 2.48 ; H - 3.04 ; Ex - 4.18 ; Ex+ - 4.56\nBombs: None!\nWalls: Ez - 55 ; N - 44 ; H - 34 ; Ex - 22 ; Ex+ - 28",uploader:{id:4285188,name:"fruhead",uniqueSet:!0,hash:"5cff0b7598cc5a672c852683",avatar:"https://cdn.beatsaver.com/avatar/174000100413145090.png",type:"DISCORD"},metadata:{bpm:139,duration:207,songName:"Teeth",songSubName:"",songAuthorName:"5 Seconds of Summer",levelAuthorName:"fruhead"},stats:{plays:0,downloads:4256,upvotes:884,downvotes:16,score:.92},uploaded:"2020-05-04T04:13:11.364Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"0986c659b17b62f13098ff3598d781942eac9092",key:"a233",state:"Published",createdAt:"2020-05-04T04:13:11.364Z",sageScore:7,diffs:[{njs:10,offset:-.5,notes:401,bombs:0,obstacles:55,nps:2.002,length:464,characteristic:"Standard",difficulty:"Easy",events:8266,chroma:!0,me:!1,ne:!1,cinema:!1,seconds:200.288,paritySummary:{errors:49,warns:8,resets:0}},{njs:12,offset:.7,notes:514,bombs:0,obstacles:44,nps:2.566,length:464,characteristic:"Standard",difficulty:"Normal",events:8266,chroma:!0,me:!1,ne:!1,cinema:!1,seconds:200.288,paritySummary:{errors:8,warns:4,resets:0}},{njs:14,offset:.3,notes:630,bombs:0,obstacles:34,nps:3.145,length:464,characteristic:"Standard",difficulty:"Hard",events:8266,chroma:!0,me:!1,ne:!1,cinema:!1,seconds:200.288,paritySummary:{errors:5,warns:4,resets:0}},{njs:15,offset:.2,notes:868,bombs:0,obstacles:24,nps:4.334,length:464,characteristic:"Standard",difficulty:"Expert",events:8266,chroma:!0,me:!1,ne:!1,cinema:!1,seconds:200.288,paritySummary:{errors:4,warns:2,resets:0}},{njs:17,offset:0,notes:946,bombs:0,obstacles:28,nps:4.723,length:464.063,characteristic:"Standard",difficulty:"ExpertPlus",events:8266,chroma:!0,me:!1,ne:!1,cinema:!1,seconds:200.315,paritySummary:{errors:4,warns:2,resets:0}},{njs:12,offset:0,notes:0,bombs:0,obstacles:0,nps:0,length:0,characteristic:"Lightshow",difficulty:"Easy",events:8266,chroma:!0,me:!1,ne:!1,cinema:!1,seconds:0,paritySummary:{errors:0,warns:0,resets:0}}],downloadURL:"https://cdn.beatsaver.com/0986c659b17b62f13098ff3598d781942eac9092.zip",coverURL:"https://cdn.beatsaver.com/0986c659b17b62f13098ff3598d781942eac9092.jpg",previewURL:"https://cdn.beatsaver.com/0986c659b17b62f13098ff3598d781942eac9092.mp3"}],createdAt:"2020-05-04T04:13:11.364Z",updatedAt:"2020-05-04T04:13:11.364Z",lastPublishedAt:"2020-05-04T04:13:11.364Z"},{id:"cb19",name:"[Extra Sensory] Mick Gordon - At DOOM's Gate",description:'Rip and tear\n\n\nExtra super huge thank you to the following people for making this possible\nAeroluna- For making Noodle Extensions and updating Chroma\nReaxt- For helping with making the scripts used to create this map and for inspiring us to continue through with this project.\nArti- For making the core mod that allowed Noodle Extensions and Chroma to support the new values\n\nAnd thank you for putting up with my shit during this (again) :)\n\nThis map was released as a part of the "Extra Sensory" event.\n\nVideo: https://www.youtube.com/watch?v=21JWpIWhqjg',uploader:{id:4235138,name:"CyanSnow",uniqueSet:!0,hash:"5cff0b7698cc5a672c8543ac",avatar:"https://cdn.beatsaver.com/avatar/154341137694326784.png",type:"DISCORD"},metadata:{bpm:161,duration:72,songName:"At DOOM's Gate",songSubName:"",songAuthorName:"Mick Gordon",levelAuthorName:"CyanSnow"},stats:{plays:0,downloads:7731,upvotes:2500,downvotes:95,score:.9199},uploaded:"2020-07-31T01:44:50.965Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"b0ea07691e483e7f5b2d9a2daf6774b512a68855",key:"cb19",state:"Published",createdAt:"2020-07-31T01:44:50.965Z",sageScore:3,diffs:[{njs:19,offset:0,notes:342,bombs:0,obstacles:4190,nps:5.305,length:173,characteristic:"Standard",difficulty:"ExpertPlus",events:261,chroma:!0,me:!1,ne:!0,cinema:!1,seconds:64.472,paritySummary:{errors:0,warns:0,resets:0}}],downloadURL:"https://cdn.beatsaver.com/b0ea07691e483e7f5b2d9a2daf6774b512a68855.zip",coverURL:"https://cdn.beatsaver.com/b0ea07691e483e7f5b2d9a2daf6774b512a68855.jpg",previewURL:"https://cdn.beatsaver.com/b0ea07691e483e7f5b2d9a2daf6774b512a68855.mp3"}],createdAt:"2020-07-31T01:44:50.965Z",updatedAt:"2020-07-31T01:44:50.965Z",lastPublishedAt:"2020-07-31T01:44:50.965Z"},{id:"570d",name:"Duel of the Fates (Techno Remix) - Star Wars",description:'|-o-| *Mapping Extensions Required* |-o-|\n"Fear is the path to the dark side. Fear leads to anger. Anger leads to hate. Hate leads to suffering."\nA Collab Between myself and EpicEwok. Audio Edit by Kolezan <3\nNotes Per Second:\nEasy / 1.2\nNormal / 1.5\nHard / 2.6\nExpert / 3.3\nExpert+ / 4.7\nSingle Saber (Expert) / 3.0\nFor Quest Users, we have a version without the walls for you here: https://beatsaver.com/beatmap/570c\nExpert+ Playthrough: https://streamable.com/3sftt\n',uploader:{id:11373,name:"redmagi",uniqueSet:!0,hash:"5cff0b7298cc5a672c84e9d2",avatar:"https://www.gravatar.com/avatar/5cff0b7298cc5a672c84e9d2?d=retro",type:"SIMPLE"},metadata:{bpm:140,duration:252,songName:"Duel of the Fates ",songSubName:"",songAuthorName:"Techno Remix",levelAuthorName:"Sha3dy D3stiny"},stats:{plays:0,downloads:9452,upvotes:2313,downvotes:85,score:.9199},uploaded:"2019-07-14T20:18:06.134Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"65c578117df8bae1c83c98b43e4218b23a8de3f3",key:"570d",state:"Published",createdAt:"2019-07-14T20:18:06.134Z",sageScore:7,diffs:[{njs:12,offset:0,notes:307,bombs:0,obstacles:190,nps:1.282,length:558.755,characteristic:"Standard",difficulty:"Easy",events:6138,chroma:!1,me:!0,ne:!1,cinema:!1,seconds:239.466,paritySummary:{errors:32,warns:6,resets:0}},{njs:12,offset:0,notes:376,bombs:0,obstacles:190,nps:1.571,length:558.63,characteristic:"Standard",difficulty:"Normal",events:1272,chroma:!1,me:!0,ne:!1,cinema:!1,seconds:239.413,paritySummary:{errors:14,warns:10,resets:0}},{njs:14,offset:0,notes:669,bombs:0,obstacles:190,nps:2.794,length:558.797,characteristic:"Standard",difficulty:"Hard",events:1272,chroma:!1,me:!0,ne:!1,cinema:!1,seconds:239.484,paritySummary:{errors:15,warns:21,resets:0}},{njs:15,offset:0,notes:832,bombs:0,obstacles:190,nps:3.474,length:558.792,characteristic:"Standard",difficulty:"Expert",events:6138,chroma:!1,me:!0,ne:!1,cinema:!1,seconds:239.482,paritySummary:{errors:33,warns:39,resets:0}},{njs:16,offset:0,notes:1191,bombs:0,obstacles:190,nps:4.97,length:559.125,characteristic:"Standard",difficulty:"ExpertPlus",events:6138,chroma:!1,me:!0,ne:!1,cinema:!1,seconds:239.625,paritySummary:{errors:49,warns:67,resets:0}},{njs:15,offset:0,notes:750,bombs:0,obstacles:190,nps:3.131,length:558.917,characteristic:"OneSaber",difficulty:"Expert",events:6138,chroma:!1,me:!0,ne:!1,cinema:!1,seconds:239.536,paritySummary:{errors:48,warns:70,resets:0}}],downloadURL:"https://cdn.beatsaver.com/65c578117df8bae1c83c98b43e4218b23a8de3f3.zip",coverURL:"https://cdn.beatsaver.com/65c578117df8bae1c83c98b43e4218b23a8de3f3.jpg",previewURL:"https://cdn.beatsaver.com/65c578117df8bae1c83c98b43e4218b23a8de3f3.mp3"}],createdAt:"2019-07-14T20:18:06.134Z",updatedAt:"2019-07-14T20:18:06.134Z",lastPublishedAt:"2019-07-14T20:18:06.134Z"},{id:"4fe8",name:"Red Like Roses [One Saber] (RWBY: Volume 1 Soundtrack) - Jeff Williams ft. Casey Lee Williams",description:"Red like roses in one saber! Finally y'all can play this with a custom crescent rose saber and not look weird holding two! Further improved the sync on this from the original v2 of red like roses. Not all beats were mapped because its hard to hit consistent non stop 1/4s with only one saber but the ending section is still pretty tiring so prepare your arm :P. Map comes in two shades of Crescent Red.",uploader:{id:58338,name:"Joetastic",uniqueSet:!0,hash:"5cff0b7498cc5a672c85050e",avatar:"https://cdn.beatsaver.com/avatar/227767566402191360.png",type:"DISCORD"},metadata:{bpm:200,duration:194,songName:"Red Like Roses (One Saber)",songSubName:"Jeff Williams ft. Casey Lee Williams",songAuthorName:"Joetastic",levelAuthorName:"Joetastic"},stats:{plays:0,downloads:3763,upvotes:648,downvotes:7,score:.9199},uploaded:"2019-05-30T13:34:51Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"0fdfb6fb8788f52b78c981c85cf9f316e4b6f232",key:"4fe8",state:"Published",createdAt:"2019-05-30T13:34:51Z",sageScore:5,diffs:[{njs:14,offset:0,notes:463,bombs:2,obstacles:22,nps:2.47,length:627.987,characteristic:"OneSaber",difficulty:"Expert",events:641,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:188.396,paritySummary:{errors:18,warns:18,resets:1}}],downloadURL:"https://cdn.beatsaver.com/0fdfb6fb8788f52b78c981c85cf9f316e4b6f232.zip",coverURL:"https://cdn.beatsaver.com/0fdfb6fb8788f52b78c981c85cf9f316e4b6f232.jpg",previewURL:"https://cdn.beatsaver.com/0fdfb6fb8788f52b78c981c85cf9f316e4b6f232.mp3"}],createdAt:"2019-05-30T13:34:51Z",updatedAt:"2019-05-30T13:34:51Z",lastPublishedAt:"2019-05-30T13:34:51Z"},{id:"1bf",name:"Caravan Palace - Lone Digger",description:"Caravan Palace - Lone Digger\r\nEasy | Normal | Hard | Expert\r\nThis is a re-upload of my previous map, with improvements for hard, and a new, harder expert difficulty mapped by Squeaksies, as well as lower difficulties as iterations on my original map.\r\n\r\nBPM: 124\r\nDuration: 2:49\r\nNotes (Hard): 730\r\nNotes (Expert): 735\r\nPreview (Hard): https://youtu.be/NExvLUyeBUU\r\nPreview (Expert): https://youtu.be/NYmExXlpB0k",uploader:{id:45732,name:"calijor",uniqueSet:!1,hash:"5cff0b7298cc5a672c84ebb1",avatar:"https://www.gravatar.com/avatar/5cff0b7298cc5a672c84ebb1?d=retro",type:"SIMPLE"},metadata:{bpm:124,duration:170,songName:"Lone Digger",songSubName:"",songAuthorName:"Caravan Palace",levelAuthorName:"calijor"},stats:{plays:0,downloads:13174,upvotes:16427,downvotes:987,score:.9199},uploaded:"2018-05-23T00:15:19Z",automapper:!1,ranked:!0,qualified:!1,versions:[{hash:"906160fd1f808e2f34f33c2ca5920118855c065d",key:"1bf",state:"Published",createdAt:"2018-05-23T00:15:19Z",sageScore:5,diffs:[{njs:10,offset:0,notes:313,bombs:0,obstacles:27,nps:1.931,length:334.938,characteristic:"Standard",difficulty:"Easy",events:1208,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:162.067,paritySummary:{errors:80,warns:32,resets:0},stars:1.2},{njs:10,offset:0,notes:480,bombs:0,obstacles:27,nps:2.953,length:335.938,characteristic:"Standard",difficulty:"Normal",events:1208,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:162.55,paritySummary:{errors:56,warns:112,resets:0}},{njs:10,offset:0,notes:730,bombs:0,obstacles:27,nps:4.491,length:335.938,characteristic:"Standard",difficulty:"Hard",events:1208,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:162.55,paritySummary:{errors:157,warns:122,resets:0}},{njs:10,offset:0,notes:735,bombs:11,obstacles:2,nps:4.555,length:333.5,characteristic:"Standard",difficulty:"Expert",events:1198,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:161.371,paritySummary:{errors:163,warns:131,resets:5}}],downloadURL:"https://cdn.beatsaver.com/906160fd1f808e2f34f33c2ca5920118855c065d.zip",coverURL:"https://cdn.beatsaver.com/906160fd1f808e2f34f33c2ca5920118855c065d.jpg",previewURL:"https://cdn.beatsaver.com/906160fd1f808e2f34f33c2ca5920118855c065d.mp3"}],createdAt:"2018-05-23T00:15:19Z",updatedAt:"2018-05-23T00:15:19Z",lastPublishedAt:"2018-05-23T00:15:19Z"},{id:"17195",name:"Ayunda Risu - KING",description:"There's a lotta covers of KING, but Risu's definitely takes the cake\n\nThis was a special request from a good friend of mine\n\nDifficulties |\nExpert+\nExpert\nHard\nNormal\nEasy\n\nThank you for playing\n\nDM any feedback on Discord\nETAN#8341",uploader:{id:4235140,name:"etan",uniqueSet:!0,hash:"5cff0b7798cc5a672c855775",avatar:"https://cdn.beatsaver.com/avatar/136373107559497728.png",type:"DISCORD"},metadata:{bpm:166,duration:137,songName:"KING",songSubName:"",songAuthorName:"Ayunda Risu",levelAuthorName:"ETAN"},stats:{plays:0,downloads:3066,upvotes:829,downvotes:14,score:.9198},uploaded:"2021-04-24T01:55:50.843Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"0d191cd2dfe9404e4f58b5520bbc9b7b9cafa8c7",key:"17195",state:"Published",createdAt:"2021-04-24T01:55:50.843Z",sageScore:6,diffs:[{njs:10,offset:0,notes:158,bombs:0,obstacles:11,nps:1.228,length:356,characteristic:"Standard",difficulty:"Easy",events:5937,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:128.675,paritySummary:{errors:16,warns:2,resets:0}},{njs:12,offset:0,notes:206,bombs:0,obstacles:11,nps:1.601,length:356,characteristic:"Standard",difficulty:"Normal",events:5937,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:128.675,paritySummary:{errors:26,warns:0,resets:0}},{njs:13,offset:.75,notes:397,bombs:0,obstacles:11,nps:3.06,length:359,characteristic:"Standard",difficulty:"Hard",events:5937,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:129.759,paritySummary:{errors:0,warns:0,resets:0}},{njs:15,offset:.2,notes:528,bombs:0,obstacles:11,nps:3.98,length:367,characteristic:"Standard",difficulty:"Expert",events:5937,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:132.651,paritySummary:{errors:0,warns:0,resets:0}},{njs:17,offset:-.2,notes:716,bombs:0,obstacles:11,nps:5.398,length:367,characteristic:"Standard",difficulty:"ExpertPlus",events:5937,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:132.651,paritySummary:{errors:0,warns:3,resets:0}}],downloadURL:"https://cdn.beatsaver.com/0d191cd2dfe9404e4f58b5520bbc9b7b9cafa8c7.zip",coverURL:"https://cdn.beatsaver.com/0d191cd2dfe9404e4f58b5520bbc9b7b9cafa8c7.jpg",previewURL:"https://cdn.beatsaver.com/0d191cd2dfe9404e4f58b5520bbc9b7b9cafa8c7.mp3"}],createdAt:"2021-04-24T01:55:50.843Z",updatedAt:"2021-04-24T01:55:50.843Z",lastPublishedAt:"2021-04-24T01:55:50.843Z"},{id:"142ea",name:"K/DA - VILLAIN (ft. Madison Beer, Kim Petras)",description:"From the unofficial music pack (K/DA ALL OUT) on BSaber.com\nPack: https://bsaber.com/kda-all-out/\nTrailer: https://youtu.be/e1ry_H86zqg\nPreview (Expert+): https://youtu.be/hrNAqEg6XPo\nLightshow: https://youtu.be/ZIqbGM4GjPc\n__________\nCredits🤍\nMapper: Sotarks\nLighter: Sotarks\nCurators: Pixelguy, JohnnyDee & joey\nSpecial Thanks: eliotttate & Belaya\nTrailer: Tuffiii\n__________\nCheck out K/DA🤍\nhttps://twitter.com/kda_music\nhttps://linktr.ee/kda_music\nProduced by Riot Games",uploader:{id:2523,name:"sotarks",uniqueSet:!0,hash:"5cff0b7698cc5a672c8541fd",avatar:"https://www.gravatar.com/avatar/5cff0b7698cc5a672c8541fd?d=retro",type:"SIMPLE"},metadata:{bpm:160,duration:201,songName:"VILLAIN",songSubName:"",songAuthorName:"K/DA",levelAuthorName:"Sotarks"},stats:{plays:0,downloads:12713,upvotes:1439,downvotes:41,score:.9198},uploaded:"2021-02-17T18:04:42.442Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"d0c3395e0cce21f1e03ea9352543e4aaef74b902",key:"142ea",state:"Published",createdAt:"2021-02-17T18:04:42.442Z",sageScore:7,diffs:[{njs:12,offset:-1.4371349,notes:225,bombs:0,obstacles:179,nps:1.174,length:511,characteristic:"Standard",difficulty:"Easy",events:2930,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:191.625,paritySummary:{errors:39,warns:1,resets:0}},{njs:12,offset:-1.4361658,notes:303,bombs:0,obstacles:139,nps:1.581,length:511,characteristic:"Standard",difficulty:"Normal",events:2930,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:191.625,paritySummary:{errors:3,warns:0,resets:0}},{njs:14,offset:.19046581,notes:526,bombs:0,obstacles:170,nps:2.667,length:526,characteristic:"Standard",difficulty:"Hard",events:2930,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:197.25,paritySummary:{errors:5,warns:0,resets:0}},{njs:16,offset:-.0027478295,notes:738,bombs:4,obstacles:177,nps:3.741,length:526,characteristic:"Standard",difficulty:"Expert",events:2930,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:197.25,paritySummary:{errors:2,warns:0,resets:1}},{njs:18,offset:-.3,notes:900,bombs:156,obstacles:121,nps:4.563,length:526,characteristic:"Standard",difficulty:"ExpertPlus",events:2985,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:197.25,paritySummary:{errors:2,warns:11,resets:9}}],downloadURL:"https://cdn.beatsaver.com/d0c3395e0cce21f1e03ea9352543e4aaef74b902.zip",coverURL:"https://cdn.beatsaver.com/d0c3395e0cce21f1e03ea9352543e4aaef74b902.jpg",previewURL:"https://cdn.beatsaver.com/d0c3395e0cce21f1e03ea9352543e4aaef74b902.mp3"}],createdAt:"2021-02-17T18:04:42.442Z",updatedAt:"2021-02-17T18:04:42.442Z",lastPublishedAt:"2021-02-17T18:04:42.442Z"},{id:"850a",name:"Ellie Goulding - Lights",description:"Wanted to map this for a little while, really fun song that I know should make for a fun map (hopefully I was able to deliver that)\n\nThanks to Sorukun and Eku for feedback and testing\n\nEnjoy!",uploader:{id:4286161,name:"amuga",uniqueSet:!0,hash:"5e0a61e546a0710006590f49",avatar:"https://cdn.beatsaver.com/avatar/92425939555713024.png",type:"DISCORD"},metadata:{bpm:120,duration:213,songName:"Lights",songSubName:"",songAuthorName:"Ellie Goulding",levelAuthorName:"Amuga"},stats:{plays:0,downloads:2383,upvotes:752,downvotes:11,score:.9198},uploaded:"2020-02-08T00:21:39.641Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"3b3ef5f5438e7928fdb747004308e8a8d6a23dc8",key:"850a",state:"Published",createdAt:"2020-02-08T00:21:39.641Z",sageScore:4,diffs:[{njs:16,offset:-.25,notes:921,bombs:0,obstacles:13,nps:4.433,length:415.5,characteristic:"Standard",difficulty:"ExpertPlus",events:2299,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:207.75,paritySummary:{errors:1,warns:1,resets:0}}],downloadURL:"https://cdn.beatsaver.com/3b3ef5f5438e7928fdb747004308e8a8d6a23dc8.zip",coverURL:"https://cdn.beatsaver.com/3b3ef5f5438e7928fdb747004308e8a8d6a23dc8.jpg",previewURL:"https://cdn.beatsaver.com/3b3ef5f5438e7928fdb747004308e8a8d6a23dc8.mp3"}],createdAt:"2020-02-08T00:21:39.641Z",updatedAt:"2020-02-08T00:21:39.641Z",lastPublishedAt:"2020-02-08T00:21:39.641Z"},{id:"332f",name:"Spin Me Around (Spin Edition) - Dead or Alive",description:'*DISCLAIMER*\r\nThere are optional Dot "Freestyle" Sections in this one! Be careful when attempting spins!\r\n*YOU HAVE BEEN WARNED!*\r\n\r\nExpert+ has a few 1/4 beat hits, but is otherwise the same as Expert. Both Expert and Expert+ have the Dot Freestyle sections.\r\n\r\nNotes per Second / Video Play-through:\r\nEasy: 1.7 / https://streamable.com/t95t1\r\nNormal: 2 / https://streamable.com/al3de\r\nHard: 2.5 / https://streamable.com/5z1h5\r\nExpert: 3.9 / https://streamable.com/lq07e\r\nExpert+: 4.2 / https://streamable.com/dfygc (With FREESTYLE Moves!)\r\n\r\nMany Thanks to Aggro for the inspiration for this VERY SILLY spin move and Fromen for letting me use his map as a baseline for this!',uploader:{id:11373,name:"redmagi",uniqueSet:!0,hash:"5cff0b7298cc5a672c84e9d2",avatar:"https://www.gravatar.com/avatar/5cff0b7298cc5a672c84e9d2?d=retro",type:"SIMPLE"},metadata:{bpm:128,duration:188,songName:"Spin Me Round (Spin Edition)",songSubName:"Dead or Alive",songAuthorName:"Redmagi",levelAuthorName:"redmagi"},stats:{plays:0,downloads:4271,upvotes:1418,downvotes:40,score:.9198},uploaded:"2019-02-03T02:19:40Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"1274bb0c32bb9e5bdb677ca7eca18a45d454aaf7",key:"332f",state:"Published",createdAt:"2019-02-03T02:19:40Z",sageScore:7,diffs:[{njs:10,offset:0,notes:318,bombs:0,obstacles:0,nps:1.732,length:392,characteristic:"Standard",difficulty:"Easy",events:11030,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:183.75,paritySummary:{errors:38,warns:25,resets:0}},{njs:10,offset:0,notes:370,bombs:0,obstacles:2,nps:2.016,length:392,characteristic:"Standard",difficulty:"Normal",events:11030,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:183.75,paritySummary:{errors:30,warns:15,resets:0}},{njs:10,offset:0,notes:479,bombs:0,obstacles:1,nps:2.609,length:392,characteristic:"Standard",difficulty:"Hard",events:11030,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:183.75,paritySummary:{errors:43,warns:89,resets:0}},{njs:12,offset:0,notes:743,bombs:0,obstacles:0,nps:4.047,length:392,characteristic:"Standard",difficulty:"Expert",events:11030,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:183.75,paritySummary:{errors:32,warns:56,resets:0}},{njs:14,offset:0,notes:792,bombs:0,obstacles:0,nps:4.314,length:392,characteristic:"Standard",difficulty:"ExpertPlus",events:11030,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:183.75,paritySummary:{errors:35,warns:70,resets:0}}],downloadURL:"https://cdn.beatsaver.com/1274bb0c32bb9e5bdb677ca7eca18a45d454aaf7.zip",coverURL:"https://cdn.beatsaver.com/1274bb0c32bb9e5bdb677ca7eca18a45d454aaf7.jpg",previewURL:"https://cdn.beatsaver.com/1274bb0c32bb9e5bdb677ca7eca18a45d454aaf7.mp3"}],createdAt:"2019-02-03T02:19:40Z",updatedAt:"2019-02-03T02:19:40Z",lastPublishedAt:"2019-02-03T02:19:40Z"},{id:"9bdb",name:"Everything Black (feat. Mike Taylor) - Unlike Pluto",description:"This song is special to me :) Hope you enjoy!\n\nMaul-map by Trolav. Check out his other fantastic maps here -> https://beatsaver.com/uploader/5cff0b7598cc5a672c85368e\nExpert by Checkthepan. Check out his other awesome maps here -> https://beatsaver.com/uploader/5cff0b7398cc5a672c84f3d5\nExpert+ by me.\n\nPreviews:\n\nExpert+: https://youtu.be/gO2pLki8Hic\n\nExpert: https://youtu.be/oTF1tW2AKtg\n\nWann give some feedback? Hit me up on discord -> JohnnyDee#0002",uploader:{id:1991,name:"johnnydee",uniqueSet:!0,hash:"5d3e1593130e0e00069019f7",avatar:"https://www.gravatar.com/avatar/5d3e1593130e0e00069019f7?d=retro",type:"SIMPLE"},metadata:{bpm:98,duration:230,songName:"Everything Black",songSubName:"(feat. Mike Taylor)",songAuthorName:"Unlike Pluto",levelAuthorName:"Ramen Noodle"},stats:{plays:0,downloads:1934,upvotes:1017,downvotes:22,score:.9197},uploaded:"2020-04-17T07:02:17.945Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"0d005c0ae0b1e3ff7c43aef0dbc7d40fdb02d8fb",key:"9bdb",state:"Published",createdAt:"2020-04-17T07:02:17.945Z",sageScore:5,diffs:[{njs:15,offset:.4,notes:714,bombs:0,obstacles:6,nps:3.167,length:368.188,characteristic:"Standard",difficulty:"Expert",events:2661,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:225.421,paritySummary:{errors:1,warns:1,resets:0}},{njs:17,offset:.4,notes:767,bombs:0,obstacles:122,nps:3.403,length:368.094,characteristic:"Standard",difficulty:"ExpertPlus",events:2250,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:225.364,paritySummary:{errors:0,warns:0,resets:0}},{njs:18,offset:.2,notes:717,bombs:0,obstacles:122,nps:3.182,length:368,characteristic:"NoArrows",difficulty:"Expert",events:2248,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:225.306,paritySummary:{errors:0,warns:0,resets:0}}],downloadURL:"https://cdn.beatsaver.com/0d005c0ae0b1e3ff7c43aef0dbc7d40fdb02d8fb.zip",coverURL:"https://cdn.beatsaver.com/0d005c0ae0b1e3ff7c43aef0dbc7d40fdb02d8fb.jpg",previewURL:"https://cdn.beatsaver.com/0d005c0ae0b1e3ff7c43aef0dbc7d40fdb02d8fb.mp3"}],createdAt:"2020-04-17T07:02:17.945Z",updatedAt:"2020-04-17T07:02:17.945Z",lastPublishedAt:"2020-04-17T07:02:17.945Z"},{id:"fc05",name:"EVERGLOW - LA DI DA",description:"This is a map, there's 3 difficulties which are respectively pretty hard for what they should be. \nExpert+ Preview: https://youtu.be/W8JN3NSaX9A\nRequests or complaints - Discord: SimplyMarvellous#0290 ",uploader:{id:4285134,name:"simplymarvellous",uniqueSet:!0,hash:"5cff0b7398cc5a672c84f7a8",avatar:"https://cdn.beatsaver.com/avatar/189618441429319680.png",type:"DISCORD"},metadata:{bpm:164,duration:213,songName:"LA DI DA",songSubName:"",songAuthorName:"EVERGLOW",levelAuthorName:"simplymarvellous"},stats:{plays:0,downloads:7650,upvotes:825,downvotes:14,score:.9196},uploaded:"2020-10-09T07:03:45.316Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"000fbcb46c41cd0c363a80ae389333f7625e0921",key:"fc05",state:"Published",createdAt:"2020-10-09T07:03:45.316Z",sageScore:4,diffs:[{njs:14,offset:.4,notes:651,bombs:36,obstacles:166,nps:3.138,length:567,characteristic:"Standard",difficulty:"Hard",events:9456,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:207.439,paritySummary:{errors:1,warns:0,resets:12}},{njs:16,offset:0,notes:811,bombs:36,obstacles:172,nps:3.91,length:567,characteristic:"Standard",difficulty:"Expert",events:9456,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:207.439,paritySummary:{errors:0,warns:0,resets:9}},{njs:18,offset:-.4,notes:934,bombs:26,obstacles:172,nps:4.503,length:567,characteristic:"Standard",difficulty:"ExpertPlus",events:9456,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:207.439,paritySummary:{errors:0,warns:4,resets:6}}],downloadURL:"https://cdn.beatsaver.com/000fbcb46c41cd0c363a80ae389333f7625e0921.zip",coverURL:"https://cdn.beatsaver.com/000fbcb46c41cd0c363a80ae389333f7625e0921.jpg",previewURL:"https://cdn.beatsaver.com/000fbcb46c41cd0c363a80ae389333f7625e0921.mp3"}],createdAt:"2020-10-09T07:03:45.316Z",updatedAt:"2020-10-09T07:03:45.316Z",lastPublishedAt:"2020-10-09T07:03:45.316Z"},{id:"2b13",name:"Viva La Vida - Coldplay",description:"Love Viva La Vida, was one of my favorite childhood songs from Coldplay. 9 Years later, this song ages like fine wine. Just like Grenade, I brought this song off itunes so its the highest quality file you can get :)",uploader:{id:58338,name:"Joetastic",uniqueSet:!0,hash:"5cff0b7498cc5a672c85050e",avatar:"https://cdn.beatsaver.com/avatar/227767566402191360.png",type:"DISCORD"},metadata:{bpm:138,duration:243,songName:"Viva La Vida",songSubName:"Coldplay",songAuthorName:"Joetastic",levelAuthorName:"Joetastic"},stats:{plays:0,downloads:5911,upvotes:1934,downvotes:66,score:.9196},uploaded:"2019-01-05T06:02:16Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"023f19dd2ae57e43b99d62c837d1c708020f635d",key:"2b13",state:"Published",createdAt:"2019-01-05T06:02:16Z",sageScore:5,diffs:[{njs:14,offset:0,notes:919,bombs:0,obstacles:41,nps:4.136,length:511,characteristic:"Standard",difficulty:"Hard",events:714,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:222.174,paritySummary:{errors:41,warns:35,resets:0}}],downloadURL:"https://cdn.beatsaver.com/023f19dd2ae57e43b99d62c837d1c708020f635d.zip",coverURL:"https://cdn.beatsaver.com/023f19dd2ae57e43b99d62c837d1c708020f635d.jpg",previewURL:"https://cdn.beatsaver.com/023f19dd2ae57e43b99d62c837d1c708020f635d.mp3"}],createdAt:"2019-01-05T06:02:16Z",updatedAt:"2019-01-05T06:02:16Z",lastPublishedAt:"2019-01-05T06:02:16Z"},{id:"21",name:"REOL feat. nqrse - LUVORATORRRRRY!",description:"Hard (353 notes) / Hard+ (455 notes) / Expert (526 notes) / 15 Obstacles / Video Demonstration: https://streamable.com/23ayv / Part 1 of the J-EDM Graduation series! Use this song pack to level up your game!",uploader:{id:48853,name:"datkami",uniqueSet:!0,hash:"5cff0b7298cc5a672c84e8a3",avatar:"https://www.gravatar.com/avatar/5cff0b7298cc5a672c84e8a3?d=retro",type:"SIMPLE"},metadata:{bpm:128,duration:139,songName:"LUVORATORRRRRY!",songSubName:"feat.nqrse",songAuthorName:"Reol",levelAuthorName:"datkami"},stats:{plays:0,downloads:4483,upvotes:4237,downvotes:195,score:.9196},uploaded:"2018-05-10T02:24:36Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"c807689fefdae82aa79ba9c7f861118fb426b4cc",key:"21",state:"Published",createdAt:"2018-05-10T02:24:36Z",sageScore:5,diffs:[{njs:10,offset:0,notes:353,bombs:4,obstacles:15,nps:2.624,length:287,characteristic:"Standard",difficulty:"Normal",events:6e3,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:134.531,paritySummary:{errors:61,warns:33,resets:0}},{njs:10,offset:0,notes:455,bombs:4,obstacles:15,nps:3.382,length:287,characteristic:"Standard",difficulty:"Hard",events:6e3,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:134.531,paritySummary:{errors:75,warns:74,resets:0}},{njs:10,offset:0,notes:526,bombs:10,obstacles:15,nps:3.91,length:287,characteristic:"Standard",difficulty:"Expert",events:1e3,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:134.531,paritySummary:{errors:72,warns:78,resets:0}}],downloadURL:"https://cdn.beatsaver.com/c807689fefdae82aa79ba9c7f861118fb426b4cc.zip",coverURL:"https://cdn.beatsaver.com/c807689fefdae82aa79ba9c7f861118fb426b4cc.jpg",previewURL:"https://cdn.beatsaver.com/c807689fefdae82aa79ba9c7f861118fb426b4cc.mp3"}],createdAt:"2018-05-10T02:24:36Z",updatedAt:"2018-05-10T02:24:36Z",lastPublishedAt:"2018-05-10T02:24:36Z"},{id:"6a14",name:"Sweet But Psycho - Ava Max",description:"Mapped by Drunkdwarf. Fun upbeat tune that's great for dancing. Any feedback is appreciated ",uploader:{id:36873,name:"drunkdwarf",uniqueSet:!0,hash:"5d9eea1e048dff0006e87333",avatar:"https://www.gravatar.com/avatar/5d9eea1e048dff0006e87333?d=retro",type:"SIMPLE"},metadata:{bpm:133,duration:189,songName:"Sweet But Psycho",songSubName:"",songAuthorName:"Ava Max",levelAuthorName:"Drunkdwarf"},stats:{plays:0,downloads:1850,upvotes:746,downvotes:11,score:.9195},uploaded:"2019-10-16T05:39:20.052Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"eed9239c036bce71b6d23cf90a3886fc88adb6ee",key:"6a14",state:"Published",createdAt:"2019-10-16T05:39:20.052Z",sageScore:4,diffs:[{njs:14,offset:0,notes:661,bombs:0,obstacles:23,nps:3.672,length:399,characteristic:"Standard",difficulty:"Expert",events:952,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:180,paritySummary:{errors:55,warns:49,resets:0}}],downloadURL:"https://cdn.beatsaver.com/eed9239c036bce71b6d23cf90a3886fc88adb6ee.zip",coverURL:"https://cdn.beatsaver.com/eed9239c036bce71b6d23cf90a3886fc88adb6ee.jpg",previewURL:"https://cdn.beatsaver.com/eed9239c036bce71b6d23cf90a3886fc88adb6ee.mp3"}],createdAt:"2019-10-16T05:39:20.052Z",updatedAt:"2019-10-16T05:39:20.052Z",lastPublishedAt:"2019-10-16T05:39:20.052Z"},{id:"11b01",name:"Merry Go Round of Life - Howl's Moving Castle (Joe Hisaishi)",description:"#302\n\nYoutube Preview : https://www.youtube.com/watch?v=q45z-XvFGeI\n\nDiscord Server : https://discord.gg/3ZSWSTh\nTwitch: https://www.twitch.tv/rigiiid\nTwitter: https://twitter.com/Rigid_bs\nYoutube : https://www.youtube.com/channel/UC36LRBThDdVFjCr-ZXOj-Uw",uploader:{id:4284588,name:"rigid",uniqueSet:!0,hash:"5cff0b7598cc5a672c852224",avatar:"https://cdn.beatsaver.com/avatar/295613108947386368.png",type:"DISCORD"},metadata:{bpm:165,duration:309,songName:"Merry-Go Round Of Life",songSubName:"",songAuthorName:"Joe Hisaishi",levelAuthorName:"Rigid"},stats:{plays:0,downloads:2060,upvotes:818,downvotes:14,score:.9194},uploaded:"2020-12-03T23:32:31.283Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"d93e9ef74098ff490d0cd05e492f20c2be750ce2",key:"11b01",state:"Published",createdAt:"2020-12-03T23:32:31.283Z",sageScore:1,diffs:[{njs:17,offset:-.2,notes:1020,bombs:41,obstacles:18,nps:3.42,length:820.105,characteristic:"Standard",difficulty:"ExpertPlus",events:3102,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:298.22,paritySummary:{errors:1,warns:0,resets:3}}],downloadURL:"https://cdn.beatsaver.com/d93e9ef74098ff490d0cd05e492f20c2be750ce2.zip",coverURL:"https://cdn.beatsaver.com/d93e9ef74098ff490d0cd05e492f20c2be750ce2.jpg",previewURL:"https://cdn.beatsaver.com/d93e9ef74098ff490d0cd05e492f20c2be750ce2.mp3"}],createdAt:"2020-12-03T23:32:31.283Z",updatedAt:"2020-12-03T23:32:31.283Z",lastPublishedAt:"2020-12-03T23:32:31.283Z"},{id:"618a",name:"Teminite - Party Time",description:"Expert only\r\n",uploader:{id:12996,name:"rustic",uniqueSet:!0,hash:"5cff0b7298cc5a672c84e8c4",avatar:"https://www.gravatar.com/avatar/5cff0b7298cc5a672c84e8c4?d=retro",type:"SIMPLE"},metadata:{bpm:125,duration:271,songName:"Party Time",songSubName:"",songAuthorName:"Teminite",levelAuthorName:"Rustic"},stats:{plays:0,downloads:1898,upvotes:1056,downvotes:24,score:.9194},uploaded:"2019-09-05T20:33:35.424Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"05aa128214d1adc3ca599a0475b6c422debc08e0",key:"618a",state:"Published",createdAt:"2019-09-05T20:33:35.424Z",sageScore:6,diffs:[{njs:18,offset:0,notes:953,bombs:112,obstacles:1389,nps:3.65,length:544,characteristic:"Standard",difficulty:"Expert",events:7206,chroma:!1,me:!0,ne:!1,cinema:!1,seconds:261.12,paritySummary:{errors:0,warns:0,resets:0}}],downloadURL:"https://cdn.beatsaver.com/05aa128214d1adc3ca599a0475b6c422debc08e0.zip",coverURL:"https://cdn.beatsaver.com/05aa128214d1adc3ca599a0475b6c422debc08e0.jpg",previewURL:"https://cdn.beatsaver.com/05aa128214d1adc3ca599a0475b6c422debc08e0.mp3"}],createdAt:"2019-09-05T20:33:35.424Z",updatedAt:"2019-09-05T20:33:35.424Z",lastPublishedAt:"2019-09-05T20:33:35.424Z"},{id:"3b82",name:"DJ Got Us Fallin In Love - Usher ft. Pitbull",description:'"DJ Got Us Fallin\' in Love" is a song by American R&B recording artist Usher featuring guest vocals from American rapper Pitbull.\r\n\r\nSong is brought from iTunes for the highest quality sound file :)',uploader:{id:58338,name:"Joetastic",uniqueSet:!0,hash:"5cff0b7498cc5a672c85050e",avatar:"https://cdn.beatsaver.com/avatar/227767566402191360.png",type:"DISCORD"},metadata:{bpm:120,duration:222,songName:"DJ Got Us Fallin In Love",songSubName:"Usher ft. Pitbull",songAuthorName:"Joetastic",levelAuthorName:"Joetastic"},stats:{plays:0,downloads:2910,upvotes:819,downvotes:14,score:.9194},uploaded:"2019-03-04T16:58:43Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"96b8df29da4271f56c6777f11e69cd06669055fe",key:"3b82",state:"Published",createdAt:"2019-03-04T16:58:43Z",sageScore:5,diffs:[{njs:14,offset:0,notes:856,bombs:0,obstacles:5,nps:3.963,length:432,characteristic:"Standard",difficulty:"Expert",events:2006,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:216,paritySummary:{errors:82,warns:85,resets:0}}],downloadURL:"https://cdn.beatsaver.com/96b8df29da4271f56c6777f11e69cd06669055fe.zip",coverURL:"https://cdn.beatsaver.com/96b8df29da4271f56c6777f11e69cd06669055fe.jpg",previewURL:"https://cdn.beatsaver.com/96b8df29da4271f56c6777f11e69cd06669055fe.mp3"}],createdAt:"2019-03-04T16:58:43Z",updatedAt:"2019-03-04T16:58:43Z",lastPublishedAt:"2019-03-04T16:58:43Z"},{id:"2649",name:"[Aurora Theory] Erik McClure - Soar",description:"The first map of the start of a new project for me :)\r\n\r\nA peaceful and comfy map, not intended to be super hard at all (unlike most of my other maps) but might be on the harder side of Expert.\r\nPeople need to give Erik McClure more recognition!\r\n\r\nDiscord: discord.gg/EVU9At2 (For updates regarding my maps, notifications for my streams, and a way to contact me)",uploader:{id:4288620,name:"hexagonial",uniqueSet:!0,hash:"5cff0b7398cc5a672c84f2fb",avatar:"https://cdn.beatsaver.com/avatar/221442943045599232.png",type:"DISCORD"},metadata:{bpm:160,duration:350,songName:"Soar",songSubName:"Erik McClure",songAuthorName:"Hexagonial",levelAuthorName:"hexagonial"},stats:{plays:0,downloads:1468,upvotes:1099,downvotes:26,score:.9194},uploaded:"2018-12-16T21:04:48Z",automapper:!1,ranked:!0,qualified:!1,versions:[{hash:"087cedeab4b9e4c3a4b9c594c97bee6f446f0a77",key:"2649",state:"Published",createdAt:"2018-12-16T21:04:48Z",sageScore:6,diffs:[{njs:15,offset:0,notes:1337,bombs:0,obstacles:71,nps:3.961,length:900,characteristic:"Standard",difficulty:"Expert",events:3056,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:337.5,paritySummary:{errors:26,warns:7,resets:0},stars:3.3}],downloadURL:"https://cdn.beatsaver.com/087cedeab4b9e4c3a4b9c594c97bee6f446f0a77.zip",coverURL:"https://cdn.beatsaver.com/087cedeab4b9e4c3a4b9c594c97bee6f446f0a77.jpg",previewURL:"https://cdn.beatsaver.com/087cedeab4b9e4c3a4b9c594c97bee6f446f0a77.mp3"}],createdAt:"2018-12-16T21:04:48Z",updatedAt:"2018-12-16T21:04:48Z",lastPublishedAt:"2018-12-16T21:04:48Z"},{id:"dfc3",name:"K/DA - THE BADDEST ft. (G)I-DLE, Bea Miller, Wolftyla",description:"Collab with ConnorJC. check out his maps! He did the 360 map",uploader:{id:4285107,name:"kikaeaeon",uniqueSet:!0,hash:"5cff0b7498cc5a672c85109b",avatar:"https://cdn.beatsaver.com/avatar/103715469822816256.png",type:"DISCORD"},metadata:{bpm:150,duration:162,songName:"Baddest",songSubName:"",songAuthorName:"KDA",levelAuthorName:"KikaeAeon & ConnorJC"},stats:{plays:0,downloads:4890,upvotes:2449,downvotes:94,score:.9193},uploaded:"2020-08-29T05:50:22.494Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"c2a6c6aa907994353fef68370ebbda4da4ea4cc8",key:"dfc3",state:"Published",createdAt:"2020-08-29T05:50:22.494Z",sageScore:5,diffs:[{njs:10,offset:0,notes:274,bombs:0,obstacles:54,nps:1.713,length:400,characteristic:"Standard",difficulty:"Easy",events:901,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:160,paritySummary:{errors:11,warns:2,resets:0}},{njs:10,offset:0,notes:321,bombs:0,obstacles:54,nps:2.006,length:400,characteristic:"Standard",difficulty:"Normal",events:1004,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:160,paritySummary:{errors:3,warns:0,resets:0}},{njs:12,offset:0,notes:464,bombs:0,obstacles:61,nps:2.9,length:400,characteristic:"Standard",difficulty:"Hard",events:1347,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:160,paritySummary:{errors:13,warns:13,resets:0}},{njs:14,offset:0,notes:608,bombs:0,obstacles:65,nps:3.8,length:400,characteristic:"Standard",difficulty:"Expert",events:1614,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:160,paritySummary:{errors:17,warns:23,resets:0}},{njs:16,offset:0,notes:851,bombs:0,obstacles:96,nps:5.319,length:400,characteristic:"Standard",difficulty:"ExpertPlus",events:2480,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:160,paritySummary:{errors:19,warns:41,resets:0}},{njs:19,offset:0,notes:944,bombs:6,obstacles:305,nps:5.9,length:400,characteristic:"360Degree",difficulty:"ExpertPlus",events:3408,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:160,paritySummary:{errors:0,warns:0,resets:0}}],downloadURL:"https://cdn.beatsaver.com/c2a6c6aa907994353fef68370ebbda4da4ea4cc8.zip",coverURL:"https://cdn.beatsaver.com/c2a6c6aa907994353fef68370ebbda4da4ea4cc8.jpg",previewURL:"https://cdn.beatsaver.com/c2a6c6aa907994353fef68370ebbda4da4ea4cc8.mp3"}],createdAt:"2020-08-29T05:50:22.494Z",updatedAt:"2020-08-29T05:50:22.494Z",lastPublishedAt:"2020-08-29T05:50:22.494Z"},{id:"5893",name:"Crypt of the NecroDancer - King Conga",description:"Hope you like this remap :) \n\n- ORYGINAL",uploader:{id:34774,name:"oryginal",uniqueSet:!0,hash:"5cff0b7698cc5a672c8551e0",avatar:"https://www.gravatar.com/avatar/5cff0b7698cc5a672c8551e0?d=retro",type:"SIMPLE"},metadata:{bpm:120,duration:107,songName:"King Conga",songSubName:"",songAuthorName:"Danny Baranowsky",levelAuthorName:"ORYGINAL"},stats:{plays:0,downloads:1592,upvotes:741,downvotes:11,score:.9193},uploaded:"2019-07-23T14:43:05.570Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"d0b4c5fcc3522f5b58d1ff2da7cfdd8086651078",key:"5893",state:"Published",createdAt:"2019-07-23T14:43:05.570Z",sageScore:4,diffs:[{njs:12,offset:0,notes:311,bombs:104,obstacles:30,nps:3.019,length:206,characteristic:"Standard",difficulty:"Hard",events:1160,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:103,paritySummary:{errors:15,warns:21,resets:4}},{njs:12,offset:0,notes:387,bombs:118,obstacles:23,nps:3.757,length:206,characteristic:"Standard",difficulty:"Expert",events:1160,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:103,paritySummary:{errors:9,warns:19,resets:4}}],downloadURL:"https://cdn.beatsaver.com/d0b4c5fcc3522f5b58d1ff2da7cfdd8086651078.zip",coverURL:"https://cdn.beatsaver.com/d0b4c5fcc3522f5b58d1ff2da7cfdd8086651078.jpg",previewURL:"https://cdn.beatsaver.com/d0b4c5fcc3522f5b58d1ff2da7cfdd8086651078.mp3"}],createdAt:"2019-07-23T14:43:05.570Z",updatedAt:"2019-07-23T14:43:05.570Z",lastPublishedAt:"2019-07-23T14:43:05.570Z"},{id:"3821",name:"Le Perv - Carpenter Brut (Hotline Miami 2 Soundtrack)",description:"Shoutouts to twitch.tv/lexington64 and twitch.tv/whipstickgostop for playtesting!",uploader:{id:4285077,name:"ris",uniqueSet:!0,hash:"5cff0b7598cc5a672c8535df",avatar:"https://cdn.beatsaver.com/avatar/191597992061435904.png",type:"DISCORD"},metadata:{bpm:120,duration:259,songName:"Le Perv",songSubName:"Carpenter Brut",songAuthorName:"Ris",levelAuthorName:"Ris"},stats:{plays:0,downloads:1655,upvotes:983,downvotes:21,score:.9193},uploaded:"2019-02-21T02:57:32Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"57ad431c662057d428e920a8cd225bae5ab3d2c3",key:"3821",state:"Published",createdAt:"2019-02-21T02:57:32Z",sageScore:3,diffs:[{njs:10,offset:0,notes:488,bombs:0,obstacles:0,nps:1.91,length:511,characteristic:"Standard",difficulty:"Normal",events:369,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:255.5,paritySummary:{errors:109,warns:46,resets:0}},{njs:10,offset:0,notes:922,bombs:0,obstacles:0,nps:3.609,length:511,characteristic:"Standard",difficulty:"Hard",events:369,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:255.5,paritySummary:{errors:99,warns:85,resets:0}},{njs:12,offset:0,notes:1176,bombs:0,obstacles:0,nps:4.603,length:511,characteristic:"Standard",difficulty:"Expert",events:369,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:255.5,paritySummary:{errors:104,warns:99,resets:0}}],downloadURL:"https://cdn.beatsaver.com/57ad431c662057d428e920a8cd225bae5ab3d2c3.zip",coverURL:"https://cdn.beatsaver.com/57ad431c662057d428e920a8cd225bae5ab3d2c3.jpg",previewURL:"https://cdn.beatsaver.com/57ad431c662057d428e920a8cd225bae5ab3d2c3.mp3"}],createdAt:"2019-02-21T02:57:32Z",updatedAt:"2019-02-21T02:57:32Z",lastPublishedAt:"2019-02-21T02:57:32Z"},{id:"623c",name:"Lil Tecca - Ransom",description:"",uploader:{id:4285107,name:"kikaeaeon",uniqueSet:!0,hash:"5cff0b7498cc5a672c85109b",avatar:"https://cdn.beatsaver.com/avatar/103715469822816256.png",type:"DISCORD"},metadata:{bpm:180,duration:133,songName:"Ransom",songSubName:"",songAuthorName:"Lil Tecca",levelAuthorName:"KikaeAeon"},stats:{plays:0,downloads:2213,upvotes:1476,downvotes:44,score:.9192},uploaded:"2019-09-08T17:05:01.320Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"ebdaaafecece7859d28ee1d80a94fa8b2b9992a3",key:"623c",state:"Published",createdAt:"2019-09-08T17:05:01.320Z",sageScore:5,diffs:[{njs:12,offset:0,notes:358,bombs:0,obstacles:31,nps:2.834,length:379,characteristic:"Standard",difficulty:"Expert",events:914,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:126.333,paritySummary:{errors:11,warns:13,resets:0}},{njs:16,offset:0,notes:571,bombs:0,obstacles:24,nps:4.52,length:379,characteristic:"Standard",difficulty:"ExpertPlus",events:684,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:126.333,paritySummary:{errors:12,warns:8,resets:0}}],downloadURL:"https://cdn.beatsaver.com/ebdaaafecece7859d28ee1d80a94fa8b2b9992a3.zip",coverURL:"https://cdn.beatsaver.com/ebdaaafecece7859d28ee1d80a94fa8b2b9992a3.jpg",previewURL:"https://cdn.beatsaver.com/ebdaaafecece7859d28ee1d80a94fa8b2b9992a3.mp3"}],createdAt:"2019-09-08T17:05:01.320Z",updatedAt:"2019-09-08T17:05:01.320Z",lastPublishedAt:"2019-09-08T17:05:01.320Z"},{id:"2b56",name:"Pitbull Ft. Ke$ha - Timber",description:"Happy New Year! Here is a song I've been working on for a long time (With A LOT of procrastination). It didn't quite feel right with the notes being on beat so I extended them 1/16th off beat and it sounded a little better. Enjoy!\r\n\r\nVideo Preview of expert: https://youtu.be/ntGqRvV5hX4",uploader:{id:1974,name:"scottie2pottie",uniqueSet:!0,hash:"5cff0b7598cc5a672c85329f",avatar:"https://www.gravatar.com/avatar/5cff0b7598cc5a672c85329f?d=retro",type:"SIMPLE"},metadata:{bpm:130,duration:204,songName:"Timber",songSubName:"Pitbull",songAuthorName:"Scottie2Pottie",levelAuthorName:"scottie2pottie"},stats:{plays:0,downloads:4086,upvotes:1223,downvotes:32,score:.9191},uploaded:"2019-01-06T03:24:10Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"ca709a09209760e19d9b63952aa208efc4663aef",key:"2b56",state:"Published",createdAt:"2019-01-06T03:24:10Z",sageScore:5,diffs:[{njs:10,offset:0,notes:721,bombs:4,obstacles:0,nps:3.616,length:432,characteristic:"Standard",difficulty:"Hard",events:1003,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:199.385,paritySummary:{errors:34,warns:15,resets:0}},{njs:10,offset:0,notes:932,bombs:4,obstacles:0,nps:4.674,length:432,characteristic:"Standard",difficulty:"Expert",events:1124,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:199.385,paritySummary:{errors:29,warns:31,resets:0}}],downloadURL:"https://cdn.beatsaver.com/ca709a09209760e19d9b63952aa208efc4663aef.zip",coverURL:"https://cdn.beatsaver.com/ca709a09209760e19d9b63952aa208efc4663aef.jpg",previewURL:"https://cdn.beatsaver.com/ca709a09209760e19d9b63952aa208efc4663aef.mp3"}],createdAt:"2019-01-06T03:24:10Z",updatedAt:"2019-01-06T03:24:10Z",lastPublishedAt:"2019-01-06T03:24:10Z"},{id:"12db3",name:"Lindsey Sterling - Artemis ",description:"Made this a couple of months ago and totally didn't forget to upload it.\n\nThis was a special request by--I don't even know. I forgot. It's that old.",uploader:{id:15368,name:"theab",uniqueSet:!0,hash:"5cff0b7698cc5a672c853a14",avatar:"https://www.gravatar.com/avatar/5cff0b7698cc5a672c853a14?d=retro",type:"SIMPLE"},metadata:{bpm:190,duration:228,songName:"Artemis",songSubName:"",songAuthorName:"Lindsey Stirling",levelAuthorName:"Ab"},stats:{plays:0,downloads:1518,upvotes:602,downvotes:6,score:.919},uploaded:"2021-01-18T06:05:51.386Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"a8df2df28d239a14b18f40855045eaca88a0c8e5",key:"12db3",state:"Published",createdAt:"2021-01-18T06:05:51.386Z",sageScore:3,diffs:[{njs:21,offset:0,notes:975,bombs:0,obstacles:2,nps:4.358,length:708.5,characteristic:"Standard",difficulty:"ExpertPlus",events:1159,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:223.737,paritySummary:{errors:6,warns:5,resets:0}}],downloadURL:"https://cdn.beatsaver.com/a8df2df28d239a14b18f40855045eaca88a0c8e5.zip",coverURL:"https://cdn.beatsaver.com/a8df2df28d239a14b18f40855045eaca88a0c8e5.jpg",previewURL:"https://cdn.beatsaver.com/a8df2df28d239a14b18f40855045eaca88a0c8e5.mp3"}],createdAt:"2021-01-18T06:05:51.386Z",updatedAt:"2021-01-18T06:05:51.386Z",lastPublishedAt:"2021-01-18T06:05:51.386Z"},{id:"2db1",name:"Huey Lewis - The Power of Love",description:"Here is my first map of 2019 covering 'The power of love' by Huey Lewis!\r\nAll difficulties are included from easy to expert, enjoy ;)\r\n\r\nBeastsaber: https://bsaber.com/members/stumi/\r\nVideo: https://www.youtube.com/watch?v=7aHevt6DVkc",uploader:{id:4785,name:"stumi",uniqueSet:!1,hash:"5cff0b7398cc5a672c84f720",avatar:"https://www.gravatar.com/avatar/5cff0b7398cc5a672c84f720?d=retro",type:"SIMPLE"},metadata:{bpm:119,duration:226,songName:"The power of love",songSubName:"Huey Lewis",songAuthorName:"Stumi",levelAuthorName:"stumi"},stats:{plays:0,downloads:6882,upvotes:1088,downvotes:26,score:.919},uploaded:"2019-01-14T18:26:26Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"bf261b573d7c649150ea1c23ec504130904b6aa2",key:"2db1",state:"Published",createdAt:"2019-01-14T18:26:26Z",sageScore:6,diffs:[{njs:10,offset:0,notes:311,bombs:0,obstacles:17,nps:1.449,length:425,characteristic:"Standard",difficulty:"Easy",events:1830,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:214.286,paritySummary:{errors:29,warns:22,resets:0}},{njs:10,offset:0,notes:489,bombs:0,obstacles:20,nps:2.278,length:425,characteristic:"Standard",difficulty:"Normal",events:1830,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:214.286,paritySummary:{errors:37,warns:55,resets:0}},{njs:11,offset:0,notes:697,bombs:0,obstacles:1,nps:3.247,length:425,characteristic:"Standard",difficulty:"Hard",events:1831,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:214.286,paritySummary:{errors:41,warns:40,resets:0}},{njs:12,offset:0,notes:920,bombs:0,obstacles:0,nps:4.287,length:424.875,characteristic:"Standard",difficulty:"Expert",events:1831,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:214.223,paritySummary:{errors:59,warns:68,resets:0}}],downloadURL:"https://cdn.beatsaver.com/bf261b573d7c649150ea1c23ec504130904b6aa2.zip",coverURL:"https://cdn.beatsaver.com/bf261b573d7c649150ea1c23ec504130904b6aa2.jpg",previewURL:"https://cdn.beatsaver.com/bf261b573d7c649150ea1c23ec504130904b6aa2.mp3"}],createdAt:"2019-01-14T18:26:26Z",updatedAt:"2019-01-14T18:26:26Z",lastPublishedAt:"2019-01-14T18:26:26Z"},{id:"10377",name:"Marnik - Hocus Pocus (Original Mix)",description:"use CHROMA mod for\n - PanicEnvironment environment removal\n - Cool lights\n - to gain superpowers\n\nHappy Halloween!\n\nBPM | 130\nExpert+\nExpert\nHard\nNormal\nEasy\n\npreview: https://www.youtube.com/watch?v=DfzD_Ca4fp4\n\nDM any feedback on Discord\nETAN#8341",uploader:{id:4235140,name:"etan",uniqueSet:!0,hash:"5cff0b7798cc5a672c855775",avatar:"https://cdn.beatsaver.com/avatar/136373107559497728.png",type:"DISCORD"},metadata:{bpm:130,duration:242,songName:"Hocus Pocus",songSubName:"(Original Mix)",songAuthorName:"Marnik",levelAuthorName:"ETAN"},stats:{plays:0,downloads:7135,upvotes:1324,downvotes:37,score:.919},uploaded:"2020-10-25T22:28:11.819Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"4e37c7070b9049ebbbf11ceab644d4ec4a01ca13",key:"10377",state:"Published",createdAt:"2020-10-25T22:28:11.819Z",sageScore:6,diffs:[{njs:9,offset:0,notes:232,bombs:0,obstacles:34,nps:.99,length:508,characteristic:"Standard",difficulty:"Easy",events:21660,chroma:!0,me:!1,ne:!1,cinema:!1,seconds:234.462,paritySummary:{errors:40,warns:0,resets:0}},{njs:11,offset:1,notes:493,bombs:0,obstacles:34,nps:2.103,length:508,characteristic:"Standard",difficulty:"Normal",events:21660,chroma:!0,me:!1,ne:!1,cinema:!1,seconds:234.462,paritySummary:{errors:0,warns:0,resets:0}},{njs:13,offset:.5,notes:693,bombs:0,obstacles:34,nps:2.956,length:508,characteristic:"Standard",difficulty:"Hard",events:21660,chroma:!0,me:!1,ne:!1,cinema:!1,seconds:234.462,paritySummary:{errors:0,warns:0,resets:0}},{njs:16,offset:0,notes:966,bombs:0,obstacles:34,nps:4.12,length:508,characteristic:"Standard",difficulty:"Expert",events:21660,chroma:!0,me:!1,ne:!1,cinema:!1,seconds:234.462,paritySummary:{errors:0,warns:0,resets:0}},{njs:21,offset:.4,notes:1172,bombs:80,obstacles:34,nps:4.999,length:508,characteristic:"Standard",difficulty:"ExpertPlus",events:21661,chroma:!0,me:!1,ne:!1,cinema:!1,seconds:234.462,paritySummary:{errors:6,warns:3,resets:34}}],downloadURL:"https://cdn.beatsaver.com/4e37c7070b9049ebbbf11ceab644d4ec4a01ca13.zip",coverURL:"https://cdn.beatsaver.com/4e37c7070b9049ebbbf11ceab644d4ec4a01ca13.jpg",previewURL:"https://cdn.beatsaver.com/4e37c7070b9049ebbbf11ceab644d4ec4a01ca13.mp3"}],createdAt:"2020-10-25T22:28:11.819Z",updatedAt:"2020-10-25T22:28:11.819Z",lastPublishedAt:"2020-10-25T22:28:11.819Z"},{id:"8367",name:"Martin Garrix & Dua Lipa - Scared To Be Lonely (Brooks Remix)",description:"Brooks does amazing remixes and this is probably one of my favourite ones\n\nVideo: https://youtu.be/OgmhqC5e9m8\n\nEasy: Notes: 132 NPS: 1.47 NJS: 10\nNormal: Notes: 164 NPS: 1.8 NJS: 12\nHard: Notes: 256 NPS: 2.82 NJS: 14\nExpert: Notes: 351 NPS: 3.86 NJS: 16\nExpert+: Notes: 417 NPS: 4.59 NJS: 18\n\nCheck out my lightshows here: https://www.youtube.com/playlist?list=PLwl6dYq72JOYu1BnKl5WATa4Dh__ZJmuN",uploader:{id:14808,name:"halcyon12",uniqueSet:!0,hash:"5cff0b7698cc5a672c8547ad",avatar:"https://www.gravatar.com/avatar/5cff0b7698cc5a672c8547ad?d=retro",type:"SIMPLE"},metadata:{bpm:128,duration:104,songName:"Scared To Be Lonely",songSubName:"Brooks Remix",songAuthorName:"Martin Garrix ft. Dua Lipa",levelAuthorName:"Halcyon12"},stats:{plays:0,downloads:3240,upvotes:1111,downvotes:27,score:.919},uploaded:"2020-02-02T01:20:18.328Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"60dac314035b8f9da649286c587aa6377abf1f16",key:"8367",state:"Published",createdAt:"2020-02-02T01:20:18.328Z",sageScore:7,diffs:[{njs:10,offset:1,notes:132,bombs:0,obstacles:2,nps:1.467,length:192,characteristic:"Standard",difficulty:"Easy",events:2499,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:90,paritySummary:{errors:8,warns:0,resets:0}},{njs:12,offset:.5,notes:164,bombs:0,obstacles:2,nps:1.803,length:194,characteristic:"Standard",difficulty:"Normal",events:2499,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:90.938,paritySummary:{errors:10,warns:2,resets:0}},{njs:14,offset:0,notes:256,bombs:0,obstacles:8,nps:2.815,length:194,characteristic:"Standard",difficulty:"Hard",events:2499,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:90.938,paritySummary:{errors:1,warns:1,resets:0}},{njs:16,offset:-.25,notes:351,bombs:0,obstacles:16,nps:3.86,length:194,characteristic:"Standard",difficulty:"Expert",events:2499,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:90.938,paritySummary:{errors:0,warns:0,resets:0}},{njs:18,offset:-.5,notes:417,bombs:0,obstacles:34,nps:4.586,length:194,characteristic:"Standard",difficulty:"ExpertPlus",events:2498,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:90.938,paritySummary:{errors:0,warns:0,resets:0}}],downloadURL:"https://cdn.beatsaver.com/60dac314035b8f9da649286c587aa6377abf1f16.zip",coverURL:"https://cdn.beatsaver.com/60dac314035b8f9da649286c587aa6377abf1f16.jpg",previewURL:"https://cdn.beatsaver.com/60dac314035b8f9da649286c587aa6377abf1f16.mp3"}],createdAt:"2020-02-02T01:20:18.328Z",updatedAt:"2020-02-02T01:20:18.328Z",lastPublishedAt:"2020-02-02T01:20:18.328Z"},{id:"a90b",name:"[TheFatRat Pack] Xenogenesis - TheFatRat",description:'Here it is! The unofficial "TheFatRat" Music Pack in Beat Saber - with all beatmaps being singlehandedly made by me!\n\nAll songs included in TheFatRat Music Pack:\nMonody (ft. Laura Brehm) \nUnity \nWindfall \nXenogenesis \nTime Lapse \n\nGet the full song pack here: https://bsaber.com/thefatrat-music-pack/\n(Or you should just be able to find all the other ones on my beatsaver profile as well. Heres a link to my profile: https://beatsaver.com/uploader/5d47d586c5301900060b2f6c)\n\nSongcore mod is recommended (for custom colours)\nPlays best on Origins Environment\n\nXenogenesis Stats:\nExpert+ - 955 Notes | 4.17 NPS\nExpert - 863 Notes | 3.77 NPS\nHard - 649 Notes | 2.84 NPS\nNormal - 439 Notes | 1.92 NPS\nEasy - 347 Notes | 1.52 NPS\n\nRoughly 7-8 Hours of work\nGameplay: https://youtu.be/YA0zBFQcLnc\n\nObviously - A huge thanks to TheFatRat himself, for not only producing the songs in the first place (and allowing free access to use them for big and small content creators), but also being a huge inspiration to lots of artists out there and for making music that everyone can jam out to! We love you, TheFatRat!',uploader:{id:4284197,name:"timeweaver",uniqueSet:!0,hash:"5d47d586c5301900060b2f6c",avatar:"https://cdn.beatsaver.com/avatar/607399708121366529.png",type:"DISCORD"},metadata:{bpm:145,duration:228,songName:"Xenogenesis",songSubName:"",songAuthorName:"TheFatRat",levelAuthorName:"Timeweaver"},stats:{plays:0,downloads:4735,upvotes:1216,downvotes:32,score:.9189},uploaded:"2020-05-22T13:28:50.525Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"15ab8f50a6b1a7ff95955ba236426ab4edf9cb15",key:"a90b",state:"Published",createdAt:"2020-05-22T13:28:50.525Z",sageScore:5,diffs:[{njs:10,offset:0,notes:347,bombs:0,obstacles:53,nps:1.55,length:541,characteristic:"Standard",difficulty:"Easy",events:5971,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:223.862,paritySummary:{errors:54,warns:35,resets:0}},{njs:10,offset:0,notes:439,bombs:0,obstacles:97,nps:1.961,length:541,characteristic:"Standard",difficulty:"Normal",events:5971,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:223.862,paritySummary:{errors:30,warns:12,resets:0}},{njs:12.5,offset:1,notes:649,bombs:0,obstacles:121,nps:2.899,length:541,characteristic:"Standard",difficulty:"Hard",events:5971,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:223.862,paritySummary:{errors:6,warns:4,resets:0}},{njs:15,offset:.5,notes:863,bombs:0,obstacles:137,nps:3.855,length:541,characteristic:"Standard",difficulty:"Expert",events:6162,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:223.862,paritySummary:{errors:2,warns:1,resets:0}},{njs:17,offset:0,notes:955,bombs:0,obstacles:169,nps:4.266,length:541,characteristic:"Standard",difficulty:"ExpertPlus",events:6160,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:223.862,paritySummary:{errors:4,warns:0,resets:0}}],downloadURL:"https://cdn.beatsaver.com/15ab8f50a6b1a7ff95955ba236426ab4edf9cb15.zip",coverURL:"https://cdn.beatsaver.com/15ab8f50a6b1a7ff95955ba236426ab4edf9cb15.jpg",previewURL:"https://cdn.beatsaver.com/15ab8f50a6b1a7ff95955ba236426ab4edf9cb15.mp3"}],createdAt:"2020-05-22T13:28:50.525Z",updatedAt:"2020-05-22T13:28:50.525Z",lastPublishedAt:"2020-05-22T13:28:50.525Z"},{id:"9b41",name:"Diving In Too Deep - NerdOut",description:"Diving In Too Deep, a Subnautica song created by NerdOut! All I can say is expect W A L L S ! ! !\n(Mapping Extensions required)",uploader:{id:23150,name:"kuritsadbs",uniqueSet:!0,hash:"5cff0b7698cc5a672c8537ef",avatar:"https://www.gravatar.com/avatar/5cff0b7698cc5a672c8537ef?d=retro",type:"SIMPLE"},metadata:{bpm:135,duration:195,songName:"Diving In Too Deep",songSubName:"",songAuthorName:"NerdOut",levelAuthorName:"KuritsaDBS"},stats:{plays:0,downloads:779,upvotes:512,downvotes:3,score:.9188},uploaded:"2020-04-15T11:53:14.568Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"fe10d96acbb9a6416e1e7710270e12032b642288",key:"9b41",state:"Published",createdAt:"2020-04-15T11:53:14.568Z",sageScore:4,diffs:[{njs:16,offset:0,notes:481,bombs:0,obstacles:1919,nps:2.736,length:395.5,characteristic:"Standard",difficulty:"Expert",events:7541,chroma:!1,me:!0,ne:!1,cinema:!1,seconds:175.778,paritySummary:{errors:0,warns:0,resets:0}}],downloadURL:"https://cdn.beatsaver.com/fe10d96acbb9a6416e1e7710270e12032b642288.zip",coverURL:"https://cdn.beatsaver.com/fe10d96acbb9a6416e1e7710270e12032b642288.jpg",previewURL:"https://cdn.beatsaver.com/fe10d96acbb9a6416e1e7710270e12032b642288.mp3"}],createdAt:"2020-04-15T11:53:14.568Z",updatedAt:"2020-04-15T11:53:14.568Z",lastPublishedAt:"2020-04-15T11:53:14.568Z"},{id:"7ba4",name:"Say So - Doja Cat",description:"Based on the Tik Tok dance meme song, Say So by Doja Cat.",uploader:{id:34446,name:"cartwheels",uniqueSet:!0,hash:"5e0cf5fbbe3a060006a86875",avatar:"https://www.gravatar.com/avatar/5e0cf5fbbe3a060006a86875?d=retro",type:"SIMPLE"},metadata:{bpm:111,duration:238,songName:"Say So",songSubName:"",songAuthorName:"Doja Cat",levelAuthorName:"mikey f"},stats:{plays:0,downloads:5177,upvotes:1523,downvotes:47,score:.9188},uploaded:"2020-01-02T00:07:45.673Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"e931eac117453cea276351917c1af2b5f0a1c7df",key:"7ba4",state:"Published",createdAt:"2020-01-02T00:07:45.673Z",sageScore:5,diffs:[{njs:12,offset:0,notes:464,bombs:54,obstacles:11,nps:2.07,length:414.75,characteristic:"Standard",difficulty:"Normal",events:1366,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:224.189,paritySummary:{errors:49,warns:69,resets:0}}],downloadURL:"https://cdn.beatsaver.com/e931eac117453cea276351917c1af2b5f0a1c7df.zip",coverURL:"https://cdn.beatsaver.com/e931eac117453cea276351917c1af2b5f0a1c7df.jpg",previewURL:"https://cdn.beatsaver.com/e931eac117453cea276351917c1af2b5f0a1c7df.mp3"}],createdAt:"2020-01-02T00:07:45.673Z",updatedAt:"2020-01-02T00:07:45.673Z",lastPublishedAt:"2020-01-02T00:07:45.673Z"},{id:"500d",name:"Thunder - Imagine Dragons",description:"168 BPM / 3:00 Runtime\r\nEasy / 202 Notes\r\nNormal / 270 Notes\r\nHard / 400 Notes\r\nExpert / 505 Notes\r\nExpert+ / 660 Notes\r\n\r\nGameplay: Coming Soon",uploader:{id:4284981,name:"skylerwallace",uniqueSet:!0,hash:"5cff0b7298cc5a672c84ea67",avatar:"https://cdn.beatsaver.com/avatar/398344856868487168.png",type:"DISCORD"},metadata:{bpm:168,duration:180,songName:"Thunder",songSubName:"Imagine Dragons",songAuthorName:"Skyler Wallace",levelAuthorName:"skylerwallace"},stats:{plays:0,downloads:8953,upvotes:3133,downvotes:134,score:.9188},uploaded:"2019-05-31T04:43:45Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"1374613734d2d110f06783c7b7c32579e7a2808f",key:"500d",state:"Published",createdAt:"2019-05-31T04:43:45Z",sageScore:8,diffs:[{njs:10,offset:0,notes:202,bombs:0,obstacles:5,nps:1.178,length:480,characteristic:"Standard",difficulty:"Easy",events:4955,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:171.429,paritySummary:{errors:38,warns:28,resets:0}},{njs:10,offset:0,notes:270,bombs:0,obstacles:7,nps:1.575,length:480,characteristic:"Standard",difficulty:"Normal",events:4955,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:171.429,paritySummary:{errors:33,warns:31,resets:0}},{njs:10,offset:0,notes:400,bombs:0,obstacles:10,nps:2.333,length:480,characteristic:"Standard",difficulty:"Hard",events:4955,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:171.429,paritySummary:{errors:55,warns:81,resets:0}},{njs:12,offset:0,notes:505,bombs:0,obstacles:13,nps:2.946,length:480,characteristic:"Standard",difficulty:"Expert",events:4955,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:171.429,paritySummary:{errors:47,warns:64,resets:0}},{njs:14,offset:1,notes:660,bombs:4,obstacles:14,nps:3.85,length:480,characteristic:"Standard",difficulty:"ExpertPlus",events:4955,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:171.429,paritySummary:{errors:39,warns:64,resets:0}}],downloadURL:"https://cdn.beatsaver.com/1374613734d2d110f06783c7b7c32579e7a2808f.zip",coverURL:"https://cdn.beatsaver.com/1374613734d2d110f06783c7b7c32579e7a2808f.jpg",previewURL:"https://cdn.beatsaver.com/1374613734d2d110f06783c7b7c32579e7a2808f.mp3"}],createdAt:"2019-05-31T04:43:45Z",updatedAt:"2019-05-31T04:43:45Z",lastPublishedAt:"2019-05-31T04:43:45Z"},{id:"4211",name:"Overkill - RIOT",description:"Thank you Everyone for the massive amount of support on this map. I'm very happy to release this as a V2 and hopefully you can all get some enjoyment like the first one did but with some very large QOL updates to the map as well that'll make the map in turn play much smoother and a ton of pattern changes that gives the map some more life! :D\r\n\r\nBig Thanks to RedMagi and Saut for modding and playtesting! :D",uploader:{id:408,name:"nuketime",uniqueSet:!0,hash:"5cff0b7498cc5a672c8507f7",avatar:"https://cdn.beatsaver.com/avatar/175811186007343104.png",type:"DISCORD"},metadata:{bpm:174,duration:308,songName:"Overkill",songSubName:"RIOT",songAuthorName:"Nuketime",levelAuthorName:"Nuketime"},stats:{plays:0,downloads:1444,upvotes:1211,downvotes:32,score:.9187},uploaded:"2019-03-30T19:12:13Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"aa94aeef877eecea90e4cf3795a84799056042e3",key:"4211",state:"Published",createdAt:"2019-03-30T19:12:13Z",sageScore:5,diffs:[{njs:19,offset:0,notes:1914,bombs:108,obstacles:368,nps:6.465,length:858.5,characteristic:"Standard",difficulty:"ExpertPlus",events:3602,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:296.035,paritySummary:{errors:56,warns:53,resets:0}}],downloadURL:"https://cdn.beatsaver.com/aa94aeef877eecea90e4cf3795a84799056042e3.zip",coverURL:"https://cdn.beatsaver.com/aa94aeef877eecea90e4cf3795a84799056042e3.jpg",previewURL:"https://cdn.beatsaver.com/aa94aeef877eecea90e4cf3795a84799056042e3.mp3"}],createdAt:"2019-03-30T19:12:13Z",updatedAt:"2019-03-30T19:12:13Z",lastPublishedAt:"2019-03-30T19:12:13Z"},{id:"827d",name:"Robin Hustin x TobiMorrow - Light It Up (feat. Jex)",description:"Brings me back to when I made lights for this a long time ago. \n\nVideo: https://youtu.be/ttzkzmB39Bs\n\nEasy: Notes: 117 NPS: 1.31 NJS: 10\nNormal: Notes: 169 NPS: 1.9 NJS: 12\nHard: Notes: 237 NPS: 2.66 NJS: 14\nExpert: Notes: 325 NPS: 3.61 NJS: 16\nExpert+: Notes: 452 NPS: 5.02 NJS: 18\n\nCheck out my lightshows here: https://www.youtube.com/playlist?list=PLwl6dYq72JOYu1BnKl5WATa4Dh__ZJmuN",uploader:{id:14808,name:"halcyon12",uniqueSet:!0,hash:"5cff0b7698cc5a672c8547ad",avatar:"https://www.gravatar.com/avatar/5cff0b7698cc5a672c8547ad?d=retro",type:"SIMPLE"},metadata:{bpm:128,duration:102,songName:"Light It Up",songSubName:"ft. Jex",songAuthorName:"Robin Hustin, TobiMorrow",levelAuthorName:"Halcyon12"},stats:{plays:0,downloads:5922,upvotes:1375,downvotes:40,score:.9186},uploaded:"2020-01-29T22:25:19.574Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"22da796f08f777c437d4996d52ea1778e8e762ae",key:"827d",state:"Published",createdAt:"2020-01-29T22:25:19.574Z",sageScore:7,diffs:[{njs:10,offset:1,notes:117,bombs:0,obstacles:9,nps:1.312,length:190.25,characteristic:"Standard",difficulty:"Easy",events:3837,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:89.18,paritySummary:{errors:2,warns:2,resets:0}},{njs:12,offset:.5,notes:169,bombs:0,obstacles:8,nps:1.895,length:190.25,characteristic:"Standard",difficulty:"Normal",events:3837,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:89.18,paritySummary:{errors:4,warns:1,resets:0}},{njs:14,offset:0,notes:237,bombs:0,obstacles:17,nps:2.658,length:190.25,characteristic:"Standard",difficulty:"Hard",events:3837,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:89.18,paritySummary:{errors:1,warns:0,resets:0}},{njs:16,offset:-.25,notes:325,bombs:0,obstacles:6,nps:3.611,length:192,characteristic:"Standard",difficulty:"Expert",events:3837,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:90,paritySummary:{errors:0,warns:0,resets:0}},{njs:18,offset:-.5,notes:452,bombs:0,obstacles:16,nps:5.022,length:192,characteristic:"Standard",difficulty:"ExpertPlus",events:3837,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:90,paritySummary:{errors:0,warns:0,resets:0}},{njs:12,offset:0,notes:0,bombs:0,obstacles:0,nps:0,length:0,characteristic:"Lightshow",difficulty:"ExpertPlus",events:3837,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:0,paritySummary:{errors:0,warns:0,resets:0}}],downloadURL:"https://cdn.beatsaver.com/22da796f08f777c437d4996d52ea1778e8e762ae.zip",coverURL:"https://cdn.beatsaver.com/22da796f08f777c437d4996d52ea1778e8e762ae.jpg",previewURL:"https://cdn.beatsaver.com/22da796f08f777c437d4996d52ea1778e8e762ae.mp3"}],createdAt:"2020-01-29T22:25:19.574Z",updatedAt:"2020-01-29T22:25:19.574Z",lastPublishedAt:"2020-01-29T22:25:19.574Z"},{id:"105f5",name:"Porter Robinson & Madeon - Shelter",description:"A map that doesnt mess with chroma, but with boost lights\n\nBPM 100\nWonder (Expert)\n\nThis map was a special request from Lukken\n\npreview: https://www.youtube.com/watch?v=T1NscB2M4zI\n\nPlease enjoy\n\nDM any feedback on Discord\nETAN#8341",uploader:{id:4235140,name:"etan",uniqueSet:!0,hash:"5cff0b7798cc5a672c855775",avatar:"https://cdn.beatsaver.com/avatar/136373107559497728.png",type:"DISCORD"},metadata:{bpm:100,duration:221,songName:"Shelter",songSubName:"",songAuthorName:"Porter Robinson & Madeon",levelAuthorName:"ETAN"},stats:{plays:0,downloads:6551,upvotes:893,downvotes:18,score:.9185},uploaded:"2020-10-29T23:59:50.753Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"1b3a2fa722e093cae37b52ba5d412496b3a20b82",key:"105f5",state:"Published",createdAt:"2020-10-29T23:59:50.753Z",sageScore:5,diffs:[{njs:16,offset:.4,notes:707,bombs:46,obstacles:13,nps:3.272,length:360.078,characteristic:"Standard",difficulty:"Expert",events:6858,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:216.047,paritySummary:{errors:0,warns:0,resets:0}}],downloadURL:"https://cdn.beatsaver.com/1b3a2fa722e093cae37b52ba5d412496b3a20b82.zip",coverURL:"https://cdn.beatsaver.com/1b3a2fa722e093cae37b52ba5d412496b3a20b82.jpg",previewURL:"https://cdn.beatsaver.com/1b3a2fa722e093cae37b52ba5d412496b3a20b82.mp3"}],createdAt:"2020-10-29T23:59:50.753Z",updatedAt:"2020-10-29T23:59:50.753Z",lastPublishedAt:"2020-10-29T23:59:50.753Z"},{id:"8b48",name:"Doja Cat - Boss Bitch",description:"This is my first Beat Saber map. Thank you to CheckThePan, PlusOneRabbit, CyanSnow, Aeroluna and everyone in Noodle for helping me get started. You are all great wonderful people I am honored to call friends. <3\nDuration: 2:14\nBPM: 126\nMapped NPS: 2.96\nNotes: 371",uploader:{id:4543,name:"dat360noscope",uniqueSet:!0,hash:"5e58387f521acf00068f9ad4",avatar:"https://www.gravatar.com/avatar/5e58387f521acf00068f9ad4?d=retro",type:"SIMPLE"},metadata:{bpm:126,duration:134,songName:"Boss Bitch",songSubName:"",songAuthorName:"Doja Cat",levelAuthorName:"Dat360NoScope"},stats:{plays:0,downloads:2843,upvotes:868,downvotes:17,score:.9185},uploaded:"2020-02-27T21:53:18.919Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"2105facb044e1289ce1b84a9377bdd2a982f73e1",key:"8b48",state:"Published",createdAt:"2020-02-27T21:53:18.919Z",sageScore:4,diffs:[{njs:12,offset:0,notes:371,bombs:0,obstacles:87,nps:2.957,length:263.5,characteristic:"Standard",difficulty:"Hard",events:901,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:125.476,paritySummary:{errors:7,warns:1,resets:0}}],downloadURL:"https://cdn.beatsaver.com/2105facb044e1289ce1b84a9377bdd2a982f73e1.zip",coverURL:"https://cdn.beatsaver.com/2105facb044e1289ce1b84a9377bdd2a982f73e1.jpg",previewURL:"https://cdn.beatsaver.com/2105facb044e1289ce1b84a9377bdd2a982f73e1.mp3"}],createdAt:"2020-02-27T21:53:18.919Z",updatedAt:"2020-02-27T21:53:18.919Z",lastPublishedAt:"2020-02-27T21:53:18.919Z"},{id:"7067",name:"Sorairo Days (TV Size) [Gurren Lagann Opening] - Shoko Nakagawa",description:"This map was converted from one of my old maps.\n\nFeel free to DM me on discord @Joetastic#2501",uploader:{id:58338,name:"Joetastic",uniqueSet:!0,hash:"5cff0b7498cc5a672c85050e",avatar:"https://cdn.beatsaver.com/avatar/227767566402191360.png",type:"DISCORD"},metadata:{bpm:174,duration:93,songName:"Sorairo Days (TV Size)",songSubName:"",songAuthorName:"Shoko Nakagawa",levelAuthorName:"Joetastic"},stats:{plays:0,downloads:2600,upvotes:940,downvotes:20,score:.9185},uploaded:"2019-11-17T06:13:49.456Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"5a5f6a419abfcc998262b28f1fe4e3baa7d3d1bc",key:"7067",state:"Published",createdAt:"2019-11-17T06:13:49.456Z",sageScore:2,diffs:[{njs:10,offset:0,notes:212,bombs:0,obstacles:0,nps:2.726,length:225.5,characteristic:"Standard",difficulty:"Normal",events:1518,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:77.759,paritySummary:{errors:22,warns:13,resets:0}},{njs:11,offset:0,notes:290,bombs:0,obstacles:0,nps:3.729,length:225.5,characteristic:"Standard",difficulty:"Hard",events:1518,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:77.759,paritySummary:{errors:16,warns:7,resets:0}},{njs:13,offset:0,notes:332,bombs:0,obstacles:0,nps:4.27,length:225.5,characteristic:"Standard",difficulty:"Expert",events:1518,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:77.759,paritySummary:{errors:9,warns:11,resets:0}},{njs:15,offset:0,notes:469,bombs:0,obstacles:0,nps:5.978,length:227.5,characteristic:"Standard",difficulty:"ExpertPlus",events:1543,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:78.448,paritySummary:{errors:22,warns:33,resets:0}}],downloadURL:"https://cdn.beatsaver.com/5a5f6a419abfcc998262b28f1fe4e3baa7d3d1bc.zip",coverURL:"https://cdn.beatsaver.com/5a5f6a419abfcc998262b28f1fe4e3baa7d3d1bc.jpg",previewURL:"https://cdn.beatsaver.com/5a5f6a419abfcc998262b28f1fe4e3baa7d3d1bc.mp3"}],createdAt:"2019-11-17T06:13:49.456Z",updatedAt:"2019-11-17T06:13:49.456Z",lastPublishedAt:"2019-11-17T06:13:49.456Z"},{id:"19a",name:"NSP - Cool Patrol",description:"Normal, Hard, and Expert difficulties available. Relatively close to vanilla balancing.\r\n\r\nPreview: https://youtu.be/e5W5EhEE0V4\r\n\r\nBPM: 130\r\nNotes: 651 (Expert)\r\nDuration: 3:09",uploader:{id:45732,name:"calijor",uniqueSet:!1,hash:"5cff0b7298cc5a672c84ebb1",avatar:"https://www.gravatar.com/avatar/5cff0b7298cc5a672c84ebb1?d=retro",type:"SIMPLE"},metadata:{bpm:130,duration:189,songName:"Cool Patrol",songSubName:"",songAuthorName:"Ninja Sex Party",levelAuthorName:"calijor"},stats:{plays:0,downloads:1119,upvotes:1325,downvotes:38,score:.9184},uploaded:"2018-05-22T04:53:18Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"c87de9a5e4e8aa91d57403bde711033770b3c4a8",key:"19a",state:"Published",createdAt:"2018-05-22T04:53:18Z",sageScore:5,diffs:[{njs:10,offset:0,notes:434,bombs:0,obstacles:6,nps:2.351,length:399.938,characteristic:"Standard",difficulty:"Normal",events:1533,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:184.587,paritySummary:{errors:79,warns:32,resets:0}},{njs:10,offset:0,notes:560,bombs:0,obstacles:6,nps:3.034,length:399.938,characteristic:"Standard",difficulty:"Hard",events:1533,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:184.587,paritySummary:{errors:145,warns:31,resets:0}},{njs:10,offset:0,notes:651,bombs:0,obstacles:8,nps:3.527,length:399.938,characteristic:"Standard",difficulty:"Expert",events:1533,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:184.587,paritySummary:{errors:136,warns:48,resets:0}}],downloadURL:"https://cdn.beatsaver.com/c87de9a5e4e8aa91d57403bde711033770b3c4a8.zip",coverURL:"https://cdn.beatsaver.com/c87de9a5e4e8aa91d57403bde711033770b3c4a8.jpg",previewURL:"https://cdn.beatsaver.com/c87de9a5e4e8aa91d57403bde711033770b3c4a8.mp3"}],createdAt:"2018-05-22T04:53:18Z",updatedAt:"2018-05-22T04:53:18Z",lastPublishedAt:"2018-05-22T04:53:18Z"},{id:"3c89",name:"99.9 // Mob Choir feat. Sajou no Hana",description:"99.9, the OP Mob Psycho 100 Season 2\r\nBy Mob Choir feat. Sajou no Hana\r\nVideo: https://youtu.be/Qbk-0-p60WY\r\n\r\nShoutout to Testers:\r\nRedMagi\r\nTrolav",uploader:{id:39365,name:"todokete",uniqueSet:!0,hash:"5cff0b7398cc5a672c84ee70",avatar:"https://www.gravatar.com/avatar/5cff0b7398cc5a672c84ee70?d=retro",type:"SIMPLE"},metadata:{bpm:168,duration:98,songName:"99.9",songSubName:"MOB CHOIR feat. sajou no hana",songAuthorName:"Todokete",levelAuthorName:"todokete"},stats:{plays:0,downloads:3540,upvotes:1704,downvotes:57,score:.9183},uploaded:"2019-03-08T16:51:17Z",automapper:!1,ranked:!0,qualified:!1,versions:[{hash:"15ba13d183c824f46d2fc68ff5d6ba52ced1fad5",key:"3c89",state:"Published",createdAt:"2019-03-08T16:51:17Z",sageScore:3,diffs:[{njs:10,offset:0,notes:175,bombs:0,obstacles:0,nps:1.976,length:248,characteristic:"Standard",difficulty:"Normal",events:3251,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:88.571,paritySummary:{errors:17,warns:14,resets:0},stars:1.03},{njs:11,offset:0,notes:274,bombs:0,obstacles:0,nps:3.094,length:248,characteristic:"Standard",difficulty:"Hard",events:3251,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:88.571,paritySummary:{errors:17,warns:5,resets:0},stars:1.73},{njs:13,offset:0,notes:376,bombs:0,obstacles:0,nps:4.245,length:248,characteristic:"Standard",difficulty:"Expert",events:3251,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:88.571,paritySummary:{errors:22,warns:35,resets:0}},{njs:16,offset:0,notes:482,bombs:0,obstacles:0,nps:5.442,length:248,characteristic:"Standard",difficulty:"ExpertPlus",events:3251,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:88.571,paritySummary:{errors:20,warns:35,resets:0}}],downloadURL:"https://cdn.beatsaver.com/15ba13d183c824f46d2fc68ff5d6ba52ced1fad5.zip",coverURL:"https://cdn.beatsaver.com/15ba13d183c824f46d2fc68ff5d6ba52ced1fad5.jpg",previewURL:"https://cdn.beatsaver.com/15ba13d183c824f46d2fc68ff5d6ba52ced1fad5.mp3"}],createdAt:"2019-03-08T16:51:17Z",updatedAt:"2019-03-08T16:51:17Z",lastPublishedAt:"2019-03-08T16:51:17Z"},{id:"1a0b7",name:"[Electro Swing Pack] Jamie Berry - Lost In The Rhythm (ft. Octavia Rose)",description:"Nixie Presents: Electro Swing Pack!\n\n10 electro swing songs with expert and expert+ diffs to make your booty swing!\n\nGet The Pack: \nhttps://bsaber.com/electro-swing-pack/\n\nMap Gameplay:\nhttps://youtu.be/4O8l7rq4eHI\n\nComplete Pack Playthrough:\nhttps://youtu.be/yj9rw4MEh7s\n\nHeyya! After looking for some dancey electro swing maps, I noticed that there barely are any!\nSo I took matters into my own hands, learning mapping basically from scratch,\nscrapping my first failed attempts and then finally making a map that was good.\nI found it so fun that I ended up making 9 more maps,\nand fine tuned them with the help of the testplayers in BSMG,\nas well as the lovely curators from the bsaber discord.\n\nHuge thanks in particular to:\nMonstor, Bearly, Noxn, Bullet, Vaser888, Tocxx, Jafdy, Storm Knight and Pixelguy!\n\nIf you want to talk to me, here is my Discord:\nNixie.Korten#6944",uploader:{id:4286374,name:"nixiekorten",uniqueSet:!0,hash:"6096752e12772e0006e2f7e6",avatar:"https://cdn.beatsaver.com/avatar/840550221690699776.png",type:"DISCORD"},metadata:{bpm:121,duration:186,songName:"Lost In The Rhythm",songSubName:"(ft. Octavia Rose)",songAuthorName:"Jamie Berry",levelAuthorName:"Nixie.Korten"},stats:{plays:0,downloads:13219,upvotes:666,downvotes:9,score:.9182},uploaded:"2021-07-08T15:24:57.679Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"6d006d47880a45a134844f3787f3c184881d4673",key:"1a0b7",state:"Published",createdAt:"2021-07-08T15:24:57.679Z",sageScore:5,diffs:[{njs:16,offset:-.25,notes:591,bombs:0,obstacles:8,nps:3.274,length:364,characteristic:"Standard",difficulty:"Expert",events:3271,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:180.496,paritySummary:{errors:0,warns:0,resets:0}},{njs:19,offset:.25,notes:821,bombs:0,obstacles:8,nps:4.549,length:364,characteristic:"Standard",difficulty:"ExpertPlus",events:3271,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:180.496,paritySummary:{errors:0,warns:0,resets:0}}],downloadURL:"https://cdn.beatsaver.com/6d006d47880a45a134844f3787f3c184881d4673.zip",coverURL:"https://cdn.beatsaver.com/6d006d47880a45a134844f3787f3c184881d4673.jpg",previewURL:"https://cdn.beatsaver.com/6d006d47880a45a134844f3787f3c184881d4673.mp3"}],createdAt:"2021-07-08T15:24:57.679Z",updatedAt:"2021-07-08T15:24:57.679Z",lastPublishedAt:"2021-07-08T15:24:57.679Z"},{id:"84d6",name:"drop pop candy - Reol ft. Giga-P (+ Luka & Rin) [Std, 360 & 90]",description:"Another song by the amazing duo Reol and Giga-P, drop pop candy entered Hall of Fame just seven days after release!\n\nExpert+ guest difficulty by AaltopahWi! Everything else (Expert-Easy, 360, 90 and lighting) by me, Kolezan.\n\nThe Vocaloid song version with Megurine Luka and Kagamine Rin is also included!\nTo use this version do a file search in your Beat Saber_data/CustomLevels folder for “Reol_drop_pop_candy.egg”, open the folder which that file resides in, then rename “Reol_drop_pop_candy.egg” to “Reol_drop_pop_candy_Reol_and_Giga.egg”, and then rename “Reol_drop_pop_candy_Luka_and_Rin.egg” to “Reol_drop_pop_candy.egg”. Done!\n\nThanks to Maralade for pushing me to map this song sooner than later!\n\nMap is a tad harder than average, mostly to keep up with all the interesting points in the song. Map also contains custom map colors based on the music video.\n\nNo map video preview.\n\nBPM: 130\nDuration: 3:44\n\n== Standard mode: ==\nEasy:\nNPS 1.36, 306 notes, 50 walls, 0 bombs\n\nNormal:\nNPS 2.10, 470 notes, 16 walls, 0 bombs\n\nHard:\nNPS 2.86, 641 notes, 5 walls, 0 bombs\n\nExpert:\nNPS 3.85, 863 notes, 5 walls, 0 bombs\n\nExpert+ (by AaltopahWi):\nNPS 4.61, 1035 notes, 7 walls, 0 bombs\n\n== 360 degree mode: ==\nExpert:\nNPS 3.89, 873 notes, 39 walls, 0 bombs\n\n== 90 degree mode: ==\nExpert:\nNPS 3.89, 873 notes, 38 walls, 0 bombs\n\nThanks to Sorukun, fruhead, Checkthepan and Helen Carnate for playtesting!\n\nEnjoy!",uploader:{id:4285318,name:"kolezan",uniqueSet:!0,hash:"5cff0b7398cc5a672c84fcbb",avatar:"https://cdn.beatsaver.com/avatar/220513618763055106.png",type:"DISCORD"},metadata:{bpm:130,duration:224,songName:"drop pop candy",songSubName:"ft. GigaP",songAuthorName:"Reol",levelAuthorName:"Kolezan (E+ by AaltopahWi)"},stats:{plays:0,downloads:2815,upvotes:1257,downvotes:35,score:.9182},uploaded:"2020-02-07T07:19:14.938Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"50e4c2101cc079a98f88e80aa7091e60bb6d1d31",key:"84d6",state:"Published",createdAt:"2020-02-07T07:19:14.938Z",sageScore:6,diffs:[{njs:9,offset:0,notes:306,bombs:0,obstacles:50,nps:1.42,length:467,characteristic:"Standard",difficulty:"Easy",events:2147,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:215.538,paritySummary:{errors:80,warns:21,resets:0}},{njs:11,offset:1,notes:470,bombs:0,obstacles:16,nps:2.164,length:470.5,characteristic:"Standard",difficulty:"Normal",events:2147,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:217.154,paritySummary:{errors:67,warns:51,resets:0}},{njs:14,offset:.5,notes:641,bombs:0,obstacles:5,nps:2.927,length:474.5,characteristic:"Standard",difficulty:"Hard",events:2147,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:219,paritySummary:{errors:33,warns:21,resets:0}},{njs:17,offset:.125,notes:863,bombs:0,obstacles:5,nps:3.941,length:474.5,characteristic:"Standard",difficulty:"Expert",events:2147,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:219,paritySummary:{errors:21,warns:36,resets:0}},{njs:19,offset:-.25,notes:1035,bombs:0,obstacles:7,nps:4.726,length:474.5,characteristic:"Standard",difficulty:"ExpertPlus",events:2147,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:219,paritySummary:{errors:3,warns:6,resets:0}},{njs:15,offset:.25,notes:873,bombs:0,obstacles:38,nps:3.986,length:474.5,characteristic:"90Degree",difficulty:"Expert",events:2464,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:219,paritySummary:{errors:26,warns:37,resets:0}},{njs:15,offset:.25,notes:873,bombs:0,obstacles:39,nps:3.986,length:474.5,characteristic:"360Degree",difficulty:"Expert",events:2467,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:219,paritySummary:{errors:26,warns:37,resets:0}}],downloadURL:"https://cdn.beatsaver.com/50e4c2101cc079a98f88e80aa7091e60bb6d1d31.zip",coverURL:"https://cdn.beatsaver.com/50e4c2101cc079a98f88e80aa7091e60bb6d1d31.jpg",previewURL:"https://cdn.beatsaver.com/50e4c2101cc079a98f88e80aa7091e60bb6d1d31.mp3"}],createdAt:"2020-02-07T07:19:14.938Z",updatedAt:"2020-02-07T07:19:14.938Z",lastPublishedAt:"2020-02-07T07:19:14.938Z"},{id:"68bb",name:"FREEDOM DiVE (ZipperKim Remix)",description:"Remixer: https://youtu.be/IQ7KvbSrm7M\n\nPreview: https://youtu.be/L2cs_elU7rE\n\n\nTwitter: https://twitter.com/Dack731",uploader:{id:4285250,name:"dack",uniqueSet:!0,hash:"5cff0b7598cc5a672c852c6f",avatar:"https://cdn.beatsaver.com/avatar/297344689798119424.png",type:"DISCORD"},metadata:{bpm:140,duration:160,songName:"FREEDOM DiVE",songSubName:"(ZipperKim Remix)",songAuthorName:"xi",levelAuthorName:"Dack"},stats:{plays:0,downloads:4015,upvotes:1940,downvotes:70,score:.9181},uploaded:"2019-10-08T23:40:00.119Z",automapper:!1,ranked:!0,qualified:!1,versions:[{hash:"f1591bf3f2d821a48bb86214c9da47d8cff24046",key:"68bb",state:"Published",createdAt:"2019-10-08T23:40:00.119Z",sageScore:6,diffs:[{njs:14.5,offset:0,notes:529,bombs:4,obstacles:2,nps:3.547,length:348,characteristic:"Standard",difficulty:"Hard",events:3703,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:149.143,paritySummary:{errors:0,warns:0,resets:1},stars:2.14},{njs:16,offset:0,notes:643,bombs:4,obstacles:0,nps:4.311,length:348,characteristic:"Standard",difficulty:"Expert",events:3703,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:149.143,paritySummary:{errors:7,warns:4,resets:1},stars:2.84},{njs:18,offset:0,notes:752,bombs:4,obstacles:0,nps:5.042,length:348,characteristic:"Standard",difficulty:"ExpertPlus",events:3703,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:149.143,paritySummary:{errors:9,warns:11,resets:1},stars:4.16}],downloadURL:"https://cdn.beatsaver.com/f1591bf3f2d821a48bb86214c9da47d8cff24046.zip",coverURL:"https://cdn.beatsaver.com/f1591bf3f2d821a48bb86214c9da47d8cff24046.jpg",previewURL:"https://cdn.beatsaver.com/f1591bf3f2d821a48bb86214c9da47d8cff24046.mp3"}],createdAt:"2019-10-08T23:40:00.119Z",updatedAt:"2019-10-08T23:40:00.119Z",lastPublishedAt:"2019-10-08T23:40:00.119Z"},{id:"456d",name:"Wiz Khalifa - Black and Yellow",description:"Yeah, uh huh, you know what it is! It's a new map! Black and Yellow by Wiz Khalifa. The colors? Black and yellow, black and yellow, black and yellow, black and yellow.\r\nI think it's a fun map, so I hope you enjoy as well!\r\n\r\nAs always, you can give me feedback on Beast Saber or in Discord @Maarten#9596.\r\n\r\nPreview video: https://www.youtube.com/watch?v=fla0VfHh3WE",uploader:{id:57657,name:"pixelguymm",uniqueSet:!0,hash:"5cff0b7698cc5a672c8541a8",avatar:"https://cdn.beatsaver.com/avatar/434386941547511818.png",type:"DISCORD"},metadata:{bpm:164,duration:102,songName:"Black and Yellow",songSubName:"Wiz Khalifa",songAuthorName:"Pixelguy",levelAuthorName:"pixelguymm"},stats:{plays:0,downloads:2927,upvotes:1171,downvotes:31,score:.9181},uploaded:"2019-04-13T08:58:48Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"b03042e8647cca08cdc5b80e23ed569ef3dbc201",key:"456d",state:"Published",createdAt:"2019-04-13T08:58:48Z",sageScore:6,diffs:[{njs:12,offset:0,notes:144,bombs:0,obstacles:0,nps:1.55,length:254,characteristic:"Standard",difficulty:"Easy",events:1062,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:92.927,paritySummary:{errors:7,warns:0,resets:0}},{njs:12,offset:0,notes:208,bombs:0,obstacles:0,nps:2.23,length:255,characteristic:"Standard",difficulty:"Normal",events:1062,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:93.293,paritySummary:{errors:8,warns:8,resets:0}},{njs:14,offset:0,notes:293,bombs:16,obstacles:0,nps:3.135,length:255.5,characteristic:"Standard",difficulty:"Hard",events:1062,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:93.476,paritySummary:{errors:18,warns:14,resets:3}},{njs:16,offset:0,notes:402,bombs:20,obstacles:0,nps:4.301,length:255.5,characteristic:"Standard",difficulty:"Expert",events:1062,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:93.476,paritySummary:{errors:18,warns:16,resets:8}}],downloadURL:"https://cdn.beatsaver.com/b03042e8647cca08cdc5b80e23ed569ef3dbc201.zip",coverURL:"https://cdn.beatsaver.com/b03042e8647cca08cdc5b80e23ed569ef3dbc201.jpg",previewURL:"https://cdn.beatsaver.com/b03042e8647cca08cdc5b80e23ed569ef3dbc201.mp3"}],createdAt:"2019-04-13T08:58:48Z",updatedAt:"2019-04-13T08:58:48Z",lastPublishedAt:"2019-04-13T08:58:48Z"},{id:"6554",name:"Windows Down - Nightcore",description:"Youtube Preview: https://youtu.be/z-Iaze8Ac60",uploader:{id:23751,name:"monteblanco",uniqueSet:!0,hash:"5cff0b7798cc5a672c855ef5",avatar:"https://www.gravatar.com/avatar/5cff0b7798cc5a672c855ef5?d=retro",type:"SIMPLE"},metadata:{bpm:159,duration:159,songName:"Windows Down - Nightcore",songSubName:"",songAuthorName:"Nightcore Reality",levelAuthorName:"Monteblanco"},stats:{plays:0,downloads:697,upvotes:786,downvotes:14,score:.918},uploaded:"2019-09-23T01:31:55.127Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"4bec5881a2090ab3e655fecdec1eed5324703c94",key:"6554",state:"Published",createdAt:"2019-09-23T01:31:55.127Z",sageScore:4,diffs:[{njs:15,offset:0,notes:518,bombs:20,obstacles:27,nps:3.348,length:410,characteristic:"Standard",difficulty:"Expert",events:646,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:154.717,paritySummary:{errors:0,warns:0,resets:6}}],downloadURL:"https://cdn.beatsaver.com/4bec5881a2090ab3e655fecdec1eed5324703c94.zip",coverURL:"https://cdn.beatsaver.com/4bec5881a2090ab3e655fecdec1eed5324703c94.jpg",previewURL:"https://cdn.beatsaver.com/4bec5881a2090ab3e655fecdec1eed5324703c94.mp3"}],createdAt:"2019-09-23T01:31:55.127Z",updatedAt:"2019-09-23T01:31:55.127Z",lastPublishedAt:"2019-09-23T01:31:55.127Z"},{id:"2bb7",name:"Join Us for a Bite (FNAF Sister Location) - JT Music feat. Andrea Storm Kaden",description:"BPM: 86 (172 at points)\r\nNotes: Hard - 628 , Expert - 745\r\nWalls: 14\r\n\r\nThanks to Redmagi for playtesting, and AaltopahWi for lighting advice.",uploader:{id:4285188,name:"fruhead",uniqueSet:!0,hash:"5cff0b7598cc5a672c852683",avatar:"https://cdn.beatsaver.com/avatar/174000100413145090.png",type:"DISCORD"},metadata:{bpm:86,duration:225,songName:"Join Us for a Bite (FNAF Sister Location)",songSubName:"JT Music feat. Andrea Storm Kaden",songAuthorName:"fruhead",levelAuthorName:"fruhead"},stats:{plays:0,downloads:1667,upvotes:993,downvotes:23,score:.918},uploaded:"2019-01-07T06:04:31Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"7974c174533415ccc43dcd75678aedd1aec44f96",key:"2bb7",state:"Published",createdAt:"2019-01-07T06:04:31Z",sageScore:6,diffs:[{njs:12,offset:0,notes:628,bombs:0,obstacles:14,nps:2.867,length:314,characteristic:"Standard",difficulty:"Hard",events:1759,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:219.07,paritySummary:{errors:43,warns:22,resets:0}},{njs:13,offset:0,notes:745,bombs:0,obstacles:14,nps:3.401,length:314,characteristic:"Standard",difficulty:"Expert",events:1760,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:219.07,paritySummary:{errors:30,warns:24,resets:0}}],downloadURL:"https://cdn.beatsaver.com/7974c174533415ccc43dcd75678aedd1aec44f96.zip",coverURL:"https://cdn.beatsaver.com/7974c174533415ccc43dcd75678aedd1aec44f96.jpg",previewURL:"https://cdn.beatsaver.com/7974c174533415ccc43dcd75678aedd1aec44f96.mp3"}],createdAt:"2019-01-07T06:04:31Z",updatedAt:"2019-01-07T06:04:31Z",lastPublishedAt:"2019-01-07T06:04:31Z"},{id:"e4",name:"Every Time We Touch - Cascada",description:"Expert Only\r\nTime - 3:19\r\nBPM - 142\r\nNotes- 564",uploader:{id:49373,name:"purphoros",uniqueSet:!0,hash:"5cff0b7298cc5a672c84ea98",avatar:"https://www.gravatar.com/avatar/5cff0b7298cc5a672c84ea98?d=retro",type:"SIMPLE"},metadata:{bpm:142,duration:199,songName:"Every Time We Touch",songSubName:"",songAuthorName:"Cascada",levelAuthorName:"purphoros"},stats:{plays:0,downloads:15282,upvotes:10721,downvotes:627,score:.918},uploaded:"2018-05-18T03:51:03Z",automapper:!1,ranked:!0,qualified:!1,versions:[{hash:"bc6c7ef1385db4c11c59736d2b32eacf48c95bd9",key:"e4",state:"Published",createdAt:"2018-05-18T03:51:03Z",sageScore:4,diffs:[{njs:10,offset:0,notes:564,bombs:0,obstacles:0,nps:3.178,length:420,characteristic:"Standard",difficulty:"Expert",events:10,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:177.465,paritySummary:{errors:108,warns:44,resets:0},stars:2.13}],downloadURL:"https://cdn.beatsaver.com/bc6c7ef1385db4c11c59736d2b32eacf48c95bd9.zip",coverURL:"https://cdn.beatsaver.com/bc6c7ef1385db4c11c59736d2b32eacf48c95bd9.jpg",previewURL:"https://cdn.beatsaver.com/bc6c7ef1385db4c11c59736d2b32eacf48c95bd9.mp3"}],createdAt:"2018-05-18T03:51:03Z",updatedAt:"2018-05-18T03:51:03Z",lastPublishedAt:"2018-05-18T03:51:03Z"},{id:"3519",name:"Happier Sunflower - Marshmello, Post Malone, Swae Lee, Bastille [Mashup by Dj Pyromania]",description:"Preview:\r\nhttps://www.youtube.com/watch?v=eRwvvhMrkcQ",uploader:{id:4286278,name:"ruckus",uniqueSet:!0,hash:"5cff0b7398cc5a672c84f1d8",avatar:"https://cdn.beatsaver.com/avatar/239082462083284992.png",type:"DISCORD"},metadata:{bpm:100,duration:205,songName:"Happier Sunflower",songSubName:"Dj Pyromania, Marshmello, Post Malone, Bastille, Swae Lee",songAuthorName:"Ruckus",levelAuthorName:"ruckus"},stats:{plays:0,downloads:5342,upvotes:1788,downvotes:62,score:.918},uploaded:"2019-02-10T18:46:16Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"ec8dc26331e1eff4d4fabeed45b927c49a61f8ca",key:"3519",state:"Published",createdAt:"2019-02-10T18:46:16Z",sageScore:5,diffs:[{njs:14,offset:0,notes:348,bombs:0,obstacles:24,nps:1.747,length:332,characteristic:"Standard",difficulty:"Normal",events:2700,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:199.2,paritySummary:{errors:24,warns:16,resets:0}},{njs:14,offset:0,notes:718,bombs:0,obstacles:31,nps:3.604,length:332.063,characteristic:"Standard",difficulty:"Expert",events:2700,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:199.238,paritySummary:{errors:47,warns:69,resets:0}}],downloadURL:"https://cdn.beatsaver.com/ec8dc26331e1eff4d4fabeed45b927c49a61f8ca.zip",coverURL:"https://cdn.beatsaver.com/ec8dc26331e1eff4d4fabeed45b927c49a61f8ca.jpg",previewURL:"https://cdn.beatsaver.com/ec8dc26331e1eff4d4fabeed45b927c49a61f8ca.mp3"}],createdAt:"2019-02-10T18:46:16Z",updatedAt:"2019-02-10T18:46:16Z",lastPublishedAt:"2019-02-10T18:46:16Z"},{id:"c767",name:"We'll Meet Again",description:"Decided to wall map this beautiful song, hope you all love it!\n---------------------------------------------\n\nQuestions? Feedback? Map not working? \nmessage me on discord: Reddek#5864",uploader:{id:4233941,name:"reddek",uniqueSet:!0,hash:"5dbfb4426dea0b0006bd328d",avatar:"https://cdn.beatsaver.com/avatar/177436487086768129.png",type:"DISCORD"},metadata:{bpm:192,duration:196,songName:"We'll Meet Again",songSubName:"",songAuthorName:"TheFatRat & Laura Brehm",levelAuthorName:"Reddek"},stats:{plays:0,downloads:1398,upvotes:758,downvotes:13,score:.9179},uploaded:"2020-07-25T12:21:48.657Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"4e3bc64c9aca00a925848905caccd27b5f390573",key:"c767",state:"Published",createdAt:"2020-07-25T12:21:48.657Z",sageScore:3,diffs:[{njs:18,offset:0,notes:721,bombs:34,obstacles:17842,nps:4.006,length:576,characteristic:"Standard",difficulty:"ExpertPlus",events:2009,chroma:!0,me:!1,ne:!0,cinema:!1,seconds:180,paritySummary:{errors:0,warns:0,resets:2}}],downloadURL:"https://cdn.beatsaver.com/4e3bc64c9aca00a925848905caccd27b5f390573.zip",coverURL:"https://cdn.beatsaver.com/4e3bc64c9aca00a925848905caccd27b5f390573.jpg",previewURL:"https://cdn.beatsaver.com/4e3bc64c9aca00a925848905caccd27b5f390573.mp3"}],createdAt:"2020-07-25T12:21:48.657Z",updatedAt:"2020-07-25T12:21:48.657Z",lastPublishedAt:"2020-07-25T12:21:48.657Z"},{id:"b99e",name:"How You Like That - Blackpink",description:"All difficulties available.\n\nExpert+ preview (pre-release version): https://youtu.be/seIKt_PR7hg\n\nSpecial thanks to lilqbunny for setting up the audio.\n\nFollow me on Twitter u won't: https://twitter.com/aggrogahu\nCatch me live on Twitch: https://www.twitch.tv/aggrogahu\nJoin the KPOP Beat Saber discord: https://discord.gg/c9uHGYP",uploader:{id:4284613,name:"aggrogahu",uniqueSet:!0,hash:"5cff0b7398cc5a672c84fdad",avatar:"https://cdn.beatsaver.com/avatar/158363872649150464.png",type:"DISCORD"},metadata:{bpm:130,duration:181,songName:"How You Like That",songSubName:"",songAuthorName:"Blackpink",levelAuthorName:"aggrogahu"},stats:{plays:0,downloads:11418,upvotes:1451,downvotes:45,score:.9179},uploaded:"2020-07-05T06:16:58.371Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"54f993f61f0ea48ddbb764f13936cc78799046a5",key:"b99e",state:"Published",createdAt:"2020-07-05T06:16:58.371Z",sageScore:7,diffs:[{njs:10,offset:1,notes:216,bombs:6,obstacles:16,nps:1.286,length:364,characteristic:"Standard",difficulty:"Easy",events:1462,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:168,paritySummary:{errors:37,warns:12,resets:4}},{njs:10,offset:1,notes:276,bombs:14,obstacles:19,nps:1.643,length:364,characteristic:"Standard",difficulty:"Normal",events:1462,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:168,paritySummary:{errors:38,warns:26,resets:7}},{njs:12,offset:1,notes:430,bombs:32,obstacles:19,nps:2.56,length:364,characteristic:"Standard",difficulty:"Hard",events:1462,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:168,paritySummary:{errors:34,warns:46,resets:9}},{njs:14,offset:.7,notes:631,bombs:30,obstacles:21,nps:3.749,length:364.667,characteristic:"Standard",difficulty:"Expert",events:1462,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:168.308,paritySummary:{errors:18,warns:28,resets:8}},{njs:19,offset:-.3,notes:692,bombs:30,obstacles:30,nps:4.112,length:364.667,characteristic:"Standard",difficulty:"ExpertPlus",events:1462,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:168.308,paritySummary:{errors:16,warns:22,resets:8}}],downloadURL:"https://cdn.beatsaver.com/54f993f61f0ea48ddbb764f13936cc78799046a5.zip",coverURL:"https://cdn.beatsaver.com/54f993f61f0ea48ddbb764f13936cc78799046a5.jpg",previewURL:"https://cdn.beatsaver.com/54f993f61f0ea48ddbb764f13936cc78799046a5.mp3"}],createdAt:"2020-07-05T06:16:58.371Z",updatedAt:"2020-07-05T06:16:58.371Z",lastPublishedAt:"2020-07-05T06:16:58.371Z"},{id:"8647",name:"Pursuing My True Self - Persona 4",description:"80",uploader:{id:4285521,name:"ejiejidayo",uniqueSet:!0,hash:"5cff0b7398cc5a672c84fc58",avatar:"https://cdn.beatsaver.com/avatar/224894241279574016.png",type:"DISCORD"},metadata:{bpm:119,duration:183,songName:"Pursuing My True Self",songSubName:"",songAuthorName:"Persona 4",levelAuthorName:"ejiejidayo"},stats:{plays:0,downloads:5195,upvotes:1185,downvotes:32,score:.9179},uploaded:"2020-02-12T11:59:55.125Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"990f576d9b1045bc6aa4f7ab7a2231a1bd05e6fe",key:"8647",state:"Published",createdAt:"2020-02-12T11:59:55.125Z",sageScore:4,diffs:[{njs:12,offset:0,notes:605,bombs:0,obstacles:59,nps:3.354,length:357.75,characteristic:"Standard",difficulty:"Hard",events:1318,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:180.378,paritySummary:{errors:11,warns:12,resets:0}},{njs:15,offset:-.4,notes:812,bombs:0,obstacles:47,nps:4.499,length:358,characteristic:"Standard",difficulty:"Expert",events:1318,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:180.504,paritySummary:{errors:9,warns:23,resets:0}},{njs:17,offset:-.6,notes:921,bombs:0,obstacles:81,nps:5.102,length:358,characteristic:"Standard",difficulty:"ExpertPlus",events:1318,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:180.504,paritySummary:{errors:49,warns:77,resets:0}}],downloadURL:"https://cdn.beatsaver.com/990f576d9b1045bc6aa4f7ab7a2231a1bd05e6fe.zip",coverURL:"https://cdn.beatsaver.com/990f576d9b1045bc6aa4f7ab7a2231a1bd05e6fe.jpg",previewURL:"https://cdn.beatsaver.com/990f576d9b1045bc6aa4f7ab7a2231a1bd05e6fe.mp3"}],createdAt:"2020-02-12T11:59:55.125Z",updatedAt:"2020-02-12T11:59:55.125Z",lastPublishedAt:"2020-02-12T11:59:55.125Z"},{id:"5911",name:"Stars Tonight - Zeds Dead x DROELOE (collab w/ Rexxz & StyngMe)",description:"155 BPM - 2:47 Runtime\n\nStandard:\nEasy - 245 Notes\nNormal - 369 Notes\nHard - 442 Notes\nExpert - 535 Notes\nExpert+ - 700 Notes\n\nSingle Saber:\nHard - 346 Notes\nExpert - 415 Notes\nExpert+ - 556 Notes\n\nSkyler Wallace: Expert+, Easy - Hard, Single Saber\nStyngMe: Expert+\nRexxz: Lighting",uploader:{id:4284981,name:"skylerwallace",uniqueSet:!0,hash:"5cff0b7298cc5a672c84ea67",avatar:"https://cdn.beatsaver.com/avatar/398344856868487168.png",type:"DISCORD"},metadata:{bpm:155,duration:167,songName:"Stars Tonight",songSubName:"",songAuthorName:"Zeds Dead x Droeloe",levelAuthorName:"Skyler, StyngMe, & Rexxz"},stats:{plays:0,downloads:2895,upvotes:1490,downvotes:47,score:.9179},uploaded:"2019-07-27T04:11:18.419Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"e9fe30a5d1c3d1f1ed1d1d0af33e83f52a22c2cb",key:"5911",state:"Published",createdAt:"2019-07-27T04:11:18.419Z",sageScore:8,diffs:[{njs:10,offset:0,notes:245,bombs:0,obstacles:14,nps:1.582,length:400,characteristic:"Standard",difficulty:"Easy",events:6285,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:154.839,paritySummary:{errors:89,warns:16,resets:0}},{njs:10,offset:0,notes:369,bombs:0,obstacles:14,nps:2.383,length:400,characteristic:"Standard",difficulty:"Normal",events:6285,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:154.839,paritySummary:{errors:97,warns:22,resets:0}},{njs:12,offset:1,notes:442,bombs:2,obstacles:16,nps:2.855,length:400,characteristic:"Standard",difficulty:"Hard",events:6285,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:154.839,paritySummary:{errors:65,warns:28,resets:3}},{njs:14,offset:1,notes:535,bombs:6,obstacles:16,nps:3.455,length:400,characteristic:"Standard",difficulty:"Expert",events:6285,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:154.839,paritySummary:{errors:22,warns:16,resets:5}},{njs:18,offset:.1,notes:700,bombs:6,obstacles:43,nps:4.521,length:400,characteristic:"Standard",difficulty:"ExpertPlus",events:6285,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:154.839,paritySummary:{errors:39,warns:65,resets:0}},{njs:12,offset:1,notes:346,bombs:0,obstacles:14,nps:2.235,length:400,characteristic:"OneSaber",difficulty:"Hard",events:6285,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:154.839,paritySummary:{errors:44,warns:16,resets:0}},{njs:14,offset:1,notes:415,bombs:2,obstacles:16,nps:2.68,length:400,characteristic:"OneSaber",difficulty:"Expert",events:6285,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:154.839,paritySummary:{errors:31,warns:24,resets:2}},{njs:16,offset:.25,notes:556,bombs:6,obstacles:16,nps:3.591,length:400,characteristic:"OneSaber",difficulty:"ExpertPlus",events:6285,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:154.839,paritySummary:{errors:34,warns:108,resets:1}}],downloadURL:"https://cdn.beatsaver.com/e9fe30a5d1c3d1f1ed1d1d0af33e83f52a22c2cb.zip",coverURL:"https://cdn.beatsaver.com/e9fe30a5d1c3d1f1ed1d1d0af33e83f52a22c2cb.jpg",previewURL:"https://cdn.beatsaver.com/e9fe30a5d1c3d1f1ed1d1d0af33e83f52a22c2cb.mp3"}],createdAt:"2019-07-27T04:11:18.419Z",updatedAt:"2019-07-27T04:11:18.419Z",lastPublishedAt:"2019-07-27T04:11:18.419Z"},{id:"5395",name:"Alestorm - Mexico",description:"My first map, this song felt good to map because it's structurally simple and catchy. Beat Saber needs more metal and I want to make more maps so any feedback is appreciated :). \n\nExpert and Hard are mapped to be significantly easier than Expert+, so that more people can enjoy it. Here's a video of Expert+ playthrough: https://youtu.be/Y-0cYyZwxIY",uploader:{id:1207,name:"wyxi",uniqueSet:!0,hash:"5d0abf96b8c469000699075f",avatar:"https://www.gravatar.com/avatar/5d0abf96b8c469000699075f?d=retro",type:"SIMPLE"},metadata:{bpm:128,duration:192,songName:"Mexico",songSubName:"",songAuthorName:"Alestorm",levelAuthorName:"Wyxi"},stats:{plays:0,downloads:1445,upvotes:873,downvotes:18,score:.9177},uploaded:"2019-06-19T23:52:29.181Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"fb5cda4446fdd4dd02cfb5510d00244842e4c392",key:"5395",state:"Published",createdAt:"2019-06-19T23:52:29.181Z",sageScore:6,diffs:[{njs:11,offset:1,notes:435,bombs:70,obstacles:23,nps:2.376,length:390.5,characteristic:"Standard",difficulty:"Hard",events:1282,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:183.047,paritySummary:{errors:76,warns:16,resets:0}},{njs:13,offset:1,notes:560,bombs:70,obstacles:23,nps:3.059,length:390.5,characteristic:"Standard",difficulty:"Expert",events:1282,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:183.047,paritySummary:{errors:55,warns:15,resets:0}},{njs:15,offset:0,notes:975,bombs:76,obstacles:23,nps:5.327,length:390.5,characteristic:"Standard",difficulty:"ExpertPlus",events:1280,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:183.047,paritySummary:{errors:65,warns:64,resets:1}}],downloadURL:"https://cdn.beatsaver.com/fb5cda4446fdd4dd02cfb5510d00244842e4c392.zip",coverURL:"https://cdn.beatsaver.com/fb5cda4446fdd4dd02cfb5510d00244842e4c392.jpg",previewURL:"https://cdn.beatsaver.com/fb5cda4446fdd4dd02cfb5510d00244842e4c392.mp3"}],createdAt:"2019-06-19T23:52:29.181Z",updatedAt:"2019-06-19T23:52:29.181Z",lastPublishedAt:"2019-06-19T23:52:29.181Z"},{id:"4e8d",name:"Centipede (Visual Representation) - Knife Party",description:"Make sure you have SFX turned off and NoFail turned on!\r\nThis map is not intended to be passed, just sit back and enjoy the show! :)",uploader:{id:11127,name:"nicetomeetyou",uniqueSet:!0,hash:"5cff0b7398cc5a672c84f5d1",avatar:"https://www.gravatar.com/avatar/5cff0b7398cc5a672c84f5d1?d=retro",type:"SIMPLE"},metadata:{bpm:280,duration:145,songName:"Centipede (VISUAL)",songSubName:"Knife Party",songAuthorName:"NiceToMeetYou",levelAuthorName:"nicetomeetyou"},stats:{plays:0,downloads:2652,upvotes:1363,downvotes:41,score:.9177},uploaded:"2019-05-22T21:23:54Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"8061055d363292dda7b055eefc1c5dbebb13e616",key:"4e8d",state:"Published",createdAt:"2019-05-22T21:23:54Z",sageScore:5,diffs:[{njs:23,offset:0,notes:9189,bombs:0,obstacles:0,nps:95.719,length:448,characteristic:"Standard",difficulty:"ExpertPlus",events:2178,chroma:!1,me:!0,ne:!1,cinema:!1,seconds:96,paritySummary:{errors:0,warns:0,resets:0}}],downloadURL:"https://cdn.beatsaver.com/8061055d363292dda7b055eefc1c5dbebb13e616.zip",coverURL:"https://cdn.beatsaver.com/8061055d363292dda7b055eefc1c5dbebb13e616.jpg",previewURL:"https://cdn.beatsaver.com/8061055d363292dda7b055eefc1c5dbebb13e616.mp3"}],createdAt:"2019-05-22T21:23:54Z",updatedAt:"2019-05-22T21:23:54Z",lastPublishedAt:"2019-05-22T21:23:54Z"},{id:"4445",name:"Runaway Baby - Bruno Mars (V2)",description:"45\r\nremap https://beatsaver.com/browse/detail/2208-1528",uploader:{id:4285521,name:"ejiejidayo",uniqueSet:!0,hash:"5cff0b7398cc5a672c84fc58",avatar:"https://cdn.beatsaver.com/avatar/224894241279574016.png",type:"DISCORD"},metadata:{bpm:164,duration:149,songName:"Runaway Baby V2",songSubName:"Bruno Mars",songAuthorName:"ejiejidayo",levelAuthorName:"ejiejidayo"},stats:{plays:0,downloads:3375,upvotes:1030,downvotes:25,score:.9177},uploaded:"2019-04-08T07:32:15Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"6ae2ff433fb5a570eeb0801f30a01b446bde2c15",key:"4445",state:"Published",createdAt:"2019-04-08T07:32:15Z",sageScore:5,diffs:[{njs:11,offset:0,notes:614,bombs:0,obstacles:50,nps:4.463,length:376,characteristic:"Standard",difficulty:"Expert",events:1e3,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:137.561,paritySummary:{errors:60,warns:17,resets:0}}],downloadURL:"https://cdn.beatsaver.com/6ae2ff433fb5a570eeb0801f30a01b446bde2c15.zip",coverURL:"https://cdn.beatsaver.com/6ae2ff433fb5a570eeb0801f30a01b446bde2c15.jpg",previewURL:"https://cdn.beatsaver.com/6ae2ff433fb5a570eeb0801f30a01b446bde2c15.mp3"}],createdAt:"2019-04-08T07:32:15Z",updatedAt:"2019-04-08T07:32:15Z",lastPublishedAt:"2019-04-08T07:32:15Z"},{id:"46b1",name:"Bad Guy - Billie Eilish",description:"Lighting done by Rexxz",uploader:{id:21050,name:"dgrj4life",uniqueSet:!0,hash:"5cff0b7298cc5a672c84eaa1",avatar:"https://www.gravatar.com/avatar/5cff0b7298cc5a672c84eaa1?d=retro",type:"SIMPLE"},metadata:{bpm:135,duration:194,songName:"Bad Guy",songSubName:"Billie Eilish",songAuthorName:"DGRJ 4 Life & Rexxz",levelAuthorName:"dgrj4life"},stats:{plays:0,downloads:6662,upvotes:5055,downvotes:256,score:.9176},uploaded:"2019-04-17T23:25:17Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"a6a8f5c9146321b609645eefb109197e301bfe71",key:"46b1",state:"Published",createdAt:"2019-04-17T23:25:17Z",sageScore:5,diffs:[{njs:14,offset:0,notes:761,bombs:8,obstacles:36,nps:4.003,length:427.766,characteristic:"Standard",difficulty:"Expert",events:7645,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:190.118,paritySummary:{errors:33,warns:49,resets:0}},{njs:16,offset:0,notes:918,bombs:8,obstacles:36,nps:4.829,length:427.766,characteristic:"Standard",difficulty:"ExpertPlus",events:7645,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:190.118,paritySummary:{errors:32,warns:67,resets:0}}],downloadURL:"https://cdn.beatsaver.com/a6a8f5c9146321b609645eefb109197e301bfe71.zip",coverURL:"https://cdn.beatsaver.com/a6a8f5c9146321b609645eefb109197e301bfe71.jpg",previewURL:"https://cdn.beatsaver.com/a6a8f5c9146321b609645eefb109197e301bfe71.mp3"}],createdAt:"2019-04-17T23:25:17Z",updatedAt:"2019-04-17T23:25:17Z",lastPublishedAt:"2019-04-17T23:25:17Z"},{id:"431d",name:"PewDiePie - Congratulations",description:"UPDATED OFFSET PROBLEMS\r\n\r\nIt's time to 'slice' T-Series! Presenting PewDiePie's latest diss track \"Congratulations\" featuring David Paul Brown and Joel Gustaf “Roomie” Berghult. I hope you enjoy!\r\n\r\nPewDiePie's original video: https://www.youtube.com/watch?v=PHgc8Q6qTjc",uploader:{id:42921,name:"pianoluigi",uniqueSet:!0,hash:"5cff0b7698cc5a672c854076",avatar:"https://www.gravatar.com/avatar/5cff0b7698cc5a672c854076?d=retro",type:"SIMPLE"},metadata:{bpm:136,duration:252,songName:"Congratulations",songSubName:"PewDiePie",songAuthorName:"PianoLuigi",levelAuthorName:"PianoLuigi"},stats:{plays:0,downloads:1157,upvotes:937,downvotes:21,score:.9176},uploaded:"2019-04-03T09:04:34Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"768776b15afc801f67a2244439938740349cbc74",key:"431d",state:"Published",createdAt:"2019-04-03T09:04:34Z",sageScore:5,diffs:[{njs:16,offset:0,notes:1099,bombs:32,obstacles:64,nps:4.488,length:555,characteristic:"Standard",difficulty:"ExpertPlus",events:2728,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:244.853,paritySummary:{errors:40,warns:33,resets:16}}],downloadURL:"https://cdn.beatsaver.com/768776b15afc801f67a2244439938740349cbc74.zip",coverURL:"https://cdn.beatsaver.com/768776b15afc801f67a2244439938740349cbc74.jpg",previewURL:"https://cdn.beatsaver.com/768776b15afc801f67a2244439938740349cbc74.mp3"}],createdAt:"2019-04-03T09:04:34Z",updatedAt:"2019-04-03T09:04:34Z",lastPublishedAt:"2019-04-03T09:04:34Z"},{id:"b7f8",name:"Sabaton - Swedish Pagans",description:"Nice song by Sabaton. Mapped Expert+, Expert, Hard.\n\nGenre: Power metal\nBPM: 135\nNPS: 4.41 / 3.63 / 2.78\nExpert+ playthrough: https://youtu.be/Yx3WPwvZ8wE\n\nCome root for Sweden in the beat saber world cup! :D\n\nSpecial thanks to SatanClaus for playtesting\n\nFeedback/complaints/anything: Wyxi#5211 on discord.\n\n\n",uploader:{id:1207,name:"wyxi",uniqueSet:!0,hash:"5d0abf96b8c469000699075f",avatar:"https://www.gravatar.com/avatar/5d0abf96b8c469000699075f?d=retro",type:"SIMPLE"},metadata:{bpm:135,duration:246,songName:"Swedish Pagans",songSubName:"",songAuthorName:"Sabaton",levelAuthorName:"Wyxi"},stats:{plays:0,downloads:1342,upvotes:572,downvotes:6,score:.9175},uploaded:"2020-06-30T14:44:54.069Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"6e0fb56882443e1fc41c79dde364d4456828b328",key:"b7f8",state:"Published",createdAt:"2020-06-30T14:44:54.069Z",sageScore:4,diffs:[{njs:13,offset:.5,notes:685,bombs:0,obstacles:4,nps:2.97,length:519,characteristic:"Standard",difficulty:"Hard",events:2174,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:230.667,paritySummary:{errors:15,warns:17,resets:0}},{njs:16,offset:0,notes:894,bombs:0,obstacles:4,nps:3.876,length:519,characteristic:"Standard",difficulty:"Expert",events:2174,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:230.667,paritySummary:{errors:0,warns:0,resets:0}},{njs:17,offset:-.25,notes:1086,bombs:0,obstacles:4,nps:4.708,length:519,characteristic:"Standard",difficulty:"ExpertPlus",events:2174,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:230.667,paritySummary:{errors:0,warns:0,resets:0}}],downloadURL:"https://cdn.beatsaver.com/6e0fb56882443e1fc41c79dde364d4456828b328.zip",coverURL:"https://cdn.beatsaver.com/6e0fb56882443e1fc41c79dde364d4456828b328.jpg",previewURL:"https://cdn.beatsaver.com/6e0fb56882443e1fc41c79dde364d4456828b328.mp3"}],createdAt:"2020-06-30T14:44:54.069Z",updatedAt:"2020-06-30T14:44:54.069Z",lastPublishedAt:"2020-06-30T14:44:54.069Z"},{id:"6713",name:"A Bloody Beginning",description:"Get down with some Castlevania vibes with the first Halloween themed map to be released 1 day before October!\r\n\r\nLots of trial and edits have been done to make this map as perfect as possible for release! So we all hope you enjoy the Walls and the Lighting alongside the notes!\r\n\r\nCredits for such wonderful creations:\r\n\r\nYume - New Wall Mapper that's been sweeping the scene!\r\n\r\nKnowledge - A heavy hitting experienced light mapper\r\n\r\n219278 - Yeah i have no idea why their name is like this but they helped light the map so it doesn't matter!",uploader:{id:4289111,name:"blackblazon",uniqueSet:!0,hash:"5cff0b7398cc5a672c84ef34",avatar:"https://cdn.beatsaver.com/avatar/127162370538733568.png",type:"DISCORD"},metadata:{bpm:126,duration:215,songName:"A Bloody Beginning",songSubName:"",songAuthorName:"Nokbient & bLiNd",levelAuthorName:"BlackBlazon"},stats:{plays:0,downloads:1748,upvotes:1023,downvotes:25,score:.9175},uploaded:"2019-09-30T23:49:36.638Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"fc182c48abfc4750046eaed4dd6fe57ac8dd99fc",key:"6713",state:"Published",createdAt:"2019-09-30T23:49:36.638Z",sageScore:5,diffs:[{njs:18,offset:0,notes:959,bombs:0,obstacles:4567,nps:4.658,length:432.313,characteristic:"Standard",difficulty:"ExpertPlus",events:9945,chroma:!1,me:!0,ne:!1,cinema:!1,seconds:205.863,paritySummary:{errors:0,warns:0,resets:0}}],downloadURL:"https://cdn.beatsaver.com/fc182c48abfc4750046eaed4dd6fe57ac8dd99fc.zip",coverURL:"https://cdn.beatsaver.com/fc182c48abfc4750046eaed4dd6fe57ac8dd99fc.jpg",previewURL:"https://cdn.beatsaver.com/fc182c48abfc4750046eaed4dd6fe57ac8dd99fc.mp3"}],createdAt:"2019-09-30T23:49:36.638Z",updatedAt:"2019-09-30T23:49:36.638Z",lastPublishedAt:"2019-09-30T23:49:36.638Z"},{id:"5223",name:"Gloryhammer - Rise Of The Chaos Wizards",description:"I said it once, I'll say it again: Beat Saber needs more Metal \\m/\r\nTherefore - again with *all* difficulties - I present to you:\r\n\r\nExpertPlus-Playthrough: https://vimeo.com/341011795",uploader:{id:40721,name:"dunklerturm",uniqueSet:!0,hash:"5cff0b7398cc5a672c84fd7c",avatar:"https://www.gravatar.com/avatar/5cff0b7398cc5a672c84fd7c?d=retro",type:"SIMPLE"},metadata:{bpm:180,duration:235,songName:"Rise Of The Chaos Wizards",songSubName:"Gloryhammer",songAuthorName:"DunklerTurm",levelAuthorName:"DunklerTurm"},stats:{plays:0,downloads:1469,upvotes:844,downvotes:17,score:.9175},uploaded:"2019-06-07T22:14:16Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"8e46e96da31b6224ae62b6d9eb9434ff93f791da",key:"5223",state:"Published",createdAt:"2019-06-07T22:14:16Z",sageScore:7,diffs:[{njs:12,offset:0,notes:211,bombs:4,obstacles:152,nps:.961,length:659,characteristic:"Standard",difficulty:"Easy",events:2944,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:219.667,paritySummary:{errors:31,warns:8,resets:0}},{njs:12,offset:0,notes:309,bombs:41,obstacles:136,nps:1.373,length:675,characteristic:"Standard",difficulty:"Normal",events:2944,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:225,paritySummary:{errors:59,warns:28,resets:3}},{njs:12,offset:0,notes:545,bombs:32,obstacles:84,nps:2.422,length:675,characteristic:"Standard",difficulty:"Hard",events:2944,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:225,paritySummary:{errors:56,warns:71,resets:0}},{njs:14,offset:0,notes:782,bombs:86,obstacles:84,nps:3.476,length:675,characteristic:"Standard",difficulty:"Expert",events:2944,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:225,paritySummary:{errors:55,warns:54,resets:0}},{njs:18,offset:0,notes:1106,bombs:95,obstacles:84,nps:4.916,length:675,characteristic:"Standard",difficulty:"ExpertPlus",events:5435,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:225,paritySummary:{errors:70,warns:75,resets:1}}],downloadURL:"https://cdn.beatsaver.com/8e46e96da31b6224ae62b6d9eb9434ff93f791da.zip",coverURL:"https://cdn.beatsaver.com/8e46e96da31b6224ae62b6d9eb9434ff93f791da.jpg",previewURL:"https://cdn.beatsaver.com/8e46e96da31b6224ae62b6d9eb9434ff93f791da.mp3"}],createdAt:"2019-06-07T22:14:16Z",updatedAt:"2019-06-07T22:14:16Z",lastPublishedAt:"2019-06-07T22:14:16Z"},{id:"dc68",name:"Fallguys - Survive the fall",description:"f change BPM",uploader:{id:4284894,name:"emir",uniqueSet:!0,hash:"5d3dac6586729100069260cc",avatar:"https://cdn.beatsaver.com/avatar/331480642699395073.png",type:"DISCORD"},metadata:{bpm:165,duration:205,songName:"Fallguys - Survive the fall",songSubName:"",songAuthorName:"Fallguys",levelAuthorName:"Emir"},stats:{plays:0,downloads:1078,upvotes:889,downvotes:19,score:.9174},uploaded:"2020-08-23T10:11:49.857Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"0c9598eefeed825dd9a6d9012d842d473ffb9b38",key:"dc68",state:"Published",createdAt:"2020-08-23T10:11:49.857Z",sageScore:6,diffs:[{njs:12,offset:0,notes:693,bombs:0,obstacles:17,nps:3.458,length:551.192,characteristic:"Standard",difficulty:"Hard",events:1367,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:200.433,paritySummary:{errors:0,warns:0,resets:0}},{njs:15,offset:0,notes:884,bombs:0,obstacles:374,nps:4.41,length:551.192,characteristic:"Standard",difficulty:"Expert",events:1367,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:200.433,paritySummary:{errors:0,warns:0,resets:0}},{njs:18,offset:-.3,notes:1175,bombs:24,obstacles:10,nps:5.862,length:551.192,characteristic:"Standard",difficulty:"ExpertPlus",events:1367,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:200.433,paritySummary:{errors:0,warns:0,resets:12}}],downloadURL:"https://cdn.beatsaver.com/0c9598eefeed825dd9a6d9012d842d473ffb9b38.zip",coverURL:"https://cdn.beatsaver.com/0c9598eefeed825dd9a6d9012d842d473ffb9b38.jpg",previewURL:"https://cdn.beatsaver.com/0c9598eefeed825dd9a6d9012d842d473ffb9b38.mp3"}],createdAt:"2020-08-23T10:11:49.857Z",updatedAt:"2020-08-23T10:11:49.857Z",lastPublishedAt:"2020-08-23T10:11:49.857Z"},{id:"b7b1",name:"No Rain - Blind Melon",description:"I still think of this song as recent, even though - wait for it - it's 28 years old this year. It's Blind Melon's 1992 hit, No Rain! I love the jazzy beat and dramatic moments in this song!\n\nNormal, Hard, Expert, ExpertPlus 360 and Expert 90 as well.\n\nBig thanks to my playtesters, MajorPickle, Maybeemae, and Brentastic! Couldn't do it without you guys - well, I could, just not as well!\n\n\nhttps://youtu.be/ZuLsxtvooCM",uploader:{id:78593,name:"techbutterfly",uniqueSet:!0,hash:"5cff0b7798cc5a672c8566f7",avatar:"https://cdn.beatsaver.com/avatar/527111497617506304.png",type:"DISCORD"},metadata:{bpm:149,duration:216,songName:"No Rain",songSubName:"",songAuthorName:"Blind Melon",levelAuthorName:"TechButterfly"},stats:{plays:0,downloads:3758,upvotes:624,downvotes:8,score:.9174},uploaded:"2020-06-29T19:22:10.964Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"c222e31735f0c61b7781c8f41864b8033e054d40",key:"b7b1",state:"Published",createdAt:"2020-06-29T19:22:10.964Z",sageScore:3,diffs:[{njs:10,offset:-.5,notes:333,bombs:0,obstacles:32,nps:1.613,length:511,characteristic:"Standard",difficulty:"Normal",events:529,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:205.772,paritySummary:{errors:31,warns:41,resets:0}},{njs:13,offset:.3,notes:601,bombs:0,obstacles:32,nps:2.905,length:512,characteristic:"Standard",difficulty:"Hard",events:529,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:206.175,paritySummary:{errors:19,warns:34,resets:0}},{njs:14,offset:.2,notes:704,bombs:0,obstacles:32,nps:3.403,length:512,characteristic:"Standard",difficulty:"Expert",events:529,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:206.175,paritySummary:{errors:40,warns:37,resets:0}},{njs:13,offset:.3,notes:601,bombs:0,obstacles:30,nps:2.905,length:512.001,characteristic:"90Degree",difficulty:"Expert",events:689,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:206.175,paritySummary:{errors:19,warns:34,resets:0}},{njs:13,offset:.3,notes:704,bombs:0,obstacles:32,nps:3.403,length:512.001,characteristic:"360Degree",difficulty:"ExpertPlus",events:708,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:206.175,paritySummary:{errors:40,warns:37,resets:0}}],downloadURL:"https://cdn.beatsaver.com/c222e31735f0c61b7781c8f41864b8033e054d40.zip",coverURL:"https://cdn.beatsaver.com/c222e31735f0c61b7781c8f41864b8033e054d40.jpg",previewURL:"https://cdn.beatsaver.com/c222e31735f0c61b7781c8f41864b8033e054d40.mp3"}],createdAt:"2020-06-29T19:22:10.964Z",updatedAt:"2020-06-29T19:22:10.964Z",lastPublishedAt:"2020-06-29T19:22:10.964Z"},{id:"3c10",name:"Sword Art Online Opening Compilation",description:'So what do you do when you\'ve mapped every single SAO opening? You make a compilation of them of course! I originally wanted to combine the full version of all the songs which would result in a 40+ minute map but since Beat Saver has a size limit I decided to combine the TV edit versions of them instead.\r\n\r\nSongs are ordered in released date:\r\n\r\n1. "crossing field" by LiSA\r\n2. "INNOCENCE" by Aoi Eir\r\n3. "IGNITE" by Eir Aoi\r\n4. "courage" by Haruka Tomatsu \r\n5. "Catch the Moment" by LiSA\r\n6. "Thrill, Risk, Heartless" by LiSA\r\n7. "Ryuusei" by Aoi EiR\r\n8. "ADAMAS" by LiSA\r\n9. "RESISTER" by ASCA\r\n\r\nWhile most of the patterns are recycled from my own maps, I did remap/resync some of the older ones so they are on the same quality as my newer maps.\r\n\r\nMostly expert level but has some streams and technical sections which combined with the song\'s length I decided to put this as expert plus just to be safe.',uploader:{id:58338,name:"Joetastic",uniqueSet:!0,hash:"5cff0b7498cc5a672c85050e",avatar:"https://cdn.beatsaver.com/avatar/227767566402191360.png",type:"DISCORD"},metadata:{bpm:120,duration:841,songName:"Sword Art Online Opening Compilation",songSubName:"Various Artists",songAuthorName:"Joetastic",levelAuthorName:"Joetastic"},stats:{plays:0,downloads:4936,upvotes:1986,downvotes:74,score:.9174},uploaded:"2019-03-06T11:49:32Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"e7ff277fbad063337af1e18bb273b0eb6fc03557",key:"3c10",state:"Published",createdAt:"2019-03-06T11:49:32Z",sageScore:1,diffs:[{njs:15,offset:0,notes:3814,bombs:44,obstacles:37,nps:4.553,length:1675.338,characteristic:"Standard",difficulty:"ExpertPlus",events:3960,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:837.669,paritySummary:{errors:327,warns:301,resets:0}}],downloadURL:"https://cdn.beatsaver.com/e7ff277fbad063337af1e18bb273b0eb6fc03557.zip",coverURL:"https://cdn.beatsaver.com/e7ff277fbad063337af1e18bb273b0eb6fc03557.jpg",previewURL:"https://cdn.beatsaver.com/e7ff277fbad063337af1e18bb273b0eb6fc03557.mp3"}],createdAt:"2019-03-06T11:49:32Z",updatedAt:"2019-03-06T11:49:32Z",lastPublishedAt:"2019-03-06T11:49:32Z"},{id:"34a5",name:"Check Yes, Juliet - We The Kings",description:"Run Baby Run! Check Yes, Juliet by We The Kings, song is brought from Itunes so it's the highest quality sound file you can get.",uploader:{id:58338,name:"Joetastic",uniqueSet:!0,hash:"5cff0b7498cc5a672c85050e",avatar:"https://cdn.beatsaver.com/avatar/227767566402191360.png",type:"DISCORD"},metadata:{bpm:167,duration:217,songName:"Check Yes, Juliet",songSubName:"We The Kings",songAuthorName:"Joetastic",levelAuthorName:"Joetastic"},stats:{plays:0,downloads:1453,upvotes:597,downvotes:7,score:.9174},uploaded:"2019-02-09T08:16:38Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"a6fff4353d6c0657fb6a3de381dd48458c563dcf",key:"34a5",state:"Published",createdAt:"2019-02-09T08:16:38Z",sageScore:6,diffs:[{njs:15,offset:0,notes:905,bombs:0,obstacles:0,nps:4.443,length:566.959,characteristic:"Standard",difficulty:"Expert",events:3427,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:203.698,paritySummary:{errors:61,warns:71,resets:0}}],downloadURL:"https://cdn.beatsaver.com/a6fff4353d6c0657fb6a3de381dd48458c563dcf.zip",coverURL:"https://cdn.beatsaver.com/a6fff4353d6c0657fb6a3de381dd48458c563dcf.jpg",previewURL:"https://cdn.beatsaver.com/a6fff4353d6c0657fb6a3de381dd48458c563dcf.mp3"}],createdAt:"2019-02-09T08:16:38Z",updatedAt:"2019-02-09T08:16:38Z",lastPublishedAt:"2019-02-09T08:16:38Z"},{id:"78e",name:"Numb - Linkin Park",description:"Expert - Hard - Normal Charts\nCustom Lighting\n\nhttps://twitter.com/TheDownyCat\nhttps://www.twitch.tv/downycat\nhttps://streamlabs.com/downycat/tip",uploader:{id:4285982,name:"downycat",uniqueSet:!0,hash:"5cff0b7398cc5a672c84ede5",avatar:"https://cdn.beatsaver.com/avatar/173538829888782336.png",type:"DISCORD"},metadata:{bpm:110,duration:188,songName:"Numb",songSubName:"Linkin Park",songAuthorName:"DownyCat",levelAuthorName:"downycat"},stats:{plays:0,downloads:11541,upvotes:7092,downvotes:389,score:.9174},uploaded:"2018-07-02T13:44:43Z",automapper:!1,ranked:!0,qualified:!1,versions:[{hash:"2e6f858088c6d67e930e1bb357bd7455101b6626",key:"78e",state:"Published",createdAt:"2018-07-02T13:44:43Z",sageScore:6,diffs:[{njs:10,offset:0,notes:367,bombs:0,obstacles:39,nps:2.049,length:328.5,characteristic:"Standard",difficulty:"Normal",events:1134,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:179.182,paritySummary:{errors:45,warns:26,resets:0},stars:.93},{njs:10,offset:0,notes:653,bombs:0,obstacles:50,nps:3.602,length:332.499,characteristic:"Standard",difficulty:"Hard",events:1134,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:181.363,paritySummary:{errors:57,warns:43,resets:0},stars:1.86},{njs:10,offset:0,notes:899,bombs:0,obstacles:50,nps:4.958,length:332.5,characteristic:"Standard",difficulty:"Expert",events:1134,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:181.364,paritySummary:{errors:58,warns:58,resets:0},stars:2.59}],downloadURL:"https://cdn.beatsaver.com/2e6f858088c6d67e930e1bb357bd7455101b6626.zip",coverURL:"https://cdn.beatsaver.com/2e6f858088c6d67e930e1bb357bd7455101b6626.jpg",previewURL:"https://cdn.beatsaver.com/2e6f858088c6d67e930e1bb357bd7455101b6626.mp3"}],createdAt:"2018-07-02T13:44:43Z",updatedAt:"2018-07-02T13:44:43Z",lastPublishedAt:"2018-07-02T13:44:43Z"},{id:"13b20",name:"Pika Girl - S3RL",description:'did a slightly more "dancey" style of mapping with this one\n\nMap Preview: https://youtu.be/_lrXOS7a7Cs\n\nDifficulties: \nExpert+(6.53 NPS),\nExpert(4.5 NPS),\nHard(3.7 NPS). \n\nCustom lights, I used lolighter for the chorus, hand lit everything else. \n\nThanks to eZconfirmed and nuggie for playtesting! \n\nAny and all feedback appreciated:\nMeezoNugget#8186\n\nEnjoy! :)\n',uploader:{id:57121,name:"meezonugget",uniqueSet:!0,hash:"5e6b793f7abb0000068073d7",avatar:"https://cdn.beatsaver.com/avatar/146287428875976704.png",type:"DISCORD"},metadata:{bpm:175,duration:226,songName:"Pika Girl",songSubName:"",songAuthorName:"S3RL",levelAuthorName:"MeezoNugget"},stats:{plays:0,downloads:3445,upvotes:1105,downvotes:29,score:.9173},uploaded:"2021-02-07T00:20:32.184Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"a30818f752cce3c87664570826bbf7b12b848a30",key:"13b20",state:"Published",createdAt:"2021-02-07T00:20:32.184Z",sageScore:4,diffs:[{njs:18,offset:.1,notes:837,bombs:0,obstacles:56,nps:3.817,length:639.5,characteristic:"Standard",difficulty:"Hard",events:5273,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:219.257,paritySummary:{errors:0,warns:0,resets:0}},{njs:20,offset:-.1,notes:1021,bombs:0,obstacles:54,nps:4.657,length:639.5,characteristic:"Standard",difficulty:"Expert",events:5273,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:219.257,paritySummary:{errors:0,warns:0,resets:0}},{njs:22,offset:-.3,notes:1482,bombs:7,obstacles:78,nps:6.759,length:639.5,characteristic:"Standard",difficulty:"ExpertPlus",events:5273,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:219.257,paritySummary:{errors:0,warns:0,resets:2}}],downloadURL:"https://cdn.beatsaver.com/a30818f752cce3c87664570826bbf7b12b848a30.zip",coverURL:"https://cdn.beatsaver.com/a30818f752cce3c87664570826bbf7b12b848a30.jpg",previewURL:"https://cdn.beatsaver.com/a30818f752cce3c87664570826bbf7b12b848a30.mp3"}],createdAt:"2021-02-07T00:20:32.184Z",updatedAt:"2021-02-07T00:20:32.184Z",lastPublishedAt:"2021-02-07T00:20:32.184Z"},{id:"7288",name:"Megalovania - Camellia Remix (Kole Edit) [One saber]",description:"I don’t know much about Undertale nor Camellia, but when making this shorter edit of Camellia’s remix of Megalovania by Toby Fox I felt like mapping it, and as with any popular song I’m gonna make it in One Saber instead since there can never be enough One Saber. I also asked Skeelie if he wanted to make some fancy lighting, just like he did for Overkill, and he did! So here it is, Megalovania Remix by Camellia, as One Saber!\n\nChromaLite mod recommended for best lighting effects.\n\nNo map preview video. (Yet?)\n\nLighting (by Skeelie) preview:\nhttps://youtu.be/6b88SRuQaSQ\n\nBPM: 259\nDuration: 4:27\nEasy, Normal, Hard, Expert and Expert+ difficulties:\n\nEasy:\nNPS 1.32, 356 notes, 26 walls, 0 bombs\n\nNormal:\nNPS 1.66, 446 notes, 29 walls, 17 bombs\n\nHard:\nNPS 2.12, 568 notes, 30 walls, 53 bombs\n\nExpert:\nNPS 3.34, 895 notes, 25 walls, 51 bombs\n\nExpert+:\nNPS 4.65, 1247 notes, 20 walls, 48 bombs\n\nThanks to Redmagi and Skeelie for playtesting!\n\nEnjoy!",uploader:{id:4285318,name:"kolezan",uniqueSet:!0,hash:"5cff0b7398cc5a672c84fcbb",avatar:"https://cdn.beatsaver.com/avatar/220513618763055106.png",type:"DISCORD"},metadata:{bpm:242,duration:267,songName:"Megalovania",songSubName:"Remix (Kole Edit)",songAuthorName:"Camellia",levelAuthorName:"Kolezan (Lighting by Skeelie)"},stats:{plays:0,downloads:6279,upvotes:1738,downvotes:61,score:.9173},uploaded:"2019-11-29T07:42:50.058Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"ac6eb8bb6ce09461d164dcfe2ae24606bbdfa967",key:"7288",state:"Published",createdAt:"2019-11-29T07:42:50.058Z",sageScore:6,diffs:[{njs:11,offset:1,notes:356,bombs:0,obstacles:26,nps:1.392,length:1031.5,characteristic:"OneSaber",difficulty:"Easy",events:34390,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:255.744,paritySummary:{errors:37,warns:45,resets:0}},{njs:13,offset:1,notes:446,bombs:17,obstacles:29,nps:1.744,length:1031.5,characteristic:"OneSaber",difficulty:"Normal",events:34390,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:255.744,paritySummary:{errors:42,warns:49,resets:0}},{njs:15,offset:.7,notes:568,bombs:53,obstacles:30,nps:2.221,length:1031.5,characteristic:"OneSaber",difficulty:"Hard",events:34390,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:255.744,paritySummary:{errors:34,warns:75,resets:10}},{njs:18,offset:0,notes:895,bombs:51,obstacles:25,nps:3.5,length:1031.5,characteristic:"OneSaber",difficulty:"Expert",events:34390,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:255.744,paritySummary:{errors:28,warns:84,resets:3}},{njs:20,offset:1.2,notes:1247,bombs:48,obstacles:20,nps:4.857,length:1035.5,characteristic:"OneSaber",difficulty:"ExpertPlus",events:34390,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:256.736,paritySummary:{errors:27,warns:61,resets:5}},{njs:10,offset:0,notes:0,bombs:0,obstacles:0,nps:0,length:0,characteristic:"Lightshow",difficulty:"Easy",events:34390,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:0,paritySummary:{errors:0,warns:0,resets:0}}],downloadURL:"https://cdn.beatsaver.com/ac6eb8bb6ce09461d164dcfe2ae24606bbdfa967.zip",coverURL:"https://cdn.beatsaver.com/ac6eb8bb6ce09461d164dcfe2ae24606bbdfa967.jpg",previewURL:"https://cdn.beatsaver.com/ac6eb8bb6ce09461d164dcfe2ae24606bbdfa967.mp3"}],createdAt:"2019-11-29T07:42:50.058Z",updatedAt:"2019-11-29T07:42:50.058Z",lastPublishedAt:"2019-11-29T07:42:50.058Z"},{id:"709",name:"Weak - AJR",description:"Expert only but not really that hard. My third beat map.",uploader:{id:51936,name:"ryuk845",uniqueSet:!1,hash:"5cff0b7398cc5a672c84f1fe",avatar:"https://www.gravatar.com/avatar/5cff0b7398cc5a672c84f1fe?d=retro",type:"SIMPLE"},metadata:{bpm:124,duration:205,songName:"Weak - AJR",songSubName:"",songAuthorName:"Arcanthia",levelAuthorName:"ryuk845"},stats:{plays:0,downloads:4258,upvotes:1997,downvotes:75,score:.9173},uploaded:"2018-06-29T00:27:10Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"e4e6311258b1caae45341d87470d0c0145ce3910",key:"709",state:"Published",createdAt:"2018-06-29T00:27:10Z",sageScore:4,diffs:[{njs:10,offset:0,notes:540,bombs:0,obstacles:5,nps:2.742,length:407,characteristic:"Standard",difficulty:"Expert",events:471,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:196.935,paritySummary:{errors:101,warns:65,resets:0}}],downloadURL:"https://cdn.beatsaver.com/e4e6311258b1caae45341d87470d0c0145ce3910.zip",coverURL:"https://cdn.beatsaver.com/e4e6311258b1caae45341d87470d0c0145ce3910.jpg",previewURL:"https://cdn.beatsaver.com/e4e6311258b1caae45341d87470d0c0145ce3910.mp3"}],createdAt:"2018-06-29T00:27:10Z",updatedAt:"2018-06-29T00:27:10Z",lastPublishedAt:"2018-06-29T00:27:10Z"},{id:"8266",name:"Domino's Pizza Fresh Hack",description:"I dont know why I made this lol\n\nVideo links:\nhttps://www.youtube.com/watch?v=2-ifY2LPX_0&feature=youtu.be\nhttps://twitter.com/Dont_Shoot_MEE/status/1222536916601577472",uploader:{id:26973,name:"dontshootme",uniqueSet:!0,hash:"5dc4d17566e48d0006f882fc",avatar:"https://www.gravatar.com/avatar/5dc4d17566e48d0006f882fc?d=retro",type:"SIMPLE"},metadata:{bpm:107,duration:112,songName:"Domino's Pizza Fresh Hack",songSubName:"",songAuthorName:"Danny Fresh",levelAuthorName:"Dont-Shoot-ME"},stats:{plays:0,downloads:815,upvotes:882,downvotes:19,score:.9172},uploaded:"2020-01-29T15:07:20.809Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"cb3069aeef3d13478f2ee5321a18e35e673c9691",key:"8266",state:"Published",createdAt:"2020-01-29T15:07:20.809Z",sageScore:1,diffs:[{njs:20,offset:0,notes:759,bombs:72,obstacles:4,nps:6.896,length:196.281,characteristic:"Standard",difficulty:"ExpertPlus",events:1569,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:110.064,paritySummary:{errors:4,warns:0,resets:5}}],downloadURL:"https://cdn.beatsaver.com/cb3069aeef3d13478f2ee5321a18e35e673c9691.zip",coverURL:"https://cdn.beatsaver.com/cb3069aeef3d13478f2ee5321a18e35e673c9691.jpg",previewURL:"https://cdn.beatsaver.com/cb3069aeef3d13478f2ee5321a18e35e673c9691.mp3"}],createdAt:"2020-01-29T15:07:20.809Z",updatedAt:"2020-01-29T15:07:20.809Z",lastPublishedAt:"2020-01-29T15:07:20.809Z"},{id:"653f",name:"Wolf In Sheep's Clothing [Nightcore] - Set It Off",description:"I actually like this song better in Nightcore. Plus it's quite a popular nightcore song on youtube with over 16 million views https://www.youtube.com/watch?v=Jvl2e6X6PA4",uploader:{id:58338,name:"Joetastic",uniqueSet:!0,hash:"5cff0b7498cc5a672c85050e",avatar:"https://cdn.beatsaver.com/avatar/227767566402191360.png",type:"DISCORD"},metadata:{bpm:192.059,duration:163,songName:"Wolf In Sheep's Clothing (Nightcore)",songSubName:"",songAuthorName:"Set It Off",levelAuthorName:"Joetastic"},stats:{plays:0,downloads:1291,upvotes:884,downvotes:19,score:.9172},uploaded:"2019-09-22T18:58:41.682Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"410712794d58df7bc6249fed7fef50cf5e4391d6",key:"653f",state:"Published",createdAt:"2019-09-22T18:58:41.682Z",sageScore:5,diffs:[{njs:19,offset:0,notes:710,bombs:12,obstacles:2,nps:4.474,length:508,characteristic:"Standard",difficulty:"ExpertPlus",events:2207,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:158.701,paritySummary:{errors:45,warns:50,resets:0}}],downloadURL:"https://cdn.beatsaver.com/410712794d58df7bc6249fed7fef50cf5e4391d6.zip",coverURL:"https://cdn.beatsaver.com/410712794d58df7bc6249fed7fef50cf5e4391d6.jpg",previewURL:"https://cdn.beatsaver.com/410712794d58df7bc6249fed7fef50cf5e4391d6.mp3"}],createdAt:"2019-09-22T18:58:41.682Z",updatedAt:"2019-09-22T18:58:41.682Z",lastPublishedAt:"2019-09-22T18:58:41.682Z"},{id:"6078",name:"Youngblood - 5 Seconds of Summer",description:"Just an Expert level.",uploader:{id:30311,name:"bennydabeast",uniqueSet:!0,hash:"5cff0b7298cc5a672c84e98d",avatar:"https://cdn.beatsaver.com/avatar/30311.jpg",type:"SIMPLE"},metadata:{bpm:120,duration:204,songName:"Youngblood",songSubName:"",songAuthorName:"5 Seconds of Summer",levelAuthorName:"BennyDabeast"},stats:{plays:0,downloads:2815,upvotes:991,downvotes:24,score:.9171},uploaded:"2019-08-31T21:49:30.872Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"182e88e0e80450dd02bdcd6ac4924e3cc00d8673",key:"6078",state:"Published",createdAt:"2019-08-31T21:49:30.872Z",sageScore:4,diffs:[{njs:12,offset:1,notes:609,bombs:8,obstacles:41,nps:3.045,length:400,characteristic:"Standard",difficulty:"Hard",events:726,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:200,paritySummary:{errors:86,warns:74,resets:3}},{njs:12,offset:0,notes:614,bombs:8,obstacles:41,nps:3.07,length:400,characteristic:"Standard",difficulty:"Expert",events:726,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:200,paritySummary:{errors:91,warns:74,resets:3}}],downloadURL:"https://cdn.beatsaver.com/182e88e0e80450dd02bdcd6ac4924e3cc00d8673.zip",coverURL:"https://cdn.beatsaver.com/182e88e0e80450dd02bdcd6ac4924e3cc00d8673.jpg",previewURL:"https://cdn.beatsaver.com/182e88e0e80450dd02bdcd6ac4924e3cc00d8673.mp3"}],createdAt:"2019-08-31T21:49:30.872Z",updatedAt:"2019-08-31T21:49:30.872Z",lastPublishedAt:"2019-08-31T21:49:30.872Z"},{id:"318f",name:"Awaken [League of Legends Season 2019 Soundtrack] - Valerie Broussard",description:"Made 4 versions of this map each with a different time signature but I think have I found the one I'm happy with. Awaken featuring Valerie Broussard, the soundtrack for League of Legends' 2019 Season Cinematic. Difficulty is a really easy expert but complex enough to not be put in hard. I brought the song off iTunes so it's the highest quality file you can get ;)",uploader:{id:58338,name:"Joetastic",uniqueSet:!0,hash:"5cff0b7498cc5a672c85050e",avatar:"https://cdn.beatsaver.com/avatar/227767566402191360.png",type:"DISCORD"},metadata:{bpm:160,duration:194,songName:"Awaken",songSubName:"Valerie Broussard",songAuthorName:"Joetastic",levelAuthorName:"Joetastic"},stats:{plays:0,downloads:1940,upvotes:1731,downvotes:61,score:.9171},uploaded:"2019-01-27T08:19:46Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"f2481180576b33bdc23e4f4f1a26eaf4e0e09aec",key:"318f",state:"Published",createdAt:"2019-01-27T08:19:46Z",sageScore:5,diffs:[{njs:15,offset:0,notes:519,bombs:30,obstacles:2,nps:2.836,length:488.09,characteristic:"Standard",difficulty:"Expert",events:872,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:183.034,paritySummary:{errors:40,warns:38,resets:2}}],downloadURL:"https://cdn.beatsaver.com/f2481180576b33bdc23e4f4f1a26eaf4e0e09aec.zip",coverURL:"https://cdn.beatsaver.com/f2481180576b33bdc23e4f4f1a26eaf4e0e09aec.jpg",previewURL:"https://cdn.beatsaver.com/f2481180576b33bdc23e4f4f1a26eaf4e0e09aec.mp3"}],createdAt:"2019-01-27T08:19:46Z",updatedAt:"2019-01-27T08:19:46Z",lastPublishedAt:"2019-01-27T08:19:46Z"},{id:"248e",name:"Dance, Dance - Fall Out Boy",description:"114.5 BPM / 3:01 Runtime\r\nEasy / 233 Notes\r\nNormal / 370 Notes\r\nHard / 495 Notes\r\nExpert / 726 Notes\r\n\r\nGameplay:\r\nhttps://youtu.be/fyj_fjaGpd8\r\nSong:\r\nhttps://www.youtube.com/watch?v=C6MOKXm8x50",uploader:{id:4284981,name:"skylerwallace",uniqueSet:!0,hash:"5cff0b7298cc5a672c84ea67",avatar:"https://cdn.beatsaver.com/avatar/398344856868487168.png",type:"DISCORD"},metadata:{bpm:114,duration:182,songName:"Dance, Dance",songSubName:"Fall Out Boy",songAuthorName:"Skyler Wallace",levelAuthorName:"skylerwallace"},stats:{plays:0,downloads:5632,upvotes:2351,downvotes:95,score:.9171},uploaded:"2018-12-08T06:20:28Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"142d2cc083037d25dce744ef747eb3eb0f30ab72",key:"248e",state:"Published",createdAt:"2018-12-08T06:20:28Z",sageScore:5,diffs:[{njs:10,offset:0,notes:233,bombs:2,obstacles:15,nps:1.312,length:339,characteristic:"Standard",difficulty:"Easy",events:0,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:178.421,paritySummary:{errors:49,warns:18,resets:2}},{njs:10,offset:0,notes:370,bombs:8,obstacles:19,nps:2.083,length:339,characteristic:"Standard",difficulty:"Normal",events:3172,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:178.421,paritySummary:{errors:58,warns:16,resets:0}},{njs:10,offset:0,notes:495,bombs:0,obstacles:8,nps:2.787,length:339,characteristic:"Standard",difficulty:"Hard",events:3172,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:178.421,paritySummary:{errors:57,warns:32,resets:0}},{njs:12,offset:0,notes:726,bombs:34,obstacles:0,nps:4.087,length:339,characteristic:"Standard",difficulty:"Expert",events:3180,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:178.421,paritySummary:{errors:40,warns:27,resets:4}}],downloadURL:"https://cdn.beatsaver.com/142d2cc083037d25dce744ef747eb3eb0f30ab72.zip",coverURL:"https://cdn.beatsaver.com/142d2cc083037d25dce744ef747eb3eb0f30ab72.jpg",previewURL:"https://cdn.beatsaver.com/142d2cc083037d25dce744ef747eb3eb0f30ab72.mp3"}],createdAt:"2018-12-08T06:20:28Z",updatedAt:"2018-12-08T06:20:28Z",lastPublishedAt:"2018-12-08T06:20:28Z"},{id:"177e8",name:"{Modchart} Duumu & Slyleaf - Illuminate",description:"## IMPORTANT: This map will most likely be broken if you just hop into it. Please take the time to configure your game properly if you want to see it how it was intended. I know, it's super annoying, but there's nothing I can do about it. There's no better system. Basically if the intro to the map is white for like more than a second, you see the BTS logo, or if your walls look +'s than it's broken.\n\n!! WARNINGS !!\n- Use the newest versions of Chroma and NE (Available on ModAssistant), they'll allow for you to actually use the new environment enhancements. New NE will also SIGNIFICANTLY increase performance. I have not tested if this is playable on previous versions of NE.\n- Use all effects on lights. Remember this is expert not E+ so you need to adjust the \"Environment Effects\" setting. This map is by no means intense, but no flickering wasn't built for chroma and will break the lighting.\n- Turn off shockwave, as there's a bug where it cuts off distortion effects on walls that are under you\n- Turn on bloom, Beat Saber tries to make baked lighting on walls and they break on Noodle walls. You can ignore this if you have the mod that fixes this, although I don't know how the look will change.\n- Please disable NJSFixer, as this completely breaks the walls :(\n\nI've spent equal, if not, MORE time on this than Homesick. This map utilizes the new Chroma environment enhancements. I really went all out with it. I think this map is really unique and there are few, if not NO other maps so far that offer the experience this map gives right now. \n\nThis song means a lot to me. I've had this song added since summer 2019, it came up in my recommended and I fell in love with it. It's such an incredible vibe and it makes me feel super comfy. Duumu or Slyleaf, if you're reading this, you're incredible. I am yet to find any other song that makes me feel like this. I really hope you enjoy seeing what I imagine when listening to it.\n\nEnjoy.\n\nVideo: https://youtu.be/lFL3Gjy15oc",uploader:{id:4284246,name:"swifter1243",uniqueSet:!0,hash:"5dcf3af29eccad0006a0b45f",avatar:"https://cdn.beatsaver.com/avatar/166644275793100801.png",type:"DISCORD"},metadata:{bpm:100,duration:240,songName:"Illuminate",songSubName:"",songAuthorName:"Duumu, Slyleaf",levelAuthorName:"Swifter1243"},stats:{plays:0,downloads:1794,upvotes:900,downvotes:20,score:.917},uploaded:"2021-05-03T15:44:55.957Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"f5f56ebdee279caae376daf1a6a703576aa08bcd",key:"177e8",state:"Published",createdAt:"2021-05-03T15:44:55.957Z",sageScore:3,diffs:[{njs:18,offset:-.4,notes:581,bombs:8,obstacles:0,nps:2.591,length:373.75,characteristic:"Standard",difficulty:"Hard",events:1367,chroma:!0,me:!1,ne:!1,cinema:!1,seconds:224.25,paritySummary:{errors:0,warns:0,resets:3}},{njs:16,offset:1,notes:581,bombs:8,obstacles:8102,nps:2.591,length:373.75,characteristic:"Standard",difficulty:"Expert",events:2183,chroma:!0,me:!1,ne:!0,cinema:!1,seconds:224.25,paritySummary:{errors:0,warns:0,resets:3}}],downloadURL:"https://cdn.beatsaver.com/f5f56ebdee279caae376daf1a6a703576aa08bcd.zip",coverURL:"https://cdn.beatsaver.com/f5f56ebdee279caae376daf1a6a703576aa08bcd.jpg",previewURL:"https://cdn.beatsaver.com/f5f56ebdee279caae376daf1a6a703576aa08bcd.mp3"}],createdAt:"2021-05-03T15:44:55.957Z",updatedAt:"2021-05-03T15:44:55.957Z",lastPublishedAt:"2021-05-03T15:44:55.957Z"},{id:"907f",name:"Alan Walker - Faded",description:"This will likely be my final map.\n\nThanks to the people who played my maps and thanks to the mapping community for the support.\n\nadieu.",uploader:{id:31355,name:"wonderfulsnowball",uniqueSet:!0,hash:"5d5be38aa959f6000650d725",avatar:"https://www.gravatar.com/avatar/5d5be38aa959f6000650d725?d=retro",type:"SIMPLE"},metadata:{bpm:90,duration:113,songName:"Faded",songSubName:"(Short Ver.)",songAuthorName:"Alan Walker",levelAuthorName:"WonderfulSnowball"},stats:{plays:0,downloads:6805,upvotes:2077,downvotes:80,score:.917},uploaded:"2020-03-15T23:33:05.468Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"72808dcf1d5e2f3b4d08ba98cec32d39d696ba91",key:"907f",state:"Published",createdAt:"2020-03-15T23:33:05.468Z",sageScore:7,diffs:[{njs:12,offset:0,notes:139,bombs:0,obstacles:0,nps:1.313,length:158.75,characteristic:"Standard",difficulty:"Easy",events:3151,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:105.833,paritySummary:{errors:2,warns:2,resets:0}},{njs:12,offset:-.25,notes:212,bombs:0,obstacles:0,nps:2.003,length:158.75,characteristic:"Standard",difficulty:"Normal",events:3151,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:105.833,paritySummary:{errors:2,warns:0,resets:0}},{njs:13,offset:-.5,notes:281,bombs:0,obstacles:2,nps:2.655,length:158.75,characteristic:"Standard",difficulty:"Hard",events:3151,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:105.833,paritySummary:{errors:0,warns:0,resets:0}},{njs:15,offset:.25,notes:347,bombs:0,obstacles:2,nps:3.279,length:158.75,characteristic:"Standard",difficulty:"Expert",events:3151,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:105.833,paritySummary:{errors:0,warns:0,resets:0}},{njs:18,offset:.25,notes:367,bombs:0,obstacles:3,nps:3.468,length:158.75,characteristic:"Standard",difficulty:"ExpertPlus",events:3151,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:105.833,paritySummary:{errors:0,warns:0,resets:0}}],downloadURL:"https://cdn.beatsaver.com/72808dcf1d5e2f3b4d08ba98cec32d39d696ba91.zip",coverURL:"https://cdn.beatsaver.com/72808dcf1d5e2f3b4d08ba98cec32d39d696ba91.jpg",previewURL:"https://cdn.beatsaver.com/72808dcf1d5e2f3b4d08ba98cec32d39d696ba91.mp3"}],createdAt:"2020-03-15T23:33:05.468Z",updatedAt:"2020-03-15T23:33:05.468Z",lastPublishedAt:"2020-03-15T23:33:05.468Z"},{id:"6666",name:"Mick Gordon - Cyberdemon",description:"Rip and tear\r\n\r\nVideo: https://www.youtube.com/watch?v=pcqmDzUobEc",uploader:{id:4235138,name:"CyanSnow",uniqueSet:!0,hash:"5cff0b7698cc5a672c8543ac",avatar:"https://cdn.beatsaver.com/avatar/154341137694326784.png",type:"DISCORD"},metadata:{bpm:179.921,duration:224,songName:"Cyberdemon",songSubName:"",songAuthorName:"Mick Gordon",levelAuthorName:"CyanSnow"},stats:{plays:0,downloads:5676,upvotes:3668,downvotes:173,score:.917},uploaded:"2019-09-28T15:49:27.681Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"aaaa68fdb4e7ddb5634ee3afd80cb0b5dda2260c",key:"6666",state:"Published",createdAt:"2019-09-28T15:49:27.681Z",sageScore:6,diffs:[{njs:19,offset:.5,notes:1494,bombs:666,obstacles:3666,nps:6.829,length:656,characteristic:"Lawless",difficulty:"ExpertPlus",events:33666,chroma:!1,me:!0,ne:!1,cinema:!1,seconds:218.763,paritySummary:{errors:0,warns:0,resets:0}}],downloadURL:"https://cdn.beatsaver.com/aaaa68fdb4e7ddb5634ee3afd80cb0b5dda2260c.zip",coverURL:"https://cdn.beatsaver.com/aaaa68fdb4e7ddb5634ee3afd80cb0b5dda2260c.jpg",previewURL:"https://cdn.beatsaver.com/aaaa68fdb4e7ddb5634ee3afd80cb0b5dda2260c.mp3"}],createdAt:"2019-09-28T15:49:27.681Z",updatedAt:"2019-09-28T15:49:27.681Z",lastPublishedAt:"2019-09-28T15:49:27.681Z"},{id:"fb0f",name:"Michael Jackson - Thriller (James Egbert Dubstep Remix)",description:"Yet another great and dancy Dubstep mix of an MJ song.\nYou can follow me on twitch for more awesomeness at https://www.twitch.tv/pkdan\nVideo preview of the map: https://www.youtube.com/watch?v=ZuHcfSSPtig\n\nLength: 3:15\nNotes: 668 (Expert) / 991 (Expert+)\nNJS: 16 (Expert) / 20 (Expert+)\nBPM: 128",uploader:{id:4284639,name:"pkdan",uniqueSet:!0,hash:"5e6d07927abb00000681e8ee",avatar:"https://cdn.beatsaver.com/avatar/315553265091739650.png",type:"DISCORD"},metadata:{bpm:128,duration:195,songName:"Thriller (James Egbert Dubstep Remix)",songSubName:"",songAuthorName:"Michael Jackson",levelAuthorName:"pkdan"},stats:{plays:0,downloads:6967,upvotes:850,downvotes:18,score:.9168},uploaded:"2020-10-07T15:04:12.225Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"5d5df852651bb568012635ff3a356efdd9372b80",key:"fb0f",state:"Published",createdAt:"2020-10-07T15:04:12.225Z",sageScore:4,diffs:[{njs:16,offset:-.2,notes:668,bombs:33,obstacles:8,nps:3.591,length:396.875,characteristic:"Standard",difficulty:"Expert",events:2296,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:186.035,paritySummary:{errors:0,warns:0,resets:0}},{njs:20,offset:.3,notes:991,bombs:33,obstacles:8,nps:5.327,length:396.875,characteristic:"Standard",difficulty:"ExpertPlus",events:2296,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:186.035,paritySummary:{errors:0,warns:0,resets:0}}],downloadURL:"https://cdn.beatsaver.com/5d5df852651bb568012635ff3a356efdd9372b80.zip",coverURL:"https://cdn.beatsaver.com/5d5df852651bb568012635ff3a356efdd9372b80.jpg",previewURL:"https://cdn.beatsaver.com/5d5df852651bb568012635ff3a356efdd9372b80.mp3"}],createdAt:"2020-10-07T15:04:12.225Z",updatedAt:"2020-10-07T15:04:12.225Z",lastPublishedAt:"2020-10-07T15:04:12.225Z"},{id:"ed2a",name:"NULCTRL (Meiso FLIP)",description:"POTENTIAL SEIZURE WARNING\n\nANTI-QUEST REUPLOAD\n\nIT IS HIGHLY RECCOMENDED TO PLAY WITH THE FOLLOWING ADVANCED GRAPHICS SETTINGS SET AS SUCH\n-BLOOM ON\n-DISTORTION ON\n-0 MAX SHOCKWAVE PARTICLES\n\nVideo: https://youtu.be/xGICwOKNa9Y\n\nSpecial thanks to https://i.imgur.com/VbKV9AX.jpg for feedback to make sure things weɹe actually good.\n\n",uploader:{id:4235136,name:"reaxt",uniqueSet:!0,hash:"5cff0b7298cc5a672c84e8ab",avatar:"https://cdn.beatsaver.com/avatar/163052863038291970.png",type:"DISCORD"},metadata:{bpm:200,duration:215,songName:"NULCTRL MEISO FLIP",songSubName:"",songAuthorName:"Meiso",levelAuthorName:"Reaxt"},stats:{plays:0,downloads:1769,upvotes:1941,downvotes:73,score:.9168},uploaded:"2020-09-17T21:26:11.811Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"89b1de26baad93c63a6bdb3d9dbae7dc4972897b",key:"ed2a",state:"Published",createdAt:"2020-09-17T21:26:11.811Z",sageScore:3,diffs:[{njs:19,offset:.37,notes:2984,bombs:0,obstacles:1570,nps:14.22,length:699.5,characteristic:"Lawless",difficulty:"ExpertPlus",events:3557,chroma:!0,me:!1,ne:!0,cinema:!1,seconds:209.85,paritySummary:{errors:0,warns:0,resets:0}}],downloadURL:"https://cdn.beatsaver.com/89b1de26baad93c63a6bdb3d9dbae7dc4972897b.zip",coverURL:"https://cdn.beatsaver.com/89b1de26baad93c63a6bdb3d9dbae7dc4972897b.jpg",previewURL:"https://cdn.beatsaver.com/89b1de26baad93c63a6bdb3d9dbae7dc4972897b.mp3"}],createdAt:"2020-09-17T21:26:11.811Z",updatedAt:"2020-09-17T21:26:11.811Z",lastPublishedAt:"2020-09-17T21:26:11.811Z"},{id:"658e",name:"Take Back the Night - CaptainSparklez ft. TryHardNinja",description:"Take Back the Night, Written and Performed by TryHardNinja, Original Animation Produced and Directed by CaptainSparklez.\n\nCheck out the gameplay video here! https://www.youtube.com/watch?v=47Fnh08AEy4",uploader:{id:58338,name:"Joetastic",uniqueSet:!0,hash:"5cff0b7498cc5a672c85050e",avatar:"https://cdn.beatsaver.com/avatar/227767566402191360.png",type:"DISCORD"},metadata:{bpm:126,duration:317,songName:"Take Back the Night",songSubName:"",songAuthorName:"CaptainSparklez ft. TryHardNinja",levelAuthorName:"Joetastic"},stats:{plays:0,downloads:1693,upvotes:611,downvotes:8,score:.9168},uploaded:"2019-09-24T02:56:43.768Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"0361c056cd4247d639eda648bf21e4eae4454f3e",key:"658e",state:"Published",createdAt:"2019-09-24T02:56:43.768Z",sageScore:6,diffs:[{njs:12,offset:0,notes:652,bombs:0,obstacles:62,nps:2.126,length:644,characteristic:"Standard",difficulty:"Hard",events:4659,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:306.667,paritySummary:{errors:56,warns:49,resets:0}},{njs:14,offset:0,notes:923,bombs:0,obstacles:85,nps:3.01,length:644,characteristic:"Standard",difficulty:"Expert",events:4659,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:306.667,paritySummary:{errors:52,warns:29,resets:0}},{njs:16,offset:0,notes:1051,bombs:0,obstacles:87,nps:3.427,length:644,characteristic:"Standard",difficulty:"ExpertPlus",events:4669,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:306.667,paritySummary:{errors:45,warns:43,resets:0}}],downloadURL:"https://cdn.beatsaver.com/0361c056cd4247d639eda648bf21e4eae4454f3e.zip",coverURL:"https://cdn.beatsaver.com/0361c056cd4247d639eda648bf21e4eae4454f3e.jpg",previewURL:"https://cdn.beatsaver.com/0361c056cd4247d639eda648bf21e4eae4454f3e.mp3"}],createdAt:"2019-09-24T02:56:43.768Z",updatedAt:"2019-09-24T02:56:43.768Z",lastPublishedAt:"2019-09-24T02:56:43.768Z"},{id:"64c9",name:"You Don't Want Me (Crystal Skies Remix)",description:"My first wall map! On top of having walls, it also has Chroma lights!\n\nYou have a few options for playing, you can view the lightshow with or without walls, and you can play the map with or without walls. \n\nHere's a video of the walls and the lights :D https://www.youtube.com/watch?v=DkRDF8bbNjQ\n\nI did the whole map myself, but of course, I had some help from the lovely people on the BSMG. Thanks Kival Evan, Dni0, JENNAexe, Aeroluna and necrospook_ for the testplays! And also, another thanks to Aeroluna for helping me fix any bugs with the metadata for my map :)\n\nPS.: Beatcore, one of the song's artists, also released a new EP today that is really good! He's super unknown so go check it out on YouTube and Spotify if you get a chance. He's really talented :D\n\nYou Don't Want Me (Crystal Skies Remix) - Beatcore, Ashley Apollodor | 130 BPM | Expert+ Only (With and without walls) along with Lightshow and Lightshow/Wallshow | Fully mapped with custom lights and walls\n\n<3\n\n",uploader:{id:17131,name:"tranquillizeme",uniqueSet:!0,hash:"5cff0b7798cc5a672c85609e",avatar:"https://www.gravatar.com/avatar/5cff0b7798cc5a672c85609e?d=retro",type:"SIMPLE"},metadata:{bpm:130,duration:233,songName:"You Don't Want Me",songSubName:"Crystal Skies Remix",songAuthorName:"Beatcore, Ashley Apollodor, Crystal Skies",levelAuthorName:"TranquillizeMe"},stats:{plays:0,downloads:1743,upvotes:851,downvotes:18,score:.9168},uploaded:"2019-09-20T22:30:43.842Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"fbf6f4775ff824facf83ad4a27f48d220466f21e",key:"64c9",state:"Published",createdAt:"2019-09-20T22:30:43.842Z",sageScore:8,diffs:[{njs:18,offset:0,notes:782,bombs:22,obstacles:0,nps:3.597,length:471,characteristic:"Standard",difficulty:"Expert",events:16275,chroma:!1,me:!0,ne:!1,cinema:!1,seconds:217.385,paritySummary:{errors:0,warns:0,resets:0}},{njs:18,offset:0,notes:782,bombs:22,obstacles:5003,nps:3.597,length:471,characteristic:"Standard",difficulty:"ExpertPlus",events:16275,chroma:!1,me:!0,ne:!1,cinema:!1,seconds:217.385,paritySummary:{errors:0,warns:0,resets:0}},{njs:18,offset:0,notes:0,bombs:0,obstacles:0,nps:0,length:0,characteristic:"Lightshow",difficulty:"Easy",events:16275,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:0,paritySummary:{errors:0,warns:0,resets:0}},{njs:18,offset:0,notes:0,bombs:0,obstacles:5003,nps:0,length:0,characteristic:"Lightshow",difficulty:"Normal",events:16275,chroma:!1,me:!0,ne:!1,cinema:!1,seconds:0,paritySummary:{errors:0,warns:0,resets:0}}],downloadURL:"https://cdn.beatsaver.com/fbf6f4775ff824facf83ad4a27f48d220466f21e.zip",coverURL:"https://cdn.beatsaver.com/fbf6f4775ff824facf83ad4a27f48d220466f21e.jpg",previewURL:"https://cdn.beatsaver.com/fbf6f4775ff824facf83ad4a27f48d220466f21e.mp3"}],createdAt:"2019-09-20T22:30:43.842Z",updatedAt:"2019-09-20T22:30:43.842Z",lastPublishedAt:"2019-09-20T22:30:43.842Z"},{id:"431c",name:"Shine (RWBY: Volume 2 Soundtrack) - Jeff Williams ft. Casey Lee Williams",description:'"Shine" is a single that was featured prominently in the episode: "Dance Dance Infiltration", where Team JNPR performed a synchronized dance routine to the song.',uploader:{id:58338,name:"Joetastic",uniqueSet:!0,hash:"5cff0b7498cc5a672c85050e",avatar:"https://cdn.beatsaver.com/avatar/227767566402191360.png",type:"DISCORD"},metadata:{bpm:122,duration:260,songName:"Shine",songSubName:"Jeff Williams ft. Casey Lee Williams",songAuthorName:"Joetastic",levelAuthorName:"Joetastic"},stats:{plays:0,downloads:2411,upvotes:661,downvotes:10,score:.9168},uploaded:"2019-04-03T08:52:47Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"f95bfca25401b117bd9bec202c741bd75f44141b",key:"431c",state:"Published",createdAt:"2019-04-03T08:52:47Z",sageScore:6,diffs:[{njs:14,offset:0,notes:969,bombs:0,obstacles:7,nps:3.818,length:516,characteristic:"Standard",difficulty:"Expert",events:1070,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:253.77,paritySummary:{errors:28,warns:33,resets:0}}],downloadURL:"https://cdn.beatsaver.com/f95bfca25401b117bd9bec202c741bd75f44141b.zip",coverURL:"https://cdn.beatsaver.com/f95bfca25401b117bd9bec202c741bd75f44141b.jpg",previewURL:"https://cdn.beatsaver.com/f95bfca25401b117bd9bec202c741bd75f44141b.mp3"}],createdAt:"2019-04-03T08:52:47Z",updatedAt:"2019-04-03T08:52:47Z",lastPublishedAt:"2019-04-03T08:52:47Z"},{id:"3436",name:"Christopher Tin - Baba Yetu",description:"This song was recommended to me. Baba Yetu is theme song Civilization IV.",uploader:{id:4285018,name:"majorpickle",uniqueSet:!0,hash:"5cff0b7398cc5a672c84f792",avatar:"https://cdn.beatsaver.com/avatar/450358937657671680.png",type:"DISCORD"},metadata:{bpm:92,duration:210,songName:"Baba Yetu",songSubName:"Christopher Tin",songAuthorName:"Majorpickle",levelAuthorName:"majorpickle"},stats:{plays:0,downloads:2763,upvotes:1090,downvotes:29,score:.9168},uploaded:"2019-02-07T03:44:18Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"60c7f5c08d38ad3664ad42874b874675a03da14a",key:"3436",state:"Published",createdAt:"2019-02-07T03:44:18Z",sageScore:4,diffs:[{njs:10,offset:0,notes:681,bombs:0,obstacles:86,nps:3.638,length:287,characteristic:"Standard",difficulty:"Expert",events:535,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:187.174,paritySummary:{errors:33,warns:19,resets:0}}],downloadURL:"https://cdn.beatsaver.com/60c7f5c08d38ad3664ad42874b874675a03da14a.zip",coverURL:"https://cdn.beatsaver.com/60c7f5c08d38ad3664ad42874b874675a03da14a.jpg",previewURL:"https://cdn.beatsaver.com/60c7f5c08d38ad3664ad42874b874675a03da14a.mp3"}],createdAt:"2019-02-07T03:44:18Z",updatedAt:"2019-02-07T03:44:18Z",lastPublishedAt:"2019-02-07T03:44:18Z"},{id:"2c5d",name:"Stay Frosty Royal Milk Tea - Fall Out Boy",description:"Expert Playthrough : https://youtu.be/mzmD9PYtW3I",uploader:{id:13320,name:"novashaft",uniqueSet:!0,hash:"5cff0b7398cc5a672c84ee55",avatar:"https://www.gravatar.com/avatar/5cff0b7398cc5a672c84ee55?d=retro",type:"SIMPLE"},metadata:{bpm:146,duration:174,songName:"Stay Frosty Royal Milk Tea",songSubName:"Fall Out Boy",songAuthorName:"NovaShaft",levelAuthorName:"novashaft"},stats:{plays:0,downloads:1134,upvotes:447,downvotes:2,score:.9168},uploaded:"2019-01-09T20:30:52Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"c5b540769ac513b9ebf2f59f465823a9b73f6032",key:"2c5d",state:"Published",createdAt:"2019-01-09T20:30:52Z",sageScore:5,diffs:[{njs:10,offset:0,notes:296,bombs:6,obstacles:13,nps:1.801,length:400,characteristic:"Standard",difficulty:"Normal",events:855,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:164.384,paritySummary:{errors:38,warns:22,resets:0}},{njs:11,offset:0,notes:401,bombs:6,obstacles:13,nps:2.439,length:400,characteristic:"Standard",difficulty:"Hard",events:855,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:164.384,paritySummary:{errors:43,warns:31,resets:0}},{njs:13,offset:0,notes:512,bombs:8,obstacles:13,nps:3.115,length:400,characteristic:"Standard",difficulty:"Expert",events:855,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:164.384,paritySummary:{errors:46,warns:75,resets:0}}],downloadURL:"https://cdn.beatsaver.com/c5b540769ac513b9ebf2f59f465823a9b73f6032.zip",coverURL:"https://cdn.beatsaver.com/c5b540769ac513b9ebf2f59f465823a9b73f6032.jpg",previewURL:"https://cdn.beatsaver.com/c5b540769ac513b9ebf2f59f465823a9b73f6032.mp3"}],createdAt:"2019-01-09T20:30:52Z",updatedAt:"2019-01-09T20:30:52Z",lastPublishedAt:"2019-01-09T20:30:52Z"},{id:"446",name:"Simple and Clean - PLANITb Remix - Kingdom Hearts",description:"Normal / Hard / Expert\r\nLight show\r\n\r\nhttps://youtu.be/rYrIFjxeY0k",uploader:{id:52578,name:"xroninbladex",uniqueSet:!0,hash:"5cff0b7298cc5a672c84ea58",avatar:"https://www.gravatar.com/avatar/5cff0b7298cc5a672c84ea58?d=retro",type:"SIMPLE"},metadata:{bpm:130,duration:131,songName:"Simple and Clean",songSubName:"-PLANITb Remix-",songAuthorName:"xroninbladex",levelAuthorName:"xroninbladex"},stats:{plays:0,downloads:2370,upvotes:1567,downvotes:53,score:.9168},uploaded:"2018-06-08T14:55:59Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"8390e3f33ef12a395602c4ae12df9250a730a629",key:"446",state:"Published",createdAt:"2018-06-08T14:55:59Z",sageScore:5,diffs:[{njs:10,offset:0,notes:198,bombs:2,obstacles:1,nps:1.89,length:227,characteristic:"Standard",difficulty:"Normal",events:525,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:104.769,paritySummary:{errors:11,warns:28,resets:0}},{njs:10,offset:0,notes:310,bombs:2,obstacles:1,nps:2.959,length:227,characteristic:"Standard",difficulty:"Hard",events:525,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:104.769,paritySummary:{errors:33,warns:74,resets:0}},{njs:10,offset:0,notes:376,bombs:2,obstacles:1,nps:3.589,length:227,characteristic:"Standard",difficulty:"Expert",events:525,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:104.769,paritySummary:{errors:49,warns:56,resets:0}}],downloadURL:"https://cdn.beatsaver.com/8390e3f33ef12a395602c4ae12df9250a730a629.zip",coverURL:"https://cdn.beatsaver.com/8390e3f33ef12a395602c4ae12df9250a730a629.jpg",previewURL:"https://cdn.beatsaver.com/8390e3f33ef12a395602c4ae12df9250a730a629.mp3"}],createdAt:"2018-06-08T14:55:59Z",updatedAt:"2018-06-08T14:55:59Z",lastPublishedAt:"2018-06-08T14:55:59Z"},{id:"41b",name:"30 Seconds to Mars | Dangerous Night",description:"Normal/Hard/Expert\r\nExpert map is not that tough. Its a fairly slower song that flows nicely.",uploader:{id:41378,name:"greatyazer",uniqueSet:!0,hash:"5cff0b7298cc5a672c84ea71",avatar:"https://www.gravatar.com/avatar/5cff0b7298cc5a672c84ea71?d=retro",type:"SIMPLE"},metadata:{bpm:132,duration:200,songName:"Dangerous Night",songSubName:"30 Seconds to Mars",songAuthorName:"GreatYazer",levelAuthorName:"greatyazer"},stats:{plays:0,downloads:9071,upvotes:2404,downvotes:99,score:.9168},uploaded:"2018-06-07T17:49:47Z",automapper:!1,ranked:!0,qualified:!1,versions:[{hash:"85a675da674fb13e576f2ac9b61a5adc767b060a",key:"41b",state:"Published",createdAt:"2018-06-07T17:49:47Z",sageScore:5,diffs:[{njs:10,offset:0,notes:227,bombs:0,obstacles:53,nps:1.202,length:415.5,characteristic:"Standard",difficulty:"Normal",events:463,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:188.864,paritySummary:{errors:130,warns:10,resets:0},stars:.78},{njs:10,offset:0,notes:365,bombs:0,obstacles:59,nps:1.933,length:415.5,characteristic:"Standard",difficulty:"Hard",events:463,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:188.864,paritySummary:{errors:81,warns:31,resets:0},stars:1.2},{njs:10,offset:0,notes:520,bombs:0,obstacles:60,nps:2.753,length:415.5,characteristic:"Standard",difficulty:"Expert",events:463,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:188.864,paritySummary:{errors:60,warns:53,resets:0},stars:1.7}],downloadURL:"https://cdn.beatsaver.com/85a675da674fb13e576f2ac9b61a5adc767b060a.zip",coverURL:"https://cdn.beatsaver.com/85a675da674fb13e576f2ac9b61a5adc767b060a.jpg",previewURL:"https://cdn.beatsaver.com/85a675da674fb13e576f2ac9b61a5adc767b060a.mp3"}],createdAt:"2018-06-07T17:49:47Z",updatedAt:"2018-06-07T17:49:47Z",lastPublishedAt:"2018-06-07T17:49:47Z"},{id:"4f0f",name:"MOMOLAND - BAAM",description:'Whoot whoot, first map! Please enjoy and have fun!\nExpert+ is named "Alternate Expert" in game and is largely the same as Expert. The differences are at 1:05-1:24, 2:20-2:39, and 2:54-3:09 with Alt Expert being a little more intense and fun in my opinion. Still I found myself playing both Experts interchangeably so think of it as a little experimentation as I continue to learn.\n\nNEW! Expert Preview Video: https://www.youtube.com/watch?v=qA1811Z-uVo\nMirror: https://streamable.com/p634s\n\n1 Year Mapping Anniversary Remaster: https://beatsaver.com/beatmap/aa5c',uploader:{id:71661,name:"bloodcloak",uniqueSet:!0,hash:"5cff0b7698cc5a672c8551d3",avatar:"https://cdn.beatsaver.com/avatar/205707707187986442.png",type:"DISCORD"},metadata:{bpm:127,duration:208,songName:"BAAM",songSubName:"MOMOLAND",songAuthorName:"Bloodcloak",levelAuthorName:"Bloodcloak"},stats:{plays:0,downloads:2222,upvotes:709,downvotes:12,score:.9167},uploaded:"2019-05-26T01:22:06Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"d54ad194fe09598964d1c065887e52f2c4248b30",key:"4f0f",state:"Published",createdAt:"2019-05-26T01:22:06Z",sageScore:5,diffs:[{njs:10,offset:0,notes:576,bombs:0,obstacles:68,nps:2.91,length:419,characteristic:"Standard",difficulty:"Hard",events:1357,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:197.953,paritySummary:{errors:64,warns:46,resets:0}},{njs:12,offset:0,notes:783,bombs:0,obstacles:61,nps:3.955,length:419,characteristic:"Standard",difficulty:"Expert",events:1350,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:197.953,paritySummary:{errors:83,warns:69,resets:0}},{njs:12,offset:0,notes:819,bombs:0,obstacles:67,nps:4.137,length:419,characteristic:"Standard",difficulty:"ExpertPlus",events:1350,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:197.953,paritySummary:{errors:89,warns:52,resets:0}}],downloadURL:"https://cdn.beatsaver.com/d54ad194fe09598964d1c065887e52f2c4248b30.zip",coverURL:"https://cdn.beatsaver.com/d54ad194fe09598964d1c065887e52f2c4248b30.jpg",previewURL:"https://cdn.beatsaver.com/d54ad194fe09598964d1c065887e52f2c4248b30.mp3"}],createdAt:"2019-05-26T01:22:06Z",updatedAt:"2019-05-26T01:22:06Z",lastPublishedAt:"2019-05-26T01:22:06Z"},{id:"3714",name:"To The Stars - Braken (Monstercat Release)",description:"https://www.youtube.com/watch?v=105NIrAR4a4\r\nExpert+ only",uploader:{id:4285982,name:"downycat",uniqueSet:!0,hash:"5cff0b7398cc5a672c84ede5",avatar:"https://cdn.beatsaver.com/avatar/173538829888782336.png",type:"DISCORD"},metadata:{bpm:175,duration:202,songName:"To The Stars",songSubName:"Braken",songAuthorName:"DownyCat",levelAuthorName:"downycat"},stats:{plays:0,downloads:2451,upvotes:958,downvotes:23,score:.9167},uploaded:"2019-02-17T12:03:07Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"58fd2a28e6c3d6862084da1ec1b92c99090c5cd5",key:"3714",state:"Published",createdAt:"2019-02-17T12:03:07Z",sageScore:5,diffs:[{njs:14,offset:0,notes:996,bombs:0,obstacles:33,nps:5.34,length:544,characteristic:"Standard",difficulty:"ExpertPlus",events:2145,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:186.514,paritySummary:{errors:16,warns:23,resets:0}}],downloadURL:"https://cdn.beatsaver.com/58fd2a28e6c3d6862084da1ec1b92c99090c5cd5.zip",coverURL:"https://cdn.beatsaver.com/58fd2a28e6c3d6862084da1ec1b92c99090c5cd5.jpg",previewURL:"https://cdn.beatsaver.com/58fd2a28e6c3d6862084da1ec1b92c99090c5cd5.mp3"}],createdAt:"2019-02-17T12:03:07Z",updatedAt:"2019-02-17T12:03:07Z",lastPublishedAt:"2019-02-17T12:03:07Z"},{id:"645a",name:"1788-L - A B Y S S",description:"",uploader:{id:12996,name:"rustic",uniqueSet:!0,hash:"5cff0b7298cc5a672c84e8c4",avatar:"https://www.gravatar.com/avatar/5cff0b7298cc5a672c84e8c4?d=retro",type:"SIMPLE"},metadata:{bpm:177,duration:179,songName:"A B Y S S",songSubName:"",songAuthorName:"1788-L",levelAuthorName:"Rustic"},stats:{plays:0,downloads:1417,upvotes:981,downvotes:24,score:.9167},uploaded:"2019-09-18T18:07:03.444Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"5f85d131f63c7415967ba4414abef741686ece9c",key:"645a",state:"Published",createdAt:"2019-09-18T18:07:03.444Z",sageScore:6,diffs:[{njs:20,offset:0,notes:553,bombs:0,obstacles:3106,nps:3.224,length:506,characteristic:"Standard",difficulty:"ExpertPlus",events:9089,chroma:!1,me:!0,ne:!1,cinema:!1,seconds:171.525,paritySummary:{errors:0,warns:0,resets:0}}],downloadURL:"https://cdn.beatsaver.com/5f85d131f63c7415967ba4414abef741686ece9c.zip",coverURL:"https://cdn.beatsaver.com/5f85d131f63c7415967ba4414abef741686ece9c.jpg",previewURL:"https://cdn.beatsaver.com/5f85d131f63c7415967ba4414abef741686ece9c.mp3"}],createdAt:"2019-09-18T18:07:03.444Z",updatedAt:"2019-09-18T18:07:03.444Z",lastPublishedAt:"2019-09-18T18:07:03.444Z"},{id:"5bc1",name:"Propaganda - Muse",description:"Please note that this track will get blocked automatically on YouTube.\n\nExpert Playthrough : https://vimeo.com/353093204",uploader:{id:13320,name:"novashaft",uniqueSet:!0,hash:"5cff0b7398cc5a672c84ee55",avatar:"https://www.gravatar.com/avatar/5cff0b7398cc5a672c84ee55?d=retro",type:"SIMPLE"},metadata:{bpm:190,duration:182,songName:"Propaganda",songSubName:"",songAuthorName:"Muse",levelAuthorName:"NovaShaft"},stats:{plays:0,downloads:1728,upvotes:660,downvotes:10,score:.9167},uploaded:"2019-08-10T12:59:56.399Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"99738852493b819152a7651583f40b63bba70188",key:"5bc1",state:"Published",createdAt:"2019-08-10T12:59:56.399Z",sageScore:5,diffs:[{njs:11,offset:0,notes:366,bombs:0,obstacles:23,nps:2.093,length:553.75,characteristic:"Standard",difficulty:"Normal",events:900,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:174.868,paritySummary:{errors:32,warns:6,resets:0}},{njs:12,offset:0,notes:492,bombs:0,obstacles:24,nps:2.814,length:553.75,characteristic:"Standard",difficulty:"Hard",events:900,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:174.868,paritySummary:{errors:15,warns:8,resets:0}},{njs:14,offset:0,notes:620,bombs:0,obstacles:26,nps:3.546,length:553.75,characteristic:"Standard",difficulty:"Expert",events:900,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:174.868,paritySummary:{errors:19,warns:13,resets:0}}],downloadURL:"https://cdn.beatsaver.com/99738852493b819152a7651583f40b63bba70188.zip",coverURL:"https://cdn.beatsaver.com/99738852493b819152a7651583f40b63bba70188.jpg",previewURL:"https://cdn.beatsaver.com/99738852493b819152a7651583f40b63bba70188.mp3"}],createdAt:"2019-08-10T12:59:56.399Z",updatedAt:"2019-08-10T12:59:56.399Z",lastPublishedAt:"2019-08-10T12:59:56.399Z"},{id:"f003",name:"Calliope Mori - Excuse My Rudeness, But Could You Please RIP?",description:"Expert+ Preview: https://www.youtube.com/watch?v=XCZMtdvz91g\n\nYo, fellow Dead Beats, this has been stuck in my head ever since it came out. The original songs by Calliope are absolute fire. The others in HoloMyth as well as the rest of Hololive are amazing and you should expect more maps from this realm. \n\nI totally did not fall into the rabbit hole... If you have any issues with that then, 失礼しますが、RIP♡\n\nComments? Like it? Hate it? Let me know on Discord @Bloodcloak#5725 !",uploader:{id:71661,name:"bloodcloak",uniqueSet:!0,hash:"5cff0b7698cc5a672c8551d3",avatar:"https://cdn.beatsaver.com/avatar/205707707187986442.png",type:"DISCORD"},metadata:{bpm:124,duration:186,songName:"Excuse My Rudeness, But Could You Please RIP?",songSubName:"",songAuthorName:"Calliope Mori",levelAuthorName:"Bloodcloak"},stats:{plays:0,downloads:6752,upvotes:1803,downvotes:66,score:.9166},uploaded:"2020-09-21T22:48:02.152Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"4b2a227ddb923ce3e6a3060530037014966037e2",key:"f003",state:"Published",createdAt:"2020-09-21T22:48:02.152Z",sageScore:2,diffs:[{njs:12,offset:.4,notes:361,bombs:0,obstacles:139,nps:1.992,length:374.5,characteristic:"Standard",difficulty:"Normal",events:2716,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:181.21,paritySummary:{errors:3,warns:0,resets:0}},{njs:12,offset:.4,notes:652,bombs:0,obstacles:105,nps:3.598,length:374.5,characteristic:"Standard",difficulty:"Hard",events:2716,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:181.21,paritySummary:{errors:0,warns:0,resets:0}},{njs:16,offset:-.2,notes:948,bombs:0,obstacles:72,nps:5.232,length:374.5,characteristic:"Standard",difficulty:"Expert",events:2716,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:181.21,paritySummary:{errors:0,warns:0,resets:0}},{njs:18,offset:-.4,notes:1105,bombs:0,obstacles:60,nps:6.098,length:374.5,characteristic:"Standard",difficulty:"ExpertPlus",events:2716,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:181.21,paritySummary:{errors:0,warns:0,resets:0}}],downloadURL:"https://cdn.beatsaver.com/4b2a227ddb923ce3e6a3060530037014966037e2.zip",coverURL:"https://cdn.beatsaver.com/4b2a227ddb923ce3e6a3060530037014966037e2.jpg",previewURL:"https://cdn.beatsaver.com/4b2a227ddb923ce3e6a3060530037014966037e2.mp3"}],createdAt:"2020-09-21T22:48:02.152Z",updatedAt:"2020-09-21T22:48:02.152Z",lastPublishedAt:"2020-09-21T22:48:02.152Z"},{id:"a90a",name:"[TheFatRat Pack] Windfall - TheFatRat",description:'Here it is! The unofficial "TheFatRat" Music Pack in Beat Saber - with all beatmaps being singlehandedly made by me!\n\nAll songs included in TheFatRat Music Pack:\nMonody (ft. Laura Brehm) \nUnity \nWindfall \nXenogenesis \nTime Lapse \n\nGet the full song pack here: https://bsaber.com/thefatrat-music-pack/\n(Or you should just be able to find all the other ones on my beatsaver profile as well. Heres a link to my profile: https://beatsaver.com/uploader/5d47d586c5301900060b2f6c)\n\nSongcore mod is recommended (for custom colours)\nPlays best on Origins Environment\n\nWindfall Stats:\nExpert+ - 1031 Notes | 4.53 NPS\nExpert - 826 Notes | 3.63 NPS\nHard - 683 Notes | 3.00 NPS\nNormal - 421 Notes | 1.85 NPS\nEasy - 277 Notes | 1.22 NPS\n\nRoughly 9 Hours of work\nGameplay: https://youtu.be/RW5Y6GifdDA\n\nObviously - A huge thanks to TheFatRat himself, for not only producing the songs in the first place (and allowing free access to use them for big and small content creators), but also being a huge inspiration to lots of artists out there and for making music that everyone can jam out to! We love you, TheFatRat!',uploader:{id:4284197,name:"timeweaver",uniqueSet:!0,hash:"5d47d586c5301900060b2f6c",avatar:"https://cdn.beatsaver.com/avatar/607399708121366529.png",type:"DISCORD"},metadata:{bpm:102,duration:227,songName:"Windfall",songSubName:"",songAuthorName:"TheFatRat",levelAuthorName:"Timeweaver"},stats:{plays:0,downloads:4210,upvotes:1147,downvotes:32,score:.9166},uploaded:"2020-05-22T13:28:49.981Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"29677eb4f5cb04e2698b16923eee804abce90f76",key:"a90a",state:"Published",createdAt:"2020-05-22T13:28:49.981Z",sageScore:5,diffs:[{njs:10,offset:1,notes:277,bombs:0,obstacles:39,nps:1.28,length:368,characteristic:"Standard",difficulty:"Easy",events:4238,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:216.471,paritySummary:{errors:40,warns:28,resets:0}},{njs:10,offset:1,notes:421,bombs:0,obstacles:41,nps:1.945,length:368,characteristic:"Standard",difficulty:"Normal",events:4238,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:216.471,paritySummary:{errors:59,warns:27,resets:0}},{njs:12,offset:.25,notes:683,bombs:0,obstacles:66,nps:3.096,length:375,characteristic:"Standard",difficulty:"Hard",events:4238,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:220.588,paritySummary:{errors:3,warns:0,resets:0}},{njs:14,offset:-.25,notes:826,bombs:0,obstacles:67,nps:3.735,length:376,characteristic:"Standard",difficulty:"Expert",events:4240,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:221.176,paritySummary:{errors:2,warns:0,resets:0}},{njs:18,offset:.325,notes:1031,bombs:0,obstacles:65,nps:4.618,length:379.5,characteristic:"Standard",difficulty:"ExpertPlus",events:4238,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:223.235,paritySummary:{errors:0,warns:1,resets:0}}],downloadURL:"https://cdn.beatsaver.com/29677eb4f5cb04e2698b16923eee804abce90f76.zip",coverURL:"https://cdn.beatsaver.com/29677eb4f5cb04e2698b16923eee804abce90f76.jpg",previewURL:"https://cdn.beatsaver.com/29677eb4f5cb04e2698b16923eee804abce90f76.mp3"}],createdAt:"2020-05-22T13:28:49.981Z",updatedAt:"2020-05-22T13:28:49.981Z",lastPublishedAt:"2020-05-22T13:28:49.981Z"},{id:"5270",name:"Gurenge - LiSA",description:"Kimetsuno Yaiba OP\r\n\r\nPreview : https://youtu.be/6AznmNIg68Y\r\nNJS : 14(Expert), 13(Hard)",uploader:{id:31044,name:"digiracko",uniqueSet:!0,hash:"5cff0b7398cc5a672c84ed32",avatar:"https://www.gravatar.com/avatar/5cff0b7398cc5a672c84ed32?d=retro",type:"SIMPLE"},metadata:{bpm:135,duration:238,songName:"Gurenge",songSubName:"LiSA",songAuthorName:"DigiRacko",levelAuthorName:"digiracko"},stats:{plays:0,downloads:5415,upvotes:3174,downvotes:145,score:.9166},uploaded:"2019-06-09T00:26:20Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"9c71e86622967891482bf18c536ff3d03eb5af3f",key:"5270",state:"Published",createdAt:"2019-06-09T00:26:20Z",sageScore:4,diffs:[{njs:13,offset:1,notes:703,bombs:0,obstacles:0,nps:3.045,length:519.5,characteristic:"Standard",difficulty:"Hard",events:592,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:230.889,paritySummary:{errors:43,warns:33,resets:0}},{njs:14,offset:1,notes:974,bombs:0,obstacles:0,nps:4.218,length:519.5,characteristic:"Standard",difficulty:"Expert",events:593,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:230.889,paritySummary:{errors:79,warns:66,resets:0}}],downloadURL:"https://cdn.beatsaver.com/9c71e86622967891482bf18c536ff3d03eb5af3f.zip",coverURL:"https://cdn.beatsaver.com/9c71e86622967891482bf18c536ff3d03eb5af3f.jpg",previewURL:"https://cdn.beatsaver.com/9c71e86622967891482bf18c536ff3d03eb5af3f.mp3"}],createdAt:"2019-06-09T00:26:20Z",updatedAt:"2019-06-09T00:26:20Z",lastPublishedAt:"2019-06-09T00:26:20Z"},{id:"2394",name:"Are You Gonna Be My Girl? - Jet",description:"All 5 difficulties. Had a lot of fun with this one :)\r\nAll charts down to normal are uniquely built.\r\n\r\nExpert+ Playthrough: https://youtu.be/5FhrP79pfVc",uploader:{id:47581,name:"freeek",uniqueSet:!0,hash:"5cff0b7298cc5a672c84e8ad",avatar:"https://www.gravatar.com/avatar/5cff0b7298cc5a672c84e8ad?d=retro",type:"SIMPLE"},metadata:{bpm:105,duration:218,songName:"Are you gonna be my Girl",songSubName:"Jet",songAuthorName:"Freeek",levelAuthorName:"freeek"},stats:{plays:0,downloads:5652,upvotes:2217,downvotes:89,score:.9166},uploaded:"2018-12-03T18:23:49Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"399b2bd6630fe3dcc7631f89ae391e6684fd6a07",key:"2394",state:"Published",createdAt:"2018-12-03T18:23:49Z",sageScore:7,diffs:[{njs:10,offset:0,notes:286,bombs:0,obstacles:36,nps:1.472,length:340,characteristic:"Standard",difficulty:"Easy",events:1906,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:194.286,paritySummary:{errors:10,warns:1,resets:0}},{njs:10,offset:0,notes:369,bombs:0,obstacles:29,nps:1.899,length:340,characteristic:"Standard",difficulty:"Normal",events:1906,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:194.286,paritySummary:{errors:36,warns:31,resets:0}},{njs:10,offset:0,notes:510,bombs:0,obstacles:25,nps:2.625,length:340,characteristic:"Standard",difficulty:"Hard",events:1906,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:194.286,paritySummary:{errors:45,warns:49,resets:0}},{njs:12,offset:0,notes:757,bombs:0,obstacles:17,nps:3.896,length:340,characteristic:"Standard",difficulty:"Expert",events:1906,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:194.286,paritySummary:{errors:37,warns:43,resets:0}},{njs:15,offset:0,notes:927,bombs:0,obstacles:13,nps:4.771,length:340,characteristic:"Standard",difficulty:"ExpertPlus",events:1906,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:194.286,paritySummary:{errors:42,warns:65,resets:0}}],downloadURL:"https://cdn.beatsaver.com/399b2bd6630fe3dcc7631f89ae391e6684fd6a07.zip",coverURL:"https://cdn.beatsaver.com/399b2bd6630fe3dcc7631f89ae391e6684fd6a07.jpg",previewURL:"https://cdn.beatsaver.com/399b2bd6630fe3dcc7631f89ae391e6684fd6a07.mp3"}],createdAt:"2018-12-03T18:23:49Z",updatedAt:"2018-12-03T18:23:49Z",lastPublishedAt:"2018-12-03T18:23:49Z"},{id:"451b",name:"Orion - Getsix",description:"Get your hunting instinct ready; let’s hunt some bloqs to this dynamic and emotional trip of a track. Think you have what it takes to keep up?\r\n\r\nHUGE thanks to Getsix for taking the time to make a new specific edit and mix of the song for this map! The edits include shortened intro, shorter synth lead parts and louder tribal drums, all for a better Beat Saber experience.\r\n\r\nPreview video:\r\nhttps://youtu.be/s6st6WoBd7k\r\n\r\nBPM: 130\r\nDuration: 3:58\r\nEasy, Normal, Hard, Expert and Expert+ difficulties.\r\n\r\nEasy: 253, 1 obstacles, 2 mines\r\nNormal: 365 notes, 1 obstacles, 4 mines\r\nHard: 556 notes, 1 obstacles, 8 mines\r\nExpert: 979 notes, 1 obstacles, 8 mines\r\nExpert+: 1048 notes, 1 obstacles, 8 mines\r\n\r\nThanks to Redmagi, Malakite and Helencarnate for playtesting!\r\n\r\nEnjoy!",uploader:{id:4285318,name:"kolezan",uniqueSet:!0,hash:"5cff0b7398cc5a672c84fcbb",avatar:"https://cdn.beatsaver.com/avatar/220513618763055106.png",type:"DISCORD"},metadata:{bpm:130,duration:231,songName:"Orion (Beat Saber Edit)",songSubName:"Getsix",songAuthorName:"Kolezan",levelAuthorName:"Kolezan"},stats:{plays:0,downloads:3346,upvotes:1205,downvotes:35,score:.9165},uploaded:"2019-04-12T05:54:28Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"c86e3d35feeb08e4569dabe2389558ba40fa5bf7",key:"451b",state:"Published",createdAt:"2019-04-12T05:54:28Z",sageScore:7,diffs:[{njs:9,offset:0,notes:253,bombs:2,obstacles:1,nps:1.133,length:484,characteristic:"Standard",difficulty:"Easy",events:2353,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:223.385,paritySummary:{errors:80,warns:17,resets:0}},{njs:10,offset:1,notes:365,bombs:4,obstacles:1,nps:1.634,length:484,characteristic:"Standard",difficulty:"Normal",events:2353,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:223.385,paritySummary:{errors:74,warns:41,resets:0}},{njs:14,offset:0,notes:556,bombs:8,obstacles:1,nps:2.494,length:483,characteristic:"Standard",difficulty:"Hard",events:2353,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:222.923,paritySummary:{errors:75,warns:61,resets:4}},{njs:17,offset:0,notes:979,bombs:8,obstacles:1,nps:4.392,length:483,characteristic:"Standard",difficulty:"Expert",events:2353,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:222.923,paritySummary:{errors:76,warns:108,resets:2}},{njs:19,offset:0,notes:1048,bombs:8,obstacles:1,nps:4.701,length:483,characteristic:"Standard",difficulty:"ExpertPlus",events:2353,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:222.923,paritySummary:{errors:97,warns:112,resets:2}}],downloadURL:"https://cdn.beatsaver.com/c86e3d35feeb08e4569dabe2389558ba40fa5bf7.zip",coverURL:"https://cdn.beatsaver.com/c86e3d35feeb08e4569dabe2389558ba40fa5bf7.jpg",previewURL:"https://cdn.beatsaver.com/c86e3d35feeb08e4569dabe2389558ba40fa5bf7.mp3"}],createdAt:"2019-04-12T05:54:28Z",updatedAt:"2019-04-12T05:54:28Z",lastPublishedAt:"2019-04-12T05:54:28Z"},{id:"c209",name:"[Alphabeat - Pegboard Nerds Pack] Pegboard Nerds - Luigi's Mansion",description:"Part of the Pegboard Nerds Music Pack - Presented by the Alphabeat Mapping Group.\n\nAlphabeat is a mapping group that currently consists of 6 members, 4 of which have made this pack. This Pegboard Nerds pack is brought to you by Timeweaver, Rayman, KuritsaDVR & FireStrike!\n\nCheck out the other mappers' profiles here:\nTimeweaver - https://beatsaver.com/uploader/5d47d586c5301900060b2f6c\nFirestrike - https://beatsaver.com/uploader/5cff0b7698cc5a672c85479f\nKuritsaDVR - https://beatsaver.com/uploader/5cff0b7698cc5a672c8537ef\n\nThis map uses a custom platform made by Rayman (me!)! Download it here: https://modelsaber.com/Platforms/?id=1594988870\n\nAll songs included in this pack:\n- Gunslinga (Mapped by Rayman)\n- Coffins (Mapped by Rayman)\n- Superstar (Mapped by Timeweaver & Firestrike)\n- Razor Sharp (Mapped by Firestrike)\n- Luigi’s Mansion (Mapped by Rayman)\n- Try This (Mapped by Timeweaver & Firestrike)\n- Swamp Thing (Mapped by Rayman & KuritsaDVR)\n- Exterminate (Mapped by Timeweaver)\n- Disconnected (Mapped by Timeweaver & Firestrike)\n- Here it Comes (Mapped by KuritsaDVR & Timeweaver)\n\nGet the playlist here:\nhttps://bsaber.com/pegboard-nerds-pack/\n\nView the trailer here:\nhttps://youtu.be/b0fU5Rv_Zf0\n\nIncludes\n- 5 Standard Difficulties\n- 1 One Saber Difficulty\n- 1 360 Degree Difficulty\n- 1 90 Degree Difficulty",uploader:{id:4284994,name:"rayman9515",uniqueSet:!0,hash:"5dc6edac6dea0b0006c18486",avatar:"https://cdn.beatsaver.com/avatar/439017353892724736.png",type:"DISCORD"},metadata:{bpm:99,duration:229,songName:"Luigi's Mansion",songSubName:"",songAuthorName:"Pegboard Nerds",levelAuthorName:"Rayman9515"},stats:{plays:0,downloads:2446,upvotes:797,downvotes:16,score:.9164},uploaded:"2020-07-17T13:00:46.645Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"e7cdcc86e136da49cce9747233131e819cabe951",key:"c209",state:"Published",createdAt:"2020-07-17T13:00:46.645Z",sageScore:4,diffs:[{njs:11,offset:.2,notes:332,bombs:0,obstacles:45,nps:1.491,length:365.803,characteristic:"Standard",difficulty:"Easy",events:3635,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:221.699,paritySummary:{errors:10,warns:1,resets:0}},{njs:11,offset:.2,notes:471,bombs:0,obstacles:68,nps:2.115,length:365.803,characteristic:"Standard",difficulty:"Normal",events:3635,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:221.699,paritySummary:{errors:20,warns:2,resets:0}},{njs:13,offset:0,notes:682,bombs:4,obstacles:67,nps:3.063,length:365.803,characteristic:"Standard",difficulty:"Hard",events:3635,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:221.699,paritySummary:{errors:6,warns:0,resets:0}},{njs:16,offset:.5,notes:877,bombs:0,obstacles:71,nps:3.939,length:365.803,characteristic:"Standard",difficulty:"Expert",events:3635,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:221.699,paritySummary:{errors:0,warns:0,resets:0}},{njs:19,offset:.25,notes:1184,bombs:0,obstacles:111,nps:5.318,length:365.803,characteristic:"Standard",difficulty:"ExpertPlus",events:3637,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:221.699,paritySummary:{errors:0,warns:0,resets:0}},{njs:19,offset:.25,notes:825,bombs:35,obstacles:136,nps:3.705,length:365.803,characteristic:"OneSaber",difficulty:"ExpertPlus",events:3635,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:221.699,paritySummary:{errors:2,warns:24,resets:0}},{njs:11,offset:.2,notes:471,bombs:0,obstacles:63,nps:2.115,length:365.803,characteristic:"90Degree",difficulty:"Normal",events:3875,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:221.699,paritySummary:{errors:20,warns:2,resets:0}},{njs:11,offset:.2,notes:471,bombs:0,obstacles:63,nps:2.115,length:365.803,characteristic:"360Degree",difficulty:"Normal",events:3875,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:221.699,paritySummary:{errors:20,warns:2,resets:0}}],downloadURL:"https://cdn.beatsaver.com/e7cdcc86e136da49cce9747233131e819cabe951.zip",coverURL:"https://cdn.beatsaver.com/e7cdcc86e136da49cce9747233131e819cabe951.jpg",previewURL:"https://cdn.beatsaver.com/e7cdcc86e136da49cce9747233131e819cabe951.mp3"}],createdAt:"2020-07-17T13:00:46.645Z",updatedAt:"2020-07-17T13:00:46.645Z",lastPublishedAt:"2020-07-17T13:00:46.645Z"},{id:"d8",name:"Undertale - Megalovania (Cement City Remix) v.2",description:"I uploaded this song earlier today, but unfortunately not realizing an issue that I had made with the placement of 2 blocks that were near impossible to hit. Fixed and re-uploaded!\r\n\r\nDue to issues with EditSaber, I was unable to create any difficulties beyond Expert, as any changes made on one difficulty would carry over to the others.\r\n\r\nAlso this is my first beat map. Go easy. ;)",uploader:{id:48522,name:"kryptikos",uniqueSet:!0,hash:"5cff0b7298cc5a672c84eab4",avatar:"https://www.gravatar.com/avatar/5cff0b7298cc5a672c84eab4?d=retro",type:"SIMPLE"},metadata:{bpm:126,duration:164,songName:"Megalovania (Cement City Remix)",songSubName:"Undertale",songAuthorName:"Kryptikos",levelAuthorName:"kryptikos"},stats:{plays:0,downloads:4306,upvotes:3e3,downvotes:135,score:.9164},uploaded:"2018-05-17T21:38:37Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"2ee2deee264648432035f4abefa69b9dac86bd95",key:"d8",state:"Published",createdAt:"2018-05-17T21:38:37Z",sageScore:5,diffs:[{njs:10,offset:0,notes:566,bombs:32,obstacles:167,nps:3.631,length:327.313,characteristic:"Standard",difficulty:"Expert",events:1864,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:155.863,paritySummary:{errors:82,warns:57,resets:2}}],downloadURL:"https://cdn.beatsaver.com/2ee2deee264648432035f4abefa69b9dac86bd95.zip",coverURL:"https://cdn.beatsaver.com/2ee2deee264648432035f4abefa69b9dac86bd95.jpg",previewURL:"https://cdn.beatsaver.com/2ee2deee264648432035f4abefa69b9dac86bd95.mp3"}],createdAt:"2018-05-17T21:38:37Z",updatedAt:"2018-05-17T21:38:37Z",lastPublishedAt:"2018-05-17T21:38:37Z"},{id:"1a0be",name:"[Electro Swing Pack] Caravan Palace - Wonderland",description:"Nixie Presents: Electro Swing Pack!\n\n10 electro swing songs with expert and expert+ diffs to make your booty swing!\n\nGet The Pack: \nhttps://bsaber.com/electro-swing-pack/\n\nMap Gameplay:\nhttps://youtu.be/uFiLQLooDpQ\n\nComplete Pack Playthrough:\nhttps://youtu.be/yj9rw4MEh7s\n\nHeyya! After looking for some dancey electro swing maps, I noticed that there barely are any!\nSo I took matters into my own hands, learning mapping basically from scratch,\nscrapping my first failed attempts and then finally making a map that was good.\nI found it so fun that I ended up making 9 more maps,\nand fine tuned them with the help of the testplayers in BSMG,\nas well as the lovely curators from the bsaber discord.\n\nHuge thanks in particular to:\nMonstor, Bearly, Noxn, Bullet, Vaser888, Tocxx, Jafdy, Storm Knight and Pixelguy!\n\nIf you want to talk to me, here is my Discord:\nNixie.Korten#6944",uploader:{id:4286374,name:"nixiekorten",uniqueSet:!0,hash:"6096752e12772e0006e2f7e6",avatar:"https://cdn.beatsaver.com/avatar/840550221690699776.png",type:"DISCORD"},metadata:{bpm:104,duration:188,songName:"Wonderland",songSubName:"",songAuthorName:"Caravan Palace",levelAuthorName:"Nixie.Korten"},stats:{plays:0,downloads:14872,upvotes:794,downvotes:16,score:.9163},uploaded:"2021-07-08T15:26:38.489Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"9752f2de4dd434c589ced6d89358b1fda6902d3f",key:"1a0be",state:"Published",createdAt:"2021-07-08T15:26:38.489Z",sageScore:3,diffs:[{njs:16,offset:.25,notes:671,bombs:0,obstacles:0,nps:3.779,length:307.75,characteristic:"Standard",difficulty:"Expert",events:1588,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:177.548,paritySummary:{errors:0,warns:0,resets:0}},{njs:21,offset:0,notes:837,bombs:0,obstacles:10,nps:4.714,length:307.75,characteristic:"Standard",difficulty:"ExpertPlus",events:1588,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:177.548,paritySummary:{errors:0,warns:0,resets:0}}],downloadURL:"https://cdn.beatsaver.com/9752f2de4dd434c589ced6d89358b1fda6902d3f.zip",coverURL:"https://cdn.beatsaver.com/9752f2de4dd434c589ced6d89358b1fda6902d3f.jpg",previewURL:"https://cdn.beatsaver.com/9752f2de4dd434c589ced6d89358b1fda6902d3f.mp3"}],createdAt:"2021-07-08T15:26:38.489Z",updatedAt:"2021-07-08T15:26:38.489Z",lastPublishedAt:"2021-07-08T15:26:38.489Z"},{id:"d191",name:"Seven Lions - Silent Skies (ft. Karra) | [Chroma RGB]",description:"Was only a lightshow at first but felt like mapping it too. \nSo here is Hard, Expert and Expert+ with my best lightshow so far (imo).\nhope you like it.\n\ntalk shit on discord: nitronik.exe#7974\n\nlightshow preview: https://www.youtube.com/watch?v=vpi-VG_nZg8&t=19s",uploader:{id:4284201,name:"nitronikexe",uniqueSet:!0,hash:"5cff0b7798cc5a672c855d84",avatar:"https://cdn.beatsaver.com/avatar/428230049704181760.png",type:"DISCORD"},metadata:{bpm:140,duration:234,songName:"Silent Skies",songSubName:"(ft. Karra)",songAuthorName:"Seven Lions",levelAuthorName:"nitronik.exe"},stats:{plays:0,downloads:4892,upvotes:725,downvotes:13,score:.9163},uploaded:"2020-08-08T18:33:55.424Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"8434f521be275ae476b82c00201570ece88b395f",key:"d191",state:"Published",createdAt:"2020-08-08T18:33:55.424Z",sageScore:7,diffs:[{njs:12,offset:1,notes:491,bombs:6,obstacles:59,nps:2.238,length:512,characteristic:"Standard",difficulty:"Hard",events:8199,chroma:!0,me:!1,ne:!1,cinema:!1,seconds:219.429,paritySummary:{errors:0,warns:0,resets:2}},{njs:16,offset:0,notes:813,bombs:6,obstacles:33,nps:3.704,length:512.083,characteristic:"Standard",difficulty:"Expert",events:8199,chroma:!0,me:!1,ne:!1,cinema:!1,seconds:219.464,paritySummary:{errors:0,warns:0,resets:2}},{njs:20,offset:-.5,notes:1113,bombs:6,obstacles:32,nps:5.071,length:512.125,characteristic:"Standard",difficulty:"ExpertPlus",events:8199,chroma:!0,me:!1,ne:!1,cinema:!1,seconds:219.482,paritySummary:{errors:0,warns:0,resets:2}},{njs:16,offset:0,notes:0,bombs:0,obstacles:0,nps:0,length:0,characteristic:"Lightshow",difficulty:"Easy",events:8199,chroma:!0,me:!1,ne:!1,cinema:!1,seconds:0,paritySummary:{errors:0,warns:0,resets:0}}],downloadURL:"https://cdn.beatsaver.com/8434f521be275ae476b82c00201570ece88b395f.zip",coverURL:"https://cdn.beatsaver.com/8434f521be275ae476b82c00201570ece88b395f.jpg",previewURL:"https://cdn.beatsaver.com/8434f521be275ae476b82c00201570ece88b395f.mp3"}],createdAt:"2020-08-08T18:33:55.424Z",updatedAt:"2020-08-08T18:33:55.424Z",lastPublishedAt:"2020-08-08T18:33:55.424Z"},{id:"6b96",name:"COALAMODE. - Nanairo Symphony [Your Lie in April Opening 2]",description:"You think it reached her?\n\nBPM 155 | Length 2:01\nExpert\nHard\nNormal\n\nplease enjoy\n\nDM any feedback on Discord\nETAN#8341",uploader:{id:4235140,name:"etan",uniqueSet:!0,hash:"5cff0b7798cc5a672c855775",avatar:"https://cdn.beatsaver.com/avatar/136373107559497728.png",type:"DISCORD"},metadata:{bpm:155,duration:122,songName:"Nanairo Symphony",songSubName:"",songAuthorName:"COALAMODE.",levelAuthorName:"ETAN"},stats:{plays:0,downloads:2462,upvotes:602,downvotes:8,score:.9163},uploaded:"2019-10-22T23:22:04.194Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"cc3b824dcb605eb76fce944623758578094cd77d",key:"6b96",state:"Published",createdAt:"2019-10-22T23:22:04.194Z",sageScore:6,diffs:[{njs:11,offset:0,notes:207,bombs:0,obstacles:1,nps:1.857,length:288,characteristic:"Standard",difficulty:"Normal",events:3796,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:111.484,paritySummary:{errors:2,warns:2,resets:0}},{njs:12,offset:1,notes:282,bombs:0,obstacles:1,nps:2.53,length:288,characteristic:"Standard",difficulty:"Hard",events:3796,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:111.484,paritySummary:{errors:0,warns:1,resets:0}},{njs:16,offset:.5,notes:411,bombs:0,obstacles:1,nps:3.687,length:288,characteristic:"Standard",difficulty:"Expert",events:3796,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:111.484,paritySummary:{errors:4,warns:3,resets:0}}],downloadURL:"https://cdn.beatsaver.com/cc3b824dcb605eb76fce944623758578094cd77d.zip",coverURL:"https://cdn.beatsaver.com/cc3b824dcb605eb76fce944623758578094cd77d.jpg",previewURL:"https://cdn.beatsaver.com/cc3b824dcb605eb76fce944623758578094cd77d.mp3"}],createdAt:"2019-10-22T23:22:04.194Z",updatedAt:"2019-10-22T23:22:04.194Z",lastPublishedAt:"2019-10-22T23:22:04.194Z"},{id:"42de",name:"Kamikaze - WALK THE MOON",description:"An older map that I have no idea why I never published. So here it is!",uploader:{id:30311,name:"bennydabeast",uniqueSet:!0,hash:"5cff0b7298cc5a672c84e98d",avatar:"https://cdn.beatsaver.com/avatar/30311.jpg",type:"SIMPLE"},metadata:{bpm:155,duration:198,songName:"Kamikaze",songSubName:"WALK THE MOON",songAuthorName:"BennyDaBeast",levelAuthorName:"bennydabeast"},stats:{plays:0,downloads:3218,upvotes:950,downvotes:23,score:.9163},uploaded:"2019-04-01T22:12:10Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"63d2d5920e6676f63bf997ae606b6d1590cd8c8d",key:"42de",state:"Published",createdAt:"2019-04-01T22:12:10Z",sageScore:5,diffs:[{njs:10,offset:0,notes:231,bombs:0,obstacles:8,nps:1.203,length:496,characteristic:"Standard",difficulty:"Easy",events:266,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:192,paritySummary:{errors:71,warns:20,resets:0}},{njs:10,offset:0,notes:259,bombs:0,obstacles:8,nps:1.349,length:496,characteristic:"Standard",difficulty:"Normal",events:266,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:192,paritySummary:{errors:39,warns:23,resets:0}},{njs:10,offset:0,notes:442,bombs:0,obstacles:8,nps:2.302,length:496,characteristic:"Standard",difficulty:"Hard",events:266,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:192,paritySummary:{errors:84,warns:55,resets:0}},{njs:12,offset:0,notes:487,bombs:0,obstacles:8,nps:2.536,length:496,characteristic:"Standard",difficulty:"Expert",events:266,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:192,paritySummary:{errors:87,warns:68,resets:0}}],downloadURL:"https://cdn.beatsaver.com/63d2d5920e6676f63bf997ae606b6d1590cd8c8d.zip",coverURL:"https://cdn.beatsaver.com/63d2d5920e6676f63bf997ae606b6d1590cd8c8d.jpg",previewURL:"https://cdn.beatsaver.com/63d2d5920e6676f63bf997ae606b6d1590cd8c8d.mp3"}],createdAt:"2019-04-01T22:12:10Z",updatedAt:"2019-04-01T22:12:10Z",lastPublishedAt:"2019-04-01T22:12:10Z"},{id:"18a6",name:"DJ Fresh - Louder (Doctor P & Flux Pavilion Remix)",description:"Expert / Hard / Normal\r\nhttps://www.youtube.com/watch?v=rfR4cbnB7T8",uploader:{id:12996,name:"rustic",uniqueSet:!0,hash:"5cff0b7298cc5a672c84e8c4",avatar:"https://www.gravatar.com/avatar/5cff0b7298cc5a672c84e8c4?d=retro",type:"SIMPLE"},metadata:{bpm:140,duration:128,songName:"Louder (Doctor P & Flux Pavilion Remix)",songSubName:"DJ Fresh",songAuthorName:"Rustic",levelAuthorName:"rustic"},stats:{plays:0,downloads:2475,upvotes:1159,downvotes:33,score:.9163},uploaded:"2018-10-04T12:37:14Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"6b2cdc3638c97881753d83308c13eda1a490f0b2",key:"18a6",state:"Published",createdAt:"2018-10-04T12:37:14Z",sageScore:6,diffs:[{njs:10,offset:0,notes:249,bombs:0,obstacles:1,nps:2.06,length:282,characteristic:"Standard",difficulty:"Normal",events:2076,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:120.857,paritySummary:{errors:10,warns:27,resets:0}},{njs:12,offset:0,notes:305,bombs:0,obstacles:2,nps:2.524,length:282,characteristic:"Standard",difficulty:"Hard",events:2076,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:120.857,paritySummary:{errors:10,warns:39,resets:0}},{njs:14,offset:0,notes:380,bombs:0,obstacles:14,nps:3.144,length:282,characteristic:"Standard",difficulty:"Expert",events:2364,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:120.857,paritySummary:{errors:11,warns:43,resets:0}}],downloadURL:"https://cdn.beatsaver.com/6b2cdc3638c97881753d83308c13eda1a490f0b2.zip",coverURL:"https://cdn.beatsaver.com/6b2cdc3638c97881753d83308c13eda1a490f0b2.jpg",previewURL:"https://cdn.beatsaver.com/6b2cdc3638c97881753d83308c13eda1a490f0b2.mp3"}],createdAt:"2018-10-04T12:37:14Z",updatedAt:"2018-10-04T12:37:14Z",lastPublishedAt:"2018-10-04T12:37:14Z"},{id:"2529",name:"Back From The Dead - Skillet",description:"Song: Back From The Dead - Skillet\r\nMapper: KuritsaDBS\r\nAvailable difficulties: Expert\r\nPreview: Not available",uploader:{id:23150,name:"kuritsadbs",uniqueSet:!0,hash:"5cff0b7698cc5a672c8537ef",avatar:"https://www.gravatar.com/avatar/5cff0b7698cc5a672c8537ef?d=retro",type:"SIMPLE"},metadata:{bpm:162,duration:215,songName:"Back From The Dead",songSubName:"Skillet",songAuthorName:"KuritsaDBS",levelAuthorName:"KuritsaDBS"},stats:{plays:0,downloads:844,upvotes:601,downvotes:8,score:.9162},uploaded:"2018-12-11T14:24:33Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"baa01d357ac94cdca55972aa6c925709e4595850",key:"2529",state:"Published",createdAt:"2018-12-11T14:24:33Z",sageScore:4,diffs:[{njs:14,offset:0,notes:593,bombs:44,obstacles:107,nps:2.911,length:550,characteristic:"Standard",difficulty:"Expert",events:754,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:203.704,paritySummary:{errors:33,warns:51,resets:0}}],downloadURL:"https://cdn.beatsaver.com/baa01d357ac94cdca55972aa6c925709e4595850.zip",coverURL:"https://cdn.beatsaver.com/baa01d357ac94cdca55972aa6c925709e4595850.jpg",previewURL:"https://cdn.beatsaver.com/baa01d357ac94cdca55972aa6c925709e4595850.mp3"}],createdAt:"2018-12-11T14:24:33Z",updatedAt:"2018-12-11T14:24:33Z",lastPublishedAt:"2018-12-11T14:24:33Z"},{id:"1897",name:"Song of the Ancients / Fate - NieR Gestalt & Replicant Original Soundtrack",description:"\"It's like I just found something special. Something very special.\"\r\n\r\n128BPM / 4:52 Runtime\r\nHard / 758 Notes\r\nExpert / 994 Notes\r\nExpert+ / 1108 Notes\r\n\r\nGameplay:\r\nhttps://youtu.be/0r-UkakLCwU\r\nListen to the song:\r\nhttps://www.youtube.com/watch?v=ady--PNMsfI\r\n\r\nI thought the amazing game, NieR Gestalt/Replicant, needed an amazing beat map to go with it. This song was a perfect fit :)\r\n[UPDATE]\r\nSomebody pointed out there was a mapping error during the acoustic guitar section. It's fixed.",uploader:{id:4284981,name:"skylerwallace",uniqueSet:!0,hash:"5cff0b7298cc5a672c84ea67",avatar:"https://cdn.beatsaver.com/avatar/398344856868487168.png",type:"DISCORD"},metadata:{bpm:128,duration:292,songName:"Song of the Ancients / Fate",songSubName:"NieR OST",songAuthorName:"Skyler Wallace",levelAuthorName:"skylerwallace"},stats:{plays:0,downloads:1672,upvotes:860,downvotes:19,score:.9162},uploaded:"2018-10-04T00:33:41Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"4638d271b9974ec5bb851bb8629976078e781c97",key:"1897",state:"Published",createdAt:"2018-10-04T00:33:41Z",sageScore:6,diffs:[{njs:10,offset:0,notes:758,bombs:0,obstacles:16,nps:2.622,length:616,characteristic:"Standard",difficulty:"Hard",events:3742,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:288.75,paritySummary:{errors:81,warns:73,resets:0}},{njs:12,offset:0,notes:994,bombs:8,obstacles:32,nps:3.439,length:616,characteristic:"Standard",difficulty:"Expert",events:3742,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:288.75,paritySummary:{errors:55,warns:40,resets:0}},{njs:12,offset:0,notes:1108,bombs:8,obstacles:32,nps:3.833,length:616,characteristic:"Standard",difficulty:"ExpertPlus",events:3742,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:288.75,paritySummary:{errors:65,warns:47,resets:0}}],downloadURL:"https://cdn.beatsaver.com/4638d271b9974ec5bb851bb8629976078e781c97.zip",coverURL:"https://cdn.beatsaver.com/4638d271b9974ec5bb851bb8629976078e781c97.jpg",previewURL:"https://cdn.beatsaver.com/4638d271b9974ec5bb851bb8629976078e781c97.mp3"}],createdAt:"2018-10-04T00:33:41Z",updatedAt:"2018-10-04T00:33:41Z",lastPublishedAt:"2018-10-04T00:33:41Z"},{id:"9a36",name:"[Tokyo Machine Pack] Tokyo Machine - PLAY",description:"4/6\nPart of the Tokyo Machine Pack, a collab between Firestrike, Cyansnow and I.\nMap by me, lights by FireStrike.\n\nFireStrike's account: https://beatsaver.com/uploader/5cff0b7698cc5a672c85479f\nCyanSnow's account: https://beatsaver.com/uploader/5cff0b7698cc5a672c8543ac\n\nPlaylist: https://bsaber.com/tokyo-machine-pack/\n\nCheck out the trailer for the pack here: https://www.youtube.com/watch?v=lStPUnecsD8",uploader:{id:57657,name:"pixelguymm",uniqueSet:!0,hash:"5cff0b7698cc5a672c8541a8",avatar:"https://cdn.beatsaver.com/avatar/434386941547511818.png",type:"DISCORD"},metadata:{bpm:128,duration:185,songName:"PLAY",songSubName:"",songAuthorName:"Tokyo Machine",levelAuthorName:"FireStrike & Pixel"},stats:{plays:0,downloads:1813,upvotes:598,downvotes:8,score:.9161},uploaded:"2020-04-12T18:07:52.070Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"a9e447b8ea158c2b68f546935f704b270277f7f8",key:"9a36",state:"Published",createdAt:"2020-04-12T18:07:52.070Z",sageScore:5,diffs:[{njs:16,offset:-.3,notes:754,bombs:43,obstacles:0,nps:4.189,length:384,characteristic:"Standard",difficulty:"ExpertPlus",events:4444,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:180,paritySummary:{errors:0,warns:0,resets:0}}],downloadURL:"https://cdn.beatsaver.com/a9e447b8ea158c2b68f546935f704b270277f7f8.zip",coverURL:"https://cdn.beatsaver.com/a9e447b8ea158c2b68f546935f704b270277f7f8.jpg",previewURL:"https://cdn.beatsaver.com/a9e447b8ea158c2b68f546935f704b270277f7f8.mp3"}],createdAt:"2020-04-12T18:07:52.070Z",updatedAt:"2020-04-12T18:07:52.070Z",lastPublishedAt:"2020-04-12T18:07:52.070Z"},{id:"8108",name:"[Noodlegames] Ephixa - Wisdom (Zelda's Lullaby)",description:"The Ramen Noodle group is here to bring you a map pack full of our favorite video game soundtracks and game-inspired music! Ephixa's wonderful remix of Zelda's Lullaby is iconic, and a fantastic way to honor the beautiful rhythms in Ocarina of Time.",uploader:{id:4284569,name:"checkthepan",uniqueSet:!0,hash:"5cff0b7398cc5a672c84f3d5",avatar:"https://cdn.beatsaver.com/avatar/184355369189900290.png",type:"DISCORD"},metadata:{bpm:140,duration:241,songName:"Wisdom (Zelda's Lullaby Link to the Future) ",songSubName:"[feat. Will & Tim] [From Legend of Zelda: Ocarina of Time]",songAuthorName:"Ephixa",levelAuthorName:"Checkthepan"},stats:{plays:0,downloads:2384,upvotes:696,downvotes:12,score:.9161},uploaded:"2020-01-24T23:15:35.818Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"a603656eb8cdadcb6eda85ef408902c1f6125a8f",key:"8108",state:"Published",createdAt:"2020-01-24T23:15:35.818Z",sageScore:3,diffs:[{njs:11,offset:.25,notes:331,bombs:0,obstacles:28,nps:1.43,length:540.031,characteristic:"Standard",difficulty:"Normal",events:13016,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:231.442,paritySummary:{errors:77,warns:4,resets:0}},{njs:13,offset:.25,notes:560,bombs:16,obstacles:26,nps:2.42,length:540.031,characteristic:"Standard",difficulty:"Hard",events:13016,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:231.442,paritySummary:{errors:1,warns:1,resets:3}},{njs:16,offset:0,notes:769,bombs:24,obstacles:26,nps:3.323,length:540.031,characteristic:"Standard",difficulty:"Expert",events:13016,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:231.442,paritySummary:{errors:1,warns:0,resets:3}},{njs:19,offset:-.25,notes:930,bombs:65,obstacles:26,nps:4.018,length:540.031,characteristic:"Standard",difficulty:"ExpertPlus",events:13016,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:231.442,paritySummary:{errors:1,warns:0,resets:13}}],downloadURL:"https://cdn.beatsaver.com/a603656eb8cdadcb6eda85ef408902c1f6125a8f.zip",coverURL:"https://cdn.beatsaver.com/a603656eb8cdadcb6eda85ef408902c1f6125a8f.jpg",previewURL:"https://cdn.beatsaver.com/a603656eb8cdadcb6eda85ef408902c1f6125a8f.mp3"}],createdAt:"2020-01-24T23:15:35.818Z",updatedAt:"2020-01-24T23:15:35.818Z",lastPublishedAt:"2020-01-24T23:15:35.818Z"},{id:"4227",name:"Aladdin - A Whole New World",description:"This song makes me smile. Such a classic Disney song.\r\nAdded easy and normal difficulties. Hard is a bit slower now . Expert is the same speed as the previous upload.",uploader:{id:4285018,name:"majorpickle",uniqueSet:!0,hash:"5cff0b7398cc5a672c84f792",avatar:"https://cdn.beatsaver.com/avatar/450358937657671680.png",type:"DISCORD"},metadata:{bpm:123,duration:162,songName:"A Whole New World (From Disney's ''Aladdin'')",songSubName:"Lea Salonga & Brad Kane",songAuthorName:"Majorpickle",levelAuthorName:"majorpickle"},stats:{plays:0,downloads:5615,upvotes:1291,downvotes:40,score:.9161},uploaded:"2019-03-30T22:52:43Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"882f3fd9b97b4ce107c1e9e1f944c491b86c47fe",key:"4227",state:"Published",createdAt:"2019-03-30T22:52:43Z",sageScore:5,diffs:[{njs:10,offset:0,notes:236,bombs:0,obstacles:118,nps:1.591,length:304,characteristic:"Standard",difficulty:"Easy",events:540,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:148.293,paritySummary:{errors:0,warns:0,resets:0}},{njs:10,offset:0,notes:242,bombs:0,obstacles:117,nps:1.631,length:304,characteristic:"Standard",difficulty:"Normal",events:540,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:148.293,paritySummary:{errors:22,warns:0,resets:0}},{njs:10,offset:0,notes:420,bombs:0,obstacles:85,nps:2.83,length:304.125,characteristic:"Standard",difficulty:"Hard",events:539,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:148.354,paritySummary:{errors:12,warns:11,resets:0}},{njs:11,offset:0,notes:420,bombs:0,obstacles:85,nps:2.83,length:304.125,characteristic:"Standard",difficulty:"Expert",events:539,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:148.354,paritySummary:{errors:12,warns:11,resets:0}}],downloadURL:"https://cdn.beatsaver.com/882f3fd9b97b4ce107c1e9e1f944c491b86c47fe.zip",coverURL:"https://cdn.beatsaver.com/882f3fd9b97b4ce107c1e9e1f944c491b86c47fe.jpg",previewURL:"https://cdn.beatsaver.com/882f3fd9b97b4ce107c1e9e1f944c491b86c47fe.mp3"}],createdAt:"2019-03-30T22:52:43Z",updatedAt:"2019-03-30T22:52:43Z",lastPublishedAt:"2019-03-30T22:52:43Z"},{id:"2569",name:"Celtic Woman - Carol Of The Bells",description:"Hard/Expert | BPM: 190 | Length: 2:18 | Notes: 333/560\r\n\r\nMerry Christmas and Happy Holidays! \r\nHad fun charting this one, I hope you have fun playing it :D\r\n\r\n16th Map.\r\n\r\nPreview:\r\nhttps://www.youtube.com/watch?v=zh9-XC1D5aU",uploader:{id:4285825,name:"fefeland",uniqueSet:!0,hash:"5cff0b7398cc5a672c84f3bb",avatar:"https://cdn.beatsaver.com/avatar/119360573191225344.png",type:"DISCORD"},metadata:{bpm:190,duration:139,songName:"Carol Of The Bells",songSubName:"Celtic Woman",songAuthorName:"FEFELAND",levelAuthorName:"fefeland"},stats:{plays:0,downloads:1307,upvotes:598,downvotes:8,score:.9161},uploaded:"2018-12-13T02:40:05Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"1df1374196f03c9bba1aed018e3de2595f79dce1",key:"2569",state:"Published",createdAt:"2018-12-13T02:40:05Z",sageScore:5,diffs:[{njs:12,offset:0,notes:333,bombs:0,obstacles:101,nps:2.491,length:423.375,characteristic:"Standard",difficulty:"Hard",events:790,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:133.697,paritySummary:{errors:20,warns:18,resets:0}},{njs:15,offset:0,notes:560,bombs:0,obstacles:105,nps:4.189,length:423.375,characteristic:"Standard",difficulty:"Expert",events:790,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:133.697,paritySummary:{errors:15,warns:9,resets:0}}],downloadURL:"https://cdn.beatsaver.com/1df1374196f03c9bba1aed018e3de2595f79dce1.zip",coverURL:"https://cdn.beatsaver.com/1df1374196f03c9bba1aed018e3de2595f79dce1.jpg",previewURL:"https://cdn.beatsaver.com/1df1374196f03c9bba1aed018e3de2595f79dce1.mp3"}],createdAt:"2018-12-13T02:40:05Z",updatedAt:"2018-12-13T02:40:05Z",lastPublishedAt:"2018-12-13T02:40:05Z"},{id:"16894",name:"Joe Hisaishi - Merry-Go-Round (from 'Howl's Moving Castle')",description:"The popular theme from Studio Ghibli's 'Howl's Moving Castle'. Version from Joe Hisaishi's 'Dream Songs' album.\n\nThanks to Cyrix and vaser888 for early testplays, Timbo and Uninstaller for the excellent mods, and Qwasyx for further suggestions for improvement.\n\nZelazowa#3625",uploader:{id:4284834,name:"zelazowa",uniqueSet:!0,hash:"5ea5367d16c968000632663c",avatar:"https://cdn.beatsaver.com/avatar/94962140443578368.png",type:"DISCORD"},metadata:{bpm:160,duration:312,songName:"Merry-Go-Round",songSubName:"(from 'Howl's Moving Castle')",songAuthorName:"Joe Hisaishi",levelAuthorName:"Zelazowa"},stats:{plays:0,downloads:5833,upvotes:813,downvotes:17,score:.9161},uploaded:"2021-04-11T02:32:37.687Z",automapper:!1,ranked:!0,qualified:!1,versions:[{hash:"d30db93f2c3c5a152b84ca364a691ef10c4efdb9",key:"16894",state:"Published",createdAt:"2021-04-11T02:32:37.687Z",sageScore:5,diffs:[{njs:10,offset:0,notes:441,bombs:0,obstacles:94,nps:1.459,length:806.257,characteristic:"Standard",difficulty:"Easy",events:1833,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:302.346,paritySummary:{errors:169,warns:8,resets:0},stars:.91},{njs:12,offset:-.75,notes:594,bombs:0,obstacles:83,nps:1.964,length:806.324,characteristic:"Standard",difficulty:"Normal",events:1833,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:302.372,paritySummary:{errors:9,warns:4,resets:0},stars:1.22},{njs:14,offset:.75,notes:847,bombs:0,obstacles:34,nps:2.801,length:806.324,characteristic:"Standard",difficulty:"Hard",events:1834,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:302.372,paritySummary:{errors:0,warns:0,resets:0},stars:1.71},{njs:16,offset:.25,notes:1075,bombs:0,obstacles:30,nps:3.555,length:806.392,characteristic:"Standard",difficulty:"Expert",events:1834,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:302.397,paritySummary:{errors:0,warns:0,resets:0},stars:2.47},{njs:18,offset:-.1,notes:1236,bombs:0,obstacles:18,nps:4.088,length:806.257,characteristic:"Standard",difficulty:"ExpertPlus",events:1833,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:302.346,paritySummary:{errors:0,warns:0,resets:0},stars:5}],downloadURL:"https://cdn.beatsaver.com/d30db93f2c3c5a152b84ca364a691ef10c4efdb9.zip",coverURL:"https://cdn.beatsaver.com/d30db93f2c3c5a152b84ca364a691ef10c4efdb9.jpg",previewURL:"https://cdn.beatsaver.com/d30db93f2c3c5a152b84ca364a691ef10c4efdb9.mp3"}],createdAt:"2021-04-11T02:32:37.687Z",updatedAt:"2021-04-11T02:32:37.687Z",lastPublishedAt:"2021-04-11T02:32:37.687Z"},{id:"c213",name:"Pegboard Nerds - Rhythm Is A Dancer (ft. Tia Simone)",description:"The Pegboard Nerds Pack was planned months before I joined AlphaBeat, so obviously I wasn't planned in for it. \n\nI still felt like mapping a Pegboard Nerds song and the new track from the Monstercat Anniversary seemed like a good fit. You could see this as some kind of bonus map for the Pack, but it wont be included in the Playlist, because having 11 songs instead of 10 feels weird. \n\nIt's not as fleshed out as the maps in the Pack because I only joined a few days ago and wanted to release this around the same time the Pack comes out.\n\nI hope you enjoy it nevertheless!\n\nPreview: https://youtu.be/HEr8pkcDM7M\n\nFeedback on Discord: nitronik.exe#7974",uploader:{id:4284201,name:"nitronikexe",uniqueSet:!0,hash:"5cff0b7798cc5a672c855d84",avatar:"https://cdn.beatsaver.com/avatar/428230049704181760.png",type:"DISCORD"},metadata:{bpm:128,duration:225,songName:"Rhythm Is A Dancer",songSubName:"(ft. Tia Simone)",songAuthorName:"Pegboard Nerds",levelAuthorName:"nitronik.exe"},stats:{plays:0,downloads:2515,upvotes:942,downvotes:23,score:.916},uploaded:"2020-07-17T14:05:23.854Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"3255f65dd6a7d4dd3c9c1cb800e854d58f5d2e88",key:"c213",state:"Published",createdAt:"2020-07-17T14:05:23.854Z",sageScore:6,diffs:[{njs:10,offset:1,notes:185,bombs:0,obstacles:0,nps:.851,length:464,characteristic:"Standard",difficulty:"Easy",events:3954,chroma:!0,me:!1,ne:!1,cinema:!1,seconds:217.5,paritySummary:{errors:69,warns:10,resets:0}},{njs:12,offset:.5,notes:328,bombs:0,obstacles:0,nps:1.508,length:464,characteristic:"Standard",difficulty:"Normal",events:3954,chroma:!0,me:!1,ne:!1,cinema:!1,seconds:217.5,paritySummary:{errors:6,warns:0,resets:0}},{njs:14,offset:0,notes:561,bombs:0,obstacles:0,nps:2.561,length:467.25,characteristic:"Standard",difficulty:"Hard",events:3954,chroma:!0,me:!1,ne:!1,cinema:!1,seconds:219.023,paritySummary:{errors:4,warns:0,resets:0}},{njs:16,offset:0,notes:812,bombs:0,obstacles:0,nps:3.707,length:467.25,characteristic:"Standard",difficulty:"Expert",events:3954,chroma:!0,me:!1,ne:!1,cinema:!1,seconds:219.023,paritySummary:{errors:0,warns:0,resets:0}},{njs:19,offset:-.5,notes:1150,bombs:0,obstacles:2,nps:5.251,length:467.25,characteristic:"Standard",difficulty:"ExpertPlus",events:3954,chroma:!0,me:!1,ne:!1,cinema:!1,seconds:219.023,paritySummary:{errors:0,warns:0,resets:0}}],downloadURL:"https://cdn.beatsaver.com/3255f65dd6a7d4dd3c9c1cb800e854d58f5d2e88.zip",coverURL:"https://cdn.beatsaver.com/3255f65dd6a7d4dd3c9c1cb800e854d58f5d2e88.jpg",previewURL:"https://cdn.beatsaver.com/3255f65dd6a7d4dd3c9c1cb800e854d58f5d2e88.mp3"}],createdAt:"2020-07-17T14:05:23.854Z",updatedAt:"2020-07-17T14:05:23.854Z",lastPublishedAt:"2020-07-17T14:05:23.854Z"},{id:"6e1f",name:"Good Times Roll - GRiZ x Big Gigantic",description:"Huge thanks to Awfulnaut for letting me use his existing Good Times Roll map to create this updated version. <3",uploader:{id:4285169,name:"ryger",uniqueSet:!0,hash:"5cff0b7798cc5a672c855a42",avatar:"https://cdn.beatsaver.com/avatar/169266024502263808.png",type:"DISCORD"},metadata:{bpm:200,duration:146,songName:"Good Times Roll",songSubName:"",songAuthorName:"Griz x Big Gigantic",levelAuthorName:"Awfulnaut, Ryger"},stats:{plays:0,downloads:639,upvotes:434,downvotes:2,score:.916},uploaded:"2019-11-04T02:30:11.352Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"6cb7b184a496b917739bc59a9012029ebb9e340c",key:"6e1f",state:"Published",createdAt:"2019-11-04T02:30:11.352Z",sageScore:4,diffs:[{njs:10,offset:0,notes:354,bombs:0,obstacles:11,nps:2.551,length:462.5,characteristic:"Standard",difficulty:"Hard",events:1208,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:138.75,paritySummary:{errors:13,warns:6,resets:0}},{njs:14,offset:0,notes:518,bombs:0,obstacles:12,nps:3.733,length:462.5,characteristic:"Standard",difficulty:"Expert",events:1208,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:138.75,paritySummary:{errors:10,warns:21,resets:0}},{njs:15,offset:.5,notes:652,bombs:0,obstacles:10,nps:4.679,length:464.5,characteristic:"Standard",difficulty:"ExpertPlus",events:1208,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:139.35,paritySummary:{errors:33,warns:19,resets:0}}],downloadURL:"https://cdn.beatsaver.com/6cb7b184a496b917739bc59a9012029ebb9e340c.zip",coverURL:"https://cdn.beatsaver.com/6cb7b184a496b917739bc59a9012029ebb9e340c.jpg",previewURL:"https://cdn.beatsaver.com/6cb7b184a496b917739bc59a9012029ebb9e340c.mp3"}],createdAt:"2019-11-04T02:30:11.352Z",updatedAt:"2019-11-04T02:30:11.352Z",lastPublishedAt:"2019-11-04T02:30:11.352Z"},{id:"5b95",name:"The Living Tombstone - I Can't Fix You",description:"This is probably on the easier end of Expert+ so it should be enjoyable for those looking to step up from Expert after a little practice. This song has officially been tested to oblivion, but I am happy to hear any feedback.\n\nDifficulty: Expert+\nBPM: 174\nNotes: 1212\nNJS: 15\nNPS: 4.65\nSong Duration: 4:21\n\nPreview video can be found here: https://youtu.be/EkcKRlikwMY\n\nSpecial Thanks to Kival Evan for their playtesting and feedback!",uploader:{id:34679,name:"lukemortora",uniqueSet:!0,hash:"5cff0b7798cc5a672c855c16",avatar:"https://www.gravatar.com/avatar/5cff0b7798cc5a672c855c16?d=retro",type:"SIMPLE"},metadata:{bpm:174,duration:261,songName:"I Can't Fix You",songSubName:"",songAuthorName:"The Living Tombstone",levelAuthorName:"LukeMortora"},stats:{plays:0,downloads:1353,upvotes:1043,downvotes:28,score:.9159},uploaded:"2019-08-09T15:10:13.751Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"d074bc64340208a777eea440ba5e5a24f9d65d54",key:"5b95",state:"Published",createdAt:"2019-08-09T15:10:13.751Z",sageScore:6,diffs:[{njs:15,offset:0,notes:1212,bombs:117,obstacles:26,nps:4.971,length:707,characteristic:"Standard",difficulty:"ExpertPlus",events:2214,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:243.793,paritySummary:{errors:114,warns:78,resets:11}}],downloadURL:"https://cdn.beatsaver.com/d074bc64340208a777eea440ba5e5a24f9d65d54.zip",coverURL:"https://cdn.beatsaver.com/d074bc64340208a777eea440ba5e5a24f9d65d54.jpg",previewURL:"https://cdn.beatsaver.com/d074bc64340208a777eea440ba5e5a24f9d65d54.mp3"}],createdAt:"2019-08-09T15:10:13.751Z",updatedAt:"2019-08-09T15:10:13.751Z",lastPublishedAt:"2019-08-09T15:10:13.751Z"},{id:"3c1d",name:"Sound of an Orchestra - MIKA",description:"Expert Playthrough : https://youtu.be/Ql0bAjfNQ5M",uploader:{id:13320,name:"novashaft",uniqueSet:!0,hash:"5cff0b7398cc5a672c84ee55",avatar:"https://www.gravatar.com/avatar/5cff0b7398cc5a672c84ee55?d=retro",type:"SIMPLE"},metadata:{bpm:127,duration:180,songName:"Sound Of An Orchestra",songSubName:"MIKA",songAuthorName:"NovaShaft",levelAuthorName:"novashaft"},stats:{plays:0,downloads:2681,upvotes:693,downvotes:12,score:.9159},uploaded:"2019-03-06T16:56:54Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"ab5ec7d8c0976c8acb1ed48889fce51666fabf45",key:"3c1d",state:"Published",createdAt:"2019-03-06T16:56:54Z",sageScore:5,diffs:[{njs:11,offset:0,notes:325,bombs:0,obstacles:24,nps:1.869,length:368,characteristic:"Standard",difficulty:"Normal",events:869,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:173.858,paritySummary:{errors:18,warns:7,resets:0}},{njs:13,offset:0,notes:386,bombs:0,obstacles:24,nps:2.22,length:368,characteristic:"Standard",difficulty:"Hard",events:869,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:173.858,paritySummary:{errors:36,warns:32,resets:0}},{njs:15,offset:0,notes:482,bombs:0,obstacles:24,nps:2.772,length:368,characteristic:"Standard",difficulty:"Expert",events:869,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:173.858,paritySummary:{errors:40,warns:45,resets:0}}],downloadURL:"https://cdn.beatsaver.com/ab5ec7d8c0976c8acb1ed48889fce51666fabf45.zip",coverURL:"https://cdn.beatsaver.com/ab5ec7d8c0976c8acb1ed48889fce51666fabf45.jpg",previewURL:"https://cdn.beatsaver.com/ab5ec7d8c0976c8acb1ed48889fce51666fabf45.mp3"}],createdAt:"2019-03-06T16:56:54Z",updatedAt:"2019-03-06T16:56:54Z",lastPublishedAt:"2019-03-06T16:56:54Z"},{id:"ae9d",name:"A Cruel Angel's Thesis [22/7 Soundtrack] - Sakura Fujima",description:"A Cruel Angel's Thesis (Zankoku na Tenshi no Thesis) as covered by Sakura Fujima (CV: Sally Amaki.) from 22/7. It was originally sung by Takahashi Yoko as the opening of the anime Neon Genesis Evangelion. ",uploader:{id:58338,name:"Joetastic",uniqueSet:!0,hash:"5cff0b7498cc5a672c85050e",avatar:"https://cdn.beatsaver.com/avatar/227767566402191360.png",type:"DISCORD"},metadata:{bpm:128,duration:92,songName:"A Cruel Angel's Thesis",songSubName:"",songAuthorName:"Sakura Fujima",levelAuthorName:"Joetastic"},stats:{plays:0,downloads:4289,upvotes:1204,downvotes:36,score:.9158},uploaded:"2020-06-05T07:07:17.017Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"40e47564d01e50840b0aa9a3191ff09a2e5b56a1",key:"ae9d",state:"Published",createdAt:"2020-06-05T07:07:17.017Z",sageScore:4,diffs:[{njs:12,offset:0,notes:222,bombs:0,obstacles:32,nps:2.536,length:186.75,characteristic:"Standard",difficulty:"Hard",events:2286,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:87.539,paritySummary:{errors:2,warns:2,resets:0}},{njs:14,offset:0,notes:347,bombs:0,obstacles:32,nps:3.932,length:188.25,characteristic:"Standard",difficulty:"Expert",events:2286,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:88.242,paritySummary:{errors:0,warns:2,resets:0}},{njs:16,offset:-.2,notes:413,bombs:0,obstacles:22,nps:4.68,length:188.25,characteristic:"Standard",difficulty:"ExpertPlus",events:2280,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:88.242,paritySummary:{errors:0,warns:3,resets:0}}],downloadURL:"https://cdn.beatsaver.com/40e47564d01e50840b0aa9a3191ff09a2e5b56a1.zip",coverURL:"https://cdn.beatsaver.com/40e47564d01e50840b0aa9a3191ff09a2e5b56a1.jpg",previewURL:"https://cdn.beatsaver.com/40e47564d01e50840b0aa9a3191ff09a2e5b56a1.mp3"}],createdAt:"2020-06-05T07:07:17.017Z",updatedAt:"2020-06-05T07:07:17.017Z",lastPublishedAt:"2020-06-05T07:07:17.017Z"},{id:"65b7",name:"My First Kiss - Nightcore",description:"Youtube Preview: https://youtu.be/KxdCEgDG-AI",uploader:{id:23751,name:"monteblanco",uniqueSet:!0,hash:"5cff0b7798cc5a672c855ef5",avatar:"https://www.gravatar.com/avatar/5cff0b7798cc5a672c855ef5?d=retro",type:"SIMPLE"},metadata:{bpm:174.803,duration:156,songName:"My First Kiss - Nightcore",songSubName:"",songAuthorName:"Nightcore",levelAuthorName:"Monteblanco"},stats:{plays:0,downloads:709,upvotes:713,downvotes:13,score:.9158},uploaded:"2019-09-25T01:39:37.237Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"5723e29f0a39dcec76926c1fa8baf6e9a32c185b",key:"65b7",state:"Published",createdAt:"2019-09-25T01:39:37.237Z",sageScore:4,diffs:[{njs:15,offset:0,notes:623,bombs:4,obstacles:48,nps:4.134,length:439,characteristic:"Standard",difficulty:"Expert",events:743,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:150.684,paritySummary:{errors:0,warns:0,resets:1}}],downloadURL:"https://cdn.beatsaver.com/5723e29f0a39dcec76926c1fa8baf6e9a32c185b.zip",coverURL:"https://cdn.beatsaver.com/5723e29f0a39dcec76926c1fa8baf6e9a32c185b.jpg",previewURL:"https://cdn.beatsaver.com/5723e29f0a39dcec76926c1fa8baf6e9a32c185b.mp3"}],createdAt:"2019-09-25T01:39:37.237Z",updatedAt:"2019-09-25T01:39:37.237Z",lastPublishedAt:"2019-09-25T01:39:37.237Z"},{id:"4a4c",name:"[Anniversary] The Thrill - Nero, Porter Robinson [Ruckus]",description:"Part of the Anniversary Song Pack",uploader:{id:37070,name:"anniversaryteam",uniqueSet:!0,hash:"5cff0b7798cc5a672c8565a3",avatar:"https://www.gravatar.com/avatar/5cff0b7798cc5a672c8565a3?d=retro",type:"SIMPLE"},metadata:{bpm:160,duration:204,songName:"The Thrill (Porter Robinson Remix)",songSubName:"NERO, Porter Robinson",songAuthorName:"Ruckus",levelAuthorName:"AnniversaryTeam"},stats:{plays:0,downloads:2144,upvotes:1321,downvotes:42,score:.9158},uploaded:"2019-05-03T14:13:21Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"68496811309fe62303edde686eb160f8e45aa9ce",key:"4a4c",state:"Published",createdAt:"2019-05-03T14:13:21Z",sageScore:7,diffs:[{njs:10,offset:0,notes:232,bombs:0,obstacles:70,nps:1.197,length:516.688,characteristic:"Standard",difficulty:"Easy",events:9122,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:193.758,paritySummary:{errors:17,warns:7,resets:0}},{njs:12,offset:0,notes:489,bombs:0,obstacles:60,nps:2.524,length:516.692,characteristic:"Standard",difficulty:"Normal",events:9127,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:193.76,paritySummary:{errors:29,warns:20,resets:0}},{njs:13,offset:0,notes:635,bombs:0,obstacles:64,nps:3.274,length:517.188,characteristic:"Standard",difficulty:"Hard",events:9117,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:193.945,paritySummary:{errors:34,warns:35,resets:0}},{njs:18,offset:0,notes:1128,bombs:0,obstacles:36,nps:5.816,length:517.188,characteristic:"Standard",difficulty:"Expert",events:9117,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:193.945,paritySummary:{errors:36,warns:35,resets:0}},{njs:20,offset:0,notes:1115,bombs:0,obstacles:46,nps:5.749,length:517.188,characteristic:"Standard",difficulty:"ExpertPlus",events:9117,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:193.945,paritySummary:{errors:49,warns:73,resets:0}}],downloadURL:"https://cdn.beatsaver.com/68496811309fe62303edde686eb160f8e45aa9ce.zip",coverURL:"https://cdn.beatsaver.com/68496811309fe62303edde686eb160f8e45aa9ce.jpg",previewURL:"https://cdn.beatsaver.com/68496811309fe62303edde686eb160f8e45aa9ce.mp3"}],createdAt:"2019-05-03T14:13:21Z",updatedAt:"2019-05-03T14:13:21Z",lastPublishedAt:"2019-05-03T14:13:21Z"},{id:"a692",name:"[Noodle Touhou] Tare - VOLUPTE",description:"Easy, normal, hard, expert, expert+\r\n\r\nThis map is part of the first Touhou map pack brought to you by the Ramen Noodle mapper group! It contains all sorts of covers, arrangements and remix of the original Touhou soundtrack. We hope you enjoy it a lot!",uploader:{id:4235138,name:"CyanSnow",uniqueSet:!0,hash:"5cff0b7698cc5a672c8543ac",avatar:"https://cdn.beatsaver.com/avatar/154341137694326784.png",type:"DISCORD"},metadata:{bpm:128,duration:184,songName:"VOLUPTE",songSubName:"",songAuthorName:"Tare",levelAuthorName:"Aeroluna & CyanSnow"},stats:{plays:0,downloads:2792,upvotes:638,downvotes:10,score:.9156},uploaded:"2020-05-15T18:20:58.233Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"01ce5a3adc19e360ba0ffd8347f91b5dc974eb7c",key:"a692",state:"Published",createdAt:"2020-05-15T18:20:58.233Z",sageScore:6,diffs:[{njs:12,offset:.5,notes:254,bombs:0,obstacles:0,nps:1.411,length:384,characteristic:"Standard",difficulty:"Easy",events:13825,chroma:!0,me:!1,ne:!1,cinema:!1,seconds:180,paritySummary:{errors:6,warns:0,resets:0}},{njs:12,offset:.5,notes:404,bombs:0,obstacles:0,nps:2.244,length:384,characteristic:"Standard",difficulty:"Normal",events:13825,chroma:!0,me:!1,ne:!1,cinema:!1,seconds:180,paritySummary:{errors:1,warns:0,resets:0}},{njs:13,offset:.25,notes:541,bombs:0,obstacles:0,nps:3.006,length:384,characteristic:"Standard",difficulty:"Hard",events:13825,chroma:!0,me:!1,ne:!1,cinema:!1,seconds:180,paritySummary:{errors:0,warns:0,resets:0}},{njs:16,offset:-.25,notes:763,bombs:0,obstacles:0,nps:4.236,length:384.25,characteristic:"Standard",difficulty:"Expert",events:13825,chroma:!0,me:!1,ne:!1,cinema:!1,seconds:180.117,paritySummary:{errors:0,warns:0,resets:0}},{njs:18,offset:-.5,notes:1009,bombs:0,obstacles:0,nps:5.602,length:384.25,characteristic:"Standard",difficulty:"ExpertPlus",events:13825,chroma:!0,me:!1,ne:!1,cinema:!1,seconds:180.117,paritySummary:{errors:0,warns:0,resets:0}}],downloadURL:"https://cdn.beatsaver.com/01ce5a3adc19e360ba0ffd8347f91b5dc974eb7c.zip",coverURL:"https://cdn.beatsaver.com/01ce5a3adc19e360ba0ffd8347f91b5dc974eb7c.jpg",previewURL:"https://cdn.beatsaver.com/01ce5a3adc19e360ba0ffd8347f91b5dc974eb7c.mp3"}],createdAt:"2020-05-15T18:20:58.233Z",updatedAt:"2020-05-15T18:20:58.233Z",lastPublishedAt:"2020-05-15T18:20:58.233Z"},{id:"9fab",name:"Doom Crossing: Eternal Horizons",description:"3 Difficulties Included! \n\nAnother side release of mine! This song's chorus is so catchy, it got stuck in my head for days! Also I've been playing a ton of Animal Crossing ^^ \n\nDoom Crossing: Eternal Horizons by The Chalkeaters ft. Natalia Natchan\n\nBPM: 160\n\nLights by Loloppe's autolighter, Lolighter! With some manual touch ups!",uploader:{id:4289037,name:"mystikmol",uniqueSet:!0,hash:"5cff0b7298cc5a672c84eb52",avatar:"https://cdn.beatsaver.com/avatar/67941140636114944.png",type:"DISCORD"},metadata:{bpm:160,duration:83,songName:"Doom Crossing: Eternal Horizons",songSubName:"Short ver.",songAuthorName:"The Chalkeaters ft. Natalia Natchan",levelAuthorName:"Mystikmol"},stats:{plays:0,downloads:3574,upvotes:1563,downvotes:55,score:.9156},uploaded:"2020-04-27T15:22:22.520Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"f8b391a5fd0922062f7e3c10ccc1967f91da20a2",key:"9fab",state:"Published",createdAt:"2020-04-27T15:22:22.520Z",sageScore:3,diffs:[{njs:12,offset:0,notes:153,bombs:0,obstacles:0,nps:2.082,length:196,characteristic:"Standard",difficulty:"Normal",events:1926,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:73.5,paritySummary:{errors:0,warns:0,resets:0}},{njs:15,offset:0,notes:261,bombs:0,obstacles:1,nps:3.551,length:196,characteristic:"Standard",difficulty:"Hard",events:1926,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:73.5,paritySummary:{errors:0,warns:0,resets:0}},{njs:20,offset:0,notes:491,bombs:0,obstacles:0,nps:6.68,length:196,characteristic:"Standard",difficulty:"ExpertPlus",events:1927,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:73.5,paritySummary:{errors:0,warns:0,resets:0}}],downloadURL:"https://cdn.beatsaver.com/f8b391a5fd0922062f7e3c10ccc1967f91da20a2.zip",coverURL:"https://cdn.beatsaver.com/f8b391a5fd0922062f7e3c10ccc1967f91da20a2.jpg",previewURL:"https://cdn.beatsaver.com/f8b391a5fd0922062f7e3c10ccc1967f91da20a2.mp3"}],createdAt:"2020-04-27T15:22:22.520Z",updatedAt:"2020-04-27T15:22:22.520Z",lastPublishedAt:"2020-04-27T15:22:22.520Z"},{id:"12377",name:"Sangatsu no Phantasia - Pastel Rain",description:"use CHROMA mod for\n- cool lights\n- if you dont have chroma it'll just be greyed out PepeLaugh\n\nHappy New Years\n\nBPM | 135\nExpert+\nExpert\nHard\n\nThanks JohnnyDee for the playtest, what a qt\n\npreview: https://www.youtube.com/watch?v=hGq0EEsqgQQ\n\nthank you for playing\n\nDM any feedback on Discord\nETAN#8341",uploader:{id:4235140,name:"etan",uniqueSet:!0,hash:"5cff0b7798cc5a672c855775",avatar:"https://cdn.beatsaver.com/avatar/136373107559497728.png",type:"DISCORD"},metadata:{bpm:135,duration:212,songName:"Pastel Rain",songSubName:"",songAuthorName:"Sangatsu no Phantasia",levelAuthorName:"ETAN"},stats:{plays:0,downloads:4912,upvotes:776,downvotes:16,score:.9155},uploaded:"2021-01-03T08:08:53.577Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"2c01774fdb9c4bcc53df1707ade85cea6f043477",key:"12377",state:"Published",createdAt:"2021-01-03T08:08:53.577Z",sageScore:5,diffs:[{njs:12,offset:.5,notes:576,bombs:0,obstacles:58,nps:2.775,length:467,characteristic:"Standard",difficulty:"Hard",events:16659,chroma:!0,me:!1,ne:!1,cinema:!1,seconds:207.556,paritySummary:{errors:0,warns:0,resets:0}},{njs:15,offset:0,notes:882,bombs:0,obstacles:58,nps:4.249,length:467,characteristic:"Standard",difficulty:"Expert",events:16659,chroma:!0,me:!1,ne:!1,cinema:!1,seconds:207.556,paritySummary:{errors:0,warns:1,resets:0}},{njs:19,offset:-.5,notes:1180,bombs:0,obstacles:57,nps:5.685,length:467,characteristic:"Standard",difficulty:"ExpertPlus",events:16659,chroma:!0,me:!1,ne:!1,cinema:!1,seconds:207.556,paritySummary:{errors:0,warns:0,resets:0}}],downloadURL:"https://cdn.beatsaver.com/2c01774fdb9c4bcc53df1707ade85cea6f043477.zip",coverURL:"https://cdn.beatsaver.com/2c01774fdb9c4bcc53df1707ade85cea6f043477.jpg",previewURL:"https://cdn.beatsaver.com/2c01774fdb9c4bcc53df1707ade85cea6f043477.mp3"}],createdAt:"2021-01-03T08:08:53.577Z",updatedAt:"2021-01-03T08:08:53.577Z",lastPublishedAt:"2021-01-03T08:08:53.577Z"},{id:"1814",name:"Ghost",description:"???? ???? ? ????? ???? ?????????~\r\n\r\nEDIT: Fixed a double-down note.",uploader:{id:10509,name:"krydar",uniqueSet:!0,hash:"5cff0b7398cc5a672c84fe84",avatar:"https://www.gravatar.com/avatar/5cff0b7398cc5a672c84fe84?d=retro",type:"SIMPLE"},metadata:{bpm:120,duration:262,songName:"Ghost",songSubName:"Mystery Skulls",songAuthorName:"Kry",levelAuthorName:"Krydar"},stats:{plays:0,downloads:509,upvotes:1012,downvotes:27,score:.9155},uploaded:"2018-09-30T15:03:57Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"9430ecb46ce581ac51481d3a61e6fe3356dd4e61",key:"1814",state:"Published",createdAt:"2018-09-30T15:03:57Z",sageScore:5,diffs:[{njs:14,offset:0,notes:847,bombs:0,obstacles:138,nps:3.785,length:447.5,characteristic:"Standard",difficulty:"ExpertPlus",events:2331,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:223.75,paritySummary:{errors:35,warns:17,resets:0}}],downloadURL:"https://cdn.beatsaver.com/9430ecb46ce581ac51481d3a61e6fe3356dd4e61.zip",coverURL:"https://cdn.beatsaver.com/9430ecb46ce581ac51481d3a61e6fe3356dd4e61.jpg",previewURL:"https://cdn.beatsaver.com/9430ecb46ce581ac51481d3a61e6fe3356dd4e61.mp3"}],createdAt:"2018-09-30T15:03:57Z",updatedAt:"2018-09-30T15:03:57Z",lastPublishedAt:"2018-09-30T15:03:57Z"},{id:"6773",name:"Survive Said The Prophet - MUKANJYO - Vinland Saga OP song",description:"Youtube Preview: https://youtu.be/EHrf40IwTR8",uploader:{id:23751,name:"monteblanco",uniqueSet:!0,hash:"5cff0b7798cc5a672c855ef5",avatar:"https://www.gravatar.com/avatar/5cff0b7798cc5a672c855ef5?d=retro",type:"SIMPLE"},metadata:{bpm:190,duration:188,songName:"Survive Said The Prophet",songSubName:"",songAuthorName:"MUKANJYO",levelAuthorName:"Monteblanco"},stats:{plays:0,downloads:924,upvotes:561,downvotes:7,score:.9154},uploaded:"2019-10-03T00:15:52.884Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"cee8a59f1ec8c8cd4672c5428dda6999777870ff",key:"6773",state:"Published",createdAt:"2019-10-03T00:15:52.884Z",sageScore:5,diffs:[{njs:16,offset:0,notes:975,bombs:8,obstacles:6,nps:5.305,length:582,characteristic:"Standard",difficulty:"ExpertPlus",events:1135,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:183.789,paritySummary:{errors:0,warns:0,resets:1}}],downloadURL:"https://cdn.beatsaver.com/cee8a59f1ec8c8cd4672c5428dda6999777870ff.zip",coverURL:"https://cdn.beatsaver.com/cee8a59f1ec8c8cd4672c5428dda6999777870ff.jpg",previewURL:"https://cdn.beatsaver.com/cee8a59f1ec8c8cd4672c5428dda6999777870ff.mp3"}],createdAt:"2019-10-03T00:15:52.884Z",updatedAt:"2019-10-03T00:15:52.884Z",lastPublishedAt:"2019-10-03T00:15:52.884Z"},{id:"5281",name:"TheFatRat & Phaera - Sunlight",description:"Aww Yeah, it's glitch-hop baby! Colors of the map are Orange(ish) and Dark Blue (similar to the cover image). I had a lot of fun making this map and I hope you enjoy as well!\r\n\r\nPreview: https://www.youtube.com/watch?v=MLAjVcqpBlY",uploader:{id:57657,name:"pixelguymm",uniqueSet:!0,hash:"5cff0b7698cc5a672c8541a8",avatar:"https://cdn.beatsaver.com/avatar/434386941547511818.png",type:"DISCORD"},metadata:{bpm:106,duration:171,songName:"Sunlight",songSubName:"TheFatRat & Phaera",songAuthorName:"Pixelguy",levelAuthorName:"pixelguymm"},stats:{plays:0,downloads:701,upvotes:586,downvotes:8,score:.9154},uploaded:"2019-06-09T06:35:30Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"2d0ba779b5c8217f06a4c1267e8d872d4b46a4bb",key:"5281",state:"Published",createdAt:"2019-06-09T06:35:30Z",sageScore:4,diffs:[{njs:14,offset:0,notes:644,bombs:8,obstacles:36,nps:3.954,length:287.75,characteristic:"Standard",difficulty:"Expert",events:814,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:162.877,paritySummary:{errors:2,warns:2,resets:4}}],downloadURL:"https://cdn.beatsaver.com/2d0ba779b5c8217f06a4c1267e8d872d4b46a4bb.zip",coverURL:"https://cdn.beatsaver.com/2d0ba779b5c8217f06a4c1267e8d872d4b46a4bb.jpg",previewURL:"https://cdn.beatsaver.com/2d0ba779b5c8217f06a4c1267e8d872d4b46a4bb.mp3"}],createdAt:"2019-06-09T06:35:30Z",updatedAt:"2019-06-09T06:35:30Z",lastPublishedAt:"2019-06-09T06:35:30Z"},{id:"553e",name:"Happy Together (V2)",description:"Old map was borked since the last update, so here is a remade version, some patterns changed for more smooth, hard difficulty added.\n\nLights will feel old compare to what I do now",uploader:{id:4235153,name:"skeelie",uniqueSet:!0,hash:"5cff0b7698cc5a672c85507f",avatar:"https://cdn.beatsaver.com/avatar/119467937928052748.png",type:"DISCORD"},metadata:{bpm:121.2,duration:173,songName:"Happy Together",songSubName:"",songAuthorName:"The Turtles",levelAuthorName:"Skeelie"},stats:{plays:0,downloads:3463,upvotes:656,downvotes:11,score:.9153},uploaded:"2019-07-01T16:58:53.827Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"99d1d214dde61f736d5efd47da936476a5bd1e4e",key:"553e",state:"Published",createdAt:"2019-07-01T16:58:53.827Z",sageScore:3,diffs:[{njs:11,offset:0,notes:412,bombs:0,obstacles:0,nps:2.515,length:330.966,characteristic:"Standard",difficulty:"Hard",events:2137,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:163.845,paritySummary:{errors:32,warns:17,resets:0}},{njs:13,offset:0,notes:580,bombs:0,obstacles:0,nps:3.54,length:330.966,characteristic:"Standard",difficulty:"Expert",events:2137,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:163.845,paritySummary:{errors:52,warns:26,resets:0}}],downloadURL:"https://cdn.beatsaver.com/99d1d214dde61f736d5efd47da936476a5bd1e4e.zip",coverURL:"https://cdn.beatsaver.com/99d1d214dde61f736d5efd47da936476a5bd1e4e.jpg",previewURL:"https://cdn.beatsaver.com/99d1d214dde61f736d5efd47da936476a5bd1e4e.mp3"}],createdAt:"2019-07-01T16:58:53.827Z",updatedAt:"2019-07-01T16:58:53.827Z",lastPublishedAt:"2019-07-01T16:58:53.827Z"},{id:"540b",name:"Keep The Rave Alive - Jauz x Laser Laser Laser (collab w/Heisenberg)",description:"Requires Mapping Extensions Mod. Do not use Left-Handed/Mirror mode!\n\n128 BPM / 5:00 Runtime\nHard - 488 Notes\nExpert - 794 Notes\nExpert+ - 1157 Notes\n\nGameplay: https://youtu.be/lxfCwV_NZCA",uploader:{id:4284981,name:"skylerwallace",uniqueSet:!0,hash:"5cff0b7298cc5a672c84ea67",avatar:"https://cdn.beatsaver.com/avatar/398344856868487168.png",type:"DISCORD"},metadata:{bpm:128,duration:300,songName:"Keep The Rave Alive",songSubName:"Lazer Lazer Lazer",songAuthorName:"Jauz",levelAuthorName:"Skyler Wallace & Heisenberg"},stats:{plays:0,downloads:2589,upvotes:1571,downvotes:56,score:.9153},uploaded:"2019-06-22T18:12:49.515Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"511bfb7e192faa0615691c4e4e8d21bc162a84cf",key:"540b",state:"Published",createdAt:"2019-06-22T18:12:49.515Z",sageScore:8,diffs:[{njs:12,offset:1,notes:488,bombs:0,obstacles:1105,nps:1.712,length:608,characteristic:"Standard",difficulty:"Hard",events:16325,chroma:!1,me:!0,ne:!1,cinema:!1,seconds:285,paritySummary:{errors:74,warns:77,resets:0}},{njs:16,offset:0,notes:794,bombs:8,obstacles:1105,nps:2.786,length:608,characteristic:"Standard",difficulty:"Expert",events:16325,chroma:!1,me:!0,ne:!1,cinema:!1,seconds:285,paritySummary:{errors:51,warns:62,resets:4}},{njs:16,offset:0,notes:1157,bombs:0,obstacles:1105,nps:4.06,length:608,characteristic:"Standard",difficulty:"ExpertPlus",events:16325,chroma:!1,me:!0,ne:!1,cinema:!1,seconds:285,paritySummary:{errors:0,warns:0,resets:0}},{njs:19,offset:0,notes:0,bombs:0,obstacles:0,nps:0,length:0,characteristic:"Lightshow",difficulty:"Easy",events:16325,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:0,paritySummary:{errors:0,warns:0,resets:0}},{njs:19,offset:0,notes:0,bombs:0,obstacles:1105,nps:0,length:0,characteristic:"Lightshow",difficulty:"Normal",events:16325,chroma:!1,me:!0,ne:!1,cinema:!1,seconds:0,paritySummary:{errors:0,warns:0,resets:0}}],downloadURL:"https://cdn.beatsaver.com/511bfb7e192faa0615691c4e4e8d21bc162a84cf.zip",coverURL:"https://cdn.beatsaver.com/511bfb7e192faa0615691c4e4e8d21bc162a84cf.jpg",previewURL:"https://cdn.beatsaver.com/511bfb7e192faa0615691c4e4e8d21bc162a84cf.mp3"}],createdAt:"2019-06-22T18:12:49.515Z",updatedAt:"2019-06-22T18:12:49.515Z",lastPublishedAt:"2019-06-22T18:12:49.515Z"},{id:"321d",name:"Black Bullet [Black Bullet Opening] - fripSide",description:"Black Bullet, the opening song for the anime of the same name by Fripside!",uploader:{id:58338,name:"Joetastic",uniqueSet:!0,hash:"5cff0b7498cc5a672c85050e",avatar:"https://cdn.beatsaver.com/avatar/227767566402191360.png",type:"DISCORD"},metadata:{bpm:155,duration:262,songName:"Black Bullet",songSubName:"FripSide",songAuthorName:"Joetastic",levelAuthorName:"Joetastic"},stats:{plays:0,downloads:1907,upvotes:880,downvotes:21,score:.9152},uploaded:"2019-01-29T15:26:42Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"9e25062d995e1e0958b4eba4e7ba56f053e00b2c",key:"321d",state:"Published",createdAt:"2019-01-29T15:26:42Z",sageScore:6,diffs:[{njs:15,offset:0,notes:1252,bombs:0,obstacles:44,nps:4.878,length:663,characteristic:"Standard",difficulty:"Expert",events:3992,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:256.645,paritySummary:{errors:80,warns:87,resets:0}}],downloadURL:"https://cdn.beatsaver.com/9e25062d995e1e0958b4eba4e7ba56f053e00b2c.zip",coverURL:"https://cdn.beatsaver.com/9e25062d995e1e0958b4eba4e7ba56f053e00b2c.jpg",previewURL:"https://cdn.beatsaver.com/9e25062d995e1e0958b4eba4e7ba56f053e00b2c.mp3"}],createdAt:"2019-01-29T15:26:42Z",updatedAt:"2019-01-29T15:26:42Z",lastPublishedAt:"2019-01-29T15:26:42Z"},{id:"1e9b",name:"Du Hast by Rammstein (Kole Edit) [One Saber]",description:"UPDATED 6th november 2018: There were some misdirected notes and some minor flow issues that has now been corrected.You should now be able to get Full Combo much more intuitively! Please download again if you've played the map before as the scoreboards are reset. Sorry for the trouble!\r\n\r\nCan't have enough of Du Hast by Rammstein? Good! Cause here is a One Saber version of that song! If you play the regular (Dual Saber) version of this map then you'll find it familiar to that version.\r\n\r\nSong has been edited (shortened) to be tighter and not too repetitive.\r\n\r\n!! ONE SABER MODE MAP, start it from the ONE SABER MENU for best experience! !!\r\n\r\nPreview:\r\nhttps://youtu.be/wTAUDviTUcQ\r\n\r\nBPM: 125.09\r\nDuration: 2:57\r\nHard, Expert and Expert+ difficulties.\r\n\r\nHard: 331 notes, 0 obstacles, 0 mines\r\nExpert: 502 notes, 0 obstacles, 0 mines\r\nExpert+: 646 notes, 0 obstacles, 0 mines\r\n\r\nThanks to Hen Tie, ManDynasty, Red Magi and Civ for playtesting!\r\n\r\nRegular (Dual Saber) version here:\r\nhttps://beatsaver.com/browse/detail/6707-6348\r\n\r\nEnjoy!",uploader:{id:4285318,name:"kolezan",uniqueSet:!0,hash:"5cff0b7398cc5a672c84fcbb",avatar:"https://cdn.beatsaver.com/avatar/220513618763055106.png",type:"DISCORD"},metadata:{bpm:125,duration:177,songName:"Du Hast (One Saber)",songSubName:"Rammstein",songAuthorName:"Level by Kolezan",levelAuthorName:"Kolezan"},stats:{plays:0,downloads:2751,upvotes:879,downvotes:21,score:.9152},uploaded:"2018-11-06T21:46:57Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"e6cb01196d2256586c805df1baf910f8036005a7",key:"1e9b",state:"Published",createdAt:"2018-11-06T21:46:57Z",sageScore:4,diffs:[{njs:12,offset:0,notes:331,bombs:0,obstacles:0,nps:1.96,length:352,characteristic:"OneSaber",difficulty:"Hard",events:581,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:168.96,paritySummary:{errors:40,warns:38,resets:0}},{njs:12,offset:0,notes:501,bombs:0,obstacles:0,nps:2.967,length:352,characteristic:"OneSaber",difficulty:"Expert",events:581,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:168.96,paritySummary:{errors:42,warns:50,resets:0}},{njs:12,offset:0,notes:643,bombs:0,obstacles:0,nps:3.808,length:352,characteristic:"OneSaber",difficulty:"ExpertPlus",events:581,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:168.96,paritySummary:{errors:47,warns:51,resets:0}}],downloadURL:"https://cdn.beatsaver.com/e6cb01196d2256586c805df1baf910f8036005a7.zip",coverURL:"https://cdn.beatsaver.com/e6cb01196d2256586c805df1baf910f8036005a7.jpg",previewURL:"https://cdn.beatsaver.com/e6cb01196d2256586c805df1baf910f8036005a7.mp3"}],createdAt:"2018-11-06T21:46:57Z",updatedAt:"2018-11-06T21:46:57Z",lastPublishedAt:"2018-11-06T21:46:57Z"},{id:"68a4",name:"Paramore - Misery Business",description:"A true story about the hardships of young love, from one of the leading pioneers of alternative rock. The patterns aim to capture the same fiery energy and jumpiness from its prime. Cheers!\n\nINFO:\nBPM: 173.01\nLength: 3:19\nAll Standard Difficulties\n\nCONTRIBUTORS:\nKival Evan - Tester (Expert+)\nHelenCarnate - Tester (Expert)\nCyanSnow - Tester (Expert+)\nLaser Wrath - Tester (All Standard Difficulties)",uploader:{id:4284238,name:"officialMECH",uniqueSet:!0,hash:"5d51c536c53019000612f266",avatar:"https://cdn.beatsaver.com/avatar/386290335401246721.png",type:"DISCORD"},metadata:{bpm:173.01,duration:200,songName:"Misery Business",songSubName:"",songAuthorName:"Paramore",levelAuthorName:"officialMECH"},stats:{plays:0,downloads:5443,upvotes:1673,downvotes:62,score:.9151},uploaded:"2019-10-08T16:59:29.069Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"a46e07bb84c22dd1f371df0876fd828195b2c8ef",key:"68a4",state:"Published",createdAt:"2019-10-08T16:59:29.069Z",sageScore:8,diffs:[{njs:11,offset:0,notes:272,bombs:0,obstacles:38,nps:1.406,length:558,characteristic:"Standard",difficulty:"Easy",events:5e3,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:193.515,paritySummary:{errors:20,warns:13,resets:0}},{njs:11,offset:0,notes:360,bombs:0,obstacles:38,nps:1.86,length:558,characteristic:"Standard",difficulty:"Normal",events:5e3,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:193.515,paritySummary:{errors:54,warns:45,resets:0}},{njs:12,offset:0,notes:572,bombs:0,obstacles:38,nps:2.956,length:558,characteristic:"Standard",difficulty:"Hard",events:5e3,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:193.515,paritySummary:{errors:12,warns:8,resets:0}},{njs:15,offset:1,notes:946,bombs:2,obstacles:38,nps:4.889,length:558,characteristic:"Standard",difficulty:"Expert",events:5e3,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:193.515,paritySummary:{errors:6,warns:0,resets:0}},{njs:18,offset:.5,notes:1240,bombs:4,obstacles:38,nps:6.408,length:558,characteristic:"Standard",difficulty:"ExpertPlus",events:5e3,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:193.515,paritySummary:{errors:2,warns:0,resets:0}}],downloadURL:"https://cdn.beatsaver.com/a46e07bb84c22dd1f371df0876fd828195b2c8ef.zip",coverURL:"https://cdn.beatsaver.com/a46e07bb84c22dd1f371df0876fd828195b2c8ef.jpg",previewURL:"https://cdn.beatsaver.com/a46e07bb84c22dd1f371df0876fd828195b2c8ef.mp3"}],createdAt:"2019-10-08T16:59:29.069Z",updatedAt:"2019-10-08T16:59:29.069Z",lastPublishedAt:"2019-10-08T16:59:29.069Z"},{id:"225",name:"Clint Eastwood - Gorillaz",description:"Easy/Normal/Hard/Expert - Audio is as loud without clipping I swear! 100% Expert Playthrough: https://bit.ly/2LuFcxq\r\n\r\nHave fun! =D\r\n\r\n- Freeek =)",uploader:{id:47581,name:"freeek",uniqueSet:!0,hash:"5cff0b7298cc5a672c84e8ad",avatar:"https://www.gravatar.com/avatar/5cff0b7298cc5a672c84e8ad?d=retro",type:"SIMPLE"},metadata:{bpm:84,duration:200,songName:"Clint Eastwood",songSubName:"Gorillaz",songAuthorName:"unknow",levelAuthorName:"freeek"},stats:{plays:0,downloads:7585,upvotes:7017,downvotes:404,score:.9151},uploaded:"2018-05-25T20:58:36Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"507f0e09326d37e09dca08e3c2597f027dbe1940",key:"225",state:"Published",createdAt:"2018-05-25T20:58:36Z",sageScore:6,diffs:[{njs:10,offset:0,notes:297,bombs:0,obstacles:57,nps:1.575,length:264,characteristic:"Standard",difficulty:"Easy",events:1281,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:188.571,paritySummary:{errors:0,warns:0,resets:0}},{njs:10,offset:0,notes:358,bombs:0,obstacles:62,nps:1.906,length:263,characteristic:"Standard",difficulty:"Normal",events:1281,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:187.857,paritySummary:{errors:37,warns:18,resets:0}},{njs:10,offset:0,notes:514,bombs:0,obstacles:67,nps:2.721,length:264.5,characteristic:"Standard",difficulty:"Hard",events:1281,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:188.929,paritySummary:{errors:65,warns:85,resets:0}},{njs:10,offset:0,notes:681,bombs:0,obstacles:67,nps:3.473,length:274.5,characteristic:"Standard",difficulty:"Expert",events:1281,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:196.071,paritySummary:{errors:97,warns:102,resets:0}}],downloadURL:"https://cdn.beatsaver.com/507f0e09326d37e09dca08e3c2597f027dbe1940.zip",coverURL:"https://cdn.beatsaver.com/507f0e09326d37e09dca08e3c2597f027dbe1940.jpg",previewURL:"https://cdn.beatsaver.com/507f0e09326d37e09dca08e3c2597f027dbe1940.mp3"}],createdAt:"2018-05-25T20:58:36Z",updatedAt:"2018-05-25T20:58:36Z",lastPublishedAt:"2018-05-25T20:58:36Z"},{id:"3dd6",name:"Saeed - Infected Mushroom",description:"Collab between Bomb, Heisenberg, Rexxz and Ruckus\r\nBomb: 0 - 1:32\r\nHeisenberg: 1:32 - 3:03\r\nRexxz: 3:03 - 5:22\r\nRuckus: 5:22 ->",uploader:{id:4284846,name:"rexxz",uniqueSet:!0,hash:"5cff0b7598cc5a672c85311e",avatar:"https://cdn.beatsaver.com/avatar/101849894876106752.png",type:"DISCORD"},metadata:{bpm:145,duration:397,songName:"Saeed",songSubName:"Infected Mushroom",songAuthorName:"Bomb, Heisenberg, Rexxz, Ruckus",levelAuthorName:"Rexxz"},stats:{plays:0,downloads:1406,upvotes:1143,downvotes:34,score:.9151},uploaded:"2019-03-13T20:51:03Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"3f3d4ad451b3671e881776c88a67148326ccc9c5",key:"3dd6",state:"Published",createdAt:"2019-03-13T20:51:03Z",sageScore:6,diffs:[{njs:14,offset:0,notes:821,bombs:0,obstacles:76,nps:2.176,length:912,characteristic:"Standard",difficulty:"Normal",events:22078,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:377.379,paritySummary:{errors:80,warns:20,resets:0}},{njs:15,offset:0,notes:1316,bombs:209,obstacles:43,nps:3.427,length:928,characteristic:"Standard",difficulty:"Expert",events:22039,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:384,paritySummary:{errors:57,warns:88,resets:2}},{njs:18,offset:0,notes:2169,bombs:470,obstacles:61,nps:5.57,length:941,characteristic:"Standard",difficulty:"ExpertPlus",events:22077,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:389.379,paritySummary:{errors:70,warns:68,resets:8}}],downloadURL:"https://cdn.beatsaver.com/3f3d4ad451b3671e881776c88a67148326ccc9c5.zip",coverURL:"https://cdn.beatsaver.com/3f3d4ad451b3671e881776c88a67148326ccc9c5.jpg",previewURL:"https://cdn.beatsaver.com/3f3d4ad451b3671e881776c88a67148326ccc9c5.mp3"}],createdAt:"2019-03-13T20:51:03Z",updatedAt:"2019-03-13T20:51:03Z",lastPublishedAt:"2019-03-13T20:51:03Z"},{id:"e4ae",name:"[Alphabeat - Marshmello Pack] Anne-Marie & Marshmello - FRIENDS",description:"Part of the Marshmello Music Pack - Presented by the Alphabeat Mapping Group.\n\nAlphabeat is back once again! This time, we bring a Marshmello Music Pack - mapped by 3 members of the group over 6 different songs (with a bonus Expert+ only song)!\n\nPreview:\nhttps://www.youtube.com/watch?v=bW00nvk7JgU\n\nTimeweaver: https://beatsaver.com/uploader/5d47d586c5301900060b2f6c\nNitronik.exe: https://beatsaver.com/uploader/5cff0b7798cc5a672c855d84\nFirestrike: https://beatsaver.com/uploader/5cff0b7698cc5a672c85479f\n\nWatch the Marshmello Music Pack Trailer, created by Pixelguy: \nhttps://youtu.be/pzNkJ7tFcHM\n\nAll songs included in this pack:\n- Be Kind (Firestrike)\n- Wolves (Timeweaver)\n- Summer (Firestrike)\n- FRIENDS (Nitronik.exe)\n- Falling To Pieces (Nitronik.exe)\n- Rescue Me (Nitronik.exe)\n- [Bonus Song] Chasing Colors (Timeweaver)\n\nChroma is recommended for the best experience.\nDon't forget to grab the Mello Notes created alongside this pack, by Nitronik.exe: https://modelsaber.com/Bloqs/?id=1599384157&pc\nGet the playlist here: https://bsaber.com/marshmello-pack/",uploader:{id:4284201,name:"nitronikexe",uniqueSet:!0,hash:"5cff0b7798cc5a672c855d84",avatar:"https://cdn.beatsaver.com/avatar/428230049704181760.png",type:"DISCORD"},metadata:{bpm:190,duration:204,songName:"FRIENDS",songSubName:"(ft. Anne Marie)",songAuthorName:"Marshmello",levelAuthorName:"nitronik.exe"},stats:{plays:0,downloads:4733,upvotes:874,downvotes:21,score:.915},uploaded:"2020-09-06T11:06:01.474Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"6afef6c5baaf7348d0bb4107c78dc4e59ca511e2",key:"e4ae",state:"Published",createdAt:"2020-09-06T11:06:01.474Z",sageScore:7,diffs:[{njs:10,offset:.5,notes:171,bombs:0,obstacles:0,nps:.849,length:638,characteristic:"Standard",difficulty:"Easy",events:12015,chroma:!0,me:!1,ne:!1,cinema:!1,seconds:201.474,paritySummary:{errors:169,warns:0,resets:0}},{njs:12,offset:0,notes:345,bombs:0,obstacles:0,nps:1.712,length:638,characteristic:"Standard",difficulty:"Normal",events:12015,chroma:!0,me:!1,ne:!1,cinema:!1,seconds:201.474,paritySummary:{errors:0,warns:0,resets:0}},{njs:14,offset:-.5,notes:526,bombs:0,obstacles:0,nps:2.611,length:638,characteristic:"Standard",difficulty:"Hard",events:12015,chroma:!0,me:!1,ne:!1,cinema:!1,seconds:201.474,paritySummary:{errors:0,warns:0,resets:0}},{njs:16,offset:.75,notes:710,bombs:0,obstacles:0,nps:3.516,length:639.5,characteristic:"Standard",difficulty:"Expert",events:12016,chroma:!0,me:!1,ne:!1,cinema:!1,seconds:201.947,paritySummary:{errors:0,warns:0,resets:0}},{njs:18,offset:.25,notes:930,bombs:12,obstacles:16,nps:4.605,length:639.5,characteristic:"Standard",difficulty:"ExpertPlus",events:12015,chroma:!0,me:!1,ne:!1,cinema:!1,seconds:201.947,paritySummary:{errors:0,warns:3,resets:2}}],downloadURL:"https://cdn.beatsaver.com/6afef6c5baaf7348d0bb4107c78dc4e59ca511e2.zip",coverURL:"https://cdn.beatsaver.com/6afef6c5baaf7348d0bb4107c78dc4e59ca511e2.jpg",previewURL:"https://cdn.beatsaver.com/6afef6c5baaf7348d0bb4107c78dc4e59ca511e2.mp3"}],createdAt:"2020-09-06T11:06:01.474Z",updatedAt:"2020-09-06T11:06:01.474Z",lastPublishedAt:"2020-09-06T11:06:01.474Z"},{id:"ca40",name:"Kings & Queens - Ava Max",description:"A map requested by my sister so she can play it when she borrows my Quest for extended periods of time to practice her Beat Saber skills. ^_^\nShe helped me decide on some of the mapping decisions on this and helped me with play testing so some credit does go to her :D\n\nIf you have any suggestions about the map and would like to get in touch my discord is Edmard#5334\nNuff luv peeps!",uploader:{id:4285633,name:"edmard",uniqueSet:!0,hash:"5cff0b7798cc5a672c856604",avatar:"https://cdn.beatsaver.com/avatar/157188812462620672.png",type:"DISCORD"},metadata:{bpm:130,duration:162,songName:"Kings & Queens",songSubName:"",songAuthorName:"Ava Max",levelAuthorName:"Edmard"},stats:{plays:0,downloads:5634,upvotes:1649,downvotes:61,score:.915},uploaded:"2020-07-29T22:38:29.144Z",automapper:!1,ranked:!0,qualified:!1,versions:[{hash:"41d7c7b621d397db0723b55f75ab2ef6be1891e8",key:"ca40",state:"Published",createdAt:"2020-07-29T22:38:29.144Z",sageScore:3,diffs:[{njs:14,offset:0,notes:424,bombs:0,obstacles:29,nps:2.857,length:321.5,characteristic:"Standard",difficulty:"Hard",events:2338,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:148.385,paritySummary:{errors:0,warns:0,resets:0},stars:1.71},{njs:15,offset:0,notes:606,bombs:0,obstacles:25,nps:4.084,length:321.5,characteristic:"Standard",difficulty:"Expert",events:2338,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:148.385,paritySummary:{errors:0,warns:0,resets:0},stars:2.6},{njs:15,offset:-.3,notes:661,bombs:0,obstacles:22,nps:4.455,length:321.5,characteristic:"Standard",difficulty:"ExpertPlus",events:2338,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:148.385,paritySummary:{errors:0,warns:2,resets:0},stars:5.85}],downloadURL:"https://cdn.beatsaver.com/41d7c7b621d397db0723b55f75ab2ef6be1891e8.zip",coverURL:"https://cdn.beatsaver.com/41d7c7b621d397db0723b55f75ab2ef6be1891e8.jpg",previewURL:"https://cdn.beatsaver.com/41d7c7b621d397db0723b55f75ab2ef6be1891e8.mp3"}],createdAt:"2020-07-29T22:38:29.144Z",updatedAt:"2020-07-29T22:38:29.144Z",lastPublishedAt:"2020-07-29T22:38:29.144Z"},{id:"9a35",name:"[Tokyo Machine Pack] Tokyo Machine - PIXEL",description:"3/6\nPart of the Tokyo Machine Pack, a collab between Firestrike, Cyansnow and I.\nMap by me, lights by FireStrike.\n\nFireStrike's account: https://beatsaver.com/uploader/5cff0b7698cc5a672c85479f\nCyanSnow's account: https://beatsaver.com/uploader/5cff0b7698cc5a672c8543ac\n\nPlaylist: https://bsaber.com/tokyo-machine-pack/\n\nCheck out the trailer for the pack here: https://www.youtube.com/watch?v=lStPUnecsD8",uploader:{id:57657,name:"pixelguymm",uniqueSet:!0,hash:"5cff0b7698cc5a672c8541a8",avatar:"https://cdn.beatsaver.com/avatar/434386941547511818.png",type:"DISCORD"},metadata:{bpm:128,duration:201,songName:"PIXEL",songSubName:"",songAuthorName:"Tokyo Machine",levelAuthorName:"FireStrike & Pixel"},stats:{plays:0,downloads:1838,upvotes:650,downvotes:11,score:.915},uploaded:"2020-04-12T18:07:43.267Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"b5d3d5f97d34fc85c0a2cf694631bdf125229304",key:"9a35",state:"Published",createdAt:"2020-04-12T18:07:43.267Z",sageScore:4,diffs:[{njs:18,offset:-.3,notes:1172,bombs:54,obstacles:4,nps:6.016,length:415.625,characteristic:"Standard",difficulty:"ExpertPlus",events:4372,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:194.824,paritySummary:{errors:0,warns:0,resets:0}}],downloadURL:"https://cdn.beatsaver.com/b5d3d5f97d34fc85c0a2cf694631bdf125229304.zip",coverURL:"https://cdn.beatsaver.com/b5d3d5f97d34fc85c0a2cf694631bdf125229304.jpg",previewURL:"https://cdn.beatsaver.com/b5d3d5f97d34fc85c0a2cf694631bdf125229304.mp3"}],createdAt:"2020-04-12T18:07:43.267Z",updatedAt:"2020-04-12T18:07:43.267Z",lastPublishedAt:"2020-04-12T18:07:43.267Z"},{id:"c1d",name:"Good Times Roll",description:"Be sure to check out the other difficulties! There were certain patterns that I loved that only worked for some of the difficulties, and they're all super fun! Anyone playing Easy will find that Normal teaches you how to play harder maps while being very forgiving.\r\n\r\nAlso, I'm going on hiatus! This will be my last map for a good while since I'm back in school and also working full time. I'll still play here and there and maybe try to map a bit, but I likely won't release anything for several months. Hopefully this map will keep people satisfied for a while ;)\r\n\r\nhttps://youtu.be/vCbgECLTxpU",uploader:{id:44595,name:"awfulnaut",uniqueSet:!0,hash:"5cff0b7398cc5a672c84edac",avatar:"https://www.gravatar.com/avatar/5cff0b7398cc5a672c84edac?d=retro",type:"SIMPLE"},metadata:{bpm:200,duration:146,songName:"Good Times Roll",songSubName:"Griz x Big Gigantic",songAuthorName:"Awfulnaut",levelAuthorName:"awfulnaut"},stats:{plays:0,downloads:6704,upvotes:3141,downvotes:149,score:.915},uploaded:"2018-07-27T15:47:05Z",automapper:!1,ranked:!0,qualified:!1,versions:[{hash:"f22061809c798178786ca1b6e61b10ccbcbe8d28",key:"c1d",state:"Published",createdAt:"2018-07-27T15:47:05Z",sageScore:4,diffs:[{njs:10,offset:0,notes:356,bombs:8,obstacles:11,nps:2.566,length:462.5,characteristic:"Standard",difficulty:"Normal",events:1208,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:138.75,paritySummary:{errors:95,warns:15,resets:4},stars:1.45},{njs:10,offset:0,notes:469,bombs:8,obstacles:11,nps:3.38,length:462.5,characteristic:"Standard",difficulty:"Hard",events:1208,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:138.75,paritySummary:{errors:44,warns:29,resets:1},stars:1.88},{njs:10,offset:0,notes:519,bombs:0,obstacles:12,nps:3.741,length:462.5,characteristic:"Standard",difficulty:"Expert",events:1208,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:138.75,paritySummary:{errors:24,warns:41,resets:0},stars:2.25},{njs:10,offset:0,notes:634,bombs:0,obstacles:12,nps:4.569,length:462.5,characteristic:"Standard",difficulty:"ExpertPlus",events:1208,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:138.75,paritySummary:{errors:34,warns:48,resets:0},stars:2.74}],downloadURL:"https://cdn.beatsaver.com/f22061809c798178786ca1b6e61b10ccbcbe8d28.zip",coverURL:"https://cdn.beatsaver.com/f22061809c798178786ca1b6e61b10ccbcbe8d28.jpg",previewURL:"https://cdn.beatsaver.com/f22061809c798178786ca1b6e61b10ccbcbe8d28.mp3"}],createdAt:"2018-07-27T15:47:05Z",updatedAt:"2018-07-27T15:47:05Z",lastPublishedAt:"2018-07-27T15:47:05Z"},{id:"e7ce",name:"[NoodleGames Vol.2] Rivers in the Desert - Persona 5",description:"The Ramen Noodle group is back again to bring you a map pack full of our favorite video game soundtracks and game-inspired music!\n\nHere's one of my 4 Persona maps for the pack! Hope you enjoy.",uploader:{id:15368,name:"theab",uniqueSet:!0,hash:"5cff0b7698cc5a672c853a14",avatar:"https://www.gravatar.com/avatar/5cff0b7698cc5a672c853a14?d=retro",type:"SIMPLE"},metadata:{bpm:130,duration:224,songName:"Rivers In the Desert",songSubName:"(Short Ver.)",songAuthorName:"Shoji Meguro",levelAuthorName:"Ab"},stats:{plays:0,downloads:3270,upvotes:741,downvotes:15,score:.9149},uploaded:"2020-09-10T19:20:12.870Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"6dd531f3920735b2b1b64f39442fcb753b4a52a7",key:"e7ce",state:"Published",createdAt:"2020-09-10T19:20:12.870Z",sageScore:4,diffs:[{njs:16,offset:-.25,notes:760,bombs:0,obstacles:0,nps:3.441,length:478.5,characteristic:"Standard",difficulty:"Expert",events:941,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:220.846,paritySummary:{errors:2,warns:2,resets:0}},{njs:17,offset:-.35,notes:824,bombs:0,obstacles:0,nps:3.731,length:478.5,characteristic:"Standard",difficulty:"ExpertPlus",events:946,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:220.846,paritySummary:{errors:2,warns:0,resets:0}}],downloadURL:"https://cdn.beatsaver.com/6dd531f3920735b2b1b64f39442fcb753b4a52a7.zip",coverURL:"https://cdn.beatsaver.com/6dd531f3920735b2b1b64f39442fcb753b4a52a7.jpg",previewURL:"https://cdn.beatsaver.com/6dd531f3920735b2b1b64f39442fcb753b4a52a7.mp3"}],createdAt:"2020-09-10T19:20:12.870Z",updatedAt:"2020-09-10T19:20:12.870Z",lastPublishedAt:"2020-09-10T19:20:12.870Z"},{id:"d0be",name:"Bohemian Rhapsody - Queen",description:"Honestly, I never really liked that other version. And I'm sure some people would agree, so since it seemed like no one else was going fix it, I went and mapped it myself.\r\nEnjoy.\r\n\r\nP.S. - If kingpeuche ever plays this, good job man. Bohemian Rhapsody isn't an easy song to map, so I have some genuine respect for you.\r\n\r\nPlay kingpeuche's version(s) here: \r\nhttps://beatsaver.com/beatmap/4a6\r\nhttps://beatsaver.com/beatmap/77c\r\n\r\nSong Info:\r\nhttps://en.wikipedia.org/wiki/Bohemian_Rhapsody",uploader:{id:4284694,name:"jokidum",uniqueSet:!0,hash:"5e15518d47f1600006e912cc",avatar:"https://cdn.beatsaver.com/avatar/494282373094047745.png",type:"DISCORD"},metadata:{bpm:120,duration:356,songName:"Bohemian Rhapsody",songSubName:"- Queen",songAuthorName:"Queen",levelAuthorName:"Jokidum"},stats:{plays:0,downloads:8506,upvotes:1666,downvotes:62,score:.9149},uploaded:"2020-08-07T20:00:07.052Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"d19b4abf7d83d2882a5bf1f2bdc3b03491ef3eaf",key:"d0be",state:"Published",createdAt:"2020-08-07T20:00:07.052Z",sageScore:2,diffs:[{njs:12,offset:0,notes:1100,bombs:0,obstacles:0,nps:3.303,length:666,characteristic:"Standard",difficulty:"Expert",events:2875,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:333,paritySummary:{errors:4,warns:2,resets:0}},{njs:16,offset:0,notes:0,bombs:0,obstacles:0,nps:0,length:0,characteristic:"Lightshow",difficulty:"Easy",events:2875,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:0,paritySummary:{errors:0,warns:0,resets:0}}],downloadURL:"https://cdn.beatsaver.com/d19b4abf7d83d2882a5bf1f2bdc3b03491ef3eaf.zip",coverURL:"https://cdn.beatsaver.com/d19b4abf7d83d2882a5bf1f2bdc3b03491ef3eaf.jpg",previewURL:"https://cdn.beatsaver.com/d19b4abf7d83d2882a5bf1f2bdc3b03491ef3eaf.mp3"}],createdAt:"2020-08-07T20:00:07.052Z",updatedAt:"2020-08-07T20:00:07.052Z",lastPublishedAt:"2020-08-07T20:00:07.052Z"},{id:"96ff",name:"Imagine Dragons - Warriors (2020 ReMap)",description:"Two years ago on the 24th July 2018 I released my first beat saber map of Warriors by Imagine Dragons. Well now its back! and its BIGGER, LOUDER and more EPIC than ever! \n\nThe map was completely remade from the ground up, so new audio, new lights and completely new difficulties. Don't worry though, the old warriors will still remain on beatsaver just in case anyone prefers playing it.\n\nThanks to Strofan and Layanmeta for playtesting :P\n\nMap preview: https://youtu.be/pdb5F0Q1cwo",uploader:{id:4785,name:"stumi",uniqueSet:!1,hash:"5cff0b7398cc5a672c84f720",avatar:"https://www.gravatar.com/avatar/5cff0b7398cc5a672c84f720?d=retro",type:"SIMPLE"},metadata:{bpm:78,duration:172,songName:"Warriors (2020 ReMap)",songSubName:"",songAuthorName:"Imagine Dragons",levelAuthorName:"Stumi"},stats:{plays:0,downloads:7111,upvotes:1861,downvotes:73,score:.9149},uploaded:"2020-04-03T16:29:45.360Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"8ee2cc6242db4d138e620a347e3a2904f2a5b902",key:"96ff",state:"Published",createdAt:"2020-04-03T16:29:45.360Z",sageScore:5,diffs:[{njs:10,offset:0,notes:169,bombs:0,obstacles:67,nps:1.036,length:212,characteristic:"Standard",difficulty:"Easy",events:2808,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:163.077,paritySummary:{errors:32,warns:9,resets:0}},{njs:11,offset:0,notes:317,bombs:0,obstacles:82,nps:1.944,length:212,characteristic:"Standard",difficulty:"Normal",events:2808,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:163.077,paritySummary:{errors:52,warns:18,resets:0}},{njs:12,offset:.4,notes:506,bombs:4,obstacles:97,nps:3.103,length:212,characteristic:"Standard",difficulty:"Hard",events:2807,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:163.077,paritySummary:{errors:29,warns:11,resets:0}},{njs:16,offset:.2,notes:673,bombs:64,obstacles:130,nps:4.127,length:212,characteristic:"Standard",difficulty:"Expert",events:2808,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:163.077,paritySummary:{errors:20,warns:40,resets:11}}],downloadURL:"https://cdn.beatsaver.com/8ee2cc6242db4d138e620a347e3a2904f2a5b902.zip",coverURL:"https://cdn.beatsaver.com/8ee2cc6242db4d138e620a347e3a2904f2a5b902.jpg",previewURL:"https://cdn.beatsaver.com/8ee2cc6242db4d138e620a347e3a2904f2a5b902.mp3"}],createdAt:"2020-04-03T16:29:45.360Z",updatedAt:"2020-04-03T16:29:45.360Z",lastPublishedAt:"2020-04-03T16:29:45.360Z"},{id:"8f65",name:"Jump in the Line - Harry Belafonte",description:"My parents were big Harry Belafonte fans, and I grew up listening to this 1961 hit, Jump in the Line. In 1988, this song was a major part of the 1988 Michael Keaton classic, Beetlejuice. Who can forget Winona Ryder dancing in the air? Now you can dance along with her while slicing flying blocks!\n\nFully mapped Easy, Normal, Hard, Expert, Expert Plus Standard, and Expert Plus 360.\n\nThis song is part of my new song pack collaboration with MajorPickle: PickleTech Goes to the Movies - The 1980s.\n\nhttps://youtu.be/cbLl1ofeBZY",uploader:{id:78593,name:"techbutterfly",uniqueSet:!0,hash:"5cff0b7798cc5a672c8566f7",avatar:"https://cdn.beatsaver.com/avatar/527111497617506304.png",type:"DISCORD"},metadata:{bpm:115,duration:223,songName:"Jump in the Line",songSubName:"",songAuthorName:"Harry Belafonte",levelAuthorName:"TechButterfly"},stats:{plays:0,downloads:2510,upvotes:830,downvotes:19,score:.9149},uploaded:"2020-03-13T04:10:43.592Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"ba3e5d8bca161ef9e9f70383b6c33f83ecf8998a",key:"8f65",state:"Published",createdAt:"2020-03-13T04:10:43.592Z",sageScore:5,diffs:[{njs:8,offset:0,notes:274,bombs:0,obstacles:2,nps:1.256,length:418,characteristic:"Standard",difficulty:"Easy",events:919,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:218.087,paritySummary:{errors:67,warns:33,resets:0}},{njs:10,offset:0,notes:407,bombs:0,obstacles:2,nps:1.864,length:418.5,characteristic:"Standard",difficulty:"Normal",events:919,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:218.348,paritySummary:{errors:71,warns:55,resets:0}},{njs:12,offset:.5,notes:634,bombs:5,obstacles:2,nps:2.904,length:418.5,characteristic:"Standard",difficulty:"Hard",events:919,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:218.348,paritySummary:{errors:47,warns:51,resets:2}},{njs:12,offset:.5,notes:793,bombs:0,obstacles:2,nps:3.632,length:418.5,characteristic:"Standard",difficulty:"Expert",events:919,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:218.348,paritySummary:{errors:35,warns:46,resets:0}},{njs:13,offset:.5,notes:920,bombs:0,obstacles:2,nps:4.213,length:418.5,characteristic:"Standard",difficulty:"ExpertPlus",events:920,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:218.348,paritySummary:{errors:69,warns:77,resets:0}},{njs:13,offset:.5,notes:793,bombs:0,obstacles:2,nps:3.632,length:418.5,characteristic:"360Degree",difficulty:"ExpertPlus",events:1125,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:218.348,paritySummary:{errors:35,warns:46,resets:0}}],downloadURL:"https://cdn.beatsaver.com/ba3e5d8bca161ef9e9f70383b6c33f83ecf8998a.zip",coverURL:"https://cdn.beatsaver.com/ba3e5d8bca161ef9e9f70383b6c33f83ecf8998a.jpg",previewURL:"https://cdn.beatsaver.com/ba3e5d8bca161ef9e9f70383b6c33f83ecf8998a.mp3"}],createdAt:"2020-03-13T04:10:43.592Z",updatedAt:"2020-03-13T04:10:43.592Z",lastPublishedAt:"2020-03-13T04:10:43.592Z"},{id:"8e35",name:"Beat It [Punk Goes Pop Vol.2] - Fall Out Boy ft. John Mayer",description:"The first song in my up and coming Punk Goes Pop Volume 2 playlist! A punk rock cover of Beat It as covered by Fall Out Boy featuring John Mayer. Original song by Michael Jackson.",uploader:{id:58338,name:"Joetastic",uniqueSet:!0,hash:"5cff0b7498cc5a672c85050e",avatar:"https://cdn.beatsaver.com/avatar/227767566402191360.png",type:"DISCORD"},metadata:{bpm:150,duration:227,songName:"Beat It",songSubName:"ft. John Mayer",songAuthorName:"Fall Out Boy",levelAuthorName:"Joetastic"},stats:{plays:0,downloads:4056,upvotes:935,downvotes:24,score:.9149},uploaded:"2020-03-08T05:50:10.166Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"88474a324602552647553aa9533596c7cd882c60",key:"8e35",state:"Published",createdAt:"2020-03-08T05:50:10.166Z",sageScore:5,diffs:[{njs:10,offset:0,notes:396,bombs:0,obstacles:8,nps:1.827,length:542,characteristic:"Standard",difficulty:"Easy",events:7559,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:216.8,paritySummary:{errors:44,warns:39,resets:0}},{njs:12,offset:0,notes:531,bombs:0,obstacles:8,nps:2.405,length:552,characteristic:"Standard",difficulty:"Normal",events:7559,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:220.8,paritySummary:{errors:43,warns:55,resets:0}},{njs:13.5,offset:0,notes:863,bombs:0,obstacles:6,nps:3.909,length:552,characteristic:"Standard",difficulty:"Hard",events:7559,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:220.8,paritySummary:{errors:50,warns:49,resets:0}},{njs:15,offset:0,notes:878,bombs:0,obstacles:6,nps:3.976,length:552,characteristic:"Standard",difficulty:"Expert",events:7559,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:220.8,paritySummary:{errors:47,warns:54,resets:0}}],downloadURL:"https://cdn.beatsaver.com/88474a324602552647553aa9533596c7cd882c60.zip",coverURL:"https://cdn.beatsaver.com/88474a324602552647553aa9533596c7cd882c60.jpg",previewURL:"https://cdn.beatsaver.com/88474a324602552647553aa9533596c7cd882c60.mp3"}],createdAt:"2020-03-08T05:50:10.166Z",updatedAt:"2020-03-08T05:50:10.166Z",lastPublishedAt:"2020-03-08T05:50:10.166Z"},{id:"7395",name:"Bruh Sound Effect #2",description:"tried to get it ranked\nthey said common sense to me\nquite a bruh moment\n\nhaiku written by yours truly (its a true story btw)",uploader:{id:4285820,name:"ezconfirmed",uniqueSet:!0,hash:"5d6444b8589aee0006ff76ad",avatar:"https://cdn.beatsaver.com/avatar/343415744324960256.png",type:"DISCORD"},metadata:{bpm:120,duration:4,songName:"Bruh Sound Effect #2",songSubName:"",songAuthorName:"Jame Benedict",levelAuthorName:"eZconfirmed"},stats:{plays:0,downloads:908,upvotes:807,downvotes:18,score:.9149},uploaded:"2019-12-03T19:19:01.005Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"1c30514852ae45a9651d476fe748d2c9926facfc",key:"7395",state:"Published",createdAt:"2019-12-03T19:19:01.005Z",sageScore:1,diffs:[{njs:16,offset:0,notes:4,bombs:0,obstacles:0,nps:0,length:0,characteristic:"Standard",difficulty:"Normal",events:10,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:0,paritySummary:{errors:0,warns:0,resets:0}}],downloadURL:"https://cdn.beatsaver.com/1c30514852ae45a9651d476fe748d2c9926facfc.zip",coverURL:"https://cdn.beatsaver.com/1c30514852ae45a9651d476fe748d2c9926facfc.jpg",previewURL:"https://cdn.beatsaver.com/1c30514852ae45a9651d476fe748d2c9926facfc.mp3"}],createdAt:"2019-12-03T19:19:01.005Z",updatedAt:"2019-12-03T19:19:01.005Z",lastPublishedAt:"2019-12-03T19:19:01.005Z"},{id:"6361",name:"Choke - I DONT KNOW HOW BUT THEY FOUND ME",description:"Here's another fun and bouncy song! The lyrics are a bit...darker than the music would have you suggest though. So bite your tongue, and choke yourself to sleep.\n\nBPM: 120\nNPS: N - 2.45; H - 3.14; Ex - 3.96\nNotes: N - 482; H - 617; Ex - 778\nWalls: N - 28; H - 20; Ex - 17\nBombs: None!\n\nThanks to helencarnate and Checkthepan for testplaying!",uploader:{id:4285188,name:"fruhead",uniqueSet:!0,hash:"5cff0b7598cc5a672c852683",avatar:"https://cdn.beatsaver.com/avatar/174000100413145090.png",type:"DISCORD"},metadata:{bpm:120.251,duration:196,songName:"Choke",songSubName:"",songAuthorName:"I DONT KNOW HOW BUT THEY FOUND ME",levelAuthorName:"fruhead"},stats:{plays:0,downloads:1052,upvotes:388,downvotes:1,score:.9149},uploaded:"2019-09-14T17:56:33.555Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"ea073ec1320fd83c3b9c5e5be5fe2cb58e846b3f",key:"6361",state:"Published",createdAt:"2019-09-14T17:56:33.555Z",sageScore:6,diffs:[{njs:12,offset:0,notes:482,bombs:0,obstacles:28,nps:2.518,length:383.667,characteristic:"Standard",difficulty:"Normal",events:4223,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:191.433,paritySummary:{errors:8,warns:0,resets:0}},{njs:14,offset:0,notes:617,bombs:0,obstacles:20,nps:3.223,length:383.667,characteristic:"Standard",difficulty:"Hard",events:4223,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:191.433,paritySummary:{errors:3,warns:0,resets:0}},{njs:16,offset:0,notes:778,bombs:0,obstacles:17,nps:4.064,length:383.667,characteristic:"Standard",difficulty:"Expert",events:4223,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:191.433,paritySummary:{errors:4,warns:0,resets:0}}],downloadURL:"https://cdn.beatsaver.com/ea073ec1320fd83c3b9c5e5be5fe2cb58e846b3f.zip",coverURL:"https://cdn.beatsaver.com/ea073ec1320fd83c3b9c5e5be5fe2cb58e846b3f.jpg",previewURL:"https://cdn.beatsaver.com/ea073ec1320fd83c3b9c5e5be5fe2cb58e846b3f.mp3"}],createdAt:"2019-09-14T17:56:33.555Z",updatedAt:"2019-09-14T17:56:33.555Z",lastPublishedAt:"2019-09-14T17:56:33.555Z"},{id:"8600",name:"Tom Sawyer - Rush",description:"My tribute to Rush.",uploader:{id:4285077,name:"ris",uniqueSet:!0,hash:"5cff0b7598cc5a672c8535df",avatar:"https://cdn.beatsaver.com/avatar/191597992061435904.png",type:"DISCORD"},metadata:{bpm:88,duration:273,songName:"Tom Sawyer",songSubName:"",songAuthorName:"Rush",levelAuthorName:"Ris"},stats:{plays:0,downloads:2010,upvotes:806,downvotes:18,score:.9148},uploaded:"2020-02-11T03:37:38.994Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"1b39e3091cda17c7d35db7707e1f673a5e8ceb66",key:"8600",state:"Published",createdAt:"2020-02-11T03:37:38.994Z",sageScore:5,diffs:[{njs:10,offset:.5,notes:386,bombs:0,obstacles:0,nps:1.456,length:388.702,characteristic:"Standard",difficulty:"Normal",events:662,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:265.024,paritySummary:{errors:50,warns:42,resets:0}},{njs:12,offset:0,notes:748,bombs:0,obstacles:0,nps:2.822,length:388.702,characteristic:"Standard",difficulty:"Hard",events:662,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:265.024,paritySummary:{errors:74,warns:89,resets:0}},{njs:16,offset:.25,notes:1055,bombs:30,obstacles:0,nps:3.981,length:388.702,characteristic:"Standard",difficulty:"Expert",events:662,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:265.024,paritySummary:{errors:75,warns:86,resets:0}}],downloadURL:"https://cdn.beatsaver.com/1b39e3091cda17c7d35db7707e1f673a5e8ceb66.zip",coverURL:"https://cdn.beatsaver.com/1b39e3091cda17c7d35db7707e1f673a5e8ceb66.jpg",previewURL:"https://cdn.beatsaver.com/1b39e3091cda17c7d35db7707e1f673a5e8ceb66.mp3"}],createdAt:"2020-02-11T03:37:38.994Z",updatedAt:"2020-02-11T03:37:38.994Z",lastPublishedAt:"2020-02-11T03:37:38.994Z"},{id:"55d1",name:"Short Skirt Long Jacket - Cake",description:"Swing along with Cake's 2001 hit, Short Skirt Long Jacket. Even if you're not a Cake fan, you might remember this as the theme song for the TV show Chuck.\n\nFully mapped Easy, Normal, Hard, and Expert. Quest friendly!\n\nhttps://www.youtube.com/watch?v=1RKRbWus-qM",uploader:{id:78593,name:"techbutterfly",uniqueSet:!0,hash:"5cff0b7798cc5a672c8566f7",avatar:"https://cdn.beatsaver.com/avatar/527111497617506304.png",type:"DISCORD"},metadata:{bpm:120,duration:203,songName:"Short Skirt Long Jacket",songSubName:"",songAuthorName:"Cake",levelAuthorName:"TechButterfly"},stats:{plays:0,downloads:1700,upvotes:671,downvotes:12,score:.9148},uploaded:"2019-07-07T01:49:57.642Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"20b9326bd71db4454aba08df06b035ea536322a9",key:"55d1",state:"Published",createdAt:"2019-07-07T01:49:57.642Z",sageScore:5,diffs:[{njs:12,offset:0,notes:234,bombs:0,obstacles:4,nps:1.188,length:394,characteristic:"Standard",difficulty:"Easy",events:6191,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:197,paritySummary:{errors:69,warns:25,resets:0}},{njs:13,offset:0,notes:358,bombs:0,obstacles:4,nps:1.815,length:394.5,characteristic:"Standard",difficulty:"Normal",events:6191,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:197.25,paritySummary:{errors:90,warns:48,resets:0}},{njs:15,offset:0,notes:562,bombs:0,obstacles:44,nps:2.849,length:394.5,characteristic:"Standard",difficulty:"Hard",events:6191,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:197.25,paritySummary:{errors:31,warns:49,resets:0}},{njs:17,offset:0,notes:669,bombs:0,obstacles:32,nps:3.392,length:394.5,characteristic:"Standard",difficulty:"Expert",events:6195,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:197.25,paritySummary:{errors:45,warns:69,resets:0}}],downloadURL:"https://cdn.beatsaver.com/20b9326bd71db4454aba08df06b035ea536322a9.zip",coverURL:"https://cdn.beatsaver.com/20b9326bd71db4454aba08df06b035ea536322a9.jpg",previewURL:"https://cdn.beatsaver.com/20b9326bd71db4454aba08df06b035ea536322a9.mp3"}],createdAt:"2019-07-07T01:49:57.642Z",updatedAt:"2019-07-07T01:49:57.642Z",lastPublishedAt:"2019-07-07T01:49:57.642Z"},{id:"4a08",name:"Attack on Titan OP 5 | Shoukei to Shikabane no Michi | Shingeki no Kyojin OP 5| Mapped by Ab",description:"I offer all difficulties except Easy here. But Normal is pretty easy.\r\nSeizure warning I guess.",uploader:{id:15368,name:"theab",uniqueSet:!0,hash:"5cff0b7698cc5a672c853a14",avatar:"https://www.gravatar.com/avatar/5cff0b7698cc5a672c853a14?d=retro",type:"SIMPLE"},metadata:{bpm:178,duration:89,songName:"Attack on Titan OP5 (Shoukei to Shikabane no Michi)",songSubName:"Linked Horizon",songAuthorName:"Ab",levelAuthorName:"TheAb"},stats:{plays:0,downloads:2844,upvotes:891,downvotes:22,score:.9148},uploaded:"2019-05-02T20:07:56Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"922afca4bfe670e6ebff75c18245035744193d22",key:"4a08",state:"Published",createdAt:"2019-05-02T20:07:56Z",sageScore:3,diffs:[{njs:10,offset:0,notes:146,bombs:5,obstacles:5,nps:1.685,length:257,characteristic:"Standard",difficulty:"Normal",events:5631,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:86.629,paritySummary:{errors:62,warns:1,resets:2}},{njs:13,offset:0,notes:238,bombs:12,obstacles:7,nps:2.747,length:257,characteristic:"Standard",difficulty:"Hard",events:5631,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:86.629,paritySummary:{errors:30,warns:9,resets:2}},{njs:15,offset:1,notes:373,bombs:4,obstacles:6,nps:4.306,length:257,characteristic:"Standard",difficulty:"Expert",events:5631,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:86.629,paritySummary:{errors:19,warns:20,resets:2}},{njs:18,offset:0,notes:555,bombs:1,obstacles:3,nps:6.599,length:249.5,characteristic:"Standard",difficulty:"ExpertPlus",events:5634,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:84.101,paritySummary:{errors:29,warns:39,resets:0}}],downloadURL:"https://cdn.beatsaver.com/922afca4bfe670e6ebff75c18245035744193d22.zip",coverURL:"https://cdn.beatsaver.com/922afca4bfe670e6ebff75c18245035744193d22.jpg",previewURL:"https://cdn.beatsaver.com/922afca4bfe670e6ebff75c18245035744193d22.mp3"}],createdAt:"2019-05-02T20:07:56Z",updatedAt:"2019-05-02T20:07:56Z",lastPublishedAt:"2019-05-02T20:07:56Z"},{id:"487c",name:"Don't Stop Me Now - Queen",description:"Huge thanks to WhipStickGoStop for the full combo vid!\r\nhttps://www.youtube.com/watch?v=RPDvDY2HT58\r\n\r\nPlaytesters <3 WhipStickGoStop, XORoseGold, MozzVR, Izzake",uploader:{id:4285169,name:"ryger",uniqueSet:!0,hash:"5cff0b7798cc5a672c855a42",avatar:"https://cdn.beatsaver.com/avatar/169266024502263808.png",type:"DISCORD"},metadata:{bpm:120,duration:214,songName:"Don't Stop Me Now",songSubName:"Queen",songAuthorName:"Ryger",levelAuthorName:"Ryger"},stats:{plays:0,downloads:5041,upvotes:1291,downvotes:42,score:.9148},uploaded:"2019-04-26T16:28:36Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"9db67df13260c4715d33068e3982071ca6e3e815",key:"487c",state:"Published",createdAt:"2019-04-26T16:28:36Z",sageScore:6,diffs:[{njs:12,offset:0,notes:734,bombs:0,obstacles:1,nps:3.677,length:519.002,characteristic:"Standard",difficulty:"ExpertPlus",events:3998,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:259.501,paritySummary:{errors:71,warns:56,resets:0}}],downloadURL:"https://cdn.beatsaver.com/9db67df13260c4715d33068e3982071ca6e3e815.zip",coverURL:"https://cdn.beatsaver.com/9db67df13260c4715d33068e3982071ca6e3e815.jpg",previewURL:"https://cdn.beatsaver.com/9db67df13260c4715d33068e3982071ca6e3e815.mp3"}],createdAt:"2019-04-26T16:28:36Z",updatedAt:"2019-04-26T16:28:36Z",lastPublishedAt:"2019-04-26T16:28:36Z"},{id:"243c",name:"Ocarina of Time Medley [Smash Bros Map Pack]",description:"by Michiko Naruke\r\n\r\nPart of the Smash Bros map pack!\r\n\r\nVideo: https://youtu.be/lw7EN7Xu-9c",uploader:{id:39365,name:"todokete",uniqueSet:!0,hash:"5cff0b7398cc5a672c84ee70",avatar:"https://www.gravatar.com/avatar/5cff0b7398cc5a672c84ee70?d=retro",type:"SIMPLE"},metadata:{bpm:145,duration:114,songName:"Ocarina of Time Medley",songSubName:"Michiko Naruke",songAuthorName:"Todokete",levelAuthorName:"todokete"},stats:{plays:0,downloads:4995,upvotes:2238,downvotes:95,score:.9148},uploaded:"2018-12-07T00:16:02Z",automapper:!1,ranked:!0,qualified:!1,versions:[{hash:"00b539e86ea3f0b1e966544a297fb4942e499e6f",key:"243c",state:"Published",createdAt:"2018-12-07T00:16:02Z",sageScore:5,diffs:[{njs:11,offset:0,notes:239,bombs:0,obstacles:0,nps:2.179,length:265,characteristic:"Standard",difficulty:"Hard",events:882,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:109.655,paritySummary:{errors:34,warns:8,resets:0},stars:1.33},{njs:14,offset:0,notes:330,bombs:0,obstacles:0,nps:3.008,length:265,characteristic:"Standard",difficulty:"Expert",events:882,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:109.655,paritySummary:{errors:37,warns:37,resets:0},stars:2.97}],downloadURL:"https://cdn.beatsaver.com/00b539e86ea3f0b1e966544a297fb4942e499e6f.zip",coverURL:"https://cdn.beatsaver.com/00b539e86ea3f0b1e966544a297fb4942e499e6f.jpg",previewURL:"https://cdn.beatsaver.com/00b539e86ea3f0b1e966544a297fb4942e499e6f.mp3"}],createdAt:"2018-12-07T00:16:02Z",updatedAt:"2018-12-07T00:16:02Z",lastPublishedAt:"2018-12-07T00:16:02Z"},{id:"115c2",name:"[Wall Map] Alan Walker - Darkside (feat. Au/Ra and Tomine Harket)",description:"-FALL INTO THE DARKSIDE-\n\nMy first big wall map to feature ne 1.2 pogger, be prepared for a long load time and possible lag spikes.\nThanks to Rizthesnuggie and Liams2005 for contributing their maps and for putting up with my shit throughout this :)\nThanks to Krueger for answering all my programming questions.\n\nKrueger's Beatsaber Vids: https://www.youtube.com/watch?v=Q0hNfhk4Ngs&t=142s\nPlaythrough: https://www.youtube.com/watch?v=9BqzyBwFPE4\n\nmy ne tool: https://github.com/thelightdesigner/ScuffedWalls/releases/tag/v0.5.0-beta\n\nRequirements:\nNoodle Extensions\nChroma\nCustom JSON Data",uploader:{id:73008,name:"thelightdesigner",uniqueSet:!0,hash:"5cff0b7798cc5a672c85627a",avatar:"https://cdn.beatsaver.com/avatar/480555157952659489.png",type:"DISCORD"},metadata:{bpm:170,duration:178,songName:"Darkside",songSubName:"(ft. Au/Ra & Tomine Harket)",songAuthorName:"Alan Walker",levelAuthorName:"Liam, Riz & KyleT"},stats:{plays:0,downloads:3946,upvotes:1365,downvotes:46,score:.9147},uploaded:"2020-11-27T05:08:50.986Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"713e301fc4f774edf4ea1001a19dd5bf7e3f4ce6",key:"115c2",state:"Published",createdAt:"2020-11-27T05:08:50.986Z",sageScore:1,diffs:[{njs:16,offset:0,notes:500,bombs:24,obstacles:65952,nps:2.905,length:487.667,characteristic:"Standard",difficulty:"Hard",events:1,chroma:!0,me:!1,ne:!0,cinema:!1,seconds:172.118,paritySummary:{errors:0,warns:0,resets:0}},{njs:17,offset:0,notes:610,bombs:36,obstacles:65952,nps:3.571,length:484,characteristic:"Standard",difficulty:"Expert",events:1,chroma:!0,me:!1,ne:!0,cinema:!1,seconds:170.824,paritySummary:{errors:1,warns:0,resets:12}},{njs:18,offset:0,notes:866,bombs:0,obstacles:65952,nps:5.07,length:484,characteristic:"Standard",difficulty:"ExpertPlus",events:1,chroma:!0,me:!1,ne:!0,cinema:!1,seconds:170.824,paritySummary:{errors:0,warns:0,resets:0}}],downloadURL:"https://cdn.beatsaver.com/713e301fc4f774edf4ea1001a19dd5bf7e3f4ce6.zip",coverURL:"https://cdn.beatsaver.com/713e301fc4f774edf4ea1001a19dd5bf7e3f4ce6.jpg",previewURL:"https://cdn.beatsaver.com/713e301fc4f774edf4ea1001a19dd5bf7e3f4ce6.mp3"}],createdAt:"2020-11-27T05:08:50.986Z",updatedAt:"2020-11-27T05:08:50.986Z",lastPublishedAt:"2020-11-27T05:08:50.986Z"},{id:"57cb",name:"CAN CAN WORLD",description:"Twitter: https://twitter.com/Dack731",uploader:{id:4285250,name:"dack",uniqueSet:!0,hash:"5cff0b7598cc5a672c852c6f",avatar:"https://cdn.beatsaver.com/avatar/297344689798119424.png",type:"DISCORD"},metadata:{bpm:158,duration:297,songName:"CAN CAN WORLD",songSubName:"",songAuthorName:"MAKKERONI",levelAuthorName:"Dack"},stats:{plays:0,downloads:813,upvotes:523,downvotes:6,score:.9147},uploaded:"2019-07-18T23:50:08.241Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"d2dab61784b612b9b807e127260a81ed974315af",key:"57cb",state:"Published",createdAt:"2019-07-18T23:50:08.241Z",sageScore:3,diffs:[{njs:12,offset:0,notes:531,bombs:0,obstacles:114,nps:1.828,length:765,characteristic:"Standard",difficulty:"Normal",events:1776,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:290.506,paritySummary:{errors:14,warns:18,resets:0}},{njs:13,offset:0,notes:806,bombs:0,obstacles:114,nps:2.774,length:765,characteristic:"Standard",difficulty:"Hard",events:1776,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:290.506,paritySummary:{errors:12,warns:11,resets:0}},{njs:14,offset:0,notes:1150,bombs:0,obstacles:110,nps:3.959,length:765,characteristic:"Standard",difficulty:"Expert",events:1776,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:290.506,paritySummary:{errors:5,warns:9,resets:0}},{njs:17,offset:0,notes:1399,bombs:8,obstacles:114,nps:4.816,length:765,characteristic:"Standard",difficulty:"ExpertPlus",events:1784,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:290.506,paritySummary:{errors:31,warns:28,resets:2}}],downloadURL:"https://cdn.beatsaver.com/d2dab61784b612b9b807e127260a81ed974315af.zip",coverURL:"https://cdn.beatsaver.com/d2dab61784b612b9b807e127260a81ed974315af.jpg",previewURL:"https://cdn.beatsaver.com/d2dab61784b612b9b807e127260a81ed974315af.mp3"}],createdAt:"2019-07-18T23:50:08.241Z",updatedAt:"2019-07-18T23:50:08.241Z",lastPublishedAt:"2019-07-18T23:50:08.241Z"},{id:"66f",name:"This Is Gospel - Panic! At The Disco",description:"Expert - Hard - Normal Charts\nLighting Events\n\nhttps://twitter.com/TheDownyCat\nhttps://www.twitch.tv/downycat\nhttps://streamlabs.com/downycat/tip",uploader:{id:4285982,name:"downycat",uniqueSet:!0,hash:"5cff0b7398cc5a672c84ede5",avatar:"https://cdn.beatsaver.com/avatar/173538829888782336.png",type:"DISCORD"},metadata:{bpm:156,duration:180,songName:"This Is Gospel",songSubName:"Panic! At The Disco",songAuthorName:"DownyCat",levelAuthorName:"downycat"},stats:{plays:0,downloads:2221,upvotes:1421,downvotes:49,score:.9147},uploaded:"2018-06-24T10:25:39Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"e14ecfe4def439051ae404353aae6aabc7d1e05f",key:"66f",state:"Published",createdAt:"2018-06-24T10:25:39Z",sageScore:4,diffs:[{njs:10,offset:0,notes:382,bombs:0,obstacles:14,nps:2.178,length:455.999,characteristic:"Standard",difficulty:"Normal",events:970,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:175.384,paritySummary:{errors:47,warns:12,resets:0}},{njs:10,offset:0,notes:619,bombs:0,obstacles:14,nps:3.529,length:456,characteristic:"Standard",difficulty:"Hard",events:970,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:175.385,paritySummary:{errors:77,warns:55,resets:0}},{njs:10,offset:0,notes:733,bombs:0,obstacles:14,nps:4.179,length:456,characteristic:"Standard",difficulty:"Expert",events:970,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:175.385,paritySummary:{errors:33,warns:25,resets:0}}],downloadURL:"https://cdn.beatsaver.com/e14ecfe4def439051ae404353aae6aabc7d1e05f.zip",coverURL:"https://cdn.beatsaver.com/e14ecfe4def439051ae404353aae6aabc7d1e05f.jpg",previewURL:"https://cdn.beatsaver.com/e14ecfe4def439051ae404353aae6aabc7d1e05f.mp3"}],createdAt:"2018-06-24T10:25:39Z",updatedAt:"2018-06-24T10:25:39Z",lastPublishedAt:"2018-06-24T10:25:39Z"},{id:"4739",name:"Paramore - Decode",description:"Twilight = Hard\r\nParamore = Expert",uploader:{id:4285107,name:"kikaeaeon",uniqueSet:!0,hash:"5cff0b7498cc5a672c85109b",avatar:"https://cdn.beatsaver.com/avatar/103715469822816256.png",type:"DISCORD"},metadata:{bpm:164,duration:262,songName:"Decode",songSubName:"Paramore",songAuthorName:"KikaeAeon",levelAuthorName:"kikaeaeon"},stats:{plays:0,downloads:1976,upvotes:950,downvotes:25,score:.9146},uploaded:"2019-04-20T06:10:32Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"964d8f8c41aaf56aa2cfc06072eff70f599d6a3f",key:"4739",state:"Published",createdAt:"2019-04-20T06:10:32Z",sageScore:6,diffs:[{njs:10,offset:0,notes:616,bombs:0,obstacles:16,nps:2.556,length:658.75,characteristic:"Standard",difficulty:"Hard",events:798,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:241.006,paritySummary:{errors:20,warns:8,resets:0}},{njs:15,offset:0,notes:983,bombs:0,obstacles:16,nps:4.079,length:658.75,characteristic:"Standard",difficulty:"Expert",events:1165,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:241.006,paritySummary:{errors:28,warns:23,resets:0}}],downloadURL:"https://cdn.beatsaver.com/964d8f8c41aaf56aa2cfc06072eff70f599d6a3f.zip",coverURL:"https://cdn.beatsaver.com/964d8f8c41aaf56aa2cfc06072eff70f599d6a3f.jpg",previewURL:"https://cdn.beatsaver.com/964d8f8c41aaf56aa2cfc06072eff70f599d6a3f.mp3"}],createdAt:"2019-04-20T06:10:32Z",updatedAt:"2019-04-20T06:10:32Z",lastPublishedAt:"2019-04-20T06:10:32Z"},{id:"9a3f",name:"[Tokyo Machine Pack] Tokyo Machine - BUBBLES",description:"2/3\nPart of the Tokyo Machine Pack, a collab between Pixelguy, CyanSnow and I.\nMap and lights both by me.\n\nCyanSnow's account: https://beatsaver.com/uploader/5cff0b7698cc5a672c8543ac\nPixelguymm's account: https://beatsaver.com/uploader/5cff0b7698cc5a672c8541a8\n\nCheck out the trailer for the pack here: https://www.youtube.com/watch?v=lStPUnecsD8",uploader:{id:3376,name:"firestrikecm",uniqueSet:!0,hash:"5cff0b7698cc5a672c85479f",avatar:"https://cdn.beatsaver.com/avatar/3376.jpg",type:"SIMPLE"},metadata:{bpm:128,duration:232,songName:"BUBBLES",songSubName:"",songAuthorName:"Tokyo Machine",levelAuthorName:"FireStrike"},stats:{plays:0,downloads:2141,upvotes:926,downvotes:24,score:.9145},uploaded:"2020-04-12T18:21:41.920Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"d4b087ffab62b7994ce433969c21ef6b29462163",key:"9a3f",state:"Published",createdAt:"2020-04-12T18:21:41.920Z",sageScore:5,diffs:[{njs:20,offset:.7,notes:883,bombs:0,obstacles:10,nps:3.868,length:487,characteristic:"Standard",difficulty:"ExpertPlus",events:3192,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:228.281,paritySummary:{errors:3,warns:0,resets:0}}],downloadURL:"https://cdn.beatsaver.com/d4b087ffab62b7994ce433969c21ef6b29462163.zip",coverURL:"https://cdn.beatsaver.com/d4b087ffab62b7994ce433969c21ef6b29462163.jpg",previewURL:"https://cdn.beatsaver.com/d4b087ffab62b7994ce433969c21ef6b29462163.mp3"}],createdAt:"2020-04-12T18:21:41.920Z",updatedAt:"2020-04-12T18:21:41.920Z",lastPublishedAt:"2020-04-12T18:21:41.920Z"},{id:"7578",name:"Shape of You [Punk Goes Pop Vol.1] - Our Last Night",description:'A rock cover of "Shape of You" by rock band, Our Last Night. Original song by Ed Sheeran.\n\nEDIT: Fixed one missing note mismap',uploader:{id:58338,name:"Joetastic",uniqueSet:!0,hash:"5cff0b7498cc5a672c85050e",avatar:"https://cdn.beatsaver.com/avatar/227767566402191360.png",type:"DISCORD"},metadata:{bpm:192,duration:240,songName:"Shape of You (Rock Cover)",songSubName:"",songAuthorName:"Our Last Night",levelAuthorName:"Joetastic"},stats:{plays:0,downloads:2427,upvotes:618,downvotes:10,score:.9145},uploaded:"2019-12-10T17:53:07.422Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"dfff04c4d50466e5a6c9b72466af5e72aee623c3",key:"7578",state:"Published",createdAt:"2019-12-10T17:53:07.422Z",sageScore:4,diffs:[{njs:16,offset:0,notes:1039,bombs:0,obstacles:6,nps:4.421,length:752,characteristic:"Standard",difficulty:"ExpertPlus",events:2377,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:235,paritySummary:{errors:59,warns:56,resets:0}}],downloadURL:"https://cdn.beatsaver.com/dfff04c4d50466e5a6c9b72466af5e72aee623c3.zip",coverURL:"https://cdn.beatsaver.com/dfff04c4d50466e5a6c9b72466af5e72aee623c3.jpg",previewURL:"https://cdn.beatsaver.com/dfff04c4d50466e5a6c9b72466af5e72aee623c3.mp3"}],createdAt:"2019-12-10T17:53:07.422Z",updatedAt:"2019-12-10T17:53:07.422Z",lastPublishedAt:"2019-12-10T17:53:07.422Z"},{id:"7375",name:"Martin O' Donnell - Tip of the Spear (Halo Reach)",description:"#16\nAnyone else hyped for Halo Reach tomorrow? I know I am, probably my favorite FPS franchise. Time to grind back to where I was (even though leveling is different). Anyway, here's one of the songs from the game.\n\nN/S:\nEasy: 0.84\nNormal: 1.22\nHard (Heroic): 2.12\nExpert (Legendary): 2.61\nLights: 666 (998 on expert/legendary somehow)",uploader:{id:4284294,name:"eop-glacier",uniqueSet:!0,hash:"5d50e360adb1a20006305ca0",avatar:"https://cdn.beatsaver.com/avatar/459209214376804363.png",type:"DISCORD"},metadata:{bpm:126,duration:186,songName:"Tip of the Spear",songSubName:"",songAuthorName:"Martin O' Donnell",levelAuthorName:"EOP Glacier"},stats:{plays:0,downloads:2106,upvotes:688,downvotes:13,score:.9145},uploaded:"2019-12-03T04:18:47.641Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"16e10bdc52ee5a515fab9661df0efffcaa3712d3",key:"7375",state:"Published",createdAt:"2019-12-03T04:18:47.641Z",sageScore:4,diffs:[{njs:11,offset:0,notes:158,bombs:0,obstacles:7,nps:1.009,length:329,characteristic:"Standard",difficulty:"Easy",events:663,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:156.667,paritySummary:{errors:6,warns:0,resets:0}},{njs:13,offset:0,notes:229,bombs:0,obstacles:10,nps:1.462,length:329,characteristic:"Standard",difficulty:"Normal",events:663,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:156.667,paritySummary:{errors:1,warns:0,resets:0}},{njs:15.5,offset:0,notes:397,bombs:0,obstacles:9,nps:2.533,length:329.075,characteristic:"Standard",difficulty:"Hard",events:663,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:156.702,paritySummary:{errors:2,warns:0,resets:0}},{njs:18,offset:.2,notes:489,bombs:0,obstacles:25,nps:3.121,length:329,characteristic:"Standard",difficulty:"Expert",events:995,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:156.667,paritySummary:{errors:0,warns:0,resets:0}}],downloadURL:"https://cdn.beatsaver.com/16e10bdc52ee5a515fab9661df0efffcaa3712d3.zip",coverURL:"https://cdn.beatsaver.com/16e10bdc52ee5a515fab9661df0efffcaa3712d3.jpg",previewURL:"https://cdn.beatsaver.com/16e10bdc52ee5a515fab9661df0efffcaa3712d3.mp3"}],createdAt:"2019-12-03T04:18:47.641Z",updatedAt:"2019-12-03T04:18:47.641Z",lastPublishedAt:"2019-12-03T04:18:47.641Z"},{id:"5a7c",name:"Bon Jovi - Livin' on a Prayer",description:"Its been waay too long since I last released a map. Been on a break from Beatsaber lately but now that I'm back I hope I can carry on getting out monthly maps like I used to.\nThis song is victim to some pretty nasty variable BPM, but hopefully if I've done it right you wont be able to notice any timing issues ;) Regardless, Hopefully you can give it a go and let me know what you think!\nVideo preview: https://www.youtube.com/watch?v=eYKJrkcHj0I",uploader:{id:4785,name:"stumi",uniqueSet:!1,hash:"5cff0b7398cc5a672c84f720",avatar:"https://www.gravatar.com/avatar/5cff0b7398cc5a672c84f720?d=retro",type:"SIMPLE"},metadata:{bpm:121.8,duration:248,songName:"Livin' on a Prayer",songSubName:"",songAuthorName:"Bon Jovi",levelAuthorName:"Stumi"},stats:{plays:0,downloads:8093,upvotes:1356,downvotes:46,score:.9145},uploaded:"2019-08-03T20:42:08.797Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"8e4e798189ddecb9f49f624d6aa6a0648dd2650b",key:"5a7c",state:"Published",createdAt:"2019-08-03T20:42:08.797Z",sageScore:2,diffs:[{njs:10,offset:0,notes:253,bombs:4,obstacles:48,nps:1.12,length:458.614,characteristic:"Standard",difficulty:"Easy",events:1973,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:225.918,paritySummary:{errors:59,warns:11,resets:2}},{njs:11,offset:0,notes:432,bombs:0,obstacles:90,nps:1.914,length:458.125,characteristic:"Standard",difficulty:"Normal",events:1974,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:225.677,paritySummary:{errors:58,warns:20,resets:0}},{njs:13,offset:0,notes:755,bombs:0,obstacles:79,nps:3.345,length:458.125,characteristic:"Standard",difficulty:"Hard",events:1973,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:225.677,paritySummary:{errors:45,warns:58,resets:0}},{njs:15,offset:0,notes:920,bombs:0,obstacles:86,nps:4.077,length:458.125,characteristic:"Standard",difficulty:"Expert",events:1973,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:225.677,paritySummary:{errors:43,warns:47,resets:0}}],downloadURL:"https://cdn.beatsaver.com/8e4e798189ddecb9f49f624d6aa6a0648dd2650b.zip",coverURL:"https://cdn.beatsaver.com/8e4e798189ddecb9f49f624d6aa6a0648dd2650b.jpg",previewURL:"https://cdn.beatsaver.com/8e4e798189ddecb9f49f624d6aa6a0648dd2650b.mp3"}],createdAt:"2019-08-03T20:42:08.797Z",updatedAt:"2019-08-03T20:42:08.797Z",lastPublishedAt:"2019-08-03T20:42:08.797Z"},{id:"1fee",name:"Wavin' Flag (100k Contest)",description:"This is one of the 22 maps that were mapped for the 100k Contest where you can win over $7,000 in prizes. Go to https://bsaber.com/100k-contest/ to register!",uploader:{id:2521,name:"darkgrisen",uniqueSet:!0,hash:"5cff0b7398cc5a672c84fe44",avatar:"https://www.gravatar.com/avatar/5cff0b7398cc5a672c84fe44?d=retro",type:"SIMPLE"},metadata:{bpm:152,duration:215,songName:"Wavin' Flag (100k Contest)",songSubName:"K'NAAN",songAuthorName:"DarkGrisen",levelAuthorName:"DarkGrisen"},stats:{plays:0,downloads:4479,upvotes:1244,downvotes:40,score:.9145},uploaded:"2018-11-12T17:47:43Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"de9c89b59023a9e30e2c4dfc9b63dd30807b68cb",key:"1fee",state:"Published",createdAt:"2018-11-12T17:47:43Z",sageScore:6,diffs:[{njs:9,offset:0,notes:157,bombs:0,obstacles:2,nps:.765,length:520,characteristic:"Standard",difficulty:"Easy",events:528,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:205.263,paritySummary:{errors:18,warns:14,resets:0}},{njs:9,offset:0,notes:360,bombs:0,obstacles:2,nps:1.754,length:520,characteristic:"Standard",difficulty:"Normal",events:528,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:205.263,paritySummary:{errors:54,warns:25,resets:0}},{njs:10,offset:0,notes:496,bombs:0,obstacles:2,nps:2.416,length:520,characteristic:"Standard",difficulty:"Hard",events:528,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:205.263,paritySummary:{errors:46,warns:40,resets:0}},{njs:11,offset:0,notes:676,bombs:0,obstacles:2,nps:3.293,length:520,characteristic:"Standard",difficulty:"Expert",events:528,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:205.263,paritySummary:{errors:58,warns:79,resets:0}},{njs:12,offset:0,notes:869,bombs:0,obstacles:2,nps:4.234,length:520,characteristic:"Standard",difficulty:"ExpertPlus",events:528,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:205.263,paritySummary:{errors:47,warns:72,resets:0}}],downloadURL:"https://cdn.beatsaver.com/de9c89b59023a9e30e2c4dfc9b63dd30807b68cb.zip",coverURL:"https://cdn.beatsaver.com/de9c89b59023a9e30e2c4dfc9b63dd30807b68cb.jpg",previewURL:"https://cdn.beatsaver.com/de9c89b59023a9e30e2c4dfc9b63dd30807b68cb.mp3"}],createdAt:"2018-11-12T17:47:43Z",updatedAt:"2018-11-12T17:47:43Z",lastPublishedAt:"2018-11-12T17:47:43Z"},{id:"b741",name:"Eskimo Callboy - Hypa Hypa",description:"Genre: Post-Hardcore / Metalcore / Electronic\n\nIf you don't want to see flying words or don't have MappingExtensions, just play \"No Lyrics\" difficult.\n\nPreview by Kira Argenta: https://www.youtube.com/watch?v=pFSpAzmNbJo\nPreview by Superritchman: https://www.youtube.com/watch?v=XwGZQNPI08c\n\nFeedback (Discord): ExistenceExpire#9858\nFeedback and support: https://ko-fi.com/existenceexpire",uploader:{id:69683,name:"existenceexpire",uniqueSet:!0,hash:"5e9e16bb2a34090006a1aed5",avatar:"https://cdn.beatsaver.com/avatar/226078773517352960.png",type:"DISCORD"},metadata:{bpm:152,duration:210,songName:"Hypa Hypa",songSubName:"",songAuthorName:"Eskimo Callboy",levelAuthorName:"ExistenceExpire"},stats:{plays:0,downloads:1477,upvotes:662,downvotes:12,score:.9144},uploaded:"2020-06-28T18:04:59.590Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"b39e9d698422517226f24666ebd7ae3d7aaf244a",key:"b741",state:"Published",createdAt:"2020-06-28T18:04:59.590Z",sageScore:5,diffs:[{njs:18,offset:.15301132,notes:912,bombs:59,obstacles:0,nps:4.499,length:513.5,characteristic:"Standard",difficulty:"Expert",events:3501,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:202.697,paritySummary:{errors:6,warns:16,resets:8}},{njs:18,offset:.15301132,notes:912,bombs:59,obstacles:12486,nps:4.499,length:513.5,characteristic:"Standard",difficulty:"ExpertPlus",events:3501,chroma:!1,me:!0,ne:!1,cinema:!1,seconds:202.697,paritySummary:{errors:6,warns:16,resets:8}}],downloadURL:"https://cdn.beatsaver.com/b39e9d698422517226f24666ebd7ae3d7aaf244a.zip",coverURL:"https://cdn.beatsaver.com/b39e9d698422517226f24666ebd7ae3d7aaf244a.jpg",previewURL:"https://cdn.beatsaver.com/b39e9d698422517226f24666ebd7ae3d7aaf244a.mp3"}],createdAt:"2020-06-28T18:04:59.590Z",updatedAt:"2020-06-28T18:04:59.590Z",lastPublishedAt:"2020-06-28T18:04:59.590Z"},{id:"5e06",name:"I Will Not Bow - Breaking Benjamin",description:"Shoutouts to twitch.tv/whipstickgostop and twitch.tv/xorosegold for playtesting!",uploader:{id:4285077,name:"ris",uniqueSet:!0,hash:"5cff0b7598cc5a672c8535df",avatar:"https://cdn.beatsaver.com/avatar/191597992061435904.png",type:"DISCORD"},metadata:{bpm:108,duration:218,songName:"I Will Not Bow",songSubName:"",songAuthorName:"Breaking Benjamin",levelAuthorName:"Ris"},stats:{plays:0,downloads:2375,upvotes:819,downvotes:19,score:.9144},uploaded:"2019-08-20T03:22:59.663Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"29c0a39db6a53375d2359f4a2a492a0ea784d04f",key:"5e06",state:"Published",createdAt:"2019-08-20T03:22:59.663Z",sageScore:4,diffs:[{njs:10,offset:1,notes:310,bombs:6,obstacles:4,nps:1.516,length:368,characteristic:"Standard",difficulty:"Normal",events:318,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:204.444,paritySummary:{errors:60,warns:40,resets:0}},{njs:12,offset:1,notes:619,bombs:73,obstacles:4,nps:2.936,length:379.5,characteristic:"Standard",difficulty:"Hard",events:318,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:210.833,paritySummary:{errors:59,warns:67,resets:0}},{njs:16,offset:0,notes:942,bombs:73,obstacles:4,nps:4.468,length:379.5,characteristic:"Standard",difficulty:"Expert",events:318,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:210.833,paritySummary:{errors:59,warns:69,resets:0}}],downloadURL:"https://cdn.beatsaver.com/29c0a39db6a53375d2359f4a2a492a0ea784d04f.zip",coverURL:"https://cdn.beatsaver.com/29c0a39db6a53375d2359f4a2a492a0ea784d04f.jpg",previewURL:"https://cdn.beatsaver.com/29c0a39db6a53375d2359f4a2a492a0ea784d04f.mp3"}],createdAt:"2019-08-20T03:22:59.663Z",updatedAt:"2019-08-20T03:22:59.663Z",lastPublishedAt:"2019-08-20T03:22:59.663Z"},{id:"29f8",name:"Camila Cabello - Havana (Remapped)",description:"Update: Added Hard Difficulty :)\r\n\r\nI know there's a map for Havana already, but I decided to make another version of it.\r\nPlaythrough:\r\nhttps://www.youtube.com/watch?v=d7KNm2BzcqA\r\n\r\nEnjoy!\r\n\r\n- ORYGINAL (aka guachitonico)",uploader:{id:45130,name:"guachitonico",uniqueSet:!0,hash:"5cff0b7698cc5a672c854035",avatar:"https://www.gravatar.com/avatar/5cff0b7698cc5a672c854035?d=retro",type:"SIMPLE"},metadata:{bpm:105,duration:220,songName:"Havana",songSubName:"Camila Cabello",songAuthorName:"Remapped by ORYGINAL",levelAuthorName:"guachitonico"},stats:{plays:0,downloads:2862,upvotes:1259,downvotes:41,score:.9144},uploaded:"2019-01-01T22:14:06Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"5d8e56195df0a9735b4c6db2884d3ee6a2f5acef",key:"29f8",state:"Published",createdAt:"2019-01-01T22:14:06Z",sageScore:6,diffs:[{njs:10,offset:0,notes:489,bombs:0,obstacles:9,nps:2.325,length:368,characteristic:"Standard",difficulty:"Hard",events:1019,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:210.286,paritySummary:{errors:68,warns:18,resets:0}},{njs:12,offset:0,notes:777,bombs:0,obstacles:9,nps:3.695,length:368,characteristic:"Standard",difficulty:"Expert",events:1019,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:210.286,paritySummary:{errors:45,warns:16,resets:0}}],downloadURL:"https://cdn.beatsaver.com/5d8e56195df0a9735b4c6db2884d3ee6a2f5acef.zip",coverURL:"https://cdn.beatsaver.com/5d8e56195df0a9735b4c6db2884d3ee6a2f5acef.jpg",previewURL:"https://cdn.beatsaver.com/5d8e56195df0a9735b4c6db2884d3ee6a2f5acef.mp3"}],createdAt:"2019-01-01T22:14:06Z",updatedAt:"2019-01-01T22:14:06Z",lastPublishedAt:"2019-01-01T22:14:06Z"},{id:"22bf",name:"Hold Me Down - Halsey",description:"YouTube Playthrough: https://www.youtube.com/channel/UCeG7cXNLr6dKSYBKqoUvcbQ\r\nDifficulties: Expert+, Expert, Hard, Normal, Easy\r\nNote Jump Speeds From E+ to Easy: 15, 13, 11, 10, 10\r\nLighting & Events: Yes\r\nBPM: 146",uploader:{id:30754,name:"styngme",uniqueSet:!1,hash:"5cff0b7298cc5a672c84e9cd",avatar:"https://www.gravatar.com/avatar/5cff0b7298cc5a672c84e9cd?d=retro",type:"SIMPLE"},metadata:{bpm:146,duration:208,songName:"Hold Me Down",songSubName:"Halsey",songAuthorName:"StyngMe",levelAuthorName:"styngme"},stats:{plays:0,downloads:4092,upvotes:1204,downvotes:38,score:.9144},uploaded:"2018-11-29T03:58:10Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"a6cced35a0ac357cc16d5e4328be59e52339a157",key:"22bf",state:"Published",createdAt:"2018-11-29T03:58:10Z",sageScore:7,diffs:[{njs:10,offset:0,notes:483,bombs:0,obstacles:59,nps:2.449,length:480,characteristic:"Standard",difficulty:"Easy",events:1826,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:197.26,paritySummary:{errors:19,warns:15,resets:0}},{njs:10,offset:0,notes:588,bombs:0,obstacles:62,nps:2.981,length:480,characteristic:"Standard",difficulty:"Normal",events:1826,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:197.26,paritySummary:{errors:40,warns:36,resets:0}},{njs:11,offset:0,notes:674,bombs:0,obstacles:65,nps:3.417,length:480,characteristic:"Standard",difficulty:"Hard",events:1826,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:197.26,paritySummary:{errors:46,warns:53,resets:0}},{njs:13,offset:0,notes:697,bombs:0,obstacles:97,nps:3.533,length:480,characteristic:"Standard",difficulty:"Expert",events:1826,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:197.26,paritySummary:{errors:53,warns:80,resets:0}},{njs:15,offset:0,notes:814,bombs:0,obstacles:114,nps:4.127,length:480,characteristic:"Standard",difficulty:"ExpertPlus",events:1826,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:197.26,paritySummary:{errors:50,warns:75,resets:0}}],downloadURL:"https://cdn.beatsaver.com/a6cced35a0ac357cc16d5e4328be59e52339a157.zip",coverURL:"https://cdn.beatsaver.com/a6cced35a0ac357cc16d5e4328be59e52339a157.jpg",previewURL:"https://cdn.beatsaver.com/a6cced35a0ac357cc16d5e4328be59e52339a157.mp3"}],createdAt:"2018-11-29T03:58:10Z",updatedAt:"2018-11-29T03:58:10Z",lastPublishedAt:"2018-11-29T03:58:10Z"},{id:"198ba",name:"Hades - The Unseen Ones",description:'One of the many great game OSTs from the game Hades !\nThis time however.......we are talking rock and roll, the epic guitars by Masahiro Aoki and Daisuke Kurosawa directed by Darren Korb !\nSome of you that played the game may not of heard of this OST.....you will need to keep on playing to encounter it !\n\nWARNING : THE DESCRIPTION MAY CONTAIN SPOILERS, PLEASE TAKE NOTE !\n. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . \nIf you wish to take a lore dive with the OST based on my understanding of the story the characters POV, keep reading :D !\n...................................................................................................................................\nNarrator : Prince Zagreus, son of Hades - God of the Dead and ruler of the Underworld, has embarked on a mission to escape the Underworld to the surface.\nWhat started as a personal affair with his father and a personal will to breath fresh air from the surface turned into a dedicated mission as he discovered that his very own mother was alive and living on the surface !\nAfter the first initial escape in which Zagreus met up with her, he suddenly started to understand many circles in his life that were still very much opened thus far.\n\nUnfortunately.......each time Zagreus manages to escape and meet his mother for a chat, the Styx grant him only but a moment to exchange a few words with his mother on her cabin before he gets engulfed and taken aback to the underworld.\n\nDetermined to keep visiting his mother despite the ordeal and in order to understand why she was missing from his life, he keeps on going.\n\nHades, being unpleased by his sons rampage, decides to punish him by a "Pact of Punisment" in which Zagreus will need to sign in order to grow stronger on his expedition.\n\nOnce came a time where Zagreus pact option became increasingly intense that he had to resort to..... other punishment options that he did not know the consequences of.....\nMeanwhile, Zagreus is preparing for yet another escape attempt.\n\nZagreus : "Hmm.....which pact should I choose this time.......what\'s this? Extreme Measures?"\nNarrator : reading through the pact, Zagreus understood it meant that each underworld boss will be significantly stronger with new weapons at thier disposal.........including the last one that so happens to be his very own father !\nZagreus : "How hard can it be? let\'s go ! "\n\nNarrator: And thus Zagreus began yet another escape attempt, with the thought of the pact in his mind......\n\n.......Time goes by..............\n\nAfter fighting the Fury sisters, vanquishing the Hydra, beating Theseus and Asterius and braving through the Satyr tunnels, he finally arrives to his final showdown.....\nOpening the gates to the surface, Zagreus Green and Red eyes spot a figure in Golden-Red armor, this figure was also the final obstacle to his mothers cabin....\n\nThus the two begin a dialog :\nZagrues : "Think you can beat me this time, Father?"\nHades : "I was reviewing the terms of the Pact of Punishment to which you are bound.\nEven when my servants resort to extreme measures, they were still unable to surpass you then.\nSo now.....it is my turn !"\nZagrues : "Caught you unprepared, did I? After Theseus and his Macedonian, I half-expected to see you thundering around by some golden chariot of your own, drawn by sable steeds, that sort of thing\nBut......it\'s just you....."\nHades : "It is just me indeed.\nHowever...that should be more than necassary here.\nNo holding back this time Zagrues, are you ready?"\nZagrues : "Let\'s go !!" \n\nThus the two begin yet another brawl of darkness and blood.\nAfter exchanging countless blows, Zagrues manages to down his father twice but not before suffering a few himself, as Hades falls for the second time, Zagrues expects him to vanish back to the underwrold as would normally happen, however.......\n\nHades : " Urgh....no.......I am not......finished......with you........yet!!!"\nNarrator : and thus to Zagrues complete surprise, his father once again regains his balance and is fired with a fighting spirit he has never yet seen.\nHades : "I can still fight !!"\nZagrues : "Are you serious?!"\n\nHades : "DARKNESS !"\nNarrator : Hades vanishes once more and engulfes the entire region in darkness, which hinders Zagrues abillity to see and regains his whereabouts..........\nJust then, Zagrues remembered that he carried his father\'s keepsake sigil, one which allowed him to use his father\'s powers himself !\nZagrues : "Two can play at that game.........DARKNESS ! "\n\nAnd thus, both Hades and Zagrues vanished from the view of the naked eye, off to the final and decisive showdown of Blood and Darkness..........such is the familly......of The Unseen Ones.\n . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .\nAt long last I am happy to present you all one of the most pumping OSTs from the Hades soundtrack !\nTo make it more convenient, this map includes two mods to spice up the things !\nIn standard mode, you will be playing from Zagrues POV !\nHelp him beat and survive his fathers endless blows so he might see his mother once more !\nOr.....if you wish to take a different approach.\nIn One Saber mode you will infuse you sword with the power of darkness and take on the POV of no less than Hades himself !\nShow your son you can still best him in combat !\n.........................................................................................................................................\nMany thanks to monster, steg universe, Kaltern and the BSMG for providing the much needed feedback which helped forge this map and help get it to where it is now ! :)\n\nHope you enjoy ! :)\n\nMap preview by Javierattor - https://www.youtube.com/watch?v=namzq2MNvJ4\n',uploader:{id:4285616,name:"sp234",uniqueSet:!0,hash:"5f352ca7530c8e00061b14fe",avatar:"https://cdn.beatsaver.com/avatar/215418254980677643.png",type:"DISCORD"},metadata:{bpm:118,duration:248,songName:"Hades - The Unseen Ones",songSubName:"Game OST",songAuthorName:"Darren Korb",levelAuthorName:"Sp234"},stats:{plays:0,downloads:6435,upvotes:637,downvotes:11,score:.9143},uploaded:"2021-06-25T08:04:00.236Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"d93d094ae17f25dedaee7796f7ca9fc078dc5060",key:"198ba",state:"Published",createdAt:"2021-06-25T08:04:00.236Z",sageScore:5,diffs:[{njs:10,offset:.6,notes:554,bombs:0,obstacles:65,nps:2.269,length:480.25,characteristic:"Standard",difficulty:"Normal",events:5589,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:244.195,paritySummary:{errors:4,warns:0,resets:0}},{njs:13,offset:-.1,notes:812,bombs:4,obstacles:135,nps:3.325,length:480.25,characteristic:"Standard",difficulty:"Hard",events:5589,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:244.195,paritySummary:{errors:0,warns:0,resets:0}},{njs:16,offset:-.55,notes:1238,bombs:0,obstacles:160,nps:5.069,length:480.292,characteristic:"Standard",difficulty:"Expert",events:5591,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:244.216,paritySummary:{errors:0,warns:0,resets:0}},{njs:16,offset:-.55,notes:878,bombs:0,obstacles:113,nps:3.595,length:480.333,characteristic:"OneSaber",difficulty:"Expert",events:5589,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:244.237,paritySummary:{errors:0,warns:0,resets:0}}],downloadURL:"https://cdn.beatsaver.com/d93d094ae17f25dedaee7796f7ca9fc078dc5060.zip",coverURL:"https://cdn.beatsaver.com/d93d094ae17f25dedaee7796f7ca9fc078dc5060.jpg",previewURL:"https://cdn.beatsaver.com/d93d094ae17f25dedaee7796f7ca9fc078dc5060.mp3"}],createdAt:"2021-06-25T08:04:00.236Z",updatedAt:"2021-06-25T08:04:00.236Z",lastPublishedAt:"2021-06-25T08:04:00.236Z"},{id:"9725",name:"Dua Lipa - Break My Heart",description:"Dua Lipa - Break My Heart\nThis is my second Dua Lipa map and it was super fun to make and test! I hope you enjoy it. \nSpecial thanks to Treetrain1YT for testing this many times on both Steam and Quest.\n\nNormal - 2.09 NPS, 470 Notes, 10 NJS\nHard - 2.92 NPS, 655 Notes, 12 NJS\nExpert - 3.63 NPS, 814 Notes, 16 NJS",uploader:{id:4285261,name:"yomama",uniqueSet:!0,hash:"5e23f0a1054bbd0007bc1ed4",avatar:"https://cdn.beatsaver.com/avatar/153595294792155137.png",type:"DISCORD"},metadata:{bpm:113,duration:223,songName:"Break My Heart",songSubName:"",songAuthorName:"Dua Lipa",levelAuthorName:"yomama"},stats:{plays:0,downloads:2890,upvotes:942,downvotes:25,score:.9143},uploaded:"2020-04-04T03:17:06.970Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"e97457ce049dbd486326861e16125fac4bb24800",key:"9725",state:"Published",createdAt:"2020-04-04T03:17:06.970Z",sageScore:4,diffs:[{njs:10,offset:0,notes:470,bombs:0,obstacles:86,nps:2.15,length:411.75,characteristic:"Standard",difficulty:"Normal",events:872,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:218.628,paritySummary:{errors:31,warns:25,resets:0}},{njs:12,offset:0,notes:655,bombs:0,obstacles:96,nps:2.998,length:411.5,characteristic:"Standard",difficulty:"Hard",events:1619,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:218.496,paritySummary:{errors:76,warns:34,resets:0}},{njs:16,offset:.25,notes:814,bombs:0,obstacles:89,nps:3.725,length:411.5,characteristic:"Standard",difficulty:"Expert",events:2719,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:218.496,paritySummary:{errors:91,warns:58,resets:0}}],downloadURL:"https://cdn.beatsaver.com/e97457ce049dbd486326861e16125fac4bb24800.zip",coverURL:"https://cdn.beatsaver.com/e97457ce049dbd486326861e16125fac4bb24800.jpg",previewURL:"https://cdn.beatsaver.com/e97457ce049dbd486326861e16125fac4bb24800.mp3"}],createdAt:"2020-04-04T03:17:06.970Z",updatedAt:"2020-04-04T03:17:06.970Z",lastPublishedAt:"2020-04-04T03:17:06.970Z"},{id:"3342",name:"No More Sorrow - Linkin Park",description:"133 BPM / 3:42 Runtime\r\nEasy / 288 Notes\r\nNormal / 394 Notes\r\nHard / 549 Notes\r\nExpert / 799 Notes\r\nExpert+ / 1032 Notes\r\n\r\nI was watching early Beat Saber gameplay and noticed how the player frequently put their sabers in the walls. It gave me an idea for the Expert+ map.\r\n\r\nGameplay: https://youtu.be/Wkng-fpz78w",uploader:{id:4284981,name:"skylerwallace",uniqueSet:!0,hash:"5cff0b7298cc5a672c84ea67",avatar:"https://cdn.beatsaver.com/avatar/398344856868487168.png",type:"DISCORD"},metadata:{bpm:133,duration:222,songName:"No More Sorrow",songSubName:"Linkin Park",songAuthorName:"Skyler Wallace",levelAuthorName:"skylerwallace"},stats:{plays:0,downloads:2978,upvotes:1002,downvotes:28,score:.9143},uploaded:"2019-02-03T07:55:09Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"e80f867f37808cd7cf1450327a4b445d2d0d8f02",key:"3342",state:"Published",createdAt:"2019-02-03T07:55:09Z",sageScore:8,diffs:[{njs:10,offset:1,notes:288,bombs:7,obstacles:7,nps:1.321,length:482,characteristic:"Standard",difficulty:"Easy",events:5629,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:217.444,paritySummary:{errors:117,warns:6,resets:5}},{njs:10,offset:1,notes:394,bombs:5,obstacles:10,nps:1.807,length:482,characteristic:"Standard",difficulty:"Normal",events:5628,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:217.444,paritySummary:{errors:88,warns:17,resets:0}},{njs:10,offset:1,notes:549,bombs:4,obstacles:11,nps:2.518,length:482,characteristic:"Standard",difficulty:"Hard",events:5629,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:217.444,paritySummary:{errors:41,warns:20,resets:4}},{njs:12,offset:1,notes:799,bombs:4,obstacles:17,nps:3.664,length:482,characteristic:"Standard",difficulty:"Expert",events:5629,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:217.444,paritySummary:{errors:33,warns:35,resets:0}},{njs:14,offset:0,notes:1032,bombs:31,obstacles:73,nps:4.733,length:482,characteristic:"Standard",difficulty:"ExpertPlus",events:5629,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:217.444,paritySummary:{errors:45,warns:66,resets:10}}],downloadURL:"https://cdn.beatsaver.com/e80f867f37808cd7cf1450327a4b445d2d0d8f02.zip",coverURL:"https://cdn.beatsaver.com/e80f867f37808cd7cf1450327a4b445d2d0d8f02.jpg",previewURL:"https://cdn.beatsaver.com/e80f867f37808cd7cf1450327a4b445d2d0d8f02.mp3"}],createdAt:"2019-02-03T07:55:09Z",updatedAt:"2019-02-03T07:55:09Z",lastPublishedAt:"2019-02-03T07:55:09Z"},{id:"10674",name:"Spooky Scary Skeletons (Kasger DnB Remix)",description:"A nice Drum and Bass remix on theme with Halloween.\nYou can follow me on twitch for more awesomeness at https://www.twitch.tv/pkdan\nVideo preview of the map: https://www.youtube.com/watch?v=m3pFxj2jFHs&ab_channel=PKDan\n\nLength: 3:49\nNotes: 789 (Hard) / 1092 (Expert) / 1492 (Expert+)\nNJS: 14 (Hard) / 16 (Expert) / 20 (Expert+)\nBPM: 174",uploader:{id:4284639,name:"pkdan",uniqueSet:!0,hash:"5e6d07927abb00000681e8ee",avatar:"https://cdn.beatsaver.com/avatar/315553265091739650.png",type:"DISCORD"},metadata:{bpm:174,duration:229,songName:"Spooky Scary Skeletons (Kasger Remix)",songSubName:"",songAuthorName:"Andrew Gold",levelAuthorName:"pkdan"},stats:{plays:0,downloads:4006,upvotes:682,downvotes:13,score:.9142},uploaded:"2020-10-30T19:19:27.266Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"20341d92a0871dfdf2f8d39633274fdaa67a70ed",key:"10674",state:"Published",createdAt:"2020-10-30T19:19:27.266Z",sageScore:5,diffs:[{njs:14,offset:.3,notes:789,bombs:0,obstacles:2,nps:3.575,length:640,characteristic:"Standard",difficulty:"Hard",events:4093,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:220.69,paritySummary:{errors:0,warns:0,resets:0}},{njs:16,offset:0,notes:1092,bombs:0,obstacles:2,nps:4.948,length:640,characteristic:"Standard",difficulty:"Expert",events:4093,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:220.69,paritySummary:{errors:0,warns:0,resets:0}},{njs:20,offset:-.3,notes:1492,bombs:0,obstacles:2,nps:6.761,length:640,characteristic:"Standard",difficulty:"ExpertPlus",events:4093,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:220.69,paritySummary:{errors:0,warns:0,resets:0}}],downloadURL:"https://cdn.beatsaver.com/20341d92a0871dfdf2f8d39633274fdaa67a70ed.zip",coverURL:"https://cdn.beatsaver.com/20341d92a0871dfdf2f8d39633274fdaa67a70ed.jpg",previewURL:"https://cdn.beatsaver.com/20341d92a0871dfdf2f8d39633274fdaa67a70ed.mp3"}],createdAt:"2020-10-30T19:19:27.266Z",updatedAt:"2020-10-30T19:19:27.266Z",lastPublishedAt:"2020-10-30T19:19:27.266Z"},{id:"4e81",name:"Katy Perry - Firework",description:"Thank you Joetastic for the lossless file",uploader:{id:4285107,name:"kikaeaeon",uniqueSet:!0,hash:"5cff0b7498cc5a672c85109b",avatar:"https://cdn.beatsaver.com/avatar/103715469822816256.png",type:"DISCORD"},metadata:{bpm:124,duration:229,songName:"Firework",songSubName:"Katy Perry",songAuthorName:"KikaeAeon",levelAuthorName:"kikaeaeon"},stats:{plays:0,downloads:3779,upvotes:1331,downvotes:45,score:.9142},uploaded:"2019-05-22T14:18:50Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"410a4f5ae778f9072b9136f0df5e151156cd81e3",key:"4e81",state:"Published",createdAt:"2019-05-22T14:18:50Z",sageScore:5,diffs:[{njs:10,offset:0,notes:563,bombs:0,obstacles:17,nps:2.51,length:463.5,characteristic:"Standard",difficulty:"Hard",events:682,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:224.274,paritySummary:{errors:33,warns:7,resets:0}},{njs:15,offset:0,notes:927,bombs:0,obstacles:26,nps:4.133,length:463.5,characteristic:"Standard",difficulty:"ExpertPlus",events:988,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:224.274,paritySummary:{errors:25,warns:17,resets:0}}],downloadURL:"https://cdn.beatsaver.com/410a4f5ae778f9072b9136f0df5e151156cd81e3.zip",coverURL:"https://cdn.beatsaver.com/410a4f5ae778f9072b9136f0df5e151156cd81e3.jpg",previewURL:"https://cdn.beatsaver.com/410a4f5ae778f9072b9136f0df5e151156cd81e3.mp3"}],createdAt:"2019-05-22T14:18:50Z",updatedAt:"2019-05-22T14:18:50Z",lastPublishedAt:"2019-05-22T14:18:50Z"},{id:"1622c",name:"Gurenge (TV Size) [Demon Slayer: Kimetsu no Yaiba Opening] - LiSA",description:"",uploader:{id:58338,name:"Joetastic",uniqueSet:!0,hash:"5cff0b7498cc5a672c85050e",avatar:"https://cdn.beatsaver.com/avatar/227767566402191360.png",type:"DISCORD"},metadata:{bpm:135,duration:90,songName:"Gurenge (TV Size)",songSubName:"",songAuthorName:"LiSA",levelAuthorName:"Joetastic"},stats:{plays:0,downloads:16462,upvotes:896,downvotes:23,score:.9141},uploaded:"2021-04-01T08:54:27.557Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"62a63aa11f61623fdd69411bf73ab1082d4558d6",key:"1622c",state:"Published",createdAt:"2021-04-01T08:54:27.557Z",sageScore:5,diffs:[{njs:13,offset:0,notes:294,bombs:0,obstacles:10,nps:3.375,length:196,characteristic:"Standard",difficulty:"Hard",events:12271,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:87.111,paritySummary:{errors:0,warns:0,resets:0}},{njs:15,offset:-.2,notes:399,bombs:0,obstacles:10,nps:4.58,length:196,characteristic:"Standard",difficulty:"Expert",events:12271,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:87.111,paritySummary:{errors:2,warns:2,resets:0}},{njs:18,offset:-.5,notes:482,bombs:0,obstacles:18,nps:5.533,length:196,characteristic:"Standard",difficulty:"ExpertPlus",events:12268,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:87.111,paritySummary:{errors:3,warns:5,resets:0}}],downloadURL:"https://cdn.beatsaver.com/62a63aa11f61623fdd69411bf73ab1082d4558d6.zip",coverURL:"https://cdn.beatsaver.com/62a63aa11f61623fdd69411bf73ab1082d4558d6.jpg",previewURL:"https://cdn.beatsaver.com/62a63aa11f61623fdd69411bf73ab1082d4558d6.mp3"}],createdAt:"2021-04-01T08:54:27.557Z",updatedAt:"2021-04-01T08:54:27.557Z",lastPublishedAt:"2021-04-01T08:54:27.557Z"},{id:"6888",name:"The Glory Days - Tia",description:"Expert and Hard diff companion to https://beatsaver.com/beatmap/56d0\nKikis lights, diffs by me. Modded by Fraies and Redmagi.",uploader:{id:4284577,name:"uninstaller",uniqueSet:!0,hash:"5cff0b7598cc5a672c85248e",avatar:"https://cdn.beatsaver.com/avatar/84840552935194624.png",type:"DISCORD"},metadata:{bpm:184,duration:254,songName:"The Glory Days",songSubName:"",songAuthorName:"Tia",levelAuthorName:"Kikis & Uninstaller"},stats:{plays:0,downloads:2754,upvotes:1511,downvotes:55,score:.9141},uploaded:"2019-10-08T01:17:01.471Z",automapper:!1,ranked:!0,qualified:!1,versions:[{hash:"a6ccabb105d0f2c24fe9f1dd6e4445782bc55616",key:"6888",state:"Published",createdAt:"2019-10-08T01:17:01.471Z",sageScore:6,diffs:[{njs:13,offset:0,notes:781,bombs:30,obstacles:11,nps:3.243,length:738.5,characteristic:"Standard",difficulty:"Hard",events:3865,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:240.815,paritySummary:{errors:1,warns:1,resets:1},stars:2.04},{njs:15,offset:0,notes:1177,bombs:32,obstacles:11,nps:4.888,length:738.5,characteristic:"Standard",difficulty:"Expert",events:3865,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:240.815,paritySummary:{errors:0,warns:0,resets:3},stars:3.31}],downloadURL:"https://cdn.beatsaver.com/a6ccabb105d0f2c24fe9f1dd6e4445782bc55616.zip",coverURL:"https://cdn.beatsaver.com/a6ccabb105d0f2c24fe9f1dd6e4445782bc55616.jpg",previewURL:"https://cdn.beatsaver.com/a6ccabb105d0f2c24fe9f1dd6e4445782bc55616.mp3"}],createdAt:"2019-10-08T01:17:01.471Z",updatedAt:"2019-10-08T01:17:01.471Z",lastPublishedAt:"2019-10-08T01:17:01.471Z"},{id:"5c92",name:"Caravan Palace - Lone Digger",description:"\nBPM: 124 | 3 Difficulties (Expert+, Expert, Hard) | Lighting done by me\n---------------------------------------------------------------------------------------------\n[Expert+]\nNJS: 19\nNotes: 1255\n---------------------------------------------------------------------------------------------\n[Expert]\nNotes: 986\nNJS: 18\n---------------------------------------------------------------------------------------------\n[Hard]\nNotes: 652\nNJS: 17\n---------------------------------------------------------------------------------------------\n\nMy Discord if you want to give feedback or just talk to me: Yun0#1355",uploader:{id:18845,name:"yun0",uniqueSet:!0,hash:"5cff0b7398cc5a672c84f6ca",avatar:"https://cdn.beatsaver.com/avatar/18845.jpg",type:"SIMPLE"},metadata:{bpm:124,duration:231,songName:"Lone Digger",songSubName:"",songAuthorName:"Caravan Palace",levelAuthorName:"Yun0"},stats:{plays:0,downloads:2362,upvotes:1174,downvotes:37,score:.9141},uploaded:"2019-08-13T03:30:08.712Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"928da96d4e5fcfeb87ac1cc6fcf6287b2f4c5e2d",key:"5c92",state:"Published",createdAt:"2019-08-13T03:30:08.712Z",sageScore:6,diffs:[{njs:17,offset:0,notes:652,bombs:0,obstacles:4,nps:2.932,length:459.5,characteristic:"Standard",difficulty:"Hard",events:3826,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:222.339,paritySummary:{errors:0,warns:0,resets:0}},{njs:18,offset:-.25,notes:986,bombs:0,obstacles:6,nps:4.435,length:459.5,characteristic:"Standard",difficulty:"Expert",events:3826,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:222.339,paritySummary:{errors:3,warns:0,resets:0}},{njs:19,offset:.3,notes:1255,bombs:4,obstacles:49,nps:5.596,length:463.5,characteristic:"Standard",difficulty:"ExpertPlus",events:3826,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:224.274,paritySummary:{errors:9,warns:6,resets:2}}],downloadURL:"https://cdn.beatsaver.com/928da96d4e5fcfeb87ac1cc6fcf6287b2f4c5e2d.zip",coverURL:"https://cdn.beatsaver.com/928da96d4e5fcfeb87ac1cc6fcf6287b2f4c5e2d.jpg",previewURL:"https://cdn.beatsaver.com/928da96d4e5fcfeb87ac1cc6fcf6287b2f4c5e2d.mp3"}],createdAt:"2019-08-13T03:30:08.712Z",updatedAt:"2019-08-13T03:30:08.712Z",lastPublishedAt:"2019-08-13T03:30:08.712Z"},{id:"1bc4",name:"Without Me (Nurko & Miles Away Remix) - Halsey",description:"Difficulties: Expert+ Only",uploader:{id:30311,name:"bennydabeast",uniqueSet:!0,hash:"5cff0b7298cc5a672c84e98d",avatar:"https://cdn.beatsaver.com/avatar/30311.jpg",type:"SIMPLE"},metadata:{bpm:140,duration:257,songName:"Without Me (Nurko & Miles Away Remix)",songSubName:"Halsey",songAuthorName:"BennyDaBeast",levelAuthorName:"bennydabeast"},stats:{plays:0,downloads:1240,upvotes:681,downvotes:13,score:.9141},uploaded:"2018-10-23T03:10:41Z",automapper:!1,ranked:!1,qualified:!1,versions:[{hash:"e447ac77708869ac151546110aecda97acac2cab",key:"1bc4",state:"Published",createdAt:"2018-10-23T03:10:41Z",sageScore:5,diffs:[{njs:15,offset:0,notes:1206,bombs:0,obstacles:1,nps:4.885,length:576,characteristic:"Standard",difficulty:"ExpertPlus",events:1646,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:246.857,paritySummary:{errors:102,warns:151,resets:0}}],downloadURL:"https://cdn.beatsaver.com/e447ac77708869ac151546110aecda97acac2cab.zip",coverURL:"https://cdn.beatsaver.com/e447ac77708869ac151546110aecda97acac2cab.jpg",previewURL:"https://cdn.beatsaver.com/e447ac77708869ac151546110aecda97acac2cab.mp3"}],createdAt:"2018-10-23T03:10:41Z",updatedAt:"2018-10-23T03:10:41Z",lastPublishedAt:"2018-10-23T03:10:41Z"},{id:"900",name:"Limbo - Daddy Yankee",description:"If you don't at least try to limbo, you didn't really finish the map.",uploader:{id:50121,name:"ayewyn",uniqueSet:!1,hash:"5cff0b7398cc5a672c84f7ef",avatar:"https://www.gravatar.com/avatar/5cff0b7398cc5a672c84f7ef?d=retro",type:"SIMPLE"},metadata:{bpm:125,duration:225,songName:"Limbo",songSubName:"Daddy Yankee",songAuthorName:"Ayewyn",levelAuthorName:"ayewyn"},stats:{plays:0,downloads:6900,upvotes:2388,downvotes:106,score:.9141},uploaded:"2018-07-12T13:34:01Z",automapper:!1,ranked:!0,qualified:!1,versions:[{hash:"2738e2374b821b6aa9839f128a70caae8333cb1c",key:"900",state:"Published",createdAt:"2018-07-12T13:34:01Z",sageScore:5,diffs:[{njs:10,offset:0,notes:232,bombs:0,obstacles:24,nps:1.073,length:450.5,characteristic:"Standard",difficulty:"Easy",events:853,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:216.24,paritySummary:{errors:33,warns:76,resets:0},stars:.95},{njs:10,offset:0,notes:464,bombs:0,obstacles:12,nps:2.146,length:450.5,characteristic:"Standard",difficulty:"Normal",events:853,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:216.24,paritySummary:{errors:35,warns:141,resets:0}},{njs:10,offset:0,notes:637,bombs:0,obstacles:12,nps:2.943,length:451,characteristic:"Standard",difficulty:"Hard",events:853,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:216.48,paritySummary:{errors:34,warns:190,resets:0}},{njs:10,offset:0,notes:689,bombs:0,obstacles:12,nps:3.181,length:451.25,characteristic:"Standard",difficulty:"Expert",events:853,chroma:!1,me:!1,ne:!1,cinema:!1,seconds:216.6,paritySummary:{errors:44,warns:187,resets:0}}],downloadURL:"https://cdn.beatsaver.com/2738e2374b821b6aa9839f128a70caae8333cb1c.zip",coverURL:"https://cdn.beatsaver.com/2738e2374b821b6aa9839f128a70caae8333cb1c.jpg",previewURL:"https://cdn.beatsaver.com/2738e2374b821b6aa9839f128a70caae8333cb1c.mp3"}],createdAt:"2018-07-12T13:34:01Z",updatedAt:"2018-07-12T13:34:01Z",lastPublishedAt:"2018-07-12T13:34:01Z"}]},function(e,t,a){if(AFRAME.registerComponent("song-info-positioner",{schema:{victory:{default:!1}},update:function(){this.data.victory?this.el.object3D.position.y=-1.2:this.el.object3D.position.y=-1}}),window.AFRAME){const t=["song-info-positioner"],a=[],s=[];if(e.hot.dispose(e=>{e.needsReplace=!0,t.forEach(e=>{delete AFRAME.components[e];const t=AFRAME.scenes[0].querySelectorAll(`[${e}]`);for(let a=0;a{delete AFRAME.shaders[e];const t=AFRAME.scenes[0].querySelectorAll("[material]");for(let a=0;a{delete AFRAME.systems[e],delete AFRAME.scenes[0].systems[e]})}),e.hot.data&&e.hot.data.needsReplace){t.forEach(e=>{const t="data-__hot-"+e,a=document.querySelectorAll(`[${t}]`);for(let s=0;s{e.needsReplace=!0,t.forEach(e=>{delete AFRAME.components[e];const t=AFRAME.scenes[0].querySelectorAll(`[${e}]`);for(let a=0;a{delete AFRAME.shaders[e];const t=AFRAME.scenes[0].querySelectorAll("[material]");for(let a=0;a{delete AFRAME.systems[e],delete AFRAME.scenes[0].systems[e]})}),e.hot.data&&e.hot.data.needsReplace){t.forEach(e=>{const t="data-__hot-"+e,a=document.querySelectorAll(`[${t}]`);for(let s=0;s{this.progress.scale.x=1e-4})},update:function(e){this.progress.scale.x=1e-4},updateInfo:function(){const e=this.el.sceneEl.components.song.source;if(!e||!e.buffer)return;const t=this.el.sceneEl.components.song.getCurrentTime()/e.buffer.duration;t&&(this.progress.scale.x=t)},tick:function(){this.data.enabled&&this.updateInfo()}}),window.AFRAME){const t=["song-progress-info"],a=[],s=[];if(e.hot.dispose(e=>{e.needsReplace=!0,t.forEach(e=>{delete AFRAME.components[e];const t=AFRAME.scenes[0].querySelectorAll(`[${e}]`);for(let a=0;a{delete AFRAME.shaders[e];const t=AFRAME.scenes[0].querySelectorAll("[material]");for(let a=0;a{delete AFRAME.systems[e],delete AFRAME.scenes[0].systems[e]})}),e.hot.data&&e.hot.data.needsReplace){t.forEach(e=>{const t="data-__hot-"+e,a=document.querySelectorAll(`[${t}]`);for(let s=0;s{this.audioAnalyser.resumeContext();const t=this.audioAnalyser.gainNode.gain;t.cancelScheduledValues(0),t.setValueAtTime(.05,0),this.source=e.detail,this.source.start(),this.el.emit("victory")},s),void this.audioAnalyser.refreshSource();!e.isBeatsPreloaded&&this.data.isBeatsPreloaded&&this.source&&this.startAudio(),!e.challengeId||t.challengeId?(e.isPlaying&&!t.isPlaying&&(this.audioAnalyser.suspendContext(),this.isAudioPlaying=!1),!e.isPlaying&&t.isPlaying&&this.source&&(this.audioAnalyser.resumeContext(),this.isAudioPlaying=!0)):this.stopAudio()}else this.onGameOver()},processAudio:function(){this.el.sceneEl.emit("songprocessstart",null,!1),this.getAudio().then(e=>{this.el.sceneEl.emit("songprocessfinish",null,!1)}).catch(console.error)},getAudio:function(){const e=this.data;return this.source&&this.stopAudio(),this.isAudioPlaying=!1,new Promise(t=>{e.analyserEl.addEventListener("audioanalyserbuffersource",e=>{this.source=e.detail,t(this.source)},s),this.analyserSetter.src=this.data.audio,e.analyserEl.setAttribute("audioanalyser",this.analyserSetter)})},stopAudio:function(){this.source?(this.source.onended=null,this.isAudioPlaying&&this.source.stop(),this.source.disconnect(),this.source=null,this.isAudioPlaying=!1):console.warn("[song] Tried to stopAudio, but not playing.")},onSongComplete:function(){this.data.isPlaying&&this.el.emit("songcomplete")},onGameOver:function(){this.isAudioPlaying=!1;const e=this.source.playbackRate;e.setValueAtTime(e.value,this.context.currentTime),e.linearRampToValueAtTime(0,this.context.currentTime+3.5);const t=this.audioAnalyser.gainNode.gain;t.setValueAtTime(t.value,this.context.currentTime),t.linearRampToValueAtTime(0,this.context.currentTime+3.5),setTimeout(()=>{this.data.isGameOver&&this.stopAudio()},3500)},onRestart:function(){this.isAudioPlaying=!1,this.source&&this.source.disconnect();this.audioAnalyser.gainNode.gain.cancelScheduledValues(0),this.data.analyserEl.addEventListener("audioanalyserbuffersource",e=>{this.source=e.detail,this.el.sceneEl.emit("songloadfinish",null,!1)},s),this.audioAnalyser.refreshSource()},onWallHitStart:function(){this.audioAnalyser.gainNode.gain.linearRampToValueAtTime(.1,this.context.currentTime+.1)},onWallHitEnd:function(){this.audioAnalyser.gainNode.gain.linearRampToValueAtTime(.5,this.context.currentTime+.1)},startAudio:function(){this.audioAnalyser.gainNode.gain.setValueAtTime(.5,this.context.currentTime),this.songStartTime=this.context.currentTime,this.source.onended=this.onSongComplete,this.source.start(0,n||0),this.isAudioPlaying=!0},getCurrentTime:function(){return this.context.currentTime-this.songStartTime}}),window.AFRAME){const t=["song"],a=[],s=[];if(e.hot.dispose(e=>{e.needsReplace=!0,t.forEach(e=>{delete AFRAME.components[e];const t=AFRAME.scenes[0].querySelectorAll(`[${e}]`);for(let a=0;a{delete AFRAME.shaders[e];const t=AFRAME.scenes[0].querySelectorAll("[material]");for(let a=0;a{delete AFRAME.systems[e],delete AFRAME.scenes[0].systems[e]})}),e.hot.data&&e.hot.data.needsReplace){t.forEach(e=>{const t="data-__hot-"+e,a=document.querySelectorAll(`[${t}]`);for(let s=0;s{e.needsReplace=!0,t.forEach(e=>{delete AFRAME.components[e];const t=AFRAME.scenes[0].querySelectorAll(`[${e}]`);for(let a=0;a{delete AFRAME.shaders[e];const t=AFRAME.scenes[0].querySelectorAll("[material]");for(let a=0;a{delete AFRAME.systems[e],delete AFRAME.scenes[0].systems[e]})}),e.hot.data&&e.hot.data.needsReplace){t.forEach(e=>{const t="data-__hot-"+e,a=document.querySelectorAll(`[${t}]`);for(let s=0;s{e.needsReplace=!0,t.forEach(e=>{delete AFRAME.components[e];const t=AFRAME.scenes[0].querySelectorAll(`[${e}]`);for(let a=0;a{delete AFRAME.shaders[e];const t=AFRAME.scenes[0].querySelectorAll("[material]");for(let a=0;a{delete AFRAME.systems[e],delete AFRAME.scenes[0].systems[e]})}),e.hot.data&&e.hot.data.needsReplace){t.forEach(e=>{const t="data-__hot-"+e,a=document.querySelectorAll(`[${t}]`);for(let s=0;s(Math.random()-.5)*this.data.radius*2,t=new THREE.BufferGeometry;this.material=this.el.sceneEl.systems.materials.stars;const a=[];for(let t=0;t{e.needsReplace=!0,t.forEach(e=>{delete AFRAME.components[e];const t=AFRAME.scenes[0].querySelectorAll(`[${e}]`);for(let a=0;a{delete AFRAME.shaders[e];const t=AFRAME.scenes[0].querySelectorAll("[material]");for(let a=0;a{delete AFRAME.systems[e],delete AFRAME.scenes[0].systems[e]})}),e.hot.data&&e.hot.data.needsReplace){t.forEach(e=>{const t="data-__hot-"+e,a=document.querySelectorAll(`[${t}]`);for(let s=0;s{e.needsReplace=!0,t.forEach(e=>{delete AFRAME.components[e];const t=AFRAME.scenes[0].querySelectorAll(`[${e}]`);for(let a=0;a{delete AFRAME.shaders[e];const t=AFRAME.scenes[0].querySelectorAll("[material]");for(let a=0;a{delete AFRAME.systems[e],delete AFRAME.scenes[0].systems[e]})}),e.hot.data&&e.hot.data.needsReplace){t.forEach(e=>{const t="data-__hot-"+e,a=document.querySelectorAll(`[${t}]`);for(let s=0;s{e.needsReplace=!0,t.forEach(e=>{delete AFRAME.components[e];const t=AFRAME.scenes[0].querySelectorAll(`[${e}]`);for(let a=0;a{delete AFRAME.shaders[e];const t=AFRAME.scenes[0].querySelectorAll("[material]");for(let a=0;a{delete AFRAME.systems[e],delete AFRAME.scenes[0].systems[e]})}),e.hot.data&&e.hot.data.needsReplace){t.forEach(e=>{const t="data-__hot-"+e,a=document.querySelectorAll(`[${t}]`);for(let s=0;s{const s=a.detail.model.getObjectByName(t.name);e.setObject3D("mesh",s.clone()),e.setAttribute("material","shader","flat"),e.emit("subobjectloaded",null,!1)})}}),window.AFRAME){const t=["sub-object"],a=[],s=[];if(e.hot.dispose(e=>{e.needsReplace=!0,t.forEach(e=>{delete AFRAME.components[e];const t=AFRAME.scenes[0].querySelectorAll(`[${e}]`);for(let a=0;a{delete AFRAME.shaders[e];const t=AFRAME.scenes[0].querySelectorAll("[material]");for(let a=0;a{delete AFRAME.systems[e],delete AFRAME.scenes[0].systems[e]})}),e.hot.data&&e.hot.data.needsReplace){t.forEach(e=>{const t="data-__hot-"+e,a=document.querySelectorAll(`[${t}]`);for(let s=0;so.x&&a.xo.y&&1-a.y [raycaster]"].join(",")),this.hand){if(!this.hand.hasLoaded)return void this.hand.addEventListener("loaded",this.setupHand.bind(this));var e=this.hand.components.raycaster,t={};if(e){if(this.hand.ownRaycaster=!1,this.data.injectToRaycasterObjects){var a=e.data.objects.split(",");-1===a.indexOf(".keyboardRaycastable")&&a.push(".keyboardRaycastable"),t.objects=a.join(",").replace(/^,/,""),this.hand.setAttribute("raycaster",t)}}else this.hand.ownRaycaster=!0,t.showLine=this.data.show,t.enabled=this.data.show,this.data.injectToRaycasterObjects&&(t.objects=".keyboardRaycastable"),this.hand.setAttribute("raycaster",t);this.raycaster=this.hand.components.raycaster}else console.error('super-keyboard: no controller found. Add with controller or specify with super-keyboard="hand: #selectorToController".')},filter:function(e){if(""===e)return"";for(var t=0;t0?e.substr(0,this.data.maxLength):e},click:function(e){if(this.keyHover){switch(this.keyHover.key){case"Enter":this.accept();break;case"Insert":return;case"Delete":this.rawValue=this.rawValue.substr(0,this.rawValue.length-1);var t=this.filter(this.rawValue);this.el.setAttribute("super-keyboard","value",t),this.updateTextInput(t),this.changeEventDetail.value=t,this.el.emit("superkeyboardchange",this.changeEventDetail);break;case"Shift":this.shift=!this.shift,this.keyHover.el.setAttribute("material","color",this.shift?this.data.keyHoverColor:this.data.keyBgColor);break;case"Escape":this.dismiss();break;default:if(this.data.maxLength>0&&this.rawValue.length>this.data.maxLength)break;this.rawValue+=this.shift?this.keyHover.key.toUpperCase():this.keyHover.key;t=this.filter(this.rawValue);this.el.setAttribute("super-keyboard","value",t),this.updateTextInput(t),this.changeEventDetail.value=t,this.el.emit("superkeyboardchange",this.changeEventDetail)}this.updateKeyColorPlane(this.keyHover.key,this.keyPressColor);var a=this;setTimeout((function(){a.updateKeyColorPlane(a.keyHover.key,a.keyHoverColor)}),100),this.updateCursorPosition()}},open:function(){this.el.object3D.visible=!0,this.hand&&this.hand.ownRaycaster&&this.hand.setAttribute("raycaster",{showLine:!0,enabled:!0})},close:function(){this.el.object3D.visible=!1,this.hand&&this.hand.ownRaycaster&&this.hand.setAttribute("raycaster",{showLine:!1,enabled:!1})},accept:function(){this.el.emit("superkeyboardinput",{value:this.data.value}),this.data.multipleInputs?(this.rawValue="",this.data.value="",this.updateTextInput("")):(this.el.object3D.visible=!1,this.hand&&this.hand.ownRaycaster&&this.hand.setAttribute("raycaster",{showLine:!1,enabled:!1}),this.data.show=!1)},dismiss:function(){this.data.value=this.defaultValue,this.updateTextInput(),this.el.object3D.visible=!1,this.hand&&this.hand.ownRaycaster&&this.hand.setAttribute("raycaster",{showLine:!1,enabled:!1}),this.el.emit("superkeyboarddismiss"),this.data.show=!1},blur:function(e){this.focused=!1,this.keyHover&&"Shift"!==this.keyHover.key&&this.updateKeyColorPlane(this.keyHover.key,this.keyBgColor),this.keyHover=null},hover:function(e){this.focused=!0},startBlinking:function(){this.stopBlinking(),this.intervalId=window.setInterval(this.blink.bind(this),this.data.blinkingSpeed)},stopBlinking:function(){window.clearInterval(this.intervalId),this.intervalId=0},blink:function(){this.cursor.object3D.visible=!this.cursor.object3D.visible},setCustomFilter:function(e){this.userFilterFunc=e},addCustomModel:function(e,t){e&&(s[e]=t)},updateCursorPosition:function(){var e=this.textInput.components.text.currentFont;if(!e){var t=this;return this.cursor.object3D.visible=!1,void window.setTimeout((function(){t.updateCursorPosition(),t.startBlinking()}),700)}var a=this.data.width,o=s[this.data.model],i=-this.inputRect.h/2*a/2.4+o.inputOffsetY*a,c=this.data.width/this.textInput.components.text.data.wrapCount,d=0,l=n[this.textInput.components.text.data.font];void 0===l&&(l=20);for(var u=0;u{e.needsReplace=!0,t.forEach(e=>{delete AFRAME.components[e];const t=AFRAME.scenes[0].querySelectorAll(`[${e}]`);for(let a=0;a{delete AFRAME.shaders[e];const t=AFRAME.scenes[0].querySelectorAll("[material]");for(let a=0;a{delete AFRAME.systems[e],delete AFRAME.scenes[0].systems[e]})}),e.hot.data&&e.hot.data.needsReplace){t.forEach(e=>{const t="data-__hot-"+e,a=document.querySelectorAll(`[${t}]`);for(let s=0;s{e.detail&&"off"!==e.detail?this.setColor("color1",e.detail):this.setColor("color1","primary")}),e.sceneEl.addEventListener("curveoddstageeventcolor",e=>{e.detail&&"off"!==e.detail?this.setColor("color2",e.detail):this.setColor("color2","secondary")})},setColor:function(e,t){const a=this.el.components.material.material.uniforms[e].value,n=this.el.sceneEl.systems.materials.scheme[t];s.set(n),a.x=s.r,a.y=s.g,a.z=s.b}}),window.AFRAME){const t=["supercurve-color"],a=[],s=[];if(e.hot.dispose(e=>{e.needsReplace=!0,t.forEach(e=>{delete AFRAME.components[e];const t=AFRAME.scenes[0].querySelectorAll(`[${e}]`);for(let a=0;a{delete AFRAME.shaders[e];const t=AFRAME.scenes[0].querySelectorAll("[material]");for(let a=0;a{delete AFRAME.systems[e],delete AFRAME.scenes[0].systems[e]})}),e.hot.data&&e.hot.data.needsReplace){t.forEach(e=>{const t="data-__hot-"+e,a=document.querySelectorAll(`[${t}]`);for(let s=0;s{e.needsReplace=!0,t.forEach(e=>{delete AFRAME.components[e];const t=AFRAME.scenes[0].querySelectorAll(`[${e}]`);for(let a=0;a{delete AFRAME.shaders[e];const t=AFRAME.scenes[0].querySelectorAll("[material]");for(let a=0;a{delete AFRAME.systems[e],delete AFRAME.scenes[0].systems[e]})}),e.hot.data&&e.hot.data.needsReplace){t.forEach(e=>{const t="data-__hot-"+e,a=document.querySelectorAll(`[${t}]`);for(let s=0;s=1)return;const s=this.supercurve,n=s.curve;if(!n)return;this.curveProgress=this.curveProgress||0;const r=a.speed*(t/1e3);if(this.curveProgress+=r/this.supercurve.fullLength,this.data.target.components.material.material.uniforms.cameraPercent.value=this.curveProgress,this.curveProgress>=1)return this.curveProgress=1,void(this.data.target.components.material.material.uniforms.cameraPercent.value=this.curveProgress);n.getPointAt(this.curveProgress,this.el.object3D.position),this.songProgress=s.curveProgressToSongProgress(this.curveProgress),s.alignToCurve(this.songProgress,this.el.object3D)}}()}),window.AFRAME){const t=["supercurve","supercurve-follow"],a=[],s=[];if(e.hot.dispose(e=>{e.needsReplace=!0,t.forEach(e=>{delete AFRAME.components[e];const t=AFRAME.scenes[0].querySelectorAll(`[${e}]`);for(let a=0;a{delete AFRAME.shaders[e];const t=AFRAME.scenes[0].querySelectorAll("[material]");for(let a=0;a{delete AFRAME.systems[e],delete AFRAME.scenes[0].systems[e]})}),e.hot.data&&e.hot.data.needsReplace){t.forEach(e=>{const t="data-__hot-"+e,a=document.querySelectorAll(`[${t}]`);for(let s=0;s0)){c=n;break}c=n-1}if(s[n=c]===a)return n/(r-1);var d=s[n];return(n+(a-d)/(s[n+1]-d))/(r-1)},getTangent:(o=new THREE.Vector3,i=new THREE.Vector3,function(e,t){var a,s=e-1e-4,n=e+1e-4;return s<0&&(s=0),n>1&&(n=1),this.getPoint(s,o),this.getPoint(n,i),t?(a=t).copy(i).sub(o):a=i.clone().sub(o),a.normalize()}),getTangentAt:function(e,t){var a=this.getUtoTmapping(e);return this.getTangent(a,t)},computeFrenetFrames:function(e,t){var r,o,i,c=new s,d=[],l=[],u=[],h=new s,m=new n;for(r=0;r<=e;r++)o=r/e,d[r]=this.getTangentAt(o),d[r].normalize();l[0]=new s,u[0]=new s;var f=Number.MAX_VALUE,p=Math.abs(d[0].x),b=Math.abs(d[0].y),y=Math.abs(d[0].z);for(p<=f&&(f=p,c.set(1,0,0)),b<=f&&(f=b,c.set(0,1,0)),y<=f&&c.set(0,0,1),h.crossVectors(d[0],c).normalize(),l[0].crossVectors(d[0],h),u[0].crossVectors(d[0],l[0]),r=1;r<=e;r++)l[r]=l[r-1].clone(),u[r]=u[r-1].clone(),h.crossVectors(d[r-1],d[r]),h.length()>Number.EPSILON&&(h.normalize(),i=Math.acos(a.clamp(d[r-1].dot(d[r]),-1,1)),l[r].applyMatrix4(m.makeRotationAxis(h,i))),u[r].crossVectors(d[r],l[r]);if(!0===t)for(i=Math.acos(a.clamp(l[0].dot(l[e]),-1,1)),i/=e,d[0].dot(h.crossVectors(l[0],l[e]))>0&&(i=-i),r=1;r<=e;r++)l[r].applyMatrix4(m.makeRotationAxis(d[r],i*r)),u[r].crossVectors(d[r],l[r]);return{tangents:d,normals:l,binormals:u}},clone:function(){return(new this.constructor).copy(this)},copy:function(e){return this.arcLengthDivisions=e.arcLengthDivisions,this},toJSON:function(){var e={metadata:{version:4.5,type:"Curve",generator:"Curve.toJSON"}};return e.arcLengthDivisions=this.arcLengthDivisions,e.type=this.type,e},fromJSON:function(e){return this.arcLengthDivisions=e.arcLengthDivisions,this}}),THREE.Curve=r},function(e,t){const a=THREE.Vector3,s=THREE.Curve;function n(){var e=0,t=0,a=0,s=0;function n(n,r,o,i){e=n,t=o,a=-3*n+3*r-2*o-i,s=2*n-2*r+o+i}return{initCatmullRom:function(e,t,a,s,r){n(t,a,r*(a-e),r*(s-t))},initNonuniformCatmullRom:function(e,t,a,s,r,o,i){var c=(t-e)/r-(a-e)/(r+o)+(a-t)/o,d=(a-t)/o-(s-t)/(o+i)+(s-a)/i;n(t,a,c*=o,d*=o)},calc:function(n){var r=n*n;return e+t*n+a*r+s*(r*n)}}}var r=new a,o=new n,i=new n,c=new n;function d(e,t,a,n){s.call(this),this.type="CatmullRomCurve3",this.points=e||[],this.closed=t||!1,this.curveType=a||"centripetal",this.tension=n||.5}d.prototype=Object.create(s.prototype),d.prototype.constructor=d,d.prototype.isCatmullRomCurve3=!0,d.prototype.getPoint=function(e,t){var s,n,d,l,u=t||new a,h=this.points,m=h.length,f=(m-(this.closed?0:1))*e,p=Math.floor(f),b=f-p;if(this.closed?p+=p>0?0:(Math.floor(Math.abs(p)/m)+1)*m:0===b&&p===m-1&&(p=m-2,b=1),this.closed||p>0?s=h[(p-1)%m]:(r.subVectors(h[0],h[1]).add(h[0]),s=r),n=h[p%m],d=h[(p+1)%m],this.closed||p+2{e.needsReplace=!0,t.forEach(e=>{delete AFRAME.components[e];const t=AFRAME.scenes[0].querySelectorAll(`[${e}]`);for(let a=0;a{delete AFRAME.shaders[e];const t=AFRAME.scenes[0].querySelectorAll("[material]");for(let a=0;a{delete AFRAME.systems[e],delete AFRAME.scenes[0].systems[e]})}),e.hot.data&&e.hot.data.needsReplace){t.forEach(e=>{const t="data-__hot-"+e,a=document.querySelectorAll(`[${t}]`);for(let s=0;sthis.startTime+1e3&&(this.el.object3D.visible=!1,this.el.pause())}}),window.AFRAME){const t=["supercutfx"],a=[],s=[];if(e.hot.dispose(e=>{e.needsReplace=!0,t.forEach(e=>{delete AFRAME.components[e];const t=AFRAME.scenes[0].querySelectorAll(`[${e}]`);for(let a=0;a{delete AFRAME.shaders[e];const t=AFRAME.scenes[0].querySelectorAll("[material]");for(let a=0;a{delete AFRAME.systems[e],delete AFRAME.scenes[0].systems[e]})}),e.hot.data&&e.hot.data.needsReplace){t.forEach(e=>{const t="data-__hot-"+e,a=document.querySelectorAll(`[${t}]`);for(let s=0;s0;e--)n=3*e,a[n]=a[n-3],a[n+1]=a[n-2],a[n+2]=a[n-1],n+=r,a[n]=a[n-3],a[n+1]=a[n-2],a[n+2]=a[n-1];this.target.getWorldPosition(s),a[0]=s.x,a[1]=s.y+o,a[2]=s.z-.1,a[r+0]=s.x,a[r+1]=s.y-o,a[r+2]=s.z-.1,this.geometry.attributes.position.needsUpdate=!0}}),window.AFRAME){const t=["tail"],a=[],s=[];if(e.hot.dispose(e=>{e.needsReplace=!0,t.forEach(e=>{delete AFRAME.components[e];const t=AFRAME.scenes[0].querySelectorAll(`[${e}]`);for(let a=0;a{delete AFRAME.shaders[e];const t=AFRAME.scenes[0].querySelectorAll("[material]");for(let a=0;a{delete AFRAME.systems[e],delete AFRAME.scenes[0].systems[e]})}),e.hot.data&&e.hot.data.needsReplace){t.forEach(e=>{const t="data-__hot-"+e,a=document.querySelectorAll(`[${t}]`);for(let s=0;s=this.data.value&&(this.currentValue=this.data.value,this.data.emit&&this.el.emit("textcounterdone",null,!1),this.hasCompleted=!0),this.textValue.value=`${this.data.prefix}${this.decimals(this.currentValue)}${this.data.suffix}`,this.el.setAttribute("text",this.textValue))},decimals:function(e){var t=Math.pow(10,this.data.decimals);return(parseInt(e*t)/t).toFixed(this.data.decimals)}}),window.AFRAME){const t=["text-counter"],a=[],s=[];if(e.hot.dispose(e=>{e.needsReplace=!0,t.forEach(e=>{delete AFRAME.components[e];const t=AFRAME.scenes[0].querySelectorAll(`[${e}]`);for(let a=0;a{delete AFRAME.shaders[e];const t=AFRAME.scenes[0].querySelectorAll("[material]");for(let a=0;a{delete AFRAME.systems[e],delete AFRAME.scenes[0].systems[e]})}),e.hot.data&&e.hot.data.needsReplace){t.forEach(e=>{const t="data-__hot-"+e,a=document.querySelectorAll(`[${t}]`);for(let s=0;s{e.needsReplace=!0,t.forEach(e=>{delete AFRAME.components[e];const t=AFRAME.scenes[0].querySelectorAll(`[${e}]`);for(let a=0;a{delete AFRAME.shaders[e];const t=AFRAME.scenes[0].querySelectorAll("[material]");for(let a=0;a{delete AFRAME.systems[e],delete AFRAME.scenes[0].systems[e]})}),e.hot.data&&e.hot.data.needsReplace){t.forEach(e=>{const t="data-__hot-"+e,a=document.querySelectorAll(`[${t}]`);for(let s=0;s=t)return e.substring(0,t-3)+"...";return e}(this.data.value,this.data.length))}}),window.AFRAME){const t=["text-truncate"],a=[],s=[];if(e.hot.dispose(e=>{e.needsReplace=!0,t.forEach(e=>{delete AFRAME.components[e];const t=AFRAME.scenes[0].querySelectorAll(`[${e}]`);for(let a=0;a{delete AFRAME.shaders[e];const t=AFRAME.scenes[0].querySelectorAll("[material]");for(let a=0;a{delete AFRAME.systems[e],delete AFRAME.scenes[0].systems[e]})}),e.hot.data&&e.hot.data.needsReplace){t.forEach(e=>{const t="data-__hot-"+e,a=document.querySelectorAll(`[${t}]`);for(let s=0;s{e.needsReplace=!0,t.forEach(e=>{delete AFRAME.components[e];const t=AFRAME.scenes[0].querySelectorAll(`[${e}]`);for(let a=0;a{delete AFRAME.shaders[e];const t=AFRAME.scenes[0].querySelectorAll("[material]");for(let a=0;a{delete AFRAME.systems[e],delete AFRAME.scenes[0].systems[e]})}),e.hot.data&&e.hot.data.needsReplace){t.forEach(e=>{const t="data-__hot-"+e,a=document.querySelectorAll(`[${t}]`);for(let s=0;s{e.needsReplace=!0,t.forEach(e=>{delete AFRAME.components[e];const t=AFRAME.scenes[0].querySelectorAll(`[${e}]`);for(let a=0;a{delete AFRAME.shaders[e];const t=AFRAME.scenes[0].querySelectorAll("[material]");for(let a=0;a{delete AFRAME.systems[e],delete AFRAME.scenes[0].systems[e]})}),e.hot.data&&e.hot.data.needsReplace){t.forEach(e=>{const t="data-__hot-"+e,a=document.querySelectorAll(`[${t}]`);for(let s=0;sthis.enabledTime+250&&(this.mesh.visible=!0),this.mesh.material.uniforms.pulse.value*=.9,this.sampleBladePosition())},pulse:function(){this.mesh.material.uniforms.pulse.value=1},addLayer:function(e){const t=this.bladeColor,a=this.colors,s=this.segments,n=this.vertices;let r=2/s;this.layers>=this.maxLayers&&(this.layers=0);const o=this.layers*e;e=o+e;const i=this.layers*s*18,c=this.layers*s*24;for(let d=0;d{e.needsReplace=!0,t.forEach(e=>{delete AFRAME.components[e];const t=AFRAME.scenes[0].querySelectorAll(`[${e}]`);for(let a=0;a{delete AFRAME.shaders[e];const t=AFRAME.scenes[0].querySelectorAll("[material]");for(let a=0;a{delete AFRAME.systems[e],delete AFRAME.scenes[0].systems[e]})}),e.hot.data&&e.hot.data.needsReplace){t.forEach(e=>{const t="data-__hot-"+e,a=document.querySelectorAll(`[${t}]`);for(let s=0;s1&&(a=1),t.getPointAt(a,e.object3D.position),t.alignToCurve(a,e.object3D),e.play(),this.tunnels.push(e),this.requestTunnel()},clearTunnels:function(){this.timeout&&(clearTimeout(this.timeout),this.timeout=null);for(let e=0;ethis.curveFollowRig.object3D.position.z+5))return;{const t=this.tunnels.splice(e,1)[0];t.object3D.visible=!1,this.pool.returnEntity(t)}}}}),window.AFRAME){const t=["tunnels"],a=[],s=[];if(e.hot.dispose(e=>{e.needsReplace=!0,t.forEach(e=>{delete AFRAME.components[e];const t=AFRAME.scenes[0].querySelectorAll(`[${e}]`);for(let a=0;a{delete AFRAME.shaders[e];const t=AFRAME.scenes[0].querySelectorAll("[material]");for(let a=0;a{delete AFRAME.systems[e],delete AFRAME.scenes[0].systems[e]})}),e.hot.data&&e.hot.data.needsReplace){t.forEach(e=>{const t="data-__hot-"+e,a=document.querySelectorAll(`[${t}]`);for(let s=0;s{e.needsReplace=!0,t.forEach(e=>{delete AFRAME.components[e];const t=AFRAME.scenes[0].querySelectorAll(`[${e}]`);for(let a=0;a{delete AFRAME.shaders[e];const t=AFRAME.scenes[0].querySelectorAll("[material]");for(let a=0;a{delete AFRAME.systems[e],delete AFRAME.scenes[0].systems[e]})}),e.hot.data&&e.hot.data.needsReplace){t.forEach(e=>{const t="data-__hot-"+e,a=document.querySelectorAll(`[${t}]`);for(let s=0;s{e.needsReplace=!0,t.forEach(e=>{delete AFRAME.components[e];const t=AFRAME.scenes[0].querySelectorAll(`[${e}]`);for(let a=0;a{delete AFRAME.shaders[e];const t=AFRAME.scenes[0].querySelectorAll("[material]");for(let a=0;a{delete AFRAME.systems[e],delete AFRAME.scenes[0].systems[e]})}),e.hot.data&&e.hot.data.needsReplace){t.forEach(e=>{const t="data-__hot-"+e,a=document.querySelectorAll(`[${t}]`);for(let s=0;s{e.needsReplace=!0,t.forEach(e=>{delete AFRAME.components[e];const t=AFRAME.scenes[0].querySelectorAll(`[${e}]`);for(let a=0;a{delete AFRAME.shaders[e];const t=AFRAME.scenes[0].querySelectorAll("[material]");for(let a=0;a{delete AFRAME.systems[e],delete AFRAME.scenes[0].systems[e]})}),e.hot.data&&e.hot.data.needsReplace){t.forEach(e=>{const t="data-__hot-"+e,a=document.querySelectorAll(`[${t}]`);for(let s=0;s{e.needsReplace=!0,t.forEach(e=>{delete AFRAME.components[e];const t=AFRAME.scenes[0].querySelectorAll(`[${e}]`);for(let a=0;a{delete AFRAME.shaders[e];const t=AFRAME.scenes[0].querySelectorAll("[material]");for(let a=0;a{delete AFRAME.systems[e],delete AFRAME.scenes[0].systems[e]})}),e.hot.data&&e.hot.data.needsReplace){t.forEach(e=>{const t="data-__hot-"+e,a=document.querySelectorAll(`[${t}]`);for(let s=0;s{e.needsReplace=!0,t.forEach(e=>{delete AFRAME.components[e];const t=AFRAME.scenes[0].querySelectorAll(`[${e}]`);for(let a=0;a{delete AFRAME.shaders[e];const t=AFRAME.scenes[0].querySelectorAll("[material]");for(let a=0;a{delete AFRAME.systems[e],delete AFRAME.scenes[0].systems[e]})}),e.hot.data&&e.hot.data.needsReplace){t.forEach(e=>{const t="data-__hot-"+e,a=document.querySelectorAll(`[${t}]`);for(let s=0;s=this.songPosition&&(this.isRaycastable=!0,this.el.setAttribute("data-wall-active",""),this.isCeiling||(this.el.setAttribute("data-weapon-particles",""),this.el.setAttribute("raycastable-game",""))),a>=this.backPosition+.01&&this.returnToPool()},onGenerate:function(e,t,a,s,n,r){const o=this.el;this.isCeiling=n,this.backPosition=r,this.songPosition=e,this.setWallGeometry(e,t,a,s,n),o.getObject3D("mesh").material.uniforms.opacity.value=0,o.object3D.position.y=-5,o.components.animation__fadein.beginAnimation(),o.components.animation__scalein.beginAnimation()},setWallGeometry:function(){const e=new THREE.Vector3,t=new THREE.Vector3,a=new THREE.Vector3;return function(s,n,r,o,i){const c=this.el.sceneEl.components["beat-system"],d=this.curveEl.components.supercurve,l=s,u=s+o/d.length,h=i?1.5:2.5,m=-1*c.horizontalPositions[n]-r/2+.25;t.x=m-r/2,a.x=m+r/2;const f=(this.geometry=new THREE.BoxBufferGeometry(r,h,1,1,1,30)).attributes.position.array;for(let s=0;s{e.needsReplace=!0,t.forEach(e=>{delete AFRAME.components[e];const t=AFRAME.scenes[0].querySelectorAll(`[${e}]`);for(let a=0;a{delete AFRAME.shaders[e];const t=AFRAME.scenes[0].querySelectorAll("[material]");for(let a=0;a{delete AFRAME.systems[e],delete AFRAME.scenes[0].systems[e]})}),e.hot.data&&e.hot.data.needsReplace){t.forEach(e=>{const t="data-__hot-"+e,a=document.querySelectorAll(`[${t}]`);for(let s=0;s{e.needsReplace=!0,t.forEach(e=>{delete AFRAME.components[e];const t=AFRAME.scenes[0].querySelectorAll(`[${e}]`);for(let a=0;a{delete AFRAME.shaders[e];const t=AFRAME.scenes[0].querySelectorAll("[material]");for(let a=0;a{delete AFRAME.systems[e],delete AFRAME.scenes[0].systems[e]})}),e.hot.data&&e.hot.data.needsReplace){t.forEach(e=>{const t="data-__hot-"+e,a=document.querySelectorAll(`[${t}]`);for(let s=0;s{e.needsReplace=!0,t.forEach(e=>{delete AFRAME.components[e];const t=AFRAME.scenes[0].querySelectorAll(`[${e}]`);for(let a=0;a{delete AFRAME.shaders[e];const t=AFRAME.scenes[0].querySelectorAll("[material]");for(let a=0;a{delete AFRAME.systems[e],delete AFRAME.scenes[0].systems[e]})}),e.hot.data&&e.hot.data.needsReplace){t.forEach(e=>{const t="data-__hot-"+e,a=document.querySelectorAll(`[${t}]`);for(let s=0;s0,e.search.hasNext=e.search.page=t?e.substring(0,t-3)+"...":e:""}AFRAME.registerState({nonBindedStateKeys:["genres"],initialState:{activeHand:localStorage.getItem("hand")||"right",challenge:{audio:"",author:"",difficulty:"",beatmapCharacteristic:"",id:AFRAME.utils.getUrlParameter("challenge"),image:"",isBeatsPreloaded:!1,numBeats:void 0,songDuration:0,songName:"",songNameShort:"",songSubName:"",metadata:{}},colorPrimary:n.a.schemes[m].primary,colorScheme:m,colorSecondary:n.a.schemes[m].secondary,colorSecondaryBright:n.a.schemes[m].secondarybright,colorTertiary:n.a.schemes[m].tertiary,controllerType:"",damage:0,difficultyFilter:"All",difficultyFilterMenuOpen:!1,favorites:f,gameMode:"ride",genre:"",genres:a(193),genreMenuOpen:!1,has3DOFVR:!1,has6DOFVR:!1,hasSongLoadError:!1,hasVR:AFRAME.utils.device.checkHeadsetConnected()||"true"===AFRAME.utils.getUrlParameter("debugvr"),introActive:!h,inVR:"true"===AFRAME.utils.getUrlParameter("debugvr"),isIOS:AFRAME.utils.device.isIOS(),isGameOver:!1,isLoading:!1,isMenuOpening:!h,isPaused:!1,isPlaying:!1,isSearching:!1,isSongProcessing:!1,isVictory:!1,isZipFetching:!1,leaderboard:[],leaderboardFetched:!1,leaderboardQualified:!1,leaderboardNames:"",leaderboardScores:"",mainMenuActive:!1,menuActive:h,menuDifficulties:[],menuDifficultiesIds:[],menuSelectedChallenge:{author:"",difficulty:"",beatmapCharacteristic:"",downloads:"",downloadsText:"",genre:"",id:"",index:-1,image:"",isFavorited:!1,numBeats:void 0,songDuration:0,songInfoText:"",songLength:void 0,numBeats:void 0,songName:"",songSubName:"",version:"",metadata:{}},optionsMenuOpen:!1,playlist:"",playlists:a(194),playlistMenuOpen:!1,playlistTitle:"",score:{accuracy:100,accuracyScore:0,accuracyInt:100,activePanel:!1,beatsHit:0,beatsMissed:0,beatsText:"",combo:0,finalAccuracy:100,maxCombo:0,rank:"",score:0},search:{activePanel:!0,page:0,hasError:!1,hasNext:!1,hasPrev:!1,query:"",queryText:"",results:[],songNameTexts:"",songSubNameTexts:"",url:"",urlPage:0},searchResultsPage:[],speed:10},handlers:{activehandswap:e=>{e.activeHand="right"===e.activeHand?"left":"right",localStorage.setItem("activeHand",e.activeHand)},beathit:(e,t)=>{e.damage>.25&&(e.damage-=.25),e.score.beatsHit++,e.score.combo++,e.score.combo>e.score.maxCombo&&(e.score.maxCombo=e.score.combo),t.score=isNaN(t.score)?100:t.score,e.score.accuracyScore+=t.percent,e.score.score+=Math.floor(t.score),R(e)},beatmiss:e=>{e.score.beatsMissed++,A(e),R(e)},beatwrong:e=>{e.score.beatsMissed++,A(e),R(e)},beatloaderpreloadfinish:e=>{e.menuActive||(e.challenge.isBeatsPreloaded=!0)},colorschemechange:(e,t)=>{e.colorScheme=t,e.colorPrimary=n.a.schemes[t].primary,e.colorSecondary=n.a.schemes[t].secondary,e.colorSecondaryBright=n.a.schemes[t].secondarybright,e.colorTertiary=n.a.schemes[t].tertiary,localStorage.setItem("colorScheme",t)},controllerconnected:(e,t)=>{e.controllerType=t.name,e.has6DOFVR=-1!==["oculus-quest-controls","oculus-touch-controls","vive-controls","windows-motion-controls","generic-tracked-controller-controls"].indexOf(e.controllerType),e.has3DOFVR=-1!==["oculus-go-controls","daydream-controls"].indexOf(e.controllerType)},debugbeatpositioning:e=>{e.gameMode="classic",e.introActive=!1,e.menuActive=!1},debuggameplay:e=>{w(e),Object.assign(e.challenge,e.menuSelectedChallenge),e.menuActive=!1,e.menuSelectedChallenge.id="",e.isSearching=!1,e.isLoading=!1},debuggameover:e=>{e.isGameOver=!0,e.menuActive=!1},debugloading:e=>{u.id="-1",Object.assign(e.menuSelectedChallenge,u),Object.assign(e.challenge,u),e.menuActive=!1,e.isSongProcessing=!0},debugvictory:e=>{Object.assign(e.menuSelectedChallenge,u),Object.assign(e.challenge,u),e.isVictory=!0,e.leaderboardQualified=!0,e.menuActive=!1,e.score.accuracy=74.99,e.score.beatsHit=125,e.score.beatsMissed=125,e.score.maxCombo=123,e.score.rank="A",e.score.score=9001,e.introActive=!1,E(e)},difficultyfilter:(e,t)=>{e.difficultyFilter=t,e.difficultyFilterMenuOpen=!1,e.menuSelectedChallenge.id=""},difficultyfiltermenuclose:e=>{e.difficultyFilterMenuOpen=!1},difficultyfiltermenuopen:e=>{e.difficultyFilterMenuOpen=!0},displayconnected:e=>{if(e.hasVR=!0,!c)try{"getVRDisplays"in navigator&&navigator.getVRDisplays().then(e=>{e.length&&(c=!0)})}catch(e){}},favoritetoggle:e=>{const t=e.menuSelectedChallenge.id,a=o[t];if(a)if(e.menuSelectedChallenge.isFavorited){e.menuSelectedChallenge.isFavorited=!1;for(let a=0;ae.id===t).length)return;e.favorites.push(a),localStorage.setItem("favorites-v2",JSON.stringify(e.favorites))}},gamemenuresume:e=>{e.isPaused=!1},gamemenurestart:e=>{w(e),e.challenge.isBeatsPreloaded=!1,e.isGameOver=!1,e.isPaused=!1,e.isLoading=!0,e.isVictory=!1,e.leaderboardQualified=!1},gamemenuexit:e=>{w(e),e.challenge.isBeatsPreloaded=!1,e.isGameOver=!1,e.isPaused=!1,e.isVictory=!1,e.menuActive=!0,e.menuSelectedChallenge.id=e.challenge.id,e.menuSelectedChallenge.difficulty=e.challenge.difficulty,e.menuSelectedChallenge.beatmapCharacteristic=e.challenge.beatmapCharacteristic,e.menuSelectedChallenge.difficultyId=e.challenge.difficultyId,e.challenge.id="",e.leaderboardQualified=!1},gamemode:(e,t)=>{e.gameMode=t},genreclear:e=>{e.genre="",e.menuSelectedChallenge.id=""},genreselect:(e,t)=>{e.genre=t,e.genreMenuOpen=!1,e.menuSelectedChallenge.id="",e.playlist="",e.search.query=""},genremenuclose:e=>{e.genreMenuOpen=!1},genremenuopen:e=>{e.genreMenuOpen=!0},keyboardclose:e=>{e.isSearching=!1},keyboardopen:e=>{e.isSearching=!0,e.menuSelectedChallenge.id=""},leaderboard:(e,t)=>{e.leaderboard.length=0,e.leaderboardFetched=!0,e.leaderboardNames="",e.leaderboardScores="";for(let a=0;a{e.has6DOFVR&&(e.leaderboardQualified=!0)},leaderboardscoreadded:(e,t)=>{for(let a=0;a=e.leaderboard[a].score||a>=e.leaderboard.length-1){e.leaderboard.splice(a,0,t.scoreData);break}e.leaderboardNames="",e.leaderboardScores="";for(let t=0;t{e.leaderboardQualified=!1},menuback:e=>{e.difficultyFilterMenuOpen=!1,e.genreMenuOpen=!1,e.isSearching=!1,e.optionsMenuOpen=!1,e.playlistMenuOpen=!1},menuchallengeselect:(e,t)=>{let a=o[t];if(!a)return;Object.assign(e.menuSelectedChallenge,a),e.menuSelectedChallenge.songName=b(a.metadata.songName,24),e.menuDifficulties.length=0,e.menuDifficultiesIds.length=0;const s=JSON.parse(a.metadata.characteristics);for(const t of Object.keys(s))if(!["90Degree","360Degree"].includes(t))for(const a of Object.keys(s[t])){if(null===s[t][a])continue;let n=d[a],r=n;"Standard"!==t&&(r=t+"\n"+r),e.menuDifficulties.unshift({id:t+"-"+a,filename:a+t,difficultyName:n,renderName:r,beatmapCharacteristic:t,difficulty:a})}e.menuDifficulties.sort(v);for(const t of e.menuDifficulties)e.menuDifficultiesIds.push(t.id);const n=e.menuDifficulties[0];e.menuSelectedChallenge.difficulty=n.difficulty,e.menuSelectedChallenge.beatmapCharacteristic=n.beatmapCharacteristic,e.menuSelectedChallenge.difficultyId=n.id,e.menuSelectedChallenge.image=e.menuSelectedChallenge.coverURL,k(e,a),e.challenge.audio="",S(e),e.isSearching=!1;const r=!!e.favorites.filter(e=>e.id===t).length;e.menuSelectedChallenge.isFavorited=r,T(e),e.leaderboardLoading=!0,e.hasSongLoadError=!1,l[t]&&(e.hasSongLoadError=!0)},menuchallengeunselect:e=>{e.menuSelectedChallenge.id="",e.menuSelectedChallenge.difficultyId="",e.menuSelectedChallenge.difficulty="",e.menuSelectedChallenge.beatmapCharacteristic="",T(e)},menudifficultyselect:(e,t)=>{let a;for(const s of e.menuDifficulties)if(s.id===t){a=s;break}e.menuSelectedChallenge.difficultyId=t,e.menuSelectedChallenge.difficulty=a.difficulty,e.menuSelectedChallenge.beatmapCharacteristic=a.beatmapCharacteristic,k(e,e.menuSelectedChallenge),T(e),e.leaderboardLoading=!0},menuopeningend:e=>{e.isMenuOpening=!1},minehit:e=>{A(e)},optionsmenuopen:e=>{e.optionsMenuOpen=!0},pausegame:e=>{e.isPlaying&&(e.isPaused=!0)},playbuttonclick:e=>{if(""===e.menuSelectedChallenge.id)return;if(l[e.menuSelectedChallenge.id])return;let t="frontpage";e.playlist&&(t="playlist"),e.search.query&&(t="search"),e.genre&&(t="genre"),gtag("event","songsource",{event_label:t}),w(e),Object.assign(e.challenge,e.menuSelectedChallenge),gtag("event","difficulty",{event_label:e.challenge.difficulty}),e.menuActive=!1,e.menuSelectedChallenge.id="",e.menuSelectedChallenge.difficulty="",e.menuSelectedChallenge.beatmapCharacteristic="",e.isSearching=!1,e.isLoading=!0,e.loadingText="Loading...",gtag("event","colorscheme",{event_label:e.colorScheme})},playlistclear:(e,t)=>{e.menuSelectedChallenge.id="",e.playlist=""},playlistselect:(e,t)=>{e.genre="",e.menuSelectedChallenge.id="",e.playlist=t.id,e.playlistTitle=t.title,e.playlistMenuOpen=!1,e.search.query=""},playlistmenuclose:e=>{e.playlistMenuOpen=!1},playlistmenuopen:e=>{e.playlistMenuOpen=!0},searcherror:(e,t)=>{e.search.hasError=!0},searchprevpage:e=>{0!==e.search.page&&(e.search.page--,p(e))},searchnextpage:e=>{e.search.page>Math.floor(e.search.results.length/6)||(e.search.page++,p(e),void 0!==e.search.url&&e.search.page+3>Math.floor(e.search.results.length/6)&&(e.search.urlPage=e.search.urlPage+1,fetch(e.search.url.replaceAll("CURRENT_PAGE_INDEX",e.search.urlPage)).then(e=>e.json()).then(t=>{var a=(t.docs||t.maps).map(r);for(e.search.results.push(...a),i=0;i{var a;for(e.search.hasError=!1,e.search.page=0,e.search.url=t.url,e.search.urlPage=t.urlPage,e.search.query=t.query,e.search.queryText=b(t.query,10),e.search.results=t.results,a=0;a{if(gtag("event","songcomplete",{event_label:e.gameMode}),"ride"===e.gameMode||!e.inVR)return e.challenge.isBeatsPreloaded=!1,e.isVictory=!1,e.menuActive=!0,void(e.challenge.id="");e.isVictory=!0,e.score.score=isNaN(e.score.score)?0:e.score.score,R(e),e.score.finalAccuracy=e.score.accuracy;const t=parseFloat(e.score.accuracy);e.score.rank=t>=97?"S":t>=90?"A":t>=80?"B":t>=70?"C":t>=60?"D":"F",E(e)},songloadcancel:e=>{e.challenge.isBeatsPreloaded=!1,e.challenge.audio="",e.challenge.id="",e.challenge.version="",e.isZipFetching=!1,e.isLoading=!1,e.isSongProcessing=!1,e.menuActive=!0},songloaderror:e=>{l[e.menuSelectedChallenge.id||e.challenge.id]=!0,e.hasSongLoadError=!0,e.loadingText="Sorry! There was an error loading this song.\nPlease select another song.",e.challenge.id="",e.challenge.isBeatsPreloaded=!1,e.isSongProcessing=!1,e.isZipFetching=!1},songprocessfinish:e=>{e.isSongProcessing=!1,e.isLoading=!1},songprocessstart:e=>{e.isSongProcessing=!0,e.loadingText="Wrapping up..."},"enter-vr":e=>{e.inVR=AFRAME.utils.device.checkHeadsetConnected(),AFRAME.utils.device.isMobile()||(gtag("event","entervr",{}),AFRAME.utils.device.isOculusBrowser()&>ag("event","oculusbrowser",{}))},"exit-vr":e=>{e.inVR=!1,e.isPlaying&&(e.isPaused=!0)},startgame:e=>{e.introActive=!1,e.menuActive=!0},victoryfake:e=>{e.score.accuracy="74.99",e.score.rank="C"},wallhitstart:e=>{A(e)},ziploaderend:(e,t)=>{e.challenge.audio=t.audio,e.hasSongLoadError=!1,e.menuSelectedChallenge.version="",e.isZipFetching=!1},ziploaderstart:e=>{e.challenge.isBeatsPreloaded=!1,e.isZipFetching=!0}},computeState:e=>{e.isPlaying=!(e.menuActive||e.isLoading||e.isPaused||e.isVictory||e.isGameOver||e.isZipFetching||e.isSongProcessing||!e.challenge.id||e.introActive);const t=e.menuActive||e.isPaused||e.isVictory||e.isGameOver||e.isLoading||e.introActive;e.leftRaycasterActive=t&&"left"===e.activeHand&&e.inVR,e.rightRaycasterActive=t&&"right"===e.activeHand&&e.inVR,e.mainMenuActive=e.menuActive&&!e.genreMenuOpen&&!e.difficultyFilterMenuOpen&&!e.playlistMenuOpen&&!e.optionsMenuOpen&&!e.isSearching,e.score.active="ride"!==e.gameMode&&e.inVR&&(e.isPlaying||e.isPaused)}});const y=["easy","normal","hard","expert","expertPlus"],g=["Standard"];function v(e,t){const a=y.indexOf(e.difficulty),s=y.indexOf(t.difficulty);if(as)return 1;const n=g.indexOf(e.beatmapCharacteristic),r=g.indexOf(t.beatmapCharacteristic);return n>r?-1:n=0&&u.splice(t,1)}function y(e){var t=document.createElement("style");if(void 0===e.attrs.type&&(e.attrs.type="text/css"),void 0===e.attrs.nonce){var s=function(){0;return a.nc}();s&&(e.attrs.nonce=s)}return g(t,e.attrs),p(e,t),t}function g(e,t){Object.keys(t).forEach((function(a){e.setAttribute(a,t[a])}))}function v(e,t){var a,s,n,r;if(t.transform&&e.css){if(!(r="function"==typeof t.transform?t.transform(e.css):t.transform.default(e.css)))return function(){};e.css=r}if(t.singleton){var o=l++;a=d||(d=y(t)),s=S.bind(null,a,o,!1),n=S.bind(null,a,o,!0)}else e.sourceMap&&"function"==typeof URL&&"function"==typeof URL.createObjectURL&&"function"==typeof URL.revokeObjectURL&&"function"==typeof Blob&&"function"==typeof btoa?(a=function(e){var t=document.createElement("link");return void 0===e.attrs.type&&(e.attrs.type="text/css"),e.attrs.rel="stylesheet",g(t,e.attrs),p(e,t),t}(t),s=T.bind(null,a,t),n=function(){b(a),a.href&&URL.revokeObjectURL(a.href)}):(a=y(t),s=E.bind(null,a),n=function(){b(a)});return s(e),function(t){if(t){if(t.css===e.css&&t.media===e.media&&t.sourceMap===e.sourceMap)return;s(e=t)}else n()}}e.exports=function(e,t){if("undefined"!=typeof DEBUG&&DEBUG&&"object"!=typeof document)throw new Error("The style-loader cannot be used in a non-browser environment");(t=t||{}).attrs="object"==typeof t.attrs?t.attrs:{},t.singleton||"boolean"==typeof t.singleton||(t.singleton=o()),t.insertInto||(t.insertInto="head"),t.insertAt||(t.insertAt="bottom");var a=f(e,t);return m(a,t),function(e){for(var s=[],n=0;n\n\n \n\n \n\n \n \n\n \n \n\n \n \n \n \n\n\x3c!-- --\x3e\n \x3c!-- --\x3e\n\n\n\n \n\n \n\n \n\n \n\n \n\n \n\n \n\n \n\n \x3c!-- --\x3e\n --\x3e\n\n\x3c!-- --\x3e\n \x3c!-- --\x3e\n\x3c!-- Macro is a templating function. It is rendered into the HTML below with searchResults(). --\x3e\n\n\n\n\n\n\n\x3c!-- Menu container begins here. --\x3e\n\n\n \n\n \n \n\n \n\x3c!-- TODO: Sort the layout based on the IDs. --\x3e\n\n\n\n\x3c!-- All search result text merged and spaced out. --\x3e\n\n\n\n\n\n\n\n\n\n\n \n\n\n\n \n\n\n \n\n \n\n \x3c!-- Top-aligned. --\x3e\n \x3c!-- Uses bind-for and bind-item to render difficulties. --\x3e\n \n \n \n \n \n \n\n \x3c!-- Selected challenge info. --\x3e\n \n \n\n \n\n \n \n \n \n \n \n \n\n \n \n \n \n\n \n \n\n \n \n \n\n \n\n \n \n\n \n \n \n\n \x3c!-- --\x3e\n\n \n\n\x3c!-- --\x3e\n \x3c!-- --\x3e\n\n\n\n\n\n \n \n \n \n \n \n\n \n \n \n \n \n \n\n \n \n \n \n \n \n\n \n \n \n \n \n \n\n \n \n \n \n \n \n\n \n \n \n \n \n \n\n \n\n\x3c!-- --\x3e\n \x3c!-- --\x3e\n\n\n \n\n \n \n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n\n \n \n\n\x3c!-- --\x3e\n \x3c!-- --\x3e\n\n \n\n\x3c!-- --\x3e\n\n\n\x3c!-- Search. --\x3e\n\n\n\n\n \n \n\n\n\x3c!-- Top menu buttons. --\x3e\n\n\n\n\n \x3c!-- Playlist menu toggle. --\x3e\n \n \n \n \n\n \n \n \n\n \n \n\n \x3c!-- Search toggle. --\x3e\n \n \n \n \n\n \n \n \n\n \n \n\n \x3c!-- Difficulty menu toggle. --\x3e\n \x3c!-- \n \n \n \n\n \n --\x3e\n\n \x3c!-- Genre menu toggle. --\x3e\n \n \n \n \n\n \n \n \n\n \n \n\n\n\x3c!-- Options menu toggle. --\x3e\n\n \n \n \n\x3c!-- --\x3e\n \x3c!-- --\x3e\n\n\n\n\n\n\n\n\n\n\n\n\n \n\n \n \n\n\n \n \n \n \n\n\n \n\n\n \n \n \n \n\n\n \n\n \n \n\n\n \n \n \n \n\n\n \n\n\n \n \n \n \n\n\n \n\n\n \n \n \n \n\n\n \n\n \n\n \n\n \n \n\n\x3c!-- --\x3e\n \x3c!-- --\x3e\n\x3c!-- Victory. --\x3e\n\n\n \n\n \n\n \n\n \n\n \n\n \n\n \n \n \n \n\n \n \n \n \n\n\x3c!-- --\x3e\n \x3c!-- --\x3e\n\n\n \n\n \n\n \n\n \n\n \n\n \n\n \n \n\n \n \n \x3c!--slice9="width: 1.5; height: 0.24"--\x3e\n \n\n\x3c!-- --\x3e\n \x3c!-- --\x3e\n\n\n\n\n\n\n\n\n\n\n \n\n \n\n\n\n\n \n\n \n\n \n\n\x3c!-- --\x3e\n\n \n\n \n\n \n\n \n\n \n\n \n\n \x3c!-- --\x3e\n\n\n\n\n\n\n\n \n \n \n \n\n\n\n\n\n\x3c!-- --\x3e\n \x3c!-- --\x3e\n\n\n\n\n \n \n\n \n \n\n \n \n\n\x3c!-- --\x3e\n \x3c!-- --\x3e\n\n\n\n\n\x3c!-- Titles. --\x3e\n\n \n \n \n\n\n\n\n \x3c!-- Actions. --\x3e\n \n \n \n\n \n \n \n\n \n \n \n\n \x3c!-- Song info. --\x3e\n \n \n\n \n\n \n \n \n \n \n\n\x3c!-- --\x3e\n\n \x3c!-- Beat pieces, explosions, fx, and weapon trail. --\x3e\n \n\n \x3c!-- Supercut FX rings. --\x3e\n \n \n \n \n \n \n \n \n \n\n \x3c!-- Player. --\x3e\n \n \n \n \n\n \n \n\n \n \n \n \n \n\n \x3c!-- Blade. --\x3e\n \n \n \n \n \n \n\n \n \n \n \n\n \x3c!-- Punch. --\x3e\n \n \n \n \n \n\n \x3c!-- Ride. --\x3e\n \n \n \n \n\n \n \n \n \n \n \n \n\n \x3c!-- Blade. --\x3e\n \n \n \n \n \n \n\n \n \n \n \n\n \x3c!-- Punch. --\x3e\n \n \n \n \n \n\n \x3c!-- Ride. --\x3e\n \n \n \n \n\n \n \n \n\n \n \n\n \n \n\n \n \n\n';document.addEventListener("DOMContentLoaded",(function(){let e=document.getElementById("app");e||(e=document.createElement("div"),e.id="app",document.body.appendChild(e));e.innerHTML=s}));{const t=a(234).DiffDOM;if(e.hot.accept(),e.hot.data&&e.hot.data.oldHtml){const a=e.hot.data.oldHtml,n=new t,r=document.createElement("div");r.innerHTML=a;const o=document.createElement("div");o.innerHTML=s;const i=n.diff(r.querySelector("a-scene"),o.querySelector("a-scene"));n.apply(document.querySelector("a-scene"),i)}e.hot.dispose(e=>{e.oldHtml=s})}},,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,function(e,t,a){"use strict";function s(e,t,a){let n;return"#text"===e.nodeName?n=a.document.createTextNode(e.data):"#comment"===e.nodeName?n=a.document.createComment(e.data):("svg"===e.nodeName||t?(n=a.document.createElementNS("http://www.w3.org/2000/svg",e.nodeName),t=!0):n=a.document.createElement(e.nodeName),e.attributes&&Object.entries(e.attributes).forEach(([e,t])=>n.setAttribute(e,t)),e.childNodes&&e.childNodes.forEach(e=>n.appendChild(s(e,t,a))),a.valueDiffing&&(e.value&&(n.value=e.value),e.checked&&(n.checked=e.checked),e.selected&&(n.selected=e.selected))),n}function n(e,t){for(t=t.slice();t.length>0;){if(!e.childNodes)return!1;const a=t.splice(0,1)[0];e=e.childNodes[a]}return e}function r(e,t,a){let r,o,i,c,d,l=n(e,t[a._const.route]);const u={diff:t,node:l};if(a.preDiffApply(u))return!0;switch(t[a._const.action]){case a._const.addAttribute:if(!l||!l.setAttribute)return!1;l.setAttribute(t[a._const.name],t[a._const.value]);break;case a._const.modifyAttribute:if(!l||!l.setAttribute)return!1;l.setAttribute(t[a._const.name],t[a._const.newValue]),"INPUT"===l.nodeName&&"value"===t[a._const.name]&&(l.value=t[a._const.oldValue]);break;case a._const.removeAttribute:if(!l||!l.removeAttribute)return!1;l.removeAttribute(t[a._const.name]);break;case a._const.modifyTextElement:if(!l||3!==l.nodeType)return!1;a.textDiff(l,l.data,t[a._const.oldValue],t[a._const.newValue]);break;case a._const.modifyValue:if(!l||void 0===l.value)return!1;l.value=t[a._const.newValue];break;case a._const.modifyComment:if(!l||void 0===l.data)return!1;a.textDiff(l,l.data,t[a._const.oldValue],t[a._const.newValue]);break;case a._const.modifyChecked:if(!l||void 0===l.checked)return!1;l.checked=t[a._const.newValue];break;case a._const.modifySelected:if(!l||void 0===l.selected)return!1;l.selected=t[a._const.newValue];break;case a._const.replaceElement:l.parentNode.replaceChild(s(t[a._const.newValue],"http://www.w3.org/2000/svg"===l.namespaceURI,a),l);break;case a._const.relocateGroup:c=Array(...new Array(t.groupLength)).map(()=>l.removeChild(l.childNodes[t[a._const.from]])),c.forEach((e,s)=>{0===s&&(o=l.childNodes[t[a._const.to]]),l.insertBefore(e,o||null)});break;case a._const.removeElement:l.parentNode.removeChild(l);break;case a._const.addElement:i=t[a._const.route].slice(),d=i.splice(i.length-1,1)[0],l=n(e,i),l.insertBefore(s(t[a._const.element],"http://www.w3.org/2000/svg"===l.namespaceURI,a),l.childNodes[d]||null);break;case a._const.removeTextElement:if(!l||3!==l.nodeType)return!1;l.parentNode.removeChild(l);break;case a._const.addTextElement:if(i=t[a._const.route].slice(),d=i.splice(i.length-1,1)[0],r=a.document.createTextNode(t[a._const.value]),l=n(e,i),!l||!l.childNodes)return!1;l.insertBefore(r,l.childNodes[d]||null);break;default:console.log("unknown action")}return u.newNode=r,a.postDiffApply(u),!0}function o(e,t,a){const s=e[t];e[t]=e[a],e[a]=s}function i(e,t,a){t.length||(t=[t]),(t=t.slice()).reverse(),t.forEach(t=>{!function(e,t,a){switch(t[a._const.action]){case a._const.addAttribute:t[a._const.action]=a._const.removeAttribute,r(e,t,a);break;case a._const.modifyAttribute:o(t,a._const.oldValue,a._const.newValue),r(e,t,a);break;case a._const.removeAttribute:t[a._const.action]=a._const.addAttribute,r(e,t,a);break;case a._const.modifyTextElement:case a._const.modifyValue:case a._const.modifyComment:case a._const.modifyChecked:case a._const.modifySelected:case a._const.replaceElement:o(t,a._const.oldValue,a._const.newValue),r(e,t,a);break;case a._const.relocateGroup:o(t,a._const.from,a._const.to),r(e,t,a);break;case a._const.removeElement:t[a._const.action]=a._const.addElement,r(e,t,a);break;case a._const.addElement:t[a._const.action]=a._const.removeElement,r(e,t,a);break;case a._const.removeTextElement:t[a._const.action]=a._const.addTextElement,r(e,t,a);break;case a._const.addTextElement:t[a._const.action]=a._const.removeTextElement,r(e,t,a);break;default:console.log("unknown action")}}(e,t,a)})}a.r(t),a.d(t,"DiffDOM",(function(){return T})),a.d(t,"TraceLogger",(function(){return k}));class c{constructor(e={}){Object.entries(e).forEach(([e,t])=>this[e]=t)}toString(){return JSON.stringify(this)}setValue(e,t){return this[e]=t,this}}function d(e){const t=[];return"#text"!==e.nodeName&&"#comment"!==e.nodeName&&(t.push(e.nodeName),e.attributes&&(e.attributes.class&&t.push(`${e.nodeName}.${e.attributes.class.replace(/ /g,".")}`),e.attributes.id&&t.push(`${e.nodeName}#${e.attributes.id}`))),t}function l(e){const t={},a={};return e.forEach(e=>{d(e).forEach(e=>{const s=e in t;s||e in a?s&&(delete t[e],a[e]=!0):t[e]=!0})}),t}function u(e,t){const a=l(e),s=l(t),n={};return Object.keys(a).forEach(e=>{s[e]&&(n[e]=!0)}),n}function h(e){return delete e.outerDone,delete e.innerDone,delete e.valueDone,!e.childNodes||e.childNodes.every(h)}function m(e,t){if(!["nodeName","value","checked","selected","data"].every(a=>e[a]===t[a]))return!1;if(Boolean(e.attributes)!==Boolean(t.attributes))return!1;if(Boolean(e.childNodes)!==Boolean(t.childNodes))return!1;if(e.attributes){const a=Object.keys(e.attributes),s=Object.keys(t.attributes);if(a.length!==s.length)return!1;if(!a.every(a=>e.attributes[a]===t.attributes[a]))return!1}if(e.childNodes){if(e.childNodes.length!==t.childNodes.length)return!1;if(!e.childNodes.every((e,a)=>m(e,t.childNodes[a])))return!1}return!0}function f(e,t,a,s,n){if(!e||!t)return!1;if(e.nodeName!==t.nodeName)return!1;if("#text"===e.nodeName)return!!n||e.data===t.data;if(e.nodeName in a)return!0;if(e.attributes&&t.attributes){if(e.attributes.id){if(e.attributes.id!==t.attributes.id)return!1;if(`${e.nodeName}#${e.attributes.id}`in a)return!0}if(e.attributes.class&&e.attributes.class===t.attributes.class){if(`${e.nodeName}.${e.attributes.class.replace(/ /g,".")}`in a)return!0}}if(s)return!0;const r=e.childNodes?e.childNodes.slice().reverse():[],o=t.childNodes?t.childNodes.slice().reverse():[];if(r.length!==o.length)return!1;if(n)return r.every((e,t)=>e.nodeName===o[t].nodeName);{const e=u(r,o);return r.every((t,a)=>f(t,o[a],e,!0,!0))}}function p(e){return JSON.parse(JSON.stringify(e))}function b(e,t,a,s){let n=0,r=[];const o=e.length,i=t.length,c=Array(...new Array(o+1)).map(()=>[]),l=u(e,t);let h=o===i;h&&e.some((e,a)=>{const s=d(e),n=d(t[a]);return s.length!==n.length?(h=!1,!0):(s.some((e,t)=>{if(e!==n[t])return h=!1,!0}),!h||void 0)});for(let d=0;d=n&&(n=c[d+1][e+1],r=[d+1,e+1]))}}return 0!==n&&{oldValue:r[0]-n,newValue:r[1]-n,length:n}}function y(e,t){return Array(...new Array(e)).map(()=>t)}class g{constructor(){this.list=[]}add(e){this.list.push(...e)}forEach(e){this.list.forEach(t=>e(t))}}function v(e,t){let a,s,n=e;for(t=t.slice();t.length>0;){if(!n.childNodes)return!1;s=t.splice(0,1)[0],a=n,n=n.childNodes[s]}return{node:n,parentNode:a,nodeIndex:s}}function A(e,t,a){return t.forEach(t=>{!function(e,t,a){const s=v(e,t[a._const.route]);let n=s.node;const r=s.parentNode,o=s.nodeIndex,i=[],c={diff:t,node:n};if(a.preDiffApply(c))return!0;let d,l,u,h;switch(t[a._const.action]){case a._const.addAttribute:n.attributes||(n.attributes={}),n.attributes[t[a._const.name]]=t[a._const.value],"checked"===t[a._const.name]?n.checked=!0:"selected"===t[a._const.name]?n.selected=!0:"INPUT"===n.nodeName&&"value"===t[a._const.name]&&(n.value=t[a._const.value]);break;case a._const.modifyAttribute:n.attributes[t[a._const.name]]=t[a._const.newValue];break;case a._const.removeAttribute:delete n.attributes[t[a._const.name]],0===Object.keys(n.attributes).length&&delete n.attributes,"checked"===t[a._const.name]?n.checked=!1:"selected"===t[a._const.name]?delete n.selected:"INPUT"===n.nodeName&&"value"===t[a._const.name]&&delete n.value;break;case a._const.modifyTextElement:n.data=t[a._const.newValue];break;case a._const.modifyValue:n.value=t[a._const.newValue];break;case a._const.modifyComment:n.data=t[a._const.newValue];break;case a._const.modifyChecked:n.checked=t[a._const.newValue];break;case a._const.modifySelected:n.selected=t[a._const.newValue];break;case a._const.replaceElement:d=p(t[a._const.newValue]),d.outerDone=!0,d.innerDone=!0,d.valueDone=!0,r.childNodes[o]=d;break;case a._const.relocateGroup:l=n.childNodes.splice(t[a._const.from],t.groupLength).reverse(),l.forEach(e=>n.childNodes.splice(t[a._const.to],0,e)),n.subsets&&n.subsets.forEach(e=>{if(t[a._const.from]t[a._const.from]){e.oldValue-=t.groupLength;const s=e.oldValue+e.length-t[a._const.to];s>0&&(i.push({oldValue:t[a._const.to]+t.groupLength,newValue:e.newValue+e.length-s,length:s}),e.length-=s)}else if(t[a._const.from]>t[a._const.to]&&e.oldValue>t[a._const.to]&&e.oldValue0&&(i.push({oldValue:t[a._const.to]+t.groupLength,newValue:e.newValue+e.length-s,length:s}),e.length-=s)}else e.oldValue===t[a._const.from]&&(e.oldValue=t[a._const.to])});break;case a._const.removeElement:r.childNodes.splice(o,1),r.subsets&&r.subsets.forEach(e=>{e.oldValue>o?e.oldValue-=1:e.oldValue===o?e.delete=!0:e.oldValueo&&(e.oldValue+e.length-1===o?e.length--:(i.push({newValue:e.newValue+o-e.oldValue,oldValue:o,length:e.length-o+e.oldValue-1}),e.length=o-e.oldValue))}),n=r;break;case a._const.addElement:u=t[a._const.route].slice(),h=u.splice(u.length-1,1)[0],n=v(e,u).node,d=p(t[a._const.element]),d.outerDone=!0,d.innerDone=!0,d.valueDone=!0,n.childNodes||(n.childNodes=[]),h>=n.childNodes.length?n.childNodes.push(d):n.childNodes.splice(h,0,d),n.subsets&&n.subsets.forEach(e=>{if(e.oldValue>=h)e.oldValue+=1;else if(e.oldValueh){const t=e.oldValue+e.length-h;i.push({newValue:e.newValue+e.length-t,oldValue:h+1,length:t}),e.length-=t}});break;case a._const.removeTextElement:r.childNodes.splice(o,1),"TEXTAREA"===r.nodeName&&delete r.value,r.subsets&&r.subsets.forEach(e=>{e.oldValue>o?e.oldValue-=1:e.oldValue===o?e.delete=!0:e.oldValueo&&(e.oldValue+e.length-1===o?e.length--:(i.push({newValue:e.newValue+o-e.oldValue,oldValue:o,length:e.length-o+e.oldValue-1}),e.length=o-e.oldValue))}),n=r;break;case a._const.addTextElement:u=t[a._const.route].slice(),h=u.splice(u.length-1,1)[0],d={},d.nodeName="#text",d.data=t[a._const.value],n=v(e,u).node,n.childNodes||(n.childNodes=[]),h>=n.childNodes.length?n.childNodes.push(d):n.childNodes.splice(h,0,d),"TEXTAREA"===n.nodeName&&(n.value=t[a._const.newValue]),n.subsets&&n.subsets.forEach(e=>{if(e.oldValue>=h&&(e.oldValue+=1),e.oldValueh){const t=e.oldValue+e.length-h;i.push({newValue:e.newValue+e.length-t,oldValue:h+1,length:t}),e.length-=t}});break;default:console.log("unknown action")}n.subsets&&(n.subsets=n.subsets.filter(e=>!e.delete&&e.oldValue!==e.newValue),i.length&&(n.subsets=n.subsets.concat(i))),c.newNode=d,a.postDiffApply(c)}(e,t,a)}),!0}function w(e,t){const a={};if(a.nodeName=e.nodeName,"#text"===a.nodeName||"#comment"===a.nodeName)a.data=e.data;else{if(e.attributes&&e.attributes.length>0){a.attributes={};Array.prototype.slice.call(e.attributes).forEach(e=>a.attributes[e.name]=e.value)}if("TEXTAREA"===a.nodeName)a.value=e.value;else if(e.childNodes&&e.childNodes.length>0){a.childNodes=[];Array.prototype.slice.call(e.childNodes).forEach(e=>a.childNodes.push(w(e,t)))}t.valueDiffing&&(void 0!==e.checked&&e.type&&["radio","checkbox"].includes(e.type.toLowerCase())?a.checked=e.checked:void 0!==e.value&&(a.value=e.value),void 0!==e.selected&&(a.selected=e.selected))}return a}class S{constructor(e,t,a){this.options=a,this.t1=w(e,this.options),this.t2=w(t,this.options),this.diffcount=0,this.foundAll=!1,this.debug&&(this.t1Orig=w(e,this.options),this.t2Orig=w(t,this.options)),this.tracker=new g}init(){return this.findDiffs(this.t1,this.t2)}findDiffs(e,t){let a;do{if(this.options.debug&&(this.diffcount+=1,this.diffcount>this.options.diffcap))throw window.diffError=[this.t1Orig,this.t2Orig],new Error(`surpassed diffcap:${JSON.stringify(this.t1Orig)} -> ${JSON.stringify(this.t2Orig)}`);a=this.findNextDiff(e,t,[]),0===a.length&&(m(e,t)||(this.foundAll?(console.error("Could not find remaining diffs!"),console.log({t1:e,t2:t})):(this.foundAll=!0,h(e),a=this.findNextDiff(e,t,[])))),a.length>0&&(this.foundAll=!1,this.tracker.add(a),A(e,a,this.options))}while(a.length>0);return this.tracker.list}findNextDiff(e,t,a){let s,n;if(this.options.maxDepth&&a.length>this.options.maxDepth)return[];if(!e.outerDone){if(s=this.findOuterDiff(e,t,a),this.filterOuterDiff&&(n=this.filterOuterDiff(e,t,s),n&&(s=n)),s.length>0)return e.outerDone=!0,s;e.outerDone=!0}if(!e.innerDone){if(s=this.findInnerDiff(e,t,a),s.length>0)return s;e.innerDone=!0}if(this.options.valueDiffing&&!e.valueDone){if(s=this.findValueDiff(e,t,a),s.length>0)return e.valueDone=!0,s;e.valueDone=!0}return[]}findOuterDiff(e,t,a){const s=[];let n,r,o,i,d,l;if(e.nodeName!==t.nodeName)return[(new c).setValue(this.options._const.action,this.options._const.replaceElement).setValue(this.options._const.oldValue,p(e)).setValue(this.options._const.newValue,p(t)).setValue(this.options._const.route,a)];if(a.length&&this.options.maxChildCount&&e.childNodes&&t.childNodes&&e.childNodes.length>this.options.maxChildCount&&t.childNodes.length>this.options.maxChildCount){const s=e.childNodes.length{n[i.oldValue+e]=!0,r[i.newValue+e]=!0};for(;i;)if(i=b(a,s,n,r),i){o.push(i);Array(...new Array(i.length)).map(c).forEach(e=>d(e))}return e.subsets=o,e.subsetsAge=100,o}(e,t):[],n=e.childNodes?e.childNodes:[],r=t.childNodes?t.childNodes:[];let o,i=[],d=0;if(s.length>0&&(i=this.attemptGroupRelocation(e,t,s,a),i.length>0))return i;const l=Math.max(n.length,r.length);n.length!==r.length&&(o=!0);for(let e=0;e{const t=e.oldValue+e.length,a=e.newValue+e.length;for(let a=e.oldValue;am+1&&"#text"===e.childNodes[m+1].nodeName;)if(m+=1,t.childNodes[n].data===e.childNodes[m].data){h=!0;break}if(!h)return g.push((new c).setValue(this.options._const.action,this.options._const.modifyTextElement).setValue(this.options._const.route,s.concat(n)).setValue(this.options._const.oldValue,u.data).setValue(this.options._const.newValue,t.childNodes[n].data)),g}g.push((new c).setValue(this.options._const.action,this.options._const.removeTextElement).setValue(this.options._const.route,s.concat(n)).setValue(this.options._const.value,u.data)),r.splice(n,1),b=Math.min(r.length,o.length),n-=1}else g.push((new c).setValue(this.options._const.action,this.options._const.removeElement).setValue(this.options._const.route,s.concat(n)).setValue(this.options._const.element,p(u))),r.splice(n,1),b=Math.min(r.length,o.length),n-=1;else if(!0===o[n])u=t.childNodes[n],"#text"===u.nodeName?(g.push((new c).setValue(this.options._const.action,this.options._const.addTextElement).setValue(this.options._const.route,s.concat(n)).setValue(this.options._const.value,u.data)),r.splice(n,0,!0),b=Math.min(r.length,o.length),y-=1):(g.push((new c).setValue(this.options._const.action,this.options._const.addElement).setValue(this.options._const.route,s.concat(n)).setValue(this.options._const.element,p(u))),r.splice(n,0,!0),b=Math.min(r.length,o.length),y-=1);else if(r[n]!==o[n]){if(g.length>0)return g;if(l=a[r[n]],d=Math.min(l.newValue,e.childNodes.length-l.length),d!==l.oldValue){i=!1;for(let t=0;t{Object.prototype.hasOwnProperty.call(this.options,e)||(this.options[e]=t)}),!this.options._const){const e=["addAttribute","modifyAttribute","removeAttribute","modifyTextElement","relocateGroup","removeElement","addElement","removeTextElement","addTextElement","replaceElement","modifyValue","modifyChecked","modifySelected","modifyComment","action","route","oldValue","newValue","element","group","from","to","name","value","data","attributes","nodeName","childNodes","checked","selected"];this.options._const={},this.options.compress?e.forEach((e,t)=>this.options._const[e]=t):e.forEach(e=>this.options._const[e]=e)}this.DiffFinder=S}apply(e,t){return function(e,t,a){return t.every(t=>r(e,t,a))}(e,t,this.options)}undo(e,t){return i(e,t,this.options)}diff(e,t){return new this.DiffFinder(e,t,this.options).init()}}class k{constructor(e={}){this.pad="│ ",this.padding="",this.tick=1,this.messages=[];const t=(e,t)=>{const a=e[t];e[t]=(...s)=>{this.fin(t,Array.prototype.slice.call(s));const n=a.apply(e,s);return this.fout(t,n),n}};for(let a in e)"function"==typeof e[a]&&t(e,a);this.log("┌ TRACELOG START")}fin(e,t){this.padding+=this.pad,this.log("├─> entering "+e,t)}fout(e,t){this.log("│<──┘ generated return value",t),this.padding=this.padding.substring(0,this.padding.length-this.pad.length)}format(e,t){return`${function(e){for(e=""+e;e.length<4;)e="0"+e;return e}(t)}> ${this.padding}${e}`}log(){let e=Array.prototype.slice.call(arguments);const t=function(e){return e?"string"==typeof e?e:e instanceof HTMLElement?e.outerHTML||"":e instanceof Array?`[${e.map(t).join(",")}]`:e.toString()||e.valueOf()||"":""};e=e.map(t).join(", "),this.messages.push(this.format(e,this.tick++))}toString(){let e="└───";for(;e.length<=this.padding.length+this.pad.length;)e+="× ";let t=this.padding;return this.padding="",e=this.format(e,this.tick),this.padding=t,`${this.messages.join("\n")}\n${e}`}}}]); \ No newline at end of file diff --git a/build/zip.js b/build/zip.js index 270aea4e0..9c07cf777 100644 --- a/build/zip.js +++ b/build/zip.js @@ -1,4 +1,4 @@ -!function(e){var t=this.webpackHotUpdate;this.webpackHotUpdate=function(e,n){!function(e,t){if(!w[e]||!v[e])return;for(var n in v[e]=!1,t)Object.prototype.hasOwnProperty.call(t,n)&&(p[n]=t[n]);0==--b&&0===y&&x()}(e,n),t&&t(e,n)};var n,r=!0,i="31f819ec7507aac36aee",o={},a=[],s=[];function l(e){var t=R[e];if(!t)return O;var r=function(r){return t.hot.active?(R[r]?-1===R[r].parents.indexOf(e)&&R[r].parents.push(e):(a=[e],n=r),-1===t.children.indexOf(r)&&t.children.push(r)):(console.warn("[HMR] unexpected require("+r+") from disposed module "+e),a=[]),O(r)},i=function(e){return{configurable:!0,enumerable:!0,get:function(){return O[e]},set:function(t){O[e]=t}}};for(var o in O)Object.prototype.hasOwnProperty.call(O,o)&&"e"!==o&&"t"!==o&&Object.defineProperty(r,o,i(o));return r.e=function(e){return"ready"===h&&c("prepare"),y++,O.e(e).then(t,(function(e){throw t(),e}));function t(){y--,"prepare"===h&&(m[e]||S(e),0===y&&0===b&&x())}},r.t=function(e,t){return 1&t&&(e=r(e)),O.t(e,-2&t)},r}function u(t){var r={_acceptedDependencies:{},_declinedDependencies:{},_selfAccepted:!1,_selfDeclined:!1,_selfInvalidated:!1,_disposeHandlers:[],_main:n!==t,active:!0,accept:function(e,t){if(void 0===e)r._selfAccepted=!0;else if("function"==typeof e)r._selfAccepted=e;else if("object"==typeof e)for(var n=0;n=0&&r._disposeHandlers.splice(t,1)},invalidate:function(){switch(this._selfInvalidated=!0,h){case"idle":(p={})[t]=e[t],c("ready");break;case"ready":A(t);break;case"prepare":case"check":case"dispose":case"apply":(g=g||[]).push(t)}},check:k,apply:T,status:function(e){if(!e)return h;f.push(e)},addStatusHandler:function(e){f.push(e)},removeStatusHandler:function(e){var t=f.indexOf(e);t>=0&&f.splice(t,1)},data:o[t]};return n=void 0,r}var f=[],h="idle";function c(e){h=e;for(var t=0;t0;){var i=r.pop(),o=i.id,a=i.chain;if((f=R[o])&&(!f.hot._selfAccepted||f.hot._selfInvalidated)){if(f.hot._selfDeclined)return{type:"self-declined",chain:a,moduleId:o};if(f.hot._main)return{type:"unaccepted",chain:a,moduleId:o};for(var s=0;s ")),x.type){case"self-declined":r.onDeclined&&r.onDeclined(x),r.ignoreDeclined||(T=new Error("Aborted because of self decline: "+x.moduleId+U));break;case"declined":r.onDeclined&&r.onDeclined(x),r.ignoreDeclined||(T=new Error("Aborted because of declined dependency: "+x.moduleId+" in "+x.parentId+U));break;case"unaccepted":r.onUnaccepted&&r.onUnaccepted(x),r.ignoreUnaccepted||(T=new Error("Aborted because "+h+" is not accepted"+U));break;case"accepted":r.onAccepted&&r.onAccepted(x),A=!0;break;case"disposed":r.onDisposed&&r.onDisposed(x),I=!0;break;default:throw new Error("Unexception type "+x.type)}if(T)return c("abort"),Promise.reject(T);if(A)for(h in v[h]=p[h],b(m,x.outdatedModules),x.outdatedDependencies)Object.prototype.hasOwnProperty.call(x.outdatedDependencies,h)&&(y[h]||(y[h]=[]),b(y[h],x.outdatedDependencies[h]));I&&(b(m,[x.moduleId]),v[h]=k)}var z,D=[];for(l=0;l0;)if(h=B.pop(),f=R[h]){var P={},F=f.hot._disposeHandlers;for(u=0;u=0&&C.parents.splice(z,1))}}for(h in y)if(Object.prototype.hasOwnProperty.call(y,h)&&(f=R[h]))for(N=y[h],u=0;u=0&&f.children.splice(z,1);c("apply"),void 0!==_&&(i=_,_=void 0);for(h in p=void 0,v)Object.prototype.hasOwnProperty.call(v,h)&&(e[h]=v[h]);var Z=null;for(h in y)if(Object.prototype.hasOwnProperty.call(y,h)&&(f=R[h])){N=y[h];var j=[];for(l=0;l=0&&r._disposeHandlers.splice(t,1)},invalidate:function(){switch(this._selfInvalidated=!0,h){case"idle":(p={})[t]=e[t],c("ready");break;case"ready":A(t);break;case"prepare":case"check":case"dispose":case"apply":(g=g||[]).push(t)}},check:k,apply:T,status:function(e){if(!e)return h;f.push(e)},addStatusHandler:function(e){f.push(e)},removeStatusHandler:function(e){var t=f.indexOf(e);t>=0&&f.splice(t,1)},data:o[t]};return n=void 0,r}var f=[],h="idle";function c(e){h=e;for(var t=0;t0;){var i=r.pop(),o=i.id,a=i.chain;if((f=R[o])&&(!f.hot._selfAccepted||f.hot._selfInvalidated)){if(f.hot._selfDeclined)return{type:"self-declined",chain:a,moduleId:o};if(f.hot._main)return{type:"unaccepted",chain:a,moduleId:o};for(var s=0;s ")),x.type){case"self-declined":r.onDeclined&&r.onDeclined(x),r.ignoreDeclined||(T=new Error("Aborted because of self decline: "+x.moduleId+U));break;case"declined":r.onDeclined&&r.onDeclined(x),r.ignoreDeclined||(T=new Error("Aborted because of declined dependency: "+x.moduleId+" in "+x.parentId+U));break;case"unaccepted":r.onUnaccepted&&r.onUnaccepted(x),r.ignoreUnaccepted||(T=new Error("Aborted because "+h+" is not accepted"+U));break;case"accepted":r.onAccepted&&r.onAccepted(x),A=!0;break;case"disposed":r.onDisposed&&r.onDisposed(x),I=!0;break;default:throw new Error("Unexception type "+x.type)}if(T)return c("abort"),Promise.reject(T);if(A)for(h in v[h]=p[h],b(m,x.outdatedModules),x.outdatedDependencies)Object.prototype.hasOwnProperty.call(x.outdatedDependencies,h)&&(y[h]||(y[h]=[]),b(y[h],x.outdatedDependencies[h]));I&&(b(m,[x.moduleId]),v[h]=k)}var z,D=[];for(l=0;l0;)if(h=B.pop(),f=R[h]){var P={},F=f.hot._disposeHandlers;for(u=0;u=0&&C.parents.splice(z,1))}}for(h in y)if(Object.prototype.hasOwnProperty.call(y,h)&&(f=R[h]))for(N=y[h],u=0;u=0&&f.children.splice(z,1);c("apply"),void 0!==_&&(i=_,_=void 0);for(h in p=void 0,v)Object.prototype.hasOwnProperty.call(v,h)&&(e[h]=v[h]);var Z=null;for(h in y)if(Object.prototype.hasOwnProperty.call(y,h)&&(f=R[h])){N=y[h];var j=[];for(l=0;l - + diff --git a/vendor/aframe-master.js b/vendor/aframe-master.js index 584101ba0..a19df6d54 100644 --- a/vendor/aframe-master.js +++ b/vendor/aframe-master.js @@ -62347,7 +62347,6 @@ module.exports={ "sinon-chai": "2.8.0", "snazzy": "^5.0.0", "too-wordy": "ngokevin/too-wordy", - "uglifyjs": "^2.4.10", "write-good": "^0.9.1" }, "link": true, diff --git a/vendor/aframe-master.min.js b/vendor/aframe-master.min.js index aab4acace..b2ed70a9f 100644 --- a/vendor/aframe-master.min.js +++ b/vendor/aframe-master.min.js @@ -3,1507 +3,444 @@ function anArray(r){return r.BYTES_PER_ELEMENT&&"[object ArrayBuffer]"===str.cal },{}],2:[function(_dereq_,module,exports){ module.exports=function(e,n){return"number"==typeof e?e:"number"==typeof n?n:0}; },{}],3:[function(_dereq_,module,exports){ -"use strict";function getLens(o){var r=o.length;if(r%4>0)throw new Error("Invalid string. Length must be a multiple of 4");var e=o.indexOf("=");return-1===e&&(e=r),[e,e===r?0:4-e%4]}function byteLength(o){var r=getLens(o),e=r[0],t=r[1];return 3*(e+t)/4-t}function _byteLength(o,r,e){return 3*(r+e)/4-e}function toByteArray(o){var r,e,t=getLens(o),n=t[0],u=t[1],p=new Arr(_byteLength(o,n,u)),a=0,h=u>0?n-4:n;for(e=0;e>16&255,p[a++]=r>>8&255,p[a++]=255&r;return 2===u&&(r=revLookup[o.charCodeAt(e)]<<2|revLookup[o.charCodeAt(e+1)]>>4,p[a++]=255&r),1===u&&(r=revLookup[o.charCodeAt(e)]<<10|revLookup[o.charCodeAt(e+1)]<<4|revLookup[o.charCodeAt(e+2)]>>2,p[a++]=r>>8&255,p[a++]=255&r),p}function tripletToBase64(o){return lookup[o>>18&63]+lookup[o>>12&63]+lookup[o>>6&63]+lookup[63&o]}function encodeChunk(o,r,e){for(var t,n=[],u=r;up?p:u+16383));return 1===t?(r=o[e-1],n.push(lookup[r>>2]+lookup[r<<4&63]+"==")):2===t&&(r=(o[e-2]<<8)+o[e-1],n.push(lookup[r>>10]+lookup[r>>4&63]+lookup[r<<2&63]+"=")),n.join("")}exports.byteLength=byteLength,exports.toByteArray=toByteArray,exports.fromByteArray=fromByteArray;for(var lookup=[],revLookup=[],Arr="undefined"!=typeof Uint8Array?Uint8Array:Array,code="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",i=0,len=code.length;i0)throw new Error("Invalid string. Length must be a multiple of 4");var e=o.indexOf("=");return-1===e&&(e=r),[e,e===r?0:4-e%4]}function byteLength(o){var r=getLens(o),e=r[0],t=r[1];return 3*(e+t)/4-t}function _byteLength(o,r,e){return 3*(r+e)/4-e}function toByteArray(o){for(var r,e=getLens(o),t=e[0],n=e[1],u=new Arr(_byteLength(o,t,n)),p=0,a=n>0?t-4:t,h=0;h>16&255,u[p++]=r>>8&255,u[p++]=255&r;return 2===n&&(r=revLookup[o.charCodeAt(h)]<<2|revLookup[o.charCodeAt(h+1)]>>4,u[p++]=255&r),1===n&&(r=revLookup[o.charCodeAt(h)]<<10|revLookup[o.charCodeAt(h+1)]<<4|revLookup[o.charCodeAt(h+2)]>>2,u[p++]=r>>8&255,u[p++]=255&r),u}function tripletToBase64(o){return lookup[o>>18&63]+lookup[o>>12&63]+lookup[o>>6&63]+lookup[63&o]}function encodeChunk(o,r,e){for(var t,n=[],u=r;up?p:u+16383));return 1===t?(r=o[e-1],n.push(lookup[r>>2]+lookup[r<<4&63]+"==")):2===t&&(r=(o[e-2]<<8)+o[e-1],n.push(lookup[r>>10]+lookup[r>>4&63]+lookup[r<<2&63]+"=")),n.join("")}exports.byteLength=byteLength,exports.toByteArray=toByteArray,exports.fromByteArray=fromByteArray;for(var lookup=[],revLookup=[],Arr="undefined"!=typeof Uint8Array?Uint8Array:Array,code="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",i=0,len=code.length;i1)for(var r=1;r=kMaxLength())throw new RangeError("Attempt to allocate Buffer larger than maximum size: 0x"+kMaxLength().toString(16)+" bytes");return 0|t}function SlowBuffer(t){return+t!=t&&(t=0),Buffer.alloc(+t)}function byteLength(t,e){if(Buffer.isBuffer(t))return t.length;if("undefined"!=typeof ArrayBuffer&&"function"==typeof ArrayBuffer.isView&&(ArrayBuffer.isView(t)||t instanceof ArrayBuffer))return t.byteLength;"string"!=typeof t&&(t=""+t);var r=t.length;if(0===r)return 0;for(var n=!1;;)switch(e){case"ascii":case"latin1":case"binary":return r;case"utf8":case"utf-8":case void 0:return utf8ToBytes(t).length;case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return 2*r;case"hex":return r>>>1;case"base64":return base64ToBytes(t).length;default:if(n)return utf8ToBytes(t).length;e=(""+e).toLowerCase(),n=!0}}function slowToString(t,e,r){var n=!1;if((void 0===e||e<0)&&(e=0),e>this.length)return"";if((void 0===r||r>this.length)&&(r=this.length),r<=0)return"";if(r>>>=0,e>>>=0,r<=e)return"";for(t||(t="utf8");;)switch(t){case"hex":return hexSlice(this,e,r);case"utf8":case"utf-8":return utf8Slice(this,e,r);case"ascii":return asciiSlice(this,e,r);case"latin1":case"binary":return latin1Slice(this,e,r);case"base64":return base64Slice(this,e,r);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return utf16leSlice(this,e,r);default:if(n)throw new TypeError("Unknown encoding: "+t);t=(t+"").toLowerCase(),n=!0}}function swap(t,e,r){var n=t[e];t[e]=t[r],t[r]=n}function bidirectionalIndexOf(t,e,r,n,f){if(0===t.length)return-1;if("string"==typeof r?(n=r,r=0):r>2147483647?r=2147483647:r<-2147483648&&(r=-2147483648),r=+r,isNaN(r)&&(r=f?0:t.length-1),r<0&&(r=t.length+r),r>=t.length){if(f)return-1;r=t.length-1}else if(r<0){if(!f)return-1;r=0}if("string"==typeof e&&(e=Buffer.from(e,n)),Buffer.isBuffer(e))return 0===e.length?-1:arrayIndexOf(t,e,r,n,f);if("number"==typeof e)return e&=255,Buffer.TYPED_ARRAY_SUPPORT&&"function"==typeof Uint8Array.prototype.indexOf?f?Uint8Array.prototype.indexOf.call(t,e,r):Uint8Array.prototype.lastIndexOf.call(t,e,r):arrayIndexOf(t,[e],r,n,f);throw new TypeError("val must be string, number or Buffer")}function arrayIndexOf(t,e,r,n,f){function i(t,e){return 1===o?t[e]:t.readUInt16BE(e*o)}var o=1,u=t.length,s=e.length;if(void 0!==n&&("ucs2"===(n=String(n).toLowerCase())||"ucs-2"===n||"utf16le"===n||"utf-16le"===n)){if(t.length<2||e.length<2)return-1;o=2,u/=2,s/=2,r/=2}var a;if(f){var h=-1;for(a=r;au&&(r=u-s),a=r;a>=0;a--){for(var c=!0,l=0;lf&&(n=f):n=f;var i=e.length;if(i%2!=0)throw new TypeError("Invalid hex string");n>i/2&&(n=i/2);for(var o=0;o239?4:i>223?3:i>191?2:1;if(f+u<=r){var s,a,h,c;switch(u){case 1:i<128&&(o=i);break;case 2:s=t[f+1],128==(192&s)&&(c=(31&i)<<6|63&s)>127&&(o=c);break;case 3:s=t[f+1],a=t[f+2],128==(192&s)&&128==(192&a)&&(c=(15&i)<<12|(63&s)<<6|63&a)>2047&&(c<55296||c>57343)&&(o=c);break;case 4:s=t[f+1],a=t[f+2],h=t[f+3],128==(192&s)&&128==(192&a)&&128==(192&h)&&(c=(15&i)<<18|(63&s)<<12|(63&a)<<6|63&h)>65535&&c<1114112&&(o=c)}}null===o?(o=65533,u=1):o>65535&&(o-=65536,n.push(o>>>10&1023|55296),o=56320|1023&o),n.push(o),f+=u}return decodeCodePointsArray(n)}function decodeCodePointsArray(t){var e=t.length;if(e<=MAX_ARGUMENTS_LENGTH)return String.fromCharCode.apply(String,t);for(var r="",n=0;nn)&&(r=n);for(var f="",i=e;ir)throw new RangeError("Trying to access beyond buffer length")}function checkInt(t,e,r,n,f,i){if(!Buffer.isBuffer(t))throw new TypeError('"buffer" argument must be a Buffer instance');if(e>f||et.length)throw new RangeError("Index out of range")}function objectWriteUInt16(t,e,r,n){e<0&&(e=65535+e+1);for(var f=0,i=Math.min(t.length-r,2);f>>8*(n?f:1-f)}function objectWriteUInt32(t,e,r,n){e<0&&(e=4294967295+e+1);for(var f=0,i=Math.min(t.length-r,4);f>>8*(n?f:3-f)&255}function checkIEEE754(t,e,r,n,f,i){if(r+n>t.length)throw new RangeError("Index out of range");if(r<0)throw new RangeError("Index out of range")}function writeFloat(t,e,r,n,f){return f||checkIEEE754(t,e,r,4,3.4028234663852886e38,-3.4028234663852886e38),ieee754.write(t,e,r,n,23,4),r+4}function writeDouble(t,e,r,n,f){return f||checkIEEE754(t,e,r,8,1.7976931348623157e308,-1.7976931348623157e308),ieee754.write(t,e,r,n,52,8),r+8}function base64clean(t){if(t=stringtrim(t).replace(INVALID_BASE64_RE,""),t.length<2)return"";for(;t.length%4!=0;)t+="=";return t}function stringtrim(t){return t.trim?t.trim():t.replace(/^\s+|\s+$/g,"")}function toHex(t){return t<16?"0"+t.toString(16):t.toString(16)}function utf8ToBytes(t,e){e=e||1/0;for(var r,n=t.length,f=null,i=[],o=0;o55295&&r<57344){if(!f){if(r>56319){(e-=3)>-1&&i.push(239,191,189);continue}if(o+1===n){(e-=3)>-1&&i.push(239,191,189);continue}f=r;continue}if(r<56320){(e-=3)>-1&&i.push(239,191,189),f=r;continue}r=65536+(f-55296<<10|r-56320)}else f&&(e-=3)>-1&&i.push(239,191,189);if(f=null,r<128){if((e-=1)<0)break;i.push(r)}else if(r<2048){if((e-=2)<0)break;i.push(r>>6|192,63&r|128)}else if(r<65536){if((e-=3)<0)break;i.push(r>>12|224,r>>6&63|128,63&r|128)}else{if(!(r<1114112))throw new Error("Invalid code point");if((e-=4)<0)break;i.push(r>>18|240,r>>12&63|128,r>>6&63|128,63&r|128)}}return i}function asciiToBytes(t){for(var e=[],r=0;r>8,f=r%256,i.push(f),i.push(n);return i}function base64ToBytes(t){return base64.toByteArray(base64clean(t))}function blitBuffer(t,e,r,n){for(var f=0;f=e.length||f>=t.length);++f)e[f+r]=t[f];return f}function isnan(t){return t!==t}var base64=_dereq_("base64-js"),ieee754=_dereq_("ieee754"),isArray=_dereq_("isarray");exports.Buffer=Buffer,exports.SlowBuffer=SlowBuffer,exports.INSPECT_MAX_BYTES=50,Buffer.TYPED_ARRAY_SUPPORT=void 0!==global.TYPED_ARRAY_SUPPORT?global.TYPED_ARRAY_SUPPORT:typedArraySupport(),exports.kMaxLength=kMaxLength(),Buffer.poolSize=8192,Buffer._augment=function(t){return t.__proto__=Buffer.prototype,t},Buffer.from=function(t,e,r){return from(null,t,e,r)},Buffer.TYPED_ARRAY_SUPPORT&&(Buffer.prototype.__proto__=Uint8Array.prototype,Buffer.__proto__=Uint8Array,"undefined"!=typeof Symbol&&Symbol.species&&Buffer[Symbol.species]===Buffer&&Object.defineProperty(Buffer,Symbol.species,{value:null,configurable:!0})),Buffer.alloc=function(t,e,r){return alloc(null,t,e,r)},Buffer.allocUnsafe=function(t){return allocUnsafe(null,t)},Buffer.allocUnsafeSlow=function(t){return allocUnsafe(null,t)},Buffer.isBuffer=function(t){return!(null==t||!t._isBuffer)},Buffer.compare=function(t,e){if(!Buffer.isBuffer(t)||!Buffer.isBuffer(e))throw new TypeError("Arguments must be Buffers");if(t===e)return 0;for(var r=t.length,n=e.length,f=0,i=Math.min(r,n);f0&&(t=this.toString("hex",0,e).match(/.{2}/g).join(" "),this.length>e&&(t+=" ... ")),""},Buffer.prototype.compare=function(t,e,r,n,f){if(!Buffer.isBuffer(t))throw new TypeError("Argument must be a Buffer");if(void 0===e&&(e=0),void 0===r&&(r=t?t.length:0),void 0===n&&(n=0),void 0===f&&(f=this.length),e<0||r>t.length||n<0||f>this.length)throw new RangeError("out of range index");if(n>=f&&e>=r)return 0;if(n>=f)return-1;if(e>=r)return 1;if(e>>>=0,r>>>=0,n>>>=0,f>>>=0,this===t)return 0;for(var i=f-n,o=r-e,u=Math.min(i,o),s=this.slice(n,f),a=t.slice(e,r),h=0;hf)&&(r=f),t.length>0&&(r<0||e<0)||e>this.length)throw new RangeError("Attempt to write outside buffer bounds");n||(n="utf8");for(var i=!1;;)switch(n){case"hex":return hexWrite(this,t,e,r);case"utf8":case"utf-8":return utf8Write(this,t,e,r);case"ascii":return asciiWrite(this,t,e,r);case"latin1":case"binary":return latin1Write(this,t,e,r);case"base64":return base64Write(this,t,e,r);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return ucs2Write(this,t,e,r);default:if(i)throw new TypeError("Unknown encoding: "+n);n=(""+n).toLowerCase(),i=!0}},Buffer.prototype.toJSON=function(){return{type:"Buffer",data:Array.prototype.slice.call(this._arr||this,0)}};var MAX_ARGUMENTS_LENGTH=4096;Buffer.prototype.slice=function(t,e){var r=this.length;t=~~t,e=void 0===e?r:~~e,t<0?(t+=r)<0&&(t=0):t>r&&(t=r),e<0?(e+=r)<0&&(e=0):e>r&&(e=r),e0&&(f*=256);)n+=this[t+--e]*f;return n},Buffer.prototype.readUInt8=function(t,e){return e||checkOffset(t,1,this.length),this[t]},Buffer.prototype.readUInt16LE=function(t,e){return e||checkOffset(t,2,this.length),this[t]|this[t+1]<<8},Buffer.prototype.readUInt16BE=function(t,e){return e||checkOffset(t,2,this.length),this[t]<<8|this[t+1]},Buffer.prototype.readUInt32LE=function(t,e){return e||checkOffset(t,4,this.length),(this[t]|this[t+1]<<8|this[t+2]<<16)+16777216*this[t+3]},Buffer.prototype.readUInt32BE=function(t,e){return e||checkOffset(t,4,this.length),16777216*this[t]+(this[t+1]<<16|this[t+2]<<8|this[t+3])},Buffer.prototype.readIntLE=function(t,e,r){t|=0,e|=0,r||checkOffset(t,e,this.length);for(var n=this[t],f=1,i=0;++i=f&&(n-=Math.pow(2,8*e)),n},Buffer.prototype.readIntBE=function(t,e,r){t|=0,e|=0,r||checkOffset(t,e,this.length);for(var n=e,f=1,i=this[t+--n];n>0&&(f*=256);)i+=this[t+--n]*f;return f*=128,i>=f&&(i-=Math.pow(2,8*e)),i},Buffer.prototype.readInt8=function(t,e){return e||checkOffset(t,1,this.length),128&this[t]?-1*(255-this[t]+1):this[t]},Buffer.prototype.readInt16LE=function(t,e){e||checkOffset(t,2,this.length);var r=this[t]|this[t+1]<<8;return 32768&r?4294901760|r:r},Buffer.prototype.readInt16BE=function(t,e){e||checkOffset(t,2,this.length);var r=this[t+1]|this[t]<<8;return 32768&r?4294901760|r:r},Buffer.prototype.readInt32LE=function(t,e){return e||checkOffset(t,4,this.length),this[t]|this[t+1]<<8|this[t+2]<<16|this[t+3]<<24},Buffer.prototype.readInt32BE=function(t,e){return e||checkOffset(t,4,this.length),this[t]<<24|this[t+1]<<16|this[t+2]<<8|this[t+3]},Buffer.prototype.readFloatLE=function(t,e){return e||checkOffset(t,4,this.length),ieee754.read(this,t,!0,23,4)},Buffer.prototype.readFloatBE=function(t,e){return e||checkOffset(t,4,this.length),ieee754.read(this,t,!1,23,4)},Buffer.prototype.readDoubleLE=function(t,e){return e||checkOffset(t,8,this.length),ieee754.read(this,t,!0,52,8)},Buffer.prototype.readDoubleBE=function(t,e){return e||checkOffset(t,8,this.length),ieee754.read(this,t,!1,52,8)},Buffer.prototype.writeUIntLE=function(t,e,r,n){if(t=+t,e|=0,r|=0,!n){checkInt(this,t,e,r,Math.pow(2,8*r)-1,0)}var f=1,i=0;for(this[e]=255&t;++i=0&&(i*=256);)this[e+f]=t/i&255;return e+r},Buffer.prototype.writeUInt8=function(t,e,r){return t=+t,e|=0,r||checkInt(this,t,e,1,255,0),Buffer.TYPED_ARRAY_SUPPORT||(t=Math.floor(t)),this[e]=255&t,e+1},Buffer.prototype.writeUInt16LE=function(t,e,r){return t=+t,e|=0,r||checkInt(this,t,e,2,65535,0),Buffer.TYPED_ARRAY_SUPPORT?(this[e]=255&t,this[e+1]=t>>>8):objectWriteUInt16(this,t,e,!0),e+2},Buffer.prototype.writeUInt16BE=function(t,e,r){return t=+t,e|=0,r||checkInt(this,t,e,2,65535,0),Buffer.TYPED_ARRAY_SUPPORT?(this[e]=t>>>8,this[e+1]=255&t):objectWriteUInt16(this,t,e,!1),e+2},Buffer.prototype.writeUInt32LE=function(t,e,r){return t=+t,e|=0,r||checkInt(this,t,e,4,4294967295,0),Buffer.TYPED_ARRAY_SUPPORT?(this[e+3]=t>>>24,this[e+2]=t>>>16,this[e+1]=t>>>8,this[e]=255&t):objectWriteUInt32(this,t,e,!0),e+4},Buffer.prototype.writeUInt32BE=function(t,e,r){return t=+t,e|=0,r||checkInt(this,t,e,4,4294967295,0),Buffer.TYPED_ARRAY_SUPPORT?(this[e]=t>>>24,this[e+1]=t>>>16,this[e+2]=t>>>8,this[e+3]=255&t):objectWriteUInt32(this,t,e,!1),e+4},Buffer.prototype.writeIntLE=function(t,e,r,n){if(t=+t,e|=0,!n){var f=Math.pow(2,8*r-1);checkInt(this,t,e,r,f-1,-f)}var i=0,o=1,u=0;for(this[e]=255&t;++i>0)-u&255;return e+r},Buffer.prototype.writeIntBE=function(t,e,r,n){if(t=+t,e|=0,!n){var f=Math.pow(2,8*r-1);checkInt(this,t,e,r,f-1,-f)}var i=r-1,o=1,u=0;for(this[e+i]=255&t;--i>=0&&(o*=256);)t<0&&0===u&&0!==this[e+i+1]&&(u=1),this[e+i]=(t/o>>0)-u&255;return e+r},Buffer.prototype.writeInt8=function(t,e,r){return t=+t,e|=0,r||checkInt(this,t,e,1,127,-128),Buffer.TYPED_ARRAY_SUPPORT||(t=Math.floor(t)),t<0&&(t=255+t+1),this[e]=255&t,e+1},Buffer.prototype.writeInt16LE=function(t,e,r){return t=+t,e|=0,r||checkInt(this,t,e,2,32767,-32768),Buffer.TYPED_ARRAY_SUPPORT?(this[e]=255&t,this[e+1]=t>>>8):objectWriteUInt16(this,t,e,!0),e+2},Buffer.prototype.writeInt16BE=function(t,e,r){return t=+t,e|=0,r||checkInt(this,t,e,2,32767,-32768),Buffer.TYPED_ARRAY_SUPPORT?(this[e]=t>>>8,this[e+1]=255&t):objectWriteUInt16(this,t,e,!1),e+2},Buffer.prototype.writeInt32LE=function(t,e,r){return t=+t,e|=0,r||checkInt(this,t,e,4,2147483647,-2147483648),Buffer.TYPED_ARRAY_SUPPORT?(this[e]=255&t,this[e+1]=t>>>8,this[e+2]=t>>>16,this[e+3]=t>>>24):objectWriteUInt32(this,t,e,!0),e+4},Buffer.prototype.writeInt32BE=function(t,e,r){return t=+t,e|=0,r||checkInt(this,t,e,4,2147483647,-2147483648),t<0&&(t=4294967295+t+1),Buffer.TYPED_ARRAY_SUPPORT?(this[e]=t>>>24,this[e+1]=t>>>16,this[e+2]=t>>>8,this[e+3]=255&t):objectWriteUInt32(this,t,e,!1),e+4},Buffer.prototype.writeFloatLE=function(t,e,r){return writeFloat(this,t,e,!0,r)},Buffer.prototype.writeFloatBE=function(t,e,r){return writeFloat(this,t,e,!1,r)},Buffer.prototype.writeDoubleLE=function(t,e,r){return writeDouble(this,t,e,!0,r)},Buffer.prototype.writeDoubleBE=function(t,e,r){return writeDouble(this,t,e,!1,r)},Buffer.prototype.copy=function(t,e,r,n){if(r||(r=0),n||0===n||(n=this.length),e>=t.length&&(e=t.length),e||(e=0),n>0&&n=this.length)throw new RangeError("sourceStart out of bounds");if(n<0)throw new RangeError("sourceEnd out of bounds");n>this.length&&(n=this.length),t.length-e=0;--f)t[f+e]=this[f+r];else if(i<1e3||!Buffer.TYPED_ARRAY_SUPPORT)for(f=0;f>>=0,r=void 0===r?this.length:r>>>0,t||(t=0);var i;if("number"==typeof t)for(i=e;i=31}function formatArgs(){var o=arguments,e=this.useColors;if(o[0]=(e?"%c":"")+this.namespace+(e?" %c":" ")+o[0]+(e?"%c ":" "),!e)return o;var r="color: "+this.color;o=[o[0],r,"color: inherit"].concat(Array.prototype.slice.call(o,1));var t=0,s=0;return o[0].replace(/%[a-z%]/g,function(o){"%%"!==o&&(t++,"%c"===o&&(s=t))}),o.splice(s,0,r),o}function log(){return"object"==typeof console&&console.log&&Function.prototype.apply.call(console.log,console,arguments)}function save(o){try{null==o?exports.storage.removeItem("debug"):exports.storage.debug=o}catch(o){}}function load(){var o;try{o=exports.storage.debug}catch(o){}return o}function localstorage(){try{return window.localStorage}catch(o){}}exports=module.exports=_dereq_("./debug"),exports.log=log,exports.formatArgs=formatArgs,exports.save=save,exports.load=load,exports.useColors=useColors,exports.storage="undefined"!=typeof chrome&&void 0!==chrome.storage?chrome.storage.local:localstorage(),exports.colors=["lightseagreen","forestgreen","goldenrod","dodgerblue","darkorchid","crimson"],exports.formatters.j=function(o){return JSON.stringify(o)},exports.enable(load()); -},{"./debug":9}],9:[function(_dereq_,module,exports){ +},{"./debug":11}],11:[function(_dereq_,module,exports){ function selectColor(){return exports.colors[prevColor++%exports.colors.length]}function debug(e){function r(){}function o(){var e=o;null==e.useColors&&(e.useColors=exports.useColors()),null==e.color&&e.useColors&&(e.color=selectColor());var r=Array.prototype.slice.call(arguments);r[0]=exports.coerce(r[0]),"string"!=typeof r[0]&&(r=["%o"].concat(r));var s=0;r[0]=r[0].replace(/%([a-z%])/g,function(o,t){if("%%"===o)return o;s++;var n=exports.formatters[t];if("function"==typeof n){var l=r[s];o=n.call(e,l),r.splice(s,1),s--}return o}),"function"==typeof exports.formatArgs&&(r=exports.formatArgs.apply(e,r)),(o.log||exports.log||console.log.bind(console)).apply(e,r)}r.enabled=!1,o.enabled=!0;var s=exports.enabled(e)?o:r;return s.namespace=e,s}function enable(e){exports.save(e);for(var r=(e||"").split(/[\s,]+/),o=r.length,s=0;s>0),L="attached",T="detached",M="extends",F="ADDITION",V="MODIFICATION",I="REMOVAL",D="DOMAttrModified",P="DOMContentLoaded",R="DOMSubtreeModified",_="<",k="=",q=/^[A-Z][A-Z0-9]*(?:-[A-Z0-9]+)+$/,S=["ANNOTATION-XML","COLOR-PROFILE","FONT-FACE","FONT-FACE-SRC","FONT-FACE-URI","FONT-FACE-FORMAT","FONT-FACE-NAME","MISSING-GLYPH"],U=[],H=[],x="",Z=r.documentElement,G=U.indexOf||function(e){for(var t=this.length;t--&&this[t]!==e;);return t},j=n.prototype,z=j.hasOwnProperty,K=j.isPrototypeOf,W=n.defineProperty,X=n.getOwnPropertyDescriptor,Y=n.getOwnPropertyNames,$=n.getPrototypeOf,B=n.setPrototypeOf,J=!!n.__proto__,Q=n.create||function e(t){return t?(e.prototype=t,new e):this},ee=B||(J?function(e,t){return e.__proto__=t,e}:Y&&X?function(){function e(e,t){for(var r,n=Y(t),a=0,l=n.length;a=3&&(o=a),"[object Array]"===toStr.call(r)?forEachArray(r,t,o):"string"==typeof r?forEachString(r,t,o):forEachObject(r,t,o)};module.exports=forEach; +},{"is-callable":21}],17:[function(_dereq_,module,exports){ +(function (global){ var win;win="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:{},module.exports=win; -}).call(this)}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) +}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) -},{}],15:[function(_dereq_,module,exports){ -exports.read=function(a,o,t,r,h){var M,p,w=8*h-r-1,f=(1<>1,i=-7,N=t?h-1:0,n=t?-1:1,s=a[o+N];for(N+=n,M=s&(1<<-i)-1,s>>=-i,i+=w;i>0;M=256*M+a[o+N],N+=n,i-=8);for(p=M&(1<<-i)-1,M>>=-i,i+=r;i>0;p=256*p+a[o+N],N+=n,i-=8);if(0===M)M=1-e;else{if(M===f)return p?NaN:1/0*(s?-1:1);p+=Math.pow(2,r),M-=e}return(s?-1:1)*p*Math.pow(2,M-r)},exports.write=function(a,o,t,r,h,M){var p,w,f,e=8*M-h-1,i=(1<>1,n=23===h?Math.pow(2,-24)-Math.pow(2,-77):0,s=r?0:M-1,u=r?1:-1,l=o<0||0===o&&1/o<0?1:0;for(o=Math.abs(o),isNaN(o)||o===1/0?(w=isNaN(o)?1:0,p=i):(p=Math.floor(Math.log(o)/Math.LN2),o*(f=Math.pow(2,-p))<1&&(p--,f*=2),o+=p+N>=1?n/f:n*Math.pow(2,1-N),o*f>=2&&(p++,f/=2),p+N>=i?(w=0,p=i):p+N>=1?(w=(o*f-1)*Math.pow(2,h),p+=N):(w=o*Math.pow(2,N-1)*Math.pow(2,h),p=0));h>=8;a[t+s]=255&w,s+=u,w/=256,h-=8);for(p=p<0;a[t+s]=255&p,s+=u,p/=256,e-=8);a[t+s-u]|=128*l}; -},{}],16:[function(_dereq_,module,exports){ -"function"==typeof Object.create?module.exports=function(t,e){e&&(t.super_=e,t.prototype=Object.create(e.prototype,{constructor:{value:t,enumerable:!1,writable:!0,configurable:!0}}))}:module.exports=function(t,e){if(e){t.super_=e;var o=function(){};o.prototype=e.prototype,t.prototype=new o,t.prototype.constructor=t}}; -},{}],17:[function(_dereq_,module,exports){ -function isBuffer(f){return!!f.constructor&&"function"==typeof f.constructor.isBuffer&&f.constructor.isBuffer(f)}function isSlowBuffer(f){return"function"==typeof f.readFloatLE&&"function"==typeof f.slice&&isBuffer(f.slice(0,0))}module.exports=function(f){return null!=f&&(isBuffer(f)||isSlowBuffer(f)||!!f._isBuffer)}; },{}],18:[function(_dereq_,module,exports){ -function isFunction(t){if(!t)return!1;var o=toString.call(t);return"[object Function]"===o||"function"==typeof t&&"[object RegExp]"!==o||"undefined"!=typeof window&&(t===window.setTimeout||t===window.alert||t===window.confirm||t===window.prompt)}module.exports=isFunction;var toString=Object.prototype.toString; +exports.read=function(a,o,t,r,h){var M,p,w=8*h-r-1,f=(1<>1,i=-7,N=t?h-1:0,n=t?-1:1,s=a[o+N];for(N+=n,M=s&(1<<-i)-1,s>>=-i,i+=w;i>0;M=256*M+a[o+N],N+=n,i-=8);for(p=M&(1<<-i)-1,M>>=-i,i+=r;i>0;p=256*p+a[o+N],N+=n,i-=8);if(0===M)M=1-e;else{if(M===f)return p?NaN:1/0*(s?-1:1);p+=Math.pow(2,r),M-=e}return(s?-1:1)*p*Math.pow(2,M-r)},exports.write=function(a,o,t,r,h,M){var p,w,f,e=8*M-h-1,i=(1<>1,n=23===h?Math.pow(2,-24)-Math.pow(2,-77):0,s=r?0:M-1,u=r?1:-1,l=o<0||0===o&&1/o<0?1:0;for(o=Math.abs(o),isNaN(o)||o===1/0?(w=isNaN(o)?1:0,p=i):(p=Math.floor(Math.log(o)/Math.LN2),o*(f=Math.pow(2,-p))<1&&(p--,f*=2),o+=p+N>=1?n/f:n*Math.pow(2,1-N),o*f>=2&&(p++,f/=2),p+N>=i?(w=0,p=i):p+N>=1?(w=(o*f-1)*Math.pow(2,h),p+=N):(w=o*Math.pow(2,N-1)*Math.pow(2,h),p=0));h>=8;a[t+s]=255&w,s+=u,w/=256,h-=8);for(p=p<0;a[t+s]=255&p,s+=u,p/=256,e-=8);a[t+s-u]|=128*l}; },{}],19:[function(_dereq_,module,exports){ -"use strict";module.exports=function(t){var e=typeof t;return null!==t&&("object"===e||"function"===e)}; +"function"==typeof Object.create?module.exports=function(t,e){t.super_=e,t.prototype=Object.create(e.prototype,{constructor:{value:t,enumerable:!1,writable:!0,configurable:!0}})}:module.exports=function(t,e){t.super_=e;var o=function(){};o.prototype=e.prototype,t.prototype=new o,t.prototype.constructor=t}; },{}],20:[function(_dereq_,module,exports){ -var toString={}.toString;module.exports=Array.isArray||function(r){return"[object Array]"==toString.call(r)}; +function isBuffer(f){return!!f.constructor&&"function"==typeof f.constructor.isBuffer&&f.constructor.isBuffer(f)}function isSlowBuffer(f){return"function"==typeof f.readFloatLE&&"function"==typeof f.slice&&isBuffer(f.slice(0,0))}module.exports=function(f){return null!=f&&(isBuffer(f)||isSlowBuffer(f)||!!f._isBuffer)}; },{}],21:[function(_dereq_,module,exports){ +"use strict";var fnToStr=Function.prototype.toString,constructorRegex=/^\s*class\b/,isES6ClassFn=function(t){try{var n=fnToStr.call(t);return constructorRegex.test(n)}catch(t){return!1}},tryFunctionObject=function(t){try{return!isES6ClassFn(t)&&(fnToStr.call(t),!0)}catch(t){return!1}},toStr=Object.prototype.toString,fnClass="[object Function]",genClass="[object GeneratorFunction]",hasToStringTag="function"==typeof Symbol&&"symbol"==typeof Symbol.toStringTag;module.exports=function(t){if(!t)return!1;if("function"!=typeof t&&"object"!=typeof t)return!1;if("function"==typeof t&&!t.prototype)return!0;if(hasToStringTag)return tryFunctionObject(t);if(isES6ClassFn(t))return!1;var n=toStr.call(t);return n===fnClass||n===genClass}; +},{}],22:[function(_dereq_,module,exports){ +function isFunction(o){var t=toString.call(o);return"[object Function]"===t||"function"==typeof o&&"[object RegExp]"!==t||"undefined"!=typeof window&&(o===window.setTimeout||o===window.alert||o===window.confirm||o===window.prompt)}module.exports=isFunction;var toString=Object.prototype.toString; +},{}],23:[function(_dereq_,module,exports){ +"use strict";module.exports=function(t){var e=typeof t;return null!==t&&("object"===e||"function"===e)}; +},{}],24:[function(_dereq_,module,exports){ function TextLayout(t){this.glyphs=[],this._measure=this.computeMetrics.bind(this),this.update(t)}function addGetter(t){Object.defineProperty(TextLayout.prototype,t,{get:wrapper(t),configurable:!0})}function wrapper(t){return new Function(["return function "+t+"() {"," return this._"+t,"}"].join("\n"))()}function getGlyphById(t,e){if(!t.chars||0===t.chars.length)return null;var r=findChar(t.chars,e);return r>=0?t.chars[r]:null}function getXHeight(t){for(var e=0;e=0)return t.chars[n].height}return 0}function getMGlyph(t){for(var e=0;e=0)return t.chars[n]}return 0}function getCapHeight(t){for(var e=0;e=0)return t.chars[n].height}return 0}function getKerning(t,e,r){if(!t.kernings||0===t.kernings.length)return 0;for(var n=t.kernings,i=0;i=n||f>=n)break;s=f,c=d,a=i}u++}return a&&(c+=a.xoffset),{start:e,end:e+u,width:c}},["width","height","descender","ascender","xHeight","baseline","capHeight","lineHeight"].forEach(addGetter); -},{"as-number":2,"word-wrapper":46,"xtend":49}],22:[function(_dereq_,module,exports){ -(function (Buffer){(function (){ -function isArrayBuffer(r){return"[object ArrayBuffer]"===Object.prototype.toString.call(r)}function getBinaryOpts(r){if(xml2)return xtend(r,{responseType:"arraybuffer"});if(void 0===self.XMLHttpRequest)throw new Error("your browser does not support XHR loading");var e=new self.XMLHttpRequest;return e.overrideMimeType("text/plain; charset=x-user-defined"),xtend({xhr:e},r)}var xhr=_dereq_("xhr"),noop=function(){},parseASCII=_dereq_("parse-bmfont-ascii"),parseXML=_dereq_("parse-bmfont-xml"),readBinary=_dereq_("parse-bmfont-binary"),isBinaryFormat=_dereq_("./lib/is-binary"),xtend=_dereq_("xtend"),xml2=function(){return self.XMLHttpRequest&&"withCredentials"in new XMLHttpRequest}();module.exports=function(r,e){e="function"==typeof e?e:noop,"string"==typeof r?r={uri:r}:r||(r={}),r.binary&&(r=getBinaryOpts(r)),xhr(r,function(t,n,i){if(t)return e(t);if(!/^2/.test(n.statusCode))return e(new Error("http status code: "+n.statusCode));if(!i)return e(new Error("no body result"));var o=!1;if(isArrayBuffer(i)){var a=new Uint8Array(i);i=Buffer.from(a,"binary")}isBinaryFormat(i)&&(o=!0,"string"==typeof i&&(i=Buffer.from(i,"binary"))),o||(Buffer.isBuffer(i)&&(i=i.toString(r.encoding)),i=i.trim());var s;try{var f=n.headers["content-type"];s=o?readBinary(i):/json/.test(f)||"{"===i.charAt(0)?JSON.parse(i):/xml/.test(f)||"<"===i.charAt(0)?parseXML(i):parseASCII(i)}catch(r){e(new Error("error parsing font "+r.message)),e=noop}e(null,s)})}; -}).call(this)}).call(this,_dereq_("buffer").Buffer) +},{"as-number":2,"word-wrapper":49,"xtend":52}],25:[function(_dereq_,module,exports){ +(function (Buffer){ +function isArrayBuffer(r){return"[object ArrayBuffer]"===Object.prototype.toString.call(r)}function getBinaryOpts(r){if(xml2)return xtend(r,{responseType:"arraybuffer"});if(void 0===self.XMLHttpRequest)throw new Error("your browser does not support XHR loading");var e=new self.XMLHttpRequest;return e.overrideMimeType("text/plain; charset=x-user-defined"),xtend({xhr:e},r)}var xhr=_dereq_("xhr"),noop=function(){},parseASCII=_dereq_("parse-bmfont-ascii"),parseXML=_dereq_("parse-bmfont-xml"),readBinary=_dereq_("parse-bmfont-binary"),isBinaryFormat=_dereq_("./lib/is-binary"),xtend=_dereq_("xtend"),xml2=function(){return self.XMLHttpRequest&&"withCredentials"in new XMLHttpRequest}();module.exports=function(r,e){e="function"==typeof e?e:noop,"string"==typeof r?r={uri:r}:r||(r={}),r.binary&&(r=getBinaryOpts(r)),xhr(r,function(t,n,i){if(t)return e(t);if(!/^2/.test(n.statusCode))return e(new Error("http status code: "+n.statusCode));if(!i)return e(new Error("no body result"));var o=!1;if(isArrayBuffer(i)){var a=new Uint8Array(i);i=new Buffer(a,"binary")}isBinaryFormat(i)&&(o=!0,"string"==typeof i&&(i=new Buffer(i,"binary"))),o||(Buffer.isBuffer(i)&&(i=i.toString(r.encoding)),i=i.trim());var s;try{var u=n.headers["content-type"];s=o?readBinary(i):/json/.test(u)||"{"===i.charAt(0)?JSON.parse(i):/xml/.test(u)||"<"===i.charAt(0)?parseXML(i):parseASCII(i)}catch(r){e(new Error("error parsing font "+r.message)),e=noop}e(null,s)})}; +}).call(this,_dereq_("buffer").Buffer) -},{"./lib/is-binary":23,"buffer":5,"parse-bmfont-ascii":25,"parse-bmfont-binary":26,"parse-bmfont-xml":27,"xhr":47,"xtend":49}],23:[function(_dereq_,module,exports){ -(function (Buffer){(function (){ -var equal=_dereq_("buffer-equal"),HEADER=Buffer.from([66,77,70,3]);module.exports=function(e){return"string"==typeof e?"BMF"===e.substring(0,3):e.length>4&&equal(e.slice(0,4),HEADER)}; -}).call(this)}).call(this,_dereq_("buffer").Buffer) +},{"./lib/is-binary":26,"buffer":7,"parse-bmfont-ascii":28,"parse-bmfont-binary":29,"parse-bmfont-xml":30,"xhr":50,"xtend":52}],26:[function(_dereq_,module,exports){ +(function (Buffer){ +var equal=_dereq_("buffer-equal"),HEADER=new Buffer([66,77,70,3]);module.exports=function(e){return"string"==typeof e?"BMF"===e.substring(0,3):e.length>4&&equal(e.slice(0,4),HEADER)}; +}).call(this,_dereq_("buffer").Buffer) -},{"buffer":5,"buffer-equal":6}],24:[function(_dereq_,module,exports){ +},{"buffer":7,"buffer-equal":6}],27:[function(_dereq_,module,exports){ "use strict";function toObject(e){if(null===e||void 0===e)throw new TypeError("Object.assign cannot be called with null or undefined");return Object(e)}function shouldUseNative(){try{if(!Object.assign)return!1;var e=new String("abc");if(e[5]="de","5"===Object.getOwnPropertyNames(e)[0])return!1;for(var r={},t=0;t<10;t++)r["_"+String.fromCharCode(t)]=t;if("0123456789"!==Object.getOwnPropertyNames(r).map(function(e){return r[e]}).join(""))return!1;var n={};return"abcdefghijklmnopqrst".split("").forEach(function(e){n[e]=e}),"abcdefghijklmnopqrst"===Object.keys(Object.assign({},n)).join("")}catch(e){return!1}}var getOwnPropertySymbols=Object.getOwnPropertySymbols,hasOwnProperty=Object.prototype.hasOwnProperty,propIsEnumerable=Object.prototype.propertyIsEnumerable;module.exports=shouldUseNative()?Object.assign:function(e,r){for(var t,n,o=toObject(e),a=1;ae.length-1)return 0;var a=e.readUInt8(n++),t=e.readInt32LE(n);switch(n+=4,a){case 1:r.info=readInfo(e,n);break;case 2:r.common=readCommon(e,n);break;case 3:r.pages=readPages(e,n,t);break;case 4:r.chars=readChars(e,n,t);break;case 5:r.kernings=readKernings(e,n,t)}return 5+t}function readInfo(r,e){var n={};n.size=r.readInt16LE(e);var a=r.readUInt8(e+2);return n.smooth=a>>7&1,n.unicode=a>>6&1,n.italic=a>>5&1,n.bold=a>>4&1,a>>3&1&&(n.fixedHeight=1),n.charset=r.readUInt8(e+3)||"",n.stretchH=r.readUInt16LE(e+4),n.aa=r.readUInt8(e+6),n.padding=[r.readInt8(e+7),r.readInt8(e+8),r.readInt8(e+9),r.readInt8(e+10)],n.spacing=[r.readInt8(e+11),r.readInt8(e+12)],n.outline=r.readUInt8(e+13),n.face=readStringNT(r,e+14),n}function readCommon(r,e){var n={};n.lineHeight=r.readUInt16LE(e),n.base=r.readUInt16LE(e+2),n.scaleW=r.readUInt16LE(e+4),n.scaleH=r.readUInt16LE(e+6),n.pages=r.readUInt16LE(e+8);r.readUInt8(e+10);return n.packed=0,n.alphaChnl=r.readUInt8(e+11),n.redChnl=r.readUInt8(e+12),n.greenChnl=r.readUInt8(e+13),n.blueChnl=r.readUInt8(e+14),n}function readPages(r,e,n){for(var a=[],t=readNameNT(r,e),d=t.length+1,o=n/d,i=0;i3)throw new Error("Only supports BMFont Binary v3 (BMFont App v1.10)");for(var n={kernings:[],chars:[]},a=0;a<5;a++)e+=readBlock(n,r,e);return n}; -},{}],27:[function(_dereq_,module,exports){ +},{}],30:[function(_dereq_,module,exports){ function getAttribs(e){return getAttribList(e).reduce(function(e,t){return e[mapName(t.nodeName)]=t.nodeValue,e},{})}function getAttribList(e){for(var t=[],r=0;r element");for(var n=a.getElementsByTagName("page"),i=0;i1)for(var r=1;r-1}function applyArguments(e,t){return e.apply(null,t)}function parseEasingParameters(e){var t=easingFunctionRegex.exec(e);return t?t[1].split(",").map(function(e){return parseFloat(e)}):[]}function spring(e,t){function n(e){var n=t?t*e/1e3:e;return n=l<1?Math.exp(-n*l*c)*(f*Math.cos(g*n)+p*Math.sin(g*n)):(f+p*n)*Math.exp(-n*c),0===e||1===e?e:1-n}function r(){var t=cache.springs[e];if(t)return t;for(var r=0,a=0;;)if(r+=1/6,1===n(r)){if(++a>=16)break}else a=0;var i=r*(1/6)*1e3;return cache.springs[e]=i,i}var a=parseEasingParameters(e),i=minMax(is.und(a[0])?1:a[0],.1,100),s=minMax(is.und(a[1])?100:a[1],.1,100),o=minMax(is.und(a[2])?10:a[2],.1,100),u=minMax(is.und(a[3])?0:a[3],.1,100),c=Math.sqrt(s/i),l=o/(2*Math.sqrt(s*i)),g=l<1?c*Math.sqrt(1-l*l):0,f=1,p=l<1?(l*c-u)/g:-u+c;return t?n:r}function elastic(e,t){void 0===e&&(e=1),void 0===t&&(t=.5);var n=minMax(e,1,10),r=minMax(t,.1,2);return function(e){return 0===e||1===e?e:-n*Math.pow(2,10*(e-1))*Math.sin((e-1-r/(2*Math.PI)*Math.asin(1/n))*(2*Math.PI)/r)}}function steps(e){return void 0===e&&(e=10),function(t){return Math.round(t*e)*(1/e)}}function parseEasings(e,t){if(is.fnc(e))return e;var n=e.split("(")[0],r=penner[n],a=parseEasingParameters(e);switch(n){case"spring":return spring(e,t);case"cubicBezier":return applyArguments(bezier,a);case"steps":return applyArguments(steps,a);default:return is.fnc(r)?applyArguments(r,a):applyArguments(bezier,r)}}function selectString(e){try{return document.querySelectorAll(e)}catch(e){return}}function filterArray(e,t){for(var n=auxArrayFilter,r=e.length,a=arguments.length>=2?arguments[1]:void 0,i=0;i1&&(n-=1),n<1/6?e+6*(t-e)*n:n<.5?t:n<2/3?e+(t-e)*(2/3-n)*6:e}var n,r,a,i=hslToRgbaHsl1Regex.exec(e)||hslToRgbaHsl2Regex.exec(e),s=parseInt(i[1],10)/360,o=parseInt(i[2],10)/100,u=parseInt(i[3],10)/100,c=i[4]||1;if(0==o)n=r=a=u;else{var l=u<.5?u*(1+o):u+o-u*o,g=2*u-l;n=t(g,l,s+1/3),r=t(g,l,s),a=t(g,l,s-1/3)}return"rgba("+255*n+","+255*r+","+255*a+","+c+")"}function colorToRgb(e){return is.rgb(e)?rgbToRgba(e):is.hex(e)?hexToRgba(e):is.hsl(e)?hslToRgba(e):void 0}function getUnit(e){var t=unitRegex.exec(e);if(t)return t[2]}function getTransformUnit(e){return stringContains(e,"translate")||"perspective"===e?"px":stringContains(e,"rotate")||stringContains(e,"skew")?"deg":void 0}function getFunctionValue(e,t){return is.fnc(e)?e(t.target,t.id,t.total):e}function getAttribute(e,t){return e.getAttribute(t)}function convertPxToUnit(e,t,n){if(arrayContains([n,"deg","rad","turn"],getUnit(t)))return t;var r=cache.CSS[t+n];if(!is.und(r))return r;var a=document.createElement(e.tagName),i=e.parentNode&&e.parentNode!==document?e.parentNode:document.body;i.appendChild(a),a.style.position="absolute",a.style.width=100+n;var s=100/a.offsetWidth;i.removeChild(a);var o=s*parseFloat(t);return cache.CSS[t+n]=o,o}function getCSSValue(e,t,n){if(t in e.style){var r=t.replace(/([a-z])([A-Z])/g,"$1-$2").toLowerCase(),a=e.style[t]||getComputedStyle(e).getPropertyValue(r)||"0";return n?convertPxToUnit(e,a,n):a}}function getAnimationType(e,t){return is.dom(e)&&!is.inp(e)&&(getAttribute(e,t)||is.svg(e)&&e[t])?"attribute":is.dom(e)&&arrayContains(validTransforms,t)?"transform":is.dom(e)&&"transform"!==t&&getCSSValue(e,t)?"css":null!=e[t]?"object":void 0}function getElementTransforms(e){if(is.dom(e)){for(var t,n=e.style.transform||"",r=new Map;t=transformRegex.exec(n);)r.set(t[1],t[2]);return r}}function getTransformValue(e,t,n,r){var a=stringContains(t,"scale")?1:0+getTransformUnit(t),i=getElementTransforms(e).get(t)||a;return n&&(n.transforms.list.set(t,i),n.transforms.last=t),r?convertPxToUnit(e,i,r):i}function getOriginalTargetValue(e,t,n,r){switch(getAnimationType(e,t)){case"transform":return getTransformValue(e,t,r,n);case"css":return getCSSValue(e,t,n);case"attribute":return getAttribute(e,t);default:return e[t]||0}}function getRelativeValue(e,t){var n=operatorRegex.exec(e);if(!n)return e;var r=getUnit(e)||0,a=parseFloat(t),i=parseFloat(e.replace(n[0],""));switch(n[0][0]){case"+":return a+i+r;case"-":return a-i+r;case"*":return a*i+r}}function validateValue(e,t){if(is.col(e))return colorToRgb(e);var n=getUnit(e),r=n?e.substr(0,e.length-n.length):e;return t&&!whitespaceRegex.test(e)?r+t:r}function getDistance(e,t){return Math.sqrt(Math.pow(t.x-e.x,2)+Math.pow(t.y-e.y,2))}function getCircleLength(e){return 2*Math.PI*getAttribute(e,"r")}function getRectLength(e){return 2*getAttribute(e,"width")+2*getAttribute(e,"height")}function getLineLength(e){return getDistance({x:getAttribute(e,"x1"),y:getAttribute(e,"y1")},{x:getAttribute(e,"x2"),y:getAttribute(e,"y2")})}function getPolylineLength(e){for(var t,n=e.points,r=0,a=0;a0&&(r+=getDistance(t,i)),t=i}return r}function getPolygonLength(e){var t=e.points;return getPolylineLength(e)+getDistance(t.getItem(t.numberOfItems-1),t.getItem(0))}function getTotalLength(e){if(e.getTotalLength)return e.getTotalLength();switch(e.tagName.toLowerCase()){case"circle":return getCircleLength(e);case"rect":return getRectLength(e);case"line":return getLineLength(e);case"polyline":return getPolylineLength(e);case"polygon":return getPolygonLength(e)}}function setDashoffset(e){var t=getTotalLength(e);return e.setAttribute("stroke-dasharray",t),t}function getParentSvgEl(e){for(var t=e.parentNode;is.svg(t)&&(t=t.parentNode,is.svg(t.parentNode)););return t}function getParentSvg(e,t){var n=t||{},r=n.el||getParentSvgEl(e),a=r.getBoundingClientRect(),i=getAttribute(r,"viewBox"),s=a.width,o=a.height,u=n.viewBox||(i?i.split(" "):[0,0,s,o]);return{el:r,viewBox:u,x:u[0]/1,y:u[1]/1,w:s/u[2],h:o/u[3]}}function getPath(e,t){var n=is.str(e)?selectString(e)[0]:e,r=t||100;return function(e){return{property:e,el:n,svg:getParentSvg(n),totalLength:getTotalLength(n)*(r/100)}}}function getPathProgress(e,t){function n(n){void 0===n&&(n=0);var r=t+n>=1?t+n:0;return e.el.getPointAtLength(r)}var r=getParentSvg(e.el,e.svg),a=n(),i=n(-1),s=n(1);switch(e.property){case"x":return(a.x-r.x)*r.w;case"y":return(a.y-r.y)*r.h;case"angle":return 180*Math.atan2(s.y-i.y,s.x-i.x)/Math.PI}}function decomposeValue(e,t){var n=validateValue(is.pth(e)?e.totalLength:e,t)+"";return{original:n,numbers:n.match(valueRegex)?n.match(valueRegex).map(Number):[0],strings:is.str(e)||t?n.split(valueRegex):[]}}function parseTargets(e){return filterArray(e?flattenArray(is.arr(e)?e.map(toArray):toArray(e)):[],function(e,t,n){return n.indexOf(e)===t})}function getAnimatables(e){var t=parseTargets(e);return t.map(function(e,n){return{target:e,id:n,total:t.length,transforms:{list:getElementTransforms(e)}}})}function normalizePropertyTweens(e,t){var n=cloneObject(t);if(springRegex.test(n.easing)&&(n.duration=spring(n.easing)),is.arr(e)){var r=e.length;2===r&&!is.obj(e[0])?e={value:e}:is.fnc(t.duration)||(n.duration=t.duration/r)}var a=is.arr(e)?e:[e];return a.map(function(e,n){var r=is.obj(e)&&!is.pth(e)?e:{value:e};return is.und(r.delay)&&(r.delay=n?0:t.delay),is.und(r.endDelay)&&(r.endDelay=n===a.length-1?t.endDelay:0),r}).map(function(e){return mergeObjects(e,n)})}function flattenKeyframes(e){for(var t=filterArray(flattenArray(e.map(function(e){return Object.keys(e)})),function(e){return is.key(e)}).reduce(function(e,t){return e.indexOf(t)<0&&e.push(t),e},[]),n={},r=0;r2||(h=Math.round(h*f)/f)),p.push(h)}var T=g.length;if(T){d=g[0];for(var A=0;A0&&(y.began=!0,u("begin"),u("loopBegin")),d<=i&&0!==y.currentTime&&o(0),(d>=l&&y.currentTime!==a||!a)&&o(a),d>i&&d=a&&(p=0,c(),y.remaining?(f=m,u("loopComplete"),u("loopBegin"),"alternate"===y.direction&&n()):(y.paused=!0,y.completed||(y.completed=!0,u("loopComplete"),u("complete"),"Promise"in window&&(v(),h=t()))))}void 0===e&&(e={});var g,f=0,p=0,m=0,d=0,v=null,h=t(),y=createNewInstance(e);return y.reset=function(){var e=y.direction;y.passThrough=!1,y.currentTime=0,y.progress=0,y.paused=!0,y.began=!1,y.changeBegan=!1,y.completed=!1,y.changeCompleted=!1,y.reversePlayback=!1,y.reversed="reverse"===e,y.remaining=y.loop,g=y.children,d=g.length;for(var t=d;t--;)y.children[t].reset();(y.reversed&&!0!==y.loop||"alternate"===e&&1===y.loop)&&y.remaining++,o(0)},y.set=function(e,t){return setTargetsValue(e,t),y},y.tick=function(e){m=e,f||(f=m),l((m+(p-f))*anime.speed)},y.seek=function(e){l(r(e))},y.pause=function(){y.paused=!0,a()},y.play=function(){y.paused&&(y.paused=!1,activeInstances.push(y),a(),raf||engine())},y.reverse=function(){n(),a()},y.restart=function(){y.reset(),y.play()},y.finished=h,y.reset(),y.autoplay&&y.play(),y}function removeTargetsFromAnimations(e,t){for(var n=t.length;n--;)arrayContains(e,t[n].animatable.target)&&t.splice(n,1)}function removeTargets(e){for(var t=parseTargets(e),n=activeInstances.length;n--;){var r=activeInstances[n],a=r.animations,i=r.children;removeTargetsFromAnimations(t,a);for(var s=i.length;s--;){var o=i[s],u=o.animations;removeTargetsFromAnimations(t,u),u.length||o.children.length||i.splice(s,1)}a.length||i.length||r.pause()}}function stagger(e,t){void 0===t&&(t={});var n=t.direction||"normal",r=t.easing?parseEasings(t.easing):null,a=t.grid,i=t.axis,s=t.from||0,o="first"===s,u="center"===s,c="last"===s,l=is.arr(e),g=l?parseFloat(e[0]):parseFloat(e),f=l?parseFloat(e[1]):0,p=getUnit(l?e[1]:e)||0,m=t.start||0+(l?g:0),d=[],v=0;return function(e,t,h){if(o&&(s=0),u&&(s=(h-1)/2),c&&(s=h-1),!d.length){for(var y=0;y-1&&activeInstances.splice(i,1);for(var o=0;o0?n=o:t=o}while(Math.abs(s)>1e-7&&++u<10);return o}function s(e,t,n,i){for(var s=0;s<4;++s){var o=a(t,n,i);if(0===o)return t;t-=(r(t,n,i)-e)/o}return t}function o(e,t,n,o){function l(t){for(var r=0,o=1,l=u-1;o!==l&&g[o]<=t;++o)r+=c;--o;var f=(t-g[o])/(g[o+1]-g[o]),p=r+f*c,m=a(p,e,n);return m>=.001?s(t,p,e,n):0===m?p:i(t,r,r+c,e,n)}if(0<=e&&e<=1&&0<=n&&n<=1){var g=new Float32Array(u);if(e!==t||n!==o)for(var f=0;f-1&&(activeInstances.splice(i,1),n=activeInstances.length)}else a.tick(t);r++}e()}else raf=cancelAnimationFrame(raf)}return e}();document.addEventListener("visibilitychange",handleVisibilityChange),anime.version="3.0.0",anime.speed=1,anime.running=activeInstances,anime.remove=removeTargets,anime.get=getOriginalTargetValue,anime.set=setTargetsValue,anime.convertPx=convertPxToUnit,anime.path=getPath,anime.setDashoffset=setDashoffset,anime.stagger=stagger,anime.timeline=timeline,anime.easing=parseEasings,anime.penner=penner,anime.random=function(e,t){return Math.floor(Math.random()*(t-e+1))+e},module.exports=anime; -},{}],35:[function(_dereq_,module,exports){ -!function(t,e){"object"==typeof exports&&"undefined"!=typeof module?e(exports):"function"==typeof define&&define.amd?define(["exports"],e):(t="undefined"!=typeof globalThis?globalThis:t||self,e(t.THREE={}))}(this,function(t){"use strict";function e(){}function n(t,e){for(var n=0;ns)return!1}return!0}function h(){function t(){i.setFromEuler(r,!1)}function e(){r.setFromQuaternion(i,void 0,!1)}Object.defineProperty(this,"id",{value:gl++}),this.uuid=Tc.generateUUID(),this.name="",this.type="Object3D",this.parent=null,this.children=[],this.up=h.DefaultUp.clone();var n=new Dc,r=new pl,i=new Pc,a=new Dc(1,1,1);r._onChange(t),i._onChange(e),Object.defineProperties(this,{position:{configurable:!0,enumerable:!0,value:n},rotation:{configurable:!0,enumerable:!0,value:r},quaternion:{configurable:!0,enumerable:!0,value:i},scale:{configurable:!0,enumerable:!0,value:a},modelViewMatrix:{value:new al},normalMatrix:{value:new Ac}}),this.matrix=new al,this.matrixWorld=new al,this.matrixAutoUpdate=h.DefaultMatrixAutoUpdate,this.matrixWorldNeedsUpdate=!1,this.layers=new vl,this.visible=!0,this.castShadow=!1,this.receiveShadow=!1,this.frustumCulled=!0,this.renderOrder=0,this.animations=[],this.userData={}}function d(t,e,n){return n<0&&(n+=1),n>1&&(n-=1),n<1/6?t+6*(e-t)*n:n<.5?e:n<2/3?t+6*(e-t)*(2/3-n):t}function p(t){return t<.04045?.0773993808*t:Math.pow(.9478672986*t+.0521327014,2.4)}function f(t){return t<.0031308?12.92*t:1.055*Math.pow(t,.41666)-.055}function m(){Object.defineProperty(this,"id",{value:Jl++}),this.uuid=Tc.generateUUID(),this.name="",this.type="Material",this.fog=!0,this.blending=Va,this.side=Ga,this.flatShading=!1,this.vertexColors=!1,this.opacity=1,this.transparent=!1,this.blendSrc=ro,this.blendDst=io,this.blendEquation=Ya,this.blendSrcAlpha=null,this.blendDstAlpha=null,this.blendEquationAlpha=null,this.depthFunc=fo,this.depthTest=!0,this.depthWrite=!0,this.stencilWriteMask=255,this.stencilFunc=gc,this.stencilRef=0,this.stencilFuncMask=255,this.stencilFail=vc,this.stencilZFail=vc,this.stencilZPass=vc,this.stencilWrite=!1,this.clippingPlanes=null,this.clipIntersection=!1,this.clipShadows=!1,this.shadowSide=null,this.colorWrite=!0,this.precision=null,this.polygonOffset=!1,this.polygonOffsetFactor=0,this.polygonOffsetUnits=0,this.dithering=!1,this.alphaTest=0,this.premultipliedAlpha=!1,this.visible=!0,this.toneMapped=!0,this.userData={},this.version=0}function v(t){m.call(this),this.type="MeshBasicMaterial",this.color=new Yl(16777215),this.map=null,this.lightMap=null,this.lightMapIntensity=1,this.aoMap=null,this.aoMapIntensity=1,this.specularMap=null,this.alphaMap=null,this.envMap=null,this.combine=xo,this.reflectivity=1,this.refractionRatio=.98,this.wireframe=!1,this.wireframeLinewidth=1,this.wireframeLinecap="round",this.wireframeLinejoin="round",this.skinning=!1,this.morphTargets=!1,this.setValues(t)}function g(t,e,n){if(Array.isArray(t))throw new TypeError("THREE.BufferAttribute: array should be a Typed Array.");this.name="",this.array=t,this.itemSize=e,this.count=void 0!==t?t.length/e:0,this.normalized=!0===n,this.usage=yc,this.updateRange={offset:0,count:-1},this.version=0}function y(t,e,n){g.call(this,new Int8Array(t),e,n)}function x(t,e,n){g.call(this,new Uint8Array(t),e,n)}function b(t,e,n){g.call(this,new Uint8ClampedArray(t),e,n)}function _(t,e,n){g.call(this,new Int16Array(t),e,n)}function w(t,e,n){g.call(this,new Uint16Array(t),e,n)}function M(t,e,n){g.call(this,new Int32Array(t),e,n)}function S(t,e,n){g.call(this,new Uint32Array(t),e,n)}function T(t,e,n){g.call(this,new Uint16Array(t),e,n)}function E(t,e,n){g.call(this,new Float32Array(t),e,n)}function A(t,e,n){g.call(this,new Float64Array(t),e,n)}function L(t){if(0===t.length)return-1/0;for(var e=t[0],n=1,r=t.length;ne&&(e=t[n]);return e}function R(t,e){return new tu[t](e)}function C(){Object.defineProperty(this,"id",{value:eu+=2}),this.uuid=Tc.generateUUID(),this.name="",this.type="BufferGeometry",this.index=null,this.attributes={},this.morphAttributes={},this.morphTargetsRelative=!1,this.groups=[],this.boundingBox=null,this.boundingSphere=null,this.drawRange={start:0,count:1/0},this.userData={}}function P(t,e){h.call(this),this.type="Mesh",this.geometry=void 0!==t?t:new C,this.material=void 0!==e?e:new v,this.updateMorphTargets()}function D(t,e,n,r,i,a,o,s){if(null===(e.side===Ua?r.intersectTriangle(o,a,i,!0,s):r.intersectTriangle(i,a,o,e.side!==Ha,s)))return null;Su.copy(s),Su.applyMatrix4(t.matrixWorld);var c=n.ray.origin.distanceTo(Su);return cn.far?null:{distance:c,point:Su.clone(),object:t}}function O(t,e,n,r,i,a,o,s,c,l,u,h){hu.fromBufferAttribute(i,l),du.fromBufferAttribute(i,u),pu.fromBufferAttribute(i,h);var d=t.morphTargetInfluences;if(e.morphTargets&&a&&d){gu.set(0,0,0),yu.set(0,0,0),xu.set(0,0,0);for(var p=0,f=a.length;p=0){var y=c[h];if(void 0!==y){var x=y.normalized,b=y.itemSize,_=n.get(y);if(void 0===_)continue;var w=_.buffer,M=_.type,S=_.bytesPerElement;if(y.isInterleavedBufferAttribute){var T=y.data,E=T.stride,A=y.offset;T&&T.isInstancedInterleavedBuffer?(f(g,T.meshPerAttribute),void 0===s._maxInstanceCount&&(s._maxInstanceCount=T.meshPerAttribute*T.count)):p(g),t.bindBuffer(34962,w),v(g,b,M,x,E*S,A*S)}else y.isInstancedBufferAttribute?(f(g,y.meshPerAttribute),void 0===s._maxInstanceCount&&(s._maxInstanceCount=y.meshPerAttribute*y.count)):p(g),t.bindBuffer(34962,w),v(g,b,M,x,0,0)}else if("instanceMatrix"===h){var L=n.get(i.instanceMatrix);if(void 0===L)continue;var R=L.buffer,C=L.type;f(g+0,1),f(g+1,1),f(g+2,1),f(g+3,1),t.bindBuffer(34962,R),t.vertexAttribPointer(g+0,4,C,!1,64,0),t.vertexAttribPointer(g+1,4,C,!1,64,16),t.vertexAttribPointer(g+2,4,C,!1,64,32),t.vertexAttribPointer(g+3,4,C,!1,64,48)}else if("instanceColor"===h){var P=n.get(i.instanceColor);if(void 0===P)continue;var D=P.buffer,O=P.type;f(g,1),t.bindBuffer(34962,D),t.vertexAttribPointer(g,3,O,!1,12,0)}else if(void 0!==u){var I=u[h];if(void 0!==I)switch(I.length){case 2:t.vertexAttrib2fv(g,I);break;case 3:t.vertexAttrib3fv(g,I);break;case 4:t.vertexAttrib4fv(g,I);break;default:t.vertexAttrib1fv(g,I)}}}}m()}}function y(){_();for(var t in E){var e=E[t];for(var n in e){var r=e[n];for(var i in r)s(r[i].object),delete r[i];delete e[n]}delete E[t]}}function x(t){if(void 0!==E[t.id]){var e=E[t.id];for(var n in e){var r=e[n];for(var i in r)s(r[i].object),delete r[i];delete e[n]}delete E[t.id]}}function b(t){for(var e in E){var n=E[e];if(void 0!==n[t.id]){var r=n[t.id];for(var i in r)s(r[i].object),delete r[i];delete n[t.id]}}}function _(){w(),L!==A&&(L=A,o(L.object))}function w(){A.geometry=null,A.program=null,A.wireframe=!1}var M=t.getParameter(34921),S=r.isWebGL2?null:e.get("OES_vertex_array_object"),T=r.isWebGL2||null!==S,E={},A=l(null),L=A;return{setup:i,reset:_,resetDefaultState:w,dispose:y,releaseStatesOfGeometry:x,releaseStatesOfProgram:b,initAttributes:d,enableAttribute:p,disableUnusedAttributes:m}}function X(t,e,n,r){function i(t){s=t}function a(e,r){t.drawArrays(s,e,r),n.update(r,s,1)}function o(r,i,a){if(0!==a){var o,l;if(c)o=t,l="drawArraysInstanced";else if(o=e.get("ANGLE_instanced_arrays"),l="drawArraysInstancedANGLE",null===o)return void console.error("THREE.WebGLBufferRenderer: using THREE.InstancedBufferGeometry but hardware does not support extension ANGLE_instanced_arrays.");o[l](s,r,i,a),n.update(i,s,a)}}var s,c=r.isWebGL2;this.setMode=i,this.render=a,this.renderInstances=o}function Y(t,e,n){function r(){if(void 0!==a)return a;var n=e.get("EXT_texture_filter_anisotropic");return a=null!==n?t.getParameter(n.MAX_TEXTURE_MAX_ANISOTROPY_EXT):0}function i(e){if("highp"===e){if(t.getShaderPrecisionFormat(35633,36338).precision>0&&t.getShaderPrecisionFormat(35632,36338).precision>0)return"highp";e="mediump"}return"mediump"===e&&t.getShaderPrecisionFormat(35633,36337).precision>0&&t.getShaderPrecisionFormat(35632,36337).precision>0?"mediump":"lowp"}var a,o="undefined"!=typeof WebGL2RenderingContext&&t instanceof WebGL2RenderingContext||"undefined"!=typeof WebGL2ComputeRenderingContext&&t instanceof WebGL2ComputeRenderingContext,s=void 0!==n.precision?n.precision:"highp",c=i(s);c!==s&&(console.warn("THREE.WebGLRenderer:",s,"not supported, using",c,"instead."),s=c);var l=!0===n.logarithmicDepthBuffer,u=t.getParameter(34930),h=t.getParameter(35660),d=t.getParameter(3379),p=t.getParameter(34076),f=t.getParameter(34921),m=t.getParameter(36347),v=t.getParameter(36348),g=t.getParameter(36349),y=h>0,x=o||!!e.get("OES_texture_float");return{isWebGL2:o,getMaxAnisotropy:r,getMaxPrecision:i,precision:s,logarithmicDepthBuffer:l,maxTextures:u,maxVertexTextures:h,maxTextureSize:d,maxCubemapSize:p,maxAttributes:f,maxVertexUniforms:m,maxVaryings:v,maxFragmentUniforms:g,vertexTextures:y,floatFragmentTextures:x,floatVertexTextures:y&&x,maxSamples:o?t.getParameter(36183):0}}function Z(t){function e(){u.value!==i&&(u.value=i,u.needsUpdate=a>0),r.numPlanes=a,r.numIntersection=0}function n(t,e,n,i){var a=null!==t?t.length:0,o=null;if(0!==a){if(o=u.value,!0!==i||null===o){var s=n+4*a,h=e.matrixWorldInverse;l.getNormalMatrix(h),(null===o||o.length0){var s=t.getRenderList(),c=t.getRenderTarget(),l=t.getRenderState(),u=new H(o.height/2);return u.fromEquirectangularTexture(t,n),a.set(n,u),t.setRenderTarget(c),t.setRenderList(s),t.setRenderState(l),n.addEventListener("dispose",r),e(u.texture,n.mapping)}return null}}return n}function r(t){var e=t.target;e.removeEventListener("dispose",r);var n=a.get(e);void 0!==n&&(a.delete(e),n.dispose())}function i(){a=new WeakMap}var a=new WeakMap;return{get:n,dispose:i}}function Q(t){var e={};return{has:function(n){if(void 0!==e[n])return null!==e[n];var r;switch(n){case"WEBGL_depth_texture":r=t.getExtension("WEBGL_depth_texture")||t.getExtension("MOZ_WEBGL_depth_texture")||t.getExtension("WEBKIT_WEBGL_depth_texture");break;case"EXT_texture_filter_anisotropic":r=t.getExtension("EXT_texture_filter_anisotropic")||t.getExtension("MOZ_EXT_texture_filter_anisotropic")||t.getExtension("WEBKIT_EXT_texture_filter_anisotropic");break;case"WEBGL_compressed_texture_s3tc":r=t.getExtension("WEBGL_compressed_texture_s3tc")||t.getExtension("MOZ_WEBGL_compressed_texture_s3tc")||t.getExtension("WEBKIT_WEBGL_compressed_texture_s3tc");break;case"WEBGL_compressed_texture_pvrtc":r=t.getExtension("WEBGL_compressed_texture_pvrtc")||t.getExtension("WEBKIT_WEBGL_compressed_texture_pvrtc");break;default:r=t.getExtension(n)}return e[n]=r,null!==r},get:function(t){return this.has(t)||console.warn("THREE.WebGLRenderer: "+t+" extension not supported."),e[t]}}}function K(t,e,n,r){function i(t){var a=t.target,o=l.get(a);null!==o.index&&e.remove(o.index);for(var s in o.attributes)e.remove(o.attributes[s]);a.removeEventListener("dispose",i),l.delete(a);var c=u.get(o);c&&(e.remove(c),u.delete(o)),r.releaseStatesOfGeometry(o),!0===a.isInstancedBufferGeometry&&delete a._maxInstanceCount,n.memory.geometries--}function a(t,e){var r=l.get(e);return r||(e.addEventListener("dispose",i),e.isBufferGeometry?r=e:e.isGeometry&&(void 0===e._bufferGeometry&&(e._bufferGeometry=(new C).setFromObject(t)),r=e._bufferGeometry),l.set(e,r),n.memory.geometries++,r)}function o(t){var n=t.attributes;for(var r in n)e.update(n[r],34962);var i=t.morphAttributes;for(var a in i)for(var o=i[a],s=0,c=o.length;s65535?S:w)(n,1);x.version=a;var b=u.get(t);b&&e.remove(b),u.set(t,x)}function c(t){var e=u.get(t);if(e){var n=t.index;null!==n&&e.version0)return t;var i=e*n,a=ku[i];if(void 0===a&&(a=new Float32Array(i),ku[i]=a),0!==e){r.toArray(a,0);for(var o=1,s=0;o!==e;++o)s+=n,t[o].toArray(a,s)}return a}function ct(t,e){if(t.length!==e.length)return!1;for(var n=0,r=t.length;n");return se(n)}function le(t){return t.replace(Qu,he).replace(Ju,ue)}function ue(t,e,n,r){return console.warn("WebGLProgram: #pragma unroll_loop shader syntax is deprecated. Please use #pragma unroll_loop_start syntax instead."),he(t,e,n,r)}function he(t,e,n,r){for(var i="",a=parseInt(e);a0?t.gammaFactor:1,m=n.isWebGL2?"":ee(n),v=ne(s),g=o.createProgram(),y=n.glslVersion?"#version "+n.glslVersion+"\n":"";n.isRawShaderMaterial?(i=[v].filter(ie).join("\n"),i.length>0&&(i+="\n"),a=[m,v].filter(ie).join("\n"),a.length>0&&(a+="\n")):(i=[de(n),"#define SHADER_NAME "+n.shaderName,v,n.instancing?"#define USE_INSTANCING":"",n.instancingColor?"#define USE_INSTANCING_COLOR":"",n.supportsVertexTextures?"#define VERTEX_TEXTURES":"","#define GAMMA_FACTOR "+f,"#define MAX_BONES "+n.maxBones,n.useFog&&n.fog?"#define USE_FOG":"",n.useFog&&n.fogExp2?"#define FOG_EXP2":"",n.map?"#define USE_MAP":"",n.envMap?"#define USE_ENVMAP":"",n.envMap?"#define "+d:"",n.lightMap?"#define USE_LIGHTMAP":"",n.aoMap?"#define USE_AOMAP":"",n.emissiveMap?"#define USE_EMISSIVEMAP":"",n.bumpMap?"#define USE_BUMPMAP":"",n.normalMap?"#define USE_NORMALMAP":"",n.normalMap&&n.objectSpaceNormalMap?"#define OBJECTSPACE_NORMALMAP":"",n.normalMap&&n.tangentSpaceNormalMap?"#define TANGENTSPACE_NORMALMAP":"",n.clearcoatMap?"#define USE_CLEARCOATMAP":"",n.clearcoatRoughnessMap?"#define USE_CLEARCOAT_ROUGHNESSMAP":"",n.clearcoatNormalMap?"#define USE_CLEARCOAT_NORMALMAP":"",n.displacementMap&&n.supportsVertexTextures?"#define USE_DISPLACEMENTMAP":"",n.specularMap?"#define USE_SPECULARMAP":"",n.roughnessMap?"#define USE_ROUGHNESSMAP":"",n.metalnessMap?"#define USE_METALNESSMAP":"",n.alphaMap?"#define USE_ALPHAMAP":"",n.transmissionMap?"#define USE_TRANSMISSIONMAP":"",n.vertexTangents?"#define USE_TANGENT":"",n.vertexColors?"#define USE_COLOR":"",n.vertexUvs?"#define USE_UV":"",n.uvsVertexOnly?"#define UVS_VERTEX_ONLY":"",n.flatShading?"#define FLAT_SHADED":"",n.skinning?"#define USE_SKINNING":"",n.useVertexTexture?"#define BONE_TEXTURE":"",n.morphTargets?"#define USE_MORPHTARGETS":"",n.morphNormals&&!1===n.flatShading?"#define USE_MORPHNORMALS":"",n.doubleSided?"#define DOUBLE_SIDED":"",n.flipSided?"#define FLIP_SIDED":"",n.shadowMapEnabled?"#define USE_SHADOWMAP":"",n.shadowMapEnabled?"#define "+u:"",n.sizeAttenuation?"#define USE_SIZEATTENUATION":"",n.logarithmicDepthBuffer?"#define USE_LOGDEPTHBUF":"",n.logarithmicDepthBuffer&&n.rendererExtensionFragDepth?"#define USE_LOGDEPTHBUF_EXT":"","uniform mat4 modelMatrix;","uniform mat4 modelViewMatrix;","uniform mat4 projectionMatrix;","uniform mat4 viewMatrix;","uniform mat3 normalMatrix;","uniform vec3 cameraPosition;","uniform bool isOrthographic;","#ifdef USE_INSTANCING","\tattribute mat4 instanceMatrix;","#endif","#ifdef USE_INSTANCING_COLOR","\tattribute vec3 instanceColor;","#endif","attribute vec3 position;","attribute vec3 normal;","attribute vec2 uv;","#ifdef USE_TANGENT","\tattribute vec4 tangent;","#endif","#ifdef USE_COLOR","\tattribute vec3 color;","#endif","#ifdef USE_MORPHTARGETS","\tattribute vec3 morphTarget0;","\tattribute vec3 morphTarget1;","\tattribute vec3 morphTarget2;","\tattribute vec3 morphTarget3;","\t#ifdef USE_MORPHNORMALS","\t\tattribute vec3 morphNormal0;","\t\tattribute vec3 morphNormal1;","\t\tattribute vec3 morphNormal2;","\t\tattribute vec3 morphNormal3;","\t#else","\t\tattribute vec3 morphTarget4;","\t\tattribute vec3 morphTarget5;","\t\tattribute vec3 morphTarget6;","\t\tattribute vec3 morphTarget7;","\t#endif","#endif","#ifdef USE_SKINNING","\tattribute vec4 skinIndex;","\tattribute vec4 skinWeight;","#endif","\n"].filter(ie).join("\n"),a=[m,de(n),"#define SHADER_NAME "+n.shaderName,v,n.alphaTest?"#define ALPHATEST "+n.alphaTest+(n.alphaTest%1?"":".0"):"","#define GAMMA_FACTOR "+f,n.useFog&&n.fog?"#define USE_FOG":"",n.useFog&&n.fogExp2?"#define FOG_EXP2":"",n.map?"#define USE_MAP":"",n.matcap?"#define USE_MATCAP":"",n.envMap?"#define USE_ENVMAP":"",n.envMap?"#define "+h:"",n.envMap?"#define "+d:"",n.envMap?"#define "+p:"",n.lightMap?"#define USE_LIGHTMAP":"",n.aoMap?"#define USE_AOMAP":"",n.emissiveMap?"#define USE_EMISSIVEMAP":"",n.bumpMap?"#define USE_BUMPMAP":"",n.normalMap?"#define USE_NORMALMAP":"",n.normalMap&&n.objectSpaceNormalMap?"#define OBJECTSPACE_NORMALMAP":"",n.normalMap&&n.tangentSpaceNormalMap?"#define TANGENTSPACE_NORMALMAP":"",n.clearcoatMap?"#define USE_CLEARCOATMAP":"",n.clearcoatRoughnessMap?"#define USE_CLEARCOAT_ROUGHNESSMAP":"",n.clearcoatNormalMap?"#define USE_CLEARCOAT_NORMALMAP":"",n.specularMap?"#define USE_SPECULARMAP":"",n.roughnessMap?"#define USE_ROUGHNESSMAP":"",n.metalnessMap?"#define USE_METALNESSMAP":"",n.alphaMap?"#define USE_ALPHAMAP":"",n.sheen?"#define USE_SHEEN":"",n.transmissionMap?"#define USE_TRANSMISSIONMAP":"",n.vertexTangents?"#define USE_TANGENT":"",n.vertexColors||n.instancingColor?"#define USE_COLOR":"",n.vertexUvs?"#define USE_UV":"",n.uvsVertexOnly?"#define UVS_VERTEX_ONLY":"",n.gradientMap?"#define USE_GRADIENTMAP":"",n.flatShading?"#define FLAT_SHADED":"",n.doubleSided?"#define DOUBLE_SIDED":"",n.flipSided?"#define FLIP_SIDED":"",n.shadowMapEnabled?"#define USE_SHADOWMAP":"",n.shadowMapEnabled?"#define "+u:"",n.premultipliedAlpha?"#define PREMULTIPLIED_ALPHA":"",n.physicallyCorrectLights?"#define PHYSICALLY_CORRECT_LIGHTS":"",n.logarithmicDepthBuffer?"#define USE_LOGDEPTHBUF":"",n.logarithmicDepthBuffer&&n.rendererExtensionFragDepth?"#define USE_LOGDEPTHBUF_EXT":"",(n.extensionShaderTextureLOD||n.envMap)&&n.rendererExtensionShaderTextureLod?"#define TEXTURE_LOD_EXT":"","uniform mat4 viewMatrix;","uniform vec3 cameraPosition;","uniform bool isOrthographic;",n.toneMapping!==wo?"#define TONE_MAPPING":"",n.toneMapping!==wo?Nu.tonemapping_pars_fragment:"",n.toneMapping!==wo?te("toneMapping",n.toneMapping):"",n.dithering?"#define DITHERING":"",Nu.encodings_pars_fragment,n.map?Kt("mapTexelToLinear",n.mapEncoding):"",n.matcap?Kt("matcapTexelToLinear",n.matcapEncoding):"",n.envMap?Kt("envMapTexelToLinear",n.envMapEncoding):"",n.emissiveMap?Kt("emissiveMapTexelToLinear",n.emissiveMapEncoding):"",n.lightMap?Kt("lightMapTexelToLinear",n.lightMapEncoding):"",$t("linearToOutputTexel",n.outputEncoding),n.depthPacking?"#define DEPTH_PACKING "+n.depthPacking:"","\n"].filter(ie).join("\n")),c=se(c),c=ae(c,n),c=oe(c,n),l=se(l),l=ae(l,n),l=oe(l,n),c=le(c),l=le(l),n.isWebGL2&&!0!==n.isRawShaderMaterial&&(y="#version 300 es\n",i=["#define attribute in","#define varying out","#define texture2D texture"].join("\n")+"\n"+i,a=["#define varying in",n.glslVersion===bc?"":"out highp vec4 pc_fragColor;",n.glslVersion===bc?"":"#define gl_FragColor pc_fragColor","#define gl_FragDepthEXT gl_FragDepth","#define texture2D texture","#define textureCube texture","#define texture2DProj textureProj","#define texture2DLodEXT textureLod","#define texture2DProjLodEXT textureProjLod","#define textureCubeLodEXT textureLod","#define texture2DGradEXT textureGrad","#define texture2DProjGradEXT textureProjGrad","#define textureCubeGradEXT textureGrad"].join("\n")+"\n"+a);var x=y+i+c,b=y+a+l,_=Yt(o,35633,x),w=Yt(o,35632,b);if(o.attachShader(g,_),o.attachShader(g,w),void 0!==n.index0AttributeName?o.bindAttribLocation(g,0,n.index0AttributeName):!0===n.morphTargets&&o.bindAttribLocation(g,0,"position"),o.linkProgram(g),t.debug.checkShaderErrors){var M=o.getProgramInfoLog(g).trim(),S=o.getShaderInfoLog(_).trim(),T=o.getShaderInfoLog(w).trim(),E=!0,A=!0;if(!1===o.getProgramParameter(g,35714)){E=!1;var L=Qt(o,_,"vertex"),R=Qt(o,w,"fragment");console.error("THREE.WebGLProgram: shader error: ",o.getError(),"35715",o.getProgramParameter(g,35715),"gl.getProgramInfoLog",M,L,R)}else""!==M?console.warn("THREE.WebGLProgram: gl.getProgramInfoLog()",M):""!==S&&""!==T||(A=!1);A&&(this.diagnostics={runnable:E,programLog:M,vertexShader:{log:S,prefix:i},fragmentShader:{log:T,prefix:a}})}o.deleteShader(_),o.deleteShader(w);var C;this.getUniforms=function(){return void 0===C&&(C=new Xt(o,g)),C};var P;return this.getAttributes=function(){return void 0===P&&(P=re(o,g)),P},this.destroy=function(){r.releaseStatesOfProgram(this),o.deleteProgram(g),this.program=void 0},this.name=n.shaderName,this.id=Yu++,this.cacheKey=e,this.usedTimes=1,this.program=g,this.vertexShader=_,this.fragmentShader=w,this}function ye(t,e,n,r,i,a){function o(t){var e=t.skeleton,n=e.bones;if(v)return 1024;var r=g,i=Math.floor((r-20)/4),a=Math.min(i,n.length);return a0,maxBones:w,useVertexTexture:v,morphTargets:i.morphTargets,morphNormals:i.morphNormals,maxMorphTargets:t.maxMorphTargets,maxMorphNormals:t.maxMorphNormals,numDirLights:c.directional.length,numPointLights:c.point.length,numSpotLights:c.spot.length,numRectAreaLights:c.rectArea.length,numHemiLights:c.hemi.length,numDirLightShadows:c.directionalShadowMap.length,numPointLightShadows:c.pointShadowMap.length,numSpotLightShadows:c.spotShadowMap.length,numClippingPlanes:a.numPlanes,numClipIntersection:a.numIntersection,dithering:i.dithering,shadowMapEnabled:t.shadowMap.enabled&&l.length>0,shadowMapType:t.shadowMap.type,toneMapping:i.toneMapped?t.toneMapping:wo,physicallyCorrectLights:t.physicallyCorrectLights,premultipliedAlpha:i.premultipliedAlpha,alphaTest:i.alphaTest,doubleSided:i.side===Ha,flipSided:i.side===Ua,depthPacking:void 0!==i.depthPacking&&i.depthPacking,index0AttributeName:i.index0AttributeName,extensionDerivatives:i.extensions&&i.extensions.derivatives,extensionFragDepth:i.extensions&&i.extensions.fragDepth,extensionDrawBuffers:i.extensions&&i.extensions.drawBuffers,extensionShaderTextureLOD:i.extensions&&i.extensions.shaderTextureLOD,rendererExtensionFragDepth:f||n.has("EXT_frag_depth"),rendererExtensionDrawBuffers:f||n.has("WEBGL_draw_buffers"),rendererExtensionShaderTextureLod:f||n.has("EXT_shader_texture_lod"),customProgramCacheKey:i.customProgramCacheKey()}}function l(e){var n=[];if(e.shaderID?n.push(e.shaderID):(n.push(e.fragmentShader),n.push(e.vertexShader)),void 0!==e.defines)for(var r in e.defines)n.push(r),n.push(e.defines[r]);if(!1===e.isRawShaderMaterial){for(var i=0;i<_.length;i++)n.push(e[_[i]]);n.push(t.outputEncoding),n.push(t.gammaFactor)}return n.push(e.customProgramCacheKey),n.join()}function u(t){var e,n=b[t.type];if(n){var r=zu[n];e=Eu.clone(r.uniforms)}else e=t.uniforms;return e}function h(e,n){for(var r,a=0,o=p.length;a1&&l.sort(t||be),u.length>1&&u.sort(e||_e)}function o(){for(var t=c,e=s.length;t0&&(e.isWebGL2?(a.rectAreaLTC1=Bu.LTC_FLOAT_1,a.rectAreaLTC2=Bu.LTC_FLOAT_2):!0===t.has("OES_texture_float_linear")?(a.rectAreaLTC1=Bu.LTC_FLOAT_1,a.rectAreaLTC2=Bu.LTC_FLOAT_2):!0===t.has("OES_texture_half_float_linear")?(a.rectAreaLTC1=Bu.LTC_HALF_1,a.rectAreaLTC2=Bu.LTC_HALF_2):console.error("THREE.WebGLRenderer: Unable to use RectAreaLight. Missing WebGL extensions.")),a.ambient[0]=h,a.ambient[1]=d,a.ambient[2]=p;var V=a.hash;V.directionalLength===m&&V.pointLength===v&&V.spotLength===g&&V.rectAreaLength===y&&V.hemiLength===x&&V.numDirectionalShadows===b&&V.numPointShadows===_&&V.numSpotShadows===w||(a.directional.length=m,a.spot.length=g,a.rectArea.length=y,a.point.length=v,a.hemi.length=x,a.directionalShadow.length=b,a.directionalShadowMap.length=b,a.pointShadow.length=_,a.pointShadowMap.length=_,a.spotShadow.length=w,a.spotShadowMap.length=w,a.directionalShadowMatrix.length=b,a.pointShadowMatrix.length=_,a.spotShadowMatrix.length=w,V.directionalLength=m,V.pointLength=v,V.spotLength=g,V.rectAreaLength=y,V.hemiLength=x,V.numDirectionalShadows=b,V.numPointShadows=_,V.numSpotShadows=w,a.version=Ku++)}for(var r=new Se,i=Te(),a={version:0,hash:{directionalLength:-1,pointLength:-1,spotLength:-1,rectAreaLength:-1,hemiLength:-1,numDirectionalShadows:-1,numPointShadows:-1,numSpotShadows:-1},ambient:[0,0,0],probe:[],directional:[],directionalShadow:[],directionalShadowMap:[],directionalShadowMatrix:[],spot:[],spotShadow:[],spotShadowMap:[],spotShadowMatrix:[],rectArea:[],rectAreaLTC1:null,rectAreaLTC2:null,point:[],pointShadow:[],pointShadowMap:[],pointShadowMatrix:[],hemi:[]},o=0;o<9;o++)a.probe.push(new Dc);var s=new Dc,c=new al,l=new al;return{setup:n,state:a}}function Le(t,e){function n(){s.length=0,c.length=0}function r(t){s.push(t)}function i(t){c.push(t)}function a(t){o.setup(s,c,t)}var o=new Ae(t,e),s=[],c=[];return{init:n,state:{lightsArray:s,shadowsArray:c,lights:o},setupLights:a,pushLight:r,pushShadow:i}}function Re(t,e){function n(n,r){var a;return!1===i.has(n)?(a=new Le(t,e),i.set(n,new WeakMap),i.get(n).set(r,a)):!1===i.get(n).has(r)?(a=new Le(t,e),i.get(n).set(r,a)):a=i.get(n).get(r),a}function r(){i=new WeakMap}var i=new WeakMap;return{get:n,dispose:r}}function Ce(t){m.call(this),this.type="MeshDepthMaterial",this.depthPacking=dc,this.skinning=!1,this.morphTargets=!1,this.map=null,this.alphaMap=null,this.displacementMap=null,this.displacementScale=1,this.displacementBias=0,this.wireframe=!1,this.wireframeLinewidth=1,this.fog=!1,this.setValues(t)}function Pe(t){m.call(this),this.type="MeshDistanceMaterial",this.referencePosition=new Dc,this.nearDistance=1,this.farDistance=1e3,this.skinning=!1,this.morphTargets=!1,this.map=null,this.alphaMap=null,this.displacementMap=null,this.displacementScale=1,this.displacementBias=0,this.fog=!1,this.setValues(t)}function De(t,e,n){function r(n,r){var i=e.update(_);y.uniforms.shadow_pass.value=n.map.texture,y.uniforms.resolution.value=n.mapSize,y.uniforms.radius.value=n.radius,t.setRenderTarget(n.mapPass),t.clear(),t.renderBufferDirect(r,null,i,y,_,null),x.uniforms.shadow_pass.value=n.mapPass.texture,x.uniforms.resolution.value=n.mapSize,x.uniforms.radius.value=n.radius,t.setRenderTarget(n.map),t.clear(),t.renderBufferDirect(r,null,i,x,_,null)}function i(t,e,n){var r=t<<0|e<<1|n<<2,i=p[r];return void 0===i&&(i=new Ce({depthPacking:pc,morphTargets:t,skinning:e}),p[r]=i),i}function a(t,e,n){var r=t<<0|e<<1|n<<2,i=f[r];return void 0===i&&(i=new Pe({morphTargets:t,skinning:e}),f[r]=i),i}function o(e,n,r,o,s,c,l){var u=null,h=i,d=e.customDepthMaterial;if(!0===o.isPointLight&&(h=a,d=e.customDistanceMaterial),void 0===d){var p=!1;!0===r.morphTargets&&(p=n.morphAttributes&&n.morphAttributes.position&&n.morphAttributes.position.length>0);var f=!1;!0===e.isSkinnedMesh&&(!0===r.skinning?f=!0:console.warn("THREE.WebGLShadowMap: THREE.SkinnedMesh with material.skinning set to false:",e));u=h(p,f,!0===e.isInstancedMesh)}else u=d;if(t.localClippingEnabled&&!0===r.clipShadows&&0!==r.clippingPlanes.length){var g=u.uuid,y=r.uuid,x=m[g];void 0===x&&(x={},m[g]=x);var b=x[y];void 0===b&&(b=u.clone(),x[y]=b),u=b}return u.visible=r.visible,u.wireframe=r.wireframe,u.side=l===Fa?null!==r.shadowSide?r.shadowSide:r.side:null!==r.shadowSide?r.shadowSide:v[r.side],u.clipShadows=r.clipShadows,u.clippingPlanes=r.clippingPlanes,u.clipIntersection=r.clipIntersection,u.wireframeLinewidth=r.wireframeLinewidth,u.linewidth=r.linewidth,!0===o.isPointLight&&!0===u.isMeshDistanceMaterial&&(u.referencePosition.setFromMatrixPosition(o.matrixWorld),u.nearDistance=s,u.farDistance=c),u}function s(n,r,i,a,c){if(!1!==n.visible){if(n.layers.test(r.layers)&&(n.isMesh||n.isLine||n.isPoints)&&(n.castShadow||n.receiveShadow&&c===Fa)&&(!n.frustumCulled||l.intersectsObject(n))){n.modelViewMatrix.multiplyMatrices(i.matrixWorldInverse,n.matrixWorld);var u=e.update(n),h=n.material;if(Array.isArray(h))for(var d=u.groups,p=0,f=d.length;pn||u.y>n)&&(u.x>n&&(h.x=Math.floor(n/b.x),u.x=h.x*b.x,x.mapSize.x=h.x),u.y>n&&(h.y=Math.floor(n/b.y),u.y=h.y*b.y,x.mapSize.y=h.y)),null===x.map&&!x.isPointLightShadow&&this.type===Fa){var _={minFilter:Uo,magFilter:Uo,format:rs};x.map=new c(u.x,u.y,_),x.map.texture.name=y.name+".shadowMap",x.mapPass=new c(u.x,u.y,_),x.camera.updateProjectionMatrix()}if(null===x.map){var M={minFilter:zo,magFilter:zo,format:rs};x.map=new c(u.x,u.y,M),x.map.texture.name=y.name+".shadowMap",x.camera.updateProjectionMatrix()}t.setRenderTarget(x.map),t.clear();for(var S=x.getViewportCount(),T=0;T=1):-1!==Q.indexOf("OpenGL ES")&&(J=parseFloat(/^OpenGL\ ES\ ([0-9])/.exec(Q)[1]),Z=J>=2);var K=null,$={},tt=new Cc,et=new Cc,nt={};nt[3553]=o(3553,3553,1),nt[34067]=o(34067,34069,6),R.setClear(0,0,0,1),C.setClear(1),P.setClear(0),s(2929),C.setFunc(fo),d(!1),p(Ia),s(2884),u(ka);var rt=(E={},E[Ya]=32774,E[Za]=32778,E[Ja]=32779,E);if(L)rt[Qa]=32775,rt[Ka]=32776;else{var it=e.get("EXT_blend_minmax");null!==it&&(rt[Qa]=it.MIN_EXT,rt[Ka]=it.MAX_EXT)}var at=(A={},A[$a]=0,A[to]=1,A[eo]=768,A[ro]=770,A[lo]=776,A[so]=774,A[ao]=772,A[no]=769,A[io]=771,A[co]=775,A[oo]=773,A);return{buffers:{color:R,depth:C,stencil:P},enable:s,disable:c,useProgram:l,setBlending:u,setMaterial:h,setFlipSided:d,setCullFace:p,setLineWidth:f,setPolygonOffset:m,setScissorTest:v,activeTexture:g,bindTexture:y,unbindTexture:x,compressedTexImage2D:b,texImage2D:_,texImage3D:w,scissor:M,viewport:S,reset:T}}function Ie(t,e,n,r,i,a,o){function s(t,e){return Z?new OffscreenCanvas(t,e):document.createElementNS("http://www.w3.org/1999/xhtml","canvas")}function c(t,e,n,r){var i=1;if((t.width>r||t.height>r)&&(i=r/Math.max(t.width,t.height)),i<1||!0===e){if("undefined"!=typeof HTMLImageElement&&t instanceof HTMLImageElement||"undefined"!=typeof HTMLCanvasElement&&t instanceof HTMLCanvasElement||"undefined"!=typeof ImageBitmap&&t instanceof ImageBitmap){var a=e?Tc.floorPowerOfTwo:Math.floor,o=a(i*t.width),c=a(i*t.height);void 0===k&&(k=s(o,c));var l=n?s(o,c):k;l.width=o,l.height=c;return l.getContext("2d").drawImage(t,0,0,o,c),console.warn("THREE.WebGLRenderer: Texture has been resized from ("+t.width+"x"+t.height+") to ("+o+"x"+c+")."),l}return"data"in t&&console.warn("THREE.WebGLRenderer: Image in DataTexture is too big ("+t.width+"x"+t.height+")."),t}return t}function l(t){return Tc.isPowerOfTwo(t.width)&&Tc.isPowerOfTwo(t.height)}function u(t){return!V&&(t.wrapS!==No||t.wrapT!==No||t.minFilter!==zo&&t.minFilter!==Uo)}function h(t,e){return t.generateMipmaps&&e&&t.minFilter!==zo&&t.minFilter!==Uo}function d(e,n,i,a){t.generateMipmap(e),r.get(n).__maxMipLevel=Math.log(Math.max(i,a))*Math.LOG2E}function p(n,r,i){if(!1===V)return r;if(null!==n){if(void 0!==t[n])return t[n];console.warn("THREE.WebGLRenderer: Attempt to use non-existing WebGL internal format '"+n+"'")}var a=r;return 6403===r&&(5126===i&&(a=33326),5131===i&&(a=33325),5121===i&&(a=33321)),6407===r&&(5126===i&&(a=34837),5131===i&&(a=34843),5121===i&&(a=32849)),6408===r&&(5126===i&&(a=34836),5131===i&&(a=34842),5121===i&&(a=32856)),33325!==a&&33326!==a&&34842!==a&&34836!==a||e.get("EXT_color_buffer_float"),a}function f(t){return t===zo||t===Fo||t===Go?9728:9729}function m(t){var e=t.target;e.removeEventListener("dispose",m),g(e),e.isVideoTexture&&Y.delete(e),o.memory.textures--}function v(t){var e=t.target;e.removeEventListener("dispose",v),y(e),o.memory.textures--}function g(e){var n=r.get(e);void 0!==n.__webglInit&&(t.deleteTexture(n.__webglTexture),r.remove(e))}function y(e){var n=r.get(e),i=r.get(e.texture);if(e){if(void 0!==i.__webglTexture&&t.deleteTexture(i.__webglTexture),e.depthTexture&&e.depthTexture.dispose(),e.isWebGLCubeRenderTarget)for(var a=0;a<6;a++)t.deleteFramebuffer(n.__webglFramebuffer[a]),n.__webglDepthbuffer&&t.deleteRenderbuffer(n.__webglDepthbuffer[a]);else t.deleteFramebuffer(n.__webglFramebuffer),n.__webglDepthbuffer&&t.deleteRenderbuffer(n.__webglDepthbuffer),n.__webglMultisampledFramebuffer&&t.deleteFramebuffer(n.__webglMultisampledFramebuffer),n.__webglColorRenderbuffer&&t.deleteRenderbuffer(n.__webglColorRenderbuffer),n.__webglDepthRenderbuffer&&t.deleteRenderbuffer(n.__webglDepthRenderbuffer);r.remove(e.texture),r.remove(e)}}function x(){J=0}function b(){var t=J;return t>=W&&console.warn("THREE.WebGLTextures: Trying to use "+t+" texture units while this GPU supports only "+W),J+=1,t}function _(t,e){var i=r.get(t);if(t.isVideoTexture&&z(t),t.version>0&&i.__version!==t.version){var a=t.image;if(void 0===a)console.warn("THREE.WebGLRenderer: Texture marked for update but image is undefined");else{if(!1!==a.complete)return void A(i,t,e);console.warn("THREE.WebGLRenderer: Texture marked for update but image is incomplete")}}n.activeTexture(33984+e),n.bindTexture(3553,i.__webglTexture)}function w(t,e){var i=r.get(t);if(t.version>0&&i.__version!==t.version)return void A(i,t,e);n.activeTexture(33984+e),n.bindTexture(35866,i.__webglTexture)}function M(t,e){var i=r.get(t);if(t.version>0&&i.__version!==t.version)return void A(i,t,e);n.activeTexture(33984+e),n.bindTexture(32879,i.__webglTexture)}function S(t,e){var i=r.get(t);if(t.version>0&&i.__version!==t.version)return void L(i,t,e);n.activeTexture(33984+e),n.bindTexture(34067,i.__webglTexture)}function T(n,a,o){o?(t.texParameteri(n,10242,Q[a.wrapS]),t.texParameteri(n,10243,Q[a.wrapT]),32879!==n&&35866!==n||t.texParameteri(n,32882,Q[a.wrapR]),t.texParameteri(n,10240,K[a.magFilter]),t.texParameteri(n,10241,K[a.minFilter])):(t.texParameteri(n,10242,33071),t.texParameteri(n,10243,33071),32879!==n&&35866!==n||t.texParameteri(n,32882,33071),a.wrapS===No&&a.wrapT===No||console.warn("THREE.WebGLRenderer: Texture is not power of two. Texture.wrapS and Texture.wrapT should be set to THREE.ClampToEdgeWrapping."),t.texParameteri(n,10240,f(a.magFilter)),t.texParameteri(n,10241,f(a.minFilter)),a.minFilter!==zo&&a.minFilter!==Uo&&console.warn("THREE.WebGLRenderer: Texture is not power of two. Texture.minFilter should be set to THREE.NearestFilter or THREE.LinearFilter."));var s=e.get("EXT_texture_filter_anisotropic");if(s){if(a.type===Zo&&null===e.get("OES_texture_float_linear"))return;if(a.type===Jo&&null===(V||e.get("OES_texture_half_float_linear")))return;(a.anisotropy>1||r.get(a).__currentAnisotropy)&&(t.texParameterf(n,s.TEXTURE_MAX_ANISOTROPY_EXT,Math.min(a.anisotropy,i.getMaxAnisotropy())),r.get(a).__currentAnisotropy=a.anisotropy)}}function E(e,n){void 0===e.__webglInit&&(e.__webglInit=!0,n.addEventListener("dispose",m),e.__webglTexture=t.createTexture(),o.memory.textures++)}function A(e,r,i){var o=3553;r.isDataTexture2DArray&&(o=35866),r.isDataTexture3D&&(o=32879),E(e,r),n.activeTexture(33984+i),n.bindTexture(o,e.__webglTexture),t.pixelStorei(37440,r.flipY),t.pixelStorei(37441,r.premultiplyAlpha),t.pixelStorei(3317,r.unpackAlignment);var s=u(r)&&!1===l(r.image),f=c(r.image,s,!1,q),m=l(f)||V,v=a.convert(r.format),g=a.convert(r.type),y=p(r.internalFormat,v,g);T(o,r,m);var x,b=r.mipmaps;if(r.isDepthTexture)y=6402,V?y=r.type===Zo?36012:r.type===Yo?33190:r.type===ts?35056:33189:r.type===Zo&&console.error("WebGLRenderer: Floating point depth texture requires WebGL2."),r.format===ss&&6402===y&&r.type!==qo&&r.type!==Yo&&(console.warn("THREE.WebGLRenderer: Use UnsignedShortType or UnsignedIntType for DepthFormat DepthTexture."),r.type=qo,g=a.convert(r.type)),r.format===cs&&6402===y&&(y=34041,r.type!==ts&&(console.warn("THREE.WebGLRenderer: Use UnsignedInt248Type for DepthStencilFormat DepthTexture."),r.type=ts,g=a.convert(r.type))),n.texImage2D(3553,0,y,f.width,f.height,0,v,g,null);else if(r.isDataTexture)if(b.length>0&&m){for(var _=0,w=b.length;_0&&m){for(var A=0,L=b.length;A0&&d(a,t,e),o.length>0&&d(o,t,e),!0===t.isScene&&t.onAfterRender(C,t,e),null!==N&&(Et.updateRenderTargetMipmap(N),Et.updateMultisampleRenderTarget(N)),Mt.buffers.depth.setTest(!0),Mt.buffers.depth.setMask(!0),Mt.buffers.color.setMask(!0),Mt.setPolygonOffset(!1),kt.enabled&&kt.submitFrame&&kt.submitFrame(),L=null,R=null}},this.setTexture2D=function(){var t=!1;return function(e,n){e&&e.isWebGLRenderTarget&&(t||(console.warn("THREE.WebGLRenderer.setTexture2D: don't use render targets as textures. Use their .texture property instead."),t=!0),e=e.texture),Et.setTexture2D(e,n)}}(),this.setFramebuffer=function(t){D!==t&&null===N&&yt.bindFramebuffer(36160,t),D=t},this.getActiveCubeFace=function(){return O},this.getActiveMipmapLevel=function(){return I},this.getRenderList=function(){return L},this.setRenderList=function(t){L=t},this.getRenderState=function(){return R},this.setRenderState=function(t){R=t},this.getRenderTarget=function(){return N},this.setRenderTarget=function(t,e,n){void 0===e&&(e=0),void 0===n&&(n=0),N=t,O=e,I=n,t&&void 0===Tt.get(t).__webglFramebuffer&&Et.setupRenderTarget(t);var r=D,i=!1;if(t){var a=Tt.get(t).__webglFramebuffer;t.isWebGLCubeRenderTarget?(r=a[e],i=!0):r=t.isWebGLMultisampleRenderTarget?Tt.get(t).__webglMultisampledFramebuffer:a,U.copy(t.viewport),H.copy(t.scissor),et=t.scissorTest}else U.copy(lt).multiplyScalar(ot).floor(),H.copy(ut).multiplyScalar(ot).floor(),et=ht;if(B!==r&&(yt.bindFramebuffer(36160,r),B=r),Mt.viewport(U),Mt.scissor(H),Mt.setScissorTest(et),i){var o=Tt.get(t.texture);yt.framebufferTexture2D(36160,36064,34069+e,o.__webglTexture,n)}},this.readRenderTargetPixels=function(t,e,n,r,i,a,o){if(!t||!t.isWebGLRenderTarget)return void console.error("THREE.WebGLRenderer.readRenderTargetPixels: renderTarget is not THREE.WebGLRenderTarget.");var s=Tt.get(t).__webglFramebuffer;if(t.isWebGLCubeRenderTarget&&void 0!==o&&(s=s[o]),s){var c=!1;s!==B&&(yt.bindFramebuffer(36160,s),c=!0);try{var l=t.texture,u=l.format,h=l.type;if(u!==rs&&Ut.convert(u)!==yt.getParameter(35739))return void console.error("THREE.WebGLRenderer.readRenderTargetPixels: renderTarget is not in RGBA or implementation defined format.");if(!(h===Vo||Ut.convert(h)===yt.getParameter(35738)||h===Zo&&(wt.isWebGL2||_t.get("OES_texture_float")||_t.get("WEBGL_color_buffer_float"))||h===Jo&&(wt.isWebGL2?_t.get("EXT_color_buffer_float"):_t.get("EXT_color_buffer_half_float"))))return void console.error("THREE.WebGLRenderer.readRenderTargetPixels: renderTarget is not in UnsignedByteType or implementation defined type.");36053===yt.checkFramebufferStatus(36160)?e>=0&&e<=t.width-r&&n>=0&&n<=t.height-i&&yt.readPixels(e,n,r,i,Ut.convert(u),Ut.convert(h),a):console.error("THREE.WebGLRenderer.readRenderTargetPixels: readPixels from renderTarget failed. Framebuffer not complete.")}finally{c&&yt.bindFramebuffer(36160,B)}}},this.copyFramebufferToTexture=function(t,e,n){void 0===n&&(n=0);var r=Math.pow(2,-n),i=Math.floor(e.image.width*r),a=Math.floor(e.image.height*r),o=Ut.convert(e.format);Et.setTexture2D(e,0),yt.copyTexImage2D(3553,n,o,t.x,t.y,i,a,0),Mt.unbindTexture()},this.copyTextureToTexture=function(t,e,n,r){void 0===r&&(r=0);var i=e.image.width,a=e.image.height,o=Ut.convert(n.format),s=Ut.convert(n.type);Et.setTexture2D(n,0),yt.pixelStorei(37440,n.flipY),yt.pixelStorei(37441,n.premultiplyAlpha),yt.pixelStorei(3317,n.unpackAlignment),e.isDataTexture?yt.texSubImage2D(3553,r,t.x,t.y,i,a,o,s,e.image.data):e.isCompressedTexture?yt.compressedTexSubImage2D(3553,r,t.x,t.y,e.mipmaps[0].width,e.mipmaps[0].height,o,e.mipmaps[0].data):yt.texSubImage2D(3553,r,t.x,t.y,o,s,e.image),0===r&&n.generateMipmaps&&yt.generateMipmap(3553),Mt.unbindTexture()},this.initTexture=function(t){Et.setTexture2D(t,0),Mt.unbindTexture()},"undefined"!=typeof __THREE_DEVTOOLS__&&__THREE_DEVTOOLS__.dispatchEvent(new CustomEvent("observe",{detail:this}))}function je(t){We.call(this,t)}function qe(t,e){this.array=t,this.stride=e,this.count=void 0!==t?t.length/e:0,this.usage=yc,this.updateRange={offset:0,count:-1},this.version=0,this.uuid=Tc.generateUUID()}function Xe(t,e,n,r){this.name="",this.data=t,this.itemSize=e,this.offset=n,this.normalized=!0===r}function Ye(t){m.call(this),this.type="SpriteMaterial",this.color=new Yl(16777215),this.map=null,this.alphaMap=null,this.rotation=0,this.sizeAttenuation=!0,this.transparent=!0,this.setValues(t)}function Ze(t){if(h.call(this),this.type="Sprite",void 0===sh){sh=new C;var e=new Float32Array([-.5,-.5,0,0,0,.5,-.5,0,1,0,.5,.5,0,1,1,-.5,.5,0,0,1]),n=new qe(e,5);sh.setIndex([0,1,2,0,2,3]),sh.setAttribute("position",new Xe(n,3,0,!1)),sh.setAttribute("uv",new Xe(n,2,3,!1))}this.geometry=sh,this.material=void 0!==t?t:new Ye,this.center=new Ec(.5,.5)}function Je(t,e,n,r,i,a){hh.subVectors(t,n).addScalar(.5).multiply(r),void 0!==i?(dh.x=a*hh.x-i*hh.y,dh.y=i*hh.x+a*hh.y):dh.copy(hh),t.copy(e),t.x+=dh.x,t.y+=dh.y,t.applyMatrix4(ph)}function Qe(){h.call(this),this._currentLevel=0,this.type="LOD",Object.defineProperties(this,{levels:{enumerable:!0,value:[]}}),this.autoUpdate=!0}function Ke(t,e){t&&t.isGeometry&&console.error("THREE.SkinnedMesh no longer supports THREE.Geometry. Use THREE.BufferGeometry instead."),P.call(this,t,e),this.type="SkinnedMesh",this.bindMode="attached",this.bindMatrix=new al,this.bindMatrixInverse=new al}function $e(){h.call(this),this.type="Bone"}function tn(t,e){void 0===t&&(t=[]),void 0===e&&(e=[]),this.uuid=Tc.generateUUID(),this.bones=t.slice(0),this.boneInverses=e,this.boneMatrices=null,this.boneTexture=null,this.boneTextureSize=0,this.frame=-1,this.init()}function en(t,e,n){P.call(this,t,e),this.instanceMatrix=new g(new Float32Array(16*n),16),this.instanceColor=null,this.count=n,this.frustumCulled=!1}function nn(t){m.call(this),this.type="LineBasicMaterial",this.color=new Yl(16777215),this.linewidth=1,this.linecap="round",this.linejoin="round",this.morphTargets=!1,this.setValues(t)}function rn(t,e,n){1===n&&console.error("THREE.Line: parameter THREE.LinePieces no longer supported. Use THREE.LineSegments instead."),h.call(this),this.type="Line",this.geometry=void 0!==t?t:new C,this.material=void 0!==e?e:new nn,this.updateMorphTargets()}function an(t,e){rn.call(this,t,e),this.type="LineSegments"}function on(t,e){rn.call(this,t,e),this.type="LineLoop"}function sn(t){m.call(this),this.type="PointsMaterial",this.color=new Yl(16777215), -this.map=null,this.alphaMap=null,this.size=1,this.sizeAttenuation=!0,this.morphTargets=!1,this.setValues(t)}function cn(t,e){h.call(this),this.type="Points",this.geometry=void 0!==t?t:new C,this.material=void 0!==e?e:new sn,this.updateMorphTargets()}function ln(t,e,n,r,i,a,o){var s=Bh.distanceSqToPoint(t);if(si.far)return;a.push({distance:l,distanceToRay:Math.sqrt(s),point:c,index:e,face:null,object:o})}}function un(t,e,n,r,i,a,s,c,l){function u(){h.needsUpdate=!0,t.requestVideoFrameCallback(u)}o.call(this,t,e,n,r,i,a,s,c,l),this.format=void 0!==s?s:ns,this.minFilter=void 0!==a?a:Uo,this.magFilter=void 0!==i?i:Uo,this.generateMipmaps=!1;var h=this;"requestVideoFrameCallback"in t&&t.requestVideoFrameCallback(u)}function hn(t,e,n,r,i,a,s,c,l,u,h,d){o.call(this,null,a,s,c,l,u,r,i,h,d),this.image={width:e,height:n},this.mipmaps=t,this.flipY=!1,this.generateMipmaps=!1}function dn(t,e,n,r,i,a,s,c,l){o.call(this,t,e,n,r,i,a,s,c,l),this.needsUpdate=!0}function pn(t,e,n,r,i,a,s,c,l,u){if((u=void 0!==u?u:ss)!==ss&&u!==cs)throw new Error("DepthTexture format must be either THREE.DepthFormat or THREE.DepthStencilFormat");void 0===n&&u===ss&&(n=qo),void 0===n&&u===cs&&(n=ts),o.call(this,null,r,i,a,s,c,u,n,l),this.image={width:t,height:e},this.magFilter=void 0!==s?s:zo,this.minFilter=void 0!==c?c:zo,this.flipY=!1,this.generateMipmaps=!1}function fn(){Object.defineProperty(this,"id",{value:Gh+=2}),this.uuid=Tc.generateUUID(),this.name="",this.type="Geometry",this.vertices=[],this.colors=[],this.faces=[],this.faceVertexUvs=[[]],this.morphTargets=[],this.morphNormals=[],this.skinWeights=[],this.skinIndices=[],this.lineDistances=[],this.boundingBox=null,this.boundingSphere=null,this.elementsNeedUpdate=!1,this.verticesNeedUpdate=!1,this.uvsNeedUpdate=!1,this.normalsNeedUpdate=!1,this.colorsNeedUpdate=!1,this.lineDistancesNeedUpdate=!1,this.groupsNeedUpdate=!1}function mn(t,e,n,r,i){var a,o;if(i===jn(t,e,n,r)>0)for(a=e;a=e;a-=r)o=kn(a,t[a],t[a+1],o);return o&&In(o,o.next)&&(Vn(o),o=o.next),o}function vn(t,e){if(!t)return t;e||(e=t);var n,r=t;do{if(n=!1,r.steiner||!In(r,r.next)&&0!==On(r.prev,r,r.next))r=r.next;else{if(Vn(r),(r=e=r.prev)===r.next)break;n=!0}}while(n||r!==e);return e}function gn(t,e,n,r,i,a,o){if(t){!o&&a&&An(t,r,i,a);for(var s,c,l=t;t.prev!==t.next;)if(s=t.prev,c=t.next,a?xn(t,r,i,a):yn(t))e.push(s.i/n),e.push(t.i/n),e.push(c.i/n),Vn(t),t=c.next,l=c.next;else if((t=c)===l){o?1===o?(t=bn(vn(t),e,n),gn(t,e,n,r,i,a,2)):2===o&&_n(t,e,n,r,i,a):gn(vn(t),e,n,r,i,a,1);break}}}function yn(t){var e=t.prev,n=t,r=t.next;if(On(e,n,r)>=0)return!1;for(var i=t.next.next;i!==t.prev;){if(Pn(e.x,e.y,n.x,n.y,r.x,r.y,i.x,i.y)&&On(i.prev,i,i.next)>=0)return!1;i=i.next}return!0}function xn(t,e,n,r){var i=t.prev,a=t,o=t.next;if(On(i,a,o)>=0)return!1;for(var s=i.xa.x?i.x>o.x?i.x:o.x:a.x>o.x?a.x:o.x,u=i.y>a.y?i.y>o.y?i.y:o.y:a.y>o.y?a.y:o.y,h=Rn(s,c,e,n,r),d=Rn(l,u,e,n,r),p=t.prevZ,f=t.nextZ;p&&p.z>=h&&f&&f.z<=d;){if(p!==t.prev&&p!==t.next&&Pn(i.x,i.y,a.x,a.y,o.x,o.y,p.x,p.y)&&On(p.prev,p,p.next)>=0)return!1;if(p=p.prevZ,f!==t.prev&&f!==t.next&&Pn(i.x,i.y,a.x,a.y,o.x,o.y,f.x,f.y)&&On(f.prev,f,f.next)>=0)return!1;f=f.nextZ}for(;p&&p.z>=h;){if(p!==t.prev&&p!==t.next&&Pn(i.x,i.y,a.x,a.y,o.x,o.y,p.x,p.y)&&On(p.prev,p,p.next)>=0)return!1;p=p.prevZ}for(;f&&f.z<=d;){if(f!==t.prev&&f!==t.next&&Pn(i.x,i.y,a.x,a.y,o.x,o.y,f.x,f.y)&&On(f.prev,f,f.next)>=0)return!1;f=f.nextZ}return!0}function bn(t,e,n){var r=t;do{var i=r.prev,a=r.next.next;!In(i,a)&&Nn(i,r,r.next,a)&&Gn(i,a)&&Gn(a,i)&&(e.push(i.i/n),e.push(r.i/n),e.push(a.i/n),Vn(r),Vn(r.next),r=t=a),r=r.next}while(r!==t);return vn(r)}function _n(t,e,n,r,i,a){var o=t;do{for(var s=o.next.next;s!==o.prev;){if(o.i!==s.i&&Dn(o,s)){var c=Hn(o,s);return o=vn(o,o.next),c=vn(c,c.next),gn(o,e,n,r,i,a),void gn(c,e,n,r,i,a)}s=s.next}o=o.next}while(o!==t)}function wn(t,e,n,r){var i,a,o,s,c,l=[];for(i=0,a=e.length;i=r.next.y&&r.next.y!==r.y){var s=r.x+(a-r.y)*(r.next.x-r.x)/(r.next.y-r.y);if(s<=i&&s>o){if(o=s,s===i){if(a===r.y)return r;if(a===r.next.y)return r.next}n=r.x=r.x&&r.x>=u&&i!==r.x&&Pn(an.x||r.x===n.x&&En(n,r)))&&(n=r,d=c)),r=r.next}while(r!==l);return n}function En(t,e){return On(t.prev,t,e.prev)<0&&On(e.next,t,t.next)<0}function An(t,e,n,r){var i=t;do{null===i.z&&(i.z=Rn(i.x,i.y,e,n,r)),i.prevZ=i.prev,i.nextZ=i.next,i=i.next}while(i!==t);i.prevZ.nextZ=null,i.prevZ=null,Ln(i)}function Ln(t){var e,n,r,i,a,o,s,c,l=1;do{for(n=t,t=null,a=null,o=0;n;){for(o++,r=n,s=0,e=0;e0||c>0&&r;)0!==s&&(0===c||!r||n.z<=r.z)?(i=n,n=n.nextZ,s--):(i=r,r=r.nextZ,c--),a?a.nextZ=i:t=i,i.prevZ=a,a=i;n=r}a.nextZ=null,l*=2}while(o>1);return t}function Rn(t,e,n,r,i){return t=32767*(t-n)*i,e=32767*(e-r)*i,t=16711935&(t|t<<8),t=252645135&(t|t<<4),t=858993459&(t|t<<2),t=1431655765&(t|t<<1),e=16711935&(e|e<<8),e=252645135&(e|e<<4),e=858993459&(e|e<<2),e=1431655765&(e|e<<1),t|e<<1}function Cn(t){var e=t,n=t;do{(e.x=0&&(t-o)*(r-s)-(n-o)*(e-s)>=0&&(n-o)*(a-s)-(i-o)*(r-s)>=0}function Dn(t,e){return t.next.i!==e.i&&t.prev.i!==e.i&&!Fn(t,e)&&(Gn(t,e)&&Gn(e,t)&&Un(t,e)&&(On(t.prev,t,e.prev)||On(t,e.prev,e))||In(t,e)&&On(t.prev,t,t.next)>0&&On(e.prev,e,e.next)>0)}function On(t,e,n){return(e.y-t.y)*(n.x-e.x)-(e.x-t.x)*(n.y-e.y)}function In(t,e){return t.x===e.x&&t.y===e.y}function Nn(t,e,n,r){var i=zn(On(t,e,n)),a=zn(On(t,e,r)),o=zn(On(n,r,t)),s=zn(On(n,r,e));return i!==a&&o!==s||(!(0!==i||!Bn(t,n,e))||(!(0!==a||!Bn(t,r,e))||(!(0!==o||!Bn(n,t,r))||!(0!==s||!Bn(n,e,r)))))}function Bn(t,e,n){return e.x<=Math.max(t.x,n.x)&&e.x>=Math.min(t.x,n.x)&&e.y<=Math.max(t.y,n.y)&&e.y>=Math.min(t.y,n.y)}function zn(t){return t>0?1:t<0?-1:0}function Fn(t,e){var n=t;do{if(n.i!==t.i&&n.next.i!==t.i&&n.i!==e.i&&n.next.i!==e.i&&Nn(n,n.next,t,e))return!0;n=n.next}while(n!==t);return!1}function Gn(t,e){return On(t.prev,t,t.next)<0?On(t,e,t.next)>=0&&On(t,t.prev,e)>=0:On(t,e,t.prev)<0||On(t,t.next,e)<0}function Un(t,e){var n=t,r=!1,i=(t.x+e.x)/2,a=(t.y+e.y)/2;do{n.y>a!=n.next.y>a&&n.next.y!==n.y&&i<(n.next.x-n.x)*(a-n.y)/(n.next.y-n.y)+n.x&&(r=!r),n=n.next}while(n!==t);return r}function Hn(t,e){var n=new Wn(t.i,t.x,t.y),r=new Wn(e.i,e.x,e.y),i=t.next,a=e.prev;return t.next=e,e.prev=t,n.next=i,i.prev=n,r.next=n,n.prev=r,a.next=r,r.prev=a,r}function kn(t,e,n,r){var i=new Wn(t,e,n);return r?(i.next=r.next,i.prev=r,r.next.prev=i,r.next=i):(i.prev=i,i.next=i),i}function Vn(t){t.next.prev=t.prev,t.prev.next=t.next,t.prevZ&&(t.prevZ.nextZ=t.nextZ),t.nextZ&&(t.nextZ.prevZ=t.prevZ)}function Wn(t,e,n){this.i=t,this.x=e,this.y=n,this.prev=null,this.next=null,this.z=null,this.prevZ=null,this.nextZ=null,this.steiner=!1}function jn(t,e,n,r){for(var i=0,a=e,o=n-r;a2&&t[e-1].equals(t[0])&&t.pop()}function Xn(t,e){for(var n=0;n=0?(t(v-1e-5,f,l),u.subVectors(c,l)):(t(v+1e-5,f,l),u.subVectors(l,c)),f-1e-5>=0?(t(v,f-1e-5,l),h.subVectors(c,l)):(t(v,f+1e-5,l),h.subVectors(l,c)),s.crossVectors(u,h).normalize(),a.push(s.x,s.y,s.z),o.push(v,f)}for(var g=0;g\n\n\t\tvec4 inputTexelToLinear( vec4 value ) {\n\n\t\t\tif ( inputEncoding == 0 ) {\n\n\t\t\t\treturn value;\n\n\t\t\t} else if ( inputEncoding == 1 ) {\n\n\t\t\t\treturn sRGBToLinear( value );\n\n\t\t\t} else if ( inputEncoding == 2 ) {\n\n\t\t\t\treturn RGBEToLinear( value );\n\n\t\t\t} else if ( inputEncoding == 3 ) {\n\n\t\t\t\treturn RGBMToLinear( value, 7.0 );\n\n\t\t\t} else if ( inputEncoding == 4 ) {\n\n\t\t\t\treturn RGBMToLinear( value, 16.0 );\n\n\t\t\t} else if ( inputEncoding == 5 ) {\n\n\t\t\t\treturn RGBDToLinear( value, 256.0 );\n\n\t\t\t} else {\n\n\t\t\t\treturn GammaToLinear( value, 2.2 );\n\n\t\t\t}\n\n\t\t}\n\n\t\tvec4 linearToOutputTexel( vec4 value ) {\n\n\t\t\tif ( outputEncoding == 0 ) {\n\n\t\t\t\treturn value;\n\n\t\t\t} else if ( outputEncoding == 1 ) {\n\n\t\t\t\treturn LinearTosRGB( value );\n\n\t\t\t} else if ( outputEncoding == 2 ) {\n\n\t\t\t\treturn LinearToRGBE( value );\n\n\t\t\t} else if ( outputEncoding == 3 ) {\n\n\t\t\t\treturn LinearToRGBM( value, 7.0 );\n\n\t\t\t} else if ( outputEncoding == 4 ) {\n\n\t\t\t\treturn LinearToRGBM( value, 16.0 );\n\n\t\t\t} else if ( outputEncoding == 5 ) {\n\n\t\t\t\treturn LinearToRGBD( value, 256.0 );\n\n\t\t\t} else {\n\n\t\t\t\treturn LinearToGamma( value, 2.2 );\n\n\t\t\t}\n\n\t\t}\n\n\t\tvec4 envMapTexelToLinear( vec4 color ) {\n\n\t\t\treturn inputTexelToLinear( color );\n\n\t\t}\n\t\n\n\t\t\t#define ENVMAP_TYPE_CUBE_UV\n\t\t\t#include \n\n\t\t\tvec3 getSample( float theta, vec3 axis ) {\n\n\t\t\t\tfloat cosTheta = cos( theta );\n\t\t\t\t// Rodrigues' axis-angle rotation\n\t\t\t\tvec3 sampleDirection = vOutputDirection * cosTheta\n\t\t\t\t\t+ cross( axis, vOutputDirection ) * sin( theta )\n\t\t\t\t\t+ axis * dot( axis, vOutputDirection ) * ( 1.0 - cosTheta );\n\n\t\t\t\treturn bilinearCubeUV( envMap, sampleDirection, mipInt );\n\n\t\t\t}\n\n\t\t\tvoid main() {\n\n\t\t\t\tvec3 axis = latitudinal ? poleAxis : cross( poleAxis, vOutputDirection );\n\n\t\t\t\tif ( all( equal( axis, vec3( 0.0 ) ) ) ) {\n\n\t\t\t\t\taxis = vec3( vOutputDirection.z, 0.0, - vOutputDirection.x );\n\n\t\t\t\t}\n\n\t\t\t\taxis = normalize( axis );\n\n\t\t\t\tgl_FragColor = vec4( 0.0, 0.0, 0.0, 1.0 );\n\t\t\t\tgl_FragColor.rgb += weights[ 0 ] * getSample( 0.0, axis );\n\n\t\t\t\tfor ( int i = 1; i < n; i++ ) {\n\n\t\t\t\t\tif ( i >= samples ) {\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tfloat theta = dTheta * float( i );\n\t\t\t\t\tgl_FragColor.rgb += weights[ i ] * getSample( -1.0 * theta, axis );\n\t\t\t\t\tgl_FragColor.rgb += weights[ i ] * getSample( theta, axis );\n\n\t\t\t\t}\n\n\t\t\t\tgl_FragColor = linearToOutputTexel( gl_FragColor );\n\n\t\t\t}\n\t\t",blending:ka,depthTest:!1,depthWrite:!1})}function Ji(){return new er({name:"EquirectangularToCubeUV",uniforms:{envMap:{value:null},texelSize:{value:new Ec(1,1)},inputEncoding:{value:xf[ic]},outputEncoding:{value:xf[ic]}},vertexShader:"\n\n\t\tprecision mediump float;\n\t\tprecision mediump int;\n\n\t\tattribute vec3 position;\n\t\tattribute vec2 uv;\n\t\tattribute float faceIndex;\n\n\t\tvarying vec3 vOutputDirection;\n\n\t\t// RH coordinate system; PMREM face-indexing convention\n\t\tvec3 getDirection( vec2 uv, float face ) {\n\n\t\t\tuv = 2.0 * uv - 1.0;\n\n\t\t\tvec3 direction = vec3( uv, 1.0 );\n\n\t\t\tif ( face == 0.0 ) {\n\n\t\t\t\tdirection = direction.zyx; // ( 1, v, u ) pos x\n\n\t\t\t} else if ( face == 1.0 ) {\n\n\t\t\t\tdirection = direction.xzy;\n\t\t\t\tdirection.xz *= -1.0; // ( -u, 1, -v ) pos y\n\n\t\t\t} else if ( face == 2.0 ) {\n\n\t\t\t\tdirection.x *= -1.0; // ( -u, v, 1 ) pos z\n\n\t\t\t} else if ( face == 3.0 ) {\n\n\t\t\t\tdirection = direction.zyx;\n\t\t\t\tdirection.xz *= -1.0; // ( -1, v, -u ) neg x\n\n\t\t\t} else if ( face == 4.0 ) {\n\n\t\t\t\tdirection = direction.xzy;\n\t\t\t\tdirection.xy *= -1.0; // ( -u, -1, v ) neg y\n\n\t\t\t} else if ( face == 5.0 ) {\n\n\t\t\t\tdirection.z *= -1.0; // ( u, v, -1 ) neg z\n\n\t\t\t}\n\n\t\t\treturn direction;\n\n\t\t}\n\n\t\tvoid main() {\n\n\t\t\tvOutputDirection = getDirection( uv, faceIndex );\n\t\t\tgl_Position = vec4( position, 1.0 );\n\n\t\t}\n\t",fragmentShader:"\n\n\t\t\tprecision mediump float;\n\t\t\tprecision mediump int;\n\n\t\t\tvarying vec3 vOutputDirection;\n\n\t\t\tuniform sampler2D envMap;\n\t\t\tuniform vec2 texelSize;\n\n\t\t\t\n\n\t\tuniform int inputEncoding;\n\t\tuniform int outputEncoding;\n\n\t\t#include \n\n\t\tvec4 inputTexelToLinear( vec4 value ) {\n\n\t\t\tif ( inputEncoding == 0 ) {\n\n\t\t\t\treturn value;\n\n\t\t\t} else if ( inputEncoding == 1 ) {\n\n\t\t\t\treturn sRGBToLinear( value );\n\n\t\t\t} else if ( inputEncoding == 2 ) {\n\n\t\t\t\treturn RGBEToLinear( value );\n\n\t\t\t} else if ( inputEncoding == 3 ) {\n\n\t\t\t\treturn RGBMToLinear( value, 7.0 );\n\n\t\t\t} else if ( inputEncoding == 4 ) {\n\n\t\t\t\treturn RGBMToLinear( value, 16.0 );\n\n\t\t\t} else if ( inputEncoding == 5 ) {\n\n\t\t\t\treturn RGBDToLinear( value, 256.0 );\n\n\t\t\t} else {\n\n\t\t\t\treturn GammaToLinear( value, 2.2 );\n\n\t\t\t}\n\n\t\t}\n\n\t\tvec4 linearToOutputTexel( vec4 value ) {\n\n\t\t\tif ( outputEncoding == 0 ) {\n\n\t\t\t\treturn value;\n\n\t\t\t} else if ( outputEncoding == 1 ) {\n\n\t\t\t\treturn LinearTosRGB( value );\n\n\t\t\t} else if ( outputEncoding == 2 ) {\n\n\t\t\t\treturn LinearToRGBE( value );\n\n\t\t\t} else if ( outputEncoding == 3 ) {\n\n\t\t\t\treturn LinearToRGBM( value, 7.0 );\n\n\t\t\t} else if ( outputEncoding == 4 ) {\n\n\t\t\t\treturn LinearToRGBM( value, 16.0 );\n\n\t\t\t} else if ( outputEncoding == 5 ) {\n\n\t\t\t\treturn LinearToRGBD( value, 256.0 );\n\n\t\t\t} else {\n\n\t\t\t\treturn LinearToGamma( value, 2.2 );\n\n\t\t\t}\n\n\t\t}\n\n\t\tvec4 envMapTexelToLinear( vec4 color ) {\n\n\t\t\treturn inputTexelToLinear( color );\n\n\t\t}\n\t\n\n\t\t\t#include \n\n\t\t\tvoid main() {\n\n\t\t\t\tgl_FragColor = vec4( 0.0, 0.0, 0.0, 1.0 );\n\n\t\t\t\tvec3 outputDirection = normalize( vOutputDirection );\n\t\t\t\tvec2 uv = equirectUv( outputDirection );\n\n\t\t\t\tvec2 f = fract( uv / texelSize - 0.5 );\n\t\t\t\tuv -= f * texelSize;\n\t\t\t\tvec3 tl = envMapTexelToLinear( texture2D ( envMap, uv ) ).rgb;\n\t\t\t\tuv.x += texelSize.x;\n\t\t\t\tvec3 tr = envMapTexelToLinear( texture2D ( envMap, uv ) ).rgb;\n\t\t\t\tuv.y += texelSize.y;\n\t\t\t\tvec3 br = envMapTexelToLinear( texture2D ( envMap, uv ) ).rgb;\n\t\t\t\tuv.x -= texelSize.x;\n\t\t\t\tvec3 bl = envMapTexelToLinear( texture2D ( envMap, uv ) ).rgb;\n\n\t\t\t\tvec3 tm = mix( tl, tr, f.x );\n\t\t\t\tvec3 bm = mix( bl, br, f.x );\n\t\t\t\tgl_FragColor.rgb = mix( tm, bm, f.y );\n\n\t\t\t\tgl_FragColor = linearToOutputTexel( gl_FragColor );\n\n\t\t\t}\n\t\t",blending:ka,depthTest:!1,depthWrite:!1})}function Qi(){return new er({name:"CubemapToCubeUV",uniforms:{envMap:{value:null},inputEncoding:{value:xf[ic]},outputEncoding:{value:xf[ic]}},vertexShader:"\n\n\t\tprecision mediump float;\n\t\tprecision mediump int;\n\n\t\tattribute vec3 position;\n\t\tattribute vec2 uv;\n\t\tattribute float faceIndex;\n\n\t\tvarying vec3 vOutputDirection;\n\n\t\t// RH coordinate system; PMREM face-indexing convention\n\t\tvec3 getDirection( vec2 uv, float face ) {\n\n\t\t\tuv = 2.0 * uv - 1.0;\n\n\t\t\tvec3 direction = vec3( uv, 1.0 );\n\n\t\t\tif ( face == 0.0 ) {\n\n\t\t\t\tdirection = direction.zyx; // ( 1, v, u ) pos x\n\n\t\t\t} else if ( face == 1.0 ) {\n\n\t\t\t\tdirection = direction.xzy;\n\t\t\t\tdirection.xz *= -1.0; // ( -u, 1, -v ) pos y\n\n\t\t\t} else if ( face == 2.0 ) {\n\n\t\t\t\tdirection.x *= -1.0; // ( -u, v, 1 ) pos z\n\n\t\t\t} else if ( face == 3.0 ) {\n\n\t\t\t\tdirection = direction.zyx;\n\t\t\t\tdirection.xz *= -1.0; // ( -1, v, -u ) neg x\n\n\t\t\t} else if ( face == 4.0 ) {\n\n\t\t\t\tdirection = direction.xzy;\n\t\t\t\tdirection.xy *= -1.0; // ( -u, -1, v ) neg y\n\n\t\t\t} else if ( face == 5.0 ) {\n\n\t\t\t\tdirection.z *= -1.0; // ( u, v, -1 ) neg z\n\n\t\t\t}\n\n\t\t\treturn direction;\n\n\t\t}\n\n\t\tvoid main() {\n\n\t\t\tvOutputDirection = getDirection( uv, faceIndex );\n\t\t\tgl_Position = vec4( position, 1.0 );\n\n\t\t}\n\t",fragmentShader:"\n\n\t\t\tprecision mediump float;\n\t\t\tprecision mediump int;\n\n\t\t\tvarying vec3 vOutputDirection;\n\n\t\t\tuniform samplerCube envMap;\n\n\t\t\t\n\n\t\tuniform int inputEncoding;\n\t\tuniform int outputEncoding;\n\n\t\t#include \n\n\t\tvec4 inputTexelToLinear( vec4 value ) {\n\n\t\t\tif ( inputEncoding == 0 ) {\n\n\t\t\t\treturn value;\n\n\t\t\t} else if ( inputEncoding == 1 ) {\n\n\t\t\t\treturn sRGBToLinear( value );\n\n\t\t\t} else if ( inputEncoding == 2 ) {\n\n\t\t\t\treturn RGBEToLinear( value );\n\n\t\t\t} else if ( inputEncoding == 3 ) {\n\n\t\t\t\treturn RGBMToLinear( value, 7.0 );\n\n\t\t\t} else if ( inputEncoding == 4 ) {\n\n\t\t\t\treturn RGBMToLinear( value, 16.0 );\n\n\t\t\t} else if ( inputEncoding == 5 ) {\n\n\t\t\t\treturn RGBDToLinear( value, 256.0 );\n\n\t\t\t} else {\n\n\t\t\t\treturn GammaToLinear( value, 2.2 );\n\n\t\t\t}\n\n\t\t}\n\n\t\tvec4 linearToOutputTexel( vec4 value ) {\n\n\t\t\tif ( outputEncoding == 0 ) {\n\n\t\t\t\treturn value;\n\n\t\t\t} else if ( outputEncoding == 1 ) {\n\n\t\t\t\treturn LinearTosRGB( value );\n\n\t\t\t} else if ( outputEncoding == 2 ) {\n\n\t\t\t\treturn LinearToRGBE( value );\n\n\t\t\t} else if ( outputEncoding == 3 ) {\n\n\t\t\t\treturn LinearToRGBM( value, 7.0 );\n\n\t\t\t} else if ( outputEncoding == 4 ) {\n\n\t\t\t\treturn LinearToRGBM( value, 16.0 );\n\n\t\t\t} else if ( outputEncoding == 5 ) {\n\n\t\t\t\treturn LinearToRGBD( value, 256.0 );\n\n\t\t\t} else {\n\n\t\t\t\treturn LinearToGamma( value, 2.2 );\n\n\t\t\t}\n\n\t\t}\n\n\t\tvec4 envMapTexelToLinear( vec4 color ) {\n\n\t\t\treturn inputTexelToLinear( color );\n\n\t\t}\n\t\n\n\t\t\tvoid main() {\n\n\t\t\t\tgl_FragColor = vec4( 0.0, 0.0, 0.0, 1.0 );\n\t\t\t\tgl_FragColor.rgb = envMapTexelToLinear( textureCube( envMap, vec3( - vOutputDirection.x, vOutputDirection.yz ) ) ).rgb;\n\t\t\t\tgl_FragColor = linearToOutputTexel( gl_FragColor );\n\n\t\t\t}\n\t\t",blending:ka,depthTest:!1,depthWrite:!1})}function Ki(t,e,n,r,i,a,o){return console.warn("THREE.Face4 has been removed. A THREE.Face3 will be created instead."),new Zl(t,e,n,i,a,o)}function $i(t){return console.warn("THREE.MeshFaceMaterial has been removed. Use an Array instead."),t}function ta(t){return void 0===t&&(t=[]),console.warn("THREE.MultiMaterial has been removed. Use an Array instead."),t.isMultiMaterial=!0,t.materials=t,t.clone=function(){return t.slice()},t}function ea(t,e){return console.warn("THREE.PointCloud has been renamed to THREE.Points."),new cn(t,e)}function na(t){return console.warn("THREE.Particle has been renamed to THREE.Sprite."),new Ze(t)}function ra(t,e){return console.warn("THREE.ParticleSystem has been renamed to THREE.Points."),new cn(t,e)}function ia(t){return console.warn("THREE.PointCloudMaterial has been renamed to THREE.PointsMaterial."),new sn(t)}function aa(t){return console.warn("THREE.ParticleBasicMaterial has been renamed to THREE.PointsMaterial."),new sn(t)}function oa(t){return console.warn("THREE.ParticleSystemMaterial has been renamed to THREE.PointsMaterial."),new sn(t)}function sa(t,e,n){return console.warn("THREE.Vertex has been removed. Use THREE.Vector3 instead."),new Dc(t,e,n)}function ca(t,e){return console.warn("THREE.DynamicBufferAttribute has been removed. Use new THREE.BufferAttribute().setUsage( THREE.DynamicDrawUsage ) instead."),new g(t,e).setUsage(xc)}function la(t,e){return console.warn("THREE.Int8Attribute has been removed. Use new THREE.Int8BufferAttribute() instead."),new y(t,e)}function ua(t,e){return console.warn("THREE.Uint8Attribute has been removed. Use new THREE.Uint8BufferAttribute() instead."),new x(t,e)}function ha(t,e){return console.warn("THREE.Uint8ClampedAttribute has been removed. Use new THREE.Uint8ClampedBufferAttribute() instead."),new b(t,e)}function da(t,e){return console.warn("THREE.Int16Attribute has been removed. Use new THREE.Int16BufferAttribute() instead."),new _(t,e)}function pa(t,e){return console.warn("THREE.Uint16Attribute has been removed. Use new THREE.Uint16BufferAttribute() instead."),new w(t,e)}function fa(t,e){return console.warn("THREE.Int32Attribute has been removed. Use new THREE.Int32BufferAttribute() instead."),new M(t,e)}function ma(t,e){return console.warn("THREE.Uint32Attribute has been removed. Use new THREE.Uint32BufferAttribute() instead."),new S(t,e)}function va(t,e){return console.warn("THREE.Float32Attribute has been removed. Use new THREE.Float32BufferAttribute() instead."),new E(t,e)}function ga(t,e){return console.warn("THREE.Float64Attribute has been removed. Use new THREE.Float64BufferAttribute() instead."),new A(t,e)}function ya(t){console.warn("THREE.ClosedSplineCurve3 has been deprecated. Use THREE.CatmullRomCurve3 instead."),Fr.call(this,t),this.type="catmullrom",this.closed=!0}function xa(t){console.warn("THREE.SplineCurve3 has been deprecated. Use THREE.CatmullRomCurve3 instead."),Fr.call(this,t),this.type="catmullrom"}function ba(t){console.warn("THREE.Spline has been removed. Use THREE.CatmullRomCurve3 instead."),Fr.call(this,t),this.type="catmullrom"}function _a(t){return console.warn("THREE.AxisHelper has been renamed to THREE.AxesHelper."),new lf(t)}function wa(t,e){return console.warn("THREE.BoundingBoxHelper has been deprecated. Creating a THREE.BoxHelper instead."),new rf(t,e)}function Ma(t,e){return console.warn("THREE.EdgesHelper has been removed. Use THREE.EdgesGeometry instead."),new an(new rd(t.geometry),new nn({color:void 0!==e?e:16777215}))}function Sa(t,e){return console.warn("THREE.WireframeHelper has been removed. Use THREE.WireframeGeometry instead."),new an(new Od(t.geometry),new nn({color:void 0!==e?e:16777215}))}function Ta(t){return console.warn("THREE.XHRLoader has been renamed to THREE.FileLoader."),new Ar(t)}function Ea(t){return console.warn("THREE.BinaryTextureLoader has been renamed to THREE.DataTextureLoader."),new Dr(t)}function Aa(t,e,n){return console.warn("THREE.WebGLRenderTargetCube( width, height, options ) is now WebGLCubeRenderTarget( size, options )."),new H(t,n)}function La(){console.error("THREE.CanvasRenderer has been removed")}function Ra(){console.error("THREE.JSONLoader has been removed.")}function Ca(){console.error("THREE.LensFlare has been moved to /examples/jsm/objects/Lensflare.js")}var Pa={LEFT:0,MIDDLE:1,RIGHT:2,ROTATE:0,DOLLY:1,PAN:2},Da={ROTATE:0,PAN:1,DOLLY_PAN:2,DOLLY_ROTATE:3},Oa=0,Ia=1,Na=2,Ba=1,za=2,Fa=3,Ga=0,Ua=1,Ha=2,ka=0,Va=1,Wa=2,ja=3,qa=4,Xa=5,Ya=100,Za=101,Ja=102,Qa=103,Ka=104,$a=200,to=201,eo=202,no=203,ro=204,io=205,ao=206,oo=207,so=208,co=209,lo=210,uo=0,ho=1,po=2,fo=3,mo=4,vo=5,go=6,yo=7,xo=0,bo=1,_o=2,wo=0,Mo=1,So=2,To=3,Eo=4,Ao=5,Lo=301,Ro=302,Co=303,Po=304,Do=306,Oo=307,Io=1e3,No=1001,Bo=1002,zo=1003,Fo=1004,Go=1005,Uo=1006,Ho=1007,ko=1008,Vo=1009,Wo=1010,jo=1011,qo=1012,Xo=1013,Yo=1014,Zo=1015,Jo=1016,Qo=1017,Ko=1018,$o=1019,ts=1020,es=1021,ns=1022,rs=1023,is=1024,as=1025,os=rs,ss=1026,cs=1027,ls=1028,us=1029,hs=1030,ds=1031,ps=1032,fs=1033,ms=33776,vs=33777,gs=33778,ys=33779,xs=35840,bs=35841,_s=35842,ws=35843,Ms=36196,Ss=37492,Ts=37496,Es=37808,As=37809,Ls=37810,Rs=37811,Cs=37812,Ps=37813,Ds=37814,Os=37815,Is=37816,Ns=37817,Bs=37818,zs=37819,Fs=37820,Gs=37821,Us=36492,Hs=37840,ks=37841,Vs=37842,Ws=37843,js=37844,qs=37845,Xs=37846,Ys=37847,Zs=37848,Js=37849,Qs=37850,Ks=37851,$s=37852,tc=37853,ec=2201,nc=2400,rc=2500,ic=3e3,ac=3001,oc=3007,sc=3002,cc=3003,lc=3004,uc=3005,hc=3006,dc=3200,pc=3201,fc=0,mc=1,vc=7680,gc=519,yc=35044,xc=35048,bc="300 es";Object.assign(e.prototype,{addEventListener:function(t,e){void 0===this._listeners&&(this._listeners={});var n=this._listeners;void 0===n[t]&&(n[t]=[]),-1===n[t].indexOf(e)&&n[t].push(e)},hasEventListener:function(t,e){if(void 0===this._listeners)return!1;var n=this._listeners;return void 0!==n[t]&&-1!==n[t].indexOf(e)},removeEventListener:function(t,e){if(void 0!==this._listeners){var n=this._listeners,r=n[t];if(void 0!==r){var i=r.indexOf(e);-1!==i&&r.splice(i,1)}}},dispatchEvent:function(t){if(void 0!==this._listeners){var e=this._listeners,n=e[t.type];if(void 0!==n){t.target=this;for(var r=n.slice(0),i=0,a=r.length;i>8&255]+_c[t>>16&255]+_c[t>>24&255]+"-"+_c[255&e]+_c[e>>8&255]+"-"+_c[e>>16&15|64]+_c[e>>24&255]+"-"+_c[63&n|128]+_c[n>>8&255]+"-"+_c[n>>16&255]+_c[n>>24&255]+_c[255&r]+_c[r>>8&255]+_c[r>>16&255]+_c[r>>24&255]).toUpperCase()},clamp:function(t,e,n){return Math.max(e,Math.min(n,t))},euclideanModulo:function(t,e){return(t%e+e)%e},mapLinear:function(t,e,n,r,i){return r+(t-e)*(i-r)/(n-e)},lerp:function(t,e,n){return(1-n)*t+n*e},smoothstep:function(t,e,n){return t<=e?0:t>=n?1:(t=(t-e)/(n-e))*t*(3-2*t)},smootherstep:function(t,e,n){return t<=e?0:t>=n?1:(t=(t-e)/(n-e))*t*t*(t*(6*t-15)+10)},randInt:function(t,e){return t+Math.floor(Math.random()*(e-t+1))},randFloat:function(t,e){return t+Math.random()*(e-t)},randFloatSpread:function(t){return t*(.5-Math.random())},seededRandom:function(t){return void 0!==t&&(Sc=t%2147483647),((Sc=16807*Sc%2147483647)-1)/2147483646},degToRad:function(t){return t*Tc.DEG2RAD},radToDeg:function(t){return t*Tc.RAD2DEG},isPowerOfTwo:function(t){return 0==(t&t-1)&&0!==t},ceilPowerOfTwo:function(t){return Math.pow(2,Math.ceil(Math.log(t)/Math.LN2))},floorPowerOfTwo:function(t){return Math.pow(2,Math.floor(Math.log(t)/Math.LN2))},setQuaternionFromProperEuler:function(t,e,n,r,i){var a=Math.cos,o=Math.sin,s=a(n/2),c=o(n/2),l=a((e+r)/2),u=o((e+r)/2),h=a((e-r)/2),d=o((e-r)/2),p=a((r-e)/2),f=o((r-e)/2);switch(i){case"XYX":t.set(s*u,c*h,c*d,s*l);break;case"YZY":t.set(c*d,s*u,c*h,s*l);break;case"ZXZ":t.set(c*h,c*d,s*u,s*l);break;case"XZX":t.set(s*u,c*f,c*p,s*l);break;case"YXY":t.set(c*p,s*u,c*f,s*l);break;case"ZYZ":t.set(c*f,c*p,s*u,s*l);break;default:console.warn("THREE.MathUtils: .setQuaternionFromProperEuler() encountered an unknown order: "+i)}}},Ec=function(){function t(t,e){void 0===t&&(t=0),void 0===e&&(e=0),Object.defineProperty(this,"isVector2",{value:!0}),this.x=t,this.y=e}var e=t.prototype;return e.set=function(t,e){return this.x=t,this.y=e,this},e.setScalar=function(t){return this.x=t,this.y=t,this},e.setX=function(t){return this.x=t,this},e.setY=function(t){return this.y=t,this},e.setComponent=function(t,e){switch(t){case 0:this.x=e;break;case 1:this.y=e;break;default:throw new Error("index is out of range: "+t)}return this},e.getComponent=function(t){switch(t){case 0:return this.x;case 1:return this.y;default:throw new Error("index is out of range: "+t)}},e.clone=function(){return new this.constructor(this.x,this.y)},e.copy=function(t){return this.x=t.x,this.y=t.y,this},e.add=function(t,e){return void 0!==e?(console.warn("THREE.Vector2: .add() now only accepts one argument. Use .addVectors( a, b ) instead."),this.addVectors(t,e)):(this.x+=t.x,this.y+=t.y,this)},e.addScalar=function(t){return this.x+=t,this.y+=t,this},e.addVectors=function(t,e){return this.x=t.x+e.x,this.y=t.y+e.y,this},e.addScaledVector=function(t,e){return this.x+=t.x*e,this.y+=t.y*e,this},e.sub=function(t,e){return void 0!==e?(console.warn("THREE.Vector2: .sub() now only accepts one argument. Use .subVectors( a, b ) instead."),this.subVectors(t,e)):(this.x-=t.x,this.y-=t.y,this)},e.subScalar=function(t){return this.x-=t,this.y-=t,this},e.subVectors=function(t,e){return this.x=t.x-e.x,this.y=t.y-e.y,this},e.multiply=function(t){return this.x*=t.x,this.y*=t.y,this},e.multiplyScalar=function(t){return this.x*=t,this.y*=t,this},e.divide=function(t){return this.x/=t.x,this.y/=t.y,this},e.divideScalar=function(t){return this.multiplyScalar(1/t)},e.applyMatrix3=function(t){var e=this.x,n=this.y,r=t.elements;return this.x=r[0]*e+r[3]*n+r[6],this.y=r[1]*e+r[4]*n+r[7],this},e.min=function(t){return this.x=Math.min(this.x,t.x),this.y=Math.min(this.y,t.y),this},e.max=function(t){return this.x=Math.max(this.x,t.x),this.y=Math.max(this.y,t.y),this},e.clamp=function(t,e){return this.x=Math.max(t.x,Math.min(e.x,this.x)),this.y=Math.max(t.y,Math.min(e.y,this.y)),this},e.clampScalar=function(t,e){return this.x=Math.max(t,Math.min(e,this.x)),this.y=Math.max(t,Math.min(e,this.y)),this},e.clampLength=function(t,e){var n=this.length();return this.divideScalar(n||1).multiplyScalar(Math.max(t,Math.min(e,n)))},e.floor=function(){return this.x=Math.floor(this.x),this.y=Math.floor(this.y),this},e.ceil=function(){return this.x=Math.ceil(this.x),this.y=Math.ceil(this.y),this},e.round=function(){return this.x=Math.round(this.x),this.y=Math.round(this.y),this},e.roundToZero=function(){return this.x=this.x<0?Math.ceil(this.x):Math.floor(this.x),this.y=this.y<0?Math.ceil(this.y):Math.floor(this.y),this},e.negate=function(){return this.x=-this.x,this.y=-this.y,this},e.dot=function(t){return this.x*t.x+this.y*t.y},e.cross=function(t){return this.x*t.y-this.y*t.x},e.lengthSq=function(){return this.x*this.x+this.y*this.y},e.length=function(){return Math.sqrt(this.x*this.x+this.y*this.y)},e.manhattanLength=function(){return Math.abs(this.x)+Math.abs(this.y)},e.normalize=function(){return this.divideScalar(this.length()||1)},e.angle=function(){return Math.atan2(-this.y,-this.x)+Math.PI},e.distanceTo=function(t){return Math.sqrt(this.distanceToSquared(t))},e.distanceToSquared=function(t){var e=this.x-t.x,n=this.y-t.y;return e*e+n*n},e.manhattanDistanceTo=function(t){return Math.abs(this.x-t.x)+Math.abs(this.y-t.y)},e.setLength=function(t){return this.normalize().multiplyScalar(t)},e.lerp=function(t,e){return this.x+=(t.x-this.x)*e,this.y+=(t.y-this.y)*e,this},e.lerpVectors=function(t,e,n){return this.x=t.x+(e.x-t.x)*n,this.y=t.y+(e.y-t.y)*n,this},e.equals=function(t){return t.x===this.x&&t.y===this.y},e.fromArray=function(t,e){return void 0===e&&(e=0),this.x=t[e],this.y=t[e+1],this},e.toArray=function(t,e){return void 0===t&&(t=[]),void 0===e&&(e=0),t[e]=this.x,t[e+1]=this.y,t},e.fromBufferAttribute=function(t,e,n){return void 0!==n&&console.warn("THREE.Vector2: offset has been removed from .fromBufferAttribute()."),this.x=t.getX(e),this.y=t.getY(e),this},e.rotateAround=function(t,e){var n=Math.cos(e),r=Math.sin(e),i=this.x-t.x,a=this.y-t.y;return this.x=i*n-a*r+t.x,this.y=i*r+a*n+t.y,this},e.random=function(){return this.x=Math.random(),this.y=Math.random(),this},r(t,[{key:"width",get:function(){return this.x},set:function(t){this.x=t}},{key:"height",get:function(){return this.y},set:function(t){this.y=t}}]),t}(),Ac=function(){function t(){Object.defineProperty(this,"isMatrix3",{value:!0}),this.elements=[1,0,0,0,1,0,0,0,1],arguments.length>0&&console.error("THREE.Matrix3: the constructor no longer reads arguments. use .set() instead.")}var e=t.prototype;return e.set=function(t,e,n,r,i,a,o,s,c){var l=this.elements;return l[0]=t,l[1]=r,l[2]=o,l[3]=e,l[4]=i,l[5]=s,l[6]=n,l[7]=a,l[8]=c,this},e.identity=function(){return this.set(1,0,0,0,1,0,0,0,1),this},e.clone=function(){return(new this.constructor).fromArray(this.elements)},e.copy=function(t){var e=this.elements,n=t.elements;return e[0]=n[0],e[1]=n[1],e[2]=n[2],e[3]=n[3],e[4]=n[4],e[5]=n[5],e[6]=n[6],e[7]=n[7],e[8]=n[8],this},e.extractBasis=function(t,e,n){return t.setFromMatrix3Column(this,0),e.setFromMatrix3Column(this,1),n.setFromMatrix3Column(this,2),this},e.setFromMatrix4=function(t){var e=t.elements;return this.set(e[0],e[4],e[8],e[1],e[5],e[9],e[2],e[6],e[10]),this},e.multiply=function(t){return this.multiplyMatrices(this,t)},e.premultiply=function(t){return this.multiplyMatrices(t,this)},e.multiplyMatrices=function(t,e){var n=t.elements,r=e.elements,i=this.elements,a=n[0],o=n[3],s=n[6],c=n[1],l=n[4],u=n[7],h=n[2],d=n[5],p=n[8],f=r[0],m=r[3],v=r[6],g=r[1],y=r[4],x=r[7],b=r[2],_=r[5],w=r[8];return i[0]=a*f+o*g+s*b,i[3]=a*m+o*y+s*_,i[6]=a*v+o*x+s*w,i[1]=c*f+l*g+u*b,i[4]=c*m+l*y+u*_,i[7]=c*v+l*x+u*w,i[2]=h*f+d*g+p*b,i[5]=h*m+d*y+p*_,i[8]=h*v+d*x+p*w,this},e.multiplyScalar=function(t){var e=this.elements;return e[0]*=t,e[3]*=t,e[6]*=t,e[1]*=t,e[4]*=t,e[7]*=t,e[2]*=t,e[5]*=t,e[8]*=t,this},e.determinant=function(){var t=this.elements,e=t[0],n=t[1],r=t[2],i=t[3],a=t[4],o=t[5],s=t[6],c=t[7],l=t[8];return e*a*l-e*o*c-n*i*l+n*o*s+r*i*c-r*a*s},e.invert=function(){var t=this.elements,e=t[0],n=t[1],r=t[2],i=t[3],a=t[4],o=t[5],s=t[6],c=t[7],l=t[8],u=l*a-o*c,h=o*s-l*i,d=c*i-a*s,p=e*u+n*h+r*d;if(0===p)return this.set(0,0,0,0,0,0,0,0,0);var f=1/p;return t[0]=u*f,t[1]=(r*c-l*n)*f,t[2]=(o*n-r*a)*f,t[3]=h*f,t[4]=(l*e-r*s)*f,t[5]=(r*i-o*e)*f,t[6]=d*f,t[7]=(n*s-c*e)*f,t[8]=(a*e-n*i)*f,this},e.transpose=function(){var t,e=this.elements;return t=e[1],e[1]=e[3],e[3]=t,t=e[2],e[2]=e[6],e[6]=t,t=e[5],e[5]=e[7],e[7]=t,this},e.getNormalMatrix=function(t){return this.setFromMatrix4(t).copy(this).invert().transpose()},e.transposeIntoArray=function(t){var e=this.elements;return t[0]=e[0],t[1]=e[3],t[2]=e[6],t[3]=e[1],t[4]=e[4],t[5]=e[7],t[6]=e[2],t[7]=e[5],t[8]=e[8],this},e.setUvTransform=function(t,e,n,r,i,a,o){var s=Math.cos(i),c=Math.sin(i);this.set(n*s,n*c,-n*(s*a+c*o)+a+t,-r*c,r*s,-r*(-c*a+s*o)+o+e,0,0,1)},e.scale=function(t,e){var n=this.elements;return n[0]*=t,n[3]*=t,n[6]*=t,n[1]*=e,n[4]*=e,n[7]*=e,this},e.rotate=function(t){var e=Math.cos(t),n=Math.sin(t),r=this.elements,i=r[0],a=r[3],o=r[6],s=r[1],c=r[4],l=r[7];return r[0]=e*i+n*s,r[3]=e*a+n*c,r[6]=e*o+n*l,r[1]=-n*i+e*s,r[4]=-n*a+e*c,r[7]=-n*o+e*l,this},e.translate=function(t,e){var n=this.elements;return n[0]+=t*n[2],n[3]+=t*n[5],n[6]+=t*n[8],n[1]+=e*n[2],n[4]+=e*n[5],n[7]+=e*n[8],this},e.equals=function(t){for(var e=this.elements,n=t.elements,r=0;r<9;r++)if(e[r]!==n[r])return!1;return!0},e.fromArray=function(t,e){void 0===e&&(e=0);for(var n=0;n<9;n++)this.elements[n]=t[n+e];return this},e.toArray=function(t,e){void 0===t&&(t=[]),void 0===e&&(e=0);var n=this.elements;return t[e]=n[0],t[e+1]=n[1],t[e+2]=n[2],t[e+3]=n[3],t[e+4]=n[4],t[e+5]=n[5],t[e+6]=n[6],t[e+7]=n[7],t[e+8]=n[8],t},t}(),Lc={getDataURL:function(t){if(/^data:/i.test(t.src))return t.src;if("undefined"==typeof HTMLCanvasElement)return t.src;var e;if(t instanceof HTMLCanvasElement)e=t;else{void 0===Mc&&(Mc=document.createElementNS("http://www.w3.org/1999/xhtml","canvas")),Mc.width=t.width,Mc.height=t.height;var n=Mc.getContext("2d");t instanceof ImageData?n.putImageData(t,0,0):n.drawImage(t,0,0,t.width,t.height),e=Mc}return e.width>2048||e.height>2048?e.toDataURL("image/jpeg",.6):e.toDataURL("image/png")}},Rc=0;o.DEFAULT_IMAGE=void 0,o.DEFAULT_MAPPING=300,o.prototype=Object.assign(Object.create(e.prototype),{constructor:o,isTexture:!0,updateMatrix:function(){this.matrix.setUvTransform(this.offset.x,this.offset.y,this.repeat.x,this.repeat.y,this.rotation,this.center.x,this.center.y)},clone:function(){return(new this.constructor).copy(this)},copy:function(t){return this.name=t.name,this.image=t.image,this.mipmaps=t.mipmaps.slice(0),this.mapping=t.mapping,this.wrapS=t.wrapS,this.wrapT=t.wrapT,this.magFilter=t.magFilter,this.minFilter=t.minFilter,this.anisotropy=t.anisotropy,this.format=t.format,this.internalFormat=t.internalFormat,this.type=t.type,this.offset.copy(t.offset),this.repeat.copy(t.repeat),this.center.copy(t.center),this.rotation=t.rotation,this.matrixAutoUpdate=t.matrixAutoUpdate,this.matrix.copy(t.matrix),this.generateMipmaps=t.generateMipmaps,this.premultiplyAlpha=t.premultiplyAlpha,this.flipY=t.flipY,this.unpackAlignment=t.unpackAlignment,this.encoding=t.encoding,this},toJSON:function(t){var e=void 0===t||"string"==typeof t;if(!e&&void 0!==t.textures[this.uuid])return t.textures[this.uuid];var n={metadata:{version:4.5,type:"Texture",generator:"Texture.toJSON"},uuid:this.uuid,name:this.name,mapping:this.mapping,repeat:[this.repeat.x,this.repeat.y],offset:[this.offset.x,this.offset.y],center:[this.center.x,this.center.y],rotation:this.rotation,wrap:[this.wrapS,this.wrapT],format:this.format,type:this.type,encoding:this.encoding,minFilter:this.minFilter,magFilter:this.magFilter,anisotropy:this.anisotropy,flipY:this.flipY,premultiplyAlpha:this.premultiplyAlpha,unpackAlignment:this.unpackAlignment};if(void 0!==this.image){var r=this.image;if(void 0===r.uuid&&(r.uuid=Tc.generateUUID()),!e&&void 0===t.images[r.uuid]){var i;if(Array.isArray(r)){i=[];for(var a=0,o=r.length;a1)switch(this.wrapS){case Io:t.x=t.x-Math.floor(t.x);break;case No:t.x=t.x<0?0:1;break;case Bo:1===Math.abs(Math.floor(t.x)%2)?t.x=Math.ceil(t.x)-t.x:t.x=t.x-Math.floor(t.x)}if(t.y<0||t.y>1)switch(this.wrapT){case Io:t.y=t.y-Math.floor(t.y);break;case No:t.y=t.y<0?0:1;break;case Bo:1===Math.abs(Math.floor(t.y)%2)?t.y=Math.ceil(t.y)-t.y:t.y=t.y-Math.floor(t.y)}return this.flipY&&(t.y=1-t.y),t}}),Object.defineProperty(o.prototype,"needsUpdate",{set:function(t){!0===t&&this.version++}});var Cc=function(){function t(t,e,n,r){void 0===t&&(t=0),void 0===e&&(e=0),void 0===n&&(n=0),void 0===r&&(r=1),Object.defineProperty(this,"isVector4",{value:!0}),this.x=t,this.y=e,this.z=n,this.w=r}var e=t.prototype;return e.set=function(t,e,n,r){return this.x=t,this.y=e,this.z=n,this.w=r,this},e.setScalar=function(t){return this.x=t,this.y=t,this.z=t,this.w=t,this},e.setX=function(t){return this.x=t,this},e.setY=function(t){return this.y=t,this},e.setZ=function(t){return this.z=t,this},e.setW=function(t){return this.w=t,this},e.setComponent=function(t,e){switch(t){case 0:this.x=e;break;case 1:this.y=e;break;case 2:this.z=e;break;case 3:this.w=e;break;default:throw new Error("index is out of range: "+t)}return this},e.getComponent=function(t){switch(t){case 0:return this.x;case 1:return this.y;case 2:return this.z;case 3:return this.w;default:throw new Error("index is out of range: "+t)}},e.clone=function(){return new this.constructor(this.x,this.y,this.z,this.w)},e.copy=function(t){return this.x=t.x,this.y=t.y,this.z=t.z,this.w=void 0!==t.w?t.w:1,this},e.add=function(t,e){return void 0!==e?(console.warn("THREE.Vector4: .add() now only accepts one argument. Use .addVectors( a, b ) instead."),this.addVectors(t,e)):(this.x+=t.x,this.y+=t.y,this.z+=t.z,this.w+=t.w,this)},e.addScalar=function(t){return this.x+=t,this.y+=t,this.z+=t,this.w+=t,this},e.addVectors=function(t,e){return this.x=t.x+e.x,this.y=t.y+e.y,this.z=t.z+e.z,this.w=t.w+e.w,this},e.addScaledVector=function(t,e){return this.x+=t.x*e,this.y+=t.y*e,this.z+=t.z*e,this.w+=t.w*e,this},e.sub=function(t,e){return void 0!==e?(console.warn("THREE.Vector4: .sub() now only accepts one argument. Use .subVectors( a, b ) instead."),this.subVectors(t,e)):(this.x-=t.x,this.y-=t.y,this.z-=t.z,this.w-=t.w,this)},e.subScalar=function(t){return this.x-=t,this.y-=t,this.z-=t,this.w-=t,this},e.subVectors=function(t,e){return this.x=t.x-e.x,this.y=t.y-e.y,this.z=t.z-e.z,this.w=t.w-e.w,this},e.multiplyScalar=function(t){return this.x*=t,this.y*=t,this.z*=t,this.w*=t,this},e.applyMatrix4=function(t){var e=this.x,n=this.y,r=this.z,i=this.w,a=t.elements;return this.x=a[0]*e+a[4]*n+a[8]*r+a[12]*i,this.y=a[1]*e+a[5]*n+a[9]*r+a[13]*i,this.z=a[2]*e+a[6]*n+a[10]*r+a[14]*i, -this.w=a[3]*e+a[7]*n+a[11]*r+a[15]*i,this},e.divideScalar=function(t){return this.multiplyScalar(1/t)},e.setAxisAngleFromQuaternion=function(t){this.w=2*Math.acos(t.w);var e=Math.sqrt(1-t.w*t.w);return e<1e-4?(this.x=1,this.y=0,this.z=0):(this.x=t.x/e,this.y=t.y/e,this.z=t.z/e),this},e.setAxisAngleFromRotationMatrix=function(t){var e,n,r,i,a=t.elements,o=a[0],s=a[4],c=a[8],l=a[1],u=a[5],h=a[9],d=a[2],p=a[6],f=a[10];if(Math.abs(s-l)<.01&&Math.abs(c-d)<.01&&Math.abs(h-p)<.01){if(Math.abs(s+l)<.1&&Math.abs(c+d)<.1&&Math.abs(h+p)<.1&&Math.abs(o+u+f-3)<.1)return this.set(1,0,0,0),this;e=Math.PI;var m=(o+1)/2,v=(u+1)/2,g=(f+1)/2,y=(s+l)/4,x=(c+d)/4,b=(h+p)/4;return m>v&&m>g?m<.01?(n=0,r=.707106781,i=.707106781):(n=Math.sqrt(m),r=y/n,i=x/n):v>g?v<.01?(n=.707106781,r=0,i=.707106781):(r=Math.sqrt(v),n=y/r,i=b/r):g<.01?(n=.707106781,r=.707106781,i=0):(i=Math.sqrt(g),n=x/i,r=b/i),this.set(n,r,i,e),this}var _=Math.sqrt((p-h)*(p-h)+(c-d)*(c-d)+(l-s)*(l-s));return Math.abs(_)<.001&&(_=1),this.x=(p-h)/_,this.y=(c-d)/_,this.z=(l-s)/_,this.w=Math.acos((o+u+f-1)/2),this},e.min=function(t){return this.x=Math.min(this.x,t.x),this.y=Math.min(this.y,t.y),this.z=Math.min(this.z,t.z),this.w=Math.min(this.w,t.w),this},e.max=function(t){return this.x=Math.max(this.x,t.x),this.y=Math.max(this.y,t.y),this.z=Math.max(this.z,t.z),this.w=Math.max(this.w,t.w),this},e.clamp=function(t,e){return this.x=Math.max(t.x,Math.min(e.x,this.x)),this.y=Math.max(t.y,Math.min(e.y,this.y)),this.z=Math.max(t.z,Math.min(e.z,this.z)),this.w=Math.max(t.w,Math.min(e.w,this.w)),this},e.clampScalar=function(t,e){return this.x=Math.max(t,Math.min(e,this.x)),this.y=Math.max(t,Math.min(e,this.y)),this.z=Math.max(t,Math.min(e,this.z)),this.w=Math.max(t,Math.min(e,this.w)),this},e.clampLength=function(t,e){var n=this.length();return this.divideScalar(n||1).multiplyScalar(Math.max(t,Math.min(e,n)))},e.floor=function(){return this.x=Math.floor(this.x),this.y=Math.floor(this.y),this.z=Math.floor(this.z),this.w=Math.floor(this.w),this},e.ceil=function(){return this.x=Math.ceil(this.x),this.y=Math.ceil(this.y),this.z=Math.ceil(this.z),this.w=Math.ceil(this.w),this},e.round=function(){return this.x=Math.round(this.x),this.y=Math.round(this.y),this.z=Math.round(this.z),this.w=Math.round(this.w),this},e.roundToZero=function(){return this.x=this.x<0?Math.ceil(this.x):Math.floor(this.x),this.y=this.y<0?Math.ceil(this.y):Math.floor(this.y),this.z=this.z<0?Math.ceil(this.z):Math.floor(this.z),this.w=this.w<0?Math.ceil(this.w):Math.floor(this.w),this},e.negate=function(){return this.x=-this.x,this.y=-this.y,this.z=-this.z,this.w=-this.w,this},e.dot=function(t){return this.x*t.x+this.y*t.y+this.z*t.z+this.w*t.w},e.lengthSq=function(){return this.x*this.x+this.y*this.y+this.z*this.z+this.w*this.w},e.length=function(){return Math.sqrt(this.x*this.x+this.y*this.y+this.z*this.z+this.w*this.w)},e.manhattanLength=function(){return Math.abs(this.x)+Math.abs(this.y)+Math.abs(this.z)+Math.abs(this.w)},e.normalize=function(){return this.divideScalar(this.length()||1)},e.setLength=function(t){return this.normalize().multiplyScalar(t)},e.lerp=function(t,e){return this.x+=(t.x-this.x)*e,this.y+=(t.y-this.y)*e,this.z+=(t.z-this.z)*e,this.w+=(t.w-this.w)*e,this},e.lerpVectors=function(t,e,n){return this.x=t.x+(e.x-t.x)*n,this.y=t.y+(e.y-t.y)*n,this.z=t.z+(e.z-t.z)*n,this.w=t.w+(e.w-t.w)*n,this},e.equals=function(t){return t.x===this.x&&t.y===this.y&&t.z===this.z&&t.w===this.w},e.fromArray=function(t,e){return void 0===e&&(e=0),this.x=t[e],this.y=t[e+1],this.z=t[e+2],this.w=t[e+3],this},e.toArray=function(t,e){return void 0===t&&(t=[]),void 0===e&&(e=0),t[e]=this.x,t[e+1]=this.y,t[e+2]=this.z,t[e+3]=this.w,t},e.fromBufferAttribute=function(t,e,n){return void 0!==n&&console.warn("THREE.Vector4: offset has been removed from .fromBufferAttribute()."),this.x=t.getX(e),this.y=t.getY(e),this.z=t.getZ(e),this.w=t.getW(e),this},e.random=function(){return this.x=Math.random(),this.y=Math.random(),this.z=Math.random(),this.w=Math.random(),this},r(t,[{key:"width",get:function(){return this.z},set:function(t){this.z=t}},{key:"height",get:function(){return this.w},set:function(t){this.w=t}}]),t}();c.prototype=Object.assign(Object.create(e.prototype),{constructor:c,isWebGLRenderTarget:!0,setSize:function(t,e){this.width===t&&this.height===e||(this.width=t,this.height=e,this.texture.image.width=t,this.texture.image.height=e,this.dispose()),this.viewport.set(0,0,t,e),this.scissor.set(0,0,t,e)},clone:function(){return(new this.constructor).copy(this)},copy:function(t){return this.width=t.width,this.height=t.height,this.viewport.copy(t.viewport),this.texture=t.texture.clone(),this.depthBuffer=t.depthBuffer,this.stencilBuffer=t.stencilBuffer,this.depthTexture=t.depthTexture,this},dispose:function(){this.dispatchEvent({type:"dispose"})}}),l.prototype=Object.assign(Object.create(c.prototype),{constructor:l,isWebGLMultisampleRenderTarget:!0,copy:function(t){return c.prototype.copy.call(this,t),this.samples=t.samples,this}});var Pc=function(){function t(t,e,n,r){void 0===t&&(t=0),void 0===e&&(e=0),void 0===n&&(n=0),void 0===r&&(r=1),Object.defineProperty(this,"isQuaternion",{value:!0}),this._x=t,this._y=e,this._z=n,this._w=r}t.slerp=function(t,e,n,r){return n.copy(t).slerp(e,r)},t.slerpFlat=function(t,e,n,r,i,a,o){var s=n[r+0],c=n[r+1],l=n[r+2],u=n[r+3],h=i[a+0],d=i[a+1],p=i[a+2],f=i[a+3];if(u!==f||s!==h||c!==d||l!==p){var m=1-o,v=s*h+c*d+l*p+u*f,g=v>=0?1:-1,y=1-v*v;if(y>Number.EPSILON){var x=Math.sqrt(y),b=Math.atan2(x,v*g);m=Math.sin(m*b)/x,o=Math.sin(o*b)/x}var _=o*g;if(s=s*m+h*_,c=c*m+d*_,l=l*m+p*_,u=u*m+f*_,m===1-o){var w=1/Math.sqrt(s*s+c*c+l*l+u*u);s*=w,c*=w,l*=w,u*=w}}t[e]=s,t[e+1]=c,t[e+2]=l,t[e+3]=u},t.multiplyQuaternionsFlat=function(t,e,n,r,i,a){var o=n[r],s=n[r+1],c=n[r+2],l=n[r+3],u=i[a],h=i[a+1],d=i[a+2],p=i[a+3];return t[e]=o*p+l*u+s*d-c*h,t[e+1]=s*p+l*h+c*u-o*d,t[e+2]=c*p+l*d+o*h-s*u,t[e+3]=l*p-o*u-s*h-c*d,t};var e=t.prototype;return e.set=function(t,e,n,r){return this._x=t,this._y=e,this._z=n,this._w=r,this._onChangeCallback(),this},e.clone=function(){return new this.constructor(this._x,this._y,this._z,this._w)},e.copy=function(t){return this._x=t.x,this._y=t.y,this._z=t.z,this._w=t.w,this._onChangeCallback(),this},e.setFromEuler=function(t,e){if(!t||!t.isEuler)throw new Error("THREE.Quaternion: .setFromEuler() now expects an Euler rotation rather than a Vector3 and order.");var n=t._x,r=t._y,i=t._z,a=t._order,o=Math.cos,s=Math.sin,c=o(n/2),l=o(r/2),u=o(i/2),h=s(n/2),d=s(r/2),p=s(i/2);switch(a){case"XYZ":this._x=h*l*u+c*d*p,this._y=c*d*u-h*l*p,this._z=c*l*p+h*d*u,this._w=c*l*u-h*d*p;break;case"YXZ":this._x=h*l*u+c*d*p,this._y=c*d*u-h*l*p,this._z=c*l*p-h*d*u,this._w=c*l*u+h*d*p;break;case"ZXY":this._x=h*l*u-c*d*p,this._y=c*d*u+h*l*p,this._z=c*l*p+h*d*u,this._w=c*l*u-h*d*p;break;case"ZYX":this._x=h*l*u-c*d*p,this._y=c*d*u+h*l*p,this._z=c*l*p-h*d*u,this._w=c*l*u+h*d*p;break;case"YZX":this._x=h*l*u+c*d*p,this._y=c*d*u+h*l*p,this._z=c*l*p-h*d*u,this._w=c*l*u-h*d*p;break;case"XZY":this._x=h*l*u-c*d*p,this._y=c*d*u-h*l*p,this._z=c*l*p+h*d*u,this._w=c*l*u+h*d*p;break;default:console.warn("THREE.Quaternion: .setFromEuler() encountered an unknown order: "+a)}return!1!==e&&this._onChangeCallback(),this},e.setFromAxisAngle=function(t,e){var n=e/2,r=Math.sin(n);return this._x=t.x*r,this._y=t.y*r,this._z=t.z*r,this._w=Math.cos(n),this._onChangeCallback(),this},e.setFromRotationMatrix=function(t){var e=t.elements,n=e[0],r=e[4],i=e[8],a=e[1],o=e[5],s=e[9],c=e[2],l=e[6],u=e[10],h=n+o+u;if(h>0){var d=.5/Math.sqrt(h+1);this._w=.25/d,this._x=(l-s)*d,this._y=(i-c)*d,this._z=(a-r)*d}else if(n>o&&n>u){var p=2*Math.sqrt(1+n-o-u);this._w=(l-s)/p,this._x=.25*p,this._y=(r+a)/p,this._z=(i+c)/p}else if(o>u){var f=2*Math.sqrt(1+o-n-u);this._w=(i-c)/f,this._x=(r+a)/f,this._y=.25*f,this._z=(s+l)/f}else{var m=2*Math.sqrt(1+u-n-o);this._w=(a-r)/m,this._x=(i+c)/m,this._y=(s+l)/m,this._z=.25*m}return this._onChangeCallback(),this},e.setFromUnitVectors=function(t,e){var n=t.dot(e)+1;return n<1e-6?(n=0,Math.abs(t.x)>Math.abs(t.z)?(this._x=-t.y,this._y=t.x,this._z=0,this._w=n):(this._x=0,this._y=-t.z,this._z=t.y,this._w=n)):(this._x=t.y*e.z-t.z*e.y,this._y=t.z*e.x-t.x*e.z,this._z=t.x*e.y-t.y*e.x,this._w=n),this.normalize()},e.angleTo=function(t){return 2*Math.acos(Math.abs(Tc.clamp(this.dot(t),-1,1)))},e.rotateTowards=function(t,e){var n=this.angleTo(t);if(0===n)return this;var r=Math.min(1,e/n);return this.slerp(t,r),this},e.identity=function(){return this.set(0,0,0,1)},e.invert=function(){return this.conjugate()},e.conjugate=function(){return this._x*=-1,this._y*=-1,this._z*=-1,this._onChangeCallback(),this},e.dot=function(t){return this._x*t._x+this._y*t._y+this._z*t._z+this._w*t._w},e.lengthSq=function(){return this._x*this._x+this._y*this._y+this._z*this._z+this._w*this._w},e.length=function(){return Math.sqrt(this._x*this._x+this._y*this._y+this._z*this._z+this._w*this._w)},e.normalize=function(){var t=this.length();return 0===t?(this._x=0,this._y=0,this._z=0,this._w=1):(t=1/t,this._x=this._x*t,this._y=this._y*t,this._z=this._z*t,this._w=this._w*t),this._onChangeCallback(),this},e.multiply=function(t,e){return void 0!==e?(console.warn("THREE.Quaternion: .multiply() now only accepts one argument. Use .multiplyQuaternions( a, b ) instead."),this.multiplyQuaternions(t,e)):this.multiplyQuaternions(this,t)},e.premultiply=function(t){return this.multiplyQuaternions(t,this)},e.multiplyQuaternions=function(t,e){var n=t._x,r=t._y,i=t._z,a=t._w,o=e._x,s=e._y,c=e._z,l=e._w;return this._x=n*l+a*o+r*c-i*s,this._y=r*l+a*s+i*o-n*c,this._z=i*l+a*c+n*s-r*o,this._w=a*l-n*o-r*s-i*c,this._onChangeCallback(),this},e.slerp=function(t,e){if(0===e)return this;if(1===e)return this.copy(t);var n=this._x,r=this._y,i=this._z,a=this._w,o=a*t._w+n*t._x+r*t._y+i*t._z;if(o<0?(this._w=-t._w,this._x=-t._x,this._y=-t._y,this._z=-t._z,o=-o):this.copy(t),o>=1)return this._w=a,this._x=n,this._y=r,this._z=i,this;var s=1-o*o;if(s<=Number.EPSILON){var c=1-e;return this._w=c*a+e*this._w,this._x=c*n+e*this._x,this._y=c*r+e*this._y,this._z=c*i+e*this._z,this.normalize(),this._onChangeCallback(),this}var l=Math.sqrt(s),u=Math.atan2(l,o),h=Math.sin((1-e)*u)/l,d=Math.sin(e*u)/l;return this._w=a*h+this._w*d,this._x=n*h+this._x*d,this._y=r*h+this._y*d,this._z=i*h+this._z*d,this._onChangeCallback(),this},e.equals=function(t){return t._x===this._x&&t._y===this._y&&t._z===this._z&&t._w===this._w},e.fromArray=function(t,e){return void 0===e&&(e=0),this._x=t[e],this._y=t[e+1],this._z=t[e+2],this._w=t[e+3],this._onChangeCallback(),this},e.toArray=function(t,e){return void 0===t&&(t=[]),void 0===e&&(e=0),t[e]=this._x,t[e+1]=this._y,t[e+2]=this._z,t[e+3]=this._w,t},e.fromBufferAttribute=function(t,e){return this._x=t.getX(e),this._y=t.getY(e),this._z=t.getZ(e),this._w=t.getW(e),this},e._onChange=function(t){return this._onChangeCallback=t,this},e._onChangeCallback=function(){},r(t,[{key:"x",get:function(){return this._x},set:function(t){this._x=t,this._onChangeCallback()}},{key:"y",get:function(){return this._y},set:function(t){this._y=t,this._onChangeCallback()}},{key:"z",get:function(){return this._z},set:function(t){this._z=t,this._onChangeCallback()}},{key:"w",get:function(){return this._w},set:function(t){this._w=t,this._onChangeCallback()}}]),t}(),Dc=function(){function t(t,e,n){void 0===t&&(t=0),void 0===e&&(e=0),void 0===n&&(n=0),Object.defineProperty(this,"isVector3",{value:!0}),this.x=t,this.y=e,this.z=n}var e=t.prototype;return e.set=function(t,e,n){return void 0===n&&(n=this.z),this.x=t,this.y=e,this.z=n,this},e.setScalar=function(t){return this.x=t,this.y=t,this.z=t,this},e.setX=function(t){return this.x=t,this},e.setY=function(t){return this.y=t,this},e.setZ=function(t){return this.z=t,this},e.setComponent=function(t,e){switch(t){case 0:this.x=e;break;case 1:this.y=e;break;case 2:this.z=e;break;default:throw new Error("index is out of range: "+t)}return this},e.getComponent=function(t){switch(t){case 0:return this.x;case 1:return this.y;case 2:return this.z;default:throw new Error("index is out of range: "+t)}},e.clone=function(){return new this.constructor(this.x,this.y,this.z)},e.copy=function(t){return this.x=t.x,this.y=t.y,this.z=t.z,this},e.add=function(t,e){return void 0!==e?(console.warn("THREE.Vector3: .add() now only accepts one argument. Use .addVectors( a, b ) instead."),this.addVectors(t,e)):(this.x+=t.x,this.y+=t.y,this.z+=t.z,this)},e.addScalar=function(t){return this.x+=t,this.y+=t,this.z+=t,this},e.addVectors=function(t,e){return this.x=t.x+e.x,this.y=t.y+e.y,this.z=t.z+e.z,this},e.addScaledVector=function(t,e){return this.x+=t.x*e,this.y+=t.y*e,this.z+=t.z*e,this},e.sub=function(t,e){return void 0!==e?(console.warn("THREE.Vector3: .sub() now only accepts one argument. Use .subVectors( a, b ) instead."),this.subVectors(t,e)):(this.x-=t.x,this.y-=t.y,this.z-=t.z,this)},e.subScalar=function(t){return this.x-=t,this.y-=t,this.z-=t,this},e.subVectors=function(t,e){return this.x=t.x-e.x,this.y=t.y-e.y,this.z=t.z-e.z,this},e.multiply=function(t,e){return void 0!==e?(console.warn("THREE.Vector3: .multiply() now only accepts one argument. Use .multiplyVectors( a, b ) instead."),this.multiplyVectors(t,e)):(this.x*=t.x,this.y*=t.y,this.z*=t.z,this)},e.multiplyScalar=function(t){return this.x*=t,this.y*=t,this.z*=t,this},e.multiplyVectors=function(t,e){return this.x=t.x*e.x,this.y=t.y*e.y,this.z=t.z*e.z,this},e.applyEuler=function(t){return t&&t.isEuler||console.error("THREE.Vector3: .applyEuler() now expects an Euler rotation rather than a Vector3 and order."),this.applyQuaternion(Ic.setFromEuler(t))},e.applyAxisAngle=function(t,e){return this.applyQuaternion(Ic.setFromAxisAngle(t,e))},e.applyMatrix3=function(t){var e=this.x,n=this.y,r=this.z,i=t.elements;return this.x=i[0]*e+i[3]*n+i[6]*r,this.y=i[1]*e+i[4]*n+i[7]*r,this.z=i[2]*e+i[5]*n+i[8]*r,this},e.applyNormalMatrix=function(t){return this.applyMatrix3(t).normalize()},e.applyMatrix4=function(t){var e=this.x,n=this.y,r=this.z,i=t.elements,a=1/(i[3]*e+i[7]*n+i[11]*r+i[15]);return this.x=(i[0]*e+i[4]*n+i[8]*r+i[12])*a,this.y=(i[1]*e+i[5]*n+i[9]*r+i[13])*a,this.z=(i[2]*e+i[6]*n+i[10]*r+i[14])*a,this},e.applyQuaternion=function(t){var e=this.x,n=this.y,r=this.z,i=t.x,a=t.y,o=t.z,s=t.w,c=s*e+a*r-o*n,l=s*n+o*e-i*r,u=s*r+i*n-a*e,h=-i*e-a*n-o*r;return this.x=c*s+h*-i+l*-o-u*-a,this.y=l*s+h*-a+u*-i-c*-o,this.z=u*s+h*-o+c*-a-l*-i,this},e.project=function(t){return this.applyMatrix4(t.matrixWorldInverse).applyMatrix4(t.projectionMatrix)},e.unproject=function(t){return this.applyMatrix4(t.projectionMatrixInverse).applyMatrix4(t.matrixWorld)},e.transformDirection=function(t){var e=this.x,n=this.y,r=this.z,i=t.elements;return this.x=i[0]*e+i[4]*n+i[8]*r,this.y=i[1]*e+i[5]*n+i[9]*r,this.z=i[2]*e+i[6]*n+i[10]*r,this.normalize()},e.divide=function(t){return this.x/=t.x,this.y/=t.y,this.z/=t.z,this},e.divideScalar=function(t){return this.multiplyScalar(1/t)},e.min=function(t){return this.x=Math.min(this.x,t.x),this.y=Math.min(this.y,t.y),this.z=Math.min(this.z,t.z),this},e.max=function(t){return this.x=Math.max(this.x,t.x),this.y=Math.max(this.y,t.y),this.z=Math.max(this.z,t.z),this},e.clamp=function(t,e){return this.x=Math.max(t.x,Math.min(e.x,this.x)),this.y=Math.max(t.y,Math.min(e.y,this.y)),this.z=Math.max(t.z,Math.min(e.z,this.z)),this},e.clampScalar=function(t,e){return this.x=Math.max(t,Math.min(e,this.x)),this.y=Math.max(t,Math.min(e,this.y)),this.z=Math.max(t,Math.min(e,this.z)),this},e.clampLength=function(t,e){var n=this.length();return this.divideScalar(n||1).multiplyScalar(Math.max(t,Math.min(e,n)))},e.floor=function(){return this.x=Math.floor(this.x),this.y=Math.floor(this.y),this.z=Math.floor(this.z),this},e.ceil=function(){return this.x=Math.ceil(this.x),this.y=Math.ceil(this.y),this.z=Math.ceil(this.z),this},e.round=function(){return this.x=Math.round(this.x),this.y=Math.round(this.y),this.z=Math.round(this.z),this},e.roundToZero=function(){return this.x=this.x<0?Math.ceil(this.x):Math.floor(this.x),this.y=this.y<0?Math.ceil(this.y):Math.floor(this.y),this.z=this.z<0?Math.ceil(this.z):Math.floor(this.z),this},e.negate=function(){return this.x=-this.x,this.y=-this.y,this.z=-this.z,this},e.dot=function(t){return this.x*t.x+this.y*t.y+this.z*t.z},e.lengthSq=function(){return this.x*this.x+this.y*this.y+this.z*this.z},e.length=function(){return Math.sqrt(this.x*this.x+this.y*this.y+this.z*this.z)},e.manhattanLength=function(){return Math.abs(this.x)+Math.abs(this.y)+Math.abs(this.z)},e.normalize=function(){return this.divideScalar(this.length()||1)},e.setLength=function(t){return this.normalize().multiplyScalar(t)},e.lerp=function(t,e){return this.x+=(t.x-this.x)*e,this.y+=(t.y-this.y)*e,this.z+=(t.z-this.z)*e,this},e.lerpVectors=function(t,e,n){return this.x=t.x+(e.x-t.x)*n,this.y=t.y+(e.y-t.y)*n,this.z=t.z+(e.z-t.z)*n,this},e.cross=function(t,e){return void 0!==e?(console.warn("THREE.Vector3: .cross() now only accepts one argument. Use .crossVectors( a, b ) instead."),this.crossVectors(t,e)):this.crossVectors(this,t)},e.crossVectors=function(t,e){var n=t.x,r=t.y,i=t.z,a=e.x,o=e.y,s=e.z;return this.x=r*s-i*o,this.y=i*a-n*s,this.z=n*o-r*a,this},e.projectOnVector=function(t){var e=t.lengthSq();if(0===e)return this.set(0,0,0);var n=t.dot(this)/e;return this.copy(t).multiplyScalar(n)},e.projectOnPlane=function(t){return Oc.copy(this).projectOnVector(t),this.sub(Oc)},e.reflect=function(t){return this.sub(Oc.copy(t).multiplyScalar(2*this.dot(t)))},e.angleTo=function(t){var e=Math.sqrt(this.lengthSq()*t.lengthSq());if(0===e)return Math.PI/2;var n=this.dot(t)/e;return Math.acos(Tc.clamp(n,-1,1))},e.distanceTo=function(t){return Math.sqrt(this.distanceToSquared(t))},e.distanceToSquared=function(t){var e=this.x-t.x,n=this.y-t.y,r=this.z-t.z;return e*e+n*n+r*r},e.manhattanDistanceTo=function(t){return Math.abs(this.x-t.x)+Math.abs(this.y-t.y)+Math.abs(this.z-t.z)},e.setFromSpherical=function(t){return this.setFromSphericalCoords(t.radius,t.phi,t.theta)},e.setFromSphericalCoords=function(t,e,n){var r=Math.sin(e)*t;return this.x=r*Math.sin(n),this.y=Math.cos(e)*t,this.z=r*Math.cos(n),this},e.setFromCylindrical=function(t){return this.setFromCylindricalCoords(t.radius,t.theta,t.y)},e.setFromCylindricalCoords=function(t,e,n){return this.x=t*Math.sin(e),this.y=n,this.z=t*Math.cos(e),this},e.setFromMatrixPosition=function(t){var e=t.elements;return this.x=e[12],this.y=e[13],this.z=e[14],this},e.setFromMatrixScale=function(t){var e=this.setFromMatrixColumn(t,0).length(),n=this.setFromMatrixColumn(t,1).length(),r=this.setFromMatrixColumn(t,2).length();return this.x=e,this.y=n,this.z=r,this},e.setFromMatrixColumn=function(t,e){return this.fromArray(t.elements,4*e)},e.setFromMatrix3Column=function(t,e){return this.fromArray(t.elements,3*e)},e.equals=function(t){return t.x===this.x&&t.y===this.y&&t.z===this.z},e.fromArray=function(t,e){return void 0===e&&(e=0),this.x=t[e],this.y=t[e+1],this.z=t[e+2],this},e.toArray=function(t,e){return void 0===t&&(t=[]),void 0===e&&(e=0),t[e]=this.x,t[e+1]=this.y,t[e+2]=this.z,t},e.fromBufferAttribute=function(t,e,n){return void 0!==n&&console.warn("THREE.Vector3: offset has been removed from .fromBufferAttribute()."),this.x=t.getX(e),this.y=t.getY(e),this.z=t.getZ(e),this},e.random=function(){return this.x=Math.random(),this.y=Math.random(),this.z=Math.random(),this},t}(),Oc=new Dc,Ic=new Pc,Nc=function(){function t(t,e){Object.defineProperty(this,"isBox3",{value:!0}),this.min=void 0!==t?t:new Dc(1/0,1/0,1/0),this.max=void 0!==e?e:new Dc(-1/0,-1/0,-1/0)}var e=t.prototype;return e.set=function(t,e){return this.min.copy(t),this.max.copy(e),this},e.setFromArray=function(t){for(var e=1/0,n=1/0,r=1/0,i=-1/0,a=-1/0,o=-1/0,s=0,c=t.length;si&&(i=l),u>a&&(a=u),h>o&&(o=h)}return this.min.set(e,n,r),this.max.set(i,a,o),this},e.setFromBufferAttribute=function(t){for(var e=1/0,n=1/0,r=1/0,i=-1/0,a=-1/0,o=-1/0,s=0,c=t.count;si&&(i=l),u>a&&(a=u),h>o&&(o=h)}return this.min.set(e,n,r),this.max.set(i,a,o),this},e.setFromPoints=function(t){this.makeEmpty();for(var e=0,n=t.length;ethis.max.x||t.ythis.max.y||t.zthis.max.z)},e.containsBox=function(t){return this.min.x<=t.min.x&&t.max.x<=this.max.x&&this.min.y<=t.min.y&&t.max.y<=this.max.y&&this.min.z<=t.min.z&&t.max.z<=this.max.z},e.getParameter=function(t,e){return void 0===e&&(console.warn("THREE.Box3: .getParameter() target is now required"),e=new Dc),e.set((t.x-this.min.x)/(this.max.x-this.min.x),(t.y-this.min.y)/(this.max.y-this.min.y),(t.z-this.min.z)/(this.max.z-this.min.z))},e.intersectsBox=function(t){return!(t.max.xthis.max.x||t.max.ythis.max.y||t.max.zthis.max.z)},e.intersectsSphere=function(t){return this.clampPoint(t.center,zc),zc.distanceToSquared(t.center)<=t.radius*t.radius},e.intersectsPlane=function(t){var e,n;return t.normal.x>0?(e=t.normal.x*this.min.x,n=t.normal.x*this.max.x):(e=t.normal.x*this.max.x,n=t.normal.x*this.min.x),t.normal.y>0?(e+=t.normal.y*this.min.y,n+=t.normal.y*this.max.y):(e+=t.normal.y*this.max.y,n+=t.normal.y*this.min.y),t.normal.z>0?(e+=t.normal.z*this.min.z,n+=t.normal.z*this.max.z):(e+=t.normal.z*this.max.z,n+=t.normal.z*this.min.z),e<=-t.constant&&n>=-t.constant},e.intersectsTriangle=function(t){if(this.isEmpty())return!1;this.getCenter(jc),qc.subVectors(this.max,jc),Gc.subVectors(t.a,jc),Uc.subVectors(t.b,jc),Hc.subVectors(t.c,jc),kc.subVectors(Uc,Gc),Vc.subVectors(Hc,Uc),Wc.subVectors(Gc,Hc);var e=[0,-kc.z,kc.y,0,-Vc.z,Vc.y,0,-Wc.z,Wc.y,kc.z,0,-kc.x,Vc.z,0,-Vc.x,Wc.z,0,-Wc.x,-kc.y,kc.x,0,-Vc.y,Vc.x,0,-Wc.y,Wc.x,0];return!!u(e,Gc,Uc,Hc,qc)&&(e=[1,0,0,0,1,0,0,0,1],!!u(e,Gc,Uc,Hc,qc)&&(Xc.crossVectors(kc,Vc),e=[Xc.x,Xc.y,Xc.z],u(e,Gc,Uc,Hc,qc)))},e.clampPoint=function(t,e){return void 0===e&&(console.warn("THREE.Box3: .clampPoint() target is now required"),e=new Dc),e.copy(t).clamp(this.min,this.max)},e.distanceToPoint=function(t){return zc.copy(t).clamp(this.min,this.max).sub(t).length()},e.getBoundingSphere=function(t){return void 0===t&&console.error("THREE.Box3: .getBoundingSphere() target is now required"),this.getCenter(t.center),t.radius=.5*this.getSize(zc).length(),t},e.intersect=function(t){return this.min.max(t.min),this.max.min(t.max),this.isEmpty()&&this.makeEmpty(),this},e.union=function(t){return this.min.min(t.min),this.max.max(t.max),this},e.applyMatrix4=function(t){return this.isEmpty()?this:(Bc[0].set(this.min.x,this.min.y,this.min.z).applyMatrix4(t),Bc[1].set(this.min.x,this.min.y,this.max.z).applyMatrix4(t),Bc[2].set(this.min.x,this.max.y,this.min.z).applyMatrix4(t),Bc[3].set(this.min.x,this.max.y,this.max.z).applyMatrix4(t),Bc[4].set(this.max.x,this.min.y,this.min.z).applyMatrix4(t),Bc[5].set(this.max.x,this.min.y,this.max.z).applyMatrix4(t),Bc[6].set(this.max.x,this.max.y,this.min.z).applyMatrix4(t),Bc[7].set(this.max.x,this.max.y,this.max.z).applyMatrix4(t),this.setFromPoints(Bc),this)},e.translate=function(t){return this.min.add(t),this.max.add(t),this},e.equals=function(t){return t.min.equals(this.min)&&t.max.equals(this.max)},t}(),Bc=[new Dc,new Dc,new Dc,new Dc,new Dc,new Dc,new Dc,new Dc],zc=new Dc,Fc=new Nc,Gc=new Dc,Uc=new Dc,Hc=new Dc,kc=new Dc,Vc=new Dc,Wc=new Dc,jc=new Dc,qc=new Dc,Xc=new Dc,Yc=new Dc,Zc=new Nc,Jc=function(){function t(t,e){this.center=void 0!==t?t:new Dc,this.radius=void 0!==e?e:-1}var e=t.prototype;return e.set=function(t,e){return this.center.copy(t),this.radius=e,this},e.setFromPoints=function(t,e){var n=this.center;void 0!==e?n.copy(e):Zc.setFromPoints(t).getCenter(n);for(var r=0,i=0,a=t.length;ithis.radius*this.radius&&(e.sub(this.center).normalize(),e.multiplyScalar(this.radius).add(this.center)),e},e.getBoundingBox=function(t){return void 0===t&&(console.warn("THREE.Sphere: .getBoundingBox() target is now required"),t=new Nc),this.isEmpty()?(t.makeEmpty(),t):(t.set(this.center,this.center),t.expandByScalar(this.radius),t)},e.applyMatrix4=function(t){return this.center.applyMatrix4(t),this.radius=this.radius*t.getMaxScaleOnAxis(),this},e.translate=function(t){return this.center.add(t),this},e.equals=function(t){return t.center.equals(this.center)&&t.radius===this.radius},t}(),Qc=new Dc,Kc=new Dc,$c=new Dc,tl=new Dc,el=new Dc,nl=new Dc,rl=new Dc,il=function(){function t(t,e){this.origin=void 0!==t?t:new Dc,this.direction=void 0!==e?e:new Dc(0,0,-1)}var e=t.prototype;return e.set=function(t,e){return this.origin.copy(t),this.direction.copy(e),this},e.clone=function(){return(new this.constructor).copy(this)},e.copy=function(t){return this.origin.copy(t.origin),this.direction.copy(t.direction),this},e.at=function(t,e){return void 0===e&&(console.warn("THREE.Ray: .at() target is now required"),e=new Dc),e.copy(this.direction).multiplyScalar(t).add(this.origin)},e.lookAt=function(t){return this.direction.copy(t).sub(this.origin).normalize(),this},e.recast=function(t){return this.origin.copy(this.at(t,Qc)),this},e.closestPointToPoint=function(t,e){void 0===e&&(console.warn("THREE.Ray: .closestPointToPoint() target is now required"),e=new Dc),e.subVectors(t,this.origin);var n=e.dot(this.direction);return n<0?e.copy(this.origin):e.copy(this.direction).multiplyScalar(n).add(this.origin)},e.distanceToPoint=function(t){return Math.sqrt(this.distanceSqToPoint(t))},e.distanceSqToPoint=function(t){var e=Qc.subVectors(t,this.origin).dot(this.direction);return e<0?this.origin.distanceToSquared(t):(Qc.copy(this.direction).multiplyScalar(e).add(this.origin),Qc.distanceToSquared(t))},e.distanceSqToSegment=function(t,e,n,r){Kc.copy(t).add(e).multiplyScalar(.5),$c.copy(e).sub(t).normalize(),tl.copy(this.origin).sub(Kc);var i,a,o,s,c=.5*t.distanceTo(e),l=-this.direction.dot($c),u=tl.dot(this.direction),h=-tl.dot($c),d=tl.lengthSq(),p=Math.abs(1-l*l);if(p>0)if(i=l*h-u,a=l*u-h,s=c*p,i>=0)if(a>=-s)if(a<=s){var f=1/p;i*=f,a*=f,o=i*(i+l*a+2*u)+a*(l*i+a+2*h)+d}else a=c,i=Math.max(0,-(l*a+u)),o=-i*i+a*(a+2*h)+d;else a=-c,i=Math.max(0,-(l*a+u)),o=-i*i+a*(a+2*h)+d;else a<=-s?(i=Math.max(0,-(-l*c+u)),a=i>0?-c:Math.min(Math.max(-c,-h),c),o=-i*i+a*(a+2*h)+d):a<=s?(i=0,a=Math.min(Math.max(-c,-h),c),o=a*(a+2*h)+d):(i=Math.max(0,-(l*c+u)),a=i>0?c:Math.min(Math.max(-c,-h),c),o=-i*i+a*(a+2*h)+d);else a=l>0?-c:c,i=Math.max(0,-(l*a+u)),o=-i*i+a*(a+2*h)+d;return n&&n.copy(this.direction).multiplyScalar(i).add(this.origin),r&&r.copy($c).multiplyScalar(a).add(Kc),o},e.intersectSphere=function(t,e){Qc.subVectors(t.center,this.origin);var n=Qc.dot(this.direction),r=Qc.dot(Qc)-n*n,i=t.radius*t.radius;if(r>i)return null;var a=Math.sqrt(i-r),o=n-a,s=n+a;return o<0&&s<0?null:o<0?this.at(s,e):this.at(o,e)},e.intersectsSphere=function(t){return this.distanceSqToPoint(t.center)<=t.radius*t.radius},e.distanceToPlane=function(t){var e=t.normal.dot(this.direction);if(0===e)return 0===t.distanceToPoint(this.origin)?0:null;var n=-(this.origin.dot(t.normal)+t.constant)/e;return n>=0?n:null},e.intersectPlane=function(t,e){var n=this.distanceToPlane(t);return null===n?null:this.at(n,e)},e.intersectsPlane=function(t){var e=t.distanceToPoint(this.origin);return 0===e||t.normal.dot(this.direction)*e<0},e.intersectBox=function(t,e){var n,r,i,a,o,s,c=1/this.direction.x,l=1/this.direction.y,u=1/this.direction.z,h=this.origin;return c>=0?(n=(t.min.x-h.x)*c,r=(t.max.x-h.x)*c):(n=(t.max.x-h.x)*c,r=(t.min.x-h.x)*c),l>=0?(i=(t.min.y-h.y)*l,a=(t.max.y-h.y)*l):(i=(t.max.y-h.y)*l,a=(t.min.y-h.y)*l),n>a||i>r?null:((i>n||n!==n)&&(n=i),(a=0?(o=(t.min.z-h.z)*u,s=(t.max.z-h.z)*u):(o=(t.max.z-h.z)*u,s=(t.min.z-h.z)*u),n>s||o>r?null:((o>n||n!==n)&&(n=o),(s=0?n:r,e)))},e.intersectsBox=function(t){return null!==this.intersectBox(t,Qc)},e.intersectTriangle=function(t,e,n,r,i){el.subVectors(e,t),nl.subVectors(n,t),rl.crossVectors(el,nl);var a,o=this.direction.dot(rl);if(o>0){if(r)return null;a=1}else{if(!(o<0))return null;a=-1,o=-o}tl.subVectors(this.origin,t);var s=a*this.direction.dot(nl.crossVectors(tl,nl));if(s<0)return null;var c=a*this.direction.dot(el.cross(tl));if(c<0)return null;if(s+c>o)return null;var l=-a*tl.dot(rl);return l<0?null:this.at(l/o,i)},e.applyMatrix4=function(t){return this.origin.applyMatrix4(t),this.direction.transformDirection(t),this},e.equals=function(t){return t.origin.equals(this.origin)&&t.direction.equals(this.direction)},t}(),al=function(){function t(){Object.defineProperty(this,"isMatrix4",{value:!0}),this.elements=[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1],arguments.length>0&&console.error("THREE.Matrix4: the constructor no longer reads arguments. use .set() instead.")}var e=t.prototype;return e.set=function(t,e,n,r,i,a,o,s,c,l,u,h,d,p,f,m){var v=this.elements;return v[0]=t,v[4]=e,v[8]=n,v[12]=r,v[1]=i,v[5]=a,v[9]=o,v[13]=s,v[2]=c,v[6]=l,v[10]=u,v[14]=h,v[3]=d,v[7]=p,v[11]=f,v[15]=m,this},e.identity=function(){return this.set(1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1),this},e.clone=function(){return(new t).fromArray(this.elements)},e.copy=function(t){var e=this.elements,n=t.elements;return e[0]=n[0],e[1]=n[1],e[2]=n[2],e[3]=n[3],e[4]=n[4],e[5]=n[5],e[6]=n[6],e[7]=n[7],e[8]=n[8],e[9]=n[9],e[10]=n[10],e[11]=n[11],e[12]=n[12],e[13]=n[13],e[14]=n[14],e[15]=n[15],this},e.copyPosition=function(t){var e=this.elements,n=t.elements;return e[12]=n[12],e[13]=n[13],e[14]=n[14],this},e.extractBasis=function(t,e,n){return t.setFromMatrixColumn(this,0), -e.setFromMatrixColumn(this,1),n.setFromMatrixColumn(this,2),this},e.makeBasis=function(t,e,n){return this.set(t.x,e.x,n.x,0,t.y,e.y,n.y,0,t.z,e.z,n.z,0,0,0,0,1),this},e.extractRotation=function(t){var e=this.elements,n=t.elements,r=1/ol.setFromMatrixColumn(t,0).length(),i=1/ol.setFromMatrixColumn(t,1).length(),a=1/ol.setFromMatrixColumn(t,2).length();return e[0]=n[0]*r,e[1]=n[1]*r,e[2]=n[2]*r,e[3]=0,e[4]=n[4]*i,e[5]=n[5]*i,e[6]=n[6]*i,e[7]=0,e[8]=n[8]*a,e[9]=n[9]*a,e[10]=n[10]*a,e[11]=0,e[12]=0,e[13]=0,e[14]=0,e[15]=1,this},e.makeRotationFromEuler=function(t){t&&t.isEuler||console.error("THREE.Matrix4: .makeRotationFromEuler() now expects a Euler rotation rather than a Vector3 and order.");var e=this.elements,n=t.x,r=t.y,i=t.z,a=Math.cos(n),o=Math.sin(n),s=Math.cos(r),c=Math.sin(r),l=Math.cos(i),u=Math.sin(i);if("XYZ"===t.order){var h=a*l,d=a*u,p=o*l,f=o*u;e[0]=s*l,e[4]=-s*u,e[8]=c,e[1]=d+p*c,e[5]=h-f*c,e[9]=-o*s,e[2]=f-h*c,e[6]=p+d*c,e[10]=a*s}else if("YXZ"===t.order){var m=s*l,v=s*u,g=c*l,y=c*u;e[0]=m+y*o,e[4]=g*o-v,e[8]=a*c,e[1]=a*u,e[5]=a*l,e[9]=-o,e[2]=v*o-g,e[6]=y+m*o,e[10]=a*s}else if("ZXY"===t.order){var x=s*l,b=s*u,_=c*l,w=c*u;e[0]=x-w*o,e[4]=-a*u,e[8]=_+b*o,e[1]=b+_*o,e[5]=a*l,e[9]=w-x*o,e[2]=-a*c,e[6]=o,e[10]=a*s}else if("ZYX"===t.order){var M=a*l,S=a*u,T=o*l,E=o*u;e[0]=s*l,e[4]=T*c-S,e[8]=M*c+E,e[1]=s*u,e[5]=E*c+M,e[9]=S*c-T,e[2]=-c,e[6]=o*s,e[10]=a*s}else if("YZX"===t.order){var A=a*s,L=a*c,R=o*s,C=o*c;e[0]=s*l,e[4]=C-A*u,e[8]=R*u+L,e[1]=u,e[5]=a*l,e[9]=-o*l,e[2]=-c*l,e[6]=L*u+R,e[10]=A-C*u}else if("XZY"===t.order){var P=a*s,D=a*c,O=o*s,I=o*c;e[0]=s*l,e[4]=-u,e[8]=c*l,e[1]=P*u+I,e[5]=a*l,e[9]=D*u-O,e[2]=O*u-D,e[6]=o*l,e[10]=I*u+P}return e[3]=0,e[7]=0,e[11]=0,e[12]=0,e[13]=0,e[14]=0,e[15]=1,this},e.makeRotationFromQuaternion=function(t){return this.compose(cl,t,ll)},e.lookAt=function(t,e,n){var r=this.elements;return dl.subVectors(t,e),0===dl.lengthSq()&&(dl.z=1),dl.normalize(),ul.crossVectors(n,dl),0===ul.lengthSq()&&(1===Math.abs(n.z)?dl.x+=1e-4:dl.z+=1e-4,dl.normalize(),ul.crossVectors(n,dl)),ul.normalize(),hl.crossVectors(dl,ul),r[0]=ul.x,r[4]=hl.x,r[8]=dl.x,r[1]=ul.y,r[5]=hl.y,r[9]=dl.y,r[2]=ul.z,r[6]=hl.z,r[10]=dl.z,this},e.multiply=function(t,e){return void 0!==e?(console.warn("THREE.Matrix4: .multiply() now only accepts one argument. Use .multiplyMatrices( a, b ) instead."),this.multiplyMatrices(t,e)):this.multiplyMatrices(this,t)},e.premultiply=function(t){return this.multiplyMatrices(t,this)},e.multiplyMatrices=function(t,e){var n=t.elements,r=e.elements,i=this.elements,a=n[0],o=n[4],s=n[8],c=n[12],l=n[1],u=n[5],h=n[9],d=n[13],p=n[2],f=n[6],m=n[10],v=n[14],g=n[3],y=n[7],x=n[11],b=n[15],_=r[0],w=r[4],M=r[8],S=r[12],T=r[1],E=r[5],A=r[9],L=r[13],R=r[2],C=r[6],P=r[10],D=r[14],O=r[3],I=r[7],N=r[11],B=r[15];return i[0]=a*_+o*T+s*R+c*O,i[4]=a*w+o*E+s*C+c*I,i[8]=a*M+o*A+s*P+c*N,i[12]=a*S+o*L+s*D+c*B,i[1]=l*_+u*T+h*R+d*O,i[5]=l*w+u*E+h*C+d*I,i[9]=l*M+u*A+h*P+d*N,i[13]=l*S+u*L+h*D+d*B,i[2]=p*_+f*T+m*R+v*O,i[6]=p*w+f*E+m*C+v*I,i[10]=p*M+f*A+m*P+v*N,i[14]=p*S+f*L+m*D+v*B,i[3]=g*_+y*T+x*R+b*O,i[7]=g*w+y*E+x*C+b*I,i[11]=g*M+y*A+x*P+b*N,i[15]=g*S+y*L+x*D+b*B,this},e.multiplyScalar=function(t){var e=this.elements;return e[0]*=t,e[4]*=t,e[8]*=t,e[12]*=t,e[1]*=t,e[5]*=t,e[9]*=t,e[13]*=t,e[2]*=t,e[6]*=t,e[10]*=t,e[14]*=t,e[3]*=t,e[7]*=t,e[11]*=t,e[15]*=t,this},e.determinant=function(){var t=this.elements,e=t[0],n=t[4],r=t[8],i=t[12],a=t[1],o=t[5],s=t[9],c=t[13],l=t[2],u=t[6],h=t[10],d=t[14];return t[3]*(+i*s*u-r*c*u-i*o*h+n*c*h+r*o*d-n*s*d)+t[7]*(+e*s*d-e*c*h+i*a*h-r*a*d+r*c*l-i*s*l)+t[11]*(+e*c*u-e*o*d-i*a*u+n*a*d+i*o*l-n*c*l)+t[15]*(-r*o*l-e*s*u+e*o*h+r*a*u-n*a*h+n*s*l)},e.transpose=function(){var t,e=this.elements;return t=e[1],e[1]=e[4],e[4]=t,t=e[2],e[2]=e[8],e[8]=t,t=e[6],e[6]=e[9],e[9]=t,t=e[3],e[3]=e[12],e[12]=t,t=e[7],e[7]=e[13],e[13]=t,t=e[11],e[11]=e[14],e[14]=t,this},e.setPosition=function(t,e,n){var r=this.elements;return t.isVector3?(r[12]=t.x,r[13]=t.y,r[14]=t.z):(r[12]=t,r[13]=e,r[14]=n),this},e.invert=function(){var t=this.elements,e=t[0],n=t[1],r=t[2],i=t[3],a=t[4],o=t[5],s=t[6],c=t[7],l=t[8],u=t[9],h=t[10],d=t[11],p=t[12],f=t[13],m=t[14],v=t[15],g=u*m*c-f*h*c+f*s*d-o*m*d-u*s*v+o*h*v,y=p*h*c-l*m*c-p*s*d+a*m*d+l*s*v-a*h*v,x=l*f*c-p*u*c+p*o*d-a*f*d-l*o*v+a*u*v,b=p*u*s-l*f*s-p*o*h+a*f*h+l*o*m-a*u*m,_=e*g+n*y+r*x+i*b;if(0===_)return this.set(0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0);var w=1/_;return t[0]=g*w,t[1]=(f*h*i-u*m*i-f*r*d+n*m*d+u*r*v-n*h*v)*w,t[2]=(o*m*i-f*s*i+f*r*c-n*m*c-o*r*v+n*s*v)*w,t[3]=(u*s*i-o*h*i-u*r*c+n*h*c+o*r*d-n*s*d)*w,t[4]=y*w,t[5]=(l*m*i-p*h*i+p*r*d-e*m*d-l*r*v+e*h*v)*w,t[6]=(p*s*i-a*m*i-p*r*c+e*m*c+a*r*v-e*s*v)*w,t[7]=(a*h*i-l*s*i+l*r*c-e*h*c-a*r*d+e*s*d)*w,t[8]=x*w,t[9]=(p*u*i-l*f*i-p*n*d+e*f*d+l*n*v-e*u*v)*w,t[10]=(a*f*i-p*o*i+p*n*c-e*f*c-a*n*v+e*o*v)*w,t[11]=(l*o*i-a*u*i-l*n*c+e*u*c+a*n*d-e*o*d)*w,t[12]=b*w,t[13]=(l*f*r-p*u*r+p*n*h-e*f*h-l*n*m+e*u*m)*w,t[14]=(p*o*r-a*f*r-p*n*s+e*f*s+a*n*m-e*o*m)*w,t[15]=(a*u*r-l*o*r+l*n*s-e*u*s-a*n*h+e*o*h)*w,this},e.scale=function(t){var e=this.elements,n=t.x,r=t.y,i=t.z;return e[0]*=n,e[4]*=r,e[8]*=i,e[1]*=n,e[5]*=r,e[9]*=i,e[2]*=n,e[6]*=r,e[10]*=i,e[3]*=n,e[7]*=r,e[11]*=i,this},e.getMaxScaleOnAxis=function(){var t=this.elements,e=t[0]*t[0]+t[1]*t[1]+t[2]*t[2],n=t[4]*t[4]+t[5]*t[5]+t[6]*t[6],r=t[8]*t[8]+t[9]*t[9]+t[10]*t[10];return Math.sqrt(Math.max(e,n,r))},e.makeTranslation=function(t,e,n){return this.set(1,0,0,t,0,1,0,e,0,0,1,n,0,0,0,1),this},e.makeRotationX=function(t){var e=Math.cos(t),n=Math.sin(t);return this.set(1,0,0,0,0,e,-n,0,0,n,e,0,0,0,0,1),this},e.makeRotationY=function(t){var e=Math.cos(t),n=Math.sin(t);return this.set(e,0,n,0,0,1,0,0,-n,0,e,0,0,0,0,1),this},e.makeRotationZ=function(t){var e=Math.cos(t),n=Math.sin(t);return this.set(e,-n,0,0,n,e,0,0,0,0,1,0,0,0,0,1),this},e.makeRotationAxis=function(t,e){var n=Math.cos(e),r=Math.sin(e),i=1-n,a=t.x,o=t.y,s=t.z,c=i*a,l=i*o;return this.set(c*a+n,c*o-r*s,c*s+r*o,0,c*o+r*s,l*o+n,l*s-r*a,0,c*s-r*o,l*s+r*a,i*s*s+n,0,0,0,0,1),this},e.makeScale=function(t,e,n){return this.set(t,0,0,0,0,e,0,0,0,0,n,0,0,0,0,1),this},e.makeShear=function(t,e,n){return this.set(1,e,n,0,t,1,n,0,t,e,1,0,0,0,0,1),this},e.compose=function(t,e,n){var r=this.elements,i=e._x,a=e._y,o=e._z,s=e._w,c=i+i,l=a+a,u=o+o,h=i*c,d=i*l,p=i*u,f=a*l,m=a*u,v=o*u,g=s*c,y=s*l,x=s*u,b=n.x,_=n.y,w=n.z;return r[0]=(1-(f+v))*b,r[1]=(d+x)*b,r[2]=(p-y)*b,r[3]=0,r[4]=(d-x)*_,r[5]=(1-(h+v))*_,r[6]=(m+g)*_,r[7]=0,r[8]=(p+y)*w,r[9]=(m-g)*w,r[10]=(1-(h+f))*w,r[11]=0,r[12]=t.x,r[13]=t.y,r[14]=t.z,r[15]=1,this},e.decompose=function(t,e,n){var r=this.elements,i=ol.set(r[0],r[1],r[2]).length(),a=ol.set(r[4],r[5],r[6]).length(),o=ol.set(r[8],r[9],r[10]).length();this.determinant()<0&&(i=-i),t.x=r[12],t.y=r[13],t.z=r[14],sl.copy(this);var s=1/i,c=1/a,l=1/o;return sl.elements[0]*=s,sl.elements[1]*=s,sl.elements[2]*=s,sl.elements[4]*=c,sl.elements[5]*=c,sl.elements[6]*=c,sl.elements[8]*=l,sl.elements[9]*=l,sl.elements[10]*=l,e.setFromRotationMatrix(sl),n.x=i,n.y=a,n.z=o,this},e.makePerspective=function(t,e,n,r,i,a){void 0===a&&console.warn("THREE.Matrix4: .makePerspective() has been redefined and has a new signature. Please check the docs.");var o=this.elements,s=2*i/(e-t),c=2*i/(n-r),l=(e+t)/(e-t),u=(n+r)/(n-r),h=-(a+i)/(a-i),d=-2*a*i/(a-i);return o[0]=s,o[4]=0,o[8]=l,o[12]=0,o[1]=0,o[5]=c,o[9]=u,o[13]=0,o[2]=0,o[6]=0,o[10]=h,o[14]=d,o[3]=0,o[7]=0,o[11]=-1,o[15]=0,this},e.makeOrthographic=function(t,e,n,r,i,a){var o=this.elements,s=1/(e-t),c=1/(n-r),l=1/(a-i),u=(e+t)*s,h=(n+r)*c,d=(a+i)*l;return o[0]=2*s,o[4]=0,o[8]=0,o[12]=-u,o[1]=0,o[5]=2*c,o[9]=0,o[13]=-h,o[2]=0,o[6]=0,o[10]=-2*l,o[14]=-d,o[3]=0,o[7]=0,o[11]=0,o[15]=1,this},e.equals=function(t){for(var e=this.elements,n=t.elements,r=0;r<16;r++)if(e[r]!==n[r])return!1;return!0},e.fromArray=function(t,e){void 0===e&&(e=0);for(var n=0;n<16;n++)this.elements[n]=t[n+e];return this},e.toArray=function(t,e){void 0===t&&(t=[]),void 0===e&&(e=0);var n=this.elements;return t[e]=n[0],t[e+1]=n[1],t[e+2]=n[2],t[e+3]=n[3],t[e+4]=n[4],t[e+5]=n[5],t[e+6]=n[6],t[e+7]=n[7],t[e+8]=n[8],t[e+9]=n[9],t[e+10]=n[10],t[e+11]=n[11],t[e+12]=n[12],t[e+13]=n[13],t[e+14]=n[14],t[e+15]=n[15],t},t}(),ol=new Dc,sl=new al,cl=new Dc(0,0,0),ll=new Dc(1,1,1),ul=new Dc,hl=new Dc,dl=new Dc,pl=function(){function t(e,n,r,i){void 0===e&&(e=0),void 0===n&&(n=0),void 0===r&&(r=0),void 0===i&&(i=t.DefaultOrder),Object.defineProperty(this,"isEuler",{value:!0}),this._x=e,this._y=n,this._z=r,this._order=i}var e=t.prototype;return e.set=function(t,e,n,r){return this._x=t,this._y=e,this._z=n,this._order=r||this._order,this._onChangeCallback(),this},e.clone=function(){return new this.constructor(this._x,this._y,this._z,this._order)},e.copy=function(t){return this._x=t._x,this._y=t._y,this._z=t._z,this._order=t._order,this._onChangeCallback(),this},e.setFromRotationMatrix=function(t,e,n){var r=Tc.clamp,i=t.elements,a=i[0],o=i[4],s=i[8],c=i[1],l=i[5],u=i[9],h=i[2],d=i[6],p=i[10];switch(e=e||this._order){case"XYZ":this._y=Math.asin(r(s,-1,1)),Math.abs(s)<.9999999?(this._x=Math.atan2(-u,p),this._z=Math.atan2(-o,a)):(this._x=Math.atan2(d,l),this._z=0);break;case"YXZ":this._x=Math.asin(-r(u,-1,1)),Math.abs(u)<.9999999?(this._y=Math.atan2(s,p),this._z=Math.atan2(c,l)):(this._y=Math.atan2(-h,a),this._z=0);break;case"ZXY":this._x=Math.asin(r(d,-1,1)),Math.abs(d)<.9999999?(this._y=Math.atan2(-h,p),this._z=Math.atan2(-o,l)):(this._y=0,this._z=Math.atan2(c,a));break;case"ZYX":this._y=Math.asin(-r(h,-1,1)),Math.abs(h)<.9999999?(this._x=Math.atan2(d,p),this._z=Math.atan2(c,a)):(this._x=0,this._z=Math.atan2(-o,l));break;case"YZX":this._z=Math.asin(r(c,-1,1)),Math.abs(c)<.9999999?(this._x=Math.atan2(-u,l),this._y=Math.atan2(-h,a)):(this._x=0,this._y=Math.atan2(s,p));break;case"XZY":this._z=Math.asin(-r(o,-1,1)),Math.abs(o)<.9999999?(this._x=Math.atan2(d,l),this._y=Math.atan2(s,a)):(this._x=Math.atan2(-u,p),this._y=0);break;default:console.warn("THREE.Euler: .setFromRotationMatrix() encountered an unknown order: "+e)}return this._order=e,!1!==n&&this._onChangeCallback(),this},e.setFromQuaternion=function(t,e,n){return fl.makeRotationFromQuaternion(t),this.setFromRotationMatrix(fl,e,n)},e.setFromVector3=function(t,e){return this.set(t.x,t.y,t.z,e||this._order)},e.reorder=function(t){return ml.setFromEuler(this),this.setFromQuaternion(ml,t)},e.equals=function(t){return t._x===this._x&&t._y===this._y&&t._z===this._z&&t._order===this._order},e.fromArray=function(t){return this._x=t[0],this._y=t[1],this._z=t[2],void 0!==t[3]&&(this._order=t[3]),this._onChangeCallback(),this},e.toArray=function(t,e){return void 0===t&&(t=[]),void 0===e&&(e=0),t[e]=this._x,t[e+1]=this._y,t[e+2]=this._z,t[e+3]=this._order,t},e.toVector3=function(t){return t?t.set(this._x,this._y,this._z):new Dc(this._x,this._y,this._z)},e._onChange=function(t){return this._onChangeCallback=t,this},e._onChangeCallback=function(){},r(t,[{key:"x",get:function(){return this._x},set:function(t){this._x=t,this._onChangeCallback()}},{key:"y",get:function(){return this._y},set:function(t){this._y=t,this._onChangeCallback()}},{key:"z",get:function(){return this._z},set:function(t){this._z=t,this._onChangeCallback()}},{key:"order",get:function(){return this._order},set:function(t){this._order=t,this._onChangeCallback()}}]),t}();pl.DefaultOrder="XYZ",pl.RotationOrders=["XYZ","YZX","ZXY","XZY","YXZ","ZYX"];var fl=new al,ml=new Pc,vl=function(){function t(){this.mask=1}var e=t.prototype;return e.set=function(t){this.mask=1<1){for(var e=0;e1){for(var e=0;e0){a.children=[];for(var f=0;f0){a.animations=[];for(var m=0;m0&&(i.geometries=g),y.length>0&&(i.materials=y),x.length>0&&(i.textures=x),b.length>0&&(i.images=b),_.length>0&&(i.shapes=_),w.length>0&&(i.skeletons=w),M.length>0&&(i.animations=M)}return i.object=a,i},clone:function(t){return(new this.constructor).copy(this,t)},copy:function(t,e){if(void 0===e&&(e=!0),this.name=t.name,this.up.copy(t.up),this.position.copy(t.position),this.rotation.order=t.rotation.order,this.quaternion.copy(t.quaternion),this.scale.copy(t.scale),this.matrix.copy(t.matrix),this.matrixWorld.copy(t.matrixWorld),this.matrixAutoUpdate=t.matrixAutoUpdate,this.matrixWorldNeedsUpdate=t.matrixWorldNeedsUpdate,this.layers.mask=t.layers.mask,this.visible=t.visible,this.castShadow=t.castShadow,this.receiveShadow=t.receiveShadow,this.frustumCulled=t.frustumCulled,this.renderOrder=t.renderOrder,this.userData=JSON.parse(JSON.stringify(t.userData)),!0===e)for(var n=0;n1))return e.copy(n).multiplyScalar(i).add(t.start)}else if(0===this.distanceToPoint(t.start))return e.copy(t.start)},e.intersectsLine=function(t){var e=this.distanceToPoint(t.start),n=this.distanceToPoint(t.end);return e<0&&n>0||n<0&&e>0},e.intersectsBox=function(t){return t.intersectsPlane(this)},e.intersectsSphere=function(t){return t.intersectsPlane(this)},e.coplanarPoint=function(t){return void 0===t&&(console.warn("THREE.Plane: .coplanarPoint() target is now required"),t=new Dc),t.copy(this.normal).multiplyScalar(-this.constant)},e.applyMatrix4=function(t,e){var n=e||Dl.getNormalMatrix(t),r=this.coplanarPoint(Cl).applyMatrix4(t),i=this.normal.applyMatrix3(n).normalize();return this.constant=-r.dot(i),this},e.translate=function(t){return this.constant-=t.dot(this.normal),this},e.equals=function(t){return t.normal.equals(this.normal)&&t.constant===this.constant},t}(),Il=new Dc,Nl=new Dc,Bl=new Dc,zl=new Dc,Fl=new Dc,Gl=new Dc,Ul=new Dc,Hl=new Dc,kl=new Dc,Vl=new Dc,Wl=function(){function t(t,e,n){this.a=void 0!==t?t:new Dc,this.b=void 0!==e?e:new Dc,this.c=void 0!==n?n:new Dc}t.getNormal=function(t,e,n,r){void 0===r&&(console.warn("THREE.Triangle: .getNormal() target is now required"),r=new Dc),r.subVectors(n,e),Il.subVectors(t,e),r.cross(Il);var i=r.lengthSq();return i>0?r.multiplyScalar(1/Math.sqrt(i)):r.set(0,0,0)},t.getBarycoord=function(t,e,n,r,i){Il.subVectors(r,e),Nl.subVectors(n,e),Bl.subVectors(t,e);var a=Il.dot(Il),o=Il.dot(Nl),s=Il.dot(Bl),c=Nl.dot(Nl),l=Nl.dot(Bl),u=a*c-o*o;if(void 0===i&&(console.warn("THREE.Triangle: .getBarycoord() target is now required"),i=new Dc),0===u)return i.set(-2,-1,-1);var h=1/u,d=(c*s-o*l)*h,p=(a*l-o*s)*h;return i.set(1-d-p,p,d)},t.containsPoint=function(t,e,n,r){return this.getBarycoord(t,e,n,r,zl),zl.x>=0&&zl.y>=0&&zl.x+zl.y<=1},t.getUV=function(t,e,n,r,i,a,o,s){return this.getBarycoord(t,e,n,r,zl),s.set(0,0),s.addScaledVector(i,zl.x),s.addScaledVector(a,zl.y),s.addScaledVector(o,zl.z),s},t.isFrontFacing=function(t,e,n,r){return Il.subVectors(n,e),Nl.subVectors(t,e),Il.cross(Nl).dot(r)<0};var e=t.prototype;return e.set=function(t,e,n){return this.a.copy(t),this.b.copy(e),this.c.copy(n),this},e.setFromPointsAndIndices=function(t,e,n,r){return this.a.copy(t[e]),this.b.copy(t[n]),this.c.copy(t[r]),this},e.clone=function(){return(new this.constructor).copy(this)},e.copy=function(t){return this.a.copy(t.a),this.b.copy(t.b),this.c.copy(t.c),this},e.getArea=function(){return Il.subVectors(this.c,this.b),Nl.subVectors(this.a,this.b),.5*Il.cross(Nl).length()},e.getMidpoint=function(t){return void 0===t&&(console.warn("THREE.Triangle: .getMidpoint() target is now required"),t=new Dc),t.addVectors(this.a,this.b).add(this.c).multiplyScalar(1/3)},e.getNormal=function(e){return t.getNormal(this.a,this.b,this.c,e)},e.getPlane=function(t){return void 0===t&&(console.warn("THREE.Triangle: .getPlane() target is now required"),t=new Ol),t.setFromCoplanarPoints(this.a,this.b,this.c)},e.getBarycoord=function(e,n){return t.getBarycoord(e,this.a,this.b,this.c,n)},e.getUV=function(e,n,r,i,a){return t.getUV(e,this.a,this.b,this.c,n,r,i,a)},e.containsPoint=function(e){return t.containsPoint(e,this.a,this.b,this.c)},e.isFrontFacing=function(e){return t.isFrontFacing(this.a,this.b,this.c,e)},e.intersectsBox=function(t){return t.intersectsTriangle(this)},e.closestPointToPoint=function(t,e){void 0===e&&(console.warn("THREE.Triangle: .closestPointToPoint() target is now required"),e=new Dc);var n,r,i=this.a,a=this.b,o=this.c;Fl.subVectors(a,i),Gl.subVectors(o,i),Hl.subVectors(t,i);var s=Fl.dot(Hl),c=Gl.dot(Hl);if(s<=0&&c<=0)return e.copy(i);kl.subVectors(t,a);var l=Fl.dot(kl),u=Gl.dot(kl);if(l>=0&&u<=l)return e.copy(a);var h=s*u-l*c;if(h<=0&&s>=0&&l<=0)return n=s/(s-l),e.copy(i).addScaledVector(Fl,n);Vl.subVectors(t,o);var d=Fl.dot(Vl),p=Gl.dot(Vl);if(p>=0&&d<=p)return e.copy(o);var f=d*c-s*p;if(f<=0&&c>=0&&p<=0)return r=c/(c-p),e.copy(i).addScaledVector(Gl,r);var m=l*p-d*u;if(m<=0&&u-l>=0&&d-p>=0)return Ul.subVectors(o,a),r=(u-l)/(u-l+(d-p)),e.copy(a).addScaledVector(Ul,r);var v=1/(m+f+h);return n=f*v,r=h*v,e.copy(i).addScaledVector(Fl,n).addScaledVector(Gl,r)},e.equals=function(t){return t.a.equals(this.a)&&t.b.equals(this.b)&&t.c.equals(this.c)},t}(),jl={aliceblue:15792383,antiquewhite:16444375,aqua:65535,aquamarine:8388564,azure:15794175,beige:16119260,bisque:16770244,black:0,blanchedalmond:16772045,blue:255,blueviolet:9055202,brown:10824234,burlywood:14596231,cadetblue:6266528,chartreuse:8388352,chocolate:13789470,coral:16744272,cornflowerblue:6591981,cornsilk:16775388,crimson:14423100,cyan:65535,darkblue:139,darkcyan:35723,darkgoldenrod:12092939,darkgray:11119017,darkgreen:25600,darkgrey:11119017,darkkhaki:12433259,darkmagenta:9109643,darkolivegreen:5597999,darkorange:16747520,darkorchid:10040012,darkred:9109504,darksalmon:15308410,darkseagreen:9419919,darkslateblue:4734347,darkslategray:3100495,darkslategrey:3100495,darkturquoise:52945,darkviolet:9699539,deeppink:16716947,deepskyblue:49151,dimgray:6908265,dimgrey:6908265,dodgerblue:2003199,firebrick:11674146,floralwhite:16775920,forestgreen:2263842,fuchsia:16711935,gainsboro:14474460,ghostwhite:16316671,gold:16766720,goldenrod:14329120,gray:8421504,green:32768,greenyellow:11403055,grey:8421504,honeydew:15794160,hotpink:16738740,indianred:13458524,indigo:4915330,ivory:16777200,khaki:15787660,lavender:15132410,lavenderblush:16773365,lawngreen:8190976,lemonchiffon:16775885,lightblue:11393254,lightcoral:15761536,lightcyan:14745599,lightgoldenrodyellow:16448210,lightgray:13882323,lightgreen:9498256,lightgrey:13882323,lightpink:16758465,lightsalmon:16752762,lightseagreen:2142890,lightskyblue:8900346,lightslategray:7833753,lightslategrey:7833753,lightsteelblue:11584734,lightyellow:16777184,lime:65280,limegreen:3329330,linen:16445670,magenta:16711935,maroon:8388608,mediumaquamarine:6737322,mediumblue:205,mediumorchid:12211667,mediumpurple:9662683,mediumseagreen:3978097,mediumslateblue:8087790,mediumspringgreen:64154,mediumturquoise:4772300,mediumvioletred:13047173,midnightblue:1644912,mintcream:16121850,mistyrose:16770273,moccasin:16770229,navajowhite:16768685,navy:128,oldlace:16643558,olive:8421376,olivedrab:7048739,orange:16753920,orangered:16729344,orchid:14315734,palegoldenrod:15657130,palegreen:10025880,paleturquoise:11529966,palevioletred:14381203,papayawhip:16773077,peachpuff:16767673,peru:13468991,pink:16761035,plum:14524637,powderblue:11591910,purple:8388736,rebeccapurple:6697881,red:16711680,rosybrown:12357519,royalblue:4286945,saddlebrown:9127187,salmon:16416882,sandybrown:16032864,seagreen:3050327,seashell:16774638,sienna:10506797,silver:12632256,skyblue:8900331,slateblue:6970061,slategray:7372944,slategrey:7372944,snow:16775930,springgreen:65407,steelblue:4620980,tan:13808780,teal:32896,thistle:14204888,tomato:16737095,turquoise:4251856,violet:15631086,wheat:16113331,white:16777215,whitesmoke:16119285,yellow:16776960,yellowgreen:10145074},ql={h:0,s:0,l:0},Xl={h:0,s:0,l:0},Yl=function(){function t(t,e,n){return Object.defineProperty(this,"isColor",{value:!0}),void 0===e&&void 0===n?this.set(t):this.setRGB(t,e,n)}var e=t.prototype;return e.set=function(t){return t&&t.isColor?this.copy(t):"number"==typeof t?this.setHex(t):"string"==typeof t&&this.setStyle(t),this},e.setScalar=function(t){return this.r=t,this.g=t,this.b=t,this},e.setHex=function(t){return t=Math.floor(t),this.r=(t>>16&255)/255,this.g=(t>>8&255)/255,this.b=(255&t)/255,this},e.setRGB=function(t,e,n){return this.r=t,this.g=e,this.b=n,this},e.setHSL=function(t,e,n){if(t=Tc.euclideanModulo(t,1),e=Tc.clamp(e,0,1),n=Tc.clamp(n,0,1),0===e)this.r=this.g=this.b=n;else{var r=n<=.5?n*(1+e):n+e-n*e,i=2*n-r;this.r=d(i,r,t+1/3),this.g=d(i,r,t),this.b=d(i,r,t-1/3)}return this},e.setStyle=function(t){function e(e){void 0!==e&&parseFloat(e)<1&&console.warn("THREE.Color: Alpha component of "+t+" will be ignored.")}var n;if(n=/^((?:rgb|hsl)a?)\(\s*([^\)]*)\)/.exec(t)){var r,i=n[1],a=n[2];switch(i){case"rgb":case"rgba":if(r=/^(\d+)\s*,\s*(\d+)\s*,\s*(\d+)\s*(,\s*([0-9]*\.?[0-9]+)\s*)?$/.exec(a))return this.r=Math.min(255,parseInt(r[1],10))/255,this.g=Math.min(255,parseInt(r[2],10))/255,this.b=Math.min(255,parseInt(r[3],10))/255,e(r[5]),this;if(r=/^(\d+)\%\s*,\s*(\d+)\%\s*,\s*(\d+)\%\s*(,\s*([0-9]*\.?[0-9]+)\s*)?$/.exec(a))return this.r=Math.min(100,parseInt(r[1],10))/100,this.g=Math.min(100,parseInt(r[2],10))/100,this.b=Math.min(100,parseInt(r[3],10))/100,e(r[5]),this;break;case"hsl":case"hsla":if(r=/^([0-9]*\.?[0-9]+)\s*,\s*(\d+)\%\s*,\s*(\d+)\%\s*(,\s*([0-9]*\.?[0-9]+)\s*)?$/.exec(a)){var o=parseFloat(r[1])/360,s=parseInt(r[2],10)/100,c=parseInt(r[3],10)/100;return e(r[5]),this.setHSL(o,s,c)}}}else if(n=/^\#([A-Fa-f0-9]+)$/.exec(t)){var l=n[1],u=l.length;if(3===u)return this.r=parseInt(l.charAt(0)+l.charAt(0),16)/255,this.g=parseInt(l.charAt(1)+l.charAt(1),16)/255,this.b=parseInt(l.charAt(2)+l.charAt(2),16)/255,this;if(6===u)return this.r=parseInt(l.charAt(0)+l.charAt(1),16)/255,this.g=parseInt(l.charAt(2)+l.charAt(3),16)/255,this.b=parseInt(l.charAt(4)+l.charAt(5),16)/255,this}return t&&t.length>0?this.setColorName(t):this},e.setColorName=function(t){var e=jl[t];return void 0!==e?this.setHex(e):console.warn("THREE.Color: Unknown color "+t),this},e.clone=function(){return new this.constructor(this.r,this.g,this.b)},e.copy=function(t){return this.r=t.r,this.g=t.g,this.b=t.b,this},e.copyGammaToLinear=function(t,e){return void 0===e&&(e=2),this.r=Math.pow(t.r,e),this.g=Math.pow(t.g,e),this.b=Math.pow(t.b,e),this},e.copyLinearToGamma=function(t,e){void 0===e&&(e=2);var n=e>0?1/e:1;return this.r=Math.pow(t.r,n),this.g=Math.pow(t.g,n),this.b=Math.pow(t.b,n),this},e.convertGammaToLinear=function(t){return this.copyGammaToLinear(this,t),this},e.convertLinearToGamma=function(t){return this.copyLinearToGamma(this,t),this},e.copySRGBToLinear=function(t){return this.r=p(t.r),this.g=p(t.g),this.b=p(t.b),this},e.copyLinearToSRGB=function(t){return this.r=f(t.r),this.g=f(t.g),this.b=f(t.b),this},e.convertSRGBToLinear=function(){return this.copySRGBToLinear(this),this},e.convertLinearToSRGB=function(){return this.copyLinearToSRGB(this),this},e.getHex=function(){return 255*this.r<<16^255*this.g<<8^255*this.b<<0},e.getHexString=function(){return("000000"+this.getHex().toString(16)).slice(-6)},e.getHSL=function(t){ -void 0===t&&(console.warn("THREE.Color: .getHSL() target is now required"),t={h:0,s:0,l:0});var e,n,r=this.r,i=this.g,a=this.b,o=Math.max(r,i,a),s=Math.min(r,i,a),c=(s+o)/2;if(s===o)e=0,n=0;else{var l=o-s;switch(n=c<=.5?l/(o+s):l/(2-o-s),o){case r:e=(i-a)/l+(i0&&(r.alphaTest=this.alphaTest),!0===this.premultipliedAlpha&&(r.premultipliedAlpha=this.premultipliedAlpha),!0===this.wireframe&&(r.wireframe=this.wireframe),this.wireframeLinewidth>1&&(r.wireframeLinewidth=this.wireframeLinewidth),"round"!==this.wireframeLinecap&&(r.wireframeLinecap=this.wireframeLinecap),"round"!==this.wireframeLinejoin&&(r.wireframeLinejoin=this.wireframeLinejoin),!0===this.morphTargets&&(r.morphTargets=!0),!0===this.morphNormals&&(r.morphNormals=!0),!0===this.skinning&&(r.skinning=!0),!1===this.visible&&(r.visible=!1),!1===this.toneMapped&&(r.toneMapped=!1),"{}"!==JSON.stringify(this.userData)&&(r.userData=this.userData),n){var i=e(t.textures),a=e(t.images);i.length>0&&(r.textures=i),a.length>0&&(r.images=a)}return r},clone:function(){return(new this.constructor).copy(this)},copy:function(t){this.name=t.name,this.fog=t.fog,this.blending=t.blending,this.side=t.side,this.flatShading=t.flatShading,this.vertexColors=t.vertexColors,this.opacity=t.opacity,this.transparent=t.transparent,this.blendSrc=t.blendSrc,this.blendDst=t.blendDst,this.blendEquation=t.blendEquation,this.blendSrcAlpha=t.blendSrcAlpha,this.blendDstAlpha=t.blendDstAlpha,this.blendEquationAlpha=t.blendEquationAlpha,this.depthFunc=t.depthFunc,this.depthTest=t.depthTest,this.depthWrite=t.depthWrite,this.stencilWriteMask=t.stencilWriteMask,this.stencilFunc=t.stencilFunc,this.stencilRef=t.stencilRef,this.stencilFuncMask=t.stencilFuncMask,this.stencilFail=t.stencilFail,this.stencilZFail=t.stencilZFail,this.stencilZPass=t.stencilZPass,this.stencilWrite=t.stencilWrite;var e=t.clippingPlanes,n=null;if(null!==e){var r=e.length;n=new Array(r);for(var i=0;i!==r;++i)n[i]=e[i].clone()}return this.clippingPlanes=n,this.clipIntersection=t.clipIntersection,this.clipShadows=t.clipShadows,this.shadowSide=t.shadowSide,this.colorWrite=t.colorWrite,this.precision=t.precision,this.polygonOffset=t.polygonOffset,this.polygonOffsetFactor=t.polygonOffsetFactor,this.polygonOffsetUnits=t.polygonOffsetUnits,this.dithering=t.dithering,this.alphaTest=t.alphaTest,this.premultipliedAlpha=t.premultipliedAlpha,this.visible=t.visible,this.toneMapped=t.toneMapped,this.userData=JSON.parse(JSON.stringify(t.userData)),this},dispose:function(){this.dispatchEvent({type:"dispose"})}}),Object.defineProperty(m.prototype,"needsUpdate",{set:function(t){!0===t&&this.version++}}),v.prototype=Object.create(m.prototype),v.prototype.constructor=v,v.prototype.isMeshBasicMaterial=!0,v.prototype.copy=function(t){return m.prototype.copy.call(this,t),this.color.copy(t.color),this.map=t.map,this.lightMap=t.lightMap,this.lightMapIntensity=t.lightMapIntensity,this.aoMap=t.aoMap,this.aoMapIntensity=t.aoMapIntensity,this.specularMap=t.specularMap,this.alphaMap=t.alphaMap,this.envMap=t.envMap,this.combine=t.combine,this.reflectivity=t.reflectivity,this.refractionRatio=t.refractionRatio,this.wireframe=t.wireframe,this.wireframeLinewidth=t.wireframeLinewidth,this.wireframeLinecap=t.wireframeLinecap,this.wireframeLinejoin=t.wireframeLinejoin,this.skinning=t.skinning,this.morphTargets=t.morphTargets,this};var Ql=new Dc,Kl=new Ec;Object.defineProperty(g.prototype,"needsUpdate",{set:function(t){!0===t&&this.version++}}),Object.assign(g.prototype,{isBufferAttribute:!0,onUploadCallback:function(){},setUsage:function(t){return this.usage=t,this},copy:function(t){return this.name=t.name,this.array=new t.array.constructor(t.array),this.itemSize=t.itemSize,this.count=t.count,this.normalized=t.normalized,this.usage=t.usage,this},copyAt:function(t,e,n){t*=this.itemSize,n*=e.itemSize;for(var r=0,i=this.itemSize;r0,o=i[1]&&i[1].length>0,s=t.morphTargets,c=s.length;if(c>0){e=[];for(var l=0;l0){u=[];for(var p=0;p0&&0===n.length&&console.error("THREE.DirectGeometry: Faceless geometries are not supported.");for(var y=0;y65535?S:w)(t,1):this.index=t,this},getAttribute:function(t){return this.attributes[t]},setAttribute:function(t,e){return this.attributes[t]=e,this},deleteAttribute:function(t){return delete this.attributes[t],this},hasAttribute:function(t){return void 0!==this.attributes[t]},addGroup:function(t,e,n){void 0===n&&(n=0),this.groups.push({start:t,count:e,materialIndex:n})},clearGroups:function(){this.groups=[]},setDrawRange:function(t,e){this.drawRange.start=t,this.drawRange.count=e},applyMatrix4:function(t){var e=this.attributes.position;void 0!==e&&(e.applyMatrix4(t),e.needsUpdate=!0);var n=this.attributes.normal;if(void 0!==n){var r=(new Ac).getNormalMatrix(t);n.applyNormalMatrix(r),n.needsUpdate=!0}var i=this.attributes.tangent;return void 0!==i&&(i.transformDirection(t),i.needsUpdate=!0),null!==this.boundingBox&&this.computeBoundingBox(),null!==this.boundingSphere&&this.computeBoundingSphere(),this},rotateX:function(t){return nu.makeRotationX(t),this.applyMatrix4(nu),this},rotateY:function(t){return nu.makeRotationY(t),this.applyMatrix4(nu),this},rotateZ:function(t){return nu.makeRotationZ(t),this.applyMatrix4(nu),this},translate:function(t,e,n){return nu.makeTranslation(t,e,n),this.applyMatrix4(nu),this},scale:function(t,e,n){return nu.makeScale(t,e,n),this.applyMatrix4(nu),this},lookAt:function(t){return ru.lookAt(t),ru.updateMatrix(),this.applyMatrix4(ru.matrix),this},center:function(){return this.computeBoundingBox(),this.boundingBox.getCenter(iu).negate(),this.translate(iu.x,iu.y,iu.z),this},setFromObject:function(t){var e=t.geometry;if(t.isPoints||t.isLine){var n=new E(3*e.vertices.length,3),r=new E(3*e.colors.length,3);if(this.setAttribute("position",n.copyVector3sArray(e.vertices)),this.setAttribute("color",r.copyColorsArray(e.colors)),e.lineDistances&&e.lineDistances.length===e.vertices.length){var i=new E(e.lineDistances.length,1);this.setAttribute("lineDistance",i.copyArray(e.lineDistances))}null!==e.boundingSphere&&(this.boundingSphere=e.boundingSphere.clone()),null!==e.boundingBox&&(this.boundingBox=e.boundingBox.clone())}else t.isMesh&&e&&e.isGeometry&&this.fromGeometry(e);return this},setFromPoints:function(t){for(var e=[],n=0,r=t.length;n0){var n=new Float32Array(3*t.normals.length);this.setAttribute("normal",new g(n,3).copyVector3sArray(t.normals))}if(t.colors.length>0){var r=new Float32Array(3*t.colors.length);this.setAttribute("color",new g(r,3).copyColorsArray(t.colors))}if(t.uvs.length>0){var i=new Float32Array(2*t.uvs.length);this.setAttribute("uv",new g(i,2).copyVector2sArray(t.uvs))}if(t.uvs2.length>0){var a=new Float32Array(2*t.uvs2.length);this.setAttribute("uv2",new g(a,2).copyVector2sArray(t.uvs2))}this.groups=t.groups;for(var o in t.morphTargets){for(var s=[],c=t.morphTargets[o],l=0,u=c.length;l0){var p=new E(4*t.skinIndices.length,4);this.setAttribute("skinIndex",p.copyVector4sArray(t.skinIndices))}if(t.skinWeights.length>0){var f=new E(4*t.skinWeights.length,4);this.setAttribute("skinWeight",f.copyVector4sArray(t.skinWeights))}return null!==t.boundingSphere&&(this.boundingSphere=t.boundingSphere.clone()),null!==t.boundingBox&&(this.boundingBox=t.boundingBox.clone()),this},computeBoundingBox:function(){null===this.boundingBox&&(this.boundingBox=new Nc);var t=this.attributes.position,e=this.morphAttributes.position;if(t&&t.isGLBufferAttribute)return console.error('THREE.BufferGeometry.computeBoundingBox(): GLBufferAttribute requires a manual bounding box. Alternatively set "mesh.frustumCulled" to "false".',this),void this.boundingBox.set(new Dc(-1/0,-1/0,-1/0),new Dc(1/0,1/0,1/0));if(void 0!==t){if(this.boundingBox.setFromBufferAttribute(t),e)for(var n=0,r=e.length;n0&&(t.userData=this.userData),void 0!==this.parameters){var e=this.parameters;for(var n in e)void 0!==e[n]&&(t[n]=e[n]);return t}t.data={attributes:{}};var r=this.index;null!==r&&(t.data.index={type:r.array.constructor.name,array:Array.prototype.slice.call(r.array)});var i=this.attributes;for(var a in i){var o=i[a],s=o.toJSON(t.data);""!==o.name&&(s.name=o.name),t.data.attributes[a]=s}var c={},l=!1;for(var u in this.morphAttributes){for(var h=this.morphAttributes[u],d=[],p=0,f=h.length;p0&&(c[u]=d,l=!0)}l&&(t.data.morphAttributes=c,t.data.morphTargetsRelative=this.morphTargetsRelative);var g=this.groups;g.length>0&&(t.data.groups=JSON.parse(JSON.stringify(g)));var y=this.boundingSphere;return null!==y&&(t.data.boundingSphere={center:y.center.toArray(),radius:y.radius}),t},clone:function(){return(new C).copy(this)},copy:function(t){this.index=null,this.attributes={},this.morphAttributes={},this.groups=[],this.boundingBox=null,this.boundingSphere=null;var e={};this.name=t.name;var n=t.index;null!==n&&this.setIndex(n.clone(e));var r=t.attributes;for(var i in r){var a=r[i];this.setAttribute(i,a.clone(e))}var o=t.morphAttributes;for(var s in o){for(var c=[],l=o[s],u=0,h=l.length;u0){var r=e[n[0]];if(void 0!==r){this.morphTargetInfluences=[],this.morphTargetDictionary={};for(var i=0,a=r.length;i0&&console.error("THREE.Mesh.updateMorphTargets() no longer supports THREE.Geometry. Use THREE.BufferGeometry instead.")}},raycast:function(t,e){var n=this.geometry,r=this.material,i=this.matrixWorld;if(void 0!==r&&(null===n.boundingSphere&&n.computeBoundingSphere(),uu.copy(n.boundingSphere),uu.applyMatrix4(i),!1!==t.ray.intersectsSphere(uu)&&(cu.copy(i).invert(),lu.copy(t.ray).applyMatrix4(cu),null===n.boundingBox||!1!==lu.intersectsBox(n.boundingBox)))){var a;if(n.isBufferGeometry){var o=n.index,s=n.attributes.position,c=n.morphAttributes.position,l=n.morphTargetsRelative,u=n.attributes.uv,h=n.attributes.uv2,d=n.groups,p=n.drawRange;if(null!==o)if(Array.isArray(r))for(var f=0,m=d.length;f0&&(K=nt);for(var rt=0,it=et.length;rt0?1:-1,p.push(A.x,A.y,A.z),f.push(C/c),f.push(1-L/l),T+=1}for(var D=0;D0&&(e.defines=this.defines),e.vertexShader=this.vertexShader,e.fragmentShader=this.fragmentShader;var a={};for(var o in this.extensions)!0===this.extensions[o]&&(a[o]=!0);return Object.keys(a).length>0&&(e.extensions=a),e},z.prototype=Object.assign(Object.create(h.prototype),{constructor:z,isCamera:!0,copy:function(t,e){return h.prototype.copy.call(this,t,e),this.matrixWorldInverse.copy(t.matrixWorldInverse),this.projectionMatrix.copy(t.projectionMatrix),this.projectionMatrixInverse.copy(t.projectionMatrixInverse),this},getWorldDirection:function(t){void 0===t&&(console.warn("THREE.Camera: .getWorldDirection() target is now required"),t=new Dc),this.updateWorldMatrix(!0,!1);var e=this.matrixWorld.elements;return t.set(-e[8],-e[9],-e[10]).normalize()},updateMatrixWorld:function(t){h.prototype.updateMatrixWorld.call(this,t),this.matrixWorldInverse.copy(this.matrixWorld).invert()},updateWorldMatrix:function(t,e){h.prototype.updateWorldMatrix.call(this,t,e),this.matrixWorldInverse.copy(this.matrixWorld).invert()},clone:function(){return(new this.constructor).copy(this)}}),F.prototype=Object.assign(Object.create(z.prototype),{constructor:F,isPerspectiveCamera:!0,copy:function(t,e){return z.prototype.copy.call(this,t,e),this.fov=t.fov,this.zoom=t.zoom,this.near=t.near,this.far=t.far,this.focus=t.focus,this.aspect=t.aspect,this.view=null===t.view?null:Object.assign({},t.view),this.filmGauge=t.filmGauge,this.filmOffset=t.filmOffset,this},setFocalLength:function(t){var e=.5*this.getFilmHeight()/t;this.fov=2*Tc.RAD2DEG*Math.atan(e),this.updateProjectionMatrix()},getFocalLength:function(){var t=Math.tan(.5*Tc.DEG2RAD*this.fov);return.5*this.getFilmHeight()/t},getEffectiveFOV:function(){return 2*Tc.RAD2DEG*Math.atan(Math.tan(.5*Tc.DEG2RAD*this.fov)/this.zoom)},getFilmWidth:function(){return this.filmGauge*Math.min(this.aspect,1)},getFilmHeight:function(){return this.filmGauge/Math.max(this.aspect,1)},setViewOffset:function(t,e,n,r,i,a){this.aspect=t/e,null===this.view&&(this.view={enabled:!0,fullWidth:1,fullHeight:1,offsetX:0,offsetY:0,width:1,height:1}),this.view.enabled=!0,this.view.fullWidth=t,this.view.fullHeight=e,this.view.offsetX=n,this.view.offsetY=r,this.view.width=i,this.view.height=a,this.updateProjectionMatrix()},clearViewOffset:function(){null!==this.view&&(this.view.enabled=!1),this.updateProjectionMatrix()},updateProjectionMatrix:function(){var t=this.near,e=t*Math.tan(.5*Tc.DEG2RAD*this.fov)/this.zoom,n=2*e,r=this.aspect*n,i=-.5*r,a=this.view;if(null!==this.view&&this.view.enabled){var o=a.fullWidth,s=a.fullHeight;i+=a.offsetX*r/o,e-=a.offsetY*n/s,r*=a.width/o,n*=a.height/s}var c=this.filmOffset;0!==c&&(i+=t*c/this.getFilmWidth()),this.projectionMatrix.makePerspective(i,i+r,e,e-n,t,this.far),this.projectionMatrixInverse.copy(this.projectionMatrix).invert()},toJSON:function(t){var e=h.prototype.toJSON.call(this,t);return e.object.fov=this.fov,e.object.zoom=this.zoom,e.object.near=this.near,e.object.far=this.far,e.object.focus=this.focus,e.object.aspect=this.aspect,null!==this.view&&(e.object.view=Object.assign({},this.view)),e.object.filmGauge=this.filmGauge,e.object.filmOffset=this.filmOffset,e}});var Ru=90,Cu=1;G.prototype=Object.create(h.prototype),G.prototype.constructor=G,U.prototype=Object.create(o.prototype),U.prototype.constructor=U,U.prototype.isCubeTexture=!0,Object.defineProperty(U.prototype,"images",{get:function(){return this.image},set:function(t){this.image=t}}),H.prototype=Object.create(c.prototype),H.prototype.constructor=H,H.prototype.isWebGLCubeRenderTarget=!0,H.prototype.fromEquirectangularTexture=function(t,e){this.texture.type=e.type,this.texture.format=rs,this.texture.encoding=e.encoding,this.texture.generateMipmaps=e.generateMipmaps,this.texture.minFilter=e.minFilter,this.texture.magFilter=e.magFilter;var n={uniforms:{tEquirect:{value:null}},vertexShader:"\n\n\t\t\tvarying vec3 vWorldDirection;\n\n\t\t\tvec3 transformDirection( in vec3 dir, in mat4 matrix ) {\n\n\t\t\t\treturn normalize( ( matrix * vec4( dir, 0.0 ) ).xyz );\n\n\t\t\t}\n\n\t\t\tvoid main() {\n\n\t\t\t\tvWorldDirection = transformDirection( position, modelMatrix );\n\n\t\t\t\t#include \n\t\t\t\t#include \n\n\t\t\t}\n\t\t",fragmentShader:"\n\n\t\t\tuniform sampler2D tEquirect;\n\n\t\t\tvarying vec3 vWorldDirection;\n\n\t\t\t#include \n\n\t\t\tvoid main() {\n\n\t\t\t\tvec3 direction = normalize( vWorldDirection );\n\n\t\t\t\tvec2 sampleUV = equirectUv( direction );\n\n\t\t\t\tgl_FragColor = texture2D( tEquirect, sampleUV );\n\n\t\t\t}\n\t\t"},r=new Tu(5,5,5),i=new B({name:"CubemapFromEquirect",uniforms:I(n.uniforms),vertexShader:n.vertexShader,fragmentShader:n.fragmentShader,side:Ua,blending:ka});i.uniforms.tEquirect.value=e;var a=new P(r,i),o=e.minFilter;return e.minFilter===ko&&(e.minFilter=Uo),new G(1,10,this).update(t,a),e.minFilter=o,a.geometry.dispose(),a.material.dispose(),this},H.prototype.clear=function(t,e,n,r){for(var i=t.getRenderTarget(),a=0;a<6;a++)t.setRenderTarget(this,a),t.clear(e,n,r);t.setRenderTarget(i)},k.prototype=Object.create(o.prototype),k.prototype.constructor=k,k.prototype.isDataTexture=!0;var Pu=new Jc,Du=new Dc,Ou=function(){function t(t,e,n,r,i,a){this.planes=[void 0!==t?t:new Ol,void 0!==e?e:new Ol,void 0!==n?n:new Ol,void 0!==r?r:new Ol,void 0!==i?i:new Ol,void 0!==a?a:new Ol]}var e=t.prototype;return e.set=function(t,e,n,r,i,a){var o=this.planes;return o[0].copy(t),o[1].copy(e),o[2].copy(n),o[3].copy(r),o[4].copy(i),o[5].copy(a),this},e.clone=function(){return(new this.constructor).copy(this)},e.copy=function(t){for(var e=this.planes,n=0;n<6;n++)e[n].copy(t.planes[n]);return this},e.setFromProjectionMatrix=function(t){var e=this.planes,n=t.elements,r=n[0],i=n[1],a=n[2],o=n[3],s=n[4],c=n[5],l=n[6],u=n[7],h=n[8],d=n[9],p=n[10],f=n[11],m=n[12],v=n[13],g=n[14],y=n[15];return e[0].setComponents(o-r,u-s,f-h,y-m).normalize(),e[1].setComponents(o+r,u+s,f+h,y+m).normalize(),e[2].setComponents(o+i,u+c,f+d,y+v).normalize(),e[3].setComponents(o-i,u-c,f-d,y-v).normalize(),e[4].setComponents(o-a,u-l,f-p,y-g).normalize(),e[5].setComponents(o+a,u+l,f+p,y+g).normalize(),this},e.intersectsObject=function(t){var e=t.geometry;return null===e.boundingSphere&&e.computeBoundingSphere(),Pu.copy(e.boundingSphere).applyMatrix4(t.matrixWorld),this.intersectsSphere(Pu)},e.intersectsSprite=function(t){return Pu.center.set(0,0,0),Pu.radius=.7071067811865476,Pu.applyMatrix4(t.matrixWorld),this.intersectsSphere(Pu)},e.intersectsSphere=function(t){for(var e=this.planes,n=t.center,r=-t.radius,i=0;i<6;i++){if(e[i].distanceToPoint(n)0?t.max.x:t.min.x,Du.y=r.normal.y>0?t.max.y:t.min.y,Du.z=r.normal.z>0?t.max.z:t.min.z,r.distanceToPoint(Du)<0)return!1}return!0},e.containsPoint=function(t){for(var e=this.planes,n=0;n<6;n++)if(e[n].distanceToPoint(t)<0)return!1;return!0},t}(),Iu=function(t){function e(e,n,r,i){var a;void 0===e&&(e=1),void 0===n&&(n=1),void 0===r&&(r=1),void 0===i&&(i=1),a=t.call(this)||this,a.type="PlaneBufferGeometry",a.parameters={width:e,height:n,widthSegments:r,heightSegments:i};for(var o=e/2,s=n/2,c=Math.floor(r),l=Math.floor(i),u=c+1,h=l+1,d=e/c,p=n/l,f=[],m=[],v=[],g=[],y=0;y 0.0 ) {\n\n\t\tdistanceFalloff *= pow2( saturate( 1.0 - pow4( lightDistance / cutoffDistance ) ) );\n\n\t}\n\n\treturn distanceFalloff;\n\n#else\n\n\tif( cutoffDistance > 0.0 && decayExponent > 0.0 ) {\n\n\t\treturn pow( saturate( -lightDistance / cutoffDistance + 1.0 ), decayExponent );\n\n\t}\n\n\treturn 1.0;\n\n#endif\n\n}\n\nvec3 BRDF_Diffuse_Lambert( const in vec3 diffuseColor ) {\n\n\treturn RECIPROCAL_PI * diffuseColor;\n\n} // validated\n\nvec3 F_Schlick( const in vec3 specularColor, const in float dotLH ) {\n\n\t// Original approximation by Christophe Schlick \'94\n\t// float fresnel = pow( 1.0 - dotLH, 5.0 );\n\n\t// Optimized variant (presented by Epic at SIGGRAPH \'13)\n\t// https://cdn2.unrealengine.com/Resources/files/2013SiggraphPresentationsNotes-26915738.pdf\n\tfloat fresnel = exp2( ( -5.55473 * dotLH - 6.98316 ) * dotLH );\n\n\treturn ( 1.0 - specularColor ) * fresnel + specularColor;\n\n} // validated\n\nvec3 F_Schlick_RoughnessDependent( const in vec3 F0, const in float dotNV, const in float roughness ) {\n\n\t// See F_Schlick\n\tfloat fresnel = exp2( ( -5.55473 * dotNV - 6.98316 ) * dotNV );\n\tvec3 Fr = max( vec3( 1.0 - roughness ), F0 ) - F0;\n\n\treturn Fr * fresnel + F0;\n\n}\n\n\n// Microfacet Models for Refraction through Rough Surfaces - equation (34)\n// http://graphicrants.blogspot.com/2013/08/specular-brdf-reference.html\n// alpha is "roughness squared" in Disney’s reparameterization\nfloat G_GGX_Smith( const in float alpha, const in float dotNL, const in float dotNV ) {\n\n\t// geometry term (normalized) = G(l)⋅G(v) / 4(n⋅l)(n⋅v)\n\t// also see #12151\n\n\tfloat a2 = pow2( alpha );\n\n\tfloat gl = dotNL + sqrt( a2 + ( 1.0 - a2 ) * pow2( dotNL ) );\n\tfloat gv = dotNV + sqrt( a2 + ( 1.0 - a2 ) * pow2( dotNV ) );\n\n\treturn 1.0 / ( gl * gv );\n\n} // validated\n\n// Moving Frostbite to Physically Based Rendering 3.0 - page 12, listing 2\n// https://seblagarde.files.wordpress.com/2015/07/course_notes_moving_frostbite_to_pbr_v32.pdf\nfloat G_GGX_SmithCorrelated( const in float alpha, const in float dotNL, const in float dotNV ) {\n\n\tfloat a2 = pow2( alpha );\n\n\t// dotNL and dotNV are explicitly swapped. This is not a mistake.\n\tfloat gv = dotNL * sqrt( a2 + ( 1.0 - a2 ) * pow2( dotNV ) );\n\tfloat gl = dotNV * sqrt( a2 + ( 1.0 - a2 ) * pow2( dotNL ) );\n\n\treturn 0.5 / max( gv + gl, EPSILON );\n\n}\n\n// Microfacet Models for Refraction through Rough Surfaces - equation (33)\n// http://graphicrants.blogspot.com/2013/08/specular-brdf-reference.html\n// alpha is "roughness squared" in Disney’s reparameterization\nfloat D_GGX( const in float alpha, const in float dotNH ) {\n\n\tfloat a2 = pow2( alpha );\n\n\tfloat denom = pow2( dotNH ) * ( a2 - 1.0 ) + 1.0; // avoid alpha = 0 with dotNH = 1\n\n\treturn RECIPROCAL_PI * a2 / pow2( denom );\n\n}\n\n// GGX Distribution, Schlick Fresnel, GGX-Smith Visibility\nvec3 BRDF_Specular_GGX( const in IncidentLight incidentLight, const in vec3 viewDir, const in vec3 normal, const in vec3 specularColor, const in float roughness ) {\n\n\tfloat alpha = pow2( roughness ); // UE4\'s roughness\n\n\tvec3 halfDir = normalize( incidentLight.direction + viewDir );\n\n\tfloat dotNL = saturate( dot( normal, incidentLight.direction ) );\n\tfloat dotNV = saturate( dot( normal, viewDir ) );\n\tfloat dotNH = saturate( dot( normal, halfDir ) );\n\tfloat dotLH = saturate( dot( incidentLight.direction, halfDir ) );\n\n\tvec3 F = F_Schlick( specularColor, dotLH );\n\n\tfloat G = G_GGX_SmithCorrelated( alpha, dotNL, dotNV );\n\n\tfloat D = D_GGX( alpha, dotNH );\n\n\treturn F * ( G * D );\n\n} // validated\n\n// Rect Area Light\n\n// Real-Time Polygonal-Light Shading with Linearly Transformed Cosines\n// by Eric Heitz, Jonathan Dupuy, Stephen Hill and David Neubelt\n// code: https://github.com/selfshadow/ltc_code/\n\nvec2 LTC_Uv( const in vec3 N, const in vec3 V, const in float roughness ) {\n\n\tconst float LUT_SIZE = 64.0;\n\tconst float LUT_SCALE = ( LUT_SIZE - 1.0 ) / LUT_SIZE;\n\tconst float LUT_BIAS = 0.5 / LUT_SIZE;\n\n\tfloat dotNV = saturate( dot( N, V ) );\n\n\t// texture parameterized by sqrt( GGX alpha ) and sqrt( 1 - cos( theta ) )\n\tvec2 uv = vec2( roughness, sqrt( 1.0 - dotNV ) );\n\n\tuv = uv * LUT_SCALE + LUT_BIAS;\n\n\treturn uv;\n\n}\n\nfloat LTC_ClippedSphereFormFactor( const in vec3 f ) {\n\n\t// Real-Time Area Lighting: a Journey from Research to Production (p.102)\n\t// An approximation of the form factor of a horizon-clipped rectangle.\n\n\tfloat l = length( f );\n\n\treturn max( ( l * l + f.z ) / ( l + 1.0 ), 0.0 );\n\n}\n\nvec3 LTC_EdgeVectorFormFactor( const in vec3 v1, const in vec3 v2 ) {\n\n\tfloat x = dot( v1, v2 );\n\n\tfloat y = abs( x );\n\n\t// rational polynomial approximation to theta / sin( theta ) / 2PI\n\tfloat a = 0.8543985 + ( 0.4965155 + 0.0145206 * y ) * y;\n\tfloat b = 3.4175940 + ( 4.1616724 + y ) * y;\n\tfloat v = a / b;\n\n\tfloat theta_sintheta = ( x > 0.0 ) ? v : 0.5 * inversesqrt( max( 1.0 - x * x, 1e-7 ) ) - v;\n\n\treturn cross( v1, v2 ) * theta_sintheta;\n\n}\n\nvec3 LTC_Evaluate( const in vec3 N, const in vec3 V, const in vec3 P, const in mat3 mInv, const in vec3 rectCoords[ 4 ] ) {\n\n\t// bail if point is on back side of plane of light\n\t// assumes ccw winding order of light vertices\n\tvec3 v1 = rectCoords[ 1 ] - rectCoords[ 0 ];\n\tvec3 v2 = rectCoords[ 3 ] - rectCoords[ 0 ];\n\tvec3 lightNormal = cross( v1, v2 );\n\n\tif( dot( lightNormal, P - rectCoords[ 0 ] ) < 0.0 ) return vec3( 0.0 );\n\n\t// construct orthonormal basis around N\n\tvec3 T1, T2;\n\tT1 = normalize( V - N * dot( V, N ) );\n\tT2 = - cross( N, T1 ); // negated from paper; possibly due to a different handedness of world coordinate system\n\n\t// compute transform\n\tmat3 mat = mInv * transposeMat3( mat3( T1, T2, N ) );\n\n\t// transform rect\n\tvec3 coords[ 4 ];\n\tcoords[ 0 ] = mat * ( rectCoords[ 0 ] - P );\n\tcoords[ 1 ] = mat * ( rectCoords[ 1 ] - P );\n\tcoords[ 2 ] = mat * ( rectCoords[ 2 ] - P );\n\tcoords[ 3 ] = mat * ( rectCoords[ 3 ] - P );\n\n\t// project rect onto sphere\n\tcoords[ 0 ] = normalize( coords[ 0 ] );\n\tcoords[ 1 ] = normalize( coords[ 1 ] );\n\tcoords[ 2 ] = normalize( coords[ 2 ] );\n\tcoords[ 3 ] = normalize( coords[ 3 ] );\n\n\t// calculate vector form factor\n\tvec3 vectorFormFactor = vec3( 0.0 );\n\tvectorFormFactor += LTC_EdgeVectorFormFactor( coords[ 0 ], coords[ 1 ] );\n\tvectorFormFactor += LTC_EdgeVectorFormFactor( coords[ 1 ], coords[ 2 ] );\n\tvectorFormFactor += LTC_EdgeVectorFormFactor( coords[ 2 ], coords[ 3 ] );\n\tvectorFormFactor += LTC_EdgeVectorFormFactor( coords[ 3 ], coords[ 0 ] );\n\n\t// adjust for horizon clipping\n\tfloat result = LTC_ClippedSphereFormFactor( vectorFormFactor );\n\n/*\n\t// alternate method of adjusting for horizon clipping (see referece)\n\t// refactoring required\n\tfloat len = length( vectorFormFactor );\n\tfloat z = vectorFormFactor.z / len;\n\n\tconst float LUT_SIZE = 64.0;\n\tconst float LUT_SCALE = ( LUT_SIZE - 1.0 ) / LUT_SIZE;\n\tconst float LUT_BIAS = 0.5 / LUT_SIZE;\n\n\t// tabulated horizon-clipped sphere, apparently...\n\tvec2 uv = vec2( z * 0.5 + 0.5, len );\n\tuv = uv * LUT_SCALE + LUT_BIAS;\n\n\tfloat scale = texture2D( ltc_2, uv ).w;\n\n\tfloat result = len * scale;\n*/\n\n\treturn vec3( result );\n\n}\n\n// End Rect Area Light\n\n// ref: https://www.unrealengine.com/blog/physically-based-shading-on-mobile - environmentBRDF for GGX on mobile\nvec3 BRDF_Specular_GGX_Environment( const in vec3 viewDir, const in vec3 normal, const in vec3 specularColor, const in float roughness ) {\n\n\tfloat dotNV = saturate( dot( normal, viewDir ) );\n\n\tvec2 brdf = integrateSpecularBRDF( dotNV, roughness );\n\n\treturn specularColor * brdf.x + brdf.y;\n\n} // validated\n\n// Fdez-Agüera\'s "Multiple-Scattering Microfacet Model for Real-Time Image Based Lighting"\n// Approximates multiscattering in order to preserve energy.\n// http://www.jcgt.org/published/0008/01/03/\nvoid BRDF_Specular_Multiscattering_Environment( const in GeometricContext geometry, const in vec3 specularColor, const in float roughness, inout vec3 singleScatter, inout vec3 multiScatter ) {\n\n\tfloat dotNV = saturate( dot( geometry.normal, geometry.viewDir ) );\n\n\tvec3 F = F_Schlick_RoughnessDependent( specularColor, dotNV, roughness );\n\tvec2 brdf = integrateSpecularBRDF( dotNV, roughness );\n\tvec3 FssEss = F * brdf.x + brdf.y;\n\n\tfloat Ess = brdf.x + brdf.y;\n\tfloat Ems = 1.0 - Ess;\n\n\tvec3 Favg = specularColor + ( 1.0 - specularColor ) * 0.047619; // 1/21\n\tvec3 Fms = FssEss * Favg / ( 1.0 - Ems * Favg );\n\n\tsingleScatter += FssEss;\n\tmultiScatter += Fms * Ems;\n\n}\n\nfloat G_BlinnPhong_Implicit( /* const in float dotNL, const in float dotNV */ ) {\n\n\t// geometry term is (n dot l)(n dot v) / 4(n dot l)(n dot v)\n\treturn 0.25;\n\n}\n\nfloat D_BlinnPhong( const in float shininess, const in float dotNH ) {\n\n\treturn RECIPROCAL_PI * ( shininess * 0.5 + 1.0 ) * pow( dotNH, shininess );\n\n}\n\nvec3 BRDF_Specular_BlinnPhong( const in IncidentLight incidentLight, const in GeometricContext geometry, const in vec3 specularColor, const in float shininess ) {\n\n\tvec3 halfDir = normalize( incidentLight.direction + geometry.viewDir );\n\n\t//float dotNL = saturate( dot( geometry.normal, incidentLight.direction ) );\n\t//float dotNV = saturate( dot( geometry.normal, geometry.viewDir ) );\n\tfloat dotNH = saturate( dot( geometry.normal, halfDir ) );\n\tfloat dotLH = saturate( dot( incidentLight.direction, halfDir ) );\n\n\tvec3 F = F_Schlick( specularColor, dotLH );\n\n\tfloat G = G_BlinnPhong_Implicit( /* dotNL, dotNV */ );\n\n\tfloat D = D_BlinnPhong( shininess, dotNH );\n\n\treturn F * ( G * D );\n\n} // validated\n\n// source: http://simonstechblog.blogspot.ca/2011/12/microfacet-brdf.html\nfloat GGXRoughnessToBlinnExponent( const in float ggxRoughness ) {\n\treturn ( 2.0 / pow2( ggxRoughness + 0.0001 ) - 2.0 );\n}\n\nfloat BlinnExponentToGGXRoughness( const in float blinnExponent ) {\n\treturn sqrt( 2.0 / ( blinnExponent + 2.0 ) );\n}\n\n#if defined( USE_SHEEN )\n\n// https://github.com/google/filament/blob/master/shaders/src/brdf.fs#L94\nfloat D_Charlie(float roughness, float NoH) {\n\t// Estevez and Kulla 2017, "Production Friendly Microfacet Sheen BRDF"\n\tfloat invAlpha = 1.0 / roughness;\n\tfloat cos2h = NoH * NoH;\n\tfloat sin2h = max(1.0 - cos2h, 0.0078125); // 2^(-14/2), so sin2h^2 > 0 in fp16\n\treturn (2.0 + invAlpha) * pow(sin2h, invAlpha * 0.5) / (2.0 * PI);\n}\n\n// https://github.com/google/filament/blob/master/shaders/src/brdf.fs#L136\nfloat V_Neubelt(float NoV, float NoL) {\n\t// Neubelt and Pettineo 2013, "Crafting a Next-gen Material Pipeline for The Order: 1886"\n\treturn saturate(1.0 / (4.0 * (NoL + NoV - NoL * NoV)));\n}\n\nvec3 BRDF_Specular_Sheen( const in float roughness, const in vec3 L, const in GeometricContext geometry, vec3 specularColor ) {\n\n\tvec3 N = geometry.normal;\n\tvec3 V = geometry.viewDir;\n\n\tvec3 H = normalize( V + L );\n\tfloat dotNH = saturate( dot( N, H ) );\n\n\treturn specularColor * D_Charlie( roughness, dotNH ) * V_Neubelt( dot(N, V), dot(N, L) );\n\n}\n\n#endif\n',bumpmap_pars_fragment:"\n#ifdef USE_BUMPMAP\n\n\tuniform sampler2D bumpMap;\n\tuniform float bumpScale;\n\n\t// Bump Mapping Unparametrized Surfaces on the GPU by Morten S. Mikkelsen\n\t// http://api.unrealengine.com/attachments/Engine/Rendering/LightingAndShadows/BumpMappingWithoutTangentSpace/mm_sfgrad_bump.pdf\n\n\t// Evaluate the derivative of the height w.r.t. screen-space using forward differencing (listing 2)\n\n\tvec2 dHdxy_fwd() {\n\n\t\tvec2 dSTdx = dFdx( vUv );\n\t\tvec2 dSTdy = dFdy( vUv );\n\n\t\tfloat Hll = bumpScale * texture2D( bumpMap, vUv ).x;\n\t\tfloat dBx = bumpScale * texture2D( bumpMap, vUv + dSTdx ).x - Hll;\n\t\tfloat dBy = bumpScale * texture2D( bumpMap, vUv + dSTdy ).x - Hll;\n\n\t\treturn vec2( dBx, dBy );\n\n\t}\n\n\tvec3 perturbNormalArb( vec3 surf_pos, vec3 surf_norm, vec2 dHdxy ) {\n\n\t\t// Workaround for Adreno 3XX dFd*( vec3 ) bug. See #9988\n\n\t\tvec3 vSigmaX = vec3( dFdx( surf_pos.x ), dFdx( surf_pos.y ), dFdx( surf_pos.z ) );\n\t\tvec3 vSigmaY = vec3( dFdy( surf_pos.x ), dFdy( surf_pos.y ), dFdy( surf_pos.z ) );\n\t\tvec3 vN = surf_norm;\t\t// normalized\n\n\t\tvec3 R1 = cross( vSigmaY, vN );\n\t\tvec3 R2 = cross( vN, vSigmaX );\n\n\t\tfloat fDet = dot( vSigmaX, R1 );\n\n\t\tfDet *= ( float( gl_FrontFacing ) * 2.0 - 1.0 );\n\n\t\tvec3 vGrad = sign( fDet ) * ( dHdxy.x * R1 + dHdxy.y * R2 );\n\t\treturn normalize( abs( fDet ) * surf_norm - vGrad );\n\n\t}\n\n#endif\n",clipping_planes_fragment:"\n#if NUM_CLIPPING_PLANES > 0\n\n\tvec4 plane;\n\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < UNION_CLIPPING_PLANES; i ++ ) {\n\n\t\tplane = clippingPlanes[ i ];\n\t\tif ( dot( vClipPosition, plane.xyz ) > plane.w ) discard;\n\n\t}\n\t#pragma unroll_loop_end\n\n\t#if UNION_CLIPPING_PLANES < NUM_CLIPPING_PLANES\n\n\t\tbool clipped = true;\n\n\t\t#pragma unroll_loop_start\n\t\tfor ( int i = UNION_CLIPPING_PLANES; i < NUM_CLIPPING_PLANES; i ++ ) {\n\n\t\t\tplane = clippingPlanes[ i ];\n\t\t\tclipped = ( dot( vClipPosition, plane.xyz ) > plane.w ) && clipped;\n\n\t\t}\n\t\t#pragma unroll_loop_end\n\n\t\tif ( clipped ) discard;\n\n\t#endif\n\n#endif\n",clipping_planes_pars_fragment:"\n#if NUM_CLIPPING_PLANES > 0\n\n\tvarying vec3 vClipPosition;\n\n\tuniform vec4 clippingPlanes[ NUM_CLIPPING_PLANES ];\n\n#endif\n",clipping_planes_pars_vertex:"\n#if NUM_CLIPPING_PLANES > 0\n\n\tvarying vec3 vClipPosition;\n\n#endif\n",clipping_planes_vertex:"\n#if NUM_CLIPPING_PLANES > 0\n\n\tvClipPosition = - mvPosition.xyz;\n\n#endif\n",color_fragment:"\n#ifdef USE_COLOR\n\n\tdiffuseColor.rgb *= vColor;\n\n#endif\n",color_pars_fragment:"\n#ifdef USE_COLOR\n\n\tvarying vec3 vColor;\n\n#endif\n",color_pars_vertex:"\n#if defined( USE_COLOR ) || defined( USE_INSTANCING_COLOR )\n\n\tvarying vec3 vColor;\n\n#endif\n",color_vertex:"\n#if defined( USE_COLOR ) || defined( USE_INSTANCING_COLOR )\n\n\tvColor = vec3( 1.0 );\n\n#endif\n\n#ifdef USE_COLOR\n\n\tvColor.xyz *= color.xyz;\n\n#endif\n\n#ifdef USE_INSTANCING_COLOR\n\n\tvColor.xyz *= instanceColor.xyz;\n\n#endif\n",common:"\n#define PI 3.141592653589793\n#define PI2 6.283185307179586\n#define PI_HALF 1.5707963267948966\n#define RECIPROCAL_PI 0.3183098861837907\n#define RECIPROCAL_PI2 0.15915494309189535\n#define EPSILON 1e-6\n\n#ifndef saturate\n// may have defined saturate() already\n#define saturate(a) clamp( a, 0.0, 1.0 )\n#endif\n#define whiteComplement(a) ( 1.0 - saturate( a ) )\n\nfloat pow2( const in float x ) { return x*x; }\nfloat pow3( const in float x ) { return x*x*x; }\nfloat pow4( const in float x ) { float x2 = x*x; return x2*x2; }\nfloat average( const in vec3 color ) { return dot( color, vec3( 0.3333 ) ); }\n// expects values in the range of [0,1]x[0,1], returns values in the [0,1] range.\n// do not collapse into a single function per: http://byteblacksmith.com/improvements-to-the-canonical-one-liner-glsl-rand-for-opengl-es-2-0/\nhighp float rand( const in vec2 uv ) {\n\tconst highp float a = 12.9898, b = 78.233, c = 43758.5453;\n\thighp float dt = dot( uv.xy, vec2( a,b ) ), sn = mod( dt, PI );\n\treturn fract(sin(sn) * c);\n}\n\n#ifdef HIGH_PRECISION\n\tfloat precisionSafeLength( vec3 v ) { return length( v ); }\n#else\n\tfloat max3( vec3 v ) { return max( max( v.x, v.y ), v.z ); }\n\tfloat precisionSafeLength( vec3 v ) {\n\t\tfloat maxComponent = max3( abs( v ) );\n\t\treturn length( v / maxComponent ) * maxComponent;\n\t}\n#endif\n\nstruct IncidentLight {\n\tvec3 color;\n\tvec3 direction;\n\tbool visible;\n};\n\nstruct ReflectedLight {\n\tvec3 directDiffuse;\n\tvec3 directSpecular;\n\tvec3 indirectDiffuse;\n\tvec3 indirectSpecular;\n};\n\nstruct GeometricContext {\n\tvec3 position;\n\tvec3 normal;\n\tvec3 viewDir;\n#ifdef CLEARCOAT\n\tvec3 clearcoatNormal;\n#endif\n};\n\nvec3 transformDirection( in vec3 dir, in mat4 matrix ) {\n\n\treturn normalize( ( matrix * vec4( dir, 0.0 ) ).xyz );\n\n}\n\nvec3 inverseTransformDirection( in vec3 dir, in mat4 matrix ) {\n\n\t// dir can be either a direction vector or a normal vector\n\t// upper-left 3x3 of matrix is assumed to be orthogonal\n\n\treturn normalize( ( vec4( dir, 0.0 ) * matrix ).xyz );\n\n}\n\nvec3 projectOnPlane(in vec3 point, in vec3 pointOnPlane, in vec3 planeNormal ) {\n\n\tfloat distance = dot( planeNormal, point - pointOnPlane );\n\n\treturn - distance * planeNormal + point;\n\n}\n\nfloat sideOfPlane( in vec3 point, in vec3 pointOnPlane, in vec3 planeNormal ) {\n\n\treturn sign( dot( point - pointOnPlane, planeNormal ) );\n\n}\n\nvec3 linePlaneIntersect( in vec3 pointOnLine, in vec3 lineDirection, in vec3 pointOnPlane, in vec3 planeNormal ) {\n\n\treturn lineDirection * ( dot( planeNormal, pointOnPlane - pointOnLine ) / dot( planeNormal, lineDirection ) ) + pointOnLine;\n\n}\n\nmat3 transposeMat3( const in mat3 m ) {\n\n\tmat3 tmp;\n\n\ttmp[ 0 ] = vec3( m[ 0 ].x, m[ 1 ].x, m[ 2 ].x );\n\ttmp[ 1 ] = vec3( m[ 0 ].y, m[ 1 ].y, m[ 2 ].y );\n\ttmp[ 2 ] = vec3( m[ 0 ].z, m[ 1 ].z, m[ 2 ].z );\n\n\treturn tmp;\n\n}\n\n// https://en.wikipedia.org/wiki/Relative_luminance\nfloat linearToRelativeLuminance( const in vec3 color ) {\n\n\tvec3 weights = vec3( 0.2126, 0.7152, 0.0722 );\n\n\treturn dot( weights, color.rgb );\n\n}\n\nbool isPerspectiveMatrix( mat4 m ) {\n\n\treturn m[ 2 ][ 3 ] == - 1.0;\n\n}\n\nvec2 equirectUv( in vec3 dir ) {\n\n\t// dir is assumed to be unit length\n\n\tfloat u = atan( dir.z, dir.x ) * RECIPROCAL_PI2 + 0.5;\n\n\tfloat v = asin( clamp( dir.y, - 1.0, 1.0 ) ) * RECIPROCAL_PI + 0.5;\n\n\treturn vec2( u, v );\n\n}\n", -cube_uv_reflection_fragment:"\n#ifdef ENVMAP_TYPE_CUBE_UV\n\n\t#define cubeUV_maxMipLevel 8.0\n\t#define cubeUV_minMipLevel 4.0\n\t#define cubeUV_maxTileSize 256.0\n\t#define cubeUV_minTileSize 16.0\n\n\t// These shader functions convert between the UV coordinates of a single face of\n\t// a cubemap, the 0-5 integer index of a cube face, and the direction vector for\n\t// sampling a textureCube (not generally normalized ).\n\n\tfloat getFace( vec3 direction ) {\n\n\t\tvec3 absDirection = abs( direction );\n\n\t\tfloat face = - 1.0;\n\n\t\tif ( absDirection.x > absDirection.z ) {\n\n\t\t\tif ( absDirection.x > absDirection.y )\n\n\t\t\t\tface = direction.x > 0.0 ? 0.0 : 3.0;\n\n\t\t\telse\n\n\t\t\t\tface = direction.y > 0.0 ? 1.0 : 4.0;\n\n\t\t} else {\n\n\t\t\tif ( absDirection.z > absDirection.y )\n\n\t\t\t\tface = direction.z > 0.0 ? 2.0 : 5.0;\n\n\t\t\telse\n\n\t\t\t\tface = direction.y > 0.0 ? 1.0 : 4.0;\n\n\t\t}\n\n\t\treturn face;\n\n\t}\n\n\t// RH coordinate system; PMREM face-indexing convention\n\tvec2 getUV( vec3 direction, float face ) {\n\n\t\tvec2 uv;\n\n\t\tif ( face == 0.0 ) {\n\n\t\t\tuv = vec2( direction.z, direction.y ) / abs( direction.x ); // pos x\n\n\t\t} else if ( face == 1.0 ) {\n\n\t\t\tuv = vec2( - direction.x, - direction.z ) / abs( direction.y ); // pos y\n\n\t\t} else if ( face == 2.0 ) {\n\n\t\t\tuv = vec2( - direction.x, direction.y ) / abs( direction.z ); // pos z\n\n\t\t} else if ( face == 3.0 ) {\n\n\t\t\tuv = vec2( - direction.z, direction.y ) / abs( direction.x ); // neg x\n\n\t\t} else if ( face == 4.0 ) {\n\n\t\t\tuv = vec2( - direction.x, direction.z ) / abs( direction.y ); // neg y\n\n\t\t} else {\n\n\t\t\tuv = vec2( direction.x, direction.y ) / abs( direction.z ); // neg z\n\n\t\t}\n\n\t\treturn 0.5 * ( uv + 1.0 );\n\n\t}\n\n\tvec3 bilinearCubeUV( sampler2D envMap, vec3 direction, float mipInt ) {\n\n\t\tfloat face = getFace( direction );\n\n\t\tfloat filterInt = max( cubeUV_minMipLevel - mipInt, 0.0 );\n\n\t\tmipInt = max( mipInt, cubeUV_minMipLevel );\n\n\t\tfloat faceSize = exp2( mipInt );\n\n\t\tfloat texelSize = 1.0 / ( 3.0 * cubeUV_maxTileSize );\n\n\t\tvec2 uv = getUV( direction, face ) * ( faceSize - 1.0 );\n\n\t\tvec2 f = fract( uv );\n\n\t\tuv += 0.5 - f;\n\n\t\tif ( face > 2.0 ) {\n\n\t\t\tuv.y += faceSize;\n\n\t\t\tface -= 3.0;\n\n\t\t}\n\n\t\tuv.x += face * faceSize;\n\n\t\tif ( mipInt < cubeUV_maxMipLevel ) {\n\n\t\t\tuv.y += 2.0 * cubeUV_maxTileSize;\n\n\t\t}\n\n\t\tuv.y += filterInt * 2.0 * cubeUV_minTileSize;\n\n\t\tuv.x += 3.0 * max( 0.0, cubeUV_maxTileSize - 2.0 * faceSize );\n\n\t\tuv *= texelSize;\n\n\t\tvec3 tl = envMapTexelToLinear( texture2D( envMap, uv ) ).rgb;\n\n\t\tuv.x += texelSize;\n\n\t\tvec3 tr = envMapTexelToLinear( texture2D( envMap, uv ) ).rgb;\n\n\t\tuv.y += texelSize;\n\n\t\tvec3 br = envMapTexelToLinear( texture2D( envMap, uv ) ).rgb;\n\n\t\tuv.x -= texelSize;\n\n\t\tvec3 bl = envMapTexelToLinear( texture2D( envMap, uv ) ).rgb;\n\n\t\tvec3 tm = mix( tl, tr, f.x );\n\n\t\tvec3 bm = mix( bl, br, f.x );\n\n\t\treturn mix( tm, bm, f.y );\n\n\t}\n\n\t// These defines must match with PMREMGenerator\n\n\t#define r0 1.0\n\t#define v0 0.339\n\t#define m0 - 2.0\n\t#define r1 0.8\n\t#define v1 0.276\n\t#define m1 - 1.0\n\t#define r4 0.4\n\t#define v4 0.046\n\t#define m4 2.0\n\t#define r5 0.305\n\t#define v5 0.016\n\t#define m5 3.0\n\t#define r6 0.21\n\t#define v6 0.0038\n\t#define m6 4.0\n\n\tfloat roughnessToMip( float roughness ) {\n\n\t\tfloat mip = 0.0;\n\n\t\tif ( roughness >= r1 ) {\n\n\t\t\tmip = ( r0 - roughness ) * ( m1 - m0 ) / ( r0 - r1 ) + m0;\n\n\t\t} else if ( roughness >= r4 ) {\n\n\t\t\tmip = ( r1 - roughness ) * ( m4 - m1 ) / ( r1 - r4 ) + m1;\n\n\t\t} else if ( roughness >= r5 ) {\n\n\t\t\tmip = ( r4 - roughness ) * ( m5 - m4 ) / ( r4 - r5 ) + m4;\n\n\t\t} else if ( roughness >= r6 ) {\n\n\t\t\tmip = ( r5 - roughness ) * ( m6 - m5 ) / ( r5 - r6 ) + m5;\n\n\t\t} else {\n\n\t\t\tmip = - 2.0 * log2( 1.16 * roughness ); // 1.16 = 1.79^0.25\n\t\t}\n\n\t\treturn mip;\n\n\t}\n\n\tvec4 textureCubeUV( sampler2D envMap, vec3 sampleDir, float roughness ) {\n\n\t\tfloat mip = clamp( roughnessToMip( roughness ), m0, cubeUV_maxMipLevel );\n\n\t\tfloat mipF = fract( mip );\n\n\t\tfloat mipInt = floor( mip );\n\n\t\tvec3 color0 = bilinearCubeUV( envMap, sampleDir, mipInt );\n\n\t\tif ( mipF == 0.0 ) {\n\n\t\t\treturn vec4( color0, 1.0 );\n\n\t\t} else {\n\n\t\t\tvec3 color1 = bilinearCubeUV( envMap, sampleDir, mipInt + 1.0 );\n\n\t\t\treturn vec4( mix( color0, color1, mipF ), 1.0 );\n\n\t\t}\n\n\t}\n\n#endif\n",defaultnormal_vertex:"\nvec3 transformedNormal = objectNormal;\n\n#ifdef USE_INSTANCING\n\n\t// this is in lieu of a per-instance normal-matrix\n\t// shear transforms in the instance matrix are not supported\n\n\tmat3 m = mat3( instanceMatrix );\n\n\ttransformedNormal /= vec3( dot( m[ 0 ], m[ 0 ] ), dot( m[ 1 ], m[ 1 ] ), dot( m[ 2 ], m[ 2 ] ) );\n\n\ttransformedNormal = m * transformedNormal;\n\n#endif\n\ntransformedNormal = normalMatrix * transformedNormal;\n\n#ifdef FLIP_SIDED\n\n\ttransformedNormal = - transformedNormal;\n\n#endif\n\n#ifdef USE_TANGENT\n\n\tvec3 transformedTangent = ( modelViewMatrix * vec4( objectTangent, 0.0 ) ).xyz;\n\n\t#ifdef FLIP_SIDED\n\n\t\ttransformedTangent = - transformedTangent;\n\n\t#endif\n\n#endif\n",displacementmap_pars_vertex:"\n#ifdef USE_DISPLACEMENTMAP\n\n\tuniform sampler2D displacementMap;\n\tuniform float displacementScale;\n\tuniform float displacementBias;\n\n#endif\n",displacementmap_vertex:"\n#ifdef USE_DISPLACEMENTMAP\n\n\ttransformed += normalize( objectNormal ) * ( texture2D( displacementMap, vUv ).x * displacementScale + displacementBias );\n\n#endif\n",emissivemap_fragment:"\n#ifdef USE_EMISSIVEMAP\n\n\tvec4 emissiveColor = texture2D( emissiveMap, vUv );\n\n\temissiveColor.rgb = emissiveMapTexelToLinear( emissiveColor ).rgb;\n\n\ttotalEmissiveRadiance *= emissiveColor.rgb;\n\n#endif\n",emissivemap_pars_fragment:"\n#ifdef USE_EMISSIVEMAP\n\n\tuniform sampler2D emissiveMap;\n\n#endif\n",encodings_fragment:"\ngl_FragColor = linearToOutputTexel( gl_FragColor );\n",encodings_pars_fragment:"\n// For a discussion of what this is, please read this: http://lousodrome.net/blog/light/2013/05/26/gamma-correct-and-hdr-rendering-in-a-32-bits-buffer/\n\nvec4 LinearToLinear( in vec4 value ) {\n\treturn value;\n}\n\nvec4 GammaToLinear( in vec4 value, in float gammaFactor ) {\n\treturn vec4( pow( value.rgb, vec3( gammaFactor ) ), value.a );\n}\n\nvec4 LinearToGamma( in vec4 value, in float gammaFactor ) {\n\treturn vec4( pow( value.rgb, vec3( 1.0 / gammaFactor ) ), value.a );\n}\n\nvec4 sRGBToLinear( in vec4 value ) {\n\treturn vec4( mix( pow( value.rgb * 0.9478672986 + vec3( 0.0521327014 ), vec3( 2.4 ) ), value.rgb * 0.0773993808, vec3( lessThanEqual( value.rgb, vec3( 0.04045 ) ) ) ), value.a );\n}\n\nvec4 LinearTosRGB( in vec4 value ) {\n\treturn vec4( mix( pow( value.rgb, vec3( 0.41666 ) ) * 1.055 - vec3( 0.055 ), value.rgb * 12.92, vec3( lessThanEqual( value.rgb, vec3( 0.0031308 ) ) ) ), value.a );\n}\n\nvec4 RGBEToLinear( in vec4 value ) {\n\treturn vec4( value.rgb * exp2( value.a * 255.0 - 128.0 ), 1.0 );\n}\n\nvec4 LinearToRGBE( in vec4 value ) {\n\tfloat maxComponent = max( max( value.r, value.g ), value.b );\n\tfloat fExp = clamp( ceil( log2( maxComponent ) ), -128.0, 127.0 );\n\treturn vec4( value.rgb / exp2( fExp ), ( fExp + 128.0 ) / 255.0 );\n\t// return vec4( value.brg, ( 3.0 + 128.0 ) / 256.0 );\n}\n\n// reference: http://iwasbeingirony.blogspot.ca/2010/06/difference-between-rgbm-and-rgbd.html\nvec4 RGBMToLinear( in vec4 value, in float maxRange ) {\n\treturn vec4( value.rgb * value.a * maxRange, 1.0 );\n}\n\nvec4 LinearToRGBM( in vec4 value, in float maxRange ) {\n\tfloat maxRGB = max( value.r, max( value.g, value.b ) );\n\tfloat M = clamp( maxRGB / maxRange, 0.0, 1.0 );\n\tM = ceil( M * 255.0 ) / 255.0;\n\treturn vec4( value.rgb / ( M * maxRange ), M );\n}\n\n// reference: http://iwasbeingirony.blogspot.ca/2010/06/difference-between-rgbm-and-rgbd.html\nvec4 RGBDToLinear( in vec4 value, in float maxRange ) {\n\treturn vec4( value.rgb * ( ( maxRange / 255.0 ) / value.a ), 1.0 );\n}\n\nvec4 LinearToRGBD( in vec4 value, in float maxRange ) {\n\tfloat maxRGB = max( value.r, max( value.g, value.b ) );\n\tfloat D = max( maxRange / maxRGB, 1.0 );\n\t// NOTE: The implementation with min causes the shader to not compile on\n\t// a common Alcatel A502DL in Chrome 78/Android 8.1. Some research suggests \n\t// that the chipset is Mediatek MT6739 w/ IMG PowerVR GE8100 GPU.\n\t// D = min( floor( D ) / 255.0, 1.0 );\n\tD = clamp( floor( D ) / 255.0, 0.0, 1.0 );\n\treturn vec4( value.rgb * ( D * ( 255.0 / maxRange ) ), D );\n}\n\n// LogLuv reference: http://graphicrants.blogspot.ca/2009/04/rgbm-color-encoding.html\n\n// M matrix, for encoding\nconst mat3 cLogLuvM = mat3( 0.2209, 0.3390, 0.4184, 0.1138, 0.6780, 0.7319, 0.0102, 0.1130, 0.2969 );\nvec4 LinearToLogLuv( in vec4 value ) {\n\tvec3 Xp_Y_XYZp = cLogLuvM * value.rgb;\n\tXp_Y_XYZp = max( Xp_Y_XYZp, vec3( 1e-6, 1e-6, 1e-6 ) );\n\tvec4 vResult;\n\tvResult.xy = Xp_Y_XYZp.xy / Xp_Y_XYZp.z;\n\tfloat Le = 2.0 * log2(Xp_Y_XYZp.y) + 127.0;\n\tvResult.w = fract( Le );\n\tvResult.z = ( Le - ( floor( vResult.w * 255.0 ) ) / 255.0 ) / 255.0;\n\treturn vResult;\n}\n\n// Inverse M matrix, for decoding\nconst mat3 cLogLuvInverseM = mat3( 6.0014, -2.7008, -1.7996, -1.3320, 3.1029, -5.7721, 0.3008, -1.0882, 5.6268 );\nvec4 LogLuvToLinear( in vec4 value ) {\n\tfloat Le = value.z * 255.0 + value.w;\n\tvec3 Xp_Y_XYZp;\n\tXp_Y_XYZp.y = exp2( ( Le - 127.0 ) / 2.0 );\n\tXp_Y_XYZp.z = Xp_Y_XYZp.y / value.y;\n\tXp_Y_XYZp.x = value.x * Xp_Y_XYZp.z;\n\tvec3 vRGB = cLogLuvInverseM * Xp_Y_XYZp.rgb;\n\treturn vec4( max( vRGB, 0.0 ), 1.0 );\n}\n",envmap_fragment:"\n#ifdef USE_ENVMAP\n\n\t#ifdef ENV_WORLDPOS\n\n\t\tvec3 cameraToFrag;\n\n\t\tif ( isOrthographic ) {\n\n\t\t\tcameraToFrag = normalize( vec3( - viewMatrix[ 0 ][ 2 ], - viewMatrix[ 1 ][ 2 ], - viewMatrix[ 2 ][ 2 ] ) );\n\n\t\t} else {\n\n\t\t\tcameraToFrag = normalize( vWorldPosition - cameraPosition );\n\n\t\t}\n\n\t\t// Transforming Normal Vectors with the Inverse Transformation\n\t\tvec3 worldNormal = inverseTransformDirection( normal, viewMatrix );\n\n\t\t#ifdef ENVMAP_MODE_REFLECTION\n\n\t\t\tvec3 reflectVec = reflect( cameraToFrag, worldNormal );\n\n\t\t#else\n\n\t\t\tvec3 reflectVec = refract( cameraToFrag, worldNormal, refractionRatio );\n\n\t\t#endif\n\n\t#else\n\n\t\tvec3 reflectVec = vReflect;\n\n\t#endif\n\n\t#ifdef ENVMAP_TYPE_CUBE\n\n\t\tvec4 envColor = textureCube( envMap, vec3( flipEnvMap * reflectVec.x, reflectVec.yz ) );\n\n\t#elif defined( ENVMAP_TYPE_CUBE_UV )\n\n\t\tvec4 envColor = textureCubeUV( envMap, reflectVec, 0.0 );\n\n\t#else\n\n\t\tvec4 envColor = vec4( 0.0 );\n\n\t#endif\n\n\t#ifndef ENVMAP_TYPE_CUBE_UV\n\n\t\tenvColor = envMapTexelToLinear( envColor );\n\n\t#endif\n\n\t#ifdef ENVMAP_BLENDING_MULTIPLY\n\n\t\toutgoingLight = mix( outgoingLight, outgoingLight * envColor.xyz, specularStrength * reflectivity );\n\n\t#elif defined( ENVMAP_BLENDING_MIX )\n\n\t\toutgoingLight = mix( outgoingLight, envColor.xyz, specularStrength * reflectivity );\n\n\t#elif defined( ENVMAP_BLENDING_ADD )\n\n\t\toutgoingLight += envColor.xyz * specularStrength * reflectivity;\n\n\t#endif\n\n#endif\n",envmap_common_pars_fragment:"\n#ifdef USE_ENVMAP\n\n\tuniform float envMapIntensity;\n\tuniform float flipEnvMap;\n\tuniform int maxMipLevel;\n\n\t#ifdef ENVMAP_TYPE_CUBE\n\t\tuniform samplerCube envMap;\n\t#else\n\t\tuniform sampler2D envMap;\n\t#endif\n\t\n#endif\n",envmap_pars_fragment:"\n#ifdef USE_ENVMAP\n\n\tuniform float reflectivity;\n\n\t#if defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) || defined( PHONG )\n\n\t\t#define ENV_WORLDPOS\n\n\t#endif\n\n\t#ifdef ENV_WORLDPOS\n\n\t\tvarying vec3 vWorldPosition;\n\t\tuniform float refractionRatio;\n\t#else\n\t\tvarying vec3 vReflect;\n\t#endif\n\n#endif\n",envmap_pars_vertex:"\n#ifdef USE_ENVMAP\n\n\t#if defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) ||defined( PHONG )\n\n\t\t#define ENV_WORLDPOS\n\n\t#endif\n\n\t#ifdef ENV_WORLDPOS\n\t\t\n\t\tvarying vec3 vWorldPosition;\n\n\t#else\n\n\t\tvarying vec3 vReflect;\n\t\tuniform float refractionRatio;\n\n\t#endif\n\n#endif\n",envmap_physical_pars_fragment:"\n#if defined( USE_ENVMAP )\n\n\t#ifdef ENVMAP_MODE_REFRACTION\n\t\tuniform float refractionRatio;\n\t#endif\n\n\tvec3 getLightProbeIndirectIrradiance( /*const in SpecularLightProbe specularLightProbe,*/ const in GeometricContext geometry, const in int maxMIPLevel ) {\n\n\t\tvec3 worldNormal = inverseTransformDirection( geometry.normal, viewMatrix );\n\n\t\t#ifdef ENVMAP_TYPE_CUBE\n\n\t\t\tvec3 queryVec = vec3( flipEnvMap * worldNormal.x, worldNormal.yz );\n\n\t\t\t// TODO: replace with properly filtered cubemaps and access the irradiance LOD level, be it the last LOD level\n\t\t\t// of a specular cubemap, or just the default level of a specially created irradiance cubemap.\n\n\t\t\t#ifdef TEXTURE_LOD_EXT\n\n\t\t\t\tvec4 envMapColor = textureCubeLodEXT( envMap, queryVec, float( maxMIPLevel ) );\n\n\t\t\t#else\n\n\t\t\t\t// force the bias high to get the last LOD level as it is the most blurred.\n\t\t\t\tvec4 envMapColor = textureCube( envMap, queryVec, float( maxMIPLevel ) );\n\n\t\t\t#endif\n\n\t\t\tenvMapColor.rgb = envMapTexelToLinear( envMapColor ).rgb;\n\n\t\t#elif defined( ENVMAP_TYPE_CUBE_UV )\n\n\t\t\tvec4 envMapColor = textureCubeUV( envMap, worldNormal, 1.0 );\n\n\t\t#else\n\n\t\t\tvec4 envMapColor = vec4( 0.0 );\n\n\t\t#endif\n\n\t\treturn PI * envMapColor.rgb * envMapIntensity;\n\n\t}\n\n\t// Trowbridge-Reitz distribution to Mip level, following the logic of http://casual-effects.blogspot.ca/2011/08/plausible-environment-lighting-in-two.html\n\tfloat getSpecularMIPLevel( const in float roughness, const in int maxMIPLevel ) {\n\n\t\tfloat maxMIPLevelScalar = float( maxMIPLevel );\n\n\t\tfloat sigma = PI * roughness * roughness / ( 1.0 + roughness );\n\t\tfloat desiredMIPLevel = maxMIPLevelScalar + log2( sigma );\n\n\t\t// clamp to allowable LOD ranges.\n\t\treturn clamp( desiredMIPLevel, 0.0, maxMIPLevelScalar );\n\n\t}\n\n\tvec3 getLightProbeIndirectRadiance( /*const in SpecularLightProbe specularLightProbe,*/ const in vec3 viewDir, const in vec3 normal, const in float roughness, const in int maxMIPLevel ) {\n\n\t\t#ifdef ENVMAP_MODE_REFLECTION\n\n\t\t\tvec3 reflectVec = reflect( -viewDir, normal );\n\n\t\t\t// Mixing the reflection with the normal is more accurate and keeps rough objects from gathering light from behind their tangent plane.\n\t\t\treflectVec = normalize( mix( reflectVec, normal, roughness * roughness) );\n\n\t\t#else\n\n\t\t\tvec3 reflectVec = refract( -viewDir, normal, refractionRatio );\n\n\t\t#endif\n\n\t\treflectVec = inverseTransformDirection( reflectVec, viewMatrix );\n\n\t\tfloat specularMIPLevel = getSpecularMIPLevel( roughness, maxMIPLevel );\n\n\t\t#ifdef ENVMAP_TYPE_CUBE\n\n\t\t\tvec3 queryReflectVec = vec3( flipEnvMap * reflectVec.x, reflectVec.yz );\n\n\t\t\t#ifdef TEXTURE_LOD_EXT\n\n\t\t\t\tvec4 envMapColor = textureCubeLodEXT( envMap, queryReflectVec, specularMIPLevel );\n\n\t\t\t#else\n\n\t\t\t\tvec4 envMapColor = textureCube( envMap, queryReflectVec, specularMIPLevel );\n\n\t\t\t#endif\n\n\t\t\tenvMapColor.rgb = envMapTexelToLinear( envMapColor ).rgb;\n\n\t\t#elif defined( ENVMAP_TYPE_CUBE_UV )\n\n\t\t\tvec4 envMapColor = textureCubeUV( envMap, reflectVec, roughness );\n\n\t\t#endif\n\n\t\treturn envMapColor.rgb * envMapIntensity;\n\n\t}\n\n#endif\n",envmap_vertex:"\n#ifdef USE_ENVMAP\n\n\t#ifdef ENV_WORLDPOS\n\n\t\tvWorldPosition = worldPosition.xyz;\n\n\t#else\n\n\t\tvec3 cameraToVertex;\n\n\t\tif ( isOrthographic ) {\n\n\t\t\tcameraToVertex = normalize( vec3( - viewMatrix[ 0 ][ 2 ], - viewMatrix[ 1 ][ 2 ], - viewMatrix[ 2 ][ 2 ] ) );\n\n\t\t} else {\n\n\t\t\tcameraToVertex = normalize( worldPosition.xyz - cameraPosition );\n\n\t\t}\n\n\t\tvec3 worldNormal = inverseTransformDirection( transformedNormal, viewMatrix );\n\n\t\t#ifdef ENVMAP_MODE_REFLECTION\n\n\t\t\tvReflect = reflect( cameraToVertex, worldNormal );\n\n\t\t#else\n\n\t\t\tvReflect = refract( cameraToVertex, worldNormal, refractionRatio );\n\n\t\t#endif\n\n\t#endif\n\n#endif\n",fog_vertex:"\n#ifdef USE_FOG\n\n\tfogDepth = - mvPosition.z;\n\n#endif\n",fog_pars_vertex:"\n#ifdef USE_FOG\n\n\tvarying float fogDepth;\n\n#endif\n",fog_fragment:"\n#ifdef USE_FOG\n\n\t#ifdef FOG_EXP2\n\n\t\tfloat fogFactor = 1.0 - exp( - fogDensity * fogDensity * fogDepth * fogDepth );\n\n\t#else\n\n\t\tfloat fogFactor = smoothstep( fogNear, fogFar, fogDepth );\n\n\t#endif\n\n\tgl_FragColor.rgb = mix( gl_FragColor.rgb, fogColor, fogFactor );\n\n#endif\n",fog_pars_fragment:"\n#ifdef USE_FOG\n\n\tuniform vec3 fogColor;\n\tvarying float fogDepth;\n\n\t#ifdef FOG_EXP2\n\n\t\tuniform float fogDensity;\n\n\t#else\n\n\t\tuniform float fogNear;\n\t\tuniform float fogFar;\n\n\t#endif\n\n#endif\n",gradientmap_pars_fragment:"\n\n#ifdef USE_GRADIENTMAP\n\n\tuniform sampler2D gradientMap;\n\n#endif\n\nvec3 getGradientIrradiance( vec3 normal, vec3 lightDirection ) {\n\n\t// dotNL will be from -1.0 to 1.0\n\tfloat dotNL = dot( normal, lightDirection );\n\tvec2 coord = vec2( dotNL * 0.5 + 0.5, 0.0 );\n\n\t#ifdef USE_GRADIENTMAP\n\n\t\treturn texture2D( gradientMap, coord ).rgb;\n\n\t#else\n\n\t\treturn ( coord.x < 0.7 ) ? vec3( 0.7 ) : vec3( 1.0 );\n\n\t#endif\n\n}\n",lightmap_fragment:"\n#ifdef USE_LIGHTMAP\n\n\tvec4 lightMapTexel= texture2D( lightMap, vUv2 );\n\treflectedLight.indirectDiffuse += PI * lightMapTexelToLinear( lightMapTexel ).rgb * lightMapIntensity; // factor of PI should not be present; included here to prevent breakage\n\n#endif\n",lightmap_pars_fragment:"\n#ifdef USE_LIGHTMAP\n\n\tuniform sampler2D lightMap;\n\tuniform float lightMapIntensity;\n\n#endif\n",lights_lambert_vertex:"\nvec3 diffuse = vec3( 1.0 );\n\nGeometricContext geometry;\ngeometry.position = mvPosition.xyz;\ngeometry.normal = normalize( transformedNormal );\ngeometry.viewDir = ( isOrthographic ) ? vec3( 0, 0, 1 ) : normalize( -mvPosition.xyz );\n\nGeometricContext backGeometry;\nbackGeometry.position = geometry.position;\nbackGeometry.normal = -geometry.normal;\nbackGeometry.viewDir = geometry.viewDir;\n\nvLightFront = vec3( 0.0 );\nvIndirectFront = vec3( 0.0 );\n#ifdef DOUBLE_SIDED\n\tvLightBack = vec3( 0.0 );\n\tvIndirectBack = vec3( 0.0 );\n#endif\n\nIncidentLight directLight;\nfloat dotNL;\nvec3 directLightColor_Diffuse;\n\nvIndirectFront += getAmbientLightIrradiance( ambientLightColor );\n\nvIndirectFront += getLightProbeIrradiance( lightProbe, geometry );\n\n#ifdef DOUBLE_SIDED\n\n\tvIndirectBack += getAmbientLightIrradiance( ambientLightColor );\n\n\tvIndirectBack += getLightProbeIrradiance( lightProbe, backGeometry );\n\n#endif\n\n#if NUM_POINT_LIGHTS > 0\n\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_POINT_LIGHTS; i ++ ) {\n\n\t\tgetPointDirectLightIrradiance( pointLights[ i ], geometry, directLight );\n\n\t\tdotNL = dot( geometry.normal, directLight.direction );\n\t\tdirectLightColor_Diffuse = PI * directLight.color;\n\n\t\tvLightFront += saturate( dotNL ) * directLightColor_Diffuse;\n\n\t\t#ifdef DOUBLE_SIDED\n\n\t\t\tvLightBack += saturate( -dotNL ) * directLightColor_Diffuse;\n\n\t\t#endif\n\n\t}\n\t#pragma unroll_loop_end\n\n#endif\n\n#if NUM_SPOT_LIGHTS > 0\n\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_SPOT_LIGHTS; i ++ ) {\n\n\t\tgetSpotDirectLightIrradiance( spotLights[ i ], geometry, directLight );\n\n\t\tdotNL = dot( geometry.normal, directLight.direction );\n\t\tdirectLightColor_Diffuse = PI * directLight.color;\n\n\t\tvLightFront += saturate( dotNL ) * directLightColor_Diffuse;\n\n\t\t#ifdef DOUBLE_SIDED\n\n\t\t\tvLightBack += saturate( -dotNL ) * directLightColor_Diffuse;\n\n\t\t#endif\n\t}\n\t#pragma unroll_loop_end\n\n#endif\n\n/*\n#if NUM_RECT_AREA_LIGHTS > 0\n\n\tfor ( int i = 0; i < NUM_RECT_AREA_LIGHTS; i ++ ) {\n\n\t\t// TODO (abelnation): implement\n\n\t}\n\n#endif\n*/\n\n#if NUM_DIR_LIGHTS > 0\n\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_DIR_LIGHTS; i ++ ) {\n\n\t\tgetDirectionalDirectLightIrradiance( directionalLights[ i ], geometry, directLight );\n\n\t\tdotNL = dot( geometry.normal, directLight.direction );\n\t\tdirectLightColor_Diffuse = PI * directLight.color;\n\n\t\tvLightFront += saturate( dotNL ) * directLightColor_Diffuse;\n\n\t\t#ifdef DOUBLE_SIDED\n\n\t\t\tvLightBack += saturate( -dotNL ) * directLightColor_Diffuse;\n\n\t\t#endif\n\n\t}\n\t#pragma unroll_loop_end\n\n#endif\n\n#if NUM_HEMI_LIGHTS > 0\n\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_HEMI_LIGHTS; i ++ ) {\n\n\t\tvIndirectFront += getHemisphereLightIrradiance( hemisphereLights[ i ], geometry );\n\n\t\t#ifdef DOUBLE_SIDED\n\n\t\t\tvIndirectBack += getHemisphereLightIrradiance( hemisphereLights[ i ], backGeometry );\n\n\t\t#endif\n\n\t}\n\t#pragma unroll_loop_end\n\n#endif\n",lights_pars_begin:"\nuniform bool receiveShadow;\nuniform vec3 ambientLightColor;\nuniform vec3 lightProbe[ 9 ];\n\n// get the irradiance (radiance convolved with cosine lobe) at the point 'normal' on the unit sphere\n// source: https://graphics.stanford.edu/papers/envmap/envmap.pdf\nvec3 shGetIrradianceAt( in vec3 normal, in vec3 shCoefficients[ 9 ] ) {\n\n\t// normal is assumed to have unit length\n\n\tfloat x = normal.x, y = normal.y, z = normal.z;\n\n\t// band 0\n\tvec3 result = shCoefficients[ 0 ] * 0.886227;\n\n\t// band 1\n\tresult += shCoefficients[ 1 ] * 2.0 * 0.511664 * y;\n\tresult += shCoefficients[ 2 ] * 2.0 * 0.511664 * z;\n\tresult += shCoefficients[ 3 ] * 2.0 * 0.511664 * x;\n\n\t// band 2\n\tresult += shCoefficients[ 4 ] * 2.0 * 0.429043 * x * y;\n\tresult += shCoefficients[ 5 ] * 2.0 * 0.429043 * y * z;\n\tresult += shCoefficients[ 6 ] * ( 0.743125 * z * z - 0.247708 );\n\tresult += shCoefficients[ 7 ] * 2.0 * 0.429043 * x * z;\n\tresult += shCoefficients[ 8 ] * 0.429043 * ( x * x - y * y );\n\n\treturn result;\n\n}\n\nvec3 getLightProbeIrradiance( const in vec3 lightProbe[ 9 ], const in GeometricContext geometry ) {\n\n\tvec3 worldNormal = inverseTransformDirection( geometry.normal, viewMatrix );\n\n\tvec3 irradiance = shGetIrradianceAt( worldNormal, lightProbe );\n\n\treturn irradiance;\n\n}\n\nvec3 getAmbientLightIrradiance( const in vec3 ambientLightColor ) {\n\n\tvec3 irradiance = ambientLightColor;\n\n\t#ifndef PHYSICALLY_CORRECT_LIGHTS\n\n\t\tirradiance *= PI;\n\n\t#endif\n\n\treturn irradiance;\n\n}\n\n#if NUM_DIR_LIGHTS > 0\n\n\tstruct DirectionalLight {\n\t\tvec3 direction;\n\t\tvec3 color;\n\t};\n\n\tuniform DirectionalLight directionalLights[ NUM_DIR_LIGHTS ];\n\n\tvoid getDirectionalDirectLightIrradiance( const in DirectionalLight directionalLight, const in GeometricContext geometry, out IncidentLight directLight ) {\n\n\t\tdirectLight.color = directionalLight.color;\n\t\tdirectLight.direction = directionalLight.direction;\n\t\tdirectLight.visible = true;\n\n\t}\n\n#endif\n\n\n#if NUM_POINT_LIGHTS > 0\n\n\tstruct PointLight {\n\t\tvec3 position;\n\t\tvec3 color;\n\t\tfloat distance;\n\t\tfloat decay;\n\t};\n\n\tuniform PointLight pointLights[ NUM_POINT_LIGHTS ];\n\n\t// directLight is an out parameter as having it as a return value caused compiler errors on some devices\n\tvoid getPointDirectLightIrradiance( const in PointLight pointLight, const in GeometricContext geometry, out IncidentLight directLight ) {\n\n\t\tvec3 lVector = pointLight.position - geometry.position;\n\t\tdirectLight.direction = normalize( lVector );\n\n\t\tfloat lightDistance = length( lVector );\n\n\t\tdirectLight.color = pointLight.color;\n\t\tdirectLight.color *= punctualLightIntensityToIrradianceFactor( lightDistance, pointLight.distance, pointLight.decay );\n\t\tdirectLight.visible = ( directLight.color != vec3( 0.0 ) );\n\n\t}\n\n#endif\n\n\n#if NUM_SPOT_LIGHTS > 0\n\n\tstruct SpotLight {\n\t\tvec3 position;\n\t\tvec3 direction;\n\t\tvec3 color;\n\t\tfloat distance;\n\t\tfloat decay;\n\t\tfloat coneCos;\n\t\tfloat penumbraCos;\n\t};\n\n\tuniform SpotLight spotLights[ NUM_SPOT_LIGHTS ];\n\n\t// directLight is an out parameter as having it as a return value caused compiler errors on some devices\n\tvoid getSpotDirectLightIrradiance( const in SpotLight spotLight, const in GeometricContext geometry, out IncidentLight directLight ) {\n\n\t\tvec3 lVector = spotLight.position - geometry.position;\n\t\tdirectLight.direction = normalize( lVector );\n\n\t\tfloat lightDistance = length( lVector );\n\t\tfloat angleCos = dot( directLight.direction, spotLight.direction );\n\n\t\tif ( angleCos > spotLight.coneCos ) {\n\n\t\t\tfloat spotEffect = smoothstep( spotLight.coneCos, spotLight.penumbraCos, angleCos );\n\n\t\t\tdirectLight.color = spotLight.color;\n\t\t\tdirectLight.color *= spotEffect * punctualLightIntensityToIrradianceFactor( lightDistance, spotLight.distance, spotLight.decay );\n\t\t\tdirectLight.visible = true;\n\n\t\t} else {\n\n\t\t\tdirectLight.color = vec3( 0.0 );\n\t\t\tdirectLight.visible = false;\n\n\t\t}\n\t}\n\n#endif\n\n\n#if NUM_RECT_AREA_LIGHTS > 0\n\n\tstruct RectAreaLight {\n\t\tvec3 color;\n\t\tvec3 position;\n\t\tvec3 halfWidth;\n\t\tvec3 halfHeight;\n\t};\n\n\t// Pre-computed values of LinearTransformedCosine approximation of BRDF\n\t// BRDF approximation Texture is 64x64\n\tuniform sampler2D ltc_1; // RGBA Float\n\tuniform sampler2D ltc_2; // RGBA Float\n\n\tuniform RectAreaLight rectAreaLights[ NUM_RECT_AREA_LIGHTS ];\n\n#endif\n\n\n#if NUM_HEMI_LIGHTS > 0\n\n\tstruct HemisphereLight {\n\t\tvec3 direction;\n\t\tvec3 skyColor;\n\t\tvec3 groundColor;\n\t};\n\n\tuniform HemisphereLight hemisphereLights[ NUM_HEMI_LIGHTS ];\n\n\tvec3 getHemisphereLightIrradiance( const in HemisphereLight hemiLight, const in GeometricContext geometry ) {\n\n\t\tfloat dotNL = dot( geometry.normal, hemiLight.direction );\n\t\tfloat hemiDiffuseWeight = 0.5 * dotNL + 0.5;\n\n\t\tvec3 irradiance = mix( hemiLight.groundColor, hemiLight.skyColor, hemiDiffuseWeight );\n\n\t\t#ifndef PHYSICALLY_CORRECT_LIGHTS\n\n\t\t\tirradiance *= PI;\n\n\t\t#endif\n\n\t\treturn irradiance;\n\n\t}\n\n#endif\n",lights_toon_fragment:"\nToonMaterial material;\nmaterial.diffuseColor = diffuseColor.rgb;\n",lights_toon_pars_fragment:"\nvarying vec3 vViewPosition;\n\n#ifndef FLAT_SHADED\n\n\tvarying vec3 vNormal;\n\n#endif\n\n\nstruct ToonMaterial {\n\n\tvec3 diffuseColor;\n\n};\n\nvoid RE_Direct_Toon( const in IncidentLight directLight, const in GeometricContext geometry, const in ToonMaterial material, inout ReflectedLight reflectedLight ) {\n\n\tvec3 irradiance = getGradientIrradiance( geometry.normal, directLight.direction ) * directLight.color;\n\n\t#ifndef PHYSICALLY_CORRECT_LIGHTS\n\n\t\tirradiance *= PI; // punctual light\n\n\t#endif\n\n\treflectedLight.directDiffuse += irradiance * BRDF_Diffuse_Lambert( material.diffuseColor );\n\n}\n\nvoid RE_IndirectDiffuse_Toon( const in vec3 irradiance, const in GeometricContext geometry, const in ToonMaterial material, inout ReflectedLight reflectedLight ) {\n\n\treflectedLight.indirectDiffuse += irradiance * BRDF_Diffuse_Lambert( material.diffuseColor );\n\n}\n\n#define RE_Direct\t\t\t\tRE_Direct_Toon\n#define RE_IndirectDiffuse\t\tRE_IndirectDiffuse_Toon\n\n#define Material_LightProbeLOD( material )\t(0)\n",lights_phong_fragment:"\nBlinnPhongMaterial material;\nmaterial.diffuseColor = diffuseColor.rgb;\nmaterial.specularColor = specular;\nmaterial.specularShininess = shininess;\nmaterial.specularStrength = specularStrength;\n",lights_phong_pars_fragment:"\nvarying vec3 vViewPosition;\n\n#ifndef FLAT_SHADED\n\n\tvarying vec3 vNormal;\n\n#endif\n\n\nstruct BlinnPhongMaterial {\n\n\tvec3 diffuseColor;\n\tvec3 specularColor;\n\tfloat specularShininess;\n\tfloat specularStrength;\n\n};\n\nvoid RE_Direct_BlinnPhong( const in IncidentLight directLight, const in GeometricContext geometry, const in BlinnPhongMaterial material, inout ReflectedLight reflectedLight ) {\n\n\tfloat dotNL = saturate( dot( geometry.normal, directLight.direction ) );\n\tvec3 irradiance = dotNL * directLight.color;\n\n\t#ifndef PHYSICALLY_CORRECT_LIGHTS\n\n\t\tirradiance *= PI; // punctual light\n\n\t#endif\n\n\treflectedLight.directDiffuse += irradiance * BRDF_Diffuse_Lambert( material.diffuseColor );\n\n\treflectedLight.directSpecular += irradiance * BRDF_Specular_BlinnPhong( directLight, geometry, material.specularColor, material.specularShininess ) * material.specularStrength;\n\n}\n\nvoid RE_IndirectDiffuse_BlinnPhong( const in vec3 irradiance, const in GeometricContext geometry, const in BlinnPhongMaterial material, inout ReflectedLight reflectedLight ) {\n\n\treflectedLight.indirectDiffuse += irradiance * BRDF_Diffuse_Lambert( material.diffuseColor );\n\n}\n\n#define RE_Direct\t\t\t\tRE_Direct_BlinnPhong\n#define RE_IndirectDiffuse\t\tRE_IndirectDiffuse_BlinnPhong\n\n#define Material_LightProbeLOD( material )\t(0)\n",lights_physical_fragment:"\nPhysicalMaterial material;\nmaterial.diffuseColor = diffuseColor.rgb * ( 1.0 - metalnessFactor );\n\nvec3 dxy = max( abs( dFdx( geometryNormal ) ), abs( dFdy( geometryNormal ) ) );\nfloat geometryRoughness = max( max( dxy.x, dxy.y ), dxy.z );\n\nmaterial.specularRoughness = max( roughnessFactor, 0.0525 );// 0.0525 corresponds to the base mip of a 256 cubemap.\nmaterial.specularRoughness += geometryRoughness;\nmaterial.specularRoughness = min( material.specularRoughness, 1.0 );\n\n#ifdef REFLECTIVITY\n\n\tmaterial.specularColor = mix( vec3( MAXIMUM_SPECULAR_COEFFICIENT * pow2( reflectivity ) ), diffuseColor.rgb, metalnessFactor );\n\n#else\n\n\tmaterial.specularColor = mix( vec3( DEFAULT_SPECULAR_COEFFICIENT ), diffuseColor.rgb, metalnessFactor );\n\n#endif\n\n#ifdef CLEARCOAT\n\n\tmaterial.clearcoat = clearcoat;\n\tmaterial.clearcoatRoughness = clearcoatRoughness;\n\n\t#ifdef USE_CLEARCOATMAP\n\n\t\tmaterial.clearcoat *= texture2D( clearcoatMap, vUv ).x;\n\n\t#endif\n\n\t#ifdef USE_CLEARCOAT_ROUGHNESSMAP\n\n\t\tmaterial.clearcoatRoughness *= texture2D( clearcoatRoughnessMap, vUv ).y;\n\n\t#endif\n\n\tmaterial.clearcoat = saturate( material.clearcoat ); // Burley clearcoat model\n\tmaterial.clearcoatRoughness = max( material.clearcoatRoughness, 0.0525 );\n\tmaterial.clearcoatRoughness += geometryRoughness;\n\tmaterial.clearcoatRoughness = min( material.clearcoatRoughness, 1.0 );\n\n#endif\n\n#ifdef USE_SHEEN\n\n\tmaterial.sheenColor = sheen;\n\n#endif\n", -lights_physical_pars_fragment:"\nstruct PhysicalMaterial {\n\n\tvec3 diffuseColor;\n\tfloat specularRoughness;\n\tvec3 specularColor;\n\n#ifdef CLEARCOAT\n\tfloat clearcoat;\n\tfloat clearcoatRoughness;\n#endif\n#ifdef USE_SHEEN\n\tvec3 sheenColor;\n#endif\n\n};\n\n#define MAXIMUM_SPECULAR_COEFFICIENT 0.16\n#define DEFAULT_SPECULAR_COEFFICIENT 0.04\n\n// Clear coat directional hemishperical reflectance (this approximation should be improved)\nfloat clearcoatDHRApprox( const in float roughness, const in float dotNL ) {\n\n\treturn DEFAULT_SPECULAR_COEFFICIENT + ( 1.0 - DEFAULT_SPECULAR_COEFFICIENT ) * ( pow( 1.0 - dotNL, 5.0 ) * pow( 1.0 - roughness, 2.0 ) );\n\n}\n\n#if NUM_RECT_AREA_LIGHTS > 0\n\n\tvoid RE_Direct_RectArea_Physical( const in RectAreaLight rectAreaLight, const in GeometricContext geometry, const in PhysicalMaterial material, inout ReflectedLight reflectedLight ) {\n\n\t\tvec3 normal = geometry.normal;\n\t\tvec3 viewDir = geometry.viewDir;\n\t\tvec3 position = geometry.position;\n\t\tvec3 lightPos = rectAreaLight.position;\n\t\tvec3 halfWidth = rectAreaLight.halfWidth;\n\t\tvec3 halfHeight = rectAreaLight.halfHeight;\n\t\tvec3 lightColor = rectAreaLight.color;\n\t\tfloat roughness = material.specularRoughness;\n\n\t\tvec3 rectCoords[ 4 ];\n\t\trectCoords[ 0 ] = lightPos + halfWidth - halfHeight; // counterclockwise; light shines in local neg z direction\n\t\trectCoords[ 1 ] = lightPos - halfWidth - halfHeight;\n\t\trectCoords[ 2 ] = lightPos - halfWidth + halfHeight;\n\t\trectCoords[ 3 ] = lightPos + halfWidth + halfHeight;\n\n\t\tvec2 uv = LTC_Uv( normal, viewDir, roughness );\n\n\t\tvec4 t1 = texture2D( ltc_1, uv );\n\t\tvec4 t2 = texture2D( ltc_2, uv );\n\n\t\tmat3 mInv = mat3(\n\t\t\tvec3( t1.x, 0, t1.y ),\n\t\t\tvec3(\t\t0, 1,\t\t0 ),\n\t\t\tvec3( t1.z, 0, t1.w )\n\t\t);\n\n\t\t// LTC Fresnel Approximation by Stephen Hill\n\t\t// http://blog.selfshadow.com/publications/s2016-advances/s2016_ltc_fresnel.pdf\n\t\tvec3 fresnel = ( material.specularColor * t2.x + ( vec3( 1.0 ) - material.specularColor ) * t2.y );\n\n\t\treflectedLight.directSpecular += lightColor * fresnel * LTC_Evaluate( normal, viewDir, position, mInv, rectCoords );\n\n\t\treflectedLight.directDiffuse += lightColor * material.diffuseColor * LTC_Evaluate( normal, viewDir, position, mat3( 1.0 ), rectCoords );\n\n\t}\n\n#endif\n\nvoid RE_Direct_Physical( const in IncidentLight directLight, const in GeometricContext geometry, const in PhysicalMaterial material, inout ReflectedLight reflectedLight ) {\n\n\tfloat dotNL = saturate( dot( geometry.normal, directLight.direction ) );\n\n\tvec3 irradiance = dotNL * directLight.color;\n\n\t#ifndef PHYSICALLY_CORRECT_LIGHTS\n\n\t\tirradiance *= PI; // punctual light\n\n\t#endif\n\n\t#ifdef CLEARCOAT\n\n\t\tfloat ccDotNL = saturate( dot( geometry.clearcoatNormal, directLight.direction ) );\n\n\t\tvec3 ccIrradiance = ccDotNL * directLight.color;\n\n\t\t#ifndef PHYSICALLY_CORRECT_LIGHTS\n\n\t\t\tccIrradiance *= PI; // punctual light\n\n\t\t#endif\n\n\t\tfloat clearcoatDHR = material.clearcoat * clearcoatDHRApprox( material.clearcoatRoughness, ccDotNL );\n\n\t\treflectedLight.directSpecular += ccIrradiance * material.clearcoat * BRDF_Specular_GGX( directLight, geometry.viewDir, geometry.clearcoatNormal, vec3( DEFAULT_SPECULAR_COEFFICIENT ), material.clearcoatRoughness );\n\n\t#else\n\n\t\tfloat clearcoatDHR = 0.0;\n\n\t#endif\n\n\t#ifdef USE_SHEEN\n\t\treflectedLight.directSpecular += ( 1.0 - clearcoatDHR ) * irradiance * BRDF_Specular_Sheen(\n\t\t\tmaterial.specularRoughness,\n\t\t\tdirectLight.direction,\n\t\t\tgeometry,\n\t\t\tmaterial.sheenColor\n\t\t);\n\t#else\n\t\treflectedLight.directSpecular += ( 1.0 - clearcoatDHR ) * irradiance * BRDF_Specular_GGX( directLight, geometry.viewDir, geometry.normal, material.specularColor, material.specularRoughness);\n\t#endif\n\n\treflectedLight.directDiffuse += ( 1.0 - clearcoatDHR ) * irradiance * BRDF_Diffuse_Lambert( material.diffuseColor );\n}\n\nvoid RE_IndirectDiffuse_Physical( const in vec3 irradiance, const in GeometricContext geometry, const in PhysicalMaterial material, inout ReflectedLight reflectedLight ) {\n\n\treflectedLight.indirectDiffuse += irradiance * BRDF_Diffuse_Lambert( material.diffuseColor );\n\n}\n\nvoid RE_IndirectSpecular_Physical( const in vec3 radiance, const in vec3 irradiance, const in vec3 clearcoatRadiance, const in GeometricContext geometry, const in PhysicalMaterial material, inout ReflectedLight reflectedLight) {\n\n\t#ifdef CLEARCOAT\n\n\t\tfloat ccDotNV = saturate( dot( geometry.clearcoatNormal, geometry.viewDir ) );\n\n\t\treflectedLight.indirectSpecular += clearcoatRadiance * material.clearcoat * BRDF_Specular_GGX_Environment( geometry.viewDir, geometry.clearcoatNormal, vec3( DEFAULT_SPECULAR_COEFFICIENT ), material.clearcoatRoughness );\n\n\t\tfloat ccDotNL = ccDotNV;\n\t\tfloat clearcoatDHR = material.clearcoat * clearcoatDHRApprox( material.clearcoatRoughness, ccDotNL );\n\n\t#else\n\n\t\tfloat clearcoatDHR = 0.0;\n\n\t#endif\n\n\tfloat clearcoatInv = 1.0 - clearcoatDHR;\n\n\t// Both indirect specular and indirect diffuse light accumulate here\n\n\tvec3 singleScattering = vec3( 0.0 );\n\tvec3 multiScattering = vec3( 0.0 );\n\tvec3 cosineWeightedIrradiance = irradiance * RECIPROCAL_PI;\n\n\tBRDF_Specular_Multiscattering_Environment( geometry, material.specularColor, material.specularRoughness, singleScattering, multiScattering );\n\n\tvec3 diffuse = material.diffuseColor * ( 1.0 - ( singleScattering + multiScattering ) );\n\n\treflectedLight.indirectSpecular += clearcoatInv * radiance * singleScattering;\n\treflectedLight.indirectSpecular += multiScattering * cosineWeightedIrradiance;\n\n\treflectedLight.indirectDiffuse += diffuse * cosineWeightedIrradiance;\n\n}\n\n#define RE_Direct\t\t\t\tRE_Direct_Physical\n#define RE_Direct_RectArea\t\tRE_Direct_RectArea_Physical\n#define RE_IndirectDiffuse\t\tRE_IndirectDiffuse_Physical\n#define RE_IndirectSpecular\t\tRE_IndirectSpecular_Physical\n\n// ref: https://seblagarde.files.wordpress.com/2015/07/course_notes_moving_frostbite_to_pbr_v32.pdf\nfloat computeSpecularOcclusion( const in float dotNV, const in float ambientOcclusion, const in float roughness ) {\n\n\treturn saturate( pow( dotNV + ambientOcclusion, exp2( - 16.0 * roughness - 1.0 ) ) - 1.0 + ambientOcclusion );\n\n}\n",lights_fragment_begin:"\n/**\n * This is a template that can be used to light a material, it uses pluggable\n * RenderEquations (RE)for specific lighting scenarios.\n *\n * Instructions for use:\n * - Ensure that both RE_Direct, RE_IndirectDiffuse and RE_IndirectSpecular are defined\n * - If you have defined an RE_IndirectSpecular, you need to also provide a Material_LightProbeLOD. <---- ???\n * - Create a material parameter that is to be passed as the third parameter to your lighting functions.\n *\n * TODO:\n * - Add area light support.\n * - Add sphere light support.\n * - Add diffuse light probe (irradiance cubemap) support.\n */\n\nGeometricContext geometry;\n\ngeometry.position = - vViewPosition;\ngeometry.normal = normal;\ngeometry.viewDir = ( isOrthographic ) ? vec3( 0, 0, 1 ) : normalize( vViewPosition );\n\n#ifdef CLEARCOAT\n\n\tgeometry.clearcoatNormal = clearcoatNormal;\n\n#endif\n\nIncidentLight directLight;\n\n#if ( NUM_POINT_LIGHTS > 0 ) && defined( RE_Direct )\n\n\tPointLight pointLight;\n\t#if defined( USE_SHADOWMAP ) && NUM_POINT_LIGHT_SHADOWS > 0\n\tPointLightShadow pointLightShadow;\n\t#endif\n\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_POINT_LIGHTS; i ++ ) {\n\n\t\tpointLight = pointLights[ i ];\n\n\t\tgetPointDirectLightIrradiance( pointLight, geometry, directLight );\n\n\t\t#if defined( USE_SHADOWMAP ) && ( UNROLLED_LOOP_INDEX < NUM_POINT_LIGHT_SHADOWS )\n\t\tpointLightShadow = pointLightShadows[ i ];\n\t\tdirectLight.color *= all( bvec2( directLight.visible, receiveShadow ) ) ? getPointShadow( pointShadowMap[ i ], pointLightShadow.shadowMapSize, pointLightShadow.shadowBias, pointLightShadow.shadowRadius, vPointShadowCoord[ i ], pointLightShadow.shadowCameraNear, pointLightShadow.shadowCameraFar ) : 1.0;\n\t\t#endif\n\n\t\tRE_Direct( directLight, geometry, material, reflectedLight );\n\n\t}\n\t#pragma unroll_loop_end\n\n#endif\n\n#if ( NUM_SPOT_LIGHTS > 0 ) && defined( RE_Direct )\n\n\tSpotLight spotLight;\n\t#if defined( USE_SHADOWMAP ) && NUM_SPOT_LIGHT_SHADOWS > 0\n\tSpotLightShadow spotLightShadow;\n\t#endif\n\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_SPOT_LIGHTS; i ++ ) {\n\n\t\tspotLight = spotLights[ i ];\n\n\t\tgetSpotDirectLightIrradiance( spotLight, geometry, directLight );\n\n\t\t#if defined( USE_SHADOWMAP ) && ( UNROLLED_LOOP_INDEX < NUM_SPOT_LIGHT_SHADOWS )\n\t\tspotLightShadow = spotLightShadows[ i ];\n\t\tdirectLight.color *= all( bvec2( directLight.visible, receiveShadow ) ) ? getShadow( spotShadowMap[ i ], spotLightShadow.shadowMapSize, spotLightShadow.shadowBias, spotLightShadow.shadowRadius, vSpotShadowCoord[ i ] ) : 1.0;\n\t\t#endif\n\n\t\tRE_Direct( directLight, geometry, material, reflectedLight );\n\n\t}\n\t#pragma unroll_loop_end\n\n#endif\n\n#if ( NUM_DIR_LIGHTS > 0 ) && defined( RE_Direct )\n\n\tDirectionalLight directionalLight;\n\t#if defined( USE_SHADOWMAP ) && NUM_DIR_LIGHT_SHADOWS > 0\n\tDirectionalLightShadow directionalLightShadow;\n\t#endif\n\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_DIR_LIGHTS; i ++ ) {\n\n\t\tdirectionalLight = directionalLights[ i ];\n\n\t\tgetDirectionalDirectLightIrradiance( directionalLight, geometry, directLight );\n\n\t\t#if defined( USE_SHADOWMAP ) && ( UNROLLED_LOOP_INDEX < NUM_DIR_LIGHT_SHADOWS )\n\t\tdirectionalLightShadow = directionalLightShadows[ i ];\n\t\tdirectLight.color *= all( bvec2( directLight.visible, receiveShadow ) ) ? getShadow( directionalShadowMap[ i ], directionalLightShadow.shadowMapSize, directionalLightShadow.shadowBias, directionalLightShadow.shadowRadius, vDirectionalShadowCoord[ i ] ) : 1.0;\n\t\t#endif\n\n\t\tRE_Direct( directLight, geometry, material, reflectedLight );\n\n\t}\n\t#pragma unroll_loop_end\n\n#endif\n\n#if ( NUM_RECT_AREA_LIGHTS > 0 ) && defined( RE_Direct_RectArea )\n\n\tRectAreaLight rectAreaLight;\n\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_RECT_AREA_LIGHTS; i ++ ) {\n\n\t\trectAreaLight = rectAreaLights[ i ];\n\t\tRE_Direct_RectArea( rectAreaLight, geometry, material, reflectedLight );\n\n\t}\n\t#pragma unroll_loop_end\n\n#endif\n\n#if defined( RE_IndirectDiffuse )\n\n\tvec3 iblIrradiance = vec3( 0.0 );\n\n\tvec3 irradiance = getAmbientLightIrradiance( ambientLightColor );\n\n\tirradiance += getLightProbeIrradiance( lightProbe, geometry );\n\n\t#if ( NUM_HEMI_LIGHTS > 0 )\n\n\t\t#pragma unroll_loop_start\n\t\tfor ( int i = 0; i < NUM_HEMI_LIGHTS; i ++ ) {\n\n\t\t\tirradiance += getHemisphereLightIrradiance( hemisphereLights[ i ], geometry );\n\n\t\t}\n\t\t#pragma unroll_loop_end\n\n\t#endif\n\n#endif\n\n#if defined( RE_IndirectSpecular )\n\n\tvec3 radiance = vec3( 0.0 );\n\tvec3 clearcoatRadiance = vec3( 0.0 );\n\n#endif\n",lights_fragment_maps:"\n#if defined( RE_IndirectDiffuse )\n\n\t#ifdef USE_LIGHTMAP\n\n\t\tvec4 lightMapTexel= texture2D( lightMap, vUv2 );\n\t\tvec3 lightMapIrradiance = lightMapTexelToLinear( lightMapTexel ).rgb * lightMapIntensity;\n\n\t\t#ifndef PHYSICALLY_CORRECT_LIGHTS\n\n\t\t\tlightMapIrradiance *= PI; // factor of PI should not be present; included here to prevent breakage\n\n\t\t#endif\n\n\t\tirradiance += lightMapIrradiance;\n\n\t#endif\n\n\t#if defined( USE_ENVMAP ) && defined( STANDARD ) && defined( ENVMAP_TYPE_CUBE_UV )\n\n\t\tiblIrradiance += getLightProbeIndirectIrradiance( /*lightProbe,*/ geometry, maxMipLevel );\n\n\t#endif\n\n#endif\n\n#if defined( USE_ENVMAP ) && defined( RE_IndirectSpecular )\n\n\tradiance += getLightProbeIndirectRadiance( /*specularLightProbe,*/ geometry.viewDir, geometry.normal, material.specularRoughness, maxMipLevel );\n\n\t#ifdef CLEARCOAT\n\n\t\tclearcoatRadiance += getLightProbeIndirectRadiance( /*specularLightProbe,*/ geometry.viewDir, geometry.clearcoatNormal, material.clearcoatRoughness, maxMipLevel );\n\n\t#endif\n\n#endif\n",lights_fragment_end:"\n#if defined( RE_IndirectDiffuse )\n\n\tRE_IndirectDiffuse( irradiance, geometry, material, reflectedLight );\n\n#endif\n\n#if defined( RE_IndirectSpecular )\n\n\tRE_IndirectSpecular( radiance, iblIrradiance, clearcoatRadiance, geometry, material, reflectedLight );\n\n#endif\n",logdepthbuf_fragment:"\n#if defined( USE_LOGDEPTHBUF ) && defined( USE_LOGDEPTHBUF_EXT )\n\n\t// Doing a strict comparison with == 1.0 can cause noise artifacts\n\t// on some platforms. See issue #17623.\n\tgl_FragDepthEXT = vIsPerspective == 0.0 ? gl_FragCoord.z : log2( vFragDepth ) * logDepthBufFC * 0.5;\n\n#endif\n",logdepthbuf_pars_fragment:"\n#if defined( USE_LOGDEPTHBUF ) && defined( USE_LOGDEPTHBUF_EXT )\n\n\tuniform float logDepthBufFC;\n\tvarying float vFragDepth;\n\tvarying float vIsPerspective;\n\n#endif\n",logdepthbuf_pars_vertex:"\n#ifdef USE_LOGDEPTHBUF\n\n\t#ifdef USE_LOGDEPTHBUF_EXT\n\n\t\tvarying float vFragDepth;\n\t\tvarying float vIsPerspective;\n\n\t#else\n\n\t\tuniform float logDepthBufFC;\n\n\t#endif\n\n#endif\n",logdepthbuf_vertex:"\n#ifdef USE_LOGDEPTHBUF\n\n\t#ifdef USE_LOGDEPTHBUF_EXT\n\n\t\tvFragDepth = 1.0 + gl_Position.w;\n\t\tvIsPerspective = float( isPerspectiveMatrix( projectionMatrix ) );\n\n\t#else\n\n\t\tif ( isPerspectiveMatrix( projectionMatrix ) ) {\n\n\t\t\tgl_Position.z = log2( max( EPSILON, gl_Position.w + 1.0 ) ) * logDepthBufFC - 1.0;\n\n\t\t\tgl_Position.z *= gl_Position.w;\n\n\t\t}\n\n\t#endif\n\n#endif\n",map_fragment:"\n#ifdef USE_MAP\n\n\tvec4 texelColor = texture2D( map, vUv );\n\n\ttexelColor = mapTexelToLinear( texelColor );\n\tdiffuseColor *= texelColor;\n\n#endif\n",map_pars_fragment:"\n#ifdef USE_MAP\n\n\tuniform sampler2D map;\n\n#endif\n",map_particle_fragment:"\n#if defined( USE_MAP ) || defined( USE_ALPHAMAP )\n\n\tvec2 uv = ( uvTransform * vec3( gl_PointCoord.x, 1.0 - gl_PointCoord.y, 1 ) ).xy;\n\n#endif\n\n#ifdef USE_MAP\n\n\tvec4 mapTexel = texture2D( map, uv );\n\tdiffuseColor *= mapTexelToLinear( mapTexel );\n\n#endif\n\n#ifdef USE_ALPHAMAP\n\n\tdiffuseColor.a *= texture2D( alphaMap, uv ).g;\n\n#endif\n",map_particle_pars_fragment:"\n#if defined( USE_MAP ) || defined( USE_ALPHAMAP )\n\n\tuniform mat3 uvTransform;\n\n#endif\n\n#ifdef USE_MAP\n\n\tuniform sampler2D map;\n\n#endif\n\n#ifdef USE_ALPHAMAP\n\n\tuniform sampler2D alphaMap;\n\n#endif\n",metalnessmap_fragment:"\nfloat metalnessFactor = metalness;\n\n#ifdef USE_METALNESSMAP\n\n\tvec4 texelMetalness = texture2D( metalnessMap, vUv );\n\n\t// reads channel B, compatible with a combined OcclusionRoughnessMetallic (RGB) texture\n\tmetalnessFactor *= texelMetalness.b;\n\n#endif\n",metalnessmap_pars_fragment:"\n#ifdef USE_METALNESSMAP\n\n\tuniform sampler2D metalnessMap;\n\n#endif\n",morphnormal_vertex:"\n#ifdef USE_MORPHNORMALS\n\n\t// morphTargetBaseInfluence is set based on BufferGeometry.morphTargetsRelative value:\n\t// When morphTargetsRelative is false, this is set to 1 - sum(influences); this results in normal = sum((target - base) * influence)\n\t// When morphTargetsRelative is true, this is set to 1; as a result, all morph targets are simply added to the base after weighting\n\tobjectNormal *= morphTargetBaseInfluence;\n\tobjectNormal += morphNormal0 * morphTargetInfluences[ 0 ];\n\tobjectNormal += morphNormal1 * morphTargetInfluences[ 1 ];\n\tobjectNormal += morphNormal2 * morphTargetInfluences[ 2 ];\n\tobjectNormal += morphNormal3 * morphTargetInfluences[ 3 ];\n\n#endif\n",morphtarget_pars_vertex:"\n#ifdef USE_MORPHTARGETS\n\n\tuniform float morphTargetBaseInfluence;\n\n\t#ifndef USE_MORPHNORMALS\n\n\t\tuniform float morphTargetInfluences[ 8 ];\n\n\t#else\n\n\t\tuniform float morphTargetInfluences[ 4 ];\n\n\t#endif\n\n#endif\n",morphtarget_vertex:"\n#ifdef USE_MORPHTARGETS\n\n\t// morphTargetBaseInfluence is set based on BufferGeometry.morphTargetsRelative value:\n\t// When morphTargetsRelative is false, this is set to 1 - sum(influences); this results in position = sum((target - base) * influence)\n\t// When morphTargetsRelative is true, this is set to 1; as a result, all morph targets are simply added to the base after weighting\n\ttransformed *= morphTargetBaseInfluence;\n\ttransformed += morphTarget0 * morphTargetInfluences[ 0 ];\n\ttransformed += morphTarget1 * morphTargetInfluences[ 1 ];\n\ttransformed += morphTarget2 * morphTargetInfluences[ 2 ];\n\ttransformed += morphTarget3 * morphTargetInfluences[ 3 ];\n\n\t#ifndef USE_MORPHNORMALS\n\n\t\ttransformed += morphTarget4 * morphTargetInfluences[ 4 ];\n\t\ttransformed += morphTarget5 * morphTargetInfluences[ 5 ];\n\t\ttransformed += morphTarget6 * morphTargetInfluences[ 6 ];\n\t\ttransformed += morphTarget7 * morphTargetInfluences[ 7 ];\n\n\t#endif\n\n#endif\n",normal_fragment_begin:"\n#ifdef FLAT_SHADED\n\n\t// Workaround for Adreno/Nexus5 not able able to do dFdx( vViewPosition ) ...\n\n\tvec3 fdx = vec3( dFdx( vViewPosition.x ), dFdx( vViewPosition.y ), dFdx( vViewPosition.z ) );\n\tvec3 fdy = vec3( dFdy( vViewPosition.x ), dFdy( vViewPosition.y ), dFdy( vViewPosition.z ) );\n\tvec3 normal = normalize( cross( fdx, fdy ) );\n\n#else\n\n\tvec3 normal = normalize( vNormal );\n\n\t#ifdef DOUBLE_SIDED\n\n\t\tnormal = normal * ( float( gl_FrontFacing ) * 2.0 - 1.0 );\n\n\t#endif\n\n\t#ifdef USE_TANGENT\n\n\t\tvec3 tangent = normalize( vTangent );\n\t\tvec3 bitangent = normalize( vBitangent );\n\n\t\t#ifdef DOUBLE_SIDED\n\n\t\t\ttangent = tangent * ( float( gl_FrontFacing ) * 2.0 - 1.0 );\n\t\t\tbitangent = bitangent * ( float( gl_FrontFacing ) * 2.0 - 1.0 );\n\n\t\t#endif\n\n\t\t#if defined( TANGENTSPACE_NORMALMAP ) || defined( USE_CLEARCOAT_NORMALMAP )\n\n\t\t\tmat3 vTBN = mat3( tangent, bitangent, normal );\n\n\t\t#endif\n\n\t#endif\n\n#endif\n\n// non perturbed normal for clearcoat among others\n\nvec3 geometryNormal = normal;\n\n",normal_fragment_maps:"\n\n#ifdef OBJECTSPACE_NORMALMAP\n\n\tnormal = texture2D( normalMap, vUv ).xyz * 2.0 - 1.0; // overrides both flatShading and attribute normals\n\n\t#ifdef FLIP_SIDED\n\n\t\tnormal = - normal;\n\n\t#endif\n\n\t#ifdef DOUBLE_SIDED\n\n\t\tnormal = normal * ( float( gl_FrontFacing ) * 2.0 - 1.0 );\n\n\t#endif\n\n\tnormal = normalize( normalMatrix * normal );\n\n#elif defined( TANGENTSPACE_NORMALMAP )\n\n\tvec3 mapN = texture2D( normalMap, vUv ).xyz * 2.0 - 1.0;\n\tmapN.xy *= normalScale;\n\n\t#ifdef USE_TANGENT\n\n\t\tnormal = normalize( vTBN * mapN );\n\n\t#else\n\n\t\tnormal = perturbNormal2Arb( -vViewPosition, normal, mapN );\n\n\t#endif\n\n#elif defined( USE_BUMPMAP )\n\n\tnormal = perturbNormalArb( -vViewPosition, normal, dHdxy_fwd() );\n\n#endif\n",normalmap_pars_fragment:"\n#ifdef USE_NORMALMAP\n\n\tuniform sampler2D normalMap;\n\tuniform vec2 normalScale;\n\n#endif\n\n#ifdef OBJECTSPACE_NORMALMAP\n\n\tuniform mat3 normalMatrix;\n\n#endif\n\n#if ! defined ( USE_TANGENT ) && ( defined ( TANGENTSPACE_NORMALMAP ) || defined ( USE_CLEARCOAT_NORMALMAP ) )\n\n\t// Per-Pixel Tangent Space Normal Mapping\n\t// http://hacksoflife.blogspot.ch/2009/11/per-pixel-tangent-space-normal-mapping.html\n\n\tvec3 perturbNormal2Arb( vec3 eye_pos, vec3 surf_norm, vec3 mapN ) {\n\n\t\t// Workaround for Adreno 3XX dFd*( vec3 ) bug. See #9988\n\n\t\tvec3 q0 = vec3( dFdx( eye_pos.x ), dFdx( eye_pos.y ), dFdx( eye_pos.z ) );\n\t\tvec3 q1 = vec3( dFdy( eye_pos.x ), dFdy( eye_pos.y ), dFdy( eye_pos.z ) );\n\t\tvec2 st0 = dFdx( vUv.st );\n\t\tvec2 st1 = dFdy( vUv.st );\n\n\t\tfloat scale = sign( st1.t * st0.s - st0.t * st1.s ); // we do not care about the magnitude\n\n\t\tvec3 S = normalize( ( q0 * st1.t - q1 * st0.t ) * scale );\n\t\tvec3 T = normalize( ( - q0 * st1.s + q1 * st0.s ) * scale );\n\t\tvec3 N = normalize( surf_norm );\n\n\t\tmat3 tsn = mat3( S, T, N );\n\n\t\tmapN.xy *= ( float( gl_FrontFacing ) * 2.0 - 1.0 );\n\n\t\treturn normalize( tsn * mapN );\n\n\t}\n\n#endif\n",clearcoat_normal_fragment_begin:"\n#ifdef CLEARCOAT\n\n\tvec3 clearcoatNormal = geometryNormal;\n\n#endif\n",clearcoat_normal_fragment_maps:"\n#ifdef USE_CLEARCOAT_NORMALMAP\n\n\tvec3 clearcoatMapN = texture2D( clearcoatNormalMap, vUv ).xyz * 2.0 - 1.0;\n\tclearcoatMapN.xy *= clearcoatNormalScale;\n\n\t#ifdef USE_TANGENT\n\n\t\tclearcoatNormal = normalize( vTBN * clearcoatMapN );\n\n\t#else\n\n\t\tclearcoatNormal = perturbNormal2Arb( - vViewPosition, clearcoatNormal, clearcoatMapN );\n\n\t#endif\n\n#endif\n",clearcoat_pars_fragment:"\n\n#ifdef USE_CLEARCOATMAP\n\n\tuniform sampler2D clearcoatMap;\n\n#endif\n\n#ifdef USE_CLEARCOAT_ROUGHNESSMAP\n\n\tuniform sampler2D clearcoatRoughnessMap;\n\n#endif\n\n#ifdef USE_CLEARCOAT_NORMALMAP\n\n\tuniform sampler2D clearcoatNormalMap;\n\tuniform vec2 clearcoatNormalScale;\n\n#endif\n",packing:"\nvec3 packNormalToRGB( const in vec3 normal ) {\n\treturn normalize( normal ) * 0.5 + 0.5;\n}\n\nvec3 unpackRGBToNormal( const in vec3 rgb ) {\n\treturn 2.0 * rgb.xyz - 1.0;\n}\n\nconst float PackUpscale = 256. / 255.; // fraction -> 0..1 (including 1)\nconst float UnpackDownscale = 255. / 256.; // 0..1 -> fraction (excluding 1)\n\nconst vec3 PackFactors = vec3( 256. * 256. * 256., 256. * 256., 256. );\nconst vec4 UnpackFactors = UnpackDownscale / vec4( PackFactors, 1. );\n\nconst float ShiftRight8 = 1. / 256.;\n\nvec4 packDepthToRGBA( const in float v ) {\n\tvec4 r = vec4( fract( v * PackFactors ), v );\n\tr.yzw -= r.xyz * ShiftRight8; // tidy overflow\n\treturn r * PackUpscale;\n}\n\nfloat unpackRGBAToDepth( const in vec4 v ) {\n\treturn dot( v, UnpackFactors );\n}\n\nvec4 pack2HalfToRGBA( vec2 v ) {\n\tvec4 r = vec4( v.x, fract( v.x * 255.0 ), v.y, fract( v.y * 255.0 ));\n\treturn vec4( r.x - r.y / 255.0, r.y, r.z - r.w / 255.0, r.w);\n}\nvec2 unpackRGBATo2Half( vec4 v ) {\n\treturn vec2( v.x + ( v.y / 255.0 ), v.z + ( v.w / 255.0 ) );\n}\n\n// NOTE: viewZ/eyeZ is < 0 when in front of the camera per OpenGL conventions\n\nfloat viewZToOrthographicDepth( const in float viewZ, const in float near, const in float far ) {\n\treturn ( viewZ + near ) / ( near - far );\n}\nfloat orthographicDepthToViewZ( const in float linearClipZ, const in float near, const in float far ) {\n\treturn linearClipZ * ( near - far ) - near;\n}\n\nfloat viewZToPerspectiveDepth( const in float viewZ, const in float near, const in float far ) {\n\treturn (( near + viewZ ) * far ) / (( far - near ) * viewZ );\n}\nfloat perspectiveDepthToViewZ( const in float invClipZ, const in float near, const in float far ) {\n\treturn ( near * far ) / ( ( far - near ) * invClipZ - far );\n}\n",premultiplied_alpha_fragment:"\n#ifdef PREMULTIPLIED_ALPHA\n\n\t// Get get normal blending with premultipled, use with CustomBlending, OneFactor, OneMinusSrcAlphaFactor, AddEquation.\n\tgl_FragColor.rgb *= gl_FragColor.a;\n\n#endif\n",project_vertex:"\nvec4 mvPosition = vec4( transformed, 1.0 );\n\n#ifdef USE_INSTANCING\n\n\tmvPosition = instanceMatrix * mvPosition;\n\n#endif\n\nmvPosition = modelViewMatrix * mvPosition;\n\ngl_Position = projectionMatrix * mvPosition;\n",dithering_fragment:"\n#ifdef DITHERING\n\n\tgl_FragColor.rgb = dithering( gl_FragColor.rgb );\n\n#endif\n",dithering_pars_fragment:"\n#ifdef DITHERING\n\n\t// based on https://www.shadertoy.com/view/MslGR8\n\tvec3 dithering( vec3 color ) {\n\t\t//Calculate grid position\n\t\tfloat grid_position = rand( gl_FragCoord.xy );\n\n\t\t//Shift the individual colors differently, thus making it even harder to see the dithering pattern\n\t\tvec3 dither_shift_RGB = vec3( 0.25 / 255.0, -0.25 / 255.0, 0.25 / 255.0 );\n\n\t\t//modify shift acording to grid position.\n\t\tdither_shift_RGB = mix( 2.0 * dither_shift_RGB, -2.0 * dither_shift_RGB, grid_position );\n\n\t\t//shift the color by dither_shift\n\t\treturn color + dither_shift_RGB;\n\t}\n\n#endif\n",roughnessmap_fragment:"\nfloat roughnessFactor = roughness;\n\n#ifdef USE_ROUGHNESSMAP\n\n\tvec4 texelRoughness = texture2D( roughnessMap, vUv );\n\n\t// reads channel G, compatible with a combined OcclusionRoughnessMetallic (RGB) texture\n\troughnessFactor *= texelRoughness.g;\n\n#endif\n",roughnessmap_pars_fragment:"\n#ifdef USE_ROUGHNESSMAP\n\n\tuniform sampler2D roughnessMap;\n\n#endif\n", -shadowmap_pars_fragment:"\n#ifdef USE_SHADOWMAP\n\n\t#if NUM_DIR_LIGHT_SHADOWS > 0\n\n\t\tuniform sampler2D directionalShadowMap[ NUM_DIR_LIGHT_SHADOWS ];\n\t\tvarying vec4 vDirectionalShadowCoord[ NUM_DIR_LIGHT_SHADOWS ];\n\n\t\tstruct DirectionalLightShadow {\n\t\t\tfloat shadowBias;\n\t\t\tfloat shadowNormalBias;\n\t\t\tfloat shadowRadius;\n\t\t\tvec2 shadowMapSize;\n\t\t};\n\n\t\tuniform DirectionalLightShadow directionalLightShadows[ NUM_DIR_LIGHT_SHADOWS ];\n\n\t#endif\n\n\t#if NUM_SPOT_LIGHT_SHADOWS > 0\n\n\t\tuniform sampler2D spotShadowMap[ NUM_SPOT_LIGHT_SHADOWS ];\n\t\tvarying vec4 vSpotShadowCoord[ NUM_SPOT_LIGHT_SHADOWS ];\n\n\t\tstruct SpotLightShadow {\n\t\t\tfloat shadowBias;\n\t\t\tfloat shadowNormalBias;\n\t\t\tfloat shadowRadius;\n\t\t\tvec2 shadowMapSize;\n\t\t};\n\n\t\tuniform SpotLightShadow spotLightShadows[ NUM_SPOT_LIGHT_SHADOWS ];\n\n\t#endif\n\n\t#if NUM_POINT_LIGHT_SHADOWS > 0\n\n\t\tuniform sampler2D pointShadowMap[ NUM_POINT_LIGHT_SHADOWS ];\n\t\tvarying vec4 vPointShadowCoord[ NUM_POINT_LIGHT_SHADOWS ];\n\n\t\tstruct PointLightShadow {\n\t\t\tfloat shadowBias;\n\t\t\tfloat shadowNormalBias;\n\t\t\tfloat shadowRadius;\n\t\t\tvec2 shadowMapSize;\n\t\t\tfloat shadowCameraNear;\n\t\t\tfloat shadowCameraFar;\n\t\t};\n\n\t\tuniform PointLightShadow pointLightShadows[ NUM_POINT_LIGHT_SHADOWS ];\n\n\t#endif\n\n\t/*\n\t#if NUM_RECT_AREA_LIGHTS > 0\n\n\t\t// TODO (abelnation): create uniforms for area light shadows\n\n\t#endif\n\t*/\n\n\tfloat texture2DCompare( sampler2D depths, vec2 uv, float compare ) {\n\n\t\treturn step( compare, unpackRGBAToDepth( texture2D( depths, uv ) ) );\n\n\t}\n\n\tvec2 texture2DDistribution( sampler2D shadow, vec2 uv ) {\n\n\t\treturn unpackRGBATo2Half( texture2D( shadow, uv ) );\n\n\t}\n\n\tfloat VSMShadow (sampler2D shadow, vec2 uv, float compare ){\n\n\t\tfloat occlusion = 1.0;\n\n\t\tvec2 distribution = texture2DDistribution( shadow, uv );\n\n\t\tfloat hard_shadow = step( compare , distribution.x ); // Hard Shadow\n\n\t\tif (hard_shadow != 1.0 ) {\n\n\t\t\tfloat distance = compare - distribution.x ;\n\t\t\tfloat variance = max( 0.00000, distribution.y * distribution.y );\n\t\t\tfloat softness_probability = variance / (variance + distance * distance ); // Chebeyshevs inequality\n\t\t\tsoftness_probability = clamp( ( softness_probability - 0.3 ) / ( 0.95 - 0.3 ), 0.0, 1.0 ); // 0.3 reduces light bleed\n\t\t\tocclusion = clamp( max( hard_shadow, softness_probability ), 0.0, 1.0 );\n\n\t\t}\n\t\treturn occlusion;\n\n\t}\n\n\tfloat getShadow( sampler2D shadowMap, vec2 shadowMapSize, float shadowBias, float shadowRadius, vec4 shadowCoord ) {\n\n\t\tfloat shadow = 1.0;\n\n\t\tshadowCoord.xyz /= shadowCoord.w;\n\t\tshadowCoord.z += shadowBias;\n\n\t\t// if ( something && something ) breaks ATI OpenGL shader compiler\n\t\t// if ( all( something, something ) ) using this instead\n\n\t\tbvec4 inFrustumVec = bvec4 ( shadowCoord.x >= 0.0, shadowCoord.x <= 1.0, shadowCoord.y >= 0.0, shadowCoord.y <= 1.0 );\n\t\tbool inFrustum = all( inFrustumVec );\n\n\t\tbvec2 frustumTestVec = bvec2( inFrustum, shadowCoord.z <= 1.0 );\n\n\t\tbool frustumTest = all( frustumTestVec );\n\n\t\tif ( frustumTest ) {\n\n\t\t#if defined( SHADOWMAP_TYPE_PCF )\n\n\t\t\tvec2 texelSize = vec2( 1.0 ) / shadowMapSize;\n\n\t\t\tfloat dx0 = - texelSize.x * shadowRadius;\n\t\t\tfloat dy0 = - texelSize.y * shadowRadius;\n\t\t\tfloat dx1 = + texelSize.x * shadowRadius;\n\t\t\tfloat dy1 = + texelSize.y * shadowRadius;\n\t\t\tfloat dx2 = dx0 / 2.0;\n\t\t\tfloat dy2 = dy0 / 2.0;\n\t\t\tfloat dx3 = dx1 / 2.0;\n\t\t\tfloat dy3 = dy1 / 2.0;\n\n\t\t\tshadow = (\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx0, dy0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( 0.0, dy0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx1, dy0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx2, dy2 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( 0.0, dy2 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx3, dy2 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx0, 0.0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx2, 0.0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy, shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx3, 0.0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx1, 0.0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx2, dy3 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( 0.0, dy3 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx3, dy3 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx0, dy1 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( 0.0, dy1 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx1, dy1 ), shadowCoord.z )\n\t\t\t) * ( 1.0 / 17.0 );\n\n\t\t#elif defined( SHADOWMAP_TYPE_PCF_SOFT )\n\n\t\t\tvec2 texelSize = vec2( 1.0 ) / shadowMapSize;\n\t\t\tfloat dx = texelSize.x;\n\t\t\tfloat dy = texelSize.y;\n\n\t\t\tvec2 uv = shadowCoord.xy;\n\t\t\tvec2 f = fract( uv * shadowMapSize + 0.5 );\n\t\t\tuv -= f * texelSize;\n\n\t\t\tshadow = (\n\t\t\t\ttexture2DCompare( shadowMap, uv, shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, uv + vec2( dx, 0.0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, uv + vec2( 0.0, dy ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, uv + texelSize, shadowCoord.z ) +\n\t\t\t\tmix( texture2DCompare( shadowMap, uv + vec2( -dx, 0.0 ), shadowCoord.z ), \n\t\t\t\t\t texture2DCompare( shadowMap, uv + vec2( 2.0 * dx, 0.0 ), shadowCoord.z ),\n\t\t\t\t\t f.x ) +\n\t\t\t\tmix( texture2DCompare( shadowMap, uv + vec2( -dx, dy ), shadowCoord.z ), \n\t\t\t\t\t texture2DCompare( shadowMap, uv + vec2( 2.0 * dx, dy ), shadowCoord.z ),\n\t\t\t\t\t f.x ) +\n\t\t\t\tmix( texture2DCompare( shadowMap, uv + vec2( 0.0, -dy ), shadowCoord.z ), \n\t\t\t\t\t texture2DCompare( shadowMap, uv + vec2( 0.0, 2.0 * dy ), shadowCoord.z ),\n\t\t\t\t\t f.y ) +\n\t\t\t\tmix( texture2DCompare( shadowMap, uv + vec2( dx, -dy ), shadowCoord.z ), \n\t\t\t\t\t texture2DCompare( shadowMap, uv + vec2( dx, 2.0 * dy ), shadowCoord.z ),\n\t\t\t\t\t f.y ) +\n\t\t\t\tmix( mix( texture2DCompare( shadowMap, uv + vec2( -dx, -dy ), shadowCoord.z ), \n\t\t\t\t\t\t\ttexture2DCompare( shadowMap, uv + vec2( 2.0 * dx, -dy ), shadowCoord.z ),\n\t\t\t\t\t\t\tf.x ),\n\t\t\t\t\t mix( texture2DCompare( shadowMap, uv + vec2( -dx, 2.0 * dy ), shadowCoord.z ), \n\t\t\t\t\t\t\ttexture2DCompare( shadowMap, uv + vec2( 2.0 * dx, 2.0 * dy ), shadowCoord.z ),\n\t\t\t\t\t\t\tf.x ),\n\t\t\t\t\t f.y )\n\t\t\t) * ( 1.0 / 9.0 );\n\n\t\t#elif defined( SHADOWMAP_TYPE_VSM )\n\n\t\t\tshadow = VSMShadow( shadowMap, shadowCoord.xy, shadowCoord.z );\n\n\t\t#else // no percentage-closer filtering:\n\n\t\t\tshadow = texture2DCompare( shadowMap, shadowCoord.xy, shadowCoord.z );\n\n\t\t#endif\n\n\t\t}\n\n\t\treturn shadow;\n\n\t}\n\n\t// cubeToUV() maps a 3D direction vector suitable for cube texture mapping to a 2D\n\t// vector suitable for 2D texture mapping. This code uses the following layout for the\n\t// 2D texture:\n\t//\n\t// xzXZ\n\t//\ty Y\n\t//\n\t// Y - Positive y direction\n\t// y - Negative y direction\n\t// X - Positive x direction\n\t// x - Negative x direction\n\t// Z - Positive z direction\n\t// z - Negative z direction\n\t//\n\t// Source and test bed:\n\t// https://gist.github.com/tschw/da10c43c467ce8afd0c4\n\n\tvec2 cubeToUV( vec3 v, float texelSizeY ) {\n\n\t\t// Number of texels to avoid at the edge of each square\n\n\t\tvec3 absV = abs( v );\n\n\t\t// Intersect unit cube\n\n\t\tfloat scaleToCube = 1.0 / max( absV.x, max( absV.y, absV.z ) );\n\t\tabsV *= scaleToCube;\n\n\t\t// Apply scale to avoid seams\n\n\t\t// two texels less per square (one texel will do for NEAREST)\n\t\tv *= scaleToCube * ( 1.0 - 2.0 * texelSizeY );\n\n\t\t// Unwrap\n\n\t\t// space: -1 ... 1 range for each square\n\t\t//\n\t\t// #X##\t\tdim\t\t:= ( 4 , 2 )\n\t\t//\t# #\t\tcenter := ( 1 , 1 )\n\n\t\tvec2 planar = v.xy;\n\n\t\tfloat almostATexel = 1.5 * texelSizeY;\n\t\tfloat almostOne = 1.0 - almostATexel;\n\n\t\tif ( absV.z >= almostOne ) {\n\n\t\t\tif ( v.z > 0.0 )\n\t\t\t\tplanar.x = 4.0 - v.x;\n\n\t\t} else if ( absV.x >= almostOne ) {\n\n\t\t\tfloat signX = sign( v.x );\n\t\t\tplanar.x = v.z * signX + 2.0 * signX;\n\n\t\t} else if ( absV.y >= almostOne ) {\n\n\t\t\tfloat signY = sign( v.y );\n\t\t\tplanar.x = v.x + 2.0 * signY + 2.0;\n\t\t\tplanar.y = v.z * signY - 2.0;\n\n\t\t}\n\n\t\t// Transform to UV space\n\n\t\t// scale := 0.5 / dim\n\t\t// translate := ( center + 0.5 ) / dim\n\t\treturn vec2( 0.125, 0.25 ) * planar + vec2( 0.375, 0.75 );\n\n\t}\n\n\tfloat getPointShadow( sampler2D shadowMap, vec2 shadowMapSize, float shadowBias, float shadowRadius, vec4 shadowCoord, float shadowCameraNear, float shadowCameraFar ) {\n\n\t\tvec2 texelSize = vec2( 1.0 ) / ( shadowMapSize * vec2( 4.0, 2.0 ) );\n\n\t\t// for point lights, the uniform @vShadowCoord is re-purposed to hold\n\t\t// the vector from the light to the world-space position of the fragment.\n\t\tvec3 lightToPosition = shadowCoord.xyz;\n\n\t\t// dp = normalized distance from light to fragment position\n\t\tfloat dp = ( length( lightToPosition ) - shadowCameraNear ) / ( shadowCameraFar - shadowCameraNear ); // need to clamp?\n\t\tdp += shadowBias;\n\n\t\t// bd3D = base direction 3D\n\t\tvec3 bd3D = normalize( lightToPosition );\n\n\t\t#if defined( SHADOWMAP_TYPE_PCF ) || defined( SHADOWMAP_TYPE_PCF_SOFT ) || defined( SHADOWMAP_TYPE_VSM )\n\n\t\t\tvec2 offset = vec2( - 1, 1 ) * shadowRadius * texelSize.y;\n\n\t\t\treturn (\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.xyy, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.yyy, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.xyx, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.yyx, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.xxy, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.yxy, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.xxx, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.yxx, texelSize.y ), dp )\n\t\t\t) * ( 1.0 / 9.0 );\n\n\t\t#else // no percentage-closer filtering\n\n\t\t\treturn texture2DCompare( shadowMap, cubeToUV( bd3D, texelSize.y ), dp );\n\n\t\t#endif\n\n\t}\n\n#endif\n",shadowmap_pars_vertex:"\n#ifdef USE_SHADOWMAP\n\n\t#if NUM_DIR_LIGHT_SHADOWS > 0\n\n\t\tuniform mat4 directionalShadowMatrix[ NUM_DIR_LIGHT_SHADOWS ];\n\t\tvarying vec4 vDirectionalShadowCoord[ NUM_DIR_LIGHT_SHADOWS ];\n\n\t\tstruct DirectionalLightShadow {\n\t\t\tfloat shadowBias;\n\t\t\tfloat shadowNormalBias;\n\t\t\tfloat shadowRadius;\n\t\t\tvec2 shadowMapSize;\n\t\t};\n\n\t\tuniform DirectionalLightShadow directionalLightShadows[ NUM_DIR_LIGHT_SHADOWS ];\n\n\t#endif\n\n\t#if NUM_SPOT_LIGHT_SHADOWS > 0\n\n\t\tuniform mat4 spotShadowMatrix[ NUM_SPOT_LIGHT_SHADOWS ];\n\t\tvarying vec4 vSpotShadowCoord[ NUM_SPOT_LIGHT_SHADOWS ];\n\n\t\tstruct SpotLightShadow {\n\t\t\tfloat shadowBias;\n\t\t\tfloat shadowNormalBias;\n\t\t\tfloat shadowRadius;\n\t\t\tvec2 shadowMapSize;\n\t\t};\n\n\t\tuniform SpotLightShadow spotLightShadows[ NUM_SPOT_LIGHT_SHADOWS ];\n\n\t#endif\n\n\t#if NUM_POINT_LIGHT_SHADOWS > 0\n\n\t\tuniform mat4 pointShadowMatrix[ NUM_POINT_LIGHT_SHADOWS ];\n\t\tvarying vec4 vPointShadowCoord[ NUM_POINT_LIGHT_SHADOWS ];\n\n\t\tstruct PointLightShadow {\n\t\t\tfloat shadowBias;\n\t\t\tfloat shadowNormalBias;\n\t\t\tfloat shadowRadius;\n\t\t\tvec2 shadowMapSize;\n\t\t\tfloat shadowCameraNear;\n\t\t\tfloat shadowCameraFar;\n\t\t};\n\n\t\tuniform PointLightShadow pointLightShadows[ NUM_POINT_LIGHT_SHADOWS ];\n\n\t#endif\n\n\t/*\n\t#if NUM_RECT_AREA_LIGHTS > 0\n\n\t\t// TODO (abelnation): uniforms for area light shadows\n\n\t#endif\n\t*/\n\n#endif\n",shadowmap_vertex:"\n#ifdef USE_SHADOWMAP\n\n\t#if NUM_DIR_LIGHT_SHADOWS > 0 || NUM_SPOT_LIGHT_SHADOWS > 0 || NUM_POINT_LIGHT_SHADOWS > 0\n\n\t\t// Offsetting the position used for querying occlusion along the world normal can be used to reduce shadow acne.\n\t\tvec3 shadowWorldNormal = inverseTransformDirection( transformedNormal, viewMatrix );\n\t\tvec4 shadowWorldPosition;\n\n\t#endif\n\n\t#if NUM_DIR_LIGHT_SHADOWS > 0\n\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_DIR_LIGHT_SHADOWS; i ++ ) {\n\n\t\tshadowWorldPosition = worldPosition + vec4( shadowWorldNormal * directionalLightShadows[ i ].shadowNormalBias, 0 );\n\t\tvDirectionalShadowCoord[ i ] = directionalShadowMatrix[ i ] * shadowWorldPosition;\n\n\t}\n\t#pragma unroll_loop_end\n\n\t#endif\n\n\t#if NUM_SPOT_LIGHT_SHADOWS > 0\n\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_SPOT_LIGHT_SHADOWS; i ++ ) {\n\n\t\tshadowWorldPosition = worldPosition + vec4( shadowWorldNormal * spotLightShadows[ i ].shadowNormalBias, 0 );\n\t\tvSpotShadowCoord[ i ] = spotShadowMatrix[ i ] * shadowWorldPosition;\n\n\t}\n\t#pragma unroll_loop_end\n\n\t#endif\n\n\t#if NUM_POINT_LIGHT_SHADOWS > 0\n\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_POINT_LIGHT_SHADOWS; i ++ ) {\n\n\t\tshadowWorldPosition = worldPosition + vec4( shadowWorldNormal * pointLightShadows[ i ].shadowNormalBias, 0 );\n\t\tvPointShadowCoord[ i ] = pointShadowMatrix[ i ] * shadowWorldPosition;\n\n\t}\n\t#pragma unroll_loop_end\n\n\t#endif\n\n\t/*\n\t#if NUM_RECT_AREA_LIGHTS > 0\n\n\t\t// TODO (abelnation): update vAreaShadowCoord with area light info\n\n\t#endif\n\t*/\n\n#endif\n",shadowmask_pars_fragment:"\nfloat getShadowMask() {\n\n\tfloat shadow = 1.0;\n\n\t#ifdef USE_SHADOWMAP\n\n\t#if NUM_DIR_LIGHT_SHADOWS > 0\n\n\tDirectionalLightShadow directionalLight;\n\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_DIR_LIGHT_SHADOWS; i ++ ) {\n\n\t\tdirectionalLight = directionalLightShadows[ i ];\n\t\tshadow *= receiveShadow ? getShadow( directionalShadowMap[ i ], directionalLight.shadowMapSize, directionalLight.shadowBias, directionalLight.shadowRadius, vDirectionalShadowCoord[ i ] ) : 1.0;\n\n\t}\n\t#pragma unroll_loop_end\n\n\t#endif\n\n\t#if NUM_SPOT_LIGHT_SHADOWS > 0\n\n\tSpotLightShadow spotLight;\n\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_SPOT_LIGHT_SHADOWS; i ++ ) {\n\n\t\tspotLight = spotLightShadows[ i ];\n\t\tshadow *= receiveShadow ? getShadow( spotShadowMap[ i ], spotLight.shadowMapSize, spotLight.shadowBias, spotLight.shadowRadius, vSpotShadowCoord[ i ] ) : 1.0;\n\n\t}\n\t#pragma unroll_loop_end\n\n\t#endif\n\n\t#if NUM_POINT_LIGHT_SHADOWS > 0\n\n\tPointLightShadow pointLight;\n\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_POINT_LIGHT_SHADOWS; i ++ ) {\n\n\t\tpointLight = pointLightShadows[ i ];\n\t\tshadow *= receiveShadow ? getPointShadow( pointShadowMap[ i ], pointLight.shadowMapSize, pointLight.shadowBias, pointLight.shadowRadius, vPointShadowCoord[ i ], pointLight.shadowCameraNear, pointLight.shadowCameraFar ) : 1.0;\n\n\t}\n\t#pragma unroll_loop_end\n\n\t#endif\n\n\t/*\n\t#if NUM_RECT_AREA_LIGHTS > 0\n\n\t\t// TODO (abelnation): update shadow for Area light\n\n\t#endif\n\t*/\n\n\t#endif\n\n\treturn shadow;\n\n}\n",skinbase_vertex:"\n#ifdef USE_SKINNING\n\n\tmat4 boneMatX = getBoneMatrix( skinIndex.x );\n\tmat4 boneMatY = getBoneMatrix( skinIndex.y );\n\tmat4 boneMatZ = getBoneMatrix( skinIndex.z );\n\tmat4 boneMatW = getBoneMatrix( skinIndex.w );\n\n#endif\n",skinning_pars_vertex:"\n#ifdef USE_SKINNING\n\n\tuniform mat4 bindMatrix;\n\tuniform mat4 bindMatrixInverse;\n\n\t#ifdef BONE_TEXTURE\n\n\t\tuniform highp sampler2D boneTexture;\n\t\tuniform int boneTextureSize;\n\n\t\tmat4 getBoneMatrix( const in float i ) {\n\n\t\t\tfloat j = i * 4.0;\n\t\t\tfloat x = mod( j, float( boneTextureSize ) );\n\t\t\tfloat y = floor( j / float( boneTextureSize ) );\n\n\t\t\tfloat dx = 1.0 / float( boneTextureSize );\n\t\t\tfloat dy = 1.0 / float( boneTextureSize );\n\n\t\t\ty = dy * ( y + 0.5 );\n\n\t\t\tvec4 v1 = texture2D( boneTexture, vec2( dx * ( x + 0.5 ), y ) );\n\t\t\tvec4 v2 = texture2D( boneTexture, vec2( dx * ( x + 1.5 ), y ) );\n\t\t\tvec4 v3 = texture2D( boneTexture, vec2( dx * ( x + 2.5 ), y ) );\n\t\t\tvec4 v4 = texture2D( boneTexture, vec2( dx * ( x + 3.5 ), y ) );\n\n\t\t\tmat4 bone = mat4( v1, v2, v3, v4 );\n\n\t\t\treturn bone;\n\n\t\t}\n\n\t#else\n\n\t\tuniform mat4 boneMatrices[ MAX_BONES ];\n\n\t\tmat4 getBoneMatrix( const in float i ) {\n\n\t\t\tmat4 bone = boneMatrices[ int(i) ];\n\t\t\treturn bone;\n\n\t\t}\n\n\t#endif\n\n#endif\n",skinning_vertex:"\n#ifdef USE_SKINNING\n\n\tvec4 skinVertex = bindMatrix * vec4( transformed, 1.0 );\n\n\tvec4 skinned = vec4( 0.0 );\n\tskinned += boneMatX * skinVertex * skinWeight.x;\n\tskinned += boneMatY * skinVertex * skinWeight.y;\n\tskinned += boneMatZ * skinVertex * skinWeight.z;\n\tskinned += boneMatW * skinVertex * skinWeight.w;\n\n\ttransformed = ( bindMatrixInverse * skinned ).xyz;\n\n#endif\n",skinnormal_vertex:"\n#ifdef USE_SKINNING\n\n\tmat4 skinMatrix = mat4( 0.0 );\n\tskinMatrix += skinWeight.x * boneMatX;\n\tskinMatrix += skinWeight.y * boneMatY;\n\tskinMatrix += skinWeight.z * boneMatZ;\n\tskinMatrix += skinWeight.w * boneMatW;\n\tskinMatrix = bindMatrixInverse * skinMatrix * bindMatrix;\n\n\tobjectNormal = vec4( skinMatrix * vec4( objectNormal, 0.0 ) ).xyz;\n\n\t#ifdef USE_TANGENT\n\n\t\tobjectTangent = vec4( skinMatrix * vec4( objectTangent, 0.0 ) ).xyz;\n\n\t#endif\n\n#endif\n",specularmap_fragment:"\nfloat specularStrength;\n\n#ifdef USE_SPECULARMAP\n\n\tvec4 texelSpecular = texture2D( specularMap, vUv );\n\tspecularStrength = texelSpecular.r;\n\n#else\n\n\tspecularStrength = 1.0;\n\n#endif\n",specularmap_pars_fragment:"\n#ifdef USE_SPECULARMAP\n\n\tuniform sampler2D specularMap;\n\n#endif\n",tonemapping_fragment:"\n#if defined( TONE_MAPPING )\n\n\tgl_FragColor.rgb = toneMapping( gl_FragColor.rgb );\n\n#endif\n",tonemapping_pars_fragment:"\n#ifndef saturate\n// may have defined saturate() already\n#define saturate(a) clamp( a, 0.0, 1.0 )\n#endif\n\nuniform float toneMappingExposure;\n\n// exposure only\nvec3 LinearToneMapping( vec3 color ) {\n\n\treturn toneMappingExposure * color;\n\n}\n\n// source: https://www.cs.utah.edu/~reinhard/cdrom/\nvec3 ReinhardToneMapping( vec3 color ) {\n\n\tcolor *= toneMappingExposure;\n\treturn saturate( color / ( vec3( 1.0 ) + color ) );\n\n}\n\n// source: http://filmicworlds.com/blog/filmic-tonemapping-operators/\nvec3 OptimizedCineonToneMapping( vec3 color ) {\n\n\t// optimized filmic operator by Jim Hejl and Richard Burgess-Dawson\n\tcolor *= toneMappingExposure;\n\tcolor = max( vec3( 0.0 ), color - 0.004 );\n\treturn pow( ( color * ( 6.2 * color + 0.5 ) ) / ( color * ( 6.2 * color + 1.7 ) + 0.06 ), vec3( 2.2 ) );\n\n}\n\n// source: https://github.com/selfshadow/ltc_code/blob/master/webgl/shaders/ltc/ltc_blit.fs\nvec3 RRTAndODTFit( vec3 v ) {\n\n\tvec3 a = v * ( v + 0.0245786 ) - 0.000090537;\n\tvec3 b = v * ( 0.983729 * v + 0.4329510 ) + 0.238081;\n\treturn a / b;\n\n}\n\n// this implementation of ACES is modified to accommodate a brighter viewing environment.\n// the scale factor of 1/0.6 is subjective. see discussion in #19621.\n\nvec3 ACESFilmicToneMapping( vec3 color ) {\n\n\t// sRGB => XYZ => D65_2_D60 => AP1 => RRT_SAT\n\tconst mat3 ACESInputMat = mat3(\n\t\tvec3( 0.59719, 0.07600, 0.02840 ), // transposed from source\n\t\tvec3( 0.35458, 0.90834, 0.13383 ),\n\t\tvec3( 0.04823, 0.01566, 0.83777 )\n\t);\n\n\t// ODT_SAT => XYZ => D60_2_D65 => sRGB\n\tconst mat3 ACESOutputMat = mat3(\n\t\tvec3(\t1.60475, -0.10208, -0.00327 ), // transposed from source\n\t\tvec3( -0.53108,\t1.10813, -0.07276 ),\n\t\tvec3( -0.07367, -0.00605,\t1.07602 )\n\t);\n\n\tcolor *= toneMappingExposure / 0.6;\n\n\tcolor = ACESInputMat * color;\n\n\t// Apply RRT and ODT\n\tcolor = RRTAndODTFit( color );\n\n\tcolor = ACESOutputMat * color;\n\n\t// Clamp to [0, 1]\n\treturn saturate( color );\n\n}\n\nvec3 CustomToneMapping( vec3 color ) { return color; }\n",transmissionmap_fragment:"\n#ifdef USE_TRANSMISSIONMAP\n\n\ttotalTransmission *= texture2D( transmissionMap, vUv ).r;\n\n#endif\n",transmissionmap_pars_fragment:"\n#ifdef USE_TRANSMISSIONMAP\n\n\tuniform sampler2D transmissionMap;\n\n#endif\n",uv_pars_fragment:"\n#if ( defined( USE_UV ) && ! defined( UVS_VERTEX_ONLY ) )\n\n\tvarying vec2 vUv;\n\n#endif\n",uv_pars_vertex:"\n#ifdef USE_UV\n\n\t#ifdef UVS_VERTEX_ONLY\n\n\t\tvec2 vUv;\n\n\t#else\n\n\t\tvarying vec2 vUv;\n\n\t#endif\n\n\tuniform mat3 uvTransform;\n\n#endif\n",uv_vertex:"\n#ifdef USE_UV\n\n\tvUv = ( uvTransform * vec3( uv, 1 ) ).xy;\n\n#endif\n",uv2_pars_fragment:"\n#if defined( USE_LIGHTMAP ) || defined( USE_AOMAP )\n\n\tvarying vec2 vUv2;\n\n#endif\n",uv2_pars_vertex:"\n#if defined( USE_LIGHTMAP ) || defined( USE_AOMAP )\n\n\tattribute vec2 uv2;\n\tvarying vec2 vUv2;\n\n\tuniform mat3 uv2Transform;\n\n#endif\n",uv2_vertex:"\n#if defined( USE_LIGHTMAP ) || defined( USE_AOMAP )\n\n\tvUv2 = ( uv2Transform * vec3( uv2, 1 ) ).xy;\n\n#endif\n",worldpos_vertex:"\n#if defined( USE_ENVMAP ) || defined( DISTANCE ) || defined ( USE_SHADOWMAP )\n\n\tvec4 worldPosition = vec4( transformed, 1.0 );\n\n\t#ifdef USE_INSTANCING\n\n\t\tworldPosition = instanceMatrix * worldPosition;\n\n\t#endif\n\n\tworldPosition = modelMatrix * worldPosition;\n\n#endif\n",background_frag:"\nuniform sampler2D t2D;\n\nvarying vec2 vUv;\n\nvoid main() {\n\n\tvec4 texColor = texture2D( t2D, vUv );\n\n\tgl_FragColor = mapTexelToLinear( texColor );\n\n\t#include \n\t#include \n\n}\n",background_vert:"\nvarying vec2 vUv;\nuniform mat3 uvTransform;\n\nvoid main() {\n\n\tvUv = ( uvTransform * vec3( uv, 1 ) ).xy;\n\n\tgl_Position = vec4( position.xy, 1.0, 1.0 );\n\n}\n",cube_frag:"\n#include \nuniform float opacity;\n\nvarying vec3 vWorldDirection;\n\n#include \n\nvoid main() {\n\n\tvec3 vReflect = vWorldDirection;\n\t#include \n\n\tgl_FragColor = envColor;\n\tgl_FragColor.a *= opacity;\n\n\t#include \n\t#include \n\n}\n",cube_vert:"\nvarying vec3 vWorldDirection;\n\n#include \n\nvoid main() {\n\n\tvWorldDirection = transformDirection( position, modelMatrix );\n\n\t#include \n\t#include \n\n\tgl_Position.z = gl_Position.w; // set z to camera.far\n\n}\n",depth_frag:"\n#if DEPTH_PACKING == 3200\n\n\tuniform float opacity;\n\n#endif\n\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n\nvarying vec2 vHighPrecisionZW;\n\nvoid main() {\n\n\t#include \n\n\tvec4 diffuseColor = vec4( 1.0 );\n\n\t#if DEPTH_PACKING == 3200\n\n\t\tdiffuseColor.a = opacity;\n\n\t#endif\n\n\t#include \n\t#include \n\t#include \n\n\t#include \n\n\t// Higher precision equivalent of gl_FragCoord.z. This assumes depthRange has been left to its default values.\n\tfloat fragCoordZ = 0.5 * vHighPrecisionZW[0] / vHighPrecisionZW[1] + 0.5;\n\n\t#if DEPTH_PACKING == 3200\n\n\t\tgl_FragColor = vec4( vec3( 1.0 - fragCoordZ ), opacity );\n\n\t#elif DEPTH_PACKING == 3201\n\n\t\tgl_FragColor = packDepthToRGBA( fragCoordZ );\n\n\t#endif\n\n}\n",depth_vert:"\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n\n// This is used for computing an equivalent of gl_FragCoord.z that is as high precision as possible.\n// Some platforms compute gl_FragCoord at a lower precision which makes the manually computed value better for\n// depth-based postprocessing effects. Reproduced on iPad with A10 processor / iPadOS 13.3.1.\nvarying vec2 vHighPrecisionZW;\n\nvoid main() {\n\n\t#include \n\n\t#include \n\n\t#ifdef USE_DISPLACEMENTMAP\n\n\t\t#include \n\t\t#include \n\t\t#include \n\n\t#endif\n\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\n\tvHighPrecisionZW = gl_Position.zw;\n\n}\n",distanceRGBA_frag:"\n#define DISTANCE\n\nuniform vec3 referencePosition;\nuniform float nearDistance;\nuniform float farDistance;\nvarying vec3 vWorldPosition;\n\n#include \n#include \n#include \n#include \n#include \n#include \n\nvoid main () {\n\n\t#include \n\n\tvec4 diffuseColor = vec4( 1.0 );\n\n\t#include \n\t#include \n\t#include \n\n\tfloat dist = length( vWorldPosition - referencePosition );\n\tdist = ( dist - nearDistance ) / ( farDistance - nearDistance );\n\tdist = saturate( dist ); // clamp to [ 0, 1 ]\n\n\tgl_FragColor = packDepthToRGBA( dist );\n\n}\n",distanceRGBA_vert:"\n#define DISTANCE\n\nvarying vec3 vWorldPosition;\n\n#include \n#include \n#include \n#include \n#include \n#include \n\nvoid main() {\n\n\t#include \n\n\t#include \n\n\t#ifdef USE_DISPLACEMENTMAP\n\n\t\t#include \n\t\t#include \n\t\t#include \n\n\t#endif\n\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\n\tvWorldPosition = worldPosition.xyz;\n\n}\n",equirect_frag:"\nuniform sampler2D tEquirect;\n\nvarying vec3 vWorldDirection;\n\n#include \n\nvoid main() {\n\n\tvec3 direction = normalize( vWorldDirection );\n\n\tvec2 sampleUV = equirectUv( direction );\n\n\tvec4 texColor = texture2D( tEquirect, sampleUV );\n\n\tgl_FragColor = mapTexelToLinear( texColor );\n\n\t#include \n\t#include \n\n}\n",equirect_vert:"\nvarying vec3 vWorldDirection;\n\n#include \n\nvoid main() {\n\n\tvWorldDirection = transformDirection( position, modelMatrix );\n\n\t#include \n\t#include \n\n}\n",linedashed_frag:"\nuniform vec3 diffuse;\nuniform float opacity;\n\nuniform float dashSize;\nuniform float totalSize;\n\nvarying float vLineDistance;\n\n#include \n#include \n#include \n#include \n#include \n\nvoid main() {\n\n\t#include \n\n\tif ( mod( vLineDistance, totalSize ) > dashSize ) {\n\n\t\tdiscard;\n\n\t}\n\n\tvec3 outgoingLight = vec3( 0.0 );\n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\n\t#include \n\t#include \n\n\toutgoingLight = diffuseColor.rgb; // simple shader\n\n\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\n\n\t#include \n\t#include \n\t#include \n\t#include \n\n}\n",linedashed_vert:"\nuniform float scale;\nattribute float lineDistance;\n\nvarying float vLineDistance;\n\n#include \n#include \n#include \n#include \n#include \n#include \n\nvoid main() {\n\n\tvLineDistance = scale * lineDistance;\n\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\n}\n",meshbasic_frag:"\nuniform vec3 diffuse;\nuniform float opacity;\n\n#ifndef FLAT_SHADED\n\n\tvarying vec3 vNormal;\n\n#endif\n\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n\nvoid main() {\n\n\t#include \n\n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\n\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\n\n\t// accumulation (baked indirect lighting only)\n\t#ifdef USE_LIGHTMAP\n\t\n\t\tvec4 lightMapTexel= texture2D( lightMap, vUv2 );\n\t\treflectedLight.indirectDiffuse += lightMapTexelToLinear( lightMapTexel ).rgb * lightMapIntensity;\n\n\t#else\n\n\t\treflectedLight.indirectDiffuse += vec3( 1.0 );\n\n\t#endif\n\n\t// modulation\n\t#include \n\n\treflectedLight.indirectDiffuse *= diffuseColor.rgb;\n\n\tvec3 outgoingLight = reflectedLight.indirectDiffuse;\n\n\t#include \n\n\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\n\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\n}\n",meshbasic_vert:"\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n\nvoid main() {\n\n\t#include \n\t#include \n\t#include \n\t#include \n\n\t#ifdef USE_ENVMAP\n\n\t#include \n\t#include \n\t#include \n\t#include \n\n\t#endif\n\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\n\t#include \n\t#include \n\t#include \n\t#include \n\n}\n", -meshlambert_frag:"\nuniform vec3 diffuse;\nuniform vec3 emissive;\nuniform float opacity;\n\nvarying vec3 vLightFront;\nvarying vec3 vIndirectFront;\n\n#ifdef DOUBLE_SIDED\n\tvarying vec3 vLightBack;\n\tvarying vec3 vIndirectBack;\n#endif\n\n\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n\nvoid main() {\n\n\t#include \n\n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\n\tvec3 totalEmissiveRadiance = emissive;\n\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\n\t// accumulation\n\n\t#ifdef DOUBLE_SIDED\n\n\t\treflectedLight.indirectDiffuse += ( gl_FrontFacing ) ? vIndirectFront : vIndirectBack;\n\n\t#else\n\n\t\treflectedLight.indirectDiffuse += vIndirectFront;\n\n\t#endif\n\n\t#include \n\n\treflectedLight.indirectDiffuse *= BRDF_Diffuse_Lambert( diffuseColor.rgb );\n\n\t#ifdef DOUBLE_SIDED\n\n\t\treflectedLight.directDiffuse = ( gl_FrontFacing ) ? vLightFront : vLightBack;\n\n\t#else\n\n\t\treflectedLight.directDiffuse = vLightFront;\n\n\t#endif\n\n\treflectedLight.directDiffuse *= BRDF_Diffuse_Lambert( diffuseColor.rgb ) * getShadowMask();\n\n\t// modulation\n\n\t#include \n\n\tvec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + totalEmissiveRadiance;\n\n\t#include \n\n\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\n\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}\n",meshlambert_vert:"\n#define LAMBERT\n\nvarying vec3 vLightFront;\nvarying vec3 vIndirectFront;\n\n#ifdef DOUBLE_SIDED\n\tvarying vec3 vLightBack;\n\tvarying vec3 vIndirectBack;\n#endif\n\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n\nvoid main() {\n\n\t#include \n\t#include \n\t#include \n\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}\n",meshmatcap_frag:"\n#define MATCAP\n\nuniform vec3 diffuse;\nuniform float opacity;\nuniform sampler2D matcap;\n\nvarying vec3 vViewPosition;\n\n#ifndef FLAT_SHADED\n\n\tvarying vec3 vNormal;\n\n#endif\n\n#include \n#include \n#include \n#include \n#include \n#include \n\n#include \n#include \n#include \n#include \n#include \n\nvoid main() {\n\n\t#include \n\n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\n\tvec3 viewDir = normalize( vViewPosition );\n\tvec3 x = normalize( vec3( viewDir.z, 0.0, - viewDir.x ) );\n\tvec3 y = cross( viewDir, x );\n\tvec2 uv = vec2( dot( x, normal ), dot( y, normal ) ) * 0.495 + 0.5; // 0.495 to remove artifacts caused by undersized matcap disks\n\n\t#ifdef USE_MATCAP\n\n\t\tvec4 matcapColor = texture2D( matcap, uv );\n\t\tmatcapColor = matcapTexelToLinear( matcapColor );\n\n\t#else\n\n\t\tvec4 matcapColor = vec4( 1.0 );\n\n\t#endif\n\n\tvec3 outgoingLight = diffuseColor.rgb * matcapColor.rgb;\n\n\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\n\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\n}\n",meshmatcap_vert:"\n#define MATCAP\n\nvarying vec3 vViewPosition;\n\n#ifndef FLAT_SHADED\n\n\tvarying vec3 vNormal;\n\n#endif\n\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n\n#include \n#include \n\nvoid main() {\n\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\n\t#ifndef FLAT_SHADED // Normal computed with derivatives when FLAT_SHADED\n\n\t\tvNormal = normalize( transformedNormal );\n\n\t#endif\n\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\n\t#include \n\t#include \n\t#include \n\n\tvViewPosition = - mvPosition.xyz;\n\n}\n",meshtoon_frag:"\n#define TOON\n\nuniform vec3 diffuse;\nuniform vec3 emissive;\nuniform float opacity;\n\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n\nvoid main() {\n\n\t#include \n\n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\n\tvec3 totalEmissiveRadiance = emissive;\n\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\n\t// accumulation\n\t#include \n\t#include \n\t#include \n\t#include \n\n\t// modulation\n\t#include \n\n\tvec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + totalEmissiveRadiance;\n\n\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\n\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\n}\n",meshtoon_vert:"\n#define TOON\n\nvarying vec3 vViewPosition;\n\n#ifndef FLAT_SHADED\n\n\tvarying vec3 vNormal;\n\n#endif\n\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n\nvoid main() {\n\n\t#include \n\t#include \n\t#include \n\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\n#ifndef FLAT_SHADED // Normal computed with derivatives when FLAT_SHADED\n\n\tvNormal = normalize( transformedNormal );\n\n#endif\n\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\n\tvViewPosition = - mvPosition.xyz;\n\n\t#include \n\t#include \n\t#include \n\n}\n",meshphong_frag:"\n#define PHONG\n\nuniform vec3 diffuse;\nuniform vec3 emissive;\nuniform vec3 specular;\nuniform float shininess;\nuniform float opacity;\n\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n\nvoid main() {\n\n\t#include \n\n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\n\tvec3 totalEmissiveRadiance = emissive;\n\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\n\t// accumulation\n\t#include \n\t#include \n\t#include \n\t#include \n\n\t// modulation\n\t#include \n\n\tvec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + reflectedLight.directSpecular + reflectedLight.indirectSpecular + totalEmissiveRadiance;\n\n\t#include \n\n\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\n\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\n}\n",meshphong_vert:"\n#define PHONG\n\nvarying vec3 vViewPosition;\n\n#ifndef FLAT_SHADED\n\n\tvarying vec3 vNormal;\n\n#endif\n\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n\nvoid main() {\n\n\t#include \n\t#include \n\t#include \n\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\n#ifndef FLAT_SHADED // Normal computed with derivatives when FLAT_SHADED\n\n\tvNormal = normalize( transformedNormal );\n\n#endif\n\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\n\tvViewPosition = - mvPosition.xyz;\n\n\t#include \n\t#include \n\t#include \n\t#include \n\n}\n",meshphysical_frag:"\n#define STANDARD\n\n#ifdef PHYSICAL\n\t#define REFLECTIVITY\n\t#define CLEARCOAT\n\t#define TRANSMISSION\n#endif\n\nuniform vec3 diffuse;\nuniform vec3 emissive;\nuniform float roughness;\nuniform float metalness;\nuniform float opacity;\n\n#ifdef TRANSMISSION\n\tuniform float transmission;\n#endif\n\n#ifdef REFLECTIVITY\n\tuniform float reflectivity;\n#endif\n\n#ifdef CLEARCOAT\n\tuniform float clearcoat;\n\tuniform float clearcoatRoughness;\n#endif\n\n#ifdef USE_SHEEN\n\tuniform vec3 sheen;\n#endif\n\nvarying vec3 vViewPosition;\n\n#ifndef FLAT_SHADED\n\n\tvarying vec3 vNormal;\n\n\t#ifdef USE_TANGENT\n\n\t\tvarying vec3 vTangent;\n\t\tvarying vec3 vBitangent;\n\n\t#endif\n\n#endif\n\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n\nvoid main() {\n\n\t#include \n\n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\n\tvec3 totalEmissiveRadiance = emissive;\n\n\t#ifdef TRANSMISSION\n\t\tfloat totalTransmission = transmission;\n\t#endif\n\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\n\t// accumulation\n\t#include \n\t#include \n\t#include \n\t#include \n\n\t// modulation\n\t#include \n\n\tvec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + reflectedLight.directSpecular + reflectedLight.indirectSpecular + totalEmissiveRadiance;\n\n\t// this is a stub for the transmission model\n\t#ifdef TRANSMISSION\n\t\tdiffuseColor.a *= mix( saturate( 1. - totalTransmission + linearToRelativeLuminance( reflectedLight.directSpecular + reflectedLight.indirectSpecular ) ), 1.0, metalness );\n\t#endif\n\n\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\n\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\n}\n",meshphysical_vert:"\n#define STANDARD\n\nvarying vec3 vViewPosition;\n\n#ifndef FLAT_SHADED\n\n\tvarying vec3 vNormal;\n\n\t#ifdef USE_TANGENT\n\n\t\tvarying vec3 vTangent;\n\t\tvarying vec3 vBitangent;\n\n\t#endif\n\n#endif\n\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n\nvoid main() {\n\n\t#include \n\t#include \n\t#include \n\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\n#ifndef FLAT_SHADED // Normal computed with derivatives when FLAT_SHADED\n\n\tvNormal = normalize( transformedNormal );\n\n\t#ifdef USE_TANGENT\n\n\t\tvTangent = normalize( transformedTangent );\n\t\tvBitangent = normalize( cross( vNormal, vTangent ) * tangent.w );\n\n\t#endif\n\n#endif\n\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\n\tvViewPosition = - mvPosition.xyz;\n\n\t#include \n\t#include \n\t#include \n\n}\n",normal_frag:"\n#define NORMAL\n\nuniform float opacity;\n\n#if defined( FLAT_SHADED ) || defined( USE_BUMPMAP ) || defined( TANGENTSPACE_NORMALMAP )\n\n\tvarying vec3 vViewPosition;\n\n#endif\n\n#ifndef FLAT_SHADED\n\n\tvarying vec3 vNormal;\n\n\t#ifdef USE_TANGENT\n\n\t\tvarying vec3 vTangent;\n\t\tvarying vec3 vBitangent;\n\n\t#endif\n\n#endif\n\n#include \n#include \n#include \n#include \n#include \n#include \n\nvoid main() {\n\n\t#include \n\t#include \n\t#include \n\t#include \n\n\tgl_FragColor = vec4( packNormalToRGB( normal ), opacity );\n\n}\n",normal_vert:"\n#define NORMAL\n\n#if defined( FLAT_SHADED ) || defined( USE_BUMPMAP ) || defined( TANGENTSPACE_NORMALMAP )\n\n\tvarying vec3 vViewPosition;\n\n#endif\n\n#ifndef FLAT_SHADED\n\n\tvarying vec3 vNormal;\n\n\t#ifdef USE_TANGENT\n\n\t\tvarying vec3 vTangent;\n\t\tvarying vec3 vBitangent;\n\n\t#endif\n\n#endif\n\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n\nvoid main() {\n\n\t#include \n\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\n#ifndef FLAT_SHADED // Normal computed with derivatives when FLAT_SHADED\n\n\tvNormal = normalize( transformedNormal );\n\n\t#ifdef USE_TANGENT\n\n\t\tvTangent = normalize( transformedTangent );\n\t\tvBitangent = normalize( cross( vNormal, vTangent ) * tangent.w );\n\n\t#endif\n\n#endif\n\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\n#if defined( FLAT_SHADED ) || defined( USE_BUMPMAP ) || defined( TANGENTSPACE_NORMALMAP )\n\n\tvViewPosition = - mvPosition.xyz;\n\n#endif\n\n}\n",points_frag:"\nuniform vec3 diffuse;\nuniform float opacity;\n\n#include \n#include \n#include \n#include \n#include \n#include \n\nvoid main() {\n\n\t#include \n\n\tvec3 outgoingLight = vec3( 0.0 );\n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\n\t#include \n\t#include \n\t#include \n\t#include \n\n\toutgoingLight = diffuseColor.rgb;\n\n\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\n\n\t#include \n\t#include \n\t#include \n\t#include \n\n}\n",points_vert:"\nuniform float size;\nuniform float scale;\n\n#include \n#include \n#include \n#include \n#include \n#include \n\nvoid main() {\n\n\t#include \n\t#include \n\t#include \n\t#include \n\n\tgl_PointSize = size;\n\n\t#ifdef USE_SIZEATTENUATION\n\n\t\tbool isPerspective = isPerspectiveMatrix( projectionMatrix );\n\n\t\tif ( isPerspective ) gl_PointSize *= ( scale / - mvPosition.z );\n\n\t#endif\n\n\t#include \n\t#include \n\t#include \n\t#include \n\n}\n",shadow_frag:"\nuniform vec3 color;\nuniform float opacity;\n\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n\nvoid main() {\n\n\tgl_FragColor = vec4( color, opacity * ( 1.0 - getShadowMask() ) );\n\n\t#include \n\t#include \n\t#include \n\n}\n",shadow_vert:"\n#include \n#include \n#include \n\nvoid main() {\n\n\t#include \n\t#include \n\t#include \n\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\n\t#include \n\t#include \n\n}\n",sprite_frag:"\nuniform vec3 diffuse;\nuniform float opacity;\n\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n\nvoid main() {\n\n\t#include \n\n\tvec3 outgoingLight = vec3( 0.0 );\n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\n\t#include \n\t#include \n\t#include \n\t#include \n\n\toutgoingLight = diffuseColor.rgb;\n\n\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\n\n\t#include \n\t#include \n\t#include \n\n}\n",sprite_vert:"\nuniform float rotation;\nuniform vec2 center;\n\n#include \n#include \n#include \n#include \n#include \n\nvoid main() {\n\n\t#include \n\n\tvec4 mvPosition = modelViewMatrix * vec4( 0.0, 0.0, 0.0, 1.0 );\n\n\tvec2 scale;\n\tscale.x = length( vec3( modelMatrix[ 0 ].x, modelMatrix[ 0 ].y, modelMatrix[ 0 ].z ) );\n\tscale.y = length( vec3( modelMatrix[ 1 ].x, modelMatrix[ 1 ].y, modelMatrix[ 1 ].z ) );\n\n\t#ifndef USE_SIZEATTENUATION\n\n\t\tbool isPerspective = isPerspectiveMatrix( projectionMatrix );\n\n\t\tif ( isPerspective ) scale *= - mvPosition.z;\n\n\t#endif\n\n\tvec2 alignedPosition = ( position.xy - ( center - vec2( 0.5 ) ) ) * scale;\n\n\tvec2 rotatedPosition;\n\trotatedPosition.x = cos( rotation ) * alignedPosition.x - sin( rotation ) * alignedPosition.y;\n\trotatedPosition.y = sin( rotation ) * alignedPosition.x + cos( rotation ) * alignedPosition.y;\n\n\tmvPosition.xy += rotatedPosition;\n\n\tgl_Position = projectionMatrix * mvPosition;\n\n\t#include \n\t#include \n\t#include \n\n}\n"},Bu={common:{diffuse:{value:new Yl(15658734)},opacity:{value:1},map:{value:null},uvTransform:{value:new Ac},uv2Transform:{value:new Ac},alphaMap:{value:null}},specularmap:{specularMap:{value:null}},envmap:{envMap:{value:null},flipEnvMap:{value:-1},reflectivity:{value:1},refractionRatio:{value:.98},maxMipLevel:{value:0}},aomap:{aoMap:{value:null},aoMapIntensity:{value:1}},lightmap:{lightMap:{value:null},lightMapIntensity:{value:1}},emissivemap:{emissiveMap:{value:null}},bumpmap:{bumpMap:{value:null},bumpScale:{value:1}},normalmap:{normalMap:{value:null},normalScale:{value:new Ec(1,1)}},displacementmap:{displacementMap:{value:null},displacementScale:{value:1},displacementBias:{value:0}},roughnessmap:{roughnessMap:{value:null}},metalnessmap:{metalnessMap:{value:null}},gradientmap:{gradientMap:{value:null}},fog:{fogDensity:{value:25e-5},fogNear:{value:1},fogFar:{value:2e3},fogColor:{value:new Yl(16777215)}},lights:{ambientLightColor:{value:[]},lightProbe:{value:[]},directionalLights:{value:[],properties:{direction:{},color:{}}},directionalLightShadows:{value:[],properties:{shadowBias:{},shadowNormalBias:{},shadowRadius:{},shadowMapSize:{}}},directionalShadowMap:{value:[]},directionalShadowMatrix:{value:[]},spotLights:{value:[],properties:{color:{},position:{},direction:{},distance:{},coneCos:{},penumbraCos:{},decay:{}}},spotLightShadows:{value:[],properties:{shadowBias:{},shadowNormalBias:{},shadowRadius:{},shadowMapSize:{}}},spotShadowMap:{value:[]},spotShadowMatrix:{value:[]},pointLights:{value:[],properties:{color:{},position:{},decay:{},distance:{}}},pointLightShadows:{value:[],properties:{shadowBias:{},shadowNormalBias:{},shadowRadius:{},shadowMapSize:{},shadowCameraNear:{},shadowCameraFar:{}}},pointShadowMap:{value:[]},pointShadowMatrix:{value:[]},hemisphereLights:{value:[],properties:{direction:{},skyColor:{},groundColor:{}}},rectAreaLights:{value:[],properties:{color:{},position:{},width:{},height:{}}},ltc_1:{value:null},ltc_2:{value:null}},points:{diffuse:{value:new Yl(15658734)},opacity:{value:1},size:{value:1},scale:{value:1},map:{value:null},alphaMap:{value:null},uvTransform:{value:new Ac}},sprite:{diffuse:{value:new Yl(15658734)},opacity:{value:1},center:{value:new Ec(.5,.5)},rotation:{value:0},map:{value:null},alphaMap:{value:null},uvTransform:{value:new Ac}}},zu={basic:{uniforms:N([Bu.common,Bu.specularmap,Bu.envmap,Bu.aomap,Bu.lightmap,Bu.fog]),vertexShader:Nu.meshbasic_vert,fragmentShader:Nu.meshbasic_frag},lambert:{uniforms:N([Bu.common,Bu.specularmap,Bu.envmap,Bu.aomap,Bu.lightmap,Bu.emissivemap,Bu.fog,Bu.lights,{emissive:{value:new Yl(0)}}]),vertexShader:Nu.meshlambert_vert,fragmentShader:Nu.meshlambert_frag},phong:{uniforms:N([Bu.common,Bu.specularmap,Bu.envmap,Bu.aomap,Bu.lightmap,Bu.emissivemap,Bu.bumpmap,Bu.normalmap,Bu.displacementmap,Bu.fog,Bu.lights,{emissive:{value:new Yl(0)},specular:{value:new Yl(1118481)},shininess:{value:30}}]),vertexShader:Nu.meshphong_vert,fragmentShader:Nu.meshphong_frag},standard:{uniforms:N([Bu.common,Bu.envmap,Bu.aomap,Bu.lightmap,Bu.emissivemap,Bu.bumpmap,Bu.normalmap,Bu.displacementmap,Bu.roughnessmap,Bu.metalnessmap,Bu.fog,Bu.lights,{emissive:{value:new Yl(0)},roughness:{value:1},metalness:{value:0},envMapIntensity:{value:1}}]),vertexShader:Nu.meshphysical_vert,fragmentShader:Nu.meshphysical_frag},toon:{uniforms:N([Bu.common,Bu.aomap,Bu.lightmap,Bu.emissivemap,Bu.bumpmap,Bu.normalmap,Bu.displacementmap,Bu.gradientmap,Bu.fog,Bu.lights,{emissive:{value:new Yl(0)}}]),vertexShader:Nu.meshtoon_vert,fragmentShader:Nu.meshtoon_frag},matcap:{uniforms:N([Bu.common,Bu.bumpmap,Bu.normalmap,Bu.displacementmap,Bu.fog,{matcap:{value:null}}]),vertexShader:Nu.meshmatcap_vert,fragmentShader:Nu.meshmatcap_frag},points:{uniforms:N([Bu.points,Bu.fog]),vertexShader:Nu.points_vert,fragmentShader:Nu.points_frag},dashed:{uniforms:N([Bu.common,Bu.fog,{scale:{value:1},dashSize:{value:1},totalSize:{value:2}}]),vertexShader:Nu.linedashed_vert,fragmentShader:Nu.linedashed_frag},depth:{uniforms:N([Bu.common,Bu.displacementmap]),vertexShader:Nu.depth_vert,fragmentShader:Nu.depth_frag},normal:{uniforms:N([Bu.common,Bu.bumpmap,Bu.normalmap,Bu.displacementmap,{opacity:{value:1}}]),vertexShader:Nu.normal_vert,fragmentShader:Nu.normal_frag},sprite:{uniforms:N([Bu.sprite,Bu.fog]),vertexShader:Nu.sprite_vert,fragmentShader:Nu.sprite_frag},background:{uniforms:{uvTransform:{value:new Ac},t2D:{value:null}},vertexShader:Nu.background_vert,fragmentShader:Nu.background_frag},cube:{uniforms:N([Bu.envmap,{opacity:{value:1}}]),vertexShader:Nu.cube_vert,fragmentShader:Nu.cube_frag},equirect:{uniforms:{tEquirect:{value:null}},vertexShader:Nu.equirect_vert,fragmentShader:Nu.equirect_frag},distanceRGBA:{uniforms:N([Bu.common,Bu.displacementmap,{referencePosition:{value:new Dc},nearDistance:{value:1},farDistance:{value:1e3}}]),vertexShader:Nu.distanceRGBA_vert,fragmentShader:Nu.distanceRGBA_frag},shadow:{uniforms:N([Bu.lights,Bu.fog,{color:{value:new Yl(0)},opacity:{value:1}}]),vertexShader:Nu.shadow_vert,fragmentShader:Nu.shadow_frag}};zu.physical={uniforms:N([zu.standard.uniforms,{clearcoat:{value:0},clearcoatMap:{value:null},clearcoatRoughness:{value:0},clearcoatRoughnessMap:{value:null},clearcoatNormalScale:{value:new Ec(1,1)},clearcoatNormalMap:{value:null},sheen:{value:new Yl(0)},transmission:{value:0},transmissionMap:{value:null}}]),vertexShader:Nu.meshphysical_vert,fragmentShader:Nu.meshphysical_frag},at.prototype=Object.create(o.prototype),at.prototype.constructor=at,at.prototype.isDataTexture2DArray=!0,ot.prototype=Object.create(o.prototype),ot.prototype.constructor=ot,ot.prototype.isDataTexture3D=!0;var Fu=new o,Gu=new at,Uu=new ot,Hu=new U,ku=[],Vu=[],Wu=new Float32Array(16),ju=new Float32Array(9),qu=new Float32Array(4);Vt.prototype.updateCache=function(t){var e=this.cache;t instanceof Float32Array&&e.length!==t.length&&(this.cache=new Float32Array(t.length)),lt(e,t)},Wt.prototype.setValue=function(t,e,n){for(var r=this.seq,i=0,a=r.length;i!==a;++i){var o=r[i];o.setValue(t,e[o.id],n)}};var Xu=/([\w\d_]+)(\])?(\[|\.)?/g;Xt.prototype.setValue=function(t,e,n,r){var i=this.map[e];void 0!==i&&i.setValue(t,n,r)},Xt.prototype.setOptional=function(t,e,n){var r=e[n];void 0!==r&&this.setValue(t,n,r)},Xt.upload=function(t,e,n,r){for(var i=0,a=e.length;i!==a;++i){var o=e[i],s=n[o.id];!1!==s.needsUpdate&&o.setValue(t,s.value,r)}},Xt.seqWithValue=function(t,e){for(var n=[],r=0,i=t.length;r!==i;++r){var a=t[r];a.id in e&&n.push(a)}return n};var Yu=0,Zu=/^[ \t]*#include +<([\w\d./]+)>/gm,Ju=/#pragma unroll_loop[\s]+?for \( int i \= (\d+)\; i < (\d+)\; i \+\+ \) \{([\s\S]+?)(?=\})\}/g,Qu=/#pragma unroll_loop_start\s+for\s*\(\s*int\s+i\s*=\s*(\d+)\s*;\s*i\s*<\s*(\d+)\s*;\s*i\s*\+\+\s*\)\s*{([\s\S]+?)}\s+#pragma unroll_loop_end/g,Ku=0;Ce.prototype=Object.create(m.prototype),Ce.prototype.constructor=Ce,Ce.prototype.isMeshDepthMaterial=!0,Ce.prototype.copy=function(t){return m.prototype.copy.call(this,t),this.depthPacking=t.depthPacking,this.skinning=t.skinning,this.morphTargets=t.morphTargets,this.map=t.map,this.alphaMap=t.alphaMap,this.displacementMap=t.displacementMap,this.displacementScale=t.displacementScale,this.displacementBias=t.displacementBias,this.wireframe=t.wireframe,this.wireframeLinewidth=t.wireframeLinewidth,this},Pe.prototype=Object.create(m.prototype),Pe.prototype.constructor=Pe,Pe.prototype.isMeshDistanceMaterial=!0,Pe.prototype.copy=function(t){return m.prototype.copy.call(this,t),this.referencePosition.copy(t.referencePosition),this.nearDistance=t.nearDistance,this.farDistance=t.farDistance,this.skinning=t.skinning,this.morphTargets=t.morphTargets, -this.map=t.map,this.alphaMap=t.alphaMap,this.displacementMap=t.displacementMap,this.displacementScale=t.displacementScale,this.displacementBias=t.displacementBias,this};var $u="\nuniform sampler2D shadow_pass;\nuniform vec2 resolution;\nuniform float radius;\n\n#include \n\nvoid main() {\n\n\tfloat mean = 0.0;\n\tfloat squared_mean = 0.0;\n\n\t// This seems totally useless but it's a crazy work around for a Adreno compiler bug\n\tfloat depth = unpackRGBAToDepth( texture2D( shadow_pass, ( gl_FragCoord.xy ) / resolution ) );\n\n\tfor ( float i = -1.0; i < 1.0 ; i += SAMPLE_RATE) {\n\n\t\t#ifdef HORIZONAL_PASS\n\n\t\t\tvec2 distribution = unpackRGBATo2Half( texture2D( shadow_pass, ( gl_FragCoord.xy + vec2( i, 0.0 ) * radius ) / resolution ) );\n\t\t\tmean += distribution.x;\n\t\t\tsquared_mean += distribution.y * distribution.y + distribution.x * distribution.x;\n\n\t\t#else\n\n\t\t\tfloat depth = unpackRGBAToDepth( texture2D( shadow_pass, ( gl_FragCoord.xy + vec2( 0.0, i ) * radius ) / resolution ) );\n\t\t\tmean += depth;\n\t\t\tsquared_mean += depth * depth;\n\n\t\t#endif\n\n\t}\n\n\tmean = mean * HALF_SAMPLE_RATE;\n\tsquared_mean = squared_mean * HALF_SAMPLE_RATE;\n\n\tfloat std_dev = sqrt( squared_mean - mean * mean );\n\n\tgl_FragColor = pack2HalfToRGBA( vec2( mean, std_dev ) );\n\n}\n",th="\nvoid main() {\n\n\tgl_Position = vec4( position, 1.0 );\n\n}\n";Be.prototype=Object.assign(Object.create(h.prototype),{constructor:Be,isGroup:!0}),ze.prototype=Object.assign(Object.create(F.prototype),{constructor:ze,isArrayCamera:!0});var eh=new Dc,nh=new Dc;Object.assign(Ge.prototype,e.prototype),Object.assign(Ue.prototype,{constructor:Ue,getHandSpace:function(){if(null===this._hand&&(this._hand=new Be,this._hand.matrixAutoUpdate=!1,this._hand.visible=!1,this._hand.joints=[],this._hand.inputState={pinching:!1},window.XRHand))for(var t=0;t<=window.XRHand.LITTLE_PHALANX_TIP;t++){var e=new Be;e.matrixAutoUpdate=!1,e.visible=!1,this._hand.joints.push(e),this._hand.add(e)}return this._hand},getTargetRaySpace:function(){return null===this._targetRay&&(this._targetRay=new Be,this._targetRay.matrixAutoUpdate=!1,this._targetRay.visible=!1),this._targetRay},getGripSpace:function(){return null===this._grip&&(this._grip=new Be,this._grip.matrixAutoUpdate=!1,this._grip.visible=!1),this._grip},dispatchEvent:function(t){return null!==this._targetRay&&this._targetRay.dispatchEvent(t),null!==this._grip&&this._grip.dispatchEvent(t),null!==this._hand&&this._hand.dispatchEvent(t),this},disconnect:function(t){return this.dispatchEvent({type:"disconnected",data:t}),null!==this._targetRay&&(this._targetRay.visible=!1),null!==this._grip&&(this._grip.visible=!1),null!==this._hand&&(this._hand.visible=!1),this},update:function(t,e,n){var r=null,i=null,a=null,o=this._targetRay,s=this._grip,c=this._hand;if(t&&"visible-blurred"!==e.session.visibilityState)if(c&&t.hand){a=!0;for(var l=0;l<=window.XRHand.LITTLE_PHALANX_TIP;l++)if(t.hand[l]){var u=e.getJointPose(t.hand[l],n),h=c.joints[l];null!==u&&(h.matrix.fromArray(u.transform.matrix),h.matrix.decompose(h.position,h.rotation,h.scale),h.jointRadius=u.radius),h.visible=null!==u;var d=c.joints[window.XRHand.INDEX_PHALANX_TIP],p=c.joints[window.XRHand.THUMB_PHALANX_TIP],f=d.position.distanceTo(p.position);c.inputState.pinching&&f>.025?(c.inputState.pinching=!1,this.dispatchEvent({type:"pinchend",handedness:t.handedness,target:this})):!c.inputState.pinching&&f<=.015&&(c.inputState.pinching=!0,this.dispatchEvent({type:"pinchstart",handedness:t.handedness,target:this}))}}else null!==o&&null!==(r=e.getPose(t.targetRaySpace,n))&&(o.matrix.fromArray(r.transform.matrix),o.matrix.decompose(o.position,o.rotation,o.scale)),null!==s&&t.gripSpace&&null!==(i=e.getPose(t.gripSpace,n))&&(s.matrix.fromArray(i.transform.matrix),s.matrix.decompose(s.position,s.rotation,s.scale));return null!==o&&(o.visible=null!==r),null!==s&&(s.visible=null!==i),null!==c&&(c.visible=null!==a),this}}),Object.assign(He.prototype,e.prototype),je.prototype=Object.assign(Object.create(We.prototype),{constructor:je,isWebGL1Renderer:!0});var rh=function(){function t(t,e){Object.defineProperty(this,"isFogExp2",{value:!0}),this.name="",this.color=new Yl(t),this.density=void 0!==e?e:25e-5}var e=t.prototype;return e.clone=function(){return new t(this.color,this.density)},e.toJSON=function(){return{type:"FogExp2",color:this.color.getHex(),density:this.density}},t}(),ih=function(){function t(t,e,n){Object.defineProperty(this,"isFog",{value:!0}),this.name="",this.color=new Yl(t),this.near=void 0!==e?e:1,this.far=void 0!==n?n:1e3}var e=t.prototype;return e.clone=function(){return new t(this.color,this.near,this.far)},e.toJSON=function(){return{type:"Fog",color:this.color.getHex(),near:this.near,far:this.far}},t}(),ah=function(t){function e(){var e;return e=t.call(this)||this,Object.defineProperty(a(e),"isScene",{value:!0}),e.type="Scene",e.background=null,e.environment=null,e.fog=null,e.overrideMaterial=null,e.autoUpdate=!0,"undefined"!=typeof __THREE_DEVTOOLS__&&__THREE_DEVTOOLS__.dispatchEvent(new CustomEvent("observe",{detail:a(e)})),e}i(e,t);var n=e.prototype;return n.copy=function(e,n){return t.prototype.copy.call(this,e,n),null!==e.background&&(this.background=e.background.clone()),null!==e.environment&&(this.environment=e.environment.clone()),null!==e.fog&&(this.fog=e.fog.clone()),null!==e.overrideMaterial&&(this.overrideMaterial=e.overrideMaterial.clone()),this.autoUpdate=e.autoUpdate,this.matrixAutoUpdate=e.matrixAutoUpdate,this},n.toJSON=function(e){var n=t.prototype.toJSON.call(this,e);return null!==this.background&&(n.object.background=this.background.toJSON(e)),null!==this.environment&&(n.object.environment=this.environment.toJSON(e)),null!==this.fog&&(n.object.fog=this.fog.toJSON()),n},e}(h);Object.defineProperty(qe.prototype,"needsUpdate",{set:function(t){!0===t&&this.version++}}),Object.assign(qe.prototype,{isInterleavedBuffer:!0,onUploadCallback:function(){},setUsage:function(t){return this.usage=t,this},copy:function(t){return this.array=new t.array.constructor(t.array),this.count=t.count,this.stride=t.stride,this.usage=t.usage,this},copyAt:function(t,e,n){t*=this.stride,n*=e.stride;for(var r=0,i=this.stride;rt.far||e.push({distance:s,point:ch.clone(),uv:Wl.getUV(ch,fh,mh,vh,gh,yh,xh,new Ec),face:null,object:this})}},copy:function(t){return h.prototype.copy.call(this,t),void 0!==t.center&&this.center.copy(t.center),this.material=t.material,this}});var bh=new Dc,_h=new Dc;Qe.prototype=Object.assign(Object.create(h.prototype),{constructor:Qe,isLOD:!0,copy:function(t){h.prototype.copy.call(this,t,!1);for(var e=t.levels,n=0,r=e.length;n0){var n,r;for(n=1,r=e.length;n0){bh.setFromMatrixPosition(this.matrixWorld);var n=t.ray.origin.distanceTo(bh);this.getObjectForDistance(n).raycast(t,e)}},update:function(t){var e=this.levels;if(e.length>1){bh.setFromMatrixPosition(t.matrixWorld),_h.setFromMatrixPosition(this.matrixWorld);var n=bh.distanceTo(_h)/t.zoom;e[0].object.visible=!0;var r,i;for(r=1,i=e.length;r=e[r].distance;r++)e[r-1].object.visible=!1,e[r].object.visible=!0;for(this._currentLevel=r-1;ro)){u.applyMatrix4(this.matrixWorld);var _=t.ray.origin.distanceTo(u);_t.far||e.push({distance:_,point:l.clone().applyMatrix4(this.matrixWorld),index:v,face:null,faceIndex:null,object:this})}}else for(var w=0,M=f.count-1;wo)){u.applyMatrix4(this.matrixWorld);var T=t.ray.origin.distanceTo(u);Tt.far||e.push({distance:T,point:l.clone().applyMatrix4(this.matrixWorld),index:w,face:null,faceIndex:null,object:this})}}}else if(n.isGeometry)for(var E=n.vertices,A=E.length,L=0;Lo)){u.applyMatrix4(this.matrixWorld);var C=t.ray.origin.distanceTo(u);Ct.far||e.push({distance:C,point:l.clone().applyMatrix4(this.matrixWorld),index:L,face:null,faceIndex:null,object:this})}}}},updateMorphTargets:function(){var t=this.geometry;if(t.isBufferGeometry){var e=t.morphAttributes,n=Object.keys(e);if(n.length>0){var r=e[n[0]];if(void 0!==r){this.morphTargetInfluences=[],this.morphTargetDictionary={};for(var i=0,a=r.length;i0&&console.error("THREE.Line.updateMorphTargets() does not support THREE.Geometry. Use THREE.BufferGeometry instead.")}}});var Oh=new Dc,Ih=new Dc;an.prototype=Object.assign(Object.create(rn.prototype),{constructor:an,isLineSegments:!0,computeLineDistances:function(){var t=this.geometry;if(t.isBufferGeometry)if(null===t.index){for(var e=t.attributes.position,n=[],r=0,i=e.count;r0){var r=e[n[0]];if(void 0!==r){this.morphTargetInfluences=[],this.morphTargetDictionary={};for(var i=0,a=r.length;i0&&console.error("THREE.Points.updateMorphTargets() does not support THREE.Geometry. Use THREE.BufferGeometry instead.")}}}),un.prototype=Object.assign(Object.create(o.prototype),{constructor:un,clone:function(){return new this.constructor(this.image).copy(this)},isVideoTexture:!0,update:function(){var t=this.image;!1=="requestVideoFrameCallback"in t&&t.readyState>=t.HAVE_CURRENT_DATA&&(this.needsUpdate=!0)}}),hn.prototype=Object.create(o.prototype),hn.prototype.constructor=hn,hn.prototype.isCompressedTexture=!0,dn.prototype=Object.create(o.prototype),dn.prototype.constructor=dn,dn.prototype.isCanvasTexture=!0,pn.prototype=Object.create(o.prototype),pn.prototype.constructor=pn,pn.prototype.isDepthTexture=!0;var Gh=0,Uh=new al,Hh=new h,kh=new Dc;fn.prototype=Object.assign(Object.create(e.prototype),{constructor:fn,isGeometry:!0,applyMatrix4:function(t){for(var e=(new Ac).getNormalMatrix(t),n=0,r=this.vertices.length;n0)for(var d=0;d0&&(this.normalsNeedUpdate=!0)},computeFlatVertexNormals:function(){this.computeFaceNormals();for(var t=0,e=this.faces.length;t0&&(this.normalsNeedUpdate=!0)},computeMorphNormals:function(){for(var t=0,e=this.faces.length;t=0;m--){var v=l[m];this.faces.splice(v,1) -;for(var g=0,y=this.faceVertexUvs.length;g0,_=y.vertexNormals.length>0,w=1!==y.color.r||1!==y.color.g||1!==y.color.b,M=y.vertexColors.length>0,S=0;if(S=t(S,0,0),S=t(S,1,!0),S=t(S,2,!1),S=t(S,3,x),S=t(S,4,b),S=t(S,5,_),S=t(S,6,w),S=t(S,7,M),u.push(S),u.push(y.a,y.b,y.c),u.push(y.materialIndex),x){var T=this.faceVertexUvs[0][g];u.push(r(T[0]),r(T[1]),r(T[2]))}if(b&&u.push(e(y.normal)),_){var E=y.vertexNormals;u.push(e(E[0]),e(E[1]),e(E[2]))}if(w&&u.push(n(y.color)),M){var A=y.vertexColors;u.push(n(A[0]),n(A[1]),n(A[2]))}}return i.data={},i.data.vertices=s,i.data.normals=h,p.length>0&&(i.data.colors=p),m.length>0&&(i.data.uvs=[m]),i.data.faces=u,i},clone:function(){return(new fn).copy(this)},copy:function(t){this.vertices=[],this.colors=[],this.faces=[],this.faceVertexUvs=[[]],this.morphTargets=[],this.morphNormals=[],this.skinWeights=[],this.skinIndices=[],this.lineDistances=[],this.boundingBox=null,this.boundingSphere=null,this.name=t.name;for(var e=t.vertices,n=0,r=e.length;n0&&u(!0),n>0&&u(!1)),h.setIndex(p),h.setAttribute("position",new E(f,3)),h.setAttribute("normal",new E(m,3)),h.setAttribute("uv",new E(v,2)),h}return i(e,t),e}(C),Xh=function(t){function e(e,n,r,i,a,o,s,c){var l;return l=t.call(this)||this,l.type="CylinderGeometry",l.parameters={radiusTop:e,radiusBottom:n,height:r,radialSegments:i,heightSegments:a,openEnded:o,thetaStart:s,thetaLength:c},l.fromBufferGeometry(new qh(e,n,r,i,a,o,s,c)),l.mergeVertices(),l}return i(e,t),e}(fn),Yh=function(t){function e(e,n,r,i,a,o,s){var c;return c=t.call(this,0,e,n,r,i,a,o,s)||this,c.type="ConeGeometry",c.parameters={radius:e,height:n,radialSegments:r,heightSegments:i,openEnded:a,thetaStart:o,thetaLength:s},c}return i(e,t),e}(Xh),Zh=function(t){function e(e,n,r,i,a,o,s){var c;return void 0===e&&(e=1),void 0===n&&(n=1),void 0===r&&(r=8),void 0===i&&(i=1),void 0===a&&(a=!1),void 0===o&&(o=0),void 0===s&&(s=2*Math.PI),c=t.call(this,0,e,n,r,i,a,o,s)||this,c.type="ConeBufferGeometry",c.parameters={radius:e,height:n,radialSegments:r,heightSegments:i,openEnded:a,thetaStart:o,thetaLength:s},c}return i(e,t),e}(qh),Jh=function(t){function e(e,n,r,i){function a(t,e,n,r){for(var i=r+1,a=[],o=0;o<=i;o++){a[o]=[];for(var c=t.clone().lerp(n,o/i),l=e.clone().lerp(n,o/i),u=i-o,h=0;h<=u;h++)a[o][h]=0===h&&o===i?c:c.clone().lerp(l,h/u)}for(var d=0;d.9&&a<.1&&(e<.2&&(m[t+0]+=1),n<.2&&(m[t+2]+=1),r<.2&&(m[t+4]+=1))}}function s(t){f.push(t.x,t.y,t.z)}function c(t,n){var r=3*t;n.x=e[r+0],n.y=e[r+1],n.z=e[r+2]}function l(){for(var t=new Dc,e=new Dc,n=new Dc,r=new Dc,i=new Ec,a=new Ec,o=new Ec,s=0,c=0;s80*n){s=l=t[0],c=u=t[1];for(var f=n;fl&&(l=h),d>u&&(u=d);p=Math.max(l-s,u-c),p=0!==p?1/p:0}return gn(a,o,n,s,c,p),o}},ad={area:function(t){for(var e=t.length,n=0,r=e-1,i=0;iNumber.EPSILON){var d=Math.sqrt(u),p=Math.sqrt(c*c+l*l),f=e.x-s/d,m=e.y+o/d,v=n.x-l/p,g=n.y+c/p,y=((v-f)*l-(g-m)*c)/(o*l-s*c);r=f+o*y-t.x,i=m+s*y-t.y;var x=r*r+i*i;if(x<=2)return new Ec(r,i);a=Math.sqrt(x/2)}else{var b=!1;o>Number.EPSILON?c>Number.EPSILON&&(b=!0):o<-Number.EPSILON?c<-Number.EPSILON&&(b=!0):Math.sign(s)===Math.sign(l)&&(b=!0),b?(r=-s,i=o,a=Math.sqrt(u)):(r=o,i=s,a=Math.sqrt(u/2))}return new Ec(r/a,i/a)}function a(t,e){for(var n=t.length;--n>=0;){var r=n,i=n-1;i<0&&(i=t.length-1);for(var a=0,o=m+2*_;a=0;Mt--){for(var St=Mt/_,Tt=y*Math.cos(St*Math.PI/2),Et=x*Math.sin(St*Math.PI/2)+b,At=0,Lt=z.length;At0)&&f.push(A,L,C),(S!==r-1||l=r)){u.push(c.times[d]);for(var f=0;fa.tracks[v].times[0]&&(m=a.tracks[v].times[0]);for(var g=0;g=r.times[h]){var m=h*c+s,v=m+c-s;d=Bd.arraySlice(r.values,m,v)}else{var g=r.createInterpolant(),y=s,x=c-s;g.evaluate(a),d=Bd.arraySlice(g.resultBuffer,y,x)}if("quaternion"===i){(new Pc).fromArray(d).normalize().conjugate().toArray(d)}for(var b=o.times.length,_=0;_=i)break t;var s=e[1];t=i)break e}a=n,n=0}}for(;n>>1;te;)--a;if(++a,0!==i||a!==r){i>=a&&(a=Math.max(a,1),i=a-1);var o=this.getValueSize();this.times=Bd.arraySlice(n,i,a),this.values=Bd.arraySlice(this.values,i*o,a*o)}return this},validate:function(){var t=!0,e=this.getValueSize();e-Math.floor(e)!=0&&(console.error("THREE.KeyframeTrack: Invalid value size in track.",this),t=!1);var n=this.times,r=this.values,i=n.length;0===i&&(console.error("THREE.KeyframeTrack: Track is empty.",this),t=!1);for(var a=null,o=0;o!==i;o++){var s=n[o];if("number"==typeof s&&isNaN(s)){console.error("THREE.KeyframeTrack: Time is not a valid number.",this,o,s),t=!1;break}if(null!==a&&a>s){console.error("THREE.KeyframeTrack: Out of order keys.",this,o,s,a),t=!1;break}a=s}if(void 0!==r&&Bd.isTypedArray(r))for(var c=0,l=r.length;c!==l;++c){var u=r[c];if(isNaN(u)){console.error("THREE.KeyframeTrack: Value is not a valid number.",this,c,u),t=!1;break}}return t},optimize:function(){for(var t=Bd.arraySlice(this.times),e=Bd.arraySlice(this.values),n=this.getValueSize(),r=2302===this.getInterpolation(),i=t.length-1,a=1,o=1;o0){t[a]=t[i];for(var g=i*n,y=a*n,x=0;x!==n;++x)e[y+x]=e[g+x];++a}return a!==t.length?(this.times=Bd.arraySlice(t,0,a),this.values=Bd.arraySlice(e,0,a*n)):(this.times=t,this.values=e),this},clone:function(){var t=Bd.arraySlice(this.times,0),e=Bd.arraySlice(this.values,0),n=this.constructor,r=new n(this.name,t,e);return r.createInterpolant=this.createInterpolant,r}}),mr.prototype=Object.assign(Object.create(fr.prototype),{constructor:mr,ValueTypeName:"bool",ValueBufferType:Array,DefaultInterpolation:2300,InterpolantFactoryMethodLinear:void 0,InterpolantFactoryMethodSmooth:void 0}),vr.prototype=Object.assign(Object.create(fr.prototype),{constructor:vr,ValueTypeName:"color"}),gr.prototype=Object.assign(Object.create(fr.prototype),{constructor:gr,ValueTypeName:"number"}),yr.prototype=Object.assign(Object.create(ur.prototype),{constructor:yr,interpolate_:function(t,e,n,r){for(var i=this.resultBuffer,a=this.sampleValues,o=this.valueSize,s=(n-e)/(r-e),c=t*o,l=c+o;c!==l;c+=4)Pc.slerpFlat(i,0,a,c-o,a,c,s);return i}}),xr.prototype=Object.assign(Object.create(fr.prototype),{constructor:xr,ValueTypeName:"quaternion",DefaultInterpolation:2301,InterpolantFactoryMethodLinear:function(t){return new yr(this.times,this.values,this.getValueSize(),t)},InterpolantFactoryMethodSmooth:void 0}),br.prototype=Object.assign(Object.create(fr.prototype),{constructor:br,ValueTypeName:"string",ValueBufferType:Array,DefaultInterpolation:2300,InterpolantFactoryMethodLinear:void 0,InterpolantFactoryMethodSmooth:void 0}),_r.prototype=Object.assign(Object.create(fr.prototype),{constructor:_r,ValueTypeName:"vector"}),Object.assign(wr,{parse:function(t){for(var e=[],n=t.tracks,r=1/(t.fps||1),i=0,a=n.length;i!==a;++i)e.push(Sr(n[i]).scale(r));var o=new wr(t.name,t.duration,e,t.blendMode);return o.uuid=t.uuid,o},toJSON:function(t){for(var e=[],n=t.tracks,r={name:t.name,duration:t.duration,tracks:e,uuid:t.uuid,blendMode:t.blendMode},i=0,a=n.length;i!==a;++i)e.push(fr.toJSON(n[i]));return r},CreateFromMorphTargetSequence:function(t,e,n,r){for(var i=e.length,a=[],o=0;o1){var l=c[1],u=r[l];u||(r[l]=u=[]),u.push(s)}}var h=[];for(var d in r)h.push(wr.CreateFromMorphTargetSequence(d,r[d],e,n));return h},parseAnimation:function(t,e){if(!t)return console.error("THREE.AnimationClip: No animation in JSONLoader data."),null;for(var n=function(t,e,n,r,i){if(0!==n.length){var a=[],o=[];Bd.flattenJSON(n,a,o,r),0!==a.length&&i.push(new t(e,a,o))}},r=[],i=t.name||"default",a=t.fps||30,o=t.blendMode,s=t.length||-1,c=t.hierarchy||[],l=0;l0||0===t.search(/^data\:image\/jpeg/);i.format=r?ns:rs,i.needsUpdate=!0,void 0!==e&&e(i)},n,r),i}}),Object.assign(Ir.prototype,{getPoint:function(){return console.warn("THREE.Curve: .getPoint() not implemented."),null},getPointAt:function(t,e){var n=this.getUtoTmapping(t);return this.getPoint(n,e)},getPoints:function(t){void 0===t&&(t=5);for(var e=[],n=0;n<=t;n++)e.push(this.getPoint(n/t));return e},getSpacedPoints:function(t){void 0===t&&(t=5);for(var e=[],n=0;n<=t;n++)e.push(this.getPointAt(n/t));return e},getLength:function(){var t=this.getLengths();return t[t.length-1]},getLengths:function(t){if(void 0===t&&(t=this.arcLengthDivisions),this.cacheArcLengths&&this.cacheArcLengths.length===t+1&&!this.needsUpdate)return this.cacheArcLengths;this.needsUpdate=!1;var e,n=[],r=this.getPoint(0),i=0;n.push(0);for(var a=1;a<=t;a++)e=this.getPoint(a/t),i+=e.distanceTo(r),n.push(i),r=e;return this.cacheArcLengths=n,n},updateArcLengths:function(){this.needsUpdate=!0,this.getLengths()},getUtoTmapping:function(t,e){var n,r=this.getLengths(),i=0,a=r.length;n=e||t*r[a-1];for(var o,s=0,c=a-1;s<=c;)if(i=Math.floor(s+(c-s)/2),(o=r[i]-n)<0)s=i+1;else{if(!(o>0)){c=i;break}c=i-1}if(i=c,r[i]===n)return i/(a-1);var l=r[i];return(i+(n-l)/(r[i+1]-l))/(a-1)},getTangent:function(t,e){var n=t-1e-4,r=t+1e-4;n<0&&(n=0),r>1&&(r=1);var i=this.getPoint(n),a=this.getPoint(r),o=e||(i.isVector2?new Ec:new Dc);return o.copy(a).sub(i).normalize(),o},getTangentAt:function(t,e){var n=this.getUtoTmapping(t);return this.getTangent(n,e)},computeFrenetFrames:function(t,e){for(var n=new Dc,r=[],i=[],a=[],o=new Dc,s=new al,c=0;c<=t;c++){var l=c/t;r[c]=this.getTangentAt(l,new Dc),r[c].normalize()}i[0]=new Dc,a[0]=new Dc;var u=Number.MAX_VALUE,h=Math.abs(r[0].x),d=Math.abs(r[0].y),p=Math.abs(r[0].z);h<=u&&(u=h,n.set(1,0,0)),d<=u&&(u=d,n.set(0,1,0)),p<=u&&n.set(0,0,1),o.crossVectors(r[0],n).normalize(),i[0].crossVectors(r[0],o),a[0].crossVectors(r[0],i[0]);for(var f=1;f<=t;f++){if(i[f]=i[f-1].clone(),a[f]=a[f-1].clone(),o.crossVectors(r[f-1],r[f]),o.length()>Number.EPSILON){o.normalize();var m=Math.acos(Tc.clamp(r[f-1].dot(r[f]),-1,1));i[f].applyMatrix4(s.makeRotationAxis(o,m))}a[f].crossVectors(r[f],i[f])}if(!0===e){var v=Math.acos(Tc.clamp(i[0].dot(i[t]),-1,1));v/=t,r[0].dot(o.crossVectors(i[0],i[t]))>0&&(v=-v);for(var g=1;g<=t;g++)i[g].applyMatrix4(s.makeRotationAxis(r[g],v*g)),a[g].crossVectors(r[g],i[g])}return{tangents:r,normals:i,binormals:a}},clone:function(){return(new this.constructor).copy(this)},copy:function(t){return this.arcLengthDivisions=t.arcLengthDivisions,this},toJSON:function(){var t={metadata:{version:4.5,type:"Curve",generator:"Curve.toJSON"}};return t.arcLengthDivisions=this.arcLengthDivisions,t.type=this.type,t},fromJSON:function(t){return this.arcLengthDivisions=t.arcLengthDivisions,this}}),Nr.prototype=Object.create(Ir.prototype),Nr.prototype.constructor=Nr,Nr.prototype.isEllipseCurve=!0,Nr.prototype.getPoint=function(t,e){for(var n=e||new Ec,r=2*Math.PI,i=this.aEndAngle-this.aStartAngle,a=Math.abs(i)r;)i-=r;i0?0:(Math.floor(Math.abs(o)/i)+1)*i:0===s&&o===i-1&&(o=i-2,s=1);var c,l;this.closed||o>0?c=r[(o-1)%i]:(Ud.subVectors(r[0],r[1]).add(r[0]),c=Ud);var u=r[o%i],h=r[(o+1)%i];if(this.closed||o+2r.length-2?r.length-1:a+1],u=r[a>r.length-3?r.length-1:a+2];return n.set(Gr(o,s.x,c.x,l.x,u.x),Gr(o,s.y,c.y,l.y,u.y)),n},ei.prototype.copy=function(t){Ir.prototype.copy.call(this,t),this.points=[];for(var e=0,n=t.points.length;e=e){var i=n[r]-e,a=this.curves[r],o=a.getLength(),s=0===o?0:1-i/o;return a.getPointAt(s)}r++}return null},getLength:function(){var t=this.getCurveLengths();return t[t.length-1]},updateArcLengths:function(){this.needsUpdate=!0,this.cacheLengths=null,this.getCurveLengths()},getCurveLengths:function(){if(this.cacheLengths&&this.cacheLengths.length===this.curves.length)return this.cacheLengths;for(var t=[],e=0,n=0,r=this.curves.length;n1&&!n[n.length-1].equals(n[0])&&n.push(n[0]),n},copy:function(t){Ir.prototype.copy.call(this,t),this.curves=[];for(var e=0,n=t.curves.length;e0){var l=c.getPoint(0);l.equals(this.currentPoint)||this.lineTo(l.x,l.y)}this.curves.push(c);var u=c.getPoint(1);return this.currentPoint.copy(u),this},copy:function(t){return ni.prototype.copy.call(this,t),this.currentPoint.copy(t.currentPoint),this},toJSON:function(){var t=ni.prototype.toJSON.call(this);return t.currentPoint=this.currentPoint.toArray(),t},fromJSON:function(t){return ni.prototype.fromJSON.call(this,t),this.currentPoint.fromArray(t.currentPoint),this}}),ii.prototype=Object.assign(Object.create(ri.prototype),{constructor:ii,getPointsHoles:function(t){for(var e=[],n=0,r=this.holes.length;n0:r.vertexColors=t.vertexColors),void 0!==t.uniforms)for(var i in t.uniforms){var a=t.uniforms[i];switch(r.uniforms[i]={},a.type){case"t":r.uniforms[i].value=e(a.value);break;case"c":r.uniforms[i].value=(new Yl).setHex(a.value);break;case"v2":r.uniforms[i].value=(new Ec).fromArray(a.value);break;case"v3":r.uniforms[i].value=(new Dc).fromArray(a.value);break;case"v4":r.uniforms[i].value=(new Cc).fromArray(a.value);break;case"m3":r.uniforms[i].value=(new Ac).fromArray(a.value);break;case"m4":r.uniforms[i].value=(new al).fromArray(a.value);break;default:r.uniforms[i].value=a.value}}if(void 0!==t.defines&&(r.defines=t.defines),void 0!==t.vertexShader&&(r.vertexShader=t.vertexShader),void 0!==t.fragmentShader&&(r.fragmentShader=t.fragmentShader),void 0!==t.extensions)for(var o in t.extensions)r.extensions[o]=t.extensions[o];if(void 0!==t.shading&&(r.flatShading=1===t.shading),void 0!==t.size&&(r.size=t.size),void 0!==t.sizeAttenuation&&(r.sizeAttenuation=t.sizeAttenuation),void 0!==t.map&&(r.map=e(t.map)),void 0!==t.matcap&&(r.matcap=e(t.matcap)),void 0!==t.alphaMap&&(r.alphaMap=e(t.alphaMap)),void 0!==t.bumpMap&&(r.bumpMap=e(t.bumpMap)),void 0!==t.bumpScale&&(r.bumpScale=t.bumpScale),void 0!==t.normalMap&&(r.normalMap=e(t.normalMap)),void 0!==t.normalMapType&&(r.normalMapType=t.normalMapType),void 0!==t.normalScale){var s=t.normalScale;!1===Array.isArray(s)&&(s=[s,s]),r.normalScale=(new Ec).fromArray(s)}return void 0!==t.displacementMap&&(r.displacementMap=e(t.displacementMap)),void 0!==t.displacementScale&&(r.displacementScale=t.displacementScale),void 0!==t.displacementBias&&(r.displacementBias=t.displacementBias),void 0!==t.roughnessMap&&(r.roughnessMap=e(t.roughnessMap)),void 0!==t.metalnessMap&&(r.metalnessMap=e(t.metalnessMap)),void 0!==t.emissiveMap&&(r.emissiveMap=e(t.emissiveMap)),void 0!==t.emissiveIntensity&&(r.emissiveIntensity=t.emissiveIntensity),void 0!==t.specularMap&&(r.specularMap=e(t.specularMap)),void 0!==t.envMap&&(r.envMap=e(t.envMap)),void 0!==t.envMapIntensity&&(r.envMapIntensity=t.envMapIntensity),void 0!==t.reflectivity&&(r.reflectivity=t.reflectivity),void 0!==t.refractionRatio&&(r.refractionRatio=t.refractionRatio),void 0!==t.lightMap&&(r.lightMap=e(t.lightMap)),void 0!==t.lightMapIntensity&&(r.lightMapIntensity=t.lightMapIntensity),void 0!==t.aoMap&&(r.aoMap=e(t.aoMap)),void 0!==t.aoMapIntensity&&(r.aoMapIntensity=t.aoMapIntensity),void 0!==t.gradientMap&&(r.gradientMap=e(t.gradientMap)),void 0!==t.clearcoatMap&&(r.clearcoatMap=e(t.clearcoatMap)),void 0!==t.clearcoatRoughnessMap&&(r.clearcoatRoughnessMap=e(t.clearcoatRoughnessMap)),void 0!==t.clearcoatNormalMap&&(r.clearcoatNormalMap=e(t.clearcoatNormalMap)),void 0!==t.clearcoatNormalScale&&(r.clearcoatNormalScale=(new Ec).fromArray(t.clearcoatNormalScale)),void 0!==t.transmission&&(r.transmission=t.transmission),void 0!==t.transmissionMap&&(r.transmissionMap=e(t.transmissionMap)),r},setTextures:function(t){return this.textures=t,this}});var qd={decodeText:function(t){if("undefined"!=typeof TextDecoder)return(new TextDecoder).decode(t);for(var e="",n=0,r=t.length;n0){var s=new Tr(e);i=new Cr(s),i.setCrossOrigin(this.crossOrigin);for(var c=0,l=t.length;c1){for(var g=!1,y=[],x=0,b=d.length;xNumber.EPSILON){if(l<0&&(o=e[a],c=-c,s=e[i],l=-l),t.ys.y)continue;if(t.y===o.y){if(t.x===o.x)return!0}else{var u=l*(t.x-o.x)-c*(t.y-o.y);if(0===u)return!0;if(u<0)continue;r=!r}}else{if(t.y!==o.y)continue;if(s.x<=t.x&&t.x<=o.x||o.x<=t.x&&t.x<=s.x)return!0}}return r})(T.p,d[A].p)&&(_!==A&&y.push({froms:_,tos:A,hole:S}),E?(E=!1,h[A].push(T)):g=!0);E&&h[_].push(T)}y.length>0&&(g||(p=h))}for(var L,R=0,C=d.length;R0){this.source.connect(this.filters[0]);for(var t=1,e=this.filters.length;t0){this.source.disconnect(this.filters[0]);for(var t=1,e=this.filters.length;t0&&this._mixBufferRegionAdditive(n,r,this._addIndex*e,1,e);for(var c=e,l=e+e;c!==l;++c)if(n[c]!==n[c+e]){o.setValue(n,r);break}},saveOriginalState:function(){var t=this.binding,e=this.buffer,n=this.valueSize,r=n*this._origIndex;t.getValue(e,r);for(var i=n,a=r;i!==a;++i)e[i]=e[r+i%n];this._setIdentity(),this.cumulativeWeight=0,this.cumulativeWeightAdditive=0},restoreOriginalState:function(){var t=3*this.valueSize;this.binding.setValue(this.buffer,t)},_setAdditiveIdentityNumeric:function(){for(var t=this._addIndex*this.valueSize,e=t+this.valueSize,n=t;n=.5)for(var a=0;a!==i;++a)t[e+a]=t[n+a]},_slerp:function(t,e,n,r){Pc.slerpFlat(t,e,t,e,t,n,r)},_slerpAdditive:function(t,e,n,r,i){var a=this._workIndex*i;Pc.multiplyQuaternionsFlat(t,a,t,e,t,n),Pc.slerpFlat(t,e,t,e,t,a,r)},_lerp:function(t,e,n,r,i){for(var a=1-r,o=0;o!==i;++o){var s=e+o;t[s]=t[s]*a+t[n+o]*r}},_lerpAdditive:function(t,e,n,r,i){for(var a=0;a!==i;++a){var o=e+a;t[o]=t[o]+t[n+a]*r}}});var fp="\\[\\]\\.:\\/",mp=new RegExp("["+fp+"]","g"),vp="[^"+fp+"]",gp="[^"+fp.replace("\\.","")+"]",yp=/((?:WC+[\/:])*)/.source.replace("WC",vp),xp=/(WCOD+)?/.source.replace("WCOD",gp),bp=/(?:\.(WC+)(?:\[(.+)\])?)?/.source.replace("WC",vp),_p=/\.(WC+)(?:\[(.+)\])?/.source.replace("WC",vp),wp=new RegExp("^"+yp+xp+bp+_p+"$"),Mp=["material","materials","bones"];Object.assign(Ii.prototype,{getValue:function(t,e){this.bind();var n=this._targetGroup.nCachedObjects_,r=this._bindings[n];void 0!==r&&r.getValue(t,e)},setValue:function(t,e){for(var n=this._bindings,r=this._targetGroup.nCachedObjects_,i=n.length;r!==i;++r)n[r].setValue(t,e)},bind:function(){for(var t=this._bindings,e=this._targetGroup.nCachedObjects_,n=t.length;e!==n;++e)t[e].bind()},unbind:function(){for(var t=this._bindings,e=this._targetGroup.nCachedObjects_,n=t.length;e!==n;++e)t[e].unbind()}}),Object.assign(Ni,{Composite:Ii,create:function(t,e,n){return t&&t.isAnimationObjectGroup?new Ni.Composite(t,e,n):new Ni(t,e,n)},sanitizeNodeName:function(t){return t.replace(/\s/g,"_").replace(mp,"")},parseTrackName:function(t){var e=wp.exec(t);if(!e)throw new Error("PropertyBinding: Cannot parse trackName: "+t);var n={nodeName:e[2],objectName:e[3],objectIndex:e[4],propertyName:e[5],propertyIndex:e[6]},r=n.nodeName&&n.nodeName.lastIndexOf(".");if(void 0!==r&&-1!==r){var i=n.nodeName.substring(r+1);-1!==Mp.indexOf(i)&&(n.nodeName=n.nodeName.substring(0,r),n.objectName=i)}if(null===n.propertyName||0===n.propertyName.length)throw new Error("PropertyBinding: can not parse propertyName from trackName: "+t);return n},findNode:function(t,e){if(!e||""===e||"."===e||-1===e||e===t.name||e===t.uuid)return t;if(t.skeleton){var n=t.skeleton.getBoneByName(e);if(void 0!==n)return n}if(t.children){var r=function t(n){for(var r=0;r=i){var u=i++,h=t[u];e[h.uuid]=l,t[l]=h,e[c]=u,t[u]=s;for(var d=0,p=r;d!==p;++d){var f=n[d],m=f[u],v=f[l];f[l]=m,f[u]=v}}}this.nCachedObjects_=i},uncache:function(){for(var t=this._objects,e=this._indicesByUUID,n=this._bindings,r=n.length,i=this.nCachedObjects_,a=t.length,o=0,s=arguments.length;o!==s;++o){var c=arguments[o],l=c.uuid,u=e[l];if(void 0!==u)if(delete e[l],u0&&(e[_.uuid]=u),t[u]=_,t.pop();for(var w=0,M=r;w!==M;++w){var S=n[w];S[u]=S[b],S.pop()}}}this.nCachedObjects_=i},subscribe_:function(t,e){var n=this._bindingsIndicesByPath,r=n[t],i=this._bindings;if(void 0!==r)return i[r];var a=this._paths,o=this._parsedPaths,s=this._objects,c=s.length,l=this.nCachedObjects_,u=new Array(c);r=i.length,n[t]=r,a.push(t),o.push(e),i.push(u);for(var h=l,d=s.length;h!==d;++h){var p=s[h];u[h]=new Ni(p,t,e)}return u},unsubscribe_:function(t){var e=this._bindingsIndicesByPath,n=e[t];if(void 0!==n){var r=this._paths,i=this._parsedPaths,a=this._bindings,o=a.length-1,s=a[o];e[t[o]]=n,a[n]=s,a.pop(),i[n]=i[o],i.pop(),r[n]=r[o],r.pop()}}});var Sp=function(){function t(t,e,n,r){void 0===n&&(n=null),void 0===r&&(r=e.blendMode),this._mixer=t,this._clip=e,this._localRoot=n,this.blendMode=r;for(var i=e.tracks,a=i.length,o=new Array(a),s={endingStart:nc,endingEnd:nc},c=0;c!==a;++c){var l=i[c].createInterpolant(null);o[c]=l,l.settings=s}this._interpolantSettings=s,this._interpolants=o,this._propertyBindings=new Array(a),this._cacheIndex=null,this._byClipCacheIndex=null,this._timeScaleInterpolant=null,this._weightInterpolant=null,this.loop=ec,this._loopCount=-1,this._startTime=null,this.time=0,this.timeScale=1,this._effectiveTimeScale=1,this.weight=1,this._effectiveWeight=1,this.repetitions=1/0,this.paused=!1,this.enabled=!0,this.clampWhenFinished=!1,this.zeroSlopeAtStart=!0,this.zeroSlopeAtEnd=!0}var e=t.prototype;return e.play=function(){return this._mixer._activateAction(this),this},e.stop=function(){return this._mixer._deactivateAction(this),this.reset()},e.reset=function(){return this.paused=!1,this.enabled=!0,this.time=0,this._loopCount=-1,this._startTime=null,this.stopFading().stopWarping()},e.isRunning=function(){return this.enabled&&!this.paused&&0!==this.timeScale&&null===this._startTime&&this._mixer._isActiveAction(this)},e.isScheduled=function(){return this._mixer._isActiveAction(this)},e.startAt=function(t){return this._startTime=t,this},e.setLoop=function(t,e){return this.loop=t,this.repetitions=e,this},e.setEffectiveWeight=function(t){return this.weight=t,this._effectiveWeight=this.enabled?t:0,this.stopFading()},e.getEffectiveWeight=function(){return this._effectiveWeight},e.fadeIn=function(t){return this._scheduleFading(t,0,1)},e.fadeOut=function(t){return this._scheduleFading(t,1,0)},e.crossFadeFrom=function(t,e,n){if(t.fadeOut(e),this.fadeIn(e),n){var r=this._clip.duration,i=t._clip.duration,a=i/r,o=r/i;t.warp(1,a,e),this.warp(o,1,e)}return this},e.crossFadeTo=function(t,e,n){return t.crossFadeFrom(this,e,n)},e.stopFading=function(){var t=this._weightInterpolant;return null!==t&&(this._weightInterpolant=null,this._mixer._takeBackControlInterpolant(t)),this},e.setEffectiveTimeScale=function(t){return this.timeScale=t,this._effectiveTimeScale=this.paused?0:t,this.stopWarping()},e.getEffectiveTimeScale=function(){return this._effectiveTimeScale},e.setDuration=function(t){return this.timeScale=this._clip.duration/t,this.stopWarping()},e.syncWith=function(t){return this.time=t.time,this.timeScale=t.timeScale,this.stopWarping()},e.halt=function(t){return this.warp(this._effectiveTimeScale,0,t)},e.warp=function(t,e,n){var r=this._mixer,i=r.time,a=this.timeScale,o=this._timeScaleInterpolant;null===o&&(o=r._lendControlInterpolant(),this._timeScaleInterpolant=o);var s=o.parameterPositions,c=o.sampleValues;return s[0]=i,s[1]=i+n,c[0]=t/a,c[1]=e/a,this},e.stopWarping=function(){var t=this._timeScaleInterpolant;return null!==t&&(this._timeScaleInterpolant=null,this._mixer._takeBackControlInterpolant(t)),this},e.getMixer=function(){return this._mixer},e.getClip=function(){return this._clip},e.getRoot=function(){return this._localRoot||this._mixer._root},e._update=function(t,e,n,r){if(!this.enabled)return void this._updateWeight(t);var i=this._startTime;if(null!==i){var a=(t-i)*n;if(a<0||0===n)return;this._startTime=null,e=n*a}e*=this._updateTimeScale(t);var o=this._updateTime(e),s=this._updateWeight(t);if(s>0){var c=this._interpolants,l=this._propertyBindings;switch(this.blendMode){case 2501:for(var u=0,h=c.length;u!==h;++u)c[u].evaluate(o),l[u].accumulateAdditive(s);break;case rc:default:for(var d=0,p=c.length;d!==p;++d)c[d].evaluate(o),l[d].accumulate(r,s)}}},e._updateWeight=function(t){var e=0;if(this.enabled){e=this.weight;var n=this._weightInterpolant;if(null!==n){var r=n.evaluate(t)[0];e*=r,t>n.parameterPositions[1]&&(this.stopFading(),0===r&&(this.enabled=!1))}}return this._effectiveWeight=e,e},e._updateTimeScale=function(t){var e=0;if(!this.paused){e=this.timeScale;var n=this._timeScaleInterpolant;if(null!==n){e*=n.evaluate(t)[0],t>n.parameterPositions[1]&&(this.stopWarping(),0===e?this.paused=!0:this.timeScale=e)}}return this._effectiveTimeScale=e,e},e._updateTime=function(t){var e=this._clip.duration,n=this.loop,r=this.time+t,i=this._loopCount,a=2202===n;if(0===t)return-1===i?r:a&&1==(1&i)?e-r:r;if(2200===n){-1===i&&(this._loopCount=0,this._setEndings(!0,!0,!1));t:{if(r>=e)r=e;else{if(!(r<0)){this.time=r;break t}r=0}this.clampWhenFinished?this.paused=!0:this.enabled=!1,this.time=r,this._mixer.dispatchEvent({type:"finished",action:this,direction:t<0?-1:1})}}else{if(-1===i&&(t>=0?(i=0,this._setEndings(!0,0===this.repetitions,a)):this._setEndings(0===this.repetitions,!0,a)),r>=e||r<0){var o=Math.floor(r/e);r-=e*o,i+=Math.abs(o);var s=this.repetitions-i;if(s<=0)this.clampWhenFinished?this.paused=!0:this.enabled=!1,r=t>0?e:0,this.time=r,this._mixer.dispatchEvent({type:"finished",action:this,direction:t>0?1:-1});else{if(1===s){var c=t<0;this._setEndings(c,!c,a)}else this._setEndings(!1,!1,a);this._loopCount=i,this.time=r,this._mixer.dispatchEvent({type:"loop",action:this,loopDelta:o})}}else this.time=r;if(a&&1==(1&i))return e-r}return r},e._setEndings=function(t,e,n){var r=this._interpolantSettings;n?(r.endingStart=2401,r.endingEnd=2401):(r.endingStart=t?this.zeroSlopeAtStart?2401:nc:2402,r.endingEnd=e?this.zeroSlopeAtEnd?2401:nc:2402)},e._scheduleFading=function(t,e,n){var r=this._mixer,i=r.time,a=this._weightInterpolant;null===a&&(a=r._lendControlInterpolant(),this._weightInterpolant=a);var o=a.parameterPositions,s=a.sampleValues;return o[0]=i,s[0]=e,o[1]=i+t,s[1]=n,this},t}();zi.prototype=Object.assign(Object.create(e.prototype),{constructor:zi,_bindAction:function(t,e){var n=t._localRoot||this._root,r=t._clip.tracks,i=r.length,a=t._propertyBindings,o=t._interpolants,s=n.uuid,c=this._bindingsByRootAndName,l=c[s];void 0===l&&(l={},c[s]=l);for(var u=0;u!==i;++u){var h=r[u],d=h.name,p=l[d];if(void 0!==p)a[u]=p;else{if(void 0!==(p=a[u])){null===p._cacheIndex&&(++p.referenceCount,this._addInactiveBinding(p,s,d));continue}var f=e&&e._propertyBindings[u].binding.parsedPath;p=new Oi(Ni.create(n,d,f),h.ValueTypeName,h.getValueSize()),++p.referenceCount,this._addInactiveBinding(p,s,d),a[u]=p}o[u].resultBuffer=p.buffer}},_activateAction:function(t){if(!this._isActiveAction(t)){if(null===t._cacheIndex){var e=(t._localRoot||this._root).uuid,n=t._clip.uuid,r=this._actionsByClip[n];this._bindAction(t,r&&r.knownActions[0]),this._addInactiveAction(t,n,e)}for(var i=t._propertyBindings,a=0,o=i.length;a!==o;++a){var s=i[a];0==s.useCount++&&(this._lendBinding(s),s.saveOriginalState())}this._lendAction(t)}},_deactivateAction:function(t){if(this._isActiveAction(t)){for(var e=t._propertyBindings,n=0,r=e.length;n!==r;++n){var i=e[n];0==--i.useCount&&(i.restoreOriginalState(),this._takeBackBinding(i))}this._takeBackAction(t)}},_initMemoryManager:function(){this._actions=[],this._nActiveActions=0,this._actionsByClip={},this._bindings=[],this._nActiveBindings=0,this._bindingsByRootAndName={},this._controlInterpolants=[],this._nActiveControlInterpolants=0;var t=this;this.stats={actions:{get total(){return t._actions.length},get inUse(){return t._nActiveActions}},bindings:{get total(){return t._bindings.length},get inUse(){return t._nActiveBindings}},controlInterpolants:{get total(){return t._controlInterpolants.length},get inUse(){return t._nActiveControlInterpolants}}}},_isActiveAction:function(t){var e=t._cacheIndex;return null!==e&&e=0;--n)t[n].stop();return this},update:function(t){t*=this.timeScale;for(var e=this._actions,n=this._nActiveActions,r=this.time+=t,i=Math.sign(t),a=this._accuIndex^=1,o=0;o!==n;++o){e[o]._update(r,t,i,a)}for(var s=this._bindings,c=this._nActiveBindings,l=0;l!==c;++l)s[l].apply(a);return this},setTime:function(t){this.time=0;for(var e=0;ethis.max.x||t.ythis.max.y)},e.containsBox=function(t){return this.min.x<=t.min.x&&t.max.x<=this.max.x&&this.min.y<=t.min.y&&t.max.y<=this.max.y},e.getParameter=function(t,e){return void 0===e&&(console.warn("THREE.Box2: .getParameter() target is now required"),e=new Ec),e.set((t.x-this.min.x)/(this.max.x-this.min.x),(t.y-this.min.y)/(this.max.y-this.min.y))},e.intersectsBox=function(t){return!(t.max.xthis.max.x||t.max.ythis.max.y)},e.clampPoint=function(t,e){return void 0===e&&(console.warn("THREE.Box2: .clampPoint() target is now required"),e=new Ec),e.copy(t).clamp(this.min,this.max)},e.distanceToPoint=function(t){return Lp.copy(t).clamp(this.min,this.max).sub(t).length()},e.intersect=function(t){return this.min.max(t.min),this.max.min(t.max),this},e.union=function(t){return this.min.min(t.min),this.max.max(t.max),this},e.translate=function(t){return this.min.add(t),this.max.add(t),this},e.equals=function(t){return t.min.equals(this.min)&&t.max.equals(this.max)},t}(),Cp=new Dc,Pp=new Dc,Dp=function(){function t(t,e){this.start=void 0!==t?t:new Dc,this.end=void 0!==e?e:new Dc}var e=t.prototype;return e.set=function(t,e){return this.start.copy(t),this.end.copy(e),this},e.clone=function(){return(new this.constructor).copy(this)},e.copy=function(t){return this.start.copy(t.start),this.end.copy(t.end),this},e.getCenter=function(t){return void 0===t&&(console.warn("THREE.Line3: .getCenter() target is now required"),t=new Dc),t.addVectors(this.start,this.end).multiplyScalar(.5)},e.delta=function(t){return void 0===t&&(console.warn("THREE.Line3: .delta() target is now required"),t=new Dc),t.subVectors(this.end,this.start)},e.distanceSq=function(){return this.start.distanceToSquared(this.end)},e.distance=function(){return this.start.distanceTo(this.end)},e.at=function(t,e){return void 0===e&&(console.warn("THREE.Line3: .at() target is now required"),e=new Dc),this.delta(e).multiplyScalar(t).add(this.start)},e.closestPointToPointParameter=function(t,e){Cp.subVectors(t,this.start),Pp.subVectors(this.end,this.start);var n=Pp.dot(Pp),r=Pp.dot(Cp),i=r/n;return e&&(i=Tc.clamp(i,0,1)),i},e.closestPointToPoint=function(t,e,n){var r=this.closestPointToPointParameter(t,e);return void 0===n&&(console.warn("THREE.Line3: .closestPointToPoint() target is now required"),n=new Dc),this.delta(n).multiplyScalar(r).add(this.start)},e.applyMatrix4=function(t){return this.start.applyMatrix4(t),this.end.applyMatrix4(t),this},e.equals=function(t){return t.start.equals(this.start)&&t.end.equals(this.end)},t}();Vi.prototype=Object.create(h.prototype),Vi.prototype.constructor=Vi,Vi.prototype.isImmediateRenderObject=!0;var Op,Ip,Np,Bp=new Dc,zp=function(t){function e(e,n){var r;r=t.call(this)||this,r.light=e,r.light.updateMatrixWorld(),r.matrix=e.matrixWorld,r.matrixAutoUpdate=!1,r.color=n;for(var i=new C,a=[0,0,0,0,0,1,0,0,0,1,0,1,0,0,0,-1,0,1,0,0,0,0,1,1,0,0,0,0,-1,1],o=0,s=1;o<32;o++,s++){var c=o/32*Math.PI*2,l=s/32*Math.PI*2;a.push(Math.cos(c),Math.sin(c),1,Math.cos(l),Math.sin(l),1)}i.setAttribute("position",new E(a,3));var u=new nn({fog:!1,toneMapped:!1});return r.cone=new an(i,u),r.add(r.cone),r.update(),r}i(e,t);var n=e.prototype;return n.dispose=function(){this.cone.geometry.dispose(),this.cone.material.dispose()},n.update=function(){this.light.updateMatrixWorld();var t=this.light.distance?this.light.distance:1e3,e=t*Math.tan(this.light.angle);this.cone.scale.set(e,e,t),Bp.setFromMatrixPosition(this.light.target.matrixWorld),this.cone.lookAt(Bp),void 0!==this.color?this.cone.material.color.set(this.color):this.cone.material.color.copy(this.light.color)},e}(h),Fp=new Dc,Gp=new al,Up=new al,Hp=function(t){function e(e){for(var n,r=Wi(e),i=new C,a=[],o=[],s=new Yl(0,0,1),c=new Yl(0,1,0),l=0;l.99999)this.quaternion.set(0,0,0,1);else if(t.y<-.99999)this.quaternion.set(1,0,0,0);else{sf.set(t.z,0,-t.x).normalize();var e=Math.acos(t.y);this.quaternion.setFromAxisAngle(sf,e)}},n.setLength=function(t,e,n){void 0===e&&(e=.2*t),void 0===n&&(n=.2*e),this.line.scale.set(1,Math.max(1e-4,t-e),1),this.line.updateMatrix(),this.cone.scale.set(n,e,n),this.cone.position.y=t,this.cone.updateMatrix()},n.setColor=function(t){this.line.material.color.set(t),this.cone.material.color.set(t)},n.copy=function(e){return t.prototype.copy.call(this,e,!1),this.line.copy(e.line),this.cone.copy(e.cone),this},e}(h),lf=function(t){function e(e){var n;void 0===e&&(e=1);var r=[0,0,0,e,0,0,0,0,0,0,e,0,0,0,0,0,0,e],i=[1,0,0,1,.6,0,0,1,0,.6,1,0,0,0,1,0,.6,1],a=new C;a.setAttribute("position",new E(r,3)),a.setAttribute("color",new E(i,3));var o=new nn({vertexColors:!0,toneMapped:!1});return n=t.call(this,a,o)||this,n.type="AxesHelper",n}return i(e,t),e}(an),uf=new Float32Array(1),hf=new Int32Array(uf.buffer),df={toHalfFloat:function(t){uf[0]=t;var e=hf[0],n=e>>16&32768,r=e>>12&2047,i=e>>23&255;return i<103?n:i>142?(n|=31744,n|=(255==i?0:1)&&8388607&e):i<113?(r|=2048,n|=(r>>114-i)+(r>>113-i&1)):(n|=i-112<<10|r>>1,n+=1&r)}},pf=4,ff=8,mf=Math.pow(2,ff),vf=[.125,.215,.35,.446,.526,.582],gf=ff-pf+1+vf.length,yf=20,xf=(Np={},Np[ic]=0,Np[ac]=1,Np[sc]=2,Np[lc]=3,Np[uc]=4,Np[hc]=5,Np[oc]=6,Np),bf=new di,_f=function(){for(var t=[],e=[],n=[],r=ff,i=0;iff-pf?o=vf[i-ff+pf-1]:0==i&&(o=0),n.push(o);for(var s=1/(a-1),c=-s/2,l=1+s/2,u=[c,c,l,c,l,l,c,c,l,l,c,l],h=new Float32Array(108),d=new Float32Array(72),p=new Float32Array(36),f=0;f<6;f++){var m=f%3*2/3-1,v=f>2?0:-1,y=[m,v,0,m+2/3,v,0,m+2/3,v+1,0,m,v,0,m+2/3,v+1,0,m,v+1,0];h.set(y,18*f),d.set(u,12*f);var x=[f,f,f,f,f,f];p.set(x,6*f)}var b=new C;b.setAttribute("position",new g(h,3)),b.setAttribute("uv",new g(d,2)),b.setAttribute("faceIndex",new g(p,1)),t.push(b),r>pf&&r--}return{_lodPlanes:t,_sizeLods:e,_sigmas:n}}(),wf=_f._lodPlanes,Mf=_f._sizeLods,Sf=_f._sigmas,Tf=null,Ef=(1+Math.sqrt(5))/2,Af=1/Ef,Lf=[new Dc(1,1,1),new Dc(-1,1,1),new Dc(1,1,-1),new Dc(-1,1,-1),new Dc(0,Ef,Af),new Dc(0,Ef,-Af),new Dc(Af,0,Ef),new Dc(-Af,0,Ef),new Dc(Ef,Af,0),new Dc(-Ef,Af,0)],Rf=function(){function t(t){this._renderer=t,this._pingPongRenderTarget=null,this._blurMaterial=Zi(yf),this._equirectShader=null,this._cubemapShader=null,this._compileMaterial(this._blurMaterial)}var e=t.prototype;return e.fromScene=function(t,e,n,r){void 0===e&&(e=0),void 0===n&&(n=.1),void 0===r&&(r=100),Tf=this._renderer.getRenderTarget();var i=this._allocateTargets();return this._sceneToCubeUV(t,n,r,i),e>0&&this._blur(i,0,0,e),this._applyPMREM(i),this._cleanup(i),i},e.fromEquirectangular=function(t){return this._fromTexture(t)},e.fromCubemap=function(t){return this._fromTexture(t)},e.compileCubemapShader=function(){null===this._cubemapShader&&(this._cubemapShader=Qi(),this._compileMaterial(this._cubemapShader))},e.compileEquirectangularShader=function(){null===this._equirectShader&&(this._equirectShader=Ji(),this._compileMaterial(this._equirectShader))},e.dispose=function(){this._blurMaterial.dispose(),null!==this._cubemapShader&&this._cubemapShader.dispose(),null!==this._equirectShader&&this._equirectShader.dispose();for(var t=0;t2?mf:0,mf,mf),s.setRenderTarget(r),s.render(t,i)}s.toneMapping=l,s.outputEncoding=c,s.setClearColor(u,h)},e._textureToCubeUV=function(t,e){var n=this._renderer;t.isCubeTexture?null==this._cubemapShader&&(this._cubemapShader=Qi()):null==this._equirectShader&&(this._equirectShader=Ji());var r=t.isCubeTexture?this._cubemapShader:this._equirectShader,i=new P(wf[0],r),a=r.uniforms;a.envMap.value=t,t.isCubeTexture||a.texelSize.value.set(1/t.image.width,1/t.image.height),a.inputEncoding.value=xf[t.encoding],a.outputEncoding.value=xf[e.texture.encoding],Yi(e,0,0,3*mf,2*mf),n.setRenderTarget(e),n.render(i,bf)},e._applyPMREM=function(t){var e=this._renderer,n=e.autoClear;e.autoClear=!1;for(var r=1;ryf&&console.warn("sigmaRadians, "+i+", is too large and will clip, as it requested "+f+" samples when the maximum is set to "+yf);for(var m=[],v=0,g=0;gff-pf?r-ff+pf:0),3*_,2*_),s.setRenderTarget(e),s.render(l,bf)},t}();Ir.create=function(t,e){return console.log("THREE.Curve.create() has been deprecated"),t.prototype=Object.create(Ir.prototype),t.prototype.constructor=t,t.prototype.getPoint=e,t},Object.assign(ni.prototype,{createPointsGeometry:function(t){console.warn("THREE.CurvePath: .createPointsGeometry() has been removed. Use new THREE.Geometry().setFromPoints( points ) instead.");var e=this.getPoints(t);return this.createGeometry(e)},createSpacedPointsGeometry:function(t){console.warn("THREE.CurvePath: .createSpacedPointsGeometry() has been removed. Use new THREE.Geometry().setFromPoints( points ) instead.");var e=this.getSpacedPoints(t);return this.createGeometry(e)},createGeometry:function(t){console.warn("THREE.CurvePath: .createGeometry() has been removed. Use new THREE.Geometry().setFromPoints( points ) instead.");for(var e=new fn,n=0,r=t.length;n { - - var taskConfig = { - attributeIDs: this.defaultAttributeIDs, - attributeTypes: this.defaultAttributeTypes, - useUniqueIDs: false - }; - - this.decodeGeometry( buffer, taskConfig ) - .then( onLoad ) - .catch( onError ); - - }, onProgress, onError ); - - }, - - /** @deprecated Kept for backward-compatibility with previous DRACOLoader versions. */ - decodeDracoFile: function ( buffer, callback, attributeIDs, attributeTypes ) { - - var taskConfig = { - attributeIDs: attributeIDs || this.defaultAttributeIDs, - attributeTypes: attributeTypes || this.defaultAttributeTypes, - useUniqueIDs: !! attributeIDs - }; - - this.decodeGeometry( buffer, taskConfig ).then( callback ); - - }, - - decodeGeometry: function ( buffer, taskConfig ) { - - // TODO: For backward-compatibility, support 'attributeTypes' objects containing - // references (rather than names) to typed array constructors. These must be - // serialized before sending them to the worker. - for ( var attribute in taskConfig.attributeTypes ) { - - var type = taskConfig.attributeTypes[ attribute ]; - - if ( type.BYTES_PER_ELEMENT !== undefined ) { - - taskConfig.attributeTypes[ attribute ] = type.name; - - } - - } - - // - - var taskKey = JSON.stringify( taskConfig ); - - // Check for an existing task using this buffer. A transferred buffer cannot be transferred - // again from this thread. - if ( THREE.DRACOLoader.taskCache.has( buffer ) ) { - - var cachedTask = THREE.DRACOLoader.taskCache.get( buffer ); - - if ( cachedTask.key === taskKey ) { - - return cachedTask.promise; - - } else if ( buffer.byteLength === 0 ) { - - // Technically, it would be possible to wait for the previous task to complete, - // transfer the buffer back, and decode again with the second configuration. That - // is complex, and I don't know of any reason to decode a Draco buffer twice in - // different ways, so this is left unimplemented. - throw new Error( - - 'THREE.DRACOLoader: Unable to re-decode a buffer with different ' + - 'settings. Buffer has already been transferred.' - - ); - - } - - } - - // - - var worker; - var taskID = this.workerNextTaskID ++; - var taskCost = buffer.byteLength; - - // Obtain a worker and assign a task, and construct a geometry instance - // when the task completes. - var geometryPending = this._getWorker( taskID, taskCost ) - .then( ( _worker ) => { - - worker = _worker; - - return new Promise( ( resolve, reject ) => { - - worker._callbacks[ taskID ] = { resolve, reject }; - - worker.postMessage( { type: 'decode', id: taskID, taskConfig, buffer }, [ buffer ] ); - - // this.debug(); - - } ); - - } ) - .then( ( message ) => this._createGeometry( message.geometry ) ); - - // Remove task from the task list. - // Note: replaced '.finally()' with '.catch().then()' block - iOS 11 support (#19416) - geometryPending - .catch( () => true ) - .then( () => { - - if ( worker && taskID ) { - - this._releaseTask( worker, taskID ); - - // this.debug(); - - } - - } ); - - // Cache the task result. - THREE.DRACOLoader.taskCache.set( buffer, { - - key: taskKey, - promise: geometryPending - - } ); - - return geometryPending; - - }, - - _createGeometry: function ( geometryData ) { - - var geometry = new THREE.BufferGeometry(); - - if ( geometryData.index ) { - - geometry.setIndex( new THREE.BufferAttribute( geometryData.index.array, 1 ) ); - - } - - for ( var i = 0; i < geometryData.attributes.length; i ++ ) { - - var attribute = geometryData.attributes[ i ]; - var name = attribute.name; - var array = attribute.array; - var itemSize = attribute.itemSize; - - geometry.setAttribute( name, new THREE.BufferAttribute( array, itemSize ) ); - - } - - return geometry; - - }, - - _loadLibrary: function ( url, responseType ) { - - var loader = new THREE.FileLoader( this.manager ); - loader.setPath( this.decoderPath ); - loader.setResponseType( responseType ); - loader.setWithCredentials( this.withCredentials ); - - return new Promise( ( resolve, reject ) => { - - loader.load( url, resolve, undefined, reject ); - - } ); - - }, - - preload: function () { - - this._initDecoder(); - - return this; - - }, - - _initDecoder: function () { - - if ( this.decoderPending ) return this.decoderPending; - - var useJS = typeof WebAssembly !== 'object' || this.decoderConfig.type === 'js'; - var librariesPending = []; - - if ( useJS ) { - - librariesPending.push( this._loadLibrary( 'draco_decoder.js', 'text' ) ); - - } else { - - librariesPending.push( this._loadLibrary( 'draco_wasm_wrapper.js', 'text' ) ); - librariesPending.push( this._loadLibrary( 'draco_decoder.wasm', 'arraybuffer' ) ); - - } - - this.decoderPending = Promise.all( librariesPending ) - .then( ( libraries ) => { - - var jsContent = libraries[ 0 ]; - - if ( ! useJS ) { - - this.decoderConfig.wasmBinary = libraries[ 1 ]; - - } - - var fn = THREE.DRACOLoader.DRACOWorker.toString(); - - var body = [ - '/* draco decoder */', - jsContent, - '', - '/* worker */', - fn.substring( fn.indexOf( '{' ) + 1, fn.lastIndexOf( '}' ) ) - ].join( '\n' ); - - this.workerSourceURL = URL.createObjectURL( new Blob( [ body ] ) ); - - } ); - - return this.decoderPending; - - }, - - _getWorker: function ( taskID, taskCost ) { - - return this._initDecoder().then( () => { - - if ( this.workerPool.length < this.workerLimit ) { - - var worker = new Worker( this.workerSourceURL ); - - worker._callbacks = {}; - worker._taskCosts = {}; - worker._taskLoad = 0; - - worker.postMessage( { type: 'init', decoderConfig: this.decoderConfig } ); - - worker.onmessage = function ( e ) { - - var message = e.data; - - switch ( message.type ) { - - case 'decode': - worker._callbacks[ message.id ].resolve( message ); - break; - - case 'error': - worker._callbacks[ message.id ].reject( message ); - break; - - default: - console.error( 'THREE.DRACOLoader: Unexpected message, "' + message.type + '"' ); - - } - - }; - - this.workerPool.push( worker ); - - } else { - - this.workerPool.sort( function ( a, b ) { - - return a._taskLoad > b._taskLoad ? - 1 : 1; - - } ); - - } - - var worker = this.workerPool[ this.workerPool.length - 1 ]; - worker._taskCosts[ taskID ] = taskCost; - worker._taskLoad += taskCost; - return worker; - - } ); - - }, - - _releaseTask: function ( worker, taskID ) { - - worker._taskLoad -= worker._taskCosts[ taskID ]; - delete worker._callbacks[ taskID ]; - delete worker._taskCosts[ taskID ]; - - }, - - debug: function () { - - console.log( 'Task load: ', this.workerPool.map( ( worker ) => worker._taskLoad ) ); - - }, - - dispose: function () { - - for ( var i = 0; i < this.workerPool.length; ++ i ) { - - this.workerPool[ i ].terminate(); - - } - - this.workerPool.length = 0; - - return this; - - } - -} ); - -/* WEB WORKER */ - -THREE.DRACOLoader.DRACOWorker = function () { - - var decoderConfig; - var decoderPending; - - onmessage = function ( e ) { - - var message = e.data; - - switch ( message.type ) { - - case 'init': - decoderConfig = message.decoderConfig; - decoderPending = new Promise( function ( resolve/*, reject*/ ) { - - decoderConfig.onModuleLoaded = function ( draco ) { - - // Module is Promise-like. Wrap before resolving to avoid loop. - resolve( { draco: draco } ); - - }; - - DracoDecoderModule( decoderConfig ); // eslint-disable-line no-undef - - } ); - break; - - case 'decode': - var buffer = message.buffer; - var taskConfig = message.taskConfig; - decoderPending.then( ( module ) => { - - var draco = module.draco; - var decoder = new draco.Decoder(); - var decoderBuffer = new draco.DecoderBuffer(); - decoderBuffer.Init( new Int8Array( buffer ), buffer.byteLength ); - - try { - - var geometry = decodeGeometry( draco, decoder, decoderBuffer, taskConfig ); - - var buffers = geometry.attributes.map( ( attr ) => attr.array.buffer ); - - if ( geometry.index ) buffers.push( geometry.index.array.buffer ); - - self.postMessage( { type: 'decode', id: message.id, geometry }, buffers ); - - } catch ( error ) { - - console.error( error ); - - self.postMessage( { type: 'error', id: message.id, error: error.message } ); - - } finally { - - draco.destroy( decoderBuffer ); - draco.destroy( decoder ); - - } - - } ); - break; - - } - - }; - - function decodeGeometry( draco, decoder, decoderBuffer, taskConfig ) { - - var attributeIDs = taskConfig.attributeIDs; - var attributeTypes = taskConfig.attributeTypes; - - var dracoGeometry; - var decodingStatus; - - var geometryType = decoder.GetEncodedGeometryType( decoderBuffer ); - - if ( geometryType === draco.TRIANGULAR_MESH ) { - - dracoGeometry = new draco.Mesh(); - decodingStatus = decoder.DecodeBufferToMesh( decoderBuffer, dracoGeometry ); - - } else if ( geometryType === draco.POINT_CLOUD ) { - - dracoGeometry = new draco.PointCloud(); - decodingStatus = decoder.DecodeBufferToPointCloud( decoderBuffer, dracoGeometry ); - - } else { - - throw new Error( 'THREE.DRACOLoader: Unexpected geometry type.' ); - - } - - if ( ! decodingStatus.ok() || dracoGeometry.ptr === 0 ) { - - throw new Error( 'THREE.DRACOLoader: Decoding failed: ' + decodingStatus.error_msg() ); - - } - - var geometry = { index: null, attributes: [] }; - - // Gather all vertex attributes. - for ( var attributeName in attributeIDs ) { - - var attributeType = self[ attributeTypes[ attributeName ] ]; - - var attribute; - var attributeID; - - // A Draco file may be created with default vertex attributes, whose attribute IDs - // are mapped 1:1 from their semantic name (POSITION, NORMAL, ...). Alternatively, - // a Draco file may contain a custom set of attributes, identified by known unique - // IDs. glTF files always do the latter, and `.drc` files typically do the former. - if ( taskConfig.useUniqueIDs ) { - - attributeID = attributeIDs[ attributeName ]; - attribute = decoder.GetAttributeByUniqueId( dracoGeometry, attributeID ); - - } else { - - attributeID = decoder.GetAttributeId( dracoGeometry, draco[ attributeIDs[ attributeName ] ] ); - - if ( attributeID === - 1 ) continue; - - attribute = decoder.GetAttribute( dracoGeometry, attributeID ); - - } - - geometry.attributes.push( decodeAttribute( draco, decoder, dracoGeometry, attributeName, attributeType, attribute ) ); - - } - - // Add index. - if ( geometryType === draco.TRIANGULAR_MESH ) { - - geometry.index = decodeIndex( draco, decoder, dracoGeometry ); - - } - - draco.destroy( dracoGeometry ); - - return geometry; - - } - - function decodeIndex( draco, decoder, dracoGeometry ) { - - var numFaces = dracoGeometry.num_faces(); - var numIndices = numFaces * 3; - var byteLength = numIndices * 4; - - var ptr = draco._malloc( byteLength ); - decoder.GetTrianglesUInt32Array( dracoGeometry, byteLength, ptr ); - var index = new Uint32Array( draco.HEAPF32.buffer, ptr, numIndices ).slice(); - draco._free( ptr ); - - return { array: index, itemSize: 1 }; - - } - - function decodeAttribute( draco, decoder, dracoGeometry, attributeName, attributeType, attribute ) { - - var numComponents = attribute.num_components(); - var numPoints = dracoGeometry.num_points(); - var numValues = numPoints * numComponents; - var byteLength = numValues * attributeType.BYTES_PER_ELEMENT; - var dataType = getDracoDataType( draco, attributeType ); - - var ptr = draco._malloc( byteLength ); - decoder.GetAttributeDataArrayForAllPoints( dracoGeometry, attribute, dataType, byteLength, ptr ); - var array = new attributeType( draco.HEAPF32.buffer, ptr, numValues ).slice(); - draco._free( ptr ); - - return { - name: attributeName, - array: array, - itemSize: numComponents - }; - - } - - function getDracoDataType( draco, attributeType ) { - - switch ( attributeType ) { - - case Float32Array: return draco.DT_FLOAT32; - case Int8Array: return draco.DT_INT8; - case Int16Array: return draco.DT_INT16; - case Int32Array: return draco.DT_INT32; - case Uint8Array: return draco.DT_UINT8; - case Uint16Array: return draco.DT_UINT16; - case Uint32Array: return draco.DT_UINT32; - - } - - } - -}; - -THREE.DRACOLoader.taskCache = new WeakMap(); - -/** Deprecated static methods */ - -/** @deprecated */ -THREE.DRACOLoader.setDecoderPath = function () { - - console.warn( 'THREE.DRACOLoader: The .setDecoderPath() method has been removed. Use instance methods.' ); - -}; - -/** @deprecated */ -THREE.DRACOLoader.setDecoderConfig = function () { - - console.warn( 'THREE.DRACOLoader: The .setDecoderConfig() method has been removed. Use instance methods.' ); - -}; - -/** @deprecated */ -THREE.DRACOLoader.releaseDecoderModule = function () { - - console.warn( 'THREE.DRACOLoader: The .releaseDecoderModule() method has been removed. Use instance methods.' ); - -}; - -/** @deprecated */ -THREE.DRACOLoader.getDecoderModule = function () { - - console.warn( 'THREE.DRACOLoader: The .getDecoderModule() method has been removed. Use instance methods.' ); - -}; - +},{"an-array":1,"dtype":14,"is-buffer":20}],36:[function(_dereq_,module,exports){ +!function(t,e){"object"==typeof exports&&"undefined"!=typeof module?e(exports):"function"==typeof define&&define.amd?define(["exports"],e):(t=t||self,e(t.THREE={}))}(this,function(t){"use strict";function e(){}function n(t,e){this.x=t||0,this.y=e||0}function r(){this.elements=[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1],arguments.length>0&&console.error("THREE.Matrix4: the constructor no longer reads arguments. use .set() instead.")}function i(t,e,n,r){this._x=t||0,this._y=e||0,this._z=n||0,this._w=void 0!==r?r:1}function a(t,e,n){this.x=t||0,this.y=e||0,this.z=n||0}function o(){this.elements=[1,0,0,0,1,0,0,0,1],arguments.length>0&&console.error("THREE.Matrix3: the constructor no longer reads arguments. use .set() instead.")}function s(t,e,r,i,a,c,h,l,u,p){Object.defineProperty(this,"id",{value:Nc++}),this.uuid=Oc.generateUUID(),this.name="",this.image=void 0!==t?t:s.DEFAULT_IMAGE,this.mipmaps=[],this.mapping=void 0!==e?e:s.DEFAULT_MAPPING,this.wrapS=void 0!==r?r:ys,this.wrapT=void 0!==i?i:ys,this.magFilter=void 0!==a?a:Ms,this.minFilter=void 0!==c?c:Ts,this.anisotropy=void 0!==u?u:1,this.format=void 0!==h?h:Fs,this.type=void 0!==l?l:Ss,this.offset=new n(0,0),this.repeat=new n(1,1),this.center=new n(0,0),this.rotation=0,this.matrixAutoUpdate=!0,this.matrix=new o,this.generateMipmaps=!0,this.premultiplyAlpha=!1,this.flipY=!0,this.unpackAlignment=4,this.encoding=void 0!==p?p:wc,this.version=0,this.onUpdate=null}function c(t,e,n,r){this.x=t||0,this.y=e||0,this.z=n||0,this.w=void 0!==r?r:1}function h(t,e,n){this.width=t,this.height=e,this.scissor=new c(0,0,t,e),this.scissorTest=!1,this.viewport=new c(0,0,t,e),n=n||{},this.texture=new s(void 0,void 0,n.wrapS,n.wrapT,n.magFilter,n.minFilter,n.format,n.type,n.anisotropy,n.encoding),this.texture.generateMipmaps=void 0!==n.generateMipmaps&&n.generateMipmaps,this.texture.minFilter=void 0!==n.minFilter?n.minFilter:Ms,this.depthBuffer=void 0===n.depthBuffer||n.depthBuffer,this.stencilBuffer=void 0===n.stencilBuffer||n.stencilBuffer,this.depthTexture=void 0!==n.depthTexture?n.depthTexture:null}function l(t,e,n){h.call(this,t,e,n),this.samples=4}function u(t,e,n){h.call(this,t,e,n)}function p(t,e,n,r,i,a,o,c,h,l,u,p){s.call(this,null,a,o,c,h,l,r,i,u,p),this.image={data:t,width:e,height:n},this.magFilter=void 0!==h?h:bs,this.minFilter=void 0!==l?l:bs,this.generateMipmaps=!1,this.flipY=!1,this.unpackAlignment=1}function d(t,e){this.min=void 0!==t?t:new a(1/0,1/0,1/0),this.max=void 0!==e?e:new a(-1/0,-1/0,-1/0)}function f(t,e){this.center=void 0!==t?t:new a,this.radius=void 0!==e?e:0}function m(t,e){this.normal=void 0!==t?t:new a(1,0,0),this.constant=void 0!==e?e:0}function g(t,e,n,r,i,a){this.planes=[void 0!==t?t:new m,void 0!==e?e:new m,void 0!==n?n:new m,void 0!==r?r:new m,void 0!==i?i:new m,void 0!==a?a:new m]}function v(t){var e={};for(var n in t){e[n]={};for(var r in t[n]){var i=t[n][r];i&&(i.isColor||i.isMatrix3||i.isMatrix4||i.isVector2||i.isVector3||i.isVector4||i.isTexture)?e[n][r]=i.clone():Array.isArray(i)?e[n][r]=i.slice():e[n][r]=i}}return e}function y(t){for(var e={},n=0;ne&&(e=t[n]);return e}function G(){Object.defineProperty(this,"id",{value:kc+=2}),this.uuid=Oc.generateUUID(),this.name="",this.type="BufferGeometry",this.index=null,this.attributes={},this.morphAttributes={},this.groups=[],this.boundingBox=null,this.boundingSphere=null,this.drawRange={start:0,count:1/0},this.userData={}}function F(t,e,n,r,i,a){S.call(this),this.type="BoxGeometry",this.parameters={width:t,height:e,depth:n,widthSegments:r,heightSegments:i,depthSegments:a},this.fromBufferGeometry(new H(t,e,n,r,i,a)),this.mergeVertices()}function H(t,e,n,r,i,o){function s(t,e,n,r,i,o,s,m,g,v,y){var x,b,w=o/g,_=s/v,M=o/2,E=s/2,T=m/2,S=g+1,A=v+1,L=0,R=0,P=new a;for(b=0;b0?1:-1,u.push(P.x,P.y,P.z),p.push(x/g),p.push(1-b/v),L+=1}}for(b=0;b0&&t.getShaderPrecisionFormat(35632,36338).precision>0)return"highp";e="mediump"}return"mediump"===e&&t.getShaderPrecisionFormat(35633,36337).precision>0&&t.getShaderPrecisionFormat(35632,36337).precision>0?"mediump":"lowp"}var a,o="undefined"!=typeof WebGL2RenderingContext&&t instanceof WebGL2RenderingContext,s=void 0!==n.precision?n.precision:"highp",c=i(s);c!==s&&(console.warn("THREE.WebGLRenderer:",s,"not supported, using",c,"instead."),s=c);var h=!0===n.logarithmicDepthBuffer,l=t.getParameter(34930),u=t.getParameter(35660),p=t.getParameter(3379),d=t.getParameter(34076),f=t.getParameter(34921),m=t.getParameter(36347),g=t.getParameter(36348),v=t.getParameter(36349),y=u>0,x=o||!!e.get("OES_texture_float");return{isWebGL2:o,getMaxAnisotropy:r,getMaxPrecision:i,precision:s,logarithmicDepthBuffer:h,maxTextures:l,maxVertexTextures:u,maxTextureSize:p,maxCubemapSize:d,maxAttributes:f,maxVertexUniforms:m,maxVaryings:g,maxFragmentUniforms:v,vertexTextures:y,floatFragmentTextures:x,floatVertexTextures:y&&x,maxSamples:o?t.getParameter(36183):0}}function $(){function t(){l.value!==r&&(l.value=r,l.needsUpdate=i>0),n.numPlanes=i,n.numIntersection=0}function e(t,e,r,i){var a=null!==t?t.length:0,o=null;if(0!==a){if(o=l.value,!0!==i||null===o){var s=r+4*a,u=e.matrixWorldInverse;h.getNormalMatrix(u),(null===o||o.length65535?D:O)(r,1),e.update(n,34963),c[t.id]=n,n}var s={},c={};return{get:i,update:a,getWireframeAttribute:o}}function nt(t,e,n,r){function i(t){c=t}function a(t){h=t.type,l=t.bytesPerElement}function o(e,r){t.drawElements(c,r,h,e*l),n.update(r,c)}function s(i,a,o){var s;if(r.isWebGL2)s=t;else{var s=e.get("ANGLE_instanced_arrays");if(null===s)return void console.error("THREE.WebGLIndexedBufferRenderer: using THREE.InstancedBufferGeometry but hardware does not support extension ANGLE_instanced_arrays.")}s[r.isWebGL2?"drawElementsInstanced":"drawElementsInstancedANGLE"](c,o,h,a*l,i.maxInstancedCount),n.update(o,c,i.maxInstancedCount)}var c,h,l;this.setMode=i,this.setIndex=a,this.render=o,this.renderInstances=s}function rt(t){function e(t,e,n){switch(n=n||1,i.calls++,e){case 4:i.triangles+=n*(t/3);break;case 5:case 6:i.triangles+=n*(t-2);break;case 1:i.lines+=n*(t/2);break;case 3:i.lines+=n*(t-1);break;case 2:i.lines+=n*t;break;case 0:i.points+=n*t;break;default:console.error("THREE.WebGLInfo: Unknown draw mode:",e)}}function n(){i.frame++,i.calls=0,i.triangles=0,i.points=0,i.lines=0}var r={geometries:0,textures:0},i={frame:0,calls:0,triangles:0,points:0,lines:0};return{memory:r,render:i,programs:null,autoReset:!0,reset:n,update:e}}function it(t,e){return Math.abs(e[1])-Math.abs(t[1])}function at(t){function e(e,i,a,o){var s=e.morphTargetInfluences,c=s.length,h=n[i.id];if(void 0===h){h=[];for(var l=0;l0)return t;var i=e*n,a=Qc[i];if(void 0===a&&(a=new Float32Array(i),Qc[i]=a),0!==e){r.toArray(a,0);for(var o=1,s=0;o!==e;++o)s+=n,t[o].toArray(a,s)}return a}function pt(t,e){if(t.length!==e.length)return!1;for(var n=0,r=t.length;n");return oe(n)}var n=/^[ \t]*#include +<([\w\d.\/]+)>/gm;return t.replace(n,e)}function se(t){function e(t,e,n,r){for(var i="",a=parseInt(e);a0?t.gammaFactor:1,y=o.isWebGL2?"":te(r.extensions,a,e),x=ee(c),b=s.createProgram();if(r.isRawShaderMaterial?(m=[x].filter(re).join("\n"),m.length>0&&(m+="\n"),g=[y,x].filter(re).join("\n"), +g.length>0&&(g+="\n")):(m=["precision "+a.precision+" float;","precision "+a.precision+" int;","#define SHADER_NAME "+i.name,x,a.supportsVertexTextures?"#define VERTEX_TEXTURES":"","#define GAMMA_FACTOR "+v,"#define MAX_BONES "+a.maxBones,a.useFog&&a.fog?"#define USE_FOG":"",a.useFog&&a.fogExp?"#define FOG_EXP2":"",a.map?"#define USE_MAP":"",a.envMap?"#define USE_ENVMAP":"",a.envMap?"#define "+d:"",a.lightMap?"#define USE_LIGHTMAP":"",a.aoMap?"#define USE_AOMAP":"",a.emissiveMap?"#define USE_EMISSIVEMAP":"",a.bumpMap?"#define USE_BUMPMAP":"",a.normalMap?"#define USE_NORMALMAP":"",a.normalMap&&a.objectSpaceNormalMap?"#define OBJECTSPACE_NORMALMAP":"",a.displacementMap&&a.supportsVertexTextures?"#define USE_DISPLACEMENTMAP":"",a.specularMap?"#define USE_SPECULARMAP":"",a.roughnessMap?"#define USE_ROUGHNESSMAP":"",a.metalnessMap?"#define USE_METALNESSMAP":"",a.alphaMap?"#define USE_ALPHAMAP":"",a.vertexTangents?"#define USE_TANGENT":"",a.vertexColors?"#define USE_COLOR":"",a.flatShading?"#define FLAT_SHADED":"",a.skinning?"#define USE_SKINNING":"",a.useVertexTexture?"#define BONE_TEXTURE":"",a.morphTargets?"#define USE_MORPHTARGETS":"",a.morphNormals&&!1===a.flatShading?"#define USE_MORPHNORMALS":"",a.doubleSided?"#define DOUBLE_SIDED":"",a.flipSided?"#define FLIP_SIDED":"",a.shadowMapEnabled?"#define USE_SHADOWMAP":"",a.shadowMapEnabled?"#define "+u:"",a.sizeAttenuation?"#define USE_SIZEATTENUATION":"",a.logarithmicDepthBuffer?"#define USE_LOGDEPTHBUF":"",a.logarithmicDepthBuffer&&(o.isWebGL2||e.get("EXT_frag_depth"))?"#define USE_LOGDEPTHBUF_EXT":"","uniform mat4 modelMatrix;","uniform mat4 modelViewMatrix;","uniform mat4 projectionMatrix;","uniform mat4 viewMatrix;","uniform mat3 normalMatrix;","uniform vec3 cameraPosition;","attribute vec3 position;","attribute vec3 normal;","attribute vec2 uv;","#ifdef USE_TANGENT","\tattribute vec4 tangent;","#endif","#ifdef USE_COLOR","\tattribute vec3 color;","#endif","#ifdef USE_MORPHTARGETS","\tattribute vec3 morphTarget0;","\tattribute vec3 morphTarget1;","\tattribute vec3 morphTarget2;","\tattribute vec3 morphTarget3;","\t#ifdef USE_MORPHNORMALS","\t\tattribute vec3 morphNormal0;","\t\tattribute vec3 morphNormal1;","\t\tattribute vec3 morphNormal2;","\t\tattribute vec3 morphNormal3;","\t#else","\t\tattribute vec3 morphTarget4;","\t\tattribute vec3 morphTarget5;","\t\tattribute vec3 morphTarget6;","\t\tattribute vec3 morphTarget7;","\t#endif","#endif","#ifdef USE_SKINNING","\tattribute vec4 skinIndex;","\tattribute vec4 skinWeight;","#endif","\n"].filter(re).join("\n"),g=[y,"precision "+a.precision+" float;","precision "+a.precision+" int;","#define SHADER_NAME "+i.name,x,a.alphaTest?"#define ALPHATEST "+a.alphaTest+(a.alphaTest%1?"":".0"):"","#define GAMMA_FACTOR "+v,a.useFog&&a.fog?"#define USE_FOG":"",a.useFog&&a.fogExp?"#define FOG_EXP2":"",a.map?"#define USE_MAP":"",a.matcap?"#define USE_MATCAP":"",a.envMap?"#define USE_ENVMAP":"",a.envMap?"#define "+p:"",a.envMap?"#define "+d:"",a.envMap?"#define "+f:"",a.lightMap?"#define USE_LIGHTMAP":"",a.aoMap?"#define USE_AOMAP":"",a.emissiveMap?"#define USE_EMISSIVEMAP":"",a.bumpMap?"#define USE_BUMPMAP":"",a.normalMap?"#define USE_NORMALMAP":"",a.normalMap&&a.objectSpaceNormalMap?"#define OBJECTSPACE_NORMALMAP":"",a.specularMap?"#define USE_SPECULARMAP":"",a.roughnessMap?"#define USE_ROUGHNESSMAP":"",a.metalnessMap?"#define USE_METALNESSMAP":"",a.alphaMap?"#define USE_ALPHAMAP":"",a.vertexTangents?"#define USE_TANGENT":"",a.vertexColors?"#define USE_COLOR":"",a.gradientMap?"#define USE_GRADIENTMAP":"",a.flatShading?"#define FLAT_SHADED":"",a.doubleSided?"#define DOUBLE_SIDED":"",a.flipSided?"#define FLIP_SIDED":"",a.shadowMapEnabled?"#define USE_SHADOWMAP":"",a.shadowMapEnabled?"#define "+u:"",a.premultipliedAlpha?"#define PREMULTIPLIED_ALPHA":"",a.physicallyCorrectLights?"#define PHYSICALLY_CORRECT_LIGHTS":"",a.logarithmicDepthBuffer?"#define USE_LOGDEPTHBUF":"",a.logarithmicDepthBuffer&&(o.isWebGL2||e.get("EXT_frag_depth"))?"#define USE_LOGDEPTHBUF_EXT":"",a.envMap&&(o.isWebGL2||e.get("EXT_shader_texture_lod"))?"#define TEXTURE_LOD_EXT":"","uniform mat4 viewMatrix;","uniform vec3 cameraPosition;",a.toneMapping!==is?"#define TONE_MAPPING":"",a.toneMapping!==is?Bc.tonemapping_pars_fragment:"",a.toneMapping!==is?$t("toneMapping",a.toneMapping):"",a.dithering?"#define DITHERING":"",a.outputEncoding||a.mapEncoding||a.matcapEncoding||a.envMapEncoding||a.emissiveMapEncoding?Bc.encodings_pars_fragment:"",a.mapEncoding?Qt("mapTexelToLinear",a.mapEncoding):"",a.matcapEncoding?Qt("matcapTexelToLinear",a.matcapEncoding):"",a.envMapEncoding?Qt("envMapTexelToLinear",a.envMapEncoding):"",a.emissiveMapEncoding?Qt("emissiveMapTexelToLinear",a.emissiveMapEncoding):"",a.outputEncoding?Kt("linearToOutputTexel",a.outputEncoding):"",a.depthPacking?"#define DEPTH_PACKING "+r.depthPacking:"","\n"].filter(re).join("\n")),h=oe(h),h=ie(h,a),h=ae(h,a),l=oe(l),l=ie(l,a),l=ae(l,a),h=se(h),l=se(l),o.isWebGL2&&!r.isRawShaderMaterial){var w=!1,_=/^\s*#version\s+300\s+es\s*\n/;r.isShaderMaterial&&null!==h.match(_)&&null!==l.match(_)&&(w=!0,h=h.replace(_,""),l=l.replace(_,"")),m=["#version 300 es\n","#define attribute in","#define varying out","#define texture2D texture"].join("\n")+"\n"+m,g=["#version 300 es\n","#define varying in",w?"":"out highp vec4 pc_fragColor;",w?"":"#define gl_FragColor pc_fragColor","#define gl_FragDepthEXT gl_FragDepth","#define texture2D texture","#define textureCube texture","#define texture2DProj textureProj","#define texture2DLodEXT textureLod","#define texture2DProjLodEXT textureProjLod","#define textureCubeLodEXT textureLod","#define texture2DGradEXT textureGrad","#define texture2DProjGradEXT textureProjGrad","#define textureCubeGradEXT textureGrad"].join("\n")+"\n"+g}var M=m+h,E=g+l,T=Jt(s,35633,M),S=Jt(s,35632,E);s.attachShader(b,T),s.attachShader(b,S),void 0!==r.index0AttributeName?s.bindAttribLocation(b,0,r.index0AttributeName):!0===a.morphTargets&&s.bindAttribLocation(b,0,"position"),s.linkProgram(b);var A=s.getProgramInfoLog(b).trim(),L=s.getShaderInfoLog(T).trim(),R=s.getShaderInfoLog(S).trim(),P=!0,C=!0;!1===s.getProgramParameter(b,35714)?(P=!1,console.error("THREE.WebGLProgram: shader error: ",s.getError(),"35715",s.getProgramParameter(b,35715),"gl.getProgramInfoLog",A,L,R)):""!==A?console.warn("THREE.WebGLProgram: gl.getProgramInfoLog()",A):""!==L&&""!==R||(C=!1),C&&(this.diagnostics={runnable:P,material:r,programLog:A,vertexShader:{log:L,prefix:m},fragmentShader:{log:R,prefix:g}}),s.deleteShader(T),s.deleteShader(S);var O;this.getUniforms=function(){return void 0===O&&(O=new Xt(s,b,t)),O};var I;return this.getAttributes=function(){return void 0===I&&(I=ne(s,b)),I},this.destroy=function(){s.deleteProgram(b),this.program=void 0},Object.defineProperties(this,{uniforms:{get:function(){return console.warn("THREE.WebGLProgram: .uniforms is now .getUniforms()."),this.getUniforms()}},attributes:{get:function(){return console.warn("THREE.WebGLProgram: .attributes is now .getAttributes()."),this.getAttributes()}}}),this.name=i.name,this.id=rh++,this.code=n,this.usedTimes=1,this.program=b,this.vertexShader=T,this.fragmentShader=S,this}function he(t,e,n){function r(t){var e=t.skeleton,r=e.bones;if(n.floatVertexTextures)return 1024;var i=n.maxVertexUniforms,a=Math.floor((i-20)/4),o=Math.min(a,r.length);return o0,maxBones:d,useVertexTexture:n.floatVertexTextures,morphTargets:e.morphTargets,morphNormals:e.morphNormals,maxMorphTargets:t.maxMorphTargets,maxMorphNormals:t.maxMorphNormals,numDirLights:a.directional.length,numPointLights:a.point.length,numSpotLights:a.spot.length,numRectAreaLights:a.rectArea.length,numHemiLights:a.hemi.length,numClippingPlanes:h,numClipIntersection:l,dithering:e.dithering,shadowMapEnabled:t.shadowMap.enabled&&u.receiveShadow&&s.length>0,shadowMapType:t.shadowMap.type,toneMapping:t.toneMapping,physicallyCorrectLights:t.physicallyCorrectLights,premultipliedAlpha:e.premultipliedAlpha,alphaTest:e.alphaTest,doubleSided:e.side===wo,flipSided:e.side===bo,depthPacking:void 0!==e.depthPacking&&e.depthPacking}},this.getProgramCode=function(e,n){var r=[];if(n.shaderID?r.push(n.shaderID):(r.push(e.fragmentShader),r.push(e.vertexShader)),void 0!==e.defines)for(var i in e.defines)r.push(i),r.push(e.defines[i]);for(var a=0;a1&&s.sort(ue),c.length>1&&c.sort(pe)}var a=[],o=0,s=[],c=[];return{opaque:s,transparent:c,init:t,push:n,unshift:r,sort:i}}function fe(){function t(e){var n=e.target;n.removeEventListener("dispose",t),delete r[n.id]}function e(e,n){var i,a=r[e.id];return void 0===a?(i=new de,r[e.id]={},r[e.id][n.id]=i,e.addEventListener("dispose",t)):void 0===(i=a[n.id])&&(i=new de,a[n.id]=i),i}function n(){r={}}var r={};return{get:e,dispose:n}}function me(){var t={};return{get:function(e){if(void 0!==t[e.id])return t[e.id];var r;switch(e.type){case"DirectionalLight":r={direction:new a,color:new x,shadow:!1,shadowBias:0,shadowRadius:1,shadowMapSize:new n};break;case"SpotLight":r={position:new a,direction:new a,color:new x,distance:0,coneCos:0,penumbraCos:0,decay:0,shadow:!1,shadowBias:0,shadowRadius:1,shadowMapSize:new n};break;case"PointLight":r={position:new a,color:new x,distance:0,decay:0,shadow:!1,shadowBias:0,shadowRadius:1,shadowMapSize:new n,shadowCameraNear:1,shadowCameraFar:1e3};break;case"HemisphereLight":r={direction:new a,skyColor:new x,groundColor:new x};break;case"RectAreaLight":r={color:new x,position:new a,halfWidth:new a,halfHeight:new a}}return t[e.id]=r,r}}}function ge(){function t(t,r,a){for(var c=0,h=0,l=0,u=0,p=0,d=0,f=0,m=0,g=a.matrixWorldInverse,v=0,y=t.length;v0:s&&s.isGeometry&&(u=s.morphTargets&&s.morphTargets.length>0)),e.isSkinnedMesh&&!1===n.skinning&&console.warn("THREE.WebGLShadowMap: THREE.SkinnedMesh with material.skinning set to false:",e);var p=e.isSkinnedMesh&&n.skinning,d=0;u&&(d|=v),p&&(d|=y),c=h[d]}if(t.localClippingEnabled&&!0===n.clipShadows&&0!==n.clippingPlanes.length){var f=c.uuid,m=n.uuid,g=_[f];void 0===g&&(g={},_[f]=g);var x=g[m];void 0===x&&(x=c.clone(),g[m]=x),c=x}return c.visible=n.visible,c.wireframe=n.wireframe,c.side=null!=n.shadowSide?n.shadowSide:M[n.side],c.clipShadows=n.clipShadows,c.clippingPlanes=n.clippingPlanes,c.clipIntersection=n.clipIntersection,c.wireframeLinewidth=n.wireframeLinewidth,c.linewidth=n.linewidth,r&&c.isMeshDistanceMaterial&&(c.referencePosition.copy(i),c.nearDistance=a,c.farDistance=o),c}function s(n,r,i,a){if(!1!==n.visible){if(n.layers.test(r.layers)&&(n.isMesh||n.isLine||n.isPoints)&&n.castShadow&&(!n.frustumCulled||l.intersectsObject(n))){n.modelViewMatrix.multiplyMatrices(i.matrixWorldInverse,n.matrixWorld);var c=e.update(n),h=n.material;if(Array.isArray(h))for(var u=c.groups,p=0,d=u.length;p=1):-1!==at.indexOf("OpenGL ES")&&(it=parseFloat(/^OpenGL\ ES\ ([0-9])/.exec(at)[1]),rt=it>=2);var ot=null,st={},ct=new c,ht=new c,lt={};return lt[3553]=s(3553,3553,1),lt[34067]=s(34067,34069,6),O.setClear(0,0,0,1),I.setClear(1),D.setClear(0),d(2929),I.setFunc(Zo),x(!1),b(mo),d(2884),v(To),{buffers:{color:O,depth:I,stencil:D},initAttributes:h,enableAttribute:l,enableAttributeAndDivisor:u,disableUnusedAttributes:p,enable:d,disable:f,getCompressedTextureFormats:m,useProgram:g,setBlending:v,setMaterial:y,setFlipSided:x,setCullFace:b,setLineWidth:w,setPolygonOffset:_,setScissorTest:M,activeTexture:E,bindTexture:T,compressedTexImage2D:S,texImage2D:A,texImage3D:L,scissor:R,viewport:P,reset:C}}function Me(t,e,n,r,i,a,o){function s(t,e){return U?new OffscreenCanvas(t,e):document.createElementNS("http://www.w3.org/1999/xhtml","canvas")}function c(t,e,n,r){var i=1;if((t.width>r||t.height>r)&&(i=r/Math.max(t.width,t.height)),i<1||!0===e){if("undefined"!=typeof HTMLImageElement&&t instanceof HTMLImageElement||"undefined"!=typeof HTMLCanvasElement&&t instanceof HTMLCanvasElement||"undefined"!=typeof ImageBitmap&&t instanceof ImageBitmap){var a=e?Oc.floorPowerOfTwo:Math.floor,o=a(i*t.width),c=a(i*t.height);void 0===B&&(B=s(o,c));var h=n?s(o,c):B;h.width=o,h.height=c;return h.getContext("2d").drawImage(t,0,0,o,c),console.warn("THREE.WebGLRenderer: Texture has been resized from ("+t.width+"x"+t.height+") to ("+o+"x"+c+")."),h}return"data"in t&&console.warn("THREE.WebGLRenderer: Image in DataTexture is too big ("+t.width+"x"+t.height+")."),t}return t}function h(t){return Oc.isPowerOfTwo(t.width)&&Oc.isPowerOfTwo(t.height)}function l(t){return!i.isWebGL2&&(t.wrapS!==ys||t.wrapT!==ys||t.minFilter!==bs&&t.minFilter!==Ms)}function u(t,e){return t.generateMipmaps&&e&&t.minFilter!==bs&&t.minFilter!==Ms}function p(e,n,i,a){t.generateMipmap(e),r.get(n).__maxMipLevel=Math.log(Math.max(i,a))*Math.LOG2E}function d(t,n){if(!i.isWebGL2)return t;var r=t;return 6403===t&&(5126===n&&(r=33326),5131===n&&(r=33325),5121===n&&(r=33321)),6407===t&&(5126===n&&(r=34837),5131===n&&(r=34843),5121===n&&(r=32849)),6408===t&&(5126===n&&(r=34836),5131===n&&(r=34842),5121===n&&(r=32856)),33325===r||33326===r||34842===r||34836===r?e.get("EXT_color_buffer_float"):34843!==r&&34837!==r||console.warn("THREE.WebGLRenderer: Floating point textures with RGB format not supported. Please use RGBA instead."),r}function f(t){return t===bs||t===ws||t===_s?9728:9729}function m(t){var e=t.target;e.removeEventListener("dispose",m),v(e),e.isVideoTexture&&delete z[e.id],o.memory.textures--}function g(t){var e=t.target;e.removeEventListener("dispose",g),y(e),o.memory.textures--}function v(e){var n=r.get(e);void 0!==n.__webglInit&&(t.deleteTexture(n.__webglTexture),r.remove(e))}function y(e){var n=r.get(e),i=r.get(e.texture);if(e){if(void 0!==i.__webglTexture&&t.deleteTexture(i.__webglTexture),e.depthTexture&&e.depthTexture.dispose(),e.isWebGLRenderTargetCube)for(var a=0;a<6;a++)t.deleteFramebuffer(n.__webglFramebuffer[a]),n.__webglDepthbuffer&&t.deleteRenderbuffer(n.__webglDepthbuffer[a]);else t.deleteFramebuffer(n.__webglFramebuffer),n.__webglDepthbuffer&&t.deleteRenderbuffer(n.__webglDepthbuffer);r.remove(e.texture),r.remove(e)}}function x(t,e){var i=r.get(t);if(t.isVideoTexture&&N(t),t.version>0&&i.__version!==t.version){var a=t.image;if(void 0===a)console.warn("THREE.WebGLRenderer: Texture marked for update but image is undefined");else{if(!1!==a.complete)return void S(i,t,e);console.warn("THREE.WebGLRenderer: Texture marked for update but image is incomplete")}}n.activeTexture(33984+e),n.bindTexture(3553,i.__webglTexture)}function b(t,e){var i=r.get(t);if(t.version>0&&i.__version!==t.version)return void S(i,t,e);n.activeTexture(33984+e),n.bindTexture(35866,i.__webglTexture)}function w(t,e){var i=r.get(t);if(t.version>0&&i.__version!==t.version)return void S(i,t,e);n.activeTexture(33984+e),n.bindTexture(32879,i.__webglTexture)}function _(e,o){var s=r.get(e);if(6===e.image.length)if(e.version>0&&s.__version!==e.version){T(s,e),n.activeTexture(33984+o),n.bindTexture(34067,s.__webglTexture),t.pixelStorei(37440,e.flipY);for(var l=e&&e.isCompressedTexture,f=e.image[0]&&e.image[0].isDataTexture,m=[],g=0;g<6;g++)m[g]=l||f?f?e.image[g].image:e.image[g]:c(e.image[g],!1,!0,i.maxCubemapSize);var v=m[0],y=h(v)||i.isWebGL2,x=a.convert(e.format),b=a.convert(e.type),w=d(x,b);E(34067,e,y);for(var g=0;g<6;g++)if(l)for(var _,M=m[g].mipmaps,S=0,A=M.length;S-1?n.compressedTexImage2D(34069+g,S,w,_.width,_.height,0,_.data):console.warn("THREE.WebGLRenderer: Attempt to load unsupported compressed texture format in .setTextureCube()"):n.texImage2D(34069+g,S,w,_.width,_.height,0,x,b,_.data);else f?n.texImage2D(34069+g,0,w,m[g].width,m[g].height,0,x,b,m[g].data):n.texImage2D(34069+g,0,w,x,b,m[g]);s.__maxMipLevel=l?M.length-1:0,u(e,y)&&p(34067,e,v.width,v.height),s.__version=e.version,e.onUpdate&&e.onUpdate(e)}else n.activeTexture(33984+o),n.bindTexture(34067,s.__webglTexture)}function M(t,e){n.activeTexture(33984+e),n.bindTexture(34067,r.get(t).__webglTexture)}function E(n,o,s){var c;if(s?(t.texParameteri(n,10242,a.convert(o.wrapS)),t.texParameteri(n,10243,a.convert(o.wrapT)),32879!==n&&35866!==n||t.texParameteri(n,32882,a.convert(o.wrapR)),t.texParameteri(n,10240,a.convert(o.magFilter)),t.texParameteri(n,10241,a.convert(o.minFilter))):(t.texParameteri(n,10242,33071),t.texParameteri(n,10243,33071),32879!==n&&35866!==n||t.texParameteri(n,32882,33071),o.wrapS===ys&&o.wrapT===ys||console.warn("THREE.WebGLRenderer: Texture is not power of two. Texture.wrapS and Texture.wrapT should be set to THREE.ClampToEdgeWrapping."),t.texParameteri(n,10240,f(o.magFilter)),t.texParameteri(n,10241,f(o.minFilter)),o.minFilter!==bs&&o.minFilter!==Ms&&console.warn("THREE.WebGLRenderer: Texture is not power of two. Texture.minFilter should be set to THREE.NearestFilter or THREE.LinearFilter.")),c=e.get("EXT_texture_filter_anisotropic")){if(o.type===Os&&null===e.get("OES_texture_float_linear"))return;if(o.type===Is&&null===(i.isWebGL2||e.get("OES_texture_half_float_linear")))return;(o.anisotropy>1||r.get(o).__currentAnisotropy)&&(t.texParameterf(n,c.TEXTURE_MAX_ANISOTROPY_EXT,Math.min(o.anisotropy,i.getMaxAnisotropy())),r.get(o).__currentAnisotropy=o.anisotropy)}}function T(e,n){void 0===e.__webglInit&&(e.__webglInit=!0,n.addEventListener("dispose",m),e.__webglTexture=t.createTexture(),o.memory.textures++)}function S(e,r,o){var s=3553;r.isDataTexture2DArray&&(s=35866),r.isDataTexture3D&&(s=32879),T(e,r),n.activeTexture(33984+o),n.bindTexture(s,e.__webglTexture),t.pixelStorei(37440,r.flipY),t.pixelStorei(37441,r.premultiplyAlpha),t.pixelStorei(3317,r.unpackAlignment);var f=l(r)&&!1===h(r.image),m=c(r.image,f,!1,i.maxTextureSize),g=h(m)||i.isWebGL2,v=a.convert(r.format),y=a.convert(r.type),x=d(v,y);E(s,r,g);var b,w=r.mipmaps;if(r.isDepthTexture){if(x=6402,r.type===Os){if(!i.isWebGL2)throw new Error("Float Depth Texture only supported in WebGL2.0");x=36012}else i.isWebGL2&&(x=33189);r.format===js&&6402===x&&r.type!==Rs&&r.type!==Cs&&(console.warn("THREE.WebGLRenderer: Use UnsignedShortType or UnsignedIntType for DepthFormat DepthTexture."),r.type=Rs,y=a.convert(r.type)),r.format===Ws&&(x=34041,r.type!==zs&&(console.warn("THREE.WebGLRenderer: Use UnsignedInt248Type for DepthStencilFormat DepthTexture."),r.type=zs,y=a.convert(r.type))),n.texImage2D(3553,0,x,m.width,m.height,0,v,y,null)}else if(r.isDataTexture)if(w.length>0&&g){for(var _=0,M=w.length;_-1?n.compressedTexImage2D(3553,_,x,b.width,b.height,0,b.data):console.warn("THREE.WebGLRenderer: Attempt to load unsupported compressed texture format in .uploadTexture()"):n.texImage2D(3553,_,x,b.width,b.height,0,v,y,b.data);e.__maxMipLevel=w.length-1}else if(r.isDataTexture2DArray)n.texImage3D(35866,0,x,m.width,m.height,m.depth,0,v,y,m.data),e.__maxMipLevel=0;else if(r.isDataTexture3D)n.texImage3D(32879,0,x,m.width,m.height,m.depth,0,v,y,m.data),e.__maxMipLevel=0;else if(w.length>0&&g){for(var _=0,M=w.length;_=0){var c=r[o];if(void 0!==c){var h=c.normalized,l=c.itemSize,u=Vt.get(c);if(void 0===u)continue;var p=u.buffer,d=u.type,f=u.bytesPerElement;if(c.isInterleavedBufferAttribute){var m=c.data,g=m.stride,v=c.offset;m&&m.isInstancedInterleavedBuffer?(Ut.enableAttributeAndDivisor(s,m.meshPerAttribute),void 0===n.maxInstancedCount&&(n.maxInstancedCount=m.meshPerAttribute*m.count)):Ut.enableAttribute(s),ht.bindBuffer(34962,p),ht.vertexAttribPointer(s,l,d,h,g*f,v*f)}else c.isInstancedBufferAttribute?(Ut.enableAttributeAndDivisor(s,c.meshPerAttribute),void 0===n.maxInstancedCount&&(n.maxInstancedCount=c.meshPerAttribute*c.count)):Ut.enableAttribute(s),ht.bindBuffer(34962,p),ht.vertexAttribPointer(s,l,d,h,0,0)}else if(void 0!==a){var y=a[o];if(void 0!==y)switch(y.length){case 2:ht.vertexAttrib2fv(s,y);break;case 3:ht.vertexAttrib3fv(s,y);break;case 4:ht.vertexAttrib4fv(s,y);break;default:ht.vertexAttrib1fv(s,y)}}}}Ut.disableUnusedAttributes()}function m(t){te.isPresenting()||ne&&ne(t)}function y(t,e,n,r){if(!1!==t.visible){if(t.layers.test(e.layers))if(t.isGroup)n=t.renderOrder;else if(t.isLight)ct.pushLight(t),t.castShadow&&ct.pushShadow(t);else if(t.isSprite){if(!t.frustumCulled||Rt.intersectsSprite(t)){r&&Dt.setFromMatrixPosition(t.matrixWorld).applyMatrix4(It);var i=jt.update(t),a=t.material;a.visible&&st.push(t,i,a,n,Dt.z,null)}}else if(t.isImmediateRenderObject)r&&Dt.setFromMatrixPosition(t.matrixWorld).applyMatrix4(It),st.push(t,null,t.material,n,Dt.z,null);else if((t.isMesh||t.isLine||t.isPoints)&&(t.isSkinnedMesh&&t.skeleton.update(),!t.frustumCulled||Rt.intersectsObject(t))){r&&Dt.setFromMatrixPosition(t.matrixWorld).applyMatrix4(It);var i=jt.update(t),a=t.material;if(Array.isArray(a))for(var o=i.groups,s=0,c=o.length;s=0&&t.numSupportedMorphTargets++}if(t.morphNormals){t.numSupportedMorphNormals=0;for(var g=0;g=0&&t.numSupportedMorphNormals++}var y=r.shader.uniforms;(t.isShaderMaterial||t.isRawShaderMaterial)&&!0!==t.clipping||(r.numClippingPlanes=Pt.numPlanes,r.numIntersection=Pt.numIntersection,y.clippingPlanes=Pt.uniform),r.fog=e,void 0===o&&(r.lightsHash=o={}),o.stateID=s.stateID,o.directionalLength=s.directionalLength,o.pointLength=s.pointLength,o.spotLength=s.spotLength,o.rectAreaLength=s.rectAreaLength,o.hemiLength=s.hemiLength,o.shadowsLength=s.shadowsLength,t.lights&&(y.ambientLightColor.value=i.state.ambient,y.directionalLights.value=i.state.directional,y.spotLights.value=i.state.spot,y.rectAreaLights.value=i.state.rectArea,y.pointLights.value=i.state.point,y.hemisphereLights.value=i.state.hemi,y.directionalShadowMap.value=i.state.directionalShadowMap,y.directionalShadowMatrix.value=i.state.directionalShadowMatrix,y.spotShadowMap.value=i.state.spotShadowMap,y.spotShadowMatrix.value=i.state.spotShadowMatrix,y.pointShadowMap.value=i.state.pointShadowMap,y.pointShadowMatrix.value=i.state.pointShadowMatrix);var x=r.program.getUniforms(),b=Xt.seqWithValue(x.seq,y);r.uniformsList=b}function E(t,e,n,r){_t=0;var i=Ft.get(n),a=ct.state.lights,o=i.lightsHash,s=a.state.hash;if(Ct&&(Ot||t!==vt)){var c=t===vt&&n.id===mt;Pt.setState(n.clippingPlanes,n.clipIntersection,n.clipShadows,t,i,c)}!1===n.needsUpdate&&(void 0===i.program?n.needsUpdate=!0:n.fog&&i.fog!==e?n.needsUpdate=!0:!n.lights||o.stateID===s.stateID&&o.directionalLength===s.directionalLength&&o.pointLength===s.pointLength&&o.spotLength===s.spotLength&&o.rectAreaLength===s.rectAreaLength&&o.hemiLength===s.hemiLength&&o.shadowsLength===s.shadowsLength?void 0===i.numClippingPlanes||i.numClippingPlanes===Pt.numPlanes&&i.numIntersection===Pt.numIntersection||(n.needsUpdate=!0):n.needsUpdate=!0),n.needsUpdate&&(M(n,e,r),n.needsUpdate=!1);var h=!1,l=!1,u=!1,d=i.program,f=d.getUniforms(),m=i.shader.uniforms;if(Ut.useProgram(d.program)&&(h=!0,l=!0,u=!0),n.id!==mt&&(mt=n.id,l=!0),h||vt!==t){if(f.setValue(ht,"projectionMatrix",t.projectionMatrix),zt.logarithmicDepthBuffer&&f.setValue(ht,"logDepthBufFC",2/(Math.log(t.far+1)/Math.LN2)),vt!==t&&(vt=t,l=!0,u=!0),n.isShaderMaterial||n.isMeshPhongMaterial||n.isMeshStandardMaterial||n.envMap){var g=f.map.cameraPosition;void 0!==g&&g.setValue(ht,Dt.setFromMatrixPosition(t.matrixWorld))}(n.isMeshPhongMaterial||n.isMeshLambertMaterial||n.isMeshBasicMaterial||n.isMeshStandardMaterial||n.isShaderMaterial||n.skinning)&&f.setValue(ht,"viewMatrix",t.matrixWorldInverse)}if(n.skinning){f.setOptional(ht,r,"bindMatrix"),f.setOptional(ht,r,"bindMatrixInverse");var v=r.skeleton;if(v){var y=v.bones;if(zt.floatVertexTextures){if(void 0===v.boneTexture){var x=Math.sqrt(4*y.length);x=Oc.ceilPowerOfTwo(x),x=Math.max(x,4);var b=new Float32Array(x*x*4);b.set(v.boneMatrices);var w=new p(b,x,x,Fs,Os);w.needsUpdate=!0,v.boneMatrices=b,v.boneTexture=w,v.boneTextureSize=x}f.setValue(ht,"boneTexture",v.boneTexture),f.setValue(ht,"boneTextureSize",v.boneTextureSize)}else f.setOptional(ht,v,"boneMatrices")}}return l&&(f.setValue(ht,"toneMappingExposure",lt.toneMappingExposure),f.setValue(ht,"toneMappingWhitePoint",lt.toneMappingWhitePoint),n.lights&&F(m,u),e&&n.fog&&P(m,e),n.isMeshBasicMaterial?T(m,n):n.isMeshLambertMaterial?(T(m,n),C(m,n)):n.isMeshPhongMaterial?(T(m,n),n.isMeshToonMaterial?I(m,n):O(m,n)):n.isMeshStandardMaterial?(T(m,n),n.isMeshPhysicalMaterial?N(m,n):D(m,n)):n.isMeshMatcapMaterial?(T(m,n),B(m,n)):n.isMeshDepthMaterial?(T(m,n),z(m,n)):n.isMeshDistanceMaterial?(T(m,n),U(m,n)):n.isMeshNormalMaterial?(T(m,n),G(m,n)):n.isLineBasicMaterial?(S(m,n),n.isLineDashedMaterial&&A(m,n)):n.isPointsMaterial?L(m,n):n.isSpriteMaterial?R(m,n):n.isShadowMaterial&&(m.color.value=n.color,m.opacity.value=n.opacity),void 0!==m.ltc_1&&(m.ltc_1.value=Gc.LTC_1),void 0!==m.ltc_2&&(m.ltc_2.value=Gc.LTC_2),Xt.upload(ht,i.uniformsList,m,lt)),n.isShaderMaterial&&!0===n.uniformsNeedUpdate&&(Xt.upload(ht,i.uniformsList,m,lt),n.uniformsNeedUpdate=!1),n.isSpriteMaterial&&f.setValue(ht,"center",r.center),f.setValue(ht,"modelViewMatrix",r.modelViewMatrix),f.setValue(ht,"normalMatrix",r.normalMatrix),f.setValue(ht,"modelMatrix",r.matrixWorld),d}function T(t,e){t.opacity.value=e.opacity,e.color&&(t.diffuse.value=e.color),e.emissive&&t.emissive.value.copy(e.emissive).multiplyScalar(e.emissiveIntensity),e.map&&(t.map.value=e.map),e.alphaMap&&(t.alphaMap.value=e.alphaMap),e.specularMap&&(t.specularMap.value=e.specularMap),e.envMap&&(t.envMap.value=e.envMap,t.flipEnvMap.value=e.envMap.isCubeTexture?-1:1,t.reflectivity.value=e.reflectivity,t.refractionRatio.value=e.refractionRatio,t.maxMipLevel.value=Ft.get(e.envMap).__maxMipLevel),e.lightMap&&(t.lightMap.value=e.lightMap,t.lightMapIntensity.value=e.lightMapIntensity),e.aoMap&&(t.aoMap.value=e.aoMap,t.aoMapIntensity.value=e.aoMapIntensity);var n;e.map?n=e.map:e.specularMap?n=e.specularMap:e.displacementMap?n=e.displacementMap:e.normalMap?n=e.normalMap:e.bumpMap?n=e.bumpMap:e.roughnessMap?n=e.roughnessMap:e.metalnessMap?n=e.metalnessMap:e.alphaMap?n=e.alphaMap:e.emissiveMap&&(n=e.emissiveMap),void 0!==n&&(n.isWebGLRenderTarget&&(n=n.texture),!0===n.matrixAutoUpdate&&n.updateMatrix(),t.uvTransform.value.copy(n.matrix))}function S(t,e){t.diffuse.value=e.color,t.opacity.value=e.opacity}function A(t,e){t.dashSize.value=e.dashSize,t.totalSize.value=e.dashSize+e.gapSize,t.scale.value=e.scale}function L(t,e){t.diffuse.value=e.color,t.opacity.value=e.opacity,t.size.value=e.size*Tt,t.scale.value=.5*Et,t.map.value=e.map,null!==e.map&&(!0===e.map.matrixAutoUpdate&&e.map.updateMatrix(),t.uvTransform.value.copy(e.map.matrix))}function R(t,e){t.diffuse.value=e.color,t.opacity.value=e.opacity,t.rotation.value=e.rotation,t.map.value=e.map,null!==e.map&&(!0===e.map.matrixAutoUpdate&&e.map.updateMatrix(),t.uvTransform.value.copy(e.map.matrix))}function P(t,e){t.fogColor.value=e.color,e.isFog?(t.fogNear.value=e.near,t.fogFar.value=e.far):e.isFogExp2&&(t.fogDensity.value=e.density)}function C(t,e){e.emissiveMap&&(t.emissiveMap.value=e.emissiveMap)}function O(t,e){t.specular.value=e.specular,t.shininess.value=Math.max(e.shininess,1e-4),e.emissiveMap&&(t.emissiveMap.value=e.emissiveMap),e.bumpMap&&(t.bumpMap.value=e.bumpMap,t.bumpScale.value=e.bumpScale,e.side===bo&&(t.bumpScale.value*=-1)),e.normalMap&&(t.normalMap.value=e.normalMap,t.normalScale.value.copy(e.normalScale),e.side===bo&&t.normalScale.value.negate()),e.displacementMap&&(t.displacementMap.value=e.displacementMap,t.displacementScale.value=e.displacementScale,t.displacementBias.value=e.displacementBias)}function I(t,e){O(t,e),e.gradientMap&&(t.gradientMap.value=e.gradientMap)}function D(t,e){t.roughness.value=e.roughness,t.metalness.value=e.metalness,e.roughnessMap&&(t.roughnessMap.value=e.roughnessMap),e.metalnessMap&&(t.metalnessMap.value=e.metalnessMap),e.emissiveMap&&(t.emissiveMap.value=e.emissiveMap),e.bumpMap&&(t.bumpMap.value=e.bumpMap,t.bumpScale.value=e.bumpScale,e.side===bo&&(t.bumpScale.value*=-1)),e.normalMap&&(t.normalMap.value=e.normalMap,t.normalScale.value.copy(e.normalScale),e.side===bo&&t.normalScale.value.negate()),e.displacementMap&&(t.displacementMap.value=e.displacementMap,t.displacementScale.value=e.displacementScale, +t.displacementBias.value=e.displacementBias),e.envMap&&(t.envMapIntensity.value=e.envMapIntensity)}function N(t,e){D(t,e),t.reflectivity.value=e.reflectivity,t.clearCoat.value=e.clearCoat,t.clearCoatRoughness.value=e.clearCoatRoughness}function B(t,e){e.matcap&&(t.matcap.value=e.matcap),e.bumpMap&&(t.bumpMap.value=e.bumpMap,t.bumpScale.value=e.bumpScale,e.side===bo&&(t.bumpScale.value*=-1)),e.normalMap&&(t.normalMap.value=e.normalMap,t.normalScale.value.copy(e.normalScale),e.side===bo&&t.normalScale.value.negate()),e.displacementMap&&(t.displacementMap.value=e.displacementMap,t.displacementScale.value=e.displacementScale,t.displacementBias.value=e.displacementBias)}function z(t,e){e.displacementMap&&(t.displacementMap.value=e.displacementMap,t.displacementScale.value=e.displacementScale,t.displacementBias.value=e.displacementBias)}function U(t,e){e.displacementMap&&(t.displacementMap.value=e.displacementMap,t.displacementScale.value=e.displacementScale,t.displacementBias.value=e.displacementBias),t.referencePosition.value.copy(e.referencePosition),t.nearDistance.value=e.nearDistance,t.farDistance.value=e.farDistance}function G(t,e){e.bumpMap&&(t.bumpMap.value=e.bumpMap,t.bumpScale.value=e.bumpScale,e.side===bo&&(t.bumpScale.value*=-1)),e.normalMap&&(t.normalMap.value=e.normalMap,t.normalScale.value.copy(e.normalScale),e.side===bo&&t.normalScale.value.negate()),e.displacementMap&&(t.displacementMap.value=e.displacementMap,t.displacementScale.value=e.displacementScale,t.displacementBias.value=e.displacementBias)}function F(t,e){t.ambientLightColor.needsUpdate=e,t.directionalLights.needsUpdate=e,t.pointLights.needsUpdate=e,t.spotLights.needsUpdate=e,t.rectAreaLights.needsUpdate=e,t.hemisphereLights.needsUpdate=e}function H(){var t=_t;return t>=zt.maxTextures&&console.warn("THREE.WebGLRenderer: Trying to use "+t+" texture units while this GPU supports only "+zt.maxTextures),_t+=1,t}console.log("THREE.WebGLRenderer",uo),t=t||{};var V=void 0!==t.canvas?t.canvas:document.createElementNS("http://www.w3.org/1999/xhtml","canvas"),k=void 0!==t.context?t.context:null,j=void 0!==t.alpha&&t.alpha,W=void 0===t.depth||t.depth,q=void 0===t.stencil||t.stencil,X=void 0!==t.antialias&&t.antialias,Y=void 0===t.premultipliedAlpha||t.premultipliedAlpha,J=void 0!==t.preserveDrawingBuffer&&t.preserveDrawingBuffer,it=void 0!==t.powerPreference?t.powerPreference:"default",st=null,ct=null;this.domElement=V,this.context=null,this.autoClear=!0,this.autoClearColor=!0,this.autoClearDepth=!0,this.autoClearStencil=!0,this.sortObjects=!0,this.clippingPlanes=[],this.localClippingEnabled=!1,this.gammaFactor=2,this.gammaInput=!1,this.gammaOutput=!1,this.physicallyCorrectLights=!1,this.toneMapping=as,this.toneMappingExposure=1,this.toneMappingWhitePoint=1,this.maxMorphTargets=8,this.maxMorphNormals=4;var ht,lt=this,ut=!1,pt=null,dt=null,ft=null,mt=-1,gt={geometry:null,program:null,wireframe:!1},vt=null,yt=null,xt=new c,bt=new c,wt=null,_t=0,Mt=V.width,Et=V.height,Tt=1,St=new c(0,0,Mt,Et),At=new c(0,0,Mt,Et),Lt=!1,Rt=new g,Pt=new $,Ct=!1,Ot=!1,It=new r,Dt=new a;try{var Nt={alpha:j,depth:W,stencil:q,antialias:X,premultipliedAlpha:Y,preserveDrawingBuffer:J,powerPreference:it};if(V.addEventListener("webglcontextlost",o,!1),V.addEventListener("webglcontextrestored",s,!1),null===(ht=k||V.getContext("webgl",Nt)||V.getContext("experimental-webgl",Nt)))throw null!==V.getContext("webgl")?new Error("Error creating WebGL context with your selected attributes."):new Error("Error creating WebGL context.");void 0===ht.getShaderPrecisionFormat&&(ht.getShaderPrecisionFormat=function(){return{rangeMin:1,rangeMax:1,precision:1}})}catch(t){throw console.error("THREE.WebGLRenderer: "+t.message),t}var Bt,zt,Ut,Gt,Ft,Ht,Vt,kt,jt,Wt,qt,Yt,Jt,Zt,Qt,Kt,$t;i();var te=null;"undefined"!=typeof navigator&&(te="xr"in navigator?new Ce(lt):new Pe(lt)),this.vr=te;var ee=new we(lt,jt,zt.maxTextureSize);this.shadowMap=ee,this.getContext=function(){return ht},this.getContextAttributes=function(){return ht.getContextAttributes()},this.forceContextLoss=function(){var t=Bt.get("WEBGL_lose_context");t&&t.loseContext()},this.forceContextRestore=function(){var t=Bt.get("WEBGL_lose_context");t&&t.restoreContext()},this.getPixelRatio=function(){return Tt},this.setPixelRatio=function(t){void 0!==t&&(Tt=t,this.setSize(Mt,Et,!1))},this.getSize=function(t){return void 0===t&&(console.warn("WebGLRenderer: .getsize() now requires a Vector2 as an argument"),t=new n),t.set(Mt,Et)},this.setSize=function(t,e,n){if(te.isPresenting())return void console.warn("THREE.WebGLRenderer: Can't change size while VR device is presenting.");Mt=t,Et=e,V.width=t*Tt,V.height=e*Tt,!1!==n&&(V.style.width=t+"px",V.style.height=e+"px"),this.setViewport(0,0,t,e)},this.getDrawingBufferSize=function(t){return void 0===t&&(console.warn("WebGLRenderer: .getdrawingBufferSize() now requires a Vector2 as an argument"),t=new n),t.set(Mt*Tt,Et*Tt)},this.setDrawingBufferSize=function(t,e,n){Mt=t,Et=e,Tt=n,V.width=t*n,V.height=e*n,this.setViewport(0,0,t,e)},this.getCurrentViewport=function(t){return void 0===t&&(console.warn("WebGLRenderer: .getCurrentViewport() now requires a Vector4 as an argument"),t=new c),t.copy(xt)},this.getViewport=function(t){return t.copy(St)},this.setViewport=function(t,e,n,r){t.isVector4?St.set(t.x,t.y,t.z,t.w):St.set(t,e,n,r),Ut.viewport(xt.copy(St).multiplyScalar(Tt))},this.getScissor=function(t){return t.copy(At)},this.setScissor=function(t,e,n,r){t.isVector4?At.set(t.x,t.y,t.z,t.w):At.set(t,e,n,r),Ut.scissor(bt.copy(At).multiplyScalar(Tt))},this.getScissorTest=function(){return Lt},this.setScissorTest=function(t){Ut.setScissorTest(Lt=t)},this.getClearColor=function(){return Jt.getClearColor()},this.setClearColor=function(){Jt.setClearColor.apply(Jt,arguments)},this.getClearAlpha=function(){return Jt.getClearAlpha()},this.setClearAlpha=function(){Jt.setClearAlpha.apply(Jt,arguments)},this.clear=function(t,e,n){var r=0;(void 0===t||t)&&(r|=16384),(void 0===e||e)&&(r|=256),(void 0===n||n)&&(r|=1024),ht.clear(r)},this.clearColor=function(){this.clear(!0,!1,!1)},this.clearDepth=function(){this.clear(!1,!0,!1)},this.clearStencil=function(){this.clear(!1,!1,!0)},this.dispose=function(){V.removeEventListener("webglcontextlost",o,!1),V.removeEventListener("webglcontextrestored",s,!1),qt.dispose(),Yt.dispose(),Ft.dispose(),jt.dispose(),te.dispose(),re.stop()},this.renderBufferImmediate=function(t,e){Ut.initAttributes();var n=Ft.get(t);t.hasPositions&&!n.position&&(n.position=ht.createBuffer()),t.hasNormals&&!n.normal&&(n.normal=ht.createBuffer()),t.hasUvs&&!n.uv&&(n.uv=ht.createBuffer()),t.hasColors&&!n.color&&(n.color=ht.createBuffer());var r=e.getAttributes();t.hasPositions&&(ht.bindBuffer(34962,n.position),ht.bufferData(34962,t.positionArray,35048),Ut.enableAttribute(r.position),ht.vertexAttribPointer(r.position,3,5126,!1,0,0)),t.hasNormals&&(ht.bindBuffer(34962,n.normal),ht.bufferData(34962,t.normalArray,35048),Ut.enableAttribute(r.normal),ht.vertexAttribPointer(r.normal,3,5126,!1,0,0)),t.hasUvs&&(ht.bindBuffer(34962,n.uv),ht.bufferData(34962,t.uvArray,35048),Ut.enableAttribute(r.uv),ht.vertexAttribPointer(r.uv,2,5126,!1,0,0)),t.hasColors&&(ht.bindBuffer(34962,n.color),ht.bufferData(34962,t.colorArray,35048),Ut.enableAttribute(r.color),ht.vertexAttribPointer(r.color,3,5126,!1,0,0)),Ut.disableUnusedAttributes(),ht.drawArrays(4,0,t.count),t.count=0},this.renderBufferDirect=function(t,n,r,i,a,o){var s=a.isMesh&&a.matrixWorld.determinant()<0;Ut.setMaterial(i,s);var c=E(t,n,i,a),h=!1;gt.geometry===r.id&>.program===c.id&>.wireframe===(!0===i.wireframe)||(gt.geometry=r.id,gt.program=c.id,gt.wireframe=!0===i.wireframe,h=!0),a.morphTargetInfluences&&(Zt.update(a,r,i,c),h=!0);var l=r.index,u=r.attributes.position,p=1;!0===i.wireframe&&(l=kt.getWireframeAttribute(r),p=2);var d,m=Qt;null!==l&&(d=Vt.get(l),m=Kt,m.setIndex(d)),h&&(f(i,c,r),null!==l&&ht.bindBuffer(34963,d.buffer));var g=1/0;null!==l?g=l.count:void 0!==u&&(g=u.count);var v=r.drawRange.start*p,y=r.drawRange.count*p,x=null!==o?o.start*p:0,b=null!==o?o.count*p:1/0,w=Math.max(v,x),_=Math.min(g,v+y,x+b)-1,M=Math.max(0,_-w+1);if(0!==M){if(a.isMesh)if(!0===i.wireframe)Ut.setLineWidth(i.wireframeLinewidth*e()),m.setMode(1);else switch(a.drawMode){case yc:m.setMode(4);break;case xc:m.setMode(5);break;case bc:m.setMode(6)}else if(a.isLine){var T=i.linewidth;void 0===T&&(T=1),Ut.setLineWidth(T*e()),a.isLineSegments?m.setMode(1):a.isLineLoop?m.setMode(2):m.setMode(3)}else a.isPoints?m.setMode(0):a.isSprite&&m.setMode(4);r&&r.isInstancedBufferGeometry?r.maxInstancedCount>0&&m.renderInstances(r,w,M):m.render(w,M)}},this.compile=function(t,e){ct=Yt.get(t,e),ct.init(),t.traverse(function(t){t.isLight&&(ct.pushLight(t),t.castShadow&&ct.pushShadow(t))}),ct.setupLights(e),t.traverse(function(e){if(e.material)if(Array.isArray(e.material))for(var n=0;n=0&&e<=t.width-r&&n>=0&&n<=t.height-i&&ht.readPixels(e,n,r,i,$t.convert(h),$t.convert(l),a):console.error("THREE.WebGLRenderer.readRenderTargetPixels: readPixels from renderTarget failed. Framebuffer not complete.")}finally{s&&ht.bindFramebuffer(36160,ft)}}},this.copyFramebufferToTexture=function(t,e,n){var r=e.image.width,i=e.image.height,a=$t.convert(e.format);this.setTexture2D(e,0),ht.copyTexImage2D(3553,n||0,a,t.x,t.y,r,i,0)},this.copyTextureToTexture=function(t,e,n,r){var i=e.image.width,a=e.image.height,o=$t.convert(n.format),s=$t.convert(n.type);this.setTexture2D(n,0),e.isDataTexture?ht.texSubImage2D(3553,r||0,t.x,t.y,i,a,o,s,e.image.data):ht.texSubImage2D(3553,r||0,t.x,t.y,o,s,e.image)}}function Ie(t,e){this.name="",this.color=new x(t),this.density=void 0!==e?e:25e-5}function De(t,e,n){this.name="",this.color=new x(t),this.near=void 0!==e?e:1,this.far=void 0!==n?n:1e3}function Ne(){T.call(this),this.type="Scene",this.background=null,this.fog=null,this.overrideMaterial=null,this.autoUpdate=!0}function Be(t,e){this.array=t,this.stride=e,this.count=void 0!==t?t.length/e:0,this.dynamic=!1,this.updateRange={offset:0,count:-1},this.version=0}function ze(t,e,n,r){this.data=t,this.itemSize=e,this.offset=n,this.normalized=!0===r}function Ue(t){j.call(this),this.type="SpriteMaterial",this.color=new x(16777215),this.map=null,this.rotation=0,this.sizeAttenuation=!0,this.lights=!1,this.transparent=!0,this.setValues(t)}function Ge(t){if(T.call(this),this.type="Sprite",void 0===sh){sh=new G;var e=new Float32Array([-.5,-.5,0,0,0,.5,-.5,0,1,0,.5,.5,0,1,1,-.5,.5,0,0,1]),r=new Be(e,5);sh.setIndex([0,1,2,0,2,3]),sh.addAttribute("position",new ze(r,3,0,!1)),sh.addAttribute("uv",new ze(r,2,3,!1))}this.geometry=sh,this.material=void 0!==t?t:new Ue,this.center=new n(.5,.5)}function Fe(){T.call(this),this.type="LOD",Object.defineProperties(this,{levels:{enumerable:!0,value:[]}})}function He(t,e){t&&t.isGeometry&&console.error("THREE.SkinnedMesh no longer supports THREE.Geometry. Use THREE.BufferGeometry instead."),J.call(this,t,e),this.type="SkinnedMesh",this.bindMode="attached",this.bindMatrix=new r,this.bindMatrixInverse=new r}function Ve(t,e){if(t=t||[],this.bones=t.slice(0),this.boneMatrices=new Float32Array(16*this.bones.length),void 0===e)this.calculateInverses();else if(this.bones.length===e.length)this.boneInverses=e.slice(0);else{console.warn("THREE.Skeleton boneInverses is the wrong length."),this.boneInverses=[];for(var n=0,i=this.bones.length;n=0?(t(v-1e-5,g,p),d.subVectors(u,p)):(t(v+1e-5,g,p),d.subVectors(p,u)),g-1e-5>=0?(t(v,g-1e-5,p),f.subVectors(u,p)):(t(v,g+1e-5,p),f.subVectors(p,u)),l.crossVectors(d,f).normalize(),c.push(l.x,l.y,l.z),h.push(v,g)}}for(r=0;r.9&&a<.1&&(e<.2&&(m[t+0]+=1),n<.2&&(m[t+2]+=1),r<.2&&(m[t+4]+=1))}}function c(t){f.push(t.x,t.y,t.z)}function h(e,n){var r=3*e;n.x=t[r+0],n.y=t[r+1],n.z=t[r+2]}function l(){for(var t=new a,e=new a,r=new a,i=new a,o=new n,s=new n,c=new n,h=0,l=0;h0)for(a=e;a=e;a-=r)o=jn(a,t[a],t[a+1],o);return o&&Un(o,o.next)&&(Wn(o),o=o.next),o}function wn(t,e){if(!t)return t;e||(e=t);var n,r=t;do{if(n=!1,r.steiner||!Un(r,r.next)&&0!==zn(r.prev,r,r.next))r=r.next;else{if(Wn(r),(r=e=r.prev)===r.next)break;n=!0}}while(n||r!==e);return e}function _n(t,e,n,r,i,a,o){if(t){!o&&a&&Cn(t,r,i,a);for(var s,c,h=t;t.prev!==t.next;)if(s=t.prev,c=t.next,a?En(t,r,i,a):Mn(t))e.push(s.i/n),e.push(t.i/n),e.push(c.i/n),Wn(t),t=c.next,h=c.next;else if((t=c)===h){o?1===o?(t=Tn(t,e,n),_n(t,e,n,r,i,a,2)):2===o&&Sn(t,e,n,r,i,a):_n(wn(t),e,n,r,i,a,1);break}}}function Mn(t){var e=t.prev,n=t,r=t.next;if(zn(e,n,r)>=0)return!1;for(var i=t.next.next;i!==t.prev;){if(Nn(e.x,e.y,n.x,n.y,r.x,r.y,i.x,i.y)&&zn(i.prev,i,i.next)>=0)return!1;i=i.next}return!0}function En(t,e,n,r){var i=t.prev,a=t,o=t.next;if(zn(i,a,o)>=0)return!1;for(var s=i.xa.x?i.x>o.x?i.x:o.x:a.x>o.x?a.x:o.x,l=i.y>a.y?i.y>o.y?i.y:o.y:a.y>o.y?a.y:o.y,u=In(s,c,e,n,r),p=In(h,l,e,n,r),d=t.nextZ;d&&d.z<=p;){if(d!==t.prev&&d!==t.next&&Nn(i.x,i.y,a.x,a.y,o.x,o.y,d.x,d.y)&&zn(d.prev,d,d.next)>=0)return!1;d=d.nextZ}for(d=t.prevZ;d&&d.z>=u;){if(d!==t.prev&&d!==t.next&&Nn(i.x,i.y,a.x,a.y,o.x,o.y,d.x,d.y)&&zn(d.prev,d,d.next)>=0)return!1;d=d.prevZ}return!0}function Tn(t,e,n){var r=t;do{var i=r.prev,a=r.next.next;!Un(i,a)&&Gn(i,r,r.next,a)&&Hn(i,a)&&Hn(a,i)&&(e.push(i.i/n),e.push(r.i/n),e.push(a.i/n),Wn(r),Wn(r.next),r=t=a),r=r.next}while(r!==t);return r}function Sn(t,e,n,r,i,a){var o=t;do{for(var s=o.next.next;s!==o.prev;){if(o.i!==s.i&&Bn(o,s)){var c=kn(o,s);return o=wn(o,o.next),c=wn(c,c.next),_n(o,e,n,r,i,a),void _n(c,e,n,r,i,a)}s=s.next}o=o.next}while(o!==t)}function An(t,e,n,r){var i,a,o,s,c,h=[];for(i=0,a=e.length;i=r.next.y&&r.next.y!==r.y){var s=r.x+(a-r.y)*(r.next.x-r.x)/(r.next.y-r.y);if(s<=i&&s>o){if(o=s,s===i){if(a===r.y)return r;if(a===r.next.y)return r.next}n=r.x=r.x&&r.x>=l&&i!==r.x&&Nn(an.x)&&Hn(r,t)&&(n=r,p=c),r=r.next;return n}function Cn(t,e,n,r){var i=t;do{null===i.z&&(i.z=In(i.x,i.y,e,n,r)),i.prevZ=i.prev,i.nextZ=i.next,i=i.next}while(i!==t);i.prevZ.nextZ=null,i.prevZ=null,On(i)}function On(t){var e,n,r,i,a,o,s,c,h=1;do{for(n=t,t=null,a=null,o=0;n;){for(o++,r=n,s=0,e=0;e0||c>0&&r;)0!==s&&(0===c||!r||n.z<=r.z)?(i=n,n=n.nextZ,s--):(i=r,r=r.nextZ,c--),a?a.nextZ=i:t=i,i.prevZ=a,a=i;n=r}a.nextZ=null,h*=2}while(o>1);return t}function In(t,e,n,r,i){return t=32767*(t-n)*i,e=32767*(e-r)*i,t=16711935&(t|t<<8),t=252645135&(t|t<<4),t=858993459&(t|t<<2),t=1431655765&(t|t<<1),e=16711935&(e|e<<8),e=252645135&(e|e<<4),e=858993459&(e|e<<2),e=1431655765&(e|e<<1),t|e<<1}function Dn(t){var e=t,n=t;do{e.x=0&&(t-o)*(r-s)-(n-o)*(e-s)>=0&&(n-o)*(a-s)-(i-o)*(r-s)>=0}function Bn(t,e){return t.next.i!==e.i&&t.prev.i!==e.i&&!Fn(t,e)&&Hn(t,e)&&Hn(e,t)&&Vn(t,e)}function zn(t,e,n){return(e.y-t.y)*(n.x-e.x)-(e.x-t.x)*(n.y-e.y)}function Un(t,e){return t.x===e.x&&t.y===e.y}function Gn(t,e,n,r){return!!(Un(t,e)&&Un(n,r)||Un(t,r)&&Un(n,e))||zn(t,e,n)>0!=zn(t,e,r)>0&&zn(n,r,t)>0!=zn(n,r,e)>0}function Fn(t,e){var n=t;do{if(n.i!==t.i&&n.next.i!==t.i&&n.i!==e.i&&n.next.i!==e.i&&Gn(n,n.next,t,e))return!0;n=n.next}while(n!==t);return!1}function Hn(t,e){return zn(t.prev,t,t.next)<0?zn(t,e,t.next)>=0&&zn(t,t.prev,e)>=0:zn(t,e,t.prev)<0||zn(t,t.next,e)<0}function Vn(t,e){var n=t,r=!1,i=(t.x+e.x)/2,a=(t.y+e.y)/2;do{n.y>a!=n.next.y>a&&n.next.y!==n.y&&i<(n.next.x-n.x)*(a-n.y)/(n.next.y-n.y)+n.x&&(r=!r),n=n.next}while(n!==t);return r}function kn(t,e){var n=new qn(t.i,t.x,t.y),r=new qn(e.i,e.x,e.y),i=t.next,a=e.prev;return t.next=e,e.prev=t,n.next=i,i.prev=n, +r.next=n,n.prev=r,a.next=r,r.prev=a,r}function jn(t,e,n,r){var i=new qn(t,e,n);return r?(i.next=r.next,i.prev=r,r.next.prev=i,r.next=i):(i.prev=i,i.next=i),i}function Wn(t){t.next.prev=t.prev,t.prev.next=t.next,t.prevZ&&(t.prevZ.nextZ=t.nextZ),t.nextZ&&(t.nextZ.prevZ=t.prevZ)}function qn(t,e,n){this.i=t,this.x=e,this.y=n,this.prev=null,this.next=null,this.z=null,this.prevZ=null,this.nextZ=null,this.steiner=!1}function Xn(t,e,n,r){for(var i=0,a=e,o=n-r;a2&&t[e-1].equals(t[0])&&t.pop()}function Jn(t,e){for(var n=0;nNumber.EPSILON){var d=Math.sqrt(u),f=Math.sqrt(h*h+l*l),m=e.x-c/d,g=e.y+s/d,v=r.x-l/f,y=r.y+h/f,x=((v-m)*l-(y-g)*h)/(s*l-c*h);i=m+s*x-t.x,a=g+c*x-t.y;var b=i*i+a*a;if(b<=2)return new n(i,a);o=Math.sqrt(b/2)}else{var w=!1;s>Number.EPSILON?h>Number.EPSILON&&(w=!0):s<-Number.EPSILON?h<-Number.EPSILON&&(w=!0):Math.sign(c)===Math.sign(l)&&(w=!0),w?(i=-c,a=s,o=Math.sqrt(u)):(i=s,a=c,o=Math.sqrt(u/2))}return new n(i/o,a/o)}function h(t,e){var n,r;for(Y=t.length;--Y>=0;){n=Y,(r=Y-1)<0&&(r=t.length-1);var i=0,a=v+2*_;for(i=0;i=0;G--){for(H=G/_,V=b*Math.cos(H*Math.PI/2),F=w*Math.sin(H*Math.PI/2),Y=0,J=U.length;Y0)&&m.push(_,M,T),(h!==n-1||l0&&l(!0),e>0&&l(!1)),this.setIndex(p),this.addAttribute("position",new N(d,3)),this.addAttribute("normal",new N(f,3)),this.addAttribute("uv",new N(m,2))}function dr(t,e,n,r,i,a,o){ur.call(this,0,t,e,n,r,i,a,o),this.type="ConeGeometry",this.parameters={radius:t,height:e,radialSegments:n,heightSegments:r,openEnded:i,thetaStart:a,thetaLength:o}}function fr(t,e,n,r,i,a,o){pr.call(this,0,t,e,n,r,i,a,o),this.type="ConeBufferGeometry",this.parameters={radius:t,height:e,radialSegments:n,heightSegments:r,openEnded:i,thetaStart:a,thetaLength:o}}function mr(t,e,n,r){S.call(this),this.type="CircleGeometry",this.parameters={radius:t,segments:e,thetaStart:n,thetaLength:r},this.fromBufferGeometry(new gr(t,e,n,r)),this.mergeVertices()}function gr(t,e,r,i){G.call(this),this.type="CircleBufferGeometry",this.parameters={radius:t,segments:e,thetaStart:r,thetaLength:i},t=t||1,e=void 0!==e?Math.max(3,e):8,r=void 0!==r?r:0,i=void 0!==i?i:2*Math.PI;var o,s,c=[],h=[],l=[],u=[],p=new a,d=new n;for(h.push(0,0,0),l.push(0,0,1),u.push(.5,.5),s=0,o=3;s<=e;s++,o+=3){var f=r+s/e*i;p.x=t*Math.cos(f),p.y=t*Math.sin(f),h.push(p.x,p.y,p.z),l.push(0,0,1),d.x=(h[o]/t+1)/2,d.y=(h[o+1]/t+1)/2,u.push(d.x,d.y)}for(o=1;o<=e;o++)c.push(o,o+1,0);this.setIndex(c),this.addAttribute("position",new N(h,3)),this.addAttribute("normal",new N(l,3)),this.addAttribute("uv",new N(u,2))}function vr(t){j.call(this),this.type="ShadowMaterial",this.color=new x(0),this.transparent=!0,this.setValues(t)}function yr(t){W.call(this,t),this.type="RawShaderMaterial"}function xr(t){j.call(this),this.defines={STANDARD:""},this.type="MeshStandardMaterial",this.color=new x(16777215),this.roughness=.5,this.metalness=.5,this.map=null,this.lightMap=null,this.lightMapIntensity=1,this.aoMap=null,this.aoMapIntensity=1,this.emissive=new x(0),this.emissiveIntensity=1,this.emissiveMap=null,this.bumpMap=null,this.bumpScale=1,this.normalMap=null,this.normalMapType=Pc,this.normalScale=new n(1,1),this.displacementMap=null,this.displacementScale=1,this.displacementBias=0,this.roughnessMap=null,this.metalnessMap=null,this.alphaMap=null,this.envMap=null,this.envMapIntensity=1,this.refractionRatio=.98,this.wireframe=!1,this.wireframeLinewidth=1,this.wireframeLinecap="round",this.wireframeLinejoin="round",this.skinning=!1,this.morphTargets=!1,this.morphNormals=!1,this.setValues(t)}function br(t){xr.call(this),this.defines={PHYSICAL:""},this.type="MeshPhysicalMaterial",this.reflectivity=.5,this.clearCoat=0,this.clearCoatRoughness=0,this.setValues(t)}function wr(t){j.call(this),this.type="MeshPhongMaterial",this.color=new x(16777215),this.specular=new x(1118481),this.shininess=30,this.map=null,this.lightMap=null,this.lightMapIntensity=1,this.aoMap=null,this.aoMapIntensity=1,this.emissive=new x(0),this.emissiveIntensity=1,this.emissiveMap=null,this.bumpMap=null,this.bumpScale=1,this.normalMap=null,this.normalMapType=Pc,this.normalScale=new n(1,1),this.displacementMap=null,this.displacementScale=1,this.displacementBias=0,this.specularMap=null,this.alphaMap=null,this.envMap=null,this.combine=es,this.reflectivity=1,this.refractionRatio=.98,this.wireframe=!1,this.wireframeLinewidth=1,this.wireframeLinecap="round",this.wireframeLinejoin="round",this.skinning=!1,this.morphTargets=!1,this.morphNormals=!1,this.setValues(t)}function _r(t){wr.call(this),this.defines={TOON:""},this.type="MeshToonMaterial",this.gradientMap=null,this.setValues(t)}function Mr(t){j.call(this),this.type="MeshNormalMaterial",this.bumpMap=null,this.bumpScale=1,this.normalMap=null,this.normalMapType=Pc,this.normalScale=new n(1,1),this.displacementMap=null,this.displacementScale=1,this.displacementBias=0,this.wireframe=!1,this.wireframeLinewidth=1,this.fog=!1,this.lights=!1,this.skinning=!1,this.morphTargets=!1,this.morphNormals=!1,this.setValues(t)}function Er(t){j.call(this),this.type="MeshLambertMaterial",this.color=new x(16777215),this.map=null,this.lightMap=null,this.lightMapIntensity=1,this.aoMap=null,this.aoMapIntensity=1,this.emissive=new x(0),this.emissiveIntensity=1,this.emissiveMap=null,this.specularMap=null,this.alphaMap=null,this.envMap=null,this.combine=es,this.reflectivity=1,this.refractionRatio=.98,this.wireframe=!1,this.wireframeLinewidth=1,this.wireframeLinecap="round",this.wireframeLinejoin="round",this.skinning=!1,this.morphTargets=!1,this.morphNormals=!1,this.setValues(t)}function Tr(t){j.call(this),this.defines={MATCAP:""},this.type="MeshMatcapMaterial",this.color=new x(16777215),this.matcap=null,this.map=null,this.bumpMap=null,this.bumpScale=1,this.normalMap=null,this.normalMapType=Pc,this.normalScale=new n(1,1),this.displacementMap=null,this.displacementScale=1,this.displacementBias=0,this.alphaMap=null,this.skinning=!1,this.morphTargets=!1,this.morphNormals=!1,this.lights=!1,this.setValues(t)}function Sr(t){je.call(this),this.type="LineDashedMaterial",this.scale=1,this.dashSize=3,this.gapSize=1,this.setValues(t)}function Ar(t,e,n,r){this.parameterPositions=t,this._cachedIndex=0,this.resultBuffer=void 0!==r?r:new e.constructor(n),this.sampleValues=e,this.valueSize=n}function Lr(t,e,n,r){Ar.call(this,t,e,n,r),this._weightPrev=-0,this._offsetPrev=-0,this._weightNext=-0,this._offsetNext=-0}function Rr(t,e,n,r){Ar.call(this,t,e,n,r)}function Pr(t,e,n,r){Ar.call(this,t,e,n,r)}function Cr(t,e,n,r){if(void 0===t)throw new Error("THREE.KeyframeTrack: track name is undefined");if(void 0===e||0===e.length)throw new Error("THREE.KeyframeTrack: no keyframes in track named "+t);this.name=t,this.times=dh.convertArray(e,this.TimeBufferType),this.values=dh.convertArray(n,this.ValueBufferType),this.setInterpolation(r||this.DefaultInterpolation)}function Or(t,e,n){Cr.call(this,t,e,n)}function Ir(t,e,n,r){Cr.call(this,t,e,n,r)}function Dr(t,e,n,r){Cr.call(this,t,e,n,r)}function Nr(t,e,n,r){Ar.call(this,t,e,n,r)}function Br(t,e,n,r){Cr.call(this,t,e,n,r)}function zr(t,e,n,r){Cr.call(this,t,e,n,r)}function Ur(t,e,n,r){Cr.call(this,t,e,n,r)}function Gr(t,e,n){this.name=t,this.tracks=n,this.duration=void 0!==e?e:-1,this.uuid=Oc.generateUUID(),this.duration<0&&this.resetDuration()}function Fr(t){switch(t.toLowerCase()){case"scalar":case"double":case"float":case"number":case"integer":return Dr;case"vector":case"vector2":case"vector3":case"vector4":return Ur;case"color":return Ir;case"quaternion":return Br;case"bool":case"boolean":return Or;case"string":return zr}throw new Error("THREE.KeyframeTrack: Unsupported typeName: "+t)}function Hr(t){if(void 0===t.type)throw new Error("THREE.KeyframeTrack: track type undefined, can not parse");var e=Fr(t.type);if(void 0===t.times){var n=[],r=[];dh.flattenJSON(t.keys,n,r,"value"),t.times=n,t.values=r}return void 0!==e.parse?e.parse(t):new e(t.name,t.times,t.values,t.interpolation)}function Vr(t,e,n){var r=this,i=!1,a=0,o=0,s=void 0;this.onStart=void 0,this.onLoad=t,this.onProgress=e,this.onError=n,this.itemStart=function(t){o++,!1===i&&void 0!==r.onStart&&r.onStart(t,a,o),i=!0},this.itemEnd=function(t){a++,void 0!==r.onProgress&&r.onProgress(t,a,o),a===o&&(i=!1,void 0!==r.onLoad&&r.onLoad())},this.itemError=function(t){void 0!==r.onError&&r.onError(t)},this.resolveURL=function(t){return s?s(t):t},this.setURLModifier=function(t){return s=t,this}}function kr(t){this.manager=void 0!==t?t:mh}function jr(t){this.manager=void 0!==t?t:mh}function Wr(t){this.manager=void 0!==t?t:mh,this._parser=null}function qr(t){this.manager=void 0!==t?t:mh,this._parser=null}function Xr(t){this.manager=void 0!==t?t:mh}function Yr(t){this.manager=void 0!==t?t:mh}function Jr(t){this.manager=void 0!==t?t:mh}function Zr(){this.type="Curve",this.arcLengthDivisions=200}function Qr(t,e,n,r,i,a,o,s){Zr.call(this),this.type="EllipseCurve",this.aX=t||0,this.aY=e||0,this.xRadius=n||1,this.yRadius=r||1,this.aStartAngle=i||0,this.aEndAngle=a||2*Math.PI,this.aClockwise=o||!1,this.aRotation=s||0}function Kr(t,e,n,r,i,a){Qr.call(this,t,e,n,n,r,i,a),this.type="ArcCurve"}function $r(){function t(t,a,o,s){e=t,n=o,r=-3*t+3*a-2*o-s,i=2*t-2*a+o+s}var e=0,n=0,r=0,i=0;return{initCatmullRom:function(e,n,r,i,a){t(n,r,a*(r-e),a*(i-n))},initNonuniformCatmullRom:function(e,n,r,i,a,o,s){var c=(n-e)/a-(r-e)/(a+o)+(r-n)/o,h=(r-n)/o-(i-n)/(o+s)+(i-r)/s;c*=o,h*=o,t(n,r,c,h)},calc:function(t){var a=t*t;return e+n*t+r*a+i*(a*t)}}}function ti(t,e,n,r){Zr.call(this),this.type="CatmullRomCurve3",this.points=t||[],this.closed=e||!1,this.curveType=n||"centripetal",this.tension=r||.5}function ei(t,e,n,r,i){var a=.5*(r-e),o=.5*(i-n),s=t*t;return(2*n-2*r+a+o)*(t*s)+(-3*n+3*r-2*a-o)*s+a*t+n}function ni(t,e){var n=1-t;return n*n*e}function ri(t,e){return 2*(1-t)*t*e}function ii(t,e){return t*t*e}function ai(t,e,n,r){return ni(t,e)+ri(t,n)+ii(t,r)}function oi(t,e){var n=1-t;return n*n*n*e}function si(t,e){var n=1-t;return 3*n*n*t*e}function ci(t,e){return 3*(1-t)*t*t*e}function hi(t,e){return t*t*t*e}function li(t,e,n,r,i){return oi(t,e)+si(t,n)+ci(t,r)+hi(t,i)}function ui(t,e,r,i){Zr.call(this),this.type="CubicBezierCurve",this.v0=t||new n,this.v1=e||new n,this.v2=r||new n,this.v3=i||new n}function pi(t,e,n,r){Zr.call(this),this.type="CubicBezierCurve3",this.v0=t||new a,this.v1=e||new a,this.v2=n||new a,this.v3=r||new a}function di(t,e){Zr.call(this),this.type="LineCurve",this.v1=t||new n,this.v2=e||new n}function fi(t,e){Zr.call(this),this.type="LineCurve3",this.v1=t||new a,this.v2=e||new a}function mi(t,e,r){Zr.call(this),this.type="QuadraticBezierCurve",this.v0=t||new n,this.v1=e||new n,this.v2=r||new n}function gi(t,e,n){Zr.call(this),this.type="QuadraticBezierCurve3",this.v0=t||new a,this.v1=e||new a,this.v2=n||new a}function vi(t){Zr.call(this),this.type="SplineCurve",this.points=t||[]}function yi(){Zr.call(this),this.type="CurvePath",this.curves=[],this.autoClose=!1}function xi(t){yi.call(this),this.type="Path",this.currentPoint=new n,t&&this.setFromPoints(t)}function bi(t){xi.call(this,t),this.uuid=Oc.generateUUID(),this.type="Shape",this.holes=[]}function wi(t,e){T.call(this),this.type="Light",this.color=new x(t),this.intensity=void 0!==e?e:1,this.receiveShadow=void 0}function _i(t,e,n){wi.call(this,t,n),this.type="HemisphereLight",this.castShadow=void 0,this.position.copy(T.DefaultUp),this.updateMatrix(),this.groundColor=new x(e)}function Mi(t){this.camera=t,this.bias=0,this.radius=1,this.mapSize=new n(512,512),this.map=null,this.matrix=new r}function Ei(){Mi.call(this,new Ae(50,1,.5,500))}function Ti(t,e,n,r,i,a){wi.call(this,t,e),this.type="SpotLight",this.position.copy(T.DefaultUp),this.updateMatrix(),this.target=new T,Object.defineProperty(this,"power",{get:function(){return this.intensity*Math.PI},set:function(t){this.intensity=t/Math.PI}}),this.distance=void 0!==n?n:0,this.angle=void 0!==r?r:Math.PI/3,this.penumbra=void 0!==i?i:0,this.decay=void 0!==a?a:1,this.shadow=new Ei}function Si(t,e,n,r){wi.call(this,t,e),this.type="PointLight",Object.defineProperty(this,"power",{get:function(){return 4*this.intensity*Math.PI},set:function(t){this.intensity=t/(4*Math.PI)}}),this.distance=void 0!==n?n:0,this.decay=void 0!==r?r:1,this.shadow=new Mi(new Ae(90,1,.5,500))}function Ai(t,e,n,r,i,a){Se.call(this),this.type="OrthographicCamera",this.zoom=1,this.view=null,this.left=void 0!==t?t:-1,this.right=void 0!==e?e:1,this.top=void 0!==n?n:1,this.bottom=void 0!==r?r:-1,this.near=void 0!==i?i:.1,this.far=void 0!==a?a:2e3,this.updateProjectionMatrix()}function Li(){Mi.call(this,new Ai(-5,5,5,-5,.5,500))}function Ri(t,e){wi.call(this,t,e),this.type="DirectionalLight",this.position.copy(T.DefaultUp),this.updateMatrix(),this.target=new T,this.shadow=new Li}function Pi(t,e){wi.call(this,t,e),this.type="AmbientLight",this.castShadow=void 0}function Ci(t,e,n,r){wi.call(this,t,e),this.type="RectAreaLight",this.width=void 0!==n?n:10,this.height=void 0!==r?r:10}function Oi(t){this.manager=void 0!==t?t:mh,this.textures={}}function Ii(t){this.manager=void 0!==t?t:mh}function Di(t){this.manager=void 0!==t?t:mh,this.resourcePath=""}function Ni(t){"undefined"==typeof createImageBitmap&&console.warn("THREE.ImageBitmapLoader: createImageBitmap() not supported."),"undefined"==typeof fetch&&console.warn("THREE.ImageBitmapLoader: fetch() not supported."),this.manager=void 0!==t?t:mh,this.options=void 0}function Bi(){this.type="ShapePath",this.color=new x,this.subPaths=[],this.currentPath=null}function zi(t){this.type="Font",this.data=t}function Ui(t,e,n){for(var r=Array.from?Array.from(t):String(t).split(""),i=e/n.resolution,a=(n.boundingBox.yMax-n.boundingBox.yMin+n.underlineThickness)*i,o=[],s=0,c=0,h=0;h0?1:+t}),"name"in Function.prototype==!1&&Object.defineProperty(Function.prototype,"name",{get:function(){return this.toString().match(/^\s*function\s*([^\(\s]*)/)[1]}}),void 0===Object.assign&&function(){Object.assign=function(t){if(void 0===t||null===t)throw new TypeError("Cannot convert undefined or null to object");for(var e=Object(t),n=1;n>8&255]+t[e>>16&255]+t[e>>24&255]+"-"+t[255&n]+t[n>>8&255]+"-"+t[n>>16&15|64]+t[n>>24&255]+"-"+t[63&r|128]+t[r>>8&255]+"-"+t[r>>16&255]+t[r>>24&255]+t[255&i]+t[i>>8&255]+t[i>>16&255]+t[i>>24&255]).toUpperCase()}}(),clamp:function(t,e,n){return Math.max(e,Math.min(n,t))},euclideanModulo:function(t,e){return(t%e+e)%e},mapLinear:function(t,e,n,r,i){return r+(t-e)*(i-r)/(n-e)},lerp:function(t,e,n){return(1-n)*t+n*e},smoothstep:function(t,e,n){return t<=e?0:t>=n?1:(t=(t-e)/(n-e))*t*(3-2*t)},smootherstep:function(t,e,n){return t<=e?0:t>=n?1:(t=(t-e)/(n-e))*t*t*(t*(6*t-15)+10)},randInt:function(t,e){return t+Math.floor(Math.random()*(e-t+1))},randFloat:function(t,e){return t+Math.random()*(e-t)},randFloatSpread:function(t){return t*(.5-Math.random())},degToRad:function(t){return t*Oc.DEG2RAD},radToDeg:function(t){return t*Oc.RAD2DEG},isPowerOfTwo:function(t){return 0==(t&t-1)&&0!==t},ceilPowerOfTwo:function(t){return Math.pow(2,Math.ceil(Math.log(t)/Math.LN2))},floorPowerOfTwo:function(t){return Math.pow(2,Math.floor(Math.log(t)/Math.LN2))}};Object.defineProperties(n.prototype,{width:{get:function(){return this.x},set:function(t){this.x=t}},height:{get:function(){return this.y},set:function(t){this.y=t}}}),Object.assign(n.prototype,{isVector2:!0,set:function(t,e){return this.x=t,this.y=e,this},setScalar:function(t){return this.x=t,this.y=t,this},setX:function(t){return this.x=t,this},setY:function(t){return this.y=t,this},setComponent:function(t,e){switch(t){case 0:this.x=e;break;case 1:this.y=e;break;default:throw new Error("index is out of range: "+t)}return this},getComponent:function(t){switch(t){case 0:return this.x;case 1:return this.y;default:throw new Error("index is out of range: "+t)}},clone:function(){return new this.constructor(this.x,this.y)},copy:function(t){return this.x=t.x,this.y=t.y,this},add:function(t,e){return void 0!==e?(console.warn("THREE.Vector2: .add() now only accepts one argument. Use .addVectors( a, b ) instead."),this.addVectors(t,e)):(this.x+=t.x,this.y+=t.y,this)},addScalar:function(t){return this.x+=t,this.y+=t,this},addVectors:function(t,e){return this.x=t.x+e.x,this.y=t.y+e.y,this},addScaledVector:function(t,e){return this.x+=t.x*e,this.y+=t.y*e,this},sub:function(t,e){return void 0!==e?(console.warn("THREE.Vector2: .sub() now only accepts one argument. Use .subVectors( a, b ) instead."),this.subVectors(t,e)):(this.x-=t.x,this.y-=t.y,this)},subScalar:function(t){return this.x-=t,this.y-=t,this},subVectors:function(t,e){return this.x=t.x-e.x,this.y=t.y-e.y,this},multiply:function(t){return this.x*=t.x,this.y*=t.y,this},multiplyScalar:function(t){return this.x*=t,this.y*=t,this},divide:function(t){return this.x/=t.x,this.y/=t.y,this},divideScalar:function(t){return this.multiplyScalar(1/t)},applyMatrix3:function(t){var e=this.x,n=this.y,r=t.elements;return this.x=r[0]*e+r[3]*n+r[6],this.y=r[1]*e+r[4]*n+r[7],this},min:function(t){return this.x=Math.min(this.x,t.x),this.y=Math.min(this.y,t.y),this},max:function(t){return this.x=Math.max(this.x,t.x),this.y=Math.max(this.y,t.y),this},clamp:function(t,e){return this.x=Math.max(t.x,Math.min(e.x,this.x)),this.y=Math.max(t.y,Math.min(e.y,this.y)),this},clampScalar:function(){var t=new n,e=new n;return function(n,r){return t.set(n,n),e.set(r,r),this.clamp(t,e)}}(),clampLength:function(t,e){var n=this.length();return this.divideScalar(n||1).multiplyScalar(Math.max(t,Math.min(e,n)))},floor:function(){return this.x=Math.floor(this.x),this.y=Math.floor(this.y),this},ceil:function(){return this.x=Math.ceil(this.x),this.y=Math.ceil(this.y),this},round:function(){return this.x=Math.round(this.x),this.y=Math.round(this.y),this},roundToZero:function(){return this.x=this.x<0?Math.ceil(this.x):Math.floor(this.x),this.y=this.y<0?Math.ceil(this.y):Math.floor(this.y),this},negate:function(){return this.x=-this.x,this.y=-this.y,this},dot:function(t){return this.x*t.x+this.y*t.y},cross:function(t){return this.x*t.y-this.y*t.x},lengthSq:function(){return this.x*this.x+this.y*this.y},length:function(){return Math.sqrt(this.x*this.x+this.y*this.y)},manhattanLength:function(){return Math.abs(this.x)+Math.abs(this.y)},normalize:function(){return this.divideScalar(this.length()||1)},angle:function(){var t=Math.atan2(this.y,this.x);return t<0&&(t+=2*Math.PI),t},distanceTo:function(t){return Math.sqrt(this.distanceToSquared(t))},distanceToSquared:function(t){var e=this.x-t.x,n=this.y-t.y;return e*e+n*n},manhattanDistanceTo:function(t){return Math.abs(this.x-t.x)+Math.abs(this.y-t.y)},setLength:function(t){return this.normalize().multiplyScalar(t)},lerp:function(t,e){return this.x+=(t.x-this.x)*e,this.y+=(t.y-this.y)*e,this},lerpVectors:function(t,e,n){return this.subVectors(e,t).multiplyScalar(n).add(t)},equals:function(t){return t.x===this.x&&t.y===this.y},fromArray:function(t,e){return void 0===e&&(e=0),this.x=t[e],this.y=t[e+1],this},toArray:function(t,e){return void 0===t&&(t=[]),void 0===e&&(e=0),t[e]=this.x,t[e+1]=this.y,t},fromBufferAttribute:function(t,e,n){return void 0!==n&&console.warn("THREE.Vector2: offset has been removed from .fromBufferAttribute()."),this.x=t.getX(e),this.y=t.getY(e),this},rotateAround:function(t,e){var n=Math.cos(e),r=Math.sin(e),i=this.x-t.x,a=this.y-t.y;return this.x=i*n-a*r+t.x,this.y=i*r+a*n+t.y,this}}),Object.assign(r.prototype,{isMatrix4:!0,set:function(t,e,n,r,i,a,o,s,c,h,l,u,p,d,f,m){var g=this.elements;return g[0]=t,g[4]=e,g[8]=n,g[12]=r,g[1]=i,g[5]=a,g[9]=o,g[13]=s,g[2]=c,g[6]=h,g[10]=l,g[14]=u,g[3]=p,g[7]=d,g[11]=f,g[15]=m,this},identity:function(){return this.set(1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1),this},clone:function(){return(new r).fromArray(this.elements)},copy:function(t){var e=this.elements,n=t.elements;return e[0]=n[0],e[1]=n[1],e[2]=n[2],e[3]=n[3],e[4]=n[4],e[5]=n[5],e[6]=n[6],e[7]=n[7],e[8]=n[8],e[9]=n[9],e[10]=n[10],e[11]=n[11],e[12]=n[12],e[13]=n[13],e[14]=n[14],e[15]=n[15],this},copyPosition:function(t){var e=this.elements,n=t.elements;return e[12]=n[12],e[13]=n[13],e[14]=n[14],this},extractBasis:function(t,e,n){return t.setFromMatrixColumn(this,0),e.setFromMatrixColumn(this,1),n.setFromMatrixColumn(this,2),this},makeBasis:function(t,e,n){return this.set(t.x,e.x,n.x,0,t.y,e.y,n.y,0,t.z,e.z,n.z,0,0,0,0,1),this},extractRotation:function(){var t=new a;return function(e){var n=this.elements,r=e.elements,i=1/t.setFromMatrixColumn(e,0).length(),a=1/t.setFromMatrixColumn(e,1).length(),o=1/t.setFromMatrixColumn(e,2).length();return n[0]=r[0]*i,n[1]=r[1]*i,n[2]=r[2]*i,n[3]=0,n[4]=r[4]*a,n[5]=r[5]*a,n[6]=r[6]*a,n[7]=0,n[8]=r[8]*o,n[9]=r[9]*o,n[10]=r[10]*o,n[11]=0,n[12]=0,n[13]=0,n[14]=0,n[15]=1,this}}(),makeRotationFromEuler:function(t){t&&t.isEuler||console.error("THREE.Matrix4: .makeRotationFromEuler() now expects a Euler rotation rather than a Vector3 and order.");var e=this.elements,n=t.x,r=t.y,i=t.z,a=Math.cos(n),o=Math.sin(n),s=Math.cos(r),c=Math.sin(r),h=Math.cos(i),l=Math.sin(i);if("XYZ"===t.order){var u=a*h,p=a*l,d=o*h,f=o*l;e[0]=s*h,e[4]=-s*l,e[8]=c,e[1]=p+d*c,e[5]=u-f*c,e[9]=-o*s,e[2]=f-u*c,e[6]=d+p*c,e[10]=a*s}else if("YXZ"===t.order){var m=s*h,g=s*l,v=c*h,y=c*l;e[0]=m+y*o,e[4]=v*o-g,e[8]=a*c,e[1]=a*l,e[5]=a*h,e[9]=-o,e[2]=g*o-v,e[6]=y+m*o,e[10]=a*s}else if("ZXY"===t.order){var m=s*h,g=s*l,v=c*h,y=c*l;e[0]=m-y*o,e[4]=-a*l,e[8]=v+g*o,e[1]=g+v*o,e[5]=a*h,e[9]=y-m*o,e[2]=-a*c,e[6]=o,e[10]=a*s}else if("ZYX"===t.order){var u=a*h,p=a*l,d=o*h,f=o*l;e[0]=s*h,e[4]=d*c-p,e[8]=u*c+f,e[1]=s*l,e[5]=f*c+u,e[9]=p*c-d,e[2]=-c,e[6]=o*s,e[10]=a*s}else if("YZX"===t.order){var x=a*s,b=a*c,w=o*s,_=o*c;e[0]=s*h,e[4]=_-x*l,e[8]=w*l+b,e[1]=l,e[5]=a*h,e[9]=-o*h,e[2]=-c*h,e[6]=b*l+w,e[10]=x-_*l}else if("XZY"===t.order){var x=a*s,b=a*c,w=o*s,_=o*c;e[0]=s*h,e[4]=-l,e[8]=c*h,e[1]=x*l+_,e[5]=a*h,e[9]=b*l-w,e[2]=w*l-b,e[6]=o*h,e[10]=_*l+x}return e[3]=0,e[7]=0,e[11]=0,e[12]=0,e[13]=0,e[14]=0,e[15]=1,this},makeRotationFromQuaternion:function(){var t=new a(0,0,0),e=new a(1,1,1);return function(n){return this.compose(t,n,e)}}(),lookAt:function(){var t=new a,e=new a,n=new a;return function(r,i,a){var o=this.elements;return n.subVectors(r,i),0===n.lengthSq()&&(n.z=1),n.normalize(),t.crossVectors(a,n),0===t.lengthSq()&&(1===Math.abs(a.z)?n.x+=1e-4:n.z+=1e-4,n.normalize(),t.crossVectors(a,n)),t.normalize(),e.crossVectors(n,t),o[0]=t.x,o[4]=e.x,o[8]=n.x,o[1]=t.y,o[5]=e.y,o[9]=n.y,o[2]=t.z,o[6]=e.z,o[10]=n.z,this}}(),multiply:function(t,e){return void 0!==e?(console.warn("THREE.Matrix4: .multiply() now only accepts one argument. Use .multiplyMatrices( a, b ) instead."),this.multiplyMatrices(t,e)):this.multiplyMatrices(this,t)},premultiply:function(t){return this.multiplyMatrices(t,this)},multiplyMatrices:function(t,e){var n=t.elements,r=e.elements,i=this.elements,a=n[0],o=n[4],s=n[8],c=n[12],h=n[1],l=n[5],u=n[9],p=n[13],d=n[2],f=n[6],m=n[10],g=n[14],v=n[3],y=n[7],x=n[11],b=n[15],w=r[0],_=r[4],M=r[8],E=r[12],T=r[1],S=r[5],A=r[9],L=r[13],R=r[2],P=r[6],C=r[10],O=r[14],I=r[3],D=r[7],N=r[11],B=r[15];return i[0]=a*w+o*T+s*R+c*I,i[4]=a*_+o*S+s*P+c*D,i[8]=a*M+o*A+s*C+c*N,i[12]=a*E+o*L+s*O+c*B,i[1]=h*w+l*T+u*R+p*I,i[5]=h*_+l*S+u*P+p*D,i[9]=h*M+l*A+u*C+p*N,i[13]=h*E+l*L+u*O+p*B,i[2]=d*w+f*T+m*R+g*I,i[6]=d*_+f*S+m*P+g*D,i[10]=d*M+f*A+m*C+g*N,i[14]=d*E+f*L+m*O+g*B,i[3]=v*w+y*T+x*R+b*I,i[7]=v*_+y*S+x*P+b*D,i[11]=v*M+y*A+x*C+b*N,i[15]=v*E+y*L+x*O+b*B,this},multiplyScalar:function(t){var e=this.elements;return e[0]*=t,e[4]*=t,e[8]*=t,e[12]*=t,e[1]*=t,e[5]*=t,e[9]*=t,e[13]*=t,e[2]*=t,e[6]*=t,e[10]*=t,e[14]*=t,e[3]*=t,e[7]*=t,e[11]*=t,e[15]*=t,this},applyToBufferAttribute:function(){var t=new a;return function(e){for(var n=0,r=e.count;n=0?1:-1,y=1-g*g;if(y>Number.EPSILON){var x=Math.sqrt(y),b=Math.atan2(x,g*v);m=Math.sin(m*b)/x,o=Math.sin(o*b)/x}var w=o*v;if(s=s*m+u*w,c=c*m+p*w,h=h*m+d*w,l=l*m+f*w,m===1-o){var _=1/Math.sqrt(s*s+c*c+h*h+l*l);s*=_,c*=_,h*=_,l*=_}}t[e]=s,t[e+1]=c,t[e+2]=h,t[e+3]=l}}),Object.defineProperties(i.prototype,{x:{get:function(){return this._x},set:function(t){this._x=t,this.onChangeCallback()}},y:{get:function(){return this._y},set:function(t){this._y=t,this.onChangeCallback()}},z:{get:function(){return this._z},set:function(t){this._z=t,this.onChangeCallback()}},w:{get:function(){return this._w},set:function(t){this._w=t,this.onChangeCallback()}}}),Object.assign(i.prototype,{isQuaternion:!0,set:function(t,e,n,r){return this._x=t,this._y=e,this._z=n,this._w=r,this.onChangeCallback(),this},clone:function(){return new this.constructor(this._x,this._y,this._z,this._w)},copy:function(t){return this._x=t.x,this._y=t.y,this._z=t.z,this._w=t.w,this.onChangeCallback(),this},setFromEuler:function(t,e){if(!t||!t.isEuler)throw new Error("THREE.Quaternion: .setFromEuler() now expects an Euler rotation rather than a Vector3 and order.");var n=t._x,r=t._y,i=t._z,a=t.order,o=Math.cos,s=Math.sin,c=o(n/2),h=o(r/2),l=o(i/2),u=s(n/2),p=s(r/2),d=s(i/2);return"XYZ"===a?(this._x=u*h*l+c*p*d,this._y=c*p*l-u*h*d,this._z=c*h*d+u*p*l,this._w=c*h*l-u*p*d):"YXZ"===a?(this._x=u*h*l+c*p*d,this._y=c*p*l-u*h*d,this._z=c*h*d-u*p*l,this._w=c*h*l+u*p*d):"ZXY"===a?(this._x=u*h*l-c*p*d,this._y=c*p*l+u*h*d,this._z=c*h*d+u*p*l,this._w=c*h*l-u*p*d):"ZYX"===a?(this._x=u*h*l-c*p*d,this._y=c*p*l+u*h*d,this._z=c*h*d-u*p*l,this._w=c*h*l+u*p*d):"YZX"===a?(this._x=u*h*l+c*p*d,this._y=c*p*l+u*h*d,this._z=c*h*d-u*p*l,this._w=c*h*l-u*p*d):"XZY"===a&&(this._x=u*h*l-c*p*d,this._y=c*p*l-u*h*d,this._z=c*h*d+u*p*l,this._w=c*h*l+u*p*d),!1!==e&&this.onChangeCallback(),this},setFromAxisAngle:function(t,e){var n=e/2,r=Math.sin(n);return this._x=t.x*r,this._y=t.y*r,this._z=t.z*r,this._w=Math.cos(n),this.onChangeCallback(),this},setFromRotationMatrix:function(t){var e,n=t.elements,r=n[0],i=n[4],a=n[8],o=n[1],s=n[5],c=n[9],h=n[2],l=n[6],u=n[10],p=r+s+u;return p>0?(e=.5/Math.sqrt(p+1),this._w=.25/e,this._x=(l-c)*e,this._y=(a-h)*e,this._z=(o-i)*e):r>s&&r>u?(e=2*Math.sqrt(1+r-s-u),this._w=(l-c)/e,this._x=.25*e,this._y=(i+o)/e,this._z=(a+h)/e):s>u?(e=2*Math.sqrt(1+s-r-u),this._w=(a-h)/e,this._x=(i+o)/e,this._y=.25*e,this._z=(c+l)/e):(e=2*Math.sqrt(1+u-r-s),this._w=(o-i)/e,this._x=(a+h)/e,this._y=(c+l)/e,this._z=.25*e),this.onChangeCallback(),this},setFromUnitVectors:function(){var t,e=new a;return function(n,r){return void 0===e&&(e=new a),t=n.dot(r)+1,t<1e-6?(t=0,Math.abs(n.x)>Math.abs(n.z)?e.set(-n.y,n.x,0):e.set(0,-n.z,n.y)):e.crossVectors(n,r),this._x=e.x,this._y=e.y,this._z=e.z,this._w=t,this.normalize()}}(),angleTo:function(t){return 2*Math.acos(Math.abs(Oc.clamp(this.dot(t),-1,1)))},rotateTowards:function(t,e){var n=this.angleTo(t);if(0===n)return this;var r=Math.min(1,e/n);return this.slerp(t,r),this},inverse:function(){return this.conjugate()},conjugate:function(){return this._x*=-1,this._y*=-1, +this._z*=-1,this.onChangeCallback(),this},dot:function(t){return this._x*t._x+this._y*t._y+this._z*t._z+this._w*t._w},lengthSq:function(){return this._x*this._x+this._y*this._y+this._z*this._z+this._w*this._w},length:function(){return Math.sqrt(this._x*this._x+this._y*this._y+this._z*this._z+this._w*this._w)},normalize:function(){var t=this.length();return 0===t?(this._x=0,this._y=0,this._z=0,this._w=1):(t=1/t,this._x=this._x*t,this._y=this._y*t,this._z=this._z*t,this._w=this._w*t),this.onChangeCallback(),this},multiply:function(t,e){return void 0!==e?(console.warn("THREE.Quaternion: .multiply() now only accepts one argument. Use .multiplyQuaternions( a, b ) instead."),this.multiplyQuaternions(t,e)):this.multiplyQuaternions(this,t)},premultiply:function(t){return this.multiplyQuaternions(t,this)},multiplyQuaternions:function(t,e){var n=t._x,r=t._y,i=t._z,a=t._w,o=e._x,s=e._y,c=e._z,h=e._w;return this._x=n*h+a*o+r*c-i*s,this._y=r*h+a*s+i*o-n*c,this._z=i*h+a*c+n*s-r*o,this._w=a*h-n*o-r*s-i*c,this.onChangeCallback(),this},slerp:function(t,e){if(0===e)return this;if(1===e)return this.copy(t);var n=this._x,r=this._y,i=this._z,a=this._w,o=a*t._w+n*t._x+r*t._y+i*t._z;if(o<0?(this._w=-t._w,this._x=-t._x,this._y=-t._y,this._z=-t._z,o=-o):this.copy(t),o>=1)return this._w=a,this._x=n,this._y=r,this._z=i,this;var s=1-o*o;if(s<=Number.EPSILON){var c=1-e;return this._w=c*a+e*this._w,this._x=c*n+e*this._x,this._y=c*r+e*this._y,this._z=c*i+e*this._z,this.normalize()}var h=Math.sqrt(s),l=Math.atan2(h,o),u=Math.sin((1-e)*l)/h,p=Math.sin(e*l)/h;return this._w=a*u+this._w*p,this._x=n*u+this._x*p,this._y=r*u+this._y*p,this._z=i*u+this._z*p,this.onChangeCallback(),this},equals:function(t){return t._x===this._x&&t._y===this._y&&t._z===this._z&&t._w===this._w},fromArray:function(t,e){return void 0===e&&(e=0),this._x=t[e],this._y=t[e+1],this._z=t[e+2],this._w=t[e+3],this.onChangeCallback(),this},toArray:function(t,e){return void 0===t&&(t=[]),void 0===e&&(e=0),t[e]=this._x,t[e+1]=this._y,t[e+2]=this._z,t[e+3]=this._w,t},onChange:function(t){return this.onChangeCallback=t,this},onChangeCallback:function(){}}),Object.assign(a.prototype,{isVector3:!0,set:function(t,e,n){return this.x=t,this.y=e,this.z=n,this},setScalar:function(t){return this.x=t,this.y=t,this.z=t,this},setX:function(t){return this.x=t,this},setY:function(t){return this.y=t,this},setZ:function(t){return this.z=t,this},setComponent:function(t,e){switch(t){case 0:this.x=e;break;case 1:this.y=e;break;case 2:this.z=e;break;default:throw new Error("index is out of range: "+t)}return this},getComponent:function(t){switch(t){case 0:return this.x;case 1:return this.y;case 2:return this.z;default:throw new Error("index is out of range: "+t)}},clone:function(){return new this.constructor(this.x,this.y,this.z)},copy:function(t){return this.x=t.x,this.y=t.y,this.z=t.z,this},add:function(t,e){return void 0!==e?(console.warn("THREE.Vector3: .add() now only accepts one argument. Use .addVectors( a, b ) instead."),this.addVectors(t,e)):(this.x+=t.x,this.y+=t.y,this.z+=t.z,this)},addScalar:function(t){return this.x+=t,this.y+=t,this.z+=t,this},addVectors:function(t,e){return this.x=t.x+e.x,this.y=t.y+e.y,this.z=t.z+e.z,this},addScaledVector:function(t,e){return this.x+=t.x*e,this.y+=t.y*e,this.z+=t.z*e,this},sub:function(t,e){return void 0!==e?(console.warn("THREE.Vector3: .sub() now only accepts one argument. Use .subVectors( a, b ) instead."),this.subVectors(t,e)):(this.x-=t.x,this.y-=t.y,this.z-=t.z,this)},subScalar:function(t){return this.x-=t,this.y-=t,this.z-=t,this},subVectors:function(t,e){return this.x=t.x-e.x,this.y=t.y-e.y,this.z=t.z-e.z,this},multiply:function(t,e){return void 0!==e?(console.warn("THREE.Vector3: .multiply() now only accepts one argument. Use .multiplyVectors( a, b ) instead."),this.multiplyVectors(t,e)):(this.x*=t.x,this.y*=t.y,this.z*=t.z,this)},multiplyScalar:function(t){return this.x*=t,this.y*=t,this.z*=t,this},multiplyVectors:function(t,e){return this.x=t.x*e.x,this.y=t.y*e.y,this.z=t.z*e.z,this},applyEuler:function(){var t=new i;return function(e){return e&&e.isEuler||console.error("THREE.Vector3: .applyEuler() now expects an Euler rotation rather than a Vector3 and order."),this.applyQuaternion(t.setFromEuler(e))}}(),applyAxisAngle:function(){var t=new i;return function(e,n){return this.applyQuaternion(t.setFromAxisAngle(e,n))}}(),applyMatrix3:function(t){var e=this.x,n=this.y,r=this.z,i=t.elements;return this.x=i[0]*e+i[3]*n+i[6]*r,this.y=i[1]*e+i[4]*n+i[7]*r,this.z=i[2]*e+i[5]*n+i[8]*r,this},applyMatrix4:function(t){var e=this.x,n=this.y,r=this.z,i=t.elements,a=1/(i[3]*e+i[7]*n+i[11]*r+i[15]);return this.x=(i[0]*e+i[4]*n+i[8]*r+i[12])*a,this.y=(i[1]*e+i[5]*n+i[9]*r+i[13])*a,this.z=(i[2]*e+i[6]*n+i[10]*r+i[14])*a,this},applyQuaternion:function(t){var e=this.x,n=this.y,r=this.z,i=t.x,a=t.y,o=t.z,s=t.w,c=s*e+a*r-o*n,h=s*n+o*e-i*r,l=s*r+i*n-a*e,u=-i*e-a*n-o*r;return this.x=c*s+u*-i+h*-o-l*-a,this.y=h*s+u*-a+l*-i-c*-o,this.z=l*s+u*-o+c*-a-h*-i,this},project:function(t){return this.applyMatrix4(t.matrixWorldInverse).applyMatrix4(t.projectionMatrix)},unproject:function(){var t=new r;return function(e){return this.applyMatrix4(t.getInverse(e.projectionMatrix)).applyMatrix4(e.matrixWorld)}}(),transformDirection:function(t){var e=this.x,n=this.y,r=this.z,i=t.elements;return this.x=i[0]*e+i[4]*n+i[8]*r,this.y=i[1]*e+i[5]*n+i[9]*r,this.z=i[2]*e+i[6]*n+i[10]*r,this.normalize()},divide:function(t){return this.x/=t.x,this.y/=t.y,this.z/=t.z,this},divideScalar:function(t){return this.multiplyScalar(1/t)},min:function(t){return this.x=Math.min(this.x,t.x),this.y=Math.min(this.y,t.y),this.z=Math.min(this.z,t.z),this},max:function(t){return this.x=Math.max(this.x,t.x),this.y=Math.max(this.y,t.y),this.z=Math.max(this.z,t.z),this},clamp:function(t,e){return this.x=Math.max(t.x,Math.min(e.x,this.x)),this.y=Math.max(t.y,Math.min(e.y,this.y)),this.z=Math.max(t.z,Math.min(e.z,this.z)),this},clampScalar:function(){var t=new a,e=new a;return function(n,r){return t.set(n,n,n),e.set(r,r,r),this.clamp(t,e)}}(),clampLength:function(t,e){var n=this.length();return this.divideScalar(n||1).multiplyScalar(Math.max(t,Math.min(e,n)))},floor:function(){return this.x=Math.floor(this.x),this.y=Math.floor(this.y),this.z=Math.floor(this.z),this},ceil:function(){return this.x=Math.ceil(this.x),this.y=Math.ceil(this.y),this.z=Math.ceil(this.z),this},round:function(){return this.x=Math.round(this.x),this.y=Math.round(this.y),this.z=Math.round(this.z),this},roundToZero:function(){return this.x=this.x<0?Math.ceil(this.x):Math.floor(this.x),this.y=this.y<0?Math.ceil(this.y):Math.floor(this.y),this.z=this.z<0?Math.ceil(this.z):Math.floor(this.z),this},negate:function(){return this.x=-this.x,this.y=-this.y,this.z=-this.z,this},dot:function(t){return this.x*t.x+this.y*t.y+this.z*t.z},lengthSq:function(){return this.x*this.x+this.y*this.y+this.z*this.z},length:function(){return Math.sqrt(this.x*this.x+this.y*this.y+this.z*this.z)},manhattanLength:function(){return Math.abs(this.x)+Math.abs(this.y)+Math.abs(this.z)},normalize:function(){return this.divideScalar(this.length()||1)},setLength:function(t){return this.normalize().multiplyScalar(t)},lerp:function(t,e){return this.x+=(t.x-this.x)*e,this.y+=(t.y-this.y)*e,this.z+=(t.z-this.z)*e,this},lerpVectors:function(t,e,n){return this.subVectors(e,t).multiplyScalar(n).add(t)},cross:function(t,e){return void 0!==e?(console.warn("THREE.Vector3: .cross() now only accepts one argument. Use .crossVectors( a, b ) instead."),this.crossVectors(t,e)):this.crossVectors(this,t)},crossVectors:function(t,e){var n=t.x,r=t.y,i=t.z,a=e.x,o=e.y,s=e.z;return this.x=r*s-i*o,this.y=i*a-n*s,this.z=n*o-r*a,this},projectOnVector:function(t){var e=t.dot(this)/t.lengthSq();return this.copy(t).multiplyScalar(e)},projectOnPlane:function(){var t=new a;return function(e){return t.copy(this).projectOnVector(e),this.sub(t)}}(),reflect:function(){var t=new a;return function(e){return this.sub(t.copy(e).multiplyScalar(2*this.dot(e)))}}(),angleTo:function(t){var e=this.dot(t)/Math.sqrt(this.lengthSq()*t.lengthSq());return Math.acos(Oc.clamp(e,-1,1))},distanceTo:function(t){return Math.sqrt(this.distanceToSquared(t))},distanceToSquared:function(t){var e=this.x-t.x,n=this.y-t.y,r=this.z-t.z;return e*e+n*n+r*r},manhattanDistanceTo:function(t){return Math.abs(this.x-t.x)+Math.abs(this.y-t.y)+Math.abs(this.z-t.z)},setFromSpherical:function(t){return this.setFromSphericalCoords(t.radius,t.phi,t.theta)},setFromSphericalCoords:function(t,e,n){var r=Math.sin(e)*t;return this.x=r*Math.sin(n),this.y=Math.cos(e)*t,this.z=r*Math.cos(n),this},setFromCylindrical:function(t){return this.setFromCylindricalCoords(t.radius,t.theta,t.y)},setFromCylindricalCoords:function(t,e,n){return this.x=t*Math.sin(e),this.y=n,this.z=t*Math.cos(e),this},setFromMatrixPosition:function(t){var e=t.elements;return this.x=e[12],this.y=e[13],this.z=e[14],this},setFromMatrixScale:function(t){var e=this.setFromMatrixColumn(t,0).length(),n=this.setFromMatrixColumn(t,1).length(),r=this.setFromMatrixColumn(t,2).length();return this.x=e,this.y=n,this.z=r,this},setFromMatrixColumn:function(t,e){return this.fromArray(t.elements,4*e)},equals:function(t){return t.x===this.x&&t.y===this.y&&t.z===this.z},fromArray:function(t,e){return void 0===e&&(e=0),this.x=t[e],this.y=t[e+1],this.z=t[e+2],this},toArray:function(t,e){return void 0===t&&(t=[]),void 0===e&&(e=0),t[e]=this.x,t[e+1]=this.y,t[e+2]=this.z,t},fromBufferAttribute:function(t,e,n){return void 0!==n&&console.warn("THREE.Vector3: offset has been removed from .fromBufferAttribute()."),this.x=t.getX(e),this.y=t.getY(e),this.z=t.getZ(e),this}}),Object.assign(o.prototype,{isMatrix3:!0,set:function(t,e,n,r,i,a,o,s,c){var h=this.elements;return h[0]=t,h[1]=r,h[2]=o,h[3]=e,h[4]=i,h[5]=s,h[6]=n,h[7]=a,h[8]=c,this},identity:function(){return this.set(1,0,0,0,1,0,0,0,1),this},clone:function(){return(new this.constructor).fromArray(this.elements)},copy:function(t){var e=this.elements,n=t.elements;return e[0]=n[0],e[1]=n[1],e[2]=n[2],e[3]=n[3],e[4]=n[4],e[5]=n[5],e[6]=n[6],e[7]=n[7],e[8]=n[8],this},setFromMatrix4:function(t){var e=t.elements;return this.set(e[0],e[4],e[8],e[1],e[5],e[9],e[2],e[6],e[10]),this},applyToBufferAttribute:function(){var t=new a;return function(e){for(var n=0,r=e.count;n2048||e.height>2048?e.toDataURL("image/jpeg",.6):e.toDataURL("image/png")}},Nc=0;s.DEFAULT_IMAGE=void 0,s.DEFAULT_MAPPING=300,s.prototype=Object.assign(Object.create(e.prototype),{constructor:s,isTexture:!0,updateMatrix:function(){this.matrix.setUvTransform(this.offset.x,this.offset.y,this.repeat.x,this.repeat.y,this.rotation,this.center.x,this.center.y)},clone:function(){return(new this.constructor).copy(this)},copy:function(t){return this.name=t.name,this.image=t.image,this.mipmaps=t.mipmaps.slice(0),this.mapping=t.mapping,this.wrapS=t.wrapS,this.wrapT=t.wrapT,this.magFilter=t.magFilter,this.minFilter=t.minFilter,this.anisotropy=t.anisotropy,this.format=t.format,this.type=t.type,this.offset.copy(t.offset),this.repeat.copy(t.repeat),this.center.copy(t.center),this.rotation=t.rotation,this.matrixAutoUpdate=t.matrixAutoUpdate,this.matrix.copy(t.matrix),this.generateMipmaps=t.generateMipmaps,this.premultiplyAlpha=t.premultiplyAlpha,this.flipY=t.flipY,this.unpackAlignment=t.unpackAlignment,this.encoding=t.encoding,this},toJSON:function(t){var e=void 0===t||"string"==typeof t;if(!e&&void 0!==t.textures[this.uuid])return t.textures[this.uuid];var n={metadata:{version:4.5,type:"Texture",generator:"Texture.toJSON"},uuid:this.uuid,name:this.name,mapping:this.mapping,repeat:[this.repeat.x,this.repeat.y],offset:[this.offset.x,this.offset.y],center:[this.center.x,this.center.y],rotation:this.rotation,wrap:[this.wrapS,this.wrapT],format:this.format,type:this.type,encoding:this.encoding,minFilter:this.minFilter,magFilter:this.magFilter,anisotropy:this.anisotropy,flipY:this.flipY,premultiplyAlpha:this.premultiplyAlpha,unpackAlignment:this.unpackAlignment};if(void 0!==this.image){var r=this.image;if(void 0===r.uuid&&(r.uuid=Oc.generateUUID()),!e&&void 0===t.images[r.uuid]){var i;if(Array.isArray(r)){i=[];for(var a=0,o=r.length;a1)switch(this.wrapS){case vs:t.x=t.x-Math.floor(t.x);break;case ys:t.x=t.x<0?0:1;break;case xs:1===Math.abs(Math.floor(t.x)%2)?t.x=Math.ceil(t.x)-t.x:t.x=t.x-Math.floor(t.x)}if(t.y<0||t.y>1)switch(this.wrapT){case vs:t.y=t.y-Math.floor(t.y);break;case ys:t.y=t.y<0?0:1;break;case xs:1===Math.abs(Math.floor(t.y)%2)?t.y=Math.ceil(t.y)-t.y:t.y=t.y-Math.floor(t.y)}return this.flipY&&(t.y=1-t.y),t}}),Object.defineProperty(s.prototype,"needsUpdate",{set:function(t){!0===t&&this.version++}}),Object.assign(c.prototype,{isVector4:!0,set:function(t,e,n,r){return this.x=t,this.y=e,this.z=n,this.w=r,this},setScalar:function(t){return this.x=t,this.y=t,this.z=t,this.w=t,this},setX:function(t){return this.x=t,this},setY:function(t){return this.y=t,this},setZ:function(t){return this.z=t,this},setW:function(t){return this.w=t,this},setComponent:function(t,e){switch(t){case 0:this.x=e;break;case 1:this.y=e;break;case 2:this.z=e;break;case 3:this.w=e;break;default:throw new Error("index is out of range: "+t)}return this},getComponent:function(t){switch(t){case 0:return this.x;case 1:return this.y;case 2:return this.z;case 3:return this.w;default:throw new Error("index is out of range: "+t)}},clone:function(){return new this.constructor(this.x,this.y,this.z,this.w)},copy:function(t){return this.x=t.x,this.y=t.y,this.z=t.z,this.w=void 0!==t.w?t.w:1,this},add:function(t,e){return void 0!==e?(console.warn("THREE.Vector4: .add() now only accepts one argument. Use .addVectors( a, b ) instead."),this.addVectors(t,e)):(this.x+=t.x,this.y+=t.y,this.z+=t.z,this.w+=t.w,this)},addScalar:function(t){return this.x+=t,this.y+=t,this.z+=t,this.w+=t,this},addVectors:function(t,e){return this.x=t.x+e.x,this.y=t.y+e.y,this.z=t.z+e.z,this.w=t.w+e.w,this},addScaledVector:function(t,e){return this.x+=t.x*e,this.y+=t.y*e,this.z+=t.z*e,this.w+=t.w*e,this},sub:function(t,e){return void 0!==e?(console.warn("THREE.Vector4: .sub() now only accepts one argument. Use .subVectors( a, b ) instead."),this.subVectors(t,e)):(this.x-=t.x,this.y-=t.y,this.z-=t.z,this.w-=t.w,this)},subScalar:function(t){return this.x-=t,this.y-=t,this.z-=t,this.w-=t,this},subVectors:function(t,e){return this.x=t.x-e.x,this.y=t.y-e.y,this.z=t.z-e.z,this.w=t.w-e.w,this},multiplyScalar:function(t){return this.x*=t,this.y*=t,this.z*=t,this.w*=t,this},applyMatrix4:function(t){var e=this.x,n=this.y,r=this.z,i=this.w,a=t.elements;return this.x=a[0]*e+a[4]*n+a[8]*r+a[12]*i,this.y=a[1]*e+a[5]*n+a[9]*r+a[13]*i,this.z=a[2]*e+a[6]*n+a[10]*r+a[14]*i,this.w=a[3]*e+a[7]*n+a[11]*r+a[15]*i,this},divideScalar:function(t){return this.multiplyScalar(1/t)},setAxisAngleFromQuaternion:function(t){this.w=2*Math.acos(t.w);var e=Math.sqrt(1-t.w*t.w);return e<1e-4?(this.x=1,this.y=0,this.z=0):(this.x=t.x/e,this.y=t.y/e,this.z=t.z/e),this},setAxisAngleFromRotationMatrix:function(t){var e,n,r,i,a=t.elements,o=a[0],s=a[4],c=a[8],h=a[1],l=a[5],u=a[9],p=a[2],d=a[6],f=a[10];if(Math.abs(s-h)<.01&&Math.abs(c-p)<.01&&Math.abs(u-d)<.01){if(Math.abs(s+h)<.1&&Math.abs(c+p)<.1&&Math.abs(u+d)<.1&&Math.abs(o+l+f-3)<.1)return this.set(1,0,0,0),this;e=Math.PI;var m=(o+1)/2,g=(l+1)/2,v=(f+1)/2,y=(s+h)/4,x=(c+p)/4,b=(u+d)/4;return m>g&&m>v?m<.01?(n=0,r=.707106781,i=.707106781):(n=Math.sqrt(m),r=y/n,i=x/n):g>v?g<.01?(n=.707106781,r=0,i=.707106781):(r=Math.sqrt(g),n=y/r,i=b/r):v<.01?(n=.707106781,r=.707106781,i=0):(i=Math.sqrt(v),n=x/i,r=b/i),this.set(n,r,i,e),this}var w=Math.sqrt((d-u)*(d-u)+(c-p)*(c-p)+(h-s)*(h-s));return Math.abs(w)<.001&&(w=1),this.x=(d-u)/w,this.y=(c-p)/w,this.z=(h-s)/w,this.w=Math.acos((o+l+f-1)/2),this},min:function(t){return this.x=Math.min(this.x,t.x),this.y=Math.min(this.y,t.y),this.z=Math.min(this.z,t.z),this.w=Math.min(this.w,t.w),this},max:function(t){return this.x=Math.max(this.x,t.x),this.y=Math.max(this.y,t.y),this.z=Math.max(this.z,t.z),this.w=Math.max(this.w,t.w),this},clamp:function(t,e){return this.x=Math.max(t.x,Math.min(e.x,this.x)),this.y=Math.max(t.y,Math.min(e.y,this.y)),this.z=Math.max(t.z,Math.min(e.z,this.z)),this.w=Math.max(t.w,Math.min(e.w,this.w)),this},clampScalar:function(){var t,e;return function(n,r){return void 0===t&&(t=new c,e=new c),t.set(n,n,n,n),e.set(r,r,r,r),this.clamp(t,e)}}(),clampLength:function(t,e){var n=this.length();return this.divideScalar(n||1).multiplyScalar(Math.max(t,Math.min(e,n)))},floor:function(){return this.x=Math.floor(this.x),this.y=Math.floor(this.y),this.z=Math.floor(this.z),this.w=Math.floor(this.w),this},ceil:function(){return this.x=Math.ceil(this.x),this.y=Math.ceil(this.y),this.z=Math.ceil(this.z),this.w=Math.ceil(this.w),this},round:function(){return this.x=Math.round(this.x),this.y=Math.round(this.y),this.z=Math.round(this.z),this.w=Math.round(this.w),this},roundToZero:function(){return this.x=this.x<0?Math.ceil(this.x):Math.floor(this.x),this.y=this.y<0?Math.ceil(this.y):Math.floor(this.y),this.z=this.z<0?Math.ceil(this.z):Math.floor(this.z),this.w=this.w<0?Math.ceil(this.w):Math.floor(this.w),this},negate:function(){return this.x=-this.x,this.y=-this.y,this.z=-this.z,this.w=-this.w,this},dot:function(t){return this.x*t.x+this.y*t.y+this.z*t.z+this.w*t.w},lengthSq:function(){return this.x*this.x+this.y*this.y+this.z*this.z+this.w*this.w},length:function(){return Math.sqrt(this.x*this.x+this.y*this.y+this.z*this.z+this.w*this.w)},manhattanLength:function(){return Math.abs(this.x)+Math.abs(this.y)+Math.abs(this.z)+Math.abs(this.w)},normalize:function(){return this.divideScalar(this.length()||1)},setLength:function(t){return this.normalize().multiplyScalar(t)},lerp:function(t,e){return this.x+=(t.x-this.x)*e,this.y+=(t.y-this.y)*e,this.z+=(t.z-this.z)*e,this.w+=(t.w-this.w)*e,this},lerpVectors:function(t,e,n){return this.subVectors(e,t).multiplyScalar(n).add(t)},equals:function(t){return t.x===this.x&&t.y===this.y&&t.z===this.z&&t.w===this.w},fromArray:function(t,e){return void 0===e&&(e=0),this.x=t[e],this.y=t[e+1],this.z=t[e+2],this.w=t[e+3],this},toArray:function(t,e){return void 0===t&&(t=[]),void 0===e&&(e=0),t[e]=this.x,t[e+1]=this.y,t[e+2]=this.z,t[e+3]=this.w,t},fromBufferAttribute:function(t,e,n){return void 0!==n&&console.warn("THREE.Vector4: offset has been removed from .fromBufferAttribute()."),this.x=t.getX(e),this.y=t.getY(e),this.z=t.getZ(e),this.w=t.getW(e),this}}),h.prototype=Object.assign(Object.create(e.prototype),{constructor:h,isWebGLRenderTarget:!0,setSize:function(t,e){this.width===t&&this.height===e||(this.width=t,this.height=e,this.dispose()),this.viewport.set(0,0,t,e),this.scissor.set(0,0,t,e)},clone:function(){return(new this.constructor).copy(this)},copy:function(t){return this.width=t.width,this.height=t.height,this.viewport.copy(t.viewport),this.texture=t.texture.clone(),this.depthBuffer=t.depthBuffer,this.stencilBuffer=t.stencilBuffer,this.depthTexture=t.depthTexture,this},dispose:function(){this.dispatchEvent({type:"dispose"})}}),l.prototype=Object.assign(Object.create(h.prototype),{constructor:l,isWebGLMultisampleRenderTarget:!0,copy:function(t){return h.prototype.copy.call(this,t),this.samples=t.samples,this}}),u.prototype=Object.create(h.prototype),u.prototype.constructor=u,u.prototype.isWebGLRenderTargetCube=!0,p.prototype=Object.create(s.prototype),p.prototype.constructor=p,p.prototype.isDataTexture=!0,Object.assign(d.prototype,{isBox3:!0,set:function(t,e){return this.min.copy(t),this.max.copy(e),this},setFromArray:function(t){for(var e=1/0,n=1/0,r=1/0,i=-1/0,a=-1/0,o=-1/0,s=0,c=t.length;si&&(i=h),l>a&&(a=l),u>o&&(o=u)}return this.min.set(e,n,r),this.max.set(i,a,o),this},setFromBufferAttribute:function(t){for(var e=1/0,n=1/0,r=1/0,i=-1/0,a=-1/0,o=-1/0,s=0,c=t.count;si&&(i=h),l>a&&(a=l),u>o&&(o=u)}return this.min.set(e,n,r),this.max.set(i,a,o),this},setFromPoints:function(t){this.makeEmpty();for(var e=0,n=t.length;ethis.max.x||t.ythis.max.y||t.zthis.max.z)},containsBox:function(t){return this.min.x<=t.min.x&&t.max.x<=this.max.x&&this.min.y<=t.min.y&&t.max.y<=this.max.y&&this.min.z<=t.min.z&&t.max.z<=this.max.z},getParameter:function(t,e){return void 0===e&&(console.warn("THREE.Box3: .getParameter() target is now required"),e=new a),e.set((t.x-this.min.x)/(this.max.x-this.min.x),(t.y-this.min.y)/(this.max.y-this.min.y),(t.z-this.min.z)/(this.max.z-this.min.z))},intersectsBox:function(t){return!(t.max.xthis.max.x||t.max.ythis.max.y||t.max.zthis.max.z)},intersectsSphere:function(){var t=new a;return function(e){return this.clampPoint(e.center,t),t.distanceToSquared(e.center)<=e.radius*e.radius}}(),intersectsPlane:function(t){var e,n;return t.normal.x>0?(e=t.normal.x*this.min.x,n=t.normal.x*this.max.x):(e=t.normal.x*this.max.x,n=t.normal.x*this.min.x),t.normal.y>0?(e+=t.normal.y*this.min.y,n+=t.normal.y*this.max.y):(e+=t.normal.y*this.max.y,n+=t.normal.y*this.min.y),t.normal.z>0?(e+=t.normal.z*this.min.z,n+=t.normal.z*this.max.z):(e+=t.normal.z*this.max.z,n+=t.normal.z*this.min.z),e<=-t.constant&&n>=-t.constant},intersectsTriangle:function(){function t(t){var i,a;for(i=0,a=t.length-3;i<=a;i+=3){c.fromArray(t,i);var o=l.x*Math.abs(c.x)+l.y*Math.abs(c.y)+l.z*Math.abs(c.z),s=e.dot(c),h=n.dot(c),u=r.dot(c);if(Math.max(-Math.max(s,h,u),Math.min(s,h,u))>o)return!1}return!0}var e=new a,n=new a,r=new a,i=new a,o=new a,s=new a,c=new a,h=new a,l=new a,u=new a;return function(a){if(this.isEmpty())return!1;this.getCenter(h),l.subVectors(this.max,h),e.subVectors(a.a,h),n.subVectors(a.b,h),r.subVectors(a.c,h),i.subVectors(n,e),o.subVectors(r,n),s.subVectors(e,r);var c=[0,-i.z,i.y,0,-o.z,o.y,0,-s.z,s.y,i.z,0,-i.x,o.z,0,-o.x,s.z,0,-s.x,-i.y,i.x,0,-o.y,o.x,0,-s.y,s.x,0];return!!t(c)&&(c=[1,0,0,0,1,0,0,0,1],!!t(c)&&(u.crossVectors(i,o),c=[u.x,u.y,u.z],t(c)))}}(),clampPoint:function(t,e){return void 0===e&&(console.warn("THREE.Box3: .clampPoint() target is now required"),e=new a),e.copy(t).clamp(this.min,this.max)},distanceToPoint:function(){var t=new a;return function(e){return t.copy(e).clamp(this.min,this.max).sub(e).length()}}(),getBoundingSphere:function(){var t=new a;return function(e){return void 0===e&&(console.warn("THREE.Box3: .getBoundingSphere() target is now required"),e=new f),this.getCenter(e.center),e.radius=.5*this.getSize(t).length(),e}}(),intersect:function(t){return this.min.max(t.min),this.max.min(t.max),this.isEmpty()&&this.makeEmpty(),this},union:function(t){return this.min.min(t.min),this.max.max(t.max),this},applyMatrix4:function(){var t=[new a,new a,new a,new a,new a,new a,new a,new a];return function(e){return this.isEmpty()?this:(t[0].set(this.min.x,this.min.y,this.min.z).applyMatrix4(e),t[1].set(this.min.x,this.min.y,this.max.z).applyMatrix4(e),t[2].set(this.min.x,this.max.y,this.min.z).applyMatrix4(e),t[3].set(this.min.x,this.max.y,this.max.z).applyMatrix4(e),t[4].set(this.max.x,this.min.y,this.min.z).applyMatrix4(e),t[5].set(this.max.x,this.min.y,this.max.z).applyMatrix4(e),t[6].set(this.max.x,this.max.y,this.min.z).applyMatrix4(e),t[7].set(this.max.x,this.max.y,this.max.z).applyMatrix4(e),this.setFromPoints(t),this)}}(),translate:function(t){return this.min.add(t),this.max.add(t),this},equals:function(t){return t.min.equals(this.min)&&t.max.equals(this.max)}}),Object.assign(f.prototype,{set:function(t,e){return this.center.copy(t),this.radius=e,this},setFromPoints:function(){var t=new d;return function(e,n){var r=this.center;void 0!==n?r.copy(n):t.setFromPoints(e).getCenter(r);for(var i=0,a=0,o=e.length;athis.radius*this.radius&&(e.sub(this.center).normalize(),e.multiplyScalar(this.radius).add(this.center)),e},getBoundingBox:function(t){return void 0===t&&(console.warn("THREE.Sphere: .getBoundingBox() target is now required"),t=new d),t.set(this.center,this.center),t.expandByScalar(this.radius),t},applyMatrix4:function(t){return this.center.applyMatrix4(t),this.radius=this.radius*t.getMaxScaleOnAxis(),this},translate:function(t){return this.center.add(t),this},equals:function(t){return t.center.equals(this.center)&&t.radius===this.radius}}),Object.assign(m.prototype,{set:function(t,e){return this.normal.copy(t),this.constant=e,this},setComponents:function(t,e,n,r){return this.normal.set(t,e,n),this.constant=r,this},setFromNormalAndCoplanarPoint:function(t,e){return this.normal.copy(t),this.constant=-e.dot(this.normal),this},setFromCoplanarPoints:function(){var t=new a,e=new a;return function(n,r,i){var a=t.subVectors(i,r).cross(e.subVectors(n,r)).normalize();return this.setFromNormalAndCoplanarPoint(a,n),this}}(),clone:function(){return(new this.constructor).copy(this)},copy:function(t){return this.normal.copy(t.normal),this.constant=t.constant,this},normalize:function(){var t=1/this.normal.length();return this.normal.multiplyScalar(t),this.constant*=t,this},negate:function(){return this.constant*=-1,this.normal.negate(),this},distanceToPoint:function(t){return this.normal.dot(t)+this.constant},distanceToSphere:function(t){return this.distanceToPoint(t.center)-t.radius},projectPoint:function(t,e){return void 0===e&&(console.warn("THREE.Plane: .projectPoint() target is now required"),e=new a),e.copy(this.normal).multiplyScalar(-this.distanceToPoint(t)).add(t)},intersectLine:function(){var t=new a;return function(e,n){void 0===n&&(console.warn("THREE.Plane: .intersectLine() target is now required"),n=new a);var r=e.delta(t),i=this.normal.dot(r);if(0!==i){var o=-(e.start.dot(this.normal)+this.constant)/i;if(!(o<0||o>1))return n.copy(r).multiplyScalar(o).add(e.start)}else if(0===this.distanceToPoint(e.start))return n.copy(e.start)}}(),intersectsLine:function(t){var e=this.distanceToPoint(t.start),n=this.distanceToPoint(t.end);return e<0&&n>0||n<0&&e>0}, +intersectsBox:function(t){return t.intersectsPlane(this)},intersectsSphere:function(t){return t.intersectsPlane(this)},coplanarPoint:function(t){return void 0===t&&(console.warn("THREE.Plane: .coplanarPoint() target is now required"),t=new a),t.copy(this.normal).multiplyScalar(-this.constant)},applyMatrix4:function(){var t=new a,e=new o;return function(n,r){var i=r||e.getNormalMatrix(n),a=this.coplanarPoint(t).applyMatrix4(n),o=this.normal.applyMatrix3(i).normalize();return this.constant=-a.dot(o),this}}(),translate:function(t){return this.constant-=t.dot(this.normal),this},equals:function(t){return t.normal.equals(this.normal)&&t.constant===this.constant}}),Object.assign(g.prototype,{set:function(t,e,n,r,i,a){var o=this.planes;return o[0].copy(t),o[1].copy(e),o[2].copy(n),o[3].copy(r),o[4].copy(i),o[5].copy(a),this},clone:function(){return(new this.constructor).copy(this)},copy:function(t){for(var e=this.planes,n=0;n<6;n++)e[n].copy(t.planes[n]);return this},setFromMatrix:function(t){var e=this.planes,n=t.elements,r=n[0],i=n[1],a=n[2],o=n[3],s=n[4],c=n[5],h=n[6],l=n[7],u=n[8],p=n[9],d=n[10],f=n[11],m=n[12],g=n[13],v=n[14],y=n[15];return e[0].setComponents(o-r,l-s,f-u,y-m).normalize(),e[1].setComponents(o+r,l+s,f+u,y+m).normalize(),e[2].setComponents(o+i,l+c,f+p,y+g).normalize(),e[3].setComponents(o-i,l-c,f-p,y-g).normalize(),e[4].setComponents(o-a,l-h,f-d,y-v).normalize(),e[5].setComponents(o+a,l+h,f+d,y+v).normalize(),this},intersectsObject:function(){var t=new f;return function(e){var n=e.geometry;return null===n.boundingSphere&&n.computeBoundingSphere(),t.copy(n.boundingSphere).applyMatrix4(e.matrixWorld),this.intersectsSphere(t)}}(),intersectsSprite:function(){var t=new f;return function(e){return t.center.set(0,0,0),t.radius=.7071067811865476,t.applyMatrix4(e.matrixWorld),this.intersectsSphere(t)}}(),intersectsSphere:function(t){for(var e=this.planes,n=t.center,r=-t.radius,i=0;i<6;i++){if(e[i].distanceToPoint(n)0?e.max.x:e.min.x,t.y=i.normal.y>0?e.max.y:e.min.y,t.z=i.normal.z>0?e.max.z:e.min.z,i.distanceToPoint(t)<0)return!1}return!0}}(),containsPoint:function(t){for(var e=this.planes,n=0;n<6;n++)if(e[n].distanceToPoint(t)<0)return!1;return!0}});var Bc={alphamap_fragment:"#ifdef USE_ALPHAMAP\n\tdiffuseColor.a *= texture2D( alphaMap, vUv ).g;\n#endif",alphamap_pars_fragment:"#ifdef USE_ALPHAMAP\n\tuniform sampler2D alphaMap;\n#endif",alphatest_fragment:"#ifdef ALPHATEST\n\tif ( diffuseColor.a < ALPHATEST ) discard;\n#endif",aomap_fragment:"#ifdef USE_AOMAP\n\tfloat ambientOcclusion = ( texture2D( aoMap, vUv2 ).r - 1.0 ) * aoMapIntensity + 1.0;\n\treflectedLight.indirectDiffuse *= ambientOcclusion;\n\t#if defined( USE_ENVMAP ) && defined( PHYSICAL )\n\t\tfloat dotNV = saturate( dot( geometry.normal, geometry.viewDir ) );\n\t\treflectedLight.indirectSpecular *= computeSpecularOcclusion( dotNV, ambientOcclusion, material.specularRoughness );\n\t#endif\n#endif",aomap_pars_fragment:"#ifdef USE_AOMAP\n\tuniform sampler2D aoMap;\n\tuniform float aoMapIntensity;\n#endif",begin_vertex:"vec3 transformed = vec3( position );",beginnormal_vertex:"vec3 objectNormal = vec3( normal );\n#ifdef USE_TANGENT\n\tvec3 objectTangent = vec3( tangent.xyz );\n#endif",bsdfs:"vec2 integrateSpecularBRDF( const in float dotNV, const in float roughness ) {\n\tconst vec4 c0 = vec4( - 1, - 0.0275, - 0.572, 0.022 );\n\tconst vec4 c1 = vec4( 1, 0.0425, 1.04, - 0.04 );\n\tvec4 r = roughness * c0 + c1;\n\tfloat a004 = min( r.x * r.x, exp2( - 9.28 * dotNV ) ) * r.x + r.y;\n\treturn vec2( -1.04, 1.04 ) * a004 + r.zw;\n}\nfloat punctualLightIntensityToIrradianceFactor( const in float lightDistance, const in float cutoffDistance, const in float decayExponent ) {\n#if defined ( PHYSICALLY_CORRECT_LIGHTS )\n\tfloat distanceFalloff = 1.0 / max( pow( lightDistance, decayExponent ), 0.01 );\n\tif( cutoffDistance > 0.0 ) {\n\t\tdistanceFalloff *= pow2( saturate( 1.0 - pow4( lightDistance / cutoffDistance ) ) );\n\t}\n\treturn distanceFalloff;\n#else\n\tif( cutoffDistance > 0.0 && decayExponent > 0.0 ) {\n\t\treturn pow( saturate( -lightDistance / cutoffDistance + 1.0 ), decayExponent );\n\t}\n\treturn 1.0;\n#endif\n}\nvec3 BRDF_Diffuse_Lambert( const in vec3 diffuseColor ) {\n\treturn RECIPROCAL_PI * diffuseColor;\n}\nvec3 F_Schlick( const in vec3 specularColor, const in float dotLH ) {\n\tfloat fresnel = exp2( ( -5.55473 * dotLH - 6.98316 ) * dotLH );\n\treturn ( 1.0 - specularColor ) * fresnel + specularColor;\n}\nfloat G_GGX_Smith( const in float alpha, const in float dotNL, const in float dotNV ) {\n\tfloat a2 = pow2( alpha );\n\tfloat gl = dotNL + sqrt( a2 + ( 1.0 - a2 ) * pow2( dotNL ) );\n\tfloat gv = dotNV + sqrt( a2 + ( 1.0 - a2 ) * pow2( dotNV ) );\n\treturn 1.0 / ( gl * gv );\n}\nfloat G_GGX_SmithCorrelated( const in float alpha, const in float dotNL, const in float dotNV ) {\n\tfloat a2 = pow2( alpha );\n\tfloat gv = dotNL * sqrt( a2 + ( 1.0 - a2 ) * pow2( dotNV ) );\n\tfloat gl = dotNV * sqrt( a2 + ( 1.0 - a2 ) * pow2( dotNL ) );\n\treturn 0.5 / max( gv + gl, EPSILON );\n}\nfloat D_GGX( const in float alpha, const in float dotNH ) {\n\tfloat a2 = pow2( alpha );\n\tfloat denom = pow2( dotNH ) * ( a2 - 1.0 ) + 1.0;\n\treturn RECIPROCAL_PI * a2 / pow2( denom );\n}\nvec3 BRDF_Specular_GGX( const in IncidentLight incidentLight, const in GeometricContext geometry, const in vec3 specularColor, const in float roughness ) {\n\tfloat alpha = pow2( roughness );\n\tvec3 halfDir = normalize( incidentLight.direction + geometry.viewDir );\n\tfloat dotNL = saturate( dot( geometry.normal, incidentLight.direction ) );\n\tfloat dotNV = saturate( dot( geometry.normal, geometry.viewDir ) );\n\tfloat dotNH = saturate( dot( geometry.normal, halfDir ) );\n\tfloat dotLH = saturate( dot( incidentLight.direction, halfDir ) );\n\tvec3 F = F_Schlick( specularColor, dotLH );\n\tfloat G = G_GGX_SmithCorrelated( alpha, dotNL, dotNV );\n\tfloat D = D_GGX( alpha, dotNH );\n\treturn F * ( G * D );\n}\nvec2 LTC_Uv( const in vec3 N, const in vec3 V, const in float roughness ) {\n\tconst float LUT_SIZE = 64.0;\n\tconst float LUT_SCALE = ( LUT_SIZE - 1.0 ) / LUT_SIZE;\n\tconst float LUT_BIAS = 0.5 / LUT_SIZE;\n\tfloat dotNV = saturate( dot( N, V ) );\n\tvec2 uv = vec2( roughness, sqrt( 1.0 - dotNV ) );\n\tuv = uv * LUT_SCALE + LUT_BIAS;\n\treturn uv;\n}\nfloat LTC_ClippedSphereFormFactor( const in vec3 f ) {\n\tfloat l = length( f );\n\treturn max( ( l * l + f.z ) / ( l + 1.0 ), 0.0 );\n}\nvec3 LTC_EdgeVectorFormFactor( const in vec3 v1, const in vec3 v2 ) {\n\tfloat x = dot( v1, v2 );\n\tfloat y = abs( x );\n\tfloat a = 0.8543985 + ( 0.4965155 + 0.0145206 * y ) * y;\n\tfloat b = 3.4175940 + ( 4.1616724 + y ) * y;\n\tfloat v = a / b;\n\tfloat theta_sintheta = ( x > 0.0 ) ? v : 0.5 * inversesqrt( max( 1.0 - x * x, 1e-7 ) ) - v;\n\treturn cross( v1, v2 ) * theta_sintheta;\n}\nvec3 LTC_Evaluate( const in vec3 N, const in vec3 V, const in vec3 P, const in mat3 mInv, const in vec3 rectCoords[ 4 ] ) {\n\tvec3 v1 = rectCoords[ 1 ] - rectCoords[ 0 ];\n\tvec3 v2 = rectCoords[ 3 ] - rectCoords[ 0 ];\n\tvec3 lightNormal = cross( v1, v2 );\n\tif( dot( lightNormal, P - rectCoords[ 0 ] ) < 0.0 ) return vec3( 0.0 );\n\tvec3 T1, T2;\n\tT1 = normalize( V - N * dot( V, N ) );\n\tT2 = - cross( N, T1 );\n\tmat3 mat = mInv * transposeMat3( mat3( T1, T2, N ) );\n\tvec3 coords[ 4 ];\n\tcoords[ 0 ] = mat * ( rectCoords[ 0 ] - P );\n\tcoords[ 1 ] = mat * ( rectCoords[ 1 ] - P );\n\tcoords[ 2 ] = mat * ( rectCoords[ 2 ] - P );\n\tcoords[ 3 ] = mat * ( rectCoords[ 3 ] - P );\n\tcoords[ 0 ] = normalize( coords[ 0 ] );\n\tcoords[ 1 ] = normalize( coords[ 1 ] );\n\tcoords[ 2 ] = normalize( coords[ 2 ] );\n\tcoords[ 3 ] = normalize( coords[ 3 ] );\n\tvec3 vectorFormFactor = vec3( 0.0 );\n\tvectorFormFactor += LTC_EdgeVectorFormFactor( coords[ 0 ], coords[ 1 ] );\n\tvectorFormFactor += LTC_EdgeVectorFormFactor( coords[ 1 ], coords[ 2 ] );\n\tvectorFormFactor += LTC_EdgeVectorFormFactor( coords[ 2 ], coords[ 3 ] );\n\tvectorFormFactor += LTC_EdgeVectorFormFactor( coords[ 3 ], coords[ 0 ] );\n\tfloat result = LTC_ClippedSphereFormFactor( vectorFormFactor );\n\treturn vec3( result );\n}\nvec3 BRDF_Specular_GGX_Environment( const in GeometricContext geometry, const in vec3 specularColor, const in float roughness ) {\n\tfloat dotNV = saturate( dot( geometry.normal, geometry.viewDir ) );\n\tvec2 brdf = integrateSpecularBRDF( dotNV, roughness );\n\treturn specularColor * brdf.x + brdf.y;\n}\nvoid BRDF_Specular_Multiscattering_Environment( const in GeometricContext geometry, const in vec3 specularColor, const in float roughness, inout vec3 singleScatter, inout vec3 multiScatter ) {\n\tfloat dotNV = saturate( dot( geometry.normal, geometry.viewDir ) );\n\tvec3 F = F_Schlick( specularColor, dotNV );\n\tvec2 brdf = integrateSpecularBRDF( dotNV, roughness );\n\tvec3 FssEss = F * brdf.x + brdf.y;\n\tfloat Ess = brdf.x + brdf.y;\n\tfloat Ems = 1.0 - Ess;\n\tvec3 Favg = specularColor + ( 1.0 - specularColor ) * 0.047619;\tvec3 Fms = FssEss * Favg / ( 1.0 - Ems * Favg );\n\tsingleScatter += FssEss;\n\tmultiScatter += Fms * Ems;\n}\nfloat G_BlinnPhong_Implicit( ) {\n\treturn 0.25;\n}\nfloat D_BlinnPhong( const in float shininess, const in float dotNH ) {\n\treturn RECIPROCAL_PI * ( shininess * 0.5 + 1.0 ) * pow( dotNH, shininess );\n}\nvec3 BRDF_Specular_BlinnPhong( const in IncidentLight incidentLight, const in GeometricContext geometry, const in vec3 specularColor, const in float shininess ) {\n\tvec3 halfDir = normalize( incidentLight.direction + geometry.viewDir );\n\tfloat dotNH = saturate( dot( geometry.normal, halfDir ) );\n\tfloat dotLH = saturate( dot( incidentLight.direction, halfDir ) );\n\tvec3 F = F_Schlick( specularColor, dotLH );\n\tfloat G = G_BlinnPhong_Implicit( );\n\tfloat D = D_BlinnPhong( shininess, dotNH );\n\treturn F * ( G * D );\n}\nfloat GGXRoughnessToBlinnExponent( const in float ggxRoughness ) {\n\treturn ( 2.0 / pow2( ggxRoughness + 0.0001 ) - 2.0 );\n}\nfloat BlinnExponentToGGXRoughness( const in float blinnExponent ) {\n\treturn sqrt( 2.0 / ( blinnExponent + 2.0 ) );\n}",bumpmap_pars_fragment:"#ifdef USE_BUMPMAP\n\tuniform sampler2D bumpMap;\n\tuniform float bumpScale;\n\tvec2 dHdxy_fwd() {\n\t\tvec2 dSTdx = dFdx( vUv );\n\t\tvec2 dSTdy = dFdy( vUv );\n\t\tfloat Hll = bumpScale * texture2D( bumpMap, vUv ).x;\n\t\tfloat dBx = bumpScale * texture2D( bumpMap, vUv + dSTdx ).x - Hll;\n\t\tfloat dBy = bumpScale * texture2D( bumpMap, vUv + dSTdy ).x - Hll;\n\t\treturn vec2( dBx, dBy );\n\t}\n\tvec3 perturbNormalArb( vec3 surf_pos, vec3 surf_norm, vec2 dHdxy ) {\n\t\tvec3 vSigmaX = vec3( dFdx( surf_pos.x ), dFdx( surf_pos.y ), dFdx( surf_pos.z ) );\n\t\tvec3 vSigmaY = vec3( dFdy( surf_pos.x ), dFdy( surf_pos.y ), dFdy( surf_pos.z ) );\n\t\tvec3 vN = surf_norm;\n\t\tvec3 R1 = cross( vSigmaY, vN );\n\t\tvec3 R2 = cross( vN, vSigmaX );\n\t\tfloat fDet = dot( vSigmaX, R1 );\n\t\tfDet *= ( float( gl_FrontFacing ) * 2.0 - 1.0 );\n\t\tvec3 vGrad = sign( fDet ) * ( dHdxy.x * R1 + dHdxy.y * R2 );\n\t\treturn normalize( abs( fDet ) * surf_norm - vGrad );\n\t}\n#endif",clipping_planes_fragment:"#if NUM_CLIPPING_PLANES > 0\n\tvec4 plane;\n\t#pragma unroll_loop\n\tfor ( int i = 0; i < UNION_CLIPPING_PLANES; i ++ ) {\n\t\tplane = clippingPlanes[ i ];\n\t\tif ( dot( vViewPosition, plane.xyz ) > plane.w ) discard;\n\t}\n\t#if UNION_CLIPPING_PLANES < NUM_CLIPPING_PLANES\n\t\tbool clipped = true;\n\t\t#pragma unroll_loop\n\t\tfor ( int i = UNION_CLIPPING_PLANES; i < NUM_CLIPPING_PLANES; i ++ ) {\n\t\t\tplane = clippingPlanes[ i ];\n\t\t\tclipped = ( dot( vViewPosition, plane.xyz ) > plane.w ) && clipped;\n\t\t}\n\t\tif ( clipped ) discard;\n\t#endif\n#endif",clipping_planes_pars_fragment:"#if NUM_CLIPPING_PLANES > 0\n\t#if ! defined( PHYSICAL ) && ! defined( PHONG ) && ! defined( MATCAP )\n\t\tvarying vec3 vViewPosition;\n\t#endif\n\tuniform vec4 clippingPlanes[ NUM_CLIPPING_PLANES ];\n#endif",clipping_planes_pars_vertex:"#if NUM_CLIPPING_PLANES > 0 && ! defined( PHYSICAL ) && ! defined( PHONG ) && ! defined( MATCAP )\n\tvarying vec3 vViewPosition;\n#endif",clipping_planes_vertex:"#if NUM_CLIPPING_PLANES > 0 && ! defined( PHYSICAL ) && ! defined( PHONG ) && ! defined( MATCAP )\n\tvViewPosition = - mvPosition.xyz;\n#endif",color_fragment:"#ifdef USE_COLOR\n\tdiffuseColor.rgb *= vColor;\n#endif",color_pars_fragment:"#ifdef USE_COLOR\n\tvarying vec3 vColor;\n#endif",color_pars_vertex:"#ifdef USE_COLOR\n\tvarying vec3 vColor;\n#endif",color_vertex:"#ifdef USE_COLOR\n\tvColor.xyz = color.xyz;\n#endif",common:"#define PI 3.14159265359\n#define PI2 6.28318530718\n#define PI_HALF 1.5707963267949\n#define RECIPROCAL_PI 0.31830988618\n#define RECIPROCAL_PI2 0.15915494\n#define LOG2 1.442695\n#define EPSILON 1e-6\n#define saturate(a) clamp( a, 0.0, 1.0 )\n#define whiteCompliment(a) ( 1.0 - saturate( a ) )\nfloat pow2( const in float x ) { return x*x; }\nfloat pow3( const in float x ) { return x*x*x; }\nfloat pow4( const in float x ) { float x2 = x*x; return x2*x2; }\nfloat average( const in vec3 color ) { return dot( color, vec3( 0.3333 ) ); }\nhighp float rand( const in vec2 uv ) {\n\tconst highp float a = 12.9898, b = 78.233, c = 43758.5453;\n\thighp float dt = dot( uv.xy, vec2( a,b ) ), sn = mod( dt, PI );\n\treturn fract(sin(sn) * c);\n}\nstruct IncidentLight {\n\tvec3 color;\n\tvec3 direction;\n\tbool visible;\n};\nstruct ReflectedLight {\n\tvec3 directDiffuse;\n\tvec3 directSpecular;\n\tvec3 indirectDiffuse;\n\tvec3 indirectSpecular;\n};\nstruct GeometricContext {\n\tvec3 position;\n\tvec3 normal;\n\tvec3 viewDir;\n};\nvec3 transformDirection( in vec3 dir, in mat4 matrix ) {\n\treturn normalize( ( matrix * vec4( dir, 0.0 ) ).xyz );\n}\nvec3 inverseTransformDirection( in vec3 dir, in mat4 matrix ) {\n\treturn normalize( ( vec4( dir, 0.0 ) * matrix ).xyz );\n}\nvec3 projectOnPlane(in vec3 point, in vec3 pointOnPlane, in vec3 planeNormal ) {\n\tfloat distance = dot( planeNormal, point - pointOnPlane );\n\treturn - distance * planeNormal + point;\n}\nfloat sideOfPlane( in vec3 point, in vec3 pointOnPlane, in vec3 planeNormal ) {\n\treturn sign( dot( point - pointOnPlane, planeNormal ) );\n}\nvec3 linePlaneIntersect( in vec3 pointOnLine, in vec3 lineDirection, in vec3 pointOnPlane, in vec3 planeNormal ) {\n\treturn lineDirection * ( dot( planeNormal, pointOnPlane - pointOnLine ) / dot( planeNormal, lineDirection ) ) + pointOnLine;\n}\nmat3 transposeMat3( const in mat3 m ) {\n\tmat3 tmp;\n\ttmp[ 0 ] = vec3( m[ 0 ].x, m[ 1 ].x, m[ 2 ].x );\n\ttmp[ 1 ] = vec3( m[ 0 ].y, m[ 1 ].y, m[ 2 ].y );\n\ttmp[ 2 ] = vec3( m[ 0 ].z, m[ 1 ].z, m[ 2 ].z );\n\treturn tmp;\n}\nfloat linearToRelativeLuminance( const in vec3 color ) {\n\tvec3 weights = vec3( 0.2126, 0.7152, 0.0722 );\n\treturn dot( weights, color.rgb );\n}",cube_uv_reflection_fragment:"#ifdef ENVMAP_TYPE_CUBE_UV\n#define cubeUV_textureSize (1024.0)\nint getFaceFromDirection(vec3 direction) {\n\tvec3 absDirection = abs(direction);\n\tint face = -1;\n\tif( absDirection.x > absDirection.z ) {\n\t\tif(absDirection.x > absDirection.y )\n\t\t\tface = direction.x > 0.0 ? 0 : 3;\n\t\telse\n\t\t\tface = direction.y > 0.0 ? 1 : 4;\n\t}\n\telse {\n\t\tif(absDirection.z > absDirection.y )\n\t\t\tface = direction.z > 0.0 ? 2 : 5;\n\t\telse\n\t\t\tface = direction.y > 0.0 ? 1 : 4;\n\t}\n\treturn face;\n}\n#define cubeUV_maxLods1 (log2(cubeUV_textureSize*0.25) - 1.0)\n#define cubeUV_rangeClamp (exp2((6.0 - 1.0) * 2.0))\nvec2 MipLevelInfo( vec3 vec, float roughnessLevel, float roughness ) {\n\tfloat scale = exp2(cubeUV_maxLods1 - roughnessLevel);\n\tfloat dxRoughness = dFdx(roughness);\n\tfloat dyRoughness = dFdy(roughness);\n\tvec3 dx = dFdx( vec * scale * dxRoughness );\n\tvec3 dy = dFdy( vec * scale * dyRoughness );\n\tfloat d = max( dot( dx, dx ), dot( dy, dy ) );\n\td = clamp(d, 1.0, cubeUV_rangeClamp);\n\tfloat mipLevel = 0.5 * log2(d);\n\treturn vec2(floor(mipLevel), fract(mipLevel));\n}\n#define cubeUV_maxLods2 (log2(cubeUV_textureSize*0.25) - 2.0)\n#define cubeUV_rcpTextureSize (1.0 / cubeUV_textureSize)\nvec2 getCubeUV(vec3 direction, float roughnessLevel, float mipLevel) {\n\tmipLevel = roughnessLevel > cubeUV_maxLods2 - 3.0 ? 0.0 : mipLevel;\n\tfloat a = 16.0 * cubeUV_rcpTextureSize;\n\tvec2 exp2_packed = exp2( vec2( roughnessLevel, mipLevel ) );\n\tvec2 rcp_exp2_packed = vec2( 1.0 ) / exp2_packed;\n\tfloat powScale = exp2_packed.x * exp2_packed.y;\n\tfloat scale = rcp_exp2_packed.x * rcp_exp2_packed.y * 0.25;\n\tfloat mipOffset = 0.75*(1.0 - rcp_exp2_packed.y) * rcp_exp2_packed.x;\n\tbool bRes = mipLevel == 0.0;\n\tscale = bRes && (scale < a) ? a : scale;\n\tvec3 r;\n\tvec2 offset;\n\tint face = getFaceFromDirection(direction);\n\tfloat rcpPowScale = 1.0 / powScale;\n\tif( face == 0) {\n\t\tr = vec3(direction.x, -direction.z, direction.y);\n\t\toffset = vec2(0.0+mipOffset,0.75 * rcpPowScale);\n\t\toffset.y = bRes && (offset.y < 2.0*a) ? a : offset.y;\n\t}\n\telse if( face == 1) {\n\t\tr = vec3(direction.y, direction.x, direction.z);\n\t\toffset = vec2(scale+mipOffset, 0.75 * rcpPowScale);\n\t\toffset.y = bRes && (offset.y < 2.0*a) ? a : offset.y;\n\t}\n\telse if( face == 2) {\n\t\tr = vec3(direction.z, direction.x, direction.y);\n\t\toffset = vec2(2.0*scale+mipOffset, 0.75 * rcpPowScale);\n\t\toffset.y = bRes && (offset.y < 2.0*a) ? a : offset.y;\n\t}\n\telse if( face == 3) {\n\t\tr = vec3(direction.x, direction.z, direction.y);\n\t\toffset = vec2(0.0+mipOffset,0.5 * rcpPowScale);\n\t\toffset.y = bRes && (offset.y < 2.0*a) ? 0.0 : offset.y;\n\t}\n\telse if( face == 4) {\n\t\tr = vec3(direction.y, direction.x, -direction.z);\n\t\toffset = vec2(scale+mipOffset, 0.5 * rcpPowScale);\n\t\toffset.y = bRes && (offset.y < 2.0*a) ? 0.0 : offset.y;\n\t}\n\telse {\n\t\tr = vec3(direction.z, -direction.x, direction.y);\n\t\toffset = vec2(2.0*scale+mipOffset, 0.5 * rcpPowScale);\n\t\toffset.y = bRes && (offset.y < 2.0*a) ? 0.0 : offset.y;\n\t}\n\tr = normalize(r);\n\tfloat texelOffset = 0.5 * cubeUV_rcpTextureSize;\n\tvec2 s = ( r.yz / abs( r.x ) + vec2( 1.0 ) ) * 0.5;\n\tvec2 base = offset + vec2( texelOffset );\n\treturn base + s * ( scale - 2.0 * texelOffset );\n}\n#define cubeUV_maxLods3 (log2(cubeUV_textureSize*0.25) - 3.0)\nvec4 textureCubeUV( sampler2D envMap, vec3 reflectedDirection, float roughness ) {\n\tfloat roughnessVal = roughness* cubeUV_maxLods3;\n\tfloat r1 = floor(roughnessVal);\n\tfloat r2 = r1 + 1.0;\n\tfloat t = fract(roughnessVal);\n\tvec2 mipInfo = MipLevelInfo(reflectedDirection, r1, roughness);\n\tfloat s = mipInfo.y;\n\tfloat level0 = mipInfo.x;\n\tfloat level1 = level0 + 1.0;\n\tlevel1 = level1 > 5.0 ? 5.0 : level1;\n\tlevel0 += min( floor( s + 0.5 ), 5.0 );\n\tvec2 uv_10 = getCubeUV(reflectedDirection, r1, level0);\n\tvec4 color10 = envMapTexelToLinear(texture2D(envMap, uv_10));\n\tvec2 uv_20 = getCubeUV(reflectedDirection, r2, level0);\n\tvec4 color20 = envMapTexelToLinear(texture2D(envMap, uv_20));\n\tvec4 result = mix(color10, color20, t);\n\treturn vec4(result.rgb, 1.0);\n}\n#endif",defaultnormal_vertex:"vec3 transformedNormal = normalMatrix * objectNormal;\n#ifdef FLIP_SIDED\n\ttransformedNormal = - transformedNormal;\n#endif\n#ifdef USE_TANGENT\n\tvec3 transformedTangent = normalMatrix * objectTangent;\n\t#ifdef FLIP_SIDED\n\t\ttransformedTangent = - transformedTangent;\n\t#endif\n#endif",displacementmap_pars_vertex:"#ifdef USE_DISPLACEMENTMAP\n\tuniform sampler2D displacementMap;\n\tuniform float displacementScale;\n\tuniform float displacementBias;\n#endif",displacementmap_vertex:"#ifdef USE_DISPLACEMENTMAP\n\ttransformed += normalize( objectNormal ) * ( texture2D( displacementMap, uv ).x * displacementScale + displacementBias );\n#endif",emissivemap_fragment:"#ifdef USE_EMISSIVEMAP\n\tvec4 emissiveColor = texture2D( emissiveMap, vUv );\n\temissiveColor.rgb = emissiveMapTexelToLinear( emissiveColor ).rgb;\n\ttotalEmissiveRadiance *= emissiveColor.rgb;\n#endif",emissivemap_pars_fragment:"#ifdef USE_EMISSIVEMAP\n\tuniform sampler2D emissiveMap;\n#endif",encodings_fragment:"gl_FragColor = linearToOutputTexel( gl_FragColor );",encodings_pars_fragment:"\nvec4 LinearToLinear( in vec4 value ) {\n\treturn value;\n}\nvec4 GammaToLinear( in vec4 value, in float gammaFactor ) {\n\treturn vec4( pow( value.rgb, vec3( gammaFactor ) ), value.a );\n}\nvec4 LinearToGamma( in vec4 value, in float gammaFactor ) {\n\treturn vec4( pow( value.rgb, vec3( 1.0 / gammaFactor ) ), value.a );\n}\nvec4 sRGBToLinear( in vec4 value ) {\n\treturn vec4( mix( pow( value.rgb * 0.9478672986 + vec3( 0.0521327014 ), vec3( 2.4 ) ), value.rgb * 0.0773993808, vec3( lessThanEqual( value.rgb, vec3( 0.04045 ) ) ) ), value.a );\n}\nvec4 LinearTosRGB( in vec4 value ) {\n\treturn vec4( mix( pow( value.rgb, vec3( 0.41666 ) ) * 1.055 - vec3( 0.055 ), value.rgb * 12.92, vec3( lessThanEqual( value.rgb, vec3( 0.0031308 ) ) ) ), value.a );\n}\nvec4 RGBEToLinear( in vec4 value ) {\n\treturn vec4( value.rgb * exp2( value.a * 255.0 - 128.0 ), 1.0 );\n}\nvec4 LinearToRGBE( in vec4 value ) {\n\tfloat maxComponent = max( max( value.r, value.g ), value.b );\n\tfloat fExp = clamp( ceil( log2( maxComponent ) ), -128.0, 127.0 );\n\treturn vec4( value.rgb / exp2( fExp ), ( fExp + 128.0 ) / 255.0 );\n}\nvec4 RGBMToLinear( in vec4 value, in float maxRange ) {\n\treturn vec4( value.rgb * value.a * maxRange, 1.0 );\n}\nvec4 LinearToRGBM( in vec4 value, in float maxRange ) {\n\tfloat maxRGB = max( value.r, max( value.g, value.b ) );\n\tfloat M = clamp( maxRGB / maxRange, 0.0, 1.0 );\n\tM = ceil( M * 255.0 ) / 255.0;\n\treturn vec4( value.rgb / ( M * maxRange ), M );\n}\nvec4 RGBDToLinear( in vec4 value, in float maxRange ) {\n\treturn vec4( value.rgb * ( ( maxRange / 255.0 ) / value.a ), 1.0 );\n}\nvec4 LinearToRGBD( in vec4 value, in float maxRange ) {\n\tfloat maxRGB = max( value.r, max( value.g, value.b ) );\n\tfloat D = max( maxRange / maxRGB, 1.0 );\n\tD = min( floor( D ) / 255.0, 1.0 );\n\treturn vec4( value.rgb * ( D * ( 255.0 / maxRange ) ), D );\n}\nconst mat3 cLogLuvM = mat3( 0.2209, 0.3390, 0.4184, 0.1138, 0.6780, 0.7319, 0.0102, 0.1130, 0.2969 );\nvec4 LinearToLogLuv( in vec4 value ) {\n\tvec3 Xp_Y_XYZp = cLogLuvM * value.rgb;\n\tXp_Y_XYZp = max( Xp_Y_XYZp, vec3( 1e-6, 1e-6, 1e-6 ) );\n\tvec4 vResult;\n\tvResult.xy = Xp_Y_XYZp.xy / Xp_Y_XYZp.z;\n\tfloat Le = 2.0 * log2(Xp_Y_XYZp.y) + 127.0;\n\tvResult.w = fract( Le );\n\tvResult.z = ( Le - ( floor( vResult.w * 255.0 ) ) / 255.0 ) / 255.0;\n\treturn vResult;\n}\nconst mat3 cLogLuvInverseM = mat3( 6.0014, -2.7008, -1.7996, -1.3320, 3.1029, -5.7721, 0.3008, -1.0882, 5.6268 );\nvec4 LogLuvToLinear( in vec4 value ) {\n\tfloat Le = value.z * 255.0 + value.w;\n\tvec3 Xp_Y_XYZp;\n\tXp_Y_XYZp.y = exp2( ( Le - 127.0 ) / 2.0 );\n\tXp_Y_XYZp.z = Xp_Y_XYZp.y / value.y;\n\tXp_Y_XYZp.x = value.x * Xp_Y_XYZp.z;\n\tvec3 vRGB = cLogLuvInverseM * Xp_Y_XYZp.rgb;\n\treturn vec4( max( vRGB, 0.0 ), 1.0 );\n}",envmap_fragment:"#ifdef USE_ENVMAP\n\t#if defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) || defined( PHONG )\n\t\tvec3 cameraToVertex = normalize( vWorldPosition - cameraPosition );\n\t\tvec3 worldNormal = inverseTransformDirection( normal, viewMatrix );\n\t\t#ifdef ENVMAP_MODE_REFLECTION\n\t\t\tvec3 reflectVec = reflect( cameraToVertex, worldNormal );\n\t\t#else\n\t\t\tvec3 reflectVec = refract( cameraToVertex, worldNormal, refractionRatio );\n\t\t#endif\n\t#else\n\t\tvec3 reflectVec = vReflect;\n\t#endif\n\t#ifdef ENVMAP_TYPE_CUBE\n\t\tvec4 envColor = textureCube( envMap, vec3( flipEnvMap * reflectVec.x, reflectVec.yz ) );\n\t#elif defined( ENVMAP_TYPE_EQUIREC )\n\t\tvec2 sampleUV;\n\t\treflectVec = normalize( reflectVec );\n\t\tsampleUV.y = asin( clamp( reflectVec.y, - 1.0, 1.0 ) ) * RECIPROCAL_PI + 0.5;\n\t\tsampleUV.x = atan( reflectVec.z, reflectVec.x ) * RECIPROCAL_PI2 + 0.5;\n\t\tvec4 envColor = texture2D( envMap, sampleUV );\n\t#elif defined( ENVMAP_TYPE_SPHERE )\n\t\treflectVec = normalize( reflectVec );\n\t\tvec3 reflectView = normalize( ( viewMatrix * vec4( reflectVec, 0.0 ) ).xyz + vec3( 0.0, 0.0, 1.0 ) );\n\t\tvec4 envColor = texture2D( envMap, reflectView.xy * 0.5 + 0.5 );\n\t#else\n\t\tvec4 envColor = vec4( 0.0 );\n\t#endif\n\tenvColor = envMapTexelToLinear( envColor );\n\t#ifdef ENVMAP_BLENDING_MULTIPLY\n\t\toutgoingLight = mix( outgoingLight, outgoingLight * envColor.xyz, specularStrength * reflectivity );\n\t#elif defined( ENVMAP_BLENDING_MIX )\n\t\toutgoingLight = mix( outgoingLight, envColor.xyz, specularStrength * reflectivity );\n\t#elif defined( ENVMAP_BLENDING_ADD )\n\t\toutgoingLight += envColor.xyz * specularStrength * reflectivity;\n\t#endif\n#endif",envmap_pars_fragment:"#if defined( USE_ENVMAP ) || defined( PHYSICAL )\n\tuniform float reflectivity;\n\tuniform float envMapIntensity;\n#endif\n#ifdef USE_ENVMAP\n\t#if ! defined( PHYSICAL ) && ( defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) || defined( PHONG ) )\n\t\tvarying vec3 vWorldPosition;\n\t#endif\n\t#ifdef ENVMAP_TYPE_CUBE\n\t\tuniform samplerCube envMap;\n\t#else\n\t\tuniform sampler2D envMap;\n\t#endif\n\tuniform float flipEnvMap;\n\tuniform int maxMipLevel;\n\t#if defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) || defined( PHONG ) || defined( PHYSICAL )\n\t\tuniform float refractionRatio;\n\t#else\n\t\tvarying vec3 vReflect;\n\t#endif\n#endif",envmap_pars_vertex:"#ifdef USE_ENVMAP\n\t#if defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) || defined( PHONG )\n\t\tvarying vec3 vWorldPosition;\n\t#else\n\t\tvarying vec3 vReflect;\n\t\tuniform float refractionRatio;\n\t#endif\n#endif",envmap_physical_pars_fragment:"#if defined( USE_ENVMAP ) && defined( PHYSICAL )\n\tvec3 getLightProbeIndirectIrradiance( const in GeometricContext geometry, const in int maxMIPLevel ) {\n\t\tvec3 worldNormal = inverseTransformDirection( geometry.normal, viewMatrix );\n\t\t#ifdef ENVMAP_TYPE_CUBE\n\t\t\tvec3 queryVec = vec3( flipEnvMap * worldNormal.x, worldNormal.yz );\n\t\t\t#ifdef TEXTURE_LOD_EXT\n\t\t\t\tvec4 envMapColor = textureCubeLodEXT( envMap, queryVec, float( maxMIPLevel ) );\n\t\t\t#else\n\t\t\t\tvec4 envMapColor = textureCube( envMap, queryVec, float( maxMIPLevel ) );\n\t\t\t#endif\n\t\t\tenvMapColor.rgb = envMapTexelToLinear( envMapColor ).rgb;\n\t\t#elif defined( ENVMAP_TYPE_CUBE_UV )\n\t\t\tvec3 queryVec = vec3( flipEnvMap * worldNormal.x, worldNormal.yz );\n\t\t\tvec4 envMapColor = textureCubeUV( envMap, queryVec, 1.0 );\n\t\t#else\n\t\t\tvec4 envMapColor = vec4( 0.0 );\n\t\t#endif\n\t\treturn PI * envMapColor.rgb * envMapIntensity;\n\t}\n\tfloat getSpecularMIPLevel( const in float blinnShininessExponent, const in int maxMIPLevel ) {\n\t\tfloat maxMIPLevelScalar = float( maxMIPLevel );\n\t\tfloat desiredMIPLevel = maxMIPLevelScalar + 0.79248 - 0.5 * log2( pow2( blinnShininessExponent ) + 1.0 );\n\t\treturn clamp( desiredMIPLevel, 0.0, maxMIPLevelScalar );\n\t}\n\tvec3 getLightProbeIndirectRadiance( const in GeometricContext geometry, const in float blinnShininessExponent, const in int maxMIPLevel ) {\n\t\t#ifdef ENVMAP_MODE_REFLECTION\n\t\t\tvec3 reflectVec = reflect( -geometry.viewDir, geometry.normal );\n\t\t#else\n\t\t\tvec3 reflectVec = refract( -geometry.viewDir, geometry.normal, refractionRatio );\n\t\t#endif\n\t\treflectVec = inverseTransformDirection( reflectVec, viewMatrix );\n\t\tfloat specularMIPLevel = getSpecularMIPLevel( blinnShininessExponent, maxMIPLevel );\n\t\t#ifdef ENVMAP_TYPE_CUBE\n\t\t\tvec3 queryReflectVec = vec3( flipEnvMap * reflectVec.x, reflectVec.yz );\n\t\t\t#ifdef TEXTURE_LOD_EXT\n\t\t\t\tvec4 envMapColor = textureCubeLodEXT( envMap, queryReflectVec, specularMIPLevel );\n\t\t\t#else\n\t\t\t\tvec4 envMapColor = textureCube( envMap, queryReflectVec, specularMIPLevel );\n\t\t\t#endif\n\t\t\tenvMapColor.rgb = envMapTexelToLinear( envMapColor ).rgb;\n\t\t#elif defined( ENVMAP_TYPE_CUBE_UV )\n\t\t\tvec3 queryReflectVec = vec3( flipEnvMap * reflectVec.x, reflectVec.yz );\n\t\t\tvec4 envMapColor = textureCubeUV( envMap, queryReflectVec, BlinnExponentToGGXRoughness(blinnShininessExponent ));\n\t\t#elif defined( ENVMAP_TYPE_EQUIREC )\n\t\t\tvec2 sampleUV;\n\t\t\tsampleUV.y = asin( clamp( reflectVec.y, - 1.0, 1.0 ) ) * RECIPROCAL_PI + 0.5;\n\t\t\tsampleUV.x = atan( reflectVec.z, reflectVec.x ) * RECIPROCAL_PI2 + 0.5;\n\t\t\t#ifdef TEXTURE_LOD_EXT\n\t\t\t\tvec4 envMapColor = texture2DLodEXT( envMap, sampleUV, specularMIPLevel );\n\t\t\t#else\n\t\t\t\tvec4 envMapColor = texture2D( envMap, sampleUV, specularMIPLevel );\n\t\t\t#endif\n\t\t\tenvMapColor.rgb = envMapTexelToLinear( envMapColor ).rgb;\n\t\t#elif defined( ENVMAP_TYPE_SPHERE )\n\t\t\tvec3 reflectView = normalize( ( viewMatrix * vec4( reflectVec, 0.0 ) ).xyz + vec3( 0.0,0.0,1.0 ) );\n\t\t\t#ifdef TEXTURE_LOD_EXT\n\t\t\t\tvec4 envMapColor = texture2DLodEXT( envMap, reflectView.xy * 0.5 + 0.5, specularMIPLevel );\n\t\t\t#else\n\t\t\t\tvec4 envMapColor = texture2D( envMap, reflectView.xy * 0.5 + 0.5, specularMIPLevel );\n\t\t\t#endif\n\t\t\tenvMapColor.rgb = envMapTexelToLinear( envMapColor ).rgb;\n\t\t#endif\n\t\treturn envMapColor.rgb * envMapIntensity;\n\t}\n#endif",envmap_vertex:"#ifdef USE_ENVMAP\n\t#if defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) || defined( PHONG )\n\t\tvWorldPosition = worldPosition.xyz;\n\t#else\n\t\tvec3 cameraToVertex = normalize( worldPosition.xyz - cameraPosition );\n\t\tvec3 worldNormal = inverseTransformDirection( transformedNormal, viewMatrix );\n\t\t#ifdef ENVMAP_MODE_REFLECTION\n\t\t\tvReflect = reflect( cameraToVertex, worldNormal );\n\t\t#else\n\t\t\tvReflect = refract( cameraToVertex, worldNormal, refractionRatio );\n\t\t#endif\n\t#endif\n#endif",fog_vertex:"#ifdef USE_FOG\n\tfogDepth = -mvPosition.z;\n#endif",fog_pars_vertex:"#ifdef USE_FOG\n\tvarying float fogDepth;\n#endif",fog_fragment:"#ifdef USE_FOG\n\t#ifdef FOG_EXP2\n\t\tfloat fogFactor = whiteCompliment( exp2( - fogDensity * fogDensity * fogDepth * fogDepth * LOG2 ) );\n\t#else\n\t\tfloat fogFactor = smoothstep( fogNear, fogFar, fogDepth );\n\t#endif\n\tgl_FragColor.rgb = mix( gl_FragColor.rgb, fogColor, fogFactor );\n#endif",fog_pars_fragment:"#ifdef USE_FOG\n\tuniform vec3 fogColor;\n\tvarying float fogDepth;\n\t#ifdef FOG_EXP2\n\t\tuniform float fogDensity;\n\t#else\n\t\tuniform float fogNear;\n\t\tuniform float fogFar;\n\t#endif\n#endif",gradientmap_pars_fragment:"#ifdef TOON\n\tuniform sampler2D gradientMap;\n\tvec3 getGradientIrradiance( vec3 normal, vec3 lightDirection ) {\n\t\tfloat dotNL = dot( normal, lightDirection );\n\t\tvec2 coord = vec2( dotNL * 0.5 + 0.5, 0.0 );\n\t\t#ifdef USE_GRADIENTMAP\n\t\t\treturn texture2D( gradientMap, coord ).rgb;\n\t\t#else\n\t\t\treturn ( coord.x < 0.7 ) ? vec3( 0.7 ) : vec3( 1.0 );\n\t\t#endif\n\t}\n#endif",lightmap_fragment:"#ifdef USE_LIGHTMAP\n\treflectedLight.indirectDiffuse += PI * texture2D( lightMap, vUv2 ).xyz * lightMapIntensity;\n#endif",lightmap_pars_fragment:"#ifdef USE_LIGHTMAP\n\tuniform sampler2D lightMap;\n\tuniform float lightMapIntensity;\n#endif", +lights_lambert_vertex:"vec3 diffuse = vec3( 1.0 );\nGeometricContext geometry;\ngeometry.position = mvPosition.xyz;\ngeometry.normal = normalize( transformedNormal );\ngeometry.viewDir = normalize( -mvPosition.xyz );\nGeometricContext backGeometry;\nbackGeometry.position = geometry.position;\nbackGeometry.normal = -geometry.normal;\nbackGeometry.viewDir = geometry.viewDir;\nvLightFront = vec3( 0.0 );\nvIndirectFront = vec3( 0.0 );\n#ifdef DOUBLE_SIDED\n\tvLightBack = vec3( 0.0 );\n\tvIndirectBack = vec3( 0.0 );\n#endif\nIncidentLight directLight;\nfloat dotNL;\nvec3 directLightColor_Diffuse;\n#if NUM_POINT_LIGHTS > 0\n\t#pragma unroll_loop\n\tfor ( int i = 0; i < NUM_POINT_LIGHTS; i ++ ) {\n\t\tgetPointDirectLightIrradiance( pointLights[ i ], geometry, directLight );\n\t\tdotNL = dot( geometry.normal, directLight.direction );\n\t\tdirectLightColor_Diffuse = PI * directLight.color;\n\t\tvLightFront += saturate( dotNL ) * directLightColor_Diffuse;\n\t\t#ifdef DOUBLE_SIDED\n\t\t\tvLightBack += saturate( -dotNL ) * directLightColor_Diffuse;\n\t\t#endif\n\t}\n#endif\n#if NUM_SPOT_LIGHTS > 0\n\t#pragma unroll_loop\n\tfor ( int i = 0; i < NUM_SPOT_LIGHTS; i ++ ) {\n\t\tgetSpotDirectLightIrradiance( spotLights[ i ], geometry, directLight );\n\t\tdotNL = dot( geometry.normal, directLight.direction );\n\t\tdirectLightColor_Diffuse = PI * directLight.color;\n\t\tvLightFront += saturate( dotNL ) * directLightColor_Diffuse;\n\t\t#ifdef DOUBLE_SIDED\n\t\t\tvLightBack += saturate( -dotNL ) * directLightColor_Diffuse;\n\t\t#endif\n\t}\n#endif\n#if NUM_DIR_LIGHTS > 0\n\t#pragma unroll_loop\n\tfor ( int i = 0; i < NUM_DIR_LIGHTS; i ++ ) {\n\t\tgetDirectionalDirectLightIrradiance( directionalLights[ i ], geometry, directLight );\n\t\tdotNL = dot( geometry.normal, directLight.direction );\n\t\tdirectLightColor_Diffuse = PI * directLight.color;\n\t\tvLightFront += saturate( dotNL ) * directLightColor_Diffuse;\n\t\t#ifdef DOUBLE_SIDED\n\t\t\tvLightBack += saturate( -dotNL ) * directLightColor_Diffuse;\n\t\t#endif\n\t}\n#endif\n#if NUM_HEMI_LIGHTS > 0\n\t#pragma unroll_loop\n\tfor ( int i = 0; i < NUM_HEMI_LIGHTS; i ++ ) {\n\t\tvIndirectFront += getHemisphereLightIrradiance( hemisphereLights[ i ], geometry );\n\t\t#ifdef DOUBLE_SIDED\n\t\t\tvIndirectBack += getHemisphereLightIrradiance( hemisphereLights[ i ], backGeometry );\n\t\t#endif\n\t}\n#endif",lights_pars_begin:"uniform vec3 ambientLightColor;\nvec3 getAmbientLightIrradiance( const in vec3 ambientLightColor ) {\n\tvec3 irradiance = ambientLightColor;\n\t#ifndef PHYSICALLY_CORRECT_LIGHTS\n\t\tirradiance *= PI;\n\t#endif\n\treturn irradiance;\n}\n#if NUM_DIR_LIGHTS > 0\n\tstruct DirectionalLight {\n\t\tvec3 direction;\n\t\tvec3 color;\n\t\tint shadow;\n\t\tfloat shadowBias;\n\t\tfloat shadowRadius;\n\t\tvec2 shadowMapSize;\n\t};\n\tuniform DirectionalLight directionalLights[ NUM_DIR_LIGHTS ];\n\tvoid getDirectionalDirectLightIrradiance( const in DirectionalLight directionalLight, const in GeometricContext geometry, out IncidentLight directLight ) {\n\t\tdirectLight.color = directionalLight.color;\n\t\tdirectLight.direction = directionalLight.direction;\n\t\tdirectLight.visible = true;\n\t}\n#endif\n#if NUM_POINT_LIGHTS > 0\n\tstruct PointLight {\n\t\tvec3 position;\n\t\tvec3 color;\n\t\tfloat distance;\n\t\tfloat decay;\n\t\tint shadow;\n\t\tfloat shadowBias;\n\t\tfloat shadowRadius;\n\t\tvec2 shadowMapSize;\n\t\tfloat shadowCameraNear;\n\t\tfloat shadowCameraFar;\n\t};\n\tuniform PointLight pointLights[ NUM_POINT_LIGHTS ];\n\tvoid getPointDirectLightIrradiance( const in PointLight pointLight, const in GeometricContext geometry, out IncidentLight directLight ) {\n\t\tvec3 lVector = pointLight.position - geometry.position;\n\t\tdirectLight.direction = normalize( lVector );\n\t\tfloat lightDistance = length( lVector );\n\t\tdirectLight.color = pointLight.color;\n\t\tdirectLight.color *= punctualLightIntensityToIrradianceFactor( lightDistance, pointLight.distance, pointLight.decay );\n\t\tdirectLight.visible = ( directLight.color != vec3( 0.0 ) );\n\t}\n#endif\n#if NUM_SPOT_LIGHTS > 0\n\tstruct SpotLight {\n\t\tvec3 position;\n\t\tvec3 direction;\n\t\tvec3 color;\n\t\tfloat distance;\n\t\tfloat decay;\n\t\tfloat coneCos;\n\t\tfloat penumbraCos;\n\t\tint shadow;\n\t\tfloat shadowBias;\n\t\tfloat shadowRadius;\n\t\tvec2 shadowMapSize;\n\t};\n\tuniform SpotLight spotLights[ NUM_SPOT_LIGHTS ];\n\tvoid getSpotDirectLightIrradiance( const in SpotLight spotLight, const in GeometricContext geometry, out IncidentLight directLight ) {\n\t\tvec3 lVector = spotLight.position - geometry.position;\n\t\tdirectLight.direction = normalize( lVector );\n\t\tfloat lightDistance = length( lVector );\n\t\tfloat angleCos = dot( directLight.direction, spotLight.direction );\n\t\tif ( angleCos > spotLight.coneCos ) {\n\t\t\tfloat spotEffect = smoothstep( spotLight.coneCos, spotLight.penumbraCos, angleCos );\n\t\t\tdirectLight.color = spotLight.color;\n\t\t\tdirectLight.color *= spotEffect * punctualLightIntensityToIrradianceFactor( lightDistance, spotLight.distance, spotLight.decay );\n\t\t\tdirectLight.visible = true;\n\t\t} else {\n\t\t\tdirectLight.color = vec3( 0.0 );\n\t\t\tdirectLight.visible = false;\n\t\t}\n\t}\n#endif\n#if NUM_RECT_AREA_LIGHTS > 0\n\tstruct RectAreaLight {\n\t\tvec3 color;\n\t\tvec3 position;\n\t\tvec3 halfWidth;\n\t\tvec3 halfHeight;\n\t};\n\tuniform sampler2D ltc_1;\tuniform sampler2D ltc_2;\n\tuniform RectAreaLight rectAreaLights[ NUM_RECT_AREA_LIGHTS ];\n#endif\n#if NUM_HEMI_LIGHTS > 0\n\tstruct HemisphereLight {\n\t\tvec3 direction;\n\t\tvec3 skyColor;\n\t\tvec3 groundColor;\n\t};\n\tuniform HemisphereLight hemisphereLights[ NUM_HEMI_LIGHTS ];\n\tvec3 getHemisphereLightIrradiance( const in HemisphereLight hemiLight, const in GeometricContext geometry ) {\n\t\tfloat dotNL = dot( geometry.normal, hemiLight.direction );\n\t\tfloat hemiDiffuseWeight = 0.5 * dotNL + 0.5;\n\t\tvec3 irradiance = mix( hemiLight.groundColor, hemiLight.skyColor, hemiDiffuseWeight );\n\t\t#ifndef PHYSICALLY_CORRECT_LIGHTS\n\t\t\tirradiance *= PI;\n\t\t#endif\n\t\treturn irradiance;\n\t}\n#endif",lights_phong_fragment:"BlinnPhongMaterial material;\nmaterial.diffuseColor = diffuseColor.rgb;\nmaterial.specularColor = specular;\nmaterial.specularShininess = shininess;\nmaterial.specularStrength = specularStrength;",lights_phong_pars_fragment:"varying vec3 vViewPosition;\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n#endif\nstruct BlinnPhongMaterial {\n\tvec3\tdiffuseColor;\n\tvec3\tspecularColor;\n\tfloat\tspecularShininess;\n\tfloat\tspecularStrength;\n};\nvoid RE_Direct_BlinnPhong( const in IncidentLight directLight, const in GeometricContext geometry, const in BlinnPhongMaterial material, inout ReflectedLight reflectedLight ) {\n\t#ifdef TOON\n\t\tvec3 irradiance = getGradientIrradiance( geometry.normal, directLight.direction ) * directLight.color;\n\t#else\n\t\tfloat dotNL = saturate( dot( geometry.normal, directLight.direction ) );\n\t\tvec3 irradiance = dotNL * directLight.color;\n\t#endif\n\t#ifndef PHYSICALLY_CORRECT_LIGHTS\n\t\tirradiance *= PI;\n\t#endif\n\treflectedLight.directDiffuse += irradiance * BRDF_Diffuse_Lambert( material.diffuseColor );\n\treflectedLight.directSpecular += irradiance * BRDF_Specular_BlinnPhong( directLight, geometry, material.specularColor, material.specularShininess ) * material.specularStrength;\n}\nvoid RE_IndirectDiffuse_BlinnPhong( const in vec3 irradiance, const in GeometricContext geometry, const in BlinnPhongMaterial material, inout ReflectedLight reflectedLight ) {\n\treflectedLight.indirectDiffuse += irradiance * BRDF_Diffuse_Lambert( material.diffuseColor );\n}\n#define RE_Direct\t\t\t\tRE_Direct_BlinnPhong\n#define RE_IndirectDiffuse\t\tRE_IndirectDiffuse_BlinnPhong\n#define Material_LightProbeLOD( material )\t(0)",lights_physical_fragment:"PhysicalMaterial material;\nmaterial.diffuseColor = diffuseColor.rgb * ( 1.0 - metalnessFactor );\nmaterial.specularRoughness = clamp( roughnessFactor, 0.04, 1.0 );\n#ifdef STANDARD\n\tmaterial.specularColor = mix( vec3( DEFAULT_SPECULAR_COEFFICIENT ), diffuseColor.rgb, metalnessFactor );\n#else\n\tmaterial.specularColor = mix( vec3( MAXIMUM_SPECULAR_COEFFICIENT * pow2( reflectivity ) ), diffuseColor.rgb, metalnessFactor );\n\tmaterial.clearCoat = saturate( clearCoat );\tmaterial.clearCoatRoughness = clamp( clearCoatRoughness, 0.04, 1.0 );\n#endif",lights_physical_pars_fragment:"struct PhysicalMaterial {\n\tvec3\tdiffuseColor;\n\tfloat\tspecularRoughness;\n\tvec3\tspecularColor;\n\t#ifndef STANDARD\n\t\tfloat clearCoat;\n\t\tfloat clearCoatRoughness;\n\t#endif\n};\n#define MAXIMUM_SPECULAR_COEFFICIENT 0.16\n#define DEFAULT_SPECULAR_COEFFICIENT 0.04\nfloat clearCoatDHRApprox( const in float roughness, const in float dotNL ) {\n\treturn DEFAULT_SPECULAR_COEFFICIENT + ( 1.0 - DEFAULT_SPECULAR_COEFFICIENT ) * ( pow( 1.0 - dotNL, 5.0 ) * pow( 1.0 - roughness, 2.0 ) );\n}\n#if NUM_RECT_AREA_LIGHTS > 0\n\tvoid RE_Direct_RectArea_Physical( const in RectAreaLight rectAreaLight, const in GeometricContext geometry, const in PhysicalMaterial material, inout ReflectedLight reflectedLight ) {\n\t\tvec3 normal = geometry.normal;\n\t\tvec3 viewDir = geometry.viewDir;\n\t\tvec3 position = geometry.position;\n\t\tvec3 lightPos = rectAreaLight.position;\n\t\tvec3 halfWidth = rectAreaLight.halfWidth;\n\t\tvec3 halfHeight = rectAreaLight.halfHeight;\n\t\tvec3 lightColor = rectAreaLight.color;\n\t\tfloat roughness = material.specularRoughness;\n\t\tvec3 rectCoords[ 4 ];\n\t\trectCoords[ 0 ] = lightPos + halfWidth - halfHeight;\t\trectCoords[ 1 ] = lightPos - halfWidth - halfHeight;\n\t\trectCoords[ 2 ] = lightPos - halfWidth + halfHeight;\n\t\trectCoords[ 3 ] = lightPos + halfWidth + halfHeight;\n\t\tvec2 uv = LTC_Uv( normal, viewDir, roughness );\n\t\tvec4 t1 = texture2D( ltc_1, uv );\n\t\tvec4 t2 = texture2D( ltc_2, uv );\n\t\tmat3 mInv = mat3(\n\t\t\tvec3( t1.x, 0, t1.y ),\n\t\t\tvec3( 0, 1, 0 ),\n\t\t\tvec3( t1.z, 0, t1.w )\n\t\t);\n\t\tvec3 fresnel = ( material.specularColor * t2.x + ( vec3( 1.0 ) - material.specularColor ) * t2.y );\n\t\treflectedLight.directSpecular += lightColor * fresnel * LTC_Evaluate( normal, viewDir, position, mInv, rectCoords );\n\t\treflectedLight.directDiffuse += lightColor * material.diffuseColor * LTC_Evaluate( normal, viewDir, position, mat3( 1.0 ), rectCoords );\n\t}\n#endif\nvoid RE_Direct_Physical( const in IncidentLight directLight, const in GeometricContext geometry, const in PhysicalMaterial material, inout ReflectedLight reflectedLight ) {\n\tfloat dotNL = saturate( dot( geometry.normal, directLight.direction ) );\n\tvec3 irradiance = dotNL * directLight.color;\n\t#ifndef PHYSICALLY_CORRECT_LIGHTS\n\t\tirradiance *= PI;\n\t#endif\n\t#ifndef STANDARD\n\t\tfloat clearCoatDHR = material.clearCoat * clearCoatDHRApprox( material.clearCoatRoughness, dotNL );\n\t#else\n\t\tfloat clearCoatDHR = 0.0;\n\t#endif\n\treflectedLight.directSpecular += ( 1.0 - clearCoatDHR ) * irradiance * BRDF_Specular_GGX( directLight, geometry, material.specularColor, material.specularRoughness );\n\treflectedLight.directDiffuse += ( 1.0 - clearCoatDHR ) * irradiance * BRDF_Diffuse_Lambert( material.diffuseColor );\n\t#ifndef STANDARD\n\t\treflectedLight.directSpecular += irradiance * material.clearCoat * BRDF_Specular_GGX( directLight, geometry, vec3( DEFAULT_SPECULAR_COEFFICIENT ), material.clearCoatRoughness );\n\t#endif\n}\nvoid RE_IndirectDiffuse_Physical( const in vec3 irradiance, const in GeometricContext geometry, const in PhysicalMaterial material, inout ReflectedLight reflectedLight ) {\n\t#ifndef ENVMAP_TYPE_CUBE_UV\n\t\treflectedLight.indirectDiffuse += irradiance * BRDF_Diffuse_Lambert( material.diffuseColor );\n\t#endif\n}\nvoid RE_IndirectSpecular_Physical( const in vec3 radiance, const in vec3 irradiance, const in vec3 clearCoatRadiance, const in GeometricContext geometry, const in PhysicalMaterial material, inout ReflectedLight reflectedLight) {\n\t#ifndef STANDARD\n\t\tfloat dotNV = saturate( dot( geometry.normal, geometry.viewDir ) );\n\t\tfloat dotNL = dotNV;\n\t\tfloat clearCoatDHR = material.clearCoat * clearCoatDHRApprox( material.clearCoatRoughness, dotNL );\n\t#else\n\t\tfloat clearCoatDHR = 0.0;\n\t#endif\n\tfloat clearCoatInv = 1.0 - clearCoatDHR;\n\t#if defined( ENVMAP_TYPE_CUBE_UV )\n\t\tvec3 singleScattering = vec3( 0.0 );\n\t\tvec3 multiScattering = vec3( 0.0 );\n\t\tvec3 cosineWeightedIrradiance = irradiance * RECIPROCAL_PI;\n\t\tBRDF_Specular_Multiscattering_Environment( geometry, material.specularColor, material.specularRoughness, singleScattering, multiScattering );\n\t\tvec3 diffuse = material.diffuseColor;\n\t\treflectedLight.indirectSpecular += clearCoatInv * radiance * singleScattering;\n\t\treflectedLight.indirectDiffuse += multiScattering * cosineWeightedIrradiance;\n\t\treflectedLight.indirectDiffuse += diffuse * cosineWeightedIrradiance;\n\t#else\n\t\treflectedLight.indirectSpecular += clearCoatInv * radiance * BRDF_Specular_GGX_Environment( geometry, material.specularColor, material.specularRoughness );\n\t#endif\n\t#ifndef STANDARD\n\t\treflectedLight.indirectSpecular += clearCoatRadiance * material.clearCoat * BRDF_Specular_GGX_Environment( geometry, vec3( DEFAULT_SPECULAR_COEFFICIENT ), material.clearCoatRoughness );\n\t#endif\n}\n#define RE_Direct\t\t\t\tRE_Direct_Physical\n#define RE_Direct_RectArea\t\tRE_Direct_RectArea_Physical\n#define RE_IndirectDiffuse\t\tRE_IndirectDiffuse_Physical\n#define RE_IndirectSpecular\t\tRE_IndirectSpecular_Physical\n#define Material_BlinnShininessExponent( material ) GGXRoughnessToBlinnExponent( material.specularRoughness )\n#define Material_ClearCoat_BlinnShininessExponent( material ) GGXRoughnessToBlinnExponent( material.clearCoatRoughness )\nfloat computeSpecularOcclusion( const in float dotNV, const in float ambientOcclusion, const in float roughness ) {\n\treturn saturate( pow( dotNV + ambientOcclusion, exp2( - 16.0 * roughness - 1.0 ) ) - 1.0 + ambientOcclusion );\n}",lights_fragment_begin:"\nGeometricContext geometry;\ngeometry.position = - vViewPosition;\ngeometry.normal = normal;\ngeometry.viewDir = normalize( vViewPosition );\nIncidentLight directLight;\n#if ( NUM_POINT_LIGHTS > 0 ) && defined( RE_Direct )\n\tPointLight pointLight;\n\t#pragma unroll_loop\n\tfor ( int i = 0; i < NUM_POINT_LIGHTS; i ++ ) {\n\t\tpointLight = pointLights[ i ];\n\t\tgetPointDirectLightIrradiance( pointLight, geometry, directLight );\n\t\t#ifdef USE_SHADOWMAP\n\t\tdirectLight.color *= all( bvec2( pointLight.shadow, directLight.visible ) ) ? getPointShadow( pointShadowMap[ i ], pointLight.shadowMapSize, pointLight.shadowBias, pointLight.shadowRadius, vPointShadowCoord[ i ], pointLight.shadowCameraNear, pointLight.shadowCameraFar ) : 1.0;\n\t\t#endif\n\t\tRE_Direct( directLight, geometry, material, reflectedLight );\n\t}\n#endif\n#if ( NUM_SPOT_LIGHTS > 0 ) && defined( RE_Direct )\n\tSpotLight spotLight;\n\t#pragma unroll_loop\n\tfor ( int i = 0; i < NUM_SPOT_LIGHTS; i ++ ) {\n\t\tspotLight = spotLights[ i ];\n\t\tgetSpotDirectLightIrradiance( spotLight, geometry, directLight );\n\t\t#ifdef USE_SHADOWMAP\n\t\tdirectLight.color *= all( bvec2( spotLight.shadow, directLight.visible ) ) ? getShadow( spotShadowMap[ i ], spotLight.shadowMapSize, spotLight.shadowBias, spotLight.shadowRadius, vSpotShadowCoord[ i ] ) : 1.0;\n\t\t#endif\n\t\tRE_Direct( directLight, geometry, material, reflectedLight );\n\t}\n#endif\n#if ( NUM_DIR_LIGHTS > 0 ) && defined( RE_Direct )\n\tDirectionalLight directionalLight;\n\t#pragma unroll_loop\n\tfor ( int i = 0; i < NUM_DIR_LIGHTS; i ++ ) {\n\t\tdirectionalLight = directionalLights[ i ];\n\t\tgetDirectionalDirectLightIrradiance( directionalLight, geometry, directLight );\n\t\t#ifdef USE_SHADOWMAP\n\t\tdirectLight.color *= all( bvec2( directionalLight.shadow, directLight.visible ) ) ? getShadow( directionalShadowMap[ i ], directionalLight.shadowMapSize, directionalLight.shadowBias, directionalLight.shadowRadius, vDirectionalShadowCoord[ i ] ) : 1.0;\n\t\t#endif\n\t\tRE_Direct( directLight, geometry, material, reflectedLight );\n\t}\n#endif\n#if ( NUM_RECT_AREA_LIGHTS > 0 ) && defined( RE_Direct_RectArea )\n\tRectAreaLight rectAreaLight;\n\t#pragma unroll_loop\n\tfor ( int i = 0; i < NUM_RECT_AREA_LIGHTS; i ++ ) {\n\t\trectAreaLight = rectAreaLights[ i ];\n\t\tRE_Direct_RectArea( rectAreaLight, geometry, material, reflectedLight );\n\t}\n#endif\n#if defined( RE_IndirectDiffuse )\n\tvec3 irradiance = getAmbientLightIrradiance( ambientLightColor );\n\t#if ( NUM_HEMI_LIGHTS > 0 )\n\t\t#pragma unroll_loop\n\t\tfor ( int i = 0; i < NUM_HEMI_LIGHTS; i ++ ) {\n\t\t\tirradiance += getHemisphereLightIrradiance( hemisphereLights[ i ], geometry );\n\t\t}\n\t#endif\n#endif\n#if defined( RE_IndirectSpecular )\n\tvec3 radiance = vec3( 0.0 );\n\tvec3 clearCoatRadiance = vec3( 0.0 );\n#endif",lights_fragment_maps:"#if defined( RE_IndirectDiffuse )\n\t#ifdef USE_LIGHTMAP\n\t\tvec3 lightMapIrradiance = texture2D( lightMap, vUv2 ).xyz * lightMapIntensity;\n\t\t#ifndef PHYSICALLY_CORRECT_LIGHTS\n\t\t\tlightMapIrradiance *= PI;\n\t\t#endif\n\t\tirradiance += lightMapIrradiance;\n\t#endif\n\t#if defined( USE_ENVMAP ) && defined( PHYSICAL ) && defined( ENVMAP_TYPE_CUBE_UV )\n\t\tirradiance += getLightProbeIndirectIrradiance( geometry, maxMipLevel );\n\t#endif\n#endif\n#if defined( USE_ENVMAP ) && defined( RE_IndirectSpecular )\n\tradiance += getLightProbeIndirectRadiance( geometry, Material_BlinnShininessExponent( material ), maxMipLevel );\n\t#ifndef STANDARD\n\t\tclearCoatRadiance += getLightProbeIndirectRadiance( geometry, Material_ClearCoat_BlinnShininessExponent( material ), maxMipLevel );\n\t#endif\n#endif",lights_fragment_end:"#if defined( RE_IndirectDiffuse )\n\tRE_IndirectDiffuse( irradiance, geometry, material, reflectedLight );\n#endif\n#if defined( RE_IndirectSpecular )\n\tRE_IndirectSpecular( radiance, irradiance, clearCoatRadiance, geometry, material, reflectedLight );\n#endif",logdepthbuf_fragment:"#if defined( USE_LOGDEPTHBUF ) && defined( USE_LOGDEPTHBUF_EXT )\n\tgl_FragDepthEXT = log2( vFragDepth ) * logDepthBufFC * 0.5;\n#endif",logdepthbuf_pars_fragment:"#if defined( USE_LOGDEPTHBUF ) && defined( USE_LOGDEPTHBUF_EXT )\n\tuniform float logDepthBufFC;\n\tvarying float vFragDepth;\n#endif",logdepthbuf_pars_vertex:"#ifdef USE_LOGDEPTHBUF\n\t#ifdef USE_LOGDEPTHBUF_EXT\n\t\tvarying float vFragDepth;\n\t#else\n\t\tuniform float logDepthBufFC;\n\t#endif\n#endif",logdepthbuf_vertex:"#ifdef USE_LOGDEPTHBUF\n\t#ifdef USE_LOGDEPTHBUF_EXT\n\t\tvFragDepth = 1.0 + gl_Position.w;\n\t#else\n\t\tgl_Position.z = log2( max( EPSILON, gl_Position.w + 1.0 ) ) * logDepthBufFC - 1.0;\n\t\tgl_Position.z *= gl_Position.w;\n\t#endif\n#endif",map_fragment:"#ifdef USE_MAP\n\tvec4 texelColor = texture2D( map, vUv );\n\ttexelColor = mapTexelToLinear( texelColor );\n\tdiffuseColor *= texelColor;\n#endif",map_pars_fragment:"#ifdef USE_MAP\n\tuniform sampler2D map;\n#endif",map_particle_fragment:"#ifdef USE_MAP\n\tvec2 uv = ( uvTransform * vec3( gl_PointCoord.x, 1.0 - gl_PointCoord.y, 1 ) ).xy;\n\tvec4 mapTexel = texture2D( map, uv );\n\tdiffuseColor *= mapTexelToLinear( mapTexel );\n#endif",map_particle_pars_fragment:"#ifdef USE_MAP\n\tuniform mat3 uvTransform;\n\tuniform sampler2D map;\n#endif",metalnessmap_fragment:"float metalnessFactor = metalness;\n#ifdef USE_METALNESSMAP\n\tvec4 texelMetalness = texture2D( metalnessMap, vUv );\n\tmetalnessFactor *= texelMetalness.b;\n#endif",metalnessmap_pars_fragment:"#ifdef USE_METALNESSMAP\n\tuniform sampler2D metalnessMap;\n#endif",morphnormal_vertex:"#ifdef USE_MORPHNORMALS\n\tobjectNormal += ( morphNormal0 - normal ) * morphTargetInfluences[ 0 ];\n\tobjectNormal += ( morphNormal1 - normal ) * morphTargetInfluences[ 1 ];\n\tobjectNormal += ( morphNormal2 - normal ) * morphTargetInfluences[ 2 ];\n\tobjectNormal += ( morphNormal3 - normal ) * morphTargetInfluences[ 3 ];\n#endif",morphtarget_pars_vertex:"#ifdef USE_MORPHTARGETS\n\t#ifndef USE_MORPHNORMALS\n\tuniform float morphTargetInfluences[ 8 ];\n\t#else\n\tuniform float morphTargetInfluences[ 4 ];\n\t#endif\n#endif",morphtarget_vertex:"#ifdef USE_MORPHTARGETS\n\ttransformed += ( morphTarget0 - position ) * morphTargetInfluences[ 0 ];\n\ttransformed += ( morphTarget1 - position ) * morphTargetInfluences[ 1 ];\n\ttransformed += ( morphTarget2 - position ) * morphTargetInfluences[ 2 ];\n\ttransformed += ( morphTarget3 - position ) * morphTargetInfluences[ 3 ];\n\t#ifndef USE_MORPHNORMALS\n\ttransformed += ( morphTarget4 - position ) * morphTargetInfluences[ 4 ];\n\ttransformed += ( morphTarget5 - position ) * morphTargetInfluences[ 5 ];\n\ttransformed += ( morphTarget6 - position ) * morphTargetInfluences[ 6 ];\n\ttransformed += ( morphTarget7 - position ) * morphTargetInfluences[ 7 ];\n\t#endif\n#endif",normal_fragment_begin:"#ifdef FLAT_SHADED\n\tvec3 fdx = vec3( dFdx( vViewPosition.x ), dFdx( vViewPosition.y ), dFdx( vViewPosition.z ) );\n\tvec3 fdy = vec3( dFdy( vViewPosition.x ), dFdy( vViewPosition.y ), dFdy( vViewPosition.z ) );\n\tvec3 normal = normalize( cross( fdx, fdy ) );\n#else\n\tvec3 normal = normalize( vNormal );\n\t#ifdef DOUBLE_SIDED\n\t\tnormal = normal * ( float( gl_FrontFacing ) * 2.0 - 1.0 );\n\t#endif\n\t#ifdef USE_TANGENT\n\t\tvec3 tangent = normalize( vTangent );\n\t\tvec3 bitangent = normalize( vBitangent );\n\t\t#ifdef DOUBLE_SIDED\n\t\t\ttangent = tangent * ( float( gl_FrontFacing ) * 2.0 - 1.0 );\n\t\t\tbitangent = bitangent * ( float( gl_FrontFacing ) * 2.0 - 1.0 );\n\t\t#endif\n\t#endif\n#endif",normal_fragment_maps:"#ifdef USE_NORMALMAP\n\t#ifdef OBJECTSPACE_NORMALMAP\n\t\tnormal = texture2D( normalMap, vUv ).xyz * 2.0 - 1.0;\n\t\t#ifdef FLIP_SIDED\n\t\t\tnormal = - normal;\n\t\t#endif\n\t\t#ifdef DOUBLE_SIDED\n\t\t\tnormal = normal * ( float( gl_FrontFacing ) * 2.0 - 1.0 );\n\t\t#endif\n\t\tnormal = normalize( normalMatrix * normal );\n\t#else\n\t\t#ifdef USE_TANGENT\n\t\t\tmat3 vTBN = mat3( tangent, bitangent, normal );\n\t\t\tvec3 mapN = texture2D( normalMap, vUv ).xyz * 2.0 - 1.0;\n\t\t\tmapN.xy = normalScale * mapN.xy;\n\t\t\tnormal = normalize( vTBN * mapN );\n\t\t#else\n\t\t\tnormal = perturbNormal2Arb( -vViewPosition, normal );\n\t\t#endif\n\t#endif\n#elif defined( USE_BUMPMAP )\n\tnormal = perturbNormalArb( -vViewPosition, normal, dHdxy_fwd() );\n#endif",normalmap_pars_fragment:"#ifdef USE_NORMALMAP\n\tuniform sampler2D normalMap;\n\tuniform vec2 normalScale;\n\t#ifdef OBJECTSPACE_NORMALMAP\n\t\tuniform mat3 normalMatrix;\n\t#else\n\t\tvec3 perturbNormal2Arb( vec3 eye_pos, vec3 surf_norm ) {\n\t\t\tvec3 q0 = vec3( dFdx( eye_pos.x ), dFdx( eye_pos.y ), dFdx( eye_pos.z ) );\n\t\t\tvec3 q1 = vec3( dFdy( eye_pos.x ), dFdy( eye_pos.y ), dFdy( eye_pos.z ) );\n\t\t\tvec2 st0 = dFdx( vUv.st );\n\t\t\tvec2 st1 = dFdy( vUv.st );\n\t\t\tfloat scale = sign( st1.t * st0.s - st0.t * st1.s );\n\t\t\tvec3 S = normalize( ( q0 * st1.t - q1 * st0.t ) * scale );\n\t\t\tvec3 T = normalize( ( - q0 * st1.s + q1 * st0.s ) * scale );\n\t\t\tvec3 N = normalize( surf_norm );\n\t\t\tmat3 tsn = mat3( S, T, N );\n\t\t\tvec3 mapN = texture2D( normalMap, vUv ).xyz * 2.0 - 1.0;\n\t\t\tmapN.xy *= normalScale;\n\t\t\tmapN.xy *= ( float( gl_FrontFacing ) * 2.0 - 1.0 );\n\t\t\treturn normalize( tsn * mapN );\n\t\t}\n\t#endif\n#endif",packing:"vec3 packNormalToRGB( const in vec3 normal ) {\n\treturn normalize( normal ) * 0.5 + 0.5;\n}\nvec3 unpackRGBToNormal( const in vec3 rgb ) {\n\treturn 2.0 * rgb.xyz - 1.0;\n}\nconst float PackUpscale = 256. / 255.;const float UnpackDownscale = 255. / 256.;\nconst vec3 PackFactors = vec3( 256. * 256. * 256., 256. * 256., 256. );\nconst vec4 UnpackFactors = UnpackDownscale / vec4( PackFactors, 1. );\nconst float ShiftRight8 = 1. / 256.;\nvec4 packDepthToRGBA( const in float v ) {\n\tvec4 r = vec4( fract( v * PackFactors ), v );\n\tr.yzw -= r.xyz * ShiftRight8;\treturn r * PackUpscale;\n}\nfloat unpackRGBAToDepth( const in vec4 v ) {\n\treturn dot( v, UnpackFactors );\n}\nfloat viewZToOrthographicDepth( const in float viewZ, const in float near, const in float far ) {\n\treturn ( viewZ + near ) / ( near - far );\n}\nfloat orthographicDepthToViewZ( const in float linearClipZ, const in float near, const in float far ) {\n\treturn linearClipZ * ( near - far ) - near;\n}\nfloat viewZToPerspectiveDepth( const in float viewZ, const in float near, const in float far ) {\n\treturn (( near + viewZ ) * far ) / (( far - near ) * viewZ );\n}\nfloat perspectiveDepthToViewZ( const in float invClipZ, const in float near, const in float far ) {\n\treturn ( near * far ) / ( ( far - near ) * invClipZ - far );\n}",premultiplied_alpha_fragment:"#ifdef PREMULTIPLIED_ALPHA\n\tgl_FragColor.rgb *= gl_FragColor.a;\n#endif",project_vertex:"vec4 mvPosition = modelViewMatrix * vec4( transformed, 1.0 );\ngl_Position = projectionMatrix * mvPosition;",dithering_fragment:"#if defined( DITHERING )\n\tgl_FragColor.rgb = dithering( gl_FragColor.rgb );\n#endif",dithering_pars_fragment:"#if defined( DITHERING )\n\tvec3 dithering( vec3 color ) {\n\t\tfloat grid_position = rand( gl_FragCoord.xy );\n\t\tvec3 dither_shift_RGB = vec3( 0.25 / 255.0, -0.25 / 255.0, 0.25 / 255.0 );\n\t\tdither_shift_RGB = mix( 2.0 * dither_shift_RGB, -2.0 * dither_shift_RGB, grid_position );\n\t\treturn color + dither_shift_RGB;\n\t}\n#endif",roughnessmap_fragment:"float roughnessFactor = roughness;\n#ifdef USE_ROUGHNESSMAP\n\tvec4 texelRoughness = texture2D( roughnessMap, vUv );\n\troughnessFactor *= texelRoughness.g;\n#endif",roughnessmap_pars_fragment:"#ifdef USE_ROUGHNESSMAP\n\tuniform sampler2D roughnessMap;\n#endif", +shadowmap_pars_fragment:"#ifdef USE_SHADOWMAP\n\t#if NUM_DIR_LIGHTS > 0\n\t\tuniform sampler2D directionalShadowMap[ NUM_DIR_LIGHTS ];\n\t\tvarying vec4 vDirectionalShadowCoord[ NUM_DIR_LIGHTS ];\n\t#endif\n\t#if NUM_SPOT_LIGHTS > 0\n\t\tuniform sampler2D spotShadowMap[ NUM_SPOT_LIGHTS ];\n\t\tvarying vec4 vSpotShadowCoord[ NUM_SPOT_LIGHTS ];\n\t#endif\n\t#if NUM_POINT_LIGHTS > 0\n\t\tuniform sampler2D pointShadowMap[ NUM_POINT_LIGHTS ];\n\t\tvarying vec4 vPointShadowCoord[ NUM_POINT_LIGHTS ];\n\t#endif\n\tfloat texture2DCompare( sampler2D depths, vec2 uv, float compare ) {\n\t\treturn step( compare, unpackRGBAToDepth( texture2D( depths, uv ) ) );\n\t}\n\tfloat texture2DShadowLerp( sampler2D depths, vec2 size, vec2 uv, float compare ) {\n\t\tconst vec2 offset = vec2( 0.0, 1.0 );\n\t\tvec2 texelSize = vec2( 1.0 ) / size;\n\t\tvec2 centroidUV = floor( uv * size + 0.5 ) / size;\n\t\tfloat lb = texture2DCompare( depths, centroidUV + texelSize * offset.xx, compare );\n\t\tfloat lt = texture2DCompare( depths, centroidUV + texelSize * offset.xy, compare );\n\t\tfloat rb = texture2DCompare( depths, centroidUV + texelSize * offset.yx, compare );\n\t\tfloat rt = texture2DCompare( depths, centroidUV + texelSize * offset.yy, compare );\n\t\tvec2 f = fract( uv * size + 0.5 );\n\t\tfloat a = mix( lb, lt, f.y );\n\t\tfloat b = mix( rb, rt, f.y );\n\t\tfloat c = mix( a, b, f.x );\n\t\treturn c;\n\t}\n\tfloat getShadow( sampler2D shadowMap, vec2 shadowMapSize, float shadowBias, float shadowRadius, vec4 shadowCoord ) {\n\t\tfloat shadow = 1.0;\n\t\tshadowCoord.xyz /= shadowCoord.w;\n\t\tshadowCoord.z += shadowBias;\n\t\tbvec4 inFrustumVec = bvec4 ( shadowCoord.x >= 0.0, shadowCoord.x <= 1.0, shadowCoord.y >= 0.0, shadowCoord.y <= 1.0 );\n\t\tbool inFrustum = all( inFrustumVec );\n\t\tbvec2 frustumTestVec = bvec2( inFrustum, shadowCoord.z <= 1.0 );\n\t\tbool frustumTest = all( frustumTestVec );\n\t\tif ( frustumTest ) {\n\t\t#if defined( SHADOWMAP_TYPE_PCF )\n\t\t\tvec2 texelSize = vec2( 1.0 ) / shadowMapSize;\n\t\t\tfloat dx0 = - texelSize.x * shadowRadius;\n\t\t\tfloat dy0 = - texelSize.y * shadowRadius;\n\t\t\tfloat dx1 = + texelSize.x * shadowRadius;\n\t\t\tfloat dy1 = + texelSize.y * shadowRadius;\n\t\t\tshadow = (\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx0, dy0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( 0.0, dy0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx1, dy0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx0, 0.0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy, shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx1, 0.0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx0, dy1 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( 0.0, dy1 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx1, dy1 ), shadowCoord.z )\n\t\t\t) * ( 1.0 / 9.0 );\n\t\t#elif defined( SHADOWMAP_TYPE_PCF_SOFT )\n\t\t\tvec2 texelSize = vec2( 1.0 ) / shadowMapSize;\n\t\t\tfloat dx0 = - texelSize.x * shadowRadius;\n\t\t\tfloat dy0 = - texelSize.y * shadowRadius;\n\t\t\tfloat dx1 = + texelSize.x * shadowRadius;\n\t\t\tfloat dy1 = + texelSize.y * shadowRadius;\n\t\t\tshadow = (\n\t\t\t\ttexture2DShadowLerp( shadowMap, shadowMapSize, shadowCoord.xy + vec2( dx0, dy0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DShadowLerp( shadowMap, shadowMapSize, shadowCoord.xy + vec2( 0.0, dy0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DShadowLerp( shadowMap, shadowMapSize, shadowCoord.xy + vec2( dx1, dy0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DShadowLerp( shadowMap, shadowMapSize, shadowCoord.xy + vec2( dx0, 0.0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DShadowLerp( shadowMap, shadowMapSize, shadowCoord.xy, shadowCoord.z ) +\n\t\t\t\ttexture2DShadowLerp( shadowMap, shadowMapSize, shadowCoord.xy + vec2( dx1, 0.0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DShadowLerp( shadowMap, shadowMapSize, shadowCoord.xy + vec2( dx0, dy1 ), shadowCoord.z ) +\n\t\t\t\ttexture2DShadowLerp( shadowMap, shadowMapSize, shadowCoord.xy + vec2( 0.0, dy1 ), shadowCoord.z ) +\n\t\t\t\ttexture2DShadowLerp( shadowMap, shadowMapSize, shadowCoord.xy + vec2( dx1, dy1 ), shadowCoord.z )\n\t\t\t) * ( 1.0 / 9.0 );\n\t\t#else\n\t\t\tshadow = texture2DCompare( shadowMap, shadowCoord.xy, shadowCoord.z );\n\t\t#endif\n\t\t}\n\t\treturn shadow;\n\t}\n\tvec2 cubeToUV( vec3 v, float texelSizeY ) {\n\t\tvec3 absV = abs( v );\n\t\tfloat scaleToCube = 1.0 / max( absV.x, max( absV.y, absV.z ) );\n\t\tabsV *= scaleToCube;\n\t\tv *= scaleToCube * ( 1.0 - 2.0 * texelSizeY );\n\t\tvec2 planar = v.xy;\n\t\tfloat almostATexel = 1.5 * texelSizeY;\n\t\tfloat almostOne = 1.0 - almostATexel;\n\t\tif ( absV.z >= almostOne ) {\n\t\t\tif ( v.z > 0.0 )\n\t\t\t\tplanar.x = 4.0 - v.x;\n\t\t} else if ( absV.x >= almostOne ) {\n\t\t\tfloat signX = sign( v.x );\n\t\t\tplanar.x = v.z * signX + 2.0 * signX;\n\t\t} else if ( absV.y >= almostOne ) {\n\t\t\tfloat signY = sign( v.y );\n\t\t\tplanar.x = v.x + 2.0 * signY + 2.0;\n\t\t\tplanar.y = v.z * signY - 2.0;\n\t\t}\n\t\treturn vec2( 0.125, 0.25 ) * planar + vec2( 0.375, 0.75 );\n\t}\n\tfloat getPointShadow( sampler2D shadowMap, vec2 shadowMapSize, float shadowBias, float shadowRadius, vec4 shadowCoord, float shadowCameraNear, float shadowCameraFar ) {\n\t\tvec2 texelSize = vec2( 1.0 ) / ( shadowMapSize * vec2( 4.0, 2.0 ) );\n\t\tvec3 lightToPosition = shadowCoord.xyz;\n\t\tfloat dp = ( length( lightToPosition ) - shadowCameraNear ) / ( shadowCameraFar - shadowCameraNear );\t\tdp += shadowBias;\n\t\tvec3 bd3D = normalize( lightToPosition );\n\t\t#if defined( SHADOWMAP_TYPE_PCF ) || defined( SHADOWMAP_TYPE_PCF_SOFT )\n\t\t\tvec2 offset = vec2( - 1, 1 ) * shadowRadius * texelSize.y;\n\t\t\treturn (\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.xyy, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.yyy, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.xyx, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.yyx, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.xxy, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.yxy, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.xxx, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.yxx, texelSize.y ), dp )\n\t\t\t) * ( 1.0 / 9.0 );\n\t\t#else\n\t\t\treturn texture2DCompare( shadowMap, cubeToUV( bd3D, texelSize.y ), dp );\n\t\t#endif\n\t}\n#endif",shadowmap_pars_vertex:"#ifdef USE_SHADOWMAP\n\t#if NUM_DIR_LIGHTS > 0\n\t\tuniform mat4 directionalShadowMatrix[ NUM_DIR_LIGHTS ];\n\t\tvarying vec4 vDirectionalShadowCoord[ NUM_DIR_LIGHTS ];\n\t#endif\n\t#if NUM_SPOT_LIGHTS > 0\n\t\tuniform mat4 spotShadowMatrix[ NUM_SPOT_LIGHTS ];\n\t\tvarying vec4 vSpotShadowCoord[ NUM_SPOT_LIGHTS ];\n\t#endif\n\t#if NUM_POINT_LIGHTS > 0\n\t\tuniform mat4 pointShadowMatrix[ NUM_POINT_LIGHTS ];\n\t\tvarying vec4 vPointShadowCoord[ NUM_POINT_LIGHTS ];\n\t#endif\n#endif",shadowmap_vertex:"#ifdef USE_SHADOWMAP\n\t#if NUM_DIR_LIGHTS > 0\n\t#pragma unroll_loop\n\tfor ( int i = 0; i < NUM_DIR_LIGHTS; i ++ ) {\n\t\tvDirectionalShadowCoord[ i ] = directionalShadowMatrix[ i ] * worldPosition;\n\t}\n\t#endif\n\t#if NUM_SPOT_LIGHTS > 0\n\t#pragma unroll_loop\n\tfor ( int i = 0; i < NUM_SPOT_LIGHTS; i ++ ) {\n\t\tvSpotShadowCoord[ i ] = spotShadowMatrix[ i ] * worldPosition;\n\t}\n\t#endif\n\t#if NUM_POINT_LIGHTS > 0\n\t#pragma unroll_loop\n\tfor ( int i = 0; i < NUM_POINT_LIGHTS; i ++ ) {\n\t\tvPointShadowCoord[ i ] = pointShadowMatrix[ i ] * worldPosition;\n\t}\n\t#endif\n#endif",shadowmask_pars_fragment:"float getShadowMask() {\n\tfloat shadow = 1.0;\n\t#ifdef USE_SHADOWMAP\n\t#if NUM_DIR_LIGHTS > 0\n\tDirectionalLight directionalLight;\n\t#pragma unroll_loop\n\tfor ( int i = 0; i < NUM_DIR_LIGHTS; i ++ ) {\n\t\tdirectionalLight = directionalLights[ i ];\n\t\tshadow *= bool( directionalLight.shadow ) ? getShadow( directionalShadowMap[ i ], directionalLight.shadowMapSize, directionalLight.shadowBias, directionalLight.shadowRadius, vDirectionalShadowCoord[ i ] ) : 1.0;\n\t}\n\t#endif\n\t#if NUM_SPOT_LIGHTS > 0\n\tSpotLight spotLight;\n\t#pragma unroll_loop\n\tfor ( int i = 0; i < NUM_SPOT_LIGHTS; i ++ ) {\n\t\tspotLight = spotLights[ i ];\n\t\tshadow *= bool( spotLight.shadow ) ? getShadow( spotShadowMap[ i ], spotLight.shadowMapSize, spotLight.shadowBias, spotLight.shadowRadius, vSpotShadowCoord[ i ] ) : 1.0;\n\t}\n\t#endif\n\t#if NUM_POINT_LIGHTS > 0\n\tPointLight pointLight;\n\t#pragma unroll_loop\n\tfor ( int i = 0; i < NUM_POINT_LIGHTS; i ++ ) {\n\t\tpointLight = pointLights[ i ];\n\t\tshadow *= bool( pointLight.shadow ) ? getPointShadow( pointShadowMap[ i ], pointLight.shadowMapSize, pointLight.shadowBias, pointLight.shadowRadius, vPointShadowCoord[ i ], pointLight.shadowCameraNear, pointLight.shadowCameraFar ) : 1.0;\n\t}\n\t#endif\n\t#endif\n\treturn shadow;\n}",skinbase_vertex:"#ifdef USE_SKINNING\n\tmat4 boneMatX = getBoneMatrix( skinIndex.x );\n\tmat4 boneMatY = getBoneMatrix( skinIndex.y );\n\tmat4 boneMatZ = getBoneMatrix( skinIndex.z );\n\tmat4 boneMatW = getBoneMatrix( skinIndex.w );\n#endif",skinning_pars_vertex:"#ifdef USE_SKINNING\n\tuniform mat4 bindMatrix;\n\tuniform mat4 bindMatrixInverse;\n\t#ifdef BONE_TEXTURE\n\t\tuniform sampler2D boneTexture;\n\t\tuniform int boneTextureSize;\n\t\tmat4 getBoneMatrix( const in float i ) {\n\t\t\tfloat j = i * 4.0;\n\t\t\tfloat x = mod( j, float( boneTextureSize ) );\n\t\t\tfloat y = floor( j / float( boneTextureSize ) );\n\t\t\tfloat dx = 1.0 / float( boneTextureSize );\n\t\t\tfloat dy = 1.0 / float( boneTextureSize );\n\t\t\ty = dy * ( y + 0.5 );\n\t\t\tvec4 v1 = texture2D( boneTexture, vec2( dx * ( x + 0.5 ), y ) );\n\t\t\tvec4 v2 = texture2D( boneTexture, vec2( dx * ( x + 1.5 ), y ) );\n\t\t\tvec4 v3 = texture2D( boneTexture, vec2( dx * ( x + 2.5 ), y ) );\n\t\t\tvec4 v4 = texture2D( boneTexture, vec2( dx * ( x + 3.5 ), y ) );\n\t\t\tmat4 bone = mat4( v1, v2, v3, v4 );\n\t\t\treturn bone;\n\t\t}\n\t#else\n\t\tuniform mat4 boneMatrices[ MAX_BONES ];\n\t\tmat4 getBoneMatrix( const in float i ) {\n\t\t\tmat4 bone = boneMatrices[ int(i) ];\n\t\t\treturn bone;\n\t\t}\n\t#endif\n#endif",skinning_vertex:"#ifdef USE_SKINNING\n\tvec4 skinVertex = bindMatrix * vec4( transformed, 1.0 );\n\tvec4 skinned = vec4( 0.0 );\n\tskinned += boneMatX * skinVertex * skinWeight.x;\n\tskinned += boneMatY * skinVertex * skinWeight.y;\n\tskinned += boneMatZ * skinVertex * skinWeight.z;\n\tskinned += boneMatW * skinVertex * skinWeight.w;\n\ttransformed = ( bindMatrixInverse * skinned ).xyz;\n#endif",skinnormal_vertex:"#ifdef USE_SKINNING\n\tmat4 skinMatrix = mat4( 0.0 );\n\tskinMatrix += skinWeight.x * boneMatX;\n\tskinMatrix += skinWeight.y * boneMatY;\n\tskinMatrix += skinWeight.z * boneMatZ;\n\tskinMatrix += skinWeight.w * boneMatW;\n\tskinMatrix = bindMatrixInverse * skinMatrix * bindMatrix;\n\tobjectNormal = vec4( skinMatrix * vec4( objectNormal, 0.0 ) ).xyz;\n\t#ifdef USE_TANGENT\n\t\tobjectTangent = vec4( skinMatrix * vec4( objectTangent, 0.0 ) ).xyz;\n\t#endif\n#endif",specularmap_fragment:"float specularStrength;\n#ifdef USE_SPECULARMAP\n\tvec4 texelSpecular = texture2D( specularMap, vUv );\n\tspecularStrength = texelSpecular.r;\n#else\n\tspecularStrength = 1.0;\n#endif",specularmap_pars_fragment:"#ifdef USE_SPECULARMAP\n\tuniform sampler2D specularMap;\n#endif",tonemapping_fragment:"#if defined( TONE_MAPPING )\n\tgl_FragColor.rgb = toneMapping( gl_FragColor.rgb );\n#endif",tonemapping_pars_fragment:"#ifndef saturate\n\t#define saturate(a) clamp( a, 0.0, 1.0 )\n#endif\nuniform float toneMappingExposure;\nuniform float toneMappingWhitePoint;\nvec3 LinearToneMapping( vec3 color ) {\n\treturn toneMappingExposure * color;\n}\nvec3 ReinhardToneMapping( vec3 color ) {\n\tcolor *= toneMappingExposure;\n\treturn saturate( color / ( vec3( 1.0 ) + color ) );\n}\n#define Uncharted2Helper( x ) max( ( ( x * ( 0.15 * x + 0.10 * 0.50 ) + 0.20 * 0.02 ) / ( x * ( 0.15 * x + 0.50 ) + 0.20 * 0.30 ) ) - 0.02 / 0.30, vec3( 0.0 ) )\nvec3 Uncharted2ToneMapping( vec3 color ) {\n\tcolor *= toneMappingExposure;\n\treturn saturate( Uncharted2Helper( color ) / Uncharted2Helper( vec3( toneMappingWhitePoint ) ) );\n}\nvec3 OptimizedCineonToneMapping( vec3 color ) {\n\tcolor *= toneMappingExposure;\n\tcolor = max( vec3( 0.0 ), color - 0.004 );\n\treturn pow( ( color * ( 6.2 * color + 0.5 ) ) / ( color * ( 6.2 * color + 1.7 ) + 0.06 ), vec3( 2.2 ) );\n}\nvec3 ACESFilmicToneMapping( vec3 color ) {\n\tcolor *= toneMappingExposure;\n\treturn saturate( ( color * ( 2.51 * color + 0.03 ) ) / ( color * ( 2.43 * color + 0.59 ) + 0.14 ) );\n}",uv_pars_fragment:"#if defined( USE_MAP ) || defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) || defined( USE_SPECULARMAP ) || defined( USE_ALPHAMAP ) || defined( USE_EMISSIVEMAP ) || defined( USE_ROUGHNESSMAP ) || defined( USE_METALNESSMAP )\n\tvarying vec2 vUv;\n#endif",uv_pars_vertex:"#if defined( USE_MAP ) || defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) || defined( USE_SPECULARMAP ) || defined( USE_ALPHAMAP ) || defined( USE_EMISSIVEMAP ) || defined( USE_ROUGHNESSMAP ) || defined( USE_METALNESSMAP )\n\tvarying vec2 vUv;\n\tuniform mat3 uvTransform;\n#endif",uv_vertex:"#if defined( USE_MAP ) || defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) || defined( USE_SPECULARMAP ) || defined( USE_ALPHAMAP ) || defined( USE_EMISSIVEMAP ) || defined( USE_ROUGHNESSMAP ) || defined( USE_METALNESSMAP )\n\tvUv = ( uvTransform * vec3( uv, 1 ) ).xy;\n#endif",uv2_pars_fragment:"#if defined( USE_LIGHTMAP ) || defined( USE_AOMAP )\n\tvarying vec2 vUv2;\n#endif",uv2_pars_vertex:"#if defined( USE_LIGHTMAP ) || defined( USE_AOMAP )\n\tattribute vec2 uv2;\n\tvarying vec2 vUv2;\n#endif",uv2_vertex:"#if defined( USE_LIGHTMAP ) || defined( USE_AOMAP )\n\tvUv2 = uv2;\n#endif",worldpos_vertex:"#if defined( USE_ENVMAP ) || defined( DISTANCE ) || defined ( USE_SHADOWMAP )\n\tvec4 worldPosition = modelMatrix * vec4( transformed, 1.0 );\n#endif",background_frag:"uniform sampler2D t2D;\nvarying vec2 vUv;\nvoid main() {\n\tvec4 texColor = texture2D( t2D, vUv );\n\tgl_FragColor = mapTexelToLinear( texColor );\n\t#include \n\t#include \n}",background_vert:"varying vec2 vUv;\nuniform mat3 uvTransform;\nvoid main() {\n\tvUv = ( uvTransform * vec3( uv, 1 ) ).xy;\n\tgl_Position = vec4( position.xy, 1.0, 1.0 );\n}",cube_frag:"uniform samplerCube tCube;\nuniform float tFlip;\nuniform float opacity;\nvarying vec3 vWorldDirection;\nvoid main() {\n\tvec4 texColor = textureCube( tCube, vec3( tFlip * vWorldDirection.x, vWorldDirection.yz ) );\n\tgl_FragColor = mapTexelToLinear( texColor );\n\tgl_FragColor.a *= opacity;\n\t#include \n\t#include \n}",cube_vert:"varying vec3 vWorldDirection;\n#include \nvoid main() {\n\tvWorldDirection = transformDirection( position, modelMatrix );\n\t#include \n\t#include \n\tgl_Position.z = gl_Position.w;\n}",depth_frag:"#if DEPTH_PACKING == 3200\n\tuniform float opacity;\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tvec4 diffuseColor = vec4( 1.0 );\n\t#if DEPTH_PACKING == 3200\n\t\tdiffuseColor.a = opacity;\n\t#endif\n\t#include \n\t#include \n\t#include \n\t#include \n\t#if DEPTH_PACKING == 3200\n\t\tgl_FragColor = vec4( vec3( 1.0 - gl_FragCoord.z ), opacity );\n\t#elif DEPTH_PACKING == 3201\n\t\tgl_FragColor = packDepthToRGBA( gl_FragCoord.z );\n\t#endif\n}",depth_vert:"#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#ifdef USE_DISPLACEMENTMAP\n\t\t#include \n\t\t#include \n\t\t#include \n\t#endif\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}",distanceRGBA_frag:"#define DISTANCE\nuniform vec3 referencePosition;\nuniform float nearDistance;\nuniform float farDistance;\nvarying vec3 vWorldPosition;\n#include \n#include \n#include \n#include \n#include \n#include \nvoid main () {\n\t#include \n\tvec4 diffuseColor = vec4( 1.0 );\n\t#include \n\t#include \n\t#include \n\tfloat dist = length( vWorldPosition - referencePosition );\n\tdist = ( dist - nearDistance ) / ( farDistance - nearDistance );\n\tdist = saturate( dist );\n\tgl_FragColor = packDepthToRGBA( dist );\n}",distanceRGBA_vert:"#define DISTANCE\nvarying vec3 vWorldPosition;\n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#ifdef USE_DISPLACEMENTMAP\n\t\t#include \n\t\t#include \n\t\t#include \n\t#endif\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvWorldPosition = worldPosition.xyz;\n}",equirect_frag:"uniform sampler2D tEquirect;\nvarying vec3 vWorldDirection;\n#include \nvoid main() {\n\tvec3 direction = normalize( vWorldDirection );\n\tvec2 sampleUV;\n\tsampleUV.y = asin( clamp( direction.y, - 1.0, 1.0 ) ) * RECIPROCAL_PI + 0.5;\n\tsampleUV.x = atan( direction.z, direction.x ) * RECIPROCAL_PI2 + 0.5;\n\tvec4 texColor = texture2D( tEquirect, sampleUV );\n\tgl_FragColor = mapTexelToLinear( texColor );\n\t#include \n\t#include \n}",equirect_vert:"varying vec3 vWorldDirection;\n#include \nvoid main() {\n\tvWorldDirection = transformDirection( position, modelMatrix );\n\t#include \n\t#include \n}",linedashed_frag:"uniform vec3 diffuse;\nuniform float opacity;\nuniform float dashSize;\nuniform float totalSize;\nvarying float vLineDistance;\n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tif ( mod( vLineDistance, totalSize ) > dashSize ) {\n\t\tdiscard;\n\t}\n\tvec3 outgoingLight = vec3( 0.0 );\n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\t#include \n\t#include \n\toutgoingLight = diffuseColor.rgb;\n\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\n\t#include \n\t#include \n\t#include \n\t#include \n}",linedashed_vert:"uniform float scale;\nattribute float lineDistance;\nvarying float vLineDistance;\n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tvLineDistance = scale * lineDistance;\n\tvec4 mvPosition = modelViewMatrix * vec4( position, 1.0 );\n\tgl_Position = projectionMatrix * mvPosition;\n\t#include \n\t#include \n\t#include \n}",meshbasic_frag:"uniform vec3 diffuse;\nuniform float opacity;\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\n\t#ifdef USE_LIGHTMAP\n\t\treflectedLight.indirectDiffuse += texture2D( lightMap, vUv2 ).xyz * lightMapIntensity;\n\t#else\n\t\treflectedLight.indirectDiffuse += vec3( 1.0 );\n\t#endif\n\t#include \n\treflectedLight.indirectDiffuse *= diffuseColor.rgb;\n\tvec3 outgoingLight = reflectedLight.indirectDiffuse;\n\t#include \n\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\n\t#include \n\t#include \n\t#include \n\t#include \n}",meshbasic_vert:"#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\t#ifdef USE_ENVMAP\n\t#include \n\t#include \n\t#include \n\t#include \n\t#endif\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}",meshlambert_frag:"uniform vec3 diffuse;\nuniform vec3 emissive;\nuniform float opacity;\nvarying vec3 vLightFront;\nvarying vec3 vIndirectFront;\n#ifdef DOUBLE_SIDED\n\tvarying vec3 vLightBack;\n\tvarying vec3 vIndirectBack;\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\n\tvec3 totalEmissiveRadiance = emissive;\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\treflectedLight.indirectDiffuse = getAmbientLightIrradiance( ambientLightColor );\n\t#ifdef DOUBLE_SIDED\n\t\treflectedLight.indirectDiffuse += ( gl_FrontFacing ) ? vIndirectFront : vIndirectBack;\n\t#else\n\t\treflectedLight.indirectDiffuse += vIndirectFront;\n\t#endif\n\t#include \n\treflectedLight.indirectDiffuse *= BRDF_Diffuse_Lambert( diffuseColor.rgb );\n\t#ifdef DOUBLE_SIDED\n\t\treflectedLight.directDiffuse = ( gl_FrontFacing ) ? vLightFront : vLightBack;\n\t#else\n\t\treflectedLight.directDiffuse = vLightFront;\n\t#endif\n\treflectedLight.directDiffuse *= BRDF_Diffuse_Lambert( diffuseColor.rgb ) * getShadowMask();\n\t#include \n\tvec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + totalEmissiveRadiance;\n\t#include \n\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}",meshlambert_vert:"#define LAMBERT\nvarying vec3 vLightFront;\nvarying vec3 vIndirectFront;\n#ifdef DOUBLE_SIDED\n\tvarying vec3 vLightBack;\n\tvarying vec3 vIndirectBack;\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}",meshmatcap_frag:"#define MATCAP\nuniform vec3 diffuse;\nuniform float opacity;\nuniform sampler2D matcap;\nvarying vec3 vViewPosition;\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvec3 viewDir = normalize( vViewPosition );\n\tvec3 x = normalize( vec3( viewDir.z, 0.0, - viewDir.x ) );\n\tvec3 y = cross( viewDir, x );\n\tvec2 uv = vec2( dot( x, normal ), dot( y, normal ) ) * 0.495 + 0.5;\n\t#ifdef USE_MATCAP\n\t\tvec4 matcapColor = texture2D( matcap, uv );\n\t\tmatcapColor = matcapTexelToLinear( matcapColor );\n\t#else\n\t\tvec4 matcapColor = vec4( 1.0 );\n\t#endif\n\tvec3 outgoingLight = diffuseColor.rgb * matcapColor.rgb;\n\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\n\t#include \n\t#include \n\t#include \n\t#include \n}",meshmatcap_vert:"#define MATCAP\nvarying vec3 vViewPosition;\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#ifndef FLAT_SHADED\n\t\tvNormal = normalize( transformedNormal );\n\t#endif\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvViewPosition = - mvPosition.xyz;\n}",meshphong_frag:"#define PHONG\nuniform vec3 diffuse;\nuniform vec3 emissive;\nuniform vec3 specular;\nuniform float shininess;\nuniform float opacity;\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\n\tvec3 totalEmissiveRadiance = emissive;\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + reflectedLight.directSpecular + reflectedLight.indirectSpecular + totalEmissiveRadiance;\n\t#include \n\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}",meshphong_vert:"#define PHONG\nvarying vec3 vViewPosition;\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n#ifndef FLAT_SHADED\n\tvNormal = normalize( transformedNormal );\n#endif\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvViewPosition = - mvPosition.xyz;\n\t#include \n\t#include \n\t#include \n\t#include \n}", +meshphysical_frag:"#define PHYSICAL\nuniform vec3 diffuse;\nuniform vec3 emissive;\nuniform float roughness;\nuniform float metalness;\nuniform float opacity;\n#ifndef STANDARD\n\tuniform float clearCoat;\n\tuniform float clearCoatRoughness;\n#endif\nvarying vec3 vViewPosition;\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n\t#ifdef USE_TANGENT\n\t\tvarying vec3 vTangent;\n\t\tvarying vec3 vBitangent;\n\t#endif\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\n\tvec3 totalEmissiveRadiance = emissive;\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + reflectedLight.directSpecular + reflectedLight.indirectSpecular + totalEmissiveRadiance;\n\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}",meshphysical_vert:"#define PHYSICAL\nvarying vec3 vViewPosition;\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n\t#ifdef USE_TANGENT\n\t\tvarying vec3 vTangent;\n\t\tvarying vec3 vBitangent;\n\t#endif\n#endif\n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n#ifndef FLAT_SHADED\n\tvNormal = normalize( transformedNormal );\n\t#ifdef USE_TANGENT\n\t\tvTangent = normalize( transformedTangent );\n\t\tvBitangent = normalize( cross( vNormal, vTangent ) * tangent.w );\n\t#endif\n#endif\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\tvViewPosition = - mvPosition.xyz;\n\t#include \n\t#include \n\t#include \n}",normal_frag:"#define NORMAL\nuniform float opacity;\n#if defined( FLAT_SHADED ) || defined( USE_BUMPMAP ) || ( defined( USE_NORMALMAP ) && ! defined( OBJECTSPACE_NORMALMAP ) )\n\tvarying vec3 vViewPosition;\n#endif\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n\t#ifdef USE_TANGENT\n\t\tvarying vec3 vTangent;\n\t\tvarying vec3 vBitangent;\n\t#endif\n#endif\n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\tgl_FragColor = vec4( packNormalToRGB( normal ), opacity );\n}",normal_vert:"#define NORMAL\n#if defined( FLAT_SHADED ) || defined( USE_BUMPMAP ) || ( defined( USE_NORMALMAP ) && ! defined( OBJECTSPACE_NORMALMAP ) )\n\tvarying vec3 vViewPosition;\n#endif\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n\t#ifdef USE_TANGENT\n\t\tvarying vec3 vTangent;\n\t\tvarying vec3 vBitangent;\n\t#endif\n#endif\n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n#ifndef FLAT_SHADED\n\tvNormal = normalize( transformedNormal );\n\t#ifdef USE_TANGENT\n\t\tvTangent = normalize( transformedTangent );\n\t\tvBitangent = normalize( cross( vNormal, vTangent ) * tangent.w );\n\t#endif\n#endif\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n#if defined( FLAT_SHADED ) || defined( USE_BUMPMAP ) || ( defined( USE_NORMALMAP ) && ! defined( OBJECTSPACE_NORMALMAP ) )\n\tvViewPosition = - mvPosition.xyz;\n#endif\n}",points_frag:"uniform vec3 diffuse;\nuniform float opacity;\n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tvec3 outgoingLight = vec3( 0.0 );\n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\t#include \n\t#include \n\t#include \n\t#include \n\toutgoingLight = diffuseColor.rgb;\n\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\n\t#include \n\t#include \n\t#include \n\t#include \n}",points_vert:"uniform float size;\nuniform float scale;\n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\tgl_PointSize = size;\n\t#ifdef USE_SIZEATTENUATION\n\t\tbool isPerspective = ( projectionMatrix[ 2 ][ 3 ] == - 1.0 );\n\t\tif ( isPerspective ) gl_PointSize *= ( scale / - mvPosition.z );\n\t#endif\n\t#include \n\t#include \n\t#include \n\t#include \n}",shadow_frag:"uniform vec3 color;\nuniform float opacity;\n#include \n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\tgl_FragColor = vec4( color, opacity * ( 1.0 - getShadowMask() ) );\n\t#include \n}",shadow_vert:"#include \n#include \nvoid main() {\n\t#include \n\t#include \n\t#include \n\t#include \n\t#include \n}",sprite_frag:"uniform vec3 diffuse;\nuniform float opacity;\n#include \n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tvec3 outgoingLight = vec3( 0.0 );\n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\t#include \n\t#include \n\t#include \n\toutgoingLight = diffuseColor.rgb;\n\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\n\t#include \n\t#include \n\t#include \n}",sprite_vert:"uniform float rotation;\nuniform vec2 center;\n#include \n#include \n#include \n#include \n#include \nvoid main() {\n\t#include \n\tvec4 mvPosition = modelViewMatrix * vec4( 0.0, 0.0, 0.0, 1.0 );\n\tvec2 scale;\n\tscale.x = length( vec3( modelMatrix[ 0 ].x, modelMatrix[ 0 ].y, modelMatrix[ 0 ].z ) );\n\tscale.y = length( vec3( modelMatrix[ 1 ].x, modelMatrix[ 1 ].y, modelMatrix[ 1 ].z ) );\n\t#ifndef USE_SIZEATTENUATION\n\t\tbool isPerspective = ( projectionMatrix[ 2 ][ 3 ] == - 1.0 );\n\t\tif ( isPerspective ) scale *= - mvPosition.z;\n\t#endif\n\tvec2 alignedPosition = ( position.xy - ( center - vec2( 0.5 ) ) ) * scale;\n\tvec2 rotatedPosition;\n\trotatedPosition.x = cos( rotation ) * alignedPosition.x - sin( rotation ) * alignedPosition.y;\n\trotatedPosition.y = sin( rotation ) * alignedPosition.x + cos( rotation ) * alignedPosition.y;\n\tmvPosition.xy += rotatedPosition;\n\tgl_Position = projectionMatrix * mvPosition;\n\t#include \n\t#include \n\t#include \n}"},zc={clone:v,merge:y},Uc={aliceblue:15792383,antiquewhite:16444375,aqua:65535,aquamarine:8388564,azure:15794175,beige:16119260,bisque:16770244,black:0,blanchedalmond:16772045,blue:255,blueviolet:9055202,brown:10824234,burlywood:14596231,cadetblue:6266528,chartreuse:8388352,chocolate:13789470,coral:16744272,cornflowerblue:6591981,cornsilk:16775388,crimson:14423100,cyan:65535,darkblue:139,darkcyan:35723,darkgoldenrod:12092939,darkgray:11119017,darkgreen:25600,darkgrey:11119017,darkkhaki:12433259,darkmagenta:9109643,darkolivegreen:5597999,darkorange:16747520,darkorchid:10040012,darkred:9109504,darksalmon:15308410,darkseagreen:9419919,darkslateblue:4734347,darkslategray:3100495,darkslategrey:3100495,darkturquoise:52945,darkviolet:9699539,deeppink:16716947,deepskyblue:49151,dimgray:6908265,dimgrey:6908265,dodgerblue:2003199,firebrick:11674146,floralwhite:16775920,forestgreen:2263842,fuchsia:16711935,gainsboro:14474460,ghostwhite:16316671,gold:16766720,goldenrod:14329120,gray:8421504,green:32768,greenyellow:11403055,grey:8421504,honeydew:15794160,hotpink:16738740,indianred:13458524,indigo:4915330,ivory:16777200,khaki:15787660,lavender:15132410,lavenderblush:16773365,lawngreen:8190976,lemonchiffon:16775885,lightblue:11393254,lightcoral:15761536,lightcyan:14745599,lightgoldenrodyellow:16448210,lightgray:13882323,lightgreen:9498256,lightgrey:13882323,lightpink:16758465,lightsalmon:16752762,lightseagreen:2142890,lightskyblue:8900346,lightslategray:7833753,lightslategrey:7833753,lightsteelblue:11584734,lightyellow:16777184,lime:65280,limegreen:3329330,linen:16445670,magenta:16711935,maroon:8388608,mediumaquamarine:6737322,mediumblue:205,mediumorchid:12211667,mediumpurple:9662683,mediumseagreen:3978097,mediumslateblue:8087790,mediumspringgreen:64154,mediumturquoise:4772300,mediumvioletred:13047173,midnightblue:1644912,mintcream:16121850,mistyrose:16770273,moccasin:16770229,navajowhite:16768685,navy:128,oldlace:16643558,olive:8421376,olivedrab:7048739,orange:16753920,orangered:16729344,orchid:14315734,palegoldenrod:15657130,palegreen:10025880,paleturquoise:11529966,palevioletred:14381203,papayawhip:16773077,peachpuff:16767673,peru:13468991,pink:16761035,plum:14524637,powderblue:11591910,purple:8388736,rebeccapurple:6697881,red:16711680,rosybrown:12357519,royalblue:4286945,saddlebrown:9127187,salmon:16416882,sandybrown:16032864,seagreen:3050327,seashell:16774638,sienna:10506797,silver:12632256,skyblue:8900331,slateblue:6970061,slategray:7372944,slategrey:7372944,snow:16775930,springgreen:65407,steelblue:4620980,tan:13808780,teal:32896,thistle:14204888,tomato:16737095,turquoise:4251856,violet:15631086,wheat:16113331,white:16777215,whitesmoke:16119285,yellow:16776960,yellowgreen:10145074};Object.assign(x.prototype,{isColor:!0,r:1,g:1,b:1,set:function(t){return t&&t.isColor?this.copy(t):"number"==typeof t?this.setHex(t):"string"==typeof t&&this.setStyle(t),this},setScalar:function(t){return this.r=t,this.g=t,this.b=t,this},setHex:function(t){return t=Math.floor(t),this.r=(t>>16&255)/255,this.g=(t>>8&255)/255,this.b=(255&t)/255,this},setRGB:function(t,e,n){return this.r=t,this.g=e,this.b=n,this},setHSL:function(){function t(t,e,n){return n<0&&(n+=1),n>1&&(n-=1),n<1/6?t+6*(e-t)*n:n<.5?e:n<2/3?t+6*(e-t)*(2/3-n):t}return function(e,n,r){if(e=Oc.euclideanModulo(e,1),n=Oc.clamp(n,0,1),r=Oc.clamp(r,0,1),0===n)this.r=this.g=this.b=r;else{var i=r<=.5?r*(1+n):r+n-r*n,a=2*r-i;this.r=t(a,i,e+1/3),this.g=t(a,i,e),this.b=t(a,i,e-1/3)}return this}}(),setStyle:function(t){function e(e){void 0!==e&&parseFloat(e)<1&&console.warn("THREE.Color: Alpha component of "+t+" will be ignored.")}var n;if(n=/^((?:rgb|hsl)a?)\(\s*([^\)]*)\)/.exec(t)){var r,i=n[1],a=n[2];switch(i){case"rgb":case"rgba":if(r=/^(\d+)\s*,\s*(\d+)\s*,\s*(\d+)\s*(,\s*([0-9]*\.?[0-9]+)\s*)?$/.exec(a))return this.r=Math.min(255,parseInt(r[1],10))/255,this.g=Math.min(255,parseInt(r[2],10))/255,this.b=Math.min(255,parseInt(r[3],10))/255,e(r[5]),this;if(r=/^(\d+)\%\s*,\s*(\d+)\%\s*,\s*(\d+)\%\s*(,\s*([0-9]*\.?[0-9]+)\s*)?$/.exec(a))return this.r=Math.min(100,parseInt(r[1],10))/100,this.g=Math.min(100,parseInt(r[2],10))/100,this.b=Math.min(100,parseInt(r[3],10))/100,e(r[5]),this;break;case"hsl":case"hsla":if(r=/^([0-9]*\.?[0-9]+)\s*,\s*(\d+)\%\s*,\s*(\d+)\%\s*(,\s*([0-9]*\.?[0-9]+)\s*)?$/.exec(a)){var o=parseFloat(r[1])/360,s=parseInt(r[2],10)/100,c=parseInt(r[3],10)/100;return e(r[5]),this.setHSL(o,s,c)}}}else if(n=/^\#([A-Fa-f0-9]+)$/.exec(t)){var h=n[1],l=h.length;if(3===l)return this.r=parseInt(h.charAt(0)+h.charAt(0),16)/255,this.g=parseInt(h.charAt(1)+h.charAt(1),16)/255,this.b=parseInt(h.charAt(2)+h.charAt(2),16)/255,this;if(6===l)return this.r=parseInt(h.charAt(0)+h.charAt(1),16)/255,this.g=parseInt(h.charAt(2)+h.charAt(3),16)/255,this.b=parseInt(h.charAt(4)+h.charAt(5),16)/255,this}if(t&&t.length>0){var h=Uc[t];void 0!==h?this.setHex(h):console.warn("THREE.Color: Unknown color "+t)}return this},clone:function(){return new this.constructor(this.r,this.g,this.b)},copy:function(t){return this.r=t.r,this.g=t.g,this.b=t.b,this},copyGammaToLinear:function(t,e){return void 0===e&&(e=2),this.r=Math.pow(t.r,e),this.g=Math.pow(t.g,e),this.b=Math.pow(t.b,e),this},copyLinearToGamma:function(t,e){void 0===e&&(e=2);var n=e>0?1/e:1;return this.r=Math.pow(t.r,n),this.g=Math.pow(t.g,n),this.b=Math.pow(t.b,n),this},convertGammaToLinear:function(t){return this.copyGammaToLinear(this,t),this},convertLinearToGamma:function(t){return this.copyLinearToGamma(this,t),this},copySRGBToLinear:function(){function t(t){return t<.04045?.0773993808*t:Math.pow(.9478672986*t+.0521327014,2.4)}return function(e){return this.r=t(e.r),this.g=t(e.g),this.b=t(e.b),this}}(),copyLinearToSRGB:function(){function t(t){return t<.0031308?12.92*t:1.055*Math.pow(t,.41666)-.055}return function(e){return this.r=t(e.r),this.g=t(e.g),this.b=t(e.b),this}}(),convertSRGBToLinear:function(){return this.copySRGBToLinear(this),this},convertLinearToSRGB:function(){return this.copyLinearToSRGB(this),this},getHex:function(){return 255*this.r<<16^255*this.g<<8^255*this.b<<0},getHexString:function(){return("000000"+this.getHex().toString(16)).slice(-6)},getHSL:function(t){void 0===t&&(console.warn("THREE.Color: .getHSL() target is now required"),t={h:0,s:0,l:0});var e,n,r=this.r,i=this.g,a=this.b,o=Math.max(r,i,a),s=Math.min(r,i,a),c=(s+o)/2;if(s===o)e=0,n=0;else{var h=o-s;switch(n=c<=.5?h/(o+s):h/(2-o-s),o){case r:e=(i-a)/h+(i1){for(var e=0;e1){for(var e=0;e0){a.children=[];for(var c=0;c0&&(i.geometries=p),d.length>0&&(i.materials=d),f.length>0&&(i.textures=f),m.length>0&&(i.images=m),s.length>0&&(i.shapes=s)}return i.object=a,i},clone:function(t){return(new this.constructor).copy(this,t)},copy:function(t,e){if(void 0===e&&(e=!0),this.name=t.name,this.up.copy(t.up),this.position.copy(t.position),this.quaternion.copy(t.quaternion),this.scale.copy(t.scale),this.matrix.copy(t.matrix),this.matrixWorld.copy(t.matrixWorld),this.matrixAutoUpdate=t.matrixAutoUpdate,this.matrixWorldNeedsUpdate=t.matrixWorldNeedsUpdate,this.layers.mask=t.layers.mask,this.visible=t.visible,this.castShadow=t.castShadow,this.receiveShadow=t.receiveShadow,this.frustumCulled=t.frustumCulled,this.renderOrder=t.renderOrder,this.userData=JSON.parse(JSON.stringify(t.userData)),!0===e)for(var n=0;n0)for(var p=0;p0&&(this.normalsNeedUpdate=!0)},computeFlatVertexNormals:function(){var t,e,n;for(this.computeFaceNormals(),t=0,e=this.faces.length;t0&&(this.normalsNeedUpdate=!0)},computeMorphNormals:function(){var t,e,n,r,i;for(n=0,r=this.faces.length;n=0;n--){var f=p[n];for(this.faces.splice(f,1),o=0,s=this.faceVertexUvs.length;o0,b=v.vertexNormals.length>0,w=1!==v.color.r||1!==v.color.g||1!==v.color.b,_=v.vertexColors.length>0,M=0;if(M=t(M,0,0),M=t(M,1,!0),M=t(M,2,!1),M=t(M,3,y),M=t(M,4,x),M=t(M,5,b),M=t(M,6,w),M=t(M,7,_),l.push(M),l.push(v.a,v.b,v.c),l.push(v.materialIndex),y){var E=this.faceVertexUvs[0][c];l.push(r(E[0]),r(E[1]),r(E[2]))}if(x&&l.push(e(v.normal)),b){var T=v.vertexNormals;l.push(e(T[0]),e(T[1]),e(T[2]))}if(w&&l.push(n(v.color)),_){var S=v.vertexColors;l.push(n(S[0]),n(S[1]),n(S[2]))}}return i.data={},i.data.vertices=s,i.data.normals=u,d.length>0&&(i.data.colors=d),m.length>0&&(i.data.uvs=[m]),i.data.faces=l,i},clone:function(){return(new S).copy(this)},copy:function(t){var e,n,r,i,a,o;this.vertices=[],this.colors=[],this.faces=[],this.faceVertexUvs=[[]],this.morphTargets=[],this.morphNormals=[],this.skinWeights=[],this.skinIndices=[],this.lineDistances=[],this.boundingBox=null,this.boundingSphere=null,this.name=t.name;var s=t.vertices;for(e=0,n=s.length;e0,s=a[1]&&a[1].length>0,c=t.morphTargets,h=c.length;if(h>0){e=[];for(var l=0;l0){u=[];for(var l=0;l0&&0===r.length&&console.error("THREE.DirectGeometry: Faceless geometries are not supported.");for(var l=0;l65535?D:O)(t,1):this.index=t},addAttribute:function(t,e){return e&&e.isBufferAttribute||e&&e.isInterleavedBufferAttribute?"index"===t?(console.warn("THREE.BufferGeometry.addAttribute: Use .setIndex() for index attribute."),this.setIndex(e),this):(this.attributes[t]=e,this):(console.warn("THREE.BufferGeometry: .addAttribute() now expects ( name, attribute )."),this.addAttribute(t,new A(arguments[1],arguments[2])))},getAttribute:function(t){return this.attributes[t]},removeAttribute:function(t){return delete this.attributes[t],this},addGroup:function(t,e,n){this.groups.push({start:t,count:e,materialIndex:void 0!==n?n:0})},clearGroups:function(){this.groups=[]},setDrawRange:function(t,e){this.drawRange.start=t,this.drawRange.count=e},applyMatrix:function(t){var e=this.attributes.position;void 0!==e&&(t.applyToBufferAttribute(e),e.needsUpdate=!0);var n=this.attributes.normal;if(void 0!==n){var r=(new o).getNormalMatrix(t);r.applyToBufferAttribute(n),n.needsUpdate=!0}var i=this.attributes.tangent;if(void 0!==i){var r=(new o).getNormalMatrix(t);r.applyToBufferAttribute(i),i.needsUpdate=!0}return null!==this.boundingBox&&this.computeBoundingBox(),null!==this.boundingSphere&&this.computeBoundingSphere(),this},rotateX:function(){var t=new r;return function(e){return t.makeRotationX(e),this.applyMatrix(t),this}}(),rotateY:function(){var t=new r;return function(e){return t.makeRotationY(e),this.applyMatrix(t),this}}(),rotateZ:function(){var t=new r;return function(e){return t.makeRotationZ(e),this.applyMatrix(t),this}}(),translate:function(){var t=new r;return function(e,n,r){return t.makeTranslation(e,n,r),this.applyMatrix(t),this}}(),scale:function(){var t=new r;return function(e,n,r){return t.makeScale(e,n,r),this.applyMatrix(t),this}}(),lookAt:function(){var t=new T;return function(e){t.lookAt(e),t.updateMatrix(),this.applyMatrix(t.matrix)}}(),center:function(){var t=new a;return function(){return this.computeBoundingBox(),this.boundingBox.getCenter(t).negate(),this.translate(t.x,t.y,t.z),this}}(),setFromObject:function(t){var e=t.geometry;if(t.isPoints||t.isLine){var n=new N(3*e.vertices.length,3),r=new N(3*e.colors.length,3);if(this.addAttribute("position",n.copyVector3sArray(e.vertices)),this.addAttribute("color",r.copyColorsArray(e.colors)),e.lineDistances&&e.lineDistances.length===e.vertices.length){var i=new N(e.lineDistances.length,1);this.addAttribute("lineDistance",i.copyArray(e.lineDistances))}null!==e.boundingSphere&&(this.boundingSphere=e.boundingSphere.clone()),null!==e.boundingBox&&(this.boundingBox=e.boundingBox.clone())}else t.isMesh&&e&&e.isGeometry&&this.fromGeometry(e);return this},setFromPoints:function(t){for(var e=[],n=0,r=t.length;n0){var n=new Float32Array(3*t.normals.length);this.addAttribute("normal",new A(n,3).copyVector3sArray(t.normals))}if(t.colors.length>0){var r=new Float32Array(3*t.colors.length);this.addAttribute("color",new A(r,3).copyColorsArray(t.colors))}if(t.uvs.length>0){var i=new Float32Array(2*t.uvs.length);this.addAttribute("uv",new A(i,2).copyVector2sArray(t.uvs))}if(t.uvs2.length>0){var a=new Float32Array(2*t.uvs2.length);this.addAttribute("uv2",new A(a,2).copyVector2sArray(t.uvs2))}this.groups=t.groups;for(var o in t.morphTargets){for(var s=[],c=t.morphTargets[o],h=0,l=c.length;h0){var d=new N(4*t.skinIndices.length,4);this.addAttribute("skinIndex",d.copyVector4sArray(t.skinIndices))}if(t.skinWeights.length>0){var f=new N(4*t.skinWeights.length,4);this.addAttribute("skinWeight",f.copyVector4sArray(t.skinWeights))}return null!==t.boundingSphere&&(this.boundingSphere=t.boundingSphere.clone()),null!==t.boundingBox&&(this.boundingBox=t.boundingBox.clone()),this},computeBoundingBox:function(){var t=new d;return function(){null===this.boundingBox&&(this.boundingBox=new d);var e=this.attributes.position,n=this.morphAttributes.position;if(void 0!==e){if(this.boundingBox.setFromBufferAttribute(e),n)for(var r=0,i=n.length;r0&&(t.userData=this.userData),void 0!==this.parameters){var e=this.parameters;for(var n in e)void 0!==e[n]&&(t[n]=e[n]);return t}t.data={attributes:{}};var r=this.index;null!==r&&(t.data.index={type:r.array.constructor.name,array:Array.prototype.slice.call(r.array)});var i=this.attributes;for(var n in i){var a=i[n],o={itemSize:a.itemSize,type:a.array.constructor.name,array:Array.prototype.slice.call(a.array),normalized:a.normalized};""!==a.name&&(o.name=a.name),t.data.attributes[n]=o}var s={},c=!1;for(var n in this.morphAttributes){for(var h=this.morphAttributes[n],l=[],u=0,p=h.length;u0&&(s[n]=l,c=!0)}c&&(t.data.morphAttributes=s);var d=this.groups;d.length>0&&(t.data.groups=JSON.parse(JSON.stringify(d)));var f=this.boundingSphere;return null!==f&&(t.data.boundingSphere={center:f.center.toArray(),radius:f.radius}),t},clone:function(){return(new G).copy(this)},copy:function(t){var e,n,r;this.index=null,this.attributes={},this.morphAttributes={},this.groups=[],this.boundingBox=null,this.boundingSphere=null,this.name=t.name;var i=t.index;null!==i&&this.setIndex(i.clone());var a=t.attributes;for(e in a){var o=a[e];this.addAttribute(e,o.clone())}var s=t.morphAttributes;for(e in s){var c=[],h=s[e];for(n=0,r=h.length;n0&&(r.alphaTest=this.alphaTest),!0===this.premultipliedAlpha&&(r.premultipliedAlpha=this.premultipliedAlpha),!0===this.wireframe&&(r.wireframe=this.wireframe),this.wireframeLinewidth>1&&(r.wireframeLinewidth=this.wireframeLinewidth),"round"!==this.wireframeLinecap&&(r.wireframeLinecap=this.wireframeLinecap),"round"!==this.wireframeLinejoin&&(r.wireframeLinejoin=this.wireframeLinejoin),!0===this.morphTargets&&(r.morphTargets=!0),!0===this.skinning&&(r.skinning=!0),!1===this.visible&&(r.visible=!1),"{}"!==JSON.stringify(this.userData)&&(r.userData=this.userData),n){var i=e(t.textures),a=e(t.images);i.length>0&&(r.textures=i),a.length>0&&(r.images=a)}return r},clone:function(){return(new this.constructor).copy(this)},copy:function(t){this.name=t.name,this.fog=t.fog,this.lights=t.lights,this.blending=t.blending,this.side=t.side,this.flatShading=t.flatShading,this.vertexColors=t.vertexColors,this.opacity=t.opacity,this.transparent=t.transparent,this.blendSrc=t.blendSrc,this.blendDst=t.blendDst,this.blendEquation=t.blendEquation,this.blendSrcAlpha=t.blendSrcAlpha,this.blendDstAlpha=t.blendDstAlpha,this.blendEquationAlpha=t.blendEquationAlpha,this.depthFunc=t.depthFunc,this.depthTest=t.depthTest,this.depthWrite=t.depthWrite,this.colorWrite=t.colorWrite,this.precision=t.precision,this.polygonOffset=t.polygonOffset,this.polygonOffsetFactor=t.polygonOffsetFactor,this.polygonOffsetUnits=t.polygonOffsetUnits,this.dithering=t.dithering,this.alphaTest=t.alphaTest,this.premultipliedAlpha=t.premultipliedAlpha,this.visible=t.visible,this.userData=JSON.parse(JSON.stringify(t.userData)),this.clipShadows=t.clipShadows,this.clipIntersection=t.clipIntersection;var e=t.clippingPlanes,n=null;if(null!==e){var r=e.length;n=new Array(r);for(var i=0;i!==r;++i)n[i]=e[i].clone()}return this.clippingPlanes=n,this.shadowSide=t.shadowSide,this},dispose:function(){this.dispatchEvent({type:"dispose"})}});var Wc="void main() {\n\tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\n}",qc="void main() {\n\tgl_FragColor = vec4( 1.0, 0.0, 0.0, 1.0 );\n}";W.prototype=Object.create(j.prototype),W.prototype.constructor=W,W.prototype.isShaderMaterial=!0,W.prototype.copy=function(t){return j.prototype.copy.call(this,t),this.fragmentShader=t.fragmentShader,this.vertexShader=t.vertexShader,this.uniforms=v(t.uniforms),this.defines=Object.assign({},t.defines),this.wireframe=t.wireframe,this.wireframeLinewidth=t.wireframeLinewidth,this.lights=t.lights,this.clipping=t.clipping,this.skinning=t.skinning,this.morphTargets=t.morphTargets,this.morphNormals=t.morphNormals,this.extensions=t.extensions,this},W.prototype.toJSON=function(t){var e=j.prototype.toJSON.call(this,t);e.uniforms={};for(var n in this.uniforms){var r=this.uniforms[n],i=r.value;i&&i.isTexture?e.uniforms[n]={type:"t",value:i.toJSON(t).uuid}:i&&i.isColor?e.uniforms[n]={type:"c",value:i.getHex()}:i&&i.isVector2?e.uniforms[n]={type:"v2",value:i.toArray()}:i&&i.isVector3?e.uniforms[n]={type:"v3",value:i.toArray()}:i&&i.isVector4?e.uniforms[n]={type:"v4",value:i.toArray()}:i&&i.isMatrix3?e.uniforms[n]={type:"m3",value:i.toArray()}:i&&i.isMatrix4?e.uniforms[n]={type:"m4",value:i.toArray()}:e.uniforms[n]={value:i}}Object.keys(this.defines).length>0&&(e.defines=this.defines),e.vertexShader=this.vertexShader,e.fragmentShader=this.fragmentShader;var a={};for(var o in this.extensions)!0===this.extensions[o]&&(a[o]=!0);return Object.keys(a).length>0&&(e.extensions=a),e},Object.assign(q.prototype,{set:function(t,e){return this.origin.copy(t),this.direction.copy(e),this},clone:function(){return(new this.constructor).copy(this)},copy:function(t){return this.origin.copy(t.origin),this.direction.copy(t.direction),this},at:function(t,e){return void 0===e&&(console.warn("THREE.Ray: .at() target is now required"),e=new a),e.copy(this.direction).multiplyScalar(t).add(this.origin)},lookAt:function(t){return this.direction.copy(t).sub(this.origin).normalize(),this},recast:function(){var t=new a;return function(e){return this.origin.copy(this.at(e,t)),this}}(),closestPointToPoint:function(t,e){void 0===e&&(console.warn("THREE.Ray: .closestPointToPoint() target is now required"),e=new a),e.subVectors(t,this.origin);var n=e.dot(this.direction);return n<0?e.copy(this.origin):e.copy(this.direction).multiplyScalar(n).add(this.origin)},distanceToPoint:function(t){return Math.sqrt(this.distanceSqToPoint(t))},distanceSqToPoint:function(){var t=new a;return function(e){var n=t.subVectors(e,this.origin).dot(this.direction);return n<0?this.origin.distanceToSquared(e):(t.copy(this.direction).multiplyScalar(n).add(this.origin),t.distanceToSquared(e))}}(),distanceSqToSegment:function(){var t=new a,e=new a,n=new a;return function(r,i,a,o){t.copy(r).add(i).multiplyScalar(.5),e.copy(i).sub(r).normalize(),n.copy(this.origin).sub(t);var s,c,h,l,u=.5*r.distanceTo(i),p=-this.direction.dot(e),d=n.dot(this.direction),f=-n.dot(e),m=n.lengthSq(),g=Math.abs(1-p*p);if(g>0)if(s=p*f-d,c=p*d-f,l=u*g,s>=0)if(c>=-l)if(c<=l){var v=1/g;s*=v,c*=v,h=s*(s+p*c+2*d)+c*(p*s+c+2*f)+m}else c=u,s=Math.max(0,-(p*c+d)),h=-s*s+c*(c+2*f)+m;else c=-u,s=Math.max(0,-(p*c+d)),h=-s*s+c*(c+2*f)+m;else c<=-l?(s=Math.max(0,-(-p*u+d)),c=s>0?-u:Math.min(Math.max(-u,-f),u),h=-s*s+c*(c+2*f)+m):c<=l?(s=0,c=Math.min(Math.max(-u,-f),u),h=c*(c+2*f)+m):(s=Math.max(0,-(p*u+d)),c=s>0?u:Math.min(Math.max(-u,-f),u),h=-s*s+c*(c+2*f)+m);else c=p>0?-u:u,s=Math.max(0,-(p*c+d)),h=-s*s+c*(c+2*f)+m;return a&&a.copy(this.direction).multiplyScalar(s).add(this.origin),o&&o.copy(e).multiplyScalar(c).add(t),h}}(),intersectSphere:function(){var t=new a;return function(e,n){t.subVectors(e.center,this.origin);var r=t.dot(this.direction),i=t.dot(t)-r*r,a=e.radius*e.radius;if(i>a)return null;var o=Math.sqrt(a-i),s=r-o,c=r+o;return s<0&&c<0?null:s<0?this.at(c,n):this.at(s,n)}}(),intersectsSphere:function(t){return this.distanceSqToPoint(t.center)<=t.radius*t.radius},distanceToPlane:function(t){var e=t.normal.dot(this.direction);if(0===e)return 0===t.distanceToPoint(this.origin)?0:null;var n=-(this.origin.dot(t.normal)+t.constant)/e;return n>=0?n:null},intersectPlane:function(t,e){var n=this.distanceToPlane(t);return null===n?null:this.at(n,e)},intersectsPlane:function(t){var e=t.distanceToPoint(this.origin);return 0===e||t.normal.dot(this.direction)*e<0},intersectBox:function(t,e){var n,r,i,a,o,s,c=1/this.direction.x,h=1/this.direction.y,l=1/this.direction.z,u=this.origin;return c>=0?(n=(t.min.x-u.x)*c,r=(t.max.x-u.x)*c):(n=(t.max.x-u.x)*c,r=(t.min.x-u.x)*c),h>=0?(i=(t.min.y-u.y)*h,a=(t.max.y-u.y)*h):(i=(t.max.y-u.y)*h,a=(t.min.y-u.y)*h),n>a||i>r?null:((i>n||n!==n)&&(n=i),(a=0?(o=(t.min.z-u.z)*l,s=(t.max.z-u.z)*l):(o=(t.max.z-u.z)*l,s=(t.min.z-u.z)*l),n>s||o>r?null:((o>n||n!==n)&&(n=o),(s=0?n:r,e)))},intersectsBox:function(){var t=new a;return function(e){return null!==this.intersectBox(e,t)}}(),intersectTriangle:function(){var t=new a,e=new a,n=new a,r=new a;return function(i,a,o,s,c){e.subVectors(a,i),n.subVectors(o,i),r.crossVectors(e,n);var h,l=this.direction.dot(r);if(l>0){if(s)return null;h=1}else{if(!(l<0))return null;h=-1,l=-l}t.subVectors(this.origin,i);var u=h*this.direction.dot(n.crossVectors(t,n));if(u<0)return null;var p=h*this.direction.dot(e.cross(t));if(p<0)return null;if(u+p>l)return null;var d=-h*t.dot(r);return d<0?null:this.at(d/l,c)}}(),applyMatrix4:function(t){return this.origin.applyMatrix4(t),this.direction.transformDirection(t),this},equals:function(t){return t.origin.equals(this.origin)&&t.direction.equals(this.direction)}}),Object.assign(X,{getNormal:function(){var t=new a;return function(e,n,r,i){void 0===i&&(console.warn("THREE.Triangle: .getNormal() target is now required"),i=new a),i.subVectors(r,n),t.subVectors(e,n),i.cross(t);var o=i.lengthSq();return o>0?i.multiplyScalar(1/Math.sqrt(o)):i.set(0,0,0)}}(),getBarycoord:function(){var t=new a,e=new a,n=new a;return function(r,i,o,s,c){t.subVectors(s,i),e.subVectors(o,i),n.subVectors(r,i);var h=t.dot(t),l=t.dot(e),u=t.dot(n),p=e.dot(e),d=e.dot(n),f=h*p-l*l;if(void 0===c&&(console.warn("THREE.Triangle: .getBarycoord() target is now required"),c=new a),0===f)return c.set(-2,-1,-1);var m=1/f,g=(p*u-l*d)*m,v=(h*d-l*u)*m;return c.set(1-g-v,v,g)}}(),containsPoint:function(){var t=new a;return function(e,n,r,i){return X.getBarycoord(e,n,r,i,t),t.x>=0&&t.y>=0&&t.x+t.y<=1}}(),getUV:function(){var t=new a;return function(e,n,r,i,a,o,s,c){return this.getBarycoord(e,n,r,i,t),c.set(0,0),c.addScaledVector(a,t.x),c.addScaledVector(o,t.y),c.addScaledVector(s,t.z),c}}()}),Object.assign(X.prototype,{set:function(t,e,n){return this.a.copy(t),this.b.copy(e),this.c.copy(n),this},setFromPointsAndIndices:function(t,e,n,r){return this.a.copy(t[e]),this.b.copy(t[n]),this.c.copy(t[r]),this},clone:function(){return(new this.constructor).copy(this)},copy:function(t){return this.a.copy(t.a),this.b.copy(t.b),this.c.copy(t.c),this},getArea:function(){var t=new a,e=new a;return function(){return t.subVectors(this.c,this.b),e.subVectors(this.a,this.b),.5*t.cross(e).length()}}(),getMidpoint:function(t){return void 0===t&&(console.warn("THREE.Triangle: .getMidpoint() target is now required"),t=new a),t.addVectors(this.a,this.b).add(this.c).multiplyScalar(1/3)},getNormal:function(t){return X.getNormal(this.a,this.b,this.c,t)},getPlane:function(t){return void 0===t&&(console.warn("THREE.Triangle: .getPlane() target is now required"),t=new a),t.setFromCoplanarPoints(this.a,this.b,this.c)},getBarycoord:function(t,e){return X.getBarycoord(t,this.a,this.b,this.c,e)},containsPoint:function(t){return X.containsPoint(t,this.a,this.b,this.c)},getUV:function(t,e,n,r,i){return X.getUV(t,this.a,this.b,this.c,e,n,r,i)},intersectsBox:function(t){return t.intersectsTriangle(this)},closestPointToPoint:function(){var t=new a,e=new a,n=new a,r=new a,i=new a,o=new a;return function(s,c){void 0===c&&(console.warn("THREE.Triangle: .closestPointToPoint() target is now required"),c=new a);var h,l,u=this.a,p=this.b,d=this.c;t.subVectors(p,u),e.subVectors(d,u),r.subVectors(s,u);var f=t.dot(r),m=e.dot(r);if(f<=0&&m<=0)return c.copy(u);i.subVectors(s,p);var g=t.dot(i),v=e.dot(i);if(g>=0&&v<=g)return c.copy(p);var y=f*v-g*m;if(y<=0&&f>=0&&g<=0)return h=f/(f-g),c.copy(u).addScaledVector(t,h);o.subVectors(s,d);var x=t.dot(o),b=e.dot(o);if(b>=0&&x<=b)return c.copy(d);var w=x*m-f*b;if(w<=0&&m>=0&&b<=0)return l=m/(m-b),c.copy(u).addScaledVector(e,l);var _=g*b-x*v;if(_<=0&&v-g>=0&&x-b>=0)return n.subVectors(d,p),l=(v-g)/(v-g+(x-b)),c.copy(p).addScaledVector(n,l);var M=1/(_+w+y);return h=w*M,l=y*M,c.copy(u).addScaledVector(t,h).addScaledVector(e,l)}}(),equals:function(t){return t.a.equals(this.a)&&t.b.equals(this.b)&&t.c.equals(this.c)}}),Y.prototype=Object.create(j.prototype),Y.prototype.constructor=Y,Y.prototype.isMeshBasicMaterial=!0,Y.prototype.copy=function(t){return j.prototype.copy.call(this,t),this.color.copy(t.color),this.map=t.map,this.lightMap=t.lightMap,this.lightMapIntensity=t.lightMapIntensity,this.aoMap=t.aoMap,this.aoMapIntensity=t.aoMapIntensity,this.specularMap=t.specularMap,this.alphaMap=t.alphaMap,this.envMap=t.envMap,this.combine=t.combine,this.reflectivity=t.reflectivity,this.refractionRatio=t.refractionRatio,this.wireframe=t.wireframe,this.wireframeLinewidth=t.wireframeLinewidth,this.wireframeLinecap=t.wireframeLinecap,this.wireframeLinejoin=t.wireframeLinejoin,this.skinning=t.skinning,this.morphTargets=t.morphTargets,this},J.prototype=Object.assign(Object.create(T.prototype),{constructor:J,isMesh:!0,setDrawMode:function(t){this.drawMode=t},copy:function(t){return T.prototype.copy.call(this,t),this.drawMode=t.drawMode,void 0!==t.morphTargetInfluences&&(this.morphTargetInfluences=t.morphTargetInfluences.slice()),void 0!==t.morphTargetDictionary&&(this.morphTargetDictionary=Object.assign({},t.morphTargetDictionary)),this},updateMorphTargets:function(){var t,e,n,r=this.geometry;if(r.isBufferGeometry){var i=r.morphAttributes,a=Object.keys(i);if(a.length>0){var o=i[a[0]];if(void 0!==o)for(this.morphTargetInfluences=[],this.morphTargetDictionary={},t=0,e=o.length;t0&&console.error("THREE.Mesh.updateMorphTargets() no longer supports THREE.Geometry. Use THREE.BufferGeometry instead.")}},raycast:function(){function t(t,e,n,r,i,a,o,s){if(null===(e.side===bo?r.intersectTriangle(o,a,i,!0,s):r.intersectTriangle(i,a,o,e.side!==wo,s)))return null;M.copy(s),M.applyMatrix4(t.matrixWorld);var c=n.ray.origin.distanceTo(M);return cn.far?null:{distance:c,point:M.clone(),object:t}}function e(e,r,i,a,o,s,f,M,E,T){c.fromBufferAttribute(o,M),h.fromBufferAttribute(o,E),l.fromBufferAttribute(o,T);var S=e.morphTargetInfluences;if(r.morphTargets&&s&&S){m.set(0,0,0),g.set(0,0,0),v.set(0,0,0);for(var A=0,L=s.length;A0&&(B=F);for(var H=0,V=G.length;Hr.far||a.push({distance:x,point:e.clone(),uv:X.getUV(e,l,u,p,d,f,m,new n),face:null,object:this})}}}(),clone:function(){return new this.constructor(this.material).copy(this)},copy:function(t){return T.prototype.copy.call(this,t),void 0!==t.center&&this.center.copy(t.center),this}}),Fe.prototype=Object.assign(Object.create(T.prototype),{constructor:Fe,copy:function(t){T.prototype.copy.call(this,t,!1);for(var e=t.levels,n=0,r=e.length;n1){t.setFromMatrixPosition(n.matrixWorld),e.setFromMatrixPosition(this.matrixWorld);var i=t.distanceTo(e);r[0].object.visible=!0;for(var a=1,o=r.length;a=r[a].distance;a++)r[a-1].object.visible=!1,r[a].object.visible=!0;for(;al)){f.applyMatrix4(this.matrixWorld);var T=r.ray.origin.distanceTo(f);Tr.far||i.push({distance:T,point:d.clone().applyMatrix4(this.matrixWorld),index:b,face:null,faceIndex:null,object:this})}}else for(var b=0,w=y.length/3-1;bl)){f.applyMatrix4(this.matrixWorld);var T=r.ray.origin.distanceTo(f);Tr.far||i.push({distance:T,point:d.clone().applyMatrix4(this.matrixWorld),index:b,face:null,faceIndex:null,object:this})}}}else if(s.isGeometry)for(var S=s.vertices,A=S.length,b=0;bl)){f.applyMatrix4(this.matrixWorld);var T=r.ray.origin.distanceTo(f);Tr.far||i.push({distance:T,point:d.clone().applyMatrix4(this.matrixWorld),index:b,face:null,faceIndex:null,object:this})}}}}}(),clone:function(){return new this.constructor(this.geometry,this.material).copy(this)}}),qe.prototype=Object.assign(Object.create(We.prototype),{constructor:qe,isLineSegments:!0,computeLineDistances:function(){var t=new a,e=new a;return function(){var n=this.geometry;if(n.isBufferGeometry)if(null===n.index){for(var r=n.attributes.position,i=[],a=0,o=r.count;ar.far)return;i.push({distance:o,distanceToRay:Math.sqrt(a),point:f.clone(),index:n,face:null,object:s})}}var s=this,c=this.geometry,h=this.matrixWorld,l=r.params.Points.threshold;if(null===c.boundingSphere&&c.computeBoundingSphere(),n.copy(c.boundingSphere),n.applyMatrix4(h),n.radius+=l,!1!==r.ray.intersectsSphere(n)){t.getInverse(h),e.copy(r.ray).applyMatrix4(t);var u=l/((this.scale.x+this.scale.y+this.scale.z)/3),p=u*u,d=new a,f=new a;if(c.isBufferGeometry){var m=c.index,g=c.attributes,v=g.position.array;if(null!==m)for(var y=m.array,x=0,b=y.length;x=t.HAVE_CURRENT_DATA&&(this.needsUpdate=!0)}}),Qe.prototype=Object.create(s.prototype),Qe.prototype.constructor=Qe,Qe.prototype.isCompressedTexture=!0,Ke.prototype=Object.create(s.prototype),Ke.prototype.constructor=Ke,Ke.prototype.isCanvasTexture=!0,$e.prototype=Object.create(s.prototype),$e.prototype.constructor=$e,$e.prototype.isDepthTexture=!0,tn.prototype=Object.create(G.prototype),tn.prototype.constructor=tn,en.prototype=Object.create(S.prototype),en.prototype.constructor=en,nn.prototype=Object.create(G.prototype),nn.prototype.constructor=nn,rn.prototype=Object.create(S.prototype),rn.prototype.constructor=rn,an.prototype=Object.create(G.prototype),an.prototype.constructor=an,on.prototype=Object.create(S.prototype),on.prototype.constructor=on,sn.prototype=Object.create(an.prototype),sn.prototype.constructor=sn,cn.prototype=Object.create(S.prototype),cn.prototype.constructor=cn,hn.prototype=Object.create(an.prototype),hn.prototype.constructor=hn,ln.prototype=Object.create(S.prototype),ln.prototype.constructor=ln,un.prototype=Object.create(an.prototype),un.prototype.constructor=un,pn.prototype=Object.create(S.prototype),pn.prototype.constructor=pn,dn.prototype=Object.create(an.prototype),dn.prototype.constructor=dn,fn.prototype=Object.create(S.prototype),fn.prototype.constructor=fn,mn.prototype=Object.create(G.prototype),mn.prototype.constructor=mn,mn.prototype.toJSON=function(){var t=G.prototype.toJSON.call(this);return t.path=this.parameters.path.toJSON(),t},gn.prototype=Object.create(S.prototype),gn.prototype.constructor=gn,vn.prototype=Object.create(G.prototype),vn.prototype.constructor=vn,yn.prototype=Object.create(S.prototype),yn.prototype.constructor=yn,xn.prototype=Object.create(G.prototype),xn.prototype.constructor=xn;var ch={triangulate:function(t,e,n){n=n||2;var r=e&&e.length,i=r?e[0]*n:t.length,a=bn(t,0,i,n,!0),o=[];if(!a)return o;var s,c,h,l,u,p,d;if(r&&(a=An(t,e,a,n)),t.length>80*n){s=h=t[0],c=l=t[1];for(var f=n;fh&&(h=u),p>l&&(l=p);d=Math.max(h-s,l-c),d=0!==d?1/d:0}return _n(a,o,n,s,c,d),o}},hh={area:function(t){for(var e=t.length,n=0,r=e-1,i=0;i=i)break t;var s=e[1];t=i)break e}a=n,n=0}}for(;n>>1;te;)--a;if(++a,0!==i||a!==r){i>=a&&(a=Math.max(a,1),i=a-1);var o=this.getValueSize();this.times=dh.arraySlice(n,i,a),this.values=dh.arraySlice(this.values,i*o,a*o)}return this},validate:function(){var t=!0,e=this.getValueSize();e-Math.floor(e)!=0&&(console.error("THREE.KeyframeTrack: Invalid value size in track.",this),t=!1);var n=this.times,r=this.values,i=n.length;0===i&&(console.error("THREE.KeyframeTrack: Track is empty.",this),t=!1);for(var a=null,o=0;o!==i;o++){var s=n[o];if("number"==typeof s&&isNaN(s)){console.error("THREE.KeyframeTrack: Time is not a valid number.",this,o,s),t=!1;break}if(null!==a&&a>s){console.error("THREE.KeyframeTrack: Out of order keys.",this,o,s,a),t=!1;break}a=s}if(void 0!==r&&dh.isTypedArray(r))for(var o=0,c=r.length;o!==c;++o){var h=r[o];if(isNaN(h)){console.error("THREE.KeyframeTrack: Value is not a valid number.",this,o,h),t=!1;break}}return t},optimize:function(){for(var t=this.times,e=this.values,n=this.getValueSize(),r=2302===this.getInterpolation(),i=1,a=t.length-1,o=1;o0){t[i]=t[a];for(var f=a*n,m=i*n,p=0;p!==n;++p)e[m+p]=e[f+p];++i}return i!==t.length&&(this.times=dh.arraySlice(t,0,i),this.values=dh.arraySlice(e,0,i*n)),this},clone:function(){var t=dh.arraySlice(this.times,0),e=dh.arraySlice(this.values,0),n=this.constructor,r=new n(this.name,t,e);return r.createInterpolant=this.createInterpolant,r}}),Or.prototype=Object.assign(Object.create(Cr.prototype),{constructor:Or,ValueTypeName:"bool",ValueBufferType:Array,DefaultInterpolation:2300,InterpolantFactoryMethodLinear:void 0,InterpolantFactoryMethodSmooth:void 0}),Ir.prototype=Object.assign(Object.create(Cr.prototype),{constructor:Ir,ValueTypeName:"color"}),Dr.prototype=Object.assign(Object.create(Cr.prototype),{constructor:Dr,ValueTypeName:"number"}),Nr.prototype=Object.assign(Object.create(Ar.prototype),{constructor:Nr,interpolate_:function(t,e,n,r){for(var a=this.resultBuffer,o=this.sampleValues,s=this.valueSize,c=t*s,h=(n-e)/(r-e),l=c+s;c!==l;c+=4)i.slerpFlat(a,0,o,c-s,o,c,h);return a}}),Br.prototype=Object.assign(Object.create(Cr.prototype),{constructor:Br,ValueTypeName:"quaternion",DefaultInterpolation:2301,InterpolantFactoryMethodLinear:function(t){return new Nr(this.times,this.values,this.getValueSize(),t)},InterpolantFactoryMethodSmooth:void 0}),zr.prototype=Object.assign(Object.create(Cr.prototype),{constructor:zr,ValueTypeName:"string",ValueBufferType:Array,DefaultInterpolation:2300,InterpolantFactoryMethodLinear:void 0,InterpolantFactoryMethodSmooth:void 0}),Ur.prototype=Object.assign(Object.create(Cr.prototype),{constructor:Ur,ValueTypeName:"vector"}),Object.assign(Gr,{parse:function(t){for(var e=[],n=t.tracks,r=1/(t.fps||1),i=0,a=n.length;i!==a;++i)e.push(Hr(n[i]).scale(r));return new Gr(t.name,t.duration,e)},toJSON:function(t){for(var e=[],n=t.tracks,r={name:t.name,duration:t.duration,tracks:e,uuid:t.uuid},i=0,a=n.length;i!==a;++i)e.push(Cr.toJSON(n[i]));return r},CreateFromMorphTargetSequence:function(t,e,n,r){for(var i=e.length,a=[],o=0;o1){var h=c[1],l=r[h];l||(r[h]=l=[]),l.push(s)}}var u=[];for(var h in r)u.push(Gr.CreateFromMorphTargetSequence(h,r[h],e,n));return u},parseAnimation:function(t,e){if(!t)return console.error("THREE.AnimationClip: No animation in JSONLoader data."),null;for(var n=function(t,e,n,r,i){if(0!==n.length){var a=[],o=[];dh.flattenJSON(n,a,o,r),0!==a.length&&i.push(new t(e,a,o))}},r=[],i=t.name||"default",a=t.length||-1,o=t.fps||30,s=t.hierarchy||[],c=0;c0||0===t.search(/^data\:image\/jpeg/);i.format=r?Gs:Fs,i.needsUpdate=!0,void 0!==e&&e(i)},n,r),i},setCrossOrigin:function(t){return this.crossOrigin=t,this},setPath:function(t){return this.path=t,this}}),Object.assign(Zr.prototype,{getPoint:function(){return console.warn("THREE.Curve: .getPoint() not implemented."),null},getPointAt:function(t,e){var n=this.getUtoTmapping(t);return this.getPoint(n,e)},getPoints:function(t){void 0===t&&(t=5);for(var e=[],n=0;n<=t;n++)e.push(this.getPoint(n/t));return e},getSpacedPoints:function(t){void 0===t&&(t=5);for(var e=[],n=0;n<=t;n++)e.push(this.getPointAt(n/t));return e},getLength:function(){var t=this.getLengths();return t[t.length-1]},getLengths:function(t){if(void 0===t&&(t=this.arcLengthDivisions),this.cacheArcLengths&&this.cacheArcLengths.length===t+1&&!this.needsUpdate)return this.cacheArcLengths;this.needsUpdate=!1;var e,n,r=[],i=this.getPoint(0),a=0;for(r.push(0),n=1;n<=t;n++)e=this.getPoint(n/t),a+=e.distanceTo(i),r.push(a),i=e;return this.cacheArcLengths=r,r},updateArcLengths:function(){this.needsUpdate=!0,this.getLengths()},getUtoTmapping:function(t,e){var n,r=this.getLengths(),i=0,a=r.length;n=e||t*r[a-1];for(var o,s=0,c=a-1;s<=c;)if(i=Math.floor(s+(c-s)/2),(o=r[i]-n)<0)s=i+1;else{if(!(o>0)){c=i;break}c=i-1}if(i=c,r[i]===n)return i/(a-1);var h=r[i];return(i+(n-h)/(r[i+1]-h))/(a-1)},getTangent:function(t){var e=t-1e-4,n=t+1e-4;e<0&&(e=0),n>1&&(n=1);var r=this.getPoint(e);return this.getPoint(n).clone().sub(r).normalize()},getTangentAt:function(t){var e=this.getUtoTmapping(t);return this.getTangent(e)},computeFrenetFrames:function(t,e){var n,i,o,s=new a,c=[],h=[],l=[],u=new a,p=new r;for(n=0;n<=t;n++)i=n/t,c[n]=this.getTangentAt(i),c[n].normalize();h[0]=new a,l[0]=new a;var d=Number.MAX_VALUE,f=Math.abs(c[0].x),m=Math.abs(c[0].y),g=Math.abs(c[0].z);for(f<=d&&(d=f,s.set(1,0,0)),m<=d&&(d=m,s.set(0,1,0)),g<=d&&s.set(0,0,1),u.crossVectors(c[0],s).normalize(),h[0].crossVectors(c[0],u),l[0].crossVectors(c[0],h[0]),n=1;n<=t;n++)h[n]=h[n-1].clone(),l[n]=l[n-1].clone(),u.crossVectors(c[n-1],c[n]),u.length()>Number.EPSILON&&(u.normalize(),o=Math.acos(Oc.clamp(c[n-1].dot(c[n]),-1,1)),h[n].applyMatrix4(p.makeRotationAxis(u,o))),l[n].crossVectors(c[n],h[n]);if(!0===e)for(o=Math.acos(Oc.clamp(h[0].dot(h[t]),-1,1)),o/=t,c[0].dot(u.crossVectors(h[0],h[t]))>0&&(o=-o),n=1;n<=t;n++)h[n].applyMatrix4(p.makeRotationAxis(c[n],o*n)),l[n].crossVectors(c[n],h[n]);return{tangents:c,normals:h,binormals:l}},clone:function(){return(new this.constructor).copy(this)},copy:function(t){return this.arcLengthDivisions=t.arcLengthDivisions,this},toJSON:function(){var t={metadata:{version:4.5,type:"Curve",generator:"Curve.toJSON"}};return t.arcLengthDivisions=this.arcLengthDivisions,t.type=this.type,t},fromJSON:function(t){return this.arcLengthDivisions=t.arcLengthDivisions,this}}),Qr.prototype=Object.create(Zr.prototype),Qr.prototype.constructor=Qr,Qr.prototype.isEllipseCurve=!0,Qr.prototype.getPoint=function(t,e){for(var r=e||new n,i=2*Math.PI,a=this.aEndAngle-this.aStartAngle,o=Math.abs(a)i;)a-=i;a0?0:(Math.floor(Math.abs(s)/i)+1)*i:0===c&&s===i-1&&(s=i-2,c=1);var h,l,u,p;if(this.closed||s>0?h=r[(s-1)%i]:(vh.subVectors(r[0],r[1]).add(r[0]),h=vh),l=r[s%i],u=r[(s+1)%i],this.closed||s+2i.length-2?i.length-1:o+1],u=i[o>i.length-3?i.length-1:o+2];return r.set(ei(s,c.x,h.x,l.x,u.x),ei(s,c.y,h.y,l.y,u.y)),r},vi.prototype.copy=function(t){Zr.prototype.copy.call(this,t),this.points=[];for(var e=0,n=t.points.length;e=e){var i=n[r]-e,a=this.curves[r],o=a.getLength(),s=0===o?0:1-i/o;return a.getPointAt(s)}r++}return null},getLength:function(){var t=this.getCurveLengths();return t[t.length-1]},updateArcLengths:function(){this.needsUpdate=!0,this.cacheLengths=null,this.getCurveLengths()},getCurveLengths:function(){if(this.cacheLengths&&this.cacheLengths.length===this.curves.length)return this.cacheLengths;for(var t=[],e=0,n=0,r=this.curves.length;n1&&!n[n.length-1].equals(n[0])&&n.push(n[0]),n},copy:function(t){Zr.prototype.copy.call(this,t),this.curves=[];for(var e=0,n=t.curves.length;e0){var h=c.getPoint(0);h.equals(this.currentPoint)||this.lineTo(h.x,h.y)}this.curves.push(c);var l=c.getPoint(1);this.currentPoint.copy(l)},copy:function(t){return yi.prototype.copy.call(this,t),this.currentPoint.copy(t.currentPoint),this},toJSON:function(){var t=yi.prototype.toJSON.call(this);return t.currentPoint=this.currentPoint.toArray(),t},fromJSON:function(t){return yi.prototype.fromJSON.call(this,t),this.currentPoint.fromArray(t.currentPoint),this}}),bi.prototype=Object.assign(Object.create(xi.prototype),{constructor:bi,getPointsHoles:function(t){for(var e=[],n=0,r=this.holes.length;n0){var a=new Vr(e),o=new Xr(a);o.setCrossOrigin(this.crossOrigin);for(var s=0,c=t.length;s0?new He(o,s):new J(o,s),void 0!==t.drawMode&&a.setDrawMode(t.drawMode);break;case"LOD":a=new Fe;break;case"Line":a=new We(r(t.geometry),i(t.material),t.mode);break;case"LineLoop":a=new Xe(r(t.geometry),i(t.material));break;case"LineSegments":a=new qe(r(t.geometry),i(t.material));break;case"PointCloud":case"Points":a=new Je(r(t.geometry),i(t.material));break;case"Sprite":a=new Ge(i(t.material));break;case"Group":a=new Te;break;default:a=new T}if(a.uuid=t.uuid,void 0!==t.name&&(a.name=t.name),void 0!==t.matrix?(a.matrix.fromArray(t.matrix),void 0!==t.matrixAutoUpdate&&(a.matrixAutoUpdate=t.matrixAutoUpdate),a.matrixAutoUpdate&&a.matrix.decompose(a.position,a.quaternion,a.scale)):(void 0!==t.position&&a.position.fromArray(t.position),void 0!==t.rotation&&a.rotation.fromArray(t.rotation),void 0!==t.quaternion&&a.quaternion.fromArray(t.quaternion),void 0!==t.scale&&a.scale.fromArray(t.scale)),void 0!==t.castShadow&&(a.castShadow=t.castShadow),void 0!==t.receiveShadow&&(a.receiveShadow=t.receiveShadow),t.shadow&&(void 0!==t.shadow.bias&&(a.shadow.bias=t.shadow.bias),void 0!==t.shadow.radius&&(a.shadow.radius=t.shadow.radius),void 0!==t.shadow.mapSize&&a.shadow.mapSize.fromArray(t.shadow.mapSize),void 0!==t.shadow.camera&&(a.shadow.camera=this.parseObject(t.shadow.camera))),void 0!==t.visible&&(a.visible=t.visible),void 0!==t.frustumCulled&&(a.frustumCulled=t.frustumCulled),void 0!==t.renderOrder&&(a.renderOrder=t.renderOrder),void 0!==t.userData&&(a.userData=t.userData),void 0!==t.layers&&(a.layers.mask=t.layers),void 0!==t.children)for(var c=t.children,h=0;h1){for(var v=!1,y=[],x=0,b=p.length;xNumber.EPSILON){if(h<0&&(o=e[a],c=-c,s=e[i],h=-h),t.ys.y)continue;if(t.y===o.y){if(t.x===o.x)return!0}else{var l=h*(t.x-o.x)-c*(t.y-o.y);if(0===l)return!0;if(l<0)continue;r=!r}}else{if(t.y!==o.y)continue;if(s.x<=t.x&&t.x<=o.x||o.x<=t.x&&t.x<=s.x)return!0}}return r})(M.p,p[T].p)&&(x!==T&&y.push({froms:x,tos:T,hole:_}),E?(E=!1,u[T].push(M)):v=!0);E&&u[x].push(M)}y.length>0&&(v||(d=u))}for(var S,m=0,A=p.length;m0){this.source.connect(this.filters[0]);for(var t=1,e=this.filters.length;t0){this.source.disconnect(this.filters[0]);for(var t=1,e=this.filters.length;t=.5)for(var a=0;a!==i;++a)t[e+a]=t[n+a]},_slerp:function(t,e,n,r){i.slerpFlat(t,e,t,e,t,n,r)},_lerp:function(t,e,n,r,i){for(var a=1-r,o=0;o!==i;++o){var s=e+o;t[s]=t[s]*a+t[n+o]*r}}});var Rh="\\[\\]\\.:\\/";Object.assign(Qi.prototype,{getValue:function(t,e){this.bind();var n=this._targetGroup.nCachedObjects_,r=this._bindings[n];void 0!==r&&r.getValue(t,e)},setValue:function(t,e){for(var n=this._bindings,r=this._targetGroup.nCachedObjects_,i=n.length;r!==i;++r)n[r].setValue(t,e)},bind:function(){for(var t=this._bindings,e=this._targetGroup.nCachedObjects_,n=t.length;e!==n;++e)t[e].bind()},unbind:function(){for(var t=this._bindings,e=this._targetGroup.nCachedObjects_,n=t.length;e!==n;++e)t[e].unbind()}}),Object.assign(Ki,{Composite:Qi,create:function(t,e,n){return t&&t.isAnimationObjectGroup?new Ki.Composite(t,e,n):new Ki(t,e,n)},sanitizeNodeName:function(){var t=new RegExp("["+Rh+"]","g");return function(e){return e.replace(/\s/g,"_").replace(t,"")}}(),parseTrackName:function(){var t="[^"+Rh+"]",e="[^"+Rh.replace("\\.","")+"]",n=/((?:WC+[\/:])*)/.source.replace("WC",t),r=/(WCOD+)?/.source.replace("WCOD",e),i=/(?:\.(WC+)(?:\[(.+)\])?)?/.source.replace("WC",t),a=/\.(WC+)(?:\[(.+)\])?/.source.replace("WC",t),o=new RegExp("^"+n+r+i+a+"$"),s=["material","materials","bones"];return function(t){var e=o.exec(t);if(!e)throw new Error("PropertyBinding: Cannot parse trackName: "+t);var n={nodeName:e[2],objectName:e[3],objectIndex:e[4],propertyName:e[5],propertyIndex:e[6]},r=n.nodeName&&n.nodeName.lastIndexOf(".");if(void 0!==r&&-1!==r){var i=n.nodeName.substring(r+1);-1!==s.indexOf(i)&&(n.nodeName=n.nodeName.substring(0,r),n.objectName=i)}if(null===n.propertyName||0===n.propertyName.length)throw new Error("PropertyBinding: can not parse propertyName from trackName: "+t);return n}}(),findNode:function(t,e){if(!e||""===e||"root"===e||"."===e||-1===e||e===t.name||e===t.uuid)return t;if(t.skeleton){var n=t.skeleton.getBoneByName(e);if(void 0!==n)return n}if(t.children){var r=function(t){for(var n=0;n=e){var l=e++,u=t[l];n[u.uuid]=h,t[h]=u,n[c]=l,t[l]=s;for(var p=0,d=i;p!==d;++p){var f=r[p],m=f[l],g=f[h];f[h]=m,f[l]=g}}}this.nCachedObjects_=e},uncache:function(){for(var t=this._objects,e=t.length,n=this.nCachedObjects_,r=this._indicesByUUID,i=this._bindings,a=i.length,o=0,s=arguments.length;o!==s;++o){var c=arguments[o],h=c.uuid,l=r[h];if(void 0!==l)if(delete r[h],l0)for(var c=this._interpolants,h=this._propertyBindings,l=0,u=c.length;l!==u;++l)c[l].evaluate(o),h[l].accumulate(r,s)},_updateWeight:function(t){var e=0;if(this.enabled){e=this.weight;var n=this._weightInterpolant;if(null!==n){var r=n.evaluate(t)[0];e*=r,t>n.parameterPositions[1]&&(this.stopFading(),0===r&&(this.enabled=!1))}}return this._effectiveWeight=e,e},_updateTimeScale:function(t){var e=0;if(!this.paused){e=this.timeScale;var n=this._timeScaleInterpolant;if(null!==n){e*=n.evaluate(t)[0],t>n.parameterPositions[1]&&(this.stopWarping(),0===e?this.paused=!0:this.timeScale=e)}}return this._effectiveTimeScale=e,e},_updateTime:function(t){var e=this.time+t,n=this._clip.duration,r=this.loop,i=this._loopCount,a=2202===r;if(0===t)return-1===i?e:a&&1==(1&i)?n-e:e;if(2200===r){-1===i&&(this._loopCount=0,this._setEndings(!0,!0,!1));t:{if(e>=n)e=n;else{if(!(e<0))break t;e=0}this.clampWhenFinished?this.paused=!0:this.enabled=!1,this._mixer.dispatchEvent({type:"finished",action:this,direction:t<0?-1:1})}}else{if(-1===i&&(t>=0?(i=0,this._setEndings(!0,0===this.repetitions,a)):this._setEndings(0===this.repetitions,!0,a)),e>=n||e<0){var o=Math.floor(e/n);e-=n*o,i+=Math.abs(o);var s=this.repetitions-i;if(s<=0)this.clampWhenFinished?this.paused=!0:this.enabled=!1,e=t>0?n:0,this._mixer.dispatchEvent({type:"finished",action:this,direction:t>0?1:-1});else{if(1===s){var c=t<0;this._setEndings(c,!c,a)}else this._setEndings(!1,!1,a);this._loopCount=i,this._mixer.dispatchEvent({type:"loop",action:this,loopDelta:o})}}if(a&&1==(1&i))return this.time=e,n-e}return this.time=e,e},_setEndings:function(t,e,n){var r=this._interpolantSettings;n?(r.endingStart=2401,r.endingEnd=2401):(r.endingStart=t?this.zeroSlopeAtStart?2401:vc:2402,r.endingEnd=e?this.zeroSlopeAtEnd?2401:vc:2402)},_scheduleFading:function(t,e,n){var r=this._mixer,i=r.time,a=this._weightInterpolant;null===a&&(a=r._lendControlInterpolant(),this._weightInterpolant=a);var o=a.parameterPositions,s=a.sampleValues;return o[0]=i,s[0]=e,o[1]=i+t,s[1]=n,this}}),ea.prototype=Object.assign(Object.create(e.prototype),{constructor:ea,_bindAction:function(t,e){var n=t._localRoot||this._root,r=t._clip.tracks,i=r.length,a=t._propertyBindings,o=t._interpolants,s=n.uuid,c=this._bindingsByRootAndName,h=c[s];void 0===h&&(h={},c[s]=h);for(var l=0;l!==i;++l){var u=r[l],p=u.name,d=h[p];if(void 0!==d)a[l]=d;else{if(void 0!==(d=a[l])){null===d._cacheIndex&&(++d.referenceCount,this._addInactiveBinding(d,s,p));continue}var f=e&&e._propertyBindings[l].binding.parsedPath;d=new Zi(Ki.create(n,p,f),u.ValueTypeName,u.getValueSize()),++d.referenceCount,this._addInactiveBinding(d,s,p),a[l]=d}o[l].resultBuffer=d.buffer}},_activateAction:function(t){if(!this._isActiveAction(t)){if(null===t._cacheIndex){var e=(t._localRoot||this._root).uuid,n=t._clip.uuid,r=this._actionsByClip[n];this._bindAction(t,r&&r.knownActions[0]),this._addInactiveAction(t,n,e)}for(var i=t._propertyBindings,a=0,o=i.length;a!==o;++a){var s=i[a];0==s.useCount++&&(this._lendBinding(s),s.saveOriginalState())}this._lendAction(t)}},_deactivateAction:function(t){if(this._isActiveAction(t)){for(var e=t._propertyBindings,n=0,r=e.length;n!==r;++n){var i=e[n];0==--i.useCount&&(i.restoreOriginalState(),this._takeBackBinding(i))}this._takeBackAction(t)}},_initMemoryManager:function(){this._actions=[],this._nActiveActions=0,this._actionsByClip={},this._bindings=[],this._nActiveBindings=0,this._bindingsByRootAndName={},this._controlInterpolants=[],this._nActiveControlInterpolants=0;var t=this;this.stats={actions:{get total(){return t._actions.length},get inUse(){return t._nActiveActions}},bindings:{get total(){return t._bindings.length},get inUse(){return t._nActiveBindings}},controlInterpolants:{get total(){return t._controlInterpolants.length},get inUse(){return t._nActiveControlInterpolants}}}},_isActiveAction:function(t){var e=t._cacheIndex;return null!==e&&ethis.max.x||t.ythis.max.y)},containsBox:function(t){return this.min.x<=t.min.x&&t.max.x<=this.max.x&&this.min.y<=t.min.y&&t.max.y<=this.max.y},getParameter:function(t,e){return void 0===e&&(console.warn("THREE.Box2: .getParameter() target is now required"),e=new n),e.set((t.x-this.min.x)/(this.max.x-this.min.x),(t.y-this.min.y)/(this.max.y-this.min.y))},intersectsBox:function(t){return!(t.max.xthis.max.x||t.max.ythis.max.y)},clampPoint:function(t,e){return void 0===e&&(console.warn("THREE.Box2: .clampPoint() target is now required"),e=new n),e.copy(t).clamp(this.min,this.max)},distanceToPoint:function(){var t=new n;return function(e){return t.copy(e).clamp(this.min,this.max).sub(e).length()}}(),intersect:function(t){return this.min.max(t.min),this.max.min(t.max),this},union:function(t){return this.min.min(t.min),this.max.max(t.max),this},translate:function(t){return this.min.add(t),this.max.add(t),this},equals:function(t){return t.min.equals(this.min)&&t.max.equals(this.max)}}),Object.assign(pa.prototype,{set:function(t,e){return this.start.copy(t),this.end.copy(e),this},clone:function(){return(new this.constructor).copy(this)},copy:function(t){return this.start.copy(t.start),this.end.copy(t.end),this},getCenter:function(t){return void 0===t&&(console.warn("THREE.Line3: .getCenter() target is now required"),t=new a),t.addVectors(this.start,this.end).multiplyScalar(.5)},delta:function(t){return void 0===t&&(console.warn("THREE.Line3: .delta() target is now required"),t=new a),t.subVectors(this.end,this.start)},distanceSq:function(){return this.start.distanceToSquared(this.end)},distance:function(){return this.start.distanceTo(this.end)},at:function(t,e){return void 0===e&&(console.warn("THREE.Line3: .at() target is now required"),e=new a),this.delta(e).multiplyScalar(t).add(this.start)},closestPointToPointParameter:function(){var t=new a,e=new a;return function(n,r){t.subVectors(n,this.start),e.subVectors(this.end,this.start);var i=e.dot(e),a=e.dot(t),o=a/i;return r&&(o=Oc.clamp(o,0,1)),o}}(),closestPointToPoint:function(t,e,n){var r=this.closestPointToPointParameter(t,e);return void 0===n&&(console.warn("THREE.Line3: .closestPointToPoint() target is now required"),n=new a),this.delta(n).multiplyScalar(r).add(this.start)},applyMatrix4:function(t){return this.start.applyMatrix4(t),this.end.applyMatrix4(t),this},equals:function(t){return t.start.equals(this.start)&&t.end.equals(this.end)}}),da.prototype=Object.create(T.prototype),da.prototype.constructor=da,da.prototype.isImmediateRenderObject=!0,fa.prototype=Object.create(qe.prototype),fa.prototype.constructor=fa,fa.prototype.update=function(){var t=new a,e=new a,n=new o;return function(){var r=["a","b","c"];this.object.updateMatrixWorld(!0),n.getNormalMatrix(this.object.matrixWorld);var i=this.object.matrixWorld,a=this.geometry.attributes.position,o=this.object.geometry;if(o&&o.isGeometry)for(var s=o.vertices,c=o.faces,h=0,l=0,u=c.length;l1&&t.multiplyScalar(1/e),this.children[0].material.color.copy(this.material.color)}},xa.prototype.dispose=function(){this.geometry.dispose(),this.material.dispose(),this.children[0].geometry.dispose(),this.children[0].material.dispose()},ba.prototype=Object.create(T.prototype),ba.prototype.constructor=ba,ba.prototype.dispose=function(){this.children[0].geometry.dispose(),this.children[0].material.dispose()},ba.prototype.update=function(){var t=new a,e=new x,n=new x;return function(){var r=this.children[0];if(void 0!==this.color)this.material.color.set(this.color);else{var i=r.geometry.getAttribute("color");e.copy(this.light.color),n.copy(this.light.groundColor);for(var a=0,o=i.count;a.99999?this.quaternion.set(0,0,0,1):n.y<-.99999?this.quaternion.set(1,0,0,0):(e.set(n.z,0,-n.x).normalize(),t=Math.acos(n.y),this.quaternion.setFromAxisAngle(e,t))}}(),Pa.prototype.setLength=function(t,e,n){void 0===e&&(e=.2*t),void 0===n&&(n=.2*e),this.line.scale.set(1,Math.max(0,t-e),1),this.line.updateMatrix(),this.cone.scale.set(n,e,n),this.cone.position.y=t,this.cone.updateMatrix()},Pa.prototype.setColor=function(t){this.line.material.color.copy(t),this.cone.material.color.copy(t)},Pa.prototype.copy=function(t){return T.prototype.copy.call(this,t,!1),this.line.copy(t.line),this.cone.copy(t.cone),this},Pa.prototype.clone=function(){return(new this.constructor).copy(this)},Ca.prototype=Object.create(qe.prototype),Ca.prototype.constructor=Ca;Zr.create=function(t,e){return console.log("THREE.Curve.create() has been deprecated"),t.prototype=Object.create(Zr.prototype),t.prototype.constructor=t,t.prototype.getPoint=e,t},Object.assign(yi.prototype,{createPointsGeometry:function(t){console.warn("THREE.CurvePath: .createPointsGeometry() has been removed. Use new THREE.Geometry().setFromPoints( points ) instead.");var e=this.getPoints(t);return this.createGeometry(e)},createSpacedPointsGeometry:function(t){console.warn("THREE.CurvePath: .createSpacedPointsGeometry() has been removed. Use new THREE.Geometry().setFromPoints( points ) instead.");var e=this.getSpacedPoints(t);return this.createGeometry(e)},createGeometry:function(t){console.warn("THREE.CurvePath: .createGeometry() has been removed. Use new THREE.Geometry().setFromPoints( points ) instead.");for(var e=new S,n=0,r=t.length;n",t).replace("#include ",r).replace("#include ",s).replace("#include ",n).replace("#include ",a)},Object.defineProperties(this,{specular:{get:function(){return i.specular.value},set:function(e){i.specular.value=e}},specularMap:{get:function(){return i.specularMap.value},set:function(e){i.specularMap.value=e,e?this.defines.USE_SPECULARMAP="":delete this.defines.USE_SPECULARMAP}},glossiness:{get:function(){return i.glossiness.value},set:function(e){i.glossiness.value=e}},glossinessMap:{get:function(){return i.glossinessMap.value},set:function(e){i.glossinessMap.value=e,e?(this.defines.USE_GLOSSINESSMAP="",this.defines.USE_UV=""):(delete this.defines.USE_GLOSSINESSMAP,delete this.defines.USE_UV)}}}),delete this.metalness,delete this.roughness,delete this.metalnessMap,delete this.roughnessMap,this.setValues(e)}function f(){return{name:w.KHR_MATERIALS_PBR_SPECULAR_GLOSSINESS,specularGlossinessParams:["color","map","lightMap","lightMapIntensity","aoMap","aoMapIntensity","emissive","emissiveIntensity","emissiveMap","bumpMap","bumpScale","normalMap","normalMapType","displacementMap","displacementScale","displacementBias","specularMap","specular","glossinessMap","glossiness","alphaMap","envMap","envMapIntensity","refractionRatio"],getMaterialType:function(){return d},extendParams:function(e,t,r){var s=t.extensions[this.name];e.color=new THREE.Color(1,1,1),e.opacity=1;var n=[];if(Array.isArray(s.diffuseFactor)){var a=s.diffuseFactor;e.color.fromArray(a),e.opacity=a[3]}if(void 0!==s.diffuseTexture&&n.push(r.assignTexture(e,"map",s.diffuseTexture)),e.emissive=new THREE.Color(0,0,0),e.glossiness=void 0!==s.glossinessFactor?s.glossinessFactor:1,e.specular=new THREE.Color(1,1,1),Array.isArray(s.specularFactor)&&e.specular.fromArray(s.specularFactor),void 0!==s.specularGlossinessTexture){var i=s.specularGlossinessTexture;n.push(r.assignTexture(e,"glossinessMap",i)),n.push(r.assignTexture(e,"specularMap",i))}return Promise.all(n)},createMaterial:function(e){var t=new d(e);return t.fog=!0,t.color=e.color,t.map=void 0===e.map?null:e.map,t.lightMap=null,t.lightMapIntensity=1,t.aoMap=void 0===e.aoMap?null:e.aoMap,t.aoMapIntensity=1,t.emissive=e.emissive,t.emissiveIntensity=1,t.emissiveMap=void 0===e.emissiveMap?null:e.emissiveMap,t.bumpMap=void 0===e.bumpMap?null:e.bumpMap,t.bumpScale=1,t.normalMap=void 0===e.normalMap?null:e.normalMap,t.normalMapType=THREE.TangentSpaceNormalMap,e.normalScale&&(t.normalScale=e.normalScale),t.displacementMap=null,t.displacementScale=1,t.displacementBias=0,t.specularMap=void 0===e.specularMap?null:e.specularMap,t.specular=e.specular,t.glossinessMap=void 0===e.glossinessMap?null:e.glossinessMap,t.glossiness=e.glossiness,t.alphaMap=null,t.envMap=void 0===e.envMap?null:e.envMap,t.envMapIntensity=1,t.refractionRatio=.98,t}}}function m(){this.name=w.KHR_MESH_QUANTIZATION}function E(e,t,r,s){THREE.Interpolant.call(this,e,t,r,s)}function T(e,t){return"string"!=typeof e||""===e?"":(/^https?:\/\//i.test(t)&&/^\//.test(e)&&(t=t.replace(/(^https?:\/\/[^\/]+).*/i,"$1")),/^(https?:)?\/\//i.test(e)?e:/^data:.*,.*$/i.test(e)?e:/^blob:.*$/i.test(e)?e:t+e)}function g(e){return void 0===e.DefaultMaterial&&(e.DefaultMaterial=new THREE.MeshStandardMaterial({color:16777215,emissive:0,metalness:1,roughness:1,transparent:!1,depthTest:!0,side:THREE.FrontSide})),e.DefaultMaterial}function v(e,t,r){for(var s in r.extensions)void 0===e[s]&&(t.userData.gltfExtensions=t.userData.gltfExtensions||{},t.userData.gltfExtensions[s]=r.extensions[s])}function R(e,t){void 0!==t.extras&&("object"==typeof t.extras?Object.assign(e.userData,t.extras):console.warn("THREE.GLTFLoader: Ignoring primitive type .extras, "+t.extras))}function y(e,t,r){for(var s=!1,n=!1,a=0,i=t.length;a=2.0 are supported.")));var d=new A(u,{path:t||this.resourcePath||"",crossOrigin:this.crossOrigin,manager:this.manager,ktx2Loader:this.ktx2Loader,meshoptDecoder:this.meshoptDecoder});d.fileLoader.setRequestHeader(this.requestHeader);for(var E=0;E=0&&void 0===l[g]&&console.warn('THREE.GLTFLoader: Unknown extension "'+g+'".')}}d.setExtensions(o),d.setPlugins(l),d.parse(s,a)}});var w={KHR_BINARY_GLTF:"KHR_binary_glTF",KHR_DRACO_MESH_COMPRESSION:"KHR_draco_mesh_compression",KHR_LIGHTS_PUNCTUAL:"KHR_lights_punctual",KHR_MATERIALS_CLEARCOAT:"KHR_materials_clearcoat",KHR_MATERIALS_PBR_SPECULAR_GLOSSINESS:"KHR_materials_pbrSpecularGlossiness",KHR_MATERIALS_TRANSMISSION:"KHR_materials_transmission",KHR_MATERIALS_UNLIT:"KHR_materials_unlit",KHR_TEXTURE_BASISU:"KHR_texture_basisu",KHR_TEXTURE_TRANSFORM:"KHR_texture_transform",KHR_MESH_QUANTIZATION:"KHR_mesh_quantization",EXT_TEXTURE_WEBP:"EXT_texture_webp",EXT_MESHOPT_COMPRESSION:"EXT_meshopt_compression",MSFT_TEXTURE_DDS:"MSFT_texture_dds"};s.prototype._markDefs=function(){for(var e=this.parser,t=this.parser.json.nodes||[],r=0,s=t.length;r=0)throw new Error("THREE.GLTFLoader: setKTX2Loader must be called before loading KTX2 textures");return null}return t.loadTextureImage(e,a,i)},l.prototype.loadTexture=function(e){var t=this.name,r=this.parser,s=r.json,n=s.textures[e];if(!n.extensions||!n.extensions[t])return null;var a=n.extensions[t],i=s.images[a.source],o=i.uri?r.options.manager.getHandler(i.uri):r.textureLoader;return this.detectSupport().then(function(n){if(n)return r.loadTextureImage(e,i,o);if(s.extensionsRequired&&s.extensionsRequired.indexOf(t)>=0)throw new Error("THREE.GLTFLoader: WebP required by asset but unsupported.");return r.loadTexture(e)})},l.prototype.detectSupport=function(){return this.isSupported||(this.isSupported=new Promise(function(e){var t=new Image;t.src="data:image/webp;base64,UklGRiIAAABXRUJQVlA4IBYAAAAwAQCdASoBAAEADsD+JaQAA3AAAAAA",t.onload=t.onerror=function(){e(1===t.height)}})),this.isSupported},u.prototype.loadBufferView=function(e){var t=this.parser.json,r=t.bufferViews[e];if(r.extensions&&r.extensions[this.name]){var s=r.extensions[this.name],n=this.parser.getDependency("buffer",s.buffer),a=this.parser.options.meshoptDecoder;if(!a||!a.supported){if(t.extensionsRequired&&t.extensionsRequired.indexOf(this.name)>=0)throw new Error("THREE.GLTFLoader: setMeshoptDecoder must be called before loading compressed files");return null}return Promise.all([n,a.ready]).then(function(e){var t=s.byteOffset||0,r=s.byteLength||0,n=s.count,i=s.byteStride,o=new ArrayBuffer(n*i),l=new Uint8Array(e[0],t,r);return a.decodeGltfBuffer(new Uint8Array(o),n,i,l,s.mode,s.filter),o})}return null};var b="glTF",I=12,N={JSON:1313821514,BIN:5130562};p.prototype.decodePrimitive=function(e,t){var r=this.json,s=this.dracoLoader,n=e.extensions[this.name].bufferView,a=e.extensions[this.name].attributes,i={},o={},l={};for(var u in a){var c=D[u]||u.toLowerCase();i[c]=a[u]}for(u in e.attributes){var c=D[u]||u.toLowerCase();if(void 0!==a[u]){var p=r.accessors[e.attributes[u]],h=P[p.componentType];l[c]=h,o[c]=!0===p.normalized}}return t.getDependency("bufferView",n).then(function(e){return new Promise(function(t){s.decodeDracoFile(e,function(e){for(var r in e.attributes){var s=e.attributes[r],n=o[r];void 0!==n&&(s.normalized=n)}t(e)},i,l)})})},h.prototype.extendTexture=function(e,t){return e=e.clone(),void 0!==t.offset&&e.offset.fromArray(t.offset),void 0!==t.rotation&&(e.rotation=t.rotation),void 0!==t.scale&&e.repeat.fromArray(t.scale),void 0!==t.texCoord&&console.warn('THREE.GLTFLoader: Custom UV sets in "'+this.name+'" extension not yet supported.'),e.needsUpdate=!0,e},d.prototype=Object.create(THREE.MeshStandardMaterial.prototype),d.prototype.constructor=d,d.prototype.copy=function(e){return THREE.MeshStandardMaterial.prototype.copy.call(this,e),this.specularMap=e.specularMap,this.specular.copy(e.specular),this.glossinessMap=e.glossinessMap,this.glossiness=e.glossiness,delete this.metalness,delete this.roughness,delete this.metalnessMap,delete this.roughnessMap,this},E.prototype=Object.create(THREE.Interpolant.prototype),E.prototype.constructor=E,E.prototype.copySampleValue_=function(e){for(var t=this.resultBuffer,r=this.sampleValues,s=this.valueSize,n=e*s*3+s,a=0;a!==s;a++)t[a]=r[n+a];return t},E.prototype.beforeStart_=E.prototype.copySampleValue_,E.prototype.afterEnd_=E.prototype.copySampleValue_,E.prototype.interpolate_=function(e,t,r,s){for(var n=this.resultBuffer,a=this.sampleValues,i=this.valueSize,o=2*i,l=3*i,u=s-t,c=(r-t)/u,p=c*c,h=p*c,d=e*l,f=d-l,m=-2*h+3*p,E=h-p,T=1-m,g=E-p+c,v=0;v!==i;v++){var R=a[f+v+i],y=a[f+v+o]*u,M=a[d+v+i],x=a[d+v]*u;n[v]=T*R+g*y+m*M+E*x}return n};var O={FLOAT:5126,FLOAT_MAT3:35675,FLOAT_MAT4:35676,FLOAT_VEC2:35664,FLOAT_VEC3:35665,FLOAT_VEC4:35666,LINEAR:9729,REPEAT:10497,SAMPLER_2D:35678,POINTS:0,LINES:1,LINE_LOOP:2,LINE_STRIP:3,TRIANGLES:4,TRIANGLE_STRIP:5,TRIANGLE_FAN:6,UNSIGNED_BYTE:5121,UNSIGNED_SHORT:5123},P={5120:Int8Array,5121:Uint8Array,5122:Int16Array,5123:Uint16Array,5125:Uint32Array,5126:Float32Array},F={9728:THREE.NearestFilter,9729:THREE.LinearFilter,9984:THREE.NearestMipmapNearestFilter,9985:THREE.LinearMipmapNearestFilter,9986:THREE.NearestMipmapLinearFilter,9987:THREE.LinearMipmapLinearFilter},C={33071:THREE.ClampToEdgeWrapping,33648:THREE.MirroredRepeatWrapping,10497:THREE.RepeatWrapping},U={SCALAR:1,VEC2:2,VEC3:3,VEC4:4,MAT2:4,MAT3:9,MAT4:16},D={POSITION:"position",NORMAL:"normal",TANGENT:"tangent",TEXCOORD_0:"uv",TEXCOORD_1:"uv2",COLOR_0:"color",WEIGHTS_0:"skinWeight",JOINTS_0:"skinIndex"},G={scale:"scale",translation:"position",rotation:"quaternion",weights:"morphTargetInfluences"},k={CUBICSPLINE:void 0,LINEAR:THREE.InterpolateLinear,STEP:THREE.InterpolateDiscrete},B={OPAQUE:"OPAQUE",MASK:"MASK",BLEND:"BLEND"};return A.prototype.setExtensions=function(e){this.extensions=e},A.prototype.setPlugins=function(e){this.plugins=e},A.prototype.parse=function(e,t){var r=this,s=this.json,n=this.extensions;this.cache.removeAll(),this._invokeAll(function(e){return e._markDefs&&e._markDefs()}),Promise.all([this.getDependencies("scene"),this.getDependencies("animation"),this.getDependencies("camera")]).then(function(t){var a={scene:t[0][s.scene||0],scenes:t[0],animations:t[1],cameras:t[2],asset:s.asset,parser:r,userData:{}};v(n,a,s),R(a,s),e(a)}).catch(t)},A.prototype._markDefs=function(){for(var e=this.json.nodes||[],t=this.json.skins||[],r=this.json.meshes||[],s=0,n=t.length;s=2&&a.setY(A,M[x*o+1]),o>=3&&a.setZ(A,M[x*o+2]),o>=4&&a.setW(A,M[x*o+3]),o>=5)throw new Error("THREE.GLTFLoader: Unsupported itemSize in sparse BufferAttribute.")}}return a})},A.prototype.loadTexture=function(e){var t,r=this,s=this.json,n=this.options,a=s.textures[e],i=a.extensions||{};t=i[w.MSFT_TEXTURE_DDS]?s.images[i[w.MSFT_TEXTURE_DDS].source]:s.images[a.source];var o;return t.uri&&(o=n.manager.getHandler(t.uri)),o||(o=i[w.MSFT_TEXTURE_DDS]?r.extensions[w.MSFT_TEXTURE_DDS].ddsLoader:this.textureLoader),this.loadTextureImage(e,t,o)},A.prototype.loadTextureImage=function(e,t,r){var s=this,n=this.json,a=this.options,i=n.textures[e],o=self.URL||self.webkitURL,l=t.uri,u=!1,c=!0;return"image/jpeg"===t.mimeType&&(c=!1),void 0!==t.bufferView&&(l=s.getDependency("bufferView",t.bufferView).then(function(e){if("image/png"===t.mimeType){var r=new DataView(e,25,1).getUint8(0,!1);c=6===r||4===r||3===r}u=!0;var s=new Blob([e],{type:t.mimeType});return l=o.createObjectURL(s)})),Promise.resolve(l).then(function(e){return new Promise(function(t,s){var n=t;!0===r.isImageBitmapLoader&&(n=function(e){t(new THREE.CanvasTexture(e))}),r.load(T(e,a.path),n,void 0,s)})}).then(function(t){!0===u&&o.revokeObjectURL(l),t.flipY=!1,i.name&&(t.name=i.name),c||(t.format=THREE.RGBFormat);var r=n.samplers||{},a=r[i.sampler]||{};return t.magFilter=F[a.magFilter]||THREE.LinearFilter,t.minFilter=F[a.minFilter]||THREE.LinearMipmapLinearFilter,t.wrapS=C[a.wrapS]||THREE.RepeatWrapping,t.wrapT=C[a.wrapT]||THREE.RepeatWrapping,s.associations.set(t,{type:"textures",index:e}),t})},A.prototype.assignTexture=function(e,t,r){var s=this;return this.getDependency("texture",r.index).then(function(n){if(void 0===r.texCoord||0==r.texCoord||"aoMap"===t&&1==r.texCoord||console.warn("THREE.GLTFLoader: Custom UV set "+r.texCoord+" for texture "+t+" not yet supported."),s.extensions[w.KHR_TEXTURE_TRANSFORM]){var a=void 0!==r.extensions?r.extensions[w.KHR_TEXTURE_TRANSFORM]:void 0;if(a){var i=s.associations.get(n);n=s.extensions[w.KHR_TEXTURE_TRANSFORM].extendTexture(n,a),s.associations.set(n,i)}}e[t]=n})},A.prototype.assignFinalMaterial=function(e){var t=e.geometry,r=e.material,s=void 0!==t.attributes.tangent,n=void 0!==t.attributes.color,a=void 0===t.attributes.normal,i=!0===e.isSkinnedMesh,o=Object.keys(t.morphAttributes).length>0,l=o&&void 0!==t.morphAttributes.normal;if(e.isPoints){var u="PointsMaterial:"+r.uuid,c=this.cache.get(u);c||(c=new THREE.PointsMaterial,THREE.Material.prototype.copy.call(c,r),c.color.copy(r.color),c.map=r.map,c.sizeAttenuation=!1,this.cache.add(u,c)),r=c}else if(e.isLine){var u="LineBasicMaterial:"+r.uuid,p=this.cache.get(u);p||(p=new THREE.LineBasicMaterial,THREE.Material.prototype.copy.call(p,r),p.color.copy(r.color),this.cache.add(u,p)),r=p}if(s||n||a||i||o){var u="ClonedMaterial:"+r.uuid+":";r.isGLTFSpecularGlossinessMaterial&&(u+="specular-glossiness:"),i&&(u+="skinning:"),s&&(u+="vertex-tangents:"),n&&(u+="vertex-colors:"),a&&(u+="flat-shading:"),o&&(u+="morph-targets:"),l&&(u+="morph-normals:");var h=this.cache.get(u);h||(h=r.clone(),i&&(h.skinning=!0),s&&(h.vertexTangents=!0),n&&(h.vertexColors=!0),a&&(h.flatShading=!0),o&&(h.morphTargets=!0),l&&(h.morphNormals=!0),this.cache.add(u,h),this.associations.set(h,this.associations.get(r))),r=h}r.aoMap&&void 0===t.attributes.uv2&&void 0!==t.attributes.uv&&t.setAttribute("uv2",t.attributes.uv),r.normalScale&&!s&&(r.normalScale.y=-r.normalScale.y),r.clearcoatNormalScale&&!s&&(r.clearcoatNormalScale.y=-r.clearcoatNormalScale.y),e.material=r},A.prototype.getMaterialType=function(){return THREE.MeshStandardMaterial},A.prototype.loadMaterial=function(e){var t,r=this,s=this.json,n=this.extensions,a=s.materials[e],i={},o=a.extensions||{},l=[];if(o[w.KHR_MATERIALS_PBR_SPECULAR_GLOSSINESS]){var u=n[w.KHR_MATERIALS_PBR_SPECULAR_GLOSSINESS];t=u.getMaterialType(),l.push(u.extendParams(i,a,r))}else if(o[w.KHR_MATERIALS_UNLIT]){ -var c=n[w.KHR_MATERIALS_UNLIT];t=c.getMaterialType(),l.push(c.extendParams(i,a,r))}else{var p=a.pbrMetallicRoughness||{};if(i.color=new THREE.Color(1,1,1),i.opacity=1,Array.isArray(p.baseColorFactor)){var h=p.baseColorFactor;i.color.fromArray(h),i.opacity=h[3]}void 0!==p.baseColorTexture&&l.push(r.assignTexture(i,"map",p.baseColorTexture)),i.metalness=void 0!==p.metallicFactor?p.metallicFactor:1,i.roughness=void 0!==p.roughnessFactor?p.roughnessFactor:1,void 0!==p.metallicRoughnessTexture&&(l.push(r.assignTexture(i,"metalnessMap",p.metallicRoughnessTexture)),l.push(r.assignTexture(i,"roughnessMap",p.metallicRoughnessTexture))),t=this._invokeOne(function(t){return t.getMaterialType&&t.getMaterialType(e)}),l.push(Promise.all(this._invokeAll(function(t){return t.extendMaterialParams&&t.extendMaterialParams(e,i)})))}!0===a.doubleSided&&(i.side=THREE.DoubleSide);var f=a.alphaMode||B.OPAQUE;return f===B.BLEND?(i.transparent=!0,i.depthWrite=!1):(i.transparent=!1,f===B.MASK&&(i.alphaTest=void 0!==a.alphaCutoff?a.alphaCutoff:.5)),void 0!==a.normalTexture&&t!==THREE.MeshBasicMaterial&&(l.push(r.assignTexture(i,"normalMap",a.normalTexture)),i.normalScale=new THREE.Vector2(1,1),void 0!==a.normalTexture.scale&&i.normalScale.set(a.normalTexture.scale,a.normalTexture.scale)),void 0!==a.occlusionTexture&&t!==THREE.MeshBasicMaterial&&(l.push(r.assignTexture(i,"aoMap",a.occlusionTexture)),void 0!==a.occlusionTexture.strength&&(i.aoMapIntensity=a.occlusionTexture.strength)),void 0!==a.emissiveFactor&&t!==THREE.MeshBasicMaterial&&(i.emissive=(new THREE.Color).fromArray(a.emissiveFactor)),void 0!==a.emissiveTexture&&t!==THREE.MeshBasicMaterial&&l.push(r.assignTexture(i,"emissiveMap",a.emissiveTexture)),Promise.all(l).then(function(){var s;return s=t===d?n[w.KHR_MATERIALS_PBR_SPECULAR_GLOSSINESS].createMaterial(i):new t(i),a.name&&(s.name=a.name),s.map&&(s.map.encoding=THREE.sRGBEncoding),s.emissiveMap&&(s.emissiveMap.encoding=THREE.sRGBEncoding),R(s,a),r.associations.set(s,{type:"materials",index:e}),a.extensions&&v(n,s,a),s})},A.prototype.createUniqueName=function(e){for(var t=THREE.PropertyBinding.sanitizeNodeName(e||""),r=1;this.nodeNamesUsed[t];++r)t=e+"_"+r;return this.nodeNamesUsed[t]=!0,t},A.prototype.loadGeometries=function(e){for(var t=this,r=this.extensions,s=this.primitiveCache,n=[],a=0,i=e.length;a0&&M(p,n),p.name=t.createUniqueName(n.name||"mesh_"+e),R(p,n),d.extensions&&v(s,p,d),t.assignFinalMaterial(p),l.push(p)}if(1===l.length)return l[0];for(var m=new THREE.Group,u=0,c=l.length;u1?new THREE.Group:1===t.length?t[0]:new THREE.Object3D)!==t[0])for(var o=0,l=t.length;o0&&console.log("Loaded a mesh.");else{if(d!=t.POINT_CLOUD){var s="THREE.DRACOLoader: Unknown geometry type.";throw console.error(s),new Error(s)}this.verbosity>0&&console.log("Loaded a point cloud.")}r(this.convertDracoGeometryTo3JS(t,a,d,n,o,i))},addAttributeToGeometry:function(e,t,r,o,i,n,a,d){if(0===n.ptr){var s="THREE.DRACOLoader: No attribute "+o;throw console.error(s),new Error(s)}var u,c,l=n.num_components(),A=r.num_points(),E=A*l;switch(i){case Float32Array:u=new e.DracoFloat32Array,t.GetAttributeFloatForAllPoints(r,n,u),d[o]=new Float32Array(E),c=THREE.Float32BufferAttribute;break;case Int8Array:u=new e.DracoInt8Array,t.GetAttributeInt8ForAllPoints(r,n,u),d[o]=new Int8Array(E),c=THREE.Int8BufferAttribute;break;case Int16Array:u=new e.DracoInt16Array,t.GetAttributeInt16ForAllPoints(r,n,u),d[o]=new Int16Array(E),c=THREE.Int16BufferAttribute;break;case Int32Array:u=new e.DracoInt32Array,t.GetAttributeInt32ForAllPoints(r,n,u),d[o]=new Int32Array(E),c=THREE.Int32BufferAttribute;break;case Uint8Array:u=new e.DracoUInt8Array,t.GetAttributeUInt8ForAllPoints(r,n,u),d[o]=new Uint8Array(E),c=THREE.Uint8BufferAttribute;break;case Uint16Array:u=new e.DracoUInt16Array,t.GetAttributeUInt16ForAllPoints(r,n,u),d[o]=new Uint16Array(E),c=THREE.Uint16BufferAttribute;break;case Uint32Array:u=new e.DracoUInt32Array,t.GetAttributeUInt32ForAllPoints(r,n,u),d[o]=new Uint32Array(E),c=THREE.Uint32BufferAttribute;break;default:var s="THREE.DRACOLoader: Unexpected attribute type.";throw console.error(s),new Error(s)}for(var f=0;f0&&console.log("Number of faces loaded: "+l.toString())):l=0;var A=a.num_points(),E=a.num_attributes();this.verbosity>0&&(console.log("Number of points loaded: "+A.toString()),console.log("Number of attributes loaded: "+E.toString()));var f=t.GetAttributeId(a,e.POSITION);if(-1==f){var u="THREE.DRACOLoader: No position attribute found.";throw console.error(u),e.destroy(t),e.destroy(a),new Error(u)}var R=t.GetAttribute(a,f),y={},b=new THREE.BufferGeometry;if(i)for(var D in i){var T=n[D],m=i[D],p=t.GetAttributeByUniqueId(a,m);this.addAttributeToGeometry(e,t,a,D,T,p,b,y)}else for(var D in this.nativeAttributeMap){var h=t.GetAttributeId(a,e[this.nativeAttributeMap[D]]);if(-1!==h){this.verbosity>0&&console.log("Loaded "+D+" attribute.");var p=t.GetAttribute(a,h);this.addAttributeToGeometry(e,t,a,D,Float32Array,p,b,y)}}if(r==e.TRIANGULAR_MESH)if(this.drawMode===THREE.TriangleStripDrawMode){var w=new e.DracoInt32Array;t.GetTriangleStripsFromMesh(a,w);y.indices=new Uint32Array(w.size());for(var v=0;v65535?THREE.Uint32BufferAttribute:THREE.Uint16BufferAttribute)(y.indices,1));var I=new e.AttributeQuantizationTransform;if(I.InitFromAttribute(R)){b.attributes.position.isQuantized=!0,b.attributes.position.maxRange=I.range(),b.attributes.position.numQuantizationBits=I.quantization_bits(),b.attributes.position.minValues=new Float32Array(3);for(var v=0;v<3;++v)b.attributes.position.minValues[v]=I.min_value(v)}return e.destroy(I),e.destroy(t),e.destroy(a),this.decode_time=c-s,this.import_time=performance.now()-c,this.verbosity>0&&(console.log("Decode time: "+this.decode_time),console.log("Import time: "+this.import_time)),b},isVersionSupported:function(e,t){THREE.DRACOLoader.getDecoderModule().then(function(r){t(r.decoder.isVersionSupported(e))})},getAttributeOptions:function(e){return void 0===this.attributeOptions[e]&&(this.attributeOptions[e]={}),this.attributeOptions[e]}},THREE.DRACOLoader.decoderPath="./",THREE.DRACOLoader.decoderConfig={},THREE.DRACOLoader.decoderModulePromise=null,THREE.DRACOLoader.setDecoderPath=function(e){THREE.DRACOLoader.decoderPath=e},THREE.DRACOLoader.setDecoderConfig=function(e){var t=THREE.DRACOLoader.decoderConfig.wasmBinary;THREE.DRACOLoader.decoderConfig=e||{},THREE.DRACOLoader.releaseDecoderModule(),t&&(THREE.DRACOLoader.decoderConfig.wasmBinary=t)},THREE.DRACOLoader.releaseDecoderModule=function(){THREE.DRACOLoader.decoderModulePromise=null},THREE.DRACOLoader.getDecoderModule=function(){var e=this,t=THREE.DRACOLoader.decoderPath,r=THREE.DRACOLoader.decoderConfig,o=THREE.DRACOLoader.decoderModulePromise;return o||("undefined"!=typeof DracoDecoderModule?o=Promise.resolve():"object"!=typeof WebAssembly||"js"===r.type?o=THREE.DRACOLoader._loadScript(t+"draco_decoder.js"):(r.wasmBinaryFile=t+"draco_decoder.wasm",o=THREE.DRACOLoader._loadScript(t+"draco_wasm_wrapper.js").then(function(){return THREE.DRACOLoader._loadArrayBuffer(r.wasmBinaryFile)}).then(function(e){r.wasmBinary=e})),o=o.then(function(){return new Promise(function(t){r.onModuleLoaded=function(r){e.timeLoaded=performance.now(),t({decoder:r})},DracoDecoderModule(r)})}),THREE.DRACOLoader.decoderModulePromise=o,o)},THREE.DRACOLoader._loadScript=function(e){var t=document.getElementById("decoder_script");null!==t&&t.parentNode.removeChild(t);var r=document.getElementsByTagName("head")[0],o=document.createElement("script");return o.id="decoder_script",o.type="text/javascript",o.src=e,new Promise(function(e){o.onload=e,r.appendChild(o)})},THREE.DRACOLoader._loadArrayBuffer=function(e){var t=new THREE.FileLoader;return t.setResponseType("arraybuffer"),new Promise(function(r,o){t.load(e,r,void 0,o)})}; },{}],38:[function(_dereq_,module,exports){ -THREE.MTLLoader=function(t){THREE.Loader.call(this,t)},THREE.MTLLoader.prototype=Object.assign(Object.create(THREE.Loader.prototype),{constructor:THREE.MTLLoader,load:function(t,a,e,r){var s=this,i=""===this.path?THREE.LoaderUtils.extractUrlBase(t):this.path,o=new THREE.FileLoader(this.manager);o.setPath(this.path),o.setRequestHeader(this.requestHeader),o.setWithCredentials(this.withCredentials),o.load(t,function(e){try{a(s.parse(e,i))}catch(a){r?r(a):console.error(a),s.manager.itemError(t)}},e,r)},setMaterialOptions:function(t){return this.materialOptions=t,this},parse:function(t,a){for(var e=t.split("\n"),r={},s=/\s+/,i={},o=0;o=0?n.substring(0,p):n;l=l.toLowerCase();var h=p>=0?n.substring(p+1):"";if(h=h.trim(),"newmtl"===l)r={name:h},i[h]=r;else if("ka"===l||"kd"===l||"ks"===l||"ke"===l){var c=h.split(s,3);r[l]=[parseFloat(c[0]),parseFloat(c[1]),parseFloat(c[2])]}else r[l]=h}}var u=new THREE.MTLLoader.MaterialCreator(this.resourcePath||a,this.materialOptions);return u.setCrossOrigin(this.crossOrigin),u.setManager(this.manager),u.setMaterials(i),u}}),THREE.MTLLoader.MaterialCreator=function(t,a){this.baseUrl=t||"",this.options=a,this.materialsInfo={},this.materials={},this.materialsArray=[],this.nameLookup={},this.side=this.options&&this.options.side?this.options.side:THREE.FrontSide,this.wrap=this.options&&this.options.wrap?this.options.wrap:THREE.RepeatWrapping},THREE.MTLLoader.MaterialCreator.prototype={constructor:THREE.MTLLoader.MaterialCreator,crossOrigin:"anonymous",setCrossOrigin:function(t){return this.crossOrigin=t,this},setManager:function(t){this.manager=t},setMaterials:function(t){this.materialsInfo=this.convert(t),this.materials={},this.materialsArray=[],this.nameLookup={}},convert:function(t){if(!this.options)return t;var a={};for(var e in t){var r=t[e],s={};a[e]=s;for(var i in r){var o=!0,n=r[i],p=i.toLowerCase();switch(p){case"kd":case"ka":case"ks":this.options&&this.options.normalizeRGB&&(n=[n[0]/255,n[1]/255,n[2]/255]),this.options&&this.options.ignoreZeroRGBs&&0===n[0]&&0===n[1]&&0===n[2]&&(o=!1)}o&&(s[p]=n)}}return a},preload:function(){for(var t in this.materialsInfo)this.create(t)},getIndex:function(t){return this.nameLookup[t]},getAsArray:function(){var t=0;for(var a in this.materialsInfo)this.materialsArray[t]=this.create(a),this.nameLookup[a]=t,t++;return this.materialsArray},create:function(t){return void 0===this.materials[t]&&this.createMaterial_(t),this.materials[t]},createMaterial_:function(t){function a(t,a){return"string"!=typeof a||""===a?"":/^https?:\/\//i.test(a)?a:t+a}function e(t,e){if(!i[t]){var s=r.getTextureParams(e,i),o=r.loadTexture(a(r.baseUrl,s.url));o.repeat.copy(s.scale),o.offset.copy(s.offset),o.wrapS=r.wrap,o.wrapT=r.wrap,i[t]=o}}var r=this,s=this.materialsInfo[t],i={name:t,side:this.side};for(var o in s){var n,p=s[o];if(""!==p)switch(o.toLowerCase()){case"kd":i.color=(new THREE.Color).fromArray(p);break;case"ks":i.specular=(new THREE.Color).fromArray(p);break;case"ke":i.emissive=(new THREE.Color).fromArray(p);break;case"map_kd":e("map",p);break;case"map_ks":e("specularMap",p);break;case"map_ke":e("emissiveMap",p);break;case"norm":e("normalMap",p);break;case"map_bump":case"bump":e("bumpMap",p);break;case"map_d":e("alphaMap",p),i.transparent=!0;break;case"ns":i.shininess=parseFloat(p);break;case"d":n=parseFloat(p),n<1&&(i.opacity=n,i.transparent=!0);break;case"tr":n=parseFloat(p),this.options&&this.options.invertTrProperty&&(n=1-n),n>0&&(i.opacity=1-n,i.transparent=!0)}}return this.materials[t]=new THREE.MeshPhongMaterial(i),this.materials[t]},getTextureParams:function(t,a){var e,r={scale:new THREE.Vector2(1,1),offset:new THREE.Vector2(0,0)},s=t.split(/\s+/);return e=s.indexOf("-bm"),e>=0&&(a.bumpScale=parseFloat(s[e+1]),s.splice(e,2)),e=s.indexOf("-s"),e>=0&&(r.scale.set(parseFloat(s[e+1]),parseFloat(s[e+2])),s.splice(e,4)),e=s.indexOf("-o"),e>=0&&(r.offset.set(parseFloat(s[e+1]),parseFloat(s[e+2])),s.splice(e,4)),r.url=s.join(" ").trim(),r},loadTexture:function(t,a,e,r,s){var i,o=void 0!==this.manager?this.manager:THREE.DefaultLoadingManager,n=o.getHandler(t);return null===n&&(n=new THREE.TextureLoader(o)),n.setCrossOrigin&&n.setCrossOrigin(this.crossOrigin),i=n.load(t,e,r,s),void 0!==a&&(i.mapping=a),i}}; +THREE.GLTFLoader=function(){function e(e){this.manager=void 0!==e?e:THREE.DefaultLoadingManager,this.dracoLoader=null}function t(){var e={};return{get:function(t){return e[t]},add:function(t,r){e[t]=r},remove:function(t){delete e[t]},removeAll:function(){e={}}}}function r(){if(!THREE.DDSLoader)throw new Error("THREE.GLTFLoader: Attempting to load .dds texture without importing THREE.DDSLoader");this.name=M.MSFT_TEXTURE_DDS,this.ddsLoader=new THREE.DDSLoader}function a(e){this.name=M.KHR_LIGHTS_PUNCTUAL;var t=e.extensions&&e.extensions[M.KHR_LIGHTS_PUNCTUAL]||{};this.lightDefs=t.lights||[]}function n(e){this.name=M.KHR_MATERIALS_UNLIT}function s(e){this.name=M.KHR_BINARY_GLTF,this.content=null,this.body=null;var t=new DataView(e,0,L);if(this.header={magic:THREE.LoaderUtils.decodeText(new Uint8Array(e.slice(0,4))),version:t.getUint32(4,!0),length:t.getUint32(8,!0)},this.header.magic!==S)throw new Error("THREE.GLTFLoader: Unsupported glTF-Binary header.");if(this.header.version<2)throw new Error("THREE.GLTFLoader: Legacy binary file detected. Use LegacyGLTFLoader instead.");for(var r=new DataView(e,L),a=0;a",i).replace("#include ",o).replace("#include ",l).replace("#include ",p).replace("#include ",u);delete s.roughness,delete s.metalness,delete s.roughnessMap,delete s.metalnessMap,s.specular={value:(new THREE.Color).setHex(1118481)},s.glossiness={value:.5},s.specularMap={value:null},s.glossinessMap={value:null},e.vertexShader=n.vertexShader,e.fragmentShader=c,e.uniforms=s,e.defines={STANDARD:""},e.color=new THREE.Color(1,1,1),e.opacity=1;var d=[];if(Array.isArray(a.diffuseFactor)){var h=a.diffuseFactor;e.color.fromArray(h),e.opacity=h[3]}if(void 0!==a.diffuseTexture&&d.push(r.assignTexture(e,"map",a.diffuseTexture)),e.emissive=new THREE.Color(0,0,0),e.glossiness=void 0!==a.glossinessFactor?a.glossinessFactor:1,e.specular=new THREE.Color(1,1,1),Array.isArray(a.specularFactor)&&e.specular.fromArray(a.specularFactor),void 0!==a.specularGlossinessTexture){var E=a.specularGlossinessTexture;d.push(r.assignTexture(e,"glossinessMap",E)),d.push(r.assignTexture(e,"specularMap",E))}return Promise.all(d)},createMaterial:function(e){var t=new THREE.ShaderMaterial({defines:e.defines,vertexShader:e.vertexShader,fragmentShader:e.fragmentShader,uniforms:e.uniforms,fog:!0,lights:!0,opacity:e.opacity,transparent:e.transparent});return t.isGLTFSpecularGlossinessMaterial=!0,t.color=e.color,t.map=void 0===e.map?null:e.map,t.lightMap=null,t.lightMapIntensity=1,t.aoMap=void 0===e.aoMap?null:e.aoMap,t.aoMapIntensity=1,t.emissive=e.emissive,t.emissiveIntensity=1,t.emissiveMap=void 0===e.emissiveMap?null:e.emissiveMap,t.bumpMap=void 0===e.bumpMap?null:e.bumpMap,t.bumpScale=1,t.normalMap=void 0===e.normalMap?null:e.normalMap,e.normalScale&&(t.normalScale=e.normalScale),t.displacementMap=null,t.displacementScale=1,t.displacementBias=0,t.specularMap=void 0===e.specularMap?null:e.specularMap,t.specular=e.specular,t.glossinessMap=void 0===e.glossinessMap?null:e.glossinessMap,t.glossiness=e.glossiness,t.alphaMap=null,t.envMap=void 0===e.envMap?null:e.envMap,t.envMapIntensity=1,t.refractionRatio=.98,t.extensions.derivatives=!0,t},cloneMaterial:function(e){var t=e.clone();t.isGLTFSpecularGlossinessMaterial=!0;for(var r=this.specularGlossinessParams,a=0,n=r.length;a=2&&(a[s++]=e.getY(n)),r>=3&&(a[s++]=e.getZ(n)),r>=4&&(a[s++]=e.getW(n));return new THREE.BufferAttribute(a,r,e.normalized)}return e.clone()}function R(e,r,a){this.json=e||{},this.extensions=r||{},this.options=a||{},this.cache=new t,this.primitiveCache={},this.textureLoader=new THREE.TextureLoader(this.options.manager),this.textureLoader.setCrossOrigin(this.options.crossOrigin),this.fileLoader=new THREE.FileLoader(this.options.manager),this.fileLoader.setResponseType("arraybuffer")}function g(e,t,r){var a=t.attributes,n=[];for(var s in a){var i=I[s]||s.toLowerCase();i in e.attributes||n.push(function(t,a){return r.getDependency("accessor",t).then(function(t){e.addAttribute(a,t)})}(a[s],i))}if(void 0!==t.indices&&!e.index){var o=r.getDependency("accessor",t.indices).then(function(t){e.setIndex(t)});n.push(o)}return h(e,t),Promise.all(n).then(function(){return void 0!==t.targets?E(e,t.targets,r):e})}e.prototype={constructor:e,crossOrigin:"anonymous",load:function(e,t,r,a){var n,s=this;n=void 0!==this.resourcePath?this.resourcePath:void 0!==this.path?this.path:THREE.LoaderUtils.extractUrlBase(e),s.manager.itemStart(e);var i=function(t){a?a(t):console.error(t),s.manager.itemError(e),s.manager.itemEnd(e)},o=new THREE.FileLoader(s.manager);o.setPath(this.path),o.setResponseType("arraybuffer"),o.load(e,function(r){try{s.parse(r,n,function(r){t(r),s.manager.itemEnd(e)},i)}catch(e){i(e)}},r,i)},setCrossOrigin:function(e){return this.crossOrigin=e,this},setPath:function(e){return this.path=e,this},setResourcePath:function(e){return this.resourcePath=e,this},setDRACOLoader:function(e){return this.dracoLoader=e,this},parse:function(e,t,p,u){var c,d={};if("string"==typeof e)c=e;else{if(THREE.LoaderUtils.decodeText(new Uint8Array(e,0,4))===S){try{d[M.KHR_BINARY_GLTF]=new s(e)}catch(e){return void(u&&u(e))}c=d[M.KHR_BINARY_GLTF].content}else c=THREE.LoaderUtils.decodeText(new Uint8Array(e))}var h=JSON.parse(c);if(void 0===h.asset||h.asset.version[0]<2)return void(u&&u(new Error("THREE.GLTFLoader: Unsupported asset. glTF versions >=2.0 are supported. Use LegacyGLTFLoader instead.")));if(h.extensionsUsed)for(var E=0;E=0&&console.warn('THREE.GLTFLoader: Unknown extension "'+f+'".')}}new R(h,d,{path:t||this.resourcePath||"",crossOrigin:this.crossOrigin,manager:this.manager}).parse(p,u)}};var M={KHR_BINARY_GLTF:"KHR_binary_glTF",KHR_DRACO_MESH_COMPRESSION:"KHR_draco_mesh_compression",KHR_LIGHTS_PUNCTUAL:"KHR_lights_punctual",KHR_MATERIALS_PBR_SPECULAR_GLOSSINESS:"KHR_materials_pbrSpecularGlossiness",KHR_MATERIALS_UNLIT:"KHR_materials_unlit",KHR_TEXTURE_TRANSFORM:"KHR_texture_transform",MSFT_TEXTURE_DDS:"MSFT_texture_dds"};a.prototype.loadLight=function(e){var t,r=this.lightDefs[e],a=new THREE.Color(16777215);void 0!==r.color&&a.fromArray(r.color);var n=void 0!==r.range?r.range:0;switch(r.type){case"directional":t=new THREE.DirectionalLight(a),t.target.position.set(0,0,-1),t.add(t.target);break;case"point":t=new THREE.PointLight(a),t.distance=n;break;case"spot":t=new THREE.SpotLight(a),t.distance=n,r.spot=r.spot||{},r.spot.innerConeAngle=void 0!==r.spot.innerConeAngle?r.spot.innerConeAngle:0,r.spot.outerConeAngle=void 0!==r.spot.outerConeAngle?r.spot.outerConeAngle:Math.PI/4,t.angle=r.spot.outerConeAngle,t.penumbra=1-r.spot.innerConeAngle/r.spot.outerConeAngle,t.target.position.set(0,0,-1),t.add(t.target);break;default:throw new Error('THREE.GLTFLoader: Unexpected light type, "'+r.type+'".')}return t.position.set(0,0,0),t.decay=2,void 0!==r.intensity&&(t.intensity=r.intensity),t.name=r.name||"light_"+e,Promise.resolve(t)},n.prototype.getMaterialType=function(e){return THREE.MeshBasicMaterial},n.prototype.extendParams=function(e,t,r){var a=[];e.color=new THREE.Color(1,1,1),e.opacity=1;var n=t.pbrMetallicRoughness;if(n){if(Array.isArray(n.baseColorFactor)){var s=n.baseColorFactor;e.color.fromArray(s),e.opacity=s[3]}void 0!==n.baseColorTexture&&a.push(r.assignTexture(e,"map",n.baseColorTexture))}return Promise.all(a)};var S="glTF",L=12,y={JSON:1313821514,BIN:5130562};i.prototype.decodePrimitive=function(e,t){var r=this.json,a=this.dracoLoader,n=e.extensions[this.name].bufferView,s=e.extensions[this.name].attributes,i={},o={},l={};for(var p in s){var u=I[p]||p.toLowerCase();i[u]=s[p]}for(p in e.attributes){var u=I[p]||p.toLowerCase();if(void 0!==s[p]){var c=r.accessors[e.attributes[p]],d=_[c.componentType];l[u]=d,o[u]=!0===c.normalized}}return t.getDependency("bufferView",n).then(function(e){return new Promise(function(t){a.decodeDracoFile(e,function(e){for(var r in e.attributes){var a=e.attributes[r],n=o[r];void 0!==n&&(a.normalized=n)}t(e)},i,l)})})},o.prototype.extendTexture=function(e,t){return e=e.clone(),void 0!==t.offset&&e.offset.fromArray(t.offset),void 0!==t.rotation&&(e.rotation=t.rotation),void 0!==t.scale&&e.repeat.fromArray(t.scale),void 0!==t.texCoord&&console.warn('THREE.GLTFLoader: Custom UV sets in "'+this.name+'" extension not yet supported.'),e.needsUpdate=!0,e},p.prototype=Object.create(THREE.Interpolant.prototype),p.prototype.constructor=p,p.prototype.copySampleValue_=function(e){for(var t=this.resultBuffer,r=this.sampleValues,a=this.valueSize,n=e*a*3+a,s=0;s!==a;s++)t[s]=r[n+s];return t},p.prototype.beforeStart_=p.prototype.copySampleValue_,p.prototype.afterEnd_=p.prototype.copySampleValue_,p.prototype.interpolate_=function(e,t,r,a){for(var n=this.resultBuffer,s=this.sampleValues,i=this.valueSize,o=2*i,l=3*i,p=a-t,u=(r-t)/p,c=u*u,d=c*u,h=e*l,E=h-l,f=-2*d+3*c,m=d-c,v=1-f,T=m-c+u,R=0;R!==i;R++){var g=s[E+R+i],M=s[E+R+o]*p,S=s[h+R+i],L=s[h+R]*p;n[R]=v*g+T*M+f*S+m*L}return n};var H,A={FLOAT:5126,FLOAT_MAT3:35675,FLOAT_MAT4:35676,FLOAT_VEC2:35664,FLOAT_VEC3:35665,FLOAT_VEC4:35666,LINEAR:9729,REPEAT:10497,SAMPLER_2D:35678,POINTS:0,LINES:1,LINE_LOOP:2,LINE_STRIP:3,TRIANGLES:4,TRIANGLE_STRIP:5,TRIANGLE_FAN:6,UNSIGNED_BYTE:5121,UNSIGNED_SHORT:5123},_=(Number,THREE.Matrix3,THREE.Matrix4,THREE.Vector2,THREE.Vector3,THREE.Vector4,THREE.Texture,{5120:Int8Array,5121:Uint8Array,5122:Int16Array,5123:Uint16Array,5125:Uint32Array,5126:Float32Array}),x={9728:THREE.NearestFilter,9729:THREE.LinearFilter,9984:THREE.NearestMipMapNearestFilter,9985:THREE.LinearMipMapNearestFilter,9986:THREE.NearestMipMapLinearFilter,9987:THREE.LinearMipMapLinearFilter},w={33071:THREE.ClampToEdgeWrapping,33648:THREE.MirroredRepeatWrapping,10497:THREE.RepeatWrapping},b=(THREE.BackSide,THREE.FrontSide,THREE.NeverDepth,THREE.LessDepth,THREE.EqualDepth,THREE.LessEqualDepth,THREE.GreaterEqualDepth,THREE.NotEqualDepth,THREE.GreaterEqualDepth,THREE.AlwaysDepth,THREE.AddEquation,THREE.SubtractEquation,THREE.ReverseSubtractEquation,THREE.ZeroFactor,THREE.OneFactor,THREE.SrcColorFactor,THREE.OneMinusSrcColorFactor,THREE.SrcAlphaFactor,THREE.OneMinusSrcAlphaFactor,THREE.DstAlphaFactor,THREE.OneMinusDstAlphaFactor,THREE.DstColorFactor,THREE.OneMinusDstColorFactor,THREE.SrcAlphaSaturateFactor,{SCALAR:1,VEC2:2,VEC3:3,VEC4:4,MAT2:4,MAT3:9,MAT4:16}),I={POSITION:"position",NORMAL:"normal",TANGENT:"tangent",TEXCOORD_0:"uv",TEXCOORD_1:"uv2",COLOR_0:"color",WEIGHTS_0:"skinWeight",JOINTS_0:"skinIndex"},F={scale:"scale",translation:"position",rotation:"quaternion",weights:"morphTargetInfluences"},P={CUBICSPLINE:void 0,LINEAR:THREE.InterpolateLinear,STEP:THREE.InterpolateDiscrete},N={OPAQUE:"OPAQUE",MASK:"MASK",BLEND:"BLEND"},O={"image/png":THREE.RGBAFormat,"image/jpeg":THREE.RGBFormat};return R.prototype.parse=function(e,t){var r=this,a=this.json,n=this.extensions;this.cache.removeAll(),this.markDefs(),Promise.all([this.getDependencies("scene"),this.getDependencies("animation"),this.getDependencies("camera")]).then(function(t){var s={scene:t[0][a.scene||0],scenes:t[0],animations:t[1],cameras:t[2],asset:a.asset,parser:r,userData:{}};d(n,s,a),e(s)}).catch(t)},R.prototype.markDefs=function(){for(var e=this.json.nodes||[],t=this.json.skins||[],r=this.json.meshes||[],a={},n={},s=0,i=t.length;s=2&&s.setY(y,M[S*o+1]),o>=3&&s.setZ(y,M[S*o+2]),o>=4&&s.setW(y,M[S*o+3]),o>=5)throw new Error("THREE.GLTFLoader: Unsupported itemSize in sparse BufferAttribute.")}}return s})},R.prototype.loadTexture=function(e){var t,r=this,a=this.json,n=this.options,s=this.textureLoader,i=window.URL||window.webkitURL,o=a.textures[e],l=o.extensions||{};t=l[M.MSFT_TEXTURE_DDS]?a.images[l[M.MSFT_TEXTURE_DDS].source]:a.images[o.source];var p=t.uri,c=!1;return void 0!==t.bufferView&&(p=r.getDependency("bufferView",t.bufferView).then(function(e){c=!0;var r=new Blob([e],{type:t.mimeType});return p=i.createObjectURL(r)})),Promise.resolve(p).then(function(e){var t=THREE.Loader.Handlers.get(e);return t||(t=l[M.MSFT_TEXTURE_DDS]?r.extensions[M.MSFT_TEXTURE_DDS].ddsLoader:s),new Promise(function(r,a){t.load(u(e,n.path),r,void 0,a)})}).then(function(e){!0===c&&i.revokeObjectURL(p),e.flipY=!1,void 0!==o.name&&(e.name=o.name),t.mimeType in O&&(e.format=O[t.mimeType]);var r=a.samplers||{},n=r[o.sampler]||{};return e.magFilter=x[n.magFilter]||THREE.LinearFilter,e.minFilter=x[n.minFilter]||THREE.LinearMipMapLinearFilter,e.wrapS=w[n.wrapS]||THREE.RepeatWrapping,e.wrapT=w[n.wrapT]||THREE.RepeatWrapping,e})},R.prototype.assignTexture=function(e,t,r){var a=this;return this.getDependency("texture",r.index).then(function(n){switch(t){case"aoMap":case"emissiveMap":case"metalnessMap":case"normalMap":case"roughnessMap":n.format=THREE.RGBFormat}if(a.extensions[M.KHR_TEXTURE_TRANSFORM]){var s=void 0!==r.extensions?r.extensions[M.KHR_TEXTURE_TRANSFORM]:void 0;s&&(n=a.extensions[M.KHR_TEXTURE_TRANSFORM].extendTexture(n,s))}e[t]=n})},R.prototype.assignFinalMaterial=function(e){var t=e.geometry,r=e.material,a=this.extensions,n=void 0!==t.attributes.tangent,s=void 0!==t.attributes.color,i=void 0===t.attributes.normal,o=!0===e.isSkinnedMesh,l=Object.keys(t.morphAttributes).length>0,p=l&&void 0!==t.morphAttributes.normal;if(e.isPoints){var u="PointsMaterial:"+r.uuid,c=this.cache.get(u);c||(c=new THREE.PointsMaterial,THREE.Material.prototype.copy.call(c,r),c.color.copy(r.color),c.map=r.map,c.lights=!1,this.cache.add(u,c)),r=c}else if(e.isLine){var u="LineBasicMaterial:"+r.uuid,d=this.cache.get(u);d||(d=new THREE.LineBasicMaterial,THREE.Material.prototype.copy.call(d,r),d.color.copy(r.color),d.lights=!1,this.cache.add(u,d)),r=d}if(n||s||i||o||l){var u="ClonedMaterial:"+r.uuid+":";r.isGLTFSpecularGlossinessMaterial&&(u+="specular-glossiness:"),o&&(u+="skinning:"),n&&(u+="vertex-tangents:"),s&&(u+="vertex-colors:"),i&&(u+="flat-shading:"),l&&(u+="morph-targets:"),p&&(u+="morph-normals:");var h=this.cache.get(u);h||(h=r.isGLTFSpecularGlossinessMaterial?a[M.KHR_MATERIALS_PBR_SPECULAR_GLOSSINESS].cloneMaterial(r):r.clone(),o&&(h.skinning=!0),n&&(h.vertexTangents=!0),s&&(h.vertexColors=THREE.VertexColors),i&&(h.flatShading=!0),l&&(h.morphTargets=!0),p&&(h.morphNormals=!0),this.cache.add(u,h)),r=h}r.aoMap&&void 0===t.attributes.uv2&&void 0!==t.attributes.uv&&(console.log("THREE.GLTFLoader: Duplicating UVs to support aoMap."),t.addAttribute("uv2",new THREE.BufferAttribute(t.attributes.uv.array,2))),r.isGLTFSpecularGlossinessMaterial&&(e.onBeforeRender=a[M.KHR_MATERIALS_PBR_SPECULAR_GLOSSINESS].refreshUniforms),e.material=r},R.prototype.loadMaterial=function(e){var t,r=this,a=this.json,n=this.extensions,s=a.materials[e],i={},o=s.extensions||{},l=[];if(o[M.KHR_MATERIALS_PBR_SPECULAR_GLOSSINESS]){var p=n[M.KHR_MATERIALS_PBR_SPECULAR_GLOSSINESS];t=p.getMaterialType(s),l.push(p.extendParams(i,s,r))}else if(o[M.KHR_MATERIALS_UNLIT]){var u=n[M.KHR_MATERIALS_UNLIT];t=u.getMaterialType(s),l.push(u.extendParams(i,s,r))}else{t=THREE.MeshStandardMaterial;var c=s.pbrMetallicRoughness||{};if(i.color=new THREE.Color(1,1,1),i.opacity=1,Array.isArray(c.baseColorFactor)){var E=c.baseColorFactor;i.color.fromArray(E),i.opacity=E[3]}void 0!==c.baseColorTexture&&l.push(r.assignTexture(i,"map",c.baseColorTexture)),i.metalness=void 0!==c.metallicFactor?c.metallicFactor:1,i.roughness=void 0!==c.roughnessFactor?c.roughnessFactor:1,void 0!==c.metallicRoughnessTexture&&(l.push(r.assignTexture(i,"metalnessMap",c.metallicRoughnessTexture)),l.push(r.assignTexture(i,"roughnessMap",c.metallicRoughnessTexture)))}!0===s.doubleSided&&(i.side=THREE.DoubleSide);var f=s.alphaMode||N.OPAQUE;return f===N.BLEND?i.transparent=!0:(i.transparent=!1,f===N.MASK&&(i.alphaTest=void 0!==s.alphaCutoff?s.alphaCutoff:.5)),void 0!==s.normalTexture&&t!==THREE.MeshBasicMaterial&&(l.push(r.assignTexture(i,"normalMap",s.normalTexture)),i.normalScale=new THREE.Vector2(1,1),void 0!==s.normalTexture.scale&&i.normalScale.set(s.normalTexture.scale,s.normalTexture.scale)),void 0!==s.occlusionTexture&&t!==THREE.MeshBasicMaterial&&(l.push(r.assignTexture(i,"aoMap",s.occlusionTexture)),void 0!==s.occlusionTexture.strength&&(i.aoMapIntensity=s.occlusionTexture.strength)),void 0!==s.emissiveFactor&&t!==THREE.MeshBasicMaterial&&(i.emissive=(new THREE.Color).fromArray(s.emissiveFactor)),void 0!==s.emissiveTexture&&t!==THREE.MeshBasicMaterial&&l.push(r.assignTexture(i,"emissiveMap",s.emissiveTexture)),Promise.all(l).then(function(){var e;return e=t===THREE.ShaderMaterial?n[M.KHR_MATERIALS_PBR_SPECULAR_GLOSSINESS].createMaterial(i):new t(i),void 0!==s.name&&(e.name=s.name),e.map&&(e.map.encoding=THREE.sRGBEncoding),e.emissiveMap&&(e.emissiveMap.encoding=THREE.sRGBEncoding),e.specularMap&&(e.specularMap.encoding=THREE.sRGBEncoding),h(e,s),s.extensions&&d(n,e,s),e})},R.prototype.loadGeometries=function(e){for(var t=this,r=this.extensions,a=this.primitiveCache,n=[],s=0,i=e.length;s0&&f(p,a),p.name=a.name||"mesh_"+e,s.length>1&&(p.name+="_"+o),h(p,a),t.assignFinalMaterial(p),i.push(p)}if(1===i.length)return i[0];for(var E=new THREE.Group,o=0,l=i.length;o1){var r=s[i.mesh]++;t=e.clone(),t.name+="_instance_"+r,t.onBeforeRender=e.onBeforeRender;for(var a=0,o=t.children.length;a0?t[t.length-1]:"",smooth:void 0!==r?r.smooth:this.smooth,groupStart:void 0!==r?r.groupEnd:0,groupEnd:-1,groupCount:-1,inherited:!1,clone:function(e){var t={index:"number"==typeof e?e:this.index,name:this.name,mtllib:this.mtllib,smooth:this.smooth,groupStart:0,groupEnd:-1,groupCount:-1,inherited:!1};return t.clone=this.clone.bind(t),t}};return this.materials.push(i),i},currentMaterial:function(){if(this.materials.length>0)return this.materials[this.materials.length-1]},_finalize:function(e){var t=this.currentMaterial();if(t&&-1===t.groupEnd&&(t.groupEnd=this.geometry.vertices.length/3,t.groupCount=t.groupEnd-t.groupStart,t.inherited=!1),e&&this.materials.length>1)for(var r=this.materials.length-1;r>=0;r--)this.materials[r].groupCount<=0&&this.materials.splice(r,1);return e&&0===this.materials.length&&this.materials.push({name:"",smooth:this.smooth}),t}},r&&r.name&&"function"==typeof r.clone){var i=r.clone(0);i.inherited=!0,this.object.materials.push(i)}this.objects.push(this.object)},finalize:function(){this.object&&"function"==typeof this.object._finalize&&this.object._finalize(!0)},parseVertexIndex:function(e,t){var r=parseInt(e,10);return 3*(r>=0?r-1:r+t/3)},parseNormalIndex:function(e,t){var r=parseInt(e,10);return 3*(r>=0?r-1:r+t/3)},parseUVIndex:function(e,t){var r=parseInt(e,10);return 2*(r>=0?r-1:r+t/2)},addVertex:function(e,t,r){var i=this.vertices,s=this.object.geometry.vertices;s.push(i[e+0],i[e+1],i[e+2]),s.push(i[t+0],i[t+1],i[t+2]),s.push(i[r+0],i[r+1],i[r+2])},addVertexPoint:function(e){var t=this.vertices;this.object.geometry.vertices.push(t[e+0],t[e+1],t[e+2])},addVertexLine:function(e){var t=this.vertices;this.object.geometry.vertices.push(t[e+0],t[e+1],t[e+2])},addNormal:function(e,t,r){var i=this.normals,s=this.object.geometry.normals;s.push(i[e+0],i[e+1],i[e+2]),s.push(i[t+0],i[t+1],i[t+2]),s.push(i[r+0],i[r+1],i[r+2])},addFaceNormal:function(e,t,r){var i=this.vertices,s=this.object.geometry.normals;o.fromArray(i,e),n.fromArray(i,t),l.fromArray(i,r),c.subVectors(l,n),h.subVectors(o,n),c.cross(h),c.normalize(),s.push(c.x,c.y,c.z),s.push(c.x,c.y,c.z),s.push(c.x,c.y,c.z)},addColor:function(e,t,r){var i=this.colors,s=this.object.geometry.colors;void 0!==i[e]&&s.push(i[e+0],i[e+1],i[e+2]),void 0!==i[t]&&s.push(i[t+0],i[t+1],i[t+2]),void 0!==i[r]&&s.push(i[r+0],i[r+1],i[r+2])},addUV:function(e,t,r){var i=this.uvs,s=this.object.geometry.uvs;s.push(i[e+0],i[e+1]),s.push(i[t+0],i[t+1]),s.push(i[r+0],i[r+1])},addDefaultUV:function(){var e=this.object.geometry.uvs;e.push(0,0),e.push(0,0),e.push(0,0)},addUVLine:function(e){var t=this.uvs;this.object.geometry.uvs.push(t[e+0],t[e+1])},addFace:function(e,t,r,i,s,a,o,n,l){var h=this.vertices.length,c=this.parseVertexIndex(e,h),u=this.parseVertexIndex(t,h),p=this.parseVertexIndex(r,h);if(this.addVertex(c,u,p),this.addColor(c,u,p),void 0!==o&&""!==o){var m=this.normals.length;c=this.parseNormalIndex(o,m),u=this.parseNormalIndex(n,m),p=this.parseNormalIndex(l,m),this.addNormal(c,u,p)}else this.addFaceNormal(c,u,p);if(void 0!==i&&""!==i){var d=this.uvs.length;c=this.parseUVIndex(i,d),u=this.parseUVIndex(s,d),p=this.parseUVIndex(a,d),this.addUV(c,u,p),this.object.geometry.hasUVIndices=!0}else this.addDefaultUV()},addPointGeometry:function(e){this.object.geometry.type="Points";for(var t=this.vertices.length,r=0,i=e.length;r=7?o.colors.push(parseFloat(d[4]),parseFloat(d[5]),parseFloat(d[6])):o.colors.push(void 0,void 0,void 0);break;case"vn":o.normals.push(parseFloat(d[1]),parseFloat(d[2]),parseFloat(d[3]));break;case"vt":o.uvs.push(parseFloat(d[1]),parseFloat(d[2]))}}else if("f"===h){for(var f=l.substr(1).trim(),v=f.split(/\s+/),g=[],E=0,b=v.length;E0){var j=y.split("/");g.push(j)}}for(var x=g[0],E=1,b=g.length-1;E1){var z=c[1].trim().toLowerCase();o.object.smooth="0"!==z&&"off"!==z}else o.object.smooth=!0;var P=o.object.currentMaterial();P&&(P.smooth=o.object.smooth)}else{if("\0"===l)continue;console.warn('THREE.OBJLoader: Unexpected line: "'+l+'"')}o.finalize();var U=new THREE.Group;if(U.materialLibraries=[].concat(o.materialLibraries),!0==!(1===o.objects.length&&0===o.objects[0].geometry.vertices.length))for(var p=0,m=o.objects.length;p0&&S.setAttribute("normal",new THREE.Float32BufferAttribute(C.normals,3)),C.colors.length>0&&(_=!0,S.setAttribute("color",new THREE.Float32BufferAttribute(C.colors,3))),!0===C.hasUVIndices&&S.setAttribute("uv",new THREE.Float32BufferAttribute(C.uvs,2));for(var D=[],J=0,k=O.length;J1){for(var J=0,k=O.length;J0){var P=new THREE.PointsMaterial({size:1,sizeAttenuation:!1}),S=new THREE.BufferGeometry;S.setAttribute("position",new THREE.Float32BufferAttribute(o.vertices,3)),o.colors.length>0&&(S.setAttribute("color",new THREE.Float32BufferAttribute(o.colors,3)),P.vertexColors=!0);var Y=new THREE.Points(S,P);U.add(Y)}return U}}),t}(); +THREE.MTLLoader=function(t){this.manager=void 0!==t?t:THREE.DefaultLoadingManager},THREE.MTLLoader.prototype={constructor:THREE.MTLLoader,load:function(t,a,e,r){var s=this,i=void 0===this.path?THREE.LoaderUtils.extractUrlBase(t):this.path,o=new THREE.FileLoader(this.manager);o.setPath(this.path),o.load(t,function(t){a(s.parse(t,i))},e,r)},setPath:function(t){return this.path=t,this},setResourcePath:function(t){return this.resourcePath=t,this},setTexturePath:function(t){return console.warn("THREE.MTLLoader: .setTexturePath() has been renamed to .setResourcePath()."),this.setResourcePath(t)},setCrossOrigin:function(t){return this.crossOrigin=t,this},setMaterialOptions:function(t){return this.materialOptions=t,this},parse:function(t,a){for(var e=t.split("\n"),r={},s=/\s+/,i={},o=0;o=0?n.substring(0,h):n;p=p.toLowerCase();var c=h>=0?n.substring(h+1):"";if(c=c.trim(),"newmtl"===p)r={name:c},i[c]=r;else if("ka"===p||"kd"===p||"ks"===p||"ke"===p){var l=c.split(s,3);r[p]=[parseFloat(l[0]),parseFloat(l[1]),parseFloat(l[2])]}else r[p]=c}}var u=new THREE.MTLLoader.MaterialCreator(this.resourcePath||a,this.materialOptions);return u.setCrossOrigin(this.crossOrigin),u.setManager(this.manager),u.setMaterials(i),u}},THREE.MTLLoader.MaterialCreator=function(t,a){this.baseUrl=t||"",this.options=a,this.materialsInfo={},this.materials={},this.materialsArray=[],this.nameLookup={},this.side=this.options&&this.options.side?this.options.side:THREE.FrontSide,this.wrap=this.options&&this.options.wrap?this.options.wrap:THREE.RepeatWrapping},THREE.MTLLoader.MaterialCreator.prototype={constructor:THREE.MTLLoader.MaterialCreator,crossOrigin:"anonymous",setCrossOrigin:function(t){return this.crossOrigin=t,this},setManager:function(t){this.manager=t},setMaterials:function(t){this.materialsInfo=this.convert(t),this.materials={},this.materialsArray=[],this.nameLookup={}},convert:function(t){if(!this.options)return t;var a={};for(var e in t){var r=t[e],s={};a[e]=s;for(var i in r){var o=!0,n=r[i],h=i.toLowerCase();switch(h){case"kd":case"ka":case"ks":this.options&&this.options.normalizeRGB&&(n=[n[0]/255,n[1]/255,n[2]/255]),this.options&&this.options.ignoreZeroRGBs&&0===n[0]&&0===n[1]&&0===n[2]&&(o=!1)}o&&(s[h]=n)}}return a},preload:function(){for(var t in this.materialsInfo)this.create(t)},getIndex:function(t){return this.nameLookup[t]},getAsArray:function(){var t=0;for(var a in this.materialsInfo)this.materialsArray[t]=this.create(a),this.nameLookup[a]=t,t++;return this.materialsArray},create:function(t){return void 0===this.materials[t]&&this.createMaterial_(t),this.materials[t]},createMaterial_:function(t){function a(t,a){return"string"!=typeof a||""===a?"":/^https?:\/\//i.test(a)?a:t+a}function e(t,e){if(!i[t]){var s=r.getTextureParams(e,i),o=r.loadTexture(a(r.baseUrl,s.url));o.repeat.copy(s.scale),o.offset.copy(s.offset),o.wrapS=r.wrap,o.wrapT=r.wrap,i[t]=o}}var r=this,s=this.materialsInfo[t],i={name:t,side:this.side};for(var o in s){var n,h=s[o];if(""!==h)switch(o.toLowerCase()){case"kd":i.color=(new THREE.Color).fromArray(h);break;case"ks":i.specular=(new THREE.Color).fromArray(h);break;case"ke":i.emissive=(new THREE.Color).fromArray(h);break;case"map_kd":e("map",h);break;case"map_ks":e("specularMap",h);break;case"map_ke":e("emissiveMap",h);break;case"norm":e("normalMap",h);break;case"map_bump":case"bump":e("bumpMap",h);break;case"map_d":e("alphaMap",h),i.transparent=!0;break;case"ns":i.shininess=parseFloat(h);break;case"d":n=parseFloat(h),n<1&&(i.opacity=n,i.transparent=!0);break;case"tr":n=parseFloat(h),this.options&&this.options.invertTrProperty&&(n=1-n),n>0&&(i.opacity=1-n,i.transparent=!0)}}return this.materials[t]=new THREE.MeshPhongMaterial(i),this.materials[t]},getTextureParams:function(t,a){var e,r={scale:new THREE.Vector2(1,1),offset:new THREE.Vector2(0,0)},s=t.split(/\s+/);return e=s.indexOf("-bm"),e>=0&&(a.bumpScale=parseFloat(s[e+1]),s.splice(e,2)),e=s.indexOf("-s"),e>=0&&(r.scale.set(parseFloat(s[e+1]),parseFloat(s[e+2])),s.splice(e,4)),e=s.indexOf("-o"),e>=0&&(r.offset.set(parseFloat(s[e+1]),parseFloat(s[e+2])),s.splice(e,4)),r.url=s.join(" ").trim(),r},loadTexture:function(t,a,e,r,s){var i,o=THREE.Loader.Handlers.get(t),n=void 0!==this.manager?this.manager:THREE.DefaultLoadingManager;return null===o&&(o=new THREE.TextureLoader(n)),o.setCrossOrigin&&o.setCrossOrigin(this.crossOrigin),i=o.load(t,e,r,s),void 0!==a&&(i.mapping=a),i}}; },{}],40:[function(_dereq_,module,exports){ +THREE.OBJLoader=function(){function t(){var t={objects:[],object:{},vertices:[],normals:[],colors:[],uvs:[],materialLibraries:[],startObject:function(t,e){if(this.object&&!1===this.object.fromDeclaration)return this.object.name=t,void(this.object.fromDeclaration=!1!==e);var r=this.object&&"function"==typeof this.object.currentMaterial?this.object.currentMaterial():void 0;if(this.object&&"function"==typeof this.object._finalize&&this.object._finalize(!0),this.object={name:t||"",fromDeclaration:!1!==e,geometry:{vertices:[],normals:[],colors:[],uvs:[]},materials:[],smooth:!0,startMaterial:function(t,e){var r=this._finalize(!1);r&&(r.inherited||r.groupCount<=0)&&this.materials.splice(r.index,1);var i={index:this.materials.length,name:t||"",mtllib:Array.isArray(e)&&e.length>0?e[e.length-1]:"",smooth:void 0!==r?r.smooth:this.smooth,groupStart:void 0!==r?r.groupEnd:0,groupEnd:-1,groupCount:-1,inherited:!1,clone:function(t){var e={index:"number"==typeof t?t:this.index,name:this.name,mtllib:this.mtllib,smooth:this.smooth,groupStart:0,groupEnd:-1,groupCount:-1,inherited:!1};return e.clone=this.clone.bind(e),e}};return this.materials.push(i),i},currentMaterial:function(){if(this.materials.length>0)return this.materials[this.materials.length-1]},_finalize:function(t){var e=this.currentMaterial();if(e&&-1===e.groupEnd&&(e.groupEnd=this.geometry.vertices.length/3,e.groupCount=e.groupEnd-e.groupStart,e.inherited=!1),t&&this.materials.length>1)for(var r=this.materials.length-1;r>=0;r--)this.materials[r].groupCount<=0&&this.materials.splice(r,1);return t&&0===this.materials.length&&this.materials.push({name:"",smooth:this.smooth}),e}},r&&r.name&&"function"==typeof r.clone){var i=r.clone(0);i.inherited=!0,this.object.materials.push(i)}this.objects.push(this.object)},finalize:function(){this.object&&"function"==typeof this.object._finalize&&this.object._finalize(!0)},parseVertexIndex:function(t,e){var r=parseInt(t,10);return 3*(r>=0?r-1:r+e/3)},parseNormalIndex:function(t,e){var r=parseInt(t,10);return 3*(r>=0?r-1:r+e/3)},parseUVIndex:function(t,e){var r=parseInt(t,10);return 2*(r>=0?r-1:r+e/2)},addVertex:function(t,e,r){var i=this.vertices,s=this.object.geometry.vertices;s.push(i[t+0],i[t+1],i[t+2]),s.push(i[e+0],i[e+1],i[e+2]),s.push(i[r+0],i[r+1],i[r+2])},addVertexPoint:function(t){var e=this.vertices;this.object.geometry.vertices.push(e[t+0],e[t+1],e[t+2])},addVertexLine:function(t){var e=this.vertices;this.object.geometry.vertices.push(e[t+0],e[t+1],e[t+2])},addNormal:function(t,e,r){var i=this.normals,s=this.object.geometry.normals;s.push(i[t+0],i[t+1],i[t+2]),s.push(i[e+0],i[e+1],i[e+2]),s.push(i[r+0],i[r+1],i[r+2])},addColor:function(t,e,r){var i=this.colors,s=this.object.geometry.colors;s.push(i[t+0],i[t+1],i[t+2]),s.push(i[e+0],i[e+1],i[e+2]),s.push(i[r+0],i[r+1],i[r+2])},addUV:function(t,e,r){var i=this.uvs,s=this.object.geometry.uvs;s.push(i[t+0],i[t+1]),s.push(i[e+0],i[e+1]),s.push(i[r+0],i[r+1])},addUVLine:function(t){var e=this.uvs;this.object.geometry.uvs.push(e[t+0],e[t+1])},addFace:function(t,e,r,i,s,a,o,n,l){var h=this.vertices.length,u=this.parseVertexIndex(t,h),c=this.parseVertexIndex(e,h),p=this.parseVertexIndex(r,h);if(this.addVertex(u,c,p),void 0!==i&&""!==i){var m=this.uvs.length;u=this.parseUVIndex(i,m),c=this.parseUVIndex(s,m),p=this.parseUVIndex(a,m),this.addUV(u,c,p)}if(void 0!==o&&""!==o){var f=this.normals.length;u=this.parseNormalIndex(o,f),c=o===n?u:this.parseNormalIndex(n,f),p=o===l?u:this.parseNormalIndex(l,f),this.addNormal(u,c,p)}this.colors.length>0&&this.addColor(u,c,p)},addPointGeometry:function(t){this.object.geometry.type="Points";for(var e=this.vertices.length,r=0,i=t.length;r0){var x=E.split("/");v.push(x)}}for(var j=v[0],g=1,b=v.length-1;g1){var P=h[1].trim().toLowerCase();a.object.smooth="0"!==P&&"off"!==P}else a.object.smooth=!0;var A=a.object.currentMaterial();A&&(A.smooth=a.object.smooth)}a.finalize();var z=new THREE.Group;z.materialLibraries=[].concat(a.materialLibraries);for(var c=0,p=a.objects.length;c0?S.addAttribute("normal",new THREE.Float32BufferAttribute(C.normals,3)):S.computeVertexNormals(),C.colors.length>0&&(G=!0,S.addAttribute("color",new THREE.Float32BufferAttribute(C.colors,3))),C.uvs.length>0&&S.addAttribute("uv",new THREE.Float32BufferAttribute(C.uvs,2));for(var _=[],D=0,J=O.length;D1){for(var D=0,J=O.length;D0});this.visibleGlyphs=s;var n=vertices.positions(s),u=vertices.uvs(s,r,o,t),a=createIndices({clockwise:!0,type:"uint16",count:s.length});if(buffer.index(this,a,1,"uint16"),buffer.attr(this,"position",n,2),buffer.attr(this,"uv",u,2),!e.multipage&&"page"in this.attributes)this.removeAttribute("page");else if(e.multipage){var h=vertices.pages(s);buffer.attr(this,"page",h,1)}},TextGeometry.prototype.computeBoundingSphere=function(){null===this.boundingSphere&&(this.boundingSphere=new THREE.Sphere);var e=this.attributes.position.array,t=this.attributes.position.itemSize;if(!e||!t||e.length<2)return this.boundingSphere.radius=0,void this.boundingSphere.center.set(0,0,0);utils.computeSphere(e,this.boundingSphere),isNaN(this.boundingSphere.radius)&&console.error('THREE.BufferGeometry.computeBoundingSphere(): Computed radius is NaN. The "position" attribute is likely to have NaN values.')},TextGeometry.prototype.computeBoundingBox=function(){null===this.boundingBox&&(this.boundingBox=new THREE.Box3);var e=this.boundingBox,t=this.attributes.position.array,i=this.attributes.position.itemSize;if(!t||!i||t.length<2)return void e.makeEmpty();utils.computeBox(t,e)}; -},{"./lib/utils":41,"./lib/vertices":42,"inherits":16,"layout-bmfont-text":21,"object-assign":24,"quad-indices":33,"three-buffer-vertex-data":43}],41:[function(_dereq_,module,exports){ +},{"./lib/utils":42,"./lib/vertices":43,"inherits":19,"layout-bmfont-text":24,"object-assign":27,"quad-indices":35,"three-buffer-vertex-data":44}],42:[function(_dereq_,module,exports){ function bounds(x){var m=x.length/itemSize;box.min[0]=x[0],box.min[1]=x[1],box.max[0]=x[0],box.max[1]=x[1];for(var o=0;o=0&&(e._idleTimeoutId=setTimeout(function(){e._onTimeout&&e._onTimeout()},t))},exports.setImmediate="function"==typeof setImmediate?setImmediate:function(e){var t=nextImmediateId++,i=!(arguments.length<2)&&slice.call(arguments,1);return immediateIds[t]=!0,nextTick(function(){immediateIds[t]&&(i?e.apply(null,i):e.call(null),exports.clearImmediate(t))}),t},exports.clearImmediate="function"==typeof clearImmediate?clearImmediate:function(e){delete immediateIds[e]}; -}).call(this)}).call(this,_dereq_("timers").setImmediate,_dereq_("timers").clearImmediate) +}).call(this,_dereq_("timers").setImmediate,_dereq_("timers").clearImmediate) + +},{"process/browser.js":46,"timers":45}],46:[function(_dereq_,module,exports){ +arguments[4][5][0].apply(exports,arguments) +},{"dup":5}],47:[function(_dereq_,module,exports){ +function trim(r){return r.replace(/^\s*|\s*$/g,"")}exports=module.exports=trim,exports.left=function(r){return r.replace(/^\s*/,"")},exports.right=function(r){return r.replace(/\s*$/,"")}; +},{}],48:[function(_dereq_,module,exports){ +(function (global){ +!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t():"function"==typeof define&&define.amd?define(t):e.WebVRPolyfill=t()}(this,function(){"use strict";function e(e){this.config=n(n({},a),e),this.polyfillDisplays=[],this.enabled=!1,this.hasNative="getVRDisplays"in navigator,this.native={},this.native.getVRDisplays=navigator.getVRDisplays,this.native.VRFrameData=window.VRFrameData,this.native.VRDisplay=window.VRDisplay,(!this.hasNative||this.config.PROVIDE_MOBILE_VRDISPLAY&&i())&&(this.enable(),this.getVRDisplays().then(function(e){e&&e[0]&&e[0].fireVRDisplayConnect_&&e[0].fireVRDisplayConnect_()}))}var t="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:{},i=function(){return/Android/i.test(navigator.userAgent)||/iPhone|iPad|iPod/i.test(navigator.userAgent)},r=function(e,t){for(var i=0,r=e.length;ie.TEXTURE31){console.error("TEXTURE_BINDING_2D or TEXTURE_BINDING_CUBE_MAP must be followed by a valid texture unit"),r.push(null,null);break}n||(n=e.getParameter(e.ACTIVE_TEXTURE)),e.activeTexture(a),r.push(e.getParameter(s),null);break;case e.ACTIVE_TEXTURE:n=e.getParameter(e.ACTIVE_TEXTURE),r.push(null);break;default:r.push(e.getParameter(s))}}i(e);for(var A=0;Ae.TEXTURE31)break;e.activeTexture(a),e.bindTexture(e.TEXTURE_2D,o);break;case e.TEXTURE_BINDING_CUBE_MAP:var a=t[++A];if(ae.TEXTURE31)break;e.activeTexture(a),e.bindTexture(e.TEXTURE_CUBE_MAP,o);break;case e.VIEWPORT:e.viewport(o[0],o[1],o[2],o[3]);break;case e.BLEND:case e.CULL_FACE:case e.DEPTH_TEST:case e.SCISSOR_TEST:case e.STENCIL_TEST:o?e.enable(s):e.disable(s);break;default:console.log("No GL restore behavior for 0x"+s.toString(16))}n&&e.activeTexture(n)}}function i(e,t,i,r){this.gl=e,this.cardboardUI=t,this.bufferScale=i,this.dirtySubmitFrameBindings=r,this.ctxAttribs=e.getContextAttributes(),this.meshWidth=20,this.meshHeight=20,this.bufferWidth=e.drawingBufferWidth,this.bufferHeight=e.drawingBufferHeight,this.realBindFramebuffer=e.bindFramebuffer,this.realEnable=e.enable,this.realDisable=e.disable,this.realColorMask=e.colorMask,this.realClearColor=e.clearColor,this.realViewport=e.viewport,M()||(this.realCanvasWidth=Object.getOwnPropertyDescriptor(e.canvas.__proto__,"width"),this.realCanvasHeight=Object.getOwnPropertyDescriptor(e.canvas.__proto__,"height")),this.isPatched=!1,this.lastBoundFramebuffer=null,this.cullFace=!1,this.depthTest=!1,this.blend=!1,this.scissorTest=!1,this.stencilTest=!1,this.viewport=[0,0,0,0],this.colorMask=[!0,!0,!0,!0],this.clearColor=[0,0,0,0],this.attribs={position:0,texCoord:1},this.program=G(e,J,q,this.attribs),this.uniforms=O(e,this.program),this.viewportOffsetScale=new Float32Array(8),this.setTextureBounds(),this.vertexBuffer=e.createBuffer(),this.indexBuffer=e.createBuffer(),this.indexCount=0,this.renderTarget=e.createTexture(),this.framebuffer=e.createFramebuffer(),this.depthStencilBuffer=null,this.depthBuffer=null,this.stencilBuffer=null,this.ctxAttribs.depth&&this.ctxAttribs.stencil?this.depthStencilBuffer=e.createRenderbuffer():this.ctxAttribs.depth?this.depthBuffer=e.createRenderbuffer():this.ctxAttribs.stencil&&(this.stencilBuffer=e.createRenderbuffer()),this.patch(),this.onResize()}function r(e){this.gl=e,this.attribs={position:0},this.program=G(e,$,ee,this.attribs),this.uniforms=O(e,this.program),this.vertexBuffer=e.createBuffer(),this.gearOffset=0,this.gearVertexCount=0,this.arrowOffset=0,this.arrowVertexCount=0,this.projMat=new Float32Array(16),this.listener=null,this.onResize()}function n(e){this.coefficients=e}function A(e){this.width=e.width||x(),this.height=e.height||L(),this.widthMeters=e.widthMeters,this.heightMeters=e.heightMeters,this.bevelMeters=e.bevelMeters}function s(e,t){this.viewer=le.CardboardV2,this.updateDeviceParams(e),this.distortion=new n(this.viewer.distortionCoefficients);for(var i=0;i=200&&i.status<=299?(r.dpdb=JSON.parse(i.response),r.recalculateDeviceParams_()):console.error("Error loading online DPDB!")}),i.send()}}function l(e){this.xdpi=e.xdpi,this.ydpi=e.ydpi,this.bevelMm=e.bevelMm}function c(e,t){this.set(e,t)}function h(e,t){this.kFilter=e,this.isDebug=t,this.currentAccelMeasurement=new c,this.currentGyroMeasurement=new c,this.previousGyroMeasurement=new c,M()?this.filterQ=new se(-1,0,0,1):this.filterQ=new se(1,0,0,1),this.previousFilterQ=new se,this.previousFilterQ.copy(this.filterQ),this.accelQ=new se,this.isOrientationInitialized=!1,this.estimatedGravity=new Ae,this.measuredGravity=new Ae,this.gyroIntegralQ=new se}function d(e,t){this.predictionTimeS=e,this.isDebug=t,this.previousQ=new se,this.previousTimestampS=null,this.deltaQ=new se,this.outQ=new se}function u(e,t,i,r){this.yawOnly=i,this.accelerometer=new Ae,this.gyroscope=new Ae,this.filter=new h(e,r),this.posePredictor=new d(t,r),this.isFirefoxAndroid=T(),this.isIOS=M();var n=F();this.isDeviceMotionInRadians=!this.isIOS&&n&&n<66,this.isWithoutDeviceMotion=R(),this.filterToWorldQ=new se,M()?this.filterToWorldQ.setFromAxisAngle(new Ae(1,0,0),Math.PI/2):this.filterToWorldQ.setFromAxisAngle(new Ae(1,0,0),-Math.PI/2),this.inverseWorldToScreenQ=new se,this.worldToScreenQ=new se,this.originalPoseAdjustQ=new se,this.originalPoseAdjustQ.setFromAxisAngle(new Ae(0,0,1),-window.orientation*Math.PI/180),this.setScreenTransform_(),S()&&this.filterToWorldQ.multiply(this.inverseWorldToScreenQ),this.resetQ=new se,this.orientationOut_=new Float32Array(4),this.start()}function p(){this.loadIcon_();var e=document.createElement("div"),t=e.style;t.position="fixed",t.top=0,t.right=0,t.bottom=0,t.left=0,t.backgroundColor="gray",t.fontFamily="sans-serif",t.zIndex=1e6;var i=document.createElement("img");i.src=this.icon;var t=i.style;t.marginLeft="25%",t.marginTop="25%",t.width="50%",e.appendChild(i);var r=document.createElement("div"),t=r.style;t.textAlign="center",t.fontSize="16px",t.lineHeight="24px",t.margin="24px 25%",t.width="50%",r.innerHTML="Place your phone into your Cardboard viewer.",e.appendChild(r);var n=document.createElement("div"),t=n.style;t.backgroundColor="#CFD8DC",t.position="fixed",t.bottom=0,t.width="100%",t.height="48px",t.padding="14px 24px",t.boxSizing="border-box",t.color="#656A6B",e.appendChild(n);var A=document.createElement("div");A.style.float="left",A.innerHTML="No Cardboard viewer?";var s=document.createElement("a");s.href="https://www.google.com/get/cardboard/get-cardboard/",s.innerHTML="get one",s.target="_blank";var t=s.style;t.float="right",t.fontWeight=600,t.textTransform="uppercase",t.borderLeft="1px solid gray",t.paddingLeft="24px",t.textDecoration="none",t.color="#656A6B",n.appendChild(A),n.appendChild(s),this.overlay=e,this.text=r,this.hide()}function f(e){try{this.selectedKey=localStorage.getItem(ve)}catch(e){console.error("Failed to load viewer profile: %s",e)}this.selectedKey||(this.selectedKey=e||me),this.dialog=this.createDialog_(s.Viewers),this.root=null,this.onChangeCallbacks_=[]}function m(){this.leftProjectionMatrix=new Float32Array(16),this.leftViewMatrix=new Float32Array(16),this.rightProjectionMatrix=new Float32Array(16),this.rightViewMatrix=new Float32Array(16),this.pose=null}function v(e){Object.defineProperties(this,{hasPosition:{writable:!1,enumerable:!0,value:e.hasPosition},hasExternalDisplay:{writable:!1,enumerable:!0,value:e.hasExternalDisplay},canPresent:{writable:!1,enumerable:!0,value:e.canPresent},maxLayers:{writable:!1,enumerable:!0,value:e.maxLayers},hasOrientation:{enumerable:!0,get:function(){return j("VRDisplayCapabilities.prototype.hasOrientation","VRDisplay.prototype.getFrameData"),e.hasOrientation}}})}function g(e){e=e||{};var t=!("wakelock"in e)||e.wakelock;this.isPolyfilled=!0,this.displayId=ye++,this.displayName="",this.depthNear=.01,this.depthFar=1e4,this.isPresenting=!1,Object.defineProperty(this,"isConnected",{get:function(){return j("VRDisplay.prototype.isConnected","VRDisplayCapabilities.prototype.hasExternalDisplay"),!1}}),this.capabilities=new v({hasPosition:!1,hasOrientation:!1,hasExternalDisplay:!1,canPresent:!1,maxLayers:1}),this.stageParameters=null,this.waitingForPresent_=!1,this.layer_=null,this.originalParent_=null,this.fullscreenElement_=null,this.fullscreenWrapper_=null,this.fullscreenElementCachedStyle_=null,this.fullscreenEventTarget_=null,this.fullscreenChangeHandler_=null,this.fullscreenErrorHandler_=null,t&&k()&&(this.wakelock_=new we)}function w(e){var t=V({},Me);e=V(t,e||{}),g.call(this,{wakelock:e.MOBILE_WAKE_LOCK}),this.config=e,this.displayName="Cardboard VRDisplay",this.capabilities=new v({hasPosition:!1,hasOrientation:!0,hasExternalDisplay:!1,canPresent:!0,maxLayers:1}),this.stageParameters=null,this.bufferScale_=this.config.BUFFER_SCALE,this.poseSensor_=new fe(this.config),this.distorter_=null,this.cardboardUI_=null,this.dpdb_=new o(this.config.DPDB_URL,this.onDeviceParamsUpdated_.bind(this)),this.deviceInfo_=new s(this.dpdb_.getDeviceParams(),e.ADDITIONAL_VIEWERS),this.viewerSelector_=new f(e.DEFAULT_VIEWER),this.viewerSelector_.onChange(this.onViewerChanged_.bind(this)),this.deviceInfo_.setViewer(this.viewerSelector_.getCurrentViewer()),this.config.ROTATE_INSTRUCTIONS_DISABLED||(this.rotateInstructions_=new p),M()&&window.addEventListener("resize",this.onResize_.bind(this))}var y=function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")},E=function(){function e(e,t){for(var i=0;i1))},x=function(){return Math.max(window.screen.width,window.screen.height)*window.devicePixelRatio},L=function(){return Math.min(window.screen.width,window.screen.height)*window.devicePixelRatio},P=function(e){if(B())return!1;if(e.requestFullscreen)e.requestFullscreen();else if(e.webkitRequestFullscreen)e.webkitRequestFullscreen();else if(e.mozRequestFullScreen)e.mozRequestFullScreen();else{if(!e.msRequestFullscreen)return!1;e.msRequestFullscreen()}return!0},N=function(){if(document.exitFullscreen)document.exitFullscreen();else if(document.webkitExitFullscreen)document.webkitExitFullscreen();else if(document.mozCancelFullScreen)document.mozCancelFullScreen();else{if(!document.msExitFullscreen)return!1;document.msExitFullscreen()}return!0},Q=function(){return document.fullscreenElement||document.webkitFullscreenElement||document.mozFullScreenElement||document.msFullscreenElement},G=function(e,t,i,r){var n=e.createShader(e.VERTEX_SHADER);e.shaderSource(n,t),e.compileShader(n);var A=e.createShader(e.FRAGMENT_SHADER);e.shaderSource(A,i),e.compileShader(A);var s=e.createProgram();e.attachShader(s,n),e.attachShader(s,A);for(var a in r)e.bindAttribLocation(s,r[a],a);return e.linkProgram(s),e.deleteShader(n),e.deleteShader(A),s},O=function(e,t){for(var i={},r=e.getProgramParameter(t,e.ACTIVE_UNIFORMS),n="",A=0;A1?(console.warn("getQuaternionAngle: w > 1"),0):2*Math.acos(e.w)},Z=function(){var e={};return function(t,i){void 0===e[t]&&(console.warn("webvr-polyfill: "+i),e[t]=!0)}}(),j=function(e,t){Z(e,e+" has been deprecated. This may not work on native WebVR displays. "+(t?"Please use "+t+" instead.":""))},K=e,J=["attribute vec2 position;","attribute vec3 texCoord;","varying vec2 vTexCoord;","uniform vec4 viewportOffsetScale[2];","void main() {"," vec4 viewport = viewportOffsetScale[int(texCoord.z)];"," vTexCoord = (texCoord.xy * viewport.zw) + viewport.xy;"," gl_Position = vec4( position, 1.0, 1.0 );","}"].join("\n"),q=["precision mediump float;","uniform sampler2D diffuse;","varying vec2 vTexCoord;","void main() {"," gl_FragColor = texture2D(diffuse, vTexCoord);","}"].join("\n");i.prototype.destroy=function(){var e=this.gl;this.unpatch(),e.deleteProgram(this.program),e.deleteBuffer(this.vertexBuffer),e.deleteBuffer(this.indexBuffer),e.deleteTexture(this.renderTarget),e.deleteFramebuffer(this.framebuffer),this.depthStencilBuffer&&e.deleteRenderbuffer(this.depthStencilBuffer),this.depthBuffer&&e.deleteRenderbuffer(this.depthBuffer),this.stencilBuffer&&e.deleteRenderbuffer(this.stencilBuffer),this.cardboardUI&&this.cardboardUI.destroy()},i.prototype.onResize=function(){var e=this.gl,t=this,i=[e.RENDERBUFFER_BINDING,e.TEXTURE_BINDING_2D,e.TEXTURE0];K(e,i,function(e){t.realBindFramebuffer.call(e,e.FRAMEBUFFER,null),t.scissorTest&&t.realDisable.call(e,e.SCISSOR_TEST),t.realColorMask.call(e,!0,!0,!0,!0),t.realViewport.call(e,0,0,e.drawingBufferWidth,e.drawingBufferHeight),t.realClearColor.call(e,0,0,0,1),e.clear(e.COLOR_BUFFER_BIT),t.realBindFramebuffer.call(e,e.FRAMEBUFFER,t.framebuffer),e.bindTexture(e.TEXTURE_2D,t.renderTarget),e.texImage2D(e.TEXTURE_2D,0,t.ctxAttribs.alpha?e.RGBA:e.RGB,t.bufferWidth,t.bufferHeight,0,t.ctxAttribs.alpha?e.RGBA:e.RGB,e.UNSIGNED_BYTE,null),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MAG_FILTER,e.LINEAR),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MIN_FILTER,e.LINEAR),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,e.CLAMP_TO_EDGE),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,e.CLAMP_TO_EDGE),e.framebufferTexture2D(e.FRAMEBUFFER,e.COLOR_ATTACHMENT0,e.TEXTURE_2D,t.renderTarget,0),t.ctxAttribs.depth&&t.ctxAttribs.stencil?(e.bindRenderbuffer(e.RENDERBUFFER,t.depthStencilBuffer),e.renderbufferStorage(e.RENDERBUFFER,e.DEPTH_STENCIL,t.bufferWidth,t.bufferHeight),e.framebufferRenderbuffer(e.FRAMEBUFFER,e.DEPTH_STENCIL_ATTACHMENT,e.RENDERBUFFER,t.depthStencilBuffer)):t.ctxAttribs.depth?(e.bindRenderbuffer(e.RENDERBUFFER,t.depthBuffer),e.renderbufferStorage(e.RENDERBUFFER,e.DEPTH_COMPONENT16,t.bufferWidth,t.bufferHeight),e.framebufferRenderbuffer(e.FRAMEBUFFER,e.DEPTH_ATTACHMENT,e.RENDERBUFFER,t.depthBuffer)):t.ctxAttribs.stencil&&(e.bindRenderbuffer(e.RENDERBUFFER,t.stencilBuffer),e.renderbufferStorage(e.RENDERBUFFER,e.STENCIL_INDEX8,t.bufferWidth,t.bufferHeight),e.framebufferRenderbuffer(e.FRAMEBUFFER,e.STENCIL_ATTACHMENT,e.RENDERBUFFER,t.stencilBuffer)),!e.checkFramebufferStatus(e.FRAMEBUFFER)===e.FRAMEBUFFER_COMPLETE&&console.error("Framebuffer incomplete!"),t.realBindFramebuffer.call(e,e.FRAMEBUFFER,t.lastBoundFramebuffer),t.scissorTest&&t.realEnable.call(e,e.SCISSOR_TEST),t.realColorMask.apply(e,t.colorMask),t.realViewport.apply(e,t.viewport),t.realClearColor.apply(e,t.clearColor)}),this.cardboardUI&&this.cardboardUI.onResize()},i.prototype.patch=function(){if(!this.isPatched){var e=this,t=this.gl.canvas,i=this.gl;M()||(t.width=x()*this.bufferScale,t.height=L()*this.bufferScale,Object.defineProperty(t,"width",{configurable:!0,enumerable:!0,get:function(){return e.bufferWidth},set:function(i){e.bufferWidth=i,e.realCanvasWidth.set.call(t,i),e.onResize()}}),Object.defineProperty(t,"height",{configurable:!0,enumerable:!0,get:function(){return e.bufferHeight},set:function(i){e.bufferHeight=i,e.realCanvasHeight.set.call(t,i),e.onResize()}})),this.lastBoundFramebuffer=i.getParameter(i.FRAMEBUFFER_BINDING),null==this.lastBoundFramebuffer&&(this.lastBoundFramebuffer=this.framebuffer,this.gl.bindFramebuffer(i.FRAMEBUFFER,this.framebuffer)),this.gl.bindFramebuffer=function(t,r){e.lastBoundFramebuffer=r||e.framebuffer,e.realBindFramebuffer.call(i,t,e.lastBoundFramebuffer)},this.cullFace=i.getParameter(i.CULL_FACE),this.depthTest=i.getParameter(i.DEPTH_TEST),this.blend=i.getParameter(i.BLEND),this.scissorTest=i.getParameter(i.SCISSOR_TEST),this.stencilTest=i.getParameter(i.STENCIL_TEST),i.enable=function(t){switch(t){case i.CULL_FACE:e.cullFace=!0;break;case i.DEPTH_TEST:e.depthTest=!0;break;case i.BLEND:e.blend=!0;break;case i.SCISSOR_TEST:e.scissorTest=!0;break;case i.STENCIL_TEST:e.stencilTest=!0}e.realEnable.call(i,t)},i.disable=function(t){switch(t){case i.CULL_FACE:e.cullFace=!1;break;case i.DEPTH_TEST:e.depthTest=!1;break;case i.BLEND:e.blend=!1;break;case i.SCISSOR_TEST:e.scissorTest=!1;break;case i.STENCIL_TEST:e.stencilTest=!1}e.realDisable.call(i,t)},this.colorMask=i.getParameter(i.COLOR_WRITEMASK),i.colorMask=function(t,r,n,A){e.colorMask[0]=t,e.colorMask[1]=r,e.colorMask[2]=n,e.colorMask[3]=A,e.realColorMask.call(i,t,r,n,A)},this.clearColor=i.getParameter(i.COLOR_CLEAR_VALUE),i.clearColor=function(t,r,n,A){e.clearColor[0]=t,e.clearColor[1]=r,e.clearColor[2]=n,e.clearColor[3]=A,e.realClearColor.call(i,t,r,n,A)},this.viewport=i.getParameter(i.VIEWPORT),i.viewport=function(t,r,n,A){e.viewport[0]=t,e.viewport[1]=r,e.viewport[2]=n,e.viewport[3]=A,e.realViewport.call(i,t,r,n,A)},this.isPatched=!0,z(t)}},i.prototype.unpatch=function(){if(this.isPatched){var e=this.gl,t=this.gl.canvas;M()||(Object.defineProperty(t,"width",this.realCanvasWidth),Object.defineProperty(t,"height",this.realCanvasHeight)),t.width=this.bufferWidth,t.height=this.bufferHeight,e.bindFramebuffer=this.realBindFramebuffer,e.enable=this.realEnable,e.disable=this.realDisable,e.colorMask=this.realColorMask,e.clearColor=this.realClearColor,e.viewport=this.realViewport,this.lastBoundFramebuffer==this.framebuffer&&e.bindFramebuffer(e.FRAMEBUFFER,null),this.isPatched=!1,setTimeout(function(){z(t)},1)}},i.prototype.setTextureBounds=function(e,t){e||(e=[0,0,.5,1]),t||(t=[.5,0,.5,1]),this.viewportOffsetScale[0]=e[0],this.viewportOffsetScale[1]=e[1],this.viewportOffsetScale[2]=e[2],this.viewportOffsetScale[3]=e[3],this.viewportOffsetScale[4]=t[0],this.viewportOffsetScale[5]=t[1],this.viewportOffsetScale[6]=t[2],this.viewportOffsetScale[7]=t[3]},i.prototype.submitFrame=function(){var e=this.gl,t=this,i=[];if(this.dirtySubmitFrameBindings||i.push(e.CURRENT_PROGRAM,e.ARRAY_BUFFER_BINDING,e.ELEMENT_ARRAY_BUFFER_BINDING,e.TEXTURE_BINDING_2D,e.TEXTURE0),K(e,i,function(e){t.realBindFramebuffer.call(e,e.FRAMEBUFFER,null),t.cullFace&&t.realDisable.call(e,e.CULL_FACE),t.depthTest&&t.realDisable.call(e,e.DEPTH_TEST),t.blend&&t.realDisable.call(e,e.BLEND),t.scissorTest&&t.realDisable.call(e,e.SCISSOR_TEST),t.stencilTest&&t.realDisable.call(e,e.STENCIL_TEST),t.realColorMask.call(e,!0,!0,!0,!0),t.realViewport.call(e,0,0,e.drawingBufferWidth,e.drawingBufferHeight),(t.ctxAttribs.alpha||M())&&(t.realClearColor.call(e,0,0,0,1),e.clear(e.COLOR_BUFFER_BIT)),e.useProgram(t.program),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t.indexBuffer),e.bindBuffer(e.ARRAY_BUFFER,t.vertexBuffer),e.enableVertexAttribArray(t.attribs.position),e.enableVertexAttribArray(t.attribs.texCoord),e.vertexAttribPointer(t.attribs.position,2,e.FLOAT,!1,20,0),e.vertexAttribPointer(t.attribs.texCoord,3,e.FLOAT,!1,20,8),e.activeTexture(e.TEXTURE0),e.uniform1i(t.uniforms.diffuse,0),e.bindTexture(e.TEXTURE_2D,t.renderTarget),e.uniform4fv(t.uniforms.viewportOffsetScale,t.viewportOffsetScale),e.drawElements(e.TRIANGLES,t.indexCount,e.UNSIGNED_SHORT,0),t.cardboardUI&&t.cardboardUI.renderNoState(),t.realBindFramebuffer.call(t.gl,e.FRAMEBUFFER,t.framebuffer),t.ctxAttribs.preserveDrawingBuffer||(t.realClearColor.call(e,0,0,0,0),e.clear(e.COLOR_BUFFER_BIT)),t.dirtySubmitFrameBindings||t.realBindFramebuffer.call(e,e.FRAMEBUFFER,t.lastBoundFramebuffer),t.cullFace&&t.realEnable.call(e,e.CULL_FACE),t.depthTest&&t.realEnable.call(e,e.DEPTH_TEST),t.blend&&t.realEnable.call(e,e.BLEND),t.scissorTest&&t.realEnable.call(e,e.SCISSOR_TEST),t.stencilTest&&t.realEnable.call(e,e.STENCIL_TEST),t.realColorMask.apply(e,t.colorMask),t.realViewport.apply(e,t.viewport),!t.ctxAttribs.alpha&&t.ctxAttribs.preserveDrawingBuffer||t.realClearColor.apply(e,t.clearColor)}),M()){var r=e.canvas;r.width==t.bufferWidth&&r.height==t.bufferHeight||(t.bufferWidth=r.width,t.bufferHeight=r.height,t.onResize())}},i.prototype.updateDeviceInfo=function(e){var t=this.gl,i=this,r=[t.ARRAY_BUFFER_BINDING,t.ELEMENT_ARRAY_BUFFER_BINDING];K(t,r,function(t){var r=i.computeMeshVertices_(i.meshWidth,i.meshHeight,e);if(t.bindBuffer(t.ARRAY_BUFFER,i.vertexBuffer),t.bufferData(t.ARRAY_BUFFER,r,t.STATIC_DRAW),!i.indexCount){var n=i.computeMeshIndices_(i.meshWidth,i.meshHeight);t.bindBuffer(t.ELEMENT_ARRAY_BUFFER,i.indexBuffer),t.bufferData(t.ELEMENT_ARRAY_BUFFER,n,t.STATIC_DRAW),i.indexCount=n.length}})},i.prototype.computeMeshVertices_=function(e,t,i){for(var r=new Float32Array(2*e*t*5),n=i.getLeftEyeVisibleTanAngles(),A=i.getLeftEyeNoLensTanAngles(),s=i.getLeftEyeVisibleScreenRect(A),a=0,o=0;o<2;o++){for(var l=0;ln-42&&r.clientXi.clientHeight-42?e(r):r.clientX<42&&r.clientY<42&&t(r)},i.addEventListener("click",this.listener,!1)},r.prototype.onResize=function(){var e=this.gl,t=this,i=[e.ARRAY_BUFFER_BINDING];K(e,i,function(e){function i(e,t){var i=(90-e)*te,r=Math.cos(i),s=Math.sin(i);n.push(ie*r*h+A,ie*s*h+h),n.push(t*r*h+A,t*s*h+h)}function r(t,i){n.push(d+t,e.drawingBufferHeight-d-i)}var n=[],A=e.drawingBufferWidth/2,s=Math.max(screen.width,screen.height)*window.devicePixelRatio,a=e.drawingBufferWidth/s,o=a*window.devicePixelRatio,l=4*o/2,c=42*o,h=28*o/2,d=14*o;n.push(A-l,c),n.push(A-l,e.drawingBufferHeight),n.push(A+l,c),n.push(A+l,e.drawingBufferHeight),t.gearOffset=n.length/2;for(var u=0;u<=6;u++){var p=60*u;i(p,1),i(p+12,1),i(p+20,.75),i(p+40,.75),i(p+48,1)}t.gearVertexCount=n.length/2-t.gearOffset,t.arrowOffset=n.length/2;var f=l/Math.sin(45*te);r(0,h),r(h,0),r(h+f,f),r(f,h+f),r(f,h-f),r(0,h),r(h,2*h),r(h+f,2*h-f),r(f,h-f),r(0,h),r(f,h-l),r(28*o,h-l),r(f,h+l),r(28*o,h+l),t.arrowVertexCount=n.length/2-t.arrowOffset,e.bindBuffer(e.ARRAY_BUFFER,t.vertexBuffer),e.bufferData(e.ARRAY_BUFFER,new Float32Array(n),e.STATIC_DRAW)})},r.prototype.render=function(){var e=this.gl,t=this,i=[e.CULL_FACE,e.DEPTH_TEST,e.BLEND,e.SCISSOR_TEST,e.STENCIL_TEST,e.COLOR_WRITEMASK,e.VIEWPORT,e.CURRENT_PROGRAM,e.ARRAY_BUFFER_BINDING];K(e,i,function(e){e.disable(e.CULL_FACE),e.disable(e.DEPTH_TEST),e.disable(e.BLEND),e.disable(e.SCISSOR_TEST),e.disable(e.STENCIL_TEST),e.colorMask(!0,!0,!0,!0),e.viewport(0,0,e.drawingBufferWidth,e.drawingBufferHeight),t.renderNoState()})},r.prototype.renderNoState=function(){var e=this.gl;e.useProgram(this.program),e.bindBuffer(e.ARRAY_BUFFER,this.vertexBuffer),e.enableVertexAttribArray(this.attribs.position),e.vertexAttribPointer(this.attribs.position,2,e.FLOAT,!1,8,0),e.uniform4f(this.uniforms.color,1,1,1,1),U(this.projMat,0,e.drawingBufferWidth,0,e.drawingBufferHeight,.1,1024), +e.uniformMatrix4fv(this.uniforms.projectionMat,!1,this.projMat),e.drawArrays(e.TRIANGLE_STRIP,0,4),e.drawArrays(e.TRIANGLE_STRIP,this.gearOffset,this.gearVertexCount),e.drawArrays(e.TRIANGLE_STRIP,this.arrowOffset,this.arrowVertexCount)},n.prototype.distortInverse=function(e){for(var t=0,i=1,r=e-this.distort(t);Math.abs(i-t)>1e-4;){var n=e-this.distort(i),A=i-n*((i-t)/(n-r));t=i,i=A,r=n}return i},n.prototype.distort=function(e){for(var t=e*e,i=0,r=0;r=1)return this.w=A,this.x=i,this.y=r,this.z=n,this;var a=Math.acos(s),o=Math.sqrt(1-s*s);if(Math.abs(o)<.001)return this.w=.5*(A+this.w),this.x=.5*(i+this.x),this.y=.5*(r+this.y),this.z=.5*(n+this.z),this;var l=Math.sin((1-t)*a)/o,c=Math.sin(t*a)/o;return this.w=A*l+this.w*c,this.x=i*l+this.x*c,this.y=r*l+this.y*c,this.z=n*l+this.z*c,this},setFromUnitVectors:function(){var e,t;return function(i,r){return void 0===e&&(e=new Ae),t=i.dot(r)+1,t<1e-6?(t=0,Math.abs(i.x)>Math.abs(i.z)?e.set(-i.y,i.x,0):e.set(0,-i.z,i.y)):e.crossVectors(i,r),this.x=e.x,this.y=e.y,this.z=e.z,this.w=t,this.normalize(),this}}()};var ae=new A({widthMeters:.11,heightMeters:.062,bevelMeters:.004}),oe=new A({widthMeters:.1038,heightMeters:.0584,bevelMeters:.004}),le={CardboardV1:new a({id:"CardboardV1",label:"Cardboard I/O 2014",fov:40,interLensDistance:.06,baselineLensDistance:.035,screenLensDistance:.042,distortionCoefficients:[.441,.156],inverseCoefficients:[-.4410035,.42756155,-.4804439,.5460139,-.58821183,.5733938,-.48303202,.33299083,-.17573841,.0651772,-.01488963,.001559834]}),CardboardV2:new a({id:"CardboardV2",label:"Cardboard I/O 2015",fov:60,interLensDistance:.064,baselineLensDistance:.035,screenLensDistance:.039,distortionCoefficients:[.34,.55],inverseCoefficients:[-.33836704,-.18162185,.862655,-1.2462051,1.0560602,-.58208317,.21609078,-.05444823,.009177956,-.0009904169,6183535e-11,-16981803e-13]})};s.prototype.updateDeviceParams=function(e){this.device=this.determineDevice_(e)||this.device},s.prototype.getDevice=function(){return this.device},s.prototype.setViewer=function(e){this.viewer=e,this.distortion=new n(this.viewer.distortionCoefficients)},s.prototype.determineDevice_=function(e){if(!e)return M()?(console.warn("Using fallback iOS device measurements."),oe):(console.warn("Using fallback Android device measurements."),ae);var t=.0254/e.xdpi,i=.0254/e.ydpi;return new A({widthMeters:t*x(),heightMeters:i*L(),bevelMeters:.001*e.bevelMm})},s.prototype.getDistortedFieldOfViewLeftEye=function(){var e=this.viewer,t=this.device,i=this.distortion,r=e.screenLensDistance,n=(t.widthMeters-e.interLensDistance)/2,A=e.interLensDistance/2,s=e.baselineLensDistance-t.bevelMeters,a=t.heightMeters-s,o=ne*Math.atan(i.distort(n/r)),l=ne*Math.atan(i.distort(A/r)),c=ne*Math.atan(i.distort(s/r)),h=ne*Math.atan(i.distort(a/r));return{leftDegrees:Math.min(o,e.fov),rightDegrees:Math.min(l,e.fov),downDegrees:Math.min(c,e.fov),upDegrees:Math.min(h,e.fov)}},s.prototype.getLeftEyeVisibleTanAngles=function(){var e=this.viewer,t=this.device,i=this.distortion,r=Math.tan(-re*e.fov),n=Math.tan(re*e.fov),A=Math.tan(re*e.fov),s=Math.tan(-re*e.fov),a=t.widthMeters/4,o=t.heightMeters/2,l=e.baselineLensDistance-t.bevelMeters-o,c=e.interLensDistance/2-a,h=-l,d=e.screenLensDistance,u=i.distort((c-a)/d),p=i.distort((h+o)/d),f=i.distort((c+a)/d),m=i.distort((h-o)/d),v=new Float32Array(4);return v[0]=Math.max(r,u),v[1]=Math.min(n,p),v[2]=Math.min(A,f),v[3]=Math.max(s,m),v},s.prototype.getLeftEyeNoLensTanAngles=function(){var e=this.viewer,t=this.device,i=this.distortion,r=new Float32Array(4),n=i.distortInverse(Math.tan(-re*e.fov)),A=i.distortInverse(Math.tan(re*e.fov)),s=i.distortInverse(Math.tan(re*e.fov)),a=i.distortInverse(Math.tan(-re*e.fov)),o=t.widthMeters/4,l=t.heightMeters/2,c=e.baselineLensDistance-t.bevelMeters-l,h=e.interLensDistance/2-o,d=-c,u=e.screenLensDistance,p=(h-o)/u,f=(d+l)/u,m=(h+o)/u,v=(d-l)/u;return r[0]=Math.max(n,p),r[1]=Math.min(A,f),r[2]=Math.min(s,m),r[3]=Math.max(a,v),r},s.prototype.getLeftEyeVisibleScreenRect=function(e){var t=this.viewer,i=this.device,r=t.screenLensDistance,n=(i.widthMeters-t.interLensDistance)/2,A=t.baselineLensDistance-i.bevelMeters,s=(e[0]*r+n)/i.widthMeters,a=(e[1]*r+A)/i.heightMeters,o=(e[2]*r+n)/i.widthMeters,l=(e[3]*r+A)/i.heightMeters;return{x:s,y:l,width:o-s,height:a-l}},s.prototype.getFieldOfViewLeftEye=function(e){return e?this.getUndistortedFieldOfViewLeftEye():this.getDistortedFieldOfViewLeftEye()},s.prototype.getFieldOfViewRightEye=function(e){var t=this.getFieldOfViewLeftEye(e);return{leftDegrees:t.rightDegrees,rightDegrees:t.leftDegrees,upDegrees:t.upDegrees,downDegrees:t.downDegrees}},s.prototype.getUndistortedFieldOfViewLeftEye=function(){var e=this.getUndistortedParams_();return{leftDegrees:ne*Math.atan(e.outerDist),rightDegrees:ne*Math.atan(e.innerDist),downDegrees:ne*Math.atan(e.bottomDist),upDegrees:ne*Math.atan(e.topDist)}},s.prototype.getUndistortedViewportLeftEye=function(){var e=this.getUndistortedParams_(),t=this.viewer,i=this.device,r=t.screenLensDistance,n=i.widthMeters/r,A=i.heightMeters/r,s=i.width/n,a=i.height/A,o=Math.round((e.eyePosX-e.outerDist)*s),l=Math.round((e.eyePosY-e.bottomDist)*a);return{x:o,y:l,width:Math.round((e.eyePosX+e.innerDist)*s)-o,height:Math.round((e.eyePosY+e.topDist)*a)-l}},s.prototype.getUndistortedParams_=function(){var e=this.viewer,t=this.device,i=this.distortion,r=e.screenLensDistance,n=e.interLensDistance/2/r,A=t.widthMeters/r,s=t.heightMeters/r,a=A/2-n,o=(e.baselineLensDistance-t.bevelMeters)/r,l=e.fov,c=i.distortInverse(Math.tan(re*l)),h=Math.min(a,c),d=Math.min(n,c),u=Math.min(o,c);return{outerDist:h,innerDist:d,topDist:Math.min(s-o,c),bottomDist:u,eyePosX:a,eyePosY:o}},s.Viewers=le;var ce=[{type:"android",rules:[{mdmh:"asus/*/Nexus 7/*"},{ua:"Nexus 7"}],dpi:[320.8,323],bw:3,ac:500},{type:"android",rules:[{mdmh:"asus/*/ASUS_Z00AD/*"},{ua:"ASUS_Z00AD"}],dpi:[403,404.6],bw:3,ac:1e3},{type:"android",rules:[{mdmh:"Google/*/Pixel 2 XL/*"},{ua:"Pixel 2 XL"}],dpi:537.9,bw:3,ac:1e3},{type:"android",rules:[{mdmh:"Google/*/Pixel 3 XL/*"},{ua:"Pixel 3 XL"}],dpi:[558.5,553.8],bw:3,ac:1e3},{type:"android",rules:[{mdmh:"Google/*/Pixel XL/*"},{ua:"Pixel XL"}],dpi:[537.9,533],bw:3,ac:1e3},{type:"android",rules:[{mdmh:"Google/*/Pixel 3/*"},{ua:"Pixel 3"}],dpi:442.4,bw:3,ac:1e3},{type:"android",rules:[{mdmh:"Google/*/Pixel 2/*"},{ua:"Pixel 2"}],dpi:441,bw:3,ac:500},{type:"android",rules:[{mdmh:"Google/*/Pixel/*"},{ua:"Pixel"}],dpi:[432.6,436.7],bw:3,ac:1e3},{type:"android",rules:[{mdmh:"HTC/*/HTC6435LVW/*"},{ua:"HTC6435LVW"}],dpi:[449.7,443.3],bw:3,ac:1e3},{type:"android",rules:[{mdmh:"HTC/*/HTC One XL/*"},{ua:"HTC One XL"}],dpi:[315.3,314.6],bw:3,ac:1e3},{type:"android",rules:[{mdmh:"htc/*/Nexus 9/*"},{ua:"Nexus 9"}],dpi:289,bw:3,ac:500},{type:"android",rules:[{mdmh:"HTC/*/HTC One M9/*"},{ua:"HTC One M9"}],dpi:[442.5,443.3],bw:3,ac:500},{type:"android",rules:[{mdmh:"HTC/*/HTC One_M8/*"},{ua:"HTC One_M8"}],dpi:[449.7,447.4],bw:3,ac:500},{type:"android",rules:[{mdmh:"HTC/*/HTC One/*"},{ua:"HTC One"}],dpi:472.8,bw:3,ac:1e3},{type:"android",rules:[{mdmh:"Huawei/*/Nexus 6P/*"},{ua:"Nexus 6P"}],dpi:[515.1,518],bw:3,ac:1e3},{type:"android",rules:[{mdmh:"Huawei/*/BLN-L24/*"},{ua:"HONORBLN-L24"}],dpi:480,bw:4,ac:500},{type:"android",rules:[{mdmh:"Huawei/*/BKL-L09/*"},{ua:"BKL-L09"}],dpi:403,bw:3.47,ac:500},{type:"android",rules:[{mdmh:"LENOVO/*/Lenovo PB2-690Y/*"},{ua:"Lenovo PB2-690Y"}],dpi:[457.2,454.713],bw:3,ac:500},{type:"android",rules:[{mdmh:"LGE/*/Nexus 5X/*"},{ua:"Nexus 5X"}],dpi:[422,419.9],bw:3,ac:1e3},{type:"android",rules:[{mdmh:"LGE/*/LGMS345/*"},{ua:"LGMS345"}],dpi:[221.7,219.1],bw:3,ac:500},{type:"android",rules:[{mdmh:"LGE/*/LG-D800/*"},{ua:"LG-D800"}],dpi:[422,424.1],bw:3,ac:500},{type:"android",rules:[{mdmh:"LGE/*/LG-D850/*"},{ua:"LG-D850"}],dpi:[537.9,541.9],bw:3,ac:500},{type:"android",rules:[{mdmh:"LGE/*/VS985 4G/*"},{ua:"VS985 4G"}],dpi:[537.9,535.6],bw:3,ac:1e3},{type:"android",rules:[{mdmh:"LGE/*/Nexus 5/*"},{ua:"Nexus 5 B"}],dpi:[442.4,444.8],bw:3,ac:1e3},{type:"android",rules:[{mdmh:"LGE/*/Nexus 4/*"},{ua:"Nexus 4"}],dpi:[319.8,318.4],bw:3,ac:1e3},{type:"android",rules:[{mdmh:"LGE/*/LG-P769/*"},{ua:"LG-P769"}],dpi:[240.6,247.5],bw:3,ac:1e3},{type:"android",rules:[{mdmh:"LGE/*/LGMS323/*"},{ua:"LGMS323"}],dpi:[206.6,204.6],bw:3,ac:1e3},{type:"android",rules:[{mdmh:"LGE/*/LGLS996/*"},{ua:"LGLS996"}],dpi:[403.4,401.5],bw:3,ac:1e3},{type:"android",rules:[{mdmh:"Micromax/*/4560MMX/*"},{ua:"4560MMX"}],dpi:[240,219.4],bw:3,ac:1e3},{type:"android",rules:[{mdmh:"Micromax/*/A250/*"},{ua:"Micromax A250"}],dpi:[480,446.4],bw:3,ac:1e3},{type:"android",rules:[{mdmh:"Micromax/*/Micromax AQ4501/*"},{ua:"Micromax AQ4501"}],dpi:240,bw:3,ac:500},{type:"android",rules:[{mdmh:"motorola/*/G5/*"},{ua:"Moto G (5) Plus"}],dpi:[403.4,403],bw:3,ac:1e3},{type:"android",rules:[{mdmh:"motorola/*/DROID RAZR/*"},{ua:"DROID RAZR"}],dpi:[368.1,256.7],bw:3,ac:1e3},{type:"android",rules:[{mdmh:"motorola/*/XT830C/*"},{ua:"XT830C"}],dpi:[254,255.9],bw:3,ac:1e3},{type:"android",rules:[{mdmh:"motorola/*/XT1021/*"},{ua:"XT1021"}],dpi:[254,256.7],bw:3,ac:500},{type:"android",rules:[{mdmh:"motorola/*/XT1023/*"},{ua:"XT1023"}],dpi:[254,256.7],bw:3,ac:500},{type:"android",rules:[{mdmh:"motorola/*/XT1028/*"},{ua:"XT1028"}],dpi:[326.6,327.6],bw:3,ac:1e3},{type:"android",rules:[{mdmh:"motorola/*/XT1034/*"},{ua:"XT1034"}],dpi:[326.6,328.4],bw:3,ac:500},{type:"android",rules:[{mdmh:"motorola/*/XT1053/*"},{ua:"XT1053"}],dpi:[315.3,316.1],bw:3,ac:1e3},{type:"android",rules:[{mdmh:"motorola/*/XT1562/*"},{ua:"XT1562"}],dpi:[403.4,402.7],bw:3,ac:1e3},{type:"android",rules:[{mdmh:"motorola/*/Nexus 6/*"},{ua:"Nexus 6 B"}],dpi:[494.3,489.7],bw:3,ac:1e3},{type:"android",rules:[{mdmh:"motorola/*/XT1063/*"},{ua:"XT1063"}],dpi:[295,296.6],bw:3,ac:1e3},{type:"android",rules:[{mdmh:"motorola/*/XT1064/*"},{ua:"XT1064"}],dpi:[295,295.6],bw:3,ac:500},{type:"android",rules:[{mdmh:"motorola/*/XT1092/*"},{ua:"XT1092"}],dpi:[422,424.1],bw:3,ac:500},{type:"android",rules:[{mdmh:"motorola/*/XT1095/*"},{ua:"XT1095"}],dpi:[422,423.4],bw:3,ac:1e3},{type:"android",rules:[{mdmh:"motorola/*/G4/*"},{ua:"Moto G (4)"}],dpi:401,bw:4,ac:1e3},{type:"android",rules:[{mdmh:"OnePlus/*/A0001/*"},{ua:"A0001"}],dpi:[403.4,401],bw:3,ac:1e3},{type:"android",rules:[{mdmh:"OnePlus/*/ONE E1005/*"},{ua:"ONE E1005"}],dpi:[442.4,441.4],bw:3,ac:1e3},{type:"android",rules:[{mdmh:"OnePlus/*/ONE A2005/*"},{ua:"ONE A2005"}],dpi:[391.9,405.4],bw:3,ac:1e3},{type:"android",rules:[{mdmh:"OnePlus/*/ONEPLUS A5000/*"},{ua:"ONEPLUS A5000 "}],dpi:[403.411,399.737],bw:3,ac:1e3},{type:"android",rules:[{mdmh:"OnePlus/*/ONE A5010/*"},{ua:"ONEPLUS A5010"}],dpi:[403,400],bw:2,ac:1e3},{type:"android",rules:[{mdmh:"OPPO/*/X909/*"},{ua:"X909"}],dpi:[442.4,444.1],bw:3,ac:1e3},{type:"android",rules:[{mdmh:"samsung/*/GT-I9082/*"},{ua:"GT-I9082"}],dpi:[184.7,185.4],bw:3,ac:1e3},{type:"android",rules:[{mdmh:"samsung/*/SM-G360P/*"},{ua:"SM-G360P"}],dpi:[196.7,205.4],bw:3,ac:1e3},{type:"android",rules:[{mdmh:"samsung/*/Nexus S/*"},{ua:"Nexus S"}],dpi:[234.5,229.8],bw:3,ac:1e3},{type:"android",rules:[{mdmh:"samsung/*/GT-I9300/*"},{ua:"GT-I9300"}],dpi:[304.8,303.9],bw:5,ac:500},{type:"android",rules:[{mdmh:"samsung/*/SM-T230NU/*"},{ua:"SM-T230NU"}],dpi:216,bw:3,ac:500},{type:"android",rules:[{mdmh:"samsung/*/SGH-T399/*"},{ua:"SGH-T399"}],dpi:[217.7,231.4],bw:3,ac:1e3},{type:"android",rules:[{mdmh:"samsung/*/SGH-M919/*"},{ua:"SGH-M919"}],dpi:[440.8,437.7],bw:3,ac:1e3},{type:"android",rules:[{mdmh:"samsung/*/SM-N9005/*"},{ua:"SM-N9005"}],dpi:[386.4,387],bw:3,ac:500},{type:"android",rules:[{mdmh:"samsung/*/SAMSUNG-SM-N900A/*"},{ua:"SAMSUNG-SM-N900A"}],dpi:[386.4,387.7],bw:3,ac:1e3},{type:"android",rules:[{mdmh:"samsung/*/GT-I9500/*"},{ua:"GT-I9500"}],dpi:[442.5,443.3],bw:3,ac:500},{type:"android",rules:[{mdmh:"samsung/*/GT-I9505/*"},{ua:"GT-I9505"}],dpi:439.4,bw:4,ac:1e3},{type:"android",rules:[{mdmh:"samsung/*/SM-G900F/*"},{ua:"SM-G900F"}],dpi:[415.6,431.6],bw:5,ac:1e3},{type:"android",rules:[{mdmh:"samsung/*/SM-G900M/*"},{ua:"SM-G900M"}],dpi:[415.6,431.6],bw:5,ac:1e3},{type:"android",rules:[{mdmh:"samsung/*/SM-G800F/*"},{ua:"SM-G800F"}],dpi:326.8,bw:3,ac:1e3},{type:"android",rules:[{mdmh:"samsung/*/SM-G906S/*"},{ua:"SM-G906S"}],dpi:[562.7,572.4],bw:3,ac:1e3},{type:"android",rules:[{mdmh:"samsung/*/GT-I9300/*"},{ua:"GT-I9300"}],dpi:[306.7,304.8],bw:5,ac:1e3},{type:"android",rules:[{mdmh:"samsung/*/SM-T535/*"},{ua:"SM-T535"}],dpi:[142.6,136.4],bw:3,ac:500},{type:"android",rules:[{mdmh:"samsung/*/SM-N920C/*"},{ua:"SM-N920C"}],dpi:[515.1,518.4],bw:3,ac:1e3},{type:"android",rules:[{mdmh:"samsung/*/SM-N920P/*"},{ua:"SM-N920P"}],dpi:[386.3655,390.144],bw:3,ac:1e3},{type:"android",rules:[{mdmh:"samsung/*/SM-N920W8/*"},{ua:"SM-N920W8"}],dpi:[515.1,518.4],bw:3,ac:1e3},{type:"android",rules:[{mdmh:"samsung/*/GT-I9300I/*"},{ua:"GT-I9300I"}],dpi:[304.8,305.8],bw:3,ac:1e3},{type:"android",rules:[{mdmh:"samsung/*/GT-I9195/*"},{ua:"GT-I9195"}],dpi:[249.4,256.7],bw:3,ac:500},{type:"android",rules:[{mdmh:"samsung/*/SPH-L520/*"},{ua:"SPH-L520"}],dpi:[249.4,255.9],bw:3,ac:1e3},{type:"android",rules:[{mdmh:"samsung/*/SAMSUNG-SGH-I717/*"},{ua:"SAMSUNG-SGH-I717"}],dpi:285.8,bw:3,ac:1e3},{type:"android",rules:[{mdmh:"samsung/*/SPH-D710/*"},{ua:"SPH-D710"}],dpi:[217.7,204.2],bw:3,ac:1e3},{type:"android",rules:[{mdmh:"samsung/*/GT-N7100/*"},{ua:"GT-N7100"}],dpi:265.1,bw:3,ac:1e3},{type:"android",rules:[{mdmh:"samsung/*/SCH-I605/*"},{ua:"SCH-I605"}],dpi:265.1,bw:3,ac:1e3},{type:"android",rules:[{mdmh:"samsung/*/Galaxy Nexus/*"},{ua:"Galaxy Nexus"}],dpi:[315.3,314.2],bw:3,ac:1e3},{type:"android",rules:[{mdmh:"samsung/*/SM-N910H/*"},{ua:"SM-N910H"}],dpi:[515.1,518],bw:3,ac:1e3},{type:"android",rules:[{mdmh:"samsung/*/SM-N910C/*"},{ua:"SM-N910C"}],dpi:[515.2,520.2],bw:3,ac:500},{type:"android",rules:[{mdmh:"samsung/*/SM-G130M/*"},{ua:"SM-G130M"}],dpi:[165.9,164.8],bw:3,ac:500},{type:"android",rules:[{mdmh:"samsung/*/SM-G928I/*"},{ua:"SM-G928I"}],dpi:[515.1,518.4],bw:3,ac:1e3},{type:"android",rules:[{mdmh:"samsung/*/SM-G920F/*"},{ua:"SM-G920F"}],dpi:580.6,bw:3,ac:500},{type:"android",rules:[{mdmh:"samsung/*/SM-G920P/*"},{ua:"SM-G920P"}],dpi:[522.5,577],bw:3,ac:1e3},{type:"android",rules:[{mdmh:"samsung/*/SM-G925F/*"},{ua:"SM-G925F"}],dpi:580.6,bw:3,ac:500},{type:"android",rules:[{mdmh:"samsung/*/SM-G925V/*"},{ua:"SM-G925V"}],dpi:[522.5,576.6],bw:3,ac:1e3},{type:"android",rules:[{mdmh:"samsung/*/SM-G930F/*"},{ua:"SM-G930F"}],dpi:576.6,bw:3,ac:1e3},{type:"android",rules:[{mdmh:"samsung/*/SM-G935F/*"},{ua:"SM-G935F"}],dpi:533,bw:3,ac:500},{type:"android",rules:[{mdmh:"samsung/*/SM-G950F/*"},{ua:"SM-G950F"}],dpi:[562.707,565.293],bw:3,ac:500},{type:"android",rules:[{mdmh:"samsung/*/SM-G955U/*"},{ua:"SM-G955U"}],dpi:[522.514,525.762],bw:3,ac:500},{type:"android",rules:[{mdmh:"samsung/*/SM-G955F/*"},{ua:"SM-G955F"}],dpi:[522.514,525.762],bw:3,ac:500},{type:"android",rules:[{mdmh:"Sony/*/C6903/*"},{ua:"C6903"}],dpi:[442.5,443.3],bw:3,ac:500},{type:"android",rules:[{mdmh:"Sony/*/D6653/*"},{ua:"D6653"}],dpi:[428.6,427.6],bw:3,ac:1e3},{type:"android",rules:[{mdmh:"Sony/*/E6653/*"},{ua:"E6653"}],dpi:[428.6,425.7],bw:3,ac:1e3},{type:"android",rules:[{mdmh:"Sony/*/E6853/*"},{ua:"E6853"}],dpi:[403.4,401.9],bw:3,ac:1e3},{type:"android",rules:[{mdmh:"Sony/*/SGP321/*"},{ua:"SGP321"}],dpi:[224.7,224.1],bw:3,ac:500},{type:"android",rules:[{mdmh:"TCT/*/ALCATEL ONE TOUCH Fierce/*"},{ua:"ALCATEL ONE TOUCH Fierce"}],dpi:[240,247.5],bw:3,ac:1e3},{type:"android",rules:[{mdmh:"THL/*/thl 5000/*"},{ua:"thl 5000"}],dpi:[480,443.3],bw:3,ac:1e3},{type:"android",rules:[{mdmh:"Fly/*/IQ4412/*"},{ua:"IQ4412"}],dpi:307.9,bw:3,ac:1e3},{type:"android",rules:[{mdmh:"ZTE/*/ZTE Blade L2/*"},{ua:"ZTE Blade L2"}],dpi:240,bw:3,ac:500},{type:"android",rules:[{mdmh:"BENEVE/*/VR518/*"},{ua:"VR518"}],dpi:480,bw:3,ac:500},{type:"ios",rules:[{res:[640,960]}],dpi:[325.1,328.4],bw:4,ac:1e3},{type:"ios",rules:[{res:[640,1136]}],dpi:[317.1,320.2],bw:3,ac:1e3},{type:"ios",rules:[{res:[750,1334]}],dpi:326.4,bw:4,ac:1e3},{type:"ios",rules:[{res:[1242,2208]}],dpi:[453.6,458.4],bw:4,ac:1e3},{type:"ios",rules:[{res:[1125,2001]}],dpi:[410.9,415.4],bw:4,ac:1e3},{type:"ios",rules:[{res:[1125,2436]}],dpi:458,bw:4,ac:1e3}],he={format:1,last_updated:"2018-12-10T17:01:42Z",devices:ce};o.prototype.getDeviceParams=function(){return this.deviceParams},o.prototype.recalculateDeviceParams_=function(){var e=this.calcDeviceParams_();e?(this.deviceParams=e,this.onDeviceParamsUpdated&&this.onDeviceParamsUpdated(this.deviceParams)):console.error("Failed to recalculate device parameters.")},o.prototype.calcDeviceParams_=function(){var e=this.dpdb;if(!e)return console.error("DPDB not available."),null;if(1!=e.format)return console.error("DPDB has unexpected format version."),null;if(!e.devices||!e.devices.length)return console.error("DPDB does not have a devices section."),null;var t=navigator.userAgent||navigator.vendor||window.opera,i=x(),r=L();if(!e.devices)return console.error("DPDB has no devices section."),null;for(var n=0;n1?(Z("fusion-pose-sensor:invalid:outside-threshold","Invalid timestamps detected: Timestamp from devicemotion outside expected range."),void(this.previousTimestampS=r)):(this.accelerometer.set(-t.x,-t.y,-t.z),C()?this.gyroscope.set(-i.beta,i.alpha,i.gamma):this.gyroscope.set(i.alpha,i.beta,i.gamma),this.isDeviceMotionInRadians||this.gyroscope.multiplyScalar(Math.PI/180),this.filter.addAccelMeasurement(this.accelerometer,r),this.filter.addGyroMeasurement(this.gyroscope,r),void(this.previousTimestampS=r))},u.prototype.onOrientationChange_=function(e){this.setScreenTransform_()},u.prototype.onMessage_=function(e){var t=e.data;if(t&&t.type){"devicemotion"===t.type.toLowerCase()&&this.updateDeviceMotion_(t.deviceMotionEvent)}},u.prototype.setScreenTransform_=function(){switch(this.worldToScreenQ.set(0,0,0,1),window.orientation){case 0:break;case 90:this.worldToScreenQ.setFromAxisAngle(new Ae(0,0,1),-Math.PI/2);break;case-90:this.worldToScreenQ.setFromAxisAngle(new Ae(0,0,1),Math.PI/2)}this.inverseWorldToScreenQ.copy(this.worldToScreenQ),this.inverseWorldToScreenQ.inverse()},u.prototype.start=function(){this.onDeviceMotionCallback_=this.onDeviceMotion_.bind(this),this.onOrientationChangeCallback_=this.onOrientationChange_.bind(this),this.onMessageCallback_=this.onMessage_.bind(this),this.onDeviceOrientationCallback_=this.onDeviceOrientation_.bind(this),M()&&W()&&window.addEventListener("message",this.onMessageCallback_),window.addEventListener("orientationchange",this.onOrientationChangeCallback_),this.isWithoutDeviceMotion?window.addEventListener("deviceorientation",this.onDeviceOrientationCallback_):window.addEventListener("devicemotion",this.onDeviceMotionCallback_)},u.prototype.stop=function(){window.removeEventListener("devicemotion",this.onDeviceMotionCallback_),window.removeEventListener("deviceorientation",this.onDeviceOrientationCallback_),window.removeEventListener("orientationchange",this.onOrientationChangeCallback_),window.removeEventListener("message",this.onMessageCallback_)};var de=new Ae(1,0,0),ue=new Ae(0,0,1),pe=new se;pe.setFromAxisAngle(de,-Math.PI/2),pe.multiply((new se).setFromAxisAngle(ue,Math.PI/2));var fe=function(){function e(t){y(this,e),this.config=t,this.sensor=null,this.fusionSensor=null,this._out=new Float32Array(4),this.api=null,this.errors=[],this._sensorQ=new se,this._outQ=new se,this._onSensorRead=this._onSensorRead.bind(this),this._onSensorError=this._onSensorError.bind(this),this.init()}return E(e,[{key:"init",value:function(){var e=null;try{e=new RelativeOrientationSensor({frequency:60,referenceFrame:"screen"}),e.addEventListener("error",this._onSensorError)}catch(e){this.errors.push(e),"SecurityError"===e.name?(console.error("Cannot construct sensors due to the Feature Policy"),console.warn('Attempting to fall back using "devicemotion"; however this will fail in the future without correct permissions.'),this.useDeviceMotion()):"ReferenceError"===e.name?this.useDeviceMotion():console.error(e)}e&&(this.api="sensor",this.sensor=e,this.sensor.addEventListener("reading",this._onSensorRead),this.sensor.start())}},{key:"useDeviceMotion",value:function(){this.api="devicemotion",this.fusionSensor=new u(this.config.K_FILTER,this.config.PREDICTION_TIME_S,this.config.YAW_ONLY,this.config.DEBUG),this.sensor&&(this.sensor.removeEventListener("reading",this._onSensorRead),this.sensor.removeEventListener("error",this._onSensorError),this.sensor=null)}},{key:"getOrientation",value:function(){if(this.fusionSensor)return this.fusionSensor.getOrientation();if(!this.sensor||!this.sensor.quaternion)return this._out[0]=this._out[1]=this._out[2]=0,this._out[3]=1,this._out;var e=this.sensor.quaternion;this._sensorQ.set(e[0],e[1],e[2],e[3]);var t=this._outQ;return t.copy(pe),t.multiply(this._sensorQ),this.config.YAW_ONLY&&(t.x=t.z=0,t.normalize()),this._out[0]=t.x,this._out[1]=t.y,this._out[2]=t.z,this._out[3]=t.w,this._out}},{key:"_onSensorError",value:function(e){this.errors.push(e.error),"NotAllowedError"===e.error.name?console.error("Permission to access sensor was denied"):"NotReadableError"===e.error.name?console.error("Sensor could not be read"):console.error(e.error),this.useDeviceMotion()}},{key:"_onSensorRead",value:function(){}}]),e}();p.prototype.show=function(e){e||this.overlay.parentElement?e&&(this.overlay.parentElement&&this.overlay.parentElement!=e&&this.overlay.parentElement.removeChild(this.overlay),e.appendChild(this.overlay)):document.body.appendChild(this.overlay),this.overlay.style.display="block";var t=this.overlay.querySelector("img"),i=t.style;S()?(i.width="20%",i.marginLeft="40%",i.marginTop="3%"):(i.width="50%",i.marginLeft="25%",i.marginTop="25%")},p.prototype.hide=function(){this.overlay.style.display="none"},p.prototype.showTemporarily=function(e,t){this.show(t),this.timer=setTimeout(this.hide.bind(this),e)},p.prototype.disableShowTemporarily=function(){clearTimeout(this.timer)},p.prototype.update=function(){this.disableShowTemporarily(),!S()&&k()?this.show():this.hide()},p.prototype.loadIcon_=function(){ +this.icon=_("image/svg+xml","")};var me="CardboardV1",ve="WEBVR_CARDBOARD_VIEWER";f.prototype.show=function(e){this.root=e,e.appendChild(this.dialog),this.dialog.querySelector("#"+this.selectedKey).checked=!0,this.dialog.style.display="block"},f.prototype.hide=function(){this.root&&this.root.contains(this.dialog)&&this.root.removeChild(this.dialog),this.dialog.style.display="none"},f.prototype.getCurrentViewer=function(){return s.Viewers[this.selectedKey]},f.prototype.getSelectedKey_=function(){var e=this.dialog.querySelector("input[name=field]:checked");return e?e.id:null},f.prototype.onChange=function(e){this.onChangeCallbacks_.push(e)},f.prototype.fireOnChange_=function(e){for(var t=0;t.5&&(this.noSleepVideo.currentTime=Math.random())}.bind(this)))}return n(e,[{key:"enable",value:function(){s?(this.disable(),this.noSleepTimer=window.setInterval(function(){window.location.href="/",window.setTimeout(window.stop,0)},15e3)):this.noSleepVideo.play()}},{key:"disable",value:function(){s?this.noSleepTimer&&(window.clearInterval(this.noSleepTimer),this.noSleepTimer=null):this.noSleepVideo.pause()}}]),e}();e.exports=a},function(e,t,i){ +e.exports="data:video/mp4;base64,AAAAIGZ0eXBtcDQyAAACAGlzb21pc28yYXZjMW1wNDEAAAAIZnJlZQAACKBtZGF0AAAC8wYF///v3EXpvebZSLeWLNgg2SPu73gyNjQgLSBjb3JlIDE0MiByMjQ3OSBkZDc5YTYxIC0gSC4yNjQvTVBFRy00IEFWQyBjb2RlYyAtIENvcHlsZWZ0IDIwMDMtMjAxNCAtIGh0dHA6Ly93d3cudmlkZW9sYW4ub3JnL3gyNjQuaHRtbCAtIG9wdGlvbnM6IGNhYmFjPTEgcmVmPTEgZGVibG9jaz0xOjA6MCBhbmFseXNlPTB4MToweDExMSBtZT1oZXggc3VibWU9MiBwc3k9MSBwc3lfcmQ9MS4wMDowLjAwIG1peGVkX3JlZj0wIG1lX3JhbmdlPTE2IGNocm9tYV9tZT0xIHRyZWxsaXM9MCA4eDhkY3Q9MCBjcW09MCBkZWFkem9uZT0yMSwxMSBmYXN0X3Bza2lwPTEgY2hyb21hX3FwX29mZnNldD0wIHRocmVhZHM9NiBsb29rYWhlYWRfdGhyZWFkcz0xIHNsaWNlZF90aHJlYWRzPTAgbnI9MCBkZWNpbWF0ZT0xIGludGVybGFjZWQ9MCBibHVyYXlfY29tcGF0PTAgY29uc3RyYWluZWRfaW50cmE9MCBiZnJhbWVzPTMgYl9weXJhbWlkPTIgYl9hZGFwdD0xIGJfYmlhcz0wIGRpcmVjdD0xIHdlaWdodGI9MSBvcGVuX2dvcD0wIHdlaWdodHA9MSBrZXlpbnQ9MzAwIGtleWludF9taW49MzAgc2NlbmVjdXQ9NDAgaW50cmFfcmVmcmVzaD0wIHJjX2xvb2thaGVhZD0xMCByYz1jcmYgbWJ0cmVlPTEgY3JmPTIwLjAgcWNvbXA9MC42MCBxcG1pbj0wIHFwbWF4PTY5IHFwc3RlcD00IHZidl9tYXhyYXRlPTIwMDAwIHZidl9idWZzaXplPTI1MDAwIGNyZl9tYXg9MC4wIG5hbF9ocmQ9bm9uZSBmaWxsZXI9MCBpcF9yYXRpbz0xLjQwIGFxPTE6MS4wMACAAAAAOWWIhAA3//p+C7v8tDDSTjf97w55i3SbRPO4ZY+hkjD5hbkAkL3zpJ6h/LR1CAABzgB1kqqzUorlhQAAAAxBmiQYhn/+qZYADLgAAAAJQZ5CQhX/AAj5IQADQGgcIQADQGgcAAAACQGeYUQn/wALKCEAA0BoHAAAAAkBnmNEJ/8ACykhAANAaBwhAANAaBwAAAANQZpoNExDP/6plgAMuSEAA0BoHAAAAAtBnoZFESwr/wAI+SEAA0BoHCEAA0BoHAAAAAkBnqVEJ/8ACykhAANAaBwAAAAJAZ6nRCf/AAsoIQADQGgcIQADQGgcAAAADUGarDRMQz/+qZYADLghAANAaBwAAAALQZ7KRRUsK/8ACPkhAANAaBwAAAAJAZ7pRCf/AAsoIQADQGgcIQADQGgcAAAACQGe60Qn/wALKCEAA0BoHAAAAA1BmvA0TEM//qmWAAy5IQADQGgcIQADQGgcAAAAC0GfDkUVLCv/AAj5IQADQGgcAAAACQGfLUQn/wALKSEAA0BoHCEAA0BoHAAAAAkBny9EJ/8ACyghAANAaBwAAAANQZs0NExDP/6plgAMuCEAA0BoHAAAAAtBn1JFFSwr/wAI+SEAA0BoHCEAA0BoHAAAAAkBn3FEJ/8ACyghAANAaBwAAAAJAZ9zRCf/AAsoIQADQGgcIQADQGgcAAAADUGbeDRMQz/+qZYADLkhAANAaBwAAAALQZ+WRRUsK/8ACPghAANAaBwhAANAaBwAAAAJAZ+1RCf/AAspIQADQGgcAAAACQGft0Qn/wALKSEAA0BoHCEAA0BoHAAAAA1Bm7w0TEM//qmWAAy4IQADQGgcAAAAC0Gf2kUVLCv/AAj5IQADQGgcAAAACQGf+UQn/wALKCEAA0BoHCEAA0BoHAAAAAkBn/tEJ/8ACykhAANAaBwAAAANQZvgNExDP/6plgAMuSEAA0BoHCEAA0BoHAAAAAtBnh5FFSwr/wAI+CEAA0BoHAAAAAkBnj1EJ/8ACyghAANAaBwhAANAaBwAAAAJAZ4/RCf/AAspIQADQGgcAAAADUGaJDRMQz/+qZYADLghAANAaBwAAAALQZ5CRRUsK/8ACPkhAANAaBwhAANAaBwAAAAJAZ5hRCf/AAsoIQADQGgcAAAACQGeY0Qn/wALKSEAA0BoHCEAA0BoHAAAAA1Bmmg0TEM//qmWAAy5IQADQGgcAAAAC0GehkUVLCv/AAj5IQADQGgcIQADQGgcAAAACQGepUQn/wALKSEAA0BoHAAAAAkBnqdEJ/8ACyghAANAaBwAAAANQZqsNExDP/6plgAMuCEAA0BoHCEAA0BoHAAAAAtBnspFFSwr/wAI+SEAA0BoHAAAAAkBnulEJ/8ACyghAANAaBwhAANAaBwAAAAJAZ7rRCf/AAsoIQADQGgcAAAADUGa8DRMQz/+qZYADLkhAANAaBwhAANAaBwAAAALQZ8ORRUsK/8ACPkhAANAaBwAAAAJAZ8tRCf/AAspIQADQGgcIQADQGgcAAAACQGfL0Qn/wALKCEAA0BoHAAAAA1BmzQ0TEM//qmWAAy4IQADQGgcAAAAC0GfUkUVLCv/AAj5IQADQGgcIQADQGgcAAAACQGfcUQn/wALKCEAA0BoHAAAAAkBn3NEJ/8ACyghAANAaBwhAANAaBwAAAANQZt4NExC//6plgAMuSEAA0BoHAAAAAtBn5ZFFSwr/wAI+CEAA0BoHCEAA0BoHAAAAAkBn7VEJ/8ACykhAANAaBwAAAAJAZ+3RCf/AAspIQADQGgcAAAADUGbuzRMQn/+nhAAYsAhAANAaBwhAANAaBwAAAAJQZ/aQhP/AAspIQADQGgcAAAACQGf+UQn/wALKCEAA0BoHCEAA0BoHCEAA0BoHCEAA0BoHCEAA0BoHCEAA0BoHAAACiFtb292AAAAbG12aGQAAAAA1YCCX9WAgl8AAAPoAAAH/AABAAABAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAAAAGGlvZHMAAAAAEICAgAcAT////v7/AAAF+XRyYWsAAABcdGtoZAAAAAPVgIJf1YCCXwAAAAEAAAAAAAAH0AAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAEAAAAAAygAAAMoAAAAAACRlZHRzAAAAHGVsc3QAAAAAAAAAAQAAB9AAABdwAAEAAAAABXFtZGlhAAAAIG1kaGQAAAAA1YCCX9WAgl8AAV+QAAK/IFXEAAAAAAAtaGRscgAAAAAAAAAAdmlkZQAAAAAAAAAAAAAAAFZpZGVvSGFuZGxlcgAAAAUcbWluZgAAABR2bWhkAAAAAQAAAAAAAAAAAAAAJGRpbmYAAAAcZHJlZgAAAAAAAAABAAAADHVybCAAAAABAAAE3HN0YmwAAACYc3RzZAAAAAAAAAABAAAAiGF2YzEAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAygDKAEgAAABIAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAY//8AAAAyYXZjQwFNQCj/4QAbZ01AKOyho3ySTUBAQFAAAAMAEAAr8gDxgxlgAQAEaO+G8gAAABhzdHRzAAAAAAAAAAEAAAA8AAALuAAAABRzdHNzAAAAAAAAAAEAAAABAAAB8GN0dHMAAAAAAAAAPAAAAAEAABdwAAAAAQAAOpgAAAABAAAXcAAAAAEAAAAAAAAAAQAAC7gAAAABAAA6mAAAAAEAABdwAAAAAQAAAAAAAAABAAALuAAAAAEAADqYAAAAAQAAF3AAAAABAAAAAAAAAAEAAAu4AAAAAQAAOpgAAAABAAAXcAAAAAEAAAAAAAAAAQAAC7gAAAABAAA6mAAAAAEAABdwAAAAAQAAAAAAAAABAAALuAAAAAEAADqYAAAAAQAAF3AAAAABAAAAAAAAAAEAAAu4AAAAAQAAOpgAAAABAAAXcAAAAAEAAAAAAAAAAQAAC7gAAAABAAA6mAAAAAEAABdwAAAAAQAAAAAAAAABAAALuAAAAAEAADqYAAAAAQAAF3AAAAABAAAAAAAAAAEAAAu4AAAAAQAAOpgAAAABAAAXcAAAAAEAAAAAAAAAAQAAC7gAAAABAAA6mAAAAAEAABdwAAAAAQAAAAAAAAABAAALuAAAAAEAADqYAAAAAQAAF3AAAAABAAAAAAAAAAEAAAu4AAAAAQAAOpgAAAABAAAXcAAAAAEAAAAAAAAAAQAAC7gAAAABAAA6mAAAAAEAABdwAAAAAQAAAAAAAAABAAALuAAAAAEAAC7gAAAAAQAAF3AAAAABAAAAAAAAABxzdHNjAAAAAAAAAAEAAAABAAAAAQAAAAEAAAEEc3RzegAAAAAAAAAAAAAAPAAAAzQAAAAQAAAADQAAAA0AAAANAAAAEQAAAA8AAAANAAAADQAAABEAAAAPAAAADQAAAA0AAAARAAAADwAAAA0AAAANAAAAEQAAAA8AAAANAAAADQAAABEAAAAPAAAADQAAAA0AAAARAAAADwAAAA0AAAANAAAAEQAAAA8AAAANAAAADQAAABEAAAAPAAAADQAAAA0AAAARAAAADwAAAA0AAAANAAAAEQAAAA8AAAANAAAADQAAABEAAAAPAAAADQAAAA0AAAARAAAADwAAAA0AAAANAAAAEQAAAA8AAAANAAAADQAAABEAAAANAAAADQAAAQBzdGNvAAAAAAAAADwAAAAwAAADZAAAA3QAAAONAAADoAAAA7kAAAPQAAAD6wAAA/4AAAQXAAAELgAABEMAAARcAAAEbwAABIwAAAShAAAEugAABM0AAATkAAAE/wAABRIAAAUrAAAFQgAABV0AAAVwAAAFiQAABaAAAAW1AAAFzgAABeEAAAX+AAAGEwAABiwAAAY/AAAGVgAABnEAAAaEAAAGnQAABrQAAAbPAAAG4gAABvUAAAcSAAAHJwAAB0AAAAdTAAAHcAAAB4UAAAeeAAAHsQAAB8gAAAfjAAAH9gAACA8AAAgmAAAIQQAACFQAAAhnAAAIhAAACJcAAAMsdHJhawAAAFx0a2hkAAAAA9WAgl/VgIJfAAAAAgAAAAAAAAf8AAAAAAAAAAAAAAABAQAAAAABAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAACsm1kaWEAAAAgbWRoZAAAAADVgIJf1YCCXwAArEQAAWAAVcQAAAAAACdoZGxyAAAAAAAAAABzb3VuAAAAAAAAAAAAAAAAU3RlcmVvAAAAAmNtaW5mAAAAEHNtaGQAAAAAAAAAAAAAACRkaW5mAAAAHGRyZWYAAAAAAAAAAQAAAAx1cmwgAAAAAQAAAidzdGJsAAAAZ3N0c2QAAAAAAAAAAQAAAFdtcDRhAAAAAAAAAAEAAAAAAAAAAAACABAAAAAArEQAAAAAADNlc2RzAAAAAAOAgIAiAAIABICAgBRAFQAAAAADDUAAAAAABYCAgAISEAaAgIABAgAAABhzdHRzAAAAAAAAAAEAAABYAAAEAAAAABxzdHNjAAAAAAAAAAEAAAABAAAAAQAAAAEAAAAUc3RzegAAAAAAAAAGAAAAWAAAAXBzdGNvAAAAAAAAAFgAAAOBAAADhwAAA5oAAAOtAAADswAAA8oAAAPfAAAD5QAAA/gAAAQLAAAEEQAABCgAAAQ9AAAEUAAABFYAAARpAAAEgAAABIYAAASbAAAErgAABLQAAATHAAAE3gAABPMAAAT5AAAFDAAABR8AAAUlAAAFPAAABVEAAAVXAAAFagAABX0AAAWDAAAFmgAABa8AAAXCAAAFyAAABdsAAAXyAAAF+AAABg0AAAYgAAAGJgAABjkAAAZQAAAGZQAABmsAAAZ+AAAGkQAABpcAAAauAAAGwwAABskAAAbcAAAG7wAABwYAAAcMAAAHIQAABzQAAAc6AAAHTQAAB2QAAAdqAAAHfwAAB5IAAAeYAAAHqwAAB8IAAAfXAAAH3QAAB/AAAAgDAAAICQAACCAAAAg1AAAIOwAACE4AAAhhAAAIeAAACH4AAAiRAAAIpAAACKoAAAiwAAAItgAACLwAAAjCAAAAFnVkdGEAAAAObmFtZVN0ZXJlbwAAAHB1ZHRhAAAAaG1ldGEAAAAAAAAAIWhkbHIAAAAAAAAAAG1kaXJhcHBsAAAAAAAAAAAAAAAAO2lsc3QAAAAzqXRvbwAAACtkYXRhAAAAAQAAAABIYW5kQnJha2UgMC4xMC4yIDIwMTUwNjExMDA="}])})})),we=function(e){return e&&e.__esModule&&Object.prototype.hasOwnProperty.call(e,"default")?e.default:e}(ge),ye=1e3,Ee=[0,0,.5,1],be=[.5,0,.5,1],_e=window.requestAnimationFrame,De=window.cancelAnimationFrame;g.prototype.getFrameData=function(e){return H(e,this._getPose(),this)},g.prototype.getPose=function(){return j("VRDisplay.prototype.getPose","VRDisplay.prototype.getFrameData"),this._getPose()},g.prototype.resetPose=function(){return j("VRDisplay.prototype.resetPose"),this._resetPose()},g.prototype.getImmediatePose=function(){return j("VRDisplay.prototype.getImmediatePose","VRDisplay.prototype.getFrameData"),this._getPose()},g.prototype.requestAnimationFrame=function(e){return _e(e)},g.prototype.cancelAnimationFrame=function(e){return De(e)},g.prototype.wrapForFullscreen=function(e){if(M())return e;if(!this.fullscreenWrapper_){this.fullscreenWrapper_=document.createElement("div");var t=["height: "+Math.min(screen.height,screen.width)+"px !important","top: 0 !important","left: 0 !important","right: 0 !important","border: 0","margin: 0","padding: 0","z-index: 999999 !important","position: fixed"];this.fullscreenWrapper_.setAttribute("style",t.join("; ")+";"),this.fullscreenWrapper_.classList.add("webvr-polyfill-fullscreen-wrapper")}if(this.fullscreenElement_==e)return this.fullscreenWrapper_;if(this.fullscreenElement_&&(this.originalParent_?this.originalParent_.appendChild(this.fullscreenElement_):this.fullscreenElement_.parentElement.removeChild(this.fullscreenElement_)),this.fullscreenElement_=e,this.originalParent_=e.parentElement,this.originalParent_||document.body.appendChild(e),!this.fullscreenWrapper_.parentElement){var i=this.fullscreenElement_.parentElement;i.insertBefore(this.fullscreenWrapper_,this.fullscreenElement_),i.removeChild(this.fullscreenElement_)}this.fullscreenWrapper_.insertBefore(this.fullscreenElement_,this.fullscreenWrapper_.firstChild),this.fullscreenElementCachedStyle_=this.fullscreenElement_.getAttribute("style");var r=this;return function(){if(r.fullscreenElement_){var e=["position: absolute","top: 0","left: 0","width: "+Math.max(screen.width,screen.height)+"px","height: "+Math.min(screen.height,screen.width)+"px","border: 0","margin: 0","padding: 0"];r.fullscreenElement_.setAttribute("style",e.join("; ")+";")}}(),this.fullscreenWrapper_},g.prototype.removeFullscreenWrapper=function(){if(this.fullscreenElement_){var e=this.fullscreenElement_;this.fullscreenElementCachedStyle_?e.setAttribute("style",this.fullscreenElementCachedStyle_):e.removeAttribute("style"),this.fullscreenElement_=null,this.fullscreenElementCachedStyle_=null;var t=this.fullscreenWrapper_.parentElement;return this.fullscreenWrapper_.removeChild(e),this.originalParent_===t?t.insertBefore(e,this.fullscreenWrapper_):this.originalParent_&&this.originalParent_.appendChild(e),t.removeChild(this.fullscreenWrapper_),e}},g.prototype.requestPresent=function(e){var t=this.isPresenting,i=this;return e instanceof Array||(j("VRDisplay.prototype.requestPresent with non-array argument","an array of VRLayers as the first argument"),e=[e]),new Promise(function(r,n){if(!i.capabilities.canPresent)return void n(new Error("VRDisplay is not capable of presenting."));if(0==e.length||e.length>i.capabilities.maxLayers)return void n(new Error("Invalid number of layers."));var A=e[0];if(!A.source)return void r();var s=A.leftBounds||Ee,a=A.rightBounds||be;if(t){var o=i.layer_;o.source!==A.source&&(o.source=A.source);for(var l=0;l<4;l++)o.leftBounds[l]=s[l],o.rightBounds[l]=a[l];return i.wrapForFullscreen(i.layer_.source),i.updatePresent_(),void r()}if(i.layer_={predistorted:A.predistorted,source:A.source,leftBounds:s.slice(0),rightBounds:a.slice(0)},i.waitingForPresent_=!1,i.layer_&&i.layer_.source){var c=i.wrapForFullscreen(i.layer_.source),h=function(){var e=Q();i.isPresenting=c===e,i.isPresenting?(screen.orientation&&screen.orientation.lock&&screen.orientation.lock("landscape-primary").catch(function(e){console.error("screen.orientation.lock() failed due to",e.message)}),i.waitingForPresent_=!1,i.beginPresent_(),r()):(screen.orientation&&screen.orientation.unlock&&screen.orientation.unlock(),i.removeFullscreenWrapper(),i.disableWakeLock(),i.endPresent_(),i.removeFullscreenListeners_()),i.fireVRDisplayPresentChange_()},d=function(){i.waitingForPresent_&&(i.removeFullscreenWrapper(),i.removeFullscreenListeners_(),i.disableWakeLock(),i.waitingForPresent_=!1,i.isPresenting=!1,n(new Error("Unable to present.")))};i.addFullscreenListeners_(c,h,d),P(c)?(i.enableWakeLock(),i.waitingForPresent_=!0):(M()||B())&&(i.enableWakeLock(),i.isPresenting=!0,i.beginPresent_(),i.fireVRDisplayPresentChange_(),r())}i.waitingForPresent_||M()||(N(),n(new Error("Unable to present.")))})},g.prototype.exitPresent=function(){var e=this.isPresenting,t=this;return this.isPresenting=!1,this.layer_=null,this.disableWakeLock(),new Promise(function(i,r){e?(!N()&&M()&&(t.endPresent_(),t.fireVRDisplayPresentChange_()),B()&&(t.removeFullscreenWrapper(),t.removeFullscreenListeners_(),t.endPresent_(),t.fireVRDisplayPresentChange_()),i()):r(new Error("Was not presenting to VRDisplay."))})},g.prototype.getLayers=function(){return this.layer_?[this.layer_]:[]},g.prototype.fireVRDisplayPresentChange_=function(){var e=new CustomEvent("vrdisplaypresentchange",{detail:{display:this}});window.dispatchEvent(e)},g.prototype.fireVRDisplayConnect_=function(){var e=new CustomEvent("vrdisplayconnect",{detail:{display:this}});window.dispatchEvent(e)},g.prototype.addFullscreenListeners_=function(e,t,i){this.removeFullscreenListeners_(),this.fullscreenEventTarget_=e,this.fullscreenChangeHandler_=t,this.fullscreenErrorHandler_=i,t&&(document.fullscreenEnabled?e.addEventListener("fullscreenchange",t,!1):document.webkitFullscreenEnabled?e.addEventListener("webkitfullscreenchange",t,!1):document.mozFullScreenEnabled?document.addEventListener("mozfullscreenchange",t,!1):document.msFullscreenEnabled&&e.addEventListener("msfullscreenchange",t,!1)),i&&(document.fullscreenEnabled?e.addEventListener("fullscreenerror",i,!1):document.webkitFullscreenEnabled?e.addEventListener("webkitfullscreenerror",i,!1):document.mozFullScreenEnabled?document.addEventListener("mozfullscreenerror",i,!1):document.msFullscreenEnabled&&e.addEventListener("msfullscreenerror",i,!1))},g.prototype.removeFullscreenListeners_=function(){if(this.fullscreenEventTarget_){var e=this.fullscreenEventTarget_;if(this.fullscreenChangeHandler_){var t=this.fullscreenChangeHandler_;e.removeEventListener("fullscreenchange",t,!1),e.removeEventListener("webkitfullscreenchange",t,!1),document.removeEventListener("mozfullscreenchange",t,!1),e.removeEventListener("msfullscreenchange",t,!1)}if(this.fullscreenErrorHandler_){var i=this.fullscreenErrorHandler_;e.removeEventListener("fullscreenerror",i,!1),e.removeEventListener("webkitfullscreenerror",i,!1),document.removeEventListener("mozfullscreenerror",i,!1),e.removeEventListener("msfullscreenerror",i,!1)}this.fullscreenEventTarget_=null,this.fullscreenChangeHandler_=null,this.fullscreenErrorHandler_=null}},g.prototype.enableWakeLock=function(){this.wakelock_&&this.wakelock_.enable()},g.prototype.disableWakeLock=function(){this.wakelock_&&this.wakelock_.disable()},g.prototype.beginPresent_=function(){},g.prototype.endPresent_=function(){},g.prototype.submitFrame=function(e){},g.prototype.getEyeParameters=function(e){return null};var Me={ADDITIONAL_VIEWERS:[],DEFAULT_VIEWER:"",MOBILE_WAKE_LOCK:!0,DEBUG:!1,DPDB_URL:"https://dpdb.webvr.rocks/dpdb.json",K_FILTER:.98,PREDICTION_TIME_S:.04,CARDBOARD_UI_DISABLED:!1,ROTATE_INSTRUCTIONS_DISABLED:!1,YAW_ONLY:!1,BUFFER_SCALE:.5,DIRTY_SUBMIT_FRAME_BINDINGS:!1},Be={LEFT:"left",RIGHT:"right"};return w.prototype=Object.create(g.prototype),w.prototype._getPose=function(){return{position:null,orientation:this.poseSensor_.getOrientation(),linearVelocity:null,linearAcceleration:null,angularVelocity:null,angularAcceleration:null}},w.prototype._resetPose=function(){this.poseSensor_.resetPose&&this.poseSensor_.resetPose()},w.prototype._getFieldOfView=function(e){var t;if(e==Be.LEFT)t=this.deviceInfo_.getFieldOfViewLeftEye();else{if(e!=Be.RIGHT)return console.error("Invalid eye provided: %s",e),null;t=this.deviceInfo_.getFieldOfViewRightEye()}return t},w.prototype._getEyeOffset=function(e){var t;if(e==Be.LEFT)t=[.5*-this.deviceInfo_.viewer.interLensDistance,0,0];else{if(e!=Be.RIGHT)return console.error("Invalid eye provided: %s",e),null;t=[.5*this.deviceInfo_.viewer.interLensDistance,0,0]}return t},w.prototype.getEyeParameters=function(e){var t=this._getEyeOffset(e),i=this._getFieldOfView(e),r={offset:t,renderWidth:.5*this.deviceInfo_.device.width*this.bufferScale_,renderHeight:this.deviceInfo_.device.height*this.bufferScale_};return Object.defineProperty(r,"fieldOfView",{enumerable:!0,get:function(){return j("VRFieldOfView","VRFrameData's projection matrices"),i}}),r},w.prototype.onDeviceParamsUpdated_=function(e){this.config.DEBUG&&console.log("DPDB reported that device params were updated."),this.deviceInfo_.updateDeviceParams(e),this.distorter_&&this.distorter_.updateDeviceInfo(this.deviceInfo_)},w.prototype.updateBounds_=function(){this.layer_&&this.distorter_&&(this.layer_.leftBounds||this.layer_.rightBounds)&&this.distorter_.setTextureBounds(this.layer_.leftBounds,this.layer_.rightBounds)},w.prototype.beginPresent_=function(){var e=this.layer_.source.getContext("webgl");e||(e=this.layer_.source.getContext("experimental-webgl")),e||(e=this.layer_.source.getContext("webgl2")),e&&(this.layer_.predistorted?this.config.CARDBOARD_UI_DISABLED||(e.canvas.width=x()*this.bufferScale_,e.canvas.height=L()*this.bufferScale_,this.cardboardUI_=new r(e)):(this.config.CARDBOARD_UI_DISABLED||(this.cardboardUI_=new r(e)),this.distorter_=new i(e,this.cardboardUI_,this.config.BUFFER_SCALE,this.config.DIRTY_SUBMIT_FRAME_BINDINGS),this.distorter_.updateDeviceInfo(this.deviceInfo_)),this.cardboardUI_&&this.cardboardUI_.listen(function(e){this.viewerSelector_.show(this.layer_.source.parentElement),e.stopPropagation(),e.preventDefault()}.bind(this),function(e){this.exitPresent(),e.stopPropagation(),e.preventDefault()}.bind(this)),this.rotateInstructions_&&(S()&&k()?this.rotateInstructions_.showTemporarily(3e3,this.layer_.source.parentElement):this.rotateInstructions_.update()),this.orientationHandler=this.onOrientationChange_.bind(this),window.addEventListener("orientationchange",this.orientationHandler),this.vrdisplaypresentchangeHandler=this.updateBounds_.bind(this),window.addEventListener("vrdisplaypresentchange",this.vrdisplaypresentchangeHandler),this.fireVRDisplayDeviceParamsChange_())},w.prototype.endPresent_=function(){this.distorter_&&(this.distorter_.destroy(),this.distorter_=null),this.cardboardUI_&&(this.cardboardUI_.destroy(),this.cardboardUI_=null),this.rotateInstructions_&&this.rotateInstructions_.hide(),this.viewerSelector_.hide(),window.removeEventListener("orientationchange",this.orientationHandler),window.removeEventListener("vrdisplaypresentchange",this.vrdisplaypresentchangeHandler)},w.prototype.updatePresent_=function(){this.endPresent_(),this.beginPresent_()},w.prototype.submitFrame=function(e){if(this.distorter_)this.updateBounds_(),this.distorter_.submitFrame();else if(this.cardboardUI_&&this.layer_){var t=this.layer_.source.getContext("webgl").canvas;t.width==this.lastWidth&&t.height==this.lastHeight||this.cardboardUI_.onResize(),this.lastWidth=t.width,this.lastHeight=t.height,this.cardboardUI_.render()}},w.prototype.onOrientationChange_=function(e){this.viewerSelector_.hide(),this.rotateInstructions_&&this.rotateInstructions_.update(),this.onResize_()},w.prototype.onResize_=function(e){if(this.layer_){var t=this.layer_.source.getContext("webgl"),i=["position: absolute","top: 0","left: 0","width: 100vw","height: 100vh","border: 0","margin: 0","padding: 0px","box-sizing: content-box"];t.canvas.setAttribute("style",i.join("; ")+";"),z(t.canvas)}},w.prototype.onViewerChanged_=function(e){this.deviceInfo_.setViewer(e),this.distorter_&&this.distorter_.updateDeviceInfo(this.deviceInfo_),this.fireVRDisplayDeviceParamsChange_()},w.prototype.fireVRDisplayDeviceParamsChange_=function(){var e=new CustomEvent("vrdisplaydeviceparamschange",{detail:{vrdisplay:this,deviceInfo:this.deviceInfo_}});window.dispatchEvent(e)},w.VRFrameData=m,w.VRDisplay=g,w}()}()}),s=function(e){return e&&e.__esModule&&Object.prototype.hasOwnProperty.call(e,"default")?e.default:e}(A),a={ADDITIONAL_VIEWERS:[],DEFAULT_VIEWER:"",PROVIDE_MOBILE_VRDISPLAY:!0,MOBILE_WAKE_LOCK:!0,DEBUG:!1,DPDB_URL:"https://dpdb.webvr.rocks/dpdb.json",K_FILTER:.98,PREDICTION_TIME_S:.04,CARDBOARD_UI_DISABLED:!1,ROTATE_INSTRUCTIONS_DISABLED:!1,YAW_ONLY:!1,BUFFER_SCALE:.5,DIRTY_SUBMIT_FRAME_BINDINGS:!1};e.prototype.getPolyfillDisplays=function(){if(this._polyfillDisplaysPopulated)return this.polyfillDisplays;if(i()){var e=new s({ADDITIONAL_VIEWERS:this.config.ADDITIONAL_VIEWERS,DEFAULT_VIEWER:this.config.DEFAULT_VIEWER,MOBILE_WAKE_LOCK:this.config.MOBILE_WAKE_LOCK,DEBUG:this.config.DEBUG,DPDB_URL:this.config.DPDB_URL,CARDBOARD_UI_DISABLED:this.config.CARDBOARD_UI_DISABLED,K_FILTER:this.config.K_FILTER,PREDICTION_TIME_S:this.config.PREDICTION_TIME_S,ROTATE_INSTRUCTIONS_DISABLED:this.config.ROTATE_INSTRUCTIONS_DISABLED,YAW_ONLY:this.config.YAW_ONLY,BUFFER_SCALE:this.config.BUFFER_SCALE,DIRTY_SUBMIT_FRAME_BINDINGS:this.config.DIRTY_SUBMIT_FRAME_BINDINGS});this.polyfillDisplays.push(e)}return this._polyfillDisplaysPopulated=!0,this.polyfillDisplays},e.prototype.enable=function(){if(this.enabled=!0,this.hasNative&&this.native.VRFrameData){var e=this.native.VRFrameData,t=new this.native.VRFrameData,i=this.native.VRDisplay.prototype.getFrameData;window.VRDisplay.prototype.getFrameData=function(n){if(n instanceof e)return void i.call(this,n);i.call(this,t),n.pose=t.pose,r(t.leftProjectionMatrix,n.leftProjectionMatrix),r(t.rightProjectionMatrix,n.rightProjectionMatrix),r(t.leftViewMatrix,n.leftViewMatrix),r(t.rightViewMatrix,n.rightViewMatrix)}}navigator.getVRDisplays=this.getVRDisplays.bind(this),window.VRDisplay=s.VRDisplay,window.VRFrameData=s.VRFrameData},e.prototype.getVRDisplays=function(){var e=this;this.config;return this.hasNative?this.native.getVRDisplays.call(navigator).then(function(t){return t.length>0?t:e.getPolyfillDisplays()}):Promise.resolve(this.getPolyfillDisplays())},e.version="0.10.10",e.VRFrameData=s.VRFrameData,e.VRDisplay=s.VRDisplay;var o=Object.freeze({default:e}),l=o&&e||o;return void 0!==t&&t.window&&(t.document||(t.document=t.window.document),t.navigator||(t.navigator=t.window.navigator)),l}); +}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) -},{"process/browser.js":31,"timers":44}],45:[function(_dereq_,module,exports){ -(function (global){(function (){ -!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t():"function"==typeof define&&define.amd?define(t):e.WebVRPolyfill=t()}(this,function(){"use strict";function e(e){this.config=n(n({},A),e),this.polyfillDisplays=[],this.enabled=!1,this.hasNative="getVRDisplays"in navigator,this.native={},this.native.getVRDisplays=navigator.getVRDisplays,this.native.VRFrameData=window.VRFrameData,this.native.VRDisplay=window.VRDisplay,(!this.hasNative||this.config.PROVIDE_MOBILE_VRDISPLAY&&i())&&(this.enable(),this.getVRDisplays().then(function(e){e&&e[0]&&e[0].fireVRDisplayConnect_&&e[0].fireVRDisplayConnect_()}))}var t="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:{},i=function(){return/Android/i.test(navigator.userAgent)||/iPhone|iPad|iPod/i.test(navigator.userAgent)},r=function(e,t){for(var i=0,r=e.length;ie.TEXTURE31){console.error("TEXTURE_BINDING_2D or TEXTURE_BINDING_CUBE_MAP must be followed by a valid texture unit"),r.push(null,null);break}n||(n=e.getParameter(e.ACTIVE_TEXTURE)),e.activeTexture(A),r.push(e.getParameter(s),null);break;case e.ACTIVE_TEXTURE:n=e.getParameter(e.ACTIVE_TEXTURE),r.push(null);break;default:r.push(e.getParameter(s))}}i(e);for(var a=0;ae.TEXTURE31)break;e.activeTexture(A),e.bindTexture(e.TEXTURE_2D,o);break;case e.TEXTURE_BINDING_CUBE_MAP:var A=t[++a];if(Ae.TEXTURE31)break;e.activeTexture(A),e.bindTexture(e.TEXTURE_CUBE_MAP,o);break;case e.VIEWPORT:e.viewport(o[0],o[1],o[2],o[3]);break;case e.BLEND:case e.CULL_FACE:case e.DEPTH_TEST:case e.SCISSOR_TEST:case e.STENCIL_TEST:o?e.enable(s):e.disable(s);break;default:console.log("No GL restore behavior for 0x"+s.toString(16))}n&&e.activeTexture(n)}}function i(e,t,i,r){this.gl=e,this.cardboardUI=t,this.bufferScale=i,this.dirtySubmitFrameBindings=r,this.ctxAttribs=e.getContextAttributes(),this.instanceExt=e.getExtension("ANGLE_instanced_arrays"),this.meshWidth=20,this.meshHeight=20,this.bufferWidth=e.drawingBufferWidth,this.bufferHeight=e.drawingBufferHeight,this.realBindFramebuffer=e.bindFramebuffer,this.realEnable=e.enable,this.realDisable=e.disable,this.realColorMask=e.colorMask,this.realClearColor=e.clearColor,this.realViewport=e.viewport,M()||(this.realCanvasWidth=Object.getOwnPropertyDescriptor(e.canvas.__proto__,"width"),this.realCanvasHeight=Object.getOwnPropertyDescriptor(e.canvas.__proto__,"height")),this.isPatched=!1,this.lastBoundFramebuffer=null,this.cullFace=!1,this.depthTest=!1,this.blend=!1,this.scissorTest=!1,this.stencilTest=!1,this.viewport=[0,0,0,0],this.colorMask=[!0,!0,!0,!0],this.clearColor=[0,0,0,0],this.attribs={position:0,texCoord:1},this.program=U(e,$,ee,this.attribs),this.uniforms=k(e,this.program),this.viewportOffsetScale=new Float32Array(8),this.setTextureBounds(),this.vertexBuffer=e.createBuffer(),this.indexBuffer=e.createBuffer(),this.indexCount=0,this.renderTarget=e.createTexture(),this.framebuffer=e.createFramebuffer(),this.depthStencilBuffer=null,this.depthBuffer=null,this.stencilBuffer=null,this.ctxAttribs.depth&&this.ctxAttribs.stencil?this.depthStencilBuffer=e.createRenderbuffer():this.ctxAttribs.depth?this.depthBuffer=e.createRenderbuffer():this.ctxAttribs.stencil&&(this.stencilBuffer=e.createRenderbuffer()),this.patch(),this.onResize()}function r(e){this.gl=e,this.attribs={position:0},this.program=U(e,te,ie,this.attribs),this.uniforms=k(e,this.program),this.vertexBuffer=e.createBuffer(),this.gearOffset=0,this.gearVertexCount=0,this.arrowOffset=0,this.arrowVertexCount=0,this.projMat=new Float32Array(16),this.listener=null,this.onResize()}function n(e){this.coefficients=e}function a(e){this.width=e.width||P(),this.height=e.height||N(),this.widthMeters=e.widthMeters,this.heightMeters=e.heightMeters,this.bevelMeters=e.bevelMeters}function s(e,t){this.viewer=he.CardboardV2,this.updateDeviceParams(e),this.distortion=new n(this.viewer.distortionCoefficients);for(var i=0;i=200&&i.status<=299?(r.dpdb=JSON.parse(i.response),r.recalculateDeviceParams_()):console.error("Error loading online DPDB!")}),i.send()}}function l(e){this.xdpi=e.xdpi,this.ydpi=e.ydpi,this.bevelMm=e.bevelMm}function c(e,t){this.set(e,t)}function h(e,t){this.kFilter=e,this.isDebug=t,this.currentAccelMeasurement=new c,this.currentGyroMeasurement=new c,this.previousGyroMeasurement=new c,M()?this.filterQ=new oe(-1,0,0,1):this.filterQ=new oe(1,0,0,1),this.previousFilterQ=new oe,this.previousFilterQ.copy(this.filterQ),this.accelQ=new oe,this.isOrientationInitialized=!1,this.estimatedGravity=new Ae,this.measuredGravity=new Ae,this.gyroIntegralQ=new oe}function d(e,t){this.predictionTimeS=e,this.isDebug=t,this.previousQ=new oe,this.previousTimestampS=null,this.deltaQ=new oe,this.outQ=new oe}function u(e,t,i,r){this.yawOnly=i,this.accelerometer=new Ae,this.gyroscope=new Ae,this.filter=new h(e,r),this.posePredictor=new d(t,r),this.isFirefoxAndroid=B(),this.isIOS=M();var n=R();this.isDeviceMotionInRadians=!this.isIOS&&n&&n<66,this.isWithoutDeviceMotion=C()||S(),this.filterToWorldQ=new oe,M()?this.filterToWorldQ.setFromAxisAngle(new Ae(1,0,0),Math.PI/2):this.filterToWorldQ.setFromAxisAngle(new Ae(1,0,0),-Math.PI/2),this.inverseWorldToScreenQ=new oe,this.worldToScreenQ=new oe,this.originalPoseAdjustQ=new oe,this.originalPoseAdjustQ.setFromAxisAngle(new Ae(0,0,1),-window.orientation*Math.PI/180),this.setScreenTransform_(),x()&&this.filterToWorldQ.multiply(this.inverseWorldToScreenQ),this.resetQ=new oe,this.orientationOut_=new Float32Array(4),this.start()}function p(){this.loadIcon_();var e=document.createElement("div"),t=e.style;t.position="fixed",t.top=0,t.right=0,t.bottom=0,t.left=0,t.backgroundColor="gray",t.fontFamily="sans-serif",t.zIndex=1e6;var i=document.createElement("img");i.src=this.icon;var t=i.style;t.marginLeft="25%",t.marginTop="25%",t.width="50%",e.appendChild(i);var r=document.createElement("div"),t=r.style;t.textAlign="center",t.fontSize="16px",t.lineHeight="24px",t.margin="24px 25%",t.width="50%",r.innerHTML="Place your phone into your Cardboard viewer.",e.appendChild(r);var n=document.createElement("div"),t=n.style;t.backgroundColor="#CFD8DC",t.position="fixed",t.bottom=0,t.width="100%",t.height="48px",t.padding="14px 24px",t.boxSizing="border-box",t.color="#656A6B",e.appendChild(n);var a=document.createElement("div");a.style.float="left",a.innerHTML="No Cardboard viewer?";var s=document.createElement("a");s.href="https://www.google.com/get/cardboard/get-cardboard/",s.innerHTML="get one",s.target="_blank";var t=s.style;t.float="right",t.fontWeight=600,t.textTransform="uppercase",t.borderLeft="1px solid gray",t.paddingLeft="24px",t.textDecoration="none",t.color="#656A6B",n.appendChild(a),n.appendChild(s),this.overlay=e,this.text=r,this.hide()}function f(e){try{this.selectedKey=localStorage.getItem(we)}catch(e){console.error("Failed to load viewer profile: %s",e)}this.selectedKey||(this.selectedKey=e||ve),this.dialog=this.createDialog_(s.Viewers),this.root=null,this.onChangeCallbacks_=[]}function m(){this.leftProjectionMatrix=new Float32Array(16),this.leftViewMatrix=new Float32Array(16),this.rightProjectionMatrix=new Float32Array(16),this.rightViewMatrix=new Float32Array(16),this.pose=null}function g(e){Object.defineProperties(this,{hasPosition:{writable:!1,enumerable:!0,value:e.hasPosition},hasExternalDisplay:{writable:!1,enumerable:!0,value:e.hasExternalDisplay},canPresent:{writable:!1,enumerable:!0,value:e.canPresent},maxLayers:{writable:!1,enumerable:!0,value:e.maxLayers},hasOrientation:{enumerable:!0,get:function(){return J("VRDisplayCapabilities.prototype.hasOrientation","VRDisplay.prototype.getFrameData"),e.hasOrientation}}})}function v(e){e=e||{};var t=!("wakelock"in e)||e.wakelock;this.isPolyfilled=!0,this.displayId=be++,this.displayName="",this.depthNear=.01,this.depthFar=1e4,this.isPresenting=!1,Object.defineProperty(this,"isConnected",{get:function(){return J("VRDisplay.prototype.isConnected","VRDisplayCapabilities.prototype.hasExternalDisplay"),!1}}),this.capabilities=new g({hasPosition:!1,hasOrientation:!1,hasExternalDisplay:!1,canPresent:!1,maxLayers:1}),this.stageParameters=null,this.waitingForPresent_=!1,this.layer_=null,this.originalParent_=null,this.fullscreenElement_=null,this.fullscreenWrapper_=null,this.fullscreenElementCachedStyle_=null,this.fullscreenEventTarget_=null,this.fullscreenChangeHandler_=null,this.fullscreenErrorHandler_=null,t&&z()&&(this.wakelock_=new Ee)}function w(e){var t=H({},Te);e=H(t,e||{}),v.call(this,{wakelock:e.MOBILE_WAKE_LOCK}),this.config=e,this.displayName="Cardboard VRDisplay",this.capabilities=new g({hasPosition:!1,hasOrientation:!0,hasExternalDisplay:!1,canPresent:!0,maxLayers:1}),this.stageParameters=null,this.bufferScale_=this.config.BUFFER_SCALE,this.poseSensor_=new ge(this.config),this.distorter_=null,this.cardboardUI_=null,this.dpdb_=new o(this.config.DPDB_URL,this.onDeviceParamsUpdated_.bind(this)),this.deviceInfo_=new s(this.dpdb_.getDeviceParams(),e.ADDITIONAL_VIEWERS),this.viewerSelector_=new f(e.DEFAULT_VIEWER),this.viewerSelector_.onChange(this.onViewerChanged_.bind(this)),this.deviceInfo_.setViewer(this.viewerSelector_.getCurrentViewer()),this.config.ROTATE_INSTRUCTIONS_DISABLED||(this.rotateInstructions_=new p),M()&&window.addEventListener("resize",this.onResize_.bind(this))}var y=function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")},E=function(){function e(e,t){for(var i=0;i1))},P=function(){return Math.max(window.screen.width,window.screen.height)*window.devicePixelRatio},N=function(){return Math.min(window.screen.width,window.screen.height)*window.devicePixelRatio},G=function(e){if(F())return!1;if(e.requestFullscreen)e.requestFullscreen();else if(e.webkitRequestFullscreen)e.webkitRequestFullscreen();else if(e.mozRequestFullScreen)e.mozRequestFullScreen();else{if(!e.msRequestFullscreen)return!1;e.msRequestFullscreen()}return!0},O=function(){if(document.exitFullscreen)document.exitFullscreen();else if(document.webkitExitFullscreen)document.webkitExitFullscreen();else if(document.mozCancelFullScreen)document.mozCancelFullScreen();else{if(!document.msExitFullscreen)return!1;document.msExitFullscreen()}return!0},Q=function(){return document.fullscreenElement||document.webkitFullscreenElement||document.mozFullScreenElement||document.msFullscreenElement},U=function(e,t,i,r){var n=e.createShader(e.VERTEX_SHADER);e.shaderSource(n,t),e.compileShader(n);var a=e.createShader(e.FRAGMENT_SHADER);e.shaderSource(a,i),e.compileShader(a);var s=e.createProgram();e.attachShader(s,n),e.attachShader(s,a);for(var A in r)e.bindAttribLocation(s,r[A],A);return e.linkProgram(s),e.deleteShader(n),e.deleteShader(a),s},k=function(e,t){for(var i={},r=e.getProgramParameter(t,e.ACTIVE_UNIFORMS),n="",a=0;a1?(console.warn("getQuaternionAngle: w > 1"),0):2*Math.acos(e.w)},K=function(){var e={};return function(t,i){void 0===e[t]&&(console.warn("webvr-polyfill: "+i),e[t]=!0)}}(),J=function(e,t){K(e,e+" has been deprecated. This may not work on native WebVR displays. "+(t?"Please use "+t+" instead.":""))},q=e,$=["attribute vec2 position;","attribute vec3 texCoord;","varying vec2 vTexCoord;","uniform vec4 viewportOffsetScale[2];","void main() {"," vec4 viewport = viewportOffsetScale[int(texCoord.z)];"," vTexCoord = (texCoord.xy * viewport.zw) + viewport.xy;"," gl_Position = vec4( position, 1.0, 1.0 );","}"].join("\n"),ee=["precision mediump float;","uniform sampler2D diffuse;","varying vec2 vTexCoord;","void main() {"," gl_FragColor = texture2D(diffuse, vTexCoord);","}"].join("\n");i.prototype.destroy=function(){var e=this.gl;this.unpatch(),e.deleteProgram(this.program),e.deleteBuffer(this.vertexBuffer),e.deleteBuffer(this.indexBuffer),e.deleteTexture(this.renderTarget),e.deleteFramebuffer(this.framebuffer),this.depthStencilBuffer&&e.deleteRenderbuffer(this.depthStencilBuffer),this.depthBuffer&&e.deleteRenderbuffer(this.depthBuffer),this.stencilBuffer&&e.deleteRenderbuffer(this.stencilBuffer),this.cardboardUI&&this.cardboardUI.destroy()},i.prototype.onResize=function(){var e=this.gl,t=this,i=[e.RENDERBUFFER_BINDING,e.TEXTURE_BINDING_2D,e.TEXTURE0];q(e,i,function(e){t.realBindFramebuffer.call(e,e.FRAMEBUFFER,null),t.scissorTest&&t.realDisable.call(e,e.SCISSOR_TEST),t.realColorMask.call(e,!0,!0,!0,!0),t.realViewport.call(e,0,0,e.drawingBufferWidth,e.drawingBufferHeight),t.realClearColor.call(e,0,0,0,1),e.clear(e.COLOR_BUFFER_BIT),t.realBindFramebuffer.call(e,e.FRAMEBUFFER,t.framebuffer),e.bindTexture(e.TEXTURE_2D,t.renderTarget),e.texImage2D(e.TEXTURE_2D,0,t.ctxAttribs.alpha?e.RGBA:e.RGB,t.bufferWidth,t.bufferHeight,0,t.ctxAttribs.alpha?e.RGBA:e.RGB,e.UNSIGNED_BYTE,null),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MAG_FILTER,e.LINEAR),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MIN_FILTER,e.LINEAR),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,e.CLAMP_TO_EDGE),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,e.CLAMP_TO_EDGE),e.framebufferTexture2D(e.FRAMEBUFFER,e.COLOR_ATTACHMENT0,e.TEXTURE_2D,t.renderTarget,0),t.ctxAttribs.depth&&t.ctxAttribs.stencil?(e.bindRenderbuffer(e.RENDERBUFFER,t.depthStencilBuffer),e.renderbufferStorage(e.RENDERBUFFER,e.DEPTH_STENCIL,t.bufferWidth,t.bufferHeight),e.framebufferRenderbuffer(e.FRAMEBUFFER,e.DEPTH_STENCIL_ATTACHMENT,e.RENDERBUFFER,t.depthStencilBuffer)):t.ctxAttribs.depth?(e.bindRenderbuffer(e.RENDERBUFFER,t.depthBuffer),e.renderbufferStorage(e.RENDERBUFFER,e.DEPTH_COMPONENT16,t.bufferWidth,t.bufferHeight),e.framebufferRenderbuffer(e.FRAMEBUFFER,e.DEPTH_ATTACHMENT,e.RENDERBUFFER,t.depthBuffer)):t.ctxAttribs.stencil&&(e.bindRenderbuffer(e.RENDERBUFFER,t.stencilBuffer),e.renderbufferStorage(e.RENDERBUFFER,e.STENCIL_INDEX8,t.bufferWidth,t.bufferHeight),e.framebufferRenderbuffer(e.FRAMEBUFFER,e.STENCIL_ATTACHMENT,e.RENDERBUFFER,t.stencilBuffer)),!e.checkFramebufferStatus(e.FRAMEBUFFER)===e.FRAMEBUFFER_COMPLETE&&console.error("Framebuffer incomplete!"),t.realBindFramebuffer.call(e,e.FRAMEBUFFER,t.lastBoundFramebuffer),t.scissorTest&&t.realEnable.call(e,e.SCISSOR_TEST),t.realColorMask.apply(e,t.colorMask),t.realViewport.apply(e,t.viewport),t.realClearColor.apply(e,t.clearColor)}),this.cardboardUI&&this.cardboardUI.onResize()},i.prototype.patch=function(){if(!this.isPatched){var e=this,t=this.gl.canvas,i=this.gl;M()||(t.width=P()*this.bufferScale,t.height=N()*this.bufferScale,Object.defineProperty(t,"width",{configurable:!0,enumerable:!0,get:function(){return e.bufferWidth},set:function(i){e.bufferWidth=i,e.realCanvasWidth.set.call(t,i),e.onResize()}}),Object.defineProperty(t,"height",{configurable:!0,enumerable:!0,get:function(){return e.bufferHeight},set:function(i){e.bufferHeight=i,e.realCanvasHeight.set.call(t,i),e.onResize()}})),this.lastBoundFramebuffer=i.getParameter(i.FRAMEBUFFER_BINDING),null==this.lastBoundFramebuffer&&(this.lastBoundFramebuffer=this.framebuffer,this.gl.bindFramebuffer(i.FRAMEBUFFER,this.framebuffer)),this.gl.bindFramebuffer=function(t,r){e.lastBoundFramebuffer=r||e.framebuffer,e.realBindFramebuffer.call(i,t,e.lastBoundFramebuffer)},this.cullFace=i.getParameter(i.CULL_FACE),this.depthTest=i.getParameter(i.DEPTH_TEST),this.blend=i.getParameter(i.BLEND),this.scissorTest=i.getParameter(i.SCISSOR_TEST),this.stencilTest=i.getParameter(i.STENCIL_TEST),i.enable=function(t){switch(t){case i.CULL_FACE:e.cullFace=!0;break;case i.DEPTH_TEST:e.depthTest=!0;break;case i.BLEND:e.blend=!0;break;case i.SCISSOR_TEST:e.scissorTest=!0;break;case i.STENCIL_TEST:e.stencilTest=!0}e.realEnable.call(i,t)},i.disable=function(t){switch(t){case i.CULL_FACE:e.cullFace=!1;break;case i.DEPTH_TEST:e.depthTest=!1;break;case i.BLEND:e.blend=!1;break;case i.SCISSOR_TEST:e.scissorTest=!1;break;case i.STENCIL_TEST:e.stencilTest=!1}e.realDisable.call(i,t)},this.colorMask=i.getParameter(i.COLOR_WRITEMASK),i.colorMask=function(t,r,n,a){e.colorMask[0]=t,e.colorMask[1]=r,e.colorMask[2]=n,e.colorMask[3]=a,e.realColorMask.call(i,t,r,n,a)},this.clearColor=i.getParameter(i.COLOR_CLEAR_VALUE),i.clearColor=function(t,r,n,a){e.clearColor[0]=t,e.clearColor[1]=r,e.clearColor[2]=n,e.clearColor[3]=a,e.realClearColor.call(i,t,r,n,a)},this.viewport=i.getParameter(i.VIEWPORT),i.viewport=function(t,r,n,a){e.viewport[0]=t,e.viewport[1]=r,e.viewport[2]=n,e.viewport[3]=a,e.realViewport.call(i,t,r,n,a)},this.isPatched=!0,W(t)}},i.prototype.unpatch=function(){if(this.isPatched){var e=this.gl,t=this.gl.canvas;M()||(Object.defineProperty(t,"width",this.realCanvasWidth),Object.defineProperty(t,"height",this.realCanvasHeight)),t.width=this.bufferWidth,t.height=this.bufferHeight,e.bindFramebuffer=this.realBindFramebuffer,e.enable=this.realEnable,e.disable=this.realDisable,e.colorMask=this.realColorMask,e.clearColor=this.realClearColor,e.viewport=this.realViewport,this.lastBoundFramebuffer==this.framebuffer&&e.bindFramebuffer(e.FRAMEBUFFER,null),this.isPatched=!1,setTimeout(function(){W(t)},1)}},i.prototype.setTextureBounds=function(e,t){e||(e=[0,0,.5,1]),t||(t=[.5,0,.5,1]),this.viewportOffsetScale[0]=e[0],this.viewportOffsetScale[1]=e[1],this.viewportOffsetScale[2]=e[2],this.viewportOffsetScale[3]=e[3],this.viewportOffsetScale[4]=t[0],this.viewportOffsetScale[5]=t[1],this.viewportOffsetScale[6]=t[2],this.viewportOffsetScale[7]=t[3]},i.prototype.submitFrame=function(){var e=this.gl,t=this,i=[];if(this.dirtySubmitFrameBindings||i.push(e.CURRENT_PROGRAM,e.ARRAY_BUFFER_BINDING,e.ELEMENT_ARRAY_BUFFER_BINDING,e.TEXTURE_BINDING_2D,e.TEXTURE0),q(e,i,function(e){t.realBindFramebuffer.call(e,e.FRAMEBUFFER,null);var i=0,r=0;t.instanceExt&&(i=e.getVertexAttrib(t.attribs.position,t.instanceExt.VERTEX_ATTRIB_ARRAY_DIVISOR_ANGLE),r=e.getVertexAttrib(t.attribs.texCoord,t.instanceExt.VERTEX_ATTRIB_ARRAY_DIVISOR_ANGLE)),t.cullFace&&t.realDisable.call(e,e.CULL_FACE),t.depthTest&&t.realDisable.call(e,e.DEPTH_TEST),t.blend&&t.realDisable.call(e,e.BLEND),t.scissorTest&&t.realDisable.call(e,e.SCISSOR_TEST),t.stencilTest&&t.realDisable.call(e,e.STENCIL_TEST),t.realColorMask.call(e,!0,!0,!0,!0),t.realViewport.call(e,0,0,e.drawingBufferWidth,e.drawingBufferHeight),(t.ctxAttribs.alpha||M())&&(t.realClearColor.call(e,0,0,0,1),e.clear(e.COLOR_BUFFER_BIT)),e.useProgram(t.program),e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t.indexBuffer),e.bindBuffer(e.ARRAY_BUFFER,t.vertexBuffer),e.enableVertexAttribArray(t.attribs.position),e.enableVertexAttribArray(t.attribs.texCoord),e.vertexAttribPointer(t.attribs.position,2,e.FLOAT,!1,20,0),e.vertexAttribPointer(t.attribs.texCoord,3,e.FLOAT,!1,20,8),t.instanceExt&&(0!=i&&t.instanceExt.vertexAttribDivisorANGLE(t.attribs.position,0),0!=r&&t.instanceExt.vertexAttribDivisorANGLE(t.attribs.texCoord,0)),e.activeTexture(e.TEXTURE0),e.uniform1i(t.uniforms.diffuse,0),e.bindTexture(e.TEXTURE_2D,t.renderTarget),e.uniform4fv(t.uniforms.viewportOffsetScale,t.viewportOffsetScale),e.drawElements(e.TRIANGLES,t.indexCount,e.UNSIGNED_SHORT,0),t.cardboardUI&&t.cardboardUI.renderNoState(),t.realBindFramebuffer.call(t.gl,e.FRAMEBUFFER,t.framebuffer),t.ctxAttribs.preserveDrawingBuffer||(t.realClearColor.call(e,0,0,0,0),e.clear(e.COLOR_BUFFER_BIT)),t.dirtySubmitFrameBindings||t.realBindFramebuffer.call(e,e.FRAMEBUFFER,t.lastBoundFramebuffer),t.cullFace&&t.realEnable.call(e,e.CULL_FACE),t.depthTest&&t.realEnable.call(e,e.DEPTH_TEST),t.blend&&t.realEnable.call(e,e.BLEND),t.scissorTest&&t.realEnable.call(e,e.SCISSOR_TEST),t.stencilTest&&t.realEnable.call(e,e.STENCIL_TEST),t.realColorMask.apply(e,t.colorMask),t.realViewport.apply(e,t.viewport),!t.ctxAttribs.alpha&&t.ctxAttribs.preserveDrawingBuffer||t.realClearColor.apply(e,t.clearColor),t.instanceExt&&(0!=i&&t.instanceExt.vertexAttribDivisorANGLE(t.attribs.position,i),0!=r&&t.instanceExt.vertexAttribDivisorANGLE(t.attribs.texCoord,r))}),M()){var r=e.canvas;r.width==t.bufferWidth&&r.height==t.bufferHeight||(t.bufferWidth=r.width,t.bufferHeight=r.height,t.onResize())}},i.prototype.updateDeviceInfo=function(e){var t=this.gl,i=this,r=[t.ARRAY_BUFFER_BINDING,t.ELEMENT_ARRAY_BUFFER_BINDING];q(t,r,function(t){var r=i.computeMeshVertices_(i.meshWidth,i.meshHeight,e);if(t.bindBuffer(t.ARRAY_BUFFER,i.vertexBuffer),t.bufferData(t.ARRAY_BUFFER,r,t.STATIC_DRAW),!i.indexCount){var n=i.computeMeshIndices_(i.meshWidth,i.meshHeight);t.bindBuffer(t.ELEMENT_ARRAY_BUFFER,i.indexBuffer),t.bufferData(t.ELEMENT_ARRAY_BUFFER,n,t.STATIC_DRAW),i.indexCount=n.length}})},i.prototype.computeMeshVertices_=function(e,t,i){for(var r=new Float32Array(2*e*t*5),n=i.getLeftEyeVisibleTanAngles(),a=i.getLeftEyeNoLensTanAngles(),s=i.getLeftEyeVisibleScreenRect(a),A=0,o=0;o<2;o++){for(var l=0;ln-42&&r.clientXi.clientHeight-42?e(r):r.clientX<42&&r.clientY<42&&t(r)},i.addEventListener("click",this.listener,!1)},r.prototype.onResize=function(){var e=this.gl,t=this,i=[e.ARRAY_BUFFER_BINDING];q(e,i,function(e){function i(e,t){var i=(90-e)*re,r=Math.cos(i),s=Math.sin(i);n.push(ne*r*h+a,ne*s*h+h),n.push(t*r*h+a,t*s*h+h)}function r(t,i){n.push(d+t,e.drawingBufferHeight-d-i)}var n=[],a=e.drawingBufferWidth/2,s=Math.max(screen.width,screen.height)*window.devicePixelRatio,A=e.drawingBufferWidth/s,o=A*window.devicePixelRatio,l=4*o/2,c=42*o,h=28*o/2,d=14*o;n.push(a-l,c),n.push(a-l,e.drawingBufferHeight),n.push(a+l,c),n.push(a+l,e.drawingBufferHeight),t.gearOffset=n.length/2;for(var u=0;u<=6;u++){var p=60*u;i(p,1),i(p+12,1),i(p+20,.75),i(p+40,.75),i(p+48,1)}t.gearVertexCount=n.length/2-t.gearOffset,t.arrowOffset=n.length/2;var f=l/Math.sin(45*re);r(0,h),r(h,0),r(h+f,f),r(f,h+f),r(f,h-f),r(0,h),r(h,2*h),r(h+f,2*h-f),r(f,h-f),r(0,h),r(f,h-l),r(28*o,h-l),r(f,h+l),r(28*o,h+l),t.arrowVertexCount=n.length/2-t.arrowOffset,e.bindBuffer(e.ARRAY_BUFFER,t.vertexBuffer),e.bufferData(e.ARRAY_BUFFER,new Float32Array(n),e.STATIC_DRAW)})},r.prototype.render=function(){ -var e=this.gl,t=this,i=[e.CULL_FACE,e.DEPTH_TEST,e.BLEND,e.SCISSOR_TEST,e.STENCIL_TEST,e.COLOR_WRITEMASK,e.VIEWPORT,e.CURRENT_PROGRAM,e.ARRAY_BUFFER_BINDING];q(e,i,function(e){e.disable(e.CULL_FACE),e.disable(e.DEPTH_TEST),e.disable(e.BLEND),e.disable(e.SCISSOR_TEST),e.disable(e.STENCIL_TEST),e.colorMask(!0,!0,!0,!0),e.viewport(0,0,e.drawingBufferWidth,e.drawingBufferHeight),t.renderNoState()})},r.prototype.renderNoState=function(){var e=this.gl;e.useProgram(this.program),e.bindBuffer(e.ARRAY_BUFFER,this.vertexBuffer),e.enableVertexAttribArray(this.attribs.position),e.vertexAttribPointer(this.attribs.position,2,e.FLOAT,!1,8,0),e.uniform4f(this.uniforms.color,1,1,1,1),V(this.projMat,0,e.drawingBufferWidth,0,e.drawingBufferHeight,.1,1024),e.uniformMatrix4fv(this.uniforms.projectionMat,!1,this.projMat),e.drawArrays(e.TRIANGLE_STRIP,0,4),e.drawArrays(e.TRIANGLE_STRIP,this.gearOffset,this.gearVertexCount),e.drawArrays(e.TRIANGLE_STRIP,this.arrowOffset,this.arrowVertexCount)},n.prototype.distortInverse=function(e){for(var t=0,i=1,r=e-this.distort(t);Math.abs(i-t)>1e-4;){var n=e-this.distort(i),a=i-n*((i-t)/(n-r));t=i,i=a,r=n}return i},n.prototype.distort=function(e){for(var t=e*e,i=0,r=0;r=1)return this.w=a,this.x=i,this.y=r,this.z=n,this;var A=Math.acos(s),o=Math.sqrt(1-s*s);if(Math.abs(o)<.001)return this.w=.5*(a+this.w),this.x=.5*(i+this.x),this.y=.5*(r+this.y),this.z=.5*(n+this.z),this;var l=Math.sin((1-t)*A)/o,c=Math.sin(t*A)/o;return this.w=a*l+this.w*c,this.x=i*l+this.x*c,this.y=r*l+this.y*c,this.z=n*l+this.z*c,this},setFromUnitVectors:function(){var e,t;return function(i,r){return void 0===e&&(e=new Ae),t=i.dot(r)+1,t<1e-6?(t=0,Math.abs(i.x)>Math.abs(i.z)?e.set(-i.y,i.x,0):e.set(0,-i.z,i.y)):e.crossVectors(i,r),this.x=e.x,this.y=e.y,this.z=e.z,this.w=t,this.normalize(),this}}()};var le=new a({widthMeters:.11,heightMeters:.062,bevelMeters:.004}),ce=new a({widthMeters:.1038,heightMeters:.0584,bevelMeters:.004}),he={CardboardV1:new A({id:"CardboardV1",label:"Cardboard I/O 2014",fov:40,interLensDistance:.06,baselineLensDistance:.035,screenLensDistance:.042,distortionCoefficients:[.441,.156],inverseCoefficients:[-.4410035,.42756155,-.4804439,.5460139,-.58821183,.5733938,-.48303202,.33299083,-.17573841,.0651772,-.01488963,.001559834]}),CardboardV2:new A({id:"CardboardV2",label:"Cardboard I/O 2015",fov:60,interLensDistance:.064,baselineLensDistance:.035,screenLensDistance:.039,distortionCoefficients:[.34,.55],inverseCoefficients:[-.33836704,-.18162185,.862655,-1.2462051,1.0560602,-.58208317,.21609078,-.05444823,.009177956,-.0009904169,6183535e-11,-16981803e-13]})};s.prototype.updateDeviceParams=function(e){this.device=this.determineDevice_(e)||this.device},s.prototype.getDevice=function(){return this.device},s.prototype.setViewer=function(e){this.viewer=e,this.distortion=new n(this.viewer.distortionCoefficients)},s.prototype.determineDevice_=function(e){if(!e)return M()?(console.warn("Using fallback iOS device measurements."),ce):(console.warn("Using fallback Android device measurements."),le);var t=.0254/e.xdpi,i=.0254/e.ydpi;return new a({widthMeters:t*P(),heightMeters:i*N(),bevelMeters:.001*e.bevelMm})},s.prototype.getDistortedFieldOfViewLeftEye=function(){var e=this.viewer,t=this.device,i=this.distortion,r=e.screenLensDistance,n=(t.widthMeters-e.interLensDistance)/2,a=e.interLensDistance/2,s=e.baselineLensDistance-t.bevelMeters,A=t.heightMeters-s,o=se*Math.atan(i.distort(n/r)),l=se*Math.atan(i.distort(a/r)),c=se*Math.atan(i.distort(s/r)),h=se*Math.atan(i.distort(A/r));return{leftDegrees:Math.min(o,e.fov),rightDegrees:Math.min(l,e.fov),downDegrees:Math.min(c,e.fov),upDegrees:Math.min(h,e.fov)}},s.prototype.getLeftEyeVisibleTanAngles=function(){var e=this.viewer,t=this.device,i=this.distortion,r=Math.tan(-ae*e.fov),n=Math.tan(ae*e.fov),a=Math.tan(ae*e.fov),s=Math.tan(-ae*e.fov),A=t.widthMeters/4,o=t.heightMeters/2,l=e.baselineLensDistance-t.bevelMeters-o,c=e.interLensDistance/2-A,h=-l,d=e.screenLensDistance,u=i.distort((c-A)/d),p=i.distort((h+o)/d),f=i.distort((c+A)/d),m=i.distort((h-o)/d),g=new Float32Array(4);return g[0]=Math.max(r,u),g[1]=Math.min(n,p),g[2]=Math.min(a,f),g[3]=Math.max(s,m),g},s.prototype.getLeftEyeNoLensTanAngles=function(){var e=this.viewer,t=this.device,i=this.distortion,r=new Float32Array(4),n=i.distortInverse(Math.tan(-ae*e.fov)),a=i.distortInverse(Math.tan(ae*e.fov)),s=i.distortInverse(Math.tan(ae*e.fov)),A=i.distortInverse(Math.tan(-ae*e.fov)),o=t.widthMeters/4,l=t.heightMeters/2,c=e.baselineLensDistance-t.bevelMeters-l,h=e.interLensDistance/2-o,d=-c,u=e.screenLensDistance,p=(h-o)/u,f=(d+l)/u,m=(h+o)/u,g=(d-l)/u;return r[0]=Math.max(n,p),r[1]=Math.min(a,f),r[2]=Math.min(s,m),r[3]=Math.max(A,g),r},s.prototype.getLeftEyeVisibleScreenRect=function(e){var t=this.viewer,i=this.device,r=t.screenLensDistance,n=(i.widthMeters-t.interLensDistance)/2,a=t.baselineLensDistance-i.bevelMeters,s=(e[0]*r+n)/i.widthMeters,A=(e[1]*r+a)/i.heightMeters,o=(e[2]*r+n)/i.widthMeters,l=(e[3]*r+a)/i.heightMeters;return{x:s,y:l,width:o-s,height:A-l}},s.prototype.getFieldOfViewLeftEye=function(e){return e?this.getUndistortedFieldOfViewLeftEye():this.getDistortedFieldOfViewLeftEye()},s.prototype.getFieldOfViewRightEye=function(e){var t=this.getFieldOfViewLeftEye(e);return{leftDegrees:t.rightDegrees,rightDegrees:t.leftDegrees,upDegrees:t.upDegrees,downDegrees:t.downDegrees}},s.prototype.getUndistortedFieldOfViewLeftEye=function(){var e=this.getUndistortedParams_();return{leftDegrees:se*Math.atan(e.outerDist),rightDegrees:se*Math.atan(e.innerDist),downDegrees:se*Math.atan(e.bottomDist),upDegrees:se*Math.atan(e.topDist)}},s.prototype.getUndistortedViewportLeftEye=function(){var e=this.getUndistortedParams_(),t=this.viewer,i=this.device,r=t.screenLensDistance,n=i.widthMeters/r,a=i.heightMeters/r,s=i.width/n,A=i.height/a,o=Math.round((e.eyePosX-e.outerDist)*s),l=Math.round((e.eyePosY-e.bottomDist)*A);return{x:o,y:l,width:Math.round((e.eyePosX+e.innerDist)*s)-o,height:Math.round((e.eyePosY+e.topDist)*A)-l}},s.prototype.getUndistortedParams_=function(){var e=this.viewer,t=this.device,i=this.distortion,r=e.screenLensDistance,n=e.interLensDistance/2/r,a=t.widthMeters/r,s=t.heightMeters/r,A=a/2-n,o=(e.baselineLensDistance-t.bevelMeters)/r,l=e.fov,c=i.distortInverse(Math.tan(ae*l)),h=Math.min(A,c),d=Math.min(n,c),u=Math.min(o,c);return{outerDist:h,innerDist:d,topDist:Math.min(s-o,c),bottomDist:u,eyePosX:A,eyePosY:o}},s.Viewers=he;var de=[{type:"android",rules:[{mdmh:"asus/*/Nexus 7/*"},{ua:"Nexus 7"}],dpi:[320.8,323],bw:3,ac:500},{type:"android",rules:[{mdmh:"asus/*/ASUS_X00PD/*"},{ua:"ASUS_X00PD"}],dpi:245,bw:3,ac:500},{type:"android",rules:[{mdmh:"asus/*/ASUS_X008D/*"},{ua:"ASUS_X008D"}],dpi:282,bw:3,ac:500},{type:"android",rules:[{mdmh:"asus/*/ASUS_Z00AD/*"},{ua:"ASUS_Z00AD"}],dpi:[403,404.6],bw:3,ac:1e3},{type:"android",rules:[{mdmh:"Google/*/Pixel 2 XL/*"},{ua:"Pixel 2 XL"}],dpi:537.9,bw:3,ac:1e3},{type:"android",rules:[{mdmh:"Google/*/Pixel 3 XL/*"},{ua:"Pixel 3 XL"}],dpi:[558.5,553.8],bw:3,ac:1e3},{type:"android",rules:[{mdmh:"Google/*/Pixel XL/*"},{ua:"Pixel XL"}],dpi:[537.9,533],bw:3,ac:1e3},{type:"android",rules:[{mdmh:"Google/*/Pixel 3/*"},{ua:"Pixel 3"}],dpi:442.4,bw:3,ac:1e3},{type:"android",rules:[{mdmh:"Google/*/Pixel 2/*"},{ua:"Pixel 2"}],dpi:441,bw:3,ac:500},{type:"android",rules:[{mdmh:"Google/*/Pixel/*"},{ua:"Pixel"}],dpi:[432.6,436.7],bw:3,ac:1e3},{type:"android",rules:[{mdmh:"HTC/*/HTC6435LVW/*"},{ua:"HTC6435LVW"}],dpi:[449.7,443.3],bw:3,ac:1e3},{type:"android",rules:[{mdmh:"HTC/*/HTC One XL/*"},{ua:"HTC One XL"}],dpi:[315.3,314.6],bw:3,ac:1e3},{type:"android",rules:[{mdmh:"htc/*/Nexus 9/*"},{ua:"Nexus 9"}],dpi:289,bw:3,ac:500},{type:"android",rules:[{mdmh:"HTC/*/HTC One M9/*"},{ua:"HTC One M9"}],dpi:[442.5,443.3],bw:3,ac:500},{type:"android",rules:[{mdmh:"HTC/*/HTC One_M8/*"},{ua:"HTC One_M8"}],dpi:[449.7,447.4],bw:3,ac:500},{type:"android",rules:[{mdmh:"HTC/*/HTC One/*"},{ua:"HTC One"}],dpi:472.8,bw:3,ac:1e3},{type:"android",rules:[{mdmh:"Huawei/*/Nexus 6P/*"},{ua:"Nexus 6P"}],dpi:[515.1,518],bw:3,ac:1e3},{type:"android",rules:[{mdmh:"Huawei/*/BLN-L24/*"},{ua:"HONORBLN-L24"}],dpi:480,bw:4,ac:500},{type:"android",rules:[{mdmh:"Huawei/*/BKL-L09/*"},{ua:"BKL-L09"}],dpi:403,bw:3.47,ac:500},{type:"android",rules:[{mdmh:"LENOVO/*/Lenovo PB2-690Y/*"},{ua:"Lenovo PB2-690Y"}],dpi:[457.2,454.713],bw:3,ac:500},{type:"android",rules:[{mdmh:"LGE/*/Nexus 5X/*"},{ua:"Nexus 5X"}],dpi:[422,419.9],bw:3,ac:1e3},{type:"android",rules:[{mdmh:"LGE/*/LGMS345/*"},{ua:"LGMS345"}],dpi:[221.7,219.1],bw:3,ac:500},{type:"android",rules:[{mdmh:"LGE/*/LG-D800/*"},{ua:"LG-D800"}],dpi:[422,424.1],bw:3,ac:500},{type:"android",rules:[{mdmh:"LGE/*/LG-D850/*"},{ua:"LG-D850"}],dpi:[537.9,541.9],bw:3,ac:500},{type:"android",rules:[{mdmh:"LGE/*/VS985 4G/*"},{ua:"VS985 4G"}],dpi:[537.9,535.6],bw:3,ac:1e3},{type:"android",rules:[{mdmh:"LGE/*/Nexus 5/*"},{ua:"Nexus 5 B"}],dpi:[442.4,444.8],bw:3,ac:1e3},{type:"android",rules:[{mdmh:"LGE/*/Nexus 4/*"},{ua:"Nexus 4"}],dpi:[319.8,318.4],bw:3,ac:1e3},{type:"android",rules:[{mdmh:"LGE/*/LG-P769/*"},{ua:"LG-P769"}],dpi:[240.6,247.5],bw:3,ac:1e3},{type:"android",rules:[{mdmh:"LGE/*/LGMS323/*"},{ua:"LGMS323"}],dpi:[206.6,204.6],bw:3,ac:1e3},{type:"android",rules:[{mdmh:"LGE/*/LGLS996/*"},{ua:"LGLS996"}],dpi:[403.4,401.5],bw:3,ac:1e3},{type:"android",rules:[{mdmh:"Micromax/*/4560MMX/*"},{ua:"4560MMX"}],dpi:[240,219.4],bw:3,ac:1e3},{type:"android",rules:[{mdmh:"Micromax/*/A250/*"},{ua:"Micromax A250"}],dpi:[480,446.4],bw:3,ac:1e3},{type:"android",rules:[{mdmh:"Micromax/*/Micromax AQ4501/*"},{ua:"Micromax AQ4501"}],dpi:240,bw:3,ac:500},{type:"android",rules:[{mdmh:"motorola/*/G5/*"},{ua:"Moto G (5) Plus"}],dpi:[403.4,403],bw:3,ac:1e3},{type:"android",rules:[{mdmh:"motorola/*/DROID RAZR/*"},{ua:"DROID RAZR"}],dpi:[368.1,256.7],bw:3,ac:1e3},{type:"android",rules:[{mdmh:"motorola/*/XT830C/*"},{ua:"XT830C"}],dpi:[254,255.9],bw:3,ac:1e3},{type:"android",rules:[{mdmh:"motorola/*/XT1021/*"},{ua:"XT1021"}],dpi:[254,256.7],bw:3,ac:500},{type:"android",rules:[{mdmh:"motorola/*/XT1023/*"},{ua:"XT1023"}],dpi:[254,256.7],bw:3,ac:500},{type:"android",rules:[{mdmh:"motorola/*/XT1028/*"},{ua:"XT1028"}],dpi:[326.6,327.6],bw:3,ac:1e3},{type:"android",rules:[{mdmh:"motorola/*/XT1034/*"},{ua:"XT1034"}],dpi:[326.6,328.4],bw:3,ac:500},{type:"android",rules:[{mdmh:"motorola/*/XT1053/*"},{ua:"XT1053"}],dpi:[315.3,316.1],bw:3,ac:1e3},{type:"android",rules:[{mdmh:"motorola/*/XT1562/*"},{ua:"XT1562"}],dpi:[403.4,402.7],bw:3,ac:1e3},{type:"android",rules:[{mdmh:"motorola/*/Nexus 6/*"},{ua:"Nexus 6 B"}],dpi:[494.3,489.7],bw:3,ac:1e3},{type:"android",rules:[{mdmh:"motorola/*/XT1063/*"},{ua:"XT1063"}],dpi:[295,296.6],bw:3,ac:1e3},{type:"android",rules:[{mdmh:"motorola/*/XT1064/*"},{ua:"XT1064"}],dpi:[295,295.6],bw:3,ac:500},{type:"android",rules:[{mdmh:"motorola/*/XT1092/*"},{ua:"XT1092"}],dpi:[422,424.1],bw:3,ac:500},{type:"android",rules:[{mdmh:"motorola/*/XT1095/*"},{ua:"XT1095"}],dpi:[422,423.4],bw:3,ac:1e3},{type:"android",rules:[{mdmh:"motorola/*/G4/*"},{ua:"Moto G (4)"}],dpi:401,bw:4,ac:1e3},{type:"android",rules:[{mdmh:"OnePlus/*/A0001/*"},{ua:"A0001"}],dpi:[403.4,401],bw:3,ac:1e3},{type:"android",rules:[{mdmh:"OnePlus/*/ONE E1001/*"},{ua:"ONE E1001"}],dpi:[442.4,441.4],bw:3,ac:1e3},{type:"android",rules:[{mdmh:"OnePlus/*/ONE E1003/*"},{ua:"ONE E1003"}],dpi:[442.4,441.4],bw:3,ac:1e3},{type:"android",rules:[{mdmh:"OnePlus/*/ONE E1005/*"},{ua:"ONE E1005"}],dpi:[442.4,441.4],bw:3,ac:1e3},{type:"android",rules:[{mdmh:"OnePlus/*/ONE A2001/*"},{ua:"ONE A2001"}],dpi:[391.9,405.4],bw:3,ac:1e3},{type:"android",rules:[{mdmh:"OnePlus/*/ONE A2003/*"},{ua:"ONE A2003"}],dpi:[391.9,405.4],bw:3,ac:1e3},{type:"android",rules:[{mdmh:"OnePlus/*/ONE A2005/*"},{ua:"ONE A2005"}],dpi:[391.9,405.4],bw:3,ac:1e3},{type:"android",rules:[{mdmh:"OnePlus/*/ONEPLUS A3000/*"},{ua:"ONEPLUS A3000"}],dpi:401,bw:3,ac:500},{type:"android",rules:[{mdmh:"OnePlus/*/ONEPLUS A3003/*"},{ua:"ONEPLUS A3003"}],dpi:401,bw:3,ac:500},{type:"android",rules:[{mdmh:"OnePlus/*/ONEPLUS A3010/*"},{ua:"ONEPLUS A3010"}],dpi:401,bw:3,ac:500},{type:"android",rules:[{mdmh:"OnePlus/*/ONEPLUS A5000/*"},{ua:"ONEPLUS A5000 "}],dpi:[403.411,399.737],bw:3,ac:1e3},{type:"android",rules:[{mdmh:"OnePlus/*/ONE A5010/*"},{ua:"ONEPLUS A5010"}],dpi:[403,400],bw:2,ac:1e3},{type:"android",rules:[{mdmh:"OnePlus/*/ONEPLUS A6000/*"},{ua:"ONEPLUS A6000"}],dpi:401,bw:3,ac:500},{type:"android",rules:[{mdmh:"OnePlus/*/ONEPLUS A6003/*"},{ua:"ONEPLUS A6003"}],dpi:401,bw:3,ac:500},{type:"android",rules:[{mdmh:"OnePlus/*/ONEPLUS A6010/*"},{ua:"ONEPLUS A6010"}],dpi:401,bw:2,ac:500},{type:"android",rules:[{mdmh:"OnePlus/*/ONEPLUS A6013/*"},{ua:"ONEPLUS A6013"}],dpi:401,bw:2,ac:500},{type:"android",rules:[{mdmh:"OPPO/*/X909/*"},{ua:"X909"}],dpi:[442.4,444.1],bw:3,ac:1e3},{type:"android",rules:[{mdmh:"samsung/*/GT-I9082/*"},{ua:"GT-I9082"}],dpi:[184.7,185.4],bw:3,ac:1e3},{type:"android",rules:[{mdmh:"samsung/*/SM-G360P/*"},{ua:"SM-G360P"}],dpi:[196.7,205.4],bw:3,ac:1e3},{type:"android",rules:[{mdmh:"samsung/*/Nexus S/*"},{ua:"Nexus S"}],dpi:[234.5,229.8],bw:3,ac:1e3},{type:"android",rules:[{mdmh:"samsung/*/GT-I9300/*"},{ua:"GT-I9300"}],dpi:[304.8,303.9],bw:5,ac:500},{type:"android",rules:[{mdmh:"samsung/*/SM-T230NU/*"},{ua:"SM-T230NU"}],dpi:216,bw:3,ac:500},{type:"android",rules:[{mdmh:"samsung/*/SGH-T399/*"},{ua:"SGH-T399"}],dpi:[217.7,231.4],bw:3,ac:1e3},{type:"android",rules:[{mdmh:"samsung/*/SGH-M919/*"},{ua:"SGH-M919"}],dpi:[440.8,437.7],bw:3,ac:1e3},{type:"android",rules:[{mdmh:"samsung/*/SM-N9005/*"},{ua:"SM-N9005"}],dpi:[386.4,387],bw:3,ac:500},{type:"android",rules:[{mdmh:"samsung/*/SAMSUNG-SM-N900A/*"},{ua:"SAMSUNG-SM-N900A"}],dpi:[386.4,387.7],bw:3,ac:1e3},{type:"android",rules:[{mdmh:"samsung/*/GT-I9500/*"},{ua:"GT-I9500"}],dpi:[442.5,443.3],bw:3,ac:500},{type:"android",rules:[{mdmh:"samsung/*/GT-I9505/*"},{ua:"GT-I9505"}],dpi:439.4,bw:4,ac:1e3},{type:"android",rules:[{mdmh:"samsung/*/SM-G900F/*"},{ua:"SM-G900F"}],dpi:[415.6,431.6],bw:5,ac:1e3},{type:"android",rules:[{mdmh:"samsung/*/SM-G900M/*"},{ua:"SM-G900M"}],dpi:[415.6,431.6],bw:5,ac:1e3},{type:"android",rules:[{mdmh:"samsung/*/SM-G800F/*"},{ua:"SM-G800F"}],dpi:326.8,bw:3,ac:1e3},{type:"android",rules:[{mdmh:"samsung/*/SM-G906S/*"},{ua:"SM-G906S"}],dpi:[562.7,572.4],bw:3,ac:1e3},{type:"android",rules:[{mdmh:"samsung/*/GT-I9300/*"},{ua:"GT-I9300"}],dpi:[306.7,304.8],bw:5,ac:1e3},{type:"android",rules:[{mdmh:"samsung/*/SM-T535/*"},{ua:"SM-T535"}],dpi:[142.6,136.4],bw:3,ac:500},{type:"android",rules:[{mdmh:"samsung/*/SM-N920C/*"},{ua:"SM-N920C"}],dpi:[515.1,518.4],bw:3,ac:1e3},{type:"android",rules:[{mdmh:"samsung/*/SM-N920P/*"},{ua:"SM-N920P"}],dpi:[386.3655,390.144],bw:3,ac:1e3},{type:"android",rules:[{mdmh:"samsung/*/SM-N920W8/*"},{ua:"SM-N920W8"}],dpi:[515.1,518.4],bw:3,ac:1e3},{type:"android",rules:[{mdmh:"samsung/*/GT-I9300I/*"},{ua:"GT-I9300I"}],dpi:[304.8,305.8],bw:3,ac:1e3},{type:"android",rules:[{mdmh:"samsung/*/GT-I9195/*"},{ua:"GT-I9195"}],dpi:[249.4,256.7],bw:3,ac:500},{type:"android",rules:[{mdmh:"samsung/*/SPH-L520/*"},{ua:"SPH-L520"}],dpi:[249.4,255.9],bw:3,ac:1e3},{type:"android",rules:[{mdmh:"samsung/*/SAMSUNG-SGH-I717/*"},{ua:"SAMSUNG-SGH-I717"}],dpi:285.8,bw:3,ac:1e3},{type:"android",rules:[{mdmh:"samsung/*/SPH-D710/*"},{ua:"SPH-D710"}],dpi:[217.7,204.2],bw:3,ac:1e3},{type:"android",rules:[{mdmh:"samsung/*/GT-N7100/*"},{ua:"GT-N7100"}],dpi:265.1,bw:3,ac:1e3},{type:"android",rules:[{mdmh:"samsung/*/SCH-I605/*"},{ua:"SCH-I605"}],dpi:265.1,bw:3,ac:1e3},{type:"android",rules:[{mdmh:"samsung/*/Galaxy Nexus/*"},{ua:"Galaxy Nexus"}],dpi:[315.3,314.2],bw:3,ac:1e3},{type:"android",rules:[{mdmh:"samsung/*/SM-N910H/*"},{ua:"SM-N910H"}],dpi:[515.1,518],bw:3,ac:1e3},{type:"android",rules:[{mdmh:"samsung/*/SM-N910C/*"},{ua:"SM-N910C"}],dpi:[515.2,520.2],bw:3,ac:500},{type:"android",rules:[{mdmh:"samsung/*/SM-G130M/*"},{ua:"SM-G130M"}],dpi:[165.9,164.8],bw:3,ac:500},{type:"android",rules:[{mdmh:"samsung/*/SM-G928I/*"},{ua:"SM-G928I"}],dpi:[515.1,518.4],bw:3,ac:1e3},{type:"android",rules:[{mdmh:"samsung/*/SM-G920F/*"},{ua:"SM-G920F"}],dpi:580.6,bw:3,ac:500},{type:"android",rules:[{mdmh:"samsung/*/SM-G920P/*"},{ua:"SM-G920P"}],dpi:[522.5,577],bw:3,ac:1e3},{type:"android",rules:[{mdmh:"samsung/*/SM-G925F/*"},{ua:"SM-G925F"}],dpi:580.6,bw:3,ac:500},{type:"android",rules:[{mdmh:"samsung/*/SM-G925V/*"},{ua:"SM-G925V"}],dpi:[522.5,576.6],bw:3,ac:1e3},{type:"android",rules:[{mdmh:"samsung/*/SM-G930F/*"},{ua:"SM-G930F"}],dpi:576.6,bw:3,ac:1e3},{type:"android",rules:[{mdmh:"samsung/*/SM-G935F/*"},{ua:"SM-G935F"}],dpi:533,bw:3,ac:500},{type:"android",rules:[{mdmh:"samsung/*/SM-G950F/*"},{ua:"SM-G950F"}],dpi:[562.707,565.293],bw:3,ac:500},{type:"android",rules:[{mdmh:"samsung/*/SM-G955U/*"},{ua:"SM-G955U"}],dpi:[522.514,525.762],bw:3,ac:500},{type:"android",rules:[{mdmh:"samsung/*/SM-G955F/*"},{ua:"SM-G955F"}],dpi:[522.514,525.762],bw:3,ac:500},{type:"android",rules:[{mdmh:"samsung/*/SM-G960F/*"},{ua:"SM-G960F"}],dpi:[569.575,571.5],bw:3,ac:1e3},{type:"android",rules:[{mdmh:"samsung/*/SM-G9600/*"},{ua:"SM-G9600"}],dpi:[569.575,571.5],bw:3,ac:1e3},{type:"android",rules:[{mdmh:"samsung/*/SM-G960T/*"},{ua:"SM-G960T"}],dpi:[569.575,571.5],bw:3,ac:1e3},{type:"android",rules:[{mdmh:"samsung/*/SM-G960N/*"},{ua:"SM-G960N"}],dpi:[569.575,571.5],bw:3,ac:1e3},{type:"android",rules:[{mdmh:"samsung/*/SM-G960U/*"},{ua:"SM-G960U"}],dpi:[569.575,571.5],bw:3,ac:1e3},{type:"android",rules:[{mdmh:"samsung/*/SM-G9608/*"},{ua:"SM-G9608"}],dpi:[569.575,571.5],bw:3,ac:1e3},{type:"android",rules:[{mdmh:"samsung/*/SM-G960FD/*"},{ua:"SM-G960FD"}],dpi:[569.575,571.5],bw:3,ac:1e3},{type:"android",rules:[{mdmh:"samsung/*/SM-G960W/*"},{ua:"SM-G960W"}],dpi:[569.575,571.5],bw:3,ac:1e3},{type:"android",rules:[{mdmh:"samsung/*/SM-G965F/*"},{ua:"SM-G965F"}],dpi:529,bw:2,ac:1e3},{type:"android",rules:[{mdmh:"Sony/*/C6903/*"},{ua:"C6903"}],dpi:[442.5,443.3],bw:3,ac:500},{type:"android",rules:[{mdmh:"Sony/*/D6653/*"},{ua:"D6653"}],dpi:[428.6,427.6],bw:3,ac:1e3},{type:"android",rules:[{mdmh:"Sony/*/E6653/*"},{ua:"E6653"}],dpi:[428.6,425.7],bw:3,ac:1e3},{type:"android",rules:[{mdmh:"Sony/*/E6853/*"},{ua:"E6853"}],dpi:[403.4,401.9],bw:3,ac:1e3},{type:"android",rules:[{mdmh:"Sony/*/SGP321/*"},{ua:"SGP321"}],dpi:[224.7,224.1],bw:3,ac:500},{type:"android",rules:[{mdmh:"TCT/*/ALCATEL ONE TOUCH Fierce/*"},{ua:"ALCATEL ONE TOUCH Fierce"}],dpi:[240,247.5],bw:3,ac:1e3},{type:"android",rules:[{mdmh:"THL/*/thl 5000/*"},{ua:"thl 5000"}],dpi:[480,443.3],bw:3,ac:1e3},{type:"android",rules:[{mdmh:"Fly/*/IQ4412/*"},{ua:"IQ4412"}],dpi:307.9,bw:3,ac:1e3},{type:"android",rules:[{mdmh:"ZTE/*/ZTE Blade L2/*"},{ua:"ZTE Blade L2"}],dpi:240,bw:3,ac:500},{type:"android",rules:[{mdmh:"BENEVE/*/VR518/*"},{ua:"VR518"}],dpi:480,bw:3,ac:500},{type:"ios",rules:[{res:[640,960]}],dpi:[325.1,328.4],bw:4,ac:1e3},{type:"ios",rules:[{res:[640,1136]}],dpi:[317.1,320.2],bw:3,ac:1e3},{type:"ios",rules:[{res:[750,1334]}],dpi:326.4,bw:4,ac:1e3},{type:"ios",rules:[{res:[1242,2208]}],dpi:[453.6,458.4],bw:4,ac:1e3},{type:"ios",rules:[{res:[1125,2001]}],dpi:[410.9,415.4],bw:4,ac:1e3},{type:"ios",rules:[{res:[1125,2436]}],dpi:458,bw:4,ac:1e3},{type:"android",rules:[{mdmh:"Huawei/*/EML-L29/*"},{ua:"EML-L29"}],dpi:428,bw:3.45,ac:500},{type:"android",rules:[{mdmh:"Nokia/*/Nokia 7.1/*"},{ua:"Nokia 7.1"}],dpi:[432,431.9],bw:3,ac:500},{type:"ios",rules:[{res:[1242,2688]}],dpi:458,bw:4,ac:1e3},{type:"android",rules:[{mdmh:"samsung/*/SM-G570M/*"},{ua:"SM-G570M"}],dpi:320,bw:3.684,ac:1e3},{type:"android",rules:[{mdmh:"samsung/*/SM-G970F/*"},{ua:"SM-G970F"}],dpi:438,bw:2.281,ac:500},{type:"android",rules:[{mdmh:"samsung/*/SM-G973F/*"},{ua:"SM-G973F"}],dpi:550,bw:2.002,ac:500},{type:"android",rules:[{mdmh:"samsung/*/SM-G975F/*"},{ua:"SM-G975F"}],dpi:522,bw:2.054,ac:500},{type:"android",rules:[{mdmh:"samsung/*/SM-G977F/*"},{ua:"SM-G977F"}],dpi:505,bw:2.334,ac:500},{type:"ios",rules:[{res:[828,1792]}],dpi:326,bw:5,ac:500}],ue={format:1,last_updated:"2019-11-09T17:36:14Z",devices:de};o.prototype.getDeviceParams=function(){return this.deviceParams},o.prototype.recalculateDeviceParams_=function(){var e=this.calcDeviceParams_();e?(this.deviceParams=e,this.onDeviceParamsUpdated&&this.onDeviceParamsUpdated(this.deviceParams)):console.error("Failed to recalculate device parameters.")},o.prototype.calcDeviceParams_=function(){var e=this.dpdb;if(!e)return console.error("DPDB not available."),null;if(1!=e.format)return console.error("DPDB has unexpected format version."),null;if(!e.devices||!e.devices.length)return console.error("DPDB does not have a devices section."),null;var t=navigator.userAgent||navigator.vendor||window.opera,i=P(),r=N();if(!e.devices)return console.error("DPDB has no devices section."),null;for(var n=0;n1?(K("fusion-pose-sensor:invalid:outside-threshold","Invalid timestamps detected: Timestamp from devicemotion outside expected range."),void(this.previousTimestampS=r)):(this.accelerometer.set(-t.x,-t.y,-t.z),i&&(I()?this.gyroscope.set(-i.beta,i.alpha,i.gamma):this.gyroscope.set(i.alpha,i.beta,i.gamma),this.isDeviceMotionInRadians||this.gyroscope.multiplyScalar(Math.PI/180),this.filter.addGyroMeasurement(this.gyroscope,r)),this.filter.addAccelMeasurement(this.accelerometer,r),void(this.previousTimestampS=r))},u.prototype.onOrientationChange_=function(e){this.setScreenTransform_()},u.prototype.onMessage_=function(e){var t=e.data;if(t&&t.type){"devicemotion"===t.type.toLowerCase()&&this.updateDeviceMotion_(t.deviceMotionEvent)}},u.prototype.setScreenTransform_=function(){switch(this.worldToScreenQ.set(0,0,0,1),window.orientation){case 0:break;case 90:this.worldToScreenQ.setFromAxisAngle(new Ae(0,0,1),-Math.PI/2);break;case-90:this.worldToScreenQ.setFromAxisAngle(new Ae(0,0,1),Math.PI/2)}this.inverseWorldToScreenQ.copy(this.worldToScreenQ),this.inverseWorldToScreenQ.inverse()},u.prototype.start=function(){this.onDeviceMotionCallback_=this.onDeviceMotion_.bind(this),this.onOrientationChangeCallback_=this.onOrientationChange_.bind(this),this.onMessageCallback_=this.onMessage_.bind(this),this.onDeviceOrientationCallback_=this.onDeviceOrientation_.bind(this),M()&&Y()&&window.addEventListener("message",this.onMessageCallback_),window.addEventListener("orientationchange",this.onOrientationChangeCallback_),this.isWithoutDeviceMotion?window.addEventListener("deviceorientation",this.onDeviceOrientationCallback_):window.addEventListener("devicemotion",this.onDeviceMotionCallback_)},u.prototype.stop=function(){window.removeEventListener("devicemotion",this.onDeviceMotionCallback_),window.removeEventListener("deviceorientation",this.onDeviceOrientationCallback_),window.removeEventListener("orientationchange",this.onOrientationChangeCallback_),window.removeEventListener("message",this.onMessageCallback_)};var pe=new Ae(1,0,0),fe=new Ae(0,0,1),me=new oe;me.setFromAxisAngle(pe,-Math.PI/2),me.multiply((new oe).setFromAxisAngle(fe,Math.PI/2));var ge=function(){function e(t){y(this,e),this.config=t,this.sensor=null,this.fusionSensor=null,this._out=new Float32Array(4),this.api=null,this.errors=[],this._sensorQ=new oe,this._outQ=new oe,this._onSensorRead=this._onSensorRead.bind(this),this._onSensorError=this._onSensorError.bind(this),this.init()}return E(e,[{key:"init",value:function(){var e=null;try{e=new RelativeOrientationSensor({frequency:60,referenceFrame:"screen"}),e.addEventListener("error",this._onSensorError)}catch(e){this.errors.push(e),"SecurityError"===e.name?(console.error("Cannot construct sensors due to the Feature Policy"),console.warn('Attempting to fall back using "devicemotion"; however this will fail in the future without correct permissions.'),this.useDeviceMotion()):"ReferenceError"===e.name?this.useDeviceMotion():console.error(e)}e&&(this.api="sensor",this.sensor=e, -this.sensor.addEventListener("reading",this._onSensorRead),this.sensor.start())}},{key:"useDeviceMotion",value:function(){this.api="devicemotion",this.fusionSensor=new u(this.config.K_FILTER,this.config.PREDICTION_TIME_S,this.config.YAW_ONLY,this.config.DEBUG),this.sensor&&(this.sensor.removeEventListener("reading",this._onSensorRead),this.sensor.removeEventListener("error",this._onSensorError),this.sensor=null)}},{key:"getOrientation",value:function(){if(this.fusionSensor)return this.fusionSensor.getOrientation();if(!this.sensor||!this.sensor.quaternion)return this._out[0]=this._out[1]=this._out[2]=0,this._out[3]=1,this._out;var e=this.sensor.quaternion;this._sensorQ.set(e[0],e[1],e[2],e[3]);var t=this._outQ;return t.copy(me),t.multiply(this._sensorQ),this.config.YAW_ONLY&&(t.x=t.z=0,t.normalize()),this._out[0]=t.x,this._out[1]=t.y,this._out[2]=t.z,this._out[3]=t.w,this._out}},{key:"_onSensorError",value:function(e){this.errors.push(e.error),"NotAllowedError"===e.error.name?console.error("Permission to access sensor was denied"):"NotReadableError"===e.error.name?console.error("Sensor could not be read"):console.error(e.error),this.useDeviceMotion()}},{key:"_onSensorRead",value:function(){}}]),e}();p.prototype.show=function(e){e||this.overlay.parentElement?e&&(this.overlay.parentElement&&this.overlay.parentElement!=e&&this.overlay.parentElement.removeChild(this.overlay),e.appendChild(this.overlay)):document.body.appendChild(this.overlay),this.overlay.style.display="block";var t=this.overlay.querySelector("img"),i=t.style;x()?(i.width="20%",i.marginLeft="40%",i.marginTop="3%"):(i.width="50%",i.marginLeft="25%",i.marginTop="25%")},p.prototype.hide=function(){this.overlay.style.display="none"},p.prototype.showTemporarily=function(e,t){this.show(t),this.timer=setTimeout(this.hide.bind(this),e)},p.prototype.disableShowTemporarily=function(){clearTimeout(this.timer)},p.prototype.update=function(){this.disableShowTemporarily(),!x()&&z()?this.show():this.hide()},p.prototype.loadIcon_=function(){this.icon=_("image/svg+xml","")};var ve="CardboardV1",we="WEBVR_CARDBOARD_VIEWER";f.prototype.show=function(e){this.root=e,e.appendChild(this.dialog),this.dialog.querySelector("#"+this.selectedKey).checked=!0,this.dialog.style.display="block"},f.prototype.hide=function(){this.root&&this.root.contains(this.dialog)&&this.root.removeChild(this.dialog),this.dialog.style.display="none"},f.prototype.getCurrentViewer=function(){return s.Viewers[this.selectedKey]},f.prototype.getSelectedKey_=function(){var e=this.dialog.querySelector("input[name=field]:checked");return e?e.id:null},f.prototype.onChange=function(e){this.onChangeCallbacks_.push(e)},f.prototype.fireOnChange_=function(e){for(var t=0;t.5&&(this.noSleepVideo.currentTime=Math.random())}.bind(this)))}return n(e,[{key:"enable",value:function(){s?(this.disable(),this.noSleepTimer=window.setInterval(function(){window.location.href="/",window.setTimeout(window.stop,0)},15e3)):this.noSleepVideo.play()}},{key:"disable",value:function(){s?this.noSleepTimer&&(window.clearInterval(this.noSleepTimer),this.noSleepTimer=null):this.noSleepVideo.pause()}}]),e}();e.exports=A},function(e,t,i){ -e.exports="data:video/mp4;base64,AAAAIGZ0eXBtcDQyAAACAGlzb21pc28yYXZjMW1wNDEAAAAIZnJlZQAACKBtZGF0AAAC8wYF///v3EXpvebZSLeWLNgg2SPu73gyNjQgLSBjb3JlIDE0MiByMjQ3OSBkZDc5YTYxIC0gSC4yNjQvTVBFRy00IEFWQyBjb2RlYyAtIENvcHlsZWZ0IDIwMDMtMjAxNCAtIGh0dHA6Ly93d3cudmlkZW9sYW4ub3JnL3gyNjQuaHRtbCAtIG9wdGlvbnM6IGNhYmFjPTEgcmVmPTEgZGVibG9jaz0xOjA6MCBhbmFseXNlPTB4MToweDExMSBtZT1oZXggc3VibWU9MiBwc3k9MSBwc3lfcmQ9MS4wMDowLjAwIG1peGVkX3JlZj0wIG1lX3JhbmdlPTE2IGNocm9tYV9tZT0xIHRyZWxsaXM9MCA4eDhkY3Q9MCBjcW09MCBkZWFkem9uZT0yMSwxMSBmYXN0X3Bza2lwPTEgY2hyb21hX3FwX29mZnNldD0wIHRocmVhZHM9NiBsb29rYWhlYWRfdGhyZWFkcz0xIHNsaWNlZF90aHJlYWRzPTAgbnI9MCBkZWNpbWF0ZT0xIGludGVybGFjZWQ9MCBibHVyYXlfY29tcGF0PTAgY29uc3RyYWluZWRfaW50cmE9MCBiZnJhbWVzPTMgYl9weXJhbWlkPTIgYl9hZGFwdD0xIGJfYmlhcz0wIGRpcmVjdD0xIHdlaWdodGI9MSBvcGVuX2dvcD0wIHdlaWdodHA9MSBrZXlpbnQ9MzAwIGtleWludF9taW49MzAgc2NlbmVjdXQ9NDAgaW50cmFfcmVmcmVzaD0wIHJjX2xvb2thaGVhZD0xMCByYz1jcmYgbWJ0cmVlPTEgY3JmPTIwLjAgcWNvbXA9MC42MCBxcG1pbj0wIHFwbWF4PTY5IHFwc3RlcD00IHZidl9tYXhyYXRlPTIwMDAwIHZidl9idWZzaXplPTI1MDAwIGNyZl9tYXg9MC4wIG5hbF9ocmQ9bm9uZSBmaWxsZXI9MCBpcF9yYXRpbz0xLjQwIGFxPTE6MS4wMACAAAAAOWWIhAA3//p+C7v8tDDSTjf97w55i3SbRPO4ZY+hkjD5hbkAkL3zpJ6h/LR1CAABzgB1kqqzUorlhQAAAAxBmiQYhn/+qZYADLgAAAAJQZ5CQhX/AAj5IQADQGgcIQADQGgcAAAACQGeYUQn/wALKCEAA0BoHAAAAAkBnmNEJ/8ACykhAANAaBwhAANAaBwAAAANQZpoNExDP/6plgAMuSEAA0BoHAAAAAtBnoZFESwr/wAI+SEAA0BoHCEAA0BoHAAAAAkBnqVEJ/8ACykhAANAaBwAAAAJAZ6nRCf/AAsoIQADQGgcIQADQGgcAAAADUGarDRMQz/+qZYADLghAANAaBwAAAALQZ7KRRUsK/8ACPkhAANAaBwAAAAJAZ7pRCf/AAsoIQADQGgcIQADQGgcAAAACQGe60Qn/wALKCEAA0BoHAAAAA1BmvA0TEM//qmWAAy5IQADQGgcIQADQGgcAAAAC0GfDkUVLCv/AAj5IQADQGgcAAAACQGfLUQn/wALKSEAA0BoHCEAA0BoHAAAAAkBny9EJ/8ACyghAANAaBwAAAANQZs0NExDP/6plgAMuCEAA0BoHAAAAAtBn1JFFSwr/wAI+SEAA0BoHCEAA0BoHAAAAAkBn3FEJ/8ACyghAANAaBwAAAAJAZ9zRCf/AAsoIQADQGgcIQADQGgcAAAADUGbeDRMQz/+qZYADLkhAANAaBwAAAALQZ+WRRUsK/8ACPghAANAaBwhAANAaBwAAAAJAZ+1RCf/AAspIQADQGgcAAAACQGft0Qn/wALKSEAA0BoHCEAA0BoHAAAAA1Bm7w0TEM//qmWAAy4IQADQGgcAAAAC0Gf2kUVLCv/AAj5IQADQGgcAAAACQGf+UQn/wALKCEAA0BoHCEAA0BoHAAAAAkBn/tEJ/8ACykhAANAaBwAAAANQZvgNExDP/6plgAMuSEAA0BoHCEAA0BoHAAAAAtBnh5FFSwr/wAI+CEAA0BoHAAAAAkBnj1EJ/8ACyghAANAaBwhAANAaBwAAAAJAZ4/RCf/AAspIQADQGgcAAAADUGaJDRMQz/+qZYADLghAANAaBwAAAALQZ5CRRUsK/8ACPkhAANAaBwhAANAaBwAAAAJAZ5hRCf/AAsoIQADQGgcAAAACQGeY0Qn/wALKSEAA0BoHCEAA0BoHAAAAA1Bmmg0TEM//qmWAAy5IQADQGgcAAAAC0GehkUVLCv/AAj5IQADQGgcIQADQGgcAAAACQGepUQn/wALKSEAA0BoHAAAAAkBnqdEJ/8ACyghAANAaBwAAAANQZqsNExDP/6plgAMuCEAA0BoHCEAA0BoHAAAAAtBnspFFSwr/wAI+SEAA0BoHAAAAAkBnulEJ/8ACyghAANAaBwhAANAaBwAAAAJAZ7rRCf/AAsoIQADQGgcAAAADUGa8DRMQz/+qZYADLkhAANAaBwhAANAaBwAAAALQZ8ORRUsK/8ACPkhAANAaBwAAAAJAZ8tRCf/AAspIQADQGgcIQADQGgcAAAACQGfL0Qn/wALKCEAA0BoHAAAAA1BmzQ0TEM//qmWAAy4IQADQGgcAAAAC0GfUkUVLCv/AAj5IQADQGgcIQADQGgcAAAACQGfcUQn/wALKCEAA0BoHAAAAAkBn3NEJ/8ACyghAANAaBwhAANAaBwAAAANQZt4NExC//6plgAMuSEAA0BoHAAAAAtBn5ZFFSwr/wAI+CEAA0BoHCEAA0BoHAAAAAkBn7VEJ/8ACykhAANAaBwAAAAJAZ+3RCf/AAspIQADQGgcAAAADUGbuzRMQn/+nhAAYsAhAANAaBwhAANAaBwAAAAJQZ/aQhP/AAspIQADQGgcAAAACQGf+UQn/wALKCEAA0BoHCEAA0BoHCEAA0BoHCEAA0BoHCEAA0BoHCEAA0BoHAAACiFtb292AAAAbG12aGQAAAAA1YCCX9WAgl8AAAPoAAAH/AABAAABAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAAAAGGlvZHMAAAAAEICAgAcAT////v7/AAAF+XRyYWsAAABcdGtoZAAAAAPVgIJf1YCCXwAAAAEAAAAAAAAH0AAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAEAAAAAAygAAAMoAAAAAACRlZHRzAAAAHGVsc3QAAAAAAAAAAQAAB9AAABdwAAEAAAAABXFtZGlhAAAAIG1kaGQAAAAA1YCCX9WAgl8AAV+QAAK/IFXEAAAAAAAtaGRscgAAAAAAAAAAdmlkZQAAAAAAAAAAAAAAAFZpZGVvSGFuZGxlcgAAAAUcbWluZgAAABR2bWhkAAAAAQAAAAAAAAAAAAAAJGRpbmYAAAAcZHJlZgAAAAAAAAABAAAADHVybCAAAAABAAAE3HN0YmwAAACYc3RzZAAAAAAAAAABAAAAiGF2YzEAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAygDKAEgAAABIAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAY//8AAAAyYXZjQwFNQCj/4QAbZ01AKOyho3ySTUBAQFAAAAMAEAAr8gDxgxlgAQAEaO+G8gAAABhzdHRzAAAAAAAAAAEAAAA8AAALuAAAABRzdHNzAAAAAAAAAAEAAAABAAAB8GN0dHMAAAAAAAAAPAAAAAEAABdwAAAAAQAAOpgAAAABAAAXcAAAAAEAAAAAAAAAAQAAC7gAAAABAAA6mAAAAAEAABdwAAAAAQAAAAAAAAABAAALuAAAAAEAADqYAAAAAQAAF3AAAAABAAAAAAAAAAEAAAu4AAAAAQAAOpgAAAABAAAXcAAAAAEAAAAAAAAAAQAAC7gAAAABAAA6mAAAAAEAABdwAAAAAQAAAAAAAAABAAALuAAAAAEAADqYAAAAAQAAF3AAAAABAAAAAAAAAAEAAAu4AAAAAQAAOpgAAAABAAAXcAAAAAEAAAAAAAAAAQAAC7gAAAABAAA6mAAAAAEAABdwAAAAAQAAAAAAAAABAAALuAAAAAEAADqYAAAAAQAAF3AAAAABAAAAAAAAAAEAAAu4AAAAAQAAOpgAAAABAAAXcAAAAAEAAAAAAAAAAQAAC7gAAAABAAA6mAAAAAEAABdwAAAAAQAAAAAAAAABAAALuAAAAAEAADqYAAAAAQAAF3AAAAABAAAAAAAAAAEAAAu4AAAAAQAAOpgAAAABAAAXcAAAAAEAAAAAAAAAAQAAC7gAAAABAAA6mAAAAAEAABdwAAAAAQAAAAAAAAABAAALuAAAAAEAAC7gAAAAAQAAF3AAAAABAAAAAAAAABxzdHNjAAAAAAAAAAEAAAABAAAAAQAAAAEAAAEEc3RzegAAAAAAAAAAAAAAPAAAAzQAAAAQAAAADQAAAA0AAAANAAAAEQAAAA8AAAANAAAADQAAABEAAAAPAAAADQAAAA0AAAARAAAADwAAAA0AAAANAAAAEQAAAA8AAAANAAAADQAAABEAAAAPAAAADQAAAA0AAAARAAAADwAAAA0AAAANAAAAEQAAAA8AAAANAAAADQAAABEAAAAPAAAADQAAAA0AAAARAAAADwAAAA0AAAANAAAAEQAAAA8AAAANAAAADQAAABEAAAAPAAAADQAAAA0AAAARAAAADwAAAA0AAAANAAAAEQAAAA8AAAANAAAADQAAABEAAAANAAAADQAAAQBzdGNvAAAAAAAAADwAAAAwAAADZAAAA3QAAAONAAADoAAAA7kAAAPQAAAD6wAAA/4AAAQXAAAELgAABEMAAARcAAAEbwAABIwAAAShAAAEugAABM0AAATkAAAE/wAABRIAAAUrAAAFQgAABV0AAAVwAAAFiQAABaAAAAW1AAAFzgAABeEAAAX+AAAGEwAABiwAAAY/AAAGVgAABnEAAAaEAAAGnQAABrQAAAbPAAAG4gAABvUAAAcSAAAHJwAAB0AAAAdTAAAHcAAAB4UAAAeeAAAHsQAAB8gAAAfjAAAH9gAACA8AAAgmAAAIQQAACFQAAAhnAAAIhAAACJcAAAMsdHJhawAAAFx0a2hkAAAAA9WAgl/VgIJfAAAAAgAAAAAAAAf8AAAAAAAAAAAAAAABAQAAAAABAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAACsm1kaWEAAAAgbWRoZAAAAADVgIJf1YCCXwAArEQAAWAAVcQAAAAAACdoZGxyAAAAAAAAAABzb3VuAAAAAAAAAAAAAAAAU3RlcmVvAAAAAmNtaW5mAAAAEHNtaGQAAAAAAAAAAAAAACRkaW5mAAAAHGRyZWYAAAAAAAAAAQAAAAx1cmwgAAAAAQAAAidzdGJsAAAAZ3N0c2QAAAAAAAAAAQAAAFdtcDRhAAAAAAAAAAEAAAAAAAAAAAACABAAAAAArEQAAAAAADNlc2RzAAAAAAOAgIAiAAIABICAgBRAFQAAAAADDUAAAAAABYCAgAISEAaAgIABAgAAABhzdHRzAAAAAAAAAAEAAABYAAAEAAAAABxzdHNjAAAAAAAAAAEAAAABAAAAAQAAAAEAAAAUc3RzegAAAAAAAAAGAAAAWAAAAXBzdGNvAAAAAAAAAFgAAAOBAAADhwAAA5oAAAOtAAADswAAA8oAAAPfAAAD5QAAA/gAAAQLAAAEEQAABCgAAAQ9AAAEUAAABFYAAARpAAAEgAAABIYAAASbAAAErgAABLQAAATHAAAE3gAABPMAAAT5AAAFDAAABR8AAAUlAAAFPAAABVEAAAVXAAAFagAABX0AAAWDAAAFmgAABa8AAAXCAAAFyAAABdsAAAXyAAAF+AAABg0AAAYgAAAGJgAABjkAAAZQAAAGZQAABmsAAAZ+AAAGkQAABpcAAAauAAAGwwAABskAAAbcAAAG7wAABwYAAAcMAAAHIQAABzQAAAc6AAAHTQAAB2QAAAdqAAAHfwAAB5IAAAeYAAAHqwAAB8IAAAfXAAAH3QAAB/AAAAgDAAAICQAACCAAAAg1AAAIOwAACE4AAAhhAAAIeAAACH4AAAiRAAAIpAAACKoAAAiwAAAItgAACLwAAAjCAAAAFnVkdGEAAAAObmFtZVN0ZXJlbwAAAHB1ZHRhAAAAaG1ldGEAAAAAAAAAIWhkbHIAAAAAAAAAAG1kaXJhcHBsAAAAAAAAAAAAAAAAO2lsc3QAAAAzqXRvbwAAACtkYXRhAAAAAQAAAABIYW5kQnJha2UgMC4xMC4yIDIwMTUwNjExMDA="}])})})),Ee=function(e){return e&&e.__esModule&&Object.prototype.hasOwnProperty.call(e,"default")?e.default:e}(ye),be=1e3,_e=[0,0,.5,1],De=[.5,0,.5,1],Me=window.requestAnimationFrame,Fe=window.cancelAnimationFrame;v.prototype.getFrameData=function(e){return X(e,this._getPose(),this)},v.prototype.getPose=function(){return J("VRDisplay.prototype.getPose","VRDisplay.prototype.getFrameData"),this._getPose()},v.prototype.resetPose=function(){return J("VRDisplay.prototype.resetPose"),this._resetPose()},v.prototype.getImmediatePose=function(){return J("VRDisplay.prototype.getImmediatePose","VRDisplay.prototype.getFrameData"),this._getPose()},v.prototype.requestAnimationFrame=function(e){return Me(e)},v.prototype.cancelAnimationFrame=function(e){return Fe(e)},v.prototype.wrapForFullscreen=function(e){if(M())return e;if(!this.fullscreenWrapper_){this.fullscreenWrapper_=document.createElement("div");var t=["height: "+Math.min(screen.height,screen.width)+"px !important","top: 0 !important","left: 0 !important","right: 0 !important","border: 0","margin: 0","padding: 0","z-index: 999999 !important","position: fixed"];this.fullscreenWrapper_.setAttribute("style",t.join("; ")+";"),this.fullscreenWrapper_.classList.add("webvr-polyfill-fullscreen-wrapper")}if(this.fullscreenElement_==e)return this.fullscreenWrapper_;if(this.fullscreenElement_&&(this.originalParent_?this.originalParent_.appendChild(this.fullscreenElement_):this.fullscreenElement_.parentElement.removeChild(this.fullscreenElement_)),this.fullscreenElement_=e,this.originalParent_=e.parentElement,this.originalParent_||document.body.appendChild(e),!this.fullscreenWrapper_.parentElement){var i=this.fullscreenElement_.parentElement;i.insertBefore(this.fullscreenWrapper_,this.fullscreenElement_),i.removeChild(this.fullscreenElement_)}this.fullscreenWrapper_.insertBefore(this.fullscreenElement_,this.fullscreenWrapper_.firstChild),this.fullscreenElementCachedStyle_=this.fullscreenElement_.getAttribute("style");var r=this;return function(){if(r.fullscreenElement_){var e=["position: absolute","top: 0","left: 0","width: "+Math.max(screen.width,screen.height)+"px","height: "+Math.min(screen.height,screen.width)+"px","border: 0","margin: 0","padding: 0"];r.fullscreenElement_.setAttribute("style",e.join("; ")+";")}}(),this.fullscreenWrapper_},v.prototype.removeFullscreenWrapper=function(){if(this.fullscreenElement_){var e=this.fullscreenElement_;this.fullscreenElementCachedStyle_?e.setAttribute("style",this.fullscreenElementCachedStyle_):e.removeAttribute("style"),this.fullscreenElement_=null,this.fullscreenElementCachedStyle_=null;var t=this.fullscreenWrapper_.parentElement;return this.fullscreenWrapper_.removeChild(e),this.originalParent_===t?t.insertBefore(e,this.fullscreenWrapper_):this.originalParent_&&this.originalParent_.appendChild(e),t.removeChild(this.fullscreenWrapper_),e}},v.prototype.requestPresent=function(e){var t=this.isPresenting,i=this;return e instanceof Array||(J("VRDisplay.prototype.requestPresent with non-array argument","an array of VRLayers as the first argument"),e=[e]),new Promise(function(r,n){if(!i.capabilities.canPresent)return void n(new Error("VRDisplay is not capable of presenting."));if(0==e.length||e.length>i.capabilities.maxLayers)return void n(new Error("Invalid number of layers."));var a=e[0];if(!a.source)return void r();var s=a.leftBounds||_e,A=a.rightBounds||De;if(t){var o=i.layer_;o.source!==a.source&&(o.source=a.source);for(var l=0;l<4;l++)o.leftBounds[l]=s[l],o.rightBounds[l]=A[l];return i.wrapForFullscreen(i.layer_.source),i.updatePresent_(),void r()}if(i.layer_={predistorted:a.predistorted,source:a.source,leftBounds:s.slice(0),rightBounds:A.slice(0)},i.waitingForPresent_=!1,i.layer_&&i.layer_.source){var c=i.wrapForFullscreen(i.layer_.source),h=function(){var e=Q();i.isPresenting=c===e,i.isPresenting?(screen.orientation&&screen.orientation.lock&&screen.orientation.lock("landscape-primary").catch(function(e){console.error("screen.orientation.lock() failed due to",e.message)}),i.waitingForPresent_=!1,i.beginPresent_(),r()):(screen.orientation&&screen.orientation.unlock&&screen.orientation.unlock(),i.removeFullscreenWrapper(),i.disableWakeLock(),i.endPresent_(),i.removeFullscreenListeners_()),i.fireVRDisplayPresentChange_()},d=function(){i.waitingForPresent_&&(i.removeFullscreenWrapper(),i.removeFullscreenListeners_(),i.disableWakeLock(),i.waitingForPresent_=!1,i.isPresenting=!1,n(new Error("Unable to present.")))};i.addFullscreenListeners_(c,h,d),G(c)?(i.enableWakeLock(),i.waitingForPresent_=!0):(M()||F())&&(i.enableWakeLock(),i.isPresenting=!0,i.beginPresent_(),i.fireVRDisplayPresentChange_(),r())}i.waitingForPresent_||M()||(O(),n(new Error("Unable to present.")))})},v.prototype.exitPresent=function(){var e=this.isPresenting,t=this;return this.isPresenting=!1,this.layer_=null,this.disableWakeLock(),new Promise(function(i,r){e?(!O()&&M()&&(t.endPresent_(),t.fireVRDisplayPresentChange_()),F()&&(t.removeFullscreenWrapper(),t.removeFullscreenListeners_(),t.endPresent_(),t.fireVRDisplayPresentChange_()),i()):r(new Error("Was not presenting to VRDisplay."))})},v.prototype.getLayers=function(){return this.layer_?[this.layer_]:[]},v.prototype.fireVRDisplayPresentChange_=function(){var e=new CustomEvent("vrdisplaypresentchange",{detail:{display:this}});window.dispatchEvent(e)},v.prototype.fireVRDisplayConnect_=function(){var e=new CustomEvent("vrdisplayconnect",{detail:{display:this}});window.dispatchEvent(e)},v.prototype.addFullscreenListeners_=function(e,t,i){this.removeFullscreenListeners_(),this.fullscreenEventTarget_=e,this.fullscreenChangeHandler_=t,this.fullscreenErrorHandler_=i,t&&(document.fullscreenEnabled?e.addEventListener("fullscreenchange",t,!1):document.webkitFullscreenEnabled?e.addEventListener("webkitfullscreenchange",t,!1):document.mozFullScreenEnabled?document.addEventListener("mozfullscreenchange",t,!1):document.msFullscreenEnabled&&e.addEventListener("msfullscreenchange",t,!1)),i&&(document.fullscreenEnabled?e.addEventListener("fullscreenerror",i,!1):document.webkitFullscreenEnabled?e.addEventListener("webkitfullscreenerror",i,!1):document.mozFullScreenEnabled?document.addEventListener("mozfullscreenerror",i,!1):document.msFullscreenEnabled&&e.addEventListener("msfullscreenerror",i,!1))},v.prototype.removeFullscreenListeners_=function(){if(this.fullscreenEventTarget_){var e=this.fullscreenEventTarget_;if(this.fullscreenChangeHandler_){var t=this.fullscreenChangeHandler_;e.removeEventListener("fullscreenchange",t,!1),e.removeEventListener("webkitfullscreenchange",t,!1),document.removeEventListener("mozfullscreenchange",t,!1),e.removeEventListener("msfullscreenchange",t,!1)}if(this.fullscreenErrorHandler_){var i=this.fullscreenErrorHandler_;e.removeEventListener("fullscreenerror",i,!1),e.removeEventListener("webkitfullscreenerror",i,!1),document.removeEventListener("mozfullscreenerror",i,!1),e.removeEventListener("msfullscreenerror",i,!1)}this.fullscreenEventTarget_=null,this.fullscreenChangeHandler_=null,this.fullscreenErrorHandler_=null}},v.prototype.enableWakeLock=function(){this.wakelock_&&this.wakelock_.enable()},v.prototype.disableWakeLock=function(){this.wakelock_&&this.wakelock_.disable()},v.prototype.beginPresent_=function(){},v.prototype.endPresent_=function(){},v.prototype.submitFrame=function(e){},v.prototype.getEyeParameters=function(e){return null};var Te={ADDITIONAL_VIEWERS:[],DEFAULT_VIEWER:"",MOBILE_WAKE_LOCK:!0,DEBUG:!1,DPDB_URL:"https://dpdb.webvr.rocks/dpdb.json",K_FILTER:.98,PREDICTION_TIME_S:.04,CARDBOARD_UI_DISABLED:!1,ROTATE_INSTRUCTIONS_DISABLED:!1,YAW_ONLY:!1,BUFFER_SCALE:.5,DIRTY_SUBMIT_FRAME_BINDINGS:!1},Be={LEFT:"left",RIGHT:"right"};return w.prototype=Object.create(v.prototype),w.prototype._getPose=function(){return{position:null,orientation:this.poseSensor_.getOrientation(),linearVelocity:null,linearAcceleration:null,angularVelocity:null,angularAcceleration:null}},w.prototype._resetPose=function(){this.poseSensor_.resetPose&&this.poseSensor_.resetPose()},w.prototype._getFieldOfView=function(e){var t;if(e==Be.LEFT)t=this.deviceInfo_.getFieldOfViewLeftEye();else{if(e!=Be.RIGHT)return console.error("Invalid eye provided: %s",e),null;t=this.deviceInfo_.getFieldOfViewRightEye()}return t},w.prototype._getEyeOffset=function(e){var t;if(e==Be.LEFT)t=[.5*-this.deviceInfo_.viewer.interLensDistance,0,0];else{if(e!=Be.RIGHT)return console.error("Invalid eye provided: %s",e),null;t=[.5*this.deviceInfo_.viewer.interLensDistance,0,0]}return t},w.prototype.getEyeParameters=function(e){var t=this._getEyeOffset(e),i=this._getFieldOfView(e),r={offset:t,renderWidth:.5*this.deviceInfo_.device.width*this.bufferScale_,renderHeight:this.deviceInfo_.device.height*this.bufferScale_};return Object.defineProperty(r,"fieldOfView",{enumerable:!0,get:function(){return J("VRFieldOfView","VRFrameData's projection matrices"),i}}),r},w.prototype.onDeviceParamsUpdated_=function(e){this.config.DEBUG&&console.log("DPDB reported that device params were updated."),this.deviceInfo_.updateDeviceParams(e),this.distorter_&&this.distorter_.updateDeviceInfo(this.deviceInfo_)},w.prototype.updateBounds_=function(){this.layer_&&this.distorter_&&(this.layer_.leftBounds||this.layer_.rightBounds)&&this.distorter_.setTextureBounds(this.layer_.leftBounds,this.layer_.rightBounds)},w.prototype.beginPresent_=function(){var e=this.layer_.source.getContext("webgl");e||(e=this.layer_.source.getContext("experimental-webgl")),e||(e=this.layer_.source.getContext("webgl2")),e&&(this.layer_.predistorted?this.config.CARDBOARD_UI_DISABLED||(e.canvas.width=P()*this.bufferScale_,e.canvas.height=N()*this.bufferScale_,this.cardboardUI_=new r(e)):(this.config.CARDBOARD_UI_DISABLED||(this.cardboardUI_=new r(e)),this.distorter_=new i(e,this.cardboardUI_,this.config.BUFFER_SCALE,this.config.DIRTY_SUBMIT_FRAME_BINDINGS),this.distorter_.updateDeviceInfo(this.deviceInfo_)),this.cardboardUI_&&this.cardboardUI_.listen(function(e){this.viewerSelector_.show(this.layer_.source.parentElement),e.stopPropagation(),e.preventDefault()}.bind(this),function(e){this.exitPresent(),e.stopPropagation(),e.preventDefault()}.bind(this)),this.rotateInstructions_&&(x()&&z()?this.rotateInstructions_.showTemporarily(3e3,this.layer_.source.parentElement):this.rotateInstructions_.update()),this.orientationHandler=this.onOrientationChange_.bind(this),window.addEventListener("orientationchange",this.orientationHandler),this.vrdisplaypresentchangeHandler=this.updateBounds_.bind(this),window.addEventListener("vrdisplaypresentchange",this.vrdisplaypresentchangeHandler),this.fireVRDisplayDeviceParamsChange_())},w.prototype.endPresent_=function(){this.distorter_&&(this.distorter_.destroy(),this.distorter_=null),this.cardboardUI_&&(this.cardboardUI_.destroy(),this.cardboardUI_=null),this.rotateInstructions_&&this.rotateInstructions_.hide(),this.viewerSelector_.hide(),window.removeEventListener("orientationchange",this.orientationHandler),window.removeEventListener("vrdisplaypresentchange",this.vrdisplaypresentchangeHandler)},w.prototype.updatePresent_=function(){this.endPresent_(),this.beginPresent_()},w.prototype.submitFrame=function(e){if(this.distorter_)this.updateBounds_(),this.distorter_.submitFrame();else if(this.cardboardUI_&&this.layer_){var t=this.layer_.source.getContext("webgl");t||(t=this.layer_.source.getContext("experimental-webgl")),t||(t=this.layer_.source.getContext("webgl2"));var i=t.canvas;i.width==this.lastWidth&&i.height==this.lastHeight||this.cardboardUI_.onResize(),this.lastWidth=i.width,this.lastHeight=i.height,this.cardboardUI_.render()}},w.prototype.onOrientationChange_=function(e){this.viewerSelector_.hide(),this.rotateInstructions_&&this.rotateInstructions_.update(),this.onResize_()},w.prototype.onResize_=function(e){if(this.layer_){var t=this.layer_.source.getContext("webgl");t||(t=this.layer_.source.getContext("experimental-webgl")),t||(t=this.layer_.source.getContext("webgl2"));var i=["position: absolute","top: 0","left: 0","width: 100vw","height: 100vh","border: 0","margin: 0","padding: 0px","box-sizing: content-box"];t.canvas.setAttribute("style",i.join("; ")+";"),W(t.canvas)}},w.prototype.onViewerChanged_=function(e){this.deviceInfo_.setViewer(e),this.distorter_&&this.distorter_.updateDeviceInfo(this.deviceInfo_),this.fireVRDisplayDeviceParamsChange_()},w.prototype.fireVRDisplayDeviceParamsChange_=function(){var e=new CustomEvent("vrdisplaydeviceparamschange",{detail:{vrdisplay:this,deviceInfo:this.deviceInfo_}});window.dispatchEvent(e)},w.VRFrameData=m,w.VRDisplay=v,w}()}()}),s=function(e){return e&&e.__esModule&&Object.prototype.hasOwnProperty.call(e,"default")?e.default:e}(a),A={ADDITIONAL_VIEWERS:[],DEFAULT_VIEWER:"",PROVIDE_MOBILE_VRDISPLAY:!0,MOBILE_WAKE_LOCK:!0,DEBUG:!1,DPDB_URL:"https://dpdb.webvr.rocks/dpdb.json",K_FILTER:.98,PREDICTION_TIME_S:.04,CARDBOARD_UI_DISABLED:!1,ROTATE_INSTRUCTIONS_DISABLED:!1,YAW_ONLY:!1,BUFFER_SCALE:.5,DIRTY_SUBMIT_FRAME_BINDINGS:!1};e.prototype.getPolyfillDisplays=function(){if(this._polyfillDisplaysPopulated)return this.polyfillDisplays;if(i()){var e=new s({ADDITIONAL_VIEWERS:this.config.ADDITIONAL_VIEWERS,DEFAULT_VIEWER:this.config.DEFAULT_VIEWER,MOBILE_WAKE_LOCK:this.config.MOBILE_WAKE_LOCK,DEBUG:this.config.DEBUG,DPDB_URL:this.config.DPDB_URL,CARDBOARD_UI_DISABLED:this.config.CARDBOARD_UI_DISABLED,K_FILTER:this.config.K_FILTER,PREDICTION_TIME_S:this.config.PREDICTION_TIME_S,ROTATE_INSTRUCTIONS_DISABLED:this.config.ROTATE_INSTRUCTIONS_DISABLED,YAW_ONLY:this.config.YAW_ONLY,BUFFER_SCALE:this.config.BUFFER_SCALE,DIRTY_SUBMIT_FRAME_BINDINGS:this.config.DIRTY_SUBMIT_FRAME_BINDINGS});this.polyfillDisplays.push(e)}return this._polyfillDisplaysPopulated=!0,this.polyfillDisplays},e.prototype.enable=function(){if(this.enabled=!0,this.hasNative&&this.native.VRFrameData){var e=this.native.VRFrameData,t=new this.native.VRFrameData,i=this.native.VRDisplay.prototype.getFrameData;window.VRDisplay.prototype.getFrameData=function(n){if(n instanceof e)return void i.call(this,n);i.call(this,t),n.pose=t.pose,r(t.leftProjectionMatrix,n.leftProjectionMatrix),r(t.rightProjectionMatrix,n.rightProjectionMatrix),r(t.leftViewMatrix,n.leftViewMatrix),r(t.rightViewMatrix,n.rightViewMatrix)}}navigator.getVRDisplays=this.getVRDisplays.bind(this),window.VRDisplay=s.VRDisplay,window.VRFrameData=s.VRFrameData},e.prototype.getVRDisplays=function(){var e=this;this.config;return this.hasNative?this.native.getVRDisplays.call(navigator).then(function(t){return t.length>0?t:e.getPolyfillDisplays()}):Promise.resolve(this.getPolyfillDisplays())},e.version="0.10.12",e.VRFrameData=s.VRFrameData,e.VRDisplay=s.VRDisplay;var o=Object.freeze({default:e}),l=o&&e||o;return void 0!==t&&t.window&&(t.document||(t.document=t.window.document),t.navigator||(t.navigator=t.window.navigator)),l}); -}).call(this)}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) - -},{}],46:[function(_dereq_,module,exports){ +},{}],49:[function(_dereq_,module,exports){ function idxOf(e,n,r,t){var i=e.indexOf(n,r);return-1===i||i>t?t:i}function isWhitespace(e){return whitespace.test(e)}function pre(e,n,r,t,i){for(var a=[],o=r,s=r;sr&&!isWhitespace(n.charAt(f));)f--;if(f===r)p>r+newlineChar.length&&p--,f=p;else for(p=f;f>r&&isWhitespace(n.charAt(f-newlineChar.length));)f--}if(f>=r){var c=e(n,r,f,s);o.push(c)}r=p}return o}function monospace(e,n,r,t){return{start:n,end:n+Math.min(t,r-n)}}var newline=/\n/,newlineChar="\n",whitespace=/\s/;module.exports=function(e,n){return module.exports.lines(e,n).map(function(n){return e.substring(n.start,n.end)}).join("\n")},module.exports.lines=function(e,n){if(n=n||{},0===n.width&&"nowrap"!==n.mode)return[];e=e||"";var r="number"==typeof n.width?n.width:Number.MAX_VALUE,t=Math.max(0,n.start||0),i="number"==typeof n.end?n.end:e.length,a=n.mode,o=n.measure||monospace;return"pre"===a?pre(o,e,t,i,r):greedy(o,e,t,i,r,a)}; -},{}],47:[function(_dereq_,module,exports){ +},{}],50:[function(_dereq_,module,exports){ "use strict";function forEachArray(e,t){for(var r=0;r0&&(d=setTimeout(function(){if(!c){c=!0,i.abort("timeout");var e=new Error("XMLHttpRequest timeout");e.code="ETIMEDOUT",n(e)}},e.timeout)),i.setRequestHeader)for(u in m)m.hasOwnProperty(u)&&i.setRequestHeader(u,m[u]);else if(e.headers&&!isEmpty(e.headers))throw new Error("Headers cannot be set on an XDomainRequest object");return"responseType"in e&&(i.responseType=e.responseType),"beforeSend"in e&&"function"==typeof e.beforeSend&&e.beforeSend(i),i.send(f||null),i}function getXml(e){try{if("document"===e.responseType)return e.responseXML;var t=e.responseXML&&"parsererror"===e.responseXML.documentElement.nodeName;if(""===e.responseType&&!t)return e.responseXML}catch(e){}return null}function noop(){}var window=_dereq_("global/window"),isFunction=_dereq_("is-function"),parseHeaders=_dereq_("parse-headers"),xtend=_dereq_("xtend");module.exports=createXHR,module.exports.default=createXHR,createXHR.XMLHttpRequest=window.XMLHttpRequest||noop,createXHR.XDomainRequest="withCredentials"in new createXHR.XMLHttpRequest?createXHR.XMLHttpRequest:window.XDomainRequest,forEachArray(["get","put","post","patch","head","delete"],function(e){createXHR["delete"===e?"del":e]=function(t,r,n){return r=initParams(t,r,n),r.method=e.toUpperCase(),_createXHR(r)}}); -},{"global/window":14,"is-function":18,"parse-headers":29,"xtend":49}],48:[function(_dereq_,module,exports){ +},{"global/window":17,"is-function":22,"parse-headers":32,"xtend":52}],51:[function(_dereq_,module,exports){ module.exports=function(){return void 0!==self.DOMParser?function(e){return(new self.DOMParser).parseFromString(e,"application/xml")}:void 0!==self.ActiveXObject&&new self.ActiveXObject("Microsoft.XMLDOM")?function(e){var n=new self.ActiveXObject("Microsoft.XMLDOM");return n.async="false",n.loadXML(e),n}:function(e){var n=document.createElement("div");return n.innerHTML=e,n}}(); -},{}],49:[function(_dereq_,module,exports){ +},{}],52:[function(_dereq_,module,exports){ function extend(){for(var r={},e=0;e dist/aframe-master.js","dist:min":"npm run browserify -s -- --debug -p [ minifyify --map aframe-master.min.js.map --output dist/aframe-master.min.js.map ] -o dist/aframe-master.min.js","docs":"markserv --dir docs --port 9001","preghpages":"node ./scripts/preghpages.js","ghpages":"ghpages -p gh-pages/","lint":"semistandard -v | snazzy","lint:fix":"semistandard --fix","precommit":"npm run lint","prepush":"node scripts/testOnlyCheck.js","prerelease":"node scripts/release.js 1.0.4 1.1.0","start":"npm run dev","start:https":"cross-env SSL=true npm run dev","test":"karma start ./tests/karma.conf.js","test:docs":"node scripts/docsLint.js","test:firefox":"npm test -- --browsers Firefox","test:chrome":"npm test -- --browsers Chrome","test:nobrowser":"NO_BROWSER=true npm test","test:node":"mocha --ui tdd tests/node"},"repository":"aframevr/aframe","license":"MIT","files":["dist/*","docs/**/*","src/**/*","vendor/**/*"],"dependencies":{"custom-event-polyfill":"^1.0.6","debug":"ngokevin/debug#noTimestamp","deep-assign":"^2.0.0","document-register-element":"dmarcos/document-register-element#8ccc532b7f3744be954574caf3072a5fd260ca90","load-bmfont":"^1.2.3","object-assign":"^4.0.1","present":"0.0.6","promise-polyfill":"^3.1.0","super-animejs":"^3.1.0","super-three":"^0.123.1","three-bmfont-text":"dmarcos/three-bmfont-text#1babdf8507c731a18f8af3b807292e2b9740955e","webvr-polyfill":"^0.10.12"},"devDependencies":{"browserify":"^13.1.0","browserify-css":"^0.8.4","browserify-derequire":"^0.9.4","browserify-istanbul":"^2.0.0","budo":"^9.2.0","chai":"^3.5.0","chai-shallow-deep-equal":"^1.4.0","chalk":"^1.1.3","codecov":"^1.0.1","cross-env":"^5.0.1","envify":"^3.4.1","exorcist":"^0.4.0","ghpages":"0.0.8","git-rev":"^0.2.1","glob":"^7.1.1","husky":"^0.11.7","istanbul":"^0.4.5","jsdom":"^9.11.0","karma":"1.4.1","karma-browserify":"^5.1.0","karma-chai-shallow-deep-equal":"0.0.4","karma-chrome-launcher":"^2.0.0","karma-coverage":"^1.1.1","karma-env-preprocessor":"^0.1.1","karma-firefox-launcher":"^1.2.0","karma-mocha":"^1.1.1","karma-mocha-reporter":"^2.1.0","karma-sinon-chai":"1.2.4","lolex":"^1.5.1","markserv":"github:sukima/markserv#feature/fix-broken-websoketio-link","minifyify":"^7.3.3","mocha":"^3.0.2","mozilla-download":"^1.1.1","replace-in-file":"^2.5.3","semistandard":"^9.0.0","shelljs":"^0.7.7","shx":"^0.2.2","sinon":"^1.17.5","sinon-chai":"2.8.0","snazzy":"^5.0.0","too-wordy":"ngokevin/too-wordy","uglifyjs":"^2.4.10","write-good":"^0.9.1"},"link":true,"browserify":{"transform":["browserify-css","envify"]},"semistandard":{"ignore":["build/**","dist/**","examples/**/shaders/*.js","**/vendor/**"]},"keywords":["3d","aframe","cardboard","components","oculus","three","three.js","rift","vive","vr","web-components","webvr"],"browserify-css":{"minify":true},"engines":{"node":">= 4.6.0","npm":"^2.15.9"}} -},{}],51:[function(_dereq_,module,exports){ +},{}],53:[function(_dereq_,module,exports){ +module.exports={"name":"aframe","version":"0.9.2","description":"A web framework for building virtual reality experiences.","homepage":"https://aframe.io/","main":"dist/aframe-master.js","scripts":{"browserify":"browserify src/index.js -s 'AFRAME' -p browserify-derequire","build":"shx mkdir -p build/ && npm run browserify -- --debug -t [envify --INSPECTOR_VERSION dev] -o build/aframe.js","codecov":"codecov","dev":"npm run build && cross-env INSPECTOR_VERSION=dev node ./scripts/budo -t envify","dist":"node scripts/updateVersionLog.js && npm run dist:min && npm run dist:max","dist:max":"npm run browserify -s -- --debug | exorcist dist/aframe-master.js.map > dist/aframe-master.js","dist:min":"npm run browserify -s -- --debug -p [minifyify --map aframe-master.min.js.map --output dist/aframe-master.min.js.map] -o dist/aframe-master.min.js","docs":"markserv --dir docs --port 9001","preghpages":"node ./scripts/preghpages.js","ghpages":"ghpages -p gh-pages/","lint":"semistandard -v | snazzy","lint:fix":"semistandard --fix","precommit":"npm run lint","prepush":"node scripts/testOnlyCheck.js","prerelease":"node scripts/release.js 0.9.1 0.9.2","start":"npm run dev","start:https":"cross-env SSL=true npm run dev","test":"karma start ./tests/karma.conf.js","test:docs":"node scripts/docsLint.js","test:firefox":"npm test -- --browsers Firefox","test:chrome":"npm test -- --browsers Chrome","test:nobrowser":"NO_BROWSER=true npm test","test:node":"mocha --ui tdd tests/node"},"repository":"aframevr/aframe","license":"MIT","files":["dist/*","docs/**/*","src/**/*","vendor/**/*"],"dependencies":{"browserify-css":"^0.8.4","custom-event-polyfill":"^1.0.6","debug":"ngokevin/debug#noTimestamp","deep-assign":"^2.0.0","document-register-element":"dmarcos/document-register-element#8ccc532b7f3744be954574caf3072a5fd260ca90","envify":"^3.4.1","load-bmfont":"^1.2.3","object-assign":"^4.0.1","present":"0.0.6","promise-polyfill":"^3.1.0","style-attr":"^1.0.2","super-animejs":"^3.1.0","super-three":"^0.102.2","three-bmfont-text":"^2.1.0","webvr-polyfill":"^0.10.10"},"devDependencies":{"browserify":"^13.1.0","browserify-derequire":"^0.9.4","browserify-istanbul":"^2.0.0","budo":"^9.2.0","chai":"^3.5.0","chai-shallow-deep-equal":"^1.4.0","chalk":"^1.1.3","codecov":"^1.0.1","cross-env":"^5.0.1","exorcist":"^0.4.0","ghpages":"0.0.8","git-rev":"^0.2.1","glob":"^7.1.1","husky":"^0.11.7","istanbul":"^0.4.5","jsdom":"^9.11.0","karma":"1.4.1","karma-browserify":"^5.1.0","karma-chai-shallow-deep-equal":"0.0.4","karma-chrome-launcher":"^2.0.0","karma-coverage":"^1.1.1","karma-env-preprocessor":"^0.1.1","karma-firefox-launcher":"^1.0.0","karma-mocha":"^1.1.1","karma-mocha-reporter":"^2.1.0","karma-sinon-chai":"1.2.4","lolex":"^1.5.1","markserv":"github:sukima/markserv#feature/fix-broken-websoketio-link","minifyify":"^7.3.3","mocha":"^3.0.2","mozilla-download":"^1.1.1","replace-in-file":"^2.5.3","semistandard":"^9.0.0","shelljs":"^0.7.7","shx":"^0.2.2","sinon":"^1.17.5","sinon-chai":"2.8.0","snazzy":"^5.0.0","too-wordy":"ngokevin/too-wordy","uglifyjs":"^2.4.10","write-good":"^0.9.1"},"link":true,"browserify":{"transform":["browserify-css","envify"]},"semistandard":{"ignore":["build/**","dist/**","examples/**/shaders/*.js","**/vendor/**"]},"keywords":["3d","aframe","cardboard","components","oculus","three","three.js","rift","vive","vr","web-components","webvr"],"browserify-css":{"minify":true},"engines":{"node":">= 4.6.0","npm":"^2.15.9"}} +},{}],54:[function(_dereq_,module,exports){ function getPropertyType(t,e){var i,n,o,a;return o=e.split("."),n=o[0],a=o[1],i=t.components[n]||components[n],i?a&&!i.schema[a]?null:a?i.schema[a].type:i.schema.type:null}function toRadians(t){t.x=THREE.Math.degToRad(t.x),t.y=THREE.Math.degToRad(t.y),t.z=THREE.Math.degToRad(t.z)}function addEventListeners(t,e,i){var n;for(n=0;n=1),isRawProperty(a)?setRawProperty(r,a.property,n,a.type):setComponentProperty(r,a.property,n))}}())},updateConfigForVector:function(){var t,e,i,n=this.config,o=this.data,a=this.el;e=""!==o.from?utils.coordinates.parse(o.from):getComponentProperty(a,o.property),i=utils.coordinates.parse(o.to),o.property===PROP_ROTATION&&(toRadians(e),toRadians(i)),this.targetsArray.length=0,this.targetsArray.push(e),n.targets=this.targetsArray;for(t in i)n[t]=i[t];if(o.property===PROP_POSITION||o.property===PROP_ROTATION||o.property===PROP_SCALE)return void(n.update=function(){var t={};return function(e){var i=e.animatables[0].target;o.property===PROP_SCALE&&(i.x=Math.max(1e-4,i.x),i.y=Math.max(1e-4,i.y),i.z=Math.max(1e-4,i.z)),i.x===t.x&&i.y===t.y&&i.z===t.z||(t.x=i.x,t.y=i.y,t.z=i.z,a.object3D[o.property].set(i.x,i.y,i.z))}}());n.update=function(){var t={};return function(e){var i=e.animatables[0].target;i.x===t.x&&i.y===t.y&&i.z===t.z||(t.x=i.x,t.y=i.y,t.z=i.z,setComponentProperty(a,o.property,i))}}()},updateConfig:function(){var t;t=getPropertyType(this.el,this.data.property),isRawProperty(this.data)&&this.data.type===TYPE_COLOR?this.updateConfigForRawColor():"vec2"===t||"vec3"===t||"vec4"===t?this.updateConfigForVector():this.updateConfigForDefault()},waitComponentInitRawProperty:function(t){var e,i=this.data,n=this.el,o=this;return""===i.from&&(!!i.property.startsWith(STRING_COMPONENTS)&&(e=splitDot(i.property)[1],!n.components[e]&&(n.addEventListener("componentinitialized",function i(a){a.detail.name===e&&(t(),o.animation=anime(o.config),n.removeEventListener("componentinitialized",i))}),!0)))},stopRelatedAnimations:function(){var t,e;for(e in this.el.components)t=this.el.components[e],e!==this.attrName&&"animation"===t.name&&t.animationIsPlaying&&t.data.property===this.data.property&&(t.animationIsPlaying=!1)},addEventListeners:function(){var t=this.data,e=this.el;addEventListeners(e,t.startEvents,this.onStartEvent),addEventListeners(e,t.pauseEvents,this.pauseAnimation),addEventListeners(e,t.resumeEvents,this.resumeAnimation)},removeEventListeners:function(){var t=this.data,e=this.el;removeEventListeners(e,t.startEvents,this.onStartEvent),removeEventListeners(e,t.pauseEvents,this.pauseAnimation),removeEventListeners(e,t.resumeEvents,this.resumeAnimation)},setColorConfig:function(t,e){colorHelperFrom.set(t),colorHelperTo.set(e),t=this.fromColor,e=this.toColor,t.r=colorHelperFrom.r,t.g=colorHelperFrom.g,t.b=colorHelperFrom.b,e.r=colorHelperTo.r,e.g=colorHelperTo.g,e.b=colorHelperTo.b}}); -},{"../core/component":108,"../lib/three":156,"../utils":182,"super-animejs":34}],52:[function(_dereq_,module,exports){ +},{"../core/component":105,"../lib/three":153,"../utils":178,"super-animejs":192}],55:[function(_dereq_,module,exports){ var registerComponent=_dereq_("../core/component").registerComponent,THREE=_dereq_("../lib/three");module.exports.Component=registerComponent("camera",{schema:{active:{default:!0},far:{default:1e4},fov:{default:80,min:0},near:{default:.005,min:0},spectator:{default:!1},zoom:{default:1,min:0}},init:function(){var e,t=this.el;e=this.camera=new THREE.PerspectiveCamera,t.setObject3D("camera",e)},update:function(e){var t=this.data,a=this.camera;a.aspect=t.aspect||window.innerWidth/window.innerHeight,a.far=t.far,a.fov=t.fov,a.near=t.near,a.zoom=t.zoom,a.updateProjectionMatrix(),this.updateActiveCamera(e),this.updateSpectatorCamera(e)},updateActiveCamera:function(e){var t=this.data,a=this.el,r=this.system;e&&e.active===t.active||t.spectator||(t.active&&r.activeCameraEl!==a?r.setActiveCamera(a):t.active||r.activeCameraEl!==a||r.disableActiveCamera())},updateSpectatorCamera:function(e){var t=this.data,a=this.el,r=this.system;e&&e.spectator===t.spectator||(t.spectator&&r.spectatorCameraEl!==a?r.setSpectatorCamera(a):t.spectator||r.spectatorCameraEl!==a||r.disableSpectatorCamera())},remove:function(){this.el.removeObject3D("camera")}}); -},{"../core/component":108,"../lib/three":156}],53:[function(_dereq_,module,exports){ -var registerComponent=_dereq_("../core/component").registerComponent,utils=_dereq_("../utils/"),bind=utils.bind,EVENTS={CLICK:"click",FUSING:"fusing",MOUSEENTER:"mouseenter",MOUSEDOWN:"mousedown",MOUSELEAVE:"mouseleave",MOUSEUP:"mouseup"},STATES={FUSING:"cursor-fusing",HOVERING:"cursor-hovering",HOVERED:"cursor-hovered"},CANVAS_EVENTS={DOWN:["mousedown","touchstart"],UP:["mouseup","touchend"]},WEBXR_EVENTS={DOWN:["selectstart"],UP:["selectend"]},CANVAS_HOVER_CLASS="a-mouse-cursor-hover";module.exports.Component=registerComponent("cursor",{dependencies:["raycaster"],schema:{downEvents:{default:[]},fuse:{default:utils.device.isMobile()},fuseTimeout:{default:1500,min:0},mouseCursorStylesEnabled:{default:!0},upEvents:{default:[]},rayOrigin:{default:"entity",oneOf:["mouse","entity"]}},init:function(){var e=this;this.fuseTimeout=void 0,this.cursorDownEl=null,this.intersectedEl=null,this.canvasBounds=document.body.getBoundingClientRect(),this.isCursorDown=!1,this.updateCanvasBounds=utils.debounce(function(){e.canvasBounds=e.el.sceneEl.canvas.getBoundingClientRect()},500),this.eventDetail={},this.intersectedEventDetail={cursorEl:this.el},this.onCursorDown=bind(this.onCursorDown,this),this.onCursorUp=bind(this.onCursorUp,this),this.onIntersection=bind(this.onIntersection,this),this.onIntersectionCleared=bind(this.onIntersectionCleared,this),this.onMouseMove=bind(this.onMouseMove,this),this.onEnterVR=bind(this.onEnterVR,this)},update:function(e){this.data.rayOrigin!==e.rayOrigin&&this.updateMouseEventListeners()},play:function(){this.addEventListeners()},pause:function(){this.removeEventListeners()},remove:function(){var e=this.el;e.removeState(STATES.HOVERING),e.removeState(STATES.FUSING),clearTimeout(this.fuseTimeout),this.intersectedEl&&this.intersectedEl.removeState(STATES.HOVERED),this.removeEventListeners()},addEventListeners:function(){function e(){t=s.sceneEl.canvas,n.downEvents.length||n.upEvents.length||(CANVAS_EVENTS.DOWN.forEach(function(e){t.addEventListener(e,i.onCursorDown)}),CANVAS_EVENTS.UP.forEach(function(e){t.addEventListener(e,i.onCursorUp)}))}var t,n=this.data,s=this.el,i=this;t=s.sceneEl.canvas,t?e():s.sceneEl.addEventListener("render-target-loaded",e),n.downEvents.forEach(function(e){s.addEventListener(e,i.onCursorDown)}),n.upEvents.forEach(function(e){s.addEventListener(e,i.onCursorUp)}),s.addEventListener("raycaster-intersection",this.onIntersection),s.addEventListener("raycaster-intersection-cleared",this.onIntersectionCleared),s.sceneEl.addEventListener("rendererresize",this.updateCanvasBounds),s.sceneEl.addEventListener("enter-vr",this.onEnterVR),window.addEventListener("resize",this.updateCanvasBounds),window.addEventListener("scroll",this.updateCanvasBounds),this.updateMouseEventListeners()},removeEventListeners:function(){var e,t=this.data,n=this.el,s=this;e=n.sceneEl.canvas,!e||t.downEvents.length||t.upEvents.length||(CANVAS_EVENTS.DOWN.forEach(function(t){e.removeEventListener(t,s.onCursorDown)}),CANVAS_EVENTS.UP.forEach(function(t){e.removeEventListener(t,s.onCursorUp)})),t.downEvents.forEach(function(e){n.removeEventListener(e,s.onCursorDown)}),t.upEvents.forEach(function(e){n.removeEventListener(e,s.onCursorUp)}),n.removeEventListener("raycaster-intersection",this.onIntersection),n.removeEventListener("raycaster-intersection-cleared",this.onIntersectionCleared),e.removeEventListener("mousemove",this.onMouseMove),e.removeEventListener("touchstart",this.onMouseMove),e.removeEventListener("touchmove",this.onMouseMove),n.sceneEl.removeEventListener("rendererresize",this.updateCanvasBounds),n.sceneEl.removeEventListener("enter-vr",this.onEnterVR),window.removeEventListener("resize",this.updateCanvasBounds),window.removeEventListener("scroll",this.updateCanvasBounds)},updateMouseEventListeners:function(){var e,t=this.el;e=t.sceneEl.canvas,e.removeEventListener("mousemove",this.onMouseMove),e.removeEventListener("touchmove",this.onMouseMove),t.setAttribute("raycaster","useWorldCoordinates",!1),"mouse"===this.data.rayOrigin&&(e.addEventListener("mousemove",this.onMouseMove,!1),e.addEventListener("touchmove",this.onMouseMove,!1),t.setAttribute("raycaster","useWorldCoordinates",!0),this.updateCanvasBounds())},onMouseMove:function(){var e=new THREE.Vector3,t=new THREE.Vector2,n=new THREE.Vector3,s={origin:n,direction:e};return function(i){var o,r,a,E=this.canvasBounds,u=this.el.sceneEl.camera;u.parent.updateMatrixWorld(),r="touchmove"===i.type||"touchstart"===i.type?i.touches.item(0):i,o=r.clientX-E.left,a=r.clientY-E.top,t.x=o/E.width*2-1,t.y=-a/E.height*2+1,n.setFromMatrixPosition(u.matrixWorld),e.set(t.x,t.y,.5).unproject(u).sub(n).normalize(),this.el.setAttribute("raycaster",s),"touchmove"===i.type&&i.preventDefault()}}(),onCursorDown:function(e){this.isCursorDown=!0,"mouse"===this.data.rayOrigin&&"touchstart"===e.type&&(this.onMouseMove(e),this.el.components.raycaster.checkIntersections(),e.preventDefault()),this.twoWayEmit(EVENTS.MOUSEDOWN),this.cursorDownEl=this.intersectedEl},onCursorUp:function(e){if(this.isCursorDown){this.isCursorDown=!1;var t=this.data;this.twoWayEmit(EVENTS.MOUSEUP),this.cursorDownEl&&this.cursorDownEl!==this.intersectedEl&&(this.intersectedEventDetail.intersection=null,this.cursorDownEl.emit(EVENTS.MOUSEUP,this.intersectedEventDetail)),t.fuse&&"mouse"!==t.rayOrigin||!this.intersectedEl||this.cursorDownEl!==this.intersectedEl||this.twoWayEmit(EVENTS.CLICK),this.cursorDownEl=null,"touchend"===e.type&&e.preventDefault()}},onIntersection:function(e){var t,n,s,i,o=this.el;n=e.detail.els[0]===o?1:0,i=e.detail.intersections[n],(s=e.detail.els[n])&&this.intersectedEl!==s&&(this.intersectedEl&&(t=this.el.components.raycaster.getIntersection(this.intersectedEl))&&t.distance<=i.distance||(this.clearCurrentIntersection(!0),this.setIntersection(s,i)))},onIntersectionCleared:function(e){-1!==e.detail.clearedEls.indexOf(this.intersectedEl)&&this.clearCurrentIntersection()},onEnterVR:function(){this.clearCurrentIntersection(!0);var e=this.el.sceneEl.xrSession,t=this;e&&"mouse"!==this.data.rayOrigin&&(WEBXR_EVENTS.DOWN.forEach(function(n){e.addEventListener(n,t.onCursorDown)}),WEBXR_EVENTS.UP.forEach(function(n){e.addEventListener(n,t.onCursorUp)}))},setIntersection:function(e,t){var n=this.el,s=this.data,i=this;this.intersectedEl!==e&&(this.intersectedEl=e,n.addState(STATES.HOVERING),e.addState(STATES.HOVERED),this.twoWayEmit(EVENTS.MOUSEENTER),this.data.mouseCursorStylesEnabled&&"mouse"===this.data.rayOrigin&&this.el.sceneEl.canvas.classList.add(CANVAS_HOVER_CLASS),0!==s.fuseTimeout&&s.fuse&&(n.addState(STATES.FUSING),this.twoWayEmit(EVENTS.FUSING),this.fuseTimeout=setTimeout(function(){n.removeState(STATES.FUSING),i.twoWayEmit(EVENTS.CLICK)},s.fuseTimeout)))},clearCurrentIntersection:function(e){var t,n,s,i=this.el;this.intersectedEl&&(this.intersectedEl.removeState(STATES.HOVERED),i.removeState(STATES.HOVERING),i.removeState(STATES.FUSING),this.twoWayEmit(EVENTS.MOUSELEAVE),this.data.mouseCursorStylesEnabled&&"mouse"===this.data.rayOrigin&&this.el.sceneEl.canvas.classList.remove(CANVAS_HOVER_CLASS),this.intersectedEl=null,clearTimeout(this.fuseTimeout),!0!==e&&(s=this.el.components.raycaster.intersections,0!==s.length&&(t=s[0].object.el===i?1:0,(n=s[t])&&this.setIntersection(n.object.el,n))))},twoWayEmit:function(e){var t,n=this.el,s=this.intersectedEl;t=this.el.components.raycaster.getIntersection(s),this.eventDetail.intersectedEl=s,this.eventDetail.intersection=t,n.emit(e,this.eventDetail),s&&(this.intersectedEventDetail.intersection=t,s.emit(e,this.intersectedEventDetail))}}); -},{"../core/component":108,"../utils/":182}],54:[function(_dereq_,module,exports){ -var registerComponent=_dereq_("../core/component").registerComponent,bind=_dereq_("../utils/bind"),trackedControlsUtils=_dereq_("../utils/tracked-controls"),checkControllerPresentAndSetup=trackedControlsUtils.checkControllerPresentAndSetup,emitIfAxesChanged=trackedControlsUtils.emitIfAxesChanged,onButtonEvent=trackedControlsUtils.onButtonEvent,DAYDREAM_CONTROLLER_MODEL_BASE_URL="https://cdn.aframe.io/controllers/google/",DAYDREAM_CONTROLLER_MODEL_OBJ_URL=DAYDREAM_CONTROLLER_MODEL_BASE_URL+"vr_controller_daydream.obj",DAYDREAM_CONTROLLER_MODEL_OBJ_MTL=DAYDREAM_CONTROLLER_MODEL_BASE_URL+"vr_controller_daydream.mtl",isWebXRAvailable=_dereq_("../utils/").device.isWebXRAvailable,GAMEPAD_ID_WEBXR="google-daydream",GAMEPAD_ID_WEBVR="Daydream Controller",GAMEPAD_ID_PREFIX=isWebXRAvailable?GAMEPAD_ID_WEBXR:GAMEPAD_ID_WEBVR,INPUT_MAPPING_WEBVR={axes:{trackpad:[0,1]},buttons:["trackpad","menu","system"]},INPUT_MAPPING_WEBXR={axes:{touchpad:[0,1]},buttons:["none","none","touchpad","menu","system"]},INPUT_MAPPING=isWebXRAvailable?INPUT_MAPPING_WEBXR:INPUT_MAPPING_WEBVR;module.exports.Component=registerComponent("daydream-controls",{schema:{hand:{default:""},buttonColor:{type:"color",default:"#000000"},buttonTouchedColor:{type:"color",default:"#777777"},buttonHighlightColor:{type:"color",default:"#FFFFFF"},model:{default:!0},orientationOffset:{type:"vec3"},armModel:{default:!0}},mapping:INPUT_MAPPING,bindMethods:function(){this.onModelLoaded=bind(this.onModelLoaded,this),this.onControllersUpdate=bind(this.onControllersUpdate,this),this.checkIfControllerPresent=bind(this.checkIfControllerPresent,this),this.removeControllersUpdateListener=bind(this.removeControllersUpdateListener,this),this.onAxisMoved=bind(this.onAxisMoved,this)},init:function(){var t=this;this.onButtonChanged=bind(this.onButtonChanged,this),this.onButtonDown=function(e){onButtonEvent(e.detail.id,"down",t)},this.onButtonUp=function(e){onButtonEvent(e.detail.id,"up",t)},this.onButtonTouchStart=function(e){onButtonEvent(e.detail.id,"touchstart",t)},this.onButtonTouchEnd=function(e){onButtonEvent(e.detail.id,"touchend",t)},this.controllerPresent=!1,this.lastControllerCheck=0,this.bindMethods()},addEventListeners:function(){var t=this.el;t.addEventListener("buttonchanged",this.onButtonChanged),t.addEventListener("buttondown",this.onButtonDown),t.addEventListener("buttonup",this.onButtonUp),t.addEventListener("touchstart",this.onButtonTouchStart),t.addEventListener("touchend",this.onButtonTouchEnd),t.addEventListener("model-loaded",this.onModelLoaded),t.addEventListener("axismove",this.onAxisMoved),this.controllerEventsActive=!0},removeEventListeners:function(){var t=this.el;t.removeEventListener("buttonchanged",this.onButtonChanged),t.removeEventListener("buttondown",this.onButtonDown),t.removeEventListener("buttonup",this.onButtonUp),t.removeEventListener("touchstart",this.onButtonTouchStart),t.removeEventListener("touchend",this.onButtonTouchEnd),t.removeEventListener("model-loaded",this.onModelLoaded),t.removeEventListener("axismove",this.onAxisMoved),this.controllerEventsActive=!1},checkIfControllerPresent:function(){checkControllerPresentAndSetup(this,GAMEPAD_ID_PREFIX,this.data.hand?{hand:this.data.hand}:{})},play:function(){this.checkIfControllerPresent(),this.addControllersUpdateListener()},pause:function(){this.removeEventListeners(),this.removeControllersUpdateListener()},injectTrackedControls:function(){var t=this.el,e=this.data;t.setAttribute("tracked-controls",{armModel:e.armModel,hand:e.hand,idPrefix:GAMEPAD_ID_PREFIX,id:GAMEPAD_ID_PREFIX,orientationOffset:e.orientationOffset}),this.data.model&&this.el.setAttribute("obj-model",{obj:DAYDREAM_CONTROLLER_MODEL_OBJ_URL,mtl:DAYDREAM_CONTROLLER_MODEL_OBJ_MTL})},addControllersUpdateListener:function(){this.el.sceneEl.addEventListener("controllersupdated",this.onControllersUpdate,!1)},removeControllersUpdateListener:function(){this.el.sceneEl.removeEventListener("controllersupdated",this.onControllersUpdate,!1)},onControllersUpdate:function(){this.checkIfControllerPresent()},onModelLoaded:function(t){var e,o=t.detail.model;this.data.model&&(e=this.buttonMeshes={},e.menu=o.getObjectByName("AppButton_AppButton_Cylinder.004"),e.system=o.getObjectByName("HomeButton_HomeButton_Cylinder.005"),e.trackpad=o.getObjectByName("TouchPad_TouchPad_Cylinder.003"),e.touchpad=o.getObjectByName("TouchPad_TouchPad_Cylinder.003"),o.position.set(0,0,-.04))},onAxisMoved:function(t){emitIfAxesChanged(this,this.mapping.axes,t)},onButtonChanged:function(t){var e=this.mapping.buttons[t.detail.id];e&&this.el.emit(e+"changed",t.detail.state)},updateModel:function(t,e){this.data.model&&this.updateButtonModel(t,e)},updateButtonModel:function(t,e){var o=this.buttonMeshes;if(o&&o[t]){var n;switch(e){case"down":n=this.data.buttonHighlightColor;break;case"touchstart":n=this.data.buttonTouchedColor;break;default:n=this.data.buttonColor}o[t].material.color.set(n)}}}); -},{"../core/component":108,"../utils/":182,"../utils/bind":176,"../utils/tracked-controls":191}],55:[function(_dereq_,module,exports){ -var registerComponent=_dereq_("../core/component").registerComponent,bind=_dereq_("../utils/bind"),trackedControlsUtils=_dereq_("../utils/tracked-controls"),checkControllerPresentAndSetup=trackedControlsUtils.checkControllerPresentAndSetup,emitIfAxesChanged=trackedControlsUtils.emitIfAxesChanged,onButtonEvent=trackedControlsUtils.onButtonEvent,isWebXRAvailable=_dereq_("../utils/").device.isWebXRAvailable,GEARVR_CONTROLLER_MODEL_BASE_URL="https://cdn.aframe.io/controllers/samsung/",GEARVR_CONTROLLER_MODEL_OBJ_URL=GEARVR_CONTROLLER_MODEL_BASE_URL+"gear_vr_controller.obj",GEARVR_CONTROLLER_MODEL_OBJ_MTL=GEARVR_CONTROLLER_MODEL_BASE_URL+"gear_vr_controller.mtl",GAMEPAD_ID_WEBXR="samsung-gearvr",GAMEPAD_ID_WEBVR="Gear VR",GAMEPAD_ID_PREFIX=isWebXRAvailable?GAMEPAD_ID_WEBXR:GAMEPAD_ID_WEBVR,INPUT_MAPPING_WEBVR={axes:{trackpad:[0,1]},buttons:["trackpad","trigger"]},INPUT_MAPPING_WEBXR={axes:{touchpad:[0,1]},buttons:["trigger","none","touchpad","none","menu"]},INPUT_MAPPING=isWebXRAvailable?INPUT_MAPPING_WEBXR:INPUT_MAPPING_WEBVR;module.exports.Component=registerComponent("gearvr-controls",{schema:{hand:{default:""},buttonColor:{type:"color",default:"#000000"},buttonTouchedColor:{type:"color",default:"#777777"},buttonHighlightColor:{type:"color",default:"#FFFFFF"},model:{default:!0},orientationOffset:{type:"vec3"},armModel:{default:!0}},mapping:INPUT_MAPPING,bindMethods:function(){this.onModelLoaded=bind(this.onModelLoaded,this),this.onControllersUpdate=bind(this.onControllersUpdate,this),this.checkIfControllerPresent=bind(this.checkIfControllerPresent,this),this.removeControllersUpdateListener=bind(this.removeControllersUpdateListener,this),this.onAxisMoved=bind(this.onAxisMoved,this)},init:function(){var t=this;this.onButtonChanged=bind(this.onButtonChanged,this),this.onButtonDown=function(e){onButtonEvent(e.detail.id,"down",t)},this.onButtonUp=function(e){onButtonEvent(e.detail.id,"up",t)},this.onButtonTouchStart=function(e){onButtonEvent(e.detail.id,"touchstart",t)},this.onButtonTouchEnd=function(e){onButtonEvent(e.detail.id,"touchend",t)},this.controllerPresent=!1,this.lastControllerCheck=0,this.bindMethods()},addEventListeners:function(){var t=this.el;t.addEventListener("buttonchanged",this.onButtonChanged),t.addEventListener("buttondown",this.onButtonDown),t.addEventListener("buttonup",this.onButtonUp),t.addEventListener("touchstart",this.onButtonTouchStart),t.addEventListener("touchend",this.onButtonTouchEnd),t.addEventListener("model-loaded",this.onModelLoaded),t.addEventListener("axismove",this.onAxisMoved),this.controllerEventsActive=!0},removeEventListeners:function(){var t=this.el;t.removeEventListener("buttonchanged",this.onButtonChanged),t.removeEventListener("buttondown",this.onButtonDown),t.removeEventListener("buttonup",this.onButtonUp),t.removeEventListener("touchstart",this.onButtonTouchStart),t.removeEventListener("touchend",this.onButtonTouchEnd),t.removeEventListener("model-loaded",this.onModelLoaded),t.removeEventListener("axismove",this.onAxisMoved),this.controllerEventsActive=!1},checkIfControllerPresent:function(){checkControllerPresentAndSetup(this,GAMEPAD_ID_PREFIX,this.data.hand?{hand:this.data.hand}:{})},play:function(){this.checkIfControllerPresent(),this.addControllersUpdateListener()},pause:function(){this.removeEventListeners(),this.removeControllersUpdateListener()},injectTrackedControls:function(){var t=this.el,e=this.data;t.setAttribute("tracked-controls",{armModel:e.armModel,hand:e.hand,idPrefix:GAMEPAD_ID_PREFIX,id:GAMEPAD_ID_PREFIX,orientationOffset:e.orientationOffset}),this.data.model&&this.el.setAttribute("obj-model",{obj:GEARVR_CONTROLLER_MODEL_OBJ_URL,mtl:GEARVR_CONTROLLER_MODEL_OBJ_MTL})},addControllersUpdateListener:function(){this.el.sceneEl.addEventListener("controllersupdated",this.onControllersUpdate,!1)},removeControllersUpdateListener:function(){this.el.sceneEl.removeEventListener("controllersupdated",this.onControllersUpdate,!1)},onControllersUpdate:function(){this.checkIfControllerPresent()},onModelLoaded:function(t){var e,n=t.detail.model;this.data.model&&(e=this.buttonMeshes={},e.trigger=n.children[2],e.trackpad=n.children[1],e.touchpad=n.children[1])},onButtonChanged:function(t){var e=this.mapping.buttons[t.detail.id];e&&this.el.emit(e+"changed",t.detail.state)},onAxisMoved:function(t){emitIfAxesChanged(this,this.mapping.axes,t)},updateModel:function(t,e){this.data.model&&this.updateButtonModel(t,e)},updateButtonModel:function(t,e){var n=this.buttonMeshes;if(n&&n[t]){var o;switch(e){case"down":o=this.data.buttonHighlightColor;break;case"touchstart":o=this.data.buttonTouchedColor;break;default:o=this.data.buttonColor}n[t].material.color.set(o)}}}); -},{"../core/component":108,"../utils/":182,"../utils/bind":176,"../utils/tracked-controls":191}],56:[function(_dereq_,module,exports){ -var registerComponent=_dereq_("../core/component").registerComponent,bind=_dereq_("../utils/bind"),trackedControlsUtils=_dereq_("../utils/tracked-controls"),checkControllerPresentAndSetup=trackedControlsUtils.checkControllerPresentAndSetup,emitIfAxesChanged=trackedControlsUtils.emitIfAxesChanged,onButtonEvent=trackedControlsUtils.onButtonEvent,GAMEPAD_ID_PREFIX="generic",INPUT_MAPPING={axes:{touchpad:[0,1],thumbstick:[2,3]},buttons:["trigger","squeeze","touchpad","thumbstick"]};module.exports.Component=registerComponent("generic-tracked-controller-controls",{schema:{hand:{default:""},defaultModel:{default:!0},defaultModelColor:{default:"gray"},orientationOffset:{type:"vec3"},disabled:{default:!1}},mapping:INPUT_MAPPING,bindMethods:function(){this.onControllersUpdate=bind(this.onControllersUpdate,this),this.checkIfControllerPresent=bind(this.checkIfControllerPresent,this),this.removeControllersUpdateListener=bind(this.removeControllersUpdateListener,this),this.onAxisMoved=bind(this.onAxisMoved,this)},init:function(){var t=this;this.onButtonChanged=bind(this.onButtonChanged,this),this.onButtonDown=function(e){onButtonEvent(e.detail.id,"down",t)},this.onButtonUp=function(e){onButtonEvent(e.detail.id,"up",t)},this.onButtonTouchStart=function(e){onButtonEvent(e.detail.id,"touchstart",t)},this.onButtonTouchEnd=function(e){onButtonEvent(e.detail.id,"touchend",t)},this.controllerPresent=!1,this.wasControllerConnected=!1,this.lastControllerCheck=0,this.rendererSystem=this.el.sceneEl.systems.renderer,this.bindMethods(),this.el.addEventListener("controllerconnected",function(e){e.detail.name!==t.name&&(t.wasControllerConnected=!0,t.removeEventListeners(),t.removeControllersUpdateListener())})},addEventListeners:function(){var t=this.el;t.addEventListener("buttonchanged",this.onButtonChanged),t.addEventListener("buttondown",this.onButtonDown),t.addEventListener("buttonup",this.onButtonUp),t.addEventListener("touchstart",this.onButtonTouchStart),t.addEventListener("touchend",this.onButtonTouchEnd),t.addEventListener("axismove",this.onAxisMoved),this.controllerEventsActive=!0},removeEventListeners:function(){var t=this.el;t.removeEventListener("buttonchanged",this.onButtonChanged),t.removeEventListener("buttondown",this.onButtonDown),t.removeEventListener("buttonup",this.onButtonUp),t.removeEventListener("touchstart",this.onButtonTouchStart),t.removeEventListener("touchend",this.onButtonTouchEnd),t.removeEventListener("axismove",this.onAxisMoved),this.controllerEventsActive=!1},checkIfControllerPresent:function(){var t=this.data,e=t.hand?t.hand:void 0;checkControllerPresentAndSetup(this,GAMEPAD_ID_PREFIX,{hand:e,iterateControllerProfiles:!0})},play:function(){this.wasControllerConnected||(this.checkIfControllerPresent(),this.addControllersUpdateListener())},pause:function(){this.removeEventListeners(),this.removeControllersUpdateListener()},injectTrackedControls:function(){var t=this.el,e=this.data;if(this.el.components["tracked-controls"])return void this.removeEventListeners();t.setAttribute("tracked-controls",{hand:e.hand,idPrefix:GAMEPAD_ID_PREFIX,orientationOffset:e.orientationOffset,iterateControllerProfiles:!0}),this.data.defaultModel&&this.initDefaultModel()},addControllersUpdateListener:function(){this.el.sceneEl.addEventListener("controllersupdated",this.onControllersUpdate,!1)},removeControllersUpdateListener:function(){this.el.sceneEl.removeEventListener("controllersupdated",this.onControllersUpdate,!1)},onControllersUpdate:function(){this.checkIfControllerPresent()},onButtonChanged:function(t){var e=this.mapping.buttons[t.detail.id];e&&this.el.emit(e+"changed",t.detail.state)},onAxisMoved:function(t){emitIfAxesChanged(this,this.mapping.axes,t)},initDefaultModel:function(){var t=this.modelEl=document.createElement("a-entity");t.setAttribute("geometry",{primitive:"sphere",radius:.03}),t.setAttribute("material",{color:this.data.color}),this.el.appendChild(t)}}); -},{"../core/component":108,"../utils/bind":176,"../utils/tracked-controls":191}],57:[function(_dereq_,module,exports){ +},{"../core/component":105,"../lib/three":153}],56:[function(_dereq_,module,exports){ +var registerComponent=_dereq_("../core/component").registerComponent,utils=_dereq_("../utils/"),bind=utils.bind,EVENTS={CLICK:"click",FUSING:"fusing",MOUSEENTER:"mouseenter",MOUSEDOWN:"mousedown",MOUSELEAVE:"mouseleave",MOUSEUP:"mouseup"},STATES={FUSING:"cursor-fusing",HOVERING:"cursor-hovering",HOVERED:"cursor-hovered"},CANVAS_EVENTS={DOWN:["mousedown","touchstart"],UP:["mouseup","touchend"]},CANVAS_HOVER_CLASS="a-mouse-cursor-hover";module.exports.Component=registerComponent("cursor",{dependencies:["raycaster"],schema:{downEvents:{default:[]},fuse:{default:utils.device.isMobile()},fuseTimeout:{default:1500,min:0},mouseCursorStylesEnabled:{default:!0},upEvents:{default:[]},rayOrigin:{default:"entity",oneOf:["mouse","entity"]}},init:function(){var e=this;this.fuseTimeout=void 0,this.cursorDownEl=null,this.intersectedEl=null,this.canvasBounds=document.body.getBoundingClientRect(),this.updateCanvasBounds=utils.debounce(function(){e.canvasBounds=e.el.sceneEl.canvas.getBoundingClientRect()},500),this.eventDetail={},this.intersectedEventDetail={cursorEl:this.el},this.onCursorDown=bind(this.onCursorDown,this),this.onCursorUp=bind(this.onCursorUp,this),this.onIntersection=bind(this.onIntersection,this),this.onIntersectionCleared=bind(this.onIntersectionCleared,this),this.onMouseMove=bind(this.onMouseMove,this)},update:function(e){this.data.rayOrigin!==e.rayOrigin&&this.updateMouseEventListeners()},play:function(){this.addEventListeners()},pause:function(){this.removeEventListeners()},remove:function(){var e=this.el;e.removeState(STATES.HOVERING),e.removeState(STATES.FUSING),clearTimeout(this.fuseTimeout),this.intersectedEl&&this.intersectedEl.removeState(STATES.HOVERED),this.removeEventListeners()},addEventListeners:function(){function e(){t=s.sceneEl.canvas,n.downEvents.length||n.upEvents.length||(CANVAS_EVENTS.DOWN.forEach(function(e){t.addEventListener(e,i.onCursorDown)}),CANVAS_EVENTS.UP.forEach(function(e){t.addEventListener(e,i.onCursorUp)}))}var t,n=this.data,s=this.el,i=this;t=s.sceneEl.canvas,t?e():s.sceneEl.addEventListener("render-target-loaded",e),n.downEvents.forEach(function(e){s.addEventListener(e,i.onCursorDown)}),n.upEvents.forEach(function(e){s.addEventListener(e,i.onCursorUp)}),s.addEventListener("raycaster-intersection",this.onIntersection),s.addEventListener("raycaster-intersection-cleared",this.onIntersectionCleared),s.sceneEl.addEventListener("rendererresize",this.updateCanvasBounds),window.addEventListener("resize",this.updateCanvasBounds),window.addEventListener("scroll",this.updateCanvasBounds),this.updateMouseEventListeners()},removeEventListeners:function(){var e,t=this.data,n=this.el,s=this;e=n.sceneEl.canvas,!e||t.downEvents.length||t.upEvents.length||(CANVAS_EVENTS.DOWN.forEach(function(t){e.removeEventListener(t,s.onCursorDown)}),CANVAS_EVENTS.UP.forEach(function(t){e.removeEventListener(t,s.onCursorUp)})),t.downEvents.forEach(function(e){n.removeEventListener(e,s.onCursorDown)}),t.upEvents.forEach(function(e){n.removeEventListener(e,s.onCursorUp)}),n.removeEventListener("raycaster-intersection",this.onIntersection),n.removeEventListener("raycaster-intersection-cleared",this.onIntersectionCleared),e.removeEventListener("mousemove",this.onMouseMove),e.removeEventListener("touchstart",this.onMouseMove),e.removeEventListener("touchmove",this.onMouseMove),n.sceneEl.removeEventListener("rendererresize",this.updateCanvasBounds),window.removeEventListener("resize",this.updateCanvasBounds),window.removeEventListener("scroll",this.updateCanvasBounds)},updateMouseEventListeners:function(){var e,t=this.el;e=t.sceneEl.canvas,e.removeEventListener("mousemove",this.onMouseMove),e.removeEventListener("touchmove",this.onMouseMove),t.setAttribute("raycaster","useWorldCoordinates",!1),"mouse"===this.data.rayOrigin&&(e.addEventListener("mousemove",this.onMouseMove,!1),e.addEventListener("touchmove",this.onMouseMove,!1),t.setAttribute("raycaster","useWorldCoordinates",!0),this.updateCanvasBounds())},onMouseMove:function(){var e=new THREE.Vector3,t=new THREE.Vector2,n=new THREE.Vector3,s={origin:n,direction:e};return function(i){var o,r,a,u=this.canvasBounds,c=this.el.sceneEl.camera;c.parent.updateMatrixWorld(),r="touchmove"===i.type||"touchstart"===i.type?i.touches.item(0):i,o=r.clientX-u.left,a=r.clientY-u.top,t.x=o/u.width*2-1,t.y=-a/u.height*2+1,n.setFromMatrixPosition(c.matrixWorld),e.set(t.x,t.y,.5).unproject(c).sub(n).normalize(),this.el.setAttribute("raycaster",s),"touchmove"===i.type&&i.preventDefault()}}(),onCursorDown:function(e){"mouse"===this.data.rayOrigin&&"touchstart"===e.type&&(this.onMouseMove(e),this.el.components.raycaster.checkIntersections(),e.preventDefault()),this.twoWayEmit(EVENTS.MOUSEDOWN),this.cursorDownEl=this.intersectedEl},onCursorUp:function(e){var t=this.data;this.twoWayEmit(EVENTS.MOUSEUP),this.cursorDownEl&&this.cursorDownEl!==this.intersectedEl&&(this.intersectedEventDetail.intersection=null,this.cursorDownEl.emit(EVENTS.MOUSEUP,this.intersectedEventDetail)),t.fuse&&"mouse"!==t.rayOrigin||!this.intersectedEl||this.cursorDownEl!==this.intersectedEl||this.twoWayEmit(EVENTS.CLICK),this.cursorDownEl=null,"touchend"===e.type&&e.preventDefault()},onIntersection:function(e){var t,n,s,i,o=this.el;n=e.detail.els[0]===o?1:0,i=e.detail.intersections[n],(s=e.detail.els[n])&&this.intersectedEl!==s&&(this.intersectedEl&&(t=this.el.components.raycaster.getIntersection(this.intersectedEl))&&t.distance<=i.distance||(this.clearCurrentIntersection(!0),this.setIntersection(s,i)))},onIntersectionCleared:function(e){-1!==e.detail.clearedEls.indexOf(this.intersectedEl)&&this.clearCurrentIntersection()},setIntersection:function(e,t){var n=this.el,s=this.data,i=this;this.intersectedEl!==e&&(this.intersectedEl=e,n.addState(STATES.HOVERING),e.addState(STATES.HOVERED),this.twoWayEmit(EVENTS.MOUSEENTER),this.data.mouseCursorStylesEnabled&&"mouse"===this.data.rayOrigin&&this.el.sceneEl.canvas.classList.add(CANVAS_HOVER_CLASS),0!==s.fuseTimeout&&s.fuse&&(n.addState(STATES.FUSING),this.twoWayEmit(EVENTS.FUSING),this.fuseTimeout=setTimeout(function(){n.removeState(STATES.FUSING),i.twoWayEmit(EVENTS.CLICK)},s.fuseTimeout)))},clearCurrentIntersection:function(e){var t,n,s,i=this.el;this.intersectedEl&&(this.intersectedEl.removeState(STATES.HOVERED),i.removeState(STATES.HOVERING),i.removeState(STATES.FUSING),this.twoWayEmit(EVENTS.MOUSELEAVE),this.data.mouseCursorStylesEnabled&&"mouse"===this.data.rayOrigin&&this.el.sceneEl.canvas.classList.remove(CANVAS_HOVER_CLASS),this.intersectedEl=null,clearTimeout(this.fuseTimeout),!0!==e&&(s=this.el.components.raycaster.intersections,0!==s.length&&(t=s[0].object.el===i?1:0,(n=s[t])&&this.setIntersection(n.object.el,n))))},twoWayEmit:function(e){var t,n=this.el,s=this.intersectedEl;t=this.el.components.raycaster.getIntersection(s),this.eventDetail.intersectedEl=s,this.eventDetail.intersection=t,n.emit(e,this.eventDetail),s&&(this.intersectedEventDetail.intersection=t,s.emit(e,this.intersectedEventDetail))}}); +},{"../core/component":105,"../utils/":178}],57:[function(_dereq_,module,exports){ +var registerComponent=_dereq_("../core/component").registerComponent,bind=_dereq_("../utils/bind"),trackedControlsUtils=_dereq_("../utils/tracked-controls"),checkControllerPresentAndSetup=trackedControlsUtils.checkControllerPresentAndSetup,emitIfAxesChanged=trackedControlsUtils.emitIfAxesChanged,onButtonEvent=trackedControlsUtils.onButtonEvent,DAYDREAM_CONTROLLER_MODEL_BASE_URL="https://cdn.aframe.io/controllers/google/",DAYDREAM_CONTROLLER_MODEL_OBJ_URL=DAYDREAM_CONTROLLER_MODEL_BASE_URL+"vr_controller_daydream.obj",DAYDREAM_CONTROLLER_MODEL_OBJ_MTL=DAYDREAM_CONTROLLER_MODEL_BASE_URL+"vr_controller_daydream.mtl",GAMEPAD_ID_PREFIX="Daydream Controller";module.exports.Component=registerComponent("daydream-controls",{schema:{hand:{default:""},buttonColor:{type:"color",default:"#000000"},buttonTouchedColor:{type:"color",default:"#777777"},buttonHighlightColor:{type:"color",default:"#FFFFFF"},model:{default:!0},orientationOffset:{type:"vec3"},armModel:{default:!0}},mapping:{axes:{trackpad:[0,1]},buttons:["trackpad","menu","system"]},bindMethods:function(){this.onModelLoaded=bind(this.onModelLoaded,this),this.onControllersUpdate=bind(this.onControllersUpdate,this),this.checkIfControllerPresent=bind(this.checkIfControllerPresent,this),this.removeControllersUpdateListener=bind(this.removeControllersUpdateListener,this),this.onAxisMoved=bind(this.onAxisMoved,this)},init:function(){var t=this;this.onButtonChanged=bind(this.onButtonChanged,this),this.onButtonDown=function(e){onButtonEvent(e.detail.id,"down",t)},this.onButtonUp=function(e){onButtonEvent(e.detail.id,"up",t)},this.onButtonTouchStart=function(e){onButtonEvent(e.detail.id,"touchstart",t)},this.onButtonTouchEnd=function(e){onButtonEvent(e.detail.id,"touchend",t)},this.controllerPresent=!1,this.lastControllerCheck=0,this.bindMethods()},addEventListeners:function(){var t=this.el;t.addEventListener("buttonchanged",this.onButtonChanged),t.addEventListener("buttondown",this.onButtonDown),t.addEventListener("buttonup",this.onButtonUp),t.addEventListener("touchstart",this.onButtonTouchStart),t.addEventListener("touchend",this.onButtonTouchEnd),t.addEventListener("model-loaded",this.onModelLoaded),t.addEventListener("axismove",this.onAxisMoved),this.controllerEventsActive=!0},removeEventListeners:function(){var t=this.el;t.removeEventListener("buttonchanged",this.onButtonChanged),t.removeEventListener("buttondown",this.onButtonDown),t.removeEventListener("buttonup",this.onButtonUp),t.removeEventListener("touchstart",this.onButtonTouchStart),t.removeEventListener("touchend",this.onButtonTouchEnd),t.removeEventListener("model-loaded",this.onModelLoaded),t.removeEventListener("axismove",this.onAxisMoved),this.controllerEventsActive=!1},checkIfControllerPresent:function(){checkControllerPresentAndSetup(this,GAMEPAD_ID_PREFIX,{hand:this.data.hand})},play:function(){this.checkIfControllerPresent(),this.addControllersUpdateListener()},pause:function(){this.removeEventListeners(),this.removeControllersUpdateListener()},injectTrackedControls:function(){var t=this.el,e=this.data;t.setAttribute("tracked-controls",{armModel:e.armModel,hand:e.hand,idPrefix:GAMEPAD_ID_PREFIX,orientationOffset:e.orientationOffset}),this.data.model&&this.el.setAttribute("obj-model",{obj:DAYDREAM_CONTROLLER_MODEL_OBJ_URL,mtl:DAYDREAM_CONTROLLER_MODEL_OBJ_MTL})},addControllersUpdateListener:function(){this.el.sceneEl.addEventListener("controllersupdated",this.onControllersUpdate,!1)},removeControllersUpdateListener:function(){this.el.sceneEl.removeEventListener("controllersupdated",this.onControllersUpdate,!1)},onControllersUpdate:function(){this.checkIfControllerPresent()},onModelLoaded:function(t){var e,o=t.detail.model;this.data.model&&(e=this.buttonMeshes={},e.menu=o.getObjectByName("AppButton_AppButton_Cylinder.004"),e.system=o.getObjectByName("HomeButton_HomeButton_Cylinder.005"),e.trackpad=o.getObjectByName("TouchPad_TouchPad_Cylinder.003"),o.position.set(0,0,-.04))},onAxisMoved:function(t){emitIfAxesChanged(this,this.mapping.axes,t)},onButtonChanged:function(t){var e=this.mapping.buttons[t.detail.id];e&&this.el.emit(e+"changed",t.detail.state)},updateModel:function(t,e){this.data.model&&this.updateButtonModel(t,e)},updateButtonModel:function(t,e){var o=this.buttonMeshes;if(o&&o[t]){var n;switch(e){case"down":n=this.data.buttonHighlightColor;break;case"touchstart":n=this.data.buttonTouchedColor;break;default:n=this.data.buttonColor}o[t].material.color.set(n)}}}); +},{"../core/component":105,"../utils/bind":172,"../utils/tracked-controls":186}],58:[function(_dereq_,module,exports){ +var registerComponent=_dereq_("../core/component").registerComponent,bind=_dereq_("../utils/bind"),trackedControlsUtils=_dereq_("../utils/tracked-controls"),checkControllerPresentAndSetup=trackedControlsUtils.checkControllerPresentAndSetup,emitIfAxesChanged=trackedControlsUtils.emitIfAxesChanged,onButtonEvent=trackedControlsUtils.onButtonEvent,GEARVR_CONTROLLER_MODEL_BASE_URL="https://cdn.aframe.io/controllers/samsung/",GEARVR_CONTROLLER_MODEL_OBJ_URL=GEARVR_CONTROLLER_MODEL_BASE_URL+"gear_vr_controller.obj",GEARVR_CONTROLLER_MODEL_OBJ_MTL=GEARVR_CONTROLLER_MODEL_BASE_URL+"gear_vr_controller.mtl",GAMEPAD_ID_PREFIX="Gear VR";module.exports.Component=registerComponent("gearvr-controls",{schema:{hand:{default:""},buttonColor:{type:"color",default:"#000000"},buttonTouchedColor:{type:"color",default:"#777777"},buttonHighlightColor:{type:"color",default:"#FFFFFF"},model:{default:!0},orientationOffset:{type:"vec3"},armModel:{default:!0}},mapping:{axes:{trackpad:[0,1]},buttons:["trackpad","trigger"]},bindMethods:function(){this.onModelLoaded=bind(this.onModelLoaded,this),this.onControllersUpdate=bind(this.onControllersUpdate,this),this.checkIfControllerPresent=bind(this.checkIfControllerPresent,this),this.removeControllersUpdateListener=bind(this.removeControllersUpdateListener,this),this.onAxisMoved=bind(this.onAxisMoved,this)},init:function(){var t=this;this.onButtonChanged=bind(this.onButtonChanged,this),this.onButtonDown=function(e){onButtonEvent(e.detail.id,"down",t)},this.onButtonUp=function(e){onButtonEvent(e.detail.id,"up",t)},this.onButtonTouchStart=function(e){onButtonEvent(e.detail.id,"touchstart",t)},this.onButtonTouchEnd=function(e){onButtonEvent(e.detail.id,"touchend",t)},this.controllerPresent=!1,this.lastControllerCheck=0,this.bindMethods()},addEventListeners:function(){var t=this.el;t.addEventListener("buttonchanged",this.onButtonChanged),t.addEventListener("buttondown",this.onButtonDown),t.addEventListener("buttonup",this.onButtonUp),t.addEventListener("touchstart",this.onButtonTouchStart),t.addEventListener("touchend",this.onButtonTouchEnd),t.addEventListener("model-loaded",this.onModelLoaded),t.addEventListener("axismove",this.onAxisMoved),this.controllerEventsActive=!0},removeEventListeners:function(){var t=this.el;t.removeEventListener("buttonchanged",this.onButtonChanged),t.removeEventListener("buttondown",this.onButtonDown),t.removeEventListener("buttonup",this.onButtonUp),t.removeEventListener("touchstart",this.onButtonTouchStart),t.removeEventListener("touchend",this.onButtonTouchEnd),t.removeEventListener("model-loaded",this.onModelLoaded),t.removeEventListener("axismove",this.onAxisMoved),this.controllerEventsActive=!1},checkIfControllerPresent:function(){checkControllerPresentAndSetup(this,GAMEPAD_ID_PREFIX,this.data.hand?{hand:this.data.hand}:{})},play:function(){this.checkIfControllerPresent(),this.addControllersUpdateListener()},pause:function(){this.removeEventListeners(),this.removeControllersUpdateListener()},injectTrackedControls:function(){var t=this.el,e=this.data;t.setAttribute("tracked-controls",{armModel:e.armModel,idPrefix:GAMEPAD_ID_PREFIX,orientationOffset:e.orientationOffset}),this.data.model&&this.el.setAttribute("obj-model",{obj:GEARVR_CONTROLLER_MODEL_OBJ_URL,mtl:GEARVR_CONTROLLER_MODEL_OBJ_MTL})},addControllersUpdateListener:function(){this.el.sceneEl.addEventListener("controllersupdated",this.onControllersUpdate,!1)},removeControllersUpdateListener:function(){this.el.sceneEl.removeEventListener("controllersupdated",this.onControllersUpdate,!1)},onControllersUpdate:function(){this.checkIfControllerPresent()},onModelLoaded:function(t){var e,o=t.detail.model;this.data.model&&(e=this.buttonMeshes={},e.trigger=o.children[2],e.trackpad=o.children[1])},onButtonChanged:function(t){var e=this.mapping.buttons[t.detail.id];e&&this.el.emit(e+"changed",t.detail.state)},onAxisMoved:function(t){emitIfAxesChanged(this,this.mapping.axes,t)},updateModel:function(t,e){this.data.model&&this.updateButtonModel(t,e)},updateButtonModel:function(t,e){var o=this.buttonMeshes;if(o&&o[t]){var n;switch(e){case"down":n=this.data.buttonHighlightColor;break;case"touchstart":n=this.data.buttonTouchedColor;break;default:n=this.data.buttonColor}o[t].material.color.set(n)}}}); +},{"../core/component":105,"../utils/bind":172,"../utils/tracked-controls":186}],59:[function(_dereq_,module,exports){ var geometries=_dereq_("../core/geometry").geometries,geometryNames=_dereq_("../core/geometry").geometryNames,registerComponent=_dereq_("../core/component").registerComponent,THREE=_dereq_("../lib/three"),dummyGeometry=new THREE.Geometry;module.exports.Component=registerComponent("geometry",{schema:{buffer:{default:!0},primitive:{default:"box",oneOf:geometryNames,schemaChange:!0},skipCache:{default:!1}},init:function(){this.geometry=null},update:function(e){var t,r=this.data,m=this.el,o=this.system;this.geometry&&(o.unuseGeometry(e),this.geometry=null),this.geometry=o.getOrCreateGeometry(r),t=m.getObject3D("mesh"),t?t.geometry=this.geometry:(t=new THREE.Mesh,t.geometry=this.geometry,m.setObject3D("mesh",t))},remove:function(){this.system.unuseGeometry(this.data),this.el.getObject3D("mesh").geometry=dummyGeometry,this.geometry=null},updateSchema:function(e){var t=this.oldData&&this.oldData.primitive,r=e.primitive,m=geometries[r]&&geometries[r].schema;if(!m)throw new Error("Unknown geometry schema `"+r+"`");t&&t===r||this.extendSchema(m)}}); -},{"../core/component":108,"../core/geometry":109,"../lib/three":156}],58:[function(_dereq_,module,exports){ +},{"../core/component":105,"../core/geometry":106,"../lib/three":153}],60:[function(_dereq_,module,exports){ var registerComponent=_dereq_("../core/component").registerComponent,THREE=_dereq_("../lib/three"),utils=_dereq_("../utils/"),warn=utils.debug("components:gltf-model:warn");module.exports.Component=registerComponent("gltf-model",{schema:{type:"model"},init:function(){var e=this.system.getDRACOLoader();this.model=null,this.loader=new THREE.GLTFLoader,e&&this.loader.setDRACOLoader(e)},update:function(){var e=this,o=this.el,t=this.data;t&&(this.remove(),this.loader.load(t,function(t){e.model=t.scene||t.scenes[0],e.model.animations=t.animations,o.setObject3D("mesh",e.model),o.emit("model-loaded",{format:"gltf",model:e.model})},void 0,function(e){var r=e&&e.message?e.message:"Failed to load glTF model";warn(r),o.emit("model-error",{format:"gltf",src:t})}))},remove:function(){this.model&&this.el.removeObject3D("mesh")}}); -},{"../core/component":108,"../lib/three":156,"../utils/":182}],59:[function(_dereq_,module,exports){ -function getGestureEventName(t,e){var n;if(t)return n=EVENTS[t],"grip"===n?n+(e?"close":"open"):"point"===n?n+(e?"up":"down"):"pointing"===n||"pistol"===n?n+(e?"start":"end"):void 0}function isViveController(t){var e=t&&t.controller;return e&&(e.id&&0===e.id.indexOf("OpenVR ")||e.profiles&&e.profiles[0]&&"htc-vive-controller-mv"===e.profiles[0])}var registerComponent=_dereq_("../core/component").registerComponent,MODEL_URLS={toonLeft:"https://cdn.aframe.io/controllers/hands/leftHand.glb",toonRight:"https://cdn.aframe.io/controllers/hands/rightHand.glb",lowPolyLeft:"https://cdn.aframe.io/controllers/hands/leftHandLow.glb",lowPolyRight:"https://cdn.aframe.io/controllers/hands/rightHandLow.glb",highPolyLeft:"https://cdn.aframe.io/controllers/hands/leftHandHigh.glb",highPolyRight:"https://cdn.aframe.io/controllers/hands/rightHandHigh.glb"},ANIMATIONS={open:"Open",point:"Point",pointThumb:"Point + Thumb",fist:"Fist",hold:"Hold",thumbUp:"Thumb Up"},EVENTS={};EVENTS[ANIMATIONS.fist]="grip",EVENTS[ANIMATIONS.thumbUp]="pistol",EVENTS[ANIMATIONS.point]="pointing",module.exports.Component=registerComponent("hand-controls",{schema:{color:{default:"white",type:"color"},hand:{default:"left"},handModelStyle:{default:"lowPoly",oneOf:["lowPoly","highPoly","toon"]}},init:function(){var t=this,e=this.el;this.gesture=ANIMATIONS.open,this.pressedButtons={},this.touchedButtons={},this.loader=new THREE.GLTFLoader,this.loader.setCrossOrigin("anonymous"),this.onGripDown=function(){t.handleButton("grip","down")},this.onGripUp=function(){t.handleButton("grip","up")},this.onTrackpadDown=function(){t.handleButton("trackpad","down")},this.onTrackpadUp=function(){t.handleButton("trackpad","up")},this.onTrackpadTouchStart=function(){t.handleButton("trackpad","touchstart")},this.onTrackpadTouchEnd=function(){t.handleButton("trackpad","touchend")},this.onTriggerDown=function(){t.handleButton("trigger","down")},this.onTriggerUp=function(){t.handleButton("trigger","up")},this.onTriggerTouchStart=function(){t.handleButton("trigger","touchstart")},this.onTriggerTouchEnd=function(){t.handleButton("trigger","touchend")},this.onGripTouchStart=function(){t.handleButton("grip","touchstart")},this.onGripTouchEnd=function(){t.handleButton("grip","touchend")},this.onThumbstickDown=function(){t.handleButton("thumbstick","down")},this.onThumbstickUp=function(){t.handleButton("thumbstick","up")},this.onAorXTouchStart=function(){t.handleButton("AorX","touchstart")},this.onAorXTouchEnd=function(){t.handleButton("AorX","touchend")},this.onBorYTouchStart=function(){t.handleButton("BorY","touchstart")},this.onBorYTouchEnd=function(){t.handleButton("BorY","touchend")},this.onSurfaceTouchStart=function(){t.handleButton("surface","touchstart")},this.onSurfaceTouchEnd=function(){t.handleButton("surface","touchend")},this.onControllerConnected=this.onControllerConnected.bind(this),this.onControllerDisconnected=this.onControllerDisconnected.bind(this),e.addEventListener("controllerconnected",this.onControllerConnected),e.addEventListener("controllerdisconnected",this.onControllerDisconnected),e.object3D.visible=!1},play:function(){this.addEventListeners()},pause:function(){this.removeEventListeners()},tick:function(t,e){var n=this.el.getObject3D("mesh");n&&n.mixer&&n.mixer.update(e/1e3)},onControllerConnected:function(){this.el.object3D.visible=!0},onControllerDisconnected:function(){this.el.object3D.visible=!1},addEventListeners:function(){var t=this.el;t.addEventListener("gripdown",this.onGripDown),t.addEventListener("gripup",this.onGripUp),t.addEventListener("trackpaddown",this.onTrackpadDown),t.addEventListener("trackpadup",this.onTrackpadUp),t.addEventListener("trackpadtouchstart",this.onTrackpadTouchStart),t.addEventListener("trackpadtouchend",this.onTrackpadTouchEnd),t.addEventListener("triggerdown",this.onTriggerDown),t.addEventListener("triggerup",this.onTriggerUp),t.addEventListener("triggertouchstart",this.onTriggerTouchStart),t.addEventListener("triggertouchend",this.onTriggerTouchEnd),t.addEventListener("griptouchstart",this.onGripTouchStart),t.addEventListener("griptouchend",this.onGripTouchEnd),t.addEventListener("thumbstickdown",this.onThumbstickDown),t.addEventListener("thumbstickup",this.onThumbstickUp),t.addEventListener("abuttontouchstart",this.onAorXTouchStart),t.addEventListener("abuttontouchend",this.onAorXTouchEnd),t.addEventListener("bbuttontouchstart",this.onBorYTouchStart),t.addEventListener("bbuttontouchend",this.onBorYTouchEnd),t.addEventListener("xbuttontouchstart",this.onAorXTouchStart),t.addEventListener("xbuttontouchend",this.onAorXTouchEnd),t.addEventListener("ybuttontouchstart",this.onBorYTouchStart),t.addEventListener("ybuttontouchend",this.onBorYTouchEnd),t.addEventListener("surfacetouchstart",this.onSurfaceTouchStart),t.addEventListener("surfacetouchend",this.onSurfaceTouchEnd)},removeEventListeners:function(){var t=this.el;t.removeEventListener("gripdown",this.onGripDown),t.removeEventListener("gripup",this.onGripUp),t.removeEventListener("trackpaddown",this.onTrackpadDown),t.removeEventListener("trackpadup",this.onTrackpadUp),t.removeEventListener("trackpadtouchstart",this.onTrackpadTouchStart),t.removeEventListener("trackpadtouchend",this.onTrackpadTouchEnd),t.removeEventListener("triggerdown",this.onTriggerDown),t.removeEventListener("triggerup",this.onTriggerUp),t.removeEventListener("triggertouchstart",this.onTriggerTouchStart),t.removeEventListener("triggertouchend",this.onTriggerTouchEnd),t.removeEventListener("griptouchstart",this.onGripTouchStart),t.removeEventListener("griptouchend",this.onGripTouchEnd),t.removeEventListener("thumbstickdown",this.onThumbstickDown),t.removeEventListener("thumbstickup",this.onThumbstickUp),t.removeEventListener("abuttontouchstart",this.onAorXTouchStart),t.removeEventListener("abuttontouchend",this.onAorXTouchEnd),t.removeEventListener("bbuttontouchstart",this.onBorYTouchStart),t.removeEventListener("bbuttontouchend",this.onBorYTouchEnd),t.removeEventListener("xbuttontouchstart",this.onAorXTouchStart),t.removeEventListener("xbuttontouchend",this.onAorXTouchEnd),t.removeEventListener("ybuttontouchstart",this.onBorYTouchStart),t.removeEventListener("ybuttontouchend",this.onBorYTouchEnd),t.removeEventListener("surfacetouchstart",this.onSurfaceTouchStart),t.removeEventListener("surfacetouchend",this.onSurfaceTouchEnd)},update:function(t){var e,n=this.el,o=this.data.hand,i=this.data.handModelStyle,r=this.data.color,s=this;if(e={hand:o,model:!1},o!==t){var h=MODEL_URLS[i+o.charAt(0).toUpperCase()+o.slice(1)];this.loader.load(h,function(t){var i=t.scene.children[0],h="left"===o?Math.PI/2:-Math.PI/2;i.mixer=new THREE.AnimationMixer(i),s.clips=t.animations,n.setObject3D("mesh",i),i.children[1].material.color=new THREE.Color(r),i.position.set(0,0,0),i.rotation.set(0,0,h),n.setAttribute("magicleap-controls",e),n.setAttribute("vive-controls",e),n.setAttribute("oculus-touch-controls",e),n.setAttribute("windows-motion-controls",e)})}},remove:function(){this.el.removeObject3D("mesh")},handleButton:function(t,e){var n,o="down"===e,i="touchstart"===e;if(0===e.indexOf("touch")){if(i===this.touchedButtons[t])return;this.touchedButtons[t]=i}else{if(o===this.pressedButtons[t])return;this.pressedButtons[t]=o}n=this.gesture,this.gesture=this.determineGesture(),this.gesture!==n&&(this.animateGesture(this.gesture,n),this.emitGestureEvents(this.gesture,n))},determineGesture:function(){var t,e=this.pressedButtons.grip,n=this.pressedButtons.surface||this.touchedButtons.surface,o=this.pressedButtons.trackpad||this.touchedButtons.trackpad,i=this.pressedButtons.trigger||this.touchedButtons.trigger,r=this.touchedButtons.AorX||this.touchedButtons.BorY;return isViveController(this.el.components["tracked-controls"])?e||i?t=ANIMATIONS.fist:o&&(t=ANIMATIONS.point):e?t=n||r||o?i?ANIMATIONS.fist:ANIMATIONS.point:i?ANIMATIONS.thumbUp:ANIMATIONS.pointThumb:i&&(t=ANIMATIONS.hold),t},getClip:function(t){var e,n;for(n=0;nPINCH_END_DISTANCE&&!0===this.isPinched&&(this.isPinched=!1,this.pinchEventDetail.position.copy(n).lerp(e,PINCH_POSITION_INTERPOLATION),this.pinchEventDetail.position.y+=1.5,this.el.emit("pinchended",this.pinchEventDetail)),this.isPinched&&(this.pinchEventDetail.position.copy(n).lerp(e,PINCH_POSITION_INTERPOLATION),this.pinchEventDetail.position.y+=1.5,this.el.emit("pinchmoved",this.pinchEventDetail)),n.y+=1.5}}}}(),pause:function(){this.removeEventListeners(),this.removeControllersUpdateListener()},injectTrackedControls:function(){var e=this.el,t=this.data;e.setAttribute("tracked-controls",{hand:t.hand,iterateControllerProfiles:!0,handTrackingEnabled:!0}),this.initDefaultModel()},addControllersUpdateListener:function(){this.el.sceneEl.addEventListener("controllersupdated",this.onControllersUpdate,!1)},removeControllersUpdateListener:function(){this.el.sceneEl.removeEventListener("controllersupdated",this.onControllersUpdate,!1)},onControllersUpdate:function(){var e;this.checkIfControllerPresent(),e=this.el.components["tracked-controls"]&&this.el.components["tracked-controls"].controller,this.el.getObject3D("mesh")&&(e&&e.hand&&e.hand[0]||this.el.removeObject3D("mesh"))},initDefaultModel:function(){"dots"===this.data.modelStyle&&this.initDotsModel(),"mesh"===this.data.modelStyle&&this.initMeshHandModel()},initDotsModel:function(){if(0===this.jointEls.length)for(var e=0;e20)this.previousQuaternion||(this.quaternionClone.copy(i),this.previousQuaternion=this.quaternionClone),s.lookAt(e);else{if(o=this.calculateCameraPortalOrientation(),a<.5){if(!0===this.semiSphereEl.getAttribute("visible"))return;d.setAttribute("text","width",1.5),o<=0?(d.setAttribute("position","0 0 0.75"),d.setAttribute("rotation","0 180 0"),this.semiSphereEl.setAttribute("rotation","0 0 0")):(d.setAttribute("position","0 0 -0.75"),d.setAttribute("rotation","0 0 0"),this.semiSphereEl.setAttribute("rotation","0 180 0")),n.getObject3D("mesh").visible=!1,this.semiSphereEl.setAttribute("visible",!0),this.peekCameraPortalOrientation=o}else o<=0?d.setAttribute("rotation","0 180 0"):d.setAttribute("rotation","0 0 0"),d.setAttribute("text","width",5),d.setAttribute("position","0 1.5 0"),n.getObject3D("mesh").visible=!0,this.semiSphereEl.setAttribute("visible",!1),this.peekCameraPortalOrientation=void 0;this.previousQuaternion&&(s.quaternion.copy(this.previousQuaternion),this.previousQuaternion=void 0)}}}(),hideAll:function(){var e=this.el,t=this.hiddenEls,i=this;t.length>0||e.sceneEl.object3D.traverse(function(r){r&&r.el&&r.el.hasAttribute("link-controls")||r.el&&r!==e.sceneEl.object3D&&r.el!==e&&r.el!==i.sphereEl&&r.el!==e.sceneEl.cameraEl&&!1!==r.el.getAttribute("visible")&&r.el!==i.textEl&&r.el!==i.semiSphereEl&&(r.el.setAttribute("visible",!1),t.push(r.el))})},showAll:function(){this.hiddenEls.forEach(function(e){e.setAttribute("visible",!0)}),this.hiddenEls=[]},calculateCameraPortalOrientation:function(){var e=new THREE.Matrix4,t=new THREE.Vector3,i=new THREE.Vector3(0,0,1),r=new THREE.Vector3(0,0,0);return function(){var o=this.el,a=o.sceneEl.camera;return t.set(0,0,0),i.set(0,0,1),r.set(0,0,0),o.object3D.matrixWorld.extractRotation(e),i.applyMatrix4(e),o.object3D.updateMatrixWorld(),o.object3D.localToWorld(r),a.parent.parent.updateMatrixWorld(),a.parent.updateMatrixWorld(),a.updateMatrixWorld(),a.localToWorld(t),t.sub(r).normalize(),i.normalize(),Math.sign(i.dot(t))}}(),remove:function(){this.removeEventListener()}}),registerShader("portal",{schema:{borderEnabled:{default:1,type:"int",is:"uniform"},backgroundColor:{default:"red",type:"color",is:"uniform"},pano:{type:"map",is:"uniform"},strokeColor:{default:"white",type:"color",is:"uniform"}},vertexShader:["vec3 portalPosition;","varying vec3 vWorldPosition;","varying float vDistanceToCenter;","varying float vDistance;","void main() {","vDistanceToCenter = clamp(length(position - vec3(0.0, 0.0, 0.0)), 0.0, 1.0);","portalPosition = (modelMatrix * vec4(0.0, 0.0, 0.0, 1.0)).xyz;","vDistance = length(portalPosition - cameraPosition);","vWorldPosition = (modelMatrix * vec4(position, 1.0)).xyz;","gl_Position = projectionMatrix * modelViewMatrix * vec4(position, 1.0);","}"].join("\n"),fragmentShader:["#define RECIPROCAL_PI2 0.15915494","uniform sampler2D pano;","uniform vec3 strokeColor;","uniform vec3 backgroundColor;","uniform float borderEnabled;","varying float vDistanceToCenter;","varying float vDistance;","varying vec3 vWorldPosition;","void main() {","vec3 direction = normalize(vWorldPosition - cameraPosition);","vec2 sampleUV;","float borderThickness = clamp(exp(-vDistance / 50.0), 0.6, 0.95);","sampleUV.y = clamp(direction.y * 0.5 + 0.5, 0.0, 1.0);","sampleUV.x = atan(direction.z, -direction.x) * -RECIPROCAL_PI2 + 0.5;","if (vDistanceToCenter > borderThickness && borderEnabled == 1.0) {","gl_FragColor = vec4(strokeColor, 1.0);","} else {","gl_FragColor = mix(texture2D(pano, sampleUV), vec4(backgroundColor, 1.0), clamp(pow((vDistance / 15.0), 2.0), 0.0, 1.0));","}","}"].join("\n")}); -},{"../core/component":108,"../core/shader":118,"../lib/three":156}],67:[function(_dereq_,module,exports){ -var registerComponent=_dereq_("../core/component").registerComponent,THREE=_dereq_("../lib/three"),utils=_dereq_("../utils/"),bind=utils.bind,PI_2=Math.PI/2;module.exports.Component=registerComponent("look-controls",{dependencies:["position","rotation"],schema:{enabled:{default:!0},magicWindowTrackingEnabled:{default:!0},pointerLockEnabled:{default:!1},reverseMouseDrag:{default:!1},reverseTouchDrag:{default:!1},touchEnabled:{default:!0},mouseEnabled:{default:!0}},init:function(){this.deltaYaw=0,this.previousHMDPosition=new THREE.Vector3,this.hmdQuaternion=new THREE.Quaternion,this.magicWindowAbsoluteEuler=new THREE.Euler,this.magicWindowDeltaEuler=new THREE.Euler,this.position=new THREE.Vector3,this.magicWindowObject=new THREE.Object3D,this.rotation={},this.deltaRotation={},this.savedPose=null,this.pointerLocked=!1,this.setupMouseControls(),this.bindMethods(),this.previousMouseEvent={},this.setupMagicWindowControls(),this.savedPose={position:new THREE.Vector3,rotation:new THREE.Euler},this.el.sceneEl.is("vr-mode")&&this.onEnterVR()},setupMagicWindowControls:function(){var e,t=this.data;utils.device.isMobile()&&(e=this.magicWindowControls=new THREE.DeviceOrientationControls(this.magicWindowObject),"undefined"!=typeof DeviceOrientationEvent&&DeviceOrientationEvent.requestPermission&&(e.enabled=!1,this.el.sceneEl.components["device-orientation-permission-ui"].permissionGranted?e.enabled=t.magicWindowTrackingEnabled:this.el.sceneEl.addEventListener("deviceorientationpermissiongranted",function(){e.enabled=t.magicWindowTrackingEnabled})))},update:function(e){var t=this.data;t.enabled!==e.enabled&&this.updateGrabCursor(t.enabled),e&&!t.magicWindowTrackingEnabled&&e.magicWindowTrackingEnabled&&(this.magicWindowAbsoluteEuler.set(0,0,0),this.magicWindowDeltaEuler.set(0,0,0)),this.magicWindowControls&&(this.magicWindowControls.enabled=t.magicWindowTrackingEnabled),e&&!t.pointerLockEnabled!==e.pointerLockEnabled&&(this.removeEventListeners(),this.addEventListeners(),this.pointerLocked&&this.exitPointerLock())},tick:function(e){this.data.enabled&&this.updateOrientation()},play:function(){this.addEventListeners()},pause:function(){this.removeEventListeners(),this.pointerLocked&&this.exitPointerLock()},remove:function(){this.removeEventListeners(),this.pointerLocked&&this.exitPointerLock()},bindMethods:function(){this.onMouseDown=bind(this.onMouseDown,this),this.onMouseMove=bind(this.onMouseMove,this),this.onMouseUp=bind(this.onMouseUp,this),this.onTouchStart=bind(this.onTouchStart,this),this.onTouchMove=bind(this.onTouchMove,this),this.onTouchEnd=bind(this.onTouchEnd,this),this.onEnterVR=bind(this.onEnterVR,this),this.onExitVR=bind(this.onExitVR,this),this.onPointerLockChange=bind(this.onPointerLockChange,this),this.onPointerLockError=bind(this.onPointerLockError,this)},setupMouseControls:function(){this.mouseDown=!1,this.pitchObject=new THREE.Object3D,this.yawObject=new THREE.Object3D,this.yawObject.position.y=10,this.yawObject.add(this.pitchObject)},addEventListeners:function(){var e=this.el.sceneEl,t=e.canvas;if(!t)return void e.addEventListener("render-target-loaded",bind(this.addEventListeners,this));t.addEventListener("mousedown",this.onMouseDown,!1),window.addEventListener("mousemove",this.onMouseMove,!1),window.addEventListener("mouseup",this.onMouseUp,!1),t.addEventListener("touchstart",this.onTouchStart),window.addEventListener("touchmove",this.onTouchMove),window.addEventListener("touchend",this.onTouchEnd),e.addEventListener("enter-vr",this.onEnterVR),e.addEventListener("exit-vr",this.onExitVR),this.data.pointerLockEnabled&&(document.addEventListener("pointerlockchange",this.onPointerLockChange,!1),document.addEventListener("mozpointerlockchange",this.onPointerLockChange,!1),document.addEventListener("pointerlockerror",this.onPointerLockError,!1))},removeEventListeners:function(){var e=this.el.sceneEl,t=e&&e.canvas;t&&(t.removeEventListener("mousedown",this.onMouseDown),window.removeEventListener("mousemove",this.onMouseMove),window.removeEventListener("mouseup",this.onMouseUp),t.removeEventListener("touchstart",this.onTouchStart),window.removeEventListener("touchmove",this.onTouchMove),window.removeEventListener("touchend",this.onTouchEnd),e.removeEventListener("enter-vr",this.onEnterVR),e.removeEventListener("exit-vr",this.onExitVR),document.removeEventListener("pointerlockchange",this.onPointerLockChange,!1),document.removeEventListener("mozpointerlockchange",this.onPointerLockChange,!1),document.removeEventListener("pointerlockerror",this.onPointerLockError,!1))},updateOrientation:function(){var e=new THREE.Matrix4;return function(){var t,o=this.el.object3D,n=this.pitchObject,i=this.yawObject,s=this.el.sceneEl;if(s.is("vr-mode")&&s.checkHeadsetConnected())return void(s.hasWebXR&&(t=s.renderer.xr.getCameraPose())&&(e.elements=t.transform.matrix,e.decompose(o.position,o.rotation,o.scale)));this.updateMagicWindowOrientation(),o.rotation.x=this.magicWindowDeltaEuler.x+n.rotation.x,o.rotation.y=this.magicWindowDeltaEuler.y+i.rotation.y,o.rotation.z=this.magicWindowDeltaEuler.z}}(),updateMagicWindowOrientation:function(){var e=this.magicWindowAbsoluteEuler,t=this.magicWindowDeltaEuler;this.magicWindowControls&&this.magicWindowControls.enabled&&(this.magicWindowControls.update(),e.setFromQuaternion(this.magicWindowObject.quaternion,"YXZ"),this.previousMagicWindowYaw||0===e.y||(this.previousMagicWindowYaw=e.y),this.previousMagicWindowYaw&&(t.x=e.x,t.y+=e.y-this.previousMagicWindowYaw,t.z=e.z,this.previousMagicWindowYaw=e.y))},onMouseMove:function(e){var t,o,n,i=this.pitchObject,s=this.previousMouseEvent,r=this.yawObject;this.data.enabled&&(this.mouseDown||this.pointerLocked)&&(this.pointerLocked?(o=e.movementX||e.mozMovementX||0,n=e.movementY||e.mozMovementY||0):(o=e.screenX-s.screenX,n=e.screenY-s.screenY),this.previousMouseEvent.screenX=e.screenX,this.previousMouseEvent.screenY=e.screenY,t=this.data.reverseMouseDrag?1:-1,r.rotation.y+=.002*o*t,i.rotation.x+=.002*n*t,i.rotation.x=Math.max(-PI_2,Math.min(PI_2,i.rotation.x)))},onMouseDown:function(e){var t=this.el.sceneEl;if(this.data.enabled&&this.data.mouseEnabled&&(!t.is("vr-mode")||!t.checkHeadsetConnected())&&0===e.button){var o=t&&t.canvas;this.mouseDown=!0,this.previousMouseEvent.screenX=e.screenX,this.previousMouseEvent.screenY=e.screenY,this.showGrabbingCursor(),this.data.pointerLockEnabled&&!this.pointerLocked&&(o.requestPointerLock?o.requestPointerLock():o.mozRequestPointerLock&&o.mozRequestPointerLock())}},showGrabbingCursor:function(){this.el.sceneEl.canvas.style.cursor="grabbing"},hideGrabbingCursor:function(){this.el.sceneEl.canvas.style.cursor=""},onMouseUp:function(){this.mouseDown=!1,this.hideGrabbingCursor()},onTouchStart:function(e){1===e.touches.length&&this.data.touchEnabled&&!this.el.sceneEl.is("vr-mode")&&(this.touchStart={x:e.touches[0].pageX,y:e.touches[0].pageY},this.touchStarted=!0)},onTouchMove:function(e){var t,o,n=this.el.sceneEl.canvas,i=this.yawObject;this.touchStarted&&this.data.touchEnabled&&(o=2*Math.PI*(e.touches[0].pageX-this.touchStart.x)/n.clientWidth,t=this.data.reverseTouchDrag?1:-1,i.rotation.y-=.5*o*t,this.touchStart={x:e.touches[0].pageX,y:e.touches[0].pageY})},onTouchEnd:function(){this.touchStarted=!1},onEnterVR:function(){var e=this.el.sceneEl;e.checkHeadsetConnected()&&(this.saveCameraPose(),this.el.object3D.position.set(0,0,0),this.el.object3D.rotation.set(0,0,0),e.hasWebXR&&(this.el.object3D.matrixAutoUpdate=!1,this.el.object3D.updateMatrix()))},onExitVR:function(){this.el.sceneEl.checkHeadsetConnected()&&(this.restoreCameraPose(),this.previousHMDPosition.set(0,0,0),this.el.object3D.matrixAutoUpdate=!0)},onPointerLockChange:function(){this.pointerLocked=!(!document.pointerLockElement&&!document.mozPointerLockElement)},onPointerLockError:function(){this.pointerLocked=!1},exitPointerLock:function(){document.exitPointerLock(),this.pointerLocked=!1},updateGrabCursor:function(e){function t(){n.canvas.classList.add("a-grab-cursor")}function o(){n.canvas.classList.remove("a-grab-cursor")}var n=this.el.sceneEl;return n.canvas?e?void t():void o():void(e?n.addEventListener("render-target-loaded",t):n.addEventListener("render-target-loaded",o))},saveCameraPose:function(){var e=this.el;this.savedPose.position.copy(e.object3D.position),this.savedPose.rotation.copy(e.object3D.rotation),this.hasSavedPose=!0},restoreCameraPose:function(){var e=this.el,t=this.savedPose;this.hasSavedPose&&(e.object3D.position.copy(t.position),e.object3D.rotation.copy(t.rotation),this.hasSavedPose=!1)}}); -},{"../core/component":108,"../lib/three":156,"../utils/":182}],68:[function(_dereq_,module,exports){ -var bind=_dereq_("../utils/bind"),registerComponent=_dereq_("../core/component").registerComponent,trackedControlsUtils=_dereq_("../utils/tracked-controls"),checkControllerPresentAndSetup=trackedControlsUtils.checkControllerPresentAndSetup,emitIfAxesChanged=trackedControlsUtils.emitIfAxesChanged,onButtonEvent=trackedControlsUtils.onButtonEvent,GAMEPAD_ID_PREFIX="magicleap",GAMEPAD_ID_SUFFIX="-one",GAMEPAD_ID_COMPOSITE=GAMEPAD_ID_PREFIX+GAMEPAD_ID_SUFFIX,MAGICLEAP_CONTROLLER_MODEL_GLB_URL="https://cdn.aframe.io/controllers/magicleap/magicleap-one-controller.glb",INPUT_MAPPING_WEBXR={axes:{touchpad:[0,1]},buttons:["trigger","grip","touchpad","menu"]};module.exports.Component=registerComponent("magicleap-controls",{schema:{hand:{default:"none"},model:{default:!0},orientationOffset:{type:"vec3"}},mapping:INPUT_MAPPING_WEBXR,init:function(){var t=this;this.controllerPresent=!1,this.lastControllerCheck=0,this.onButtonChanged=bind(this.onButtonChanged,this),this.onButtonDown=function(e){onButtonEvent(e.detail.id,"down",t)},this.onButtonUp=function(e){onButtonEvent(e.detail.id,"up",t)},this.onButtonTouchEnd=function(e){onButtonEvent(e.detail.id,"touchend",t)},this.onButtonTouchStart=function(e){onButtonEvent(e.detail.id,"touchstart",t)},this.previousButtonValues={},this.rendererSystem=this.el.sceneEl.systems.renderer,this.bindMethods()},update:function(){var t=this.data;this.controllerIndex="right"===t.hand?0:"left"===t.hand?1:2},play:function(){this.checkIfControllerPresent(),this.addControllersUpdateListener()},pause:function(){this.removeEventListeners(),this.removeControllersUpdateListener()},bindMethods:function(){this.onModelLoaded=bind(this.onModelLoaded,this),this.onControllersUpdate=bind(this.onControllersUpdate,this),this.checkIfControllerPresent=bind(this.checkIfControllerPresent,this),this.removeControllersUpdateListener=bind(this.removeControllersUpdateListener,this),this.onAxisMoved=bind(this.onAxisMoved,this)},addEventListeners:function(){var t=this.el;t.addEventListener("buttonchanged",this.onButtonChanged),t.addEventListener("buttondown",this.onButtonDown),t.addEventListener("buttonup",this.onButtonUp),t.addEventListener("touchstart",this.onButtonTouchStart),t.addEventListener("touchend",this.onButtonTouchEnd),t.addEventListener("axismove",this.onAxisMoved),t.addEventListener("model-loaded",this.onModelLoaded),this.controllerEventsActive=!0},removeEventListeners:function(){var t=this.el;t.removeEventListener("buttonchanged",this.onButtonChanged),t.removeEventListener("buttondown",this.onButtonDown),t.removeEventListener("buttonup",this.onButtonUp),t.removeEventListener("touchstart",this.onButtonTouchStart),t.removeEventListener("touchend",this.onButtonTouchEnd),t.removeEventListener("axismove",this.onAxisMoved),t.removeEventListener("model-loaded",this.onModelLoaded),this.controllerEventsActive=!1},checkIfControllerPresent:function(){var t=this.data;checkControllerPresentAndSetup(this,GAMEPAD_ID_COMPOSITE,{index:this.controllerIndex,hand:t.hand})},injectTrackedControls:function(){var t=this.el,e=this.data;t.setAttribute("tracked-controls",{idPrefix:GAMEPAD_ID_COMPOSITE,hand:e.hand,controller:this.controllerIndex,orientationOffset:e.orientationOffset}),this.data.model&&this.el.setAttribute("gltf-model",MAGICLEAP_CONTROLLER_MODEL_GLB_URL)},addControllersUpdateListener:function(){this.el.sceneEl.addEventListener("controllersupdated",this.onControllersUpdate,!1)},removeControllersUpdateListener:function(){this.el.sceneEl.removeEventListener("controllersupdated",this.onControllersUpdate,!1)},onControllersUpdate:function(){this.checkIfControllerPresent()},onButtonChanged:function(t){var e,n=this.mapping.buttons[t.detail.id];n&&("trigger"===n&&(e=t.detail.state.value,console.log("analog value of trigger press: "+e)),this.el.emit(n+"changed",t.detail.state))},onModelLoaded:function(t){t.detail.model.scale.set(.01,.01,.01)},onAxisMoved:function(t){emitIfAxesChanged(this,this.mapping.axes,t)},updateModel:function(t,e){},setButtonColor:function(t,e){}}); -},{"../core/component":108,"../utils/bind":176,"../utils/tracked-controls":191}],69:[function(_dereq_,module,exports){ -function parseSide(e){switch(e){case"back":return THREE.BackSide;case"double":return THREE.DoubleSide;default:return THREE.FrontSide}}function parseVertexColors(e){switch(e){case"face":return THREE.FaceColors;case"vertex":return THREE.VertexColors;default:return THREE.NoColors}}function parseBlending(e){switch(e){case"none":return THREE.NoBlending;case"additive":return THREE.AdditiveBlending;case"subtractive":return THREE.SubtractiveBlending;case"multiply":return THREE.MultiplyBlending;default:return THREE.NormalBlending}}function disposeMaterial(e,t){e.dispose(),t.unregisterMaterial(e)}var utils=_dereq_("../utils/"),component=_dereq_("../core/component"),THREE=_dereq_("../lib/three"),shader=_dereq_("../core/shader"),error=utils.debug("components:material:error"),registerComponent=component.registerComponent,shaders=shader.shaders,shaderNames=shader.shaderNames;module.exports.Component=registerComponent("material",{schema:{alphaTest:{default:0,min:0,max:1},depthTest:{default:!0},depthWrite:{default:!0},flatShading:{default:!1},npot:{default:!1},offset:{type:"vec2",default:{x:0,y:0}},opacity:{default:1,min:0,max:1},repeat:{type:"vec2",default:{x:1,y:1}},shader:{default:"standard",oneOf:shaderNames,schemaChange:!0},side:{default:"front",oneOf:["front","back","double"]},transparent:{default:!1},vertexColors:{type:"string",default:"none",oneOf:["face","vertex"]},visible:{default:!0},blending:{default:"normal",oneOf:["none","normal","additive","subtractive","multiply"]},dithering:{default:!0}},init:function(){this.material=null},update:function(e){var t=this.data;this.shader&&t.shader===e.shader||this.updateShader(t.shader),this.shader.update(this.data),this.updateMaterial(e)},updateSchema:function(e){var t,a,r,i;a=e&&e.shader,t=this.oldData&&this.oldData.shader,i=a||t,r=shaders[i]&&shaders[i].schema,r||error("Unknown shader schema "+i),t&&a===t||(this.extendSchema(r),this.updateBehavior())},updateBehavior:function(){function e(e,t){var r;for(r in a)a[r]=e;s.shader.update(a)}var t,a,r=this.el.sceneEl,i=this.schema,s=this;this.tick=void 0,a={};for(t in i)"time"===i[t].type&&(this.tick=e,a[t]=!0);r&&(this.tick?r.addBehavior(this):r.removeBehavior(this))},updateShader:function(e){var t,a=this.data,r=shaders[e]&&shaders[e].Shader;if(!r)throw new Error("Unknown shader "+e);t=this.shader=new r,t.el=this.el,t.init(a),this.setMaterial(t.material),this.updateSchema(a)},updateMaterial:function(e){var t,a=this.data,r=this.material;r.alphaTest=a.alphaTest,r.depthTest=!1!==a.depthTest,r.depthWrite=!1!==a.depthWrite,r.opacity=a.opacity,r.flatShading=a.flatShading,r.side=parseSide(a.side),r.transparent=!1!==a.transparent||a.opacity<1,r.vertexColors=parseVertexColors(a.vertexColors),r.visible=a.visible,r.blending=parseBlending(a.blending),r.dithering=a.dithering;for(t in e)break;!t||e.alphaTest===a.alphaTest&&e.side===a.side&&e.vertexColors===a.vertexColors||(r.needsUpdate=!0)},remove:function(){var e=new THREE.MeshBasicMaterial,t=this.material,a=this.el.getObject3D("mesh");a&&(a.material=e),disposeMaterial(t,this.system)},setMaterial:function(e){var t,a=this.el,r=this.system;this.material&&disposeMaterial(this.material,r),this.material=e,r.registerMaterial(e),t=a.getObject3D("mesh"),t?t.material=e:a.addEventListener("object3dset",function t(r){"mesh"===r.detail.type&&r.target===a&&(a.getObject3D("mesh").material=e,a.removeEventListener("object3dset",t))})}}); -},{"../core/component":108,"../core/shader":118,"../lib/three":156,"../utils/":182}],70:[function(_dereq_,module,exports){ +},{"../core/component":105,"../lib/three":153,"../utils":178,"../utils/bind":172,"../utils/debug":174}],65:[function(_dereq_,module,exports){ +function isEqualVec3(e,t){return!(!e||!t)&&(e.x===t.x&&e.y===t.y&&e.z===t.z)}var registerComponent=_dereq_("../core/component").registerComponent;module.exports.Component=registerComponent("line",{schema:{start:{type:"vec3",default:{x:0,y:0,z:0}},end:{type:"vec3",default:{x:0,y:0,z:0}},color:{type:"color",default:"#74BEC1"},opacity:{type:"number",default:1},visible:{default:!0}},multiple:!0,init:function(){var e,t,r=this.data;this.rendererSystem=this.el.sceneEl.systems.renderer,t=this.material=new THREE.LineBasicMaterial({color:r.color,opacity:r.opacity,transparent:r.opacity<1,visible:r.visible}),e=this.geometry=new THREE.BufferGeometry,e.addAttribute("position",new THREE.BufferAttribute(new Float32Array(6),3)),this.rendererSystem.applyColorCorrection(t.color),this.line=new THREE.Line(e,t),this.el.setObject3D(this.attrName,this.line)},update:function(e){var t=this.data,r=this.geometry,i=!1,o=this.material,n=r.attributes.position.array;isEqualVec3(t.start,e.start)||(n[0]=t.start.x,n[1]=t.start.y,n[2]=t.start.z,i=!0),isEqualVec3(t.end,e.end)||(n[3]=t.end.x,n[4]=t.end.y,n[5]=t.end.z,i=!0),i&&(r.attributes.position.needsUpdate=!0,r.computeBoundingSphere()),o.color.setStyle(t.color),this.rendererSystem.applyColorCorrection(o.color),o.opacity=t.opacity,o.transparent=t.opacity<1,o.visible=t.visible},remove:function(){this.el.removeObject3D("line",this.line)}}); +},{"../core/component":105}],66:[function(_dereq_,module,exports){ +var registerComponent=_dereq_("../core/component").registerComponent,registerShader=_dereq_("../core/shader").registerShader,THREE=_dereq_("../lib/three");module.exports.Component=registerComponent("link",{schema:{backgroundColor:{default:"red",type:"color"},borderColor:{default:"white",type:"color"},highlighted:{default:!1},highlightedColor:{default:"#24CAFF",type:"color"},href:{default:""},image:{type:"asset"},on:{default:"click"},peekMode:{default:!1},title:{default:""},titleColor:{default:"white",type:"color"},visualAspectEnabled:{default:!1}},init:function(){this.navigate=this.navigate.bind(this),this.previousQuaternion=void 0,this.quaternionClone=new THREE.Quaternion,this.hiddenEls=[]},update:function(e){var t,i,r=this.data,o=this.el;r.visualAspectEnabled&&(this.initVisualAspect(),t=r.highlighted?r.highlightedColor:r.backgroundColor,i=r.highlighted?r.highlightedColor:r.borderColor,o.setAttribute("material","backgroundColor",t),o.setAttribute("material","strokeColor",i),r.on!==e.on&&this.updateEventListener(),void 0!==e.peekMode&&r.peekMode!==e.peekMode&&this.updatePeekMode(),r.image&&e.image!==r.image&&o.setAttribute("material","pano","string"==typeof r.image?r.image:r.image.src))},updatePeekMode:function(){var e=this.el,t=this.sphereEl;this.data.peekMode?(this.hideAll(),e.getObject3D("mesh").visible=!1,t.setAttribute("visible",!0)):(this.showAll(),e.getObject3D("mesh").visible=!0,t.setAttribute("visible",!1))},play:function(){this.updateEventListener()},pause:function(){this.removeEventListener()},updateEventListener:function(){var e=this.el;e.isPlaying&&(this.removeEventListener(),e.addEventListener(this.data.on,this.navigate))},removeEventListener:function(){var e=this.data.on;e&&this.el.removeEventListener(e,this.navigate)},initVisualAspect:function(){var e,t,i,r=this.el;this.data.visualAspectEnabled&&!this.visualAspectInitialized&&(i=this.textEl=this.textEl||document.createElement("a-entity"),t=this.sphereEl=this.sphereEl||document.createElement("a-entity"),e=this.semiSphereEl=this.semiSphereEl||document.createElement("a-entity"),r.setAttribute("geometry",{primitive:"circle",radius:1,segments:64}),r.setAttribute("material",{shader:"portal",pano:this.data.image,side:"double"}),i.setAttribute("text",{color:this.data.titleColor,align:"center",font:"kelsonsans",value:this.data.title||this.data.href,width:4}),i.setAttribute("position","0 1.5 0"),r.appendChild(i),e.setAttribute("geometry",{primitive:"sphere",radius:1,phiStart:0,segmentsWidth:64,segmentsHeight:64,phiLength:180,thetaStart:0,thetaLength:360}),e.setAttribute("material",{shader:"portal",borderEnabled:0,pano:this.data.image,side:"back"}),e.setAttribute("rotation","0 180 0"),e.setAttribute("position","0 0 0"),e.setAttribute("visible",!1),r.appendChild(e),t.setAttribute("geometry",{primitive:"sphere",radius:10,segmentsWidth:64,segmentsHeight:64}),t.setAttribute("material",{shader:"portal",borderEnabled:0,pano:this.data.image,side:"back"}),t.setAttribute("visible",!1),r.appendChild(t),this.visualAspectInitialized=!0)},navigate:function(){window.location=this.data.href},tick:function(){var e=new THREE.Vector3,t=new THREE.Vector3,i=new THREE.Quaternion,r=new THREE.Vector3;return function(){var o,a,n=this.el,s=n.object3D,l=n.sceneEl.camera,d=this.textEl;if(this.data.visualAspectEnabled)if(s.updateMatrixWorld(),l.parent.updateMatrixWorld(),l.updateMatrixWorld(),s.matrix.decompose(t,i,r),t.setFromMatrixPosition(s.matrixWorld),e.setFromMatrixPosition(l.matrixWorld),(a=t.distanceTo(e))>20)this.previousQuaternion||(this.quaternionClone.copy(i),this.previousQuaternion=this.quaternionClone),s.lookAt(e);else{if(o=this.calculateCameraPortalOrientation(),a<.5){if(!0===this.semiSphereEl.getAttribute("visible"))return;d.setAttribute("text","width",1.5),o<=0?(d.setAttribute("position","0 0 0.75"),d.setAttribute("rotation","0 180 0"),this.semiSphereEl.setAttribute("rotation","0 0 0")):(d.setAttribute("position","0 0 -0.75"),d.setAttribute("rotation","0 0 0"),this.semiSphereEl.setAttribute("rotation","0 180 0")),n.getObject3D("mesh").visible=!1,this.semiSphereEl.setAttribute("visible",!0),this.peekCameraPortalOrientation=o}else o<=0?d.setAttribute("rotation","0 180 0"):d.setAttribute("rotation","0 0 0"),d.setAttribute("text","width",5),d.setAttribute("position","0 1.5 0"),n.getObject3D("mesh").visible=!0,this.semiSphereEl.setAttribute("visible",!1),this.peekCameraPortalOrientation=void 0;this.previousQuaternion&&(s.quaternion.copy(this.previousQuaternion),this.previousQuaternion=void 0)}}}(),hideAll:function(){var e=this.el,t=this.hiddenEls,i=this;t.length>0||e.sceneEl.object3D.traverse(function(r){r&&r.el&&r.el.hasAttribute("link-controls")||r.el&&r!==e.sceneEl.object3D&&r.el!==e&&r.el!==i.sphereEl&&r.el!==e.sceneEl.cameraEl&&!1!==r.el.getAttribute("visible")&&r.el!==i.textEl&&r.el!==i.semiSphereEl&&(r.el.setAttribute("visible",!1),t.push(r.el))})},showAll:function(){this.hiddenEls.forEach(function(e){e.setAttribute("visible",!0)}),this.hiddenEls=[]},calculateCameraPortalOrientation:function(){var e=new THREE.Matrix4,t=new THREE.Vector3,i=new THREE.Vector3(0,0,1),r=new THREE.Vector3(0,0,0);return function(){var o=this.el,a=o.sceneEl.camera;return t.set(0,0,0),i.set(0,0,1),r.set(0,0,0),o.object3D.matrixWorld.extractRotation(e),i.applyMatrix4(e),o.object3D.updateMatrixWorld(),o.object3D.localToWorld(r),a.parent.parent.updateMatrixWorld(),a.parent.updateMatrixWorld(),a.updateMatrixWorld(),a.localToWorld(t),t.sub(r).normalize(),i.normalize(),Math.sign(i.dot(t))}}(),remove:function(){this.removeEventListener()}}),registerShader("portal",{schema:{borderEnabled:{default:1,type:"int",is:"uniform"},backgroundColor:{default:"red",type:"color",is:"uniform"},pano:{type:"map",is:"uniform"},strokeColor:{default:"white",type:"color",is:"uniform"}},vertexShader:["vec3 portalPosition;","varying vec3 vWorldPosition;","varying float vDistanceToCenter;","varying float vDistance;","void main() {","vDistanceToCenter = clamp(length(position - vec3(0.0, 0.0, 0.0)), 0.0, 1.0);","portalPosition = (modelMatrix * vec4(0.0, 0.0, 0.0, 1.0)).xyz;","vDistance = length(portalPosition - cameraPosition);","vWorldPosition = (modelMatrix * vec4(position, 1.0)).xyz;","gl_Position = projectionMatrix * modelViewMatrix * vec4(position, 1.0);","}"].join("\n"),fragmentShader:["#define RECIPROCAL_PI2 0.15915494","uniform sampler2D pano;","uniform vec3 strokeColor;","uniform vec3 backgroundColor;","uniform float borderEnabled;","varying float vDistanceToCenter;","varying float vDistance;","varying vec3 vWorldPosition;","void main() {","vec3 direction = normalize(vWorldPosition - cameraPosition);","vec2 sampleUV;","float borderThickness = clamp(exp(-vDistance / 50.0), 0.6, 0.95);","sampleUV.y = saturate(direction.y * 0.5 + 0.5);","sampleUV.x = atan(direction.z, -direction.x) * -RECIPROCAL_PI2 + 0.5;","if (vDistanceToCenter > borderThickness && borderEnabled == 1.0) {","gl_FragColor = vec4(strokeColor, 1.0);","} else {","gl_FragColor = mix(texture2D(pano, sampleUV), vec4(backgroundColor, 1.0), clamp(pow((vDistance / 15.0), 2.0), 0.0, 1.0));","}","}"].join("\n")}); +},{"../core/component":105,"../core/shader":115,"../lib/three":153}],67:[function(_dereq_,module,exports){ +var registerComponent=_dereq_("../core/component").registerComponent,THREE=_dereq_("../lib/three"),utils=_dereq_("../utils/"),bind=utils.bind,PolyfillControls=_dereq_("../utils").device.PolyfillControls,PI_2=Math.PI/2;module.exports.Component=registerComponent("look-controls",{dependencies:["position","rotation"],schema:{enabled:{default:!0},hmdEnabled:{default:!0},pointerLockEnabled:{default:!1},reverseMouseDrag:{default:!1},reverseTouchDrag:{default:!1},touchEnabled:{default:!0}},init:function(){this.previousHMDPosition=new THREE.Vector3,this.hmdQuaternion=new THREE.Quaternion,this.hmdEuler=new THREE.Euler,this.position=new THREE.Vector3,this.savedRotation=new THREE.Vector3,this.savedPosition=new THREE.Vector3,this.polyfillObject=new THREE.Object3D,this.polyfillControls=new PolyfillControls(this.polyfillObject),this.rotation={},this.deltaRotation={},this.savedPose=null,this.pointerLocked=!1,this.setupMouseControls(),this.bindMethods(),this.el.object3D.matrixAutoUpdate=!1,this.el.object3D.updateMatrix(),this.savedPose={position:new THREE.Vector3,rotation:new THREE.Euler},this.el.sceneEl.is("vr-mode")&&this.onEnterVR()},update:function(e){var t=this.data;t.enabled!==e.enabled&&this.updateGrabCursor(t.enabled),!e||t.hmdEnabled||e.hmdEnabled||(this.pitchObject.rotation.set(0,0,0),this.yawObject.rotation.set(0,0,0)),e&&!t.pointerLockEnabled!==e.pointerLockEnabled&&(this.removeEventListeners(),this.addEventListeners(),this.pointerLocked&&this.exitPointerLock())},tick:function(e){this.data.enabled&&this.updateOrientation()},play:function(){this.addEventListeners()},pause:function(){this.removeEventListeners(),this.pointerLocked&&this.exitPointerLock()},remove:function(){this.removeEventListeners(),this.pointerLocked&&this.exitPointerLock()},bindMethods:function(){this.onMouseDown=bind(this.onMouseDown,this),this.onMouseMove=bind(this.onMouseMove,this),this.onMouseUp=bind(this.onMouseUp,this),this.onTouchStart=bind(this.onTouchStart,this),this.onTouchMove=bind(this.onTouchMove,this),this.onTouchEnd=bind(this.onTouchEnd,this),this.onEnterVR=bind(this.onEnterVR,this),this.onExitVR=bind(this.onExitVR,this),this.onPointerLockChange=bind(this.onPointerLockChange,this),this.onPointerLockError=bind(this.onPointerLockError,this)},setupMouseControls:function(){this.mouseDown=!1,this.pitchObject=new THREE.Object3D,this.yawObject=new THREE.Object3D,this.yawObject.position.y=10,this.yawObject.add(this.pitchObject)},addEventListeners:function(){var e=this.el.sceneEl,t=e.canvas;if(!t)return void e.addEventListener("render-target-loaded",bind(this.addEventListeners,this));t.addEventListener("mousedown",this.onMouseDown,!1),window.addEventListener("mousemove",this.onMouseMove,!1),window.addEventListener("mouseup",this.onMouseUp,!1),t.addEventListener("touchstart",this.onTouchStart),window.addEventListener("touchmove",this.onTouchMove),window.addEventListener("touchend",this.onTouchEnd),e.addEventListener("enter-vr",this.onEnterVR),e.addEventListener("exit-vr",this.onExitVR),this.data.pointerLockEnabled&&(document.addEventListener("pointerlockchange",this.onPointerLockChange,!1),document.addEventListener("mozpointerlockchange",this.onPointerLockChange,!1),document.addEventListener("pointerlockerror",this.onPointerLockError,!1))},removeEventListeners:function(){var e=this.el.sceneEl,t=e&&e.canvas;t&&(t.removeEventListener("mousedown",this.onMouseDown),window.removeEventListener("mousemove",this.onMouseMove),window.removeEventListener("mouseup",this.onMouseUp),t.removeEventListener("touchstart",this.onTouchStart),window.removeEventListener("touchmove",this.onTouchMove),window.removeEventListener("touchend",this.onTouchEnd),e.removeEventListener("enter-vr",this.onEnterVR),e.removeEventListener("exit-vr",this.onExitVR),document.removeEventListener("pointerlockchange",this.onPointerLockChange,!1),document.removeEventListener("mozpointerlockchange",this.onPointerLockChange,!1),document.removeEventListener("pointerlockerror",this.onPointerLockError,!1))},updateOrientation:function(){var e=new THREE.Matrix4;return function(){var t,o=this.hmdEuler,n=this.el.object3D,i=this.pitchObject,s=this.yawObject,r=this.el.sceneEl;r.is("vr-mode")&&r.hasWebXR?(t=r.renderer.vr.getCameraPose())&&(e.elements=t.poseModelMatrix,e.decompose(n.position,n.rotation,n.scale)):n.updateMatrix(),r.is("vr-mode")&&r.checkHeadsetConnected()||(this.polyfillControls.update(),o.setFromQuaternion(this.polyfillObject.quaternion,"YXZ"),n.rotation.x=o.x+i.rotation.x,n.rotation.y=o.y+s.rotation.y)}}(),onMouseMove:function(e){var t,o,n,i=this.pitchObject,s=this.previousMouseEvent,r=this.yawObject;this.data.enabled&&(this.mouseDown||this.pointerLocked)&&(this.pointerLocked?(o=e.movementX||e.mozMovementX||0,n=e.movementY||e.mozMovementY||0):(o=e.screenX-s.screenX,n=e.screenY-s.screenY),this.previousMouseEvent=e,t=this.data.reverseMouseDrag?1:-1,r.rotation.y+=.002*o*t,i.rotation.x+=.002*n*t,i.rotation.x=Math.max(-PI_2,Math.min(PI_2,i.rotation.x)))},onMouseDown:function(e){if(this.data.enabled&&0===e.button){var t=this.el.sceneEl,o=t&&t.canvas;this.mouseDown=!0,this.previousMouseEvent=e,this.showGrabbingCursor(),this.data.pointerLockEnabled&&!this.pointerLocked&&(o.requestPointerLock?o.requestPointerLock():o.mozRequestPointerLock&&o.mozRequestPointerLock())}},showGrabbingCursor:function(){this.el.sceneEl.canvas.style.cursor="grabbing"},hideGrabbingCursor:function(){this.el.sceneEl.canvas.style.cursor=""},onMouseUp:function(){this.mouseDown=!1,this.hideGrabbingCursor()},onTouchStart:function(e){1===e.touches.length&&this.data.touchEnabled&&(this.touchStart={x:e.touches[0].pageX,y:e.touches[0].pageY},this.touchStarted=!0)},onTouchMove:function(e){var t,o,n=this.el.sceneEl.canvas,i=this.yawObject;this.touchStarted&&this.data.touchEnabled&&(o=2*Math.PI*(e.touches[0].pageX-this.touchStart.x)/n.clientWidth,t=this.data.reverseTouchDrag?1:-1,i.rotation.y-=.5*o*t,this.touchStart={x:e.touches[0].pageX,y:e.touches[0].pageY})},onTouchEnd:function(){this.touchStarted=!1},onEnterVR:function(){this.el.sceneEl.checkHeadsetConnected()&&(this.saveCameraPose(),this.el.object3D.position.set(0,0,0),this.el.object3D.updateMatrix())},onExitVR:function(){this.el.sceneEl.checkHeadsetConnected()&&(this.restoreCameraPose(),this.previousHMDPosition.set(0,0,0))},onPointerLockChange:function(){this.pointerLocked=!(!document.pointerLockElement&&!document.mozPointerLockElement)},onPointerLockError:function(){this.pointerLocked=!1},exitPointerLock:function(){document.exitPointerLock(),this.pointerLocked=!1},updateGrabCursor:function(e){function t(){n.canvas.classList.add("a-grab-cursor")}function o(){n.canvas.classList.remove("a-grab-cursor")}var n=this.el.sceneEl;return n.canvas?e?void t():void o():void(e?n.addEventListener("render-target-loaded",t):n.addEventListener("render-target-loaded",o))},saveCameraPose:function(){var e=this.el;this.savedPose.position.copy(e.object3D.position),this.savedPose.rotation.copy(e.object3D.rotation),this.hasSavedPose=!0},restoreCameraPose:function(){var e=this.el,t=this.savedPose;this.hasSavedPose&&(e.object3D.position.copy(t.position),e.object3D.rotation.copy(t.rotation),this.hasSavedPose=!1)}}); +},{"../core/component":105,"../lib/three":153,"../utils":178,"../utils/":178}],68:[function(_dereq_,module,exports){ +function parseSide(e){switch(e){case"back":return THREE.BackSide;case"double":return THREE.DoubleSide;default:return THREE.FrontSide}}function parseVertexColors(e){switch(e){case"face":return THREE.FaceColors;case"vertex":return THREE.VertexColors;default:return THREE.NoColors}}function parseBlending(e){switch(e){case"none":return THREE.NoBlending;case"additive":return THREE.AdditiveBlending;case"subtractive":return THREE.SubtractiveBlending;case"multiply":return THREE.MultiplyBlending;default:return THREE.NormalBlending}}function disposeMaterial(e,t){e.dispose(),t.unregisterMaterial(e)}var utils=_dereq_("../utils/"),component=_dereq_("../core/component"),THREE=_dereq_("../lib/three"),shader=_dereq_("../core/shader"),error=utils.debug("components:material:error"),registerComponent=component.registerComponent,shaders=shader.shaders,shaderNames=shader.shaderNames;module.exports.Component=registerComponent("material",{schema:{alphaTest:{default:0,min:0,max:1},depthTest:{default:!0},depthWrite:{default:!0},flatShading:{default:!1},npot:{default:!1},offset:{type:"vec2",default:{x:0,y:0}},opacity:{default:1,min:0,max:1},repeat:{type:"vec2",default:{x:1,y:1}},shader:{default:"standard",oneOf:shaderNames,schemaChange:!0},side:{default:"front",oneOf:["front","back","double"]},transparent:{default:!1},vertexColors:{type:"string",default:"none",oneOf:["face","vertex"]},visible:{default:!0},blending:{default:"normal",oneOf:["none","normal","additive","subtractive","multiply"]}},init:function(){this.material=null},update:function(e){var t=this.data;this.shader&&t.shader===e.shader||this.updateShader(t.shader),this.shader.update(this.data),this.updateMaterial(e)},updateSchema:function(e){var t,a,r,i;a=e&&e.shader,t=this.oldData&&this.oldData.shader,i=a||t,r=shaders[i]&&shaders[i].schema,r||error("Unknown shader schema "+i),t&&a===t||(this.extendSchema(r),this.updateBehavior())},updateBehavior:function(){function e(e,t){var r;for(r in a)a[r]=e;s.shader.update(a)}var t,a,r=this.el.sceneEl,i=this.schema,s=this;this.tick=void 0,a={};for(t in i)"time"===i[t].type&&(this.tick=e,a[t]=!0);r&&(this.tick?r.addBehavior(this):r.removeBehavior(this))},updateShader:function(e){var t,a=this.data,r=shaders[e]&&shaders[e].Shader;if(!r)throw new Error("Unknown shader "+e);t=this.shader=new r,t.el=this.el,t.init(a),this.setMaterial(t.material),this.updateSchema(a)},updateMaterial:function(e){var t,a=this.data,r=this.material;r.alphaTest=a.alphaTest,r.depthTest=!1!==a.depthTest,r.depthWrite=!1!==a.depthWrite,r.opacity=a.opacity,r.flatShading=a.flatShading,r.side=parseSide(a.side),r.transparent=!1!==a.transparent||a.opacity<1,r.vertexColors=parseVertexColors(a.vertexColors),r.visible=a.visible,r.blending=parseBlending(a.blending);for(t in e)break;!t||e.alphaTest===a.alphaTest&&e.side===a.side&&e.vertexColors===a.vertexColors||(r.needsUpdate=!0)},remove:function(){var e=new THREE.MeshBasicMaterial,t=this.material,a=this.el.getObject3D("mesh");a&&(a.material=e),disposeMaterial(t,this.system)},setMaterial:function(e){var t,a=this.el,r=this.system;this.material&&disposeMaterial(this.material,r),this.material=e,r.registerMaterial(e),t=a.getObject3D("mesh"),t?t.material=e:a.addEventListener("object3dset",function t(r){"mesh"===r.detail.type&&r.target===a&&(a.getObject3D("mesh").material=e,a.removeEventListener("object3dset",t))})}}); +},{"../core/component":105,"../core/shader":115,"../lib/three":153,"../utils/":178}],69:[function(_dereq_,module,exports){ var debug=_dereq_("../utils/debug"),registerComponent=_dereq_("../core/component").registerComponent,THREE=_dereq_("../lib/three"),warn=debug("components:obj-model:warn");module.exports.Component=registerComponent("obj-model",{schema:{mtl:{type:"model"},obj:{type:"model"}},init:function(){var e=this;this.model=null,this.objLoader=new THREE.OBJLoader,this.mtlLoader=new THREE.MTLLoader(this.objLoader.manager),this.mtlLoader.crossOrigin="",this.el.addEventListener("componentinitialized",function(o){e.model&&"material"===o.detail.name&&e.applyMaterial()})},update:function(){var e=this.data;e.obj&&(this.resetMesh(),this.loadObj(e.obj,e.mtl))},remove:function(){this.model&&this.resetMesh()},resetMesh:function(){this.el.removeObject3D("mesh")},loadObj:function(e,o){var t=this,r=this.el,i=this.mtlLoader,a=this.objLoader,s=this.el.sceneEl.systems.renderer,n=o.substr(0,o.lastIndexOf("/")+1);if(o)return r.hasAttribute("material")&&warn("Material component properties are ignored when a .MTL is provided"),i.setResourcePath(n),void i.load(o,function(o){o.preload(),a.setMaterials(o),a.load(e,function(e){t.model=e,t.model.traverse(function(e){if(e.isMesh){var o=e.material;o.color&&s.applyColorCorrection(o.color),o.map&&s.applyColorCorrection(o.map),o.emissive&&s.applyColorCorrection(o.emissive),o.emissiveMap&&s.applyColorCorrection(o.emissiveMap)}}),r.setObject3D("mesh",e),r.emit("model-loaded",{format:"obj",model:e})})});a.load(e,function(e){t.model=e,t.applyMaterial(),r.setObject3D("mesh",e),r.emit("model-loaded",{format:"obj",model:e})})},applyMaterial:function(){var e=this.el.components.material;e&&this.model.traverse(function(o){o instanceof THREE.Mesh&&(o.material=e.material)})}}); -},{"../core/component":108,"../lib/three":156,"../utils/debug":178}],71:[function(_dereq_,module,exports){ -var registerComponent=_dereq_("../core/component").registerComponent,bind=_dereq_("../utils/bind"),trackedControlsUtils=_dereq_("../utils/tracked-controls"),checkControllerPresentAndSetup=trackedControlsUtils.checkControllerPresentAndSetup,emitIfAxesChanged=trackedControlsUtils.emitIfAxesChanged,onButtonEvent=trackedControlsUtils.onButtonEvent,isWebXRAvailable=_dereq_("../utils/").device.isWebXRAvailable,GAMEPAD_ID_WEBXR="oculus-go",GAMEPAD_ID_WEBVR="Oculus Go",OCULUS_GO_CONTROLLER_MODEL_URL="https://cdn.aframe.io/controllers/oculus/go/oculus-go-controller.gltf",GAMEPAD_ID_PREFIX=isWebXRAvailable?GAMEPAD_ID_WEBXR:GAMEPAD_ID_WEBVR,INPUT_MAPPING_WEBVR={axes:{trackpad:[0,1]},buttons:["trackpad","trigger"]},INPUT_MAPPING_WEBXR={axes:{touchpad:[0,1]},buttons:["trigger","none","touchpad"]},INPUT_MAPPING=isWebXRAvailable?INPUT_MAPPING_WEBXR:INPUT_MAPPING_WEBVR;module.exports.Component=registerComponent("oculus-go-controls",{schema:{hand:{default:""},buttonColor:{type:"color",default:"#FFFFFF"},buttonTouchedColor:{type:"color",default:"#BBBBBB"},buttonHighlightColor:{type:"color",default:"#7A7A7A"},model:{default:!0},orientationOffset:{type:"vec3"},armModel:{default:!0}},mapping:INPUT_MAPPING,bindMethods:function(){this.onModelLoaded=bind(this.onModelLoaded,this),this.onControllersUpdate=bind(this.onControllersUpdate,this),this.checkIfControllerPresent=bind(this.checkIfControllerPresent,this),this.removeControllersUpdateListener=bind(this.removeControllersUpdateListener,this),this.onAxisMoved=bind(this.onAxisMoved,this)},init:function(){var t=this;this.onButtonChanged=bind(this.onButtonChanged,this),this.onButtonDown=function(e){onButtonEvent(e.detail.id,"down",t)},this.onButtonUp=function(e){onButtonEvent(e.detail.id,"up",t)},this.onButtonTouchStart=function(e){onButtonEvent(e.detail.id,"touchstart",t)},this.onButtonTouchEnd=function(e){onButtonEvent(e.detail.id,"touchend",t)},this.controllerPresent=!1,this.lastControllerCheck=0,this.rendererSystem=this.el.sceneEl.systems.renderer,this.bindMethods()},addEventListeners:function(){var t=this.el;t.addEventListener("buttonchanged",this.onButtonChanged),t.addEventListener("buttondown",this.onButtonDown),t.addEventListener("buttonup",this.onButtonUp),t.addEventListener("touchstart",this.onButtonTouchStart),t.addEventListener("touchend",this.onButtonTouchEnd),t.addEventListener("model-loaded",this.onModelLoaded),t.addEventListener("axismove",this.onAxisMoved),this.controllerEventsActive=!0},removeEventListeners:function(){var t=this.el;t.removeEventListener("buttonchanged",this.onButtonChanged),t.removeEventListener("buttondown",this.onButtonDown),t.removeEventListener("buttonup",this.onButtonUp),t.removeEventListener("touchstart",this.onButtonTouchStart),t.removeEventListener("touchend",this.onButtonTouchEnd),t.removeEventListener("model-loaded",this.onModelLoaded),t.removeEventListener("axismove",this.onAxisMoved),this.controllerEventsActive=!1},checkIfControllerPresent:function(){checkControllerPresentAndSetup(this,GAMEPAD_ID_PREFIX,this.data.hand?{hand:this.data.hand}:{})},play:function(){this.checkIfControllerPresent(),this.addControllersUpdateListener()},pause:function(){this.removeEventListeners(),this.removeControllersUpdateListener()},injectTrackedControls:function(){var t=this.el,e=this.data;t.setAttribute("tracked-controls",{armModel:e.armModel,hand:e.hand,idPrefix:GAMEPAD_ID_PREFIX,orientationOffset:e.orientationOffset}),this.data.model&&this.el.setAttribute("gltf-model",OCULUS_GO_CONTROLLER_MODEL_URL)},addControllersUpdateListener:function(){this.el.sceneEl.addEventListener("controllersupdated",this.onControllersUpdate,!1)},removeControllersUpdateListener:function(){this.el.sceneEl.removeEventListener("controllersupdated",this.onControllersUpdate,!1)},onControllersUpdate:function(){this.checkIfControllerPresent()},onModelLoaded:function(t){var e,o=t.detail.model;this.data.model&&(e=this.buttonMeshes={},e.trigger=o.getObjectByName("oculus_go_button_trigger"),e.trackpad=o.getObjectByName("oculus_go_touchpad"),e.touchpad=o.getObjectByName("oculus_go_touchpad"))},onButtonChanged:function(t){var e=this.mapping.buttons[t.detail.id];e&&this.el.emit(e+"changed",t.detail.state)},onAxisMoved:function(t){emitIfAxesChanged(this,this.mapping.axes,t)},updateModel:function(t,e){this.data.model&&this.updateButtonModel(t,e)},updateButtonModel:function(t,e){var o=this.buttonMeshes;if(o&&o[t]){var n,i;switch(e){case"down":n=this.data.buttonHighlightColor;break;case"touchstart":n=this.data.buttonTouchedColor;break;default:n=this.data.buttonColor}i=o[t],i.material.color.set(n),this.rendererSystem.applyColorCorrection(i.material.color)}}}); -},{"../core/component":108,"../utils/":182,"../utils/bind":176,"../utils/tracked-controls":191}],72:[function(_dereq_,module,exports){ -var bind=_dereq_("../utils/bind"),registerComponent=_dereq_("../core/component").registerComponent,THREE=_dereq_("../lib/three"),trackedControlsUtils=_dereq_("../utils/tracked-controls"),checkControllerPresentAndSetup=trackedControlsUtils.checkControllerPresentAndSetup,emitIfAxesChanged=trackedControlsUtils.emitIfAxesChanged,onButtonEvent=trackedControlsUtils.onButtonEvent,isWebXRAvailable=_dereq_("../utils/").device.isWebXRAvailable,GAMEPAD_ID_WEBXR="oculus-touch",GAMEPAD_ID_WEBVR="Oculus Touch",GAMEPAD_ID_PREFIX=isWebXRAvailable?GAMEPAD_ID_WEBXR:GAMEPAD_ID_WEBVR,TOUCH_CONTROLLER_MODEL_BASE_URL="https://cdn.aframe.io/controllers/oculus/oculus-touch-controller-",OCULUS_TOUCH_WEBVR={left:{modelUrl:TOUCH_CONTROLLER_MODEL_BASE_URL+"left.gltf",rayOrigin:{origin:{x:.008,y:-.01,z:0},direction:{x:0,y:-.8,z:-1}},modelPivotOffset:new THREE.Vector3(-.005,.003,-.055),modelPivotRotation:new THREE.Euler(0,0,0)},right:{modelUrl:TOUCH_CONTROLLER_MODEL_BASE_URL+"right.gltf",rayOrigin:{origin:{x:-.008,y:-.01,z:0},direction:{x:0,y:-.8,z:-1}},modelPivotOffset:new THREE.Vector3(.005,.003,-.055),modelPivotRotation:new THREE.Euler(0,0,0)}},OCULUS_TOUCH_WEBXR={left:{modelUrl:TOUCH_CONTROLLER_MODEL_BASE_URL+"left.gltf",rayOrigin:{origin:{x:.002,y:-.005,z:-.03},direction:{x:0,y:-.8,z:-1}},modelPivotOffset:new THREE.Vector3(-.005,.036,-.037),modelPivotRotation:new THREE.Euler(Math.PI/4.5,0,0)},right:{modelUrl:TOUCH_CONTROLLER_MODEL_BASE_URL+"right.gltf",rayOrigin:{origin:{x:-.002,y:-.005,z:-.03},direction:{x:0,y:-.8,z:-1}},modelPivotOffset:new THREE.Vector3(.005,.036,-.037),modelPivotRotation:new THREE.Euler(Math.PI/4.5,0,0)}},OCULUS_TOUCH_CONFIG=isWebXRAvailable?OCULUS_TOUCH_WEBXR:OCULUS_TOUCH_WEBVR,CONTROLLER_DEFAULT="oculus-touch",CONTROLLER_PROPERTIES={"oculus-touch":OCULUS_TOUCH_CONFIG,"oculus-touch-v2":{left:{modelUrl:TOUCH_CONTROLLER_MODEL_BASE_URL+"gen2-left.gltf",rayOrigin:{origin:{x:-.01,y:0,z:-.02},direction:{x:0,y:-.5,z:-1}},modelPivotOffset:new THREE.Vector3(0,0,0),modelPivotRotation:new THREE.Euler(0,0,0)},right:{modelUrl:TOUCH_CONTROLLER_MODEL_BASE_URL+"gen2-right.gltf",rayOrigin:{origin:{x:.01,y:0,z:-.02},direction:{x:0,y:-.5,z:-1}},modelPivotOffset:new THREE.Vector3(0,0,0),modelPivotRotation:new THREE.Euler(0,0,0)}},"oculus-touch-v3":{left:{modelUrl:TOUCH_CONTROLLER_MODEL_BASE_URL+"v3-left.glb",rayOrigin:{origin:{x:.015,y:.005,z:0},direction:{x:0,y:0,z:-1}},modelPivotOffset:new THREE.Vector3(.01,-.01,.05),modelPivotRotation:new THREE.Euler(Math.PI/4,0,0)},right:{modelUrl:TOUCH_CONTROLLER_MODEL_BASE_URL+"v3-right.glb",rayOrigin:{origin:{x:-.015,y:.005,z:0},direction:{x:0,y:0,z:-1}},modelPivotOffset:new THREE.Vector3(-.01,-.01,.05),modelPivotRotation:new THREE.Euler(Math.PI/4,0,0)}}},INPUT_MAPPING_WEBVR={left:{axes:{thumbstick:[0,1]},buttons:["thumbstick","trigger","grip","xbutton","ybutton","surface"]},right:{axes:{thumbstick:[0,1]},buttons:["thumbstick","trigger","grip","abutton","bbutton","surface"]}},INPUT_MAPPING_WEBXR={left:{axes:{thumbstick:[2,3]},buttons:["trigger","grip","none","thumbstick","xbutton","ybutton","surface"]},right:{axes:{thumbstick:[2,3]},buttons:["trigger","grip","none","thumbstick","abutton","bbutton","surface"]}},INPUT_MAPPING=isWebXRAvailable?INPUT_MAPPING_WEBXR:INPUT_MAPPING_WEBVR;module.exports.Component=registerComponent("oculus-touch-controls",{schema:{hand:{default:"left"},buttonColor:{type:"color",default:"#999"},buttonTouchColor:{type:"color",default:"#8AB"},buttonHighlightColor:{type:"color",default:"#2DF"},model:{default:!0},controllerType:{default:"auto",oneOf:["auto","oculus-touch","oculus-touch-v2","oculus-touch-v3"]},orientationOffset:{type:"vec3",default:{x:43,y:0,z:0}}},mapping:INPUT_MAPPING,bindMethods:function(){this.onModelLoaded=bind(this.onModelLoaded,this),this.onControllersUpdate=bind(this.onControllersUpdate,this),this.checkIfControllerPresent=bind(this.checkIfControllerPresent,this),this.onAxisMoved=bind(this.onAxisMoved,this)},init:function(){var t=this;this.onButtonChanged=bind(this.onButtonChanged,this),this.onButtonDown=function(e){onButtonEvent(e.detail.id,"down",t,t.data.hand)},this.onButtonUp=function(e){onButtonEvent(e.detail.id,"up",t,t.data.hand)},this.onButtonTouchStart=function(e){onButtonEvent(e.detail.id,"touchstart",t,t.data.hand)},this.onButtonTouchEnd=function(e){onButtonEvent(e.detail.id,"touchend",t,t.data.hand)},this.controllerPresent=!1,this.lastControllerCheck=0,this.previousButtonValues={},this.rendererSystem=this.el.sceneEl.systems.renderer,this.bindMethods()},addEventListeners:function(){var t=this.el;t.addEventListener("buttonchanged",this.onButtonChanged),t.addEventListener("buttondown",this.onButtonDown),t.addEventListener("buttonup",this.onButtonUp),t.addEventListener("touchstart",this.onButtonTouchStart),t.addEventListener("touchend",this.onButtonTouchEnd),t.addEventListener("axismove",this.onAxisMoved),t.addEventListener("model-loaded",this.onModelLoaded),this.controllerEventsActive=!0},removeEventListeners:function(){var t=this.el;t.removeEventListener("buttonchanged",this.onButtonChanged),t.removeEventListener("buttondown",this.onButtonDown),t.removeEventListener("buttonup",this.onButtonUp),t.removeEventListener("touchstart",this.onButtonTouchStart),t.removeEventListener("touchend",this.onButtonTouchEnd),t.removeEventListener("axismove",this.onAxisMoved),t.removeEventListener("model-loaded",this.onModelLoaded),this.controllerEventsActive=!1},checkIfControllerPresent:function(){checkControllerPresentAndSetup(this,GAMEPAD_ID_PREFIX,{hand:this.data.hand})},play:function(){this.checkIfControllerPresent(),this.addControllersUpdateListener()},pause:function(){this.removeEventListeners(),this.removeControllersUpdateListener()},loadModel:function(t){var e,o=this.data;if(o.model){if(this.displayModel=CONTROLLER_PROPERTIES[o.controllerType]||CONTROLLER_PROPERTIES[CONTROLLER_DEFAULT],"auto"===o.controllerType){var n=this.el.sceneEl.systems["tracked-controls-webvr"];if(n&&n.vrDisplay){/^Oculus Quest$/.test(n.vrDisplay.displayName)&&(this.displayModel=CONTROLLER_PROPERTIES["oculus-touch-v2"])}else e=CONTROLLER_DEFAULT,e=-1!==t.profiles.indexOf("oculus-touch-v2")?"oculus-touch-v2":e,e=-1!==t.profiles.indexOf("oculus-touch-v3")?"oculus-touch-v3":e,this.displayModel=CONTROLLER_PROPERTIES[e]}var i=this.displayModel[o.hand].modelUrl;this.el.setAttribute("gltf-model",i)}},injectTrackedControls:function(t){var e=this.data,o=GAMEPAD_ID_WEBXR,n="right"===e.hand?"Oculus Touch (Right)":"Oculus Touch (Left)",i=isWebXRAvailable?o:n;this.el.setAttribute("tracked-controls",{id:i,hand:e.hand,orientationOffset:e.orientationOffset,handTrackingEnabled:!1}),this.loadModel(t)},addControllersUpdateListener:function(){this.el.sceneEl.addEventListener("controllersupdated",this.onControllersUpdate,!1)},removeControllersUpdateListener:function(){this.el.sceneEl.removeEventListener("controllersupdated",this.onControllersUpdate,!1)},onControllersUpdate:function(){this.checkIfControllerPresent()},onButtonChanged:function(t){var e,o=this.mapping[this.data.hand].buttons[t.detail.id],n=this.buttonMeshes;o&&("trigger"!==o&&"grip"!==o||(e=t.detail.state.value),n&&("trigger"===o&&n.trigger&&(n.trigger.rotation.x=this.originalXRotationTrigger-e*(Math.PI/26)),"grip"===o&&n.grip&&(n.grip.position.x=this.originalXPositionGrip+("left"===this.data.hand?-1:1)*e*.004)),this.el.emit(o+"changed",t.detail.state))},onModelLoaded:function(t){var e,o=this.controllerObject3D=t.detail.model;this.data.model&&(e=this.buttonMeshes={},e.grip=o.getObjectByName("buttonHand"),this.originalXPositionGrip=e.grip&&e.grip.position.x,e.thumbstick=o.getObjectByName("stick"),e.trigger=o.getObjectByName("buttonTrigger"),this.originalXRotationTrigger=e.trigger&&e.trigger.rotation.x,e.xbutton=o.getObjectByName("buttonX"),e.abutton=o.getObjectByName("buttonA"),e.ybutton=o.getObjectByName("buttonY"),e.bbutton=o.getObjectByName("buttonB"),o.position.copy(this.displayModel[this.data.hand].modelPivotOffset),o.rotation.copy(this.displayModel[this.data.hand].modelPivotRotation),this.el.emit("controllermodelready",{name:"oculus-touch-controls",model:this.data.model,rayOrigin:this.displayModel[this.data.hand].rayOrigin}))},onAxisMoved:function(t){emitIfAxesChanged(this,this.mapping[this.data.hand].axes,t)},updateModel:function(t,e){this.data.model&&this.updateButtonModel(t,e)},updateButtonModel:function(t,e){var o,n="up"===e||"touchend"===e?this.data.buttonColor:"touchstart"===e?this.data.buttonTouchColor:this.data.buttonHighlightColor,i=this.buttonMeshes;this.data.model&&i&&i[t]&&(o=i[t],o.material.color.set(n),this.rendererSystem.applyColorCorrection(o.material.color))}}); -},{"../core/component":108,"../lib/three":156,"../utils/":182,"../utils/bind":176,"../utils/tracked-controls":191}],73:[function(_dereq_,module,exports){ +},{"../core/component":105,"../lib/three":153,"../utils/debug":174}],70:[function(_dereq_,module,exports){ +var registerComponent=_dereq_("../core/component").registerComponent,bind=_dereq_("../utils/bind"),trackedControlsUtils=_dereq_("../utils/tracked-controls"),checkControllerPresentAndSetup=trackedControlsUtils.checkControllerPresentAndSetup,emitIfAxesChanged=trackedControlsUtils.emitIfAxesChanged,onButtonEvent=trackedControlsUtils.onButtonEvent,GAMEPAD_ID_PREFIX="Oculus Go",OCULUS_GO_CONTROLLER_MODEL_URL="https://cdn.aframe.io/controllers/oculus/go/oculus-go-controller.gltf";module.exports.Component=registerComponent("oculus-go-controls",{schema:{hand:{default:""},buttonColor:{type:"color",default:"#FFFFFF"},buttonTouchedColor:{type:"color",default:"#BBBBBB"},buttonHighlightColor:{type:"color",default:"#7A7A7A"},model:{default:!0},orientationOffset:{type:"vec3"},armModel:{default:!0}},mapping:{axes:{trackpad:[0,1]},buttons:["trackpad","trigger"]},bindMethods:function(){this.onModelLoaded=bind(this.onModelLoaded,this),this.onControllersUpdate=bind(this.onControllersUpdate,this),this.checkIfControllerPresent=bind(this.checkIfControllerPresent,this),this.removeControllersUpdateListener=bind(this.removeControllersUpdateListener,this),this.onAxisMoved=bind(this.onAxisMoved,this)},init:function(){var t=this;this.onButtonChanged=bind(this.onButtonChanged,this),this.onButtonDown=function(e){onButtonEvent(e.detail.id,"down",t)},this.onButtonUp=function(e){onButtonEvent(e.detail.id,"up",t)},this.onButtonTouchStart=function(e){onButtonEvent(e.detail.id,"touchstart",t)},this.onButtonTouchEnd=function(e){onButtonEvent(e.detail.id,"touchend",t)},this.controllerPresent=!1,this.lastControllerCheck=0,this.rendererSystem=this.el.sceneEl.systems.renderer,this.bindMethods()},addEventListeners:function(){var t=this.el;t.addEventListener("buttonchanged",this.onButtonChanged),t.addEventListener("buttondown",this.onButtonDown),t.addEventListener("buttonup",this.onButtonUp),t.addEventListener("touchstart",this.onButtonTouchStart),t.addEventListener("touchend",this.onButtonTouchEnd),t.addEventListener("model-loaded",this.onModelLoaded),t.addEventListener("axismove",this.onAxisMoved),this.controllerEventsActive=!0},removeEventListeners:function(){var t=this.el;t.removeEventListener("buttonchanged",this.onButtonChanged),t.removeEventListener("buttondown",this.onButtonDown),t.removeEventListener("buttonup",this.onButtonUp),t.removeEventListener("touchstart",this.onButtonTouchStart),t.removeEventListener("touchend",this.onButtonTouchEnd),t.removeEventListener("model-loaded",this.onModelLoaded),t.removeEventListener("axismove",this.onAxisMoved),this.controllerEventsActive=!1},checkIfControllerPresent:function(){checkControllerPresentAndSetup(this,GAMEPAD_ID_PREFIX,this.data.hand?{hand:this.data.hand}:{})},play:function(){this.checkIfControllerPresent(),this.addControllersUpdateListener()},pause:function(){this.removeEventListeners(),this.removeControllersUpdateListener()},injectTrackedControls:function(){var t=this.el,e=this.data;t.setAttribute("tracked-controls",{armModel:e.armModel,hand:e.hand,idPrefix:GAMEPAD_ID_PREFIX,orientationOffset:e.orientationOffset}),this.data.model&&this.el.setAttribute("gltf-model",OCULUS_GO_CONTROLLER_MODEL_URL)},addControllersUpdateListener:function(){this.el.sceneEl.addEventListener("controllersupdated",this.onControllersUpdate,!1)},removeControllersUpdateListener:function(){this.el.sceneEl.removeEventListener("controllersupdated",this.onControllersUpdate,!1)},onControllersUpdate:function(){this.checkIfControllerPresent()},onModelLoaded:function(t){var e,o=t.detail.model;this.data.model&&(e=this.buttonMeshes={},e.trigger=o.getObjectByName("oculus_go_button_trigger"),e.trackpad=o.getObjectByName("oculus_go_touchpad"))},onButtonChanged:function(t){var e=this.mapping.buttons[t.detail.id];e&&this.el.emit(e+"changed",t.detail.state)},onAxisMoved:function(t){emitIfAxesChanged(this,this.mapping.axes,t)},updateModel:function(t,e){this.data.model&&this.updateButtonModel(t,e)},updateButtonModel:function(t,e){var o=this.buttonMeshes;if(o&&o[t]){var n,s;switch(e){case"down":n=this.data.buttonHighlightColor;break;case"touchstart":n=this.data.buttonTouchedColor;break;default:n=this.data.buttonColor}s=o[t],s.material.color.set(n),this.rendererSystem.applyColorCorrection(s.material.color)}}}); +},{"../core/component":105,"../utils/bind":172,"../utils/tracked-controls":186}],71:[function(_dereq_,module,exports){ +var bind=_dereq_("../utils/bind"),registerComponent=_dereq_("../core/component").registerComponent,THREE=_dereq_("../lib/three"),trackedControlsUtils=_dereq_("../utils/tracked-controls"),checkControllerPresentAndSetup=trackedControlsUtils.checkControllerPresentAndSetup,emitIfAxesChanged=trackedControlsUtils.emitIfAxesChanged,onButtonEvent=trackedControlsUtils.onButtonEvent,TOUCH_CONTROLLER_MODEL_BASE_URL="https://cdn.aframe.io/controllers/oculus/oculus-touch-controller-",TOUCH_CONTROLLER_MODEL_URL={left:TOUCH_CONTROLLER_MODEL_BASE_URL+"left.gltf",right:TOUCH_CONTROLLER_MODEL_BASE_URL+"right.gltf"},GAMEPAD_ID_PREFIX="Oculus Touch",DEFAULT_MODEL_PIVOT_OFFSET=new THREE.Vector3(0,0,-.053),RAY_ORIGIN={left:{origin:{x:.008,y:-.004,z:0},direction:{x:0,y:-.8,z:-1}},right:{origin:{x:-.008,y:-.004,z:0},direction:{x:0,y:-.8,z:-1}}};module.exports.Component=registerComponent("oculus-touch-controls",{schema:{hand:{default:"left"},buttonColor:{type:"color",default:"#999"},buttonTouchColor:{type:"color",default:"#8AB"},buttonHighlightColor:{type:"color",default:"#2DF"},model:{default:!0},orientationOffset:{type:"vec3",default:{x:43,y:0,z:0}}},mapping:{left:{axes:{thumbstick:[0,1]},buttons:["thumbstick","trigger","grip","xbutton","ybutton","surface"]},right:{axes:{thumbstick:[0,1]},buttons:["thumbstick","trigger","grip","abutton","bbutton","surface"]}},bindMethods:function(){this.onModelLoaded=bind(this.onModelLoaded,this),this.onControllersUpdate=bind(this.onControllersUpdate,this),this.checkIfControllerPresent=bind(this.checkIfControllerPresent,this),this.onAxisMoved=bind(this.onAxisMoved,this)},init:function(){var t=this;this.onButtonChanged=bind(this.onButtonChanged,this),this.onButtonDown=function(e){onButtonEvent(e.detail.id,"down",t,t.data.hand)},this.onButtonUp=function(e){onButtonEvent(e.detail.id,"up",t,t.data.hand)},this.onButtonTouchStart=function(e){onButtonEvent(e.detail.id,"touchstart",t,t.data.hand)},this.onButtonTouchEnd=function(e){onButtonEvent(e.detail.id,"touchend",t,t.data.hand)},this.controllerPresent=!1,this.lastControllerCheck=0,this.previousButtonValues={},this.rendererSystem=this.el.sceneEl.systems.renderer,this.bindMethods()},addEventListeners:function(){var t=this.el;t.addEventListener("buttonchanged",this.onButtonChanged),t.addEventListener("buttondown",this.onButtonDown),t.addEventListener("buttonup",this.onButtonUp),t.addEventListener("touchstart",this.onButtonTouchStart),t.addEventListener("touchend",this.onButtonTouchEnd),t.addEventListener("axismove",this.onAxisMoved),t.addEventListener("model-loaded",this.onModelLoaded),this.controllerEventsActive=!0},removeEventListeners:function(){var t=this.el;t.removeEventListener("buttonchanged",this.onButtonChanged),t.removeEventListener("buttondown",this.onButtonDown),t.removeEventListener("buttonup",this.onButtonUp),t.removeEventListener("touchstart",this.onButtonTouchStart),t.removeEventListener("touchend",this.onButtonTouchEnd),t.removeEventListener("axismove",this.onAxisMoved),t.removeEventListener("model-loaded",this.onModelLoaded),this.controllerEventsActive=!1},checkIfControllerPresent:function(){checkControllerPresentAndSetup(this,GAMEPAD_ID_PREFIX,{hand:this.data.hand})},play:function(){this.checkIfControllerPresent(),this.addControllersUpdateListener()},pause:function(){this.removeEventListeners(),this.removeControllersUpdateListener()},loadModel:function(){var t=this.data;t.model&&this.el.setAttribute("gltf-model","url("+TOUCH_CONTROLLER_MODEL_URL[t.hand]+")")},injectTrackedControls:function(){var t=this.data;this.el.setAttribute("tracked-controls",{id:"right"===t.hand?"Oculus Touch (Right)":"Oculus Touch (Left)",controller:0,hand:t.hand,orientationOffset:t.orientationOffset}),this.loadModel()},addControllersUpdateListener:function(){this.el.sceneEl.addEventListener("controllersupdated",this.onControllersUpdate,!1)},removeControllersUpdateListener:function(){this.el.sceneEl.removeEventListener("controllersupdated",this.onControllersUpdate,!1)},onControllersUpdate:function(){this.checkIfControllerPresent()},onButtonChanged:function(t){var e,o=this.mapping[this.data.hand].buttons[t.detail.id],n=this.buttonMeshes;o&&("trigger"!==o&&"grip"!==o||(e=t.detail.state.value),n&&("trigger"===o&&n.trigger&&(n.trigger.rotation.x=this.originalXRotationTrigger-e*(Math.PI/26)),"grip"===o&&n.grip&&(n.grip.position.x=this.originalXPositionGrip+("left"===this.data.hand?-1:1)*e*.004)),this.el.emit(o+"changed",t.detail.state))},onModelLoaded:function(t){var e,o=t.detail.model;this.data.model&&(e=this.buttonMeshes={},e.grip=o.getObjectByName("buttonHand"),this.originalXPositionGrip=e.grip.position.x,e.thumbstick=o.getObjectByName("stick"),e.trigger=o.getObjectByName("buttonTrigger"),this.originalXRotationTrigger=e.trigger.rotation.x,e.xbutton=o.getObjectByName("buttonX"),e.abutton=o.getObjectByName("buttonA"),e.ybutton=o.getObjectByName("buttonY"),e.bbutton=o.getObjectByName("buttonB"),o.position.copy(DEFAULT_MODEL_PIVOT_OFFSET),this.el.emit("controllermodelready",{name:"oculus-touch-controls",model:this.data.model,rayOrigin:RAY_ORIGIN[this.data.hand]}))},onAxisMoved:function(t){emitIfAxesChanged(this,this.mapping[this.data.hand].axes,t)},updateModel:function(t,e){this.data.model&&this.updateButtonModel(t,e)},updateButtonModel:function(t,e){var o,n="up"===e||"touchend"===e?this.data.buttonColor:"touchstart"===e?this.data.buttonTouchColor:this.data.buttonHighlightColor,i=this.buttonMeshes;this.data.model&&i&&i[t]&&(o=i[t],o.material.color.set(n),this.rendererSystem.applyColorCorrection(o.material.color))}}); +},{"../core/component":105,"../lib/three":153,"../utils/bind":172,"../utils/tracked-controls":186}],72:[function(_dereq_,module,exports){ var registerComponent=_dereq_("../core/component").registerComponent;module.exports.Component=registerComponent("position",{schema:{type:"vec3"},update:function(){var e=this.el.object3D,o=this.data;e.position.set(o.x,o.y,o.z)},remove:function(){this.el.object3D.position.set(0,0,0)}}); -},{"../core/component":108}],74:[function(_dereq_,module,exports){ -function copyArray(e,t){var i;for(e.length=t.length,i=0;i")},remove:function(){var e=this.el.object3D.fog;e&&(e.far=0,e.near=.1)}}); -},{"../../core/component":108,"../../lib/three":156,"../../utils/debug":178}],82:[function(_dereq_,module,exports){ -(function (process){(function (){ -function getFuzzyPatchVersion(e){var n=e.split(".");return n[2]="x",n.join(".")}var AFRAME_INJECTED=_dereq_("../../constants").AFRAME_INJECTED,pkg=_dereq_("../../../package"),registerComponent=_dereq_("../../core/component").registerComponent,utils=_dereq_("../../utils/"),INSPECTOR_DEV_URL="https://aframe.io/aframe-inspector/dist/aframe-inspector.js",INSPECTOR_RELEASE_URL="https://unpkg.com/aframe-inspector@"+getFuzzyPatchVersion(pkg.version)+"/dist/aframe-inspector.min.js",INSPECTOR_URL="dev"===process.env.INSPECTOR_VERSION?INSPECTOR_DEV_URL:INSPECTOR_RELEASE_URL,LOADING_MESSAGE="Loading Inspector",LOADING_ERROR_MESSAGE="Error loading Inspector";module.exports.Component=registerComponent("inspector",{schema:{url:{default:INSPECTOR_URL}},init:function(){this.firstPlay=!0,this.onKeydown=this.onKeydown.bind(this),this.onMessage=this.onMessage.bind(this),this.initOverlay(),window.addEventListener("keydown",this.onKeydown),window.addEventListener("message",this.onMessage)},play:function(){var e;this.firstPlay&&"false"!==(e=utils.getUrlParameter("inspector"))&&e&&(this.openInspector(),this.firstPlay=!1)},initOverlay:function(){this.loadingMessageEl=document.createElement("div"),this.loadingMessageEl.classList.add("a-inspector-loader"),this.loadingMessageEl.innerHTML=LOADING_MESSAGE+'...'},remove:function(){this.removeEventListeners()},onKeydown:function(e){73===e.keyCode&&(e.ctrlKey&&e.altKey||e.getModifierState("AltGraph"))&&this.openInspector()},showLoader:function(){document.body.appendChild(this.loadingMessageEl)},hideLoader:function(){document.body.removeChild(this.loadingMessageEl)},onMessage:function(e){"INJECT_AFRAME_INSPECTOR"===e.data&&this.openInspector()},openInspector:function(e){var n,t=this;if(AFRAME.INSPECTOR||AFRAME.inspectorInjected)return void AFRAME.INSPECTOR.open(e);this.showLoader(),n=document.createElement("script"),n.src=this.data.url,n.setAttribute("data-name","aframe-inspector"),n.setAttribute(AFRAME_INJECTED,""),n.onload=function(){AFRAME.INSPECTOR.open(e),t.hideLoader(),t.removeEventListeners()},n.onerror=function(){t.loadingMessageEl.innerHTML=LOADING_ERROR_MESSAGE},document.head.appendChild(n),AFRAME.inspectorInjected=!0},removeEventListeners:function(){window.removeEventListener("keydown",this.onKeydown),window.removeEventListener("message",this.onMessage)}}); -}).call(this)}).call(this,_dereq_('_process')) +},{"../../core/component":105,"../../lib/three":153,"../../utils/debug":174}],80:[function(_dereq_,module,exports){ +(function (process){ +function getFuzzyPatchVersion(e){var n=e.split(".");return n[2]="x",n.join(".")}var AFRAME_INJECTED=_dereq_("../../constants").AFRAME_INJECTED,pkg=_dereq_("../../../package"),registerComponent=_dereq_("../../core/component").registerComponent,utils=_dereq_("../../utils/"),INSPECTOR_DEV_URL="https://aframe.io/aframe-inspector/dist/aframe-inspector.js",INSPECTOR_RELEASE_URL="https://unpkg.com/aframe-inspector@"+getFuzzyPatchVersion(pkg.version)+"/dist/aframe-inspector.min.js",INSPECTOR_URL="dev"===process.env.INSPECTOR_VERSION?INSPECTOR_DEV_URL:INSPECTOR_RELEASE_URL,LOADING_MESSAGE="Loading Inspector",LOADING_ERROR_MESSAGE="Error loading Inspector";module.exports.Component=registerComponent("inspector",{schema:{url:{default:INSPECTOR_URL}},init:function(){this.firstPlay=!0,this.onKeydown=this.onKeydown.bind(this),this.onMessage=this.onMessage.bind(this),this.initOverlay(),window.addEventListener("keydown",this.onKeydown),window.addEventListener("message",this.onMessage)},play:function(){var e;this.firstPlay&&"false"!==(e=utils.getUrlParameter("inspector"))&&e&&(this.openInspector(),this.firstPlay=!1)},initOverlay:function(){this.loadingMessageEl=document.createElement("div"),this.loadingMessageEl.classList.add("a-inspector-loader"),this.loadingMessageEl.innerHTML=LOADING_MESSAGE+'...'},remove:function(){this.removeEventListeners()},onKeydown:function(e){73===e.keyCode&&e.ctrlKey&&e.altKey&&this.openInspector()},showLoader:function(){document.body.appendChild(this.loadingMessageEl)},hideLoader:function(){document.body.removeChild(this.loadingMessageEl)},onMessage:function(e){"INJECT_AFRAME_INSPECTOR"===e.data&&this.openInspector()},openInspector:function(e){var n,t=this;if(AFRAME.INSPECTOR||AFRAME.inspectorInjected)return void AFRAME.INSPECTOR.open(e);this.showLoader(),n=document.createElement("script"),n.src=this.data.url,n.setAttribute("data-name","aframe-inspector"),n.setAttribute(AFRAME_INJECTED,""),n.onload=function(){AFRAME.INSPECTOR.open(e),t.hideLoader(),t.removeEventListeners()},n.onerror=function(){t.loadingMessageEl.innerHTML=LOADING_ERROR_MESSAGE},document.head.appendChild(n),AFRAME.inspectorInjected=!0},removeEventListeners:function(){window.removeEventListener("keydown",this.onKeydown),window.removeEventListener("message",this.onMessage)}}); +}).call(this,_dereq_('_process')) -},{"../../../package":50,"../../constants":100,"../../core/component":108,"../../utils/":182,"_process":31}],83:[function(_dereq_,module,exports){ +},{"../../../package":53,"../../constants":97,"../../core/component":105,"../../utils/":178,"_process":5}],81:[function(_dereq_,module,exports){ var registerComponent=_dereq_("../../core/component").registerComponent,shouldCaptureKeyEvent=_dereq_("../../utils/").shouldCaptureKeyEvent;module.exports.Component=registerComponent("keyboard-shortcuts",{schema:{enterVR:{default:!0},exitVR:{default:!0}},init:function(){this.onKeyup=this.onKeyup.bind(this)},update:function(e){var t=this.data;this.enterVREnabled=t.enterVR},play:function(){window.addEventListener("keyup",this.onKeyup,!1)},pause:function(){window.removeEventListener("keyup",this.onKeyup)},onKeyup:function(e){var t=this.el;shouldCaptureKeyEvent(e)&&(this.enterVREnabled&&70===e.keyCode&&t.enterVR(),this.enterVREnabled&&27===e.keyCode&&t.exitVR())}}); -},{"../../core/component":108,"../../utils/":182}],84:[function(_dereq_,module,exports){ +},{"../../core/component":105,"../../utils/":178}],82:[function(_dereq_,module,exports){ var debug=_dereq_("../../utils/debug"),registerComponent=_dereq_("../../core/component").registerComponent,warn=debug("components:pool:warn");module.exports.Component=registerComponent("pool",{schema:{container:{default:""},mixin:{default:""},size:{default:0},dynamic:{default:!1}},multiple:!0,initPool:function(){var t;for(this.availableEls=[],this.usedEls=[],this.data.mixin||warn("No mixin provided for pool component."),this.data.container&&(this.container=document.querySelector(this.data.container),this.container||warn("Container "+this.data.container+" not found.")),this.container=this.container||this.el,t=0;t0&&(this.stopSound(),o.removeObject3D("sound"));var s=this.listener=i.audioListener||new THREE.AudioListener;for(i.audioListener=s,i.camera&&i.camera.add(s),i.addEventListener("camera-set-active",function(e){e.detail.cameraEl.getObject3D("camera").add(s)}),this.pool=new THREE.Group,e=0;e=0&&(e=30),e&&i.chars.map(function(t){t.yoffset+=e}),r(i)})})}function loadTexture(t){return new Promise(function(e,r){(new THREE.ImageLoader).load(t,function(t){e(t)},void 0,function(){error("Error loading font image",t),r(null)})})}function createShader(t,e,r){var n,o;return o=new shaders[e].Shader,o.el=t,o.init(r),o.update(r),n=o.material,n.transparent=r.transparent,{material:n,shader:o}}function computeWidth(t,e,r){return t||(.5+e)*r}function computeFontWidthFactor(t){var e=0,r=0,n=0;return t.chars.map(function(t){e+=t.xadvance,t.id>=48&&t.id<=57&&(n++,r+=t.xadvance)}),n?r/n:e/t.chars.length}function PromiseCache(){var t=this.cache={};this.get=function(e,r){return e in t?t[e]:(t[e]=r(),t[e])}}var createTextGeometry=_dereq_("three-bmfont-text"),loadBMFont=_dereq_("load-bmfont"),registerComponent=_dereq_("../core/component").registerComponent,coreShader=_dereq_("../core/shader"),THREE=_dereq_("../lib/three"),utils=_dereq_("../utils/"),error=utils.debug("components:text:error"),shaders=coreShader.shaders,warn=utils.debug("components:text:warn"),DEFAULT_WIDTH=1,MAX_ANISOTROPY=16,FONT_BASE_URL="https://cdn.aframe.io/fonts/",FONTS={aileronsemibold:FONT_BASE_URL+"Aileron-Semibold.fnt",dejavu:FONT_BASE_URL+"DejaVu-sdf.fnt",exo2bold:FONT_BASE_URL+"Exo2Bold.fnt",exo2semibold:FONT_BASE_URL+"Exo2SemiBold.fnt",kelsonsans:FONT_BASE_URL+"KelsonSans.fnt",monoid:FONT_BASE_URL+"Monoid.fnt",mozillavr:FONT_BASE_URL+"mozillavr.fnt",roboto:FONT_BASE_URL+"Roboto-msdf.json",sourcecodepro:FONT_BASE_URL+"SourceCodePro.fnt"},MSDF_FONTS=["roboto"],DEFAULT_FONT="roboto";module.exports.FONTS=FONTS;var cache=new PromiseCache,fontWidthFactors={},textures={},protocolRe=/^\w+:/;module.exports.Component=registerComponent("text",{multiple:!0,schema:{align:{type:"string",default:"left",oneOf:["left","right","center"]},alphaTest:{default:.5},anchor:{default:"center",oneOf:["left","right","center","align"]},baseline:{default:"center",oneOf:["top","center","bottom"]},color:{type:"color",default:"#FFF"},font:{type:"string",default:DEFAULT_FONT},fontImage:{type:"string"},height:{type:"number"},letterSpacing:{type:"number",default:0},lineHeight:{type:"number"},negate:{type:"boolean",default:!0},opacity:{type:"number",default:1},shader:{default:"sdf",oneOf:shaders},side:{default:"front",oneOf:["front","back","double"]},tabSize:{default:4},transparent:{default:!0},value:{type:"string"},whiteSpace:{default:"normal",oneOf:["normal","pre","nowrap"]},width:{type:"number"},wrapCount:{type:"number",default:40},wrapPixels:{type:"number"},xOffset:{type:"number",default:0},yOffset:{type:"number",default:0},zOffset:{type:"number",default:.001}},init:function(){this.shaderData={},this.geometry=createTextGeometry(),this.createOrUpdateMaterial()},update:function(t){var e=this.data,r=this.currentFont;if(textures[e.font]?this.texture=textures[e.font]:(this.texture=textures[e.font]=new THREE.Texture,this.texture.anisotropy=MAX_ANISOTROPY),this.createOrUpdateMaterial(),t.font!==e.font)return void this.updateFont();r&&(this.updateGeometry(this.geometry,r),this.updateLayout())},remove:function(){this.geometry.dispose(),this.geometry=null,this.el.removeObject3D(this.attrName),this.material.dispose(),this.material=null,this.texture.dispose(),this.texture=null,this.shaderObject&&delete this.shaderObject},createOrUpdateMaterial:function(){var t,e,r,n=this.data,o=this.material,i=this.shaderData;if(r=n.shader,-1!==MSDF_FONTS.indexOf(n.font)||n.font.indexOf("-msdf.")>=0?r="msdf":n.font in FONTS&&-1===MSDF_FONTS.indexOf(n.font)&&(r="sdf"),t=(this.shaderObject&&this.shaderObject.name)!==r,i.alphaTest=n.alphaTest,i.color=n.color,i.map=this.texture,i.opacity=n.opacity,i.side=parseSide(n.side),i.transparent=n.transparent,i.negate=n.negate,!t)return this.shaderObject.update(i),o.transparent=i.transparent,void(o.side=i.side);e=createShader(this.el,r,i),this.material=e.material,this.shaderObject=e.shader,this.material.side=i.side,this.mesh&&(this.mesh.material=this.material)},updateFont:function(){var t,e=this.data,r=this.el,n=this.geometry,o=this;e.font||warn("No font specified. Using the default font."),this.mesh&&(this.mesh.visible=!1),t=this.lookupFont(e.font||DEFAULT_FONT)||e.font,cache.get(t,function(){return loadFont(t,e.yOffset)}).then(function(i){var a;if(1!==i.pages.length)throw new Error("Currently only single-page bitmap fonts are supported.");fontWidthFactors[t]||(i.widthFactor=fontWidthFactors[i]=computeFontWidthFactor(i)),o.currentFont=i,a=o.getFontImageSrc(),cache.get(a,function(){return loadTexture(a)}).then(function(t){var a=o.texture;a.image=t,a.needsUpdate=!0,textures[e.font]=a,o.texture=a,o.initMesh(),o.currentFont=i,o.updateGeometry(n,i),o.updateLayout(),o.mesh.visible=!0,r.emit("textfontset",{font:e.font,fontObj:i})}).catch(function(t){error(t.message),error(t.stack)})}).catch(function(t){error(t.message),error(t.stack)})},initMesh:function(){this.mesh||(this.mesh=new THREE.Mesh(this.geometry,this.material),this.el.setObject3D(this.attrName,this.mesh))},getFontImageSrc:function(){if(this.data.fontImage)return this.data.fontImage;var t=this.lookupFont(this.data.font||DEFAULT_FONT)||this.data.font,e=this.currentFont.pages[0];return e.match(protocolRe)&&0!==e.indexOf("http")?t.replace(/(\.fnt)|(\.json)/,".png"):THREE.LoaderUtils.extractUrlBase(t)+e},updateLayout:function(){var t,e,r,n,o,i,a,s,h,u,d=this.el,f=this.data,l=this.geometry,c=this.mesh;if(c&&l.layout){if(r=d.getAttribute("geometry"),s=f.width||r&&r.width||DEFAULT_WIDTH,i=computeWidth(f.wrapPixels,f.wrapCount,this.currentFont.widthFactor),a=s/i,o=l.layout,n=a*(o.height+o.descender),r&&"plane"===r.primitive&&(r.width||d.setAttribute("geometry","width",s),r.height||d.setAttribute("geometry","height",n)),"left"===(t="align"===f.anchor?f.align:f.anchor))h=0;else if("right"===t)h=-1*o.width;else{if("center"!==t)throw new TypeError("Invalid text.anchor property value",t);h=-1*o.width/2}if("bottom"===(e=f.baseline))u=0;else if("top"===e)u=-1*o.height+o.ascender;else{if("center"!==e)throw new TypeError("Invalid text.baseline property value",e);u=-1*o.height/2}c.position.x=h*a+f.xOffset,c.position.y=u*a,c.position.z=f.zOffset,c.scale.set(a,-1*a,a)}},lookupFont:function(t){return FONTS[t]},updateGeometry:function(){var t={},e={},r=/\\n/g,n=/\\t/g;return function(o,i){var a=this.data;e.font=i,e.lineHeight=a.lineHeight&&isFinite(a.lineHeight)?a.lineHeight:i.common.lineHeight,e.text=a.value.toString().replace(r,"\n").replace(n,"\t"),e.width=computeWidth(a.wrapPixels,a.wrapCount,i.widthFactor),o.update(utils.extend(t,a,e))}}()}); -},{"../core/component":108,"../core/shader":118,"../lib/three":156,"../utils/":182,"load-bmfont":22,"three-bmfont-text":40}],91:[function(_dereq_,module,exports){ -var registerComponent=_dereq_("../core/component").registerComponent,controllerUtils=_dereq_("../utils/tracked-controls"),DEFAULT_CAMERA_HEIGHT=_dereq_("../constants").DEFAULT_CAMERA_HEIGHT,THREE=_dereq_("../lib/three"),DEFAULT_HANDEDNESS=_dereq_("../constants").DEFAULT_HANDEDNESS,EYES_TO_ELBOW={x:.175,y:-.3,z:-.03},FOREARM={x:0,y:0,z:-.175},EMPTY_DAYDREAM_TOUCHES={touches:[]},EVENTS={AXISMOVE:"axismove",BUTTONCHANGED:"buttonchanged",BUTTONDOWN:"buttondown",BUTTONUP:"buttonup",TOUCHSTART:"touchstart",TOUCHEND:"touchend"};module.exports.Component=registerComponent("tracked-controls-webvr",{schema:{autoHide:{default:!0},controller:{default:0},id:{type:"string",default:""},hand:{type:"string",default:""},idPrefix:{type:"string",default:""},orientationOffset:{type:"vec3"},armModel:{default:!1},headElement:{type:"selector"}},init:function(){this.axis=this.el.components["tracked-controls"].axis=[0,0,0],this.buttonStates=this.el.components["tracked-controls"].buttonStates={},this.changedAxes=[],this.targetControllerNumber=this.data.controller,this.axisMoveEventDetail={axis:this.axis,changed:this.changedAxes},this.deltaControllerPosition=new THREE.Vector3,this.controllerQuaternion=new THREE.Quaternion,this.controllerEuler=new THREE.Euler,this.updateGamepad(),this.buttonEventDetails={}},tick:function(t,e){var i=this.el.getObject3D("mesh");i&&i.update&&i.update(e/1e3),this.updateGamepad(),this.updatePose(),this.updateButtons()},defaultUserHeight:function(){return DEFAULT_CAMERA_HEIGHT},getHeadElement:function(){return this.data.headElement||this.el.sceneEl.camera.el},updateGamepad:function(){var t=this.data,e=controllerUtils.findMatchingControllerWebVR(this.system.controllers,t.id,t.idPrefix,t.hand,t.controller);this.controller=e,this.el.components["tracked-controls"].controller=e,this.data.autoHide&&(this.el.object3D.visible=!!this.controller)},applyArmModel:function(t){var e,i,o,n,s,a=this.controller,r=this.controllerEuler,l=this.controllerQuaternion,h=this.deltaControllerPosition;i=this.getHeadElement(),o=i.object3D,s=this.defaultUserHeight(),n=a.pose,e=(a?a.hand:void 0)||DEFAULT_HANDEDNESS,t.copy(o.position),h.set(EYES_TO_ELBOW.x*("left"===e?-1:"right"===e?1:0),EYES_TO_ELBOW.y,EYES_TO_ELBOW.z),h.multiplyScalar(s),h.applyAxisAngle(o.up,o.rotation.y),t.add(h),h.set(FOREARM.x,FOREARM.y,FOREARM.z),h.multiplyScalar(s),n.orientation?l.fromArray(n.orientation):l.copy(o.quaternion),r.setFromQuaternion(l),r.set(r.x,r.y,0),h.applyEuler(r),t.add(h)},updatePose:function(){var t,e,i=this.controller,o=this.data,n=this.el.object3D,s=this.system.vrDisplay;i&&(t=i.pose,t.position?n.position.fromArray(t.position):o.armModel&&this.applyArmModel(n.position),t.orientation&&n.quaternion.fromArray(t.orientation),s&&t.position&&(e=this.el.sceneEl.renderer.xr.getStandingMatrix(),n.matrix.compose(n.position,n.quaternion,n.scale),n.matrix.multiplyMatrices(e,n.matrix),n.matrix.decompose(n.position,n.quaternion,n.scale)),n.rotateX(this.data.orientationOffset.x*THREE.Math.DEG2RAD),n.rotateY(this.data.orientationOffset.y*THREE.Math.DEG2RAD),n.rotateZ(this.data.orientationOffset.z*THREE.Math.DEG2RAD))},updateButtons:function(){var t,e,i=this.controller;if(i){for(e=0;e=0&&(e=30),e&&a.chars.map(function(t){t.yoffset+=e}),r(a)})})}function loadTexture(t){return new Promise(function(e,r){(new THREE.ImageLoader).load(t,function(t){e(t)},void 0,function(){error("Error loading font image",t),r(null)})})}function createShader(t,e,r){var n,o;return o=new shaders[e].Shader,o.el=t,o.init(r),o.update(r),n=o.material,n.transparent=r.transparent,{material:n,shader:o}}function computeWidth(t,e,r){return t||(.5+e)*r}function computeFontWidthFactor(t){var e=0,r=0,n=0;return t.chars.map(function(t){e+=t.xadvance,t.id>=48&&t.id<=57&&(n++,r+=t.xadvance)}),n?r/n:e/t.chars.length}function PromiseCache(){var t=this.cache={};this.get=function(e,r){return e in t?t[e]:(t[e]=r(),t[e])}}var createTextGeometry=_dereq_("three-bmfont-text"),loadBMFont=_dereq_("load-bmfont"),registerComponent=_dereq_("../core/component").registerComponent,coreShader=_dereq_("../core/shader"),THREE=_dereq_("../lib/three"),utils=_dereq_("../utils/"),error=utils.debug("components:text:error"),shaders=coreShader.shaders,warn=utils.debug("components:text:warn"),DEFAULT_WIDTH=1,MAX_ANISOTROPY=16,FONT_BASE_URL="https://cdn.aframe.io/fonts/",FONTS={aileronsemibold:FONT_BASE_URL+"Aileron-Semibold.fnt",dejavu:FONT_BASE_URL+"DejaVu-sdf.fnt",exo2bold:FONT_BASE_URL+"Exo2Bold.fnt",exo2semibold:FONT_BASE_URL+"Exo2SemiBold.fnt",kelsonsans:FONT_BASE_URL+"KelsonSans.fnt",monoid:FONT_BASE_URL+"Monoid.fnt",mozillavr:FONT_BASE_URL+"mozillavr.fnt",roboto:FONT_BASE_URL+"Roboto-msdf.json",sourcecodepro:FONT_BASE_URL+"SourceCodePro.fnt"},MSDF_FONTS=["roboto"],DEFAULT_FONT="roboto";module.exports.FONTS=FONTS;var cache=new PromiseCache,fontWidthFactors={},textures={},protocolRe=/^\w+:/;module.exports.Component=registerComponent("text",{multiple:!0,schema:{align:{type:"string",default:"left",oneOf:["left","right","center"]},alphaTest:{default:.5},anchor:{default:"center",oneOf:["left","right","center","align"]},baseline:{default:"center",oneOf:["top","center","bottom"]},color:{type:"color",default:"#FFF"},font:{type:"string",default:DEFAULT_FONT},fontImage:{type:"string"},height:{type:"number"},letterSpacing:{type:"number",default:0},lineHeight:{type:"number"},negate:{type:"boolean",default:!0},opacity:{type:"number",default:1},shader:{default:"sdf",oneOf:shaders},side:{default:"front",oneOf:["front","back","double"]},tabSize:{default:4},transparent:{default:!0},value:{type:"string"},whiteSpace:{default:"normal",oneOf:["normal","pre","nowrap"]},width:{type:"number"},wrapCount:{type:"number",default:40},wrapPixels:{type:"number"},xOffset:{type:"number",default:0},yOffset:{type:"number",default:0},zOffset:{type:"number",default:.001}},init:function(){this.shaderData={},this.geometry=createTextGeometry(),this.createOrUpdateMaterial(),this.mesh=new THREE.Mesh(this.geometry,this.material),this.el.setObject3D(this.attrName,this.mesh)},update:function(t){var e=this.data,r=this.currentFont;if(textures[e.font]?this.texture=textures[e.font]:(this.texture=textures[e.font]=new THREE.Texture,this.texture.anisotropy=MAX_ANISOTROPY),this.createOrUpdateMaterial(),t.font!==e.font)return void this.updateFont();r&&(this.updateGeometry(this.geometry,r),this.updateLayout())},remove:function(){this.geometry.dispose(),this.geometry=null,this.el.removeObject3D(this.attrName),this.material.dispose(),this.material=null,this.texture.dispose(),this.texture=null,this.shaderObject&&delete this.shaderObject},createOrUpdateMaterial:function(){var t,e,r,n=this.data,o=this.material,a=this.shaderData;if(r=n.shader,-1!==MSDF_FONTS.indexOf(n.font)||n.font.indexOf("-msdf.")>=0?r="msdf":n.font in FONTS&&-1===MSDF_FONTS.indexOf(n.font)&&(r="sdf"),t=(this.shaderObject&&this.shaderObject.name)!==r,a.alphaTest=n.alphaTest,a.color=n.color,a.map=this.texture,a.opacity=n.opacity,a.side=parseSide(n.side),a.transparent=n.transparent,a.negate=n.negate,!t)return this.shaderObject.update(a),o.transparent=a.transparent,void(o.side=a.side);e=createShader(this.el,r,a),this.material=e.material,this.shaderObject=e.shader,this.material.side=a.side,this.mesh&&(this.mesh.material=this.material)},updateFont:function(){var t,e=this.data,r=this.el,n=this.geometry,o=this;e.font||warn("No font specified. Using the default font."),this.mesh.visible=!1,t=this.lookupFont(e.font||DEFAULT_FONT)||e.font,cache.get(t,function(){return loadFont(t,e.yOffset)}).then(function(a){var i;if(1!==a.pages.length)throw new Error("Currently only single-page bitmap fonts are supported.");fontWidthFactors[t]||(a.widthFactor=fontWidthFactors[a]=computeFontWidthFactor(a)),o.updateGeometry(n,a),o.currentFont=a,o.updateLayout(),i=o.getFontImageSrc(),cache.get(i,function(){return loadTexture(i)}).then(function(t){var n=o.texture;n.image=t,n.needsUpdate=!0,textures[e.font]=n,o.texture=n,o.mesh.visible=!0,r.emit("textfontset",{font:e.font,fontObj:a})}).catch(function(t){error(t.message),error(t.stack)})}).catch(function(t){error(t.message),error(t.stack)})},getFontImageSrc:function(){if(this.data.fontImage)return this.data.fontImage;var t=this.lookupFont(this.data.font||DEFAULT_FONT)||this.data.font,e=this.currentFont.pages[0];return e.match(protocolRe)&&0!==e.indexOf("http")?t.replace(/(\.fnt)|(\.json)/,".png"):THREE.LoaderUtils.extractUrlBase(t)+e},updateLayout:function(){var t,e,r,n,o,a,i,s,h,u,d=this.el,l=this.data,f=this.geometry,c=this.mesh;if(f.layout){if(r=d.getAttribute("geometry"),s=l.width||r&&r.width||DEFAULT_WIDTH,a=computeWidth(l.wrapPixels,l.wrapCount,this.currentFont.widthFactor),i=s/a,o=f.layout,n=i*(o.height+o.descender),r&&"plane"===r.primitive&&(r.width||d.setAttribute("geometry","width",s),r.height||d.setAttribute("geometry","height",n)),"left"===(t="align"===l.anchor?l.align:l.anchor))h=0;else if("right"===t)h=-1*o.width;else{if("center"!==t)throw new TypeError("Invalid text.anchor property value",t);h=-1*o.width/2}if("bottom"===(e=l.baseline))u=0;else if("top"===e)u=-1*o.height+o.ascender;else{if("center"!==e)throw new TypeError("Invalid text.baseline property value",e);u=-1*o.height/2}c.position.x=h*i+l.xOffset,c.position.y=u*i,c.position.z=l.zOffset,c.scale.set(i,-1*i,i)}},lookupFont:function(t){return FONTS[t]},updateGeometry:function(){var t={},e={},r=/\\n/g,n=/\\t/g;return function(o,a){var i=this.data;e.font=a,e.lineHeight=i.lineHeight&&isFinite(i.lineHeight)?i.lineHeight:a.common.lineHeight,e.text=i.value.toString().replace(r,"\n").replace(n,"\t"),e.width=computeWidth(i.wrapPixels,i.wrapCount,a.widthFactor),o.update(utils.extend(t,i,e))}}()}); +},{"../core/component":105,"../core/shader":115,"../lib/three":153,"../utils/":178,"load-bmfont":25,"three-bmfont-text":41}],89:[function(_dereq_,module,exports){ +var registerComponent=_dereq_("../core/component").registerComponent,controllerUtils=_dereq_("../utils/tracked-controls"),DEFAULT_CAMERA_HEIGHT=_dereq_("../constants").DEFAULT_CAMERA_HEIGHT,THREE=_dereq_("../lib/three"),DEFAULT_HANDEDNESS=_dereq_("../constants").DEFAULT_HANDEDNESS,EYES_TO_ELBOW={x:.175,y:-.3,z:-.03},FOREARM={x:0,y:0,z:-.175},EMPTY_DAYDREAM_TOUCHES={touches:[]},EVENTS={AXISMOVE:"axismove",BUTTONCHANGED:"buttonchanged",BUTTONDOWN:"buttondown",BUTTONUP:"buttonup",TOUCHSTART:"touchstart",TOUCHEND:"touchend"};module.exports.Component=registerComponent("tracked-controls-webvr",{schema:{autoHide:{default:!0},controller:{default:0},id:{type:"string",default:""},hand:{type:"string",default:""},idPrefix:{type:"string",default:""},orientationOffset:{type:"vec3"},armModel:{default:!0},headElement:{type:"selector"}},init:function(){this.axis=this.el.components["tracked-controls"].axis=[0,0,0],this.buttonStates=this.el.components["tracked-controls"].buttonStates={},this.changedAxes=[],this.targetControllerNumber=this.data.controller,this.axisMoveEventDetail={axis:this.axis,changed:this.changedAxes},this.deltaControllerPosition=new THREE.Vector3,this.controllerQuaternion=new THREE.Quaternion,this.controllerEuler=new THREE.Euler,this.updateGamepad(),this.buttonEventDetails={}},tick:function(t,e){var o=this.el.getObject3D("mesh");o&&o.update&&o.update(e/1e3),this.updateGamepad(),this.updatePose(),this.updateButtons()},defaultUserHeight:function(){return DEFAULT_CAMERA_HEIGHT},getHeadElement:function(){return this.data.headElement||this.el.sceneEl.camera.el},updateGamepad:function(){var t=this.data,e=controllerUtils.findMatchingControllerWebVR(this.system.controllers,t.id,t.idPrefix,t.hand,t.controller);this.controller=e,this.el.components["tracked-controls"].controller=e,this.data.autoHide&&(this.el.object3D.visible=!!this.controller)},applyArmModel:function(t){var e,o,i,n,s,r=this.controller,a=this.controllerEuler,l=this.controllerQuaternion,h=this.deltaControllerPosition;o=this.getHeadElement(),i=o.object3D,s=this.defaultUserHeight(),n=r.pose,e=(r?r.hand:void 0)||DEFAULT_HANDEDNESS,t.copy(i.position),h.set(EYES_TO_ELBOW.x*("left"===e?-1:"right"===e?1:0),EYES_TO_ELBOW.y,EYES_TO_ELBOW.z),h.multiplyScalar(s),h.applyAxisAngle(i.up,i.rotation.y),t.add(h),h.set(FOREARM.x,FOREARM.y,FOREARM.z),h.multiplyScalar(s),n.orientation?l.fromArray(n.orientation):l.copy(i.quaternion),a.setFromQuaternion(l),a.set(a.x,a.y,0),h.applyEuler(a),t.add(h)},updatePose:function(){var t,e,o=this.controller,i=this.data,n=this.el.object3D,s=this.system.vrDisplay;o&&(t=o.pose,t.position?n.position.fromArray(t.position):i.armModel&&this.applyArmModel(n.position),t.orientation&&n.quaternion.fromArray(t.orientation),s&&t.position&&(e=this.el.sceneEl.renderer.vr.getStandingMatrix(),n.matrix.compose(n.position,n.quaternion,n.scale),n.matrix.multiplyMatrices(e,n.matrix),n.matrix.decompose(n.position,n.quaternion,n.scale)),n.rotateX(this.data.orientationOffset.x*THREE.Math.DEG2RAD),n.rotateY(this.data.orientationOffset.y*THREE.Math.DEG2RAD),n.rotateZ(this.data.orientationOffset.z*THREE.Math.DEG2RAD))},updateButtons:function(){var t,e,o=this.controller;if(o){for(e=0;eMAX_DELTA)return d[i]=0,void(d[s]=0);var h=Math.pow(1/this.easing,60*e);0!==d[i]&&(d[i]=d[i]*h),0!==d[s]&&(d[s]=d[s]*h),Math.abs(d[i])MAX_DELTA)return d[i]=0,void(d[s]=0);var h=Math.pow(1/this.easing,60*e);0!==d[i]&&(d[i]-=d[i]*h),0!==d[s]&&(d[s]-=d[s]*h),Math.abs(d[i])=e.duration&&("VIDEO"===e.tagName&&(THREE.Cache.files[e.getAttribute("src")]=e),t())}return 4===e.readyState?t():e.error?r():(e.addEventListener("loadeddata",i,!1),e.addEventListener("progress",i,!1),void e.addEventListener("error",r,!1))})}function fixUpMediaElement(e){var t=setCrossOrigin(e);return t.tagName&&"video"===t.tagName.toLowerCase()&&(t.setAttribute("playsinline",""),t.setAttribute("webkit-playsinline","")),t!==e&&(e.parentNode.appendChild(t),e.parentNode.removeChild(e)),t}function setCrossOrigin(e){var t;if(e.hasAttribute("crossorigin"))return e;if(null!==(t=e.getAttribute("src"))){if(-1===t.indexOf("://"))return e;if(extractDomain(t)===window.location.host)return e}return warn('Cross-origin element (e.g., ) was requested without `crossorigin` set. A-Frame will re-request the asset with `crossorigin` attribute set. Please set `crossorigin` on the element (e.g., )',t),e.crossOrigin="anonymous",e.cloneNode(!0)}function extractDomain(e){var t=e.indexOf("://")>-1?e.split("/")[2]:e.split("/")[0];return t.substring(0,t.indexOf(":"))}function inferResponseType(e){var t=getFileNameFromURL(e),r=t.lastIndexOf(".");if(r>=0){if(".glb"===t.slice(r,e.search(/\?|#|$/)))return"arraybuffer"}return"text"}function getFileNameFromURL(e){var t=document.createElement("a");t.href=e;var r=t.search.replace(/^\?/,""),i=e.replace(r,"").replace("?","");return i.substring(i.lastIndexOf("/")+1)}var ANode=_dereq_("./a-node"),bind=_dereq_("../utils/bind"),debug=_dereq_("../utils/debug"),registerElement=_dereq_("./a-register-element").registerElement,THREE=_dereq_("../lib/three"),fileLoader=new THREE.FileLoader,warn=debug("core:a-assets:warn");module.exports=registerElement("a-assets",{prototype:Object.create(ANode.prototype,{createdCallback:{value:function(){this.isAssets=!0,this.fileLoader=fileLoader,this.timeout=null}},attachedCallback:{value:function(){var e,t,r,i,o,s,a=this,n=[];if(!this.parentNode.isScene)throw new Error(" must be a child of a .");for(o=this.querySelectorAll("img"),e=0;e=e.duration&&("VIDEO"===e.tagName&&(THREE.Cache.files[e.getAttribute("src")]=e),t())}return 4===e.readyState?t():e.error?r():(e.addEventListener("loadeddata",i,!1),e.addEventListener("progress",i,!1),void e.addEventListener("error",r,!1))})}function fixUpMediaElement(e){var t=setCrossOrigin(e);return t.tagName&&"video"===t.tagName.toLowerCase()&&(t.setAttribute("playsinline",""),t.setAttribute("webkit-playsinline","")),t!==e&&(e.parentNode.appendChild(t),e.parentNode.removeChild(e)),t}function setCrossOrigin(e){var t;if(e.hasAttribute("crossorigin"))return e;if(null!==(t=e.getAttribute("src"))){if(-1===t.indexOf("://"))return e;if(extractDomain(t)===window.location.host)return e}return warn('Cross-origin element (e.g., ) was requested without `crossorigin` set. A-Frame will re-request the asset with `crossorigin` attribute set. Please set `crossorigin` on the element (e.g., )',t),e.crossOrigin="anonymous",e.cloneNode(!0)}function extractDomain(e){var t=e.indexOf("://")>-1?e.split("/")[2]:e.split("/")[0];return t.substring(0,t.indexOf(":"))}function inferResponseType(e){var t=e.lastIndexOf(".");if(t>=0){var r=e.slice(t,e.length);if(".gltf"===r||".glb"===r)return"arraybuffer"}return"text"}var ANode=_dereq_("./a-node"),bind=_dereq_("../utils/bind"),debug=_dereq_("../utils/debug"),registerElement=_dereq_("./a-register-element").registerElement,THREE=_dereq_("../lib/three"),fileLoader=new THREE.FileLoader,warn=debug("core:a-assets:warn");module.exports=registerElement("a-assets",{prototype:Object.create(ANode.prototype,{createdCallback:{value:function(){this.isAssets=!0,this.fileLoader=fileLoader,this.timeout=null}},attachedCallback:{value:function(){var e,t,r,i,s,o,n=this,a=[];if(!this.parentNode.isScene)throw new Error(" must be a child of a .");for(s=this.querySelectorAll("img"),e=0;e did not contain exactly six elements each with a `src` attribute.")},writable:window.debug}})}); -},{"../utils/debug":178,"./a-register-element":107}],104:[function(_dereq_,module,exports){ +},{"../utils/debug":174,"./a-register-element":104}],101:[function(_dereq_,module,exports){ function checkComponentDefined(t,e){return!(!t.components[e]||!t.components[e].attrValue)||isComponentMixedIn(e,t.mixinEls)}function isComponentMixedIn(t,e){var i,n=!1;for(i=0;i2?s.slice(1).join("__"):s[1],COMPONENTS[a]&&(checkComponentDefined(this,t)||void 0!==e||i)&&!(t in this.components)){if(this.initComponentDependencies(a),o&&!COMPONENTS[a].multiple)throw new Error("Trying to initialize multiple components of type `"+a+"`. There can only be one component of this type per entity.");n=new COMPONENTS[a].Component(this,e,o),this.isPlaying&&n.play(),this.hasAttribute(t)||(n.justInitialized=!0,window.HTMLElement.prototype.setAttribute.call(this,t,"")),debug("Component initialized: %s",t)}},writable:window.debug},initComponentDependencies:{value:function(t){var e,i,n=this,o=COMPONENTS[t];if(o&&(e=COMPONENTS[t].dependencies))for(i=0;i0?e.substring(0,r):e,!COMPONENTS[a])return"mixin"===e&&this.mixinUpdate(i),void ANode.prototype.setAttribute.call(this,e,i);if(!this.components[e]&&this.hasAttribute(e)&&this.updateComponent(e,window.HTMLElement.prototype.getAttribute.call(this,e)),void 0!==n&&"string"==typeof i&&i.length>0&&"string"==typeof utils.styleParser.parse(i)){for(l in t)delete t[l];o=t,o[i]=n,s=!1}else o=i,s=!0===n;this.updateComponent(e,o,s),(h=this.sceneEl&&this.sceneEl.getAttribute("debug"))&&this.components[e].flushToDOM()}}(),writable:window.debug},flushToDOM:{value:function(t){var e,i,n,o=this.components,s=this.children;for(n in o)o[n].flushToDOM();if(t)for(i=0;i outside of an A-Frame scene. Append this element to `` instead."),this.hasLoaded=!1,this.emit("nodeready",void 0,!1),this.isMixin||(t=this.getAttribute("mixin"))&&this.updateMixins(t)},writable:window.debug},attributeChangedCallback:{value:function(t,e,i){i!==this.computedMixinStr&&("mixin"!==t||this.isMixin||this.updateMixins(i,e))}},closestScene:{value:function(){for(var t=this;t&&!t.isScene;)t=t.parentElement;return t}},closest:{value:function(t){for(var e=this.matches||this.mozMatchesSelector||this.msMatchesSelector||this.oMatchesSelector||this.webkitMatchesSelector,i=this;i&&!e.call(i,t);)i=i.parentElement;return i}},detachedCallback:{value:function(){this.hasLoaded=!1}},load:{value:function(t,e){var i,n,s=this;this.hasLoaded||(e=e||isNode,i=this.getChildren(),n=i.filter(e).map(function(t){return new Promise(function(e){if(t.hasLoaded)return e();t.addEventListener("loaded",e)})}),Promise.all(n).then(function(){s.hasLoaded=!0,t&&t(),s.emit("loaded",void 0,!1)}).catch(function(t){error("Failure loading node: ",t)}))},writable:!0},getChildren:{value:function(){return Array.prototype.slice.call(this.children,0)}},updateMixins:{value:function(){var t=[],e=[],i={};return function(n,s){var r,a,o;for(t.length=0,e.length=0,a=n?utils.split(n.trim(),/\s+/):t,o=s?utils.split(s.trim(),/\s+/):e,i.newMixinIds=a,i.oldMixinIds=o,r=0;r tag after the scene. Component