From 79dc8f0a62a3ac678601392e23b067c1ecce3fcb Mon Sep 17 00:00:00 2001 From: Elliot Smith Date: Wed, 19 Mar 2014 10:10:07 +0000 Subject: [PATCH] Import code samples --- hello_world/README.md | 3 + hello_world/index.html | 13 + hello_world/main.css | 8 + hello_world/main.js | 5 + hello_world/manifest.json | 10 + tizen_apis/README.md | 9 + tizen_apis/index.html | 26 + tizen_apis/main.css | 25 + tizen_apis/main.js | 426 +++++++++++++++ tizen_apis/manifest.json | 10 + webgl/README.md | 3 + webgl/index.html | 15 + webgl/main.css | 62 +++ webgl/main.js | 141 +++++ webgl/manifest.json | 10 + webgl/textures/bg-tile.png | Bin 0 -> 165060 bytes webgl/textures/crosswalk-LOGO-lrg.png | Bin 0 -> 6497 bytes webgl/textures/crosswalk.png | Bin 0 -> 3052 bytes webgl/threejs/three.min.js | 736 ++++++++++++++++++++++++++ 19 files changed, 1502 insertions(+) create mode 100755 hello_world/README.md create mode 100755 hello_world/index.html create mode 100755 hello_world/main.css create mode 100755 hello_world/main.js create mode 100644 hello_world/manifest.json create mode 100755 tizen_apis/README.md create mode 100755 tizen_apis/index.html create mode 100755 tizen_apis/main.css create mode 100755 tizen_apis/main.js create mode 100644 tizen_apis/manifest.json create mode 100755 webgl/README.md create mode 100644 webgl/index.html create mode 100644 webgl/main.css create mode 100644 webgl/main.js create mode 100644 webgl/manifest.json create mode 100755 webgl/textures/bg-tile.png create mode 100755 webgl/textures/crosswalk-LOGO-lrg.png create mode 100644 webgl/textures/crosswalk.png create mode 100644 webgl/threejs/three.min.js diff --git a/hello_world/README.md b/hello_world/README.md new file mode 100755 index 0000000..4707f71 --- /dev/null +++ b/hello_world/README.md @@ -0,0 +1,3 @@ +# Hello, world! + +A minimalistic skeleton sample web application. \ No newline at end of file diff --git a/hello_world/index.html b/hello_world/index.html new file mode 100755 index 0000000..5fe8dab --- /dev/null +++ b/hello_world/index.html @@ -0,0 +1,13 @@ + + +Hello, world! + + + + + Hello, world!
+
+ Crosswalk version (per userAgent):
+
+ + diff --git a/hello_world/main.css b/hello_world/main.css new file mode 100755 index 0000000..d40071d --- /dev/null +++ b/hello_world/main.css @@ -0,0 +1,8 @@ +body { + background-color: #f0f0f0; + border: 5ex solid #fdfdf0; + padding: 5ex; + margin: 0; + line-height: 1.75rem; + font-size: 1.25rem; +} \ No newline at end of file diff --git a/hello_world/main.js b/hello_world/main.js new file mode 100755 index 0000000..11c8cfc --- /dev/null +++ b/hello_world/main.js @@ -0,0 +1,5 @@ + +document.addEventListener('DOMContentLoaded', function () { + document.getElementById ('version').textContent = + navigator.userAgent; +}); \ No newline at end of file diff --git a/hello_world/manifest.json b/hello_world/manifest.json new file mode 100644 index 0000000..c3e8a64 --- /dev/null +++ b/hello_world/manifest.json @@ -0,0 +1,10 @@ +{ + "name": "Hello, world!", + "manifest_version": 1, + "version": "0.0.0.1", + "app": { + "launch":{ + "local_path": "index.html" + } + } +} diff --git a/tizen_apis/README.md b/tizen_apis/README.md new file mode 100755 index 0000000..91b0bce --- /dev/null +++ b/tizen_apis/README.md @@ -0,0 +1,9 @@ +## tizen.systeminfo API example + +A small sample demonstrating usage of the tizen.systeminfo API. + +# Installation +sdb push samples/tizen_apis /home/developer/tizen_apis + +# Running +sdb shell "tizen-extensions-crosswalk /home/developer/tizen_apis/index.html" \ No newline at end of file diff --git a/tizen_apis/index.html b/tizen_apis/index.html new file mode 100755 index 0000000..df8cdf9 --- /dev/null +++ b/tizen_apis/index.html @@ -0,0 +1,26 @@ + + +tizen.systeminfo API + + + + + +
+ +
+ + + + + + +
+ + + + + + + + diff --git a/tizen_apis/main.css b/tizen_apis/main.css new file mode 100755 index 0000000..d0f54de --- /dev/null +++ b/tizen_apis/main.css @@ -0,0 +1,25 @@ +body { + background-color: #f0f0f0; + border: 2.5ex solid #fdfdf0; + padding: 2.5ex; + margin: 0; + line-height: 1.75rem; + font-size: 1.25rem; +} + +textarea { + width: 100%; + height: 50%; + font-size: 1.25rem; + line-height: 1.5rem; +} + +button { + border-radius: 5px; + color: black; + background: hsl(23, 75%, 56%); + border: 2px solid hsl(23, 57%, 30%); + padding: 1ex 2ex; + margin: 0.5em; + min-width: 20ex; +} \ No newline at end of file diff --git a/tizen_apis/main.js b/tizen_apis/main.js new file mode 100755 index 0000000..6e694b4 --- /dev/null +++ b/tizen_apis/main.js @@ -0,0 +1,426 @@ + +document.addEventListener('DOMContentLoaded', function () { + var output = document.getElementById("output"); + + function handle(button, callback) { + var b = document.getElementById(button); + b.addEventListener("click", callback); + } + + function onErrorCallback(error) { + output.value += '\n An error occurred: ' + error.message + '\n'; + output.scrollTop = output.scrollHeight; + } + + handle("capability_btn", function() { + try { + var cap = tizen.systeminfo.getCapabilities(); + output.value += '\n getCapabilities() returned.'; + for (property in cap) { + output.value += '\n\t' + property + ': ' + cap[property]; + } + } + catch (err) { + output.value += '\n getCapabilities() get exception:' + err.name; + } + + output.scrollTop = output.scrollHeight; + }); + + handle("battery_btn", function() { + var count = 0; + var id = tizen.systeminfo.addPropertyValueChangeListener( + "BATTERY", + function(battery) { + output.value += '\n Property BATTERY changed.'; + output.value += '\n\t level : ' + battery.level; + output.value += '\n\t isCharging : ' + battery.isCharging; + output.scrollTop = output.scrollHeight; + count += 1; + if (count == 3) { + output.value += '\n Maximum listen times(3) reached. Remove listener with id = ' + id; + output.scrollTop = output.scrollHeight; + count = 0; + tizen.systeminfo.removePropertyValueChangeListener(id); + } + }); + + tizen.systeminfo.getPropertyValue( + "BATTERY", + function(battery) { + output.value += '\n Get property BATTERY returned.'; + output.value += '\n\t level : ' + battery.level; + output.value += '\n\t isCharging : ' + battery.isCharging; + output.scrollTop = output.scrollHeight; + }, + onErrorCallback); + }); + + handle("cpu_btn", function() { + var count = 0; + var id = tizen.systeminfo.addPropertyValueChangeListener( + "CPU", + function(cpu) { + output.value += '\n Property CPU changed with no option.'; + output.value += '\n\t load : ' + parseFloat(cpu.load) * 100 + '%'; + output.scrollTop = output.scrollHeight; + count += 1; + if (count == 3) { + output.value += '\n Maximum listen times(3) reached. Remove listener with id = ' + id; + output.scrollTop = output.scrollHeight; + count = 0; + tizen.systeminfo.removePropertyValueChangeListener(id); + } + }); + var id1 = tizen.systeminfo.addPropertyValueChangeListener( + "CPU", + function(cpu) { + output.value += '\n Property CPU changed with highThreshold 0.2.'; + output.value += '\n\t load : ' + parseFloat(cpu.load) * 100 + '%'; + output.scrollTop = output.scrollHeight; + output.scrollTop = output.scrollHeight; + }, + {'highThreshold':0.2}); + + var id2 = tizen.systeminfo.addPropertyValueChangeListener( + "CPU", + function(cpu) { + output.value += '\n Property CPU changed with lowThreshold 1.0.'; + output.value += '\n\t load : ' + parseFloat(cpu.load) * 100 + '%'; + output.scrollTop = output.scrollHeight; + output.scrollTop = output.scrollHeight; + }, + {'lowThreshold':1.0}); + + var id3 = tizen.systeminfo.addPropertyValueChangeListener( + "CPU", + function(cpu) { + output.value += '\n Property CPU changed with highThreshold 1.00, lowThreshold 1.10.'; + output.value += '\n\t load : ' + parseFloat(cpu.load) * 100 + '%'; + output.scrollTop = output.scrollHeight; + output.scrollTop = output.scrollHeight; + }, + {'highThreshold':1.00, 'lowThreshold':1.10}); + + var id4 = tizen.systeminfo.addPropertyValueChangeListener( + "CPU", + function(cpu) { + output.value += '\n Property CPU changed with timeout:6 seconds'; + output.value += '\n\t load : ' + parseFloat(cpu.load) * 100 + '%'; + output.scrollTop = output.scrollHeight; + output.scrollTop = output.scrollHeight; + }, + {'timeout':6000}); + + tizen.systeminfo.getPropertyValue( + "CPU", + function(cpu) { + output.value += '\n Get property CPU returned.'; + output.value += '\n\t load : ' + parseFloat(cpu.load) * 100 + '%'; + output.scrollTop = output.scrollHeight; + }, + onErrorCallback); + }); + + handle("storage_btn", function() { + var count = 0; + var id = tizen.systeminfo.addPropertyValueChangeListener( + "STORAGE", + function(storage) { + output.value += '\n Get property STORAGE returned.'; + output.value += '\n\t There are ' + storage.units.length + ' storage units.\n'; + for (i=0; i< storage.units.length; i++) { + output.value += '\n\t storage[' + i + ']:'; + output.value += '\n\t\t type: ' + storage.units[i].type; + output.value += '\n\t\t capacity: ' + storage.units[i].capacity + ' bytes'; + output.value += '\n\t\t availableCapacity: ' + storage.units[i].availableCapacity + ' bytes'; + output.value += '\n\t\t isRemovable: ' + storage.units[i].isRemovable; + output.value += '\n\t\t isRemoveable: ' + storage.units[i].isRemoveable + '\n'; + output.scrollTop = output.scrollHeight; + } + count += 1; + if (count == 3) { + output.value += '\n Maximum listen times(3) reached. Remove listener with id = ' + id; + output.scrollTop = output.scrollHeight; + count = 0; + tizen.systeminfo.removePropertyValueChangeListener(id); + } + }); + tizen.systeminfo.getPropertyValue( + "STORAGE", + function(storage) { + output.value += '\n Get property STORAGE returned.'; + output.value += '\n\t There are ' + storage.units.length + ' storage units.\n'; + for (i=0; i< storage.units.length; i++) { + output.value += '\n\t storage[' + i + ']:'; + output.value += '\n\t\t type: ' + storage.units[i].type; + output.value += '\n\t\t capacity: ' + storage.units[i].capacity + ' bytes'; + output.value += '\n\t\t availableCapacity: ' + storage.units[i].availableCapacity + ' bytes'; + output.value += '\n\t\t isRemovable: ' + storage.units[i].isRemovable; + output.value += '\n\t\t isRemoveable: ' + storage.units[i].isRemoveable + '\n'; + output.scrollTop = output.scrollHeight; + } + }, + onErrorCallback); + }); + + handle("display_btn", function() { + var count = 0; + var id = tizen.systeminfo.addPropertyValueChangeListener( + "DISPLAY", + function(display) { + output.value += '\n Property DISPLAY changed.'; + output.value += '\n\t resolutionWidth: ' + display.resolutionWidth; + output.value += '\n\t resolutionHeight: ' + display.resolutionHeight; + output.value += '\n\t dotsPerInchWidth: ' + display.dotsPerInchWidth; + output.value += '\n\t dotsPerInchHeight: ' + display.dotsPerInchHeight; + output.value += '\n\t physicalWidth: ' + display.physicalWidth; + output.value += '\n\t physicalHeight: ' + display.physicalHeight; + output.value += '\n\t brightness: ' + display.brightness; + output.scrollTop = output.scrollHeight; + count += 1; + if (count == 3) { + output.value += '\n Maximum listen times(3) reached. Remove listener with id = ' + id; + output.scrollTop = output.scrollHeight; + count = 0; + tizen.systeminfo.removePropertyValueChangeListener(id); + } + }); + + tizen.systeminfo.getPropertyValue( + "DISPLAY", + function(display) { + output.value += '\n Get property DISPLAY returned.'; + output.value += '\n\t resolutionWidth: ' + display.resolutionWidth; + output.value += '\n\t resolutionHeight: ' + display.resolutionHeight; + output.value += '\n\t dotsPerInchWidth: ' + display.dotsPerInchWidth; + output.value += '\n\t dotsPerInchHeight: ' + display.dotsPerInchHeight; + output.value += '\n\t physicalWidth: ' + display.physicalWidth; + output.value += '\n\t physicalHeight: ' + display.physicalHeight; + output.value += '\n\t brightness: ' + display.brightness; + output.scrollTop = output.scrollHeight; + }, + onErrorCallback); + }); + + handle("device_orientation_btn", function() { + var id = tizen.systeminfo.addPropertyValueChangeListener( + "DEVICE_ORIENTATION", + function(orientation) { + output.value += '\n Property DEVICE_ORIENTATION changed.'; + output.value += '\n\t status: ' + orientation.status; + output.value += '\n\t isAutoRotation: ' + orientation.isAutoRotation; + output.scrollTop = output.scrollHeight; + }); + tizen.systeminfo.getPropertyValue( + "DEVICE_ORIENTATION", + function(orientation) { + output.value += '\n Get property DEVICE_ORIENTATION returned.'; + output.value += '\n\t status: ' + orientation.status; + output.value += '\n\t isAutoRotation: ' + orientation.isAutoRotation; + }, + onErrorCallback); + }); + + handle("build_btn", function() { + var count = 0; + var id = tizen.systeminfo.addPropertyValueChangeListener( + "BUILD", + function(build) { + output.value += '\n Property BUILD changed.'; + output.value += '\n\t model: ' + build.model; + output.value += '\n\t manufacturer: ' + build.manufacturer; + output.value += '\n\t buildVersion: ' + build.buildVersion; + count += 1; + if (count == 3) { + output.value += '\n Maximum listen times(3) reached. Remove listener with id = ' + id; + output.scrollTop = output.scrollHeight; + count = 0; + tizen.systeminfo.removePropertyValueChangeListener(id); + } + }); + + tizen.systeminfo.getPropertyValue( + "BUILD", + function(build) { + output.value += '\n Get property BUILD returned.'; + output.value += '\n\t model: ' + build.model; + output.value += '\n\t manufacturer: ' + build.manufacturer; + output.value += '\n\t buildVersion: ' + build.buildVersion; + output.scrollTop = output.scrollHeight; + }, + onErrorCallback); + }); + + handle("locale_btn", function() { + var count = 0; + var id = tizen.systeminfo.addPropertyValueChangeListener( + "LOCALE", + function(locale) { + output.value += '\n Property Locale changed.'; + output.value += '\n\t language: ' + locale.language; + output.value += '\n\t country: ' + locale.country; + count += 1; + if (count == 3) { + output.value += '\n Maximum listen times(3) reached. Remove listener with id = ' + id; + output.scrollTop = output.scrollHeight; + count = 0; + tizen.systeminfo.removePropertyValueChangeListener(id); + } + }); + + tizen.systeminfo.getPropertyValue( + "LOCALE", + function(locale) { + output.value += '\n Get property LOCALE returned.'; + output.value += '\n\t language: ' + locale.language; + output.value += '\n\t country: ' + locale.country; + output.scrollTop = output.scrollHeight; + }, + onErrorCallback); + }); + + handle("network_btn", function() { + var count = 0; + var id = tizen.systeminfo.addPropertyValueChangeListener( + "NETWORK", + function(network) { + output.value += '\n Property NETWORK changed.'; + output.value += '\n\t networkType: ' + network.networkType; + output.scrollTop = output.scrollHeight; + count += 1; + if (count == 3) { + output.value += '\n Maximum listen times(3) reached. Remove listener with id = ' + id; + output.scrollTop = output.scrollHeight; + count = 0; + tizen.systeminfo.removePropertyValueChangeListener(id); + } + }); + + tizen.systeminfo.getPropertyValue( + "NETWORK", + function(network) { + output.value += '\n Get property NETWORK returned.'; + output.value += '\n\t networkType: ' + network.networkType; + output.scrollTop = output.scrollHeight; + }, + onErrorCallback); + }); + + handle("wifi_network_btn", function() { + var count = 0; + var id = tizen.systeminfo.addPropertyValueChangeListener( + "WIFI_NETWORK", + function(wifi) { + output.value += '\n Property WIFI_NETWORK changed.'; + output.value += '\n\t status: ' + wifi.status; + output.value += '\n\t ssid: ' + wifi.ssid; + output.value += '\n\t ipAddress: ' + wifi.ipAddress; + output.value += '\n\t ipv6Address: ' + wifi.ipv6Address; + output.value += '\n\t signalStrength: ' + wifi.signalStrength; + output.scrollTop = output.scrollHeight; + count += 1; + if (count == 3) { + output.value += '\n Maximum listen times(3) reached. Remove listener with id = ' + id; + output.scrollTop = output.scrollHeight; + count = 0; + tizen.systeminfo.removePropertyValueChangeListener(id); + } + }); + tizen.systeminfo.getPropertyValue( + "WIFI_NETWORK", + function(wifi) { + output.value += '\n Get property WIFI_NETWORK returned.'; + output.value += '\n\t status: ' + wifi.status; + output.value += '\n\t ssid: ' + wifi.ssid; + output.value += '\n\t ipAddress: ' + wifi.ipAddress; + output.value += '\n\t ipv6Address: ' + wifi.ipv6Address; + output.value += '\n\t signalStrength: ' + wifi.signalStrength; + output.scrollTop = output.scrollHeight; + }, + onErrorCallback); + }); + + handle("cellular_network_btn", function() { + var id = tizen.systeminfo.addPropertyValueChangeListener( + "CELLULAR_NETWORK", + function(cellular) { + output.value += '\n Property CELLULAR_NETWORK changed.'; + output.value += '\n\t status: ' + cellular.status; + output.value += '\n\t apn: ' + cellular.apn; + output.value += '\n\t ipAddress: ' + cellular.ipAddress; + output.value += '\n\t ipv6Address: ' + cellular.ipv6Address; + output.value += '\n\t mcc: ' + cellular.mcc; + output.value += '\n\t mnc: ' + cellular.mnc; + output.value += '\n\t cellId: ' + cellular.cellId; + output.value += '\n\t lac: ' + cellular.lac; + output.value += '\n\t isRoaming: ' + cellular.isRoaming; + output.value += '\n\t isFlightMode: ' + cellular.isFlightMode; + output.value += '\n\t imei: ' + cellular.imei; + output.scrollTop = output.scrollHeight; + }); + + tizen.systeminfo.getPropertyValue( + "CELLULAR_NETWORK", + function(cellular) { + output.value += '\n Get property CELLULAR_NETWORK returned.'; + output.value += '\n\t status: ' + cellular.status; + output.value += '\n\t apn: ' + cellular.apn; + output.value += '\n\t ipAddress: ' + cellular.ipAddress; + output.value += '\n\t ipv6Address: ' + cellular.ipv6Address; + output.value += '\n\t mcc: ' + cellular.mcc; + output.value += '\n\t mnc: ' + cellular.mnc; + output.value += '\n\t cellId: ' + cellular.cellId; + output.value += '\n\t lac: ' + cellular.lac; + output.value += '\n\t isRoaming: ' + cellular.isRoaming; + output.value += '\n\t isFlightMode: ' + cellular.isFlightMode; + output.value += '\n\t imei: ' + cellular.imei; + output.scrollTop = output.scrollHeight; + }, + onErrorCallback); + }); + + handle("sim_btn", function() { + var id = tizen.systeminfo.addPropertyValueChangeListener( + "SIM", + function(sim) { + output.value += '\n Property SIM changed.'; + output.value += '\n\t state: ' + sim.state; + output.value += '\n\t operatorName: ' + sim.operatorName; + output.value += '\n\t msisdn: ' + sim.msisdn; + output.value += '\n\t iccid: ' + sim.iccid; + output.value += '\n\t mcc: ' + sim.mcc; + output.value += '\n\t mnc: ' + sim.mnc; + output.value += '\n\t msin: ' + sim.msin; + output.value += '\n\t spn: ' + sim.spn; + output.scrollTop = output.scrollHeight; + }); + + tizen.systeminfo.getPropertyValue( + "SIM", + function(sim) { + output.value += '\n Get property SIM returned.'; + output.value += '\n\t state: ' + sim.state; + output.value += '\n\t operatorName: ' + sim.operatorName; + output.value += '\n\t msisdn: ' + sim.msisdn; + output.value += '\n\t iccid: ' + sim.iccid; + output.value += '\n\t mcc: ' + sim.mcc; + output.value += '\n\t mnc: ' + sim.mnc; + output.value += '\n\t msin: ' + sim.msin; + output.value += '\n\t spn: ' + sim.spn; + output.scrollTop = output.scrollHeight; + }, + onErrorCallback); + }); + + handle("peripheral_btn", function() { + tizen.systeminfo.getPropertyValue( + "PERIPHERAL", + function(peripheral) { + output.value += '\n Get property PERIPHERAL returned.'; + output.value += '\n\t isVideoOutputOn: ' + peripheral.isVideoOutputOn; + output.scrollTop = output.scrollHeight; + }, + onErrorCallback); + }); +}); diff --git a/tizen_apis/manifest.json b/tizen_apis/manifest.json new file mode 100644 index 0000000..f9fa0a1 --- /dev/null +++ b/tizen_apis/manifest.json @@ -0,0 +1,10 @@ +{ + "name": "System Information", + "manifest_version": 1, + "version": "0.0.0.1", + "app": { + "launch":{ + "local_path": "index.html" + } + } +} diff --git a/webgl/README.md b/webgl/README.md new file mode 100755 index 0000000..54b5503 --- /dev/null +++ b/webgl/README.md @@ -0,0 +1,3 @@ +# WebGL Crosswalk Sample + +A small example demonstrating the use of Three JS in Crosswalk. diff --git a/webgl/index.html b/webgl/index.html new file mode 100644 index 0000000..df32594 --- /dev/null +++ b/webgl/index.html @@ -0,0 +1,15 @@ + + + WebGL Crosswalk Sample + + + + + +
+
+
+
+ + + \ No newline at end of file diff --git a/webgl/main.css b/webgl/main.css new file mode 100644 index 0000000..bd01176 --- /dev/null +++ b/webgl/main.css @@ -0,0 +1,62 @@ +body { + margin: 0px; + overflow: hidden; + background: -webkit-linear-gradient(bottom, #e76840 0%, #f49541 65%, #ed7332 100%); + background: linear-gradient(to top, #e76840 0%, #f49541 65%, #ed7332 100%); + min-width: 408px; +} + +#sunburst.background { + background: -webkit-radial-gradient(50% 115%, circle, white 0%, white 9%, rgba(252, 217, 89, 0.8) 17%, rgba(246, 137, 55, 0) 45%); + background: radial-gradient( circle at 50% 115%, white 0%, white 9%, rgba(252, 217, 89, 0.8) 17%, rgba(246, 137, 55, 0) 45%); +} + +#small-circle.background { + background: -webkit-radial-gradient(50% 115%, circle, rgba(250, 196, 72, 0.12) 0%, rgba(250, 196, 72, 0.12) 40%, transparent 40%); + background: radial-gradient( circle at 50% 115%, rgba(250, 196, 72, 0.12) 0%, rgba(250, 196, 72, 0.12) 40%, transparent 40%); +} + +#big-circle.background { + background: -webkit-radial-gradient(40% 115%, farthest-side circle, rgba(222, 97, 62, 0.2) 0%, rgba(222, 97, 62, 0.3) 90%, transparent 90%); + background: radial-gradient( farthest-side circle at 40% 115%, rgba(222, 97, 62, 0.2) 0%, rgba(222, 97, 62, 0.3) 90%, transparent 90%); +} + +.tile-overlay { + background: url(textures/bg-tile.png); +} + +.background { + width: 100%; + height: 100%; + position: absolute; + top: 0px; + left: 0px; + opacity: 1; + text-align: center; +} + +canvas { + z-index: 10; + position: relative; +} + +#logo { + position: fixed; + bottom: 0%; + padding-top: 5em; + display: inline-block; + background-image: url(textures/crosswalk-LOGO-lrg.png); + background-repeat: no-repeat; + background-position: 50% 100%; + background-size: 477px auto; + height: 51px; + width: 100%; + margin-bottom: 36px; +} + +@media (max-width: 520px) { + #logo { + background-size: 400px auto; + height: 42.7673 px; + } +} \ No newline at end of file diff --git a/webgl/main.js b/webgl/main.js new file mode 100644 index 0000000..edde7b1 --- /dev/null +++ b/webgl/main.js @@ -0,0 +1,141 @@ +/* + * Based on http://threejs.org/examples/canvas_geometry_cube.html + */ +document.addEventListener ('DOMContentLoaded', function () { + var camera, scene, renderer; + + var cube, plane; + + var targetRotation = 0; + var targetRotationOnMouseDown = 0; + + var mouseX = 0; + var mouseXOnMouseDown = 0; + + var windowHalfX = window.innerWidth / 2; + var windowHalfY = window.innerHeight / 2; + + var auto_timer = 0; + + init(); + animate(); + + function init() { + renderer = new THREE.WebGLRenderer (); + renderer.setSize (window.innerWidth, window.innerHeight); + document.body.appendChild (renderer.domElement); + + camera = new THREE.PerspectiveCamera ( + 70, window.innerWidth / window.innerHeight, 1, 1000); + camera.position.y = 150; + camera.position.z = 500; + + scene = new THREE.Scene(); + + // Cube + var geometry = new THREE.CubeGeometry (200, 200, 200); + + var texture = THREE.ImageUtils.loadTexture ('textures/crosswalk.png'); + texture.anisotropy = renderer.getMaxAnisotropy (); + + var material = new THREE.MeshBasicMaterial ( { map: texture } ); + + cube = new THREE.Mesh (geometry, material); + cube.position.y = 150; + scene.add( cube ); + + // Plane + var geometry = new THREE.PlaneGeometry (180, 180); + geometry.applyMatrix (new THREE.Matrix4 ().makeRotationX (-Math.PI / 2)); + + var material = new THREE.MeshBasicMaterial ( { color: 0xde613e } ); + + plane = new THREE.Mesh (geometry, material); + scene.add (plane); + + document.addEventListener ('mousedown', onDocumentMouseDown, false); + document.addEventListener ('touchstart', onDocumentTouchStart, false); + document.addEventListener ('touchmove', onDocumentTouchMove, false); + + // Generic setup + + window.addEventListener ('resize', onWindowResize, false); + } + + function onWindowResize () { + windowHalfX = window.innerWidth / 2; + windowHalfY = window.innerHeight / 2; + camera.aspect = window.innerWidth / window.innerHeight; + camera.updateProjectionMatrix (); + renderer.setSize (window.innerWidth, window.innerHeight); + } + + function stopAutoRotate () { + if (auto_timer) + window.clearTimeout (auto_timer); + auto_timer = window.setTimeout (startAutoRotate, 1000); + } + + function startAutoRotate () { + auto_timer = 0; + } + + function animate () { + requestAnimationFrame (animate); + plane.rotation.y = cube.rotation.y += (targetRotation - cube.rotation.y) * 0.05; + if (auto_timer == 0) { + targetRotation += 0.025; + } + renderer.render (scene, camera); + } + + function onDocumentMouseDown (e) { + e.preventDefault(); + document.addEventListener ('mousemove', onDocumentMouseMove, false); + document.addEventListener ('mouseup', onDocumentMouseUp, false); + document.addEventListener ('mouseout', onDocumentMouseOut, false); + mouseXOnMouseDown = e.clientX - windowHalfX; + targetRotationOnMouseDown = targetRotation; + stopAutoRotate (); + } + + function onDocumentMouseMove (e) { + mouseX = e.clientX - windowHalfX; + targetRotation = targetRotationOnMouseDown + + (mouseX - mouseXOnMouseDown) * 0.02; + stopAutoRotate (); + } + + function onDocumentMouseUp (e) { + document.removeEventListener ('mousemove', onDocumentMouseMove, false); + document.removeEventListener ('mouseup', onDocumentMouseUp, false); + document.removeEventListener ( 'mouseout', onDocumentMouseOut, false); + stopAutoRotate (); + } + + function onDocumentMouseOut (e) { + document.removeEventListener ('mousemove', onDocumentMouseMove, false); + document.removeEventListener ('mouseup', onDocumentMouseUp, false); + document.removeEventListener ('mouseout', onDocumentMouseOut, false); + stopAutoRotate (); + } + + function onDocumentTouchStart (e) { + if (e.touches.length === 1) { + e.preventDefault (); + mouseXOnMouseDown = e.touches[ 0 ].pageX - windowHalfX; + targetRotationOnMouseDown = targetRotation; + stopAutoRotate (); + } + } + + function onDocumentTouchMove (e) { + if (e.touches.length === 1) { + e.preventDefault (); + mouseX = e.touches[0].pageX - windowHalfX; + targetRotation = targetRotationOnMouseDown + + (mouseX - mouseXOnMouseDown) * 0.05; + stopAutoRotate (); + } + } +}); \ No newline at end of file diff --git a/webgl/manifest.json b/webgl/manifest.json new file mode 100644 index 0000000..d01e5eb --- /dev/null +++ b/webgl/manifest.json @@ -0,0 +1,10 @@ +{ + "name": "WebGL Sample", + "manifest_version": 1, + "version": "0.0.0.1", + "app": { + "launch":{ + "local_path": "index.html" + } + } +} diff --git a/webgl/textures/bg-tile.png b/webgl/textures/bg-tile.png new file mode 100755 index 0000000000000000000000000000000000000000..d77a097352ddcdddd88a5a190de63ae1a12b330c GIT binary patch literal 165060 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%0D5DT0fy?sJ%%MXeg(u$FI9o$p zBirmnQeV9TtE#cF^0ZUzne(dp`NkV>9P{4Vsa)nYZNqHgGX!OgS005mxQ(@wSys8w zhIW0>Su8;ZPd^)Hm8rfkyE0O?=Pq2i@lxu2_pHf(N{zA>PDvhgxYF_v+KIKV@|o4H zv5a2GkSDl)dS831o~*s6{h%V8u}4u+QWDwb0}TaTfCdAPlSU!JC(UQyeI=)TE}7J> zl=p__xb;cF^)tgTS=77)j5hfK)m+jHEwqN1BeBy_elIS@6iLx)^?t9_K0)II`*?L8SydOAZ5w(klp_dKDWTEEt^h{+b2 zp*Qhday&wl7f(O^^hpzLf>tOYh0!E%JC*x#y;R&K#KH!8bGiwPvN&K1-lX6$K@UJ# zHi?~ZJ)8qUtQw3>jR31l_$Fa4gu!om1 zk2VjAI9O(^D(wp!XV!q&CTm{~qR*wEmkNNe+L$armK)bK1t!s#vS_^uM(= zreBP ztxQ$Gid|H`E(Ed-4&tez8(b1m9=BcbpudGAtOKP-9yhcHts&vN^(1=LvdkM__fprO zU8dX!WiRoE`(8X2w~M_CLfrGD4Dj3VJoJIpZU6?<(-5dXp`Q#5?(Eq;uKy1 zEWMuy6x(_jy$5SyN{*$wobu`o zdN!^3dTz0F&^&n^7I=HcUfVta`V|WukVPC#&1>V(%`B@j8Ow9RhcCBA{+j=gO{h;O zEC<}V8TNzFpO77-k=g@Ywz_BY)MwFyggWb<5Lzku?wbK3S=^lU-0210{)Wbu&6SbH z%jBInpi_>FDM%s)kg#>1hqzIPfKOjfX~rBxmo9tTm2N53S=ON9_;|MI3j|W*Yu?rS zVE9#J+55_Q$U~|nX%C>(mOELVC^Ybpa7W>lYBC8g8T&SZhmr`}_&%0LyHeJ_QDJea5>?7pHPFv5VP*HEli51g;B~5O#q@tL1+{JE3O+&n@<9hVsITH z9rVv=ZWkRS>DJFSaEYEQ=pX&)N5^Yfs(nT;T?IFqM@ZmwZ!TJ8>=;btPTaR~;BFBj zS=T))rTN$KiIteu1mz$kB+TPL#6a2nausV8UqD*!WH`VZrBa6UBW0Yzy%L) z-Tlg|Kx2T;iCL!%vUExg_IW5Lp)G|?Ad3?4TTH{Uhh_r*T`FrHgtX!@^RVSyk^y|~syg*A?tZGL zJ0P)9g7Rd3)P;75tQk)4HYngf>#N?L`=P z;aEvobuy4Z&7G#>3nA{kLd{E&Y;GmTn;%JONFE;PHa#M%4ql)Mc{7TiE=#|rtQ8r` z$Iz*Gqk3MH-q=yqOMLd(XJ-^8fCGa_A8oo&4(Q_Y^77PVY3>1=+9bh=;>+P$ft!hu z2}i)bHd&OmL`yeqabcKQJrn~NCs)1CIw>XR7Mh8Z$DsoA-$SJwQbPKR$|*S6RZcoB z6Amyav0UZNV)VUF&(Cc!XVZ7zV(+=231OCN0*CEVp@@PD$!gWhl#U9`zVHUIR240` zulTM~`3{>+bi?c_q-hh0qjzXf{w%!atK@r7MolUt#>qgR>$(zIpm9(q;?0uX5>JgW z1ueENmyodbd-KWyOF4AS=3Iy*>nF=lb9pSE&2?eGyoU}n4PM$5yd$AKWPA(^GV8!n zMJ(RQst2W&%ism}w}LSWRc@khc@)h^w3H+ZJ%{d4tV>}e2boYLW2lq8Kw zh{qu&`3fTsE~uinF-in>{nlRtZw7)`erwaSpedm&6_0_-+RJiYlJsaG58Bs96hRZTLy*ijw zCvNj;F>Munsw9`QM68`c=k9d9l#z|ef{}yRc4UauK)2ionYlHWuc~EyLT~6 z*m&GX=n_;T;%A}E#F;x3a1%K^w^|!7eB(wn4RwMIwa+$JESMm|g*v()WJxkv_^0HW z+zray)}>9fF1LCF=oeMuSzWAn$uBh&y-(wIE_T<@B?|d~4FP3bE_` z;D8X~BvbapvA(ao^2*V~JYj6pv_bGf_nO864Io7zA%Wzm36T`kc5MqWnt+#Ie)&*j z_wV07EZ`=W)z?EgVY^NXF9{{gLa3FEBfe@Pb)6A@kkC*d!EMBmq6np*lDCi>%U`jl zZ`Z`-!J_8|ssU)DH1XX->oc)viJG31FoKgxu%K{oph@^p0C@H#xwagg)xhoE;t^pk z2`$KqEnq=a(ETV%sGbh(ED0f?<}&N1ab{7o?9m=@pS6qYHIP0BnayJZr5w9g_YuEb zidcCdp&>;iyuGfU>?S+nq@D}gIFlke8H zgn8Fh3J<{rw~r_fngfT`78hcoh08~?0I{Mg+H%eJJI@P!1f&bEhXI615n_mu)OSRywLC zCCzU!@1C#Mza=VX_=;QEQ9iwP3m7PPRA<{lK6#nTp2 zBZupy;}YG%WkOus>7EmB|F)3q9%utRkFcA>pD|LH@+}ZGDagM2J0VPv)CTZS9JUT) ziew4+vc5oOh0r=MghN%1D?*aTTR697jj!Le}08I!gAMBjjy`Zj51Z^*vM7uz8bxw)szKle=*EyanMVkU8Ou?$-gNyO>sU zUBgCKyrkHOyf%kX3~!r1)_eblAW0_Ww{#$5xjPIupFl}L;#garC^=SO=HOMOt=R_8 zgoUq$K>=X%*g>beRdU-LfspcsS(l)NaNraitUIDI9n6*$6$(!=8Hj6hpMqDngRxf; zqGUTcv^VLB@caG5iKV`x!xpMc9ZvV`u;_mX+8lU2OCe7NsG1%MwC72-daY0>rcyG3L2CJ#Y)oAkzv zZLjgR8CsaG*F52z;bKwt*gu=YgiQIg`$G^|M3m6t;axkSm88pK!_El?#=_we_xke4 zbH}%k31sm)MKyV7?a*Yin1n_Yt|d>}%YkY3nvfO-)8(&+f^ppx5SPAn5~>3s=Eg2D zmOMyFE%Hg8;PzSl{f{Dnd;(`fiJQ#kwRFhk`olz{P}t5>6d$BY*D1%4j3}g&+;-3A zd?9%hxkU3OU3q}ZZPRnef5{)He@Sse^w@hsOzwe;M@@;ag5tCkW8*~8i@-}En7#ri zwka~tr&Xk+t=to@zIkb{6j`Xqsn^>JjlcI}k(H0Y%_Gz%jKT22sl{s|W15CQ+}UU9 zCloOv%afcHQc*0|oTLM-xBlEbA<#%hvYZXapKh0^IAWkTo|K+oSAzO$Y)y%7WQo&^#$XaYcPmbrwni$xR@Iqbwzm zC9Pn`DU!vz_Zd7%lFAe=YqdEj*6M)5O|n*}YD_f~V)r(egf2lX6sG!`Cy2i$xoOTD zchAuV%jI9T)nu-5g*a+13Jdg%H3w-PlN%u>;WO2ul4z2u-8=c}{pPUymdsYo-I%(M z5XcKJyl@y5IMR7!{dCarc3I@s3vvvK3;F|nIhqpCVV17Eh$O$)#I5%|%^4hg&ysvJ zM|q=IahqR7Z;SvQr?3WN#X6cFIW-|*v?1zFz)c;_a#4M?SJM;epDf$LHM}l$6e?mR zlU4o;iD^UFIx9YE91bRjk-x>=dCO`E>>vGNtx@yUwR?`nhuBXD7|PM!WTd7Cldt4k zAMeK6z1u^I+w>7p|x(0vvnLzs+E_AJKg;H2Qu3rn~Lh3h_9S6Z`4Vz0Nf{~A?|v-T##XGgq+wQMa#Bd_IuV(oMmdmW zcuZbWD9Iwk7f53F4*?_83Suk_gQ8o=6qBv$TNUNz12s7aY~QR~s1ZmL<@$@V;_+E) zcypE26r`l^vU#dfUOEEGx9fiL$tQ<_w7sp72P!xd>u0Q>8keuhkOklnUSX8bV~kAq zNPm$5AduD;!cCGp52SSpXdoo2IFx~=4v44QoFtb~g|w&3F%^D#@x>Ppt}O^0xuPv3 zbcl3lh|g!df^Ry=sw z*#p+tLMAXyZI<|QW%nLUhtZP?7eIG3z79Z%8x_abkuwl7x-H>mS8>?<<=&wiNKhyp zaeZO26tOB*^a3eE9@@4%6sB?za77`MSTZb8T<=;!_PH!E-K8WG^+Kf_y6#c|>mt^A zfp4OGaIH2+YuOy4rfoxHarb*;lf-XswIdWGZT-3iY`6mxr+#yUNe}`B{RNbhkdjVs zJhQAcwBoqrn`1JyY>w@V)-ZYLSyX$XOAvm+R_ahk6XG@bDm|jHSh7%sG8G+CTFrCT zdvmNQ3do*(N8TZd2$kyF*dG5&`=|M5yzv~cqjrrfRBW*l(+WA!5GZVe6K8Gr%o&`F z4EY~cuCVj6y7sx`sJTdfTFWeNV2%#=?#;@DRpZQLN>hji2QgJm;vMggvgpV zN!$f^@bY*$@)604W;_m__P9eAl$QahM~Kf0B?(P|<>EE6pLsn;;T6Wm;*v_8CCi|PQMD;wAT)y> zASKb~C24pYS<5)lDK&_e?P6mAP!xy}CS(q`gi}(8>$E5z?kZ);3KHMdq7QeqgTrTR zTuCS$qI%}W0YSuik;Kai&r(h?;AfE#+)O^JNL8<*lU~P(BZiGb228NI6_$fP#^JGD zkq9StMAW`p&#bZIrWNA9liJx!I0=igtE;S{S=D9|Cuz~eC}By8_)E&&A6 zIzZKJB{;ej}Nka zset9ec3}<7DQ-=Haav%q)R?)?r<5RS2mx16Mw;T0%py#M4kT@CLdinCD7jUXWJ1|B zG+ju5eD(PjUARc%t7~b((73Xi6YMr+lbAJ5SQq)Qa4VJ~_!c)TA?6Y;RWQ0}ad_}f z)w&7lHXfGfp`0;FLWrn}+^SJ7DW&|x6Hgp&XXEL*c?1;q#%23V^VS%|cv+UcuX~}r z5ZZDG62R6$XRW2HmhYfM`yB3(eowd&z-=S@)=j8}fdDco%!Nh*Y9nE`sryXN-`~MA z(FH782(k#IlKU-rjp9S&5intO5-Cr-Q^`*E?Rpsi$#O|JO*kl!-U~tDFy{q;VX9>@ z&&`K!Q{+NEt@~uHqtY-RS{#aVH(z}|g|eQbL^@bB%(e>Ky#AgIzfSVpxbo9nez}7uw4+RBn1>7K)rP99xJETn^tJcq+>wwR)m*C~S zms?5CHWs9ba&dqa@&xTcv44qc^Czr!ar5TQBWc?yP;at28agznuH7|@eJ7ZC75xob2L;n)^e{FFs9D!R*?=%j1ud(xv1`yRXMl4&S1-ZE zn1`*i*V+(h6NDec@D;?c)KnHr)NRvrv3{qlIJAPQJ}XHj{3B1&Vr#sPU9bdT^Mxt` z)DA*KqFwP2VQEf4y@Z0qLGjtZM`PmS>JxM!gl*W;8gj|E5X|pFe|?^1-CC*Yg)|a2 z6y8X%d!C-Huweh&PC{;`BTdAvzHcuwJpDNB&eFm1YS}|ynCzU`qIo8Nt&2elb8VZP_X+#Fvy3xZo<>aWdc|M`h02*(V!D9 z5K%Bb1YJ%>)^~y}wrgUAA0Tyly@Mu;rTbB~ow#^+cpb{lC2uHu)wU956h6yM{2L#K z%1og!W$Yl6&IWo9o6XVchsj5~k!7kP(8Ed@=s9GIwFfpzJ=&0k8fF?Sd#m1hMu77Z~_ zcB^@z%!H04Z2LXyF}d!4!9X1rDs(ZXI(+1f`h5GV@9rfziO8(~3s;YlLIg{rjdksyTN+RA zgC@{`9lpPHx1PdSV2ZA#ph;sKVV?w7|6|rrzxTQ|={t+K_h%_}P-v0@H{SI$-EIuX zzIcUMgEmI%F4v+YA8DNX#<_#DA2z=C!+|#@7xY-MevTz@b-`==29Bqzo$Fo zingsGPNx1&31?WMztB$8wbK*wOpH?yYc&y`q0i=ZZcRe(7v4>dC5h#TP@%L2LR4~N z8_LwfK@l78T?jq>+MLUKqG@pO2@m>R+#dv%erennFTecq3H^bhkldyQ)lFp3H4159 zPJBoc2|N84C8xCi!q+Wc*n%}-VuDUA^rb2;dpP{x6kD554^CB*pi)g>??Va&r2s9` zy?6WRwxe)RO1+s z$~GKhgHeKdxo7HmItZI5o*(!vucPM%Q-sNe)h0KZVZd}FK9l!qJYdDbV-6w0{zZkl`RQJ~UcB;Xn#If=gt%eE z@X0ILm~y*sZlj=h{Ys?<6xDzQ*tlE-iC8sP&oZe z9VBgj4Q7O$K>Nh7w@JeG80Z>HP9?;F=RV6*d|a+WeFD#p70R_up7PuZJ*f?7E&4y0 zU9!~%R0kp6E-!(EN=zTz43Y^%(0n!C!Xj-X)~b#_5K$ZR=Uw#v<`l7?q?)=A)FWJb z2Z3fHy(by&o>5F!;oJYoEibI~Z7f(0`wT@{IHcEfUfQ0%?JLQ1*1f!t`VR>`q62*?+J0}YH=`&)T!?$qV5wl!68sP#L~RU)2Zm8TQZx(IxoN+F+}Mb;n!tMK&%Fuc^Et2`ObGvStBiWZ_K5n!28nU z)x@+25}pkjrkaB7{oSa|+wa^fvAb>ZEN0A|6eCA81d6Emr7^WJ+aQs<7wuTOrJ%DX@rAFuqvJ5-AefErgP8n@Rgf z@q8N+9d6ey^ue{qStRKxT*m6hf{6@liKqxB#L0EyEg>uw&)pkrP8Tb*xv;~?>&$Nm zmByX&7SENe)%A#l$SbmWJFtDFbXt$BZfJ?t2$o*KSTeKC%rQkaw%~FQLVCvbndVX` zPM!$kYu~u;x%6D?CBza2+iqN4FNN1L>f`Fr0;yxYuPe?Q?cUo1AbD?3bpQyn4Liz}G144{_Ht{XAdUfd zarf@sQx8osZo>t!ULAf~gshSTfLo(Ds)gmAB12QC!ewjXQ?ywI5^0pa%3aKl829wM z)g_A1{q(0lJ);4Fz%_9RIP$OV-!=N~@aUveq`?Z#(iF!`_)Qv&w@y9ycr;Ov?4j&g zwc^@cU(rtQZQ=T?Fj5QAYfH<}y%RvOOrexEtAeAFXr>-jm(fu}|Md3S~ z7B;p#Mko-(FQF?ayEYzteD8@U%)zB)WXe*~oE6rl4f)X;sY2~Fh?8E!C8VhZg{n?N zterI^%mnhrz15{ja#ZD_2G}-+FeOErJc6Z!as#;>}^q-JZ^%nd)A^I~Bt*w%n_+ z_YC6f-N)SZtmMN11j%N9l4t!kc*nl6^y&t-U8l%0gdaL}oLw66NZiZ!*@KKg&`@im z0#}7QW0W_7_v+ks@%7hVKe09vC@zi7-~wFMCQ3!F6B(kX$;>in;JD=_Xj+seQ^lDU zX5Ci<7V*(GYzm{#_r4T1%qjl#_@n#ELdnAK+R!JGt_p*?cGv3p+ISW%i?j{Yrr9{B zP*m@iurrA;+!kevjnFu7qgpIbIJ`hMJlr=W)0{y-fa7sbdtc!k;T2Xc3x)*&i|tTk zy*L;o4#gCO=Y*?RHR6vpir6`!O>rY?6W$YcX@0e2!z2pj((|>6niEMqho(cp7*Pvk zVjLQ5&w2SVk*tz9jSIHkULDG6EAq0)Nh zS%O9K*5%@a3AG(X8_p0~P9icV^rtth1hN864Nh8X;iRs|Fz7x#N03<7wOBmsSv9+F z2WoRbnd;OA2_(EH_p`Yy&}F$O^&|==#m?1m2+cG;iB|a|&(Fw7?(kPZ>WSOSqfzpZ zIGcw9K(GgZICwnd`0!Bf-Me?P=@Kl~fd_yZ5x>Ver|^mr)Uz~8Jt!IUfRK>loNfG! zpT`$gJl&Ld2Q7?hJ(dMjQQ?AI%JL2fiL%^TwaC|?HMGZDYb9ZBvnD{2fMSMDO);~z z=D1XZ7pW6is@y>1>0Zr23Lzmt$;!3t{=J8VmbKnI_k4xf5|R!RF0e$TDoxZ8@cTMv ziTBDCuvFFs+$I~KkqWe0zl6L{SOUt6lO!(WkoTmZO$$q?2w{rG(>gf}A)O>HOYl-` z4w4k60uo#+60X83kR9&RyahT4MWXMoHi#P2v*5+aVVwKf99OW`v;QYo_tvWSRlR-u zfz^ZiwRqy8SO}QlCNZHkwWUb4MBLC6Pdrf&!B^p-2%d;YRjRh3YHRBjd{h7Ro%C~a zJqd(1Yu)$nH#cLBIX2h0hHy;ZUslJ)V$B#9IQPYmSz`_$)=-{fb431UzvVL;1It|K zBdmM#)*($F2)KOE)b-N0DK|un!mHj3B?OIS4rHZgs!n%lSi7FB`quhMszytq@uD6dkk+PovMb=FoTI{#_no^Xh-(+qQAK zhA;FWV}?TIdG|9piss*%l51gM|Bo6P)Lh+$@$t5<4NN|r3*f{SRY3*{WpAE=r*ZS+ zAOH9w?gfWx(PX?K1tbi`HQV$Q7q>7)oaLP$C75mEcBj&Ej|<6F*&eA|+TJ@mq?8QK znx66O*|YOI95*U&DM1)t6?Uv5h@9p`iS*ori6Cm|;ii>TvcY@nvbs>Wx?oV^vL;){ z-XTE_-pT#MSJJ^}5jJk_USW>hJ?xFv989lg5%SO>tw(!+1=IzC5?07U=HEe7V8&`^ z89`38ULBAwSV=srsvXQ%Uw!plY7%0}LWeVDhrhnH?X%*k+ko1IhFTZbIfJ2jiH~P} zDk*PmDKC61{S5OYX3&h0F0Q`QMJ(xMZW_p_>UL;_ZX~Ob)j3%3+zx+oM`o?DGobKJ zHM`4ixmHKt)~Q0}}HMLT;b@h*kwgg#3uw-(0H95fnl{NR=f08_NM*A*Sf z)c^sA%Qtq$OWzaD0OgjmTc|2Hulb=qQAF9kx2HS>MTHp>LaOp%JwMrVc_{R2zj*Ae zcSfs9WyWjsZ4S=+GLpJfgpQzZ7)wavTzm>a6?&n75Rz2`p`K*n;k*+K< zd8q{u3Tka7IQ?}n(Ienz=|U=hqC#8yI8AOEQ)9QUDxuX!=$FgQmxNXYsaJxer{tVa zo>0nr@4a`{!CrtSCU@-tPq4AbQ7I7QdbeIFJPjs<@hCMtANmWmq?re+RJaXE8fc{^ zG~`NHgaU6}Q^bg~GEf*tJc=dXV|~Kciy=dZu=LE;p7wJJUqc;vAaxTIHQpx4SVrM? znrls3+hjmUMSPuyAdxE^$_o}E1pskYTvX;GfvcTg9x$WEJb8hPC}B>z#3fA*JWF*i zqoh6ZJC|DDk!JzpHRbLb8GD*283 z46Gac`sU%ohZnIvg)$!AM6!ZZwSv8gJ4t@%p}OQx2`Shd3$_<__(RlWu^>_c2U7uu zDGtnvi?bv~pk9qd0gVevp#cj5_ls;h`iP$0!pIrGJGVKMQ}Y2&gEkOTgfRu`hC#91AU0gWx!E~~Y1fsaAvP$tU0`)u!ly6A92a%h`J!K<2e z`6_JLR(Oykr-8z!7e=4&0>V{<@;14sDz^6tOKcNrh$R<0)JxBB$k8}JQP?|5Uv9yk z=&Z%sZJo7~;~_xVP%`=sJ6I4tAe~hx>xyMRg+jz>g>EQoF;6iH(TIFKXgS>VRo-tp0+N9X;WZ7n*Z-awrUYu^4aDi{dc z+{WIkDWQatVO98jSKG(FpIm@6v(nW^kiEv=m=zpZr`9?Tr;AvAKrtt7oPOq=03uuA zt-ubnQS<;e6FFmOtdS_M206$O5E|koF*GGwtT0ne3-E%-g^G7$ z0R6?s&mds9DagEe{P^(&GbF1WBVz)H?QZevpg|fqa4DC^8D%F6)xk`W6(jAB<`7wS z4t77|_Tnvv-k_i)@CaGoZLAPAZE|Bx*=buSUZyZgC;P_L=bKX-)aBEdkuOOIN|cDr zLbLEPC`{fFm)E+mjx`{G09bZS<>YNl^KKmz@V8r_9hQYX5CavWk|1rZdk4A$)qhZ4-0KdS3>+|Mp;zZn)25!$v*ZyNG~`%rjZ#L}EG*MA zgmZZ8_LCk%pa;c70Xr9KSUUSUQvq-E+1A0HAj1<;VHBgn-~l?H+vr{xmDhnBP)O5x z1DXIdI2ZSW2M;bP48^;ZiR?EM1bwA?40!S*8g(bWYDBAm}~! z*3(VC1go$~lg(nou}_)e)yYIWblhxVJaH@kJW-W?+>V`!KB!rf{iEt{e zlFVrw;%U4jJmunqJwG9b$?m(2qyNI;Dnnl=Wk1V9!Xl~Fq@0F^(+QKN;4V#Q9q>P<3H<_e`)wh$WRXko9diE87XljVcAsP*o$wgy_s$ukHk%7ZZu#8DN&xomYMYwk+>Q}lU7?Q4Zl zij$DEu{hOs2$6^@qoRPK5}Fdz7teP=^d}{U$I6*kEzd}E(XlF7_1gii-=`N8ElN`B zJq_a6UN+D6qCzd9q2yY1y_`@6OWvc(YzmK+>zspr3X8aKu$lHe#ugpNfPhTWV;Vq3 zy%3T+d%X2FJnX$l)R}CqAbFF+bdmJFkM_*o>6Q=D*6*r3t*}N?2xLx~zRFUei3HDKe7@kt&1u19#9@gQ1)=XvK_?JM z+mv@hHsKFaFeEnJXT;LD>L8nnU^?{J|Jpc~6TEW*sP;i$(B6{(^?4nP)Cu%%xcI)8 z70H`xKKd9yKnc6xAWv|6mQwMAQF5t$Ttt!XW+1%s4|qtH58NfMs0+&?G=ah)&Ca*? zD_MY3?;Sl$JXSr3gt!uPNh?*qjVq=5Ex}I_0}epA3ElMXK9>%uC=%~HBaRG781pJ6KzS0aX+MXaQW1+Ys&Sz1aM@v{ zl>sSaC|23w@1n&2?^0a~YCUoB)=0Q+^K2GM>(-%0NY=VQ z4?@)t- zI@rxWr4^65IJCbG5sS%sDd5uzkQX*q{3;9s%9G4V(&nX7lzS$cyJAA#g#3th zlRc+1nz7YhV$fB|E(X4dO*sqC?X&2G;rAO`Ry+?@LmZ9Pk&6jYEZ>b9A0at8miDzd zVFA@;Zkx<>hH+5Ioj}fkucBXPRRewiwy6Ek1ZG=H0(JP_*0rEaN6#+Y%mC8dM_!G0 zrAwF#Mx+FQrm;d!3jJ*nB#MjU5!KVSU#e15c(rk9alw=dcTS}vQ~^YSWS?v`+%hDD z$${DxqQODII#Z$AB;xZ)AvO_=ksZ!B;#JD20(3wiV|KHHqpNwZ|} z&o@@CJ!^^w@tyB{=X^JzZQf{l6_5$WqrQ1)8s8Gvo%hpS&@#Q6yDDjEJrJyq_To zWI>5POQHK;6wSk-Je-0lWcZ0k*vaZ#)J`Wpyp2EzB%0sN0H72eljN&=0LFMtRYHkC^N7-XTWD>Spz&bW>u;q(G#Ev!GFO|En#)v94N{b>ompCZP<#W5cpi zcF$4(+f!iX@TByRr>T}Rc35QzF2YMeNd9(Fbcr;s6mR=U$m9dUU^k|$Ys5_4K1yea zqVRn~i?n{lo3rBe!(Cn^9vSbEVqyIu@CrhjG7q`cygOixkM#uu5A$9qu>BEVWzjai zLIzr9qOWay?IGky&qWcOj5JnN;wn#FV7&)YOOAr)0GAJ1tC4%-?b2$WQec<);Wtk#npU!HxCIQM9lknk8Q&dE)C-rf@3hCK44rVS1J20DY0%aRvx#U zj3ltIi~=zst31wRs&zt&r-+jbL58_JHEbeNF8+R&A>+(z&)67s+mmD#)w%8NN5SuK2~G_7cdI6c6~18?V8t1{I%EJ!cUi0VrBZ586Ss zDjtn)B8dudRzlIly5&*=O0Ron;fN+8?9kzEvzquekcJ-?Uw4ypZ#rPbP^PgXS1ZE#hhVxny{uggu& zb<4^rB-6N3?g?sPmEPOI6gE(FmGbE@EQY?zG=)Y{gPn@uxAt6eJ$uzWq&V@sfS6JC zV$2$rsGe-SYs%8|brf>ZYmO}`ZR{P6o(1)gqHuTt0LUi@Y;)y~w?z z7#*mbn@fkNHQNF~`2|*~oJ#Wn;{+GYg2lKAuixhylLVcFI?zOOc0rOc=SWBtLJS?R zzR^5e$$3ds2|F?Y(&uuw#}dAB7Lu*WNqb{``syl2;u+Z6D3&usop8{8_A$9|4a`?WNt4FDQgOvDy zR_Pf{EaXYndjA{C^S3=2~Lqn?zd*3kF5vzZF5me zf^P-)J-5C8b{Ql~Po6wE^Zw;8e|aqsBTGx&3zb7zgQ%*Z0ILT1gI>X&=t7eZ0tx^% zgePxYLLxj#)z9)P#=b6t#>lp z+9ub$f^GbyX9lX0ykhM~!E%N5dUnq=cTpE0m7BNUe*4nko18`M0Ua!Hs3xKRBa6BJ z&&n(`z&(;Y(>a|r+vj0K!J9k_nGy7e%sPxMMYWAYG(S+_)21V;5)+dj=y@$-0@4N6 zMyGJ{V8TJSP~EIqA2>`DmG!-D_XLRb(p-c{G-n_@8nioT2(S8Y2MGRn8!mSM^selZ zYd(FqSajp+-C$L%X+$$Z7^OL3AN{~c#2MId8+&S;Wo!+5fF)CsLNkgb6_ML3@{r0hOQ7}A8d#&k>is(>b z83{s$$xjNM^6cM2nEEXDzR!RD^C!eXwp4_(n(U24J~&`jp?L^zuE?e)((%ag(44ALz(6d|BpVrJxR969Wpmjlg%r^>}UP!_|_%EsIV@ooJCDs zigen|TW`H}LB_vUV~f^-?yx~Zh-<^yXN9KpK`bdTH;ec@c$t?bXo><_AXLZ_3t7`H z9*W-Of%&itM6-0RZ;Igi-~ayAniCe0JbC@~*N*^sK!(3k|KyWTPK>W-BpA>wHj5A| z$k0wrsXLe_3uzNiFuEXKZALdc_+Wxr5?cAXh9|J=cx$$JghkT@#-r-{`uq|^6@-#i zTxx>O{;Sbv4-#ok4wd1Kku240Vo250VIcAHoXU#T#68)1&@B?hmt^MrwFP` z0Ms@_78%(}=bqhRV_hNe(>+XM4+ti_P?~xpVe9Z=W^CMD!o9mDCap^zDcTAOvw8IF z&7FWU_7`FV(H<;3%dfq_^!Wb!?_Vu!$-q@kIPQBMLOmWpW9_-TTr#EDN755&hKD1> zp)Dp{yxf8~J<4U54T7$Im*U}}0x_rpZZBIOZ8%xh3fDk#8?Sdr?!vGyeFQWM`i9N| zm?qi|oK-vlm#uIUYgY}(qMXFxg?Eg*|H?%qn{-@jU9KiY{rs8cDMRfwCSFGdTb|;g z2wVHkQ^qCkr2c?~rn4}4s_SSSzW(*EpWl~XaoGmZR$~NkLN-qh>gm&`7u8$%GFbc# zkfKT1^^hLkixd7{*5@iiPe4-s-}uHij<9!8aD`z=69D+*2Hn9!4Zsr6DGTus>evn% z$fzV&LLpY4z+0#eL6=pFY++NnDUrq%^2g1$g*++v7FpvAZ5R7o3%(`gaLaA7IIm=` z_JiVWdc-#NJ{ufuamvkEg{2URYC45QE@DkYkW1;vqai!%N2rF^CE?>)OJ6IF&TEh$ zl?bOqF&lE&>lN&~W%q0@VXG$q}IOy$N@zDw$ETwmB0R~7O;XMkKmN;H+XFGZ*9^WJ@X4+_`CtSS~f<}@OyXf|sRjRHG9Ac_x>O_RMLn0|5 z?D9=X;-TrH=~8L$gr(#$%x$^7xxE^I=*A<-1sU`_l1BIm3WJBy;Rr|1B9Vx5FnBjA z29vGwM~ah`K&B!Eu_?5@@7(o=&>oj{_DbUiQW2p4YyjCjdR{8GQ$HC7BiaXnndkgx^@H z!deP)cnv~!XaTGx?|@eTg(F0i>?-;q?|v`L)-!_#w%?kHH>XftE=*xu=orQWpulBy_BU^_Qc5)&KE3v8vw)`U5+=}UKCn-(ena)el+fzK{%_*5y87s^~maHXmETmP?Q_V4j)|xUJ)|zx6+ZWZ+aw+5%o?D%Yke+I1 zmB%O#beRLo1rLT^qcFgYQ5dL5V;;#91wtyRO6+xW|-K=5LUOV%2f;<&t znzz9qmE4yrIdXUFLS0HyDFy-cf~kdpPmqhHifyH&;N{zJvF{eSg;Ksv`GQsAWamkA zm`b9`l5g8Ryx?3~Nzm=~f^Jz$LEIkVo#0z8n1y>;D1s#Plk1tFba5$=;jXhpAVkC& z3DPFI3M;ful2-{0G*Sl$8)l!8yrgKh`8b>~Wt~v47WFDnK!xugERS*$K1gUOFins9 znMD$*^=pnjPmPJLUF}nc3ZH-f-$CwuJ(qPSw8Lrx zGJquEwLuW&nxg@3&3k5R*4nRo57Nim*uKO|^DTL5{4nq!(0WAc=A@p0)rbB9x<~>T zLQ1G_!$RJXjHHM_0qtGiO|I>A>yWZkO|M!R;6RdI?yIrnv4{$oj|)%^X_d8Hp8TN% zxF~?L4^;@^CP#o+adRVj1hlv9xrpTEr-AsRsxUza1=B%- z27t)n>cFj2=nYy7l6AD)?IsB$j3F*%-XytcT&x6+RndEMG4oV<2UL)GXcmHmEM*TD z+kr`0^zM{)KW_~Z^bV?K27M072X4Mi6rNGe4pq?jwQg(0!3~5(^6KDLd{LT0d4j`4ke0sF%FIdAm~}|Q)w%gV5}_h z=1y7WZS`M?$i|B2MxH~Srsp-DK8sjOI0qMbTY0_YGI6H(Ukb#Nm5oBWk3v(-TsZ>ki{K0#Ij|MDF zrCyeMhzp1!?ig~RzGp)kuTTT@M$gZB-s;mmB;vQ?;al*~ICbmczNgS&x2-vp6EqYH z4d=YVCzf?_QPrazvXokD+QpSMtMI8mDaYoLAhstk!kVOmU=nV;A1+?}KJA~Xz<$@e z&>6IDc}GxPeWwIf;}25VSP1ks76Aohb?ME(5b^WgQE0A=a1$bD3~=_PaY|4$ylU+*0aw+q)3GBAM^ymPmp7cQE?!KU0y%t z+2#YUuA#dSD8r+_)W$C#l>C1 z0nHKspR$S2C@Ou0Hx&42?2Xu~&j>ZCa9sFh3P{^OvC?f=(40ZKz({kawg?UPeB<1f zWV-ou5D~4xJyRl$Enxva(^U#=wePbaw~LN=AH+=55)zUGHOi}s2VfM9o+7F7$UTslMTMf;Nya1r$L z4NFFix&D+sLK4{9y32<9q|58>2jwF_*nd00Kay=TxF6C)7Tf5U=(E+s8W z(K@C)ap^;dvEb#U3v5PXG1H)}RZ#^Qa$)khDTN z`2)EWJ(d|fkXkHt^dQY6L$BXeKnZAqepyJedHcCJAM!M%XzOz?X*Y-7i3!-WOSQiy?rMDhncgqU&TEl!Njqj@L%P&kbZ9|#u^H;K~p)sgY7Lg%R5iDlYVXwsQgNJ~36h^(T3K`Y$f7Y8zQlDSnVwuMx(m+^ z_ug)rbbRemnpng5KibWgs6oTw-cNm2T)LrBi+%ybguh-a-ES|T)yX4 z-vij*Zy_+_4C4xWU}8i1{bp;EXA+RxFX1#+Z*uG z!YajA$gqhbg;YxMRc2zK)S117WKp-_s@_j)w0XM(&|wapP@>-pxky!y(w3uhrkN>Gp>p%NA**xOmc zt1uYlxSTyHzb+1C_3{ndz*uE6C@W>w!4rm%>?RPcWvB%4PK7Dh`yfgvbc)ztRMQwd zDYo{oy+cgaTH!qJ|5J#)yK#3gy5uPmikVxSd}U=JisJdSE@7sF0iqX%tWe#pfsIg2 zKjVt0B${i=5-$JnhJUK?wcl)yu1R|{$jzZQ-w@2Vub5Jl__?f6wkc9rueqfwC|B=eJwzJSY4JXwmc-VZOUhGtiTB<2 zL=BiQy7v3dacBC=U;gqL_wRo9yK4eCM3IXPdaet)Jwz7ATkN|5Wgy#lm}ttAMfm_A z0BeDkK4461%P2*w%@`s_bP5RV&HelLFWlIz?(D@`D{U}EEAipRVdy ze9um>6JG9I@5Cn!tw0foPqTJ$REz(Me{DH4g+ftpi!U3Qs|eG|trCA!vfSnpO37u) zwsCgIz^ODGVND75H1;l{{@uoQ>x*0C=IHai3m-d}odjf`Std?32oh=?id@VNN$aAk zy#x>MhvlQ!f%!C!zMp`mcw1MDlNw_S>wq4%Mw02=aF>k4AB0hBDQVwD-}5>!?NxDi zs3={{k~87N?Juw$r0~nT2q3z6q`WEN!q;AV?O59>YTd7T2NaF?HacXK6+9$f7wTbL z@GQv=bo+<6t-p9opj?El6v;uA=ocY5*Li5)+ZWBJB}>(GByY{PeZz`~uc>jT0MtcD z?tw%W11~8pH`KcH92Cs$ZOTj?0NGJE*#5YLThIR89%CovIY^4SFoa*ll~s0=mz3vH zPzb$IYLd0iuyC8kF3!Um0Q3UfJSeloETj^nMCfcg$T0wUf%Y*OZf!d=xas>HrUJDO z;O!V%=_f^lka}`i`XtCNwB~YU&6jtYJSM|(Idq)nM2revBq%6Q$IYWhk1pC2!bJCy zl2O7UVt1@N;hhGiC`&Pr7^%b`tHOXJZyRI^rp0JrTx^>nTmYd$C}4LbMa18hcbh_D z`LgaQPy8|ByNIDMVZyt!Wc?TX5YuA^koCrTa5?m@=GtdEARQtkYxqhq`l;}xJT=u` zs%aj5dV>`$g1sAg0JP5u^PlzNrg`vi4qK|@Ns}x(xG*2n{>aZ04YR@uaaJuw;;UCFX z;X(V)I+KWNPp$2Gf)c9zo>zs&n3v-MT_~?4KS~J-UgfStv3?SI9+Rczl}Ek>k_bVP zhk|vn^=&`9*po?ffXHdhDI8%$IXYnsyinFbyG!R-WwMz57637L5DDf%$v^cjZ7%V} z(*Y`38@sS3?_FN2?`b_qS8SV2IUwK?-idk~A!k+J@&HKfT<(lSFj$Rq|#GsWs?DLI}!WI!>glP_?wg3+iaErB)u;nG4kk0LcFWeBJ6fN~y z{0=FFxD0p+MVr;)wqe3Mvha&jwSg^m8!O3^7t!W5$y}eF2bG}f6O=?2a|){e5`OVV z&4z_vC^!jIhY}7KYM{@glSM-9;b1)mW?xon(TK8ri78v znI|vSo}!t~h+ti-VsCtqfC%<@d-5HOJGl-31hM-4d~2E)k(^5Qik?6W0nK0%5DxSi zXIQ=msG-li5C%Bm1F@8`Z!(gR9ndyKMWFBwS0n-BGRt}=2uocmc_Bd|quhpwOEtkh z&swIu;HfEWESnN|5;&5D=m(6073wzMMiv?zD+c31IPhYR9YE+6E*V!J$Nm;`2o0En zTi2Ks42j{(lSmvXMAKbp37!yxr9@fuh_Q6QQpwnbTF!uiXuJ-oviHJHaJpP?Aqa?t z6pPA6$>H8rXuxM65h%#*7p(HQ0|qOsfQP%fTsd02^`6#V{{&$(V|B4elHu|1{Ux_x z>_PtWxcYqu7q`CToY;P`>Et=(36g5RByt_}ZG{NYaE|(p z&_eG=LD740o@dp`Y4qMWp;BUb(+l!#60j*N``uhHLqg%8c}VV3ZrguZF%mBKMTNP5;pgQHRj4{gcNduDlqzT0P2`7_d-3sHg-3VrzS;bmRWZ49h{gsZ@+>@(Qr#Eq7W32FcYv(Kh< zKVOs8TlI22xz0$a$p%Is3!mXcWtnh|ao>Ffec{cs+LhijiuYG6G_3RK{ z_8Lk^c%jR1`&zK7T?AWY%A&_l#kgu*?M<4xi z2P>CV3mD)6-KIx<&fe2+!f2YK$iwO3!1zO_Aw*2kE4-6WY0P~u4+ii7fgbduxcoMa zZytJw3!j3bi$<{6A)Y!jLOl#sh9}vxb_bpHm9Ko|B9SUl=+*&u>LE=)aS3;VWztJk z4suH=e8S()P&o9iEDVZ662-=_;P9}p?j?n6h*-5tNi`#3blZw!!`K@eH_;{1yh?_J z2GIjk_yS$B%2$!8s)7^z>Uecc4;mlImNfX>S}%AtfYG z4ifmB_&Q5YXb)DodEUEs?}Pv)Ji*qWPEwAz@RM%`C~qcN(m(kpKl#admarJeD6782 zV={vWM-v_#Ox6bCCB>Y==6w63B<#K?`F*o7#rLPBc==-f}`}#uvP?*CiK>)-OY*NAJ zU{`xle_84hTexPry&Fh}jUch$DIFcAB&>vo6o2ssxHTVr^wD_^*c;&@XnkIT<`fv1 z5*lJI8AZ=hW__=cOi;ODI##g;(A0`WqDnbyC_uOhqLNXP9$5KhRZ$ejkEbL)` z36{$!B-Jw;3*`v8(|b~~eJ)El;a5$&9i6av@+2hbHM?m&C7ik1eKrNJfj#(MYlFzn zUXBI-MNiS0r2kkkj!*0Bo8r*-M_>pAi>!tBYAacqBWNVb08=Z<$* zNJlpoN^ujW;y($3(1Yf{JyZ+5zKP+r*<7b_Vp-RBP;0ueeG$~t+yIHfUL!lw| zVq4@$e=8K~;5TN8d_u^Zd7h`eXNxzQSNn_Ak_QI*2Z^Hcm;2m*yJUNJdkM>|Z6^5; z3&s!$cAO&AQd0g!hzo^4GRFf|3g4QMQGE5-HRW4+ZwejGzn@bMDK~sSjT^6dW9pFO zEF#Bft9gH(FKG;wQFuy^hCb6AaMg=VGY-fNI&LzgNRj7A7R8MXrWC~3fqQ4#DEUzps zmijii(74wI5avFM0)qD;9MGQ*3+6`SaCx;bx!byS!NcmO*``taauE_a6r{>MG4`!m zMIt3bzR*HRJUJ2G0;Rs)qFC{uhM8i$x49+PcsvXr)R13u^Z%G+55 z3)OQl{V`@akA1I@76n5otc#5>PCOXOrG4E58pI7Wgo7e+s91>QsN#~fEz#%jLVxH? zgi5*RrDR*flDy!k{aer7j2cPr?N_`s4J=g`25A?x$L{S z;gktz9)6k>xLy>_E@j(0K%P^YeYVR;VIf0C*bmF1@QBOU9y2z2hOk98;drIz|mBWWm zc_4TK6_X7|7StpY&NjLmr%i2OSys!x@jTbG_!1=zxndF6S?O8Ye%!r#_sA;< zBN_v-dSeDhl4AaXpNAKC2#m=K>vh~8n=!|7%a7TWO%6K;F*bMHx>qvoX5fu zQA>z->tsisV7)to@>n=_T9>}ld049!Wr=E4;VYiT_NO&IwH9=UyclS7>!i0W8V5?4 za_;vkRe@9(ghHr7u4IcB)w`hYcs{@-3Ky5_2NSVSTw`jllF{TY9U{_!rIQCjKQ4w} zj;pX&vd1Hp2ebAJus!oPFTecqg%UOa(6APQ8`6Waph^JtptvI>x>`6EB0dZ5-9iN0 zh$wOu=z!9p2|$yIEJ_m$$+DDap{1-ju~P9sXcSDD{a$jJ089KxZV6T33li&7O_^1; zt=^P>yT}q=mlIABFiwe+e(um|B?vAhWJK|RJPK(*u&^*B86k06%dFn^OG6eGFc)^i zIKp;>Szm#LD#k9T3Q^oxm9@QY+|9E+(~A`yFKTD}H#&mhpQrR!31jet$JY3~@2RS! z1SRTN!Q@R%10@%~4)26_s6ecJT8pbN3p_X_lbky^y|cq*FZ+KCg!ZwY2MQ)P)y05h+dO2H5tup&;>ytcSA#EhuIEjeZB& zA~cE~#YHTZuKL?W<*W%23LgoH0-d-Z0asj-&dGZE>IwP`DiEk6bIO=__uY4|J;b4t z7+GY)#nE~~GikNTXlZ|ze%XBe6%{xk>G<$1j+=zFDwFQuC@D_q#*flMNCYWtaA9y6 z6#*qEDQrjt;UIj^1kHkq1$&03!wE~uAYtxVeGeNaew>my9oQBX2e+FSUp5YVF0YW5 zu-5kd$&J|gQg>wBmSxXLtHSoCUaq~P=Qt*7!#ikg7OD}==G-H?eXR;C2Pq7^c3B}+d1d#GoSg)WgCFF z9VFX8w}dJha4#<=*YCv`x$??+6$n_YK95=#3I+aUg!2UF$P;j+4U63$|aO(;Y!SZv_bf74w)~dsP|Ni|WP_3WhyY{KW ziHJ%KM*GmbTYsKZf-h{ad4&|19=&QAgx174c@TZB!yu;H{Ge1q$EehX?%-|daJ7gm zcS75_ z3UQPY$IL2Jqv5wXL7Vu!WH^}sDMbU`zPKQGI4(K0G@YaNT^@kvPjB&f?UCX|mycQ- z4c1+>_7#gLi@dQFh6D#rW*d9TIJs(n^a??^mkx|fu-~=D8P2=~UX4%{`WXlxOwBW!p#gMrGtTL{HWEq|lw~I3EHUvzK6|#+vSxY6rSX*sg z$s7v516DX8q4~>S{&L3ir7wNyEHdJ%CengsS@ulWRmm?0P>hbk#}h7**rtj1SuD39 z`rHj`ApleOAS6RLxnHaYpOJ_aHx+h5pPFKjn?Oc|$V>cgTRv{vJB2@>g(~rc9bDML zIrfEM@vbD;8$)~2m}=s%O=+N6TxzNtwM|UOn`_9e#@)Cel30W2I5t1TxM+?kmA(FyL4=h;L8&r>q zNW4WFc$Wwk@maMFNb4nLkCI!@U}IOv)HzJ?fJRcHJk*rEm^lx(Byqp* zf)(%X*}{5__s@U+^EJPe42pU4>fqGdyOeR14{`yGw{=XuTz=>UgkmL5Th~6T%C`OO zbG>t6!II;s#3iEBC!zszj_Hi%Mi&X&(Qot<#0q+Qt zJDH_a)o>{65qi*Lben!iUc1aC-mRN%TV+?YybLdJk6Q84rR1(qh;yuy zRkGG|3U&7GJ}aatcOo9>Ja*!gijogK}Kc6| zUx6;?4;>C9fzdMS*dXCEcO6c)jP@vu9_apk*YcxP#o5ZqB|7hu$-`#M*`9 zaBUYQo(Bs+L5BwEO0mJ32!RSu7lve`+f(8@%dokEXeLZqzF8ltkkJ_{aHE*9AhL2; z^gjmigT-=Y~vTV+`hC1Fwhc0O9~~Yf;*nlYmPWRbVd_f-NF*E zNH9}z)U4J1_MHy5>QD(jBw~u6AiO9!m!ICO$fNAJ@S6gfeqV(nR7~${9a?)lCe26F znv$mdtO{BA5tjLeOHdiObme3qOL(BFm6h@LnPj4K#EKSr4nb7ql7J9^ zB8-(6DKCi1IhpO}SI3?9;4QkF%9L^9MWA1yU2pZJq$S2w+u3g_4d9!Q)t>6_w&|V6rwrwJcvDgvCrjq z>k?hyyn9I>%o-{wyY2OaE}&6VGO`9+j5Z));3{><`WXR5qY7Ok&WsIG7o7$#f!ohp zh!&_rs3@iJNc<|}M+dvY!y|FgbeU*00UpTm6pv&%!t%nzvuO9Zs#cYHv&b|@(Ka%{ z0tD)E?gsVw9JqylF>1v2_TrlPeN<`H)Sr7PU$zNgdchZe!4y6MvA$&t}N#S z7Y9Fh8&{ZXEB?5oa^jM_4hba!qeEEFR>amgyQqu1w$2}Z_~8{(O{p+I7&a_r9Qf^FVabpQN-nPMq#31 z3B}8k!A_}~TSu^dj~=3DsuyVfymOFGUa4e$d%^RNr)Ui&^R)o9He2N?KY;&5e*>X8 zmp?1o#oXRBt`s+Ai3Xz2!?rt9LT;_6wucPBjH*80&k*))@f4CoUK}sI_X`n0lcmR! z2f7aGi=hhXgzLWVGq7+#xllA3f)>*xMsE+Y+a3iHXl+vdJ+r^Pzt1-&tfvci)w@Cz zzNcoD)>5rpL%&)03MHTc@Myq~_j0bX*u9STluMJKWW~2ukrIkFja8ZA&T8le z*Q&5*^t%RE43`zw&5m@e%I5hyM|)G1XU1&<;t6oH+01iRIRyAaui6`z4{0-a$!tW=ki@HUDjXkX`h7r8V3ed ziEj+DtsztrLl8OyHHXl~^9U?FGa$PB^nCluxZ4)2q8Ys-oz-QVPHJ88U-f%&b+LLqXc><3p3cwe zu-=_VoKER|2;%xoW6BUuCNn;SkJ_7`{`98@mipiS{`bnr3APT5BQJX@Z6yF5h9=)a zLb|XxS*#5h=Qk^K8|Y$@R4TtQeutxh!dUl=CL#f-(RhPz(ZoJgmx5A>Ln<=i-bqZk z*;xE6B?oGgkcw->(H7h7ptnZFBWvB)AIOX5VB=gO5?Z}m41e*nRcEFMdZ&1v<{WYw z2^J-c2n=F`5+KA%>d^u#K=B?M-*~v%8c4KPsByvQSTOxAiwYHm&;|D&6xH5#*|jby z>JF#MYZMV+cbjNz?fPzt*5QM6QY0tIwijBTNfE_xnw$tv^tUna)*6fQ`{n|*(K?%R zb8W4%#4%g;-_C(`*e+{`>)@Xuy%fs9P-BfuIdzbckIC=wZgoDx_adCe%W|gL`_`#( zHm+)8aKf`_AxE^E>~|p!alkd1uKgC6C@*_=f?p zbvq2o=9x_LM79x4b8oMUJP5Zop4L`R;$%<#jvNb*nKi5?!KEq8md-JM3bOGv9wdZn zI3#wHzZ9$RSK~_7po!#8z}a1fXfcG!8b?N>>R+MDJk0hP&9o@O76bO&)&vSK!^vLs z`_@LSz)9Ms@Ev6Q(G8*n?uFvFu+HL)7E-4mWK^sr%FV`Sg$TbuI?Q?l-S#1zxy_2D(FtS2*;5_fI@SckG<|VubQPQ}Z zSBFs!0A#p5$}-1?BLBg%)NmZ%jxqHtm%b!kYttnpCM>Bdq$;F{R)YuY(u3R*^5mVj z=e>{Y3+*A^YmSP3QgS^%`PLw&XF;_<9f{Rz7Ot%!ek{dpSWDYCd)DW&Xz>hb1u2At z>S3#aCF@FIN zbu3!9@V4J-09y(zW(oS&BB;#kJrYl{@8Z6adHP^FDB@i$M$c2`jXMW&0f&kWQ^=wT zGGr0g*mwH>EDBg#i6sb&lpSlV4HV1fx~t&qZ|kQEP8M6AOOQIS!Bac5SuBOGQbs6V zRpCj@AZUYr!EG;bizSf4b1BL-NJ{$|3s5Jmp3CZDX{)|gktv4XoEmpXA4sP@XaBMO zby%`^w|E5oa_?ylA+j1!oX>YzH0Bf(4?+2Qe_H2$ z*Iu???OSW!oLh5E;hh5^7?cHy_?njvO=7Cafv{x?t_!?NI|bF8+ee;seNA)IdnXWr zyo-EHYbfsDoLf(Z5RXR~6Jw+VG0U2a%V)5BDSAX?&TH>fvCgOv&ShxzO#P-8?IwvY zQlQ|7@>h7N!h2!El$G$T@LAt)Eqh>U}F3i3`U>Gp*ep$m*~O{^Dz4KBI`Q4{E#_&**K%2Dz`f=9Ctg6e zTT}uB;$WF1k!{(`CII%d&`4Ic%3h7u8>eba^t~!?g-%uwYywwMNQg_XNpbT_3CX0h zj3FVowH^9@{_~$#4`yMW3Phk{;P_eU3R&_78gFa7Rm76dtgNMjfL>5iE+NHwx_g32U^{;?|V~P_rCxB`&Svnd?+r9XiHc}A6_9id$nh%3$PZVc@@n)#UbvR z{Kq=0eJHEAIc4;)ba|d#VjW)GR*HGBb&^p{LNpxjy}~2O*D{YH8g$wBE>KyQT1taV z!H(m-$!k$<-FTaq9L81!gXF4*QTe*;my)O;wv7QDL~<@cstB!dv{ssVODfY5t$~)L zE;rfW)12!s6nvpp-ql39drzfv~D>tzw%jGFCV? z!Cu_J36CZqEX6i=<7aqLRAnlflHgGs#5;h~Wxe-%7N71=zOR-*qNwj99_zh?Xd5+) zVJcE0ykfr+!T3UYMv7z`758pRhV`oOqYJM!Ncp$k2`p5tpo-5%9?x_c{>QOOM z_;(OQuCmKg>&3py0x@1tM}=tiRPu~PBmVC|;x|b-XLRAt@w@{pR0yq4nB}sM7VH-Xb}M71$;#7GzPVDJ3ZJD}l{R zwLV%p+L!+F+#!BMCiENFi$wTFw1HldP?rDT{l^!UabV6a{r>c<-Vrfl7g86kI-~xy z@8*vUb7_->S=Bf!4ZA#*{<*whmOs74d*}6GJQXczJVLN)Y7QTM6T)k)s!ItrG=Z4C z1eL{OO$n2r4**Zdr-+ z8X}0pLTI?KA!|^=_B)CX)1O?7OHHp#N>vWWfu-0WncAE7$-l8Mb_m<6#@D=agSQF% z$_E4sg$*?VGmV#qLPS}uxjloRv48T(C)XMZ)C>u_@Lmd^cTw0Rw>JgVdM0E2uCX`g z=B4OM0bp|1f3|dDh4*f28GON*Lf-0fsweGELYme|u zWoR<4iWo=)D{bCTmo~Iq-b{?6V503qtt1&A+k?QF0l0u#!yc*WMjnF*3PTxP z#umH2zEaKjO>go8pAN`Zq;h9b#_$HjEbI7Td)8;Znk1RMQMPUhjv(LLn@7z&n-rRpZh-xbS&Zoe}Zr)-o?qi@fHLvhC*>X(ddPBXa?B71|Nn zXdQd5Pz`0(8u$Ojm&N@-6otNUy*EDfGeTs3-!sry$O(4QsDMp&T9?+Vz2z0~3^2$l zWD_2;SCs!&{|i|O?a0L>4~)5f*4dM=mM7#9D3(M{$Oz`mG=7&3?-i`o{;M9w@G4QR zX-#8+veD!nv{o;W-rpHZH}VYSQAHKhY@G8ITc#UoW6p{*aNocqi|6Y(s{(S#t7P&O zX7yPaZi6imnZoZDY%+>^@I|Lk`gg)BkptG$`y5hXCJoqKMqB>AC?mW!jf<<*K~nif zU=?9$uh;(zO|S|iCKauz7*>*=Ro?i(EhQUUAEZ(eIxev`3?iouY#lo6s&-pLiAdA~ zvi@1F1V+&a3&UlnMWVwiw4wF@Mtv^`94q~8?OD~mC#zl+whGUl*>j+s#GK`4Sd|jT z!Vq1Mtq0FXZHRcXIta=@b+M$JrtT@J4or0%$ia+>>n!#!8Of@0=_{r0=gpA;gWQf6 z#+%q?^sP}pZ?C(^+k-+LE;2F-ae+!26X{X}=$fV1upC*+v*+OoqR2M9*K=D>JT1vN zTzCeOu%v=Btg1p1syG=*F6zdnvNQRVd}mmw81G$$JbFg5nPP{e(w9|;vo%X`Y4e9h zg)V?BA~VhvP9rc%m9Su-;`R(Xdcb-yKGz#(Ew_K_F}kpkndwtYKTzKCeSNRB?%aY$ zGQdzc^!zSh-mTsV$RQc5DAyZP7heX1x&pb&=DQ(q5KO(Fx0?UvR`FgmzyL{<`Cgb3 z7i=pwdx1m)Hb)JzH9LSaef{;<&&G1yTfA=j4rG5-nmu^%;2OK?*_0@&NAk(#pqYBY zA>je{+V4x6vGOE~G$Ig#cM$P=NbvS9g4vi9D9P+|@#P1=<`gXX>*i%?X-a~32;LXT zR{POf_Uz`DwZFYsZ-XV;coiv11ZCpW+&}9JIx11bBH{wKZYeTJc^%QV zCoQWbc@nA+n`InGIQRT6LrH5^PsvP$NaC}sXt7oXh`6wLf5kceEuP)jRnM^9mXnIRFwWVI#)Vw5QLh4S?=wpLi623yeK|6ZBB+B5a;QKPfpJ`#@yZcF`F(%baY913)U zvVzBY*75exURZ^alWxESrTA5URT{GH33!73!r}|7%6%9 z)Nslt-HsiziA1IAqpw z&qRINS~jOX`VDHf{P>)|p2tuCoN$RD`r~nxkAW8JU6P8e zQwomffVQA90Skz|tH?!3-E-`D;WtTEp~lvsb0M~@u0klTe^aWR|2z=|lq_jHJ(~Oo z%|X0CyvY$NR%@I=AnU5u^V)Og4H;mc_a3n4)}l~qYntLEr(JI8FJ~qL2z@lr0WYNQ zv=*Kr)Pha4?<+z@5Xk#$>=~`7#UbT@O15E@Ij_EP=|T7$woGv;NCdDv%^OrlT70fh z8=2zL5aM}uK8S~YR>nI4N$4~}&PAcDEO^#bRu!vG_SSPJwYFDl5Qc({e;ixdk zp@jI6ZEp^RnDE`$3~nA}C3|mSSt8~vGtT`)X^J38a@FQYq{)9cSTgVqm$q&x1Xd&{ ztk^1x-%YN7ignw#BqQO0g~5b!#P?NVLN0By2`wLaLLhqmK4I>^DU0?s1&L|0i;X3t zZ5yM3>_6id(Sg2E!JD6;3P zjL%aLKGKLBOc^Rq7{{4JrpCZx?mnRoO zA2sifKmPc9He$QR5*kdT!37MVq*$}DN5S6O7CO?$!K4?qvxbQ`pdg&zk3Hn6-X}H7_{`l|r)cWt7KdAD1?ljLg5+_Wv8z&qon*W}pZP{55Ftw3|4G#wDtti3CK@1EOcNRUx9 zEZEjB7Zi%6jS&_QidcxJLJiq>6cbq$lp^ds7^yz5ES3&z?+{i(g$jx$RHqtIypxb{ zhhgJ|rQ{DB7==wBjV=m*d!HublBi&E=q4O`ZP_SixdDo|-!~_&IIbS?^`)>)hFUlL zJ*Ys$>{T!0KT<{O*=j!+FYx0%H*c-aXx7tr6~93~B`X;Uje$ihvCnwWDzn4fI%d#- z0Sm>s(EC#%R%@9oHRdew)}(z+wt5%#PsL5Goj$pgU1!!@c*rW3Q&6o-???e=cqOv| zC;H4*+>!-ou72Nt5r|Q;3Le{o#@Xk)G#jHNu`q)eeDe^i*YHGrfxH=I#*%GptzTi2 ztZLofgrRxx&O_^iw}w%Z@u{hh@U%UZi(tg+0YIN927|a$(b`;vW&3a8*T%b-rL!q4 z1R5?kp`%^0&>2X!gjRcBdll&#;<$8V&r+wrGXP#$<^gBm1vgwTMv>6J6L@92tSx+4bkECVfHB< z7908mC=cXOimjABtKNla?*Frb&>d@3EWeOYur3KTVJ&&nnsBX=WT6jWX>P*JT5Hv| zm6g3aK|-|v)go?9U=_#h|I2H*;DqPo6t>DwSVP!HJa`H9Qheh7jfdq=h+C^d4%?t+ z@yvRaf)$F3D^JJs0)^G@(CM;_Snv|Ix;pi}EX@sZKss>c8+(RL%D6uolb9#VHfv24 ztIMaui1NF4$wNVO^j*j`@Vn;IrJy2GtQDfIwJ0H%71}}WoMki=I_QiEo!}Wtsfzmo zTr|HFCz3CQgD^>+bNiOUZ=S7la|>zHI~SL3FBuxJ{=8JOzsYj_bA?FsqQ)jF*P^%& zldI}&)C%fn)EX?YUw_)O-rZ$f=tnJqMm{QlGtQEi5KUbUgr{r`OPZw`zl##|dryrota1!AFYpfuZjK=aDI%z4Q6n(*G zB+S=&;&H0Rh28^IKd8Ig!JVGADdOU3Z766DI@rFPpk$3p{562wnB2CMPs&}tON^ST zT*VN(S-<(sZ~nj6UVH6qSPB6RF9N0B+p`kJ4Sg&=Jxjp2SRIl}NTf6&V~7E#;~HM9mXstI*nvPpUd@Q55RiW^a4rq`hcysiW zRlh-DVe;(R@-z-U_@0XwVU&E0@YS-tYO2%kwly5#S9;!ilHn9Mh$PRH!hoJ?KAn%H zo^V(@7kxkZx3&&AnqVxd$)9~yDJe_?x1NG;jGf8ml`>Xrgf)_9?K1BFRhM?L2zQxh z>(I}!)2df!jX(P6qbr`g`QQfz?rI&=}Vwju{SH^rUMYhc^LoV+(4 zWoIS*p{rTSpI!i01w(h{?7i~^2*Lhtnq{ftc%qp=HBL~=vm_b_{Tr4Fv8|7@dWFv z2?E*%){AO5NQ(sC0j1<@w%)ShYpe=r1SkQX1BI+VrE0(4owd_makZCj!T&?RXtqMY zSo&B5aqz(6y8!SPwLTTaWNCFkwQB6$*d>b<=Ot>4q9MqgJ9m!UDC2J&!X7La{cAxv zU0S`z<=zg*vTE7f#PkPBM!6K9?Vs9@TD&vH2vc!f{~1eJ<;grONv5ob)^h zn&ySA60HjSIeA!|yi3Xj0q3p9z|OO|w5~2;F?;8)b0j>}KJ@*@-~2UgcR^EvF8IdN zTv)`;r{uN>K>N}jwpI+L_Lm}*D@)ep;aZ1uALzNh$bCmqR)u5Y_KdfllkP&zT_`xO zW9v4^QZn8g=?9H(NNg6xIGWw+nb-wYZ^$ zQ&1g4FTl8 zHCG846~UTGKw`A^UC^v!9)l2!%SDlvjQw`Xk~~uWo$x5;>cDTOGS)jDbP2xJR)XC{ zi)w>%>!Qdj)K8Tn>3O-Z{kQpmC!*1o6M$Nhc$Z*ot}M6KF{PXW?0s4rc1VPk;F$GB z&WaZHvd3BwCf8jC!Z2FKrC3;h4)(&~c)MB-rW6_*4km|s6P3wb>($sP4CH#P3#%1x zio8?LO_@_flFHi<2&kfGq%e7-h_!l;uq8ac9EeaJuPiy~oJgqm^VW)W?3^PdByX)5 zgAjCAT>%B6=X$T`%lFoSulcgU$8gLUd?5TqtZ?q$c0P-89>TpaYzBk`<>BF|s0YV4)4+ z53~Sid4*W~)jelJIthYU8hV7j55=K6Ft4UDX~vEMIH4%K(*-9^4j!1WcX+e@gu3z& zP$j#u+vL_mA(Pvd_o2v1ToYj&$QqpXB0{VqN@#^`ja8yZHK>bMd=(-_=t*G_QaQ>3 z%1Mt`2oZ%?yp`6o_;0^ctfbgQPX#QH9RQ88(E(>Mao0gTwba8vDxt3VhfY$B3onoa z8`M+s+@53==Vgd-x9^gXE(^tlkQ2Rs+t*i=YkUvb9Za)Gch6F0~__ zr{0rgD{Ry65&mJLm5kserIC&}J z_q+y11PXO+B89$qORahD0D%@3>i2pL3-c^dn*2~}sDf1ZqWPty(>Z-NPf~LdVd(UU zc7j5AP%VHdtxJ}8pT zU>GJYL|&E&;?xIJy3my@Z`hsxecfIBlALV`V`i%!B$!IVw79j_N%$!bu@0 zdc*nS0I;SSpS4M8CJ);WxdW9fmIM{^g|`>tY7Jno(Lac%gK9Pgu~g_3p@1&5ZRaV( z(s{}o?oyMGRJ(zjy!;j8q|f!t&OpC!E+qj|)N7r#ZjIw-Kl|CilcN*~o`_vE_DTpc zNgalms`8J)61?@69`s{O+?| z>gqRIOAu6@##(d4X)Yf{L_I47TLMRYtPZT7%VP!R9%MyStb%)4u)o+gHo7TvG>KY(G!4 zz1LzAO}UGZG1eNXzD0A+ngrbFGH*Rya@qnaCXyq=U854W-y;sgEuYMkuS+(erXWt% zf=>=8$DWVit@kz-7gUNK$sS!LRH}XhdM_DdxJrzBE~Zz;5aSjXJuVytfoPhcz4}gT znUd9qp*R1cSXR ztG(|8QO;Y?{tJIgM4xg+%;42{kZ!>u*xyXhnp(U>D!$8hicR}mhj$jzg` zyMuJ9=53Dh96ei|iaHb6eBKc`-+tNs&b~M9_8{Z1bxEEWr2cA+$-sghT*Aoa)>-OV zjk&!RQg(4}8%CEj8B4aDI}PleKM|Q1ART1vC9f#Pgu9nEVHC1pf)-8|xu+T_n8DHxBdq|_`zAYXV0Ep6Q)7~`bSDa5vH|d-F}jmU}kM*1zwFa z<-sD=7#$(o#>;K8m>G@@SZDD`3KCLbnJWn!DpT=w|BpeBWlag-{}!SVf+8dsKU-(q z-;!ax70G2yXruFJ~5|XV2)>Q>? zIC>O5Da7isY%SU!7aS^I@YtT&83b)+kdPBV2?#RuER2jUFG^Ms9FMep5=!pk>F<*H zEz2wmTyv1-0}9%F<#<3-S^E<1J+t#E@d*ap81!2}{wSOY&9oi1gemhbv+4`efxB*R zT>q8-kS`Mg?kouLbU`Pt!ftYBYEoJsmuzQ)@y#2Tyyu;PEi1x1Yl`!JnY;dvt$qMWMCNNm=TC@(M#p@6B!FG>lh4gP#i4Zni?-s^}x-cMG+?tYF z$j&f3Vv&;_7t?N&Q6;mg#S9hNfVcG-)ouMAoHIdggT%loRF)C625Jf{n<$FA(OU!V zn&#}>IAIIM4FK6$;^sP-o=(13r;1p9R6 zVy`;fZ{uOg$U&5($qMS-l(V=n>q;m@l2;rYuD#zYYbQjN!l(2dSnwz=B`mv}Rtq-S zc_<=E-gx>956A@>3^Y25l5fx#2+?>{E)w|^?`DN9H;iPnCJ}@VW z9E1{33y=Uh$dFTwHT*ept_{Ux9d$TTL@dVECIv02-gxy#=yUCddJsil+8#E)-X-v?_N=H3`qTH$s3d*lD(cKnjtTkZUXV#Vl0^Y z{v>yj%@9VsAeRASfdO?YZE-`5{a^FYpmNZIY@oJfj5a_X*kHy*>b&En5bO) z{}u*?G71H^JPbdIh7?HSDj5f|)dkY6T%524VsUamEu?S^QmMuRA=CRC=wPExEJg-6b5oO$(4SlSE|H!8w?uT`%@^w z9gSVjSFQH6z3bg98p1ASufVG37^4)}AKJfAA$=~-tM9g^6gpzPo*^ut zf{|y^yP#KEUrNCq^llcgE=)pKE>Fp9eT>CJ`#puO(ok(k2TiDug)F&`Ye{8s7g}=O z99<|ppWfSZll?-MouSw(6;a`3N>1K*) ze)F62931zH3dG+f?+6I@E@S*x9P+OiJqwjz;D!l5076aWU zcP8O(!ypqBRQ2yB)B$Ti>*6O+3DTlLdPajRQQBhl7o1M~x=q(KzzxMkmWA$J#T$`^ zp={+b5J&`7%fu)?uc|b+Tl15~+Zc+|icPn1+8Vlv@wRt?rR2LD#Ywm8)xHZK394sZ zrQpbwKZ6NEKRCF!`ywH)#z@Epg z@8W~IZr*u1EF+2A1YF_>KRirx>*=z?iV8x9!dWOIg$mBvXS=8st+Aj}rYW)J)|h&( z;u(iury$|1=8#3-|F^ajI69A>RmpsY3T_q&Ma_YdSvYX?1S-_G3cJ6(4@>JB8hw|M zB55paDGx%C$)jmp-ncsW?N!RLb?O3D9j|H`RI)XJ&_dPFGdl}7e}Ejoco7!%EM6qJ zVzHWo=Hk5@OX?@XJpYT*hUZPhW>LE(}P85pPy!Qs(i z&(h7>LrKu(#?mr>`1jU9Jlk5j@Em-x?vy>Z5EH1rmg19?IQLbZ0$vauw^$!NC#8ym zhL<9tsR1@i1$LR+&&8B?XbfErg-<#N;CIkM{mg+;1?@meV&gH%s#8s=Mj)l0Qo*7M zIng}ujTdT6S#+4TYnB6-yov8BNl(stPkY~cpf@1U^vvyN)n9!0;fLpWAaH1!i{thT z)Z*J>lC0|nC$zvy=TWLmMnx`Z+%py0h!69ic+I`9a|VT!tg6Np6W0{TndxV(skWZ| zJEIDLprRvtuE@;32;o8DG+vhw<=$tzI9pF~|E2cU1x&~%g^6(%nH_kf@Sn9)kuHxW z{DFbec^8^Ab{9qORUKVUj)&6PDDu;=M@YK$=-ejfKmYm9&-%Uk>Z|8{;N0?Ky;E(I zKVs|}*9gJjfpVetp7cpSS81z|QeSG|kxhm-P9P7R{cdhI=h8xOkKA4fOv)?;)1s@& zL{Z9h(uktLBq$9u#i@KA`H$FOn~kT(jjV5NlTBa>;S{s&J6Z7X+G2KFaSN40xorb( z@nBv=pKsB*aBU)}mWu;cT{S66WrCHEHYQ|9Ftxo$oUgg1%vuK|Z>%J4BI;*VnPT@i zOJwo-JvSkdv|euq7dh-M*IWY7?_bO`Xa|-qt6`-;_%jB&0^m%d%E#v}DDfW&OZ=Z#HX&rjL;xkEM z&BR+*d@k)pFD-kl60s`=ko0Cp(;=V3W3Q9On@|(9Vzu;no@mE->sYx>3rIAK>^x6<;2a3!w7%qC z|J~lr;^yh_+J#kA&31w0)i5O62hVen30ncJBy-6cLPG{r>$NRWdv?aS#!6UkdsfOk zotcc_F^R5>GNgFq4E$J;K^*XLPNV#%6dh((JxIuz;}8l!|V{JRQX zmzXFOH33B!DM01m#9tRayfgHg*OIpMeZTbgDbub z-4$mwe~fy)OJyB|jSv&XBx{a(7OKS|lvF~8+;^08mmmtGthy0G2euo(xa_<}A)u+C zYA#KP0tg-MIh?(6`kq-1MO?G*B|ySlea}1kPM=8umM2kH(9g1zTSt6BIBHy&ytlsF zns!jKESnqZk1A;Uch-9fy#t>-33GKI713?(pmFqE@K}~4>TR+4_OFB1b0zKc+ih%( zxw+^g+Zd6(;bn0-gU3PKpc%jc1kSk$#1wzZzOd0Re({TIU)3&|!cH~+P#h^7392f0 zBoU}*gaV~xq4j9}>~WuK%~TmK6DbIqHbv-O-qr9{}t8F7be_#OJxO!*v+MENV5Ejcm zy9I;TQyY61XYWJhOvgePZOc+fI~48Uz##NOb#g}A%ewDojA$#{cn?$QqeqV}J)~P^ z3n*40WnFaubjR_6Cffq0gzz|s-%9HC9Nl-cF%v_iO!{8mPr)ZtENO9W@z)JcxP&Mh zo{1ZsvRB}QnyJ?I#M(|;~WHv4G-B0Da#I?}tgIiG9+PAT({s=xyy+n9~OEau63J*#O zgZI@lz02M=m!74$PnMO-3{`M{m;6i~rFS}4ON6E&ifUe%>R)5BW4_uXnU(KqtvXdNDbcG==DEOzoBYB?e!H0No|ugxwQ3Lnuih zl^jX`-{)LN%|H1ScIq9c(*N<}$CnoKl~-Q53f{uF#JSwex*36PBG5vXru&hWYuXOF z?YSxn8W4XeCwAjfIzHRD5>#}r#3>>QLErc?Ypi^r9PHX%4dgi;`(9CC%D& zeDS(pagkdOt<<{YT4dn>`3hDOCO%XX37EpQgiOfGoCs(?@42%2im)gqmW~jSa1Z6; zJK%-fe8o1_raf%V9dsxTuDKXBMb;sL3}`+b23DUwtBtMo7AubYt9U7j3~dS})H>{; zpc-5MUj=D$)?d}AJQFn-%G!HZIV2W#_Wd*+Ny!10&~nYm$l1Ws0LUMai7PM*@~icUiN5ja7bP6RScz zF#npeBp+xdD8nw8H{X2okg_HFt$%ZATq;i`PF*Oip+2hZOY5HziJn0GU1+j>?7v!{ zwk~;Y!C(7Kc^8HZPI@p!R_!*Qhj2k;*7$_lIxqdq#q7+efX(n|y!|XMwt0jmOyQ$W zS!9tSGr1}Shdo~-^2VXnqog#iviT^?Yb*=2z?!K#zp^^|qtv>+_ju0Av;tu@LSrpeZ$eIj3h@KE`z zwYl^jGVIqnRJu`Sa%->gr3tg}SlwG84;dWmaFJUqT1vp?dr%1buKsn1<-Y23$xs9* z=1E*q3&U)k)el|+ZZtp#ZcB-#GM6cqw0pjNY^V@C*eqKMSZcXY`>ysjZYrR)-YLNl zf(7yWZ60vlEVL49z_NjI-SvO-T02stAm-#gNyby@P3(lidAbPWv&b^7(xCA@6EdRK z+$m~k3j8?j1@Klo6|~p_*8J#oTzNi4GfXI#fTRlSdW$Mp5+Ocn=o}Cwsr^n{G|U}T z;As5(CZ8J#?|Gjkpj(u*ri6mng2WwG68@bug%*NRXErNKse>--MS!mjrjI?NUs?!M z!)EnD|8P^Wtl+vWD2o9h-O@mqqva<8jpXMhG~mV?;|}2Zm^QA2pBRSuSp0w2b~rc~ zC5tFdjp~3~OqOGdnvy{?a|k+kak4ianb^jt%_!-LHkj~Qx(|Y(b~mSKdV=|cd*8`` zmMa1Vx~z~aOprL%CbXJ%Db_(-=QucJ*UofFFSLyQav1eLSkyFfqGp14zMx_C(Y%U-||Pyw|DZD(i2B{8YGE%!rOeQ+7F53^=g`ia#GtF( zOay7)fqJ#s`25vR6-W~xO{?fo0mF3I6sVIVhUXsoW`jFmqI{>)tW^bLCe|j%kENr9 zXO?A|FfE(5javH!ZM|EjD5QzN94#8UNjkpb@QootFObFVCqz}W5^zSJEyET^6Pn}3 zv4glZ+nUQQp#+~e62GsU6WDM;RLTN=6?p_$O(lLw4y4uckDCWBCQxDh*!9vlfcY`! z#jcq2y&Fo3pB`GKYtkeowxtY2n+#j8R&!(4^>1%)$G!0lWvMpC1Xw~w{sfI#Y@%yG zkX-}uLg}I$*w^S$8oz!LI?d4*l@||T1@PHpr>w1D#=YAC+I(g?f`&^_l(5HTiO{hz z=8}~Bs4h3SbYrZVm4Iw>yx@kVId*s>lVnvx2EM<)|M&R#c%|{6Y&Hi8ZBWi+iGzZ? zY~3dCSwKN^#XuX^+SNNdJBi+)lRPA@MnXW5Sy0DP#ZH1q<^ zf3d6l#0ImMZ#g{?Y7jsr1^L=k$x0y6Kv9VD6-t5M3N~vNf&*f-gLttBrIRaVR#lkX zDD_Lh4FO8#Kf)smq{SoX2ev6;h0iukNzj|H7GFT8N&^IsOZd{DTBuDF!RT7!Cb0^X zQ9c1Pw4cUNf{Kj{^KPNiP})5G-G)jiKxv?3z(|P(qOocWyLL<2{abecn!sj&faxAk zv%ZsMtFju18c3!LQ^h=7zjau9c7n0C*%bWJc+T;(qZcNO9gO_-TofCS#wW#>3{uG@ z1=o%xcByj(>sue-j!H&aXDnYXDCzdxL&iY-fQw4PnZx9O++F&V&}@S@Cfqh5P#V_+ zN081f*aOj{?r?jC7Tf*m9OFfTnvpOkr-E#tZOceEt{cy3T-$T&>Vk+VM%Mbm0i=+Q z;5NmOH$jXFAc1x70G1b^HY_4E+*!(`vPcDhS+8n8NKULRl*#rXIZ!(x?y!~iY$Yq} zR|;nD>cA?OqA@RK(OhRy)TZW9wLmcAu0HmHccN{6(ot^B7c3q{M2N=Q5B^_7xK=sM)w$H@G(wGzE zwUNuIXLjh;c5JqgNwu{($Q@UEBuY^Z)RTZt>it+o$pcDG97CcuC*NtQ|t`(&U zm-I=}l{9?}l?dYG3W#^K@HbQ!2r1dY4HM@4jITX2Op@fGMW?ytgQH- zHaH0`%i^&~jEDqFqY+UWf#;og8*eHG8&w4UWEgoNjJz&b=sM4@1mVfTFg+&fmnP!C!9!($Wt4&Hu67%g|;6GRu)jNg(Ro zaJrH*Xmo+vGN z*~7u>AFYe;AF-P{pLlx+<;?5WWgDY+@%6SoXuY(58<9)Kn!ta;nh|S}7eNqhL2wz` zXbQM38<&KtdnL-LC){U*Rqv$yNNSY((U@{oiR)~#7kFdVW9Y2*dlo+{5pstzvSmmK zO+iPQsR=U4PR%=Z)eaRfZk7fbJj1mY&15dz9^5Z&9 zIa2-*>dsoLU-ccW2wB&^9UiTn+}Dlq0q(fHy*)Qc4Is`3iwg~JKBqPx4ONyJe^^2` zVGFU+q(E}CDHNlS&`{$Pb^s;91>S-HIg|kjb|oMPHfqx9FzRH2R6tR14$`5&`3I$@ zD~qUrh+-TdfDLNbfeKmxo8+|xItUvF7WBpz1yMpzFqozyeZRJ@(2&VjAV_8JpUrsQ`lLceW`Lm8FBj%0vj(9K&F-T&gNf| zlX*i|jDLx*)WRmfz#jR|CG*h2mzEYx6BZr^zYJ-44vh&DnUKW4gOA4HPC;Oi(u@^# zQH%r=X!lWyAg=l`w+X&n3C(+gMxr5&y6bW&DD}sJX^=B&(d(wV&mP zG#KPnZzP;T*4f7r4ehtA?K~c}^&mi$Hcf+VGts`_QVnR0fkNPS z6Vy}A4_$(6JMbvxMVpV-+dV6MEkarc46jpDF$P(uim|jn8(5iVPBwwJrE_R;FRW40 zM3W%<52@E?y|#!FMjdK2J~spjk%2i zpN*%+dZNv@W)fC3F76QIS@7V{7l`<{%p^!bbfIKea<;9uwwaJ=YG?rvy|FYLo&wLv zsZa=P=|?WC{x7xypuqirz>5{ejnIBj!K?3ne}9iQ6qBe8u=bEwIHDw%$!g_##e>QCz%;zK_ay1kqvQK=1^;3%F1C09hRTi3BMm2Uwuwi!_6@vf5M@Ym2B9_5!*5(s*iQ z6bc}&A6t4m9-+P$aN{cAiorG0|1G%wMs47b?LKBV&KdPuw|+59w&ah-a|_5fo@pZ; z9IU0*N02ktm!Rt&^5C?v?+yXD_Wn;;>5uslBm@KPv({G-#O4&cX9r__!%@$QVtGW!7(POPP_d1Uba= zglKCYCd8n`vRvS|+k`Y$Fs+UT>$mR}ov|<5Pq5;>e<{)H zQ*$KQtM`|9C3x>3pgD7Su$Gfa?WvxZ!qYs+3Uod4>>r!A;oB+<>esm~s zdjk)kHjqcrc%fuL;XtWsuEEXGuCP*yUqqEr-?_)^;|}}QZ+oqNBUlsXlmjBuRt9kU zyUzk0(MR@lTyhL&BS(Xs;8njtU~Bt@dE(3b0Im>K3r#2R8W@4M7MbkS74T zaRo^nf;~)_7R_peAe`FCa%lisEb6XWz)iC9YP9s);#385f?SX>OC#m)cK{L+`rdOo zNLd)FF(Hg-rn@^jZ`PmrAAmpNB2`nyK z1tRpoEk1!E2OZz1#5)=i4YN(Ds7D$h-!EDRnmJbp)3+aSpoCUf^41Q`ryn#FIA>&O zvLKZZl#B=FD3INI#co&zJ&&ae5ysEXcgk9*&8RJ)SXh7Nf&fv&Kqj~QxthRkooDE`ipvdqF7s&FU5S25VfuIUs=pxS#T6Ht_6_?RwVL9)7Zs`OxLc#D`N`o2Q?j zpM$0#OR@D|oJ4|AZE1Y5K(P;8=mLdPuoY%~?^ zzvNcmH9obqu~YjX*QJVPty}ZfoX9Ogi2;?vok(E=$6e3?S5j?kY*-()KV^xvQoqYD zNgknip&T{m=C-}8AP~H0FcGC{MW_|)5IA+v)E0FF6kCCW5}53{G(0{*r#&|hErc%= zg+d!sB_k%j@y6}ZVv*pHA|T}+uQshqpq0?t!qx;nK}*}F0#0gT2kvx{#pN`|4YY1uW=bP#Qk!@_zDfv$$|B zb-34t_He(HM>Hvo^Xu#DH3p&>in5gn`>so%;`dR&iM-*GV%3WuK+F{6W)Yxl>Hgv& z{U59qSOFD_{1uQ;82{u}&#S$SaqZ}{YJ~K!Qli}9^{IQI^jO6`BYD-D2YNUT!f^O? zT1vIkx|?e-QY4GOpe~!GN-SG%lW9r_s1GWDwtl`Qk`Iy(mJdx(f<<6sI?>zMEu^fo7mOQ18onp-~7lTa0LE*QFuyzr6P9tXeb#TA$~q?Rlyc zDF7k^kw2ag6I4~qo9jxyASk%Dpl;*|h=DMP9h~)p3rf6%Uq9`OrPf?KP-QYZl)8_v zdW8n)8Xl$9EMd-R3Z~~T6vP6Acv>ft*IteH^b zxO)V6jY*rL1t&n%HT?5@*bCPs`~|lN9Am+sjMa0gJj9XY5Xe4Nda|)8)`6CQWu&}h z&j>Nm^CjA>AG-F-14+0oHk*RL>conO>bUpeJyD1QG6OhefLx3t+ql~A$FPq&#C;74O8}sI;HB!I7zrPQm2Uvkh+kv9!HsHBVsJ|)OO!X@oy&?t*Jlo7RmSE;m@e-nS zO3(s#O$!H~M*(BTVW5|m05>U#^c_7$uVH0%IujI|SjhzkMoKwFe;q=n;l5lk`{ zG;i(&Gzb_4Au(uINUoq`9H6+tu}X52)mOs8Ap%XnRi#Q$+F$FUM4-k;0IvB@sH1$X zE$aND-;mMS_uUu1SfZPRuQs8wjKBp@AzVXB?e%?gV)Gd*WfJ>84)n}pmB3UH>Rz1V zT%x$rQG1}0*}(~N3sgbaLIid%*Kc_@9U}eR{6HM# zeodB0ni4p5ptg6qN1fxws<;K@SL>rWRSl07&PAKDqL1~7t19cFL#K9U)c~$^FM8wJ zE0f$Fshxce!PlDAW-*z*$8S&3Ll7uWho#-UlnKZx5L-yczXA*ZA(-fTs11^900000 LNkvXXu0mjfG;5xD literal 0 HcmV?d00001 diff --git a/webgl/textures/crosswalk-LOGO-lrg.png b/webgl/textures/crosswalk-LOGO-lrg.png new file mode 100755 index 0000000000000000000000000000000000000000..6edcb45faa1611afd8e622f53616166022039b5e GIT binary patch literal 6497 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 XkTz3RDn5Vx3GFA2Iodq6_PO$JA5ED! literal 0 HcmV?d00001 diff --git a/webgl/threejs/three.min.js b/webgl/threejs/three.min.js new file mode 100644 index 0000000..14bae38 --- /dev/null +++ b/webgl/threejs/three.min.js @@ -0,0 +1,736 @@ +/* +The MIT License + +Copyright (c) 2010-2013 three.js authors + +Permission is hereby granted, free of charge, to any person obtaining a +copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be included +in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +*/ + +// three.js - http://github.com/mrdoob/three.js +'use strict';var THREE=THREE||{REVISION:"58"};self.console=self.console||{info:function(){},log:function(){},debug:function(){},warn:function(){},error:function(){}};self.Int32Array=self.Int32Array||Array;self.Float32Array=self.Float32Array||Array;String.prototype.trim=String.prototype.trim||function(){return this.replace(/^\s+|\s+$/g,"")}; +THREE.extend=function(a,b){if(Object.keys)for(var c=Object.keys(b),d=0,e=c.length;d>16&255)/255;this.g=(a>>8&255)/255;this.b=(a&255)/255;return this},setRGB:function(a,b,c){this.r=a;this.g=b;this.b=c;return this},setHSL:function(a,b,c){if(0===b)this.r=this.g=this.b=c;else{var d=function(a,b,c){0>c&&(c+=1);1c?b:c<2/3?a+6*(b-a)*(2/3-c):a},b=0.5>=c?c*(1+b):c+b-c*b,c=2*c-b;this.r=d(c,b,a+1/3);this.g=d(c,b,a);this.b=d(c,b,a-1/3)}return this},setStyle:function(a){if(/^rgb\((\d+),(\d+),(\d+)\)$/i.test(a))return a=/^rgb\((\d+),(\d+),(\d+)\)$/i.exec(a),this.r=Math.min(255,parseInt(a[1],10))/255,this.g=Math.min(255,parseInt(a[2],10))/255,this.b=Math.min(255,parseInt(a[3],10))/255,this;if(/^rgb\((\d+)\%,(\d+)\%,(\d+)\%\)$/i.test(a))return a=/^rgb\((\d+)\%,(\d+)\%,(\d+)\%\)$/i.exec(a),this.r=Math.min(100, +parseInt(a[1],10))/100,this.g=Math.min(100,parseInt(a[2],10))/100,this.b=Math.min(100,parseInt(a[3],10))/100,this;if(/^\#([0-9a-f]{6})$/i.test(a))return a=/^\#([0-9a-f]{6})$/i.exec(a),this.setHex(parseInt(a[1],16)),this;if(/^\#([0-9a-f])([0-9a-f])([0-9a-f])$/i.test(a))return a=/^\#([0-9a-f])([0-9a-f])([0-9a-f])$/i.exec(a),this.setHex(parseInt(a[1]+a[1]+a[2]+a[2]+a[3]+a[3],16)),this;if(/^(\w+)$/i.test(a))return this.setHex(THREE.ColorKeywords[a]),this},copy:function(a){this.r=a.r;this.g=a.g;this.b= +a.b;return this},copyGammaToLinear:function(a){this.r=a.r*a.r;this.g=a.g*a.g;this.b=a.b*a.b;return this},copyLinearToGamma:function(a){this.r=Math.sqrt(a.r);this.g=Math.sqrt(a.g);this.b=Math.sqrt(a.b);return this},convertGammaToLinear:function(){var a=this.r,b=this.g,c=this.b;this.r=a*a;this.g=b*b;this.b=c*c;return this},convertLinearToGamma:function(){this.r=Math.sqrt(this.r);this.g=Math.sqrt(this.g);this.b=Math.sqrt(this.b);return this},getHex:function(){return 255*this.r<<16^255*this.g<<8^255* +this.b<<0},getHexString:function(){return("000000"+this.getHex().toString(16)).slice(-6)},getHSL:function(){var a={h:0,s:0,l:0};return function(){var b=this.r,c=this.g,d=this.b,e=Math.max(b,c,d),f=Math.min(b,c,d),g,h=(f+e)/2;if(f===e)f=g=0;else{var i=e-f,f=0.5>=h?i/(e+f):i/(2-e-f);switch(e){case b:g=(c-d)/i+(cf&&c>b?(c=2*Math.sqrt(1+c-f-b),this.w=(i-g)/c,this.x=0.25*c,this.y=(a+e)/c,this.z=(d+h)/c):f>b?(c=2*Math.sqrt(1+f-c-b),this.w=(d-h)/c,this.x=(a+e)/c,this.y=0.25*c,this.z=(g+i)/c):(c=2*Math.sqrt(1+b-c-f),this.w=(e-a)/c,this.x=(d+h)/c,this.y=(g+i)/c,this.z=0.25*c);return this},inverse:function(){this.conjugate().normalize(); +return this},conjugate:function(){this.x*=-1;this.y*=-1;this.z*=-1;return this},lengthSq:function(){return this.x*this.x+this.y*this.y+this.z*this.z+this.w*this.w},length:function(){return Math.sqrt(this.x*this.x+this.y*this.y+this.z*this.z+this.w*this.w)},normalize:function(){var a=this.length();0===a?(this.z=this.y=this.x=0,this.w=1):(a=1/a,this.x*=a,this.y*=a,this.z*=a,this.w*=a);return this},multiply:function(a,b){return void 0!==b?(console.warn("DEPRECATED: Quaternion's .multiply() now only accepts one argument. Use .multiplyQuaternions( a, b ) instead."), +this.multiplyQuaternions(a,b)):this.multiplyQuaternions(this,a)},multiplyQuaternions:function(a,b){var c=a.x,d=a.y,e=a.z,f=a.w,g=b.x,h=b.y,i=b.z,j=b.w;this.x=c*j+f*g+d*i-e*h;this.y=d*j+f*h+e*g-c*i;this.z=e*j+f*i+c*h-d*g;this.w=f*j-c*g-d*h-e*i;return this},multiplyVector3:function(a){console.warn("DEPRECATED: Quaternion's .multiplyVector3() has been removed. Use is now vector.applyQuaternion( quaternion ) instead.");return a.applyQuaternion(this)},slerp:function(a,b){var c=this.x,d=this.y,e=this.z, +f=this.w,g=f*a.w+c*a.x+d*a.y+e*a.z;0>g?(this.w=-a.w,this.x=-a.x,this.y=-a.y,this.z=-a.z,g=-g):this.copy(a);if(1<=g)return this.w=f,this.x=c,this.y=d,this.z=e,this;var h=Math.acos(g),i=Math.sqrt(1-g*g);if(0.001>Math.abs(i))return this.w=0.5*(f+this.w),this.x=0.5*(c+this.x),this.y=0.5*(d+this.y),this.z=0.5*(e+this.z),this;g=Math.sin((1-b)*h)/i;h=Math.sin(b*h)/i;this.w=f*g+this.w*h;this.x=c*g+this.x*h;this.y=d*g+this.y*h;this.z=e*g+this.z*h;return this},equals:function(a){return a.x===this.x&&a.y=== +this.y&&a.z===this.z&&a.w===this.w},fromArray:function(a){this.x=a[0];this.y=a[1];this.z=a[2];this.w=a[3];return this},toArray:function(){return[this.x,this.y,this.z,this.w]},clone:function(){return new THREE.Quaternion(this.x,this.y,this.z,this.w)}};THREE.Quaternion.slerp=function(a,b,c,d){return c.copy(a).slerp(b,d)};THREE.Vector2=function(a,b){this.x=a||0;this.y=b||0}; +THREE.Vector2.prototype={constructor:THREE.Vector2,set:function(a,b){this.x=a;this.y=b;return this},setX:function(a){this.x=a;return this},setY:function(a){this.y=a;return this},setComponent:function(a,b){switch(a){case 0:this.x=b;break;case 1:this.y=b;break;default:throw Error("index is out of range: "+a);}},getComponent:function(a){switch(a){case 0:return this.x;case 1:return this.y;default:throw Error("index is out of range: "+a);}},copy:function(a){this.x=a.x;this.y=a.y;return this},add:function(a, +b){if(void 0!==b)return console.warn("DEPRECATED: Vector2's .add() now only accepts one argument. Use .addVectors( a, b ) instead."),this.addVectors(a,b);this.x+=a.x;this.y+=a.y;return this},addVectors:function(a,b){this.x=a.x+b.x;this.y=a.y+b.y;return this},addScalar:function(a){this.x+=a;this.y+=a;return this},sub:function(a,b){if(void 0!==b)return console.warn("DEPRECATED: Vector2's .sub() now only accepts one argument. Use .subVectors( a, b ) instead."),this.subVectors(a,b);this.x-=a.x;this.y-= +a.y;return this},subVectors:function(a,b){this.x=a.x-b.x;this.y=a.y-b.y;return this},multiplyScalar:function(a){this.x*=a;this.y*=a;return this},divideScalar:function(a){0!==a?(this.x/=a,this.y/=a):this.set(0,0);return this},min:function(a){this.x>a.x&&(this.x=a.x);this.y>a.y&&(this.y=a.y);return this},max:function(a){this.xb.x&&(this.x=b.x);this.yb.y&&(this.y=b.y);return this}, +negate:function(){return this.multiplyScalar(-1)},dot:function(a){return this.x*a.x+this.y*a.y},lengthSq:function(){return this.x*this.x+this.y*this.y},length:function(){return Math.sqrt(this.x*this.x+this.y*this.y)},normalize:function(){return this.divideScalar(this.length())},distanceTo:function(a){return Math.sqrt(this.distanceToSquared(a))},distanceToSquared:function(a){var b=this.x-a.x,a=this.y-a.y;return b*b+a*a},setLength:function(a){var b=this.length();0!==b&&a!==b&&this.multiplyScalar(a/ +b);return this},lerp:function(a,b){this.x+=(a.x-this.x)*b;this.y+=(a.y-this.y)*b;return this},equals:function(a){return a.x===this.x&&a.y===this.y},fromArray:function(a){this.x=a[0];this.y=a[1];return this},toArray:function(){return[this.x,this.y]},clone:function(){return new THREE.Vector2(this.x,this.y)}};THREE.Vector3=function(a,b,c){this.x=a||0;this.y=b||0;this.z=c||0}; +THREE.Vector3.prototype={constructor:THREE.Vector3,set:function(a,b,c){this.x=a;this.y=b;this.z=c;return this},setX:function(a){this.x=a;return this},setY:function(a){this.y=a;return this},setZ:function(a){this.z=a;return this},setComponent:function(a,b){switch(a){case 0:this.x=b;break;case 1:this.y=b;break;case 2:this.z=b;break;default:throw Error("index is out of range: "+a);}},getComponent:function(a){switch(a){case 0:return this.x;case 1:return this.y;case 2:return this.z;default:throw Error("index is out of range: "+ +a);}},copy:function(a){this.x=a.x;this.y=a.y;this.z=a.z;return this},add:function(a,b){if(void 0!==b)return console.warn("DEPRECATED: Vector3's .add() now only accepts one argument. Use .addVectors( a, b ) instead."),this.addVectors(a,b);this.x+=a.x;this.y+=a.y;this.z+=a.z;return this},addScalar:function(a){this.x+=a;this.y+=a;this.z+=a;return this},addVectors:function(a,b){this.x=a.x+b.x;this.y=a.y+b.y;this.z=a.z+b.z;return this},sub:function(a,b){if(void 0!==b)return console.warn("DEPRECATED: Vector3's .sub() now only accepts one argument. Use .subVectors( a, b ) instead."), +this.subVectors(a,b);this.x-=a.x;this.y-=a.y;this.z-=a.z;return this},subVectors:function(a,b){this.x=a.x-b.x;this.y=a.y-b.y;this.z=a.z-b.z;return this},multiply:function(a,b){if(void 0!==b)return console.warn("DEPRECATED: Vector3's .multiply() now only accepts one argument. Use .multiplyVectors( a, b ) instead."),this.multiplyVectors(a,b);this.x*=a.x;this.y*=a.y;this.z*=a.z;return this},multiplyScalar:function(a){this.x*=a;this.y*=a;this.z*=a;return this},multiplyVectors:function(a,b){this.x=a.x* +b.x;this.y=a.y*b.y;this.z=a.z*b.z;return this},applyMatrix3:function(a){var b=this.x,c=this.y,d=this.z,a=a.elements;this.x=a[0]*b+a[3]*c+a[6]*d;this.y=a[1]*b+a[4]*c+a[7]*d;this.z=a[2]*b+a[5]*c+a[8]*d;return this},applyMatrix4:function(a){var b=this.x,c=this.y,d=this.z,a=a.elements;this.x=a[0]*b+a[4]*c+a[8]*d+a[12];this.y=a[1]*b+a[5]*c+a[9]*d+a[13];this.z=a[2]*b+a[6]*c+a[10]*d+a[14];return this},applyProjection:function(a){var b=this.x,c=this.y,d=this.z,a=a.elements,e=1/(a[3]*b+a[7]*c+a[11]*d+a[15]); +this.x=(a[0]*b+a[4]*c+a[8]*d+a[12])*e;this.y=(a[1]*b+a[5]*c+a[9]*d+a[13])*e;this.z=(a[2]*b+a[6]*c+a[10]*d+a[14])*e;return this},applyQuaternion:function(a){var b=this.x,c=this.y,d=this.z,e=a.x,f=a.y,g=a.z,a=a.w,h=a*b+f*d-g*c,i=a*c+g*b-e*d,j=a*d+e*c-f*b,b=-e*b-f*c-g*d;this.x=h*a+b*-e+i*-g-j*-f;this.y=i*a+b*-f+j*-e-h*-g;this.z=j*a+b*-g+h*-f-i*-e;return this},transformDirection:function(a){var b=this.x,c=this.y,d=this.z,a=a.elements;this.x=a[0]*b+a[4]*c+a[8]*d;this.y=a[1]*b+a[5]*c+a[9]*d;this.z=a[2]* +b+a[6]*c+a[10]*d;this.normalize();return this},divide:function(a){this.x/=a.x;this.y/=a.y;this.z/=a.z;return this},divideScalar:function(a){0!==a?(this.x/=a,this.y/=a,this.z/=a):this.z=this.y=this.x=0;return this},min:function(a){this.x>a.x&&(this.x=a.x);this.y>a.y&&(this.y=a.y);this.z>a.z&&(this.z=a.z);return this},max:function(a){this.xb.x&&(this.x=b.x);this.yb.y&&(this.y=b.y);this.zb.z&&(this.z=b.z);return this},negate:function(){return this.multiplyScalar(-1)},dot:function(a){return this.x*a.x+this.y*a.y+this.z*a.z},lengthSq:function(){return this.x*this.x+this.y*this.y+this.z*this.z},length:function(){return Math.sqrt(this.x*this.x+this.y*this.y+this.z*this.z)},lengthManhattan:function(){return Math.abs(this.x)+Math.abs(this.y)+Math.abs(this.z)},normalize:function(){return this.divideScalar(this.length())},setLength:function(a){var b= +this.length();0!==b&&a!==b&&this.multiplyScalar(a/b);return this},lerp:function(a,b){this.x+=(a.x-this.x)*b;this.y+=(a.y-this.y)*b;this.z+=(a.z-this.z)*b;return this},cross:function(a,b){if(void 0!==b)return console.warn("DEPRECATED: Vector3's .cross() now only accepts one argument. Use .crossVectors( a, b ) instead."),this.crossVectors(a,b);var c=this.x,d=this.y,e=this.z;this.x=d*a.z-e*a.y;this.y=e*a.x-c*a.z;this.z=c*a.y-d*a.x;return this},crossVectors:function(a,b){this.x=a.y*b.z-a.z*b.y;this.y= +a.z*b.x-a.x*b.z;this.z=a.x*b.y-a.y*b.x;return this},angleTo:function(a){a=this.dot(a)/(this.length()*a.length());return Math.acos(THREE.Math.clamp(a,-1,1))},distanceTo:function(a){return Math.sqrt(this.distanceToSquared(a))},distanceToSquared:function(a){var b=this.x-a.x,c=this.y-a.y,a=this.z-a.z;return b*b+c*c+a*a},setEulerFromRotationMatrix:function(a,b){function c(a){return Math.min(Math.max(a,-1),1)}var d=a.elements,e=d[0],f=d[4],g=d[8],h=d[1],i=d[5],j=d[9],m=d[2],p=d[6],d=d[10];void 0===b||"XYZ"=== +b?(this.y=Math.asin(c(g)),0.99999>Math.abs(g)?(this.x=Math.atan2(-j,d),this.z=Math.atan2(-f,e)):(this.x=Math.atan2(p,i),this.z=0)):"YXZ"===b?(this.x=Math.asin(-c(j)),0.99999>Math.abs(j)?(this.y=Math.atan2(g,d),this.z=Math.atan2(h,i)):(this.y=Math.atan2(-m,e),this.z=0)):"ZXY"===b?(this.x=Math.asin(c(p)),0.99999>Math.abs(p)?(this.y=Math.atan2(-m,d),this.z=Math.atan2(-f,i)):(this.y=0,this.z=Math.atan2(h,e))):"ZYX"===b?(this.y=Math.asin(-c(m)),0.99999>Math.abs(m)?(this.x=Math.atan2(p,d),this.z=Math.atan2(h, +e)):(this.x=0,this.z=Math.atan2(-f,i))):"YZX"===b?(this.z=Math.asin(c(h)),0.99999>Math.abs(h)?(this.x=Math.atan2(-j,i),this.y=Math.atan2(-m,e)):(this.x=0,this.y=Math.atan2(g,d))):"XZY"===b&&(this.z=Math.asin(-c(f)),0.99999>Math.abs(f)?(this.x=Math.atan2(p,i),this.y=Math.atan2(g,e)):(this.x=Math.atan2(-j,d),this.y=0));return this},setEulerFromQuaternion:function(a,b){function c(a){return Math.min(Math.max(a,-1),1)}var d=a.x*a.x,e=a.y*a.y,f=a.z*a.z,g=a.w*a.w;void 0===b||"XYZ"===b?(this.x=Math.atan2(2* +(a.x*a.w-a.y*a.z),g-d-e+f),this.y=Math.asin(c(2*(a.x*a.z+a.y*a.w))),this.z=Math.atan2(2*(a.z*a.w-a.x*a.y),g+d-e-f)):"YXZ"===b?(this.x=Math.asin(c(2*(a.x*a.w-a.y*a.z))),this.y=Math.atan2(2*(a.x*a.z+a.y*a.w),g-d-e+f),this.z=Math.atan2(2*(a.x*a.y+a.z*a.w),g-d+e-f)):"ZXY"===b?(this.x=Math.asin(c(2*(a.x*a.w+a.y*a.z))),this.y=Math.atan2(2*(a.y*a.w-a.z*a.x),g-d-e+f),this.z=Math.atan2(2*(a.z*a.w-a.x*a.y),g-d+e-f)):"ZYX"===b?(this.x=Math.atan2(2*(a.x*a.w+a.z*a.y),g-d-e+f),this.y=Math.asin(c(2*(a.y*a.w-a.x* +a.z))),this.z=Math.atan2(2*(a.x*a.y+a.z*a.w),g+d-e-f)):"YZX"===b?(this.x=Math.atan2(2*(a.x*a.w-a.z*a.y),g-d+e-f),this.y=Math.atan2(2*(a.y*a.w-a.x*a.z),g+d-e-f),this.z=Math.asin(c(2*(a.x*a.y+a.z*a.w)))):"XZY"===b&&(this.x=Math.atan2(2*(a.x*a.w+a.y*a.z),g-d+e-f),this.y=Math.atan2(2*(a.x*a.z+a.y*a.w),g+d-e-f),this.z=Math.asin(c(2*(a.z*a.w-a.x*a.y))));return this},getPositionFromMatrix:function(a){this.x=a.elements[12];this.y=a.elements[13];this.z=a.elements[14];return this},getScaleFromMatrix:function(a){var b= +this.set(a.elements[0],a.elements[1],a.elements[2]).length(),c=this.set(a.elements[4],a.elements[5],a.elements[6]).length(),a=this.set(a.elements[8],a.elements[9],a.elements[10]).length();this.x=b;this.y=c;this.z=a;return this},getColumnFromMatrix:function(a,b){var c=4*a,d=b.elements;this.x=d[c];this.y=d[c+1];this.z=d[c+2];return this},equals:function(a){return a.x===this.x&&a.y===this.y&&a.z===this.z},fromArray:function(a){this.x=a[0];this.y=a[1];this.z=a[2];return this},toArray:function(){return[this.x, +this.y,this.z]},clone:function(){return new THREE.Vector3(this.x,this.y,this.z)}}; +THREE.extend(THREE.Vector3.prototype,{applyEuler:function(){var a=new THREE.Quaternion;return function(b,c){var d=a.setFromEuler(b,c);this.applyQuaternion(d);return this}}(),applyAxisAngle:function(){var a=new THREE.Quaternion;return function(b,c){var d=a.setFromAxisAngle(b,c);this.applyQuaternion(d);return this}}(),projectOnVector:function(){var a=new THREE.Vector3;return function(b){a.copy(b).normalize();b=this.dot(a);return this.copy(a).multiplyScalar(b)}}(),projectOnPlane:function(){var a=new THREE.Vector3; +return function(b){a.copy(this).projectOnVector(b);return this.sub(a)}}(),reflect:function(){var a=new THREE.Vector3;return function(b){a.copy(this).projectOnVector(b).multiplyScalar(2);return this.subVectors(a,this)}}()});THREE.Vector4=function(a,b,c,d){this.x=a||0;this.y=b||0;this.z=c||0;this.w=void 0!==d?d:1}; +THREE.Vector4.prototype={constructor:THREE.Vector4,set:function(a,b,c,d){this.x=a;this.y=b;this.z=c;this.w=d;return this},setX:function(a){this.x=a;return this},setY:function(a){this.y=a;return this},setZ:function(a){this.z=a;return this},setW:function(a){this.w=a;return this},setComponent:function(a,b){switch(a){case 0:this.x=b;break;case 1:this.y=b;break;case 2:this.z=b;break;case 3:this.w=b;break;default:throw Error("index is out of range: "+a);}},getComponent:function(a){switch(a){case 0:return this.x; +case 1:return this.y;case 2:return this.z;case 3:return this.w;default:throw Error("index is out of range: "+a);}},copy:function(a){this.x=a.x;this.y=a.y;this.z=a.z;this.w=void 0!==a.w?a.w:1;return this},add:function(a,b){if(void 0!==b)return console.warn("DEPRECATED: Vector4's .add() now only accepts one argument. Use .addVectors( a, b ) instead."),this.addVectors(a,b);this.x+=a.x;this.y+=a.y;this.z+=a.z;this.w+=a.w;return this},addScalar:function(a){this.x+=a;this.y+=a;this.z+=a;this.w+=a;return this}, +addVectors:function(a,b){this.x=a.x+b.x;this.y=a.y+b.y;this.z=a.z+b.z;this.w=a.w+b.w;return this},sub:function(a,b){if(void 0!==b)return console.warn("DEPRECATED: Vector4's .sub() now only accepts one argument. Use .subVectors( a, b ) instead."),this.subVectors(a,b);this.x-=a.x;this.y-=a.y;this.z-=a.z;this.w-=a.w;return this},subVectors:function(a,b){this.x=a.x-b.x;this.y=a.y-b.y;this.z=a.z-b.z;this.w=a.w-b.w;return this},multiplyScalar:function(a){this.x*=a;this.y*=a;this.z*=a;this.w*=a;return this}, +applyMatrix4:function(a){var b=this.x,c=this.y,d=this.z,e=this.w,a=a.elements;this.x=a[0]*b+a[4]*c+a[8]*d+a[12]*e;this.y=a[1]*b+a[5]*c+a[9]*d+a[13]*e;this.z=a[2]*b+a[6]*c+a[10]*d+a[14]*e;this.w=a[3]*b+a[7]*c+a[11]*d+a[15]*e;return this},divideScalar:function(a){0!==a?(this.x/=a,this.y/=a,this.z/=a,this.w/=a):(this.z=this.y=this.x=0,this.w=1);return this},setAxisAngleFromQuaternion:function(a){this.w=2*Math.acos(a.w);var b=Math.sqrt(1-a.w*a.w);1E-4>b?(this.x=1,this.z=this.y=0):(this.x=a.x/b,this.y= +a.y/b,this.z=a.z/b);return this},setAxisAngleFromRotationMatrix:function(a){var b,c,d,a=a.elements,e=a[0];d=a[4];var f=a[8],g=a[1],h=a[5],i=a[9];c=a[2];b=a[6];var j=a[10];if(0.01>Math.abs(d-g)&&0.01>Math.abs(f-c)&&0.01>Math.abs(i-b)){if(0.1>Math.abs(d+g)&&0.1>Math.abs(f+c)&&0.1>Math.abs(i+b)&&0.1>Math.abs(e+h+j-3))return this.set(1,0,0,0),this;a=Math.PI;e=(e+1)/2;h=(h+1)/2;j=(j+1)/2;d=(d+g)/4;f=(f+c)/4;i=(i+b)/4;e>h&&e>j?0.01>e?(b=0,d=c=0.707106781):(b=Math.sqrt(e),c=d/b,d=f/b):h>j?0.01>h?(b=0.707106781, +c=0,d=0.707106781):(c=Math.sqrt(h),b=d/c,d=i/c):0.01>j?(c=b=0.707106781,d=0):(d=Math.sqrt(j),b=f/d,c=i/d);this.set(b,c,d,a);return this}a=Math.sqrt((b-i)*(b-i)+(f-c)*(f-c)+(g-d)*(g-d));0.001>Math.abs(a)&&(a=1);this.x=(b-i)/a;this.y=(f-c)/a;this.z=(g-d)/a;this.w=Math.acos((e+h+j-1)/2);return this},min:function(a){this.x>a.x&&(this.x=a.x);this.y>a.y&&(this.y=a.y);this.z>a.z&&(this.z=a.z);this.w>a.w&&(this.w=a.w);return this},max:function(a){this.xb.x&&(this.x=b.x);this.yb.y&&(this.y=b.y);this.zb.z&&(this.z=b.z);this.wb.w&&(this.w=b.w);return this},negate:function(){return this.multiplyScalar(-1)},dot:function(a){return this.x*a.x+this.y*a.y+this.z*a.z+this.w*a.w},lengthSq:function(){return this.x*this.x+this.y*this.y+this.z*this.z+this.w*this.w},length:function(){return Math.sqrt(this.x* +this.x+this.y*this.y+this.z*this.z+this.w*this.w)},lengthManhattan:function(){return Math.abs(this.x)+Math.abs(this.y)+Math.abs(this.z)+Math.abs(this.w)},normalize:function(){return this.divideScalar(this.length())},setLength:function(a){var b=this.length();0!==b&&a!==b&&this.multiplyScalar(a/b);return this},lerp:function(a,b){this.x+=(a.x-this.x)*b;this.y+=(a.y-this.y)*b;this.z+=(a.z-this.z)*b;this.w+=(a.w-this.w)*b;return this},equals:function(a){return a.x===this.x&&a.y===this.y&&a.z===this.z&& +a.w===this.w},fromArray:function(a){this.x=a[0];this.y=a[1];this.z=a[2];this.w=a[3];return this},toArray:function(){return[this.x,this.y,this.z,this.w]},clone:function(){return new THREE.Vector4(this.x,this.y,this.z,this.w)}};THREE.Line3=function(a,b){this.start=void 0!==a?a:new THREE.Vector3;this.end=void 0!==b?b:new THREE.Vector3}; +THREE.Line3.prototype={constructor:THREE.Line3,set:function(a,b){this.start.copy(a);this.end.copy(b);return this},copy:function(a){this.start.copy(a.start);this.end.copy(a.end);return this},center:function(a){return(a||new THREE.Vector3).addVectors(this.start,this.end).multiplyScalar(0.5)},delta:function(a){return(a||new THREE.Vector3).subVectors(this.end,this.start)},distanceSq:function(){return this.start.distanceToSquared(this.end)},distance:function(){return this.start.distanceTo(this.end)},at:function(a, +b){var c=b||new THREE.Vector3;return this.delta(c).multiplyScalar(a).add(this.start)},closestPointToPointParameter:function(){var a=new THREE.Vector3,b=new THREE.Vector3;return function(c,d){a.subVectors(c,this.start);b.subVectors(this.end,this.start);var e=b.dot(b),e=b.dot(a)/e;d&&(e=THREE.Math.clamp(e,0,1));return e}}(),closestPointToPoint:function(a,b,c){a=this.closestPointToPointParameter(a,b);c=c||new THREE.Vector3;return this.delta(c).multiplyScalar(a).add(this.start)},applyMatrix4:function(a){this.start.applyMatrix4(a); +this.end.applyMatrix4(a);return this},equals:function(a){return a.start.equals(this.start)&&a.end.equals(this.end)},clone:function(){return(new THREE.Line3).copy(this)}};THREE.Box2=function(a,b){this.min=void 0!==a?a:new THREE.Vector2(Infinity,Infinity);this.max=void 0!==b?b:new THREE.Vector2(-Infinity,-Infinity)}; +THREE.Box2.prototype={constructor:THREE.Box2,set:function(a,b){this.min.copy(a);this.max.copy(b);return this},setFromPoints:function(a){if(0this.max.x&&(this.max.x=b.x),b.ythis.max.y&&(this.max.y=b.y)}else this.makeEmpty();return this},setFromCenterAndSize:function(){var a=new THREE.Vector2;return function(b,c){var d=a.copy(c).multiplyScalar(0.5); +this.min.copy(b).sub(d);this.max.copy(b).add(d);return this}}(),copy:function(a){this.min.copy(a.min);this.max.copy(a.max);return this},makeEmpty:function(){this.min.x=this.min.y=Infinity;this.max.x=this.max.y=-Infinity;return this},empty:function(){return this.max.xthis.max.x||a.ythis.max.y?!1:!0},containsBox:function(a){return this.min.x<=a.min.x&&a.max.x<=this.max.x&&this.min.y<=a.min.y&&a.max.y<=this.max.y?!0:!1},getParameter:function(a){return new THREE.Vector2((a.x-this.min.x)/(this.max.x-this.min.x), +(a.y-this.min.y)/(this.max.y-this.min.y))},isIntersectionBox:function(a){return a.max.xthis.max.x||a.max.ythis.max.y?!1:!0},clampPoint:function(a,b){return(b||new THREE.Vector2).copy(a).clamp(this.min,this.max)},distanceToPoint:function(){var a=new THREE.Vector2;return function(b){return a.copy(b).clamp(this.min,this.max).sub(b).length()}}(),intersect:function(a){this.min.max(a.min);this.max.min(a.max);return this},union:function(a){this.min.min(a.min);this.max.max(a.max); +return this},translate:function(a){this.min.add(a);this.max.add(a);return this},equals:function(a){return a.min.equals(this.min)&&a.max.equals(this.max)},clone:function(){return(new THREE.Box2).copy(this)}};THREE.Box3=function(a,b){this.min=void 0!==a?a:new THREE.Vector3(Infinity,Infinity,Infinity);this.max=void 0!==b?b:new THREE.Vector3(-Infinity,-Infinity,-Infinity)}; +THREE.Box3.prototype={constructor:THREE.Box3,set:function(a,b){this.min.copy(a);this.max.copy(b);return this},setFromPoints:function(a){if(0this.max.x&&(this.max.x=b.x),b.ythis.max.y&&(this.max.y=b.y),b.zthis.max.z&&(this.max.z=b.z)}else this.makeEmpty();return this},setFromCenterAndSize:function(){var a=new THREE.Vector3; +return function(b,c){var d=a.copy(c).multiplyScalar(0.5);this.min.copy(b).sub(d);this.max.copy(b).add(d);return this}}(),copy:function(a){this.min.copy(a.min);this.max.copy(a.max);return this},makeEmpty:function(){this.min.x=this.min.y=this.min.z=Infinity;this.max.x=this.max.y=this.max.z=-Infinity;return this},empty:function(){return this.max.xthis.max.x||a.ythis.max.y||a.zthis.max.z?!1:!0},containsBox:function(a){return this.min.x<=a.min.x&&a.max.x<= +this.max.x&&this.min.y<=a.min.y&&a.max.y<=this.max.y&&this.min.z<=a.min.z&&a.max.z<=this.max.z?!0:!1},getParameter:function(a){return new THREE.Vector3((a.x-this.min.x)/(this.max.x-this.min.x),(a.y-this.min.y)/(this.max.y-this.min.y),(a.z-this.min.z)/(this.max.z-this.min.z))},isIntersectionBox:function(a){return a.max.xthis.max.x||a.max.ythis.max.y||a.max.zthis.max.z?!1:!0},clampPoint:function(a,b){return(b||new THREE.Vector3).copy(a).clamp(this.min, +this.max)},distanceToPoint:function(){var a=new THREE.Vector3;return function(b){return a.copy(b).clamp(this.min,this.max).sub(b).length()}}(),getBoundingSphere:function(){var a=new THREE.Vector3;return function(b){b=b||new THREE.Sphere;b.center=this.center();b.radius=0.5*this.size(a).length();return b}}(),intersect:function(a){this.min.max(a.min);this.max.min(a.max);return this},union:function(a){this.min.min(a.min);this.max.max(a.max);return this},applyMatrix4:function(){var a=[new THREE.Vector3, +new THREE.Vector3,new THREE.Vector3,new THREE.Vector3,new THREE.Vector3,new THREE.Vector3,new THREE.Vector3,new THREE.Vector3];return function(b){a[0].set(this.min.x,this.min.y,this.min.z).applyMatrix4(b);a[1].set(this.min.x,this.min.y,this.max.z).applyMatrix4(b);a[2].set(this.min.x,this.max.y,this.min.z).applyMatrix4(b);a[3].set(this.min.x,this.max.y,this.max.z).applyMatrix4(b);a[4].set(this.max.x,this.min.y,this.min.z).applyMatrix4(b);a[5].set(this.max.x,this.min.y,this.max.z).applyMatrix4(b);a[6].set(this.max.x, +this.max.y,this.min.z).applyMatrix4(b);a[7].set(this.max.x,this.max.y,this.max.z).applyMatrix4(b);this.makeEmpty();this.setFromPoints(a);return this}}(),translate:function(a){this.min.add(a);this.max.add(a);return this},equals:function(a){return a.min.equals(this.min)&&a.max.equals(this.max)},clone:function(){return(new THREE.Box3).copy(this)}};THREE.Matrix3=function(a,b,c,d,e,f,g,h,i){this.elements=new Float32Array(9);this.set(void 0!==a?a:1,b||0,c||0,d||0,void 0!==e?e:1,f||0,g||0,h||0,void 0!==i?i:1)}; +THREE.Matrix3.prototype={constructor:THREE.Matrix3,set:function(a,b,c,d,e,f,g,h,i){var j=this.elements;j[0]=a;j[3]=b;j[6]=c;j[1]=d;j[4]=e;j[7]=f;j[2]=g;j[5]=h;j[8]=i;return this},identity:function(){this.set(1,0,0,0,1,0,0,0,1);return this},copy:function(a){a=a.elements;this.set(a[0],a[3],a[6],a[1],a[4],a[7],a[2],a[5],a[8]);return this},multiplyVector3:function(a){console.warn("DEPRECATED: Matrix3's .multiplyVector3() has been removed. Use vector.applyMatrix3( matrix ) instead.");return a.applyMatrix3(this)}, +multiplyVector3Array:function(){var a=new THREE.Vector3;return function(b){for(var c=0,d=b.length;c=this.radius},containsPoint:function(a){return a.distanceToSquared(this.center)<=this.radius*this.radius},distanceToPoint:function(a){return a.distanceTo(this.center)- +this.radius},intersectsSphere:function(a){var b=this.radius+a.radius;return a.center.distanceToSquared(this.center)<=b*b},clampPoint:function(a,b){var c=this.center.distanceToSquared(a),d=b||new THREE.Vector3;d.copy(a);c>this.radius*this.radius&&(d.sub(this.center).normalize(),d.multiplyScalar(this.radius).add(this.center));return d},getBoundingBox:function(a){a=a||new THREE.Box3;a.set(this.center,this.center);a.expandByScalar(this.radius);return a},applyMatrix4:function(a){this.center.applyMatrix4(a); +this.radius*=a.getMaxScaleOnAxis();return this},translate:function(a){this.center.add(a);return this},equals:function(a){return a.center.equals(this.center)&&a.radius===this.radius},clone:function(){return(new THREE.Sphere).copy(this)}};THREE.Frustum=function(a,b,c,d,e,f){this.planes=[void 0!==a?a:new THREE.Plane,void 0!==b?b:new THREE.Plane,void 0!==c?c:new THREE.Plane,void 0!==d?d:new THREE.Plane,void 0!==e?e:new THREE.Plane,void 0!==f?f:new THREE.Plane]}; +THREE.Frustum.prototype={constructor:THREE.Frustum,set:function(a,b,c,d,e,f){var g=this.planes;g[0].copy(a);g[1].copy(b);g[2].copy(c);g[3].copy(d);g[4].copy(e);g[5].copy(f);return this},copy:function(a){for(var b=this.planes,c=0;6>c;c++)b[c].copy(a.planes[c]);return this},setFromMatrix:function(a){var b=this.planes,c=a.elements,a=c[0],d=c[1],e=c[2],f=c[3],g=c[4],h=c[5],i=c[6],j=c[7],m=c[8],p=c[9],l=c[10],r=c[11],s=c[12],n=c[13],q=c[14],c=c[15];b[0].setComponents(f-a,j-g,r-m,c-s).normalize();b[1].setComponents(f+ +a,j+g,r+m,c+s).normalize();b[2].setComponents(f+d,j+h,r+p,c+n).normalize();b[3].setComponents(f-d,j-h,r-p,c-n).normalize();b[4].setComponents(f-e,j-i,r-l,c-q).normalize();b[5].setComponents(f+e,j+i,r+l,c+q).normalize();return this},intersectsObject:function(){var a=new THREE.Vector3;return function(b){var c=b.matrixWorld,d=this.planes,b=-b.geometry.boundingSphere.radius*c.getMaxScaleOnAxis();a.getPositionFromMatrix(c);for(c=0;6>c;c++)if(d[c].distanceToPoint(a)d;d++)if(b[d].distanceToPoint(c)c;c++)if(0>b[c].distanceToPoint(a))return!1;return!0},clone:function(){return(new THREE.Frustum).copy(this)}};THREE.Plane=function(a,b){this.normal=void 0!==a?a:new THREE.Vector3(1,0,0);this.constant=void 0!==b?b:0}; +THREE.Plane.prototype={constructor:THREE.Plane,set:function(a,b){this.normal.copy(a);this.constant=b;return this},setComponents:function(a,b,c,d){this.normal.set(a,b,c);this.constant=d;return this},setFromNormalAndCoplanarPoint:function(a,b){this.normal.copy(a);this.constant=-b.dot(this.normal);return this},setFromCoplanarPoints:function(){var a=new THREE.Vector3,b=new THREE.Vector3;return function(c,d,e){d=a.subVectors(e,d).cross(b.subVectors(c,d)).normalize();this.setFromNormalAndCoplanarPoint(d, +c);return this}}(),copy:function(a){this.normal.copy(a.normal);this.constant=a.constant;return this},normalize:function(){var a=1/this.normal.length();this.normal.multiplyScalar(a);this.constant*=a;return this},negate:function(){this.constant*=-1;this.normal.negate();return this},distanceToPoint:function(a){return this.normal.dot(a)+this.constant},distanceToSphere:function(a){return this.distanceToPoint(a.center)-a.radius},projectPoint:function(a,b){return this.orthoPoint(a,b).sub(a).negate()},orthoPoint:function(a, +b){var c=this.distanceToPoint(a);return(b||new THREE.Vector3).copy(this.normal).multiplyScalar(c)},isIntersectionLine:function(a){var b=this.distanceToPoint(a.start),a=this.distanceToPoint(a.end);return 0>b&&0a&&0f||1c?c:a},clampBottom:function(a,b){return a=c)return 1;a=(a-b)/(c-b);return a*a*(3-2*a)},smootherstep:function(a,b,c){if(a<=b)return 0;if(a>=c)return 1;a=(a-b)/(c-b);return a*a*a*(a*(6*a-15)+10)},random16:function(){return(65280*Math.random()+255*Math.random())/65535},randInt:function(a,b){return a+Math.floor(Math.random()*(b-a+1))},randFloat:function(a, +b){return a+Math.random()*(b-a)},randFloatSpread:function(a){return a*(0.5-Math.random())},sign:function(a){return 0>a?-1:0this.points.length-2?this.points.length-1:f+1;c[3]=f>this.points.length-3?this.points.length-1: +f+2;j=this.points[c[0]];m=this.points[c[1]];p=this.points[c[2]];l=this.points[c[3]];h=g*g;i=g*h;d.x=b(j.x,m.x,p.x,l.x,g,h,i);d.y=b(j.y,m.y,p.y,l.y,g,h,i);d.z=b(j.z,m.z,p.z,l.z,g,h,i);return d};this.getControlPointsArray=function(){var a,b,c=this.points.length,d=[];for(a=0;a=b.x+b.y}}(); +THREE.Triangle.prototype={constructor:THREE.Triangle,set:function(a,b,c){this.a.copy(a);this.b.copy(b);this.c.copy(c);return this},setFromPointsAndIndices:function(a,b,c,d){this.a.copy(a[b]);this.b.copy(a[c]);this.c.copy(a[d]);return this},copy:function(a){this.a.copy(a.a);this.b.copy(a.b);this.c.copy(a.c);return this},area:function(){var a=new THREE.Vector3,b=new THREE.Vector3;return function(){a.subVectors(this.c,this.b);b.subVectors(this.a,this.b);return 0.5*a.cross(b).length()}}(),midpoint:function(a){return(a|| +new THREE.Vector3).addVectors(this.a,this.b).add(this.c).multiplyScalar(1/3)},normal:function(a){return THREE.Triangle.normal(this.a,this.b,this.c,a)},plane:function(a){return(a||new THREE.Plane).setFromCoplanarPoints(this.a,this.b,this.c)},barycoordFromPoint:function(a,b){return THREE.Triangle.barycoordFromPoint(a,this.a,this.b,this.c,b)},containsPoint:function(a){return THREE.Triangle.containsPoint(a,this.a,this.b,this.c)},equals:function(a){return a.a.equals(this.a)&&a.b.equals(this.b)&&a.c.equals(this.c)}, +clone:function(){return(new THREE.Triangle).copy(this)}};THREE.Vertex=function(a){console.warn("THREE.Vertex has been DEPRECATED. Use THREE.Vector3 instead.");return a};THREE.UV=function(a,b){console.warn("THREE.UV has been DEPRECATED. Use THREE.Vector2 instead.");return new THREE.Vector2(a,b)};THREE.Clock=function(a){this.autoStart=void 0!==a?a:!0;this.elapsedTime=this.oldTime=this.startTime=0;this.running=!1}; +THREE.Clock.prototype={constructor:THREE.Clock,start:function(){this.oldTime=this.startTime=void 0!==window.performance&&void 0!==window.performance.now?window.performance.now():Date.now();this.running=!0},stop:function(){this.getElapsedTime();this.running=!1},getElapsedTime:function(){this.getDelta();return this.elapsedTime},getDelta:function(){var a=0;this.autoStart&&!this.running&&this.start();if(this.running){var b=void 0!==window.performance&&void 0!==window.performance.now?window.performance.now(): +Date.now(),a=0.001*(b-this.oldTime);this.oldTime=b;this.elapsedTime+=a}return a}};THREE.EventDispatcher=function(){}; +THREE.EventDispatcher.prototype={constructor:THREE.EventDispatcher,addEventListener:function(a,b){void 0===this._listeners&&(this._listeners={});var c=this._listeners;void 0===c[a]&&(c[a]=[]);-1===c[a].indexOf(b)&&c[a].push(b)},hasEventListener:function(a,b){if(void 0===this._listeners)return!1;var c=this._listeners;return void 0!==c[a]&&-1!==c[a].indexOf(b)?!0:!1},removeEventListener:function(a,b){if(void 0!==this._listeners){var c=this._listeners,d=c[a].indexOf(b);-1!==d&&c[a].splice(d,1)}},dispatchEvent:function(a){if(void 0!== +this._listeners){var b=this._listeners[a.type];if(void 0!==b){a.target=this;for(var c=0,d=b.length;ch.scale.x)return l;l.push({distance:r,point:h.position,face:null,object:h})}else if(h instanceof +a.LOD)f.getPositionFromMatrix(h.matrixWorld),r=j.ray.origin.distanceTo(f),i(h.getObjectForDistance(r),j,l);else if(h instanceof a.Mesh){f.getPositionFromMatrix(h.matrixWorld);b.set(f,h.geometry.boundingSphere.radius*h.matrixWorld.getMaxScaleOnAxis());if(!j.ray.isIntersectionSphere(b))return l;var r=h.geometry,s=r.vertices,n=h.material instanceof a.MeshFaceMaterial,q=!0===n?h.material.materials:null,y=h.material.side,u,x,t,E=j.precision;g.getInverse(h.matrixWorld);c.copy(j.ray).applyMatrix4(g);for(var J= +0,F=r.faces.length;JH)){y=y.side;if(y!==a.DoubleSide&&(u=c.direction.dot(d.normal),!(y===a.FrontSide?0>u:0j.far)){e=c.at(H,e);if(z instanceof a.Face3){if(y=s[z.a],u=s[z.b],x=s[z.c],!a.Triangle.containsPoint(e,y,u,x))continue}else if(z instanceof a.Face4){if(y=s[z.a],u=s[z.b],x=s[z.c],t=s[z.d], +!a.Triangle.containsPoint(e,y,u,t)&&!a.Triangle.containsPoint(e,u,x,t))continue}else throw Error("face type not supported");l.push({distance:H,point:j.ray.at(H),face:z,faceIndex:J,object:h})}}}}}},j=function(a,b,c){for(var a=a.getDescendants(),d=0,e=a.length;de&&0>f||0>g&&0>h)return!1;0>e?c=Math.max(c,e/(e-f)):0>f&&(d=Math.min(d,e/(e-f)));0>g?c=Math.max(c,g/(g-h)):0>h&&(d=Math.min(d,g/(g-h)));if(d< +c)return!1;a.lerp(b,c);b.lerp(a,1-d);return!0}var e,f,g=[],h=0,i,j,m=[],p=0,l,r,s=[],n=0,q,y=[],u=0,x,t,E=[],J=0,F,z,H=[],K=0,G={objects:[],sprites:[],lights:[],elements:[]},L=new THREE.Vector3,B=new THREE.Vector4,V=new THREE.Box3(new THREE.Vector3(-1,-1,-1),new THREE.Vector3(1,1,1)),C=new THREE.Box3,I=Array(3),M=Array(4),R=new THREE.Matrix4,ea=new THREE.Matrix4,wa,Ma=new THREE.Matrix4,A=new THREE.Matrix3,ca=new THREE.Matrix3,ja=new THREE.Vector3,na=new THREE.Frustum,N=new THREE.Vector4,fa=new THREE.Vector4; +this.projectVector=function(a,b){b.matrixWorldInverse.getInverse(b.matrixWorld);ea.multiplyMatrices(b.projectionMatrix,b.matrixWorldInverse);return a.applyProjection(ea)};this.unprojectVector=function(a,b){b.projectionMatrixInverse.getInverse(b.projectionMatrix);ea.multiplyMatrices(b.matrixWorld,b.projectionMatrixInverse);return a.applyProjection(ea)};this.pickingRay=function(a,b){a.z=-1;var c=new THREE.Vector3(a.x,a.y,1);this.unprojectVector(a,b);this.unprojectVector(c,b);c.sub(a).normalize();return new THREE.Raycaster(a, +c)};this.projectScene=function(g,h,p,Ka){var qa=!1,pa,Z,ga,W,da,la,ha,ia,Qa,kb,oa,Xa,Ra;z=t=q=r=0;G.elements.length=0;!0===g.autoUpdate&&g.updateMatrixWorld();void 0===h.parent&&h.updateMatrixWorld();R.copy(h.matrixWorldInverse.getInverse(h.matrixWorld));ea.multiplyMatrices(h.projectionMatrix,R);ca.getNormalMatrix(R);na.setFromMatrix(ea);f=0;G.objects.length=0;G.sprites.length=0;G.lights.length=0;var Aa=function(b){for(var c=0,d=b.children.length;ci.positionScreen.x||1i.positionScreen.y||1i.positionScreen.z||1(ha.positionScreen.x-W.positionScreen.x)*(da.positionScreen.y-W.positionScreen.y)-(ha.positionScreen.y-W.positionScreen.y)*(da.positionScreen.x-W.positionScreen.x),la===THREE.DoubleSide||qa===(la===THREE.FrontSide))r===n?(oa=new THREE.RenderableFace3,s.push(oa),n++,r++,l=oa):l=s[r++],l.v1.copy(W),l.v2.copy(da),l.v3.copy(ha);else continue; +else continue;else if(Z instanceof THREE.Face4)if(W=m[Z.a],da=m[Z.b],ha=m[Z.c],oa=m[Z.d],M[0]=W.positionScreen,M[1]=da.positionScreen,M[2]=ha.positionScreen,M[3]=oa.positionScreen,!0===W.visible||!0===da.visible||!0===ha.visible||!0===oa.visible||V.isIntersectionBox(C.setFromPoints(M)))if(qa=0>(oa.positionScreen.x-W.positionScreen.x)*(da.positionScreen.y-W.positionScreen.y)-(oa.positionScreen.y-W.positionScreen.y)*(da.positionScreen.x-W.positionScreen.x)||0>(da.positionScreen.x-ha.positionScreen.x)* +(oa.positionScreen.y-ha.positionScreen.y)-(da.positionScreen.y-ha.positionScreen.y)*(oa.positionScreen.x-ha.positionScreen.x),la===THREE.DoubleSide||qa===(la===THREE.FrontSide)){if(q===u){var sb=new THREE.RenderableFace4;y.push(sb);u++;q++;l=sb}else l=y[q++];l.v1.copy(W);l.v2.copy(da);l.v3.copy(ha);l.v4.copy(oa)}else continue;else continue;l.normalModel.copy(Z.normal);!1===qa&&(la===THREE.BackSide||la===THREE.DoubleSide)&&l.normalModel.negate();l.normalModel.applyMatrix3(A).normalize();l.normalModelView.copy(l.normalModel).applyMatrix3(ca); +l.centroidModel.copy(Z.centroid).applyMatrix4(wa);ha=Z.vertexNormals;W=0;for(da=ha.length;WB.z&&(z===K?(qa=new THREE.RenderableParticle,H.push(qa),K++, +z++,F=qa):F=H[z++],F.object=ia,F.x=B.x/B.w,F.y=B.y/B.w,F.z=B.z,F.rotation=ia.rotation.z,F.scale.x=ia.scale.x*Math.abs(F.x-(B.x+h.projectionMatrix.elements[0])/(B.w+h.projectionMatrix.elements[12])),F.scale.y=ia.scale.y*Math.abs(F.y-(B.y+h.projectionMatrix.elements[5])/(B.w+h.projectionMatrix.elements[13])),F.material=ia.material,G.elements.push(F)));!0===Ka&&G.elements.sort(c);return G}};THREE.Face3=function(a,b,c,d,e,f){this.a=a;this.b=b;this.c=c;this.normal=d instanceof THREE.Vector3?d:new THREE.Vector3;this.vertexNormals=d instanceof Array?d:[];this.color=e instanceof THREE.Color?e:new THREE.Color;this.vertexColors=e instanceof Array?e:[];this.vertexTangents=[];this.materialIndex=void 0!==f?f:0;this.centroid=new THREE.Vector3}; +THREE.Face3.prototype={constructor:THREE.Face3,clone:function(){var a=new THREE.Face3(this.a,this.b,this.c);a.normal.copy(this.normal);a.color.copy(this.color);a.centroid.copy(this.centroid);a.materialIndex=this.materialIndex;var b,c;b=0;for(c=this.vertexNormals.length;be?-1:1,f.vertexTangents[d]=new THREE.Vector4(B.x,B.y,B.z,e)}this.hasTangents=!0},computeLineDistances:function(){for(var a=0,b=this.vertices,c=0,d=b.length;ci;i++)if(h[i]==h[(i+1)%3]){e.push(f);break}}else if(a instanceof THREE.Face4){a.a=c[a.a];a.b=c[a.b];a.c=c[a.c];a.d=c[a.d];h=[a.a,a.b,a.c,a.d];d=-1;for(i=0;4>i;i++)h[i]==h[(i+1)%4]&&(0<=d&&e.push(f),d=i);if(0<= +d){h.splice(d,1);var m=new THREE.Face3(h[0],h[1],h[2],a.normal,a.color,a.materialIndex);h=0;for(i=this.faceVertexUvs.length;hb.max.x&&(b.max.x=c),db.max.y&&(b.max.y=d),eb.max.z&&(b.max.z=e)}if(void 0===a||0===a.length)this.boundingBox.min.set(0,0,0),this.boundingBox.max.set(0,0,0)},computeBoundingSphere:function(){null===this.boundingSphere&&(this.boundingSphere=new THREE.Sphere);var a=this.attributes.position.array;if(a){for(var b,c=0,d,e,f=0,g=a.length;fc&&(c=b);this.boundingSphere.radius=Math.sqrt(c)}},computeVertexNormals:function(){if(this.attributes.position){var a, +b,c,d;a=this.attributes.position.array.length;if(void 0===this.attributes.normal)this.attributes.normal={itemSize:3,array:new Float32Array(a),numItems:a};else{a=0;for(b=this.attributes.normal.array.length;aja?-1:1;h[4*a]=R.x;h[4*a+1]=R.y;h[4*a+2]=R.z;h[4*a+3]=A}if(void 0===this.attributes.index||void 0===this.attributes.position||void 0===this.attributes.normal||void 0===this.attributes.uv)console.warn("Missing required attributes (index, position, normal or uv) in BufferGeometry.computeTangents()");else{var b=this.attributes.index.array,c=this.attributes.position.array, +d=this.attributes.normal.array,e=this.attributes.uv.array,f=c.length/3;if(void 0===this.attributes.tangent){var g=4*f;this.attributes.tangent={itemSize:4,array:new Float32Array(g),numItems:g}}for(var h=this.attributes.tangent.array,i=[],j=[],g=0;ga.length?".":a.join("/"))+"/"},initMaterials:function(a,b){for(var c=[],d=0;da.opacity)i.transparent=a.transparent;void 0!==a.depthTest&&(i.depthTest=a.depthTest);void 0!==a.depthWrite&&(i.depthWrite=a.depthWrite);void 0!==a.visible&&(i.visible=a.visible);void 0!==a.flipSided&&(i.side=THREE.BackSide); +void 0!==a.doubleSided&&(i.side=THREE.DoubleSide);void 0!==a.wireframe&&(i.wireframe=a.wireframe);void 0!==a.vertexColors&&("face"===a.vertexColors?i.vertexColors=THREE.FaceColors:a.vertexColors&&(i.vertexColors=THREE.VertexColors));a.colorDiffuse?i.color=f(a.colorDiffuse):a.DbgColor&&(i.color=a.DbgColor);a.colorSpecular&&(i.specular=f(a.colorSpecular));a.colorAmbient&&(i.ambient=f(a.colorAmbient));a.transparency&&(i.opacity=a.transparency);a.specularCoef&&(i.shininess=a.specularCoef);a.mapDiffuse&& +b&&e(i,"map",a.mapDiffuse,a.mapDiffuseRepeat,a.mapDiffuseOffset,a.mapDiffuseWrap,a.mapDiffuseAnisotropy);a.mapLight&&b&&e(i,"lightMap",a.mapLight,a.mapLightRepeat,a.mapLightOffset,a.mapLightWrap,a.mapLightAnisotropy);a.mapBump&&b&&e(i,"bumpMap",a.mapBump,a.mapBumpRepeat,a.mapBumpOffset,a.mapBumpWrap,a.mapBumpAnisotropy);a.mapNormal&&b&&e(i,"normalMap",a.mapNormal,a.mapNormalRepeat,a.mapNormalOffset,a.mapNormalWrap,a.mapNormalAnisotropy);a.mapSpecular&&b&&e(i,"specularMap",a.mapSpecular,a.mapSpecularRepeat, +a.mapSpecularOffset,a.mapSpecularWrap,a.mapSpecularAnisotropy);a.mapBumpScale&&(i.bumpScale=a.mapBumpScale);a.mapNormal?(h=THREE.ShaderLib.normalmap,j=THREE.UniformsUtils.clone(h.uniforms),j.tNormal.value=i.normalMap,a.mapNormalFactor&&j.uNormalScale.value.set(a.mapNormalFactor,a.mapNormalFactor),i.map&&(j.tDiffuse.value=i.map,j.enableDiffuse.value=!0),i.specularMap&&(j.tSpecular.value=i.specularMap,j.enableSpecular.value=!0),i.lightMap&&(j.tAO.value=i.lightMap,j.enableAO.value=!0),j.uDiffuseColor.value.setHex(i.color), +j.uSpecularColor.value.setHex(i.specular),j.uAmbientColor.value.setHex(i.ambient),j.uShininess.value=i.shininess,void 0!==i.opacity&&(j.uOpacity.value=i.opacity),h=new THREE.ShaderMaterial({fragmentShader:h.fragmentShader,vertexShader:h.vertexShader,uniforms:j,lights:!0,fog:!0}),i.transparent&&(h.transparent=!0)):h=new THREE[h](i);void 0!==a.DbgName&&(h.name=a.DbgName);return h}};THREE.ImageLoader=function(){this.crossOrigin=null}; +THREE.ImageLoader.prototype={constructor:THREE.ImageLoader,addEventListener:THREE.EventDispatcher.prototype.addEventListener,hasEventListener:THREE.EventDispatcher.prototype.hasEventListener,removeEventListener:THREE.EventDispatcher.prototype.removeEventListener,dispatchEvent:THREE.EventDispatcher.prototype.dispatchEvent,load:function(a,b){var c=this;void 0===b&&(b=new Image);b.addEventListener("load",function(){c.dispatchEvent({type:"load",content:b})},!1);b.addEventListener("error",function(){c.dispatchEvent({type:"error", +message:"Couldn't load URL ["+a+"]"})},!1);c.crossOrigin&&(b.crossOrigin=c.crossOrigin);b.src=a}};THREE.JSONLoader=function(a){THREE.Loader.call(this,a);this.withCredentials=!1};THREE.JSONLoader.prototype=Object.create(THREE.Loader.prototype);THREE.JSONLoader.prototype.load=function(a,b,c){c=c&&"string"===typeof c?c:this.extractUrlBase(a);this.onLoadStart();this.loadAjaxJSON(this,a,b,c)}; +THREE.JSONLoader.prototype.loadAjaxJSON=function(a,b,c,d,e){var f=new XMLHttpRequest,g=0;f.onreadystatechange=function(){if(f.readyState===f.DONE)if(200===f.status||0===f.status){if(f.responseText){var h=JSON.parse(f.responseText),h=a.parse(h,d);c(h.geometry,h.materials)}else console.warn("THREE.JSONLoader: ["+b+"] seems to be unreachable or file there is empty");a.onLoadComplete()}else console.error("THREE.JSONLoader: Couldn't load ["+b+"] ["+f.status+"]");else f.readyState===f.LOADING?e&&(0===g&& +(g=f.getResponseHeader("Content-Length")),e({total:g,loaded:f.responseText.length})):f.readyState===f.HEADERS_RECEIVED&&void 0!==e&&(g=f.getResponseHeader("Content-Length"))};f.open("GET",b,!0);f.withCredentials=this.withCredentials;f.send(null)}; +THREE.JSONLoader.prototype.parse=function(a,b){var c=new THREE.Geometry,d=void 0!==a.scale?1/a.scale:1,e,f,g,h,i,j,m,p,l,r,s,n,q,y,u,x=a.faces;r=a.vertices;var t=a.normals,E=a.colors,J=0;for(e=0;eC.parameters.opacity&&(C.parameters.transparent=!0);C.parameters.normalMap?(G=THREE.ShaderLib.normalmap,B=THREE.UniformsUtils.clone(G.uniforms),q=C.parameters.color,V=C.parameters.specular,n=C.parameters.ambient,L=C.parameters.shininess,B.tNormal.value=z.textures[C.parameters.normalMap],C.parameters.normalScale&&B.uNormalScale.value.set(C.parameters.normalScale[0], +C.parameters.normalScale[1]),C.parameters.map&&(B.tDiffuse.value=C.parameters.map,B.enableDiffuse.value=!0),C.parameters.envMap&&(B.tCube.value=C.parameters.envMap,B.enableReflection.value=!0,B.uReflectivity.value=C.parameters.reflectivity),C.parameters.lightMap&&(B.tAO.value=C.parameters.lightMap,B.enableAO.value=!0),C.parameters.specularMap&&(B.tSpecular.value=z.textures[C.parameters.specularMap],B.enableSpecular.value=!0),C.parameters.displacementMap&&(B.tDisplacement.value=z.textures[C.parameters.displacementMap], +B.enableDisplacement.value=!0,B.uDisplacementBias.value=C.parameters.displacementBias,B.uDisplacementScale.value=C.parameters.displacementScale),B.uDiffuseColor.value.setHex(q),B.uSpecularColor.value.setHex(V),B.uAmbientColor.value.setHex(n),B.uShininess.value=L,C.parameters.opacity&&(B.uOpacity.value=C.parameters.opacity),r=new THREE.ShaderMaterial({fragmentShader:G.fragmentShader,vertexShader:G.vertexShader,uniforms:B,lights:!0,fog:!0})):r=new THREE[C.type](C.parameters);r.name=I;z.materials[I]= +r}for(I in K.materials)if(C=K.materials[I],C.parameters.materials){M=[];for(q=0;qh.end&&(h.end=e);b||(b=g)}}a.firstAnimation=b}; +THREE.MorphAnimMesh.prototype.setAnimationLabel=function(a,b,c){this.geometry.animations||(this.geometry.animations={});this.geometry.animations[a]={start:b,end:c}};THREE.MorphAnimMesh.prototype.playAnimation=function(a,b){var c=this.geometry.animations[a];c?(this.setFrameRange(c.start,c.end),this.duration=1E3*((c.end-c.start)/b),this.time=0):console.warn("animation["+a+"] undefined")}; +THREE.MorphAnimMesh.prototype.updateAnimation=function(a){var b=this.duration/this.length;this.time+=this.direction*a;if(this.mirroredLoop){if(this.time>this.duration||0>this.time)this.direction*=-1,this.time>this.duration&&(this.time=this.duration,this.directionBackwards=!0),0>this.time&&(this.time=0,this.directionBackwards=!1)}else this.time%=this.duration,0>this.time&&(this.time+=this.duration);a=this.startKeyframe+THREE.Math.clamp(Math.floor(this.time/b),0,this.length-1);a!==this.currentKeyframe&& +(this.morphTargetInfluences[this.lastKeyframe]=0,this.morphTargetInfluences[this.currentKeyframe]=1,this.morphTargetInfluences[a]=0,this.lastKeyframe=this.currentKeyframe,this.currentKeyframe=a);b=this.time%b/b;this.directionBackwards&&(b=1-b);this.morphTargetInfluences[this.currentKeyframe]=b;this.morphTargetInfluences[this.lastKeyframe]=1-b}; +THREE.MorphAnimMesh.prototype.clone=function(a){void 0===a&&(a=new THREE.MorphAnimMesh(this.geometry,this.material));a.duration=this.duration;a.mirroredLoop=this.mirroredLoop;a.time=this.time;a.lastKeyframe=this.lastKeyframe;a.currentKeyframe=this.currentKeyframe;a.direction=this.direction;a.directionBackwards=this.directionBackwards;THREE.Mesh.prototype.clone.call(this,a);return a};THREE.Ribbon=function(a,b){THREE.Object3D.call(this);this.geometry=a;this.material=b};THREE.Ribbon.prototype=Object.create(THREE.Object3D.prototype);THREE.Ribbon.prototype.clone=function(a){void 0===a&&(a=new THREE.Ribbon(this.geometry,this.material));THREE.Object3D.prototype.clone.call(this,a);return a};THREE.LOD=function(){THREE.Object3D.call(this);this.objects=[]};THREE.LOD.prototype=Object.create(THREE.Object3D.prototype);THREE.LOD.prototype.addLevel=function(a,b){void 0===b&&(b=0);for(var b=Math.abs(b),c=0;c=this.objects[d].distance)this.objects[d-1].object.visible=!1,this.objects[d].object.visible=!0;else break;for(;dJ&&t.clearRect(ua.min.x|0,ua.min.y|0,ua.max.x-ua.min.x|0,ua.max.y-ua.min.y|0),0=h||(h*=f.intensity,c.add(Qa.multiplyScalar(h)))}else f instanceof THREE.PointLight&&(g=bb.getPositionFromMatrix(f.matrixWorld),h=b.dot(bb.subVectors(g,a).normalize()),0>=h||(h*=0==f.distance?1:1-Math.min(a.distanceTo(g)/f.distance,1),0!=h&&(h*=f.intensity,c.add(Qa.multiplyScalar(h)))))}}function z(a,d,e,f,g,h,k,i){m.info.render.vertices+= +3;m.info.render.faces++;b(i.opacity);c(i.blending);A=a.positionScreen.x;ca=a.positionScreen.y;ja=d.positionScreen.x;na=d.positionScreen.y;N=e.positionScreen.x;fa=e.positionScreen.y;y(A,ca,ja,na,N,fa);(i instanceof THREE.MeshLambertMaterial||i instanceof THREE.MeshPhongMaterial)&&null===i.map?(ha.copy(i.color),ia.copy(i.emissive),i.vertexColors===THREE.FaceColors&&ha.multiply(k.color),!1===i.wireframe&&i.shading==THREE.SmoothShading&&3==k.vertexNormalsLength?(ga.copy(tb),W.copy(tb),da.copy(tb),q(k.v1.positionWorld, +k.vertexNormalsModel[0],ga),q(k.v2.positionWorld,k.vertexNormalsModel[1],W),q(k.v3.positionWorld,k.vertexNormalsModel[2],da),ga.multiply(ha).add(ia),W.multiply(ha).add(ia),da.multiply(ha).add(ia),la.addColors(W,da).multiplyScalar(0.5),Aa=H(ga,W,da,la),J(A,ca,ja,na,N,fa,0,0,1,0,0,1,Aa)):(Z.copy(tb),q(k.centroidModel,k.normalModel,Z),Z.multiply(ha).add(ia),!0===i.wireframe?E(Z,i.wireframeLinewidth,i.wireframeLinecap,i.wireframeLinejoin):F(Z))):i instanceof THREE.MeshBasicMaterial||i instanceof THREE.MeshLambertMaterial|| +i instanceof THREE.MeshPhongMaterial?null!==i.map?i.map.mapping instanceof THREE.UVMapping&&(Sa=k.uvs[0],C(A,ca,ja,na,N,fa,Sa[f].x,Sa[f].y,Sa[g].x,Sa[g].y,Sa[h].x,Sa[h].y,i.map)):null!==i.envMap?i.envMap.mapping instanceof THREE.SphericalReflectionMapping&&(bb.copy(k.vertexNormalsModelView[f]),sb=0.5*bb.x+0.5,Nb=0.5*bb.y+0.5,bb.copy(k.vertexNormalsModelView[g]),Kb=0.5*bb.x+0.5,Ob=0.5*bb.y+0.5,bb.copy(k.vertexNormalsModelView[h]),Tb=0.5*bb.x+0.5,Ub=0.5*bb.y+0.5,C(A,ca,ja,na,N,fa,sb,Nb,Kb,Ob,Tb,Ub, +i.envMap)):(Z.copy(i.color),i.vertexColors===THREE.FaceColors&&Z.multiply(k.color),!0===i.wireframe?E(Z,i.wireframeLinewidth,i.wireframeLinecap,i.wireframeLinejoin):F(Z)):i instanceof THREE.MeshDepthMaterial?(Xa=n.near,Ra=n.far,ga.r=ga.g=ga.b=1-j(a.positionScreen.z*a.positionScreen.w,Xa,Ra),W.r=W.g=W.b=1-j(d.positionScreen.z*d.positionScreen.w,Xa,Ra),da.r=da.g=da.b=1-j(e.positionScreen.z*e.positionScreen.w,Xa,Ra),la.addColors(W,da).multiplyScalar(0.5),Aa=H(ga,W,da,la),J(A,ca,ja,na,N,fa,0,0,1,0,0, +1,Aa)):i instanceof THREE.MeshNormalMaterial&&(i.shading==THREE.FlatShading?(a=k.normalModelView,Z.setRGB(a.x,a.y,a.z).multiplyScalar(0.5).addScalar(0.5),!0===i.wireframe?E(Z,i.wireframeLinewidth,i.wireframeLinecap,i.wireframeLinejoin):F(Z)):i.shading==THREE.SmoothShading&&(a=k.vertexNormalsModelView[f],ga.setRGB(a.x,a.y,a.z).multiplyScalar(0.5).addScalar(0.5),a=k.vertexNormalsModelView[g],W.setRGB(a.x,a.y,a.z).multiplyScalar(0.5).addScalar(0.5),a=k.vertexNormalsModelView[h],da.setRGB(a.x,a.y,a.z).multiplyScalar(0.5).addScalar(0.5), +la.addColors(W,da).multiplyScalar(0.5),Aa=H(ga,W,da,la),J(A,ca,ja,na,N,fa,0,0,1,0,0,1,Aa)))}function y(a,b,c,d,e,f){t.beginPath();t.moveTo(a,b);t.lineTo(c,d);t.lineTo(e,f);t.closePath()}function B(a,b,c,d,e,f,g,h){t.beginPath();t.moveTo(a,b);t.lineTo(c,d);t.lineTo(e,f);t.lineTo(g,h);t.closePath()}function E(a,b,c,h){d(b);e(c);f(h);g(a.getStyle());t.stroke();Ja.expandByScalar(2*b)}function F(a){h(a.getStyle());t.fill()}function C(a,b,c,d,e,f,g,i,k,xa,j,l,p){if(!(p instanceof THREE.DataTexture||void 0=== +p.image||0==p.image.width)){if(!0===p.needsUpdate){var m=p.wrapS==THREE.RepeatWrapping,Ya=p.wrapT==THREE.RepeatWrapping;kb[p.id]=t.createPattern(p.image,!0===m&&!0===Ya?"repeat":!0===m&&!1===Ya?"repeat-x":!1===m&&!0===Ya?"repeat-y":"no-repeat");p.needsUpdate=!1}void 0===kb[p.id]?h("rgba(0,0,0,1)"):h(kb[p.id]);var m=p.offset.x/p.repeat.x,Ya=p.offset.y/p.repeat.y,n=p.image.width*p.repeat.x,q=p.image.height*p.repeat.y,g=(g+m)*n,i=(1-i+Ya)*q,c=c-a,d=d-b,e=e-a,f=f-b,k=(k+m)*n-g,xa=(1-xa+Ya)*q-i,j=(j+m)* +n-g,l=(1-l+Ya)*q-i,m=k*l-j*xa;0===m?(void 0===oa[p.id]&&(b=document.createElement("canvas"),b.width=p.image.width,b.height=p.image.height,b=b.getContext("2d"),b.drawImage(p.image,0,0),oa[p.id]=b.getImageData(0,0,p.image.width,p.image.height).data),b=oa[p.id],g=4*(Math.floor(g)+Math.floor(i)*p.image.width),Z.setRGB(b[g]/255,b[g+1]/255,b[g+2]/255),F(Z)):(m=1/m,p=(l*c-xa*e)*m,xa=(l*d-xa*f)*m,c=(k*e-j*c)*m,d=(k*f-j*d)*m,a=a-p*g-c*i,g=b-xa*g-d*i,t.save(),t.transform(p,xa,c,d,a,g),t.fill(),t.restore())}} +function J(a,b,c,d,e,f,g,h,i,k,xa,j,p){var m,l;m=p.width-1;l=p.height-1;g*=m;h*=l;c-=a;d-=b;e-=a;f-=b;i=i*m-g;k=k*l-h;xa=xa*m-g;j=j*l-h;l=1/(i*j-xa*k);m=(j*c-k*e)*l;k=(j*d-k*f)*l;c=(i*e-xa*c)*l;d=(i*f-xa*d)*l;a=a-m*g-c*h;b=b-k*g-d*h;t.save();t.transform(m,k,c,d,a,b);t.clip();t.drawImage(p,0,0);t.restore()}function H(a,b,c,d){Ua[0]=255*a.r|0;Ua[1]=255*a.g|0;Ua[2]=255*a.b|0;Ua[4]=255*b.r|0;Ua[5]=255*b.g|0;Ua[6]=255*b.b|0;Ua[8]=255*c.r|0;Ua[9]=255*c.g|0;Ua[10]=255*c.b|0;Ua[12]=255*d.r|0;Ua[13]=255*d.g| +0;Ua[14]=255*d.b|0;k.putImageData(Bb,0,0);Va.drawImage(Ab,0,0);return lb}function G(a,b){var c=b.x-a.x,d=b.y-a.y,e=c*c+d*d;0!==e&&(e=1/Math.sqrt(e),c*=e,d*=e,b.x+=c,b.y+=d,a.x-=c,a.y-=d)}if(!1===n instanceof THREE.Camera)console.error("THREE.CanvasRenderer.render: camera is not an instance of THREE.Camera.");else{!0===this.autoClear&&this.clear();t.setTransform(1,0,0,-1,u,x);m.info.render.vertices=0;m.info.render.faces=0;p=s.projectScene(a,n,this.sortObjects,this.sortElements);l=p.elements;r=p.lights; +tb.setRGB(0,0,0);Na.setRGB(0,0,0);ra.setRGB(0,0,0);for(var K=0,V=r.length;K>1,Pc=Pb.height>>1,Ya=L.scale.x*u,vb=L.scale.y*x,xa=Ya*Oc,mb=vb*Pc,Ja.min.set(P.x-xa,P.y-mb),Ja.max.set(P.x+xa,P.y+mb),!1===Ta.isIntersectionBox(Ja)? +Ja.makeEmpty():(t.save(),t.translate(P.x,P.y),t.rotate(-L.rotation),t.scale(Ya,-vb),t.translate(-Oc,-Pc),t.drawImage(Pb,0,0),t.restore())):U instanceof THREE.ParticleCanvasMaterial&&(xa=L.scale.x*u,mb=L.scale.y*x,Ja.min.set(P.x-xa,P.y-mb),Ja.max.set(P.x+xa,P.y+mb),!1===Ta.isIntersectionBox(Ja)?Ja.makeEmpty():(g(U.color.getStyle()),h(U.color.getStyle()),t.save(),t.translate(P.x,P.y),t.rotate(-L.rotation),t.scale(xa,mb),U.program(t),t.restore()))}else if(L instanceof THREE.RenderableLine){if(I=L.v1, +M=L.v2,I.positionScreen.x*=u,I.positionScreen.y*=x,M.positionScreen.x*=u,M.positionScreen.y*=x,Ja.setFromPoints([I.positionScreen,M.positionScreen]),!0===Ta.isIntersectionBox(Ja))if(P=I,xa=M,b(U.opacity),c(U.blending),t.beginPath(),t.moveTo(P.positionScreen.x,P.positionScreen.y),t.lineTo(xa.positionScreen.x,xa.positionScreen.y),U instanceof THREE.LineBasicMaterial){d(U.linewidth);e(U.linecap);f(U.linejoin);if(U.vertexColors!==THREE.VertexColors)g(U.color.getStyle());else if(mb=L.vertexColors[0].getStyle(), +L=L.vertexColors[1].getStyle(),mb===L)g(mb);else{try{var qc=t.createLinearGradient(P.positionScreen.x,P.positionScreen.y,xa.positionScreen.x,xa.positionScreen.y);qc.addColorStop(0,mb);qc.addColorStop(1,L)}catch(ed){qc=mb}g(qc)}t.stroke();Ja.expandByScalar(2*U.linewidth)}else U instanceof THREE.LineDashedMaterial&&(d(U.linewidth),e(U.linecap),f(U.linejoin),g(U.color.getStyle()),i(U.dashSize,U.gapSize),t.stroke(),Ja.expandByScalar(2*U.linewidth),i(null,null))}else if(L instanceof THREE.RenderableFace3){I= +L.v1;M=L.v2;R=L.v3;if(-1>I.positionScreen.z||1M.positionScreen.z||1R.positionScreen.z||1I.positionScreen.z||1M.positionScreen.z||1R.positionScreen.z||1ea.positionScreen.z||1 0\nuniform vec3 directionalLightColor[ MAX_DIR_LIGHTS ];\nuniform vec3 directionalLightDirection[ MAX_DIR_LIGHTS ];\n#endif\n#if MAX_HEMI_LIGHTS > 0\nuniform vec3 hemisphereLightSkyColor[ MAX_HEMI_LIGHTS ];\nuniform vec3 hemisphereLightGroundColor[ MAX_HEMI_LIGHTS ];\nuniform vec3 hemisphereLightDirection[ MAX_HEMI_LIGHTS ];\n#endif\n#if MAX_POINT_LIGHTS > 0\nuniform vec3 pointLightColor[ MAX_POINT_LIGHTS ];\nuniform vec3 pointLightPosition[ MAX_POINT_LIGHTS ];\nuniform float pointLightDistance[ MAX_POINT_LIGHTS ];\n#endif\n#if MAX_SPOT_LIGHTS > 0\nuniform vec3 spotLightColor[ MAX_SPOT_LIGHTS ];\nuniform vec3 spotLightPosition[ MAX_SPOT_LIGHTS ];\nuniform vec3 spotLightDirection[ MAX_SPOT_LIGHTS ];\nuniform float spotLightDistance[ MAX_SPOT_LIGHTS ];\nuniform float spotLightAngleCos[ MAX_SPOT_LIGHTS ];\nuniform float spotLightExponent[ MAX_SPOT_LIGHTS ];\n#endif\n#ifdef WRAP_AROUND\nuniform vec3 wrapRGB;\n#endif", +lights_lambert_vertex:"vLightFront = vec3( 0.0 );\n#ifdef DOUBLE_SIDED\nvLightBack = vec3( 0.0 );\n#endif\ntransformedNormal = normalize( transformedNormal );\n#if MAX_DIR_LIGHTS > 0\nfor( int i = 0; i < MAX_DIR_LIGHTS; i ++ ) {\nvec4 lDirection = viewMatrix * vec4( directionalLightDirection[ i ], 0.0 );\nvec3 dirVector = normalize( lDirection.xyz );\nfloat dotProduct = dot( transformedNormal, dirVector );\nvec3 directionalLightWeighting = vec3( max( dotProduct, 0.0 ) );\n#ifdef DOUBLE_SIDED\nvec3 directionalLightWeightingBack = vec3( max( -dotProduct, 0.0 ) );\n#ifdef WRAP_AROUND\nvec3 directionalLightWeightingHalfBack = vec3( max( -0.5 * dotProduct + 0.5, 0.0 ) );\n#endif\n#endif\n#ifdef WRAP_AROUND\nvec3 directionalLightWeightingHalf = vec3( max( 0.5 * dotProduct + 0.5, 0.0 ) );\ndirectionalLightWeighting = mix( directionalLightWeighting, directionalLightWeightingHalf, wrapRGB );\n#ifdef DOUBLE_SIDED\ndirectionalLightWeightingBack = mix( directionalLightWeightingBack, directionalLightWeightingHalfBack, wrapRGB );\n#endif\n#endif\nvLightFront += directionalLightColor[ i ] * directionalLightWeighting;\n#ifdef DOUBLE_SIDED\nvLightBack += directionalLightColor[ i ] * directionalLightWeightingBack;\n#endif\n}\n#endif\n#if MAX_POINT_LIGHTS > 0\nfor( int i = 0; i < MAX_POINT_LIGHTS; i ++ ) {\nvec4 lPosition = viewMatrix * vec4( pointLightPosition[ i ], 1.0 );\nvec3 lVector = lPosition.xyz - mvPosition.xyz;\nfloat lDistance = 1.0;\nif ( pointLightDistance[ i ] > 0.0 )\nlDistance = 1.0 - min( ( length( lVector ) / pointLightDistance[ i ] ), 1.0 );\nlVector = normalize( lVector );\nfloat dotProduct = dot( transformedNormal, lVector );\nvec3 pointLightWeighting = vec3( max( dotProduct, 0.0 ) );\n#ifdef DOUBLE_SIDED\nvec3 pointLightWeightingBack = vec3( max( -dotProduct, 0.0 ) );\n#ifdef WRAP_AROUND\nvec3 pointLightWeightingHalfBack = vec3( max( -0.5 * dotProduct + 0.5, 0.0 ) );\n#endif\n#endif\n#ifdef WRAP_AROUND\nvec3 pointLightWeightingHalf = vec3( max( 0.5 * dotProduct + 0.5, 0.0 ) );\npointLightWeighting = mix( pointLightWeighting, pointLightWeightingHalf, wrapRGB );\n#ifdef DOUBLE_SIDED\npointLightWeightingBack = mix( pointLightWeightingBack, pointLightWeightingHalfBack, wrapRGB );\n#endif\n#endif\nvLightFront += pointLightColor[ i ] * pointLightWeighting * lDistance;\n#ifdef DOUBLE_SIDED\nvLightBack += pointLightColor[ i ] * pointLightWeightingBack * lDistance;\n#endif\n}\n#endif\n#if MAX_SPOT_LIGHTS > 0\nfor( int i = 0; i < MAX_SPOT_LIGHTS; i ++ ) {\nvec4 lPosition = viewMatrix * vec4( spotLightPosition[ i ], 1.0 );\nvec3 lVector = lPosition.xyz - mvPosition.xyz;\nfloat spotEffect = dot( spotLightDirection[ i ], normalize( spotLightPosition[ i ] - worldPosition.xyz ) );\nif ( spotEffect > spotLightAngleCos[ i ] ) {\nspotEffect = max( pow( spotEffect, spotLightExponent[ i ] ), 0.0 );\nfloat lDistance = 1.0;\nif ( spotLightDistance[ i ] > 0.0 )\nlDistance = 1.0 - min( ( length( lVector ) / spotLightDistance[ i ] ), 1.0 );\nlVector = normalize( lVector );\nfloat dotProduct = dot( transformedNormal, lVector );\nvec3 spotLightWeighting = vec3( max( dotProduct, 0.0 ) );\n#ifdef DOUBLE_SIDED\nvec3 spotLightWeightingBack = vec3( max( -dotProduct, 0.0 ) );\n#ifdef WRAP_AROUND\nvec3 spotLightWeightingHalfBack = vec3( max( -0.5 * dotProduct + 0.5, 0.0 ) );\n#endif\n#endif\n#ifdef WRAP_AROUND\nvec3 spotLightWeightingHalf = vec3( max( 0.5 * dotProduct + 0.5, 0.0 ) );\nspotLightWeighting = mix( spotLightWeighting, spotLightWeightingHalf, wrapRGB );\n#ifdef DOUBLE_SIDED\nspotLightWeightingBack = mix( spotLightWeightingBack, spotLightWeightingHalfBack, wrapRGB );\n#endif\n#endif\nvLightFront += spotLightColor[ i ] * spotLightWeighting * lDistance * spotEffect;\n#ifdef DOUBLE_SIDED\nvLightBack += spotLightColor[ i ] * spotLightWeightingBack * lDistance * spotEffect;\n#endif\n}\n}\n#endif\n#if MAX_HEMI_LIGHTS > 0\nfor( int i = 0; i < MAX_HEMI_LIGHTS; i ++ ) {\nvec4 lDirection = viewMatrix * vec4( hemisphereLightDirection[ i ], 0.0 );\nvec3 lVector = normalize( lDirection.xyz );\nfloat dotProduct = dot( transformedNormal, lVector );\nfloat hemiDiffuseWeight = 0.5 * dotProduct + 0.5;\nfloat hemiDiffuseWeightBack = -0.5 * dotProduct + 0.5;\nvLightFront += mix( hemisphereLightGroundColor[ i ], hemisphereLightSkyColor[ i ], hemiDiffuseWeight );\n#ifdef DOUBLE_SIDED\nvLightBack += mix( hemisphereLightGroundColor[ i ], hemisphereLightSkyColor[ i ], hemiDiffuseWeightBack );\n#endif\n}\n#endif\nvLightFront = vLightFront * diffuse + ambient * ambientLightColor + emissive;\n#ifdef DOUBLE_SIDED\nvLightBack = vLightBack * diffuse + ambient * ambientLightColor + emissive;\n#endif", +lights_phong_pars_vertex:"#ifndef PHONG_PER_PIXEL\n#if MAX_POINT_LIGHTS > 0\nuniform vec3 pointLightPosition[ MAX_POINT_LIGHTS ];\nuniform float pointLightDistance[ MAX_POINT_LIGHTS ];\nvarying vec4 vPointLight[ MAX_POINT_LIGHTS ];\n#endif\n#if MAX_SPOT_LIGHTS > 0\nuniform vec3 spotLightPosition[ MAX_SPOT_LIGHTS ];\nuniform float spotLightDistance[ MAX_SPOT_LIGHTS ];\nvarying vec4 vSpotLight[ MAX_SPOT_LIGHTS ];\n#endif\n#endif\n#if MAX_SPOT_LIGHTS > 0 || defined( USE_BUMPMAP )\nvarying vec3 vWorldPosition;\n#endif", +lights_phong_vertex:"#ifndef PHONG_PER_PIXEL\n#if MAX_POINT_LIGHTS > 0\nfor( int i = 0; i < MAX_POINT_LIGHTS; i ++ ) {\nvec4 lPosition = viewMatrix * vec4( pointLightPosition[ i ], 1.0 );\nvec3 lVector = lPosition.xyz - mvPosition.xyz;\nfloat lDistance = 1.0;\nif ( pointLightDistance[ i ] > 0.0 )\nlDistance = 1.0 - min( ( length( lVector ) / pointLightDistance[ i ] ), 1.0 );\nvPointLight[ i ] = vec4( lVector, lDistance );\n}\n#endif\n#if MAX_SPOT_LIGHTS > 0\nfor( int i = 0; i < MAX_SPOT_LIGHTS; i ++ ) {\nvec4 lPosition = viewMatrix * vec4( spotLightPosition[ i ], 1.0 );\nvec3 lVector = lPosition.xyz - mvPosition.xyz;\nfloat lDistance = 1.0;\nif ( spotLightDistance[ i ] > 0.0 )\nlDistance = 1.0 - min( ( length( lVector ) / spotLightDistance[ i ] ), 1.0 );\nvSpotLight[ i ] = vec4( lVector, lDistance );\n}\n#endif\n#endif\n#if MAX_SPOT_LIGHTS > 0 || defined( USE_BUMPMAP )\nvWorldPosition = worldPosition.xyz;\n#endif", +lights_phong_pars_fragment:"uniform vec3 ambientLightColor;\n#if MAX_DIR_LIGHTS > 0\nuniform vec3 directionalLightColor[ MAX_DIR_LIGHTS ];\nuniform vec3 directionalLightDirection[ MAX_DIR_LIGHTS ];\n#endif\n#if MAX_HEMI_LIGHTS > 0\nuniform vec3 hemisphereLightSkyColor[ MAX_HEMI_LIGHTS ];\nuniform vec3 hemisphereLightGroundColor[ MAX_HEMI_LIGHTS ];\nuniform vec3 hemisphereLightDirection[ MAX_HEMI_LIGHTS ];\n#endif\n#if MAX_POINT_LIGHTS > 0\nuniform vec3 pointLightColor[ MAX_POINT_LIGHTS ];\n#ifdef PHONG_PER_PIXEL\nuniform vec3 pointLightPosition[ MAX_POINT_LIGHTS ];\nuniform float pointLightDistance[ MAX_POINT_LIGHTS ];\n#else\nvarying vec4 vPointLight[ MAX_POINT_LIGHTS ];\n#endif\n#endif\n#if MAX_SPOT_LIGHTS > 0\nuniform vec3 spotLightColor[ MAX_SPOT_LIGHTS ];\nuniform vec3 spotLightPosition[ MAX_SPOT_LIGHTS ];\nuniform vec3 spotLightDirection[ MAX_SPOT_LIGHTS ];\nuniform float spotLightAngleCos[ MAX_SPOT_LIGHTS ];\nuniform float spotLightExponent[ MAX_SPOT_LIGHTS ];\n#ifdef PHONG_PER_PIXEL\nuniform float spotLightDistance[ MAX_SPOT_LIGHTS ];\n#else\nvarying vec4 vSpotLight[ MAX_SPOT_LIGHTS ];\n#endif\n#endif\n#if MAX_SPOT_LIGHTS > 0 || defined( USE_BUMPMAP )\nvarying vec3 vWorldPosition;\n#endif\n#ifdef WRAP_AROUND\nuniform vec3 wrapRGB;\n#endif\nvarying vec3 vViewPosition;\nvarying vec3 vNormal;", +lights_phong_fragment:"vec3 normal = normalize( vNormal );\nvec3 viewPosition = normalize( vViewPosition );\n#ifdef DOUBLE_SIDED\nnormal = normal * ( -1.0 + 2.0 * float( gl_FrontFacing ) );\n#endif\n#ifdef USE_NORMALMAP\nnormal = perturbNormal2Arb( -vViewPosition, normal );\n#elif defined( USE_BUMPMAP )\nnormal = perturbNormalArb( -vViewPosition, normal, dHdxy_fwd() );\n#endif\n#if MAX_POINT_LIGHTS > 0\nvec3 pointDiffuse = vec3( 0.0 );\nvec3 pointSpecular = vec3( 0.0 );\nfor ( int i = 0; i < MAX_POINT_LIGHTS; i ++ ) {\n#ifdef PHONG_PER_PIXEL\nvec4 lPosition = viewMatrix * vec4( pointLightPosition[ i ], 1.0 );\nvec3 lVector = lPosition.xyz + vViewPosition.xyz;\nfloat lDistance = 1.0;\nif ( pointLightDistance[ i ] > 0.0 )\nlDistance = 1.0 - min( ( length( lVector ) / pointLightDistance[ i ] ), 1.0 );\nlVector = normalize( lVector );\n#else\nvec3 lVector = normalize( vPointLight[ i ].xyz );\nfloat lDistance = vPointLight[ i ].w;\n#endif\nfloat dotProduct = dot( normal, lVector );\n#ifdef WRAP_AROUND\nfloat pointDiffuseWeightFull = max( dotProduct, 0.0 );\nfloat pointDiffuseWeightHalf = max( 0.5 * dotProduct + 0.5, 0.0 );\nvec3 pointDiffuseWeight = mix( vec3 ( pointDiffuseWeightFull ), vec3( pointDiffuseWeightHalf ), wrapRGB );\n#else\nfloat pointDiffuseWeight = max( dotProduct, 0.0 );\n#endif\npointDiffuse += diffuse * pointLightColor[ i ] * pointDiffuseWeight * lDistance;\nvec3 pointHalfVector = normalize( lVector + viewPosition );\nfloat pointDotNormalHalf = max( dot( normal, pointHalfVector ), 0.0 );\nfloat pointSpecularWeight = specularStrength * max( pow( pointDotNormalHalf, shininess ), 0.0 );\n#ifdef PHYSICALLY_BASED_SHADING\nfloat specularNormalization = ( shininess + 2.0001 ) / 8.0;\nvec3 schlick = specular + vec3( 1.0 - specular ) * pow( 1.0 - dot( lVector, pointHalfVector ), 5.0 );\npointSpecular += schlick * pointLightColor[ i ] * pointSpecularWeight * pointDiffuseWeight * lDistance * specularNormalization;\n#else\npointSpecular += specular * pointLightColor[ i ] * pointSpecularWeight * pointDiffuseWeight * lDistance;\n#endif\n}\n#endif\n#if MAX_SPOT_LIGHTS > 0\nvec3 spotDiffuse = vec3( 0.0 );\nvec3 spotSpecular = vec3( 0.0 );\nfor ( int i = 0; i < MAX_SPOT_LIGHTS; i ++ ) {\n#ifdef PHONG_PER_PIXEL\nvec4 lPosition = viewMatrix * vec4( spotLightPosition[ i ], 1.0 );\nvec3 lVector = lPosition.xyz + vViewPosition.xyz;\nfloat lDistance = 1.0;\nif ( spotLightDistance[ i ] > 0.0 )\nlDistance = 1.0 - min( ( length( lVector ) / spotLightDistance[ i ] ), 1.0 );\nlVector = normalize( lVector );\n#else\nvec3 lVector = normalize( vSpotLight[ i ].xyz );\nfloat lDistance = vSpotLight[ i ].w;\n#endif\nfloat spotEffect = dot( spotLightDirection[ i ], normalize( spotLightPosition[ i ] - vWorldPosition ) );\nif ( spotEffect > spotLightAngleCos[ i ] ) {\nspotEffect = max( pow( spotEffect, spotLightExponent[ i ] ), 0.0 );\nfloat dotProduct = dot( normal, lVector );\n#ifdef WRAP_AROUND\nfloat spotDiffuseWeightFull = max( dotProduct, 0.0 );\nfloat spotDiffuseWeightHalf = max( 0.5 * dotProduct + 0.5, 0.0 );\nvec3 spotDiffuseWeight = mix( vec3 ( spotDiffuseWeightFull ), vec3( spotDiffuseWeightHalf ), wrapRGB );\n#else\nfloat spotDiffuseWeight = max( dotProduct, 0.0 );\n#endif\nspotDiffuse += diffuse * spotLightColor[ i ] * spotDiffuseWeight * lDistance * spotEffect;\nvec3 spotHalfVector = normalize( lVector + viewPosition );\nfloat spotDotNormalHalf = max( dot( normal, spotHalfVector ), 0.0 );\nfloat spotSpecularWeight = specularStrength * max( pow( spotDotNormalHalf, shininess ), 0.0 );\n#ifdef PHYSICALLY_BASED_SHADING\nfloat specularNormalization = ( shininess + 2.0001 ) / 8.0;\nvec3 schlick = specular + vec3( 1.0 - specular ) * pow( 1.0 - dot( lVector, spotHalfVector ), 5.0 );\nspotSpecular += schlick * spotLightColor[ i ] * spotSpecularWeight * spotDiffuseWeight * lDistance * specularNormalization * spotEffect;\n#else\nspotSpecular += specular * spotLightColor[ i ] * spotSpecularWeight * spotDiffuseWeight * lDistance * spotEffect;\n#endif\n}\n}\n#endif\n#if MAX_DIR_LIGHTS > 0\nvec3 dirDiffuse = vec3( 0.0 );\nvec3 dirSpecular = vec3( 0.0 );\nfor( int i = 0; i < MAX_DIR_LIGHTS; i ++ ) {\nvec4 lDirection = viewMatrix * vec4( directionalLightDirection[ i ], 0.0 );\nvec3 dirVector = normalize( lDirection.xyz );\nfloat dotProduct = dot( normal, dirVector );\n#ifdef WRAP_AROUND\nfloat dirDiffuseWeightFull = max( dotProduct, 0.0 );\nfloat dirDiffuseWeightHalf = max( 0.5 * dotProduct + 0.5, 0.0 );\nvec3 dirDiffuseWeight = mix( vec3( dirDiffuseWeightFull ), vec3( dirDiffuseWeightHalf ), wrapRGB );\n#else\nfloat dirDiffuseWeight = max( dotProduct, 0.0 );\n#endif\ndirDiffuse += diffuse * directionalLightColor[ i ] * dirDiffuseWeight;\nvec3 dirHalfVector = normalize( dirVector + viewPosition );\nfloat dirDotNormalHalf = max( dot( normal, dirHalfVector ), 0.0 );\nfloat dirSpecularWeight = specularStrength * max( pow( dirDotNormalHalf, shininess ), 0.0 );\n#ifdef PHYSICALLY_BASED_SHADING\nfloat specularNormalization = ( shininess + 2.0001 ) / 8.0;\nvec3 schlick = specular + vec3( 1.0 - specular ) * pow( 1.0 - dot( dirVector, dirHalfVector ), 5.0 );\ndirSpecular += schlick * directionalLightColor[ i ] * dirSpecularWeight * dirDiffuseWeight * specularNormalization;\n#else\ndirSpecular += specular * directionalLightColor[ i ] * dirSpecularWeight * dirDiffuseWeight;\n#endif\n}\n#endif\n#if MAX_HEMI_LIGHTS > 0\nvec3 hemiDiffuse = vec3( 0.0 );\nvec3 hemiSpecular = vec3( 0.0 );\nfor( int i = 0; i < MAX_HEMI_LIGHTS; i ++ ) {\nvec4 lDirection = viewMatrix * vec4( hemisphereLightDirection[ i ], 0.0 );\nvec3 lVector = normalize( lDirection.xyz );\nfloat dotProduct = dot( normal, lVector );\nfloat hemiDiffuseWeight = 0.5 * dotProduct + 0.5;\nvec3 hemiColor = mix( hemisphereLightGroundColor[ i ], hemisphereLightSkyColor[ i ], hemiDiffuseWeight );\nhemiDiffuse += diffuse * hemiColor;\nvec3 hemiHalfVectorSky = normalize( lVector + viewPosition );\nfloat hemiDotNormalHalfSky = 0.5 * dot( normal, hemiHalfVectorSky ) + 0.5;\nfloat hemiSpecularWeightSky = specularStrength * max( pow( hemiDotNormalHalfSky, shininess ), 0.0 );\nvec3 lVectorGround = -lVector;\nvec3 hemiHalfVectorGround = normalize( lVectorGround + viewPosition );\nfloat hemiDotNormalHalfGround = 0.5 * dot( normal, hemiHalfVectorGround ) + 0.5;\nfloat hemiSpecularWeightGround = specularStrength * max( pow( hemiDotNormalHalfGround, shininess ), 0.0 );\n#ifdef PHYSICALLY_BASED_SHADING\nfloat dotProductGround = dot( normal, lVectorGround );\nfloat specularNormalization = ( shininess + 2.0001 ) / 8.0;\nvec3 schlickSky = specular + vec3( 1.0 - specular ) * pow( 1.0 - dot( lVector, hemiHalfVectorSky ), 5.0 );\nvec3 schlickGround = specular + vec3( 1.0 - specular ) * pow( 1.0 - dot( lVectorGround, hemiHalfVectorGround ), 5.0 );\nhemiSpecular += hemiColor * specularNormalization * ( schlickSky * hemiSpecularWeightSky * max( dotProduct, 0.0 ) + schlickGround * hemiSpecularWeightGround * max( dotProductGround, 0.0 ) );\n#else\nhemiSpecular += specular * hemiColor * ( hemiSpecularWeightSky + hemiSpecularWeightGround ) * hemiDiffuseWeight;\n#endif\n}\n#endif\nvec3 totalDiffuse = vec3( 0.0 );\nvec3 totalSpecular = vec3( 0.0 );\n#if MAX_DIR_LIGHTS > 0\ntotalDiffuse += dirDiffuse;\ntotalSpecular += dirSpecular;\n#endif\n#if MAX_HEMI_LIGHTS > 0\ntotalDiffuse += hemiDiffuse;\ntotalSpecular += hemiSpecular;\n#endif\n#if MAX_POINT_LIGHTS > 0\ntotalDiffuse += pointDiffuse;\ntotalSpecular += pointSpecular;\n#endif\n#if MAX_SPOT_LIGHTS > 0\ntotalDiffuse += spotDiffuse;\ntotalSpecular += spotSpecular;\n#endif\n#ifdef METAL\ngl_FragColor.xyz = gl_FragColor.xyz * ( emissive + totalDiffuse + ambientLightColor * ambient + totalSpecular );\n#else\ngl_FragColor.xyz = gl_FragColor.xyz * ( emissive + totalDiffuse + ambientLightColor * ambient ) + totalSpecular;\n#endif", +color_pars_fragment:"#ifdef USE_COLOR\nvarying vec3 vColor;\n#endif",color_fragment:"#ifdef USE_COLOR\ngl_FragColor = gl_FragColor * vec4( vColor, opacity );\n#endif",color_pars_vertex:"#ifdef USE_COLOR\nvarying vec3 vColor;\n#endif",color_vertex:"#ifdef USE_COLOR\n#ifdef GAMMA_INPUT\nvColor = color * color;\n#else\nvColor = color;\n#endif\n#endif",skinning_pars_vertex:"#ifdef USE_SKINNING\n#ifdef BONE_TEXTURE\nuniform sampler2D boneTexture;\nmat4 getBoneMatrix( const in float i ) {\nfloat j = i * 4.0;\nfloat x = mod( j, N_BONE_PIXEL_X );\nfloat y = floor( j / N_BONE_PIXEL_X );\nconst float dx = 1.0 / N_BONE_PIXEL_X;\nconst float dy = 1.0 / N_BONE_PIXEL_Y;\ny = dy * ( y + 0.5 );\nvec4 v1 = texture2D( boneTexture, vec2( dx * ( x + 0.5 ), y ) );\nvec4 v2 = texture2D( boneTexture, vec2( dx * ( x + 1.5 ), y ) );\nvec4 v3 = texture2D( boneTexture, vec2( dx * ( x + 2.5 ), y ) );\nvec4 v4 = texture2D( boneTexture, vec2( dx * ( x + 3.5 ), y ) );\nmat4 bone = mat4( v1, v2, v3, v4 );\nreturn bone;\n}\n#else\nuniform mat4 boneGlobalMatrices[ MAX_BONES ];\nmat4 getBoneMatrix( const in float i ) {\nmat4 bone = boneGlobalMatrices[ int(i) ];\nreturn bone;\n}\n#endif\n#endif", +skinbase_vertex:"#ifdef USE_SKINNING\nmat4 boneMatX = getBoneMatrix( skinIndex.x );\nmat4 boneMatY = getBoneMatrix( skinIndex.y );\n#endif",skinning_vertex:"#ifdef USE_SKINNING\n#ifdef USE_MORPHTARGETS\nvec4 skinVertex = vec4( morphed, 1.0 );\n#else\nvec4 skinVertex = vec4( position, 1.0 );\n#endif\nvec4 skinned = boneMatX * skinVertex * skinWeight.x;\nskinned \t += boneMatY * skinVertex * skinWeight.y;\n#endif",morphtarget_pars_vertex:"#ifdef USE_MORPHTARGETS\n#ifndef USE_MORPHNORMALS\nuniform float morphTargetInfluences[ 8 ];\n#else\nuniform float morphTargetInfluences[ 4 ];\n#endif\n#endif", +morphtarget_vertex:"#ifdef USE_MORPHTARGETS\nvec3 morphed = vec3( 0.0 );\nmorphed += ( morphTarget0 - position ) * morphTargetInfluences[ 0 ];\nmorphed += ( morphTarget1 - position ) * morphTargetInfluences[ 1 ];\nmorphed += ( morphTarget2 - position ) * morphTargetInfluences[ 2 ];\nmorphed += ( morphTarget3 - position ) * morphTargetInfluences[ 3 ];\n#ifndef USE_MORPHNORMALS\nmorphed += ( morphTarget4 - position ) * morphTargetInfluences[ 4 ];\nmorphed += ( morphTarget5 - position ) * morphTargetInfluences[ 5 ];\nmorphed += ( morphTarget6 - position ) * morphTargetInfluences[ 6 ];\nmorphed += ( morphTarget7 - position ) * morphTargetInfluences[ 7 ];\n#endif\nmorphed += position;\n#endif", +default_vertex:"vec4 mvPosition;\n#ifdef USE_SKINNING\nmvPosition = modelViewMatrix * skinned;\n#endif\n#if !defined( USE_SKINNING ) && defined( USE_MORPHTARGETS )\nmvPosition = modelViewMatrix * vec4( morphed, 1.0 );\n#endif\n#if !defined( USE_SKINNING ) && ! defined( USE_MORPHTARGETS )\nmvPosition = modelViewMatrix * vec4( position, 1.0 );\n#endif\ngl_Position = projectionMatrix * mvPosition;",morphnormal_vertex:"#ifdef USE_MORPHNORMALS\nvec3 morphedNormal = vec3( 0.0 );\nmorphedNormal += ( morphNormal0 - normal ) * morphTargetInfluences[ 0 ];\nmorphedNormal += ( morphNormal1 - normal ) * morphTargetInfluences[ 1 ];\nmorphedNormal += ( morphNormal2 - normal ) * morphTargetInfluences[ 2 ];\nmorphedNormal += ( morphNormal3 - normal ) * morphTargetInfluences[ 3 ];\nmorphedNormal += normal;\n#endif", +skinnormal_vertex:"#ifdef USE_SKINNING\nmat4 skinMatrix = skinWeight.x * boneMatX;\nskinMatrix \t+= skinWeight.y * boneMatY;\n#ifdef USE_MORPHNORMALS\nvec4 skinnedNormal = skinMatrix * vec4( morphedNormal, 0.0 );\n#else\nvec4 skinnedNormal = skinMatrix * vec4( normal, 0.0 );\n#endif\n#endif",defaultnormal_vertex:"vec3 objectNormal;\n#ifdef USE_SKINNING\nobjectNormal = skinnedNormal.xyz;\n#endif\n#if !defined( USE_SKINNING ) && defined( USE_MORPHNORMALS )\nobjectNormal = morphedNormal;\n#endif\n#if !defined( USE_SKINNING ) && ! defined( USE_MORPHNORMALS )\nobjectNormal = normal;\n#endif\n#ifdef FLIP_SIDED\nobjectNormal = -objectNormal;\n#endif\nvec3 transformedNormal = normalMatrix * objectNormal;", +shadowmap_pars_fragment:"#ifdef USE_SHADOWMAP\nuniform sampler2D shadowMap[ MAX_SHADOWS ];\nuniform vec2 shadowMapSize[ MAX_SHADOWS ];\nuniform float shadowDarkness[ MAX_SHADOWS ];\nuniform float shadowBias[ MAX_SHADOWS ];\nvarying vec4 vShadowCoord[ MAX_SHADOWS ];\nfloat unpackDepth( const in vec4 rgba_depth ) {\nconst vec4 bit_shift = vec4( 1.0 / ( 256.0 * 256.0 * 256.0 ), 1.0 / ( 256.0 * 256.0 ), 1.0 / 256.0, 1.0 );\nfloat depth = dot( rgba_depth, bit_shift );\nreturn depth;\n}\n#endif",shadowmap_fragment:"#ifdef USE_SHADOWMAP\n#ifdef SHADOWMAP_DEBUG\nvec3 frustumColors[3];\nfrustumColors[0] = vec3( 1.0, 0.5, 0.0 );\nfrustumColors[1] = vec3( 0.0, 1.0, 0.8 );\nfrustumColors[2] = vec3( 0.0, 0.5, 1.0 );\n#endif\n#ifdef SHADOWMAP_CASCADE\nint inFrustumCount = 0;\n#endif\nfloat fDepth;\nvec3 shadowColor = vec3( 1.0 );\nfor( int i = 0; i < MAX_SHADOWS; i ++ ) {\nvec3 shadowCoord = vShadowCoord[ i ].xyz / vShadowCoord[ i ].w;\nbvec4 inFrustumVec = bvec4 ( shadowCoord.x >= 0.0, shadowCoord.x <= 1.0, shadowCoord.y >= 0.0, shadowCoord.y <= 1.0 );\nbool inFrustum = all( inFrustumVec );\n#ifdef SHADOWMAP_CASCADE\ninFrustumCount += int( inFrustum );\nbvec3 frustumTestVec = bvec3( inFrustum, inFrustumCount == 1, shadowCoord.z <= 1.0 );\n#else\nbvec2 frustumTestVec = bvec2( inFrustum, shadowCoord.z <= 1.0 );\n#endif\nbool frustumTest = all( frustumTestVec );\nif ( frustumTest ) {\nshadowCoord.z += shadowBias[ i ];\n#if defined( SHADOWMAP_TYPE_PCF )\nfloat shadow = 0.0;\nconst float shadowDelta = 1.0 / 9.0;\nfloat xPixelOffset = 1.0 / shadowMapSize[ i ].x;\nfloat yPixelOffset = 1.0 / shadowMapSize[ i ].y;\nfloat dx0 = -1.25 * xPixelOffset;\nfloat dy0 = -1.25 * yPixelOffset;\nfloat dx1 = 1.25 * xPixelOffset;\nfloat dy1 = 1.25 * yPixelOffset;\nfDepth = unpackDepth( texture2D( shadowMap[ i ], shadowCoord.xy + vec2( dx0, dy0 ) ) );\nif ( fDepth < shadowCoord.z ) shadow += shadowDelta;\nfDepth = unpackDepth( texture2D( shadowMap[ i ], shadowCoord.xy + vec2( 0.0, dy0 ) ) );\nif ( fDepth < shadowCoord.z ) shadow += shadowDelta;\nfDepth = unpackDepth( texture2D( shadowMap[ i ], shadowCoord.xy + vec2( dx1, dy0 ) ) );\nif ( fDepth < shadowCoord.z ) shadow += shadowDelta;\nfDepth = unpackDepth( texture2D( shadowMap[ i ], shadowCoord.xy + vec2( dx0, 0.0 ) ) );\nif ( fDepth < shadowCoord.z ) shadow += shadowDelta;\nfDepth = unpackDepth( texture2D( shadowMap[ i ], shadowCoord.xy ) );\nif ( fDepth < shadowCoord.z ) shadow += shadowDelta;\nfDepth = unpackDepth( texture2D( shadowMap[ i ], shadowCoord.xy + vec2( dx1, 0.0 ) ) );\nif ( fDepth < shadowCoord.z ) shadow += shadowDelta;\nfDepth = unpackDepth( texture2D( shadowMap[ i ], shadowCoord.xy + vec2( dx0, dy1 ) ) );\nif ( fDepth < shadowCoord.z ) shadow += shadowDelta;\nfDepth = unpackDepth( texture2D( shadowMap[ i ], shadowCoord.xy + vec2( 0.0, dy1 ) ) );\nif ( fDepth < shadowCoord.z ) shadow += shadowDelta;\nfDepth = unpackDepth( texture2D( shadowMap[ i ], shadowCoord.xy + vec2( dx1, dy1 ) ) );\nif ( fDepth < shadowCoord.z ) shadow += shadowDelta;\nshadowColor = shadowColor * vec3( ( 1.0 - shadowDarkness[ i ] * shadow ) );\n#elif defined( SHADOWMAP_TYPE_PCF_SOFT )\nfloat shadow = 0.0;\nfloat xPixelOffset = 1.0 / shadowMapSize[ i ].x;\nfloat yPixelOffset = 1.0 / shadowMapSize[ i ].y;\nfloat dx0 = -1.0 * xPixelOffset;\nfloat dy0 = -1.0 * yPixelOffset;\nfloat dx1 = 1.0 * xPixelOffset;\nfloat dy1 = 1.0 * yPixelOffset;\nmat3 shadowKernel;\nmat3 depthKernel;\ndepthKernel[0][0] = unpackDepth( texture2D( shadowMap[ i ], shadowCoord.xy + vec2( dx0, dy0 ) ) );\ndepthKernel[0][1] = unpackDepth( texture2D( shadowMap[ i ], shadowCoord.xy + vec2( dx0, 0.0 ) ) );\ndepthKernel[0][2] = unpackDepth( texture2D( shadowMap[ i ], shadowCoord.xy + vec2( dx0, dy1 ) ) );\ndepthKernel[1][0] = unpackDepth( texture2D( shadowMap[ i ], shadowCoord.xy + vec2( 0.0, dy0 ) ) );\ndepthKernel[1][1] = unpackDepth( texture2D( shadowMap[ i ], shadowCoord.xy ) );\ndepthKernel[1][2] = unpackDepth( texture2D( shadowMap[ i ], shadowCoord.xy + vec2( 0.0, dy1 ) ) );\ndepthKernel[2][0] = unpackDepth( texture2D( shadowMap[ i ], shadowCoord.xy + vec2( dx1, dy0 ) ) );\ndepthKernel[2][1] = unpackDepth( texture2D( shadowMap[ i ], shadowCoord.xy + vec2( dx1, 0.0 ) ) );\ndepthKernel[2][2] = unpackDepth( texture2D( shadowMap[ i ], shadowCoord.xy + vec2( dx1, dy1 ) ) );\nvec3 shadowZ = vec3( shadowCoord.z );\nshadowKernel[0] = vec3(lessThan(depthKernel[0], shadowZ ));\nshadowKernel[0] *= vec3(0.25);\nshadowKernel[1] = vec3(lessThan(depthKernel[1], shadowZ ));\nshadowKernel[1] *= vec3(0.25);\nshadowKernel[2] = vec3(lessThan(depthKernel[2], shadowZ ));\nshadowKernel[2] *= vec3(0.25);\nvec2 fractionalCoord = 1.0 - fract( shadowCoord.xy * shadowMapSize[i].xy );\nshadowKernel[0] = mix( shadowKernel[1], shadowKernel[0], fractionalCoord.x );\nshadowKernel[1] = mix( shadowKernel[2], shadowKernel[1], fractionalCoord.x );\nvec4 shadowValues;\nshadowValues.x = mix( shadowKernel[0][1], shadowKernel[0][0], fractionalCoord.y );\nshadowValues.y = mix( shadowKernel[0][2], shadowKernel[0][1], fractionalCoord.y );\nshadowValues.z = mix( shadowKernel[1][1], shadowKernel[1][0], fractionalCoord.y );\nshadowValues.w = mix( shadowKernel[1][2], shadowKernel[1][1], fractionalCoord.y );\nshadow = dot( shadowValues, vec4( 1.0 ) );\nshadowColor = shadowColor * vec3( ( 1.0 - shadowDarkness[ i ] * shadow ) );\n#else\nvec4 rgbaDepth = texture2D( shadowMap[ i ], shadowCoord.xy );\nfloat fDepth = unpackDepth( rgbaDepth );\nif ( fDepth < shadowCoord.z )\nshadowColor = shadowColor * vec3( 1.0 - shadowDarkness[ i ] );\n#endif\n}\n#ifdef SHADOWMAP_DEBUG\n#ifdef SHADOWMAP_CASCADE\nif ( inFrustum && inFrustumCount == 1 ) gl_FragColor.xyz *= frustumColors[ i ];\n#else\nif ( inFrustum ) gl_FragColor.xyz *= frustumColors[ i ];\n#endif\n#endif\n}\n#ifdef GAMMA_OUTPUT\nshadowColor *= shadowColor;\n#endif\ngl_FragColor.xyz = gl_FragColor.xyz * shadowColor;\n#endif", +shadowmap_pars_vertex:"#ifdef USE_SHADOWMAP\nvarying vec4 vShadowCoord[ MAX_SHADOWS ];\nuniform mat4 shadowMatrix[ MAX_SHADOWS ];\n#endif",shadowmap_vertex:"#ifdef USE_SHADOWMAP\nfor( int i = 0; i < MAX_SHADOWS; i ++ ) {\nvShadowCoord[ i ] = shadowMatrix[ i ] * worldPosition;\n}\n#endif",alphatest_fragment:"#ifdef ALPHATEST\nif ( gl_FragColor.a < ALPHATEST ) discard;\n#endif",linear_to_gamma_fragment:"#ifdef GAMMA_OUTPUT\ngl_FragColor.xyz = sqrt( gl_FragColor.xyz );\n#endif"}; +THREE.UniformsUtils={merge:function(a){var b,c,d,e={};for(b=0;b dashSize ) {\ndiscard;\n}\ngl_FragColor = vec4( diffuse, opacity );",THREE.ShaderChunk.color_fragment,THREE.ShaderChunk.fog_fragment,"}"].join("\n")},depth:{uniforms:{mNear:{type:"f",value:1},mFar:{type:"f",value:2E3},opacity:{type:"f", +value:1}},vertexShader:"void main() {\ngl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\n}",fragmentShader:"uniform float mNear;\nuniform float mFar;\nuniform float opacity;\nvoid main() {\nfloat depth = gl_FragCoord.z / gl_FragCoord.w;\nfloat color = 1.0 - smoothstep( mNear, mFar, depth );\ngl_FragColor = vec4( vec3( color ), opacity );\n}"},normal:{uniforms:{opacity:{type:"f",value:1}},vertexShader:["varying vec3 vNormal;",THREE.ShaderChunk.morphtarget_pars_vertex,"void main() {\nvNormal = normalize( normalMatrix * normal );", +THREE.ShaderChunk.morphtarget_vertex,THREE.ShaderChunk.default_vertex,"}"].join("\n"),fragmentShader:"uniform float opacity;\nvarying vec3 vNormal;\nvoid main() {\ngl_FragColor = vec4( 0.5 * normalize( vNormal ) + 0.5, opacity );\n}"},normalmap:{uniforms:THREE.UniformsUtils.merge([THREE.UniformsLib.fog,THREE.UniformsLib.lights,THREE.UniformsLib.shadowmap,{enableAO:{type:"i",value:0},enableDiffuse:{type:"i",value:0},enableSpecular:{type:"i",value:0},enableReflection:{type:"i",value:0},enableDisplacement:{type:"i", +value:0},tDisplacement:{type:"t",value:null},tDiffuse:{type:"t",value:null},tCube:{type:"t",value:null},tNormal:{type:"t",value:null},tSpecular:{type:"t",value:null},tAO:{type:"t",value:null},uNormalScale:{type:"v2",value:new THREE.Vector2(1,1)},uDisplacementBias:{type:"f",value:0},uDisplacementScale:{type:"f",value:1},uDiffuseColor:{type:"c",value:new THREE.Color(16777215)},uSpecularColor:{type:"c",value:new THREE.Color(1118481)},uAmbientColor:{type:"c",value:new THREE.Color(16777215)},uShininess:{type:"f", +value:30},uOpacity:{type:"f",value:1},useRefract:{type:"i",value:0},uRefractionRatio:{type:"f",value:0.98},uReflectivity:{type:"f",value:0.5},uOffset:{type:"v2",value:new THREE.Vector2(0,0)},uRepeat:{type:"v2",value:new THREE.Vector2(1,1)},wrapRGB:{type:"v3",value:new THREE.Vector3(1,1,1)}}]),fragmentShader:["uniform vec3 uAmbientColor;\nuniform vec3 uDiffuseColor;\nuniform vec3 uSpecularColor;\nuniform float uShininess;\nuniform float uOpacity;\nuniform bool enableDiffuse;\nuniform bool enableSpecular;\nuniform bool enableAO;\nuniform bool enableReflection;\nuniform sampler2D tDiffuse;\nuniform sampler2D tNormal;\nuniform sampler2D tSpecular;\nuniform sampler2D tAO;\nuniform samplerCube tCube;\nuniform vec2 uNormalScale;\nuniform bool useRefract;\nuniform float uRefractionRatio;\nuniform float uReflectivity;\nvarying vec3 vTangent;\nvarying vec3 vBinormal;\nvarying vec3 vNormal;\nvarying vec2 vUv;\nuniform vec3 ambientLightColor;\n#if MAX_DIR_LIGHTS > 0\nuniform vec3 directionalLightColor[ MAX_DIR_LIGHTS ];\nuniform vec3 directionalLightDirection[ MAX_DIR_LIGHTS ];\n#endif\n#if MAX_HEMI_LIGHTS > 0\nuniform vec3 hemisphereLightSkyColor[ MAX_HEMI_LIGHTS ];\nuniform vec3 hemisphereLightGroundColor[ MAX_HEMI_LIGHTS ];\nuniform vec3 hemisphereLightDirection[ MAX_HEMI_LIGHTS ];\n#endif\n#if MAX_POINT_LIGHTS > 0\nuniform vec3 pointLightColor[ MAX_POINT_LIGHTS ];\nuniform vec3 pointLightPosition[ MAX_POINT_LIGHTS ];\nuniform float pointLightDistance[ MAX_POINT_LIGHTS ];\n#endif\n#if MAX_SPOT_LIGHTS > 0\nuniform vec3 spotLightColor[ MAX_SPOT_LIGHTS ];\nuniform vec3 spotLightPosition[ MAX_SPOT_LIGHTS ];\nuniform vec3 spotLightDirection[ MAX_SPOT_LIGHTS ];\nuniform float spotLightAngleCos[ MAX_SPOT_LIGHTS ];\nuniform float spotLightExponent[ MAX_SPOT_LIGHTS ];\nuniform float spotLightDistance[ MAX_SPOT_LIGHTS ];\n#endif\n#ifdef WRAP_AROUND\nuniform vec3 wrapRGB;\n#endif\nvarying vec3 vWorldPosition;\nvarying vec3 vViewPosition;", +THREE.ShaderChunk.shadowmap_pars_fragment,THREE.ShaderChunk.fog_pars_fragment,"void main() {\ngl_FragColor = vec4( vec3( 1.0 ), uOpacity );\nvec3 specularTex = vec3( 1.0 );\nvec3 normalTex = texture2D( tNormal, vUv ).xyz * 2.0 - 1.0;\nnormalTex.xy *= uNormalScale;\nnormalTex = normalize( normalTex );\nif( enableDiffuse ) {\n#ifdef GAMMA_INPUT\nvec4 texelColor = texture2D( tDiffuse, vUv );\ntexelColor.xyz *= texelColor.xyz;\ngl_FragColor = gl_FragColor * texelColor;\n#else\ngl_FragColor = gl_FragColor * texture2D( tDiffuse, vUv );\n#endif\n}\nif( enableAO ) {\n#ifdef GAMMA_INPUT\nvec4 aoColor = texture2D( tAO, vUv );\naoColor.xyz *= aoColor.xyz;\ngl_FragColor.xyz = gl_FragColor.xyz * aoColor.xyz;\n#else\ngl_FragColor.xyz = gl_FragColor.xyz * texture2D( tAO, vUv ).xyz;\n#endif\n}\nif( enableSpecular )\nspecularTex = texture2D( tSpecular, vUv ).xyz;\nmat3 tsb = mat3( normalize( vTangent ), normalize( vBinormal ), normalize( vNormal ) );\nvec3 finalNormal = tsb * normalTex;\n#ifdef FLIP_SIDED\nfinalNormal = -finalNormal;\n#endif\nvec3 normal = normalize( finalNormal );\nvec3 viewPosition = normalize( vViewPosition );\n#if MAX_POINT_LIGHTS > 0\nvec3 pointDiffuse = vec3( 0.0 );\nvec3 pointSpecular = vec3( 0.0 );\nfor ( int i = 0; i < MAX_POINT_LIGHTS; i ++ ) {\nvec4 lPosition = viewMatrix * vec4( pointLightPosition[ i ], 1.0 );\nvec3 pointVector = lPosition.xyz + vViewPosition.xyz;\nfloat pointDistance = 1.0;\nif ( pointLightDistance[ i ] > 0.0 )\npointDistance = 1.0 - min( ( length( pointVector ) / pointLightDistance[ i ] ), 1.0 );\npointVector = normalize( pointVector );\n#ifdef WRAP_AROUND\nfloat pointDiffuseWeightFull = max( dot( normal, pointVector ), 0.0 );\nfloat pointDiffuseWeightHalf = max( 0.5 * dot( normal, pointVector ) + 0.5, 0.0 );\nvec3 pointDiffuseWeight = mix( vec3 ( pointDiffuseWeightFull ), vec3( pointDiffuseWeightHalf ), wrapRGB );\n#else\nfloat pointDiffuseWeight = max( dot( normal, pointVector ), 0.0 );\n#endif\npointDiffuse += pointDistance * pointLightColor[ i ] * uDiffuseColor * pointDiffuseWeight;\nvec3 pointHalfVector = normalize( pointVector + viewPosition );\nfloat pointDotNormalHalf = max( dot( normal, pointHalfVector ), 0.0 );\nfloat pointSpecularWeight = specularTex.r * max( pow( pointDotNormalHalf, uShininess ), 0.0 );\n#ifdef PHYSICALLY_BASED_SHADING\nfloat specularNormalization = ( uShininess + 2.0001 ) / 8.0;\nvec3 schlick = uSpecularColor + vec3( 1.0 - uSpecularColor ) * pow( 1.0 - dot( pointVector, pointHalfVector ), 5.0 );\npointSpecular += schlick * pointLightColor[ i ] * pointSpecularWeight * pointDiffuseWeight * pointDistance * specularNormalization;\n#else\npointSpecular += pointDistance * pointLightColor[ i ] * uSpecularColor * pointSpecularWeight * pointDiffuseWeight;\n#endif\n}\n#endif\n#if MAX_SPOT_LIGHTS > 0\nvec3 spotDiffuse = vec3( 0.0 );\nvec3 spotSpecular = vec3( 0.0 );\nfor ( int i = 0; i < MAX_SPOT_LIGHTS; i ++ ) {\nvec4 lPosition = viewMatrix * vec4( spotLightPosition[ i ], 1.0 );\nvec3 spotVector = lPosition.xyz + vViewPosition.xyz;\nfloat spotDistance = 1.0;\nif ( spotLightDistance[ i ] > 0.0 )\nspotDistance = 1.0 - min( ( length( spotVector ) / spotLightDistance[ i ] ), 1.0 );\nspotVector = normalize( spotVector );\nfloat spotEffect = dot( spotLightDirection[ i ], normalize( spotLightPosition[ i ] - vWorldPosition ) );\nif ( spotEffect > spotLightAngleCos[ i ] ) {\nspotEffect = max( pow( spotEffect, spotLightExponent[ i ] ), 0.0 );\n#ifdef WRAP_AROUND\nfloat spotDiffuseWeightFull = max( dot( normal, spotVector ), 0.0 );\nfloat spotDiffuseWeightHalf = max( 0.5 * dot( normal, spotVector ) + 0.5, 0.0 );\nvec3 spotDiffuseWeight = mix( vec3 ( spotDiffuseWeightFull ), vec3( spotDiffuseWeightHalf ), wrapRGB );\n#else\nfloat spotDiffuseWeight = max( dot( normal, spotVector ), 0.0 );\n#endif\nspotDiffuse += spotDistance * spotLightColor[ i ] * uDiffuseColor * spotDiffuseWeight * spotEffect;\nvec3 spotHalfVector = normalize( spotVector + viewPosition );\nfloat spotDotNormalHalf = max( dot( normal, spotHalfVector ), 0.0 );\nfloat spotSpecularWeight = specularTex.r * max( pow( spotDotNormalHalf, uShininess ), 0.0 );\n#ifdef PHYSICALLY_BASED_SHADING\nfloat specularNormalization = ( uShininess + 2.0001 ) / 8.0;\nvec3 schlick = uSpecularColor + vec3( 1.0 - uSpecularColor ) * pow( 1.0 - dot( spotVector, spotHalfVector ), 5.0 );\nspotSpecular += schlick * spotLightColor[ i ] * spotSpecularWeight * spotDiffuseWeight * spotDistance * specularNormalization * spotEffect;\n#else\nspotSpecular += spotDistance * spotLightColor[ i ] * uSpecularColor * spotSpecularWeight * spotDiffuseWeight * spotEffect;\n#endif\n}\n}\n#endif\n#if MAX_DIR_LIGHTS > 0\nvec3 dirDiffuse = vec3( 0.0 );\nvec3 dirSpecular = vec3( 0.0 );\nfor( int i = 0; i < MAX_DIR_LIGHTS; i++ ) {\nvec4 lDirection = viewMatrix * vec4( directionalLightDirection[ i ], 0.0 );\nvec3 dirVector = normalize( lDirection.xyz );\n#ifdef WRAP_AROUND\nfloat directionalLightWeightingFull = max( dot( normal, dirVector ), 0.0 );\nfloat directionalLightWeightingHalf = max( 0.5 * dot( normal, dirVector ) + 0.5, 0.0 );\nvec3 dirDiffuseWeight = mix( vec3( directionalLightWeightingFull ), vec3( directionalLightWeightingHalf ), wrapRGB );\n#else\nfloat dirDiffuseWeight = max( dot( normal, dirVector ), 0.0 );\n#endif\ndirDiffuse += directionalLightColor[ i ] * uDiffuseColor * dirDiffuseWeight;\nvec3 dirHalfVector = normalize( dirVector + viewPosition );\nfloat dirDotNormalHalf = max( dot( normal, dirHalfVector ), 0.0 );\nfloat dirSpecularWeight = specularTex.r * max( pow( dirDotNormalHalf, uShininess ), 0.0 );\n#ifdef PHYSICALLY_BASED_SHADING\nfloat specularNormalization = ( uShininess + 2.0001 ) / 8.0;\nvec3 schlick = uSpecularColor + vec3( 1.0 - uSpecularColor ) * pow( 1.0 - dot( dirVector, dirHalfVector ), 5.0 );\ndirSpecular += schlick * directionalLightColor[ i ] * dirSpecularWeight * dirDiffuseWeight * specularNormalization;\n#else\ndirSpecular += directionalLightColor[ i ] * uSpecularColor * dirSpecularWeight * dirDiffuseWeight;\n#endif\n}\n#endif\n#if MAX_HEMI_LIGHTS > 0\nvec3 hemiDiffuse = vec3( 0.0 );\nvec3 hemiSpecular = vec3( 0.0 );\nfor( int i = 0; i < MAX_HEMI_LIGHTS; i ++ ) {\nvec4 lDirection = viewMatrix * vec4( hemisphereLightDirection[ i ], 0.0 );\nvec3 lVector = normalize( lDirection.xyz );\nfloat dotProduct = dot( normal, lVector );\nfloat hemiDiffuseWeight = 0.5 * dotProduct + 0.5;\nvec3 hemiColor = mix( hemisphereLightGroundColor[ i ], hemisphereLightSkyColor[ i ], hemiDiffuseWeight );\nhemiDiffuse += uDiffuseColor * hemiColor;\nvec3 hemiHalfVectorSky = normalize( lVector + viewPosition );\nfloat hemiDotNormalHalfSky = 0.5 * dot( normal, hemiHalfVectorSky ) + 0.5;\nfloat hemiSpecularWeightSky = specularTex.r * max( pow( hemiDotNormalHalfSky, uShininess ), 0.0 );\nvec3 lVectorGround = -lVector;\nvec3 hemiHalfVectorGround = normalize( lVectorGround + viewPosition );\nfloat hemiDotNormalHalfGround = 0.5 * dot( normal, hemiHalfVectorGround ) + 0.5;\nfloat hemiSpecularWeightGround = specularTex.r * max( pow( hemiDotNormalHalfGround, uShininess ), 0.0 );\n#ifdef PHYSICALLY_BASED_SHADING\nfloat dotProductGround = dot( normal, lVectorGround );\nfloat specularNormalization = ( uShininess + 2.0001 ) / 8.0;\nvec3 schlickSky = uSpecularColor + vec3( 1.0 - uSpecularColor ) * pow( 1.0 - dot( lVector, hemiHalfVectorSky ), 5.0 );\nvec3 schlickGround = uSpecularColor + vec3( 1.0 - uSpecularColor ) * pow( 1.0 - dot( lVectorGround, hemiHalfVectorGround ), 5.0 );\nhemiSpecular += hemiColor * specularNormalization * ( schlickSky * hemiSpecularWeightSky * max( dotProduct, 0.0 ) + schlickGround * hemiSpecularWeightGround * max( dotProductGround, 0.0 ) );\n#else\nhemiSpecular += uSpecularColor * hemiColor * ( hemiSpecularWeightSky + hemiSpecularWeightGround ) * hemiDiffuseWeight;\n#endif\n}\n#endif\nvec3 totalDiffuse = vec3( 0.0 );\nvec3 totalSpecular = vec3( 0.0 );\n#if MAX_DIR_LIGHTS > 0\ntotalDiffuse += dirDiffuse;\ntotalSpecular += dirSpecular;\n#endif\n#if MAX_HEMI_LIGHTS > 0\ntotalDiffuse += hemiDiffuse;\ntotalSpecular += hemiSpecular;\n#endif\n#if MAX_POINT_LIGHTS > 0\ntotalDiffuse += pointDiffuse;\ntotalSpecular += pointSpecular;\n#endif\n#if MAX_SPOT_LIGHTS > 0\ntotalDiffuse += spotDiffuse;\ntotalSpecular += spotSpecular;\n#endif\n#ifdef METAL\ngl_FragColor.xyz = gl_FragColor.xyz * ( totalDiffuse + ambientLightColor * uAmbientColor + totalSpecular );\n#else\ngl_FragColor.xyz = gl_FragColor.xyz * ( totalDiffuse + ambientLightColor * uAmbientColor ) + totalSpecular;\n#endif\nif ( enableReflection ) {\nvec3 vReflect;\nvec3 cameraToVertex = normalize( vWorldPosition - cameraPosition );\nif ( useRefract ) {\nvReflect = refract( cameraToVertex, normal, uRefractionRatio );\n} else {\nvReflect = reflect( cameraToVertex, normal );\n}\nvec4 cubeColor = textureCube( tCube, vec3( -vReflect.x, vReflect.yz ) );\n#ifdef GAMMA_INPUT\ncubeColor.xyz *= cubeColor.xyz;\n#endif\ngl_FragColor.xyz = mix( gl_FragColor.xyz, cubeColor.xyz, specularTex.r * uReflectivity );\n}", +THREE.ShaderChunk.shadowmap_fragment,THREE.ShaderChunk.linear_to_gamma_fragment,THREE.ShaderChunk.fog_fragment,"}"].join("\n"),vertexShader:["attribute vec4 tangent;\nuniform vec2 uOffset;\nuniform vec2 uRepeat;\nuniform bool enableDisplacement;\n#ifdef VERTEX_TEXTURES\nuniform sampler2D tDisplacement;\nuniform float uDisplacementScale;\nuniform float uDisplacementBias;\n#endif\nvarying vec3 vTangent;\nvarying vec3 vBinormal;\nvarying vec3 vNormal;\nvarying vec2 vUv;\nvarying vec3 vWorldPosition;\nvarying vec3 vViewPosition;", +THREE.ShaderChunk.skinning_pars_vertex,THREE.ShaderChunk.shadowmap_pars_vertex,"void main() {",THREE.ShaderChunk.skinbase_vertex,THREE.ShaderChunk.skinnormal_vertex,"#ifdef USE_SKINNING\nvNormal = normalize( normalMatrix * skinnedNormal.xyz );\nvec4 skinnedTangent = skinMatrix * vec4( tangent.xyz, 0.0 );\nvTangent = normalize( normalMatrix * skinnedTangent.xyz );\n#else\nvNormal = normalize( normalMatrix * normal );\nvTangent = normalize( normalMatrix * tangent.xyz );\n#endif\nvBinormal = normalize( cross( vNormal, vTangent ) * tangent.w );\nvUv = uv * uRepeat + uOffset;\nvec3 displacedPosition;\n#ifdef VERTEX_TEXTURES\nif ( enableDisplacement ) {\nvec3 dv = texture2D( tDisplacement, uv ).xyz;\nfloat df = uDisplacementScale * dv.x + uDisplacementBias;\ndisplacedPosition = position + normalize( normal ) * df;\n} else {\n#ifdef USE_SKINNING\nvec4 skinVertex = vec4( position, 1.0 );\nvec4 skinned = boneMatX * skinVertex * skinWeight.x;\nskinned \t += boneMatY * skinVertex * skinWeight.y;\ndisplacedPosition = skinned.xyz;\n#else\ndisplacedPosition = position;\n#endif\n}\n#else\n#ifdef USE_SKINNING\nvec4 skinVertex = vec4( position, 1.0 );\nvec4 skinned = boneMatX * skinVertex * skinWeight.x;\nskinned \t += boneMatY * skinVertex * skinWeight.y;\ndisplacedPosition = skinned.xyz;\n#else\ndisplacedPosition = position;\n#endif\n#endif\nvec4 mvPosition = modelViewMatrix * vec4( displacedPosition, 1.0 );\nvec4 worldPosition = modelMatrix * vec4( displacedPosition, 1.0 );\ngl_Position = projectionMatrix * mvPosition;\nvWorldPosition = worldPosition.xyz;\nvViewPosition = -mvPosition.xyz;\n#ifdef USE_SHADOWMAP\nfor( int i = 0; i < MAX_SHADOWS; i ++ ) {\nvShadowCoord[ i ] = shadowMatrix[ i ] * worldPosition;\n}\n#endif\n}"].join("\n")}, +cube:{uniforms:{tCube:{type:"t",value:null},tFlip:{type:"f",value:-1}},vertexShader:"varying vec3 vWorldPosition;\nvoid main() {\nvec4 worldPosition = modelMatrix * vec4( position, 1.0 );\nvWorldPosition = worldPosition.xyz;\ngl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\n}",fragmentShader:"uniform samplerCube tCube;\nuniform float tFlip;\nvarying vec3 vWorldPosition;\nvoid main() {\ngl_FragColor = textureCube( tCube, vec3( tFlip * vWorldPosition.x, vWorldPosition.yz ) );\n}"}, +depthRGBA:{uniforms:{},vertexShader:[THREE.ShaderChunk.morphtarget_pars_vertex,THREE.ShaderChunk.skinning_pars_vertex,"void main() {",THREE.ShaderChunk.skinbase_vertex,THREE.ShaderChunk.morphtarget_vertex,THREE.ShaderChunk.skinning_vertex,THREE.ShaderChunk.default_vertex,"}"].join("\n"),fragmentShader:"vec4 pack_depth( const in float depth ) {\nconst vec4 bit_shift = vec4( 256.0 * 256.0 * 256.0, 256.0 * 256.0, 256.0, 1.0 );\nconst vec4 bit_mask = vec4( 0.0, 1.0 / 256.0, 1.0 / 256.0, 1.0 / 256.0 );\nvec4 res = fract( depth * bit_shift );\nres -= res.xxyz * bit_mask;\nreturn res;\n}\nvoid main() {\ngl_FragData[ 0 ] = pack_depth( gl_FragCoord.z );\n}"}};THREE.WebGLRenderer=function(a){function b(a){if(a.__webglCustomAttributesList)for(var b in a.__webglCustomAttributesList)k.deleteBuffer(a.__webglCustomAttributesList[b].buffer)}function c(a,b){var c=a.vertices.length,d=b.material;if(d.attributes){void 0===a.__webglCustomAttributesList&&(a.__webglCustomAttributesList=[]);for(var e in d.attributes){var f=d.attributes[e];if(!f.__webglInitialized||f.createUniqueBuffers){f.__webglInitialized=!0;var g=1;"v2"===f.type?g=2:"v3"===f.type?g=3:"v4"===f.type? +g=4:"c"===f.type&&(g=3);f.size=g;f.array=new Float32Array(c*g);f.buffer=k.createBuffer();f.buffer.belongsToAttribute=e;f.needsUpdate=!0}a.__webglCustomAttributesList.push(f)}}}function d(a,b){var c=b.geometry,d=a.faces3,h=a.faces4,i=3*d.length+4*h.length,j=1*d.length+2*h.length,h=3*d.length+4*h.length,d=e(b,a),p=g(d),m=f(d),l=d.vertexColors?d.vertexColors:!1;a.__vertexArray=new Float32Array(3*i);m&&(a.__normalArray=new Float32Array(3*i));c.hasTangents&&(a.__tangentArray=new Float32Array(4*i));l&& +(a.__colorArray=new Float32Array(3*i));if(p){if(0l;l++)N.autoScaleCubemaps&&!f?(m=j,s=l,t=c.image[l],x=Ic,t.width<=x&&t.height<=x||(y=Math.max(t.width,t.height),u=Math.floor(t.width*x/y),x=Math.floor(t.height*x/y),y=document.createElement("canvas"),y.width=u,y.height=x,y.getContext("2d").drawImage(t,0,0,t.width,t.height,0,0,u,x),t=y),m[s]=t):j[l]=c.image[l];l=j[0];m=0===(l.width&l.width- +1)&&0===(l.height&l.height-1);s=I(c.format);t=I(c.type);B(k.TEXTURE_CUBE_MAP,c,m);for(l=0;6>l;l++)if(f){x=j[l].mipmaps;y=0;for(E=x.length;y=cc&&console.warn("WebGLRenderer: trying to use "+ +a+" texture units while this GPU supports only "+cc);ga+=1;return a}function F(a,b,c,d){a[b]=c.r*c.r*d;a[b+1]=c.g*c.g*d;a[b+2]=c.b*c.b*d}function z(a,b,c,d){a[b]=c.r*d;a[b+1]=c.g*d;a[b+2]=c.b*d}function H(a){a!==Sa&&(k.lineWidth(a),Sa=a)}function K(a,b,c){Xa!==a&&(a?k.enable(k.POLYGON_OFFSET_FILL):k.disable(k.POLYGON_OFFSET_FILL),Xa=a);if(a&&(Ra!==b||Aa!==c))k.polygonOffset(b,c),Ra=b,Aa=c}function G(a){for(var a=a.split("\n"),b=0,c=a.length;bb;b++)k.deleteFramebuffer(a.__webglFramebuffer[b]),k.deleteRenderbuffer(a.__webglRenderbuffer[b]);else k.deleteFramebuffer(a.__webglFramebuffer),k.deleteRenderbuffer(a.__webglRenderbuffer);N.info.memory.textures--},P=function(a){a=a.target;a.removeEventListener("dispose",P);pc(a)},pc=function(a){var b=a.program;if(void 0!==b){a.program= +void 0;var c,d,e=!1,a=0;for(c=fa.length;ad.numSupportedMorphTargets?(j.sort(m),j.length=d.numSupportedMorphTargets):j.length>d.numSupportedMorphNormals?j.sort(m):0===j.length&&j.push([0,0]);for(l=0;lva;va++)Ma=U[va],xb[ib]=Ma.x,xb[ib+1]=Ma.y,xb[ib+2]=Ma.z,ib+=3;else for(va=0;3>va;va++)xb[ib]=R.x,xb[ib+1]=R.y,xb[ib+2]=R.z,ib+=3;D=0;for(A=ta.length;Dva;va++)Ma=U[va],xb[ib]=Ma.x,xb[ib+1]=Ma.y,xb[ib+2]=Ma.z,ib+=3;else for(va=0;4>va;va++)xb[ib]=R.x,xb[ib+1]=R.y,xb[ib+2]=R.z,ib+=3;k.bindBuffer(k.ARRAY_BUFFER,C.__webglNormalBuffer);k.bufferData(k.ARRAY_BUFFER,xb,G)}if(Kb&& +Vb&&N){D=0;for(A=sa.length;Dva;va++)Ua=Z[va],lb[Ta]=Ua.x,lb[Ta+1]=Ua.y,Ta+=2;D=0;for(A=ta.length;Dva;va++)Ua=Z[va],lb[Ta]=Ua.x,lb[Ta+1]=Ua.y,Ta+=2;0va;va++)Xa=da[va],sb[Va]=Xa.x,sb[Va+1]=Xa.y,Va+=2;D=0;for(A=ta.length;Dva;va++)Xa=da[va],sb[Va]=Xa.x,sb[Va+1]=Xa.y,Va+=2;0f;f++){a.__webglFramebuffer[f]=k.createFramebuffer();a.__webglRenderbuffer[f]=k.createRenderbuffer();k.texImage2D(k.TEXTURE_CUBE_MAP_POSITIVE_X+f,0,d,a.width,a.height,0,d,e,null);var g=a,h=k.TEXTURE_CUBE_MAP_POSITIVE_X+f;k.bindFramebuffer(k.FRAMEBUFFER, +a.__webglFramebuffer[f]);k.framebufferTexture2D(k.FRAMEBUFFER,k.COLOR_ATTACHMENT0,h,g.__webglTexture,0);V(a.__webglRenderbuffer[f],a)}c&&k.generateMipmap(k.TEXTURE_CUBE_MAP)}else a.__webglFramebuffer=k.createFramebuffer(),a.__webglRenderbuffer=a.shareDepthFrom?a.shareDepthFrom.__webglRenderbuffer:k.createRenderbuffer(),k.bindTexture(k.TEXTURE_2D,a.__webglTexture),B(k.TEXTURE_2D,a,c),k.texImage2D(k.TEXTURE_2D,0,d,a.width,a.height,0,d,e,null),d=k.TEXTURE_2D,k.bindFramebuffer(k.FRAMEBUFFER,a.__webglFramebuffer), +k.framebufferTexture2D(k.FRAMEBUFFER,k.COLOR_ATTACHMENT0,d,a.__webglTexture,0),a.shareDepthFrom?a.depthBuffer&&!a.stencilBuffer?k.framebufferRenderbuffer(k.FRAMEBUFFER,k.DEPTH_ATTACHMENT,k.RENDERBUFFER,a.__webglRenderbuffer):a.depthBuffer&&a.stencilBuffer&&k.framebufferRenderbuffer(k.FRAMEBUFFER,k.DEPTH_STENCIL_ATTACHMENT,k.RENDERBUFFER,a.__webglRenderbuffer):V(a.__webglRenderbuffer,a),c&&k.generateMipmap(k.TEXTURE_2D);b?k.bindTexture(k.TEXTURE_CUBE_MAP,null):k.bindTexture(k.TEXTURE_2D,null);k.bindRenderbuffer(k.RENDERBUFFER, +null);k.bindFramebuffer(k.FRAMEBUFFER,null)}a?(b=b?a.__webglFramebuffer[a.activeCubeFace]:a.__webglFramebuffer,c=a.width,a=a.height,e=d=0):(b=null,c=Kb,a=Ob,d=sb,e=Nb);b!==fb&&(k.bindFramebuffer(k.FRAMEBUFFER,b),k.viewport(d,e,c,a),fb=b);Tb=c;Ub=a};this.shadowMapPlugin=new THREE.ShadowMapPlugin;this.addPrePlugin(this.shadowMapPlugin);this.addPostPlugin(new THREE.SpritePlugin);this.addPostPlugin(new THREE.LensFlarePlugin)};THREE.WebGLRenderTarget=function(a,b,c){this.width=a;this.height=b;c=c||{};this.wrapS=void 0!==c.wrapS?c.wrapS:THREE.ClampToEdgeWrapping;this.wrapT=void 0!==c.wrapT?c.wrapT:THREE.ClampToEdgeWrapping;this.magFilter=void 0!==c.magFilter?c.magFilter:THREE.LinearFilter;this.minFilter=void 0!==c.minFilter?c.minFilter:THREE.LinearMipMapLinearFilter;this.anisotropy=void 0!==c.anisotropy?c.anisotropy:1;this.offset=new THREE.Vector2(0,0);this.repeat=new THREE.Vector2(1,1);this.format=void 0!==c.format?c.format: +THREE.RGBAFormat;this.type=void 0!==c.type?c.type:THREE.UnsignedByteType;this.depthBuffer=void 0!==c.depthBuffer?c.depthBuffer:!0;this.stencilBuffer=void 0!==c.stencilBuffer?c.stencilBuffer:!0;this.generateMipmaps=!0;this.shareDepthFrom=null}; +THREE.WebGLRenderTarget.prototype={constructor:THREE.WebGLRenderTarget,addEventListener:THREE.EventDispatcher.prototype.addEventListener,hasEventListener:THREE.EventDispatcher.prototype.hasEventListener,removeEventListener:THREE.EventDispatcher.prototype.removeEventListener,dispatchEvent:THREE.EventDispatcher.prototype.dispatchEvent,clone:function(){var a=new THREE.WebGLRenderTarget(this.width,this.height);a.wrapS=this.wrapS;a.wrapT=this.wrapT;a.magFilter=this.magFilter;a.minFilter=this.minFilter; +a.anisotropy=this.anisotropy;a.offset.copy(this.offset);a.repeat.copy(this.repeat);a.format=this.format;a.type=this.type;a.depthBuffer=this.depthBuffer;a.stencilBuffer=this.stencilBuffer;a.generateMipmaps=this.generateMipmaps;a.shareDepthFrom=this.shareDepthFrom;return a},dispose:function(){this.dispatchEvent({type:"dispose"})}};THREE.WebGLRenderTargetCube=function(a,b,c){THREE.WebGLRenderTarget.call(this,a,b,c);this.activeCubeFace=0};THREE.WebGLRenderTargetCube.prototype=Object.create(THREE.WebGLRenderTarget.prototype);THREE.RenderableVertex=function(){this.positionWorld=new THREE.Vector3;this.positionScreen=new THREE.Vector4;this.visible=!0};THREE.RenderableVertex.prototype.copy=function(a){this.positionWorld.copy(a.positionWorld);this.positionScreen.copy(a.positionScreen)};THREE.RenderableFace3=function(){this.v1=new THREE.RenderableVertex;this.v2=new THREE.RenderableVertex;this.v3=new THREE.RenderableVertex;this.centroidModel=new THREE.Vector3;this.normalModel=new THREE.Vector3;this.normalModelView=new THREE.Vector3;this.vertexNormalsLength=0;this.vertexNormalsModel=[new THREE.Vector3,new THREE.Vector3,new THREE.Vector3];this.vertexNormalsModelView=[new THREE.Vector3,new THREE.Vector3,new THREE.Vector3];this.material=this.color=null;this.uvs=[[]];this.z=null};THREE.RenderableFace4=function(){this.v1=new THREE.RenderableVertex;this.v2=new THREE.RenderableVertex;this.v3=new THREE.RenderableVertex;this.v4=new THREE.RenderableVertex;this.centroidModel=new THREE.Vector3;this.normalModel=new THREE.Vector3;this.normalModelView=new THREE.Vector3;this.vertexNormalsLength=0;this.vertexNormalsModel=[new THREE.Vector3,new THREE.Vector3,new THREE.Vector3,new THREE.Vector3];this.vertexNormalsModelView=[new THREE.Vector3,new THREE.Vector3,new THREE.Vector3,new THREE.Vector3]; +this.material=this.color=null;this.uvs=[[]];this.z=null};THREE.RenderableObject=function(){this.z=this.object=null};THREE.RenderableParticle=function(){this.rotation=this.z=this.y=this.x=this.object=null;this.scale=new THREE.Vector2;this.material=null};THREE.RenderableLine=function(){this.z=null;this.v1=new THREE.RenderableVertex;this.v2=new THREE.RenderableVertex;this.vertexColors=[new THREE.Color,new THREE.Color];this.material=null};THREE.GeometryUtils={merge:function(a,b,c){var d,e,f=a.vertices.length,g=b instanceof THREE.Mesh?b.geometry:b,h=a.vertices,i=g.vertices,j=a.faces,m=g.faces,a=a.faceVertexUvs[0],g=g.faceVertexUvs[0];void 0===c&&(c=0);b instanceof THREE.Mesh&&(b.matrixAutoUpdate&&b.updateMatrix(),d=b.matrix,e=(new THREE.Matrix3).getNormalMatrix(d));for(var b=0,p=i.length;ba?b(c,e-1):j[e]>8&255,i>>16&255,i>>24&255)),d}d.mipmapCount=1;h[2]&131072&&!1!==b&&(d.mipmapCount=Math.max(1,h[7]));d.isCubemap=h[28]&512?!0:!1;d.width=h[4];d.height=h[3];for(var h=h[1]+4,f=d.width,g=d.height,i=d.isCubemap? +6:1,j=0;jp-1?0:p-1,r=p+1>e-1?e-1:p+1,s=0>m-1?0:m-1,n=m+1>d-1?d-1:m+1,q=[],y=[0,0,h[4*(p*d+m)]/255*b];q.push([-1,0,h[4*(p*d+s)]/255*b]);q.push([-1,-1,h[4*(l*d+s)]/255*b]);q.push([0,-1,h[4*(l*d+m)]/255*b]);q.push([1,-1,h[4*(l*d+n)]/255*b]);q.push([1,0,h[4*(p*d+n)]/255*b]);q.push([1,1,h[4*(r*d+n)]/255*b]);q.push([0,1,h[4*(r*d+m)]/255*b]);q.push([-1,1,h[4*(r*d+s)]/255*b]);l=[];s=q.length;for(r=0;re)return null;var f=[],g=[],h=[],i,j,m;if(0=p--){console.log("Warning, unable to triangulate polygon!");break}i=j;e<=i&&(i=0);j=i+1;e<=j&&(j=0);m=j+1;e<=m&&(m=0);var l;a:{var r=l=void 0,s=void 0,n=void 0,q=void 0,y=void 0,u=void 0,x=void 0,t= +void 0,r=a[g[i]].x,s=a[g[i]].y,n=a[g[j]].x,q=a[g[j]].y,y=a[g[m]].x,u=a[g[m]].y;if(1E-10>(n-r)*(u-s)-(q-s)*(y-r))l=!1;else{var E=void 0,J=void 0,F=void 0,z=void 0,H=void 0,K=void 0,G=void 0,L=void 0,B=void 0,V=void 0,B=L=G=t=x=void 0,E=y-n,J=u-q,F=r-y,z=s-u,H=n-r,K=q-s;for(l=0;li)g=d+1;else if(0b&&(b=0);1d.length-2?d.length-1:a+1;c[3]=a>d.length-3?d.length-1:a+2;b.x=THREE.Curve.Utils.interpolate(d[c[0]].x,d[c[1]].x,d[c[2]].x,d[c[3]].x,e);b.y=THREE.Curve.Utils.interpolate(d[c[0]].y,d[c[1]].y,d[c[2]].y,d[c[3]].y,e);return b}; +THREE.EllipseCurve=function(a,b,c,d,e,f,g){this.aX=a;this.aY=b;this.xRadius=c;this.yRadius=d;this.aStartAngle=e;this.aEndAngle=f;this.aClockwise=g};THREE.EllipseCurve.prototype=Object.create(THREE.Curve.prototype);THREE.EllipseCurve.prototype.getPoint=function(a){var b=this.aEndAngle-this.aStartAngle;this.aClockwise||(a=1-a);b=this.aStartAngle+a*b;a=this.aX+this.xRadius*Math.cos(b);b=this.aY+this.yRadius*Math.sin(b);return new THREE.Vector2(a,b)}; +THREE.ArcCurve=function(a,b,c,d,e,f){THREE.EllipseCurve.call(this,a,b,c,c,d,e,f)};THREE.ArcCurve.prototype=Object.create(THREE.EllipseCurve.prototype); +THREE.Curve.Utils={tangentQuadraticBezier:function(a,b,c,d){return 2*(1-a)*(c-b)+2*a*(d-c)},tangentCubicBezier:function(a,b,c,d,e){return-3*b*(1-a)*(1-a)+3*c*(1-a)*(1-a)-6*a*c*(1-a)+6*a*d*(1-a)-3*a*a*d+3*a*a*e},tangentSpline:function(a){return 6*a*a-6*a+(3*a*a-4*a+1)+(-6*a*a+6*a)+(3*a*a-2*a)},interpolate:function(a,b,c,d,e){var a=0.5*(c-a),d=0.5*(d-b),f=e*e;return(2*b-2*c+a+d)*e*f+(-3*b+3*c-2*a-d)*f+a*e+b}}; +THREE.Curve.create=function(a,b){a.prototype=Object.create(THREE.Curve.prototype);a.prototype.getPoint=b;return a};THREE.LineCurve3=THREE.Curve.create(function(a,b){this.v1=a;this.v2=b},function(a){var b=new THREE.Vector3;b.subVectors(this.v2,this.v1);b.multiplyScalar(a);b.add(this.v1);return b}); +THREE.QuadraticBezierCurve3=THREE.Curve.create(function(a,b,c){this.v0=a;this.v1=b;this.v2=c},function(a){var b,c;b=THREE.Shape.Utils.b2(a,this.v0.x,this.v1.x,this.v2.x);c=THREE.Shape.Utils.b2(a,this.v0.y,this.v1.y,this.v2.y);a=THREE.Shape.Utils.b2(a,this.v0.z,this.v1.z,this.v2.z);return new THREE.Vector3(b,c,a)}); +THREE.CubicBezierCurve3=THREE.Curve.create(function(a,b,c,d){this.v0=a;this.v1=b;this.v2=c;this.v3=d},function(a){var b,c;b=THREE.Shape.Utils.b3(a,this.v0.x,this.v1.x,this.v2.x,this.v3.x);c=THREE.Shape.Utils.b3(a,this.v0.y,this.v1.y,this.v2.y,this.v3.y);a=THREE.Shape.Utils.b3(a,this.v0.z,this.v1.z,this.v2.z,this.v3.z);return new THREE.Vector3(b,c,a)}); +THREE.SplineCurve3=THREE.Curve.create(function(a){this.points=void 0==a?[]:a},function(a){var b=new THREE.Vector3,c=[],d=this.points,e,a=(d.length-1)*a;e=Math.floor(a);a-=e;c[0]=0==e?e:e-1;c[1]=e;c[2]=e>d.length-2?d.length-1:e+1;c[3]=e>d.length-3?d.length-1:e+2;e=d[c[0]];var f=d[c[1]],g=d[c[2]],c=d[c[3]];b.x=THREE.Curve.Utils.interpolate(e.x,f.x,g.x,c.x,a);b.y=THREE.Curve.Utils.interpolate(e.y,f.y,g.y,c.y,a);b.z=THREE.Curve.Utils.interpolate(e.z,f.z,g.z,c.z,a);return b}); +THREE.ClosedSplineCurve3=THREE.Curve.create(function(a){this.points=void 0==a?[]:a},function(a){var b=new THREE.Vector3,c=[],d=this.points,e;e=(d.length-0)*a;a=Math.floor(e);e-=a;a+=0=b)return b=c[a]-b,a=this.curves[a],b=1-b/a.getLength(),a.getPointAt(b);a++}return null};THREE.CurvePath.prototype.getLength=function(){var a=this.getCurveLengths();return a[a.length-1]}; +THREE.CurvePath.prototype.getCurveLengths=function(){if(this.cacheLengths&&this.cacheLengths.length==this.curves.length)return this.cacheLengths;var a=[],b=0,c,d=this.curves.length;for(c=0;cb?b=h.x:h.xc?c=h.y:h.yd?d=h.z:h.zMath.abs(d.x-c[0].x)&&1E-10>Math.abs(d.y-c[0].y)&&c.splice(c.length-1,1);b&&c.push(c[0]);return c}; +THREE.Path.prototype.toShapes=function(){var a,b,c,d,e=[],f=new THREE.Path;a=0;for(b=this.actions.length;a +h&&(h+=c.length);h%=c.length;0>g&&(g+=j.length);g%=j.length;e=0<=h-1?h-1:c.length-1;f=0<=g-1?g-1:j.length-1;n=[j[g],c[h],c[e]];n=THREE.FontUtils.Triangulate.area(n);q=[j[g],j[f],c[h]];q=THREE.FontUtils.Triangulate.area(q);p+l>n+q&&(h=r,g=m,0>h&&(h+=c.length),h%=c.length,0>g&&(g+=j.length),g%=j.length,e=0<=h-1?h-1:c.length-1,f=0<=g-1?g-1:j.length-1);p=c.slice(0,h);l=c.slice(h);r=j.slice(g);m=j.slice(0,g);f=[j[g],j[f],c[h]];s.push([j[g],c[h],c[e]]);s.push(f);c=p.concat(r).concat(m).concat(l)}return{shape:c, +isolatedPts:s,allpoints:d}},triangulateShape:function(a,b){var c=THREE.Shape.Utils.removeHoles(a,b),d=c.allpoints,e=c.isolatedPts,c=THREE.FontUtils.Triangulate(c.shape,!1),f,g,h,i,j={};f=0;for(g=d.length;fd;d++)i=h[d].x+":"+h[d].y,i=j[i],void 0!==i&&(h[d]=i)}f=0;for(g=e.length;fd;d++)i=h[d].x+":"+h[d].y,i=j[i],void 0!==i&&(h[d]=i)}return c.concat(e)}, +isClockWise:function(a){return 0>THREE.FontUtils.Triangulate.area(a)},b2p0:function(a,b){var c=1-a;return c*c*b},b2p1:function(a,b){return 2*(1-a)*a*b},b2p2:function(a,b){return a*a*b},b2:function(a,b,c,d){return this.b2p0(a,b)+this.b2p1(a,c)+this.b2p2(a,d)},b3p0:function(a,b){var c=1-a;return c*c*c*b},b3p1:function(a,b){var c=1-a;return 3*c*c*a*b},b3p2:function(a,b){return 3*(1-a)*a*a*b},b3p3:function(a,b){return a*a*a*b},b3:function(a,b,c,d,e){return this.b3p0(a,b)+this.b3p1(a,c)+this.b3p2(a,d)+ +this.b3p3(a,e)}};THREE.AnimationHandler=function(){var a=[],b={},c={update:function(b){for(var c=0;ca.hierarchy[c].keys[d].time&& +(a.hierarchy[c].keys[d].time=0),void 0!==a.hierarchy[c].keys[d].rot&&!(a.hierarchy[c].keys[d].rot instanceof THREE.Quaternion)){var h=a.hierarchy[c].keys[d].rot;a.hierarchy[c].keys[d].rot=new THREE.Quaternion(h[0],h[1],h[2],h[3])}if(a.hierarchy[c].keys.length&&void 0!==a.hierarchy[c].keys[0].morphTargets){h={};for(d=0;dr;r++){c=b[r];g=i.prevKey[c];h=i.nextKey[c];if(h.time<=m){if(jd||1d?0:1;if("pos"===c)if(c=a.position,this.interpolationType===THREE.AnimationHandler.LINEAR)c.x=e[0]+(f[0]-e[0])*d,c.y=e[1]+(f[1]-e[1])*d,c.z=e[2]+ +(f[2]-e[2])*d;else{if(this.interpolationType===THREE.AnimationHandler.CATMULLROM||this.interpolationType===THREE.AnimationHandler.CATMULLROM_FORWARD)this.points[0]=this.getPrevKeyWith("pos",p,g.index-1).pos,this.points[1]=e,this.points[2]=f,this.points[3]=this.getNextKeyWith("pos",p,h.index+1).pos,d=0.33*d+0.33,e=this.interpolateCatmullRom(this.points,d),c.x=e[0],c.y=e[1],c.z=e[2],this.interpolationType===THREE.AnimationHandler.CATMULLROM_FORWARD&&(d=this.interpolateCatmullRom(this.points,1.01*d), +this.target.set(d[0],d[1],d[2]),this.target.sub(c),this.target.y=0,this.target.normalize(),d=Math.atan2(this.target.x,this.target.z),a.rotation.set(0,d,0))}else"rot"===c?THREE.Quaternion.slerp(e,f,a.quaternion,d):"scl"===c&&(c=a.scale,c.x=e[0]+(f[0]-e[0])*d,c.y=e[1]+(f[1]-e[1])*d,c.z=e[2]+(f[2]-e[2])*d)}}}}; +THREE.Animation.prototype.interpolateCatmullRom=function(a,b){var c=[],d=[],e,f,g,h,i,j;e=(a.length-1)*b;f=Math.floor(e);e-=f;c[0]=0===f?f:f-1;c[1]=f;c[2]=f>a.length-2?f:f+1;c[3]=f>a.length-3?f:f+2;f=a[c[0]];h=a[c[1]];i=a[c[2]];j=a[c[3]];c=e*e;g=e*c;d[0]=this.interpolate(f[0],h[0],i[0],j[0],e,c,g);d[1]=this.interpolate(f[1],h[1],i[1],j[1],e,c,g);d[2]=this.interpolate(f[2],h[2],i[2],j[2],e,c,g);return d}; +THREE.Animation.prototype.interpolate=function(a,b,c,d,e,f,g){a=0.5*(c-a);d=0.5*(d-b);return(2*(b-c)+a+d)*g+(-3*(b-c)-2*a-d)*f+a*e+b};THREE.Animation.prototype.getNextKeyWith=function(a,b,c){for(var d=this.data.hierarchy[b].keys,c=this.interpolationType===THREE.AnimationHandler.CATMULLROM||this.interpolationType===THREE.AnimationHandler.CATMULLROM_FORWARD?c=g?b.interpolate(c,g):b.interpolate(c,c.time)}this.data.hierarchy[a].node.updateMatrix();d.matrixWorldNeedsUpdate=!0}}if(this.JITCompile&&void 0===f[0][e]){this.hierarchy[0].updateMatrixWorld(!0);for(a=0;ag?(b=Math.atan2(b.y-a.y,b.x-a.x),a=Math.atan2(c.y-a.y,c.x-a.x),b>a&&(a+=2*Math.PI),c=(b+a)/2,a=-Math.cos(c),c=-Math.sin(c),new THREE.Vector2(a,c)):d.multiplyScalar(g).add(h).sub(a).clone()}function e(c,d){var e,f;for(A=c.length;0<=--A;){e=A;f=A-1;0>f&&(f=c.length-1);for(var g=0,h=r+2*m, +g=0;gMath.abs(c-i)?[new THREE.Vector2(b,1-e),new THREE.Vector2(d,1-f),new THREE.Vector2(j,1-g),new THREE.Vector2(p,1-a)]:[new THREE.Vector2(c,1-e),new THREE.Vector2(i,1-f),new THREE.Vector2(m,1-g),new THREE.Vector2(l,1-a)]}};THREE.ExtrudeGeometry.__v1=new THREE.Vector2;THREE.ExtrudeGeometry.__v2=new THREE.Vector2;THREE.ExtrudeGeometry.__v3=new THREE.Vector2;THREE.ExtrudeGeometry.__v4=new THREE.Vector2; +THREE.ExtrudeGeometry.__v5=new THREE.Vector2;THREE.ExtrudeGeometry.__v6=new THREE.Vector2;THREE.ShapeGeometry=function(a,b){THREE.Geometry.call(this);!1===a instanceof Array&&(a=[a]);this.shapebb=a[a.length-1].getBoundingBox();this.addShapeList(a,b);this.computeCentroids();this.computeFaceNormals()};THREE.ShapeGeometry.prototype=Object.create(THREE.Geometry.prototype);THREE.ShapeGeometry.prototype.addShapeList=function(a,b){for(var c=0,d=a.length;cc&&1===a.x&&(a=new THREE.Vector2(a.x-1,a.y));0===b.x&&0===b.z&&(a=new THREE.Vector2(c/2/Math.PI+0.5,a.y));return a.clone()}THREE.Geometry.call(this);for(var c=c||1,d=d||0,h=this,i=0,j=a.length;il&&(0.2>a&&(d[0].x+=1),0.2>b&&(d[1].x+=1),0.2>m&&(d[2].x+=1));this.mergeVertices();i=0;for(j=this.vertices.length;i=m){for(j=0;3>j;j++){m=[i[j],i[(j+1)%3]];p=!0;for(l=0;lh;h++)void 0===f[g[h]]&&(f[g[h]]=e++,this.vertices.push(a[g[h]])),g[h]=f[g[h]]}for(d=0;dc.y?this.quaternion.set(1,0,0,0):(a.set(c.z,0,-c.x).normalize(),b=Math.acos(c.y),this.quaternion.setFromAxisAngle(a,b))}}();THREE.ArrowHelper.prototype.setLength=function(a){this.scale.set(a,a,a)}; +THREE.ArrowHelper.prototype.setColor=function(a){this.line.material.color.setHex(a);this.cone.material.color.setHex(a)};THREE.BoxHelper=function(a){var a=a||1,b=new THREE.Geometry,a=[new THREE.Vector3(a,a,a),new THREE.Vector3(-a,a,a),new THREE.Vector3(-a,-a,a),new THREE.Vector3(a,-a,a),new THREE.Vector3(a,a,-a),new THREE.Vector3(-a,a,-a),new THREE.Vector3(-a,-a,-a),new THREE.Vector3(a,-a,-a)];b.vertices.push(a[0],a[1],a[1],a[2],a[2],a[3],a[3],a[0],a[4],a[5],a[5],a[6],a[6],a[7],a[7],a[4],a[0],a[4],a[1],a[5],a[2],a[6],a[3],a[7]);this.vertices=a;THREE.Line.call(this,b,new THREE.LineBasicMaterial,THREE.LinePieces)}; +THREE.BoxHelper.prototype=Object.create(THREE.Line.prototype); +THREE.BoxHelper.prototype.update=function(a){var b=a.geometry;null===b.boundingBox&&b.computeBoundingBox();var c=b.boundingBox.min,b=b.boundingBox.max,d=this.vertices;d[0].set(b.x,b.y,b.z);d[1].set(c.x,b.y,b.z);d[2].set(c.x,c.y,b.z);d[3].set(b.x,c.y,b.z);d[4].set(b.x,b.y,c.z);d[5].set(c.x,b.y,c.z);d[6].set(c.x,c.y,c.z);d[7].set(b.x,c.y,c.z);this.geometry.computeBoundingSphere();this.geometry.verticesNeedUpdate=!0;this.matrixAutoUpdate=!1;this.matrixWorld=a.matrixWorld};THREE.CameraHelper=function(a){function b(a,b,d){c(a,d);c(b,d)}function c(a,b){d.vertices.push(new THREE.Vector3);d.colors.push(new THREE.Color(b));void 0===f[a]&&(f[a]=[]);f[a].push(d.vertices.length-1)}THREE.Line.call(this);var d=new THREE.Geometry,e=new THREE.LineBasicMaterial({color:16777215,vertexColors:THREE.FaceColors}),f={};b("n1","n2",16755200);b("n2","n4",16755200);b("n4","n3",16755200);b("n3","n1",16755200);b("f1","f2",16755200);b("f2","f4",16755200);b("f4","f3",16755200);b("f3","f1",16755200); +b("n1","f1",16755200);b("n2","f2",16755200);b("n3","f3",16755200);b("n4","f4",16755200);b("p","n1",16711680);b("p","n2",16711680);b("p","n3",16711680);b("p","n4",16711680);b("u1","u2",43775);b("u2","u3",43775);b("u3","u1",43775);b("c","t",16777215);b("p","c",3355443);b("cn1","cn2",3355443);b("cn3","cn4",3355443);b("cf1","cf2",3355443);b("cf3","cf4",3355443);THREE.Line.call(this,d,e,THREE.LinePieces);this.camera=a;this.matrixWorld=a.matrixWorld;this.matrixAutoUpdate=!1;this.pointMap=f;this.update()}; +THREE.CameraHelper.prototype=Object.create(THREE.Line.prototype); +THREE.CameraHelper.prototype.update=function(){var a=new THREE.Vector3,b=new THREE.Camera,c=new THREE.Projector;return function(){function d(d,g,h,i){a.set(g,h,i);c.unprojectVector(a,b);d=e.pointMap[d];if(void 0!==d){g=0;for(h=d.length;gd;d++)c.faces[d].materialIndex=4>d?0:1;d=new THREE.MeshBasicMaterial({fog:!1,wireframe:!0});d.color.copy(a.color).multiplyScalar(a.intensity);var e=new THREE.MeshBasicMaterial({fog:!1,wireframe:!0});e.color.copy(a.groundColor).multiplyScalar(a.intensity);this.lightSphere=new THREE.Mesh(c,new THREE.MeshFaceMaterial([d, +e]));this.lightSphere.position=a.position;this.lightSphere.lookAt(new THREE.Vector3);this.add(this.lightSphere)};THREE.HemisphereLightHelper.prototype=Object.create(THREE.Object3D.prototype);THREE.HemisphereLightHelper.prototype.update=function(){this.lightSphere.lookAt(new THREE.Vector3);this.lightSphere.material.materials[0].color.copy(this.light.color).multiplyScalar(this.light.intensity);this.lightSphere.material.materials[1].color.copy(this.light.groundColor).multiplyScalar(this.light.intensity)};THREE.PointLightHelper=function(a,b){THREE.Object3D.call(this);this.matrixAutoUpdate=!1;this.light=a;var c=new THREE.SphereGeometry(b,4,2),d=new THREE.MeshBasicMaterial({fog:!1,wireframe:!0});d.color.copy(this.light.color).multiplyScalar(this.light.intensity);this.lightSphere=new THREE.Mesh(c,d);this.lightSphere.matrixWorld=this.light.matrixWorld;this.lightSphere.matrixAutoUpdate=!1;this.add(this.lightSphere)};THREE.PointLightHelper.prototype=Object.create(THREE.Object3D.prototype); +THREE.PointLightHelper.prototype.update=function(){this.lightSphere.material.color.copy(this.light.color).multiplyScalar(this.light.intensity)};THREE.SpotLightHelper=function(a,b){THREE.Object3D.call(this);this.matrixAutoUpdate=!1;this.light=a;var c=new THREE.SphereGeometry(b,4,2),d=new THREE.MeshBasicMaterial({fog:!1,wireframe:!0});d.color.copy(this.light.color).multiplyScalar(this.light.intensity);this.lightSphere=new THREE.Mesh(c,d);this.lightSphere.matrixWorld=this.light.matrixWorld;this.lightSphere.matrixAutoUpdate=!1;this.add(this.lightSphere);c=new THREE.CylinderGeometry(1E-4,1,1,8,1,!0);c.applyMatrix((new THREE.Matrix4).makeTranslation(0, +-0.5,0));c.applyMatrix((new THREE.Matrix4).makeRotationX(-Math.PI/2));d=new THREE.MeshBasicMaterial({fog:!1,wireframe:!0,opacity:0.3,transparent:!0});d.color.copy(this.light.color).multiplyScalar(this.light.intensity);this.lightCone=new THREE.Mesh(c,d);this.lightCone.position=this.light.position;c=a.distance?a.distance:1E4;d=c*Math.tan(a.angle);this.lightCone.scale.set(d,d,c);this.lightCone.lookAt(this.light.target.position);this.add(this.lightCone)};THREE.SpotLightHelper.prototype=Object.create(THREE.Object3D.prototype); +THREE.SpotLightHelper.prototype.update=function(){var a=this.light.distance?this.light.distance:1E4,b=a*Math.tan(this.light.angle);this.lightCone.scale.set(b,b,a);this.lightCone.lookAt(this.light.target.position);this.lightSphere.material.color.copy(this.light.color).multiplyScalar(this.light.intensity);this.lightCone.material.color.copy(this.light.color).multiplyScalar(this.light.intensity)};THREE.ImmediateRenderObject=function(){THREE.Object3D.call(this);this.render=function(){}};THREE.ImmediateRenderObject.prototype=Object.create(THREE.Object3D.prototype);THREE.LensFlare=function(a,b,c,d,e){THREE.Object3D.call(this);this.lensFlares=[];this.positionScreen=new THREE.Vector3;this.customUpdateCallback=void 0;void 0!==a&&this.add(a,b,c,d,e)};THREE.LensFlare.prototype=Object.create(THREE.Object3D.prototype); +THREE.LensFlare.prototype.add=function(a,b,c,d,e,f){void 0===b&&(b=-1);void 0===c&&(c=0);void 0===f&&(f=1);void 0===e&&(e=new THREE.Color(16777215));void 0===d&&(d=THREE.NormalBlending);c=Math.min(c,Math.max(0,c));this.lensFlares.push({texture:a,size:b,distance:c,x:0,y:0,z:0,scale:1,rotation:1,opacity:f,color:e,blending:d})}; +THREE.LensFlare.prototype.updateLensFlares=function(){var a,b=this.lensFlares.length,c,d=2*-this.positionScreen.x,e=2*-this.positionScreen.y;for(a=0;ah.end&&(h.end=f);c||(c=i)}}for(i in d)h=d[i],this.createAnimation(i,h.start,h.end,a);this.firstAnimation=c}; +THREE.MorphBlendMesh.prototype.setAnimationDirectionForward=function(a){if(a=this.animationsMap[a])a.direction=1,a.directionBackwards=!1};THREE.MorphBlendMesh.prototype.setAnimationDirectionBackward=function(a){if(a=this.animationsMap[a])a.direction=-1,a.directionBackwards=!0};THREE.MorphBlendMesh.prototype.setAnimationFPS=function(a,b){var c=this.animationsMap[a];c&&(c.fps=b,c.duration=(c.end-c.start)/c.fps)}; +THREE.MorphBlendMesh.prototype.setAnimationDuration=function(a,b){var c=this.animationsMap[a];c&&(c.duration=b,c.fps=(c.end-c.start)/c.duration)};THREE.MorphBlendMesh.prototype.setAnimationWeight=function(a,b){var c=this.animationsMap[a];c&&(c.weight=b)};THREE.MorphBlendMesh.prototype.setAnimationTime=function(a,b){var c=this.animationsMap[a];c&&(c.time=b)};THREE.MorphBlendMesh.prototype.getAnimationTime=function(a){var b=0;if(a=this.animationsMap[a])b=a.time;return b}; +THREE.MorphBlendMesh.prototype.getAnimationDuration=function(a){var b=-1;if(a=this.animationsMap[a])b=a.duration;return b};THREE.MorphBlendMesh.prototype.playAnimation=function(a){var b=this.animationsMap[a];b?(b.time=0,b.active=!0):console.warn("animation["+a+"] undefined")};THREE.MorphBlendMesh.prototype.stopAnimation=function(a){if(a=this.animationsMap[a])a.active=!1}; +THREE.MorphBlendMesh.prototype.update=function(a){for(var b=0,c=this.animationsList.length;bd.duration||0>d.time)d.direction*=-1,d.time>d.duration&&(d.time=d.duration,d.directionBackwards=!0),0>d.time&&(d.time=0,d.directionBackwards=!1)}else d.time%=d.duration,0>d.time&&(d.time+=d.duration);var f=d.startFrame+THREE.Math.clamp(Math.floor(d.time/e),0,d.length-1),g=d.weight; +f!==d.currentFrame&&(this.morphTargetInfluences[d.lastFrame]=0,this.morphTargetInfluences[d.currentFrame]=1*g,this.morphTargetInfluences[f]=0,d.lastFrame=d.currentFrame,d.currentFrame=f);e=d.time%e/e;d.directionBackwards&&(e=1-e);this.morphTargetInfluences[d.currentFrame]=e*g;this.morphTargetInfluences[d.lastFrame]=(1-e)*g}}};THREE.LensFlarePlugin=function(){function a(a,c){var d=b.createProgram(),e=b.createShader(b.FRAGMENT_SHADER),f=b.createShader(b.VERTEX_SHADER),g="precision "+c+" float;\n";b.shaderSource(e,g+a.fragmentShader);b.shaderSource(f,g+a.vertexShader);b.compileShader(e);b.compileShader(f);b.attachShader(d,e);b.attachShader(d,f);b.linkProgram(d);return d}var b,c,d,e,f,g,h,i,j,m,p,l,r;this.init=function(s){b=s.context;c=s;d=s.getPrecision();e=new Float32Array(16);f=new Uint16Array(6);s=0;e[s++]=-1;e[s++]=-1; +e[s++]=0;e[s++]=0;e[s++]=1;e[s++]=-1;e[s++]=1;e[s++]=0;e[s++]=1;e[s++]=1;e[s++]=1;e[s++]=1;e[s++]=-1;e[s++]=1;e[s++]=0;e[s++]=1;s=0;f[s++]=0;f[s++]=1;f[s++]=2;f[s++]=0;f[s++]=2;f[s++]=3;g=b.createBuffer();h=b.createBuffer();b.bindBuffer(b.ARRAY_BUFFER,g);b.bufferData(b.ARRAY_BUFFER,e,b.STATIC_DRAW);b.bindBuffer(b.ELEMENT_ARRAY_BUFFER,h);b.bufferData(b.ELEMENT_ARRAY_BUFFER,f,b.STATIC_DRAW);i=b.createTexture();j=b.createTexture();b.bindTexture(b.TEXTURE_2D,i);b.texImage2D(b.TEXTURE_2D,0,b.RGB,16,16, +0,b.RGB,b.UNSIGNED_BYTE,null);b.texParameteri(b.TEXTURE_2D,b.TEXTURE_WRAP_S,b.CLAMP_TO_EDGE);b.texParameteri(b.TEXTURE_2D,b.TEXTURE_WRAP_T,b.CLAMP_TO_EDGE);b.texParameteri(b.TEXTURE_2D,b.TEXTURE_MAG_FILTER,b.NEAREST);b.texParameteri(b.TEXTURE_2D,b.TEXTURE_MIN_FILTER,b.NEAREST);b.bindTexture(b.TEXTURE_2D,j);b.texImage2D(b.TEXTURE_2D,0,b.RGBA,16,16,0,b.RGBA,b.UNSIGNED_BYTE,null);b.texParameteri(b.TEXTURE_2D,b.TEXTURE_WRAP_S,b.CLAMP_TO_EDGE);b.texParameteri(b.TEXTURE_2D,b.TEXTURE_WRAP_T,b.CLAMP_TO_EDGE); +b.texParameteri(b.TEXTURE_2D,b.TEXTURE_MAG_FILTER,b.NEAREST);b.texParameteri(b.TEXTURE_2D,b.TEXTURE_MIN_FILTER,b.NEAREST);0>=b.getParameter(b.MAX_VERTEX_TEXTURE_IMAGE_UNITS)?(m=!1,p=a(THREE.ShaderFlares.lensFlare,d)):(m=!0,p=a(THREE.ShaderFlares.lensFlareVertexTexture,d));l={};r={};l.vertex=b.getAttribLocation(p,"position");l.uv=b.getAttribLocation(p,"uv");r.renderType=b.getUniformLocation(p,"renderType");r.map=b.getUniformLocation(p,"map");r.occlusionMap=b.getUniformLocation(p,"occlusionMap");r.opacity= +b.getUniformLocation(p,"opacity");r.color=b.getUniformLocation(p,"color");r.scale=b.getUniformLocation(p,"scale");r.rotation=b.getUniformLocation(p,"rotation");r.screenPosition=b.getUniformLocation(p,"screenPosition")};this.render=function(a,d,e,f){var a=a.__webglFlares,u=a.length;if(u){var x=new THREE.Vector3,t=f/e,E=0.5*e,J=0.5*f,F=16/f,z=new THREE.Vector2(F*t,F),H=new THREE.Vector3(1,1,0),K=new THREE.Vector2(1,1),G=r,F=l;b.useProgram(p);b.enableVertexAttribArray(l.vertex);b.enableVertexAttribArray(l.uv); +b.uniform1i(G.occlusionMap,0);b.uniform1i(G.map,1);b.bindBuffer(b.ARRAY_BUFFER,g);b.vertexAttribPointer(F.vertex,2,b.FLOAT,!1,16,0);b.vertexAttribPointer(F.uv,2,b.FLOAT,!1,16,8);b.bindBuffer(b.ELEMENT_ARRAY_BUFFER,h);b.disable(b.CULL_FACE);b.depthMask(!1);var L,B,V,C,I;for(L=0;Lz;z++)t[z]=new THREE.Vector3,u[z]=new THREE.Vector3;t=E.shadowCascadeNearZ[x];E=E.shadowCascadeFarZ[x];u[0].set(-1,-1,t);u[1].set(1,-1,t);u[2].set(-1, +1,t);u[3].set(1,1,t);u[4].set(-1,-1,E);u[5].set(1,-1,E);u[6].set(-1,1,E);u[7].set(1,1,E);F.originalCamera=l;u=new THREE.Gyroscope;u.position=n.shadowCascadeOffset;u.add(F);u.add(F.target);l.add(u);n.shadowCascadeArray[y]=F;console.log("Created virtualLight",F)}x=n;t=y;E=x.shadowCascadeArray[t];E.position.copy(x.position);E.target.position.copy(x.target.position);E.lookAt(E.target);E.shadowCameraVisible=x.shadowCameraVisible;E.shadowDarkness=x.shadowDarkness;E.shadowBias=x.shadowCascadeBias[t];u=x.shadowCascadeNearZ[t]; +x=x.shadowCascadeFarZ[t];E=E.pointsFrustum;E[0].z=u;E[1].z=u;E[2].z=u;E[3].z=u;E[4].z=x;E[5].z=x;E[6].z=x;E[7].z=x;J[q]=F;q++}else J[q]=n,q++;r=0;for(s=J.length;rx;x++)t=E[x],t.copy(u[x]),THREE.ShadowMapPlugin.__projector.unprojectVector(t,y),t.applyMatrix4(q.matrixWorldInverse),t.xj.x&&(j.x=t.x),t.yj.y&&(j.y=t.y),t.zj.z&& +(j.z=t.z);q.left=i.x;q.right=j.x;q.top=j.y;q.bottom=i.y;q.updateProjectionMatrix()}q=n.shadowMap;u=n.shadowMatrix;y=n.shadowCamera;y.position.getPositionFromMatrix(n.matrixWorld);m.getPositionFromMatrix(n.target.matrixWorld);y.lookAt(m);y.updateMatrixWorld();y.matrixWorldInverse.getInverse(y.matrixWorld);n.cameraHelper&&(n.cameraHelper.visible=n.shadowCameraVisible);n.shadowCameraVisible&&n.cameraHelper.update();u.set(0.5,0,0,0.5,0,0.5,0,0.5,0,0,0.5,0.5,0,0,0,1);u.multiply(y.projectionMatrix);u.multiply(y.matrixWorldInverse); +h.multiplyMatrices(y.projectionMatrix,y.matrixWorldInverse);g.setFromMatrix(h);b.setRenderTarget(q);b.clear();E=p.__webglObjects;n=0;for(q=E.length;n 0 ) {\nfloat depth = gl_FragCoord.z / gl_FragCoord.w;\nfloat fogFactor = 0.0;\nif ( fogType == 1 ) {\nfogFactor = smoothstep( fogNear, fogFar, depth );\n} else {\nconst float LOG2 = 1.442695;\nfloat fogFactor = exp2( - fogDensity * fogDensity * depth * depth * LOG2 );\nfogFactor = 1.0 - clamp( fogFactor, 0.0, 1.0 );\n}\ngl_FragColor = mix( gl_FragColor, vec4( fogColor, gl_FragColor.w ), fogFactor );\n}\n}"}};