Last active
April 17, 2020 21:23
Revisions
-
gabrielflorit revised this gist
Apr 17, 2020 . 5 changed files with 297 additions and 77 deletions.There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode charactersOriginal file line number Diff line number Diff line change @@ -1 +1 @@ !function(t){function e(l){if(n[l])return n[l].exports;var c=n[l]={i:l,l:!1,exports:{}};return t[l].call(c.exports,c,c.exports,e),c.l=!0,c.exports}var n={};e.m=t,e.c=n,e.i=function(t){return t},e.d=function(t,n,l){e.o(t,n)||Object.defineProperty(t,n,{configurable:!1,enumerable:!0,get:l})},e.n=function(t){var n=t&&t.__esModule?function(){return t.default}:function(){return t};return e.d(n,"a",n),n},e.o=function(t,e){return Object.prototype.hasOwnProperty.call(t,e)},e.p="",e(e.s=2)}([function(module,exports,__webpack_require__){"use strict";eval("\n\nObject.defineProperty(exports, \"__esModule\", {\n\tvalue: true\n});\n/**\n * @author mrdoob / http://mrdoob.com\n * @author Mugen87 / https://github.com/Mugen87\n */\n\nvar ARButton = {\n\n\tcreateButton: function createButton(renderer) {\n\t\tvar sessionInit = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n\n\t\tfunction showStartAR() /*device*/{\n\n\t\t\tvar currentSession = null;\n\n\t\t\tfunction onSessionStarted(session) {\n\n\t\t\t\tsession.addEventListener('end', onSessionEnded);\n\n\t\t\t\t/*\n session.updateWorldTrackingState( {\n \t'planeDetectionState': { 'enabled': true }\n } );\n */\n\n\t\t\t\trenderer.xr.setReferenceSpaceType('local');\n\t\t\t\trenderer.xr.setSession(session);\n\t\t\t\tbutton.textContent = 'STOP AR';\n\n\t\t\t\tcurrentSession = session;\n\t\t\t}\n\n\t\t\tfunction onSessionEnded() /*event*/{\n\n\t\t\t\tcurrentSession.removeEventListener('end', onSessionEnded);\n\n\t\t\t\tbutton.textContent = 'START AR';\n\n\t\t\t\tcurrentSession = null;\n\t\t\t}\n\n\t\t\t//\n\n\t\t\tbutton.style.display = '';\n\n\t\t\tbutton.style.cursor = 'pointer';\n\t\t\tbutton.style.left = 'calc(50% - 50px)';\n\t\t\tbutton.style.width = '100px';\n\n\t\t\tbutton.textContent = 'START AR';\n\n\t\t\tbutton.onmouseenter = function () {\n\n\t\t\t\tbutton.style.opacity = '1.0';\n\t\t\t};\n\n\t\t\tbutton.onmouseleave = function () {\n\n\t\t\t\tbutton.style.opacity = '0.5';\n\t\t\t};\n\n\t\t\tbutton.onclick = function () {\n\n\t\t\t\tif (currentSession === null) {\n\n\t\t\t\t\tnavigator.xr.requestSession('immersive-ar', sessionInit).then(onSessionStarted);\n\t\t\t\t} else {\n\n\t\t\t\t\tcurrentSession.end();\n\t\t\t\t}\n\t\t\t};\n\t\t}\n\n\t\tfunction disableButton() {\n\n\t\t\tbutton.style.display = '';\n\n\t\t\tbutton.style.cursor = 'auto';\n\t\t\tbutton.style.left = 'calc(50% - 75px)';\n\t\t\tbutton.style.width = '150px';\n\n\t\t\tbutton.onmouseenter = null;\n\t\t\tbutton.onmouseleave = null;\n\n\t\t\tbutton.onclick = null;\n\t\t}\n\n\t\tfunction showARNotSupported() {\n\n\t\t\tdisableButton();\n\n\t\t\tbutton.textContent = 'AR NOT SUPPORTED';\n\t\t}\n\n\t\tfunction stylizeElement(element) {\n\n\t\t\telement.style.position = 'absolute';\n\t\t\telement.style.bottom = '20px';\n\t\t\telement.style.padding = '12px 6px';\n\t\t\telement.style.border = '1px solid #fff';\n\t\t\telement.style.borderRadius = '4px';\n\t\t\telement.style.background = 'rgba(0,0,0,0.1)';\n\t\t\telement.style.color = '#fff';\n\t\t\telement.style.font = 'normal 13px sans-serif';\n\t\t\telement.style.textAlign = 'center';\n\t\t\telement.style.opacity = '0.5';\n\t\t\telement.style.outline = 'none';\n\t\t\telement.style.zIndex = '999';\n\t\t}\n\n\t\tif ('xr' in navigator) {\n\n\t\t\tvar button = document.createElement('button');\n\t\t\tbutton.style.display = 'none';\n\n\t\t\tstylizeElement(button);\n\n\t\t\tnavigator.xr.isSessionSupported('immersive-ar').then(function (supported) {\n\n\t\t\t\tsupported ? showStartAR() : showARNotSupported();\n\t\t\t}).catch(showARNotSupported);\n\n\t\t\treturn button;\n\t\t} else {\n\n\t\t\tvar message = document.createElement('a');\n\n\t\t\tif (window.isSecureContext === false) {\n\n\t\t\t\tmessage.href = document.location.href.replace(/^http:/, 'https:');\n\t\t\t\tmessage.innerHTML = 'WEBXR NEEDS HTTPS'; // TODO Improve message\n\t\t\t} else {\n\n\t\t\t\tmessage.href = 'https://immersiveweb.dev/';\n\t\t\t\tmessage.innerHTML = 'WEBXR NOT AVAILABLE';\n\t\t\t}\n\n\t\t\tmessage.style.left = 'calc(50% - 90px)';\n\t\t\tmessage.style.width = '180px';\n\t\t\tmessage.style.textDecoration = 'none';\n\n\t\t\tstylizeElement(message);\n\n\t\t\treturn message;\n\t\t}\n\t}\n\n};\n\nexports.ARButton = ARButton;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMC5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy9BUkJ1dHRvbi5qcz8yMmUxIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGF1dGhvciBtcmRvb2IgLyBodHRwOi8vbXJkb29iLmNvbVxuICogQGF1dGhvciBNdWdlbjg3IC8gaHR0cHM6Ly9naXRodWIuY29tL011Z2VuODdcbiAqL1xuXG52YXIgQVJCdXR0b24gPSB7XG5cblx0Y3JlYXRlQnV0dG9uOiBmdW5jdGlvbiAoIHJlbmRlcmVyLCBzZXNzaW9uSW5pdCA9IHt9ICkge1xuXG5cdFx0ZnVuY3Rpb24gc2hvd1N0YXJ0QVIoIC8qZGV2aWNlKi8gKSB7XG5cblx0XHRcdHZhciBjdXJyZW50U2Vzc2lvbiA9IG51bGw7XG5cblx0XHRcdGZ1bmN0aW9uIG9uU2Vzc2lvblN0YXJ0ZWQoIHNlc3Npb24gKSB7XG5cblx0XHRcdFx0c2Vzc2lvbi5hZGRFdmVudExpc3RlbmVyKCAnZW5kJywgb25TZXNzaW9uRW5kZWQgKTtcblxuXHRcdFx0XHQvKlxuXHRcdFx0XHRzZXNzaW9uLnVwZGF0ZVdvcmxkVHJhY2tpbmdTdGF0ZSgge1xuXHRcdFx0XHRcdCdwbGFuZURldGVjdGlvblN0YXRlJzogeyAnZW5hYmxlZCc6IHRydWUgfVxuXHRcdFx0XHR9ICk7XG5cdFx0XHRcdCovXG5cblx0XHRcdFx0cmVuZGVyZXIueHIuc2V0UmVmZXJlbmNlU3BhY2VUeXBlKCAnbG9jYWwnICk7XG5cdFx0XHRcdHJlbmRlcmVyLnhyLnNldFNlc3Npb24oIHNlc3Npb24gKTtcblx0XHRcdFx0YnV0dG9uLnRleHRDb250ZW50ID0gJ1NUT1AgQVInO1xuXG5cdFx0XHRcdGN1cnJlbnRTZXNzaW9uID0gc2Vzc2lvbjtcblxuXHRcdFx0fVxuXG5cdFx0XHRmdW5jdGlvbiBvblNlc3Npb25FbmRlZCggLypldmVudCovICkge1xuXG5cdFx0XHRcdGN1cnJlbnRTZXNzaW9uLnJlbW92ZUV2ZW50TGlzdGVuZXIoICdlbmQnLCBvblNlc3Npb25FbmRlZCApO1xuXG5cdFx0XHRcdGJ1dHRvbi50ZXh0Q29udGVudCA9ICdTVEFSVCBBUic7XG5cblx0XHRcdFx0Y3VycmVudFNlc3Npb24gPSBudWxsO1xuXG5cdFx0XHR9XG5cblx0XHRcdC8vXG5cblx0XHRcdGJ1dHRvbi5zdHlsZS5kaXNwbGF5ID0gJyc7XG5cblx0XHRcdGJ1dHRvbi5zdHlsZS5jdXJzb3IgPSAncG9pbnRlcic7XG5cdFx0XHRidXR0b24uc3R5bGUubGVmdCA9ICdjYWxjKDUwJSAtIDUwcHgpJztcblx0XHRcdGJ1dHRvbi5zdHlsZS53aWR0aCA9ICcxMDBweCc7XG5cblx0XHRcdGJ1dHRvbi50ZXh0Q29udGVudCA9ICdTVEFSVCBBUic7XG5cblx0XHRcdGJ1dHRvbi5vbm1vdXNlZW50ZXIgPSBmdW5jdGlvbiAoKSB7XG5cblx0XHRcdFx0YnV0dG9uLnN0eWxlLm9wYWNpdHkgPSAnMS4wJztcblxuXHRcdFx0fTtcblxuXHRcdFx0YnV0dG9uLm9ubW91c2VsZWF2ZSA9IGZ1bmN0aW9uICgpIHtcblxuXHRcdFx0XHRidXR0b24uc3R5bGUub3BhY2l0eSA9ICcwLjUnO1xuXG5cdFx0XHR9O1xuXG5cdFx0XHRidXR0b24ub25jbGljayA9IGZ1bmN0aW9uICgpIHtcblxuXHRcdFx0XHRpZiAoIGN1cnJlbnRTZXNzaW9uID09PSBudWxsICkge1xuXG5cdFx0XHRcdFx0bmF2aWdhdG9yLnhyLnJlcXVlc3RTZXNzaW9uKCAnaW1tZXJzaXZlLWFyJywgc2Vzc2lvbkluaXQgKS50aGVuKCBvblNlc3Npb25TdGFydGVkICk7XG5cblx0XHRcdFx0fSBlbHNlIHtcblxuXHRcdFx0XHRcdGN1cnJlbnRTZXNzaW9uLmVuZCgpO1xuXG5cdFx0XHRcdH1cblxuXHRcdFx0fTtcblxuXHRcdH1cblxuXHRcdGZ1bmN0aW9uIGRpc2FibGVCdXR0b24oKSB7XG5cblx0XHRcdGJ1dHRvbi5zdHlsZS5kaXNwbGF5ID0gJyc7XG5cblx0XHRcdGJ1dHRvbi5zdHlsZS5jdXJzb3IgPSAnYXV0byc7XG5cdFx0XHRidXR0b24uc3R5bGUubGVmdCA9ICdjYWxjKDUwJSAtIDc1cHgpJztcblx0XHRcdGJ1dHRvbi5zdHlsZS53aWR0aCA9ICcxNTBweCc7XG5cblx0XHRcdGJ1dHRvbi5vbm1vdXNlZW50ZXIgPSBudWxsO1xuXHRcdFx0YnV0dG9uLm9ubW91c2VsZWF2ZSA9IG51bGw7XG5cblx0XHRcdGJ1dHRvbi5vbmNsaWNrID0gbnVsbDtcblxuXHRcdH1cblxuXHRcdGZ1bmN0aW9uIHNob3dBUk5vdFN1cHBvcnRlZCgpIHtcblxuXHRcdFx0ZGlzYWJsZUJ1dHRvbigpO1xuXG5cdFx0XHRidXR0b24udGV4dENvbnRlbnQgPSAnQVIgTk9UIFNVUFBPUlRFRCc7XG5cblx0XHR9XG5cblx0XHRmdW5jdGlvbiBzdHlsaXplRWxlbWVudCggZWxlbWVudCApIHtcblxuXHRcdFx0ZWxlbWVudC5zdHlsZS5wb3NpdGlvbiA9ICdhYnNvbHV0ZSc7XG5cdFx0XHRlbGVtZW50LnN0eWxlLmJvdHRvbSA9ICcyMHB4Jztcblx0XHRcdGVsZW1lbnQuc3R5bGUucGFkZGluZyA9ICcxMnB4IDZweCc7XG5cdFx0XHRlbGVtZW50LnN0eWxlLmJvcmRlciA9ICcxcHggc29saWQgI2ZmZic7XG5cdFx0XHRlbGVtZW50LnN0eWxlLmJvcmRlclJhZGl1cyA9ICc0cHgnO1xuXHRcdFx0ZWxlbWVudC5zdHlsZS5iYWNrZ3JvdW5kID0gJ3JnYmEoMCwwLDAsMC4xKSc7XG5cdFx0XHRlbGVtZW50LnN0eWxlLmNvbG9yID0gJyNmZmYnO1xuXHRcdFx0ZWxlbWVudC5zdHlsZS5mb250ID0gJ25vcm1hbCAxM3B4IHNhbnMtc2VyaWYnO1xuXHRcdFx0ZWxlbWVudC5zdHlsZS50ZXh0QWxpZ24gPSAnY2VudGVyJztcblx0XHRcdGVsZW1lbnQuc3R5bGUub3BhY2l0eSA9ICcwLjUnO1xuXHRcdFx0ZWxlbWVudC5zdHlsZS5vdXRsaW5lID0gJ25vbmUnO1xuXHRcdFx0ZWxlbWVudC5zdHlsZS56SW5kZXggPSAnOTk5JztcblxuXHRcdH1cblxuXHRcdGlmICggJ3hyJyBpbiBuYXZpZ2F0b3IgKSB7XG5cblx0XHRcdHZhciBidXR0b24gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCAnYnV0dG9uJyApO1xuXHRcdFx0YnV0dG9uLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XG5cblx0XHRcdHN0eWxpemVFbGVtZW50KCBidXR0b24gKTtcblxuXHRcdFx0bmF2aWdhdG9yLnhyLmlzU2Vzc2lvblN1cHBvcnRlZCggJ2ltbWVyc2l2ZS1hcicgKS50aGVuKCBmdW5jdGlvbiAoIHN1cHBvcnRlZCApIHtcblxuXHRcdFx0XHRzdXBwb3J0ZWQgPyBzaG93U3RhcnRBUigpIDogc2hvd0FSTm90U3VwcG9ydGVkKCk7XG5cblx0XHRcdH0gKS5jYXRjaCggc2hvd0FSTm90U3VwcG9ydGVkICk7XG5cblx0XHRcdHJldHVybiBidXR0b247XG5cblx0XHR9IGVsc2Uge1xuXG5cdFx0XHR2YXIgbWVzc2FnZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoICdhJyApO1xuXG5cdFx0XHRpZiAoIHdpbmRvdy5pc1NlY3VyZUNvbnRleHQgPT09IGZhbHNlICkge1xuXG5cdFx0XHRcdG1lc3NhZ2UuaHJlZiA9IGRvY3VtZW50LmxvY2F0aW9uLmhyZWYucmVwbGFjZSggL15odHRwOi8sICdodHRwczonICk7XG5cdFx0XHRcdG1lc3NhZ2UuaW5uZXJIVE1MID0gJ1dFQlhSIE5FRURTIEhUVFBTJzsgLy8gVE9ETyBJbXByb3ZlIG1lc3NhZ2VcblxuXHRcdFx0fSBlbHNlIHtcblxuXHRcdFx0XHRtZXNzYWdlLmhyZWYgPSAnaHR0cHM6Ly9pbW1lcnNpdmV3ZWIuZGV2Lyc7XG5cdFx0XHRcdG1lc3NhZ2UuaW5uZXJIVE1MID0gJ1dFQlhSIE5PVCBBVkFJTEFCTEUnO1xuXG5cdFx0XHR9XG5cblx0XHRcdG1lc3NhZ2Uuc3R5bGUubGVmdCA9ICdjYWxjKDUwJSAtIDkwcHgpJztcblx0XHRcdG1lc3NhZ2Uuc3R5bGUud2lkdGggPSAnMTgwcHgnO1xuXHRcdFx0bWVzc2FnZS5zdHlsZS50ZXh0RGVjb3JhdGlvbiA9ICdub25lJztcblxuXHRcdFx0c3R5bGl6ZUVsZW1lbnQoIG1lc3NhZ2UgKTtcblxuXHRcdFx0cmV0dXJuIG1lc3NhZ2U7XG5cblx0XHR9XG5cblx0fVxuXG59O1xuXG5leHBvcnQgeyBBUkJ1dHRvbiB9O1xuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIEFSQnV0dG9uLmpzIl0sIm1hcHBpbmdzIjoiOzs7OztBQUFBOzs7OztBQUtBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7O0FBTUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUVBO0FBRUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBRUE7QUFDQTtBQTVKQTtBQUNBO0FBOEpBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///0\n")},function(module,exports,__webpack_require__){"use strict";eval('\n\nObject.defineProperty(exports, "__esModule", {\n value: true\n});\n\nvar _slicedToArray = function () { function sliceIterator(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"]) _i["return"](); } finally { if (_d) throw _e; } } return _arr; } return function (arr, i) { if (Array.isArray(arr)) { return arr; } else if (Symbol.iterator in Object(arr)) { return sliceIterator(arr, i); } else { throw new TypeError("Invalid attempt to destructure non-iterable instance"); } }; }();\n\nfunction _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } else { return Array.from(arr); } }\n\n// const ftToMt = x => x * 0.3048\n\nvar makeVirus = function makeVirus() {\n var _mesh$position;\n\n var scale = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 1;\n\n var virusGeometry = new THREE.DodecahedronBufferGeometry(1 * scale);\n var virusMaterial = new THREE.MeshPhongMaterial({ color: 0xffbbbb });\n var mesh = new THREE.Mesh(virusGeometry, virusMaterial);\n mesh.castShadow = true;\n var defaultPosition = [0 * scale, 1 * scale, 0 * scale];\n (_mesh$position = mesh.position).set.apply(_mesh$position, defaultPosition);\n return { mesh: mesh, defaultPosition: defaultPosition };\n};\n\nvar makeFloor = function makeFloor() {\n var _mesh$position2;\n\n var scale = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 1;\n\n var planeGeometry = new THREE.BoxGeometry(3 * scale, 0.01 * scale, 3 * scale);\n var planeMaterial = new THREE.MeshPhongMaterial({ color: 0xffffff });\n var mesh = new THREE.Mesh(planeGeometry, planeMaterial);\n mesh.receiveShadow = true;\n var defaultPosition = [0 * scale, 0 * scale, 0 * scale];\n (_mesh$position2 = mesh.position).set.apply(_mesh$position2, defaultPosition);\n return { mesh: mesh, defaultPosition: defaultPosition };\n};\n\nvar makeReticle = function makeReticle() {\n var reticle = new THREE.Object3D();\n reticle.matrixAutoUpdate = false;\n reticle.visible = false;\n var gap = Math.PI / 16;\n var segments = 4;\n var angles = [].concat(_toConsumableArray(Array(segments))).map(function (_, index, array) {\n return [index * (2 * Math.PI) / array.length + gap, 2 * Math.PI / array.length - 2 * gap];\n });\n angles.forEach(function (_ref) {\n var _ref2 = _slicedToArray(_ref, 2),\n from = _ref2[0],\n to = _ref2[1];\n\n var geometry = new THREE.RingBufferGeometry(0.05, 0.1, 32, 1, from, to).rotateX(-Math.PI / 2);\n var material = new THREE.MeshPhongMaterial({ color: 0xffffff });\n var mesh = new THREE.Mesh(geometry, material);\n reticle.add(mesh);\n });\n return reticle;\n};\n\nexports.makeVirus = makeVirus;\nexports.makeFloor = makeFloor;\nexports.makeReticle = makeReticle;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMS5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy9zaGFwZXMuanM/NjQ1NSJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBjb25zdCBmdFRvTXQgPSB4ID0+IHggKiAwLjMwNDhcblxuY29uc3QgbWFrZVZpcnVzID0gKHNjYWxlID0gMSkgPT4ge1xuICBjb25zdCB2aXJ1c0dlb21ldHJ5ID0gbmV3IFRIUkVFLkRvZGVjYWhlZHJvbkJ1ZmZlckdlb21ldHJ5KDEgKiBzY2FsZSlcbiAgY29uc3QgdmlydXNNYXRlcmlhbCA9IG5ldyBUSFJFRS5NZXNoUGhvbmdNYXRlcmlhbCh7IGNvbG9yOiAweGZmYmJiYiB9KVxuICBjb25zdCBtZXNoID0gbmV3IFRIUkVFLk1lc2godmlydXNHZW9tZXRyeSwgdmlydXNNYXRlcmlhbClcbiAgbWVzaC5jYXN0U2hhZG93ID0gdHJ1ZVxuICBjb25zdCBkZWZhdWx0UG9zaXRpb24gPSBbMCAqIHNjYWxlLCAxICogc2NhbGUsIDAgKiBzY2FsZV1cbiAgbWVzaC5wb3NpdGlvbi5zZXQoLi4uZGVmYXVsdFBvc2l0aW9uKVxuICByZXR1cm4geyBtZXNoLCBkZWZhdWx0UG9zaXRpb24gfVxufVxuXG5jb25zdCBtYWtlRmxvb3IgPSAoc2NhbGUgPSAxKSA9PiB7XG4gIGNvbnN0IHBsYW5lR2VvbWV0cnkgPSBuZXcgVEhSRUUuQm94R2VvbWV0cnkoXG4gICAgMyAqIHNjYWxlLFxuICAgIDAuMDEgKiBzY2FsZSxcbiAgICAzICogc2NhbGUsXG4gIClcbiAgY29uc3QgcGxhbmVNYXRlcmlhbCA9IG5ldyBUSFJFRS5NZXNoUGhvbmdNYXRlcmlhbCh7IGNvbG9yOiAweGZmZmZmZiB9KVxuICBjb25zdCBtZXNoID0gbmV3IFRIUkVFLk1lc2gocGxhbmVHZW9tZXRyeSwgcGxhbmVNYXRlcmlhbClcbiAgbWVzaC5yZWNlaXZlU2hhZG93ID0gdHJ1ZVxuICBjb25zdCBkZWZhdWx0UG9zaXRpb24gPSBbMCAqIHNjYWxlLCAwICogc2NhbGUsIDAgKiBzY2FsZV1cbiAgbWVzaC5wb3NpdGlvbi5zZXQoLi4uZGVmYXVsdFBvc2l0aW9uKVxuICByZXR1cm4geyBtZXNoLCBkZWZhdWx0UG9zaXRpb24gfVxufVxuXG5jb25zdCBtYWtlUmV0aWNsZSA9ICgpID0+IHtcbiAgY29uc3QgcmV0aWNsZSA9IG5ldyBUSFJFRS5PYmplY3QzRCgpXG4gIHJldGljbGUubWF0cml4QXV0b1VwZGF0ZSA9IGZhbHNlXG4gIHJldGljbGUudmlzaWJsZSA9IGZhbHNlXG4gIGNvbnN0IGdhcCA9IE1hdGguUEkgLyAxNlxuICBjb25zdCBzZWdtZW50cyA9IDRcbiAgY29uc3QgYW5nbGVzID0gWy4uLkFycmF5KHNlZ21lbnRzKV0ubWFwKChfLCBpbmRleCwgYXJyYXkpID0+IFtcbiAgICBpbmRleCAqICgyICogTWF0aC5QSSkgLyBhcnJheS5sZW5ndGggKyBnYXAsXG4gICAgMiAqIE1hdGguUEkgLyBhcnJheS5sZW5ndGggLSAyICogZ2FwLFxuICBdKVxuICBhbmdsZXMuZm9yRWFjaCgoW2Zyb20sIHRvXSkgPT4ge1xuICAgIGNvbnN0IGdlb21ldHJ5ID0gbmV3IFRIUkVFLlJpbmdCdWZmZXJHZW9tZXRyeShcbiAgICAgIDAuMDUsXG4gICAgICAwLjEsXG4gICAgICAzMixcbiAgICAgIDEsXG4gICAgICBmcm9tLFxuICAgICAgdG8sXG4gICAgKS5yb3RhdGVYKC1NYXRoLlBJIC8gMilcbiAgICBjb25zdCBtYXRlcmlhbCA9IG5ldyBUSFJFRS5NZXNoUGhvbmdNYXRlcmlhbCh7IGNvbG9yOiAweGZmZmZmZiB9KVxuICAgIGNvbnN0IG1lc2ggPSBuZXcgVEhSRUUuTWVzaChnZW9tZXRyeSwgbWF0ZXJpYWwpXG4gICAgcmV0aWNsZS5hZGQobWVzaClcbiAgfSlcbiAgcmV0dXJuIHJldGljbGVcbn1cblxuZXhwb3J0IHsgbWFrZVZpcnVzLCBtYWtlRmxvb3IsIG1ha2VSZXRpY2xlIH1cblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyBzaGFwZXMuanMiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7QUFBQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBREE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQURBO0FBQ0E7QUFBQTtBQUtBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFJQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFRQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///1\n')},function(module,exports,__webpack_require__){"use strict";eval("\n\nvar _ARButton = __webpack_require__(0);\n\nvar _shapes = __webpack_require__(1);\n\nvar shapes = _interopRequireWildcard(_shapes);\n\nfunction _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } }\n\nfunction _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } else { return Array.from(arr); } } // TODO\n// - in AR:\n// - place virus mesh in the right y-position\n// - should shadows work?\n// - should lights be off?\n// - add an overlay telling user what to do\n// - in desktop:\n// - fix shadows\n\nvar scene = null;\nvar camera = null;\nvar renderer = null;\nvar container = document.querySelector('.canvas');\nvar overlay = document.querySelector('.overlay');\nvar xrExitButton = document.querySelector('button.xr-exit');\n\nvar scale = 0.1;\n\nvar init = function init() {\n scene = new THREE.Scene();\n\n camera = new THREE.PerspectiveCamera(45, container.offsetWidth / container.offsetHeight, 0.01, 10);\n\n // TODO: How does this apply in AR?\n camera.position.set(0 * scale, 2 * scale, 6 * scale);\n camera.lookAt(0 * scale, 1 * scale, 0 * scale);\n\n // Setup lights.\n // TODO: How does this apply in AR?\n var hemisphereLight = new THREE.HemisphereLight(0xffffff, 0x333333, 0.5);\n hemisphereLight.position.set(0 * scale, 5 * scale, 5 * scale);\n scene.add(hemisphereLight);\n\n // TODO: There might be a better way of handling shadows.\n // TODO: Should we disable shadows/this light in AR?\n var directionalLight = new THREE.DirectionalLight(0xffffff, 0.5);\n directionalLight.position.set(0 * scale, 5 * scale, 5 * scale);\n directionalLight.castShadow = true;\n // directionalLight.shadow.mapSize.width = 512 * 16\n // directionalLight.shadow.mapSize.height = 512 * 16\n scene.add(directionalLight);\n\n // Create renderer.\n renderer = new THREE.WebGLRenderer({ antialias: true, alpha: true });\n renderer.setPixelRatio(window.devicePixelRatio);\n renderer.setSize(container.offsetWidth, container.offsetHeight);\n renderer.xr.enabled = true;\n // TODO: How does this apply in AR?\n renderer.shadowMap.enabled = true;\n container.appendChild(renderer.domElement);\n\n // Add \"Click for AR\" button.\n container.appendChild(_ARButton.ARButton.createButton(renderer, {\n requiredFeatures: ['hit-test'],\n optionalFeatures: ['dom-overlay'],\n domOverlay: { root: overlay }\n }));\n};\n\ninit();\n\nvar floor = shapes.makeFloor(scale);\nscene.add(floor.mesh);\nvar virus = shapes.makeVirus(scale);\nscene.add(virus.mesh);\nvar reticle = shapes.makeReticle();\n\nvar session = null;\nvar hitTestSourceRequested = false;\nvar hitTestSource = null;\nvar renderedFirstARFrame = false;\n\nxrExitButton.addEventListener('click', function () {\n var _virus$mesh$position;\n\n session.end();\n scene.add(floor.mesh);\n scene.add(virus.mesh);\n (_virus$mesh$position = virus.mesh.position).set.apply(_virus$mesh$position, _toConsumableArray(virus.defaultPosition));\n scene.remove(reticle);\n session = null;\n hitTestSourceRequested = false;\n hitTestSource = null;\n renderedFirstARFrame = false;\n});\n\nvar render = function render(timestamp, frame) {\n if (frame) {\n if (!renderedFirstARFrame) {\n // TODO: maybe put this in a util function.\n scene.remove(floor.mesh);\n scene.remove(virus.mesh);\n scene.add(reticle);\n overlay.classList.remove('hide');\n renderedFirstARFrame = true;\n }\n\n var referenceSpace = renderer.xr.getReferenceSpace();\n session = renderer.xr.getSession();\n\n if (hitTestSourceRequested === false) {\n session.requestReferenceSpace('viewer').then(function (referenceSpace) {\n session.requestHitTestSource({ space: referenceSpace }).then(function (source) {\n hitTestSource = source;\n });\n });\n\n session.addEventListener('end', function () {\n // TODO: maybe put this in a util function.\n // TODO: is some of this also happening when we click the\n // 'STOP AR' button?\n hitTestSourceRequested = false;\n hitTestSource = null;\n overlay.classList.add('hide');\n });\n\n hitTestSourceRequested = true;\n }\n\n if (hitTestSource) {\n var hitTestResults = frame.getHitTestResults(hitTestSource);\n\n if (hitTestResults.length) {\n var hit = hitTestResults[0];\n reticle.visible = true;\n reticle.matrix.fromArray(hit.getPose(referenceSpace).transform.matrix);\n } else {\n reticle.visible = false;\n }\n }\n }\n if (virus.mesh.parent === scene) {\n virus.mesh.rotation.y = timestamp * 0.0004;\n }\n renderer.render(scene, camera);\n};\n\nvar animate = function animate() {\n renderer.setAnimationLoop(render);\n};\n\n// Add objects to scene. The scene should work on desktop, as is,\n// and also as a preview of what you might see on AR.\n\n// scene.add(reticle)\n\nanimate();\n\n// const addRingBufferToScene = () => {\n// const geometry = new THREE.RingBufferGeometry(1, ftToMt(6), 32).rotateX(\n// -Math.PI / 2,\n// )\n// const material = new THREE.MeshPhongMaterial({\n// color: 0xff0000 * Math.random(),\n// })\n// const mesh = new THREE.Mesh(geometry, material)\n// mesh.position.setFromMatrixPosition(reticle.matrix)\n// scene.add(mesh)\n// }\n\n// On select, add new geometry to scene.\nvar onSelect = function onSelect(e) {\n if (reticle.visible) {\n if (virus.mesh.parent !== scene) {\n console.log('onSelect: scene.add(virus)');\n scene.add(virus.mesh);\n } else {\n console.log('onSelect: nothing');\n }\n virus.mesh.position.setFromMatrixPosition(reticle.matrix);\n } else {\n console.log('onSelect: reticle not visible');\n }\n};\n\n// Listen to the webxr controller's `select' event.\nvar controller = renderer.xr.getController(0);\ncontroller.addEventListener('select', onSelect);\nscene.add(controller);\n\nvar onWindowResize = function onWindowResize() {\n camera.aspect = container.offsetWidth / container.offsetHeight;\n camera.updateProjectionMatrix();\n renderer.setSize(container.offsetWidth, container.offsetHeight);\n};\n\n// Listen to window's `resize` event.\nwindow.addEventListener('resize', onWindowResize, false);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMi5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy9zY3JpcHQuanM/OWE5NSJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBUT0RPXG4vLyAtIGluIEFSOlxuLy8gICAtIHBsYWNlIHZpcnVzIG1lc2ggaW4gdGhlIHJpZ2h0IHktcG9zaXRpb25cbi8vICAgLSBzaG91bGQgc2hhZG93cyB3b3JrP1xuLy8gICAtIHNob3VsZCBsaWdodHMgYmUgb2ZmP1xuLy8gICAtIGFkZCBhbiBvdmVybGF5IHRlbGxpbmcgdXNlciB3aGF0IHRvIGRvXG4vLyAtIGluIGRlc2t0b3A6XG4vLyAgIC0gZml4IHNoYWRvd3NcblxuaW1wb3J0IHsgQVJCdXR0b24gfSBmcm9tICcuL0FSQnV0dG9uLmpzJ1xuaW1wb3J0ICogYXMgc2hhcGVzIGZyb20gJy4vc2hhcGVzLmpzJ1xuXG5sZXQgc2NlbmUgPSBudWxsXG5sZXQgY2FtZXJhID0gbnVsbFxubGV0IHJlbmRlcmVyID0gbnVsbFxuY29uc3QgY29udGFpbmVyID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignLmNhbnZhcycpXG5jb25zdCBvdmVybGF5ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignLm92ZXJsYXknKVxuY29uc3QgeHJFeGl0QnV0dG9uID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignYnV0dG9uLnhyLWV4aXQnKVxuXG5jb25zdCBzY2FsZSA9IDAuMVxuXG5jb25zdCBpbml0ID0gKCkgPT4ge1xuICBzY2VuZSA9IG5ldyBUSFJFRS5TY2VuZSgpXG5cbiAgY2FtZXJhID0gbmV3IFRIUkVFLlBlcnNwZWN0aXZlQ2FtZXJhKFxuICAgIDQ1LFxuICAgIGNvbnRhaW5lci5vZmZzZXRXaWR0aCAvIGNvbnRhaW5lci5vZmZzZXRIZWlnaHQsXG4gICAgMC4wMSxcbiAgICAxMCxcbiAgKVxuXG4gIC8vIFRPRE86IEhvdyBkb2VzIHRoaXMgYXBwbHkgaW4gQVI/XG4gIGNhbWVyYS5wb3NpdGlvbi5zZXQoMCAqIHNjYWxlLCAyICogc2NhbGUsIDYgKiBzY2FsZSlcbiAgY2FtZXJhLmxvb2tBdCgwICogc2NhbGUsIDEgKiBzY2FsZSwgMCAqIHNjYWxlKVxuXG4gIC8vIFNldHVwIGxpZ2h0cy5cbiAgLy8gVE9ETzogSG93IGRvZXMgdGhpcyBhcHBseSBpbiBBUj9cbiAgY29uc3QgaGVtaXNwaGVyZUxpZ2h0ID0gbmV3IFRIUkVFLkhlbWlzcGhlcmVMaWdodCgweGZmZmZmZiwgMHgzMzMzMzMsIDAuNSlcbiAgaGVtaXNwaGVyZUxpZ2h0LnBvc2l0aW9uLnNldCgwICogc2NhbGUsIDUgKiBzY2FsZSwgNSAqIHNjYWxlKVxuICBzY2VuZS5hZGQoaGVtaXNwaGVyZUxpZ2h0KVxuXG4gIC8vIFRPRE86IFRoZXJlIG1pZ2h0IGJlIGEgYmV0dGVyIHdheSBvZiBoYW5kbGluZyBzaGFkb3dzLlxuICAvLyBUT0RPOiBTaG91bGQgd2UgZGlzYWJsZSBzaGFkb3dzL3RoaXMgbGlnaHQgaW4gQVI/XG4gIGNvbnN0IGRpcmVjdGlvbmFsTGlnaHQgPSBuZXcgVEhSRUUuRGlyZWN0aW9uYWxMaWdodCgweGZmZmZmZiwgMC41KVxuICBkaXJlY3Rpb25hbExpZ2h0LnBvc2l0aW9uLnNldCgwICogc2NhbGUsIDUgKiBzY2FsZSwgNSAqIHNjYWxlKVxuICBkaXJlY3Rpb25hbExpZ2h0LmNhc3RTaGFkb3cgPSB0cnVlXG4gIC8vIGRpcmVjdGlvbmFsTGlnaHQuc2hhZG93Lm1hcFNpemUud2lkdGggPSA1MTIgKiAxNlxuICAvLyBkaXJlY3Rpb25hbExpZ2h0LnNoYWRvdy5tYXBTaXplLmhlaWdodCA9IDUxMiAqIDE2XG4gIHNjZW5lLmFkZChkaXJlY3Rpb25hbExpZ2h0KVxuXG4gIC8vIENyZWF0ZSByZW5kZXJlci5cbiAgcmVuZGVyZXIgPSBuZXcgVEhSRUUuV2ViR0xSZW5kZXJlcih7IGFudGlhbGlhczogdHJ1ZSwgYWxwaGE6IHRydWUgfSlcbiAgcmVuZGVyZXIuc2V0UGl4ZWxSYXRpbyh3aW5kb3cuZGV2aWNlUGl4ZWxSYXRpbylcbiAgcmVuZGVyZXIuc2V0U2l6ZShjb250YWluZXIub2Zmc2V0V2lkdGgsIGNvbnRhaW5lci5vZmZzZXRIZWlnaHQpXG4gIHJlbmRlcmVyLnhyLmVuYWJsZWQgPSB0cnVlXG4gIC8vIFRPRE86IEhvdyBkb2VzIHRoaXMgYXBwbHkgaW4gQVI/XG4gIHJlbmRlcmVyLnNoYWRvd01hcC5lbmFibGVkID0gdHJ1ZVxuICBjb250YWluZXIuYXBwZW5kQ2hpbGQocmVuZGVyZXIuZG9tRWxlbWVudClcblxuICAvLyBBZGQgXCJDbGljayBmb3IgQVJcIiBidXR0b24uXG4gIGNvbnRhaW5lci5hcHBlbmRDaGlsZChcbiAgICBBUkJ1dHRvbi5jcmVhdGVCdXR0b24ocmVuZGVyZXIsIHtcbiAgICAgIHJlcXVpcmVkRmVhdHVyZXM6IFsnaGl0LXRlc3QnXSxcbiAgICAgIG9wdGlvbmFsRmVhdHVyZXM6IFsnZG9tLW92ZXJsYXknXSxcbiAgICAgIGRvbU92ZXJsYXk6IHsgcm9vdDogb3ZlcmxheSB9LFxuICAgIH0pLFxuICApXG59XG5cbmluaXQoKVxuXG5jb25zdCBmbG9vciA9IHNoYXBlcy5tYWtlRmxvb3Ioc2NhbGUpXG5zY2VuZS5hZGQoZmxvb3IubWVzaClcbmNvbnN0IHZpcnVzID0gc2hhcGVzLm1ha2VWaXJ1cyhzY2FsZSlcbnNjZW5lLmFkZCh2aXJ1cy5tZXNoKVxuY29uc3QgcmV0aWNsZSA9IHNoYXBlcy5tYWtlUmV0aWNsZSgpXG5cbmxldCBzZXNzaW9uID0gbnVsbFxubGV0IGhpdFRlc3RTb3VyY2VSZXF1ZXN0ZWQgPSBmYWxzZVxubGV0IGhpdFRlc3RTb3VyY2UgPSBudWxsXG5sZXQgcmVuZGVyZWRGaXJzdEFSRnJhbWUgPSBmYWxzZVxuXG54ckV4aXRCdXR0b24uYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCAoKSA9PiB7XG4gIHNlc3Npb24uZW5kKClcbiAgc2NlbmUuYWRkKGZsb29yLm1lc2gpXG4gIHNjZW5lLmFkZCh2aXJ1cy5tZXNoKVxuICB2aXJ1cy5tZXNoLnBvc2l0aW9uLnNldCguLi52aXJ1cy5kZWZhdWx0UG9zaXRpb24pXG4gIHNjZW5lLnJlbW92ZShyZXRpY2xlKVxuICBzZXNzaW9uID0gbnVsbFxuICBoaXRUZXN0U291cmNlUmVxdWVzdGVkID0gZmFsc2VcbiAgaGl0VGVzdFNvdXJjZSA9IG51bGxcbiAgcmVuZGVyZWRGaXJzdEFSRnJhbWUgPSBmYWxzZVxufSlcblxuY29uc3QgcmVuZGVyID0gKHRpbWVzdGFtcCwgZnJhbWUpID0+IHtcbiAgaWYgKGZyYW1lKSB7XG4gICAgaWYgKCFyZW5kZXJlZEZpcnN0QVJGcmFtZSkge1xuICAgICAgLy8gVE9ETzogbWF5YmUgcHV0IHRoaXMgaW4gYSB1dGlsIGZ1bmN0aW9uLlxuICAgICAgc2NlbmUucmVtb3ZlKGZsb29yLm1lc2gpXG4gICAgICBzY2VuZS5yZW1vdmUodmlydXMubWVzaClcbiAgICAgIHNjZW5lLmFkZChyZXRpY2xlKVxuICAgICAgb3ZlcmxheS5jbGFzc0xpc3QucmVtb3ZlKCdoaWRlJylcbiAgICAgIHJlbmRlcmVkRmlyc3RBUkZyYW1lID0gdHJ1ZVxuICAgIH1cblxuICAgIGNvbnN0IHJlZmVyZW5jZVNwYWNlID0gcmVuZGVyZXIueHIuZ2V0UmVmZXJlbmNlU3BhY2UoKVxuICAgIHNlc3Npb24gPSByZW5kZXJlci54ci5nZXRTZXNzaW9uKClcblxuICAgIGlmIChoaXRUZXN0U291cmNlUmVxdWVzdGVkID09PSBmYWxzZSkge1xuICAgICAgc2Vzc2lvbi5yZXF1ZXN0UmVmZXJlbmNlU3BhY2UoJ3ZpZXdlcicpLnRoZW4ocmVmZXJlbmNlU3BhY2UgPT4ge1xuICAgICAgICBzZXNzaW9uLnJlcXVlc3RIaXRUZXN0U291cmNlKHsgc3BhY2U6IHJlZmVyZW5jZVNwYWNlIH0pLnRoZW4oc291cmNlID0+IHtcbiAgICAgICAgICBoaXRUZXN0U291cmNlID0gc291cmNlXG4gICAgICAgIH0pXG4gICAgICB9KVxuXG4gICAgICBzZXNzaW9uLmFkZEV2ZW50TGlzdGVuZXIoJ2VuZCcsICgpID0+IHtcbiAgICAgICAgLy8gVE9ETzogbWF5YmUgcHV0IHRoaXMgaW4gYSB1dGlsIGZ1bmN0aW9uLlxuICAgICAgICAvLyBUT0RPOiBpcyBzb21lIG9mIHRoaXMgYWxzbyBoYXBwZW5pbmcgd2hlbiB3ZSBjbGljayB0aGVcbiAgICAgICAgLy8gICAgICAgJ1NUT1AgQVInIGJ1dHRvbj9cbiAgICAgICAgaGl0VGVzdFNvdXJjZVJlcXVlc3RlZCA9IGZhbHNlXG4gICAgICAgIGhpdFRlc3RTb3VyY2UgPSBudWxsXG4gICAgICAgIG92ZXJsYXkuY2xhc3NMaXN0LmFkZCgnaGlkZScpXG4gICAgICB9KVxuXG4gICAgICBoaXRUZXN0U291cmNlUmVxdWVzdGVkID0gdHJ1ZVxuICAgIH1cblxuICAgIGlmIChoaXRUZXN0U291cmNlKSB7XG4gICAgICBjb25zdCBoaXRUZXN0UmVzdWx0cyA9IGZyYW1lLmdldEhpdFRlc3RSZXN1bHRzKGhpdFRlc3RTb3VyY2UpXG5cbiAgICAgIGlmIChoaXRUZXN0UmVzdWx0cy5sZW5ndGgpIHtcbiAgICAgICAgY29uc3QgaGl0ID0gaGl0VGVzdFJlc3VsdHNbMF1cbiAgICAgICAgcmV0aWNsZS52aXNpYmxlID0gdHJ1ZVxuICAgICAgICByZXRpY2xlLm1hdHJpeC5mcm9tQXJyYXkoaGl0LmdldFBvc2UocmVmZXJlbmNlU3BhY2UpLnRyYW5zZm9ybS5tYXRyaXgpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXRpY2xlLnZpc2libGUgPSBmYWxzZVxuICAgICAgfVxuICAgIH1cbiAgfVxuICBpZiAodmlydXMubWVzaC5wYXJlbnQgPT09IHNjZW5lKSB7XG4gICAgdmlydXMubWVzaC5yb3RhdGlvbi55ID0gdGltZXN0YW1wICogMC4wMDA0XG4gIH1cbiAgcmVuZGVyZXIucmVuZGVyKHNjZW5lLCBjYW1lcmEpXG59XG5cbmNvbnN0IGFuaW1hdGUgPSAoKSA9PiB7XG4gIHJlbmRlcmVyLnNldEFuaW1hdGlvbkxvb3AocmVuZGVyKVxufVxuXG4vLyBBZGQgb2JqZWN0cyB0byBzY2VuZS4gVGhlIHNjZW5lIHNob3VsZCB3b3JrIG9uIGRlc2t0b3AsIGFzIGlzLFxuLy8gYW5kIGFsc28gYXMgYSBwcmV2aWV3IG9mIHdoYXQgeW91IG1pZ2h0IHNlZSBvbiBBUi5cblxuLy8gc2NlbmUuYWRkKHJldGljbGUpXG5cbmFuaW1hdGUoKVxuXG4vLyBjb25zdCBhZGRSaW5nQnVmZmVyVG9TY2VuZSA9ICgpID0+IHtcbi8vICAgY29uc3QgZ2VvbWV0cnkgPSBuZXcgVEhSRUUuUmluZ0J1ZmZlckdlb21ldHJ5KDEsIGZ0VG9NdCg2KSwgMzIpLnJvdGF0ZVgoXG4vLyAgICAgLU1hdGguUEkgLyAyLFxuLy8gICApXG4vLyAgIGNvbnN0IG1hdGVyaWFsID0gbmV3IFRIUkVFLk1lc2hQaG9uZ01hdGVyaWFsKHtcbi8vICAgICBjb2xvcjogMHhmZjAwMDAgKiBNYXRoLnJhbmRvbSgpLFxuLy8gICB9KVxuLy8gICBjb25zdCBtZXNoID0gbmV3IFRIUkVFLk1lc2goZ2VvbWV0cnksIG1hdGVyaWFsKVxuLy8gICBtZXNoLnBvc2l0aW9uLnNldEZyb21NYXRyaXhQb3NpdGlvbihyZXRpY2xlLm1hdHJpeClcbi8vICAgc2NlbmUuYWRkKG1lc2gpXG4vLyB9XG5cbi8vIE9uIHNlbGVjdCwgYWRkIG5ldyBnZW9tZXRyeSB0byBzY2VuZS5cbmNvbnN0IG9uU2VsZWN0ID0gZSA9PiB7XG4gIGlmIChyZXRpY2xlLnZpc2libGUpIHtcbiAgICBpZiAodmlydXMubWVzaC5wYXJlbnQgIT09IHNjZW5lKSB7XG4gICAgICBjb25zb2xlLmxvZygnb25TZWxlY3Q6IHNjZW5lLmFkZCh2aXJ1cyknKVxuICAgICAgc2NlbmUuYWRkKHZpcnVzLm1lc2gpXG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnNvbGUubG9nKCdvblNlbGVjdDogbm90aGluZycpXG4gICAgfVxuICAgIHZpcnVzLm1lc2gucG9zaXRpb24uc2V0RnJvbU1hdHJpeFBvc2l0aW9uKHJldGljbGUubWF0cml4KVxuICB9IGVsc2Uge1xuICAgIGNvbnNvbGUubG9nKCdvblNlbGVjdDogcmV0aWNsZSBub3QgdmlzaWJsZScpXG4gIH1cbn1cblxuLy8gTGlzdGVuIHRvIHRoZSB3ZWJ4ciBjb250cm9sbGVyJ3MgYHNlbGVjdCcgZXZlbnQuXG5jb25zdCBjb250cm9sbGVyID0gcmVuZGVyZXIueHIuZ2V0Q29udHJvbGxlcigwKVxuY29udHJvbGxlci5hZGRFdmVudExpc3RlbmVyKCdzZWxlY3QnLCBvblNlbGVjdClcbnNjZW5lLmFkZChjb250cm9sbGVyKVxuXG5jb25zdCBvbldpbmRvd1Jlc2l6ZSA9ICgpID0+IHtcbiAgY2FtZXJhLmFzcGVjdCA9IGNvbnRhaW5lci5vZmZzZXRXaWR0aCAvIGNvbnRhaW5lci5vZmZzZXRIZWlnaHRcbiAgY2FtZXJhLnVwZGF0ZVByb2plY3Rpb25NYXRyaXgoKVxuICByZW5kZXJlci5zZXRTaXplKGNvbnRhaW5lci5vZmZzZXRXaWR0aCwgY29udGFpbmVyLm9mZnNldEhlaWdodClcbn1cblxuLy8gTGlzdGVuIHRvIHdpbmRvdydzIGByZXNpemVgIGV2ZW50Llxud2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ3Jlc2l6ZScsIG9uV2luZG93UmVzaXplLCBmYWxzZSlcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyBzY3JpcHQuanMiXSwibWFwcGluZ3MiOiI7O0FBU0E7QUFDQTtBQUFBO0FBQ0E7QUFEQTtBQUNBOzs7QUFYQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBTUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBSEE7QUFNQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///2\n")}]); This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode charactersOriginal file line number Diff line number Diff line change @@ -14,6 +14,7 @@ <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.</p> <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.</p> <script src='./three.min.js'></script> <script src='./lodash.min.js'></script> <script src='dist.js'></script> </body> </html> This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode charactersOriginal file line number Diff line number Diff line change @@ -0,0 +1,137 @@ /** * @license * Lodash lodash.com/license | Underscore.js 1.8.3 underscorejs.org/LICENSE */ ;(function(){function n(n,t,r){switch(r.length){case 0:return n.call(t);case 1:return n.call(t,r[0]);case 2:return n.call(t,r[0],r[1]);case 3:return n.call(t,r[0],r[1],r[2])}return n.apply(t,r)}function t(n,t,r,e){for(var u=-1,i=null==n?0:n.length;++u<i;){var o=n[u];t(e,o,r(o),n)}return e}function r(n,t){for(var r=-1,e=null==n?0:n.length;++r<e&&false!==t(n[r],r,n););return n}function e(n,t){for(var r=null==n?0:n.length;r--&&false!==t(n[r],r,n););return n}function u(n,t){for(var r=-1,e=null==n?0:n.length;++r<e;)if(!t(n[r],r,n))return false; return true}function i(n,t){for(var r=-1,e=null==n?0:n.length,u=0,i=[];++r<e;){var o=n[r];t(o,r,n)&&(i[u++]=o)}return i}function o(n,t){return!(null==n||!n.length)&&-1<v(n,t,0)}function f(n,t,r){for(var e=-1,u=null==n?0:n.length;++e<u;)if(r(t,n[e]))return true;return false}function c(n,t){for(var r=-1,e=null==n?0:n.length,u=Array(e);++r<e;)u[r]=t(n[r],r,n);return u}function a(n,t){for(var r=-1,e=t.length,u=n.length;++r<e;)n[u+r]=t[r];return n}function l(n,t,r,e){var u=-1,i=null==n?0:n.length;for(e&&i&&(r=n[++u]);++u<i;)r=t(r,n[u],u,n); return r}function s(n,t,r,e){var u=null==n?0:n.length;for(e&&u&&(r=n[--u]);u--;)r=t(r,n[u],u,n);return r}function h(n,t){for(var r=-1,e=null==n?0:n.length;++r<e;)if(t(n[r],r,n))return true;return false}function p(n,t,r){var e;return r(n,function(n,r,u){if(t(n,r,u))return e=r,false}),e}function _(n,t,r,e){var u=n.length;for(r+=e?1:-1;e?r--:++r<u;)if(t(n[r],r,n))return r;return-1}function v(n,t,r){if(t===t)n:{--r;for(var e=n.length;++r<e;)if(n[r]===t){n=r;break n}n=-1}else n=_(n,d,r);return n}function g(n,t,r,e){ --r;for(var u=n.length;++r<u;)if(e(n[r],t))return r;return-1}function d(n){return n!==n}function y(n,t){var r=null==n?0:n.length;return r?m(n,t)/r:F}function b(n){return function(t){return null==t?T:t[n]}}function x(n){return function(t){return null==n?T:n[t]}}function j(n,t,r,e,u){return u(n,function(n,u,i){r=e?(e=false,n):t(r,n,u,i)}),r}function w(n,t){var r=n.length;for(n.sort(t);r--;)n[r]=n[r].c;return n}function m(n,t){for(var r,e=-1,u=n.length;++e<u;){var i=t(n[e]);i!==T&&(r=r===T?i:r+i)}return r; }function A(n,t){for(var r=-1,e=Array(n);++r<n;)e[r]=t(r);return e}function E(n,t){return c(t,function(t){return[t,n[t]]})}function k(n){return function(t){return n(t)}}function S(n,t){return c(t,function(t){return n[t]})}function O(n,t){return n.has(t)}function I(n,t){for(var r=-1,e=n.length;++r<e&&-1<v(t,n[r],0););return r}function R(n,t){for(var r=n.length;r--&&-1<v(t,n[r],0););return r}function z(n){return"\\"+Un[n]}function W(n){var t=-1,r=Array(n.size);return n.forEach(function(n,e){r[++t]=[e,n]; }),r}function B(n,t){return function(r){return n(t(r))}}function L(n,t){for(var r=-1,e=n.length,u=0,i=[];++r<e;){var o=n[r];o!==t&&"__lodash_placeholder__"!==o||(n[r]="__lodash_placeholder__",i[u++]=r)}return i}function U(n){var t=-1,r=Array(n.size);return n.forEach(function(n){r[++t]=n}),r}function C(n){var t=-1,r=Array(n.size);return n.forEach(function(n){r[++t]=[n,n]}),r}function D(n){if(Rn.test(n)){for(var t=On.lastIndex=0;On.test(n);)++t;n=t}else n=Qn(n);return n}function M(n){return Rn.test(n)?n.match(On)||[]:n.split(""); }var T,$=1/0,F=NaN,N=[["ary",128],["bind",1],["bindKey",2],["curry",8],["curryRight",16],["flip",512],["partial",32],["partialRight",64],["rearg",256]],P=/\b__p\+='';/g,Z=/\b(__p\+=)''\+/g,q=/(__e\(.*?\)|\b__t\))\+'';/g,V=/&(?:amp|lt|gt|quot|#39);/g,K=/[&<>"']/g,G=RegExp(V.source),H=RegExp(K.source),J=/<%-([\s\S]+?)%>/g,Y=/<%([\s\S]+?)%>/g,Q=/<%=([\s\S]+?)%>/g,X=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,nn=/^\w*$/,tn=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g,rn=/[\\^$.*+?()[\]{}|]/g,en=RegExp(rn.source),un=/^\s+|\s+$/g,on=/^\s+/,fn=/\s+$/,cn=/\{(?:\n\/\* \[wrapped with .+\] \*\/)?\n?/,an=/\{\n\/\* \[wrapped with (.+)\] \*/,ln=/,? & /,sn=/[^\x00-\x2f\x3a-\x40\x5b-\x60\x7b-\x7f]+/g,hn=/\\(\\)?/g,pn=/\$\{([^\\}]*(?:\\.[^\\}]*)*)\}/g,_n=/\w*$/,vn=/^[-+]0x[0-9a-f]+$/i,gn=/^0b[01]+$/i,dn=/^\[object .+?Constructor\]$/,yn=/^0o[0-7]+$/i,bn=/^(?:0|[1-9]\d*)$/,xn=/[\xc0-\xd6\xd8-\xf6\xf8-\xff\u0100-\u017f]/g,jn=/($^)/,wn=/['\n\r\u2028\u2029\\]/g,mn="[\\ufe0e\\ufe0f]?(?:[\\u0300-\\u036f\\ufe20-\\ufe2f\\u20d0-\\u20ff]|\\ud83c[\\udffb-\\udfff])?(?:\\u200d(?:[^\\ud800-\\udfff]|(?:\\ud83c[\\udde6-\\uddff]){2}|[\\ud800-\\udbff][\\udc00-\\udfff])[\\ufe0e\\ufe0f]?(?:[\\u0300-\\u036f\\ufe20-\\ufe2f\\u20d0-\\u20ff]|\\ud83c[\\udffb-\\udfff])?)*",An="(?:[\\u2700-\\u27bf]|(?:\\ud83c[\\udde6-\\uddff]){2}|[\\ud800-\\udbff][\\udc00-\\udfff])"+mn,En="(?:[^\\ud800-\\udfff][\\u0300-\\u036f\\ufe20-\\ufe2f\\u20d0-\\u20ff]?|[\\u0300-\\u036f\\ufe20-\\ufe2f\\u20d0-\\u20ff]|(?:\\ud83c[\\udde6-\\uddff]){2}|[\\ud800-\\udbff][\\udc00-\\udfff]|[\\ud800-\\udfff])",kn=RegExp("['\u2019]","g"),Sn=RegExp("[\\u0300-\\u036f\\ufe20-\\ufe2f\\u20d0-\\u20ff]","g"),On=RegExp("\\ud83c[\\udffb-\\udfff](?=\\ud83c[\\udffb-\\udfff])|"+En+mn,"g"),In=RegExp(["[A-Z\\xc0-\\xd6\\xd8-\\xde]?[a-z\\xdf-\\xf6\\xf8-\\xff]+(?:['\u2019](?:d|ll|m|re|s|t|ve))?(?=[\\xac\\xb1\\xd7\\xf7\\x00-\\x2f\\x3a-\\x40\\x5b-\\x60\\x7b-\\xbf\\u2000-\\u206f \\t\\x0b\\f\\xa0\\ufeff\\n\\r\\u2028\\u2029\\u1680\\u180e\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200a\\u202f\\u205f\\u3000]|[A-Z\\xc0-\\xd6\\xd8-\\xde]|$)|(?:[A-Z\\xc0-\\xd6\\xd8-\\xde]|[^\\ud800-\\udfff\\xac\\xb1\\xd7\\xf7\\x00-\\x2f\\x3a-\\x40\\x5b-\\x60\\x7b-\\xbf\\u2000-\\u206f \\t\\x0b\\f\\xa0\\ufeff\\n\\r\\u2028\\u2029\\u1680\\u180e\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200a\\u202f\\u205f\\u3000\\d+\\u2700-\\u27bfa-z\\xdf-\\xf6\\xf8-\\xffA-Z\\xc0-\\xd6\\xd8-\\xde])+(?:['\u2019](?:D|LL|M|RE|S|T|VE))?(?=[\\xac\\xb1\\xd7\\xf7\\x00-\\x2f\\x3a-\\x40\\x5b-\\x60\\x7b-\\xbf\\u2000-\\u206f \\t\\x0b\\f\\xa0\\ufeff\\n\\r\\u2028\\u2029\\u1680\\u180e\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200a\\u202f\\u205f\\u3000]|[A-Z\\xc0-\\xd6\\xd8-\\xde](?:[a-z\\xdf-\\xf6\\xf8-\\xff]|[^\\ud800-\\udfff\\xac\\xb1\\xd7\\xf7\\x00-\\x2f\\x3a-\\x40\\x5b-\\x60\\x7b-\\xbf\\u2000-\\u206f \\t\\x0b\\f\\xa0\\ufeff\\n\\r\\u2028\\u2029\\u1680\\u180e\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200a\\u202f\\u205f\\u3000\\d+\\u2700-\\u27bfa-z\\xdf-\\xf6\\xf8-\\xffA-Z\\xc0-\\xd6\\xd8-\\xde])|$)|[A-Z\\xc0-\\xd6\\xd8-\\xde]?(?:[a-z\\xdf-\\xf6\\xf8-\\xff]|[^\\ud800-\\udfff\\xac\\xb1\\xd7\\xf7\\x00-\\x2f\\x3a-\\x40\\x5b-\\x60\\x7b-\\xbf\\u2000-\\u206f \\t\\x0b\\f\\xa0\\ufeff\\n\\r\\u2028\\u2029\\u1680\\u180e\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200a\\u202f\\u205f\\u3000\\d+\\u2700-\\u27bfa-z\\xdf-\\xf6\\xf8-\\xffA-Z\\xc0-\\xd6\\xd8-\\xde])+(?:['\u2019](?:d|ll|m|re|s|t|ve))?|[A-Z\\xc0-\\xd6\\xd8-\\xde]+(?:['\u2019](?:D|LL|M|RE|S|T|VE))?|\\d*(?:1ST|2ND|3RD|(?![123])\\dTH)(?=\\b|[a-z_])|\\d*(?:1st|2nd|3rd|(?![123])\\dth)(?=\\b|[A-Z_])|\\d+",An].join("|"),"g"),Rn=RegExp("[\\u200d\\ud800-\\udfff\\u0300-\\u036f\\ufe20-\\ufe2f\\u20d0-\\u20ff\\ufe0e\\ufe0f]"),zn=/[a-z][A-Z]|[A-Z]{2}[a-z]|[0-9][a-zA-Z]|[a-zA-Z][0-9]|[^a-zA-Z0-9 ]/,Wn="Array Buffer DataView Date Error Float32Array Float64Array Function Int8Array Int16Array Int32Array Map Math Object Promise RegExp Set String Symbol TypeError Uint8Array Uint8ClampedArray Uint16Array Uint32Array WeakMap _ clearTimeout isFinite parseInt setTimeout".split(" "),Bn={}; Bn["[object Float32Array]"]=Bn["[object Float64Array]"]=Bn["[object Int8Array]"]=Bn["[object Int16Array]"]=Bn["[object Int32Array]"]=Bn["[object Uint8Array]"]=Bn["[object Uint8ClampedArray]"]=Bn["[object Uint16Array]"]=Bn["[object Uint32Array]"]=true,Bn["[object Arguments]"]=Bn["[object Array]"]=Bn["[object ArrayBuffer]"]=Bn["[object Boolean]"]=Bn["[object DataView]"]=Bn["[object Date]"]=Bn["[object Error]"]=Bn["[object Function]"]=Bn["[object Map]"]=Bn["[object Number]"]=Bn["[object Object]"]=Bn["[object RegExp]"]=Bn["[object Set]"]=Bn["[object String]"]=Bn["[object WeakMap]"]=false; var Ln={};Ln["[object Arguments]"]=Ln["[object Array]"]=Ln["[object ArrayBuffer]"]=Ln["[object DataView]"]=Ln["[object Boolean]"]=Ln["[object Date]"]=Ln["[object Float32Array]"]=Ln["[object Float64Array]"]=Ln["[object Int8Array]"]=Ln["[object Int16Array]"]=Ln["[object Int32Array]"]=Ln["[object Map]"]=Ln["[object Number]"]=Ln["[object Object]"]=Ln["[object RegExp]"]=Ln["[object Set]"]=Ln["[object String]"]=Ln["[object Symbol]"]=Ln["[object Uint8Array]"]=Ln["[object Uint8ClampedArray]"]=Ln["[object Uint16Array]"]=Ln["[object Uint32Array]"]=true, Ln["[object Error]"]=Ln["[object Function]"]=Ln["[object WeakMap]"]=false;var Un={"\\":"\\","'":"'","\n":"n","\r":"r","\u2028":"u2028","\u2029":"u2029"},Cn=parseFloat,Dn=parseInt,Mn=typeof global=="object"&&global&&global.Object===Object&&global,Tn=typeof self=="object"&&self&&self.Object===Object&&self,$n=Mn||Tn||Function("return this")(),Fn=typeof exports=="object"&&exports&&!exports.nodeType&&exports,Nn=Fn&&typeof module=="object"&&module&&!module.nodeType&&module,Pn=Nn&&Nn.exports===Fn,Zn=Pn&&Mn.process,qn=function(){ try{var n=Nn&&Nn.f&&Nn.f("util").types;return n?n:Zn&&Zn.binding&&Zn.binding("util")}catch(n){}}(),Vn=qn&&qn.isArrayBuffer,Kn=qn&&qn.isDate,Gn=qn&&qn.isMap,Hn=qn&&qn.isRegExp,Jn=qn&&qn.isSet,Yn=qn&&qn.isTypedArray,Qn=b("length"),Xn=x({"\xc0":"A","\xc1":"A","\xc2":"A","\xc3":"A","\xc4":"A","\xc5":"A","\xe0":"a","\xe1":"a","\xe2":"a","\xe3":"a","\xe4":"a","\xe5":"a","\xc7":"C","\xe7":"c","\xd0":"D","\xf0":"d","\xc8":"E","\xc9":"E","\xca":"E","\xcb":"E","\xe8":"e","\xe9":"e","\xea":"e","\xeb":"e","\xcc":"I", "\xcd":"I","\xce":"I","\xcf":"I","\xec":"i","\xed":"i","\xee":"i","\xef":"i","\xd1":"N","\xf1":"n","\xd2":"O","\xd3":"O","\xd4":"O","\xd5":"O","\xd6":"O","\xd8":"O","\xf2":"o","\xf3":"o","\xf4":"o","\xf5":"o","\xf6":"o","\xf8":"o","\xd9":"U","\xda":"U","\xdb":"U","\xdc":"U","\xf9":"u","\xfa":"u","\xfb":"u","\xfc":"u","\xdd":"Y","\xfd":"y","\xff":"y","\xc6":"Ae","\xe6":"ae","\xde":"Th","\xfe":"th","\xdf":"ss","\u0100":"A","\u0102":"A","\u0104":"A","\u0101":"a","\u0103":"a","\u0105":"a","\u0106":"C", "\u0108":"C","\u010a":"C","\u010c":"C","\u0107":"c","\u0109":"c","\u010b":"c","\u010d":"c","\u010e":"D","\u0110":"D","\u010f":"d","\u0111":"d","\u0112":"E","\u0114":"E","\u0116":"E","\u0118":"E","\u011a":"E","\u0113":"e","\u0115":"e","\u0117":"e","\u0119":"e","\u011b":"e","\u011c":"G","\u011e":"G","\u0120":"G","\u0122":"G","\u011d":"g","\u011f":"g","\u0121":"g","\u0123":"g","\u0124":"H","\u0126":"H","\u0125":"h","\u0127":"h","\u0128":"I","\u012a":"I","\u012c":"I","\u012e":"I","\u0130":"I","\u0129":"i", "\u012b":"i","\u012d":"i","\u012f":"i","\u0131":"i","\u0134":"J","\u0135":"j","\u0136":"K","\u0137":"k","\u0138":"k","\u0139":"L","\u013b":"L","\u013d":"L","\u013f":"L","\u0141":"L","\u013a":"l","\u013c":"l","\u013e":"l","\u0140":"l","\u0142":"l","\u0143":"N","\u0145":"N","\u0147":"N","\u014a":"N","\u0144":"n","\u0146":"n","\u0148":"n","\u014b":"n","\u014c":"O","\u014e":"O","\u0150":"O","\u014d":"o","\u014f":"o","\u0151":"o","\u0154":"R","\u0156":"R","\u0158":"R","\u0155":"r","\u0157":"r","\u0159":"r", "\u015a":"S","\u015c":"S","\u015e":"S","\u0160":"S","\u015b":"s","\u015d":"s","\u015f":"s","\u0161":"s","\u0162":"T","\u0164":"T","\u0166":"T","\u0163":"t","\u0165":"t","\u0167":"t","\u0168":"U","\u016a":"U","\u016c":"U","\u016e":"U","\u0170":"U","\u0172":"U","\u0169":"u","\u016b":"u","\u016d":"u","\u016f":"u","\u0171":"u","\u0173":"u","\u0174":"W","\u0175":"w","\u0176":"Y","\u0177":"y","\u0178":"Y","\u0179":"Z","\u017b":"Z","\u017d":"Z","\u017a":"z","\u017c":"z","\u017e":"z","\u0132":"IJ","\u0133":"ij", "\u0152":"Oe","\u0153":"oe","\u0149":"'n","\u017f":"s"}),nt=x({"&":"&","<":"<",">":">",'"':""","'":"'"}),tt=x({"&":"&","<":"<",">":">",""":'"',"'":"'"}),rt=function x(mn){function An(n){if(yu(n)&&!ff(n)&&!(n instanceof Un)){if(n instanceof On)return n;if(oi.call(n,"__wrapped__"))return Fe(n)}return new On(n)}function En(){}function On(n,t){this.__wrapped__=n,this.__actions__=[],this.__chain__=!!t,this.__index__=0,this.__values__=T}function Un(n){this.__wrapped__=n, this.__actions__=[],this.__dir__=1,this.__filtered__=false,this.__iteratees__=[],this.__takeCount__=4294967295,this.__views__=[]}function Mn(n){var t=-1,r=null==n?0:n.length;for(this.clear();++t<r;){var e=n[t];this.set(e[0],e[1])}}function Tn(n){var t=-1,r=null==n?0:n.length;for(this.clear();++t<r;){var e=n[t];this.set(e[0],e[1])}}function Fn(n){var t=-1,r=null==n?0:n.length;for(this.clear();++t<r;){var e=n[t];this.set(e[0],e[1])}}function Nn(n){var t=-1,r=null==n?0:n.length;for(this.__data__=new Fn;++t<r;)this.add(n[t]); }function Zn(n){this.size=(this.__data__=new Tn(n)).size}function qn(n,t){var r,e=ff(n),u=!e&&of(n),i=!e&&!u&&af(n),o=!e&&!u&&!i&&_f(n),u=(e=e||u||i||o)?A(n.length,ni):[],f=u.length;for(r in n)!t&&!oi.call(n,r)||e&&("length"==r||i&&("offset"==r||"parent"==r)||o&&("buffer"==r||"byteLength"==r||"byteOffset"==r)||Se(r,f))||u.push(r);return u}function Qn(n){var t=n.length;return t?n[ir(0,t-1)]:T}function et(n,t){return De(Ur(n),pt(t,0,n.length))}function ut(n){return De(Ur(n))}function it(n,t,r){(r===T||lu(n[t],r))&&(r!==T||t in n)||st(n,t,r); }function ot(n,t,r){var e=n[t];oi.call(n,t)&&lu(e,r)&&(r!==T||t in n)||st(n,t,r)}function ft(n,t){for(var r=n.length;r--;)if(lu(n[r][0],t))return r;return-1}function ct(n,t,r,e){return uo(n,function(n,u,i){t(e,n,r(n),i)}),e}function at(n,t){return n&&Cr(t,Wu(t),n)}function lt(n,t){return n&&Cr(t,Bu(t),n)}function st(n,t,r){"__proto__"==t&&Ai?Ai(n,t,{configurable:true,enumerable:true,value:r,writable:true}):n[t]=r}function ht(n,t){for(var r=-1,e=t.length,u=Ku(e),i=null==n;++r<e;)u[r]=i?T:Ru(n,t[r]);return u; }function pt(n,t,r){return n===n&&(r!==T&&(n=n<=r?n:r),t!==T&&(n=n>=t?n:t)),n}function _t(n,t,e,u,i,o){var f,c=1&t,a=2&t,l=4&t;if(e&&(f=i?e(n,u,i,o):e(n)),f!==T)return f;if(!du(n))return n;if(u=ff(n)){if(f=me(n),!c)return Ur(n,f)}else{var s=vo(n),h="[object Function]"==s||"[object GeneratorFunction]"==s;if(af(n))return Ir(n,c);if("[object Object]"==s||"[object Arguments]"==s||h&&!i){if(f=a||h?{}:Ae(n),!c)return a?Mr(n,lt(f,n)):Dr(n,at(f,n))}else{if(!Ln[s])return i?n:{};f=Ee(n,s,c)}}if(o||(o=new Zn), i=o.get(n))return i;o.set(n,f),pf(n)?n.forEach(function(r){f.add(_t(r,t,e,r,n,o))}):sf(n)&&n.forEach(function(r,u){f.set(u,_t(r,t,e,u,n,o))});var a=l?a?ve:_e:a?Bu:Wu,p=u?T:a(n);return r(p||n,function(r,u){p&&(u=r,r=n[u]),ot(f,u,_t(r,t,e,u,n,o))}),f}function vt(n){var t=Wu(n);return function(r){return gt(r,n,t)}}function gt(n,t,r){var e=r.length;if(null==n)return!e;for(n=Qu(n);e--;){var u=r[e],i=t[u],o=n[u];if(o===T&&!(u in n)||!i(o))return false}return true}function dt(n,t,r){if(typeof n!="function")throw new ti("Expected a function"); return bo(function(){n.apply(T,r)},t)}function yt(n,t,r,e){var u=-1,i=o,a=true,l=n.length,s=[],h=t.length;if(!l)return s;r&&(t=c(t,k(r))),e?(i=f,a=false):200<=t.length&&(i=O,a=false,t=new Nn(t));n:for(;++u<l;){var p=n[u],_=null==r?p:r(p),p=e||0!==p?p:0;if(a&&_===_){for(var v=h;v--;)if(t[v]===_)continue n;s.push(p)}else i(t,_,e)||s.push(p)}return s}function bt(n,t){var r=true;return uo(n,function(n,e,u){return r=!!t(n,e,u)}),r}function xt(n,t,r){for(var e=-1,u=n.length;++e<u;){var i=n[e],o=t(i);if(null!=o&&(f===T?o===o&&!wu(o):r(o,f)))var f=o,c=i; }return c}function jt(n,t){var r=[];return uo(n,function(n,e,u){t(n,e,u)&&r.push(n)}),r}function wt(n,t,r,e,u){var i=-1,o=n.length;for(r||(r=ke),u||(u=[]);++i<o;){var f=n[i];0<t&&r(f)?1<t?wt(f,t-1,r,e,u):a(u,f):e||(u[u.length]=f)}return u}function mt(n,t){return n&&oo(n,t,Wu)}function At(n,t){return n&&fo(n,t,Wu)}function Et(n,t){return i(t,function(t){return _u(n[t])})}function kt(n,t){t=Sr(t,n);for(var r=0,e=t.length;null!=n&&r<e;)n=n[Me(t[r++])];return r&&r==e?n:T}function St(n,t,r){return t=t(n), ff(n)?t:a(t,r(n))}function Ot(n){if(null==n)n=n===T?"[object Undefined]":"[object Null]";else if(mi&&mi in Qu(n)){var t=oi.call(n,mi),r=n[mi];try{n[mi]=T;var e=true}catch(n){}var u=ai.call(n);e&&(t?n[mi]=r:delete n[mi]),n=u}else n=ai.call(n);return n}function It(n,t){return n>t}function Rt(n,t){return null!=n&&oi.call(n,t)}function zt(n,t){return null!=n&&t in Qu(n)}function Wt(n,t,r){for(var e=r?f:o,u=n[0].length,i=n.length,a=i,l=Ku(i),s=1/0,h=[];a--;){var p=n[a];a&&t&&(p=c(p,k(t))),s=Ci(p.length,s), l[a]=!r&&(t||120<=u&&120<=p.length)?new Nn(a&&p):T}var p=n[0],_=-1,v=l[0];n:for(;++_<u&&h.length<s;){var g=p[_],d=t?t(g):g,g=r||0!==g?g:0;if(v?!O(v,d):!e(h,d,r)){for(a=i;--a;){var y=l[a];if(y?!O(y,d):!e(n[a],d,r))continue n}v&&v.push(d),h.push(g)}}return h}function Bt(n,t,r){var e={};return mt(n,function(n,u,i){t(e,r(n),u,i)}),e}function Lt(t,r,e){return r=Sr(r,t),t=2>r.length?t:kt(t,hr(r,0,-1)),r=null==t?t:t[Me(Ve(r))],null==r?T:n(r,t,e)}function Ut(n){return yu(n)&&"[object Arguments]"==Ot(n)}function Ct(n){ return yu(n)&&"[object ArrayBuffer]"==Ot(n)}function Dt(n){return yu(n)&&"[object Date]"==Ot(n)}function Mt(n,t,r,e,u){if(n===t)t=true;else if(null==n||null==t||!yu(n)&&!yu(t))t=n!==n&&t!==t;else n:{var i=ff(n),o=ff(t),f=i?"[object Array]":vo(n),c=o?"[object Array]":vo(t),f="[object Arguments]"==f?"[object Object]":f,c="[object Arguments]"==c?"[object Object]":c,a="[object Object]"==f,o="[object Object]"==c;if((c=f==c)&&af(n)){if(!af(t)){t=false;break n}i=true,a=false}if(c&&!a)u||(u=new Zn),t=i||_f(n)?se(n,t,r,e,Mt,u):he(n,t,f,r,e,Mt,u);else{ if(!(1&r)&&(i=a&&oi.call(n,"__wrapped__"),f=o&&oi.call(t,"__wrapped__"),i||f)){n=i?n.value():n,t=f?t.value():t,u||(u=new Zn),t=Mt(n,t,r,e,u);break n}if(c)t:if(u||(u=new Zn),i=1&r,f=_e(n),o=f.length,c=_e(t).length,o==c||i){for(a=o;a--;){var l=f[a];if(!(i?l in t:oi.call(t,l))){t=false;break t}}if((c=u.get(n))&&u.get(t))t=c==t;else{c=true,u.set(n,t),u.set(t,n);for(var s=i;++a<o;){var l=f[a],h=n[l],p=t[l];if(e)var _=i?e(p,h,l,t,n,u):e(h,p,l,n,t,u);if(_===T?h!==p&&!Mt(h,p,r,e,u):!_){c=false;break}s||(s="constructor"==l); }c&&!s&&(r=n.constructor,e=t.constructor,r!=e&&"constructor"in n&&"constructor"in t&&!(typeof r=="function"&&r instanceof r&&typeof e=="function"&&e instanceof e)&&(c=false)),u.delete(n),u.delete(t),t=c}}else t=false;else t=false}}return t}function Tt(n){return yu(n)&&"[object Map]"==vo(n)}function $t(n,t,r,e){var u=r.length,i=u,o=!e;if(null==n)return!i;for(n=Qu(n);u--;){var f=r[u];if(o&&f[2]?f[1]!==n[f[0]]:!(f[0]in n))return false}for(;++u<i;){var f=r[u],c=f[0],a=n[c],l=f[1];if(o&&f[2]){if(a===T&&!(c in n))return false; }else{if(f=new Zn,e)var s=e(a,l,c,n,t,f);if(s===T?!Mt(l,a,3,e,f):!s)return false}}return true}function Ft(n){return!(!du(n)||ci&&ci in n)&&(_u(n)?hi:dn).test(Te(n))}function Nt(n){return yu(n)&&"[object RegExp]"==Ot(n)}function Pt(n){return yu(n)&&"[object Set]"==vo(n)}function Zt(n){return yu(n)&&gu(n.length)&&!!Bn[Ot(n)]}function qt(n){return typeof n=="function"?n:null==n?$u:typeof n=="object"?ff(n)?Jt(n[0],n[1]):Ht(n):Zu(n)}function Vt(n){if(!ze(n))return Li(n);var t,r=[];for(t in Qu(n))oi.call(n,t)&&"constructor"!=t&&r.push(t); return r}function Kt(n,t){return n<t}function Gt(n,t){var r=-1,e=su(n)?Ku(n.length):[];return uo(n,function(n,u,i){e[++r]=t(n,u,i)}),e}function Ht(n){var t=xe(n);return 1==t.length&&t[0][2]?We(t[0][0],t[0][1]):function(r){return r===n||$t(r,n,t)}}function Jt(n,t){return Ie(n)&&t===t&&!du(t)?We(Me(n),t):function(r){var e=Ru(r,n);return e===T&&e===t?zu(r,n):Mt(t,e,3)}}function Yt(n,t,r,e,u){n!==t&&oo(t,function(i,o){if(u||(u=new Zn),du(i)){var f=u,c=Le(n,o),a=Le(t,o),l=f.get(a);if(l)it(n,o,l);else{ var l=e?e(c,a,o+"",n,t,f):T,s=l===T;if(s){var h=ff(a),p=!h&&af(a),_=!h&&!p&&_f(a),l=a;h||p||_?ff(c)?l=c:hu(c)?l=Ur(c):p?(s=false,l=Ir(a,true)):_?(s=false,l=zr(a,true)):l=[]:xu(a)||of(a)?(l=c,of(c)?l=Ou(c):du(c)&&!_u(c)||(l=Ae(a))):s=false}s&&(f.set(a,l),Yt(l,a,r,e,f),f.delete(a)),it(n,o,l)}}else f=e?e(Le(n,o),i,o+"",n,t,u):T,f===T&&(f=i),it(n,o,f)},Bu)}function Qt(n,t){var r=n.length;if(r)return t+=0>t?r:0,Se(t,r)?n[t]:T}function Xt(n,t,r){var e=-1;return t=c(t.length?t:[$u],k(ye())),n=Gt(n,function(n){return{ a:c(t,function(t){return t(n)}),b:++e,c:n}}),w(n,function(n,t){var e;n:{e=-1;for(var u=n.a,i=t.a,o=u.length,f=r.length;++e<o;){var c=Wr(u[e],i[e]);if(c){e=e>=f?c:c*("desc"==r[e]?-1:1);break n}}e=n.b-t.b}return e})}function nr(n,t){return tr(n,t,function(t,r){return zu(n,r)})}function tr(n,t,r){for(var e=-1,u=t.length,i={};++e<u;){var o=t[e],f=kt(n,o);r(f,o)&&lr(i,Sr(o,n),f)}return i}function rr(n){return function(t){return kt(t,n)}}function er(n,t,r,e){var u=e?g:v,i=-1,o=t.length,f=n;for(n===t&&(t=Ur(t)), r&&(f=c(n,k(r)));++i<o;)for(var a=0,l=t[i],l=r?r(l):l;-1<(a=u(f,l,a,e));)f!==n&&xi.call(f,a,1),xi.call(n,a,1);return n}function ur(n,t){for(var r=n?t.length:0,e=r-1;r--;){var u=t[r];if(r==e||u!==i){var i=u;Se(u)?xi.call(n,u,1):xr(n,u)}}}function ir(n,t){return n+Ii(Ti()*(t-n+1))}function or(n,t){var r="";if(!n||1>t||9007199254740991<t)return r;do t%2&&(r+=n),(t=Ii(t/2))&&(n+=n);while(t);return r}function fr(n,t){return xo(Be(n,t,$u),n+"")}function cr(n){return Qn(Uu(n))}function ar(n,t){var r=Uu(n); return De(r,pt(t,0,r.length))}function lr(n,t,r,e){if(!du(n))return n;t=Sr(t,n);for(var u=-1,i=t.length,o=i-1,f=n;null!=f&&++u<i;){var c=Me(t[u]),a=r;if(u!=o){var l=f[c],a=e?e(l,c,f):T;a===T&&(a=du(l)?l:Se(t[u+1])?[]:{})}ot(f,c,a),f=f[c]}return n}function sr(n){return De(Uu(n))}function hr(n,t,r){var e=-1,u=n.length;for(0>t&&(t=-t>u?0:u+t),r=r>u?u:r,0>r&&(r+=u),u=t>r?0:r-t>>>0,t>>>=0,r=Ku(u);++e<u;)r[e]=n[e+t];return r}function pr(n,t){var r;return uo(n,function(n,e,u){return r=t(n,e,u),!r}),!!r} function _r(n,t,r){var e=0,u=null==n?e:n.length;if(typeof t=="number"&&t===t&&2147483647>=u){for(;e<u;){var i=e+u>>>1,o=n[i];null!==o&&!wu(o)&&(r?o<=t:o<t)?e=i+1:u=i}return u}return vr(n,t,$u,r)}function vr(n,t,r,e){t=r(t);for(var u=0,i=null==n?0:n.length,o=t!==t,f=null===t,c=wu(t),a=t===T;u<i;){var l=Ii((u+i)/2),s=r(n[l]),h=s!==T,p=null===s,_=s===s,v=wu(s);(o?e||_:a?_&&(e||h):f?_&&h&&(e||!p):c?_&&h&&!p&&(e||!v):p||v?0:e?s<=t:s<t)?u=l+1:i=l}return Ci(i,4294967294)}function gr(n,t){for(var r=-1,e=n.length,u=0,i=[];++r<e;){ var o=n[r],f=t?t(o):o;if(!r||!lu(f,c)){var c=f;i[u++]=0===o?0:o}}return i}function dr(n){return typeof n=="number"?n:wu(n)?F:+n}function yr(n){if(typeof n=="string")return n;if(ff(n))return c(n,yr)+"";if(wu(n))return ro?ro.call(n):"";var t=n+"";return"0"==t&&1/n==-$?"-0":t}function br(n,t,r){var e=-1,u=o,i=n.length,c=true,a=[],l=a;if(r)c=false,u=f;else if(200<=i){if(u=t?null:so(n))return U(u);c=false,u=O,l=new Nn}else l=t?[]:a;n:for(;++e<i;){var s=n[e],h=t?t(s):s,s=r||0!==s?s:0;if(c&&h===h){for(var p=l.length;p--;)if(l[p]===h)continue n; t&&l.push(h),a.push(s)}else u(l,h,r)||(l!==a&&l.push(h),a.push(s))}return a}function xr(n,t){return t=Sr(t,n),n=2>t.length?n:kt(n,hr(t,0,-1)),null==n||delete n[Me(Ve(t))]}function jr(n,t,r,e){for(var u=n.length,i=e?u:-1;(e?i--:++i<u)&&t(n[i],i,n););return r?hr(n,e?0:i,e?i+1:u):hr(n,e?i+1:0,e?u:i)}function wr(n,t){var r=n;return r instanceof Un&&(r=r.value()),l(t,function(n,t){return t.func.apply(t.thisArg,a([n],t.args))},r)}function mr(n,t,r){var e=n.length;if(2>e)return e?br(n[0]):[];for(var u=-1,i=Ku(e);++u<e;)for(var o=n[u],f=-1;++f<e;)f!=u&&(i[u]=yt(i[u]||o,n[f],t,r)); return br(wt(i,1),t,r)}function Ar(n,t,r){for(var e=-1,u=n.length,i=t.length,o={};++e<u;)r(o,n[e],e<i?t[e]:T);return o}function Er(n){return hu(n)?n:[]}function kr(n){return typeof n=="function"?n:$u}function Sr(n,t){return ff(n)?n:Ie(n,t)?[n]:jo(Iu(n))}function Or(n,t,r){var e=n.length;return r=r===T?e:r,!t&&r>=e?n:hr(n,t,r)}function Ir(n,t){if(t)return n.slice();var r=n.length,r=gi?gi(r):new n.constructor(r);return n.copy(r),r}function Rr(n){var t=new n.constructor(n.byteLength);return new vi(t).set(new vi(n)), t}function zr(n,t){return new n.constructor(t?Rr(n.buffer):n.buffer,n.byteOffset,n.length)}function Wr(n,t){if(n!==t){var r=n!==T,e=null===n,u=n===n,i=wu(n),o=t!==T,f=null===t,c=t===t,a=wu(t);if(!f&&!a&&!i&&n>t||i&&o&&c&&!f&&!a||e&&o&&c||!r&&c||!u)return 1;if(!e&&!i&&!a&&n<t||a&&r&&u&&!e&&!i||f&&r&&u||!o&&u||!c)return-1}return 0}function Br(n,t,r,e){var u=-1,i=n.length,o=r.length,f=-1,c=t.length,a=Ui(i-o,0),l=Ku(c+a);for(e=!e;++f<c;)l[f]=t[f];for(;++u<o;)(e||u<i)&&(l[r[u]]=n[u]);for(;a--;)l[f++]=n[u++]; return l}function Lr(n,t,r,e){var u=-1,i=n.length,o=-1,f=r.length,c=-1,a=t.length,l=Ui(i-f,0),s=Ku(l+a);for(e=!e;++u<l;)s[u]=n[u];for(l=u;++c<a;)s[l+c]=t[c];for(;++o<f;)(e||u<i)&&(s[l+r[o]]=n[u++]);return s}function Ur(n,t){var r=-1,e=n.length;for(t||(t=Ku(e));++r<e;)t[r]=n[r];return t}function Cr(n,t,r,e){var u=!r;r||(r={});for(var i=-1,o=t.length;++i<o;){var f=t[i],c=e?e(r[f],n[f],f,r,n):T;c===T&&(c=n[f]),u?st(r,f,c):ot(r,f,c)}return r}function Dr(n,t){return Cr(n,po(n),t)}function Mr(n,t){return Cr(n,_o(n),t); }function Tr(n,r){return function(e,u){var i=ff(e)?t:ct,o=r?r():{};return i(e,n,ye(u,2),o)}}function $r(n){return fr(function(t,r){var e=-1,u=r.length,i=1<u?r[u-1]:T,o=2<u?r[2]:T,i=3<n.length&&typeof i=="function"?(u--,i):T;for(o&&Oe(r[0],r[1],o)&&(i=3>u?T:i,u=1),t=Qu(t);++e<u;)(o=r[e])&&n(t,o,e,i);return t})}function Fr(n,t){return function(r,e){if(null==r)return r;if(!su(r))return n(r,e);for(var u=r.length,i=t?u:-1,o=Qu(r);(t?i--:++i<u)&&false!==e(o[i],i,o););return r}}function Nr(n){return function(t,r,e){ var u=-1,i=Qu(t);e=e(t);for(var o=e.length;o--;){var f=e[n?o:++u];if(false===r(i[f],f,i))break}return t}}function Pr(n,t,r){function e(){return(this&&this!==$n&&this instanceof e?i:n).apply(u?r:this,arguments)}var u=1&t,i=Vr(n);return e}function Zr(n){return function(t){t=Iu(t);var r=Rn.test(t)?M(t):T,e=r?r[0]:t.charAt(0);return t=r?Or(r,1).join(""):t.slice(1),e[n]()+t}}function qr(n){return function(t){return l(Mu(Du(t).replace(kn,"")),n,"")}}function Vr(n){return function(){var t=arguments;switch(t.length){ case 0:return new n;case 1:return new n(t[0]);case 2:return new n(t[0],t[1]);case 3:return new n(t[0],t[1],t[2]);case 4:return new n(t[0],t[1],t[2],t[3]);case 5:return new n(t[0],t[1],t[2],t[3],t[4]);case 6:return new n(t[0],t[1],t[2],t[3],t[4],t[5]);case 7:return new n(t[0],t[1],t[2],t[3],t[4],t[5],t[6])}var r=eo(n.prototype),t=n.apply(r,t);return du(t)?t:r}}function Kr(t,r,e){function u(){for(var o=arguments.length,f=Ku(o),c=o,a=de(u);c--;)f[c]=arguments[c];return c=3>o&&f[0]!==a&&f[o-1]!==a?[]:L(f,a), o-=c.length,o<e?ue(t,r,Jr,u.placeholder,T,f,c,T,T,e-o):n(this&&this!==$n&&this instanceof u?i:t,this,f)}var i=Vr(t);return u}function Gr(n){return function(t,r,e){var u=Qu(t);if(!su(t)){var i=ye(r,3);t=Wu(t),r=function(n){return i(u[n],n,u)}}return r=n(t,r,e),-1<r?u[i?t[r]:r]:T}}function Hr(n){return pe(function(t){var r=t.length,e=r,u=On.prototype.thru;for(n&&t.reverse();e--;){var i=t[e];if(typeof i!="function")throw new ti("Expected a function");if(u&&!o&&"wrapper"==ge(i))var o=new On([],true)}for(e=o?e:r;++e<r;)var i=t[e],u=ge(i),f="wrapper"==u?ho(i):T,o=f&&Re(f[0])&&424==f[1]&&!f[4].length&&1==f[9]?o[ge(f[0])].apply(o,f[3]):1==i.length&&Re(i)?o[u]():o.thru(i); return function(){var n=arguments,e=n[0];if(o&&1==n.length&&ff(e))return o.plant(e).value();for(var u=0,n=r?t[u].apply(this,n):e;++u<r;)n=t[u].call(this,n);return n}})}function Jr(n,t,r,e,u,i,o,f,c,a){function l(){for(var d=arguments.length,y=Ku(d),b=d;b--;)y[b]=arguments[b];if(_){var x,j=de(l),b=y.length;for(x=0;b--;)y[b]===j&&++x}if(e&&(y=Br(y,e,u,_)),i&&(y=Lr(y,i,o,_)),d-=x,_&&d<a)return j=L(y,j),ue(n,t,Jr,l.placeholder,r,y,j,f,c,a-d);if(j=h?r:this,b=p?j[n]:n,d=y.length,f){x=y.length;for(var w=Ci(f.length,x),m=Ur(y);w--;){ var A=f[w];y[w]=Se(A,x)?m[A]:T}}else v&&1<d&&y.reverse();return s&&c<d&&(y.length=c),this&&this!==$n&&this instanceof l&&(b=g||Vr(b)),b.apply(j,y)}var s=128&t,h=1&t,p=2&t,_=24&t,v=512&t,g=p?T:Vr(n);return l}function Yr(n,t){return function(r,e){return Bt(r,n,t(e))}}function Qr(n,t){return function(r,e){var u;if(r===T&&e===T)return t;if(r!==T&&(u=r),e!==T){if(u===T)return e;typeof r=="string"||typeof e=="string"?(r=yr(r),e=yr(e)):(r=dr(r),e=dr(e)),u=n(r,e)}return u}}function Xr(t){return pe(function(r){ return r=c(r,k(ye())),fr(function(e){var u=this;return t(r,function(t){return n(t,u,e)})})})}function ne(n,t){t=t===T?" ":yr(t);var r=t.length;return 2>r?r?or(t,n):t:(r=or(t,Oi(n/D(t))),Rn.test(t)?Or(M(r),0,n).join(""):r.slice(0,n))}function te(t,r,e,u){function i(){for(var r=-1,c=arguments.length,a=-1,l=u.length,s=Ku(l+c),h=this&&this!==$n&&this instanceof i?f:t;++a<l;)s[a]=u[a];for(;c--;)s[a++]=arguments[++r];return n(h,o?e:this,s)}var o=1&r,f=Vr(t);return i}function re(n){return function(t,r,e){ e&&typeof e!="number"&&Oe(t,r,e)&&(r=e=T),t=Au(t),r===T?(r=t,t=0):r=Au(r),e=e===T?t<r?1:-1:Au(e);var u=-1;r=Ui(Oi((r-t)/(e||1)),0);for(var i=Ku(r);r--;)i[n?r:++u]=t,t+=e;return i}}function ee(n){return function(t,r){return typeof t=="string"&&typeof r=="string"||(t=Su(t),r=Su(r)),n(t,r)}}function ue(n,t,r,e,u,i,o,f,c,a){var l=8&t,s=l?o:T;o=l?T:o;var h=l?i:T;return i=l?T:i,t=(t|(l?32:64))&~(l?64:32),4&t||(t&=-4),u=[n,t,u,h,s,i,o,f,c,a],r=r.apply(T,u),Re(n)&&yo(r,u),r.placeholder=e,Ue(r,n,t)}function ie(n){ var t=Yu[n];return function(n,r){if(n=Su(n),(r=null==r?0:Ci(Eu(r),292))&&Wi(n)){var e=(Iu(n)+"e").split("e"),e=t(e[0]+"e"+(+e[1]+r)),e=(Iu(e)+"e").split("e");return+(e[0]+"e"+(+e[1]-r))}return t(n)}}function oe(n){return function(t){var r=vo(t);return"[object Map]"==r?W(t):"[object Set]"==r?C(t):E(t,n(t))}}function fe(n,t,r,e,u,i,o,f){var c=2&t;if(!c&&typeof n!="function")throw new ti("Expected a function");var a=e?e.length:0;if(a||(t&=-97,e=u=T),o=o===T?o:Ui(Eu(o),0),f=f===T?f:Eu(f),a-=u?u.length:0, 64&t){var l=e,s=u;e=u=T}var h=c?T:ho(n);return i=[n,t,r,e,u,l,s,i,o,f],h&&(r=i[1],n=h[1],t=r|n,e=128==n&&8==r||128==n&&256==r&&i[7].length<=h[8]||384==n&&h[7].length<=h[8]&&8==r,131>t||e)&&(1&n&&(i[2]=h[2],t|=1&r?0:4),(r=h[3])&&(e=i[3],i[3]=e?Br(e,r,h[4]):r,i[4]=e?L(i[3],"__lodash_placeholder__"):h[4]),(r=h[5])&&(e=i[5],i[5]=e?Lr(e,r,h[6]):r,i[6]=e?L(i[5],"__lodash_placeholder__"):h[6]),(r=h[7])&&(i[7]=r),128&n&&(i[8]=null==i[8]?h[8]:Ci(i[8],h[8])),null==i[9]&&(i[9]=h[9]),i[0]=h[0],i[1]=t),n=i[0], t=i[1],r=i[2],e=i[3],u=i[4],f=i[9]=i[9]===T?c?0:n.length:Ui(i[9]-a,0),!f&&24&t&&(t&=-25),Ue((h?co:yo)(t&&1!=t?8==t||16==t?Kr(n,t,f):32!=t&&33!=t||u.length?Jr.apply(T,i):te(n,t,r,e):Pr(n,t,r),i),n,t)}function ce(n,t,r,e){return n===T||lu(n,ei[r])&&!oi.call(e,r)?t:n}function ae(n,t,r,e,u,i){return du(n)&&du(t)&&(i.set(t,n),Yt(n,t,T,ae,i),i.delete(t)),n}function le(n){return xu(n)?T:n}function se(n,t,r,e,u,i){var o=1&r,f=n.length,c=t.length;if(f!=c&&!(o&&c>f))return false;if((c=i.get(n))&&i.get(t))return c==t; var c=-1,a=true,l=2&r?new Nn:T;for(i.set(n,t),i.set(t,n);++c<f;){var s=n[c],p=t[c];if(e)var _=o?e(p,s,c,t,n,i):e(s,p,c,n,t,i);if(_!==T){if(_)continue;a=false;break}if(l){if(!h(t,function(n,t){if(!O(l,t)&&(s===n||u(s,n,r,e,i)))return l.push(t)})){a=false;break}}else if(s!==p&&!u(s,p,r,e,i)){a=false;break}}return i.delete(n),i.delete(t),a}function he(n,t,r,e,u,i,o){switch(r){case"[object DataView]":if(n.byteLength!=t.byteLength||n.byteOffset!=t.byteOffset)break;n=n.buffer,t=t.buffer;case"[object ArrayBuffer]": if(n.byteLength!=t.byteLength||!i(new vi(n),new vi(t)))break;return true;case"[object Boolean]":case"[object Date]":case"[object Number]":return lu(+n,+t);case"[object Error]":return n.name==t.name&&n.message==t.message;case"[object RegExp]":case"[object String]":return n==t+"";case"[object Map]":var f=W;case"[object Set]":if(f||(f=U),n.size!=t.size&&!(1&e))break;return(r=o.get(n))?r==t:(e|=2,o.set(n,t),t=se(f(n),f(t),e,u,i,o),o.delete(n),t);case"[object Symbol]":if(to)return to.call(n)==to.call(t)} return false}function pe(n){return xo(Be(n,T,Ze),n+"")}function _e(n){return St(n,Wu,po)}function ve(n){return St(n,Bu,_o)}function ge(n){for(var t=n.name+"",r=Gi[t],e=oi.call(Gi,t)?r.length:0;e--;){var u=r[e],i=u.func;if(null==i||i==n)return u.name}return t}function de(n){return(oi.call(An,"placeholder")?An:n).placeholder}function ye(){var n=An.iteratee||Fu,n=n===Fu?qt:n;return arguments.length?n(arguments[0],arguments[1]):n}function be(n,t){var r=n.__data__,e=typeof t;return("string"==e||"number"==e||"symbol"==e||"boolean"==e?"__proto__"!==t:null===t)?r[typeof t=="string"?"string":"hash"]:r.map; }function xe(n){for(var t=Wu(n),r=t.length;r--;){var e=t[r],u=n[e];t[r]=[e,u,u===u&&!du(u)]}return t}function je(n,t){var r=null==n?T:n[t];return Ft(r)?r:T}function we(n,t,r){t=Sr(t,n);for(var e=-1,u=t.length,i=false;++e<u;){var o=Me(t[e]);if(!(i=null!=n&&r(n,o)))break;n=n[o]}return i||++e!=u?i:(u=null==n?0:n.length,!!u&&gu(u)&&Se(o,u)&&(ff(n)||of(n)))}function me(n){var t=n.length,r=new n.constructor(t);return t&&"string"==typeof n[0]&&oi.call(n,"index")&&(r.index=n.index,r.input=n.input),r}function Ae(n){ return typeof n.constructor!="function"||ze(n)?{}:eo(di(n))}function Ee(n,t,r){var e=n.constructor;switch(t){case"[object ArrayBuffer]":return Rr(n);case"[object Boolean]":case"[object Date]":return new e(+n);case"[object DataView]":return t=r?Rr(n.buffer):n.buffer,new n.constructor(t,n.byteOffset,n.byteLength);case"[object Float32Array]":case"[object Float64Array]":case"[object Int8Array]":case"[object Int16Array]":case"[object Int32Array]":case"[object Uint8Array]":case"[object Uint8ClampedArray]": case"[object Uint16Array]":case"[object Uint32Array]":return zr(n,r);case"[object Map]":return new e;case"[object Number]":case"[object String]":return new e(n);case"[object RegExp]":return t=new n.constructor(n.source,_n.exec(n)),t.lastIndex=n.lastIndex,t;case"[object Set]":return new e;case"[object Symbol]":return to?Qu(to.call(n)):{}}}function ke(n){return ff(n)||of(n)||!!(ji&&n&&n[ji])}function Se(n,t){var r=typeof n;return t=null==t?9007199254740991:t,!!t&&("number"==r||"symbol"!=r&&bn.test(n))&&-1<n&&0==n%1&&n<t; }function Oe(n,t,r){if(!du(r))return false;var e=typeof t;return!!("number"==e?su(r)&&Se(t,r.length):"string"==e&&t in r)&&lu(r[t],n)}function Ie(n,t){if(ff(n))return false;var r=typeof n;return!("number"!=r&&"symbol"!=r&&"boolean"!=r&&null!=n&&!wu(n))||(nn.test(n)||!X.test(n)||null!=t&&n in Qu(t))}function Re(n){var t=ge(n),r=An[t];return typeof r=="function"&&t in Un.prototype&&(n===r||(t=ho(r),!!t&&n===t[0]))}function ze(n){var t=n&&n.constructor;return n===(typeof t=="function"&&t.prototype||ei)}function We(n,t){ return function(r){return null!=r&&(r[n]===t&&(t!==T||n in Qu(r)))}}function Be(t,r,e){return r=Ui(r===T?t.length-1:r,0),function(){for(var u=arguments,i=-1,o=Ui(u.length-r,0),f=Ku(o);++i<o;)f[i]=u[r+i];for(i=-1,o=Ku(r+1);++i<r;)o[i]=u[i];return o[r]=e(f),n(t,this,o)}}function Le(n,t){if(("constructor"!==t||"function"!=typeof n[t])&&"__proto__"!=t)return n[t]}function Ue(n,t,r){var e=t+"";t=xo;var u,i=$e;return u=(u=e.match(an))?u[1].split(ln):[],r=i(u,r),(i=r.length)&&(u=i-1,r[u]=(1<i?"& ":"")+r[u], r=r.join(2<i?", ":" "),e=e.replace(cn,"{\n/* [wrapped with "+r+"] */\n")),t(n,e)}function Ce(n){var t=0,r=0;return function(){var e=Di(),u=16-(e-r);if(r=e,0<u){if(800<=++t)return arguments[0]}else t=0;return n.apply(T,arguments)}}function De(n,t){var r=-1,e=n.length,u=e-1;for(t=t===T?e:t;++r<t;){var e=ir(r,u),i=n[e];n[e]=n[r],n[r]=i}return n.length=t,n}function Me(n){if(typeof n=="string"||wu(n))return n;var t=n+"";return"0"==t&&1/n==-$?"-0":t}function Te(n){if(null!=n){try{return ii.call(n)}catch(n){} return n+""}return""}function $e(n,t){return r(N,function(r){var e="_."+r[0];t&r[1]&&!o(n,e)&&n.push(e)}),n.sort()}function Fe(n){if(n instanceof Un)return n.clone();var t=new On(n.__wrapped__,n.__chain__);return t.__actions__=Ur(n.__actions__),t.__index__=n.__index__,t.__values__=n.__values__,t}function Ne(n,t,r){var e=null==n?0:n.length;return e?(r=null==r?0:Eu(r),0>r&&(r=Ui(e+r,0)),_(n,ye(t,3),r)):-1}function Pe(n,t,r){var e=null==n?0:n.length;if(!e)return-1;var u=e-1;return r!==T&&(u=Eu(r),u=0>r?Ui(e+u,0):Ci(u,e-1)), _(n,ye(t,3),u,true)}function Ze(n){return(null==n?0:n.length)?wt(n,1):[]}function qe(n){return n&&n.length?n[0]:T}function Ve(n){var t=null==n?0:n.length;return t?n[t-1]:T}function Ke(n,t){return n&&n.length&&t&&t.length?er(n,t):n}function Ge(n){return null==n?n:$i.call(n)}function He(n){if(!n||!n.length)return[];var t=0;return n=i(n,function(n){if(hu(n))return t=Ui(n.length,t),true}),A(t,function(t){return c(n,b(t))})}function Je(t,r){if(!t||!t.length)return[];var e=He(t);return null==r?e:c(e,function(t){ return n(r,T,t)})}function Ye(n){return n=An(n),n.__chain__=true,n}function Qe(n,t){return t(n)}function Xe(){return this}function nu(n,t){return(ff(n)?r:uo)(n,ye(t,3))}function tu(n,t){return(ff(n)?e:io)(n,ye(t,3))}function ru(n,t){return(ff(n)?c:Gt)(n,ye(t,3))}function eu(n,t,r){return t=r?T:t,t=n&&null==t?n.length:t,fe(n,128,T,T,T,T,t)}function uu(n,t){var r;if(typeof t!="function")throw new ti("Expected a function");return n=Eu(n),function(){return 0<--n&&(r=t.apply(this,arguments)),1>=n&&(t=T), r}}function iu(n,t,r){return t=r?T:t,n=fe(n,8,T,T,T,T,T,t),n.placeholder=iu.placeholder,n}function ou(n,t,r){return t=r?T:t,n=fe(n,16,T,T,T,T,T,t),n.placeholder=ou.placeholder,n}function fu(n,t,r){function e(t){var r=c,e=a;return c=a=T,_=t,s=n.apply(e,r)}function u(n){var r=n-p;return n-=_,p===T||r>=t||0>r||g&&n>=l}function i(){var n=Go();if(u(n))return o(n);var r,e=bo;r=n-_,n=t-(n-p),r=g?Ci(n,l-r):n,h=e(i,r)}function o(n){return h=T,d&&c?e(n):(c=a=T,s)}function f(){var n=Go(),r=u(n);if(c=arguments, a=this,p=n,r){if(h===T)return _=n=p,h=bo(i,t),v?e(n):s;if(g)return lo(h),h=bo(i,t),e(p)}return h===T&&(h=bo(i,t)),s}var c,a,l,s,h,p,_=0,v=false,g=false,d=true;if(typeof n!="function")throw new ti("Expected a function");return t=Su(t)||0,du(r)&&(v=!!r.leading,l=(g="maxWait"in r)?Ui(Su(r.maxWait)||0,t):l,d="trailing"in r?!!r.trailing:d),f.cancel=function(){h!==T&&lo(h),_=0,c=p=a=h=T},f.flush=function(){return h===T?s:o(Go())},f}function cu(n,t){function r(){var e=arguments,u=t?t.apply(this,e):e[0],i=r.cache; return i.has(u)?i.get(u):(e=n.apply(this,e),r.cache=i.set(u,e)||i,e)}if(typeof n!="function"||null!=t&&typeof t!="function")throw new ti("Expected a function");return r.cache=new(cu.Cache||Fn),r}function au(n){if(typeof n!="function")throw new ti("Expected a function");return function(){var t=arguments;switch(t.length){case 0:return!n.call(this);case 1:return!n.call(this,t[0]);case 2:return!n.call(this,t[0],t[1]);case 3:return!n.call(this,t[0],t[1],t[2])}return!n.apply(this,t)}}function lu(n,t){return n===t||n!==n&&t!==t; }function su(n){return null!=n&&gu(n.length)&&!_u(n)}function hu(n){return yu(n)&&su(n)}function pu(n){if(!yu(n))return false;var t=Ot(n);return"[object Error]"==t||"[object DOMException]"==t||typeof n.message=="string"&&typeof n.name=="string"&&!xu(n)}function _u(n){return!!du(n)&&(n=Ot(n),"[object Function]"==n||"[object GeneratorFunction]"==n||"[object AsyncFunction]"==n||"[object Proxy]"==n)}function vu(n){return typeof n=="number"&&n==Eu(n)}function gu(n){return typeof n=="number"&&-1<n&&0==n%1&&9007199254740991>=n; }function du(n){var t=typeof n;return null!=n&&("object"==t||"function"==t)}function yu(n){return null!=n&&typeof n=="object"}function bu(n){return typeof n=="number"||yu(n)&&"[object Number]"==Ot(n)}function xu(n){return!(!yu(n)||"[object Object]"!=Ot(n))&&(n=di(n),null===n||(n=oi.call(n,"constructor")&&n.constructor,typeof n=="function"&&n instanceof n&&ii.call(n)==li))}function ju(n){return typeof n=="string"||!ff(n)&&yu(n)&&"[object String]"==Ot(n)}function wu(n){return typeof n=="symbol"||yu(n)&&"[object Symbol]"==Ot(n); }function mu(n){if(!n)return[];if(su(n))return ju(n)?M(n):Ur(n);if(wi&&n[wi]){n=n[wi]();for(var t,r=[];!(t=n.next()).done;)r.push(t.value);return r}return t=vo(n),("[object Map]"==t?W:"[object Set]"==t?U:Uu)(n)}function Au(n){return n?(n=Su(n),n===$||n===-$?1.7976931348623157e308*(0>n?-1:1):n===n?n:0):0===n?n:0}function Eu(n){n=Au(n);var t=n%1;return n===n?t?n-t:n:0}function ku(n){return n?pt(Eu(n),0,4294967295):0}function Su(n){if(typeof n=="number")return n;if(wu(n))return F;if(du(n)&&(n=typeof n.valueOf=="function"?n.valueOf():n, n=du(n)?n+"":n),typeof n!="string")return 0===n?n:+n;n=n.replace(un,"");var t=gn.test(n);return t||yn.test(n)?Dn(n.slice(2),t?2:8):vn.test(n)?F:+n}function Ou(n){return Cr(n,Bu(n))}function Iu(n){return null==n?"":yr(n)}function Ru(n,t,r){return n=null==n?T:kt(n,t),n===T?r:n}function zu(n,t){return null!=n&&we(n,t,zt)}function Wu(n){return su(n)?qn(n):Vt(n)}function Bu(n){if(su(n))n=qn(n,true);else if(du(n)){var t,r=ze(n),e=[];for(t in n)("constructor"!=t||!r&&oi.call(n,t))&&e.push(t);n=e}else{if(t=[], null!=n)for(r in Qu(n))t.push(r);n=t}return n}function Lu(n,t){if(null==n)return{};var r=c(ve(n),function(n){return[n]});return t=ye(t),tr(n,r,function(n,r){return t(n,r[0])})}function Uu(n){return null==n?[]:S(n,Wu(n))}function Cu(n){return $f(Iu(n).toLowerCase())}function Du(n){return(n=Iu(n))&&n.replace(xn,Xn).replace(Sn,"")}function Mu(n,t,r){return n=Iu(n),t=r?T:t,t===T?zn.test(n)?n.match(In)||[]:n.match(sn)||[]:n.match(t)||[]}function Tu(n){return function(){return n}}function $u(n){return n; }function Fu(n){return qt(typeof n=="function"?n:_t(n,1))}function Nu(n,t,e){var u=Wu(t),i=Et(t,u);null!=e||du(t)&&(i.length||!u.length)||(e=t,t=n,n=this,i=Et(t,Wu(t)));var o=!(du(e)&&"chain"in e&&!e.chain),f=_u(n);return r(i,function(r){var e=t[r];n[r]=e,f&&(n.prototype[r]=function(){var t=this.__chain__;if(o||t){var r=n(this.__wrapped__);return(r.__actions__=Ur(this.__actions__)).push({func:e,args:arguments,thisArg:n}),r.__chain__=t,r}return e.apply(n,a([this.value()],arguments))})}),n}function Pu(){} function Zu(n){return Ie(n)?b(Me(n)):rr(n)}function qu(){return[]}function Vu(){return false}mn=null==mn?$n:rt.defaults($n.Object(),mn,rt.pick($n,Wn));var Ku=mn.Array,Gu=mn.Date,Hu=mn.Error,Ju=mn.Function,Yu=mn.Math,Qu=mn.Object,Xu=mn.RegExp,ni=mn.String,ti=mn.TypeError,ri=Ku.prototype,ei=Qu.prototype,ui=mn["__core-js_shared__"],ii=Ju.prototype.toString,oi=ei.hasOwnProperty,fi=0,ci=function(){var n=/[^.]+$/.exec(ui&&ui.keys&&ui.keys.IE_PROTO||"");return n?"Symbol(src)_1."+n:""}(),ai=ei.toString,li=ii.call(Qu),si=$n._,hi=Xu("^"+ii.call(oi).replace(rn,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$"),pi=Pn?mn.Buffer:T,_i=mn.Symbol,vi=mn.Uint8Array,gi=pi?pi.g:T,di=B(Qu.getPrototypeOf,Qu),yi=Qu.create,bi=ei.propertyIsEnumerable,xi=ri.splice,ji=_i?_i.isConcatSpreadable:T,wi=_i?_i.iterator:T,mi=_i?_i.toStringTag:T,Ai=function(){ try{var n=je(Qu,"defineProperty");return n({},"",{}),n}catch(n){}}(),Ei=mn.clearTimeout!==$n.clearTimeout&&mn.clearTimeout,ki=Gu&&Gu.now!==$n.Date.now&&Gu.now,Si=mn.setTimeout!==$n.setTimeout&&mn.setTimeout,Oi=Yu.ceil,Ii=Yu.floor,Ri=Qu.getOwnPropertySymbols,zi=pi?pi.isBuffer:T,Wi=mn.isFinite,Bi=ri.join,Li=B(Qu.keys,Qu),Ui=Yu.max,Ci=Yu.min,Di=Gu.now,Mi=mn.parseInt,Ti=Yu.random,$i=ri.reverse,Fi=je(mn,"DataView"),Ni=je(mn,"Map"),Pi=je(mn,"Promise"),Zi=je(mn,"Set"),qi=je(mn,"WeakMap"),Vi=je(Qu,"create"),Ki=qi&&new qi,Gi={},Hi=Te(Fi),Ji=Te(Ni),Yi=Te(Pi),Qi=Te(Zi),Xi=Te(qi),no=_i?_i.prototype:T,to=no?no.valueOf:T,ro=no?no.toString:T,eo=function(){ function n(){}return function(t){return du(t)?yi?yi(t):(n.prototype=t,t=new n,n.prototype=T,t):{}}}();An.templateSettings={escape:J,evaluate:Y,interpolate:Q,variable:"",imports:{_:An}},An.prototype=En.prototype,An.prototype.constructor=An,On.prototype=eo(En.prototype),On.prototype.constructor=On,Un.prototype=eo(En.prototype),Un.prototype.constructor=Un,Mn.prototype.clear=function(){this.__data__=Vi?Vi(null):{},this.size=0},Mn.prototype.delete=function(n){return n=this.has(n)&&delete this.__data__[n], this.size-=n?1:0,n},Mn.prototype.get=function(n){var t=this.__data__;return Vi?(n=t[n],"__lodash_hash_undefined__"===n?T:n):oi.call(t,n)?t[n]:T},Mn.prototype.has=function(n){var t=this.__data__;return Vi?t[n]!==T:oi.call(t,n)},Mn.prototype.set=function(n,t){var r=this.__data__;return this.size+=this.has(n)?0:1,r[n]=Vi&&t===T?"__lodash_hash_undefined__":t,this},Tn.prototype.clear=function(){this.__data__=[],this.size=0},Tn.prototype.delete=function(n){var t=this.__data__;return n=ft(t,n),!(0>n)&&(n==t.length-1?t.pop():xi.call(t,n,1), --this.size,true)},Tn.prototype.get=function(n){var t=this.__data__;return n=ft(t,n),0>n?T:t[n][1]},Tn.prototype.has=function(n){return-1<ft(this.__data__,n)},Tn.prototype.set=function(n,t){var r=this.__data__,e=ft(r,n);return 0>e?(++this.size,r.push([n,t])):r[e][1]=t,this},Fn.prototype.clear=function(){this.size=0,this.__data__={hash:new Mn,map:new(Ni||Tn),string:new Mn}},Fn.prototype.delete=function(n){return n=be(this,n).delete(n),this.size-=n?1:0,n},Fn.prototype.get=function(n){return be(this,n).get(n); },Fn.prototype.has=function(n){return be(this,n).has(n)},Fn.prototype.set=function(n,t){var r=be(this,n),e=r.size;return r.set(n,t),this.size+=r.size==e?0:1,this},Nn.prototype.add=Nn.prototype.push=function(n){return this.__data__.set(n,"__lodash_hash_undefined__"),this},Nn.prototype.has=function(n){return this.__data__.has(n)},Zn.prototype.clear=function(){this.__data__=new Tn,this.size=0},Zn.prototype.delete=function(n){var t=this.__data__;return n=t.delete(n),this.size=t.size,n},Zn.prototype.get=function(n){ return this.__data__.get(n)},Zn.prototype.has=function(n){return this.__data__.has(n)},Zn.prototype.set=function(n,t){var r=this.__data__;if(r instanceof Tn){var e=r.__data__;if(!Ni||199>e.length)return e.push([n,t]),this.size=++r.size,this;r=this.__data__=new Fn(e)}return r.set(n,t),this.size=r.size,this};var uo=Fr(mt),io=Fr(At,true),oo=Nr(),fo=Nr(true),co=Ki?function(n,t){return Ki.set(n,t),n}:$u,ao=Ai?function(n,t){return Ai(n,"toString",{configurable:true,enumerable:false,value:Tu(t),writable:true})}:$u,lo=Ei||function(n){ return $n.clearTimeout(n)},so=Zi&&1/U(new Zi([,-0]))[1]==$?function(n){return new Zi(n)}:Pu,ho=Ki?function(n){return Ki.get(n)}:Pu,po=Ri?function(n){return null==n?[]:(n=Qu(n),i(Ri(n),function(t){return bi.call(n,t)}))}:qu,_o=Ri?function(n){for(var t=[];n;)a(t,po(n)),n=di(n);return t}:qu,vo=Ot;(Fi&&"[object DataView]"!=vo(new Fi(new ArrayBuffer(1)))||Ni&&"[object Map]"!=vo(new Ni)||Pi&&"[object Promise]"!=vo(Pi.resolve())||Zi&&"[object Set]"!=vo(new Zi)||qi&&"[object WeakMap]"!=vo(new qi))&&(vo=function(n){ var t=Ot(n);if(n=(n="[object Object]"==t?n.constructor:T)?Te(n):"")switch(n){case Hi:return"[object DataView]";case Ji:return"[object Map]";case Yi:return"[object Promise]";case Qi:return"[object Set]";case Xi:return"[object WeakMap]"}return t});var go=ui?_u:Vu,yo=Ce(co),bo=Si||function(n,t){return $n.setTimeout(n,t)},xo=Ce(ao),jo=function(n){n=cu(n,function(n){return 500===t.size&&t.clear(),n});var t=n.cache;return n}(function(n){var t=[];return 46===n.charCodeAt(0)&&t.push(""),n.replace(tn,function(n,r,e,u){ t.push(e?u.replace(hn,"$1"):r||n)}),t}),wo=fr(function(n,t){return hu(n)?yt(n,wt(t,1,hu,true)):[]}),mo=fr(function(n,t){var r=Ve(t);return hu(r)&&(r=T),hu(n)?yt(n,wt(t,1,hu,true),ye(r,2)):[]}),Ao=fr(function(n,t){var r=Ve(t);return hu(r)&&(r=T),hu(n)?yt(n,wt(t,1,hu,true),T,r):[]}),Eo=fr(function(n){var t=c(n,Er);return t.length&&t[0]===n[0]?Wt(t):[]}),ko=fr(function(n){var t=Ve(n),r=c(n,Er);return t===Ve(r)?t=T:r.pop(),r.length&&r[0]===n[0]?Wt(r,ye(t,2)):[]}),So=fr(function(n){var t=Ve(n),r=c(n,Er);return(t=typeof t=="function"?t:T)&&r.pop(), r.length&&r[0]===n[0]?Wt(r,T,t):[]}),Oo=fr(Ke),Io=pe(function(n,t){var r=null==n?0:n.length,e=ht(n,t);return ur(n,c(t,function(n){return Se(n,r)?+n:n}).sort(Wr)),e}),Ro=fr(function(n){return br(wt(n,1,hu,true))}),zo=fr(function(n){var t=Ve(n);return hu(t)&&(t=T),br(wt(n,1,hu,true),ye(t,2))}),Wo=fr(function(n){var t=Ve(n),t=typeof t=="function"?t:T;return br(wt(n,1,hu,true),T,t)}),Bo=fr(function(n,t){return hu(n)?yt(n,t):[]}),Lo=fr(function(n){return mr(i(n,hu))}),Uo=fr(function(n){var t=Ve(n);return hu(t)&&(t=T), mr(i(n,hu),ye(t,2))}),Co=fr(function(n){var t=Ve(n),t=typeof t=="function"?t:T;return mr(i(n,hu),T,t)}),Do=fr(He),Mo=fr(function(n){var t=n.length,t=1<t?n[t-1]:T,t=typeof t=="function"?(n.pop(),t):T;return Je(n,t)}),To=pe(function(n){function t(t){return ht(t,n)}var r=n.length,e=r?n[0]:0,u=this.__wrapped__;return!(1<r||this.__actions__.length)&&u instanceof Un&&Se(e)?(u=u.slice(e,+e+(r?1:0)),u.__actions__.push({func:Qe,args:[t],thisArg:T}),new On(u,this.__chain__).thru(function(n){return r&&!n.length&&n.push(T), n})):this.thru(t)}),$o=Tr(function(n,t,r){oi.call(n,r)?++n[r]:st(n,r,1)}),Fo=Gr(Ne),No=Gr(Pe),Po=Tr(function(n,t,r){oi.call(n,r)?n[r].push(t):st(n,r,[t])}),Zo=fr(function(t,r,e){var u=-1,i=typeof r=="function",o=su(t)?Ku(t.length):[];return uo(t,function(t){o[++u]=i?n(r,t,e):Lt(t,r,e)}),o}),qo=Tr(function(n,t,r){st(n,r,t)}),Vo=Tr(function(n,t,r){n[r?0:1].push(t)},function(){return[[],[]]}),Ko=fr(function(n,t){if(null==n)return[];var r=t.length;return 1<r&&Oe(n,t[0],t[1])?t=[]:2<r&&Oe(t[0],t[1],t[2])&&(t=[t[0]]), Xt(n,wt(t,1),[])}),Go=ki||function(){return $n.Date.now()},Ho=fr(function(n,t,r){var e=1;if(r.length)var u=L(r,de(Ho)),e=32|e;return fe(n,e,t,r,u)}),Jo=fr(function(n,t,r){var e=3;if(r.length)var u=L(r,de(Jo)),e=32|e;return fe(t,e,n,r,u)}),Yo=fr(function(n,t){return dt(n,1,t)}),Qo=fr(function(n,t,r){return dt(n,Su(t)||0,r)});cu.Cache=Fn;var Xo=fr(function(t,r){r=1==r.length&&ff(r[0])?c(r[0],k(ye())):c(wt(r,1),k(ye()));var e=r.length;return fr(function(u){for(var i=-1,o=Ci(u.length,e);++i<o;)u[i]=r[i].call(this,u[i]); return n(t,this,u)})}),nf=fr(function(n,t){return fe(n,32,T,t,L(t,de(nf)))}),tf=fr(function(n,t){return fe(n,64,T,t,L(t,de(tf)))}),rf=pe(function(n,t){return fe(n,256,T,T,T,t)}),ef=ee(It),uf=ee(function(n,t){return n>=t}),of=Ut(function(){return arguments}())?Ut:function(n){return yu(n)&&oi.call(n,"callee")&&!bi.call(n,"callee")},ff=Ku.isArray,cf=Vn?k(Vn):Ct,af=zi||Vu,lf=Kn?k(Kn):Dt,sf=Gn?k(Gn):Tt,hf=Hn?k(Hn):Nt,pf=Jn?k(Jn):Pt,_f=Yn?k(Yn):Zt,vf=ee(Kt),gf=ee(function(n,t){return n<=t}),df=$r(function(n,t){ if(ze(t)||su(t))Cr(t,Wu(t),n);else for(var r in t)oi.call(t,r)&&ot(n,r,t[r])}),yf=$r(function(n,t){Cr(t,Bu(t),n)}),bf=$r(function(n,t,r,e){Cr(t,Bu(t),n,e)}),xf=$r(function(n,t,r,e){Cr(t,Wu(t),n,e)}),jf=pe(ht),wf=fr(function(n,t){n=Qu(n);var r=-1,e=t.length,u=2<e?t[2]:T;for(u&&Oe(t[0],t[1],u)&&(e=1);++r<e;)for(var u=t[r],i=Bu(u),o=-1,f=i.length;++o<f;){var c=i[o],a=n[c];(a===T||lu(a,ei[c])&&!oi.call(n,c))&&(n[c]=u[c])}return n}),mf=fr(function(t){return t.push(T,ae),n(Of,T,t)}),Af=Yr(function(n,t,r){ null!=t&&typeof t.toString!="function"&&(t=ai.call(t)),n[t]=r},Tu($u)),Ef=Yr(function(n,t,r){null!=t&&typeof t.toString!="function"&&(t=ai.call(t)),oi.call(n,t)?n[t].push(r):n[t]=[r]},ye),kf=fr(Lt),Sf=$r(function(n,t,r){Yt(n,t,r)}),Of=$r(function(n,t,r,e){Yt(n,t,r,e)}),If=pe(function(n,t){var r={};if(null==n)return r;var e=false;t=c(t,function(t){return t=Sr(t,n),e||(e=1<t.length),t}),Cr(n,ve(n),r),e&&(r=_t(r,7,le));for(var u=t.length;u--;)xr(r,t[u]);return r}),Rf=pe(function(n,t){return null==n?{}:nr(n,t); }),zf=oe(Wu),Wf=oe(Bu),Bf=qr(function(n,t,r){return t=t.toLowerCase(),n+(r?Cu(t):t)}),Lf=qr(function(n,t,r){return n+(r?"-":"")+t.toLowerCase()}),Uf=qr(function(n,t,r){return n+(r?" ":"")+t.toLowerCase()}),Cf=Zr("toLowerCase"),Df=qr(function(n,t,r){return n+(r?"_":"")+t.toLowerCase()}),Mf=qr(function(n,t,r){return n+(r?" ":"")+$f(t)}),Tf=qr(function(n,t,r){return n+(r?" ":"")+t.toUpperCase()}),$f=Zr("toUpperCase"),Ff=fr(function(t,r){try{return n(t,T,r)}catch(n){return pu(n)?n:new Hu(n)}}),Nf=pe(function(n,t){ return r(t,function(t){t=Me(t),st(n,t,Ho(n[t],n))}),n}),Pf=Hr(),Zf=Hr(true),qf=fr(function(n,t){return function(r){return Lt(r,n,t)}}),Vf=fr(function(n,t){return function(r){return Lt(n,r,t)}}),Kf=Xr(c),Gf=Xr(u),Hf=Xr(h),Jf=re(),Yf=re(true),Qf=Qr(function(n,t){return n+t},0),Xf=ie("ceil"),nc=Qr(function(n,t){return n/t},1),tc=ie("floor"),rc=Qr(function(n,t){return n*t},1),ec=ie("round"),uc=Qr(function(n,t){return n-t},0);return An.after=function(n,t){if(typeof t!="function")throw new ti("Expected a function"); return n=Eu(n),function(){if(1>--n)return t.apply(this,arguments)}},An.ary=eu,An.assign=df,An.assignIn=yf,An.assignInWith=bf,An.assignWith=xf,An.at=jf,An.before=uu,An.bind=Ho,An.bindAll=Nf,An.bindKey=Jo,An.castArray=function(){if(!arguments.length)return[];var n=arguments[0];return ff(n)?n:[n]},An.chain=Ye,An.chunk=function(n,t,r){if(t=(r?Oe(n,t,r):t===T)?1:Ui(Eu(t),0),r=null==n?0:n.length,!r||1>t)return[];for(var e=0,u=0,i=Ku(Oi(r/t));e<r;)i[u++]=hr(n,e,e+=t);return i},An.compact=function(n){for(var t=-1,r=null==n?0:n.length,e=0,u=[];++t<r;){ var i=n[t];i&&(u[e++]=i)}return u},An.concat=function(){var n=arguments.length;if(!n)return[];for(var t=Ku(n-1),r=arguments[0];n--;)t[n-1]=arguments[n];return a(ff(r)?Ur(r):[r],wt(t,1))},An.cond=function(t){var r=null==t?0:t.length,e=ye();return t=r?c(t,function(n){if("function"!=typeof n[1])throw new ti("Expected a function");return[e(n[0]),n[1]]}):[],fr(function(e){for(var u=-1;++u<r;){var i=t[u];if(n(i[0],this,e))return n(i[1],this,e)}})},An.conforms=function(n){return vt(_t(n,1))},An.constant=Tu, An.countBy=$o,An.create=function(n,t){var r=eo(n);return null==t?r:at(r,t)},An.curry=iu,An.curryRight=ou,An.debounce=fu,An.defaults=wf,An.defaultsDeep=mf,An.defer=Yo,An.delay=Qo,An.difference=wo,An.differenceBy=mo,An.differenceWith=Ao,An.drop=function(n,t,r){var e=null==n?0:n.length;return e?(t=r||t===T?1:Eu(t),hr(n,0>t?0:t,e)):[]},An.dropRight=function(n,t,r){var e=null==n?0:n.length;return e?(t=r||t===T?1:Eu(t),t=e-t,hr(n,0,0>t?0:t)):[]},An.dropRightWhile=function(n,t){return n&&n.length?jr(n,ye(t,3),true,true):[]; },An.dropWhile=function(n,t){return n&&n.length?jr(n,ye(t,3),true):[]},An.fill=function(n,t,r,e){var u=null==n?0:n.length;if(!u)return[];for(r&&typeof r!="number"&&Oe(n,t,r)&&(r=0,e=u),u=n.length,r=Eu(r),0>r&&(r=-r>u?0:u+r),e=e===T||e>u?u:Eu(e),0>e&&(e+=u),e=r>e?0:ku(e);r<e;)n[r++]=t;return n},An.filter=function(n,t){return(ff(n)?i:jt)(n,ye(t,3))},An.flatMap=function(n,t){return wt(ru(n,t),1)},An.flatMapDeep=function(n,t){return wt(ru(n,t),$)},An.flatMapDepth=function(n,t,r){return r=r===T?1:Eu(r), wt(ru(n,t),r)},An.flatten=Ze,An.flattenDeep=function(n){return(null==n?0:n.length)?wt(n,$):[]},An.flattenDepth=function(n,t){return null!=n&&n.length?(t=t===T?1:Eu(t),wt(n,t)):[]},An.flip=function(n){return fe(n,512)},An.flow=Pf,An.flowRight=Zf,An.fromPairs=function(n){for(var t=-1,r=null==n?0:n.length,e={};++t<r;){var u=n[t];e[u[0]]=u[1]}return e},An.functions=function(n){return null==n?[]:Et(n,Wu(n))},An.functionsIn=function(n){return null==n?[]:Et(n,Bu(n))},An.groupBy=Po,An.initial=function(n){ return(null==n?0:n.length)?hr(n,0,-1):[]},An.intersection=Eo,An.intersectionBy=ko,An.intersectionWith=So,An.invert=Af,An.invertBy=Ef,An.invokeMap=Zo,An.iteratee=Fu,An.keyBy=qo,An.keys=Wu,An.keysIn=Bu,An.map=ru,An.mapKeys=function(n,t){var r={};return t=ye(t,3),mt(n,function(n,e,u){st(r,t(n,e,u),n)}),r},An.mapValues=function(n,t){var r={};return t=ye(t,3),mt(n,function(n,e,u){st(r,e,t(n,e,u))}),r},An.matches=function(n){return Ht(_t(n,1))},An.matchesProperty=function(n,t){return Jt(n,_t(t,1))},An.memoize=cu, An.merge=Sf,An.mergeWith=Of,An.method=qf,An.methodOf=Vf,An.mixin=Nu,An.negate=au,An.nthArg=function(n){return n=Eu(n),fr(function(t){return Qt(t,n)})},An.omit=If,An.omitBy=function(n,t){return Lu(n,au(ye(t)))},An.once=function(n){return uu(2,n)},An.orderBy=function(n,t,r,e){return null==n?[]:(ff(t)||(t=null==t?[]:[t]),r=e?T:r,ff(r)||(r=null==r?[]:[r]),Xt(n,t,r))},An.over=Kf,An.overArgs=Xo,An.overEvery=Gf,An.overSome=Hf,An.partial=nf,An.partialRight=tf,An.partition=Vo,An.pick=Rf,An.pickBy=Lu,An.property=Zu, An.propertyOf=function(n){return function(t){return null==n?T:kt(n,t)}},An.pull=Oo,An.pullAll=Ke,An.pullAllBy=function(n,t,r){return n&&n.length&&t&&t.length?er(n,t,ye(r,2)):n},An.pullAllWith=function(n,t,r){return n&&n.length&&t&&t.length?er(n,t,T,r):n},An.pullAt=Io,An.range=Jf,An.rangeRight=Yf,An.rearg=rf,An.reject=function(n,t){return(ff(n)?i:jt)(n,au(ye(t,3)))},An.remove=function(n,t){var r=[];if(!n||!n.length)return r;var e=-1,u=[],i=n.length;for(t=ye(t,3);++e<i;){var o=n[e];t(o,e,n)&&(r.push(o), u.push(e))}return ur(n,u),r},An.rest=function(n,t){if(typeof n!="function")throw new ti("Expected a function");return t=t===T?t:Eu(t),fr(n,t)},An.reverse=Ge,An.sampleSize=function(n,t,r){return t=(r?Oe(n,t,r):t===T)?1:Eu(t),(ff(n)?et:ar)(n,t)},An.set=function(n,t,r){return null==n?n:lr(n,t,r)},An.setWith=function(n,t,r,e){return e=typeof e=="function"?e:T,null==n?n:lr(n,t,r,e)},An.shuffle=function(n){return(ff(n)?ut:sr)(n)},An.slice=function(n,t,r){var e=null==n?0:n.length;return e?(r&&typeof r!="number"&&Oe(n,t,r)?(t=0, r=e):(t=null==t?0:Eu(t),r=r===T?e:Eu(r)),hr(n,t,r)):[]},An.sortBy=Ko,An.sortedUniq=function(n){return n&&n.length?gr(n):[]},An.sortedUniqBy=function(n,t){return n&&n.length?gr(n,ye(t,2)):[]},An.split=function(n,t,r){return r&&typeof r!="number"&&Oe(n,t,r)&&(t=r=T),r=r===T?4294967295:r>>>0,r?(n=Iu(n))&&(typeof t=="string"||null!=t&&!hf(t))&&(t=yr(t),!t&&Rn.test(n))?Or(M(n),0,r):n.split(t,r):[]},An.spread=function(t,r){if(typeof t!="function")throw new ti("Expected a function");return r=null==r?0:Ui(Eu(r),0), fr(function(e){var u=e[r];return e=Or(e,0,r),u&&a(e,u),n(t,this,e)})},An.tail=function(n){var t=null==n?0:n.length;return t?hr(n,1,t):[]},An.take=function(n,t,r){return n&&n.length?(t=r||t===T?1:Eu(t),hr(n,0,0>t?0:t)):[]},An.takeRight=function(n,t,r){var e=null==n?0:n.length;return e?(t=r||t===T?1:Eu(t),t=e-t,hr(n,0>t?0:t,e)):[]},An.takeRightWhile=function(n,t){return n&&n.length?jr(n,ye(t,3),false,true):[]},An.takeWhile=function(n,t){return n&&n.length?jr(n,ye(t,3)):[]},An.tap=function(n,t){return t(n), n},An.throttle=function(n,t,r){var e=true,u=true;if(typeof n!="function")throw new ti("Expected a function");return du(r)&&(e="leading"in r?!!r.leading:e,u="trailing"in r?!!r.trailing:u),fu(n,t,{leading:e,maxWait:t,trailing:u})},An.thru=Qe,An.toArray=mu,An.toPairs=zf,An.toPairsIn=Wf,An.toPath=function(n){return ff(n)?c(n,Me):wu(n)?[n]:Ur(jo(Iu(n)))},An.toPlainObject=Ou,An.transform=function(n,t,e){var u=ff(n),i=u||af(n)||_f(n);if(t=ye(t,4),null==e){var o=n&&n.constructor;e=i?u?new o:[]:du(n)&&_u(o)?eo(di(n)):{}; }return(i?r:mt)(n,function(n,r,u){return t(e,n,r,u)}),e},An.unary=function(n){return eu(n,1)},An.union=Ro,An.unionBy=zo,An.unionWith=Wo,An.uniq=function(n){return n&&n.length?br(n):[]},An.uniqBy=function(n,t){return n&&n.length?br(n,ye(t,2)):[]},An.uniqWith=function(n,t){return t=typeof t=="function"?t:T,n&&n.length?br(n,T,t):[]},An.unset=function(n,t){return null==n||xr(n,t)},An.unzip=He,An.unzipWith=Je,An.update=function(n,t,r){return null==n?n:lr(n,t,kr(r)(kt(n,t)),void 0)},An.updateWith=function(n,t,r,e){ return e=typeof e=="function"?e:T,null!=n&&(n=lr(n,t,kr(r)(kt(n,t)),e)),n},An.values=Uu,An.valuesIn=function(n){return null==n?[]:S(n,Bu(n))},An.without=Bo,An.words=Mu,An.wrap=function(n,t){return nf(kr(t),n)},An.xor=Lo,An.xorBy=Uo,An.xorWith=Co,An.zip=Do,An.zipObject=function(n,t){return Ar(n||[],t||[],ot)},An.zipObjectDeep=function(n,t){return Ar(n||[],t||[],lr)},An.zipWith=Mo,An.entries=zf,An.entriesIn=Wf,An.extend=yf,An.extendWith=bf,Nu(An,An),An.add=Qf,An.attempt=Ff,An.camelCase=Bf,An.capitalize=Cu, An.ceil=Xf,An.clamp=function(n,t,r){return r===T&&(r=t,t=T),r!==T&&(r=Su(r),r=r===r?r:0),t!==T&&(t=Su(t),t=t===t?t:0),pt(Su(n),t,r)},An.clone=function(n){return _t(n,4)},An.cloneDeep=function(n){return _t(n,5)},An.cloneDeepWith=function(n,t){return t=typeof t=="function"?t:T,_t(n,5,t)},An.cloneWith=function(n,t){return t=typeof t=="function"?t:T,_t(n,4,t)},An.conformsTo=function(n,t){return null==t||gt(n,t,Wu(t))},An.deburr=Du,An.defaultTo=function(n,t){return null==n||n!==n?t:n},An.divide=nc,An.endsWith=function(n,t,r){ n=Iu(n),t=yr(t);var e=n.length,e=r=r===T?e:pt(Eu(r),0,e);return r-=t.length,0<=r&&n.slice(r,e)==t},An.eq=lu,An.escape=function(n){return(n=Iu(n))&&H.test(n)?n.replace(K,nt):n},An.escapeRegExp=function(n){return(n=Iu(n))&&en.test(n)?n.replace(rn,"\\$&"):n},An.every=function(n,t,r){var e=ff(n)?u:bt;return r&&Oe(n,t,r)&&(t=T),e(n,ye(t,3))},An.find=Fo,An.findIndex=Ne,An.findKey=function(n,t){return p(n,ye(t,3),mt)},An.findLast=No,An.findLastIndex=Pe,An.findLastKey=function(n,t){return p(n,ye(t,3),At); },An.floor=tc,An.forEach=nu,An.forEachRight=tu,An.forIn=function(n,t){return null==n?n:oo(n,ye(t,3),Bu)},An.forInRight=function(n,t){return null==n?n:fo(n,ye(t,3),Bu)},An.forOwn=function(n,t){return n&&mt(n,ye(t,3))},An.forOwnRight=function(n,t){return n&&At(n,ye(t,3))},An.get=Ru,An.gt=ef,An.gte=uf,An.has=function(n,t){return null!=n&&we(n,t,Rt)},An.hasIn=zu,An.head=qe,An.identity=$u,An.includes=function(n,t,r,e){return n=su(n)?n:Uu(n),r=r&&!e?Eu(r):0,e=n.length,0>r&&(r=Ui(e+r,0)),ju(n)?r<=e&&-1<n.indexOf(t,r):!!e&&-1<v(n,t,r); },An.indexOf=function(n,t,r){var e=null==n?0:n.length;return e?(r=null==r?0:Eu(r),0>r&&(r=Ui(e+r,0)),v(n,t,r)):-1},An.inRange=function(n,t,r){return t=Au(t),r===T?(r=t,t=0):r=Au(r),n=Su(n),n>=Ci(t,r)&&n<Ui(t,r)},An.invoke=kf,An.isArguments=of,An.isArray=ff,An.isArrayBuffer=cf,An.isArrayLike=su,An.isArrayLikeObject=hu,An.isBoolean=function(n){return true===n||false===n||yu(n)&&"[object Boolean]"==Ot(n)},An.isBuffer=af,An.isDate=lf,An.isElement=function(n){return yu(n)&&1===n.nodeType&&!xu(n)},An.isEmpty=function(n){ if(null==n)return true;if(su(n)&&(ff(n)||typeof n=="string"||typeof n.splice=="function"||af(n)||_f(n)||of(n)))return!n.length;var t=vo(n);if("[object Map]"==t||"[object Set]"==t)return!n.size;if(ze(n))return!Vt(n).length;for(var r in n)if(oi.call(n,r))return false;return true},An.isEqual=function(n,t){return Mt(n,t)},An.isEqualWith=function(n,t,r){var e=(r=typeof r=="function"?r:T)?r(n,t):T;return e===T?Mt(n,t,T,r):!!e},An.isError=pu,An.isFinite=function(n){return typeof n=="number"&&Wi(n)},An.isFunction=_u, An.isInteger=vu,An.isLength=gu,An.isMap=sf,An.isMatch=function(n,t){return n===t||$t(n,t,xe(t))},An.isMatchWith=function(n,t,r){return r=typeof r=="function"?r:T,$t(n,t,xe(t),r)},An.isNaN=function(n){return bu(n)&&n!=+n},An.isNative=function(n){if(go(n))throw new Hu("Unsupported core-js use. Try https://npms.io/search?q=ponyfill.");return Ft(n)},An.isNil=function(n){return null==n},An.isNull=function(n){return null===n},An.isNumber=bu,An.isObject=du,An.isObjectLike=yu,An.isPlainObject=xu,An.isRegExp=hf, An.isSafeInteger=function(n){return vu(n)&&-9007199254740991<=n&&9007199254740991>=n},An.isSet=pf,An.isString=ju,An.isSymbol=wu,An.isTypedArray=_f,An.isUndefined=function(n){return n===T},An.isWeakMap=function(n){return yu(n)&&"[object WeakMap]"==vo(n)},An.isWeakSet=function(n){return yu(n)&&"[object WeakSet]"==Ot(n)},An.join=function(n,t){return null==n?"":Bi.call(n,t)},An.kebabCase=Lf,An.last=Ve,An.lastIndexOf=function(n,t,r){var e=null==n?0:n.length;if(!e)return-1;var u=e;if(r!==T&&(u=Eu(r),u=0>u?Ui(e+u,0):Ci(u,e-1)), t===t){for(r=u+1;r--&&n[r]!==t;);n=r}else n=_(n,d,u,true);return n},An.lowerCase=Uf,An.lowerFirst=Cf,An.lt=vf,An.lte=gf,An.max=function(n){return n&&n.length?xt(n,$u,It):T},An.maxBy=function(n,t){return n&&n.length?xt(n,ye(t,2),It):T},An.mean=function(n){return y(n,$u)},An.meanBy=function(n,t){return y(n,ye(t,2))},An.min=function(n){return n&&n.length?xt(n,$u,Kt):T},An.minBy=function(n,t){return n&&n.length?xt(n,ye(t,2),Kt):T},An.stubArray=qu,An.stubFalse=Vu,An.stubObject=function(){return{}},An.stubString=function(){ return""},An.stubTrue=function(){return true},An.multiply=rc,An.nth=function(n,t){return n&&n.length?Qt(n,Eu(t)):T},An.noConflict=function(){return $n._===this&&($n._=si),this},An.noop=Pu,An.now=Go,An.pad=function(n,t,r){n=Iu(n);var e=(t=Eu(t))?D(n):0;return!t||e>=t?n:(t=(t-e)/2,ne(Ii(t),r)+n+ne(Oi(t),r))},An.padEnd=function(n,t,r){n=Iu(n);var e=(t=Eu(t))?D(n):0;return t&&e<t?n+ne(t-e,r):n},An.padStart=function(n,t,r){n=Iu(n);var e=(t=Eu(t))?D(n):0;return t&&e<t?ne(t-e,r)+n:n},An.parseInt=function(n,t,r){ return r||null==t?t=0:t&&(t=+t),Mi(Iu(n).replace(on,""),t||0)},An.random=function(n,t,r){if(r&&typeof r!="boolean"&&Oe(n,t,r)&&(t=r=T),r===T&&(typeof t=="boolean"?(r=t,t=T):typeof n=="boolean"&&(r=n,n=T)),n===T&&t===T?(n=0,t=1):(n=Au(n),t===T?(t=n,n=0):t=Au(t)),n>t){var e=n;n=t,t=e}return r||n%1||t%1?(r=Ti(),Ci(n+r*(t-n+Cn("1e-"+((r+"").length-1))),t)):ir(n,t)},An.reduce=function(n,t,r){var e=ff(n)?l:j,u=3>arguments.length;return e(n,ye(t,4),r,u,uo)},An.reduceRight=function(n,t,r){var e=ff(n)?s:j,u=3>arguments.length; return e(n,ye(t,4),r,u,io)},An.repeat=function(n,t,r){return t=(r?Oe(n,t,r):t===T)?1:Eu(t),or(Iu(n),t)},An.replace=function(){var n=arguments,t=Iu(n[0]);return 3>n.length?t:t.replace(n[1],n[2])},An.result=function(n,t,r){t=Sr(t,n);var e=-1,u=t.length;for(u||(u=1,n=T);++e<u;){var i=null==n?T:n[Me(t[e])];i===T&&(e=u,i=r),n=_u(i)?i.call(n):i}return n},An.round=ec,An.runInContext=x,An.sample=function(n){return(ff(n)?Qn:cr)(n)},An.size=function(n){if(null==n)return 0;if(su(n))return ju(n)?D(n):n.length; var t=vo(n);return"[object Map]"==t||"[object Set]"==t?n.size:Vt(n).length},An.snakeCase=Df,An.some=function(n,t,r){var e=ff(n)?h:pr;return r&&Oe(n,t,r)&&(t=T),e(n,ye(t,3))},An.sortedIndex=function(n,t){return _r(n,t)},An.sortedIndexBy=function(n,t,r){return vr(n,t,ye(r,2))},An.sortedIndexOf=function(n,t){var r=null==n?0:n.length;if(r){var e=_r(n,t);if(e<r&&lu(n[e],t))return e}return-1},An.sortedLastIndex=function(n,t){return _r(n,t,true)},An.sortedLastIndexBy=function(n,t,r){return vr(n,t,ye(r,2),true); },An.sortedLastIndexOf=function(n,t){if(null==n?0:n.length){var r=_r(n,t,true)-1;if(lu(n[r],t))return r}return-1},An.startCase=Mf,An.startsWith=function(n,t,r){return n=Iu(n),r=null==r?0:pt(Eu(r),0,n.length),t=yr(t),n.slice(r,r+t.length)==t},An.subtract=uc,An.sum=function(n){return n&&n.length?m(n,$u):0},An.sumBy=function(n,t){return n&&n.length?m(n,ye(t,2)):0},An.template=function(n,t,r){var e=An.templateSettings;r&&Oe(n,t,r)&&(t=T),n=Iu(n),t=bf({},t,e,ce),r=bf({},t.imports,e.imports,ce);var u,i,o=Wu(r),f=S(r,o),c=0; r=t.interpolate||jn;var a="__p+='";r=Xu((t.escape||jn).source+"|"+r.source+"|"+(r===Q?pn:jn).source+"|"+(t.evaluate||jn).source+"|$","g");var l=oi.call(t,"sourceURL")?"//# sourceURL="+(t.sourceURL+"").replace(/[\r\n]/g," ")+"\n":"";if(n.replace(r,function(t,r,e,o,f,l){return e||(e=o),a+=n.slice(c,l).replace(wn,z),r&&(u=true,a+="'+__e("+r+")+'"),f&&(i=true,a+="';"+f+";\n__p+='"),e&&(a+="'+((__t=("+e+"))==null?'':__t)+'"),c=l+t.length,t}),a+="';",(t=oi.call(t,"variable")&&t.variable)||(a="with(obj){"+a+"}"), a=(i?a.replace(P,""):a).replace(Z,"$1").replace(q,"$1;"),a="function("+(t||"obj")+"){"+(t?"":"obj||(obj={});")+"var __t,__p=''"+(u?",__e=_.escape":"")+(i?",__j=Array.prototype.join;function print(){__p+=__j.call(arguments,'')}":";")+a+"return __p}",t=Ff(function(){return Ju(o,l+"return "+a).apply(T,f)}),t.source=a,pu(t))throw t;return t},An.times=function(n,t){if(n=Eu(n),1>n||9007199254740991<n)return[];var r=4294967295,e=Ci(n,4294967295);for(t=ye(t),n-=4294967295,e=A(e,t);++r<n;)t(r);return e},An.toFinite=Au, An.toInteger=Eu,An.toLength=ku,An.toLower=function(n){return Iu(n).toLowerCase()},An.toNumber=Su,An.toSafeInteger=function(n){return n?pt(Eu(n),-9007199254740991,9007199254740991):0===n?n:0},An.toString=Iu,An.toUpper=function(n){return Iu(n).toUpperCase()},An.trim=function(n,t,r){return(n=Iu(n))&&(r||t===T)?n.replace(un,""):n&&(t=yr(t))?(n=M(n),r=M(t),t=I(n,r),r=R(n,r)+1,Or(n,t,r).join("")):n},An.trimEnd=function(n,t,r){return(n=Iu(n))&&(r||t===T)?n.replace(fn,""):n&&(t=yr(t))?(n=M(n),t=R(n,M(t))+1, Or(n,0,t).join("")):n},An.trimStart=function(n,t,r){return(n=Iu(n))&&(r||t===T)?n.replace(on,""):n&&(t=yr(t))?(n=M(n),t=I(n,M(t)),Or(n,t).join("")):n},An.truncate=function(n,t){var r=30,e="...";if(du(t))var u="separator"in t?t.separator:u,r="length"in t?Eu(t.length):r,e="omission"in t?yr(t.omission):e;n=Iu(n);var i=n.length;if(Rn.test(n))var o=M(n),i=o.length;if(r>=i)return n;if(i=r-D(e),1>i)return e;if(r=o?Or(o,0,i).join(""):n.slice(0,i),u===T)return r+e;if(o&&(i+=r.length-i),hf(u)){if(n.slice(i).search(u)){ var f=r;for(u.global||(u=Xu(u.source,Iu(_n.exec(u))+"g")),u.lastIndex=0;o=u.exec(f);)var c=o.index;r=r.slice(0,c===T?i:c)}}else n.indexOf(yr(u),i)!=i&&(u=r.lastIndexOf(u),-1<u&&(r=r.slice(0,u)));return r+e},An.unescape=function(n){return(n=Iu(n))&&G.test(n)?n.replace(V,tt):n},An.uniqueId=function(n){var t=++fi;return Iu(n)+t},An.upperCase=Tf,An.upperFirst=$f,An.each=nu,An.eachRight=tu,An.first=qe,Nu(An,function(){var n={};return mt(An,function(t,r){oi.call(An.prototype,r)||(n[r]=t)}),n}(),{chain:false }),An.VERSION="4.17.15",r("bind bindKey curry curryRight partial partialRight".split(" "),function(n){An[n].placeholder=An}),r(["drop","take"],function(n,t){Un.prototype[n]=function(r){r=r===T?1:Ui(Eu(r),0);var e=this.__filtered__&&!t?new Un(this):this.clone();return e.__filtered__?e.__takeCount__=Ci(r,e.__takeCount__):e.__views__.push({size:Ci(r,4294967295),type:n+(0>e.__dir__?"Right":"")}),e},Un.prototype[n+"Right"]=function(t){return this.reverse()[n](t).reverse()}}),r(["filter","map","takeWhile"],function(n,t){ var r=t+1,e=1==r||3==r;Un.prototype[n]=function(n){var t=this.clone();return t.__iteratees__.push({iteratee:ye(n,3),type:r}),t.__filtered__=t.__filtered__||e,t}}),r(["head","last"],function(n,t){var r="take"+(t?"Right":"");Un.prototype[n]=function(){return this[r](1).value()[0]}}),r(["initial","tail"],function(n,t){var r="drop"+(t?"":"Right");Un.prototype[n]=function(){return this.__filtered__?new Un(this):this[r](1)}}),Un.prototype.compact=function(){return this.filter($u)},Un.prototype.find=function(n){ return this.filter(n).head()},Un.prototype.findLast=function(n){return this.reverse().find(n)},Un.prototype.invokeMap=fr(function(n,t){return typeof n=="function"?new Un(this):this.map(function(r){return Lt(r,n,t)})}),Un.prototype.reject=function(n){return this.filter(au(ye(n)))},Un.prototype.slice=function(n,t){n=Eu(n);var r=this;return r.__filtered__&&(0<n||0>t)?new Un(r):(0>n?r=r.takeRight(-n):n&&(r=r.drop(n)),t!==T&&(t=Eu(t),r=0>t?r.dropRight(-t):r.take(t-n)),r)},Un.prototype.takeRightWhile=function(n){ return this.reverse().takeWhile(n).reverse()},Un.prototype.toArray=function(){return this.take(4294967295)},mt(Un.prototype,function(n,t){var r=/^(?:filter|find|map|reject)|While$/.test(t),e=/^(?:head|last)$/.test(t),u=An[e?"take"+("last"==t?"Right":""):t],i=e||/^find/.test(t);u&&(An.prototype[t]=function(){function t(n){return n=u.apply(An,a([n],f)),e&&h?n[0]:n}var o=this.__wrapped__,f=e?[1]:arguments,c=o instanceof Un,l=f[0],s=c||ff(o);s&&r&&typeof l=="function"&&1!=l.length&&(c=s=false);var h=this.__chain__,p=!!this.__actions__.length,l=i&&!h,c=c&&!p; return!i&&s?(o=c?o:new Un(this),o=n.apply(o,f),o.__actions__.push({func:Qe,args:[t],thisArg:T}),new On(o,h)):l&&c?n.apply(this,f):(o=this.thru(t),l?e?o.value()[0]:o.value():o)})}),r("pop push shift sort splice unshift".split(" "),function(n){var t=ri[n],r=/^(?:push|sort|unshift)$/.test(n)?"tap":"thru",e=/^(?:pop|shift)$/.test(n);An.prototype[n]=function(){var n=arguments;if(e&&!this.__chain__){var u=this.value();return t.apply(ff(u)?u:[],n)}return this[r](function(r){return t.apply(ff(r)?r:[],n)}); }}),mt(Un.prototype,function(n,t){var r=An[t];if(r){var e=r.name+"";oi.call(Gi,e)||(Gi[e]=[]),Gi[e].push({name:t,func:r})}}),Gi[Jr(T,2).name]=[{name:"wrapper",func:T}],Un.prototype.clone=function(){var n=new Un(this.__wrapped__);return n.__actions__=Ur(this.__actions__),n.__dir__=this.__dir__,n.__filtered__=this.__filtered__,n.__iteratees__=Ur(this.__iteratees__),n.__takeCount__=this.__takeCount__,n.__views__=Ur(this.__views__),n},Un.prototype.reverse=function(){if(this.__filtered__){var n=new Un(this); n.__dir__=-1,n.__filtered__=true}else n=this.clone(),n.__dir__*=-1;return n},Un.prototype.value=function(){var n,t=this.__wrapped__.value(),r=this.__dir__,e=ff(t),u=0>r,i=e?t.length:0;n=i;for(var o=this.__views__,f=0,c=-1,a=o.length;++c<a;){var l=o[c],s=l.size;switch(l.type){case"drop":f+=s;break;case"dropRight":n-=s;break;case"take":n=Ci(n,f+s);break;case"takeRight":f=Ui(f,n-s)}}if(n={start:f,end:n},o=n.start,f=n.end,n=f-o,o=u?f:o-1,f=this.__iteratees__,c=f.length,a=0,l=Ci(n,this.__takeCount__),!e||!u&&i==n&&l==n)return wr(t,this.__actions__); e=[];n:for(;n--&&a<l;){for(o+=r,u=-1,i=t[o];++u<c;){var h=f[u],s=h.type,h=(0,h.iteratee)(i);if(2==s)i=h;else if(!h){if(1==s)continue n;break n}}e[a++]=i}return e},An.prototype.at=To,An.prototype.chain=function(){return Ye(this)},An.prototype.commit=function(){return new On(this.value(),this.__chain__)},An.prototype.next=function(){this.__values__===T&&(this.__values__=mu(this.value()));var n=this.__index__>=this.__values__.length;return{done:n,value:n?T:this.__values__[this.__index__++]}},An.prototype.plant=function(n){ for(var t,r=this;r instanceof En;){var e=Fe(r);e.__index__=0,e.__values__=T,t?u.__wrapped__=e:t=e;var u=e,r=r.__wrapped__}return u.__wrapped__=n,t},An.prototype.reverse=function(){var n=this.__wrapped__;return n instanceof Un?(this.__actions__.length&&(n=new Un(this)),n=n.reverse(),n.__actions__.push({func:Qe,args:[Ge],thisArg:T}),new On(n,this.__chain__)):this.thru(Ge)},An.prototype.toJSON=An.prototype.valueOf=An.prototype.value=function(){return wr(this.__wrapped__,this.__actions__)},An.prototype.first=An.prototype.head, wi&&(An.prototype[wi]=Xe),An}();typeof define=="function"&&typeof define.amd=="object"&&define.amd?($n._=rt, define(function(){return rt})):Nn?((Nn.exports=rt)._=rt,Fn._=rt):$n._=rt}).call(this); This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode charactersOriginal file line number Diff line number Diff line change @@ -1,37 +1,60 @@ // TODO // - in AR: // - place virus mesh in the right y-position // - should shadows work? // - should lights be off? // - add an overlay telling user what to do // - in desktop: // - fix shadows import { ARButton } from './ARButton.js' import * as shapes from './shapes.js' let scene = null let camera = null let renderer = null const container = document.querySelector('.canvas') const overlay = document.querySelector('.overlay') const xrExitButton = document.querySelector('button.xr-exit') const scale = 0.1 const init = () => { scene = new THREE.Scene() camera = new THREE.PerspectiveCamera( 45, container.offsetWidth / container.offsetHeight, 0.01, 10, ) // TODO: How does this apply in AR? camera.position.set(0 * scale, 2 * scale, 6 * scale) camera.lookAt(0 * scale, 1 * scale, 0 * scale) // Setup lights. // TODO: How does this apply in AR? const hemisphereLight = new THREE.HemisphereLight(0xffffff, 0x333333, 0.5) hemisphereLight.position.set(0 * scale, 5 * scale, 5 * scale) scene.add(hemisphereLight) // TODO: There might be a better way of handling shadows. // TODO: Should we disable shadows/this light in AR? const directionalLight = new THREE.DirectionalLight(0xffffff, 0.5) directionalLight.position.set(0 * scale, 5 * scale, 5 * scale) directionalLight.castShadow = true // directionalLight.shadow.mapSize.width = 512 * 16 // directionalLight.shadow.mapSize.height = 512 * 16 scene.add(directionalLight) // Create renderer. renderer = new THREE.WebGLRenderer({ antialias: true, alpha: true }) renderer.setPixelRatio(window.devicePixelRatio) renderer.setSize(container.offsetWidth, container.offsetHeight) renderer.xr.enabled = true // TODO: How does this apply in AR? renderer.shadowMap.enabled = true container.appendChild(renderer.domElement) // Add "Click for AR" button. @@ -46,54 +69,11 @@ const init = () => { init() const floor = shapes.makeFloor(scale) scene.add(floor.mesh) const virus = shapes.makeVirus(scale) scene.add(virus.mesh) const reticle = shapes.makeReticle() let session = null let hitTestSourceRequested = false @@ -102,8 +82,10 @@ let renderedFirstARFrame = false xrExitButton.addEventListener('click', () => { session.end() scene.add(floor.mesh) scene.add(virus.mesh) virus.mesh.position.set(...virus.defaultPosition) scene.remove(reticle) session = null hitTestSourceRequested = false hitTestSource = null @@ -113,8 +95,10 @@ xrExitButton.addEventListener('click', () => { const render = (timestamp, frame) => { if (frame) { if (!renderedFirstARFrame) { // TODO: maybe put this in a util function. scene.remove(floor.mesh) scene.remove(virus.mesh) scene.add(reticle) overlay.classList.remove('hide') renderedFirstARFrame = true } @@ -128,25 +112,33 @@ const render = (timestamp, frame) => { hitTestSource = source }) }) session.addEventListener('end', () => { // TODO: maybe put this in a util function. // TODO: is some of this also happening when we click the // 'STOP AR' button? hitTestSourceRequested = false hitTestSource = null overlay.classList.add('hide') }) hitTestSourceRequested = true } if (hitTestSource) { const hitTestResults = frame.getHitTestResults(hitTestSource) if (hitTestResults.length) { const hit = hitTestResults[0] reticle.visible = true reticle.matrix.fromArray(hit.getPose(referenceSpace).transform.matrix) } else { reticle.visible = false } } } if (virus.mesh.parent === scene) { virus.mesh.rotation.y = timestamp * 0.0004 } renderer.render(scene, camera) } @@ -155,13 +147,50 @@ const animate = () => { renderer.setAnimationLoop(render) } // Add objects to scene. The scene should work on desktop, as is, // and also as a preview of what you might see on AR. // scene.add(reticle) animate() // const addRingBufferToScene = () => { // const geometry = new THREE.RingBufferGeometry(1, ftToMt(6), 32).rotateX( // -Math.PI / 2, // ) // const material = new THREE.MeshPhongMaterial({ // color: 0xff0000 * Math.random(), // }) // const mesh = new THREE.Mesh(geometry, material) // mesh.position.setFromMatrixPosition(reticle.matrix) // scene.add(mesh) // } // On select, add new geometry to scene. const onSelect = e => { if (reticle.visible) { if (virus.mesh.parent !== scene) { console.log('onSelect: scene.add(virus)') scene.add(virus.mesh) } else { console.log('onSelect: nothing') } virus.mesh.position.setFromMatrixPosition(reticle.matrix) } else { console.log('onSelect: reticle not visible') } } // Listen to the webxr controller's `select' event. const controller = renderer.xr.getController(0) controller.addEventListener('select', onSelect) scene.add(controller) const onWindowResize = () => { camera.aspect = container.offsetWidth / container.offsetHeight camera.updateProjectionMatrix() renderer.setSize(container.offsetWidth, container.offsetHeight) } // Listen to window's `resize` event. window.addEventListener('resize', onWindowResize, false) This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode charactersOriginal file line number Diff line number Diff line change @@ -0,0 +1,53 @@ // const ftToMt = x => x * 0.3048 const makeVirus = (scale = 1) => { const virusGeometry = new THREE.DodecahedronBufferGeometry(1 * scale) const virusMaterial = new THREE.MeshPhongMaterial({ color: 0xffbbbb }) const mesh = new THREE.Mesh(virusGeometry, virusMaterial) mesh.castShadow = true const defaultPosition = [0 * scale, 1 * scale, 0 * scale] mesh.position.set(...defaultPosition) return { mesh, defaultPosition } } const makeFloor = (scale = 1) => { const planeGeometry = new THREE.BoxGeometry( 3 * scale, 0.01 * scale, 3 * scale, ) const planeMaterial = new THREE.MeshPhongMaterial({ color: 0xffffff }) const mesh = new THREE.Mesh(planeGeometry, planeMaterial) mesh.receiveShadow = true const defaultPosition = [0 * scale, 0 * scale, 0 * scale] mesh.position.set(...defaultPosition) return { mesh, defaultPosition } } const makeReticle = () => { const reticle = new THREE.Object3D() reticle.matrixAutoUpdate = false reticle.visible = false const gap = Math.PI / 16 const segments = 4 const angles = [...Array(segments)].map((_, index, array) => [ index * (2 * Math.PI) / array.length + gap, 2 * Math.PI / array.length - 2 * gap, ]) angles.forEach(([from, to]) => { const geometry = new THREE.RingBufferGeometry( 0.05, 0.1, 32, 1, from, to, ).rotateX(-Math.PI / 2) const material = new THREE.MeshPhongMaterial({ color: 0xffffff }) const mesh = new THREE.Mesh(geometry, material) reticle.add(mesh) }) return reticle } export { makeVirus, makeFloor, makeReticle } -
gabrielflorit revised this gist
Apr 8, 2020 . 3 changed files with 0 additions and 153 deletions.There are no files selected for viewing
Binary file not shown.This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode charactersOriginal file line number Diff line number Diff line change @@ -1,153 +0,0 @@ Binary file not shown. -
gabrielflorit revised this gist
Apr 8, 2020 . 9 changed files with 322 additions and 84 deletions.There are no files selected for viewing
Binary file not shown.This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode charactersOriginal file line number Diff line number Diff line change @@ -1 +1 @@ *{box-sizing:border-box;margin:0;padding:0}.canvas{position:relative;width:100vw;height:100vw}canvas{background:#000}.hide{display:none}.overlay button.xr-exit{font-size:.9rem;padding:.65rem 1rem;color:#fff;opacity:.5;border:1px solid #fff;border-radius:4px;text-transform:uppercase;background:0 0;position:absolute;bottom:2.2rem;left:0;right:0;display:block;margin:0 auto} This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode charactersOriginal file line number Diff line number Diff line change @@ -1 +1 @@ !function(t){function n(c){if(e[c])return e[c].exports;var l=e[c]={i:c,l:!1,exports:{}};return t[c].call(l.exports,l,l.exports,n),l.l=!0,l.exports}var e={};n.m=t,n.c=e,n.i=function(t){return t},n.d=function(t,e,c){n.o(t,e)||Object.defineProperty(t,e,{configurable:!1,enumerable:!0,get:c})},n.n=function(t){var e=t&&t.__esModule?function(){return t.default}:function(){return t};return n.d(e,"a",e),e},n.o=function(t,n){return Object.prototype.hasOwnProperty.call(t,n)},n.p="",n(n.s=1)}([function(module,exports,__webpack_require__){"use strict";eval("\n\nObject.defineProperty(exports, \"__esModule\", {\n\tvalue: true\n});\n/**\n * @author mrdoob / http://mrdoob.com\n * @author Mugen87 / https://github.com/Mugen87\n */\n\nvar ARButton = {\n\n\tcreateButton: function createButton(renderer) {\n\t\tvar sessionInit = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n\n\t\tfunction showStartAR() /*device*/{\n\n\t\t\tvar currentSession = null;\n\n\t\t\tfunction onSessionStarted(session) {\n\n\t\t\t\tsession.addEventListener('end', onSessionEnded);\n\n\t\t\t\t/*\n session.updateWorldTrackingState( {\n \t'planeDetectionState': { 'enabled': true }\n } );\n */\n\n\t\t\t\trenderer.xr.setReferenceSpaceType('local');\n\t\t\t\trenderer.xr.setSession(session);\n\t\t\t\tbutton.textContent = 'STOP AR';\n\n\t\t\t\tcurrentSession = session;\n\t\t\t}\n\n\t\t\tfunction onSessionEnded() /*event*/{\n\n\t\t\t\tcurrentSession.removeEventListener('end', onSessionEnded);\n\n\t\t\t\tbutton.textContent = 'START AR';\n\n\t\t\t\tcurrentSession = null;\n\t\t\t}\n\n\t\t\t//\n\n\t\t\tbutton.style.display = '';\n\n\t\t\tbutton.style.cursor = 'pointer';\n\t\t\tbutton.style.left = 'calc(50% - 50px)';\n\t\t\tbutton.style.width = '100px';\n\n\t\t\tbutton.textContent = 'START AR';\n\n\t\t\tbutton.onmouseenter = function () {\n\n\t\t\t\tbutton.style.opacity = '1.0';\n\t\t\t};\n\n\t\t\tbutton.onmouseleave = function () {\n\n\t\t\t\tbutton.style.opacity = '0.5';\n\t\t\t};\n\n\t\t\tbutton.onclick = function () {\n\n\t\t\t\tif (currentSession === null) {\n\n\t\t\t\t\tnavigator.xr.requestSession('immersive-ar', sessionInit).then(onSessionStarted);\n\t\t\t\t} else {\n\n\t\t\t\t\tcurrentSession.end();\n\t\t\t\t}\n\t\t\t};\n\t\t}\n\n\t\tfunction disableButton() {\n\n\t\t\tbutton.style.display = '';\n\n\t\t\tbutton.style.cursor = 'auto';\n\t\t\tbutton.style.left = 'calc(50% - 75px)';\n\t\t\tbutton.style.width = '150px';\n\n\t\t\tbutton.onmouseenter = null;\n\t\t\tbutton.onmouseleave = null;\n\n\t\t\tbutton.onclick = null;\n\t\t}\n\n\t\tfunction showARNotSupported() {\n\n\t\t\tdisableButton();\n\n\t\t\tbutton.textContent = 'AR NOT SUPPORTED';\n\t\t}\n\n\t\tfunction stylizeElement(element) {\n\n\t\t\telement.style.position = 'absolute';\n\t\t\telement.style.bottom = '20px';\n\t\t\telement.style.padding = '12px 6px';\n\t\t\telement.style.border = '1px solid #fff';\n\t\t\telement.style.borderRadius = '4px';\n\t\t\telement.style.background = 'rgba(0,0,0,0.1)';\n\t\t\telement.style.color = '#fff';\n\t\t\telement.style.font = 'normal 13px sans-serif';\n\t\t\telement.style.textAlign = 'center';\n\t\t\telement.style.opacity = '0.5';\n\t\t\telement.style.outline = 'none';\n\t\t\telement.style.zIndex = '999';\n\t\t}\n\n\t\tif ('xr' in navigator) {\n\n\t\t\tvar button = document.createElement('button');\n\t\t\tbutton.style.display = 'none';\n\n\t\t\tstylizeElement(button);\n\n\t\t\tnavigator.xr.isSessionSupported('immersive-ar').then(function (supported) {\n\n\t\t\t\tsupported ? showStartAR() : showARNotSupported();\n\t\t\t}).catch(showARNotSupported);\n\n\t\t\treturn button;\n\t\t} else {\n\n\t\t\tvar message = document.createElement('a');\n\n\t\t\tif (window.isSecureContext === false) {\n\n\t\t\t\tmessage.href = document.location.href.replace(/^http:/, 'https:');\n\t\t\t\tmessage.innerHTML = 'WEBXR NEEDS HTTPS'; // TODO Improve message\n\t\t\t} else {\n\n\t\t\t\tmessage.href = 'https://immersiveweb.dev/';\n\t\t\t\tmessage.innerHTML = 'WEBXR NOT AVAILABLE';\n\t\t\t}\n\n\t\t\tmessage.style.left = 'calc(50% - 90px)';\n\t\t\tmessage.style.width = '180px';\n\t\t\tmessage.style.textDecoration = 'none';\n\n\t\t\tstylizeElement(message);\n\n\t\t\treturn message;\n\t\t}\n\t}\n\n};\n\nexports.ARButton = ARButton;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMC5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy9BUkJ1dHRvbi5qcz8yMmUxIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGF1dGhvciBtcmRvb2IgLyBodHRwOi8vbXJkb29iLmNvbVxuICogQGF1dGhvciBNdWdlbjg3IC8gaHR0cHM6Ly9naXRodWIuY29tL011Z2VuODdcbiAqL1xuXG52YXIgQVJCdXR0b24gPSB7XG5cblx0Y3JlYXRlQnV0dG9uOiBmdW5jdGlvbiAoIHJlbmRlcmVyLCBzZXNzaW9uSW5pdCA9IHt9ICkge1xuXG5cdFx0ZnVuY3Rpb24gc2hvd1N0YXJ0QVIoIC8qZGV2aWNlKi8gKSB7XG5cblx0XHRcdHZhciBjdXJyZW50U2Vzc2lvbiA9IG51bGw7XG5cblx0XHRcdGZ1bmN0aW9uIG9uU2Vzc2lvblN0YXJ0ZWQoIHNlc3Npb24gKSB7XG5cblx0XHRcdFx0c2Vzc2lvbi5hZGRFdmVudExpc3RlbmVyKCAnZW5kJywgb25TZXNzaW9uRW5kZWQgKTtcblxuXHRcdFx0XHQvKlxuXHRcdFx0XHRzZXNzaW9uLnVwZGF0ZVdvcmxkVHJhY2tpbmdTdGF0ZSgge1xuXHRcdFx0XHRcdCdwbGFuZURldGVjdGlvblN0YXRlJzogeyAnZW5hYmxlZCc6IHRydWUgfVxuXHRcdFx0XHR9ICk7XG5cdFx0XHRcdCovXG5cblx0XHRcdFx0cmVuZGVyZXIueHIuc2V0UmVmZXJlbmNlU3BhY2VUeXBlKCAnbG9jYWwnICk7XG5cdFx0XHRcdHJlbmRlcmVyLnhyLnNldFNlc3Npb24oIHNlc3Npb24gKTtcblx0XHRcdFx0YnV0dG9uLnRleHRDb250ZW50ID0gJ1NUT1AgQVInO1xuXG5cdFx0XHRcdGN1cnJlbnRTZXNzaW9uID0gc2Vzc2lvbjtcblxuXHRcdFx0fVxuXG5cdFx0XHRmdW5jdGlvbiBvblNlc3Npb25FbmRlZCggLypldmVudCovICkge1xuXG5cdFx0XHRcdGN1cnJlbnRTZXNzaW9uLnJlbW92ZUV2ZW50TGlzdGVuZXIoICdlbmQnLCBvblNlc3Npb25FbmRlZCApO1xuXG5cdFx0XHRcdGJ1dHRvbi50ZXh0Q29udGVudCA9ICdTVEFSVCBBUic7XG5cblx0XHRcdFx0Y3VycmVudFNlc3Npb24gPSBudWxsO1xuXG5cdFx0XHR9XG5cblx0XHRcdC8vXG5cblx0XHRcdGJ1dHRvbi5zdHlsZS5kaXNwbGF5ID0gJyc7XG5cblx0XHRcdGJ1dHRvbi5zdHlsZS5jdXJzb3IgPSAncG9pbnRlcic7XG5cdFx0XHRidXR0b24uc3R5bGUubGVmdCA9ICdjYWxjKDUwJSAtIDUwcHgpJztcblx0XHRcdGJ1dHRvbi5zdHlsZS53aWR0aCA9ICcxMDBweCc7XG5cblx0XHRcdGJ1dHRvbi50ZXh0Q29udGVudCA9ICdTVEFSVCBBUic7XG5cblx0XHRcdGJ1dHRvbi5vbm1vdXNlZW50ZXIgPSBmdW5jdGlvbiAoKSB7XG5cblx0XHRcdFx0YnV0dG9uLnN0eWxlLm9wYWNpdHkgPSAnMS4wJztcblxuXHRcdFx0fTtcblxuXHRcdFx0YnV0dG9uLm9ubW91c2VsZWF2ZSA9IGZ1bmN0aW9uICgpIHtcblxuXHRcdFx0XHRidXR0b24uc3R5bGUub3BhY2l0eSA9ICcwLjUnO1xuXG5cdFx0XHR9O1xuXG5cdFx0XHRidXR0b24ub25jbGljayA9IGZ1bmN0aW9uICgpIHtcblxuXHRcdFx0XHRpZiAoIGN1cnJlbnRTZXNzaW9uID09PSBudWxsICkge1xuXG5cdFx0XHRcdFx0bmF2aWdhdG9yLnhyLnJlcXVlc3RTZXNzaW9uKCAnaW1tZXJzaXZlLWFyJywgc2Vzc2lvbkluaXQgKS50aGVuKCBvblNlc3Npb25TdGFydGVkICk7XG5cblx0XHRcdFx0fSBlbHNlIHtcblxuXHRcdFx0XHRcdGN1cnJlbnRTZXNzaW9uLmVuZCgpO1xuXG5cdFx0XHRcdH1cblxuXHRcdFx0fTtcblxuXHRcdH1cblxuXHRcdGZ1bmN0aW9uIGRpc2FibGVCdXR0b24oKSB7XG5cblx0XHRcdGJ1dHRvbi5zdHlsZS5kaXNwbGF5ID0gJyc7XG5cblx0XHRcdGJ1dHRvbi5zdHlsZS5jdXJzb3IgPSAnYXV0byc7XG5cdFx0XHRidXR0b24uc3R5bGUubGVmdCA9ICdjYWxjKDUwJSAtIDc1cHgpJztcblx0XHRcdGJ1dHRvbi5zdHlsZS53aWR0aCA9ICcxNTBweCc7XG5cblx0XHRcdGJ1dHRvbi5vbm1vdXNlZW50ZXIgPSBudWxsO1xuXHRcdFx0YnV0dG9uLm9ubW91c2VsZWF2ZSA9IG51bGw7XG5cblx0XHRcdGJ1dHRvbi5vbmNsaWNrID0gbnVsbDtcblxuXHRcdH1cblxuXHRcdGZ1bmN0aW9uIHNob3dBUk5vdFN1cHBvcnRlZCgpIHtcblxuXHRcdFx0ZGlzYWJsZUJ1dHRvbigpO1xuXG5cdFx0XHRidXR0b24udGV4dENvbnRlbnQgPSAnQVIgTk9UIFNVUFBPUlRFRCc7XG5cblx0XHR9XG5cblx0XHRmdW5jdGlvbiBzdHlsaXplRWxlbWVudCggZWxlbWVudCApIHtcblxuXHRcdFx0ZWxlbWVudC5zdHlsZS5wb3NpdGlvbiA9ICdhYnNvbHV0ZSc7XG5cdFx0XHRlbGVtZW50LnN0eWxlLmJvdHRvbSA9ICcyMHB4Jztcblx0XHRcdGVsZW1lbnQuc3R5bGUucGFkZGluZyA9ICcxMnB4IDZweCc7XG5cdFx0XHRlbGVtZW50LnN0eWxlLmJvcmRlciA9ICcxcHggc29saWQgI2ZmZic7XG5cdFx0XHRlbGVtZW50LnN0eWxlLmJvcmRlclJhZGl1cyA9ICc0cHgnO1xuXHRcdFx0ZWxlbWVudC5zdHlsZS5iYWNrZ3JvdW5kID0gJ3JnYmEoMCwwLDAsMC4xKSc7XG5cdFx0XHRlbGVtZW50LnN0eWxlLmNvbG9yID0gJyNmZmYnO1xuXHRcdFx0ZWxlbWVudC5zdHlsZS5mb250ID0gJ25vcm1hbCAxM3B4IHNhbnMtc2VyaWYnO1xuXHRcdFx0ZWxlbWVudC5zdHlsZS50ZXh0QWxpZ24gPSAnY2VudGVyJztcblx0XHRcdGVsZW1lbnQuc3R5bGUub3BhY2l0eSA9ICcwLjUnO1xuXHRcdFx0ZWxlbWVudC5zdHlsZS5vdXRsaW5lID0gJ25vbmUnO1xuXHRcdFx0ZWxlbWVudC5zdHlsZS56SW5kZXggPSAnOTk5JztcblxuXHRcdH1cblxuXHRcdGlmICggJ3hyJyBpbiBuYXZpZ2F0b3IgKSB7XG5cblx0XHRcdHZhciBidXR0b24gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCAnYnV0dG9uJyApO1xuXHRcdFx0YnV0dG9uLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XG5cblx0XHRcdHN0eWxpemVFbGVtZW50KCBidXR0b24gKTtcblxuXHRcdFx0bmF2aWdhdG9yLnhyLmlzU2Vzc2lvblN1cHBvcnRlZCggJ2ltbWVyc2l2ZS1hcicgKS50aGVuKCBmdW5jdGlvbiAoIHN1cHBvcnRlZCApIHtcblxuXHRcdFx0XHRzdXBwb3J0ZWQgPyBzaG93U3RhcnRBUigpIDogc2hvd0FSTm90U3VwcG9ydGVkKCk7XG5cblx0XHRcdH0gKS5jYXRjaCggc2hvd0FSTm90U3VwcG9ydGVkICk7XG5cblx0XHRcdHJldHVybiBidXR0b247XG5cblx0XHR9IGVsc2Uge1xuXG5cdFx0XHR2YXIgbWVzc2FnZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoICdhJyApO1xuXG5cdFx0XHRpZiAoIHdpbmRvdy5pc1NlY3VyZUNvbnRleHQgPT09IGZhbHNlICkge1xuXG5cdFx0XHRcdG1lc3NhZ2UuaHJlZiA9IGRvY3VtZW50LmxvY2F0aW9uLmhyZWYucmVwbGFjZSggL15odHRwOi8sICdodHRwczonICk7XG5cdFx0XHRcdG1lc3NhZ2UuaW5uZXJIVE1MID0gJ1dFQlhSIE5FRURTIEhUVFBTJzsgLy8gVE9ETyBJbXByb3ZlIG1lc3NhZ2VcblxuXHRcdFx0fSBlbHNlIHtcblxuXHRcdFx0XHRtZXNzYWdlLmhyZWYgPSAnaHR0cHM6Ly9pbW1lcnNpdmV3ZWIuZGV2Lyc7XG5cdFx0XHRcdG1lc3NhZ2UuaW5uZXJIVE1MID0gJ1dFQlhSIE5PVCBBVkFJTEFCTEUnO1xuXG5cdFx0XHR9XG5cblx0XHRcdG1lc3NhZ2Uuc3R5bGUubGVmdCA9ICdjYWxjKDUwJSAtIDkwcHgpJztcblx0XHRcdG1lc3NhZ2Uuc3R5bGUud2lkdGggPSAnMTgwcHgnO1xuXHRcdFx0bWVzc2FnZS5zdHlsZS50ZXh0RGVjb3JhdGlvbiA9ICdub25lJztcblxuXHRcdFx0c3R5bGl6ZUVsZW1lbnQoIG1lc3NhZ2UgKTtcblxuXHRcdFx0cmV0dXJuIG1lc3NhZ2U7XG5cblx0XHR9XG5cblx0fVxuXG59O1xuXG5leHBvcnQgeyBBUkJ1dHRvbiB9O1xuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIEFSQnV0dG9uLmpzIl0sIm1hcHBpbmdzIjoiOzs7OztBQUFBOzs7OztBQUtBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7O0FBTUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUVBO0FBRUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBRUE7QUFDQTtBQTVKQTtBQUNBO0FBOEpBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///0\n")},function(module,exports,__webpack_require__){"use strict";eval("\n\nvar _ARButton = __webpack_require__(0);\n\nvar scene = void 0;\nvar camera = void 0;\nvar renderer = void 0;\nvar container = document.querySelector('.canvas');\nvar overlay = document.querySelector('.overlay');\nvar xrExitButton = document.querySelector('button.xr-exit');\n\nvar init = function init() {\n scene = new THREE.Scene();\n\n camera = new THREE.PerspectiveCamera(45, container.offsetWidth / container.offsetHeight, 0.1, 1000);\n\n // TODO: How does this apply in AR?\n camera.position.set(0, 2, 6);\n camera.lookAt(0, 1, 0);\n\n // TODO: How does this apply in AR?\n // Setup lights.\n var light = new THREE.HemisphereLight(0xffffff, 0x333333, 1);\n light.position.set(0, 1, 0);\n scene.add(light);\n\n // Create renderer.\n renderer = new THREE.WebGLRenderer({ antialias: true, alpha: true });\n renderer.setPixelRatio(window.devicePixelRatio);\n renderer.setSize(container.offsetWidth, container.offsetHeight);\n renderer.xr.enabled = true;\n container.appendChild(renderer.domElement);\n\n // Add \"Click for AR\" button.\n container.appendChild(_ARButton.ARButton.createButton(renderer, {\n requiredFeatures: ['hit-test'],\n optionalFeatures: ['dom-overlay'],\n domOverlay: { root: overlay }\n }));\n};\n\ninit();\n\n// const ftToMt = x => x * 0.3048\n\n// // Create reticle mesh.\n// const reticle = new THREE.Mesh(\n// new THREE.RingBufferGeometry(0.15, 0.2, 32).rotateX(-Math.PI / 2),\n// new THREE.MeshBasicMaterial(),\n// )\n\n// reticle.matrixAutoUpdate = false\n// reticle.visible = false\n// scene.add(reticle)\n\n// const addRingBufferToScene = () => {\n// const geometry = new THREE.RingBufferGeometry(1, ftToMt(6), 32).rotateX(\n// -Math.PI / 2,\n// )\n// const material = new THREE.MeshPhongMaterial({\n// color: 0xff0000 * Math.random(),\n// })\n// const mesh = new THREE.Mesh(geometry, material)\n// mesh.position.setFromMatrixPosition(reticle.matrix)\n// scene.add(mesh)\n// }\n\n// // On select, add new geometry to scene.\n// const onSelect = e => {\n// if (reticle.visible) {\n// addRingBufferToScene()\n// }\n// }\n\n// // Listen to the webxr controller's `select' event.\n// const controller = renderer.xr.getController(0)\n// controller.addEventListener('select', onSelect)\n// scene.add(controller)\n\n// let addedRingBuffer = false\n\nvar planeGeometry = new THREE.BoxGeometry(3, 0.01, 3);\nvar planeMaterial = new THREE.MeshPhongMaterial({ color: 0xffffff });\nvar planeMesh = new THREE.Mesh(planeGeometry, planeMaterial);\nscene.add(planeMesh);\n\nvar virusGeometry = new THREE.DodecahedronBufferGeometry(1);\nvar virusMaterial = new THREE.MeshPhongMaterial({ color: 0xffbbbb });\nvar virusMesh = new THREE.Mesh(virusGeometry, virusMaterial);\nvirusMesh.position.set(0, 2, 0);\nscene.add(virusMesh);\n\nvar session = null;\nvar hitTestSourceRequested = false;\nvar hitTestSource = null;\nvar renderedFirstARFrame = false;\n\nxrExitButton.addEventListener('click', function () {\n session.end();\n scene.add(planeMesh);\n scene.add(virusMesh);\n session = null;\n hitTestSourceRequested = false;\n hitTestSource = null;\n renderedFirstARFrame = false;\n});\n\nvar render = function render(timestamp, frame) {\n if (frame) {\n if (!renderedFirstARFrame) {\n scene.remove(planeMesh);\n scene.remove(virusMesh);\n overlay.classList.remove('hide');\n renderedFirstARFrame = true;\n }\n\n var referenceSpace = renderer.xr.getReferenceSpace();\n session = renderer.xr.getSession();\n\n if (hitTestSourceRequested === false) {\n session.requestReferenceSpace('viewer').then(function (referenceSpace) {\n session.requestHitTestSource({ space: referenceSpace }).then(function (source) {\n hitTestSource = source;\n });\n });\n session.addEventListener('end', function () {\n hitTestSourceRequested = false;\n hitTestSource = null;\n overlay.classList.add('hide');\n });\n hitTestSourceRequested = true;\n }\n if (hitTestSource) {\n var hitTestResults = frame.getHitTestResults(hitTestSource);\n if (hitTestResults.length) {\n var hit = hitTestResults[0];\n // reticle.visible = true\n // reticle.matrix.fromArray(hit.getPose(referenceSpace).transform.matrix)\n } else {\n // reticle.visible = false\n }\n }\n } else {\n virusMesh.rotation.y = timestamp * 0.0004;\n }\n renderer.render(scene, camera);\n};\n\nvar animate = function animate() {\n renderer.setAnimationLoop(render);\n};\n\nanimate();\n\n// const onWindowResize = () => {\n// camera.aspect = container.offsetWidth / container.offsetHeight\n// camera.updateProjectionMatrix()\n// renderer.setSize(container.offsetWidth, container.offsetHeight)\n// }\n\n// // Listen to window's `resize` event.\n// window.addEventListener('resize', onWindowResize, false)//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMS5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy9zY3JpcHQuanM/OWE5NSJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBUkJ1dHRvbiB9IGZyb20gJy4vQVJCdXR0b24uanMnXG5cbmxldCBzY2VuZVxubGV0IGNhbWVyYVxubGV0IHJlbmRlcmVyXG5sZXQgY29udGFpbmVyID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignLmNhbnZhcycpXG5sZXQgb3ZlcmxheSA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJy5vdmVybGF5JylcbmNvbnN0IHhyRXhpdEJ1dHRvbiA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJ2J1dHRvbi54ci1leGl0JylcblxuY29uc3QgaW5pdCA9ICgpID0+IHtcbiAgc2NlbmUgPSBuZXcgVEhSRUUuU2NlbmUoKVxuXG4gIGNhbWVyYSA9IG5ldyBUSFJFRS5QZXJzcGVjdGl2ZUNhbWVyYShcbiAgICA0NSxcbiAgICBjb250YWluZXIub2Zmc2V0V2lkdGggLyBjb250YWluZXIub2Zmc2V0SGVpZ2h0LFxuICAgIDAuMSxcbiAgICAxMDAwLFxuICApXG5cbiAgLy8gVE9ETzogSG93IGRvZXMgdGhpcyBhcHBseSBpbiBBUj9cbiAgY2FtZXJhLnBvc2l0aW9uLnNldCgwLCAyLCA2KVxuICBjYW1lcmEubG9va0F0KDAsIDEsIDApXG5cbiAgLy8gVE9ETzogSG93IGRvZXMgdGhpcyBhcHBseSBpbiBBUj9cbiAgLy8gU2V0dXAgbGlnaHRzLlxuICBjb25zdCBsaWdodCA9IG5ldyBUSFJFRS5IZW1pc3BoZXJlTGlnaHQoMHhmZmZmZmYsIDB4MzMzMzMzLCAxKVxuICBsaWdodC5wb3NpdGlvbi5zZXQoMCwgMSwgMClcbiAgc2NlbmUuYWRkKGxpZ2h0KVxuXG4gIC8vIENyZWF0ZSByZW5kZXJlci5cbiAgcmVuZGVyZXIgPSBuZXcgVEhSRUUuV2ViR0xSZW5kZXJlcih7IGFudGlhbGlhczogdHJ1ZSwgYWxwaGE6IHRydWUgfSlcbiAgcmVuZGVyZXIuc2V0UGl4ZWxSYXRpbyh3aW5kb3cuZGV2aWNlUGl4ZWxSYXRpbylcbiAgcmVuZGVyZXIuc2V0U2l6ZShjb250YWluZXIub2Zmc2V0V2lkdGgsIGNvbnRhaW5lci5vZmZzZXRIZWlnaHQpXG4gIHJlbmRlcmVyLnhyLmVuYWJsZWQgPSB0cnVlXG4gIGNvbnRhaW5lci5hcHBlbmRDaGlsZChyZW5kZXJlci5kb21FbGVtZW50KVxuXG4gIC8vIEFkZCBcIkNsaWNrIGZvciBBUlwiIGJ1dHRvbi5cbiAgY29udGFpbmVyLmFwcGVuZENoaWxkKFxuICAgIEFSQnV0dG9uLmNyZWF0ZUJ1dHRvbihyZW5kZXJlciwge1xuICAgICAgcmVxdWlyZWRGZWF0dXJlczogWydoaXQtdGVzdCddLFxuICAgICAgb3B0aW9uYWxGZWF0dXJlczogWydkb20tb3ZlcmxheSddLFxuICAgICAgZG9tT3ZlcmxheTogeyByb290OiBvdmVybGF5IH0sXG4gICAgfSksXG4gIClcbn1cblxuaW5pdCgpXG5cbi8vIGNvbnN0IGZ0VG9NdCA9IHggPT4geCAqIDAuMzA0OFxuXG4vLyAvLyBDcmVhdGUgcmV0aWNsZSBtZXNoLlxuLy8gY29uc3QgcmV0aWNsZSA9IG5ldyBUSFJFRS5NZXNoKFxuLy8gICBuZXcgVEhSRUUuUmluZ0J1ZmZlckdlb21ldHJ5KDAuMTUsIDAuMiwgMzIpLnJvdGF0ZVgoLU1hdGguUEkgLyAyKSxcbi8vICAgbmV3IFRIUkVFLk1lc2hCYXNpY01hdGVyaWFsKCksXG4vLyApXG5cbi8vIHJldGljbGUubWF0cml4QXV0b1VwZGF0ZSA9IGZhbHNlXG4vLyByZXRpY2xlLnZpc2libGUgPSBmYWxzZVxuLy8gc2NlbmUuYWRkKHJldGljbGUpXG5cbi8vIGNvbnN0IGFkZFJpbmdCdWZmZXJUb1NjZW5lID0gKCkgPT4ge1xuLy8gICBjb25zdCBnZW9tZXRyeSA9IG5ldyBUSFJFRS5SaW5nQnVmZmVyR2VvbWV0cnkoMSwgZnRUb010KDYpLCAzMikucm90YXRlWChcbi8vICAgICAtTWF0aC5QSSAvIDIsXG4vLyAgIClcbi8vICAgY29uc3QgbWF0ZXJpYWwgPSBuZXcgVEhSRUUuTWVzaFBob25nTWF0ZXJpYWwoe1xuLy8gICAgIGNvbG9yOiAweGZmMDAwMCAqIE1hdGgucmFuZG9tKCksXG4vLyAgIH0pXG4vLyAgIGNvbnN0IG1lc2ggPSBuZXcgVEhSRUUuTWVzaChnZW9tZXRyeSwgbWF0ZXJpYWwpXG4vLyAgIG1lc2gucG9zaXRpb24uc2V0RnJvbU1hdHJpeFBvc2l0aW9uKHJldGljbGUubWF0cml4KVxuLy8gICBzY2VuZS5hZGQobWVzaClcbi8vIH1cblxuLy8gLy8gT24gc2VsZWN0LCBhZGQgbmV3IGdlb21ldHJ5IHRvIHNjZW5lLlxuLy8gY29uc3Qgb25TZWxlY3QgPSBlID0+IHtcbi8vICAgaWYgKHJldGljbGUudmlzaWJsZSkge1xuLy8gICAgIGFkZFJpbmdCdWZmZXJUb1NjZW5lKClcbi8vICAgfVxuLy8gfVxuXG4vLyAvLyBMaXN0ZW4gdG8gdGhlIHdlYnhyIGNvbnRyb2xsZXIncyBgc2VsZWN0JyBldmVudC5cbi8vIGNvbnN0IGNvbnRyb2xsZXIgPSByZW5kZXJlci54ci5nZXRDb250cm9sbGVyKDApXG4vLyBjb250cm9sbGVyLmFkZEV2ZW50TGlzdGVuZXIoJ3NlbGVjdCcsIG9uU2VsZWN0KVxuLy8gc2NlbmUuYWRkKGNvbnRyb2xsZXIpXG5cbi8vIGxldCBhZGRlZFJpbmdCdWZmZXIgPSBmYWxzZVxuXG5jb25zdCBwbGFuZUdlb21ldHJ5ID0gbmV3IFRIUkVFLkJveEdlb21ldHJ5KDMsIDAuMDEsIDMpXG5jb25zdCBwbGFuZU1hdGVyaWFsID0gbmV3IFRIUkVFLk1lc2hQaG9uZ01hdGVyaWFsKHsgY29sb3I6IDB4ZmZmZmZmIH0pXG5jb25zdCBwbGFuZU1lc2ggPSBuZXcgVEhSRUUuTWVzaChwbGFuZUdlb21ldHJ5LCBwbGFuZU1hdGVyaWFsKVxuc2NlbmUuYWRkKHBsYW5lTWVzaClcblxuY29uc3QgdmlydXNHZW9tZXRyeSA9IG5ldyBUSFJFRS5Eb2RlY2FoZWRyb25CdWZmZXJHZW9tZXRyeSgxKVxuY29uc3QgdmlydXNNYXRlcmlhbCA9IG5ldyBUSFJFRS5NZXNoUGhvbmdNYXRlcmlhbCh7IGNvbG9yOiAweGZmYmJiYiB9KVxuY29uc3QgdmlydXNNZXNoID0gbmV3IFRIUkVFLk1lc2godmlydXNHZW9tZXRyeSwgdmlydXNNYXRlcmlhbClcbnZpcnVzTWVzaC5wb3NpdGlvbi5zZXQoMCwgMiwgMClcbnNjZW5lLmFkZCh2aXJ1c01lc2gpXG5cbmxldCBzZXNzaW9uID0gbnVsbFxubGV0IGhpdFRlc3RTb3VyY2VSZXF1ZXN0ZWQgPSBmYWxzZVxubGV0IGhpdFRlc3RTb3VyY2UgPSBudWxsXG5sZXQgcmVuZGVyZWRGaXJzdEFSRnJhbWUgPSBmYWxzZVxuXG54ckV4aXRCdXR0b24uYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCAoKSA9PiB7XG4gIHNlc3Npb24uZW5kKClcbiAgc2NlbmUuYWRkKHBsYW5lTWVzaClcbiAgc2NlbmUuYWRkKHZpcnVzTWVzaClcbnNlc3Npb24gPSBudWxsXG5oaXRUZXN0U291cmNlUmVxdWVzdGVkID0gZmFsc2VcbmhpdFRlc3RTb3VyY2UgPSBudWxsXG5yZW5kZXJlZEZpcnN0QVJGcmFtZSA9IGZhbHNlXG59KVxuXG5jb25zdCByZW5kZXIgPSAodGltZXN0YW1wLCBmcmFtZSkgPT4ge1xuICBpZiAoZnJhbWUpIHtcbiAgICBpZiAoIXJlbmRlcmVkRmlyc3RBUkZyYW1lKSB7XG4gICAgICBzY2VuZS5yZW1vdmUocGxhbmVNZXNoKVxuICAgICAgc2NlbmUucmVtb3ZlKHZpcnVzTWVzaClcbiAgICAgIG92ZXJsYXkuY2xhc3NMaXN0LnJlbW92ZSgnaGlkZScpXG4gICAgICByZW5kZXJlZEZpcnN0QVJGcmFtZSA9IHRydWVcbiAgICB9XG5cbiAgICBjb25zdCByZWZlcmVuY2VTcGFjZSA9IHJlbmRlcmVyLnhyLmdldFJlZmVyZW5jZVNwYWNlKClcbiAgICBzZXNzaW9uID0gcmVuZGVyZXIueHIuZ2V0U2Vzc2lvbigpXG5cbiAgICBpZiAoaGl0VGVzdFNvdXJjZVJlcXVlc3RlZCA9PT0gZmFsc2UpIHtcbiAgICAgIHNlc3Npb24ucmVxdWVzdFJlZmVyZW5jZVNwYWNlKCd2aWV3ZXInKS50aGVuKHJlZmVyZW5jZVNwYWNlID0+IHtcbiAgICAgICAgc2Vzc2lvbi5yZXF1ZXN0SGl0VGVzdFNvdXJjZSh7IHNwYWNlOiByZWZlcmVuY2VTcGFjZSB9KS50aGVuKHNvdXJjZSA9PiB7XG4gICAgICAgICAgaGl0VGVzdFNvdXJjZSA9IHNvdXJjZVxuICAgICAgICB9KVxuICAgICAgfSlcbiAgICAgIHNlc3Npb24uYWRkRXZlbnRMaXN0ZW5lcignZW5kJywgKCkgPT4ge1xuICAgICAgICBoaXRUZXN0U291cmNlUmVxdWVzdGVkID0gZmFsc2VcbiAgICAgICAgaGl0VGVzdFNvdXJjZSA9IG51bGxcbiAgICAgICAgb3ZlcmxheS5jbGFzc0xpc3QuYWRkKCdoaWRlJylcbiAgICAgIH0pXG4gICAgICBoaXRUZXN0U291cmNlUmVxdWVzdGVkID0gdHJ1ZVxuICAgIH1cbiAgICBpZiAoaGl0VGVzdFNvdXJjZSkge1xuICAgICAgY29uc3QgaGl0VGVzdFJlc3VsdHMgPSBmcmFtZS5nZXRIaXRUZXN0UmVzdWx0cyhoaXRUZXN0U291cmNlKVxuICAgICAgaWYgKGhpdFRlc3RSZXN1bHRzLmxlbmd0aCkge1xuICAgICAgICBjb25zdCBoaXQgPSBoaXRUZXN0UmVzdWx0c1swXVxuICAgICAgICAvLyByZXRpY2xlLnZpc2libGUgPSB0cnVlXG4gICAgICAgIC8vIHJldGljbGUubWF0cml4LmZyb21BcnJheShoaXQuZ2V0UG9zZShyZWZlcmVuY2VTcGFjZSkudHJhbnNmb3JtLm1hdHJpeClcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIHJldGljbGUudmlzaWJsZSA9IGZhbHNlXG4gICAgICB9XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIHZpcnVzTWVzaC5yb3RhdGlvbi55ID0gdGltZXN0YW1wICogMC4wMDA0XG4gIH1cbiAgcmVuZGVyZXIucmVuZGVyKHNjZW5lLCBjYW1lcmEpXG59XG5cbmNvbnN0IGFuaW1hdGUgPSAoKSA9PiB7XG4gIHJlbmRlcmVyLnNldEFuaW1hdGlvbkxvb3AocmVuZGVyKVxufVxuXG5hbmltYXRlKClcblxuLy8gY29uc3Qgb25XaW5kb3dSZXNpemUgPSAoKSA9PiB7XG4vLyAgIGNhbWVyYS5hc3BlY3QgPSBjb250YWluZXIub2Zmc2V0V2lkdGggLyBjb250YWluZXIub2Zmc2V0SGVpZ2h0XG4vLyAgIGNhbWVyYS51cGRhdGVQcm9qZWN0aW9uTWF0cml4KClcbi8vICAgcmVuZGVyZXIuc2V0U2l6ZShjb250YWluZXIub2Zmc2V0V2lkdGgsIGNvbnRhaW5lci5vZmZzZXRIZWlnaHQpXG4vLyB9XG5cbi8vIC8vIExpc3RlbiB0byB3aW5kb3cncyBgcmVzaXplYCBldmVudC5cbi8vIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdyZXNpemUnLCBvbldpbmRvd1Jlc2l6ZSwgZmFsc2UpXG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gc2NyaXB0LmpzIl0sIm1hcHBpbmdzIjoiOztBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFNQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUhBO0FBTUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///1\n")}]); This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode charactersOriginal file line number Diff line number Diff line change @@ -7,6 +7,12 @@ <link href='dist.css' rel='stylesheet' /> </head> <body> <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.</p> <div class='canvas'></div> <div class='overlay hide'><button class='xr-exit'>stop ar</button></div> <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.</p> <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.</p> <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.</p> <script src='./three.min.js'></script> <script src='dist.js'></script> </body> Binary file not shown.This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode charactersOriginal file line number Diff line number Diff line change @@ -0,0 +1,153 @@ { "accessors" : [ { "bufferView" : 0, "componentType" : 5123, "count" : 7560, "max" : [ 7559 ], "min" : [ 0 ], "name" : "buffer-0-accessor-indices-buffer-0-mesh-0", "type" : "SCALAR" }, { "bufferView" : 2, "componentType" : 5126, "count" : 7560, "max" : [ 10.59671688079834, 21.19321632385254, 10.59671688079834 ], "min" : [ -10.59671688079834, -0.0002169999934267253, -10.59671688079834 ], "name" : "buffer-0-accessor-position-buffer-0-mesh-0", "type" : "VEC3" }, { "bufferView" : 2, "byteOffset" : 90720, "componentType" : 5126, "count" : 7560, "max" : [ 0.9957166314125061, 0.9957166314125061, 0.9957166314125061 ], "min" : [ -0.9957166314125061, -0.9957167506217957, -0.9957166314125061 ], "name" : "buffer-0-accessor-normal-buffer-0-mesh-0", "type" : "VEC3" }, { "bufferView" : 1, "componentType" : 5126, "count" : 7560, "max" : [ 1, 0 ], "min" : [ 0, -1 ], "name" : "buffer-0-accessor-texcoord-buffer-0-mesh-0", "type" : "VEC2" }, { "bufferView" : 3, "componentType" : 5126, "count" : 0, "max" : [ 0, 0, 0, 0 ], "min" : [ 0, 0, 0, 0 ], "name" : "buffer-0-accessor-color-buffer-0-mesh-0", "type" : "VEC4" } ], "asset" : { "generator" : "Obj2GltfConverter", "version" : "2.0" }, "bufferViews" : [ { "buffer" : 0, "byteLength" : 15120, "byteStride" : 0, "name" : "buffer-0-bufferview-ushort", "target" : 34963 }, { "buffer" : 0, "byteLength" : 60480, "byteOffset" : 15120, "byteStride" : 8, "name" : "buffer-0-bufferview-vec2", "target" : 34962 }, { "buffer" : 0, "byteLength" : 181440, "byteOffset" : 75600, "byteStride" : 12, "name" : "buffer-0-bufferview-vec3", "target" : 34962 }, { "buffer" : 0, "byteLength" : 1, "name" : "buffer-0-bufferview-vec4" } ], "buffers" : [ { "byteLength" : 257040, "name" : "buffer-0", "uri" : "1409 Virus.bin" } ], "images" : [ { "mimeType" : "image/png", "name" : "Mat-image", "uri" : "1409 Virus.png" } ], "materials" : [ { "doubleSided" : true, "name" : "Mat", "pbrMetallicRoughness" : { "baseColorTexture" : { "index" : 0 }, "metallicFactor" : 0, "roughnessFactor" : 0.9699476628648295 } } ], "meshes" : [ { "name" : "buffer-0-mesh-0", "primitives" : [ { "attributes" : { "NORMAL" : 2, "POSITION" : 1, "TEXCOORD_0" : 3 }, "indices" : 0, "material" : 0 } ] } ], "nodes" : [ { "mesh" : 0, "name" : "node-0" } ], "samplers" : [ { "name" : "Mat-sampler", "wrapS" : 10497, "wrapT" : 10497 } ], "scenes" : [ { "name" : "scene-0", "nodes" : [ 0 ] } ], "textures" : [ { "name" : "Mat-texture", "sampler" : 0, "source" : 0 } ] } LoadingSorry, something went wrong. Reload?Sorry, we cannot display this file.Sorry, this file is invalid so it cannot be displayed.This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode charactersOriginal file line number Diff line number Diff line change @@ -1,115 +1,167 @@ import { ARButton } from './ARButton.js' let scene let camera let renderer let container = document.querySelector('.canvas') let overlay = document.querySelector('.overlay') const xrExitButton = document.querySelector('button.xr-exit') const init = () => { scene = new THREE.Scene() camera = new THREE.PerspectiveCamera( 45, container.offsetWidth / container.offsetHeight, 0.1, 1000, ) // TODO: How does this apply in AR? camera.position.set(0, 2, 6) camera.lookAt(0, 1, 0) // TODO: How does this apply in AR? // Setup lights. const light = new THREE.HemisphereLight(0xffffff, 0x333333, 1) light.position.set(0, 1, 0) scene.add(light) // Create renderer. renderer = new THREE.WebGLRenderer({ antialias: true, alpha: true }) renderer.setPixelRatio(window.devicePixelRatio) renderer.setSize(container.offsetWidth, container.offsetHeight) renderer.xr.enabled = true container.appendChild(renderer.domElement) // Add "Click for AR" button. container.appendChild( ARButton.createButton(renderer, { requiredFeatures: ['hit-test'], optionalFeatures: ['dom-overlay'], domOverlay: { root: overlay }, }), ) } init() // const ftToMt = x => x * 0.3048 // // Create reticle mesh. // const reticle = new THREE.Mesh( // new THREE.RingBufferGeometry(0.15, 0.2, 32).rotateX(-Math.PI / 2), // new THREE.MeshBasicMaterial(), // ) // reticle.matrixAutoUpdate = false // reticle.visible = false // scene.add(reticle) // const addRingBufferToScene = () => { // const geometry = new THREE.RingBufferGeometry(1, ftToMt(6), 32).rotateX( // -Math.PI / 2, // ) // const material = new THREE.MeshPhongMaterial({ // color: 0xff0000 * Math.random(), // }) // const mesh = new THREE.Mesh(geometry, material) // mesh.position.setFromMatrixPosition(reticle.matrix) // scene.add(mesh) // } // // On select, add new geometry to scene. // const onSelect = e => { // if (reticle.visible) { // addRingBufferToScene() // } // } // // Listen to the webxr controller's `select' event. // const controller = renderer.xr.getController(0) // controller.addEventListener('select', onSelect) // scene.add(controller) // let addedRingBuffer = false const planeGeometry = new THREE.BoxGeometry(3, 0.01, 3) const planeMaterial = new THREE.MeshPhongMaterial({ color: 0xffffff }) const planeMesh = new THREE.Mesh(planeGeometry, planeMaterial) scene.add(planeMesh) const virusGeometry = new THREE.DodecahedronBufferGeometry(1) const virusMaterial = new THREE.MeshPhongMaterial({ color: 0xffbbbb }) const virusMesh = new THREE.Mesh(virusGeometry, virusMaterial) virusMesh.position.set(0, 2, 0) scene.add(virusMesh) let session = null let hitTestSourceRequested = false let hitTestSource = null let renderedFirstARFrame = false xrExitButton.addEventListener('click', () => { session.end() scene.add(planeMesh) scene.add(virusMesh) session = null hitTestSourceRequested = false hitTestSource = null renderedFirstARFrame = false }) const render = (timestamp, frame) => { if (frame) { if (!renderedFirstARFrame) { scene.remove(planeMesh) scene.remove(virusMesh) overlay.classList.remove('hide') renderedFirstARFrame = true } const referenceSpace = renderer.xr.getReferenceSpace() session = renderer.xr.getSession() if (hitTestSourceRequested === false) { session.requestReferenceSpace('viewer').then(referenceSpace => { session.requestHitTestSource({ space: referenceSpace }).then(source => { hitTestSource = source }) }) session.addEventListener('end', () => { hitTestSourceRequested = false hitTestSource = null overlay.classList.add('hide') }) hitTestSourceRequested = true } if (hitTestSource) { const hitTestResults = frame.getHitTestResults(hitTestSource) if (hitTestResults.length) { const hit = hitTestResults[0] // reticle.visible = true // reticle.matrix.fromArray(hit.getPose(referenceSpace).transform.matrix) } else { // reticle.visible = false } } } else { virusMesh.rotation.y = timestamp * 0.0004 } renderer.render(scene, camera) } const animate = () => { renderer.setAnimationLoop(render) } animate() // const onWindowResize = () => { // camera.aspect = container.offsetWidth / container.offsetHeight // camera.updateProjectionMatrix() // renderer.setSize(container.offsetWidth, container.offsetHeight) // } // // Listen to window's `resize` event. // window.addEventListener('resize', onWindowResize, false) This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode charactersOriginal file line number Diff line number Diff line change @@ -3,5 +3,32 @@ margin 0 padding 0 .canvas position relative width 100vw // TODO: be smart about height height 100vw canvas background black .hide display none .overlay button &.xr-exit font-size 0.9rem padding 0.65rem 1rem color white opacity 0.5 border solid white 1px border-radius 4px text-transform uppercase background none position absolute bottom 2.2rem left 0 right 0 display block margin 0 auto -
gabrielflorit created this gist
Apr 6, 2020 .There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode charactersOriginal file line number Diff line number Diff line change @@ -0,0 +1,3 @@ license: mit height: 500 border: no This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode charactersOriginal file line number Diff line number Diff line change @@ -0,0 +1,5 @@ { "singleQuote": true, "semi": false, "trailingComma": "all" } This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode charactersOriginal file line number Diff line number Diff line change @@ -0,0 +1,165 @@ /** * @author mrdoob / http://mrdoob.com * @author Mugen87 / https://github.com/Mugen87 */ var ARButton = { createButton: function ( renderer, sessionInit = {} ) { function showStartAR( /*device*/ ) { var currentSession = null; function onSessionStarted( session ) { session.addEventListener( 'end', onSessionEnded ); /* session.updateWorldTrackingState( { 'planeDetectionState': { 'enabled': true } } ); */ renderer.xr.setReferenceSpaceType( 'local' ); renderer.xr.setSession( session ); button.textContent = 'STOP AR'; currentSession = session; } function onSessionEnded( /*event*/ ) { currentSession.removeEventListener( 'end', onSessionEnded ); button.textContent = 'START AR'; currentSession = null; } // button.style.display = ''; button.style.cursor = 'pointer'; button.style.left = 'calc(50% - 50px)'; button.style.width = '100px'; button.textContent = 'START AR'; button.onmouseenter = function () { button.style.opacity = '1.0'; }; button.onmouseleave = function () { button.style.opacity = '0.5'; }; button.onclick = function () { if ( currentSession === null ) { navigator.xr.requestSession( 'immersive-ar', sessionInit ).then( onSessionStarted ); } else { currentSession.end(); } }; } function disableButton() { button.style.display = ''; button.style.cursor = 'auto'; button.style.left = 'calc(50% - 75px)'; button.style.width = '150px'; button.onmouseenter = null; button.onmouseleave = null; button.onclick = null; } function showARNotSupported() { disableButton(); button.textContent = 'AR NOT SUPPORTED'; } function stylizeElement( element ) { element.style.position = 'absolute'; element.style.bottom = '20px'; element.style.padding = '12px 6px'; element.style.border = '1px solid #fff'; element.style.borderRadius = '4px'; element.style.background = 'rgba(0,0,0,0.1)'; element.style.color = '#fff'; element.style.font = 'normal 13px sans-serif'; element.style.textAlign = 'center'; element.style.opacity = '0.5'; element.style.outline = 'none'; element.style.zIndex = '999'; } if ( 'xr' in navigator ) { var button = document.createElement( 'button' ); button.style.display = 'none'; stylizeElement( button ); navigator.xr.isSessionSupported( 'immersive-ar' ).then( function ( supported ) { supported ? showStartAR() : showARNotSupported(); } ).catch( showARNotSupported ); return button; } else { var message = document.createElement( 'a' ); if ( window.isSecureContext === false ) { message.href = document.location.href.replace( /^http:/, 'https:' ); message.innerHTML = 'WEBXR NEEDS HTTPS'; // TODO Improve message } else { message.href = 'https://immersiveweb.dev/'; message.innerHTML = 'WEBXR NOT AVAILABLE'; } message.style.left = 'calc(50% - 90px)'; message.style.width = '180px'; message.style.textDecoration = 'none'; stylizeElement( message ); return message; } } }; export { ARButton }; This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode charactersOriginal file line number Diff line number Diff line change @@ -0,0 +1 @@ [Made with blockup](https://github.com/gabrielflorit/blockup) This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode charactersOriginal file line number Diff line number Diff line change @@ -0,0 +1 @@ *{box-sizing:border-box;margin:0;padding:0}body{background:#000} This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode charactersOriginal file line number Diff line number Diff line change @@ -0,0 +1 @@ !function(t){function n(c){if(e[c])return e[c].exports;var l=e[c]={i:c,l:!1,exports:{}};return t[c].call(l.exports,l,l.exports,n),l.l=!0,l.exports}var e={};n.m=t,n.c=e,n.i=function(t){return t},n.d=function(t,e,c){n.o(t,e)||Object.defineProperty(t,e,{configurable:!1,enumerable:!0,get:c})},n.n=function(t){var e=t&&t.__esModule?function(){return t.default}:function(){return t};return n.d(e,"a",e),e},n.o=function(t,n){return Object.prototype.hasOwnProperty.call(t,n)},n.p="",n(n.s=1)}([function(module,exports,__webpack_require__){"use strict";eval("\n\nObject.defineProperty(exports, \"__esModule\", {\n\tvalue: true\n});\n/**\n * @author mrdoob / http://mrdoob.com\n * @author Mugen87 / https://github.com/Mugen87\n */\n\nvar ARButton = {\n\n\tcreateButton: function createButton(renderer) {\n\t\tvar sessionInit = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n\n\t\tfunction showStartAR() /*device*/{\n\n\t\t\tvar currentSession = null;\n\n\t\t\tfunction onSessionStarted(session) {\n\n\t\t\t\tsession.addEventListener('end', onSessionEnded);\n\n\t\t\t\t/*\n session.updateWorldTrackingState( {\n \t'planeDetectionState': { 'enabled': true }\n } );\n */\n\n\t\t\t\trenderer.xr.setReferenceSpaceType('local');\n\t\t\t\trenderer.xr.setSession(session);\n\t\t\t\tbutton.textContent = 'STOP AR';\n\n\t\t\t\tcurrentSession = session;\n\t\t\t}\n\n\t\t\tfunction onSessionEnded() /*event*/{\n\n\t\t\t\tcurrentSession.removeEventListener('end', onSessionEnded);\n\n\t\t\t\tbutton.textContent = 'START AR';\n\n\t\t\t\tcurrentSession = null;\n\t\t\t}\n\n\t\t\t//\n\n\t\t\tbutton.style.display = '';\n\n\t\t\tbutton.style.cursor = 'pointer';\n\t\t\tbutton.style.left = 'calc(50% - 50px)';\n\t\t\tbutton.style.width = '100px';\n\n\t\t\tbutton.textContent = 'START AR';\n\n\t\t\tbutton.onmouseenter = function () {\n\n\t\t\t\tbutton.style.opacity = '1.0';\n\t\t\t};\n\n\t\t\tbutton.onmouseleave = function () {\n\n\t\t\t\tbutton.style.opacity = '0.5';\n\t\t\t};\n\n\t\t\tbutton.onclick = function () {\n\n\t\t\t\tif (currentSession === null) {\n\n\t\t\t\t\tnavigator.xr.requestSession('immersive-ar', sessionInit).then(onSessionStarted);\n\t\t\t\t} else {\n\n\t\t\t\t\tcurrentSession.end();\n\t\t\t\t}\n\t\t\t};\n\t\t}\n\n\t\tfunction disableButton() {\n\n\t\t\tbutton.style.display = '';\n\n\t\t\tbutton.style.cursor = 'auto';\n\t\t\tbutton.style.left = 'calc(50% - 75px)';\n\t\t\tbutton.style.width = '150px';\n\n\t\t\tbutton.onmouseenter = null;\n\t\t\tbutton.onmouseleave = null;\n\n\t\t\tbutton.onclick = null;\n\t\t}\n\n\t\tfunction showARNotSupported() {\n\n\t\t\tdisableButton();\n\n\t\t\tbutton.textContent = 'AR NOT SUPPORTED';\n\t\t}\n\n\t\tfunction stylizeElement(element) {\n\n\t\t\telement.style.position = 'absolute';\n\t\t\telement.style.bottom = '20px';\n\t\t\telement.style.padding = '12px 6px';\n\t\t\telement.style.border = '1px solid #fff';\n\t\t\telement.style.borderRadius = '4px';\n\t\t\telement.style.background = 'rgba(0,0,0,0.1)';\n\t\t\telement.style.color = '#fff';\n\t\t\telement.style.font = 'normal 13px sans-serif';\n\t\t\telement.style.textAlign = 'center';\n\t\t\telement.style.opacity = '0.5';\n\t\t\telement.style.outline = 'none';\n\t\t\telement.style.zIndex = '999';\n\t\t}\n\n\t\tif ('xr' in navigator) {\n\n\t\t\tvar button = document.createElement('button');\n\t\t\tbutton.style.display = 'none';\n\n\t\t\tstylizeElement(button);\n\n\t\t\tnavigator.xr.isSessionSupported('immersive-ar').then(function (supported) {\n\n\t\t\t\tsupported ? showStartAR() : showARNotSupported();\n\t\t\t}).catch(showARNotSupported);\n\n\t\t\treturn button;\n\t\t} else {\n\n\t\t\tvar message = document.createElement('a');\n\n\t\t\tif (window.isSecureContext === false) {\n\n\t\t\t\tmessage.href = document.location.href.replace(/^http:/, 'https:');\n\t\t\t\tmessage.innerHTML = 'WEBXR NEEDS HTTPS'; // TODO Improve message\n\t\t\t} else {\n\n\t\t\t\tmessage.href = 'https://immersiveweb.dev/';\n\t\t\t\tmessage.innerHTML = 'WEBXR NOT AVAILABLE';\n\t\t\t}\n\n\t\t\tmessage.style.left = 'calc(50% - 90px)';\n\t\t\tmessage.style.width = '180px';\n\t\t\tmessage.style.textDecoration = 'none';\n\n\t\t\tstylizeElement(message);\n\n\t\t\treturn message;\n\t\t}\n\t}\n\n};\n\nexports.ARButton = ARButton;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMC5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy9BUkJ1dHRvbi5qcz8yMmUxIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGF1dGhvciBtcmRvb2IgLyBodHRwOi8vbXJkb29iLmNvbVxuICogQGF1dGhvciBNdWdlbjg3IC8gaHR0cHM6Ly9naXRodWIuY29tL011Z2VuODdcbiAqL1xuXG52YXIgQVJCdXR0b24gPSB7XG5cblx0Y3JlYXRlQnV0dG9uOiBmdW5jdGlvbiAoIHJlbmRlcmVyLCBzZXNzaW9uSW5pdCA9IHt9ICkge1xuXG5cdFx0ZnVuY3Rpb24gc2hvd1N0YXJ0QVIoIC8qZGV2aWNlKi8gKSB7XG5cblx0XHRcdHZhciBjdXJyZW50U2Vzc2lvbiA9IG51bGw7XG5cblx0XHRcdGZ1bmN0aW9uIG9uU2Vzc2lvblN0YXJ0ZWQoIHNlc3Npb24gKSB7XG5cblx0XHRcdFx0c2Vzc2lvbi5hZGRFdmVudExpc3RlbmVyKCAnZW5kJywgb25TZXNzaW9uRW5kZWQgKTtcblxuXHRcdFx0XHQvKlxuXHRcdFx0XHRzZXNzaW9uLnVwZGF0ZVdvcmxkVHJhY2tpbmdTdGF0ZSgge1xuXHRcdFx0XHRcdCdwbGFuZURldGVjdGlvblN0YXRlJzogeyAnZW5hYmxlZCc6IHRydWUgfVxuXHRcdFx0XHR9ICk7XG5cdFx0XHRcdCovXG5cblx0XHRcdFx0cmVuZGVyZXIueHIuc2V0UmVmZXJlbmNlU3BhY2VUeXBlKCAnbG9jYWwnICk7XG5cdFx0XHRcdHJlbmRlcmVyLnhyLnNldFNlc3Npb24oIHNlc3Npb24gKTtcblx0XHRcdFx0YnV0dG9uLnRleHRDb250ZW50ID0gJ1NUT1AgQVInO1xuXG5cdFx0XHRcdGN1cnJlbnRTZXNzaW9uID0gc2Vzc2lvbjtcblxuXHRcdFx0fVxuXG5cdFx0XHRmdW5jdGlvbiBvblNlc3Npb25FbmRlZCggLypldmVudCovICkge1xuXG5cdFx0XHRcdGN1cnJlbnRTZXNzaW9uLnJlbW92ZUV2ZW50TGlzdGVuZXIoICdlbmQnLCBvblNlc3Npb25FbmRlZCApO1xuXG5cdFx0XHRcdGJ1dHRvbi50ZXh0Q29udGVudCA9ICdTVEFSVCBBUic7XG5cblx0XHRcdFx0Y3VycmVudFNlc3Npb24gPSBudWxsO1xuXG5cdFx0XHR9XG5cblx0XHRcdC8vXG5cblx0XHRcdGJ1dHRvbi5zdHlsZS5kaXNwbGF5ID0gJyc7XG5cblx0XHRcdGJ1dHRvbi5zdHlsZS5jdXJzb3IgPSAncG9pbnRlcic7XG5cdFx0XHRidXR0b24uc3R5bGUubGVmdCA9ICdjYWxjKDUwJSAtIDUwcHgpJztcblx0XHRcdGJ1dHRvbi5zdHlsZS53aWR0aCA9ICcxMDBweCc7XG5cblx0XHRcdGJ1dHRvbi50ZXh0Q29udGVudCA9ICdTVEFSVCBBUic7XG5cblx0XHRcdGJ1dHRvbi5vbm1vdXNlZW50ZXIgPSBmdW5jdGlvbiAoKSB7XG5cblx0XHRcdFx0YnV0dG9uLnN0eWxlLm9wYWNpdHkgPSAnMS4wJztcblxuXHRcdFx0fTtcblxuXHRcdFx0YnV0dG9uLm9ubW91c2VsZWF2ZSA9IGZ1bmN0aW9uICgpIHtcblxuXHRcdFx0XHRidXR0b24uc3R5bGUub3BhY2l0eSA9ICcwLjUnO1xuXG5cdFx0XHR9O1xuXG5cdFx0XHRidXR0b24ub25jbGljayA9IGZ1bmN0aW9uICgpIHtcblxuXHRcdFx0XHRpZiAoIGN1cnJlbnRTZXNzaW9uID09PSBudWxsICkge1xuXG5cdFx0XHRcdFx0bmF2aWdhdG9yLnhyLnJlcXVlc3RTZXNzaW9uKCAnaW1tZXJzaXZlLWFyJywgc2Vzc2lvbkluaXQgKS50aGVuKCBvblNlc3Npb25TdGFydGVkICk7XG5cblx0XHRcdFx0fSBlbHNlIHtcblxuXHRcdFx0XHRcdGN1cnJlbnRTZXNzaW9uLmVuZCgpO1xuXG5cdFx0XHRcdH1cblxuXHRcdFx0fTtcblxuXHRcdH1cblxuXHRcdGZ1bmN0aW9uIGRpc2FibGVCdXR0b24oKSB7XG5cblx0XHRcdGJ1dHRvbi5zdHlsZS5kaXNwbGF5ID0gJyc7XG5cblx0XHRcdGJ1dHRvbi5zdHlsZS5jdXJzb3IgPSAnYXV0byc7XG5cdFx0XHRidXR0b24uc3R5bGUubGVmdCA9ICdjYWxjKDUwJSAtIDc1cHgpJztcblx0XHRcdGJ1dHRvbi5zdHlsZS53aWR0aCA9ICcxNTBweCc7XG5cblx0XHRcdGJ1dHRvbi5vbm1vdXNlZW50ZXIgPSBudWxsO1xuXHRcdFx0YnV0dG9uLm9ubW91c2VsZWF2ZSA9IG51bGw7XG5cblx0XHRcdGJ1dHRvbi5vbmNsaWNrID0gbnVsbDtcblxuXHRcdH1cblxuXHRcdGZ1bmN0aW9uIHNob3dBUk5vdFN1cHBvcnRlZCgpIHtcblxuXHRcdFx0ZGlzYWJsZUJ1dHRvbigpO1xuXG5cdFx0XHRidXR0b24udGV4dENvbnRlbnQgPSAnQVIgTk9UIFNVUFBPUlRFRCc7XG5cblx0XHR9XG5cblx0XHRmdW5jdGlvbiBzdHlsaXplRWxlbWVudCggZWxlbWVudCApIHtcblxuXHRcdFx0ZWxlbWVudC5zdHlsZS5wb3NpdGlvbiA9ICdhYnNvbHV0ZSc7XG5cdFx0XHRlbGVtZW50LnN0eWxlLmJvdHRvbSA9ICcyMHB4Jztcblx0XHRcdGVsZW1lbnQuc3R5bGUucGFkZGluZyA9ICcxMnB4IDZweCc7XG5cdFx0XHRlbGVtZW50LnN0eWxlLmJvcmRlciA9ICcxcHggc29saWQgI2ZmZic7XG5cdFx0XHRlbGVtZW50LnN0eWxlLmJvcmRlclJhZGl1cyA9ICc0cHgnO1xuXHRcdFx0ZWxlbWVudC5zdHlsZS5iYWNrZ3JvdW5kID0gJ3JnYmEoMCwwLDAsMC4xKSc7XG5cdFx0XHRlbGVtZW50LnN0eWxlLmNvbG9yID0gJyNmZmYnO1xuXHRcdFx0ZWxlbWVudC5zdHlsZS5mb250ID0gJ25vcm1hbCAxM3B4IHNhbnMtc2VyaWYnO1xuXHRcdFx0ZWxlbWVudC5zdHlsZS50ZXh0QWxpZ24gPSAnY2VudGVyJztcblx0XHRcdGVsZW1lbnQuc3R5bGUub3BhY2l0eSA9ICcwLjUnO1xuXHRcdFx0ZWxlbWVudC5zdHlsZS5vdXRsaW5lID0gJ25vbmUnO1xuXHRcdFx0ZWxlbWVudC5zdHlsZS56SW5kZXggPSAnOTk5JztcblxuXHRcdH1cblxuXHRcdGlmICggJ3hyJyBpbiBuYXZpZ2F0b3IgKSB7XG5cblx0XHRcdHZhciBidXR0b24gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCAnYnV0dG9uJyApO1xuXHRcdFx0YnV0dG9uLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XG5cblx0XHRcdHN0eWxpemVFbGVtZW50KCBidXR0b24gKTtcblxuXHRcdFx0bmF2aWdhdG9yLnhyLmlzU2Vzc2lvblN1cHBvcnRlZCggJ2ltbWVyc2l2ZS1hcicgKS50aGVuKCBmdW5jdGlvbiAoIHN1cHBvcnRlZCApIHtcblxuXHRcdFx0XHRzdXBwb3J0ZWQgPyBzaG93U3RhcnRBUigpIDogc2hvd0FSTm90U3VwcG9ydGVkKCk7XG5cblx0XHRcdH0gKS5jYXRjaCggc2hvd0FSTm90U3VwcG9ydGVkICk7XG5cblx0XHRcdHJldHVybiBidXR0b247XG5cblx0XHR9IGVsc2Uge1xuXG5cdFx0XHR2YXIgbWVzc2FnZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoICdhJyApO1xuXG5cdFx0XHRpZiAoIHdpbmRvdy5pc1NlY3VyZUNvbnRleHQgPT09IGZhbHNlICkge1xuXG5cdFx0XHRcdG1lc3NhZ2UuaHJlZiA9IGRvY3VtZW50LmxvY2F0aW9uLmhyZWYucmVwbGFjZSggL15odHRwOi8sICdodHRwczonICk7XG5cdFx0XHRcdG1lc3NhZ2UuaW5uZXJIVE1MID0gJ1dFQlhSIE5FRURTIEhUVFBTJzsgLy8gVE9ETyBJbXByb3ZlIG1lc3NhZ2VcblxuXHRcdFx0fSBlbHNlIHtcblxuXHRcdFx0XHRtZXNzYWdlLmhyZWYgPSAnaHR0cHM6Ly9pbW1lcnNpdmV3ZWIuZGV2Lyc7XG5cdFx0XHRcdG1lc3NhZ2UuaW5uZXJIVE1MID0gJ1dFQlhSIE5PVCBBVkFJTEFCTEUnO1xuXG5cdFx0XHR9XG5cblx0XHRcdG1lc3NhZ2Uuc3R5bGUubGVmdCA9ICdjYWxjKDUwJSAtIDkwcHgpJztcblx0XHRcdG1lc3NhZ2Uuc3R5bGUud2lkdGggPSAnMTgwcHgnO1xuXHRcdFx0bWVzc2FnZS5zdHlsZS50ZXh0RGVjb3JhdGlvbiA9ICdub25lJztcblxuXHRcdFx0c3R5bGl6ZUVsZW1lbnQoIG1lc3NhZ2UgKTtcblxuXHRcdFx0cmV0dXJuIG1lc3NhZ2U7XG5cblx0XHR9XG5cblx0fVxuXG59O1xuXG5leHBvcnQgeyBBUkJ1dHRvbiB9O1xuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIEFSQnV0dG9uLmpzIl0sIm1hcHBpbmdzIjoiOzs7OztBQUFBOzs7OztBQUtBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7O0FBTUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUVBO0FBRUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBRUE7QUFDQTtBQTVKQTtBQUNBO0FBOEpBIiwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///0\n")},function(module,exports,__webpack_require__){"use strict";eval("\n\nvar _ARButton = __webpack_require__(0);\n\nvar ftToMt = function ftToMt(x) {\n return x * 0.3048;\n};\n\nvar scene = new THREE.Scene();\n\nvar camera = new THREE.PerspectiveCamera(90, window.innerWidth / window.innerHeight, 0.1, 1000);\n\nvar light = new THREE.HemisphereLight(0xffffff, 0xbbbbff, 1);\nlight.position.set(0.5, 1, 0.25);\nscene.add(light);\n\nvar renderer = new THREE.WebGLRenderer({ antialias: true, alpha: true });\nrenderer.setPixelRatio(window.devicePixelRatio);\nrenderer.setSize(window.innerWidth, window.innerHeight);\nrenderer.xr.enabled = true;\ndocument.body.appendChild(renderer.domElement);\n\ndocument.body.appendChild(_ARButton.ARButton.createButton(renderer, { requiredFeatures: ['hit-test'] }));\n\n// const planeGeometry = new THREE.BoxGeometry(1, 0.01, 1)\n// const planeMaterial = new THREE.MeshPhongMaterial({ color: 0xffffff })\n// const planeMesh = new THREE.Mesh(planeGeometry, planeMaterial)\n// scene.add(planeMesh)\n\nvar reticle = new THREE.Mesh(new THREE.RingBufferGeometry(0.15, 0.2, 32).rotateX(-Math.PI / 2), new THREE.MeshBasicMaterial());\n\n// On click, place a ring buffer geometry.\n\nvar onSelect = function onSelect(e) {\n if (reticle.visible) {\n var geometry = new THREE.RingBufferGeometry(1, ftToMt(6), 32).rotateX(-Math.PI / 2);\n var material = new THREE.MeshPhongMaterial({\n color: 0xff0000 * Math.random()\n });\n var mesh = new THREE.Mesh(geometry, material);\n mesh.position.setFromMatrixPosition(reticle.matrix);\n mesh.scale.y = Math.random() * 2 + 1;\n scene.add(mesh);\n }\n};\n\nvar controller = renderer.xr.getController(0);\ncontroller.addEventListener('select', onSelect);\nscene.add(controller);\n\n// What do these two lines mean?\nreticle.matrixAutoUpdate = false;\nreticle.visible = false;\nscene.add(reticle);\n\nvar onWindowResize = function onWindowResize() {\n camera.aspect = window.innerWidth / window.innerHeight;\n camera.updateProjectionMatrix();\n renderer.setSize(window.innerWidth, window.innerHeight);\n};\n\nwindow.addEventListener('resize', onWindowResize, false);\n\nvar animate = function animate() {\n renderer.setAnimationLoop(render);\n};\n\nvar hitTestSourceRequested = false;\nvar hitTestSource = void 0;\n\nvar render = function render(timestamp, frame) {\n if (frame) {\n var referenceSpace = renderer.xr.getReferenceSpace();\n var session = renderer.xr.getSession();\n\n if (hitTestSourceRequested === false) {\n session.requestReferenceSpace('viewer').then(function (referenceSpace) {\n session.requestHitTestSource({ space: referenceSpace }).then(function (source) {\n hitTestSource = source;\n });\n });\n\n session.addEventListener('end', function () {\n hitTestSourceRequested = false;\n hitTestSource = null;\n });\n\n hitTestSourceRequested = true;\n }\n\n if (hitTestSource) {\n var hitTestResults = frame.getHitTestResults(hitTestSource);\n\n if (hitTestResults.length) {\n var hit = hitTestResults[0];\n reticle.visible = true;\n reticle.matrix.fromArray(hit.getPose(referenceSpace).transform.matrix);\n } else {\n reticle.visible = false;\n }\n }\n }\n\n renderer.render(scene, camera);\n};\n\nanimate();//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMS5qcyIsInNvdXJjZXMiOlsid2VicGFjazovLy9zY3JpcHQuanM/OWE5NSJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBUkJ1dHRvbiB9IGZyb20gJy4vQVJCdXR0b24uanMnXG5cbmNvbnN0IGZ0VG9NdCA9IHggPT4geCAqIDAuMzA0OFxuXG5jb25zdCBzY2VuZSA9IG5ldyBUSFJFRS5TY2VuZSgpXG5cbmNvbnN0IGNhbWVyYSA9IG5ldyBUSFJFRS5QZXJzcGVjdGl2ZUNhbWVyYShcbiAgOTAsXG4gIHdpbmRvdy5pbm5lcldpZHRoIC8gd2luZG93LmlubmVySGVpZ2h0LFxuICAwLjEsXG4gIDEwMDAsXG4pXG5cbmNvbnN0IGxpZ2h0ID0gbmV3IFRIUkVFLkhlbWlzcGhlcmVMaWdodCgweGZmZmZmZiwgMHhiYmJiZmYsIDEpXG5saWdodC5wb3NpdGlvbi5zZXQoMC41LCAxLCAwLjI1KVxuc2NlbmUuYWRkKGxpZ2h0KVxuXG5jb25zdCByZW5kZXJlciA9IG5ldyBUSFJFRS5XZWJHTFJlbmRlcmVyKHsgYW50aWFsaWFzOiB0cnVlLCBhbHBoYTogdHJ1ZSB9KVxucmVuZGVyZXIuc2V0UGl4ZWxSYXRpbyh3aW5kb3cuZGV2aWNlUGl4ZWxSYXRpbylcbnJlbmRlcmVyLnNldFNpemUod2luZG93LmlubmVyV2lkdGgsIHdpbmRvdy5pbm5lckhlaWdodClcbnJlbmRlcmVyLnhyLmVuYWJsZWQgPSB0cnVlXG5kb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKHJlbmRlcmVyLmRvbUVsZW1lbnQpXG5cbmRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoXG4gIEFSQnV0dG9uLmNyZWF0ZUJ1dHRvbihyZW5kZXJlciwgeyByZXF1aXJlZEZlYXR1cmVzOiBbJ2hpdC10ZXN0J10gfSksXG4pXG5cbi8vIGNvbnN0IHBsYW5lR2VvbWV0cnkgPSBuZXcgVEhSRUUuQm94R2VvbWV0cnkoMSwgMC4wMSwgMSlcbi8vIGNvbnN0IHBsYW5lTWF0ZXJpYWwgPSBuZXcgVEhSRUUuTWVzaFBob25nTWF0ZXJpYWwoeyBjb2xvcjogMHhmZmZmZmYgfSlcbi8vIGNvbnN0IHBsYW5lTWVzaCA9IG5ldyBUSFJFRS5NZXNoKHBsYW5lR2VvbWV0cnksIHBsYW5lTWF0ZXJpYWwpXG4vLyBzY2VuZS5hZGQocGxhbmVNZXNoKVxuXG5jb25zdCByZXRpY2xlID0gbmV3IFRIUkVFLk1lc2goXG4gIG5ldyBUSFJFRS5SaW5nQnVmZmVyR2VvbWV0cnkoMC4xNSwgMC4yLCAzMikucm90YXRlWCgtTWF0aC5QSSAvIDIpLFxuICBuZXcgVEhSRUUuTWVzaEJhc2ljTWF0ZXJpYWwoKSxcbilcblxuLy8gT24gY2xpY2ssIHBsYWNlIGEgcmluZyBidWZmZXIgZ2VvbWV0cnkuXG5cbmNvbnN0IG9uU2VsZWN0ID0gZSA9PiB7XG4gIGlmIChyZXRpY2xlLnZpc2libGUpIHtcbiAgICBjb25zdCBnZW9tZXRyeSA9IG5ldyBUSFJFRS5SaW5nQnVmZmVyR2VvbWV0cnkoMSwgZnRUb010KDYpLCAzMikucm90YXRlWChcbiAgICAgIC1NYXRoLlBJIC8gMixcbiAgICApXG4gICAgY29uc3QgbWF0ZXJpYWwgPSBuZXcgVEhSRUUuTWVzaFBob25nTWF0ZXJpYWwoe1xuICAgICAgY29sb3I6IDB4ZmYwMDAwICogTWF0aC5yYW5kb20oKSxcbiAgICB9KVxuICAgIGNvbnN0IG1lc2ggPSBuZXcgVEhSRUUuTWVzaChnZW9tZXRyeSwgbWF0ZXJpYWwpXG4gICAgbWVzaC5wb3NpdGlvbi5zZXRGcm9tTWF0cml4UG9zaXRpb24ocmV0aWNsZS5tYXRyaXgpXG4gICAgbWVzaC5zY2FsZS55ID0gTWF0aC5yYW5kb20oKSAqIDIgKyAxXG4gICAgc2NlbmUuYWRkKG1lc2gpXG4gIH1cbn1cblxuY29uc3QgY29udHJvbGxlciA9IHJlbmRlcmVyLnhyLmdldENvbnRyb2xsZXIoMClcbmNvbnRyb2xsZXIuYWRkRXZlbnRMaXN0ZW5lcignc2VsZWN0Jywgb25TZWxlY3QpXG5zY2VuZS5hZGQoY29udHJvbGxlcilcblxuLy8gV2hhdCBkbyB0aGVzZSB0d28gbGluZXMgbWVhbj9cbnJldGljbGUubWF0cml4QXV0b1VwZGF0ZSA9IGZhbHNlXG5yZXRpY2xlLnZpc2libGUgPSBmYWxzZVxuc2NlbmUuYWRkKHJldGljbGUpXG5cbmNvbnN0IG9uV2luZG93UmVzaXplID0gKCkgPT4ge1xuICBjYW1lcmEuYXNwZWN0ID0gd2luZG93LmlubmVyV2lkdGggLyB3aW5kb3cuaW5uZXJIZWlnaHRcbiAgY2FtZXJhLnVwZGF0ZVByb2plY3Rpb25NYXRyaXgoKVxuICByZW5kZXJlci5zZXRTaXplKHdpbmRvdy5pbm5lcldpZHRoLCB3aW5kb3cuaW5uZXJIZWlnaHQpXG59XG5cbndpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdyZXNpemUnLCBvbldpbmRvd1Jlc2l6ZSwgZmFsc2UpXG5cbmNvbnN0IGFuaW1hdGUgPSAoKSA9PiB7XG4gIHJlbmRlcmVyLnNldEFuaW1hdGlvbkxvb3AocmVuZGVyKVxufVxuXG5sZXQgaGl0VGVzdFNvdXJjZVJlcXVlc3RlZCA9IGZhbHNlXG5sZXQgaGl0VGVzdFNvdXJjZVxuXG5jb25zdCByZW5kZXIgPSAodGltZXN0YW1wLCBmcmFtZSkgPT4ge1xuICBpZiAoZnJhbWUpIHtcbiAgICBjb25zdCByZWZlcmVuY2VTcGFjZSA9IHJlbmRlcmVyLnhyLmdldFJlZmVyZW5jZVNwYWNlKClcbiAgICBjb25zdCBzZXNzaW9uID0gcmVuZGVyZXIueHIuZ2V0U2Vzc2lvbigpXG5cbiAgICBpZiAoaGl0VGVzdFNvdXJjZVJlcXVlc3RlZCA9PT0gZmFsc2UpIHtcbiAgICAgIHNlc3Npb24ucmVxdWVzdFJlZmVyZW5jZVNwYWNlKCd2aWV3ZXInKS50aGVuKHJlZmVyZW5jZVNwYWNlID0+IHtcbiAgICAgICAgc2Vzc2lvbi5yZXF1ZXN0SGl0VGVzdFNvdXJjZSh7IHNwYWNlOiByZWZlcmVuY2VTcGFjZSB9KS50aGVuKHNvdXJjZSA9PiB7XG4gICAgICAgICAgaGl0VGVzdFNvdXJjZSA9IHNvdXJjZVxuICAgICAgICB9KVxuICAgICAgfSlcblxuICAgICAgc2Vzc2lvbi5hZGRFdmVudExpc3RlbmVyKCdlbmQnLCAoKSA9PiB7XG4gICAgICAgIGhpdFRlc3RTb3VyY2VSZXF1ZXN0ZWQgPSBmYWxzZVxuICAgICAgICBoaXRUZXN0U291cmNlID0gbnVsbFxuICAgICAgfSlcblxuICAgICAgaGl0VGVzdFNvdXJjZVJlcXVlc3RlZCA9IHRydWVcbiAgICB9XG5cbiAgICBpZiAoaGl0VGVzdFNvdXJjZSkge1xuICAgICAgY29uc3QgaGl0VGVzdFJlc3VsdHMgPSBmcmFtZS5nZXRIaXRUZXN0UmVzdWx0cyhoaXRUZXN0U291cmNlKVxuXG4gICAgICBpZiAoaGl0VGVzdFJlc3VsdHMubGVuZ3RoKSB7XG4gICAgICAgIGNvbnN0IGhpdCA9IGhpdFRlc3RSZXN1bHRzWzBdXG4gICAgICAgIHJldGljbGUudmlzaWJsZSA9IHRydWVcbiAgICAgICAgcmV0aWNsZS5tYXRyaXguZnJvbUFycmF5KGhpdC5nZXRQb3NlKHJlZmVyZW5jZVNwYWNlKS50cmFuc2Zvcm0ubWF0cml4KVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0aWNsZS52aXNpYmxlID0gZmFsc2VcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZW5kZXJlci5yZW5kZXIoc2NlbmUsIGNhbWVyYSlcbn1cblxuYW5pbWF0ZSgpXG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gc2NyaXB0LmpzIl0sIm1hcHBpbmdzIjoiOztBQUFBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBTUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBR0E7QUFDQTtBQURBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///1\n")}]); This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode charactersOriginal file line number Diff line number Diff line change @@ -0,0 +1,13 @@ <!DOCTYPE html> <html lang="en"> <head> <meta charset="utf-8" /> <meta name="viewport" content="width=device-width, initial-scale=1" /> <title>blockup</title> <link href='dist.css' rel='stylesheet' /> </head> <body> <script src='./three.min.js'></script> <script src='dist.js'></script> </body> </html> This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode charactersOriginal file line number Diff line number Diff line change @@ -0,0 +1,7 @@ { "standard": { "globals": [ "d3" ] } } This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode charactersOriginal file line number Diff line number Diff line change @@ -0,0 +1,115 @@ import { ARButton } from './ARButton.js' const ftToMt = x => x * 0.3048 const scene = new THREE.Scene() const camera = new THREE.PerspectiveCamera( 90, window.innerWidth / window.innerHeight, 0.1, 1000, ) const light = new THREE.HemisphereLight(0xffffff, 0xbbbbff, 1) light.position.set(0.5, 1, 0.25) scene.add(light) const renderer = new THREE.WebGLRenderer({ antialias: true, alpha: true }) renderer.setPixelRatio(window.devicePixelRatio) renderer.setSize(window.innerWidth, window.innerHeight) renderer.xr.enabled = true document.body.appendChild(renderer.domElement) document.body.appendChild( ARButton.createButton(renderer, { requiredFeatures: ['hit-test'] }), ) // const planeGeometry = new THREE.BoxGeometry(1, 0.01, 1) // const planeMaterial = new THREE.MeshPhongMaterial({ color: 0xffffff }) // const planeMesh = new THREE.Mesh(planeGeometry, planeMaterial) // scene.add(planeMesh) const reticle = new THREE.Mesh( new THREE.RingBufferGeometry(0.15, 0.2, 32).rotateX(-Math.PI / 2), new THREE.MeshBasicMaterial(), ) // On click, place a ring buffer geometry. const onSelect = e => { if (reticle.visible) { const geometry = new THREE.RingBufferGeometry(1, ftToMt(6), 32).rotateX( -Math.PI / 2, ) const material = new THREE.MeshPhongMaterial({ color: 0xff0000 * Math.random(), }) const mesh = new THREE.Mesh(geometry, material) mesh.position.setFromMatrixPosition(reticle.matrix) mesh.scale.y = Math.random() * 2 + 1 scene.add(mesh) } } const controller = renderer.xr.getController(0) controller.addEventListener('select', onSelect) scene.add(controller) // What do these two lines mean? reticle.matrixAutoUpdate = false reticle.visible = false scene.add(reticle) const onWindowResize = () => { camera.aspect = window.innerWidth / window.innerHeight camera.updateProjectionMatrix() renderer.setSize(window.innerWidth, window.innerHeight) } window.addEventListener('resize', onWindowResize, false) const animate = () => { renderer.setAnimationLoop(render) } let hitTestSourceRequested = false let hitTestSource const render = (timestamp, frame) => { if (frame) { const referenceSpace = renderer.xr.getReferenceSpace() const session = renderer.xr.getSession() if (hitTestSourceRequested === false) { session.requestReferenceSpace('viewer').then(referenceSpace => { session.requestHitTestSource({ space: referenceSpace }).then(source => { hitTestSource = source }) }) session.addEventListener('end', () => { hitTestSourceRequested = false hitTestSource = null }) hitTestSourceRequested = true } if (hitTestSource) { const hitTestResults = frame.getHitTestResults(hitTestSource) if (hitTestResults.length) { const hit = hitTestResults[0] reticle.visible = true reticle.matrix.fromArray(hit.getPose(referenceSpace).transform.matrix) } else { reticle.visible = false } } } renderer.render(scene, camera) } animate() This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode charactersOriginal file line number Diff line number Diff line change @@ -0,0 +1,7 @@ * box-sizing border-box margin 0 padding 0 body background black